diff --git a/app/Broadcasting/PrivateChannel.php b/app/Broadcasting/PrivateChannel.php index ebed24bfc..c98971ace 100644 --- a/app/Broadcasting/PrivateChannel.php +++ b/app/Broadcasting/PrivateChannel.php @@ -21,7 +21,7 @@ public function __construct() * * @return array|bool */ - public function join(User $user) + public function join( User $user ) { return true; } diff --git a/app/Casts/CurrencyCast.php b/app/Casts/CurrencyCast.php index b39321a4b..6970f9572 100644 --- a/app/Casts/CurrencyCast.php +++ b/app/Casts/CurrencyCast.php @@ -9,23 +9,23 @@ class CurrencyCast implements CastsAttributes /** * Cast the given value. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function get($model, string $key, $value, array $attributes) + public function get( $model, string $key, $value, array $attributes ) { - return (string) ns()->currency->define($value); + return (string) ns()->currency->define( $value ); } /** * Prepare the given value for storage. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function set($model, string $key, $value, array $attributes) + public function set( $model, string $key, $value, array $attributes ) { return $value; } diff --git a/app/Casts/DateCast.php b/app/Casts/DateCast.php index 77bb0c821..d719343b4 100644 --- a/app/Casts/DateCast.php +++ b/app/Casts/DateCast.php @@ -9,16 +9,16 @@ class DateCast implements CastsAttributes /** * Cast the given value. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param string $key - * @param mixed $value - * @param array $attributes + * @param \Illuminate\Database\Eloquent\Model $model + * @param string $key + * @param mixed $value + * @param array $attributes * @return mixed */ - public function get($model, $key, $value, $attributes) + public function get( $model, $key, $value, $attributes ) { - if ($value !== null) { - return ns()->date->getFormatted($value); + if ( $value !== null ) { + return ns()->date->getFormatted( $value ); } return $value; @@ -27,13 +27,13 @@ public function get($model, $key, $value, $attributes) /** * Prepare the given value for storage. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param string $key - * @param array $value - * @param array $attributes + * @param \Illuminate\Database\Eloquent\Model $model + * @param string $key + * @param array $value + * @param array $attributes * @return mixed */ - public function set($model, $key, $value, $attributes) + public function set( $model, $key, $value, $attributes ) { return $value; } diff --git a/app/Casts/DiscountTypeCast.php b/app/Casts/DiscountTypeCast.php index e2ff4261c..dd184cd22 100644 --- a/app/Casts/DiscountTypeCast.php +++ b/app/Casts/DiscountTypeCast.php @@ -9,27 +9,27 @@ class DiscountTypeCast implements CastsAttributes /** * Cast the given value. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function get($model, string $key, $value, array $attributes) + public function get( $model, string $key, $value, array $attributes ) { - return match ($value) { - 'percentage_discount' => __('Percentage'), - 'flat_discount' => __('Flat'), - default => __('Unknown Type'), + return match ( $value ) { + 'percentage_discount' => __( 'Percentage' ), + 'flat_discount' => __( 'Flat' ), + default => __( 'Unknown Type' ), }; } /** * Prepare the given value for storage. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function set($model, string $key, $value, array $attributes) + public function set( $model, string $key, $value, array $attributes ) { return $value; } diff --git a/app/Casts/FloatConvertCasting.php b/app/Casts/FloatConvertCasting.php index 60db2ec34..1f42745bc 100644 --- a/app/Casts/FloatConvertCasting.php +++ b/app/Casts/FloatConvertCasting.php @@ -9,23 +9,23 @@ class FloatConvertCasting implements CastsAttributes /** * Cast the given value. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function get($model, string $key, $value, array $attributes) + public function get( $model, string $key, $value, array $attributes ) { - return ns()->math->set($value ?: 0)->toFloat(); + return ns()->math->set( $value ?: 0 )->toFloat(); } /** * Prepare the given value for storage. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function set($model, string $key, $value, array $attributes) + public function set( $model, string $key, $value, array $attributes ) { return $value; } diff --git a/app/Casts/GenderCast.php b/app/Casts/GenderCast.php index 1f5586bc5..084c2212a 100644 --- a/app/Casts/GenderCast.php +++ b/app/Casts/GenderCast.php @@ -9,27 +9,27 @@ class GenderCast implements CastsAttributes /** * Cast the given value. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function get($model, string $key, $value, array $attributes) + public function get( $model, string $key, $value, array $attributes ) { - return match ($value) { - 'male' => __('Male'), - 'female' => __('Female'), - default => __('Not Defined'), + return match ( $value ) { + 'male' => __( 'Male' ), + 'female' => __( 'Female' ), + default => __( 'Not Defined' ), }; } /** * Prepare the given value for storage. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function set($model, string $key, $value, array $attributes) + public function set( $model, string $key, $value, array $attributes ) { return $value; } diff --git a/app/Casts/NotDefinedCast.php b/app/Casts/NotDefinedCast.php index 8307b7759..0b3186ceb 100644 --- a/app/Casts/NotDefinedCast.php +++ b/app/Casts/NotDefinedCast.php @@ -9,23 +9,23 @@ class NotDefinedCast implements CastsAttributes /** * Cast the given value. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function get($model, string $key, $value, array $attributes) + public function get( $model, string $key, $value, array $attributes ) { - return empty($value) ? __('Not Defined') : $value; + return empty( $value ) ? __( 'Not Defined' ) : $value; } /** * Prepare the given value for storage. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function set($model, string $key, $value, array $attributes) + public function set( $model, string $key, $value, array $attributes ) { return $value; } diff --git a/app/Casts/OrderDeliveryCast.php b/app/Casts/OrderDeliveryCast.php index 977410225..4e4b912ed 100644 --- a/app/Casts/OrderDeliveryCast.php +++ b/app/Casts/OrderDeliveryCast.php @@ -10,28 +10,28 @@ class OrderDeliveryCast implements CastsAttributes /** * Cast the given value. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function get($model, string $key, $value, array $attributes) + public function get( $model, string $key, $value, array $attributes ) { /** * @var OrdersService $orderService */ - $orderService = app()->make(OrdersService::class); + $orderService = app()->make( OrdersService::class ); - return $orderService->getDeliveryStatus($value); + return $orderService->getDeliveryStatus( $value ); } /** * Prepare the given value for storage. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function set($model, string $key, $value, array $attributes) + public function set( $model, string $key, $value, array $attributes ) { return $value; } diff --git a/app/Casts/OrderPaymentCast.php b/app/Casts/OrderPaymentCast.php index 65d4ea642..48b71f306 100644 --- a/app/Casts/OrderPaymentCast.php +++ b/app/Casts/OrderPaymentCast.php @@ -9,23 +9,23 @@ class OrderPaymentCast implements CastsAttributes /** * Cast the given value. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function get($model, string $key, $value, array $attributes) + public function get( $model, string $key, $value, array $attributes ) { - return ns()->order->getPaymentLabel($value); + return ns()->order->getPaymentLabel( $value ); } /** * Prepare the given value for storage. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function set($model, string $key, $value, array $attributes) + public function set( $model, string $key, $value, array $attributes ) { return $value; } diff --git a/app/Casts/OrderProcessCast.php b/app/Casts/OrderProcessCast.php index 619610bb1..68b59fc17 100644 --- a/app/Casts/OrderProcessCast.php +++ b/app/Casts/OrderProcessCast.php @@ -10,28 +10,28 @@ class OrderProcessCast implements CastsAttributes /** * Cast the given value. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function get($model, string $key, $value, array $attributes) + public function get( $model, string $key, $value, array $attributes ) { /** * @var OrdersService $orderService */ - $orderService = app()->make(OrdersService::class); + $orderService = app()->make( OrdersService::class ); - return $orderService->getProcessStatus($value); + return $orderService->getProcessStatus( $value ); } /** * Prepare the given value for storage. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function set($model, string $key, $value, array $attributes) + public function set( $model, string $key, $value, array $attributes ) { return $value; } diff --git a/app/Casts/OrderTypeCast.php b/app/Casts/OrderTypeCast.php index 5cb66beb4..f383cf878 100644 --- a/app/Casts/OrderTypeCast.php +++ b/app/Casts/OrderTypeCast.php @@ -10,28 +10,28 @@ class OrderTypeCast implements CastsAttributes /** * Cast the given value. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function get($model, string $key, $value, array $attributes) + public function get( $model, string $key, $value, array $attributes ) { /** * @var OrdersService $orderService */ - $orderService = app()->make(OrdersService::class); + $orderService = app()->make( OrdersService::class ); - return $orderService->getTypeLabel($value); + return $orderService->getTypeLabel( $value ); } /** * Prepare the given value for storage. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function set($model, string $key, $value, array $attributes) + public function set( $model, string $key, $value, array $attributes ) { return $value; } diff --git a/app/Casts/ProductHistoryActionCast.php b/app/Casts/ProductHistoryActionCast.php index 9b7a9e27a..0b851ffd0 100644 --- a/app/Casts/ProductHistoryActionCast.php +++ b/app/Casts/ProductHistoryActionCast.php @@ -12,11 +12,11 @@ class ProductHistoryActionCast implements CastsAttributes /** * Cast the given value. * - * @param array $attributes + * @param array $attributes */ - public function get(Model|CrudEntry $model, string $key, mixed $value, array $attributes): mixed + public function get( Model|CrudEntry $model, string $key, mixed $value, array $attributes ): mixed { - switch ($value) { + switch ( $value ) { case ProductHistory::ACTION_ADDED : case ProductHistory::ACTION_ADJUSTMENT_RETURN : case ProductHistory::ACTION_RETURNED : @@ -31,35 +31,35 @@ public function get(Model|CrudEntry $model, string $key, mixed $value, array $at break; } - return match ($value) { - ProductHistory::ACTION_SET => __('Assignation'), - ProductHistory::ACTION_STOCKED => __('Stocked'), - ProductHistory::ACTION_DEFECTIVE => __('Defective'), - ProductHistory::ACTION_DELETED => __('Deleted'), - ProductHistory::ACTION_REMOVED => __('Removed'), - ProductHistory::ACTION_RETURNED => __('Returned'), - ProductHistory::ACTION_SOLD => __('Sold'), - ProductHistory::ACTION_LOST => __('Lost'), - ProductHistory::ACTION_ADDED => __('Added'), - ProductHistory::ACTION_TRANSFER_IN => __('Incoming Transfer'), - ProductHistory::ACTION_TRANSFER_OUT => __('Outgoing Transfer'), - ProductHistory::ACTION_TRANSFER_REJECTED => __('Transfer Rejected'), - ProductHistory::ACTION_TRANSFER_CANCELED => __('Transfer Canceled'), - ProductHistory::ACTION_VOID_RETURN => __('Void Return'), - ProductHistory::ACTION_ADJUSTMENT_RETURN => __('Adjustment Return'), - ProductHistory::ACTION_ADJUSTMENT_SALE => __('Adjustment Sale'), - ProductHistory::ACTION_CONVERT_IN => __('Incoming Conversion'), - ProductHistory::ACTION_CONVERT_OUT => __('Outgoing Conversion'), - default => __('Unknown Action'), + return match ( $value ) { + ProductHistory::ACTION_SET => __( 'Assignation' ), + ProductHistory::ACTION_STOCKED => __( 'Stocked' ), + ProductHistory::ACTION_DEFECTIVE => __( 'Defective' ), + ProductHistory::ACTION_DELETED => __( 'Deleted' ), + ProductHistory::ACTION_REMOVED => __( 'Removed' ), + ProductHistory::ACTION_RETURNED => __( 'Returned' ), + ProductHistory::ACTION_SOLD => __( 'Sold' ), + ProductHistory::ACTION_LOST => __( 'Lost' ), + ProductHistory::ACTION_ADDED => __( 'Added' ), + ProductHistory::ACTION_TRANSFER_IN => __( 'Incoming Transfer' ), + ProductHistory::ACTION_TRANSFER_OUT => __( 'Outgoing Transfer' ), + ProductHistory::ACTION_TRANSFER_REJECTED => __( 'Transfer Rejected' ), + ProductHistory::ACTION_TRANSFER_CANCELED => __( 'Transfer Canceled' ), + ProductHistory::ACTION_VOID_RETURN => __( 'Void Return' ), + ProductHistory::ACTION_ADJUSTMENT_RETURN => __( 'Adjustment Return' ), + ProductHistory::ACTION_ADJUSTMENT_SALE => __( 'Adjustment Sale' ), + ProductHistory::ACTION_CONVERT_IN => __( 'Incoming Conversion' ), + ProductHistory::ACTION_CONVERT_OUT => __( 'Outgoing Conversion' ), + default => __( 'Unknown Action' ), }; } /** * Prepare the given value for storage. * - * @param array $attributes + * @param array $attributes */ - public function set(Model $model, string $key, mixed $value, array $attributes): mixed + public function set( Model $model, string $key, mixed $value, array $attributes ): mixed { return $value; } diff --git a/app/Casts/ProductTypeCast.php b/app/Casts/ProductTypeCast.php new file mode 100644 index 000000000..29ffa3d85 --- /dev/null +++ b/app/Casts/ProductTypeCast.php @@ -0,0 +1,42 @@ + $attributes + */ + public function get( Model|CrudEntry $model, string $key, mixed $value, array $attributes ): mixed + { + $class = match ( $value ) { + 'grouped' => 'text-success-tertiary', + default => 'text-info-tertiary' + }; + + $value = match ( $value ) { + 'materialized' => __( 'Materialized' ), + 'dematerialized' => __( 'Dematerialized' ), + 'grouped' => __( 'Grouped' ), + default => sprintf( __( 'Unknown Type: %s' ), $value ), + }; + + return '' . $value . ''; + } + + /** + * Prepare the given value for storage. + * + * @param array $attributes + */ + public function set( Model $model, string $key, mixed $value, array $attributes ): mixed + { + return $value; + } +} diff --git a/app/Casts/TransactionOccurrenceCast.php b/app/Casts/TransactionOccurrenceCast.php index 7f028eb55..053ee4244 100644 --- a/app/Casts/TransactionOccurrenceCast.php +++ b/app/Casts/TransactionOccurrenceCast.php @@ -10,31 +10,31 @@ class TransactionOccurrenceCast implements CastsAttributes /** * Cast the given value. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function get($model, string $key, $value, array $attributes) + public function get( $model, string $key, $value, array $attributes ) { - return match ($value) { - Transaction::OCCURRENCE_X_AFTER_MONTH_STARTS => __('Month Starts'), - Transaction::OCCURRENCE_MIDDLE_OF_MONTH => __('Month Middle'), - Transaction::OCCURRENCE_END_OF_MONTH => __('Month Ends'), - Transaction::OCCURRENCE_X_AFTER_MONTH_STARTS => __('X Days After Month Starts'), - Transaction::OCCURRENCE_X_BEFORE_MONTH_ENDS => __('X Days Before Month Ends'), - Transaction::OCCURRENCE_SPECIFIC_DAY => __('On Specific Day'), - default => __('Unknown Occurance') + return match ( $value ) { + Transaction::OCCURRENCE_X_AFTER_MONTH_STARTS => __( 'Month Starts' ), + Transaction::OCCURRENCE_MIDDLE_OF_MONTH => __( 'Month Middle' ), + Transaction::OCCURRENCE_END_OF_MONTH => __( 'Month Ends' ), + Transaction::OCCURRENCE_X_AFTER_MONTH_STARTS => __( 'X Days After Month Starts' ), + Transaction::OCCURRENCE_X_BEFORE_MONTH_ENDS => __( 'X Days Before Month Ends' ), + Transaction::OCCURRENCE_SPECIFIC_DAY => __( 'On Specific Day' ), + default => __( 'Unknown Occurance' ) }; } /** * Prepare the given value for storage. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function set($model, string $key, $value, array $attributes) + public function set( $model, string $key, $value, array $attributes ) { return $value; } diff --git a/app/Casts/TransactionTypeCast.php b/app/Casts/TransactionTypeCast.php index 3d2daa132..d9a80c348 100644 --- a/app/Casts/TransactionTypeCast.php +++ b/app/Casts/TransactionTypeCast.php @@ -10,29 +10,29 @@ class TransactionTypeCast implements CastsAttributes /** * Cast the given value. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function get($model, string $key, $value, array $attributes) + public function get( $model, string $key, $value, array $attributes ) { - return match ($value) { - Transaction::TYPE_DIRECT => __('Direct Transaction'), - Transaction::TYPE_RECURRING => __('Recurring Transaction'), - Transaction::TYPE_ENTITY => __('Entity Transaction'), - Transaction::TYPE_SCHEDULED => __('Scheduled Transaction'), - default => sprintf(__('Unknown Type (%s)'), $value), + return match ( $value ) { + Transaction::TYPE_DIRECT => __( 'Direct Transaction' ), + Transaction::TYPE_RECURRING => __( 'Recurring Transaction' ), + Transaction::TYPE_ENTITY => __( 'Entity Transaction' ), + Transaction::TYPE_SCHEDULED => __( 'Scheduled Transaction' ), + default => sprintf( __( 'Unknown Type (%s)' ), $value ), }; } /** * Prepare the given value for storage. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function set($model, string $key, $value, array $attributes) + public function set( $model, string $key, $value, array $attributes ) { return $value; } diff --git a/app/Casts/YesNoBoolCast.php b/app/Casts/YesNoBoolCast.php index 3ab83cf77..ff6fcc245 100644 --- a/app/Casts/YesNoBoolCast.php +++ b/app/Casts/YesNoBoolCast.php @@ -9,23 +9,23 @@ class YesNoBoolCast implements CastsAttributes /** * Cast the given value. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function get($model, string $key, $value, array $attributes) + public function get( $model, string $key, $value, array $attributes ) { - return (bool) $value ? __('Yes') : __('No'); + return (bool) $value ? __( 'Yes' ) : __( 'No' ); } /** * Prepare the given value for storage. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param mixed $value + * @param \Illuminate\Database\Eloquent\Model $model + * @param mixed $value * @return mixed */ - public function set($model, string $key, $value, array $attributes) + public function set( $model, string $key, $value, array $attributes ) { return $value; } diff --git a/app/Classes/Currency.php b/app/Classes/Currency.php index d04cbbe67..242d3bc24 100644 --- a/app/Classes/Currency.php +++ b/app/Classes/Currency.php @@ -6,9 +6,9 @@ class Currency { - public static function define($amount) + public static function define( $amount ) { - return ns()->currency->define($amount); + return ns()->currency->define( $amount ); } /** @@ -17,13 +17,13 @@ public static function define($amount) * * @param float $amount */ - public static function fresh($amount): CurrencyService + public static function fresh( $amount ): CurrencyService { - return ns()->currency->fresh($amount); + return ns()->currency->fresh( $amount ); } - public static function raw($amount) + public static function raw( $amount ) { - return ns()->currency->getRaw($amount); + return ns()->currency->getRaw( $amount ); } } diff --git a/app/Classes/Output.php b/app/Classes/Output.php index 5ea666894..8ee68b9e5 100644 --- a/app/Classes/Output.php +++ b/app/Classes/Output.php @@ -8,14 +8,14 @@ class Output { protected $output = []; - public function addOutput($view) + public function addOutput( $view ) { $this->output[] = $view; } - public function addView($view, $options = []) + public function addView( $view, $options = [] ) { - $this->output[] = View::make($view, $options); + $this->output[] = View::make( $view, $options ); return $this; } @@ -25,15 +25,15 @@ public function clear() $this->output = []; } - public function setOutput($view) + public function setOutput( $view ) { $this->output = [ $view ]; } public function __toString() { - return collect($this->output) - ->map(fn($output) => (string) $output) - ->join(''); + return collect( $this->output ) + ->map( fn( $output ) => (string) $output ) + ->join( '' ); } } diff --git a/app/Classes/Schema.php b/app/Classes/Schema.php index d0f9e8c3f..4b35d73fd 100644 --- a/app/Classes/Schema.php +++ b/app/Classes/Schema.php @@ -6,52 +6,52 @@ class Schema extends ParentSchema { - public static function table($table, $callback) + public static function table( $table, $callback ) { - return parent::table(Hook::filter('ns-table-name', $table), $callback); + return parent::table( Hook::filter( 'ns-table-name', $table ), $callback ); } - public static function rename($previous, $new) + public static function rename( $previous, $new ) { - return parent::rename(Hook::filter('ns-table-name', $previous), Hook::filter('ns-table-name', $new)); + return parent::rename( Hook::filter( 'ns-table-name', $previous ), Hook::filter( 'ns-table-name', $new ) ); } - public static function create($table, $callback) + public static function create( $table, $callback ) { - return parent::create(Hook::filter('ns-table-name', $table), $callback); + return parent::create( Hook::filter( 'ns-table-name', $table ), $callback ); } - public static function createIfMissing($table, $callback) + public static function createIfMissing( $table, $callback ) { - if (! parent::hasTable(Hook::filter('ns-table-name', $table))) { - return parent::create(Hook::filter('ns-table-name', $table), $callback); + if ( ! parent::hasTable( Hook::filter( 'ns-table-name', $table ) ) ) { + return parent::create( Hook::filter( 'ns-table-name', $table ), $callback ); } return null; } - public static function hasColumn($table, $column) + public static function hasColumn( $table, $column ) { - return parent::hasColumn(Hook::filter('ns-table-name', $table), $column); + return parent::hasColumn( Hook::filter( 'ns-table-name', $table ), $column ); } - public static function hasTable($table) + public static function hasTable( $table ) { - return parent::hasTable(Hook::filter('ns-table-name', $table)); + return parent::hasTable( Hook::filter( 'ns-table-name', $table ) ); } - public static function hasColumns($table, $columns) + public static function hasColumns( $table, $columns ) { - return parent::hasColumns(Hook::filter('ns-table-name', $table), $columns); + return parent::hasColumns( Hook::filter( 'ns-table-name', $table ), $columns ); } - public static function dropIfExists($table) + public static function dropIfExists( $table ) { - return parent::dropIfExists(Hook::filter('ns-table-name', $table)); + return parent::dropIfExists( Hook::filter( 'ns-table-name', $table ) ); } - public static function drop($table) + public static function drop( $table ) { - return parent::drop(Hook::filter('ns-table-name', $table)); + return parent::drop( Hook::filter( 'ns-table-name', $table ) ); } } diff --git a/app/Console/Commands/ComputeDailyReportCommand.php b/app/Console/Commands/ComputeDailyReportCommand.php index 0b597a6fd..0a967d5cf 100644 --- a/app/Console/Commands/ComputeDailyReportCommand.php +++ b/app/Console/Commands/ComputeDailyReportCommand.php @@ -39,10 +39,10 @@ public function __construct() */ public function handle() { - if ($this->option('compute')) { - if ($this->option('type') === 'day') { + if ( $this->option( 'compute' ) ) { + if ( $this->option( 'type' ) === 'day' ) { $this->computeDayReport(); - } elseif ($this->option('type') === 'month') { + } elseif ( $this->option( 'type' ) === 'month' ) { $this->computeMonthReport(); } } @@ -50,84 +50,84 @@ public function handle() public function computeMonthReport() { - $from = Carbon::parse($this->option('from')); + $from = Carbon::parse( $this->option( 'from' ) ); $monthCursor = $from->copy(); $currentDate = ns()->date->getNow(); - $dates = collect([]); + $dates = collect( [] ); - while (! $monthCursor->isSameMonth($currentDate->copy()->addMonth())) { - $dates->push($monthCursor->copy()); + while ( ! $monthCursor->isSameMonth( $currentDate->copy()->addMonth() ) ) { + $dates->push( $monthCursor->copy() ); $monthCursor->addMonth(); } - if ($dates->count() === 0) { - return $this->error(__('An invalid date were provided. Make sure it a prior date to the actual server date.')); + if ( $dates->count() === 0 ) { + return $this->error( __( 'An invalid date were provided. Make sure it a prior date to the actual server date.' ) ); } - $this->info(sprintf( - __('Computing report from %s...'), - $from->format('Y-m'), - )); + $this->info( sprintf( + __( 'Computing report from %s...' ), + $from->format( 'Y-m' ), + ) ); $this->newLine(); /** * @var ReportService */ - $reportService = app()->make(ReportService::class); + $reportService = app()->make( ReportService::class ); /** * let's show how it progresses */ - $this->withProgressBar($dates, function ($date) use ($reportService) { - $reportService->computeDashboardMonth($date); - }); + $this->withProgressBar( $dates, function ( $date ) use ( $reportService ) { + $reportService->computeDashboardMonth( $date ); + } ); $this->newLine(); - $this->info(__('The operation was successful.')); + $this->info( __( 'The operation was successful.' ) ); } public function computeDayReport() { - $from = Carbon::parse($this->option('from')); + $from = Carbon::parse( $this->option( 'from' ) ); $dayCursor = $from->copy(); $currentDate = ns()->date->getNow(); - $dates = collect([]); + $dates = collect( [] ); - while (! $dayCursor->isSameDay($currentDate->copy()->addDay())) { - $dates->push($dayCursor->copy()); + while ( ! $dayCursor->isSameDay( $currentDate->copy()->addDay() ) ) { + $dates->push( $dayCursor->copy() ); $dayCursor->addDay(); } - if ($dates->count() === 0) { - return $this->error(__('An invalid date were provided. Make sure it a prior date to the actual server date.')); + if ( $dates->count() === 0 ) { + return $this->error( __( 'An invalid date were provided. Make sure it a prior date to the actual server date.' ) ); } - $this->info(sprintf( - __('Computing report from %s...'), - $from->format('Y-m-d'), - )); + $this->info( sprintf( + __( 'Computing report from %s...' ), + $from->format( 'Y-m-d' ), + ) ); $this->newLine(); /** * @var ReportService */ - $reportService = app()->make(ReportService::class); + $reportService = app()->make( ReportService::class ); /** * let's show how it progresses */ - $this->withProgressBar($dates, function ($date) use ($reportService) { + $this->withProgressBar( $dates, function ( $date ) use ( $reportService ) { $reportService->computeDayReport( $date->startOfDay()->toDateTimeString(), $date->endOfDay()->toDateTimeString() ); - }); + } ); $this->newLine(); - $this->info(__('The operation was successful.')); + $this->info( __( 'The operation was successful.' ) ); } } diff --git a/app/Console/Commands/CreateUserCommand.php b/app/Console/Commands/CreateUserCommand.php index 543b9ca2d..ae0739690 100644 --- a/app/Console/Commands/CreateUserCommand.php +++ b/app/Console/Commands/CreateUserCommand.php @@ -55,16 +55,16 @@ public function handle() /** * We might need to throttle this command. */ - if (Role::namespace('admin')->users->count() > 0) { - $this->line('Administrator Authentication'); - $username = $this->ask('Provide your username'); - $password = $this->secret('Provide your password'); + if ( Role::namespace( 'admin' )->users->count() > 0 ) { + $this->line( 'Administrator Authentication' ); + $username = $this->ask( 'Provide your username' ); + $password = $this->secret( 'Provide your password' ); - if (! Auth::attempt(compact('username', 'password'))) { - return $this->error('Incorrect username or password.'); + if ( ! Auth::attempt( compact( 'username', 'password' ) ) ) { + return $this->error( 'Incorrect username or password.' ); } - $this->info('You\'re authenticated'); + $this->info( 'You\'re authenticated' ); } /** @@ -72,7 +72,7 @@ public function handle() * * @return bool */ - if ($this->checkUsername() === false) { + if ( $this->checkUsername() === false ) { return true; } @@ -81,7 +81,7 @@ public function handle() * * @return bool */ - if ($this->checkEmail() === false) { + if ( $this->checkEmail() === false ) { return true; } @@ -90,7 +90,7 @@ public function handle() * * @return bool */ - if ($this->checkPassword() === false) { + if ( $this->checkPassword() === false ) { return true; } @@ -99,7 +99,7 @@ public function handle() * * @return bool */ - if ($this->checkPasswordConfirm() === false) { + if ( $this->checkPasswordConfirm() === false ) { return true; } @@ -108,23 +108,23 @@ public function handle() * * @return bool */ - if ($this->checkRole() === false) { + if ( $this->checkRole() === false ) { return true; } - if (User::whereUsername($this->username)->first()) { - return $this->error('The username is already in use.'); + if ( User::whereUsername( $this->username )->first() ) { + return $this->error( 'The username is already in use.' ); } - if (strlen($this->password) < 5) { - return $this->error('The provided password is too short.'); + if ( strlen( $this->password ) < 5 ) { + return $this->error( 'The provided password is too short.' ); } $user = new User; $user->username = $this->username; $user->email = $this->email; - $user->password = Hash::make($this->password); - $user->role_id = Role::namespace($this->role)->firstOrFail()->id; + $user->password = Hash::make( $this->password ); + $user->role_id = Role::namespace( $this->role )->firstOrFail()->id; $user->save(); /** @@ -136,20 +136,20 @@ public function handle() $user->active = Auth::user() instanceof User ? 1 : 0; $user->save(); - $this->info('A new account has been created'); + $this->info( 'A new account has been created' ); } public function checkRole() { - while (true) { - $this->role = $this->anticipate('New Account Role. [Q] Quit', Role::get()->map(fn($role) => $role->namespace)->toArray()); + while ( true ) { + $this->role = $this->anticipate( 'New Account Role. [Q] Quit', Role::get()->map( fn( $role ) => $role->namespace )->toArray() ); - if ($this->role === 'Q') { + if ( $this->role === 'Q' ) { return false; } - if (! Role::namespace($this->role)->first() instanceof Role) { - $this->error('The provided role identifier is not valid.'); + if ( ! Role::namespace( $this->role )->first() instanceof Role ) { + $this->error( 'The provided role identifier is not valid.' ); } else { break; } @@ -158,15 +158,15 @@ public function checkRole() public function checkPasswordConfirm() { - while (true) { - $this->password_confirm = $this->secret('New Account Password Confirmation. [Q] Quit'); + while ( true ) { + $this->password_confirm = $this->secret( 'New Account Password Confirmation. [Q] Quit' ); - if ($this->password_confirm === 'Q') { + if ( $this->password_confirm === 'Q' ) { return false; } - if ($this->password_confirm !== $this->password) { - $this->error('The password confirmation doesn\'t match the password.'); + if ( $this->password_confirm !== $this->password ) { + $this->error( 'The password confirmation doesn\'t match the password.' ); } else { break; } @@ -175,15 +175,15 @@ public function checkPasswordConfirm() public function checkPassword() { - while (true) { - $this->password = $this->secret('New Account Password. [Q] Quit.'); + while ( true ) { + $this->password = $this->secret( 'New Account Password. [Q] Quit.' ); - if ($this->password === 'Q') { + if ( $this->password === 'Q' ) { return false; } - if (strlen($this->password) < 5) { - $this->error('The provided password is too short.'); + if ( strlen( $this->password ) < 5 ) { + $this->error( 'The provided password is too short.' ); } else { break; } @@ -192,25 +192,25 @@ public function checkPassword() public function checkEmail() { - while (true) { - $this->email = $this->ask('New Account Email. [Q] Quit.'); + while ( true ) { + $this->email = $this->ask( 'New Account Email. [Q] Quit.' ); - $validator = Validator::make([ + $validator = Validator::make( [ 'email' => $this->email, ], [ 'email' => 'required|email', - ]); + ] ); - if ($this->email === 'Q') { + if ( $this->email === 'Q' ) { return false; } - if (User::whereUsername($this->username)->first() instanceof User) { - return $this->error('The username is already in use.'); + if ( User::whereUsername( $this->username )->first() instanceof User ) { + return $this->error( 'The username is already in use.' ); } - if ($validator->fails()) { - $this->error('The provided email is not valid.'); + if ( $validator->fails() ) { + $this->error( 'The provided email is not valid.' ); } else { break; } @@ -219,25 +219,25 @@ public function checkEmail() public function checkUsername() { - while (true) { - $this->username = $this->ask('New Account Username. [Q] Quit.'); + while ( true ) { + $this->username = $this->ask( 'New Account Username. [Q] Quit.' ); - $validator = Validator::make([ + $validator = Validator::make( [ 'username' => $this->username, ], [ 'username' => 'required|min:5', - ]); + ] ); - if ($this->username === 'Q') { + if ( $this->username === 'Q' ) { return false; } - if (User::whereUsername($this->username)->first() instanceof User) { - return $this->error('The username is already in use.'); + if ( User::whereUsername( $this->username )->first() instanceof User ) { + return $this->error( 'The username is already in use.' ); } - if ($validator->fails()) { - $this->error('The provided username is not valid.'); + if ( $validator->fails() ) { + $this->error( 'The provided username is not valid.' ); } else { break; } diff --git a/app/Console/Commands/CrudGeneratorCommand.php b/app/Console/Commands/CrudGeneratorCommand.php index 1d53dfa34..d52795236 100644 --- a/app/Console/Commands/CrudGeneratorCommand.php +++ b/app/Console/Commands/CrudGeneratorCommand.php @@ -46,14 +46,14 @@ public function __construct() */ public function handle() { - $moduleNamespace = $this->argument('module'); + $moduleNamespace = $this->argument( 'module' ); - if (! empty($moduleNamespace)) { - $modulesService = app()->make(ModulesService::class); - $module = $modulesService->get($moduleNamespace); + if ( ! empty( $moduleNamespace ) ) { + $modulesService = app()->make( ModulesService::class ); + $module = $modulesService->get( $moduleNamespace ); - if (empty($module)) { - throw new Exception(sprintf(__('Unable to find a module having the identifier/namespace "%s"'), $moduleNamespace)); + if ( empty( $module ) ) { + throw new Exception( sprintf( __( 'Unable to find a module having the identifier/namespace "%s"' ), $moduleNamespace ) ); } } @@ -67,15 +67,15 @@ public function handle() */ public function askResourceName() { - $name = $this->ask(__('What is the CRUD single resource name ? [Q] to quit.')); - if ($name !== 'Q' && ! empty($name)) { + $name = $this->ask( __( 'What is the CRUD single resource name ? [Q] to quit.' ) ); + if ( $name !== 'Q' && ! empty( $name ) ) { $this->crudDetails[ 'resource_name' ] = $name; return $this->askTableName(); - } elseif ($name == 'Q') { + } elseif ( $name == 'Q' ) { return; } - $this->error(__('Please provide a valid value')); + $this->error( __( 'Please provide a valid value' ) ); return $this->askResourceName(); } @@ -87,15 +87,15 @@ public function askResourceName() */ public function askTableName() { - $name = $this->ask(__('Which table name should be used ? [Q] to quit.')); - if ($name !== 'Q' && ! empty($name)) { + $name = $this->ask( __( 'Which table name should be used ? [Q] to quit.' ) ); + if ( $name !== 'Q' && ! empty( $name ) ) { $this->crudDetails[ 'table_name' ] = $name; return $this->askMainRoute(); - } elseif ($name == 'Q') { + } elseif ( $name == 'Q' ) { return; } - $this->error(__('Please provide a valid value')); + $this->error( __( 'Please provide a valid value' ) ); return $this->askTableName(); } @@ -107,15 +107,15 @@ public function askTableName() */ public function askMainRoute() { - $name = $this->ask(__('What slug should be used ? [Q] to quit.')); - if ($name !== 'Q' && ! empty($name)) { + $name = $this->ask( __( 'What slug should be used ? [Q] to quit.' ) ); + if ( $name !== 'Q' && ! empty( $name ) ) { $this->crudDetails[ 'route_name' ] = $name; return $this->askNamespace(); - } elseif ($name == 'Q') { + } elseif ( $name == 'Q' ) { return; } - $this->error(__('Please provide a valid value')); + $this->error( __( 'Please provide a valid value' ) ); return $this->askMainRoute(); } @@ -127,15 +127,15 @@ public function askMainRoute() */ public function askNamespace() { - $name = $this->ask(__('What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.')); - if ($name !== 'Q' && ! empty($name)) { + $name = $this->ask( __( 'What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.' ) ); + if ( $name !== 'Q' && ! empty( $name ) ) { $this->crudDetails[ 'namespace' ] = $name; return $this->askFullModelName(); - } elseif ($name == 'Q') { + } elseif ( $name == 'Q' ) { return; } - $this->error(__('Please provide a valid value.')); + $this->error( __( 'Please provide a valid value.' ) ); return $this->askNamespace(); } @@ -147,15 +147,15 @@ public function askNamespace() */ public function askFullModelName() { - $name = $this->ask(__('What is the full model name. eg: App\Models\Order ? [Q] to quit.')); - if ($name !== 'Q' && ! empty($name)) { + $name = $this->ask( __( 'What is the full model name. eg: App\Models\Order ? [Q] to quit.' ) ); + if ( $name !== 'Q' && ! empty( $name ) ) { $this->crudDetails[ 'model_name' ] = $name; return $this->askRelation(); - } elseif ($name == 'Q') { + } elseif ( $name == 'Q' ) { return; } - $this->error(__('Please provide a valid value')); + $this->error( __( 'Please provide a valid value' ) ); return $this->askFullModelName(); } @@ -165,40 +165,40 @@ public function askFullModelName() * * @return void */ - public function askRelation($fresh = true) + public function askRelation( $fresh = true ) { - if ($fresh) { - $message = __('If your CRUD resource has a relation, mention it as follow "foreign_table, foreign_key, local_key" ? [S] to skip, [Q] to quit.'); + if ( $fresh ) { + $message = __( 'If your CRUD resource has a relation, mention it as follow "foreign_table, foreign_key, local_key" ? [S] to skip, [Q] to quit.' ); } else { - $message = __('Add a new relation ? Mention it as follow "foreign_table, foreign_key, local_key" ? [S] to skip, [Q] to quit.'); + $message = __( 'Add a new relation ? Mention it as follow "foreign_table, foreign_key, local_key" ? [S] to skip, [Q] to quit.' ); } - $name = $this->ask($message); - if ($name !== 'Q' && $name != 'S' && ! empty($name)) { - if (@$this->crudDetails[ 'relations' ] == null) { + $name = $this->ask( $message ); + if ( $name !== 'Q' && $name != 'S' && ! empty( $name ) ) { + if ( @$this->crudDetails[ 'relations' ] == null ) { $this->crudDetails[ 'relations' ] = []; } - $parameters = explode(',', $name); + $parameters = explode( ',', $name ); - if (count($parameters) != 3) { - $this->error(__('Not enough parameters provided for the relation.')); + if ( count( $parameters ) != 3 ) { + $this->error( __( 'Not enough parameters provided for the relation.' ) ); - return $this->askRelation(false); + return $this->askRelation( false ); } $this->crudDetails[ 'relations' ][] = [ - trim($parameters[0]), - trim($parameters[0]) . '.' . trim($parameters[2]), - $this->crudDetails[ 'table_name' ] . '.' . trim($parameters[1]), + trim( $parameters[0] ), + trim( $parameters[0] ) . '.' . trim( $parameters[2] ), + $this->crudDetails[ 'table_name' ] . '.' . trim( $parameters[1] ), ]; - return $this->askRelation(false); - } elseif ($name === 'S') { + return $this->askRelation( false ); + } elseif ( $name === 'S' ) { return $this->askFillable(); - } elseif ($name == 'Q') { + } elseif ( $name == 'Q' ) { return; } - $this->error(__('Please provide a valid value')); + $this->error( __( 'Please provide a valid value' ) ); return $this->askRelation(); } @@ -210,19 +210,19 @@ public function askRelation($fresh = true) */ public function askFillable() { - $name = $this->ask(__('What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.')); - if ($name !== 'Q' && ! empty($name) && $name != 'S') { + $name = $this->ask( __( 'What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.' ) ); + if ( $name !== 'Q' && ! empty( $name ) && $name != 'S' ) { $this->crudDetails[ 'fillable' ] = $name; return $this->generateCrud(); - } elseif ($name == 'S') { + } elseif ( $name == 'S' ) { $this->crudDetails[ 'fillable' ] = ''; return $this->generateCrud(); - } elseif ($name == 'Q') { + } elseif ( $name == 'Q' ) { return; } - $this->error(__('Please provide a valid value')); + $this->error( __( 'Please provide a valid value' ) ); return $this->askFillable(); } @@ -234,45 +234,45 @@ public function askFillable() */ public function generateCrud() { - $moduleNamespace = $this->argument('module'); + $moduleNamespace = $this->argument( 'module' ); - if (! empty($moduleNamespace)) { - $modulesService = app()->make(ModulesService::class); - $module = $modulesService->get($moduleNamespace); + if ( ! empty( $moduleNamespace ) ) { + $modulesService = app()->make( ModulesService::class ); + $module = $modulesService->get( $moduleNamespace ); - if ($module) { - $fileName = $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Crud' . DIRECTORY_SEPARATOR . ucwords(Str::camel($this->crudDetails[ 'resource_name' ])) . 'Crud.php'; - Storage::disk('ns-modules')->put( + if ( $module ) { + $fileName = $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Crud' . DIRECTORY_SEPARATOR . ucwords( Str::camel( $this->crudDetails[ 'resource_name' ] ) ) . 'Crud.php'; + Storage::disk( 'ns-modules' )->put( $fileName, - view('generate.crud', array_merge( + view( 'generate.crud', array_merge( $this->crudDetails, [ 'module' => $module, ] - )) + ) ) ); - return $this->info(sprintf( - __('The CRUD resource "%s" for the module "%s" has been generated at "%s"'), + return $this->info( sprintf( + __( 'The CRUD resource "%s" for the module "%s" has been generated at "%s"' ), $this->crudDetails[ 'resource_name' ], $module[ 'name' ], $fileName - )); + ) ); } } else { - $fileName = 'app' . DIRECTORY_SEPARATOR . 'Crud' . DIRECTORY_SEPARATOR . ucwords(Str::camel($this->crudDetails[ 'resource_name' ])) . 'Crud.php'; + $fileName = 'app' . DIRECTORY_SEPARATOR . 'Crud' . DIRECTORY_SEPARATOR . ucwords( Str::camel( $this->crudDetails[ 'resource_name' ] ) ) . 'Crud.php'; - Storage::disk('ns')->put( + Storage::disk( 'ns' )->put( $fileName, - view('generate.crud', $this->crudDetails) + view( 'generate.crud', $this->crudDetails ) ); - return $this->info(sprintf( - __('The CRUD resource "%s" has been generated at %s'), + return $this->info( sprintf( + __( 'The CRUD resource "%s" has been generated at %s' ), $this->crudDetails[ 'resource_name' ], $fileName - )); + ) ); } - return $this->error(__('An unexpected error has occurred.')); + return $this->error( __( 'An unexpected error has occurred.' ) ); } } diff --git a/app/Console/Commands/DevShortCutCommand.php b/app/Console/Commands/DevShortCutCommand.php index 61e2b8843..0d1265ad0 100644 --- a/app/Console/Commands/DevShortCutCommand.php +++ b/app/Console/Commands/DevShortCutCommand.php @@ -45,80 +45,80 @@ class DevShortCutCommand extends Command */ public function handle() { - return match ($this->argument('argument')) { - 'model-attributes' => $this->table([ __('File Name'), __('Status')], $this->setModelAttributes()), - default => throw new Exception(sprintf(__('Unsupported argument provided: "%s"'), $this->argument('argument'))) + return match ( $this->argument( 'argument' ) ) { + 'model-attributes' => $this->table( [ __( 'File Name' ), __( 'Status' )], $this->setModelAttributes() ), + default => throw new Exception( sprintf( __( 'Unsupported argument provided: "%s"' ), $this->argument( 'argument' ) ) ) }; } protected function setModelAttributes() { - $files = Storage::disk('ns')->files('app/Models'); + $files = Storage::disk( 'ns' )->files( 'app/Models' ); - $bar = $this->output->createProgressBar(count($files)); + $bar = $this->output->createProgressBar( count( $files ) ); $bar->start(); - $result = collect($files)->map(function ($file) use ($bar) { - $path = pathinfo($file); - $firstSlice = ucwords(str_replace('/', '\\', $path[ 'dirname' ])); + $result = collect( $files )->map( function ( $file ) use ( $bar ) { + $path = pathinfo( $file ); + $firstSlice = ucwords( str_replace( '/', '\\', $path[ 'dirname' ] ) ); $className = $firstSlice . '\\' . $path[ 'filename' ]; $bar->advance(); - if (! ( new ReflectionClass($className) )->isAbstract()) { + if ( ! ( new ReflectionClass( $className ) )->isAbstract() ) { $model = new $className; - $columns = Schema::getColumnListing($model->getTable()); + $columns = Schema::getColumnListing( $model->getTable() ); - $withTypes = collect($columns)->map(fn($value) => [ 'columnType' => Schema::getColumnType($model->getTable(), $value), 'columnName' => $value ]); - $content = file_get_contents(base_path($file)); + $withTypes = collect( $columns )->map( fn( $value ) => [ 'columnType' => Schema::getColumnType( $model->getTable(), $value ), 'columnName' => $value ] ); + $content = file_get_contents( base_path( $file ) ); - if ($this->fileContentHasClassComments($file, $content)) { - $preparedComments = $this->prepareComments($withTypes); + if ( $this->fileContentHasClassComments( $file, $content ) ) { + $preparedComments = $this->prepareComments( $withTypes ); - $finalContent = $this->replacePreparedComments($preparedComments, $content); + $finalContent = $this->replacePreparedComments( $preparedComments, $content ); - file_put_contents(base_path($file), $finalContent); + file_put_contents( base_path( $file ), $finalContent ); - return [$file, __('Done')]; + return [$file, __( 'Done' )]; } } return false; - })->filter(); + } )->filter(); $bar->finish(); return $result; } - protected function replacePreparedComments($preparedComments, $content) + protected function replacePreparedComments( $preparedComments, $content ) { - return preg_replace($this->patterForClassWithoutComments, '$1' . $preparedComments . '$2', $content); + return preg_replace( $this->patterForClassWithoutComments, '$1' . $preparedComments . '$2', $content ); } - protected function prepareComments(Collection $withTypes) + protected function prepareComments( Collection $withTypes ) { - $withTypes = $withTypes->map(function ($column) { - return ' * @property ' . ($this->typeMapping[ $column[ 'columnType'] ] ?? 'mixed') . ' $' . $column[ 'columnName' ]; - }); + $withTypes = $withTypes->map( function ( $column ) { + return ' * @property ' . ( $this->typeMapping[ $column[ 'columnType'] ] ?? 'mixed' ) . ' $' . $column[ 'columnName' ]; + } ); /** * only compatible files * are handled. */ - if ($withTypes->count() > 0) { - $withTypes->prepend("\n/**"); - $withTypes->push('*/'); + if ( $withTypes->count() > 0 ) { + $withTypes->prepend( "\n/**" ); + $withTypes->push( '*/' ); - return $withTypes->join("\n"); + return $withTypes->join( "\n" ); } return ''; } - protected function fileContentHasClassComments($file, $content) + protected function fileContentHasClassComments( $file, $content ) { - return preg_match_all($this->patterForClassWithoutComments, $content, $matches); + return preg_match_all( $this->patterForClassWithoutComments, $content, $matches ); } } diff --git a/app/Console/Commands/DoctorCommand.php b/app/Console/Commands/DoctorCommand.php index cfd758f65..b651df0b0 100644 --- a/app/Console/Commands/DoctorCommand.php +++ b/app/Console/Commands/DoctorCommand.php @@ -51,76 +51,76 @@ public function __construct() */ public function handle() { - $doctorService = new DoctorService($this); + $doctorService = new DoctorService( $this ); - if ($this->option('fix-roles')) { + if ( $this->option( 'fix-roles' ) ) { $doctorService->restoreRoles(); - return $this->info('The roles where correctly restored.'); + return $this->info( 'The roles where correctly restored.' ); } - if ($this->option('fix-users-attributes')) { + if ( $this->option( 'fix-users-attributes' ) ) { $doctorService->createUserAttribute(); - return $this->info('The users attributes were fixed.'); + return $this->info( 'The users attributes were fixed.' ); } - if ($this->option('fix-duplicate-options')) { + if ( $this->option( 'fix-duplicate-options' ) ) { $doctorService->fixDuplicateOptions(); - return $this->info('The duplicated options were cleared.'); + return $this->info( 'The duplicated options were cleared.' ); } - if ($this->option('fix-customers')) { + if ( $this->option( 'fix-customers' ) ) { $doctorService->fixCustomers(); - return $this->info('The customers were fixed.'); + return $this->info( 'The customers were fixed.' ); } - if ($this->option('fix-domains')) { + if ( $this->option( 'fix-domains' ) ) { $doctorService->fixDomains(); - return $this->info('The domain is correctly configured.'); + return $this->info( 'The domain is correctly configured.' ); } - if ($this->option('fix-orphan-orders-products')) { - return $this->info($doctorService->fixOrphanOrderProducts()); + if ( $this->option( 'fix-orphan-orders-products' ) ) { + return $this->info( $doctorService->fixOrphanOrderProducts() ); } - if ($this->option('fix-transactions-orders')) { + if ( $this->option( 'fix-transactions-orders' ) ) { return $doctorService->fixTransactionsOrders(); } - if ($this->option('clear-modules-temp')) { + if ( $this->option( 'clear-modules-temp' ) ) { return $doctorService->clearTemporaryFiles(); } if ( $this->option( 'set-unit-visibility' ) ) { - return $doctorService->setUnitVisibility( + return $doctorService->setUnitVisibility( products: $this->option( 'products' ), visibility: $this->option( 'set-unit-visibility' ) ); } - if ($this->option('fix-orders-products')) { - $products = OrderProduct::where('total_purchase_price', 0)->get(); + if ( $this->option( 'fix-orders-products' ) ) { + $products = OrderProduct::where( 'total_purchase_price', 0 )->get(); /** * @var ProductService */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); - $this->withProgressBar($products, function (OrderProduct $orderProduct) use ($productService) { + $this->withProgressBar( $products, function ( OrderProduct $orderProduct ) use ( $productService ) { $orderProduct->total_purchase_price = $productService->getLastPurchasePrice( product: $orderProduct->product, unit: $orderProduct->unit, ) * $orderProduct->quantity; $orderProduct->save(); - }); + } ); $this->newLine(); - $this->info('The products were successfully updated'); + $this->info( 'The products were successfully updated' ); } } } diff --git a/app/Console/Commands/DotEnvSetCommand.php b/app/Console/Commands/DotEnvSetCommand.php index 88d73a46e..bfc6effb9 100644 --- a/app/Console/Commands/DotEnvSetCommand.php +++ b/app/Console/Commands/DotEnvSetCommand.php @@ -37,12 +37,12 @@ public function __construct() */ public function handle() { - if (in_array(strtoupper($this->argument('key')), [ 'NS_AUTHORIZATION' ])) { - return $this->error(__('The authorization token can\'t be changed manually.')); + if ( in_array( strtoupper( $this->argument( 'key' ) ), [ 'NS_AUTHORIZATION' ] ) ) { + return $this->error( __( 'The authorization token can\'t be changed manually.' ) ); } - ns()->envEditor->set(strtoupper($this->argument('key')), $this->option('v')); + ns()->envEditor->set( strtoupper( $this->argument( 'key' ) ), $this->option( 'v' ) ); - $this->info('The environment value has been set.'); + $this->info( 'The environment value has been set.' ); } } diff --git a/app/Console/Commands/ExtractTranslation.php b/app/Console/Commands/ExtractTranslation.php index 758a49462..4b9b8f1ef 100644 --- a/app/Console/Commands/ExtractTranslation.php +++ b/app/Console/Commands/ExtractTranslation.php @@ -46,9 +46,9 @@ public function __construct( */ public function handle() { - if ($this->option('extract')) { + if ( $this->option( 'extract' ) ) { $this->extracting(); - } elseif ($this->option('symlink')) { + } elseif ( $this->option( 'symlink' ) ) { $this->createSymlink(); } } @@ -58,86 +58,86 @@ public function handle() */ private function createSymLink() { - if (! \windows_os()) { - $link = @\symlink(base_path('lang'), public_path('/lang')); + if ( ! \windows_os() ) { + $link = @\symlink( base_path( 'lang' ), public_path( '/lang' ) ); } else { $mode = 'J'; - $link = public_path('lang'); - $target = base_path('lang'); - $link = exec("mklink /{$mode} \"{$link}\" \"{$target}\""); + $link = public_path( 'lang' ); + $target = base_path( 'lang' ); + $link = exec( "mklink /{$mode} \"{$link}\" \"{$target}\"" ); } - return $this->info('Language Symbolic Link has been created !'); + return $this->info( 'Language Symbolic Link has been created !' ); } /** * That will extrac tthe language string * for a specific language code * - * @param string $lang - * @param array $module - * @param Collection $files + * @param string $lang + * @param array $module + * @param Collection $files * @return void */ - private function extractForModuleLanguage($lang, $module, $files) + private function extractForModuleLanguage( $lang, $module, $files ) { - $filePath = Str::finish($module[ 'lang-relativePath' ], DIRECTORY_SEPARATOR) . $lang . '.json'; - $finalArray = $this->extractLocalization($files->flatten()); - $finalArray = $this->flushTranslation($finalArray, $filePath); + $filePath = Str::finish( $module[ 'lang-relativePath' ], DIRECTORY_SEPARATOR ) . $lang . '.json'; + $finalArray = $this->extractLocalization( $files->flatten() ); + $finalArray = $this->flushTranslation( $finalArray, $filePath ); - Storage::disk('ns')->put($filePath, json_encode($finalArray)); + Storage::disk( 'ns' )->put( $filePath, json_encode( $finalArray ) ); $this->newLine(); - $this->info(sprintf(__('Localization for %s extracted to %s'), config('nexopos.languages')[ $lang ], $filePath)); + $this->info( sprintf( __( 'Localization for %s extracted to %s' ), config( 'nexopos.languages' )[ $lang ], $filePath ) ); } private function extracting() { - $this->info('Extracting...'); + $this->info( 'Extracting...' ); - if ($this->argument('module')) { - $module = $this->modulesService->get($this->argument('module')); + if ( $this->argument( 'module' ) ) { + $module = $this->modulesService->get( $this->argument( 'module' ) ); - if (! empty($module)) { - $directories = Storage::disk('ns')->directories($module[ 'relativePath' ]); - $files = collect([]); + if ( ! empty( $module ) ) { + $directories = Storage::disk( 'ns' )->directories( $module[ 'relativePath' ] ); + $files = collect( [] ); - foreach ($directories as $directory) { - if (! in_array(basename($directory), [ 'node_modules', 'vendor', 'Public', '.git' ])) { - $files->push(Storage::disk('ns')->allFiles($directory)); + foreach ( $directories as $directory ) { + if ( ! in_array( basename( $directory ), [ 'node_modules', 'vendor', 'Public', '.git' ] ) ) { + $files->push( Storage::disk( 'ns' )->allFiles( $directory ) ); } } - Storage::disk('ns')->put($module[ 'relativePath' ] . DIRECTORY_SEPARATOR . 'Lang' . DIRECTORY_SEPARATOR . 'index.html', ''); + Storage::disk( 'ns' )->put( $module[ 'relativePath' ] . DIRECTORY_SEPARATOR . 'Lang' . DIRECTORY_SEPARATOR . 'index.html', '' ); /** * We'll loop all the languages that are available */ - if ($this->option('lang') === 'all') { - foreach (config('nexopos.languages') as $lang => $humanName) { - $this->extractForModuleLanguage($lang, $module, $files); + if ( $this->option( 'lang' ) === 'all' ) { + foreach ( config( 'nexopos.languages' ) as $lang => $humanName ) { + $this->extractForModuleLanguage( $lang, $module, $files ); } } else { - $this->extractForModuleLanguage($this->option('lang'), $module, $files); + $this->extractForModuleLanguage( $this->option( 'lang' ), $module, $files ); } - return $this->info(sprintf(__('Translation process is complete for the module %s !'), $module[ 'name' ])); + return $this->info( sprintf( __( 'Translation process is complete for the module %s !' ), $module[ 'name' ] ) ); } else { - return $this->error(__('Unable to find the requested module.')); + return $this->error( __( 'Unable to find the requested module.' ) ); } } else { $files = array_merge( - Storage::disk('ns')->allFiles('app'), - Storage::disk('ns')->allFiles('resources'), + Storage::disk( 'ns' )->allFiles( 'app' ), + Storage::disk( 'ns' )->allFiles( 'resources' ), ); - if ($this->option('lang') === 'all') { - foreach (config('nexopos.languages') as $lang => $humanName) { - $this->extractLanguageForSystem($lang, $files); + if ( $this->option( 'lang' ) === 'all' ) { + foreach ( config( 'nexopos.languages' ) as $lang => $humanName ) { + $this->extractLanguageForSystem( $lang, $files ); } - $this->info('Translation process is complete !'); + $this->info( 'Translation process is complete !' ); } else { - return $this->extractLanguageForSystem($this->option('lang'), $files); + return $this->extractLanguageForSystem( $this->option( 'lang' ), $files ); } } } @@ -146,69 +146,69 @@ private function extracting() * Will perform string extraction for * the system files * - * @param string $lang - * @param array $files + * @param string $lang + * @param array $files * @return void */ - private function extractLanguageForSystem($lang, $files) + private function extractLanguageForSystem( $lang, $files ) { $filePath = 'lang/' . $lang . '.json'; - $finalArray = $this->extractLocalization($files); - $finalArray = $this->flushTranslation($finalArray, $filePath); + $finalArray = $this->extractLocalization( $files ); + $finalArray = $this->flushTranslation( $finalArray, $filePath ); - Storage::disk('ns')->put('lang/' . $lang . '.json', json_encode($finalArray)); + Storage::disk( 'ns' )->put( 'lang/' . $lang . '.json', json_encode( $finalArray ) ); $this->newLine(); - $this->info('Extraction complete for language : ' . config('nexopos.languages')[ $lang ]); + $this->info( 'Extraction complete for language : ' . config( 'nexopos.languages' )[ $lang ] ); } /** * Will merge translation files * by deleting old string that aren't referenced * - * @param array $newTranslation - * @param string $filePath - * @return array $updatedTranslation + * @param array $newTranslation + * @param string $filePath + * @return array $updatedTranslation */ - private function flushTranslation($newTranslation, $filePath) + private function flushTranslation( $newTranslation, $filePath ) { $existingTranslation = []; - if (Storage::disk('ns')->exists($filePath)) { - $existingTranslation = json_decode(Storage::disk('ns')->get($filePath), true); + if ( Storage::disk( 'ns' )->exists( $filePath ) ) { + $existingTranslation = json_decode( Storage::disk( 'ns' )->get( $filePath ), true ); } - if (! empty($existingTranslation)) { + if ( ! empty( $existingTranslation ) ) { /** * delete all keys that doesn't exists */ - $purgedTranslation = collect($existingTranslation) - ->filter(function ($translation, $key) use ($newTranslation) { - return in_array($key, array_keys($newTranslation)); - }); + $purgedTranslation = collect( $existingTranslation ) + ->filter( function ( $translation, $key ) use ( $newTranslation ) { + return in_array( $key, array_keys( $newTranslation ) ); + } ); /** * pull new keys */ - $newKeys = collect($newTranslation)->filter(function ($translation, $key) use ($existingTranslation) { - return ! in_array($key, array_keys($existingTranslation)); - }); + $newKeys = collect( $newTranslation )->filter( function ( $translation, $key ) use ( $existingTranslation ) { + return ! in_array( $key, array_keys( $existingTranslation ) ); + } ); - return array_merge($purgedTranslation->toArray(), $newKeys->toArray()); + return array_merge( $purgedTranslation->toArray(), $newKeys->toArray() ); } return $newTranslation; } - private function extractLocalization($files) + private function extractLocalization( $files ) { $supportedExtensions = [ 'vue', 'php', 'ts', 'js' ]; - $filtered = collect($files)->filter(function ($file) use ($supportedExtensions) { - $info = pathinfo($file); + $filtered = collect( $files )->filter( function ( $file ) use ( $supportedExtensions ) { + $info = pathinfo( $file ); - return in_array($info[ 'extension' ], $supportedExtensions); - }); + return in_array( $info[ 'extension' ], $supportedExtensions ); + } ); $exportable = []; @@ -216,19 +216,19 @@ private function extractLocalization($files) * we'll extract all the string that can be translated * and save them within an array. */ - $this->withProgressBar($filtered, function ($file) use (&$exportable) { - $fileContent = Storage::disk('ns')->get($file); - preg_match_all('/__[m]?\(\s*(?(?=[\'"`](?:[\s\S]*?)[\'"`](?:,\s*(?:[^)]*))?)[\'"`]([\s\S]*?)[\'"`](?:,\s*(?:[^)]*))?|)\s*\)/', $fileContent, $output_array); + $this->withProgressBar( $filtered, function ( $file ) use ( &$exportable ) { + $fileContent = Storage::disk( 'ns' )->get( $file ); + preg_match_all( '/__[m]?\(\s*(?(?=[\'"`](?:[\s\S]*?)[\'"`](?:,\s*(?:[^)]*))?)[\'"`]([\s\S]*?)[\'"`](?:,\s*(?:[^)]*))?|)\s*\)/', $fileContent, $output_array ); - if (isset($output_array[1])) { - foreach ($output_array[1] as $string) { - $exportable[ $string ] = compact('file', 'string'); + if ( isset( $output_array[1] ) ) { + foreach ( $output_array[1] as $string ) { + $exportable[ $string ] = compact( 'file', 'string' ); } } - }); + } ); - return collect($exportable)->mapWithKeys(function ($exportable) { + return collect( $exportable )->mapWithKeys( function ( $exportable ) { return [ $exportable[ 'string' ] => $exportable[ 'string' ] ]; - })->toArray(); + } )->toArray(); } } diff --git a/app/Console/Commands/GenerateActivityCommand.php b/app/Console/Commands/GenerateActivityCommand.php index decf0b405..c01f4fd60 100644 --- a/app/Console/Commands/GenerateActivityCommand.php +++ b/app/Console/Commands/GenerateActivityCommand.php @@ -40,48 +40,48 @@ public function __construct() */ public function handle() { - $date = app()->make(DateService::class); - $rangeStarts = $date->copy()->subMonths(5); + $date = app()->make( DateService::class ); + $rangeStarts = $date->copy()->subMonths( 5 ); $totalDays = []; - while (! $rangeStarts->isSameDay($date)) { + while ( ! $rangeStarts->isSameDay( $date ) ) { $totalDays[] = $rangeStarts->copy(); - $rangeStarts->addDay(1); + $rangeStarts->addDay( 1 ); } - $bar = $this->output->createProgressBar(count($totalDays)); + $bar = $this->output->createProgressBar( count( $totalDays ) ); $bar->start(); - $files = Storage::disk('ns')->allFiles('tests/Feature'); + $files = Storage::disk( 'ns' )->allFiles( 'tests/Feature' ); - $app = require base_path('bootstrap/app.php'); - $app->make(HttpKernel::class)->bootstrap(); + $app = require base_path( 'bootstrap/app.php' ); + $app->make( HttpKernel::class )->bootstrap(); - foreach ($totalDays as $day) { + foreach ( $totalDays as $day ) { /** * include test files */ - foreach ($files as $file) { - if (! in_array($file, [ + foreach ( $files as $file ) { + if ( ! in_array( $file, [ 'tests/Feature/ResetTest.php', - ])) { - include_once base_path($file); + ] ) ) { + include_once base_path( $file ); - $path = pathinfo($file); - $class = collect(explode('/', $path[ 'dirname' ])) - ->push($path[ 'filename' ]) - ->map(fn($dir) => ucwords($dir)) - ->join('\\'); + $path = pathinfo( $file ); + $class = collect( explode( '/', $path[ 'dirname' ] ) ) + ->push( $path[ 'filename' ] ) + ->map( fn( $dir ) => ucwords( $dir ) ) + ->join( '\\' ); $object = new $class; - $methods = get_class_methods($object); + $methods = get_class_methods( $object ); $method = $methods[0]; - $object->defineApp($app); + $object->defineApp( $app ); $object->$method(); } } - $date->define($day); + $date->define( $day ); $bar->advance(); } diff --git a/app/Console/Commands/GenerateAuthorizationToken.php b/app/Console/Commands/GenerateAuthorizationToken.php index 2b26e8a8a..57734d547 100644 --- a/app/Console/Commands/GenerateAuthorizationToken.php +++ b/app/Console/Commands/GenerateAuthorizationToken.php @@ -38,7 +38,7 @@ public function __construct() */ public function handle() { - ns()->envEditor->set('NS_AUTHORIZATION', Str::random(20)); - $this->info('The authorization token has been refreshed.'); + ns()->envEditor->set( 'NS_AUTHORIZATION', Str::random( 20 ) ); + $this->info( 'The authorization token has been refreshed.' ); } } diff --git a/app/Console/Commands/GenerateModuleCommand.php b/app/Console/Commands/GenerateModuleCommand.php index c36563f2f..e6755b5bf 100644 --- a/app/Console/Commands/GenerateModuleCommand.php +++ b/app/Console/Commands/GenerateModuleCommand.php @@ -48,10 +48,10 @@ public function __construct( */ public function handle() { - if (Helper::installed()) { + if ( Helper::installed() ) { $this->askInformations(); } else { - $this->error('NexoPOS is not yet installed.'); + $this->error( 'NexoPOS is not yet installed.' ); } } @@ -62,17 +62,17 @@ public function handle() */ public function askInformations() { - $this->module[ 'namespace' ] = ucwords($this->ask('Define the module namespace')); - $this->module[ 'name' ] = $this->ask('Define the module name'); - $this->module[ 'author' ] = $this->ask('Define the Author Name'); - $this->module[ 'description' ] = $this->ask('Define a short description'); + $this->module[ 'namespace' ] = ucwords( $this->ask( 'Define the module namespace' ) ); + $this->module[ 'name' ] = $this->ask( 'Define the module name' ); + $this->module[ 'author' ] = $this->ask( 'Define the Author Name' ); + $this->module[ 'description' ] = $this->ask( 'Define a short description' ); $this->module[ 'version' ] = '1.0'; - $this->module[ 'force' ] = $this->option('force'); + $this->module[ 'force' ] = $this->option( 'force' ); $table = [ 'Namespace', 'Name', 'Author', 'Description', 'Version' ]; - $this->table($table, [ $this->module ]); + $this->table( $table, [ $this->module ] ); - if (! $this->confirm('Would you confirm theses informations')) { + if ( ! $this->confirm( 'Would you confirm theses informations' ) ) { $this->askInformations(); } @@ -81,12 +81,12 @@ public function askInformations() * happens, we can still suggest the user to restart. */ try { - $response = $this->moduleService->generateModule($this->module); - $this->info($response[ 'message' ]); - } catch (NotAllowedException $exception) { - $this->error('A similar module has been found'); + $response = $this->moduleService->generateModule( $this->module ); + $this->info( $response[ 'message' ] ); + } catch ( NotAllowedException $exception ) { + $this->error( 'A similar module has been found' ); - if ($this->confirm('Would you like to restart ?')) { + if ( $this->confirm( 'Would you like to restart ?' ) ) { $this->askInformations(); } } diff --git a/app/Console/Commands/GenerateTransactionsCommand.php b/app/Console/Commands/GenerateTransactionsCommand.php index 6d98b4934..dddec5502 100644 --- a/app/Console/Commands/GenerateTransactionsCommand.php +++ b/app/Console/Commands/GenerateTransactionsCommand.php @@ -41,18 +41,18 @@ public function __construct() */ public function handle() { - $user = Role::namespace('admin')->users->first(); - Auth::login($user); + $user = Role::namespace( 'admin' )->users->first(); + Auth::login( $user ); - $fromDate = Carbon::parse($this->option('from')); - $toDate = $this->option('to') === null ? Carbon::parse($this->option('to')) : ns()->date->copy()->endOfDay()->toDateTimeString(); + $fromDate = Carbon::parse( $this->option( 'from' ) ); + $toDate = $this->option( 'to' ) === null ? Carbon::parse( $this->option( 'to' ) ) : ns()->date->copy()->endOfDay()->toDateTimeString(); /** * @var ReportService $reportService */ - $reportService = app()->make(ReportService::class); - $reportService->recomputeTransactions($fromDate, $toDate); + $reportService = app()->make( ReportService::class ); + $reportService->recomputeTransactions( $fromDate, $toDate ); - $this->info('The cash flow has been generated.'); + $this->info( 'The cash flow has been generated.' ); } } diff --git a/app/Console/Commands/MakeModuleServiceProviderCommand.php b/app/Console/Commands/MakeModuleServiceProviderCommand.php index 2d45b83ff..19142f298 100644 --- a/app/Console/Commands/MakeModuleServiceProviderCommand.php +++ b/app/Console/Commands/MakeModuleServiceProviderCommand.php @@ -48,42 +48,42 @@ public function __construct() */ public function handle() { - if (Helper::installed()) { - if (! empty($this->argument('namespace') && ! empty($this->argument('name')))) { - $modules = app()->make(ModulesService::class); + if ( Helper::installed() ) { + if ( ! empty( $this->argument( 'namespace' ) && ! empty( $this->argument( 'name' ) ) ) ) { + $modules = app()->make( ModulesService::class ); /** * Check if the module exists */ - if ($module = $modules->get($this->argument('namespace'))) { - $fileName = ucwords(Str::camel($this->argument('name'))); + if ( $module = $modules->get( $this->argument( 'namespace' ) ) ) { + $fileName = ucwords( Str::camel( $this->argument( 'name' ) ) ); - if (in_array($fileName, [ 'CoreServiceProvider' ])) { - return $this->error(sprintf(__('"%s" is a reserved class name'), $fileName)); + if ( in_array( $fileName, [ 'CoreServiceProvider' ] ) ) { + return $this->error( sprintf( __( '"%s" is a reserved class name' ), $fileName ) ); } $filePath = $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Providers' . DIRECTORY_SEPARATOR . $fileName . '.php'; - $fileExists = Storage::disk('ns-modules')->exists($filePath); + $fileExists = Storage::disk( 'ns-modules' )->exists( $filePath ); - if (! $fileExists || ($fileExists && $this->option('force'))) { - Storage::disk('ns-modules')->put( + if ( ! $fileExists || ( $fileExists && $this->option( 'force' ) ) ) { + Storage::disk( 'ns-modules' )->put( $filePath, - view('generate.modules.providers', [ + view( 'generate.modules.providers', [ 'module' => $module, 'className' => $fileName, - ]) + ] ) ); - return $this->info('The service provider "' . $fileName . '" has been created for "' . $module[ 'name' ] . '"'); + return $this->info( 'The service provider "' . $fileName . '" has been created for "' . $module[ 'name' ] . '"' ); } - return $this->error('A service provider with the same file name already exists.'); + return $this->error( 'A service provider with the same file name already exists.' ); } else { - $this->info('Unable to find that module.'); + $this->info( 'Unable to find that module.' ); } } } else { - $this->error('NexoPOS is not yet installed.'); + $this->error( 'NexoPOS is not yet installed.' ); } } } diff --git a/app/Console/Commands/MigrateForgetCommand.php b/app/Console/Commands/MigrateForgetCommand.php index 19da0d0f1..b80ce8f53 100644 --- a/app/Console/Commands/MigrateForgetCommand.php +++ b/app/Console/Commands/MigrateForgetCommand.php @@ -51,46 +51,46 @@ public function __construct( */ public function handle() { - $module = $this->moduleService->get($this->argument('module')); + $module = $this->moduleService->get( $this->argument( 'module' ) ); - if ($module !== null && $this->argument('module') !== null) { - if (! in_array($this->option('file'), $module[ 'all-migrations' ])) { - if ($this->option('down')) { - $this->moduleService->revertMigrations($module); + if ( $module !== null && $this->argument( 'module' ) !== null ) { + if ( ! in_array( $this->option( 'file' ), $module[ 'all-migrations' ] ) ) { + if ( $this->option( 'down' ) ) { + $this->moduleService->revertMigrations( $module ); } - ModuleMigration::where('namespace', $this->argument('module')) + ModuleMigration::where( 'namespace', $this->argument( 'module' ) ) ->delete(); } else { - if ($this->option('down')) { - $migrations = ModuleMigration::where('namespace', $this->argument('module')) + if ( $this->option( 'down' ) ) { + $migrations = ModuleMigration::where( 'namespace', $this->argument( 'module' ) ) ->get() - ->map(fn($migration) => $migration->file) + ->map( fn( $migration ) => $migration->file ) ->toArray(); - $this->moduleService->revertMigrations($module, $migrations); + $this->moduleService->revertMigrations( $module, $migrations ); } - ModuleMigration::where('namespace', $this->argument('module')) - ->where('file', $this->option('file')) + ModuleMigration::where( 'namespace', $this->argument( 'module' ) ) + ->where( 'file', $this->option( 'file' ) ) ->delete(); } - Artisan::call('cache:clear'); + Artisan::call( 'cache:clear' ); return $this->info( sprintf( - __('The migration file has been successfully forgotten for the module %s.'), + __( 'The migration file has been successfully forgotten for the module %s.' ), $module[ 'name' ] ) ); } else { - $deleted = Migration::where('migration', $this->option('file'))->delete(); - Artisan::call('cache:clear'); + $deleted = Migration::where( 'migration', $this->option( 'file' ) )->delete(); + Artisan::call( 'cache:clear' ); return $this->info( sprintf( - __('%s migration(s) has been deleted.'), + __( '%s migration(s) has been deleted.' ), $deleted ) ); diff --git a/app/Console/Commands/ModuleCommandGenerator.php b/app/Console/Commands/ModuleCommandGenerator.php index 1ac30d01b..3f50d3cff 100644 --- a/app/Console/Commands/ModuleCommandGenerator.php +++ b/app/Console/Commands/ModuleCommandGenerator.php @@ -30,38 +30,38 @@ class ModuleCommandGenerator extends Command */ public function handle() { - $modules = app()->make(ModulesService::class); + $modules = app()->make( ModulesService::class ); /** * Check if module is defined */ - if ($module = $modules->get($this->argument('namespace'))) { + if ( $module = $modules->get( $this->argument( 'namespace' ) ) ) { /** * Define the file name */ $commandsPath = $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Console' . DIRECTORY_SEPARATOR . 'Commands' . DIRECTORY_SEPARATOR; - $name = ucwords(Str::camel($this->argument('argument'))); + $name = ucwords( Str::camel( $this->argument( 'argument' ) ) ); $fileName = $commandsPath . $name; - $namespace = $this->argument('namespace'); - $fileExists = Storage::disk('ns-modules')->exists( + $namespace = $this->argument( 'namespace' ); + $fileExists = Storage::disk( 'ns-modules' )->exists( $fileName . '.php' ); - if (! $fileExists || ($fileExists && $this->option('force'))) { - Storage::disk('ns-modules')->put( - $fileName . '.php', view('generate.modules.command', compact( + if ( ! $fileExists || ( $fileExists && $this->option( 'force' ) ) ) { + Storage::disk( 'ns-modules' )->put( + $fileName . '.php', view( 'generate.modules.command', compact( 'modules', 'module', 'name', 'namespace' - ))); + ) ) ); - return $this->info(sprintf( - __('The command has been created for the module "%s"!'), + return $this->info( sprintf( + __( 'The command has been created for the module "%s"!' ), $module[ 'name' ] - )); + ) ); } - return $this->error(sprintf('A similar file is already found at the location: %s.', $fileName . '.php')); + return $this->error( sprintf( 'A similar file is already found at the location: %s.', $fileName . '.php' ) ); } - return $this->error('Unable to located the module !'); + return $this->error( 'Unable to located the module !' ); } } diff --git a/app/Console/Commands/ModuleController.php b/app/Console/Commands/ModuleController.php index ec14ac198..5792197e0 100644 --- a/app/Console/Commands/ModuleController.php +++ b/app/Console/Commands/ModuleController.php @@ -40,55 +40,55 @@ public function __construct() */ public function handle() { - $modules = app()->make(ModulesService::class); + $modules = app()->make( ModulesService::class ); /** * Check if module is defined */ - if ($module = $modules->get($this->argument('namespace'))) { + if ( $module = $modules->get( $this->argument( 'namespace' ) ) ) { $controllerPath = $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Http' . DIRECTORY_SEPARATOR . 'Controllers' . DIRECTORY_SEPARATOR; /** * delete all module controllers */ - if ($this->option('delete') == 'all') { - if ($this->confirm('Do you want to delete all controllers ?')) { - Storage::disk('ns-modules')->deleteDirectory($controllerPath); - Storage::disk('ns-modules')->MakeDirectory($controllerPath); + if ( $this->option( 'delete' ) == 'all' ) { + if ( $this->confirm( 'Do you want to delete all controllers ?' ) ) { + Storage::disk( 'ns-modules' )->deleteDirectory( $controllerPath ); + Storage::disk( 'ns-modules' )->MakeDirectory( $controllerPath ); - return $this->info('All controllers has been deleted !'); + return $this->info( 'All controllers has been deleted !' ); } } /** * Define the file name */ - $name = ucwords(Str::camel($this->argument('name'))); + $name = ucwords( Str::camel( $this->argument( 'name' ) ) ); $fileName = $controllerPath . $name; - $namespace = $this->argument('namespace'); - $fileExists = Storage::disk('ns-modules')->exists( + $namespace = $this->argument( 'namespace' ); + $fileExists = Storage::disk( 'ns-modules' )->exists( $fileName . '.php' ); - if (! empty($name)) { - if (! $fileExists || ($fileExists && $this->option('force'))) { - Storage::disk('ns-modules')->put( - $fileName . '.php', view('generate.modules.controller', compact( + if ( ! empty( $name ) ) { + if ( ! $fileExists || ( $fileExists && $this->option( 'force' ) ) ) { + Storage::disk( 'ns-modules' )->put( + $fileName . '.php', view( 'generate.modules.controller', compact( 'modules', 'module', 'name', 'namespace' - ))); + ) ) ); - return $this->info(sprintf( - __('The controller has been created for the module "%s"!'), + return $this->info( sprintf( + __( 'The controller has been created for the module "%s"!' ), $module[ 'name' ] - )); + ) ); } - return $this->error('The controller already exists !'); + return $this->error( 'The controller already exists !' ); } - return $this->error('The controller name cannot be empty.'); + return $this->error( 'The controller name cannot be empty.' ); } - return $this->error('Unable to located the module !'); + return $this->error( 'Unable to located the module !' ); } } diff --git a/app/Console/Commands/ModuleDeleteCommand.php b/app/Console/Commands/ModuleDeleteCommand.php index 409628aa4..f009a58d0 100644 --- a/app/Console/Commands/ModuleDeleteCommand.php +++ b/app/Console/Commands/ModuleDeleteCommand.php @@ -26,19 +26,19 @@ class ModuleDeleteCommand extends Command * * @return int */ - public function handle(ModulesService $modulesService) + public function handle( ModulesService $modulesService ) { - $module = $modulesService->get($this->argument('identifier')); + $module = $modulesService->get( $this->argument( 'identifier' ) ); - if ($module !== null && $this->confirm(sprintf(__('Would you like to delete "%s"?'), $module[ 'name' ]))) { - $result = $modulesService->delete($this->argument('identifier')); + if ( $module !== null && $this->confirm( sprintf( __( 'Would you like to delete "%s"?' ), $module[ 'name' ] ) ) ) { + $result = $modulesService->delete( $this->argument( 'identifier' ) ); - return match ($result[ 'status' ]) { - 'danger' => $this->error($result[ 'message' ]), - 'success' => $this->info($result[ 'message' ]), + return match ( $result[ 'status' ] ) { + 'danger' => $this->error( $result[ 'message' ] ), + 'success' => $this->info( $result[ 'message' ] ), }; } - return $this->error(sprintf(__('Unable to find a module having as namespace "%s"'), $this->argument('identifier'))); + return $this->error( sprintf( __( 'Unable to find a module having as namespace "%s"' ), $this->argument( 'identifier' ) ) ); } } diff --git a/app/Console/Commands/ModuleDetailsCommand.php b/app/Console/Commands/ModuleDetailsCommand.php index d457d5bbd..167845316 100644 --- a/app/Console/Commands/ModuleDetailsCommand.php +++ b/app/Console/Commands/ModuleDetailsCommand.php @@ -35,27 +35,27 @@ public function __construct( public function listAllModules() { $header = [ - __('Name'), - __('Namespace'), - __('Version'), - __('Author'), - __('Enabled'), + __( 'Name' ), + __( 'Namespace' ), + __( 'Version' ), + __( 'Author' ), + __( 'Enabled' ), ]; $modulesList = $this->modulesService->get(); $modulesTable = []; - foreach ($modulesList as $module) { + foreach ( $modulesList as $module ) { $modulesTable[] = [ $module[ 'name' ], $module[ 'namespace' ], $module[ 'version' ], $module[ 'author' ], - $module[ 'enabled' ] ? __('Yes') : __('No'), + $module[ 'enabled' ] ? __( 'Yes' ) : __( 'No' ), ]; } - $this->table($header, $modulesTable); + $this->table( $header, $modulesTable ); } /** @@ -65,7 +65,7 @@ public function listAllModules() */ public function handle() { - if (empty($this->argument('identifier'))) { + if ( empty( $this->argument( 'identifier' ) ) ) { $this->listAllModules(); } else { $this->listSingleModule(); @@ -77,32 +77,32 @@ private function listSingleModule() /** * @var ModulesService */ - $moduleService = app()->make(ModulesService::class); + $moduleService = app()->make( ModulesService::class ); - $module = $moduleService->get($this->argument('identifier')); + $module = $moduleService->get( $this->argument( 'identifier' ) ); - if (empty($module)) { - $this->error(__('Unable to find the requested module.')); + if ( empty( $module ) ) { + $this->error( __( 'Unable to find the requested module.' ) ); } $entries = [ - [ __('Name'), $module[ 'name' ] ], - [ __('Version'), $module[ 'version' ] ], - [ __('Enabled'), $module[ 'enabled' ] ? __('Yes') : __('No') ], - [ __('Path'), $module[ 'path' ] ], - [ __('Index'), $module[ 'index-file' ] ], - [ __('Entry Class'), $module[ 'entry-class' ] ], - [ __('Routes'), $module[ 'routes-file' ] ], - [ __('Api'), $module[ 'api-file' ] ], - [ __('Controllers'), $module[ 'controllers-relativePath' ] ], - [ __('Views'), $module[ 'views-path' ] ], - [ __('Api File'), $module[ 'api-file' ] ], - [ __('Migrations'), collect($module[ 'all-migrations' ] ?? [])->join("\n") ], + [ __( 'Name' ), $module[ 'name' ] ], + [ __( 'Version' ), $module[ 'version' ] ], + [ __( 'Enabled' ), $module[ 'enabled' ] ? __( 'Yes' ) : __( 'No' ) ], + [ __( 'Path' ), $module[ 'path' ] ], + [ __( 'Index' ), $module[ 'index-file' ] ], + [ __( 'Entry Class' ), $module[ 'entry-class' ] ], + [ __( 'Routes' ), $module[ 'routes-file' ] ], + [ __( 'Api' ), $module[ 'api-file' ] ], + [ __( 'Controllers' ), $module[ 'controllers-relativePath' ] ], + [ __( 'Views' ), $module[ 'views-path' ] ], + [ __( 'Api File' ), $module[ 'api-file' ] ], + [ __( 'Migrations' ), collect( $module[ 'all-migrations' ] ?? [] )->join( "\n" ) ], ]; - return $this->table([ - __('Attribute'), - __('Value'), - ], $entries); + return $this->table( [ + __( 'Attribute' ), + __( 'Value' ), + ], $entries ); } } diff --git a/app/Console/Commands/ModuleDisableCommand.php b/app/Console/Commands/ModuleDisableCommand.php index 553bb9823..576962235 100644 --- a/app/Console/Commands/ModuleDisableCommand.php +++ b/app/Console/Commands/ModuleDisableCommand.php @@ -50,19 +50,19 @@ public function __construct( public function handle() { try { - $result = $this->modulesService->disable($this->argument('identifier')); + $result = $this->modulesService->disable( $this->argument( 'identifier' ) ); /** * we'll configure the response * according to the result. */ - if ($result[ 'status' ] === 'success') { - $this->info($result[ 'message' ]); + if ( $result[ 'status' ] === 'success' ) { + $this->info( $result[ 'message' ] ); } else { - $this->error($result[ 'message' ]); + $this->error( $result[ 'message' ] ); } - } catch (Exception $exception) { - $this->error($exception->getMessage()); + } catch ( Exception $exception ) { + $this->error( $exception->getMessage() ); } } } diff --git a/app/Console/Commands/ModuleEnableCommand.php b/app/Console/Commands/ModuleEnableCommand.php index 5760fe226..5e089939e 100644 --- a/app/Console/Commands/ModuleEnableCommand.php +++ b/app/Console/Commands/ModuleEnableCommand.php @@ -41,19 +41,19 @@ public function __construct( public function handle() { try { - $result = $this->modulesService->enable($this->argument('identifier')); + $result = $this->modulesService->enable( $this->argument( 'identifier' ) ); /** * we'll configure the response * according to the result. */ - if ($result[ 'status' ] === 'success') { - $this->info($result[ 'message' ]); + if ( $result[ 'status' ] === 'success' ) { + $this->info( $result[ 'message' ] ); } else { - $this->error($result[ 'message' ]); + $this->error( $result[ 'message' ] ); } - } catch (Exception $exception) { - $this->error($exception->getMessage()); + } catch ( Exception $exception ) { + $this->error( $exception->getMessage() ); } } } diff --git a/app/Console/Commands/ModuleEvent.php b/app/Console/Commands/ModuleEvent.php index dbf4ff368..7f1cd6ec4 100644 --- a/app/Console/Commands/ModuleEvent.php +++ b/app/Console/Commands/ModuleEvent.php @@ -40,38 +40,38 @@ public function __construct() */ public function handle() { - $modules = app()->make(ModulesService::class); + $modules = app()->make( ModulesService::class ); /** * Check if module is defined */ - if ($module = $modules->get($this->argument('namespace'))) { + if ( $module = $modules->get( $this->argument( 'namespace' ) ) ) { /** * Define Variables */ $eventsPath = $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Events' . DIRECTORY_SEPARATOR; - $name = ucwords(Str::camel($this->argument('name'))); + $name = ucwords( Str::camel( $this->argument( 'name' ) ) ); $fileName = $eventsPath . $name; $fullRelativePath = 'modules' . DIRECTORY_SEPARATOR . $fileName; - $namespace = $this->argument('namespace'); - $fileExists = Storage::disk('ns-modules')->exists( + $namespace = $this->argument( 'namespace' ); + $fileExists = Storage::disk( 'ns-modules' )->exists( $fileName . '.php' ); - if (! $fileExists || ($fileExists && $this->option('force'))) { - Storage::disk('ns-modules')->put($fileName . '.php', view('generate.modules.event', compact( + if ( ! $fileExists || ( $fileExists && $this->option( 'force' ) ) ) { + Storage::disk( 'ns-modules' )->put( $fileName . '.php', view( 'generate.modules.event', compact( 'modules', 'module', 'name', 'namespace' - ))); + ) ) ); - return $this->info(sprintf( - __('The event has been created at the following path "%s"!'), + return $this->info( sprintf( + __( 'The event has been created at the following path "%s"!' ), $fullRelativePath . '.php' - )); + ) ); } - return $this->error('The event already exists !'); + return $this->error( 'The event already exists !' ); } - return $this->error('Unable to locate the module !'); + return $this->error( 'Unable to locate the module !' ); } } diff --git a/app/Console/Commands/ModuleJob.php b/app/Console/Commands/ModuleJob.php index b292a7bf9..42680ee07 100644 --- a/app/Console/Commands/ModuleJob.php +++ b/app/Console/Commands/ModuleJob.php @@ -40,29 +40,29 @@ public function __construct() */ public function handle() { - $modules = app()->make(ModulesService::class); + $modules = app()->make( ModulesService::class ); /** * Check if module is defined */ - if ($module = $modules->get($this->argument('namespace'))) { + if ( $module = $modules->get( $this->argument( 'namespace' ) ) ) { /** * Define Variables */ $jobsPath = $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Jobs' . DIRECTORY_SEPARATOR; - $name = ucwords(Str::camel($this->argument('name'))); + $name = ucwords( Str::camel( $this->argument( 'name' ) ) ); $fileName = $jobsPath . $name; - $namespace = $this->argument('namespace'); + $namespace = $this->argument( 'namespace' ); $relativePath = 'modules' . DIRECTORY_SEPARATOR . $fileName; - $fileExists = Storage::disk('ns-modules')->exists( + $fileExists = Storage::disk( 'ns-modules' )->exists( $fileName . '.php' ); - if (! $fileExists || ($fileExists && $this->option('force'))) { - Storage::disk('ns-modules')->put($fileName . '.php', view('generate.modules.job', compact( + if ( ! $fileExists || ( $fileExists && $this->option( 'force' ) ) ) { + Storage::disk( 'ns-modules' )->put( $fileName . '.php', view( 'generate.modules.job', compact( 'modules', 'module', 'name', 'namespace' - ))); + ) ) ); return $this->info( sprintf( @@ -73,9 +73,9 @@ public function handle() ); } - return $this->error('The job already exists !'); + return $this->error( 'The job already exists !' ); } - return $this->error('Unable to locate the module !'); + return $this->error( 'Unable to locate the module !' ); } } diff --git a/app/Console/Commands/ModuleListerner.php b/app/Console/Commands/ModuleListerner.php index 8091941b0..ada12a184 100644 --- a/app/Console/Commands/ModuleListerner.php +++ b/app/Console/Commands/ModuleListerner.php @@ -40,39 +40,39 @@ public function __construct() */ public function handle() { - $modules = app()->make(ModulesService::class); + $modules = app()->make( ModulesService::class ); /** * Check if module is defined */ - if ($module = $modules->get($this->argument('namespace'))) { + if ( $module = $modules->get( $this->argument( 'namespace' ) ) ) { /** * Define Variables */ $listenerPath = $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Listeners' . DIRECTORY_SEPARATOR; - $name = ucwords(Str::camel($this->argument('name'))); + $name = ucwords( Str::camel( $this->argument( 'name' ) ) ); $fileName = $listenerPath . $name; - $namespace = $this->argument('namespace'); + $namespace = $this->argument( 'namespace' ); $relativePath = 'modules' . DIRECTORY_SEPARATOR . $fileName; - $fileExists = Storage::disk('ns-modules')->exists( + $fileExists = Storage::disk( 'ns-modules' )->exists( $fileName . '.php' ); - if (! $fileExists || ($fileExists && $this->option('force'))) { - Storage::disk('ns-modules')->put($fileName . '.php', view('generate.modules.listener', compact( + if ( ! $fileExists || ( $fileExists && $this->option( 'force' ) ) ) { + Storage::disk( 'ns-modules' )->put( $fileName . '.php', view( 'generate.modules.listener', compact( 'modules', 'module', 'name', 'namespace' - ))); + ) ) ); - return $this->info(sprintf( - __('The listener has been created on the path "%s"!'), + return $this->info( sprintf( + __( 'The listener has been created on the path "%s"!' ), $relativePath . '.php' - )); + ) ); } - return $this->error('The listener already exists !'); + return $this->error( 'The listener already exists !' ); } - return $this->error('Unable to locate the module !'); + return $this->error( 'Unable to locate the module !' ); } } diff --git a/app/Console/Commands/ModuleMigrations.php b/app/Console/Commands/ModuleMigrations.php index 75b3e6d06..40cb850fd 100644 --- a/app/Console/Commands/ModuleMigrations.php +++ b/app/Console/Commands/ModuleMigrations.php @@ -72,15 +72,15 @@ public function handle() */ public function getModule() { - $modules = app()->make(ModulesService::class); - $this->module = $modules->get($this->argument('namespace')); + $modules = app()->make( ModulesService::class ); + $this->module = $modules->get( $this->argument( 'namespace' ) ); - if ($this->module) { - if ($this->passDeleteMigration()) { + if ( $this->module ) { + if ( $this->passDeleteMigration() ) { $this->createMigration(); } } else { - $this->info( "Unable to locate the module \"{$this->argument('namespace')}\"" ); + $this->info( "Unable to locate the module \"{$this->argument( 'namespace' )}\"" ); } } @@ -91,34 +91,34 @@ public function getModule() */ public function passDeleteMigration() { - if ($this->option('forget')) { + if ( $this->option( 'forget' ) ) { /** * This will revert the migration * for a specific module. * * @var ModulesService */ - $moduleService = app()->make(ModulesService::class); - $moduleService->revertMigrations($this->module); + $moduleService = app()->make( ModulesService::class ); + $moduleService->revertMigrations( $this->module ); /** * We'll make sure to clear the migration as * being executed on the system. */ - ModuleMigration::where('namespace', $this->module[ 'namespace' ])->delete(); - $this->info(sprintf('The migration for the module %s has been forgotten.', $this->module[ 'name' ])); + ModuleMigration::where( 'namespace', $this->module[ 'namespace' ] )->delete(); + $this->info( sprintf( 'The migration for the module %s has been forgotten.', $this->module[ 'name' ] ) ); /** * because we use the cache to prevent the system for overusing the * database with too many requests. */ - Artisan::call('cache:clear'); + Artisan::call( 'cache:clear' ); return false; } - if ($this->option('forgetPath')) { - $path = str_replace('modules/', '', $this->option('forgetPath')); + if ( $this->option( 'forgetPath' ) ) { + $path = str_replace( 'modules/', '', $this->option( 'forgetPath' ) ); /** * This will revert the migration @@ -126,31 +126,31 @@ public function passDeleteMigration() * * @var ModulesService */ - $moduleService = app()->make(ModulesService::class); - $moduleService->revertMigrations($this->module, [ $path ]); + $moduleService = app()->make( ModulesService::class ); + $moduleService->revertMigrations( $this->module, [ $path ] ); /** * We'll make sure to clear the migration as * being executed on the system. */ - $migration = ModuleMigration::where('namespace', $this->module[ 'namespace' ]) - ->where('file', $path) + $migration = ModuleMigration::where( 'namespace', $this->module[ 'namespace' ] ) + ->where( 'file', $path ) ->get(); - if ($migration->count() > 0) { + if ( $migration->count() > 0 ) { $migration->delete(); - $this->info(sprintf('The migration "%s" for the module %s has been forgotten.', $path, $this->module[ 'name' ])); + $this->info( sprintf( 'The migration "%s" for the module %s has been forgotten.', $path, $this->module[ 'name' ] ) ); /** * because we use the cache to prevent the system for overusing the * database with too many requests. */ - Artisan::call('cache:clear'); + Artisan::call( 'cache:clear' ); return true; } else { - $this->info(sprintf('No migration found using the provided file path "%s" for the module "%s".', $path, $this->module[ 'name' ])); + $this->info( sprintf( 'No migration found using the provided file path "%s" for the module "%s".', $path, $this->module[ 'name' ] ) ); return false; } @@ -167,16 +167,16 @@ public function passDeleteMigration() * * @return string content */ - public function streamContent($content) + public function streamContent( $content ) { - switch ($content) { + switch ( $content ) { case 'migration': - return view('generate.modules.migration', [ + return view( 'generate.modules.migration', [ 'module' => $this->module, 'migration' => $this->migration, 'table' => $this->table, 'schema' => $this->schema, - ]); + ] ); } } @@ -185,45 +185,45 @@ public function streamContent($content) */ public function createMigration() { - $this->migration = $this->ask('Define the migration name. [Q] to finish, [T] for sample migration'); + $this->migration = $this->ask( 'Define the migration name. [Q] to finish, [T] for sample migration' ); /** * Handle Exist */ - if ($this->migration == 'Q') { + if ( $this->migration == 'Q' ) { return; - } elseif ($this->migration == 'T') { + } elseif ( $this->migration == 'T' ) { $this->migration = 'test table --table=test --schema=foo|bar|noob:integer'; } /** * build right migration name by skipping arguments */ - $this->table = $this->__getTableName($this->migration); - $this->schema = $this->__getSchema($this->migration); - $this->migration = $this->__getMigrationName($this->migration); + $this->table = $this->__getTableName( $this->migration ); + $this->schema = $this->__getSchema( $this->migration ); + $this->migration = $this->__getMigrationName( $this->migration ); - $fileName = $this->module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Migrations' . DIRECTORY_SEPARATOR . Str::studly($this->migration) . '.php'; + $fileName = $this->module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Migrations' . DIRECTORY_SEPARATOR . Str::studly( $this->migration ) . '.php'; /** * Make sure the migration don't exist yet */ - if (Storage::disk('ns-modules')->exists($fileName)) { - return $this->info('A migration with the same name has been found !'); + if ( Storage::disk( 'ns-modules' )->exists( $fileName ) ) { + return $this->info( 'A migration with the same name has been found !' ); } /** * Create Migration file */ - Storage::disk('ns-modules')->put( + Storage::disk( 'ns-modules' )->put( $fileName, - $this->streamContent('migration') + $this->streamContent( 'migration' ) ); /** * Closing creating migration */ - $this->info('Migration Successfully created !'); + $this->info( 'Migration Successfully created !' ); /** * Asking another migration file name @@ -237,14 +237,14 @@ public function createMigration() * @param string * @return string */ - private function __getTableName($migration) + private function __getTableName( $migration ) { - $pieces = explode(' ', $migration); + $pieces = explode( ' ', $migration ); $table = false; - foreach ($pieces as $piece) { - if (substr($piece, 0, 8) == '--table=') { - $table = Str::snake(substr($piece, 8)); + foreach ( $pieces as $piece ) { + if ( substr( $piece, 0, 8 ) == '--table=' ) { + $table = Str::snake( substr( $piece, 8 ) ); } } @@ -257,14 +257,14 @@ private function __getTableName($migration) * @param string migration * @return array of schema */ - private function __getSchema(string $migration) + private function __getSchema( string $migration ) { - $pieces = explode(' ', $migration); + $pieces = explode( ' ', $migration ); $schema = []; - foreach ($pieces as $piece) { - if (substr($piece, 0, 9) == '--schema=') { - $schema = $this->__parseSchema(Str::snake(substr($piece, 9))); + foreach ( $pieces as $piece ) { + if ( substr( $piece, 0, 9 ) == '--schema=' ) { + $schema = $this->__parseSchema( Str::snake( substr( $piece, 9 ) ) ); } } @@ -277,17 +277,17 @@ private function __getSchema(string $migration) * @param string * @return array */ - private function __parseSchema(string $schema) + private function __parseSchema( string $schema ) { - $columns = explode('|', $schema); + $columns = explode( '|', $schema ); $schemas = []; - foreach ($columns as $column) { - $details = explode(':', $column); - if (count($details) == 1) { + foreach ( $columns as $column ) { + $details = explode( ':', $column ); + if ( count( $details ) == 1 ) { $schemas[ $details[0] ] = 'string'; } else { - $schemas[ $details[0] ] = $this->__checkColumnType($details[1]); + $schemas[ $details[0] ] = $this->__checkColumnType( $details[1] ); } } @@ -300,9 +300,9 @@ private function __parseSchema(string $schema) * @param string type * @return string type or default type */ - private function __checkColumnType($type) + private function __checkColumnType( $type ) { - if (! in_array($type, [ + if ( ! in_array( $type, [ 'bigIncrements', 'bigInteger', 'binary', 'boolean', 'char', 'date', 'datetime', 'decimal', 'double', 'enum', 'float', 'increments', 'integer', 'json', @@ -310,7 +310,7 @@ private function __checkColumnType($type) 'morphs', 'nullableTimestamps', 'smallInteger', 'tinyInteger', 'softDeletes', 'string', 'text', 'time', 'timestamp', 'timestamps', 'rememberToken', 'unsigned', - ])) { + ] ) ) { return 'string'; } @@ -323,22 +323,22 @@ private function __checkColumnType($type) * @param string migration * @return string */ - private function __getMigrationName($migration) + private function __getMigrationName( $migration ) { $name = ''; $shouldIgnore = false; - $details = explode(' ', $migration); - foreach ($details as $detail) { + $details = explode( ' ', $migration ); + foreach ( $details as $detail ) { /** * while we've not looped the option, we assume the string * belong to the migration name */ - if (substr($detail, 0, 8) == '--table=' || substr($detail, 0, 9) == '--schema=') { + if ( substr( $detail, 0, 8 ) == '--table=' || substr( $detail, 0, 9 ) == '--schema=' ) { $shouldIgnore = true; } - if (! $shouldIgnore) { - $name .= ' ' . ucwords($detail); + if ( ! $shouldIgnore ) { + $name .= ' ' . ucwords( $detail ); } } diff --git a/app/Console/Commands/ModuleModels.php b/app/Console/Commands/ModuleModels.php index ac9fc821f..0d362ed25 100644 --- a/app/Console/Commands/ModuleModels.php +++ b/app/Console/Commands/ModuleModels.php @@ -40,35 +40,35 @@ public function __construct() */ public function handle() { - $modules = app()->make(ModulesService::class); + $modules = app()->make( ModulesService::class ); /** * Check if module is defined */ - if ($module = $modules->get($this->argument('namespace'))) { + if ( $module = $modules->get( $this->argument( 'namespace' ) ) ) { /** * Define Variables */ $modelsPath = $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR; - $name = ucwords(Str::camel($this->argument('name'))); + $name = ucwords( Str::camel( $this->argument( 'name' ) ) ); $fileName = $modelsPath . $name; - $namespace = $this->argument('namespace'); + $namespace = $this->argument( 'namespace' ); - $fileExists = Storage::disk('ns-modules')->exists( + $fileExists = Storage::disk( 'ns-modules' )->exists( $fileName . '.php' ); - if (! $fileExists || ($fileExists && $this->option('force'))) { - Storage::disk('ns-modules')->put($fileName . '.php', view('generate.modules.model', compact( + if ( ! $fileExists || ( $fileExists && $this->option( 'force' ) ) ) { + Storage::disk( 'ns-modules' )->put( $fileName . '.php', view( 'generate.modules.model', compact( 'modules', 'module', 'name', 'namespace' - ))); + ) ) ); - return $this->info('The model has been created !'); + return $this->info( 'The model has been created !' ); } - return $this->error('The model already exists !'); + return $this->error( 'The model already exists !' ); } - return $this->error('Unable to locate the module !'); + return $this->error( 'Unable to locate the module !' ); } } diff --git a/app/Console/Commands/ModuleRequest.php b/app/Console/Commands/ModuleRequest.php index e37b0906b..b62734e63 100644 --- a/app/Console/Commands/ModuleRequest.php +++ b/app/Console/Commands/ModuleRequest.php @@ -50,13 +50,13 @@ public function handle() */ public function getModule() { - $modules = app()->make(ModulesService::class); - $this->module = $modules->get($this->argument('namespace')); + $modules = app()->make( ModulesService::class ); + $this->module = $modules->get( $this->argument( 'namespace' ) ); - if ($this->module) { + if ( $this->module ) { $this->createRequest(); } else { - $this->info('Unable to locate the module.'); + $this->info( 'Unable to locate the module.' ); } } @@ -65,14 +65,14 @@ public function getModule() * * @return string content */ - public function streamContent($content) + public function streamContent( $content ) { - switch ($content) { + switch ( $content ) { case 'migration': - return view('generate.modules.request', [ + return view( 'generate.modules.request', [ 'module' => $this->module, - 'name' => $this->argument('name'), - ]); + 'name' => $this->argument( 'name' ), + ] ); } } @@ -81,34 +81,34 @@ public function streamContent($content) */ public function createRequest() { - $requestName = Str::studly($this->argument('name')); + $requestName = Str::studly( $this->argument( 'name' ) ); $fileName = $this->module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Http' . DIRECTORY_SEPARATOR . 'Requests' . DIRECTORY_SEPARATOR . $requestName . '.php'; /** * Make sure the migration don't exist yet */ - $fileExists = Storage::disk('ns-modules')->exists( + $fileExists = Storage::disk( 'ns-modules' )->exists( $fileName ); - if (! $fileExists || ($fileExists && $this->option('force'))) { - return $this->info(sprintf( - __('A request with the same name has been found !'), + if ( ! $fileExists || ( $fileExists && $this->option( 'force' ) ) ) { + return $this->info( sprintf( + __( 'A request with the same name has been found !' ), $requestName - )); + ) ); } /** * Create Migration file */ - Storage::disk('ns-modules')->put( + Storage::disk( 'ns-modules' )->put( $fileName, - $this->streamContent('migration') + $this->streamContent( 'migration' ) ); /** * Closing creating migration */ - $this->info('The request has been successfully created !'); + $this->info( 'The request has been successfully created !' ); } } diff --git a/app/Console/Commands/ModuleSettings.php b/app/Console/Commands/ModuleSettings.php index e4374bc74..4a920db27 100644 --- a/app/Console/Commands/ModuleSettings.php +++ b/app/Console/Commands/ModuleSettings.php @@ -40,37 +40,37 @@ public function __construct() */ public function handle() { - $modules = app()->make(ModulesService::class); + $modules = app()->make( ModulesService::class ); /** * Check if module is defined */ - if ($module = $modules->get($this->argument('namespace'))) { + if ( $module = $modules->get( $this->argument( 'namespace' ) ) ) { $settingsPath = $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Settings' . DIRECTORY_SEPARATOR; /** * Define the file name */ - $name = ucwords(Str::camel($this->argument('name'))); + $name = ucwords( Str::camel( $this->argument( 'name' ) ) ); $fileName = $settingsPath . $name; - $namespace = $this->argument('namespace'); + $namespace = $this->argument( 'namespace' ); - $fileExists = Storage::disk('ns-modules')->exists( + $fileExists = Storage::disk( 'ns-modules' )->exists( $fileName . '.php' ); - if (! $fileExists || ($fileExists && $this->option('force'))) { - $path = Storage::disk('ns-modules')->put( - $fileName . '.php', view('generate.modules.settings', compact( + if ( ! $fileExists || ( $fileExists && $this->option( 'force' ) ) ) { + $path = Storage::disk( 'ns-modules' )->put( + $fileName . '.php', view( 'generate.modules.settings', compact( 'modules', 'module', 'name', 'namespace' - ))); + ) ) ); - return $this->info('The settings has been created !'); + return $this->info( 'The settings has been created !' ); } - return $this->error('The settings already exists !'); + return $this->error( 'The settings already exists !' ); } - return $this->error('Unable to located the module !'); + return $this->error( 'Unable to located the module !' ); } } diff --git a/app/Console/Commands/ModuleSymlinkCommand.php b/app/Console/Commands/ModuleSymlinkCommand.php index 021f6a59a..7275740fa 100644 --- a/app/Console/Commands/ModuleSymlinkCommand.php +++ b/app/Console/Commands/ModuleSymlinkCommand.php @@ -20,36 +20,36 @@ public function handle() /** * @var ModulesService */ - $moduleService = app()->make(ModulesService::class); + $moduleService = app()->make( ModulesService::class ); - if (! empty($this->argument('namespace'))) { - $module = $moduleService->get($this->argument('namespace')); + if ( ! empty( $this->argument( 'namespace' ) ) ) { + $module = $moduleService->get( $this->argument( 'namespace' ) ); - if ($module) { - $moduleService->createSymLink($this->argument('namespace')); + if ( $module ) { + $moduleService->createSymLink( $this->argument( 'namespace' ) ); $this->newLine(); - return $this->info(sprintf('The symbolink directory has been created/refreshed for the module "%s".', $module[ 'name' ])); + return $this->info( sprintf( 'The symbolink directory has been created/refreshed for the module "%s".', $module[ 'name' ] ) ); } - $this->error(sprintf('Unable to find the module "%s".', $this->argument('namespace'))); + $this->error( sprintf( 'Unable to find the module "%s".', $this->argument( 'namespace' ) ) ); } else { $modules = $moduleService->get(); /** * let's clear all existing links */ - Storage::disk('ns')->deleteDirectory('public/modules'); - Storage::disk('ns')->makeDirectory('public/modules'); + Storage::disk( 'ns' )->deleteDirectory( 'public/modules' ); + Storage::disk( 'ns' )->makeDirectory( 'public/modules' ); - $this->withProgressBar($modules, function ($module) use ($moduleService) { - $moduleService->createSymLink($module[ 'namespace' ]); - }); + $this->withProgressBar( $modules, function ( $module ) use ( $moduleService ) { + $moduleService->createSymLink( $module[ 'namespace' ] ); + } ); $this->newLine(); - return $this->info(sprintf('The symbolink directory has been created/refreshed for "%s" modules.', count($modules))); + return $this->info( sprintf( 'The symbolink directory has been created/refreshed for "%s" modules.', count( $modules ) ) ); } } } diff --git a/app/Console/Commands/ModulesMigrateCommand.php b/app/Console/Commands/ModulesMigrateCommand.php index 4126c9586..1ecd6c6df 100644 --- a/app/Console/Commands/ModulesMigrateCommand.php +++ b/app/Console/Commands/ModulesMigrateCommand.php @@ -49,37 +49,37 @@ public function __construct( */ public function handle() { - $module = $this->modulesService->get($this->argument('moduleNamespace')); + $module = $this->modulesService->get( $this->argument( 'moduleNamespace' ) ); - if (empty($module)) { + if ( empty( $module ) ) { throw new NotFoundException( sprintf( - __('Unable to find a module having the identifier "%s".'), - $this->argument('moduleNamespace') + __( 'Unable to find a module having the identifier "%s".' ), + $this->argument( 'moduleNamespace' ) ) ); } - $migratedFiles = $this->modulesService->getModuleAlreadyMigratedFiles($module); - $unmigratedFiles = $this->modulesService->getModuleUnmigratedFiles($module, $migratedFiles); + $migratedFiles = $this->modulesService->getModuleAlreadyMigratedFiles( $module ); + $unmigratedFiles = $this->modulesService->getModuleUnmigratedFiles( $module, $migratedFiles ); - if (count($unmigratedFiles) === 0) { - return $this->info(sprintf( - __('There is no migrations to perform for the module "%s"'), + if ( count( $unmigratedFiles ) === 0 ) { + return $this->info( sprintf( + __( 'There is no migrations to perform for the module "%s"' ), $module[ 'name' ] - )); + ) ); } - $this->withProgressBar($unmigratedFiles, function ($file) use ($module) { - $response = $this->modulesService->runMigration($module[ 'namespace' ], $file); - AfterMigrationExecutedEvent::dispatch($module, $response, $file); - }); + $this->withProgressBar( $unmigratedFiles, function ( $file ) use ( $module ) { + $response = $this->modulesService->runMigration( $module[ 'namespace' ], $file ); + AfterMigrationExecutedEvent::dispatch( $module, $response, $file ); + } ); $this->newLine(); - $this->info(sprintf( - __('The module migration has successfully been performed for the module "%s"'), + $this->info( sprintf( + __( 'The module migration has successfully been performed for the module "%s"' ), $module[ 'name' ] - )); + ) ); } } diff --git a/app/Console/Commands/ProductCommand.php b/app/Console/Commands/ProductCommand.php index 225c9cddc..47f878edf 100644 --- a/app/Console/Commands/ProductCommand.php +++ b/app/Console/Commands/ProductCommand.php @@ -45,16 +45,16 @@ public function handle() /** * explicit support for multistore */ - if (class_exists(Store::class) && ! empty($this->option('store'))) { - ns()->store->setStore(Store::find($this->option('store'))); + if ( class_exists( Store::class ) && ! empty( $this->option( 'store' ) ) ) { + ns()->store->setStore( Store::find( $this->option( 'store' ) ) ); } /** * @var ProductService */ - $this->productService = app()->make(ProductService::class); + $this->productService = app()->make( ProductService::class ); - match ($this->argument('action')) { + match ( $this->argument( 'action' ) ) { 'update' => $this->updateProducts(), 'compute-taxes' => $this->computeTaxes(), 'refresh-barcode' => $this->refreshBarcodes() @@ -66,38 +66,38 @@ private function computeTaxes() /** * @var TaxService */ - $taxService = app()->make(TaxService::class); + $taxService = app()->make( TaxService::class ); - $this->withProgressBar(ProductUnitQuantity::with('product.tax_group')->get(), function (ProductUnitQuantity $productUnitQuantity) use ($taxService) { + $this->withProgressBar( ProductUnitQuantity::with( 'product.tax_group' )->get(), function ( ProductUnitQuantity $productUnitQuantity ) use ( $taxService ) { $taxService->computeTax( product: $productUnitQuantity, tax_group_id: $productUnitQuantity->product->tax_group_id, tax_type: $productUnitQuantity->product->tax_type ); - }); + } ); $this->newLine(); - $this->info(__('The products taxes were computed successfully.')); + $this->info( __( 'The products taxes were computed successfully.' ) ); } private function refreshBarcodes() { $queryBuilder = $this->queryBuilder(); - $products = $this->withProgressBar($queryBuilder->get(), function ($product) { - $this->productService->generateProductBarcode($product); - }); + $products = $this->withProgressBar( $queryBuilder->get(), function ( $product ) { + $this->productService->generateProductBarcode( $product ); + } ); $this->newLine(); - return $this->info(__('The product barcodes has been refreshed successfully.')); + return $this->info( __( 'The product barcodes has been refreshed successfully.' ) ); } - private function perform(Builder $queryBuilder, $callback) + private function perform( Builder $queryBuilder, $callback ) { $results = $queryBuilder->get(); - $this->withProgressBar($results, fn($entry) => $callback($entry)); + $this->withProgressBar( $results, fn( $entry ) => $callback( $entry ) ); $this->newLine(); } @@ -105,63 +105,63 @@ private function updateProducts() { $queryBuilder = $this->queryBuilder(); - $this->perform($queryBuilder, function ($product) { - $gallery = ProductGallery::where('product_id', $product->id)->get(); - $units = ProductUnitQuantity::where('product_id', $product->id)->get(); - $subItems = ProductSubItem::where('product_id', $product->id)->get(); + $this->perform( $queryBuilder, function ( $product ) { + $gallery = ProductGallery::where( 'product_id', $product->id )->get(); + $units = ProductUnitQuantity::where( 'product_id', $product->id )->get(); + $subItems = ProductSubItem::where( 'product_id', $product->id )->get(); - $this->productService->update($product, array_merge($product->toArray(), [ + $this->productService->update( $product, array_merge( $product->toArray(), [ 'units' => [ 'unit_group' => $product->unit_group, 'accurate_tracking' => $product->accurate_tracking, - 'selling_group' => $units->map(fn($unitQuantity) => $unitQuantity->toArray())->toArray(), + 'selling_group' => $units->map( fn( $unitQuantity ) => $unitQuantity->toArray() )->toArray(), ], - 'images' => $gallery->map(fn($gallery) => $gallery->toArray())->toArray(), + 'images' => $gallery->map( fn( $gallery ) => $gallery->toArray() )->toArray(), 'groups' => [ - 'product_subitems' => $subItems->map(fn($subItem) => $subItem->toArray())->toArray(), + 'product_subitems' => $subItems->map( fn( $subItem ) => $subItem->toArray() )->toArray(), ], - ])); - }); + ] ) ); + } ); $this->newLine(); - return $this->info(sprintf( - __('%s products where updated.'), + return $this->info( sprintf( + __( '%s products where updated.' ), $queryBuilder->count() - )); + ) ); } private function queryBuilder() { - if (! empty($this->option('where')) || ! empty($this->option('orWhere'))) { + if ( ! empty( $this->option( 'where' ) ) || ! empty( $this->option( 'orWhere' ) ) ) { $query = ( new Product )->newQuery(); - foreach ([ 'where', 'orWhere' ] as $option) { - if (! empty($this->option($option))) { - foreach ($this->option($option) as $optionStatement) { - $equalStatement = explode(':', $optionStatement); - $greatherStatement = explode('>', $optionStatement); - $lessThanStatement = explode('<', $optionStatement); + foreach ( [ 'where', 'orWhere' ] as $option ) { + if ( ! empty( $this->option( $option ) ) ) { + foreach ( $this->option( $option ) as $optionStatement ) { + $equalStatement = explode( ':', $optionStatement ); + $greatherStatement = explode( '>', $optionStatement ); + $lessThanStatement = explode( '<', $optionStatement ); if ( - count($equalStatement) === 2 && - count($greatherStatement) === 1 && - count($lessThanStatement) === 1) { - $query->$option($equalStatement[0], $equalStatement[1]); + count( $equalStatement ) === 2 && + count( $greatherStatement ) === 1 && + count( $lessThanStatement ) === 1 ) { + $query->$option( $equalStatement[0], $equalStatement[1] ); } if ( - count($greatherStatement) === 2 && - count($equalStatement) === 1 && - count($lessThanStatement) === 1) { - $query->$option($greatherStatement[0], '>', $greatherStatement[1]); + count( $greatherStatement ) === 2 && + count( $equalStatement ) === 1 && + count( $lessThanStatement ) === 1 ) { + $query->$option( $greatherStatement[0], '>', $greatherStatement[1] ); } if ( - count($lessThanStatement) === 2 && - count($equalStatement) === 1 && - count($greatherStatement) === 1) { - $query->$option($lessThanStatement[0], '<', $lessThanStatement[1]); + count( $lessThanStatement ) === 2 && + count( $equalStatement ) === 1 && + count( $greatherStatement ) === 1 ) { + $query->$option( $lessThanStatement[0], '<', $lessThanStatement[1] ); } } } @@ -169,7 +169,7 @@ private function queryBuilder() return $query; } else { - return Product::where('id', '>', 0); + return Product::where( 'id', '>', 0 ); } } } diff --git a/app/Console/Commands/ResetCommand.php b/app/Console/Commands/ResetCommand.php index b8c6eaead..877657db4 100644 --- a/app/Console/Commands/ResetCommand.php +++ b/app/Console/Commands/ResetCommand.php @@ -56,7 +56,7 @@ public function __construct( */ public function handle() { - switch ($this->option('mode')) { + switch ( $this->option( 'mode' ) ) { case 'soft': return $this->softReset(); break; @@ -66,26 +66,26 @@ public function handle() case 'grocery': $this->softReset(); $this->initializeRole(); - $this->demoService->run([ + $this->demoService->run( [ 'mode' => 'grocery', - 'create_sales' => $this->option('with-sales') && $this->option('with-procurements') ? true : false, - 'create_procurements' => $this->option('with-procurements') ? true : false, - ]); - $this->info(__('The demo has been enabled.')); + 'create_sales' => $this->option( 'with-sales' ) && $this->option( 'with-procurements' ) ? true : false, + 'create_procurements' => $this->option( 'with-procurements' ) ? true : false, + ] ); + $this->info( __( 'The demo has been enabled.' ) ); break; default: - $this->error(__('Unsupported reset mode.')); + $this->error( __( 'Unsupported reset mode.' ) ); break; } } private function initializeRole() { - if ($this->option('user') === 'default') { - $user = Role::namespace('admin')->users->first(); - Auth::loginUsingId($user->id); + if ( $this->option( 'user' ) === 'default' ) { + $user = Role::namespace( 'admin' )->users->first(); + Auth::loginUsingId( $user->id ); } else { - Auth::loginUsingId($this->option('user')); + Auth::loginUsingId( $this->option( 'user' ) ); } } @@ -96,7 +96,7 @@ private function hardReset(): void { $result = $this->resetService->hardReset(); - $this->info($result[ 'message' ]); + $this->info( $result[ 'message' ] ); } /** @@ -106,6 +106,6 @@ private function softReset(): void { $result = $this->resetService->softReset(); - $this->info($result[ 'message' ]); + $this->info( $result[ 'message' ] ); } } diff --git a/app/Console/Commands/ResetSessionCookieCommand.php b/app/Console/Commands/ResetSessionCookieCommand.php index 39aa8845c..15073cc3c 100644 --- a/app/Console/Commands/ResetSessionCookieCommand.php +++ b/app/Console/Commands/ResetSessionCookieCommand.php @@ -28,9 +28,9 @@ class ResetSessionCookieCommand extends Command */ public function handle() { - switch ($this->argument('action')) { + switch ( $this->argument( 'action' ) ) { case 'generate': - ns()->envEditor->set('SESSION_COOKIE', strtolower('nexopos_' . Str::random(5))); + ns()->envEditor->set( 'SESSION_COOKIE', strtolower( 'nexopos_' . Str::random( 5 ) ) ); break; } } diff --git a/app/Console/Commands/SettingsCommand.php b/app/Console/Commands/SettingsCommand.php index a4d838b9a..d2dfa3138 100644 --- a/app/Console/Commands/SettingsCommand.php +++ b/app/Console/Commands/SettingsCommand.php @@ -27,31 +27,31 @@ class SettingsCommand extends Command */ public function handle(): void { - $fileName = $this->argument('fileName'); + $fileName = $this->argument( 'fileName' ); /** * we should provide a valid file name, * or we throw an error. */ - preg_match('/^[\w]+$/', $fileName, $regSearch); + preg_match( '/^[\w]+$/', $fileName, $regSearch ); - if (empty($regSearch)) { - $this->error(__('You\'ve not provided a valid file name. It shouldn\'t contains any space, dot or special characters.')); + if ( empty( $regSearch ) ) { + $this->error( __( 'You\'ve not provided a valid file name. It shouldn\'t contains any space, dot or special characters.' ) ); exit; } - if (! empty($this->option('module'))) { + if ( ! empty( $this->option( 'module' ) ) ) { - $moduleNamespace = $this->option('module'); + $moduleNamespace = $this->option( 'module' ); /** * @var ModulesService $moduleService */ - $moduleService = app()->make(ModulesService::class); + $moduleService = app()->make( ModulesService::class ); - $module = $moduleService->get($moduleNamespace); + $module = $moduleService->get( $moduleNamespace ); - if ($module) { + if ( $module ) { $filePath = 'modules' . DIRECTORY_SEPARATOR . $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Forms' . DIRECTORY_SEPARATOR . $fileName . '.php'; $this->putFile( @@ -62,7 +62,7 @@ public function handle(): void ] ); } else { - $this->error(sprintf(__('Unable to find a module having "%s" as namespace.'), $moduleNamespace)); + $this->error( sprintf( __( 'Unable to find a module having "%s" as namespace.' ), $moduleNamespace ) ); exit; } } else { @@ -79,24 +79,24 @@ public function handle(): void } } - private function putFile($filePath, $data) + private function putFile( $filePath, $data ) { - if (file_exists(base_path($filePath)) && ! $this->option('force')) { - $this->error(sprintf( - __('A similar file already exists at the path "%s". Use "--force" to overwrite it.'), + if ( file_exists( base_path( $filePath ) ) && ! $this->option( 'force' ) ) { + $this->error( sprintf( + __( 'A similar file already exists at the path "%s". Use "--force" to overwrite it.' ), $filePath - )); + ) ); exit; } - Storage::disk('ns')->put( + Storage::disk( 'ns' )->put( $filePath, - view('generate.form', $data) + view( 'generate.form', $data ) ); - $this->info(sprintf( - __('A new form class was created at the path "%s"'), + $this->info( sprintf( + __( 'A new form class was created at the path "%s"' ), $filePath - )); + ) ); } } diff --git a/app/Console/Commands/SetupCommand.php b/app/Console/Commands/SetupCommand.php index f1b427b01..f4edaf1ce 100644 --- a/app/Console/Commands/SetupCommand.php +++ b/app/Console/Commands/SetupCommand.php @@ -55,27 +55,27 @@ public function __construct() public function handle() { if ( - ! empty($this->option('store_name')) && - ! empty($this->option('admin_email')) && - ! empty($this->option('admin_username')) && - ! empty($this->option('admin_password')) + ! empty( $this->option( 'store_name' ) ) && + ! empty( $this->option( 'admin_email' ) ) && + ! empty( $this->option( 'admin_username' ) ) && + ! empty( $this->option( 'admin_password' ) ) ) { - $this->ns_store_name = $this->option('store_name'); - $this->admin_email = $this->option('admin_email'); - $this->admin_username = $this->option('admin_username'); - $this->admin_password = $this->option('admin_password'); - $this->language = $this->option('language'); + $this->ns_store_name = $this->option( 'store_name' ); + $this->admin_email = $this->option( 'admin_email' ); + $this->admin_username = $this->option( 'admin_username' ); + $this->admin_password = $this->option( 'admin_password' ); + $this->language = $this->option( 'language' ); $this->requireConfirmation = false; } if ( - env('DB_HOST', null) === null || - env('DB_DATABASE', null) === null || - env('DB_USERNAME', null) === null || - env('DB_PASSWORD', null) === null || - env('DB_PREFIX', null) === null + env( 'DB_HOST', null ) === null || + env( 'DB_DATABASE', null ) === null || + env( 'DB_USERNAME', null ) === null || + env( 'DB_PASSWORD', null ) === null || + env( 'DB_PREFIX', null ) === null ) { - return $this->error(__('Unable to proceed, looks like the database can\'t be used.')); + return $this->error( __( 'Unable to proceed, looks like the database can\'t be used.' ) ); } $this->setupLanguage(); @@ -85,40 +85,40 @@ public function handle() $this->setupAdminEmail(); $answer = 'n'; - if ($this->requireConfirmation !== false) { - $answer = $this->ask('Everything seems ready. Would you like to proceed ? [Y]/[N]'); + if ( $this->requireConfirmation !== false ) { + $answer = $this->ask( 'Everything seems ready. Would you like to proceed ? [Y]/[N]' ); } - if (in_array(strtolower($answer), [ 'y', 'yes' ]) || $this->requireConfirmation === false) { + if ( in_array( strtolower( $answer ), [ 'y', 'yes' ] ) || $this->requireConfirmation === false ) { /** * @var SetupService $service */ - $service = app()->make(SetupService::class); - $service->runMigration([ + $service = app()->make( SetupService::class ); + $service->runMigration( [ 'admin_username' => $this->admin_username, 'admin_email' => $this->admin_email, 'password' => $this->admin_password, 'ns_store_name' => $this->ns_store_name, - ]); + ] ); - return $this->info('Thank you, NexoPOS has been successfully installed.'); + return $this->info( 'Thank you, NexoPOS has been successfully installed.' ); } else { - return $this->info('The installation has been aborded.'); + return $this->info( 'The installation has been aborded.' ); } } private function setupStoreName() { - while (empty($this->ns_store_name)) { - $this->ns_store_name = $this->ask(__('What is the store name ? [Q] to quit.')); + while ( empty( $this->ns_store_name ) ) { + $this->ns_store_name = $this->ask( __( 'What is the store name ? [Q] to quit.' ) ); - if ($this->ns_store_name === 'Q') { - $this->info('the setup has been interrupted'); + if ( $this->ns_store_name === 'Q' ) { + $this->info( 'the setup has been interrupted' ); exit; } - if (strlen($this->ns_store_name) < 6) { - $this->error(__('Please provide at least 6 characters for store name.')); + if ( strlen( $this->ns_store_name ) < 6 ) { + $this->error( __( 'Please provide at least 6 characters for store name.' ) ); $this->ns_store_name = null; } } @@ -126,16 +126,16 @@ private function setupStoreName() private function setupAdminPassword() { - while (empty($this->admin_password)) { - $this->admin_password = $this->secret(__('What is the administrator password ? [Q] to quit.')); + while ( empty( $this->admin_password ) ) { + $this->admin_password = $this->secret( __( 'What is the administrator password ? [Q] to quit.' ) ); - if ($this->admin_password === 'Q') { - $this->info('the setup has been interrupted'); + if ( $this->admin_password === 'Q' ) { + $this->info( 'the setup has been interrupted' ); exit; } - if (strlen($this->admin_password) < 6) { - $this->error(__('Please provide at least 6 characters for the administrator password.')); + if ( strlen( $this->admin_password ) < 6 ) { + $this->error( __( 'Please provide at least 6 characters for the administrator password.' ) ); $this->admin_password = null; } } @@ -143,12 +143,12 @@ private function setupAdminPassword() private function setupLanguage() { - while (empty($this->language)) { - $langIndex = $this->choice(__('In which language would you like to install NexoPOS ?'), array_values(config('nexopos.languages'))); - $this->language = array_keys(config('nexopos.languages'))[ $langIndex ]; + while ( empty( $this->language ) ) { + $langIndex = $this->choice( __( 'In which language would you like to install NexoPOS ?' ), array_values( config( 'nexopos.languages' ) ) ); + $this->language = array_keys( config( 'nexopos.languages' ) )[ $langIndex ]; - if (strlen($this->language) != 2) { - $this->error(__('You must define the language of installation.')); + if ( strlen( $this->language ) != 2 ) { + $this->error( __( 'You must define the language of installation.' ) ); $this->language = null; } } @@ -156,18 +156,18 @@ private function setupLanguage() private function setupAdminEmail() { - while (empty($this->admin_email)) { - $this->admin_email = $this->ask(__('What is the administrator email ? [Q] to quit.')); + while ( empty( $this->admin_email ) ) { + $this->admin_email = $this->ask( __( 'What is the administrator email ? [Q] to quit.' ) ); - if ($this->admin_email === 'Q') { - $this->info('the setup has been interrupted'); + if ( $this->admin_email === 'Q' ) { + $this->info( 'the setup has been interrupted' ); exit; } $regex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/'; - if (! preg_match($regex, $this->admin_email)) { - $this->error(__('Please provide a valid email for the administrator.')); + if ( ! preg_match( $regex, $this->admin_email ) ) { + $this->error( __( 'Please provide a valid email for the administrator.' ) ); $this->admin_email = null; } } @@ -175,16 +175,16 @@ private function setupAdminEmail() private function setupAdminUsername() { - while (empty($this->admin_username)) { - $this->admin_username = $this->ask(__('What is the administrator username ? [Q] to quit.')); + while ( empty( $this->admin_username ) ) { + $this->admin_username = $this->ask( __( 'What is the administrator username ? [Q] to quit.' ) ); - if ($this->admin_username === 'Q') { - $this->info('the setup has been interrupted'); + if ( $this->admin_username === 'Q' ) { + $this->info( 'the setup has been interrupted' ); exit; } - if (strlen($this->admin_username) < 5) { - $this->error(__('Please provide at least 5 characters for the administrator username.')); + if ( strlen( $this->admin_username ) < 5 ) { + $this->error( __( 'Please provide at least 5 characters for the administrator username.' ) ); $this->admin_username = null; } } diff --git a/app/Console/Commands/UpdateCommand.php b/app/Console/Commands/UpdateCommand.php index b8da5021e..e449dd1fc 100644 --- a/app/Console/Commands/UpdateCommand.php +++ b/app/Console/Commands/UpdateCommand.php @@ -37,7 +37,7 @@ public function __construct() */ public function handle() { - if ($this->option('module')) { + if ( $this->option( 'module' ) ) { $this->proceedUpdateModule(); } else { $this->proceedCoreUpdate(); @@ -55,39 +55,39 @@ private function proceedUpdateModule() */ private function proceedCoreUpdate() { - switch ($this->argument('argument')) { + switch ( $this->argument( 'argument' ) ) { case 'dev': $this->proceedDevPull(); break; default: - $this->proceedTagUpdate($this->argument('argument')); + $this->proceedTagUpdate( $this->argument( 'argument' ) ); break; } } - private function proceedTagUpdate($tag) + private function proceedTagUpdate( $tag ) { - $gitpath = env('NS_GIT', 'git'); + $gitpath = env( 'NS_GIT', 'git' ); - $this->info(__('Downloading latest dev build...')); + $this->info( __( 'Downloading latest dev build...' ) ); - if ($this->option('force')) { - $this->info(__('Reset project to HEAD...')); - $this->line(exec("{$gitpath} reset HEAD --hard")); + if ( $this->option( 'force' ) ) { + $this->info( __( 'Reset project to HEAD...' ) ); + $this->line( exec( "{$gitpath} reset HEAD --hard" ) ); } - $this->line(exec("{$gitpath} pull")); + $this->line( exec( "{$gitpath} pull" ) ); $this->build(); } private function build() { - $composerpath = env('NS_COMPOSER', 'composer'); - $npmpath = env('NS_NPM', 'npm'); + $composerpath = env( 'NS_COMPOSER', 'composer' ); + $npmpath = env( 'NS_NPM', 'npm' ); - $this->line(exec("{$npmpath} i")); - $this->line(exec("{$composerpath} i")); - $this->line(exec("{$npmpath} run prod")); + $this->line( exec( "{$npmpath} i" ) ); + $this->line( exec( "{$composerpath} i" ) ); + $this->line( exec( "{$npmpath} run prod" ) ); } /** @@ -96,16 +96,16 @@ private function build() */ private function proceedDevPull() { - $gitpath = env('NS_GIT', 'git'); + $gitpath = env( 'NS_GIT', 'git' ); - $this->info(__('Downloading latest dev build...')); + $this->info( __( 'Downloading latest dev build...' ) ); - if ($this->option('force')) { - $this->info(__('Reset project to HEAD...')); - $this->line(exec("{$gitpath} reset HEAD --hard")); + if ( $this->option( 'force' ) ) { + $this->info( __( 'Reset project to HEAD...' ) ); + $this->line( exec( "{$gitpath} reset HEAD --hard" ) ); } - $this->line(exec("{$gitpath} pull")); + $this->line( exec( "{$gitpath} pull" ) ); $this->build(); } } diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 8c68fb447..597eeb1a7 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -32,95 +32,95 @@ class Kernel extends ConsoleKernel * * @return void */ - protected function schedule(Schedule $schedule) + protected function schedule( Schedule $schedule ) { /** * @todo ensures some jobs can also be executed on multistore. * This could be made through events that are dispatched within * the jobs */ - $schedule->call(function () { - if (env('TELESCOPE_ENABLED', false)) { - Artisan::call('telescope:prune', [ 'hours' => 12 ]); + $schedule->call( function () { + if ( env( 'TELESCOPE_ENABLED', false ) ) { + Artisan::call( 'telescope:prune', [ 'hours' => 12 ] ); } - })->daily(); + } )->daily(); /** * This will check if cron jobs are correctly configured * and delete the generated notification if it was disabled. */ - $schedule->call(fn() => ns()->setLastCronActivity())->everyMinute(); + $schedule->call( fn() => ns()->setLastCronActivity() )->everyMinute(); /** * This will check every minutes if the symbolic link is * broken to the storage folder. */ - $schedule->call(fn() => ns()->checkSymbolicLinks())->hourly(); + $schedule->call( fn() => ns()->checkSymbolicLinks() )->hourly(); /** * Will execute transactions job daily. */ - $schedule->job(new ExecuteReccuringTransactionsJob)->daily('00:01'); + $schedule->job( new ExecuteReccuringTransactionsJob )->daily( '00:01' ); /** * Will execute scheduled transactions * every minutes */ - $schedule->job(DetectScheduledTransactionsJob::class)->everyFiveMinutes(); + $schedule->job( DetectScheduledTransactionsJob::class )->everyFiveMinutes(); /** * Will check procurement awaiting automatic * stocking to update their status. */ - $schedule->job(new StockProcurementJob)->daily('00:05'); + $schedule->job( new StockProcurementJob )->daily( '00:05' ); /** * Will purge stoarge orders daily. */ - $schedule->job(new PurgeOrderStorageJob)->daily('15:00'); + $schedule->job( new PurgeOrderStorageJob )->daily( '15:00' ); /** * Will clear hold orders that has expired. */ - $schedule->job(new ClearHoldOrdersJob)->dailyAt('14:00'); + $schedule->job( new ClearHoldOrdersJob )->dailyAt( '14:00' ); /** * Will detect products that has reached the threashold of * low inventory to trigger a notification and an event. */ - $schedule->job(new DetectLowStockProductsJob)->dailyAt('00:02'); + $schedule->job( new DetectLowStockProductsJob )->dailyAt( '00:02' ); /** * Will track orders saved with instalment and * trigger relevant notifications. */ - $schedule->job(new TrackLaidAwayOrdersJob)->dailyAt('13:00'); + $schedule->job( new TrackLaidAwayOrdersJob )->dailyAt( '13:00' ); /** * We'll check if there is a ProductHistoryCombined that was generated * during the current day. If it's not the case, we'll create one. */ - $schedule->job(new EnsureCombinedProductHistoryExistsJob)->hourly(); + $schedule->job( new EnsureCombinedProductHistoryExistsJob )->hourly(); /** * We'll clear temporary files weekly. This will erase folder that * hasn't been deleted after a module installation. */ - $schedule->job(new ClearModuleTempJob)->weekly(); + $schedule->job( new ClearModuleTempJob )->weekly(); /** * @var ModulesService $modules */ - $modules = app()->make(ModulesService::class); + $modules = app()->make( ModulesService::class ); /** * We want to make sure Modules Kernel get injected * on the process so that modules jobs can also be scheduled. */ - collect($modules->getEnabled())->each(function ($module) use ($schedule) { + collect( $modules->getEnabled() )->each( function ( $module ) use ( $schedule ) { $filePath = $module[ 'path' ] . 'Console' . DIRECTORY_SEPARATOR . 'Kernel.php'; - if (is_file($filePath)) { + if ( is_file( $filePath ) ) { include_once $filePath; $kernelClass = 'Modules\\' . $module[ 'namespace' ] . '\Console\Kernel'; @@ -129,12 +129,12 @@ protected function schedule(Schedule $schedule) * a kernel class should be defined * on the module before it's initialized. */ - if (class_exists($kernelClass)) { - $object = new $kernelClass($this->app, $this->events); - $object->schedule($schedule); + if ( class_exists( $kernelClass ) ) { + $object = new $kernelClass( $this->app, $this->events ); + $object->schedule( $schedule ); } } - }); + } ); } /** @@ -144,8 +144,8 @@ protected function schedule(Schedule $schedule) */ protected function commands() { - $this->load(__DIR__ . '/Commands'); + $this->load( __DIR__ . '/Commands' ); - require base_path('routes/console.php'); + require base_path( 'routes/console.php' ); } } diff --git a/app/Crud/CouponCrud.php b/app/Crud/CouponCrud.php index 400e678dc..d03a44281 100644 --- a/app/Crud/CouponCrud.php +++ b/app/Crud/CouponCrud.php @@ -101,14 +101,14 @@ class CouponCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -126,27 +126,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Coupons List'), - 'list_description' => __('Display all coupons.'), - 'no_entry' => __('No coupons has been registered'), - 'create_new' => __('Add a new coupon'), - 'create_title' => __('Create a new coupon'), - 'create_description' => __('Register a new coupon and save it.'), - 'edit_title' => __('Edit coupon'), - 'edit_description' => __('Modify Coupon.'), - 'back_to_list' => __('Return to Coupons'), + 'list_title' => __( 'Coupons List' ), + 'list_description' => __( 'Display all coupons.' ), + 'no_entry' => __( 'No coupons has been registered' ), + 'create_new' => __( 'Add a new coupon' ), + 'create_title' => __( 'Create a new coupon' ), + 'create_description' => __( 'Register a new coupon and save it.' ), + 'edit_title' => __( 'Edit coupon' ), + 'edit_description' => __( 'Modify Coupon.' ), + 'back_to_list' => __( 'Return to Coupons' ), ]; } @@ -154,7 +154,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -163,148 +163,148 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', 'validation' => 'required', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'active' => false, 'fields' => [ [ 'type' => 'text', 'name' => 'code', - 'label' => __('Coupon Code'), + 'label' => __( 'Coupon Code' ), 'validation' => [ 'required', - Rule::unique('nexopos_coupons', 'code')->ignore($entry !== null ? $entry->id : 0), + Rule::unique( 'nexopos_coupons', 'code' )->ignore( $entry !== null ? $entry->id : 0 ), ], - 'description' => __('Might be used while printing the coupon.'), + 'description' => __( 'Might be used while printing the coupon.' ), 'value' => $entry->code ?? '', ], [ 'type' => 'select', 'name' => 'type', 'validation' => 'required', - 'options' => Helper::kvToJsOptions([ - 'percentage_discount' => __('Percentage Discount'), - 'flat_discount' => __('Flat Discount'), - ]), - 'label' => __('Type'), + 'options' => Helper::kvToJsOptions( [ + 'percentage_discount' => __( 'Percentage Discount' ), + 'flat_discount' => __( 'Flat Discount' ), + ] ), + 'label' => __( 'Type' ), 'value' => $entry->type ?? '', - 'description' => __('Define which type of discount apply to the current coupon.'), + 'description' => __( 'Define which type of discount apply to the current coupon.' ), ], [ 'type' => 'text', 'name' => 'discount_value', - 'label' => __('Discount Value'), - 'description' => __('Define the percentage or flat value.'), + 'label' => __( 'Discount Value' ), + 'description' => __( 'Define the percentage or flat value.' ), 'value' => $entry->discount_value ?? '', ], [ 'type' => 'datetime', 'name' => 'valid_until', - 'label' => __('Valid Until'), - 'description' => __('Determine Until When the coupon is valid.'), + 'label' => __( 'Valid Until' ), + 'description' => __( 'Determine Until When the coupon is valid.' ), 'value' => $entry->valid_until ?? '', ], [ 'type' => 'number', 'name' => 'minimum_cart_value', - 'label' => __('Minimum Cart Value'), - 'description' => __('What is the minimum value of the cart to make this coupon eligible.'), + 'label' => __( 'Minimum Cart Value' ), + 'description' => __( 'What is the minimum value of the cart to make this coupon eligible.' ), 'value' => $entry->minimum_cart_value ?? '', ], [ 'type' => 'text', 'name' => 'maximum_cart_value', - 'label' => __('Maximum Cart Value'), - 'description' => __('The value above which the current coupon can\'t apply.'), + 'label' => __( 'Maximum Cart Value' ), + 'description' => __( 'The value above which the current coupon can\'t apply.' ), 'value' => $entry->maximum_cart_value ?? '', ], [ 'type' => 'datetimepicker', 'name' => 'valid_hours_start', - 'label' => __('Valid Hours Start'), - 'description' => __('Define form which hour during the day the coupons is valid.'), + 'label' => __( 'Valid Hours Start' ), + 'description' => __( 'Define form which hour during the day the coupons is valid.' ), 'value' => $entry->valid_hours_start ?? '', ], [ 'type' => 'datetimepicker', 'name' => 'valid_hours_end', - 'label' => __('Valid Hours End'), - 'description' => __('Define to which hour during the day the coupons end stop valid.'), + 'label' => __( 'Valid Hours End' ), + 'description' => __( 'Define to which hour during the day the coupons end stop valid.' ), 'value' => $entry->valid_hours_end ?? '', ], [ 'type' => 'number', 'name' => 'limit_usage', - 'label' => __('Limit Usage'), - 'description' => __('Define how many time a coupons can be redeemed.'), + 'label' => __( 'Limit Usage' ), + 'description' => __( 'Define how many time a coupons can be redeemed.' ), 'value' => $entry->limit_usage ?? '', ], ], ], 'selected_products' => [ - 'label' => __('Products'), + 'label' => __( 'Products' ), 'active' => true, 'fields' => [ [ 'type' => 'multiselect', 'name' => 'products', - 'options' => Helper::toJsOptions(Product::get(), [ 'id', 'name' ]), - 'label' => __('Select Products'), - 'value' => $entry instanceof Coupon ? $entry->products->map(fn($product) => $product->product_id)->toArray() : [], - 'description' => __('The following products will be required to be present on the cart, in order for this coupon to be valid.'), + 'options' => Helper::toJsOptions( Product::get(), [ 'id', 'name' ] ), + 'label' => __( 'Select Products' ), + 'value' => $entry instanceof Coupon ? $entry->products->map( fn( $product ) => $product->product_id )->toArray() : [], + 'description' => __( 'The following products will be required to be present on the cart, in order for this coupon to be valid.' ), ], ], ], 'selected_categories' => [ - 'label' => __('Categories'), + 'label' => __( 'Categories' ), 'active' => false, 'fields' => [ [ 'type' => 'multiselect', 'name' => 'categories', - 'options' => Helper::toJsOptions(ProductCategory::get(), [ 'id', 'name' ]), - 'label' => __('Select Categories'), - 'value' => $entry instanceof Coupon ? $entry->categories->map(fn($category) => $category->category_id)->toArray() : [], - 'description' => __('The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.'), + 'options' => Helper::toJsOptions( ProductCategory::get(), [ 'id', 'name' ] ), + 'label' => __( 'Select Categories' ), + 'value' => $entry instanceof Coupon ? $entry->categories->map( fn( $category ) => $category->category_id )->toArray() : [], + 'description' => __( 'The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.' ), ], ], ], 'selected_groups' => [ - 'label' => __('Customer Groups'), + 'label' => __( 'Customer Groups' ), 'active' => false, 'fields' => [ [ 'type' => 'multiselect', 'name' => 'groups', - 'options' => CustomerGroup::get([ 'name', 'id' ])->map(fn($group) => [ + 'options' => CustomerGroup::get( [ 'name', 'id' ] )->map( fn( $group ) => [ 'label' => $group->name, 'value' => $group->id, - ]), - 'label' => __('Assigned To Customer Group'), - 'description' => __('Only the customers who belongs to the selected groups will be able to use the coupon.'), - 'value' => $entry instanceof Coupon ? $entry->groups->map(fn($group) => $group->group_id)->toArray() : [], + ] ), + 'label' => __( 'Assigned To Customer Group' ), + 'description' => __( 'Only the customers who belongs to the selected groups will be able to use the coupon.' ), + 'value' => $entry instanceof Coupon ? $entry->groups->map( fn( $group ) => $group->group_id )->toArray() : [], ], ], ], 'selected_customers' => [ - 'label' => __('Customers'), + 'label' => __( 'Customers' ), 'active' => false, 'fields' => [ [ 'type' => 'multiselect', 'name' => 'customers', - 'options' => Customer::get([ 'first_name', 'id' ])->map(fn($customer) => [ + 'options' => Customer::get( [ 'first_name', 'id' ] )->map( fn( $customer ) => [ 'label' => $customer->first_name, 'value' => $customer->id, - ]), - 'label' => __('Assigned To Customers'), - 'description' => __('Only the customers selected will be ale to use the coupon.'), - 'value' => $entry instanceof Coupon ? $entry->customers->map(fn($customer) => $customer->customer_id)->toArray() : [], + ] ), + 'label' => __( 'Assigned To Customers' ), + 'description' => __( 'Only the customers selected will be ale to use the coupon.' ), + 'value' => $entry instanceof Coupon ? $entry->customers->map( fn( $customer ) => $customer->customer_id )->toArray() : [], ], ], ], @@ -315,40 +315,40 @@ public function getForm($entry = null) /** * Filter POST input fields */ - public function filterPostInputs(array $inputs): array + public function filterPostInputs( array $inputs ): array { - $inputs = collect($inputs)->map(function ($field, $key) { - if ((in_array($key, [ + $inputs = collect( $inputs )->map( function ( $field, $key ) { + if ( ( in_array( $key, [ 'minimum_cart_value', 'maximum_cart_value', 'assigned', 'limit_usage', - ]) && empty($field)) || is_array($field)) { - return ! is_array($field) ? ($field ?: 0) : $field; + ] ) && empty( $field ) ) || is_array( $field ) ) { + return ! is_array( $field ) ? ( $field ?: 0 ) : $field; } return $field; - })->toArray(); + } )->toArray(); - $inputs = collect($inputs)->filter(function ($field, $key) { - if ((in_array($key, [ + $inputs = collect( $inputs )->filter( function ( $field, $key ) { + if ( ( in_array( $key, [ 'minimum_cart_value', 'maximum_cart_value', 'assigned', 'limit_usage', - ]) && empty($field) && $field === null) || is_array($field)) { + ] ) && empty( $field ) && $field === null ) || is_array( $field ) ) { return false; } return true; - })->toArray(); + } )->toArray(); - if (! empty($inputs[ 'valid_hours_end' ])) { - $inputs[ 'valid_hours_end' ] = Carbon::parse($inputs[ 'valid_hours_end' ])->toDateTimeString(); + if ( ! empty( $inputs[ 'valid_hours_end' ] ) ) { + $inputs[ 'valid_hours_end' ] = Carbon::parse( $inputs[ 'valid_hours_end' ] )->toDateTimeString(); } - if (! empty($inputs[ 'valid_hours_start' ])) { - $inputs[ 'valid_hours_start' ] = Carbon::parse($inputs[ 'valid_hours_start' ])->toDateTimeString(); + if ( ! empty( $inputs[ 'valid_hours_start' ] ) ) { + $inputs[ 'valid_hours_start' ] = Carbon::parse( $inputs[ 'valid_hours_start' ] )->toDateTimeString(); } return $inputs; @@ -357,40 +357,40 @@ public function filterPostInputs(array $inputs): array /** * Filter PUT input fields */ - public function filterPutInputs(array $inputs, Coupon $entry): array + public function filterPutInputs( array $inputs, Coupon $entry ): array { - $inputs = collect($inputs)->map(function ($field, $key) { - if ((in_array($key, [ + $inputs = collect( $inputs )->map( function ( $field, $key ) { + if ( ( in_array( $key, [ 'minimum_cart_value', 'maximum_cart_value', 'assigned', 'limit_usage', - ]) && empty($field)) || is_array($field)) { - return ! is_array($field) ? ($field ?: 0) : $field; + ] ) && empty( $field ) ) || is_array( $field ) ) { + return ! is_array( $field ) ? ( $field ?: 0 ) : $field; } return $field; - })->toArray(); + } )->toArray(); - $inputs = collect($inputs)->filter(function ($field, $key) { - if ((in_array($key, [ + $inputs = collect( $inputs )->filter( function ( $field, $key ) { + if ( ( in_array( $key, [ 'minimum_cart_value', 'maximum_cart_value', 'assigned', 'limit_usage', - ]) && empty($field) && $field === null) || is_array($field)) { + ] ) && empty( $field ) && $field === null ) || is_array( $field ) ) { return false; } return true; - })->toArray(); + } )->toArray(); - if (! empty($inputs[ 'valid_hours_end' ])) { - $inputs[ 'valid_hours_end' ] = Carbon::parse($inputs[ 'valid_hours_end' ])->toDateTimeString(); + if ( ! empty( $inputs[ 'valid_hours_end' ] ) ) { + $inputs[ 'valid_hours_end' ] = Carbon::parse( $inputs[ 'valid_hours_end' ] )->toDateTimeString(); } - if (! empty($inputs[ 'valid_hours_start' ])) { - $inputs[ 'valid_hours_start' ] = Carbon::parse($inputs[ 'valid_hours_start' ])->toDateTimeString(); + if ( ! empty( $inputs[ 'valid_hours_start' ] ) ) { + $inputs[ 'valid_hours_start' ] = Carbon::parse( $inputs[ 'valid_hours_start' ] )->toDateTimeString(); } return $inputs; @@ -399,43 +399,43 @@ public function filterPutInputs(array $inputs, Coupon $entry): array /** * Before saving a record */ - public function beforePost(array $inputs): array + public function beforePost( array $inputs ): array { - $this->allowedTo('create'); - - if ($this->permissions[ 'create' ] !== false) { - if (isset($inputs[ 'products' ]) && ! empty($inputs[ 'products' ])) { - foreach ($inputs[ 'products' ] as $product_id) { - $product = Product::find($product_id); - if (! $product instanceof Product) { - throw new Exception(__('Unable to save the coupon product as this product doens\'t exists.')); + $this->allowedTo( 'create' ); + + if ( $this->permissions[ 'create' ] !== false ) { + if ( isset( $inputs[ 'products' ] ) && ! empty( $inputs[ 'products' ] ) ) { + foreach ( $inputs[ 'products' ] as $product_id ) { + $product = Product::find( $product_id ); + if ( ! $product instanceof Product ) { + throw new Exception( __( 'Unable to save the coupon product as this product doens\'t exists.' ) ); } } } - if (isset($inputs[ 'categories' ]) && ! empty($inputs[ 'categories' ])) { - foreach ($inputs[ 'categories' ] as $category_id) { - $category = ProductCategory::find($category_id); - if (! $category instanceof ProductCategory) { - throw new Exception(__('Unable to save the coupon category as this category doens\'t exists.')); + if ( isset( $inputs[ 'categories' ] ) && ! empty( $inputs[ 'categories' ] ) ) { + foreach ( $inputs[ 'categories' ] as $category_id ) { + $category = ProductCategory::find( $category_id ); + if ( ! $category instanceof ProductCategory ) { + throw new Exception( __( 'Unable to save the coupon category as this category doens\'t exists.' ) ); } } } - if (isset($inputs[ 'customers' ]) && ! empty($inputs[ 'customers' ])) { - foreach ($inputs[ 'customers' ] as $customer_id) { - $category = Customer::find($customer_id); - if (! $category instanceof Customer) { - throw new Exception(__('Unable to save the coupon as one of the selected customer no longer exists.')); + if ( isset( $inputs[ 'customers' ] ) && ! empty( $inputs[ 'customers' ] ) ) { + foreach ( $inputs[ 'customers' ] as $customer_id ) { + $category = Customer::find( $customer_id ); + if ( ! $category instanceof Customer ) { + throw new Exception( __( 'Unable to save the coupon as one of the selected customer no longer exists.' ) ); } } } - if (isset($inputs[ 'groups' ]) && ! empty($inputs[ 'groups' ])) { - foreach ($inputs[ 'groups' ] as $group_id) { - $category = CustomerGroup::find($group_id); - if (! $category instanceof CustomerGroup) { - throw new Exception(__('Unable to save the coupon as one of the selected customer group no longer exists.')); + if ( isset( $inputs[ 'groups' ] ) && ! empty( $inputs[ 'groups' ] ) ) { + foreach ( $inputs[ 'groups' ] as $group_id ) { + $category = CustomerGroup::find( $group_id ); + if ( ! $category instanceof CustomerGroup ) { + throw new Exception( __( 'Unable to save the coupon as one of the selected customer group no longer exists.' ) ); } } } @@ -449,10 +449,10 @@ public function beforePost(array $inputs): array /** * After saving a record */ - public function afterPost(array $inputs, Coupon $coupon): array + public function afterPost( array $inputs, Coupon $coupon ): array { - if (isset($inputs[ 'products' ]) && ! empty($inputs[ 'products' ])) { - foreach ($inputs[ 'products' ] as $product_id) { + if ( isset( $inputs[ 'products' ] ) && ! empty( $inputs[ 'products' ] ) ) { + foreach ( $inputs[ 'products' ] as $product_id ) { $productRelation = new CouponProduct; $productRelation->coupon_id = $coupon->id; $productRelation->product_id = $product_id; @@ -460,8 +460,8 @@ public function afterPost(array $inputs, Coupon $coupon): array } } - if (isset($inputs[ 'categories' ]) && ! empty($inputs[ 'categories' ])) { - foreach ($inputs[ 'categories' ] as $category_id) { + if ( isset( $inputs[ 'categories' ] ) && ! empty( $inputs[ 'categories' ] ) ) { + foreach ( $inputs[ 'categories' ] as $category_id ) { $categoryRelation = new CouponCategory; $categoryRelation->coupon_id = $coupon->id; $categoryRelation->category_id = $category_id; @@ -469,8 +469,8 @@ public function afterPost(array $inputs, Coupon $coupon): array } } - if (isset($inputs[ 'customers' ]) && ! empty($inputs[ 'customers' ])) { - foreach ($inputs[ 'customers' ] as $customer_id) { + if ( isset( $inputs[ 'customers' ] ) && ! empty( $inputs[ 'customers' ] ) ) { + foreach ( $inputs[ 'customers' ] as $customer_id ) { $categoryRelation = new CouponCustomer; $categoryRelation->coupon_id = $coupon->id; $categoryRelation->customer_id = $customer_id; @@ -478,8 +478,8 @@ public function afterPost(array $inputs, Coupon $coupon): array } } - if (isset($inputs[ 'groups' ]) && ! empty($inputs[ 'groups' ])) { - foreach ($inputs[ 'groups' ] as $group_id) { + if ( isset( $inputs[ 'groups' ] ) && ! empty( $inputs[ 'groups' ] ) ) { + foreach ( $inputs[ 'groups' ] as $group_id ) { $categoryRelation = new CouponCustomerGroup; $categoryRelation->coupon_id = $coupon->id; $categoryRelation->group_id = $group_id; @@ -493,9 +493,9 @@ public function afterPost(array $inputs, Coupon $coupon): array /** * get model. */ - public function get(string $param): mixed + public function get( string $param ): mixed { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -504,36 +504,36 @@ public function get(string $param): mixed /** * Before updating a record */ - public function beforePut(array $inputs, $entry): array + public function beforePut( array $inputs, $entry ): array { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); - foreach ($inputs[ 'products' ] ?? [] as $product_id) { - $product = Product::find($product_id); - if (! $product instanceof Product) { - throw new Exception(__('Unable to save the coupon product as this product doens\'t exists.')); + foreach ( $inputs[ 'products' ] ?? [] as $product_id ) { + $product = Product::find( $product_id ); + if ( ! $product instanceof Product ) { + throw new Exception( __( 'Unable to save the coupon product as this product doens\'t exists.' ) ); } } - foreach ($inputs[ 'categories' ] ?? [] as $category_id) { - $category = ProductCategory::find($category_id); - if (! $category instanceof ProductCategory) { - throw new Exception(__('Unable to save the coupon as this category doens\'t exists.')); + foreach ( $inputs[ 'categories' ] ?? [] as $category_id ) { + $category = ProductCategory::find( $category_id ); + if ( ! $category instanceof ProductCategory ) { + throw new Exception( __( 'Unable to save the coupon as this category doens\'t exists.' ) ); } } - foreach ($inputs[ 'customers' ] ?? [] as $customer_id) { - $customer = Customer::find($customer_id); - if (! $customer instanceof Customer) { - throw new Exception(__('Unable to save the coupon as one of the customers provided no longer exists.')); + foreach ( $inputs[ 'customers' ] ?? [] as $customer_id ) { + $customer = Customer::find( $customer_id ); + if ( ! $customer instanceof Customer ) { + throw new Exception( __( 'Unable to save the coupon as one of the customers provided no longer exists.' ) ); } } - foreach ($inputs[ 'groups' ] ?? [] as $groups) { - $customerGroup = CustomerGroup::find($groups); - if (! $customerGroup instanceof CustomerGroup) { - throw new Exception(__('Unable to save the coupon as one of the provided customer group no longer exists.')); + foreach ( $inputs[ 'groups' ] ?? [] as $groups ) { + $customerGroup = CustomerGroup::find( $groups ); + if ( ! $customerGroup instanceof CustomerGroup ) { + throw new Exception( __( 'Unable to save the coupon as one of the provided customer group no longer exists.' ) ); } } } else { @@ -546,9 +546,9 @@ public function beforePut(array $inputs, $entry): array /** * After updating a record */ - public function afterPut(array $inputs, Coupon $coupon): array + public function afterPut( array $inputs, Coupon $coupon ): array { - collect([ + collect( [ 'products' => [ 'property' => 'product_id', 'class' => CouponProduct::class, @@ -565,20 +565,20 @@ public function afterPut(array $inputs, Coupon $coupon): array 'property' => 'customer_id', 'class' => CouponCustomer::class, ], - ])->each(function ($data, $key) use ($inputs, $coupon) { - $coupon->{$key}->each(function ($element) use ($inputs, $data, $key) { - if (isset($inputs[ $key ]) && ! in_array($element->{$data[ 'property' ]}, $inputs[ $key ])) { + ] )->each( function ( $data, $key ) use ( $inputs, $coupon ) { + $coupon->{$key}->each( function ( $element ) use ( $inputs, $data, $key ) { + if ( isset( $inputs[ $key ] ) && ! in_array( $element->{$data[ 'property' ]}, $inputs[ $key ] ) ) { $element->delete(); } - }); + } ); - if (isset($inputs[ $key ])) { - foreach ($inputs[ $key ] as $argument) { - $productRelation = $data[ 'class' ]::where('coupon_id', $coupon->id) - ->where($data[ 'property' ], $argument) + if ( isset( $inputs[ $key ] ) ) { + foreach ( $inputs[ $key ] as $argument ) { + $productRelation = $data[ 'class' ]::where( 'coupon_id', $coupon->id ) + ->where( $data[ 'property' ], $argument ) ->first(); - if (! $productRelation instanceof $data[ 'class' ]) { + if ( ! $productRelation instanceof $data[ 'class' ] ) { $productRelation = new $data[ 'class' ]; } @@ -587,7 +587,7 @@ public function afterPut(array $inputs, Coupon $coupon): array $productRelation->save(); } } - }); + } ); return $inputs; } @@ -595,16 +595,16 @@ public function afterPut(array $inputs, Coupon $coupon): array /** * Before Delete */ - public function beforeDelete($namespace, $id, $coupon): void + public function beforeDelete( $namespace, $id, $coupon ): void { - ns()->restrict($this->permissions[ 'delete' ]); + ns()->restrict( $this->permissions[ 'delete' ] ); - if ($namespace == 'ns.coupons') { + if ( $namespace == 'ns.coupons' ) { /** * @var CustomerService */ - $customerService = app()->make(CustomerService::class); - $customerService->deleteRelatedCustomerCoupon($coupon); + $customerService = app()->make( CustomerService::class ); + $customerService->deleteRelatedCustomerCoupon( $coupon ); $coupon->categories()->delete(); $coupon->products()->delete(); @@ -620,37 +620,37 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'type' => [ - 'label' => __('Type'), + 'label' => __( 'Type' ), '$direction' => '', '$sort' => false, ], 'discount_value' => [ - 'label' => __('Discount Value'), + 'label' => __( 'Discount Value' ), '$direction' => '', '$sort' => false, ], 'valid_hours_start' => [ - 'label' => __('Valid From'), + 'label' => __( 'Valid From' ), '$direction' => '', '$sort' => false, ], 'valid_hours_end' => [ - 'label' => __('Valid Till'), + 'label' => __( 'Valid Till' ), '$direction' => '', '$sort' => false, ], 'nexopos_users_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -660,47 +660,47 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace): CrudEntry + public function setActions( CrudEntry $entry, $namespace ): CrudEntry { - switch ($entry->type) { + switch ( $entry->type ) { case 'percentage_discount': - $entry->type = __('Percentage Discount'); + $entry->type = __( 'Percentage Discount' ); $entry->discount_value = $entry->discount_value . '%'; break; case 'flat_discount': - $entry->type = __('Flat Discount'); - $entry->discount_value = (string) ns()->currency->define($entry->discount_value); + $entry->type = __( 'Flat Discount' ); + $entry->discount_value = (string) ns()->currency->define( $entry->discount_value ); break; default: - $entry->type = __('N/A'); + $entry->type = __( 'N/A' ); break; } - $entry->valid_until = $entry->valid_until ?? __('Undefined'); + $entry->valid_until = $entry->valid_until ?? __( 'Undefined' ); // you can make changes here $entry->action( identifier: 'edit-coupon', - label: __('Edit'), + label: __( 'Edit' ), type: 'GOTO', - url: ns()->url('/dashboard/customers/coupons/edit/' . $entry->id), + url: ns()->url( '/dashboard/customers/coupons/edit/' . $entry->id ), ); $entry->action( identifier: 'coupon-history', - label: __('History'), + label: __( 'History' ), type: 'GOTO', - url: ns()->url('/dashboard/customers/coupons/history/' . $entry->id), + url: ns()->url( '/dashboard/customers/coupons/history/' . $entry->id ), ); $entry->action( identifier: 'delete', - label: __('Delete'), + label: __( 'Delete' ), type: 'DELETE', - url: ns()->url('/api/crud/ns.coupons/' . $entry->id), + url: ns()->url( '/api/crud/ns.coupons/' . $entry->id ), confirm: [ - 'message' => __('Would you like to delete this ?'), - 'title' => __('Delete a licence'), + 'message' => __( 'Would you like to delete this ?' ), + 'title' => __( 'Delete a licence' ), ], ); @@ -710,18 +710,18 @@ public function setActions(CrudEntry $entry, $namespace): CrudEntry /** * Bulk Delete Action */ - public function bulkAction(Request $request): bool|array + public function bulkAction( Request $request ): bool|array { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -731,10 +731,10 @@ public function bulkAction(Request $request): bool|array 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof Coupon) { - $this->beforeDelete($this->namespace, null, $entity); + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof Coupon ) { + $this->beforeDelete( $this->namespace, null, $entity ); $entity->delete(); $status[ 'success' ]++; } else { @@ -745,7 +745,7 @@ public function bulkAction(Request $request): bool|array return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** @@ -754,11 +754,11 @@ public function bulkAction(Request $request): bool|array public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'customers/coupons'), - 'create' => ns()->url('dashboard/' . 'customers/coupons/create'), - 'edit' => ns()->url('dashboard/' . 'customers/coupons/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.customers-coupons'), - 'put' => ns()->url('api/crud/' . 'ns.customers-coupons/{id}' . ''), + 'list' => ns()->url( 'dashboard/' . 'customers/coupons' ), + 'create' => ns()->url( 'dashboard/' . 'customers/coupons/create' ), + 'edit' => ns()->url( 'dashboard/' . 'customers/coupons/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.customers-coupons' ), + 'put' => ns()->url( 'api/crud/' . 'ns.customers-coupons/{id}' . '' ), ]; } @@ -767,20 +767,20 @@ public function getLinks(): array **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } - public function hook($query): void + public function hook( $query ): void { - $query->orderBy('created_at', 'desc'); + $query->orderBy( 'created_at', 'desc' ); } /** diff --git a/app/Crud/CouponOrderHistoryCrud.php b/app/Crud/CouponOrderHistoryCrud.php index f52daec05..438e81525 100644 --- a/app/Crud/CouponOrderHistoryCrud.php +++ b/app/Crud/CouponOrderHistoryCrud.php @@ -152,12 +152,12 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'addActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'addActions' ], 10, 2 ); } - public function hook($query): void + public function hook( $query ): void { - $query->where('coupon_id', request()->query('coupon_id')); + $query->where( 'coupon_id', request()->query( 'coupon_id' ) ); } /** @@ -169,15 +169,15 @@ public function hook($query): void public function getLabels() { return [ - 'list_title' => __('Coupon Order Histories List'), - 'list_description' => __('Display all coupon order histories.'), - 'no_entry' => __('No coupon order histories has been registered'), - 'create_new' => __('Add a new coupon order history'), - 'create_title' => __('Create a new coupon order history'), - 'create_description' => __('Register a new coupon order history and save it.'), - 'edit_title' => __('Edit coupon order history'), - 'edit_description' => __('Modify Coupon Order History.'), - 'back_to_list' => __('Return to Coupon Order Histories'), + 'list_title' => __( 'Coupon Order Histories List' ), + 'list_description' => __( 'Display all coupon order histories.' ), + 'no_entry' => __( 'No coupon order histories has been registered' ), + 'create_new' => __( 'Add a new coupon order history' ), + 'create_title' => __( 'Create a new coupon order history' ), + 'create_description' => __( 'Register a new coupon order history and save it.' ), + 'edit_title' => __( 'Edit coupon order history' ), + 'edit_description' => __( 'Modify Coupon Order History.' ), + 'back_to_list' => __( 'Return to Coupon Order Histories' ), ]; } @@ -187,93 +187,93 @@ public function getLabels() * @param object/null * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), // 'name' => 'name', // 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'id', - 'label' => __('Id'), + 'label' => __( 'Id' ), 'value' => $entry->id ?? '', ], [ 'type' => 'text', 'name' => 'code', - 'label' => __('Code'), + 'label' => __( 'Code' ), 'value' => $entry->code ?? '', ], [ 'type' => 'text', 'name' => 'name', - 'label' => __('Name'), + 'label' => __( 'Name' ), 'value' => $entry->name ?? '', ], [ 'type' => 'text', 'name' => 'customer_coupon_id', - 'label' => __('Customer_coupon_id'), + 'label' => __( 'Customer_coupon_id' ), 'value' => $entry->customer_coupon_id ?? '', ], [ 'type' => 'text', 'name' => 'order_id', - 'label' => __('Order_id'), + 'label' => __( 'Order_id' ), 'value' => $entry->order_id ?? '', ], [ 'type' => 'text', 'name' => 'type', - 'label' => __('Type'), + 'label' => __( 'Type' ), 'value' => $entry->type ?? '', ], [ 'type' => 'text', 'name' => 'discount_value', - 'label' => __('Discount_value'), + 'label' => __( 'Discount_value' ), 'value' => $entry->discount_value ?? '', ], [ 'type' => 'text', 'name' => 'minimum_cart_value', - 'label' => __('Minimum_cart_value'), + 'label' => __( 'Minimum_cart_value' ), 'value' => $entry->minimum_cart_value ?? '', ], [ 'type' => 'text', 'name' => 'maximum_cart_value', - 'label' => __('Maximum_cart_value'), + 'label' => __( 'Maximum_cart_value' ), 'value' => $entry->maximum_cart_value ?? '', ], [ 'type' => 'text', 'name' => 'limit_usage', - 'label' => __('Limit_usage'), + 'label' => __( 'Limit_usage' ), 'value' => $entry->limit_usage ?? '', ], [ 'type' => 'text', 'name' => 'value', - 'label' => __('Value'), + 'label' => __( 'Value' ), 'value' => $entry->value ?? '', ], [ 'type' => 'text', 'name' => 'author', - 'label' => __('Author'), + 'label' => __( 'Author' ), 'value' => $entry->author ?? '', ], [ 'type' => 'text', 'name' => 'uuid', - 'label' => __('Uuid'), + 'label' => __( 'Uuid' ), 'value' => $entry->uuid ?? '', ], [ 'type' => 'text', 'name' => 'created_at', - 'label' => __('Created_at'), + 'label' => __( 'Created_at' ), 'value' => $entry->created_at ?? '', ], [ 'type' => 'text', 'name' => 'updated_at', - 'label' => __('Updated_at'), + 'label' => __( 'Updated_at' ), 'value' => $entry->updated_at ?? '', ], ], ], @@ -287,7 +287,7 @@ public function getForm($entry = null) * @param array of fields * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -298,7 +298,7 @@ public function filterPostInputs($inputs) * @param array of fields * @return array of fields */ - public function filterPutInputs($inputs, OrderCoupon $entry) + public function filterPutInputs( $inputs, OrderCoupon $entry ) { return $inputs; } @@ -306,13 +306,13 @@ public function filterPutInputs($inputs, OrderCoupon $entry) /** * Before saving a record * - * @param Request $request + * @param Request $request * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -323,10 +323,10 @@ public function beforePost($request) /** * After saving a record * - * @param Request $request + * @param Request $request * @return void */ - public function afterPost($request, OrderCoupon $entry) + public function afterPost( $request, OrderCoupon $entry ) { return $request; } @@ -337,9 +337,9 @@ public function afterPost($request, OrderCoupon $entry) * @param string * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -352,10 +352,10 @@ public function get($param) * @param object entry * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -370,7 +370,7 @@ public function beforePut($request, $entry) * @param object entry * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -380,9 +380,9 @@ public function afterPut($request, $entry) * * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.coupons-orders-hitory') { + if ( $namespace == 'ns.coupons-orders-hitory' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -392,8 +392,8 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -407,47 +407,47 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'code' => [ - 'label' => __('Code'), + 'label' => __( 'Code' ), '$direction' => '', '$sort' => false, ], 'customer_first_name' => [ - 'label' => __('Customer'), + 'label' => __( 'Customer' ), '$direction' => '', '$sort' => false, ], 'order_code' => [ - 'label' => __('Order'), + 'label' => __( 'Order' ), '$direction' => '', '$sort' => false, ], 'type' => [ - 'label' => __('Type'), + 'label' => __( 'Type' ), '$direction' => '', '$sort' => false, ], 'discount_value' => [ - 'label' => __('Discount'), + 'label' => __( 'Discount' ), '$direction' => '', '$sort' => false, ], 'value' => [ - 'label' => __('Value'), + 'label' => __( 'Value' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -457,24 +457,24 @@ public function getColumns(): array /** * Define actions */ - public function addActions(CrudEntry $entry, $namespace) + public function addActions( CrudEntry $entry, $namespace ) { /** * Declaring entry actions */ $entry->action( - label: __('Edit'), + label: __( 'Edit' ), identifier: 'edit', - url: ns()->url('/dashboard/' . $this->slug . '/edit/' . $entry->id) + url: ns()->url( '/dashboard/' . $this->slug . '/edit/' . $entry->id ) ); $entry->action( - label: __('Delete'), + label: __( 'Delete' ), identifier: 'delete', - url: ns()->url('/api/crud/ns.coupons-orders-hitory/' . $entry->id), + url: ns()->url( '/api/crud/ns.coupons-orders-hitory/' . $entry->id ), type: 'DELETE', confirm: [ - 'message' => __('Would you like to delete this?'), + 'message' => __( 'Would you like to delete this?' ), ] ); @@ -487,18 +487,18 @@ public function addActions(CrudEntry $entry, $namespace) * @param object Request with object * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -508,9 +508,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof OrderCoupon) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof OrderCoupon ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -521,7 +521,7 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** @@ -532,11 +532,11 @@ public function bulkAction(Request $request) public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . '/'), - 'create' => ns()->url('dashboard/' . '//create'), - 'edit' => ns()->url('dashboard/' . '//edit/'), - 'post' => ns()->url('api/crud/' . 'ns.coupons-orders-hitory'), - 'put' => ns()->url('api/crud/' . 'ns.coupons-orders-hitory/{id}' . ''), + 'list' => ns()->url( 'dashboard/' . '/' ), + 'create' => ns()->url( 'dashboard/' . '//create' ), + 'edit' => ns()->url( 'dashboard/' . '//edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.coupons-orders-hitory' ), + 'put' => ns()->url( 'api/crud/' . 'ns.coupons-orders-hitory/{id}' . '' ), ]; } @@ -547,15 +547,15 @@ public function getLinks(): array **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** diff --git a/app/Crud/CustomerAccountCrud.php b/app/Crud/CustomerAccountCrud.php index 7e3d9ad3f..9504a8815 100644 --- a/app/Crud/CustomerAccountCrud.php +++ b/app/Crud/CustomerAccountCrud.php @@ -106,14 +106,14 @@ class CustomerAccountCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -134,35 +134,35 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); /** * We'll define custom export columns */ $this->exportColumns = [ 'previous_amount' => [ - 'label' => __('Previous Amount'), + 'label' => __( 'Previous Amount' ), ], 'amount' => [ - 'label' => __('Amount'), + 'label' => __( 'Amount' ), ], 'next_amount' => [ - 'label' => __('Next Amount'), + 'label' => __( 'Next Amount' ), ], 'operation' => [ - 'label' => __('Operation'), + 'label' => __( 'Operation' ), ], 'description' => [ - 'label' => __('Description'), + 'label' => __( 'Description' ), ], 'order_code' => [ - 'label' => __('Order'), + 'label' => __( 'Order' ), ], 'user_username' => [ - 'label' => __('By'), + 'label' => __( 'By' ), ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), ], ]; @@ -170,82 +170,82 @@ public function __construct() * This will allow module to change the bound * class for the default User model. */ - $UserClass = app()->make(User::class); + $UserClass = app()->make( User::class ); $this->queryFilters = [ [ 'type' => 'daterangepicker', 'name' => 'nexopos_customers_account_history.created_at', - 'description' => __('Restrict the records by the creation date.'), - 'label' => __('Created Between'), + 'description' => __( 'Restrict the records by the creation date.' ), + 'label' => __( 'Created Between' ), ], [ 'type' => 'select', - 'label' => __('Operation Type'), + 'label' => __( 'Operation Type' ), 'name' => 'payment_status', - 'description' => __('Restrict the orders by the payment status.'), - 'options' => Helper::kvToJsOptions([ - CustomerAccountHistory::OPERATION_ADD => __('Crediting (Add)'), - CustomerAccountHistory::OPERATION_REFUND => __('Refund (Add)'), - CustomerAccountHistory::OPERATION_DEDUCT => __('Deducting (Remove)'), - CustomerAccountHistory::OPERATION_PAYMENT => __('Payment (Remove)'), - ]), + 'description' => __( 'Restrict the orders by the payment status.' ), + 'options' => Helper::kvToJsOptions( [ + CustomerAccountHistory::OPERATION_ADD => __( 'Crediting (Add)' ), + CustomerAccountHistory::OPERATION_REFUND => __( 'Refund (Add)' ), + CustomerAccountHistory::OPERATION_DEDUCT => __( 'Deducting (Remove)' ), + CustomerAccountHistory::OPERATION_PAYMENT => __( 'Payment (Remove)' ), + ] ), ], [ 'type' => 'select', - 'label' => __('Author'), + 'label' => __( 'Author' ), 'name' => 'nexopos_customers_account_history.author', - 'description' => __('Restrict the records by the author.'), - 'options' => Helper::toJsOptions($UserClass::get(), [ 'id', 'username' ]), + 'description' => __( 'Restrict the records by the author.' ), + 'options' => Helper::toJsOptions( $UserClass::get(), [ 'id', 'username' ] ), ], ]; /** * @var CustomerService */ - $this->customerService = app()->make(CustomerService::class); + $this->customerService = app()->make( CustomerService::class ); /** * This will add a footer summary to * every exportation */ - Event::listen(CrudBeforeExportEvent::class, [ $this, 'addFooterSummary' ]); + Event::listen( CrudBeforeExportEvent::class, [ $this, 'addFooterSummary' ] ); } - public function hook($query): void + public function hook( $query ): void { - $query->orderBy('id', 'desc'); - $query->where(Hook::filter('ns-model-table', 'nexopos_customers_account_history.customer_id'), request()->query('customer_id')); + $query->orderBy( 'id', 'desc' ); + $query->where( Hook::filter( 'ns-model-table', 'nexopos_customers_account_history.customer_id' ), request()->query( 'customer_id' ) ); } - public function addFooterSummary(CrudBeforeExportEvent $event) + public function addFooterSummary( CrudBeforeExportEvent $event ) { // total mention $event->sheet->setCellValue( - $event->sheetColumns[0] . ($event->totalRows + 3), - __('Total') + $event->sheetColumns[0] . ( $event->totalRows + 3 ), + __( 'Total' ) ); - $totalPositive = collect($event->entries[ 'data' ])->map(function ($entry) { - if (in_array($entry->getOriginalValue('operation'), [ + $totalPositive = collect( $event->entries[ 'data' ] )->map( function ( $entry ) { + if ( in_array( $entry->getOriginalValue( 'operation' ), [ CustomerAccountHistory::OPERATION_ADD, CustomerAccountHistory::OPERATION_REFUND, - ])) { - return $entry->getOriginalValue('amount'); + ] ) ) { + return $entry->getOriginalValue( 'amount' ); } - })->sum(); + } )->sum(); - $totalNegative = collect($event->entries[ 'data' ])->map(function ($entry) { - if (in_array($entry->getOriginalValue('operation'), [ + $totalNegative = collect( $event->entries[ 'data' ] )->map( function ( $entry ) { + if ( in_array( $entry->getOriginalValue( 'operation' ), [ CustomerAccountHistory::OPERATION_DEDUCT, CustomerAccountHistory::OPERATION_PAYMENT, - ])) { - return $entry->getOriginalValue('amount'); + ] ) ) { + return $entry->getOriginalValue( 'amount' ); } - })->sum(); + } )->sum(); // total value $event->sheet->setCellValue( - $event->sheetColumns[1] . ($event->totalRows + 3), - ns()->currency->define($totalPositive - $totalNegative)->format() + $event->sheetColumns[1] . ( $event->totalRows + 3 ), + ns()->currency->define( $totalPositive - $totalNegative )->format() ); } @@ -253,20 +253,20 @@ public function addFooterSummary(CrudBeforeExportEvent $event) * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Customer Accounts List'), - 'list_description' => __('Display all customer accounts.'), - 'no_entry' => __('No customer accounts has been registered'), - 'create_new' => __('Add a new customer account'), - 'create_title' => __('Create a new customer account'), - 'create_description' => __('Register a new customer account and save it.'), - 'edit_title' => __('Edit customer account'), - 'edit_description' => __('Modify Customer Account.'), - 'back_to_list' => __('Return to Customer Accounts'), + 'list_title' => __( 'Customer Accounts List' ), + 'list_description' => __( 'Display all customer accounts.' ), + 'no_entry' => __( 'No customer accounts has been registered' ), + 'create_new' => __( 'Add a new customer account' ), + 'create_title' => __( 'Create a new customer account' ), + 'create_description' => __( 'Register a new customer account and save it.' ), + 'edit_title' => __( 'Edit customer account' ), + 'edit_description' => __( 'Modify Customer Account.' ), + 'back_to_list' => __( 'Return to Customer Accounts' ), ]; } @@ -274,7 +274,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -283,43 +283,43 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), // 'name' => 'name', // 'value' => $entry->name ?? '', - 'description' => __('This will be ignored.'), + 'description' => __( 'This will be ignored.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'amount', - 'label' => __('Amount'), + 'label' => __( 'Amount' ), 'validation' => 'required', - 'description' => __('Define the amount of the transaction'), + 'description' => __( 'Define the amount of the transaction' ), 'value' => $entry->amount ?? '', ], [ 'type' => 'select', - 'options' => Helper::kvToJsOptions([ - CustomerAccountHistory::OPERATION_DEDUCT => __('Deduct'), - CustomerAccountHistory::OPERATION_ADD => __('Add'), - ]), - 'description' => __('Define what operation will occurs on the customer account.'), + 'options' => Helper::kvToJsOptions( [ + CustomerAccountHistory::OPERATION_DEDUCT => __( 'Deduct' ), + CustomerAccountHistory::OPERATION_ADD => __( 'Add' ), + ] ), + 'description' => __( 'Define what operation will occurs on the customer account.' ), 'name' => 'operation', 'validation' => 'required', - 'label' => __('Operation'), + 'label' => __( 'Operation' ), 'value' => $entry->operation ?? '', ], [ 'type' => 'textarea', 'name' => 'description', - 'label' => __('Description'), + 'label' => __( 'Description' ), 'value' => $entry->description ?? '', ], ], @@ -332,9 +332,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -343,9 +343,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, CustomerAccountHistory $entry) + public function filterPutInputs( $inputs, CustomerAccountHistory $entry ) { return $inputs; } @@ -354,12 +354,12 @@ public function filterPutInputs($inputs, CustomerAccountHistory $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -371,9 +371,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, CustomerAccountHistory $entry) + public function afterPost( $request, CustomerAccountHistory $entry ) { return $request; } @@ -382,11 +382,11 @@ public function afterPost($request, CustomerAccountHistory $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -395,14 +395,14 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -413,11 +413,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -425,11 +425,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.customers-account-history') { + if ( $namespace == 'ns.customers-account-history' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -439,8 +439,8 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -454,37 +454,37 @@ public function getColumns(): array { return [ 'previous_amount' => [ - 'label' => __('Previous Amount'), + 'label' => __( 'Previous Amount' ), '$direction' => '', '$sort' => false, ], 'amount' => [ - 'label' => __('Amount'), + 'label' => __( 'Amount' ), '$direction' => '', '$sort' => false, ], 'next_amount' => [ - 'label' => __('Next Amount'), + 'label' => __( 'Next Amount' ), '$direction' => '', '$sort' => false, ], 'operation' => [ - 'label' => __('Operation'), + 'label' => __( 'Operation' ), '$direction' => '', '$sort' => false, ], 'order_code' => [ - 'label' => __('Order'), + 'label' => __( 'Order' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -494,31 +494,31 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->{ 'order_code' } = $entry->{ 'order_code' } === null ? __('N/A') : $entry->{ 'order_code' }; - $entry->operation = $this->customerService->getCustomerAccountOperationLabel($entry->operation); - $entry->amount = (string) ns()->currency->define($entry->amount); - $entry->previous_amount = (string) ns()->currency->define($entry->previous_amount); - $entry->next_amount = (string) ns()->currency->define($entry->next_amount); + $entry->{ 'order_code' } = $entry->{ 'order_code' } === null ? __( 'N/A' ) : $entry->{ 'order_code' }; + $entry->operation = $this->customerService->getCustomerAccountOperationLabel( $entry->operation ); + $entry->amount = (string) ns()->currency->define( $entry->amount ); + $entry->previous_amount = (string) ns()->currency->define( $entry->previous_amount ); + $entry->next_amount = (string) ns()->currency->define( $entry->next_amount ); // you can make changes here - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', - 'url' => ns()->url('/dashboard/' . $this->slug . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . $this->slug . '/edit/' . $entry->id ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.customers-account-history/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.customers-account-history/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } @@ -527,20 +527,20 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -550,9 +550,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof CustomerAccountHistory) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof CustomerAccountHistory ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -563,47 +563,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'customers/' . '/account-history'), - 'create' => ns()->url('dashboard/' . 'customers/' . '/account-history/create'), - 'edit' => ns()->url('dashboard/' . 'customers/' . '/account-history/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.customers-account-history'), - 'put' => ns()->url('api/crud/' . 'ns.customers-account-history/{id}'), + 'list' => ns()->url( 'dashboard/' . 'customers/' . '/account-history' ), + 'create' => ns()->url( 'dashboard/' . 'customers/' . '/account-history/create' ), + 'edit' => ns()->url( 'dashboard/' . 'customers/' . '/account-history/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.customers-account-history' ), + 'put' => ns()->url( 'api/crud/' . 'ns.customers-account-history/{id}' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/CustomerCouponCrud.php b/app/Crud/CustomerCouponCrud.php index 358790e4b..45614330f 100644 --- a/app/Crud/CustomerCouponCrud.php +++ b/app/Crud/CustomerCouponCrud.php @@ -92,14 +92,14 @@ class CustomerCouponCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -115,27 +115,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Customer Coupons List'), - 'list_description' => __('Display all customer coupons.'), - 'no_entry' => __('No customer coupons has been registered'), - 'create_new' => __('Add a new customer coupon'), - 'create_title' => __('Create a new customer coupon'), - 'create_description' => __('Register a new customer coupon and save it.'), - 'edit_title' => __('Edit customer coupon'), - 'edit_description' => __('Modify Customer Coupon.'), - 'back_to_list' => __('Return to Customer Coupons'), + 'list_title' => __( 'Customer Coupons List' ), + 'list_description' => __( 'Display all customer coupons.' ), + 'no_entry' => __( 'No customer coupons has been registered' ), + 'create_new' => __( 'Add a new customer coupon' ), + 'create_title' => __( 'Create a new customer coupon' ), + 'create_description' => __( 'Register a new customer coupon and save it.' ), + 'edit_title' => __( 'Edit customer coupon' ), + 'edit_description' => __( 'Modify Customer Coupon.' ), + 'back_to_list' => __( 'Return to Customer Coupons' ), ]; } @@ -143,7 +143,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -152,32 +152,32 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'usage', - 'label' => __('Usage'), - 'description' => __('Define how many time the coupon has been used.'), + 'label' => __( 'Usage' ), + 'description' => __( 'Define how many time the coupon has been used.' ), 'value' => $entry->usage ?? '', ], [ 'type' => 'text', 'name' => 'limit_usage', - 'label' => __('Limit'), - 'description' => __('Define the maximum usage possible for this coupon.'), + 'label' => __( 'Limit' ), + 'description' => __( 'Define the maximum usage possible for this coupon.' ), 'value' => $entry->limit_usage ?? '', ], ], @@ -190,9 +190,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -201,9 +201,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, CustomerCoupon $entry) + public function filterPutInputs( $inputs, CustomerCoupon $entry ) { return $inputs; } @@ -212,12 +212,12 @@ public function filterPutInputs($inputs, CustomerCoupon $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -229,9 +229,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, CustomerCoupon $entry) + public function afterPost( $request, CustomerCoupon $entry ) { return $request; } @@ -240,11 +240,11 @@ public function afterPost($request, CustomerCoupon $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -253,14 +253,14 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -271,11 +271,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -283,11 +283,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.customers-coupons') { + if ( $namespace == 'ns.customers-coupons' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -297,18 +297,18 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } } } - public function hook($query): void + public function hook( $query ): void { - if (! empty(request()->query('customer_id'))) { - $query->where('customer_id', request()->query('customer_id')); + if ( ! empty( request()->query( 'customer_id' ) ) ) { + $query->where( 'customer_id', request()->query( 'customer_id' ) ); } } @@ -319,42 +319,42 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'coupon_type' => [ - 'label' => __('Type'), + 'label' => __( 'Type' ), '$direction' => '', '$sort' => false, ], 'code' => [ - 'label' => __('Code'), + 'label' => __( 'Code' ), '$direction' => '', '$sort' => false, ], 'coupon_discount_value' => [ - 'label' => __('Value'), + 'label' => __( 'Value' ), '$direction' => '', '$sort' => false, ], 'usage' => [ - 'label' => __('Usage'), + 'label' => __( 'Usage' ), '$direction' => '', '$sort' => false, ], 'limit_usage' => [ - 'label' => __('Limit'), + 'label' => __( 'Limit' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Date'), + 'label' => __( 'Date' ), '$direction' => '', '$sort' => false, ], @@ -364,45 +364,45 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->user_username = $entry->user_username ?: __('N/A'); + $entry->user_username = $entry->user_username ?: __( 'N/A' ); - switch ($entry->coupon_type) { + switch ( $entry->coupon_type ) { case 'percentage_discount': $entry->coupon_discount_value = $entry->coupon_discount_value . '%'; break; case 'flat_discount': - $entry->coupon_discount_value = ns()->currency->define($entry->coupon_discount_value); + $entry->coupon_discount_value = ns()->currency->define( $entry->coupon_discount_value ); break; } - $entry->coupon_type = $entry->coupon_type === 'percentage_discount' ? __('Percentage') : __('Flat'); + $entry->coupon_type = $entry->coupon_type === 'percentage_discount' ? __( 'Percentage' ) : __( 'Flat' ); $entry->action( - label: __('Usage History'), + label: __( 'Usage History' ), type: 'GOTO', - url: ns()->url('/dashboard/customers/' . $entry->customer_id . '/coupons/' . $entry->id . '/history/'), + url: ns()->url( '/dashboard/customers/' . $entry->customer_id . '/coupons/' . $entry->id . '/history/' ), identifier: 'usage.history' ); // you can make changes here - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', - 'url' => ns()->url('/dashboard/' . $this->slug . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . $this->slug . '/edit/' . $entry->id ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.customers-coupons/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.customers-coupons/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } @@ -411,20 +411,20 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -434,9 +434,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof CustomerCoupon) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof CustomerCoupon ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -447,47 +447,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->route('ns.dashboard.customers-coupons-generated-list'), + 'list' => ns()->route( 'ns.dashboard.customers-coupons-generated-list' ), 'create' => '#', // ns()->url( 'dashboard/' . 'customers/' . request()->query( 'customer_id' ) . '/coupons/create' ), - 'edit' => ns()->url('dashboard/' . 'customers/' . request()->query('customer_id') . '/coupons/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.customers-coupons'), - 'put' => ns()->url('api/crud/' . 'ns.customers-coupons/{id}'), + 'edit' => ns()->url( 'dashboard/' . 'customers/' . request()->query( 'customer_id' ) . '/coupons/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.customers-coupons' ), + 'put' => ns()->url( 'api/crud/' . 'ns.customers-coupons/{id}' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/CustomerCouponHistoryCrud.php b/app/Crud/CustomerCouponHistoryCrud.php index 49501dce9..5e29dae08 100644 --- a/app/Crud/CustomerCouponHistoryCrud.php +++ b/app/Crud/CustomerCouponHistoryCrud.php @@ -142,7 +142,7 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'addActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'addActions' ], 10, 2 ); } /** @@ -151,22 +151,22 @@ public function __construct() public function getLabels(): array { return [ - 'list_title' => __('Customer Coupon Histories List'), - 'list_description' => __('Display all customer coupon histories.'), - 'no_entry' => __('No customer coupon histories has been registered'), - 'create_new' => __('Add a new customer coupon history'), - 'create_title' => __('Create a new customer coupon history'), - 'create_description' => __('Register a new customer coupon history and save it.'), - 'edit_title' => __('Edit customer coupon history'), - 'edit_description' => __('Modify Customer Coupon History.'), - 'back_to_list' => __('Return to Customer Coupon Histories'), + 'list_title' => __( 'Customer Coupon Histories List' ), + 'list_description' => __( 'Display all customer coupon histories.' ), + 'no_entry' => __( 'No customer coupon histories has been registered' ), + 'create_new' => __( 'Add a new customer coupon history' ), + 'create_title' => __( 'Create a new customer coupon history' ), + 'create_description' => __( 'Register a new customer coupon history and save it.' ), + 'edit_title' => __( 'Edit customer coupon history' ), + 'edit_description' => __( 'Modify Customer Coupon History.' ), + 'back_to_list' => __( 'Return to Customer Coupon Histories' ), ]; } /** * Defines the forms used to create and update entries. */ - public function getForm(OrderCoupon $entry = null): array + public function getForm( ?OrderCoupon $entry = null ): array { return [ // ... @@ -179,7 +179,7 @@ public function getForm(OrderCoupon $entry = null): array * @param array of fields * @return array of fields */ - public function filterPostInputs($inputs): array + public function filterPostInputs( $inputs ): array { return $inputs; } @@ -190,7 +190,7 @@ public function filterPostInputs($inputs): array * @param array of fields * @return array of fields */ - public function filterPutInputs(array $inputs, OrderCoupon $entry) + public function filterPutInputs( array $inputs, OrderCoupon $entry ) { return $inputs; } @@ -199,10 +199,10 @@ public function filterPutInputs(array $inputs, OrderCoupon $entry) * Trigger actions that are executed before the * crud entry is created. */ - public function beforePost(array $request): array + public function beforePost( array $request ): array { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -214,7 +214,7 @@ public function beforePost(array $request): array * Trigger actions that will be executed * after the entry has been created. */ - public function afterPost(array $request, OrderCoupon $entry): array + public function afterPost( array $request, OrderCoupon $entry ): array { return $request; } @@ -223,9 +223,9 @@ public function afterPost(array $request, OrderCoupon $entry): array * A shortcut and secure way to access * senstive value on a read only way. */ - public function get(string $param): mixed + public function get( string $param ): mixed { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -235,10 +235,10 @@ public function get(string $param): mixed * Trigger actions that are executed before * the crud entry is updated. */ - public function beforePut(array $request, OrderCoupon $entry): array + public function beforePut( array $request, OrderCoupon $entry ): array { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -250,7 +250,7 @@ public function beforePut(array $request, OrderCoupon $entry): array * This trigger actions that are executed after * the crud entry is successfully updated. */ - public function afterPut(array $request, OrderCoupon $entry): array + public function afterPut( array $request, OrderCoupon $entry ): array { return $request; } @@ -259,9 +259,9 @@ public function afterPut(array $request, OrderCoupon $entry): array * This triggers actions that will be executed ebfore * the crud entry is deleted. */ - public function beforeDelete($namespace, $id, $model): void + public function beforeDelete( $namespace, $id, $model ): void { - if ($namespace == 'ns.customers-coupons-history') { + if ( $namespace == 'ns.customers-coupons-history' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -271,8 +271,8 @@ public function beforeDelete($namespace, $id, $model): void * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -286,32 +286,32 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'value' => [ - 'label' => __('Value'), + 'label' => __( 'Value' ), '$direction' => '', '$sort' => false, ], 'order_code' => [ - 'label' => __('Order Code'), + 'label' => __( 'Order Code' ), '$direction' => '', '$sort' => false, ], 'coupon_name' => [ - 'label' => __('Coupon Name'), + 'label' => __( 'Coupon Name' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -321,26 +321,26 @@ public function getColumns(): array /** * Define row actions. */ - public function addActions(CrudEntry $entry, $namespace): CrudEntry + public function addActions( CrudEntry $entry, $namespace ): CrudEntry { - $entry->value = (string) ns()->currency->define($entry->value); + $entry->value = (string) ns()->currency->define( $entry->value ); /** * Declaring entry actions */ $entry->action( identifier: 'edit', - label: __('Edit'), - url: ns()->url('/dashboard/' . $this->slug . '/edit/' . $entry->id) + label: __( 'Edit' ), + url: ns()->url( '/dashboard/' . $this->slug . '/edit/' . $entry->id ) ); $entry->action( identifier: 'delete', - label: __('Delete'), + label: __( 'Delete' ), type: 'DELETE', - url: ns()->url('/api/crud/ns.customers-coupons-history/' . $entry->id), + url: ns()->url( '/api/crud/ns.customers-coupons-history/' . $entry->id ), confirm: [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ] ); @@ -351,18 +351,18 @@ public function addActions(CrudEntry $entry, $namespace): CrudEntry * trigger actions that are executed * when a bulk actio is posted. */ - public function bulkAction(Request $request): array + public function bulkAction( Request $request ): array { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -372,9 +372,9 @@ public function bulkAction(Request $request): array 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof OrderCoupon) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof OrderCoupon ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -385,12 +385,12 @@ public function bulkAction(Request $request): array return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } - public function hook($query): void + public function hook( $query ): void { - $query->where('customer_coupon_id', request()->query('customer_coupon_id')); + $query->where( 'customer_coupon_id', request()->query( 'customer_coupon_id' ) ); } /** @@ -399,11 +399,11 @@ public function hook($query): void public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . '/'), - 'create' => ns()->url('dashboard/' . '//create'), - 'edit' => ns()->url('dashboard/' . '//edit/'), - 'post' => ns()->url('api/crud/' . 'ns.customers-coupons-history'), - 'put' => ns()->url('api/crud/' . 'ns.customers-coupons-history/{id}' . ''), + 'list' => ns()->url( 'dashboard/' . '/' ), + 'create' => ns()->url( 'dashboard/' . '//create' ), + 'edit' => ns()->url( 'dashboard/' . '//edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.customers-coupons-history' ), + 'put' => ns()->url( 'api/crud/' . 'ns.customers-coupons-history/{id}' . '' ), ]; } @@ -412,15 +412,15 @@ public function getLinks(): array **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** diff --git a/app/Crud/CustomerCrud.php b/app/Crud/CustomerCrud.php index 1abe4c083..f3de9edb0 100644 --- a/app/Crud/CustomerCrud.php +++ b/app/Crud/CustomerCrud.php @@ -96,14 +96,14 @@ class CustomerCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -130,30 +130,30 @@ public function __construct() { parent::__construct(); - $this->options = app()->make(Options::class); - $this->customerService = app()->make(CustomerService::class); + $this->options = app()->make( Options::class ); + $this->customerService = app()->make( CustomerService::class ); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Customers List'), - 'list_description' => __('Display all customers.'), - 'no_entry' => __('No customers has been registered'), - 'create_new' => __('Add a new customer'), - 'create_title' => __('Create a new customer'), - 'create_description' => __('Register a new customer and save it.'), - 'edit_title' => __('Edit customer'), - 'edit_description' => __('Modify Customer.'), - 'back_to_list' => __('Return to Customers'), + 'list_title' => __( 'Customers List' ), + 'list_description' => __( 'Display all customers.' ), + 'no_entry' => __( 'No customers has been registered' ), + 'create_new' => __( 'Add a new customer' ), + 'create_title' => __( 'Create a new customer' ), + 'create_description' => __( 'Register a new customer and save it.' ), + 'edit_title' => __( 'Edit customer' ), + 'edit_description' => __( 'Modify Customer.' ), + 'back_to_list' => __( 'Return to Customers' ), ]; } @@ -161,115 +161,115 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } - public function hook($query): void + public function hook( $query ): void { - $query->join('nexopos_users_roles_relations', 'nexopos_users.id', '=', 'nexopos_users_roles_relations.user_id'); - $query->join('nexopos_roles', 'nexopos_roles.id', '=', 'nexopos_users_roles_relations.role_id'); - $query->orderBy('updated_at', 'desc'); + $query->join( 'nexopos_users_roles_relations', 'nexopos_users.id', '=', 'nexopos_users_roles_relations.user_id' ); + $query->join( 'nexopos_roles', 'nexopos_roles.id', '=', 'nexopos_users_roles_relations.role_id' ); + $query->orderBy( 'updated_at', 'desc' ); } /** * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm(Customer $entry = null) + public function getForm( ?Customer $entry = null ) { return [ 'main' => [ - 'label' => __('Customer Name'), + 'label' => __( 'Customer Name' ), 'name' => 'first_name', 'validation' => 'required', 'value' => $entry->first_name ?? '', - 'description' => __('Provide a unique name for the customer.'), + 'description' => __( 'Provide a unique name for the customer.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', - 'label' => __('Last Name'), + 'label' => __( 'Last Name' ), 'name' => 'last_name', 'value' => $entry->last_name ?? '', - 'description' => __('Provide the customer last name'), + 'description' => __( 'Provide the customer last name' ), ], [ 'type' => 'number', - 'label' => __('Credit Limit'), + 'label' => __( 'Credit Limit' ), 'name' => 'credit_limit_amount', 'value' => $entry->credit_limit_amount ?? '', - 'description' => __('Set what should be the limit of the purchase on credit.'), + 'description' => __( 'Set what should be the limit of the purchase on credit.' ), ], [ 'type' => 'search-select', - 'label' => __('Group'), + 'label' => __( 'Group' ), 'name' => 'group_id', 'value' => $entry->group_id ?? '', 'component' => 'nsCrudForm', 'props' => CustomerGroupCrud::getFormConfig(), - 'options' => Helper::toJsOptions(CustomerGroup::all(), [ 'id', 'name' ]), - 'description' => __('Assign the customer to a group'), + 'options' => Helper::toJsOptions( CustomerGroup::all(), [ 'id', 'name' ] ), + 'description' => __( 'Assign the customer to a group' ), ], [ 'type' => 'datetimepicker', - 'label' => __('Birth Date'), + 'label' => __( 'Birth Date' ), 'name' => 'birth_date', - 'value' => $entry instanceof Customer && $entry->birth_date !== null ? Carbon::parse($entry->birth_date)->format('Y-m-d H:i:s') : null, - 'description' => __('Displays the customer birth date'), + 'value' => $entry instanceof Customer && $entry->birth_date !== null ? Carbon::parse( $entry->birth_date )->format( 'Y-m-d H:i:s' ) : null, + 'description' => __( 'Displays the customer birth date' ), ], [ 'type' => 'email', - 'label' => __('Email'), + 'label' => __( 'Email' ), 'name' => 'email', 'value' => $entry->email ?? '', - 'validation' => collect([ - ns()->option->get('ns_customers_force_valid_email', 'no') === 'yes' ? 'email' : '', - ns()->option->get('ns_customers_force_valid_email', 'no') === 'yes' ? ( - $entry instanceof Customer && ! empty($entry->email) ? Rule::unique('nexopos_users', 'email')->ignore($entry->id) : Rule::unique('nexopos_users', 'email') + 'validation' => collect( [ + ns()->option->get( 'ns_customers_force_valid_email', 'no' ) === 'yes' ? 'email' : '', + ns()->option->get( 'ns_customers_force_valid_email', 'no' ) === 'yes' ? ( + $entry instanceof Customer && ! empty( $entry->email ) ? Rule::unique( 'nexopos_users', 'email' )->ignore( $entry->id ) : Rule::unique( 'nexopos_users', 'email' ) ) : '', - ])->filter()->toArray(), - 'description' => __('Provide the customer email.'), + ] )->filter()->toArray(), + 'description' => __( 'Provide the customer email.' ), ], [ 'type' => 'text', - 'label' => __('Phone Number'), + 'label' => __( 'Phone Number' ), 'name' => 'phone', 'value' => $entry->phone ?? '', - 'validation' => collect([ - ns()->option->get('ns_customers_force_unique_phone', 'no') === 'yes' ? ( - $entry instanceof Customer && ! empty($entry->phone) ? Rule::unique('nexopos_users', 'phone')->ignore($entry->id) : Rule::unique('nexopos_users', 'phone') + 'validation' => collect( [ + ns()->option->get( 'ns_customers_force_unique_phone', 'no' ) === 'yes' ? ( + $entry instanceof Customer && ! empty( $entry->phone ) ? Rule::unique( 'nexopos_users', 'phone' )->ignore( $entry->id ) : Rule::unique( 'nexopos_users', 'phone' ) ) : '', - ])->toArray(), - 'description' => __('Provide the customer phone number'), + ] )->toArray(), + 'description' => __( 'Provide the customer phone number' ), ], [ 'type' => 'text', - 'label' => __('PO Box'), + 'label' => __( 'PO Box' ), 'name' => 'pobox', 'value' => $entry->pobox ?? '', - 'description' => __('Provide the customer PO.Box'), + 'description' => __( 'Provide the customer PO.Box' ), ], [ 'type' => 'select', - 'options' => Helper::kvToJsOptions([ - '' => __('Not Defined'), - 'male' => __('Male'), - 'female' => __('Female'), - ]), - 'label' => __('Gender'), + 'options' => Helper::kvToJsOptions( [ + '' => __( 'Not Defined' ), + 'male' => __( 'Male' ), + 'female' => __( 'Female' ), + ] ), + 'label' => __( 'Gender' ), 'name' => 'gender', 'value' => $entry->gender ?? '', - 'description' => __('Provide the customer gender.'), + 'description' => __( 'Provide the customer gender.' ), ], ], ], 'billing' => [ - 'label' => __('Billing Address'), - 'fields' => $this->customerService->getAddressFields($entry->billing ?? null), + 'label' => __( 'Billing Address' ), + 'fields' => $this->customerService->getAddressFields( $entry->billing ?? null ), ], 'shipping' => [ - 'label' => __('Shipping Address'), - 'fields' => $this->customerService->getAddressFields($entry->shipping ?? null), + 'label' => __( 'Shipping Address' ), + 'fields' => $this->customerService->getAddressFields( $entry->shipping ?? null ), ], ], ]; @@ -279,110 +279,110 @@ public function getForm(Customer $entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { - unset($inputs[ 'password_confirm' ]); + unset( $inputs[ 'password_confirm' ] ); /** * if the password is not changed, no * need to hash it */ - $inputs = collect($inputs)->filter(fn($input) => ! empty($input) || $input === 0)->toArray(); + $inputs = collect( $inputs )->filter( fn( $input ) => ! empty( $input ) || $input === 0 )->toArray(); - if (! empty($inputs[ 'password' ])) { - $inputs[ 'password' ] = Hash::make($inputs[ 'password' ]); + if ( ! empty( $inputs[ 'password' ] ) ) { + $inputs[ 'password' ] = Hash::make( $inputs[ 'password' ] ); } else { - $inputs[ 'password' ] = Hash::make(Str::random(10)); + $inputs[ 'password' ] = Hash::make( Str::random( 10 ) ); } /** * if no email is provided, then we'll generate a random * email for the customer based on the domain and the last customer id. */ - if (empty($inputs[ 'email' ])) { - $domain = parse_url(url('/')); - $lastCustomer = User::orderBy('nexopos_users.id', 'desc')->first(); + if ( empty( $inputs[ 'email' ] ) ) { + $domain = parse_url( url( '/' ) ); + $lastCustomer = User::orderBy( 'nexopos_users.id', 'desc' )->first(); - if ($lastCustomer instanceof User) { + if ( $lastCustomer instanceof User ) { $lastCustomerId = $lastCustomer->id + 1; } else { $lastCustomerId = 1; } - $inputs[ 'email' ] = 'customer-' . $lastCustomerId + 1 . '@' . ($domain[ 'host' ] ?? 'nexopos.com'); + $inputs[ 'email' ] = 'customer-' . $lastCustomerId + 1 . '@' . ( $domain[ 'host' ] ?? 'nexopos.com' ); } /** * if the username is empty, it will match the email. */ - if (empty($inputs[ 'username' ])) { + if ( empty( $inputs[ 'username' ] ) ) { $inputs[ 'username' ] = $inputs[ 'email' ]; } - return collect($inputs)->map(function ($value, $key) { - if ($key === 'group_id' && empty($value)) { - $value = $this->options->get('ns_customers_default_group', false); - $group = CustomerGroup::find($value); + return collect( $inputs )->map( function ( $value, $key ) { + if ( $key === 'group_id' && empty( $value ) ) { + $value = $this->options->get( 'ns_customers_default_group', false ); + $group = CustomerGroup::find( $value ); - if (! $group instanceof CustomerGroup) { - throw new NotAllowedException(__('The assigned default customer group doesn\'t exist or is not defined.')); + if ( ! $group instanceof CustomerGroup ) { + throw new NotAllowedException( __( 'The assigned default customer group doesn\'t exist or is not defined.' ) ); } } return $value; - })->toArray(); + } )->toArray(); } /** * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, Customer $entry) + public function filterPutInputs( $inputs, Customer $entry ) { - unset($inputs[ 'password_confirm' ]); + unset( $inputs[ 'password_confirm' ] ); /** * if the password is not changed, no * need to hash it */ - $inputs = collect($inputs)->filter(fn($input) => ! empty($input) || $input === 0)->toArray(); + $inputs = collect( $inputs )->filter( fn( $input ) => ! empty( $input ) || $input === 0 )->toArray(); - if (! empty($inputs[ 'password' ])) { - $inputs[ 'password' ] = Hash::make($inputs[ 'password' ]); + if ( ! empty( $inputs[ 'password' ] ) ) { + $inputs[ 'password' ] = Hash::make( $inputs[ 'password' ] ); } else { - $inputs[ 'password' ] = Hash::make(Str::random(10)); + $inputs[ 'password' ] = Hash::make( Str::random( 10 ) ); } - return collect($inputs)->map(function ($value, $key) { - if ($key === 'group_id' && empty($value)) { - $value = $this->options->get('ns_customers_default_group', false); - $group = CustomerGroup::find($value); + return collect( $inputs )->map( function ( $value, $key ) { + if ( $key === 'group_id' && empty( $value ) ) { + $value = $this->options->get( 'ns_customers_default_group', false ); + $group = CustomerGroup::find( $value ); - if (! $group instanceof CustomerGroup) { - throw new NotAllowedException(__('The assigned default customer group doesn\'t exist or is not defined.')); + if ( ! $group instanceof CustomerGroup ) { + throw new NotAllowedException( __( 'The assigned default customer group doesn\'t exist or is not defined.' ) ); } } return $value; - })->toArray(); + } )->toArray(); } /** * After Crud POST */ - public function afterPost(array $inputs, Customer $customer): array + public function afterPost( array $inputs, Customer $customer ): array { - CustomerAfterCreatedEvent::dispatch($customer); + CustomerAfterCreatedEvent::dispatch( $customer ); /** * @var UsersService $usersService */ - $usersService = app()->make(UsersService::class); - $usersService->setUserRole(User::find($customer->id), [ Role::namespace(Role::STORECUSTOMER)->id ]); + $usersService = app()->make( UsersService::class ); + $usersService->setUserRole( User::find( $customer->id ), [ Role::namespace( Role::STORECUSTOMER )->id ] ); return $inputs; } @@ -391,11 +391,11 @@ public function afterPost(array $inputs, Customer $customer): array * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -404,9 +404,9 @@ public function get($param) /** * After Crud PUT */ - public function afterPut(array $inputs, Customer $customer): array + public function afterPut( array $inputs, Customer $customer ): array { - CustomerAfterUpdatedEvent::dispatch($customer); + CustomerAfterUpdatedEvent::dispatch( $customer ); return $inputs; } @@ -414,41 +414,41 @@ public function afterPut(array $inputs, Customer $customer): array /** * Before Delete */ - public function beforeDelete(string $namespace, int $id, Customer $customer): void + public function beforeDelete( string $namespace, int $id, Customer $customer ): void { - if ($namespace == 'ns.customers') { - $this->allowedTo('delete'); + if ( $namespace == 'ns.customers' ) { + $this->allowedTo( 'delete' ); - CustomerBeforeDeletedEvent::dispatch($customer); + CustomerBeforeDeletedEvent::dispatch( $customer ); } } /** * before creating */ - public function beforePost($inputs): void + public function beforePost( $inputs ): void { - $this->allowedTo('create'); + $this->allowedTo( 'create' ); /** * @var CustomerService */ - $customerService = app()->make(CustomerService::class); - $customerService->precheckCustomers($inputs); + $customerService = app()->make( CustomerService::class ); + $customerService->precheckCustomers( $inputs ); } /** * before updating */ - public function beforePut($inputs, $customer): void + public function beforePut( $inputs, $customer ): void { - $this->allowedTo('update'); + $this->allowedTo( 'update' ); /** * @var CustomerService */ - $customerService = app()->make(CustomerService::class); - $customerService->precheckCustomers($inputs, $customer->id); + $customerService = app()->make( CustomerService::class ); + $customerService->precheckCustomers( $inputs, $customer->id ); } /** @@ -458,37 +458,37 @@ public function getColumns(): array { return [ 'first_name' => [ - 'label' => __('First Name'), + 'label' => __( 'First Name' ), ], 'last_name' => [ - 'label' => __('Last Name'), + 'label' => __( 'Last Name' ), ], 'phone' => [ - 'label' => __('Phone'), + 'label' => __( 'Phone' ), ], 'email' => [ - 'label' => __('Email'), + 'label' => __( 'Email' ), ], 'group_name' => [ - 'label' => __('Group'), + 'label' => __( 'Group' ), ], 'account_amount' => [ - 'label' => __('Account Credit'), + 'label' => __( 'Account Credit' ), ], 'owed_amount' => [ - 'label' => __('Owed Amount'), + 'label' => __( 'Owed Amount' ), ], 'purchases_amount' => [ - 'label' => __('Purchase Amount'), + 'label' => __( 'Purchase Amount' ), ], 'gender' => [ - 'label' => __('Gender'), + 'label' => __( 'Gender' ), ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), ], ]; } @@ -496,51 +496,51 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry): CrudEntry + public function setActions( CrudEntry $entry ): CrudEntry { $entry->action( identifier: 'edit_customers_group', - label: __('Edit'), + label: __( 'Edit' ), type: 'GOTO', - url: ns()->url('dashboard/customers/edit/' . $entry->id), + url: ns()->url( 'dashboard/customers/edit/' . $entry->id ), ); $entry->action( identifier: 'customers_orders', - label: __('Orders'), + label: __( 'Orders' ), type: 'GOTO', - url: ns()->url('dashboard/customers/' . $entry->id . '/orders'), + url: ns()->url( 'dashboard/customers/' . $entry->id . '/orders' ), ); $entry->action( identifier: 'customers_rewards', - label: __('Rewards'), + label: __( 'Rewards' ), type: 'GOTO', - url: ns()->url('dashboard/customers/' . $entry->id . '/rewards'), + url: ns()->url( 'dashboard/customers/' . $entry->id . '/rewards' ), ); $entry->action( identifier: 'customers_coupons', - label: __('Coupons'), + label: __( 'Coupons' ), type: 'GOTO', - url: ns()->url('dashboard/customers/' . $entry->id . '/coupons'), + url: ns()->url( 'dashboard/customers/' . $entry->id . '/coupons' ), ); $entry->action( identifier: 'customers_history', - label: __('Wallet History'), + label: __( 'Wallet History' ), type: 'GOTO', - url: ns()->url('dashboard/customers/' . $entry->id . '/account-history'), + url: ns()->url( 'dashboard/customers/' . $entry->id . '/account-history' ), ); $entry->action( identifier: 'delete', - label: __('Delete'), + label: __( 'Delete' ), type: 'DELETE', - url: ns()->url('/api/crud/ns.customers/' . $entry->id), + url: ns()->url( '/api/crud/ns.customers/' . $entry->id ), confirm: [ - 'message' => __('Would you like to delete this ?'), - 'title' => __('Delete a customers'), + 'message' => __( 'Would you like to delete this ?' ), + 'title' => __( 'Delete a customers' ), ], ); @@ -551,33 +551,33 @@ public function setActions(CrudEntry $entry): CrudEntry * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { $status = [ 'success' => 0, 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof Customer) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof Customer ) { /** * We want to check if we're allowed to delete * the selected customer by checking his dependencies. */ - $this->handleDependencyForDeletion($entity); + $this->handleDependencyForDeletion( $entity ); $entity->delete(); $status[ 'success' ]++; @@ -595,41 +595,41 @@ public function bulkAction(Request $request) /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('/dashboard/customers'), - 'create' => ns()->url('/dashboard/customers/create'), - 'edit' => ns()->url('/dashboard/customers/edit/{id}'), - 'post' => ns()->url('/api/crud/ns.customers'), - 'put' => ns()->url('/api/crud/ns.customers/{id}'), + 'list' => ns()->url( '/dashboard/customers' ), + 'create' => ns()->url( '/dashboard/customers/create' ), + 'edit' => ns()->url( '/dashboard/customers/edit/{id}' ), + 'post' => ns()->url( '/api/crud/ns.customers' ), + 'put' => ns()->url( '/api/crud/ns.customers/{id}' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Customers'), + 'label' => __( 'Delete Selected Customers' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/CustomerGroupCrud.php b/app/Crud/CustomerGroupCrud.php index c7e19f292..97c35812b 100644 --- a/app/Crud/CustomerGroupCrud.php +++ b/app/Crud/CustomerGroupCrud.php @@ -53,14 +53,14 @@ class CustomerGroupCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -76,7 +76,7 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } protected $permissions = [ @@ -90,20 +90,20 @@ public function __construct() * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Customer Groups List'), - 'list_description' => __('Display all Customers Groups.'), - 'no_entry' => __('No Customers Groups has been registered'), - 'create_new' => __('Add a new Customers Group'), - 'create_title' => __('Create a new Customers Group'), - 'create_description' => __('Register a new Customers Group and save it.'), - 'edit_title' => __('Edit Customers Group'), - 'edit_description' => __('Modify Customers group.'), - 'back_to_list' => __('Return to Customers Groups'), + 'list_title' => __( 'Customer Groups List' ), + 'list_description' => __( 'Display all Customers Groups.' ), + 'no_entry' => __( 'No Customers Groups has been registered' ), + 'create_new' => __( 'Add a new Customers Group' ), + 'create_title' => __( 'Create a new Customers Group' ), + 'create_description' => __( 'Register a new Customers Group and save it.' ), + 'edit_title' => __( 'Edit Customers Group' ), + 'edit_description' => __( 'Modify Customers group.' ), + 'back_to_list' => __( 'Return to Customers Groups' ), ]; } @@ -111,7 +111,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -120,43 +120,43 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), 'validation' => 'required', ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'select', 'name' => 'reward_system_id', - 'label' => __('Reward System'), + 'label' => __( 'Reward System' ), 'options' => Helper::toJsOptions( RewardSystem::get(), [ 'id', 'name' ] ), 'value' => $entry->reward_system_id ?? '', - 'description' => __('Select which Reward system applies to the group'), + 'description' => __( 'Select which Reward system applies to the group' ), ], [ 'type' => 'number', 'name' => 'minimal_credit_payment', - 'label' => __('Minimum Credit Amount'), + 'label' => __( 'Minimum Credit Amount' ), 'value' => $entry->minimal_credit_payment ?? '', - 'description' => __('Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to "0", no minimal credit amount is required.'), + 'description' => __( 'Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to "0", no minimal credit amount is required.' ), ], [ 'type' => 'textarea', 'name' => 'description', 'value' => $entry->description ?? '', - 'description' => __('A brief description about what this group is about'), - 'label' => __('Description'), + 'description' => __( 'A brief description about what this group is about' ), + 'label' => __( 'Description' ), ], ], ], @@ -169,18 +169,18 @@ public function getForm($entry = null) * * @param Builder $query */ - public function hook($query): void + public function hook( $query ): void { - $query->orderBy('updated_at', 'desc'); + $query->orderBy( 'updated_at', 'desc' ); } /** * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { $inputs[ 'minimal_credit_payment' ] = $inputs[ 'minimal_credit_payment' ] === null ? 0 : $inputs[ 'minimal_credit_payment' ]; @@ -191,9 +191,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, CustomerGroup $entry) + public function filterPutInputs( $inputs, CustomerGroup $entry ) { $inputs[ 'minimal_credit_payment' ] = $inputs[ 'minimal_credit_payment' ] === null ? 0 : $inputs[ 'minimal_credit_payment' ]; @@ -204,9 +204,9 @@ public function filterPutInputs($inputs, CustomerGroup $entry) * After Crud POST * * @param object entry - * @return void + * @return void */ - public function afterPost($inputs) + public function afterPost( $inputs ) { return $inputs; } @@ -215,11 +215,11 @@ public function afterPost($inputs) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -229,9 +229,9 @@ public function get($param) * After Crud PUT * * @param object entry - * @return void + * @return void */ - public function afterPut($inputs) + public function afterPut( $inputs ) { return $inputs; } @@ -239,33 +239,33 @@ public function afterPut($inputs) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id) + public function beforeDelete( $namespace, $id ) { - if ($namespace == 'ns.customers-groups') { - $this->allowedTo('delete'); + if ( $namespace == 'ns.customers-groups' ) { + $this->allowedTo( 'delete' ); } } /** * Before Delete * - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - $this->allowedTo('create'); + $this->allowedTo( 'create' ); } /** * Before Delete * - * @return void + * @return void */ - public function beforePut($request, $id) + public function beforePut( $request, $id ) { - $this->allowedTo('delete'); + $this->allowedTo( 'delete' ); } /** @@ -275,22 +275,22 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'reward_name' => [ - 'label' => __('Reward System'), + 'label' => __( 'Reward System' ), '$direction' => '', '$sort' => false, ], 'nexopos_users_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created On'), + 'label' => __( 'Created On' ), '$direction' => '', '$sort' => false, ], @@ -300,31 +300,31 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->reward_system_id = $entry->reward_system_id === 0 ? __('N/A') : $entry->reward_system_id; + $entry->reward_system_id = $entry->reward_system_id === 0 ? __( 'N/A' ) : $entry->reward_system_id; - $entry->addAction('edit_customers_groups', [ - 'label' => __('Edit'), + $entry->addAction( 'edit_customers_groups', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit_customers_group', 'type' => 'GOTO', 'index' => 'id', - 'url' => ns()->url('dashboard/customers/groups/edit/' . $entry->id), - ]); + 'url' => ns()->url( 'dashboard/customers/groups/edit/' . $entry->id ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', 'index' => 'id', - 'url' => ns()->url('/api/crud/ns.customers-groups/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.customers-groups/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), - 'title' => __('Delete a licence'), + 'message' => __( 'Would you like to delete this ?' ), + 'title' => __( 'Delete a licence' ), ], - ]); + ] ); - $entry->reward_name = $entry->reward_name ?: __('N/A'); + $entry->reward_name = $entry->reward_name ?: __( 'N/A' ); return $entry; } @@ -333,32 +333,32 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - $user = app()->make('App\Services\UsersService'); + $user = app()->make( 'App\Services\UsersService' ); - if (! $user->is([ 'admin', 'supervisor' ])) { - return response()->json([ + if ( ! $user->is( [ 'admin', 'supervisor' ] ) ) { + return response()->json( [ 'status' => 'failed', - 'message' => __('You\'re not allowed to do this operation'), - ], 403); + 'message' => __( 'You\'re not allowed to do this operation' ), + ], 403 ); } - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { $status = [ 'success' => 0, 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof CustomerGroup) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof CustomerGroup ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -369,47 +369,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/customers/groups'), - 'create' => ns()->url('dashboard/customers/groups/create'), - 'edit' => ns()->url('dashboard/customers/groups/edit'), - 'post' => ns()->url('api/crud/' . 'ns.customers-groups'), - 'put' => ns()->url('api/crud/' . 'ns.customers-groups/{id}' . ''), + 'list' => ns()->url( 'dashboard/customers/groups' ), + 'create' => ns()->url( 'dashboard/customers/groups/create' ), + 'edit' => ns()->url( 'dashboard/customers/groups/edit' ), + 'post' => ns()->url( 'api/crud/' . 'ns.customers-groups' ), + 'put' => ns()->url( 'api/crud/' . 'ns.customers-groups/{id}' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/CustomerOrderCrud.php b/app/Crud/CustomerOrderCrud.php index 07e8e42e1..1801712ad 100644 --- a/app/Crud/CustomerOrderCrud.php +++ b/app/Crud/CustomerOrderCrud.php @@ -43,20 +43,20 @@ public function __construct() * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Customer Orders List'), - 'list_description' => __('Display all customer orders.'), - 'no_entry' => __('No customer orders has been registered'), - 'create_new' => __('Add a new customer order'), - 'create_title' => __('Create a new customer order'), - 'create_description' => __('Register a new customer order and save it.'), - 'edit_title' => __('Edit customer order'), - 'edit_description' => __('Modify Customer Order.'), - 'back_to_list' => __('Return to Customer Orders'), + 'list_title' => __( 'Customer Orders List' ), + 'list_description' => __( 'Display all customer orders.' ), + 'no_entry' => __( 'No customer orders has been registered' ), + 'create_new' => __( 'Add a new customer order' ), + 'create_title' => __( 'Create a new customer order' ), + 'create_description' => __( 'Register a new customer order and save it.' ), + 'edit_title' => __( 'Edit customer order' ), + 'edit_description' => __( 'Modify Customer Order.' ), + 'back_to_list' => __( 'Return to Customer Orders' ), ]; } @@ -64,19 +64,19 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } - public function hook($query): void + public function hook( $query ): void { - if (empty(request()->query('direction'))) { - $query->orderBy('id', 'desc'); + if ( empty( request()->query( 'direction' ) ) ) { + $query->orderBy( 'id', 'desc' ); } - if (! empty(request()->query('customer_id'))) { - $query->where('customer_id', request()->query('customer_id')); + if ( ! empty( request()->query( 'customer_id' ) ) ) { + $query->where( 'customer_id', request()->query( 'customer_id' ) ); } } @@ -84,165 +84,165 @@ public function hook($query): void * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), // 'name' => 'name', // 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'author', - 'label' => __('Author'), + 'label' => __( 'Author' ), 'value' => $entry->author ?? '', ], [ 'type' => 'text', 'name' => 'change', - 'label' => __('Change'), + 'label' => __( 'Change' ), 'value' => $entry->change ?? '', ], [ 'type' => 'text', 'name' => 'code', - 'label' => __('Code'), + 'label' => __( 'Code' ), 'value' => $entry->code ?? '', ], [ 'type' => 'text', 'name' => 'created_at', - 'label' => __('Created at'), + 'label' => __( 'Created at' ), 'value' => $entry->created_at ?? '', ], [ 'type' => 'text', 'name' => 'customer_id', - 'label' => __('Customer Id'), + 'label' => __( 'Customer Id' ), 'value' => $entry->customer_id ?? '', ], [ 'type' => 'text', 'name' => 'delivery_status', - 'label' => __('Delivery Status'), + 'label' => __( 'Delivery Status' ), 'value' => $entry->delivery_status ?? '', ], [ 'type' => 'text', 'name' => 'description', - 'label' => __('Description'), + 'label' => __( 'Description' ), 'value' => $entry->description ?? '', ], [ 'type' => 'text', 'name' => 'discount', - 'label' => __('Discount'), + 'label' => __( 'Discount' ), 'value' => $entry->discount ?? '', ], [ 'type' => 'text', 'name' => 'discount_percentage', - 'label' => __('Discount Percentage'), + 'label' => __( 'Discount Percentage' ), 'value' => $entry->discount_percentage ?? '', ], [ 'type' => 'text', 'name' => 'discount_type', - 'label' => __('Discount Type'), + 'label' => __( 'Discount Type' ), 'value' => $entry->discount_type ?? '', ], [ 'type' => 'text', 'name' => 'final_payment_date', - 'label' => __('Final Payment Date'), + 'label' => __( 'Final Payment Date' ), 'value' => $entry->final_payment_date ?? '', ], [ 'type' => 'text', 'name' => 'total_without_tax', - 'label' => __('Tax Excluded'), + 'label' => __( 'Tax Excluded' ), 'value' => $entry->total_without_tax ?? '', ], [ 'type' => 'text', 'name' => 'id', - 'label' => __('Id'), + 'label' => __( 'Id' ), 'value' => $entry->id ?? '', ], [ 'type' => 'text', 'name' => 'total_with_tax', - 'label' => __('Tax Included'), + 'label' => __( 'Tax Included' ), 'value' => $entry->total_with_tax ?? '', ], [ 'type' => 'text', 'name' => 'payment_status', - 'label' => __('Payment Status'), + 'label' => __( 'Payment Status' ), 'value' => $entry->payment_status ?? '', ], [ 'type' => 'text', 'name' => 'process_status', - 'label' => __('Process Status'), + 'label' => __( 'Process Status' ), 'value' => $entry->process_status ?? '', ], [ 'type' => 'text', 'name' => 'shipping', - 'label' => __('Shipping'), + 'label' => __( 'Shipping' ), 'value' => $entry->shipping ?? '', ], [ 'type' => 'text', 'name' => 'shipping_rate', - 'label' => __('Shipping Rate'), + 'label' => __( 'Shipping Rate' ), 'value' => $entry->shipping_rate ?? '', ], [ 'type' => 'text', 'name' => 'shipping_type', - 'label' => __('Shipping Type'), + 'label' => __( 'Shipping Type' ), 'value' => $entry->shipping_type ?? '', ], [ 'type' => 'text', 'name' => 'subtotal', - 'label' => __('Sub Total'), + 'label' => __( 'Sub Total' ), 'value' => $entry->subtotal ?? '', ], [ 'type' => 'text', 'name' => 'tax_value', - 'label' => __('Tax Value'), + 'label' => __( 'Tax Value' ), 'value' => $entry->tax_value ?? '', ], [ 'type' => 'text', 'name' => 'tendered', - 'label' => __('Tendered'), + 'label' => __( 'Tendered' ), 'value' => $entry->tendered ?? '', ], [ 'type' => 'text', 'name' => 'title', - 'label' => __('Title'), + 'label' => __( 'Title' ), 'value' => $entry->title ?? '', ], [ 'type' => 'text', 'name' => 'total', - 'label' => __('Total'), + 'label' => __( 'Total' ), 'value' => $entry->total ?? '', ], [ 'type' => 'text', 'name' => 'total_instalments', - 'label' => __('Total installments'), + 'label' => __( 'Total installments' ), 'value' => $entry->total_instalments ?? '', ], [ 'type' => 'text', 'name' => 'type', - 'label' => __('Type'), + 'label' => __( 'Type' ), 'value' => $entry->type ?? '', ], [ 'type' => 'text', 'name' => 'updated_at', - 'label' => __('Updated at'), + 'label' => __( 'Updated at' ), 'value' => $entry->updated_at ?? '', ], [ 'type' => 'text', 'name' => 'uuid', - 'label' => __('Uuid'), + 'label' => __( 'Uuid' ), 'value' => $entry->uuid ?? '', ], [ 'type' => 'text', 'name' => 'voidance_reason', - 'label' => __('Voidance Reason'), + 'label' => __( 'Voidance Reason' ), 'value' => $entry->voidance_reason ?? '', ], ], ], @@ -254,9 +254,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -265,9 +265,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, Order $entry) + public function filterPutInputs( $inputs, Order $entry ) { return $inputs; } @@ -276,12 +276,12 @@ public function filterPutInputs($inputs, Order $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -293,9 +293,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, Order $entry) + public function afterPost( $request, Order $entry ) { return $request; } @@ -304,11 +304,11 @@ public function afterPost($request, Order $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -317,14 +317,14 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -335,11 +335,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -347,11 +347,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.customers.orders') { + if ( $namespace == 'ns.customers.orders' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -361,8 +361,8 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -373,20 +373,20 @@ public function beforeDelete($namespace, $id, $model) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -396,9 +396,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof Order) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof Order ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -409,47 +409,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'dashboard/customers/orders'), - 'create' => ns()->url('dashboard/' . 'dashboard/customers/orders/create'), - 'edit' => ns()->url('dashboard/' . 'dashboard/customers/orders/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.customers.orders'), - 'put' => ns()->url('api/crud/' . 'ns.customers.orders/{id}' . ''), + 'list' => ns()->url( 'dashboard/' . 'dashboard/customers/orders' ), + 'create' => ns()->url( 'dashboard/' . 'dashboard/customers/orders/create' ), + 'edit' => ns()->url( 'dashboard/' . 'dashboard/customers/orders/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.customers.orders' ), + 'put' => ns()->url( 'api/crud/' . 'ns.customers.orders/{id}' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/CustomerRewardCrud.php b/app/Crud/CustomerRewardCrud.php index efcc88350..8e16daff1 100644 --- a/app/Crud/CustomerRewardCrud.php +++ b/app/Crud/CustomerRewardCrud.php @@ -86,14 +86,14 @@ class CustomerRewardCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -109,27 +109,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Customer Rewards List'), - 'list_description' => __('Display all customer rewards.'), - 'no_entry' => __('No customer rewards has been registered'), - 'create_new' => __('Add a new customer reward'), - 'create_title' => __('Create a new customer reward'), - 'create_description' => __('Register a new customer reward and save it.'), - 'edit_title' => __('Edit customer reward'), - 'edit_description' => __('Modify Customer Reward.'), - 'back_to_list' => __('Return to Customer Rewards'), + 'list_title' => __( 'Customer Rewards List' ), + 'list_description' => __( 'Display all customer rewards.' ), + 'no_entry' => __( 'No customer rewards has been registered' ), + 'create_new' => __( 'Add a new customer reward' ), + 'create_title' => __( 'Create a new customer reward' ), + 'create_description' => __( 'Register a new customer reward and save it.' ), + 'edit_title' => __( 'Edit customer reward' ), + 'edit_description' => __( 'Modify Customer Reward.' ), + 'back_to_list' => __( 'Return to Customer Rewards' ), ]; } @@ -137,7 +137,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -146,30 +146,30 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), // 'name' => 'name', // 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'points', - 'label' => __('Points'), + 'label' => __( 'Points' ), 'value' => $entry->points ?? '', ], [ 'type' => 'text', 'name' => 'target', - 'label' => __('Target'), + 'label' => __( 'Target' ), 'value' => $entry->target ?? '', ], ], @@ -182,9 +182,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -193,9 +193,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, CustomerReward $entry) + public function filterPutInputs( $inputs, CustomerReward $entry ) { return $inputs; } @@ -204,12 +204,12 @@ public function filterPutInputs($inputs, CustomerReward $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -221,9 +221,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, CustomerReward $entry) + public function afterPost( $request, CustomerReward $entry ) { return $request; } @@ -232,11 +232,11 @@ public function afterPost($request, CustomerReward $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -245,14 +245,14 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -263,11 +263,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -275,11 +275,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.customers-rewards') { + if ( $namespace == 'ns.customers-rewards' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -289,8 +289,8 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -304,87 +304,87 @@ public function getColumns(): array { return [ 'customer_name' => [ - 'label' => __('Customer'), + 'label' => __( 'Customer' ), '$direction' => '', '$sort' => false, ], 'reward_name' => [ - 'label' => __('Reward Name'), + 'label' => __( 'Reward Name' ), '$direction' => '', '$sort' => false, ], 'points' => [ - 'label' => __('Points'), + 'label' => __( 'Points' ), '$direction' => '', '$sort' => false, ], 'target' => [ - 'label' => __('Target'), + 'label' => __( 'Target' ), '$direction' => '', '$sort' => false, ], 'updated_at' => [ - 'label' => __('Last Update'), + 'label' => __( 'Last Update' ), '$direction' => '', '$sort' => false, ], ]; } - public function hook($query): void + public function hook( $query ): void { - $query->where('customer_id', request()->query('customer_id')); + $query->where( 'customer_id', request()->query( 'customer_id' ) ); } /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { // you can make changes here - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', - 'url' => ns()->url('/dashboard/' . $this->getSlug() . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . $this->getSlug() . '/edit/' . $entry->id ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.customers-rewards/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.customers-rewards/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } public function getSlug(): string { - return str_replace('{customer_id}', request()->query('customer_id'), $this->slug); + return str_replace( '{customer_id}', request()->query( 'customer_id' ), $this->slug ); } /** * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -394,9 +394,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof CustomerReward) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof CustomerReward ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -407,47 +407,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ 'list' => 'javascript:void(0)', 'create' => 'javascript:void(0)', - 'edit' => ns()->url('dashboard/' . $this->getSlug() . '/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.customers-rewards'), - 'put' => ns()->url('api/crud/' . 'ns.customers-rewards/{id}' . ''), + 'edit' => ns()->url( 'dashboard/' . $this->getSlug() . '/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.customers-rewards' ), + 'put' => ns()->url( 'api/crud/' . 'ns.customers-rewards/{id}' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/GlobalProductHistoryCrud.php b/app/Crud/GlobalProductHistoryCrud.php index 65b2c9855..939dc667e 100644 --- a/app/Crud/GlobalProductHistoryCrud.php +++ b/app/Crud/GlobalProductHistoryCrud.php @@ -53,6 +53,10 @@ class GlobalProductHistoryCrud extends CrudService 'delete' => false, ]; + protected $showOptions = false; + + protected $showCheckboxes = false; + public $casts = [ 'operation_type' => ProductHistoryActionCast::class, ]; @@ -95,14 +99,14 @@ class GlobalProductHistoryCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -135,27 +139,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Product Histories'), - 'list_description' => __('Display all product stock flow.'), - 'no_entry' => __('No products stock flow has been registered'), - 'create_new' => __('Add a new products stock flow'), - 'create_title' => __('Create a new products stock flow'), - 'create_description' => __('Register a new products stock flow and save it.'), - 'edit_title' => __('Edit products stock flow'), - 'edit_description' => __('Modify Globalproducthistorycrud.'), - 'back_to_list' => __('Return to Product Histories'), + 'list_title' => __( 'Product Histories' ), + 'list_description' => __( 'Display all product stock flow.' ), + 'no_entry' => __( 'No products stock flow has been registered' ), + 'create_new' => __( 'Add a new products stock flow' ), + 'create_title' => __( 'Create a new products stock flow' ), + 'create_description' => __( 'Register a new products stock flow and save it.' ), + 'edit_title' => __( 'Edit products stock flow' ), + 'edit_description' => __( 'Modify Globalproducthistorycrud.' ), + 'back_to_list' => __( 'Return to Product Histories' ), ]; } @@ -163,7 +167,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -172,9 +176,9 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ // ... @@ -185,9 +189,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -196,9 +200,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, ProductHistory $entry) + public function filterPutInputs( $inputs, ProductHistory $entry ) { return $inputs; } @@ -207,12 +211,12 @@ public function filterPutInputs($inputs, ProductHistory $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -224,9 +228,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, ProductHistory $entry) + public function afterPost( $request, ProductHistory $entry ) { return $request; } @@ -235,11 +239,11 @@ public function afterPost($request, ProductHistory $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -248,14 +252,14 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -266,11 +270,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -278,11 +282,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.global-products-history') { + if ( $namespace == 'ns.global-products-history' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -292,8 +296,8 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -307,59 +311,59 @@ public function getColumns(): array { return [ 'product_name' => [ - 'label' => __('Product'), + 'label' => __( 'Product' ), '$direction' => '', 'width' => '300px', '$sort' => false, ], 'procurement_name' => [ - 'label' => __('Procurement'), + 'label' => __( 'Procurement' ), '$direction' => '', 'width' => '200px', '$sort' => false, ], 'order_code' => [ - 'label' => __('Order'), + 'label' => __( 'Order' ), '$direction' => '', '$sort' => false, ], 'operation_type' => [ - 'label' => __('Operation Type'), + 'label' => __( 'Operation Type' ), '$direction' => '', '$sort' => false, ], 'unit_name' => [ - 'label' => __('Unit'), + 'label' => __( 'Unit' ), '$direction' => '', '$sort' => false, ], 'before_quantity' => [ - 'label' => __('Initial Quantity'), + 'label' => __( 'Initial Quantity' ), '$direction' => '', '$sort' => false, ], 'quantity' => [ - 'label' => __('Quantity'), + 'label' => __( 'Quantity' ), '$direction' => '', '$sort' => false, ], 'after_quantity' => [ - 'label' => __('New Quantity'), + 'label' => __( 'New Quantity' ), '$direction' => '', '$sort' => false, ], 'total_price' => [ - 'label' => __('Total Price'), + 'label' => __( 'Total Price' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -369,48 +373,48 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->procurement_name = $entry->procurement_name ?: __('N/A'); - $entry->order_code = $entry->order_code ?: __('N/A'); - $entry->total_price = ns()->currency->fresh($entry->total_price)->format(); + $entry->procurement_name = $entry->procurement_name ?: __( 'N/A' ); + $entry->order_code = $entry->order_code ?: __( 'N/A' ); + $entry->total_price = ns()->currency->fresh( $entry->total_price )->format(); // you can make changes here $entry->action( - label: __('Delete'), + label: __( 'Delete' ), identifier: 'delete', - url: ns()->url('/api/crud/ns.global-products-history/' . $entry->id), + url: ns()->url( '/api/crud/ns.global-products-history/' . $entry->id ), confirm: [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ] ); return $entry; } - public function hook($query): void + public function hook( $query ): void { - $query->orderBy('id', 'desc'); + $query->orderBy( 'id', 'desc' ); } /** * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -420,9 +424,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof ProductHistory) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof ProductHistory ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -433,47 +437,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . '/products/history'), - 'create' => ns()->url('dashboard/' . '/products/history/create'), - 'edit' => ns()->url('dashboard/' . '/products/history/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.global-products-history'), - 'put' => ns()->url('api/crud/' . 'ns.global-products-history/{id}' . ''), + 'list' => ns()->url( 'dashboard/' . '/products/history' ), + 'create' => ns()->url( 'dashboard/' . '/products/history/create' ), + 'edit' => ns()->url( 'dashboard/' . '/products/history/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.global-products-history' ), + 'put' => ns()->url( 'api/crud/' . 'ns.global-products-history/{id}' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/HoldOrderCrud.php b/app/Crud/HoldOrderCrud.php index a0ed511c4..96a7a78ad 100644 --- a/app/Crud/HoldOrderCrud.php +++ b/app/Crud/HoldOrderCrud.php @@ -86,14 +86,14 @@ class HoldOrderCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -111,35 +111,35 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); $this->bulkActions = []; } - public function hook($query): void + public function hook( $query ): void { - $query->orderBy('created_at', 'desc'); - $query->where('payment_status', 'hold'); + $query->orderBy( 'created_at', 'desc' ); + $query->where( 'payment_status', 'hold' ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Hold Orders List'), - 'list_description' => __('Display all hold orders.'), - 'no_entry' => __('No hold orders has been registered'), - 'create_new' => __('Add a new hold order'), - 'create_title' => __('Create a new hold order'), - 'create_description' => __('Register a new hold order and save it.'), - 'edit_title' => __('Edit hold order'), - 'edit_description' => __('Modify Hold Order.'), - 'back_to_list' => __('Return to Hold Orders'), + 'list_title' => __( 'Hold Orders List' ), + 'list_description' => __( 'Display all hold orders.' ), + 'no_entry' => __( 'No hold orders has been registered' ), + 'create_new' => __( 'Add a new hold order' ), + 'create_title' => __( 'Create a new hold order' ), + 'create_description' => __( 'Register a new hold order and save it.' ), + 'edit_title' => __( 'Edit hold order' ), + 'edit_description' => __( 'Modify Hold Order.' ), + 'back_to_list' => __( 'Return to Hold Orders' ), ]; } @@ -147,7 +147,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -156,150 +156,150 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), // 'name' => 'name', // 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'author', - 'label' => __('Author'), + 'label' => __( 'Author' ), 'value' => $entry->author ?? '', ], [ 'type' => 'text', 'name' => 'change', - 'label' => __('Change'), + 'label' => __( 'Change' ), 'value' => $entry->change ?? '', ], [ 'type' => 'text', 'name' => 'code', - 'label' => __('Code'), + 'label' => __( 'Code' ), 'value' => $entry->code ?? '', ], [ 'type' => 'text', 'name' => 'created_at', - 'label' => __('Created At'), + 'label' => __( 'Created At' ), 'value' => $entry->created_at ?? '', ], [ 'type' => 'text', 'name' => 'customer_id', - 'label' => __('Customer Id'), + 'label' => __( 'Customer Id' ), 'value' => $entry->customer_id ?? '', ], [ 'type' => 'text', 'name' => 'delivery_status', - 'label' => __('Delivery Status'), + 'label' => __( 'Delivery Status' ), 'value' => $entry->delivery_status ?? '', ], [ 'type' => 'text', 'name' => 'description', - 'label' => __('Description'), + 'label' => __( 'Description' ), 'value' => $entry->description ?? '', ], [ 'type' => 'text', 'name' => 'discount', - 'label' => __('Discount'), + 'label' => __( 'Discount' ), 'value' => $entry->discount ?? '', ], [ 'type' => 'text', 'name' => 'discount_percentage', - 'label' => __('Discount Percentage'), + 'label' => __( 'Discount Percentage' ), 'value' => $entry->discount_percentage ?? '', ], [ 'type' => 'text', 'name' => 'discount_type', - 'label' => __('Discount Type'), + 'label' => __( 'Discount Type' ), 'value' => $entry->discount_type ?? '', ], [ 'type' => 'text', 'name' => 'total_without_tax', - 'label' => __('Tax Excluded'), + 'label' => __( 'Tax Excluded' ), 'value' => $entry->total_without_tax ?? '', ], [ 'type' => 'text', 'name' => 'id', - 'label' => __('Id'), + 'label' => __( 'Id' ), 'value' => $entry->id ?? '', ], [ 'type' => 'text', 'name' => 'total_with_tax', - 'label' => __('Tax Included'), + 'label' => __( 'Tax Included' ), 'value' => $entry->total_with_tax ?? '', ], [ 'type' => 'text', 'name' => 'payment_status', - 'label' => __('Payment Status'), + 'label' => __( 'Payment Status' ), 'value' => $entry->payment_status ?? '', ], [ 'type' => 'text', 'name' => 'process_status', - 'label' => __('Process Status'), + 'label' => __( 'Process Status' ), 'value' => $entry->process_status ?? '', ], [ 'type' => 'text', 'name' => 'shipping', - 'label' => __('Shipping'), + 'label' => __( 'Shipping' ), 'value' => $entry->shipping ?? '', ], [ 'type' => 'text', 'name' => 'shipping_rate', - 'label' => __('Shipping Rate'), + 'label' => __( 'Shipping Rate' ), 'value' => $entry->shipping_rate ?? '', ], [ 'type' => 'text', 'name' => 'shipping_type', - 'label' => __('Shipping Type'), + 'label' => __( 'Shipping Type' ), 'value' => $entry->shipping_type ?? '', ], [ 'type' => 'text', 'name' => 'subtotal', - 'label' => __('Sub Total'), + 'label' => __( 'Sub Total' ), 'value' => $entry->subtotal ?? '', ], [ 'type' => 'text', 'name' => 'tax_value', - 'label' => __('Tax Value'), + 'label' => __( 'Tax Value' ), 'value' => $entry->tax_value ?? '', ], [ 'type' => 'text', 'name' => 'tendered', - 'label' => __('Tendered'), + 'label' => __( 'Tendered' ), 'value' => $entry->tendered ?? '', ], [ 'type' => 'text', 'name' => 'title', - 'label' => __('Title'), + 'label' => __( 'Title' ), 'value' => $entry->title ?? '', ], [ 'type' => 'text', 'name' => 'total', - 'label' => __('Total'), + 'label' => __( 'Total' ), 'value' => $entry->total ?? '', ], [ 'type' => 'text', 'name' => 'type', - 'label' => __('Type'), + 'label' => __( 'Type' ), 'value' => $entry->type ?? '', ], [ 'type' => 'text', 'name' => 'updated_at', - 'label' => __('Updated At'), + 'label' => __( 'Updated At' ), 'value' => $entry->updated_at ?? '', ], [ 'type' => 'text', 'name' => 'uuid', - 'label' => __('Uuid'), + 'label' => __( 'Uuid' ), 'value' => $entry->uuid ?? '', ], ], ], @@ -311,9 +311,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -322,9 +322,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, Order $entry) + public function filterPutInputs( $inputs, Order $entry ) { return $inputs; } @@ -333,12 +333,12 @@ public function filterPutInputs($inputs, Order $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -350,9 +350,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, Order $entry) + public function afterPost( $request, Order $entry ) { return $request; } @@ -361,11 +361,11 @@ public function afterPost($request, Order $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -374,14 +374,14 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -392,11 +392,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -404,11 +404,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.hold-orders') { + if ( $namespace == 'ns.hold-orders' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -418,8 +418,8 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -433,23 +433,23 @@ public function getColumns(): array { return [ 'code' => [ - 'label' => __('Code'), + 'label' => __( 'Code' ), '$direction' => '', 'width' => '120px', '$sort' => false, ], 'nexopos_customers_name' => [ - 'label' => __('Customer'), + 'label' => __( 'Customer' ), '$direction' => '', '$sort' => false, ], 'total' => [ - 'label' => __('Total'), + 'label' => __( 'Total' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -459,10 +459,10 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { $entry->action( - label: __('Continue'), + label: __( 'Continue' ), identifier: 'ns.open', type: 'POPUP', ); @@ -474,20 +474,20 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -497,9 +497,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof Order) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof Order ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -510,29 +510,29 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'ns.hold-orders'), - 'create' => ns()->url('dashboard/' . 'ns.hold-orders/create'), - 'edit' => ns()->url('dashboard/' . 'ns.hold-orders/edit/'), - 'post' => ns()->url('dashboard/' . 'ns.hold-orders'), - 'put' => ns()->url('dashboard/' . 'ns.hold-orders/' . ''), + 'list' => ns()->url( 'dashboard/' . 'ns.hold-orders' ), + 'create' => ns()->url( 'dashboard/' . 'ns.hold-orders/create' ), + 'edit' => ns()->url( 'dashboard/' . 'ns.hold-orders/edit/' ), + 'post' => ns()->url( 'dashboard/' . 'ns.hold-orders' ), + 'put' => ns()->url( 'dashboard/' . 'ns.hold-orders/' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { @@ -542,7 +542,7 @@ public function getBulkActions(): array /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/OrderCrud.php b/app/Crud/OrderCrud.php index 662a4969f..b74a8bb2b 100644 --- a/app/Crud/OrderCrud.php +++ b/app/Crud/OrderCrud.php @@ -64,14 +64,14 @@ class OrderCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -112,13 +112,13 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); /** * This will allow module to change the bound * class for the default User model. */ - $UserClass = app()->make(User::class); + $UserClass = app()->make( User::class ); /** * Let's define the query filters @@ -128,49 +128,49 @@ public function __construct() [ 'type' => 'daterangepicker', 'name' => 'nexopos_orders.created_at', - 'description' => __('Restrict the orders by the creation date.'), - 'label' => __('Created Between'), + 'description' => __( 'Restrict the orders by the creation date.' ), + 'label' => __( 'Created Between' ), ], [ 'type' => 'select', - 'label' => __('Payment Status'), + 'label' => __( 'Payment Status' ), 'name' => 'payment_status', - 'description' => __('Restrict the orders by the payment status.'), - 'options' => Helper::kvToJsOptions([ - Order::PAYMENT_PAID => __('Paid'), - Order::PAYMENT_HOLD => __('Hold'), - Order::PAYMENT_PARTIALLY => __('Partially Paid'), - Order::PAYMENT_PARTIALLY_REFUNDED => __('Partially Refunded'), - Order::PAYMENT_REFUNDED => __('Refunded'), - Order::PAYMENT_UNPAID => __('Unpaid'), - Order::PAYMENT_VOID => __('Voided'), - Order::PAYMENT_DUE => __('Due'), - Order::PAYMENT_PARTIALLY_DUE => __('Due With Payment'), - ]), + 'description' => __( 'Restrict the orders by the payment status.' ), + 'options' => Helper::kvToJsOptions( [ + Order::PAYMENT_PAID => __( 'Paid' ), + Order::PAYMENT_HOLD => __( 'Hold' ), + Order::PAYMENT_PARTIALLY => __( 'Partially Paid' ), + Order::PAYMENT_PARTIALLY_REFUNDED => __( 'Partially Refunded' ), + Order::PAYMENT_REFUNDED => __( 'Refunded' ), + Order::PAYMENT_UNPAID => __( 'Unpaid' ), + Order::PAYMENT_VOID => __( 'Voided' ), + Order::PAYMENT_DUE => __( 'Due' ), + Order::PAYMENT_PARTIALLY_DUE => __( 'Due With Payment' ), + ] ), ], [ 'type' => 'select', - 'label' => __('Author'), + 'label' => __( 'Author' ), 'name' => 'nexopos_orders.author', - 'description' => __('Restrict the orders by the author.'), - 'options' => Helper::toJsOptions($UserClass::get(), [ 'id', 'username' ]), + 'description' => __( 'Restrict the orders by the author.' ), + 'options' => Helper::toJsOptions( $UserClass::get(), [ 'id', 'username' ] ), ], [ 'type' => 'select', - 'label' => __('Customer'), + 'label' => __( 'Customer' ), 'name' => 'customer_id', - 'description' => __('Restrict the orders by the customer.'), - 'options' => Helper::toJsOptions(Customer::get(), [ 'id', 'first_name' ]), + 'description' => __( 'Restrict the orders by the customer.' ), + 'options' => Helper::toJsOptions( Customer::get(), [ 'id', 'first_name' ] ), ], [ 'type' => 'text', - 'label' => __('Customer Phone'), + 'label' => __( 'Customer Phone' ), 'name' => 'phone', 'operator' => 'like', - 'description' => __('Restrict orders using the customer phone number.'), - 'options' => Helper::toJsOptions(Customer::get(), [ 'id', 'phone' ]), + 'description' => __( 'Restrict orders using the customer phone number.' ), + 'options' => Helper::toJsOptions( Customer::get(), [ 'id', 'phone' ] ), ], [ 'type' => 'select', - 'label' => __('Cash Register'), + 'label' => __( 'Cash Register' ), 'name' => 'register_id', - 'description' => __('Restrict the orders to the cash registers.'), - 'options' => Helper::toJsOptions(Register::get(), [ 'id', 'name' ]), + 'description' => __( 'Restrict the orders to the cash registers.' ), + 'options' => Helper::toJsOptions( Register::get(), [ 'id', 'name' ] ), ], ]; } @@ -179,20 +179,20 @@ public function __construct() * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Orders List'), - 'list_description' => __('Display all orders.'), - 'no_entry' => __('No orders has been registered'), - 'create_new' => __('Add a new order'), - 'create_title' => __('Create a new order'), - 'create_description' => __('Register a new order and save it.'), - 'edit_title' => __('Edit order'), - 'edit_description' => __('Modify Order.'), - 'back_to_list' => __('Return to Orders'), + 'list_title' => __( 'Orders List' ), + 'list_description' => __( 'Display all orders.' ), + 'no_entry' => __( 'No orders has been registered' ), + 'create_new' => __( 'Add a new order' ), + 'create_title' => __( 'Create a new order' ), + 'create_description' => __( 'Register a new order and save it.' ), + 'edit_title' => __( 'Edit order' ), + 'edit_description' => __( 'Modify Order.' ), + 'back_to_list' => __( 'Return to Orders' ), ]; } @@ -200,7 +200,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -209,140 +209,140 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), // 'name' => 'name', // 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'author', - 'label' => __('Author'), + 'label' => __( 'Author' ), 'value' => $entry->author ?? '', ], [ 'type' => 'text', 'name' => 'change', - 'label' => __('Change'), + 'label' => __( 'Change' ), 'value' => $entry->change ?? '', ], [ 'type' => 'text', 'name' => 'code', - 'label' => __('Code'), + 'label' => __( 'Code' ), 'value' => $entry->code ?? '', ], [ 'type' => 'text', 'name' => 'created_at', - 'label' => __('Created At'), + 'label' => __( 'Created At' ), 'value' => $entry->created_at ?? '', ], [ 'type' => 'text', 'name' => 'customer_id', - 'label' => __('Customer Id'), + 'label' => __( 'Customer Id' ), 'value' => $entry->customer_id ?? '', ], [ 'type' => 'text', 'name' => 'delivery_status', - 'label' => __('Delivery Status'), + 'label' => __( 'Delivery Status' ), 'value' => $entry->delivery_status ?? '', ], [ 'type' => 'text', 'name' => 'description', - 'label' => __('Description'), + 'label' => __( 'Description' ), 'value' => $entry->description ?? '', ], [ 'type' => 'text', 'name' => 'discount', - 'label' => __('Discount'), + 'label' => __( 'Discount' ), 'value' => $entry->discount ?? '', ], [ 'type' => 'text', 'name' => 'discount_rate', - 'label' => __('Discount Rate'), + 'label' => __( 'Discount Rate' ), 'value' => $entry->discount_rate ?? '', ], [ 'type' => 'text', 'name' => 'discount_type', - 'label' => __('Discount Type'), + 'label' => __( 'Discount Type' ), 'value' => $entry->discount_type ?? '', ], [ 'type' => 'text', 'name' => 'total_without_tax', - 'label' => __('Tax Excluded'), + 'label' => __( 'Tax Excluded' ), 'value' => $entry->total_without_tax ?? '', ], [ 'type' => 'text', 'name' => 'id', - 'label' => __('Id'), + 'label' => __( 'Id' ), 'value' => $entry->id ?? '', ], [ 'type' => 'text', 'name' => 'total_with_tax', - 'label' => __('Tax Included'), + 'label' => __( 'Tax Included' ), 'value' => $entry->total_with_tax ?? '', ], [ 'type' => 'text', 'name' => 'payment_status', - 'label' => __('Payment Status'), + 'label' => __( 'Payment Status' ), 'value' => $entry->payment_status ?? '', ], [ 'type' => 'text', 'name' => 'process_status', - 'label' => __('Process Status'), + 'label' => __( 'Process Status' ), 'value' => $entry->process_status ?? '', ], [ 'type' => 'text', 'name' => 'shipping', - 'label' => __('Shipping'), + 'label' => __( 'Shipping' ), 'value' => $entry->shipping ?? '', ], [ 'type' => 'text', 'name' => 'shipping_rate', - 'label' => __('Shipping Rate'), + 'label' => __( 'Shipping Rate' ), 'value' => $entry->shipping_rate ?? '', ], [ 'type' => 'text', 'name' => 'shipping_type', - 'label' => __('Shipping Type'), + 'label' => __( 'Shipping Type' ), 'value' => $entry->shipping_type ?? '', ], [ 'type' => 'text', 'name' => 'tendered', - 'label' => __('Tendered'), + 'label' => __( 'Tendered' ), 'value' => $entry->tendered ?? '', ], [ 'type' => 'text', 'name' => 'title', - 'label' => __('Title'), + 'label' => __( 'Title' ), 'value' => $entry->title ?? '', ], [ 'type' => 'text', 'name' => 'total', - 'label' => __('Total'), + 'label' => __( 'Total' ), 'value' => $entry->total ?? '', ], [ 'type' => 'text', 'name' => 'type', - 'label' => __('Type'), + 'label' => __( 'Type' ), 'value' => $entry->type ?? '', ], [ 'type' => 'text', 'name' => 'updated_at', - 'label' => __('Updated At'), + 'label' => __( 'Updated At' ), 'value' => $entry->updated_at ?? '', ], [ 'type' => 'text', 'name' => 'uuid', - 'label' => __('Uuid'), + 'label' => __( 'Uuid' ), 'value' => $entry->uuid ?? '', ], ], ], @@ -354,9 +354,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -365,9 +365,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, Order $entry) + public function filterPutInputs( $inputs, Order $entry ) { return $inputs; } @@ -376,11 +376,11 @@ public function filterPutInputs($inputs, Order $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - $this->allowedTo('create'); + $this->allowedTo( 'create' ); return $request; } @@ -389,9 +389,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, Order $entry) + public function afterPost( $request, Order $entry ) { return $request; } @@ -400,11 +400,11 @@ public function afterPost($request, Order $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -413,13 +413,13 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - $this->allowedTo('update'); + $this->allowedTo( 'update' ); return $request; } @@ -427,11 +427,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -439,22 +439,22 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.orders') { - $this->allowedTo('delete'); + if ( $namespace == 'ns.orders' ) { + $this->allowedTo( 'delete' ); /** * @var OrdersService */ - $orderService = app()->make(OrdersService::class); - $orderService->deleteOrder($model); + $orderService = app()->make( OrdersService::class ); + $orderService->deleteOrder( $model ); return [ 'status' => 'success', - 'message' => __('The order and the attached products has been deleted.'), + 'message' => __( 'The order and the attached products has been deleted.' ), ]; } } @@ -466,78 +466,78 @@ public function getColumns(): array { return [ 'code' => [ - 'label' => __('Code'), + 'label' => __( 'Code' ), '$direction' => '', '$sort' => false, 'width' => '120px', ], 'customer_first_name' => [ - 'label' => __('Customer'), + 'label' => __( 'Customer' ), '$direction' => '', '$sort' => false, 'width' => '120px', ], 'customer_phone' => [ - 'label' => __('Phone'), + 'label' => __( 'Phone' ), '$direction' => '', '$sort' => false, ], 'discount' => [ - 'label' => __('Discount'), + 'label' => __( 'Discount' ), '$direction' => '', '$sort' => false, ], 'delivery_status' => [ - 'label' => __('Delivery Status'), + 'label' => __( 'Delivery Status' ), '$direction' => '', '$sort' => false, ], 'payment_status' => [ - 'label' => __('Payment Status'), + 'label' => __( 'Payment Status' ), '$direction' => '', '$sort' => false, ], 'process_status' => [ - 'label' => __('Process Status'), + 'label' => __( 'Process Status' ), '$direction' => '', '$sort' => false, ], 'total' => [ - 'label' => __('Total'), + 'label' => __( 'Total' ), '$direction' => '', '$sort' => false, ], 'type' => [ - 'label' => __('Type'), + 'label' => __( 'Type' ), '$direction' => '', '$sort' => false, ], 'author_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], ]; } - public function hook($query): void + public function hook( $query ): void { - if (empty(request()->query('direction'))) { - $query->orderBy('id', 'desc'); + if ( empty( request()->query( 'direction' ) ) ) { + $query->orderBy( 'id', 'desc' ); } } /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->{ '$cssClass' } = match ($entry->__raw->payment_status) { + $entry->{ '$cssClass' } = match ( $entry->__raw->payment_status ) { Order::PAYMENT_PAID => 'success border text-sm', Order::PAYMENT_UNPAID => 'danger border text-sm', Order::PAYMENT_PARTIALLY => 'info border text-sm', @@ -552,49 +552,49 @@ public function setActions(CrudEntry $entry, $namespace) $entry->action( identifier: 'ns.order-options', - label: ' ' . __('Options'), + label: ' ' . __( 'Options' ), type: 'POPUP', - url: ns()->url('/dashboard/' . 'orders' . '/edit/' . $entry->id) + url: ns()->url( '/dashboard/' . 'orders' . '/edit/' . $entry->id ) ); /** * We'll check if the order has refunds * to add a refund receipt for printing */ - $refundCount = DB::table(Hook::filter('ns-model-table', 'nexopos_orders_refunds')) - ->where('order_id', $entry->id) + $refundCount = DB::table( Hook::filter( 'ns-model-table', 'nexopos_orders_refunds' ) ) + ->where( 'order_id', $entry->id ) ->count(); $hasRefunds = $refundCount > 0; - if ($hasRefunds) { + if ( $hasRefunds ) { $entry->action( identifier: 'ns.order-refunds', - label: ' ' . __('Refund Receipt'), + label: ' ' . __( 'Refund Receipt' ), type: 'POPUP', - url: ns()->url('/dashboard/' . 'orders' . '/refund-receipt/' . $entry->id), + url: ns()->url( '/dashboard/' . 'orders' . '/refund-receipt/' . $entry->id ), ); } $entry->action( identifier: 'invoice', - label: ' ' . __('Invoice'), - url: ns()->url('/dashboard/' . 'orders' . '/invoice/' . $entry->id), + label: ' ' . __( 'Invoice' ), + url: ns()->url( '/dashboard/' . 'orders' . '/invoice/' . $entry->id ), ); $entry->action( identifier: 'receipt', - label: ' ' . __('Receipt'), - url: ns()->url('/dashboard/' . 'orders' . '/receipt/' . $entry->id), + label: ' ' . __( 'Receipt' ), + url: ns()->url( '/dashboard/' . 'orders' . '/receipt/' . $entry->id ), ); $entry->action( identifier: 'delete', - label: ' ' . __('Delete'), + label: ' ' . __( 'Delete' ), type: 'DELETE', - url: ns()->url('/api/crud/ns.orders/' . $entry->id), + url: ns()->url( '/api/crud/ns.orders/' . $entry->id ), confirm: [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], ); @@ -605,31 +605,31 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - $user = app()->make(UsersService::class); - if (! $user->is([ 'admin', 'supervisor' ])) { - return response()->json([ + $user = app()->make( UsersService::class ); + if ( ! $user->is( [ 'admin', 'supervisor' ] ) ) { + return response()->json( [ 'status' => 'failed', - 'message' => __('You\'re not allowed to do this operation'), - ], 403); + 'message' => __( 'You\'re not allowed to do this operation' ), + ], 403 ); } - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { $status = [ 'success' => 0, 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof Order) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof Order ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -640,19 +640,19 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ 'list' => 'ns.orders', - 'create' => ns()->route('ns.dashboard.pos'), + 'create' => ns()->route( 'ns.dashboard.pos' ), 'edit' => 'ns.orders/edit/#', ]; } @@ -660,25 +660,25 @@ public function getLinks(): array /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/OrderInstalmentCrud.php b/app/Crud/OrderInstalmentCrud.php index 4a2c19c43..cd610ebd6 100644 --- a/app/Crud/OrderInstalmentCrud.php +++ b/app/Crud/OrderInstalmentCrud.php @@ -93,14 +93,14 @@ class OrderInstalmentCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -116,27 +116,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Order Instalments List'), - 'list_description' => __('Display all Order Instalments.'), - 'no_entry' => __('No Order Instalment has been registered'), - 'create_new' => __('Add a new Order Instalment'), - 'create_title' => __('Create a new Order Instalment'), - 'create_description' => __('Register a new Order Instalment and save it.'), - 'edit_title' => __('Edit Order Instalment'), - 'edit_description' => __('Modify Order Instalment.'), - 'back_to_list' => __('Return to Order Instalment'), + 'list_title' => __( 'Order Instalments List' ), + 'list_description' => __( 'Display all Order Instalments.' ), + 'no_entry' => __( 'No Order Instalment has been registered' ), + 'create_new' => __( 'Add a new Order Instalment' ), + 'create_title' => __( 'Create a new Order Instalment' ), + 'create_description' => __( 'Register a new Order Instalment and save it.' ), + 'edit_title' => __( 'Edit Order Instalment' ), + 'edit_description' => __( 'Modify Order Instalment.' ), + 'back_to_list' => __( 'Return to Order Instalment' ), ]; } @@ -144,7 +144,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -153,45 +153,45 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), // 'name' => 'name', // 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'amount', - 'label' => __('Amount'), + 'label' => __( 'Amount' ), 'value' => $entry->amount ?? '', ], [ 'type' => 'text', 'name' => 'date', - 'label' => __('Date'), + 'label' => __( 'Date' ), 'value' => $entry->date ?? '', ], [ 'type' => 'text', 'name' => 'id', - 'label' => __('Id'), + 'label' => __( 'Id' ), 'value' => $entry->id ?? '', ], [ 'type' => 'text', 'name' => 'order_id', - 'label' => __('Order Id'), + 'label' => __( 'Order Id' ), 'value' => $entry->order_id ?? '', ], [ 'type' => 'text', 'name' => 'paid', - 'label' => __('Paid'), + 'label' => __( 'Paid' ), 'value' => $entry->paid ?? '', ], ], ], @@ -203,9 +203,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -214,9 +214,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, OrderInstalment $entry) + public function filterPutInputs( $inputs, OrderInstalment $entry ) { return $inputs; } @@ -225,12 +225,12 @@ public function filterPutInputs($inputs, OrderInstalment $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -242,9 +242,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, OrderInstalment $entry) + public function afterPost( $request, OrderInstalment $entry ) { return $request; } @@ -253,11 +253,11 @@ public function afterPost($request, OrderInstalment $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -266,14 +266,14 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -284,11 +284,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -296,11 +296,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.orders-instalments') { + if ( $namespace == 'ns.orders-instalments' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -310,8 +310,8 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -325,27 +325,27 @@ public function getColumns(): array { return [ 'customer_name' => [ - 'label' => __('Customer'), + 'label' => __( 'Customer' ), '$direction' => '', '$sort' => false, ], 'order_code' => [ - 'label' => __('Order'), + 'label' => __( 'Order' ), '$direction' => '', '$sort' => false, ], 'amount' => [ - 'label' => __('Amount'), + 'label' => __( 'Amount' ), '$direction' => '', '$sort' => false, ], 'date' => [ - 'label' => __('Date'), + 'label' => __( 'Date' ), '$direction' => '', '$sort' => false, ], 'paid' => [ - 'label' => __('Paid'), + 'label' => __( 'Paid' ), '$direction' => '', '$sort' => false, ], @@ -355,29 +355,29 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->amount = (string) ns()->currency->define($entry->amount); + $entry->amount = (string) ns()->currency->define( $entry->amount ); $entry->{ '$cssClass' } = $entry->paid == 0 ? 'error' : 'success'; - $entry->paid = (bool) $entry->paid ? __('Yes') : __('No'); - $entry->date = ns()->date->getFormatted($entry->date); + $entry->paid = (bool) $entry->paid ? __( 'Yes' ) : __( 'No' ); + $entry->date = ns()->date->getFormatted( $entry->date ); // you can make changes here - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', - 'url' => ns()->url('/dashboard/' . $this->slug . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . $this->slug . '/edit/' . $entry->id ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.orders-instalments/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.orders-instalments/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } @@ -386,20 +386,20 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -409,9 +409,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof OrderInstalment) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof OrderInstalment ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -422,47 +422,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'orders/instalments'), + 'list' => ns()->url( 'dashboard/' . 'orders/instalments' ), 'create' => false, - 'edit' => ns()->url('dashboard/' . 'orders/instalments/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.orders-instalments'), - 'put' => ns()->url('api/crud/' . 'ns.orders-instalments/{id}' . ''), + 'edit' => ns()->url( 'dashboard/' . 'orders/instalments/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.orders-instalments' ), + 'put' => ns()->url( 'api/crud/' . 'ns.orders-instalments/{id}' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/PartiallyPaidOrderCrud.php b/app/Crud/PartiallyPaidOrderCrud.php index 07059f661..fb71329fb 100644 --- a/app/Crud/PartiallyPaidOrderCrud.php +++ b/app/Crud/PartiallyPaidOrderCrud.php @@ -14,9 +14,9 @@ public function __construct() parent::__construct(); } - public function hook($query): void + public function hook( $query ): void { - $query->orderBy('created_at', 'desc'); - $query->where('payment_status', Order::PAYMENT_PARTIALLY); + $query->orderBy( 'created_at', 'desc' ); + $query->where( 'payment_status', Order::PAYMENT_PARTIALLY ); } } diff --git a/app/Crud/PaymentTypeCrud.php b/app/Crud/PaymentTypeCrud.php index 434a9e18b..241b1fdd9 100644 --- a/app/Crud/PaymentTypeCrud.php +++ b/app/Crud/PaymentTypeCrud.php @@ -88,14 +88,14 @@ class PaymentTypeCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -111,27 +111,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Payment Types List'), - 'list_description' => __('Display all payment types.'), - 'no_entry' => __('No payment types has been registered'), - 'create_new' => __('Add a new payment type'), - 'create_title' => __('Create a new payment type'), - 'create_description' => __('Register a new payment type and save it.'), - 'edit_title' => __('Edit payment type'), - 'edit_description' => __('Modify Payment Type.'), - 'back_to_list' => __('Return to Payment Types'), + 'list_title' => __( 'Payment Types List' ), + 'list_description' => __( 'Display all payment types.' ), + 'no_entry' => __( 'No payment types has been registered' ), + 'create_new' => __( 'Add a new payment type' ), + 'create_title' => __( 'Create a new payment type' ), + 'create_description' => __( 'Register a new payment type and save it.' ), + 'edit_title' => __( 'Edit payment type' ), + 'edit_description' => __( 'Modify Payment Type.' ), + 'back_to_list' => __( 'Return to Payment Types' ), ]; } @@ -139,7 +139,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -148,46 +148,46 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Label'), + 'label' => __( 'Label' ), 'name' => 'label', 'value' => $entry->label ?? '', 'validation' => 'required', - 'description' => __('Provide a label to the resource.'), + 'description' => __( 'Provide a label to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ __('No'), __('Yes') ]), + 'options' => Helper::kvToJsOptions( [ __( 'No' ), __( 'Yes' ) ] ), 'name' => 'active', - 'label' => __('Active'), + 'label' => __( 'Active' ), 'validation' => 'required', 'value' => $entry->active ?? '', ], [ 'type' => 'number', 'name' => 'priority', - 'label' => __('Priority'), + 'label' => __( 'Priority' ), 'value' => $entry->priority ?? '', - 'description' => __('Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from "0".'), + 'description' => __( 'Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from "0".' ), 'validation' => 'required', ], [ 'type' => 'text', 'name' => 'identifier', - 'label' => __('Identifier'), + 'label' => __( 'Identifier' ), 'validation' => 'required', 'value' => $entry->identifier ?? '', ], [ 'type' => 'textarea', 'name' => 'description', - 'label' => __('Description'), + 'label' => __( 'Description' ), 'value' => $entry->description ?? '', ], ], @@ -200,16 +200,16 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { - $payment = PaymentType::where('identifier', $inputs[ 'identifier' ])->first(); + $payment = PaymentType::where( 'identifier', $inputs[ 'identifier' ] )->first(); $inputs[ 'priority' ] = (int) $inputs[ 'priority' ] < 0 ? 0 : $inputs[ 'priority' ]; - if ($payment instanceof PaymentType) { - throw new NotAllowedException(__('A payment type having the same identifier already exists.')); + if ( $payment instanceof PaymentType ) { + throw new NotAllowedException( __( 'A payment type having the same identifier already exists.' ) ); } return $inputs; @@ -219,9 +219,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, PaymentType $entry) + public function filterPutInputs( $inputs, PaymentType $entry ) { $inputs[ 'priority' ] = (int) $inputs[ 'priority' ] < 0 ? 0 : $inputs[ 'priority' ]; @@ -229,7 +229,7 @@ public function filterPutInputs($inputs, PaymentType $entry) * the identifier should not * be edited for readonly payment type */ - if ($entry->readonly) { + if ( $entry->readonly ) { $inputs[ 'identifier' ] = $entry->identifier; } @@ -240,18 +240,18 @@ public function filterPutInputs($inputs, PaymentType $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } - Cache::forget('nexopos.pos.payments'); - Cache::forget('nexopos.pos.payments-key'); + Cache::forget( 'nexopos.pos.payments' ); + Cache::forget( 'nexopos.pos.payments-key' ); return $request; } @@ -260,9 +260,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, PaymentType $entry) + public function afterPost( $request, PaymentType $entry ) { return $request; } @@ -271,11 +271,11 @@ public function afterPost($request, PaymentType $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -284,20 +284,20 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } - Cache::forget('nexopos.pos.payments'); - Cache::forget('nexopos.pos.payments-key'); + Cache::forget( 'nexopos.pos.payments' ); + Cache::forget( 'nexopos.pos.payments-key' ); return $request; } @@ -305,11 +305,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -317,11 +317,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.payments-types') { + if ( $namespace == 'ns.payments-types' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -331,18 +331,18 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } - if ($model->readonly) { - throw new NotAllowedException(__('Unable to delete a read-only payments type.')); + if ( $model->readonly ) { + throw new NotAllowedException( __( 'Unable to delete a read-only payments type.' ) ); } - Cache::forget('nexopos.pos.payments'); - Cache::forget('nexopos.pos.payments-key'); + Cache::forget( 'nexopos.pos.payments' ); + Cache::forget( 'nexopos.pos.payments-key' ); } } @@ -353,37 +353,37 @@ public function getColumns(): array { return [ 'identifier' => [ - 'label' => __('Identifier'), + 'label' => __( 'Identifier' ), '$direction' => '', '$sort' => false, ], 'label' => [ - 'label' => __('Label'), + 'label' => __( 'Label' ), '$direction' => '', '$sort' => false, ], 'active' => [ - 'label' => __('Active'), + 'label' => __( 'Active' ), '$direction' => '', '$sort' => false, ], 'priority' => [ - 'label' => __('Priority'), + 'label' => __( 'Priority' ), '$direction' => '', '$sort' => true, ], 'created_at' => [ - 'label' => __('Created On'), + 'label' => __( 'Created On' ), '$direction' => '', '$sort' => false, ], 'readonly' => [ - 'label' => __('Readonly'), + 'label' => __( 'Readonly' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], @@ -393,28 +393,28 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->readonly = $entry->readonly ? __('Yes') : __('No'); - $entry->active = $entry->active ? __('Yes') : __('No'); + $entry->readonly = $entry->readonly ? __( 'Yes' ) : __( 'No' ); + $entry->active = $entry->active ? __( 'Yes' ) : __( 'No' ); // you can make changes here - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', - 'url' => ns()->url('/dashboard/' . $this->slug . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . $this->slug . '/edit/' . $entry->id ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.payments-types/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.payments-types/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } @@ -423,20 +423,20 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -446,17 +446,17 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); - if ($entity->readonly) { + if ( $entity->readonly ) { $status[ 'failed' ]++; break; } - if ($entity instanceof PaymentType) { - Cache::forget('nexopos.pos.payments'); - Cache::forget('nexopos.pos.payments-key'); + if ( $entity instanceof PaymentType ) { + Cache::forget( 'nexopos.pos.payments' ); + Cache::forget( 'nexopos.pos.payments-key' ); $entity->delete(); $status[ 'success' ]++; @@ -468,47 +468,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'orders/payments-types'), - 'create' => ns()->url('dashboard/' . 'orders/payments-types/create'), - 'edit' => ns()->url('dashboard/' . 'orders/payments-types/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.payments-types'), - 'put' => ns()->url('api/crud/' . 'ns.payments-types/{id}' . ''), + 'list' => ns()->url( 'dashboard/' . 'orders/payments-types' ), + 'create' => ns()->url( 'dashboard/' . 'orders/payments-types/create' ), + 'edit' => ns()->url( 'dashboard/' . 'orders/payments-types/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.payments-types' ), + 'put' => ns()->url( 'api/crud/' . 'ns.payments-types/{id}' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/ProcurementCrud.php b/app/Crud/ProcurementCrud.php index 13590ee80..3b9821c5e 100644 --- a/app/Crud/ProcurementCrud.php +++ b/app/Crud/ProcurementCrud.php @@ -45,14 +45,14 @@ class ProcurementCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -83,40 +83,40 @@ public function __construct() { parent::__construct(); - $this->providerService = app()->make(ProviderService::class); + $this->providerService = app()->make( ProviderService::class ); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Procurements List'), - 'list_description' => __('Display all procurements.'), - 'no_entry' => __('No procurements has been registered'), - 'create_new' => __('Add a new procurement'), - 'create_title' => __('Create a new procurement'), - 'create_description' => __('Register a new procurement and save it.'), - 'edit_title' => __('Edit procurement'), - 'edit_description' => __('Modify Procurement.'), - 'back_to_list' => __('Return to Procurements'), + 'list_title' => __( 'Procurements List' ), + 'list_description' => __( 'Display all procurements.' ), + 'no_entry' => __( 'No procurements has been registered' ), + 'create_new' => __( 'Add a new procurement' ), + 'create_title' => __( 'Create a new procurement' ), + 'create_description' => __( 'Register a new procurement and save it.' ), + 'edit_title' => __( 'Edit procurement' ), + 'edit_description' => __( 'Modify Procurement.' ), + 'back_to_list' => __( 'Return to Procurements' ), ]; } - public function hook($query): void + public function hook( $query ): void { /** * should not block default * crud sorting */ - if (! request()->query('active') && ! request()->query('direction')) { - $query->orderBy('created_at', 'desc'); + if ( ! request()->query( 'active' ) && ! request()->query( 'direction' ) ) { + $query->orderBy( 'created_at', 'desc' ); } } @@ -124,7 +124,7 @@ public function hook($query): void * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -133,75 +133,75 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'author', - 'label' => __('Author'), + 'label' => __( 'Author' ), 'value' => $entry->author ?? '', ], [ 'type' => 'text', 'name' => 'created_at', - 'label' => __('Created At'), + 'label' => __( 'Created At' ), 'value' => $entry->created_at ?? '', ], [ 'type' => 'text', 'name' => 'description', - 'label' => __('Description'), + 'label' => __( 'Description' ), 'value' => $entry->description ?? '', ], [ 'type' => 'text', 'name' => 'id', - 'label' => __('Id'), + 'label' => __( 'Id' ), 'value' => $entry->id ?? '', ], [ 'type' => 'text', 'name' => 'name', - 'label' => __('Name'), + 'label' => __( 'Name' ), 'value' => $entry->name ?? '', ], [ 'type' => 'text', 'name' => 'provider_id', - 'label' => __('Provider Id'), + 'label' => __( 'Provider Id' ), 'value' => $entry->provider_id ?? '', ], [ 'type' => 'text', 'name' => 'status', - 'label' => __('Status'), + 'label' => __( 'Status' ), 'value' => $entry->status ?? '', ], [ 'type' => 'text', 'name' => 'total_items', - 'label' => __('Total Items'), + 'label' => __( 'Total Items' ), 'value' => $entry->total_items ?? '', ], [ 'type' => 'text', 'name' => 'updated_at', - 'label' => __('Updated At'), + 'label' => __( 'Updated At' ), 'value' => $entry->updated_at ?? '', ], [ 'type' => 'text', 'name' => 'uuid', - 'label' => __('Uuid'), + 'label' => __( 'Uuid' ), 'value' => $entry->uuid ?? '', ], [ 'type' => 'text', 'name' => 'value', - 'label' => __('Value'), + 'label' => __( 'Value' ), 'value' => $entry->value ?? '', ], ], ], @@ -213,11 +213,11 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { - if (empty($inputs[ 'invoice_date' ])) { + if ( empty( $inputs[ 'invoice_date' ] ) ) { $inputs[ 'invoice_date' ] = ns()->date->toDateTimeString(); } @@ -228,11 +228,11 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, Procurement $entry) + public function filterPutInputs( $inputs, Procurement $entry ) { - if (empty($inputs[ 'invoice_date' ])) { + if ( empty( $inputs[ 'invoice_date' ] ) ) { $inputs[ 'invoice_date' ] = ns()->date->toDateTimeString(); } @@ -243,11 +243,11 @@ public function filterPutInputs($inputs, Procurement $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - $this->allowedTo('create'); + $this->allowedTo( 'create' ); return $request; } @@ -256,9 +256,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, Procurement $entry) + public function afterPost( $request, Procurement $entry ) { return $request; } @@ -267,11 +267,11 @@ public function afterPost($request, Procurement $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -280,13 +280,13 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - $this->allowedTo('update'); + $this->allowedTo( 'update' ); return $request; } @@ -294,11 +294,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -306,12 +306,12 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.procurements') { - $this->allowedTo('delete'); + if ( $namespace == 'ns.procurements' ) { + $this->allowedTo( 'delete' ); } } @@ -322,49 +322,49 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'providers_first_name' => [ - 'label' => __('Provider'), + 'label' => __( 'Provider' ), '$direction' => '', '$sort' => false, ], 'delivery_status' => [ - 'label' => __('Delivery Status'), + 'label' => __( 'Delivery Status' ), '$direction' => '', '$sort' => false, ], 'payment_status' => [ - 'label' => __('Payment Status'), + 'label' => __( 'Payment Status' ), '$direction' => '', '$sort' => false, ], 'invoice_date' => [ - 'label' => __('Invoice Date'), + 'label' => __( 'Invoice Date' ), '$direction' => '', '$sort' => false, ], 'value' => [ - 'label' => __('Sale Value'), + 'label' => __( 'Sale Value' ), '$direction' => '', 'width' => '150px', '$sort' => false, ], 'cost' => [ - 'label' => __('Purchase Value'), + 'label' => __( 'Purchase Value' ), '$direction' => '', 'width' => '150px', '$sort' => false, ], 'tax_value' => [ - 'label' => __('Taxes'), + 'label' => __( 'Taxes' ), '$direction' => '', '$sort' => false, ], 'users_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], @@ -374,77 +374,77 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->delivery_status = $this->providerService->getDeliveryStatusLabel($entry->delivery_status); - $entry->payment_status = $this->providerService->getPaymentStatusLabel($entry->payment_status); + $entry->delivery_status = $this->providerService->getDeliveryStatusLabel( $entry->delivery_status ); + $entry->payment_status = $this->providerService->getPaymentStatusLabel( $entry->payment_status ); $entry->value = ns() ->currency - ->define($entry->value) + ->define( $entry->value ) ->format(); $entry->cost = ns() ->currency - ->define($entry->cost) + ->define( $entry->cost ) ->format(); $entry->tax_value = ns() ->currency - ->define($entry->tax_value) + ->define( $entry->tax_value ) ->format(); - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', 'index' => 'id', - 'url' => ns()->url('/dashboard/' . 'procurements' . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . 'procurements' . '/edit/' . $entry->id ), + ] ); - $entry->addAction('invoice', [ - 'label' => __('Invoice'), + $entry->addAction( 'invoice', [ + 'label' => __( 'Invoice' ), 'namespace' => 'edit', 'type' => 'GOTO', 'index' => 'id', - 'url' => ns()->url('/dashboard/' . 'procurements' . '/edit/' . $entry->id . '/invoice'), - ]); + 'url' => ns()->url( '/dashboard/' . 'procurements' . '/edit/' . $entry->id . '/invoice' ), + ] ); /** * if the procurement payment status * is not paid, we can display new option for making a payment */ - if ($entry->payment_status !== Procurement::PAYMENT_PAID) { - $entry->addAction('set_paid', [ - 'label' => __('Set Paid'), + if ( $entry->payment_status !== Procurement::PAYMENT_PAID ) { + $entry->addAction( 'set_paid', [ + 'label' => __( 'Set Paid' ), 'type' => 'GET', - 'url' => ns()->url('/api/procurements/' . $entry->id . '/set-as-paid'), + 'url' => ns()->url( '/api/procurements/' . $entry->id . '/set-as-paid' ), 'confirm' => [ - 'message' => __('Would you like to mark this procurement as paid?'), + 'message' => __( 'Would you like to mark this procurement as paid?' ), ], - ]); + ] ); } - $entry->addAction('refresh', [ - 'label' => __('Refresh'), + $entry->addAction( 'refresh', [ + 'label' => __( 'Refresh' ), 'namespace' => 'refresh', 'type' => 'GET', 'index' => 'id', - 'url' => ns()->url('/api/procurements/' . $entry->id . '/refresh'), + 'url' => ns()->url( '/api/procurements/' . $entry->id . '/refresh' ), 'confirm' => [ - 'message' => __('Would you like to refresh this ?'), + 'message' => __( 'Would you like to refresh this ?' ), ], - ]); + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.procurements/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.procurements/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } @@ -453,16 +453,16 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -472,9 +472,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof Procurement) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof Procurement ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -485,13 +485,13 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { @@ -505,25 +505,25 @@ public function getLinks(): array /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/ProcurementProductCrud.php b/app/Crud/ProcurementProductCrud.php index 05a83f9b9..e81e5a2c1 100644 --- a/app/Crud/ProcurementProductCrud.php +++ b/app/Crud/ProcurementProductCrud.php @@ -89,14 +89,14 @@ class ProcurementProductCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -112,27 +112,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Procurement Products List'), - 'list_description' => __('Display all procurement products.'), - 'no_entry' => __('No procurement products has been registered'), - 'create_new' => __('Add a new procurement product'), - 'create_title' => __('Create a new procurement product'), - 'create_description' => __('Register a new procurement product and save it.'), - 'edit_title' => __('Edit procurement product'), - 'edit_description' => __('Modify Procurement Product.'), - 'back_to_list' => __('Return to Procurement Products'), + 'list_title' => __( 'Procurement Products List' ), + 'list_description' => __( 'Display all procurement products.' ), + 'no_entry' => __( 'No procurement products has been registered' ), + 'create_new' => __( 'Add a new procurement product' ), + 'create_title' => __( 'Create a new procurement product' ), + 'create_description' => __( 'Register a new procurement product and save it.' ), + 'edit_title' => __( 'Edit procurement product' ), + 'edit_description' => __( 'Modify Procurement Product.' ), + 'back_to_list' => __( 'Return to Procurement Products' ), ]; } @@ -140,7 +140,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -149,27 +149,27 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'datetimepicker', 'name' => 'expiration_date', - 'label' => __('Expiration Date'), + 'label' => __( 'Expiration Date' ), 'value' => $entry->expiration_date ?? '', - 'description' => __('Define what is the expiration date of the product.'), + 'description' => __( 'Define what is the expiration date of the product.' ), ], ], ], @@ -181,9 +181,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -192,9 +192,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, ProcurementProduct $entry) + public function filterPutInputs( $inputs, ProcurementProduct $entry ) { return $inputs; } @@ -203,12 +203,12 @@ public function filterPutInputs($inputs, ProcurementProduct $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -220,9 +220,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, ProcurementProduct $entry) + public function afterPost( $request, ProcurementProduct $entry ) { return $request; } @@ -231,11 +231,11 @@ public function afterPost($request, ProcurementProduct $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -244,14 +244,14 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -262,11 +262,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -274,11 +274,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.procurements-products') { + if ( $namespace == 'ns.procurements-products' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -288,8 +288,8 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -303,47 +303,47 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'unit_name' => [ - 'label' => __('Unit'), + 'label' => __( 'Unit' ), '$direction' => '', '$sort' => false, ], 'procurement_name' => [ - 'label' => __('Procurement'), + 'label' => __( 'Procurement' ), '$direction' => '', '$sort' => false, ], 'quantity' => [ - 'label' => __('Quantity'), + 'label' => __( 'Quantity' ), '$direction' => '', '$sort' => false, ], 'total_purchase_price' => [ - 'label' => __('Total Price'), + 'label' => __( 'Total Price' ), '$direction' => '', '$sort' => false, ], 'barcode' => [ - 'label' => __('Barcode'), + 'label' => __( 'Barcode' ), '$direction' => '', '$sort' => false, ], 'expiration_date' => [ - 'label' => __('Expiration Date'), + 'label' => __( 'Expiration Date' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('On'), + 'label' => __( 'On' ), '$direction' => '', '$sort' => false, ], @@ -353,29 +353,29 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - foreach ([ 'gross_purchase_price', 'net_purchase_price', 'total_purchase_price', 'purchase_price' ] as $label) { - $entry->$label = (string) ns()->currency->define($entry->$label); + foreach ( [ 'gross_purchase_price', 'net_purchase_price', 'total_purchase_price', 'purchase_price' ] as $label ) { + $entry->$label = (string) ns()->currency->define( $entry->$label ); } // you can make changes here - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', - 'url' => ns()->url('/dashboard/' . $this->slug . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . $this->slug . '/edit/' . $entry->id ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.procurements-products/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.procurements-products/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } @@ -384,20 +384,20 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -407,9 +407,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof ProcurementProduct) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof ProcurementProduct ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -420,47 +420,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'procurements/products'), + 'list' => ns()->url( 'dashboard/' . 'procurements/products' ), 'create' => 'javascript:void(0)', //ns()->url( 'dashboard/' . '/procurements/products/create' ), - 'edit' => ns()->url('dashboard/' . 'procurements/products/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.procurements-products'), - 'put' => ns()->url('api/crud/' . 'ns.procurements-products/{id}' . ''), + 'edit' => ns()->url( 'dashboard/' . 'procurements/products/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.procurements-products' ), + 'put' => ns()->url( 'api/crud/' . 'ns.procurements-products/{id}' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/ProductCategoryCrud.php b/app/Crud/ProductCategoryCrud.php index 6f243737e..df0d6ecac 100644 --- a/app/Crud/ProductCategoryCrud.php +++ b/app/Crud/ProductCategoryCrud.php @@ -63,14 +63,14 @@ class ProductCategoryCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -86,27 +86,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Category Products List'), - 'list_description' => __('Display all category products.'), - 'no_entry' => __('No category products has been registered'), - 'create_new' => __('Add a new category product'), - 'create_title' => __('Create a new category product'), - 'create_description' => __('Register a new category product and save it.'), - 'edit_title' => __('Edit category product'), - 'edit_description' => __('Modify Category Product.'), - 'back_to_list' => __('Return to Category Products'), + 'list_title' => __( 'Category Products List' ), + 'list_description' => __( 'Display all category products.' ), + 'no_entry' => __( 'No category products has been registered' ), + 'create_new' => __( 'Add a new category product' ), + 'create_title' => __( 'Create a new category product' ), + 'create_description' => __( 'Register a new category product and save it.' ), + 'edit_title' => __( 'Edit category product' ), + 'edit_description' => __( 'Modify Category Product.' ), + 'back_to_list' => __( 'Return to Category Products' ), ]; } @@ -114,7 +114,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -123,53 +123,53 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { - $parents = ProductCategory::where('id', '<>', $entry->id ?? 0)->get(); - $parents->prepend((object) [ + $parents = ProductCategory::where( 'id', '<>', $entry->id ?? 0 )->get(); + $parents->prepend( (object) [ 'id' => 0, - 'name' => __('No Parent'), - ]); + 'name' => __( 'No Parent' ), + ] ); return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), 'validation' => 'required', ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'media', - 'label' => __('Preview'), + 'label' => __( 'Preview' ), 'name' => 'preview_url', - 'description' => __('Provide a preview url to the category.'), + 'description' => __( 'Provide a preview url to the category.' ), 'value' => $entry->preview_url ?? '', ], [ 'type' => 'switch', - 'label' => __('Displays On POS'), + 'label' => __( 'Displays On POS' ), 'name' => 'displays_on_pos', - 'description' => __('If clicked to no, all products assigned to this category or all sub categories, won\'t appear at the POS.'), - 'options' => Helper::kvToJsOptions([ __('No'), __('Yes') ]), + 'description' => __( 'If clicked to no, all products assigned to this category or all sub categories, won\'t appear at the POS.' ), + 'options' => Helper::kvToJsOptions( [ __( 'No' ), __( 'Yes' ) ] ), 'validation' => 'required', 'value' => $entry->displays_on_pos ?? 1, // ( $entry !== null && $entry->displays_on_pos ? ( int ) $entry->displays_on_pos : 1 ), ], [ 'type' => 'select', - 'options' => Helper::toJsOptions($parents, [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( $parents, [ 'id', 'name' ] ), 'name' => 'parent_id', - 'label' => __('Parent'), - 'description' => __('If this category should be a child category of an existing category'), + 'label' => __( 'Parent' ), + 'description' => __( 'If this category should be a child category of an existing category' ), 'value' => $entry->parent_id ?? '', ], [ 'type' => 'ckeditor', 'name' => 'description', - 'label' => __('Description'), + 'label' => __( 'Description' ), 'value' => $entry->description ?? '', ], ], @@ -182,9 +182,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -193,9 +193,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, ProductCategory $entry) + public function filterPutInputs( $inputs, ProductCategory $entry ) { return $inputs; } @@ -204,11 +204,11 @@ public function filterPutInputs($inputs, ProductCategory $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - $this->allowedTo('create'); + $this->allowedTo( 'create' ); return $request; } @@ -217,11 +217,11 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, ProductCategory $entry) + public function afterPost( $request, ProductCategory $entry ) { - ProductCategoryAfterCreatedEvent::dispatch($entry); + ProductCategoryAfterCreatedEvent::dispatch( $entry ); return $request; } @@ -230,11 +230,11 @@ public function afterPost($request, ProductCategory $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -243,13 +243,13 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - $this->allowedTo('delete'); + $this->allowedTo( 'delete' ); return $request; } @@ -257,27 +257,27 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, ProductCategory $entry) + public function afterPut( $request, ProductCategory $entry ) { /** * If the category is not visible on the POS * This products aren't available either. */ - if (! (bool) $entry->displays_on_pos) { - Product::where('category_id', $entry->id)->update([ + if ( ! (bool) $entry->displays_on_pos ) { + Product::where( 'category_id', $entry->id )->update( [ 'status' => 'unavailable', - ]); + ] ); } else { - Product::where('category_id', $entry->id)->update([ + Product::where( 'category_id', $entry->id )->update( [ 'status' => 'available', - ]); + ] ); } - ProductCategoryAfterUpdatedEvent::dispatch($entry); + ProductCategoryAfterUpdatedEvent::dispatch( $entry ); return $request; } @@ -285,14 +285,14 @@ public function afterPut($request, ProductCategory $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.products-categories') { - $this->allowedTo('delete'); + if ( $namespace == 'ns.products-categories' ) { + $this->allowedTo( 'delete' ); - ProductCategoryBeforeDeletedEvent::dispatch($model); + ProductCategoryBeforeDeletedEvent::dispatch( $model ); } } @@ -303,32 +303,32 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => true, ], 'parent_name' => [ - 'label' => __('Parent'), + 'label' => __( 'Parent' ), '$direction' => '', '$sort' => true, ], 'total_items' => [ - 'label' => __('Total Products'), + 'label' => __( 'Total Products' ), '$direction' => '', '$sort' => true, ], 'displays_on_pos' => [ - 'label' => __('Displays On POS'), + 'label' => __( 'Displays On POS' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => true, ], @@ -338,32 +338,32 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->parent_name = $entry->parent_name === null ? __('No Parent') : $entry->parent_name; - $entry->displays_on_pos = (int) $entry->displays_on_pos === 1 ? __('Yes') : __('No'); + $entry->parent_name = $entry->parent_name === null ? __( 'No Parent' ) : $entry->parent_name; + $entry->displays_on_pos = (int) $entry->displays_on_pos === 1 ? __( 'Yes' ) : __( 'No' ); $entry->action( identifier: 'edit', - label: __('Edit'), + label: __( 'Edit' ), type: 'GOTO', - url: ns()->url('/dashboard/' . 'products/categories' . '/edit/' . $entry->id), + url: ns()->url( '/dashboard/' . 'products/categories' . '/edit/' . $entry->id ), ); $entry->action( identifier: 'compute', - label: _('Compute Products'), + label: __( 'Compute Products' ), type: 'GOTO', - url: ns()->url('/dashboard/' . 'products/categories' . '/compute-products/' . $entry->id), + url: ns()->url( '/dashboard/' . 'products/categories' . '/compute-products/' . $entry->id ), ); $entry->action( identifier: 'delete', - label: __('Delete'), + label: __( 'Delete' ), type: 'DELETE', - url: ns()->url('/api/crud/ns.products-categories/' . $entry->id), + url: ns()->url( '/api/crud/ns.products-categories/' . $entry->id ), confirm: [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], ); @@ -374,32 +374,32 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - $user = app()->make(UsersService::class); + $user = app()->make( UsersService::class ); - if (! $user->is([ 'admin', 'supervisor' ])) { - return response()->json([ + if ( ! $user->is( [ 'admin', 'supervisor' ] ) ) { + return response()->json( [ 'status' => 'failed', - 'message' => __('You\'re not allowed to do this operation'), - ], 403); + 'message' => __( 'You\'re not allowed to do this operation' ), + ], 403 ); } - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { $status = [ 'success' => 0, 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof ProductCategory) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof ProductCategory ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -410,47 +410,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'products/categories'), - 'create' => ns()->url('dashboard/' . 'products/categories/create'), - 'edit' => ns()->url('dashboard/' . 'products/categories/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.products-categories'), - 'put' => ns()->url('api/crud/' . 'ns.products-categories/{id}' . ''), + 'list' => ns()->url( 'dashboard/' . 'products/categories' ), + 'create' => ns()->url( 'dashboard/' . 'products/categories/create' ), + 'edit' => ns()->url( 'dashboard/' . 'products/categories/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.products-categories' ), + 'put' => ns()->url( 'api/crud/' . 'ns.products-categories/{id}' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/ProductCrud.php b/app/Crud/ProductCrud.php index ada83fe91..0073d906a 100644 --- a/app/Crud/ProductCrud.php +++ b/app/Crud/ProductCrud.php @@ -2,6 +2,7 @@ namespace App\Crud; +use App\Casts\ProductTypeCast; use App\Exceptions\NotAllowedException; use App\Models\Product; use App\Models\ProductCategory; @@ -77,14 +78,14 @@ class ProductCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -100,6 +101,10 @@ class ProductCrud extends CrudService */ protected $taxService; + public $casts = [ + 'type' => ProductTypeCast::class, + ]; + /** * Define Constructor */ @@ -107,29 +112,29 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); - $this->taxService = app()->make(TaxService::class); + $this->taxService = app()->make( TaxService::class ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Products List'), - 'list_description' => __('Display all products.'), - 'no_entry' => __('No products has been registered'), - 'create_new' => __('Add a new product'), - 'create_title' => __('Create a new product'), - 'create_description' => __('Register a new product and save it.'), - 'edit_title' => __('Edit product'), - 'edit_description' => __('Modify Product.'), - 'back_to_list' => __('Return to Products'), + 'list_title' => __( 'Products List' ), + 'list_description' => __( 'Display all products.' ), + 'no_entry' => __( 'No products has been registered' ), + 'create_new' => __( 'Add a new product' ), + 'create_title' => __( 'Create a new product' ), + 'create_description' => __( 'Register a new product and save it.' ), + 'edit_title' => __( 'Edit product' ), + 'edit_description' => __( 'Modify Product.' ), + 'back_to_list' => __( 'Return to Products' ), ]; } @@ -137,7 +142,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -146,21 +151,21 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { $groups = UnitGroup::get(); - if ($entry instanceof Product) { - $unitGroup = UnitGroup::where('id', $entry->unit_group)->with('units')->first() ?? []; - $units = UnitGroup::find($entry->unit_group)->units; + if ( $entry instanceof Product ) { + $unitGroup = UnitGroup::where( 'id', $entry->unit_group )->with( 'units' )->first() ?? []; + $units = UnitGroup::find( $entry->unit_group )->units; } else { $unitGroup = $groups->first(); - $units = collect([]); + $units = collect( [] ); - if ($unitGroup instanceof UnitGroup) { - $units = UnitGroup::find($unitGroup->id)->units; + if ( $unitGroup instanceof UnitGroup ) { + $units = UnitGroup::find( $unitGroup->id )->units; } } @@ -171,68 +176,68 @@ public function getForm($entry = null) 'name' => 'unit_id', 'component' => 'nsCrudForm', 'props' => UnitCrud::getFormConfig(), - 'options' => Helper::toJsOptions($units, [ 'id', 'name' ]), - 'label' => __('Assigned Unit'), - 'description' => __('The assigned unit for sale'), + 'options' => Helper::toJsOptions( $units, [ 'id', 'name' ] ), + 'label' => __( 'Assigned Unit' ), + 'description' => __( 'The assigned unit for sale' ), 'validation' => 'required', 'value' => ! $units->isEmpty() ? $units->first()->id : '', ], [ 'type' => 'select', 'errors' => [], 'name' => 'convert_unit_id', - 'label' => __('Convert Unit'), + 'label' => __( 'Convert Unit' ), 'validation' => 'different:unit_id', - 'options' => Helper::toJsOptions($units, [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( $units, [ 'id', 'name' ] ), 'value' => '', - 'description' => __('The unit that is selected for convertion by default.'), + 'description' => __( 'The unit that is selected for convertion by default.' ), ], [ 'type' => 'number', 'errors' => [], 'name' => 'sale_price_edit', - 'label' => __('Sale Price'), - 'description' => __('Define the regular selling price.'), + 'label' => __( 'Sale Price' ), + 'description' => __( 'Define the regular selling price.' ), 'validation' => 'required', ], [ 'type' => 'number', 'errors' => [], 'name' => 'wholesale_price_edit', - 'label' => __('Wholesale Price'), - 'description' => __('Define the wholesale price.'), + 'label' => __( 'Wholesale Price' ), + 'description' => __( 'Define the wholesale price.' ), 'validation' => 'required', ], [ 'type' => 'number', 'errors' => [], 'name' => 'cogs', - 'label' => __('COGS'), + 'label' => __( 'COGS' ), 'value' => '', - 'description' => __('Used to define the Cost of Goods Sold.'), + 'description' => __( 'Used to define the Cost of Goods Sold.' ), ], [ 'type' => 'switch', 'errors' => [], 'name' => 'stock_alert_enabled', - 'label' => __('Stock Alert'), - 'options' => Helper::kvToJsOptions([ __('No'), __('Yes') ]), - 'description' => __('Define whether the stock alert should be enabled for this unit.'), + 'label' => __( 'Stock Alert' ), + 'options' => Helper::kvToJsOptions( [ __( 'No' ), __( 'Yes' ) ] ), + 'description' => __( 'Define whether the stock alert should be enabled for this unit.' ), ], [ 'type' => 'number', 'errors' => [], 'name' => 'low_quantity', - 'label' => __('Low Quantity'), - 'description' => __('Which quantity should be assumed low.'), + 'label' => __( 'Low Quantity' ), + 'description' => __( 'Which quantity should be assumed low.' ), ], [ 'type' => 'switch', 'errors' => [], 'name' => 'visible', - 'label' => __('Visible'), + 'label' => __( 'Visible' ), 'value' => 1, // by default - 'options' => Helper::kvToJsOptions([ __('No'), __('Yes') ]), - 'description' => __('Define whether the unit is available for sale.'), + 'options' => Helper::kvToJsOptions( [ __( 'No' ), __( 'Yes' ) ] ), + 'description' => __( 'Define whether the unit is available for sale.' ), ], [ 'type' => 'media', 'errors' => [], 'name' => 'preview_url', - 'label' => __('Preview Url'), - 'description' => __('Provide the preview of the current unit.'), + 'label' => __( 'Preview Url' ), + 'description' => __( 'Provide the preview of the current unit.' ), ], [ 'type' => 'hidden', 'errors' => [], @@ -244,13 +249,13 @@ public function getForm($entry = null) ], ]; - return Hook::filter('ns-products-crud-form', [ + return Hook::filter( 'ns-products-crud-form', [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', 'validation' => 'required', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'variations' => [ [ @@ -258,106 +263,106 @@ public function getForm($entry = null) 'id' => $entry->id ?? '', 'tabs' => [ 'identification' => [ - 'label' => __('Identification'), + 'label' => __( 'Identification' ), 'fields' => [ [ 'type' => 'text', 'name' => 'name', - 'description' => __('Product unique name. If it\' variation, it should be relevant for that variation'), - 'label' => __('Name'), + 'description' => __( 'Product unique name. If it\' variation, it should be relevant for that variation' ), + 'label' => __( 'Name' ), 'validation' => 'required', 'value' => $entry->name ?? '', ], [ 'type' => 'search-select', 'component' => 'nsCrudForm', 'props' => ProductCategoryCrud::getFormConfig(), - 'description' => __('Select to which category the item is assigned.'), - 'options' => Helper::toJsOptions(ProductCategory::get(), [ 'id', 'name' ]), + 'description' => __( 'Select to which category the item is assigned.' ), + 'options' => Helper::toJsOptions( ProductCategory::get(), [ 'id', 'name' ] ), 'name' => 'category_id', - 'label' => __('Category'), + 'label' => __( 'Category' ), 'validation' => 'required', 'value' => $entry->category_id ?? '', ], [ 'type' => 'text', 'name' => 'barcode', - 'description' => __('Define the barcode value. Focus the cursor here before scanning the product.'), - 'label' => __('Barcode'), + 'description' => __( 'Define the barcode value. Focus the cursor here before scanning the product.' ), + 'label' => __( 'Barcode' ), 'validation' => '', 'value' => $entry->barcode ?? '', ], [ 'type' => 'text', 'name' => 'sku', - 'description' => __('Define a unique SKU value for the product.'), - 'label' => __('SKU'), + 'description' => __( 'Define a unique SKU value for the product.' ), + 'label' => __( 'SKU' ), 'validation' => '', 'value' => $entry->sku ?? '', ], [ 'type' => 'select', - 'description' => __('Define the barcode type scanned.'), - 'options' => Helper::kvToJsOptions([ - 'ean8' => __('EAN 8'), - 'ean13' => __('EAN 13'), - 'codabar' => __('Codabar'), - 'code128' => __('Code 128'), - 'code39' => __('Code 39'), - 'code11' => __('Code 11'), - 'upca' => __('UPC A'), - 'upce' => __('UPC E'), - ]), + 'description' => __( 'Define the barcode type scanned.' ), + 'options' => Helper::kvToJsOptions( [ + 'ean8' => __( 'EAN 8' ), + 'ean13' => __( 'EAN 13' ), + 'codabar' => __( 'Codabar' ), + 'code128' => __( 'Code 128' ), + 'code39' => __( 'Code 39' ), + 'code11' => __( 'Code 11' ), + 'upca' => __( 'UPC A' ), + 'upce' => __( 'UPC E' ), + ] ), 'name' => 'barcode_type', - 'label' => __('Barcode Type'), + 'label' => __( 'Barcode Type' ), 'validation' => 'required', 'value' => $entry->barcode_type ?? 'code128', ], [ 'type' => 'select', - 'options' => Helper::kvToJsOptions(Hook::filter('ns-products-type', [ - 'materialized' => __('Materialized Product'), - 'dematerialized' => __('Dematerialized Product'), - 'grouped' => __('Grouped Product'), - ])), - 'description' => __('Define the product type. Applies to all variations.'), + 'options' => Helper::kvToJsOptions( Hook::filter( 'ns-products-type', [ + 'materialized' => __( 'Materialized Product' ), + 'dematerialized' => __( 'Dematerialized Product' ), + 'grouped' => __( 'Grouped Product' ), + ] ) ), + 'description' => __( 'Define the product type. Applies to all variations.' ), 'name' => 'type', 'validation' => 'required', - 'label' => __('Product Type'), + 'label' => __( 'Product Type' ), 'value' => $entry->type ?? 'materialized', ], [ 'type' => 'select', - 'options' => Helper::kvToJsOptions([ - 'available' => __('On Sale'), - 'unavailable' => __('Hidden'), - ]), - 'description' => __('Define whether the product is available for sale.'), + 'options' => Helper::kvToJsOptions( [ + 'available' => __( 'On Sale' ), + 'unavailable' => __( 'Hidden' ), + ] ), + 'description' => __( 'Define whether the product is available for sale.' ), 'name' => 'status', 'validation' => 'required', - 'label' => __('Status'), + 'label' => __( 'Status' ), 'value' => $entry->status ?? 'available', ], [ 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ - 'enabled' => __('Yes'), - 'disabled' => __('No'), - ]), - 'description' => __('Enable the stock management on the product. Will not work for service or uncountable products.'), + 'options' => Helper::kvToJsOptions( [ + 'enabled' => __( 'Yes' ), + 'disabled' => __( 'No' ), + ] ), + 'description' => __( 'Enable the stock management on the product. Will not work for service or uncountable products.' ), 'name' => 'stock_management', - 'label' => __('Stock Management Enabled'), + 'label' => __( 'Stock Management Enabled' ), 'validation' => 'required', 'value' => $entry->stock_management ?? 'enabled', ], [ 'type' => 'textarea', 'name' => 'description', - 'label' => __('Description'), + 'label' => __( 'Description' ), 'value' => $entry->description ?? '', ], ], ], 'groups' => [ - 'label' => __('Groups'), + 'label' => __( 'Groups' ), 'fields' => [ [ 'type' => 'hidden', 'name' => 'product_subitems', - 'value' => $entry !== null ? $entry->sub_items()->get()->map(function ($subItem) { - $subItem->load('product.unit_quantities.unit'); + 'value' => $entry !== null ? $entry->sub_items()->get()->map( function ( $subItem ) { + $subItem->load( 'product.unit_quantities.unit' ); return [ '_quantity_toggled' => false, @@ -375,169 +380,196 @@ public function getForm($entry = null) 'unit_quantities' => $subItem->product->unit_quantities, 'sale_price' => $subItem->sale_price, ]; - }) : [], + } ) : [], ], ], 'component' => 'nsProductGroup', ], 'units' => [ - 'label' => __('Units'), + 'label' => __( 'Units' ), 'fields' => [ [ 'type' => 'select', - 'options' => Helper::toJsOptions($groups, [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( $groups, [ 'id', 'name' ] ), 'name' => 'unit_group', - 'description' => __('What unit group applies to the actual item. This group will apply during the procurement.'), - 'label' => __('Unit Group'), + 'description' => __( 'What unit group applies to the actual item. This group will apply during the procurement.' ), + 'label' => __( 'Unit Group' ), 'validation' => 'required', - 'value' => $entry->unit_group ?? (! $groups->isEmpty() ? $groups->first()->id : ''), + 'value' => $entry->unit_group ?? ( ! $groups->isEmpty() ? $groups->first()->id : '' ), ], [ 'type' => 'switch', - 'description' => __('The product won\'t be visible on the grid and fetched only using the barcode reader or associated barcode.'), + 'description' => __( 'The product won\'t be visible on the grid and fetched only using the barcode reader or associated barcode.' ), 'options' => Helper::boolToOptions( - true: __('Yes'), - false: __('No'), + true: __( 'Yes' ), + false: __( 'No' ), ), 'name' => 'accurate_tracking', - 'label' => __('Accurate Tracking'), + 'label' => __( 'Accurate Tracking' ), 'value' => $entry->accurate_tracking ?? false, ], [ 'type' => 'switch', - 'description' => __('The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.'), + 'description' => __( 'The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.' ), 'options' => Helper::boolToOptions( - true: __('Yes'), - false: __('No'), + true: __( 'Yes' ), + false: __( 'No' ), ), 'name' => 'auto_cogs', - 'label' => __('Auto COGS'), + 'label' => __( 'Auto COGS' ), 'value' => $entry->auto_cogs ?? true, ], [ 'type' => 'group', 'name' => 'selling_group', - 'description' => __('Determine the unit for sale.'), - 'label' => __('Selling Unit'), + 'description' => __( 'Determine the unit for sale.' ), + 'label' => __( 'Selling Unit' ), 'fields' => $fields, /** * We make sure to popular the unit quantity * with the entry values using the fields array. */ - 'groups' => ($entry instanceof Product ? ProductUnitQuantity::withProduct($entry->id) + 'groups' => ( $entry instanceof Product ? ProductUnitQuantity::withProduct( $entry->id ) ->get() - ->map(function ($productUnitQuantity) use ($fields) { - return collect($fields)->map(function ($field) use ($productUnitQuantity) { + ->map( function ( $productUnitQuantity ) use ( $fields ) { + // get label of field having as name "unit_group" + $field = collect( $fields )->filter( fn( $field ) => $field[ 'name' ] === 'unit_id' )->map( function ( $field ) use ( $productUnitQuantity ) { $field[ 'value' ] = $productUnitQuantity->{ $field[ 'name' ] }; return $field; - }); - }) : []), - 'options' => $entry instanceof Product ? UnitGroup::find($entry->unit_group)->units : [], + } ); + + $optionLabel = __( 'Unammed Section' ); + + if ( $field->isNotEmpty() ) { + $option = collect( $field[0][ 'options' ] )->filter( fn( $option ) => $option[ 'value' ] === $field[0][ 'value' ] ); + $optionLabel = $option->first()[ 'label' ]; + } + + return [ + 'fields' => collect( $fields )->map( function ( $field ) use ( $productUnitQuantity ) { + + /** + * When the unit is assigned, a UnitQuantity model is created + * for the product. It shouldn't be possible to change the unit, + * to prevent loosing a reference to the created UnitQuantity. + */ + if ( $field[ 'name' ] === 'unit_id' ) { + $field[ 'disabled' ] = true; + } + + $field[ 'value' ] = $productUnitQuantity->{ $field[ 'name' ] }; + + return $field; + } ), + 'label' => $optionLabel, + ]; + } ) : [] ), + 'options' => $entry instanceof Product ? UnitGroup::find( $entry->unit_group )->units : [], ], ], ], 'expiracy' => [ - 'label' => __('Expiry'), + 'label' => __( 'Expiry' ), 'fields' => [ [ 'type' => 'switch', 'name' => 'expires', 'validation' => 'required', - 'label' => __('Product Expires'), + 'label' => __( 'Product Expires' ), 'options' => Helper::boolToOptions( - true: __('Yes'), - false: __('No'), + true: __( 'Yes' ), + false: __( 'No' ), ), - 'description' => __('Set to "No" expiration time will be ignored.'), + 'description' => __( 'Set to "No" expiration time will be ignored.' ), 'value' => $entry->expires ?? false, ], [ 'type' => 'select', - 'options' => Helper::kvToJsOptions([ - 'prevent_sales' => __('Prevent Sales'), - 'allow_sales' => __('Allow Sales'), - ]), - 'description' => __('Determine the action taken while a product has expired.'), + 'options' => Helper::kvToJsOptions( [ + 'prevent_sales' => __( 'Prevent Sales' ), + 'allow_sales' => __( 'Allow Sales' ), + ] ), + 'description' => __( 'Determine the action taken while a product has expired.' ), 'name' => 'on_expiration', - 'label' => __('On Expiration'), + 'label' => __( 'On Expiration' ), 'value' => $entry->on_expiration ?? 'prevent-sales', ], ], ], 'taxes' => [ - 'label' => __('Taxes'), + 'label' => __( 'Taxes' ), 'fields' => [ [ 'type' => 'select', - 'options' => Helper::toJsOptions(TaxGroup::get(), [ 'id', 'name' ], [ - null => __('Choose Group'), - ]), - 'description' => __('Select the tax group that applies to the product/variation.'), + 'options' => Helper::toJsOptions( TaxGroup::get(), [ 'id', 'name' ], [ + null => __( 'Choose Group' ), + ] ), + 'description' => __( 'Select the tax group that applies to the product/variation.' ), 'name' => 'tax_group_id', - 'label' => __('Tax Group'), + 'label' => __( 'Tax Group' ), 'value' => $entry->tax_group_id ?? '', ], [ 'type' => 'select', - 'options' => Helper::kvToJsOptions([ - 'inclusive' => __('Inclusive'), - 'exclusive' => __('Exclusive'), - ]), - 'description' => __('Define what is the type of the tax.'), + 'options' => Helper::kvToJsOptions( [ + 'inclusive' => __( 'Inclusive' ), + 'exclusive' => __( 'Exclusive' ), + ] ), + 'description' => __( 'Define what is the type of the tax.' ), 'name' => 'tax_type', - 'label' => __('Tax Type'), + 'label' => __( 'Tax Type' ), 'value' => $entry->tax_type ?? 'inclusive', ], ], ], 'images' => [ - 'label' => __('Images'), + 'label' => __( 'Images' ), 'fields' => [ [ 'type' => 'media', 'name' => 'url', - 'label' => __('Image'), - 'description' => __('Choose an image to add on the product gallery'), + 'label' => __( 'Image' ), + 'description' => __( 'Choose an image to add on the product gallery' ), ], [ 'type' => 'switch', 'name' => 'featured', - 'options' => Helper::kvToJsOptions([ __('No'), __('Yes') ]), - 'label' => __('Is Primary'), - 'description' => __('Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.'), + 'options' => Helper::kvToJsOptions( [ __( 'No' ), __( 'Yes' ) ] ), + 'label' => __( 'Is Primary' ), + 'description' => __( 'Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.' ), ], ], - 'groups' => $entry ? $entry->galleries->map(function ($gallery) { + 'groups' => $entry ? $entry->galleries->map( function ( $gallery ) { return [ [ 'type' => 'media', 'name' => 'url', - 'label' => __('Image'), + 'label' => __( 'Image' ), 'value' => $gallery->url, - 'description' => __('Choose an image to add on the product gallery'), + 'description' => __( 'Choose an image to add on the product gallery' ), ], [ 'type' => 'switch', 'name' => 'featured', 'options' => Helper::boolToOptions( - true: __('Yes'), - false: __('No'), + true: __( 'Yes' ), + false: __( 'No' ), ), - 'label' => __('Is Primary'), + 'label' => __( 'Is Primary' ), 'value' => $gallery->featured ?? false, - 'description' => __('Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.'), + 'description' => __( 'Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.' ), ], ]; - }) : [], + } ) : [], ], ], ], ], - ], $entry); + ], $entry ); } /** * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -546,9 +578,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, Product $entry) + public function filterPutInputs( $inputs, Product $entry ) { return $inputs; } @@ -557,11 +589,11 @@ public function filterPutInputs($inputs, Product $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - $this->allowedTo('create'); + $this->allowedTo( 'create' ); return $request; } @@ -570,9 +602,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, Product $entry) + public function afterPost( $request, Product $entry ) { return $request; } @@ -581,11 +613,11 @@ public function afterPost($request, Product $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -594,13 +626,13 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - $this->allowedTo('update'); + $this->allowedTo( 'update' ); return $request; } @@ -608,17 +640,17 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, Product $product) + public function afterPut( $request, Product $product ) { /** * delete all assigned taxes as it * be newly assigned */ - if ($product instanceof Product) { + if ( $product instanceof Product ) { $product->taxes()->delete(); } @@ -628,12 +660,12 @@ public function afterPut($request, Product $product) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.products') { - $this->allowedTo('delete'); + if ( $namespace == 'ns.products' ) { + $this->allowedTo( 'delete' ); } } @@ -644,39 +676,39 @@ public function getColumns(): array { return [ 'type' => [ - 'label' => __('Type'), + 'label' => __( 'Type' ), '$direction' => '', '$sort' => false, ], 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', 'width' => '150px', '$sort' => false, ], 'sku' => [ - 'label' => __('Sku'), + 'label' => __( 'Sku' ), '$direction' => '', '$sort' => false, ], 'category_name' => [ - 'label' => __('Category'), + 'label' => __( 'Category' ), 'width' => '150px', '$direction' => '', '$sort' => false, ], 'status' => [ - 'label' => __('Status'), + 'label' => __( 'Status' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Date'), + 'label' => __( 'Date' ), 'width' => '150px', '$direction' => '', '$sort' => false, @@ -687,86 +719,80 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $class = match ($entry->type) { + $class = match ( $entry->type ) { 'grouped' => 'text-success-tertiary', default => 'text-info-tertiary' }; - $entry->type = match ($entry->type) { - 'materialized' => __('Materialized'), - 'dematerialized' => __('Dematerialized'), - 'grouped' => __('Grouped'), - default => sprintf(__('Unknown Type: %s'), $entry->type), - }; - - $entry->type = '' . $entry->type . ''; + $entry->rawType = $entry->getOriginalValue( 'type' ); + $entry->rawStockManagement = $entry->getOriginalValue( 'stock_management' ); - $entry->stock_management = $entry->stock_management === 'enabled' ? __('Enabled') : __('Disabled'); - $entry->status = $entry->status === 'available' ? __('Available') : __('Hidden'); - $entry->category_name = $entry->category_name ?: __('Unassigned'); + $entry->stock_management = $entry->stock_management === 'enabled' ? __( 'Enabled' ) : __( 'Disabled' ); + $entry->status = $entry->status === 'available' ? __( 'Available' ) : __( 'Hidden' ); + $entry->category_name = $entry->category_name ?: __( 'Unassigned' ); // you can make changes here $entry->action( identifier: 'edit', - label: ' ' . __('Edit'), + label: ' ' . __( 'Edit' ), type: 'GOTO', - url: ns()->url('/dashboard/' . 'products' . '/edit/' . $entry->id), + url: ns()->url( '/dashboard/' . 'products' . '/edit/' . $entry->id ), ); $entry->action( identifier: 'ns.quantities', - label: ' ' . __('Preview'), + label: ' ' . __( 'Preview' ), type: 'POPUP', - url: ns()->url('/dashboard/' . 'products' . '/edit/' . $entry->id), + url: ns()->url( '/dashboard/' . 'products' . '/edit/' . $entry->id ), ); $entry->action( identifier: 'units', - label: ' ' . __('See Quantities'), + label: ' ' . __( 'See Quantities' ), type: 'GOTO', - url: ns()->url('/dashboard/' . 'products/' . $entry->id . '/units'), + url: ns()->url( '/dashboard/' . 'products/' . $entry->id . '/units' ), ); $entry->action( identifier: 'history', - label: ' ' . __('See History'), + label: ' ' . __( 'See History' ), type: 'GOTO', - url: ns()->url('/dashboard/' . 'products/' . $entry->id . '/history'), + url: ns()->url( '/dashboard/' . 'products/' . $entry->id . '/history' ), ); $entry->action( identifier: 'delete', - label: ' ' . __('Delete'), + label: ' ' . __( 'Delete' ), type: 'DELETE', - url: ns()->url('/api/crud/ns.products/' . $entry->id), + url: ns()->url( '/api/crud/ns.products/' . $entry->id ), confirm: [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], ); return $entry; } - public function hook($query): void + public function hook( $query ): void { - $query->orderBy('updated_at', 'desc'); + $query->orderBy( 'updated_at', 'desc' ); } /** * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -776,10 +802,10 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof Product) { - $this->deleteProductAttachedRelation($entity); + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof Product ) { + $this->deleteProductAttachedRelation( $entity ); $entity->delete(); $status[ 'success' ]++; } else { @@ -790,78 +816,78 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'products'), - 'create' => ns()->url('dashboard/' . 'products/create'), - 'edit' => ns()->url('dashboard/' . 'products/edit/'), + 'list' => ns()->url( 'dashboard/' . 'products' ), + 'create' => ns()->url( 'dashboard/' . 'products/create' ), + 'edit' => ns()->url( 'dashboard/' . 'products/edit/' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'confirm' => __('Would you like to delete selected entries ?'), - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'confirm' => __( 'Would you like to delete selected entries ?' ), + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { return []; } - public function getExtractedProductForm($product) + public function getExtractedProductForm( $product ) { - $rawForm = $this->getForm($product); + $rawForm = $this->getForm( $product ); return array_merge( - $this->extractForm($rawForm), + $this->extractForm( $rawForm ), [ - 'variations' => collect($rawForm[ 'variations' ])->map(function ($variation, $index) { - $data = $this->extractForm($variation); - if ($index === 0) { + 'variations' => collect( $rawForm[ 'variations' ] )->map( function ( $variation, $index ) { + $data = $this->extractForm( $variation ); + if ( $index === 0 ) { $data[ '$primary' ] = true; } - $data[ 'images' ] = $variation[ 'tabs' ][ 'images' ][ 'groups' ]->map(function ($fields) { - return $this->extractFields($fields); - })->toArray(); + $data[ 'images' ] = $variation[ 'tabs' ][ 'images' ][ 'groups' ]->map( function ( $fields ) { + return $this->extractFields( $fields ); + } )->toArray(); $groups = []; - collect($variation[ 'tabs' ][ 'units' ][ 'fields' ])->filter(function ($field) { + collect( $variation[ 'tabs' ][ 'units' ][ 'fields' ] )->filter( function ( $field ) { return $field[ 'type' ] === 'group'; - })->each(function ($field) use (&$groups) { - $groups[ $field[ 'name' ] ] = collect($field[ 'groups' ]) - ->map(fn($fields) => $this->extractFields($fields)) + } )->each( function ( $field ) use ( &$groups ) { + $groups[ $field[ 'name' ] ] = collect( $field[ 'groups' ] ) + ->map( fn( $group ) => $this->extractFields( $group[ 'fields' ] ) ) ->toArray(); - }); + } ); $data[ 'units' ] = [ ...$data[ 'units' ], @@ -869,7 +895,7 @@ public function getExtractedProductForm($product) ]; return $data; - })->toArray(), + } )->toArray(), ] ); } @@ -878,10 +904,10 @@ public function getExtractedProductForm($product) * Returns a key-value array format * of the crud post submitted. */ - public function getFlatForm(array $inputs, $model = null): array + public function getFlatForm( array $inputs, $model = null ): array { - $primary = collect($inputs[ 'variations' ]) - ->filter(fn($variation) => isset($variation[ '$primary' ])) + $primary = collect( $inputs[ 'variations' ] ) + ->filter( fn( $variation ) => isset( $variation[ '$primary' ] ) ) ->first(); $source = $primary; @@ -890,12 +916,12 @@ public function getFlatForm(array $inputs, $model = null): array * this is made to ensure the array * provided isn't flattened */ - unset($primary[ 'images' ]); - unset($primary[ 'units' ]); - unset($primary[ 'groups' ]); + unset( $primary[ 'images' ] ); + unset( $primary[ 'units' ] ); + unset( $primary[ 'groups' ] ); $primary[ 'identification' ][ 'name' ] = $inputs[ 'name' ]; - $primary = Helper::flatArrayWithKeys($primary)->toArray(); + $primary = Helper::flatArrayWithKeys( $primary )->toArray(); $primary[ 'product_type' ] = 'product'; /** @@ -906,13 +932,13 @@ public function getFlatForm(array $inputs, $model = null): array $primary[ 'units' ] = $source[ 'units' ]; $primary[ 'groups' ] = $source[ 'groups' ]; - unset($primary[ '$primary' ]); + unset( $primary[ '$primary' ] ); /** * As foreign fields aren't handled with * they are complex (array), this methods allow * external script to reinject those complex fields. */ - return Hook::filter('ns-update-products-inputs', $primary, $source, $model); + return Hook::filter( 'ns-update-products-inputs', $primary, $source, $model ); } } diff --git a/app/Crud/ProductHistoryCrud.php b/app/Crud/ProductHistoryCrud.php index 2b52e0bab..88d457932 100644 --- a/app/Crud/ProductHistoryCrud.php +++ b/app/Crud/ProductHistoryCrud.php @@ -84,14 +84,14 @@ class ProductHistoryCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -107,27 +107,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Product Histories'), - 'list_description' => __('Display all product histories.'), - 'no_entry' => __('No product histories has been registered'), - 'create_new' => __('Add a new product history'), - 'create_title' => __('Create a new product history'), - 'create_description' => __('Register a new product history and save it.'), - 'edit_title' => __('Edit product history'), - 'edit_description' => __('Modify Product History.'), - 'back_to_list' => __('Return to Product Histories'), + 'list_title' => __( 'Product Histories' ), + 'list_description' => __( 'Display all product histories.' ), + 'no_entry' => __( 'No product histories has been registered' ), + 'create_new' => __( 'Add a new product history' ), + 'create_title' => __( 'Create a new product history' ), + 'create_description' => __( 'Register a new product history and save it.' ), + 'edit_title' => __( 'Edit product history' ), + 'edit_description' => __( 'Modify Product History.' ), + 'back_to_list' => __( 'Return to Product Histories' ), ]; } @@ -135,7 +135,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -144,100 +144,100 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), // 'name' => 'name', // 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'after_quantity', - 'label' => __('After Quantity'), + 'label' => __( 'After Quantity' ), 'value' => $entry->after_quantity ?? '', ], [ 'type' => 'text', 'name' => 'author', - 'label' => __('Author'), + 'label' => __( 'Author' ), 'value' => $entry->author ?? '', ], [ 'type' => 'text', 'name' => 'before_quantity', - 'label' => __('Before Quantity'), + 'label' => __( 'Before Quantity' ), 'value' => $entry->before_quantity ?? '', ], [ 'type' => 'text', 'name' => 'created_at', - 'label' => __('Created At'), + 'label' => __( 'Created At' ), 'value' => $entry->created_at ?? '', ], [ 'type' => 'text', 'name' => 'id', - 'label' => __('Id'), + 'label' => __( 'Id' ), 'value' => $entry->id ?? '', ], [ 'type' => 'text', 'name' => 'operation_type', - 'label' => __('Operation Type'), + 'label' => __( 'Operation Type' ), 'value' => $entry->operation_type ?? '', ], [ 'type' => 'text', 'name' => 'order_id', - 'label' => __('Order id'), + 'label' => __( 'Order id' ), 'value' => $entry->order_id ?? '', ], [ 'type' => 'text', 'name' => 'procurement_id', - 'label' => __('Procurement Id'), + 'label' => __( 'Procurement Id' ), 'value' => $entry->procurement_id ?? '', ], [ 'type' => 'text', 'name' => 'procurement_product_id', - 'label' => __('Procurement Product Id'), + 'label' => __( 'Procurement Product Id' ), 'value' => $entry->procurement_product_id ?? '', ], [ 'type' => 'text', 'name' => 'product_id', - 'label' => __('Product Id'), + 'label' => __( 'Product Id' ), 'value' => $entry->product_id ?? '', ], [ 'type' => 'text', 'name' => 'quantity', - 'label' => __('Quantity'), + 'label' => __( 'Quantity' ), 'value' => $entry->quantity ?? '', ], [ 'type' => 'text', 'name' => 'total_price', - 'label' => __('Total Price'), + 'label' => __( 'Total Price' ), 'value' => $entry->total_price ?? '', ], [ 'type' => 'text', 'name' => 'unit_id', - 'label' => __('Unit Id'), + 'label' => __( 'Unit Id' ), 'value' => $entry->unit_id ?? '', ], [ 'type' => 'text', 'name' => 'unit_price', - 'label' => __('Unit Price'), + 'label' => __( 'Unit Price' ), 'value' => $entry->unit_price ?? '', ], [ 'type' => 'text', 'name' => 'updated_at', - 'label' => __('Updated At'), + 'label' => __( 'Updated At' ), 'value' => $entry->updated_at ?? '', ], [ 'type' => 'text', 'name' => 'uuid', - 'label' => __('Uuid'), + 'label' => __( 'Uuid' ), 'value' => $entry->uuid ?? '', ], ], ], @@ -249,9 +249,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -260,9 +260,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, ProductHistory $entry) + public function filterPutInputs( $inputs, ProductHistory $entry ) { return $inputs; } @@ -271,12 +271,12 @@ public function filterPutInputs($inputs, ProductHistory $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -288,9 +288,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, ProductHistory $entry) + public function afterPost( $request, ProductHistory $entry ) { return $request; } @@ -299,11 +299,11 @@ public function afterPost($request, ProductHistory $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -312,14 +312,14 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -330,11 +330,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -342,11 +342,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.products-histories') { + if ( $namespace == 'ns.products-histories' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -356,8 +356,8 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -371,64 +371,64 @@ public function getColumns(): array { return [ 'operation_type' => [ - 'label' => __('Operation'), + 'label' => __( 'Operation' ), '$direction' => '', 'width' => '100px', '$sort' => false, ], 'before_quantity' => [ - 'label' => __('P. Quantity'), + 'label' => __( 'P. Quantity' ), 'width' => '100px', '$direction' => '', '$sort' => false, ], 'quantity' => [ - 'label' => __('Quantity'), + 'label' => __( 'Quantity' ), '$direction' => '', '$sort' => false, ], 'after_quantity' => [ - 'label' => __('N. Quantity'), + 'label' => __( 'N. Quantity' ), '$direction' => '', 'width' => '100px', '$sort' => false, ], 'units_name' => [ - 'label' => __('Unit'), + 'label' => __( 'Unit' ), '$direction' => '', 'width' => '100px', '$sort' => false, ], 'orders_code' => [ - 'label' => __('Order'), + 'label' => __( 'Order' ), '$direction' => '', 'width' => '100px', '$sort' => false, ], 'procurements_name' => [ - 'label' => __('Procurement'), + 'label' => __( 'Procurement' ), '$direction' => '', '$sort' => false, ], 'unit_price' => [ - 'label' => __('Unit Price'), + 'label' => __( 'Unit Price' ), '$direction' => '', 'width' => '100px', '$sort' => false, ], 'total_price' => [ - 'label' => __('Total Price'), + 'label' => __( 'Total Price' ), '$direction' => '', 'width' => '100px', '$sort' => false, ], 'users_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Date'), + 'label' => __( 'Date' ), 'width' => '100px', '$direction' => '', '$sort' => false, @@ -439,17 +439,17 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->orders_code = $entry->orders_code ?: __('N/A'); - $entry->procurements_name = $entry->procurements_name ?: __('N/A'); - $entry->unit_price = ns()->currency->define($entry->unit_price) + $entry->orders_code = $entry->orders_code ?: __( 'N/A' ); + $entry->procurements_name = $entry->procurements_name ?: __( 'N/A' ); + $entry->unit_price = ns()->currency->define( $entry->unit_price ) ->format(); - $entry->total_price = ns()->currency->define($entry->total_price) + $entry->total_price = ns()->currency->define( $entry->total_price ) ->format(); - switch ($entry->operation_type) { + switch ( $entry->operation_type ) { case ProductHistory::ACTION_DEFECTIVE: case ProductHistory::ACTION_DELETED: case ProductHistory::ACTION_LOST: @@ -480,7 +480,7 @@ public function setActions(CrudEntry $entry, $namespace) // you can make changes here $entry->action( identifier: 'ns.description', - label: ' ' . __('Description'), + label: ' ' . __( 'Description' ), type: 'POPUP', ); @@ -491,20 +491,20 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -514,9 +514,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof ProductHistory) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof ProductHistory ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -527,31 +527,31 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } - public function hook($query): void + public function hook( $query ): void { - $query->orderBy('id', 'desc'); + $query->orderBy( 'id', 'desc' ); /** * This will enfore the products to list * only for the product which query parameter is provided */ - if (request()->query('product_id')) { - $query->where('product_id', request()->query('product_id')); + if ( request()->query( 'product_id' ) ) { + $query->where( 'product_id', request()->query( 'product_id' ) ); } } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'products/histories'), + 'list' => ns()->url( 'dashboard/' . 'products/histories' ), 'create' => false, 'edit' => false, 'post' => false, @@ -562,25 +562,25 @@ public function getLinks(): array /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/ProductUnitQuantitiesCrud.php b/app/Crud/ProductUnitQuantitiesCrud.php index 4da21491a..09006b967 100644 --- a/app/Crud/ProductUnitQuantitiesCrud.php +++ b/app/Crud/ProductUnitQuantitiesCrud.php @@ -67,14 +67,14 @@ class ProductUnitQuantitiesCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -90,34 +90,34 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Product Unit Quantities List'), - 'list_description' => __('Display all product unit quantities.'), - 'no_entry' => __('No product unit quantities has been registered'), - 'create_new' => __('Add a new product unit quantity'), - 'create_title' => __('Create a new product unit quantity'), - 'create_description' => __('Register a new product unit quantity and save it.'), - 'edit_title' => __('Edit product unit quantity'), - 'edit_description' => __('Modify Product Unit Quantity.'), - 'back_to_list' => __('Return to Product Unit Quantities'), + 'list_title' => __( 'Product Unit Quantities List' ), + 'list_description' => __( 'Display all product unit quantities.' ), + 'no_entry' => __( 'No product unit quantities has been registered' ), + 'create_new' => __( 'Add a new product unit quantity' ), + 'create_title' => __( 'Create a new product unit quantity' ), + 'create_description' => __( 'Register a new product unit quantity and save it.' ), + 'edit_title' => __( 'Edit product unit quantity' ), + 'edit_description' => __( 'Modify Product Unit Quantity.' ), + 'back_to_list' => __( 'Return to Product Unit Quantities' ), ]; } - public function hook($query): void + public function hook( $query ): void { - if (request()->query('product_id')) { - $query->where('product_id', request()->query('product_id')); + if ( request()->query( 'product_id' ) ) { + $query->where( 'product_id', request()->query( 'product_id' ) ); } } @@ -125,7 +125,7 @@ public function hook($query): void * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -134,60 +134,60 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), // 'name' => 'name', // 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'created_at', - 'label' => __('Created_at'), + 'label' => __( 'Created_at' ), 'value' => $entry->created_at ?? '', ], [ 'type' => 'text', 'name' => 'id', - 'label' => __('Id'), + 'label' => __( 'Id' ), 'value' => $entry->id ?? '', ], [ 'type' => 'text', 'name' => 'product_id', - 'label' => __('Product id'), + 'label' => __( 'Product id' ), 'value' => $entry->product_id ?? '', ], [ 'type' => 'text', 'name' => 'quantity', - 'label' => __('Quantity'), + 'label' => __( 'Quantity' ), 'value' => $entry->quantity ?? '', ], [ 'type' => 'text', 'name' => 'type', - 'label' => __('Type'), + 'label' => __( 'Type' ), 'value' => $entry->type ?? '', ], [ 'type' => 'text', 'name' => 'unit_id', - 'label' => __('Unit Id'), + 'label' => __( 'Unit Id' ), 'value' => $entry->unit_id ?? '', ], [ 'type' => 'text', 'name' => 'updated_at', - 'label' => __('Updated_at'), + 'label' => __( 'Updated_at' ), 'value' => $entry->updated_at ?? '', ], [ 'type' => 'text', 'name' => 'uuid', - 'label' => __('Uuid'), + 'label' => __( 'Uuid' ), 'value' => $entry->uuid ?? '', ], ], ], @@ -199,9 +199,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -210,9 +210,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, ProductUnitQuantity $entry) + public function filterPutInputs( $inputs, ProductUnitQuantity $entry ) { return $inputs; } @@ -221,12 +221,12 @@ public function filterPutInputs($inputs, ProductUnitQuantity $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -238,9 +238,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, ProductUnitQuantity $entry) + public function afterPost( $request, ProductUnitQuantity $entry ) { return $request; } @@ -249,11 +249,11 @@ public function afterPost($request, ProductUnitQuantity $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -262,14 +262,14 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } return $request; @@ -278,11 +278,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -290,11 +290,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.products-units') { + if ( $namespace == 'ns.products-units' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -304,8 +304,8 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -319,22 +319,22 @@ public function getColumns(): array { return [ 'products_name' => [ - 'label' => __('Product'), + 'label' => __( 'Product' ), '$direction' => '', '$sort' => false, ], 'units_name' => [ - 'label' => __('Unit'), + 'label' => __( 'Unit' ), '$direction' => '', '$sort' => false, ], 'quantity' => [ - 'label' => __('Quantity'), + 'label' => __( 'Quantity' ), '$direction' => '', '$sort' => false, ], 'updated_at' => [ - 'label' => __('Updated At'), + 'label' => __( 'Updated At' ), '$direction' => '', '$sort' => false, ], @@ -344,7 +344,7 @@ public function getColumns(): array /** * Define actions */ - public function setActions($entry, $namespace) + public function setActions( $entry, $namespace ) { return $entry; } @@ -353,20 +353,20 @@ public function setActions($entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -376,9 +376,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof ProductUnitQuantity) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof ProductUnitQuantity ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -389,13 +389,13 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { @@ -411,25 +411,25 @@ public function getLinks(): array /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/ProviderCrud.php b/app/Crud/ProviderCrud.php index d68c9c2b8..645933c9c 100644 --- a/app/Crud/ProviderCrud.php +++ b/app/Crud/ProviderCrud.php @@ -43,14 +43,14 @@ class ProviderCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -78,27 +78,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Providers List'), - 'list_description' => __('Display all providers.'), - 'no_entry' => __('No providers has been registered'), - 'create_new' => __('Add a new provider'), - 'create_title' => __('Create a new provider'), - 'create_description' => __('Register a new provider and save it.'), - 'edit_title' => __('Edit provider'), - 'edit_description' => __('Modify Provider.'), - 'back_to_list' => __('Return to Providers'), + 'list_title' => __( 'Providers List' ), + 'list_description' => __( 'Display all providers.' ), + 'no_entry' => __( 'No providers has been registered' ), + 'create_new' => __( 'Add a new provider' ), + 'create_title' => __( 'Create a new provider' ), + 'create_description' => __( 'Register a new provider and save it.' ), + 'edit_title' => __( 'Edit provider' ), + 'edit_description' => __( 'Modify Provider.' ), + 'back_to_list' => __( 'Return to Providers' ), ]; } @@ -106,7 +106,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -115,57 +115,57 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('First Name'), + 'label' => __( 'First Name' ), 'name' => 'first_name', 'value' => $entry->first_name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), 'validation' => 'required', ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'email', - 'label' => __('Email'), - 'description' => __('Provide the provider email. Might be used to send automated email.'), + 'label' => __( 'Email' ), + 'description' => __( 'Provide the provider email. Might be used to send automated email.' ), 'value' => $entry->email ?? '', ], [ 'type' => 'text', 'name' => 'last_name', - 'label' => __('Last Name'), - 'description' => __('Provider last name if necessary.'), + 'label' => __( 'Last Name' ), + 'description' => __( 'Provider last name if necessary.' ), 'value' => $entry->last_name ?? '', ], [ 'type' => 'text', 'name' => 'phone', - 'label' => __('Phone'), - 'description' => __('Contact phone number for the provider. Might be used to send automated SMS notifications.'), + 'label' => __( 'Phone' ), + 'description' => __( 'Contact phone number for the provider. Might be used to send automated SMS notifications.' ), 'value' => $entry->phone ?? '', ], [ 'type' => 'text', 'name' => 'address_1', - 'label' => __('Address 1'), - 'description' => __('First address of the provider.'), + 'label' => __( 'Address 1' ), + 'description' => __( 'First address of the provider.' ), 'value' => $entry->address_1 ?? '', ], [ 'type' => 'text', 'name' => 'address_2', - 'label' => __('Address 2'), - 'description' => __('Second address of the provider.'), + 'label' => __( 'Address 2' ), + 'description' => __( 'Second address of the provider.' ), 'value' => $entry->address_2 ?? '', ], [ 'type' => 'textarea', 'name' => 'description', - 'label' => __('Description'), - 'description' => __('Further details about the provider'), + 'label' => __( 'Description' ), + 'description' => __( 'Further details about the provider' ), 'value' => $entry->description ?? '', ], ], @@ -178,9 +178,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -189,9 +189,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, Provider $entry) + public function filterPutInputs( $inputs, Provider $entry ) { return $inputs; } @@ -200,11 +200,11 @@ public function filterPutInputs($inputs, Provider $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - $this->allowedTo('create'); + $this->allowedTo( 'create' ); return $request; } @@ -213,9 +213,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, Provider $entry) + public function afterPost( $request, Provider $entry ) { return $request; } @@ -224,11 +224,11 @@ public function afterPost($request, Provider $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -237,13 +237,13 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - $this->allowedTo('update'); + $this->allowedTo( 'update' ); return $request; } @@ -251,11 +251,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -263,12 +263,12 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.providers') { - $this->allowedTo('delete'); + if ( $namespace == 'ns.providers' ) { + $this->allowedTo( 'delete' ); } } @@ -279,37 +279,37 @@ public function getColumns(): array { return [ 'first_name' => [ - 'label' => __('First Name'), + 'label' => __( 'First Name' ), '$direction' => '', '$sort' => false, ], 'email' => [ - 'label' => __('Email'), + 'label' => __( 'Email' ), '$direction' => '', '$sort' => false, ], 'phone' => [ - 'label' => __('Phone'), + 'label' => __( 'Phone' ), '$direction' => '', '$sort' => false, ], 'amount_due' => [ - 'label' => __('Amount Due'), + 'label' => __( 'Amount Due' ), '$direction' => '', '$sort' => false, ], 'amount_paid' => [ - 'label' => __('Amount Paid'), + 'label' => __( 'Amount Paid' ), '$direction' => '', '$sort' => false, ], 'nexopos_users_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -319,47 +319,47 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->phone = $entry->phone ?? __('N/A'); - $entry->email = $entry->email ?? __('N/A'); + $entry->phone = $entry->phone ?? __( 'N/A' ); + $entry->email = $entry->email ?? __( 'N/A' ); - $entry->amount_due = ns()->currency->define($entry->amount_due)->format(); - $entry->amount_paid = ns()->currency->define($entry->amount_paid)->format(); + $entry->amount_due = ns()->currency->define( $entry->amount_due )->format(); + $entry->amount_paid = ns()->currency->define( $entry->amount_paid )->format(); - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', 'index' => 'id', - 'url' => ns()->url('/dashboard/' . 'providers' . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . 'providers' . '/edit/' . $entry->id ), + ] ); - $entry->addAction('see-procurements', [ - 'label' => __('See Procurements'), + $entry->addAction( 'see-procurements', [ + 'label' => __( 'See Procurements' ), 'namespace' => 'see-procurements', 'type' => 'GOTO', 'index' => 'id', - 'url' => ns()->url('/dashboard/' . 'providers/' . $entry->id . '/procurements/'), - ]); + 'url' => ns()->url( '/dashboard/' . 'providers/' . $entry->id . '/procurements/' ), + ] ); - $entry->addAction('see-products', [ - 'label' => __('See Products'), + $entry->addAction( 'see-products', [ + 'label' => __( 'See Products' ), 'namespace' => 'see-products', 'type' => 'GOTO', 'index' => 'id', - 'url' => ns()->url('/dashboard/' . 'providers/' . $entry->id . '/products/'), - ]); + 'url' => ns()->url( '/dashboard/' . 'providers/' . $entry->id . '/products/' ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.providers/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.providers/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } @@ -368,31 +368,31 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - $user = app()->make(UsersService::class); - if (! $user->is([ 'admin', 'supervisor' ])) { - return response()->json([ + $user = app()->make( UsersService::class ); + if ( ! $user->is( [ 'admin', 'supervisor' ] ) ) { + return response()->json( [ 'status' => 'failed', - 'message' => __('You\'re not allowed to do this operation'), - ], 403); + 'message' => __( 'You\'re not allowed to do this operation' ), + ], 403 ); } - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { $status = [ 'success' => 0, 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof Provider) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof Provider ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -403,47 +403,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'providers'), - 'create' => ns()->url('dashboard/' . 'providers/create'), - 'edit' => ns()->url('dashboard/' . 'providers/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.providers'), - 'put' => ns()->url('api/crud/' . 'ns.providers/{id}' . ''), + 'list' => ns()->url( 'dashboard/' . 'providers' ), + 'create' => ns()->url( 'dashboard/' . 'providers/create' ), + 'edit' => ns()->url( 'dashboard/' . 'providers/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.providers' ), + 'put' => ns()->url( 'api/crud/' . 'ns.providers/{id}' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/ProviderProcurementsCrud.php b/app/Crud/ProviderProcurementsCrud.php index ece8ec30f..7bafb795e 100644 --- a/app/Crud/ProviderProcurementsCrud.php +++ b/app/Crud/ProviderProcurementsCrud.php @@ -87,14 +87,14 @@ class ProviderProcurementsCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -115,34 +115,34 @@ public function __construct() { parent::__construct(); - $this->providerService = app()->make(ProviderService::class); + $this->providerService = app()->make( ProviderService::class ); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } - public function hook($query): void + public function hook( $query ): void { - $query->where('provider_id', request()->query('provider_id')); + $query->where( 'provider_id', request()->query( 'provider_id' ) ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Provider Procurements List'), - 'list_description' => __('Display all provider procurements.'), - 'no_entry' => __('No provider procurements has been registered'), - 'create_new' => __('Add a new provider procurement'), - 'create_title' => __('Create a new provider procurement'), - 'create_description' => __('Register a new provider procurement and save it.'), - 'edit_title' => __('Edit provider procurement'), - 'edit_description' => __('Modify Provider Procurement.'), - 'back_to_list' => __('Return to Provider Procurements'), + 'list_title' => __( 'Provider Procurements List' ), + 'list_description' => __( 'Display all provider procurements.' ), + 'no_entry' => __( 'No provider procurements has been registered' ), + 'create_new' => __( 'Add a new provider procurement' ), + 'create_title' => __( 'Create a new provider procurement' ), + 'create_description' => __( 'Register a new provider procurement and save it.' ), + 'edit_title' => __( 'Edit provider procurement' ), + 'edit_description' => __( 'Modify Provider Procurement.' ), + 'back_to_list' => __( 'Return to Provider Procurements' ), ]; } @@ -150,7 +150,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -159,65 +159,65 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), // 'name' => 'name', // 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'name', - 'label' => __('Name'), + 'label' => __( 'Name' ), 'value' => $entry->name ?? '', ], [ 'type' => 'text', 'name' => 'delivery_status', - 'label' => __('Delivery Status'), + 'label' => __( 'Delivery Status' ), 'value' => $entry->delivery_status ?? '', ], [ 'type' => 'text', 'name' => 'delivery_time', - 'label' => __('Delivered On'), + 'label' => __( 'Delivered On' ), 'value' => $entry->delivery_time ?? '', ], [ 'type' => 'text', 'name' => 'invoice_reference', - 'label' => __('Invoice'), + 'label' => __( 'Invoice' ), 'value' => $entry->invoice_reference ?? '', ], [ 'type' => 'text', 'name' => 'payment_status', - 'label' => __('Payment Status'), + 'label' => __( 'Payment Status' ), 'value' => $entry->payment_status ?? '', ], [ 'type' => 'text', 'name' => 'tax_value', - 'label' => __('Tax'), + 'label' => __( 'Tax' ), 'value' => $entry->tax_value ?? '', ], [ 'type' => 'text', 'name' => 'total_items', - 'label' => __('Total Items'), + 'label' => __( 'Total Items' ), 'value' => $entry->total_items ?? '', ], [ 'type' => 'text', 'name' => 'value', - 'label' => __('Value'), + 'label' => __( 'Value' ), 'value' => $entry->value ?? '', ], [ 'type' => 'text', 'name' => 'created_at', - 'label' => __('Created_at'), + 'label' => __( 'Created_at' ), 'value' => $entry->created_at ?? '', ], ], @@ -230,9 +230,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -241,9 +241,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, Procurement $entry) + public function filterPutInputs( $inputs, Procurement $entry ) { return $inputs; } @@ -252,12 +252,12 @@ public function filterPutInputs($inputs, Procurement $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -269,9 +269,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, Procurement $entry) + public function afterPost( $request, Procurement $entry ) { return $request; } @@ -280,11 +280,11 @@ public function afterPost($request, Procurement $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -293,14 +293,14 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -311,11 +311,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -323,11 +323,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.providers-procurements') { + if ( $namespace == 'ns.providers-procurements' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -337,8 +337,8 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -352,46 +352,46 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', 'width' => '200px', '$sort' => false, ], 'delivery_status' => [ - 'label' => __('Delivery'), + 'label' => __( 'Delivery' ), '$direction' => '', 'width' => '120px', '$sort' => false, ], 'payment_status' => [ - 'label' => __('Payment'), + 'label' => __( 'Payment' ), '$direction' => '', '$sort' => false, ], 'tax_value' => [ - 'label' => __('Tax'), + 'label' => __( 'Tax' ), '$direction' => '', 'width' => '100px', '$sort' => false, ], 'total_items' => [ - 'label' => __('Items'), + 'label' => __( 'Items' ), '$direction' => '', '$sort' => false, ], 'value' => [ - 'label' => __('Value'), + 'label' => __( 'Value' ), '$direction' => '', 'width' => '150px', '$sort' => false, ], 'user_username' => [ - 'label' => __('By'), + 'label' => __( 'By' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), 'width' => '200px', '$direction' => '', '$sort' => false, @@ -402,24 +402,24 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->tax_value = (string) ns()->currency->define($entry->tax_value); - $entry->value = (string) ns()->currency->define($entry->value); + $entry->tax_value = (string) ns()->currency->define( $entry->tax_value ); + $entry->value = (string) ns()->currency->define( $entry->value ); - $entry->delivery_status = $this->providerService->getDeliveryStatusLabel($entry->delivery_status); - $entry->payment_status = $this->providerService->getPaymentStatusLabel($entry->payment_status); + $entry->delivery_status = $this->providerService->getDeliveryStatusLabel( $entry->delivery_status ); + $entry->payment_status = $this->providerService->getPaymentStatusLabel( $entry->payment_status ); // you can make changes here - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.procurements/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.procurements/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } @@ -428,20 +428,20 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -451,9 +451,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof Procurement) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof Procurement ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -464,18 +464,18 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . '/providers/procurements'), + 'list' => ns()->url( 'dashboard/' . '/providers/procurements' ), 'create' => false, 'edit' => false, 'post' => false, @@ -486,25 +486,25 @@ public function getLinks(): array /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/ProviderProductsCrud.php b/app/Crud/ProviderProductsCrud.php index faec41818..3f021e473 100644 --- a/app/Crud/ProviderProductsCrud.php +++ b/app/Crud/ProviderProductsCrud.php @@ -85,14 +85,14 @@ class ProviderProductsCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -108,27 +108,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Provider Products List'), - 'list_description' => __('Display all Provider Products.'), - 'no_entry' => __('No Provider Products has been registered'), - 'create_new' => __('Add a new Provider Product'), - 'create_title' => __('Create a new Provider Product'), - 'create_description' => __('Register a new Provider Product and save it.'), - 'edit_title' => __('Edit Provider Product'), - 'edit_description' => __('Modify Provider Product.'), - 'back_to_list' => __('Return to Provider Products'), + 'list_title' => __( 'Provider Products List' ), + 'list_description' => __( 'Display all Provider Products.' ), + 'no_entry' => __( 'No Provider Products has been registered' ), + 'create_new' => __( 'Add a new Provider Product' ), + 'create_title' => __( 'Create a new Provider Product' ), + 'create_description' => __( 'Register a new Provider Product and save it.' ), + 'edit_title' => __( 'Edit Provider Product' ), + 'edit_description' => __( 'Modify Provider Product.' ), + 'back_to_list' => __( 'Return to Provider Products' ), ]; } @@ -136,7 +136,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -145,20 +145,20 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), // 'name' => 'name', // 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ // ... ], @@ -171,9 +171,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -182,9 +182,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, ProcurementProduct $entry) + public function filterPutInputs( $inputs, ProcurementProduct $entry ) { return $inputs; } @@ -193,12 +193,12 @@ public function filterPutInputs($inputs, ProcurementProduct $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -210,9 +210,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, ProcurementProduct $entry) + public function afterPost( $request, ProcurementProduct $entry ) { return $request; } @@ -221,11 +221,11 @@ public function afterPost($request, ProcurementProduct $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -234,14 +234,14 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -252,11 +252,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -264,11 +264,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.providers-products') { + if ( $namespace == 'ns.providers-products' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -278,8 +278,8 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -293,54 +293,54 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'purchase_price' => [ - 'label' => __('Purchase Price'), + 'label' => __( 'Purchase Price' ), '$direction' => '', 'width' => '100px', '$sort' => false, ], 'quantity' => [ - 'label' => __('Quantity'), + 'label' => __( 'Quantity' ), '$direction' => '', 'width' => '100px', '$sort' => false, ], 'tax_group_name' => [ - 'label' => __('Tax Group'), + 'label' => __( 'Tax Group' ), '$direction' => '', 'width' => '100px', '$sort' => false, ], 'barcode' => [ - 'label' => __('Barcode'), + 'label' => __( 'Barcode' ), '$direction' => '', 'width' => '100px', '$sort' => false, ], 'expiration_date' => [ - 'label' => __('Expiration Date'), + 'label' => __( 'Expiration Date' ), '$direction' => '', 'width' => '100px', '$sort' => false, ], 'tax_type' => [ - 'label' => __('Tax Type'), + 'label' => __( 'Tax Type' ), '$direction' => '', 'width' => '100px', '$sort' => false, ], 'tax_value' => [ - 'label' => __('Tax Value'), + 'label' => __( 'Tax Value' ), '$direction' => '', 'width' => '100px', '$sort' => false, ], 'total_purchase_price' => [ - 'label' => __('Total Price'), + 'label' => __( 'Total Price' ), '$direction' => '', 'width' => '100px', '$sort' => false, @@ -351,57 +351,57 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->purchase_price = ns()->currency->define($entry->purchase_price)->format(); - $entry->tax_value = ns()->currency->define($entry->tax_value)->format(); - $entry->total_purchase_price = ns()->currency->define($entry->total_purchase_price)->format(); - $entry->expiration_date = $entry->expiration_date ?: __('N/A'); + $entry->purchase_price = ns()->currency->define( $entry->purchase_price )->format(); + $entry->tax_value = ns()->currency->define( $entry->tax_value )->format(); + $entry->total_purchase_price = ns()->currency->define( $entry->total_purchase_price )->format(); + $entry->expiration_date = $entry->expiration_date ?: __( 'N/A' ); // you can make changes here - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', - 'url' => ns()->url('/dashboard/' . $this->slug . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . $this->slug . '/edit/' . $entry->id ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.providers-products/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.providers-products/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } - public function hook($query): void + public function hook( $query ): void { - $query->whereIn('procurement_id', explode(',', request()->query('procurements'))); + $query->whereIn( 'procurement_id', explode( ',', request()->query( 'procurements' ) ) ); } /** * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -411,9 +411,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof ProcurementProduct) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof ProcurementProduct ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -424,18 +424,18 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . '/dashboard/providers'), + 'list' => ns()->url( 'dashboard/' . '/dashboard/providers' ), 'create' => false, 'edit' => false, 'post' => false, @@ -446,25 +446,25 @@ public function getLinks(): array /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/RegisterCrud.php b/app/Crud/RegisterCrud.php index 97e296521..950e7843c 100644 --- a/app/Crud/RegisterCrud.php +++ b/app/Crud/RegisterCrud.php @@ -90,14 +90,14 @@ class RegisterCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -113,27 +113,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Registers List'), - 'list_description' => __('Display all registers.'), - 'no_entry' => __('No registers has been registered'), - 'create_new' => __('Add a new register'), - 'create_title' => __('Create a new register'), - 'create_description' => __('Register a new register and save it.'), - 'edit_title' => __('Edit register'), - 'edit_description' => __('Modify Register.'), - 'back_to_list' => __('Return to Registers'), + 'list_title' => __( 'Registers List' ), + 'list_description' => __( 'Display all registers.' ), + 'no_entry' => __( 'No registers has been registered' ), + 'create_new' => __( 'Add a new register' ), + 'create_title' => __( 'Create a new register' ), + 'create_description' => __( 'Register a new register and save it.' ), + 'edit_title' => __( 'Edit register' ), + 'edit_description' => __( 'Modify Register.' ), + 'back_to_list' => __( 'Return to Registers' ), ]; } @@ -141,7 +141,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -150,40 +150,40 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), 'validation' => 'required', ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'select', 'name' => 'status', - 'label' => __('Status'), - 'options' => Helper::kvToJsOptions([ - Register::STATUS_DISABLED => __('Disabled'), - Register::STATUS_CLOSED => __('Closed'), - ]), - 'description' => __('Define what is the status of the register.'), + 'label' => __( 'Status' ), + 'options' => Helper::kvToJsOptions( [ + Register::STATUS_DISABLED => __( 'Disabled' ), + Register::STATUS_CLOSED => __( 'Closed' ), + ] ), + 'description' => __( 'Define what is the status of the register.' ), 'value' => $entry->status ?? '', 'validation' => 'required', ], [ 'type' => 'textarea', 'name' => 'description', - 'label' => __('Description'), + 'label' => __( 'Description' ), 'value' => $entry->description ?? '', - 'description' => __('Provide mode details about this cash register.'), + 'description' => __( 'Provide mode details about this cash register.' ), ], ], ], @@ -195,9 +195,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -206,9 +206,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, Register $entry) + public function filterPutInputs( $inputs, Register $entry ) { return $inputs; } @@ -217,12 +217,12 @@ public function filterPutInputs($inputs, Register $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -234,9 +234,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, Register $entry) + public function afterPost( $request, Register $entry ) { return $request; } @@ -245,11 +245,11 @@ public function afterPost($request, Register $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -258,14 +258,14 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -276,11 +276,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -288,11 +288,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.registers') { + if ( $namespace == 'ns.registers' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -302,14 +302,14 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } - if ($model->status === Register::STATUS_OPENED) { - throw new NotAllowedException(__('Unable to delete a register that is currently in use')); + if ( $model->status === Register::STATUS_OPENED ) { + throw new NotAllowedException( __( 'Unable to delete a register that is currently in use' ) ); } } } @@ -321,32 +321,32 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'status' => [ - 'label' => __('Status'), + 'label' => __( 'Status' ), '$direction' => '', '$sort' => false, ], 'cashier_username' => [ - 'label' => __('Used By'), + 'label' => __( 'Used By' ), '$direction' => '', '$sort' => false, ], 'balance' => [ - 'label' => __('Balance'), + 'label' => __( 'Balance' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -356,35 +356,35 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->cashier_username = $entry->cashier_username ?: __('N/A'); - $entry->balance = (string) ns()->currency->define($entry->balance); + $entry->cashier_username = $entry->cashier_username ?: __( 'N/A' ); + $entry->balance = (string) ns()->currency->define( $entry->balance ); // you can make changes here - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', - 'url' => ns()->url('/dashboard/' . 'cash-registers' . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . 'cash-registers' . '/edit/' . $entry->id ), + ] ); - $entry->addAction('register-history', [ - 'label' => __('Register History'), + $entry->addAction( 'register-history', [ + 'label' => __( 'Register History' ), 'namespace' => 'edit', 'type' => 'GOTO', - 'url' => ns()->url('/dashboard/' . 'cash-registers' . '/history/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . 'cash-registers' . '/history/' . $entry->id ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.registers/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.registers/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } @@ -393,20 +393,20 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -416,9 +416,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof Register) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof Register ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -429,47 +429,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'cash-registers'), - 'create' => ns()->url('dashboard/' . 'cash-registers/create'), - 'edit' => ns()->url('dashboard/' . 'cash-registers/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.registers'), - 'put' => ns()->url('api/crud/' . 'ns.registers/{id}' . ''), + 'list' => ns()->url( 'dashboard/' . 'cash-registers' ), + 'create' => ns()->url( 'dashboard/' . 'cash-registers/create' ), + 'edit' => ns()->url( 'dashboard/' . 'cash-registers/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.registers' ), + 'put' => ns()->url( 'api/crud/' . 'ns.registers/{id}' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/RegisterHistoryCrud.php b/app/Crud/RegisterHistoryCrud.php index ed6b63b68..caca04221 100644 --- a/app/Crud/RegisterHistoryCrud.php +++ b/app/Crud/RegisterHistoryCrud.php @@ -87,14 +87,14 @@ class RegisterHistoryCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -117,46 +117,46 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); - $this->registerService = app()->make(CashRegistersService::class); + $this->registerService = app()->make( CashRegistersService::class ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Register History List'), - 'list_description' => __('Display all register histories.'), - 'no_entry' => __('No register histories has been registered'), - 'create_new' => __('Add a new register history'), - 'create_title' => __('Create a new register history'), - 'create_description' => __('Register a new register history and save it.'), - 'edit_title' => __('Edit register history'), - 'edit_description' => __('Modify Registerhistory.'), - 'back_to_list' => __('Return to Register History'), + 'list_title' => __( 'Register History List' ), + 'list_description' => __( 'Display all register histories.' ), + 'no_entry' => __( 'No register histories has been registered' ), + 'create_new' => __( 'Add a new register history' ), + 'create_title' => __( 'Create a new register history' ), + 'create_description' => __( 'Register a new register history and save it.' ), + 'edit_title' => __( 'Edit register history' ), + 'edit_description' => __( 'Modify Registerhistory.' ), + 'back_to_list' => __( 'Return to Register History' ), ]; } - public function hook($query): void + public function hook( $query ): void { - if (! empty(request()->query('register_id'))) { - $query->where('register_id', request()->query('register_id')); + if ( ! empty( request()->query( 'register_id' ) ) ) { + $query->where( 'register_id', request()->query( 'register_id' ) ); } - $query->orderBy('id', 'desc'); + $query->orderBy( 'id', 'desc' ); } /** * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -165,65 +165,65 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), // 'name' => 'name', // 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'id', - 'label' => __('Id'), + 'label' => __( 'Id' ), 'value' => $entry->id ?? '', ], [ 'type' => 'text', 'name' => 'register_id', - 'label' => __('Register Id'), + 'label' => __( 'Register Id' ), 'value' => $entry->register_id ?? '', ], [ 'type' => 'text', 'name' => 'action', - 'label' => __('Action'), + 'label' => __( 'Action' ), 'value' => $entry->action ?? '', ], [ 'type' => 'text', 'name' => 'author', - 'label' => __('Author'), + 'label' => __( 'Author' ), 'value' => $entry->author ?? '', ], [ 'type' => 'text', 'name' => 'value', - 'label' => __('Value'), + 'label' => __( 'Value' ), 'value' => $entry->value ?? '', ], [ 'type' => 'text', 'name' => 'uuid', - 'label' => __('Uuid'), + 'label' => __( 'Uuid' ), 'value' => $entry->uuid ?? '', ], [ 'type' => 'text', 'name' => 'created_at', - 'label' => __('Created_at'), + 'label' => __( 'Created_at' ), 'value' => $entry->created_at ?? '', ], [ 'type' => 'text', 'name' => 'updated_at', - 'label' => __('Updated_at'), + 'label' => __( 'Updated_at' ), 'value' => $entry->updated_at ?? '', ], [ 'type' => 'text', 'name' => 'description', - 'label' => __('Description'), + 'label' => __( 'Description' ), 'value' => $entry->description ?? '', ], ], ], @@ -235,9 +235,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -246,9 +246,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, RegisterHistory $entry) + public function filterPutInputs( $inputs, RegisterHistory $entry ) { return $inputs; } @@ -257,12 +257,12 @@ public function filterPutInputs($inputs, RegisterHistory $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -274,9 +274,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, RegisterHistory $entry) + public function afterPost( $request, RegisterHistory $entry ) { return $request; } @@ -285,11 +285,11 @@ public function afterPost($request, RegisterHistory $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -298,14 +298,14 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -316,11 +316,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -328,11 +328,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.registers-hitory') { + if ( $namespace == 'ns.registers-hitory' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -342,8 +342,8 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -362,37 +362,37 @@ public function getColumns(): array // '$sort' => false // ], 'action' => [ - 'label' => __('Action'), + 'label' => __( 'Action' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'balance_before' => [ - 'label' => __('Initial Balance'), + 'label' => __( 'Initial Balance' ), '$direction' => '', '$sort' => false, ], 'value' => [ - 'label' => __('Value'), + 'label' => __( 'Value' ), '$direction' => '', '$sort' => false, ], 'balance_after' => [ - 'label' => __('New Balance'), + 'label' => __( 'New Balance' ), '$direction' => '', '$sort' => false, ], 'transaction_type' => [ - 'label' => __('Transaction Type'), + 'label' => __( 'Transaction Type' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Done At'), + 'label' => __( 'Done At' ), '$direction' => '', '$sort' => false, ], @@ -402,9 +402,9 @@ public function getColumns(): array /** * Define actions */ - public function setActions($entry, $namespace) + public function setActions( $entry, $namespace ) { - switch ($entry->action) { + switch ( $entry->action ) { case RegisterHistory::ACTION_SALE: $entry->{ '$cssClass' } = 'success border'; break; @@ -425,30 +425,30 @@ public function setActions($entry, $namespace) break; } - if ($entry->action === RegisterHistory::ACTION_CLOSING && (float) $entry->balance_after != 0) { + if ( $entry->action === RegisterHistory::ACTION_CLOSING && (float) $entry->balance_after != 0 ) { $entry->{ '$cssClass' } = 'error border'; } - $entry->action = $this->registerService->getActionLabel($entry->action); - $entry->created_at = ns()->date->getFormatted($entry->created_at); - $entry->value = (string) ns()->currency->define($entry->value); - $entry->balance_before = (string) ns()->currency->define($entry->balance_before); - $entry->balance_after = (string) ns()->currency->define($entry->balance_after); - $entry->transaction_type = $this->getHumanTransactionType($entry->transaction_type); + $entry->action = $this->registerService->getActionLabel( $entry->action ); + $entry->created_at = ns()->date->getFormatted( $entry->created_at ); + $entry->value = (string) ns()->currency->define( $entry->value ); + $entry->balance_before = (string) ns()->currency->define( $entry->balance_before ); + $entry->balance_after = (string) ns()->currency->define( $entry->balance_after ); + $entry->transaction_type = $this->getHumanTransactionType( $entry->transaction_type ); return $entry; } - public function getHumanTransactionType($type) + public function getHumanTransactionType( $type ) { - switch ($type) { - case 'unchanged': return __('Unchanged'); + switch ( $type ) { + case 'unchanged': return __( 'Unchanged' ); break; - case 'negative': return __('Shortage'); + case 'negative': return __( 'Shortage' ); break; - case 'positive': return __('Overage'); + case 'positive': return __( 'Overage' ); break; - default: return __('N/A'); + default: return __( 'N/A' ); break; } } @@ -457,20 +457,20 @@ public function getHumanTransactionType($type) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -480,9 +480,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof RegisterHistory) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof RegisterHistory ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -493,18 +493,18 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'registers-history'), + 'list' => ns()->url( 'dashboard/' . 'registers-history' ), 'create' => false, 'edit' => false, 'post' => false, @@ -515,25 +515,25 @@ public function getLinks(): array /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/RewardSystemCrud.php b/app/Crud/RewardSystemCrud.php index 77bd9cbbd..89cc10a30 100644 --- a/app/Crud/RewardSystemCrud.php +++ b/app/Crud/RewardSystemCrud.php @@ -54,14 +54,14 @@ class RewardSystemCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -86,27 +86,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Reward Systems List'), - 'list_description' => __('Display all reward systems.'), - 'no_entry' => __('No reward systems has been registered'), - 'create_new' => __('Add a new reward system'), - 'create_title' => __('Create a new reward system'), - 'create_description' => __('Register a new reward system and save it.'), - 'edit_title' => __('Edit reward system'), - 'edit_description' => __('Modify Reward System.'), - 'back_to_list' => __('Return to Reward Systems'), + 'list_title' => __( 'Reward Systems List' ), + 'list_description' => __( 'Display all reward systems.' ), + 'no_entry' => __( 'No reward systems has been registered' ), + 'create_new' => __( 'Add a new reward system' ), + 'create_title' => __( 'Create a new reward system' ), + 'create_description' => __( 'Register a new reward system and save it.' ), + 'edit_title' => __( 'Edit reward system' ), + 'edit_description' => __( 'Modify Reward System.' ), + 'back_to_list' => __( 'Return to Reward Systems' ), ]; } @@ -114,7 +114,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -123,78 +123,78 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { $ruleForm = [ [ 'name' => 'id', 'type' => 'hidden', ], [ - 'label' => __('From'), + 'label' => __( 'From' ), 'name' => 'from', - 'description' => __('The interval start here.'), + 'description' => __( 'The interval start here.' ), 'type' => 'number', ], [ - 'label' => __('To'), + 'label' => __( 'To' ), 'name' => 'to', - 'description' => __('The interval ends here.'), + 'description' => __( 'The interval ends here.' ), 'type' => 'number', ], [ - 'label' => __('Points'), + 'label' => __( 'Points' ), 'name' => 'reward', - 'description' => __('Points earned.'), + 'description' => __( 'Points earned.' ), 'type' => 'number', ], ]; return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', 'validation' => 'required', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], /** * this is made to restore rules * by populating the form used for the rules */ - 'rules' => $entry ? (collect($entry->rules)->map(function ($rule) use ($ruleForm) { - return collect($ruleForm)->map(function ($field) use ($rule) { + 'rules' => $entry ? ( collect( $entry->rules )->map( function ( $rule ) use ( $ruleForm ) { + return collect( $ruleForm )->map( function ( $field ) use ( $rule ) { $field[ 'value' ] = $rule[ $field[ 'name' ] ] ?? ''; return $field; - }); - }) ?? []) : [], + } ); + } ) ?? [] ) : [], 'ruleForm' => $ruleForm, 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'select', 'name' => 'coupon_id', 'value' => $entry->coupon_id ?? '', - 'label' => __('Coupon'), - 'options' => Helper::toJsOptions(Coupon::get(), [ 'id', 'name' ]), + 'label' => __( 'Coupon' ), + 'options' => Helper::toJsOptions( Coupon::get(), [ 'id', 'name' ] ), 'validation' => 'required', - 'description' => __('Decide which coupon you would apply to the system.'), + 'description' => __( 'Decide which coupon you would apply to the system.' ), ], [ 'type' => 'number', 'name' => 'target', 'validation' => 'required', 'value' => $entry->target ?? '', - 'label' => __('Target'), - 'description' => __('This is the objective that the user should reach to trigger the reward.'), + 'label' => __( 'Target' ), + 'description' => __( 'This is the objective that the user should reach to trigger the reward.' ), ], [ 'type' => 'textarea', 'name' => 'description', 'value' => $entry->description ?? '', - 'label' => __('Description'), - 'description' => __('A short description about this system'), + 'label' => __( 'Description' ), + 'description' => __( 'A short description about this system' ), ], ], ], @@ -206,9 +206,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -217,9 +217,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, RewardSystem $entry) + public function filterPutInputs( $inputs, RewardSystem $entry ) { return $inputs; } @@ -228,11 +228,11 @@ public function filterPutInputs($inputs, RewardSystem $entry) * After Crud POST * * @param object entry - * @return void + * @return void */ - public function afterPost($request, RewardSystem $entry) + public function afterPost( $request, RewardSystem $entry ) { - foreach ($request[ 'rules' ] as $rule) { + foreach ( $request[ 'rules' ] as $rule ) { $newRule = new RewardSystemRule; $newRule->from = $rule[ 'from' ]; $newRule->to = $rule[ 'to' ]; @@ -247,11 +247,11 @@ public function afterPost($request, RewardSystem $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -261,9 +261,9 @@ public function get($param) * After Crud PUT * * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { $rules = $request[ 'rules' ]; @@ -272,26 +272,26 @@ public function afterPut($request, $entry) * with their original ID. Those not posted * are deleted. */ - $ids = collect($rules)->filter(function ($rule) { - return isset($rule[ 'id' ]); - })->map(function ($rule) { + $ids = collect( $rules )->filter( function ( $rule ) { + return isset( $rule[ 'id' ] ); + } )->map( function ( $rule ) { return $rule[ 'id' ]; - }); + } ); /** * Delete all rules that aren't submitted */ - RewardSystemRule::attachedTo($entry->id) - ->whereNotIn('id', $ids) + RewardSystemRule::attachedTo( $entry->id ) + ->whereNotIn( 'id', $ids ) ->delete(); /** * Update old rules * create new rules */ - foreach ($rules as $rule) { - if (isset($rule[ 'id' ])) { - $existingRule = RewardSystemRule::findOrFail($rule[ 'id' ]); + foreach ( $rules as $rule ) { + if ( isset( $rule[ 'id' ] ) ) { + $existingRule = RewardSystemRule::findOrFail( $rule[ 'id' ] ); $existingRule->from = $rule[ 'from' ]; $existingRule->to = $rule[ 'to' ]; $existingRule->reward = $rule[ 'reward' ]; @@ -312,33 +312,33 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id) + public function beforeDelete( $namespace, $id ) { - if ($namespace == 'ns.rewards_system') { - $this->allowedTo('delete'); + if ( $namespace == 'ns.rewards_system' ) { + $this->allowedTo( 'delete' ); } } /** * Before Delete * - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - $this->allowedTo('create'); + $this->allowedTo( 'create' ); } /** * Before Delete * - * @return void + * @return void */ - public function beforePut($request, $rewardSystem) + public function beforePut( $request, $rewardSystem ) { - $this->allowedTo('update'); + $this->allowedTo( 'update' ); } /** @@ -348,27 +348,27 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'target' => [ - 'label' => __('Target'), + 'label' => __( 'Target' ), '$direction' => '', '$sort' => false, ], 'coupon_name' => [ - 'label' => __('Coupon'), + 'label' => __( 'Coupon' ), '$direction' => '', '$sort' => false, ], 'nexopos_users_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -378,30 +378,30 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->name = $entry->name . ' (' . RewardSystem::find($entry->id)->rules()->count() . ')'; + $entry->name = $entry->name . ' (' . RewardSystem::find( $entry->id )->rules()->count() . ')'; // you can make changes here - $entry->addAction('edit.rewards', [ - 'label' => __('Edit'), + $entry->addAction( 'edit.rewards', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit.licence', 'type' => 'GOTO', 'index' => 'id', - 'url' => ns()->url('/dashboard/customers/rewards-system/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/customers/rewards-system/edit/' . $entry->id ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', 'index' => 'id', - 'url' => ns()->url('/api/crud/ns.rewards-system/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.rewards-system/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this reward system ?'), - 'title' => __('Delete a licence'), + 'message' => __( 'Would you like to delete this reward system ?' ), + 'title' => __( 'Delete a licence' ), ], - ]); + ] ); return $entry; } @@ -410,32 +410,32 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - $user = app()->make('App\Services\UsersService'); + $user = app()->make( 'App\Services\UsersService' ); - if (! $user->is([ 'admin', 'supervisor' ])) { - return response()->json([ + if ( ! $user->is( [ 'admin', 'supervisor' ] ) ) { + return response()->json( [ 'status' => 'failed', - 'message' => __('You\'re not allowed to do this operation'), - ], 403); + 'message' => __( 'You\'re not allowed to do this operation' ), + ], 403 ); } - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { $status = [ 'success' => 0, 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof RewardSystem) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof RewardSystem ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -446,48 +446,48 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('/dashboard/rewards-system'), - 'create' => ns()->url('/dashboard/rewards-system/create'), - 'edit' => ns()->url('/dashboard/rewards-system/edit/{id}'), - 'post' => ns()->url('/api/crud/' . $this->getMainRoute()), - 'put' => ns()->url('/api/crud/' . $this->getMainRoute() . '/{id}'), + 'list' => ns()->url( '/dashboard/rewards-system' ), + 'create' => ns()->url( '/dashboard/rewards-system/create' ), + 'edit' => ns()->url( '/dashboard/rewards-system/edit/{id}' ), + 'post' => ns()->url( '/api/crud/' . $this->getMainRoute() ), + 'put' => ns()->url( '/api/crud/' . $this->getMainRoute() . '/{id}' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Rewards'), - 'confirm' => __('Would you like to delete selected rewards?'), + 'label' => __( 'Delete Selected Rewards' ), + 'confirm' => __( 'Would you like to delete selected rewards?' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/RolesCrud.php b/app/Crud/RolesCrud.php index 839df3fa8..e7dba1028 100644 --- a/app/Crud/RolesCrud.php +++ b/app/Crud/RolesCrud.php @@ -57,14 +57,14 @@ class RolesCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -87,34 +87,34 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); - $this->dashboardOptions = Hook::filter('ns-dashboard-identifiers', [ - 'none' => __('No Dashboard'), - 'store' => __('Store Dashboard'), - 'cashier' => __('Cashier Dashboard'), - 'default' => __('Default Dashboard'), - ]); + $this->dashboardOptions = Hook::filter( 'ns-dashboard-identifiers', [ + 'none' => __( 'No Dashboard' ), + 'store' => __( 'Store Dashboard' ), + 'cashier' => __( 'Cashier Dashboard' ), + 'default' => __( 'Default Dashboard' ), + ] ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Roles List'), - 'list_description' => __('Display all roles.'), - 'no_entry' => __('No role has been registered.'), - 'create_new' => __('Add a new role'), - 'create_title' => __('Create a new role'), - 'create_description' => __('Create a new role and save it.'), - 'edit_title' => __('Edit role'), - 'edit_description' => __('Modify Role.'), - 'back_to_list' => __('Return to Roles'), + 'list_title' => __( 'Roles List' ), + 'list_description' => __( 'Display all roles.' ), + 'no_entry' => __( 'No role has been registered.' ), + 'create_new' => __( 'Add a new role' ), + 'create_title' => __( 'Create a new role' ), + 'create_description' => __( 'Create a new role and save it.' ), + 'edit_title' => __( 'Edit role' ), + 'edit_description' => __( 'Modify Role.' ), + 'back_to_list' => __( 'Return to Roles' ), ]; } @@ -122,7 +122,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -131,36 +131,36 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the role.'), + 'description' => __( 'Provide a name to the role.' ), 'validation' => 'required', ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'namespace', - 'label' => __('Namespace'), + 'label' => __( 'Namespace' ), 'validation' => $entry === null ? 'unique:nexopos_roles,namespace' : [ - Rule::unique('nexopos_roles', 'namespace')->ignore($entry->id), + Rule::unique( 'nexopos_roles', 'namespace' )->ignore( $entry->id ), ], - 'description' => __('Should be a unique value with no spaces or special character'), + 'description' => __( 'Should be a unique value with no spaces or special character' ), 'value' => $entry->namespace ?? '', ], [ 'type' => 'textarea', 'name' => 'description', - 'label' => __('Description'), - 'description' => __('Provide more details about what this role is about.'), + 'label' => __( 'Description' ), + 'description' => __( 'Provide more details about what this role is about.' ), 'value' => $entry->description ?? '', ], ], @@ -173,27 +173,27 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { /** * the namespace can be automated */ - if (empty($inputs[ 'namespace' ])) { - $inputs[ 'namespace' ] = Str::slug($inputs[ 'name' ]); + if ( empty( $inputs[ 'namespace' ] ) ) { + $inputs[ 'namespace' ] = Str::slug( $inputs[ 'name' ] ); } /** * the default role namespace can't be changed. */ - if (! in_array($inputs[ 'namespace' ], [ + if ( ! in_array( $inputs[ 'namespace' ], [ Role::ADMIN, Role::STOREADMIN, Role::STORECASHIER, Role::USER, - ])) { - $inputs[ 'namespace' ] = Str::replace(' ', '-', $inputs[ 'namespace' ]); + ] ) ) { + $inputs[ 'namespace' ] = Str::replace( ' ', '-', $inputs[ 'namespace' ] ); } $inputs[ 'locked' ] = false; @@ -205,23 +205,23 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, Role $entry) + public function filterPutInputs( $inputs, Role $entry ) { /** * if the role is a locked role * we should forbid editing the namespace. */ - if ($entry->locked) { - unset($inputs[ 'namespace' ]); + if ( $entry->locked ) { + unset( $inputs[ 'namespace' ] ); } /** * the namespace can be automated */ - if (empty($inputs[ 'namespace' ]) && ! $entry->locked) { - $inputs[ 'namespace' ] = Str::slug($inputs[ 'name' ]); + if ( empty( $inputs[ 'namespace' ] ) && ! $entry->locked ) { + $inputs[ 'namespace' ] = Str::slug( $inputs[ 'name' ] ); } return $inputs; @@ -231,11 +231,11 @@ public function filterPutInputs($inputs, Role $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - $this->allowedTo('create'); + $this->allowedTo( 'create' ); return $request; } @@ -244,9 +244,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, Role $entry) + public function afterPost( $request, Role $entry ) { return $request; } @@ -255,11 +255,11 @@ public function afterPost($request, Role $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -268,13 +268,13 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - $this->allowedTo('update'); + $this->allowedTo( 'update' ); return $request; } @@ -282,11 +282,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -294,15 +294,15 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.roles') { - $this->allowedTo('delete'); + if ( $namespace == 'ns.roles' ) { + $this->allowedTo( 'delete' ); - if ($model->locked) { - throw new Exception(__('Unable to delete a system role.')); + if ( $model->locked ) { + throw new Exception( __( 'Unable to delete a system role.' ) ); } } } @@ -314,17 +314,17 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'namespace' => [ - 'label' => __('Namespace'), + 'label' => __( 'Namespace' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -334,39 +334,39 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { $entry->locked = (bool) $entry->locked; // you can make changes here - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', 'index' => 'id', - 'url' => ns()->url('/dashboard/' . 'users/roles' . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . 'users/roles' . '/edit/' . $entry->id ), + ] ); - $entry->addAction('clone', [ - 'label' => __('Clone'), + $entry->addAction( 'clone', [ + 'label' => __( 'Clone' ), 'namespace' => 'clone', 'type' => 'GET', 'confirm' => [ - 'message' => __('Would you like to clone this role ?'), + 'message' => __( 'Would you like to clone this role ?' ), ], 'index' => 'id', - 'url' => ns()->url('/api/' . 'users/roles/' . $entry->id . '/clone'), - ]); + 'url' => ns()->url( '/api/' . 'users/roles/' . $entry->id . '/clone' ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.roles/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.roles/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } @@ -375,26 +375,26 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - $user = app()->make(UsersService::class); - if (! $user->is([ 'admin', 'supervisor' ])) { - return response()->json([ + $user = app()->make( UsersService::class ); + if ( ! $user->is( [ 'admin', 'supervisor' ] ) ) { + return response()->json( [ 'status' => 'failed', - 'message' => __('You\'re not allowed to do this operation'), - ], 403); + 'message' => __( 'You\'re not allowed to do this operation' ), + ], 403 ); } - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { ns()->restrict( [ 'delete.roles' ], - __('You do not have enough permissions to perform this action.') + __( 'You do not have enough permissions to perform this action.' ) ); $status = [ @@ -402,14 +402,14 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); /** * make sure system roles can't be deleted */ - if ($entity instanceof Role) { - if ($entity->locked) { + if ( $entity instanceof Role ) { + if ( $entity->locked ) { $status[ 'failed' ]++; } else { $entity->delete(); @@ -423,47 +423,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'users/roles'), - 'create' => ns()->url('dashboard/' . 'users/roles/create'), - 'edit' => ns()->url('dashboard/' . 'users/roles/edit/{id}'), - 'post' => ns()->url('api/crud/' . 'ns.roles'), - 'put' => ns()->url('api/crud/' . 'ns.roles/{id}' . ''), + 'list' => ns()->url( 'dashboard/' . 'users/roles' ), + 'create' => ns()->url( 'dashboard/' . 'users/roles/create' ), + 'edit' => ns()->url( 'dashboard/' . 'users/roles/edit/{id}' ), + 'post' => ns()->url( 'api/crud/' . 'ns.roles' ), + 'put' => ns()->url( 'api/crud/' . 'ns.roles/{id}' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/TaxCrud.php b/app/Crud/TaxCrud.php index 8f842a2c8..4da59e59c 100644 --- a/app/Crud/TaxCrud.php +++ b/app/Crud/TaxCrud.php @@ -84,14 +84,14 @@ class TaxCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -107,27 +107,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Taxes List'), - 'list_description' => __('Display all taxes.'), - 'no_entry' => __('No taxes has been registered'), - 'create_new' => __('Add a new tax'), - 'create_title' => __('Create a new tax'), - 'create_description' => __('Register a new tax and save it.'), - 'edit_title' => __('Edit tax'), - 'edit_description' => __('Modify Tax.'), - 'back_to_list' => __('Return to Taxes'), + 'list_title' => __( 'Taxes List' ), + 'list_description' => __( 'Display all taxes.' ), + 'no_entry' => __( 'No taxes has been registered' ), + 'create_new' => __( 'Add a new tax' ), + 'create_title' => __( 'Create a new tax' ), + 'create_description' => __( 'Register a new tax and save it.' ), + 'edit_title' => __( 'Edit tax' ), + 'edit_description' => __( 'Modify Tax.' ), + 'back_to_list' => __( 'Return to Taxes' ), ]; } @@ -135,7 +135,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -144,42 +144,42 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the tax.'), + 'description' => __( 'Provide a name to the tax.' ), 'validation' => 'required', ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'select', - 'options' => Helper::toJsOptions(TaxGroup::get(), [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( TaxGroup::get(), [ 'id', 'name' ] ), 'name' => 'tax_group_id', - 'label' => __('Parent'), - 'description' => __('Assign the tax to a tax group.'), + 'label' => __( 'Parent' ), + 'description' => __( 'Assign the tax to a tax group.' ), 'value' => $entry->tax_group_id ?? '', 'validation' => 'required', ], [ 'type' => 'text', 'name' => 'rate', - 'label' => __('Rate'), - 'description' => __('Define the rate value for the tax.'), + 'label' => __( 'Rate' ), + 'description' => __( 'Define the rate value for the tax.' ), 'value' => $entry->rate ?? '', 'validation' => 'required', ], [ 'type' => 'textarea', 'name' => 'description', - 'description' => __('Provide a description to the tax.'), - 'label' => __('Description'), + 'description' => __( 'Provide a description to the tax.' ), + 'label' => __( 'Description' ), 'value' => $entry->description ?? '', ], ], @@ -192,9 +192,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -203,9 +203,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, Tax $entry) + public function filterPutInputs( $inputs, Tax $entry ) { return $inputs; } @@ -214,12 +214,12 @@ public function filterPutInputs($inputs, Tax $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -231,9 +231,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, Tax $entry) + public function afterPost( $request, Tax $entry ) { return $request; } @@ -242,11 +242,11 @@ public function afterPost($request, Tax $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -255,14 +255,14 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -273,11 +273,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -285,11 +285,11 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.taxes') { + if ( $namespace == 'ns.taxes' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -299,8 +299,8 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -314,27 +314,27 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'parent_name' => [ - 'label' => __('Parent'), + 'label' => __( 'Parent' ), '$direction' => '', '$sort' => false, ], 'rate' => [ - 'label' => __('Rate'), + 'label' => __( 'Rate' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -344,27 +344,27 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->rate = sprintf('%s%%', $entry->rate); + $entry->rate = sprintf( '%s%%', $entry->rate ); // you can make changes here - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', - 'url' => ns()->url('/dashboard/' . 'taxes' . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . 'taxes' . '/edit/' . $entry->id ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.taxes/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.taxes/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } @@ -373,20 +373,20 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -396,9 +396,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof Tax) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof Tax ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -409,47 +409,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'taxes'), - 'create' => ns()->url('dashboard/' . 'taxes/create'), - 'edit' => ns()->url('dashboard/' . 'taxes/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.taxes'), - 'put' => ns()->url('api/crud/' . 'ns.taxes/{id}' . ''), + 'list' => ns()->url( 'dashboard/' . 'taxes' ), + 'create' => ns()->url( 'dashboard/' . 'taxes/create' ), + 'edit' => ns()->url( 'dashboard/' . 'taxes/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.taxes' ), + 'put' => ns()->url( 'api/crud/' . 'ns.taxes/{id}' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/TaxesGroupCrud.php b/app/Crud/TaxesGroupCrud.php index 5ba70d5bc..d028e5ebe 100644 --- a/app/Crud/TaxesGroupCrud.php +++ b/app/Crud/TaxesGroupCrud.php @@ -43,14 +43,14 @@ class TaxesGroupCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -66,7 +66,7 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } protected $permissions = [ @@ -80,20 +80,20 @@ public function __construct() * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Taxes Groups List'), - 'list_description' => __('Display all taxes groups.'), - 'no_entry' => __('No taxes groups has been registered'), - 'create_new' => __('Add a new tax group'), - 'create_title' => __('Create a new tax group'), - 'create_description' => __('Register a new tax group and save it.'), - 'edit_title' => __('Edit tax group'), - 'edit_description' => __('Modify Tax Group.'), - 'back_to_list' => __('Return to Taxes Groups'), + 'list_title' => __( 'Taxes Groups List' ), + 'list_description' => __( 'Display all taxes groups.' ), + 'no_entry' => __( 'No taxes groups has been registered' ), + 'create_new' => __( 'Add a new tax group' ), + 'create_title' => __( 'Create a new tax group' ), + 'create_description' => __( 'Register a new tax group and save it.' ), + 'edit_title' => __( 'Edit tax group' ), + 'edit_description' => __( 'Modify Tax Group.' ), + 'back_to_list' => __( 'Return to Taxes Groups' ), ]; } @@ -101,7 +101,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -110,28 +110,28 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', 'validation' => 'required', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'name' => 'description', 'type' => 'textarea', 'value' => $entry->description ?? '', - 'label' => __('Description'), - 'description' => __('Provide a short description to the tax group.'), + 'label' => __( 'Description' ), + 'description' => __( 'Provide a short description to the tax group.' ), ], ], ], @@ -143,9 +143,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -154,9 +154,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, TaxGroup $entry) + public function filterPutInputs( $inputs, TaxGroup $entry ) { return $inputs; } @@ -165,11 +165,11 @@ public function filterPutInputs($inputs, TaxGroup $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - $this->allowedTo('create'); + $this->allowedTo( 'create' ); return $request; } @@ -178,9 +178,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, TaxGroup $entry) + public function afterPost( $request, TaxGroup $entry ) { return $request; } @@ -189,11 +189,11 @@ public function afterPost($request, TaxGroup $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -202,13 +202,13 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - $this->allowedTo('update'); + $this->allowedTo( 'update' ); return $request; } @@ -216,11 +216,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -228,12 +228,12 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.taxes-groups') { - $this->allowedTo('delete'); + if ( $namespace == 'ns.taxes-groups' ) { + $this->allowedTo( 'delete' ); } } @@ -244,17 +244,17 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -264,26 +264,26 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { // you can make changes here - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', 'index' => 'id', - 'url' => ns()->url('/dashboard/' . 'taxes/groups' . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . 'taxes/groups' . '/edit/' . $entry->id ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.taxes-groups/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.taxes-groups/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } @@ -292,31 +292,31 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - $user = app()->make(UsersService::class); - if (! $user->is([ 'admin', 'supervisor' ])) { - return response()->json([ + $user = app()->make( UsersService::class ); + if ( ! $user->is( [ 'admin', 'supervisor' ] ) ) { + return response()->json( [ 'status' => 'failed', - 'message' => __('You\'re not allowed to do this operation'), - ], 403); + 'message' => __( 'You\'re not allowed to do this operation' ), + ], 403 ); } - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { $status = [ 'success' => 0, 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof TaxGroup) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof TaxGroup ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -327,47 +327,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'taxes/groups'), - 'create' => ns()->url('dashboard/' . 'taxes/groups/create'), - 'edit' => ns()->url('dashboard/' . 'taxes/groups/edit/{id}'), - 'post' => ns()->url('api/crud/' . 'ns.taxes-groups'), - 'put' => ns()->url('api/crud/' . 'ns.taxes-groups/' . '{id}'), + 'list' => ns()->url( 'dashboard/' . 'taxes/groups' ), + 'create' => ns()->url( 'dashboard/' . 'taxes/groups/create' ), + 'edit' => ns()->url( 'dashboard/' . 'taxes/groups/edit/{id}' ), + 'post' => ns()->url( 'api/crud/' . 'ns.taxes-groups' ), + 'put' => ns()->url( 'api/crud/' . 'ns.taxes-groups/' . '{id}' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/TransactionAccountCrud.php b/app/Crud/TransactionAccountCrud.php index f37df23de..7b4895124 100644 --- a/app/Crud/TransactionAccountCrud.php +++ b/app/Crud/TransactionAccountCrud.php @@ -43,14 +43,14 @@ class TransactionAccountCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -73,27 +73,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Accounts List'), - 'list_description' => __('Display All Accounts.'), - 'no_entry' => __('No Account has been registered'), - 'create_new' => __('Add a new Account'), - 'create_title' => __('Create a new Account'), - 'create_description' => __('Register a new Account and save it.'), - 'edit_title' => __('Edit Account'), - 'edit_description' => __('Modify An Account.'), - 'back_to_list' => __('Return to Accounts'), + 'list_title' => __( 'Accounts List' ), + 'list_description' => __( 'Display All Accounts.' ), + 'no_entry' => __( 'No Account has been registered' ), + 'create_new' => __( 'Add a new Account' ), + 'create_title' => __( 'Create a new Account' ), + 'create_description' => __( 'Register a new Account and save it.' ), + 'edit_title' => __( 'Edit Account' ), + 'edit_description' => __( 'Modify An Account.' ), + 'back_to_list' => __( 'Return to Accounts' ), ]; } @@ -101,7 +101,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -110,44 +110,44 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), 'validation' => 'required', ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'select', 'name' => 'operation', - 'label' => __('Operation'), - 'description' => __('All entities attached to this category will either produce a "credit" or "debit" to the cash flow history.'), + 'label' => __( 'Operation' ), + 'description' => __( 'All entities attached to this category will either produce a "credit" or "debit" to the cash flow history.' ), 'validation' => 'required', - 'options' => Helper::kvToJsOptions([ - 'credit' => __('Credit'), - 'debit' => __('Debit'), - ]), + 'options' => Helper::kvToJsOptions( [ + 'credit' => __( 'Credit' ), + 'debit' => __( 'Debit' ), + ] ), 'value' => $entry->operation ?? '', ], [ 'type' => 'text', 'name' => 'account', - 'label' => __('Account'), - 'description' => __('Provide the accounting number for this category.'), + 'label' => __( 'Account' ), + 'description' => __( 'Provide the accounting number for this category.' ), 'value' => $entry->account ?? '', 'validation' => 'required', ], [ 'type' => 'textarea', 'name' => 'description', - 'label' => __('Description'), + 'label' => __( 'Description' ), 'value' => $entry->description ?? '', ], ], @@ -160,9 +160,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -171,9 +171,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, TransactionAccount $entry) + public function filterPutInputs( $inputs, TransactionAccount $entry ) { return $inputs; } @@ -182,11 +182,11 @@ public function filterPutInputs($inputs, TransactionAccount $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - $this->allowedTo('create'); + $this->allowedTo( 'create' ); return $request; } @@ -195,9 +195,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, TransactionAccount $entry) + public function afterPost( $request, TransactionAccount $entry ) { return $request; } @@ -206,11 +206,11 @@ public function afterPost($request, TransactionAccount $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -219,13 +219,13 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - $this->allowedTo('update'); + $this->allowedTo( 'update' ); return $request; } @@ -233,11 +233,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -245,12 +245,12 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.transactions-accounts') { - $this->allowedTo('delete'); + if ( $namespace == 'ns.transactions-accounts' ) { + $this->allowedTo( 'delete' ); } } @@ -261,27 +261,27 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'account' => [ - 'label' => __('Account'), + 'label' => __( 'Account' ), '$direction' => '', '$sort' => false, ], 'operation' => [ - 'label' => __('Operation'), + 'label' => __( 'Operation' ), '$direction' => '', '$sort' => false, ], 'nexopos_users_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -291,26 +291,26 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { // you can make changes here - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', 'index' => 'id', - 'url' => ns()->url('/dashboard/' . 'accounting/accounts' . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . 'accounting/accounts' . '/edit/' . $entry->id ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.transactions-accounts/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.transactions-accounts/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } @@ -319,31 +319,31 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - $user = app()->make(UsersService::class); - if (! $user->is([ 'admin', 'supervisor' ])) { - return response()->json([ + $user = app()->make( UsersService::class ); + if ( ! $user->is( [ 'admin', 'supervisor' ] ) ) { + return response()->json( [ 'status' => 'failed', - 'message' => __('You\'re not allowed to do this operation'), - ], 403); + 'message' => __( 'You\'re not allowed to do this operation' ), + ], 403 ); } - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { $status = [ 'success' => 0, 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof TransactionAccount) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof TransactionAccount ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -354,47 +354,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'accounting/accounts'), - 'create' => ns()->url('dashboard/' . 'accounting/accounts/create'), - 'edit' => ns()->url('dashboard/' . 'accounting/accounts/edit/'), - 'post' => ns()->url('api/crud/ns.transactions-accounts'), - 'put' => ns()->url('api/crud/ns.transactions-accounts/{id}'), + 'list' => ns()->url( 'dashboard/' . 'accounting/accounts' ), + 'create' => ns()->url( 'dashboard/' . 'accounting/accounts/create' ), + 'edit' => ns()->url( 'dashboard/' . 'accounting/accounts/edit/' ), + 'post' => ns()->url( 'api/crud/ns.transactions-accounts' ), + 'put' => ns()->url( 'api/crud/ns.transactions-accounts/{id}' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/TransactionCrud.php b/app/Crud/TransactionCrud.php index b7c61d09d..c9c1748c4 100644 --- a/app/Crud/TransactionCrud.php +++ b/app/Crud/TransactionCrud.php @@ -68,14 +68,14 @@ class TransactionCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -100,27 +100,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Transactions List'), - 'list_description' => __('Display all transactions.'), - 'no_entry' => __('No transactions has been registered'), - 'create_new' => __('Add a new transaction'), - 'create_title' => __('Create a new transaction'), - 'create_description' => __('Register a new transaction and save it.'), - 'edit_title' => __('Edit transaction'), - 'edit_description' => __('Modify Transaction.'), - 'back_to_list' => __('Return to Transactions'), + 'list_title' => __( 'Transactions List' ), + 'list_description' => __( 'Display all transactions.' ), + 'no_entry' => __( 'No transactions has been registered' ), + 'create_new' => __( 'Add a new transaction' ), + 'create_title' => __( 'Create a new transaction' ), + 'create_description' => __( 'Register a new transaction and save it.' ), + 'edit_title' => __( 'Edit transaction' ), + 'edit_description' => __( 'Modify Transaction.' ), + 'back_to_list' => __( 'Return to Transactions' ), ]; } @@ -128,7 +128,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -137,70 +137,70 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), 'validation' => 'required', ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ __('No'), __('Yes') ]), + 'options' => Helper::kvToJsOptions( [ __( 'No' ), __( 'Yes' ) ] ), 'name' => 'active', - 'label' => __('Active'), - 'description' => __('determine if the transaction is effective or not. Work for recurring and not recurring transactions.'), + 'label' => __( 'Active' ), + 'description' => __( 'determine if the transaction is effective or not. Work for recurring and not recurring transactions.' ), 'validation' => 'required', 'value' => $entry->active ?? '', ], [ 'type' => 'select', 'name' => 'group_id', - 'label' => __('Users Group'), + 'label' => __( 'Users Group' ), 'value' => $entry->group_id ?? '', - 'description' => __('Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.'), + 'description' => __( 'Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.' ), 'options' => [ [ - 'label' => __('None'), + 'label' => __( 'None' ), 'value' => '0', ], - ...Helper::toJsOptions(Role::get(), [ 'id', 'name' ]), + ...Helper::toJsOptions( Role::get(), [ 'id', 'name' ] ), ], ], [ 'type' => 'select', - 'options' => Helper::toJsOptions(TransactionAccount::get(), [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( TransactionAccount::get(), [ 'id', 'name' ] ), 'name' => 'account_id', - 'label' => __('Transaction Account'), - 'description' => __('Assign the transaction to an account430'), + 'label' => __( 'Transaction Account' ), + 'description' => __( 'Assign the transaction to an account430' ), 'validation' => 'required', 'value' => $entry->account_id ?? '', ], [ 'type' => 'text', 'name' => 'value', - 'description' => __('Is the value or the cost of the transaction.'), - 'label' => __('Value'), + 'description' => __( 'Is the value or the cost of the transaction.' ), + 'label' => __( 'Value' ), 'value' => $entry->value ?? '', 'validation' => 'required', ], [ 'type' => 'switch', 'name' => 'recurring', - 'description' => __('If set to Yes, the transaction will trigger on defined occurrence.'), - 'label' => __('Recurring'), + 'description' => __( 'If set to Yes, the transaction will trigger on defined occurrence.' ), + 'label' => __( 'Recurring' ), 'validation' => 'required', 'options' => [ [ - 'label' => __('Yes'), + 'label' => __( 'Yes' ), 'value' => true, ], [ - 'label' => __('No'), + 'label' => __( 'No' ), 'value' => false, ], ], @@ -209,48 +209,48 @@ public function getForm($entry = null) 'type' => 'select', 'options' => [ [ - 'label' => __('Start of Month'), + 'label' => __( 'Start of Month' ), 'value' => 'month_starts', ], [ - 'label' => __('Mid of Month'), + 'label' => __( 'Mid of Month' ), 'value' => 'month_mids', ], [ - 'label' => __('End of Month'), + 'label' => __( 'End of Month' ), 'value' => 'month_ends', ], [ - 'label' => __('X days Before Month Ends'), + 'label' => __( 'X days Before Month Ends' ), 'value' => 'x_before_month_ends', ], [ - 'label' => __('X days After Month Starts'), + 'label' => __( 'X days After Month Starts' ), 'value' => 'x_after_month_starts', ], ], 'name' => 'occurrence', - 'label' => __('Occurrence'), - 'description' => __('Define how often this transaction occurs'), + 'label' => __( 'Occurrence' ), + 'description' => __( 'Define how often this transaction occurs' ), 'value' => $entry->occurrence ?? '', ], [ 'type' => 'text', 'name' => 'occurrence_value', - 'label' => __('Occurrence Value'), - 'description' => __('Must be used in case of X days after month starts and X days before month ends.'), + 'label' => __( 'Occurrence Value' ), + 'description' => __( 'Must be used in case of X days after month starts and X days before month ends.' ), 'value' => $entry->occurrence_value ?? '', ], [ 'type' => 'datetimepicker', 'name' => 'scheduled_date', - 'label' => __('Scheduled'), - 'description' => __('Set the scheduled date.'), + 'label' => __( 'Scheduled' ), + 'description' => __( 'Set the scheduled date.' ), 'value' => $entry->scheduled_date ?? '', ], [ 'type' => 'select', 'name' => 'type', - 'label' => __('Type'), - 'description' => __('Define what is the type of the transactions.'), + 'label' => __( 'Type' ), + 'description' => __( 'Define what is the type of the transactions.' ), 'value' => $entry->type ?? '', ], [ 'type' => 'textarea', 'name' => 'description', - 'label' => __('Description'), + 'label' => __( 'Description' ), 'value' => $entry->description ?? '', ], ], @@ -263,9 +263,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -274,9 +274,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, Transaction $entry) + public function filterPutInputs( $inputs, Transaction $entry ) { return $inputs; } @@ -285,13 +285,13 @@ public function filterPutInputs($inputs, Transaction $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($inputs) + public function beforePost( $inputs ) { - $this->allowedTo('create'); + $this->allowedTo( 'create' ); - TransactionBeforeCreatedEvent::dispatch($inputs); + TransactionBeforeCreatedEvent::dispatch( $inputs ); return $inputs; } @@ -299,27 +299,27 @@ public function beforePost($inputs) /** * After saving a record */ - public function afterPost(array $inputs, Transaction $entry): array + public function afterPost( array $inputs, Transaction $entry ): array { - TransactionAfterCreatedEvent::dispatch($entry, $inputs); + TransactionAfterCreatedEvent::dispatch( $entry, $inputs ); return $inputs; } - public function hook($query): void + public function hook( $query ): void { - $query->orderBy('id', 'desc'); + $query->orderBy( 'id', 'desc' ); } /** * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -328,15 +328,15 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - $this->allowedTo('update'); + $this->allowedTo( 'update' ); - TransactionBeforeUpdateEvent::dispatch($entry, $request); + TransactionBeforeUpdateEvent::dispatch( $entry, $request ); return $request; } @@ -344,13 +344,13 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { - TransactionAfterUpdatedEvent::dispatch($entry, $request); + TransactionAfterUpdatedEvent::dispatch( $entry, $request ); return $request; } @@ -358,14 +358,14 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.transactions') { - $this->allowedTo('delete'); + if ( $namespace == 'ns.transactions' ) { + $this->allowedTo( 'delete' ); - TransactionBeforeDeleteEvent::dispatch($model); + TransactionBeforeDeleteEvent::dispatch( $model ); } } @@ -376,42 +376,42 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'type' => [ - 'label' => __('Type'), + 'label' => __( 'Type' ), '$direction' => '', '$sort' => false, ], 'transactions_accounts_name' => [ - 'label' => __('Account Name'), + 'label' => __( 'Account Name' ), '$direction' => '', '$sort' => false, ], 'value' => [ - 'label' => __('Value'), + 'label' => __( 'Value' ), '$direction' => '', '$sort' => false, ], 'recurring' => [ - 'label' => __('Recurring'), + 'label' => __( 'Recurring' ), '$direction' => '', '$sort' => false, ], 'occurrence' => [ - 'label' => __('Occurrence'), + 'label' => __( 'Occurrence' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -421,40 +421,40 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { // you can make changes here $entry->action( identifier: 'edit', - label: __('Edit'), - url: ns()->url('/dashboard/' . 'accounting/transactions' . '/edit/' . $entry->id), + label: __( 'Edit' ), + url: ns()->url( '/dashboard/' . 'accounting/transactions' . '/edit/' . $entry->id ), type: 'GOTO', ); $entry->action( identifier: 'history', - label: __('History'), - url: ns()->url('/dashboard/' . 'accounting/transactions' . '/history/' . $entry->id), + label: __( 'History' ), + url: ns()->url( '/dashboard/' . 'accounting/transactions' . '/history/' . $entry->id ), type: 'GOTO' ); $entry->action( identifier: 'trigger', - label: __('Trigger'), - url: ns()->url('/api/transactions/trigger/' . $entry->id), + label: __( 'Trigger' ), + url: ns()->url( '/api/transactions/trigger/' . $entry->id ), type: 'GET', confirm: [ - 'message' => __('Would you like to trigger this expense now?'), + 'message' => __( 'Would you like to trigger this expense now?' ), ], ); $entry->action( identifier: 'delete', - label: __('Delete'), - url: ns()->url('/api/crud/ns.transactions/' . $entry->id), + label: __( 'Delete' ), + url: ns()->url( '/api/crud/ns.transactions/' . $entry->id ), type: 'DELETE', confirm: [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], ); @@ -465,31 +465,31 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - $user = app()->make(UsersService::class); - if (! $user->is([ 'admin', 'supervisor' ])) { - return response()->json([ + $user = app()->make( UsersService::class ); + if ( ! $user->is( [ 'admin', 'supervisor' ] ) ) { + return response()->json( [ 'status' => 'failed', - 'message' => __('You\'re not allowed to do this operation'), - ], 403); + 'message' => __( 'You\'re not allowed to do this operation' ), + ], 403 ); } - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { $status = [ 'success' => 0, 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof Transaction) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof Transaction ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -500,47 +500,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'accounting/transactions'), - 'create' => ns()->url('dashboard/' . 'accounting/transactions/create'), - 'edit' => ns()->url('dashboard/' . 'accounting/transactions/edit/{id}'), - 'post' => ns()->url('api/crud/' . 'ns.transactions'), - 'put' => ns()->url('api/crud/' . 'ns.transactions/' . '{id}'), + 'list' => ns()->url( 'dashboard/' . 'accounting/transactions' ), + 'create' => ns()->url( 'dashboard/' . 'accounting/transactions/create' ), + 'edit' => ns()->url( 'dashboard/' . 'accounting/transactions/edit/{id}' ), + 'post' => ns()->url( 'api/crud/' . 'ns.transactions' ), + 'put' => ns()->url( 'api/crud/' . 'ns.transactions/' . '{id}' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/TransactionsHistoryCrud.php b/app/Crud/TransactionsHistoryCrud.php index 71b51d183..c8c36866e 100644 --- a/app/Crud/TransactionsHistoryCrud.php +++ b/app/Crud/TransactionsHistoryCrud.php @@ -136,7 +136,7 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'addActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'addActions' ], 10, 2 ); } /** @@ -148,24 +148,24 @@ public function __construct() public function getLabels() { return [ - 'list_title' => __('Transactions History List'), - 'list_description' => __('Display all transaction history.'), - 'no_entry' => __('No transaction history has been registered'), - 'create_new' => __('Add a new transaction history'), - 'create_title' => __('Create a new transaction history'), - 'create_description' => __('Register a new transaction history and save it.'), - 'edit_title' => __('Edit transaction history'), - 'edit_description' => __('Modify Transactions history.'), - 'back_to_list' => __('Return to Transactions History'), + 'list_title' => __( 'Transactions History List' ), + 'list_description' => __( 'Display all transaction history.' ), + 'no_entry' => __( 'No transaction history has been registered' ), + 'create_new' => __( 'Add a new transaction history' ), + 'create_title' => __( 'Create a new transaction history' ), + 'create_description' => __( 'Register a new transaction history and save it.' ), + 'edit_title' => __( 'Edit transaction history' ), + 'edit_description' => __( 'Modify Transactions history.' ), + 'back_to_list' => __( 'Return to Transactions History' ), ]; } - public function hook($query): void + public function hook( $query ): void { - $query->orderBy('updated_at', 'DESC'); + $query->orderBy( 'updated_at', 'DESC' ); - if (! empty(request()->query('transaction_id'))) { - $query->where('transaction_id', request()->query('transaction_id')); + if ( ! empty( request()->query( 'transaction_id' ) ) ) { + $query->where( 'transaction_id', request()->query( 'transaction_id' ) ); } } @@ -173,7 +173,7 @@ public function hook($query): void * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -184,7 +184,7 @@ public function isEnabled($feature): bool * @param object/null * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ // ... @@ -197,7 +197,7 @@ public function getForm($entry = null) * @param array of fields * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -208,7 +208,7 @@ public function filterPostInputs($inputs) * @param array of fields * @return array of fields */ - public function filterPutInputs($inputs, TransactionHistory $entry) + public function filterPutInputs( $inputs, TransactionHistory $entry ) { return $inputs; } @@ -216,13 +216,13 @@ public function filterPutInputs($inputs, TransactionHistory $entry) /** * Before saving a record * - * @param Request $request + * @param Request $request * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - if ($this->permissions[ 'create' ] !== false) { - ns()->restrict($this->permissions[ 'create' ]); + if ( $this->permissions[ 'create' ] !== false ) { + ns()->restrict( $this->permissions[ 'create' ] ); } else { throw new NotAllowedException; } @@ -233,10 +233,10 @@ public function beforePost($request) /** * After saving a record * - * @param Request $request + * @param Request $request * @return void */ - public function afterPost($request, TransactionHistory $entry) + public function afterPost( $request, TransactionHistory $entry ) { return $request; } @@ -247,9 +247,9 @@ public function afterPost($request, TransactionHistory $entry) * @param string * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -262,10 +262,10 @@ public function get($param) * @param object entry * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - if ($this->permissions[ 'update' ] !== false) { - ns()->restrict($this->permissions[ 'update' ]); + if ( $this->permissions[ 'update' ] !== false ) { + ns()->restrict( $this->permissions[ 'update' ] ); } else { throw new NotAllowedException; } @@ -280,7 +280,7 @@ public function beforePut($request, $entry) * @param object entry * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -290,9 +290,9 @@ public function afterPut($request, $entry) * * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.transactions-history') { + if ( $namespace == 'ns.transactions-history' ) { /** * Perform an action before deleting an entry * In case something wrong, this response can be returned @@ -302,8 +302,8 @@ public function beforeDelete($namespace, $id, $model) * 'message' => __( 'You\re not allowed to do that.' ) * ], 403 ); **/ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -317,32 +317,32 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'transactions_accounts_name' => [ - 'label' => __('Account Name'), + 'label' => __( 'Account Name' ), '$direction' => '', '$sort' => false, ], 'operation' => [ - 'label' => __('Operation'), + 'label' => __( 'Operation' ), '$direction' => '', '$sort' => false, ], 'value' => [ - 'label' => __('Value'), + 'label' => __( 'Value' ), '$direction' => '', '$sort' => false, ], 'users_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created_at'), + 'label' => __( 'Created_at' ), '$direction' => '', '$sort' => false, ], @@ -352,9 +352,9 @@ public function getColumns(): array /** * Define actions */ - public function addActions(CrudEntry $entry, $namespace) + public function addActions( CrudEntry $entry, $namespace ) { - $entry->value = (string) ns()->currency->define($entry->value); + $entry->value = (string) ns()->currency->define( $entry->value ); return $entry; } @@ -365,18 +365,18 @@ public function addActions(CrudEntry $entry, $namespace) * @param object Request with object * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ - if ($this->permissions[ 'delete' ] !== false) { - ns()->restrict($this->permissions[ 'delete' ]); + if ( $this->permissions[ 'delete' ] !== false ) { + ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } @@ -386,9 +386,9 @@ public function bulkAction(Request $request) 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof TransactionHistory) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof TransactionHistory ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -399,7 +399,7 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** @@ -410,11 +410,11 @@ public function bulkAction(Request $request) public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'history'), - 'create' => ns()->url('dashboard/' . 'history/create'), - 'edit' => ns()->url('dashboard/' . 'history/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.transactions-history'), - 'put' => ns()->url('api/crud/' . 'ns.transactions-history/{id}' . ''), + 'list' => ns()->url( 'dashboard/' . 'history' ), + 'create' => ns()->url( 'dashboard/' . 'history/create' ), + 'edit' => ns()->url( 'dashboard/' . 'history/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.transactions-history' ), + 'put' => ns()->url( 'api/crud/' . 'ns.transactions-history/{id}' . '' ), ]; } @@ -425,15 +425,15 @@ public function getLinks(): array **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** diff --git a/app/Crud/UnitCrud.php b/app/Crud/UnitCrud.php index 3940d2266..3d128d7ef 100644 --- a/app/Crud/UnitCrud.php +++ b/app/Crud/UnitCrud.php @@ -46,14 +46,14 @@ class UnitCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -76,27 +76,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Units List'), - 'list_description' => __('Display all units.'), - 'no_entry' => __('No units has been registered'), - 'create_new' => __('Add a new unit'), - 'create_title' => __('Create a new unit'), - 'create_description' => __('Register a new unit and save it.'), - 'edit_title' => __('Edit unit'), - 'edit_description' => __('Modify Unit.'), - 'back_to_list' => __('Return to Units'), + 'list_title' => __( 'Units List' ), + 'list_description' => __( 'Display all units.' ), + 'no_entry' => __( 'No units has been registered' ), + 'create_new' => __( 'Add a new unit' ), + 'create_title' => __( 'Create a new unit' ), + 'create_description' => __( 'Register a new unit and save it.' ), + 'edit_title' => __( 'Edit unit' ), + 'edit_description' => __( 'Modify Unit.' ), + 'back_to_list' => __( 'Return to Units' ), ]; } @@ -104,7 +104,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -113,40 +113,40 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), 'validation' => 'required', ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'identifier', - 'label' => __('Identifier'), - 'description' => __('Provide a unique value for this unit. Might be composed from a name but shouldn\'t include space or special characters.'), - 'validation' => 'required|unique:' . Hook::filter('ns-table-name', 'nexopos_units') . ',identifier' . ($entry !== null ? ',' . $entry->id : ''), + 'label' => __( 'Identifier' ), + 'description' => __( 'Provide a unique value for this unit. Might be composed from a name but shouldn\'t include space or special characters.' ), + 'validation' => 'required|unique:' . Hook::filter( 'ns-table-name', 'nexopos_units' ) . ',identifier' . ( $entry !== null ? ',' . $entry->id : '' ), 'value' => $entry->identifier ?? '', ], [ 'type' => 'media', 'name' => 'preview_url', - 'label' => __('Preview URL'), - 'description' => __('Preview of the unit.'), + 'label' => __( 'Preview URL' ), + 'description' => __( 'Preview of the unit.' ), 'value' => $entry->preview_url ?? '', ], [ 'type' => 'text', 'name' => 'value', - 'label' => __('Value'), - 'description' => __('Define the value of the unit.'), + 'label' => __( 'Value' ), + 'description' => __( 'Define the value of the unit.' ), 'validation' => 'required', 'value' => $entry->value ?? '', ], [ @@ -155,23 +155,23 @@ public function getForm($entry = null) 'props' => UnitGroupCrud::getFormConfig(), 'name' => 'group_id', 'validation' => 'required', - 'options' => Helper::toJsOptions(UnitGroup::get(), [ 'id', 'name' ]), - 'label' => __('Group'), - 'description' => __('Define to which group the unit should be assigned.'), + 'options' => Helper::toJsOptions( UnitGroup::get(), [ 'id', 'name' ] ), + 'label' => __( 'Group' ), + 'description' => __( 'Define to which group the unit should be assigned.' ), 'value' => $entry->group_id ?? '', ], [ 'type' => 'switch', 'name' => 'base_unit', 'validation' => 'required', - 'options' => Helper::kvToJsOptions([ __('No'), __('Yes') ]), - 'label' => __('Base Unit'), - 'description' => __('Determine if the unit is the base unit from the group.'), - 'value' => $entry ? ($entry->base_unit ? 1 : 0) : 0, + 'options' => Helper::kvToJsOptions( [ __( 'No' ), __( 'Yes' ) ] ), + 'label' => __( 'Base Unit' ), + 'description' => __( 'Determine if the unit is the base unit from the group.' ), + 'value' => $entry ? ( $entry->base_unit ? 1 : 0 ) : 0, ], [ 'type' => 'textarea', 'name' => 'description', - 'label' => __('Description'), - 'description' => __('Provide a short description about the unit.'), + 'label' => __( 'Description' ), + 'description' => __( 'Provide a short description about the unit.' ), 'value' => $entry->description ?? '', ], ], @@ -184,9 +184,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -195,9 +195,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, Unit $entry) + public function filterPutInputs( $inputs, Unit $entry ) { return $inputs; } @@ -206,11 +206,11 @@ public function filterPutInputs($inputs, Unit $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - $this->allowedTo('create'); + $this->allowedTo( 'create' ); return $request; } @@ -219,9 +219,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, Unit $entry) + public function afterPost( $request, Unit $entry ) { return $request; } @@ -230,11 +230,11 @@ public function afterPost($request, Unit $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -243,13 +243,13 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - $this->allowedTo('update'); + $this->allowedTo( 'update' ); return $request; } @@ -257,11 +257,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -269,12 +269,12 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.units') { - $this->allowedTo('delete'); + if ( $namespace == 'ns.units' ) { + $this->allowedTo( 'delete' ); } } @@ -286,32 +286,32 @@ public function getColumns(): array return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'value' => [ - 'label' => __('Value'), + 'label' => __( 'Value' ), '$direction' => '', '$sort' => false, ], 'base_unit' => [ - 'label' => __('Base Unit'), + 'label' => __( 'Base Unit' ), '$direction' => '', '$sort' => false, ], 'group_name' => [ - 'label' => __('Group'), + 'label' => __( 'Group' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -321,27 +321,27 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->base_unit = (bool) $entry->base_unit ? __('Yes') : __('No'); + $entry->base_unit = (bool) $entry->base_unit ? __( 'Yes' ) : __( 'No' ); // you can make changes here - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', 'index' => 'id', - 'url' => ns()->url('/dashboard/' . 'units' . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . 'units' . '/edit/' . $entry->id ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.units/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.units/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } @@ -350,31 +350,31 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - $user = app()->make(UsersService::class); - if (! $user->is([ 'admin', 'supervisor' ])) { - return response()->json([ + $user = app()->make( UsersService::class ); + if ( ! $user->is( [ 'admin', 'supervisor' ] ) ) { + return response()->json( [ 'status' => 'failed', - 'message' => __('You\'re not allowed to do this operation'), - ], 403); + 'message' => __( 'You\'re not allowed to do this operation' ), + ], 403 ); } - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { $status = [ 'success' => 0, 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof Unit) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof Unit ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -385,47 +385,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'units'), - 'create' => ns()->url('dashboard/' . 'units/create'), - 'edit' => ns()->url('dashboard/' . 'units/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.units'), - 'put' => ns()->url('api/crud/' . 'ns.units/{id}' . ''), + 'list' => ns()->url( 'dashboard/' . 'units' ), + 'create' => ns()->url( 'dashboard/' . 'units/create' ), + 'edit' => ns()->url( 'dashboard/' . 'units/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.units' ), + 'put' => ns()->url( 'api/crud/' . 'ns.units/{id}' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/UnitGroupCrud.php b/app/Crud/UnitGroupCrud.php index c9397a401..024913db2 100644 --- a/app/Crud/UnitGroupCrud.php +++ b/app/Crud/UnitGroupCrud.php @@ -54,14 +54,14 @@ class UnitGroupCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -77,27 +77,27 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Unit Groups List'), - 'list_description' => __('Display all unit groups.'), - 'no_entry' => __('No unit groups has been registered'), - 'create_new' => __('Add a new unit group'), - 'create_title' => __('Create a new unit group'), - 'create_description' => __('Register a new unit group and save it.'), - 'edit_title' => __('Edit unit group'), - 'edit_description' => __('Modify Unit Group.'), - 'back_to_list' => __('Return to Unit Groups'), + 'list_title' => __( 'Unit Groups List' ), + 'list_description' => __( 'Display all unit groups.' ), + 'no_entry' => __( 'No unit groups has been registered' ), + 'create_new' => __( 'Add a new unit group' ), + 'create_title' => __( 'Create a new unit group' ), + 'create_description' => __( 'Register a new unit group and save it.' ), + 'edit_title' => __( 'Edit unit group' ), + 'edit_description' => __( 'Modify Unit Group.' ), + 'back_to_list' => __( 'Return to Unit Groups' ), ]; } @@ -105,7 +105,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -114,27 +114,27 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), 'validation' => 'required', ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'textarea', 'name' => 'description', 'value' => $entry->description ?? '', - 'label' => __('Description'), + 'label' => __( 'Description' ), ], ], ], @@ -146,9 +146,9 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { return $inputs; } @@ -157,9 +157,9 @@ public function filterPostInputs($inputs) * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, UnitGroup $entry) + public function filterPutInputs( $inputs, UnitGroup $entry ) { return $inputs; } @@ -168,11 +168,11 @@ public function filterPutInputs($inputs, UnitGroup $entry) * Before saving a record * * @param Request $request - * @return void + * @return void */ - public function beforePost($request) + public function beforePost( $request ) { - $this->allowedTo('create'); + $this->allowedTo( 'create' ); return $request; } @@ -181,9 +181,9 @@ public function beforePost($request) * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, UnitGroup $entry) + public function afterPost( $request, UnitGroup $entry ) { return $request; } @@ -192,11 +192,11 @@ public function afterPost($request, UnitGroup $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -205,13 +205,13 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - $this->allowedTo('update'); + $this->allowedTo( 'update' ); return $request; } @@ -219,11 +219,11 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, $entry) + public function afterPut( $request, $entry ) { return $request; } @@ -231,12 +231,12 @@ public function afterPut($request, $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, $id, $model) + public function beforeDelete( $namespace, $id, $model ) { - if ($namespace == 'ns.units-groups') { - $this->allowedTo('delete'); + if ( $namespace == 'ns.units-groups' ) { + $this->allowedTo( 'delete' ); } } @@ -247,17 +247,17 @@ public function getColumns(): array { return [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), '$direction' => '', '$sort' => false, ], 'user_username' => [ - 'label' => __('Author'), + 'label' => __( 'Author' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => false, ], @@ -267,25 +267,25 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { - $entry->addAction('edit', [ - 'label' => __('Edit'), + $entry->addAction( 'edit', [ + 'label' => __( 'Edit' ), 'namespace' => 'edit', 'type' => 'GOTO', 'index' => 'id', - 'url' => ns()->url('/dashboard/' . 'units/groups' . '/edit/' . $entry->id), - ]); + 'url' => ns()->url( '/dashboard/' . 'units/groups' . '/edit/' . $entry->id ), + ] ); - $entry->addAction('delete', [ - 'label' => __('Delete'), + $entry->addAction( 'delete', [ + 'label' => __( 'Delete' ), 'namespace' => 'delete', 'type' => 'DELETE', - 'url' => ns()->url('/api/crud/ns.units-groups/' . $entry->id), + 'url' => ns()->url( '/api/crud/ns.units-groups/' . $entry->id ), 'confirm' => [ - 'message' => __('Would you like to delete this ?'), + 'message' => __( 'Would you like to delete this ?' ), ], - ]); + ] ); return $entry; } @@ -294,31 +294,31 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - $user = app()->make(UsersService::class); - if (! $user->is([ 'admin', 'supervisor' ])) { - return response()->json([ + $user = app()->make( UsersService::class ); + if ( ! $user->is( [ 'admin', 'supervisor' ] ) ) { + return response()->json( [ 'status' => 'failed', - 'message' => __('You\'re not allowed to do this operation'), - ], 403); + 'message' => __( 'You\'re not allowed to do this operation' ), + ], 403 ); } - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { $status = [ 'success' => 0, 'failed' => 0, ]; - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof UnitGroup) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof UnitGroup ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -329,47 +329,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'units/groups'), - 'create' => ns()->url('dashboard/' . 'units/groups/create'), - 'edit' => ns()->url('dashboard/' . 'units/groups/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.units-groups'), - 'put' => ns()->url('api/crud/' . 'ns.units-groups/{id}' . ''), + 'list' => ns()->url( 'dashboard/' . 'units/groups' ), + 'create' => ns()->url( 'dashboard/' . 'units/groups/create' ), + 'edit' => ns()->url( 'dashboard/' . 'units/groups/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.units-groups' ), + 'put' => ns()->url( 'api/crud/' . 'ns.units-groups/{id}' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Crud/UnpaidOrderCrud.php b/app/Crud/UnpaidOrderCrud.php index 5af382abd..d55ac119a 100644 --- a/app/Crud/UnpaidOrderCrud.php +++ b/app/Crud/UnpaidOrderCrud.php @@ -14,9 +14,9 @@ public function __construct() parent::__construct(); } - public function hook($query): void + public function hook( $query ): void { - $query->orderBy('created_at', 'desc'); - $query->where('payment_status', Order::PAYMENT_UNPAID); + $query->orderBy( 'created_at', 'desc' ); + $query->where( 'payment_status', Order::PAYMENT_UNPAID ); } } diff --git a/app/Crud/UserCrud.php b/app/Crud/UserCrud.php index 70de5963e..3c907838d 100644 --- a/app/Crud/UserCrud.php +++ b/app/Crud/UserCrud.php @@ -82,14 +82,14 @@ class UserCrud extends CrudService /** * Define where statement * - * @var array + * @var array **/ protected $listWhere = []; /** * Define where in statement * - * @var array + * @var array */ protected $whereIn = []; @@ -138,30 +138,30 @@ public function __construct() { parent::__construct(); - Hook::addFilter($this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2); + Hook::addFilter( $this->namespace . '-crud-actions', [ $this, 'setActions' ], 10, 2 ); - $this->userService = app()->make(UsersService::class); - $this->options = app()->make(Options::class); + $this->userService = app()->make( UsersService::class ); + $this->options = app()->make( Options::class ); } /** * Return the label used for the crud * instance * - * @return array + * @return array **/ public function getLabels() { return [ - 'list_title' => __('Users List'), - 'list_description' => __('Display all users.'), - 'no_entry' => __('No users has been registered'), - 'create_new' => __('Add a new user'), - 'create_title' => __('Create a new user'), - 'create_description' => __('Register a new user and save it.'), - 'edit_title' => __('Edit user'), - 'edit_description' => __('Modify User.'), - 'back_to_list' => __('Return to Users'), + 'list_title' => __( 'Users List' ), + 'list_description' => __( 'Display all users.' ), + 'no_entry' => __( 'No users has been registered' ), + 'create_new' => __( 'Add a new user' ), + 'create_title' => __( 'Create a new user' ), + 'create_description' => __( 'Register a new user and save it.' ), + 'edit_title' => __( 'Edit user' ), + 'edit_description' => __( 'Modify User.' ), + 'back_to_list' => __( 'Return to Users' ), ]; } @@ -169,7 +169,7 @@ public function getLabels() * Check whether a feature is enabled * **/ - public function isEnabled($feature): bool + public function isEnabled( $feature ): bool { return false; // by default } @@ -178,253 +178,253 @@ public function isEnabled($feature): bool * Fields * * @param object/null - * @return array of field + * @return array of field */ - public function getForm($entry = null) + public function getForm( $entry = null ) { return [ 'main' => [ - 'label' => __('Username'), + 'label' => __( 'Username' ), 'name' => 'username', 'value' => $entry->username ?? '', 'validation' => $entry === null ? 'required|unique:nexopos_users,username' : [ 'required', - Rule::unique('nexopos_users', 'username')->ignore($entry->id), + Rule::unique( 'nexopos_users', 'username' )->ignore( $entry->id ), ], - 'description' => __('Provide a name to the resource.'), + 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'email', - 'label' => __('Email'), + 'label' => __( 'Email' ), 'validation' => $entry === null ? 'required|email|unique:nexopos_users,email' : [ 'required', 'email', - Rule::unique('nexopos_users', 'email')->ignore($entry->id), + Rule::unique( 'nexopos_users', 'email' )->ignore( $entry->id ), ], - 'description' => __('Will be used for various purposes such as email recovery.'), + 'description' => __( 'Will be used for various purposes such as email recovery.' ), 'value' => $entry->email ?? '', ], [ 'type' => 'text', 'name' => 'first_name', 'value' => $entry?->first_name, - 'label' => __('First Name'), - 'description' => __('Provide the user first name.'), + 'label' => __( 'First Name' ), + 'description' => __( 'Provide the user first name.' ), ], [ 'type' => 'text', 'name' => 'last_name', 'value' => $entry?->last_name, - 'label' => __('Last Name'), - 'description' => __('Provide the user last name.'), + 'label' => __( 'Last Name' ), + 'description' => __( 'Provide the user last name.' ), ], [ 'type' => 'password', 'name' => 'password', - 'label' => __('Password'), + 'label' => __( 'Password' ), 'validation' => 'sometimes|min:6', - 'description' => __('Make a unique and secure password.'), + 'description' => __( 'Make a unique and secure password.' ), ], [ 'type' => 'password', 'name' => 'password_confirm', 'validation' => 'sometimes|same:general.password', - 'label' => __('Confirm Password'), - 'description' => __('Should be the same as the password.'), + 'label' => __( 'Confirm Password' ), + 'description' => __( 'Should be the same as the password.' ), ], [ 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ __('No'), __('Yes') ]), + 'options' => Helper::kvToJsOptions( [ __( 'No' ), __( 'Yes' ) ] ), 'name' => 'active', - 'label' => __('Active'), - 'description' => __('Define whether the user can use the application.'), - 'value' => ($entry !== null && $entry->active ? 1 : 0) ?? 0, + 'label' => __( 'Active' ), + 'description' => __( 'Define whether the user can use the application.' ), + 'value' => ( $entry !== null && $entry->active ? 1 : 0 ) ?? 0, ], [ 'type' => 'multiselect', - 'options' => Helper::toJsOptions(Role::get(), [ 'id', 'name' ]), - 'description' => __('Define what roles applies to the user'), + 'options' => Helper::toJsOptions( Role::get(), [ 'id', 'name' ] ), + 'description' => __( 'Define what roles applies to the user' ), 'name' => 'roles', - 'label' => __('Roles'), - 'value' => $entry !== null ? ($entry->roles()->get()->map(fn($role) => $role->id)->toArray() ?? '') : [], + 'label' => __( 'Roles' ), + 'value' => $entry !== null ? ( $entry->roles()->get()->map( fn( $role ) => $role->id )->toArray() ?? '' ) : [], ], [ 'type' => 'select', - 'label' => __('Group'), + 'label' => __( 'Group' ), 'name' => 'group_id', 'value' => $entry->group_id ?? '', - 'options' => Helper::toJsOptions(CustomerGroup::all(), [ 'id', 'name' ]), - 'description' => __('Assign the customer to a group'), + 'options' => Helper::toJsOptions( CustomerGroup::all(), [ 'id', 'name' ] ), + 'description' => __( 'Assign the customer to a group' ), ], [ 'type' => 'datetimepicker', - 'label' => __('Birth Date'), + 'label' => __( 'Birth Date' ), 'name' => 'birth_date', - 'value' => $entry instanceof User && $entry->birth_date !== null ? Carbon::parse($entry->birth_date)->format('Y-m-d H:i:s') : null, - 'description' => __('Displays the customer birth date'), + 'value' => $entry instanceof User && $entry->birth_date !== null ? Carbon::parse( $entry->birth_date )->format( 'Y-m-d H:i:s' ) : null, + 'description' => __( 'Displays the customer birth date' ), ], [ 'type' => 'text', 'name' => 'credit_limit_amount', 'value' => $entry?->credit_limit_amount, - 'label' => __('Credit Limit'), - 'description' => __('Set the limit that can\'t be exceeded by the user.'), + 'label' => __( 'Credit Limit' ), + 'description' => __( 'Set the limit that can\'t be exceeded by the user.' ), ], [ 'type' => 'select', 'name' => 'gender', 'value' => $entry?->gender, - 'label' => __('Gender'), - 'options' => Helper::kvToJsOptions([ - '' => __('Not Defined'), - 'male' => __('Male'), - 'female' => __('Female'), - ]), - 'description' => __('Set the user gender.'), + 'label' => __( 'Gender' ), + 'options' => Helper::kvToJsOptions( [ + '' => __( 'Not Defined' ), + 'male' => __( 'Male' ), + 'female' => __( 'Female' ), + ] ), + 'description' => __( 'Set the user gender.' ), ], [ 'type' => 'text', 'name' => 'phone', 'value' => $entry?->phone, - 'label' => __('Phone'), - 'validation' => collect([ - ns()->option->get('ns_customers_force_unique_phone', 'no') === 'yes' ? ( - $entry instanceof User && ! empty($entry->phone) ? Rule::unique('nexopos_users', 'phone')->ignore($entry->id) : Rule::unique('nexopos_users', 'phone') + 'label' => __( 'Phone' ), + 'validation' => collect( [ + ns()->option->get( 'ns_customers_force_unique_phone', 'no' ) === 'yes' ? ( + $entry instanceof User && ! empty( $entry->phone ) ? Rule::unique( 'nexopos_users', 'phone' )->ignore( $entry->id ) : Rule::unique( 'nexopos_users', 'phone' ) ) : '', - ])->toArray(), - 'description' => __('Set the user phone number.'), + ] )->toArray(), + 'description' => __( 'Set the user phone number.' ), ], [ 'type' => 'text', 'name' => 'pobox', 'value' => $entry?->pobox, - 'label' => __('PO Box'), - 'description' => __('Set the user PO Box.'), + 'label' => __( 'PO Box' ), + 'description' => __( 'Set the user PO Box.' ), ], ], ], 'billing' => [ - 'label' => __('Billing Address'), + 'label' => __( 'Billing Address' ), 'fields' => [ [ 'type' => 'text', 'name' => 'first_name', 'value' => $entry->billing->first_name ?? '', - 'label' => __('First Name'), - 'description' => __('Provide the billing First Name.'), + 'label' => __( 'First Name' ), + 'description' => __( 'Provide the billing First Name.' ), ], [ 'type' => 'text', 'name' => 'last_name', 'value' => $entry->billing->last_name ?? '', - 'label' => __('Last name'), - 'description' => __('Provide the billing last name.'), + 'label' => __( 'Last name' ), + 'description' => __( 'Provide the billing last name.' ), ], [ 'type' => 'text', 'name' => 'phone', 'value' => $entry->billing->phone ?? '', - 'label' => __('Phone'), - 'description' => __('Billing phone number.'), + 'label' => __( 'Phone' ), + 'description' => __( 'Billing phone number.' ), ], [ 'type' => 'text', 'name' => 'address_1', 'value' => $entry->billing->address_1 ?? '', - 'label' => __('Address 1'), - 'description' => __('Billing First Address.'), + 'label' => __( 'Address 1' ), + 'description' => __( 'Billing First Address.' ), ], [ 'type' => 'text', 'name' => 'address_2', 'value' => $entry->billing->address_2 ?? '', - 'label' => __('Address 2'), - 'description' => __('Billing Second Address.'), + 'label' => __( 'Address 2' ), + 'description' => __( 'Billing Second Address.' ), ], [ 'type' => 'text', 'name' => 'country', 'value' => $entry->billing->country ?? '', - 'label' => __('Country'), - 'description' => __('Billing Country.'), + 'label' => __( 'Country' ), + 'description' => __( 'Billing Country.' ), ], [ 'type' => 'text', 'name' => 'city', 'value' => $entry->billing->city ?? '', - 'label' => __('City'), - 'description' => __('City'), + 'label' => __( 'City' ), + 'description' => __( 'City' ), ], [ 'type' => 'text', 'name' => 'pobox', 'value' => $entry->billing->pobox ?? '', - 'label' => __('PO.Box'), - 'description' => __('Postal Address'), + 'label' => __( 'PO.Box' ), + 'description' => __( 'Postal Address' ), ], [ 'type' => 'text', 'name' => 'company', 'value' => $entry->billing->company ?? '', - 'label' => __('Company'), - 'description' => __('Company'), + 'label' => __( 'Company' ), + 'description' => __( 'Company' ), ], [ 'type' => 'text', 'name' => 'email', 'value' => $entry->billing->email ?? '', - 'label' => __('Email'), - 'description' => __('Email'), + 'label' => __( 'Email' ), + 'description' => __( 'Email' ), ], ], ], 'shipping' => [ - 'label' => __('Shipping Address'), + 'label' => __( 'Shipping Address' ), 'fields' => [ [ 'type' => 'text', 'name' => 'first_name', 'value' => $entry->shipping->first_name ?? '', - 'label' => __('First Name'), - 'description' => __('Provide the shipping First Name.'), + 'label' => __( 'First Name' ), + 'description' => __( 'Provide the shipping First Name.' ), ], [ 'type' => 'text', 'name' => 'last_name', 'value' => $entry->shipping->last_name ?? '', - 'label' => __('Last Name'), - 'description' => __('Provide the shipping Last Name.'), + 'label' => __( 'Last Name' ), + 'description' => __( 'Provide the shipping Last Name.' ), ], [ 'type' => 'text', 'name' => 'phone', 'value' => $entry->shipping->phone ?? '', - 'label' => __('Phone'), - 'description' => __('Shipping phone number.'), + 'label' => __( 'Phone' ), + 'description' => __( 'Shipping phone number.' ), ], [ 'type' => 'text', 'name' => 'address_1', 'value' => $entry->shipping->address_1 ?? '', - 'label' => __('Address 1'), - 'description' => __('Shipping First Address.'), + 'label' => __( 'Address 1' ), + 'description' => __( 'Shipping First Address.' ), ], [ 'type' => 'text', 'name' => 'address_2', 'value' => $entry->shipping->address_2 ?? '', - 'label' => __('Address 2'), - 'description' => __('Shipping Second Address.'), + 'label' => __( 'Address 2' ), + 'description' => __( 'Shipping Second Address.' ), ], [ 'type' => 'text', 'name' => 'country', 'value' => $entry->shipping->country ?? '', - 'label' => __('Country'), - 'description' => __('Shipping Country.'), + 'label' => __( 'Country' ), + 'description' => __( 'Shipping Country.' ), ], [ 'type' => 'text', 'name' => 'city', 'value' => $entry->shipping->city ?? '', - 'label' => __('City'), - 'description' => __('City'), + 'label' => __( 'City' ), + 'description' => __( 'City' ), ], [ 'type' => 'text', 'name' => 'pobox', 'value' => $entry->shipping->pobox ?? '', - 'label' => __('PO.Box'), - 'description' => __('Postal Address'), + 'label' => __( 'PO.Box' ), + 'description' => __( 'Postal Address' ), ], [ 'type' => 'text', 'name' => 'company', 'value' => $entry->shipping->company ?? '', - 'label' => __('Company'), - 'description' => __('Company'), + 'label' => __( 'Company' ), + 'description' => __( 'Company' ), ], [ 'type' => 'text', 'name' => 'email', 'value' => $entry->shipping->email ?? '', - 'label' => __('Email'), - 'description' => __('Email'), + 'label' => __( 'Email' ), + 'description' => __( 'Email' ), ], ], ], @@ -436,93 +436,93 @@ public function getForm($entry = null) * Filter POST input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPostInputs($inputs) + public function filterPostInputs( $inputs ) { - unset($inputs[ 'password_confirm' ]); + unset( $inputs[ 'password_confirm' ] ); /** * if the password is not changed, no * need to hash it */ - $inputs = collect($inputs)->filter(fn($input) => ! empty($input) || $input === 0)->toArray(); + $inputs = collect( $inputs )->filter( fn( $input ) => ! empty( $input ) || $input === 0 )->toArray(); - if (! empty($inputs[ 'password' ])) { - $inputs[ 'password' ] = Hash::make($inputs[ 'password' ]); + if ( ! empty( $inputs[ 'password' ] ) ) { + $inputs[ 'password' ] = Hash::make( $inputs[ 'password' ] ); } - return collect($inputs)->map(function ($value, $key) { - if ($key === 'group_id' && empty($value)) { - $value = $this->options->get('ns_customers_default_group', false); - $group = CustomerGroup::find($value); + return collect( $inputs )->map( function ( $value, $key ) { + if ( $key === 'group_id' && empty( $value ) ) { + $value = $this->options->get( 'ns_customers_default_group', false ); + $group = CustomerGroup::find( $value ); - if (! $group instanceof CustomerGroup) { - throw new NotAllowedException(__('The assigned default customer group doesn\'t exist or is not defined.')); + if ( ! $group instanceof CustomerGroup ) { + throw new NotAllowedException( __( 'The assigned default customer group doesn\'t exist or is not defined.' ) ); } } return $value; - })->toArray(); + } )->toArray(); } /** * Filter PUT input fields * * @param array of fields - * @return array of fields + * @return array of fields */ - public function filterPutInputs($inputs, User $entry) + public function filterPutInputs( $inputs, User $entry ) { - unset($inputs[ 'password_confirm' ]); + unset( $inputs[ 'password_confirm' ] ); /** * if the password is not changed, no * need to hash it */ - $inputs = collect($inputs)->filter(fn($input) => ! empty($input) || $input === 0)->toArray(); + $inputs = collect( $inputs )->filter( fn( $input ) => ! empty( $input ) || $input === 0 )->toArray(); - if (! empty($inputs[ 'password' ])) { - $inputs[ 'password' ] = Hash::make($inputs[ 'password' ]); + if ( ! empty( $inputs[ 'password' ] ) ) { + $inputs[ 'password' ] = Hash::make( $inputs[ 'password' ] ); } - return collect($inputs)->map(function ($value, $key) { - if ($key === 'group_id' && empty($value)) { - $value = $this->options->get('ns_customers_default_group', false); - $group = CustomerGroup::find($value); + return collect( $inputs )->map( function ( $value, $key ) { + if ( $key === 'group_id' && empty( $value ) ) { + $value = $this->options->get( 'ns_customers_default_group', false ); + $group = CustomerGroup::find( $value ); - if (! $group instanceof CustomerGroup) { - throw new NotAllowedException(__('The assigned default customer group doesn\'t exist or is not defined.')); + if ( ! $group instanceof CustomerGroup ) { + throw new NotAllowedException( __( 'The assigned default customer group doesn\'t exist or is not defined.' ) ); } } return $value; - })->toArray(); + } )->toArray(); } /** * After saving a record * * @param Request $request - * @return void + * @return void */ - public function afterPost($request, User $entry) + public function afterPost( $request, User $entry ) { - if (isset($request[ 'roles'])) { + if ( isset( $request[ 'roles'] ) ) { $this->userService ->setUserRole( $entry, $request[ 'roles' ] ); - $this->userService->createAttribute($entry); + $this->userService->createAttribute( $entry ); /** * While creating the user, if we set that user as active * we'll dispatch the activation successful event. */ - if ($entry->active) { - UserAfterActivationSuccessfulEvent::dispatch($entry); + if ( $entry->active ) { + UserAfterActivationSuccessfulEvent::dispatch( $entry ); } } @@ -533,11 +533,11 @@ public function afterPost($request, User $entry) * get * * @param string - * @return mixed + * @return mixed */ - public function get($param) + public function get( $param ) { - switch ($param) { + switch ( $param ) { case 'model': return $this->model; break; } @@ -546,13 +546,13 @@ public function get($param) /** * Before updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function beforePut($request, $entry) + public function beforePut( $request, $entry ) { - $this->allowedTo('update'); + $this->allowedTo( 'update' ); return $request; } @@ -560,27 +560,27 @@ public function beforePut($request, $entry) /** * After updating a record * - * @param Request $request + * @param Request $request * @param object entry - * @return void + * @return void */ - public function afterPut($request, User $entry) + public function afterPut( $request, User $entry ) { - if (isset($request[ 'roles'])) { + if ( isset( $request[ 'roles'] ) ) { $this->userService ->setUserRole( $entry, $request[ 'roles' ] ); - $this->userService->createAttribute($entry); + $this->userService->createAttribute( $entry ); /** * While creating the user, if we set that user as active * we'll dispatch the activation successful event. */ - if ($entry->active) { - UserAfterActivationSuccessfulEvent::dispatch($entry); + if ( $entry->active ) { + UserAfterActivationSuccessfulEvent::dispatch( $entry ); } } @@ -590,15 +590,15 @@ public function afterPut($request, User $entry) /** * Before Delete * - * @return void + * @return void */ - public function beforeDelete($namespace, int $id, $model) + public function beforeDelete( $namespace, int $id, $model ) { - if ($namespace == 'ns.users') { - $this->allowedTo('delete'); + if ( $namespace == 'ns.users' ) { + $this->allowedTo( 'delete' ); - if ($id === Auth::id()) { - throw new NotAllowedException(__('You cannot delete your own account.')); + if ( $id === Auth::id() ) { + throw new NotAllowedException( __( 'You cannot delete your own account.' ) ); } } } @@ -610,47 +610,47 @@ public function getColumns(): array { return [ 'username' => [ - 'label' => __('Username'), + 'label' => __( 'Username' ), '$direction' => '', '$sort' => true, ], 'active' => [ - 'label' => __('Active'), + 'label' => __( 'Active' ), '$direction' => '', '$sort' => true, ], 'group_name' => [ - 'label' => __('Group Name'), + 'label' => __( 'Group Name' ), '$direction' => '', '$sort' => true, ], 'account_amount' => [ - 'label' => __('Wallet Balance'), + 'label' => __( 'Wallet Balance' ), '$direction' => '', '$sort' => true, ], 'owed_amount' => [ - 'label' => __('Owed Amount'), + 'label' => __( 'Owed Amount' ), '$direction' => '', '$sort' => true, ], 'purchases_amount' => [ - 'label' => __('Total Purchases'), + 'label' => __( 'Total Purchases' ), '$direction' => '', '$sort' => true, ], 'email' => [ - 'label' => __('Email'), + 'label' => __( 'Email' ), '$direction' => '', '$sort' => true, ], 'rolesNames' => [ - 'label' => __('Roles'), + 'label' => __( 'Roles' ), '$direction' => '', '$sort' => false, ], 'created_at' => [ - 'label' => __('Created At'), + 'label' => __( 'Created At' ), '$direction' => '', '$sort' => true, ], @@ -660,51 +660,51 @@ public function getColumns(): array /** * Define actions */ - public function setActions(CrudEntry $entry, $namespace) + public function setActions( CrudEntry $entry, $namespace ) { $entry->action( identifier: 'edit_customers_group', - label: __('Edit'), - url: ns()->url('dashboard/users/edit/' . $entry->id), + label: __( 'Edit' ), + url: ns()->url( 'dashboard/users/edit/' . $entry->id ), ); $entry->action( identifier: 'customers_orders', - label: __('Orders'), - url: ns()->url('dashboard/users/' . $entry->id . '/orders'), + label: __( 'Orders' ), + url: ns()->url( 'dashboard/users/' . $entry->id . '/orders' ), ); $entry->action( identifier: 'customers_rewards', - label: __('Rewards'), - url: ns()->url('dashboard/users/' . $entry->id . '/rewards'), + label: __( 'Rewards' ), + url: ns()->url( 'dashboard/users/' . $entry->id . '/rewards' ), ); $entry->action( identifier: 'customers_coupons', - label: __('Coupons'), - url: ns()->url('dashboard/users/' . $entry->id . '/coupons'), + label: __( 'Coupons' ), + url: ns()->url( 'dashboard/users/' . $entry->id . '/coupons' ), ); $entry->action( identifier: 'customers_history', - label: __('Wallet History'), - url: ns()->url('dashboard/users/' . $entry->id . '/account-history'), + label: __( 'Wallet History' ), + url: ns()->url( 'dashboard/users/' . $entry->id . '/account-history' ), ); $entry->action( identifier: 'delete', - label: __('Delete'), + label: __( 'Delete' ), type: 'DELETE', - url: ns()->url('/api/crud/ns.users/' . $entry->id), + url: ns()->url( '/api/crud/ns.users/' . $entry->id ), confirm: [ - 'message' => __('Would you like to delete this ?'), - 'title' => __('Delete a user'), + 'message' => __( 'Would you like to delete this ?' ), + 'title' => __( 'Delete a user' ), ], ); - $roles = User::find($entry->id)->roles()->get(); - $entry->rolesNames = $roles->map(fn($role) => $role->name)->join(', ') ?: __('Not Assigned'); + $roles = User::find( $entry->id )->roles()->get(); + $entry->rolesNames = $roles->map( fn( $role ) => $role->name )->join( ', ' ) ?: __( 'Not Assigned' ); return $entry; } @@ -713,23 +713,23 @@ public function setActions(CrudEntry $entry, $namespace) * Bulk Delete Action * * @param object Request with object - * @return false/array + * @return false/array */ - public function bulkAction(Request $request) + public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ - $user = app()->make(UsersService::class); - if (! $user->is([ 'admin', 'supervisor' ])) { - return response()->json([ + $user = app()->make( UsersService::class ); + if ( ! $user->is( [ 'admin', 'supervisor' ] ) ) { + return response()->json( [ 'status' => 'failed', - 'message' => __('You\'re not allowed to do this operation'), - ], 403); + 'message' => __( 'You\'re not allowed to do this operation' ), + ], 403 ); } - if ($request->input('action') == 'delete_selected') { + if ( $request->input( 'action' ) == 'delete_selected' ) { $status = [ 'success' => 0, 'failed' => 0, @@ -738,13 +738,13 @@ public function bulkAction(Request $request) /** * @temp */ - if (Auth::user()->role->namespace !== 'admin') { - throw new Exception(__('Access Denied')); + if ( Auth::user()->role->namespace !== 'admin' ) { + throw new Exception( __( 'Access Denied' ) ); } - foreach ($request->input('entries') as $id) { - $entity = $this->model::find($id); - if ($entity instanceof User) { + foreach ( $request->input( 'entries' ) as $id ) { + $entity = $this->model::find( $id ); + if ( $entity instanceof User ) { $entity->delete(); $status[ 'success' ]++; } else { @@ -755,47 +755,47 @@ public function bulkAction(Request $request) return $status; } - return Hook::filter($this->namespace . '-catch-action', false, $request); + return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * - * @return array of links + * @return array of links */ public function getLinks(): array { return [ - 'list' => ns()->url('dashboard/' . 'users'), - 'create' => ns()->url('dashboard/' . 'users/create'), - 'edit' => ns()->url('dashboard/' . 'users/edit/'), - 'post' => ns()->url('api/crud/' . 'ns.users'), - 'put' => ns()->url('api/crud/' . 'ns.users/{id}' . ''), + 'list' => ns()->url( 'dashboard/' . 'users' ), + 'create' => ns()->url( 'dashboard/' . 'users/create' ), + 'edit' => ns()->url( 'dashboard/' . 'users/edit/' ), + 'post' => ns()->url( 'api/crud/' . 'ns.users' ), + 'put' => ns()->url( 'api/crud/' . 'ns.users/{id}' . '' ), ]; } /** * Get Bulk actions * - * @return array of actions + * @return array of actions **/ public function getBulkActions(): array { - return Hook::filter($this->namespace . '-bulk', [ + return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __('Delete Selected Groups'), + 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', - 'url' => ns()->route('ns.api.crud-bulk-actions', [ + 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, - ]), + ] ), ], - ]); + ] ); } /** * get exports * - * @return array of export formats + * @return array of export formats **/ public function getExports() { diff --git a/app/Events/AfterCustomerAccountHistoryCreatedEvent.php b/app/Events/AfterCustomerAccountHistoryCreatedEvent.php index fdbd63d42..0e393f89d 100644 --- a/app/Events/AfterCustomerAccountHistoryCreatedEvent.php +++ b/app/Events/AfterCustomerAccountHistoryCreatedEvent.php @@ -18,7 +18,7 @@ class AfterCustomerAccountHistoryCreatedEvent * * @return void */ - public function __construct(CustomerAccountHistory $customerAccount) + public function __construct( CustomerAccountHistory $customerAccount ) { $this->customerAccount = $customerAccount; } diff --git a/app/Events/AfterMigrationExecutedEvent.php b/app/Events/AfterMigrationExecutedEvent.php index c91f824b0..d269d91b9 100644 --- a/app/Events/AfterMigrationExecutedEvent.php +++ b/app/Events/AfterMigrationExecutedEvent.php @@ -16,7 +16,7 @@ class AfterMigrationExecutedEvent * * @return void */ - public function __construct(public $module, public $response, public $file) + public function __construct( public $module, public $response, public $file ) { // ... } @@ -28,6 +28,6 @@ public function __construct(public $module, public $response, public $file) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/AfterMigrationStatusCheckedEvent.php b/app/Events/AfterMigrationStatusCheckedEvent.php index e3ccc4814..e7120f494 100644 --- a/app/Events/AfterMigrationStatusCheckedEvent.php +++ b/app/Events/AfterMigrationStatusCheckedEvent.php @@ -15,7 +15,7 @@ class AfterMigrationStatusCheckedEvent * * @return void */ - public function __construct(public $next, public $request) + public function __construct( public $next, public $request ) { // ... } diff --git a/app/Events/AfterSuccessfulLoginEvent.php b/app/Events/AfterSuccessfulLoginEvent.php index 7cb1b237f..01a46e651 100644 --- a/app/Events/AfterSuccessfulLoginEvent.php +++ b/app/Events/AfterSuccessfulLoginEvent.php @@ -16,7 +16,7 @@ class AfterSuccessfulLoginEvent * * @return void */ - public function __construct(public User $user) + public function __construct( public User $user ) { // } diff --git a/app/Events/BeforeSaveOrderTaxEvent.php b/app/Events/BeforeSaveOrderTaxEvent.php index a0ea149ca..daa1fc5a9 100644 --- a/app/Events/BeforeSaveOrderTaxEvent.php +++ b/app/Events/BeforeSaveOrderTaxEvent.php @@ -17,7 +17,7 @@ class BeforeSaveOrderTaxEvent * * @return void */ - public function __construct(public OrderTax $orderTax, public array $tax) + public function __construct( public OrderTax $orderTax, public array $tax ) { // } @@ -29,6 +29,6 @@ public function __construct(public OrderTax $orderTax, public array $tax) */ public function broadcastOn() { - return new PrivateChannel('channel-name'); + return new PrivateChannel( 'channel-name' ); } } diff --git a/app/Events/CashRegisterHistoryAfterCreatedEvent.php b/app/Events/CashRegisterHistoryAfterCreatedEvent.php index 2429e8598..d08b654f7 100644 --- a/app/Events/CashRegisterHistoryAfterCreatedEvent.php +++ b/app/Events/CashRegisterHistoryAfterCreatedEvent.php @@ -16,7 +16,7 @@ class CashRegisterHistoryAfterCreatedEvent * * @return void */ - public function __construct(public RegisterHistory $registerHistory) + public function __construct( public RegisterHistory $registerHistory ) { // ... } diff --git a/app/Events/CustomerAfterCreatedEvent.php b/app/Events/CustomerAfterCreatedEvent.php index a6f040144..d6014c0c8 100644 --- a/app/Events/CustomerAfterCreatedEvent.php +++ b/app/Events/CustomerAfterCreatedEvent.php @@ -16,7 +16,7 @@ class CustomerAfterCreatedEvent * * @return void */ - public function __construct(public Customer $customer) + public function __construct( public Customer $customer ) { // ... } diff --git a/app/Events/CustomerAfterUpdatedEvent.php b/app/Events/CustomerAfterUpdatedEvent.php index d5098df7f..c0919c205 100644 --- a/app/Events/CustomerAfterUpdatedEvent.php +++ b/app/Events/CustomerAfterUpdatedEvent.php @@ -17,7 +17,7 @@ class CustomerAfterUpdatedEvent * * @return void */ - public function __construct(public Customer $customer) + public function __construct( public Customer $customer ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public Customer $customer) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/CustomerBeforeDeletedEvent.php b/app/Events/CustomerBeforeDeletedEvent.php index f973e9750..a0031e682 100644 --- a/app/Events/CustomerBeforeDeletedEvent.php +++ b/app/Events/CustomerBeforeDeletedEvent.php @@ -16,7 +16,7 @@ class CustomerBeforeDeletedEvent * * @return void */ - public function __construct(public Customer $customer) + public function __construct( public Customer $customer ) { // ... } diff --git a/app/Events/CustomerRewardAfterCouponIssuedEvent.php b/app/Events/CustomerRewardAfterCouponIssuedEvent.php index 8ebec3498..bdcf2e7cd 100644 --- a/app/Events/CustomerRewardAfterCouponIssuedEvent.php +++ b/app/Events/CustomerRewardAfterCouponIssuedEvent.php @@ -17,7 +17,7 @@ class CustomerRewardAfterCouponIssuedEvent * * @return void */ - public function __construct(public CustomerCoupon $customerCoupon) + public function __construct( public CustomerCoupon $customerCoupon ) { // } @@ -29,6 +29,6 @@ public function __construct(public CustomerCoupon $customerCoupon) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/CustomerRewardAfterCreatedEvent.php b/app/Events/CustomerRewardAfterCreatedEvent.php index e9074faf0..7c9743f7c 100644 --- a/app/Events/CustomerRewardAfterCreatedEvent.php +++ b/app/Events/CustomerRewardAfterCreatedEvent.php @@ -19,7 +19,7 @@ class CustomerRewardAfterCreatedEvent * * @return void */ - public function __construct(public CustomerReward $customerReward, public Customer $customer, public RewardSystem $reward) + public function __construct( public CustomerReward $customerReward, public Customer $customer, public RewardSystem $reward ) { // ... } @@ -31,6 +31,6 @@ public function __construct(public CustomerReward $customerReward, public Custom */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/DashboardDayAfterCreatedEvent.php b/app/Events/DashboardDayAfterCreatedEvent.php index faf7d2d36..c7c7889e7 100644 --- a/app/Events/DashboardDayAfterCreatedEvent.php +++ b/app/Events/DashboardDayAfterCreatedEvent.php @@ -17,7 +17,7 @@ class DashboardDayAfterCreatedEvent * * @return void */ - public function __construct(public DashboardDay $dashboardDay) + public function __construct( public DashboardDay $dashboardDay ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public DashboardDay $dashboardDay) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/DashboardMonthAfterCreatedEvent.php b/app/Events/DashboardMonthAfterCreatedEvent.php index 068847ae8..fe2136df5 100644 --- a/app/Events/DashboardMonthAfterCreatedEvent.php +++ b/app/Events/DashboardMonthAfterCreatedEvent.php @@ -28,6 +28,6 @@ public function __construct() */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/DueOrdersEvent.php b/app/Events/DueOrdersEvent.php index 5db80e4cf..bf75b740a 100644 --- a/app/Events/DueOrdersEvent.php +++ b/app/Events/DueOrdersEvent.php @@ -17,7 +17,7 @@ class DueOrdersEvent * * @return void */ - public function __construct(public Collection $orders) + public function __construct( public Collection $orders ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public Collection $orders) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/JobAfterUnserializeEvent.php b/app/Events/JobAfterUnserializeEvent.php index cdd19107a..d492fa456 100644 --- a/app/Events/JobAfterUnserializeEvent.php +++ b/app/Events/JobAfterUnserializeEvent.php @@ -15,7 +15,7 @@ class JobAfterUnserializeEvent * * @return void */ - public function __construct(public $job) + public function __construct( public $job ) { // } diff --git a/app/Events/JobBeforeSerializeEvent.php b/app/Events/JobBeforeSerializeEvent.php index 6f50260bb..bfb0b84e7 100644 --- a/app/Events/JobBeforeSerializeEvent.php +++ b/app/Events/JobBeforeSerializeEvent.php @@ -15,7 +15,7 @@ class JobBeforeSerializeEvent * * @return void */ - public function __construct(public $job) + public function __construct( public $job ) { // } diff --git a/app/Events/LocaleDefinedEvent.php b/app/Events/LocaleDefinedEvent.php index b0088bda1..cf5c98c8c 100644 --- a/app/Events/LocaleDefinedEvent.php +++ b/app/Events/LocaleDefinedEvent.php @@ -15,7 +15,7 @@ class LocaleDefinedEvent * * @return void */ - public function __construct(public $locale) + public function __construct( public $locale ) { // ... } diff --git a/app/Events/MigrationAfterExecutedEvent.php b/app/Events/MigrationAfterExecutedEvent.php index 25deeb8c6..2c40d9af8 100644 --- a/app/Events/MigrationAfterExecutedEvent.php +++ b/app/Events/MigrationAfterExecutedEvent.php @@ -28,6 +28,6 @@ public function __construct() */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ModulesAfterDisabledEvent.php b/app/Events/ModulesAfterDisabledEvent.php index 9ca210a28..cb4ee83dc 100644 --- a/app/Events/ModulesAfterDisabledEvent.php +++ b/app/Events/ModulesAfterDisabledEvent.php @@ -16,7 +16,7 @@ class ModulesAfterDisabledEvent * * @return void */ - public function __construct(public $module) + public function __construct( public $module ) { // } @@ -28,6 +28,6 @@ public function __construct(public $module) */ public function broadcastOn() { - return new PrivateChannel('channel-name'); + return new PrivateChannel( 'channel-name' ); } } diff --git a/app/Events/ModulesAfterEnabledEvent.php b/app/Events/ModulesAfterEnabledEvent.php index 90dfa9d79..b502c689f 100644 --- a/app/Events/ModulesAfterEnabledEvent.php +++ b/app/Events/ModulesAfterEnabledEvent.php @@ -16,7 +16,7 @@ class ModulesAfterEnabledEvent * * @return void */ - public function __construct(public $module) + public function __construct( public $module ) { // } @@ -28,6 +28,6 @@ public function __construct(public $module) */ public function broadcastOn() { - return new PrivateChannel('channel-name'); + return new PrivateChannel( 'channel-name' ); } } diff --git a/app/Events/ModulesAfterRemovedEvent.php b/app/Events/ModulesAfterRemovedEvent.php index d483f12c9..afd237a5f 100644 --- a/app/Events/ModulesAfterRemovedEvent.php +++ b/app/Events/ModulesAfterRemovedEvent.php @@ -28,6 +28,6 @@ public function __construct() */ public function broadcastOn() { - return new PrivateChannel('channel-name'); + return new PrivateChannel( 'channel-name' ); } } diff --git a/app/Events/ModulesBeforeDisabledEvent.php b/app/Events/ModulesBeforeDisabledEvent.php index 868b58d70..0a274172c 100644 --- a/app/Events/ModulesBeforeDisabledEvent.php +++ b/app/Events/ModulesBeforeDisabledEvent.php @@ -16,7 +16,7 @@ class ModulesBeforeDisabledEvent * * @return void */ - public function __construct(public $module) + public function __construct( public $module ) { // } @@ -28,6 +28,6 @@ public function __construct(public $module) */ public function broadcastOn() { - return new PrivateChannel('channel-name'); + return new PrivateChannel( 'channel-name' ); } } diff --git a/app/Events/ModulesBeforeEnabledEvent.php b/app/Events/ModulesBeforeEnabledEvent.php index 9fdb95c96..3936b0ae2 100644 --- a/app/Events/ModulesBeforeEnabledEvent.php +++ b/app/Events/ModulesBeforeEnabledEvent.php @@ -16,7 +16,7 @@ class ModulesBeforeEnabledEvent * * @return void */ - public function __construct(public $module) + public function __construct( public $module ) { // } @@ -28,6 +28,6 @@ public function __construct(public $module) */ public function broadcastOn() { - return new PrivateChannel('channel-name'); + return new PrivateChannel( 'channel-name' ); } } diff --git a/app/Events/ModulesBeforeRemovedEvent.php b/app/Events/ModulesBeforeRemovedEvent.php index 574814161..8f8002c25 100644 --- a/app/Events/ModulesBeforeRemovedEvent.php +++ b/app/Events/ModulesBeforeRemovedEvent.php @@ -16,7 +16,7 @@ class ModulesBeforeRemovedEvent * * @return void */ - public function __construct(public array $module) + public function __construct( public array $module ) { // } @@ -28,6 +28,6 @@ public function __construct(public array $module) */ public function broadcastOn() { - return new PrivateChannel('channel-name'); + return new PrivateChannel( 'channel-name' ); } } diff --git a/app/Events/NotificationCreatedEvent.php b/app/Events/NotificationCreatedEvent.php index 9c53336ff..182ea573c 100644 --- a/app/Events/NotificationCreatedEvent.php +++ b/app/Events/NotificationCreatedEvent.php @@ -28,6 +28,6 @@ public function __construct() */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/NotificationDeletedEvent.php b/app/Events/NotificationDeletedEvent.php index b37292baa..1c21dd42e 100644 --- a/app/Events/NotificationDeletedEvent.php +++ b/app/Events/NotificationDeletedEvent.php @@ -18,7 +18,7 @@ class NotificationDeletedEvent implements ShouldBroadcast * * @return void */ - public function __construct(public Notification $notification) + public function __construct( public Notification $notification ) { // ... } @@ -30,6 +30,6 @@ public function __construct(public Notification $notification) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/NotificationDispatchedEvent.php b/app/Events/NotificationDispatchedEvent.php index 8ae0ca303..3d95f2e34 100644 --- a/app/Events/NotificationDispatchedEvent.php +++ b/app/Events/NotificationDispatchedEvent.php @@ -18,7 +18,7 @@ class NotificationDispatchedEvent implements ShouldBroadcast * * @return void */ - public function __construct(public Notification $notification) + public function __construct( public Notification $notification ) { // ... } @@ -30,6 +30,6 @@ public function __construct(public Notification $notification) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/OrderAfterCheckPerformedEvent.php b/app/Events/OrderAfterCheckPerformedEvent.php index a1ad1581f..e56279b04 100644 --- a/app/Events/OrderAfterCheckPerformedEvent.php +++ b/app/Events/OrderAfterCheckPerformedEvent.php @@ -15,7 +15,7 @@ class OrderAfterCheckPerformedEvent * * @return void */ - public function __construct(public $fields, public $order) + public function __construct( public $fields, public $order ) { // ... } diff --git a/app/Events/OrderAfterCreatedEvent.php b/app/Events/OrderAfterCreatedEvent.php index 91ce9e838..25fd8a962 100644 --- a/app/Events/OrderAfterCreatedEvent.php +++ b/app/Events/OrderAfterCreatedEvent.php @@ -13,7 +13,7 @@ class OrderAfterCreatedEvent implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; - public function __construct(public Order $order, public $fields) + public function __construct( public Order $order, public $fields ) { // ... } @@ -25,6 +25,6 @@ public function __construct(public Order $order, public $fields) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/OrderAfterDeletedEvent.php b/app/Events/OrderAfterDeletedEvent.php index b62333cb7..f96cabab3 100644 --- a/app/Events/OrderAfterDeletedEvent.php +++ b/app/Events/OrderAfterDeletedEvent.php @@ -17,7 +17,7 @@ class OrderAfterDeletedEvent implements ShouldBroadcast * * @return void */ - public function __construct(public $order) + public function __construct( public $order ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public $order) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/OrderAfterInstalmentPaidEvent.php b/app/Events/OrderAfterInstalmentPaidEvent.php index 360221584..2d55ca995 100644 --- a/app/Events/OrderAfterInstalmentPaidEvent.php +++ b/app/Events/OrderAfterInstalmentPaidEvent.php @@ -17,7 +17,7 @@ class OrderAfterInstalmentPaidEvent * * @return void */ - public function __construct(public OrderInstalment $instalment, public Order $order) + public function __construct( public OrderInstalment $instalment, public Order $order ) { // ... } diff --git a/app/Events/OrderAfterPaymentCreatedEvent.php b/app/Events/OrderAfterPaymentCreatedEvent.php index da8496fc6..4de0d7487 100644 --- a/app/Events/OrderAfterPaymentCreatedEvent.php +++ b/app/Events/OrderAfterPaymentCreatedEvent.php @@ -18,7 +18,7 @@ class OrderAfterPaymentCreatedEvent * * @return void */ - public function __construct(public OrderPayment $orderPayment, public Order $order) + public function __construct( public OrderPayment $orderPayment, public Order $order ) { // ... } @@ -30,6 +30,6 @@ public function __construct(public OrderPayment $orderPayment, public Order $ord */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/OrderAfterPaymentStatusChangedEvent.php b/app/Events/OrderAfterPaymentStatusChangedEvent.php index 6f903766f..4d1b9c5db 100644 --- a/app/Events/OrderAfterPaymentStatusChangedEvent.php +++ b/app/Events/OrderAfterPaymentStatusChangedEvent.php @@ -16,7 +16,7 @@ class OrderAfterPaymentStatusChangedEvent * * @return void */ - public function __construct(public Order $order, public $previous, public $new) + public function __construct( public Order $order, public $previous, public $new ) { // ... } diff --git a/app/Events/OrderAfterPrintedEvent.php b/app/Events/OrderAfterPrintedEvent.php index 0a92fe263..13016cf13 100644 --- a/app/Events/OrderAfterPrintedEvent.php +++ b/app/Events/OrderAfterPrintedEvent.php @@ -18,7 +18,7 @@ class OrderAfterPrintedEvent implements ShouldBroadcast * * @return void */ - public function __construct(public Order $order, public $doc) + public function __construct( public Order $order, public $doc ) { // ... } @@ -30,6 +30,6 @@ public function __construct(public Order $order, public $doc) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/OrderAfterProductRefundedEvent.php b/app/Events/OrderAfterProductRefundedEvent.php index 13961900a..7fc5551c4 100644 --- a/app/Events/OrderAfterProductRefundedEvent.php +++ b/app/Events/OrderAfterProductRefundedEvent.php @@ -13,7 +13,7 @@ class OrderAfterProductRefundedEvent { use Dispatchable, InteractsWithSockets, SerializesModels; - public function __construct(public Order $order, public OrderProduct $orderProduct, public OrderProductRefund $orderProductRefund) + public function __construct( public Order $order, public OrderProduct $orderProduct, public OrderProductRefund $orderProductRefund ) { // ... } diff --git a/app/Events/OrderAfterProductStockCheckedEvent.php b/app/Events/OrderAfterProductStockCheckedEvent.php index 12c09472c..2bb1d440d 100644 --- a/app/Events/OrderAfterProductStockCheckedEvent.php +++ b/app/Events/OrderAfterProductStockCheckedEvent.php @@ -16,7 +16,7 @@ class OrderAfterProductStockCheckedEvent * * @return void */ - public function __construct(public $items, public $session_identifier) + public function __construct( public $items, public $session_identifier ) { // ... } @@ -28,6 +28,6 @@ public function __construct(public $items, public $session_identifier) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/OrderAfterRefundedEvent.php b/app/Events/OrderAfterRefundedEvent.php index b46462a45..52896f96b 100644 --- a/app/Events/OrderAfterRefundedEvent.php +++ b/app/Events/OrderAfterRefundedEvent.php @@ -32,6 +32,6 @@ public function __construct( */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/OrderAfterUpdatedDeliveryStatus.php b/app/Events/OrderAfterUpdatedDeliveryStatus.php index f5bf89810..7dee72613 100644 --- a/app/Events/OrderAfterUpdatedDeliveryStatus.php +++ b/app/Events/OrderAfterUpdatedDeliveryStatus.php @@ -16,7 +16,7 @@ class OrderAfterUpdatedDeliveryStatus * * @return void */ - public function __construct(public Order $order) + public function __construct( public Order $order ) { // ... } diff --git a/app/Events/OrderAfterUpdatedEvent.php b/app/Events/OrderAfterUpdatedEvent.php index 30008510e..719719054 100644 --- a/app/Events/OrderAfterUpdatedEvent.php +++ b/app/Events/OrderAfterUpdatedEvent.php @@ -18,7 +18,7 @@ class OrderAfterUpdatedEvent implements ShouldBroadcast * * @return void */ - public function __construct(public Order $order, public $fields = []) + public function __construct( public Order $order, public $fields = [] ) { // ... } @@ -30,6 +30,6 @@ public function __construct(public Order $order, public $fields = []) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/OrderAfterUpdatedProcessStatus.php b/app/Events/OrderAfterUpdatedProcessStatus.php index a431047bb..de7c7d4dd 100644 --- a/app/Events/OrderAfterUpdatedProcessStatus.php +++ b/app/Events/OrderAfterUpdatedProcessStatus.php @@ -16,7 +16,7 @@ class OrderAfterUpdatedProcessStatus * * @return void */ - public function __construct(public Order $order) + public function __construct( public Order $order ) { // ... } diff --git a/app/Events/OrderBeforeDeleteEvent.php b/app/Events/OrderBeforeDeleteEvent.php index 60da8d5c7..e6c0d3eae 100644 --- a/app/Events/OrderBeforeDeleteEvent.php +++ b/app/Events/OrderBeforeDeleteEvent.php @@ -10,7 +10,7 @@ class OrderBeforeDeleteEvent { use Dispatchable, InteractsWithSockets, SerializesModels; - public function __construct(public $order) + public function __construct( public $order ) { // ... } diff --git a/app/Events/OrderBeforeDeleteProductEvent.php b/app/Events/OrderBeforeDeleteProductEvent.php index 5b15510aa..e6d00286d 100644 --- a/app/Events/OrderBeforeDeleteProductEvent.php +++ b/app/Events/OrderBeforeDeleteProductEvent.php @@ -10,7 +10,7 @@ class OrderBeforeDeleteProductEvent { use SerializesModels; - public function __construct(public Order $order, public OrderProduct $orderProduct) + public function __construct( public Order $order, public OrderProduct $orderProduct ) { // ... } diff --git a/app/Events/OrderBeforePaymentCreatedEvent.php b/app/Events/OrderBeforePaymentCreatedEvent.php index 377be4c02..007a9b255 100644 --- a/app/Events/OrderBeforePaymentCreatedEvent.php +++ b/app/Events/OrderBeforePaymentCreatedEvent.php @@ -17,7 +17,7 @@ class OrderBeforePaymentCreatedEvent * * @return void */ - public function __construct(public $payment, public Customer $customer) + public function __construct( public $payment, public Customer $customer ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public $payment, public Customer $customer) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/OrderBeforeUpdateEvent.php b/app/Events/OrderBeforeUpdateEvent.php index 51ed19ca0..4a58dfb08 100644 --- a/app/Events/OrderBeforeUpdateEvent.php +++ b/app/Events/OrderBeforeUpdateEvent.php @@ -28,6 +28,6 @@ public function __construct() */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/OrderCouponAfterCreatedEvent.php b/app/Events/OrderCouponAfterCreatedEvent.php index 53fecc5dd..201bb90ff 100644 --- a/app/Events/OrderCouponAfterCreatedEvent.php +++ b/app/Events/OrderCouponAfterCreatedEvent.php @@ -17,7 +17,7 @@ class OrderCouponAfterCreatedEvent * * @return void */ - public function __construct(public OrderCoupon $orderCoupon, public Order $order) + public function __construct( public OrderCoupon $orderCoupon, public Order $order ) { // ... } diff --git a/app/Events/OrderCouponBeforeCreatedEvent.php b/app/Events/OrderCouponBeforeCreatedEvent.php index 554e46fc4..f02cf908a 100644 --- a/app/Events/OrderCouponBeforeCreatedEvent.php +++ b/app/Events/OrderCouponBeforeCreatedEvent.php @@ -17,7 +17,7 @@ class OrderCouponBeforeCreatedEvent * * @return void */ - public function __construct(public Coupon $coupon, public Order $order) + public function __construct( public Coupon $coupon, public Order $order ) { // ... } diff --git a/app/Events/OrderProductAfterComputedEvent.php b/app/Events/OrderProductAfterComputedEvent.php index b769f1501..ebef5ab7c 100644 --- a/app/Events/OrderProductAfterComputedEvent.php +++ b/app/Events/OrderProductAfterComputedEvent.php @@ -16,7 +16,7 @@ class OrderProductAfterComputedEvent * * @return void */ - public function __construct(public OrderProduct $orderProduct) + public function __construct( public OrderProduct $orderProduct ) { // ... } diff --git a/app/Events/OrderProductAfterSavedEvent.php b/app/Events/OrderProductAfterSavedEvent.php index ba277a062..60ba7de33 100644 --- a/app/Events/OrderProductAfterSavedEvent.php +++ b/app/Events/OrderProductAfterSavedEvent.php @@ -18,7 +18,7 @@ class OrderProductAfterSavedEvent * * @return void */ - public function __construct(public OrderProduct $product, public Order $order, public array $postData) + public function __construct( public OrderProduct $product, public Order $order, public array $postData ) { // ... } @@ -30,6 +30,6 @@ public function __construct(public OrderProduct $product, public Order $order, p */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/OrderProductBeforeSavedEvent.php b/app/Events/OrderProductBeforeSavedEvent.php index 885783a7c..f58bfad84 100644 --- a/app/Events/OrderProductBeforeSavedEvent.php +++ b/app/Events/OrderProductBeforeSavedEvent.php @@ -16,7 +16,7 @@ class OrderProductBeforeSavedEvent * * @return void */ - public function __construct(public OrderProduct $orderProduct, public $data) + public function __construct( public OrderProduct $orderProduct, public $data ) { // ... } diff --git a/app/Events/OrderRefundPaymentAfterCreatedEvent.php b/app/Events/OrderRefundPaymentAfterCreatedEvent.php index acea2d169..f73d9e75e 100644 --- a/app/Events/OrderRefundPaymentAfterCreatedEvent.php +++ b/app/Events/OrderRefundPaymentAfterCreatedEvent.php @@ -17,7 +17,7 @@ class OrderRefundPaymentAfterCreatedEvent * * @return void */ - public function __construct(public OrderRefund $refund) + public function __construct( public OrderRefund $refund ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public OrderRefund $refund) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/OrderVoidedEvent.php b/app/Events/OrderVoidedEvent.php index 3d47a6105..4c8fca1bb 100644 --- a/app/Events/OrderVoidedEvent.php +++ b/app/Events/OrderVoidedEvent.php @@ -17,7 +17,7 @@ class OrderVoidedEvent * * @return void */ - public function __construct(public Order $order) + public function __construct( public Order $order ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public Order $order) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/PasswordAfterRecoveredEvent.php b/app/Events/PasswordAfterRecoveredEvent.php index 5f89a08fd..43661ba9c 100644 --- a/app/Events/PasswordAfterRecoveredEvent.php +++ b/app/Events/PasswordAfterRecoveredEvent.php @@ -17,7 +17,7 @@ class PasswordAfterRecoveredEvent * * @return void */ - public function __construct(public User $user) + public function __construct( public User $user ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public User $user) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProcurementAfterCreateEvent.php b/app/Events/ProcurementAfterCreateEvent.php index f19b4cfc1..9b4f2edfc 100644 --- a/app/Events/ProcurementAfterCreateEvent.php +++ b/app/Events/ProcurementAfterCreateEvent.php @@ -16,7 +16,7 @@ class ProcurementAfterCreateEvent * * @return void */ - public function __construct(public Procurement $procurement) + public function __construct( public Procurement $procurement ) { // ... } diff --git a/app/Events/ProcurementAfterDeleteEvent.php b/app/Events/ProcurementAfterDeleteEvent.php index 93b3872f3..e09009c32 100644 --- a/app/Events/ProcurementAfterDeleteEvent.php +++ b/app/Events/ProcurementAfterDeleteEvent.php @@ -8,7 +8,7 @@ class ProcurementAfterDeleteEvent { use SerializesModels; - public function __construct(public $procurement_data) + public function __construct( public $procurement_data ) { // ... } diff --git a/app/Events/ProcurementAfterDeleteProductEvent.php b/app/Events/ProcurementAfterDeleteProductEvent.php index be8e9b328..cdc0798e5 100644 --- a/app/Events/ProcurementAfterDeleteProductEvent.php +++ b/app/Events/ProcurementAfterDeleteProductEvent.php @@ -9,7 +9,7 @@ class ProcurementAfterDeleteProductEvent { use SerializesModels; - public function __construct(public $product_id, public Procurement $procurement) + public function __construct( public $product_id, public Procurement $procurement ) { // ... } diff --git a/app/Events/ProcurementAfterHandledEvent.php b/app/Events/ProcurementAfterHandledEvent.php index 56bbfb19f..2eff4afc0 100644 --- a/app/Events/ProcurementAfterHandledEvent.php +++ b/app/Events/ProcurementAfterHandledEvent.php @@ -17,7 +17,7 @@ class ProcurementAfterHandledEvent * * @return void */ - public function __construct(public Procurement $procurement) + public function __construct( public Procurement $procurement ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public Procurement $procurement) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProcurementAfterSaveProductEvent.php b/app/Events/ProcurementAfterSaveProductEvent.php index 8418566f2..4e4d7eb53 100644 --- a/app/Events/ProcurementAfterSaveProductEvent.php +++ b/app/Events/ProcurementAfterSaveProductEvent.php @@ -18,7 +18,7 @@ class ProcurementAfterSaveProductEvent * * @return void */ - public function __construct(public Procurement $procurement, public ProcurementProduct $product, public array $data) + public function __construct( public Procurement $procurement, public ProcurementProduct $product, public array $data ) { // ... } @@ -30,6 +30,6 @@ public function __construct(public Procurement $procurement, public ProcurementP */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProcurementAfterUpdateEvent.php b/app/Events/ProcurementAfterUpdateEvent.php index abcc436a6..024eb75a1 100644 --- a/app/Events/ProcurementAfterUpdateEvent.php +++ b/app/Events/ProcurementAfterUpdateEvent.php @@ -17,7 +17,7 @@ class ProcurementAfterUpdateEvent * * @return void */ - public function __construct(public Procurement $procurement) + public function __construct( public Procurement $procurement ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public Procurement $procurement) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProcurementAfterUpdateProductEvent.php b/app/Events/ProcurementAfterUpdateProductEvent.php index 299ca6f86..f9b2541ab 100644 --- a/app/Events/ProcurementAfterUpdateProductEvent.php +++ b/app/Events/ProcurementAfterUpdateProductEvent.php @@ -9,7 +9,7 @@ class ProcurementAfterUpdateProductEvent { use SerializesModels; - public function __construct(public ProcurementProduct $product, public $fields) + public function __construct( public ProcurementProduct $product, public $fields ) { // ... } diff --git a/app/Events/ProcurementBeforeCreateEvent.php b/app/Events/ProcurementBeforeCreateEvent.php index 796247aa6..103749b02 100644 --- a/app/Events/ProcurementBeforeCreateEvent.php +++ b/app/Events/ProcurementBeforeCreateEvent.php @@ -17,7 +17,7 @@ class ProcurementBeforeCreateEvent * * @return void */ - public function __construct(public Procurement $procurement) + public function __construct( public Procurement $procurement ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public Procurement $procurement) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProcurementBeforeDeleteEvent.php b/app/Events/ProcurementBeforeDeleteEvent.php index 343add981..835ed2010 100644 --- a/app/Events/ProcurementBeforeDeleteEvent.php +++ b/app/Events/ProcurementBeforeDeleteEvent.php @@ -9,7 +9,7 @@ class ProcurementBeforeDeleteEvent { use SerializesModels; - public function __construct(public Procurement $procurement) + public function __construct( public Procurement $procurement ) { // ... } diff --git a/app/Events/ProcurementBeforeDeleteProductEvent.php b/app/Events/ProcurementBeforeDeleteProductEvent.php index 0952d3f27..055dc3e3c 100644 --- a/app/Events/ProcurementBeforeDeleteProductEvent.php +++ b/app/Events/ProcurementBeforeDeleteProductEvent.php @@ -9,7 +9,7 @@ class ProcurementBeforeDeleteProductEvent { use SerializesModels; - public function __construct(public ProcurementProduct $product) + public function __construct( public ProcurementProduct $product ) { // ... } diff --git a/app/Events/ProcurementBeforeHandledEvent.php b/app/Events/ProcurementBeforeHandledEvent.php index e0eef8a2b..8232906bc 100644 --- a/app/Events/ProcurementBeforeHandledEvent.php +++ b/app/Events/ProcurementBeforeHandledEvent.php @@ -17,7 +17,7 @@ class ProcurementBeforeHandledEvent * * @return void */ - public function __construct(public Procurement $procurement) + public function __construct( public Procurement $procurement ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public Procurement $procurement) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProcurementBeforeUpdateEvent.php b/app/Events/ProcurementBeforeUpdateEvent.php index cff9c03b4..1cc065bec 100644 --- a/app/Events/ProcurementBeforeUpdateEvent.php +++ b/app/Events/ProcurementBeforeUpdateEvent.php @@ -17,7 +17,7 @@ class ProcurementBeforeUpdateEvent * * @return void */ - public function __construct(public Procurement $procurement) + public function __construct( public Procurement $procurement ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public Procurement $procurement) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProcurementBeforeUpdateProductEvent.php b/app/Events/ProcurementBeforeUpdateProductEvent.php index c903dfa97..403594011 100644 --- a/app/Events/ProcurementBeforeUpdateProductEvent.php +++ b/app/Events/ProcurementBeforeUpdateProductEvent.php @@ -9,7 +9,7 @@ class ProcurementBeforeUpdateProductEvent { use SerializesModels; - public function __construct(public ProcurementProduct $product, public $fields) + public function __construct( public ProcurementProduct $product, public $fields ) { // ... } diff --git a/app/Events/ProcurementCancelationEvent.php b/app/Events/ProcurementCancelationEvent.php index a366cb1af..e10fa2029 100644 --- a/app/Events/ProcurementCancelationEvent.php +++ b/app/Events/ProcurementCancelationEvent.php @@ -9,7 +9,7 @@ class ProcurementCancelationEvent { use SerializesModels; - public function __construct(public Procurement $procurement) + public function __construct( public Procurement $procurement ) { // ... } diff --git a/app/Events/ProcurementDeletionEvent.php b/app/Events/ProcurementDeletionEvent.php index 0cad20ab4..1a69b9781 100644 --- a/app/Events/ProcurementDeletionEvent.php +++ b/app/Events/ProcurementDeletionEvent.php @@ -9,7 +9,7 @@ class ProcurementDeletionEvent { use SerializesModels; - public function __construct(public Procurement $procurement) + public function __construct( public Procurement $procurement ) { // ... } diff --git a/app/Events/ProcurementDeliveryEvent.php b/app/Events/ProcurementDeliveryEvent.php index 6ab9e1db8..bddf39c63 100644 --- a/app/Events/ProcurementDeliveryEvent.php +++ b/app/Events/ProcurementDeliveryEvent.php @@ -9,7 +9,7 @@ class ProcurementDeliveryEvent { use SerializesModels; - public function __construct(public Procurement $procurement) + public function __construct( public Procurement $procurement ) { // ... } diff --git a/app/Events/ProcurementProductAfterCreateEvent.php b/app/Events/ProcurementProductAfterCreateEvent.php index 755e355fc..5fc91f871 100644 --- a/app/Events/ProcurementProductAfterCreateEvent.php +++ b/app/Events/ProcurementProductAfterCreateEvent.php @@ -17,7 +17,7 @@ class ProcurementProductAfterCreateEvent * * @return void */ - public function __construct(public ProcurementProduct $product) + public function __construct( public ProcurementProduct $product ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public ProcurementProduct $product) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProcurementProductAfterDeleteEvent.php b/app/Events/ProcurementProductAfterDeleteEvent.php index 54b3e09b3..0a351612a 100644 --- a/app/Events/ProcurementProductAfterDeleteEvent.php +++ b/app/Events/ProcurementProductAfterDeleteEvent.php @@ -17,7 +17,7 @@ class ProcurementProductAfterDeleteEvent * * @return void */ - public function __construct(public ProcurementProduct $product) + public function __construct( public ProcurementProduct $product ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public ProcurementProduct $product) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProcurementProductAfterUpdateEvent.php b/app/Events/ProcurementProductAfterUpdateEvent.php index bf70fb340..69fce3114 100644 --- a/app/Events/ProcurementProductAfterUpdateEvent.php +++ b/app/Events/ProcurementProductAfterUpdateEvent.php @@ -17,7 +17,7 @@ class ProcurementProductAfterUpdateEvent * * @return void */ - public function __construct(public ProcurementProduct $product) + public function __construct( public ProcurementProduct $product ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public ProcurementProduct $product) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProcurementProductBeforeCreateEvent.php b/app/Events/ProcurementProductBeforeCreateEvent.php index a43e47180..acc1965b1 100644 --- a/app/Events/ProcurementProductBeforeCreateEvent.php +++ b/app/Events/ProcurementProductBeforeCreateEvent.php @@ -17,7 +17,7 @@ class ProcurementProductBeforeCreateEvent * * @return void */ - public function __construct(public ProcurementProduct $product) + public function __construct( public ProcurementProduct $product ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public ProcurementProduct $product) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProcurementProductBeforeDeleteEvent.php b/app/Events/ProcurementProductBeforeDeleteEvent.php index 0f9970571..4cb24e90a 100644 --- a/app/Events/ProcurementProductBeforeDeleteEvent.php +++ b/app/Events/ProcurementProductBeforeDeleteEvent.php @@ -17,7 +17,7 @@ class ProcurementProductBeforeDeleteEvent * * @return void */ - public function __construct(public ProcurementProduct $product) + public function __construct( public ProcurementProduct $product ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public ProcurementProduct $product) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProcurementProductBeforeUpdateEvent.php b/app/Events/ProcurementProductBeforeUpdateEvent.php index 4e4179cb7..ae4daaff7 100644 --- a/app/Events/ProcurementProductBeforeUpdateEvent.php +++ b/app/Events/ProcurementProductBeforeUpdateEvent.php @@ -17,7 +17,7 @@ class ProcurementProductBeforeUpdateEvent * * @return void */ - public function __construct(public ProcurementProduct $product) + public function __construct( public ProcurementProduct $product ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public ProcurementProduct $product) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProcurementProductSavedEvent.php b/app/Events/ProcurementProductSavedEvent.php index 76510c992..da2bce443 100644 --- a/app/Events/ProcurementProductSavedEvent.php +++ b/app/Events/ProcurementProductSavedEvent.php @@ -9,7 +9,7 @@ class ProcurementProductSavedEvent { use SerializesModels; - public function __construct(public ProcurementProduct $product) + public function __construct( public ProcurementProduct $product ) { // ... } diff --git a/app/Events/ProcurementRefreshedEvent.php b/app/Events/ProcurementRefreshedEvent.php index 8effc02c8..87528103d 100644 --- a/app/Events/ProcurementRefreshedEvent.php +++ b/app/Events/ProcurementRefreshedEvent.php @@ -17,7 +17,7 @@ class ProcurementRefreshedEvent * * @return void */ - public function __construct(public Procurement $procurement) + public function __construct( public Procurement $procurement ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public Procurement $procurement) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProductAfterCreatedEvent.php b/app/Events/ProductAfterCreatedEvent.php index 17acb7f0e..efc5a07dc 100644 --- a/app/Events/ProductAfterCreatedEvent.php +++ b/app/Events/ProductAfterCreatedEvent.php @@ -17,7 +17,7 @@ class ProductAfterCreatedEvent * * @return void */ - public function __construct(public Product $product) + public function __construct( public Product $product ) { // ... } @@ -29,6 +29,6 @@ public function __construct(public Product $product) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProductAfterDeleteEvent.php b/app/Events/ProductAfterDeleteEvent.php index 73b4c5aaf..5c20e6fb7 100644 --- a/app/Events/ProductAfterDeleteEvent.php +++ b/app/Events/ProductAfterDeleteEvent.php @@ -9,7 +9,7 @@ class ProductAfterDeleteEvent { use SerializesModels; - public function __construct(public Product $product) + public function __construct( public Product $product ) { // ... } diff --git a/app/Events/ProductAfterStockAdjustmentEvent.php b/app/Events/ProductAfterStockAdjustmentEvent.php index 8eaa8327d..ca5f28271 100644 --- a/app/Events/ProductAfterStockAdjustmentEvent.php +++ b/app/Events/ProductAfterStockAdjustmentEvent.php @@ -16,7 +16,7 @@ class ProductAfterStockAdjustmentEvent * * @return void */ - public function __construct(public ProductHistory $history) + public function __construct( public ProductHistory $history ) { // ... } diff --git a/app/Events/ProductAfterUpdatedEvent.php b/app/Events/ProductAfterUpdatedEvent.php index 338449b3b..9e8c9de67 100644 --- a/app/Events/ProductAfterUpdatedEvent.php +++ b/app/Events/ProductAfterUpdatedEvent.php @@ -17,7 +17,7 @@ class ProductAfterUpdatedEvent * * @return void */ - public function __construct(public Product $product) + public function __construct( public Product $product ) { // } @@ -29,6 +29,6 @@ public function __construct(public Product $product) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/ProductBeforeCreatedEvent.php b/app/Events/ProductBeforeCreatedEvent.php index 942622138..2538f62cf 100644 --- a/app/Events/ProductBeforeCreatedEvent.php +++ b/app/Events/ProductBeforeCreatedEvent.php @@ -15,7 +15,7 @@ class ProductBeforeCreatedEvent /** * Create a new event instance. */ - public function __construct(public Product $product) + public function __construct( public Product $product ) { // } @@ -28,7 +28,7 @@ public function __construct(public Product $product) public function broadcastOn(): array { return [ - new PrivateChannel('channel-name'), + new PrivateChannel( 'channel-name' ), ]; } } diff --git a/app/Events/ProductBeforeDeleteEvent.php b/app/Events/ProductBeforeDeleteEvent.php index ec072f2e7..f886ad4be 100644 --- a/app/Events/ProductBeforeDeleteEvent.php +++ b/app/Events/ProductBeforeDeleteEvent.php @@ -16,7 +16,7 @@ class ProductBeforeDeleteEvent * * @return void */ - public function __construct(public Product $product) + public function __construct( public Product $product ) { // ... } diff --git a/app/Events/ProductBeforeUpdatedEvent.php b/app/Events/ProductBeforeUpdatedEvent.php index 6182b9510..474946754 100644 --- a/app/Events/ProductBeforeUpdatedEvent.php +++ b/app/Events/ProductBeforeUpdatedEvent.php @@ -15,7 +15,7 @@ class ProductBeforeUpdatedEvent /** * Create a new event instance. */ - public function __construct(public Product $product) + public function __construct( public Product $product ) { // } @@ -28,7 +28,7 @@ public function __construct(public Product $product) public function broadcastOn(): array { return [ - new PrivateChannel('channel-name'), + new PrivateChannel( 'channel-name' ), ]; } } diff --git a/app/Events/ProductCategoryAfterCreatedEvent.php b/app/Events/ProductCategoryAfterCreatedEvent.php index c301a4659..6b870e312 100644 --- a/app/Events/ProductCategoryAfterCreatedEvent.php +++ b/app/Events/ProductCategoryAfterCreatedEvent.php @@ -16,7 +16,7 @@ class ProductCategoryAfterCreatedEvent * * @return void */ - public function __construct(public ProductCategory $category) + public function __construct( public ProductCategory $category ) { // ... } diff --git a/app/Events/ProductCategoryAfterUpdatedEvent.php b/app/Events/ProductCategoryAfterUpdatedEvent.php index 5c75ab343..b92896c4e 100644 --- a/app/Events/ProductCategoryAfterUpdatedEvent.php +++ b/app/Events/ProductCategoryAfterUpdatedEvent.php @@ -16,7 +16,7 @@ class ProductCategoryAfterUpdatedEvent * * @return void */ - public function __construct(public ProductCategory $category) + public function __construct( public ProductCategory $category ) { // ... } diff --git a/app/Events/ProductCategoryBeforeDeletedEvent.php b/app/Events/ProductCategoryBeforeDeletedEvent.php index 66ab488cb..0e1fbdba0 100644 --- a/app/Events/ProductCategoryBeforeDeletedEvent.php +++ b/app/Events/ProductCategoryBeforeDeletedEvent.php @@ -16,7 +16,7 @@ class ProductCategoryBeforeDeletedEvent * * @return void */ - public function __construct(public ProductCategory $category) + public function __construct( public ProductCategory $category ) { // ... } diff --git a/app/Events/ProductHistoryAfterCreatedEvent.php b/app/Events/ProductHistoryAfterCreatedEvent.php index 6ab2a9e36..eb2917f77 100644 --- a/app/Events/ProductHistoryAfterCreatedEvent.php +++ b/app/Events/ProductHistoryAfterCreatedEvent.php @@ -15,7 +15,7 @@ class ProductHistoryAfterCreatedEvent /** * Create a new event instance. */ - public function __construct(public ProductHistory $productHistory) + public function __construct( public ProductHistory $productHistory ) { // } @@ -28,7 +28,7 @@ public function __construct(public ProductHistory $productHistory) public function broadcastOn(): array { return [ - new PrivateChannel('channel-name'), + new PrivateChannel( 'channel-name' ), ]; } } diff --git a/app/Events/ProductHistoryAfterUpdatedEvent.php b/app/Events/ProductHistoryAfterUpdatedEvent.php index 15d71d302..710cbc6a6 100644 --- a/app/Events/ProductHistoryAfterUpdatedEvent.php +++ b/app/Events/ProductHistoryAfterUpdatedEvent.php @@ -15,7 +15,7 @@ class ProductHistoryAfterUpdatedEvent /** * Create a new event instance. */ - public function __construct(public ProductHistory $productHistory) + public function __construct( public ProductHistory $productHistory ) { // } @@ -28,7 +28,7 @@ public function __construct(public ProductHistory $productHistory) public function broadcastOn(): array { return [ - new PrivateChannel('channel-name'), + new PrivateChannel( 'channel-name' ), ]; } } diff --git a/app/Events/ProductResetEvent.php b/app/Events/ProductResetEvent.php index e3bcc9c9a..ccfcb26ff 100644 --- a/app/Events/ProductResetEvent.php +++ b/app/Events/ProductResetEvent.php @@ -9,7 +9,7 @@ class ProductResetEvent { use SerializesModels; - public function __construct(public Product $product) + public function __construct( public Product $product ) { // ... } diff --git a/app/Events/ProductUnitQuantityAfterCreatedEvent.php b/app/Events/ProductUnitQuantityAfterCreatedEvent.php index d575fbd01..00a96fd28 100644 --- a/app/Events/ProductUnitQuantityAfterCreatedEvent.php +++ b/app/Events/ProductUnitQuantityAfterCreatedEvent.php @@ -17,7 +17,7 @@ class ProductUnitQuantityAfterCreatedEvent * * @return void */ - public function __construct(public ProductUnitQuantity $productUnitQuantity) + public function __construct( public ProductUnitQuantity $productUnitQuantity ) { // } @@ -29,6 +29,6 @@ public function __construct(public ProductUnitQuantity $productUnitQuantity) */ public function broadcastOn() { - return new PrivateChannel('channel-name'); + return new PrivateChannel( 'channel-name' ); } } diff --git a/app/Events/ProductUnitQuantityAfterUpdatedEvent.php b/app/Events/ProductUnitQuantityAfterUpdatedEvent.php index 7f374bb30..a67e65499 100644 --- a/app/Events/ProductUnitQuantityAfterUpdatedEvent.php +++ b/app/Events/ProductUnitQuantityAfterUpdatedEvent.php @@ -17,7 +17,7 @@ class ProductUnitQuantityAfterUpdatedEvent * * @return void */ - public function __construct(public ProductUnitQuantity $productUnitQuantity) + public function __construct( public ProductUnitQuantity $productUnitQuantity ) { // } @@ -29,6 +29,6 @@ public function __construct(public ProductUnitQuantity $productUnitQuantity) */ public function broadcastOn() { - return new PrivateChannel('channel-name'); + return new PrivateChannel( 'channel-name' ); } } diff --git a/app/Events/ResponseReadyEvent.php b/app/Events/ResponseReadyEvent.php index a499fa9cc..0faa8bb11 100644 --- a/app/Events/ResponseReadyEvent.php +++ b/app/Events/ResponseReadyEvent.php @@ -15,7 +15,7 @@ class ResponseReadyEvent * * @return void */ - public function __construct(public $response) + public function __construct( public $response ) { // } diff --git a/app/Events/SettingsSavedEvent.php b/app/Events/SettingsSavedEvent.php index e65e00644..2a7eaf4d9 100644 --- a/app/Events/SettingsSavedEvent.php +++ b/app/Events/SettingsSavedEvent.php @@ -16,7 +16,7 @@ class SettingsSavedEvent * * @return void */ - public function __construct(public $options, public $inputs, public $class) + public function __construct( public $options, public $inputs, public $class ) { // ... } @@ -28,6 +28,6 @@ public function __construct(public $options, public $inputs, public $class) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/TransactionAfterCreatedEvent.php b/app/Events/TransactionAfterCreatedEvent.php index 8d7e10c2e..f754f6338 100644 --- a/app/Events/TransactionAfterCreatedEvent.php +++ b/app/Events/TransactionAfterCreatedEvent.php @@ -16,7 +16,7 @@ class TransactionAfterCreatedEvent * * @return void */ - public function __construct(public Transaction $transaction, public array $inputs) + public function __construct( public Transaction $transaction, public array $inputs ) { // ... } diff --git a/app/Events/TransactionAfterRefreshEvent.php b/app/Events/TransactionAfterRefreshEvent.php index 48fa3776a..d70cbb6db 100644 --- a/app/Events/TransactionAfterRefreshEvent.php +++ b/app/Events/TransactionAfterRefreshEvent.php @@ -16,7 +16,7 @@ class TransactionAfterRefreshEvent * * @return void */ - public function __construct(public $event, public $date) + public function __construct( public $event, public $date ) { // ... } @@ -28,6 +28,6 @@ public function __construct(public $event, public $date) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/TransactionAfterUpdatedEvent.php b/app/Events/TransactionAfterUpdatedEvent.php index b4abb101e..35eceea0d 100644 --- a/app/Events/TransactionAfterUpdatedEvent.php +++ b/app/Events/TransactionAfterUpdatedEvent.php @@ -31,6 +31,6 @@ public function __construct( */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/TransactionBeforeCreatedEvent.php b/app/Events/TransactionBeforeCreatedEvent.php index 82d73dbd9..8e25da813 100644 --- a/app/Events/TransactionBeforeCreatedEvent.php +++ b/app/Events/TransactionBeforeCreatedEvent.php @@ -16,7 +16,7 @@ class TransactionBeforeCreatedEvent * * @return void */ - public function __construct(public array $inputs) + public function __construct( public array $inputs ) { // ... } @@ -28,6 +28,6 @@ public function __construct(public array $inputs) */ public function broadcastOn() { - return new PrivateChannel('ns.private-channel'); + return new PrivateChannel( 'ns.private-channel' ); } } diff --git a/app/Events/TransactionBeforeDeleteEvent.php b/app/Events/TransactionBeforeDeleteEvent.php index 72b676779..90c91aa74 100644 --- a/app/Events/TransactionBeforeDeleteEvent.php +++ b/app/Events/TransactionBeforeDeleteEvent.php @@ -20,7 +20,7 @@ class TransactionBeforeDeleteEvent * * @return void */ - public function __construct(public Transaction $transaction) + public function __construct( public Transaction $transaction ) { // ... } diff --git a/app/Events/TransactionBeforeUpdateEvent.php b/app/Events/TransactionBeforeUpdateEvent.php index 6c43d3e92..2747404b9 100644 --- a/app/Events/TransactionBeforeUpdateEvent.php +++ b/app/Events/TransactionBeforeUpdateEvent.php @@ -16,7 +16,7 @@ class TransactionBeforeUpdateEvent * * @return void */ - public function __construct(public Transaction $transaction, public $request) + public function __construct( public Transaction $transaction, public $request ) { // ... } diff --git a/app/Events/TransactionsHistoryAfterCreatedEvent.php b/app/Events/TransactionsHistoryAfterCreatedEvent.php index addffb276..3c4d38a04 100644 --- a/app/Events/TransactionsHistoryAfterCreatedEvent.php +++ b/app/Events/TransactionsHistoryAfterCreatedEvent.php @@ -16,7 +16,7 @@ class TransactionsHistoryAfterCreatedEvent * * @return void */ - public function __construct(public TransactionHistory $transactionHistory) + public function __construct( public TransactionHistory $transactionHistory ) { // ... } diff --git a/app/Events/TransactionsHistoryAfterUpdatedEvent.php b/app/Events/TransactionsHistoryAfterUpdatedEvent.php index 8a4168261..52fdfdec7 100644 --- a/app/Events/TransactionsHistoryAfterUpdatedEvent.php +++ b/app/Events/TransactionsHistoryAfterUpdatedEvent.php @@ -27,7 +27,7 @@ public function __construct() public function broadcastOn(): array { return [ - new PrivateChannel('channel-name'), + new PrivateChannel( 'channel-name' ), ]; } } diff --git a/app/Events/TransactionsHistoryBeforeDeleteEvent.php b/app/Events/TransactionsHistoryBeforeDeleteEvent.php index 0bac4e760..19c4cb9b0 100644 --- a/app/Events/TransactionsHistoryBeforeDeleteEvent.php +++ b/app/Events/TransactionsHistoryBeforeDeleteEvent.php @@ -16,7 +16,7 @@ class TransactionsHistoryBeforeDeleteEvent * * @return void */ - public function __construct(public TransactionHistory $transactionHistory) + public function __construct( public TransactionHistory $transactionHistory ) { // ... } diff --git a/app/Events/ValidationEvent.php b/app/Events/ValidationEvent.php index c8818d8c1..b4e340671 100644 --- a/app/Events/ValidationEvent.php +++ b/app/Events/ValidationEvent.php @@ -9,7 +9,7 @@ class ValidationEvent { - public function __construct(public Validation $validation) + public function __construct( public Validation $validation ) { // ... } @@ -23,19 +23,19 @@ public function __construct(public Validation $validation) */ public function unitsGroups() { - return $this->validation->from(UnitsGroupsFields::class) - ->extract('get'); + return $this->validation->from( UnitsGroupsFields::class ) + ->extract( 'get' ); } public function unitValidation() { - return $this->validation->from(UnitsFields::class) - ->extract('get'); + return $this->validation->from( UnitsFields::class ) + ->extract( 'get' ); } public function procurementValidation() { - return $this->validation->from(ProcurementFields::class) - ->extract('get'); + return $this->validation->from( ProcurementFields::class ) + ->extract( 'get' ); } } diff --git a/app/Exceptions/CoreException.php b/app/Exceptions/CoreException.php index 5d39d96af..af287c670 100644 --- a/app/Exceptions/CoreException.php +++ b/app/Exceptions/CoreException.php @@ -8,19 +8,19 @@ class CoreException extends Exception { - public function __construct(public $message = null, public $code = 0, public $previous = null) + public function __construct( public $message = null, public $code = 0, public $previous = null ) { - parent::__construct($message, $code, $previous); + parent::__construct( $message, $code, $previous ); } - public function render(Request $request, $exception) + public function render( Request $request, $exception ) { - $title = __('Oops, We\'re Sorry!!!'); - $back = Helper::getValidPreviousUrl($request); - $message = $exception->getMessage() ?: sprintf(__('Class: %s'), get_class($exception)); + $title = __( 'Oops, We\'re Sorry!!!' ); + $back = Helper::getValidPreviousUrl( $request ); + $message = $exception->getMessage() ?: sprintf( __( 'Class: %s' ), get_class( $exception ) ); - if ($request->expectsJson()) { - return response()->json([ + if ( $request->expectsJson() ) { + return response()->json( [ 'status' => 'failed', 'message' => $message, 'exception' => $exception::class, @@ -28,9 +28,9 @@ public function render(Request $request, $exception) 'trace' => $this->previous->getTrace(), 'line' => $this->previous->getLine(), 'file' => $this->previous->getFile(), - ], method_exists($exception, 'getStatusCode') ? $exception->getStatusCode() : 501); + ], method_exists( $exception, 'getStatusCode' ) ? $exception->getStatusCode() : 501 ); } - return response()->view('pages.errors.exception', compact('message', 'title', 'back'), 503); + return response()->view( 'pages.errors.exception', compact( 'message', 'title', 'back' ), 503 ); } } diff --git a/app/Exceptions/CoreVersionMismatchException.php b/app/Exceptions/CoreVersionMismatchException.php index a70f726bc..eb2ae77bb 100644 --- a/app/Exceptions/CoreVersionMismatchException.php +++ b/app/Exceptions/CoreVersionMismatchException.php @@ -9,17 +9,17 @@ class CoreVersionMismatchException extends Exception { public $title = ''; - public function __construct($message = null) + public function __construct( $message = null ) { - $this->message = $message ?: __('There\'s is mismatch with the core version.'); + $this->message = $message ?: __( 'There\'s is mismatch with the core version.' ); } - public function render($request) + public function render( $request ) { $message = $this->getMessage(); - $title = $this->title ?: __('Incompatibility Exception'); - $back = Helper::getValidPreviousUrl($request); + $title = $this->title ?: __( 'Incompatibility Exception' ); + $back = Helper::getValidPreviousUrl( $request ); - return response()->view('pages.errors.core-exception', compact('message', 'title', 'back'), 500); + return response()->view( 'pages.errors.core-exception', compact( 'message', 'title', 'back' ), 500 ); } } diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 79339f04c..9969e9fa6 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -50,9 +50,9 @@ class Handler extends ExceptionHandler */ public function register() { - $this->reportable(function (Throwable $e) { + $this->reportable( function ( Throwable $e ) { // ... - }); + } ); } /** @@ -61,55 +61,55 @@ public function register() * * @return Response */ - protected function unauthenticated($request, AuthenticationException $exception) + protected function unauthenticated( $request, AuthenticationException $exception ) { - if ($request->expectsJson()) { - return response()->json([ 'status' => 'failed', 'message' => __('You\'re not authenticated.') ], 401); + if ( $request->expectsJson() ) { + return response()->json( [ 'status' => 'failed', 'message' => __( 'You\'re not authenticated.' ) ], 401 ); } - return redirect()->guest(ns()->route('ns.login')); + return redirect()->guest( ns()->route( 'ns.login' ) ); } - public function render($request, Throwable $exception) + public function render( $request, Throwable $exception ) { /** * When the exception doesn't provide a custom "handler" method * we'll try to render it ourself. */ - if ($request->expectsJson()) { - return $this->renderJsonException($request, $exception); + if ( $request->expectsJson() ) { + return $this->renderJsonException( $request, $exception ); } else { - return $this->renderViewException($request, $exception); + return $this->renderViewException( $request, $exception ); } } /** * Render an exception into an HTTP response. */ - protected function renderViewException($request, $exception): Response + protected function renderViewException( $request, $exception ): Response { - $title = __('Oops, We\'re Sorry!!!'); - $back = Helper::getValidPreviousUrl($request); - $message = $exception->getMessage() ?: sprintf(__('Class: %s'), get_class($exception)); - $exploded = explode('(View', $message); + $title = __( 'Oops, We\'re Sorry!!!' ); + $back = Helper::getValidPreviousUrl( $request ); + $message = $exception->getMessage() ?: sprintf( __( 'Class: %s' ), get_class( $exception ) ); + $exploded = explode( '(View', $message ); $message = $exploded[0] ?? $message; - if (env('APP_DEBUG', true)) { + if ( env( 'APP_DEBUG', true ) ) { /** * We'll attempt our best to display or * return a proper response for unsupported exceptions * mostly these are either package exceptions or laravel exceptions */ - return parent::render($request, $exception); + return parent::render( $request, $exception ); } else { - return response()->view('pages.errors.exception', compact('message', 'title', 'back'), 500); + return response()->view( 'pages.errors.exception', compact( 'message', 'title', 'back' ), 500 ); } } /** * Render an exception into a JSON response. */ - protected function renderJsonException($request, $exception): Response + protected function renderJsonException( $request, $exception ): Response { $exceptionsWithCode = [ AuthenticationException::class => 401, @@ -119,28 +119,28 @@ protected function renderJsonException($request, $exception): Response TypeError::class => 500, ]; - $code = $exceptionsWithCode[ get_class($exception) ] ?? 500; + $code = $exceptionsWithCode[ get_class( $exception ) ] ?? 500; - $back = Helper::getValidPreviousUrl($request); - $message = $exception->getMessage() ?: sprintf(__('Class: %s'), get_class($exception)); - $exploded = explode('(View', $message); + $back = Helper::getValidPreviousUrl( $request ); + $message = $exception->getMessage() ?: sprintf( __( 'Class: %s' ), get_class( $exception ) ); + $exploded = explode( '(View', $message ); $message = $exploded[0] ?? $message; - if (env('APP_DEBUG', true)) { - return response()->json([ + if ( env( 'APP_DEBUG', true ) ) { + return response()->json( [ 'status' => 'failed', 'message' => $message, 'previous' => $back, 'file' => $exception->getFile(), 'line' => $exception->getLine(), 'trace' => $exception->getTrace(), - ], method_exists($exception, 'getStatusCode') ? $exception->getStatusCode() : $code); + ], method_exists( $exception, 'getStatusCode' ) ? $exception->getStatusCode() : $code ); } else { - return response()->json([ + return response()->json( [ 'status' => 'failed', - 'message' => __('An error occured while performing your request.'), + 'message' => __( 'An error occured while performing your request.' ), 'previous' => $back, - ], method_exists($exception, 'getStatusCode') ? $exception->getStatusCode() : $code); + ], method_exists( $exception, 'getStatusCode' ) ? $exception->getStatusCode() : $code ); } } } diff --git a/app/Exceptions/MethodNotAllowedHttpException.php b/app/Exceptions/MethodNotAllowedHttpException.php index 5afeb9755..ede59d514 100644 --- a/app/Exceptions/MethodNotAllowedHttpException.php +++ b/app/Exceptions/MethodNotAllowedHttpException.php @@ -7,17 +7,17 @@ class MethodNotAllowedHttpException extends Exception { - public function __construct($message = null) + public function __construct( $message = null ) { - $this->message = $message ?: __('The request method is not allowed.'); + $this->message = $message ?: __( 'The request method is not allowed.' ); } - public function render($request) + public function render( $request ) { $message = $this->getMessage(); - $title = __('Method Not Allowed'); - $back = Helper::getValidPreviousUrl($request); + $title = __( 'Method Not Allowed' ); + $back = Helper::getValidPreviousUrl( $request ); - return response()->view('pages.errors.http-exception', compact('message', 'title', 'back'), 500); + return response()->view( 'pages.errors.http-exception', compact( 'message', 'title', 'back' ), 500 ); } } diff --git a/app/Exceptions/MissingDependencyException.php b/app/Exceptions/MissingDependencyException.php index 0cc36d154..53db0cc70 100644 --- a/app/Exceptions/MissingDependencyException.php +++ b/app/Exceptions/MissingDependencyException.php @@ -7,24 +7,24 @@ class MissingDependencyException extends Exception { - public function __construct($message = null) + public function __construct( $message = null ) { - $this->message = $message ?: __('There is a missing dependency issue.'); + $this->message = $message ?: __( 'There is a missing dependency issue.' ); } - public function render($request) + public function render( $request ) { - if (! $request->expectsJson()) { - return response()->view('pages.errors.missing-dependency', [ - 'title' => __('Missing Dependency'), + if ( ! $request->expectsJson() ) { + return response()->view( 'pages.errors.missing-dependency', [ + 'title' => __( 'Missing Dependency' ), 'message' => $this->getMessage(), - 'back' => Helper::getValidPreviousUrl($request), - ]); + 'back' => Helper::getValidPreviousUrl( $request ), + ] ); } - return response()->json([ + return response()->json( [ 'status' => 'failed', 'message' => $this->getMessage(), - ], 401); + ], 401 ); } } diff --git a/app/Exceptions/ModuleVersionMismatchException.php b/app/Exceptions/ModuleVersionMismatchException.php index 11ea073a6..9d6ea35db 100644 --- a/app/Exceptions/ModuleVersionMismatchException.php +++ b/app/Exceptions/ModuleVersionMismatchException.php @@ -7,17 +7,17 @@ class ModuleVersionMismatchException extends Exception { - public function __construct($message = null) + public function __construct( $message = null ) { - $this->message = $message ?: __('A mismatch has occured between a module and it\'s dependency.'); + $this->message = $message ?: __( 'A mismatch has occured between a module and it\'s dependency.' ); } - public function render($request) + public function render( $request ) { $message = $this->getMessage(); - $title = __('Module Version Mismatch'); - $back = Helper::getValidPreviousUrl($request); + $title = __( 'Module Version Mismatch' ); + $back = Helper::getValidPreviousUrl( $request ); - return response()->view('pages.errors.module-exception', compact('message', 'title', 'back'), 500); + return response()->view( 'pages.errors.module-exception', compact( 'message', 'title', 'back' ), 500 ); } } diff --git a/app/Exceptions/NotAllowedException.php b/app/Exceptions/NotAllowedException.php index 840dcaeae..4d5e41a81 100644 --- a/app/Exceptions/NotAllowedException.php +++ b/app/Exceptions/NotAllowedException.php @@ -7,9 +7,9 @@ class NotAllowedException extends Exception { - public function __construct($message = null) + public function __construct( $message = null ) { - $this->message = $message ?: __('The Action You Tried To Perform Is Not Allowed.'); + $this->message = $message ?: __( 'The Action You Tried To Perform Is Not Allowed.' ); } public function getStatusCode() @@ -17,19 +17,19 @@ public function getStatusCode() return 403; } - public function render($request) + public function render( $request ) { - if (! $request->expectsJson()) { - return response()->view('pages.errors.not-allowed', [ - 'title' => __('Not Allowed Action'), + if ( ! $request->expectsJson() ) { + return response()->view( 'pages.errors.not-allowed', [ + 'title' => __( 'Not Allowed Action' ), 'message' => $this->getMessage(), - 'back' => Helper::getValidPreviousUrl($request), - ]); + 'back' => Helper::getValidPreviousUrl( $request ), + ] ); } - return response()->json([ + return response()->json( [ 'status' => 'failed', - 'message' => $this->getMessage() ?: __('The action you tried to perform is not allowed.'), - ], 401); + 'message' => $this->getMessage() ?: __( 'The action you tried to perform is not allowed.' ), + ], 401 ); } } diff --git a/app/Exceptions/NotEnoughPermissionException.php b/app/Exceptions/NotEnoughPermissionException.php index bfd5de52a..e695ebe39 100644 --- a/app/Exceptions/NotEnoughPermissionException.php +++ b/app/Exceptions/NotEnoughPermissionException.php @@ -12,24 +12,24 @@ public function getStatusCode() return 403; } - public function __construct($message = null) + public function __construct( $message = null ) { - $this->message = $message ?: __('You\'re not allowed to see that page.'); + $this->message = $message ?: __( 'You\'re not allowed to see that page.' ); } - public function render($request) + public function render( $request ) { - if (! $request->expectsJson()) { - return response()->view('pages.errors.not-enough-permissions', [ - 'title' => __('Not Enough Permissions'), + if ( ! $request->expectsJson() ) { + return response()->view( 'pages.errors.not-enough-permissions', [ + 'title' => __( 'Not Enough Permissions' ), 'message' => $this->getMessage(), - 'back' => Helper::getValidPreviousUrl($request), - ]); + 'back' => Helper::getValidPreviousUrl( $request ), + ] ); } - return response()->json([ + return response()->json( [ 'status' => 'failed', 'message' => $this->getMessage(), - ], 401); + ], 401 ); } } diff --git a/app/Exceptions/NotFoundAssetsException.php b/app/Exceptions/NotFoundAssetsException.php index 8bdf8a8e5..66473fe8f 100644 --- a/app/Exceptions/NotFoundAssetsException.php +++ b/app/Exceptions/NotFoundAssetsException.php @@ -7,17 +7,17 @@ class NotFoundAssetsException extends Exception { - public function __construct($message = null) + public function __construct( $message = null ) { - $this->message = $message ?: __('Unable to locate the assets.'); + $this->message = $message ?: __( 'Unable to locate the assets.' ); } - public function render($request) + public function render( $request ) { $message = $this->getMessage(); - $title = __('Not Found Assets'); - $back = Helper::getValidPreviousUrl($request); + $title = __( 'Not Found Assets' ); + $back = Helper::getValidPreviousUrl( $request ); - return response()->view('pages.errors.assets-exception', compact('message', 'title', 'back'), 500); + return response()->view( 'pages.errors.assets-exception', compact( 'message', 'title', 'back' ), 500 ); } } diff --git a/app/Exceptions/NotFoundException.php b/app/Exceptions/NotFoundException.php index a160f7a49..7070ca043 100644 --- a/app/Exceptions/NotFoundException.php +++ b/app/Exceptions/NotFoundException.php @@ -7,24 +7,24 @@ class NotFoundException extends Exception { - public function __construct($message = null) + public function __construct( $message = null ) { - $this->message = $message ?: __('The resource of the page you tried to access is not available or might have been deleted.'); + $this->message = $message ?: __( 'The resource of the page you tried to access is not available or might have been deleted.' ); } - public function render($request) + public function render( $request ) { - if (! $request->expectsJson()) { - return response()->view('pages.errors.not-allowed', [ - 'title' => __('Not Found Exception'), + if ( ! $request->expectsJson() ) { + return response()->view( 'pages.errors.not-allowed', [ + 'title' => __( 'Not Found Exception' ), 'message' => $this->getMessage(), - 'back' => Helper::getValidPreviousUrl($request), - ]); + 'back' => Helper::getValidPreviousUrl( $request ), + ] ); } - return response()->json([ + return response()->json( [ 'status' => 'failed', 'message' => $this->getMessage(), - ], 401); + ], 401 ); } } diff --git a/app/Exceptions/PostTooLargeException.php b/app/Exceptions/PostTooLargeException.php index 0529c0348..15d2d5fc0 100644 --- a/app/Exceptions/PostTooLargeException.php +++ b/app/Exceptions/PostTooLargeException.php @@ -7,19 +7,19 @@ class PostTooLargeException extends ExceptionsPostTooLargeException { - public function render($request) + public function render( $request ) { - if (! $request->expectsJson()) { - return response()->view('pages.errors.not-allowed', [ - 'title' => __('Post Too Large'), - 'message' => __('The submitted request is more large than expected. Consider increasing your "post_max_size" on your PHP.ini'), - 'back' => Helper::getValidPreviousUrl($request), - ]); + if ( ! $request->expectsJson() ) { + return response()->view( 'pages.errors.not-allowed', [ + 'title' => __( 'Post Too Large' ), + 'message' => __( 'The submitted request is more large than expected. Consider increasing your "post_max_size" on your PHP.ini' ), + 'back' => Helper::getValidPreviousUrl( $request ), + ] ); } - return response()->json([ + return response()->json( [ 'status' => 'failed', - 'message' => __('The submitted request is more large than expected. Consider increasing your "post_max_size" on your PHP.ini'), - ], 401); + 'message' => __( 'The submitted request is more large than expected. Consider increasing your "post_max_size" on your PHP.ini' ), + ], 401 ); } } diff --git a/app/Exceptions/QueryException.php b/app/Exceptions/QueryException.php index 25692bd32..2725dc7a0 100644 --- a/app/Exceptions/QueryException.php +++ b/app/Exceptions/QueryException.php @@ -8,23 +8,23 @@ class QueryException extends Exception { - public function __construct($message = null) + public function __construct( $message = null ) { - $this->message = $message ?: __('A Database Exception Occurred.'); + $this->message = $message ?: __( 'A Database Exception Occurred.' ); } - public function render(Request $request) + public function render( Request $request ) { - if ($request->expectsJson()) { - return response()->json([ + if ( $request->expectsJson() ) { + return response()->json( [ 'message' => $this->getMessage(), - ], 500); + ], 500 ); } $message = $this->getMessage(); - $title = __('Query Exception'); - $back = Helper::getValidPreviousUrl($request); + $title = __( 'Query Exception' ); + $back = Helper::getValidPreviousUrl( $request ); - return response()->view('pages.errors.db-exception', compact('message', 'title', 'back'), 500); + return response()->view( 'pages.errors.db-exception', compact( 'message', 'title', 'back' ), 500 ); } } diff --git a/app/Exceptions/ValidationException.php b/app/Exceptions/ValidationException.php index 62957357b..fc6a21728 100644 --- a/app/Exceptions/ValidationException.php +++ b/app/Exceptions/ValidationException.php @@ -9,28 +9,28 @@ class ValidationException extends MainValidationException { public $validator; - public function __construct($validator = null) + public function __construct( $validator = null ) { - $this->validator = $validator ?: __('An error occurred while validating the form.'); + $this->validator = $validator ?: __( 'An error occurred while validating the form.' ); } - public function render($request) + public function render( $request ) { - if (! $request->expectsJson()) { - return response()->view('pages.errors.not-allowed', [ - 'title' => __('An error has occurred'), - 'message' => __('Unable to proceed, the submitted form is not valid.'), - 'back' => Helper::getValidPreviousUrl($request), - ]); + if ( ! $request->expectsJson() ) { + return response()->view( 'pages.errors.not-allowed', [ + 'title' => __( 'An error has occurred' ), + 'message' => __( 'Unable to proceed, the submitted form is not valid.' ), + 'back' => Helper::getValidPreviousUrl( $request ), + ] ); } - return response()->json([ + return response()->json( [ 'status' => 'failed', - 'message' => __('Unable to proceed the form is not valid'), + 'message' => __( 'Unable to proceed the form is not valid' ), 'data' => [ 'errors' => $this->toHumanError(), ], - ], 422); + ], 422 ); } /** @@ -42,22 +42,22 @@ private function toHumanError() { $errors = []; - if ($this->validator) { + if ( $this->validator ) { $errors = $this->errors(); - $errors = collect($errors)->map(function ($messages) { - return collect($messages)->map(function ($message) { - switch ($message) { - case 'validation.unique' : return __('This value is already in use on the database.'); - case 'validation.required' : return __('This field is required.'); - case 'validation.array' : return __('This field does\'nt have a valid value.'); - case 'validation.accepted' : return __('This field should be checked.'); - case 'validation.active_url' : return __('This field must be a valid URL.'); - case 'validation.email' : return __('This field is not a valid email.'); + $errors = collect( $errors )->map( function ( $messages ) { + return collect( $messages )->map( function ( $message ) { + switch ( $message ) { + case 'validation.unique' : return __( 'This value is already in use on the database.' ); + case 'validation.required' : return __( 'This field is required.' ); + case 'validation.array' : return __( 'This field does\'nt have a valid value.' ); + case 'validation.accepted' : return __( 'This field should be checked.' ); + case 'validation.active_url' : return __( 'This field must be a valid URL.' ); + case 'validation.email' : return __( 'This field is not a valid email.' ); default: return $message; } - }); - }); + } ); + } ); } return $errors; diff --git a/app/Fields/AuthLoginFields.php b/app/Fields/AuthLoginFields.php index 779ce1da2..90ad8fa78 100644 --- a/app/Fields/AuthLoginFields.php +++ b/app/Fields/AuthLoginFields.php @@ -11,21 +11,21 @@ class AuthLoginFields extends FieldsService public function get() { - $fields = Hook::filter('ns-login-fields', [ + $fields = Hook::filter( 'ns-login-fields', [ [ - 'label' => __('Username'), - 'description' => __('Provide your username.'), + 'label' => __( 'Username' ), + 'description' => __( 'Provide your username.' ), 'validation' => 'required', 'name' => 'username', 'type' => 'text', ], [ - 'label' => __('Password'), - 'description' => __('Provide your password.'), + 'label' => __( 'Password' ), + 'description' => __( 'Provide your password.' ), 'validation' => 'required', 'name' => 'password', 'type' => 'password', ], - ]); + ] ); return $fields; } diff --git a/app/Fields/AuthRegisterFields.php b/app/Fields/AuthRegisterFields.php index bcc7a3e7c..996cea09e 100644 --- a/app/Fields/AuthRegisterFields.php +++ b/app/Fields/AuthRegisterFields.php @@ -11,33 +11,33 @@ class AuthRegisterFields extends FieldsService public function get() { - $fields = Hook::filter('ns-register-fields', [ + $fields = Hook::filter( 'ns-register-fields', [ [ - 'label' => __('Username'), - 'description' => __('Provide your username.'), + 'label' => __( 'Username' ), + 'description' => __( 'Provide your username.' ), 'validation' => 'required|min:5', 'name' => 'username', 'type' => 'text', ], [ - 'label' => __('Email'), - 'description' => __('Provide your email.'), + 'label' => __( 'Email' ), + 'description' => __( 'Provide your email.' ), 'validation' => 'required|email', 'name' => 'email', 'type' => 'text', ], [ - 'label' => __('Password'), - 'description' => __('Provide your password.'), + 'label' => __( 'Password' ), + 'description' => __( 'Provide your password.' ), 'validation' => 'required|min:6', 'name' => 'password', 'type' => 'password', ], [ - 'label' => __('Password Confirm'), - 'description' => __('Should be the same as the password.'), + 'label' => __( 'Password Confirm' ), + 'description' => __( 'Should be the same as the password.' ), 'validation' => 'required|min:6', 'name' => 'password_confirm', 'type' => 'password', ], - ]); + ] ); return $fields; } diff --git a/app/Fields/CashRegisterCashingFields.php b/app/Fields/CashRegisterCashingFields.php index f269dd883..7d819980d 100644 --- a/app/Fields/CashRegisterCashingFields.php +++ b/app/Fields/CashRegisterCashingFields.php @@ -11,20 +11,20 @@ class CashRegisterCashingFields extends FieldsService public function get() { - $fields = Hook::filter('ns-cash-register-cashing-fields', [ + $fields = Hook::filter( 'ns-cash-register-cashing-fields', [ [ - 'label' => __('Amount'), - 'description' => __('define the amount of the transaction.'), + 'label' => __( 'Amount' ), + 'description' => __( 'define the amount of the transaction.' ), 'validation' => 'required', 'name' => 'amount', 'type' => 'hidden', ], [ - 'label' => __('Description'), - 'description' => __('Further observation while proceeding.'), + 'label' => __( 'Description' ), + 'description' => __( 'Further observation while proceeding.' ), 'name' => 'description', 'type' => 'textarea', ], - ]); + ] ); return $fields; } diff --git a/app/Fields/CashRegisterCashoutFields.php b/app/Fields/CashRegisterCashoutFields.php index a1caeb6dc..255beebef 100644 --- a/app/Fields/CashRegisterCashoutFields.php +++ b/app/Fields/CashRegisterCashoutFields.php @@ -11,20 +11,20 @@ class CashRegisterCashoutFields extends FieldsService public function get() { - $fields = Hook::filter('ns-cash-register-cashout-fields', [ + $fields = Hook::filter( 'ns-cash-register-cashout-fields', [ [ - 'label' => __('Amount'), - 'description' => __('define the amount of the transaction.'), + 'label' => __( 'Amount' ), + 'description' => __( 'define the amount of the transaction.' ), 'validation' => 'required', 'name' => 'amount', 'type' => 'hidden', ], [ - 'label' => __('Description'), - 'description' => __('Further observation while proceeding.'), + 'label' => __( 'Description' ), + 'description' => __( 'Further observation while proceeding.' ), 'name' => 'description', 'type' => 'textarea', ], - ]); + ] ); return $fields; } diff --git a/app/Fields/CashRegisterClosingFields.php b/app/Fields/CashRegisterClosingFields.php index 3a51c03a7..799fefe1c 100644 --- a/app/Fields/CashRegisterClosingFields.php +++ b/app/Fields/CashRegisterClosingFields.php @@ -11,20 +11,20 @@ class CashRegisterClosingFields extends FieldsService public function get() { - $fields = Hook::filter('ns-cash-register-closing-fields', [ + $fields = Hook::filter( 'ns-cash-register-closing-fields', [ [ - 'label' => __('Amount'), - 'description' => __('define the amount of the transaction.'), + 'label' => __( 'Amount' ), + 'description' => __( 'define the amount of the transaction.' ), 'validation' => 'required', 'name' => 'amount', 'type' => 'hidden', ], [ - 'label' => __('Description'), - 'description' => __('Further observation while proceeding.'), + 'label' => __( 'Description' ), + 'description' => __( 'Further observation while proceeding.' ), 'name' => 'description', 'type' => 'textarea', ], - ]); + ] ); return $fields; } diff --git a/app/Fields/CashRegisterOpeningFields.php b/app/Fields/CashRegisterOpeningFields.php index cbe419021..c494d3233 100644 --- a/app/Fields/CashRegisterOpeningFields.php +++ b/app/Fields/CashRegisterOpeningFields.php @@ -11,20 +11,20 @@ class CashRegisterOpeningFields extends FieldsService public function get() { - $fields = Hook::filter('ns-cash-register-open-fields', [ + $fields = Hook::filter( 'ns-cash-register-open-fields', [ [ - 'label' => __('Amount'), - 'description' => __('define the amount of the transaction.'), + 'label' => __( 'Amount' ), + 'description' => __( 'define the amount of the transaction.' ), 'validation' => 'required', 'name' => 'amount', 'type' => 'hidden', ], [ - 'label' => __('Description'), - 'description' => __('Further observation while proceeding.'), + 'label' => __( 'Description' ), + 'description' => __( 'Further observation while proceeding.' ), 'name' => 'description', 'type' => 'textarea', ], - ]); + ] ); return $fields; } diff --git a/app/Fields/CustomersAccountFields.php b/app/Fields/CustomersAccountFields.php index 359e96bc4..c4299f6ae 100644 --- a/app/Fields/CustomersAccountFields.php +++ b/app/Fields/CustomersAccountFields.php @@ -13,23 +13,23 @@ public function get() { $fields = [ [ - 'label' => __('Type'), - 'description' => __('determine what is the transaction type.'), + 'label' => __( 'Type' ), + 'description' => __( 'determine what is the transaction type.' ), 'validation' => 'required', 'name' => 'operation', 'type' => 'select', - 'options' => Helper::kvToJsOptions([ - 'add' => __('Add'), - 'deduct' => __('Deduct'), - ]), + 'options' => Helper::kvToJsOptions( [ + 'add' => __( 'Add' ), + 'deduct' => __( 'Deduct' ), + ] ), ], [ - 'label' => __('Amount'), - 'description' => __('Determine the amount of the transaction.'), + 'label' => __( 'Amount' ), + 'description' => __( 'Determine the amount of the transaction.' ), 'name' => 'amount', 'type' => 'number', ], [ - 'label' => __('Description'), - 'description' => __('Further details about the transaction.'), + 'label' => __( 'Description' ), + 'description' => __( 'Further details about the transaction.' ), 'name' => 'description', 'type' => 'textarea', ], diff --git a/app/Fields/DirectTransactionFields.php b/app/Fields/DirectTransactionFields.php index 53569a94a..19090b88f 100644 --- a/app/Fields/DirectTransactionFields.php +++ b/app/Fields/DirectTransactionFields.php @@ -12,57 +12,57 @@ class DirectTransactionFields extends FieldsService { protected static $identifier = Transaction::TYPE_DIRECT; - public function __construct(Transaction $transaction = null) + public function __construct( ?Transaction $transaction = null ) { - $this->fields = Hook::filter('ns-direct-transactions-fields', [ + $this->fields = Hook::filter( 'ns-direct-transactions-fields', [ [ - 'label' => __('Name'), - 'description' => __('Describe the direct transaction.'), + 'label' => __( 'Name' ), + 'description' => __( 'Describe the direct transaction.' ), 'validation' => 'required|min:5', 'name' => 'name', 'type' => 'text', ], [ - 'label' => __('Activated'), + 'label' => __( 'Activated' ), 'validation' => 'required|min:5', 'name' => 'active', - 'description' => __('If set to yes, the transaction will take effect immediately and be saved on the history.'), - 'options' => Helper::kvToJsOptions([ false => __('No'), true => __('Yes')]), + 'description' => __( 'If set to yes, the transaction will take effect immediately and be saved on the history.' ), + 'options' => Helper::kvToJsOptions( [ false => __( 'No' ), true => __( 'Yes' )] ), 'type' => 'switch', 'value' => (int) true, ], [ - 'label' => __('Account'), - 'description' => __('Assign the transaction to an account.'), + 'label' => __( 'Account' ), + 'description' => __( 'Assign the transaction to an account.' ), 'validation' => 'required', 'name' => 'account_id', - 'options' => Helper::toJsOptions(TransactionAccount::get(), [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( TransactionAccount::get(), [ 'id', 'name' ] ), 'type' => 'select', ], [ - 'label' => __('Value'), - 'description' => __('set the value of the transaction.'), + 'label' => __( 'Value' ), + 'description' => __( 'set the value of the transaction.' ), 'validation' => 'required', 'name' => 'value', 'type' => 'number', ], [ - 'label' => __('Description'), - 'description' => __('Further details on the transaction.'), + 'label' => __( 'Description' ), + 'description' => __( 'Further details on the transaction.' ), 'name' => 'description', 'type' => 'textarea', ], [ - 'label' => __('Recurring'), + 'label' => __( 'Recurring' ), 'validation' => 'required|min:5', 'name' => 'recurring', 'type' => 'hidden', ], [ - 'label' => __('type'), + 'label' => __( 'type' ), 'validation' => 'required|min:5', 'name' => 'type', 'type' => 'hidden', ], - ]); + ] ); - if ($transaction instanceof Transaction) { - foreach ($this->fields as $key => $field) { - if (isset($transaction->{$field[ 'name' ]})) { + if ( $transaction instanceof Transaction ) { + foreach ( $this->fields as $key => $field ) { + if ( isset( $transaction->{$field[ 'name' ]} ) ) { $this->fields[$key][ 'value' ] = $transaction->{$field[ 'name' ]}; } } diff --git a/app/Fields/EntityTransactionFields.php b/app/Fields/EntityTransactionFields.php index b9b4896fc..83ae529b1 100644 --- a/app/Fields/EntityTransactionFields.php +++ b/app/Fields/EntityTransactionFields.php @@ -13,68 +13,68 @@ class EntityTransactionFields extends FieldsService { protected static $identifier = Transaction::TYPE_ENTITY; - public function __construct(Transaction $transaction = null) + public function __construct( ?Transaction $transaction = null ) { - $this->fields = Hook::filter('ns-direct-transactions-fields', [ + $this->fields = Hook::filter( 'ns-direct-transactions-fields', [ [ - 'label' => __('Name'), - 'description' => __('Describe the direct transactions.'), + 'label' => __( 'Name' ), + 'description' => __( 'Describe the direct transactions.' ), 'validation' => 'required|min:5', 'name' => 'name', 'type' => 'text', ], [ - 'label' => __('Activated'), + 'label' => __( 'Activated' ), 'validation' => 'required|min:5', 'name' => 'active', - 'description' => __('If set to yes, the transaction will take effect immediately and be saved on the history.'), - 'options' => Helper::kvToJsOptions([ false => __('No'), true => __('Yes')]), + 'description' => __( 'If set to yes, the transaction will take effect immediately and be saved on the history.' ), + 'options' => Helper::kvToJsOptions( [ false => __( 'No' ), true => __( 'Yes' )] ), 'type' => 'switch', ], [ - 'label' => __('Account'), - 'description' => __('Assign the transaction to an account.'), + 'label' => __( 'Account' ), + 'description' => __( 'Assign the transaction to an account.' ), 'validation' => 'required', 'name' => 'account_id', - 'options' => Helper::toJsOptions(TransactionAccount::get(), [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( TransactionAccount::get(), [ 'id', 'name' ] ), 'type' => 'select', ], [ - 'label' => __('Value'), - 'description' => __('set the value of the transactions.'), + 'label' => __( 'Value' ), + 'description' => __( 'set the value of the transactions.' ), 'validation' => 'required', 'name' => 'value', 'type' => 'number', ], [ - 'label' => __('User Group'), - 'description' => __('The transactions will be multipled by the number of user having that role.'), + 'label' => __( 'User Group' ), + 'description' => __( 'The transactions will be multipled by the number of user having that role.' ), 'validation' => 'required', 'name' => 'group_id', - 'options' => Helper::toJsOptions(Role::get()->map(function ($role) { + 'options' => Helper::toJsOptions( Role::get()->map( function ( $role ) { $role->name .= ' (' . $role->users()->count() . ')'; return $role; - }), [ 'id', 'name' ]), + } ), [ 'id', 'name' ] ), 'type' => 'select', ], [ - 'label' => __('Description'), - 'description' => __('Further details on the transaction.'), + 'label' => __( 'Description' ), + 'description' => __( 'Further details on the transaction.' ), 'name' => 'description', 'type' => 'textarea', ], [ - 'label' => __('Recurring'), + 'label' => __( 'Recurring' ), 'validation' => 'required|min:5', 'name' => 'recurring', 'type' => 'hidden', ], [ - 'label' => __('type'), + 'label' => __( 'type' ), 'validation' => 'required|min:5', 'name' => 'type', 'type' => 'hidden', ], - ]); + ] ); - if ($transaction instanceof Transaction) { - foreach ($this->fields as $key => $field) { - if (isset($transaction->{$field[ 'name' ]})) { - if (is_bool($transaction->{$field[ 'name' ]})) { + if ( $transaction instanceof Transaction ) { + foreach ( $this->fields as $key => $field ) { + if ( isset( $transaction->{$field[ 'name' ]} ) ) { + if ( is_bool( $transaction->{$field[ 'name' ]} ) ) { $this->fields[$key][ 'value' ] = (int) $transaction->{$field[ 'name' ]}; } else { $this->fields[$key][ 'value' ] = $transaction->{$field[ 'name' ]}; diff --git a/app/Fields/LayawayFields.php b/app/Fields/LayawayFields.php index 746dec1bc..c0606200e 100644 --- a/app/Fields/LayawayFields.php +++ b/app/Fields/LayawayFields.php @@ -12,8 +12,8 @@ public function get() { $fields = [ [ - 'label' => __('Installments'), - 'description' => __('Define the installments for the current order.'), + 'label' => __( 'Installments' ), + 'description' => __( 'Define the installments for the current order.' ), 'name' => 'total_instalments', 'type' => 'number', ], diff --git a/app/Fields/NewPasswordFields.php b/app/Fields/NewPasswordFields.php index 2d5c68a1a..176f5d31b 100644 --- a/app/Fields/NewPasswordFields.php +++ b/app/Fields/NewPasswordFields.php @@ -11,21 +11,21 @@ class NewPasswordFields extends FieldsService public function get() { - $fields = Hook::filter('ns-new-password-fields', [ + $fields = Hook::filter( 'ns-new-password-fields', [ [ - 'label' => __('New Password'), - 'description' => __('define your new password.'), + 'label' => __( 'New Password' ), + 'description' => __( 'define your new password.' ), 'validation' => 'required|min:6', 'name' => 'password', 'type' => 'password', ], [ - 'label' => __('Confirm Password'), - 'description' => __('confirm your new password.'), + 'label' => __( 'Confirm Password' ), + 'description' => __( 'confirm your new password.' ), 'validation' => 'same:password', 'name' => 'password_confirm', 'type' => 'password', ], - ]); + ] ); return $fields; } diff --git a/app/Fields/OrderPaymentFields.php b/app/Fields/OrderPaymentFields.php index d883002b9..8576b920a 100644 --- a/app/Fields/OrderPaymentFields.php +++ b/app/Fields/OrderPaymentFields.php @@ -13,16 +13,16 @@ public function get() { $fields = [ [ - 'label' => __('Select Payment'), - 'description' => __('choose the payment type.'), + 'label' => __( 'Select Payment' ), + 'description' => __( 'choose the payment type.' ), 'validation' => 'required', 'name' => 'identifier', 'type' => 'select', - 'options' => collect(PaymentType::active()->get())->map(function ($payment) { + 'options' => collect( PaymentType::active()->get() )->map( function ( $payment ) { $payment[ 'value' ] = $payment[ 'identifier' ]; return $payment; - }), + } ), ], ]; diff --git a/app/Fields/PasswordLostFields.php b/app/Fields/PasswordLostFields.php index b910a4e07..a487f6c1f 100644 --- a/app/Fields/PasswordLostFields.php +++ b/app/Fields/PasswordLostFields.php @@ -11,15 +11,15 @@ class PasswordLostFields extends FieldsService public function get() { - $fields = Hook::filter('ns-password-lost-fields', [ + $fields = Hook::filter( 'ns-password-lost-fields', [ [ - 'label' => __('Email'), - 'description' => __('Provide your email.'), + 'label' => __( 'Email' ), + 'description' => __( 'Provide your email.' ), 'validation' => 'required', 'name' => 'email', 'type' => 'text', ], - ]); + ] ); return $fields; } diff --git a/app/Fields/PosOrderSettingsFields.php b/app/Fields/PosOrderSettingsFields.php index 57c050f15..00c1881c3 100644 --- a/app/Fields/PosOrderSettingsFields.php +++ b/app/Fields/PosOrderSettingsFields.php @@ -12,14 +12,14 @@ public function get() { $fields = [ [ - 'label' => __('Name'), - 'description' => __('Define the order name.'), + 'label' => __( 'Name' ), + 'description' => __( 'Define the order name.' ), 'validation' => 'required', 'name' => 'title', 'type' => 'text', ], [ - 'label' => __('Created At'), - 'description' => __('Define the date of creation of the order.'), + 'label' => __( 'Created At' ), + 'description' => __( 'Define the date of creation of the order.' ), 'name' => 'created_at', 'type' => 'date', ], diff --git a/app/Fields/ProcurementFields.php b/app/Fields/ProcurementFields.php index d6893a9ea..e0361aa27 100644 --- a/app/Fields/ProcurementFields.php +++ b/app/Fields/ProcurementFields.php @@ -9,40 +9,40 @@ class ProcurementFields extends FieldsService { protected static $identifier = 'ns.procurement-fields'; - public function get(Procurement $model = null) + public function get( ?Procurement $model = null ) { $name = new \stdClass; $name->name = 'name'; - $name->label = __('Name'); + $name->label = __( 'Name' ); $name->validation = 'required|min:5'; - $name->description = __('Provide the procurement name.'); + $name->description = __( 'Provide the procurement name.' ); $description = new \stdClass; $description->name = 'description'; - $description->label = __('Description'); + $description->label = __( 'Description' ); $description->validation = ''; - $description->description = __('Describe the procurement.'); + $description->description = __( 'Describe the procurement.' ); $provider_id = new \stdClass; $provider_id->name = 'provider_id'; - $provider_id->label = __('Unit Group'); + $provider_id->label = __( 'Unit Group' ); $provider_id->validation = 'required'; - $provider_id->description = __('Define the provider.'); + $provider_id->description = __( 'Define the provider.' ); /** * let's populate the value * using a clear method */ - return collect([ $name, $description, $provider_id ])->map(function ($field) use ($model) { - $field->value = $this->__getValue($model, $field->name); + return collect( [ $name, $description, $provider_id ] )->map( function ( $field ) use ( $model ) { + $field->value = $this->__getValue( $model, $field->name ); return $field; - })->toArray(); + } )->toArray(); } - private function __getValue($model, $field) + private function __getValue( $model, $field ) { - if ($model instanceof Procurement) { + if ( $model instanceof Procurement ) { return $model->$field ?? ''; } diff --git a/app/Fields/ReccurringTransactionFields.php b/app/Fields/ReccurringTransactionFields.php index 787911c77..e2f94e4f6 100644 --- a/app/Fields/ReccurringTransactionFields.php +++ b/app/Fields/ReccurringTransactionFields.php @@ -12,64 +12,64 @@ class ReccurringTransactionFields extends FieldsService { protected static $identifier = Transaction::TYPE_RECURRING; - public function __construct(Transaction $transaction = null) + public function __construct( ?Transaction $transaction = null ) { - $this->fields = Hook::filter('ns-direct-transactions-fields', [ + $this->fields = Hook::filter( 'ns-direct-transactions-fields', [ [ - 'label' => __('Name'), - 'description' => __('Describe the direct transactions.'), + 'label' => __( 'Name' ), + 'description' => __( 'Describe the direct transactions.' ), 'validation' => 'required|min:5', 'name' => 'name', 'type' => 'text', ], [ - 'label' => __('Activated'), + 'label' => __( 'Activated' ), 'validation' => 'required|min:5', 'name' => 'active', - 'description' => __('If set to yes, the transaction will take effect immediately and be saved on the history.'), - 'options' => Helper::kvToJsOptions([ false => __('No'), true => __('Yes')]), + 'description' => __( 'If set to yes, the transaction will take effect immediately and be saved on the history.' ), + 'options' => Helper::kvToJsOptions( [ false => __( 'No' ), true => __( 'Yes' )] ), 'type' => 'switch', 'value' => true, ], [ - 'label' => __('Account'), - 'description' => __('Assign the transaction to an account.'), + 'label' => __( 'Account' ), + 'description' => __( 'Assign the transaction to an account.' ), 'validation' => 'required', 'name' => 'account_id', - 'options' => Helper::toJsOptions(TransactionAccount::get(), [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( TransactionAccount::get(), [ 'id', 'name' ] ), 'type' => 'select', ], [ - 'label' => __('Value'), - 'description' => __('set the value of the transaction.'), + 'label' => __( 'Value' ), + 'description' => __( 'set the value of the transaction.' ), 'validation' => 'required', 'name' => 'value', 'type' => 'number', ], [ - 'label' => __('Description'), - 'description' => __('Further details on the transaction.'), + 'label' => __( 'Description' ), + 'description' => __( 'Further details on the transaction.' ), 'name' => 'description', 'type' => 'textarea', ], [ - 'label' => __('Recurring'), + 'label' => __( 'Recurring' ), 'validation' => 'required|min:5', 'name' => 'recurring', 'type' => 'hidden', ], [ - 'label' => __('type'), + 'label' => __( 'type' ), 'validation' => 'required|min:5', 'name' => 'type', 'type' => 'hidden', ], - ]); + ] ); - if ($transaction instanceof Transaction) { - foreach ($this->fields as $key => $field) { - if (isset($transaction->{$field[ 'name' ]})) { + if ( $transaction instanceof Transaction ) { + foreach ( $this->fields as $key => $field ) { + if ( isset( $transaction->{$field[ 'name' ]} ) ) { $this->fields[$key][ 'value' ] = $transaction->{$field[ 'name' ]}; } } } } - public function get($transaction = null) + public function get( $transaction = null ) { return $this->fields; } diff --git a/app/Fields/RefundProductFields.php b/app/Fields/RefundProductFields.php index 62fdd6456..b8e8d5a44 100644 --- a/app/Fields/RefundProductFields.php +++ b/app/Fields/RefundProductFields.php @@ -14,24 +14,24 @@ public function get() { $fields = [ [ - 'label' => __('Unit Price'), - 'description' => __('Define what is the unit price of the product.'), + 'label' => __( 'Unit Price' ), + 'description' => __( 'Define what is the unit price of the product.' ), 'validation' => 'required', 'name' => 'unit_price', 'type' => 'number', ], [ - 'label' => __('Condition'), - 'description' => __('Determine in which condition the product is returned.'), + 'label' => __( 'Condition' ), + 'description' => __( 'Determine in which condition the product is returned.' ), 'validation' => 'required', 'name' => 'condition', 'type' => 'select', - 'options' => Helper::kvToJsOptions([ - OrderProduct::CONDITION_DAMAGED => __('Damaged'), - OrderProduct::CONDITION_UNSPOILED => __('Unspoiled'), - ]), + 'options' => Helper::kvToJsOptions( [ + OrderProduct::CONDITION_DAMAGED => __( 'Damaged' ), + OrderProduct::CONDITION_UNSPOILED => __( 'Unspoiled' ), + ] ), ], [ - 'label' => __('Other Observations'), - 'description' => __('Describe in details the condition of the returned product.'), + 'label' => __( 'Other Observations' ), + 'description' => __( 'Describe in details the condition of the returned product.' ), 'name' => 'description', 'type' => 'textarea', ], diff --git a/app/Fields/ResetFields.php b/app/Fields/ResetFields.php index 418f6e098..a6a17c836 100644 --- a/app/Fields/ResetFields.php +++ b/app/Fields/ResetFields.php @@ -11,31 +11,31 @@ class ResetFields extends FieldsService { protected static $identifier = 'ns.reset'; - public function get(Unit $model = null) + public function get( ?Unit $model = null ) { $this->fields = [ [ 'name' => 'mode', - 'label' => __('Mode'), + 'label' => __( 'Mode' ), 'validation' => 'required', 'type' => 'select', - 'options' => Helper::kvToJsOptions(Hook::filter('ns-reset-options', [ - 'wipe_all' => __('Wipe All'), - 'wipe_plus_grocery' => __('Wipe Plus Grocery'), - ])), - 'description' => __('Choose what mode applies to this demo.'), + 'options' => Helper::kvToJsOptions( Hook::filter( 'ns-reset-options', [ + 'wipe_all' => __( 'Wipe All' ), + 'wipe_plus_grocery' => __( 'Wipe Plus Grocery' ), + ] ) ), + 'description' => __( 'Choose what mode applies to this demo.' ), ], [ 'name' => 'create_sales', - 'label' => __('Create Sales (needs Procurements)'), + 'label' => __( 'Create Sales (needs Procurements)' ), 'type' => 'checkbox', 'value' => 1, - 'description' => __('Set if the sales should be created.'), + 'description' => __( 'Set if the sales should be created.' ), ], [ 'name' => 'create_procurements', - 'label' => __('Create Procurements'), + 'label' => __( 'Create Procurements' ), 'type' => 'checkbox', 'value' => 1, - 'description' => __('Will create procurements.'), + 'description' => __( 'Will create procurements.' ), ], ]; diff --git a/app/Fields/ScheduledTransactionFields.php b/app/Fields/ScheduledTransactionFields.php index 5d5f5b677..2321efb8e 100644 --- a/app/Fields/ScheduledTransactionFields.php +++ b/app/Fields/ScheduledTransactionFields.php @@ -12,63 +12,63 @@ class ScheduledTransactionFields extends FieldsService { protected static $identifier = Transaction::TYPE_SCHEDULED; - public function __construct(Transaction $transaction = null) + public function __construct( ?Transaction $transaction = null ) { - $this->fields = Hook::filter('ns-scheduled-transactions-fields', [ + $this->fields = Hook::filter( 'ns-scheduled-transactions-fields', [ [ - 'label' => __('Name'), - 'description' => __('Describe the direct transaction.'), + 'label' => __( 'Name' ), + 'description' => __( 'Describe the direct transaction.' ), 'validation' => 'required|min:5', 'name' => 'name', 'type' => 'text', ], [ - 'label' => __('Scheduled On'), - 'description' => __('Set when the transaction should be executed.'), + 'label' => __( 'Scheduled On' ), + 'description' => __( 'Set when the transaction should be executed.' ), 'validation' => 'required', 'name' => 'scheduled_date', 'type' => 'datetimepicker', ], [ - 'label' => __('Activated'), + 'label' => __( 'Activated' ), 'validation' => 'required', 'name' => 'active', - 'description' => __('If set to yes, the transaction will take effect immediately and be saved on the history.'), - 'options' => Helper::kvToJsOptions([ false => __('No'), true => __('Yes')]), + 'description' => __( 'If set to yes, the transaction will take effect immediately and be saved on the history.' ), + 'options' => Helper::kvToJsOptions( [ false => __( 'No' ), true => __( 'Yes' )] ), 'type' => 'switch', ], [ - 'label' => __('Account'), - 'description' => __('Assign the transaction to an account.'), + 'label' => __( 'Account' ), + 'description' => __( 'Assign the transaction to an account.' ), 'validation' => 'required', 'name' => 'account_id', - 'options' => Helper::toJsOptions(TransactionAccount::get(), [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( TransactionAccount::get(), [ 'id', 'name' ] ), 'type' => 'select', ], [ - 'label' => __('Value'), - 'description' => __('set the value of the transaction.'), + 'label' => __( 'Value' ), + 'description' => __( 'set the value of the transaction.' ), 'validation' => 'required', 'name' => 'value', 'type' => 'number', ], [ - 'label' => __('Description'), - 'description' => __('Further details on the transaction.'), + 'label' => __( 'Description' ), + 'description' => __( 'Further details on the transaction.' ), 'name' => 'description', 'type' => 'textarea', ], [ - 'label' => __('Recurring'), + 'label' => __( 'Recurring' ), 'validation' => 'required', 'name' => 'recurring', 'type' => 'hidden', ], [ - 'label' => __('type'), + 'label' => __( 'type' ), 'validation' => 'required', 'name' => 'type', 'type' => 'hidden', ], - ]); + ] ); - if ($transaction instanceof Transaction) { - foreach ($this->fields as $key => $field) { - if (isset($transaction->{$field[ 'name' ]})) { - if (is_bool($transaction->{$field[ 'name' ]})) { + if ( $transaction instanceof Transaction ) { + foreach ( $this->fields as $key => $field ) { + if ( isset( $transaction->{$field[ 'name' ]} ) ) { + if ( is_bool( $transaction->{$field[ 'name' ]} ) ) { $this->fields[$key][ 'value' ] = (int) $transaction->{$field[ 'name' ]}; } else { $this->fields[$key][ 'value' ] = $transaction->{$field[ 'name' ]}; diff --git a/app/Fields/UnitsFields.php b/app/Fields/UnitsFields.php index d71237440..e64a4f81c 100644 --- a/app/Fields/UnitsFields.php +++ b/app/Fields/UnitsFields.php @@ -10,52 +10,52 @@ class UnitsFields extends FieldsService { protected static $identifier = 'ns.units-fields'; - public function get(Unit $model = null) + public function get( ?Unit $model = null ) { $name = new \stdClass; $name->name = 'name'; - $name->label = __('Unit Group Name'); + $name->label = __( 'Unit Group Name' ); $name->validation = 'required'; - $name->description = __('Provide a unit name to the unit.'); + $name->description = __( 'Provide a unit name to the unit.' ); $description = new \stdClass; $description->name = 'description'; - $description->label = __('Description'); + $description->label = __( 'Description' ); $description->validation = ''; - $description->description = __('Describe the current unit.'); + $description->description = __( 'Describe the current unit.' ); $group_id = new \stdClass; $group_id->name = 'group_id'; - $group_id->label = __('Unit Group'); + $group_id->label = __( 'Unit Group' ); $group_id->validation = 'required'; - $group_id->description = __('assign the current unit to a group.'); + $group_id->description = __( 'assign the current unit to a group.' ); $value = new \stdClass; $value->name = 'value'; - $value->label = __('Value'); + $value->label = __( 'Value' ); $value->validation = 'required'; - $value->description = __('define the unit value.'); + $value->description = __( 'define the unit value.' ); $base_unit = new \stdClass; $base_unit->name = 'base_unit'; - $base_unit->label = __('Value'); + $base_unit->label = __( 'Value' ); $base_unit->validation = 'boolean|required'; - $base_unit->description = __('define the unit value.'); + $base_unit->description = __( 'define the unit value.' ); /** * let's populate the value * using a clear method */ - return collect([ $name, $description, $group_id, $value, $base_unit ])->map(function ($field) use ($model) { - $field->value = $this->__getValue($model, $field->name); + return collect( [ $name, $description, $group_id, $value, $base_unit ] )->map( function ( $field ) use ( $model ) { + $field->value = $this->__getValue( $model, $field->name ); return $field; - })->toArray(); + } )->toArray(); } - private function __getValue($model, $field) + private function __getValue( $model, $field ) { - if ($model instanceof UnitGroup) { + if ( $model instanceof UnitGroup ) { return $model->$field ?? ''; } diff --git a/app/Fields/UnitsGroupsFields.php b/app/Fields/UnitsGroupsFields.php index f82450550..b81d6e1eb 100644 --- a/app/Fields/UnitsGroupsFields.php +++ b/app/Fields/UnitsGroupsFields.php @@ -9,34 +9,34 @@ class UnitsGroupsFields extends FieldsService { protected static $identifier = 'ns.units-group-fields'; - public function get(UnitGroup $model = null) + public function get( ?UnitGroup $model = null ) { $name = new \stdClass; $name->name = 'name'; - $name->label = __('Unit Group Name'); + $name->label = __( 'Unit Group Name' ); $name->validation = 'required'; - $name->description = __('Provide a unit name to the units group.'); + $name->description = __( 'Provide a unit name to the units group.' ); $description = new \stdClass; $description->name = 'description'; - $description->label = __('Description'); + $description->label = __( 'Description' ); $description->validation = ''; - $description->description = __('Describe the current unit group.'); + $description->description = __( 'Describe the current unit group.' ); /** * let's populate the value * using a clear method */ - return collect([ $name, $description ])->map(function ($field) use ($model) { - $field->value = $this->__getValue($model, $field->name); + return collect( [ $name, $description ] )->map( function ( $field ) use ( $model ) { + $field->value = $this->__getValue( $model, $field->name ); return $field; - })->toArray(); + } )->toArray(); } - private function __getValue($model, $field) + private function __getValue( $model, $field ) { - if ($model instanceof UnitGroup) { + if ( $model instanceof UnitGroup ) { return $model->$field ?? ''; } diff --git a/app/Filters/MenusFilter.php b/app/Filters/MenusFilter.php index 9d0657602..004dab9e9 100644 --- a/app/Filters/MenusFilter.php +++ b/app/Filters/MenusFilter.php @@ -4,48 +4,48 @@ class MenusFilter { - public static function injectRegisterMenus($menus) + public static function injectRegisterMenus( $menus ) { - if (ns()->option->get('ns_pos_registers_enabled') === 'yes') { - $menus = array_insert_after($menus, 'pos', [ + if ( ns()->option->get( 'ns_pos_registers_enabled' ) === 'yes' ) { + $menus = array_insert_after( $menus, 'pos', [ 'registers' => [ - 'label' => __('POS'), + 'label' => __( 'POS' ), 'icon' => 'la-cash-register', 'childrens' => [ 'pos' => [ - 'label' => __('Open POS'), - 'href' => ns()->route('ns.dashboard.pos'), + 'label' => __( 'Open POS' ), + 'href' => ns()->route( 'ns.dashboard.pos' ), ], 'create' => [ - 'label' => __('Create Register'), - 'href' => ns()->route('ns.dashboard.registers-create'), + 'label' => __( 'Create Register' ), + 'href' => ns()->route( 'ns.dashboard.registers-create' ), ], 'list' => [ - 'label' => __('Registers List'), - 'href' => ns()->route('ns.dashboard.registers-list'), + 'label' => __( 'Registers List' ), + 'href' => ns()->route( 'ns.dashboard.registers-list' ), ], ], ], - ]); + ] ); - unset($menus[ 'pos' ]); + unset( $menus[ 'pos' ] ); } - if (ns()->option->get('ns_orders_allow_unpaid') === 'yes' && isset( $menus[ 'orders' ] ) ) { - $menus = array_insert_after($menus, 'orders', [ + if ( ns()->option->get( 'ns_orders_allow_unpaid' ) === 'yes' && isset( $menus[ 'orders' ] ) ) { + $menus = array_insert_after( $menus, 'orders', [ 'orders' => [ - 'label' => __('Orders'), + 'label' => __( 'Orders' ), 'icon' => 'la-list-ol', 'childrens' => array_merge( $menus[ 'orders' ][ 'childrens' ], [ 'instalments' => [ - 'label' => __('Instalments'), + 'label' => __( 'Instalments' ), 'permissions' => [ 'nexopos.read.orders-instalments' ], - 'href' => ns()->route('ns.dashboard.orders-instalments'), + 'href' => ns()->route( 'ns.dashboard.orders-instalments' ), ], - ]), + ] ), ], - ]); + ] ); } return $menus; diff --git a/app/Forms/POSAddressesForm.php b/app/Forms/POSAddressesForm.php index c1e26caf4..a89328f37 100644 --- a/app/Forms/POSAddressesForm.php +++ b/app/Forms/POSAddressesForm.php @@ -14,9 +14,9 @@ public function __construct() { $this->form = [ 'tabs' => [ - 'general' => include(dirname(__FILE__) . '/pos/general.php'), - 'billing' => include(dirname(__FILE__) . '/pos/billing.php'), - 'shipping' => include(dirname(__FILE__) . '/pos/shipping.php'), + 'general' => include ( dirname( __FILE__ ) . '/pos/general.php' ), + 'billing' => include ( dirname( __FILE__ ) . '/pos/billing.php' ), + 'shipping' => include ( dirname( __FILE__ ) . '/pos/shipping.php' ), ], ]; } diff --git a/app/Forms/ProcurementForm.php b/app/Forms/ProcurementForm.php index eed8ee7bd..f2a536c08 100644 --- a/app/Forms/ProcurementForm.php +++ b/app/Forms/ProcurementForm.php @@ -15,59 +15,59 @@ class ProcurementForm extends SettingsPage public function __construct() { - if (! empty(request()->route('identifier'))) { - $procurement = Procurement::with('products') - ->with('provider') - ->find(request()->route('identifier')); + if ( ! empty( request()->route( 'identifier' ) ) ) { + $procurement = Procurement::with( 'products' ) + ->with( 'provider' ) + ->find( request()->route( 'identifier' ) ); } - $this->form = Hook::filter('ns-procurement-form', [ + $this->form = Hook::filter( 'ns-procurement-form', [ 'main' => [ 'name' => 'name', 'type' => 'text', 'value' => $procurement->name ?? '', - 'label' => __('Procurement Name'), - 'description' => __('Provide a name that will help to identify the procurement.'), + 'label' => __( 'Procurement Name' ), + 'description' => __( 'Provide a name that will help to identify the procurement.' ), 'validation' => 'required', ], - 'columns' => Hook::filter('ns-procurement-columns', [ + 'columns' => Hook::filter( 'ns-procurement-columns', [ 'name' => [ - 'label' => __('Name'), + 'label' => __( 'Name' ), 'type' => 'name', ], 'purchase_price_edit' => [ - 'label' => __('Unit Price'), + 'label' => __( 'Unit Price' ), 'type' => 'text', ], 'tax_value' => [ - 'label' => __('Tax Value'), + 'label' => __( 'Tax Value' ), 'type' => 'currency', ], 'quantity' => [ - 'label' => __('Quantity'), + 'label' => __( 'Quantity' ), 'type' => 'text', ], 'total_purchase_price' => [ - 'label' => __('Total Price'), + 'label' => __( 'Total Price' ), 'type' => 'currency', ], - ]), - 'products' => isset($procurement) ? $procurement->products->map(function ($_product) { - $product = Product::findOrFail($_product->product_id); - $product->load('unit_quantities.unit')->get(); + ] ), + 'products' => isset( $procurement ) ? $procurement->products->map( function ( $_product ) { + $product = Product::findOrFail( $_product->product_id ); + $product->load( 'unit_quantities.unit' )->get(); - $_product->procurement = array_merge($_product->toArray(), [ + $_product->procurement = array_merge( $_product->toArray(), [ '$invalid' => false, 'purchase_price_edit' => $_product->purchase_price, - ]); + ] ); $_product->unit_quantities = $product->unit_quantities; return $_product; - }) : [], + } ) : [], 'tabs' => [ - 'general' => include(dirname(__FILE__) . '/procurement/general.php'), + 'general' => include ( dirname( __FILE__ ) . '/procurement/general.php' ), ], - ]); + ] ); } } diff --git a/app/Forms/UserProfileForm.php b/app/Forms/UserProfileForm.php index c995dfa46..66415fd98 100644 --- a/app/Forms/UserProfileForm.php +++ b/app/Forms/UserProfileForm.php @@ -20,54 +20,54 @@ class UserProfileForm extends SettingsPage public function __construct() { - $options = app()->make(UserOptions::class); + $options = app()->make( UserOptions::class ); $this->form = [ - 'tabs' => Hook::filter('ns-user-profile-form', [ - 'attribute' => include(dirname(__FILE__) . '/user-profile/attribute.php'), - 'shipping' => include(dirname(__FILE__) . '/user-profile/shipping.php'), - 'billing' => include(dirname(__FILE__) . '/user-profile/billing.php'), - 'security' => include(dirname(__FILE__) . '/user-profile/security.php'), - 'token' => include(dirname(__FILE__) . '/user-profile/token.php'), - ]), + 'tabs' => Hook::filter( 'ns-user-profile-form', [ + 'attribute' => include ( dirname( __FILE__ ) . '/user-profile/attribute.php' ), + 'shipping' => include ( dirname( __FILE__ ) . '/user-profile/shipping.php' ), + 'billing' => include ( dirname( __FILE__ ) . '/user-profile/billing.php' ), + 'security' => include ( dirname( __FILE__ ) . '/user-profile/security.php' ), + 'token' => include ( dirname( __FILE__ ) . '/user-profile/token.php' ), + ] ), ]; } - public function saveForm(Request $request) + public function saveForm( Request $request ) { - ns()->restrict([ 'manage.profile' ]); + ns()->restrict( [ 'manage.profile' ] ); - $validator = Validator::make($request->input('security'), []); + $validator = Validator::make( $request->input( 'security' ), [] ); $results = []; - $results[] = $this->processCredentials($request, $validator); - $results[] = $this->processOptions($request); - $results[] = $this->processAddresses($request); - $results[] = $this->processAttribute($request); - $results = collect($results)->filter(fn($result) => ! empty($result))->values(); + $results[] = $this->processCredentials( $request, $validator ); + $results[] = $this->processOptions( $request ); + $results[] = $this->processAddresses( $request ); + $results[] = $this->processAttribute( $request ); + $results = collect( $results )->filter( fn( $result ) => ! empty( $result ) )->values(); return [ 'status' => 'success', - 'message' => __('The profile has been successfully saved.'), - 'data' => compact('results', 'validator'), + 'message' => __( 'The profile has been successfully saved.' ), + 'data' => compact( 'results', 'validator' ), ]; } - public function processAttribute($request) + public function processAttribute( $request ) { - $allowedInputs = collect($this->form[ 'tabs' ][ 'attribute' ][ 'fields' ]) - ->map(fn($field) => $field[ 'name' ]) + $allowedInputs = collect( $this->form[ 'tabs' ][ 'attribute' ][ 'fields' ] ) + ->map( fn( $field ) => $field[ 'name' ] ) ->toArray(); - if (! empty($allowedInputs)) { - $user = UserAttribute::where('user_id', Auth::user()->id) - ->firstOrNew([ + if ( ! empty( $allowedInputs ) ) { + $user = UserAttribute::where( 'user_id', Auth::user()->id ) + ->firstOrNew( [ 'user_id' => Auth::id(), - ]); + ] ); - foreach ($request->input('attribute') as $key => $value) { - if (in_array($key, $allowedInputs)) { - $user->$key = strip_tags($value); + foreach ( $request->input( 'attribute' ) as $key => $value ) { + if ( in_array( $key, $allowedInputs ) ) { + $user->$key = strip_tags( $value ); } } @@ -75,58 +75,58 @@ public function processAttribute($request) return [ 'status' => 'success', - 'message' => __('The user attribute has been saved.'), + 'message' => __( 'The user attribute has been saved.' ), ]; } return []; } - public function processOptions($request) + public function processOptions( $request ) { /** * @var UserOptions */ - $userOptions = app()->make(UserOptions::class); + $userOptions = app()->make( UserOptions::class ); - if ($request->input('options')) { - foreach ($request->input('options') as $field => $value) { - if (! in_array($field, [ 'password', 'old_password', 'password_confirm' ])) { - if (empty($value)) { - $userOptions->delete($field); + if ( $request->input( 'options' ) ) { + foreach ( $request->input( 'options' ) as $field => $value ) { + if ( ! in_array( $field, [ 'password', 'old_password', 'password_confirm' ] ) ) { + if ( empty( $value ) ) { + $userOptions->delete( $field ); } else { - $userOptions->set($field, $value); + $userOptions->set( $field, $value ); } } } return [ 'status' => 'success', - 'message' => __('The options has been successfully updated.'), + 'message' => __( 'The options has been successfully updated.' ), ]; } return []; } - public function processCredentials($request, $validator) + public function processCredentials( $request, $validator ) { - if (! empty($request->input('security.old_password'))) { - if (! Hash::check($request->input('security.old_password'), Auth::user()->password)) { - $validator->errors()->add('security.old_password', __('Wrong password provided')); + if ( ! empty( $request->input( 'security.old_password' ) ) ) { + if ( ! Hash::check( $request->input( 'security.old_password' ), Auth::user()->password ) ) { + $validator->errors()->add( 'security.old_password', __( 'Wrong password provided' ) ); return [ 'status' => 'failed', - 'message' => __('Wrong old password provided'), + 'message' => __( 'Wrong old password provided' ), ]; } else { - $user = User::find(Auth::id()); - $user->password = Hash::make($request->input('security.password')); + $user = User::find( Auth::id() ); + $user->password = Hash::make( $request->input( 'security.password' ) ); $user->save(); return [ 'status' => 'success', - 'message' => __('Password Successfully updated.'), + 'message' => __( 'Password Successfully updated.' ), ]; } } @@ -137,23 +137,23 @@ public function processCredentials($request, $validator) /** * Saves address for the logged user. */ - public function processAddresses(Request $request): array + public function processAddresses( Request $request ): array { /** * @var CustomerService $customerService */ - $customerService = app()->make(CustomerService::class); - $validFields = collect($customerService->getAddressFields()) - ->map(fn($field) => $field[ 'name' ]) + $customerService = app()->make( CustomerService::class ); + $validFields = collect( $customerService->getAddressFields() ) + ->map( fn( $field ) => $field[ 'name' ] ) ->toArray(); - $billing = $request->input('billing'); - $shipping = $request->input('shipping'); + $billing = $request->input( 'billing' ); + $shipping = $request->input( 'shipping' ); - $currentBilling = CustomerAddress::from(Auth::id(), 'billing')->firstOrNew(); - $currentShipping = CustomerAddress::from(Auth::id(), 'shipping')->firstOrNew(); + $currentBilling = CustomerAddress::from( Auth::id(), 'billing' )->firstOrNew(); + $currentShipping = CustomerAddress::from( Auth::id(), 'shipping' )->firstOrNew(); - foreach ($validFields as $field) { + foreach ( $validFields as $field ) { $currentBilling->$field = $billing[ $field ]; $currentShipping->$field = $shipping[ $field ]; } @@ -170,7 +170,7 @@ public function processAddresses(Request $request): array return [ 'status' => 'success', - 'message' => __('The addresses were successfully updated.'), + 'message' => __( 'The addresses were successfully updated.' ), ]; } } diff --git a/app/Forms/pos/billing.php b/app/Forms/pos/billing.php index 5907f7bf4..478835ebc 100644 --- a/app/Forms/pos/billing.php +++ b/app/Forms/pos/billing.php @@ -4,14 +4,14 @@ use App\Services\Helper; return [ - 'label' => __('Billing Address'), + 'label' => __( 'Billing Address' ), 'fields' => [ [ 'type' => 'switch', 'name' => '_use_customer_billing', - 'label' => __('Use Customer Billing'), - 'options' => Helper::kvToJsOptions([ __('No'), __('Yes') ]), - 'description' => __('Define whether the customer billing information should be used.'), + 'label' => __( 'Use Customer Billing' ), + 'options' => Helper::kvToJsOptions( [ __( 'No' ), __( 'Yes' ) ] ), + 'description' => __( 'Define whether the customer billing information should be used.' ), ], ...( new CustomerCrud )->getForm()[ 'tabs' ][ 'billing' ][ 'fields' ], ], diff --git a/app/Forms/pos/general.php b/app/Forms/pos/general.php index 35eef56c1..8d8fb9962 100644 --- a/app/Forms/pos/general.php +++ b/app/Forms/pos/general.php @@ -3,21 +3,21 @@ use App\Services\Helper; return [ - 'label' => __('General Shipping'), + 'label' => __( 'General Shipping' ), 'fields' => [ [ 'type' => 'select', 'name' => 'shipping_type', - 'label' => __('Shipping Type'), - 'options' => Helper::kvToJsOptions([ - 'flat' => __('Flat'), - ]), - 'description' => __('Define how the shipping is calculated.'), + 'label' => __( 'Shipping Type' ), + 'options' => Helper::kvToJsOptions( [ + 'flat' => __( 'Flat' ), + ] ), + 'description' => __( 'Define how the shipping is calculated.' ), ], [ 'type' => 'number', - 'label' => __('Shipping Fees'), + 'label' => __( 'Shipping Fees' ), 'name' => 'shipping', - 'description' => __('Define shipping fees.'), + 'description' => __( 'Define shipping fees.' ), ], ], ]; diff --git a/app/Forms/pos/shipping.php b/app/Forms/pos/shipping.php index 1257d589a..66271e51e 100644 --- a/app/Forms/pos/shipping.php +++ b/app/Forms/pos/shipping.php @@ -4,14 +4,14 @@ use App\Services\Helper; return [ - 'label' => __('Shipping Address'), + 'label' => __( 'Shipping Address' ), 'fields' => [ [ 'type' => 'switch', 'name' => '_use_customer_shipping', - 'label' => __('Use Customer Shipping'), - 'options' => Helper::kvToJsOptions([ __('No'), __('Yes') ]), - 'description' => __('Define whether the customer shipping information should be used.'), + 'label' => __( 'Use Customer Shipping' ), + 'options' => Helper::kvToJsOptions( [ __( 'No' ), __( 'Yes' ) ] ), + 'description' => __( 'Define whether the customer shipping information should be used.' ), ], ...( new CustomerCrud )->getForm()[ 'tabs' ][ 'shipping' ][ 'fields' ], ], diff --git a/app/Forms/procurement/general.php b/app/Forms/procurement/general.php index c5ac43edd..3568244a9 100644 --- a/app/Forms/procurement/general.php +++ b/app/Forms/procurement/general.php @@ -5,58 +5,58 @@ use App\Services\Helper; return [ - 'label' => __('Procurement'), + 'label' => __( 'Procurement' ), 'fields' => [ [ 'type' => 'text', 'name' => 'invoice_reference', 'value' => $procurement->invoice_reference ?? '', - 'label' => __('Invoice Number'), - 'description' => __('If the procurement has been issued outside of NexoPOS, please provide a unique reference.'), + 'label' => __( 'Invoice Number' ), + 'description' => __( 'If the procurement has been issued outside of NexoPOS, please provide a unique reference.' ), ], [ 'type' => 'date', 'name' => 'delivery_time', - 'value' => $procurement->delivery_time ?? ns()->date->now()->format('Y-m-d'), - 'label' => __('Delivery Time'), - 'description' => __('If the procurement has to be delivered at a specific time, define the moment here.'), + 'value' => $procurement->delivery_time ?? ns()->date->now()->format( 'Y-m-d' ), + 'label' => __( 'Delivery Time' ), + 'description' => __( 'If the procurement has to be delivered at a specific time, define the moment here.' ), ], [ 'type' => 'date', 'name' => 'invoice_date', - 'value' => $procurement->invoice_date ?? ns()->date->now()->format('Y-m-d'), - 'label' => __('Invoice Date'), - 'description' => __('If you would like to define a custom invoice date.'), + 'value' => $procurement->invoice_date ?? ns()->date->now()->format( 'Y-m-d' ), + 'label' => __( 'Invoice Date' ), + 'description' => __( 'If you would like to define a custom invoice date.' ), ], [ 'type' => 'switch', 'name' => 'automatic_approval', 'value' => $procurement->automatic_approval ?? 1, - 'options' => Helper::kvToJsOptions([ - 0 => __('No'), - 1 => __('Yes'), - ]), - 'label' => __('Automatic Approval'), - 'description' => __('Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.'), + 'options' => Helper::kvToJsOptions( [ + 0 => __( 'No' ), + 1 => __( 'Yes' ), + ] ), + 'label' => __( 'Automatic Approval' ), + 'description' => __( 'Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.' ), ], [ 'type' => 'select', 'name' => 'delivery_status', 'value' => $procurement->delivery_status ?? 'delivered', 'validation' => 'required', - 'options' => Helper::kvToJsOptions([ - 'pending' => __('Pending'), - 'delivered' => __('Delivered'), - ]), - 'label' => __('Delivery Status'), - 'description' => __('Determine what is the actual value of the procurement. Once "Delivered" the status can\'t be changed, and the stock will be updated.'), + 'options' => Helper::kvToJsOptions( [ + 'pending' => __( 'Pending' ), + 'delivered' => __( 'Delivered' ), + ] ), + 'label' => __( 'Delivery Status' ), + 'description' => __( 'Determine what is the actual value of the procurement. Once "Delivered" the status can\'t be changed, and the stock will be updated.' ), ], [ 'type' => 'select', 'name' => 'payment_status', 'value' => $procurement->payment_status ?? 'paid', 'validation' => 'required', - 'options' => Helper::kvToJsOptions([ - 'unpaid' => __('Unpaid'), - 'paid' => __('Paid'), - ]), - 'label' => __('Payment Status'), - 'description' => __('Determine what is the actual payment status of the procurement.'), + 'options' => Helper::kvToJsOptions( [ + 'unpaid' => __( 'Unpaid' ), + 'paid' => __( 'Paid' ), + ] ), + 'label' => __( 'Payment Status' ), + 'description' => __( 'Determine what is the actual payment status of the procurement.' ), ], [ 'type' => 'search-select', 'name' => 'provider_id', @@ -64,9 +64,9 @@ 'props' => ProviderCrud::getFormConfig(), 'value' => $procurement->provider_id ?? '', 'validation' => 'required', - 'options' => Helper::toJsOptions(Provider::get(), [ 'id', 'first_name' ]), - 'label' => __('Provider'), - 'description' => __('Determine what is the actual provider of the current procurement.'), + 'options' => Helper::toJsOptions( Provider::get(), [ 'id', 'first_name' ] ), + 'label' => __( 'Provider' ), + 'description' => __( 'Determine what is the actual provider of the current procurement.' ), ], ], ]; diff --git a/app/Forms/user-profile/attribute.php b/app/Forms/user-profile/attribute.php index 09d5a7bdb..9b2b980fc 100644 --- a/app/Forms/user-profile/attribute.php +++ b/app/Forms/user-profile/attribute.php @@ -4,20 +4,20 @@ use Illuminate\Support\Facades\Auth; return [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ - 'label' => __('Theme'), + 'label' => __( 'Theme' ), 'name' => 'theme', 'value' => Auth::user()->attribute->theme ?? '', 'type' => 'select', - 'options' => Helper::kvToJsOptions([ - 'dark' => __('Dark'), - 'light' => __('Light'), - ]), - 'description' => __('Define what is the theme that applies to the dashboard.'), + 'options' => Helper::kvToJsOptions( [ + 'dark' => __( 'Dark' ), + 'light' => __( 'Light' ), + ] ), + 'description' => __( 'Define what is the theme that applies to the dashboard.' ), ], [ - 'label' => __('Avatar'), + 'label' => __( 'Avatar' ), 'name' => 'avatar_link', 'value' => Auth::user()->attribute->avatar_link ?? '', 'type' => 'media', @@ -25,14 +25,14 @@ 'user_id' => Auth::id(), 'type' => 'url', ], - 'description' => __('Define the image that should be used as an avatar.'), + 'description' => __( 'Define the image that should be used as an avatar.' ), ], [ - 'label' => __('Language'), + 'label' => __( 'Language' ), 'name' => 'language', 'value' => Auth::user()->attribute->language ?? '', 'type' => 'select', - 'options' => Helper::kvToJsOptions(config('nexopos.languages')), - 'description' => __('Choose the language for the current account.'), + 'options' => Helper::kvToJsOptions( config( 'nexopos.languages' ) ), + 'description' => __( 'Choose the language for the current account.' ), ], ], ]; diff --git a/app/Forms/user-profile/billing.php b/app/Forms/user-profile/billing.php index a629db508..d44fc3bbb 100644 --- a/app/Forms/user-profile/billing.php +++ b/app/Forms/user-profile/billing.php @@ -7,9 +7,9 @@ /** * @var CustomerService */ -$customerService = app()->make(CustomerService::class); +$customerService = app()->make( CustomerService::class ); return [ - 'label' => __('Biling'), - 'fields' => $customerService->getAddressFields(CustomerAddress::from(Auth::id(), 'billing')->first()), + 'label' => __( 'Biling' ), + 'fields' => $customerService->getAddressFields( CustomerAddress::from( Auth::id(), 'billing' )->first() ), ]; diff --git a/app/Forms/user-profile/security.php b/app/Forms/user-profile/security.php index 9d9349d36..ae494b4a3 100644 --- a/app/Forms/user-profile/security.php +++ b/app/Forms/user-profile/security.php @@ -1,24 +1,24 @@ __('Security'), + 'label' => __( 'Security' ), 'fields' => [ [ - 'label' => __('Old Password'), + 'label' => __( 'Old Password' ), 'name' => 'old_password', 'type' => 'password', - 'description' => __('Provide the old password.'), + 'description' => __( 'Provide the old password.' ), ], [ - 'label' => __('Password'), + 'label' => __( 'Password' ), 'name' => 'password', 'type' => 'password', - 'description' => __('Change your password with a better stronger password.'), + 'description' => __( 'Change your password with a better stronger password.' ), 'validation' => 'sometimes|min:6', ], [ - 'label' => __('Password Confirmation'), + 'label' => __( 'Password Confirmation' ), 'name' => 'password_confirm', 'type' => 'password', - 'description' => __('Change your password with a better stronger password.'), + 'description' => __( 'Change your password with a better stronger password.' ), 'validation' => 'same:password', ], ], diff --git a/app/Forms/user-profile/shipping.php b/app/Forms/user-profile/shipping.php index 0e5de955e..03fa1b568 100644 --- a/app/Forms/user-profile/shipping.php +++ b/app/Forms/user-profile/shipping.php @@ -7,9 +7,9 @@ /** * @var CustomerService */ -$customerService = app()->make(CustomerService::class); +$customerService = app()->make( CustomerService::class ); return [ - 'label' => __('Shipping'), - 'fields' => $customerService->getAddressFields(CustomerAddress::from(Auth::id(), 'shipping')->first()), + 'label' => __( 'Shipping' ), + 'fields' => $customerService->getAddressFields( CustomerAddress::from( Auth::id(), 'shipping' )->first() ), ]; diff --git a/app/Forms/user-profile/token.php b/app/Forms/user-profile/token.php index 584854254..0300bd812 100644 --- a/app/Forms/user-profile/token.php +++ b/app/Forms/user-profile/token.php @@ -1,6 +1,6 @@ __('API Token'), + 'label' => __( 'API Token' ), 'component' => 'nsToken', ]; diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index d96f5a22c..fce52dc83 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -32,48 +32,48 @@ class AuthController extends Controller { - public function __construct(private UsersService $userService) + public function __construct( private UsersService $userService ) { } public function signIn() { - return view(Hook::filter('ns-views:pages.sign-in', 'pages.auth.sign-in'), [ - 'title' => __('Sign In — NexoPOS'), - ]); + return view( Hook::filter( 'ns-views:pages.sign-in', 'pages.auth.sign-in' ), [ + 'title' => __( 'Sign In — NexoPOS' ), + ] ); } public function signUp() { - return view(Hook::filter('ns-views:pages.sign-up', 'pages.auth.sign-up'), [ - 'title' => __('Sign Up — NexoPOS'), - ]); + return view( Hook::filter( 'ns-views:pages.sign-up', 'pages.auth.sign-up' ), [ + 'title' => __( 'Sign Up — NexoPOS' ), + ] ); } - public function activateAccount(User $user, $token) + public function activateAccount( User $user, $token ) { /** * trying to active an already activated * account ? Not possible. */ - if ($user->active) { - return redirect(ns()->route('ns.login'))->with('errorMessage', __('No activation is needed for this account.')); + if ( $user->active ) { + return redirect( ns()->route( 'ns.login' ) )->with( 'errorMessage', __( 'No activation is needed for this account.' ) ); } /** * The activation is not valid. * let's throw an exception. */ - if ($user->activation_token !== $token || $user->activation_token === null) { - return redirect(ns()->route('ns.login'))->with('errorMessage', __('Invalid activation token.')); + if ( $user->activation_token !== $token || $user->activation_token === null ) { + return redirect( ns()->route( 'ns.login' ) )->with( 'errorMessage', __( 'Invalid activation token.' ) ); } /** * The activationt token has expired. Let's redirect * the user to the login page with a message. */ - if (! ns()->date->lessThan(Carbon::parse($user->activation_expiration))) { - return redirect(ns()->route('ns.login'))->with('errorMessage', __('The expiration token has expired.')); + if ( ! ns()->date->lessThan( Carbon::parse( $user->activation_expiration ) ) ) { + return redirect( ns()->route( 'ns.login' ) )->with( 'errorMessage', __( 'The expiration token has expired.' ) ); } $user->activation_expiration = null; @@ -85,121 +85,121 @@ public function activateAccount(User $user, $token) * We'll dispatch an event to warn every * component that needs to be aware of that. */ - UserAfterActivationSuccessfulEvent::dispatch($user); + UserAfterActivationSuccessfulEvent::dispatch( $user ); - return redirect(ns()->route('ns.login'))->with('message', __('Your account is not activated.')); + return redirect( ns()->route( 'ns.login' ) )->with( 'message', __( 'Your account is not activated.' ) ); } public function passwordLost() { - return view('pages.auth.password-lost', [ - 'title' => __('Password Lost'), - ]); + return view( 'pages.auth.password-lost', [ + 'title' => __( 'Password Lost' ), + ] ); } - public function newPassword($userId, $token) + public function newPassword( $userId, $token ) { - $user = User::find($userId); + $user = User::find( $userId ); - if (! $user->active) { - throw new NotAllowedException(__('Unable to change a password for a non active user.')); + if ( ! $user->active ) { + throw new NotAllowedException( __( 'Unable to change a password for a non active user.' ) ); } - if ($user->activation_token !== $token) { - throw new NotAllowedException(__('Unable to proceed as the token provided is invalid.')); + if ( $user->activation_token !== $token ) { + throw new NotAllowedException( __( 'Unable to proceed as the token provided is invalid.' ) ); } - if (Carbon::parse($user->activation_expiration)->lessThan(now())) { - throw new NotAllowedException(__('The token has expired. Please request a new activation token.')); + if ( Carbon::parse( $user->activation_expiration )->lessThan( now() ) ) { + throw new NotAllowedException( __( 'The token has expired. Please request a new activation token.' ) ); } - return view('pages.auth.new-password', [ - 'title' => __('Set New Password'), + return view( 'pages.auth.new-password', [ + 'title' => __( 'Set New Password' ), 'user' => $userId, 'token' => $token, - ]); + ] ); } - public function signOut(Request $request) + public function signOut( Request $request ) { Auth::logout(); $request->session()->flush(); - $request->cookie('nexopos_session', null, 0); + $request->cookie( 'nexopos_session', null, 0 ); - return redirect(ns()->route('ns.dashboard.home')); + return redirect( ns()->route( 'ns.dashboard.home' ) ); } public function updateDatabase() { - return view('pages.database-update', [ - 'title' => __('Database Update'), - ]); + return view( 'pages.database-update', [ + 'title' => __( 'Database Update' ), + ] ); } - public function postSignIn(SignInRequest $request) + public function postSignIn( SignInRequest $request ) { - Hook::action('ns-login-form', $request); + Hook::action( 'ns-login-form', $request ); - $attempt = Auth::attempt([ - 'username' => $request->input('username'), - 'password' => $request->input('password'), - ]); + $attempt = Auth::attempt( [ + 'username' => $request->input( 'username' ), + 'password' => $request->input( 'password' ), + ] ); - if ($request->expectsJson()) { - return $this->handleJsonRequests($request, $attempt); + if ( $request->expectsJson() ) { + return $this->handleJsonRequests( $request, $attempt ); } else { - return $this->handleNormalRequests($request, $attempt); + return $this->handleNormalRequests( $request, $attempt ); } } - public function handleNormalRequests($request, $attempt) + public function handleNormalRequests( $request, $attempt ) { - if ($attempt) { + if ( $attempt ) { /** * check if the account is authorized to * login */ - if (! Auth::user()->active) { + if ( ! Auth::user()->active ) { Auth::logout(); - $validator = Validator::make($request->all(), []); - $validator->errors()->add('username', __('This account is disabled.')); + $validator = Validator::make( $request->all(), [] ); + $validator->errors()->add( 'username', __( 'This account is disabled.' ) ); - return redirect(ns()->route('ns.login'))->withErrors($validator); + return redirect( ns()->route( 'ns.login' ) )->withErrors( $validator ); } - return redirect()->intended(Hook::filter('ns-login-redirect')); + return redirect()->intended( Hook::filter( 'ns-login-redirect' ) ); } - $validator = Validator::make($request->all(), []); - $validator->errors()->add('username', __('Unable to find record having that username.')); - $validator->errors()->add('password', __('Unable to find record having that password.')); + $validator = Validator::make( $request->all(), [] ); + $validator->errors()->add( 'username', __( 'Unable to find record having that username.' ) ); + $validator->errors()->add( 'password', __( 'Unable to find record having that password.' ) ); - return redirect(ns()->route('ns.login'))->withErrors($validator); + return redirect( ns()->route( 'ns.login' ) )->withErrors( $validator ); } - public function handleJsonRequests($request, $attempt) + public function handleJsonRequests( $request, $attempt ) { - if (! $attempt) { - throw new NotAllowedException(__('Invalid username or password.')); + if ( ! $attempt ) { + throw new NotAllowedException( __( 'Invalid username or password.' ) ); } - if (! Auth::user()->active) { + if ( ! Auth::user()->active ) { Auth::logout(); - throw new NotAllowedException(__('Unable to login, the provided account is not active.')); + throw new NotAllowedException( __( 'Unable to login, the provided account is not active.' ) ); } $intended = redirect()->intended()->getTargetUrl(); - event(new AfterSuccessfulLoginEvent(Auth::user())); + event( new AfterSuccessfulLoginEvent( Auth::user() ) ); $data = [ 'status' => 'success', - 'message' => __('You have been successfully connected.'), + 'message' => __( 'You have been successfully connected.' ), 'data' => [ - 'redirectTo' => Hook::filter('ns-login-redirect', - ($intended) === url('/') ? ns()->route('ns.dashboard.home') : $intended, + 'redirectTo' => Hook::filter( 'ns-login-redirect', + ( $intended ) === url( '/' ) ? ns()->route( 'ns.dashboard.home' ) : $intended, redirect()->intended()->getTargetUrl() ? true : false ), ], @@ -208,101 +208,101 @@ public function handleJsonRequests($request, $attempt) return $data; } - public function postPasswordLost(PostPasswordLostRequest $request) + public function postPasswordLost( PostPasswordLostRequest $request ) { - $user = User::where('email', $request->input('email'))->first(); + $user = User::where( 'email', $request->input( 'email' ) )->first(); - if ($user instanceof User) { - $user->activation_token = Str::random(20); - $user->activation_expiration = now()->addMinutes(30); + if ( $user instanceof User ) { + $user->activation_token = Str::random( 20 ); + $user->activation_expiration = now()->addMinutes( 30 ); $user->save(); - Mail::to($user) - ->queue(new ResetPasswordMail($user)); + Mail::to( $user ) + ->queue( new ResetPasswordMail( $user ) ); return [ 'status' => 'success', - 'message' => __('The recovery email has been send to your inbox.'), + 'message' => __( 'The recovery email has been send to your inbox.' ), 'data' => [ - 'redirectTo' => route('ns.intermediate', [ + 'redirectTo' => route( 'ns.intermediate', [ 'route' => 'ns.login', 'from' => 'ns.password-lost', - ]), + ] ), ], ]; } - throw new NotFoundException(__('Unable to find a record matching your entry.')); + throw new NotFoundException( __( 'Unable to find a record matching your entry.' ) ); } /** * Process user registration */ - public function postSignUp(SignUpRequest $request) + public function postSignUp( SignUpRequest $request ) { - Hook::action('ns-register-form', $request); + Hook::action( 'ns-register-form', $request ); try { - $response = $this->userService->setUser($request->only([ + $response = $this->userService->setUser( $request->only( [ 'username', 'email', 'password', - ])); + ] ) ); - if ($request->expectsJson()) { + if ( $request->expectsJson() ) { return $response; } else { - return redirect()->route('ns.login', [ + return redirect()->route( 'ns.login', [ 'status' => 'success', 'message' => $response[ 'message' ], - ]); + ] ); } - } catch (Exception $exception) { - if ($request->expectsJson()) { + } catch ( Exception $exception ) { + if ( $request->expectsJson() ) { throw $exception; } else { - return redirect()->route('ns.register')->withErrors([ + return redirect()->route( 'ns.register' )->withErrors( [ 'username' => $exception->getMessage(), - ]); + ] ); } } } - public function postNewPassword(PostNewPasswordRequest $request, $userID, $token) + public function postNewPassword( PostNewPasswordRequest $request, $userID, $token ) { - $user = User::find($userID); + $user = User::find( $userID ); - if (! $user instanceof User) { - throw new NotFoundException(__('Unable to find the requested user.')); + if ( ! $user instanceof User ) { + throw new NotFoundException( __( 'Unable to find the requested user.' ) ); } - if (! $user->active) { - throw new NotAllowedException(__('Unable to submit a new password for a non active user.')); + if ( ! $user->active ) { + throw new NotAllowedException( __( 'Unable to submit a new password for a non active user.' ) ); } - if ($user->activation_token !== $token) { - throw new NotAllowedException(__('Unable to proceed, the provided token is not valid.')); + if ( $user->activation_token !== $token ) { + throw new NotAllowedException( __( 'Unable to proceed, the provided token is not valid.' ) ); } - if (Carbon::parse($user->activation_expiration)->lessThan(ns()->date->now())) { - throw new NotAllowedException(__('Unable to proceed, the token has expired.')); + if ( Carbon::parse( $user->activation_expiration )->lessThan( ns()->date->now() ) ) { + throw new NotAllowedException( __( 'Unable to proceed, the token has expired.' ) ); } - $user->password = Hash::make($request->input('password')); + $user->password = Hash::make( $request->input( 'password' ) ); $user->activation_token = null; $user->activation_expiration = now()->toDateTimeString(); $user->save(); - event(new PasswordAfterRecoveredEvent($user)); + event( new PasswordAfterRecoveredEvent( $user ) ); return [ 'status' => 'success', - 'message' => __('Your password has been updated.'), + 'message' => __( 'Your password has been updated.' ), 'data' => [ - 'redirectTo' => route('ns.intermediate', [ + 'redirectTo' => route( 'ns.intermediate', [ 'route' => 'ns.login', 'from' => 'ns.password-updated', - ]), + ] ), ], ]; } diff --git a/app/Http/Controllers/Dashboard/CashRegistersController.php b/app/Http/Controllers/Dashboard/CashRegistersController.php index 8bbda2952..dd17e1681 100644 --- a/app/Http/Controllers/Dashboard/CashRegistersController.php +++ b/app/Http/Controllers/Dashboard/CashRegistersController.php @@ -39,68 +39,68 @@ public function createRegister() return RegisterCrud::form(); } - public function editRegister(Register $register) + public function editRegister( Register $register ) { - if ($register->status === Register::STATUS_OPENED) { - throw new NotAllowedException(__('Unable to edit a register that is currently in use')); + if ( $register->status === Register::STATUS_OPENED ) { + throw new NotAllowedException( __( 'Unable to edit a register that is currently in use' ) ); } - return RegisterCrud::form($register); + return RegisterCrud::form( $register ); } - public function getRegisters($register_id = null) + public function getRegisters( $register_id = null ) { - if ($register_id !== null) { - $register = Register::findOrFail($register_id); - $this->registersService->getRegisterDetails($register); + if ( $register_id !== null ) { + $register = Register::findOrFail( $register_id ); + $this->registersService->getRegisterDetails( $register ); return $register; } - return Register::get()->map(function ($register) { - $this->registersService->getRegisterDetails($register); + return Register::get()->map( function ( $register ) { + $this->registersService->getRegisterDetails( $register ); return $register; - }); + } ); } - public function performAction(Request $request, $action, Register $register) + public function performAction( Request $request, $action, Register $register ) { - if ($action === 'open') { + if ( $action === 'open' ) { return $this->registersService->openRegister( $register, - $request->input('amount'), - $request->input('description') + $request->input( 'amount' ), + $request->input( 'description' ) ); - } elseif ($action === RegisterHistory::ACTION_OPENING) { + } elseif ( $action === RegisterHistory::ACTION_OPENING ) { return $this->registersService->openRegister( $register, - $request->input('amount'), - $request->input('description') + $request->input( 'amount' ), + $request->input( 'description' ) ); - } elseif ($action === 'close') { + } elseif ( $action === 'close' ) { return $this->registersService->closeRegister( $register, - $request->input('amount'), - $request->input('description') + $request->input( 'amount' ), + $request->input( 'description' ) ); - } elseif ($action === RegisterHistory::ACTION_CLOSING) { + } elseif ( $action === RegisterHistory::ACTION_CLOSING ) { return $this->registersService->closeRegister( $register, - $request->input('amount'), - $request->input('description') + $request->input( 'amount' ), + $request->input( 'description' ) ); - } elseif ($action === RegisterHistory::ACTION_CASHING) { + } elseif ( $action === RegisterHistory::ACTION_CASHING ) { return $this->registersService->cashIn( $register, - $request->input('amount'), - $request->input('description') + $request->input( 'amount' ), + $request->input( 'description' ) ); - } elseif ($action === RegisterHistory::ACTION_CASHOUT) { + } elseif ( $action === RegisterHistory::ACTION_CASHOUT ) { return $this->registersService->cashOut( $register, - $request->input('amount'), - $request->input('description') + $request->input( 'amount' ), + $request->input( 'description' ) ); } } @@ -108,66 +108,66 @@ public function performAction(Request $request, $action, Register $register) public function getUsedRegister() { $register = Register::opened() - ->usedBy(Auth::id()) + ->usedBy( Auth::id() ) ->first(); - if (! $register instanceof Register) { - throw new NotAllowedException(__('No register has been opened by the logged user.')); + if ( ! $register instanceof Register ) { + throw new NotAllowedException( __( 'No register has been opened by the logged user.' ) ); } return [ 'status' => 'success', - 'message' => __('The register is opened.'), - 'data' => compact('register'), + 'message' => __( 'The register is opened.' ), + 'data' => compact( 'register' ), ]; } - public function getSessionHistory(Register $register) + public function getSessionHistory( Register $register ) { - if ($register->status === Register::STATUS_OPENED) { + if ( $register->status === Register::STATUS_OPENED ) { $lastOpening = $register->history() - ->where('action', RegisterHistory::ACTION_OPENING) - ->orderBy('id', 'desc') + ->where( 'action', RegisterHistory::ACTION_OPENING ) + ->orderBy( 'id', 'desc' ) ->first(); - if ($lastOpening instanceof RegisterHistory) { + if ( $lastOpening instanceof RegisterHistory ) { /** * @var Collection */ $actions = $register->history() - ->where('id', '>=', $lastOpening->id) + ->where( 'id', '>=', $lastOpening->id ) ->get(); - $actions->each(function ($session) { - switch ($session->action) { + $actions->each( function ( $session ) { + switch ( $session->action ) { case RegisterHistory::ACTION_CASHING: - $session->label = __('Cash In'); + $session->label = __( 'Cash In' ); break; case RegisterHistory::ACTION_CASHOUT: - $session->label = __('Cash Out'); + $session->label = __( 'Cash Out' ); break; case RegisterHistory::ACTION_CLOSING: - $session->label = __('Closing'); + $session->label = __( 'Closing' ); break; case RegisterHistory::ACTION_OPENING: - $session->label = __('Opening'); + $session->label = __( 'Opening' ); break; case RegisterHistory::ACTION_SALE: - $session->label = __('Sale'); + $session->label = __( 'Sale' ); break; case RegisterHistory::ACTION_REFUND: - $session->label = __('Refund'); + $session->label = __( 'Refund' ); break; } - }); + } ); return $actions; } - throw new NotAllowedException(__('The register doesn\'t have an history.')); + throw new NotAllowedException( __( 'The register doesn\'t have an history.' ) ); } - throw new NotAllowedException(__('Unable to check a register session history if it\'s closed.')); + throw new NotAllowedException( __( 'Unable to check a register session history if it\'s closed.' ) ); } /** @@ -175,13 +175,13 @@ public function getSessionHistory(Register $register) * * @return string */ - public function getRegisterHistory(Register $register) + public function getRegisterHistory( Register $register ) { - return RegisterHistoryCrud::table([ - 'title' => sprintf(__('Register History For : %s'), $register->name), + return RegisterHistoryCrud::table( [ + 'title' => sprintf( __( 'Register History For : %s' ), $register->name ), 'queryParams' => [ 'register_id' => $register->id, ], - ]); + ] ); } } diff --git a/app/Http/Controllers/Dashboard/CategoryController.php b/app/Http/Controllers/Dashboard/CategoryController.php index cc4376bfe..9db369219 100644 --- a/app/Http/Controllers/Dashboard/CategoryController.php +++ b/app/Http/Controllers/Dashboard/CategoryController.php @@ -29,19 +29,19 @@ public function __construct( // ... } - public function get($id = null) + public function get( $id = null ) { - if (! empty($id)) { - $category = ProductCategory::find($id); - if (! $category instanceof ProductCategory) { - throw new Exception(__('Unable to find the category using the provided identifier')); + if ( ! empty( $id ) ) { + $category = ProductCategory::find( $id ); + if ( ! $category instanceof ProductCategory ) { + throw new Exception( __( 'Unable to find the category using the provided identifier' ) ); } return $category; } - if (request()->query('parent') === 'true') { - return ProductCategory::where('parent_id', null)->get(); + if ( request()->query( 'parent' ) === 'true' ) { + return ProductCategory::where( 'parent_id', null )->get(); } return ProductCategory::get(); @@ -54,29 +54,29 @@ public function get($id = null) * @param number id * @return json */ - public function delete($id) + public function delete( $id ) { - $category = ProductCategory::find($id); + $category = ProductCategory::find( $id ); - if ($category instanceof ProductCategory) { + if ( $category instanceof ProductCategory ) { /** * prevent deleting a category * which might have some categories * linked to it. */ - if ($category->subCategories->count() > 0) { - throw new NotFoundException(__('Can\'t delete a category having sub categories linked to it.')); + if ( $category->subCategories->count() > 0 ) { + throw new NotFoundException( __( 'Can\'t delete a category having sub categories linked to it.' ) ); } $category->delete(); return [ 'status' => 'success', - 'message' => __('The category has been deleted.'), + 'message' => __( 'The category has been deleted.' ), ]; } - throw new NotFoundException(__('Unable to find the category using the provided identifier.')); + throw new NotFoundException( __( 'Unable to find the category using the provided identifier.' ) ); } /** @@ -86,24 +86,24 @@ public function delete($id) * @param request * @return json */ - public function post(Request $request) // must be a specific form request with a validation + public function post( Request $request ) // must be a specific form request with a validation { /** * let's retrieve if the parent exists */ - $parentCategory = ProductCategory::find($request->input('parent_id')); - if (! $parentCategory instanceof ProductCategory && intval($request->input('parent_id')) !== 0) { - throw new NotFoundException(__('Unable to find the attached category parent')); + $parentCategory = ProductCategory::find( $request->input( 'parent_id' ) ); + if ( ! $parentCategory instanceof ProductCategory && intval( $request->input( 'parent_id' ) ) !== 0 ) { + throw new NotFoundException( __( 'Unable to find the attached category parent' ) ); } - $fields = $request->only([ 'name', 'parent_id', 'description', 'media_id' ]); - if (empty($fields)) { - throw new NotFoundException(__('Unable to proceed. The request doesn\'t provide enough data which could be handled')); + $fields = $request->only( [ 'name', 'parent_id', 'description', 'media_id' ] ); + if ( empty( $fields ) ) { + throw new NotFoundException( __( 'Unable to proceed. The request doesn\'t provide enough data which could be handled' ) ); } $category = new ProductCategory; - foreach ($fields as $name => $field) { + foreach ( $fields as $name => $field ) { $category->$name = $field; } @@ -112,8 +112,8 @@ public function post(Request $request) // must be a specific form request with a return [ 'status' => 'success', - 'message' => __('The category has been correctly saved'), - 'data' => compact('category'), + 'message' => __( 'The category has been correctly saved' ), + 'data' => compact( 'category' ), ]; } @@ -124,24 +124,24 @@ public function post(Request $request) // must be a specific form request with a * @param int category id * @return json */ - public function put($id, Request $request) // must use a specific request which include a validation + public function put( $id, Request $request ) // must use a specific request which include a validation { /** * @todo we should make sure the parent id * is not similar to the current category * id. We could also check circular categories */ - $category = ProductCategory::find($id); - if (! $category instanceof ProductCategory && $request->input('parent_id') !== 0) { - throw new NotFoundException(__('Unable to find the category using the provided identifier')); + $category = ProductCategory::find( $id ); + if ( ! $category instanceof ProductCategory && $request->input( 'parent_id' ) !== 0 ) { + throw new NotFoundException( __( 'Unable to find the category using the provided identifier' ) ); } - $fields = $request->only([ 'name', 'parent_id', 'description', 'media_id' ]); - if (empty($fields)) { - throw new NotFoundException(__('Unable to proceed. The request doesn\'t provide enough data which could be handled')); + $fields = $request->only( [ 'name', 'parent_id', 'description', 'media_id' ] ); + if ( empty( $fields ) ) { + throw new NotFoundException( __( 'Unable to proceed. The request doesn\'t provide enough data which could be handled' ) ); } - foreach ($fields as $name => $field) { + foreach ( $fields as $name => $field ) { $category->$name = $field; } @@ -150,8 +150,8 @@ public function put($id, Request $request) // must use a specific request which return [ 'status' => 'success', - 'message' => __('The category has been updated'), - 'data' => compact('category'), + 'message' => __( 'The category has been updated' ), + 'data' => compact( 'category' ), ]; } @@ -161,15 +161,15 @@ public function put($id, Request $request) // must use a specific request which * @param number category id * @return json */ - public function getCategoriesProducts($id) + public function getCategoriesProducts( $id ) { - $category = ProductCategory::find($id); - if (! $category instanceof ProductCategory) { - throw new NotFoundException(__('Unable to find the category using the provided identifier')); + $category = ProductCategory::find( $id ); + if ( ! $category instanceof ProductCategory ) { + throw new NotFoundException( __( 'Unable to find the category using the provided identifier' ) ); } return $category->products() - ->whereIn('product_type', [ 'product', 'variation' ]) + ->whereIn( 'product_type', [ 'product', 'variation' ] ) ->onSale() ->get(); } @@ -180,15 +180,15 @@ public function getCategoriesProducts($id) * @param number category id * @return json */ - public function getCategoriesVariations($id) + public function getCategoriesVariations( $id ) { - $category = ProductCategory::find($id); - if (! $category instanceof ProductCategory) { - throw new NotFoundException(__('Unable to find the category using the provided identifier')); + $category = ProductCategory::find( $id ); + if ( ! $category instanceof ProductCategory ) { + throw new NotFoundException( __( 'Unable to find the category using the provided identifier' ) ); } return $category->products->products() - ->whereIn('product_type', [ 'variation' ]) + ->whereIn( 'product_type', [ 'variation' ] ) ->onSale() ->get(); } @@ -223,51 +223,51 @@ public function createCategory() /** * Edit an existing category */ - public function editCategory(ProductCategory $category) + public function editCategory( ProductCategory $category ) { - return ProductCategoryCrud::form($category); + return ProductCategoryCrud::form( $category ); } - public function computeCategoryProducts(ProductCategory $category) + public function computeCategoryProducts( ProductCategory $category ) { - $this->categoryService->computeProducts($category); + $this->categoryService->computeProducts( $category ); - return redirect(url()->previous()) - ->with('message', __('The category products has been refreshed')); + return redirect( url()->previous() ) + ->with( 'message', __( 'The category products has been refreshed' ) ); } - public function getCategories($id = '0') + public function getCategories( $id = '0' ) { - if ($id !== '0') { - $category = ProductCategory::where('id', $id) + if ( $id !== '0' ) { + $category = ProductCategory::where( 'id', $id ) ->displayOnPOS() - ->where(function ($query) { - $this->applyHideCategories($query); - }) - ->with('subCategories') + ->where( function ( $query ) { + $this->applyHideCategories( $query ); + } ) + ->with( 'subCategories' ) ->first(); return [ 'products' => $category->products() - ->with('galleries', 'tax_group.taxes') + ->with( 'galleries', 'tax_group.taxes' ) ->onSale() - ->where(function ($query) { - $this->applyHideProducts($query); - }) + ->where( function ( $query ) { + $this->applyHideProducts( $query ); + } ) ->trackingDisabled() ->get() - ->map(function ($product) { - if ($product->unit_quantities()->count() === 1) { - $product->load('unit_quantities.unit'); + ->map( function ( $product ) { + if ( $product->unit_quantities()->count() === 1 ) { + $product->load( 'unit_quantities.unit' ); } return $product; - }), + } ), 'categories' => $category ->subCategories() ->displayOnPOS() ->get(), - 'previousCategory' => ProductCategory::find($category->parent_id) ?? null, // means should return to the root + 'previousCategory' => ProductCategory::find( $category->parent_id ) ?? null, // means should return to the root 'currentCategory' => $category, // means should return to the root ]; } @@ -276,51 +276,51 @@ public function getCategories($id = '0') 'products' => [], 'previousCategory' => false, 'currentCategory' => false, - 'categories' => ProductCategory::where(function ($query) { - $query->where('parent_id', null) - ->orWhere('parent_id', 0); - }) - ->where(function ($query) { - $this->applyHideCategories($query); - }) + 'categories' => ProductCategory::where( function ( $query ) { + $query->where( 'parent_id', null ) + ->orWhere( 'parent_id', 0 ); + } ) + ->where( function ( $query ) { + $this->applyHideCategories( $query ); + } ) ->displayOnPOS() ->get(), ]; } - private function applyHideProducts($query) + private function applyHideProducts( $query ) { - $exhaustedHidden = ns()->option->get('ns_pos_hide_exhausted_products'); + $exhaustedHidden = ns()->option->get( 'ns_pos_hide_exhausted_products' ); - if ($exhaustedHidden === 'yes') { - $query->where('stock_management', Product::STOCK_MANAGEMENT_DISABLED); + if ( $exhaustedHidden === 'yes' ) { + $query->where( 'stock_management', Product::STOCK_MANAGEMENT_DISABLED ); - $query->orWhere(function ($query) { - $query->where('stock_management', Product::STOCK_MANAGEMENT_ENABLED); + $query->orWhere( function ( $query ) { + $query->where( 'stock_management', Product::STOCK_MANAGEMENT_ENABLED ); - $query->whereHas('unit_quantities', function ($query) { - $query->where('quantity', '>', 0); - }); - }); + $query->whereHas( 'unit_quantities', function ( $query ) { + $query->where( 'quantity', '>', 0 ); + } ); + } ); } } - private function applyHideCategories($query) + private function applyHideCategories( $query ) { - $exhaustedHidden = ns()->option->get('ns_pos_hide_empty_categories'); + $exhaustedHidden = ns()->option->get( 'ns_pos_hide_empty_categories' ); - if ($exhaustedHidden === 'yes') { - $query->whereHas('products', function ($query) { - $query->where('stock_management', Product::STOCK_MANAGEMENT_DISABLED); - }); + if ( $exhaustedHidden === 'yes' ) { + $query->whereHas( 'products', function ( $query ) { + $query->where( 'stock_management', Product::STOCK_MANAGEMENT_DISABLED ); + } ); - $query->orWhereHas('products', function ($query) { - $query->where('stock_management', Product::STOCK_MANAGEMENT_ENABLED); + $query->orWhereHas( 'products', function ( $query ) { + $query->where( 'stock_management', Product::STOCK_MANAGEMENT_ENABLED ); - $query->whereHas('unit_quantities', function ($query) { - $query->where('quantity', '>', 0); - }); - }); + $query->whereHas( 'unit_quantities', function ( $query ) { + $query->where( 'quantity', '>', 0 ); + } ); + } ); } } diff --git a/app/Http/Controllers/Dashboard/CrudController.php b/app/Http/Controllers/Dashboard/CrudController.php index 940a42af0..1763399b9 100644 --- a/app/Http/Controllers/Dashboard/CrudController.php +++ b/app/Http/Controllers/Dashboard/CrudController.php @@ -26,9 +26,9 @@ class CrudController extends DashboardController { public function __construct() { - $this->middleware(function ($request, $next) { - return $next($request); - }); + $this->middleware( function ( $request, $next ) { + return $next( $request ); + } ); } /** @@ -38,44 +38,44 @@ public function __construct() * @param void * @return view */ - public function crudDelete($namespace, $id) + public function crudDelete( $namespace, $id ) { /** * Catch event before deleting user */ $service = new CrudService; - $resource = $service->getCrudInstance($namespace); + $resource = $service->getCrudInstance( $namespace ); $modelClass = $resource->getModel(); - $model = $modelClass::find($id); + $model = $modelClass::find( $id ); - if (! $model instanceof $modelClass) { - throw new NotFoundException(__('Unable to delete an entry that no longer exists.')); + if ( ! $model instanceof $modelClass ) { + throw new NotFoundException( __( 'Unable to delete an entry that no longer exists.' ) ); } /** * Run the filter before deleting */ - if (method_exists($resource, 'beforeDelete')) { + if ( method_exists( $resource, 'beforeDelete' ) ) { /** * the callback should return an empty value to proceed. */ - if (! empty($response = $resource->beforeDelete($namespace, $id, $model))) { + if ( ! empty( $response = $resource->beforeDelete( $namespace, $id, $model ) ) ) { return $response; } } - $resource->handleDependencyForDeletion($model); + $resource->handleDependencyForDeletion( $model ); $model->delete(); /** * That will trigger everytime an instance is deleted. */ - event(new CrudAfterDeleteEvent($resource, (object) $model->toArray())); + event( new CrudAfterDeleteEvent( $resource, (object) $model->toArray() ) ); return [ 'status' => 'success', - 'message' => __('The entry has been successfully deleted.'), + 'message' => __( 'The entry has been successfully deleted.' ), ]; } @@ -85,28 +85,28 @@ public function crudDelete($namespace, $id) * * @return void */ - public function crudPost(string $namespace, CrudPostRequest $request) + public function crudPost( string $namespace, CrudPostRequest $request ) { $service = new CrudService; - $inputs = $request->getPlainData($namespace); + $inputs = $request->getPlainData( $namespace ); - return $service->submitRequest($namespace, $inputs); + return $service->submitRequest( $namespace, $inputs ); } /** * Dashboard CRUD PUT * receive and treat a PUT request for CRUD resource * - * @param string $namespace - * @param int $id primary key + * @param string $namespace + * @param int $id primary key * @return void */ - public function crudPut($namespace, $id, CrudPutRequest $request) + public function crudPut( $namespace, $id, CrudPutRequest $request ) { $service = new CrudService; - $inputs = $request->getPlainData($namespace); + $inputs = $request->getPlainData( $namespace ); - return $service->submitRequest($namespace, $inputs, $id); + return $service->submitRequest( $namespace, $inputs, $id ); } /** @@ -114,22 +114,22 @@ public function crudPut($namespace, $id, CrudPutRequest $request) * * @return array of results */ - public function crudList(string $namespace) + public function crudList( string $namespace ) { - $crudClass = Hook::filter('ns-crud-resource', $namespace); + $crudClass = Hook::filter( 'ns-crud-resource', $namespace ); /** * In case nothing handle this crud */ - if (! class_exists($crudClass)) { - throw new Exception(sprintf(__('Unable to load the CRUD resource : %s.'), $crudClass)); + if ( ! class_exists( $crudClass ) ) { + throw new Exception( sprintf( __( 'Unable to load the CRUD resource : %s.' ), $crudClass ) ); } /** * @var CrudService */ $resource = new $crudClass; - $resource->allowedTo('read'); + $resource->allowedTo( 'read' ); return $resource->getEntries(); } @@ -140,15 +140,15 @@ public function crudList(string $namespace) * @param string namespace * @return void */ - public function crudBulkActions(string $namespace, Request $request) + public function crudBulkActions( string $namespace, Request $request ) { - $crudClass = Hook::filter('ns-crud-resource', $namespace); + $crudClass = Hook::filter( 'ns-crud-resource', $namespace ); /** * In case nothing handle this crud */ - if (! class_exists($crudClass)) { - throw new Exception(__('Unhandled crud resource')); + if ( ! class_exists( $crudClass ) ) { + throw new Exception( __( 'Unhandled crud resource' ) ); } $resource = new $crudClass; @@ -157,12 +157,12 @@ public function crudBulkActions(string $namespace, Request $request) * Check if an entry is selected, * else throw an error */ - if ($request->input('entries') == null) { - throw new Exception(__('You need to select at least one item to delete')); + if ( $request->input( 'entries' ) == null ) { + throw new Exception( __( 'You need to select at least one item to delete' ) ); } - if ($request->input('action') == null) { - throw new Exception(__('You need to define which action to perform')); + if ( $request->input( 'action' ) == null ) { + throw new Exception( __( 'You need to define which action to perform' ) ); } /** @@ -170,12 +170,12 @@ public function crudBulkActions(string $namespace, Request $request) * we're expecting an array response with successful * operations and failed operations. */ - $response = Hook::filter(get_class($resource) . '@bulkAction', $resource->bulkAction($request), $request); + $response = Hook::filter( get_class( $resource ) . '@bulkAction', $resource->bulkAction( $request ), $request ); return [ 'status' => 'success', 'message' => sprintf( - $response[ 'message' ] ?? __('%s has been processed, %s has not been processed.'), + $response[ 'message' ] ?? __( '%s has been processed, %s has not been processed.' ), $response[ 'success' ] ?? 0, $response[ 'failed' ] ?? 0 ), @@ -189,9 +189,9 @@ public function crudBulkActions(string $namespace, Request $request) * @param string resource namespace * @return CRUD Response */ - public function crudGet(string $namespace, Request $request) + public function crudGet( string $namespace, Request $request ) { - $crudClass = Hook::filter('ns-crud-resource', $namespace); + $crudClass = Hook::filter( 'ns-crud-resource', $namespace ); /** * Let's check it the resource has a method to retrieve an item @@ -199,12 +199,12 @@ public function crudGet(string $namespace, Request $request) * @var CrudService */ $resource = new $crudClass; - $resource->allowedTo('read'); + $resource->allowedTo( 'read' ); - if (method_exists($resource, 'getEntries')) { - return $resource->getEntries($request); + if ( method_exists( $resource, 'getEntries' ) ) { + return $resource->getEntries( $request ); } else { - throw new Exception(__('Unable to retrieve items. The current CRUD resource doesn\'t implement "getEntries" methods')); + throw new Exception( __( 'Unable to retrieve items. The current CRUD resource doesn\'t implement "getEntries" methods' ) ); } } @@ -214,23 +214,23 @@ public function crudGet(string $namespace, Request $request) * @param string CRUD resource namespace * @return TableConfig */ - public function getColumns(string $namespace) + public function getColumns( string $namespace ) { - $crudClass = Hook::filter('ns-crud-resource', $namespace); + $crudClass = Hook::filter( 'ns-crud-resource', $namespace ); $resource = new $crudClass; - $resource->allowedTo('read'); + $resource->allowedTo( 'read' ); - if (method_exists($resource, 'getEntries')) { + if ( method_exists( $resource, 'getEntries' ) ) { return Hook::filter( - get_class($resource) . '@getColumns', + get_class( $resource ) . '@getColumns', $resource->getColumns() ); } - return response()->json([ + return response()->json( [ 'status' => 'failed', - 'message' => __('Unable to proceed. No matching CRUD resource has been found.'), - ], 403); + 'message' => __( 'Unable to proceed. No matching CRUD resource has been found.' ), + ], 403 ); } /** @@ -238,41 +238,42 @@ public function getColumns(string $namespace) * * @return array */ - public function getConfig(string $namespace) + public function getConfig( string $namespace ) { - $crudClass = Hook::filter('ns-crud-resource', $namespace); + $crudClass = Hook::filter( 'ns-crud-resource', $namespace ); - if (! class_exists($crudClass)) { - throw new Exception(sprintf( - __('The class "%s" is not defined. Does that crud class exists ? Make sure you\'ve registered the instance if it\'s the case.'), + if ( ! class_exists( $crudClass ) ) { + throw new Exception( sprintf( + __( 'The class "%s" is not defined. Does that crud class exists ? Make sure you\'ve registered the instance if it\'s the case.' ), $crudClass - )); + ) ); } $resource = new $crudClass; - $resource->allowedTo('read'); + $resource->allowedTo( 'read' ); - if (method_exists($resource, 'getEntries')) { + if ( method_exists( $resource, 'getEntries' ) ) { return [ 'columns' => Hook::filter( - get_class($resource) . '@getColumns', + get_class( $resource ) . '@getColumns', $resource->getColumns() ), - 'queryFilters' => Hook::filter(get_class($resource) . '@getQueryFilters', $resource->getQueryFilters()), - 'labels' => Hook::filter(get_class($resource) . '@getLabels', $resource->getLabels()), - 'links' => Hook::filter(get_class($resource) . '@getFilteredLinks', $resource->getFilteredLinks() ?? []), - 'bulkActions' => Hook::filter(get_class($resource) . '@getBulkActions', $resource->getBulkActions()), - 'prependOptions' => Hook::filter(get_class($resource) . '@getPrependOptions', $resource->getPrependOptions()), - 'showOptions' => Hook::filter(get_class($resource) . '@getShowOptions', $resource->getShowOptions()), - 'headerButtons' => Hook::filter(get_class($resource) . '@getHeaderButtons', $resource->getHeaderButtons()), + 'queryFilters' => Hook::filter( get_class( $resource ) . '@getQueryFilters', $resource->getQueryFilters() ), + 'labels' => Hook::filter( get_class( $resource ) . '@getLabels', $resource->getLabels() ), + 'links' => Hook::filter( get_class( $resource ) . '@getFilteredLinks', $resource->getFilteredLinks() ?? [] ), + 'bulkActions' => Hook::filter( get_class( $resource ) . '@getBulkActions', $resource->getBulkActions() ), + 'prependOptions' => Hook::filter( get_class( $resource ) . '@getPrependOptions', $resource->getPrependOptions() ), + 'showOptions' => Hook::filter( get_class( $resource ) . '@getShowOptions', $resource->getShowOptions() ), + 'showCheckboxes' => Hook::filter( get_class( $resource ) . '@getShowCheckboxes', $resource->getShowCheckboxes() ), + 'headerButtons' => Hook::filter( get_class( $resource ) . '@getHeaderButtons', $resource->getHeaderButtons() ), 'namespace' => $namespace, ]; } - return response()->json([ + return response()->json( [ 'status' => 'failed', - 'message' => __('Unable to proceed. No matching CRUD resource has been found.'), - ], 403); + 'message' => __( 'Unable to proceed. No matching CRUD resource has been found.' ), + ], 403 ); } /** @@ -281,46 +282,46 @@ public function getConfig(string $namespace) * @param namespace * @return array | AsyncResponse */ - public function getFormConfig(string $namespace, $id = null) + public function getFormConfig( string $namespace, $id = null ) { - $crudClass = Hook::filter('ns-crud-resource', $namespace); - $resource = new $crudClass(compact('namespace', 'id')); - $resource->allowedTo('read'); + $crudClass = Hook::filter( 'ns-crud-resource', $namespace ); + $resource = new $crudClass( compact( 'namespace', 'id' ) ); + $resource->allowedTo( 'read' ); - if (method_exists($resource, 'getEntries')) { - $model = $resource->get('model'); - $model = $model::find($id); - $form = $resource->getForm($model); + if ( method_exists( $resource, 'getEntries' ) ) { + $model = $resource->get( 'model' ); + $model = $model::find( $id ); + $form = $resource->getForm( $model ); /** * @since 4.4.3 */ - $form = Hook::filter(get_class($resource)::method('getForm'), $form, compact('model')); + $form = Hook::filter( get_class( $resource )::method( 'getForm' ), $form, compact( 'model' ) ); $config = [ 'form' => $form, - 'labels' => Hook::filter(get_class($resource) . '@getLabels', $resource->getLabels()), - 'links' => Hook::filter(get_class($resource) . '@getLinks', $resource->getLinks()), + 'labels' => Hook::filter( get_class( $resource ) . '@getLabels', $resource->getLabels() ), + 'links' => Hook::filter( get_class( $resource ) . '@getLinks', $resource->getLinks() ), 'namespace' => $namespace, ]; return $config; } - return response()->json([ + return response()->json( [ 'status' => 'failed', - 'message' => __('Unable to proceed. No matching CRUD resource has been found.'), - ], 403); + 'message' => __( 'Unable to proceed. No matching CRUD resource has been found.' ), + ], 403 ); } /** * Export the entries as a CSV file * - * @param string $namespace - * @return array $response + * @param string $namespace + * @return array $response */ - public function exportCrud($namespace, Request $request) + public function exportCrud( $namespace, Request $request ) { - $crudClass = Hook::filter('ns-crud-resource', $namespace); + $crudClass = Hook::filter( 'ns-crud-resource', $namespace ); $resource = new $crudClass; $spreadsheet = new Spreadsheet; @@ -330,10 +331,10 @@ public function exportCrud($namespace, Request $request) * only users having read capability * can download a CSV file. */ - $resource->allowedTo('read'); + $resource->allowedTo( 'read' ); $columns = Hook::filter( - get_class($resource) . '@getColumns', + get_class( $resource ) . '@getColumns', $resource->getExportColumns() ?: $resource->getColumns() ); @@ -345,14 +346,14 @@ public function exportCrud($namespace, Request $request) $sheetCol2 = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ]; $sheetColumns = []; - foreach ($sheetCol1 as $col) { - foreach ($sheetCol2 as $col2) { + foreach ( $sheetCol1 as $col ) { + foreach ( $sheetCol2 as $col2 ) { $sheetColumns[] = $col . $col2; } } - if (count(array_values($columns)) > count($sheetColumns)) { - throw new Exception(__('The crud columns exceed the maximum column that can be exported (27)')); + if ( count( array_values( $columns ) ) > count( $sheetColumns ) ) { + throw new Exception( __( 'The crud columns exceed the maximum column that can be exported (27)' ) ); } /** @@ -360,8 +361,8 @@ public function exportCrud($namespace, Request $request) * we'll make sure to use them instead of the * default columns. */ - foreach (array_values($columns) as $index => $column) { - $sheet->setCellValue($sheetColumns[ $index ] . '1', $column[ 'label' ]); + foreach ( array_values( $columns ) as $index => $column ) { + $sheet->setCellValue( $sheetColumns[ $index ] . '1', $column[ 'label' ] ); } /** @@ -374,24 +375,24 @@ public function exportCrud($namespace, Request $request) * let's check if the request include * specific entries to export */ - if ($request->input('entries')) { - $config[ 'pick' ] = $request->input('entries'); + if ( $request->input( 'entries' ) ) { + $config[ 'pick' ] = $request->input( 'entries' ); } - $entries = $resource->getEntries($config); + $entries = $resource->getEntries( $config ); $totalColumns = 0; /** * We can't export if there is * nothing to export, so we'll skip that. */ - if (count($entries[ 'data' ]) === 0) { - throw new NotAllowedException(__('Unable to export if there is nothing to export.')); + if ( count( $entries[ 'data' ] ) === 0 ) { + throw new NotAllowedException( __( 'Unable to export if there is nothing to export.' ) ); } - foreach ($entries[ 'data' ] as $rowIndex => $entry) { - foreach ($columns as $columnName => $column) { - $sheet->setCellValue($sheetColumns[ $totalColumns ] . ($rowIndex + 2), strip_tags($entry->$columnName)); + foreach ( $entries[ 'data' ] as $rowIndex => $entry ) { + foreach ( $columns as $columnName => $column ) { + $sheet->setCellValue( $sheetColumns[ $totalColumns ] . ( $rowIndex + 2 ), strip_tags( $entry->$columnName ) ); $totalColumns++; } $totalColumns = 0; @@ -401,51 +402,51 @@ public function exportCrud($namespace, Request $request) * We'll emit an event to allow any procees * to edit the current file. */ - CrudBeforeExportEvent::dispatch($sheet, $totalColumns, $rowIndex, $sheetColumns, $entries); + CrudBeforeExportEvent::dispatch( $sheet, $totalColumns, $rowIndex, $sheetColumns, $entries ); /** * let's define what will be the output name * of the exported file. */ - if (! is_dir(storage_path('app/public/exports'))) { - mkdir(storage_path('app/public/exports')); + if ( ! is_dir( storage_path( 'app/public/exports' ) ) ) { + mkdir( storage_path( 'app/public/exports' ) ); } - $dateFormat = Str::slug(ns()->date->toDateTimeString()); - $relativePath = 'exports/' . Str::slug($resource->getLabels()[ 'list_title' ]) . '-' . $dateFormat . '.csv'; - $fileName = storage_path('app/public/' . $relativePath); + $dateFormat = Str::slug( ns()->date->toDateTimeString() ); + $relativePath = 'exports/' . Str::slug( $resource->getLabels()[ 'list_title' ] ) . '-' . $dateFormat . '.csv'; + $fileName = storage_path( 'app/public/' . $relativePath ); /** * We'll prepare the writer * and output the file. */ - $writer = new Csv($spreadsheet); - $writer->save($fileName); + $writer = new Csv( $spreadsheet ); + $writer->save( $fileName ); /** * We'll hide the asset URL behind random lettes */ - $hash = Str::random(20); + $hash = Str::random( 20 ); - Cache::put($hash, $relativePath, now()->addMinutes(5)); + Cache::put( $hash, $relativePath, now()->addMinutes( 5 ) ); return [ - 'url' => route('ns.dashboard.crud-download', compact('hash')), + 'url' => route( 'ns.dashboard.crud-download', compact( 'hash' ) ), ]; } - public function downloadSavedFile($hash) + public function downloadSavedFile( $hash ) { - $relativePath = Cache::pull($hash); + $relativePath = Cache::pull( $hash ); - if ($relativePath === null) { - throw new NotAllowedException(__('This link has expired.')); + if ( $relativePath === null ) { + throw new NotAllowedException( __( 'This link has expired.' ) ); } - if (Storage::disk('public')->exists($relativePath)) { - return Storage::disk('public')->download($relativePath); + if ( Storage::disk( 'public' )->exists( $relativePath ) ) { + return Storage::disk( 'public' )->download( $relativePath ); } - throw new NotFoundException(__('The requested file cannot be downloaded or has already been downloaded.')); + throw new NotFoundException( __( 'The requested file cannot be downloaded or has already been downloaded.' ) ); } } diff --git a/app/Http/Controllers/Dashboard/CustomersController.php b/app/Http/Controllers/Dashboard/CustomersController.php index 4b70c4c55..5cfbc7d09 100644 --- a/app/Http/Controllers/Dashboard/CustomersController.php +++ b/app/Http/Controllers/Dashboard/CustomersController.php @@ -67,7 +67,7 @@ public function listCustomers() */ public function getRecentlyActive() { - return $this->customerService->getRecentlyActive(10); + return $this->customerService->getRecentlyActive( 10 ); } /** @@ -75,20 +75,20 @@ public function getRecentlyActive() * * @return json response */ - public function get($customer_id = null) + public function get( $customer_id = null ) { - $customer = Customer::with([ + $customer = Customer::with( [ 'group', 'billing', 'shipping', - ])->find($customer_id); + ] )->find( $customer_id ); - if ($customer_id !== null) { - if ($customer instanceof Customer) { + if ( $customer_id !== null ) { + if ( $customer instanceof Customer ) { return $customer; } - throw new NotFoundException(__('The requested customer cannot be found.')); + throw new NotFoundException( __( 'The requested customer cannot be found.' ) ); } return $this->customerService->get(); @@ -100,9 +100,9 @@ public function get($customer_id = null) * @param int customer id * @return json */ - public function delete($id) + public function delete( $id ) { - return $this->customerService->delete($id); + return $this->customerService->delete( $id ); } /** @@ -114,13 +114,13 @@ public function delete($id) * * @todo implement security validation */ - public function post(Request $request) + public function post( Request $request ) { - $data = $request->only([ + $data = $request->only( [ 'first_name', 'last_name', 'username', 'password', 'description', 'gender', 'phone', 'email', 'pobox', 'group_id', 'address', - ]); + ] ); - return $this->customerService->create($data); + return $this->customerService->create( $data ); } /** @@ -132,13 +132,13 @@ public function post(Request $request) * * @todo implement a request for the validation */ - public function put($customer_id, Request $request) + public function put( $customer_id, Request $request ) { - $data = $request->only([ + $data = $request->only( [ 'first_name', 'last_name', 'username', 'password', 'description', 'gender', 'phone', 'email', 'pobox', 'group_id', 'address', - ]); + ] ); - return $this->customerService->update($customer_id, $data); + return $this->customerService->update( $customer_id, $data ); } /** @@ -147,28 +147,28 @@ public function put($customer_id, Request $request) * @param Customer entity * @return json */ - public function getOrders($id) + public function getOrders( $id ) { - return $this->customerService->get($id) + return $this->customerService->get( $id ) ->orders() - ->orderBy('created_at', 'desc') + ->orderBy( 'created_at', 'desc' ) ->get() - ->map(function (Order $order) { - $order->human_status = match ($order->payment_status) { - Order::PAYMENT_HOLD => __('Hold'), - Order::PAYMENT_PAID => __('Paid'), - Order::PAYMENT_PARTIALLY => __('Partially Paid'), - Order::PAYMENT_REFUNDED => __('Refunded'), - Order::PAYMENT_UNPAID => __('Unpaid'), - Order::PAYMENT_PARTIALLY_REFUNDED => __('Partially Refunded'), - Order::PAYMENT_VOID => __('Void'), + ->map( function ( Order $order ) { + $order->human_status = match ( $order->payment_status ) { + Order::PAYMENT_HOLD => __( 'Hold' ), + Order::PAYMENT_PAID => __( 'Paid' ), + Order::PAYMENT_PARTIALLY => __( 'Partially Paid' ), + Order::PAYMENT_REFUNDED => __( 'Refunded' ), + Order::PAYMENT_UNPAID => __( 'Unpaid' ), + Order::PAYMENT_PARTIALLY_REFUNDED => __( 'Partially Refunded' ), + Order::PAYMENT_VOID => __( 'Void' ), default => $order->payment_status, }; - $order->human_delivery_status = $this->ordersService->getDeliveryStatus($order->delivery_status); + $order->human_delivery_status = $this->ordersService->getDeliveryStatus( $order->delivery_status ); return $order; - }); + } ); } /** @@ -176,9 +176,9 @@ public function getOrders($id) * * @return string */ - public function editCustomer(Customer $customer) + public function editCustomer( Customer $customer ) { - return CustomerCrud::form($customer); + return CustomerCrud::form( $customer ); } /** @@ -188,20 +188,20 @@ public function editCustomer(Customer $customer) * @param int customer id * @return array */ - public function getAddresses($id) + public function getAddresses( $id ) { - return $this->customerService->getCustomerAddresses($id); + return $this->customerService->getCustomerAddresses( $id ); } /** * Deletes a customer using his email * - * @param string $email + * @param string $email * @return array */ - public function deleteUsingEmail($email) + public function deleteUsingEmail( $email ) { - return $this->customerService->deleteUsingEmail($email); + return $this->customerService->deleteUsingEmail( $email ); } public function listCoupons() @@ -211,67 +211,67 @@ public function listCoupons() public function createCoupon() { - return $this->view('pages.dashboard.coupons.create', [ - 'title' => __('Create Coupon'), - 'description' => __('helps you creating a coupon.'), - 'src' => ns()->url('/api/crud/ns.coupons/form-config'), - 'returnUrl' => ns()->url('/dashboard/customers/coupons'), + return $this->view( 'pages.dashboard.coupons.create', [ + 'title' => __( 'Create Coupon' ), + 'description' => __( 'helps you creating a coupon.' ), + 'src' => ns()->url( '/api/crud/ns.coupons/form-config' ), + 'returnUrl' => ns()->url( '/dashboard/customers/coupons' ), 'submitMethod' => 'POST', - 'submitUrl' => ns()->url('/api/crud/ns.coupons'), - ]); + 'submitUrl' => ns()->url( '/api/crud/ns.coupons' ), + ] ); } - public function editCoupon(Coupon $coupon) + public function editCoupon( Coupon $coupon ) { - return $this->view('pages.dashboard.coupons.create', [ - 'title' => __('Edit Coupon'), - 'description' => __('Editing an existing coupon.'), - 'src' => ns()->url('/api/crud/ns.coupons/form-config/' . $coupon->id), - 'returnUrl' => ns()->url('/dashboard/customers/coupons'), + return $this->view( 'pages.dashboard.coupons.create', [ + 'title' => __( 'Edit Coupon' ), + 'description' => __( 'Editing an existing coupon.' ), + 'src' => ns()->url( '/api/crud/ns.coupons/form-config/' . $coupon->id ), + 'returnUrl' => ns()->url( '/dashboard/customers/coupons' ), 'submitMethod' => 'PUT', - 'submitUrl' => ns()->url('/api/crud/ns.coupons/' . $coupon->id), - ]); + 'submitUrl' => ns()->url( '/api/crud/ns.coupons/' . $coupon->id ), + ] ); } - public function searchCustomer(Request $request) + public function searchCustomer( Request $request ) { - $search = $request->input('search'); + $search = $request->input( 'search' ); - return $this->customerService->search($search); + return $this->customerService->search( $search ); } - public function accountTransaction(Customer $customer, Request $request) + public function accountTransaction( Customer $customer, Request $request ) { - $validation = Validator::make($request->all(), [ + $validation = Validator::make( $request->all(), [ 'operation' => 'required', 'amount' => 'required|integer', - ]); + ] ); - if ($validation->fails()) { - throw new Exception(__('Invalid Request.')); + if ( $validation->fails() ) { + throw new Exception( __( 'Invalid Request.' ) ); } return $this->customerService->saveTransaction( $customer, - $request->input('operation'), - $request->input('amount'), - $request->input('description') + $request->input( 'operation' ), + $request->input( 'amount' ), + $request->input( 'description' ) ); } - public function getGroup(Customer $customer) + public function getGroup( Customer $customer ) { return $customer->group; } - public function getCustomersOrders(Customer $customer) + public function getCustomersOrders( Customer $customer ) { - return CustomerOrderCrud::table([ - 'src' => ns()->url('/api/crud/ns.customers-orders'), + return CustomerOrderCrud::table( [ + 'src' => ns()->url( '/api/crud/ns.customers-orders' ), 'queryParams' => [ 'customer_id' => $customer->id, ], - ]); + ] ); } /** @@ -280,13 +280,13 @@ public function getCustomersOrders(Customer $customer) * * @return string */ - public function getCustomersRewards(Customer $customer) + public function getCustomersRewards( Customer $customer ) { - return CustomerRewardCrud::table([ + return CustomerRewardCrud::table( [ 'queryParams' => [ 'customer_id' => $customer->id, ], - ]); + ] ); } /** @@ -295,14 +295,14 @@ public function getCustomersRewards(Customer $customer) * * @return string */ - public function editCustomerReward(Customer $customer, CustomerReward $reward) + public function editCustomerReward( Customer $customer, CustomerReward $reward ) { - return CustomerRewardCrud::form($reward, [ - 'returnUrl' => ns()->route('ns.dashboard.customers-rewards-list', [ 'customer' => $customer->id ]), + return CustomerRewardCrud::form( $reward, [ + 'returnUrl' => ns()->route( 'ns.dashboard.customers-rewards-list', [ 'customer' => $customer->id ] ), 'queryParams' => [ 'customer_id' => $customer->id, ], - ]); + ] ); } /** @@ -310,10 +310,10 @@ public function editCustomerReward(Customer $customer, CustomerReward $reward) * * @return string */ - public function getCustomersCoupons(Customer $customer) + public function getCustomersCoupons( Customer $customer ) { return CustomerCouponCrud::table( - title: sprintf(__('%s Coupons'), $customer->name), + title: sprintf( __( '%s Coupons' ), $customer->name ), queryParams: [ 'customer_id' => $customer->id, ], @@ -325,21 +325,21 @@ public function getCustomersCoupons(Customer $customer) * * @return array */ - public function getCustomerCoupons(Customer $customer) + public function getCustomerCoupons( Customer $customer ) { - return $customer->coupons()->with('coupon')->get(); + return $customer->coupons()->with( 'coupon' )->get(); } /** * Loads specific customer coupon and return * as an array * - * @param string $code + * @param string $code * @return array|string */ - public function loadCoupons(Request $request, $code) + public function loadCoupons( Request $request, $code ) { - return $this->customerService->loadCoupon($code, $request->input('customer_id')); + return $this->customerService->loadCoupon( $code, $request->input( 'customer_id' ) ); } /** @@ -347,22 +347,22 @@ public function loadCoupons(Request $request, $code) * * @return string */ - public function getCustomerAccountHistory(Customer $customer) + public function getCustomerAccountHistory( Customer $customer ) { - return CustomerAccountCrud::table([ + return CustomerAccountCrud::table( [ 'queryParams' => [ 'customer_id' => $customer->id, ], - 'createUrl' => ns()->url('/dashboard/customers/' . $customer->id . '/account-history/create'), + 'createUrl' => ns()->url( '/dashboard/customers/' . $customer->id . '/account-history/create' ), 'description' => sprintf( - __('Displays the customer account history for %s'), + __( 'Displays the customer account history for %s' ), $customer->first_name . ' ' . $customer->last_name ), 'title' => sprintf( - __('Account History : %s'), + __( 'Account History : %s' ), $customer->first_name . ' ' . $customer->last_name ), - ]); + ] ); } /** @@ -370,32 +370,32 @@ public function getCustomerAccountHistory(Customer $customer) * * @return View */ - public function createCustomerAccountHistory(Customer $customer) + public function createCustomerAccountHistory( Customer $customer ) { - return CustomerAccountCrud::form(null, [ + return CustomerAccountCrud::form( null, [ 'queryParams' => [ 'customer_id' => $customer->id, ], - 'returnUrl' => ns()->url('/dashboard/customers/' . $customer->id . '/account-history'), - 'submitUrl' => ns()->url('/api/customers/' . $customer->id . '/crud/account-history'), + 'returnUrl' => ns()->url( '/dashboard/customers/' . $customer->id . '/account-history' ), + 'submitUrl' => ns()->url( '/api/customers/' . $customer->id . '/crud/account-history' ), 'description' => sprintf( - __('Displays the customer account history for %s'), + __( 'Displays the customer account history for %s' ), $customer->name ), 'title' => sprintf( - __('Account History : %s'), + __( 'Account History : %s' ), $customer->name ), - ]); + ] ); } - public function recordAccountHistory(Customer $customer, Request $request) + public function recordAccountHistory( Customer $customer, Request $request ) { return $this->customerService->saveTransaction( $customer, - $request->input('general.operation'), - $request->input('general.amount'), - $request->input('general.description') + $request->input( 'general.operation' ), + $request->input( 'general.amount' ), + $request->input( 'general.description' ) ); } @@ -405,9 +405,9 @@ public function recordAccountHistory(Customer $customer, Request $request) * * @return View */ - public function editGeneratedCoupon(CustomerCoupon $coupon) + public function editGeneratedCoupon( CustomerCoupon $coupon ) { - return CustomerCouponCrud::form($coupon); + return CustomerCouponCrud::form( $coupon ); } /** @@ -426,9 +426,9 @@ public function listGeneratedCoupons() * * @return array $customerRewards */ - public function getCustomerRewards(Customer $customer) + public function getCustomerRewards( Customer $customer ) { - return $customer->rewards()->paginate(20); + return $customer->rewards()->paginate( 20 ); } /** @@ -436,27 +436,27 @@ public function getCustomerRewards(Customer $customer) * * @return array */ - public function getAccountHistory(Customer $customer) + public function getAccountHistory( Customer $customer ) { return $customer ->account_history() - ->orderBy('created_at', 'desc') - ->paginate(20); + ->orderBy( 'created_at', 'desc' ) + ->paginate( 20 ); } - public function couponHistory(Coupon $coupon) + public function couponHistory( Coupon $coupon ) { - return CouponOrderHistoryCrud::table([ + return CouponOrderHistoryCrud::table( [ 'queryParams' => [ 'coupon_id' => $coupon->id, ], - ]); + ] ); } - public function listCustomerCouponHistory(Customer $customer, CustomerCoupon $customerCoupon) + public function listCustomerCouponHistory( Customer $customer, CustomerCoupon $customerCoupon ) { return CustomerCouponHistoryCrud::table( - title: sprintf(__('%s Coupon History'), $customer->name), + title: sprintf( __( '%s Coupon History' ), $customer->name ), queryParams: [ 'customer_id' => $customer->id, 'customer_coupon_id' => $customerCoupon->id, diff --git a/app/Http/Controllers/Dashboard/CustomersGroupsController.php b/app/Http/Controllers/Dashboard/CustomersGroupsController.php index bfd832632..5abaa93bb 100644 --- a/app/Http/Controllers/Dashboard/CustomersGroupsController.php +++ b/app/Http/Controllers/Dashboard/CustomersGroupsController.php @@ -30,9 +30,9 @@ public function createCustomerGroup() return CustomerGroupCrud::form(); } - public function editCustomerGroup(CustomerGroup $group) + public function editCustomerGroup( CustomerGroup $group ) { - return CustomerGroupCrud::form($group); + return CustomerGroupCrud::form( $group ); } /** @@ -42,10 +42,10 @@ public function editCustomerGroup(CustomerGroup $group) * @param int customer id * @return Model */ - public function get($id = null) + public function get( $id = null ) { - if ($id !== null) { - return CustomerGroup::find($id); + if ( $id !== null ) { + return CustomerGroup::find( $id ); } return CustomerGroup::get(); @@ -56,12 +56,12 @@ public function get($id = null) * * @param int customer group id */ - public function delete($id) + public function delete( $id ) { - $group = CustomerGroup::find($id); - if ($group instanceof CustomerGroup) { - if ($group->customers->count() > 0) { - throw new Exception(__('Unable to delete a group to which customers are still assigned.')); + $group = CustomerGroup::find( $id ); + if ( $group instanceof CustomerGroup ) { + if ( $group->customers->count() > 0 ) { + throw new Exception( __( 'Unable to delete a group to which customers are still assigned.' ) ); } /** @@ -72,11 +72,11 @@ public function delete($id) return [ 'status' => 'success', - 'message' => __('The customer group has been deleted.'), + 'message' => __( 'The customer group has been deleted.' ), ]; } - throw new Exception(__('Unable to find the requested group.')); + throw new Exception( __( 'Unable to find the requested group.' ) ); } /** @@ -85,16 +85,16 @@ public function delete($id) * @param object Request * @return array */ - public function post(Request $request) + public function post( Request $request ) { - $fields = $request->only([ + $fields = $request->only( [ 'name', 'description', 'reward_system_id', - ]); + ] ); $group = new CustomerGroup; - foreach ($fields as $name => $value) { + foreach ( $fields as $name => $value ) { $group->$name = $value; } $group->author = Auth::id(); @@ -102,8 +102,8 @@ public function post(Request $request) return [ 'status' => 'success', - 'message' => __('The customer group has been successfully created.'), - 'data' => compact('group'), + 'message' => __( 'The customer group has been successfully created.' ), + 'data' => compact( 'group' ), ]; } @@ -114,17 +114,17 @@ public function post(Request $request) * @param int customer group id * @return array */ - public function put(Request $request, $id) + public function put( Request $request, $id ) { - $group = CustomerGroup::find($id); - $fields = $request->only([ + $group = CustomerGroup::find( $id ); + $fields = $request->only( [ 'name', 'description', 'reward_system_id', - ]); + ] ); - if ($group instanceof CustomerGroup) { - foreach ($fields as $name => $value) { + if ( $group instanceof CustomerGroup ) { + foreach ( $fields as $name => $value ) { $group->$name = $value; } } @@ -134,73 +134,73 @@ public function put(Request $request, $id) return [ 'status' => 'success', - 'message' => __('The customer group has been successfully saved.'), - 'data' => compact('group'), + 'message' => __( 'The customer group has been successfully saved.' ), + 'data' => compact( 'group' ), ]; } - public function transferOwnership(Request $request) + public function transferOwnership( Request $request ) { - $from = $request->input('from'); - $to = $request->input('to'); + $from = $request->input( 'from' ); + $to = $request->input( 'to' ); - if ($to === $from) { - throw new NotAllowedException(__('Unable to transfer customers to the same account.')); + if ( $to === $from ) { + throw new NotAllowedException( __( 'Unable to transfer customers to the same account.' ) ); } - $fromModel = CustomerGroup::findOrFail($from); - $toModel = CustomerGroup::findOrFail($to); - $customersID = $request->input('ids'); + $fromModel = CustomerGroup::findOrFail( $from ); + $toModel = CustomerGroup::findOrFail( $to ); + $customersID = $request->input( 'ids' ); /** * if we attemps to move * all the customer from * one group to another */ - if ($customersID === '*') { - $customers = Customer::where('group_id', $fromModel->id) + if ( $customersID === '*' ) { + $customers = Customer::where( 'group_id', $fromModel->id ) ->get(); $customers - ->forEach(function ($customer) use ($toModel) { + ->forEach( function ( $customer ) use ( $toModel ) { $customer->group_id = $toModel->id; $customer->save(); - }); + } ); return [ 'status' => 'success', - 'message' => sprintf(__('All the customers has been transferred to the new group %s.'), $toModel->name), + 'message' => sprintf( __( 'All the customers has been transferred to the new group %s.' ), $toModel->name ), ]; - } elseif (is_array($customersID)) { + } elseif ( is_array( $customersID ) ) { /** * here we're trying to move * more than one customer using a * provided id */ - foreach ($customersID as $customerID) { - $customer = Customer::where('id', $customerID) - ->where('group_id', $fromModel->id) + foreach ( $customersID as $customerID ) { + $customer = Customer::where( 'id', $customerID ) + ->where( 'group_id', $fromModel->id ) ->get() - ->forEach(function ($customer) use ($toModel) { + ->forEach( function ( $customer ) use ( $toModel ) { $customer->group_id = $toModel->id; $customer->save(); - }); + } ); } return [ 'status' => 'success', - 'message' => sprintf(__('The categories has been transferred to the group %s.'), $toModel->name), + 'message' => sprintf( __( 'The categories has been transferred to the group %s.' ), $toModel->name ), ]; } - throw new Exception(__('No customer identifier has been provided to proceed to the transfer.')); + throw new Exception( __( 'No customer identifier has been provided to proceed to the transfer.' ) ); } - public function getCustomers($group_id) + public function getCustomers( $group_id ) { - $customerGroup = CustomerGroup::find($group_id); + $customerGroup = CustomerGroup::find( $group_id ); - if (! $customerGroup instanceof CustomerGroup) { - throw new NotFoundException(__('Unable to find the requested group using the provided id.')); + if ( ! $customerGroup instanceof CustomerGroup ) { + throw new NotFoundException( __( 'Unable to find the requested group using the provided id.' ) ); } return $customerGroup->customers; diff --git a/app/Http/Controllers/Dashboard/FieldsController.php b/app/Http/Controllers/Dashboard/FieldsController.php index 16dc63ebb..85d80a112 100644 --- a/app/Http/Controllers/Dashboard/FieldsController.php +++ b/app/Http/Controllers/Dashboard/FieldsController.php @@ -9,14 +9,14 @@ class FieldsController extends DashboardController { - public function getFields($resource, $identifier = null) + public function getFields( $resource, $identifier = null ) { - $instance = Hook::filter('ns.fields', $resource, $identifier); + $instance = Hook::filter( 'ns.fields', $resource, $identifier ); - if (! $instance instanceof FieldsService) { - throw new Exception(sprintf(__('"%s" is not an instance of "FieldsService"'), $resource)); + if ( ! $instance instanceof FieldsService ) { + throw new Exception( sprintf( __( '"%s" is not an instance of "FieldsService"' ), $resource ) ); } - return $instance->get($identifier); + return $instance->get( $identifier ); } } diff --git a/app/Http/Controllers/Dashboard/FormsController.php b/app/Http/Controllers/Dashboard/FormsController.php index 327e41fa6..f82256883 100644 --- a/app/Http/Controllers/Dashboard/FormsController.php +++ b/app/Http/Controllers/Dashboard/FormsController.php @@ -16,36 +16,36 @@ class FormsController extends DashboardController { - public function getForm($resource) + public function getForm( $resource ) { /** * @var SettingsPage */ - $instance = Hook::filter('ns.forms', [], $resource); + $instance = Hook::filter( 'ns.forms', [], $resource ); - if (! $instance instanceof SettingsPage) { - throw new Exception(sprintf( + if ( ! $instance instanceof SettingsPage ) { + throw new Exception( sprintf( '%s is not an instanceof "%s".', $resource, SettingsPage::class - )); + ) ); } return $instance->getForm(); } - public function saveForm(FormsRequest $request, $resource, $identifier = null) + public function saveForm( FormsRequest $request, $resource, $identifier = null ) { - $instance = Hook::filter('ns.forms', [], $resource, $identifier); + $instance = Hook::filter( 'ns.forms', [], $resource, $identifier ); - if (! $instance instanceof SettingsPage) { - throw new Exception(sprintf( + if ( ! $instance instanceof SettingsPage ) { + throw new Exception( sprintf( '%s is not an instanceof "%s".', $resource, SettingsPage::class - )); + ) ); } - return $instance->saveForm($request); + return $instance->saveForm( $request ); } } diff --git a/app/Http/Controllers/Dashboard/HomeController.php b/app/Http/Controllers/Dashboard/HomeController.php index c861af191..cea0196fb 100644 --- a/app/Http/Controllers/Dashboard/HomeController.php +++ b/app/Http/Controllers/Dashboard/HomeController.php @@ -15,11 +15,11 @@ class HomeController extends DashboardController { public function welcome() { - return View::make('welcome', [ + return View::make( 'welcome', [ 'title' => sprintf( - __('Welcome — %s'), - ns()->option->get('ns_store_name', 'NexoPOS ' . config('nexopos.version')) + __( 'Welcome — %s' ), + ns()->option->get( 'ns_store_name', 'NexoPOS ' . config( 'nexopos.version' ) ) ), - ]); + ] ); } } diff --git a/app/Http/Controllers/Dashboard/MediasController.php b/app/Http/Controllers/Dashboard/MediasController.php index 56b74905f..08c466c9e 100644 --- a/app/Http/Controllers/Dashboard/MediasController.php +++ b/app/Http/Controllers/Dashboard/MediasController.php @@ -22,10 +22,10 @@ public function __construct( public function showMedia() { - return View::make('pages.dashboard.medias.list', [ - 'title' => __('Manage Medias'), - 'description' => __('Upload and manage medias (photos).'), - ]); + return View::make( 'pages.dashboard.medias.list', [ + 'title' => __( 'Manage Medias' ), + 'description' => __( 'Upload and manage medias (photos).' ), + ] ); } /** @@ -43,44 +43,44 @@ public function getMedias() * * @return json */ - public function updateMedia(Media $media, Request $request) + public function updateMedia( Media $media, Request $request ) { - $validation = Validator::make($request->all(), [ + $validation = Validator::make( $request->all(), [ 'name' => 'required', - ]); + ] ); - if ($validation->fails()) { - throw new NotAllowedException('An error occured while updating the media file.'); + if ( $validation->fails() ) { + throw new NotAllowedException( 'An error occured while updating the media file.' ); } - $media->name = $request->input('name'); + $media->name = $request->input( 'name' ); $media->save(); return [ 'status' => 'success', - 'message' => __('The media name was successfully updated.'), + 'message' => __( 'The media name was successfully updated.' ), ]; } - public function bulkDeleteMedias(Request $request) + public function bulkDeleteMedias( Request $request ) { - ns()->restrict('nexopos.delete.medias'); + ns()->restrict( 'nexopos.delete.medias' ); $result = []; - foreach ($request->input('ids') as $id) { - $result[] = $this->mediaService->deleteMedia($id); + foreach ( $request->input( 'ids' ) as $id ) { + $result[] = $this->mediaService->deleteMedia( $id ); } return [ 'status' => 'success', - 'message' => __('The operation was successful.'), - 'data' => compact('result'), + 'message' => __( 'The operation was successful.' ), + 'data' => compact( 'result' ), ]; } - public function uploadMedias(Request $request) + public function uploadMedias( Request $request ) { - return $this->mediaService->upload($request->file('file')); + return $this->mediaService->upload( $request->file( 'file' ) ); } } diff --git a/app/Http/Controllers/Dashboard/ModulesController.php b/app/Http/Controllers/Dashboard/ModulesController.php index 951768423..44a15c33e 100644 --- a/app/Http/Controllers/Dashboard/ModulesController.php +++ b/app/Http/Controllers/Dashboard/ModulesController.php @@ -25,30 +25,30 @@ public function __construct( protected ModulesService $modules, protected DateService $dateService ) { - $this->middleware(function ($request, $next) { - ns()->restrict([ 'manage.modules' ]); + $this->middleware( function ( $request, $next ) { + ns()->restrict( [ 'manage.modules' ] ); - return $next($request); - }); + return $next( $request ); + } ); } - public function listModules($page = '') + public function listModules( $page = '' ) { - return View::make('pages.dashboard.modules.list', [ - 'title' => __('Modules List'), - 'description' => __('List all available modules.'), - ]); + return View::make( 'pages.dashboard.modules.list', [ + 'title' => __( 'Modules List' ), + 'description' => __( 'List all available modules.' ), + ] ); } - public function downloadModule($identifier) + public function downloadModule( $identifier ) { - ns()->restrict([ 'manage.modules' ]); + ns()->restrict( [ 'manage.modules' ] ); - $module = $this->modules->get($identifier); - $download = $this->modules->extract($identifier); - $relativePath = substr($download[ 'path' ], strlen(base_path())); + $module = $this->modules->get( $identifier ); + $download = $this->modules->extract( $identifier ); + $relativePath = substr( $download[ 'path' ], strlen( base_path() ) ); - return Storage::disk('ns')->download($relativePath, Str::slug($module[ 'name' ]) . '-' . $module[ 'version' ] . '.zip'); + return Storage::disk( 'ns' )->download( $relativePath, Str::slug( $module[ 'name' ] ) . '-' . $module[ 'version' ] . '.zip' ); } /** @@ -57,9 +57,9 @@ public function downloadModule($identifier) * @param string status * @return array of modules */ - public function getModules($argument = '') + public function getModules( $argument = '' ) { - switch ($argument) { + switch ( $argument ) { case '': $list = $this->modules->get(); break; @@ -73,8 +73,8 @@ public function getModules($argument = '') return [ 'modules' => $list, - 'total_enabled' => count($this->modules->getEnabled()), - 'total_disabled' => count($this->modules->getDisabled()), + 'total_enabled' => count( $this->modules->getEnabled() ), + 'total_disabled' => count( $this->modules->getDisabled() ), ]; } @@ -83,17 +83,17 @@ public function getModules($argument = '') * * @param string module namespace * @return Request $request - * @return array response + * @return array response * * @deprecated */ - public function migrate($namespace, Request $request) + public function migrate( $namespace, Request $request ) { - $module = $this->modules->get($namespace); - $result = $this->modules->runMigration($module[ 'namespace' ], $request->input('version'), $request->input('file')); + $module = $this->modules->get( $namespace ); + $result = $this->modules->runMigration( $module[ 'namespace' ], $request->input( 'version' ), $request->input( 'file' ) ); - if ($result[ 'status' ] === 'failed') { - throw new Exception($result[ 'message' ]); + if ( $result[ 'status' ] === 'failed' ) { + throw new Exception( $result[ 'message' ] ); } return $result; @@ -103,35 +103,35 @@ public function migrate($namespace, Request $request) * @param string module identifier * @return array operation response */ - public function disableModule($argument) + public function disableModule( $argument ) { - return $this->modules->disable($argument); + return $this->modules->disable( $argument ); } /** * @param string module identifier * @return array operation response */ - public function enableModule($argument) + public function enableModule( $argument ) { - return $this->modules->enable($argument); + return $this->modules->enable( $argument ); } /** * @param string module identifier * @return array operation response */ - public function deleteModule($argument) + public function deleteModule( $argument ) { - return $this->modules->delete($argument); + return $this->modules->delete( $argument ); } public function showUploadModule() { - return View::make('pages.dashboard.modules.upload', [ - 'title' => __('Upload A Module'), - 'description' => __('Extends NexoPOS features with some new modules.'), - ]); + return View::make( 'pages.dashboard.modules.upload', [ + 'title' => __( 'Upload A Module' ), + 'description' => __( 'Extends NexoPOS features with some new modules.' ), + ] ); } /** @@ -139,20 +139,20 @@ public function showUploadModule() * * @return Json|Redirect response */ - public function uploadModule(ModuleUploadRequest $request) + public function uploadModule( ModuleUploadRequest $request ) { - $result = $this->modules->upload($request->file('module')); + $result = $this->modules->upload( $request->file( 'module' ) ); /** * if the module upload was successful */ - if ($result[ 'status' ] === 'success') { - return redirect(ns()->route('ns.dashboard.modules-list'))->with($result); + if ( $result[ 'status' ] === 'success' ) { + return redirect( ns()->route( 'ns.dashboard.modules-list' ) )->with( $result ); } else { - $validator = Validator::make($request->all(), []); - $validator->errors()->add('module', $result[ 'message' ]); + $validator = Validator::make( $request->all(), [] ); + $validator->errors()->add( 'module', $result[ 'message' ] ); - return redirect(ns()->route('ns.dashboard.modules-upload'))->withErrors($validator); + return redirect( ns()->route( 'ns.dashboard.modules-upload' ) )->withErrors( $validator ); } } } diff --git a/app/Http/Controllers/Dashboard/NotificationsController.php b/app/Http/Controllers/Dashboard/NotificationsController.php index 879b8e6ed..8f88b5ce4 100644 --- a/app/Http/Controllers/Dashboard/NotificationsController.php +++ b/app/Http/Controllers/Dashboard/NotificationsController.php @@ -28,19 +28,19 @@ public function __construct( */ public function getNotifications() { - return Notification::for(Auth::id())->orderBy('id', 'desc')->get(); + return Notification::for( Auth::id() )->orderBy( 'id', 'desc' )->get(); } /** * @return array */ - public function deleteSingleNotification($id) + public function deleteSingleNotification( $id ) { - $this->notificationService->deleteSingleNotification($id); + $this->notificationService->deleteSingleNotification( $id ); return [ 'status' => 'success', - 'message' => __('The notification has been successfully deleted'), + 'message' => __( 'The notification has been successfully deleted' ), ]; } @@ -49,11 +49,11 @@ public function deleteSingleNotification($id) */ public function deletAllNotifications() { - $this->notificationService->deleteNotificationsFor(Auth::user()); + $this->notificationService->deleteNotificationsFor( Auth::user() ); return [ 'status' => 'success', - 'message' => __('All the notifications have been cleared.'), + 'message' => __( 'All the notifications have been cleared.' ), ]; } } diff --git a/app/Http/Controllers/Dashboard/OrdersController.php b/app/Http/Controllers/Dashboard/OrdersController.php index 35a33fac4..8819dcfc1 100644 --- a/app/Http/Controllers/Dashboard/OrdersController.php +++ b/app/Http/Controllers/Dashboard/OrdersController.php @@ -39,78 +39,78 @@ public function __construct( private Options $optionsService, protected DateService $dateService ) { - $this->middleware(function ($request, $next) { + $this->middleware( function ( $request, $next ) { /** * @todo must be refactored */ - $this->paymentTypes = PaymentType::orderBy('priority', 'asc') + $this->paymentTypes = PaymentType::orderBy( 'priority', 'asc' ) ->active() ->get() - ->map(function ($payment, $index) { + ->map( function ( $payment, $index ) { $payment->selected = $index === 0; return $payment; - }); + } ); - return $next($request); - }); + return $next( $request ); + } ); } - public function create(Request $request) + public function create( Request $request ) { - return $this->ordersService->create($request->post()); + return $this->ordersService->create( $request->post() ); } - public function updateOrder(Order $id, Request $request) + public function updateOrder( Order $id, Request $request ) { - return $this->ordersService->create($request->post(), $id); + return $this->ordersService->create( $request->post(), $id ); } - public function addProductToOrder($order_id, Request $request) + public function addProductToOrder( $order_id, Request $request ) { - $order = $this->ordersService->getOrder($order_id); + $order = $this->ordersService->getOrder( $order_id ); - return $this->ordersService->addProducts($order, $request->input('products')); + return $this->ordersService->addProducts( $order, $request->input( 'products' ) ); } - public function getOrderPaymentReceipt(OrderPayment $orderPayment, Request $request) + public function getOrderPaymentReceipt( OrderPayment $orderPayment, Request $request ) { $order = $orderPayment->order; - $order->load('customer'); - $order->load('products'); - $order->load('shipping_address'); - $order->load('billing_address'); - $order->load('user'); + $order->load( 'customer' ); + $order->load( 'products' ); + $order->load( 'shipping_address' ); + $order->load( 'billing_address' ); + $order->load( 'user' ); - $orderPayment->load('order'); + $orderPayment->load( 'order' ); - return View::make('pages.dashboard.orders.templates.payment-receipt', [ + return View::make( 'pages.dashboard.orders.templates.payment-receipt', [ 'payment' => $orderPayment, 'order' => $order, - 'paymentTypes' => collect($this->paymentTypes)->mapWithKeys(function ($payment) { + 'paymentTypes' => collect( $this->paymentTypes )->mapWithKeys( function ( $payment ) { return [ $payment[ 'identifier' ] => $payment[ 'label' ] ]; - }), - 'ordersService' => app()->make(OrdersService::class), + } ), + 'ordersService' => app()->make( OrdersService::class ), 'billing' => ( new CustomerCrud )->getForm()[ 'tabs' ][ 'billing' ][ 'fields' ], 'shipping' => ( new CustomerCrud )->getForm()[ 'tabs' ][ 'shipping' ][ 'fields' ], - 'title' => sprintf(__('Payment Receipt — %s'), $order->code), - ]); + 'title' => sprintf( __( 'Payment Receipt — %s' ), $order->code ), + ] ); } public function listOrders() { Hook::addAction( 'ns-crud-footer', - fn(Output $output) => $output - ->addView('pages.dashboard.orders.footer') + fn( Output $output ) => $output + ->addView( 'pages.dashboard.orders.footer' ) ); return OrderCrud::table(); } - public function getPOSOrder($order_id) + public function getPOSOrder( $order_id ) { - return $this->ordersService->getOrder($order_id); + return $this->ordersService->getOrder( $order_id ); } /** @@ -119,42 +119,42 @@ public function getPOSOrder($order_id) * @param int order id * @return array or product */ - public function getOrderProducts($id) + public function getOrderProducts( $id ) { - return $this->ordersService->getOrderProducts($id); + return $this->ordersService->getOrderProducts( $id ); } - public function getOrderPayments($id) + public function getOrderPayments( $id ) { - return $this->ordersService->getOrderPayments($id); + return $this->ordersService->getOrderPayments( $id ); } - public function deleteOrderProduct($orderId, $productId) + public function deleteOrderProduct( $orderId, $productId ) { - $order = $this->ordersService->getOrder($orderId); + $order = $this->ordersService->getOrder( $orderId ); - return $this->ordersService->deleteOrderProduct($order, $productId); + return $this->ordersService->deleteOrderProduct( $order, $productId ); } - public function getOrders(Order $id = null) + public function getOrders( ?Order $id = null ) { - if ($id instanceof Order) { - $id->load('customer'); - $id->load('payments'); - $id->load('shipping_address'); - $id->load('billing_address'); - $id->load('products.unit'); - $id->load('refundedProducts.unit', 'refundedProducts.product', 'refundedProducts.orderProduct'); + if ( $id instanceof Order ) { + $id->load( 'customer' ); + $id->load( 'payments' ); + $id->load( 'shipping_address' ); + $id->load( 'billing_address' ); + $id->load( 'products.unit' ); + $id->load( 'refundedProducts.unit', 'refundedProducts.product', 'refundedProducts.orderProduct' ); return $id; } - if (request()->query('limit')) { - return Order::limit(request()->query('limit')) + if ( request()->query( 'limit' ) ) { + return Order::limit( request()->query( 'limit' ) ) ->get(); } - return Order::with('customer')->get(); + return Order::with( 'customer' )->get(); } public function showPOS() @@ -165,128 +165,128 @@ public function showPOS() */ Hook::addAction( 'ns-dashboard-footer', - fn(Output $output) => $output - ->addView('pages.dashboard.orders.footer') + fn( Output $output ) => $output + ->addView( 'pages.dashboard.orders.footer' ) ); - return View::make('pages.dashboard.orders.pos', [ + return View::make( 'pages.dashboard.orders.pos', [ 'title' => sprintf( - __('POS'), - ns()->option->get('ns_store_name', 'NexoPOS') + __( 'POS' ), + ns()->option->get( 'ns_store_name', 'NexoPOS' ) ), - 'orderTypes' => collect($this->ordersService->getTypeOptions()) - ->filter(function ($type, $label) { - return in_array($label, ns()->option->get('ns_pos_order_types') ?: []); - }), - 'options' => Hook::filter('ns-pos-options', [ - 'ns_pos_printing_document' => ns()->option->get('ns_pos_printing_document', 'receipt'), - 'ns_orders_allow_partial' => ns()->option->get('ns_orders_allow_partial', 'no'), - 'ns_orders_allow_unpaid' => ns()->option->get('ns_orders_allow_unpaid', 'no'), - 'ns_pos_customers_creation_enabled' => ns()->option->get('ns_pos_customers_creation_enabled', 'no'), - 'ns_pos_order_types' => ns()->option->get('ns_pos_order_types', []), - 'ns_pos_order_sms' => ns()->option->get('ns_pos_order_sms', 'no'), - 'ns_pos_sound_enabled' => ns()->option->get('ns_pos_sound_enabled', 'yes'), - 'ns_pos_quick_product' => ns()->option->get('ns_pos_quick_product', 'no'), - 'ns_pos_quick_product_default_unit' => ns()->option->get('ns_pos_quick_product_default_unit', 0), - 'ns_pos_price_with_tax' => ns()->option->get('ns_pos_price_with_tax', 'no'), - 'ns_pos_unit_price_ediable' => ns()->option->get('ns_pos_unit_price_ediable', 'no'), - 'ns_pos_printing_enabled_for' => ns()->option->get('ns_pos_printing_enabled_for', 'only_paid_orders'), - 'ns_pos_registers_enabled' => ns()->option->get('ns_pos_registers_enabled', 'no'), - 'ns_pos_idle_counter' => ns()->option->get('ns_pos_idle_counter', 0), - 'ns_pos_disbursement' => ns()->option->get('ns_pos_disbursement', 'no'), - 'ns_customers_default' => ns()->option->get('ns_customers_default', false), - 'ns_pos_vat' => ns()->option->get('ns_pos_vat', 'disabled'), - 'ns_pos_tax_group' => ns()->option->get('ns_pos_tax_group', null), - 'ns_pos_tax_type' => ns()->option->get('ns_pos_tax_type', false), - 'ns_pos_printing_gateway' => ns()->option->get('ns_pos_printing_gateway', 'default'), - 'ns_pos_show_quantity' => ns()->option->get('ns_pos_show_quantity', 'no') === 'no' ? false : true, - 'ns_pos_new_item_audio' => ns()->option->get('ns_pos_new_item_audio', ''), - 'ns_pos_complete_sale_audio' => ns()->option->get('ns_pos_complete_sale_audio', ''), - 'ns_pos_numpad' => ns()->option->get('ns_pos_numpad', 'default'), - 'ns_pos_allow_wholesale_price' => ns()->option->get('ns_pos_allow_wholesale_price', 'no') === 'yes' ? true : false, - 'ns_pos_allow_decimal_quantities' => ns()->option->get('ns_pos_allow_decimal_quantities', 'no') === 'yes' ? true : false, - 'ns_pos_force_autofocus' => ns()->option->get('ns_pos_force_autofocus', 'no') === 'yes' ? true : false, - ]), + 'orderTypes' => collect( $this->ordersService->getTypeOptions() ) + ->filter( function ( $type, $label ) { + return in_array( $label, ns()->option->get( 'ns_pos_order_types' ) ?: [] ); + } ), + 'options' => Hook::filter( 'ns-pos-options', [ + 'ns_pos_printing_document' => ns()->option->get( 'ns_pos_printing_document', 'receipt' ), + 'ns_orders_allow_partial' => ns()->option->get( 'ns_orders_allow_partial', 'no' ), + 'ns_orders_allow_unpaid' => ns()->option->get( 'ns_orders_allow_unpaid', 'no' ), + 'ns_pos_customers_creation_enabled' => ns()->option->get( 'ns_pos_customers_creation_enabled', 'no' ), + 'ns_pos_order_types' => ns()->option->get( 'ns_pos_order_types', [] ), + 'ns_pos_order_sms' => ns()->option->get( 'ns_pos_order_sms', 'no' ), + 'ns_pos_sound_enabled' => ns()->option->get( 'ns_pos_sound_enabled', 'yes' ), + 'ns_pos_quick_product' => ns()->option->get( 'ns_pos_quick_product', 'no' ), + 'ns_pos_quick_product_default_unit' => ns()->option->get( 'ns_pos_quick_product_default_unit', 0 ), + 'ns_pos_price_with_tax' => ns()->option->get( 'ns_pos_price_with_tax', 'no' ), + 'ns_pos_unit_price_ediable' => ns()->option->get( 'ns_pos_unit_price_ediable', 'no' ), + 'ns_pos_printing_enabled_for' => ns()->option->get( 'ns_pos_printing_enabled_for', 'only_paid_orders' ), + 'ns_pos_registers_enabled' => ns()->option->get( 'ns_pos_registers_enabled', 'no' ), + 'ns_pos_idle_counter' => ns()->option->get( 'ns_pos_idle_counter', 0 ), + 'ns_pos_disbursement' => ns()->option->get( 'ns_pos_disbursement', 'no' ), + 'ns_customers_default' => ns()->option->get( 'ns_customers_default', false ), + 'ns_pos_vat' => ns()->option->get( 'ns_pos_vat', 'disabled' ), + 'ns_pos_tax_group' => ns()->option->get( 'ns_pos_tax_group', null ), + 'ns_pos_tax_type' => ns()->option->get( 'ns_pos_tax_type', false ), + 'ns_pos_printing_gateway' => ns()->option->get( 'ns_pos_printing_gateway', 'default' ), + 'ns_pos_show_quantity' => ns()->option->get( 'ns_pos_show_quantity', 'no' ) === 'no' ? false : true, + 'ns_pos_new_item_audio' => ns()->option->get( 'ns_pos_new_item_audio', '' ), + 'ns_pos_complete_sale_audio' => ns()->option->get( 'ns_pos_complete_sale_audio', '' ), + 'ns_pos_numpad' => ns()->option->get( 'ns_pos_numpad', 'default' ), + 'ns_pos_allow_wholesale_price' => ns()->option->get( 'ns_pos_allow_wholesale_price', 'no' ) === 'yes' ? true : false, + 'ns_pos_allow_decimal_quantities' => ns()->option->get( 'ns_pos_allow_decimal_quantities', 'no' ) === 'yes' ? true : false, + 'ns_pos_force_autofocus' => ns()->option->get( 'ns_pos_force_autofocus', 'no' ) === 'yes' ? true : false, + ] ), 'urls' => [ - 'sale_printing_url' => Hook::filter('ns-pos-printing-url', ns()->url('/dashboard/orders/receipt/{id}?dash-visibility=disabled&autoprint=true')), - 'orders_url' => ns()->route('ns.dashboard.orders'), - 'dashboard_url' => ns()->route('ns.dashboard.home'), - 'categories_url' => ns()->route('ns.dashboard.products.categories.create'), - 'registers_url' => ns()->route('ns.dashboard.registers-create'), - 'order_type_url' => ns()->route('ns.dashboard.settings', [ 'settings' => 'pos?tab=features' ]), + 'sale_printing_url' => Hook::filter( 'ns-pos-printing-url', ns()->url( '/dashboard/orders/receipt/{id}?dash-visibility=disabled&autoprint=true' ) ), + 'orders_url' => ns()->route( 'ns.dashboard.orders' ), + 'dashboard_url' => ns()->route( 'ns.dashboard.home' ), + 'categories_url' => ns()->route( 'ns.dashboard.products.categories.create' ), + 'registers_url' => ns()->route( 'ns.dashboard.registers-create' ), + 'order_type_url' => ns()->route( 'ns.dashboard.settings', [ 'settings' => 'pos?tab=features' ] ), ], 'paymentTypes' => $this->paymentTypes, - ]); + ] ); } - public function orderInvoice(Order $order) + public function orderInvoice( Order $order ) { - $optionsService = app()->make(Options::class); + $optionsService = app()->make( Options::class ); - $order->load('customer'); - $order->load('products'); - $order->load('shipping_address'); - $order->load('billing_address'); - $order->load('user'); - $order->load('taxes'); + $order->load( 'customer' ); + $order->load( 'products' ); + $order->load( 'shipping_address' ); + $order->load( 'billing_address' ); + $order->load( 'user' ); + $order->load( 'taxes' ); - $order->products = Hook::filter('ns-receipt-products', $order->products); + $order->products = Hook::filter( 'ns-receipt-products', $order->products ); - $order->paymentStatus = $this->ordersService->getPaymentLabel($order->payment_status); - $order->deliveryStatus = $this->ordersService->getPaymentLabel($order->delivery_status); + $order->paymentStatus = $this->ordersService->getPaymentLabel( $order->payment_status ); + $order->deliveryStatus = $this->ordersService->getPaymentLabel( $order->delivery_status ); - return View::make('pages.dashboard.orders.templates.invoice', [ + return View::make( 'pages.dashboard.orders.templates.invoice', [ 'order' => $order, 'options' => $optionsService->get(), 'billing' => ( new CustomerCrud )->getForm()[ 'tabs' ][ 'billing' ][ 'fields' ], 'shipping' => ( new CustomerCrud )->getForm()[ 'tabs' ][ 'shipping' ][ 'fields' ], - 'title' => sprintf(__('Order Invoice — %s'), $order->code), - ]); + 'title' => sprintf( __( 'Order Invoice — %s' ), $order->code ), + ] ); } - public function orderRefundReceipt(OrderRefund $refund) + public function orderRefundReceipt( OrderRefund $refund ) { - $refund->load('order.customer', 'order.refundedProducts', 'order.refunds.author', 'order.shipping_address', 'order.billing_address', 'order.user'); - $refund->load('refunded_products.product', 'refunded_products.unit'); + $refund->load( 'order.customer', 'order.refundedProducts', 'order.refunds.author', 'order.shipping_address', 'order.billing_address', 'order.user' ); + $refund->load( 'refunded_products.product', 'refunded_products.unit' ); - $refund->refunded_products = Hook::filter('ns-refund-receipt-products', $refund->refunded_products); + $refund->refunded_products = Hook::filter( 'ns-refund-receipt-products', $refund->refunded_products ); - return View::make('pages.dashboard.orders.templates.refund-receipt', [ + return View::make( 'pages.dashboard.orders.templates.refund-receipt', [ 'refund' => $refund, - 'ordersService' => app()->make(OrdersService::class), + 'ordersService' => app()->make( OrdersService::class ), 'billing' => ( new CustomerCrud )->getForm()[ 'tabs' ][ 'billing' ][ 'fields' ], 'shipping' => ( new CustomerCrud )->getForm()[ 'tabs' ][ 'shipping' ][ 'fields' ], - 'title' => sprintf(__('Order Refund Receipt — %s'), $refund->order->code), - ]); + 'title' => sprintf( __( 'Order Refund Receipt — %s' ), $refund->order->code ), + ] ); } - public function orderReceipt(Order $order) + public function orderReceipt( Order $order ) { - $order->load('customer'); - $order->load('products'); - $order->load('shipping_address'); - $order->load('billing_address'); - $order->load('user'); + $order->load( 'customer' ); + $order->load( 'products' ); + $order->load( 'shipping_address' ); + $order->load( 'billing_address' ); + $order->load( 'user' ); - return View::make('pages.dashboard.orders.templates.receipt', [ + return View::make( 'pages.dashboard.orders.templates.receipt', [ 'order' => $order, - 'title' => sprintf(__('Order Receipt — %s'), $order->code), + 'title' => sprintf( __( 'Order Receipt — %s' ), $order->code ), 'optionsService' => $this->optionsService, 'ordersService' => $this->ordersService, - 'paymentTypes' => collect($this->paymentTypes)->mapWithKeys(function ($payment) { + 'paymentTypes' => collect( $this->paymentTypes )->mapWithKeys( function ( $payment ) { return [ $payment[ 'identifier' ] => $payment[ 'label' ] ]; - }), - ]); + } ), + ] ); } - public function voidOrder(Order $order, Request $request) + public function voidOrder( Order $order, Request $request ) { - return $this->ordersService->void($order, $request->input('reason')); + return $this->ordersService->void( $order, $request->input( 'reason' ) ); } - public function deleteOrder(Order $order) + public function deleteOrder( Order $order ) { - return $this->ordersService->deleteOrder($order); + return $this->ordersService->deleteOrder( $order ); } public function getSupportedPayments() @@ -297,29 +297,29 @@ public function getSupportedPayments() /** * Will perform a payment on a specific order * - * @param Request $request + * @param Request $request * @return array */ - public function addPayment(Order $order, OrderPaymentRequest $request) + public function addPayment( Order $order, OrderPaymentRequest $request ) { - return $this->ordersService->makeOrderSinglePayment([ - 'identifier' => $request->input('identifier'), - 'value' => $request->input('value'), - ], $order); + return $this->ordersService->makeOrderSinglePayment( [ + 'identifier' => $request->input( 'identifier' ), + 'value' => $request->input( 'value' ), + ], $order ); } - public function makeOrderRefund(Order $order, Request $request) + public function makeOrderRefund( Order $order, Request $request ) { - return $this->ordersService->refundOrder($order, $request->all()); + return $this->ordersService->refundOrder( $order, $request->all() ); } - public function printOrder(Order $order, $doc = 'receipt') + public function printOrder( Order $order, $doc = 'receipt' ) { - OrderAfterPrintedEvent::dispatch($order, $doc); + OrderAfterPrintedEvent::dispatch( $order, $doc ); return [ 'status' => 'success', - 'message' => __('The printing event has been successfully dispatched.'), + 'message' => __( 'The printing event has been successfully dispatched.' ), ]; } @@ -328,50 +328,50 @@ public function listInstalments() return OrderInstalmentCrud::table(); } - public function getOrderInstalments(Order $order) + public function getOrderInstalments( Order $order ) { return $order->instalments; } - public function updateInstalment(Order $order, OrderInstalment $instalment, Request $request) + public function updateInstalment( Order $order, OrderInstalment $instalment, Request $request ) { return $this->ordersService->updateInstalment( $order, $instalment, - $request->input('instalment') + $request->input( 'instalment' ) ); } - public function deleteInstalment(Order $order, OrderInstalment $instalment) + public function deleteInstalment( Order $order, OrderInstalment $instalment ) { - if ((int) $order->id !== (int) $instalment->order_id) { - throw new NotAllowedException(__('There is a mismatch between the provided order and the order attached to the instalment.')); + if ( (int) $order->id !== (int) $instalment->order_id ) { + throw new NotAllowedException( __( 'There is a mismatch between the provided order and the order attached to the instalment.' ) ); } - return $this->ordersService->deleteInstalment($order, $instalment); + return $this->ordersService->deleteInstalment( $order, $instalment ); } - public function createInstalment(Order $order, Request $request) + public function createInstalment( Order $order, Request $request ) { - return $this->ordersService->createInstalment($order, $request->input('instalment')); + return $this->ordersService->createInstalment( $order, $request->input( 'instalment' ) ); } - public function markInstalmentAs(Order $order, OrderInstalment $instalment) + public function markInstalmentAs( Order $order, OrderInstalment $instalment ) { - if ((int) $order->id !== (int) $instalment->order_id) { - throw new NotAllowedException(__('There is a mismatch between the provided order and the order attached to the instalment.')); + if ( (int) $order->id !== (int) $instalment->order_id ) { + throw new NotAllowedException( __( 'There is a mismatch between the provided order and the order attached to the instalment.' ) ); } - return $this->ordersService->markInstalmentAsPaid($order, $instalment); + return $this->ordersService->markInstalmentAsPaid( $order, $instalment ); } - public function payInstalment(Order $order, OrderInstalment $instalment, Request $request) + public function payInstalment( Order $order, OrderInstalment $instalment, Request $request ) { - if ((int) $order->id !== (int) $instalment->order_id) { - throw new NotAllowedException(__('There is a mismatch between the provided order and the order attached to the instalment.')); + if ( (int) $order->id !== (int) $instalment->order_id ) { + throw new NotAllowedException( __( 'There is a mismatch between the provided order and the order attached to the instalment.' ) ); } - return $this->ordersService->markInstalmentAsPaid($order, $instalment, $request->input('payment_type')); + return $this->ordersService->markInstalmentAsPaid( $order, $instalment, $request->input( 'payment_type' ) ); } /** @@ -379,9 +379,9 @@ public function payInstalment(Order $order, OrderInstalment $instalment, Request * * @return string json response */ - public function changeOrderProcessingStatus(Request $request, Order $order) + public function changeOrderProcessingStatus( Request $request, Order $order ) { - return $this->ordersService->changeProcessingStatus($order, $request->input('process_status')); + return $this->ordersService->changeProcessingStatus( $order, $request->input( 'process_status' ) ); } /** @@ -389,9 +389,9 @@ public function changeOrderProcessingStatus(Request $request, Order $order) * * @return string json response */ - public function changeOrderDeliveryStatus(Request $request, Order $order) + public function changeOrderDeliveryStatus( Request $request, Order $order ) { - return $this->ordersService->changeDeliveryStatus($order, $request->input('delivery_status')); + return $this->ordersService->changeDeliveryStatus( $order, $request->input( 'delivery_status' ) ); } public function listPaymentsTypes() @@ -404,18 +404,18 @@ public function createPaymentType() return PaymentTypeCrud::form(); } - public function updatePaymentType(PaymentType $paymentType) + public function updatePaymentType( PaymentType $paymentType ) { - return PaymentTypeCrud::form($paymentType); + return PaymentTypeCrud::form( $paymentType ); } - public function getOrderProductsRefunded(Request $request, Order $order) + public function getOrderProductsRefunded( Request $request, Order $order ) { - return $this->ordersService->getOrderRefundedProducts($order); + return $this->ordersService->getOrderRefundedProducts( $order ); } - public function getOrderRefunds(Request $request, Order $order) + public function getOrderRefunds( Request $request, Order $order ) { - return $this->ordersService->getOrderRefunds($order); + return $this->ordersService->getOrderRefunds( $order ); } } diff --git a/app/Http/Controllers/Dashboard/ProcurementController.php b/app/Http/Controllers/Dashboard/ProcurementController.php index 986602142..b544b2277 100644 --- a/app/Http/Controllers/Dashboard/ProcurementController.php +++ b/app/Http/Controllers/Dashboard/ProcurementController.php @@ -57,22 +57,22 @@ public function list() * create a procurement * using the provided informations */ - public function create(ProcurementRequest $request) + public function create( ProcurementRequest $request ) { - return $this->procurementService->create($request->only([ + return $this->procurementService->create( $request->only( [ 'general', 'name', 'products', - ])); + ] ) ); } - public function edit(Procurement $procurement, ProcurementRequest $request) + public function edit( Procurement $procurement, ProcurementRequest $request ) { - if ($procurement->delivery_status === Procurement::STOCKED) { - throw new NotAllowedException(__('Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.')); + if ( $procurement->delivery_status === Procurement::STOCKED ) { + throw new NotAllowedException( __( 'Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.' ) ); } - return $this->procurementService->edit($procurement->id, $request->only([ + return $this->procurementService->edit( $procurement->id, $request->only( [ 'general', 'name', 'products', - ])); + ] ) ); } /** @@ -82,19 +82,19 @@ public function edit(Procurement $procurement, ProcurementRequest $request) * @param int procurement id * @return array response */ - public function procure($procurement_id, Request $request) + public function procure( $procurement_id, Request $request ) { - $procurement = $this->procurementService->get($procurement_id); + $procurement = $this->procurementService->get( $procurement_id ); return $this->procurementService->saveProducts( $procurement, - collect($request->input('items')) + collect( $request->input( 'items' ) ) ); } - public function resetProcurement($procurement_id) + public function resetProcurement( $procurement_id ) { - return $this->procurementService->resetProcurement($procurement_id); + return $this->procurementService->resetProcurement( $procurement_id ); } /** @@ -103,31 +103,31 @@ public function resetProcurement($procurement_id) * @param int procurement_id * @return Collection */ - public function procurementProducts($procurement_id) + public function procurementProducts( $procurement_id ) { - return $this->procurementService->getProducts($procurement_id)->map(function ($product) { + return $this->procurementService->getProducts( $procurement_id )->map( function ( $product ) { $product->unit; return $product; - }); + } ); } /** * Will change the payment status * for a procurement. */ - public function changePaymentStatus(Procurement $procurement, Request $request) + public function changePaymentStatus( Procurement $procurement, Request $request ) { - if ($procurement->payment_status === Procurement::PAYMENT_PAID) { - throw new NotAllowedException(__('You cannot change the status of an already paid procurement.')); + if ( $procurement->payment_status === Procurement::PAYMENT_PAID ) { + throw new NotAllowedException( __( 'You cannot change the status of an already paid procurement.' ) ); } - $procurement->payment_status = $request->input('payment_status'); + $procurement->payment_status = $request->input( 'payment_status' ); $procurement->save(); return [ 'status' => 'success', - 'message' => __('The procurement payment status has been changed successfully.'), + 'message' => __( 'The procurement payment status has been changed successfully.' ), ]; } @@ -137,10 +137,10 @@ public function changePaymentStatus(Procurement $procurement, Request $request) * * @return array */ - public function setAsPaid(Procurement $procurement) + public function setAsPaid( Procurement $procurement ) { - if ($procurement->payment_status === Procurement::PAYMENT_PAID) { - throw new NotAllowedException(__('You cannot change the status of an already paid procurement.')); + if ( $procurement->payment_status === Procurement::PAYMENT_PAID ) { + throw new NotAllowedException( __( 'You cannot change the status of an already paid procurement.' ) ); } $procurement->payment_status = Procurement::PAYMENT_PAID; @@ -148,7 +148,7 @@ public function setAsPaid(Procurement $procurement) return [ 'status' => 'success', - 'message' => __('The procurement has been marked as paid.'), + 'message' => __( 'The procurement has been marked as paid.' ), ]; } @@ -161,15 +161,15 @@ public function setAsPaid(Procurement $procurement) * @param int product_id * @return array response */ - public function editProduct(Request $request, $procurement_id, $product_id) + public function editProduct( Request $request, $procurement_id, $product_id ) { - if ($this->procurementService->hasProduct($procurement_id, $product_id)) { - return $this->procurementService->updateProcurementProduct($product_id, $request->only([ 'quantity', 'unit_id', 'purchase_price' ])); + if ( $this->procurementService->hasProduct( $procurement_id, $product_id ) ) { + return $this->procurementService->updateProcurementProduct( $product_id, $request->only( [ 'quantity', 'unit_id', 'purchase_price' ] ) ); } throw new NotAllowedException( sprintf( - __('The product which id is %s doesnt\'t belong to the procurement which id is %s'), + __( 'The product which id is %s doesnt\'t belong to the procurement which id is %s' ), $product_id, $procurement_id ) @@ -182,13 +182,13 @@ public function editProduct(Request $request, $procurement_id, $product_id) * @param int procurement id * @return array response */ - public function refreshProcurement(Procurement $id) + public function refreshProcurement( Procurement $id ) { - ProcurementRefreshJob::dispatch($id); + ProcurementRefreshJob::dispatch( $id ); return [ 'status' => 'success', - 'message' => __('The refresh process has started. You\'ll get informed once it\'s complete.'), + 'message' => __( 'The refresh process has started. You\'ll get informed once it\'s complete.' ), ]; } @@ -198,9 +198,9 @@ public function refreshProcurement(Procurement $id) * @param int product_id * @return array response */ - public function deleteProcurementProduct($product_id) + public function deleteProcurementProduct( $product_id ) { - $procurementProduct = ProcurementProduct::find($product_id); + $procurementProduct = ProcurementProduct::find( $product_id ); return $this->procurementService->deleteProduct( $procurementProduct, @@ -215,14 +215,14 @@ public function deleteProcurementProduct($product_id) * @param int procurement id * @return array operation result */ - public function deleteProcurement($procurement_id) + public function deleteProcurement( $procurement_id ) { - return $this->procurementService->delete($procurement_id); + return $this->procurementService->delete( $procurement_id ); } - public function bulkUpdateProducts($procurement_id, Request $request) + public function bulkUpdateProducts( $procurement_id, Request $request ) { - return $this->procurementService->bulkUpdateProducts($procurement_id, $request->input('items')); + return $this->procurementService->bulkUpdateProducts( $procurement_id, $request->input( 'items' ) ); } /** @@ -240,74 +240,74 @@ public function listProcurements() */ public function createProcurement() { - ns()->restrict([ 'nexopos.create.procurements' ]); + ns()->restrict( [ 'nexopos.create.procurements' ] ); - return View::make('pages.dashboard.procurements.create', Hook::filter('ns-create-procurement-labels', [ - 'title' => __('New Procurement'), - 'description' => __('Make a new procurement.'), - ])); + return View::make( 'pages.dashboard.procurements.create', Hook::filter( 'ns-create-procurement-labels', [ + 'title' => __( 'New Procurement' ), + 'description' => __( 'Make a new procurement.' ), + ] ) ); } - public function updateProcurement(Procurement $procurement) + public function updateProcurement( Procurement $procurement ) { - ns()->restrict([ 'nexopos.update.procurements' ]); + ns()->restrict( [ 'nexopos.update.procurements' ] ); - if ($procurement->delivery_status === Procurement::STOCKED) { - throw new NotAllowedException(__('Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.')); + if ( $procurement->delivery_status === Procurement::STOCKED ) { + throw new NotAllowedException( __( 'Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.' ) ); } - return View::make('pages.dashboard.procurements.edit', Hook::filter('ns-update-procurement-labels', [ - 'title' => __('Edit Procurement'), - 'description' => __('Perform adjustment on existing procurement.'), + return View::make( 'pages.dashboard.procurements.edit', Hook::filter( 'ns-update-procurement-labels', [ + 'title' => __( 'Edit Procurement' ), + 'description' => __( 'Perform adjustment on existing procurement.' ), 'procurement' => $procurement, - ])); + ] ) ); } - public function procurementInvoice(Procurement $procurement) + public function procurementInvoice( Procurement $procurement ) { - ns()->restrict([ 'nexopos.read.procurements' ]); + ns()->restrict( [ 'nexopos.read.procurements' ] ); - return View::make('pages.dashboard.procurements.invoice', [ - 'title' => sprintf(__('%s - Invoice'), $procurement->name), - 'description' => __('list of product procured.'), + return View::make( 'pages.dashboard.procurements.invoice', [ + 'title' => sprintf( __( '%s - Invoice' ), $procurement->name ), + 'description' => __( 'list of product procured.' ), 'procurement' => $procurement, 'options' => $this->options, - ]); + ] ); } - public function searchProduct(Request $request) + public function searchProduct( Request $request ) { - return $this->procurementService->searchProduct($request->input('search')); + return $this->procurementService->searchProduct( $request->input( 'search' ) ); } - public function searchProcurementProduct(Request $request) + public function searchProcurementProduct( Request $request ) { $products = Product::query() ->trackingDisabled() ->withStockEnabled() ->notGrouped() - ->with('unit_quantities.unit') - ->where(function ($query) use ($request) { - $query->where('sku', 'LIKE', "%{$request->input('argument')}%") - ->orWhere('name', 'LIKE', "%{$request->input('argument')}%") - ->orWhere('barcode', 'LIKE', "%{$request->input('argument')}%"); - }) - ->limit(8) + ->with( 'unit_quantities.unit' ) + ->where( function ( $query ) use ( $request ) { + $query->where( 'sku', 'LIKE', "%{$request->input( 'argument' )}%" ) + ->orWhere( 'name', 'LIKE', "%{$request->input( 'argument' )}%" ) + ->orWhere( 'barcode', 'LIKE', "%{$request->input( 'argument' )}%" ); + } ) + ->limit( 8 ) ->get() - ->map(function ($product) { - $units = json_decode($product->purchase_unit_ids); + ->map( function ( $product ) { + $units = json_decode( $product->purchase_unit_ids ); - if ($units) { + if ( $units ) { $product->purchase_units = collect(); - collect($units)->each(function ($unitID) use (&$product) { - $product->purchase_units->push(Unit::find($unitID)); - }); + collect( $units )->each( function ( $unitID ) use ( &$product ) { + $product->purchase_units->push( Unit::find( $unitID ) ); + } ); } return $product; - }); + } ); - if (! $products->isEmpty()) { + if ( ! $products->isEmpty() ) { return [ 'from' => 'products', 'products' => $products, @@ -316,7 +316,7 @@ public function searchProcurementProduct(Request $request) return [ 'from' => 'procurements', - 'product' => $this->procurementService->searchProcurementProduct($request->input('argument')), + 'product' => $this->procurementService->searchProcurementProduct( $request->input( 'argument' ) ), ]; } @@ -325,8 +325,8 @@ public function getProcurementProducts() return ProcurementProductCrud::table(); } - public function editProcurementProduct(ProcurementProduct $product) + public function editProcurementProduct( ProcurementProduct $product ) { - return ProcurementProductCrud::form($product); + return ProcurementProductCrud::form( $product ); } } diff --git a/app/Http/Controllers/Dashboard/ProductsController.php b/app/Http/Controllers/Dashboard/ProductsController.php index 5ce46d943..2b2c0ff9d 100644 --- a/app/Http/Controllers/Dashboard/ProductsController.php +++ b/app/Http/Controllers/Dashboard/ProductsController.php @@ -37,10 +37,10 @@ public function __construct( // ... } - public function saveProduct(Request $request) + public function saveProduct( Request $request ) { - $primary = collect($request->input('variations')) - ->filter(fn($variation) => isset($variation[ '$primary' ])) + $primary = collect( $request->input( 'variations' ) ) + ->filter( fn( $variation ) => isset( $variation[ '$primary' ] ) ) ->first(); $source = $primary; @@ -50,12 +50,12 @@ public function saveProduct(Request $request) * this is made to ensure the array * provided aren't flatten */ - unset($primary[ 'units' ]); - unset($primary[ 'images' ]); - unset($primary[ 'groups' ]); + unset( $primary[ 'units' ] ); + unset( $primary[ 'images' ] ); + unset( $primary[ 'groups' ] ); - $primary[ 'identification' ][ 'name' ] = $request->input('name'); - $primary = Helper::flatArrayWithKeys($primary)->toArray(); + $primary[ 'identification' ][ 'name' ] = $request->input( 'name' ); + $primary = Helper::flatArrayWithKeys( $primary )->toArray(); $primary[ 'product_type' ] = 'product'; /** @@ -66,20 +66,30 @@ public function saveProduct(Request $request) $primary[ 'units' ] = $source[ 'units' ]; $primary[ 'groups' ] = $source[ 'groups' ] ?? []; - unset($primary[ '$primary' ]); + unset( $primary[ '$primary' ] ); /** * As foreign fields aren't handled with * they are complex (array), this methods allow * external script to reinject those complex fields. */ - $primary = Hook::filter('ns-create-products-inputs', $primary, $source); + $primary = Hook::filter( 'ns-create-products-inputs', $primary, $source ); /** * the method "create" is capable of * creating either a product or a variable product */ - return $this->productService->create($primary); + return $this->productService->create( $primary ); + } + + public function convertUnits( Request $request, Product $product ) + { + return $this->productService->convertUnitQuantities( + product: $product, + from: Unit::findOrFail( $request->input( 'from' ) ), + to: Unit::findOrFail( $request->input( 'to' ) ), + quantity: $request->input( 'quantity' ) + ); } /** @@ -101,46 +111,46 @@ public function getProduts() * @param int product id * @return array */ - public function updateProduct(Request $request, Product $product) + public function updateProduct( Request $request, Product $product ) { $productCrud = new ProductCrud; - $form = $productCrud->getFlatForm($request->post(), $product); + $form = $productCrud->getFlatForm( $request->post(), $product ); /** * the method "create" is capable of * creating either a product or a variable product */ - return $this->productService->update($product, $form); + return $this->productService->update( $product, $form ); } - public function searchProduct(Request $request) + public function searchProduct( Request $request ) { return $this->productService->searchProduct( - search: $request->input('search'), - arguments: (array) $request->input('arguments') + search: $request->input( 'search' ), + arguments: (array) $request->input( 'arguments' ) ); } - public function refreshPrices($id) + public function refreshPrices( $id ) { - $product = $this->productService->get($id); - $this->productService->refreshPrices($product); + $product = $this->productService->get( $id ); + $this->productService->refreshPrices( $product ); return [ 'status' => 'success', - 'message' => __('The product price has been refreshed.'), - 'data' => compact('product'), + 'message' => __( 'The product price has been refreshed.' ), + 'data' => compact( 'product' ), ]; } - public function reset($identifier) + public function reset( $identifier ) { $product = $this->productService->getProductUsingArgument( - request()->query('as') ?? 'id', + request()->query( 'as' ) ?? 'id', $identifier ); - return $this->productService->resetProduct($product); + return $this->productService->resetProduct( $product ); } /** @@ -149,10 +159,10 @@ public function reset($identifier) * @param int product id * @return array */ - public function history($identifier) + public function history( $identifier ) { $product = $this->productService->getProductUsingArgument( - request()->query('as') ?? 'id', + request()->query( 'as' ) ?? 'id', $identifier ); @@ -161,10 +171,10 @@ public function history($identifier) ); } - public function units($identifier) + public function units( $identifier ) { $product = $this->productService->getProductUsingArgument( - request()->query('as') ?? 'id', + request()->query( 'as' ) ?? 'id', $identifier ); @@ -173,9 +183,9 @@ public function units($identifier) ); } - public function getUnitQuantities(Product $product) + public function getUnitQuantities( Product $product ) { - return $this->productService->getProductUnitQuantities($product); + return $this->productService->getProductUnitQuantities( $product ); } /** @@ -184,14 +194,14 @@ public function getUnitQuantities(Product $product) * @param int product_id * @return array reponse */ - public function deleteProduct($identifier) + public function deleteProduct( $identifier ) { $product = $this->productService->getProductUsingArgument( - request()->query('as') ?? 'id', + request()->query( 'as' ) ?? 'id', $identifier ); - return $this->productService->deleteProduct($product); + return $this->productService->deleteProduct( $product ); } /** @@ -201,10 +211,10 @@ public function deleteProduct($identifier) * @param string|int filter * @return array found product */ - public function singleProduct($identifier) + public function singleProduct( $identifier ) { return $this->productService->getProductUsingArgument( - request()->query('as') ?? 'id', + request()->query( 'as' ) ?? 'id', $identifier ); } @@ -224,10 +234,10 @@ public function deleteAllProducts() return $this->productService->deleteAllProducts(); } - public function getProductVariations($identifier) + public function getProductVariations( $identifier ) { $product = $this->productService->getProductUsingArgument( - request()->query('as') ?? 'id', + request()->query( 'as' ) ?? 'id', $identifier ); @@ -241,7 +251,7 @@ public function getProductVariations($identifier) * @param int variation id * @return array status of the operation */ - public function deleteSingleVariation($product_id, int $variation_id) + public function deleteSingleVariation( $product_id, int $variation_id ) { /** * @todo consider registering an event for @@ -249,28 +259,28 @@ public function deleteSingleVariation($product_id, int $variation_id) */ /** @var Product */ - $product = $this->singleProduct($product_id); + $product = $this->singleProduct( $product_id ); - $results = $product->variations->map(function ($variation) use ($variation_id) { - if ($variation->id === $variation_id) { + $results = $product->variations->map( function ( $variation ) use ( $variation_id ) { + if ( $variation->id === $variation_id ) { $variation->delete(); return 1; } return 0; - }); + } ); - $opResult = $results->reduce(function ($before, $after) { + $opResult = $results->reduce( function ( $before, $after ) { return $before + $after; - }); + } ); - return floatval($opResult) > 0 ? [ + return floatval( $opResult ) > 0 ? [ 'status' => 'success', - 'message' => __('The single variation has been deleted.'), + 'message' => __( 'The single variation has been deleted.' ), ] : [ 'status' => 'failed', - 'message' => sprintf(__('The the variation hasn\'t been deleted because it might not exist or is not assigned to the parent product "%s".'), $product->name), + 'message' => sprintf( __( 'The the variation hasn\'t been deleted because it might not exist or is not assigned to the parent product "%s".' ), $product->name ), ]; } @@ -282,9 +292,9 @@ public function deleteSingleVariation($product_id, int $variation_id) * @param Request data * @return array */ - public function createSingleVariation($product_id, Request $request) + public function createSingleVariation( $product_id, Request $request ) { - $product = $this->productService->get($product_id); + $product = $this->productService->get( $product_id ); return $this->productService->createProductVariation( $product, @@ -292,53 +302,53 @@ public function createSingleVariation($product_id, Request $request) ); } - public function editSingleVariation($parent_id, $variation_id, Request $request) + public function editSingleVariation( $parent_id, $variation_id, Request $request ) { - $parent = $this->productService->get($parent_id); + $parent = $this->productService->get( $parent_id ); - return $this->productService->updateProductVariation($parent, $variation_id, $request->all()); + return $this->productService->updateProductVariation( $parent, $variation_id, $request->all() ); } public function listProducts() { - ns()->restrict([ 'nexopos.read.products' ]); + ns()->restrict( [ 'nexopos.read.products' ] ); - Hook::addAction('ns-crud-footer', function (Output $output) { - $output->addView('pages.dashboard.products.quantity-popup'); + Hook::addAction( 'ns-crud-footer', function ( Output $output ) { + $output->addView( 'pages.dashboard.products.quantity-popup' ); return $output; - }); + } ); return ProductCrud::table(); } - public function editProduct(Product $product) + public function editProduct( Product $product ) { - ns()->restrict([ 'nexopos.update.products' ]); - - return view::make('pages.dashboard.products.create', [ - 'title' => __('Edit a product'), - 'description' => __('Makes modifications to a product'), - 'submitUrl' => ns()->url('/api/products/' . $product->id), - 'returnUrl' => ns()->url('/dashboard/products'), - 'unitsUrl' => ns()->url('/api/units-groups/{id}/units'), + ns()->restrict( [ 'nexopos.update.products' ] ); + + return view::make( 'pages.dashboard.products.create', [ + 'title' => __( 'Edit a product' ), + 'description' => __( 'Makes modifications to a product' ), + 'submitUrl' => ns()->url( '/api/products/' . $product->id ), + 'returnUrl' => ns()->url( '/dashboard/products' ), + 'unitsUrl' => ns()->url( '/api/units-groups/{id}/units' ), 'submitMethod' => 'PUT', - 'src' => ns()->url('/api/crud/ns.products/form-config/' . $product->id), - ]); + 'src' => ns()->url( '/api/crud/ns.products/form-config/' . $product->id ), + ] ); } public function createProduct() { - ns()->restrict([ 'nexopos.create.products' ]); - - return view::make('pages.dashboard.products.create', [ - 'title' => __('Create a product'), - 'description' => __('Add a new product on the system'), - 'submitUrl' => ns()->url('/api/products'), - 'returnUrl' => ns()->url('/dashboard/products'), - 'unitsUrl' => ns()->url('/api/units-groups/{id}/units'), - 'src' => ns()->url('/api/crud/ns.products/form-config'), - ]); + ns()->restrict( [ 'nexopos.create.products' ] ); + + return view::make( 'pages.dashboard.products.create', [ + 'title' => __( 'Create a product' ), + 'description' => __( 'Add a new product on the system' ), + 'submitUrl' => ns()->url( '/api/products' ), + 'returnUrl' => ns()->url( '/dashboard/products' ), + 'unitsUrl' => ns()->url( '/api/units-groups/{id}/units' ), + 'src' => ns()->url( '/api/crud/ns.products/form-config' ), + ] ); } /** @@ -347,13 +357,13 @@ public function createProduct() * * @return View */ - public function productUnits(Product $product) + public function productUnits( Product $product ) { - return ProductUnitQuantitiesCrud::table([ + return ProductUnitQuantitiesCrud::table( [ 'queryParams' => [ 'product_id' => $product->id, ], - ]); + ] ); } /** @@ -362,81 +372,81 @@ public function productUnits(Product $product) * * @return View */ - public function productHistory($identifier) + public function productHistory( $identifier ) { - Hook::addAction('ns-crud-footer', function (Output $output, $identifier) { - $output->addView('pages.dashboard.products.history'); + Hook::addAction( 'ns-crud-footer', function ( Output $output, $identifier ) { + $output->addView( 'pages.dashboard.products.history' ); return $output; - }, 10, 2); + }, 10, 2 ); - $product = Product::find($identifier); + $product = Product::find( $identifier ); - return ProductHistoryCrud::table([ - 'title' => sprintf(__('Stock History For %s'), $product->name), + return ProductHistoryCrud::table( [ + 'title' => sprintf( __( 'Stock History For %s' ), $product->name ), 'queryParams' => [ 'product_id' => $identifier, ], - ]); + ] ); } public function showStockAdjustment() { - return View::make('pages.dashboard.products.stock-adjustment', [ - 'title' => __('Stock Adjustment'), - 'description' => __('Adjust stock of existing products.'), - 'actions' => Helper::kvToJsOptions([ - ProductHistory::ACTION_ADDED => __('Add'), - ProductHistory::ACTION_DELETED => __('Delete'), - ProductHistory::ACTION_DEFECTIVE => __('Defective'), - ProductHistory::ACTION_LOST => __('Lost'), - ProductHistory::ACTION_SET => __('Set'), - ]), - ]); + return View::make( 'pages.dashboard.products.stock-adjustment', [ + 'title' => __( 'Stock Adjustment' ), + 'description' => __( 'Adjust stock of existing products.' ), + 'actions' => Helper::kvToJsOptions( [ + ProductHistory::ACTION_ADDED => __( 'Add' ), + ProductHistory::ACTION_DELETED => __( 'Delete' ), + ProductHistory::ACTION_DEFECTIVE => __( 'Defective' ), + ProductHistory::ACTION_LOST => __( 'Lost' ), + ProductHistory::ACTION_SET => __( 'Set' ), + ] ), + ] ); } - public function getUnitQuantity(Product $product, Unit $unit) + public function getUnitQuantity( Product $product, Unit $unit ) { - $quantity = $this->productService->getUnitQuantity($product->id, $unit->id); + $quantity = $this->productService->getUnitQuantity( $product->id, $unit->id ); - if ($quantity instanceof ProductUnitQuantity) { + if ( $quantity instanceof ProductUnitQuantity ) { return $quantity; } - throw new Exception(__('No stock is provided for the requested product.')); + throw new Exception( __( 'No stock is provided for the requested product.' ) ); } - public function deleteUnitQuantity(ProductUnitQuantity $unitQuantity) + public function deleteUnitQuantity( ProductUnitQuantity $unitQuantity ) { - ns()->restrict([ 'nexopos.delete.products-units', 'nexopos.make.products-adjustments' ]); + ns()->restrict( [ 'nexopos.delete.products-units', 'nexopos.make.products-adjustments' ] ); - if ($unitQuantity->quantity > 0) { - $this->productService->stockAdjustment(ProductHistory::ACTION_DELETED, [ + if ( $unitQuantity->quantity > 0 ) { + $this->productService->stockAdjustment( ProductHistory::ACTION_DELETED, [ 'unit_price' => $unitQuantity->sale_price, 'unit_id' => $unitQuantity->unit_id, 'product_id' => $unitQuantity->product_id, 'quantity' => $unitQuantity->quantity, - ]); + ] ); } $unitQuantity->delete(); return [ 'status' => 'success', - 'message' => __('The product unit quantity has been deleted.'), + 'message' => __( 'The product unit quantity has been deleted.' ), ]; } - public function createAdjustment(Request $request) + public function createAdjustment( Request $request ) { - ns()->restrict([ 'nexopos.make.products-adjustments' ]); + ns()->restrict( [ 'nexopos.make.products-adjustments' ] ); - $validator = Validator::make($request->all(), [ + $validator = Validator::make( $request->all(), [ 'products' => 'required', - ]); + ] ); - if ($validator->fails()) { - throw new Exception(__('Unable to proceed as the request is not valid.')); + if ( $validator->fails() ) { + throw new Exception( __( 'Unable to proceed as the request is not valid.' ) ); } $results = []; @@ -445,42 +455,42 @@ public function createAdjustment(Request $request) * We need to make sure the action * made are actually supported. */ - foreach ($request->input('products') as $unit) { + foreach ( $request->input( 'products' ) as $unit ) { /** * if the action is set, then we need to make sure * the quantity is set */ - if (! isset($unit[ 'adjust_unit' ][ 'unit_id' ])) { - throw new Exception(sprintf(__('The unit is not set for the product "%s".'), $unit[ 'name' ])); + if ( ! isset( $unit[ 'adjust_unit' ][ 'unit_id' ] ) ) { + throw new Exception( sprintf( __( 'The unit is not set for the product "%s".' ), $unit[ 'name' ] ) ); } /** * let's check if the action is supported */ if ( - ! in_array($unit[ 'adjust_action' ], ProductHistory::STOCK_INCREASE) && - ! in_array($unit[ 'adjust_action' ], ProductHistory::STOCK_REDUCE) && - ! in_array($unit[ 'adjust_action' ], [ + ! in_array( $unit[ 'adjust_action' ], ProductHistory::STOCK_INCREASE ) && + ! in_array( $unit[ 'adjust_action' ], ProductHistory::STOCK_REDUCE ) && + ! in_array( $unit[ 'adjust_action' ], [ ProductHistory::ACTION_SET, - ]) + ] ) ) { - throw new Exception(sprintf(__('Unsupported action for the product %s.'), $unit[ 'name' ])); + throw new Exception( sprintf( __( 'Unsupported action for the product %s.' ), $unit[ 'name' ] ) ); } /** * let's check for every operation if there is enough inventory */ - $productUnitQuantity = ProductUnitQuantity::where('product_id', $unit[ 'id' ]) - ->where('unit_id', $unit[ 'adjust_unit' ][ 'unit_id' ]) + $productUnitQuantity = ProductUnitQuantity::where( 'product_id', $unit[ 'id' ] ) + ->where( 'unit_id', $unit[ 'adjust_unit' ][ 'unit_id' ] ) ->first(); - if ($productUnitQuantity instanceof ProductUnitQuantity && in_array($unit[ 'adjust_action' ], ProductHistory::STOCK_REDUCE)) { + if ( $productUnitQuantity instanceof ProductUnitQuantity && in_array( $unit[ 'adjust_action' ], ProductHistory::STOCK_REDUCE ) ) { $remaining = $productUnitQuantity->quantity - (float) $unit[ 'adjust_quantity' ]; - if ($remaining < 0) { + if ( $remaining < 0 ) { throw new NotAllowedException( sprintf( - __('The operation will cause a negative stock for the product "%s" (%s).'), + __( 'The operation will cause a negative stock for the product "%s" (%s).' ), $productUnitQuantity->product->name, $remaining ) @@ -488,10 +498,10 @@ public function createAdjustment(Request $request) } } - if ($unit[ 'adjust_quantity' ] < 0) { + if ( $unit[ 'adjust_quantity' ] < 0 ) { throw new NotAllowedException( sprintf( - __('The adjustment quantity can\'t be negative for the product "%s" (%s)'), + __( 'The adjustment quantity can\'t be negative for the product "%s" (%s)' ), $unit[ 'name' ], $unit[ 'adjust_quantity' ] ) @@ -502,45 +512,45 @@ public function createAdjustment(Request $request) /** * now we can adjust the stock of the items */ - foreach ($request->input('products') as $product) { - $results[] = $this->productService->stockAdjustment($product[ 'adjust_action' ], [ + foreach ( $request->input( 'products' ) as $product ) { + $results[] = $this->productService->stockAdjustment( $product[ 'adjust_action' ], [ 'unit_price' => $product[ 'adjust_unit' ][ 'sale_price' ], 'unit_id' => $product[ 'adjust_unit' ][ 'unit_id' ], 'procurement_product_id' => $product[ 'procurement_product_id' ] ?? null, 'product_id' => $product[ 'id' ], 'quantity' => $product[ 'adjust_quantity' ], 'description' => $product[ 'adjust_reason' ] ?? '', - ]); + ] ); } return [ 'status' => 'success', - 'message' => __('The stock has been adjustment successfully.'), + 'message' => __( 'The stock has been adjustment successfully.' ), 'data' => $results, ]; } - public function searchUsingArgument($reference) + public function searchUsingArgument( $reference ) { - $procurementProduct = ProcurementProduct::barcode($reference)->first(); - $productUnitQuantity = ProductUnitQuantity::barcode($reference)->with('unit')->first(); - $product = Product::barcode($reference) + $procurementProduct = ProcurementProduct::barcode( $reference )->first(); + $productUnitQuantity = ProductUnitQuantity::barcode( $reference )->with( 'unit' )->first(); + $product = Product::barcode( $reference ) ->onSale() ->first(); - if ($procurementProduct instanceof ProcurementProduct) { + if ( $procurementProduct instanceof ProcurementProduct ) { $product = $procurementProduct->product; - $product->load('tax_group.taxes'); + $product->load( 'tax_group.taxes' ); /** * check if the product has expired * and the sales are disallowed. */ if ( - $this->dateService->copy()->greaterThan($procurementProduct->expiration_date) && + $this->dateService->copy()->greaterThan( $procurementProduct->expiration_date ) && $product->expires && - $product->on_expiration === Product::EXPIRES_PREVENT_SALES) { - throw new NotAllowedException(__('Unable to add the product to the cart as it has expired.')); + $product->on_expiration === Product::EXPIRES_PREVENT_SALES ) { + throw new NotAllowedException( __( 'Unable to add the product to the cart as it has expired.' ) ); } /** @@ -549,50 +559,50 @@ public function searchUsingArgument($reference) * Will also be helpful to track how products are sold. */ $product->procurement_product_id = $procurementProduct->id; - } elseif ($productUnitQuantity instanceof ProductUnitQuantity) { + } elseif ( $productUnitQuantity instanceof ProductUnitQuantity ) { /** * if a product unit quantity is loaded. Then we make sure to return the parent * product with the selected unit quantity. */ - $productUnitQuantity->load('unit'); + $productUnitQuantity->load( 'unit' ); - $product = Product::find($productUnitQuantity->product_id); - $product->load('unit_quantities.unit'); - $product->load('tax_group.taxes'); + $product = Product::find( $productUnitQuantity->product_id ); + $product->load( 'unit_quantities.unit' ); + $product->load( 'tax_group.taxes' ); $product->selectedUnitQuantity = $productUnitQuantity; - } elseif ($product instanceof Product) { - $product->load('unit_quantities.unit'); - $product->load('tax_group.taxes'); + } elseif ( $product instanceof Product ) { + $product->load( 'unit_quantities.unit' ); + $product->load( 'tax_group.taxes' ); - if ($product->accurate_tracking) { - throw new NotAllowedException(__('Unable to add a product that has accurate tracking enabled, using an ordinary barcode.')); + if ( $product->accurate_tracking ) { + throw new NotAllowedException( __( 'Unable to add a product that has accurate tracking enabled, using an ordinary barcode.' ) ); } } - if ($product instanceof Product) { + if ( $product instanceof Product ) { return [ 'type' => 'product', 'product' => $product, ]; } - throw new NotFoundException(__('There is no products matching the current request.')); + throw new NotFoundException( __( 'There is no products matching the current request.' ) ); } public function printLabels() { - return view::make('pages.dashboard.products.print-labels', [ - 'title' => __('Print Labels'), - 'description' => __('Customize and print products labels.'), - ]); + return view::make( 'pages.dashboard.products.print-labels', [ + 'title' => __( 'Print Labels' ), + 'description' => __( 'Customize and print products labels.' ), + ] ); } - public function getProcuredProducts(Product $product) + public function getProcuredProducts( Product $product ) { - return $product->procurementHistory->map(function ($procurementProduct) { - $procurementProduct->procurement = $procurementProduct->procurement()->select('name')->first(); + return $product->procurementHistory->map( function ( $procurementProduct ) { + $procurementProduct->procurement = $procurementProduct->procurement()->select( 'name' )->first(); return $procurementProduct; - }); + } ); } } diff --git a/app/Http/Controllers/Dashboard/ProvidersController.php b/app/Http/Controllers/Dashboard/ProvidersController.php index a98a850e2..c26ce61fc 100644 --- a/app/Http/Controllers/Dashboard/ProvidersController.php +++ b/app/Http/Controllers/Dashboard/ProvidersController.php @@ -49,19 +49,19 @@ public function createProvider() return ProviderCrud::form(); } - public function editProvider(Provider $provider) + public function editProvider( Provider $provider ) { - return ProviderCrud::form($provider); + return ProviderCrud::form( $provider ); } - public function providerProcurements($provider_id) + public function providerProcurements( $provider_id ) { - return $this->providerService->procurements($provider_id); + return $this->providerService->procurements( $provider_id ); } - public function deleteProvider($id) + public function deleteProvider( $id ) { - return $this->providerService->delete($id); + return $this->providerService->delete( $id ); } /** @@ -70,17 +70,17 @@ public function deleteProvider($id) * * @return string */ - public function listProvidersProcurements(Provider $provider) + public function listProvidersProcurements( Provider $provider ) { - return ProviderProcurementsCrud::table([ + return ProviderProcurementsCrud::table( [ 'queryParams' => [ 'provider_id' => $provider->id, ], 'title' => sprintf( - __('Procurements by "%s"'), + __( 'Procurements by "%s"' ), $provider->name ), - ]); + ] ); } /** @@ -89,19 +89,19 @@ public function listProvidersProcurements(Provider $provider) * * @return array */ - public function listProvidersProducts(Provider $provider) + public function listProvidersProducts( Provider $provider ) { $procurements = $provider ->procurements() - ->get('id') - ->map(fn($procurement) => $procurement->id) + ->get( 'id' ) + ->map( fn( $procurement ) => $procurement->id ) ->toArray(); - return ProviderProductsCrud::table([ - 'title' => sprintf(__('%s\'s Products'), $provider->name), + return ProviderProductsCrud::table( [ + 'title' => sprintf( __( '%s\'s Products' ), $provider->name ), 'queryParams' => [ 'procurements' => $procurements, ], - ]); + ] ); } } diff --git a/app/Http/Controllers/Dashboard/ReportsController.php b/app/Http/Controllers/Dashboard/ReportsController.php index 31b8eb5b1..5cbe5ab55 100644 --- a/app/Http/Controllers/Dashboard/ReportsController.php +++ b/app/Http/Controllers/Dashboard/ReportsController.php @@ -28,58 +28,58 @@ public function __construct( public function salesReport() { - return View::make('pages.dashboard.reports.sales-report', [ - 'title' => __('Sales Report'), - 'description' => __('Provides an overview over the sales during a specific period'), - ]); + return View::make( 'pages.dashboard.reports.sales-report', [ + 'title' => __( 'Sales Report' ), + 'description' => __( 'Provides an overview over the sales during a specific period' ), + ] ); } public function salesProgress() { - return View::make('pages.dashboard.reports.best-products-report', [ - 'title' => __('Sales Progress'), - 'description' => __('Provides an overview over the best products sold during a specific period.'), - ]); + return View::make( 'pages.dashboard.reports.best-products-report', [ + 'title' => __( 'Sales Progress' ), + 'description' => __( 'Provides an overview over the best products sold during a specific period.' ), + ] ); } public function soldStock() { - return View::make('pages.dashboard.reports.sold-stock-report', [ - 'title' => __('Sold Stock'), - 'description' => __('Provides an overview over the sold stock during a specific period.'), - ]); + return View::make( 'pages.dashboard.reports.sold-stock-report', [ + 'title' => __( 'Sold Stock' ), + 'description' => __( 'Provides an overview over the sold stock during a specific period.' ), + ] ); } public function stockReport() { - return View::make('pages.dashboard.reports.low-stock-report', [ - 'title' => __('Stock Report'), - 'description' => __('Provides an overview of the products stock.'), - ]); + return View::make( 'pages.dashboard.reports.low-stock-report', [ + 'title' => __( 'Stock Report' ), + 'description' => __( 'Provides an overview of the products stock.' ), + ] ); } public function profit() { - return View::make('pages.dashboard.reports.profit-report', [ - 'title' => __('Profit Report'), - 'description' => __('Provides an overview of the provide of the products sold.'), - ]); + return View::make( 'pages.dashboard.reports.profit-report', [ + 'title' => __( 'Profit Report' ), + 'description' => __( 'Provides an overview of the provide of the products sold.' ), + ] ); } public function transactionsReport() { - return View::make('pages.dashboard.reports.transactions', [ - 'title' => __('Transactions Report'), - 'description' => __('Provides an overview on the activity for a specific period.'), - ]); + return View::make( 'pages.dashboard.reports.transactions', [ + 'title' => __( 'Transactions Report' ), + 'description' => __( 'Provides an overview on the activity for a specific period.' ), + ] ); } public function stockCombinedReport() { - return View::make('pages.dashboard.reports.stock-combined', [ - 'title' => __('Combined Report'), - 'description' => __('Provides a combined report for every transactions on products.'), - ]); + return View::make( 'pages.dashboard.reports.stock-combined', [ + 'title' => __( 'Combined Report' ), + 'description' => __( 'Provides a combined report for every transactions on products.' ), + ] ); } /** @@ -87,15 +87,15 @@ public function stockCombinedReport() * * @return array */ - public function getSaleReport(Request $request) + public function getSaleReport( Request $request ) { return $this->reportService ->getSaleReport( - $request->input('startDate'), - $request->input('endDate'), - $request->input('type'), - $request->input('user_id'), - $request->input('categories_id'), + $request->input( 'startDate' ), + $request->input( 'endDate' ), + $request->input( 'type' ), + $request->input( 'user_id' ), + $request->input( 'categories_id' ), ); } @@ -104,84 +104,84 @@ public function getSaleReport(Request $request) * * @return array */ - public function getSoldStockReport(Request $request) + public function getSoldStockReport( Request $request ) { $orders = $this->ordersService ->getSoldStock( - startDate: $request->input('startDate'), - endDate: $request->input('endDate'), - categories: $request->input('categories'), - units: $request->input('units') + startDate: $request->input( 'startDate' ), + endDate: $request->input( 'endDate' ), + categories: $request->input( 'categories' ), + units: $request->input( 'units' ) ); - return collect($orders)->mapToGroups(function ($product) { + return collect( $orders )->mapToGroups( function ( $product ) { return [ $product->product_id . '-' . $product->unit_id => $product, ]; - })->map(function ($groups) { + } )->map( function ( $groups ) { return [ 'name' => $groups->first()->name, 'unit_name' => $groups->first()->unit_name, 'mode' => $groups->first()->mode, - 'unit_price' => $groups->sum('unit_price'), - 'quantity' => $groups->sum('quantity'), - 'total_price' => $groups->sum('total_price'), - 'tax_value' => $groups->sum('tax_value'), + 'unit_price' => $groups->sum( 'unit_price' ), + 'quantity' => $groups->sum( 'quantity' ), + 'total_price' => $groups->sum( 'total_price' ), + 'tax_value' => $groups->sum( 'tax_value' ), ]; - })->values(); + } )->values(); } - public function getTransactions(Request $request) + public function getTransactions( Request $request ) { - $rangeStarts = Carbon::parse($request->input('startDate')) + $rangeStarts = Carbon::parse( $request->input( 'startDate' ) ) ->toDateTimeString(); - $rangeEnds = Carbon::parse($request->input('endDate')) + $rangeEnds = Carbon::parse( $request->input( 'endDate' ) ) ->toDateTimeString(); - $entries = $this->reportService->getFromTimeRange($rangeStarts, $rangeEnds); + $entries = $this->reportService->getFromTimeRange( $rangeStarts, $rangeEnds ); $total = $entries->count() > 0 ? $entries->first()->toArray() : []; - $creditCashFlow = TransactionAccount::where('operation', TransactionHistory::OPERATION_CREDIT)->with([ - 'histories' => function ($query) use ($rangeStarts, $rangeEnds) { - $query->where('created_at', '>=', $rangeStarts) - ->where('created_at', '<=', $rangeEnds); + $creditCashFlow = TransactionAccount::where( 'operation', TransactionHistory::OPERATION_CREDIT )->with( [ + 'histories' => function ( $query ) use ( $rangeStarts, $rangeEnds ) { + $query->where( 'created_at', '>=', $rangeStarts ) + ->where( 'created_at', '<=', $rangeEnds ); }, - ]) + ] ) ->get() - ->map(function ($transactionAccount) { - $transactionAccount->total = $transactionAccount->histories->count() > 0 ? $transactionAccount->histories->sum('value') : 0; + ->map( function ( $transactionAccount ) { + $transactionAccount->total = $transactionAccount->histories->count() > 0 ? $transactionAccount->histories->sum( 'value' ) : 0; return $transactionAccount; - }); + } ); - $debitCashFlow = TransactionAccount::where('operation', TransactionHistory::OPERATION_DEBIT)->with([ - 'histories' => function ($query) use ($rangeStarts, $rangeEnds) { - $query->where('created_at', '>=', $rangeStarts) - ->where('created_at', '<=', $rangeEnds); + $debitCashFlow = TransactionAccount::where( 'operation', TransactionHistory::OPERATION_DEBIT )->with( [ + 'histories' => function ( $query ) use ( $rangeStarts, $rangeEnds ) { + $query->where( 'created_at', '>=', $rangeStarts ) + ->where( 'created_at', '<=', $rangeEnds ); }, - ]) + ] ) ->get() - ->map(function ($transactionAccount) { - $transactionAccount->total = $transactionAccount->histories->count() > 0 ? $transactionAccount->histories->sum('value') : 0; + ->map( function ( $transactionAccount ) { + $transactionAccount->total = $transactionAccount->histories->count() > 0 ? $transactionAccount->histories->sum( 'value' ) : 0; return $transactionAccount; - }); + } ); return [ - 'summary' => collect($total)->mapWithKeys(function ($value, $key) use ($entries) { - if (! in_array($key, [ 'range_starts', 'range_ends', 'day_of_year' ])) { - return [ $key => $entries->sum($key) ]; + 'summary' => collect( $total )->mapWithKeys( function ( $value, $key ) use ( $entries ) { + if ( ! in_array( $key, [ 'range_starts', 'range_ends', 'day_of_year' ] ) ) { + return [ $key => $entries->sum( $key ) ]; } return [ $key => $value ]; - }), + } ), - 'total_debit' => collect([ - $debitCashFlow->sum('total'), - ])->sum(), - 'total_credit' => collect([ - $creditCashFlow->sum('total'), - ])->sum(), + 'total_debit' => collect( [ + $debitCashFlow->sum( 'total' ), + ] )->sum(), + 'total_credit' => collect( [ + $creditCashFlow->sum( 'total' ), + ] )->sum(), 'creditCashFlow' => $creditCashFlow, 'debitCashFlow' => $debitCashFlow, @@ -196,115 +196,115 @@ public function getTransactions(Request $request) * * @return array */ - public function getProfit(Request $request) + public function getProfit( Request $request ) { $orders = $this->ordersService ->getSoldStock( - startDate: $request->input('startDate'), - endDate: $request->input('endDate'), - categories: $request->input('categories'), - units: $request->input('units') + startDate: $request->input( 'startDate' ), + endDate: $request->input( 'endDate' ), + categories: $request->input( 'categories' ), + units: $request->input( 'units' ) ); return $orders; } - public function getAnnualReport(Request $request) + public function getAnnualReport( Request $request ) { - return $this->reportService->getYearReportFor($request->input('year')); + return $this->reportService->getYearReportFor( $request->input( 'year' ) ); } - public function annualReport(Request $request) + public function annualReport( Request $request ) { - return View::make('pages.dashboard.reports.annual-report', [ - 'title' => __('Annual Report'), - 'description' => __('Provides an overview over the sales during a specific period'), - ]); + return View::make( 'pages.dashboard.reports.annual-report', [ + 'title' => __( 'Annual Report' ), + 'description' => __( 'Provides an overview over the sales during a specific period' ), + ] ); } - public function salesByPaymentTypes(Request $request) + public function salesByPaymentTypes( Request $request ) { - return View::make('pages.dashboard.reports.payment-types', [ - 'title' => __('Sales By Payment Types'), - 'description' => __('Provide a report of the sales by payment types, for a specific period.'), - ]); + return View::make( 'pages.dashboard.reports.payment-types', [ + 'title' => __( 'Sales By Payment Types' ), + 'description' => __( 'Provide a report of the sales by payment types, for a specific period.' ), + ] ); } - public function getPaymentTypes(Request $request) + public function getPaymentTypes( Request $request ) { return $this->ordersService->getPaymentTypesReport( - $request->input('startDate'), - $request->input('endDate'), + $request->input( 'startDate' ), + $request->input( 'endDate' ), ); } - public function computeReport(Request $request, $type) + public function computeReport( Request $request, $type ) { - if ($type === 'yearly') { - ComputeYearlyReportJob::dispatch($request->input('year')); + if ( $type === 'yearly' ) { + ComputeYearlyReportJob::dispatch( $request->input( 'year' ) ); return [ 'stauts' => 'success', - 'message' => __('The report will be computed for the current year.'), + 'message' => __( 'The report will be computed for the current year.' ), ]; } - throw new Exception(__('Unknown report to refresh.')); + throw new Exception( __( 'Unknown report to refresh.' ) ); } - public function getProductsReport(Request $request) + public function getProductsReport( Request $request ) { return $this->reportService->getProductSalesDiff( - $request->input('startDate'), - $request->input('endDate'), - $request->input('sort') + $request->input( 'startDate' ), + $request->input( 'endDate' ), + $request->input( 'sort' ) ); } public function getMyReport() { - return $this->reportService->getCashierDashboard(Auth::id()); + return $this->reportService->getCashierDashboard( Auth::id() ); } - public function getLowStock(Request $request) + public function getLowStock( Request $request ) { return $this->reportService->getLowStockProducts( - categories: $request->input('categories'), - units: $request->input('units') + categories: $request->input( 'categories' ), + units: $request->input( 'units' ) ); } - public function getStockReport(Request $request) + public function getStockReport( Request $request ) { return $this->reportService->getStockReport( - categories: $request->input('categories'), - units: $request->input('units') + categories: $request->input( 'categories' ), + units: $request->input( 'units' ) ); } public function showCustomerStatement() { - return View::make('pages.dashboard.reports.customers-statement', [ - 'title' => __('Customers Statement'), - 'description' => __('Display the complete customer statement.'), - ]); + return View::make( 'pages.dashboard.reports.customers-statement', [ + 'title' => __( 'Customers Statement' ), + 'description' => __( 'Display the complete customer statement.' ), + ] ); } - public function getCustomerStatement(Customer $customer, Request $request) + public function getCustomerStatement( Customer $customer, Request $request ) { return $this->reportService->getCustomerStatement( customer: $customer, - rangeStarts: $request->input('rangeStarts'), - rangeEnds: $request->input('rangeEnds') + rangeStarts: $request->input( 'rangeStarts' ), + rangeEnds: $request->input( 'rangeEnds' ) ); } - public function getProductHistoryCombined(Request $request) + public function getProductHistoryCombined( Request $request ) { return $this->reportService->getCombinedProductHistory( - Carbon::parse($request->input('date'))->format('Y-m-d'), - $request->input('categories'), - $request->input('units') + Carbon::parse( $request->input( 'date' ) )->format( 'Y-m-d' ), + $request->input( 'categories' ), + $request->input( 'units' ) ); } diff --git a/app/Http/Controllers/Dashboard/ResetController.php b/app/Http/Controllers/Dashboard/ResetController.php index b67eed147..19d746c41 100644 --- a/app/Http/Controllers/Dashboard/ResetController.php +++ b/app/Http/Controllers/Dashboard/ResetController.php @@ -26,10 +26,10 @@ public function __construct( * * @return array $array */ - public function hardReset(Request $request) + public function hardReset( Request $request ) { - if ($request->input('authorization') !== env('NS_AUTHORIZATION')) { - throw new Exception(__('Invalid authorization code provided.')); + if ( $request->input( 'authorization' ) !== env( 'NS_AUTHORIZATION' ) ) { + throw new Exception( __( 'Invalid authorization code provided.' ) ); } return $this->resetService->hardReset(); @@ -40,13 +40,13 @@ public function hardReset(Request $request) * * @return array */ - public function truncateWithDemo(Request $request) + public function truncateWithDemo( Request $request ) { - $this->resetService->softReset($request); + $this->resetService->softReset( $request ); - switch ($request->input('mode')) { + switch ( $request->input( 'mode' ) ) { case 'wipe_plus_grocery': - $this->demoService->run($request->all()); + $this->demoService->run( $request->all() ); break; case 'wipe_plus_simple': ( new FirstDemoSeeder )->run(); @@ -63,7 +63,7 @@ public function truncateWithDemo(Request $request) return [ 'status' => 'success', - 'message' => __('The database has been successfully seeded.'), + 'message' => __( 'The database has been successfully seeded.' ), ]; } } diff --git a/app/Http/Controllers/Dashboard/RewardsSystemController.php b/app/Http/Controllers/Dashboard/RewardsSystemController.php index f663d7dc1..cf3978be0 100644 --- a/app/Http/Controllers/Dashboard/RewardsSystemController.php +++ b/app/Http/Controllers/Dashboard/RewardsSystemController.php @@ -28,7 +28,7 @@ public function create() ); } - public function edit(RewardSystem $reward) + public function edit( RewardSystem $reward ) { return RewardSystemCrud::form( entry: $reward, diff --git a/app/Http/Controllers/Dashboard/SettingsController.php b/app/Http/Controllers/Dashboard/SettingsController.php index e696e3bf0..c9f879287 100644 --- a/app/Http/Controllers/Dashboard/SettingsController.php +++ b/app/Http/Controllers/Dashboard/SettingsController.php @@ -17,22 +17,22 @@ class SettingsController extends DashboardController { - public function getSettings($identifier) + public function getSettings( $identifier ) { - Gate::allows('manages.options'); + Gate::allows( 'manages.options' ); - return $this->handleDefaultSettings($identifier); + return $this->handleDefaultSettings( $identifier ); } - public function handleDefaultSettings($identifier) + public function handleDefaultSettings( $identifier ) { - $settings = Hook::filter('ns.settings', false, $identifier); + $settings = Hook::filter( 'ns.settings', false, $identifier ); - if ($settings instanceof SettingsPage) { + if ( $settings instanceof SettingsPage ) { return $settings->renderForm(); } - return abort(404, __('Settings Page Not Found')); + return abort( 404, __( 'Settings Page Not Found' ) ); } /** @@ -41,31 +41,31 @@ public function handleDefaultSettings($identifier) * @param string identifier * @return array */ - public function getSettingsForm($identifier) + public function getSettingsForm( $identifier ) { - $settings = Hook::filter('ns.settings', false, $identifier); + $settings = Hook::filter( 'ns.settings', false, $identifier ); - if ($settings instanceof SettingsPage) { + if ( $settings instanceof SettingsPage ) { return $settings->getForm(); } - throw new Exception(__('Unable to initiallize the settings page. The identifier "' . $identifier . '", doesn\'t belong to a valid SettingsPage instance.')); + throw new Exception( __( 'Unable to initiallize the settings page. The identifier "' . $identifier . '", doesn\'t belong to a valid SettingsPage instance.' ) ); } - public function saveSettingsForm(SettingsRequest $request, $identifier) + public function saveSettingsForm( SettingsRequest $request, $identifier ) { - ns()->restrict([ 'manage.options' ]); + ns()->restrict( [ 'manage.options' ] ); - $resource = Hook::filter('ns.settings', false, $identifier); + $resource = Hook::filter( 'ns.settings', false, $identifier ); - if (! $resource instanceof SettingsPage) { - throw new Exception(sprintf( - __('%s is not an instance of "%s".'), + if ( ! $resource instanceof SettingsPage ) { + throw new Exception( sprintf( + __( '%s is not an instance of "%s".' ), $identifier, SettingsPage::class - )); + ) ); } - return $resource->saveForm($request); + return $resource->saveForm( $request ); } } diff --git a/app/Http/Controllers/Dashboard/TaxesController.php b/app/Http/Controllers/Dashboard/TaxesController.php index 0a76d2951..cfe5cc23c 100644 --- a/app/Http/Controllers/Dashboard/TaxesController.php +++ b/app/Http/Controllers/Dashboard/TaxesController.php @@ -29,12 +29,12 @@ public function __construct( // ... } - public function get($id = null) + public function get( $id = null ) { - if (! empty($id)) { - $productTax = Tax::find($id); - if (! $productTax instanceof Tax) { - throw new Exception(__('Unable to find the requested product tax using the provided id')); + if ( ! empty( $id ) ) { + $productTax = Tax::find( $id ); + if ( ! $productTax instanceof Tax ) { + throw new Exception( __( 'Unable to find the requested product tax using the provided id' ) ); } return $productTax; @@ -50,9 +50,9 @@ public function get($id = null) * @param number id * @return json */ - public function delete($id) + public function delete( $id ) { - return $this->taxService->delete($id); + return $this->taxService->delete( $id ); } /** @@ -62,11 +62,11 @@ public function delete($id) * @param int tax id * @return Tax | null */ - private function getTaxOrFail($id) + private function getTaxOrFail( $id ) { - $productTax = Tax::find($id); - if (! $productTax instanceof Tax) { - throw new Exception(__('Unable to find the requested product tax using the provided identifier.')); + $productTax = Tax::find( $id ); + if ( ! $productTax instanceof Tax ) { + throw new Exception( __( 'Unable to find the requested product tax using the provided identifier.' ) ); } return $productTax; @@ -79,22 +79,22 @@ private function getTaxOrFail($id) * @param request * @return json */ - public function post(Request $request) // must be a specific form request with a validation + public function post( Request $request ) // must be a specific form request with a validation { /** * @todo add a prior validation * on this element and check the permisions. * The validation should check whether the type is "grouped" or "simple" */ - $fields = $request->only([ + $fields = $request->only( [ 'name', 'rate', 'description', 'type', 'parent_id', - ]); + ] ); - $this->taxService->create($fields); + $this->taxService->create( $fields ); return [ 'status' => 'success', - 'message' => __('The product tax has been created.'), + 'message' => __( 'The product tax has been created.' ), ]; } @@ -105,13 +105,13 @@ public function post(Request $request) // must be a specific form request with a * @param int category id * @return json */ - public function put($id, Request $request) // must use a specific request which include a validation + public function put( $id, Request $request ) // must use a specific request which include a validation { - $fields = $request->only([ + $fields = $request->only( [ 'name', 'rate', 'description', 'type', 'parent_id', - ]); + ] ); - $tax = $this->taxService->update($id, $fields); + $tax = $this->taxService->update( $id, $fields ); /** * @todo dispatch en event @@ -119,8 +119,8 @@ public function put($id, Request $request) // must use a specific request which */ return [ 'status' => 'success', - 'message' => __('The product tax has been updated'), - 'data' => compact('tax'), + 'message' => __( 'The product tax has been updated' ), + 'data' => compact( 'tax' ), ]; } @@ -130,22 +130,22 @@ public function put($id, Request $request) // must use a specific request which * @param int tax id * @return json */ - public function getTaxGroup($taxId = null) + public function getTaxGroup( $taxId = null ) { - if ($taxId === null) { - return TaxGroup::with('taxes')->get(); + if ( $taxId === null ) { + return TaxGroup::with( 'taxes' )->get(); } - $taxGroup = TaxGroup::find($taxId); + $taxGroup = TaxGroup::find( $taxId ); - if (! $taxGroup instanceof TaxGroup) { - throw new NotFoundException(sprintf( - __('Unable to retrieve the requested tax group using the provided identifier "%s".'), + if ( ! $taxGroup instanceof TaxGroup ) { + throw new NotFoundException( sprintf( + __( 'Unable to retrieve the requested tax group using the provided identifier "%s".' ), $taxId - )); + ) ); } - $taxGroup->load('taxes'); + $taxGroup->load( 'taxes' ); return $taxGroup; } @@ -175,9 +175,9 @@ public function createTax() * * @return view */ - public function editTax(Tax $tax) + public function editTax( Tax $tax ) { - return TaxCrud::form($tax); + return TaxCrud::form( $tax ); } /** @@ -205,8 +205,8 @@ public function createTaxGroups() * * @return view */ - public function editTaxGroup(TaxGroup $group) + public function editTaxGroup( TaxGroup $group ) { - return TaxesGroupCrud::form($group); + return TaxesGroupCrud::form( $group ); } } diff --git a/app/Http/Controllers/Dashboard/TransactionController.php b/app/Http/Controllers/Dashboard/TransactionController.php index 39503a7c1..8d15d0c2e 100644 --- a/app/Http/Controllers/Dashboard/TransactionController.php +++ b/app/Http/Controllers/Dashboard/TransactionController.php @@ -28,20 +28,20 @@ public function __construct( // ... } - public function get($id = null) + public function get( $id = null ) { - return $this->transactionService->get($id); + return $this->transactionService->get( $id ); } - public function getTransactionHistory(Transaction $transaction) + public function getTransactionHistory( Transaction $transaction ) { - return TransactionsHistoryCrud::table([ - 'title' => sprintf(__('"%s" Record History'), $transaction->name), - 'description' => __('Shows all histories generated by the transaction.'), + return TransactionsHistoryCrud::table( [ + 'title' => sprintf( __( '"%s" Record History' ), $transaction->name ), + 'description' => __( 'Shows all histories generated by the transaction.' ), 'queryParams' => [ 'transaction_id' => $transaction->id, ], - ]); + ] ); } public function listTransactions() @@ -51,32 +51,32 @@ public function listTransactions() public function createTransaction() { - if (! ns()->canPerformAsynchronousOperations()) { - session()->flash('infoMessage', __('Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\'t configured correctly.')); + if ( ! ns()->canPerformAsynchronousOperations() ) { + session()->flash( 'infoMessage', __( 'Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\'t configured correctly.' ) ); } - return View::make('pages.dashboard.transactions.create', [ - 'title' => __('Create New Transaction'), - 'description' => __('Set direct, scheduled transactions.'), - ]); + return View::make( 'pages.dashboard.transactions.create', [ + 'title' => __( 'Create New Transaction' ), + 'description' => __( 'Set direct, scheduled transactions.' ), + ] ); } - public function editTransaction(Transaction $transaction) + public function editTransaction( Transaction $transaction ) { - if (! ns()->canPerformAsynchronousOperations()) { - session()->flash('infoMessage', __('Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\'t configured correctly.')); + if ( ! ns()->canPerformAsynchronousOperations() ) { + session()->flash( 'infoMessage', __( 'Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\'t configured correctly.' ) ); } - return View::make('pages.dashboard.transactions.update', [ - 'title' => __('Update Transaction'), + return View::make( 'pages.dashboard.transactions.update', [ + 'title' => __( 'Update Transaction' ), 'transaction' => $transaction, - 'description' => __('Set direct, scheduled transactions.'), - ]); + 'description' => __( 'Set direct, scheduled transactions.' ), + ] ); } - public function getConfigurations(Transaction $transaction) + public function getConfigurations( Transaction $transaction ) { - return $this->transactionService->getConfigurations($transaction); + return $this->transactionService->getConfigurations( $transaction ); } /** @@ -85,9 +85,9 @@ public function getConfigurations(Transaction $transaction) * @param Request * @return json */ - public function post(Request $request) // <= need to add a validation + public function post( Request $request ) // <= need to add a validation { - $fields = $request->only([ + $fields = $request->only( [ 'name', 'active', 'account_id', @@ -100,21 +100,21 @@ public function post(Request $request) // <= need to add a validation 'occurrence', 'occurrence_value', 'scheduled_date', - ]); + ] ); - return $this->transactionService->create($fields); + return $this->transactionService->create( $fields ); } - public function putTransactionAccount(Request $request, $id) + public function putTransactionAccount( Request $request, $id ) { - $fields = $request->only([ + $fields = $request->only( [ 'name', 'operation', 'description', 'account', - ]); + ] ); - return $this->transactionService->editTransactionAccount($id, $fields); + return $this->transactionService->editTransactionAccount( $id, $fields ); } /** @@ -125,9 +125,9 @@ public function putTransactionAccount(Request $request, $id) * @param int expense id * @return json */ - public function put(Request $request, $id) + public function put( Request $request, $id ) { - $fields = $request->only([ + $fields = $request->only( [ 'name', 'active', 'category_id', @@ -140,14 +140,14 @@ public function put(Request $request, $id) 'occurrence', 'occurrence_value', 'scheduled_date', - ]); + ] ); - return $this->transactionService->edit($id, $fields); + return $this->transactionService->edit( $id, $fields ); } - public function delete($id) + public function delete( $id ) { - return $this->transactionService->delete($id); + return $this->transactionService->delete( $id ); } /** @@ -156,17 +156,17 @@ public function delete($id) * @param int|null category id * @return json */ - public function getExpensesCategories($id = null) + public function getExpensesCategories( $id = null ) { - return $this->transactionService->getTransactionAccountByID($id); + return $this->transactionService->getTransactionAccountByID( $id ); } /** * delete a specific transaction account */ - public function deleteAccount(int $id) + public function deleteAccount( int $id ) { - return $this->transactionService->deleteAccount($id); + return $this->transactionService->deleteAccount( $id ); } /** @@ -175,25 +175,25 @@ public function deleteAccount(int $id) * @param Request * @return json */ - public function postTransactionsAccount(Request $request) + public function postTransactionsAccount( Request $request ) { - $fields = $request->only([ + $fields = $request->only( [ 'name', 'operation', 'description', 'account', - ]); + ] ); - return $this->transactionService->createAccount($fields); + return $this->transactionService->createAccount( $fields ); } /** * Get expenses entries under a specific * transaction account */ - public function getTransactionAccountsHistory(int $id): array + public function getTransactionAccountsHistory( int $id ): array { - return $this->transactionService->getTransactionAccountByID($id)->transactions; + return $this->transactionService->getTransactionAccountByID( $id )->transactions; } public function transactionsHistory() @@ -201,8 +201,8 @@ public function transactionsHistory() return TransactionsHistoryCrud::table(); } - public function triggerTransaction(Transaction $transaction) + public function triggerTransaction( Transaction $transaction ) { - return $this->transactionService->triggerTransaction($transaction); + return $this->transactionService->triggerTransaction( $transaction ); } } diff --git a/app/Http/Controllers/Dashboard/TransactionsAccountController.php b/app/Http/Controllers/Dashboard/TransactionsAccountController.php index 611debe83..a0d1d2597 100644 --- a/app/Http/Controllers/Dashboard/TransactionsAccountController.php +++ b/app/Http/Controllers/Dashboard/TransactionsAccountController.php @@ -18,13 +18,13 @@ class TransactionsAccountController extends DashboardController /** * Index Controller Page * - * @return view + * @return view * * @since 1.0 **/ public function index() { - return View::make('NexoPOS::index'); + return View::make( 'NexoPOS::index' ); } /** @@ -47,8 +47,8 @@ public function createTransactionsAccounts() return TransactionAccountCrud::form(); } - public function editTransactionsAccounts(TransactionAccount $account) + public function editTransactionsAccounts( TransactionAccount $account ) { - return TransactionAccountCrud::form($account); + return TransactionAccountCrud::form( $account ); } } diff --git a/app/Http/Controllers/Dashboard/UnitsController.php b/app/Http/Controllers/Dashboard/UnitsController.php index b898430f7..c668b61d2 100644 --- a/app/Http/Controllers/Dashboard/UnitsController.php +++ b/app/Http/Controllers/Dashboard/UnitsController.php @@ -29,14 +29,14 @@ public function __construct( // ... } - public function postGroup(UnitsGroupsRequest $request) + public function postGroup( UnitsGroupsRequest $request ) { - return $this->unitService->createGroup($request->all()); + return $this->unitService->createGroup( $request->all() ); } - public function putGroup(UnitsGroupsRequest $request, $id) + public function putGroup( UnitsGroupsRequest $request, $id ) { - return $this->unitService->updateGroup($id, $request->only([ 'name', 'description' ])); + return $this->unitService->updateGroup( $id, $request->only( [ 'name', 'description' ] ) ); } /** @@ -45,27 +45,27 @@ public function putGroup(UnitsGroupsRequest $request, $id) * @param Request * @return AsyncResponse */ - public function postUnit(UnitRequest $request) + public function postUnit( UnitRequest $request ) { - return $this->unitService->createUnit($request->only([ 'name', 'description', 'group_id', 'value', 'base_unit' ])); + return $this->unitService->createUnit( $request->only( [ 'name', 'description', 'group_id', 'value', 'base_unit' ] ) ); } - public function deleteUnitGroup($id) + public function deleteUnitGroup( $id ) { - return $this->unitService->deleteCategory($id); + return $this->unitService->deleteCategory( $id ); } - public function deleteUnit($id) + public function deleteUnit( $id ) { - return $this->unitService->deleteUnit($id); + return $this->unitService->deleteUnit( $id ); } - public function get($id = null) + public function get( $id = null ) { - return $this->unitService->get($id); + return $this->unitService->get( $id ); } - public function getSiblingUnits(Unit $id) + public function getSiblingUnits( Unit $id ) { return $this->unitService->getSiblingUnits( unit: $id @@ -78,9 +78,9 @@ public function getSiblingUnits(Unit $id) * @param int group id * @return array */ - public function getGroupUnits($id) + public function getGroupUnits( $id ) { - return $this->unitService->getGroups($id)->units; + return $this->unitService->getGroups( $id )->units; } /** @@ -102,11 +102,11 @@ public function getGroups() * @param int unit id * @return json */ - public function putUnit(UnitRequest $request, $id) + public function putUnit( UnitRequest $request, $id ) { return $this->unitService->updateUnit( $id, - $request->only([ 'name', 'description', 'group_id', 'value', 'base_unit' ]) + $request->only( [ 'name', 'description', 'group_id', 'value', 'base_unit' ] ) ); } @@ -117,28 +117,28 @@ public function putUnit(UnitRequest $request, $id) * @param int Parent Group * @return json */ - public function getUnitParentGroup($id) + public function getUnitParentGroup( $id ) { - return $this->unitService->getUnitParentGroup($id); + return $this->unitService->getUnitParentGroup( $id ); } public function listUnitsGroups() { - ns()->restrict([ 'nexopos.read.products-units' ]); + ns()->restrict( [ 'nexopos.read.products-units' ] ); return UnitGroupCrud::table(); } public function listUnits() { - ns()->restrict([ 'nexopos.read.products-units' ]); + ns()->restrict( [ 'nexopos.read.products-units' ] ); return UnitCrud::table(); } public function createUnitGroup() { - ns()->restrict([ 'nexopos.create.products-units' ]); + ns()->restrict( [ 'nexopos.create.products-units' ] ); return UnitGroupCrud::form(); } @@ -148,24 +148,24 @@ public function createUnitGroup() * * @return View */ - public function editUnitGroup(UnitGroup $group) + public function editUnitGroup( UnitGroup $group ) { - ns()->restrict([ 'nexopos.update.products-units' ]); + ns()->restrict( [ 'nexopos.update.products-units' ] ); - return UnitGroupCrud::form($group); + return UnitGroupCrud::form( $group ); } public function createUnit() { - ns()->restrict([ 'nexopos.create.products-units' ]); + ns()->restrict( [ 'nexopos.create.products-units' ] ); return UnitCrud::form(); } - public function editUnit(Unit $unit) + public function editUnit( Unit $unit ) { - ns()->restrict([ 'nexopos.update.products-units' ]); + ns()->restrict( [ 'nexopos.update.products-units' ] ); - return UnitCrud::form($unit); + return UnitCrud::form( $unit ); } } diff --git a/app/Http/Controllers/Dashboard/UsersController.php b/app/Http/Controllers/Dashboard/UsersController.php index a60de4bab..b3acef6dc 100644 --- a/app/Http/Controllers/Dashboard/UsersController.php +++ b/app/Http/Controllers/Dashboard/UsersController.php @@ -38,27 +38,27 @@ public function listUsers() public function createUser() { - ns()->restrict([ 'create.users' ]); + ns()->restrict( [ 'create.users' ] ); return UserCrud::form(); } - public function editUser(User $user) + public function editUser( User $user ) { - ns()->restrict([ 'update.users' ]); + ns()->restrict( [ 'update.users' ] ); - if ($user->id === Auth::id()) { - return redirect(ns()->route('ns.dashboard.users.profile')); + if ( $user->id === Auth::id() ) { + return redirect( ns()->route( 'ns.dashboard.users.profile' ) ); } - return UserCrud::form($user); + return UserCrud::form( $user ); } - public function getUsers(User $user) + public function getUsers( User $user ) { - ns()->restrict([ 'read.users' ]); + ns()->restrict( [ 'read.users' ] ); - return User::get([ 'username', 'id', 'email' ]); + return User::get( [ 'username', 'id', 'email' ] ); } /** @@ -71,12 +71,12 @@ public function permissionManager() /** * force permissions check */ - ns()->restrict([ 'update.roles' ]); + ns()->restrict( [ 'update.roles' ] ); - return View::make('pages.dashboard.users.permission-manager', [ - 'title' => __('Permission Manager'), - 'description' => __('Manage all permissions and roles'), - ]); + return View::make( 'pages.dashboard.users.permission-manager', [ + 'title' => __( 'Permission Manager' ), + 'description' => __( 'Manage all permissions and roles' ), + ] ); } /** @@ -86,14 +86,14 @@ public function permissionManager() */ public function getProfile() { - ns()->restrict([ 'manage.profile' ]); + ns()->restrict( [ 'manage.profile' ] ); - return View::make('pages.dashboard.users.profile', [ - 'title' => __('My Profile'), - 'description' => __('Change your personal settings'), - 'src' => url('/api/forms/ns.user-profile'), - 'submitUrl' => url('/api/users/profile'), - ]); + return View::make( 'pages.dashboard.users.profile', [ + 'title' => __( 'My Profile' ), + 'description' => __( 'Change your personal settings' ), + 'src' => url( '/api/forms/ns.user-profile' ), + 'submitUrl' => url( '/api/users/profile' ), + ] ); } /** @@ -103,7 +103,7 @@ public function getProfile() */ public function getRoles() { - return Role::with('permissions')->get(); + return Role::with( 'permissions' )->get(); } /** @@ -121,27 +121,27 @@ public function getPermissions() * * @return Json */ - public function updateRole(Request $request) + public function updateRole( Request $request ) { - ns()->restrict([ 'update.roles' ]); + ns()->restrict( [ 'update.roles' ] ); $roles = $request->all(); - foreach ($roles as $roleNamespace => $permissions) { - $role = Role::namespace($roleNamespace); + foreach ( $roles as $roleNamespace => $permissions ) { + $role = Role::namespace( $roleNamespace ); - if ($role instanceof Role) { - $removedPermissions = collect($permissions)->filter(fn($permission) => ! $permission); - $grantedPermissions = collect($permissions)->filter(fn($permission) => $permission); + if ( $role instanceof Role ) { + $removedPermissions = collect( $permissions )->filter( fn( $permission ) => ! $permission ); + $grantedPermissions = collect( $permissions )->filter( fn( $permission ) => $permission ); - $role->removePermissions($removedPermissions->keys()); - $role->addPermissions($grantedPermissions->keys()); + $role->removePermissions( $removedPermissions->keys() ); + $role->addPermissions( $grantedPermissions->keys() ); } } return [ 'status' => 'success', - 'message' => __('The permissions has been updated.'), + 'message' => __( 'The permissions has been updated.' ), ]; } @@ -152,7 +152,7 @@ public function updateRole(Request $request) */ public function rolesList() { - ns()->restrict([ 'read.roles' ]); + ns()->restrict( [ 'read.roles' ] ); return RolesCrud::table(); } @@ -162,41 +162,41 @@ public function rolesList() * * @return View */ - public function editRole(Role $role) + public function editRole( Role $role ) { - ns()->restrict([ 'update.roles' ]); + ns()->restrict( [ 'update.roles' ] ); - return RolesCrud::form($role); + return RolesCrud::form( $role ); } - public function createRole(Role $role) + public function createRole( Role $role ) { return RolesCrud::form(); } - public function cloneRole(Role $role) + public function cloneRole( Role $role ) { - ns()->restrict([ 'create.roles' ]); + ns()->restrict( [ 'create.roles' ] ); - return $this->usersService->cloneRole($role); + return $this->usersService->cloneRole( $role ); } - public function configureWidgets(Request $request) + public function configureWidgets( Request $request ) { - return $this->usersService->storeWidgetsOnAreas($request->only([ 'column' ])); + return $this->usersService->storeWidgetsOnAreas( $request->only( [ 'column' ] ) ); } - public function createToken(Request $request) + public function createToken( Request $request ) { - $validation = Validator::make($request->all(), [ + $validation = Validator::make( $request->all(), [ 'name' => 'required', - ]); + ] ); - if (! $validation->passes()) { - throw new Exception(__('The provided data aren\'t valid')); + if ( ! $validation->passes() ) { + throw new Exception( __( 'The provided data aren\'t valid' ) ); } - return $this->usersService->createToken($request->input('name')); + return $this->usersService->createToken( $request->input( 'name' ) ); } public function getTokens() @@ -204,8 +204,8 @@ public function getTokens() return $this->usersService->getTokens(); } - public function deleteToken($tokenId) + public function deleteToken( $tokenId ) { - return $this->usersService->deleteToken($tokenId); + return $this->usersService->deleteToken( $tokenId ); } } diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index 384e6e195..840f41337 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -28,17 +28,17 @@ public function __construct( public function home() { - return View::make('pages.dashboard.home', [ - 'title' => __('Dashboard'), - ]); + return View::make( 'pages.dashboard.home', [ + 'title' => __( 'Dashboard' ), + ] ); } /** * @deprecated */ - protected function view($path, $data = []) + protected function view( $path, $data = [] ) { - return view($path, $data); + return view( $path, $data ); } public function getCards() @@ -46,27 +46,27 @@ public function getCards() $todayStarts = $this->dateService->copy()->startOfDay()->toDateTimeString(); $todayEnds = $this->dateService->copy()->endOfDay()->toDateTimeString(); - return DashboardDay::from($todayStarts) - ->to($todayEnds) + return DashboardDay::from( $todayStarts ) + ->to( $todayEnds ) ->first() ?: []; } public function getBestCustomers() { - return Customer::orderBy('purchases_amount', 'desc')->limit(5)->get(); + return Customer::orderBy( 'purchases_amount', 'desc' )->limit( 5 )->get(); } public function getRecentsOrders() { - return Order::orderBy('created_at', 'desc')->with('user')->limit(10)->get(); + return Order::orderBy( 'created_at', 'desc' )->with( 'user' )->limit( 10 )->get(); } public function getBestCashiers() { - return Role::namespace('nexopos.store.cashier') + return Role::namespace( 'nexopos.store.cashier' ) ->users() - ->orderBy('total_sales', 'desc') - ->limit(10) + ->orderBy( 'total_sales', 'desc' ) + ->limit( 10 ) ->get(); } @@ -75,45 +75,45 @@ public function getBestCashiers() * Output object on the footer. Useful to create * custom output per page. * - * @param string $name + * @param string $name * @return void */ - public function hookOutput($name) + public function hookOutput( $name ) { - Hook::addAction('ns-dashboard-footer', function (Output $output) use ($name) { - Hook::action($name, $output); - }, 15); + Hook::addAction( 'ns-dashboard-footer', function ( Output $output ) use ( $name ) { + Hook::action( $name, $output ); + }, 15 ); } public function getWeekReports() { $weekMap = [ 0 => [ - 'label' => __('Sunday'), + 'label' => __( 'Sunday' ), 'value' => 'SU', ], 1 => [ - 'label' => __('Monday'), + 'label' => __( 'Monday' ), 'value' => 'MO', ], 2 => [ - 'label' => __('Tuesday'), + 'label' => __( 'Tuesday' ), 'value' => 'TU', ], 3 => [ - 'label' => __('Wednesday'), + 'label' => __( 'Wednesday' ), 'value' => 'WE', ], 4 => [ - 'label' => __('Thursday'), + 'label' => __( 'Thursday' ), 'value' => 'TH', ], 5 => [ - 'label' => __('Friday'), + 'label' => __( 'Friday' ), 'value' => 'FR', ], 6 => [ - 'label' => __('Saturday'), + 'label' => __( 'Saturday' ), 'value' => 'SA', ], ]; @@ -123,27 +123,27 @@ public function getWeekReports() $lastWeekStarts = $currentWeekStarts->copy()->subDay()->startOfWeek(); $lastWeekEnds = $currentWeekStarts->copy()->subDay()->endOfWeek(); - DashboardDay::from($currentWeekStarts->toDateTimeString()) - ->to($currentWeekEnds->toDateTimeString()) + DashboardDay::from( $currentWeekStarts->toDateTimeString() ) + ->to( $currentWeekEnds->toDateTimeString() ) ->get() - ->each(function ($report) use (&$weekMap) { - if (! isset($weekMap[ Carbon::parse($report->range_starts)->dayOfWeek ][ 'current' ][ 'entries' ])) { - $weekMap[ Carbon::parse($report->range_starts)->dayOfWeek ][ 'current' ][ 'entries' ] = []; + ->each( function ( $report ) use ( &$weekMap ) { + if ( ! isset( $weekMap[ Carbon::parse( $report->range_starts )->dayOfWeek ][ 'current' ][ 'entries' ] ) ) { + $weekMap[ Carbon::parse( $report->range_starts )->dayOfWeek ][ 'current' ][ 'entries' ] = []; } - $weekMap[ Carbon::parse($report->range_starts)->dayOfWeek ][ 'current' ][ 'entries' ][] = $report; - }); + $weekMap[ Carbon::parse( $report->range_starts )->dayOfWeek ][ 'current' ][ 'entries' ][] = $report; + } ); - DashboardDay::from($lastWeekStarts->toDateTimeString()) - ->to($lastWeekEnds->toDateTimeString()) + DashboardDay::from( $lastWeekStarts->toDateTimeString() ) + ->to( $lastWeekEnds->toDateTimeString() ) ->get() - ->each(function ($report) use (&$weekMap) { - if (! isset($weekMap[ Carbon::parse($report->range_starts)->dayOfWeek ][ 'previous' ][ 'entries' ])) { - $weekMap[ Carbon::parse($report->range_starts)->dayOfWeek ][ 'previous' ][ 'entries' ] = []; + ->each( function ( $report ) use ( &$weekMap ) { + if ( ! isset( $weekMap[ Carbon::parse( $report->range_starts )->dayOfWeek ][ 'previous' ][ 'entries' ] ) ) { + $weekMap[ Carbon::parse( $report->range_starts )->dayOfWeek ][ 'previous' ][ 'entries' ] = []; } - $weekMap[ Carbon::parse($report->range_starts)->dayOfWeek ][ 'previous' ][ 'entries' ][] = $report; - }); + $weekMap[ Carbon::parse( $report->range_starts )->dayOfWeek ][ 'previous' ][ 'entries' ][] = $report; + } ); return [ 'range_starts' => $lastWeekStarts->toDateTimeString(), diff --git a/app/Http/Controllers/DevController.php b/app/Http/Controllers/DevController.php index 783072f06..56b6296b0 100644 --- a/app/Http/Controllers/DevController.php +++ b/app/Http/Controllers/DevController.php @@ -8,6 +8,6 @@ class DevController extends DashboardController { public function index() { - return View::make('dev.index'); + return View::make( 'dev.index' ); } } diff --git a/app/Http/Controllers/SetupController.php b/app/Http/Controllers/SetupController.php index 2d5a93597..ef6fdfd5b 100644 --- a/app/Http/Controllers/SetupController.php +++ b/app/Http/Controllers/SetupController.php @@ -15,39 +15,39 @@ class SetupController extends Controller { - public function __construct(private SetupService $setup) + public function __construct( private SetupService $setup ) { // ... } - public function welcome(Request $request) + public function welcome( Request $request ) { - return view('pages.setup.welcome', [ - 'title' => __('Welcome — NexoPOS'), - 'languages' => config('nexopos.languages'), - 'lang' => $request->query('lang') ?: 'en', - ]); + return view( 'pages.setup.welcome', [ + 'title' => __( 'Welcome — NexoPOS' ), + 'languages' => config( 'nexopos.languages' ), + 'lang' => $request->query( 'lang' ) ?: 'en', + ] ); } - public function checkDatabase(Request $request) + public function checkDatabase( Request $request ) { - return $this->setup->saveDatabaseSettings($request); + return $this->setup->saveDatabaseSettings( $request ); } - public function checkDbConfigDefined(Request $request) + public function checkDbConfigDefined( Request $request ) { return $this->setup->testDBConnexion(); } - public function saveConfiguration(ApplicationConfigRequest $request) + public function saveConfiguration( ApplicationConfigRequest $request ) { - return $this->setup->runMigration($request->all()); + return $this->setup->runMigration( $request->all() ); } public function checkExistingCredentials() { try { - if (DB::connection()->getPdo()) { + if ( DB::connection()->getPdo() ) { /** * We believe from here the app should update the .env file to ensure * the APP_URL and others values are updated with the actual domain name. @@ -58,10 +58,10 @@ public function checkExistingCredentials() 'status' => 'success', ]; } - } catch (\Exception $e) { - return response()->json([ + } catch ( \Exception $e ) { + return response()->json( [ 'status' => 'failed', - ], 403); + ], 403 ); } } } diff --git a/app/Http/Controllers/UpdateController.php b/app/Http/Controllers/UpdateController.php index b4a1e9f45..4ee455b97 100644 --- a/app/Http/Controllers/UpdateController.php +++ b/app/Http/Controllers/UpdateController.php @@ -24,37 +24,37 @@ public function __construct( public function updateDatabase() { - return view('pages.database.update', [ - 'title' => __('Database Update'), - 'redirect' => session('after_update', ns()->route('ns.dashboard.home')), - 'modules' => collect($this->modulesService->getEnabled())->filter(fn($module) => count($module[ 'migrations' ]) > 0)->toArray(), - ]); + return view( 'pages.database.update', [ + 'title' => __( 'Database Update' ), + 'redirect' => session( 'after_update', ns()->route( 'ns.dashboard.home' ) ), + 'modules' => collect( $this->modulesService->getEnabled() )->filter( fn( $module ) => count( $module[ 'migrations' ] ) > 0 )->toArray(), + ] ); } - public function runMigration(Request $request) + public function runMigration( Request $request ) { /** * Proceeding code migration. */ - if ($request->input('file')) { - $this->updateService->executeMigrationFromFileName(file: $request->input('file')); + if ( $request->input( 'file' ) ) { + $this->updateService->executeMigrationFromFileName( file: $request->input( 'file' ) ); } /** * proceeding the migration for * the provided module. */ - if ($request->input('module')) { - $module = $request->input('module'); - foreach ($module[ 'migrations' ] as $file) { - $response = $this->modulesService->runMigration($module[ 'namespace' ], $file); - AfterMigrationExecutedEvent::dispatch($module, $response, $file); + if ( $request->input( 'module' ) ) { + $module = $request->input( 'module' ); + foreach ( $module[ 'migrations' ] as $file ) { + $response = $this->modulesService->runMigration( $module[ 'namespace' ], $file ); + AfterMigrationExecutedEvent::dispatch( $module, $response, $file ); } } return [ 'status' => 'success', - 'message' => __('The migration has successfully run.'), + 'message' => __( 'The migration has successfully run.' ), ]; } } diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 29d294800..25c33573d 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -9,13 +9,13 @@ class Authenticate extends Middleware /** * Get the path the user should be redirected to when they are not authenticated. * - * @param \Illuminate\Http\Request $request + * @param \Illuminate\Http\Request $request * @return string|null */ - protected function redirectTo($request) + protected function redirectTo( $request ) { - if (! $request->expectsJson()) { - return ns()->route('ns.login'); + if ( ! $request->expectsJson() ) { + return ns()->route( 'ns.login' ); } } } diff --git a/app/Http/Middleware/CheckApplicationHealthMiddleware.php b/app/Http/Middleware/CheckApplicationHealthMiddleware.php index 341b1bc67..3cab41c50 100644 --- a/app/Http/Middleware/CheckApplicationHealthMiddleware.php +++ b/app/Http/Middleware/CheckApplicationHealthMiddleware.php @@ -14,7 +14,7 @@ class CheckApplicationHealthMiddleware * * @return mixed */ - public function handle(Request $request, Closure $next) + public function handle( Request $request, Closure $next ) { /** * Will check if either "redis" or "supervisor" is configured @@ -26,7 +26,7 @@ public function handle(Request $request, Closure $next) * We'll only perform this is the QUEUE_CONNECTION * has a supported value. Otherwise it's performed asynchronously see app/Console/Kernel.php */ - if (in_array(env('QUEUE_CONNECTION'), [ 'sync' ])) { + if ( in_array( env( 'QUEUE_CONNECTION' ), [ 'sync' ] ) ) { /** * Will check if Cron Jobs are * correctly set for NexoPOS @@ -46,11 +46,11 @@ public function handle(Request $request, Closure $next) * * @var ModulesService */ - $modules = app()->make(ModulesService::class); + $modules = app()->make( ModulesService::class ); $modules->dependenciesCheck(); AfterAppHealthCheckedEvent::dispatch(); - return $next($request); + return $next( $request ); } } diff --git a/app/Http/Middleware/CheckMigrationStatus.php b/app/Http/Middleware/CheckMigrationStatus.php index acb98930b..b766f5aea 100644 --- a/app/Http/Middleware/CheckMigrationStatus.php +++ b/app/Http/Middleware/CheckMigrationStatus.php @@ -15,26 +15,26 @@ class CheckMigrationStatus * * @return mixed */ - public function handle(Request $request, Closure $next) + public function handle( Request $request, Closure $next ) { - if (ns()->update->getMigrations()->count() > 0) { - session([ 'after_update' => url()->current() ]); + if ( ns()->update->getMigrations()->count() > 0 ) { + session( [ 'after_update' => url()->current() ] ); - return redirect(ns()->route('ns.database-update')); + return redirect( ns()->route( 'ns.database-update' ) ); } - if (Helper::installed()) { - $module = app()->make(ModulesService::class); - $modules = collect($module->getEnabled()); - $total = $modules->filter(fn($module) => count($module[ 'migrations' ]) > 0); + if ( Helper::installed() ) { + $module = app()->make( ModulesService::class ); + $modules = collect( $module->getEnabled() ); + $total = $modules->filter( fn( $module ) => count( $module[ 'migrations' ] ) > 0 ); - if ($total->count() > 0) { - return redirect(ns()->route('ns.database-update')); + if ( $total->count() > 0 ) { + return redirect( ns()->route( 'ns.database-update' ) ); } } - AfterMigrationStatusCheckedEvent::dispatch($next, $request); + AfterMigrationStatusCheckedEvent::dispatch( $next, $request ); - return $next($request); + return $next( $request ); } } diff --git a/app/Http/Middleware/ClearRequestCacheMiddleware.php b/app/Http/Middleware/ClearRequestCacheMiddleware.php index 5f765bcc3..c106fece9 100644 --- a/app/Http/Middleware/ClearRequestCacheMiddleware.php +++ b/app/Http/Middleware/ClearRequestCacheMiddleware.php @@ -11,18 +11,18 @@ class ClearRequestCacheMiddleware /** * Handle an incoming request. * - * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next + * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse */ - public function handle(Request $request, Closure $next) + public function handle( Request $request, Closure $next ) { - $response = $next($request); + $response = $next( $request ); /** * In case any opeartion should occurs * once the response is about to bet sent. */ - ResponseReadyEvent::dispatch($response); + ResponseReadyEvent::dispatch( $response ); return $response; } diff --git a/app/Http/Middleware/FooterOutputHookMiddleware.php b/app/Http/Middleware/FooterOutputHookMiddleware.php index 3416e4a99..1812d2fba 100644 --- a/app/Http/Middleware/FooterOutputHookMiddleware.php +++ b/app/Http/Middleware/FooterOutputHookMiddleware.php @@ -12,33 +12,33 @@ class FooterOutputHookMiddleware /** * Handle an incoming request. * - * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next + * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse */ - public function handle(Request $request, Closure $next) + public function handle( Request $request, Closure $next ) { /** * This allows creating custom header and footer hook action * using the route name. For example a route having as name "ns.dashboard.home" * Will now have 2 hooks "ns-dashboard-homme-header" and "ns-dashboard-home-footer" */ - collect([ 'header', 'footer' ])->each(function ($arg) { + collect( [ 'header', 'footer' ] )->each( function ( $arg ) { $hookName = 'ns-dashboard-' . $arg; - Hook::addAction($hookName, function (Output $output) use ($arg) { - $exploded = explode('.', request()->route()->getName()); + Hook::addAction( $hookName, function ( Output $output ) use ( $arg ) { + $exploded = explode( '.', request()->route()->getName() ); /** * a route might not have a name * if that happen, we'll ignore that. */ - if (! empty($exploded)) { - $final = implode('-', $exploded) . '-' . $arg; - Hook::action($final, $output); + if ( ! empty( $exploded ) ) { + $final = implode( '-', $exploded ) . '-' . $arg; + Hook::action( $final, $output ); } - }, 15); - }); + }, 15 ); + } ); - return $next($request); + return $next( $request ); } } diff --git a/app/Http/Middleware/HandleCommonRoutesMiddleware.php b/app/Http/Middleware/HandleCommonRoutesMiddleware.php index 57c492676..5a0ca3773 100644 --- a/app/Http/Middleware/HandleCommonRoutesMiddleware.php +++ b/app/Http/Middleware/HandleCommonRoutesMiddleware.php @@ -13,12 +13,12 @@ class HandleCommonRoutesMiddleware * * @return mixed */ - public function handle(Request $request, Closure $next) + public function handle( Request $request, Closure $next ) { - $resultRequest = Hook::filter('ns-common-routes', false, $request, $next); + $resultRequest = Hook::filter( 'ns-common-routes', false, $request, $next ); - if ($resultRequest === false) { - return $next($request); + if ( $resultRequest === false ) { + return $next( $request ); } return $resultRequest; diff --git a/app/Http/Middleware/InstalledStateMiddleware.php b/app/Http/Middleware/InstalledStateMiddleware.php index 31e5204a0..a79ccdc9e 100644 --- a/app/Http/Middleware/InstalledStateMiddleware.php +++ b/app/Http/Middleware/InstalledStateMiddleware.php @@ -11,17 +11,17 @@ class InstalledStateMiddleware /** * Handle an incoming request. * - * @param \Illuminate\Http\Request $request + * @param \Illuminate\Http\Request $request * @return mixed */ - public function handle($request, Closure $next) + public function handle( $request, Closure $next ) { - InstalledStateBeforeCheckedEvent::dispatch($next, $request); + InstalledStateBeforeCheckedEvent::dispatch( $next, $request ); - if (Helper::installed()) { - return $next($request); + if ( Helper::installed() ) { + return $next( $request ); } - return redirect()->route('ns.do-setup'); + return redirect()->route( 'ns.do-setup' ); } } diff --git a/app/Http/Middleware/KillSessionIfNotInstalledMiddleware.php b/app/Http/Middleware/KillSessionIfNotInstalledMiddleware.php index 8522565c0..8f293e50f 100644 --- a/app/Http/Middleware/KillSessionIfNotInstalledMiddleware.php +++ b/app/Http/Middleware/KillSessionIfNotInstalledMiddleware.php @@ -12,15 +12,15 @@ class KillSessionIfNotInstalledMiddleware /** * Handle an incoming request. * - * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next + * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse */ - public function handle(Request $request, Closure $next) + public function handle( Request $request, Closure $next ) { - if (! Helper::installed()) { + if ( ! Helper::installed() ) { Auth::logout(); } - return $next($request); + return $next( $request ); } } diff --git a/app/Http/Middleware/LoadLangMiddleware.php b/app/Http/Middleware/LoadLangMiddleware.php index 42e9f385d..c096db005 100644 --- a/app/Http/Middleware/LoadLangMiddleware.php +++ b/app/Http/Middleware/LoadLangMiddleware.php @@ -16,24 +16,24 @@ class LoadLangMiddleware * * @return mixed */ - public function handle(Request $request, Closure $next) + public function handle( Request $request, Closure $next ) { - if (Auth::check()) { + if ( Auth::check() ) { $userAttribute = Auth::user()->attribute; - $language = ns()->option->get('ns_store_language', 'en'); + $language = ns()->option->get( 'ns_store_language', 'en' ); /** * if the user attribute is not defined, * we'll use the default system locale or english by default. */ - if ($userAttribute instanceof UserAttribute) { + if ( $userAttribute instanceof UserAttribute ) { $language = Auth::user()->attribute->language; } - App::setLocale(in_array($language, array_keys(config('nexopos.languages'))) ? $language : 'en'); + App::setLocale( in_array( $language, array_keys( config( 'nexopos.languages' ) ) ) ? $language : 'en' ); } else { - App::setLocale(ns()->option->get('ns_store_language', 'en')); + App::setLocale( ns()->option->get( 'ns_store_language', 'en' ) ); } /** @@ -41,8 +41,8 @@ public function handle(Request $request, Closure $next) * we might dispatch an event that will load module * locale as well. */ - event(new LocaleDefinedEvent(App::getLocale())); + event( new LocaleDefinedEvent( App::getLocale() ) ); - return $next($request); + return $next( $request ); } } diff --git a/app/Http/Middleware/NotInstalledStateMiddleware.php b/app/Http/Middleware/NotInstalledStateMiddleware.php index be0d00ca7..285998515 100644 --- a/app/Http/Middleware/NotInstalledStateMiddleware.php +++ b/app/Http/Middleware/NotInstalledStateMiddleware.php @@ -12,24 +12,24 @@ class NotInstalledStateMiddleware /** * Handle an incoming request. * - * @param \Illuminate\Http\Request $request + * @param \Illuminate\Http\Request $request * @return mixed */ - public function handle($request, Closure $next) + public function handle( $request, Closure $next ) { /** * we'll try to detect the language * from the query string. */ - if (! empty($request->query('lang'))) { - $validLanguage = in_array($request->query('lang'), array_keys(config('nexopos.languages'))) ? $request->query('lang') : 'en'; - App::setLocale($validLanguage); + if ( ! empty( $request->query( 'lang' ) ) ) { + $validLanguage = in_array( $request->query( 'lang' ), array_keys( config( 'nexopos.languages' ) ) ) ? $request->query( 'lang' ) : 'en'; + App::setLocale( $validLanguage ); } - if (! Helper::installed()) { - return $next($request); + if ( ! Helper::installed() ) { + return $next( $request ); } - throw new NotAllowedException(__('You\'re not allowed to see this page.')); + throw new NotAllowedException( __( 'You\'re not allowed to see this page.' ) ); } } diff --git a/app/Http/Middleware/PasswordRecoveryMiddleware.php b/app/Http/Middleware/PasswordRecoveryMiddleware.php index 287891218..5e741763e 100644 --- a/app/Http/Middleware/PasswordRecoveryMiddleware.php +++ b/app/Http/Middleware/PasswordRecoveryMiddleware.php @@ -11,15 +11,15 @@ class PasswordRecoveryMiddleware /** * Handle an incoming request. * - * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next + * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse */ - public function handle(Request $request, Closure $next) + public function handle( Request $request, Closure $next ) { - if (ns()->option->get('ns_recovery_enabled', 'no') === 'yes') { - return $next($request); + if ( ns()->option->get( 'ns_recovery_enabled', 'no' ) === 'yes' ) { + return $next( $request ); } - throw new NotAllowedException(__('The recovery has been explicitly disabled.')); + throw new NotAllowedException( __( 'The recovery has been explicitly disabled.' ) ); } } diff --git a/app/Http/Middleware/ProtectRoutePermissionMiddleware.php b/app/Http/Middleware/ProtectRoutePermissionMiddleware.php index ad64858c3..4e156c022 100644 --- a/app/Http/Middleware/ProtectRoutePermissionMiddleware.php +++ b/app/Http/Middleware/ProtectRoutePermissionMiddleware.php @@ -13,12 +13,12 @@ class ProtectRoutePermissionMiddleware * * @return mixed */ - public function handle(Request $request, Closure $next, $permission) + public function handle( Request $request, Closure $next, $permission ) { - if (ns()->allowedTo($permission)) { - return $next($request); + if ( ns()->allowedTo( $permission ) ) { + return $next( $request ); } - throw new NotEnoughPermissionException(__('Your don\'t have enough permission to perform this action.')); + throw new NotEnoughPermissionException( __( 'Your don\'t have enough permission to perform this action.' ) ); } } diff --git a/app/Http/Middleware/ProtectRouteRoleMiddleware.php b/app/Http/Middleware/ProtectRouteRoleMiddleware.php index a458bc133..3f1befc90 100644 --- a/app/Http/Middleware/ProtectRouteRoleMiddleware.php +++ b/app/Http/Middleware/ProtectRouteRoleMiddleware.php @@ -14,12 +14,12 @@ class ProtectRouteRoleMiddleware * * @return mixed */ - public function handle(Request $request, Closure $next, $role) + public function handle( Request $request, Closure $next, $role ) { - if (Auth::check() && ns()->hasRole($role)) { - return $next($request); + if ( Auth::check() && ns()->hasRole( $role ) ) { + return $next( $request ); } - throw new NotAllowedException(__('You don\'t have the necessary role to see this page.')); + throw new NotAllowedException( __( 'You don\'t have the necessary role to see this page.' ) ); } } diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php index daa708918..d96061a80 100644 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -11,16 +11,16 @@ class RedirectIfAuthenticated /** * Handle an incoming request. * - * @param \Illuminate\Http\Request $request - * @param string|null $guard + * @param \Illuminate\Http\Request $request + * @param string|null $guard * @return mixed */ - public function handle($request, Closure $next, $guard = null) + public function handle( $request, Closure $next, $guard = null ) { - if (Auth::guard($guard)->check()) { - return redirect(RouteServiceProvider::HOME); + if ( Auth::guard( $guard )->check() ) { + return redirect( RouteServiceProvider::HOME ); } - return $next($request); + return $next( $request ); } } diff --git a/app/Http/Middleware/RegistrationMiddleware.php b/app/Http/Middleware/RegistrationMiddleware.php index 4ae078663..6977c0aa0 100644 --- a/app/Http/Middleware/RegistrationMiddleware.php +++ b/app/Http/Middleware/RegistrationMiddleware.php @@ -11,15 +11,15 @@ class RegistrationMiddleware /** * Handle an incoming request. * - * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next + * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse */ - public function handle(Request $request, Closure $next) + public function handle( Request $request, Closure $next ) { - if (ns()->option->get('ns_registration_enabled', 'no') === 'yes') { - return $next($request); + if ( ns()->option->get( 'ns_registration_enabled', 'no' ) === 'yes' ) { + return $next( $request ); } - throw new NotAllowedException(__('The registration has been explicitly disabled.')); + throw new NotAllowedException( __( 'The registration has been explicitly disabled.' ) ); } } diff --git a/app/Http/Middleware/SanitizePostFieldsMiddleware.php b/app/Http/Middleware/SanitizePostFieldsMiddleware.php index 9bb5bf643..8fe2c1410 100644 --- a/app/Http/Middleware/SanitizePostFieldsMiddleware.php +++ b/app/Http/Middleware/SanitizePostFieldsMiddleware.php @@ -11,20 +11,20 @@ class SanitizePostFieldsMiddleware /** * Handle an incoming request. * - * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next + * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ - public function handle(Request $request, Closure $next): Response + public function handle( Request $request, Closure $next ): Response { $input = $request->all(); - array_walk_recursive($input, function (&$input) { - $input = strip_tags($input); - $input = htmlspecialchars($input); - $input = trim($input); - }); + array_walk_recursive( $input, function ( &$input ) { + $input = strip_tags( $input ); + $input = htmlspecialchars( $input ); + $input = trim( $input ); + } ); - $request->merge($input); + $request->merge( $input ); - return $next($request); + return $next( $request ); } } diff --git a/app/Http/Requests/BaseCrudRequest.php b/app/Http/Requests/BaseCrudRequest.php index fb4c6f1f1..5e1d28940 100644 --- a/app/Http/Requests/BaseCrudRequest.php +++ b/app/Http/Requests/BaseCrudRequest.php @@ -7,11 +7,11 @@ class BaseCrudRequest extends FormRequest { - public function getPlainData($namespace, $entry = null) + public function getPlainData( $namespace, $entry = null ) { $service = new CrudService; - $resource = $service->getCrudInstance($this->route('namespace')); + $resource = $service->getCrudInstance( $this->route( 'namespace' ) ); - return $resource->getPlainData($this, $entry); + return $resource->getPlainData( $this, $entry ); } } diff --git a/app/Http/Requests/CrudPostRequest.php b/app/Http/Requests/CrudPostRequest.php index 3d69dd676..c0d45b325 100644 --- a/app/Http/Requests/CrudPostRequest.php +++ b/app/Http/Requests/CrudPostRequest.php @@ -29,7 +29,7 @@ public function rules() /** * Let's initialize the CRUD resource */ - $resource = $service->getCrudInstance($this->route('namespace')); + $resource = $service->getCrudInstance( $this->route( 'namespace' ) ); /** * Now let's extract the validation rules @@ -41,15 +41,15 @@ public function rules() * As rules might contains complex array (with Rule class), * we don't want that array to be transformed using the dot key form. */ - $isolatedRules = $resource->isolateArrayRules($arrayRules); + $isolatedRules = $resource->isolateArrayRules( $arrayRules ); /** * Let's properly flat everything. */ - $flatRules = collect($isolatedRules)->mapWithKeys(function ($rule) { + $flatRules = collect( $isolatedRules )->mapWithKeys( function ( $rule ) { return [ $rule[0] => $rule[1] ]; - })->toArray(); + } )->toArray(); - return Hook::filter('ns.validation.' . $this->route('namespace'), $flatRules); + return Hook::filter( 'ns.validation.' . $this->route( 'namespace' ), $flatRules ); } } diff --git a/app/Http/Requests/CrudPutRequest.php b/app/Http/Requests/CrudPutRequest.php index 1c17d8435..2d5f43e93 100644 --- a/app/Http/Requests/CrudPutRequest.php +++ b/app/Http/Requests/CrudPutRequest.php @@ -25,7 +25,7 @@ public function authorize() public function rules() { $service = new CrudService; - $resource = $service->getCrudInstance($this->route('namespace')); + $resource = $service->getCrudInstance( $this->route( 'namespace' ) ); /** * We do pass the model here as @@ -33,23 +33,23 @@ public function rules() * during validation. */ $arrayRules = $resource->extractValidation( - model: $resource->getModel()::find($this->route('id')) + model: $resource->getModel()::find( $this->route( 'id' ) ) ); /** * As validation might uses array with Rule class, we want to * properly exclude that, so that the array is not converted into dots. */ - $isolatedRules = $resource->isolateArrayRules($arrayRules); + $isolatedRules = $resource->isolateArrayRules( $arrayRules ); /** * This will flat the rules to create a dot-like * validation rules array */ - $flatRules = collect($isolatedRules)->mapWithKeys(function ($rule) { + $flatRules = collect( $isolatedRules )->mapWithKeys( function ( $rule ) { return [ $rule[0] => $rule[1] ]; - })->toArray(); + } )->toArray(); - return Hook::filter('ns.validation.' . $this->route('namespace'), $flatRules); + return Hook::filter( 'ns.validation.' . $this->route( 'namespace' ), $flatRules ); } } diff --git a/app/Http/Requests/FormsRequest.php b/app/Http/Requests/FormsRequest.php index 5dd3c3075..8bcce5576 100644 --- a/app/Http/Requests/FormsRequest.php +++ b/app/Http/Requests/FormsRequest.php @@ -28,16 +28,16 @@ public function authorize() public function rules() { $service = new CrudService; - $instance = Events::filter('ns.forms', [], $this->route('resource')); + $instance = Events::filter( 'ns.forms', [], $this->route( 'resource' ) ); - if (! $instance instanceof SettingsPage) { - throw new Exception(sprintf( + if ( ! $instance instanceof SettingsPage ) { + throw new Exception( sprintf( '%s is not an instanceof "%s".', - $this->route('resource'), + $this->route( 'resource' ), SettingsPage::class - )); + ) ); } - return $instance->validateForm($this); + return $instance->validateForm( $this ); } } diff --git a/app/Http/Requests/ProcurementRequest.php b/app/Http/Requests/ProcurementRequest.php index 28f56d7da..c816c07ef 100644 --- a/app/Http/Requests/ProcurementRequest.php +++ b/app/Http/Requests/ProcurementRequest.php @@ -13,7 +13,7 @@ class ProcurementRequest extends FormRequest */ public function authorize() { - return ns()->allowedTo([ 'nexopos.create.procurements' ]); + return ns()->allowedTo( [ 'nexopos.create.procurements' ] ); } /** @@ -24,7 +24,6 @@ public function authorize() public function rules() { return [ - 'name' => 'required', 'general.delivery_status' => 'required', 'general.payment_status' => 'required', 'general.provider_id' => 'required', diff --git a/app/Http/Requests/SettingsRequest.php b/app/Http/Requests/SettingsRequest.php index 35031cbcd..f42f4f8aa 100644 --- a/app/Http/Requests/SettingsRequest.php +++ b/app/Http/Requests/SettingsRequest.php @@ -25,15 +25,15 @@ public function authorize() */ public function rules() { - $service = Hook::filter('ns.settings', false, $this->route('identifier')); + $service = Hook::filter( 'ns.settings', false, $this->route( 'identifier' ) ); - if ($service instanceof SettingsPage) { - return $service->validateForm($this); + if ( $service instanceof SettingsPage ) { + return $service->validateForm( $this ); } throw new Exception( - sprintf(__('Unable to initialize the settings page. The identifier "%s" cannot be instantiated.'), - $this->route('identifier') - )); + sprintf( __( 'Unable to initialize the settings page. The identifier "%s" cannot be instantiated.' ), + $this->route( 'identifier' ) + ) ); } } diff --git a/app/Http/Requests/SignUpRequest.php b/app/Http/Requests/SignUpRequest.php index e705f3f08..32e58dc7d 100644 --- a/app/Http/Requests/SignUpRequest.php +++ b/app/Http/Requests/SignUpRequest.php @@ -17,10 +17,10 @@ class SignUpRequest extends FormRequest */ public function authorize() { - $options = app()->make(Options::class); + $options = app()->make( Options::class ); - if ($options->get('ns_registration_enabled') !== 'yes') { - throw new NotAllowedException(__('Unable to register. The registration is closed.')); + if ( $options->get( 'ns_registration_enabled' ) !== 'yes' ) { + throw new NotAllowedException( __( 'Unable to register. The registration is closed.' ) ); } return true; diff --git a/app/Jobs/ApplyCustomerRewardJob.php b/app/Jobs/ApplyCustomerRewardJob.php index 099fefc85..509f397f4 100644 --- a/app/Jobs/ApplyCustomerRewardJob.php +++ b/app/Jobs/ApplyCustomerRewardJob.php @@ -21,7 +21,7 @@ class ApplyCustomerRewardJob implements ShouldQueue * * @return void */ - public function __construct(public Customer $customer, public CustomerReward $customerReward, public RewardSystem $reward) + public function __construct( public Customer $customer, public CustomerReward $customerReward, public RewardSystem $reward ) { $this->prepareSerialization(); } @@ -31,7 +31,7 @@ public function __construct(public Customer $customer, public CustomerReward $cu * * @return void */ - public function handle(CustomerService $customerService) + public function handle( CustomerService $customerService ) { $customerService->applyReward( customer: $this->customer, diff --git a/app/Jobs/CheckCustomerAccountJob.php b/app/Jobs/CheckCustomerAccountJob.php index d1cdf4d58..722e51456 100644 --- a/app/Jobs/CheckCustomerAccountJob.php +++ b/app/Jobs/CheckCustomerAccountJob.php @@ -20,7 +20,7 @@ class CheckCustomerAccountJob implements ShouldQueue * * @return void */ - public function __construct(public Customer $customer, public $payment) + public function __construct( public Customer $customer, public $payment ) { $this->prepareSerialization(); } @@ -30,10 +30,10 @@ public function __construct(public Customer $customer, public $payment) * * @return void */ - public function handle(CustomerService $customerService) + public function handle( CustomerService $customerService ) { - if ($this->payment[ 'identifier' ] === OrderPayment::PAYMENT_ACCOUNT) { - $customerService->canReduceCustomerAccount($this->customer, $this->payment[ 'value' ]); + if ( $this->payment[ 'identifier' ] === OrderPayment::PAYMENT_ACCOUNT ) { + $customerService->canReduceCustomerAccount( $this->customer, $this->payment[ 'value' ] ); } } } diff --git a/app/Jobs/CheckTaskSchedulingConfigurationJob.php b/app/Jobs/CheckTaskSchedulingConfigurationJob.php index 9bf0ec9ea..5e63fb468 100644 --- a/app/Jobs/CheckTaskSchedulingConfigurationJob.php +++ b/app/Jobs/CheckTaskSchedulingConfigurationJob.php @@ -31,14 +31,14 @@ public function __construct() */ public function handle() { - if (env('QUEUE_CONNECTION') !== 'sync') { + if ( env( 'QUEUE_CONNECTION' ) !== 'sync' ) { /** * @var NotificationService */ - $notification = app()->make(NotificationService::class); - $notification->deleteHavingIdentifier(NotificationsEnum::NSWORKERDISABLED); + $notification = app()->make( NotificationService::class ); + $notification->deleteHavingIdentifier( NotificationsEnum::NSWORKERDISABLED ); - ns()->option->set('ns_jobs_last_activity', ns()->date->toDateTimeString()); + ns()->option->set( 'ns_jobs_last_activity', ns()->date->toDateTimeString() ); } } } diff --git a/app/Jobs/ClearHoldOrdersJob.php b/app/Jobs/ClearHoldOrdersJob.php index 512b4c0ff..fc39961cc 100644 --- a/app/Jobs/ClearHoldOrdersJob.php +++ b/app/Jobs/ClearHoldOrdersJob.php @@ -40,16 +40,16 @@ public function handle( DateService $date, NotificationService $notification ) { - $deleted = Order::paymentStatus(Order::PAYMENT_HOLD) + $deleted = Order::paymentStatus( Order::PAYMENT_HOLD ) ->get() - ->filter(function ($order) use ($options, $date) { + ->filter( function ( $order ) use ( $options, $date ) { /** * @var Carbon */ - $expectedDate = Carbon::parse($order->created_at) - ->addDays($options->get('ns_orders_quotation_expiration', 5)); + $expectedDate = Carbon::parse( $order->created_at ) + ->addDays( $options->get( 'ns_orders_quotation_expiration', 5 ) ); - if ($expectedDate->lessThan($date->now())) { + if ( $expectedDate->lessThan( $date->now() ) ) { /** * @todo we might consider soft deleting for now */ @@ -59,21 +59,21 @@ public function handle( } return false; - }); + } ); - if ($deleted->count() > 0) { + if ( $deleted->count() > 0 ) { /** * Dispatch notification * to let admins know it has been cleared. */ - $notification->create([ - 'title' => __('Hold Order Cleared'), + $notification->create( [ + 'title' => __( 'Hold Order Cleared' ), 'identifier' => self::class, - 'description' => sprintf(__('%s order(s) has recently been deleted as they has expired.'), $deleted->count()), - ])->dispatchForGroup([ - Role::namespace('admin'), - Role::namespace('nexopos.store.administrator'), - ]); + 'description' => sprintf( __( '%s order(s) has recently been deleted as they have expired.' ), $deleted->count() ), + ] )->dispatchForGroup( [ + Role::namespace( 'admin' ), + Role::namespace( 'nexopos.store.administrator' ), + ] ); } } } diff --git a/app/Jobs/ClearModuleTempJob.php b/app/Jobs/ClearModuleTempJob.php index f8a461d3a..eef8aee85 100644 --- a/app/Jobs/ClearModuleTempJob.php +++ b/app/Jobs/ClearModuleTempJob.php @@ -28,7 +28,7 @@ public function __construct() * * @return void */ - public function handle(ModulesService $modulesService) + public function handle( ModulesService $modulesService ) { $modulesService->clearTemporaryFiles(); } diff --git a/app/Jobs/ComputeCategoryProductsJob.php b/app/Jobs/ComputeCategoryProductsJob.php index 56cb90609..72789e43f 100644 --- a/app/Jobs/ComputeCategoryProductsJob.php +++ b/app/Jobs/ComputeCategoryProductsJob.php @@ -33,6 +33,6 @@ public function __construct( public function handle( ProductCategoryService $productCategoryService ) { - $productCategoryService->computeProducts($this->productCategory); + $productCategoryService->computeProducts( $this->productCategory ); } } diff --git a/app/Jobs/ComputeDashboardMonthReportJob.php b/app/Jobs/ComputeDashboardMonthReportJob.php index bc1781a9f..ec255f1c0 100644 --- a/app/Jobs/ComputeDashboardMonthReportJob.php +++ b/app/Jobs/ComputeDashboardMonthReportJob.php @@ -28,7 +28,7 @@ public function __construct() * * @return void */ - public function handle(ReportService $reportService) + public function handle( ReportService $reportService ) { $reportService->computeDashboardMonth(); } diff --git a/app/Jobs/ComputeDayReportJob.php b/app/Jobs/ComputeDayReportJob.php index 82b99a4d3..cc95263d2 100644 --- a/app/Jobs/ComputeDayReportJob.php +++ b/app/Jobs/ComputeDayReportJob.php @@ -28,7 +28,7 @@ public function __construct() * * @return void */ - public function handle(ReportService $reportService) + public function handle( ReportService $reportService ) { $reportService->computeDayReport(); } diff --git a/app/Jobs/ComputeYearlyReportJob.php b/app/Jobs/ComputeYearlyReportJob.php index 73b1a4f2e..61562e24a 100644 --- a/app/Jobs/ComputeYearlyReportJob.php +++ b/app/Jobs/ComputeYearlyReportJob.php @@ -25,7 +25,7 @@ class ComputeYearlyReportJob implements ShouldQueue * * @return void */ - public function __construct($year) + public function __construct( $year ) { $this->year = $year; } @@ -35,21 +35,21 @@ public function __construct($year) * * @return void */ - public function handle(ReportService $reportService, NotificationService $notificationService) + public function handle( ReportService $reportService, NotificationService $notificationService ) { - $reportService->computeYearReport($this->year); + $reportService->computeYearReport( $this->year ); - $notificationService->create([ - 'title' => __('Report Refreshed'), + $notificationService->create( [ + 'title' => __( 'Report Refreshed' ), 'identifier' => 'ns-refreshed-annual-' . $this->year, 'description' => sprintf( - __('The yearly report has been successfully refreshed for the year "%s".'), + __( 'The yearly report has been successfully refreshed for the year "%s".' ), $this->year ), - 'url' => route(ns()->routeName('ns.dashboard.reports-annual')), - ])->dispatchForGroup([ + 'url' => route( ns()->routeName( 'ns.dashboard.reports-annual' ) ), + ] )->dispatchForGroup( [ 'admin', 'nexopos.store.administrator', - ]); + ] ); } } diff --git a/app/Jobs/CreateExpenseFromRefundJob.php b/app/Jobs/CreateExpenseFromRefundJob.php index 313b25595..b752b89d0 100644 --- a/app/Jobs/CreateExpenseFromRefundJob.php +++ b/app/Jobs/CreateExpenseFromRefundJob.php @@ -21,7 +21,7 @@ class CreateExpenseFromRefundJob implements ShouldQueue * * @return void */ - public function __construct(public Order $order, public OrderProductRefund $orderProductRefund, public OrderProduct $orderProduct) + public function __construct( public Order $order, public OrderProductRefund $orderProductRefund, public OrderProduct $orderProduct ) { // } @@ -31,7 +31,7 @@ public function __construct(public Order $order, public OrderProductRefund $orde * * @return void */ - public function handle(TransactionService $transactionService) + public function handle( TransactionService $transactionService ) { $transactionService->createTransactionFromRefund( order: $this->order, diff --git a/app/Jobs/CreateTransactionFromRefundedOrder.php b/app/Jobs/CreateTransactionFromRefundedOrder.php index 9aca5d932..6102d0510 100644 --- a/app/Jobs/CreateTransactionFromRefundedOrder.php +++ b/app/Jobs/CreateTransactionFromRefundedOrder.php @@ -17,7 +17,7 @@ class CreateTransactionFromRefundedOrder implements ShouldQueue /** * Create a new job instance. */ - public function __construct(public OrderRefund $orderRefund) + public function __construct( public OrderRefund $orderRefund ) { // } @@ -28,14 +28,14 @@ public function __construct(public OrderRefund $orderRefund) public function handle( TransactionService $transactionService ): void { - if ($this->orderRefund->shipping > 0) { + if ( $this->orderRefund->shipping > 0 ) { $transactionService->createTransactionHistory( value: $this->orderRefund->shipping, name: 'Refunded Shipping Fees', order_id: $this->orderRefund->order->id, order_refund_id: $this->orderRefund->id, operation: 'debit', - transaction_account_id: ns()->option->get('ns_sales_refunds_account'), + transaction_account_id: ns()->option->get( 'ns_sales_refunds_account' ), ); } } diff --git a/app/Jobs/DecreaseCustomerPurchasesJob.php b/app/Jobs/DecreaseCustomerPurchasesJob.php index 7bd1ade87..345d0bb98 100644 --- a/app/Jobs/DecreaseCustomerPurchasesJob.php +++ b/app/Jobs/DecreaseCustomerPurchasesJob.php @@ -19,7 +19,7 @@ class DecreaseCustomerPurchasesJob implements ShouldQueue * * @return void */ - public function __construct(public Customer $customer, public float $total) + public function __construct( public Customer $customer, public float $total ) { $this->prepareSerialization(); } @@ -29,7 +29,7 @@ public function __construct(public Customer $customer, public float $total) * * @return void */ - public function handle(CustomerService $customerService) + public function handle( CustomerService $customerService ) { $customerService->decreasePurchases( customer: $this->customer, diff --git a/app/Jobs/DetectLowStockProductsJob.php b/app/Jobs/DetectLowStockProductsJob.php index c8c9c8704..7ff460938 100644 --- a/app/Jobs/DetectLowStockProductsJob.php +++ b/app/Jobs/DetectLowStockProductsJob.php @@ -31,27 +31,27 @@ public function __construct() * * @return void */ - public function handle(NotificationService $notificationService) + public function handle( NotificationService $notificationService ) { $products = ProductUnitQuantity::stockAlertEnabled() - ->whereRaw('low_quantity > quantity') + ->whereRaw( 'low_quantity > quantity' ) ->count(); - if ($products > 0) { + if ( $products > 0 ) { LowStockProductsCountedEvent::dispatch(); - $notificationService->create([ - 'title' => __('Low Stock Alert'), + $notificationService->create( [ + 'title' => __( 'Low Stock Alert' ), 'description' => sprintf( - __('%s product(s) has low stock. Reorder those product(s) before it get exhausted.'), + __( '%s product(s) has low stock. Reorder those product(s) before it get exhausted.' ), $products ), 'identifier' => 'ns.low-stock-products', - 'url' => ns()->route('ns.dashboard.reports-low-stock'), - ])->dispatchForGroupNamespaces([ + 'url' => ns()->route( 'ns.dashboard.reports-low-stock' ), + ] )->dispatchForGroupNamespaces( [ Role::ADMIN, Role::STOREADMIN, - ]); + ] ); } } } diff --git a/app/Jobs/DetectScheduledTransactionsJob.php b/app/Jobs/DetectScheduledTransactionsJob.php index a543ff368..d3b38d0c7 100644 --- a/app/Jobs/DetectScheduledTransactionsJob.php +++ b/app/Jobs/DetectScheduledTransactionsJob.php @@ -35,28 +35,28 @@ public function handle() $startRange = ns()->date->copy(); $endRange = ns()->date->copy(); - $startRange->setSeconds(0); - $endRange->setSeconds(59); + $startRange->setSeconds( 0 ); + $endRange->setSeconds( 59 ); $query = Transaction::scheduled() - ->with('account') + ->with( 'account' ) ->active() - ->scheduledAfterDate($startRange->toDateTimeString()) - ->scheduledBeforeDate($endRange->toDateTimeString()); + ->scheduledAfterDate( $startRange->toDateTimeString() ) + ->scheduledBeforeDate( $endRange->toDateTimeString() ); /** * This means we have some valid transactions * that needs to be executed at the moment. */ - if ($query->count() > 0) { - $query->get()->each(function (Transaction $transaction) { - ExecuteDelayedTransactionJob::dispatch($transaction); - }); + if ( $query->count() > 0 ) { + $query->get()->each( function ( Transaction $transaction ) { + ExecuteDelayedTransactionJob::dispatch( $transaction ); + } ); } } - public function failed(Throwable $exception) + public function failed( Throwable $exception ) { - Log::error($exception->getMessage()); + Log::error( $exception->getMessage() ); } } diff --git a/app/Jobs/EnsureCombinedProductHistoryExistsJob.php b/app/Jobs/EnsureCombinedProductHistoryExistsJob.php index 81b3b6909..16374b6b0 100644 --- a/app/Jobs/EnsureCombinedProductHistoryExistsJob.php +++ b/app/Jobs/EnsureCombinedProductHistoryExistsJob.php @@ -26,20 +26,20 @@ public function __construct() /** * Execute the job. */ - public function handle(DateService $dateService): void + public function handle( DateService $dateService ): void { - $now = $dateService->now()->clone()->startOfDay()->format('Y-m-d'); + $now = $dateService->now()->clone()->startOfDay()->format( 'Y-m-d' ); // retreive the first ProductHistory that was created during that day using $now - $productHistoryCombined = ProductHistoryCombined::where('created_at', '>', $now)->first(); + $productHistoryCombined = ProductHistoryCombined::where( 'created_at', '>', $now )->first(); - if (! $productHistoryCombined instanceof ProductHistoryCombined) { + if ( ! $productHistoryCombined instanceof ProductHistoryCombined ) { // retrieve products with stock enabled by chunk of 20 and dispatch the job ProcessProductHistoryCombinedByChunkJob $delay = 10; - Product::withStockEnabled()->chunk(20, function ($products) use (&$delay) { - ProcessProductHistoryCombinedByChunkJob::dispatch($products)->delay(now()->addSeconds($delay)); + Product::withStockEnabled()->chunk( 20, function ( $products ) use ( &$delay ) { + ProcessProductHistoryCombinedByChunkJob::dispatch( $products )->delay( now()->addSeconds( $delay ) ); $delay += 10; - }); + } ); } } } diff --git a/app/Jobs/ExecuteDelayedTransactionJob.php b/app/Jobs/ExecuteDelayedTransactionJob.php index 390dee2b6..1a0a27e6e 100644 --- a/app/Jobs/ExecuteDelayedTransactionJob.php +++ b/app/Jobs/ExecuteDelayedTransactionJob.php @@ -23,7 +23,7 @@ class ExecuteDelayedTransactionJob implements ShouldQueue * * @return void */ - public function __construct(public Transaction $transaction) + public function __construct( public Transaction $transaction ) { $this->prepareSerialization(); } @@ -33,14 +33,14 @@ public function __construct(public Transaction $transaction) * * @return void */ - public function handle(TransactionService $transactionService, NotificationService $notificationService, DateService $dateService) + public function handle( TransactionService $transactionService, NotificationService $notificationService, DateService $dateService ) { - $transactionService->triggerTransaction($this->transaction); + $transactionService->triggerTransaction( $this->transaction ); - $notificationService->create([ - 'title' => __('Scheduled Transactions'), - 'description' => sprintf(__('the transaction "%s" was executed as scheduled on %s.'), $this->transaction->name, $dateService->getNowFormatted()), - 'url' => ns()->route('ns.dashboard.transactions.history', [ 'transaction' => $this->transaction->id ]), - ])->dispatchForGroup([ Role::namespace(Role::ADMIN), Role::namespace(Role::STOREADMIN) ]); + $notificationService->create( [ + 'title' => __( 'Scheduled Transactions' ), + 'description' => sprintf( __( 'the transaction "%s" was executed as scheduled on %s.' ), $this->transaction->name, $dateService->getNowFormatted() ), + 'url' => ns()->route( 'ns.dashboard.transactions.history', [ 'transaction' => $this->transaction->id ] ), + ] )->dispatchForGroup( [ Role::namespace( Role::ADMIN ), Role::namespace( Role::STOREADMIN ) ] ); } } diff --git a/app/Jobs/ExecuteReccuringTransactionsJob.php b/app/Jobs/ExecuteReccuringTransactionsJob.php index 8c6b1c00c..e0f25a7ec 100644 --- a/app/Jobs/ExecuteReccuringTransactionsJob.php +++ b/app/Jobs/ExecuteReccuringTransactionsJob.php @@ -28,7 +28,7 @@ public function __construct() * * @return void */ - public function handle(TransactionService $transactionService) + public function handle( TransactionService $transactionService ) { $transactionService->handleRecurringTransactions(); } diff --git a/app/Jobs/ExpenseHandlePaymentStatusJob.php b/app/Jobs/ExpenseHandlePaymentStatusJob.php index 9be1a0fd7..67813e7d2 100644 --- a/app/Jobs/ExpenseHandlePaymentStatusJob.php +++ b/app/Jobs/ExpenseHandlePaymentStatusJob.php @@ -19,7 +19,7 @@ class ExpenseHandlePaymentStatusJob implements ShouldQueue * * @return void */ - public function __construct(public Order $order, public string $previous, public string $new) + public function __construct( public Order $order, public string $previous, public string $new ) { $this->prepareSerialization(); } @@ -29,7 +29,7 @@ public function __construct(public Order $order, public string $previous, public * * @return void */ - public function handle(TransactionService $transactionService) + public function handle( TransactionService $transactionService ) { $transactionService->handlePaymentStatus( order: $this->order, diff --git a/app/Jobs/HandleStockAdjustmentJob.php b/app/Jobs/HandleStockAdjustmentJob.php index eb658f070..9d8a92f97 100644 --- a/app/Jobs/HandleStockAdjustmentJob.php +++ b/app/Jobs/HandleStockAdjustmentJob.php @@ -19,7 +19,7 @@ class HandleStockAdjustmentJob implements ShouldQueue * * @return void */ - public function __construct(public ProductHistory $history) + public function __construct( public ProductHistory $history ) { $this->prepareSerialization(); } @@ -29,8 +29,8 @@ public function __construct(public ProductHistory $history) * * @return void */ - public function handle(ReportService $reportService) + public function handle( ReportService $reportService ) { - $reportService->handleStockAdjustment($this->history); + $reportService->handleStockAdjustment( $this->history ); } } diff --git a/app/Jobs/IncreaseCashierStatsJob.php b/app/Jobs/IncreaseCashierStatsJob.php index 724179587..982de4013 100644 --- a/app/Jobs/IncreaseCashierStatsJob.php +++ b/app/Jobs/IncreaseCashierStatsJob.php @@ -18,7 +18,7 @@ class IncreaseCashierStatsJob implements ShouldQueue * * @return void */ - public function __construct(public Order $order) + public function __construct( public Order $order ) { $this->prepareSerialization(); } @@ -30,7 +30,7 @@ public function __construct(public Order $order) */ public function handle() { - if ($this->order->payment_status === Order::PAYMENT_PAID) { + if ( $this->order->payment_status === Order::PAYMENT_PAID ) { $this->order->user->total_sales = $this->order->user->total_sales + $this->order->total; $this->order->user->total_sales_count = $this->order->user->total_sales_count + 1; $this->order->user->save(); diff --git a/app/Jobs/InitializeDailyDayReportsJob.php b/app/Jobs/InitializeDailyDayReportsJob.php index 9d14a4439..d185b81d6 100644 --- a/app/Jobs/InitializeDailyDayReportsJob.php +++ b/app/Jobs/InitializeDailyDayReportsJob.php @@ -38,9 +38,9 @@ public function handle() * created entity on the system */ $user = User::first(); - $date = Carbon::parse($user->created_at)->endOfDay(); + $date = Carbon::parse( $user->created_at )->endOfDay(); - while (! $date->notEqualTo(ns()->date->endOfDay())) { + while ( ! $date->notEqualTo( ns()->date->endOfDay() ) ) { $this->reportService->computeDayReport( $date->copy()->startOfday()->toDateTimeString(), $date->copy()->endOfDay()->toDateTimeString() diff --git a/app/Jobs/InitializeDailyReportJob.php b/app/Jobs/InitializeDailyReportJob.php index f19df9c31..a8a16e05c 100644 --- a/app/Jobs/InitializeDailyReportJob.php +++ b/app/Jobs/InitializeDailyReportJob.php @@ -29,7 +29,7 @@ public function __construct() * * @return void */ - public function handle(ReportService $reportService) + public function handle( ReportService $reportService ) { $reportService->computeDayReport(); } diff --git a/app/Jobs/Middleware/UnserializeMiddleware.php b/app/Jobs/Middleware/UnserializeMiddleware.php index 345625fa5..a5c83f054 100644 --- a/app/Jobs/Middleware/UnserializeMiddleware.php +++ b/app/Jobs/Middleware/UnserializeMiddleware.php @@ -6,10 +6,10 @@ class UnserializeMiddleware { - public function handle($job, $next) + public function handle( $job, $next ) { - JobAfterUnserializeEvent::dispatch($job); + JobAfterUnserializeEvent::dispatch( $job ); - return $next($job); + return $next( $job ); } } diff --git a/app/Jobs/ProcessAccountingRecordFromSale.php b/app/Jobs/ProcessAccountingRecordFromSale.php index 3880d01bc..a67ce4293 100644 --- a/app/Jobs/ProcessAccountingRecordFromSale.php +++ b/app/Jobs/ProcessAccountingRecordFromSale.php @@ -19,7 +19,7 @@ class ProcessAccountingRecordFromSale implements ShouldQueue * * @return void */ - public function __construct(public Order $order) + public function __construct( public Order $order ) { $this->prepareSerialization(); } @@ -29,8 +29,8 @@ public function __construct(public Order $order) * * @return void */ - public function handle(TransactionService $transactionService) + public function handle( TransactionService $transactionService ) { - $transactionService->handleCreatedOrder($this->order); + $transactionService->handleCreatedOrder( $this->order ); } } diff --git a/app/Jobs/ProcessCashRegisterHistoryJob.php b/app/Jobs/ProcessCashRegisterHistoryJob.php index f4f7c1223..352737bbe 100644 --- a/app/Jobs/ProcessCashRegisterHistoryJob.php +++ b/app/Jobs/ProcessCashRegisterHistoryJob.php @@ -19,7 +19,7 @@ class ProcessCashRegisterHistoryJob implements ShouldQueue * * @return void */ - public function __construct(public Order $order) + public function __construct( public Order $order ) { // } @@ -29,13 +29,13 @@ public function __construct(public Order $order) * * @return void */ - public function handle(CashRegistersService $cashRegistersService) + public function handle( CashRegistersService $cashRegistersService ) { /** * If the payment status changed from * supported payment status to a "Paid" status. */ - if ($this->order->register_id !== null && $this->order->payment_status === Order::PAYMENT_PAID) { + if ( $this->order->register_id !== null && $this->order->payment_status === Order::PAYMENT_PAID ) { $cashRegistersService->recordCashRegisterHistorySale( order: $this->order ); diff --git a/app/Jobs/ProcessCustomerOwedAndRewardsJob.php b/app/Jobs/ProcessCustomerOwedAndRewardsJob.php index 7a189ce34..f5858ccc9 100644 --- a/app/Jobs/ProcessCustomerOwedAndRewardsJob.php +++ b/app/Jobs/ProcessCustomerOwedAndRewardsJob.php @@ -20,7 +20,7 @@ class ProcessCustomerOwedAndRewardsJob implements ShouldQueue * * @return void */ - public function __construct(public Order $order) + public function __construct( public Order $order ) { $this->prepareSerialization(); } @@ -30,14 +30,14 @@ public function __construct(public Order $order) * * @return void */ - public function handle(CustomerService $customerService) + public function handle( CustomerService $customerService ) { - $this->order->load('customer'); + $this->order->load( 'customer' ); - if ($this->order->customer instanceof Customer) { - $customerService->updateCustomerOwedAmount($this->order->customer); - $customerService->computeReward($this->order); - $customerService->increaseCustomerPurchase($this->order); + if ( $this->order->customer instanceof Customer ) { + $customerService->updateCustomerOwedAmount( $this->order->customer ); + $customerService->computeReward( $this->order ); + $customerService->increaseCustomerPurchase( $this->order ); } } } diff --git a/app/Jobs/ProcessProductHistoryCombinedByChunkJob.php b/app/Jobs/ProcessProductHistoryCombinedByChunkJob.php index 0b2110a80..73296ef0a 100644 --- a/app/Jobs/ProcessProductHistoryCombinedByChunkJob.php +++ b/app/Jobs/ProcessProductHistoryCombinedByChunkJob.php @@ -18,7 +18,7 @@ class ProcessProductHistoryCombinedByChunkJob implements ShouldQueue /** * Create a new job instance. */ - public function __construct(public $products) + public function __construct( public $products ) { // } @@ -26,24 +26,24 @@ public function __construct(public $products) /** * Execute the job. */ - public function handle(ReportService $reportService): void + public function handle( ReportService $reportService ): void { - $this->products->each(function ($product) use ($reportService) { + $this->products->each( function ( $product ) use ( $reportService ) { // retreive the unit quantity for this product - $unitQuantities = ProductUnitQuantity::where('product_id', $product->id) + $unitQuantities = ProductUnitQuantity::where( 'product_id', $product->id ) ->get(); - $unitQuantities->each(function ($unitQuantity) use ($reportService, $product) { - $lastProductHistory = ProductHistory::where('product_id', $product->id) - ->where('unit_id', $unitQuantity->unit_id) - ->orderBy('id', 'desc') + $unitQuantities->each( function ( $unitQuantity ) use ( $reportService, $product ) { + $lastProductHistory = ProductHistory::where( 'product_id', $product->id ) + ->where( 'unit_id', $unitQuantity->unit_id ) + ->orderBy( 'id', 'desc' ) ->first(); - if ($lastProductHistory instanceof ProductHistory) { - $reportService->prepareProductHistoryCombinedHistory($lastProductHistory) + if ( $lastProductHistory instanceof ProductHistory ) { + $reportService->prepareProductHistoryCombinedHistory( $lastProductHistory ) ->save(); } - }); - }); + } ); + } ); } } diff --git a/app/Jobs/ProcessTransactionJob.php b/app/Jobs/ProcessTransactionJob.php index 408797383..bb598d8f3 100644 --- a/app/Jobs/ProcessTransactionJob.php +++ b/app/Jobs/ProcessTransactionJob.php @@ -21,7 +21,7 @@ class ProcessTransactionJob implements ShouldQueue * * @return void */ - public function __construct(public Transaction $transaction) + public function __construct( public Transaction $transaction ) { $this->prepareSerialization(); } @@ -31,27 +31,27 @@ public function __construct(public Transaction $transaction) * * @return void */ - public function handle(TransactionService $transactionService, DateService $dateService) + public function handle( TransactionService $transactionService, DateService $dateService ) { - switch ($this->transaction->type) { + switch ( $this->transaction->type ) { case Transaction::TYPE_SCHEDULED: - $this->handleScheduledTransaction($transactionService, $dateService); + $this->handleScheduledTransaction( $transactionService, $dateService ); break; case Transaction::TYPE_DIRECT: - $this->handleDirectTransaction($transactionService, $dateService); + $this->handleDirectTransaction( $transactionService, $dateService ); break; } } - public function handleScheduledTransaction(TransactionService $transactionService, DateService $dateService) + public function handleScheduledTransaction( TransactionService $transactionService, DateService $dateService ) { - if (Carbon::parse($this->transaction->scheduled_date)->lessThan($dateService->toDateTimeString())) { - $transactionService->triggerTransaction($this->transaction); + if ( Carbon::parse( $this->transaction->scheduled_date )->lessThan( $dateService->toDateTimeString() ) ) { + $transactionService->triggerTransaction( $this->transaction ); } } - public function handleDirectTransaction(TransactionService $transactionService, DateService $dateService) + public function handleDirectTransaction( TransactionService $transactionService, DateService $dateService ) { - $transactionService->triggerTransaction($this->transaction); + $transactionService->triggerTransaction( $this->transaction ); } } diff --git a/app/Jobs/ProcurementRefreshJob.php b/app/Jobs/ProcurementRefreshJob.php index fb9c623a7..6357ebdbc 100644 --- a/app/Jobs/ProcurementRefreshJob.php +++ b/app/Jobs/ProcurementRefreshJob.php @@ -26,7 +26,7 @@ class ProcurementRefreshJob implements ShouldQueue * * @return void */ - public function __construct(Procurement $procurement) + public function __construct( Procurement $procurement ) { $this->procurement = $procurement; } @@ -36,21 +36,21 @@ public function __construct(Procurement $procurement) * * @return void */ - public function handle(ProcurementService $procurementService, NotificationService $notificationService) + public function handle( ProcurementService $procurementService, NotificationService $notificationService ) { - $procurementService->refresh($this->procurement); + $procurementService->refresh( $this->procurement ); - $notificationService->create([ - 'title' => __('Procurement Refreshed'), + $notificationService->create( [ + 'title' => __( 'Procurement Refreshed' ), 'description' => sprintf( - __('The procurement "%s" has been successfully refreshed.'), + __( 'The procurement "%s" has been successfully refreshed.' ), $this->procurement->name ), 'identifier' => 'ns.procurement-refresh' . $this->procurement->id, - 'url' => ns()->route('ns.procurement-invoice', [ 'procurement' => $this->procurement->id ]), - ])->dispatchForGroup([ + 'url' => ns()->route( 'ns.procurement-invoice', [ 'procurement' => $this->procurement->id ] ), + ] )->dispatchForGroup( [ Role::ADMIN, Role::STOREADMIN, - ]); + ] ); } } diff --git a/app/Jobs/RecomputeCashFlowForDate.php b/app/Jobs/RecomputeCashFlowForDate.php index 47153c088..946b8d6d4 100644 --- a/app/Jobs/RecomputeCashFlowForDate.php +++ b/app/Jobs/RecomputeCashFlowForDate.php @@ -21,7 +21,7 @@ class RecomputeCashFlowForDate implements ShouldQueue * * @return void */ - public function __construct(public $fromDate, public $toDate) + public function __construct( public $fromDate, public $toDate ) { // } @@ -31,22 +31,22 @@ public function __construct(public $fromDate, public $toDate) * * @return void */ - public function handle(ReportService $reportService) + public function handle( ReportService $reportService ) { $wasLoggedIn = true; - if (! Auth::check()) { + if ( ! Auth::check() ) { $wasLoggedIn = false; - $user = Role::namespace('admin')->users->first(); - Auth::login($user); + $user = Role::namespace( 'admin' )->users->first(); + Auth::login( $user ); } - $this->fromDate = Carbon::parse($this->fromDate); - $this->toDate = Carbon::parse($this->toDate); + $this->fromDate = Carbon::parse( $this->fromDate ); + $this->toDate = Carbon::parse( $this->toDate ); - $reportService->recomputeTransactions($this->fromDate, $this->toDate); + $reportService->recomputeTransactions( $this->fromDate, $this->toDate ); - if (! $wasLoggedIn) { + if ( ! $wasLoggedIn ) { Auth::logout(); } } diff --git a/app/Jobs/RecordRegisterHistoryUsingPaymentStatusJob.php b/app/Jobs/RecordRegisterHistoryUsingPaymentStatusJob.php index 565875adf..271bdf69e 100644 --- a/app/Jobs/RecordRegisterHistoryUsingPaymentStatusJob.php +++ b/app/Jobs/RecordRegisterHistoryUsingPaymentStatusJob.php @@ -19,7 +19,7 @@ class RecordRegisterHistoryUsingPaymentStatusJob implements ShouldQueue * * @return void */ - public function __construct(public Order $order, public string $previous, public string $new) + public function __construct( public Order $order, public string $previous, public string $new ) { // } @@ -31,7 +31,7 @@ public function __construct(public Order $order, public string $previous, public * * @return void */ - public function handle(CashRegistersService $cashRegistersService) + public function handle( CashRegistersService $cashRegistersService ) { $cashRegistersService->createRegisterHistoryUsingPaymentStatus( order: $this->order, diff --git a/app/Jobs/RecordTransactionForShippingJob.php b/app/Jobs/RecordTransactionForShippingJob.php index b7960383f..9fb8b48f0 100644 --- a/app/Jobs/RecordTransactionForShippingJob.php +++ b/app/Jobs/RecordTransactionForShippingJob.php @@ -18,7 +18,7 @@ class RecordTransactionForShippingJob implements ShouldQueue /** * Create a new job instance. */ - public function __construct(public Order $order, public OrderRefund $orderRefund) + public function __construct( public Order $order, public OrderRefund $orderRefund ) { // } @@ -26,7 +26,7 @@ public function __construct(public Order $order, public OrderRefund $orderRefund /** * Execute the job. */ - public function handle(TransactionService $transactionService): void + public function handle( TransactionService $transactionService ): void { $transactionService->createTransactionFormRefundedOrderShipping( order: $this->order, diff --git a/app/Jobs/ReduceCashierStatsFromRefundJob.php b/app/Jobs/ReduceCashierStatsFromRefundJob.php index 71c67297f..38b92a496 100644 --- a/app/Jobs/ReduceCashierStatsFromRefundJob.php +++ b/app/Jobs/ReduceCashierStatsFromRefundJob.php @@ -19,7 +19,7 @@ class ReduceCashierStatsFromRefundJob implements ShouldQueue * * @return void */ - public function __construct(public Order $order, public OrderRefund $orderRefund) + public function __construct( public Order $order, public OrderRefund $orderRefund ) { $this->prepareSerialization(); } diff --git a/app/Jobs/RefreshOrderJob.php b/app/Jobs/RefreshOrderJob.php index c3f329ea0..e18096197 100644 --- a/app/Jobs/RefreshOrderJob.php +++ b/app/Jobs/RefreshOrderJob.php @@ -19,7 +19,7 @@ class RefreshOrderJob implements ShouldQueue * * @return void */ - public function __construct(public Order $order) + public function __construct( public Order $order ) { $this->prepareSerialization(); } @@ -29,8 +29,8 @@ public function __construct(public Order $order) * * @return void */ - public function handle(OrdersService $ordersService) + public function handle( OrdersService $ordersService ) { - $ordersService->refreshOrder($this->order); + $ordersService->refreshOrder( $this->order ); } } diff --git a/app/Jobs/RefreshReportJob.php b/app/Jobs/RefreshReportJob.php index 92a691309..f786ea7fe 100644 --- a/app/Jobs/RefreshReportJob.php +++ b/app/Jobs/RefreshReportJob.php @@ -19,7 +19,7 @@ class RefreshReportJob implements ShouldQueue * * @return void */ - public function __construct(public $date) + public function __construct( public $date ) { $this->prepareSerialization(); } @@ -29,9 +29,9 @@ public function __construct(public $date) * * @return void */ - public function handle(ReportService $reportService) + public function handle( ReportService $reportService ) { - $date = Carbon::parse($this->date); + $date = Carbon::parse( $this->date ); $reportService->computeDayReport( dateStart: $date->startOfDay()->toDateTimeString(), diff --git a/app/Jobs/ResolveInstalmentJob.php b/app/Jobs/ResolveInstalmentJob.php index 467b3457b..95c7d6d3e 100644 --- a/app/Jobs/ResolveInstalmentJob.php +++ b/app/Jobs/ResolveInstalmentJob.php @@ -19,7 +19,7 @@ class ResolveInstalmentJob implements ShouldQueue * * @return void */ - public function __construct(public Order $order) + public function __construct( public Order $order ) { // } @@ -29,8 +29,8 @@ public function __construct(public Order $order) * * @return void */ - public function handle(OrdersService $ordersService) + public function handle( OrdersService $ordersService ) { - $ordersService->resolveInstalments($this->order); + $ordersService->resolveInstalments( $this->order ); } } diff --git a/app/Jobs/StockProcurementJob.php b/app/Jobs/StockProcurementJob.php index 1855fb260..4a2ed5ec9 100644 --- a/app/Jobs/StockProcurementJob.php +++ b/app/Jobs/StockProcurementJob.php @@ -33,7 +33,7 @@ public function __construct() * * @return void */ - public function handle(ProcurementService $procurementService) + public function handle( ProcurementService $procurementService ) { $procurementService->stockAwaitingProcurements(); } diff --git a/app/Jobs/TestWorkerJob.php b/app/Jobs/TestWorkerJob.php index 4ca68b8a5..091b64da5 100644 --- a/app/Jobs/TestWorkerJob.php +++ b/app/Jobs/TestWorkerJob.php @@ -21,7 +21,7 @@ class TestWorkerJob implements ShouldQueue * * @return void */ - public function __construct($notification_id) + public function __construct( $notification_id ) { $this->notification_id = $notification_id; } @@ -31,11 +31,11 @@ public function __construct($notification_id) * * @return void */ - public function handle(Options $options, NotificationService $notification) + public function handle( Options $options, NotificationService $notification ) { - if ($options->get('ns_workers_enabled') === 'await_confirm') { - $options->set('ns_workers_enabled', 'yes'); - $notification->deleteHavingIdentifier($this->notification_id); + if ( $options->get( 'ns_workers_enabled' ) === 'await_confirm' ) { + $options->set( 'ns_workers_enabled', 'yes' ); + $notification->deleteHavingIdentifier( $this->notification_id ); } } } diff --git a/app/Jobs/TrackLaidAwayOrdersJob.php b/app/Jobs/TrackLaidAwayOrdersJob.php index f55a04b52..d9f350e3a 100644 --- a/app/Jobs/TrackLaidAwayOrdersJob.php +++ b/app/Jobs/TrackLaidAwayOrdersJob.php @@ -29,7 +29,7 @@ public function __construct() * * @return void */ - public function handle(OrdersService $ordersService) + public function handle( OrdersService $ordersService ) { /** * for order thas has already expired diff --git a/app/Jobs/TrackOrderCouponsJob.php b/app/Jobs/TrackOrderCouponsJob.php index b71a9e63e..d48673128 100644 --- a/app/Jobs/TrackOrderCouponsJob.php +++ b/app/Jobs/TrackOrderCouponsJob.php @@ -19,7 +19,7 @@ class TrackOrderCouponsJob implements ShouldQueue * * @return void */ - public function __construct(public Order $order) + public function __construct( public Order $order ) { $this->prepareSerialization(); } @@ -29,8 +29,8 @@ public function __construct(public Order $order) * * @return void */ - public function handle(OrdersService $ordersService) + public function handle( OrdersService $ordersService ) { - $ordersService->trackOrderCoupons($this->order); + $ordersService->trackOrderCoupons( $this->order ); } } diff --git a/app/Jobs/UncountDeletedOrderForCashierJob.php b/app/Jobs/UncountDeletedOrderForCashierJob.php index 4f1887021..1357cecc9 100644 --- a/app/Jobs/UncountDeletedOrderForCashierJob.php +++ b/app/Jobs/UncountDeletedOrderForCashierJob.php @@ -19,7 +19,7 @@ class UncountDeletedOrderForCashierJob implements ShouldQueue * * @return void */ - public function __construct(public $order) + public function __construct( public $order ) { $this->prepareSerialization(); } @@ -31,8 +31,8 @@ public function __construct(public $order) */ public function handle() { - if ($this->order->payment_status === Order::PAYMENT_PAID) { - $user = User::find($this->order->author); + if ( $this->order->payment_status === Order::PAYMENT_PAID ) { + $user = User::find( $this->order->author ); $user->total_sales = $user->total_sales - $this->order->total; $user->total_sales_count = $user->total_sales_count - 1; $user->save(); diff --git a/app/Jobs/UncountDeletedOrderForCustomerJob.php b/app/Jobs/UncountDeletedOrderForCustomerJob.php index 979c3e61a..f6badb2ec 100644 --- a/app/Jobs/UncountDeletedOrderForCustomerJob.php +++ b/app/Jobs/UncountDeletedOrderForCustomerJob.php @@ -18,7 +18,7 @@ class UncountDeletedOrderForCustomerJob implements ShouldQueue * * @return void */ - public function __construct(public $order) + public function __construct( public $order ) { $this->prepareSerialization(); } @@ -30,9 +30,9 @@ public function __construct(public $order) */ public function handle() { - $customer = Customer::find($this->order->customer_id); + $customer = Customer::find( $this->order->customer_id ); - switch ($this->order->payment_status) { + switch ( $this->order->payment_status ) { case 'paid': $customer->purchases_amount -= $this->order->total; break; diff --git a/app/Jobs/UpdateCashRegisterBalanceFromHistoryJob.php b/app/Jobs/UpdateCashRegisterBalanceFromHistoryJob.php index a79953dc3..31785ebca 100644 --- a/app/Jobs/UpdateCashRegisterBalanceFromHistoryJob.php +++ b/app/Jobs/UpdateCashRegisterBalanceFromHistoryJob.php @@ -19,7 +19,7 @@ class UpdateCashRegisterBalanceFromHistoryJob implements ShouldQueue * * @return void */ - public function __construct(public RegisterHistory $registerHistory) + public function __construct( public RegisterHistory $registerHistory ) { // } @@ -29,8 +29,8 @@ public function __construct(public RegisterHistory $registerHistory) * * @return void */ - public function handle(CashRegistersService $cashRegistersService) + public function handle( CashRegistersService $cashRegistersService ) { - $cashRegistersService->updateRegisterBalance($this->registerHistory); + $cashRegistersService->updateRegisterBalance( $this->registerHistory ); } } diff --git a/app/Listeners/AfterCustomerAccountHistoryCreatedEventListener.php b/app/Listeners/AfterCustomerAccountHistoryCreatedEventListener.php index 88a824b12..0ebf495f9 100644 --- a/app/Listeners/AfterCustomerAccountHistoryCreatedEventListener.php +++ b/app/Listeners/AfterCustomerAccountHistoryCreatedEventListener.php @@ -25,9 +25,9 @@ public function __construct( * * @return void */ - public function handle(AfterCustomerAccountHistoryCreatedEvent $event) + public function handle( AfterCustomerAccountHistoryCreatedEvent $event ) { - $this->transactionService->handleCustomerCredit($event->customerAccount); - $this->customerService->updateCustomerAccount($event->customerAccount); + $this->transactionService->handleCustomerCredit( $event->customerAccount ); + $this->customerService->updateCustomerAccount( $event->customerAccount ); } } diff --git a/app/Listeners/CashRegisterHistoryAfterCreatedEventListener.php b/app/Listeners/CashRegisterHistoryAfterCreatedEventListener.php index 74126df94..e0773bdc4 100644 --- a/app/Listeners/CashRegisterHistoryAfterCreatedEventListener.php +++ b/app/Listeners/CashRegisterHistoryAfterCreatedEventListener.php @@ -20,8 +20,8 @@ public function __construct() /** * Handle the event. */ - public function handle(CashRegisterHistoryAfterCreatedEvent $event): void + public function handle( CashRegisterHistoryAfterCreatedEvent $event ): void { - UpdateCashRegisterBalanceFromHistoryJob::dispatch($event->registerHistory); + UpdateCashRegisterBalanceFromHistoryJob::dispatch( $event->registerHistory ); } } diff --git a/app/Listeners/CustomerBeforeDeletedEventListener.php b/app/Listeners/CustomerBeforeDeletedEventListener.php index 2613abf60..039f167c0 100644 --- a/app/Listeners/CustomerBeforeDeletedEventListener.php +++ b/app/Listeners/CustomerBeforeDeletedEventListener.php @@ -19,8 +19,8 @@ public function __construct( /** * Handle the event. */ - public function handle(CustomerBeforeDeletedEvent $event): void + public function handle( CustomerBeforeDeletedEvent $event ): void { - $this->customerService->deleteCustomerAttributes($event->customer->id); + $this->customerService->deleteCustomerAttributes( $event->customer->id ); } } diff --git a/app/Listeners/CustomerRewardAfterCreatedEventListener.php b/app/Listeners/CustomerRewardAfterCreatedEventListener.php index 27869e1e1..65cb6277e 100644 --- a/app/Listeners/CustomerRewardAfterCreatedEventListener.php +++ b/app/Listeners/CustomerRewardAfterCreatedEventListener.php @@ -18,8 +18,8 @@ public function __construct() /** * Handle the event. */ - public function handle(CustomerRewardAfterCreatedEvent $event) + public function handle( CustomerRewardAfterCreatedEvent $event ) { - ApplyCustomerRewardJob::dispatch($event->customer, $event->customerReward, $event->reward); + ApplyCustomerRewardJob::dispatch( $event->customer, $event->customerReward, $event->reward ); } } diff --git a/app/Listeners/DashboardDayAfterCreatedEventListener.php b/app/Listeners/DashboardDayAfterCreatedEventListener.php index 1a66b8f14..a5bf0efb5 100644 --- a/app/Listeners/DashboardDayAfterCreatedEventListener.php +++ b/app/Listeners/DashboardDayAfterCreatedEventListener.php @@ -20,10 +20,10 @@ public function __construct() /** * Handle the event. * - * @param object $event + * @param object $event * @return void */ - public function handle(DashboardDayAfterCreatedEvent $event) + public function handle( DashboardDayAfterCreatedEvent $event ) { ComputeDashboardMonthReportJob::dispatch(); } diff --git a/app/Listeners/DashboardDayAfterUpdatedEventListener.php b/app/Listeners/DashboardDayAfterUpdatedEventListener.php index cebd6b795..b6deab38f 100644 --- a/app/Listeners/DashboardDayAfterUpdatedEventListener.php +++ b/app/Listeners/DashboardDayAfterUpdatedEventListener.php @@ -20,12 +20,12 @@ public function __construct() /** * Handle the event. * - * @param object $event + * @param object $event * @return void */ - public function handle(DashboardDayAfterUpdatedEvent $event) + public function handle( DashboardDayAfterUpdatedEvent $event ) { ComputeDashboardMonthReportJob::dispatch() - ->delay(now()->addSeconds(10)); + ->delay( now()->addSeconds( 10 ) ); } } diff --git a/app/Listeners/ModulesBeforeRemovedEventListener.php b/app/Listeners/ModulesBeforeRemovedEventListener.php index 160e482b0..ec00451cc 100644 --- a/app/Listeners/ModulesBeforeRemovedEventListener.php +++ b/app/Listeners/ModulesBeforeRemovedEventListener.php @@ -19,10 +19,10 @@ public function __construct() /** * Handle the event. * - * @param object $event + * @param object $event * @return void */ - public function handle(ModulesBeforeRemovedEvent $event) + public function handle( ModulesBeforeRemovedEvent $event ) { // } diff --git a/app/Listeners/NotificationListener.php b/app/Listeners/NotificationListener.php index 56b4cd7c7..cfc6f1b16 100644 --- a/app/Listeners/NotificationListener.php +++ b/app/Listeners/NotificationListener.php @@ -16,7 +16,7 @@ public function __construct() // } - public function handle(NotificationDeletedEvent $event) + public function handle( NotificationDeletedEvent $event ) { $event->notification->delete(); } diff --git a/app/Listeners/OrderAfterCreatedEventListener.php b/app/Listeners/OrderAfterCreatedEventListener.php index 91b1ea6b6..7e75315b6 100644 --- a/app/Listeners/OrderAfterCreatedEventListener.php +++ b/app/Listeners/OrderAfterCreatedEventListener.php @@ -27,19 +27,19 @@ public function __construct() /** * Handle the event. * - * @param object $event + * @param object $event * @return void */ - public function handle(OrderAfterCreatedEvent $event) + public function handle( OrderAfterCreatedEvent $event ) { - Bus::chain([ - new ProcessCashRegisterHistoryJob($event->order), - new IncreaseCashierStatsJob($event->order), - new ProcessCustomerOwedAndRewardsJob($event->order), - new TrackOrderCouponsJob($event->order), - new ResolveInstalmentJob($event->order), - new ProcessAccountingRecordFromSale($event->order), + Bus::chain( [ + new ProcessCashRegisterHistoryJob( $event->order ), + new IncreaseCashierStatsJob( $event->order ), + new ProcessCustomerOwedAndRewardsJob( $event->order ), + new TrackOrderCouponsJob( $event->order ), + new ResolveInstalmentJob( $event->order ), + new ProcessAccountingRecordFromSale( $event->order ), new ComputeDayReportJob, - ])->dispatch(); + ] )->dispatch(); } } diff --git a/app/Listeners/OrderAfterDeletedEventListener.php b/app/Listeners/OrderAfterDeletedEventListener.php index 41c3ac776..21d671580 100644 --- a/app/Listeners/OrderAfterDeletedEventListener.php +++ b/app/Listeners/OrderAfterDeletedEventListener.php @@ -28,23 +28,23 @@ public function __construct( * * @return void */ - public function handle(OrderAfterDeletedEvent $event) + public function handle( OrderAfterDeletedEvent $event ) { - UncountDeletedOrderForCashierJob::dispatch($event->order); - UncountDeletedOrderForCustomerJob::dispatch($event->order); + UncountDeletedOrderForCashierJob::dispatch( $event->order ); + UncountDeletedOrderForCustomerJob::dispatch( $event->order ); - $register = Register::find($event->order->register_id); + $register = Register::find( $event->order->register_id ); - if ($register instanceof Register) { - if (in_array($event->order->payment_status, [ Order::PAYMENT_PAID, Order::PAYMENT_PARTIALLY ])) { - $this->cashRegistersService->saleDelete($register, $event->order->total, __('The transaction was deleted.')); + if ( $register instanceof Register ) { + if ( in_array( $event->order->payment_status, [ Order::PAYMENT_PAID, Order::PAYMENT_PARTIALLY ] ) ) { + $this->cashRegistersService->saleDelete( $register, $event->order->total, __( 'The transaction was deleted.' ) ); } - if ($event->order->payment_status === Order::PAYMENT_PARTIALLY) { - $this->cashRegistersService->saleDelete($register, $event->order->tendered, __('The transaction was deleted.')); + if ( $event->order->payment_status === Order::PAYMENT_PARTIALLY ) { + $this->cashRegistersService->saleDelete( $register, $event->order->tendered, __( 'The transaction was deleted.' ) ); } } - RefreshReportJob::dispatch($event->order->updated_at); + RefreshReportJob::dispatch( $event->order->updated_at ); } } diff --git a/app/Listeners/OrderAfterPaymentStatusChangedEventListener.php b/app/Listeners/OrderAfterPaymentStatusChangedEventListener.php index 19ca2aaac..5823a079b 100644 --- a/app/Listeners/OrderAfterPaymentStatusChangedEventListener.php +++ b/app/Listeners/OrderAfterPaymentStatusChangedEventListener.php @@ -24,10 +24,10 @@ public function __construct() * * @return void */ - public function handle(OrderAfterPaymentStatusChangedEvent $event) + public function handle( OrderAfterPaymentStatusChangedEvent $event ) { - ExpenseHandlePaymentStatusJob::dispatch($event->order, $event->previous, $event->new); - ProcessCustomerOwedAndRewardsJob::dispatch($event->order); - RecordRegisterHistoryUsingPaymentStatusJob::dispatch($event->order, $event->previous, $event->new); + ExpenseHandlePaymentStatusJob::dispatch( $event->order, $event->previous, $event->new ); + ProcessCustomerOwedAndRewardsJob::dispatch( $event->order ); + RecordRegisterHistoryUsingPaymentStatusJob::dispatch( $event->order, $event->previous, $event->new ); } } diff --git a/app/Listeners/OrderAfterProductRefundedEventListener.php b/app/Listeners/OrderAfterProductRefundedEventListener.php index 15194e02f..a7713fd54 100644 --- a/app/Listeners/OrderAfterProductRefundedEventListener.php +++ b/app/Listeners/OrderAfterProductRefundedEventListener.php @@ -24,15 +24,15 @@ public function __construct() * * @return void */ - public function handle(OrderAfterProductRefundedEvent $event) + public function handle( OrderAfterProductRefundedEvent $event ) { - Bus::chain([ + Bus::chain( [ // new RefreshOrderJob($event->order), this already called on OrderAfterRefundEvent new CreateExpenseFromRefundJob( order: $event->order, orderProduct: $event->orderProduct, orderProductRefund: $event->orderProductRefund ), - ])->dispatch(); + ] )->dispatch(); } } diff --git a/app/Listeners/OrderAfterRefundedEventListener.php b/app/Listeners/OrderAfterRefundedEventListener.php index c5859a00f..b75ad610b 100644 --- a/app/Listeners/OrderAfterRefundedEventListener.php +++ b/app/Listeners/OrderAfterRefundedEventListener.php @@ -26,13 +26,13 @@ public function __construct() * * @return void */ - public function handle(OrderAfterRefundedEvent $event) + public function handle( OrderAfterRefundedEvent $event ) { - Bus::chain([ - new RefreshOrderJob($event->order), - new CreateTransactionFromRefundedOrder($event->orderRefund), - new ReduceCashierStatsFromRefundJob($event->order, $event->orderRefund), - new DecreaseCustomerPurchasesJob($event->order->customer, $event->orderRefund->total), - ])->dispatch(); + Bus::chain( [ + new RefreshOrderJob( $event->order ), + new CreateTransactionFromRefundedOrder( $event->orderRefund ), + new ReduceCashierStatsFromRefundJob( $event->order, $event->orderRefund ), + new DecreaseCustomerPurchasesJob( $event->order->customer, $event->orderRefund->total ), + ] )->dispatch(); } } diff --git a/app/Listeners/OrderAfterUpdatedEventListener.php b/app/Listeners/OrderAfterUpdatedEventListener.php index 38d5fa0fc..f03063fb0 100644 --- a/app/Listeners/OrderAfterUpdatedEventListener.php +++ b/app/Listeners/OrderAfterUpdatedEventListener.php @@ -29,16 +29,16 @@ public function __construct() * * @return void */ - public function handle(OrderAfterUpdatedEvent $event) + public function handle( OrderAfterUpdatedEvent $event ) { - Bus::chain([ - new ProcessCashRegisterHistoryJob($event->order), - new IncreaseCashierStatsJob($event->order), - new ProcessCustomerOwedAndRewardsJob($event->order), - new TrackOrderCouponsJob($event->order), - new ResolveInstalmentJob($event->order), - new ProcessAccountingRecordFromSale($event->order), + Bus::chain( [ + new ProcessCashRegisterHistoryJob( $event->order ), + new IncreaseCashierStatsJob( $event->order ), + new ProcessCustomerOwedAndRewardsJob( $event->order ), + new TrackOrderCouponsJob( $event->order ), + new ResolveInstalmentJob( $event->order ), + new ProcessAccountingRecordFromSale( $event->order ), new ComputeDayReportJob, - ])->dispatch(); + ] )->dispatch(); } } diff --git a/app/Listeners/OrderBeforeDeleteEventListener.php b/app/Listeners/OrderBeforeDeleteEventListener.php index e85e478b3..b1a2a768f 100644 --- a/app/Listeners/OrderBeforeDeleteEventListener.php +++ b/app/Listeners/OrderBeforeDeleteEventListener.php @@ -21,7 +21,7 @@ public function __construct() * * @return void */ - public function handle(OrderBeforeDeleteEvent $event) + public function handle( OrderBeforeDeleteEvent $event ) { // ... } diff --git a/app/Listeners/OrderBeforePaymentCreatedEventListener.php b/app/Listeners/OrderBeforePaymentCreatedEventListener.php index 957aa6808..390cee9c4 100644 --- a/app/Listeners/OrderBeforePaymentCreatedEventListener.php +++ b/app/Listeners/OrderBeforePaymentCreatedEventListener.php @@ -22,8 +22,8 @@ public function __construct() * * @return void */ - public function handle(OrderBeforePaymentCreatedEvent $event) + public function handle( OrderBeforePaymentCreatedEvent $event ) { - CheckCustomerAccountJob::dispatchSync($event->customer, $event->payment); + CheckCustomerAccountJob::dispatchSync( $event->customer, $event->payment ); } } diff --git a/app/Listeners/OrderCouponAfterCreatedEventListener.php b/app/Listeners/OrderCouponAfterCreatedEventListener.php index 3889c4889..81a7a700c 100644 --- a/app/Listeners/OrderCouponAfterCreatedEventListener.php +++ b/app/Listeners/OrderCouponAfterCreatedEventListener.php @@ -19,7 +19,7 @@ public function __construct() /** * Handle the event. */ - public function handle(OrderCouponAfterCreatedEvent $event) + public function handle( OrderCouponAfterCreatedEvent $event ) { // ... } diff --git a/app/Listeners/OrderCouponBeforeCreatedEventListener.php b/app/Listeners/OrderCouponBeforeCreatedEventListener.php index c1a1c07c0..62357d0ba 100644 --- a/app/Listeners/OrderCouponBeforeCreatedEventListener.php +++ b/app/Listeners/OrderCouponBeforeCreatedEventListener.php @@ -12,7 +12,7 @@ class OrderCouponBeforeCreatedEventListener * * @return void */ - public function __construct(private CustomerService $customerService) + public function __construct( private CustomerService $customerService ) { // } @@ -20,7 +20,7 @@ public function __construct(private CustomerService $customerService) /** * Handle the event. */ - public function handle(OrderCouponBeforeCreatedEvent $event) + public function handle( OrderCouponBeforeCreatedEvent $event ) { $this->customerService->assignCouponUsage( coupon: $event->coupon, diff --git a/app/Listeners/OrderPaymentAfterCreatedEventListener.php b/app/Listeners/OrderPaymentAfterCreatedEventListener.php index 90e594f7d..372d6e64c 100644 --- a/app/Listeners/OrderPaymentAfterCreatedEventListener.php +++ b/app/Listeners/OrderPaymentAfterCreatedEventListener.php @@ -19,7 +19,7 @@ public function __construct() /** * Handle the event. */ - public function handle(OrderAfterPaymentCreatedEvent $event) + public function handle( OrderAfterPaymentCreatedEvent $event ) { // ... } diff --git a/app/Listeners/OrderRefundPaymentAfterCreatedEventListener.php b/app/Listeners/OrderRefundPaymentAfterCreatedEventListener.php index 6451a404e..6557d82c9 100644 --- a/app/Listeners/OrderRefundPaymentAfterCreatedEventListener.php +++ b/app/Listeners/OrderRefundPaymentAfterCreatedEventListener.php @@ -19,10 +19,10 @@ public function __construct() /** * Handle the event. * - * @param object $event + * @param object $event * @return void */ - public function handle(OrderRefundPaymentAfterCreatedEvent $event) + public function handle( OrderRefundPaymentAfterCreatedEvent $event ) { /** * the refund can't always be made from the register where the order diff --git a/app/Listeners/OrderVoidedEventListener.php b/app/Listeners/OrderVoidedEventListener.php index 639f9474a..5fadc0fdf 100644 --- a/app/Listeners/OrderVoidedEventListener.php +++ b/app/Listeners/OrderVoidedEventListener.php @@ -21,9 +21,9 @@ public function __construct() /** * Handle the event. */ - public function handle(OrderVoidedEvent $event) + public function handle( OrderVoidedEvent $event ) { - UncountDeletedOrderForCashierJob::dispatch($event->order); - UncountDeletedOrderForCustomerJob::dispatch($event->order); + UncountDeletedOrderForCashierJob::dispatch( $event->order ); + UncountDeletedOrderForCustomerJob::dispatch( $event->order ); } } diff --git a/app/Listeners/PasswordAfterRecoveredEventListener.php b/app/Listeners/PasswordAfterRecoveredEventListener.php index 802e6c8be..90cd2c47a 100644 --- a/app/Listeners/PasswordAfterRecoveredEventListener.php +++ b/app/Listeners/PasswordAfterRecoveredEventListener.php @@ -21,12 +21,12 @@ public function __construct() /** * Handle the event. * - * @param object $event + * @param object $event * @return void */ - public function handle(PasswordAfterRecoveredEvent $event) + public function handle( PasswordAfterRecoveredEvent $event ) { - Mail::to($event->user->email) - ->queue(new PasswordRecoveredMail($event->user)); + Mail::to( $event->user->email ) + ->queue( new PasswordRecoveredMail( $event->user ) ); } } diff --git a/app/Listeners/ProcurementAfterCreateEventListener.php b/app/Listeners/ProcurementAfterCreateEventListener.php index 56ade41b4..3cca49407 100644 --- a/app/Listeners/ProcurementAfterCreateEventListener.php +++ b/app/Listeners/ProcurementAfterCreateEventListener.php @@ -25,14 +25,14 @@ public function __construct( /** * Handle the event. * - * @param object $event + * @param object $event * @return void */ - public function handle(ProcurementAfterCreateEvent $event) + public function handle( ProcurementAfterCreateEvent $event ) { - $this->procurementService->refresh($event->procurement); - $this->providerService->computeSummary($event->procurement->provider); - $this->procurementService->handleProcurement($event->procurement); - $this->transactionService->handleProcurementTransaction($event->procurement); + $this->procurementService->refresh( $event->procurement ); + $this->providerService->computeSummary( $event->procurement->provider ); + $this->procurementService->handleProcurement( $event->procurement ); + $this->transactionService->handleProcurementTransaction( $event->procurement ); } } diff --git a/app/Listeners/ProcurementAfterDeleteEventListener.php b/app/Listeners/ProcurementAfterDeleteEventListener.php index e34847fdb..25a10414a 100644 --- a/app/Listeners/ProcurementAfterDeleteEventListener.php +++ b/app/Listeners/ProcurementAfterDeleteEventListener.php @@ -26,10 +26,10 @@ public function __construct( * * @return void */ - public function handle(ProcurementAfterDeleteEvent $event) + public function handle( ProcurementAfterDeleteEvent $event ) { $this->providerService->computeSummary( - Provider::find($event->procurement_data[ 'provider_id' ]) + Provider::find( $event->procurement_data[ 'provider_id' ] ) ); } } diff --git a/app/Listeners/ProcurementAfterDeleteProductEventListener.php b/app/Listeners/ProcurementAfterDeleteProductEventListener.php index 79f4c203f..dcec42c03 100644 --- a/app/Listeners/ProcurementAfterDeleteProductEventListener.php +++ b/app/Listeners/ProcurementAfterDeleteProductEventListener.php @@ -25,8 +25,8 @@ public function __construct( * * @return void */ - public function handle(ProcurementAfterDeleteProductEvent $event) + public function handle( ProcurementAfterDeleteProductEvent $event ) { - $this->procurementService->refresh($event->procurement); + $this->procurementService->refresh( $event->procurement ); } } diff --git a/app/Listeners/ProcurementAfterUpdateEventListener.php b/app/Listeners/ProcurementAfterUpdateEventListener.php index 8ae7eace6..5b8b34b73 100644 --- a/app/Listeners/ProcurementAfterUpdateEventListener.php +++ b/app/Listeners/ProcurementAfterUpdateEventListener.php @@ -27,11 +27,11 @@ public function __construct( * * @return void */ - public function handle(ProcurementAfterUpdateEvent $event) + public function handle( ProcurementAfterUpdateEvent $event ) { - $this->procurementService->refresh($event->procurement); - $this->providerService->computeSummary($event->procurement->provider); - $this->procurementService->handleProcurement($event->procurement); - $this->transactionService->handleProcurementTransaction($event->procurement); + $this->procurementService->refresh( $event->procurement ); + $this->providerService->computeSummary( $event->procurement->provider ); + $this->procurementService->handleProcurement( $event->procurement ); + $this->transactionService->handleProcurementTransaction( $event->procurement ); } } diff --git a/app/Listeners/ProcurementAfterUpdateProductEventListener.php b/app/Listeners/ProcurementAfterUpdateProductEventListener.php index bde7ec502..87f021d35 100644 --- a/app/Listeners/ProcurementAfterUpdateProductEventListener.php +++ b/app/Listeners/ProcurementAfterUpdateProductEventListener.php @@ -25,9 +25,9 @@ public function __construct( * * @return void */ - public function handle(ProcurementAfterUpdateProductEvent $event) + public function handle( ProcurementAfterUpdateProductEvent $event ) { - $this->procurementService->procurementStockEntry($event->product, $event->fields); - $this->procurementService->refresh($event->product->procurement); + $this->procurementService->procurementStockEntry( $event->product, $event->fields ); + $this->procurementService->refresh( $event->product->procurement ); } } diff --git a/app/Listeners/ProcurementBeforeDeleteEventListener.php b/app/Listeners/ProcurementBeforeDeleteEventListener.php index 2c0460e52..462153520 100644 --- a/app/Listeners/ProcurementBeforeDeleteEventListener.php +++ b/app/Listeners/ProcurementBeforeDeleteEventListener.php @@ -25,9 +25,9 @@ public function __construct( * * @return void */ - public function handle(ProcurementBeforeDeleteEvent $event) + public function handle( ProcurementBeforeDeleteEvent $event ) { - $this->procurementService->attemptProductsStockRemoval($event->procurement); - $this->procurementService->deleteProcurementProducts($event->procurement); + $this->procurementService->attemptProductsStockRemoval( $event->procurement ); + $this->procurementService->deleteProcurementProducts( $event->procurement ); } } diff --git a/app/Listeners/ProcurementBeforeDeleteProductEventListener.php b/app/Listeners/ProcurementBeforeDeleteProductEventListener.php index d1ba8fff6..81090381b 100644 --- a/app/Listeners/ProcurementBeforeDeleteProductEventListener.php +++ b/app/Listeners/ProcurementBeforeDeleteProductEventListener.php @@ -25,7 +25,7 @@ public function __construct( * * @return void */ - public function handle(ProcurementBeforeDeleteProductEvent $event) + public function handle( ProcurementBeforeDeleteProductEvent $event ) { // ... } diff --git a/app/Listeners/ProcurementBeforeUpdateEventListener.php b/app/Listeners/ProcurementBeforeUpdateEventListener.php index ad9c1eb43..6a22dcee3 100644 --- a/app/Listeners/ProcurementBeforeUpdateEventListener.php +++ b/app/Listeners/ProcurementBeforeUpdateEventListener.php @@ -25,8 +25,8 @@ public function __construct( * * @return void */ - public function handle(ProcurementBeforeUpdateEvent $event) + public function handle( ProcurementBeforeUpdateEvent $event ) { - $this->providerService->cancelPaymentForProcurement($event->procurement); + $this->providerService->cancelPaymentForProcurement( $event->procurement ); } } diff --git a/app/Listeners/ProductAfterCreatedEventListener.php b/app/Listeners/ProductAfterCreatedEventListener.php index 350f1f43e..c67f36bb4 100644 --- a/app/Listeners/ProductAfterCreatedEventListener.php +++ b/app/Listeners/ProductAfterCreatedEventListener.php @@ -28,10 +28,10 @@ public function __construct( * * @return void */ - public function handle(ProductAfterCreatedEvent $event) + public function handle( ProductAfterCreatedEvent $event ) { - $this->productService->generateProductBarcode($event->product); + $this->productService->generateProductBarcode( $event->product ); - ComputeCategoryProductsJob::dispatch($event->product->category); + ComputeCategoryProductsJob::dispatch( $event->product->category ); } } diff --git a/app/Listeners/ProductAfterDeleteEventListener.php b/app/Listeners/ProductAfterDeleteEventListener.php index c013bc7fc..d929772ec 100644 --- a/app/Listeners/ProductAfterDeleteEventListener.php +++ b/app/Listeners/ProductAfterDeleteEventListener.php @@ -25,8 +25,8 @@ public function __construct( * * @return void */ - public function handle(ProductAfterDeleteEvent $event) + public function handle( ProductAfterDeleteEvent $event ) { - $this->productCategoryService->computeProducts($event->product->category); + $this->productCategoryService->computeProducts( $event->product->category ); } } diff --git a/app/Listeners/ProductAfterStockAdjustmentEventListener.php b/app/Listeners/ProductAfterStockAdjustmentEventListener.php index 5103bc904..c25a3d70f 100644 --- a/app/Listeners/ProductAfterStockAdjustmentEventListener.php +++ b/app/Listeners/ProductAfterStockAdjustmentEventListener.php @@ -22,8 +22,8 @@ public function __construct() * * @return void */ - public function handle(ProductAfterStockAdjustmentEvent $event) + public function handle( ProductAfterStockAdjustmentEvent $event ) { - HandleStockAdjustmentJob::dispatch($event->history); + HandleStockAdjustmentJob::dispatch( $event->history ); } } diff --git a/app/Listeners/ProductAfterUpdatedEventListener.php b/app/Listeners/ProductAfterUpdatedEventListener.php index 9ac137aa5..a78a0593c 100644 --- a/app/Listeners/ProductAfterUpdatedEventListener.php +++ b/app/Listeners/ProductAfterUpdatedEventListener.php @@ -25,19 +25,19 @@ public function __construct( * * @return void */ - public function handle(ProductAfterUpdatedEvent $event) + public function handle( ProductAfterUpdatedEvent $event ) { - $this->productService->generateProductBarcode($event->product); + $this->productService->generateProductBarcode( $event->product ); /** * We'll pull the category stored * and check if it's different from the new defined category. * This will help computing total items for the old category. */ - $oldCategoryId = session()->pull('product_category_id'); + $oldCategoryId = session()->pull( 'product_category_id' ); - if ($oldCategoryId !== $event->product->category->id && $oldCategoryId !== null ) { - ComputeCategoryProductsJob::dispatch(ProductCategory::find($oldCategoryId)); + if ( $oldCategoryId !== $event->product->category->id ) { + ComputeCategoryProductsJob::dispatch( ProductCategory::find( $oldCategoryId ) ); } /** @@ -45,6 +45,6 @@ public function handle(ProductAfterUpdatedEvent $event) * for the newly defined category. If it's the same category, * then a new count will only be made. */ - ComputeCategoryProductsJob::dispatch($event->product->category); + ComputeCategoryProductsJob::dispatch( $event->product->category ); } } diff --git a/app/Listeners/ProductBeforeDeleteEventListener.php b/app/Listeners/ProductBeforeDeleteEventListener.php index b4a30ed87..943da5d47 100644 --- a/app/Listeners/ProductBeforeDeleteEventListener.php +++ b/app/Listeners/ProductBeforeDeleteEventListener.php @@ -21,11 +21,11 @@ public function __construct( /** * Handle the event. * - * @param \App\Events\ProductBeforeDeleteProductEvent $event + * @param \App\Events\ProductBeforeDeleteProductEvent $event * @return void */ - public function handle(ProductBeforeDeleteEvent $event) + public function handle( ProductBeforeDeleteEvent $event ) { - $this->productService->deleteProductRelations($event->product); + $this->productService->deleteProductRelations( $event->product ); } } diff --git a/app/Listeners/ProductBeforeUpdatedEventListener.php b/app/Listeners/ProductBeforeUpdatedEventListener.php index 22156ba71..0fc6d0f92 100644 --- a/app/Listeners/ProductBeforeUpdatedEventListener.php +++ b/app/Listeners/ProductBeforeUpdatedEventListener.php @@ -17,10 +17,10 @@ public function __construct() /** * Handle the event. */ - public function handle(ProductBeforeUpdatedEvent $event): void + public function handle( ProductBeforeUpdatedEvent $event ): void { $original = $event->product->getOriginal(); - session()->put('product_category_id', $original[ 'category_id' ]); + session()->put( 'product_category_id', $original[ 'category_id' ] ); } } diff --git a/app/Listeners/ProductHistoryAfterCreatedEventListener.php b/app/Listeners/ProductHistoryAfterCreatedEventListener.php index a3a05e098..b3d2dee22 100644 --- a/app/Listeners/ProductHistoryAfterCreatedEventListener.php +++ b/app/Listeners/ProductHistoryAfterCreatedEventListener.php @@ -21,9 +21,9 @@ public function __construct( /** * Handle the event. */ - public function handle(ProductHistoryAfterCreatedEvent $event): void + public function handle( ProductHistoryAfterCreatedEvent $event ): void { - $this->productService->computeCogsIfNecessary($event->productHistory); - $this->reportService->combineProductHistory($event->productHistory); + $this->productService->computeCogsIfNecessary( $event->productHistory ); + $this->reportService->combineProductHistory( $event->productHistory ); } } diff --git a/app/Listeners/ProductHistoryAfterUpdatedEventListener.php b/app/Listeners/ProductHistoryAfterUpdatedEventListener.php index 3149907be..af232890e 100644 --- a/app/Listeners/ProductHistoryAfterUpdatedEventListener.php +++ b/app/Listeners/ProductHistoryAfterUpdatedEventListener.php @@ -19,8 +19,8 @@ public function __construct( /** * Handle the event. */ - public function handle(ProductHistoryAfterUpdatedEvent $event): void + public function handle( ProductHistoryAfterUpdatedEvent $event ): void { - $this->productService->computeCogsIfNecessary($event->productHistory); + $this->productService->computeCogsIfNecessary( $event->productHistory ); } } diff --git a/app/Listeners/ResponseReadyEventListener.php b/app/Listeners/ResponseReadyEventListener.php index 6d2baae16..463f8e13f 100644 --- a/app/Listeners/ResponseReadyEventListener.php +++ b/app/Listeners/ResponseReadyEventListener.php @@ -21,19 +21,19 @@ public function __construct() /** * Handle the event. * - * @param object $event + * @param object $event * @return void */ - public function handle(ResponseReadyEvent $event) + public function handle( ResponseReadyEvent $event ) { - Cache::forget('ns-core-installed'); + Cache::forget( 'ns-core-installed' ); /** * if the user is authenticated * we'll clear all cached permissions */ - if (Auth::check()) { - Cache::forget('ns-all-permissions-' . Auth::id()); + if ( Auth::check() ) { + Cache::forget( 'ns-all-permissions-' . Auth::id() ); } } } diff --git a/app/Listeners/SettingsListener.php b/app/Listeners/SettingsListener.php index c76e2e07c..c8a3dcd9b 100644 --- a/app/Listeners/SettingsListener.php +++ b/app/Listeners/SettingsListener.php @@ -27,25 +27,25 @@ public function __construct( /** * Handle the event. * - * @param object $event + * @param object $event * @return void */ - public function handle(SettingsSavedEvent $event) + public function handle( SettingsSavedEvent $event ) { - $options = app()->make(Options::class); + $options = app()->make( Options::class ); - if ($options->get('ns_workers_enabled') === 'await_confirm') { + if ( $options->get( 'ns_workers_enabled' ) === 'await_confirm' ) { $notification_id = NotificationsEnum::NSWORKERDISABLED; - TestWorkerJob::dispatch($notification_id) - ->delay(now()); + TestWorkerJob::dispatch( $notification_id ) + ->delay( now() ); - $this->notificationService->create([ - 'title' => __('Workers Aren\'t Running'), - 'description' => __('The workers has been enabled, but it looks like NexoPOS can\'t run workers. This usually happen if supervisor is not configured correctly.'), + $this->notificationService->create( [ + 'title' => __( 'Workers Aren\'t Running' ), + 'description' => __( 'The workers has been enabled, but it looks like NexoPOS can\'t run workers. This usually happen if supervisor is not configured correctly.' ), 'url' => 'https://laravel.com/docs/8.x/queues#supervisor-configuration', 'identifier' => $notification_id, - ])->dispatchForGroup(Role::namespace('admin')); + ] )->dispatchForGroup( Role::namespace( 'admin' ) ); } } } diff --git a/app/Listeners/TransactionAfterCreatedEventListener.php b/app/Listeners/TransactionAfterCreatedEventListener.php index 3e4b37134..34e096759 100644 --- a/app/Listeners/TransactionAfterCreatedEventListener.php +++ b/app/Listeners/TransactionAfterCreatedEventListener.php @@ -20,8 +20,8 @@ public function __construct() /** * Handle the event. */ - public function handle(TransactionAfterCreatedEvent $event) + public function handle( TransactionAfterCreatedEvent $event ) { - ProcessTransactionJob::dispatch($event->transaction); + ProcessTransactionJob::dispatch( $event->transaction ); } } diff --git a/app/Listeners/TransactionAfterUpdatedEventListener.php b/app/Listeners/TransactionAfterUpdatedEventListener.php index f07dcb349..266f085a4 100644 --- a/app/Listeners/TransactionAfterUpdatedEventListener.php +++ b/app/Listeners/TransactionAfterUpdatedEventListener.php @@ -20,8 +20,8 @@ public function __construct() /** * Handle the event. */ - public function handle(TransactionAfterUpdatedEvent $event) + public function handle( TransactionAfterUpdatedEvent $event ) { - ProcessTransactionJob::dispatch($event->transaction); + ProcessTransactionJob::dispatch( $event->transaction ); } } diff --git a/app/Listeners/TransactionsHistoryAfterCreatedEventListener.php b/app/Listeners/TransactionsHistoryAfterCreatedEventListener.php index 50f67736a..c124af95c 100644 --- a/app/Listeners/TransactionsHistoryAfterCreatedEventListener.php +++ b/app/Listeners/TransactionsHistoryAfterCreatedEventListener.php @@ -20,8 +20,8 @@ public function __construct() /** * Handle the event. */ - public function handle(TransactionsHistoryAfterCreatedEvent $event) + public function handle( TransactionsHistoryAfterCreatedEvent $event ) { - RefreshReportJob::dispatch($event->transactionHistory->created_at); + RefreshReportJob::dispatch( $event->transactionHistory->created_at ); } } diff --git a/app/Listeners/TransactionsHistoryAfterDeletedEventListener.php b/app/Listeners/TransactionsHistoryAfterDeletedEventListener.php index f57bfe3ef..881927c89 100644 --- a/app/Listeners/TransactionsHistoryAfterDeletedEventListener.php +++ b/app/Listeners/TransactionsHistoryAfterDeletedEventListener.php @@ -20,8 +20,8 @@ public function __construct() /** * Handle the event. */ - public function handle(TransactionsHistoryAfterDeletedEvent $event) + public function handle( TransactionsHistoryAfterDeletedEvent $event ) { - RefreshReportJob::dispatch($event->transaction->created_at); + RefreshReportJob::dispatch( $event->transaction->created_at ); } } diff --git a/app/Listeners/TransactionsHistoryBeforeDeletedEventListener.php b/app/Listeners/TransactionsHistoryBeforeDeletedEventListener.php index cdfd64261..1bc19c2b9 100644 --- a/app/Listeners/TransactionsHistoryBeforeDeletedEventListener.php +++ b/app/Listeners/TransactionsHistoryBeforeDeletedEventListener.php @@ -19,7 +19,7 @@ public function __construct() /** * Handle the event. */ - public function handle(TransactionsHistoryBeforeDeleteEvent $event) + public function handle( TransactionsHistoryBeforeDeleteEvent $event ) { // ... } diff --git a/app/Listeners/UserAfterActivationSuccessfulEventListener.php b/app/Listeners/UserAfterActivationSuccessfulEventListener.php index b1568724e..6f5276c5d 100644 --- a/app/Listeners/UserAfterActivationSuccessfulEventListener.php +++ b/app/Listeners/UserAfterActivationSuccessfulEventListener.php @@ -21,15 +21,15 @@ public function __construct( /** * Handle the event. * - * @param object $event + * @param object $event * @return void */ - public function handle(UserAfterActivationSuccessfulEvent $event) + public function handle( UserAfterActivationSuccessfulEvent $event ) { /** * For every user who's activated, we will assign * default widget to their account. */ - $this->widgetService->addDefaultWidgetsToAreas($event->user); + $this->widgetService->addDefaultWidgetsToAreas( $event->user ); } } diff --git a/app/Mail/ActivateYourAccountMail.php b/app/Mail/ActivateYourAccountMail.php index a284d4a27..9eb738934 100644 --- a/app/Mail/ActivateYourAccountMail.php +++ b/app/Mail/ActivateYourAccountMail.php @@ -18,7 +18,7 @@ class ActivateYourAccountMail extends Mailable * * @return void */ - public function __construct(User $user) + public function __construct( User $user ) { $this->user = $user; } @@ -31,8 +31,8 @@ public function __construct(User $user) public function build() { return $this - ->subject(ns()->option->get('ns_notifications_registrations_user_activate_title', __('[NexoPOS] Activate Your Account'))) - ->from(ns()->option->get('ns_store_email', 'notifications@nexopos.com')) - ->markdown('mails/activate-your-account-mail'); + ->subject( ns()->option->get( 'ns_notifications_registrations_user_activate_title', __( '[NexoPOS] Activate Your Account' ) ) ) + ->from( ns()->option->get( 'ns_store_email', 'notifications@nexopos.com' ) ) + ->markdown( 'mails/activate-your-account-mail' ); } } diff --git a/app/Mail/PasswordRecoveredMail.php b/app/Mail/PasswordRecoveredMail.php index bd5de5507..fe2e69db1 100644 --- a/app/Mail/PasswordRecoveredMail.php +++ b/app/Mail/PasswordRecoveredMail.php @@ -18,7 +18,7 @@ class PasswordRecoveredMail extends Mailable * * @return void */ - public function __construct(User $user) + public function __construct( User $user ) { $this->user = $user; } @@ -31,8 +31,8 @@ public function __construct(User $user) public function build() { return $this - ->from(ns()->option->get('ns_store_email', 'contact@nexopos.com'), ns()->option->get('ns_store_name', env('APP_NAME'))) - ->to($this->user->email) - ->markdown('mails/password-recovered-mail'); + ->from( ns()->option->get( 'ns_store_email', 'contact@nexopos.com' ), ns()->option->get( 'ns_store_name', env( 'APP_NAME' ) ) ) + ->to( $this->user->email ) + ->markdown( 'mails/password-recovered-mail' ); } } diff --git a/app/Mail/ResetPasswordMail.php b/app/Mail/ResetPasswordMail.php index 19409aabe..2350f1067 100644 --- a/app/Mail/ResetPasswordMail.php +++ b/app/Mail/ResetPasswordMail.php @@ -18,7 +18,7 @@ class ResetPasswordMail extends Mailable * * @return void */ - public function __construct(User $user) + public function __construct( User $user ) { $this->user = $user; } @@ -31,8 +31,8 @@ public function __construct(User $user) public function build() { return $this - ->from(ns()->option->get('ns_store_email', 'contact@nexopos.com'), ns()->option->get('ns_store_name', env('APP_NAME'))) - ->to($this->user->email) - ->markdown('mails/reset-password-mail'); + ->from( ns()->option->get( 'ns_store_email', 'contact@nexopos.com' ), ns()->option->get( 'ns_store_name', env( 'APP_NAME' ) ) ) + ->to( $this->user->email ) + ->markdown( 'mails/reset-password-mail' ); } } diff --git a/app/Mail/UserRegisteredMail.php b/app/Mail/UserRegisteredMail.php index fb99a31ca..47ce8171a 100644 --- a/app/Mail/UserRegisteredMail.php +++ b/app/Mail/UserRegisteredMail.php @@ -20,7 +20,7 @@ class UserRegisteredMail extends Mailable * * @return void */ - public function __construct(User $admin, User $user) + public function __construct( User $admin, User $user ) { $this->admin = $admin; $this->user = $user; @@ -34,8 +34,8 @@ public function __construct(User $admin, User $user) public function build() { return $this - ->subject(ns()->option->get('ns_notifications_registrations_administrator_email_title', __('[NexoPOS] A New User Has Registered'))) - ->from(ns()->option->get('ns_store_email', 'notifications@nexopos.com')) - ->markdown('mails/user-registered-mail'); + ->subject( ns()->option->get( 'ns_notifications_registrations_administrator_email_title', __( '[NexoPOS] A New User Has Registered' ) ) ) + ->from( ns()->option->get( 'ns_store_email', 'notifications@nexopos.com' ) ) + ->markdown( 'mails/user-registered-mail' ); } } diff --git a/app/Mail/WelcomeMail.php b/app/Mail/WelcomeMail.php index 2cf408c9c..e568faa7f 100644 --- a/app/Mail/WelcomeMail.php +++ b/app/Mail/WelcomeMail.php @@ -18,7 +18,7 @@ class WelcomeMail extends Mailable * * @return void */ - public function __construct(User $user) + public function __construct( User $user ) { $this->user = $user; } @@ -31,8 +31,8 @@ public function __construct(User $user) public function build() { return $this - ->subject(ns()->option->get('ns_notifications_registrations_user_email_title', __('[NexoPOS] Your Account Has Been Created'))) - ->from(ns()->option->get('ns_store_email', 'notifications@nexopos.com')) - ->markdown('mails/welcome-mail'); + ->subject( ns()->option->get( 'ns_notifications_registrations_user_email_title', __( '[NexoPOS] Your Account Has Been Created' ) ) ) + ->from( ns()->option->get( 'ns_store_email', 'notifications@nexopos.com' ) ) + ->markdown( 'mails/welcome-mail' ); } } diff --git a/app/Models/Coupon.php b/app/Models/Coupon.php index 780ee055f..2af8d2aa7 100644 --- a/app/Models/Coupon.php +++ b/app/Models/Coupon.php @@ -5,18 +5,18 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property mixed $name - * @property mixed $code - * @property mixed $type - * @property float $discount_value + * @property int $id + * @property mixed $name + * @property mixed $code + * @property mixed $type + * @property float $discount_value * @property \Carbon\Carbon $valid_until - * @property float $minimum_cart_value - * @property float $maximum_cart_value + * @property float $minimum_cart_value + * @property float $maximum_cart_value * @property \Carbon\Carbon $valid_hours_start * @property \Carbon\Carbon $valid_hours_end - * @property float $limit_usage - * @property int $author + * @property float $limit_usage + * @property int $author * @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $updated_at */ @@ -30,9 +30,9 @@ class Coupon extends NsModel const TYPE_FLAT = 'flat_discount'; - public function scopeCode($query, $code) + public function scopeCode( $query, $code ) { - return $query->where('code', $code); + return $query->where( 'code', $code ); } public function customerCoupon() @@ -46,12 +46,12 @@ public function customerCoupon() public function categories() { - return $this->hasMany(CouponCategory::class); + return $this->hasMany( CouponCategory::class ); } public function products() { - return $this->hasMany(CouponProduct::class); + return $this->hasMany( CouponProduct::class ); } public function customers() diff --git a/app/Models/CouponCategory.php b/app/Models/CouponCategory.php index 76002e3e3..09e2fc847 100644 --- a/app/Models/CouponCategory.php +++ b/app/Models/CouponCategory.php @@ -18,11 +18,11 @@ class CouponCategory extends NsModel public function coupon() { - return $this->belongsTo(Coupon::class, 'coupon_id'); + return $this->belongsTo( Coupon::class, 'coupon_id' ); } public function category() { - return $this->belongsTo(ProductCategory::class, 'category_id'); + return $this->belongsTo( ProductCategory::class, 'category_id' ); } } diff --git a/app/Models/CouponCustomer.php b/app/Models/CouponCustomer.php index 76b9e147d..9efe165a3 100644 --- a/app/Models/CouponCustomer.php +++ b/app/Models/CouponCustomer.php @@ -20,11 +20,11 @@ class CouponCustomer extends Model public function coupon() { - return $this->belongsTo(Coupon::class); + return $this->belongsTo( Coupon::class ); } public function customer() { - return $this->hasOne(Customer::class); + return $this->hasOne( Customer::class ); } } diff --git a/app/Models/CouponCustomerGroup.php b/app/Models/CouponCustomerGroup.php index 80015ca36..7f109c8a9 100644 --- a/app/Models/CouponCustomerGroup.php +++ b/app/Models/CouponCustomerGroup.php @@ -20,11 +20,11 @@ class CouponCustomerGroup extends Model public function coupon() { - return $this->belongsTo(Coupon::class); + return $this->belongsTo( Coupon::class ); } public function group() { - return $this->hasOne(CustomerGroup::class); + return $this->hasOne( CustomerGroup::class ); } } diff --git a/app/Models/CouponProduct.php b/app/Models/CouponProduct.php index 11665e904..8462be65a 100644 --- a/app/Models/CouponProduct.php +++ b/app/Models/CouponProduct.php @@ -18,11 +18,11 @@ class CouponProduct extends NsModel public function coupon() { - return $this->belongsTo(Coupon::class); + return $this->belongsTo( Coupon::class ); } public function product() { - return $this->belongsTo(Product::class, 'product_id'); + return $this->belongsTo( Product::class, 'product_id' ); } } diff --git a/app/Models/Customer.php b/app/Models/Customer.php index 3962c66b6..da1d90458 100644 --- a/app/Models/Customer.php +++ b/app/Models/Customer.php @@ -41,15 +41,15 @@ class Customer extends UserScope protected static function booted() { - static::addGlobalScope('customers', function (Builder $builder) { - $role = DB::table('nexopos_roles')->where('namespace', Role::STORECUSTOMER)->first(); + static::addGlobalScope( 'customers', function ( Builder $builder ) { + $role = DB::table( 'nexopos_roles' )->where( 'namespace', Role::STORECUSTOMER )->first(); - $userRoleRelations = DB::table('nexopos_users_roles_relations') - ->where('role_id', $role->id) - ->get([ 'user_id', 'role_id' ]); + $userRoleRelations = DB::table( 'nexopos_users_roles_relations' ) + ->where( 'role_id', $role->id ) + ->get( [ 'user_id', 'role_id' ] ); - $builder->whereIn('id', $userRoleRelations->map(fn($role) => $role->user_id)->toArray()); - }); + $builder->whereIn( 'id', $userRoleRelations->map( fn( $role ) => $role->user_id )->toArray() ); + } ); } /** diff --git a/app/Models/CustomerAccountHistory.php b/app/Models/CustomerAccountHistory.php index 523009db9..d246425ad 100644 --- a/app/Models/CustomerAccountHistory.php +++ b/app/Models/CustomerAccountHistory.php @@ -5,12 +5,12 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id + * @property int $id * @property string $customer_id - * @property int $order_id - * @property float $amount + * @property int $order_id + * @property float $amount * @property string $operation - * @property int $author + * @property int $author * @property string $description */ class CustomerAccountHistory extends NsModel @@ -29,6 +29,6 @@ class CustomerAccountHistory extends NsModel public function customer() { - return $this->hasOne(Customer::class, 'id', 'customer_id'); + return $this->hasOne( Customer::class, 'id', 'customer_id' ); } } diff --git a/app/Models/CustomerAddress.php b/app/Models/CustomerAddress.php index 3472cbc57..a651953df 100644 --- a/app/Models/CustomerAddress.php +++ b/app/Models/CustomerAddress.php @@ -6,9 +6,9 @@ use Illuminate\Database\Eloquent\Model; /** - * @property int $id - * @property int $author - * @property string $uuid + * @property int $id + * @property int $author + * @property string $uuid * @property \Carbon\Carbon $updated_at */ class CustomerAddress extends NsModel @@ -24,12 +24,12 @@ class CustomerAddress extends NsModel */ public function groups() { - return $this->belongsTo(Customer::class, 'customer_id'); + return $this->belongsTo( Customer::class, 'customer_id' ); } - public function scopeFrom($query, $id, $type) + public function scopeFrom( $query, $id, $type ) { - return $query->where('customer_id', $id) - ->where('type', $type); + return $query->where( 'customer_id', $id ) + ->where( 'type', $type ); } } diff --git a/app/Models/CustomerBillingAddress.php b/app/Models/CustomerBillingAddress.php index 0b9e405e4..cc913f5c8 100644 --- a/app/Models/CustomerBillingAddress.php +++ b/app/Models/CustomerBillingAddress.php @@ -6,9 +6,9 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $author - * @property string $uuid + * @property int $id + * @property int $author + * @property string $uuid * @property \Carbon\Carbon $updated_at */ class CustomerBillingAddress extends CustomerAddress @@ -17,16 +17,16 @@ class CustomerBillingAddress extends CustomerAddress protected static function booted() { - static::addGlobalScope('type', function (Builder $builder) { - $builder->where('type', 'billing'); - }); + static::addGlobalScope( 'type', function ( Builder $builder ) { + $builder->where( 'type', 'billing' ); + } ); - static::creating(function ($address) { + static::creating( function ( $address ) { $address->type = 'billing'; - }); + } ); - static::updating(function ($address) { + static::updating( function ( $address ) { $address->type = 'billing'; - }); + } ); } } diff --git a/app/Models/CustomerCoupon.php b/app/Models/CustomerCoupon.php index e0434d8cd..13853bc42 100644 --- a/app/Models/CustomerCoupon.php +++ b/app/Models/CustomerCoupon.php @@ -10,11 +10,11 @@ * of this class which can there after be used by the customer. */ /** - * @property int $id - * @property string $code - * @property int $author + * @property int $id + * @property string $code + * @property int $author * @property \Carbon\Carbon $updated_at - * @property bool $active + * @property bool $active */ class CustomerCoupon extends NsModel { @@ -26,33 +26,33 @@ class CustomerCoupon extends NsModel 'active' => 'boolean', ]; - public function scopeActive($query) + public function scopeActive( $query ) { - return $query->where('active', true); + return $query->where( 'active', true ); } - public function scopeCode($query, $code) + public function scopeCode( $query, $code ) { - return $query->where('code', $code); + return $query->where( 'code', $code ); } - public function scopeCouponID($query, $couponID) + public function scopeCouponID( $query, $couponID ) { - return $query->where('coupon_id', $couponID); + return $query->where( 'coupon_id', $couponID ); } - public function scopeCustomer($query, $customer_id) + public function scopeCustomer( $query, $customer_id ) { - return $query->where('customer_id', $customer_id); + return $query->where( 'customer_id', $customer_id ); } public function coupon() { - return $this->hasOne(Coupon::class, 'id', 'coupon_id'); + return $this->hasOne( Coupon::class, 'id', 'coupon_id' ); } public function customer() { - return $this->belongsTo(Customer::class, 'customer_id', 'id'); + return $this->belongsTo( Customer::class, 'customer_id', 'id' ); } } diff --git a/app/Models/CustomerGroup.php b/app/Models/CustomerGroup.php index 78b283d9b..40fc68808 100644 --- a/app/Models/CustomerGroup.php +++ b/app/Models/CustomerGroup.php @@ -6,10 +6,10 @@ use Illuminate\Database\Eloquent\Model; /** - * @property int $id - * @property string $uuid - * @property string $description - * @property int $author + * @property int $id + * @property string $uuid + * @property string $description + * @property int $author * @property \Carbon\Carbon $updated_at */ class CustomerGroup extends NsModel @@ -25,11 +25,11 @@ class CustomerGroup extends NsModel */ public function customers() { - return $this->hasMany(Customer::class, 'group_id'); + return $this->hasMany( Customer::class, 'group_id' ); } public function reward() { - return $this->hasOne(RewardSystem::class, 'id', 'reward_system_id'); + return $this->hasOne( RewardSystem::class, 'id', 'reward_system_id' ); } } diff --git a/app/Models/CustomerReward.php b/app/Models/CustomerReward.php index aa62cbf80..9549d7487 100644 --- a/app/Models/CustomerReward.php +++ b/app/Models/CustomerReward.php @@ -5,10 +5,10 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $reward_id - * @property string $reward_name - * @property float $target + * @property int $id + * @property int $reward_id + * @property string $reward_name + * @property float $target * @property \Carbon\Carbon $updated_at */ class CustomerReward extends NsModel diff --git a/app/Models/CustomerShippingAddress.php b/app/Models/CustomerShippingAddress.php index 92c21009a..e558c31ee 100644 --- a/app/Models/CustomerShippingAddress.php +++ b/app/Models/CustomerShippingAddress.php @@ -6,9 +6,9 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $author - * @property string $uuid + * @property int $id + * @property int $author + * @property string $uuid * @property \Carbon\Carbon $updated_at */ class CustomerShippingAddress extends CustomerAddress @@ -17,16 +17,16 @@ class CustomerShippingAddress extends CustomerAddress protected static function booted() { - static::addGlobalScope('type', function (Builder $builder) { - $builder->where('type', 'shipping'); - }); + static::addGlobalScope( 'type', function ( Builder $builder ) { + $builder->where( 'type', 'shipping' ); + } ); - static::creating(function ($address) { + static::creating( function ( $address ) { $address->type = 'shipping'; - }); + } ); - static::updating(function ($address) { + static::updating( function ( $address ) { $address->type = 'shipping'; - }); + } ); } } diff --git a/app/Models/DashboardDay.php b/app/Models/DashboardDay.php index f5679c13c..88a0d23e1 100644 --- a/app/Models/DashboardDay.php +++ b/app/Models/DashboardDay.php @@ -9,9 +9,9 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property float $day_expenses - * @property int $day_of_year + * @property int $id + * @property float $day_expenses + * @property int $day_of_year * @property \Carbon\Carbon $range_ends */ class DashboardDay extends NsModel @@ -29,35 +29,35 @@ class DashboardDay extends NsModel 'updated' => DashboardDayAfterUpdatedEvent::class, ]; - public function scopeFrom($query, $param) + public function scopeFrom( $query, $param ) { - return $query->where('range_starts', '>=', $param); + return $query->where( 'range_starts', '>=', $param ); } - public function scopeTo($query, $param) + public function scopeTo( $query, $param ) { - return $query->where('range_ends', '<=', $param); + return $query->where( 'range_ends', '<=', $param ); } public static function forToday() { - $date = app()->make(DateService::class); + $date = app()->make( DateService::class ); - return DashboardDay::firstOrCreate([ + return DashboardDay::firstOrCreate( [ 'range_starts' => $date->copy()->startOfDay()->toDateTimeString(), 'range_ends' => $date->copy()->endOfDay()->toDateTimeString(), 'day_of_year' => $date->dayOfYear, - ]); + ] ); } - public static function forDayBefore($day): DashboardDay + public static function forDayBefore( $day ): DashboardDay { - $date = app()->make(DateService::class); - $startRange = $date->copy()->subDays($day)->startOfDay()->toDateTimeString(); - $endRange = $date->copy()->subDays($day)->endOfDay()->toDateTimeString(); + $date = app()->make( DateService::class ); + $startRange = $date->copy()->subDays( $day )->startOfDay()->toDateTimeString(); + $endRange = $date->copy()->subDays( $day )->endOfDay()->toDateTimeString(); - return DashboardDay::from($startRange) - ->to($endRange) + return DashboardDay::from( $startRange ) + ->to( $endRange ) ->first(); } @@ -68,14 +68,14 @@ public static function forDayBefore($day): DashboardDay * * @return DashboardDay */ - public static function forLastRecentDay(DashboardDay $day) + public static function forLastRecentDay( DashboardDay $day ) { - $date = Carbon::parse($day->range_starts)->subDay(); + $date = Carbon::parse( $day->range_starts )->subDay(); - return DashboardDay::firstOrCreate([ + return DashboardDay::firstOrCreate( [ 'range_starts' => $date->startOfDay()->toDateTimeString(), 'range_ends' => $date->endOfDay()->toDateTimeString(), 'day_of_year' => $date->dayOfYear, - ]); + ] ); } } diff --git a/app/Models/DashboardMonth.php b/app/Models/DashboardMonth.php index 5cdda2551..d5bd43f6d 100644 --- a/app/Models/DashboardMonth.php +++ b/app/Models/DashboardMonth.php @@ -6,9 +6,9 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property float $total_expenses - * @property int $month_of_year + * @property int $id + * @property float $total_expenses + * @property int $month_of_year * @property \Carbon\Carbon $updated_at */ class DashboardMonth extends NsModel @@ -24,13 +24,13 @@ class DashboardMonth extends NsModel 'updated' => DashboardMonthAfterUpdatedEvent::class, ]; - public function scopeFrom($query, $param) + public function scopeFrom( $query, $param ) { - return $query->where('range_starts', '>=', $param); + return $query->where( 'range_starts', '>=', $param ); } - public function scopeTo($query, $param) + public function scopeTo( $query, $param ) { - return $query->where('range_ends', '<=', $param); + return $query->where( 'range_ends', '<=', $param ); } } diff --git a/app/Models/Media.php b/app/Models/Media.php index 35634cf31..cf3e08d1f 100644 --- a/app/Models/Media.php +++ b/app/Models/Media.php @@ -6,8 +6,8 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $user_id - * @property string $slug + * @property int $user_id + * @property string $slug * @property \Carbon\Carbon $updated_at */ class Media extends NsModel @@ -23,6 +23,6 @@ class Media extends NsModel public function user() { - return $this->belongsTo(User::class); + return $this->belongsTo( User::class ); } } diff --git a/app/Models/Migration.php b/app/Models/Migration.php index 6dc5e1573..65211c09f 100644 --- a/app/Models/Migration.php +++ b/app/Models/Migration.php @@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model; /** - * @property int $batch + * @property int $batch * @property string $type */ class Migration extends Model diff --git a/app/Models/ModuleMigration.php b/app/Models/ModuleMigration.php index e1a31ca6e..b0a67069f 100644 --- a/app/Models/ModuleMigration.php +++ b/app/Models/ModuleMigration.php @@ -5,7 +5,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id + * @property int $id * @property string $file */ class ModuleMigration extends NsModel @@ -16,8 +16,8 @@ class ModuleMigration extends NsModel public $timestamps = false; - public function scopeNamespace($query, $namespace) + public function scopeNamespace( $query, $namespace ) { - return $query->where('namespace', $namespace); + return $query->where( 'namespace', $namespace ); } } diff --git a/app/Models/Notification.php b/app/Models/Notification.php index b7fd07f8c..2109e7207 100644 --- a/app/Models/Notification.php +++ b/app/Models/Notification.php @@ -5,11 +5,11 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $user_id - * @property string $source - * @property string $description - * @property bool $dismissable + * @property int $id + * @property int $user_id + * @property string $source + * @property string $description + * @property bool $dismissable * @property \Carbon\Carbon $updated_at */ class Notification extends NsModel @@ -25,16 +25,16 @@ class Notification extends NsModel public function user() { - return $this->belongsTo(User::class); + return $this->belongsTo( User::class ); } - public function scopeIdentifiedBy($query, $identifier) + public function scopeIdentifiedBy( $query, $identifier ) { - return $query->where('identifier', $identifier); + return $query->where( 'identifier', $identifier ); } - public function scopeFor($query, $user_id) + public function scopeFor( $query, $user_id ) { - return $query->where('user_id', $user_id); + return $query->where( 'user_id', $user_id ); } } diff --git a/app/Models/NsModel.php b/app/Models/NsModel.php index 85e42e787..c542bbeed 100644 --- a/app/Models/NsModel.php +++ b/app/Models/NsModel.php @@ -19,10 +19,10 @@ abstract class NsModel extends NsRootModel // ... ]; - public function __construct($attributes = []) + public function __construct( $attributes = [] ) { - parent::__construct($attributes); + parent::__construct( $attributes ); - $this->table = Hook::filter('ns-model-table', $this->table); + $this->table = Hook::filter( 'ns-model-table', $this->table ); } } diff --git a/app/Models/Option.php b/app/Models/Option.php index 413a5adc7..a1e46bd39 100644 --- a/app/Models/Option.php +++ b/app/Models/Option.php @@ -5,11 +5,11 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $user_id - * @property string $key - * @property string $value + * @property int $user_id + * @property string $key + * @property string $value * @property \Carbon\Carbon $updated_at - * @property bool $array + * @property bool $array */ class Option extends NsModel { @@ -26,9 +26,9 @@ class Option extends NsModel 'user_id' => 'integer', ]; - public function scopeKey($query, $key) + public function scopeKey( $query, $key ) { - return $query->where('key', $key)->first(); + return $query->where( 'key', $key )->first(); } /** @@ -37,8 +37,8 @@ public function scopeKey($query, $key) * @param string key * @return array **/ - public function scopeAllkeys($query, $key) + public function scopeAllkeys( $query, $key ) { - return $query->where('key', $key)->get(); + return $query->where( 'key', $key )->get(); } } diff --git a/app/Models/Order.php b/app/Models/Order.php index 8d8872c7c..f6891ab42 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -142,87 +142,87 @@ public function refundedProducts() public function user() { - return $this->hasOne(User::class, 'id', 'author'); + return $this->hasOne( User::class, 'id', 'author' ); } public function refunds() { - return $this->hasMany(OrderRefund::class, 'order_id', 'id'); + return $this->hasMany( OrderRefund::class, 'order_id', 'id' ); } public function payments() { - return $this->hasMany(OrderPayment::class, 'order_id'); + return $this->hasMany( OrderPayment::class, 'order_id' ); } public function customer() { - return $this->hasOne(Customer::class, 'id', 'customer_id'); + return $this->hasOne( Customer::class, 'id', 'customer_id' ); } public function taxes() { - return $this->hasMany(OrderTax::class, 'order_id', 'id'); + return $this->hasMany( OrderTax::class, 'order_id', 'id' ); } public function coupons() { - return $this->hasMany(OrderCoupon::class, 'order_id', 'id'); + return $this->hasMany( OrderCoupon::class, 'order_id', 'id' ); } public function instalments() { - return $this->hasMany(OrderInstalment::class, 'order_id', 'id'); + return $this->hasMany( OrderInstalment::class, 'order_id', 'id' ); } public function shipping_address() { - return $this->hasOne(OrderShippingAddress::class); + return $this->hasOne( OrderShippingAddress::class ); } public function billing_address() { - return $this->hasOne(OrderBillingAddress::class); + return $this->hasOne( OrderBillingAddress::class ); } - public function scopeFrom($query, $range_starts) + public function scopeFrom( $query, $range_starts ) { - return $query->where('created_at', '>=', $range_starts); + return $query->where( 'created_at', '>=', $range_starts ); } - public function scopeTo($query, $range_ends) + public function scopeTo( $query, $range_ends ) { - return $query->where('created_at', '<=', $range_ends); + return $query->where( 'created_at', '<=', $range_ends ); } - public function scopePaid($query) + public function scopePaid( $query ) { - return $query->where('payment_status', self::PAYMENT_PAID); + return $query->where( 'payment_status', self::PAYMENT_PAID ); } - public function scopeRefunded($query) + public function scopeRefunded( $query ) { - return $query->where('payment_status', self::PAYMENT_REFUNDED); + return $query->where( 'payment_status', self::PAYMENT_REFUNDED ); } - public function scopePaymentStatus($query, $status) + public function scopePaymentStatus( $query, $status ) { - return $query->where('payment_status', $status); + return $query->where( 'payment_status', $status ); } - public function scopePaymentExpired($query) + public function scopePaymentExpired( $query ) { - $date = app()->make(DateService::class); + $date = app()->make( DateService::class ); return $query - ->whereIn('payment_status', [ Order::PAYMENT_PARTIALLY, Order::PAYMENT_UNPAID ]) - ->where('final_payment_date', '<>', null) - ->where('final_payment_date', '<', $date->now()->toDateTimeString()); + ->whereIn( 'payment_status', [ Order::PAYMENT_PARTIALLY, Order::PAYMENT_UNPAID ] ) + ->where( 'final_payment_date', '<>', null ) + ->where( 'final_payment_date', '<', $date->now()->toDateTimeString() ); } - public function scopePaymentStatusIn($query, array $statuses) + public function scopePaymentStatusIn( $query, array $statuses ) { - return $query->whereIn('payment_status', $statuses); + return $query->whereIn( 'payment_status', $statuses ); } /** @@ -233,45 +233,45 @@ public function scopePaymentStatusIn($query, array $statuses) */ public function getCombinedProductsAttribute() { - if (ns()->option->get('ns_invoice_merge_similar_products', 'no') === 'yes') { + if ( ns()->option->get( 'ns_invoice_merge_similar_products', 'no' ) === 'yes' ) { $combinaison = []; - $this->products()->with('unit')->get()->each(function ($product) use (&$combinaison) { + $this->products()->with( 'unit' )->get()->each( function ( $product ) use ( &$combinaison ) { $values = $product->toArray(); - extract($values); + extract( $values ); - $keys = array_keys($combinaison); - $stringified = Hook::filter('ns-products-combinaison-identifier', $product_id . '-' . $order_id . '-' . $discount . '-' . $product_category_id . '-' . $status, $product); - $combinaisonAttributes = Hook::filter('ns-products-combinaison-attributes', [ + $keys = array_keys( $combinaison ); + $stringified = Hook::filter( 'ns-products-combinaison-identifier', $product_id . '-' . $order_id . '-' . $discount . '-' . $product_category_id . '-' . $status, $product ); + $combinaisonAttributes = Hook::filter( 'ns-products-combinaison-attributes', [ 'quantity', 'total_price_without_tax', 'total_price', 'total_purchase_price', 'total_price_with_tax', 'discount', - ]); + ] ); - if (in_array($stringified, $keys)) { - foreach ($combinaisonAttributes as $attribute) { + if ( in_array( $stringified, $keys ) ) { + foreach ( $combinaisonAttributes as $attribute ) { $combinaison[ $stringified ][ $attribute ] += (float) $product->$attribute; } } else { $rawProduct = $product->toArray(); - unset($rawProduct[ 'id' ]); - unset($rawProduct[ 'created_at' ]); - unset($rawProduct[ 'updated_at' ]); - unset($rawProduct[ 'procurement_product_id' ]); + unset( $rawProduct[ 'id' ] ); + unset( $rawProduct[ 'created_at' ] ); + unset( $rawProduct[ 'updated_at' ] ); + unset( $rawProduct[ 'procurement_product_id' ] ); $combinaison[ $stringified ] = $rawProduct; } - }); + } ); /** * that's nasty. */ - return collect(json_decode(json_encode($combinaison))); + return collect( json_decode( json_encode( $combinaison ) ) ); } return $this->products()->get(); diff --git a/app/Models/OrderAddress.php b/app/Models/OrderAddress.php index 42b82c39e..dd2384deb 100644 --- a/app/Models/OrderAddress.php +++ b/app/Models/OrderAddress.php @@ -5,9 +5,9 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $author - * @property string $uuid + * @property int $id + * @property int $author + * @property string $uuid * @property \Carbon\Carbon $updated_at */ class OrderAddress extends NsModel diff --git a/app/Models/OrderBillingAddress.php b/app/Models/OrderBillingAddress.php index a66363a54..5ff5e5e2e 100644 --- a/app/Models/OrderBillingAddress.php +++ b/app/Models/OrderBillingAddress.php @@ -6,9 +6,9 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $author - * @property string $uuid + * @property int $id + * @property int $author + * @property string $uuid * @property \Carbon\Carbon $updated_at */ class OrderBillingAddress extends NsModel @@ -19,16 +19,16 @@ class OrderBillingAddress extends NsModel protected static function booted() { - static::addGlobalScope('type', function (Builder $builder) { - $builder->where('type', 'billing'); - }); + static::addGlobalScope( 'type', function ( Builder $builder ) { + $builder->where( 'type', 'billing' ); + } ); - static::creating(function ($address) { + static::creating( function ( $address ) { $address->type = 'billing'; - }); + } ); - static::updating(function ($address) { + static::updating( function ( $address ) { $address->type = 'billing'; - }); + } ); } } diff --git a/app/Models/OrderCoupon.php b/app/Models/OrderCoupon.php index eb2566221..dd5d58470 100644 --- a/app/Models/OrderCoupon.php +++ b/app/Models/OrderCoupon.php @@ -5,10 +5,10 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property string $uuid - * @property int $author - * @property float $value + * @property int $id + * @property string $uuid + * @property int $author + * @property float $value * @property \Carbon\Carbon $updated_at */ class OrderCoupon extends NsModel @@ -19,6 +19,6 @@ class OrderCoupon extends NsModel public function customerCoupon() { - return $this->belongsTo(CustomerCoupon::class, 'customer_coupon_id'); + return $this->belongsTo( CustomerCoupon::class, 'customer_coupon_id' ); } } diff --git a/app/Models/OrderInstalment.php b/app/Models/OrderInstalment.php index 8e1b981dc..a5ca462b3 100644 --- a/app/Models/OrderInstalment.php +++ b/app/Models/OrderInstalment.php @@ -5,11 +5,11 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property float $amount - * @property int $order_id - * @property bool $paid - * @property int $payment_id + * @property int $id + * @property float $amount + * @property int $order_id + * @property bool $paid + * @property int $payment_id * @property string $date */ class OrderInstalment extends NsModel diff --git a/app/Models/OrderPayment.php b/app/Models/OrderPayment.php index 514ff878a..9a4ed0d1f 100644 --- a/app/Models/OrderPayment.php +++ b/app/Models/OrderPayment.php @@ -6,10 +6,10 @@ use Illuminate\Support\Facades\Cache; /** - * @property int $id - * @property int $order_id - * @property float $value - * @property int $author + * @property int $id + * @property int $order_id + * @property float $value + * @property int $author * @property string $identifier * @property string $uuid */ @@ -27,27 +27,27 @@ class OrderPayment extends NsModel public function order() { - return $this->belongsTo(Order::class, 'order_id', 'id'); + return $this->belongsTo( Order::class, 'order_id', 'id' ); } - public function scopeWithOrder($query, $order_id) + public function scopeWithOrder( $query, $order_id ) { - return $query->where('order_id', $order_id); + return $query->where( 'order_id', $order_id ); } public function type() { - return $this->hasOne(PaymentType::class, 'identifier', 'identifier'); + return $this->hasOne( PaymentType::class, 'identifier', 'identifier' ); } public function getPaymentLabelAttribute() { - $paymentTypes = Cache::remember('nexopos.pos.payments-key', '3600', function () { - return PaymentType::active()->get()->mapWithKeys(function ($paymentType) { + $paymentTypes = Cache::remember( 'nexopos.pos.payments-key', '3600', function () { + return PaymentType::active()->get()->mapWithKeys( function ( $paymentType ) { return [ $paymentType->identifier => $paymentType->label ]; - }); - }); + } ); + } ); - return $paymentTypes[ $this->identifier ] ?? __('Unknown Payment'); + return $paymentTypes[ $this->identifier ] ?? __( 'Unknown Payment' ); } } diff --git a/app/Models/OrderProduct.php b/app/Models/OrderProduct.php index fda899e8b..13cdbc88a 100644 --- a/app/Models/OrderProduct.php +++ b/app/Models/OrderProduct.php @@ -6,38 +6,38 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property string $name - * @property int $product_id - * @property int $product_category_id - * @property int $procurement_product_id - * @property int $unit_id - * @property int $unit_quantity_id - * @property int $order_id - * @property float $quantity - * @property string $discount_type - * @property float $discount - * @property float $discount_percentage - * @property float $price_without_tax - * @property float $unit_price - * @property int $tax_group_id - * @property string $tax_type - * @property int $wholesale_tax_value - * @property string $mode - * @property float $sale_tax_value - * @property float $tax_value - * @property float $price_with_tax - * @property string $unit_name - * @property float $total_price_without_tax - * @property float $total_price - * @property float $total_price_with_tax - * @property float $total_purchase_price - * @property string $return_condition - * @property string $return_observations - * @property string $uuid - * @property int $status - * @property Order $order - * @property Unit $unit + * @property int $id + * @property string $name + * @property int $product_id + * @property int $product_category_id + * @property int $procurement_product_id + * @property int $unit_id + * @property int $unit_quantity_id + * @property int $order_id + * @property float $quantity + * @property string $discount_type + * @property float $discount + * @property float $discount_percentage + * @property float $price_without_tax + * @property float $unit_price + * @property int $tax_group_id + * @property string $tax_type + * @property int $wholesale_tax_value + * @property string $mode + * @property float $sale_tax_value + * @property float $tax_value + * @property float $price_with_tax + * @property string $unit_name + * @property float $total_price_without_tax + * @property float $total_price + * @property float $total_price_with_tax + * @property float $total_purchase_price + * @property string $return_condition + * @property string $return_observations + * @property string $uuid + * @property int $status + * @property Order $order + * @property Unit $unit * @property Product $product */ class OrderProduct extends NsModel @@ -75,17 +75,17 @@ class OrderProduct extends NsModel public function unit() { - return $this->hasOne(Unit::class, 'id', 'unit_id'); + return $this->hasOne( Unit::class, 'id', 'unit_id' ); } public function order() { - return $this->belongsTo(Order::class, 'order_id', 'id'); + return $this->belongsTo( Order::class, 'order_id', 'id' ); } public function product() { - return $this->hasOne(Product::class, 'id', 'product_id'); + return $this->hasOne( Product::class, 'id', 'product_id' ); } public function refunded_products() @@ -97,8 +97,8 @@ public function refunded_products() ); } - public function scopeValidProducts($query) + public function scopeValidProducts( $query ) { - return $query->where('quantity', '>', 0); + return $query->where( 'quantity', '>', 0 ); } } diff --git a/app/Models/OrderProductRefund.php b/app/Models/OrderProductRefund.php index 0e653122d..e5d9760ef 100644 --- a/app/Models/OrderProductRefund.php +++ b/app/Models/OrderProductRefund.php @@ -5,11 +5,11 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $author - * @property float $total_price - * @property string $condition - * @property string $description + * @property int $id + * @property int $author + * @property float $total_price + * @property string $condition + * @property string $description * @property \Carbon\Carbon $updated_at */ class OrderProductRefund extends NsModel @@ -24,26 +24,26 @@ class OrderProductRefund extends NsModel public function unit() { - return $this->hasOne(Unit::class, 'id', 'unit_id'); + return $this->hasOne( Unit::class, 'id', 'unit_id' ); } public function product() { - return $this->hasOne(Product::class, 'id', 'product_id'); + return $this->hasOne( Product::class, 'id', 'product_id' ); } public function orderProduct() { - return $this->belongsTo(OrderProduct::class, 'order_product_id', 'id'); + return $this->belongsTo( OrderProduct::class, 'order_product_id', 'id' ); } public function order() { - return $this->belongsTo(Order::class, 'order_id', 'id'); + return $this->belongsTo( Order::class, 'order_id', 'id' ); } public function orderRefund() { - return $this->belongsTo(Order::class, 'order_refund_id', 'id'); + return $this->belongsTo( Order::class, 'order_refund_id', 'id' ); } } diff --git a/app/Models/OrderRefund.php b/app/Models/OrderRefund.php index 16708494f..a40018db6 100644 --- a/app/Models/OrderRefund.php +++ b/app/Models/OrderRefund.php @@ -5,10 +5,10 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $author - * @property float $shipping - * @property string $payment_method + * @property int $id + * @property int $author + * @property float $shipping + * @property string $payment_method * @property \Carbon\Carbon $updated_at */ class OrderRefund extends NsModel @@ -19,16 +19,16 @@ class OrderRefund extends NsModel public function refunded_products() { - return $this->hasMany(OrderProductRefund::class, 'order_refund_id', 'id'); + return $this->hasMany( OrderProductRefund::class, 'order_refund_id', 'id' ); } public function order() { - return $this->belongsTo(Order::class, 'order_id', 'id'); + return $this->belongsTo( Order::class, 'order_id', 'id' ); } public function author() { - return $this->belongsTo(User::class, 'author', 'id'); + return $this->belongsTo( User::class, 'author', 'id' ); } } diff --git a/app/Models/OrderShippingAddress.php b/app/Models/OrderShippingAddress.php index 9fdb26e6d..6def078ff 100644 --- a/app/Models/OrderShippingAddress.php +++ b/app/Models/OrderShippingAddress.php @@ -6,9 +6,9 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $author - * @property string $uuid + * @property int $id + * @property int $author + * @property string $uuid * @property \Carbon\Carbon $updated_at */ class OrderShippingAddress extends NsModel @@ -19,16 +19,16 @@ class OrderShippingAddress extends NsModel protected static function booted() { - static::addGlobalScope('type', function (Builder $builder) { - $builder->where('type', 'shipping'); - }); + static::addGlobalScope( 'type', function ( Builder $builder ) { + $builder->where( 'type', 'shipping' ); + } ); - static::creating(function ($address) { + static::creating( function ( $address ) { $address->type = 'shipping'; - }); + } ); - static::updating(function ($address) { + static::updating( function ( $address ) { $address->type = 'shipping'; - }); + } ); } } diff --git a/app/Models/OrderStorage.php b/app/Models/OrderStorage.php index 3d18d3615..5ef6f6778 100644 --- a/app/Models/OrderStorage.php +++ b/app/Models/OrderStorage.php @@ -5,9 +5,9 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $quantity - * @property string $session_identifier + * @property int $id + * @property int $quantity + * @property string $session_identifier * @property \Carbon\Carbon $updated_at */ class OrderStorage extends NsModel @@ -16,18 +16,18 @@ class OrderStorage extends NsModel protected $table = 'nexopos_' . 'orders_storage'; - public function scopeWithIdentifier($query, $id) + public function scopeWithIdentifier( $query, $id ) { - return $query->where('session_identifier', $id); + return $query->where( 'session_identifier', $id ); } - public function scopeWithProduct($query, $id) + public function scopeWithProduct( $query, $id ) { - return $query->where('product_id', $id); + return $query->where( 'product_id', $id ); } - public function scopeWithUnitQuantity($query, $id) + public function scopeWithUnitQuantity( $query, $id ) { - return $query->where('unit_quantity_id', $id); + return $query->where( 'unit_quantity_id', $id ); } } diff --git a/app/Models/OrderTax.php b/app/Models/OrderTax.php index 28ad96e69..0bfadfc3a 100644 --- a/app/Models/OrderTax.php +++ b/app/Models/OrderTax.php @@ -6,9 +6,9 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $order_id - * @property float $tax_value + * @property int $id + * @property int $order_id + * @property float $tax_value * @property string $tax_name */ class OrderTax extends NsModel @@ -26,6 +26,6 @@ class OrderTax extends NsModel public function order() { - return $this->belongsTo(Order::class, 'id', 'order_id'); + return $this->belongsTo( Order::class, 'id', 'order_id' ); } } diff --git a/app/Models/PaymentType.php b/app/Models/PaymentType.php index ecec055b8..22b696aa4 100644 --- a/app/Models/PaymentType.php +++ b/app/Models/PaymentType.php @@ -5,11 +5,11 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property string $identifier - * @property int $author - * @property string $description - * @property bool $readonly + * @property int $id + * @property string $identifier + * @property int $author + * @property string $description + * @property bool $readonly * @property \Carbon\Carbon $updated_at */ class PaymentType extends NsModel @@ -18,13 +18,13 @@ class PaymentType extends NsModel protected $table = 'nexopos_' . 'payments_types'; - public function scopeActive($query) + public function scopeActive( $query ) { - return $query->where('active', true); + return $query->where( 'active', true ); } - public function scopeIdentifier($query, $identifier) + public function scopeIdentifier( $query, $identifier ) { - return $query->where('identifier', $identifier); + return $query->where( 'identifier', $identifier ); } } diff --git a/app/Models/Permission.php b/app/Models/Permission.php index c55bd2401..46734d3de 100644 --- a/app/Models/Permission.php +++ b/app/Models/Permission.php @@ -19,9 +19,9 @@ class Permission extends Model protected $fillable = [ 'namespace', 'name', 'description' ]; - public function scopeWithNamespace($query, $param) + public function scopeWithNamespace( $query, $param ) { - return $query->where('namespace', $param); + return $query->where( 'namespace', $param ); } /** @@ -30,21 +30,21 @@ public function scopeWithNamespace($query, $param) * @param string permission name * @return Permission **/ - public static function namespace($name) + public static function namespace( $name ) { - return self::where('namespace', $name)->first(); + return self::where( 'namespace', $name )->first(); } - public static function withNamespaceOrNew($name) + public static function withNamespaceOrNew( $name ) { - $instance = self::where('namespace', $name)->first(); + $instance = self::where( 'namespace', $name )->first(); return $instance instanceof self ? $instance : new self; } public function roles() { - return $this->belongsToMany(Role::class, 'nexopos_role_permission'); + return $this->belongsToMany( Role::class, 'nexopos_role_permission' ); } /** @@ -55,9 +55,9 @@ public function roles() * @param string search namespace * @return Query */ - public function scopeIncludes($query, $search) + public function scopeIncludes( $query, $search ) { - return $query->where('namespace', 'like', '%' . $search . '%'); + return $query->where( 'namespace', 'like', '%' . $search . '%' ); } /** @@ -69,6 +69,6 @@ public function scopeIncludes($query, $search) */ public function removeFromRoles() { - RolePermission::where('permission_id', $this->id)->delete(); + RolePermission::where( 'permission_id', $this->id )->delete(); } } diff --git a/app/Models/PersonalAccessToken.php b/app/Models/PersonalAccessToken.php index aef3d2838..c39546a83 100644 --- a/app/Models/PersonalAccessToken.php +++ b/app/Models/PersonalAccessToken.php @@ -7,9 +7,9 @@ use Laravel\Sanctum\PersonalAccessToken as SanctumPersonalAccessToken; /** - * @property int $tokenable_id - * @property mixed $token - * @property string $abilities + * @property int $tokenable_id + * @property mixed $token + * @property string $abilities * @property \Carbon\Carbon $updated_at */ class PersonalAccessToken extends SanctumPersonalAccessToken @@ -19,8 +19,8 @@ class PersonalAccessToken extends SanctumPersonalAccessToken protected function createdAt(): Attribute { return Attribute::make( - get: function ($value) { - return $value === null ? null : ns()->date->copy()->parse($value)->diffForHumans(); + get: function ( $value ) { + return $value === null ? null : ns()->date->copy()->parse( $value )->diffForHumans(); } ); } @@ -28,8 +28,8 @@ protected function createdAt(): Attribute protected function expiresAt(): Attribute { return Attribute::make( - get: function ($value) { - return $value === null ? null : ns()->date->copy()->parse($value)->diffForHumans(); + get: function ( $value ) { + return $value === null ? null : ns()->date->copy()->parse( $value )->diffForHumans(); } ); } @@ -37,8 +37,8 @@ protected function expiresAt(): Attribute protected function lastUsedAt(): Attribute { return Attribute::make( - get: function ($value) { - return $value === null ? null : ns()->date->copy()->parse($value)->diffForHumans(); + get: function ( $value ) { + return $value === null ? null : ns()->date->copy()->parse( $value )->diffForHumans(); } ); } diff --git a/app/Models/Procurement.php b/app/Models/Procurement.php index ad17e8420..315b0bce5 100644 --- a/app/Models/Procurement.php +++ b/app/Models/Procurement.php @@ -11,22 +11,22 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property mixed $name - * @property int $provider_id - * @property float $value - * @property float $cost - * @property float $tax_value - * @property mixed $invoice_reference - * @property bool $automatic_approval + * @property int $id + * @property mixed $name + * @property int $provider_id + * @property float $value + * @property float $cost + * @property float $tax_value + * @property mixed $invoice_reference + * @property bool $automatic_approval * @property \Carbon\Carbon $delivery_time * @property \Carbon\Carbon $invoice_date - * @property mixed $payment_status - * @property mixed $delivery_status - * @property int $total_items - * @property string $description - * @property int $author - * @property mixed $uuid + * @property mixed $payment_status + * @property mixed $delivery_status + * @property int $total_items + * @property string $description + * @property int $author + * @property mixed $uuid * @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $updated_at */ @@ -90,21 +90,21 @@ class Procurement extends NsModel public function products() { - return $this->hasMany(ProcurementProduct::class, 'procurement_id'); + return $this->hasMany( ProcurementProduct::class, 'procurement_id' ); } public function provider() { - return $this->belongsTo(Provider::class); + return $this->belongsTo( Provider::class ); } - public function scopePending($query) + public function scopePending( $query ) { - return $query->where('delivery_status', self::PENDING); + return $query->where( 'delivery_status', self::PENDING ); } - public function scopeAutoApproval($query) + public function scopeAutoApproval( $query ) { - return $query->where('automatic_approval', true); + return $query->where( 'automatic_approval', true ); } } diff --git a/app/Models/ProcurementProduct.php b/app/Models/ProcurementProduct.php index e1f808d7b..895f827cc 100644 --- a/app/Models/ProcurementProduct.php +++ b/app/Models/ProcurementProduct.php @@ -12,27 +12,27 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property mixed $name - * @property float $gross_purchase_price - * @property float $net_purchase_price - * @property int $procurement_id - * @property int $product_id - * @property float $purchase_price - * @property float $quantity - * @property float $available_quantity - * @property int $tax_group_id - * @property mixed $barcode + * @property int $id + * @property mixed $name + * @property float $gross_purchase_price + * @property float $net_purchase_price + * @property int $procurement_id + * @property int $product_id + * @property float $purchase_price + * @property float $quantity + * @property float $available_quantity + * @property int $tax_group_id + * @property mixed $barcode * @property \Carbon\Carbon $expiration_date - * @property mixed $tax_type - * @property float $tax_value - * @property float $total_purchase_price - * @property int $unit_id - * @property int $convert_unit_id - * @property bool $visible - * @property float $cogs - * @property int $author - * @property mixed $uuid + * @property mixed $tax_type + * @property float $tax_value + * @property float $total_purchase_price + * @property int $unit_id + * @property int $convert_unit_id + * @property bool $visible + * @property float $cogs + * @property int $author + * @property mixed $uuid * @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $updated_at */ @@ -57,17 +57,17 @@ class ProcurementProduct extends NsModel public function procurement() { - return $this->belongsTo(Procurement::class, 'procurement_id'); + return $this->belongsTo( Procurement::class, 'procurement_id' ); } public function product() { - return $this->hasOne(Product::class, 'id', 'product_id'); + return $this->hasOne( Product::class, 'id', 'product_id' ); } public function unit() { - return $this->hasOne(Unit::class, 'id', 'unit_id'); + return $this->hasOne( Unit::class, 'id', 'unit_id' ); } /** @@ -78,21 +78,21 @@ public function unit() * @param string * @return Query; */ - public function scopeGetByProcurement($query, $param) + public function scopeGetByProcurement( $query, $param ) { - return $query->where('procurement_id', $param); + return $query->where( 'procurement_id', $param ); } /** * Fetch product from a procurement * using as specific barcode * - * @param QueryBuilder $query - * @param string $barcode + * @param QueryBuilder $query + * @param string $barcode * @return QueryBuilder */ - public function scopeBarcode($query, $barcode) + public function scopeBarcode( $query, $barcode ) { - return $query->where('barcode', $barcode); + return $query->where( 'barcode', $barcode ); } } diff --git a/app/Models/Product.php b/app/Models/Product.php index b17cd8f0c..e18fd0315 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -8,30 +8,30 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property string $id - * @property string $name - * @property string $tax_type - * @property int $tax_group_id - * @property float $tax_value - * @property string $product_type - * @property string $type - * @property bool $accurate_tracking - * @property bool $auto_cogs - * @property string $status - * @property string $stock_management Can either be "enabled" or "disabled" - * @property string $barcode - * @property string $barcode_type - * @property string $sku - * @property string $description - * @property int $thumbnail_id - * @property int $category_id - * @property int $parent_id - * @property int $unit_group - * @property string $on_expiration - * @property bool $expires whether or not the product has expired - * @property bool $searchable - * @property int $author - * @property string $uuid + * @property string $id + * @property string $name + * @property string $tax_type + * @property int $tax_group_id + * @property float $tax_value + * @property string $product_type + * @property string $type + * @property bool $accurate_tracking + * @property bool $auto_cogs + * @property string $status + * @property string $stock_management Can either be "enabled" or "disabled" + * @property string $barcode + * @property string $barcode_type + * @property string $sku + * @property string $description + * @property int $thumbnail_id + * @property int $category_id + * @property int $parent_id + * @property int $unit_group + * @property string $on_expiration + * @property bool $expires whether or not the product has expired + * @property bool $searchable + * @property int $author + * @property string $uuid * @property TaxGroup $tax_group * * @method static Builder trackingEnabled() @@ -104,7 +104,7 @@ class Product extends NsModel public function category() { - return $this->belongsTo(ProductCategory::class, 'category_id', 'id'); + return $this->belongsTo( ProductCategory::class, 'category_id', 'id' ); } /** @@ -113,9 +113,9 @@ public function category() * @param Builder * @return Builder */ - public function scopeTrackingEnabled($query) + public function scopeTrackingEnabled( $query ) { - return $query->where('accurate_tracking', true); + return $query->where( 'accurate_tracking', true ); } /** @@ -124,26 +124,26 @@ public function scopeTrackingEnabled($query) * @param Builder * @return Builder */ - public function scopeType($query, $type) + public function scopeType( $query, $type ) { - return $query->where('type', $type); + return $query->where( 'type', $type ); } /** * Add a scope that filter product * that aren't grouped */ - public function scopeNotGrouped(Builder $query) + public function scopeNotGrouped( Builder $query ) { - return $query->where('type', '!=', self::TYPE_GROUPED); + return $query->where( 'type', '!=', self::TYPE_GROUPED ); } /** * Filter products if they are grouped products. */ - public function scopeGrouped(Builder $query) + public function scopeGrouped( Builder $query ) { - return $query->where('type', self::TYPE_GROUPED); + return $query->where( 'type', self::TYPE_GROUPED ); } /** @@ -151,31 +151,31 @@ public function scopeGrouped(Builder $query) * * @alias scopeGrouped */ - public function scopeIsGroup(Builder $query) + public function scopeIsGroup( Builder $query ) { - return $query->where('type', self::TYPE_GROUPED); + return $query->where( 'type', self::TYPE_GROUPED ); } /** * Filter product that doesn't * belong to a group */ - public function scopeNotInGroup(Builder $query) + public function scopeNotInGroup( Builder $query ) { - $subItemsIds = ProductSubItem::get('id')->map(fn($entry) => $entry->id)->toArray(); + $subItemsIds = ProductSubItem::get( 'id' )->map( fn( $entry ) => $entry->id )->toArray(); - return $query->whereNotIn('id', $subItemsIds); + return $query->whereNotIn( 'id', $subItemsIds ); } /** * Filter products that are * included as a sub_items. */ - public function scopeInGroup(Builder $query) + public function scopeInGroup( Builder $query ) { - $subItemsIds = ProductSubItem::get('id')->map(fn($entry) => $entry->id)->toArray(); + $subItemsIds = ProductSubItem::get( 'id' )->map( fn( $entry ) => $entry->id )->toArray(); - return $query->whereIn('id', $subItemsIds); + return $query->whereIn( 'id', $subItemsIds ); } /** @@ -184,9 +184,9 @@ public function scopeInGroup(Builder $query) * @param Builder * @return Builder */ - public function scopeTrackingDisabled($query) + public function scopeTrackingDisabled( $query ) { - return $query->where('accurate_tracking', false); + return $query->where( 'accurate_tracking', false ); } /** @@ -196,9 +196,9 @@ public function scopeTrackingDisabled($query) * @param string barcode * @return Builder */ - public function scopeFindUsingBarcode($query, $barcode) + public function scopeFindUsingBarcode( $query, $barcode ) { - return $query->where('barcode', $barcode); + return $query->where( 'barcode', $barcode ); } /** @@ -208,21 +208,21 @@ public function scopeFindUsingBarcode($query, $barcode) * @param string barcode * @return Builder */ - public function scopeBarcode($query, $barcode) + public function scopeBarcode( $query, $barcode ) { - return $this->scopeFindUsingBarcode($query, $barcode); + return $this->scopeFindUsingBarcode( $query, $barcode ); } /** * get a product using a barcode * - * @param Builder $query - * @param string $sku + * @param Builder $query + * @param string $sku * @return Builder */ - public function scopeSku($query, $sku) + public function scopeSku( $query, $sku ) { - return $this->scopeFindUsingSKU($query, $sku); + return $this->scopeFindUsingSKU( $query, $sku ); } /** @@ -231,9 +231,9 @@ public function scopeSku($query, $sku) * @param Builder * @return Builder */ - public function scopeOnSale($query) + public function scopeOnSale( $query ) { - return $query->where('status', self::STATUS_AVAILABLE); + return $query->where( 'status', self::STATUS_AVAILABLE ); } /** @@ -242,9 +242,9 @@ public function scopeOnSale($query) * @param Builder * @return Builder */ - public function scopeHidden($query) + public function scopeHidden( $query ) { - return $query->where('status', self::STATUS_UNAVAILABLE); + return $query->where( 'status', self::STATUS_UNAVAILABLE ); } /** @@ -254,54 +254,54 @@ public function scopeHidden($query) * @param string sku * @return Builder */ - public function scopeFindUsingSKU($query, $sku) + public function scopeFindUsingSKU( $query, $sku ) { - return $query->where('sku', $sku); + return $query->where( 'sku', $sku ); } public function unit_quantities() { - return $this->hasMany(ProductUnitQuantity::class, 'product_id'); + return $this->hasMany( ProductUnitQuantity::class, 'product_id' ); } public function unitGroup() { - return $this->hasOne(UnitGroup::class, 'id', 'unit_group'); + return $this->hasOne( UnitGroup::class, 'id', 'unit_group' ); } public function product_taxes() { - return $this->hasMany(ProductTax::class, 'product_id'); + return $this->hasMany( ProductTax::class, 'product_id' ); } public function tax_group() { - return $this->hasOne(TaxGroup::class, 'id', 'tax_group_id'); + return $this->hasOne( TaxGroup::class, 'id', 'tax_group_id' ); } public function variations() { - return $this->hasMany(Product::class, 'parent_id'); + return $this->hasMany( Product::class, 'parent_id' ); } public function galleries() { - return $this->hasMany(ProductGallery::class, 'product_id', 'id'); + return $this->hasMany( ProductGallery::class, 'product_id', 'id' ); } public function procurementHistory() { - return $this->hasMany(ProcurementProduct::class, 'product_id', 'id'); + return $this->hasMany( ProcurementProduct::class, 'product_id', 'id' ); } public function sub_items() { - return $this->hasMany(ProductSubItem::class, 'parent_id', 'id'); + return $this->hasMany( ProductSubItem::class, 'parent_id', 'id' ); } public function history() { - return $this->hasMany(ProductHistory::class, 'product_id', 'id'); + return $this->hasMany( ProductHistory::class, 'product_id', 'id' ); } /** @@ -310,9 +310,9 @@ public function history() * @param Builder $query * @return Builder; */ - public function scopeOnlyVariations($query) + public function scopeOnlyVariations( $query ) { - return $query->where('product_type', 'variation'); + return $query->where( 'product_type', 'variation' ); } /** @@ -321,9 +321,9 @@ public function scopeOnlyVariations($query) * @param Builder $query * @return Builder; */ - public function scopeExcludeVariations($query) + public function scopeExcludeVariations( $query ) { - return $query->where('product_type', '!=', 'variation'); + return $query->where( 'product_type', '!=', 'variation' ); } /** @@ -333,9 +333,9 @@ public function scopeExcludeVariations($query) * @param Builder $query * @return Builder; */ - public function scopeWithStockEnabled($query) + public function scopeWithStockEnabled( $query ) { - return $query->where('stock_management', Product::STOCK_MANAGEMENT_ENABLED); + return $query->where( 'stock_management', Product::STOCK_MANAGEMENT_ENABLED ); } /** @@ -345,21 +345,21 @@ public function scopeWithStockEnabled($query) * @param Builder $query * @return Builder; */ - public function scopeWithStockDisabled($query) + public function scopeWithStockDisabled( $query ) { - return $query->where('stock_management', Product::STOCK_MANAGEMENT_DISABLED); + return $query->where( 'stock_management', Product::STOCK_MANAGEMENT_DISABLED ); } /** * Filter query by getitng product with * accurate stock enabled or not. * - * @param Builder $query + * @param Builder $query * @return Builder */ - public function scopeAccurateTracking($query, $argument = true) + public function scopeAccurateTracking( $query, $argument = true ) { - return $query->where('accurate_tracking', $argument); + return $query->where( 'accurate_tracking', $argument ); } /** @@ -368,8 +368,8 @@ public function scopeAccurateTracking($query, $argument = true) * @param Builder * @return Builder */ - public function scopeSearchable($query, $attribute = true) + public function scopeSearchable( $query, $attribute = true ) { - return $query->where('searchable', $attribute); + return $query->where( 'searchable', $attribute ); } } diff --git a/app/Models/ProductCategory.php b/app/Models/ProductCategory.php index b12ff8293..abd8a7b79 100644 --- a/app/Models/ProductCategory.php +++ b/app/Models/ProductCategory.php @@ -6,11 +6,11 @@ use Illuminate\Database\Eloquent\Model; /** - * @property int $id - * @property string $uuid - * @property int $author - * @property bool $displays_on_pos - * @property string $description + * @property int $id + * @property string $uuid + * @property int $author + * @property bool $displays_on_pos + * @property string $description * @property \Carbon\Carbon $updated_at */ class ProductCategory extends NsModel @@ -36,14 +36,14 @@ class ProductCategory extends NsModel ], ]; - public function scopeDisplayOnPOS($query, $attribute = true) + public function scopeDisplayOnPOS( $query, $attribute = true ) { - return $query->where('displays_on_pos', $attribute); + return $query->where( 'displays_on_pos', $attribute ); } public function products() { - return $this->hasMany(Product::class, 'category_id'); + return $this->hasMany( Product::class, 'category_id' ); } /** @@ -52,7 +52,7 @@ public function products() */ public function author() { - return $this->belongsTo(User::class, 'author'); + return $this->belongsTo( User::class, 'author' ); } /** @@ -60,6 +60,6 @@ public function author() */ public function subCategories() { - return $this->hasMany(self::class, 'parent_id'); + return $this->hasMany( self::class, 'parent_id' ); } } diff --git a/app/Models/ProductGallery.php b/app/Models/ProductGallery.php index 223768cf6..cbeaa9774 100644 --- a/app/Models/ProductGallery.php +++ b/app/Models/ProductGallery.php @@ -3,10 +3,10 @@ namespace App\Models; /** - * @property int $id - * @property string $uuid - * @property int $author - * @property bool $featured + * @property int $id + * @property string $uuid + * @property int $author + * @property bool $featured * @property \Carbon\Carbon $updated_at */ class ProductGallery extends NsModel @@ -30,6 +30,6 @@ class ProductGallery extends NsModel public function product() { - return $this->belongsTo(Product::class); + return $this->belongsTo( Product::class ); } } diff --git a/app/Models/ProductHistory.php b/app/Models/ProductHistory.php index f033c9351..c1259a915 100644 --- a/app/Models/ProductHistory.php +++ b/app/Models/ProductHistory.php @@ -8,25 +8,25 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $product_id - * @property int $procurement_id - * @property int $procurement_product_id - * @property int $order_id - * @property int $order_product_id - * @property mixed $operation_type - * @property int $unit_id - * @property float $before_quantity - * @property float $quantity - * @property float $after_quantity - * @property float $unit_price - * @property float $total_price - * @property string $description - * @property int $author - * @property mixed $uuid + * @property int $id + * @property int $product_id + * @property int $procurement_id + * @property int $procurement_product_id + * @property int $order_id + * @property int $order_product_id + * @property mixed $operation_type + * @property int $unit_id + * @property float $before_quantity + * @property float $quantity + * @property float $after_quantity + * @property float $unit_price + * @property float $total_price + * @property string $description + * @property int $author + * @property mixed $uuid * @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $updated_at - * @property Product $product + * @property Product $product */ class ProductHistory extends NsModel { @@ -113,27 +113,27 @@ class ProductHistory extends NsModel /** * alias of scopeFindProduct * - * @param QueryBuilder $query - * @param int $product_id + * @param QueryBuilder $query + * @param int $product_id * @return QueryBuilder */ - public function scopeWithProduct($query, $product_id) + public function scopeWithProduct( $query, $product_id ) { - return $query->where('product_id', $product_id); + return $query->where( 'product_id', $product_id ); } - public function scopeFindProduct($query, $id) + public function scopeFindProduct( $query, $id ) { - return $query->where('product_id', $id); + return $query->where( 'product_id', $id ); } public function unit() { - return $this->belongsTo(Unit::class); + return $this->belongsTo( Unit::class ); } public function product() { - return $this->belongsTo(Product::class); + return $this->belongsTo( Product::class ); } } diff --git a/app/Models/ProductHistoryCombined.php b/app/Models/ProductHistoryCombined.php index 4fd4791de..6cea0e42f 100644 --- a/app/Models/ProductHistoryCombined.php +++ b/app/Models/ProductHistoryCombined.php @@ -6,17 +6,17 @@ use Illuminate\Database\Eloquent\Model; /** - * @property int $id - * @property string $name - * @property int $product_id - * @property int $unit_id - * @property float $initial_quantity - * @property float $sold_quantity - * @property float $procured_quantity - * @property float $defective_quantity - * @property float $final_quantity - * @property int $author - * @property string $uuid + * @property int $id + * @property string $name + * @property int $product_id + * @property int $unit_id + * @property float $initial_quantity + * @property float $sold_quantity + * @property float $procured_quantity + * @property float $defective_quantity + * @property float $final_quantity + * @property int $author + * @property string $uuid * @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $updated_at */ @@ -26,8 +26,8 @@ class ProductHistoryCombined extends Model protected $table = 'nexopos_' . 'products_histories_combined'; - public function scopeFor($query, $for) + public function scopeFor( $query, $for ) { - return $query->where('date', $for); + return $query->where( 'date', $for ); } } diff --git a/app/Models/ProductSubItem.php b/app/Models/ProductSubItem.php index 7e905e987..9c0333d1a 100644 --- a/app/Models/ProductSubItem.php +++ b/app/Models/ProductSubItem.php @@ -6,15 +6,15 @@ use Illuminate\Database\Eloquent\Model; /** - * @property int $id - * @property int $parent_id - * @property int $product_id - * @property int $unit_id - * @property int $unit_quantity_id - * @property float $quantity - * @property float $sale_price - * @property float $total_price - * @property int $author + * @property int $id + * @property int $parent_id + * @property int $product_id + * @property int $unit_id + * @property int $unit_quantity_id + * @property float $quantity + * @property float $sale_price + * @property float $total_price + * @property int $author * @property string $created_at * @property string $updated_at */ @@ -26,21 +26,21 @@ class ProductSubItem extends Model public function unit() { - return $this->hasOne(Unit::class, 'id', 'unit_id'); + return $this->hasOne( Unit::class, 'id', 'unit_id' ); } public function product() { - return $this->hasOne(Product::class, 'id', 'product_id'); + return $this->hasOne( Product::class, 'id', 'product_id' ); } public function parent() { - return $this->hasOne(Product::class, 'id', 'parent_id'); + return $this->hasOne( Product::class, 'id', 'parent_id' ); } public function unit_quantity() { - return $this->hasOne(ProductUnitQuantity::class, 'id', 'unit_quantity_id'); + return $this->hasOne( ProductUnitQuantity::class, 'id', 'unit_quantity_id' ); } } diff --git a/app/Models/ProductTax.php b/app/Models/ProductTax.php index ba3d2bd02..023b1324f 100644 --- a/app/Models/ProductTax.php +++ b/app/Models/ProductTax.php @@ -6,10 +6,10 @@ use Illuminate\Database\Eloquent\Model; /** - * @property int $id - * @property int $author - * @property string $uuid - * @property float $value + * @property int $id + * @property int $author + * @property string $uuid + * @property float $value * @property \Carbon\Carbon $updated_at */ class ProductTax extends NsModel @@ -25,7 +25,7 @@ class ProductTax extends NsModel */ public function parentTax() { - return $this->belongsTo(self::class, 'parent_id'); + return $this->belongsTo( self::class, 'parent_id' ); } /** @@ -35,15 +35,15 @@ public function parentTax() * @param array {product_id: int, tax_id: int} * @return Query */ - public function scopeFindMatch($query, $data) + public function scopeFindMatch( $query, $data ) { - extract($data); + extract( $data ); /** * -> product_id * -> tax_id */ - return $query->where('tax_id', $tax_id) - ->where('product_id', $product_id); + return $query->where( 'tax_id', $tax_id ) + ->where( 'product_id', $product_id ); } } diff --git a/app/Models/ProductUnitQuantity.php b/app/Models/ProductUnitQuantity.php index 5dc7916d8..d685bb53a 100644 --- a/app/Models/ProductUnitQuantity.php +++ b/app/Models/ProductUnitQuantity.php @@ -9,30 +9,30 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $product_id - * @property string $type - * @property string $preview_url - * @property string $expiration_date - * @property int $unit_id - * @property string $barcode - * @property float $quantity - * @property float $low_quantity - * @property bool $stock_alert_enabled - * @property float $sale_price - * @property float $sale_price_edit - * @property float $sale_price_without_tax - * @property float $sale_price_with_tax - * @property float $sale_price_tax - * @property float $wholesale_price - * @property float $wholesale_price_edit - * @property float $wholesale_price_with_tax - * @property float $wholesale_price_without_tax - * @property float $wholesale_price_tax - * @property float $custom_price - * @property float $custom_price_edit - * @property float $custom_price_with_tax - * @property float $custom_price_without_tax + * @property int $id + * @property int $product_id + * @property string $type + * @property string $preview_url + * @property string $expiration_date + * @property int $unit_id + * @property string $barcode + * @property float $quantity + * @property float $low_quantity + * @property bool $stock_alert_enabled + * @property float $sale_price + * @property float $sale_price_edit + * @property float $sale_price_without_tax + * @property float $sale_price_with_tax + * @property float $sale_price_tax + * @property float $wholesale_price + * @property float $wholesale_price_edit + * @property float $wholesale_price_with_tax + * @property float $wholesale_price_without_tax + * @property float $wholesale_price_tax + * @property float $custom_price + * @property float $custom_price_edit + * @property float $custom_price_with_tax + * @property float $custom_price_without_tax * @property Product $product */ class ProductUnitQuantity extends NsModel @@ -73,57 +73,57 @@ class ProductUnitQuantity extends NsModel /** * Fetch products unique a barcode filter * - * @param QueryBuilder $query - * @param string $reference + * @param QueryBuilder $query + * @param string $reference * @return QueryBuilder **/ - public function scopeBarcode($query, $reference) + public function scopeBarcode( $query, $reference ) { - return $query->where('barcode', $reference); + return $query->where( 'barcode', $reference ); } - public function scopeHidden($query) + public function scopeHidden( $query ) { - return $query->where('visible', false); + return $query->where( 'visible', false ); } - public function scopeVisible($query) + public function scopeVisible( $query ) { - return $query->where('visible', true); + return $query->where( 'visible', true ); } public function unit() { - return $this->hasOne(Unit::class, 'id', 'unit_id'); + return $this->hasOne( Unit::class, 'id', 'unit_id' ); } public function history() { - return $this->hasMany(ProductHistoryCombined::class, 'product_id', 'product_id'); + return $this->hasMany( ProductHistoryCombined::class, 'product_id', 'product_id' ); } public function taxes() { - return $this->hasMany(ProductTax::class, 'unit_quantity_id'); + return $this->hasMany( ProductTax::class, 'unit_quantity_id' ); } - public function scopeWithUnit(Builder $query, $id) + public function scopeWithUnit( Builder $query, $id ) { - return $query->where('unit_id', $id); + return $query->where( 'unit_id', $id ); } public function product() { - return $this->belongsTo(Product::class, 'product_id', 'id'); + return $this->belongsTo( Product::class, 'product_id', 'id' ); } - public function scopeWithProduct(Builder $query, $id) + public function scopeWithProduct( Builder $query, $id ) { - return $query->where('product_id', $id); + return $query->where( 'product_id', $id ); } - public function scopeStockAlertEnabled(Builder $query) + public function scopeStockAlertEnabled( Builder $query ) { - return $query->where('stock_alert_enabled', true); + return $query->where( 'stock_alert_enabled', true ); } } diff --git a/app/Models/Provider.php b/app/Models/Provider.php index ead51dff2..6b88fe788 100644 --- a/app/Models/Provider.php +++ b/app/Models/Provider.php @@ -6,11 +6,11 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property string $uuid - * @property int $author - * @property string $description - * @property float $amount_paid + * @property int $id + * @property string $uuid + * @property int $author + * @property string $description + * @property float $amount_paid * @property \Carbon\Carbon $updated_at */ class Provider extends NsModel @@ -32,6 +32,6 @@ class Provider extends NsModel public function procurements() { - return $this->hasMany(Procurement::class); + return $this->hasMany( Procurement::class ); } } diff --git a/app/Models/Register.php b/app/Models/Register.php index 861fe818b..a01a238be 100644 --- a/app/Models/Register.php +++ b/app/Models/Register.php @@ -5,14 +5,14 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property mixed $name - * @property mixed $status - * @property string $description - * @property int $used_by - * @property int $author - * @property float $balance - * @property mixed $uuid + * @property int $id + * @property mixed $name + * @property mixed $status + * @property string $description + * @property int $used_by + * @property int $author + * @property float $balance + * @property mixed $uuid * @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $updated_at */ @@ -30,33 +30,33 @@ class Register extends NsModel const STATUS_INUSE = 'in-use'; - public function scopeClosed($query) + public function scopeClosed( $query ) { - return $query->where('status', self::STATUS_CLOSED); + return $query->where( 'status', self::STATUS_CLOSED ); } - public function scopeOpened($query) + public function scopeOpened( $query ) { - return $query->where('status', self::STATUS_OPENED); + return $query->where( 'status', self::STATUS_OPENED ); } - public function scopeInUse($query) + public function scopeInUse( $query ) { - return $query->where('status', self::STATUS_INUSE); + return $query->where( 'status', self::STATUS_INUSE ); } - public function scopeDisabled($query) + public function scopeDisabled( $query ) { - return $query->where('status', self::STATUS_DISABLED); + return $query->where( 'status', self::STATUS_DISABLED ); } - public function scopeUsedBy($query, $user) + public function scopeUsedBy( $query, $user ) { - return $query->where('used_by', $user); + return $query->where( 'used_by', $user ); } public function history() { - return $this->hasMany(RegisterHistory::class, 'register_id', 'id'); + return $this->hasMany( RegisterHistory::class, 'register_id', 'id' ); } } diff --git a/app/Models/RegisterHistory.php b/app/Models/RegisterHistory.php index 666438442..b98e0b4d7 100644 --- a/app/Models/RegisterHistory.php +++ b/app/Models/RegisterHistory.php @@ -63,23 +63,23 @@ public function register() ); } - public function scopeWithRegister($query, Register $register) + public function scopeWithRegister( $query, Register $register ) { - return $query->where('register_id', $register->id); + return $query->where( 'register_id', $register->id ); } - public function scopeAction($query, $action) + public function scopeAction( $query, $action ) { - return $query->where('action', $action); + return $query->where( 'action', $action ); } - public function scopeFrom($query, $date) + public function scopeFrom( $query, $date ) { - return $query->where('created_at', '>=', $date); + return $query->where( 'created_at', '>=', $date ); } - public function scopeTo($query, $date) + public function scopeTo( $query, $date ) { - return $query->where('created_at', '<=', $date); + return $query->where( 'created_at', '<=', $date ); } } diff --git a/app/Models/RewardSystem.php b/app/Models/RewardSystem.php index e943a6784..3e4be8d0f 100644 --- a/app/Models/RewardSystem.php +++ b/app/Models/RewardSystem.php @@ -5,11 +5,11 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $coupon_id - * @property string $uuid - * @property float $target - * @property string $description + * @property int $id + * @property int $coupon_id + * @property string $uuid + * @property float $target + * @property string $description * @property \Carbon\Carbon $updated_at */ class RewardSystem extends NsModel @@ -20,11 +20,11 @@ class RewardSystem extends NsModel public function rules() { - return $this->hasMany(RewardSystemRule::class, 'reward_id'); + return $this->hasMany( RewardSystemRule::class, 'reward_id' ); } public function coupon() { - return $this->hasOne(Coupon::class, 'id', 'coupon_id'); + return $this->hasOne( Coupon::class, 'id', 'coupon_id' ); } } diff --git a/app/Models/RewardSystemRule.php b/app/Models/RewardSystemRule.php index f205d9ca0..ab2988a3e 100644 --- a/app/Models/RewardSystemRule.php +++ b/app/Models/RewardSystemRule.php @@ -5,10 +5,10 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property float $reward - * @property int $author - * @property string $uuid + * @property int $id + * @property float $reward + * @property int $author + * @property string $uuid * @property \Carbon\Carbon $updated_at */ class RewardSystemRule extends NsModel @@ -17,13 +17,13 @@ class RewardSystemRule extends NsModel protected $table = 'nexopos_' . 'rewards_system_rules'; - public function scopeAttachedTo($query, $id) + public function scopeAttachedTo( $query, $id ) { - return $query->where('reward_id', $id); + return $query->where( 'reward_id', $id ); } public function reward() { - return $this->belongsTo(RewardSystem::class, 'reward_id'); + return $this->belongsTo( RewardSystem::class, 'reward_id' ); } } diff --git a/app/Models/Role.php b/app/Models/Role.php index a1f268ec3..c793c0dfc 100644 --- a/app/Models/Role.php +++ b/app/Models/Role.php @@ -8,9 +8,9 @@ use Illuminate\Support\Collection; /** - * @property int $total_stores - * @property string $description - * @property bool $locked + * @property int $total_stores + * @property string $description + * @property bool $locked * @property \Carbon\Carbon $updated_at */ class Role extends NsRootModel @@ -76,7 +76,7 @@ public function users() **/ public function user() { - return $this->hasMany(User::class); + return $this->hasMany( User::class ); } /** @@ -84,12 +84,12 @@ public function user() **/ public function permissions(): BelongsToMany { - return $this->belongsToMany(Permission::class, 'nexopos_role_permission'); + return $this->belongsToMany( Permission::class, 'nexopos_role_permission' ); } - public function scopeWithNamespace($query, $param) + public function scopeWithNamespace( $query, $param ) { - return $query->where('namespace', $param); + return $query->where( 'namespace', $param ); } /** @@ -98,21 +98,21 @@ public function scopeWithNamespace($query, $param) * @param string role name * @return Role **/ - public static function namespace($name) + public static function namespace( $name ) { - return self::where('namespace', $name)->first(); + return self::where( 'namespace', $name )->first(); } /** * Filter group matching the array provided as an argument * * @param Query - * @param array $arguments + * @param array $arguments * @return Query */ - public function scopeIn($query, $arguments) + public function scopeIn( $query, $arguments ) { - return $query->whereIn('namespace', $arguments); + return $query->whereIn( 'namespace', $arguments ); } /** @@ -121,65 +121,65 @@ public function scopeIn($query, $arguments) * @param array|string Permissions * @param bool silent */ - public function addPermissions($permissions, $silent = false) + public function addPermissions( $permissions, $silent = false ) { - if (is_string($permissions)) { - $permission = Permission::namespace($permissions); + if ( is_string( $permissions ) ) { + $permission = Permission::namespace( $permissions ); - if ($permission instanceof Permission) { - return self::__createRelation($this, $permission, $silent); + if ( $permission instanceof Permission ) { + return self::__createRelation( $this, $permission, $silent ); } - throw new Exception(sprintf(__('Unable to find the permission with the namespace "%s".'), $permissions)); - } elseif ($permissions instanceof Collection) { + throw new Exception( sprintf( __( 'Unable to find the permission with the namespace "%s".' ), $permissions ) ); + } elseif ( $permissions instanceof Collection ) { /** * looping over provided permissions * and attempt to create a relation */ - $permissions->each(function ($permissionNamespace) { - $this->addPermissions($permissionNamespace); - }); - } elseif (is_array($permissions)) { + $permissions->each( function ( $permissionNamespace ) { + $this->addPermissions( $permissionNamespace ); + } ); + } elseif ( is_array( $permissions ) ) { /** * looping over provided permissions * and attempt to create a relation */ - collect($permissions)->each(function ($permissionNamespace) { - $this->addPermissions($permissionNamespace); - }); - } elseif ($permissions instanceof Permission) { - return $this->addPermissions($permissions->namespace, $silent); + collect( $permissions )->each( function ( $permissionNamespace ) { + $this->addPermissions( $permissionNamespace ); + } ); + } elseif ( $permissions instanceof Permission ) { + return $this->addPermissions( $permissions->namespace, $silent ); } } /** * create relation between role and permissions * - * @param Role $role - * @param Permission $permission - * @param bool $silent + * @param Role $role + * @param Permission $permission + * @param bool $silent * @return void */ - private static function __createRelation($role, $permission, $silent = true) + private static function __createRelation( $role, $permission, $silent = true ) { /** * If we want it to be silent * then we should'nt trigger any error * if the $role is not a valid instance. */ - if (! $role instanceof Role && $silent === false) { + if ( ! $role instanceof Role && $silent === false ) { return; // } - $rolePermission = RolePermission::where('role_id', $role->id) - ->where('permission_id', $permission->id) + $rolePermission = RolePermission::where( 'role_id', $role->id ) + ->where( 'permission_id', $permission->id ) ->first(); /** * if the relation already exists, we'll just skip * that and proceed */ - if (! $rolePermission instanceof RolePermission) { + if ( ! $rolePermission instanceof RolePermission ) { $rolePermission = new RolePermission; $rolePermission->permission_id = $permission->id; $rolePermission->role_id = $role->id; @@ -194,24 +194,24 @@ private static function __createRelation($role, $permission, $silent = true) * @param array of permissions * @return void */ - public function removePermissions($permissionNamespace) + public function removePermissions( $permissionNamespace ) { - if ($permissionNamespace instanceof Collection) { - $permissionNamespace->each(fn($permission) => $this->removePermissions($permission instanceof Permission ? $permission->namespace : $permission)); + if ( $permissionNamespace instanceof Collection ) { + $permissionNamespace->each( fn( $permission ) => $this->removePermissions( $permission instanceof Permission ? $permission->namespace : $permission ) ); } else { - $permission = Permission::where([ 'namespace' => $permissionNamespace ]) + $permission = Permission::where( [ 'namespace' => $permissionNamespace ] ) ->first(); - if ($permission instanceof Permission) { - RolePermission::where([ + if ( $permission instanceof Permission ) { + RolePermission::where( [ 'role_id' => $this->id, 'permission_id' => $permission->id, - ])->delete(); + ] )->delete(); } else { - throw new Exception(sprintf( - __('Unable to remove the permissions "%s". It doesn\'t exists.'), + throw new Exception( sprintf( + __( 'Unable to remove the permissions "%s". It doesn\'t exists.' ), $permissionNamespace - )); + ) ); } } } diff --git a/app/Models/Tax.php b/app/Models/Tax.php index 8416f637f..5c04b1286 100644 --- a/app/Models/Tax.php +++ b/app/Models/Tax.php @@ -5,11 +5,11 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property string $uuid - * @property string $description - * @property float $rate - * @property int $author + * @property int $id + * @property string $uuid + * @property string $description + * @property float $rate + * @property int $author * @property \Carbon\Carbon $updated_at */ class Tax extends NsModel @@ -20,6 +20,6 @@ class Tax extends NsModel public function group() { - $this->belongsTo(Group::class, 'tax_group_id', 'id'); + $this->belongsTo( Group::class, 'tax_group_id', 'id' ); } } diff --git a/app/Models/TaxGroup.php b/app/Models/TaxGroup.php index b79fee873..a6b52acff 100644 --- a/app/Models/TaxGroup.php +++ b/app/Models/TaxGroup.php @@ -6,10 +6,10 @@ use Illuminate\Database\Eloquent\Model; /** - * @property int $id - * @property string $uuid - * @property string $description - * @property int $author + * @property int $id + * @property string $uuid + * @property string $description + * @property int $author * @property \Carbon\Carbon $updated_at */ class TaxGroup extends NsModel @@ -25,6 +25,6 @@ class TaxGroup extends NsModel */ public function taxes() { - return $this->hasMany(Tax::class); + return $this->hasMany( Tax::class ); } } diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php index 9ea923847..2a23439b0 100644 --- a/app/Models/Transaction.php +++ b/app/Models/Transaction.php @@ -5,21 +5,21 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property mixed $name - * @property int $account_id - * @property string $description - * @property int $media_id - * @property float $value - * @property bool $recurring - * @property mixed $type / "income" or "expense" - * @property bool $active - * @property int $group_id - * @property mixed $occurrence - * @property mixed $occurrence_value + * @property int $id + * @property mixed $name + * @property int $account_id + * @property string $description + * @property int $media_id + * @property float $value + * @property bool $recurring + * @property mixed $type / "income" or "expense" + * @property bool $active + * @property int $group_id + * @property mixed $occurrence + * @property mixed $occurrence_value * @property \Carbon\Carbon $scheduled_date - * @property int $author - * @property mixed $uuid + * @property int $author + * @property mixed $uuid * @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $updated_at */ @@ -58,43 +58,43 @@ protected static function boot() { parent::boot(); - static::addGlobalScope('account', function ($builder) { - $builder->with('account'); - }); + static::addGlobalScope( 'account', function ( $builder ) { + $builder->with( 'account' ); + } ); } public function account() { - return $this->belongsTo(TransactionAccount::class, 'account_id'); + return $this->belongsTo( TransactionAccount::class, 'account_id' ); } - public function scopeScheduled($query) + public function scopeScheduled( $query ) { - return $query->where('type', self::TYPE_SCHEDULED); + return $query->where( 'type', self::TYPE_SCHEDULED ); } - public function scopeScheduledAfterDate($query, $date) + public function scopeScheduledAfterDate( $query, $date ) { - return $query->where('scheduled_date', '>=', $date); + return $query->where( 'scheduled_date', '>=', $date ); } - public function scopeScheduledBeforeDate($query, $date) + public function scopeScheduledBeforeDate( $query, $date ) { - return $query->where('scheduled_date', '<=', $date); + return $query->where( 'scheduled_date', '<=', $date ); } - public function scopeRecurring($query) + public function scopeRecurring( $query ) { - return $query->where('recurring', true); + return $query->where( 'recurring', true ); } - public function scopeNotRecurring($query) + public function scopeNotRecurring( $query ) { - return $query->where('recurring', false); + return $query->where( 'recurring', false ); } - public function scopeActive($query) + public function scopeActive( $query ) { - return $query->where('active', true); + return $query->where( 'active', true ); } } diff --git a/app/Models/TransactionAccount.php b/app/Models/TransactionAccount.php index 54b0eefc0..fca6fe3b1 100644 --- a/app/Models/TransactionAccount.php +++ b/app/Models/TransactionAccount.php @@ -5,10 +5,10 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property string $uuid - * @property string $description - * @property int $author + * @property int $id + * @property string $uuid + * @property string $description + * @property int $author * @property \Carbon\Carbon $updated_at */ class TransactionAccount extends NsModel @@ -19,16 +19,16 @@ class TransactionAccount extends NsModel public function transactions() { - return $this->hasMany(Transaction::class, 'account_id'); + return $this->hasMany( Transaction::class, 'account_id' ); } - public function scopeAccount($query, $account) + public function scopeAccount( $query, $account ) { - return $query->where('account', $account); + return $query->where( 'account', $account ); } public function histories() { - return $this->hasMany(TransactionHistory::class, 'transaction_account_id'); + return $this->hasMany( TransactionHistory::class, 'transaction_account_id' ); } } diff --git a/app/Models/TransactionHistory.php b/app/Models/TransactionHistory.php index 856a1587c..dc68efeb4 100644 --- a/app/Models/TransactionHistory.php +++ b/app/Models/TransactionHistory.php @@ -8,19 +8,19 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $transaction_id - * @property mixed $operation - * @property int $transaction_account_id - * @property int $procurement_id - * @property int $order_refund_id - * @property int $order_id - * @property int $register_history_id - * @property int $customer_account_history_id - * @property mixed $name - * @property mixed $status - * @property float $value - * @property int $author + * @property int $id + * @property int $transaction_id + * @property mixed $operation + * @property int $transaction_account_id + * @property int $procurement_id + * @property int $order_refund_id + * @property int $order_id + * @property int $register_history_id + * @property int $customer_account_history_id + * @property mixed $name + * @property mixed $status + * @property float $value + * @property int $author * @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $updated_at */ @@ -91,21 +91,21 @@ class TransactionHistory extends NsModel public function transaction() { - return $this->belongsTo(Transaction::class, 'transaction_id'); + return $this->belongsTo( Transaction::class, 'transaction_id' ); } - public function scopeFrom($query, $date) + public function scopeFrom( $query, $date ) { - return $query->where('created_at', '>=', $date); + return $query->where( 'created_at', '>=', $date ); } - public function scopeOperation($query, $operation) + public function scopeOperation( $query, $operation ) { - return $query->where('operation', $operation); + return $query->where( 'operation', $operation ); } - public function scopeTo($query, $date) + public function scopeTo( $query, $date ) { - return $query->where('created_at', '<=', $date); + return $query->where( 'created_at', '<=', $date ); } } diff --git a/app/Models/Unit.php b/app/Models/Unit.php index 0889d55f6..d75400fb5 100644 --- a/app/Models/Unit.php +++ b/app/Models/Unit.php @@ -5,12 +5,12 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property string $uuid - * @property string $description - * @property int $group_id - * @property float $value - * @property bool $base_unit + * @property int $id + * @property string $uuid + * @property string $description + * @property int $group_id + * @property float $value + * @property bool $base_unit * @property \Carbon\Carbon $updated_at */ class Unit extends NsModel @@ -36,19 +36,19 @@ class Unit extends NsModel public function group() { - return $this->belongsTo(UnitGroup::class, 'group_id'); + return $this->belongsTo( UnitGroup::class, 'group_id' ); } /** * retrieve a unit using a defined * identifier * - * @param Query $query - * @param string $identifier + * @param Query $query + * @param string $identifier * @return Query */ - public function scopeIdentifier($query, $identifier) + public function scopeIdentifier( $query, $identifier ) { - return $query->where('identifier', $identifier); + return $query->where( 'identifier', $identifier ); } } diff --git a/app/Models/UnitGroup.php b/app/Models/UnitGroup.php index 9cd067637..b4f6609f5 100644 --- a/app/Models/UnitGroup.php +++ b/app/Models/UnitGroup.php @@ -5,10 +5,10 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property string $uuid - * @property string $description - * @property int $author + * @property int $id + * @property string $uuid + * @property string $description + * @property int $author * @property \Carbon\Carbon $updated_at */ class UnitGroup extends NsModel @@ -30,6 +30,6 @@ class UnitGroup extends NsModel public function units() { - return $this->hasMany(Unit::class, 'group_id'); + return $this->hasMany( Unit::class, 'group_id' ); } } diff --git a/app/Models/User.php b/app/Models/User.php index aed092d48..b930bf06d 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -12,16 +12,16 @@ use Laravel\Sanctum\HasApiTokens; /** - * @property int $id + * @property int $id * @property string $username - * @property bool $active - * @property int $author + * @property bool $active + * @property int $author * @property string $email * @property string $password * @property string $activation_token * @property string $activation_expiration - * @property int $total_sales_count - * @property float $total_sales + * @property int $total_sales_count + * @property float $total_sales * @property string $remember_token * @property string $created_at * @property string $updated_at @@ -88,9 +88,9 @@ class User extends Authenticatable private $storedPermissions = []; - public function __construct($attributes = []) + public function __construct( $attributes = [] ) { - parent::__construct($attributes); + parent::__construct( $attributes ); } /** @@ -107,7 +107,7 @@ public function freshTimestamp() */ public function attribute(): HasOne { - return $this->hasOne(UserAttribute::class, 'user_id', 'id'); + return $this->hasOne( UserAttribute::class, 'user_id', 'id' ); } /** @@ -128,12 +128,12 @@ public function roles(): HasManyThrough /** * Assign user to a role */ - public function assignRole($roleName) + public function assignRole( $roleName ) { - if ($role = Role::namespace($roleName)) { - $combinaison = UserRoleRelation::combinaison($this, $role)->first(); + if ( $role = Role::namespace( $roleName ) ) { + $combinaison = UserRoleRelation::combinaison( $this, $role )->first(); - if (! $combinaison instanceof UserRoleRelation) { + if ( ! $combinaison instanceof UserRoleRelation ) { $combinaison = new UserRoleRelation; } @@ -143,30 +143,30 @@ public function assignRole($roleName) return [ 'status' => 'success', - 'message' => __('The role was successfully assigned.'), + 'message' => __( 'The role was successfully assigned.' ), ]; - } elseif (is_array($roleName)) { - collect($roleName)->each(fn($role) => $this->assignRole($role)); + } elseif ( is_array( $roleName ) ) { + collect( $roleName )->each( fn( $role ) => $this->assignRole( $role ) ); return [ 'status' => 'success', - 'message' => __('The role were successfully assigned.'), + 'message' => __( 'The role were successfully assigned.' ), ]; } return [ 'status' => 'failed', - 'message' => __('Unable to identifier the provided role.'), + 'message' => __( 'Unable to identifier the provided role.' ), ]; } /** * Quick access to user options */ - public function options($option, $default = null) + public function options( $option, $default = null ) { - $options = new UserOptions($this->id); + $options = new UserOptions( $this->id ); - return $options->get($option, $default); + return $options->get( $option, $default ); } } diff --git a/app/Models/UserAttribute.php b/app/Models/UserAttribute.php index d3b70b5dd..3d97a2eea 100644 --- a/app/Models/UserAttribute.php +++ b/app/Models/UserAttribute.php @@ -5,8 +5,8 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; /** - * @property int $id - * @property int $user_id + * @property int $id + * @property int $user_id * @property mixed $avatar_link * @property mixed $theme * @property mixed $language diff --git a/app/Models/UserRoleRelation.php b/app/Models/UserRoleRelation.php index fe3407998..b5b6c461c 100644 --- a/app/Models/UserRoleRelation.php +++ b/app/Models/UserRoleRelation.php @@ -14,9 +14,9 @@ class UserRoleRelation extends Model use HasFactory; - public function scopeCombinaison($query, $user, $role) + public function scopeCombinaison( $query, $user, $role ) { - return $query->where('user_id', $user->id) - ->where('role_id', $role->id); + return $query->where( 'user_id', $user->id ) + ->where( 'role_id', $role->id ); } } diff --git a/app/Models/UserScope.php b/app/Models/UserScope.php index 54a267acc..95df2f1c1 100644 --- a/app/Models/UserScope.php +++ b/app/Models/UserScope.php @@ -10,24 +10,24 @@ abstract class UserScope extends NsModel * @param Query * @param string email */ - public function scopeByEmail($query, $email) + public function scopeByEmail( $query, $email ) { - return $query->where('email', $email); + return $query->where( 'email', $email ); } /** * Get customers that are currently active. */ - public function scopeActive($query, $active = true) + public function scopeActive( $query, $active = true ) { - return $query->where('active', $active); + return $query->where( 'active', $active ); } /** * get customers from groups */ - public function scopeFromGroup($query, $index) + public function scopeFromGroup( $query, $index ) { - return $query->where('parent_id', $index); + return $query->where( 'parent_id', $index ); } } diff --git a/app/Models/UserWidget.php b/app/Models/UserWidget.php index 4ee03bef1..5979b5854 100644 --- a/app/Models/UserWidget.php +++ b/app/Models/UserWidget.php @@ -7,8 +7,8 @@ use Illuminate\Database\Eloquent\Model; /** - * @property mixed $class_name - * @property int $user_id + * @property mixed $class_name + * @property int $user_id * @property \Carbon\Carbon $updated_at */ class UserWidget extends Model diff --git a/app/Observers/RewardSystemObserver.php b/app/Observers/RewardSystemObserver.php index 7d4ef93a5..212ad3226 100644 --- a/app/Observers/RewardSystemObserver.php +++ b/app/Observers/RewardSystemObserver.php @@ -6,8 +6,8 @@ class RewardSystemObserver { - public function deleting($reward) + public function deleting( $reward ) { - RewardSystemRule::attachedTo($reward->id)->delete(); + RewardSystemRule::attachedTo( $reward->id )->delete(); } } diff --git a/app/Observers/UserObserver.php b/app/Observers/UserObserver.php index 6ec403eb6..d62005608 100644 --- a/app/Observers/UserObserver.php +++ b/app/Observers/UserObserver.php @@ -7,8 +7,8 @@ class UserObserver { - public function retrieved(User $user) + public function retrieved( User $user ) { - $user->options = new UserOptions($user->id); + $user->options = new UserOptions( $user->id ); } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index cb9f344a5..909e74fe5 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -53,192 +53,192 @@ public function register() { include_once base_path() . '/app/Services/HelperFunctions.php'; - $this->app->singleton(Options::class, function () { + $this->app->singleton( Options::class, function () { return new Options; - }); + } ); - $this->app->singleton(MenuService::class, function () { + $this->app->singleton( MenuService::class, function () { return new MenuService; - }); + } ); - $this->app->singleton(UpdateService::class, function () { + $this->app->singleton( UpdateService::class, function () { return new UpdateService; - }); + } ); - $this->app->bind(DemoService::class, function () { + $this->app->bind( DemoService::class, function () { return new DemoService( - app()->make(ProductCategoryService::class), - app()->make(ProductService::class), - app()->make(ProcurementService::class), - app()->make(OrdersService::class) + app()->make( ProductCategoryService::class ), + app()->make( ProductService::class ), + app()->make( ProcurementService::class ), + app()->make( OrdersService::class ) ); - }); + } ); // save Singleton for options - $this->app->singleton(DateService::class, function () { - $options = app()->make(Options::class); - $timeZone = $options->get('ns_datetime_timezone', 'Europe/London'); + $this->app->singleton( DateService::class, function () { + $options = app()->make( Options::class ); + $timeZone = $options->get( 'ns_datetime_timezone', 'Europe/London' ); - return new DateService('now', $timeZone); - }); + return new DateService( 'now', $timeZone ); + } ); - $this->app->singleton(EnvEditor::class, function () { - return new EnvEditor(base_path('.env')); - }); + $this->app->singleton( EnvEditor::class, function () { + return new EnvEditor( base_path( '.env' ) ); + } ); // save Singleton for options - $this->app->singleton(UserOptions::class, function () { - return new UserOptions(Auth::id()); - }); + $this->app->singleton( UserOptions::class, function () { + return new UserOptions( Auth::id() ); + } ); - $this->app->singleton(CashRegistersService::class, function () { + $this->app->singleton( CashRegistersService::class, function () { return new CashRegistersService; - }); + } ); // save Singleton for options - $this->app->singleton(UsersService::class, function () { + $this->app->singleton( UsersService::class, function () { return new UsersService; - }); + } ); // provide media manager - $this->app->singleton(MediaService::class, function () { + $this->app->singleton( MediaService::class, function () { return new MediaService( - dateService: app()->make(DateService::class) + dateService: app()->make( DateService::class ) ); - }); + } ); - $this->app->singleton(CrudService::class, function () { + $this->app->singleton( CrudService::class, function () { return new CrudService; - }); + } ); - $this->app->singleton(BarcodeService::class, function () { + $this->app->singleton( BarcodeService::class, function () { return new BarcodeService; - }); + } ); - $this->app->singleton(ResetService::class, function () { + $this->app->singleton( ResetService::class, function () { return new ResetService; - }); + } ); - $this->app->bind(ReportService::class, function () { + $this->app->bind( ReportService::class, function () { return new ReportService( - app()->make(DateService::class), - app()->make(ProductService::class), + app()->make( DateService::class ), + app()->make( ProductService::class ), ); - }); + } ); - $this->app->singleton(CoreService::class, function () { + $this->app->singleton( CoreService::class, function () { return new CoreService( - app()->make(CurrencyService::class), - app()->make(UpdateService::class), - app()->make(DateService::class), - app()->make(OrdersService::class), - app()->make(NotificationService::class), - app()->make(ProcurementService::class), - app()->make(Options::class), - app()->make(MathService::class), - app()->make(EnvEditor::class), - app()->make(MediaService::class), + app()->make( CurrencyService::class ), + app()->make( UpdateService::class ), + app()->make( DateService::class ), + app()->make( OrdersService::class ), + app()->make( NotificationService::class ), + app()->make( ProcurementService::class ), + app()->make( Options::class ), + app()->make( MathService::class ), + app()->make( EnvEditor::class ), + app()->make( MediaService::class ), ); - }); + } ); - $this->app->bind(ProductCategoryService::class, function ($app) { + $this->app->bind( ProductCategoryService::class, function ( $app ) { return new ProductCategoryService; - }); + } ); - $this->app->bind(TaxService::class, function ($app) { + $this->app->bind( TaxService::class, function ( $app ) { return new TaxService( - $app->make(CurrencyService::class) + $app->make( CurrencyService::class ) ); - }); + } ); - $this->app->bind(CurrencyService::class, function ($app) { - $options = app()->make(Options::class); + $this->app->bind( CurrencyService::class, function ( $app ) { + $options = app()->make( Options::class ); return new CurrencyService( 0, [ - 'decimal_precision' => $options->get('ns_currency_precision', 0), - 'decimal_separator' => $options->get('ns_currency_decimal_separator', ','), - 'thousand_separator' => $options->get('ns_currency_thousand_separator', '.'), - 'currency_position' => $options->get('ns_currency_position', 'before'), - 'currency_symbol' => $options->get('ns_currency_symbol'), - 'currency_iso' => $options->get('ns_currency_iso'), - 'prefered_currency' => $options->get('ns_currency_prefered'), + 'decimal_precision' => $options->get( 'ns_currency_precision', 0 ), + 'decimal_separator' => $options->get( 'ns_currency_decimal_separator', ',' ), + 'thousand_separator' => $options->get( 'ns_currency_thousand_separator', '.' ), + 'currency_position' => $options->get( 'ns_currency_position', 'before' ), + 'currency_symbol' => $options->get( 'ns_currency_symbol' ), + 'currency_iso' => $options->get( 'ns_currency_iso' ), + 'prefered_currency' => $options->get( 'ns_currency_prefered' ), ] ); - }); + } ); - $this->app->bind(ProductService::class, function ($app) { + $this->app->bind( ProductService::class, function ( $app ) { return new ProductService( - $app->make(ProductCategoryService::class), - $app->make(TaxService::class), - $app->make(CurrencyService::class), - $app->make(UnitService::class), - $app->make(BarcodeService::class), + $app->make( ProductCategoryService::class ), + $app->make( TaxService::class ), + $app->make( CurrencyService::class ), + $app->make( UnitService::class ), + $app->make( BarcodeService::class ), ); - }); + } ); - $this->app->singleton(Validation::class, function ($app) { + $this->app->singleton( Validation::class, function ( $app ) { return new Validation; - }); + } ); - $this->app->bind(UnitService::class, function ($app) { + $this->app->bind( UnitService::class, function ( $app ) { return new UnitService( - $app->make(CurrencyService::class) + $app->make( CurrencyService::class ) ); - }); + } ); - $this->app->singleton(ProviderService::class, function ($app) { + $this->app->singleton( ProviderService::class, function ( $app ) { return new ProviderService; - }); + } ); - $this->app->singleton(CustomerService::class, function ($app) { + $this->app->singleton( CustomerService::class, function ( $app ) { return new CustomerService; - }); + } ); - $this->app->bind(TransactionService::class, function ($app) { + $this->app->bind( TransactionService::class, function ( $app ) { return new TransactionService( - app()->make(DateService::class) + app()->make( DateService::class ) ); - }); + } ); - $this->app->bind(OrdersService::class, function ($app) { + $this->app->bind( OrdersService::class, function ( $app ) { return new OrdersService( - customerService: $app->make(CustomerService::class), - productService: $app->make(ProductService::class), - unitService: $app->make(UnitService::class), - dateService: $app->make(DateService::class), - currencyService: $app->make(CurrencyService::class), - optionsService: $app->make(Options::class), - taxService: $app->make(TaxService::class), - reportService: $app->make(ReportService::class), - mathService: $app->make(MathService::class), + customerService: $app->make( CustomerService::class ), + productService: $app->make( ProductService::class ), + unitService: $app->make( UnitService::class ), + dateService: $app->make( DateService::class ), + currencyService: $app->make( CurrencyService::class ), + optionsService: $app->make( Options::class ), + taxService: $app->make( TaxService::class ), + reportService: $app->make( ReportService::class ), + mathService: $app->make( MathService::class ), ); - }); + } ); - $this->app->bind(ProcurementService::class, function ($app) { + $this->app->bind( ProcurementService::class, function ( $app ) { return new ProcurementService( - $app->make(ProviderService::class), - $app->make(UnitService::class), - $app->make(ProductService::class), - $app->make(CurrencyService::class), - $app->make(DateService::class), - $app->make(BarcodeService::class), + $app->make( ProviderService::class ), + $app->make( UnitService::class ), + $app->make( ProductService::class ), + $app->make( CurrencyService::class ), + $app->make( DateService::class ), + $app->make( BarcodeService::class ), ); - }); + } ); - $this->app->singleton(WidgetService::class, function ($app) { + $this->app->singleton( WidgetService::class, function ( $app ) { return new WidgetService( - $app->make(UsersService::class) + $app->make( UsersService::class ) ); - }); + } ); /** * When the module has started, * we can load the configuration. */ - Event::listen(function (ModulesBootedEvent $event) { + Event::listen( function ( ModulesBootedEvent $event ) { $this->loadConfiguration(); - }); + } ); } /** @@ -252,12 +252,12 @@ public function boot() * let's create a default sqlite * database. This file is not tracked by Git. */ - if (! is_file(database_path('database.sqlite'))) { - file_put_contents(database_path('database.sqlite'), ''); + if ( ! is_file( database_path( 'database.sqlite' ) ) ) { + file_put_contents( database_path( 'database.sqlite' ), '' ); } - if (Helper::installed()) { - Schema::defaultStringLength(191); + if ( Helper::installed() ) { + Schema::defaultStringLength( 191 ); } /** @@ -265,13 +265,13 @@ public function boot() * that will help module loading * their Vite assets */ - Blade::directive('moduleViteAssets', function ($expression) { - $params = explode(',', $expression); - $fileName = trim($params[0], "'"); - $module = trim($params[1], " '"); + Blade::directive( 'moduleViteAssets', function ( $expression ) { + $params = explode( ',', $expression ); + $fileName = trim( $params[0], "'" ); + $module = trim( $params[1], " '" ); return "moduleViteAssets( \"{$fileName}\", \"{$module}\" ); ?>"; - }); + } ); } /** @@ -281,44 +281,44 @@ public function boot() */ protected function loadConfiguration() { - config([ 'nexopos.orders.statuses' => [ - Order::PAYMENT_HOLD => __('Hold'), - Order::PAYMENT_UNPAID => __('Unpaid'), - Order::PAYMENT_PARTIALLY => __('Partially Paid'), - Order::PAYMENT_PAID => __('Paid'), - Order::PAYMENT_VOID => __('Voided'), - Order::PAYMENT_REFUNDED => __('Refunded'), - Order::PAYMENT_PARTIALLY_REFUNDED => __('Partially Refunded'), - Order::PAYMENT_DUE => __('Due'), - Order::PAYMENT_PARTIALLY_DUE => __('Partially Due'), - ]]); - - config([ 'nexopos.orders.types' => Hook::filter('ns-orders-types', [ + config( [ 'nexopos.orders.statuses' => [ + Order::PAYMENT_HOLD => __( 'Hold' ), + Order::PAYMENT_UNPAID => __( 'Unpaid' ), + Order::PAYMENT_PARTIALLY => __( 'Partially Paid' ), + Order::PAYMENT_PAID => __( 'Paid' ), + Order::PAYMENT_VOID => __( 'Voided' ), + Order::PAYMENT_REFUNDED => __( 'Refunded' ), + Order::PAYMENT_PARTIALLY_REFUNDED => __( 'Partially Refunded' ), + Order::PAYMENT_DUE => __( 'Due' ), + Order::PAYMENT_PARTIALLY_DUE => __( 'Partially Due' ), + ]] ); + + config( [ 'nexopos.orders.types' => Hook::filter( 'ns-orders-types', [ 'takeaway' => [ 'identifier' => 'takeaway', - 'label' => __('Take Away'), + 'label' => __( 'Take Away' ), 'icon' => '/images/groceries.png', 'selected' => false, ], 'delivery' => [ 'identifier' => 'delivery', - 'label' => __('Delivery'), + 'label' => __( 'Delivery' ), 'icon' => '/images/delivery.png', 'selected' => false, ], - ])]); + ] )] ); - config([ - 'nexopos.orders.types-labels' => collect(config('nexopos.orders.types')) - ->mapWithKeys(fn($type) => [ $type[ 'identifier' ] => $type[ 'label' ] ]) + config( [ + 'nexopos.orders.types-labels' => collect( config( 'nexopos.orders.types' ) ) + ->mapWithKeys( fn( $type ) => [ $type[ 'identifier' ] => $type[ 'label' ] ] ) ->toArray(), - ]); + ] ); - config([ + config( [ 'nexopos.orders.products.refunds' => [ - OrderProductRefund::CONDITION_DAMAGED => __('Damaged'), - OrderProductRefund::CONDITION_UNSPOILED => __('Good Condition'), + OrderProductRefund::CONDITION_DAMAGED => __( 'Damaged' ), + OrderProductRefund::CONDITION_UNSPOILED => __( 'Good Condition' ), ], - ]); + ] ); } } diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 67880f9a7..f9c8069dd 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -23,10 +23,10 @@ class AuthServiceProvider extends ServiceProvider * * @return void */ - public function boot(CoreService $coreService) + public function boot( CoreService $coreService ) { $coreService->registerGatePermissions(); - Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class); + Sanctum::usePersonalAccessTokenModel( PersonalAccessToken::class ); } } diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php index 395c518bc..3c2bdf5aa 100644 --- a/app/Providers/BroadcastServiceProvider.php +++ b/app/Providers/BroadcastServiceProvider.php @@ -16,6 +16,6 @@ public function boot() { Broadcast::routes(); - require base_path('routes/channels.php'); + require base_path( 'routes/channels.php' ); } } diff --git a/app/Providers/CrudServiceProvider.php b/app/Providers/CrudServiceProvider.php index 6eb42074c..0b3d0c580 100644 --- a/app/Providers/CrudServiceProvider.php +++ b/app/Providers/CrudServiceProvider.php @@ -56,26 +56,26 @@ public function register() * every crud class on the system should be * added here in order to be available and supported. */ - Hook::addFilter('ns-crud-resource', function ($namespace) { + Hook::addFilter( 'ns-crud-resource', function ( $namespace ) { /** * We'll attempt autoloading crud that explicitely * defined they want to be autoloaded. We expect classes to have 2 * constant: AUTOLOAD=true, IDENTIFIER=. */ - $classes = Cache::get('crud-classes', function () { - $files = collect(Storage::disk('ns')->files('app/Crud')); + $classes = Cache::get( 'crud-classes', function () { + $files = collect( Storage::disk( 'ns' )->files( 'app/Crud' ) ); - return $files->map(fn($file) => 'App\Crud\\' . pathinfo($file)[ 'filename' ]) - ->filter(fn($class) => (defined($class . '::AUTOLOAD') && defined($class . '::IDENTIFIER'))); - }); + return $files->map( fn( $file ) => 'App\Crud\\' . pathinfo( $file )[ 'filename' ] ) + ->filter( fn( $class ) => ( defined( $class . '::AUTOLOAD' ) && defined( $class . '::IDENTIFIER' ) ) ); + } ); /** * We pull the cached classes and checks if the * class has autoload and identifier defined. */ - $class = collect($classes)->filter(fn($class) => $class::AUTOLOAD && $class::IDENTIFIER === $namespace); + $class = collect( $classes )->filter( fn( $class ) => $class::AUTOLOAD && $class::IDENTIFIER === $namespace ); - if ($class->count() === 1) { + if ( $class->count() === 1 ) { return $class->first(); } @@ -85,34 +85,34 @@ public function register() * * @var ModulesService $modulesService */ - $modulesService = app()->make(ModulesService::class); + $modulesService = app()->make( ModulesService::class ); - $classes = collect($modulesService->getEnabled())->map(function ($module) use ($namespace) { - $classes = Cache::get('modules-crud-classes-' . $module[ 'namespace' ], function () use ($module) { - $files = collect(Storage::disk('ns')->files('modules' . DIRECTORY_SEPARATOR . $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Crud')); + $classes = collect( $modulesService->getEnabled() )->map( function ( $module ) use ( $namespace ) { + $classes = Cache::get( 'modules-crud-classes-' . $module[ 'namespace' ], function () use ( $module ) { + $files = collect( Storage::disk( 'ns' )->files( 'modules' . DIRECTORY_SEPARATOR . $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Crud' ) ); - return $files->map(fn($file) => 'Modules\\' . $module[ 'namespace' ] . '\Crud\\' . pathinfo($file)[ 'filename' ]) - ->filter(fn($class) => (defined($class . '::AUTOLOAD') && defined($class . '::IDENTIFIER'))); - }); + return $files->map( fn( $file ) => 'Modules\\' . $module[ 'namespace' ] . '\Crud\\' . pathinfo( $file )[ 'filename' ] ) + ->filter( fn( $class ) => ( defined( $class . '::AUTOLOAD' ) && defined( $class . '::IDENTIFIER' ) ) ); + } ); /** * We pull the cached classes and checks if the * class has autoload and identifier defined. */ - $class = collect($classes)->filter(fn($class) => $class::AUTOLOAD && $class::IDENTIFIER === $namespace); + $class = collect( $classes )->filter( fn( $class ) => $class::AUTOLOAD && $class::IDENTIFIER === $namespace ); - if ($class->count() === 1) { + if ( $class->count() === 1 ) { return $class->first(); } return false; - })->filter(); + } )->filter(); /** * If the namespace match a module crud instance, * we'll use that first result */ - if ($classes->isNotEmpty()) { + if ( $classes->isNotEmpty() ) { return $classes->flatten()->first(); } @@ -120,7 +120,7 @@ public function register() * We'll still allow users to define crud * manually from this section. */ - return match ($namespace) { + return match ( $namespace ) { 'ns.orders' => OrderCrud::class, 'ns.orders-instalments' => OrderInstalmentCrud::class, 'ns.payments-types' => PaymentTypeCrud::class, @@ -158,6 +158,6 @@ public function register() 'ns.providers-products' => ProviderProductsCrud::class, default => $namespace, }; - }); + } ); } } diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index c2f5908aa..0594bd0ef 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -39,13 +39,13 @@ protected function discoverEventsWithin() /** * @var ModulesService */ - $modulesServices = app()->make(ModulesService::class); + $modulesServices = app()->make( ModulesService::class ); - $paths = collect($modulesServices->getEnabled())->map(function ($module) { - return base_path('modules' . DIRECTORY_SEPARATOR . $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Listeners'); - }) + $paths = collect( $modulesServices->getEnabled() )->map( function ( $module ) { + return base_path( 'modules' . DIRECTORY_SEPARATOR . $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Listeners' ); + } ) ->values() - ->push($this->app->path('Listeners')) + ->push( $this->app->path( 'Listeners' ) ) ->toArray(); return $paths; @@ -58,7 +58,7 @@ protected function discoverEventsWithin() */ public function boot() { - Hook::addFilter('ns-dashboard-menus', [ MenusFilter::class, 'injectRegisterMenus' ]); + Hook::addFilter( 'ns-dashboard-menus', [ MenusFilter::class, 'injectRegisterMenus' ] ); } public function shouldDiscoverEvents() diff --git a/app/Providers/FormsProvider.php b/app/Providers/FormsProvider.php index 9e145ae1a..f73697cf4 100644 --- a/app/Providers/FormsProvider.php +++ b/app/Providers/FormsProvider.php @@ -48,8 +48,8 @@ public function register() */ public function boot() { - Hook::addFilter('ns.forms', function ($class, $identifier) { - switch ($identifier) { + Hook::addFilter( 'ns.forms', function ( $class, $identifier ) { + switch ( $identifier ) { case 'ns.user-profile': return new UserProfileForm; break; @@ -62,10 +62,10 @@ public function boot() } return $class; - }, 10, 2); + }, 10, 2 ); - Hook::addFilter('ns.fields', function ($class, $identifier) { - switch ($class) { + Hook::addFilter( 'ns.fields', function ( $class, $identifier ) { + switch ( $class ) { case AuthLoginFields::getIdentifier(): return new AuthLoginFields; break; @@ -133,6 +133,6 @@ public function boot() return $class; break; } - }, 10, 2); + }, 10, 2 ); } } diff --git a/app/Providers/LocalizationServiceProvider.php b/app/Providers/LocalizationServiceProvider.php index ee1d55103..132eb5057 100644 --- a/app/Providers/LocalizationServiceProvider.php +++ b/app/Providers/LocalizationServiceProvider.php @@ -17,9 +17,9 @@ class LocalizationServiceProvider extends ServiceProvider */ public function register() { - Event::listen(function (LocaleDefinedEvent $event) { + Event::listen( function ( LocaleDefinedEvent $event ) { $this->loadModuleLocale(); - }); + } ); } /** @@ -34,23 +34,23 @@ public function boot() protected function loadModuleLocale() { - $moduleService = app()->make(ModulesService::class); + $moduleService = app()->make( ModulesService::class ); $active = $moduleService->getEnabled(); - foreach ($active as $module) { + foreach ( $active as $module ) { if ( - isset($module[ 'langFiles' ]) && - isset($module[ 'langFiles' ][ app()->getLocale() ]) && - Storage::disk('ns-modules')->exists($module[ 'langFiles' ][ app()->getLocale() ]) + isset( $module[ 'langFiles' ] ) && + isset( $module[ 'langFiles' ][ app()->getLocale() ] ) && + Storage::disk( 'ns-modules' )->exists( $module[ 'langFiles' ][ app()->getLocale() ] ) ) { - $locales = json_decode(file_get_contents(base_path('modules' . DIRECTORY_SEPARATOR . $module[ 'langFiles' ][ app()->getLocale() ])), true); - $newLocales = collect($locales)->mapWithKeys(function ($value, $key) use ($module) { + $locales = json_decode( file_get_contents( base_path( 'modules' . DIRECTORY_SEPARATOR . $module[ 'langFiles' ][ app()->getLocale() ] ) ), true ); + $newLocales = collect( $locales )->mapWithKeys( function ( $value, $key ) use ( $module ) { $key = $module[ 'namespace' ] . '.' . $key; return [ $key => $value ]; - })->toArray(); + } )->toArray(); - app('translator')->addLines($newLocales, app()->getLocale()); + app( 'translator' )->addLines( $newLocales, app()->getLocale() ); } } } diff --git a/app/Providers/ModulesServiceProvider.php b/app/Providers/ModulesServiceProvider.php index a79dc540b..372bce3f6 100644 --- a/app/Providers/ModulesServiceProvider.php +++ b/app/Providers/ModulesServiceProvider.php @@ -19,17 +19,17 @@ class ModulesServiceProvider extends ServiceProvider * * @return void */ - public function boot(ModulesService $modules) + public function boot( ModulesService $modules ) { /** * trigger boot method only for enabled modules * service providers that extends ModulesServiceProvider. */ - collect($modules->getEnabled())->each(function ($module) use ($modules) { - $modules->triggerServiceProviders($module, 'boot', ServiceProvider::class); - }); + collect( $modules->getEnabled() )->each( function ( $module ) use ( $modules ) { + $modules->triggerServiceProviders( $module, 'boot', ServiceProvider::class ); + } ); - $this->commands($this->modulesCommands); + $this->commands( $this->modulesCommands ); /** * trigger an event when all the module @@ -45,10 +45,10 @@ public function boot(ModulesService $modules) */ public function register() { - $this->app->singleton(ModulesService::class, function ($app) { + $this->app->singleton( ModulesService::class, function ( $app ) { $this->modules = new ModulesService; - if (Helper::installed(true)) { + if ( Helper::installed( true ) ) { $this->modules->load(); /** @@ -64,22 +64,22 @@ public function register() * trigger register method only for enabled modules * service providers that extends ModulesServiceProvider. */ - collect($this->modules->getEnabled())->each(function ($module) { + collect( $this->modules->getEnabled() )->each( function ( $module ) { /** * register module commands */ $this->modulesCommands = array_merge( $this->modulesCommands, - array_keys($module[ 'commands' ]) + array_keys( $module[ 'commands' ] ) ); - $this->modules->triggerServiceProviders($module, 'register', ServiceProvider::class); - }); + $this->modules->triggerServiceProviders( $module, 'register', ServiceProvider::class ); + } ); - event(new ModulesLoadedEvent($this->modules->get())); + event( new ModulesLoadedEvent( $this->modules->get() ) ); } return $this->modules; - }); + } ); } } diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 3e5f54609..ad859c2f5 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -34,8 +34,8 @@ class RouteServiceProvider extends ServiceProvider */ public function boot() { - if (request()->header('x-forwarded-proto') === 'https') { - URL::forceScheme('https'); + if ( request()->header( 'x-forwarded-proto' ) === 'https' ) { + URL::forceScheme( 'https' ); } parent::boot(); @@ -64,9 +64,9 @@ public function map() */ protected function mapWebRoutes() { - Route::middleware('web') - ->namespace($this->namespace) - ->group(base_path('routes/web.php')); + Route::middleware( 'web' ) + ->namespace( $this->namespace ) + ->group( base_path( 'routes/web.php' ) ); } /** @@ -78,10 +78,10 @@ protected function mapWebRoutes() */ protected function mapApiRoutes() { - Route::prefix('api') - ->middleware('api') - ->namespace($this->namespace) - ->group(base_path('routes/api.php')); + Route::prefix( 'api' ) + ->middleware( 'api' ) + ->namespace( $this->namespace ) + ->group( base_path( 'routes/api.php' ) ); } /** @@ -94,9 +94,9 @@ protected function mapApiRoutes() protected function mapModulesRoutes() { // make module class - $Modules = app()->make(ModulesService::class); + $Modules = app()->make( ModulesService::class ); - foreach ($Modules->getEnabled() as $module) { + foreach ( $Modules->getEnabled() as $module ) { /** * We might check if the module is active */ @@ -105,69 +105,69 @@ protected function mapModulesRoutes() /** * @deprecated this inclusion seems useless now */ - $controllers = Storage::disk('ns-modules')->files($module[ 'controllers-relativePath' ]); + $controllers = Storage::disk( 'ns-modules' )->files( $module[ 'controllers-relativePath' ] ); - foreach ($controllers as $controller) { - $fileInfo = pathinfo($controller); - if ($fileInfo[ 'extension' ] == 'php') { - include_once base_path('modules') . DIRECTORY_SEPARATOR . $controller; + foreach ( $controllers as $controller ) { + $fileInfo = pathinfo( $controller ); + if ( $fileInfo[ 'extension' ] == 'php' ) { + include_once base_path( 'modules' ) . DIRECTORY_SEPARATOR . $controller; } } - $domain = pathinfo(env('APP_URL')); + $domain = pathinfo( env( 'APP_URL' ) ); /** * will load all web.php file as dashboard routes. */ - if ($module[ 'routes-file' ] !== false) { - if (env('NS_WILDCARD_ENABLED')) { + if ( $module[ 'routes-file' ] !== false ) { + if ( env( 'NS_WILDCARD_ENABLED' ) ) { /** * The defined route should only be applicable * to the main domain. */ - $domainString = ($domain[ 'filename' ] ?: 'localhost') . (isset($domain[ 'extension' ]) ? '.' . $domain[ 'extension' ] : ''); + $domainString = ( $domain[ 'filename' ] ?: 'localhost' ) . ( isset( $domain[ 'extension' ] ) ? '.' . $domain[ 'extension' ] : '' ); - Route::domain($domainString)->group(function () use ($module) { - $this->mapModuleWebRoutes($module); - }); + Route::domain( $domainString )->group( function () use ( $module ) { + $this->mapModuleWebRoutes( $module ); + } ); } else { - $this->mapModuleWebRoutes($module); + $this->mapModuleWebRoutes( $module ); } } /** * will load api.php file has api file */ - if ($module[ 'api-file' ] !== false) { - if (env('NS_WILDCARD_ENABLED')) { + if ( $module[ 'api-file' ] !== false ) { + if ( env( 'NS_WILDCARD_ENABLED' ) ) { /** * The defined route should only be applicable * to the main domain. */ - $domainString = ($domain[ 'filename' ] ?: 'localhost') . (isset($domain[ 'extension' ]) ? '.' . $domain[ 'extension' ] : ''); + $domainString = ( $domain[ 'filename' ] ?: 'localhost' ) . ( isset( $domain[ 'extension' ] ) ? '.' . $domain[ 'extension' ] : '' ); - Route::domain($domainString)->group(function () use ($module) { - $this->mapModuleApiRoutes($module); - }); + Route::domain( $domainString )->group( function () use ( $module ) { + $this->mapModuleApiRoutes( $module ); + } ); } else { - $this->mapModuleApiRoutes($module); + $this->mapModuleApiRoutes( $module ); } } } } - public function mapModuleWebRoutes($module) + public function mapModuleWebRoutes( $module ) { - Route::middleware([ 'web', 'ns.installed', 'ns.check-application-health', CheckMigrationStatus::class ]) - ->namespace('Modules\\' . $module[ 'namespace' ] . '\Http\Controllers') - ->group($module[ 'routes-file' ]); + Route::middleware( [ 'web', 'ns.installed', 'ns.check-application-health', CheckMigrationStatus::class ] ) + ->namespace( 'Modules\\' . $module[ 'namespace' ] . '\Http\Controllers' ) + ->group( $module[ 'routes-file' ] ); } - public function mapModuleApiRoutes($module) + public function mapModuleApiRoutes( $module ) { - Route::prefix('api/') - ->middleware([ 'ns.installed', 'api' ]) - ->namespace('Modules\\' . $module[ 'namespace' ] . '\Http\Controllers') - ->group($module[ 'api-file' ]); + Route::prefix( 'api/' ) + ->middleware( [ 'ns.installed', 'api' ] ) + ->namespace( 'Modules\\' . $module[ 'namespace' ] . '\Http\Controllers' ) + ->group( $module[ 'api-file' ] ); } } diff --git a/app/Providers/SettingsPageProvider.php b/app/Providers/SettingsPageProvider.php index ef7b826b9..74ca7e2cb 100644 --- a/app/Providers/SettingsPageProvider.php +++ b/app/Providers/SettingsPageProvider.php @@ -27,19 +27,19 @@ public function register() */ public function boot() { - Hook::addFilter('ns.settings', function ($class, $identifier) { - $classes = Cache::get('crud-classes', function () use ($identifier) { - $files = collect(Storage::disk('ns')->files('app/Settings')); + Hook::addFilter( 'ns.settings', function ( $class, $identifier ) { + $classes = Cache::get( 'crud-classes', function () use ( $identifier ) { + $files = collect( Storage::disk( 'ns' )->files( 'app/Settings' ) ); - return $files->map(fn($file) => 'App\Settings\\' . pathinfo($file)[ 'filename' ]) - ->filter(fn($class) => (defined($class . '::AUTOLOAD') && defined($class . '::IDENTIFIER') && $class::IDENTIFIER === $identifier && $class::AUTOLOAD === true)); - }); + return $files->map( fn( $file ) => 'App\Settings\\' . pathinfo( $file )[ 'filename' ] ) + ->filter( fn( $class ) => ( defined( $class . '::AUTOLOAD' ) && defined( $class . '::IDENTIFIER' ) && $class::IDENTIFIER === $identifier && $class::AUTOLOAD === true ) ); + } ); /** * If there is a match, we'll return * the first class that matches. */ - if ($classes->isNotEmpty()) { + if ( $classes->isNotEmpty() ) { $className = $classes->first(); return new $className; @@ -51,40 +51,40 @@ public function boot() * * @var ModulesService $modulesService */ - $modulesService = app()->make(ModulesService::class); + $modulesService = app()->make( ModulesService::class ); - $classes = collect($modulesService->getEnabled())->map(function ($module) use ($identifier) { - $classes = Cache::get('modules-crud-classes-' . $module[ 'namespace' ], function () use ($module) { - $files = collect(Storage::disk('ns')->files('modules' . DIRECTORY_SEPARATOR . $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Settings')); + $classes = collect( $modulesService->getEnabled() )->map( function ( $module ) use ( $identifier ) { + $classes = Cache::get( 'modules-crud-classes-' . $module[ 'namespace' ], function () use ( $module ) { + $files = collect( Storage::disk( 'ns' )->files( 'modules' . DIRECTORY_SEPARATOR . $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Settings' ) ); - return $files->map(fn($file) => 'Modules\\' . $module[ 'namespace' ] . '\Settings\\' . pathinfo($file)[ 'filename' ]) - ->filter(fn($class) => (defined($class . '::AUTOLOAD') && defined($class . '::IDENTIFIER'))); - }); + return $files->map( fn( $file ) => 'Modules\\' . $module[ 'namespace' ] . '\Settings\\' . pathinfo( $file )[ 'filename' ] ) + ->filter( fn( $class ) => ( defined( $class . '::AUTOLOAD' ) && defined( $class . '::IDENTIFIER' ) ) ); + } ); /** * We pull the cached classes and checks if the * class has autoload and identifier defined. */ - $class = collect($classes)->filter(fn($class) => $class::AUTOLOAD && $class::IDENTIFIER === $identifier); + $class = collect( $classes )->filter( fn( $class ) => $class::AUTOLOAD && $class::IDENTIFIER === $identifier ); - if ($class->count() === 1) { + if ( $class->count() === 1 ) { return $class->first(); } return false; - })->filter(); + } )->filter(); /** * If there is a match, we'll return * the first class that matches. */ - if ($classes->isNotEmpty()) { + if ( $classes->isNotEmpty() ) { $className = $classes->first(); return new $className; } return $class; - }, 10, 2); + }, 10, 2 ); } } diff --git a/app/Providers/TelescopeServiceProvider.php b/app/Providers/TelescopeServiceProvider.php index 978e34e8e..9d7551f3d 100644 --- a/app/Providers/TelescopeServiceProvider.php +++ b/app/Providers/TelescopeServiceProvider.php @@ -18,8 +18,8 @@ public function register(): void $this->hideSensitiveRequestDetails(); - Telescope::filter(function (IncomingEntry $entry) { - if ($this->app->environment('local')) { + Telescope::filter( function ( IncomingEntry $entry ) { + if ( $this->app->environment( 'local' ) ) { return true; } @@ -28,7 +28,7 @@ public function register(): void $entry->isFailedJob() || $entry->isScheduledTask() || $entry->hasMonitoredTag(); - }); + } ); } /** @@ -36,17 +36,17 @@ public function register(): void */ protected function hideSensitiveRequestDetails(): void { - if ($this->app->environment('local')) { + if ( $this->app->environment( 'local' ) ) { return; } - Telescope::hideRequestParameters(['_token']); + Telescope::hideRequestParameters( ['_token'] ); - Telescope::hideRequestHeaders([ + Telescope::hideRequestHeaders( [ 'cookie', 'x-csrf-token', 'x-xsrf-token', - ]); + ] ); } /** @@ -56,10 +56,10 @@ protected function hideSensitiveRequestDetails(): void */ protected function gate(): void { - Gate::define('viewTelescope', function ($user) { - return in_array($user->email, [ + Gate::define( 'viewTelescope', function ( $user ) { + return in_array( $user->email, [ // - ]); - }); + ] ); + } ); } } diff --git a/app/Providers/WidgetsServiceProvider.php b/app/Providers/WidgetsServiceProvider.php index fee9a7ddd..dd514f27b 100644 --- a/app/Providers/WidgetsServiceProvider.php +++ b/app/Providers/WidgetsServiceProvider.php @@ -12,7 +12,7 @@ public function boot() /** * @var WidgetService $widgetService */ - $widgetService = app()->make(WidgetService::class); + $widgetService = app()->make( WidgetService::class ); $widgetService->bootWidgetsAreas(); } diff --git a/app/Services/BarcodeService.php b/app/Services/BarcodeService.php index a66bfaafc..6d01c3fc5 100644 --- a/app/Services/BarcodeService.php +++ b/app/Services/BarcodeService.php @@ -32,9 +32,9 @@ class BarcodeService * Will generate code * for provided barcode type */ - public function generate(string $type): string + public function generate( string $type ): string { - return $this->generateRandomBarcode($type); + return $this->generateRandomBarcode( $type ); } /** @@ -42,12 +42,12 @@ public function generate(string $type): string * * @return string generated code. */ - public function generateRandomBarcode($code): string + public function generateRandomBarcode( $code ): string { $factory = Factory::create(); do { - switch ($code) { + switch ( $code ) { case self::TYPE_EAN8: $barcode = $factory->ean8(); break; @@ -57,24 +57,24 @@ public function generateRandomBarcode($code): string case self::TYPE_CODABAR: case self::TYPE_CODE128: case self::TYPE_CODE39: - $barcode = Str::random(10); + $barcode = Str::random( 10 ); break; case self::TYPE_CODE11: - $barcode = rand(1000000000, 999999999); + $barcode = rand( 1000000000, 999999999 ); break; case self::TYPE_UPCA: - $barcode = rand(10000000000, 99999999999); + $barcode = rand( 10000000000, 99999999999 ); break; case self::TYPE_UPCA: - $barcode = rand(1000000, 9999999); + $barcode = rand( 1000000, 9999999 ); break; default: $barcode = $factory->isbn10(); break; } - $product = Product::where('barcode', $barcode)->first(); - } while ($product instanceof Product); + $product = Product::where( 'barcode', $barcode )->first(); + } while ( $product instanceof Product ); return $barcode; } @@ -82,15 +82,15 @@ public function generateRandomBarcode($code): string /** * generate barcode using a code and a code type * - * @param string $barcode - * @param string $type + * @param string $barcode + * @param string $type * @return void */ - public function generateBarcode($barcode, $type) + public function generateBarcode( $barcode, $type ) { $generator = new BarcodeGeneratorPNG; - switch ($type) { + switch ( $type ) { case 'ean8': $realType = $generator::TYPE_EAN_8; break; case 'ean13': $realType = $generator::TYPE_EAN_13; @@ -112,16 +112,19 @@ public function generateBarcode($barcode, $type) } try { - Storage::disk('public')->put( - Hook::filter('ns-media-path', 'products/barcodes/' . $barcode . '.png'), - $generator->getBarcode($barcode, $realType, 3, 30) + Storage::disk( 'public' )->put( + Hook::filter( 'ns-media-path', 'products/barcodes/' . $barcode . '.png' ), + $generator->getBarcode( $barcode, $realType, 3, 30 ) ); - } catch (Exception $exception) { + } catch ( Exception $exception ) { + $insight = ( $exception->getMessage() ?: __( 'N/A' ) ); + throw new Exception( sprintf( - __('An error has occurred while creating a barcode "%s" using the type "%s" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N/A'))), + __( 'An error has occurred while creating a barcode "%s" using the type "%s" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s' ), $barcode, - $realType + $realType, + $insight ) ); } @@ -130,19 +133,19 @@ public function generateBarcode($barcode, $type) /** * @deprecated */ - public function generateBarcodeValue($type) + public function generateBarcodeValue( $type ) { - $faker = (new Factory)->create(); - - switch ($type) { - case self::TYPE_CODE39: return strtoupper(Str::random(10)); - case self::TYPE_CODE128: return strtoupper(Str::random(10)); - case self::TYPE_EAN8: return $faker->randomNumber(8, true); - case self::TYPE_EAN13: return $faker->randomNumber(6, true) . $faker->randomNumber(6, true); - case self::TYPE_UPCA: return $faker->randomNumber(5, true) . $faker->randomNumber(6, true); - case self::TYPE_UPCE: return $faker->randomNumber(6, true); - case self::TYPE_CODABAR: return $faker->randomNumber(8, true) . $faker->randomNumber(8, true); - case self::TYPE_CODE11: return $faker->randomNumber(5, true) . '-' . $faker->randomNumber(4, true); + $faker = ( new Factory )->create(); + + switch ( $type ) { + case self::TYPE_CODE39: return strtoupper( Str::random( 10 ) ); + case self::TYPE_CODE128: return strtoupper( Str::random( 10 ) ); + case self::TYPE_EAN8: return $faker->randomNumber( 8, true ); + case self::TYPE_EAN13: return $faker->randomNumber( 6, true ) . $faker->randomNumber( 6, true ); + case self::TYPE_UPCA: return $faker->randomNumber( 5, true ) . $faker->randomNumber( 6, true ); + case self::TYPE_UPCE: return $faker->randomNumber( 6, true ); + case self::TYPE_CODABAR: return $faker->randomNumber( 8, true ) . $faker->randomNumber( 8, true ); + case self::TYPE_CODE11: return $faker->randomNumber( 5, true ) . '-' . $faker->randomNumber( 4, true ); } } } diff --git a/app/Services/CashRegistersService.php b/app/Services/CashRegistersService.php index 75053dc6c..1e557ed71 100644 --- a/app/Services/CashRegistersService.php +++ b/app/Services/CashRegistersService.php @@ -11,12 +11,12 @@ class CashRegistersService { - public function openRegister(Register $register, $amount, $description) + public function openRegister( Register $register, $amount, $description ) { - if ($register->status !== Register::STATUS_CLOSED) { + if ( $register->status !== Register::STATUS_CLOSED ) { throw new NotAllowedException( sprintf( - __('Unable to open "%s" *, as it\'s not closed.'), + __( 'Unable to open "%s" *, as it\'s not closed.' ), $register->name ) ); @@ -33,12 +33,12 @@ public function openRegister(Register $register, $amount, $description) $registerHistory->description = $description; $registerHistory->balance_before = $register->balance; $registerHistory->value = $amount; - $registerHistory->balance_after = ns()->currency->define($register->balance)->additionateBy($amount)->getRaw(); + $registerHistory->balance_after = ns()->currency->define( $register->balance )->additionateBy( $amount )->getRaw(); $registerHistory->save(); return [ 'status' => 'success', - 'message' => __('The register has been successfully opened'), + 'message' => __( 'The register has been successfully opened' ), 'data' => [ 'register' => $register, 'history' => $registerHistory, @@ -46,18 +46,18 @@ public function openRegister(Register $register, $amount, $description) ]; } - public function closeRegister(Register $register, $amount, $description) + public function closeRegister( Register $register, $amount, $description ) { - if ($register->status !== Register::STATUS_OPENED) { + if ( $register->status !== Register::STATUS_OPENED ) { throw new NotAllowedException( sprintf( - __('Unable to open "%s" *, as it\'s not opened.'), + __( 'Unable to open "%s" *, as it\'s not opened.' ), $register->name ) ); } - if ((float) $register->balance === (float) $amount) { + if ( (float) $register->balance === (float) $amount ) { $diffType = 'unchanged'; } else { $diffType = $register->balance < (float) $amount ? 'positive' : 'negative'; @@ -67,8 +67,8 @@ public function closeRegister(Register $register, $amount, $description) $registerHistory->register_id = $register->id; $registerHistory->action = RegisterHistory::ACTION_CLOSING; $registerHistory->transaction_type = $diffType; - $registerHistory->balance_after = ns()->currency->define($register->balance)->subtractBy($amount)->getRaw(); - $registerHistory->value = ns()->currency->define($amount)->getRaw(); + $registerHistory->balance_after = ns()->currency->define( $register->balance )->subtractBy( $amount )->getRaw(); + $registerHistory->value = ns()->currency->define( $amount )->getRaw(); $registerHistory->balance_before = $register->balance; $registerHistory->author = Auth::id(); $registerHistory->description = $description; @@ -81,7 +81,7 @@ public function closeRegister(Register $register, $amount, $description) return [ 'status' => 'success', - 'message' => __('The register has been successfully closed'), + 'message' => __( 'The register has been successfully closed' ), 'data' => [ 'register' => $register, 'history' => $registerHistory, @@ -89,19 +89,19 @@ public function closeRegister(Register $register, $amount, $description) ]; } - public function cashIn(Register $register, float $amount, ?string $description): array + public function cashIn( Register $register, float $amount, ?string $description ): array { - if ($register->status !== Register::STATUS_OPENED) { + if ( $register->status !== Register::STATUS_OPENED ) { throw new NotAllowedException( sprintf( - __('Unable to cashing on "%s" *, as it\'s not opened.'), + __( 'Unable to cashing on "%s" *, as it\'s not opened.' ), $register->name ) ); } - if ($amount <= 0) { - throw new NotAllowedException(__('The provided amount is not allowed. The amount should be greater than "0". ')); + if ( $amount <= 0 ) { + throw new NotAllowedException( __( 'The provided amount is not allowed. The amount should be greater than "0". ' ) ); } $registerHistory = new RegisterHistory; @@ -110,13 +110,13 @@ public function cashIn(Register $register, float $amount, ?string $description): $registerHistory->author = Auth::id(); $registerHistory->description = $description; $registerHistory->balance_before = $register->balance; - $registerHistory->value = ns()->currency->define($amount)->getRaw(); - $registerHistory->balance_after = ns()->currency->define($register->balance)->additionateBy($amount)->getRaw(); + $registerHistory->value = ns()->currency->define( $amount )->getRaw(); + $registerHistory->balance_after = ns()->currency->define( $register->balance )->additionateBy( $amount )->getRaw(); $registerHistory->save(); return [ 'status' => 'success', - 'message' => __('The cash has successfully been stored'), + 'message' => __( 'The cash has successfully been stored' ), 'data' => [ 'register' => $register, 'history' => $registerHistory, @@ -124,14 +124,14 @@ public function cashIn(Register $register, float $amount, ?string $description): ]; } - public function saleDelete(Register $register, float $amount, string $description): array + public function saleDelete( Register $register, float $amount, string $description ): array { - if ($register->balance - $amount < 0) { + if ( $register->balance - $amount < 0 ) { throw new NotAllowedException( sprintf( - __('Not enough fund to delete a sale from "%s". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.'), + __( 'Not enough fund to delete a sale from "%s". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.' ), $register->name, - trim((string) ns()->currency->define($amount)) + trim( (string) ns()->currency->define( $amount ) ) ) ); } @@ -142,13 +142,13 @@ public function saleDelete(Register $register, float $amount, string $descriptio $registerHistory->author = Auth::id(); $registerHistory->description = $description; $registerHistory->balance_before = $register->balance; - $registerHistory->value = ns()->currency->define($amount)->getRaw(); - $registerHistory->balance_after = ns()->currency->define($register->balance)->subtractBy($amount)->getRaw(); + $registerHistory->value = ns()->currency->define( $amount )->getRaw(); + $registerHistory->balance_after = ns()->currency->define( $register->balance )->subtractBy( $amount )->getRaw(); $registerHistory->save(); return [ 'status' => 'success', - 'message' => __('The cash has successfully been stored'), + 'message' => __( 'The cash has successfully been stored' ), 'data' => [ 'register' => $register, 'history' => $registerHistory, @@ -156,28 +156,28 @@ public function saleDelete(Register $register, float $amount, string $descriptio ]; } - public function cashOut(Register $register, float $amount, ?string $description): array + public function cashOut( Register $register, float $amount, ?string $description ): array { - if ($register->status !== Register::STATUS_OPENED) { + if ( $register->status !== Register::STATUS_OPENED ) { throw new NotAllowedException( sprintf( - __('Unable to cashout on "%s", as it\'s not opened.'), + __( 'Unable to cashout on "%s", as it\'s not opened.' ), $register->name ) ); } - if ($register->balance - $amount < 0) { + if ( $register->balance - $amount < 0 ) { throw new NotAllowedException( sprintf( - __('Not enough fund to cash out.'), + __( 'Not enough fund to cash out.' ), $register->name ) ); } - if ($amount <= 0) { - throw new NotAllowedException(__('The provided amount is not allowed. The amount should be greater than "0". ')); + if ( $amount <= 0 ) { + throw new NotAllowedException( __( 'The provided amount is not allowed. The amount should be greater than "0". ' ) ); } $registerHistory = new RegisterHistory; @@ -185,14 +185,14 @@ public function cashOut(Register $register, float $amount, ?string $description) $registerHistory->action = RegisterHistory::ACTION_CASHOUT; $registerHistory->author = Auth::id(); $registerHistory->description = $description; - $registerHistory->balance_before = ns()->currency->define($register->balance)->getRaw(); - $registerHistory->value = ns()->currency->define($amount)->getRaw(); - $registerHistory->balance_after = ns()->currency->define($register->balance)->subtractBy($amount)->getRaw(); + $registerHistory->balance_before = ns()->currency->define( $register->balance )->getRaw(); + $registerHistory->value = ns()->currency->define( $amount )->getRaw(); + $registerHistory->balance_after = ns()->currency->define( $register->balance )->subtractBy( $amount )->getRaw(); $registerHistory->save(); return [ 'status' => 'success', - 'message' => __('The cash has successfully been disbursed.'), + 'message' => __( 'The cash has successfully been disbursed.' ), 'data' => [ 'register' => $register, 'history' => $registerHistory, @@ -204,14 +204,14 @@ public function cashOut(Register $register, float $amount, ?string $description) * Will update the cash register balance using the * register history model. */ - public function updateRegisterBalance(RegisterHistory $registerHistory) + public function updateRegisterBalance( RegisterHistory $registerHistory ) { - $register = Register::find($registerHistory->register_id); + $register = Register::find( $registerHistory->register_id ); - if ($register instanceof Register && $register->status === Register::STATUS_OPENED) { - if (in_array($registerHistory->action, RegisterHistory::IN_ACTIONS)) { + if ( $register instanceof Register && $register->status === Register::STATUS_OPENED ) { + if ( in_array( $registerHistory->action, RegisterHistory::IN_ACTIONS ) ) { $register->balance += $registerHistory->value; - } elseif (in_array($registerHistory->action, RegisterHistory::OUT_ACTIONS)) { + } elseif ( in_array( $registerHistory->action, RegisterHistory::OUT_ACTIONS ) ) { $register->balance -= $registerHistory->value; } @@ -225,42 +225,42 @@ public function updateRegisterBalance(RegisterHistory $registerHistory) * * @return void */ - public function recordCashRegisterHistorySale(Order $order) + public function recordCashRegisterHistorySale( Order $order ) { - if ($order->register_id !== null) { - $register = Register::find($order->register_id); + if ( $order->register_id !== null ) { + $register = Register::find( $order->register_id ); /** * The customer wallet shouldn't be counted as * a payment that goes into the cash register. */ $payments = $order->payments() - ->with('type') - ->where('identifier', '<>', OrderPayment::PAYMENT_ACCOUNT) + ->with( 'type' ) + ->where( 'identifier', '<>', OrderPayment::PAYMENT_ACCOUNT ) ->get(); /** * We'll only track on that cash register * payment that was recorded on the current register */ - $payments->each(function (OrderPayment $payment) use ($order, $register) { - $isRecorded = RegisterHistory::where('order_id', $order->id) - ->where('payment_id', $payment->id) - ->where('register_id', $register->id) - ->where('payment_type_id', $payment->type->id) - ->where('order_id', $order->id) - ->where('action', RegisterHistory::ACTION_SALE) + $payments->each( function ( OrderPayment $payment ) use ( $order, $register ) { + $isRecorded = RegisterHistory::where( 'order_id', $order->id ) + ->where( 'payment_id', $payment->id ) + ->where( 'register_id', $register->id ) + ->where( 'payment_type_id', $payment->type->id ) + ->where( 'order_id', $order->id ) + ->where( 'action', RegisterHistory::ACTION_SALE ) ->first() instanceof RegisterHistory; /** * if a similar transaction is not yet record * then we can record that on the register history. */ - if (! $isRecorded) { + if ( ! $isRecorded ) { $registerHistory = new RegisterHistory; $registerHistory->balance_before = $register->balance; - $registerHistory->value = ns()->currency->define($payment->value)->getRaw(); - $registerHistory->balance_after = ns()->currency->define($register->balance)->additionateBy($payment->value)->getRaw(); + $registerHistory->value = ns()->currency->define( $payment->value )->getRaw(); + $registerHistory->balance_after = ns()->currency->define( $register->balance )->additionateBy( $payment->value )->getRaw(); $registerHistory->register_id = $register->id; $registerHistory->payment_id = $payment->id; $registerHistory->payment_type_id = $payment->type->id; @@ -269,7 +269,7 @@ public function recordCashRegisterHistorySale(Order $order) $registerHistory->author = $order->author; $registerHistory->save(); } - }); + } ); $register->refresh(); } @@ -280,24 +280,24 @@ public function recordCashRegisterHistorySale(Order $order) * that only occurs if the order is updated * and will update the register history accordingly. */ - public function createRegisterHistoryUsingPaymentStatus(Order $order, string $previous, string $new): ?RegisterHistory + public function createRegisterHistoryUsingPaymentStatus( Order $order, string $previous, string $new ): ?RegisterHistory { /** * If the payment status changed from * supported payment status to a "Paid" status. */ - if ($order->register_id !== null && in_array($previous, [ + if ( $order->register_id !== null && in_array( $previous, [ Order::PAYMENT_DUE, Order::PAYMENT_HOLD, Order::PAYMENT_PARTIALLY, Order::PAYMENT_UNPAID, - ]) && $new === Order::PAYMENT_PAID) { - $register = Register::find($order->register_id); + ] ) && $new === Order::PAYMENT_PAID ) { + $register = Register::find( $order->register_id ); $registerHistory = new RegisterHistory; $registerHistory->balance_before = $register->balance; $registerHistory->value = $order->total; - $registerHistory->balance_after = ns()->currency->define($register->balance)->additionateBy($order->total)->getRaw(); + $registerHistory->balance_after = ns()->currency->define( $register->balance )->additionateBy( $order->total )->getRaw(); $registerHistory->register_id = $order->register_id; $registerHistory->action = RegisterHistory::ACTION_SALE; $registerHistory->author = Auth::id(); @@ -314,19 +314,19 @@ public function createRegisterHistoryUsingPaymentStatus(Order $order, string $pr * will update the cash register if any order * is marked as paid. */ - public function createRegisterHistoryFromPaidOrder(Order $order): void + public function createRegisterHistoryFromPaidOrder( Order $order ): void { /** * If the payment status changed from * supported payment status to a "Paid" status. */ - if ($order->register_id !== null && $order->payment_status === Order::PAYMENT_PAID) { - $register = Register::find($order->register_id); + if ( $order->register_id !== null && $order->payment_status === Order::PAYMENT_PAID ) { + $register = Register::find( $order->register_id ); $registerHistory = new RegisterHistory; $registerHistory->balance_before = $register->balance; $registerHistory->value = $order->total; - $registerHistory->balance_after = ns()->currency->define($register->balance)->additionateBy($order->total)->getRaw(); + $registerHistory->balance_after = ns()->currency->define( $register->balance )->additionateBy( $order->total )->getRaw(); $registerHistory->register_id = $order->register_id; $registerHistory->action = RegisterHistory::ACTION_SALE; $registerHistory->author = Auth::id(); @@ -338,26 +338,26 @@ public function createRegisterHistoryFromPaidOrder(Order $order): void * returns human readable labels * for all register actions. */ - public function getActionLabel(string $label): string + public function getActionLabel( string $label ): string { - switch ($label) { + switch ( $label ) { case RegisterHistory::ACTION_CASHING: - return __('Cash In'); + return __( 'Cash In' ); break; case RegisterHistory::ACTION_CASHOUT: - return __('Cash Out'); + return __( 'Cash Out' ); break; case RegisterHistory::ACTION_CLOSING: - return __('Closing'); + return __( 'Closing' ); break; case RegisterHistory::ACTION_OPENING: - return __('Opening'); + return __( 'Opening' ); break; case RegisterHistory::ACTION_REFUND: - return __('Refund'); + return __( 'Refund' ); break; case RegisterHistory::ACTION_SALE: - return __('Sale'); + return __( 'Sale' ); break; default: return $label; @@ -368,20 +368,20 @@ public function getActionLabel(string $label): string /** * Returns the register status for human */ - public function getRegisterStatusLabel(string $label): string + public function getRegisterStatusLabel( string $label ): string { - switch ($label) { + switch ( $label ) { case Register::STATUS_CLOSED: - return __('Closed'); + return __( 'Closed' ); break; case Register::STATUS_DISABLED: - return __('Disabled'); + return __( 'Disabled' ); break; case Register::STATUS_INUSE: - return __('In Use'); + return __( 'In Use' ); break; case Register::STATUS_OPENED: - return __('Opened'); + return __( 'Opened' ); break; default: return $label; @@ -392,23 +392,23 @@ public function getRegisterStatusLabel(string $label): string /** * Update the register with various details. */ - public function getRegisterDetails(Register $register): Register + public function getRegisterDetails( Register $register ): Register { - $register->status_label = $this->getRegisterStatusLabel($register->status); + $register->status_label = $this->getRegisterStatusLabel( $register->status ); $register->opening_balance = 0; $register->total_sale_amount = 0; - if ($register->status === Register::STATUS_OPENED) { + if ( $register->status === Register::STATUS_OPENED ) { $history = $register->history() - ->where('action', RegisterHistory::ACTION_OPENING) - ->orderBy('id', 'desc')->first(); + ->where( 'action', RegisterHistory::ACTION_OPENING ) + ->orderBy( 'id', 'desc' )->first(); $register->opening_balance = $history->value; $register->total_sale_amount = Order::paid() - ->where('register_id', $register->id) - ->where('created_at', '>=', $history->created_at) - ->sum('total'); + ->where( 'register_id', $register->id ) + ->where( 'created_at', '>=', $history->created_at ) + ->sum( 'total' ); } return $register; diff --git a/app/Services/CoreService.php b/app/Services/CoreService.php index d9db4635d..de8639383 100644 --- a/app/Services/CoreService.php +++ b/app/Services/CoreService.php @@ -53,36 +53,36 @@ public function __construct( * Returns a route to which apply * the filter "ns-route". */ - public function route(string $route, array $params = []): string + public function route( string $route, array $params = [] ): string { - return Hook::filter('ns-route', false, $route, $params) ?: route($route, $params); + return Hook::filter( 'ns-route', false, $route, $params ) ?: route( $route, $params ); } /** * Returns a route name to which apply * the filter "ns-route-name". */ - public function routeName(string $name): string + public function routeName( string $name ): string { - return Hook::filter('ns-route-name', $name); + return Hook::filter( 'ns-route-name', $name ); } /** * Returns a filtred URL to which * apply the filter "ns-url" hook. */ - public function url(string $url = null): string + public function url( ?string $url = null ): string { - return url(Hook::filter('ns-url', $url)); + return url( Hook::filter( 'ns-url', $url ) ); } /** * Returns a filtred URL to which * apply the filter "ns-url" hook. */ - public function asset(string $url): string + public function asset( string $url ): string { - return url(Hook::filter('ns-asset', $url)); + return url( Hook::filter( 'ns-asset', $url ) ); } /** @@ -90,24 +90,24 @@ public function asset(string $url): string * access a page or trigger an error. This should not be used * on middleware or controller constructor. */ - public function restrict($permissions, $message = ''): void + public function restrict( $permissions, $message = '' ): void { - if (is_array($permissions)) { - $passed = collect($permissions)->filter(function ($permission) { - if (is_bool($permission)) { + if ( is_array( $permissions ) ) { + $passed = collect( $permissions )->filter( function ( $permission ) { + if ( is_bool( $permission ) ) { return $permission; } else { - return $this->allowedTo($permission); + return $this->allowedTo( $permission ); } - })->count() === count($permissions); - } elseif (is_string($permissions)) { - $passed = $this->allowedTo($permissions); - } elseif (is_bool($permissions)) { + } )->count() === count( $permissions ); + } elseif ( is_string( $permissions ) ) { + $passed = $this->allowedTo( $permissions ); + } elseif ( is_bool( $permissions ) ) { $passed = $permissions; } - if (! $passed) { - throw new NotEnoughPermissionException($message ?: __('You do not have enough permissions to perform this action.')); + if ( ! $passed ) { + throw new NotEnoughPermissionException( $message ?: __( 'You do not have enough permissions to perform this action.' ) ); } } @@ -117,31 +117,31 @@ public function restrict($permissions, $message = ''): void */ public function getUserDetails(): Collection { - return collect(( new User )->getFillable())->mapWithKeys(fn($key) => [ $key => Auth::user()->$key ]); + return collect( ( new User )->getFillable() )->mapWithKeys( fn( $key ) => [ $key => Auth::user()->$key ] ); } /** * Will determine if a user is allowed * to perform a specific action (using a permission) */ - public function allowedTo(array|string $permissions): bool + public function allowedTo( array|string $permissions ): bool { - if (is_array($permissions)) { - return Gate::any($permissions); + if ( is_array( $permissions ) ) { + return Gate::any( $permissions ); } - return Gate::allows($permissions); + return Gate::allows( $permissions ); } /** * check if the logged user has a specific role. */ - public function hasRole(string $roleNamespace): bool + public function hasRole( string $roleNamespace ): bool { return Auth::user() ->roles() ->get() - ->filter(fn($role) => $role->namespace === $roleNamespace)->count() > 0; + ->filter( fn( $role ) => $role->namespace === $roleNamespace )->count() > 0; } /** @@ -150,27 +150,27 @@ public function hasRole(string $roleNamespace): bool */ public function purgeMissingMigrations(): void { - $migrations = collect(Migration::get()) - ->map(function ($migration) { + $migrations = collect( Migration::get() ) + ->map( function ( $migration ) { return $migration->migration; - }); + } ); - $rawFiles = collect(Storage::disk('ns') - ->allFiles('database/migrations')); + $rawFiles = collect( Storage::disk( 'ns' ) + ->allFiles( 'database/migrations' ) ); - $files = $rawFiles->map(function ($file) { - $details = pathinfo($file); + $files = $rawFiles->map( function ( $file ) { + $details = pathinfo( $file ); return $details[ 'filename' ]; - }); + } ); $difference = array_diff( $migrations->toArray(), $files->toArray() ); - foreach ($difference as $diff) { - Migration::where('migration', $diff)->delete(); + foreach ( $difference as $diff ) { + Migration::where( 'migration', $diff )->delete(); } } @@ -180,7 +180,7 @@ public function purgeMissingMigrations(): void */ public function isProduction(): bool { - return ! is_file(base_path('public/hot')); + return ! is_file( base_path( 'public/hot' ) ); } /** @@ -189,15 +189,15 @@ public function isProduction(): bool */ public function simplifyManifest(): Collection { - $manifest = json_decode(file_get_contents(base_path('public/build/manifest.json')), true); + $manifest = json_decode( file_get_contents( base_path( 'public/build/manifest.json' ) ), true ); - return collect($manifest) - ->mapWithKeys(fn($value, $key) => [ $key => asset('build/' . $value[ 'file' ]) ]) - ->filter(function ($element) { - $info = pathinfo($element); + return collect( $manifest ) + ->mapWithKeys( fn( $value, $key ) => [ $key => asset( 'build/' . $value[ 'file' ] ) ] ) + ->filter( function ( $element ) { + $info = pathinfo( $element ); return $info[ 'extension' ] === 'css'; - }); + } ); } /** @@ -206,9 +206,9 @@ public function simplifyManifest(): Collection */ public function canPerformAsynchronousOperations(): bool { - $lastUpdate = Carbon::parse(ns()->option->get('ns_jobs_last_activity', false)); + $lastUpdate = Carbon::parse( ns()->option->get( 'ns_jobs_last_activity', false ) ); - if ($lastUpdate->diffInMinutes(ns()->date->now()) > 60 || ! ns()->option->get('ns_jobs_last_activity', false)) { + if ( $lastUpdate->diffInMinutes( ns()->date->now() ) > 60 || ! ns()->option->get( 'ns_jobs_last_activity', false ) ) { return false; } @@ -221,7 +221,7 @@ public function canPerformAsynchronousOperations(): bool */ public function checkTaskSchedulingConfiguration(): void { - if (ns()->option->get('ns_jobs_last_activity', false) === false) { + if ( ns()->option->get( 'ns_jobs_last_activity', false ) === false ) { /** * @var NotificationsEnum; */ @@ -236,10 +236,10 @@ public function checkTaskSchedulingConfiguration(): void /** * @var DateService */ - $date = app()->make(DateService::class); - $lastUpdate = Carbon::parse(ns()->option->get('ns_jobs_last_activity')); + $date = app()->make( DateService::class ); + $lastUpdate = Carbon::parse( ns()->option->get( 'ns_jobs_last_activity' ) ); - if ($lastUpdate->diffInMinutes($date->now()) > 60) { + if ( $lastUpdate->diffInMinutes( $date->now() ) > 60 ) { $this->emitNotificationForTaskSchedulingMisconfigured(); /** @@ -262,22 +262,22 @@ public function registerGatePermissions(): void * Those will be cached to avoid unecessary db calls when testing * wether the user has the permission or not. */ - if (Helper::installed(forceCheck: true)) { - Permission::get()->each(function ($permission) { - if (! Gate::has($permission->namespace)) { - Gate::define($permission->namespace, function (User $user) use ($permission) { - $permissions = Cache::remember('ns-all-permissions-' . $user->id, 3600, function () use ($user) { + if ( Helper::installed( forceCheck: true ) ) { + Permission::get()->each( function ( $permission ) { + if ( ! Gate::has( $permission->namespace ) ) { + Gate::define( $permission->namespace, function ( User $user ) use ( $permission ) { + $permissions = Cache::remember( 'ns-all-permissions-' . $user->id, 3600, function () use ( $user ) { return $user->roles() - ->with('permissions') + ->with( 'permissions' ) ->get() - ->map(fn($role) => $role->permissions->map(fn($permission) => $permission->namespace)) + ->map( fn( $role ) => $role->permissions->map( fn( $permission ) => $permission->namespace ) ) ->flatten(); - })->toArray(); + } )->toArray(); - return in_array($permission->namespace, $permissions); - }); + return in_array( $permission->namespace, $permissions ); + } ); } - }); + } ); } } @@ -290,10 +290,10 @@ public function setLastCronActivity(): void /** * @var NotificationService */ - $notification = app()->make(NotificationService::class); - $notification->deleteHavingIdentifier(NotificationsEnum::NSCRONDISABLED); + $notification = app()->make( NotificationService::class ); + $notification->deleteHavingIdentifier( NotificationsEnum::NSCRONDISABLED ); - ns()->option->set('ns_cron_last_activity', ns()->date->toDateTimeString()); + ns()->option->set( 'ns_cron_last_activity', ns()->date->toDateTimeString() ); } /** @@ -302,16 +302,16 @@ public function setLastCronActivity(): void */ public function checkCronConfiguration(): void { - if (ns()->option->get('ns_cron_last_activity', false) === false) { + if ( ns()->option->get( 'ns_cron_last_activity', false ) === false ) { $this->emitCronMisconfigurationNotification(); } else { /** * @var DateService */ - $date = app()->make(DateService::class); - $lastUpdate = Carbon::parse(ns()->option->get('ns_cron_last_activity')); + $date = app()->make( DateService::class ); + $lastUpdate = Carbon::parse( ns()->option->get( 'ns_cron_last_activity' ) ); - if ($lastUpdate->diffInMinutes($date->now()) > 60) { + if ( $lastUpdate->diffInMinutes( $date->now() ) > 60 ) { $this->emitCronMisconfigurationNotification(); } } @@ -319,29 +319,29 @@ public function checkCronConfiguration(): void public function checkSymbolicLinks(): void { - if (! file_exists(public_path('storage'))) { - $notification = Notification::where('identifier', NotificationsEnum::NSSYMBOLICLINKSMISSING) + if ( ! file_exists( public_path( 'storage' ) ) ) { + $notification = Notification::where( 'identifier', NotificationsEnum::NSSYMBOLICLINKSMISSING ) ->first(); - if (! $notification instanceof Notification) { - ns()->option->set('ns_has_symbolic_links_missing_notifications', true); + if ( ! $notification instanceof Notification ) { + ns()->option->set( 'ns_has_symbolic_links_missing_notifications', true ); - $notification = app()->make(NotificationService::class); - $notification->create([ - 'title' => __('Symbolic Links Missing'), + $notification = app()->make( NotificationService::class ); + $notification->create( [ + 'title' => __( 'Symbolic Links Missing' ), 'identifier' => NotificationsEnum::NSSYMBOLICLINKSMISSING, 'source' => 'system', 'url' => 'https://my.nexopos.com/en/documentation/troubleshooting/broken-media-images?utm_source=nexopos&utm_campaign=warning&utm_medium=app', - 'description' => __('The Symbolic Links to the public directory is missing. Your medias might be broken and not display.'), - ])->dispatchForGroup(Role::namespace(Role::ADMIN)); + 'description' => __( 'The Symbolic Links to the public directory is missing. Your medias might be broken and not display.' ), + ] )->dispatchForGroup( Role::namespace( Role::ADMIN ) ); } } else { /** * We should only perform this if we have reason to believe * there is some records, to avoid the request triggered for no reason. */ - if (ns()->option->get('ns_has_symbolic_links_missing_notifications')) { - Notification::where('identifier', NotificationsEnum::NSSYMBOLICLINKSMISSING)->delete(); + if ( ns()->option->get( 'ns_has_symbolic_links_missing_notifications' ) ) { + Notification::where( 'identifier', NotificationsEnum::NSSYMBOLICLINKSMISSING )->delete(); } } } @@ -352,14 +352,14 @@ public function checkSymbolicLinks(): void */ private function emitCronMisconfigurationNotification(): void { - $notification = app()->make(NotificationService::class); - $notification->create([ - 'title' => __('Cron Disabled'), + $notification = app()->make( NotificationService::class ); + $notification->create( [ + 'title' => __( 'Cron Disabled' ), 'identifier' => NotificationsEnum::NSCRONDISABLED, 'source' => 'system', 'url' => 'https://my.nexopos.com/en/documentation/troubleshooting/workers-or-async-requests-disabled?utm_source=nexopos&utm_campaign=warning&utm_medium=app', - 'description' => __("Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it."), - ])->dispatchForGroup(Role::namespace(Role::ADMIN)); + 'description' => __( "Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it." ), + ] )->dispatchForGroup( Role::namespace( Role::ADMIN ) ); } /** @@ -368,25 +368,25 @@ private function emitCronMisconfigurationNotification(): void */ private function emitNotificationForTaskSchedulingMisconfigured(): void { - $notification = app()->make(NotificationService::class); - $notification->create([ - 'title' => __('Task Scheduling Disabled'), + $notification = app()->make( NotificationService::class ); + $notification->create( [ + 'title' => __( 'Task Scheduling Disabled' ), 'identifier' => NotificationsEnum::NSWORKERDISABLED, 'source' => 'system', 'url' => 'https://my.nexopos.com/en/documentation/troubleshooting/workers-or-async-requests-disabled?utm_source=nexopos&utm_campaign=warning&utm_medium=app', - 'description' => __('NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.'), - ])->dispatchForGroup(Role::namespace(Role::ADMIN)); + 'description' => __( 'NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.' ), + ] )->dispatchForGroup( Role::namespace( Role::ADMIN ) ); } public function getValidAuthor() { - if (Auth::check()) { + if ( Auth::check() ) { return Auth::id(); } - if (App::runningInConsole()) { - $firstAdministrator = User::where('active', true)-> - whereRelation('roles', 'namespace', Role::ADMIN)->first(); + if ( App::runningInConsole() ) { + $firstAdministrator = User::where( 'active', true )-> + whereRelation( 'roles', 'namespace', Role::ADMIN )->first(); return $firstAdministrator->id; } @@ -395,43 +395,43 @@ public function getValidAuthor() /** * Get the asset file name from the manifest.json file of a module in Laravel. * - * @param int $moduleId + * @param int $moduleId * @return string|null * * @throws NotFoundException */ - public function moduleViteAssets(string $fileName, $moduleId): string + public function moduleViteAssets( string $fileName, $moduleId ): string { - $moduleService = app()->make(ModulesService::class); - $module = $moduleService->get($moduleId); + $moduleService = app()->make( ModulesService::class ); + $module = $moduleService->get( $moduleId ); - if (empty($module)) { + if ( empty( $module ) ) { throw new NotFoundException( sprintf( - __('The requested module %s cannot be found.'), + __( 'The requested module %s cannot be found.' ), $moduleId ) ); } - $manifestPath = rtrim($module['path'], DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . 'Public' . DIRECTORY_SEPARATOR . 'build' . DIRECTORY_SEPARATOR . 'manifest.json'; + $manifestPath = rtrim( $module['path'], DIRECTORY_SEPARATOR ) . DIRECTORY_SEPARATOR . 'Public' . DIRECTORY_SEPARATOR . 'build' . DIRECTORY_SEPARATOR . 'manifest.json'; - if (! file_exists($manifestPath)) { + if ( ! file_exists( $manifestPath ) ) { throw new NotFoundException( sprintf( - __('The manifest.json can\'t be located inside the module %s on the path: %s'), + __( 'The manifest.json can\'t be located inside the module %s on the path: %s' ), $module[ 'name' ], $manifestPath ) ); } - $manifestArray = json_decode(file_get_contents($manifestPath), true); + $manifestArray = json_decode( file_get_contents( $manifestPath ), true ); - if (! isset($manifestArray[ $fileName ])) { + if ( ! isset( $manifestArray[ $fileName ] ) ) { throw new NotFoundException( sprintf( - __('the requested file "%s" can\'t be located inside the manifest.json for the module %s.'), + __( 'the requested file "%s" can\'t be located inside the manifest.json for the module %s.' ), $fileName, $module[ 'name' ] ) @@ -441,17 +441,17 @@ public function moduleViteAssets(string $fileName, $moduleId): string /** * checks if a css file is declared as well */ - $jsUrl = asset('modules/' . strtolower($moduleId) . '/build/' . $manifestArray[ $fileName ][ 'file' ]) ?? null; - $assets = collect([]); + $jsUrl = asset( 'modules/' . strtolower( $moduleId ) . '/build/' . $manifestArray[ $fileName ][ 'file' ] ) ?? null; + $assets = collect( [] ); - if (! empty($manifestArray[ $fileName ][ 'css' ])) { - $assets = collect($manifestArray[ $fileName ][ 'css' ])->map(function ($url) use ($moduleId) { - return ''; - }); + if ( ! empty( $manifestArray[ $fileName ][ 'css' ] ) ) { + $assets = collect( $manifestArray[ $fileName ][ 'css' ] )->map( function ( $url ) use ( $moduleId ) { + return ''; + } ); } - $assets->prepend(''); + $assets->prepend( '' ); - return $assets->join(''); + return $assets->join( '' ); } } diff --git a/app/Services/CrudEntry.php b/app/Services/CrudEntry.php index b1bc48d46..1865aa1ec 100644 --- a/app/Services/CrudEntry.php +++ b/app/Services/CrudEntry.php @@ -12,7 +12,7 @@ class CrudEntry implements JsonSerializable public $__raw; - public function __construct($params) + public function __construct( $params ) { $this->original = $params; $this->values = $params; @@ -22,27 +22,27 @@ public function __construct($params) $this->{ '$id' } = $params[ 'id' ]; } - public function __get($index) + public function __get( $index ) { return $this->values[ $index ] ?? null; } - public function __set($index, $value) + public function __set( $index, $value ) { $this->values[ $index ] = $value; } - public function __isset($index) + public function __isset( $index ) { - return array_key_exists($index, $this->values); + return array_key_exists( $index, $this->values ); } - public function __unset($index) + public function __unset( $index ) { - unset($this->values[ $index ]); + unset( $this->values[ $index ] ); } - public function getOriginalValue($index) + public function getOriginalValue( $index ) { return $this->original[ $index ]; } @@ -57,19 +57,19 @@ public function jsonSerialize() * * @deprecated */ - public function addAction($identifier, $action) + public function addAction( $identifier, $action ) { $this->values[ '$actions' ][ $identifier ] = $action; } - public function action($label, $identifier, $url = 'javascript:void(0)', $confirm = null, $type = 'GOTO') + public function action( $label, $identifier, $url = 'javascript:void(0)', $confirm = null, $type = 'GOTO' ) { - $this->values[ '$actions' ][ $identifier ] = compact('label', 'identifier', 'url', 'confirm', 'type'); + $this->values[ '$actions' ][ $identifier ] = compact( 'label', 'identifier', 'url', 'confirm', 'type' ); } - public function removeAction($identifier) + public function removeAction( $identifier ) { - unset($this->values[ '$actions' ][ $identifier ]); + unset( $this->values[ '$actions' ][ $identifier ] ); } public function toArray() diff --git a/app/Services/CrudService.php b/app/Services/CrudService.php index f532492be..500713740 100644 --- a/app/Services/CrudService.php +++ b/app/Services/CrudService.php @@ -124,6 +124,11 @@ class CrudService */ protected $showOptions = true; + /** + * Determine if checkboxes should be displayed + */ + protected $showCheckboxes = true; + /** * Will enforce slug to be defined as * a protected property. @@ -192,41 +197,41 @@ public function __construct() * @todo provide more build in actions */ $this->bulkActions = [ - 'delete_selected' => __('Delete Selected entries'), + 'delete_selected' => __( 'Delete Selected entries' ), ]; /** * Bulk action messages */ - $this->bulkDeleteSuccessMessage = __('%s entries has been deleted'); - $this->bulkDeleteDangerMessage = __('%s entries has not been deleted'); + $this->bulkDeleteSuccessMessage = __( '%s entries has been deleted' ); + $this->bulkDeleteDangerMessage = __( '%s entries has not been deleted' ); } /** * Shorthand for preparing and submitting crud request * - * @param string $namespace - * @param array $inputs - * @param mixed $id - * @return array as a crud response + * @param string $namespace + * @param array $inputs + * @param mixed $id + * @return array as a crud response */ - public function submitPreparedRequest($inputs, $id = null): array + public function submitPreparedRequest( $inputs, $id = null ): array { - $model = $id !== null ? $this->getModel()::find($id) : null; - $data = $this->getFlatForm($inputs, $model); + $model = $id !== null ? $this->getModel()::find( $id ) : null; + $data = $this->getFlatForm( $inputs, $model ); - return $this->submitRequest($this->getNamespace(), $data, $id); + return $this->submitRequest( $this->getNamespace(), $data, $id ); } /** * Will submit a request to the current * crud instance using the input provided * - * @param array $inputs - * @param int $id + * @param array $inputs + * @param int $id * @return array $response */ - public function submit($inputs, $id = null) + public function submit( $inputs, $id = null ) { return $this->submitRequest( namespace: $this->getNamespace(), @@ -238,29 +243,29 @@ public function submit($inputs, $id = null) /** * Submit a prepared request to a crud instance * - * @param string $namespace - * @param array $inputs - * @param int|null $id - * @return array $response + * @param string $namespace + * @param array $inputs + * @param int|null $id + * @return array $response */ - public function submitRequest($namespace, $inputs, $id = null): array + public function submitRequest( $namespace, $inputs, $id = null ): array { - $resource = $this->getCrudInstance($namespace); + $resource = $this->getCrudInstance( $namespace ); $model = $resource->getModel(); $isEditing = $id !== null; - $entry = ! $isEditing ? new $model : $model::find($id); + $entry = ! $isEditing ? new $model : $model::find( $id ); /** * let's keep old form inputs */ $unfiltredInputs = $inputs; - if (method_exists($resource, 'filterPostInputs') && ! $isEditing) { - $inputs = $resource->filterPostInputs($inputs, null); + if ( method_exists( $resource, 'filterPostInputs' ) && ! $isEditing ) { + $inputs = $resource->filterPostInputs( $inputs, null ); } - if (method_exists($resource, 'filterPutInputs') && $isEditing) { - $inputs = $resource->filterPutInputs($inputs, $entry); + if ( method_exists( $resource, 'filterPutInputs' ) && $isEditing ) { + $inputs = $resource->filterPutInputs( $inputs, $entry ); } /** @@ -268,17 +273,17 @@ public function submitRequest($namespace, $inputs, $id = null): array * on the actual crud instance */ $inputs = Hook::filter( - get_class($resource) . ($isEditing ? '@filterPutInputs' : '@filterPostInputs'), + get_class( $resource ) . ( $isEditing ? '@filterPutInputs' : '@filterPostInputs' ), $inputs, $isEditing ? $entry : null ); - if (method_exists($resource, 'beforePost') && ! $isEditing) { - $resource->beforePost($unfiltredInputs, null, $inputs); + if ( method_exists( $resource, 'beforePost' ) && ! $isEditing ) { + $resource->beforePost( $unfiltredInputs, null, $inputs ); } - if (method_exists($resource, 'beforePut') && $isEditing) { - $resource->beforePut($unfiltredInputs, $entry, $inputs); + if ( method_exists( $resource, 'beforePut' ) && $isEditing ) { + $resource->beforePut( $unfiltredInputs, $entry, $inputs ); } /** @@ -286,30 +291,30 @@ public function submitRequest($namespace, $inputs, $id = null): array * by any other handler than the CrudService */ if ( - (! $isEditing && ! $resource->disablePost) || - ($isEditing && ! $resource->disablePut) + ( ! $isEditing && ! $resource->disablePost ) || + ( $isEditing && ! $resource->disablePut ) ) { $fillable = Hook::filter( - get_class($resource) . '@getFillable', + get_class( $resource ) . '@getFillable', $resource->getFillable() ); - foreach ($inputs as $name => $value) { + foreach ( $inputs as $name => $value ) { /** * If the fields where explicitly added * on field that must be ignored we should skip that. */ - if (! in_array($name, $resource->skippable)) { + if ( ! in_array( $name, $resource->skippable ) ) { /** * If submitted field are part of fillable fields */ - if (in_array($name, $fillable) || count($fillable) === 0) { + if ( in_array( $name, $fillable ) || count( $fillable ) === 0 ) { /** * We might give the capacity to filter fields * before storing. This can be used to apply specific formating to the field. */ - if (method_exists($resource, 'filterPostInput') || method_exists($resource, 'filterPutInput')) { - $entry->$name = $isEditing ? $resource->filterPutInput($value, $name) : $resource->filterPostInput($value, $name); + if ( method_exists( $resource, 'filterPostInput' ) || method_exists( $resource, 'filterPutInput' ) ) { + $entry->$name = $isEditing ? $resource->filterPutInput( $value, $name ) : $resource->filterPostInput( $value, $name ); } else { $entry->$name = $value; } @@ -318,8 +323,8 @@ public function submitRequest($namespace, $inputs, $id = null): array * sanitizing input to remove * all script tags */ - if (! empty($entry->$name)) { - $entry->$name = strip_tags($entry->$name); + if ( ! empty( $entry->$name ) ) { + $entry->$name = strip_tags( $entry->$name ); } } } @@ -329,11 +334,11 @@ public function submitRequest($namespace, $inputs, $id = null): array * If fillable is empty or if "author" it's explicitly * mentionned on the fillable array. */ - $columns = array_keys($this->getColumns()); + $columns = array_keys( $this->getColumns() ); - if (empty($fillable) || ( - in_array('author', $fillable) - )) { + if ( empty( $fillable ) || ( + in_array( 'author', $fillable ) + ) ) { $entry->author = Auth::id(); } @@ -341,7 +346,7 @@ public function submitRequest($namespace, $inputs, $id = null): array * if timestamp are provided we'll disable the timestamp feature. * In case a field is not provided, the default value is used. */ - if (! empty($entry->created_at) || ! empty($entry->updated_at)) { + if ( ! empty( $entry->created_at ) || ! empty( $entry->updated_at ) ) { $entry->timestamps = false; $entry->created_at = $entry->created_at ?: ns()->date->toDateTimeString(); $entry->updated_at = $entry->updated_at ?: ns()->date->toDateTimeString(); @@ -353,20 +358,20 @@ public function submitRequest($namespace, $inputs, $id = null): array * loop the tabs relations * and store it */ - foreach ($resource->getTabsRelations() as $tab => $relationParams) { - $fields = request()->input($tab); + foreach ( $resource->getTabsRelations() as $tab => $relationParams ) { + $fields = request()->input( $tab ); $class = $relationParams[0]; $localKey = $relationParams[1]; $foreignKey = $relationParams[2]; - if (! empty($fields)) { - $model = $class::where($localKey, $entry->$foreignKey)->first(); + if ( ! empty( $fields ) ) { + $model = $class::where( $localKey, $entry->$foreignKey )->first(); /** * no relation has been found * so we'll store that. */ - if (! $model instanceof $class) { + if ( ! $model instanceof $class ) { $model = new $relationParams[0]; // should be the class; } @@ -374,7 +379,7 @@ public function submitRequest($namespace, $inputs, $id = null): array * We're saving here all the fields for * the related model */ - foreach ($fields as $name => $value) { + foreach ( $fields as $name => $value ) { $model->$name = $value; } @@ -388,24 +393,24 @@ public function submitRequest($namespace, $inputs, $id = null): array /** * Create an event after crud POST */ - if (! $isEditing && method_exists($resource, 'afterPost')) { - $resource->afterPost($unfiltredInputs, $entry, $inputs); + if ( ! $isEditing && method_exists( $resource, 'afterPost' ) ) { + $resource->afterPost( $unfiltredInputs, $entry, $inputs ); } /** * Create an event after crud POST */ - if ($isEditing && method_exists($resource, 'afterPut')) { - $resource->afterPut($unfiltredInputs, $entry, $inputs); + if ( $isEditing && method_exists( $resource, 'afterPut' ) ) { + $resource->afterPut( $unfiltredInputs, $entry, $inputs ); } return [ 'status' => 'success', 'data' => [ 'entry' => $entry, - 'editUrl' => str_contains($resource->getLinks()['edit'], '{id}') ? Str::replace('{id}', $entry->id, $resource->getLinks()['edit']) : false, + 'editUrl' => str_contains( $resource->getLinks()['edit'], '{id}' ) ? Str::replace( '{id}', $entry->id, $resource->getLinks()['edit'] ) : false, ], - 'message' => $id === null ? __('A new entry has been successfully created.') : __('The entry has been successfully updated.'), + 'message' => $id === null ? __( 'A new entry has been successfully created.' ) : __( 'The entry has been successfully updated.' ), ]; } @@ -416,7 +421,7 @@ public function submitRequest($namespace, $inputs, $id = null): array * @param string feature name * @return boolean/null */ - public function isEnabled($feature): ?bool + public function isEnabled( $feature ): ?bool { return $this->features[$feature] ?? false; } @@ -462,20 +467,20 @@ public function getPicked(): array * Will handle the definition operator * * @param Builder $query - * @param array $definition - * @param array $searchKeyValue + * @param array $definition + * @param array $searchKeyValue */ - public function handleDefinitionOperator($query, $definition, $searchKeyValue): void + public function handleDefinitionOperator( $query, $definition, $searchKeyValue ): void { - extract($searchKeyValue); + extract( $searchKeyValue ); /** * @param string $key - * @param mixed $value + * @param mixed $value */ - if (isset($definition['operator'])) { - $query->where($key, $definition['operator'], $value); + if ( isset( $definition['operator'] ) ) { + $query->where( $key, $definition['operator'], $value ); } else { - $query->where($key, $value); + $query->where( $key, $value ); } } @@ -487,11 +492,11 @@ public function getQueryFilters(): array return $this->queryFilters; } - public function __extractTable($relation): string + public function __extractTable( $relation ): string { - $parts = explode(' as ', $relation[0]); - if (count($parts) === 2) { - return trim($parts[0]); + $parts = explode( ' as ', $relation[0] ); + if ( count( $parts ) === 2 ) { + return trim( $parts[0] ); } else { return $relation[0]; } @@ -505,7 +510,7 @@ public function __extractTable($relation): string */ public function getRelations(): array { - return Hook::filter(self::method('getRelations'), $this->relations); + return Hook::filter( self::method( 'getRelations' ), $this->relations ); } /** @@ -532,11 +537,11 @@ public function getPrependOptions(): bool * @param array config * @return array entries */ - public function getEntries($config = []): array + public function getEntries( $config = [] ): array { - $table = $this->hookTableName($this->table); - $request = app()->make(Request::class); - $query = DB::table($table); + $table = $this->hookTableName( $this->table ); + $request = app()->make( Request::class ); + $query = DB::table( $table ); $columnsLongName = []; /** @@ -549,14 +554,14 @@ public function getEntries($config = []): array * We're caching the table columns, since we would like to * avoid many DB Calls */ - if (! empty(Cache::get('table-columns-' . $table)) && true === false) { - $columns = Cache::get('table-columns-' . $table); + if ( ! empty( Cache::get( 'table-columns-' . $table ) ) && true === false ) { + $columns = Cache::get( 'table-columns-' . $table ); } else { - $columns = Schema::getColumnListing($table); - Cache::put('table-columns-' . $table, $columns, Carbon::now()->addDays(1)); + $columns = Schema::getColumnListing( $table ); + Cache::put( 'table-columns-' . $table, $columns, Carbon::now()->addDays( 1 ) ); } - foreach ($columns as $index => $column) { + foreach ( $columns as $index => $column ) { $__name = $table . '.' . $column; $columnsLongName[] = $__name; $select[] = $__name . ' as ' . $column; @@ -565,7 +570,7 @@ public function getEntries($config = []): array /** * Let's loop relation if they exists */ - if ($this->getRelations()) { + if ( $this->getRelations() ) { /** * we're extracting the joined table * to make sure building the alias works @@ -573,44 +578,44 @@ public function getEntries($config = []): array $relations = []; $relatedTables = []; - collect($this->getRelations())->each(function ($relation) use (&$relations, &$relatedTables) { - if (isset($relation[0])) { - if (! is_array($relation[0])) { + collect( $this->getRelations() )->each( function ( $relation ) use ( &$relations, &$relatedTables ) { + if ( isset( $relation[0] ) ) { + if ( ! is_array( $relation[0] ) ) { $relations[] = $relation; /** * We do extract the table name * defined on the relation array */ - $relatedTables[] = $this->__extractTable($relation); + $relatedTables[] = $this->__extractTable( $relation ); } else { - collect($relation)->each(function ($_relation) use (&$relations, &$relatedTables) { + collect( $relation )->each( function ( $_relation ) use ( &$relations, &$relatedTables ) { $relations[] = $_relation; /** * We do extract the table name * defined on the relation array */ - $relatedTables[] = $this->__extractTable($_relation); - }); + $relatedTables[] = $this->__extractTable( $_relation ); + } ); } } - }); + } ); - $relatedTables = collect($relatedTables) + $relatedTables = collect( $relatedTables ) ->unique() - ->push($this->table) // the crud table must be considered as a related table as well. + ->push( $this->table ) // the crud table must be considered as a related table as well. ->toArray(); /** * Build Select for joined table */ - foreach ($relations as $relation) { + foreach ( $relations as $relation ) { /** * We're caching the columns to avoid once again many DB request */ - if (! empty(Cache::get('table-columns-' . $relation[0])) && true == false) { - $columns = Cache::get('table-columns-' . $relation[0]); + if ( ! empty( Cache::get( 'table-columns-' . $relation[0] ) ) && true == false ) { + $columns = Cache::get( 'table-columns-' . $relation[0] ); } else { /** * Will ensure to only pick @@ -623,16 +628,16 @@ public function getEntries($config = []): array * that are picked, we'll allow extensibility * using the filter "getPicked". */ - $pick = Hook::filter(self::method('getPicked'), $this->getPicked()); + $pick = Hook::filter( self::method( 'getPicked' ), $this->getPicked() ); - $hasAlias = explode(' as ', $relation[0]); // if there is an alias, let's just pick the table name - $hasAlias[0] = $this->hookTableName($hasAlias[0]); // make the table name hookable + $hasAlias = explode( ' as ', $relation[0] ); // if there is an alias, let's just pick the table name + $hasAlias[0] = $this->hookTableName( $hasAlias[0] ); // make the table name hookable $aliasName = $hasAlias[1] ?? false; // for aliased relation. The pick use the alias as a reference. - $columns = collect(Schema::getColumnListing(count($hasAlias) === 2 ? trim($hasAlias[0]) : $relation[0])) - ->filter(function ($column) use ($pick, $table, $aliasName) { - $picked = $pick[$aliasName ? trim($aliasName) : $table] ?? []; - if (! empty($picked)) { - if (in_array($column, $picked)) { + $columns = collect( Schema::getColumnListing( count( $hasAlias ) === 2 ? trim( $hasAlias[0] ) : $relation[0] ) ) + ->filter( function ( $column ) use ( $pick, $table, $aliasName ) { + $picked = $pick[$aliasName ? trim( $aliasName ) : $table] ?? []; + if ( ! empty( $picked ) ) { + if ( in_array( $column, $picked ) ) { return true; } else { return false; @@ -640,26 +645,26 @@ public function getEntries($config = []): array } return true; - })->toArray(); + } )->toArray(); - Cache::put('table-columns-' . $relation[0], $columns, Carbon::now()->addDays(1)); + Cache::put( 'table-columns-' . $relation[0], $columns, Carbon::now()->addDays( 1 ) ); } - foreach ($columns as $index => $column) { - $hasAlias = explode(' as ', $relation[0]); - $hasAlias[0] = $this->hookTableName($hasAlias[0]); + foreach ( $columns as $index => $column ) { + $hasAlias = explode( ' as ', $relation[0] ); + $hasAlias[0] = $this->hookTableName( $hasAlias[0] ); /** * If the relation has an alias, we'll * use the provided alias to compose * the juncture. */ - if (count($hasAlias) === 2) { - $__name = trim($hasAlias[1]) . '.' . $column; + if ( count( $hasAlias ) === 2 ) { + $__name = trim( $hasAlias[1] ) . '.' . $column; $columnsLongName[] = $__name; - $select[] = $__name . ' as ' . trim($hasAlias[1]) . '_' . $column; + $select[] = $__name . ' as ' . trim( $hasAlias[1] ) . '_' . $column; } else { - $__name = $this->hookTableName($relation[0]) . '.' . $column; + $__name = $this->hookTableName( $relation[0] ) . '.' . $column; $columnsLongName[] = $__name; $select[] = $__name . ' as ' . $relation[0] . '_' . $column; } @@ -669,78 +674,78 @@ public function getEntries($config = []): array /** * @var Builder */ - $query = call_user_func_array([$query, 'select'], $select); + $query = call_user_func_array( [$query, 'select'], $select ); - foreach ($this->getRelations() as $junction => $relation) { + foreach ( $this->getRelations() as $junction => $relation ) { /** * if no junction statement is provided * then let's make it inner by default */ - $junction = is_numeric($junction) ? 'join' : $junction; + $junction = is_numeric( $junction ) ? 'join' : $junction; - if (in_array($junction, ['join', 'leftJoin', 'rightJoin', 'crossJoin'])) { - if ($junction !== 'join') { - foreach ($relation as $junction_relation) { - $hasAlias = explode(' as ', $junction_relation[0]); - $hasAlias[0] = $this->hookTableName($hasAlias[0]); + if ( in_array( $junction, ['join', 'leftJoin', 'rightJoin', 'crossJoin'] ) ) { + if ( $junction !== 'join' ) { + foreach ( $relation as $junction_relation ) { + $hasAlias = explode( ' as ', $junction_relation[0] ); + $hasAlias[0] = $this->hookTableName( $hasAlias[0] ); /** * makes sure first table can be filtered. We should also check * if the column are actual column and not aliases */ - $relatedTableParts = explode('.', $junction_relation[1]); + $relatedTableParts = explode( '.', $junction_relation[1] ); - if (count($relatedTableParts) === 2 && in_array($relatedTableParts[0], $relatedTables)) { - $junction_relation[1] = $this->hookTableName($relatedTableParts[0]) . '.' . $relatedTableParts[1]; + if ( count( $relatedTableParts ) === 2 && in_array( $relatedTableParts[0], $relatedTables ) ) { + $junction_relation[1] = $this->hookTableName( $relatedTableParts[0] ) . '.' . $relatedTableParts[1]; } /** * makes sure the second table can be filtered. We should also check * if the column are actual column and not aliases */ - $relatedTableParts = explode('.', $junction_relation[3]); - if (count($relatedTableParts) === 2 && in_array($relatedTableParts[0], $relatedTables)) { - $junction_relation[3] = $this->hookTableName($relatedTableParts[0]) . '.' . $relatedTableParts[1]; + $relatedTableParts = explode( '.', $junction_relation[3] ); + if ( count( $relatedTableParts ) === 2 && in_array( $relatedTableParts[0], $relatedTables ) ) { + $junction_relation[3] = $this->hookTableName( $relatedTableParts[0] ) . '.' . $relatedTableParts[1]; } - if (count($hasAlias) === 2) { - $query->$junction(trim($hasAlias[0]) . ' as ' . trim($hasAlias[1]), $junction_relation[1], $junction_relation[2], $junction_relation[3]); + if ( count( $hasAlias ) === 2 ) { + $query->$junction( trim( $hasAlias[0] ) . ' as ' . trim( $hasAlias[1] ), $junction_relation[1], $junction_relation[2], $junction_relation[3] ); } else { - $query->$junction($junction_relation[0], $junction_relation[1], $junction_relation[2], $junction_relation[3]); + $query->$junction( $junction_relation[0], $junction_relation[1], $junction_relation[2], $junction_relation[3] ); } } } else { - $hasAlias = explode(' as ', $relation[0]); - $hasAlias[0] = $this->hookTableName($hasAlias[0]); + $hasAlias = explode( ' as ', $relation[0] ); + $hasAlias[0] = $this->hookTableName( $hasAlias[0] ); /** * makes sure the first table can be filtered. We should also check * if the column are actual column and not aliases */ - $relation[0] = $this->hookTableName($relation[0]); + $relation[0] = $this->hookTableName( $relation[0] ); /** * makes sure the first table can be filtered. We should also check * if the column are actual column and not aliases */ - $relatedTableParts = explode('.', $relation[1]); - if (count($relatedTableParts) === 2 && in_array($relatedTableParts[0], $relatedTables)) { - $relation[1] = $this->hookTableName($relatedTableParts[0]) . '.' . $relatedTableParts[1]; + $relatedTableParts = explode( '.', $relation[1] ); + if ( count( $relatedTableParts ) === 2 && in_array( $relatedTableParts[0], $relatedTables ) ) { + $relation[1] = $this->hookTableName( $relatedTableParts[0] ) . '.' . $relatedTableParts[1]; } /** * makes sure the second table can be filtered. We should also check * if the column are actual column and not aliases */ - $relatedTableParts = explode('.', $relation[3]); - if (count($relatedTableParts) === 2 && in_array($relatedTableParts[0], $relatedTables)) { - $relation[3] = $this->hookTableName($relatedTableParts[0]) . '.' . $relatedTableParts[1]; + $relatedTableParts = explode( '.', $relation[3] ); + if ( count( $relatedTableParts ) === 2 && in_array( $relatedTableParts[0], $relatedTables ) ) { + $relation[3] = $this->hookTableName( $relatedTableParts[0] ) . '.' . $relatedTableParts[1]; } - if (count($hasAlias) === 2) { - $query->$junction(trim($hasAlias[0]) . ' as ' . trim($hasAlias[1]), $relation[1], $relation[2], $relation[3]); + if ( count( $hasAlias ) === 2 ) { + $query->$junction( trim( $hasAlias[0] ) . ' as ' . trim( $hasAlias[1] ), $relation[1], $relation[2], $relation[3] ); } else { - $query->$junction($relation[0], $relation[1], $relation[2], $relation[3]); + $query->$junction( $relation[0], $relation[1], $relation[2], $relation[3] ); } } } @@ -750,12 +755,12 @@ public function getEntries($config = []): array /** * check if the query has a where statement */ - if ($this->listWhere) { - foreach ($this->listWhere as $key => $value) { - if (count($this->listWhere) > 1) { - $query->orWhere($key, $value); + if ( $this->listWhere ) { + foreach ( $this->listWhere as $key => $value ) { + if ( count( $this->listWhere ) > 1 ) { + $query->orWhere( $key, $value ); } else { - $query->where($key, $value); + $query->where( $key, $value ); } } } @@ -764,16 +769,16 @@ public function getEntries($config = []): array * if hook method is defined and only when conditional argument * that affect result sorting is not active. */ - if (method_exists($this, 'hook') && request()->query('active') === null) { - $this->hook($query); + if ( method_exists( $this, 'hook' ) && request()->query( 'active' ) === null ) { + $this->hook( $query ); } /** * try to run the where in statement */ - if ($this->whereIn) { - foreach ($this->whereIn as $key => $values) { - $query->whereIn($key, $values); + if ( $this->whereIn ) { + foreach ( $this->whereIn as $key => $values ) { + $query->whereIn( $key, $values ); } } @@ -782,30 +787,30 @@ public function getEntries($config = []): array * Will filter request using provided * query filters */ - if ($request->query('queryFilters')) { - $filters = json_decode(urldecode($request->query('queryFilters')), true); + if ( $request->query( 'queryFilters' ) ) { + $filters = json_decode( urldecode( $request->query( 'queryFilters' ) ), true ); /** * @todo we might need to get the filter from the resource * so that we can parse correctly the provider query filters. */ - if (! empty($filters)) { - foreach ($filters as $key => $value) { + if ( ! empty( $filters ) ) { + foreach ( $filters as $key => $value ) { /** * we won't handle empty value */ - if (empty($value)) { + if ( empty( $value ) ) { continue; } - $definition = collect($this->queryFilters)->filter(fn ($filter) => $filter['name'] === $key)->first(); + $definition = collect( $this->queryFilters )->filter( fn ( $filter ) => $filter['name'] === $key )->first(); - if (! empty($definition)) { - switch ($definition['type']) { + if ( ! empty( $definition ) ) { + switch ( $definition['type'] ) { case 'daterangepicker': - if ($value['startDate'] !== null && $value['endDate'] !== null) { - $query->where($key, '>=', Carbon::parse($value['startDate'])->toDateTimeString()); - $query->where($key, '<=', Carbon::parse($value['endDate'])->toDateTimeString()); + if ( $value['startDate'] !== null && $value['endDate'] !== null ) { + $query->where( $key, '>=', Carbon::parse( $value['startDate'] )->toDateTimeString() ); + $query->where( $key, '<=', Carbon::parse( $value['endDate'] )->toDateTimeString() ); } break; default: @@ -816,12 +821,12 @@ public function getEntries($config = []): array $this->handleDefinitionOperator( $query, $definition, - compact('key', 'value') + compact( 'key', 'value' ) ); break; } } else { - $query->where($key, $value); + $query->where( $key, $value ); } } } @@ -831,50 +836,50 @@ public function getEntries($config = []): array * let's make the "perPage" value adjustable */ $perPage = $config['per_page'] ?? 20; - if ($request->query('per_page')) { - $perPage = $request->query('per_page'); + if ( $request->query( 'per_page' ) ) { + $perPage = $request->query( 'per_page' ); } /** * searching */ - if ($request->query('search')) { - $query->where(function ($query) use ($request, $columnsLongName) { - foreach ($columnsLongName as $index => $column) { - if ($index == 0) { - $query->where($column, 'like', "%{$request->query('search')}%"); + if ( $request->query( 'search' ) ) { + $query->where( function ( $query ) use ( $request, $columnsLongName ) { + foreach ( $columnsLongName as $index => $column ) { + if ( $index == 0 ) { + $query->where( $column, 'like', "%{$request->query( 'search' )}%" ); } else { - $query->orWhere($column, 'like', "%{$request->query('search')}%"); + $query->orWhere( $column, 'like', "%{$request->query( 'search' )}%" ); } } - }); + } ); } /** * Order the current result, according to the mentionned columns * means the user has clicked on "reorder" */ - if ($request->query('direction') && $request->query('active')) { + if ( $request->query( 'direction' ) && $request->query( 'active' ) ) { $columns = $this->getColumns(); $cannotSort = - array_key_exists($request->query('active'), array_keys($columns)) && - $columns[$request->query('active')]['$sort'] === false; + array_key_exists( $request->query( 'active' ), array_keys( $columns ) ) && + $columns[$request->query( 'active' )]['$sort'] === false; /** * If for some reason, we're trying to sort * custom columns that doesn't have any reference on the database. */ - if ($cannotSort) { - throw new NotAllowedException(sprintf( - __('Sorting is explicitely disabled for the column "%s".'), - $columns[$request->query('active')]['label'] - )); + if ( $cannotSort ) { + throw new NotAllowedException( sprintf( + __( 'Sorting is explicitely disabled for the column "%s".' ), + $columns[$request->query( 'active' )]['label'] + ) ); } $query->orderBy( - $request->query('active'), - $request->query('direction') + $request->query( 'active' ), + $request->query( 'direction' ) ); } @@ -882,16 +887,16 @@ public function getEntries($config = []): array * if some enties ID are provided. These * reference will only be part of the result. */ - if (isset($config['pick'])) { - $query->whereIn($this->hookTableName($this->table) . '.id', $config['pick']); + if ( isset( $config['pick'] ) ) { + $query->whereIn( $this->hookTableName( $this->table ) . '.id', $config['pick'] ); } /** * if $perPage is not defined * probably we're trying to return all the entries. */ - if ($perPage) { - $entries = $query->paginate($perPage)->toArray(); + if ( $perPage ) { + $entries = $query->paginate( $perPage )->toArray(); } else { $entries = $query->get()->toArray(); } @@ -900,8 +905,8 @@ public function getEntries($config = []): array * looping entries to provide inline * options */ - $entries['data'] = collect($entries['data'])->map(function ($entry) { - $entry = new CrudEntry((array) $entry); + $entries['data'] = collect( $entries['data'] )->map( function ( $entry ) { + $entry = new CrudEntry( (array) $entry ); /** * apply casting to crud resources @@ -913,13 +918,13 @@ public function getEntries($config = []): array * We'll define a raw property * that will have default uncasted values. */ - if (! isset($entry->__raw)) { + if ( ! isset( $entry->__raw ) ) { $entry->__raw = new \stdClass; } - if (! empty($casts)) { - foreach ($casts as $column => $cast) { - if (class_exists($cast)) { + if ( ! empty( $casts ) ) { + foreach ( $casts as $column => $cast ) { + if ( class_exists( $cast ) ) { $castObject = new $cast; // We'll keep a reference of the raw @@ -927,7 +932,7 @@ public function getEntries($config = []): array $entry->__raw->$column = $entry->$column; // We'll now cast the property. - $entry->$column = $castObject->get($entry, $column, $entry->$column, []); + $entry->$column = $castObject->get( $entry, $column, $entry->$column, [] ); } } } @@ -936,21 +941,21 @@ public function getEntries($config = []): array * We'll allow any resource to mutate the * entries but make sure to keep the originals. */ - $entry = Hook::filter($this->namespace . '-crud-actions', $entry); - $entry = Hook::filter(get_class($this)::method('setActions'), $entry); + $entry = Hook::filter( $this->namespace . '-crud-actions', $entry ); + $entry = Hook::filter( get_class( $this )::method( 'setActions' ), $entry ); return $entry; - }); + } ); return $entries; } - protected function hookTableName($tableName): string + protected function hookTableName( $tableName ): string { - return Hook::filter('ns-model-table', $tableName); + return Hook::filter( 'ns-model-table', $tableName ); } - public function hook($query): void + public function hook( $query ): void { // } @@ -1014,15 +1019,15 @@ public function getFillable(): array * @param string namespace * @return CrudService */ - public function getCrudInstance($namespace) + public function getCrudInstance( $namespace ) { - $crudClass = Hook::filter('ns-crud-resource', $namespace); + $crudClass = Hook::filter( 'ns-crud-resource', $namespace ); /** * In case nothing handle this crud */ - if (! class_exists($crudClass)) { - throw new Exception(__('Unhandled crud resource')); + if ( ! class_exists( $crudClass ) ) { + throw new Exception( __( 'Unhandled crud resource' ) ); } return new $crudClass; @@ -1039,42 +1044,42 @@ public function getForm() * * @unused */ - public function getExtractedForm($entry = null, $multiEntry = false) + public function getExtractedForm( $entry = null, $multiEntry = false ) { - $form = $this->getForm($entry); + $form = $this->getForm( $entry ); $final = []; - if (isset($form['main']['validation'])) { + if ( isset( $form['main']['validation'] ) ) { $final[$form['main']['name']] = $form['main']['value']; } /** * this is specific to products */ - if (isset($form['variations'])) { - foreach ($form['variations'] as $variation) { - if ($multiEntry) { - $final['variations'][] = $this->extractTabs($variation); + if ( isset( $form['variations'] ) ) { + foreach ( $form['variations'] as $variation ) { + if ( $multiEntry ) { + $final['variations'][] = $this->extractTabs( $variation ); } else { - $final = array_merge($final, $this->extractTabs($variation)); + $final = array_merge( $final, $this->extractTabs( $variation ) ); } } } else { - $final = $this->extractTabs($form); + $final = $this->extractTabs( $form ); } return $final; } - private function extractTabs($form) + private function extractTabs( $form ) { $final = []; - foreach ($form['tabs'] as $tabKey => $tab) { - if (! empty($tab['fields'])) { - foreach ($tab['fields'] as $field) { - if (isset($field['value'])) { + foreach ( $form['tabs'] as $tabKey => $tab ) { + if ( ! empty( $tab['fields'] ) ) { + foreach ( $tab['fields'] as $field ) { + if ( isset( $field['value'] ) ) { $final[$tabKey][$field['name']] = $field['value']; } } @@ -1092,7 +1097,7 @@ public function getTabsRelations(): array return $this->tabsRelations; } - public static function table(array $config = [], string $title = null, string $description = null, string $src = null, string $createUrl = null, array $queryParams = null): ContractView + public static function table( array $config = [], ?string $title = null, ?string $description = null, ?string $src = null, ?string $createUrl = null, ?array $queryParams = null ): ContractView { $className = get_called_class(); $instance = new $className; @@ -1101,8 +1106,8 @@ public static function table(array $config = [], string $title = null, string $d * in case the default way of proceeding is not defined * we'll proceed by using the named arguments. */ - if (empty($config)) { - $config = collect(compact('title', 'description', 'src', 'createUrl', 'queryParams')) + if ( empty( $config ) ) { + $config = collect( compact( 'title', 'description', 'src', 'createUrl', 'queryParams' ) ) ->filter() ->toArray(); } @@ -1111,11 +1116,11 @@ public static function table(array $config = [], string $title = null, string $d * If a permission check return "false" * that means performing that action is disabled. */ - $instance->allowedTo('read'); + $instance->allowedTo( 'read' ); - $labels = Hook::filter($instance::method('getLabels'), $instance->getLabels()); + $labels = Hook::filter( $instance::method( 'getLabels' ), $instance->getLabels() ); - return View::make('pages.dashboard.crud.table', array_merge([ + return View::make( 'pages.dashboard.crud.table', array_merge( [ /** * that displays the title on the page. * It fetches the value from the labels @@ -1131,13 +1136,13 @@ public static function table(array $config = [], string $title = null, string $d /** * This create the src URL using the "namespace". */ - 'src' => ns()->url('/api/crud/' . $instance->namespace), + 'src' => ns()->url( '/api/crud/' . $instance->namespace ), /** * This pull the creation link. That link should takes the user * to the creation form. */ - 'createUrl' => Hook::filter($instance::method('getFilteredLinks'), $instance->getFilteredLinks())['create'] ?? false, + 'createUrl' => Hook::filter( $instance::method( 'getFilteredLinks' ), $instance->getFilteredLinks() )['create'] ?? false, /** * to provide custom query params @@ -1149,21 +1154,21 @@ public static function table(array $config = [], string $title = null, string $d * An instance of the current called crud component. */ 'instance' => $instance, - ], $config)); + ], $config ) ); } /** * Will render a crud form using * the provided settings. */ - public static function form($entry = null, array $config = [], string $title = '', string $description = '', string $src = '', string $returnUrl = '', string $submitUrl = '', string $submitMethod = '', array $queryParams = []): ContractView + public static function form( $entry = null, array $config = [], string $title = '', string $description = '', string $src = '', string $returnUrl = '', string $submitUrl = '', string $submitMethod = '', array $queryParams = [] ): ContractView { /** * in case the default way of proceeding is not defined * we'll proceed by using the named arguments. */ - if (empty($config)) { - $config = collect(compact('title', 'description', 'src', 'submitUrl', 'queryParams', 'returnUrl', 'submitMethod')) + if ( empty( $config ) ) { + $config = collect( compact( 'title', 'description', 'src', 'submitUrl', 'queryParams', 'returnUrl', 'submitMethod' ) ) ->filter() ->toArray(); } @@ -1172,13 +1177,13 @@ public static function form($entry = null, array $config = [], string $title = ' * use crud form to render a valid form. * "view" on the $config might be used to use a custom view file. */ - return View::make($config[ 'view' ] ?? 'pages.dashboard.crud.form', self::getFormConfig( + return View::make( $config[ 'view' ] ?? 'pages.dashboard.crud.form', self::getFormConfig( config: $config, entry: $entry - )); + ) ); } - public static function getFormConfig($config = [], $entry = null) + public static function getFormConfig( $config = [], $entry = null ) { $className = get_called_class(); $instance = new $className; @@ -1188,44 +1193,44 @@ public static function getFormConfig($config = [], $entry = null) * if a permission for creating or updating is * not disabled let's make a validation. */ - $instance->allowedTo($permissionType); + $instance->allowedTo( $permissionType ); - return array_merge([ + return array_merge( [ /** * this pull the title either * the form is made to create or edit a resource. */ - 'title' => $config['title'] ?? ($entry === null ? $instance->getLabels()['create_title'] : $instance->getLabels()['edit_title']), + 'title' => $config['title'] ?? ( $entry === null ? $instance->getLabels()['create_title'] : $instance->getLabels()['edit_title'] ), /** * this pull the description either the form is made to * create or edit a resource. */ - 'description' => $config['description'] ?? ($entry === null ? $instance->getLabels()['create_description'] : $instance->getLabels()['edit_description']), + 'description' => $config['description'] ?? ( $entry === null ? $instance->getLabels()['create_description'] : $instance->getLabels()['edit_description'] ), /** * this automatically build a source URL based on the identifier * provided. But can be overwritten with the config. */ - 'src' => $config['src'] ?? (ns()->url('/api/crud/' . $instance->namespace . '/' . (! empty($entry) ? 'form-config/' . $entry->id : 'form-config'))), + 'src' => $config['src'] ?? ( ns()->url( '/api/crud/' . $instance->namespace . '/' . ( ! empty( $entry ) ? 'form-config/' . $entry->id : 'form-config' ) ) ), /** * this use the built in links to create a return URL. * It can also be overwritten by the configuration. */ - 'returnUrl' => $config['returnUrl'] ?? ($instance->getLinks()['list'] ?? '#'), + 'returnUrl' => $config['returnUrl'] ?? ( $instance->getLinks()['list'] ?? '#' ), /** * This will pull the submitURL that might be different whether the $entry is * provided or not. can be overwritten on the configuration ($config). */ - 'submitUrl' => $config['submitUrl'] ?? ($entry === null ? $instance->getLinks()['post'] : str_replace('{id}', $entry->id, $instance->getLinks()['put'])), + 'submitUrl' => $config['submitUrl'] ?? ( $entry === null ? $instance->getLinks()['post'] : str_replace( '{id}', $entry->id, $instance->getLinks()['put'] ) ), /** * By default the method used is "post" but might change to "put" according to * whether the entry is provided (Model). Can be changed from the $config. */ - 'submitMethod' => $config['submitMethod'] ?? ($entry === null ? 'post' : 'put'), + 'submitMethod' => $config['submitMethod'] ?? ( $entry === null ? 'post' : 'put' ), /** * provide the current crud namespace @@ -1237,17 +1242,17 @@ public static function getFormConfig($config = [], $entry = null) * to every outgoing request on the table */ 'queryParams' => [], - ], $config); + ], $config ); } /** * perform a quick check over * the permissions array provided on the instance */ - public function allowedTo(string $permission): void + public function allowedTo( string $permission ): void { - if (isset($this->permissions) && $this->permissions[$permission] !== false) { - ns()->restrict($this->permissions[$permission]); + if ( isset( $this->permissions ) && $this->permissions[$permission] !== false ) { + ns()->restrict( $this->permissions[$permission] ); } else { throw new NotAllowedException; } @@ -1257,7 +1262,7 @@ public function allowedTo(string $permission): void * retrieve one of the declared permissions * the name must either be "create", "read", "update", "delete". */ - public function getPermission(?string $name): bool|string + public function getPermission( ?string $name ): bool|string { return $this->permissions[$name] ?? false; } @@ -1265,9 +1270,9 @@ public function getPermission(?string $name): bool|string /** * Shortcut for filtering CRUD methods */ - public static function filterMethod(string $methodName, callable|array $callback, $priority = 10, $arguments = 1): mixed + public static function filterMethod( string $methodName, callable|array $callback, $priority = 10, $arguments = 1 ): mixed { - return Hook::addFilter(self::method($methodName), $callback, $priority, $arguments); + return Hook::addFilter( self::method( $methodName ), $callback, $priority, $arguments ); } /** @@ -1278,34 +1283,42 @@ public function getShowOptions(): bool return $this->showOptions; } + /** + * Return if the table show display raw checkboxes. + */ + public function getShowCheckboxes(): bool + { + return $this->showCheckboxes; + } + /** * Will check if the provided model * has dependencies declared and existing * to prevent any deletion. */ - public function handleDependencyForDeletion(mixed $model): void + public function handleDependencyForDeletion( mixed $model ): void { - if (method_exists($model, 'getDeclaredDependencies')) { + if ( method_exists( $model, 'getDeclaredDependencies' ) ) { /** * Let's verify if the current model * is a dependency for other models. */ $declaredDependencies = $model->getDeclaredDependencies(); - foreach ($declaredDependencies as $class => $indexes) { + foreach ( $declaredDependencies as $class => $indexes ) { $localIndex = $indexes['local_index'] ?? 'id'; - $request = $class::where($indexes['foreign_index'], $model->$localIndex); + $request = $class::where( $indexes['foreign_index'], $model->$localIndex ); $dependencyFound = $request->first(); $countDependency = $request->count() - 1; - if ($dependencyFound instanceof $class) { - if (isset($model->{$indexes['local_name']}) && ! empty($indexes['foreign_name'])) { + if ( $dependencyFound instanceof $class ) { + if ( isset( $model->{$indexes['local_name']} ) && ! empty( $indexes['foreign_name'] ) ) { /** * if the foreign name is an array * we'll pull the first model set as linked * to the item being deleted. */ - if (is_array($indexes['foreign_name'])) { + if ( is_array( $indexes['foreign_name'] ) ) { $relatedSubModel = $indexes['foreign_name'][0]; // model name $localIndex = $indexes['foreign_name'][1]; // local index on the dependency table $dependencyFound $foreignIndex = $indexes['foreign_name'][2] ?? 'id'; // foreign index on the related table $model @@ -1315,20 +1328,20 @@ public function handleDependencyForDeletion(mixed $model): void * we'll find if we find the model * for the provided details. */ - $result = $relatedSubModel::where($foreignIndex, $dependencyFound->$localIndex)->first(); + $result = $relatedSubModel::where( $foreignIndex, $dependencyFound->$localIndex )->first(); /** * the model might exists. If that doesn't exists * then probably it's not existing. There might be a misconfiguration * on the relation. */ - if ($result instanceof $relatedSubModel) { - $foreignName = $result->$labelColumn ?? __('Unidentified Item'); + if ( $result instanceof $relatedSubModel ) { + $foreignName = $result->$labelColumn ?? __( 'Unidentified Item' ); } else { - $foreignName = $result->$labelColumn ?? __('Non-existent Item'); + $foreignName = $result->$labelColumn ?? __( 'Non-existent Item' ); } } else { - $foreignName = $dependencyFound->{$indexes['foreign_name']} ?? __('Unidentified Item'); + $foreignName = $dependencyFound->{$indexes['foreign_name']} ?? __( 'Unidentified Item' ); } /** @@ -1337,19 +1350,19 @@ public function handleDependencyForDeletion(mixed $model): void */ $localName = $model->{$indexes['local_name']}; - throw new NotAllowedException(sprintf( - __('Unable to delete "%s" as it\'s a dependency for "%s"%s'), + throw new NotAllowedException( sprintf( + __( 'Unable to delete "%s" as it\'s a dependency for "%s"%s' ), $localName, $foreignName, - $countDependency >= 1 ? ' ' . trans_choice('{1} and :count more item.|[2,*] and :count more items.', $countDependency, ['count' => $countDependency]) : '.' - )); + $countDependency >= 1 ? ' ' . trans_choice( '{1} and :count more item.|[2,*] and :count more items.', $countDependency, ['count' => $countDependency] ) : '.' + ) ); } else { - throw new NotAllowedException(sprintf( + throw new NotAllowedException( sprintf( $countDependency === 1 ? - __('Unable to delete this resource as it has %s dependency with %s item.') : - __('Unable to delete this resource as it has %s dependency with %s items.'), + __( 'Unable to delete this resource as it has %s dependency with %s item.' ) : + __( 'Unable to delete this resource as it has %s dependency with %s items.' ), $class - )); + ) ); } } } @@ -1379,14 +1392,14 @@ public function getFilteredLinks(): array 'delete' => ['delete'], ]; - return collect($links) - ->filter(function ($value, $key) use ($mapping) { - $rightVerb = collect($mapping)->map(fn ($value, $mapKey) => ( - in_array($key, $value) ? $mapKey : false - ))->filter(); + return collect( $links ) + ->filter( function ( $value, $key ) use ( $mapping ) { + $rightVerb = collect( $mapping )->map( fn ( $value, $mapKey ) => ( + in_array( $key, $value ) ? $mapKey : false + ) )->filter(); - return $this->getPermission($rightVerb->first() ?: null); - }) + return $this->getPermission( $rightVerb->first() ?: null ); + } ) ->toArray(); } @@ -1399,7 +1412,7 @@ public function getHeaderButtons(): array return []; } - public function getTableFooter(Output $output): Output + public function getTableFooter( Output $output ): Output { return $output; } diff --git a/app/Services/CurrencyService.php b/app/Services/CurrencyService.php index 3158f1a80..cacfc7fe6 100644 --- a/app/Services/CurrencyService.php +++ b/app/Services/CurrencyService.php @@ -41,11 +41,11 @@ class CurrencyService private static $_prefered_currency = 'iso'; - public function __construct($value, $config = []) + public function __construct( $value, $config = [] ) { - $this->value = BigDecimal::of($value); + $this->value = BigDecimal::of( $value ); - extract($config); + extract( $config ); $this->currency_iso = $currency_iso ?? self::$_currency_iso; $this->currency_symbol = $currency_symbol ?? self::$_currency_symbol; @@ -60,12 +60,12 @@ public function __construct($value, $config = []) * Will intanciate a new instance * using the default value * - * @param int|float $value + * @param int|float $value * @return CurrencyService */ - public function fresh($value) + public function fresh( $value ) { - return new CurrencyService($value, [ + return new CurrencyService( $value, [ 'currency_iso' => $this->currency_iso, 'currency_symbol' => $this->currency_symbol, 'currency_position' => $this->currency_position, @@ -73,33 +73,33 @@ public function fresh($value) 'decimal_separator' => $this->decimal_separator, 'prefered_currency' => $this->prefered_currency, 'thousand_separator' => $this->thousand_separator, - ]); + ] ); } /** * Set a value for the current instance. */ - private static function __defineAmount(float|int|string $amount): CurrencyService + private static function __defineAmount( float|int|string $amount ): CurrencyService { /** * @var CurrencyService */ - $currencyService = app()->make(CurrencyService::class); + $currencyService = app()->make( CurrencyService::class ); - return $currencyService->value($amount); + return $currencyService->value( $amount ); } /** * Define an amount to work on */ - public static function define(float|int|string $amount) + public static function define( float|int|string $amount ) { - return self::__defineAmount($amount); + return self::__defineAmount( $amount ); } - public function value(float|int|string $amount): self + public function value( float|int|string $amount ): self { - $this->value = BigDecimal::of($amount); + $this->value = BigDecimal::of( $amount ); return $this; } @@ -113,49 +113,49 @@ public function __toString() * Multiply two numbers * and return a currency object. */ - public static function multiply(int|float $first, int|float $second): self + public static function multiply( int|float $first, int|float $second ): self { return self::__defineAmount( - BigDecimal::of(trim($first)) - )->multipliedBy(trim($second)); + BigDecimal::of( trim( $first ) ) + )->multipliedBy( trim( $second ) ); } /** * Divide two numbers * and return a currency object */ - public static function divide(int|float $first, int|float $second): self + public static function divide( int|float $first, int|float $second ): self { return self::__defineAmount( - BigDecimal::of($first) - )->dividedBy($second); + BigDecimal::of( $first ) + )->dividedBy( $second ); } /** * Additionnate two operands. */ - public static function additionate(float|int $left_operand, float|int $right_operand): self + public static function additionate( float|int $left_operand, float|int $right_operand ): self { return self::__defineAmount( - BigDecimal::of($left_operand) - )->additionateBy($right_operand); + BigDecimal::of( $left_operand ) + )->additionateBy( $right_operand ); } /** * calculate a percentage of */ - public static function percent(int|float $amount, int|float $rate): self + public static function percent( int|float $amount, int|float $rate ): self { - return self::__defineAmount(BigDecimal::of($amount)) - ->multipliedBy($rate) - ->dividedBy(100); + return self::__defineAmount( BigDecimal::of( $amount ) ) + ->multipliedBy( $rate ) + ->dividedBy( 100 ); } /** * Define the currency in use * on the current process */ - public function currency($currency): string + public function currency( $currency ): string { $this->currency = $currency; @@ -169,8 +169,8 @@ public function currency($currency): string public function format(): string { $currency = $this->prefered_currency === 'iso' ? $this->currency_iso : $this->currency_symbol; - $final = sprintf('%s ' . number_format( - floatval((string) $this->value), + $final = sprintf( '%s ' . number_format( + floatval( (string) $this->value ), $this->decimal_precision, $this->decimal_separator, $this->thousand_separator @@ -190,18 +190,18 @@ public function format(): string */ public function get() { - return $this->getRaw($this->value); + return $this->getRaw( $this->value ); } /** * return a raw value for the provided number */ - public function getRaw(float|BigDecimal $value = null): float + public function getRaw( float|BigDecimal|null $value = null ): float { - if ($value === null) { - return $this->value->dividedBy(1, $this->decimal_precision, RoundingMode::HALF_UP)->toFloat(); + if ( $value === null ) { + return $this->value->dividedBy( 1, $this->decimal_precision, RoundingMode::HALF_UP )->toFloat(); } else { - return BigDecimal::of($value)->dividedBy(1, $this->decimal_precision, RoundingMode::HALF_UP)->toFloat(); + return BigDecimal::of( $value )->dividedBy( 1, $this->decimal_precision, RoundingMode::HALF_UP )->toFloat(); } return 0; @@ -211,9 +211,9 @@ public function getRaw(float|BigDecimal $value = null): float * Define accuracy of the current * Currency object */ - public function accuracy(float|int $number): self + public function accuracy( float|int $number ): self { - $this->decimal_precision = intval($number); + $this->decimal_precision = intval( $number ); return $this; } @@ -222,9 +222,9 @@ public function accuracy(float|int $number): self * Multiply the current Currency value * by the provided number. */ - public function multipliedBy(int|float $number): self + public function multipliedBy( int|float $number ): self { - $this->value = $this->value->multipliedBy($number); + $this->value = $this->value->multipliedBy( $number ); return $this; } @@ -233,16 +233,16 @@ public function multipliedBy(int|float $number): self * Multiply the current Currency value * by the provided number */ - public function multiplyBy(int|float $number): self + public function multiplyBy( int|float $number ): self { - return $this->multipliedBy($number); + return $this->multipliedBy( $number ); } /** * Divide the current Currency Value * by the provided number */ - public function dividedBy(float|int $number): self + public function dividedBy( float|int $number ): self { $this->value = $this->value->dividedBy( that: $number, @@ -260,18 +260,18 @@ public function dividedBy(float|int $number): self * @param int number to divide by * @return CurrencyService */ - public function divideBy($number) + public function divideBy( $number ) { - return $this->dividedBy($number); + return $this->dividedBy( $number ); } /** * Subtract the current Currency Value * by the provided number */ - public function subtractBy(float|int $number): self + public function subtractBy( float|int $number ): self { - $this->value = $this->value->minus($number); + $this->value = $this->value->minus( $number ); return $this; } @@ -280,23 +280,23 @@ public function subtractBy(float|int $number): self * Additionnate the current Currency Value * by the provided number */ - public function additionateBy(float|int $number): self + public function additionateBy( float|int $number ): self { - $this->value = $this->value->plus($number); + $this->value = $this->value->plus( $number ); return $this; } - public function getPercentageValue(float|int|string $value, float $percentage, string $operation = 'additionate'): BigDecimal|float|int|string + public function getPercentageValue( float|int|string $value, float $percentage, string $operation = 'additionate' ): BigDecimal|float|int|string { - $percentage = CurrencyService::define($value) - ->multiplyBy($percentage) - ->dividedBy(100); - - if ($operation === 'additionate') { - return (float) BigDecimal::of($value)->plus($percentage); - } elseif ($operation === 'subtract') { - return (float) BigDecimal::of($value)->minus($percentage); + $percentage = CurrencyService::define( $value ) + ->multiplyBy( $percentage ) + ->dividedBy( 100 ); + + if ( $operation === 'additionate' ) { + return (float) BigDecimal::of( $value )->plus( $percentage ); + } elseif ( $operation === 'subtract' ) { + return (float) BigDecimal::of( $value )->minus( $percentage ); } return $value; diff --git a/app/Services/CustomerService.php b/app/Services/CustomerService.php index fe33bb1c1..5eaf53400 100644 --- a/app/Services/CustomerService.php +++ b/app/Services/CustomerService.php @@ -31,21 +31,21 @@ class CustomerService * * @param array customers */ - public function get($id = null) + public function get( $id = null ) { - if ($id === null) { - return Customer::with('billing') - ->with('shipping') - ->where('group_id', '<>', null) - ->orderBy('created_at', 'desc')->get(); + if ( $id === null ) { + return Customer::with( 'billing' ) + ->with( 'shipping' ) + ->where( 'group_id', '<>', null ) + ->orderBy( 'created_at', 'desc' )->get(); } else { try { - return Customer::with('addresses')->findOrFail($id); - } catch (Exception $exception) { - throw new Exception(sprintf( - __('Unable to find the customer using the provided id %s.'), + return Customer::with( 'addresses' )->findOrFail( $id ); + } catch ( Exception $exception ) { + throw new Exception( sprintf( + __( 'Unable to find the customer using the provided id %s.' ), $id - )); + ) ); } } } @@ -53,101 +53,101 @@ public function get($id = null) /** * Retrieve the recent active customers. * - * @param int $limit + * @param int $limit * @return Collection */ - public function getRecentlyActive($limit = 30) + public function getRecentlyActive( $limit = 30 ) { - return Customer::with('billing') - ->with('shipping', 'group') - ->where('group_id', '<>', null) - ->limit($limit) - ->orderBy('updated_at', 'desc')->get(); + return Customer::with( 'billing' ) + ->with( 'shipping', 'group' ) + ->where( 'group_id', '<>', null ) + ->limit( $limit ) + ->orderBy( 'updated_at', 'desc' )->get(); } /** * Delete the customers addresses * using the id provided */ - public function deleteCustomerAttributes(int $id): void + public function deleteCustomerAttributes( int $id ): void { - CustomerAddress::where('customer_id', $id)->delete(); + CustomerAddress::where( 'customer_id', $id )->delete(); } /** * delete a specific customer * using a provided id */ - public function delete(int|Customer $id): array + public function delete( int|Customer $id ): array { /** * an authorized user */ - if ($id instanceof Customer) { + if ( $id instanceof Customer ) { $customer = $id; } else { - $customer = Customer::find($id); + $customer = Customer::find( $id ); - if (! $customer instanceof Customer) { - throw new NotFoundException(__('Unable to find the customer using the provided id.')); + if ( ! $customer instanceof Customer ) { + throw new NotFoundException( __( 'Unable to find the customer using the provided id.' ) ); } } - CustomerBeforeDeletedEvent::dispatch($customer); + CustomerBeforeDeletedEvent::dispatch( $customer ); $customer->delete(); return [ 'status' => 'success', - 'message' => __('The customer has been deleted.'), + 'message' => __( 'The customer has been deleted.' ), ]; } /** * Search customers having the defined argument. */ - public function search(int|string $argument): Collection + public function search( int|string $argument ): Collection { - $customers = Customer::with([ 'billing', 'shipping', 'group' ]) - ->orWhere('first_name', 'like', '%' . $argument . '%') - ->orWhere('last_name', 'like', '%' . $argument . '%') - ->orWhere('email', 'like', '%' . $argument . '%') - ->orWhere('phone', 'like', '%' . $argument . '%') - ->limit(10) + $customers = Customer::with( [ 'billing', 'shipping', 'group' ] ) + ->orWhere( 'first_name', 'like', '%' . $argument . '%' ) + ->orWhere( 'last_name', 'like', '%' . $argument . '%' ) + ->orWhere( 'email', 'like', '%' . $argument . '%' ) + ->orWhere( 'phone', 'like', '%' . $argument . '%' ) + ->limit( 10 ) ->get(); return $customers; } - public function precheckCustomers(array $fields, $id = null): void + public function precheckCustomers( array $fields, $id = null ): void { - if ($id === null) { + if ( $id === null ) { /** * Let's find if a similar customer exist with * the provided email */ - $customer = Customer::byEmail($fields[ 'email' ])->first(); + $customer = Customer::byEmail( $fields[ 'email' ] )->first(); } else { /** * Let's find if a similar customer exist with * the provided and which is not the actula customer. */ - $customer = Customer::byEmail($fields[ 'email' ]) - ->where('nexopos_users.id', '<>', $id) + $customer = Customer::byEmail( $fields[ 'email' ] ) + ->where( 'nexopos_users.id', '<>', $id ) ->first(); } - if ($customer instanceof Customer && ! empty($fields[ 'email' ])) { - throw new NotAllowedException(sprintf(__('The email "%s" is already used for another customer.'), $fields[ 'email' ])); + if ( $customer instanceof Customer && ! empty( $fields[ 'email' ] ) ) { + throw new NotAllowedException( sprintf( __( 'The email "%s" is already used for another customer.' ), $fields[ 'email' ] ) ); } } /** * Create customer fields. */ - public function create(array $fields): array + public function create( array $fields ): array { - $this->precheckCustomers($fields); + $this->precheckCustomers( $fields ); /** * saving a customer @@ -156,8 +156,8 @@ public function create(array $fields): array */ $customer = new Customer; - foreach ($fields as $field => $value) { - if ($field !== 'address') { + foreach ( $fields as $field => $value ) { + if ( $field !== 'address' ) { $customer->$field = $value; } } @@ -171,15 +171,15 @@ public function create(array $fields): array */ $address = $fields[ 'address' ]; - if (is_array($address)) { - foreach ($address as $type => $fields) { - if (in_array($type, [ 'billing', 'shipping' ])) { + if ( is_array( $address ) ) { + foreach ( $address as $type => $fields ) { + if ( in_array( $type, [ 'billing', 'shipping' ] ) ) { $customerAddress = new CustomerAddress; $customerAddress->type = $type; $customerAddress->author = Auth::id(); $customerAddress->customer_id = $customer->id; - foreach ($fields as $field => $value) { + foreach ( $fields as $field => $value ) { $customerAddress->$field = $value; } @@ -193,8 +193,8 @@ public function create(array $fields): array return [ 'status' => 'success', - 'message' => __('The customer has been created.'), - 'data' => compact('customer'), + 'message' => __( 'The customer has been created.' ), + 'data' => compact( 'customer' ), ]; } @@ -202,18 +202,18 @@ public function create(array $fields): array * Update a specific customer * using a provided informations. */ - public function update(int $id, array $fields): array + public function update( int $id, array $fields ): array { - $customer = Customer::find($id); + $customer = Customer::find( $id ); - if (! $customer instanceof Customer) { - throw new NotFoundException(__('Unable to find the customer using the provided ID.')); + if ( ! $customer instanceof Customer ) { + throw new NotFoundException( __( 'Unable to find the customer using the provided ID.' ) ); } - $this->precheckCustomers($fields, $id); + $this->precheckCustomers( $fields, $id ); - foreach ($fields as $field => $value) { - if ($field !== 'address') { + foreach ( $fields as $field => $value ) { + if ( $field !== 'address' ) { $customer->$field = $value; } } @@ -227,21 +227,21 @@ public function update(int $id, array $fields): array */ $address = $fields[ 'address' ]; - if (is_array($address)) { - foreach ($address as $type => $addressFields) { - if (in_array($type, [ 'billing', 'shipping' ])) { - $customerAddress = CustomerAddress::from($customer, $type)->first(); + if ( is_array( $address ) ) { + foreach ( $address as $type => $addressFields ) { + if ( in_array( $type, [ 'billing', 'shipping' ] ) ) { + $customerAddress = CustomerAddress::from( $customer, $type )->first(); /** * If the customer address type has * already been saved before */ - if ($customerAddress instanceof CustomerAddress) { + if ( $customerAddress instanceof CustomerAddress ) { $customerAddress->type = $type; $customerAddress->author = Auth::id(); $customerAddress->customer_id = $customer->id; - foreach ($addressFields as $field => $value) { + foreach ( $addressFields as $field => $value ) { $customerAddress->$field = $value; } @@ -252,7 +252,7 @@ public function update(int $id, array $fields): array $customerAddress->author = Auth::id(); $customerAddress->customer_id = $customer->id; - foreach ($addressFields as $field => $value) { + foreach ( $addressFields as $field => $value ) { $customerAddress->$field = $value; } @@ -267,17 +267,17 @@ public function update(int $id, array $fields): array return [ 'status' => 'success', - 'message' => __('The customer has been edited.'), - 'data' => compact('customer'), + 'message' => __( 'The customer has been edited.' ), + 'data' => compact( 'customer' ), ]; } /** * get customers addresses */ - public function getCustomerAddresses(int $id): Collection + public function getCustomerAddresses( int $id ): Collection { - $customer = $this->get($id); + $customer = $this->get( $id ); return $customer->addresses; } @@ -286,37 +286,37 @@ public function getCustomerAddresses(int $id): Collection * Delete a specific customer * havign the defined email */ - public function deleteUsingEmail(string $email): array + public function deleteUsingEmail( string $email ): array { - $customer = Customer::byEmail($email)->first(); + $customer = Customer::byEmail( $email )->first(); - if (! $customer instanceof Customer) { - throw new NotFoundException(__('Unable to find the customer using the provided email.')); + if ( ! $customer instanceof Customer ) { + throw new NotFoundException( __( 'Unable to find the customer using the provided email.' ) ); } - CustomerAddress::where('customer_id', $customer->id)->delete(); + CustomerAddress::where( 'customer_id', $customer->id )->delete(); $customer->delete(); return [ 'status' => 'success', - 'message' => __('The customer has been deleted.'), + 'message' => __( 'The customer has been deleted.' ), ]; } /** * save a customer transaction. */ - public function saveTransaction(Customer $customer, string $operation, float $amount, string $description = '', array $details = []): array + public function saveTransaction( Customer $customer, string $operation, float $amount, string $description = '', array $details = [] ): array { - if (in_array($operation, [ + if ( in_array( $operation, [ CustomerAccountHistory::OPERATION_DEDUCT, CustomerAccountHistory::OPERATION_PAYMENT, - ]) && $customer->account_amount - $amount < 0) { - throw new NotAllowedException(sprintf( - __('Not enough credits on the customer account. Requested : %s, Remaining: %s.'), - Currency::fresh(abs($amount)), - Currency::fresh($customer->account_amount), - )); + ] ) && $customer->account_amount - $amount < 0 ) { + throw new NotAllowedException( sprintf( + __( 'Not enough credits on the customer account. Requested : %s, Remaining: %s.' ), + Currency::fresh( abs( $amount ) ), + Currency::fresh( $customer->account_amount ), + ) ); } /** @@ -324,8 +324,8 @@ public function saveTransaction(Customer $customer, string $operation, float $am * and base on that we'll populate the * previous_amount */ - $beforeRecord = CustomerAccountHistory::where('customer_id', $customer->id) - ->orderBy('id', 'desc') + $beforeRecord = CustomerAccountHistory::where( 'customer_id', $customer->id ) + ->orderBy( 'id', 'desc' ) ->first(); $previousNextAmount = $beforeRecord instanceof CustomerAccountHistory ? $beforeRecord->next_amount : 0; @@ -333,15 +333,15 @@ public function saveTransaction(Customer $customer, string $operation, float $am /** * We'll make sure to define that are the previous and next amount. */ - if (in_array($operation, [ + if ( in_array( $operation, [ CustomerAccountHistory::OPERATION_DEDUCT, CustomerAccountHistory::OPERATION_PAYMENT, - ])) { + ] ) ) { $next_amount = $previousNextAmount - $amount; - } elseif (in_array($operation, [ + } elseif ( in_array( $operation, [ CustomerAccountHistory::OPERATION_ADD, CustomerAccountHistory::OPERATION_REFUND, - ])) { + ] ) ) { $next_amount = $previousNextAmount + $amount; } @@ -358,18 +358,18 @@ public function saveTransaction(Customer $customer, string $operation, float $am * We can now optionally provide * additional details while storing the customer history */ - if (! empty($details)) { - foreach ($details as $key => $value) { + if ( ! empty( $details ) ) { + foreach ( $details as $key => $value ) { /** * Some details must be sensitive * and not changed. */ - if (! in_array($key, [ + if ( ! in_array( $key, [ 'id', 'next_amount', 'previous_amount', 'amount', - ])) { + ] ) ) { $customerAccountHistory->$key = $value; } } @@ -377,59 +377,59 @@ public function saveTransaction(Customer $customer, string $operation, float $am $customerAccountHistory->save(); - event(new AfterCustomerAccountHistoryCreatedEvent($customerAccountHistory)); + event( new AfterCustomerAccountHistoryCreatedEvent( $customerAccountHistory ) ); return [ 'status' => 'success', - 'message' => __('The customer account has been updated.'), - 'data' => compact('customerAccountHistory'), + 'message' => __( 'The customer account has been updated.' ), + 'data' => compact( 'customerAccountHistory' ), ]; } /** * Updates the customers account. */ - public function updateCustomerAccount(CustomerAccountHistory $history): void + public function updateCustomerAccount( CustomerAccountHistory $history ): void { - if (in_array($history->operation, [ + if ( in_array( $history->operation, [ CustomerAccountHistory::OPERATION_DEDUCT, CustomerAccountHistory::OPERATION_PAYMENT, - ])) { + ] ) ) { $history->customer->account_amount -= $history->amount; - } elseif (in_array($history->operation, [ + } elseif ( in_array( $history->operation, [ CustomerAccountHistory::OPERATION_ADD, CustomerAccountHistory::OPERATION_REFUND, - ])) { + ] ) ) { $history->customer->account_amount += $history->amount; } $history->customer->save(); } - public function increasePurchases(Customer $customer, $value) + public function increasePurchases( Customer $customer, $value ) { $customer->purchases_amount += $value; $customer->save(); - CustomerAfterUpdatedEvent::dispatch($customer); + CustomerAfterUpdatedEvent::dispatch( $customer ); return $customer; } - public function decreasePurchases(Customer $customer, $value) + public function decreasePurchases( Customer $customer, $value ) { $customer->purchases_amount -= $value; $customer->save(); - CustomerAfterUpdatedEvent::dispatch($customer); + CustomerAfterUpdatedEvent::dispatch( $customer ); return $customer; } - public function canReduceCustomerAccount(Customer $customer, $value) + public function canReduceCustomerAccount( Customer $customer, $value ) { - if ($customer->account_amount - $value < 0) { - throw new NotAllowedException(__('The customer account doesn\'t have enough funds to proceed.')); + if ( $customer->account_amount - $value < 0 ) { + throw new NotAllowedException( __( 'The customer account doesn\'t have enough funds to proceed.' ) ); } } @@ -439,33 +439,33 @@ public function canReduceCustomerAccount(Customer $customer, $value) * * @return void */ - public function computeReward(Order $order) + public function computeReward( Order $order ) { - $order->load('customer.group.reward'); + $order->load( 'customer.group.reward' ); /** * if the customer is not assigned to a valid customer group, * the reward will not be computed. */ - if (! $order->customer->group instanceof CustomerGroup) { + if ( ! $order->customer->group instanceof CustomerGroup ) { return; } $reward = $order->customer->group->reward; - if ($reward instanceof RewardSystem) { + if ( $reward instanceof RewardSystem ) { $points = 0; - $reward->rules->each(function ($rule) use ($order, &$points) { - if ($order->total >= $rule->from && $order->total <= $rule->to) { + $reward->rules->each( function ( $rule ) use ( $order, &$points ) { + if ( $order->total >= $rule->from && $order->total <= $rule->to ) { $points += (float) $rule->reward; } - }); + } ); - $currentReward = CustomerReward::where('reward_id', $reward->id) - ->where('customer_id', $order->customer->id) + $currentReward = CustomerReward::where( 'reward_id', $reward->id ) + ->where( 'customer_id', $order->customer->id ) ->first(); - if (! $currentReward instanceof CustomerReward) { + if ( ! $currentReward instanceof CustomerReward ) { $currentReward = new CustomerReward; $currentReward->customer_id = $order->customer->id; $currentReward->reward_id = $reward->id; @@ -476,51 +476,51 @@ public function computeReward(Order $order) $currentReward->points += $points; $currentReward->save(); - $currentReward->load('reward'); + $currentReward->load( 'reward' ); - CustomerRewardAfterCreatedEvent::dispatch($currentReward, $order->customer, $reward); + CustomerRewardAfterCreatedEvent::dispatch( $currentReward, $order->customer, $reward ); } } - public function applyReward(CustomerReward $customerReward, Customer $customer, RewardSystem $reward) + public function applyReward( CustomerReward $customerReward, Customer $customer, RewardSystem $reward ) { /** * the user has reached or exceeded the reward. * we'll issue a new coupon and update the customer * point counter */ - if ($customerReward->points >= $customerReward->target) { + if ( $customerReward->points >= $customerReward->target ) { $coupon = $reward->coupon; - if ($coupon instanceof Coupon) { + if ( $coupon instanceof Coupon ) { $customerCoupon = new CustomerCoupon; $customerCoupon->coupon_id = $coupon->id; $customerCoupon->name = $coupon->name; $customerCoupon->active = true; - $customerCoupon->code = $coupon->code . '-' . ns()->date->format('dmi'); + $customerCoupon->code = $coupon->code . '-' . ns()->date->format( 'dmi' ); $customerCoupon->customer_id = $customer->id; $customerCoupon->limit_usage = $coupon->limit_usage; $customerCoupon->author = $customerReward->reward->author; $customerCoupon->save(); - $customerReward->points = abs($customerReward->points - $customerReward->target); + $customerReward->points = abs( $customerReward->points - $customerReward->target ); $customerReward->save(); - CustomerRewardAfterCouponIssuedEvent::dispatch($customerCoupon); + CustomerRewardAfterCouponIssuedEvent::dispatch( $customerCoupon ); } else { /** * @var NotificationService */ - $notify = app()->make(NotificationService::class); - $notify->create([ - 'title' => __('Issuing Coupon Failed'), + $notify = app()->make( NotificationService::class ); + $notify->create( [ + 'title' => __( 'Issuing Coupon Failed' ), 'description' => sprintf( - __('Unable to apply a coupon attached to the reward "%s". It looks like the coupon no more exists.'), + __( 'Unable to apply a coupon attached to the reward "%s". It looks like the coupon no more exists.' ), $reward->name ), 'identifier' => 'coupon-issuing-issue-' . $reward->id, - 'url' => ns()->route('ns.dashboard.rewards-edit', [ 'reward' => $reward->id ]), - ])->dispatchForGroupNamespaces([ 'admin', 'nexopos.store.administrator' ]); + 'url' => ns()->route( 'ns.dashboard.rewards-edit', [ 'reward' => $reward->id ] ), + ] )->dispatchForGroupNamespaces( [ 'admin', 'nexopos.store.administrator' ] ); } } } @@ -529,57 +529,57 @@ public function applyReward(CustomerReward $customerReward, Customer $customer, * load specific coupon using a code and optionnaly * the customer id for verification purpose. * - * @param string $customer_id + * @param string $customer_id * @return array */ - public function loadCoupon(string $code, $customer_id = null) + public function loadCoupon( string $code, $customer_id = null ) { - $coupon = Coupon::code($code) - ->with('products.product') - ->with('categories.category') - ->with('customers') - ->with([ 'customerCoupon' => function ($query) use ($customer_id) { - $query->where('customer_id', $customer_id); - }]) - ->with('groups') + $coupon = Coupon::code( $code ) + ->with( 'products.product' ) + ->with( 'categories.category' ) + ->with( 'customers' ) + ->with( [ 'customerCoupon' => function ( $query ) use ( $customer_id ) { + $query->where( 'customer_id', $customer_id ); + }] ) + ->with( 'groups' ) ->first(); - if ($coupon instanceof Coupon) { - if ($coupon->customers()->count() > 0) { + if ( $coupon instanceof Coupon ) { + if ( $coupon->customers()->count() > 0 ) { $customers_id = $coupon->customers() - ->get('customer_id') - ->map(fn($coupon) => $coupon->customer_id) + ->get( 'customer_id' ) + ->map( fn( $coupon ) => $coupon->customer_id ) ->flatten() ->toArray(); - if (! in_array($customer_id, $customers_id)) { - throw new Exception(__('The provided coupon cannot be loaded for that customer.')); + if ( ! in_array( $customer_id, $customers_id ) ) { + throw new Exception( __( 'The provided coupon cannot be loaded for that customer.' ) ); } } - if ($coupon->groups()->count() > 0) { - $customer = Customer::with('group')->find($customer_id); + if ( $coupon->groups()->count() > 0 ) { + $customer = Customer::with( 'group' )->find( $customer_id ); $groups_id = $coupon->groups() - ->get('group_id') - ->map(fn($coupon) => $coupon->group_id) + ->get( 'group_id' ) + ->map( fn( $coupon ) => $coupon->group_id ) ->flatten() ->toArray(); - if (! in_array($customer->group->id, $groups_id)) { - throw new Exception(__('The provided coupon cannot be loaded for the group assigned to the selected customer.')); + if ( ! in_array( $customer->group->id, $groups_id ) ) { + throw new Exception( __( 'The provided coupon cannot be loaded for the group assigned to the selected customer.' ) ); } } return $coupon; } - throw new Exception(__('Unable to find a coupon with the provided code.')); + throw new Exception( __( 'Unable to find a coupon with the provided code.' ) ); } /** * @todo this method doesn't seems used. */ - public function setCouponHistory($fields, Coupon $coupon) + public function setCouponHistory( $fields, Coupon $coupon ) { $customerCoupon = new CustomerCoupon; $customerCoupon->name = $coupon->name; @@ -591,57 +591,57 @@ public function setCouponHistory($fields, Coupon $coupon) $customerCoupon->author = Auth::id(); $customerCoupon->save(); - $this->setActiveStatus($customerCoupon); + $this->setActiveStatus( $customerCoupon ); return [ 'status' => 'sucess', - 'message' => __('The coupon has been updated.'), + 'message' => __( 'The coupon has been updated.' ), ]; } - public function setActiveStatus(CustomerCoupon $coupon) + public function setActiveStatus( CustomerCoupon $coupon ) { - if ($coupon->limit_usage > $coupon->usage) { + if ( $coupon->limit_usage > $coupon->usage ) { $coupon->active = true; } - if ((int) $coupon->limit_usage === 0) { + if ( (int) $coupon->limit_usage === 0 ) { $coupon->active = true; } $coupon->save(); } - public function deleteRelatedCustomerCoupon(Coupon $coupon) + public function deleteRelatedCustomerCoupon( Coupon $coupon ) { - CustomerCoupon::couponID($coupon->id) + CustomerCoupon::couponID( $coupon->id ) ->get() - ->each(function ($coupon) { + ->each( function ( $coupon ) { $coupon->delete(); - }); + } ); } /** * Will refresh the owed amount * for the provided customer */ - public function updateCustomerOwedAmount(Customer $customer) + public function updateCustomerOwedAmount( Customer $customer ) { - $unpaid = Order::where('customer_id', $customer->id)->whereIn('payment_status', [ + $unpaid = Order::where( 'customer_id', $customer->id )->whereIn( 'payment_status', [ Order::PAYMENT_UNPAID, - ])->sum('total'); + ] )->sum( 'total' ); /** * Change here will be negative, so we * want to be an absolute value. */ - $orders = Order::where('customer_id', $customer->id)->whereIn('payment_status', [ + $orders = Order::where( 'customer_id', $customer->id )->whereIn( 'payment_status', [ Order::PAYMENT_PARTIALLY, - ]); + ] ); - $change = abs($orders->sum('change')); + $change = abs( $orders->sum( 'change' ) ); - $customer->owed_amount = ns()->currency->getRaw($unpaid + $change); + $customer->owed_amount = ns()->currency->getRaw( $unpaid + $change ); $customer->save(); } @@ -649,21 +649,21 @@ public function updateCustomerOwedAmount(Customer $customer) * Create customer group using * provided fields * - * @param array $fields - * @param array $group + * @param array $fields + * @param array $group * @return array $response */ - public function createGroup($fields, CustomerGroup $group = null) + public function createGroup( $fields, ?CustomerGroup $group = null ) { - if ($group === null) { - $group = CustomerGroup::where('name', $fields[ 'name' ])->first(); + if ( $group === null ) { + $group = CustomerGroup::where( 'name', $fields[ 'name' ] )->first(); } - if (! $group instanceof CustomerGroup) { + if ( ! $group instanceof CustomerGroup ) { $group = new CustomerGroup; } - foreach ($fields as $name => $value) { + foreach ( $fields as $name => $value ) { $group->$name = $value; } @@ -672,29 +672,29 @@ public function createGroup($fields, CustomerGroup $group = null) return [ 'status' => 'sucecss', - 'message' => __('The group has been created.'), - 'data' => compact('group'), + 'message' => __( 'The group has been created.' ), + 'data' => compact( 'group' ), ]; } /** * return the customer account operation label * - * @param string $label + * @param string $label * @return string */ - public function getCustomerAccountOperationLabel($label) + public function getCustomerAccountOperationLabel( $label ) { - switch ($label) { - case CustomerAccountHistory::OPERATION_ADD: return __('Crediting'); + switch ( $label ) { + case CustomerAccountHistory::OPERATION_ADD: return __( 'Crediting' ); break; - case CustomerAccountHistory::OPERATION_DEDUCT: return __('Deducting'); + case CustomerAccountHistory::OPERATION_DEDUCT: return __( 'Deducting' ); break; - case CustomerAccountHistory::OPERATION_PAYMENT: return __('Order Payment'); + case CustomerAccountHistory::OPERATION_PAYMENT: return __( 'Order Payment' ); break; - case CustomerAccountHistory::OPERATION_REFUND: return __('Order Refund'); + case CustomerAccountHistory::OPERATION_REFUND: return __( 'Order Refund' ); break; - default: return __('Unknown Operation'); + default: return __( 'Unknown Operation' ); break; } } @@ -703,11 +703,11 @@ public function getCustomerAccountOperationLabel($label) * Will increase the customer purchase * when an order is flagged as paid */ - public function increaseCustomerPurchase(Order $order) + public function increaseCustomerPurchase( Order $order ) { - if (in_array($order->payment_status, [ + if ( in_array( $order->payment_status, [ Order::PAYMENT_PAID, - ])) { + ] ) ) { $this->increasePurchases( customer: $order->customer, value: $order->total @@ -719,11 +719,11 @@ public function increaseCustomerPurchase(Order $order) * If a customer tries to use a coupon. That coupon is assigned to his account * with the rule defined by the parent coupon. */ - public function assignCouponUsage(int $customer_id, Coupon $coupon): CustomerCoupon + public function assignCouponUsage( int $customer_id, Coupon $coupon ): CustomerCoupon { - $customerCoupon = CustomerCoupon::where('customer_id', $customer_id)->where('coupon_id', $coupon->id)->first(); + $customerCoupon = CustomerCoupon::where( 'customer_id', $customer_id )->where( 'coupon_id', $coupon->id )->first(); - if (! $customerCoupon instanceof CustomerCoupon) { + if ( ! $customerCoupon instanceof CustomerCoupon ) { $customerCoupon = new CustomerCoupon; $customerCoupon->customer_id = $customer_id; $customerCoupon->coupon_id = $coupon->id; @@ -738,19 +738,19 @@ public function assignCouponUsage(int $customer_id, Coupon $coupon): CustomerCou return $customerCoupon; } - public function checkCouponExistence(array $couponConfig, $fields): Coupon + public function checkCouponExistence( array $couponConfig, $fields ): Coupon { - $coupon = Coupon::find($couponConfig[ 'coupon_id' ]); + $coupon = Coupon::find( $couponConfig[ 'coupon_id' ] ); - if (! $coupon instanceof Coupon) { - throw new NotFoundException(sprintf(__('Unable to find a reference to the attached coupon : %s'), $couponConfig[ 'name' ] ?? __('N/A'))); + if ( ! $coupon instanceof Coupon ) { + throw new NotFoundException( sprintf( __( 'Unable to find a reference to the attached coupon : %s' ), $couponConfig[ 'name' ] ?? __( 'N/A' ) ) ); } /** * we'll check if the coupon is still valid. */ - if ($coupon->valid_until !== null && ns()->date->lessThan(Carbon::parse($coupon->valid_until))) { - throw new NotAllowedException(sprintf(__('Unable to use the coupon %s as it has expired.'), $coupon->name)); + if ( $coupon->valid_until !== null && ns()->date->lessThan( Carbon::parse( $coupon->valid_until ) ) ) { + throw new NotAllowedException( sprintf( __( 'Unable to use the coupon %s as it has expired.' ), $coupon->name ) ); } /** @@ -765,22 +765,22 @@ public function checkCouponExistence(array $couponConfig, $fields): Coupon * @todo Well we're doing this because we don't yet have a proper time picker. As we're using a date time picker * we're extracting the hours from it :(. */ - $hourStarts = ! empty($coupon->valid_hours_start) ? Carbon::parse($coupon->valid_hours_start)->format('H:i') : null; - $hoursEnds = ! empty($coupon->valid_hours_end) ? Carbon::parse($coupon->valid_hours_end)->format('H:i') : null; + $hourStarts = ! empty( $coupon->valid_hours_start ) ? Carbon::parse( $coupon->valid_hours_start )->format( 'H:i' ) : null; + $hoursEnds = ! empty( $coupon->valid_hours_end ) ? Carbon::parse( $coupon->valid_hours_end )->format( 'H:i' ) : null; if ( $hourStarts !== null && - $hoursEnds !== null) { - $todayStartDate = ns()->date->format('Y-m-d') . ' ' . $hourStarts; - $todayEndDate = ns()->date->format('Y-m-d') . ' ' . $hoursEnds; + $hoursEnds !== null ) { + $todayStartDate = ns()->date->format( 'Y-m-d' ) . ' ' . $hourStarts; + $todayEndDate = ns()->date->format( 'Y-m-d' ) . ' ' . $hoursEnds; if ( ns()->date->between( - date1: Carbon::parse($todayStartDate), - date2: Carbon::parse($todayEndDate) + date1: Carbon::parse( $todayStartDate ), + date2: Carbon::parse( $todayEndDate ) ) ) { - throw new NotAllowedException(sprintf(__('Unable to use the coupon %s at this moment.'), $coupon->name)); + throw new NotAllowedException( sprintf( __( 'Unable to use the coupon %s at this moment.' ), $coupon->name ) ); } } @@ -788,21 +788,21 @@ public function checkCouponExistence(array $couponConfig, $fields): Coupon * We'll now check if the customer has an ongoing * coupon with the provided parameters */ - $customerCoupon = CustomerCoupon::where('coupon_id', $couponConfig[ 'coupon_id' ]) - ->where('customer_id', $fields[ 'customer_id' ] ?? 0) + $customerCoupon = CustomerCoupon::where( 'coupon_id', $couponConfig[ 'coupon_id' ] ) + ->where( 'customer_id', $fields[ 'customer_id' ] ?? 0 ) ->first(); - if ($customerCoupon instanceof CustomerCoupon) { - if (! $customerCoupon->active) { - throw new NotAllowedException(sprintf(__('You\'re not allowed to use this coupon as it\'s no longer active'))); + if ( $customerCoupon instanceof CustomerCoupon ) { + if ( ! $customerCoupon->active ) { + throw new NotAllowedException( sprintf( __( 'You\'re not allowed to use this coupon as it\'s no longer active' ) ) ); } /** * We're trying to use a coupon that is already exhausted * this should be prevented here. */ - if ($customerCoupon->limit_usage > 0 && $customerCoupon->usage + 1 > $customerCoupon->limit_usage) { - throw new NotAllowedException(sprintf(__('You\'re not allowed to use this coupon it has reached the maximum usage allowed.'))); + if ( $customerCoupon->limit_usage > 0 && $customerCoupon->usage + 1 > $customerCoupon->limit_usage ) { + throw new NotAllowedException( sprintf( __( 'You\'re not allowed to use this coupon it has reached the maximum usage allowed.' ) ) ); } } @@ -813,13 +813,13 @@ public function checkCouponExistence(array $couponConfig, $fields): Coupon * Will check if a coupon is a eligible for an increase * and will perform a usage increase. */ - public function increaseCouponUsage(CustomerCoupon $customerCoupon) + public function increaseCouponUsage( CustomerCoupon $customerCoupon ) { - if ($customerCoupon->limit_usage > 0) { - if ($customerCoupon->usage + 1 < $customerCoupon->limit_usage) { + if ( $customerCoupon->limit_usage > 0 ) { + if ( $customerCoupon->usage + 1 < $customerCoupon->limit_usage ) { $customerCoupon->usage += 1; $customerCoupon->save(); - } elseif ($customerCoupon->usage + 1 === $customerCoupon->limit_usage) { + } elseif ( $customerCoupon->usage + 1 === $customerCoupon->limit_usage ) { $customerCoupon->usage += 1; $customerCoupon->active = false; $customerCoupon->save(); @@ -831,69 +831,69 @@ public function increaseCouponUsage(CustomerCoupon $customerCoupon) * returns address fields and will attempt * filling those field with the resource provided. */ - public function getAddressFields($model = null): array + public function getAddressFields( $model = null ): array { return [ [ 'type' => 'text', 'name' => 'first_name', 'value' => $model->first_name ?? '', - 'label' => __('First Name'), - 'description' => __('Provide the billing first name.'), + 'label' => __( 'First Name' ), + 'description' => __( 'Provide the billing first name.' ), ], [ 'type' => 'text', 'name' => 'last_name', 'value' => $model->last_name ?? '', - 'label' => __('Last Name'), - 'description' => __('Provide the billing last name.'), + 'label' => __( 'Last Name' ), + 'description' => __( 'Provide the billing last name.' ), ], [ 'type' => 'text', 'name' => 'phone', 'value' => $model->phone ?? '', - 'label' => __('Phone'), - 'description' => __('Billing phone number.'), + 'label' => __( 'Phone' ), + 'description' => __( 'Billing phone number.' ), ], [ 'type' => 'text', 'name' => 'address_1', 'value' => $model->address_1 ?? '', - 'label' => __('Address 1'), - 'description' => __('Billing First Address.'), + 'label' => __( 'Address 1' ), + 'description' => __( 'Billing First Address.' ), ], [ 'type' => 'text', 'name' => 'address_2', 'value' => $model->address_2 ?? '', - 'label' => __('Address 2'), - 'description' => __('Billing Second Address.'), + 'label' => __( 'Address 2' ), + 'description' => __( 'Billing Second Address.' ), ], [ 'type' => 'text', 'name' => 'country', 'value' => $model->country ?? '', - 'label' => __('Country'), - 'description' => __('Billing Country.'), + 'label' => __( 'Country' ), + 'description' => __( 'Billing Country.' ), ], [ 'type' => 'text', 'name' => 'city', 'value' => $model->city ?? '', - 'label' => __('City'), - 'description' => __('City'), + 'label' => __( 'City' ), + 'description' => __( 'City' ), ], [ 'type' => 'text', 'name' => 'pobox', 'value' => $model->pobox ?? '', - 'label' => __('PO.Box'), - 'description' => __('Postal Address'), + 'label' => __( 'PO.Box' ), + 'description' => __( 'Postal Address' ), ], [ 'type' => 'text', 'name' => 'company', 'value' => $model->company ?? '', - 'label' => __('Company'), - 'description' => __('Company'), + 'label' => __( 'Company' ), + 'description' => __( 'Company' ), ], [ 'type' => 'text', 'name' => 'email', 'value' => $model->email ?? '', - 'label' => __('Email'), - 'description' => __('Email'), + 'label' => __( 'Email' ), + 'description' => __( 'Email' ), ], ]; } diff --git a/app/Services/DateService.php b/app/Services/DateService.php index 45ecc61c3..f269360cf 100644 --- a/app/Services/DateService.php +++ b/app/Services/DateService.php @@ -14,23 +14,23 @@ class DateService extends Carbon private $timezone; - public function __construct($time = 'now', $timezone = 'Europe/London') + public function __construct( $time = 'now', $timezone = 'Europe/London' ) { - parent::__construct($time, $timezone); + parent::__construct( $time, $timezone ); - if (Helper::installed()) { + if ( Helper::installed() ) { $this->timezone = $timezone; - $this->options = app()->make(Options::class); + $this->options = app()->make( Options::class ); - if (Auth::check()) { - $language = Auth::user()->attribute->language ?: $this->options->get('ns_store_language', 'light'); + if ( Auth::check() ) { + $language = Auth::user()->attribute->language ?: $this->options->get( 'ns_store_language', 'light' ); } else { - $language = $this->options->get('ns_store_language', 'en'); + $language = $this->options->get( 'ns_store_language', 'en' ); } - $longForm = $this->getLongLocaleCode($language); + $longForm = $this->getLongLocaleCode( $language ); - $this->locale($longForm); + $this->locale( $longForm ); } } @@ -38,9 +38,9 @@ public function __construct($time = 'now', $timezone = 'Europe/London') * Return the long locale form * for a short version provided */ - public function getLongLocaleCode(string $locale): string + public function getLongLocaleCode( string $locale ): string { - return match ($locale) { + return match ( $locale ) { 'fr' => 'fr_FR', 'en' => 'en_US', 'es' => 'es_ES', @@ -53,22 +53,22 @@ public function getLongLocaleCode(string $locale): string }; } - public function define($time, $timezone = 'Europe/London') + public function define( $time, $timezone = 'Europe/London' ) { - $this->__construct($time, $timezone); + $this->__construct( $time, $timezone ); } /** * Get the defined date format. */ - public function getFormatted(string $date, string $mode = 'full'): string + public function getFormatted( string $date, string $mode = 'full' ): string { - switch ($mode) { + switch ( $mode ) { case 'short': - return $this->parse($date)->format($this->options->get('ns_date_format', 'Y-m-d')); + return $this->parse( $date )->format( $this->options->get( 'ns_date_format', 'Y-m-d' ) ); break; case 'full': - return $this->parse($date)->format($this->options->get('ns_datetime_format', 'Y-m-d H:i:s')); + return $this->parse( $date )->format( $this->options->get( 'ns_datetime_format', 'Y-m-d H:i:s' ) ); break; } } @@ -79,26 +79,26 @@ public function getFormatted(string $date, string $mode = 'full'): string */ public function getNow(): DateService { - return $this->now($this->timezone); + return $this->now( $this->timezone ); } /** * Return a formatted string the current date/time * usign a defined format (full or short) */ - public function getNowFormatted(string $mode = 'full'): string + public function getNowFormatted( string $mode = 'full' ): string { - switch ($mode) { + switch ( $mode ) { case 'short': - return $this->format($this->options->get('ns_date_format', 'Y-m-d')); + return $this->format( $this->options->get( 'ns_date_format', 'Y-m-d' ) ); break; case 'full': - return $this->format($this->options->get('ns_datetime_format', 'Y-m-d H:i:s')); + return $this->format( $this->options->get( 'ns_datetime_format', 'Y-m-d H:i:s' ) ); break; } } - public function convertFormatToMomment($format) + public function convertFormatToMomment( $format ) { $replacements = [ 'd' => 'DD', @@ -140,7 +140,7 @@ public function convertFormatToMomment($format) 'U' => 'X', ]; - $momentFormat = strtr($format, $replacements); + $momentFormat = strtr( $format, $replacements ); return $momentFormat; } @@ -148,15 +148,15 @@ public function convertFormatToMomment($format) /** * Get days as an array between two dates. */ - public function getDaysInBetween(Carbon $startRange, Carbon $endRange): array + public function getDaysInBetween( Carbon $startRange, Carbon $endRange ): array { - if ($startRange->lessThan($endRange) && $startRange->diffInDays($endRange) >= 1) { + if ( $startRange->lessThan( $endRange ) && $startRange->diffInDays( $endRange ) >= 1 ) { $days = []; do { $days[] = $startRange->copy(); $startRange->addDay(); - } while (! $startRange->isSameDay($endRange)); + } while ( ! $startRange->isSameDay( $endRange ) ); $days[] = $endRange->copy(); diff --git a/app/Services/DemoCoreService.php b/app/Services/DemoCoreService.php index 5a2515579..60a81fa80 100644 --- a/app/Services/DemoCoreService.php +++ b/app/Services/DemoCoreService.php @@ -59,34 +59,34 @@ class DemoCoreService */ public function prepareDefaultUnitSystem() { - $group = UnitGroup::where('name', __('Countable'))->first(); + $group = UnitGroup::where( 'name', __( 'Countable' ) )->first(); - if (! $group instanceof UnitGroup) { + if ( ! $group instanceof UnitGroup ) { $group = new UnitGroup; - $group->name = __('Countable'); - $group->author = Role::namespace('admin')->users()->first()->id; + $group->name = __( 'Countable' ); + $group->author = Role::namespace( 'admin' )->users()->first()->id; $group->save(); } - $unit = Unit::identifier('piece')->first(); + $unit = Unit::identifier( 'piece' )->first(); - if (! $unit instanceof Unit) { + if ( ! $unit instanceof Unit ) { $unit = new Unit; - $unit->name = __('Piece'); + $unit->name = __( 'Piece' ); $unit->identifier = 'piece'; $unit->description = ''; - $unit->author = Role::namespace('admin')->users()->first()->id; + $unit->author = Role::namespace( 'admin' )->users()->first()->id; $unit->group_id = $group->id; $unit->base_unit = true; $unit->value = 1; $unit->save(); } - $unit = Unit::identifier('small-box')->first(); + $unit = Unit::identifier( 'small-box' )->first(); - if (! $unit instanceof Unit) { + if ( ! $unit instanceof Unit ) { $unit = new Unit; - $unit->name = __('Small Box'); + $unit->name = __( 'Small Box' ); $unit->identifier = 'small-box'; $unit->description = ''; $unit->author = Auth::id(); @@ -96,11 +96,11 @@ public function prepareDefaultUnitSystem() $unit->save(); } - $unit = Unit::identifier('box')->first(); + $unit = Unit::identifier( 'box' )->first(); - if (! $unit instanceof Unit) { + if ( ! $unit instanceof Unit ) { $unit = new Unit; - $unit->name = __('Box'); + $unit->name = __( 'Box' ); $unit->identifier = 'box'; $unit->description = ''; $unit->author = Auth::id(); @@ -113,16 +113,16 @@ public function prepareDefaultUnitSystem() public function createBaseSettings() { - $orderTypes = app()->make(OrdersService::class)->getTypeLabels(); + $orderTypes = app()->make( OrdersService::class )->getTypeLabels(); /** * @var Options $optionService */ - $optionService = app()->make(Options::class); + $optionService = app()->make( Options::class ); $optionService->set( 'ns_pos_order_types', - array_keys($orderTypes) + array_keys( $orderTypes ) ); $optionService->set( @@ -139,13 +139,13 @@ public function createBaseSettings() public function createRegisters() { $register = new Register; - $register->name = __('Terminal A'); + $register->name = __( 'Terminal A' ); $register->status = Register::STATUS_CLOSED; $register->author = ns()->getValidAuthor(); $register->save(); $register = new Register; - $register->name = __('Terminal B'); + $register->name = __( 'Terminal B' ); $register->status = Register::STATUS_CLOSED; $register->author = ns()->getValidAuthor(); $register->save(); @@ -156,65 +156,65 @@ public function createAccountingAccounts() /** * @var TransactionService $transactionService */ - $transactionService = app()->make(TransactionService::class); + $transactionService = app()->make( TransactionService::class ); - $transactionService->createAccount([ - 'name' => __('Sales Account'), + $transactionService->createAccount( [ + 'name' => __( 'Sales Account' ), 'operation' => 'credit', 'account' => '001', - ]); + ] ); - ns()->option->set('ns_sales_cashflow_account', TransactionAccount::account('001')->first()->id); + ns()->option->set( 'ns_sales_cashflow_account', TransactionAccount::account( '001' )->first()->id ); - $transactionService->createAccount([ - 'name' => __('Procurements Account'), + $transactionService->createAccount( [ + 'name' => __( 'Procurements Account' ), 'operation' => 'debit', 'account' => '002', - ]); + ] ); - ns()->option->set('ns_procurement_cashflow_account', TransactionAccount::account('002')->first()->id); + ns()->option->set( 'ns_procurement_cashflow_account', TransactionAccount::account( '002' )->first()->id ); - $transactionService->createAccount([ - 'name' => __('Sale Refunds Account'), + $transactionService->createAccount( [ + 'name' => __( 'Sale Refunds Account' ), 'operation' => 'debit', 'account' => '003', - ]); + ] ); - ns()->option->set('ns_sales_refunds_account', TransactionAccount::account('003')->first()->id); + ns()->option->set( 'ns_sales_refunds_account', TransactionAccount::account( '003' )->first()->id ); - $transactionService->createAccount([ - 'name' => __('Spoiled Goods Account'), + $transactionService->createAccount( [ + 'name' => __( 'Spoiled Goods Account' ), 'operation' => 'debit', 'account' => '006', - ]); + ] ); - ns()->option->set('ns_stock_return_spoiled_account', TransactionAccount::account('006')->first()->id); + ns()->option->set( 'ns_stock_return_spoiled_account', TransactionAccount::account( '006' )->first()->id ); - $transactionService->createAccount([ - 'name' => __('Customer Crediting Account'), + $transactionService->createAccount( [ + 'name' => __( 'Customer Crediting Account' ), 'operation' => 'credit', 'account' => '007', - ]); + ] ); - ns()->option->set('ns_customer_crediting_cashflow_account', TransactionAccount::account('007')->first()->id); + ns()->option->set( 'ns_customer_crediting_cashflow_account', TransactionAccount::account( '007' )->first()->id ); - $transactionService->createAccount([ - 'name' => __('Customer Debiting Account'), + $transactionService->createAccount( [ + 'name' => __( 'Customer Debiting Account' ), 'operation' => 'credit', 'account' => '008', - ]); + ] ); - ns()->option->set('ns_customer_debitting_cashflow_account', TransactionAccount::account('008')->first()->id); + ns()->option->set( 'ns_customer_debitting_cashflow_account', TransactionAccount::account( '008' )->first()->id ); } public function createCustomers() { - (new CustomerGroupSeeder)->run(); + ( new CustomerGroupSeeder )->run(); } public function createProviders() { - (new DefaultProviderSeeder)->run(); + ( new DefaultProviderSeeder )->run(); } /** @@ -225,34 +225,34 @@ public function createProviders() */ public function createTaxes() { - $taxGroup = TaxGroup::where('name', __('GST'))->first(); + $taxGroup = TaxGroup::where( 'name', __( 'GST' ) )->first(); - if (! $taxGroup instanceof TaxGroup) { + if ( ! $taxGroup instanceof TaxGroup ) { $taxGroup = new TaxGroup; - $taxGroup->name = __('GST'); - $taxGroup->author = Role::namespace('admin')->users()->first()->id; + $taxGroup->name = __( 'GST' ); + $taxGroup->author = Role::namespace( 'admin' )->users()->first()->id; $taxGroup->save(); } - $tax = Tax::where('name', __('SGST'))->first(); + $tax = Tax::where( 'name', __( 'SGST' ) )->first(); - if (! $tax instanceof Tax) { + if ( ! $tax instanceof Tax ) { $tax = new Tax; - $tax->name = __('SGST'); + $tax->name = __( 'SGST' ); $tax->rate = 8; $tax->tax_group_id = $taxGroup->id; - $tax->author = Role::namespace('admin')->users()->first()->id; + $tax->author = Role::namespace( 'admin' )->users()->first()->id; $tax->save(); } - $tax = Tax::where('name', __('CGST'))->first(); + $tax = Tax::where( 'name', __( 'CGST' ) )->first(); - if (! $tax instanceof Tax) { + if ( ! $tax instanceof Tax ) { $tax = new Tax; - $tax->name = __('CGST'); + $tax->name = __( 'CGST' ); $tax->rate = 8; $tax->tax_group_id = $taxGroup->id; - $tax->author = Role::namespace('admin')->users()->first()->id; + $tax->author = Role::namespace( 'admin' )->users()->first()->id; $tax->save(); } } @@ -264,19 +264,19 @@ public function performProcurement() /** * @var TaxService */ - $taxService = app()->make(TaxService::class); + $taxService = app()->make( TaxService::class ); /** * @var CurrencyService */ - $currencyService = app()->make(CurrencyService::class); + $currencyService = app()->make( CurrencyService::class ); - $taxType = Arr::random([ 'inclusive', 'exclusive' ]); + $taxType = Arr::random( [ 'inclusive', 'exclusive' ] ); $taxGroup = TaxGroup::get()->random(); $margin = 25; - $this->procurementService->create([ - 'name' => sprintf(__('Sample Procurement %s'), Str::random(5)), + $this->procurementService->create( [ + 'name' => sprintf( __( 'Sample Procurement %s' ), Str::random( 5 ) ), 'general' => [ 'provider_id' => Provider::get()->random()->id, 'payment_status' => Procurement::PAYMENT_PAID, @@ -284,19 +284,19 @@ public function performProcurement() 'automatic_approval' => 1, ], 'products' => Product::withStockEnabled() - ->with('unitGroup') + ->with( 'unitGroup' ) ->get() - ->map(function ($product) { - return $product->unitGroup->units->map(function ($unit) use ($product) { - $unitQuantity = $product->unit_quantities->filter(fn($q) => (int) $q->unit_id === (int) $unit->id)->first(); + ->map( function ( $product ) { + return $product->unitGroup->units->map( function ( $unit ) use ( $product ) { + $unitQuantity = $product->unit_quantities->filter( fn( $q ) => (int) $q->unit_id === (int) $unit->id )->first(); return (object) [ 'unit' => $unit, 'unitQuantity' => $unitQuantity, 'product' => $product, ]; - }); - })->flatten()->map(function ($data) use ($taxService, $taxType, $taxGroup, $margin, $faker) { + } ); + } )->flatten()->map( function ( $data ) use ( $taxService, $taxType, $taxGroup, $margin, $faker ) { return [ 'product_id' => $data->product->id, 'gross_purchase_price' => 15, @@ -309,7 +309,7 @@ public function performProcurement() $margin ) ), - 'quantity' => $faker->numberBetween(500, 1000), + 'quantity' => $faker->numberBetween( 500, 1000 ), 'tax_group_id' => $taxGroup->id, 'tax_type' => $taxType, 'tax_value' => $taxService->getTaxGroupVatValue( @@ -330,8 +330,8 @@ public function performProcurement() ) * 250, 'unit_id' => $data->unit->id, ]; - }), - ]); + } ), + ] ); } public function createSales() @@ -339,42 +339,42 @@ public function createSales() /** * @var ReportService $reportService */ - $reportService = app()->make(ReportService::class); + $reportService = app()->make( ReportService::class ); $dates = []; - $startOfRange = ns()->date->clone()->subDays($this->daysRange); + $startOfRange = ns()->date->clone()->subDays( $this->daysRange ); - for ($i = 0; $i <= $this->daysRange; $i++) { + for ( $i = 0; $i <= $this->daysRange; $i++ ) { $dates[] = $startOfRange->clone(); $startOfRange->addDay(); } - $allProducts = Product::with('unit_quantities')->get(); + $allProducts = Product::with( 'unit_quantities' )->get(); $allCustomers = Customer::get(); - for ($i = 0; $i < $this->orderCount; $i++) { - $currentDate = Arr::random($dates); + for ( $i = 0; $i < $this->orderCount; $i++ ) { + $currentDate = Arr::random( $dates ); /** * @var CurrencyService */ - $currency = app()->make(CurrencyService::class); + $currency = app()->make( CurrencyService::class ); $faker = Factory::create(); - $shippingFees = $faker->randomElement([10, 15, 20, 25, 30, 35, 40]); - $discountRate = $faker->numberBetween(0, 5); + $shippingFees = $faker->randomElement( [10, 15, 20, 25, 30, 35, 40] ); + $discountRate = $faker->numberBetween( 0, 5 ); - $products = $allProducts->shuffle()->take(3); + $products = $allProducts->shuffle()->take( 3 ); - $products = $products->map(function ($product) use ($faker) { - $unitElement = $faker->randomElement($product->unit_quantities); + $products = $products->map( function ( $product ) use ( $faker ) { + $unitElement = $faker->randomElement( $product->unit_quantities ); - return array_merge([ + return array_merge( [ 'product_id' => $product->id, - 'quantity' => $faker->numberBetween(1, 10), + 'quantity' => $faker->numberBetween( 1, 10 ), 'unit_price' => $unitElement->sale_price, 'unit_quantity_id' => $unitElement->id, - ], $this->customProductParams); - }); + ], $this->customProductParams ); + } ); /** * testing customer balance @@ -383,16 +383,16 @@ public function createSales() $customerFirstPurchases = $customer->purchases_amount; $customerFirstOwed = $customer->owed_amount; - $subtotal = ns()->currency->getRaw($products->map(function ($product) use ($currency) { + $subtotal = ns()->currency->getRaw( $products->map( function ( $product ) use ( $currency ) { return $currency - ->define($product[ 'unit_price' ]) - ->multiplyBy($product[ 'quantity' ]) + ->define( $product[ 'unit_price' ] ) + ->multiplyBy( $product[ 'quantity' ] ) ->getRaw(); - })->sum()); + } )->sum() ); $customerCoupon = CustomerCoupon::get()->last(); - if ($customerCoupon instanceof CustomerCoupon) { + if ( $customerCoupon instanceof CustomerCoupon ) { $allCoupons = [ [ 'customer_coupon_id' => $customerCoupon->id, @@ -401,9 +401,9 @@ public function createSales() 'type' => 'percentage_discount', 'code' => $customerCoupon->code, 'limit_usage' => $customerCoupon->coupon->limit_usage, - 'value' => $currency->define($customerCoupon->coupon->discount_value) - ->multiplyBy($subtotal) - ->divideBy(100) + 'value' => $currency->define( $customerCoupon->coupon->discount_value ) + ->multiplyBy( $subtotal ) + ->divideBy( 100 ) ->getRaw(), 'discount_value' => $customerCoupon->coupon->discount_value, 'minimum_cart_value' => $customerCoupon->coupon->minimum_cart_value, @@ -411,26 +411,26 @@ public function createSales() ], ]; - $totalCoupons = collect($allCoupons)->map(fn($coupon) => $coupon[ 'value' ])->sum(); + $totalCoupons = collect( $allCoupons )->map( fn( $coupon ) => $coupon[ 'value' ] )->sum(); } else { $allCoupons = []; $totalCoupons = 0; } - $discountValue = $currency->define($discountRate) - ->multiplyBy($subtotal) - ->divideBy(100) + $discountValue = $currency->define( $discountRate ) + ->multiplyBy( $subtotal ) + ->divideBy( 100 ) ->getRaw(); - $discountCoupons = $currency->define($discountValue) - ->additionateBy($allCoupons[0][ 'value' ] ?? 0) + $discountCoupons = $currency->define( $discountValue ) + ->additionateBy( $allCoupons[0][ 'value' ] ?? 0 ) ->getRaw(); $dateString = $currentDate->startOfDay()->addHours( - $faker->numberBetween(0, 23) - )->format('Y-m-d H:m:s'); + $faker->numberBetween( 0, 23 ) + )->format( 'Y-m-d H:m:s' ); - $orderData = array_merge([ + $orderData = array_merge( [ 'customer_id' => $customer->id, 'type' => [ 'identifier' => 'takeaway' ], 'discount_type' => 'percentage', @@ -455,17 +455,17 @@ public function createSales() 'payments' => $this->shouldMakePayment ? [ [ 'identifier' => 'cash-payment', - 'value' => $currency->define($subtotal) - ->additionateBy($shippingFees) + 'value' => $currency->define( $subtotal ) + ->additionateBy( $shippingFees ) ->subtractBy( $discountCoupons ) ->getRaw(), ], ] : [], - ], $this->customOrderParams); + ], $this->customOrderParams ); - $result = $this->orderService->create($orderData); + $result = $this->orderService->create( $orderData ); } } } diff --git a/app/Services/DemoService.php b/app/Services/DemoService.php index e8b1f0ef3..4216179d8 100644 --- a/app/Services/DemoService.php +++ b/app/Services/DemoService.php @@ -34,13 +34,13 @@ public function __construct( $this->productService = $productService; $this->procurementService = $procurementService; $this->orderService = $ordersService; - $this->faker = (new Factory)->create(); + $this->faker = ( new Factory )->create(); } - public function extractProductFields($fields) + public function extractProductFields( $fields ) { - $primary = collect($fields[ 'variations' ]) - ->filter(fn($variation) => isset($variation[ '$primary' ])) + $primary = collect( $fields[ 'variations' ] ) + ->filter( fn( $variation ) => isset( $variation[ '$primary' ] ) ) ->first(); $source = $primary; @@ -50,11 +50,11 @@ public function extractProductFields($fields) * this is made to ensure the array * provided aren't flatten */ - unset($primary[ 'units' ]); - unset($primary[ 'images' ]); + unset( $primary[ 'units' ] ); + unset( $primary[ 'images' ] ); $primary[ 'identification' ][ 'name' ] = $fields[ 'name' ]; - $primary = Helper::flatArrayWithKeys($primary)->toArray(); + $primary = Helper::flatArrayWithKeys( $primary )->toArray(); $primary[ 'product_type' ] = 'product'; /** @@ -64,14 +64,14 @@ public function extractProductFields($fields) $primary[ 'images' ] = $source[ 'images' ]; $primary[ 'units' ] = $source[ 'units' ]; - unset($primary[ '$primary' ]); + unset( $primary[ '$primary' ] ); /** * As foreign fields aren't handled with * they are complex (array), this methods allow * external script to reinject those complex fields. */ - $primary = Hook::filter('ns-create-products-inputs', $primary, $source); + $primary = Hook::filter( 'ns-create-products-inputs', $primary, $source ); /** * the method "create" is capable of @@ -85,14 +85,14 @@ public function extractProductFields($fields) * * @return void */ - public function run($data) + public function run( $data ) { /** * @var string $mode - * @var bool $create_sales - * @var bool $create_procurements + * @var bool $create_sales + * @var bool $create_procurements */ - extract($data); + extract( $data ); $this->createBaseSettings(); $this->prepareDefaultUnitSystem(); @@ -103,11 +103,11 @@ public function run($data) $this->createTaxes(); $this->createProducts(); - if ($create_procurements) { + if ( $create_procurements ) { $this->performProcurement(); } - if ($create_sales && $create_procurements) { + if ( $create_sales && $create_procurements ) { $this->createSales(); } } @@ -115,23 +115,23 @@ public function run($data) public function createProducts() { $categories = [ - json_decode(file_get_contents(base_path('database' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'bedding-n-bath.json'))), - json_decode(file_get_contents(base_path('database' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'furniture.json'))), - json_decode(file_get_contents(base_path('database' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'kitchen-dinning.json'))), - json_decode(file_get_contents(base_path('database' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'decors.json'))), + json_decode( file_get_contents( base_path( 'database' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'bedding-n-bath.json' ) ) ), + json_decode( file_get_contents( base_path( 'database' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'furniture.json' ) ) ), + json_decode( file_get_contents( base_path( 'database' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'kitchen-dinning.json' ) ) ), + json_decode( file_get_contents( base_path( 'database' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'decors.json' ) ) ), ]; - foreach ($categories as $category) { - $result = $this->categoryService->create([ + foreach ( $categories as $category ) { + $result = $this->categoryService->create( [ 'name' => $category->name, 'preview_url' => $category->image, - ]); + ] ); $createdCategory = $result[ 'data' ][ 'category' ]; - foreach ($category->products as $product) { - $random = Str::random(8); - $unitGroup = UnitGroup::with('units')->where('name', __('Countable'))->first(); + foreach ( $category->products as $product ) { + $random = Str::random( 8 ); + $unitGroup = UnitGroup::with( 'units' )->where( 'name', __( 'Countable' ) )->first(); $newProduct = [ 'product_type' => 'product', 'name' => $product->name, @@ -139,7 +139,7 @@ public function createProducts() 'barcode' => $random, 'barcode_type' => 'code128', 'category_id' => $createdCategory[ 'id' ], - 'description' => __('generated'), + 'description' => __( 'generated' ), 'type' => 'dematerialized', 'status' => 'available', 'stock_management' => 'enabled', // Arr::random([ 'disabled', 'enabled' ]), @@ -148,19 +148,19 @@ public function createProducts() 'images' => [ [ 'featured' => true, - 'url' => asset($product->image), + 'url' => asset( $product->image ), ], ], 'units' => [ 'selling_group' => $unitGroup - ->units->map(function ($unit) use ($product) { + ->units->map( function ( $unit ) use ( $product ) { return [ 'sale_price_edit' => $product->price * $unit->value, - 'wholesale_price_edit' => ns()->currency->getPercentageValue($product->price, 10, 'substract') * $unit->value, + 'wholesale_price_edit' => ns()->currency->getPercentageValue( $product->price, 10, 'substract' ) * $unit->value, 'unit_id' => $unit->id, - 'preview_url' => asset($product->image), + 'preview_url' => asset( $product->image ), ]; - }), + } ), 'unit_group' => $unitGroup->id, ], ]; @@ -168,10 +168,10 @@ public function createProducts() /** * if groups is provided */ - if (isset($product->groups)) { - $subProducts = collect($product->groups)->map(function ($productName) { - $subProduct = Product::where('name', $productName) - ->with('unit_quantities') + if ( isset( $product->groups ) ) { + $subProducts = collect( $product->groups )->map( function ( $productName ) { + $subProduct = Product::where( 'name', $productName ) + ->with( 'unit_quantities' ) ->first(); /** @@ -183,10 +183,10 @@ public function createProducts() 'product_id' => $subProduct->id, 'unit_id' => $unitQuantity->unit_id, 'unit_quantity_id' => $unitQuantity->id, - 'quantity' => $this->faker->numberBetween(1, 5), + 'quantity' => $this->faker->numberBetween( 1, 5 ), 'sale_price' => $unitQuantity->sale_price, ]; - }); + } ); $newProduct[ 'type' ] = 'grouped'; $newProduct[ 'groups' ] = [ @@ -194,7 +194,7 @@ public function createProducts() ]; } - $result = $this->productService->create($newProduct); + $result = $this->productService->create( $newProduct ); } } } diff --git a/app/Services/DoctorService.php b/app/Services/DoctorService.php index f90dd8d62..64b7f77b0 100644 --- a/app/Services/DoctorService.php +++ b/app/Services/DoctorService.php @@ -20,30 +20,30 @@ class DoctorService { - public function __construct(protected Command $command) + public function __construct( protected Command $command ) { // ... } public function createUserAttribute(): array { - User::get()->each(function (User $user) { - $this->createAttributeForUser($user); - }); + User::get()->each( function ( User $user ) { + $this->createAttributeForUser( $user ); + } ); return [ 'status' => 'success', - 'message' => __('The user attributes has been updated.'), + 'message' => __( 'The user attributes has been updated.' ), ]; } - public function createAttributeForUser(User $user) + public function createAttributeForUser( User $user ) { - if (! $user->attribute instanceof UserAttribute) { + if ( ! $user->attribute instanceof UserAttribute ) { $attribute = new UserAttribute; $attribute->user_id = $user->id; - $attribute->language = ns()->option->get('ns_store_language', 'en'); - $attribute->theme = ns()->option->get('ns_default_theme', 'dark'); + $attribute->language = ns()->option->get( 'ns_store_language', 'en' ); + $attribute->theme = ns()->option->get( 'ns_default_theme', 'dark' ); $attribute->save(); } } @@ -55,25 +55,25 @@ public function restoreRoles() { $rolesLabels = [ Role::ADMIN => [ - 'name' => __('Administrator'), + 'name' => __( 'Administrator' ), ], Role::STOREADMIN => [ - 'name' => __('Store Administrator'), + 'name' => __( 'Store Administrator' ), ], Role::STORECASHIER => [ - 'name' => __('Store Cashier'), + 'name' => __( 'Store Cashier' ), ], Role::USER => [ - 'name' => __('User'), + 'name' => __( 'User' ), ], ]; - foreach (array_keys($rolesLabels) as $roleNamespace) { - $role = Role::where('namespace', $roleNamespace) + foreach ( array_keys( $rolesLabels ) as $roleNamespace ) { + $role = Role::where( 'namespace', $roleNamespace ) ->first(); - if (! $role instanceof Role) { - Role::where('name', $rolesLabels[ $roleNamespace ][ 'name' ])->delete(); + if ( ! $role instanceof Role ) { + Role::where( 'name', $rolesLabels[ $roleNamespace ][ 'name' ] )->delete(); $role = new Role; $role->namespace = $roleNamespace; @@ -87,29 +87,29 @@ public function restoreRoles() public function fixDuplicateOptions() { $options = Option::get(); - $options->each(function ($option) { + $options->each( function ( $option ) { try { $option->refresh(); - if ($option instanceof Option) { - Option::where('key', $option->key) - ->where('id', '<>', $option->id) + if ( $option instanceof Option ) { + Option::where( 'key', $option->key ) + ->where( 'id', '<>', $option->id ) ->delete(); } - } catch (Exception $exception) { + } catch ( Exception $exception ) { // the option might be deleted, let's skip that. } - }); + } ); } public function fixOrphanOrderProducts() { - $orderIds = Order::get('id'); + $orderIds = Order::get( 'id' ); - $query = OrderProduct::whereNotIn('order_id', $orderIds); + $query = OrderProduct::whereNotIn( 'order_id', $orderIds ); $total = $query->count(); $query->delete(); - return sprintf(__('%s products were freed'), $total); + return sprintf( __( '%s products were freed' ), $total ); } /** @@ -123,16 +123,16 @@ public function fixDomains() /** * Set version to close setup */ - $domain = Str::replaceFirst('http://', '', url('/')); - $domain = Str::replaceFirst('https://', '', $domain); - $withoutPort = explode(':', $domain)[0]; + $domain = Str::replaceFirst( 'http://', '', url( '/' ) ); + $domain = Str::replaceFirst( 'https://', '', $domain ); + $withoutPort = explode( ':', $domain )[0]; - if (! env('SESSION_DOMAIN', false)) { - ns()->envEditor->set('SESSION_DOMAIN', Str::replaceFirst('http://', '', $withoutPort)); + if ( ! env( 'SESSION_DOMAIN', false ) ) { + ns()->envEditor->set( 'SESSION_DOMAIN', Str::replaceFirst( 'http://', '', $withoutPort ) ); } - if (! env('SANCTUM_STATEFUL_DOMAINS', false)) { - ns()->envEditor->set('SANCTUM_STATEFUL_DOMAINS', collect([ $domain, 'localhost', '127.0.0.1' ])->unique()->join(',')); + if ( ! env( 'SANCTUM_STATEFUL_DOMAINS', false ) ) { + ns()->envEditor->set( 'SANCTUM_STATEFUL_DOMAINS', collect( [ $domain, 'localhost', '127.0.0.1' ] )->unique()->join( ',' ) ); } } @@ -145,73 +145,73 @@ public function fixTransactionsOrders() /** * @var TransactionService $transactionService */ - $transactionService = app()->make(TransactionService::class); + $transactionService = app()->make( TransactionService::class ); - TransactionHistory::where('order_id', '>', 0)->delete(); - TransactionHistory::where('order_refund_id', '>', 0)->delete(); + TransactionHistory::where( 'order_id', '>', 0 )->delete(); + TransactionHistory::where( 'order_refund_id', '>', 0 )->delete(); /** * Step 1: Recompute from order sales */ - $orders = Order::paymentStatus(Order::PAYMENT_PAID)->get(); + $orders = Order::paymentStatus( Order::PAYMENT_PAID )->get(); - $this->command->info(__('Restoring cash flow from paid orders...')); + $this->command->info( __( 'Restoring cash flow from paid orders...' ) ); - $this->command->withProgressBar($orders, function ($order) use ($transactionService) { - $transactionService->handleCreatedOrder($order); - }); + $this->command->withProgressBar( $orders, function ( $order ) use ( $transactionService ) { + $transactionService->handleCreatedOrder( $order ); + } ); $this->command->newLine(); /** * Step 2: Recompute from refund */ - $this->command->info(__('Restoring cash flow from refunded orders...')); + $this->command->info( __( 'Restoring cash flow from refunded orders...' ) ); - $orders = Order::paymentStatusIn([ + $orders = Order::paymentStatusIn( [ Order::PAYMENT_REFUNDED, Order::PAYMENT_PARTIALLY_REFUNDED, - ])->get(); + ] )->get(); - $this->command->withProgressBar($orders, function ($order) use ($transactionService) { - $order->refundedProducts()->with('orderProduct')->get()->each(function ($orderRefundedProduct) use ($order, $transactionService) { + $this->command->withProgressBar( $orders, function ( $order ) use ( $transactionService ) { + $order->refundedProducts()->with( 'orderProduct' )->get()->each( function ( $orderRefundedProduct ) use ( $order, $transactionService ) { $transactionService->createTransactionFromRefund( order: $order, orderProductRefund: $orderRefundedProduct, orderProduct: $orderRefundedProduct->orderProduct ); - }); - }); + } ); + } ); $this->command->newLine(); } public function clearTemporaryFiles() { - $directories = Storage::disk('ns-modules-temp')->directories(); - $deleted = collect($directories)->filter(fn($directory) => Storage::disk('ns-modules-temp')->deleteDirectory($directory)); + $directories = Storage::disk( 'ns-modules-temp' )->directories(); + $deleted = collect( $directories )->filter( fn( $directory ) => Storage::disk( 'ns-modules-temp' )->deleteDirectory( $directory ) ); - $this->command->info(sprintf( - __('%s on %s directories were deleted.'), - count($directories), + $this->command->info( sprintf( + __( '%s on %s directories were deleted.' ), + count( $directories ), $deleted->count() - )); + ) ); - $files = Storage::disk('ns-modules-temp')->files(); - $deleted = collect($files)->filter(fn($file) => Storage::disk('ns-modules-temp')->delete($file)); + $files = Storage::disk( 'ns-modules-temp' )->files(); + $deleted = collect( $files )->filter( fn( $file ) => Storage::disk( 'ns-modules-temp' )->delete( $file ) ); - $this->command->info(sprintf( - __('%s on %s files were deleted.'), - count($files), + $this->command->info( sprintf( + __( '%s on %s files were deleted.' ), + count( $files ), $deleted->count() - )); + ) ); } public function fixCustomers() { $this->command - ->withProgressBar(Customer::with([ 'billing', 'shipping' ])->get(), function ($customer) { - if (! $customer->billing instanceof CustomerBillingAddress) { + ->withProgressBar( Customer::with( [ 'billing', 'shipping' ] )->get(), function ( $customer ) { + if ( ! $customer->billing instanceof CustomerBillingAddress ) { $billing = new CustomerBillingAddress; $billing->customer_id = $customer->id; $billing->first_name = $customer->first_name; @@ -222,7 +222,7 @@ public function fixCustomers() $billing->save(); } - if (! $customer->shipping instanceof CustomerShippingAddress) { + if ( ! $customer->shipping instanceof CustomerShippingAddress ) { $shipping = new CustomerShippingAddress; $shipping->customer_id = $customer->id; $shipping->first_name = $customer->first_name; @@ -232,7 +232,7 @@ public function fixCustomers() $shipping->author = $customer->author; $shipping->save(); } - }); + } ); } /** @@ -241,19 +241,19 @@ public function fixCustomers() */ public function clearBrokenModuleLinks(): array { - $dir = base_path('public/modules'); - $files = scandir($dir); + $dir = base_path( 'public/modules' ); + $files = scandir( $dir ); $deleted = []; - foreach ($files as $file) { - if ($file === '.' || $file === '..') { + foreach ( $files as $file ) { + if ( $file === '.' || $file === '..' ) { continue; } - if (is_link($dir . '/' . $file)) { - if (! file_exists(readlink($dir . '/' . $file))) { + if ( is_link( $dir . '/' . $file ) ) { + if ( ! file_exists( readlink( $dir . '/' . $file ) ) ) { $deleted[] = $dir . '/' . $file; - unlink($dir . '/' . $file); + unlink( $dir . '/' . $file ); } } } @@ -261,32 +261,32 @@ public function clearBrokenModuleLinks(): array return [ 'status' => 'sucess', 'message' => sprintf( - __('%s link were deleted'), - count($deleted) + __( '%s link were deleted' ), + count( $deleted ) ), ]; } - public function setUnitVisibility( string $products, bool $visibility) + public function setUnitVisibility( string $products, bool $visibility ) { - $products = explode(',', $products); + $products = explode( ',', $products ); if ( $products[ 0 ] === 'all' ) { - $products = ProductUnitQuantity::get()->pluck('product_id'); + $products = ProductUnitQuantity::get()->pluck( 'product_id' ); } - $this->command->info(sprintf( - __('%s products will be updated'), - count($products) - )); + $this->command->info( sprintf( + __( '%s products will be updated' ), + count( $products ) + ) ); - $this->command->withProgressBar($products, function ($product) use ( $visibility ) { - $product = ProductUnitQuantity::where('product_id', $product)->first(); + $this->command->withProgressBar( $products, function ( $product ) use ( $visibility ) { + $product = ProductUnitQuantity::where( 'product_id', $product )->first(); if ( $product instanceof ProductUnitQuantity ) { $product->visible = $visibility; $product->save(); } - }); + } ); } } diff --git a/app/Services/EloquenizeArrayService.php b/app/Services/EloquenizeArrayService.php index bcbaf8909..442818df6 100644 --- a/app/Services/EloquenizeArrayService.php +++ b/app/Services/EloquenizeArrayService.php @@ -6,22 +6,22 @@ class EloquenizeArrayService { - public function parse(Builder $query, $data) + public function parse( Builder $query, $data ) { - $query->where(function ($query) use ($data) { - foreach ($data as $fieldName => $arguments) { - match ($arguments[ 'comparison' ]) { - '<>' => $query->where($fieldName, '<>', $arguments[ 'value' ]), - '>' => $query->where($fieldName, '>', $arguments[ 'value' ]), - '<' => $query->where($fieldName, '<', $arguments[ 'value' ]), - '>=' => $query->where($fieldName, '>=', $arguments[ 'value' ]), - '<=' => $query->where($fieldName, '<=', $arguments[ 'value' ]), - 'like' => $query->where($fieldName, 'like', $arguments[ 'value' ]), - 'in' => $query->whereIn($fieldName, (array) $arguments[ 'value' ]), - 'notIn' => $query->whereNotIn($fieldName, (array) $arguments[ 'value' ]), - default => $query->where($fieldName, $arguments[ 'value' ]) + $query->where( function ( $query ) use ( $data ) { + foreach ( $data as $fieldName => $arguments ) { + match ( $arguments[ 'comparison' ] ) { + '<>' => $query->where( $fieldName, '<>', $arguments[ 'value' ] ), + '>' => $query->where( $fieldName, '>', $arguments[ 'value' ] ), + '<' => $query->where( $fieldName, '<', $arguments[ 'value' ] ), + '>=' => $query->where( $fieldName, '>=', $arguments[ 'value' ] ), + '<=' => $query->where( $fieldName, '<=', $arguments[ 'value' ] ), + 'like' => $query->where( $fieldName, 'like', $arguments[ 'value' ] ), + 'in' => $query->whereIn( $fieldName, (array) $arguments[ 'value' ] ), + 'notIn' => $query->whereNotIn( $fieldName, (array) $arguments[ 'value' ] ), + default => $query->where( $fieldName, $arguments[ 'value' ] ) }; } - }); + } ); } } diff --git a/app/Services/EnvEditor.php b/app/Services/EnvEditor.php index e54b578b9..7f254318a 100644 --- a/app/Services/EnvEditor.php +++ b/app/Services/EnvEditor.php @@ -10,82 +10,82 @@ class EnvEditor private $env_file_data; - public function __construct($env_file_path) + public function __construct( $env_file_path ) { $this->env_file_path = $env_file_path; - $this->env_file_data = $this->read($this->env_file_path); + $this->env_file_data = $this->read( $this->env_file_path ); } - public function read($filePath) + public function read( $filePath ) { $result = []; - if (is_file($filePath) === false) { + if ( is_file( $filePath ) === false ) { return $result; } - $file = fopen($filePath, 'r'); - if ($file) { - while (($line = fgets($file)) !== false) { - if (substr($line, 0, 1) === '#' || trim($line) === '') { + $file = fopen( $filePath, 'r' ); + if ( $file ) { + while ( ( $line = fgets( $file ) ) !== false ) { + if ( substr( $line, 0, 1 ) === '#' || trim( $line ) === '' ) { continue; } - $parts = explode('=', $line); - $key = trim($parts[0]); - $value = isset($parts[1]) ? trim($parts[1]) : null; + $parts = explode( '=', $line ); + $key = trim( $parts[0] ); + $value = isset( $parts[1] ) ? trim( $parts[1] ) : null; $result[$key] = $value; } - fclose($file); + fclose( $file ); } return $result; } - public function get($key, $default = null) + public function get( $key, $default = null ) { - return array_key_exists($key, $this->env_file_data) ? $this->env_file_data[$key] : $default; + return array_key_exists( $key, $this->env_file_data ) ? $this->env_file_data[$key] : $default; } - public function delete($key) + public function delete( $key ) { - unset($this->env_file_data[$key]); + unset( $this->env_file_data[$key] ); $this->write(); } - public function set($key, $value) + public function set( $key, $value ) { - if (preg_match('/^[a-zA-Z][a-zA-Z0-9_]*$/', $key)) { - if (is_numeric($value) || is_string($value)) { - if (strpos($value, ' ') !== false) { + if ( preg_match( '/^[a-zA-Z][a-zA-Z0-9_]*$/', $key ) ) { + if ( is_numeric( $value ) || is_string( $value ) ) { + if ( strpos( $value, ' ' ) !== false ) { $value = '"' . $value . '"'; } } else { $value = ''; } - $this->env_file_data[$key] = htmlspecialchars($value); + $this->env_file_data[$key] = htmlspecialchars( $value ); } else { - throw new Exception('Invalid key format'); + throw new Exception( 'Invalid key format' ); } $this->write(); } - public function has($key) + public function has( $key ) { - return array_key_exists($key, $this->env_file_data); + return array_key_exists( $key, $this->env_file_data ); } private function write() { file_put_contents( $this->env_file_path, - implode("\n", array_map( - function ($v, $k) { + implode( "\n", array_map( + function ( $v, $k ) { return "$k=$v"; }, $this->env_file_data, - array_keys($this->env_file_data) - )) + array_keys( $this->env_file_data ) + ) ) ); } } diff --git a/app/Services/FieldsService.php b/app/Services/FieldsService.php index 7070dd9a3..011ee9020 100644 --- a/app/Services/FieldsService.php +++ b/app/Services/FieldsService.php @@ -13,7 +13,7 @@ public function get() public static function getIdentifier(): string { - if (isset(get_called_class()::$identifier)) { + if ( isset( get_called_class()::$identifier ) ) { return get_called_class()::$identifier; } @@ -22,7 +22,7 @@ public static function getIdentifier(): string * identifier must be set statically to avoid any * field build while just retreiving the identifier. */ - if (isset(( new self )->identifier)) { + if ( isset( ( new self )->identifier ) ) { return get_called_class()::$identifier; } } diff --git a/app/Services/HelperFunctions.php b/app/Services/HelperFunctions.php index 9e634f25d..ebd49b3fc 100644 --- a/app/Services/HelperFunctions.php +++ b/app/Services/HelperFunctions.php @@ -3,37 +3,37 @@ use App\Services\CoreService; use illuminate\Support\Facades\Route; -if (! function_exists('array_insert')) { +if ( ! function_exists( 'array_insert' ) ) { /** * Insert an array into another array before/after a certain key * * Merge the elements of the $array array after, or before, the designated $key from the $input array. * It returns the resulting array. * - * @param array $input The input array. - * @param mixed $insert The value to merge. - * @param mixed $key The key from the $input to merge $insert next to. - * @param string $pos Wether to splice $insert before or after the $key. - * @return array Returns the resulting array. + * @param array $input The input array. + * @param mixed $insert The value to merge. + * @param mixed $key The key from the $input to merge $insert next to. + * @param string $pos Wether to splice $insert before or after the $key. + * @return array Returns the resulting array. */ - function array_insert(array $input, $insert, $key, $pos = 'after') + function array_insert( array $input, $insert, $key, $pos = 'after' ) { - if (! is_string($key) && ! is_int($key)) { - trigger_error('array_insert(): The key should be a string or an integer', E_USER_ERROR); + if ( ! is_string( $key ) && ! is_int( $key ) ) { + trigger_error( 'array_insert(): The key should be a string or an integer', E_USER_ERROR ); } - $offset = array_search($key, array_keys($input)); + $offset = array_search( $key, array_keys( $input ) ); - if ($pos === 'after') { + if ( $pos === 'after' ) { $offset++; } else { $offset--; } - if ($offset !== false) { - $result = array_slice($input, 0, $offset); - $result = array_merge($result, (array) $insert, array_slice($input, $offset)); + if ( $offset !== false ) { + $result = array_slice( $input, 0, $offset ); + $result = array_merge( $result, (array) $insert, array_slice( $input, $offset ) ); } else { - $result = array_merge($input, (array) $insert); + $result = array_merge( $input, (array) $insert ); } return $result; @@ -44,16 +44,16 @@ function array_insert(array $input, $insert, $key, $pos = 'after') * Insert a value or key/value pair after a specific key in an array. If key doesn't exist, value is appended * to the end of the array. * - * @param string $key + * @param string $key * @return array */ -function array_insert_after(array $array, $key, array $new) +function array_insert_after( array $array, $key, array $new ) { - $keys = array_keys($array); - $index = array_search($key, $keys); - $pos = $index === false ? count($array) : $index + 1; + $keys = array_keys( $array ); + $index = array_search( $key, $keys ); + $pos = $index === false ? count( $array ) : $index + 1; - return array_merge(array_slice($array, 0, $pos), $new, array_slice($array, $pos)); + return array_merge( array_slice( $array, 0, $pos ), $new, array_slice( $array, $pos ) ); } /** @@ -64,9 +64,9 @@ function array_insert_after(array $array, $key, array $new) * @param array new array * @return array **/ -function array_insert_before($array, $key, $new) +function array_insert_before( $array, $key, $new ) { - return array_insert($array, $new, $key, $pos = 'before'); + return array_insert( $array, $new, $key, $pos = 'before' ); } /** @@ -91,23 +91,23 @@ function generate_timezone_list() ]; $timezones = []; - foreach ($regions as $region) { - $timezones = array_merge($timezones, DateTimeZone::listIdentifiers($region)); + foreach ( $regions as $region ) { + $timezones = array_merge( $timezones, DateTimeZone::listIdentifiers( $region ) ); } $timezone_offsets = []; - foreach ($timezones as $timezone) { - $tz = new DateTimeZone($timezone); - $timezone_offsets[$timezone] = $tz->getOffset(new DateTime); + foreach ( $timezones as $timezone ) { + $tz = new DateTimeZone( $timezone ); + $timezone_offsets[$timezone] = $tz->getOffset( new DateTime ); } // sort timezone by offset - asort($timezone_offsets); + asort( $timezone_offsets ); $timezone_list = []; - foreach ($timezone_offsets as $timezone => $offset) { + foreach ( $timezone_offsets as $timezone => $offset ) { $offset_prefix = $offset < 0 ? '-' : '+'; - $offset_formatted = gmdate('H:i', abs($offset)); + $offset_formatted = gmdate( 'H:i', abs( $offset ) ); $pretty_offset = "UTC{$offset_prefix}{$offset_formatted}"; @@ -135,14 +135,14 @@ function route_field() * @param string * @return bool */ -function isUrl($text) +function isUrl( $text ) { - return filter_var($text, FILTER_VALIDATE_URL) !== false; + return filter_var( $text, FILTER_VALIDATE_URL ) !== false; } class UseThisChain { - public function __construct($class) + public function __construct( $class ) { $this->class = $class; } @@ -151,7 +151,7 @@ public function __construct($class) * @param string method name * @return string result */ - public function method($name) + public function method( $name ) { return $this->class . '@' . $name; } @@ -165,9 +165,9 @@ public function method($name) * @param string * @return stdClass class */ -function useThis(string $class): UseThisChain +function useThis( string $class ): UseThisChain { - return new UseThisChain($class); + return new UseThisChain( $class ); } /** @@ -176,16 +176,16 @@ function useThis(string $class): UseThisChain * @param string class name with method * @return void */ -function execThis($className) +function execThis( $className ) { - $vars = explode($className, '@'); - if (count($vars) === 2) { + $vars = explode( $className, '@' ); + if ( count( $vars ) === 2 ) { $class = $vars[0]; $method = $vars[1]; - return (new $class)->$method(); + return ( new $class )->$method(); } - throw new Exception(sprintf(__('Unable to execute the following class callback string : %s'), $className)); + throw new Exception( sprintf( __( 'Unable to execute the following class callback string : %s' ), $className ) ); } /** @@ -193,21 +193,21 @@ function execThis($className) */ function ns(): CoreService { - return app()->make(CoreService::class); + return app()->make( CoreService::class ); } /** * Returns a translated version for a string defined * under a module namespace. * - * @param string $key - * @param string $namespace + * @param string $key + * @param string $namespace * @return string $result */ -function __m($key, $namespace = 'default') +function __m( $key, $namespace = 'default' ) { - if (app('translator')->has($namespace . '.' . $key)) { - return app('translator')->get($namespace . '.' . $key); + if ( app( 'translator' )->has( $namespace . '.' . $key ) ) { + return app( 'translator' )->get( $namespace . '.' . $key ); } return $key; diff --git a/app/Services/Helpers/App.php b/app/Services/Helpers/App.php index f763fe1e3..7f5e90273 100644 --- a/app/Services/Helpers/App.php +++ b/app/Services/Helpers/App.php @@ -15,11 +15,11 @@ trait App * * @return bool */ - public static function installed($forceCheck = false) + public static function installed( $forceCheck = false ) { - if ($forceCheck) { + if ( $forceCheck ) { $state = self::checkDatabaseExistence(); - Cache::set('ns-core-installed', $state); + Cache::set( 'ns-core-installed', $state ); return $state; } @@ -30,28 +30,28 @@ public static function installed($forceCheck = false) * * @see App\Http\Middleware\ClearRequestCacheMiddleware */ - return Cache::remember('ns-core-installed', 3600, function () { + return Cache::remember( 'ns-core-installed', 3600, function () { return self::checkDatabaseExistence(); - }); + } ); } private static function checkDatabaseExistence() { try { - if (DB::connection()->getPdo()) { - return Schema::hasTable('nexopos_options'); + if ( DB::connection()->getPdo() ) { + return Schema::hasTable( 'nexopos_options' ); } - } catch (\Exception $e) { + } catch ( \Exception $e ) { return false; } } - public static function pageTitle($string) + public static function pageTitle( $string ) { - $storeName = ns()->option->get('ns_store_name') ?: 'NexoPOS'; + $storeName = ns()->option->get( 'ns_store_name' ) ?: 'NexoPOS'; return sprintf( - Hook::filter('ns-page-title', __('%s — %s')), + Hook::filter( 'ns-page-title', __( '%s — %s' ) ), $string, $storeName ); @@ -62,15 +62,15 @@ public static function pageTitle($string) * has a valid URL otherwise uses the * previous URL stored on the session. */ - public static function getValidPreviousUrl(Request $request): string + public static function getValidPreviousUrl( Request $request ): string { - if ($request->has('back')) { - $backUrl = $request->query('back'); - $parsedUrl = parse_url($backUrl); + if ( $request->has( 'back' ) ) { + $backUrl = $request->query( 'back' ); + $parsedUrl = parse_url( $backUrl ); $host = $parsedUrl['host']; - if (filter_var($backUrl, FILTER_VALIDATE_URL) && $host === parse_url(env('APP_URL'), PHP_URL_HOST)) { - return urldecode($backUrl); + if ( filter_var( $backUrl, FILTER_VALIDATE_URL ) && $host === parse_url( env( 'APP_URL' ), PHP_URL_HOST ) ) { + return urldecode( $backUrl ); } } diff --git a/app/Services/Helpers/ArrayHelper.php b/app/Services/Helpers/ArrayHelper.php index e0a6b0092..687acf14c 100644 --- a/app/Services/Helpers/ArrayHelper.php +++ b/app/Services/Helpers/ArrayHelper.php @@ -14,23 +14,23 @@ trait ArrayHelper * @param string type * @return array */ - public static function arrayDivide(array $array, string $type = '') + public static function arrayDivide( array $array, string $type = '' ) { - if ($array) { + if ( $array ) { $result = [ 'odd' => [], 'even' => [], ]; - foreach ($array as $k => $v) { - if ($k % 2 == 0) { + foreach ( $array as $k => $v ) { + if ( $k % 2 == 0 ) { $result[ 'even' ][] = $v; } else { $result[ 'odd' ][] = $v; } } - if (! empty($type)) { + if ( ! empty( $type ) ) { return $result[ $type ]; } @@ -46,11 +46,11 @@ public static function arrayDivide(array $array, string $type = '') * @param array collection of Eloquent results * @return array of options */ - public static function toOptions($collections, $config) + public static function toOptions( $collections, $config ) { $result = []; - if ($collections) { - foreach ($collections as $collection) { + if ( $collections ) { + foreach ( $collections as $collection ) { $id = $config[0]; $name = $config[1]; $result[ $collection->$id ] = $collection->$name; @@ -69,7 +69,7 @@ public static function toOptions($collections, $config) * @param array [ value, label ] * @return array of options */ - public static function toJsOptions(Collection|EloquentCollection $collections, $config, $defaults = []): array + public static function toJsOptions( Collection|EloquentCollection $collections, $config, $defaults = [] ): array { $result = []; @@ -77,18 +77,20 @@ public static function toJsOptions(Collection|EloquentCollection $collections, $ * This will populate defaults * value for the options */ - if (! empty($defaults)) { - foreach ($defaults as $value => $label) { - $result[] = compact('label', 'value'); + if ( ! empty( $defaults ) ) { + foreach ( $defaults as $value => $label ) { + $result[] = compact( 'label', 'value' ); } } - if ($collections) { - foreach ($collections as $collection) { - if (is_callable($config)) { - $result[] = $config($collection); - } elseif (! is_array($config[1])) { - $id = $config[0]; + if ( $collections ) { + foreach ( $collections as $collection ) { + + $id = $config[0]; + + if ( is_callable( $config ) ) { + $result[] = $config( $collection ); + } elseif ( ! is_array( $config[1] ) ) { $name = $config[1]; $result[] = [ @@ -98,9 +100,9 @@ public static function toJsOptions(Collection|EloquentCollection $collections, $ } else { $name = ''; - foreach ($config[1] as $index => $_name) { - if ($index + 1 < count($config[1])) { - $name .= $collection->$_name . ($config[2] ?? ' '); // if separator is not provided + foreach ( $config[1] as $index => $_name ) { + if ( $index + 1 < count( $config[1] ) ) { + $name .= $collection->$_name . ( $config[2] ?? ' ' ); // if separator is not provided } else { $name .= $collection->$_name; } @@ -125,11 +127,11 @@ public static function toJsOptions(Collection|EloquentCollection $collections, $ * @param array * @return array of options */ - public static function kvToJsOptions($array) + public static function kvToJsOptions( $array ) { $final = []; - foreach ($array as $value => $label) { - $final[] = compact('label', 'value'); + foreach ( $array as $value => $label ) { + $final[] = compact( 'label', 'value' ); } return $final; @@ -141,7 +143,7 @@ public static function kvToJsOptions($array) * @param array * @return array of options */ - public static function boolToOptions($true, $false) + public static function boolToOptions( $true, $false ) { return [ [ @@ -159,25 +161,25 @@ public static function boolToOptions($true, $false) * flat multidimensional array using * keys * - * @param array $data + * @param array $data * @return Collection */ - public static function flatArrayWithKeys($data) + public static function flatArrayWithKeys( $data ) { - return collect($data)->mapWithKeys(function ($data, $index) { - if (! is_array($data) || is_numeric($index)) { + return collect( $data )->mapWithKeys( function ( $data, $index ) { + if ( ! is_array( $data ) || is_numeric( $index ) ) { return [ $index => $data ]; - } elseif (is_array($data)) { - if (array_keys($data) !== range(0, count($data) - 1)) { - return self::flatArrayWithKeys($data); + } elseif ( is_array( $data ) ) { + if ( array_keys( $data ) !== range( 0, count( $data ) - 1 ) ) { + return self::flatArrayWithKeys( $data ); } else { - return [ $index => json_encode($data) ]; + return [ $index => json_encode( $data ) ]; } } return []; - })->filter(function ($field) { + } )->filter( function ( $field ) { return $field !== false; - }); + } ); } } diff --git a/app/Services/MathService.php b/app/Services/MathService.php index 7c96d7e14..d538b2a0c 100644 --- a/app/Services/MathService.php +++ b/app/Services/MathService.php @@ -6,8 +6,8 @@ class MathService { - public function set($value) + public function set( $value ) { - return BigNumber::of($value); + return BigNumber::of( $value ); } } diff --git a/app/Services/MediaService.php b/app/Services/MediaService.php index 43c6ef309..179566909 100644 --- a/app/Services/MediaService.php +++ b/app/Services/MediaService.php @@ -31,19 +31,19 @@ class MediaService */ private $imageExtensions = [ 'png', 'jpg', 'jpeg', 'gif' ]; - public function __construct(private DateService $dateService) + public function __construct( private DateService $dateService ) { - $this->mimeExtensions = config('medias.mimes'); + $this->mimeExtensions = config( 'medias.mimes' ); } public function getMimes() { - return Hook::filter('ns-media-mimes', $this->mimeExtensions); + return Hook::filter( 'ns-media-mimes', $this->mimeExtensions ); } public function getMimeExtensions() { - return array_keys($this->getMimes()); + return array_keys( $this->getMimes() ); } /** @@ -52,8 +52,8 @@ public function getMimeExtensions() */ public function getImageMimes(): Collection { - return Hook::filter('ns-media-image-ext', collect($this->mimeExtensions) - ->filter(fn($value, $key) => in_array($key, $this->imageExtensions))); + return Hook::filter( 'ns-media-image-ext', collect( $this->mimeExtensions ) + ->filter( fn( $value, $key ) => in_array( $key, $this->imageExtensions ) ) ); } /** @@ -62,73 +62,73 @@ public function getImageMimes(): Collection * @param object File * @return bool / media */ - public function upload($file, $customName = null) + public function upload( $file, $customName = null ) { /** * getting file extension */ - $extension = strtolower($file->getClientOriginalExtension()); + $extension = strtolower( $file->getClientOriginalExtension() ); - if (in_array($extension, $this->getMimeExtensions())) { - $uploadedInfo = pathinfo($file->getClientOriginalName()); - $fileName = Str::slug($uploadedInfo[ 'filename' ], '-'); - $fileName = ($customName == null ? $fileName : $customName); - $fileName = $this->__preventDuplicate($fileName); - $fullFileName = $fileName . '.' . strtolower($file->getClientOriginalExtension()); + if ( in_array( $extension, $this->getMimeExtensions() ) ) { + $uploadedInfo = pathinfo( $file->getClientOriginalName() ); + $fileName = Str::slug( $uploadedInfo[ 'filename' ], '-' ); + $fileName = ( $customName == null ? $fileName : $customName ); + $fileName = $this->__preventDuplicate( $fileName ); + $fullFileName = $fileName . '.' . strtolower( $file->getClientOriginalExtension() ); /** * let's get if an existing file * already exists. If that exists, let's adjust the file * fullname */ - $media = Media::where('name', $fullFileName)->first(); + $media = Media::where( 'name', $fullFileName )->first(); - if ($media instanceof Media) { - $fileName = $fileName . Str::slug($this->dateService->toDateTimeString()); - $fullFileName = $fileName . '.' . strtolower($file->getClientOriginalExtension()); + if ( $media instanceof Media ) { + $fileName = $fileName . Str::slug( $this->dateService->toDateTimeString() ); + $fullFileName = $fileName . '.' . strtolower( $file->getClientOriginalExtension() ); } $year = $this->dateService->year; - $month = sprintf('%02d', $this->dateService->month); - $folderPath = Hook::filter('ns-media-path', $year . DIRECTORY_SEPARATOR . $month . DIRECTORY_SEPARATOR); + $month = sprintf( '%02d', $this->dateService->month ); + $folderPath = Hook::filter( 'ns-media-path', $year . DIRECTORY_SEPARATOR . $month . DIRECTORY_SEPARATOR ); $indexPath = $folderPath . 'index.html'; /** * If the storage folder hasn't been created * we'll create one and save an empty index within. */ - if (! Storage::disk('public')->exists($indexPath)) { - Storage::disk('public')->put($indexPath, ''); + if ( ! Storage::disk( 'public' )->exists( $indexPath ) ) { + Storage::disk( 'public' )->put( $indexPath, '' ); } - $filePath = Storage::disk('public')->putFileAs( + $filePath = Storage::disk( 'public' )->putFileAs( $folderPath, $file, $fullFileName ); - if (in_array($extension, $this->imageExtensions)) { + if ( in_array( $extension, $this->imageExtensions ) ) { /** * Resizing the images */ - $fullPath = storage_path('app' . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR . $filePath); - $realPathInfo = pathinfo($fullPath); + $fullPath = storage_path( 'app' . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR . $filePath ); + $realPathInfo = pathinfo( $fullPath ); - foreach ($this->sizes as $resizeName => $size) { - $image = new ImageResize($fullPath); - $image->resizeToBestFit($size[0], $size[1]); - $image->save($realPathInfo[ 'dirname' ] . DIRECTORY_SEPARATOR . $fileName . '-' . $resizeName . '.' . $extension); + foreach ( $this->sizes as $resizeName => $size ) { + $image = new ImageResize( $fullPath ); + $image->resizeToBestFit( $size[0], $size[1] ); + $image->save( $realPathInfo[ 'dirname' ] . DIRECTORY_SEPARATOR . $fileName . '-' . $resizeName . '.' . $extension ); } } $media = new Media; $media->name = $fileName; $media->extension = $extension; - $media->slug = Hook::filter('ns-media-path', $year . '/' . $month . '/' . $fileName); + $media->slug = Hook::filter( 'ns-media-path', $year . '/' . $month . '/' . $fileName ); $media->user_id = Auth::id(); $media->save(); - return $this->getSizesUrls($media); + return $this->getSizesUrls( $media ); } return false; @@ -140,13 +140,13 @@ public function upload($file, $customName = null) * @param string * @return string */ - public function __preventDuplicate($filename) + public function __preventDuplicate( $filename ) { - $date = app()->make(DateService::class); - $media = Media::where('name', $filename) + $date = app()->make( DateService::class ); + $media = Media::where( 'name', $filename ) ->first(); - if ($media instanceof Media) { + if ( $media instanceof Media ) { return $filename . $date->micro; } @@ -160,10 +160,10 @@ public function __preventDuplicate($filename) * @param string size * @return mixed */ - public function get($filename, $size = 'original') + public function get( $filename, $size = 'original' ) { - if (in_array($size, array_keys($this->sizes))) { - $file = Media::where('slug', $filename)->first(); + if ( in_array( $size, array_keys( $this->sizes ) ) ) { + $file = Media::where( 'slug', $filename )->first(); } return false; @@ -175,11 +175,11 @@ public function get($filename, $size = 'original') * @param int * @return Media model */ - public function find($id) + public function find( $id ) { - $file = Media::where('id', $id)->first(); - if ($file instanceof Media) { - return $this->getSizesUrls($file); + $file = Media::where( 'id', $id )->first(); + if ( $file instanceof Media ) { + return $this->getSizesUrls( $file ); } return false; @@ -191,32 +191,32 @@ public function find($id) * @param int media id * @return json */ - public function deleteMedia($id) + public function deleteMedia( $id ) { - $media = Media::find($id); + $media = Media::find( $id ); - if ($media instanceof Media) { - $media = $this->getSizesUrls($media); + if ( $media instanceof Media ) { + $media = $this->getSizesUrls( $media ); - foreach ($media->sizes as $name => $file) { + foreach ( $media->sizes as $name => $file ) { // original files doesn't have the slug original // so we'll keep that empty $name = $name == 'original' ? '' : '-' . $name; - Storage::disk('public')->delete($media->slug . $name . '.' . $media->extension); + Storage::disk( 'public' )->delete( $media->slug . $name . '.' . $media->extension ); } $media->delete(); return [ 'status' => 'success', - 'message' => __('The media has been deleted'), + 'message' => __( 'The media has been deleted' ), ]; } return [ 'status' => 'failed', - 'message' => __('Unable to find the media.'), + 'message' => __( 'Unable to find the media.' ), ]; } @@ -228,32 +228,32 @@ public function deleteMedia($id) */ public function loadAjax() { - $per_page = request()->query('per_page') ?? 20; - $user_id = request()->query('user_id'); - $search = request()->query('search') ?? null; + $per_page = request()->query( 'per_page' ) ?? 20; + $user_id = request()->query( 'user_id' ); + $search = request()->query( 'search' ) ?? null; - $mediaQuery = Media::with('user') - ->orderBy('updated_at', 'desc'); + $mediaQuery = Media::with( 'user' ) + ->orderBy( 'updated_at', 'desc' ); /** * We'll only load the medias that has * been uploaded by the logged user. */ - if (! empty($user_id)) { - $mediaQuery->where('user_id', $user_id); + if ( ! empty( $user_id ) ) { + $mediaQuery->where( 'user_id', $user_id ); } - if (! empty($search)) { - $mediaQuery->where('name', 'like', "%$search%"); + if ( ! empty( $search ) ) { + $mediaQuery->where( 'name', 'like', "%$search%" ); } - $medias = $mediaQuery->paginate($per_page); + $medias = $mediaQuery->paginate( $per_page ); /** * populating the media */ - foreach ($medias as &$media) { - $media = $this->getSizesUrls($media); + foreach ( $medias as &$media ) { + $media = $this->getSizesUrls( $media ); } return $medias; @@ -265,17 +265,17 @@ public function loadAjax() * @param object media entry * @return Media */ - private function getSizesUrls(Media $media) + private function getSizesUrls( Media $media ) { $media->sizes = new \stdClass; - $media->sizes->{'original'} = Storage::disk('public')->url($media->slug . '.' . $media->extension); + $media->sizes->{'original'} = Storage::disk( 'public' )->url( $media->slug . '.' . $media->extension ); /** * provide others url if the media is an image */ - if (in_array($media->extension, $this->imageExtensions)) { - foreach ($this->sizes as $name => $sizes) { - $media->sizes->$name = Storage::disk('public')->url($media->slug . '-' . $name . '.' . $media->extension); + if ( in_array( $media->extension, $this->imageExtensions ) ) { + foreach ( $this->sizes as $name => $sizes ) { + $media->sizes->$name = Storage::disk( 'public' )->url( $media->slug . '-' . $name . '.' . $media->extension ); } } @@ -288,18 +288,18 @@ private function getSizesUrls(Media $media) * @param number media id * @return array */ - public function getMediaPath($id, $size = '') + public function getMediaPath( $id, $size = '' ) { - $media = $this->find($id); - if ($media instanceof Media) { - $file = Storage::disk('public')->path($media->slug . (! empty($size) ? '-' . $size : '') . '.' . $media->extension); + $media = $this->find( $id ); + if ( $media instanceof Media ) { + $file = Storage::disk( 'public' )->path( $media->slug . ( ! empty( $size ) ? '-' . $size : '' ) . '.' . $media->extension ); - if (is_file($file)) { - return Storage::disk('public')->download($media->slug . (! empty($size) ? '-' . $size : '') . '.' . $media->extension); + if ( is_file( $file ) ) { + return Storage::disk( 'public' )->download( $media->slug . ( ! empty( $size ) ? '-' . $size : '' ) . '.' . $media->extension ); } - throw new Exception(__('Unable to find the requested file.')); + throw new Exception( __( 'Unable to find the requested file.' ) ); } - throw new Exception(__('Unable to find the media entry')); + throw new Exception( __( 'Unable to find the media entry' ) ); } } diff --git a/app/Services/MenuService.php b/app/Services/MenuService.php index 32b2187df..55965468f 100644 --- a/app/Services/MenuService.php +++ b/app/Services/MenuService.php @@ -12,48 +12,48 @@ public function buildMenus() { $this->menus = [ 'dashboard' => [ - 'label' => __('Dashboard'), + 'label' => __( 'Dashboard' ), 'permissions' => [ 'read.dashboard' ], 'icon' => 'la-home', 'childrens' => [ 'index' => [ - 'label' => __('Home'), + 'label' => __( 'Home' ), 'permissions' => [ 'read.dashboard' ], - 'href' => ns()->url('/dashboard'), + 'href' => ns()->url( '/dashboard' ), ], ], ], 'pos' => [ - 'label' => __('POS'), + 'label' => __( 'POS' ), 'icon' => 'la-cash-register', 'permissions' => [ 'nexopos.create.orders' ], - 'href' => ns()->url('/dashboard/pos'), + 'href' => ns()->url( '/dashboard/pos' ), ], 'orders' => [ - 'label' => __('Orders'), + 'label' => __( 'Orders' ), 'permissions' => [ 'nexopos.read.orders' ], 'icon' => 'la-list-ol', 'childrens' => [ 'order-list' => [ - 'label' => __('Orders List'), - 'href' => ns()->url('/dashboard/orders'), + 'label' => __( 'Orders List' ), + 'href' => ns()->url( '/dashboard/orders' ), 'permissions' => [ 'nexopos.read.orders' ], ], 'payment-type' => [ - 'label' => __('Payment Types'), - 'href' => ns()->url('/dashboard/orders/payments-types'), + 'label' => __( 'Payment Types' ), + 'href' => ns()->url( '/dashboard/orders/payments-types' ), 'permissions' => [ 'nexopos.manage-payments-types' ], ], ], ], 'medias' => [ - 'label' => __('Medias'), + 'label' => __( 'Medias' ), 'permissions' => [ 'nexopos.upload.medias', 'nexopos.see.medias' ], 'icon' => 'la-photo-video', - 'href' => ns()->url('/dashboard/medias'), + 'href' => ns()->url( '/dashboard/medias' ), ], 'customers' => [ - 'label' => __('Customers'), + 'label' => __( 'Customers' ), 'permissions' => [ 'nexopos.read.customers', 'nexopos.create.customers', @@ -68,49 +68,49 @@ public function buildMenus() 'icon' => 'la-user-friends', 'childrens' => [ 'customers' => [ - 'label' => __('List'), + 'label' => __( 'List' ), 'permissions' => [ 'nexopos.read.customers' ], - 'href' => ns()->url('/dashboard/customers'), + 'href' => ns()->url( '/dashboard/customers' ), ], 'create-customer' => [ - 'label' => __('Create Customer'), + 'label' => __( 'Create Customer' ), 'permissions' => [ 'nexopos.create.customers' ], - 'href' => ns()->url('/dashboard/customers/create'), + 'href' => ns()->url( '/dashboard/customers/create' ), ], 'customers-groups' => [ - 'label' => __('Customers Groups'), + 'label' => __( 'Customers Groups' ), 'permissions' => [ 'nexopos.read.customers-groups' ], - 'href' => ns()->url('/dashboard/customers/groups'), + 'href' => ns()->url( '/dashboard/customers/groups' ), ], 'create-customers-group' => [ - 'label' => __('Create Group'), + 'label' => __( 'Create Group' ), 'permissions' => [ 'nexopos.create.customers-groups' ], - 'href' => ns()->url('/dashboard/customers/groups/create'), + 'href' => ns()->url( '/dashboard/customers/groups/create' ), ], 'list-reward-system' => [ - 'label' => __('Reward Systems'), + 'label' => __( 'Reward Systems' ), 'permissions' => [ 'nexopos.read.rewards' ], - 'href' => ns()->url('/dashboard/customers/rewards-system'), + 'href' => ns()->url( '/dashboard/customers/rewards-system' ), ], 'create-reward-system' => [ - 'label' => __('Create Reward'), + 'label' => __( 'Create Reward' ), 'permissions' => [ 'nexopos.create.rewards' ], - 'href' => ns()->url('/dashboard/customers/rewards-system/create'), + 'href' => ns()->url( '/dashboard/customers/rewards-system/create' ), ], 'list-coupons' => [ - 'label' => __('List Coupons'), + 'label' => __( 'List Coupons' ), 'permissions' => [ 'nexopos.read.coupons' ], - 'href' => ns()->url('/dashboard/customers/coupons'), + 'href' => ns()->url( '/dashboard/customers/coupons' ), ], 'create-coupons' => [ - 'label' => __('Create Coupon'), + 'label' => __( 'Create Coupon' ), 'permissions' => [ 'nexopos.create.coupons' ], - 'href' => ns()->url('/dashboard/customers/coupons/create'), + 'href' => ns()->url( '/dashboard/customers/coupons/create' ), ], ], ], 'providers' => [ - 'label' => __('Providers'), + 'label' => __( 'Providers' ), 'icon' => 'la-user-tie', 'permissions' => [ 'nexopos.read.providers', @@ -118,19 +118,19 @@ public function buildMenus() ], 'childrens' => [ 'providers' => [ - 'label' => __('List'), + 'label' => __( 'List' ), 'permissions' => [ 'nexopos.read.providers' ], - 'href' => ns()->url('/dashboard/providers'), + 'href' => ns()->url( '/dashboard/providers' ), ], 'create-provider' => [ - 'label' => __('Create A Provider'), + 'label' => __( 'Create A Provider' ), 'permissions' => [ 'nexopos.create.providers' ], - 'href' => ns()->url('/dashboard/providers/create'), + 'href' => ns()->url( '/dashboard/providers/create' ), ], ], ], 'accounting' => [ - 'label' => __('Accounting'), + 'label' => __( 'Accounting' ), 'icon' => 'la-stream', 'permissions' => [ 'nexopos.read.transactions', @@ -140,34 +140,34 @@ public function buildMenus() ], 'childrens' => [ 'transactions' => [ - 'label' => __('Transactions'), + 'label' => __( 'Transactions' ), 'permissions' => [ 'nexopos.read.transactions' ], - 'href' => ns()->url('/dashboard/accounting/transactions'), + 'href' => ns()->url( '/dashboard/accounting/transactions' ), ], 'create-transaction' => [ - 'label' => __('Create Transaction'), + 'label' => __( 'Create Transaction' ), 'permissions' => [ 'nexopos.create.transactions' ], - 'href' => ns()->url('/dashboard/accounting/transactions/create'), + 'href' => ns()->url( '/dashboard/accounting/transactions/create' ), ], 'transactions-history' => [ - 'label' => __('History'), + 'label' => __( 'History' ), 'permissions' => [ 'nexopos.read.transactions-history' ], - 'href' => ns()->url('/dashboard/accounting/transactions/history'), + 'href' => ns()->url( '/dashboard/accounting/transactions/history' ), ], 'transactions-account' => [ - 'label' => __('Accounts'), + 'label' => __( 'Accounts' ), 'permissions' => [ 'nexopos.read.transactions-account' ], - 'href' => ns()->url('/dashboard/accounting/accounts'), + 'href' => ns()->url( '/dashboard/accounting/accounts' ), ], 'create-transactions-account' => [ - 'label' => __('Create Account'), + 'label' => __( 'Create Account' ), 'permissions' => [ 'nexopos.create.transactions-account' ], - 'href' => ns()->url('/dashboard/accounting/accounts/create'), + 'href' => ns()->url( '/dashboard/accounting/accounts/create' ), ], ], ], 'inventory' => [ - 'label' => __('Inventory'), + 'label' => __( 'Inventory' ), 'icon' => 'la-boxes', 'permissions' => [ 'nexopos.read.products', @@ -182,64 +182,64 @@ public function buildMenus() ], 'childrens' => [ 'products' => [ - 'label' => __('Products'), + 'label' => __( 'Products' ), 'permissions' => [ 'nexopos.read.products' ], - 'href' => ns()->url('/dashboard/products'), + 'href' => ns()->url( '/dashboard/products' ), ], 'create-products' => [ - 'label' => __('Create Product'), + 'label' => __( 'Create Product' ), 'permissions' => [ 'nexopos.create.products' ], - 'href' => ns()->url('/dashboard/products/create'), + 'href' => ns()->url( '/dashboard/products/create' ), ], 'labels-printing' => [ - 'label' => __('Print Labels'), - 'href' => ns()->url('/dashboard/products/print-labels'), + 'label' => __( 'Print Labels' ), + 'href' => ns()->url( '/dashboard/products/print-labels' ), 'permissions' => [ 'nexopos.create.products-labels' ], ], 'categories' => [ - 'label' => __('Categories'), + 'label' => __( 'Categories' ), 'permissions' => [ 'nexopos.read.categories' ], - 'href' => ns()->url('/dashboard/products/categories'), + 'href' => ns()->url( '/dashboard/products/categories' ), ], 'create-categories' => [ - 'label' => __('Create Category'), + 'label' => __( 'Create Category' ), 'permissions' => [ 'nexopos.create.categories' ], - 'href' => ns()->url('/dashboard/products/categories/create'), + 'href' => ns()->url( '/dashboard/products/categories/create' ), ], 'units' => [ - 'label' => __('Units'), + 'label' => __( 'Units' ), 'permissions' => [ 'nexopos.read.products-units' ], - 'href' => ns()->url('/dashboard/units'), + 'href' => ns()->url( '/dashboard/units' ), ], 'create-units' => [ - 'label' => __('Create Unit'), + 'label' => __( 'Create Unit' ), 'permissions' => [ 'nexopos.create.products-units' ], - 'href' => ns()->url('/dashboard/units/create'), + 'href' => ns()->url( '/dashboard/units/create' ), ], 'unit-groups' => [ - 'label' => __('Unit Groups'), + 'label' => __( 'Unit Groups' ), 'permissions' => [ 'nexopos.read.products-units' ], - 'href' => ns()->url('/dashboard/units/groups'), + 'href' => ns()->url( '/dashboard/units/groups' ), ], 'create-unit-groups' => [ - 'label' => __('Create Unit Groups'), + 'label' => __( 'Create Unit Groups' ), 'permissions' => [ 'nexopos.create.products-units' ], - 'href' => ns()->url('/dashboard/units/groups/create'), + 'href' => ns()->url( '/dashboard/units/groups/create' ), ], 'stock-adjustment' => [ - 'label' => __('Stock Adjustment'), + 'label' => __( 'Stock Adjustment' ), 'permissions' => [ 'nexopos.make.products-adjustments' ], - 'href' => ns()->url('/dashboard/products/stock-adjustment'), + 'href' => ns()->url( '/dashboard/products/stock-adjustment' ), ], 'product-history' => [ - 'label' => __('Stock Flow Records'), + 'label' => __( 'Stock Flow Records' ), 'permissions' => [ 'nexopos.read.products' ], - 'href' => ns()->url('/dashboard/products/stock-flow-records'), + 'href' => ns()->url( '/dashboard/products/stock-flow-records' ), ], ], ], 'taxes' => [ - 'label' => __('Taxes'), + 'label' => __( 'Taxes' ), 'icon' => 'la-balance-scale-left', 'permissions' => [ 'nexopos.create.taxes', @@ -249,109 +249,109 @@ public function buildMenus() ], 'childrens' => [ 'taxes-groups' => [ - 'label' => __('Taxes Groups'), + 'label' => __( 'Taxes Groups' ), 'permissions' => [ 'nexopos.read.taxes' ], - 'href' => ns()->url('/dashboard/taxes/groups'), + 'href' => ns()->url( '/dashboard/taxes/groups' ), ], 'create-taxes-group' => [ - 'label' => __('Create Tax Groups'), + 'label' => __( 'Create Tax Groups' ), 'permissions' => [ 'nexopos.create.taxes' ], - 'href' => ns()->url('/dashboard/taxes/groups/create'), + 'href' => ns()->url( '/dashboard/taxes/groups/create' ), ], 'taxes' => [ - 'label' => __('Taxes'), + 'label' => __( 'Taxes' ), 'permissions' => [ 'nexopos.read.taxes' ], - 'href' => ns()->url('/dashboard/taxes'), + 'href' => ns()->url( '/dashboard/taxes' ), ], 'create-tax' => [ - 'label' => __('Create Tax'), + 'label' => __( 'Create Tax' ), 'permissions' => [ 'nexopos.create.taxes' ], - 'href' => ns()->url('/dashboard/taxes/create'), + 'href' => ns()->url( '/dashboard/taxes/create' ), ], ], ], 'modules' => [ - 'label' => __('Modules'), + 'label' => __( 'Modules' ), 'icon' => 'la-plug', 'permissions' => [ 'manage.modules' ], 'childrens' => [ 'modules' => [ - 'label' => __('List'), - 'href' => ns()->url('/dashboard/modules'), + 'label' => __( 'List' ), + 'href' => ns()->url( '/dashboard/modules' ), ], 'upload-module' => [ - 'label' => __('Upload Module'), - 'href' => ns()->url('/dashboard/modules/upload'), + 'label' => __( 'Upload Module' ), + 'href' => ns()->url( '/dashboard/modules/upload' ), ], ], ], 'users' => [ - 'label' => __('Users'), + 'label' => __( 'Users' ), 'icon' => 'la-users', 'childrens' => [ 'profile' => [ - 'label' => __('My Profile'), + 'label' => __( 'My Profile' ), 'permissions' => [ 'manage.profile' ], - 'href' => ns()->url('/dashboard/users/profile'), + 'href' => ns()->url( '/dashboard/users/profile' ), ], 'users' => [ - 'label' => __('Users List'), + 'label' => __( 'Users List' ), 'permissions' => [ 'read.users' ], - 'href' => ns()->url('/dashboard/users'), + 'href' => ns()->url( '/dashboard/users' ), ], 'create-user' => [ - 'label' => __('Create User'), + 'label' => __( 'Create User' ), 'permissions' => [ 'create.users' ], - 'href' => ns()->url('/dashboard/users/create'), + 'href' => ns()->url( '/dashboard/users/create' ), ], ], ], 'roles' => [ - 'label' => __('Roles'), + 'label' => __( 'Roles' ), 'icon' => 'la-shield-alt', 'permissions' => [ 'read.roles', 'create.roles', 'update.roles' ], 'childrens' => [ 'all-roles' => [ - 'label' => __('Roles'), + 'label' => __( 'Roles' ), 'permissions' => [ 'read.roles' ], - 'href' => ns()->url('/dashboard/users/roles'), + 'href' => ns()->url( '/dashboard/users/roles' ), ], 'create-role' => [ - 'label' => __('Create Roles'), + 'label' => __( 'Create Roles' ), 'permissions' => [ 'create.roles' ], - 'href' => ns()->url('/dashboard/users/roles/create'), + 'href' => ns()->url( '/dashboard/users/roles/create' ), ], 'permissions' => [ - 'label' => __('Permissions Manager'), + 'label' => __( 'Permissions Manager' ), 'permissions' => [ 'update.roles' ], - 'href' => ns()->url('/dashboard/users/roles/permissions-manager'), + 'href' => ns()->url( '/dashboard/users/roles/permissions-manager' ), ], ], ], 'procurements' => [ - 'label' => __('Procurements'), + 'label' => __( 'Procurements' ), 'icon' => 'la-truck-loading', 'permissions' => [ 'nexopos.read.procurements', 'nexopos.create.procurements' ], 'childrens' => [ 'procurements' => [ - 'label' => __('Procurements List'), + 'label' => __( 'Procurements List' ), 'permissions' => [ 'nexopos.read.procurements' ], - 'href' => ns()->url('/dashboard/procurements'), + 'href' => ns()->url( '/dashboard/procurements' ), ], 'procurements-create' => [ - 'label' => __('New Procurement'), + 'label' => __( 'New Procurement' ), 'permissions' => [ 'nexopos.create.procurements' ], - 'href' => ns()->url('/dashboard/procurements/create'), + 'href' => ns()->url( '/dashboard/procurements/create' ), ], 'procurements-products' => [ - 'label' => __('Products'), + 'label' => __( 'Products' ), 'permissions' => [ 'nexopos.update.procurements' ], - 'href' => ns()->url('/dashboard/procurements/products'), + 'href' => ns()->url( '/dashboard/procurements/products' ), ], ], ], 'reports' => [ - 'label' => __('Reports'), + 'label' => __( 'Reports' ), 'icon' => 'la-chart-pie', 'permissions' => [ 'nexopos.reports.sales', @@ -364,99 +364,99 @@ public function buildMenus() ], 'childrens' => [ 'sales' => [ - 'label' => __('Sale Report'), + 'label' => __( 'Sale Report' ), 'permissions' => [ 'nexopos.reports.sales' ], - 'href' => ns()->url('/dashboard/reports/sales'), + 'href' => ns()->url( '/dashboard/reports/sales' ), ], 'products-report' => [ - 'label' => __('Sales Progress'), + 'label' => __( 'Sales Progress' ), 'permissions' => [ 'nexopos.reports.products-report' ], - 'href' => ns()->url('/dashboard/reports/sales-progress'), + 'href' => ns()->url( '/dashboard/reports/sales-progress' ), ], 'customers-statement' => [ - 'label' => __('Customers Statement'), + 'label' => __( 'Customers Statement' ), 'permissions' => [ 'nexopos.reports.customers-statement' ], - 'href' => ns()->url('/dashboard/reports/customers-statement'), + 'href' => ns()->url( '/dashboard/reports/customers-statement' ), ], 'low-stock' => [ - 'label' => __('Stock Report'), + 'label' => __( 'Stock Report' ), 'permissions' => [ 'nexopos.reports.low-stock' ], - 'href' => ns()->url('/dashboard/reports/low-stock'), + 'href' => ns()->url( '/dashboard/reports/low-stock' ), ], 'stock-history' => [ - 'label' => __('Stock History'), + 'label' => __( 'Stock History' ), 'permissions' => [ 'nexopos.reports.stock-history' ], - 'href' => ns()->url('/dashboard/reports/stock-history'), + 'href' => ns()->url( '/dashboard/reports/stock-history' ), ], 'sold-stock' => [ - 'label' => __('Sold Stock'), - 'href' => ns()->url('/dashboard/reports/sold-stock'), + 'label' => __( 'Sold Stock' ), + 'href' => ns()->url( '/dashboard/reports/sold-stock' ), ], 'profit' => [ - 'label' => __('Incomes & Loosses'), - 'href' => ns()->url('/dashboard/reports/profit'), + 'label' => __( 'Incomes & Loosses' ), + 'href' => ns()->url( '/dashboard/reports/profit' ), ], 'transactions' => [ - 'label' => __('Transactions'), + 'label' => __( 'Transactions' ), 'permissions' => [ 'nexopos.reports.transactions' ], - 'href' => ns()->url('/dashboard/reports/transactions'), + 'href' => ns()->url( '/dashboard/reports/transactions' ), ], 'annulal-sales' => [ - 'label' => __('Annual Report'), + 'label' => __( 'Annual Report' ), 'permissions' => [ 'nexopos.reports.yearly' ], - 'href' => ns()->url('/dashboard/reports/annual-report'), + 'href' => ns()->url( '/dashboard/reports/annual-report' ), ], 'payment-types' => [ - 'label' => __('Sales By Payments'), + 'label' => __( 'Sales By Payments' ), 'permissions' => [ 'nexopos.reports.payment-types' ], - 'href' => ns()->url('/dashboard/reports/payment-types'), + 'href' => ns()->url( '/dashboard/reports/payment-types' ), ], ], ], 'settings' => [ - 'label' => __('Settings'), + 'label' => __( 'Settings' ), 'icon' => 'la-cogs', 'permissions' => [ 'manage.options' ], 'childrens' => [ 'general' => [ - 'label' => __('General'), - 'href' => ns()->url('/dashboard/settings/general'), + 'label' => __( 'General' ), + 'href' => ns()->url( '/dashboard/settings/general' ), ], 'pos' => [ - 'label' => __('POS'), - 'href' => ns()->url('/dashboard/settings/pos'), + 'label' => __( 'POS' ), + 'href' => ns()->url( '/dashboard/settings/pos' ), ], 'customers' => [ - 'label' => __('Customers'), - 'href' => ns()->url('/dashboard/settings/customers'), + 'label' => __( 'Customers' ), + 'href' => ns()->url( '/dashboard/settings/customers' ), ], 'orders' => [ - 'label' => __('Orders'), - 'href' => ns()->url('/dashboard/settings/orders'), + 'label' => __( 'Orders' ), + 'href' => ns()->url( '/dashboard/settings/orders' ), ], 'accounting' => [ - 'label' => __('Accounting'), - 'href' => ns()->url('/dashboard/settings/accounting'), + 'label' => __( 'Accounting' ), + 'href' => ns()->url( '/dashboard/settings/accounting' ), ], 'reports' => [ - 'label' => __('Reports'), - 'href' => ns()->url('/dashboard/settings/reports'), + 'label' => __( 'Reports' ), + 'href' => ns()->url( '/dashboard/settings/reports' ), ], 'invoices' => [ - 'label' => __('Invoices'), - 'href' => ns()->url('/dashboard/settings/invoices'), + 'label' => __( 'Invoices' ), + 'href' => ns()->url( '/dashboard/settings/invoices' ), ], 'workers' => [ - 'label' => __('Workers'), - 'href' => ns()->url('/dashboard/settings/workers'), + 'label' => __( 'Workers' ), + 'href' => ns()->url( '/dashboard/settings/workers' ), ], 'reset' => [ - 'label' => __('Reset'), - 'href' => ns()->url('/dashboard/settings/reset'), + 'label' => __( 'Reset' ), + 'href' => ns()->url( '/dashboard/settings/reset' ), ], 'about' => [ - 'label' => __('About'), - 'href' => ns()->url('/dashboard/settings/about'), + 'label' => __( 'About' ), + 'href' => ns()->url( '/dashboard/settings/about' ), ], ], ], @@ -471,7 +471,7 @@ public function buildMenus() public function getMenus() { $this->buildMenus(); - $this->menus = Hook::filter('ns-dashboard-menus', $this->menus); + $this->menus = Hook::filter( 'ns-dashboard-menus', $this->menus ); $this->toggleActive(); return $this->menus; @@ -485,14 +485,14 @@ public function getMenus() */ public function toggleActive() { - foreach ($this->menus as $identifier => &$menu) { - if (isset($menu[ 'href' ]) && $menu[ 'href' ] === url()->current()) { + foreach ( $this->menus as $identifier => &$menu ) { + if ( isset( $menu[ 'href' ] ) && $menu[ 'href' ] === url()->current() ) { $menu[ 'toggled' ] = true; } - if (isset($menu[ 'childrens' ])) { - foreach ($menu[ 'childrens' ] as $subidentifier => &$submenu) { - if ($submenu[ 'href' ] === url()->current()) { + if ( isset( $menu[ 'childrens' ] ) ) { + foreach ( $menu[ 'childrens' ] as $subidentifier => &$submenu ) { + if ( $submenu[ 'href' ] === url()->current() ) { $menu[ 'toggled' ] = true; $submenu[ 'active' ] = true; } diff --git a/app/Services/Module.php b/app/Services/Module.php index 47b635054..9f2d1b39b 100644 --- a/app/Services/Module.php +++ b/app/Services/Module.php @@ -11,7 +11,7 @@ class Module protected $file; - public function __construct($file) + public function __construct( $file ) { $this->file = $file; } @@ -19,36 +19,36 @@ public function __construct($file) /** * @deprecated */ - public static function namespace($namespace) + public static function namespace( $namespace ) { /** * @var ModulesService */ - $modules = app()->make(ModulesService::class); - $module = $modules->get($namespace); + $modules = app()->make( ModulesService::class ); + $module = $modules->get( $namespace ); /** * when there is a match * for the requested module */ - if ($module) { - return new Module($module); + if ( $module ) { + return new Module( $module ); } - throw new Exception(__('Unable to locate the requested module.')); + throw new Exception( __( 'Unable to locate the requested module.' ) ); } /** * Include specific module file * - * @param string $file + * @param string $file * @return void * * @deprecated */ - public function loadFile($file) + public function loadFile( $file ) { - $filePath = Str::finish($this->module[ 'path' ] . $file, '.php'); + $filePath = Str::finish( $this->module[ 'path' ] . $file, '.php' ); require $filePath; } } diff --git a/app/Services/ModulesService.php b/app/Services/ModulesService.php index 534fc37e2..d8e78694b 100644 --- a/app/Services/ModulesService.php +++ b/app/Services/ModulesService.php @@ -46,33 +46,33 @@ class ModulesService public function __construct() { - if (Helper::installed(true)) { + if ( Helper::installed( true ) ) { /** * We can only enable a module if the database is installed. */ - $this->options = app()->make(Options::class); + $this->options = app()->make( Options::class ); } - $this->modulesPath = base_path('modules') . DIRECTORY_SEPARATOR; - $this->xmlParser = new Reader(new Document); + $this->modulesPath = base_path( 'modules' ) . DIRECTORY_SEPARATOR; + $this->xmlParser = new Reader( new Document ); /** * creates the directory modules * if that doesn't exists */ - if (! is_dir(base_path('modules'))) { - Storage::disk('ns')->makeDirectory('modules'); + if ( ! is_dir( base_path( 'modules' ) ) ) { + Storage::disk( 'ns' )->makeDirectory( 'modules' ); } } /** * Will load a set of files within a specifc module. */ - public static function loadModuleFile(string $namespace, string $file): mixed + public static function loadModuleFile( string $namespace, string $file ): mixed { - $moduleService = app()->make(self::class); - $module = $moduleService->get($namespace); - $filePath = Str::finish($module[ 'path' ] . $file, '.php'); + $moduleService = app()->make( self::class ); + $module = $moduleService->get( $namespace ); + $filePath = Str::finish( $module[ 'path' ] . $file, '.php' ); return require $filePath; } @@ -82,33 +82,33 @@ public static function loadModuleFile(string $namespace, string $file): mixed * * @param string path to load */ - public function load(string $dir = null): void + public function load( ?string $dir = null ): void { /** * If we're not loading a specific module directory */ - if ($dir == null) { - $directories = Storage::disk('ns-modules')->directories(); + if ( $dir == null ) { + $directories = Storage::disk( 'ns-modules' )->directories(); /** * intersect modules/ and remove it * to make sure $this->__init can load successfully. */ - collect($directories)->map(function ($module) { - return str_replace('/', '\\', $module); - })->each(function ($module) { - $this->__init($module); - }); + collect( $directories )->map( function ( $module ) { + return str_replace( '/', '\\', $module ); + } )->each( function ( $module ) { + $this->__init( $module ); + } ); } else { - $this->__init($dir); + $this->__init( $dir ); } } - public function resolveRelativePathToClass($filePath) + public function resolveRelativePathToClass( $filePath ) { - $filePath = str_replace('/', '\\', $filePath); - $filePath = str_replace('.php', '', $filePath); - $filePath = str_replace('modules\\', '', $filePath); + $filePath = str_replace( '/', '\\', $filePath ); + $filePath = str_replace( '.php', '', $filePath ); + $filePath = str_replace( 'modules\\', '', $filePath ); return 'Modules\\' . $filePath; } @@ -116,33 +116,33 @@ public function resolveRelativePathToClass($filePath) /** * Init a module from a provided path. */ - public function __init(string $dir): void + public function __init( string $dir ): void { /** * Loading files from module directory */ - $rawfiles = Storage::disk('ns-modules')->files($dir); + $rawfiles = Storage::disk( 'ns-modules' )->files( $dir ); /** * Just retrieve the files name */ - $files = array_map(function ($file) { - $info = pathinfo($file); + $files = array_map( function ( $file ) { + $info = pathinfo( $file ); return $info[ 'basename' ]; - }, $rawfiles); + }, $rawfiles ); /** * Checks if a config file exists */ - if (in_array('config.xml', $files)) { + if ( in_array( 'config.xml', $files ) ) { $xmlRelativePath = 'modules' . DIRECTORY_SEPARATOR . $dir . DIRECTORY_SEPARATOR . 'config.xml'; $xmlConfigPath = base_path() . DIRECTORY_SEPARATOR . $xmlRelativePath; - $xmlContent = file_get_contents($xmlConfigPath); + $xmlContent = file_get_contents( $xmlConfigPath ); try { - $xml = $this->xmlParser->extract($xmlContent); - $config = $xml->parse([ + $xml = $this->xmlParser->extract( $xmlContent ); + $config = $xml->parse( [ 'namespace' => [ 'uses' => 'namespace' ], 'version' => [ 'uses' => 'version' ], 'author' => [ 'uses' => 'author' ], @@ -150,28 +150,28 @@ public function __init(string $dir): void 'dependencies' => [ 'uses' => 'dependencies' ], 'name' => [ 'uses' => 'name' ], 'core' => [ 'uses' => 'core' ], - ]); - } catch (Exception $exception) { - throw new Exception(sprintf( - __('Failed to parse the configuration file on the following path "%s"'), + ] ); + } catch ( Exception $exception ) { + throw new Exception( sprintf( + __( 'Failed to parse the configuration file on the following path "%s"' ), $xmlRelativePath - )); + ) ); } - $xmlElement = new \SimpleXMLElement($xmlContent); + $xmlElement = new \SimpleXMLElement( $xmlContent ); - if ($xmlElement->core[0] instanceof SimpleXMLElement) { + if ( $xmlElement->core[0] instanceof SimpleXMLElement ) { $attributes = $xmlElement->core[0]->attributes(); $minVersion = 'min-version'; $maxVersion = 'max-version'; $config[ 'core' ] = [ - 'min-version' => ((string) $attributes->$minVersion) ?? null, - 'max-version' => ((string) $attributes->$maxVersion) ?? null, + 'min-version' => ( (string) $attributes->$minVersion ) ?? null, + 'max-version' => ( (string) $attributes->$maxVersion ) ?? null, ]; } - $config[ 'requires' ] = collect($xmlElement->children()->requires->xpath('//dependency'))->mapWithKeys(function ($module) { + $config[ 'requires' ] = collect( $xmlElement->children()->requires->xpath( '//dependency' ) )->mapWithKeys( function ( $module ) { $module = (array) $module; return [ @@ -181,34 +181,34 @@ public function __init(string $dir): void 'name' => $module[0], ], ]; - })->toArray() ?? []; + } )->toArray() ?? []; $config[ 'files' ] = $files; // If a module has at least a namespace - if ($config[ 'namespace' ] !== null) { + if ( $config[ 'namespace' ] !== null ) { // index path - $modulesPath = base_path('modules') . DIRECTORY_SEPARATOR; + $modulesPath = base_path( 'modules' ) . DIRECTORY_SEPARATOR; $currentModulePath = $modulesPath . $dir . DIRECTORY_SEPARATOR; - $indexPath = $currentModulePath . ucwords($config[ 'namespace' ] . 'Module.php'); + $indexPath = $currentModulePath . ucwords( $config[ 'namespace' ] . 'Module.php' ); $webRoutesPath = $currentModulePath . 'Routes' . DIRECTORY_SEPARATOR . 'web.php'; $apiRoutesPath = $currentModulePath . 'Routes' . DIRECTORY_SEPARATOR . 'api.php'; // check index existence - $config[ 'api-file' ] = is_file($apiRoutesPath) ? $apiRoutesPath : false; - $config[ 'composer-installed' ] = Storage::disk('ns-modules')->exists($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'); + $config[ 'api-file' ] = is_file( $apiRoutesPath ) ? $apiRoutesPath : false; + $config[ 'composer-installed' ] = Storage::disk( 'ns-modules' )->exists( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php' ); $config[ 'controllers-path' ] = $currentModulePath . 'Http' . DIRECTORY_SEPARATOR . 'Controllers'; - $config[ 'controllers-relativePath' ] = ucwords($config[ 'namespace' ]) . DIRECTORY_SEPARATOR . 'Http' . DIRECTORY_SEPARATOR . 'Controllers'; + $config[ 'controllers-relativePath' ] = ucwords( $config[ 'namespace' ] ) . DIRECTORY_SEPARATOR . 'Http' . DIRECTORY_SEPARATOR . 'Controllers'; $config[ 'enabled' ] = false; // by default the module is set as disabled - $config[ 'has-languages' ] = Storage::disk('ns-modules')->exists($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Lang'); - $config[ 'lang-relativePath' ] = 'modules' . DIRECTORY_SEPARATOR . ucwords($config[ 'namespace' ]) . DIRECTORY_SEPARATOR . 'Lang'; - $config[ 'index-file' ] = is_file($indexPath) ? $indexPath : false; + $config[ 'has-languages' ] = Storage::disk( 'ns-modules' )->exists( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Lang' ); + $config[ 'lang-relativePath' ] = 'modules' . DIRECTORY_SEPARATOR . ucwords( $config[ 'namespace' ] ) . DIRECTORY_SEPARATOR . 'Lang'; + $config[ 'index-file' ] = is_file( $indexPath ) ? $indexPath : false; $config[ 'path' ] = $currentModulePath; - $config[ 'relativePath' ] = 'modules' . DIRECTORY_SEPARATOR . ucwords($config[ 'namespace' ]) . DIRECTORY_SEPARATOR; - $config[ 'requires-composer' ] = Storage::disk('ns-modules')->exists($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'composer.json') && ! Storage::disk('ns-modules')->exists($config[ 'namespace' ] . DIRECTORY_SEPARATOR . '.ignore-composer'); - $config[ 'routes-file' ] = is_file($webRoutesPath) ? $webRoutesPath : false; + $config[ 'relativePath' ] = 'modules' . DIRECTORY_SEPARATOR . ucwords( $config[ 'namespace' ] ) . DIRECTORY_SEPARATOR; + $config[ 'requires-composer' ] = Storage::disk( 'ns-modules' )->exists( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'composer.json' ) && ! Storage::disk( 'ns-modules' )->exists( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . '.ignore-composer' ); + $config[ 'routes-file' ] = is_file( $webRoutesPath ) ? $webRoutesPath : false; $config[ 'views-path' ] = $currentModulePath . 'Resources' . DIRECTORY_SEPARATOR . 'Views'; - $config[ 'views-relativePath' ] = 'modules' . DIRECTORY_SEPARATOR . ucwords($config[ 'namespace' ]) . DIRECTORY_SEPARATOR . 'Views'; + $config[ 'views-relativePath' ] = 'modules' . DIRECTORY_SEPARATOR . ucwords( $config[ 'namespace' ] ) . DIRECTORY_SEPARATOR . 'Views'; /** * If the system is installed, then we can check if the module is enabled or not @@ -224,11 +224,11 @@ public function __init(string $dir): void * Entry class must be namespaced like so : 'Modules\[namespace]\[namespace] . 'Module'; */ $config[ 'entry-class' ] = 'Modules\\' . $config[ 'namespace' ] . '\\' . $config[ 'namespace' ] . 'Module'; - $config[ 'providers' ] = $this->getAllValidFiles(Storage::disk('ns-modules')->allFiles($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Providers')); - $config[ 'actions' ] = $this->getAllValidFiles(Storage::disk('ns-modules')->allFiles($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Actions')); - $config[ 'filters' ] = $this->getAllValidFiles(Storage::disk('ns-modules')->allFiles($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Filters')); - $config[ 'commands' ] = collect(Storage::disk('ns-modules')->allFiles($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Console' . DIRECTORY_SEPARATOR . 'Commands')) - ->mapWithKeys(function ($file) { + $config[ 'providers' ] = $this->getAllValidFiles( Storage::disk( 'ns-modules' )->allFiles( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Providers' ) ); + $config[ 'actions' ] = $this->getAllValidFiles( Storage::disk( 'ns-modules' )->allFiles( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Actions' ) ); + $config[ 'filters' ] = $this->getAllValidFiles( Storage::disk( 'ns-modules' )->allFiles( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Filters' ) ); + $config[ 'commands' ] = collect( Storage::disk( 'ns-modules' )->allFiles( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Console' . DIRECTORY_SEPARATOR . 'Commands' ) ) + ->mapWithKeys( function ( $file ) { $className = str_replace( ['/', '.php'], ['\\', ''], @@ -236,29 +236,29 @@ public function __init(string $dir): void ); return [ 'Modules\\' . $className => $file ]; - }) + } ) ->toArray(); /** * Service providers are registered when the module is enabled */ - if ($config[ 'enabled' ]) { + if ( $config[ 'enabled' ] ) { /** * Load Module Config */ - $files = Storage::disk('ns-modules')->allFiles($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Config'); + $files = Storage::disk( 'ns-modules' )->allFiles( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Config' ); $moduleConfig = []; - foreach ($files as $file) { - $info = pathinfo($file); - $_config = include_once base_path('modules') . DIRECTORY_SEPARATOR . $file; + foreach ( $files as $file ) { + $info = pathinfo( $file ); + $_config = include_once base_path( 'modules' ) . DIRECTORY_SEPARATOR . $file; $final[ $config[ 'namespace' ] ] = []; $final[ $config[ 'namespace' ] ][ $info[ 'filename' ] ] = $_config; - $moduleConfig = Arr::dot($final); + $moduleConfig = Arr::dot( $final ); } - foreach ($moduleConfig as $key => $value) { - config([ $key => $value ]); + foreach ( $moduleConfig as $key => $value ) { + config( [ $key => $value ] ); } /** @@ -267,26 +267,26 @@ public function __init(string $dir): void */ $config[ 'langFiles' ] = []; - if ($config[ 'has-languages' ]) { - $rawFiles = Storage::disk('ns-modules') - ->allFiles($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Lang'); - $rawFiles = $this->getAllValidFiles($rawFiles, [ 'json' ]); + if ( $config[ 'has-languages' ] ) { + $rawFiles = Storage::disk( 'ns-modules' ) + ->allFiles( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Lang' ); + $rawFiles = $this->getAllValidFiles( $rawFiles, [ 'json' ] ); - $config[ 'langFiles' ] = collect($rawFiles)->mapWithKeys(function ($file) { - $pathInfo = pathinfo($file); + $config[ 'langFiles' ] = collect( $rawFiles )->mapWithKeys( function ( $file ) { + $pathInfo = pathinfo( $file ); return [ $pathInfo[ 'filename' ] => $file ]; - })->toArray(); + } )->toArray(); } } // an index MUST be provided and MUST have the same Name than the module namespace + 'Module' - if ($config[ 'index-file' ]) { + if ( $config[ 'index-file' ] ) { $this->modules[ $config[ 'namespace' ] ] = $config; } } } else { - Log::error(sprintf(__('No config.xml has been found on the directory : %s. This folder is ignored'), $dir)); + Log::error( sprintf( __( 'No config.xml has been found on the directory : %s. This folder is ignored' ), $dir ) ); } } @@ -303,33 +303,33 @@ public function loadModulesMigrations(): void /** * Triggers the module's service provider on the defined method. */ - public function triggerServiceProviders(array $config, string $method, string|bool $parentClass = false): void + public function triggerServiceProviders( array $config, string $method, string|bool $parentClass = false ): void { - foreach ($config[ 'providers' ] as $service) { + foreach ( $config[ 'providers' ] as $service ) { /** * @todo run service provider */ - $fileInfo = pathinfo($service); + $fileInfo = pathinfo( $service ); - if (is_file(base_path('modules') . DIRECTORY_SEPARATOR . $service) && $fileInfo[ 'extension' ] === 'php') { - $className = ucwords($fileInfo[ 'filename' ]); + if ( is_file( base_path( 'modules' ) . DIRECTORY_SEPARATOR . $service ) && $fileInfo[ 'extension' ] === 'php' ) { + $className = ucwords( $fileInfo[ 'filename' ] ); $fullClassName = 'Modules\\' . $config[ 'namespace' ] . '\\Providers\\' . $className; - if (class_exists($fullClassName)) { + if ( class_exists( $fullClassName ) ) { if ( - ! isset($config[ 'providers-booted' ]) || - ! isset($config[ 'providers-booted' ][ $className ]) || + ! isset( $config[ 'providers-booted' ] ) || + ! isset( $config[ 'providers-booted' ][ $className ] ) || $config[ 'providers-booted' ][ $className ] instanceof $fullClassName ) { - $config[ 'providers-booted' ][ $className ] = new $fullClassName(app()); + $config[ 'providers-booted' ][ $className ] = new $fullClassName( app() ); } /** * If a register method exists and the class is an * instance of ModulesServiceProvider */ - if ($config[ 'providers-booted' ][ $className ] instanceof $parentClass && method_exists($config[ 'providers-booted' ][ $className ], $method)) { - $config[ 'providers-booted' ][ $className ]->$method($this); + if ( $config[ 'providers-booted' ][ $className ] instanceof $parentClass && method_exists( $config[ 'providers-booted' ][ $className ], $method ) ) { + $config[ 'providers-booted' ][ $className ]->$method( $this ); } } } @@ -340,85 +340,85 @@ public function triggerServiceProviders(array $config, string $method, string|bo * Will check for a specific module or all the module * enabled if there is a dependency error. */ - public function dependenciesCheck(array $module = null): void + public function dependenciesCheck( ?array $module = null ): void { - if ($module === null) { - collect($this->getEnabled())->each(function ($module) { - $this->dependenciesCheck($module); - }); + if ( $module === null ) { + collect( $this->getEnabled() )->each( function ( $module ) { + $this->dependenciesCheck( $module ); + } ); } else { /** * We'll check if the requirements * are meet for the provided modules */ - if (isset($module[ 'requires' ])) { - collect($module[ 'requires' ])->each(function ($dependency, $namespace) use ($module) { - if ($this->get($namespace) === null) { + if ( isset( $module[ 'requires' ] ) ) { + collect( $module[ 'requires' ] )->each( function ( $dependency, $namespace ) use ( $module ) { + if ( $this->get( $namespace ) === null ) { /** * The dependency is missing * let's disable the module */ - $this->disable($module[ 'namespace' ]); + $this->disable( $module[ 'namespace' ] ); - throw new MissingDependencyException(__( + throw new MissingDependencyException( __( sprintf( - __('The module "%s" has been disabled as the dependency "%s" is missing. '), + __( 'The module "%s" has been disabled as the dependency "%s" is missing. ' ), $module[ 'name' ], $dependency[ 'name' ] ) - )); + ) ); } - if (! $this->get($namespace)[ 'enabled' ]) { + if ( ! $this->get( $namespace )[ 'enabled' ] ) { /** * The dependency is missing * let's disable the module */ - $this->disable($module[ 'namespace' ]); + $this->disable( $module[ 'namespace' ] ); - throw new MissingDependencyException(__( + throw new MissingDependencyException( __( sprintf( - __('The module "%s" has been disabled as the dependency "%s" is not enabled. '), + __( 'The module "%s" has been disabled as the dependency "%s" is not enabled. ' ), $module[ 'name' ], $dependency[ 'name' ] ) - )); + ) ); } - if (! empty($dependency[ 'min-version' ]) && ! version_compare($this->get($namespace)[ 'version' ], $dependency[ 'min-version' ], '>=')) { + if ( ! empty( $dependency[ 'min-version' ] ) && ! version_compare( $this->get( $namespace )[ 'version' ], $dependency[ 'min-version' ], '>=' ) ) { /** * The module is disabled because * the version doesn't match the requirement. */ - $this->disable($module[ 'namespace' ]); + $this->disable( $module[ 'namespace' ] ); - throw new ModuleVersionMismatchException(__( + throw new ModuleVersionMismatchException( __( sprintf( - __('The module "%s" has been disabled as the dependency "%s" is not on the minimum required version "%s". '), + __( 'The module "%s" has been disabled as the dependency "%s" is not on the minimum required version "%s". ' ), $module[ 'name' ], $dependency[ 'name' ], $dependency[ 'min-version' ] ) - )); + ) ); } - if (! empty($dependency[ 'max-version' ]) && ! version_compare($this->get($namespace)[ 'version' ], $dependency[ 'max-version' ], '<=')) { + if ( ! empty( $dependency[ 'max-version' ] ) && ! version_compare( $this->get( $namespace )[ 'version' ], $dependency[ 'max-version' ], '<=' ) ) { /** * The module is disabled because * the version doesn't match the requirement. */ - $this->disable($module[ 'namespace' ]); + $this->disable( $module[ 'namespace' ] ); - throw new ModuleVersionMismatchException(__( + throw new ModuleVersionMismatchException( __( sprintf( - __('The module "%s" has been disabled as the dependency "%s" is on a version beyond the recommended "%s". '), + __( 'The module "%s" has been disabled as the dependency "%s" is on a version beyond the recommended "%s". ' ), $module[ 'name' ], $dependency[ 'name' ], $dependency[ 'max-version' ] ) - )); + ) ); } - }); + } ); } /** @@ -426,24 +426,24 @@ public function dependenciesCheck(array $module = null): void * at a compatible version for the module */ if ( - isset($module[ 'core' ]) && - ! empty($module[ 'core' ][ 'min-version' ]) && + isset( $module[ 'core' ] ) && + ! empty( $module[ 'core' ][ 'min-version' ] ) && version_compare( - config('nexopos.version'), + config( 'nexopos.version' ), $module[ 'core' ][ 'min-version' ], '<' ) ) { - $this->disable($module[ 'namespace' ]); + $this->disable( $module[ 'namespace' ] ); - throw new ModuleVersionMismatchException(__( + throw new ModuleVersionMismatchException( __( sprintf( - __('The module "%s" has been disabled as it\'s not compatible with the current version of NexoPOS %s, but requires %s. '), + __( 'The module "%s" has been disabled as it\'s not compatible with the current version of NexoPOS %s, but requires %s. ' ), $module[ 'name' ], - config('nexopos.version'), + config( 'nexopos.version' ), $module[ 'core' ][ 'min-version' ] ) - )); + ) ); } } } @@ -451,16 +451,16 @@ public function dependenciesCheck(array $module = null): void /** * Boot a module if it's enabled. */ - public function boot($module = null): void + public function boot( $module = null ): void { - if (! empty($module) && $module[ 'enabled' ]) { - $this->__boot($module); + if ( ! empty( $module ) && $module[ 'enabled' ] ) { + $this->__boot( $module ); } else { - foreach ($this->modules as $module) { - if (! $module[ 'enabled' ]) { + foreach ( $this->modules as $module ) { + if ( ! $module[ 'enabled' ] ) { continue; } - $this->__boot($module); + $this->__boot( $module ); } } } @@ -468,12 +468,12 @@ public function boot($module = null): void /** * Autoload vendors for a defined module. */ - private function __boot($module): void + private function __boot( $module ): void { /** * Autoload Vendors */ - if (is_file($module[ 'path' ] . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php')) { + if ( is_file( $module[ 'path' ] . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php' ) ) { include_once $module[ 'path' ] . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; } @@ -481,15 +481,15 @@ private function __boot($module): void new $module[ 'entry-class' ]; // add view namespace - View::addNamespace(ucwords($module[ 'namespace' ]), $module[ 'views-path' ]); + View::addNamespace( ucwords( $module[ 'namespace' ] ), $module[ 'views-path' ] ); } /** * Return the list of modules as an array */ - public function get($namespace = null): bool|array + public function get( $namespace = null ): bool|array { - if ($namespace !== null) { + if ( $namespace !== null ) { return $this->modules[ $namespace ] ?? false; } @@ -500,11 +500,11 @@ public function get($namespace = null): bool|array * Get a specific module using the provided * namespace only if that module is enabled */ - public function getIfEnabled(string $namespace): bool|array + public function getIfEnabled( string $namespace ): bool|array { $module = $this->modules[ $namespace ] ?? false; - if ($module) { + if ( $module ) { return $module[ 'enabled' ] === true ? $module : false; } @@ -516,11 +516,11 @@ public function getIfEnabled(string $namespace): bool|array */ public function getEnabled(): array { - return array_filter($this->modules, function ($module) { - if ($module[ 'enabled' ] === true) { + return array_filter( $this->modules, function ( $module ) { + if ( $module[ 'enabled' ] === true ) { return $module; } - }); + } ); } /** @@ -528,20 +528,20 @@ public function getEnabled(): array */ public function getDisabled(): array { - return array_filter($this->modules, function ($module) { - if ($module[ 'enabled' ] === false) { + return array_filter( $this->modules, function ( $module ) { + if ( $module[ 'enabled' ] === false ) { return $module; } - }); + } ); } /** * Get a module using the index-file. */ - public function asFile(string $indexFile): mixed + public function asFile( string $indexFile ): mixed { - foreach ($this->modules as $module) { - if ($module[ 'index-file' ] == $indexFile) { + foreach ( $this->modules as $module ) { + if ( $module[ 'index-file' ] == $indexFile ) { return $module; } } @@ -550,26 +550,26 @@ public function asFile(string $indexFile): mixed /** * Extracts a module using provided namespace */ - public function extract(string $namespace): array + public function extract( string $namespace ): array { $this->checkManagementStatus(); - if ($module = $this->get($namespace)) { + if ( $module = $this->get( $namespace ) ) { $zipFile = storage_path() . DIRECTORY_SEPARATOR . 'module.zip'; // unlink old module zip - if (is_file($zipFile)) { - unlink($zipFile); + if ( is_file( $zipFile ) ) { + unlink( $zipFile ); } - $moduleDir = dirname($module[ 'index-file' ]); + $moduleDir = dirname( $module[ 'index-file' ] ); /** * get excluded manifest */ $manifest = false; - if (Storage::disk('ns-modules')->exists(ucwords($namespace) . DIRECTORY_SEPARATOR . 'manifest.json')) { - $manifest = json_decode(Storage::disk('ns-modules')->get(ucwords($namespace) . DIRECTORY_SEPARATOR . 'manifest.json'), true); + if ( Storage::disk( 'ns-modules' )->exists( ucwords( $namespace ) . DIRECTORY_SEPARATOR . 'manifest.json' ) ) { + $manifest = json_decode( Storage::disk( 'ns-modules' )->get( ucwords( $namespace ) . DIRECTORY_SEPARATOR . 'manifest.json' ), true ); } /** @@ -578,36 +578,36 @@ public function extract(string $namespace): array */ $exclusionFolders = []; - if ($manifest && $manifest[ 'exclude' ]) { - foreach ($manifest[ 'exclude' ] as $file) { - $hash = date('y') . '-' . date('m') . '-' . date('i') . '-' . Str::random(20); - $path = base_path('storage/app/' . $hash); - $originalPath = $moduleDir . Str::of($file)->start('/'); + if ( $manifest && $manifest[ 'exclude' ] ) { + foreach ( $manifest[ 'exclude' ] as $file ) { + $hash = date( 'y' ) . '-' . date( 'm' ) . '-' . date( 'i' ) . '-' . Str::random( 20 ); + $path = base_path( 'storage/app/' . $hash ); + $originalPath = $moduleDir . Str::of( $file )->start( '/' ); $exclusionFolders[ $originalPath ] = $path; - exec("mkdir $path"); - exec("mv $originalPath/* $path"); - exec("mv $originalPath/.* $path"); + exec( "mkdir $path" ); + exec( "mv $originalPath/* $path" ); + exec( "mv $originalPath/.* $path" ); } } - $files = Storage::disk('ns-modules')->allFiles(ucwords($namespace)); + $files = Storage::disk( 'ns-modules' )->allFiles( ucwords( $namespace ) ); /** * if a file is within an exclude * match the looped file, it's skipped */ - $files = array_values(collect($files)->filter(function ($file) use ($manifest, $namespace) { - if (is_array(@$manifest[ 'exclude' ])) { - foreach ($manifest[ 'exclude' ] as $check) { - if (fnmatch(ucwords($namespace) . '/' . $check, $file)) { + $files = array_values( collect( $files )->filter( function ( $file ) use ( $manifest, $namespace ) { + if ( is_array( @$manifest[ 'exclude' ] ) ) { + foreach ( $manifest[ 'exclude' ] as $check ) { + if ( fnmatch( ucwords( $namespace ) . '/' . $check, $file ) ) { return false; } } } return true; - })->toArray()); + } )->toArray() ); // create new archive $zipArchive = new \ZipArchive; @@ -616,16 +616,16 @@ public function extract(string $namespace): array \ZipArchive::CREATE | \ZipArchive::OVERWRITE ); - $zipArchive->addEmptyDir(ucwords($namespace)); + $zipArchive->addEmptyDir( ucwords( $namespace ) ); - foreach ($files as $index => $file) { + foreach ( $files as $index => $file ) { /** * We should avoid to extract git stuff as well */ if ( - strpos($file, $namespace . '/.git') === false + strpos( $file, $namespace . '/.git' ) === false ) { - $zipArchive->addFile(base_path('modules') . DIRECTORY_SEPARATOR . $file, $file); + $zipArchive->addFile( base_path( 'modules' ) . DIRECTORY_SEPARATOR . $file, $file ); } } @@ -635,11 +635,11 @@ public function extract(string $namespace): array * restoring the file & folder that are * supposed to be ignored. */ - if (! empty($exclusionFolders)) { - foreach ($exclusionFolders as $destination => $source) { - exec('mv ' . $source . '/* ' . $destination); - exec('mv ' . $source . '/.* ' . $destination); - exec("rm -rf $source"); + if ( ! empty( $exclusionFolders ) ) { + foreach ( $exclusionFolders as $destination => $source ) { + exec( 'mv ' . $source . '/* ' . $destination ); + exec( 'mv ' . $source . '/.* ' . $destination ); + exec( "rm -rf $source" ); } } @@ -653,56 +653,56 @@ public function extract(string $namespace): array /** * Uploads a module */ - public function upload(UploadedFile $file): array + public function upload( UploadedFile $file ): array { $this->checkManagementStatus(); - $path = $file->store('', [ 'disk' => 'ns-modules-temp' ]); + $path = $file->store( '', [ 'disk' => 'ns-modules-temp' ] ); - $fileInfo = pathinfo($file->getClientOriginalName()); - $fullPath = Storage::disk('ns-modules-temp')->path($path); + $fileInfo = pathinfo( $file->getClientOriginalName() ); + $fullPath = Storage::disk( 'ns-modules-temp' )->path( $path ); $extractionFolderName = Str::uuid(); - $dir = dirname($fullPath); + $dir = dirname( $fullPath ); $archive = new \ZipArchive; - $archive->open($fullPath); - $archive->extractTo($dir . DIRECTORY_SEPARATOR . $extractionFolderName); + $archive->open( $fullPath ); + $archive->extractTo( $dir . DIRECTORY_SEPARATOR . $extractionFolderName ); $archive->close(); /** * Unlink the uploaded zipfile */ - unlink($fullPath); + unlink( $fullPath ); - $directory = Storage::disk('ns-modules-temp')->directories($extractionFolderName); + $directory = Storage::disk( 'ns-modules-temp' )->directories( $extractionFolderName ); - if (count($directory) > 1) { - throw new Exception(__('Unable to detect the folder from where to perform the installation.')); + if ( count( $directory ) > 1 ) { + throw new Exception( __( 'Unable to detect the folder from where to perform the installation.' ) ); } - $directoryName = pathinfo($directory[0])[ 'basename' ]; - $rawFiles = Storage::disk('ns-modules-temp')->allFiles($extractionFolderName); + $directoryName = pathinfo( $directory[0] )[ 'basename' ]; + $rawFiles = Storage::disk( 'ns-modules-temp' )->allFiles( $extractionFolderName ); $module = []; /** * Just retrieve the files name */ - $files = array_map(function ($file) { - $info = pathinfo($file); + $files = array_map( function ( $file ) { + $info = pathinfo( $file ); return $info[ 'basename' ]; - }, $rawFiles); + }, $rawFiles ); - if (in_array('config.xml', $files)) { + if ( in_array( 'config.xml', $files ) ) { $file = $extractionFolderName . DIRECTORY_SEPARATOR . $directoryName . DIRECTORY_SEPARATOR . 'config.xml'; $xml = new \SimpleXMLElement( - Storage::disk('ns-modules-temp')->get($file) + Storage::disk( 'ns-modules-temp' )->get( $file ) ); if ( - ! isset($xml->namespace) || - ! isset($xml->version) || - ! isset($xml->name) || + ! isset( $xml->namespace ) || + ! isset( $xml->version ) || + ! isset( $xml->name ) || $xml->getName() != 'module' ) { /** @@ -712,19 +712,19 @@ public function upload(UploadedFile $file): array return [ 'status' => 'failed', - 'message' => __('Invalid Module provided.'), + 'message' => __( 'Invalid Module provided.' ), ]; } - $moduleNamespace = ucwords($xml->namespace); - $moduleVersion = ucwords($xml->version); + $moduleNamespace = ucwords( $xml->namespace ); + $moduleVersion = ucwords( $xml->version ); /** * Check if a similar module already exists * and if the new module is outdated */ - if ($module = $this->get($moduleNamespace)) { - if (version_compare($module[ 'version' ], $moduleVersion, '>=')) { + if ( $module = $this->get( $moduleNamespace ) ) { + if ( version_compare( $module[ 'version' ], $moduleVersion, '>=' ) ) { /** * We're dealing with old module */ @@ -732,7 +732,7 @@ public function upload(UploadedFile $file): array return [ 'status' => 'danger', - 'message' => __('Unable to upload this module as it\'s older than the version installed'), + 'message' => __( 'Unable to upload this module as it\'s older than the version installed' ), 'module' => $module, ]; } @@ -742,28 +742,28 @@ public function upload(UploadedFile $file): array * folder if that folder exists * to avoid keeping unused files. */ - Storage::disk('ns-modules')->deleteDirectory($moduleNamespace); + Storage::disk( 'ns-modules' )->deleteDirectory( $moduleNamespace ); } /** * @step 1 : creating host folder * No errors has been found, We\'ll install the module then */ - Storage::disk('ns-modules')->makeDirectory($moduleNamespace, 0755, true); + Storage::disk( 'ns-modules' )->makeDirectory( $moduleNamespace, 0755, true ); /** * @step 2 : move files * We're now looping to move files * and create symlink for the assets */ - foreach ($rawFiles as $file) { + foreach ( $rawFiles as $file ) { $search = $extractionFolderName . '/' . $directoryName . '/'; $replacement = $moduleNamespace . DIRECTORY_SEPARATOR; - $final = str_replace($search, $replacement, $file); + $final = str_replace( $search, $replacement, $file ); - Storage::disk('ns-modules')->put( + Storage::disk( 'ns-modules' )->put( $final, - Storage::disk('ns-modules-temp')->get($file) + Storage::disk( 'ns-modules-temp' )->get( $file ) ); } @@ -773,13 +773,13 @@ public function upload(UploadedFile $file): array * @todo consider clearing the cache for this module * whenever an operation changes the module files (update, delete). */ - Cache::forget(self::CACHE_MIGRATION_LABEL . $moduleNamespace); + Cache::forget( self::CACHE_MIGRATION_LABEL . $moduleNamespace ); /** * create a symlink directory * only if the module has that folder */ - $this->createSymLink($moduleNamespace); + $this->createSymLink( $moduleNamespace ); /** * We needs to load all modules, to ensure @@ -791,15 +791,15 @@ public function upload(UploadedFile $file): array * @step 3 : run migrations * check if the module has a migration */ - $this->runAllMigration($moduleNamespace); + $this->runAllMigration( $moduleNamespace ); - $module = $this->get($moduleNamespace); + $module = $this->get( $moduleNamespace ); $this->clearTemporaryFiles(); return [ 'status' => 'success', - 'message' => sprintf(__('The module was "%s" was successfully installed.'), $module[ 'name' ]), + 'message' => sprintf( __( 'The module was "%s" was successfully installed.' ), $module[ 'name' ] ), ]; } else { /** @@ -809,7 +809,7 @@ public function upload(UploadedFile $file): array return [ 'status' => 'danger', - 'message' => __('The uploaded file is not a valid module.'), + 'message' => __( 'The uploaded file is not a valid module.' ), ]; } } @@ -818,12 +818,12 @@ public function upload(UploadedFile $file): array * Creates a symbolic link to the asset directory * for specific module. */ - public function createSymLink(string $moduleNamespace): void + public function createSymLink( string $moduleNamespace ): void { $this->checkManagementStatus(); - if (! is_dir(base_path('public/modules'))) { - Storage::disk('public')->makeDirectory('modules', 0755, true); + if ( ! is_dir( base_path( 'public/modules' ) ) ) { + Storage::disk( 'public' )->makeDirectory( 'modules', 0755, true ); } /** @@ -831,18 +831,18 @@ public function createSymLink(string $moduleNamespace): void * link for that directory */ if ( - Storage::disk('ns-modules')->exists($moduleNamespace . DIRECTORY_SEPARATOR . 'Public') && - ! is_link(base_path('public') . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . strtolower($moduleNamespace)) + Storage::disk( 'ns-modules' )->exists( $moduleNamespace . DIRECTORY_SEPARATOR . 'Public' ) && + ! is_link( base_path( 'public' ) . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . strtolower( $moduleNamespace ) ) ) { - $target = base_path('modules/' . $moduleNamespace . '/Public'); + $target = base_path( 'modules/' . $moduleNamespace . '/Public' ); - if (! \windows_os()) { - $link = @\symlink($target, public_path('/modules/' . strtolower($moduleNamespace))); + if ( ! \windows_os() ) { + $link = @\symlink( $target, public_path( '/modules/' . strtolower( $moduleNamespace ) ) ); } else { $mode = 'J'; - $link = public_path('modules' . DIRECTORY_SEPARATOR . strtolower($moduleNamespace)); - $target = base_path('modules' . DIRECTORY_SEPARATOR . $moduleNamespace . DIRECTORY_SEPARATOR . 'Public'); - $link = exec("mklink /{$mode} \"{$link}\" \"{$target}\""); + $link = public_path( 'modules' . DIRECTORY_SEPARATOR . strtolower( $moduleNamespace ) ); + $target = base_path( 'modules' . DIRECTORY_SEPARATOR . $moduleNamespace . DIRECTORY_SEPARATOR . 'Public' ); + $link = exec( "mklink /{$mode} \"{$link}\" \"{$target}\"" ); } } @@ -851,18 +851,18 @@ public function createSymLink(string $moduleNamespace): void * link for that directory */ if ( - Storage::disk('ns-modules')->exists($moduleNamespace . DIRECTORY_SEPARATOR . 'Lang') && - ! is_link(base_path('public') . DIRECTORY_SEPARATOR . 'modules-lang' . DIRECTORY_SEPARATOR . strtolower($moduleNamespace)) + Storage::disk( 'ns-modules' )->exists( $moduleNamespace . DIRECTORY_SEPARATOR . 'Lang' ) && + ! is_link( base_path( 'public' ) . DIRECTORY_SEPARATOR . 'modules-lang' . DIRECTORY_SEPARATOR . strtolower( $moduleNamespace ) ) ) { - $target = base_path('modules/' . $moduleNamespace . '/Lang'); + $target = base_path( 'modules/' . $moduleNamespace . '/Lang' ); - if (! \windows_os()) { - $link = @\symlink($target, public_path('/modules-lang/' . strtolower($moduleNamespace))); + if ( ! \windows_os() ) { + $link = @\symlink( $target, public_path( '/modules-lang/' . strtolower( $moduleNamespace ) ) ); } else { $mode = 'J'; - $link = public_path('modules-lang' . DIRECTORY_SEPARATOR . strtolower($moduleNamespace)); - $target = base_path('modules' . DIRECTORY_SEPARATOR . $moduleNamespace . DIRECTORY_SEPARATOR . 'Lang'); - $link = exec("mklink /{$mode} \"{$link}\" \"{$target}\""); + $link = public_path( 'modules-lang' . DIRECTORY_SEPARATOR . strtolower( $moduleNamespace ) ); + $target = base_path( 'modules' . DIRECTORY_SEPARATOR . $moduleNamespace . DIRECTORY_SEPARATOR . 'Lang' ); + $link = exec( "mklink /{$mode} \"{$link}\" \"{$target}\"" ); } } } @@ -870,47 +870,47 @@ public function createSymLink(string $moduleNamespace): void /** * Removes a symbolic link created for a module using a namespace */ - public function removeSymLink(string $moduleNamespace): void + public function removeSymLink( string $moduleNamespace ): void { $this->checkManagementStatus(); - $path = base_path('public') . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . $moduleNamespace; + $path = base_path( 'public' ) . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . $moduleNamespace; - if (is_link($path)) { - unlink($path); + if ( is_link( $path ) ) { + unlink( $path ); } } /** * Checks a module migration */ - private function __runModuleMigration(string $moduleNamespace): array + private function __runModuleMigration( string $moduleNamespace ): array { /** * Load module since it has'nt yet been added to the * runtime */ - $this->load($moduleNamespace); + $this->load( $moduleNamespace ); /** * Get the module details */ - $module = $this->get($moduleNamespace); + $module = $this->get( $moduleNamespace ); /** * Run the first migration */ - $migrationFiles = $this->getMigrations($moduleNamespace); + $migrationFiles = $this->getMigrations( $moduleNamespace ); /** * Checks if migration files exists */ - if (count($migrationFiles) > 0) { - foreach ($migrationFiles as $file) { + if ( count( $migrationFiles ) > 0 ) { + foreach ( $migrationFiles as $file ) { /** * Looping each migration files */ - $this->__runSingleFile('up', $module, $file); + $this->__runSingleFile( 'up', $module, $file ); } } @@ -918,7 +918,7 @@ private function __runModuleMigration(string $moduleNamespace): array return [ 'status' => 'success', - 'message' => __('The module has been successfully installed.'), + 'message' => __( 'The module has been successfully installed.' ), ]; } @@ -927,54 +927,54 @@ private function __runModuleMigration(string $moduleNamespace): array */ public function clearTemporaryFiles(): void { - Artisan::call('ns:doctor', [ '--clear-modules-temp' => true ]); + Artisan::call( 'ns:doctor', [ '--clear-modules-temp' => true ] ); } /** * Deletes an existing module using the provided namespace */ - public function delete(string $namespace): array + public function delete( string $namespace ): array { $this->checkManagementStatus(); /** * Check if module exists first */ - if ($module = $this->get($namespace)) { + if ( $module = $this->get( $namespace ) ) { /** * Disable the module first */ - $this->disable($namespace); + $this->disable( $namespace ); - ModulesBeforeRemovedEvent::dispatch($module); + ModulesBeforeRemovedEvent::dispatch( $module ); /** * We revert all migrations made by the modules. */ - $this->revertMigrations($module); + $this->revertMigrations( $module ); /** * Delete module from filesystem. */ - Storage::disk('ns-modules')->deleteDirectory(ucwords($namespace)); + Storage::disk( 'ns-modules' )->deleteDirectory( ucwords( $namespace ) ); /** * remove symlink if that exists */ - $this->removeSymLink($namespace); + $this->removeSymLink( $namespace ); /** * unset the module from the * array "modules" */ - unset($this->modules[ $namespace ]); + unset( $this->modules[ $namespace ] ); - ModulesAfterRemovedEvent::dispatch($module); + ModulesAfterRemovedEvent::dispatch( $module ); return [ 'status' => 'success', 'code' => 'module_deleted', - 'message' => sprintf(__('The modules "%s" was deleted successfully.'), $module[ 'name' ]), + 'message' => sprintf( __( 'The modules "%s" was deleted successfully.' ), $module[ 'name' ] ), 'module' => $module, ]; } @@ -984,7 +984,7 @@ public function delete(string $namespace): array */ return [ 'status' => 'danger', - 'message' => sprintf(__('Unable to locate a module having as identifier "%s".'), $namespace), + 'message' => sprintf( __( 'Unable to locate a module having as identifier "%s".' ), $namespace ), 'code' => 'unknow_module', ]; } @@ -993,34 +993,34 @@ public function delete(string $namespace): array * Reverts the migrations * for a specific module */ - public function revertMigrations(array $module, $only = []): void + public function revertMigrations( array $module, $only = [] ): void { /** * Run down method for all migrations */ - $migrationFiles = Storage::disk('ns-modules')->allFiles( + $migrationFiles = Storage::disk( 'ns-modules' )->allFiles( $module[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Migrations' . DIRECTORY_SEPARATOR ); - $migrationFiles = $this->getAllValidFiles($migrationFiles); + $migrationFiles = $this->getAllValidFiles( $migrationFiles ); /** * If we would like to revert specific * migration, we'll use the $only argument */ - if (! empty($only)) { - $migrationFiles = collect($migrationFiles)->filter(function ($file) use ($only) { - return in_array($file, $only); - })->toArray(); + if ( ! empty( $only ) ) { + $migrationFiles = collect( $migrationFiles )->filter( function ( $file ) use ( $only ) { + return in_array( $file, $only ); + } )->toArray(); } /** * Checks if migration files exists * so that we can "down" all migrations */ - if ($migrationFiles) { - foreach ($migrationFiles as $file) { - $this->__runSingleFile('down', $module[ 'namespace' ], $file); + if ( $migrationFiles ) { + foreach ( $migrationFiles as $file ) { + $this->__runSingleFile( 'down', $module[ 'namespace' ], $file ); } } } @@ -1028,20 +1028,20 @@ public function revertMigrations(array $module, $only = []): void /** * Runs a single file */ - private function __runSingleFile(string $method, string $namespace, string $file): array + private function __runSingleFile( string $method, string $namespace, string $file ): array { /** * include initial migration files */ - $filePath = base_path('modules') . DIRECTORY_SEPARATOR . $file; - $fileInfo = pathinfo($filePath); + $filePath = base_path( 'modules' ) . DIRECTORY_SEPARATOR . $file; + $fileInfo = pathinfo( $filePath ); $fileName = $fileInfo[ 'filename' ]; - $className = str_replace(' ', '', ucwords(str_replace('_', ' ', $fileName))); - $className = 'Modules\\' . ucwords($namespace) . '\Migrations\\' . $className; + $className = str_replace( ' ', '', ucwords( str_replace( '_', ' ', $fileName ) ) ); + $className = 'Modules\\' . ucwords( $namespace ) . '\Migrations\\' . $className; - if (is_file($filePath)) { - if (class_exists($className)) { - return $this->triggerClass($className, $method); + if ( is_file( $filePath ) ) { + if ( class_exists( $className ) ) { + return $this->triggerClass( $className, $method ); } else { /** * Includes the migration file which might returns an anonymous @@ -1049,26 +1049,26 @@ private function __runSingleFile(string $method, string $namespace, string $file */ $object = require $filePath; - if (is_object($object)) { - return $this->triggerObject($object, $method); + if ( is_object( $object ) ) { + return $this->triggerObject( $object, $method ); } else { - return $this->triggerClass($className, $method); + return $this->triggerClass( $className, $method ); } } return [ 'status' => 'failed', - 'message' => sprintf(__('The migration file doens\'t have a valid class name. Expected class : %s'), $className), + 'message' => sprintf( __( 'The migration file doens\'t have a valid class name. Expected class : %s' ), $className ), ]; } return [ 'status' => 'failed', - 'message' => sprintf(__('Unable to locate the following file : %s'), $filePath), + 'message' => sprintf( __( 'Unable to locate the following file : %s' ), $filePath ), ]; } - public function triggerObject($object, $method) + public function triggerObject( $object, $method ) { /** * In case the migration file is an anonymous class, @@ -1078,14 +1078,14 @@ public function triggerObject($object, $method) return [ 'status' => 'success', - 'message' => __('The migration run successfully.'), + 'message' => __( 'The migration run successfully.' ), 'data' => [ 'object' => $object, ], ]; } - public function triggerClass($className, $method) + public function triggerClass( $className, $method ) { /** * Create Object @@ -1097,10 +1097,10 @@ public function triggerClass($className, $method) * "up" or "down" and watch for * any error. */ - if (! method_exists($object, $method)) { + if ( ! method_exists( $object, $method ) ) { return [ 'status' => 'failed', - 'message' => sprintf(__('The migration file doens\'t have a valid method name. Expected method : %s'), $method), + 'message' => sprintf( __( 'The migration file doens\'t have a valid method name. Expected method : %s' ), $method ), ]; } @@ -1108,7 +1108,7 @@ public function triggerClass($className, $method) return [ 'status' => 'success', - 'message' => __('The migration run successfully.'), + 'message' => __( 'The migration run successfully.' ), 'data' => [ 'object' => $object, 'className' => $className, @@ -1119,41 +1119,41 @@ public function triggerClass($className, $method) /** * Enables module using a provided namespace */ - public function enable(string $namespace): array | JsonResponse + public function enable( string $namespace ): array|JsonResponse { $this->checkManagementStatus(); - if ($module = $this->get($namespace)) { + if ( $module = $this->get( $namespace ) ) { /** * get all the modules that are * enabled. */ - $enabledModules = $this->options->get('enabled_modules', []); + $enabledModules = $this->options->get( 'enabled_modules', [] ); - ModulesBeforeEnabledEvent::dispatch($module); + ModulesBeforeEnabledEvent::dispatch( $module ); /** * @todo we might need to check if this module * has dependencies that are missing. */ try { - $this->dependenciesCheck($module); - } catch (MissingDependencyException $exception) { - if ($exception instanceof MissingDependencyException) { - if (count($module[ 'requires' ]) === 1) { + $this->dependenciesCheck( $module ); + } catch ( MissingDependencyException $exception ) { + if ( $exception instanceof MissingDependencyException ) { + if ( count( $module[ 'requires' ] ) === 1 ) { throw new MissingDependencyException( sprintf( - __('The module %s cannot be enabled as his dependency (%s) is missing or not enabled.'), + __( 'The module %s cannot be enabled as his dependency (%s) is missing or not enabled.' ), $module[ 'name' ], - collect($module[ 'requires' ])->map(fn($dep) => $dep[ 'name' ])->join(', ') + collect( $module[ 'requires' ] )->map( fn( $dep ) => $dep[ 'name' ] )->join( ', ' ) ) ); } else { throw new MissingDependencyException( sprintf( - __('The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.'), + __( 'The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.' ), $module[ 'name' ], - collect($module[ 'requires' ])->map(fn($dep) => $dep[ 'name' ])->join(', ') + collect( $module[ 'requires' ] )->map( fn( $dep ) => $dep[ 'name' ] )->join( ', ' ) ) ); } @@ -1164,72 +1164,72 @@ public function enable(string $namespace): array | JsonResponse * Let's check if the main entry file doesn't have an error */ try { - $code = file_get_contents($module[ 'index-file' ]); - $parser = ( new ParserFactory )->create(ParserFactory::PREFER_PHP7); - $parser->parse($code); - - foreach ($module[ 'providers' ] as $provider) { - $code = file_get_contents(base_path('modules') . DIRECTORY_SEPARATOR . $provider); - $parser = ( new ParserFactory )->create(ParserFactory::PREFER_PHP7); - $parser->parse($code); + $code = file_get_contents( $module[ 'index-file' ] ); + $parser = ( new ParserFactory )->create( ParserFactory::PREFER_PHP7 ); + $parser->parse( $code ); + + foreach ( $module[ 'providers' ] as $provider ) { + $code = file_get_contents( base_path( 'modules' ) . DIRECTORY_SEPARATOR . $provider ); + $parser = ( new ParserFactory )->create( ParserFactory::PREFER_PHP7 ); + $parser->parse( $code ); } - } catch (Error $error) { - return response()->json([ + } catch ( Error $error ) { + return response()->json( [ 'status' => 'failed', 'message' => sprintf( - __('An Error Occurred "%s": %s'), + __( 'An Error Occurred "%s": %s' ), $module[ 'name' ], $error->getMessage(), ), 'module' => $module, - ], 502); + ], 502 ); } try { /** * We're now atempting to trigger the module. */ - $this->__boot($module); - $this->triggerServiceProviders($module, 'register', ServiceProvider::class); - $this->triggerServiceProviders($module, 'boot', ServiceProvider::class); - } catch (GlobalError $error) { - return response()->json([ + $this->__boot( $module ); + $this->triggerServiceProviders( $module, 'register', ServiceProvider::class ); + $this->triggerServiceProviders( $module, 'boot', ServiceProvider::class ); + } catch ( GlobalError $error ) { + return response()->json( [ 'status' => 'failed', 'message' => sprintf( - __('An Error Occurred "%s": %s'), + __( 'An Error Occurred "%s": %s' ), $module[ 'name' ], $error->getMessage(), $error->getFile(), ), 'module' => $module, - ], 502); + ], 502 ); } /** * We'll enable the module and make sure it's stored * on the option table only once. */ - if (! in_array($namespace, $enabledModules)) { + if ( ! in_array( $namespace, $enabledModules ) ) { $enabledModules[] = $namespace; - $this->options->set('enabled_modules', $enabledModules); + $this->options->set( 'enabled_modules', $enabledModules ); } /** * we might recreate the symlink directory * for the module that is about to be enabled */ - $this->createSymLink($namespace); + $this->createSymLink( $namespace ); - ModulesAfterEnabledEvent::dispatch($module); - Artisan::call('cache:clear'); + ModulesAfterEnabledEvent::dispatch( $module ); + Artisan::call( 'cache:clear' ); return [ 'status' => 'success', - 'message' => __('The module has correctly been enabled.'), + 'message' => __( 'The module has correctly been enabled.' ), 'data' => [ 'code' => 'module_enabled', 'module' => $module, - 'migrations' => $this->getMigrations($module[ 'namespace' ]), + 'migrations' => $this->getMigrations( $module[ 'namespace' ] ), ], ]; } @@ -1237,38 +1237,38 @@ public function enable(string $namespace): array | JsonResponse return [ 'status' => 'warning', 'code' => 'unknow_module', - 'message' => __('Unable to enable the module.'), + 'message' => __( 'Unable to enable the module.' ), ]; } /** * Disables Module using a provided namespace */ - public function disable(string $namespace): array + public function disable( string $namespace ): array { $this->checkManagementStatus(); // check if module exists - if ($module = $this->get($namespace)) { - ModulesBeforeDisabledEvent::dispatch($module); + if ( $module = $this->get( $namespace ) ) { + ModulesBeforeDisabledEvent::dispatch( $module ); // @todo sandbox to test if the module runs - $enabledModules = $this->options->get('enabled_modules', []); - $indexToRemove = array_search($namespace, $enabledModules); + $enabledModules = $this->options->get( 'enabled_modules', [] ); + $indexToRemove = array_search( $namespace, $enabledModules ); // if module is found - if ($indexToRemove !== false) { - unset($enabledModules[ $indexToRemove ]); + if ( $indexToRemove !== false ) { + unset( $enabledModules[ $indexToRemove ] ); } - $this->options->set('enabled_modules', $enabledModules); + $this->options->set( 'enabled_modules', $enabledModules ); - ModulesAfterDisabledEvent::dispatch($module); + ModulesAfterDisabledEvent::dispatch( $module ); return [ 'status' => 'success', 'code' => 'module_disabled', - 'message' => __('The Module has been disabled.'), + 'message' => __( 'The Module has been disabled.' ), 'module' => $module, ]; } @@ -1276,41 +1276,41 @@ public function disable(string $namespace): array return [ 'status' => 'danger', 'code' => 'unknow_module', - 'message' => __('Unable to disable the module.'), + 'message' => __( 'Unable to disable the module.' ), ]; } /** * Returns an array with the module migrations. */ - public function getMigrations(string $namespace): array + public function getMigrations( string $namespace ): array { - $module = $this->get($namespace); + $module = $this->get( $namespace ); - if ($module) { - return $this->__getModuleMigration($module); + if ( $module ) { + return $this->__getModuleMigration( $module ); } return []; } - public function getAllMigrations(array $module): array + public function getAllMigrations( array $module ): array { - $migrations = Storage::disk('ns-modules') - ->allFiles(ucwords($module[ 'namespace' ]) . DIRECTORY_SEPARATOR . 'Migrations' . DIRECTORY_SEPARATOR); + $migrations = Storage::disk( 'ns-modules' ) + ->allFiles( ucwords( $module[ 'namespace' ] ) . DIRECTORY_SEPARATOR . 'Migrations' . DIRECTORY_SEPARATOR ); - return $this->getAllValidFiles($migrations); + return $this->getAllValidFiles( $migrations ); } /** * Returns the module migrations files * that has already been migrated. */ - public function getModuleAlreadyMigratedFiles(array $module): array + public function getModuleAlreadyMigratedFiles( array $module ): array { - return ModuleMigration::namespace($module[ 'namespace' ]) + return ModuleMigration::namespace( $module[ 'namespace' ] ) ->get() - ->map(fn($migration) => $migration->file) + ->map( fn( $migration ) => $migration->file ) ->values() ->toArray(); } @@ -1319,35 +1319,35 @@ public function getModuleAlreadyMigratedFiles(array $module): array * Returns the migration without * having the modules array built. */ - private function __getModuleMigration(array $module, bool $cache = true): array + private function __getModuleMigration( array $module, bool $cache = true ): array { /** * If the last migration is not defined * that means we're running it for the first time * we'll set the migration to 0.0 then. */ - $migratedFiles = $cache === true ? Cache::remember(self::CACHE_MIGRATION_LABEL . $module[ 'namespace' ], 3600 * 24, function () use ($module) { - return $this->getModuleAlreadyMigratedFiles($module); - }) : $this->getModuleAlreadyMigratedFiles($module); + $migratedFiles = $cache === true ? Cache::remember( self::CACHE_MIGRATION_LABEL . $module[ 'namespace' ], 3600 * 24, function () use ( $module ) { + return $this->getModuleAlreadyMigratedFiles( $module ); + } ) : $this->getModuleAlreadyMigratedFiles( $module ); - return $this->getModuleUnmigratedFiles($module, $migratedFiles); + return $this->getModuleUnmigratedFiles( $module, $migratedFiles ); } /** * Returns all migrations file that hasn't * yet been runned for a specific module */ - public function getModuleUnmigratedFiles(array $module, array $migratedFiles): array + public function getModuleUnmigratedFiles( array $module, array $migratedFiles ): array { - $files = $this->getAllModuleMigrationFiles($module); + $files = $this->getAllModuleMigrationFiles( $module ); $unmigratedFiles = []; - foreach ($files as $file) { + foreach ( $files as $file ) { /** * the last version should be lower than the looped versions * the current version should greather or equal to the looped versions */ - if (! in_array($file, $migratedFiles)) { + if ( ! in_array( $file, $migratedFiles ) ) { $unmigratedFiles[] = $file; } } @@ -1356,7 +1356,7 @@ public function getModuleUnmigratedFiles(array $module, array $migratedFiles): a * sort migration so files starting with "Create..." are executed * first to avoid updating missing tables. */ - sort($unmigratedFiles); + sort( $unmigratedFiles ); return $unmigratedFiles; } @@ -1365,23 +1365,23 @@ public function getModuleUnmigratedFiles(array $module, array $migratedFiles): a * Returns all the migration defined * for a specific module */ - public function getAllModuleMigrationFiles(array $module): array + public function getAllModuleMigrationFiles( array $module ): array { - $migrationDirectory = ucwords($module[ 'namespace' ]) . DIRECTORY_SEPARATOR . 'Migrations' . DIRECTORY_SEPARATOR; - $files = Storage::disk('ns-modules')->allFiles($migrationDirectory); - $files = $this->getAllValidFiles($files); + $migrationDirectory = ucwords( $module[ 'namespace' ] ) . DIRECTORY_SEPARATOR . 'Migrations' . DIRECTORY_SEPARATOR; + $files = Storage::disk( 'ns-modules' )->allFiles( $migrationDirectory ); + $files = $this->getAllValidFiles( $files ); - return collect($files)->filter(function ($file) { + return collect( $files )->filter( function ( $file ) { /** * we need to resolve the files and make sure it doesn't have any * dependency on a module. For example, we might want a migration from our module to * be counted as a migration only if another module exists and is enabled. */ - $migration = $this->resolveRelativePathToClass($file); + $migration = $this->resolveRelativePathToClass( $file ); - if (class_exists($migration) && defined($migration . '::DEPENDENCIES')) { - foreach ($migration::DEPENDENCIES as $dependency) { - if (! $this->getIfEnabled($dependency)) { + if ( class_exists( $migration ) && defined( $migration . '::DEPENDENCIES' ) ) { + foreach ( $migration::DEPENDENCIES as $dependency ) { + if ( ! $this->getIfEnabled( $dependency ) ) { return false; } } @@ -1389,30 +1389,30 @@ public function getAllModuleMigrationFiles(array $module): array return true; - })->toArray(); + } )->toArray(); } /** * Returns files which extension matches * the extensions provided. */ - private function getAllValidFiles(array $files, $extensions = [ 'php' ]): array + private function getAllValidFiles( array $files, $extensions = [ 'php' ] ): array { /** * We only want to restrict file * that has the ".php" extension. */ - return collect($files)->filter(function ($file) use ($extensions) { - $details = pathinfo($file); + return collect( $files )->filter( function ( $file ) use ( $extensions ) { + $details = pathinfo( $file ); - return isset($details[ 'extension' ]) && in_array($details[ 'extension' ], $extensions); - })->toArray(); + return isset( $details[ 'extension' ] ) && in_array( $details[ 'extension' ], $extensions ); + } )->toArray(); } /** * Executes module migration. */ - public function runMigration(string $namespace, string $file) + public function runMigration( string $namespace, string $file ) { $result = $this->__runSingleFile( method: 'up', @@ -1424,12 +1424,12 @@ public function runMigration(string $namespace, string $file) * save the migration only * if it's successful */ - $migration = ModuleMigration::where([ + $migration = ModuleMigration::where( [ 'file' => $file, 'namespace' => $namespace, - ]); + ] ); - if ($result[ 'status' ] === 'success' && ! $migration instanceof ModuleMigration) { + if ( $result[ 'status' ] === 'success' && ! $migration instanceof ModuleMigration ) { $migration = new ModuleMigration; $migration->namespace = $namespace; $migration->file = $file; @@ -1438,7 +1438,7 @@ public function runMigration(string $namespace, string $file) /** * clear the cache to avoid update loop */ - Cache::forget(self::CACHE_MIGRATION_LABEL . $namespace); + Cache::forget( self::CACHE_MIGRATION_LABEL . $namespace ); } return $result; @@ -1447,42 +1447,42 @@ public function runMigration(string $namespace, string $file) /** * Executes all module migrations files. */ - public function runAllMigration(string $namespace): array + public function runAllMigration( string $namespace ): array { - $migrations = $this->getMigrations($namespace); + $migrations = $this->getMigrations( $namespace ); - if ($migrations && is_array($migrations)) { - foreach ($migrations as $file) { - $this->runMigration($namespace, $file); + if ( $migrations && is_array( $migrations ) ) { + foreach ( $migrations as $file ) { + $this->runMigration( $namespace, $file ); } } return [ 'status' => 'success', - 'message' => __('All migration were executed.'), + 'message' => __( 'All migration were executed.' ), ]; } /** * Drop Module Migration */ - public function dropMigration(string $namespace, string $file): array + public function dropMigration( string $namespace, string $file ): array { - $module = $this->get($namespace); + $module = $this->get( $namespace ); - return $this->__runSingleFile('down', $module, $file); + return $this->__runSingleFile( 'down', $module, $file ); } /** * Drop All Migration */ - public function dropAllMigrations(string $namespace): void + public function dropAllMigrations( string $namespace ): void { - $migrations = $this->getAllMigrations($this->get($namespace)); + $migrations = $this->getAllMigrations( $this->get( $namespace ) ); - if (! empty($migrations)) { - foreach ($migrations as $file) { - $this->dropMigration($namespace, $file); + if ( ! empty( $migrations ) ) { + foreach ( $migrations as $file ) { + $this->dropMigration( $namespace, $file ); } } } @@ -1493,8 +1493,8 @@ public function dropAllMigrations(string $namespace): void */ public function checkManagementStatus(): void { - if (env('NS_LOCK_MODULES', false)) { - throw new NotAllowedException(__('Unable to proceed, the modules management is disabled.')); + if ( env( 'NS_LOCK_MODULES', false ) ) { + throw new NotAllowedException( __( 'Unable to proceed, the modules management is disabled.' ) ); } } @@ -1502,78 +1502,78 @@ public function checkManagementStatus(): void * Generate a modules using the * configuration provided */ - public function generateModule(array $config): array + public function generateModule( array $config ): array { if ( - ! $this->get($config[ 'namespace' ]) || - (isset($config[ 'force' ]) && $this->get($config[ 'namespace' ]) && $config[ 'force' ]) + ! $this->get( $config[ 'namespace' ] ) || + ( isset( $config[ 'force' ] ) && $this->get( $config[ 'namespace' ] ) && $config[ 'force' ] ) ) { /** * If we decide to overwrite the module * we might then consider deleting that already exists */ - $folderExists = Storage::disk('ns-modules')->exists($config[ 'namespace' ]); - $deleteExisting = isset($config[ 'force' ]) && $config[ 'force' ]; + $folderExists = Storage::disk( 'ns-modules' )->exists( $config[ 'namespace' ] ); + $deleteExisting = isset( $config[ 'force' ] ) && $config[ 'force' ]; - if ($folderExists && $deleteExisting) { - Storage::disk('ns-modules')->deleteDirectory($config[ 'namespace' ]); + if ( $folderExists && $deleteExisting ) { + Storage::disk( 'ns-modules' )->deleteDirectory( $config[ 'namespace' ] ); } - Storage::disk('ns-modules')->makeDirectory($config[ 'namespace' ], 0755, true); + Storage::disk( 'ns-modules' )->makeDirectory( $config[ 'namespace' ], 0755, true ); /** * Geneate Internal Directories */ - foreach ([ 'Config', 'Crud', 'Events', 'Mails', 'Fields', 'Facades', 'Http', 'Migrations', 'Resources', 'Routes', 'Models', 'Providers', 'Services', 'Public' ] as $folder) { - Storage::disk('ns-modules')->makeDirectory($config[ 'namespace' ] . DIRECTORY_SEPARATOR . $folder, 0755, true); + foreach ( [ 'Config', 'Crud', 'Events', 'Mails', 'Fields', 'Facades', 'Http', 'Migrations', 'Resources', 'Routes', 'Models', 'Providers', 'Services', 'Public' ] as $folder ) { + Storage::disk( 'ns-modules' )->makeDirectory( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . $folder, 0755, true ); } /** * Generate Sub Folders */ - Storage::disk('ns-modules')->makeDirectory($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Http' . DIRECTORY_SEPARATOR . 'Controllers', 0755, true); - Storage::disk('ns-modules')->makeDirectory($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Migrations', 0755, true); - Storage::disk('ns-modules')->makeDirectory($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Resources' . DIRECTORY_SEPARATOR . 'Views', 0755, true); + Storage::disk( 'ns-modules' )->makeDirectory( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Http' . DIRECTORY_SEPARATOR . 'Controllers', 0755, true ); + Storage::disk( 'ns-modules' )->makeDirectory( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Migrations', 0755, true ); + Storage::disk( 'ns-modules' )->makeDirectory( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Resources' . DIRECTORY_SEPARATOR . 'Views', 0755, true ); /** * Generate Files */ - Storage::disk('ns-modules')->put($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'config.xml', $this->streamContent('config', $config)); - Storage::disk('ns-modules')->put($config[ 'namespace' ] . DIRECTORY_SEPARATOR . $config[ 'namespace' ] . 'Module.php', $this->streamContent('main', $config)); - Storage::disk('ns-modules')->put($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Events' . DIRECTORY_SEPARATOR . $config[ 'namespace' ] . 'Event.php', $this->streamContent('event', $config)); - Storage::disk('ns-modules')->put($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Public' . DIRECTORY_SEPARATOR . 'index.html', '

Silence is golden !

'); - Storage::disk('ns-modules')->put($config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Migrations' . DIRECTORY_SEPARATOR . 'DatabaseMigration.php', View::make('generate.modules.migration', [ + Storage::disk( 'ns-modules' )->put( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'config.xml', $this->streamContent( 'config', $config ) ); + Storage::disk( 'ns-modules' )->put( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . $config[ 'namespace' ] . 'Module.php', $this->streamContent( 'main', $config ) ); + Storage::disk( 'ns-modules' )->put( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Events' . DIRECTORY_SEPARATOR . $config[ 'namespace' ] . 'Event.php', $this->streamContent( 'event', $config ) ); + Storage::disk( 'ns-modules' )->put( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Public' . DIRECTORY_SEPARATOR . 'index.html', '

Silence is golden !

' ); + Storage::disk( 'ns-modules' )->put( $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Migrations' . DIRECTORY_SEPARATOR . 'DatabaseMigration.php', View::make( 'generate.modules.migration', [ 'module' => $config, 'migration' => 'DatabaseMigration', - ])->render()); + ] )->render() ); /** * Generate Module Public Folder * create a symbolink link to that directory */ - $target = base_path('modules/' . $config[ 'namespace' ] . '/Public'); + $target = base_path( 'modules/' . $config[ 'namespace' ] . '/Public' ); - if (! \windows_os()) { - Storage::disk('public')->makeDirectory('modules/' . $config[ 'namespace' ], 0755, true); + if ( ! \windows_os() ) { + Storage::disk( 'public' )->makeDirectory( 'modules/' . $config[ 'namespace' ], 0755, true ); - $linkPath = public_path('/modules/' . strtolower($config[ 'namespace' ])); + $linkPath = public_path( '/modules/' . strtolower( $config[ 'namespace' ] ) ); - if (! is_link($linkPath)) { - $link = \symlink($target, $linkPath); + if ( ! is_link( $linkPath ) ) { + $link = \symlink( $target, $linkPath ); } } else { $mode = 'J'; - $link = public_path('modules' . DIRECTORY_SEPARATOR . strtolower($config[ 'namespace' ])); - $target = base_path('modules' . DIRECTORY_SEPARATOR . $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Public'); - $link = exec("mklink /{$mode} \"{$link}\" \"{$target}\""); + $link = public_path( 'modules' . DIRECTORY_SEPARATOR . strtolower( $config[ 'namespace' ] ) ); + $target = base_path( 'modules' . DIRECTORY_SEPARATOR . $config[ 'namespace' ] . DIRECTORY_SEPARATOR . 'Public' ); + $link = exec( "mklink /{$mode} \"{$link}\" \"{$target}\"" ); } return [ 'status' => 'success', - 'message' => sprintf('Your new module "%s" has been created.', $config[ 'name' ]), + 'message' => sprintf( 'Your new module "%s" has been created.', $config[ 'name' ] ), ]; } else { - throw new NotAllowedException(__('A similar module has been found')); + throw new NotAllowedException( __( 'A similar module has been found' ) ); } } @@ -1582,24 +1582,24 @@ public function generateModule(array $config): array * * @return string content */ - public function streamContent(string $content, array $config): ViewView + public function streamContent( string $content, array $config ): ViewView { - switch ($content) { + switch ( $content ) { case 'main': - return view('generate.modules.main', [ + return view( 'generate.modules.main', [ 'module' => $config, - ]); + ] ); break; case 'config': - return view('generate.modules.config', [ + return view( 'generate.modules.config', [ 'module' => $config, - ]); + ] ); break; case 'event': - return view('generate.modules.event', [ + return view( 'generate.modules.event', [ 'module' => $config, 'name' => $config[ 'namespace' ] . 'Event', - ]); + ] ); break; } } diff --git a/app/Services/NotificationService.php b/app/Services/NotificationService.php index 435a401b9..345b4c2b4 100644 --- a/app/Services/NotificationService.php +++ b/app/Services/NotificationService.php @@ -33,13 +33,13 @@ class NotificationService /** * @param array $config [ 'title', 'url', 'identifier', 'source', 'dismissable', 'description' ] */ - public function create(string|array $title, string $description = '', string $url = '#', string $identifier = null, string $source = 'system', bool $dismissable = true) + public function create( string|array $title, string $description = '', string $url = '#', ?string $identifier = null, string $source = 'system', bool $dismissable = true ) { - if (is_array($title)) { - extract($title); + if ( is_array( $title ) ) { + extract( $title ); } - if ($description && $title) { + if ( $description && $title ) { $this->title = $title; $this->url = $url ?: '#'; $this->identifier = $identifier ?? $this->generateRandomIdentifier(); @@ -50,61 +50,61 @@ public function create(string|array $title, string $description = '', string $ur return $this; } - throw new Exception(__('Missing required parameters to create a notification')); + throw new Exception( __( 'Missing required parameters to create a notification' ) ); } /** * Will dispatch a notification for all the roles * that has permissions belonging to the parameter */ - public function dispatchForPermissions(array $permissions): void + public function dispatchForPermissions( array $permissions ): void { - $rolesGroups = collect($permissions) - ->map(fn($permissionName) => Permission::with('roles')->withNamespace($permissionName)) - ->filter(fn($permission) => $permission instanceof Permission) - ->map(fn($permission) => $permission->roles); + $rolesGroups = collect( $permissions ) + ->map( fn( $permissionName ) => Permission::with( 'roles' )->withNamespace( $permissionName ) ) + ->filter( fn( $permission ) => $permission instanceof Permission ) + ->map( fn( $permission ) => $permission->roles ); $uniqueRoles = []; - $rolesGroups->each(function ($group) use (&$uniqueRoles) { - foreach ($group as $role) { - if (! isset($uniqueRoles[ $role->namespace ])) { + $rolesGroups->each( function ( $group ) use ( &$uniqueRoles ) { + foreach ( $group as $role ) { + if ( ! isset( $uniqueRoles[ $role->namespace ] ) ) { $uniqueRoles[ $role->namespace ] = $role; } } - }); + } ); - if (empty($uniqueRoles)) { - Log::alert('A notification was dispatched for permissions that aren\'t assigned.', $permissions); + if ( empty( $uniqueRoles ) ) { + Log::alert( 'A notification was dispatched for permissions that aren\'t assigned.', $permissions ); } - $this->dispatchForGroup($uniqueRoles); + $this->dispatchForGroup( $uniqueRoles ); } /** * Dispatch notification for a specific * users which belong to a user group * - * @param Role $role + * @param Role $role * @return void */ - public function dispatchForGroup($role) + public function dispatchForGroup( $role ) { - if (is_array($role)) { - collect($role)->each(function ($role) { - $this->dispatchForGroup($role); - }); - } elseif ($role instanceof Collection) { - $role->each(function ($role) { - $this->dispatchForGroup($role); - }); - } elseif (is_string($role)) { - $roleInstance = Role::namespace($role); - $this->dispatchForGroup($roleInstance); + if ( is_array( $role ) ) { + collect( $role )->each( function ( $role ) { + $this->dispatchForGroup( $role ); + } ); + } elseif ( $role instanceof Collection ) { + $role->each( function ( $role ) { + $this->dispatchForGroup( $role ); + } ); + } elseif ( is_string( $role ) ) { + $roleInstance = Role::namespace( $role ); + $this->dispatchForGroup( $roleInstance ); } else { - $role->users->map(function ($user) { - $this->__makeNotificationFor($user); - }); + $role->users->map( function ( $user ) { + $this->__makeNotificationFor( $user ); + } ); } NotificationCreatedEvent::dispatch(); @@ -114,15 +114,15 @@ public function dispatchForGroup($role) * Dispatch notification for specific * groups using array of group namespace provided */ - public function dispatchForGroupNamespaces(array $namespaces) + public function dispatchForGroupNamespaces( array $namespaces ) { - $this->dispatchForGroup(Role::in($namespaces)->get()); + $this->dispatchForGroup( Role::in( $namespaces )->get() ); } - private function __makeNotificationFor($user) + private function __makeNotificationFor( $user ) { - $this->notification = Notification::identifiedBy($this->identifier) - ->for($user->id) + $this->notification = Notification::identifiedBy( $this->identifier ) + ->for( $user->id ) ->first(); /** @@ -130,7 +130,7 @@ private function __makeNotificationFor($user) * has already been issued for the user, we should avoid * issuing new notification. */ - if (! $this->notification instanceof Notification) { + if ( ! $this->notification instanceof Notification ) { $this->notification = new Notification; $this->notification->user_id = $user->id; $this->notification->title = $this->title; @@ -149,14 +149,14 @@ private function __makeNotificationFor($user) $this->notification->save(); } - NotificationDispatchedEvent::dispatch($this->notification); + NotificationDispatchedEvent::dispatch( $this->notification ); } - public function dispatchForUsers(Collection $users) + public function dispatchForUsers( Collection $users ) { - $users->map(function ($user) { - $this->__makeNotificationFor($user); - }); + $users->map( function ( $user ) { + $this->__makeNotificationFor( $user ); + } ); } /** @@ -165,39 +165,39 @@ public function dispatchForUsers(Collection $users) */ public function generateRandomIdentifier() { - $date = app()->make(DateService::class); + $date = app()->make( DateService::class ); - return 'notification-' . Str::random(10) . '-' . $date->format('d-m-y'); + return 'notification-' . Str::random( 10 ) . '-' . $date->format( 'd-m-y' ); } - public function deleteHavingIdentifier($identifier) + public function deleteHavingIdentifier( $identifier ) { - Notification::identifiedBy($identifier) + Notification::identifiedBy( $identifier ) ->get() - ->each(function ($notification) { - NotificationDeletedEvent::dispatch($notification); - $this->proceedDeleteNotification($notification); - }); + ->each( function ( $notification ) { + NotificationDeletedEvent::dispatch( $notification ); + $this->proceedDeleteNotification( $notification ); + } ); } - public function deleteSingleNotification($id) + public function deleteSingleNotification( $id ) { - $notification = Notification::find($id); + $notification = Notification::find( $id ); - NotificationDeletedEvent::dispatch($notification); + NotificationDeletedEvent::dispatch( $notification ); - $this->proceedDeleteNotification($notification); + $this->proceedDeleteNotification( $notification ); } - public function deleteNotificationsFor(User $user) + public function deleteNotificationsFor( User $user ) { - Notification::for($user->id) + Notification::for( $user->id ) ->get() - ->each(function ($notification) { - NotificationDeletedEvent::dispatch($notification); + ->each( function ( $notification ) { + NotificationDeletedEvent::dispatch( $notification ); - $this->proceedDeleteNotification($notification); - }); + $this->proceedDeleteNotification( $notification ); + } ); } /** @@ -205,9 +205,9 @@ public function deleteNotificationsFor(User $user) * * @return void */ - public function proceedDeleteNotification(Notification $notification) + public function proceedDeleteNotification( Notification $notification ) { - if (! env('NS_SOCKET_ENABLED', false)) { + if ( ! env( 'NS_SOCKET_ENABLED', false ) ) { $notification->delete(); } } diff --git a/app/Services/Options.php b/app/Services/Options.php index 0a598584f..c6b5c1300 100644 --- a/app/Services/Options.php +++ b/app/Services/Options.php @@ -39,7 +39,7 @@ public function __construct() * * @param array $options */ - public function setDefault($options = []): void + public function setDefault( $options = [] ): void { Option::truncate(); @@ -49,10 +49,10 @@ public function setDefault($options = []): void 'ns_pos_order_types' => [ 'takeaway', 'delivery' ], ]; - $options = array_merge($defaultOptions, $options); + $options = array_merge( $defaultOptions, $options ); - foreach ($options as $key => $value) { - $this->set($key, $value); + foreach ( $options as $key => $value ) { + $this->set( $key, $value ); } } @@ -63,7 +63,7 @@ public function setDefault($options = []): void */ public function option() { - return Option::where('user_id', null); + return Option::where( 'user_id', null ); } /** @@ -76,14 +76,14 @@ public function build() { $this->options = []; - if (Helper::installed() && empty($this->rawOptions)) { + if ( Helper::installed() && empty( $this->rawOptions ) ) { $this->rawOptions = $this->option() ->get() - ->mapWithKeys(function ($option) { + ->mapWithKeys( function ( $option ) { return [ $option->key => $option, ]; - }); + } ); } } @@ -95,18 +95,18 @@ public function build() * @param bool force set * @return void **/ - public function set($key, $value, $expiration = null) + public function set( $key, $value, $expiration = null ) { /** * if an option has been found, * it will save the new value and update * the option object. */ - $foundOption = collect($this->rawOptions)->map(function ($option, $index) use ($value, $key, $expiration) { - if ($key === $index) { + $foundOption = collect( $this->rawOptions )->map( function ( $option, $index ) use ( $value, $key, $expiration ) { + if ( $key === $index ) { $this->hasFound = true; - $this->encodeOptionValue($option, $value); + $this->encodeOptionValue( $option, $value ); $option->expire_on = $expiration; @@ -115,14 +115,14 @@ public function set($key, $value, $expiration = null) * from a user option or any * extending this class */ - $option = $this->beforeSave($option); + $option = $this->beforeSave( $option ); $option->save(); return $option; } return false; - }) + } ) ->filter(); /** @@ -130,12 +130,12 @@ public function set($key, $value, $expiration = null) * it will create a new Option model * and store with, then save it on the option model */ - if ($foundOption->isEmpty()) { + if ( $foundOption->isEmpty() ) { $option = new Option; - $option->key = trim(strtolower($key)); + $option->key = trim( strtolower( $key ) ); $option->array = false; - $this->encodeOptionValue($option, $value); + $this->encodeOptionValue( $option, $value ); $option->expire_on = $expiration; @@ -144,7 +144,7 @@ public function set($key, $value, $expiration = null) * from a user option or any * extending this class */ - $option = $this->beforeSave($option); + $option = $this->beforeSave( $option ); $option->save(); } else { $option = $foundOption->first(); @@ -161,12 +161,12 @@ public function set($key, $value, $expiration = null) /** * Encodes the value for the option before saving. */ - public function encodeOptionValue(Option $option, mixed $value): void + public function encodeOptionValue( Option $option, mixed $value ): void { - if (is_array($value)) { + if ( is_array( $value ) ) { $option->array = true; - $option->value = json_encode($value); - } elseif (empty($value) && ! (bool) preg_match('/[0-9]{1,}/', $value)) { + $option->value = json_encode( $value ); + } elseif ( empty( $value ) && ! (bool) preg_match( '/[0-9]{1,}/', $value ) ) { $option->value = ''; } else { $option->value = $value; @@ -176,13 +176,13 @@ public function encodeOptionValue(Option $option, mixed $value): void /** * Sanitizes values before storing on the database. */ - public function beforeSave(Option $option) + public function beforeSave( Option $option ) { /** * sanitizing input to remove * all script tags */ - $option->value = strip_tags($option->value); + $option->value = strip_tags( $option->value ); return $option; } @@ -190,48 +190,48 @@ public function beforeSave(Option $option) /** * Get options **/ - public function get(string $key = null, mixed $default = null) + public function get( ?string $key = null, mixed $default = null ) { - if ($key === null) { + if ( $key === null ) { return $this->rawOptions; } - $filtredOptions = collect($this->rawOptions)->filter(function ($option) use ($key) { - return is_array($key) ? in_array($option->key, $key) : $option->key === $key; - }); + $filtredOptions = collect( $this->rawOptions )->filter( function ( $option ) use ( $key ) { + return is_array( $key ) ? in_array( $option->key, $key ) : $option->key === $key; + } ); - $options = $filtredOptions->map(function ($option) { - $this->decodeOptionValue($option); + $options = $filtredOptions->map( function ( $option ) { + $this->decodeOptionValue( $option ); return $option; - }); + } ); - return match ($options->count()) { + return match ( $options->count() ) { 0 => $default, 1 => $options->first()->value, - default => $options->map(fn($option) => $option->value)->toArray() + default => $options->map( fn( $option ) => $option->value )->toArray() }; } - public function decodeOptionValue($option) + public function decodeOptionValue( $option ) { /** * We should'nt run this everytime we * try to pull an option from the database or from the array */ - if (! empty($option->value) && $option->isClean()) { - if (is_string($option->value) && $option->array) { - $json = json_decode($option->value, true); + if ( ! empty( $option->value ) && $option->isClean() ) { + if ( is_string( $option->value ) && $option->array ) { + $json = json_decode( $option->value, true ); - if (json_last_error() == JSON_ERROR_NONE) { + if ( json_last_error() == JSON_ERROR_NONE ) { $option->value = $json; } else { $option->value = null; } - } elseif (! $option->array) { - if (preg_match('/^[0-9]{1,}$/', $option->value)) { + } elseif ( ! $option->array ) { + if ( preg_match( '/^[0-9]{1,}$/', $option->value ) ) { $option->value = (int) $option->value; - } elseif (preg_match('/^[0-9]{1,}\.[0-9]{1,}$/', $option->value)) { + } elseif ( preg_match( '/^[0-9]{1,}\.[0-9]{1,}$/', $option->value ) ) { $option->value = (float) $option->value; } else { $option->value = $option->value; @@ -243,16 +243,16 @@ public function decodeOptionValue($option) /** * Delete an option using a specific key. **/ - public function delete(string $key): void + public function delete( string $key ): void { - $this->rawOptions = collect($this->rawOptions)->filter(function (Option $option) use ($key) { - if ($option->key === $key) { + $this->rawOptions = collect( $this->rawOptions )->filter( function ( Option $option ) use ( $key ) { + if ( $option->key === $key ) { $option->delete(); return false; } return true; - }); + } ); } } diff --git a/app/Services/OrdersService.php b/app/Services/OrdersService.php index 7a7d6cf58..ff1a05ee1 100644 --- a/app/Services/OrdersService.php +++ b/app/Services/OrdersService.php @@ -80,66 +80,66 @@ public function __construct( /** * Create an order on NexoPOS. * - * @param array $fields - * @param Order|null $order (optional) + * @param array $fields + * @param Order|null $order (optional) * @return array */ - public function create($fields, Order $order = null) + public function create( $fields, ?Order $order = null ) { $isNew = ! $order instanceof Order; - $customer = $this->__customerIsDefined($fields); - $fields[ 'products' ] = $this->__buildOrderProducts($fields['products']); + $customer = $this->__customerIsDefined( $fields ); + $fields[ 'products' ] = $this->__buildOrderProducts( $fields['products'] ); /** * determine the value of the product * on the cart and compare it along with the payment made. This will * help to prevent partial or quote orders * - * @param float $total - * @param float $totalPayments - * @param array $payments + * @param float $total + * @param float $totalPayments + * @param array $payments * @param string $paymentStatus */ - extract($this->__checkOrderPayments($fields, $order, $customer)); + extract( $this->__checkOrderPayments( $fields, $order, $customer ) ); /** * We'll now check the attached coupon * and determin whether they can be processed. */ - $this->__checkAttachedCoupons($fields); + $this->__checkAttachedCoupons( $fields ); /** * As no payment might be provided * we make sure to build the products only in case the * order is just saved as hold, otherwise a check is made on the available stock */ - if (in_array($paymentStatus, [ 'paid', 'partially_paid', 'unpaid' ])) { - $fields[ 'products' ] = $this->__checkProductStock($fields['products'], $order); + if ( in_array( $paymentStatus, [ 'paid', 'partially_paid', 'unpaid' ] ) ) { + $fields[ 'products' ] = $this->__checkProductStock( $fields['products'], $order ); } /** * check discount validity and throw an * error is something is not set correctly. */ - $this->__checkDiscountValidity($fields); + $this->__checkDiscountValidity( $fields ); /** * check delivery informations before * proceeding */ - $fields = $this->__checkAddressesInformations($fields); + $fields = $this->__checkAddressesInformations( $fields ); /** * Check if instalments are provided and if they are all * valid regarding the total order price */ - $this->__checkProvidedInstalments($fields); + $this->__checkProvidedInstalments( $fields ); /** * If any other module wants to perform a verification * and block processing, they might use this event. */ - OrderAfterCheckPerformedEvent::dispatch($fields, $order); + OrderAfterCheckPerformedEvent::dispatch( $fields, $order ); /** * ------------------------------------------ @@ -149,73 +149,73 @@ public function create($fields, Order $order = null) * modification. All verifications on current order * should be made prior this section */ - $order = $this->__initOrder($fields, $paymentStatus, $order); + $order = $this->__initOrder( $fields, $paymentStatus, $order ); /** * if we're editing an order. We need to loop the products in order * to recover all the products that has been deleted from the POS and therefore * aren't tracked no more. This also make stock adjustment for product which has changed. */ - $this->__deleteUntrackedProducts($order, $fields[ 'products' ]); + $this->__deleteUntrackedProducts( $order, $fields[ 'products' ] ); - $this->__saveAddressInformations($order, $fields); + $this->__saveAddressInformations( $order, $fields ); /** * if the order has a valid payment * method, then we can save that and attach it the ongoing order. */ - if (in_array($paymentStatus, [ + if ( in_array( $paymentStatus, [ Order::PAYMENT_PAID, Order::PAYMENT_PARTIALLY, Order::PAYMENT_UNPAID, - ])) { - $this->__saveOrderPayments($order, $payments, $customer); + ] ) ) { + $this->__saveOrderPayments( $order, $payments, $customer ); } /** * save order instalments */ - $this->__saveOrderInstalments($order, $fields[ 'instalments' ] ?? []); + $this->__saveOrderInstalments( $order, $fields[ 'instalments' ] ?? [] ); /** * save order coupons */ - $this->__saveOrderCoupons($order, $fields[ 'coupons' ] ?? []); + $this->__saveOrderCoupons( $order, $fields[ 'coupons' ] ?? [] ); /** * @var Order $order * @var float $taxes * @var float $subTotal */ - extract($this->__saveOrderProducts($order, $fields[ 'products' ])); + extract( $this->__saveOrderProducts( $order, $fields[ 'products' ] ) ); /** * register taxes for the order */ - $this->__registerTaxes($order, $fields[ 'taxes' ] ?? []); + $this->__registerTaxes( $order, $fields[ 'taxes' ] ?? [] ); /** * compute order total */ - $this->__computeOrderTotal(compact('order', 'subTotal', 'paymentStatus', 'totalPayments')); + $this->__computeOrderTotal( compact( 'order', 'subTotal', 'paymentStatus', 'totalPayments' ) ); $order->save(); - $order->load('payments'); - $order->load('products'); - $order->load('coupons'); + $order->load( 'payments' ); + $order->load( 'products' ); + $order->load( 'coupons' ); /** * let's notify when an * new order has been placed */ $isNew ? - event(new OrderAfterCreatedEvent($order, $fields)) : - event(new OrderAfterUpdatedEvent($order, $fields)); + event( new OrderAfterCreatedEvent( $order, $fields ) ) : + event( new OrderAfterUpdatedEvent( $order, $fields ) ); return [ 'status' => 'success', - 'message' => $isNew ? __('The order has been placed.') : __('The order has been updated'), - 'data' => compact('order'), + 'message' => $isNew ? __( 'The order has been placed.' ) : __( 'The order has been updated' ), + 'data' => compact( 'order' ), ]; } @@ -223,26 +223,26 @@ public function create($fields, Order $order = null) * Will save order installments if * it's provider * - * @param array $instalments + * @param array $instalments * @return void */ - public function __saveOrderInstalments(Order $order, $instalments = []) + public function __saveOrderInstalments( Order $order, $instalments = [] ) { - if (! empty($instalments)) { + if ( ! empty( $instalments ) ) { /** * delete previous instalments */ - $order->instalments->each(fn($instalment) => $instalment->delete()); + $order->instalments->each( fn( $instalment ) => $instalment->delete() ); $tracked = []; - foreach ($instalments as $instalment) { + foreach ( $instalments as $instalment ) { $newInstalment = new OrderInstalment; - if (isset($instalment[ 'paid' ]) && $instalment[ 'paid' ]) { - $payment = OrderPayment::where('order_id', $order->id) - ->where('value', $instalment[ 'amount' ]) - ->whereNotIn('id', $tracked) + if ( isset( $instalment[ 'paid' ] ) && $instalment[ 'paid' ] ) { + $payment = OrderPayment::where( 'order_id', $order->id ) + ->where( 'value', $instalment[ 'amount' ] ) + ->whereNotIn( 'id', $tracked ) ->first(); /** @@ -261,7 +261,7 @@ public function __saveOrderInstalments(Order $order, $instalments = []) $newInstalment->amount = $instalment[ 'amount' ]; $newInstalment->order_id = $order->id; $newInstalment->paid = $instalment[ 'paid' ] ?? false; - $newInstalment->date = Carbon::parse($instalment[ 'date' ])->toDateTimeString(); + $newInstalment->date = Carbon::parse( $instalment[ 'date' ] )->toDateTimeString(); $newInstalment->save(); } } @@ -272,36 +272,36 @@ public function __saveOrderInstalments(Order $order, $instalments = []) * valid and verify it allong with the order * total. * - * @param array $fields + * @param array $fields * @return void * * @throws NotAllowedException */ - public function __checkProvidedInstalments($fields) + public function __checkProvidedInstalments( $fields ) { if ( - isset($fields[ 'instalments' ]) && - ! empty($fields[ 'instalments' ]) && - ! in_array($fields[ 'payment_status' ] ?? null, [ Order::PAYMENT_HOLD ]) + isset( $fields[ 'instalments' ] ) && + ! empty( $fields[ 'instalments' ] ) && + ! in_array( $fields[ 'payment_status' ] ?? null, [ Order::PAYMENT_HOLD ] ) ) { - $instalments = collect($fields[ 'instalments' ]); - $customer = Customer::find($fields[ 'customer_id' ]); + $instalments = collect( $fields[ 'instalments' ] ); + $customer = Customer::find( $fields[ 'customer_id' ] ); - if ((float) $customer->group->minimal_credit_payment > 0) { - $minimal = Currency::define($fields[ 'total' ]) - ->multipliedBy($customer->group->minimal_credit_payment) - ->dividedBy(100) + if ( (float) $customer->group->minimal_credit_payment > 0 ) { + $minimal = Currency::define( $fields[ 'total' ] ) + ->multipliedBy( $customer->group->minimal_credit_payment ) + ->dividedBy( 100 ) ->getRaw(); /** * if the minimal provided * amount thoses match the required amount. */ - if ($minimal > Currency::raw($fields[ 'tendered' ])) { + if ( $minimal > Currency::raw( $fields[ 'tendered' ] ) ) { throw new NotAllowedException( sprintf( - __('The minimal payment of %s has\'nt been provided.'), - (string) Currency::define($minimal) + __( 'The minimal payment of %s has\'nt been provided.' ), + (string) Currency::define( $minimal ) ) ); } @@ -312,42 +312,42 @@ public function __checkProvidedInstalments($fields) /** * Checks whether the attached coupons are valid * - * @param array $coupons + * @param array $coupons * @return void */ - public function __checkAttachedCoupons($fields) + public function __checkAttachedCoupons( $fields ) { - collect($fields[ 'coupons' ] ?? [])->each(function ($coupon) use ($fields) { - $result = $this->customerService->checkCouponExistence($coupon, $fields); - }); + collect( $fields[ 'coupons' ] ?? [] )->each( function ( $coupon ) use ( $fields ) { + $result = $this->customerService->checkCouponExistence( $coupon, $fields ); + } ); } /** * Computes the total of the provided coupons * - * @param array $fields - * @param float $subtotal + * @param array $fields + * @param float $subtotal * @return float */ - private function __computeOrderCoupons($fields, $subtotal) + private function __computeOrderCoupons( $fields, $subtotal ) { - if (isset($fields[ 'coupons' ])) { - return collect($fields[ 'coupons' ])->map(function ($coupon) use ($subtotal) { - if (! isset($coupon[ 'value' ])) { - return $this->__computeCouponValue($coupon, $subtotal); + if ( isset( $fields[ 'coupons' ] ) ) { + return collect( $fields[ 'coupons' ] )->map( function ( $coupon ) use ( $subtotal ) { + if ( ! isset( $coupon[ 'value' ] ) ) { + return $this->__computeCouponValue( $coupon, $subtotal ); } return $coupon[ 'value' ]; - })->sum(); + } )->sum(); } return 0; } - private function __computeCouponValue($coupon, $subtotal) + private function __computeCouponValue( $coupon, $subtotal ) { - return match ($coupon[ 'discount_type' ]) { - 'percentage_discount' => $this->computeDiscountValues($coupon[ 'discount_value' ], $subtotal), + return match ( $coupon[ 'discount_type' ] ) { + 'percentage_discount' => $this->computeDiscountValues( $coupon[ 'discount_value' ], $subtotal ), 'flat_discount' => $coupon[ 'discount_value' ] }; } @@ -355,29 +355,29 @@ private function __computeCouponValue($coupon, $subtotal) /** * Save the coupons by attaching them to the processed order * - * @param array $coupons + * @param array $coupons * @return void */ - public function __saveOrderCoupons(Order $order, $coupons) + public function __saveOrderCoupons( Order $order, $coupons ) { $savedCoupons = []; $order->total_coupons = 0; - foreach ($coupons as $arrayCoupon) { - $coupon = Coupon::find($arrayCoupon[ 'coupon_id' ]); + foreach ( $coupons as $arrayCoupon ) { + $coupon = Coupon::find( $arrayCoupon[ 'coupon_id' ] ); - OrderCouponBeforeCreatedEvent::dispatch($coupon, $order); + OrderCouponBeforeCreatedEvent::dispatch( $coupon, $order ); - $existingCoupon = OrderCoupon::where('order_id', $order->id) - ->where('coupon_id', $coupon->id) + $existingCoupon = OrderCoupon::where( 'order_id', $order->id ) + ->where( 'coupon_id', $coupon->id ) ->first(); - $customerCoupon = CustomerCoupon::where('coupon_id', $coupon->id) - ->where('customer_id', $order->customer_id) + $customerCoupon = CustomerCoupon::where( 'coupon_id', $coupon->id ) + ->where( 'customer_id', $order->customer_id ) ->firstOrFail(); - if (! $existingCoupon instanceof OrderCoupon) { + if ( ! $existingCoupon instanceof OrderCoupon ) { $existingCoupon = new OrderCoupon; $existingCoupon->order_id = $order->id; $existingCoupon->coupon_id = $coupon[ 'id' ]; @@ -394,7 +394,7 @@ public function __saveOrderCoupons(Order $order, $coupons) $existingCoupon->value = $coupon[ 'value' ] ?: ( $arrayCoupon[ 'type' ] === 'percentage_discount' ? - $this->computeDiscountValues($arrayCoupon[ 'discount_value' ], $order->subtotal) : + $this->computeDiscountValues( $arrayCoupon[ 'discount_value' ], $order->subtotal ) : $arrayCoupon[ 'discount_value' ] ); @@ -406,7 +406,7 @@ public function __saveOrderCoupons(Order $order, $coupons) $existingCoupon->save(); - OrderCouponAfterCreatedEvent::dispatch($existingCoupon, $order); + OrderCouponAfterCreatedEvent::dispatch( $existingCoupon, $order ); $savedCoupons[] = $existingCoupon->id; } @@ -415,33 +415,33 @@ public function __saveOrderCoupons(Order $order, $coupons) * Every coupon that is not processed * should be deleted. */ - OrderCoupon::where('order_id', $order->id) - ->whereNotIn('id', $savedCoupons) + OrderCoupon::where( 'order_id', $order->id ) + ->whereNotIn( 'id', $savedCoupons ) ->delete(); } /** * Will compute the taxes assigned to an order */ - public function __saveOrderTaxes(Order $order, $taxes): float + public function __saveOrderTaxes( Order $order, $taxes ): float { /** * if previous taxes had been registered, * we need to clear them */ - OrderTax::where('order_id', $order->id)->delete(); + OrderTax::where( 'order_id', $order->id )->delete(); - $taxCollection = collect([]); + $taxCollection = collect( [] ); - if (count($taxes) > 0) { - $percentages = collect($taxes)->map(fn($tax) => $tax[ 'rate' ]); + if ( count( $taxes ) > 0 ) { + $percentages = collect( $taxes )->map( fn( $tax ) => $tax[ 'rate' ] ); $response = $this->taxService->getTaxesComputed( tax_type: $order->tax_type, rates: $percentages->toArray(), - value: ns()->currency->define($order->subtotal)->subtractBy($order->discount)->toFloat() + value: ns()->currency->define( $order->subtotal )->subtractBy( $order->discount )->toFloat() ); - foreach ($taxes as $index => $tax) { + foreach ( $taxes as $index => $tax ) { $orderTax = new OrderTax; $orderTax->tax_name = $tax[ 'tax_name' ]; $orderTax->tax_value = $response[ 'percentages' ][ $index ][ 'tax' ]; @@ -449,11 +449,11 @@ public function __saveOrderTaxes(Order $order, $taxes): float $orderTax->tax_id = $tax[ 'tax_id' ]; $orderTax->order_id = $order->id; - BeforeSaveOrderTaxEvent::dispatch($orderTax, $tax); + BeforeSaveOrderTaxEvent::dispatch( $orderTax, $tax ); $orderTax->save(); - $taxCollection->push($orderTax); + $taxCollection->push( $orderTax ); } } @@ -461,30 +461,30 @@ public function __saveOrderTaxes(Order $order, $taxes): float * we'll increase the tax value and * update the value on the order tax object */ - return $taxCollection->map(fn($tax) => $tax->tax_value)->sum(); + return $taxCollection->map( fn( $tax ) => $tax->tax_value )->sum(); } /** * Assign taxes to the processed order * - * @param array $taxes + * @param array $taxes * @return void */ - public function __registerTaxes(Order $order, $taxes) + public function __registerTaxes( Order $order, $taxes ) { - switch (ns()->option->get('ns_pos_vat')) { + switch ( ns()->option->get( 'ns_pos_vat' ) ) { case 'products_vat': - $order->products_tax_value = $this->getOrderProductsTaxes($order); + $order->products_tax_value = $this->getOrderProductsTaxes( $order ); break; case 'flat_vat': case 'variable_vat': - $order->tax_value = Currency::define($this->__saveOrderTaxes($order, $taxes))->toFloat(); + $order->tax_value = Currency::define( $this->__saveOrderTaxes( $order, $taxes ) )->toFloat(); $order->products_tax_value = 0; break; case 'products_variable_vat': case 'products_flat_vat': - $order->tax_value = Currency::define($this->__saveOrderTaxes($order, $taxes))->toFloat(); - $order->products_tax_value = $this->getOrderProductsTaxes($order); + $order->tax_value = Currency::define( $this->__saveOrderTaxes( $order, $taxes ) )->toFloat(); + $order->products_tax_value = $this->getOrderProductsTaxes( $order ); break; } @@ -495,16 +495,16 @@ public function __registerTaxes(Order $order, $taxes) * will delete the products belonging to an order * that aren't tracked. * - * @param Order $order - * @param array $products + * @param Order $order + * @param array $products * @return void */ - public function __deleteUntrackedProducts($order, $products) + public function __deleteUntrackedProducts( $order, $products ) { - if ($order instanceof Order) { - $ids = collect($products) - ->filter(fn($product) => isset($product[ 'id' ]) && isset($product[ 'unit_id' ])) - ->map(fn($product) => $product[ 'id' ] . '-' . $product[ 'unit_id' ]) + if ( $order instanceof Order ) { + $ids = collect( $products ) + ->filter( fn( $product ) => isset( $product[ 'id' ] ) && isset( $product[ 'unit_id' ] ) ) + ->map( fn( $product ) => $product[ 'id' ] . '-' . $product[ 'unit_id' ] ) ->toArray(); /** @@ -512,24 +512,24 @@ public function __deleteUntrackedProducts($order, $products) * each product is different from the previous known quantity, to perform * adjustment accordingly. In that case we'll use adjustment-return & sale. */ - if ($order->payment_status !== Order::PAYMENT_HOLD) { - $order->products->map(function (OrderProduct $product) use ($products) { - $productHistory = ProductHistory::where('operation_type', ProductHistory::ACTION_SOLD) - ->where('order_product_id', $product->id) + if ( $order->payment_status !== Order::PAYMENT_HOLD ) { + $order->products->map( function ( OrderProduct $product ) use ( $products ) { + $productHistory = ProductHistory::where( 'operation_type', ProductHistory::ACTION_SOLD ) + ->where( 'order_product_id', $product->id ) ->first(); /** * We should restore or retreive quantities when the * product has initially be marked as sold. */ - if ($productHistory instanceof ProductHistory) { - $products = collect($products) - ->filter(fn($product) => isset($product[ 'id' ])) - ->mapWithKeys(fn($product) => [ $product[ 'id' ] => $product ]) + if ( $productHistory instanceof ProductHistory ) { + $products = collect( $products ) + ->filter( fn( $product ) => isset( $product[ 'id' ] ) ) + ->mapWithKeys( fn( $product ) => [ $product[ 'id' ] => $product ] ) ->toArray(); - if (in_array($product->id, array_keys($products))) { - if ($product->quantity < $products[ $product->id ][ 'quantity' ]) { + if ( in_array( $product->id, array_keys( $products ) ) ) { + if ( $product->quantity < $products[ $product->id ][ 'quantity' ] ) { return [ 'operation' => 'add', 'unit_price' => $products[ $product->id ][ 'unit_price' ], @@ -537,7 +537,7 @@ public function __deleteUntrackedProducts($order, $products) 'quantity' => $products[ $product->id ][ 'quantity' ] - $product->quantity, 'orderProduct' => $product, ]; - } elseif ($product->quantity > $products[ $product->id ][ 'quantity' ]) { + } elseif ( $product->quantity > $products[ $product->id ][ 'quantity' ] ) { return [ 'operation' => 'remove', 'unit_price' => $products[ $product->id ][ 'unit_price' ], @@ -554,10 +554,10 @@ public function __deleteUntrackedProducts($order, $products) * on the order products. */ return false; - }) - ->filter(fn($adjustment) => $adjustment !== false) - ->each(function ($adjustment) use ($order) { - if ($adjustment[ 'operation' ] === 'remove') { + } ) + ->filter( fn( $adjustment ) => $adjustment !== false ) + ->each( function ( $adjustment ) use ( $order ) { + if ( $adjustment[ 'operation' ] === 'remove' ) { $adjustment[ 'orderProduct' ]->quantity -= $adjustment[ 'quantity' ]; $this->productService->stockAdjustment( @@ -592,7 +592,7 @@ public function __deleteUntrackedProducts($order, $products) $adjustment[ 'orderProduct' ]->unit_price = $adjustment[ 'unit_price' ]; $adjustment[ 'orderProduct' ]->total_price = $adjustment[ 'total_price' ]; $adjustment[ 'orderProduct' ]->save(); - }); + } ); } /** @@ -600,7 +600,7 @@ public function __deleteUntrackedProducts($order, $products) * proceesed another time should be removed. If the order has * already affected the stock, we should make some adjustments. */ - $order->products->each(function ($orderProduct) use ($ids, $order) { + $order->products->each( function ( $orderProduct ) use ( $ids, $order ) { /** * if a product has the unit id changed * the product he considered as new and the old is returned @@ -608,14 +608,14 @@ public function __deleteUntrackedProducts($order, $products) */ $reference = $orderProduct->id . '-' . $orderProduct->unit_id; - if (! in_array($reference, $ids)) { + if ( ! in_array( $reference, $ids ) ) { $orderProduct->delete(); /** * If the order has changed the stock. The operation * that update it should affect the stock as well. */ - if ($order->payment_status !== Order::PAYMENT_HOLD) { + if ( $order->payment_status !== Order::PAYMENT_HOLD ) { $this->productService->stockAdjustment( ProductHistory::ACTION_ADJUSTMENT_RETURN, [ 'unit_id' => $orderProduct->unit_id, @@ -628,7 +628,7 @@ public function __deleteUntrackedProducts($order, $products) ); } } - }); + } ); } } @@ -638,9 +638,9 @@ public function __deleteUntrackedProducts($order, $products) * * @param array fields */ - private function __getShippingFee($fields): float + private function __getShippingFee( $fields ): float { - return $this->currencyService->getRaw($fields['shipping'] ?? 0); + return $this->currencyService->getRaw( $fields['shipping'] ?? 0 ); } /** @@ -652,20 +652,20 @@ private function __getShippingFee($fields): float * * @throws NotAllowedException */ - public function __checkDiscountValidity($fields) - { - if (! empty(@$fields['discount_type'])) { - if ($fields['discount_type'] === 'percentage' && (floatval($fields['discount_percentage']) < 0) || (floatval($fields['discount_percentage']) > 100)) { - throw new NotAllowedException(__('The percentage discount provided is not valid.')); - } elseif ($fields['discount_type'] === 'flat') { - $productsTotal = $fields[ 'products' ]->map(function ($product) { - return $this->currencyService->define($product['quantity']) - ->multiplyBy(floatval($product['unit_price'])) + public function __checkDiscountValidity( $fields ) + { + if ( ! empty( @$fields['discount_type'] ) ) { + if ( $fields['discount_type'] === 'percentage' && ( floatval( $fields['discount_percentage'] ) < 0 ) || ( floatval( $fields['discount_percentage'] ) > 100 ) ) { + throw new NotAllowedException( __( 'The percentage discount provided is not valid.' ) ); + } elseif ( $fields['discount_type'] === 'flat' ) { + $productsTotal = $fields[ 'products' ]->map( function ( $product ) { + return $this->currencyService->define( $product['quantity'] ) + ->multiplyBy( floatval( $product['unit_price'] ) ) ->getRaw(); - })->sum(); + } )->sum(); - if ($fields['discount'] > $productsTotal) { - throw new NotAllowedException(__('A discount cannot exceed the sub total value of an order.')); + if ( $fields['discount'] > $productsTotal ) { + throw new NotAllowedException( __( 'A discount cannot exceed the sub total value of an order.' ) ); } } } @@ -678,7 +678,7 @@ public function __checkDiscountValidity($fields) * @param array fields * @return array $fields */ - private function __checkAddressesInformations($fields) + private function __checkAddressesInformations( $fields ) { $allowedKeys = [ 'id', @@ -698,13 +698,13 @@ private function __checkAddressesInformations($fields) * this will erase the unsupported * attribute before saving the customer addresses. */ - if (! empty($fields[ 'addresses' ])) { - foreach (['shipping', 'billing'] as $type) { - if (isset($fields['addresses'][$type])) { - $keys = array_keys($fields['addresses'][$type]); - foreach ($keys as $key) { - if (! in_array($key, $allowedKeys)) { - unset($fields[ 'addresses' ][ $type ][ $key ]); + if ( ! empty( $fields[ 'addresses' ] ) ) { + foreach ( ['shipping', 'billing'] as $type ) { + if ( isset( $fields['addresses'][$type] ) ) { + $keys = array_keys( $fields['addresses'][$type] ); + foreach ( $keys as $key ) { + if ( ! in_array( $key, $allowedKeys ) ) { + unset( $fields[ 'addresses' ][ $type ][ $key ] ); } } } @@ -721,9 +721,9 @@ private function __checkAddressesInformations($fields) * @param Order * @param array of key=>value fields submitted */ - private function __saveAddressInformations($order, $fields) + private function __saveAddressInformations( $order, $fields ) { - foreach (['shipping', 'billing'] as $type) { + foreach ( ['shipping', 'billing'] as $type ) { /** * if the id attribute is already provided * we should attempt to find the related addresses @@ -732,16 +732,16 @@ private function __saveAddressInformations($order, $fields) * @todo add a verification to enforce address to be attached * to the processed order. */ - if (isset($fields[ 'addresses' ][ $type ][ 'id' ])) { - $orderShipping = OrderAddress::find($fields[ 'addresses' ][ $type ][ 'id' ]); + if ( isset( $fields[ 'addresses' ][ $type ][ 'id' ] ) ) { + $orderShipping = OrderAddress::find( $fields[ 'addresses' ][ $type ][ 'id' ] ); } else { $orderShipping = new OrderAddress; } $orderShipping->type = $type; - if (! empty($fields['addresses'][$type])) { - foreach ($fields['addresses'][$type] as $key => $value) { + if ( ! empty( $fields['addresses'][$type] ) ) { + foreach ( $fields['addresses'][$type] as $key => $value ) { $orderShipping->$key = $value; } } @@ -752,7 +752,7 @@ private function __saveAddressInformations($order, $fields) } } - private function __saveOrderPayments($order, $payments, $customer) + private function __saveOrderPayments( $order, $payments, $customer ) { /** * As we're about to record new payments, @@ -760,43 +760,43 @@ private function __saveOrderPayments($order, $payments, $customer) * might have been made. Probably we'll need to keep these * order and only update them. */ - foreach ($payments as $payment) { - $this->__saveOrderSinglePayment($payment, $order); + foreach ( $payments as $payment ) { + $this->__saveOrderSinglePayment( $payment, $order ); } - $order->tendered = $this->currencyService->getRaw(collect($payments)->map(fn($payment) => floatval($payment[ 'value' ]))->sum()); + $order->tendered = $this->currencyService->getRaw( collect( $payments )->map( fn( $payment ) => floatval( $payment[ 'value' ] ) )->sum() ); } /** * Perform a single payment to a provided order * and ensure to display relevant events * - * @param array $payment + * @param array $payment * @return array */ - public function makeOrderSinglePayment($payment, Order $order) + public function makeOrderSinglePayment( $payment, Order $order ) { // Check if the order is already paid - if ($order->payment_status === Order::PAYMENT_PAID) { - throw new NotAllowedException(__('Unable to proceed as the order is already paid.')); + if ( $order->payment_status === Order::PAYMENT_PAID ) { + throw new NotAllowedException( __( 'Unable to proceed as the order is already paid.' ) ); } /** * We should check if the order allow instalments. */ - if ($order->instalments->count() > 0 && $order->support_instalments) { + if ( $order->instalments->count() > 0 && $order->support_instalments ) { $paymentToday = $order->instalments() - ->where('paid', false) - ->where('date', '>=', ns()->date->copy()->startOfDay()->toDateTimeString()) - ->where('date', '<=', ns()->date->copy()->endOfDay()->toDateTimeString()) + ->where( 'paid', false ) + ->where( 'date', '>=', ns()->date->copy()->startOfDay()->toDateTimeString() ) + ->where( 'date', '<=', ns()->date->copy()->endOfDay()->toDateTimeString() ) ->get(); - if ($paymentToday->count() === 0) { - throw new NotFoundException(__('No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.')); + if ( $paymentToday->count() === 0 ) { + throw new NotFoundException( __( 'No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.' ) ); } } - $payment = $this->__saveOrderSinglePayment($payment, $order); + $payment = $this->__saveOrderSinglePayment( $payment, $order ); /** * let's refresh the order to check whether the @@ -804,12 +804,12 @@ public function makeOrderSinglePayment($payment, Order $order) */ $order->refresh(); - $this->refreshOrder($order); + $this->refreshOrder( $order ); return [ 'status' => 'success', - 'message' => __('The payment has been saved.'), - 'data' => compact('payment'), + 'message' => __( 'The payment has been saved.' ), + 'data' => compact( 'payment' ), ]; } @@ -819,13 +819,13 @@ public function makeOrderSinglePayment($payment, Order $order) * * @param array $payment */ - private function __saveOrderSinglePayment($payment, Order $order): OrderPayment + private function __saveOrderSinglePayment( $payment, Order $order ): OrderPayment { - event(new OrderBeforePaymentCreatedEvent($payment, $order->customer)); + event( new OrderBeforePaymentCreatedEvent( $payment, $order->customer ) ); - $orderPayment = isset($payment[ 'id' ]) ? OrderPayment::find($payment[ 'id' ]) : false; + $orderPayment = isset( $payment[ 'id' ] ) ? OrderPayment::find( $payment[ 'id' ] ) : false; - if (! $orderPayment instanceof OrderPayment) { + if ( ! $orderPayment instanceof OrderPayment ) { $orderPayment = new OrderPayment; } @@ -833,12 +833,12 @@ private function __saveOrderSinglePayment($payment, Order $order): OrderPayment * When the customer is making some payment * we store it on his history. */ - if ($payment[ 'identifier' ] === OrderPayment::PAYMENT_ACCOUNT) { + if ( $payment[ 'identifier' ] === OrderPayment::PAYMENT_ACCOUNT ) { $this->customerService->saveTransaction( $order->customer, CustomerAccountHistory::OPERATION_PAYMENT, $payment[ 'value' ], - __('Order Payment'), [ + __( 'Order Payment' ), [ 'order_id' => $order->id, ] ); @@ -846,11 +846,11 @@ private function __saveOrderSinglePayment($payment, Order $order): OrderPayment $orderPayment->order_id = $order->id; $orderPayment->identifier = $payment['identifier']; - $orderPayment->value = $this->currencyService->getRaw($payment['value']); + $orderPayment->value = $this->currencyService->getRaw( $payment['value'] ); $orderPayment->author = $order->author ?? Auth::id(); $orderPayment->save(); - OrderAfterPaymentCreatedEvent::dispatch($orderPayment, $order); + OrderAfterPaymentCreatedEvent::dispatch( $orderPayment, $order ); return $orderPayment; } @@ -863,14 +863,14 @@ private function __saveOrderSinglePayment($payment, Order $order): OrderPayment * @param Collection $products * @param array field */ - private function __checkOrderPayments($fields, ?Order $order, Customer $customer) + private function __checkOrderPayments( $fields, ?Order $order, Customer $customer ) { /** * we shouldn't process order if while * editing an order it seems that order is already paid. */ - if ($order !== null && $order->payment_status === Order::PAYMENT_PAID) { - throw new NotAllowedException(__('Unable to edit an order that is completely paid.')); + if ( $order !== null && $order->payment_status === Order::PAYMENT_PAID ) { + throw new NotAllowedException( __( 'Unable to edit an order that is completely paid.' ) ); } /** @@ -878,61 +878,61 @@ private function __checkOrderPayments($fields, ?Order $order, Customer $customer * some product, we need to make sure that the previously submitted * payment hasn't been deleted. */ - if ($order instanceof Order) { - $paymentIds = collect($fields[ 'payments' ] ?? []) - ->map(fn($payment) => $payment[ 'id' ] ?? false) - ->filter(fn($payment) => $payment !== false) + if ( $order instanceof Order ) { + $paymentIds = collect( $fields[ 'payments' ] ?? [] ) + ->map( fn( $payment ) => $payment[ 'id' ] ?? false ) + ->filter( fn( $payment ) => $payment !== false ) ->toArray(); - $order->payments->each(function ($payment) use ($paymentIds) { - if (! in_array($payment->id, $paymentIds)) { - throw new NotAllowedException(__('Unable to proceed as one of the previous submitted payment is missing from the order.')); + $order->payments->each( function ( $payment ) use ( $paymentIds ) { + if ( ! in_array( $payment->id, $paymentIds ) ) { + throw new NotAllowedException( __( 'Unable to proceed as one of the previous submitted payment is missing from the order.' ) ); } - }); + } ); /** * if the order was no more "hold" * we shouldn't allow the order to switch to hold. */ - if ($order->payment_status !== Order::PAYMENT_HOLD && isset($fields[ 'payment_status' ]) && $fields[ 'payment_status' ] === Order::PAYMENT_HOLD) { - throw new NotAllowedException(__('The order payment status cannot switch to hold as a payment has already been made on that order.')); + if ( $order->payment_status !== Order::PAYMENT_HOLD && isset( $fields[ 'payment_status' ] ) && $fields[ 'payment_status' ] === Order::PAYMENT_HOLD ) { + throw new NotAllowedException( __( 'The order payment status cannot switch to hold as a payment has already been made on that order.' ) ); } } $totalPayments = 0; - $subtotal = Currency::raw(collect($fields[ 'products' ])->map(function ($product) { - return floatval($product['total_price']); - })->sum()); + $subtotal = Currency::raw( collect( $fields[ 'products' ] )->map( function ( $product ) { + return floatval( $product['total_price'] ); + } )->sum() ); $total = $this->currencyService->define( - $subtotal + $this->__getShippingFee($fields) + $subtotal + $this->__getShippingFee( $fields ) ) - ->subtractBy(($fields[ 'discount' ] ?? $this->computeDiscountValues($fields[ 'discount_percentage' ] ?? 0, $subtotal))) - ->subtractBy($this->__computeOrderCoupons($fields, $subtotal)) + ->subtractBy( ( $fields[ 'discount' ] ?? $this->computeDiscountValues( $fields[ 'discount_percentage' ] ?? 0, $subtotal ) ) ) + ->subtractBy( $this->__computeOrderCoupons( $fields, $subtotal ) ) ->getRaw(); $allowedPaymentsGateways = PaymentType::active() ->get() - ->map(fn($paymentType) => $paymentType->identifier) + ->map( fn( $paymentType ) => $paymentType->identifier ) ->toArray(); - if (! empty($fields[ 'payments' ])) { - foreach ($fields[ 'payments' ] as $payment) { - if (in_array($payment['identifier'], $allowedPaymentsGateways)) { + if ( ! empty( $fields[ 'payments' ] ) ) { + foreach ( $fields[ 'payments' ] as $payment ) { + if ( in_array( $payment['identifier'], $allowedPaymentsGateways ) ) { /** * check if the customer account balance is enough for the account-payment * when that payment is provided */ - if ($payment[ 'identifier' ] === 'account-payment' && $customer->account_amount < floatval($payment[ 'value' ])) { - throw new NotAllowedException(__('The customer account funds are\'nt enough to process the payment.')); + if ( $payment[ 'identifier' ] === 'account-payment' && $customer->account_amount < floatval( $payment[ 'value' ] ) ) { + throw new NotAllowedException( __( 'The customer account funds are\'nt enough to process the payment.' ) ); } - $totalPayments = $this->currencyService->define($totalPayments) - ->additionateBy($payment['value']) + $totalPayments = $this->currencyService->define( $totalPayments ) + ->additionateBy( $payment['value'] ) ->get(); } else { - throw new NotAllowedException(__('Unable to proceed. One of the submitted payment type is not supported.')); + throw new NotAllowedException( __( 'Unable to proceed. One of the submitted payment type is not supported.' ) ); } } } @@ -941,17 +941,17 @@ private function __checkOrderPayments($fields, ?Order $order, Customer $customer * determine if according to the payment * we're free to proceed with that */ - if ($totalPayments < $total) { + if ( $totalPayments < $total ) { if ( - $this->optionsService->get('ns_orders_allow_partial', true) === false && + $this->optionsService->get( 'ns_orders_allow_partial', true ) === false && $totalPayments > 0 ) { - throw new NotAllowedException(__('Unable to proceed. Partially paid orders aren\'t allowed. This option could be changed on the settings.')); + throw new NotAllowedException( __( 'Unable to proceed. Partially paid orders aren\'t allowed. This option could be changed on the settings.' ) ); } elseif ( - $this->optionsService->get('ns_orders_allow_incomplete', true) === false && + $this->optionsService->get( 'ns_orders_allow_incomplete', true ) === false && $totalPayments === 0 ) { - throw new NotAllowedException(__('Unable to proceed. Unpaid orders aren\'t allowed. This option could be changed on the settings.')); + throw new NotAllowedException( __( 'Unable to proceed. Unpaid orders aren\'t allowed. This option could be changed on the settings.' ) ); } /** @@ -962,21 +962,21 @@ private function __checkOrderPayments($fields, ?Order $order, Customer $customer (float) $customer->credit_limit_amount > 0 && $totalPayments === 0 && $fields[ 'payment_status' ] !== Order::PAYMENT_HOLD - && (float) $customer->credit_limit_amount < (float) $customer->owed_amount + (float) $total) { - throw new NotAllowedException(sprintf( - __('By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.'), - (string) ns()->currency->fresh($customer->credit_limit_amount) - )); + && (float) $customer->credit_limit_amount < (float) $customer->owed_amount + (float) $total ) { + throw new NotAllowedException( sprintf( + __( 'By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.' ), + (string) ns()->currency->fresh( $customer->credit_limit_amount ) + ) ); } } - if ($totalPayments >= $total && count($fields[ 'payments' ] ?? []) > 0) { + if ( $totalPayments >= $total && count( $fields[ 'payments' ] ?? [] ) > 0 ) { $paymentStatus = Order::PAYMENT_PAID; - } elseif ($totalPayments < $total && $totalPayments > 0) { + } elseif ( $totalPayments < $total && $totalPayments > 0 ) { $paymentStatus = Order::PAYMENT_PARTIALLY; - } elseif ($totalPayments === 0 && (! isset($fields[ 'payment_status' ]) || ($fields[ 'payment_status' ] !== Order::PAYMENT_HOLD))) { + } elseif ( $totalPayments === 0 && ( ! isset( $fields[ 'payment_status' ] ) || ( $fields[ 'payment_status' ] !== Order::PAYMENT_HOLD ) ) ) { $paymentStatus = Order::PAYMENT_UNPAID; - } elseif ($totalPayments === 0 && (isset($fields[ 'payment_status' ]) && ($fields[ 'payment_status' ] === Order::PAYMENT_HOLD))) { + } elseif ( $totalPayments === 0 && ( isset( $fields[ 'payment_status' ] ) && ( $fields[ 'payment_status' ] === Order::PAYMENT_HOLD ) ) ) { $paymentStatus = Order::PAYMENT_HOLD; } @@ -984,8 +984,8 @@ private function __checkOrderPayments($fields, ?Order $order, Customer $customer * Ultimately, we'll check when a payment is provided * the logged user must have the rights to perform a payment */ - if ($totalPayments > 0) { - ns()->restrict('nexopos.make-payment.orders', __('You\'re not allowed to make payments.')); + if ( $totalPayments > 0 ) { + ns()->restrict( 'nexopos.make-payment.orders', __( 'You\'re not allowed to make payments.' ) ); } return [ @@ -1000,31 +1000,31 @@ private function __checkOrderPayments($fields, ?Order $order, Customer $customer * Compute an order total based * on provided data * - * @param array $data + * @param array $data * @return array $order */ - protected function __computeOrderTotal($data) + protected function __computeOrderTotal( $data ) { /** - * @param float $order - * @param float $subTotal - * @param float $totalPayments + * @param float $order + * @param float $subTotal + * @param float $totalPayments * @param string $paymentStatus */ - extract($data); + extract( $data ); /** * increase the total with the * shipping fees and subtract the discounts */ - $order->total = Currency::fresh($order->subtotal) - ->additionateBy($order->shipping) + $order->total = Currency::fresh( $order->subtotal ) + ->additionateBy( $order->shipping ) ->additionateBy( - ($order->tax_type === 'exclusive' ? $order->tax_value : 0) + ( $order->tax_type === 'exclusive' ? $order->tax_value : 0 ) ) ->subtractBy( - Currency::fresh($order->total_coupons) - ->additionateBy($order->discount) + Currency::fresh( $order->total_coupons ) + ->additionateBy( $order->discount ) ->getRaw() ) ->getRaw(); @@ -1034,8 +1034,8 @@ protected function __computeOrderTotal($data) /** * compute change */ - $order->change = Currency::fresh($order->tendered) - ->subtractBy($order->total) + $order->change = Currency::fresh( $order->tendered ) + ->subtractBy( $order->total ) ->getRaw(); /** @@ -1043,10 +1043,10 @@ protected function __computeOrderTotal($data) * * @todo not accurate */ - $order->total_without_tax = Currency::fresh($order->subtotal) - ->subtractBy($order->discount) - ->subtractBy($order->total_coupons) - ->subtractBy($order->tax_value) + $order->total_without_tax = Currency::fresh( $order->subtotal ) + ->subtractBy( $order->discount ) + ->subtractBy( $order->total_coupons ) + ->subtractBy( $order->tax_value ) ->getRaw(); return $order; @@ -1057,19 +1057,19 @@ protected function __computeOrderTotal($data) * @param array array of products * @return array [$total, $taxes, $order] */ - private function __saveOrderProducts($order, $products) + private function __saveOrderProducts( $order, $products ) { $subTotal = 0; $taxes = 0; $gross = 0; - $orderProducts = $products->map(function ($product) use (&$subTotal, &$taxes, &$order, &$gross) { + $orderProducts = $products->map( function ( $product ) use ( &$subTotal, &$taxes, &$order, &$gross ) { /** * if the product id is provided * then we can use that id as a reference. */ - if (isset($product[ 'id' ])) { - $orderProduct = OrderProduct::find($product[ 'id' ]); + if ( isset( $product[ 'id' ] ) ) { + $orderProduct = OrderProduct::find( $product[ 'id' ] ); } else { $orderProduct = new OrderProduct; } @@ -1078,7 +1078,7 @@ private function __saveOrderProducts($order, $products) * this can be useful to allow injecting * data that can later on be compted. */ - OrderProductBeforeSavedEvent::dispatch($orderProduct, $product); + OrderProductBeforeSavedEvent::dispatch( $orderProduct, $product ); /** * We'll retreive the unit used for @@ -1086,7 +1086,7 @@ private function __saveOrderProducts($order, $products) * * @var Unit $unit */ - $unit = Unit::find($product[ 'unit_id' ]); + $unit = Unit::find( $product[ 'unit_id' ] ); $orderProduct->order_id = $order->id; $orderProduct->unit_quantity_id = $product[ 'unit_quantity_id' ]; @@ -1097,7 +1097,7 @@ private function __saveOrderProducts($order, $products) $orderProduct->rate = $product[ 'rate' ] ?? 0; $orderProduct->product_id = $product[ 'product' ]->id ?? 0; $orderProduct->product_category_id = $product[ 'product' ]->category_id ?? 0; - $orderProduct->name = $product[ 'product' ]->name ?? $product[ 'name' ] ?? __('Unnamed Product'); + $orderProduct->name = $product[ 'product' ]->name ?? $product[ 'name' ] ?? __( 'Unnamed Product' ); $orderProduct->quantity = $product[ 'quantity' ]; $orderProduct->price_with_tax = $product[ 'price_with_tax' ] ?? 0; $orderProduct->price_without_tax = $product[ 'price_without_tax' ] ?? 0; @@ -1106,11 +1106,11 @@ private function __saveOrderProducts($order, $products) * We might need to have another consideration * on how we do compute the taxes */ - if ($product[ 'product' ] instanceof Product && $product[ 'product' ]->tax_type !== 'disabled' && ! empty($product[ 'product' ]->tax_group_id)) { + if ( $product[ 'product' ] instanceof Product && $product[ 'product' ]->tax_type !== 'disabled' && ! empty( $product[ 'product' ]->tax_group_id ) ) { $orderProduct->tax_group_id = $product[ 'product' ]->tax_group_id; $orderProduct->tax_type = $product[ 'product' ]->tax_type ?? 'inclusive'; $orderProduct->tax_value = $product[ 'tax_value' ]; - } elseif (isset($product[ 'tax_type' ]) && isset($product[ 'tax_group_id' ])) { + } elseif ( isset( $product[ 'tax_type' ] ) && isset( $product[ 'tax_group_id' ] ) ) { $orderProduct->tax_group_id = $product[ 'tax_group_id' ]; $orderProduct->tax_type = $product[ 'tax_type' ]; $orderProduct->tax_value = $product[ 'tax_value' ]; @@ -1124,30 +1124,30 @@ private function __saveOrderProducts($order, $products) * @todo we need to solve the issue with the * gross price and determine where we should pull it. */ - $orderProduct->unit_price = $this->currencyService->define($product[ 'unit_price' ])->getRaw(); + $orderProduct->unit_price = $this->currencyService->define( $product[ 'unit_price' ] )->getRaw(); $orderProduct->discount_type = $product[ 'discount_type' ] ?? 'none'; $orderProduct->discount = $product[ 'discount' ] ?? 0; $orderProduct->discount_percentage = $product[ 'discount_percentage' ] ?? 0; $orderProduct->total_purchase_price = $this->currencyService->define( - $product[ 'total_purchase_price' ] ?? Currency::fresh($this->productService->getLastPurchasePrice( + $product[ 'total_purchase_price' ] ?? Currency::fresh( $this->productService->getLastPurchasePrice( product: $product[ 'product' ], unit: $unit - )) - ->multipliedBy($product[ 'quantity' ]) + ) ) + ->multipliedBy( $product[ 'quantity' ] ) ->getRaw() ) ->getRaw(); - $this->computeOrderProduct($orderProduct); + $this->computeOrderProduct( $orderProduct ); $orderProduct->save(); - $subTotal = $this->currencyService->define($subTotal) - ->additionateBy($orderProduct->total_price) + $subTotal = $this->currencyService->define( $subTotal ) + ->additionateBy( $orderProduct->total_price ) ->get(); if ( - in_array($order[ 'payment_status' ], [ Order::PAYMENT_PAID, Order::PAYMENT_PARTIALLY, Order::PAYMENT_UNPAID ]) && + in_array( $order[ 'payment_status' ], [ Order::PAYMENT_PAID, Order::PAYMENT_PARTIALLY, Order::PAYMENT_UNPAID ] ) && $product[ 'product' ] instanceof Product ) { /** @@ -1169,28 +1169,28 @@ private function __saveOrderProducts($order, $products) * already exists and which are edited. We'll here only records * products that doesn't exists yet. */ - $stockHistoryExists = ProductHistory::where('order_product_id', $orderProduct->id) - ->where('operation_type', ProductHistory::ACTION_SOLD) + $stockHistoryExists = ProductHistory::where( 'order_product_id', $orderProduct->id ) + ->where( 'operation_type', ProductHistory::ACTION_SOLD ) ->count() === 1; - if (! $stockHistoryExists) { - $this->productService->stockAdjustment(ProductHistory::ACTION_SOLD, $history); + if ( ! $stockHistoryExists ) { + $this->productService->stockAdjustment( ProductHistory::ACTION_SOLD, $history ); } } - event(new OrderProductAfterSavedEvent($orderProduct, $order, $product)); + event( new OrderProductAfterSavedEvent( $orderProduct, $order, $product ) ); return $orderProduct; - }); + } ); $order->subtotal = $subTotal; - return compact('subTotal', 'order', 'orderProducts'); + return compact( 'subTotal', 'order', 'orderProducts' ); } - private function __buildOrderProducts($products) + private function __buildOrderProducts( $products ) { - return collect($products)->map(function ($orderProduct) { + return collect( $products )->map( function ( $orderProduct ) { /** * by default, we'll assume a quick * product is being created. @@ -1198,16 +1198,16 @@ private function __buildOrderProducts($products) $product = null; $productUnitQuantity = null; - if (! empty($orderProduct[ 'sku' ] ?? null) || ! empty($orderProduct[ 'product_id' ] ?? null)) { - $product = Cache::remember('store-' . ($orderProduct['product_id'] ?? $orderProduct['sku']), 60, function () use ($orderProduct) { - if (! empty($orderProduct['product_id'] ?? null)) { - return $this->productService->get($orderProduct['product_id']); - } elseif (! empty($orderProduct['sku'] ?? null)) { - return $this->productService->getProductUsingSKUOrFail($orderProduct['sku']); + if ( ! empty( $orderProduct[ 'sku' ] ?? null ) || ! empty( $orderProduct[ 'product_id' ] ?? null ) ) { + $product = Cache::remember( 'store-' . ( $orderProduct['product_id'] ?? $orderProduct['sku'] ), 60, function () use ( $orderProduct ) { + if ( ! empty( $orderProduct['product_id'] ?? null ) ) { + return $this->productService->get( $orderProduct['product_id'] ); + } elseif ( ! empty( $orderProduct['sku'] ?? null ) ) { + return $this->productService->getProductUsingSKUOrFail( $orderProduct['sku'] ); } - }); + } ); - $productUnitQuantity = ProductUnitQuantity::findOrFail($orderProduct[ 'unit_quantity_id' ]); + $productUnitQuantity = ProductUnitQuantity::findOrFail( $orderProduct[ 'unit_quantity_id' ] ); } $orderProduct = $this->__buildOrderProduct( @@ -1217,15 +1217,15 @@ private function __buildOrderProducts($products) ); return $orderProduct; - }); + } ); } /** * @return SupportCollection $items */ - private function __checkProductStock(SupportCollection $items, Order $order = null) + private function __checkProductStock( SupportCollection $items, ?Order $order = null ) { - $session_identifier = Str::random('10'); + $session_identifier = Str::random( '10' ); /** * here comes a loop. @@ -1234,28 +1234,28 @@ private function __checkProductStock(SupportCollection $items, Order $order = nu * we'll also populate the unit for the item * so that it can be reused */ - $items = $items->map(function (array $orderProduct) use ($session_identifier) { - if ($orderProduct[ 'product' ] instanceof Product) { + $items = $items->map( function ( array $orderProduct ) use ( $session_identifier ) { + if ( $orderProduct[ 'product' ] instanceof Product ) { /** * Checking inventory for the grouped products, * by loading all the subitems and multiplying the quantity * with the order quantity. */ - if ($orderProduct[ 'product' ]->type === Product::TYPE_GROUPED) { - $orderProduct[ 'product' ]->load('sub_items.product'); + if ( $orderProduct[ 'product' ]->type === Product::TYPE_GROUPED ) { + $orderProduct[ 'product' ]->load( 'sub_items.product' ); $orderProduct[ 'product' ] ->sub_items - ->each(function (ProductSubItem $subitem) use ($session_identifier, $orderProduct) { + ->each( function ( ProductSubItem $subitem ) use ( $session_identifier, $orderProduct ) { /** * Stock management should be enabled * for the sub item. */ - if ($subitem->product->stock_management === Product::STOCK_MANAGEMENT_ENABLED) { + if ( $subitem->product->stock_management === Product::STOCK_MANAGEMENT_ENABLED ) { /** * We need a fake orderProduct * that will have necessary attributes for verification. */ - $parentUnit = $this->unitService->get($orderProduct[ 'unit_id' ]); + $parentUnit = $this->unitService->get( $orderProduct[ 'unit_id' ] ); /** * computing the exact quantity that will be pulled @@ -1278,7 +1278,7 @@ private function __checkProductStock(SupportCollection $items, Order $order = nu session_identifier: $session_identifier ); } - }); + } ); } else { $this->checkQuantityAvailability( product: $orderProduct[ 'product' ], @@ -1290,9 +1290,9 @@ private function __checkProductStock(SupportCollection $items, Order $order = nu } return $orderProduct; - }); + } ); - OrderAfterProductStockCheckedEvent::dispatch($items, $session_identifier); + OrderAfterProductStockCheckedEvent::dispatch( $items, $session_identifier ); return $items; } @@ -1303,13 +1303,13 @@ private function __checkProductStock(SupportCollection $items, Order $order = nu * @param array Order Product * @return array Order Product (updated) */ - public function __buildOrderProduct(array $orderProduct, ProductUnitQuantity $productUnitQuantity = null, Product $product = null) + public function __buildOrderProduct( array $orderProduct, ?ProductUnitQuantity $productUnitQuantity = null, ?Product $product = null ) { /** * This will calculate the product default field * when they aren't provided. */ - $orderProduct = $this->computeProduct($orderProduct, $product, $productUnitQuantity); + $orderProduct = $this->computeProduct( $orderProduct, $product, $productUnitQuantity ); $orderProduct[ 'unit_id' ] = $productUnitQuantity->unit->id ?? $orderProduct[ 'unit_id' ] ?? 0; $orderProduct[ 'unit_quantity_id' ] = $productUnitQuantity->id ?? 0; $orderProduct[ 'product' ] = $product; @@ -1321,9 +1321,9 @@ public function __buildOrderProduct(array $orderProduct, ProductUnitQuantity $pr return $orderProduct; } - public function checkQuantityAvailability($product, $productUnitQuantity, $orderProduct, $session_identifier) + public function checkQuantityAvailability( $product, $productUnitQuantity, $orderProduct, $session_identifier ) { - if ($product->stock_management === Product::STOCK_MANAGEMENT_ENABLED) { + if ( $product->stock_management === Product::STOCK_MANAGEMENT_ENABLED ) { /** * What we're doing here * 1 - Get the unit assigned to the product being sold @@ -1331,10 +1331,10 @@ public function checkQuantityAvailability($product, $productUnitQuantity, $order * 3 - If the a group is assigned to a product, the we check if that unit belongs to the unit group */ try { - $storageQuantity = OrderStorage::withIdentifier($session_identifier) - ->withProduct($product->id) - ->withUnitQuantity($orderProduct[ 'unit_quantity_id' ]) - ->sum('quantity'); + $storageQuantity = OrderStorage::withIdentifier( $session_identifier ) + ->withProduct( $product->id ) + ->withUnitQuantity( $orderProduct[ 'unit_quantity_id' ] ) + ->sum( 'quantity' ); $orderProductQuantity = $orderProduct[ 'quantity' ]; @@ -1345,28 +1345,28 @@ public function checkQuantityAvailability($product, $productUnitQuantity, $order */ $quantityToIgnore = 0; - if (isset($orderProduct[ 'id' ])) { - $stockWasDeducted = ProductHistory::where('order_product_id', $orderProduct[ 'id' ]) - ->where('operation_type', ProductHistory::ACTION_SOLD) + if ( isset( $orderProduct[ 'id' ] ) ) { + $stockWasDeducted = ProductHistory::where( 'order_product_id', $orderProduct[ 'id' ] ) + ->where( 'operation_type', ProductHistory::ACTION_SOLD ) ->count() === 1; /** * Only when the stock was deducted, we'll ignore the quantity * that is currently in use by the order product. */ - if ($stockWasDeducted) { - $orderProductRerefence = OrderProduct::find($orderProduct[ 'id' ]); + if ( $stockWasDeducted ) { + $orderProductRerefence = OrderProduct::find( $orderProduct[ 'id' ] ); $quantityToIgnore = $orderProductRerefence->quantity; } } - if (($productUnitQuantity->quantity + $quantityToIgnore) - $storageQuantity < abs($orderProductQuantity)) { + if ( ( $productUnitQuantity->quantity + $quantityToIgnore ) - $storageQuantity < abs( $orderProductQuantity ) ) { throw new \Exception( sprintf( - __('Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s'), + __( 'Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s' ), $product->name, $productUnitQuantity->unit->name, - abs($orderProductQuantity), + abs( $orderProductQuantity ), $productUnitQuantity->quantity - $storageQuantity ) ); @@ -1383,10 +1383,10 @@ public function checkQuantityAvailability($product, $productUnitQuantity, $order $storage->quantity = $orderProduct[ 'quantity' ]; $storage->session_identifier = $session_identifier; $storage->save(); - } catch (NotFoundException $exception) { + } catch ( NotFoundException $exception ) { throw new \Exception( sprintf( - __('Unable to proceed, the product "%s" has a unit which cannot be retreived. It might have been deleted.'), + __( 'Unable to proceed, the product "%s" has a unit which cannot be retreived. It might have been deleted.' ), $product->name ) ); @@ -1394,9 +1394,9 @@ public function checkQuantityAvailability($product, $productUnitQuantity, $order } } - public function computeProduct($fields, Product $product = null, ProductUnitQuantity $productUnitQuantity = null) + public function computeProduct( $fields, ?Product $product = null, ?ProductUnitQuantity $productUnitQuantity = null ) { - $sale_price = ($fields[ 'unit_price' ] ?? $productUnitQuantity->sale_price); + $sale_price = ( $fields[ 'unit_price' ] ?? $productUnitQuantity->sale_price ); /** * if the discount value wasn't provided, it would have @@ -1404,10 +1404,10 @@ public function computeProduct($fields, Product $product = null, ProductUnitQuan * informations. */ if ( - isset($fields[ 'discount_percentage' ]) && - isset($fields[ 'discount_type' ]) && - $fields[ 'discount_type' ] === 'percentage') { - $fields[ 'discount' ] = ($fields[ 'discount' ] ?? (($sale_price * $fields[ 'discount_percentage' ]) / 100) * $fields[ 'quantity' ]); + isset( $fields[ 'discount_percentage' ] ) && + isset( $fields[ 'discount_type' ] ) && + $fields[ 'discount_type' ] === 'percentage' ) { + $fields[ 'discount' ] = ( $fields[ 'discount' ] ?? ( ( $sale_price * $fields[ 'discount_percentage' ] ) / 100 ) * $fields[ 'quantity' ] ); } else { $fields[ 'discount' ] = $fields[ 'discount' ] ?? 0; } @@ -1417,7 +1417,7 @@ public function computeProduct($fields, Product $product = null, ProductUnitQuan * it should compute the tax otherwise * the value is "0". */ - if (empty($fields[ 'tax_value' ])) { + if ( empty( $fields[ 'tax_value' ] ) ) { $fields[ 'tax_value' ] = $this->currencyService->define( $this->taxService->getComputedTaxGroupValue( tax_type: $fields[ 'tax_type' ] ?? $product->tax_type ?? null, @@ -1425,7 +1425,7 @@ public function computeProduct($fields, Product $product = null, ProductUnitQuan price: $sale_price ) ) - ->multiplyBy(floatval($fields[ 'quantity' ])) + ->multiplyBy( floatval( $fields[ 'quantity' ] ) ) ->toFloat(); } @@ -1433,9 +1433,9 @@ public function computeProduct($fields, Product $product = null, ProductUnitQuan * If the total_price is not defined * let's compute that */ - if (empty($fields[ 'total_price' ])) { + if ( empty( $fields[ 'total_price' ] ) ) { $fields[ 'total_price' ] = ( - $sale_price * floatval($fields[ 'quantity' ]) + $sale_price * floatval( $fields[ 'quantity' ] ) ) - $fields[ 'discount' ]; } @@ -1446,37 +1446,37 @@ public function computeProduct($fields, Product $product = null, ProductUnitQuan * @todo we need to be able to * change the code format */ - public function generateOrderCode($order) + public function generateOrderCode( $order ) { - $now = Carbon::parse($order->created_at); + $now = Carbon::parse( $order->created_at ); $today = $now->toDateString(); - $count = DB::table('nexopos_orders_count') - ->where('date', $today) - ->value('count'); + $count = DB::table( 'nexopos_orders_count' ) + ->where( 'date', $today ) + ->value( 'count' ); - if ($count === null) { + if ( $count === null ) { $count = 1; - DB::table('nexopos_orders_count') - ->insert([ + DB::table( 'nexopos_orders_count' ) + ->insert( [ 'date' => $today, 'count' => $count, - ]); + ] ); } - DB::table('nexopos_orders_count') - ->where('date', $today) - ->increment('count'); + DB::table( 'nexopos_orders_count' ) + ->where( 'date', $today ) + ->increment( 'count' ); - return $now->format('y') . $now->format('m') . $now->format('d') . '-' . str_pad($count, 3, 0, STR_PAD_LEFT); + return $now->format( 'y' ) . $now->format( 'm' ) . $now->format( 'd' ) . '-' . str_pad( $count, 3, 0, STR_PAD_LEFT ); } - protected function __initOrder($fields, $paymentStatus, $order) + protected function __initOrder( $fields, $paymentStatus, $order ) { /** * if the order is not provided as a parameter * a new instance is initialized. */ - if (! $order instanceof Order) { + if ( ! $order instanceof Order ) { $order = new Order; /** @@ -1491,10 +1491,10 @@ protected function __initOrder($fields, $paymentStatus, $order) * saved while creating the order, it should be * explicitly allowed on this filter */ - foreach (Hook::filter('ns-order-attributes', []) as $attribute) { - if (! in_array($attribute, [ + foreach ( Hook::filter( 'ns-order-attributes', [] ) as $attribute ) { + if ( ! in_array( $attribute, [ 'id', - ])) { + ] ) ) { $order->$attribute = $fields[ $attribute ] ?? null; } } @@ -1504,21 +1504,21 @@ protected function __initOrder($fields, $paymentStatus, $order) * his initial state */ $order->customer_id = $fields['customer_id']; - $order->shipping = $this->currencyService->getRaw($fields[ 'shipping' ] ?? 0); // if shipping is not provided, we assume it's free - $order->subtotal = $this->currencyService->getRaw($fields[ 'subtotal' ] ?? 0) ?: $this->computeSubTotal($fields, $order); + $order->shipping = $this->currencyService->getRaw( $fields[ 'shipping' ] ?? 0 ); // if shipping is not provided, we assume it's free + $order->subtotal = $this->currencyService->getRaw( $fields[ 'subtotal' ] ?? 0 ) ?: $this->computeSubTotal( $fields, $order ); $order->discount_type = $fields['discount_type'] ?? null; - $order->discount_percentage = $this->currencyService->getRaw($fields['discount_percentage'] ?? 0); + $order->discount_percentage = $this->currencyService->getRaw( $fields['discount_percentage'] ?? 0 ); $order->discount = ( - $this->currencyService->getRaw($order->discount_type === 'flat' && isset($fields['discount']) ? $fields['discount'] : 0) - ) ?: ($order->discount_type === 'percentage' ? $this->computeOrderDiscount($order, $fields) : 0); - $order->total = $this->currencyService->getRaw($fields[ 'total' ] ?? 0) ?: $this->computeTotal($fields, $order); + $this->currencyService->getRaw( $order->discount_type === 'flat' && isset( $fields['discount'] ) ? $fields['discount'] : 0 ) + ) ?: ( $order->discount_type === 'percentage' ? $this->computeOrderDiscount( $order, $fields ) : 0 ); + $order->total = $this->currencyService->getRaw( $fields[ 'total' ] ?? 0 ) ?: $this->computeTotal( $fields, $order ); $order->type = $fields['type']['identifier']; - $order->final_payment_date = isset($fields['final_payment_date' ]) ? Carbon::parse($fields['final_payment_date' ])->format('Y-m-d h:m:s') : null; // when the order is not saved as laid away + $order->final_payment_date = isset( $fields['final_payment_date' ] ) ? Carbon::parse( $fields['final_payment_date' ] )->format( 'Y-m-d h:m:s' ) : null; // when the order is not saved as laid away $order->total_instalments = $fields[ 'total_instalments' ] ?? 0; $order->register_id = $fields[ 'register_id' ] ?? null; $order->note = $fields[ 'note'] ?? null; $order->note_visibility = $fields[ 'note_visibility' ] ?? null; - $order->updated_at = isset($fields[ 'updated_at' ]) ? Carbon::parse($fields[ 'updated_at' ])->format('Y-m-d h:m:s') : ns()->date->getNow()->toDateTimeString(); + $order->updated_at = isset( $fields[ 'updated_at' ] ) ? Carbon::parse( $fields[ 'updated_at' ] )->format( 'Y-m-d h:m:s' ) : ns()->date->getNow()->toDateTimeString(); $order->tax_group_id = $fields['tax_group_id' ] ?? null; $order->tax_type = $fields['tax_type' ] ?? null; $order->total_coupons = $fields['total_coupons'] ?? 0; @@ -1528,14 +1528,14 @@ protected function __initOrder($fields, $paymentStatus, $order) $order->support_instalments = $fields[ 'support_instalments' ] ?? true; // by default instalments are supported $order->author = $fields[ 'author' ] ?? Auth::id(); // the author can now be changed $order->title = $fields[ 'title' ] ?? null; - $order->tax_value = $this->currencyService->define($fields[ 'tax_value' ] ?? 0)->toFloat(); - $order->products_tax_value = $this->currencyService->define($fields[ 'products_tax_value' ] ?? 0)->toFloat(); - $order->total_tax_value = $this->currencyService->define($fields[ 'total_tax_value' ] ?? 0)->toFloat(); + $order->tax_value = $this->currencyService->define( $fields[ 'tax_value' ] ?? 0 )->toFloat(); + $order->products_tax_value = $this->currencyService->define( $fields[ 'products_tax_value' ] ?? 0 )->toFloat(); + $order->total_tax_value = $this->currencyService->define( $fields[ 'total_tax_value' ] ?? 0 )->toFloat(); $order->code = $order->code ?: ''; // to avoid generating a new code $order->save(); - if ($order->code === '') { - $order->code = $this->generateOrderCode($order); // to avoid generating a new code + if ( $order->code === '' ) { + $order->code = $this->generateOrderCode( $order ); // to avoid generating a new code } /** @@ -1543,8 +1543,8 @@ protected function __initOrder($fields, $paymentStatus, $order) * delivery and process status updated * according to the order type */ - $this->updateDeliveryStatus($order); - $this->updateProcessStatus($order); + $this->updateDeliveryStatus( $order ); + $this->updateProcessStatus( $order ); $order->save(); @@ -1556,17 +1556,17 @@ protected function __initOrder($fields, $paymentStatus, $order) * * @return void */ - public function updateProcessStatus(Order $order) + public function updateProcessStatus( Order $order ) { - if (in_array($order->type, [ 'delivery', 'takeaway' ])) { - if ($order->type === 'delivery') { + if ( in_array( $order->type, [ 'delivery', 'takeaway' ] ) ) { + if ( $order->type === 'delivery' ) { $order->process_status = 'pending'; } else { $order->process_status = 'not-available'; } } - OrderAfterUpdatedProcessStatus::dispatch($order); + OrderAfterUpdatedProcessStatus::dispatch( $order ); } /** @@ -1574,26 +1574,26 @@ public function updateProcessStatus(Order $order) * * @return void */ - public function updateDeliveryStatus(Order $order) + public function updateDeliveryStatus( Order $order ) { - if (in_array($order->type, [ 'delivery', 'takeaway' ])) { - if ($order->type === 'delivery') { + if ( in_array( $order->type, [ 'delivery', 'takeaway' ] ) ) { + if ( $order->type === 'delivery' ) { $order->delivery_status = 'pending'; } else { $order->delivery_status = 'not-available'; } } - OrderAfterUpdatedDeliveryStatus::dispatch($order); + OrderAfterUpdatedDeliveryStatus::dispatch( $order ); } /** * Compute the discount data * - * @param array $fields - * @return int $discount + * @param array $fields + * @return int $discount */ - public function computeOrderDiscount($order, $fields = []) + public function computeOrderDiscount( $order, $fields = [] ) { $fields[ 'discount_type' ] = $fields[ 'discount_type' ] ?? $order->discount_type; $fields[ 'discount_percentage' ] = $fields[ 'discount_percentage' ] ?? $order->discount_percentage; @@ -1601,11 +1601,11 @@ public function computeOrderDiscount($order, $fields = []) $fields[ 'subtotal' ] = $fields[ 'subtotal' ] ?? $order->subtotal; $fields[ 'discount' ] = $fields[ 'discount' ] ?? $order->discount ?? 0; - if (! empty($fields[ 'discount_type' ]) && ! empty($fields[ 'discount_percentage' ]) && $fields[ 'discount_type' ] === 'percentage') { - return $this->currencyService->define(($fields[ 'subtotal' ] * $fields[ 'discount_percentage' ]) / 100) + if ( ! empty( $fields[ 'discount_type' ] ) && ! empty( $fields[ 'discount_percentage' ] ) && $fields[ 'discount_type' ] === 'percentage' ) { + return $this->currencyService->define( ( $fields[ 'subtotal' ] * $fields[ 'discount_percentage' ] ) / 100 ) ->getRaw(); } else { - return $this->currencyService->getRaw($fields[ 'discount' ]); + return $this->currencyService->getRaw( $fields[ 'discount' ] ); } } @@ -1613,62 +1613,62 @@ public function computeOrderDiscount($order, $fields = []) * Will compute a tax value using * the taxes assigned to an order * - * @param float $value - * @param string $type - * @return float value + * @param float $value + * @param string $type + * @return float value */ - public function computeTaxFromOrderTaxes(Order $order, $value, $type = 'inclusive') + public function computeTaxFromOrderTaxes( Order $order, $value, $type = 'inclusive' ) { - return $order->taxes->map(function ($tax) use ($value, $type) { + return $order->taxes->map( function ( $tax ) use ( $value, $type ) { $result = $this->taxService->getVatValue( $type, $tax->rate, $value ); return $result; - })->sum(); + } )->sum(); } /** * will compute the taxes based * on the configuration and the products */ - public function computeOrderTaxes(Order $order) + public function computeOrderTaxes( Order $order ) { - $posVat = ns()->option->get('ns_pos_vat'); + $posVat = ns()->option->get( 'ns_pos_vat' ); $taxValue = 0; - if (in_array($posVat, [ + if ( in_array( $posVat, [ 'products_vat', 'products_flat_vat', 'products_variable_vat', - ])) { + ] ) ) { $taxValue = $order ->products() ->validProducts() ->get() - ->map(function ($product) { - return floatval($product->tax_value); - })->sum(); - } elseif (in_array($posVat, [ + ->map( function ( $product ) { + return floatval( $product->tax_value ); + } )->sum(); + } elseif ( in_array( $posVat, [ 'flat_vat', 'variable_vat', - ]) && $order->taxes->count() > 0) { + ] ) && $order->taxes->count() > 0 ) { $subTotal = $order->products() ->validProducts() - ->sum('total_price'); + ->sum( 'total_price' ); $response = $this->taxService->getTaxesComputed( tax_type: $order->tax_type, - rates: $order->taxes->map(fn($tax) => $tax->rate)->toArray(), + rates: $order->taxes->map( fn( $tax ) => $tax->rate )->toArray(), value: $subTotal ); - $taxValue = $order->taxes->map(function ($tax, $index) use ($response) { + $taxValue = $order->taxes->map( function ( $tax, $index ) use ( $response ) { $tax->tax_value = $response[ 'percentages' ][ $index ][ 'tax' ]; $tax->save(); return $tax->tax_value; - })->sum(); + } )->sum(); } $order->tax_value = $taxValue; @@ -1677,71 +1677,71 @@ public function computeOrderTaxes(Order $order) /** * return the tax value for the products * - * @param array $fields - * @param Order $order + * @param array $fields + * @param Order $order * @return float */ - public function getOrderProductsTaxes($order) + public function getOrderProductsTaxes( $order ) { - return $this->currencyService->define($order + return $this->currencyService->define( $order ->products() ->get() - ->map(fn($product) => $product->tax_value)->sum() + ->map( fn( $product ) => $product->tax_value )->sum() )->toFloat(); } - public function computeTotal($fields, $order) + public function computeTotal( $fields, $order ) { - return $this->currencyService->define($order->subtotal) - ->subtractBy($order->discount) - ->additionateBy($order->shipping) + return $this->currencyService->define( $order->subtotal ) + ->subtractBy( $order->discount ) + ->additionateBy( $order->shipping ) ->toFloat(); } - public function computeSubTotal($fields, $order) + public function computeSubTotal( $fields, $order ) { return $this->currencyService->define( - collect($fields[ 'products' ]) - ->map(fn($product) => floatval($product[ 'total_price' ])) + collect( $fields[ 'products' ] ) + ->map( fn( $product ) => floatval( $product[ 'total_price' ] ) ) ->sum() ) ->toFloat(); } - private function __customerIsDefined($fields) + private function __customerIsDefined( $fields ) { try { - return $this->customerService->get($fields['customer_id']); - } catch (NotFoundException $exception) { - throw new NotFoundException(__('Unable to find the customer using the provided ID. The order creation has failed.')); + return $this->customerService->get( $fields['customer_id'] ); + } catch ( NotFoundException $exception ) { + throw new NotFoundException( __( 'Unable to find the customer using the provided ID. The order creation has failed.' ) ); } } - public function refundOrder(Order $order, $fields) + public function refundOrder( Order $order, $fields ) { - if (! in_array($order->payment_status, [ + if ( ! in_array( $order->payment_status, [ Order::PAYMENT_PARTIALLY, Order::PAYMENT_UNPAID, Order::PAYMENT_PAID, Order::PAYMENT_PARTIALLY_REFUNDED, - ])) { - throw new NotAllowedException(__('Unable to proceed a refund on an unpaid order.')); + ] ) ) { + throw new NotAllowedException( __( 'Unable to proceed a refund on an unpaid order.' ) ); } $orderRefund = new OrderRefund; $orderRefund->author = Auth::id(); $orderRefund->order_id = $order->id; $orderRefund->payment_method = $fields[ 'payment' ][ 'identifier' ]; - $orderRefund->shipping = (isset($fields[ 'refund_shipping' ]) && $fields[ 'refund_shipping' ] ? $order->shipping : 0); + $orderRefund->shipping = ( isset( $fields[ 'refund_shipping' ] ) && $fields[ 'refund_shipping' ] ? $order->shipping : 0 ); $orderRefund->total = 0; $orderRefund->save(); - OrderRefundPaymentAfterCreatedEvent::dispatch($orderRefund); + OrderRefundPaymentAfterCreatedEvent::dispatch( $orderRefund ); $results = []; - foreach ($fields[ 'products' ] as $product) { - $results[] = $this->refundSingleProduct($order, $orderRefund, OrderProduct::find($product[ 'id' ]), $product); + foreach ( $fields[ 'products' ] as $product ) { + $results[] = $this->refundSingleProduct( $order, $orderRefund, OrderProduct::find( $product[ 'id' ] ), $product ); } /** @@ -1750,26 +1750,26 @@ public function refundOrder(Order $order, $fields) */ $shipping = 0; - if (isset($fields[ 'refund_shipping' ]) && $fields[ 'refund_shipping' ] === true) { + if ( isset( $fields[ 'refund_shipping' ] ) && $fields[ 'refund_shipping' ] === true ) { $shipping = $order->shipping; $order->shipping = 0; } - $taxValue = collect($results)->map(function ($result) { + $taxValue = collect( $results )->map( function ( $result ) { $refundProduct = $result[ 'data' ][ 'productRefund' ]; return $refundProduct->tax_value; - })->sum() ?: 0; + } )->sum() ?: 0; - $orderRefund->tax_value = ns()->currency->define($taxValue)->toFloat(); + $orderRefund->tax_value = ns()->currency->define( $taxValue )->toFloat(); /** * let's update the order refund total */ - $orderRefund->load('refunded_products'); + $orderRefund->load( 'refunded_products' ); $orderRefund->total = Currency::define( - $orderRefund->refunded_products->sum('total_price') - )->additionateBy($shipping)->toFloat(); + $orderRefund->refunded_products->sum( 'total_price' ) + )->additionateBy( $shipping )->toFloat(); $orderRefund->save(); @@ -1777,45 +1777,45 @@ public function refundOrder(Order $order, $fields) * check if the payment used is the customer account * so that we can withdraw the funds to the account */ - if ($fields[ 'payment' ][ 'identifier' ] === OrderPayment::PAYMENT_ACCOUNT) { + if ( $fields[ 'payment' ][ 'identifier' ] === OrderPayment::PAYMENT_ACCOUNT ) { $this->customerService->saveTransaction( $order->customer, CustomerAccountHistory::OPERATION_REFUND, $fields[ 'total' ], - __('The current credit has been issued from a refund.'), [ + __( 'The current credit has been issued from a refund.' ), [ 'order_id' => $order->id, ] ); } - OrderAfterRefundedEvent::dispatch($order, $orderRefund); + OrderAfterRefundedEvent::dispatch( $order, $orderRefund ); return [ 'status' => 'success', - 'message' => __('The order has been successfully refunded.'), - 'data' => compact('results', 'order', 'orderRefund'), + 'message' => __( 'The order has been successfully refunded.' ), + 'data' => compact( 'results', 'order', 'orderRefund' ), ]; } /** * Refund a single product from an order. */ - public function refundSingleProduct(Order $order, OrderRefund $orderRefund, OrderProduct $orderProduct, array $details): array + public function refundSingleProduct( Order $order, OrderRefund $orderRefund, OrderProduct $orderProduct, array $details ): array { - if (! in_array($details[ 'condition' ], [ + if ( ! in_array( $details[ 'condition' ], [ OrderProductRefund::CONDITION_DAMAGED, OrderProductRefund::CONDITION_UNSPOILED, - ])) { - throw new NotAllowedException(__('unable to proceed to a refund as the provided status is not supported.')); + ] ) ) { + throw new NotAllowedException( __( 'unable to proceed to a refund as the provided status is not supported.' ) ); } - if (! in_array($order->payment_status, [ + if ( ! in_array( $order->payment_status, [ Order::PAYMENT_PARTIALLY, Order::PAYMENT_PARTIALLY_REFUNDED, Order::PAYMENT_UNPAID, Order::PAYMENT_PAID, - ])) { - throw new NotAllowedException(__('Unable to proceed a refund on an unpaid order.')); + ] ) ) { + throw new NotAllowedException( __( 'Unable to proceed a refund on an unpaid order.' ) ); } /** @@ -1823,9 +1823,9 @@ public function refundSingleProduct(Order $order, OrderRefund $orderRefund, Orde * available on the order for a specific product. */ $orderProduct->status = 'returned'; - $orderProduct->quantity -= floatval($details[ 'quantity' ]); + $orderProduct->quantity -= floatval( $details[ 'quantity' ] ); - $this->computeOrderProduct($orderProduct); + $this->computeOrderProduct( $orderProduct ); $orderProduct->save(); @@ -1840,7 +1840,7 @@ public function refundSingleProduct(Order $order, OrderRefund $orderRefund, Orde $productRefund->unit_id = $orderProduct->unit_id; $productRefund->total_price = $this->currencyService - ->getRaw($productRefund->unit_price * floatval($details[ 'quantity' ])); + ->getRaw( $productRefund->unit_price * floatval( $details[ 'quantity' ] ) ); $productRefund->quantity = $details[ 'quantity' ]; $productRefund->author = Auth::id(); $productRefund->order_id = $order->id; @@ -1850,23 +1850,23 @@ public function refundSingleProduct(Order $order, OrderRefund $orderRefund, Orde $productRefund->tax_value = $this->computeTaxFromOrderTaxes( $order, - Currency::raw($details[ 'unit_price' ] * $details[ 'quantity' ]), - ns()->option->get('ns_pos_tax_type') + Currency::raw( $details[ 'unit_price' ] * $details[ 'quantity' ] ), + ns()->option->get( 'ns_pos_tax_type' ) ); $productRefund->save(); - event(new OrderAfterProductRefundedEvent($order, $orderProduct, $productRefund)); + event( new OrderAfterProductRefundedEvent( $order, $orderProduct, $productRefund ) ); /** * We should adjust the stock only if a valid product * is being refunded. */ - if (! empty($orderProduct->product_id)) { + if ( ! empty( $orderProduct->product_id ) ) { /** * we do proceed by doing an initial return */ - $this->productService->stockAdjustment(ProductHistory::ACTION_RETURNED, [ + $this->productService->stockAdjustment( ProductHistory::ACTION_RETURNED, [ 'total_price' => $productRefund->total_price, 'quantity' => $productRefund->quantity, 'unit_price' => $productRefund->unit_price, @@ -1874,14 +1874,14 @@ public function refundSingleProduct(Order $order, OrderRefund $orderRefund, Orde 'orderProduct' => $orderProduct, 'unit_id' => $productRefund->unit_id, 'order_id' => $order->id, - ]); + ] ); /** * If the returned stock is damaged * then we can pull this out from the stock */ - if ($details[ 'condition' ] === OrderProductRefund::CONDITION_DAMAGED) { - $this->productService->stockAdjustment(ProductHistory::ACTION_DEFECTIVE, [ + if ( $details[ 'condition' ] === OrderProductRefund::CONDITION_DAMAGED ) { + $this->productService->stockAdjustment( ProductHistory::ACTION_DEFECTIVE, [ 'total_price' => $productRefund->total_price, 'quantity' => $productRefund->quantity, 'unit_price' => $productRefund->unit_price, @@ -1889,17 +1889,17 @@ public function refundSingleProduct(Order $order, OrderRefund $orderRefund, Orde 'orderProduct' => $orderProduct, 'unit_id' => $productRefund->unit_id, 'order_id' => $order->id, - ]); + ] ); } } return [ 'status' => 'success', 'message' => sprintf( - __('The product %s has been successfully refunded.'), + __( 'The product %s has been successfully refunded.' ), $orderProduct->name ), - 'data' => compact('productRefund', 'orderProduct'), + 'data' => compact( 'productRefund', 'orderProduct' ), ]; } @@ -1909,9 +1909,9 @@ public function refundSingleProduct(Order $order, OrderRefund $orderRefund, Orde * * @return void */ - public function computeOrderProduct(OrderProduct $orderProduct) + public function computeOrderProduct( OrderProduct $orderProduct ) { - $orderProduct = $this->taxService->computeOrderProductTaxes($orderProduct); + $orderProduct = $this->taxService->computeOrderProductTaxes( $orderProduct ); OrderProductAfterComputedEvent::dispatch( $orderProduct, @@ -1922,14 +1922,14 @@ public function computeOrderProduct(OrderProduct $orderProduct) * compute a discount value using * provided values * - * @param float $rate - * @param float $value + * @param float $rate + * @param float $value * @return float */ - public function computeDiscountValues($rate, $value) + public function computeDiscountValues( $rate, $value ) { - if ($rate > 0) { - return Currency::fresh(($value * $rate) / 100)->getRaw(); + if ( $rate > 0 ) { + return Currency::fresh( ( $value * $rate ) / 100 )->getRaw(); } return 0; @@ -1941,12 +1941,12 @@ public function computeDiscountValues($rate, $value) * @param int product id * @return OrderProduct */ - public function getOrderProduct($product_id) + public function getOrderProduct( $product_id ) { - $product = OrderProduct::find($product_id); + $product = OrderProduct::find( $product_id ); - if (! $product instanceof OrderProduct) { - throw new NotFoundException(__('Unable to find the order product using the provided id.')); + if ( ! $product instanceof OrderProduct ) { + throw new NotFoundException( __( 'Unable to find the order product using the provided id.' ) ); } return $product; @@ -1959,12 +1959,12 @@ public function getOrderProduct($product_id) * @param string pivot * @return Collection */ - public function getOrderProducts($identifier, $pivot = 'id') + public function getOrderProducts( $identifier, $pivot = 'id' ) { - return $this->getOrder($identifier, $pivot) + return $this->getOrder( $identifier, $pivot ) ->products() ->validProducts() - ->with('unit') + ->with( 'unit' ) ->get(); } @@ -1976,27 +1976,27 @@ public function getOrderProducts($identifier, $pivot = 'id') * @param string pivot * @return Order */ - public function getOrder($identifier, $as = 'id') - { - if (in_array($as, ['id', 'code'])) { - $order = Order::where($as, $identifier) - ->with('payments') - ->with('shipping_address') - ->with('billing_address') - ->with('taxes') - ->with('instalments') - ->with('coupons') - ->with('products.unit') - ->with('products.product.unit_quantities') - ->with('customer.billing', 'customer.shipping') + public function getOrder( $identifier, $as = 'id' ) + { + if ( in_array( $as, ['id', 'code'] ) ) { + $order = Order::where( $as, $identifier ) + ->with( 'payments' ) + ->with( 'shipping_address' ) + ->with( 'billing_address' ) + ->with( 'taxes' ) + ->with( 'instalments' ) + ->with( 'coupons' ) + ->with( 'products.unit' ) + ->with( 'products.product.unit_quantities' ) + ->with( 'customer.billing', 'customer.shipping' ) ->first(); - if (! $order instanceof Order) { - throw new NotFoundException(sprintf( - __('Unable to find the requested order using "%s" as pivot and "%s" as identifier'), + if ( ! $order instanceof Order ) { + throw new NotFoundException( sprintf( + __( 'Unable to find the requested order using "%s" as pivot and "%s" as identifier' ), $as, $identifier - )); + ) ); } $order->products; @@ -2004,12 +2004,12 @@ public function getOrder($identifier, $as = 'id') /** * @deprecated */ - Hook::action('ns-load-order', $order); + Hook::action( 'ns-load-order', $order ); return $order; } - throw new NotAllowedException(__('Unable to fetch the order as the provided pivot argument is not supported.')); + throw new NotAllowedException( __( 'Unable to fetch the order as the provided pivot argument is not supported.' ) ); } /** @@ -2019,10 +2019,10 @@ public function getOrder($identifier, $as = 'id') * @param void * @return array of orders */ - public function getOrders($filter = 'mixed') + public function getOrders( $filter = 'mixed' ) { - if (in_array($filter, ['paid', 'unpaid', 'refunded'])) { - return Order::where('payment_status', $filter) + if ( in_array( $filter, ['paid', 'unpaid', 'refunded'] ) ) { + return Order::where( 'payment_status', $filter ) ->get(); } @@ -2036,9 +2036,9 @@ public function getOrders($filter = 'mixed') * @param array product * @return array response */ - public function addProducts(Order $order, $products) + public function addProducts( Order $order, $products ) { - $products = $this->__checkProductStock(collect($products), $order); + $products = $this->__checkProductStock( collect( $products ), $order ); /** * let's save the products @@ -2050,19 +2050,19 @@ public function addProducts(Order $order, $products) * @param float $taxes * @param float $subTotal */ - extract($this->__saveOrderProducts($order, $products)); + extract( $this->__saveOrderProducts( $order, $products ) ); /** * Now we should refresh the order * to have the total computed */ - $this->refreshOrder($order); + $this->refreshOrder( $order ); return [ 'status' => 'success', - 'data' => compact('orderProducts', 'order'), + 'data' => compact( 'orderProducts', 'order' ), 'message' => sprintf( - __('The product has been added to the order "%s"'), + __( 'The product has been added to the order "%s"' ), $order->code ), ]; @@ -2078,88 +2078,88 @@ public function addProducts(Order $order, $products) * * @todo test required */ - public function refreshOrder(Order $order) + public function refreshOrder( Order $order ) { $previousPaymentStatus = $order->payment_status; - $products = $this->getOrderProducts($order->id); + $products = $this->getOrderProducts( $order->id ); $productTotal = $products - ->map(function ($product) { - return floatval($product->total_price); - })->sum(); + ->map( function ( $product ) { + return floatval( $product->total_price ); + } )->sum(); - $productsQuantity = $products->map(function ($product) { - return floatval($product->quantity); - })->sum(); + $productsQuantity = $products->map( function ( $product ) { + return floatval( $product->quantity ); + } )->sum(); $productPriceWithoutTax = $products - ->map(function ($product) { - return floatval($product->total_price_without_tax); - })->sum(); + ->map( function ( $product ) { + return floatval( $product->total_price_without_tax ); + } )->sum(); $productPriceWithTax = $products - ->map(function ($product) { - return floatval($product->total_price_with_tax); - })->sum(); + ->map( function ( $product ) { + return floatval( $product->total_price_with_tax ); + } )->sum(); - $this->computeOrderTaxes($order); + $this->computeOrderTaxes( $order ); $orderShipping = $order->shipping; - $totalPayments = $order->payments->map(fn($payment) => $payment->value)->sum(); + $totalPayments = $order->payments->map( fn( $payment ) => $payment->value )->sum(); $order->tendered = $totalPayments; /** * let's refresh all the order values */ - $order->subtotal = Currency::raw($productTotal); + $order->subtotal = Currency::raw( $productTotal ); $order->total_without_tax = $productPriceWithoutTax; $order->total_with_tax = $productPriceWithTax; - $order->discount = $this->computeOrderDiscount($order); - $order->total = Currency::fresh($order->subtotal) - ->additionateBy($orderShipping) + $order->discount = $this->computeOrderDiscount( $order ); + $order->total = Currency::fresh( $order->subtotal ) + ->additionateBy( $orderShipping ) ->additionateBy( - ($order->tax_type === 'exclusive' ? $order->tax_value : 0) + ( $order->tax_type === 'exclusive' ? $order->tax_value : 0 ) ) ->subtractBy( - ns()->currency->fresh($order->discount) - ->additionateBy($order->total_coupons) + ns()->currency->fresh( $order->discount ) + ->additionateBy( $order->total_coupons ) ->getRaw() ) ->getRaw(); - $order->change = Currency::fresh($order->tendered)->subtractBy($order->total)->getRaw(); + $order->change = Currency::fresh( $order->tendered )->subtractBy( $order->total )->getRaw(); $refunds = $order->refunds; - $totalRefunds = $refunds->map(fn($refund) => $refund->total)->sum(); + $totalRefunds = $refunds->map( fn( $refund ) => $refund->total )->sum(); /** * We believe if the product total is greater * than "0", then probably the order hasn't been paid yet. */ - if ((float) $order->total == 0 && $totalRefunds > 0) { + if ( (float) $order->total == 0 && $totalRefunds > 0 ) { $order->payment_status = Order::PAYMENT_REFUNDED; - } elseif ($order->total > 0 && $totalRefunds > 0) { + } elseif ( $order->total > 0 && $totalRefunds > 0 ) { $order->payment_status = Order::PAYMENT_PARTIALLY_REFUNDED; - } elseif ($order->tendered >= $order->total && $order->payments->count() > 0 && $totalRefunds == 0) { + } elseif ( $order->tendered >= $order->total && $order->payments->count() > 0 && $totalRefunds == 0 ) { $order->payment_status = Order::PAYMENT_PAID; - } elseif ((float) $order->tendered < (float) $order->total && (float) $order->tendered > 0) { + } elseif ( (float) $order->tendered < (float) $order->total && (float) $order->tendered > 0 ) { $order->payment_status = Order::PAYMENT_PARTIALLY; - } elseif ($order->total == 0 && $order->tendered == 0) { + } elseif ( $order->total == 0 && $order->tendered == 0 ) { $order->payment_status = Order::PAYMENT_UNPAID; } $order->save(); - if ($previousPaymentStatus !== $order->payment_status) { - OrderAfterPaymentStatusChangedEvent::dispatch($order, $previousPaymentStatus, $order->payment_status); + if ( $previousPaymentStatus !== $order->payment_status ) { + OrderAfterPaymentStatusChangedEvent::dispatch( $order, $previousPaymentStatus, $order->payment_status ); } return [ 'status' => 'success', - 'message' => __('the order has been successfully computed.'), - 'data' => compact('order'), + 'message' => __( 'the order has been successfully computed.' ), + 'data' => compact( 'order' ), ]; } @@ -2170,9 +2170,9 @@ public function refreshOrder(Order $order) * @param Order order * @return array response */ - public function deleteOrder(Order $order) + public function deleteOrder( Order $order ) { - $cachedOrder = (object) $order->load([ + $cachedOrder = (object) $order->load( [ 'user', 'products', 'payments', @@ -2180,20 +2180,20 @@ public function deleteOrder(Order $order) 'taxes', 'coupons', 'instalments', - ])->toArray(); + ] )->toArray(); - event(new OrderBeforeDeleteEvent($cachedOrder)); + event( new OrderBeforeDeleteEvent( $cachedOrder ) ); /** * Because when an order is void, * the stock is already returned to the inventory. */ - if (! in_array($order->payment_status, [ Order::PAYMENT_VOID ])) { + if ( ! in_array( $order->payment_status, [ Order::PAYMENT_VOID ] ) ) { $order ->products() ->get() - ->each(function (OrderProduct $orderProduct) use ($order) { - $orderProduct->load('product'); + ->each( function ( OrderProduct $orderProduct ) use ( $order ) { + $orderProduct->load( 'product' ); $product = $orderProduct->product; /** * we do proceed by doing an initial return @@ -2201,7 +2201,7 @@ public function deleteOrder(Order $order) * we'll also check if the linked product still exists. */ if ( - ($orderProduct->product_id > 0 && $product instanceof Product) && + ( $orderProduct->product_id > 0 && $product instanceof Product ) && ( in_array( $order->payment_status, [ @@ -2210,39 +2210,39 @@ public function deleteOrder(Order $order) Order::PAYMENT_UNPAID, Order::PAYMENT_PARTIALLY_DUE, Order::PAYMENT_PARTIALLY_REFUNDED, - ]) + ] ) ) ) { - $this->productService->stockAdjustment(ProductHistory::ACTION_RETURNED, [ + $this->productService->stockAdjustment( ProductHistory::ACTION_RETURNED, [ 'total_price' => $orderProduct->total_price, 'product_id' => $orderProduct->product_id, 'unit_id' => $orderProduct->unit_id, 'orderProduct' => $orderProduct, 'quantity' => $orderProduct->quantity, 'unit_price' => $orderProduct->unit_price, - ]); + ] ); } $orderProduct->delete(); - }); + } ); } - OrderPayment::where('order_id', $order->id)->delete(); + OrderPayment::where( 'order_id', $order->id )->delete(); /** * delete cash flow entries */ - $this->reportService->deleteOrderCashFlow($order); + $this->reportService->deleteOrderCashFlow( $order ); $orderArray = $order->toArray(); $order->delete(); - event(new OrderAfterDeletedEvent((object) $orderArray)); + event( new OrderAfterDeletedEvent( (object) $orderArray ) ); return [ 'status' => 'success', - 'message' => __('The order has been deleted.'), + 'message' => __( 'The order has been deleted.' ), ]; } @@ -2254,29 +2254,29 @@ public function deleteOrder(Order $order) * @param int product id * @return array response */ - public function deleteOrderProduct(Order $order, $product_id) + public function deleteOrderProduct( Order $order, $product_id ) { $hasDeleted = false; - $order->products->map(function ($product) use ($product_id, &$hasDeleted, $order) { - if ($product->id === intval($product_id)) { - event(new OrderBeforeDeleteProductEvent($order, $product)); + $order->products->map( function ( $product ) use ( $product_id, &$hasDeleted, $order ) { + if ( $product->id === intval( $product_id ) ) { + event( new OrderBeforeDeleteProductEvent( $order, $product ) ); $product->delete(); $hasDeleted = true; } - }); + } ); - if ($hasDeleted) { - $this->refreshOrder($order); + if ( $hasDeleted ) { + $this->refreshOrder( $order ); return [ 'status' => 'success', - 'message' => __('The product has been successfully deleted from the order.'), + 'message' => __( 'The product has been successfully deleted from the order.' ), ]; } - throw new NotFoundException(__('Unable to find the requested product on the provider order.')); + throw new NotFoundException( __( 'Unable to find the requested product on the provider order.' ) ); } /** @@ -2285,9 +2285,9 @@ public function deleteOrderProduct(Order $order, $product_id) * @param int order id * @return array of payments */ - public function getOrderPayments($orderID) + public function getOrderPayments( $orderID ) { - $order = $this->getOrder($orderID); + $order = $this->getOrder( $orderID ); return $order->payments; } @@ -2299,15 +2299,15 @@ public function getOrderPayments($orderID) */ public function getPaymentTypes() { - $payments = PaymentType::active()->get()->map(function ($payment, $index) { + $payments = PaymentType::active()->get()->map( function ( $payment, $index ) { $payment->selected = $index === 0; return $payment; - }); + } ); - return collect($payments)->mapWithKeys(function ($payment) { + return collect( $payments )->mapWithKeys( function ( $payment ) { return [ $payment[ 'identifier' ] => $payment[ 'label' ] ]; - })->toArray(); + } )->toArray(); } /** @@ -2317,11 +2317,11 @@ public function getPaymentTypes() * @param string * @return string */ - public function getTypeLabel($type) + public function getTypeLabel( $type ) { $types = $this->getTypeLabels(); - return $types[ $type ] ?? sprintf(__('Unknown Type (%s)'), $type); + return $types[ $type ] ?? sprintf( __( 'Unknown Type (%s)' ), $type ); } /** @@ -2331,11 +2331,11 @@ public function getTypeLabel($type) * @param string * @return string */ - public function getPaymentLabel($type) + public function getPaymentLabel( $type ) { - $payments = config('nexopos.orders.statuses'); + $payments = config( 'nexopos.orders.statuses' ); - return $payments[ $type ] ?? sprintf(__('Unknown Status (%s)'), $type); + return $payments[ $type ] ?? sprintf( __( 'Unknown Status (%s)' ), $type ); } /** @@ -2345,12 +2345,12 @@ public function getPaymentLabel($type) */ public function getPaymentLabels() { - return config('nexopos.orders.statuses'); + return config( 'nexopos.orders.statuses' ); } - public function getRefundedOrderProductLabel($label) + public function getRefundedOrderProductLabel( $label ) { - return config('nexopos.orders.products.refunds')[ $label ] ?? __('Unknown Product Status'); + return config( 'nexopos.orders.products.refunds' )[ $label ] ?? __( 'Unknown Product Status' ); } /** @@ -2360,11 +2360,11 @@ public function getRefundedOrderProductLabel($label) * @param string * @return string */ - public function getShippingLabel($type) + public function getShippingLabel( $type ) { $shipping = $this->getDeliveryStatuses(); - return $shipping[ $type ] ?? sprintf(_('Unknown Status (%s)'), $type); + return $shipping[ $type ] ?? sprintf( _( 'Unknown Status (%s)' ), $type ); } /** @@ -2373,11 +2373,11 @@ public function getShippingLabel($type) * @param string * @return string */ - public function getProcessStatus($type) + public function getProcessStatus( $type ) { $process = $this->getProcessStatuses(); - return $process[ $type ] ?? sprintf(_('Unknown Status (%s)'), $type); + return $process[ $type ] ?? sprintf( _( 'Unknown Status (%s)' ), $type ); } /** @@ -2388,31 +2388,31 @@ public function getProcessStatus($type) */ public function getTypeLabels() { - $types = Hook::filter('ns-order-types-labels', collect($this->getTypeOptions())->mapWithKeys(function ($option) { + $types = Hook::filter( 'ns-order-types-labels', collect( $this->getTypeOptions() )->mapWithKeys( function ( $option ) { return [ $option[ 'identifier' ] => $option[ 'label' ], ]; - })->toArray()); + } )->toArray() ); return $types; } public function getTypeOptions() { - return Hook::filter('ns-orders-types', [ + return Hook::filter( 'ns-orders-types', [ 'takeaway' => [ 'identifier' => 'takeaway', - 'label' => __('Take Away'), + 'label' => __( 'Take Away' ), 'icon' => '/images/groceries.png', 'selected' => false, ], 'delivery' => [ 'identifier' => 'delivery', - 'label' => __('Delivery'), + 'label' => __( 'Delivery' ), 'icon' => '/images/delivery.png', 'selected' => false, ], - ]); + ] ); } /** @@ -2423,10 +2423,10 @@ public function getTypeOptions() public function getProcessStatuses() { return [ - 'pending' => __('Pending'), - 'ongoing' => __('Ongoing'), - 'ready' => __('Ready'), - 'not-available' => __('Not Available'), + 'pending' => __( 'Pending' ), + 'ongoing' => __( 'Ongoing' ), + 'ready' => __( 'Ready' ), + 'not-available' => __( 'Not Available' ), ]; } @@ -2434,14 +2434,14 @@ public function getProcessStatuses() * Will return the delivery status for a defined * status provided as a string * - * @param string $status + * @param string $status * @return string $response */ - public function getDeliveryStatus($status) + public function getDeliveryStatus( $status ) { $process = $this->getDeliveryStatuses(); - return $process[ $status ] ?? sprintf(_('Unknown Delivery (%s)'), $status); + return $process[ $status ] ?? sprintf( _( 'Unknown Delivery (%s)' ), $status ); } /** @@ -2452,11 +2452,11 @@ public function getDeliveryStatus($status) public function getDeliveryStatuses() { return [ - 'pending' => __('Pending'), - 'ongoing' => __('Ongoing'), - 'delivered' => __('Delivered'), - 'failed' => __('Failed'), - 'not-available' => __('Not Available'), + 'pending' => __( 'Pending' ), + 'ongoing' => __( 'Ongoing' ), + 'delivered' => __( 'Delivered' ), + 'failed' => __( 'Failed' ), + 'not-available' => __( 'Not Available' ), ]; } @@ -2467,18 +2467,18 @@ public function getDeliveryStatuses() * @param array options * @return string */ - public function orderTemplateMapping($option, Order $order) + public function orderTemplateMapping( $option, Order $order ) { - $template = ns()->option->get($option, ''); + $template = ns()->option->get( $option, '' ); $availableTags = [ - 'store_name' => ns()->option->get('ns_store_name'), - 'store_email' => ns()->option->get('ns_store_email'), - 'store_phone' => ns()->option->get('ns_store_phone'), + 'store_name' => ns()->option->get( 'ns_store_name' ), + 'store_email' => ns()->option->get( 'ns_store_email' ), + 'store_phone' => ns()->option->get( 'ns_store_phone' ), 'cashier_name' => $order->user->username, 'cashier_id' => $order->author, 'order_code' => $order->code, - 'order_type' => $this->getTypeLabel($order->type), - 'order_date' => ns()->date->getFormatted($order->created_at), + 'order_type' => $this->getTypeLabel( $order->type ), + 'order_date' => ns()->date->getFormatted( $order->created_at ), 'customer_first_name' => $order->customer->first_name, 'customer_last_name' => $order->customer->last_name, 'customer_email' => $order->customer->email, @@ -2504,10 +2504,10 @@ public function orderTemplateMapping($option, Order $order) 'billing_' . 'email' => $order->billing_address->email, ]; - $availableTags = Hook::filter('ns-orders-template-mapping', $availableTags, $order); + $availableTags = Hook::filter( 'ns-orders-template-mapping', $availableTags, $order ); - foreach ($availableTags as $tag => $value) { - $template = (str_replace('{' . $tag . '}', $value ?: '', $template)); + foreach ( $availableTags as $tag => $value ) { + $template = ( str_replace( '{' . $tag . '}', $value ?: '', $template ) ); } return $template; @@ -2523,20 +2523,20 @@ public function notifyExpiredLaidAway() { $orders = Order::paymentExpired()->get(); - if (! $orders->isEmpty()) { + if ( ! $orders->isEmpty() ) { /** * The status changes according to the fact * if some orders has received a payment. */ - $orders->each(function ($order) { - if ($order->paid > 0) { + $orders->each( function ( $order ) { + if ( $order->paid > 0 ) { $order->payment_status = Order::PAYMENT_PARTIALLY_DUE; } else { $order->payment_status = Order::PAYMENT_DUE; } $order->save(); - }); + } ); $notificationID = 'ns.due-orders-notifications'; @@ -2544,34 +2544,34 @@ public function notifyExpiredLaidAway() * let's clear previously emitted notification * with the specified identifier */ - Notification::identifiedBy($notificationID)->delete(); + Notification::identifiedBy( $notificationID )->delete(); /** * @var NotificationService */ - $notificationService = app()->make(NotificationService::class); + $notificationService = app()->make( NotificationService::class ); - $notificationService->create([ - 'title' => __('Unpaid Orders Turned Due'), + $notificationService->create( [ + 'title' => __( 'Unpaid Orders Turned Due' ), 'identifier' => $notificationID, - 'url' => ns()->route('ns.dashboard.orders'), - 'description' => sprintf(__('%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.'), $orders->count()), - ])->dispatchForGroup([ - Role::namespace('admin'), - Role::namespace('nexopos.store.administrator'), - ]); + 'url' => ns()->route( 'ns.dashboard.orders' ), + 'description' => sprintf( __( '%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.' ), $orders->count() ), + ] )->dispatchForGroup( [ + Role::namespace( 'admin' ), + Role::namespace( 'nexopos.store.administrator' ), + ] ); - DueOrdersEvent::dispatch($orders); + DueOrdersEvent::dispatch( $orders ); return [ 'status' => 'success', - 'message' => __('The operation was successful.'), + 'message' => __( 'The operation was successful.' ), ]; } return [ 'status' => 'failed', - 'message' => __('No orders to handle for the moment.'), + 'message' => __( 'No orders to handle for the moment.' ), ]; } @@ -2580,104 +2580,104 @@ public function notifyExpiredLaidAway() * by keeping a trace of what has happened. * * @param Order - * @param string $reason + * @param string $reason * @return array */ - public function void(Order $order, $reason) + public function void( Order $order, $reason ) { $order->products() ->get() - ->each(function (OrderProduct $orderProduct) { - $orderProduct->load('product'); + ->each( function ( OrderProduct $orderProduct ) { + $orderProduct->load( 'product' ); - if ($orderProduct->product instanceof Product) { + if ( $orderProduct->product instanceof Product ) { /** * we do proceed by doing an initial return */ - $this->productService->stockAdjustment(ProductHistory::ACTION_VOID_RETURN, [ + $this->productService->stockAdjustment( ProductHistory::ACTION_VOID_RETURN, [ 'total_price' => $orderProduct->total_price, 'product_id' => $orderProduct->product_id, 'unit_id' => $orderProduct->unit_id, 'orderProduct' => $orderProduct, 'quantity' => $orderProduct->quantity, 'unit_price' => $orderProduct->unit_price, - ]); + ] ); } - }); + } ); $order->payment_status = Order::PAYMENT_VOID; $order->voidance_reason = $reason; $order->save(); - event(new OrderVoidedEvent($order)); + event( new OrderVoidedEvent( $order ) ); return [ 'status' => 'success', - 'message' => __('The order has been correctly voided.'), + 'message' => __( 'The order has been correctly voided.' ), ]; } /** * get orders sold during a specific perdiod * - * @param string $startDate range starts - * @param string $endDate range ends + * @param string $startDate range starts + * @param string $endDate range ends * @return Collection */ - public function getPaidSales($startDate, $endDate) + public function getPaidSales( $startDate, $endDate ) { return Order::paid() - ->where('created_at', '>=', Carbon::parse($startDate)->toDateTimeString()) - ->where('created_at', '<=', Carbon::parse($endDate)->toDateTimeString()) + ->where( 'created_at', '>=', Carbon::parse( $startDate )->toDateTimeString() ) + ->where( 'created_at', '<=', Carbon::parse( $endDate )->toDateTimeString() ) ->get(); } /** * get sold stock during a specific period * - * @param string $startDate range starts - * @param string $endDate range ends + * @param string $startDate range starts + * @param string $endDate range ends * @return Collection */ - public function getSoldStock($startDate, $endDate, $categories = [], $units = []) + public function getSoldStock( $startDate, $endDate, $categories = [], $units = [] ) { - $rangeStarts = Carbon::parse($startDate)->toDateTimeString(); - $rangeEnds = Carbon::parse($endDate)->toDateTimeString(); + $rangeStarts = Carbon::parse( $startDate )->toDateTimeString(); + $rangeEnds = Carbon::parse( $endDate )->toDateTimeString(); - $products = OrderProduct::whereHas('order', function (Builder $query) { - $query->where('payment_status', Order::PAYMENT_PAID); - }) - ->where('created_at', '>=', $rangeStarts) - ->where('created_at', '<=', $rangeEnds); + $products = OrderProduct::whereHas( 'order', function ( Builder $query ) { + $query->where( 'payment_status', Order::PAYMENT_PAID ); + } ) + ->where( 'created_at', '>=', $rangeStarts ) + ->where( 'created_at', '<=', $rangeEnds ); - if (! empty($categories)) { - $products->whereIn('product_category_id', $categories); + if ( ! empty( $categories ) ) { + $products->whereIn( 'product_category_id', $categories ); } - if (! empty($units)) { - $products->whereIn('unit_id', $units); + if ( ! empty( $units ) ) { + $products->whereIn( 'unit_id', $units ); } return $products->get(); } - public function trackOrderCoupons(Order $order) + public function trackOrderCoupons( Order $order ) { - $order->coupons()->where('counted', false)->each(function (OrderCoupon $orderCoupon) { - $customerCoupon = CustomerCoupon::find($orderCoupon->customer_coupon_id); + $order->coupons()->where( 'counted', false )->each( function ( OrderCoupon $orderCoupon ) { + $customerCoupon = CustomerCoupon::find( $orderCoupon->customer_coupon_id ); - if (! $customerCoupon instanceof CustomerCoupon) { - throw new NotFoundException(sprintf( - __('Unable to find a reference of the provided coupon : %s'), + if ( ! $customerCoupon instanceof CustomerCoupon ) { + throw new NotFoundException( sprintf( + __( 'Unable to find a reference of the provided coupon : %s' ), $orderCoupon->name - )); + ) ); } - $this->customerService->increaseCouponUsage($customerCoupon); + $this->customerService->increaseCouponUsage( $customerCoupon ); $orderCoupon->counted = true; $orderCoupon->save(); - }); + } ); } /** @@ -2685,32 +2685,32 @@ public function trackOrderCoupons(Order $order) * * @return void */ - public function resolveInstalments(Order $order) + public function resolveInstalments( Order $order ) { - if (in_array($order->payment_status, [ Order::PAYMENT_PAID, Order::PAYMENT_PARTIALLY ])) { + if ( in_array( $order->payment_status, [ Order::PAYMENT_PAID, Order::PAYMENT_PARTIALLY ] ) ) { $orderInstalments = $order->instalments() - ->where('date', '>=', ns()->date->copy()->startOfDay()->toDateTimeString()) - ->where('date', '<=', ns()->date->copy()->endOfDay()->toDateTimeString()) - ->where('paid', false) + ->where( 'date', '>=', ns()->date->copy()->startOfDay()->toDateTimeString() ) + ->where( 'date', '<=', ns()->date->copy()->endOfDay()->toDateTimeString() ) + ->where( 'paid', false ) ->get(); - $paidInstalments = $order->instalments()->where('paid', true)->sum('amount'); + $paidInstalments = $order->instalments()->where( 'paid', true )->sum( 'amount' ); // $otherInstalments = $order->instalments()->whereNotIn( 'id', $orderInstalments->only( 'id' )->toArray() )->sum( 'amount' ); // $dueInstalments = Currency::raw( $orderInstalments->sum( 'amount' ) ); - if ($orderInstalments->count() > 0) { - $payableDifference = Currency::define($order->tendered) - ->subtractBy($paidInstalments) + if ( $orderInstalments->count() > 0 ) { + $payableDifference = Currency::define( $order->tendered ) + ->subtractBy( $paidInstalments ) ->getRaw(); $orderInstalments - ->each(function ($instalment) use (&$payableDifference) { - if ($payableDifference - $instalment->amount >= 0) { + ->each( function ( $instalment ) use ( &$payableDifference ) { + if ( $payableDifference - $instalment->amount >= 0 ) { $instalment->paid = true; $instalment->save(); $payableDifference -= $instalment->amount; } - }); + } ); } } } @@ -2718,18 +2718,18 @@ public function resolveInstalments(Order $order) /** * Will update an existing instalment * - * @param OrderInstalment $orderInstalement - * @param array $fields + * @param OrderInstalment $orderInstalement + * @param array $fields * @return array */ - public function updateInstalment(Order $order, OrderInstalment $instalment, $fields) + public function updateInstalment( Order $order, OrderInstalment $instalment, $fields ) { - if ($instalment->paid) { - throw new NotAllowedException(__('Unable to edit an already paid instalment.')); + if ( $instalment->paid ) { + throw new NotAllowedException( __( 'Unable to edit an already paid instalment.' ) ); } - foreach ($fields as $field => $value) { - if (in_array($field, [ 'date', 'amount' ])) { + foreach ( $fields as $field => $value ) { + if ( in_array( $field, [ 'date', 'amount' ] ) ) { $instalment->$field = $value; } } @@ -2738,8 +2738,8 @@ public function updateInstalment(Order $order, OrderInstalment $instalment, $fie return [ 'status' => 'success', - 'message' => __('The instalment has been saved.'), - 'data' => compact('instalment'), + 'message' => __( 'The instalment has been saved.' ), + 'data' => compact( 'instalment' ), ]; } @@ -2748,10 +2748,10 @@ public function updateInstalment(Order $order, OrderInstalment $instalment, $fie * * @return array */ - public function markInstalmentAsPaid(Order $order, OrderInstalment $instalment, $paymentType = OrderPayment::PAYMENT_CASH) + public function markInstalmentAsPaid( Order $order, OrderInstalment $instalment, $paymentType = OrderPayment::PAYMENT_CASH ) { - if ($instalment->paid) { - throw new NotAllowedException(__('Unable to edit an already paid instalment.')); + if ( $instalment->paid ) { + throw new NotAllowedException( __( 'Unable to edit an already paid instalment.' ) ); } $payment = [ @@ -2761,41 +2761,41 @@ public function markInstalmentAsPaid(Order $order, OrderInstalment $instalment, 'value' => $instalment->amount, ]; - $result = $this->makeOrderSinglePayment($payment, $order); + $result = $this->makeOrderSinglePayment( $payment, $order ); $payment = $result[ 'data' ][ 'payment' ]; $instalment->paid = true; $instalment->payment_id = $payment->id; $instalment->save(); - OrderAfterInstalmentPaidEvent::dispatch($instalment, $order); + OrderAfterInstalmentPaidEvent::dispatch( $instalment, $order ); return [ 'status' => 'success', - 'message' => __('The instalment has been saved.'), - 'data' => compact('instalment', 'payment'), + 'message' => __( 'The instalment has been saved.' ), + 'data' => compact( 'instalment', 'payment' ), ]; } /** * Will delete an instalment. * - * @param OrderInstlament $instalment + * @param OrderInstlament $instalment * @return array */ - public function deleteInstalment(Order $order, OrderInstalment $instalment) + public function deleteInstalment( Order $order, OrderInstalment $instalment ) { $instalment->delete(); - $this->refreshInstalmentCount($order); + $this->refreshInstalmentCount( $order ); return [ 'status' => 'success', - 'message' => __('The instalment has been deleted.'), + 'message' => __( 'The instalment has been deleted.' ), ]; } - public function refreshInstalmentCount(Order $order) + public function refreshInstalmentCount( Order $order ) { $order->total_instalments = $order->instalments()->count(); $order->save(); @@ -2804,34 +2804,34 @@ public function refreshInstalmentCount(Order $order) /** * Creates an instalments * - * @param array $fields + * @param array $fields * @return array */ - public function createInstalment(Order $order, $fields) + public function createInstalment( Order $order, $fields ) { - $totalInstalment = $order->instalments->map(fn($instalment) => $instalment->amount)->sum(); + $totalInstalment = $order->instalments->map( fn( $instalment ) => $instalment->amount )->sum(); - if (Currency::raw($fields[ 'amount' ]) <= 0) { - throw new NotAllowedException(__('The defined amount is not valid.')); + if ( Currency::raw( $fields[ 'amount' ] ) <= 0 ) { + throw new NotAllowedException( __( 'The defined amount is not valid.' ) ); } - if (Currency::raw($totalInstalment) >= $order->total) { - throw new NotAllowedException(__('No further instalments is allowed for this order. The total instalment already covers the order total.')); + if ( Currency::raw( $totalInstalment ) >= $order->total ) { + throw new NotAllowedException( __( 'No further instalments is allowed for this order. The total instalment already covers the order total.' ) ); } - if ($fields[ 'amount' ]) { + if ( $fields[ 'amount' ] ) { $orderInstalment = new OrderInstalment; $orderInstalment->order_id = $order->id; $orderInstalment->amount = $fields[ 'amount' ]; $orderInstalment->date = $fields[ 'date' ]; $orderInstalment->save(); - $this->refreshInstalmentCount($order); + $this->refreshInstalmentCount( $order ); } return [ 'status' => 'success', - 'message' => __('The instalment has been created.'), + 'message' => __( 'The instalment has been created.' ), 'data' => [ 'instalment' => $orderInstalment, ], @@ -2841,86 +2841,86 @@ public function createInstalment(Order $order, $fields) /** * Changes the order processing status * - * @param string $status + * @param string $status * @return array */ - public function changeProcessingStatus(Order $order, $status) + public function changeProcessingStatus( Order $order, $status ) { - if (! in_array($status, [ + if ( ! in_array( $status, [ Order::PROCESSING_PENDING, Order::PROCESSING_ONGOING, Order::PROCESSING_READY, Order::PROCESSING_FAILED, - ])) { - throw new NotAllowedException(__('The provided status is not supported.')); + ] ) ) { + throw new NotAllowedException( __( 'The provided status is not supported.' ) ); } $order->process_status = $status; $order->save(); - OrderAfterUpdatedProcessStatus::dispatch($order); + OrderAfterUpdatedProcessStatus::dispatch( $order ); return [ 'status' => 'success', - 'message' => __('The order has been successfully updated.'), + 'message' => __( 'The order has been successfully updated.' ), ]; } /** * Changes the order processing status * - * @param string $status + * @param string $status * @return array */ - public function changeDeliveryStatus(Order $order, $status) + public function changeDeliveryStatus( Order $order, $status ) { - if (! in_array($status, [ + if ( ! in_array( $status, [ Order::DELIVERY_COMPLETED, Order::DELIVERY_DELIVERED, Order::DELIVERY_FAILED, Order::DELIVERY_ONGOING, Order::DELIVERY_PENDING, - ])) { - throw new NotAllowedException(__('The provided status is not supported.')); + ] ) ) { + throw new NotAllowedException( __( 'The provided status is not supported.' ) ); } $order->delivery_status = $status; $order->save(); - OrderAfterUpdatedDeliveryStatus::dispatch($order); + OrderAfterUpdatedDeliveryStatus::dispatch( $order ); return [ 'status' => 'success', - 'message' => __('The order has been successfully updated.'), + 'message' => __( 'The order has been successfully updated.' ), ]; } - public function getPaymentTypesReport($startRange, $endRange) + public function getPaymentTypesReport( $startRange, $endRange ) { $paymentTypes = PaymentType::active()->get(); - $paymentsIdentifier = $paymentTypes->map(fn($paymentType) => $paymentType->identifier)->toArray(); + $paymentsIdentifier = $paymentTypes->map( fn( $paymentType ) => $paymentType->identifier )->toArray(); - $payments = OrderPayment::where('created_at', '>=', $startRange) - ->where('created_at', '<=', $endRange) - ->whereIn('identifier', $paymentsIdentifier) - ->whereRelation('order', 'payment_status', Order::PAYMENT_PAID) + $payments = OrderPayment::where( 'created_at', '>=', $startRange ) + ->where( 'created_at', '<=', $endRange ) + ->whereIn( 'identifier', $paymentsIdentifier ) + ->whereRelation( 'order', 'payment_status', Order::PAYMENT_PAID ) ->get(); - $total = $payments->map(fn($payment) => $payment->value)->sum(); + $total = $payments->map( fn( $payment ) => $payment->value )->sum(); return [ - 'summary' => $paymentTypes->map(function ($paymentType) use ($payments) { + 'summary' => $paymentTypes->map( function ( $paymentType ) use ( $payments ) { $total = $payments - ->filter(fn($payment) => $payment->identifier === $paymentType->identifier) - ->map(fn($payment) => $payment->value) + ->filter( fn( $payment ) => $payment->identifier === $paymentType->identifier ) + ->map( fn( $payment ) => $payment->value ) ->sum(); return [ 'label' => $paymentType->label, - 'total' => ns()->currency->getRaw($total), + 'total' => ns()->currency->getRaw( $total ), ]; - }), - 'total' => ns()->currency->getRaw($total), + } ), + 'total' => ns()->currency->getRaw( $total ), 'entries' => $payments, ]; } @@ -2931,7 +2931,7 @@ public function getPaymentTypesReport($startRange, $endRange) * * @return array */ - public function getOrderRefundedProducts(Order $order) + public function getOrderRefundedProducts( Order $order ) { return $order->refundedProducts; } @@ -2942,9 +2942,9 @@ public function getOrderRefundedProducts(Order $order) * * @return OrderRefund */ - public function getOrderRefunds(Order $order) + public function getOrderRefunds( Order $order ) { - $order->load('refunds.refunded_products.product', 'refunds.refunded_products.unit', 'refunds.author'); + $order->load( 'refunds.refunded_products.product', 'refunds.refunded_products.unit', 'refunds.author' ); return $order; } diff --git a/app/Services/ProcurementService.php b/app/Services/ProcurementService.php index 44db45b8b..030b98e47 100644 --- a/app/Services/ProcurementService.php +++ b/app/Services/ProcurementService.php @@ -66,13 +66,13 @@ public function __construct( * @param int procurement id * @return Collection|Procurement */ - public function get($id = null) + public function get( $id = null ) { - if ($id !== null) { - $provider = Procurement::find($id); + if ( $id !== null ) { + $provider = Procurement::find( $id ); - if (! $provider instanceof Procurement) { - throw new Exception(__('Unable to find the requested procurement using the provided identifier.')); + if ( ! $provider instanceof Procurement ) { + throw new Exception( __( 'Unable to find the requested procurement using the provided identifier.' ) ); } return $provider; @@ -81,6 +81,19 @@ public function get($id = null) return Procurement::get(); } + public function procurementName() + { + $lastProcurement = Procurement::orderBy( 'id', 'desc' )->first(); + + if ( $lastProcurement instanceof Procurement ) { + $number = str_pad( $lastProcurement->id + 1, 5, '0', STR_PAD_LEFT ); + } else { + $number = str_pad( 1, 5, '0', STR_PAD_LEFT ); + } + + return sprintf( __( 'Procurement %s' ), $number ); + } + /** * create a procurement * using the provided informations @@ -88,18 +101,18 @@ public function get($id = null) * @param array procurement data * @return array|Exception */ - public function create($data) + public function create( $data ) { - extract($data); + extract( $data ); /** * try to find the provider * or return an error */ - $provider = $this->providerService->get($data[ 'general' ][ 'provider_id' ]); + $provider = $this->providerService->get( $data[ 'general' ][ 'provider_id' ] ); - if (! $provider instanceof Provider) { - throw new Exception(__('Unable to find the assigned provider.')); + if ( ! $provider instanceof Provider ) { + throw new Exception( __( 'Unable to find the assigned provider.' ) ); } /** @@ -114,45 +127,45 @@ public function create($data) * we'll make sure to trigger some event before * performing some change on the procurement */ - event(new ProcurementBeforeCreateEvent($procurement)); + event( new ProcurementBeforeCreateEvent( $procurement ) ); /** * We don't want the event ProcurementBeforeCreateEvent * and ProcurementAfterCreateEvent to trigger while saving */ - Procurement::withoutEvents(function () use ($procurement, $data) { - $procurement->name = $data[ 'name' ]; + Procurement::withoutEvents( function () use ( $procurement, $data ) { + $procurement->name = $data[ 'name' ] ?: $this->procurementName(); - foreach ($data[ 'general' ] as $field => $value) { + foreach ( $data[ 'general' ] as $field => $value ) { $procurement->$field = $value; } - if (! empty($procurement->created_at) || ! empty($procurement->updated_at)) { + if ( ! empty( $procurement->created_at ) || ! empty( $procurement->updated_at ) ) { $procurement->timestamps = false; } $procurement->author = Auth::id(); $procurement->cost = 0; $procurement->save(); - }); + } ); /** * Let's save the product that are procured * This doesn't affect the stock but only store the product */ - if ($data[ 'products' ]) { - $this->saveProducts($procurement, collect($data[ 'products' ])); + if ( $data[ 'products' ] ) { + $this->saveProducts( $procurement, collect( $data[ 'products' ] ) ); } /** * We can now safely trigger the event here * that will ensure correct computing */ - event(new ProcurementAfterCreateEvent($procurement)); + event( new ProcurementAfterCreateEvent( $procurement ) ); return [ 'status' => 'success', - 'message' => __('The procurement has been created.'), + 'message' => __( 'The procurement has been created.' ), 'data' => [ 'products' => $procurement->products, 'procurement' => $procurement, @@ -167,75 +180,75 @@ public function create($data) * @param array data to update * @return array */ - public function edit($id, $data) + public function edit( $id, $data ) { /** - * @param array $general + * @param array $general * @param string $name - * @param array $products + * @param array $products */ - extract($data); + extract( $data ); /** * try to find the provider * or return an error */ - $provider = $this->providerService->get($data[ 'general' ][ 'provider_id' ]); + $provider = $this->providerService->get( $data[ 'general' ][ 'provider_id' ] ); - if (! $provider instanceof Provider) { - throw new Exception(__('Unable to find the assigned provider.')); + if ( ! $provider instanceof Provider ) { + throw new Exception( __( 'Unable to find the assigned provider.' ) ); } - $procurement = Procurement::findOrFail($id); + $procurement = Procurement::findOrFail( $id ); /** * we'll make sure to trigger some event before * performing some change on the procurement */ - event(new ProcurementBeforeUpdateEvent($procurement)); + event( new ProcurementBeforeUpdateEvent( $procurement ) ); /** * We won't dispatch the even while savin the procurement * however we'll do that once the product has been stored. */ - Procurement::withoutEvents(function () use ($data, $procurement) { - if ($procurement->delivery_status === 'stocked') { - throw new Exception(__('Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.')); + Procurement::withoutEvents( function () use ( $data, $procurement ) { + if ( $procurement->delivery_status === 'stocked' ) { + throw new Exception( __( 'Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.' ) ); } $procurement->name = $data[ 'name' ]; - foreach ($data[ 'general' ] as $field => $value) { + foreach ( $data[ 'general' ] as $field => $value ) { $procurement->$field = $value; } - if (! empty($procurement->created_at) || ! empty($procurement->updated_at)) { + if ( ! empty( $procurement->created_at ) || ! empty( $procurement->updated_at ) ) { $procurement->timestamps = false; } $procurement->author = Auth::id(); $procurement->cost = 0; $procurement->save(); - }); + } ); /** * We can now safely save * the procurement products */ - if ($data[ 'products' ]) { - $this->saveProducts($procurement, collect($data[ 'products' ])); + if ( $data[ 'products' ] ) { + $this->saveProducts( $procurement, collect( $data[ 'products' ] ) ); } /** * we want to dispatch the event * only when the product has been created */ - event(new ProcurementAfterUpdateEvent($procurement)); + event( new ProcurementAfterUpdateEvent( $procurement ) ); return [ 'status' => 'success', - 'message' => __('The provider has been edited.'), - 'data' => compact('procurement'), + 'message' => __( 'The provider has been edited.' ), + 'data' => compact( 'procurement' ), ]; } @@ -246,19 +259,19 @@ public function edit($id, $data) * @param int procurement id * @return void */ - public function delete($id) + public function delete( $id ) { - $procurement = Procurement::find($id); + $procurement = Procurement::find( $id ); - if (! $procurement instanceof Procurement) { - throw new Exception('Unable to find the requested procurement using the provided id.'); + if ( ! $procurement instanceof Procurement ) { + throw new Exception( 'Unable to find the requested procurement using the provided id.' ); } $procurement->delete(); return [ 'status' => 'success', - 'message' => sprintf(__('The procurement has been deleted. %s included stock record(s) has been deleted as well.'), $totalDeletions), + 'message' => sprintf( __( 'The procurement has been deleted. %s included stock record(s) has been deleted as well.' ), $totalDeletions ), ]; } @@ -268,24 +281,24 @@ public function delete($id) * * @throws NotAllowedException */ - public function attemptProductsStockRemoval(Procurement $procurement): void + public function attemptProductsStockRemoval( Procurement $procurement ): void { - if ($procurement->delivery_status === 'stocked') { - $procurement->products->each(function (ProcurementProduct $procurementProduct) { + if ( $procurement->delivery_status === 'stocked' ) { + $procurement->products->each( function ( ProcurementProduct $procurementProduct ) { /** * We'll handle products that was converted a bit * differently to ensure converted product inventory is taken in account. */ - if (empty($procurementProduct->convert_unit_id)) { - $unitQuantity = ProductUnitQuantity::withProduct($procurementProduct->product_id) - ->withUnit($procurementProduct->unit_id) + if ( empty( $procurementProduct->convert_unit_id ) ) { + $unitQuantity = ProductUnitQuantity::withProduct( $procurementProduct->product_id ) + ->withUnit( $procurementProduct->unit_id ) ->first(); $quantity = $procurementProduct->quantity; $unitName = $procurementProduct->unit->name; } else { $fromUnit = $procurementProduct->unit; - $toUnit = Unit::find($procurementProduct->convert_unit_id); + $toUnit = Unit::find( $procurementProduct->convert_unit_id ); $quantity = $this->unitService->getConvertedQuantity( from: $fromUnit, @@ -294,23 +307,23 @@ public function attemptProductsStockRemoval(Procurement $procurement): void ); $unitName = $toUnit->name; - $unitQuantity = ProductUnitQuantity::withProduct($procurementProduct->product_id) - ->withUnit($toUnit->id) + $unitQuantity = ProductUnitQuantity::withProduct( $procurementProduct->product_id ) + ->withUnit( $toUnit->id ) ->first(); } - if ($unitQuantity instanceof ProductUnitQuantity) { - if (floatval($unitQuantity->quantity) - floatval($quantity) < 0) { + if ( $unitQuantity instanceof ProductUnitQuantity ) { + if ( floatval( $unitQuantity->quantity ) - floatval( $quantity ) < 0 ) { throw new NotAllowedException( sprintf( - __('Unable to delete the procurement as there is not enough stock remaining for "%s" on unit "%s". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.'), + __( 'Unable to delete the procurement as there is not enough stock remaining for "%s" on unit "%s". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.' ), $procurementProduct->product->name, $unitName ) ); } } - }); + } ); } } @@ -318,11 +331,11 @@ public function attemptProductsStockRemoval(Procurement $procurement): void * This will delete product available on a procurement * and dispatch some events before and after that occurs. */ - public function deleteProcurementProducts(Procurement $procurement): void + public function deleteProcurementProducts( Procurement $procurement ): void { - $procurement->products->each(function (ProcurementProduct $product) use ($procurement) { - $this->deleteProduct($product, $procurement); - }); + $procurement->products->each( function ( ProcurementProduct $product ) use ( $procurement ) { + $this->deleteProduct( $product, $procurement ); + } ); } /** @@ -330,7 +343,7 @@ public function deleteProcurementProducts(Procurement $procurement): void * of a procurement product. It return various value as an array of * the product updated along with an array of errors. */ - private function __computeProcurementProductValues(array $data) + private function __computeProcurementProductValues( array $data ) { /** * @var ProcurementProduct $procurementProduct @@ -339,21 +352,21 @@ private function __computeProcurementProductValues(array $data) * @var $itemsToSave * @var $item */ - extract($data, EXTR_REFS); + extract( $data, EXTR_REFS ); - if ($item->purchase_unit_type === 'unit') { - extract($this->__procureForSingleUnit(compact('procurementProduct', 'storedUnitReference', 'itemsToSave', 'item'))); - } elseif ($item->purchase_unit_type === 'unit-group') { - if (! isset($procurementProduct->unit_id)) { + if ( $item->purchase_unit_type === 'unit' ) { + extract( $this->__procureForSingleUnit( compact( 'procurementProduct', 'storedUnitReference', 'itemsToSave', 'item' ) ) ); + } elseif ( $item->purchase_unit_type === 'unit-group' ) { + if ( ! isset( $procurementProduct->unit_id ) ) { /** * this is made to ensure * we have a self explanatory error, * that describe why a product couldn't be processed */ - $keys = array_keys((array) $procurementProduct); + $keys = array_keys( (array) $procurementProduct ); - foreach ($keys as $key) { - if (in_array($key, [ 'id', 'sku', 'barcode' ])) { + foreach ( $keys as $key ) { + if ( in_array( $key, [ 'id', 'sku', 'barcode' ] ) ) { $argument = $key; $identifier = $procurementProduct->$key; break; @@ -362,18 +375,18 @@ private function __computeProcurementProductValues(array $data) $errors[] = [ 'status' => 'failed', - 'message' => sprintf(__('Unable to have a unit group id for the product using the reference "%s" as "%s"'), $identifier, $argument), + 'message' => sprintf( __( 'Unable to have a unit group id for the product using the reference "%s" as "%s"' ), $identifier, $argument ), ]; } try { - extract($this->__procureForUnitGroup(compact('procurementProduct', 'storedunitReference', 'itemsToSave', 'item'))); - } catch (Exception $exception) { + extract( $this->__procureForUnitGroup( compact( 'procurementProduct', 'storedunitReference', 'itemsToSave', 'item' ) ) ); + } catch ( Exception $exception ) { $errors[] = [ 'status' => 'failed', 'message' => $exception->getMessage(), 'data' => [ - 'product' => collect($item)->only([ 'id', 'name', 'sku', 'barcode' ]), + 'product' => collect( $item )->only( [ 'id', 'name', 'sku', 'barcode' ] ), ], ]; } @@ -386,25 +399,25 @@ private function __computeProcurementProductValues(array $data) * This only save the product * but doesn't affect the stock. */ - public function saveProducts(Procurement $procurement, Collection $products) + public function saveProducts( Procurement $procurement, Collection $products ) { /** * We'll just make sure to have a reference * of all the product that has been procured. */ - $procuredProducts = $products->map(function ($procuredProduct) use ($procurement) { - $product = Product::find($procuredProduct[ 'product_id' ]); + $procuredProducts = $products->map( function ( $procuredProduct ) use ( $procurement ) { + $product = Product::find( $procuredProduct[ 'product_id' ] ); - if (! $product instanceof Product) { - throw new Exception(sprintf(__('Unable to find the product using the provided id "%s"'), $procuredProduct[ 'product_id' ])); + if ( ! $product instanceof Product ) { + throw new Exception( sprintf( __( 'Unable to find the product using the provided id "%s"' ), $procuredProduct[ 'product_id' ] ) ); } - if ($product->stock_management === 'disabled') { - throw new Exception(sprintf(__('Unable to procure the product "%s" as the stock management is disabled.'), $product->name)); + if ( $product->stock_management === 'disabled' ) { + throw new Exception( sprintf( __( 'Unable to procure the product "%s" as the stock management is disabled.' ), $product->name ) ); } - if ($product->product_type === 'grouped') { - throw new Exception(sprintf(__('Unable to procure the product "%s" as it is a grouped product.'), $product->name)); + if ( $product->product_type === 'grouped' ) { + throw new Exception( sprintf( __( 'Unable to procure the product "%s" as it is a grouped product.' ), $product->name ) ); } /** @@ -412,9 +425,9 @@ public function saveProducts(Procurement $procurement, Collection $products) * We'll find some record having an id set to 0 * as not result will pop, that will create a new instance. */ - $procurementProduct = ProcurementProduct::find($procuredProduct[ 'id' ] ?? 0); + $procurementProduct = ProcurementProduct::find( $procuredProduct[ 'id' ] ?? 0 ); - if (! $procurementProduct instanceof ProcurementProduct) { + if ( ! $procurementProduct instanceof ProcurementProduct ) { $procurementProduct = new ProcurementProduct; } @@ -439,13 +452,13 @@ public function saveProducts(Procurement $procurement, Collection $products) $procurementProduct->unit_id = $procuredProduct[ 'unit_id' ]; $procurementProduct->author = Auth::id(); $procurementProduct->save(); - $procurementProduct->barcode = str_pad($product->barcode, 5, '0', STR_PAD_LEFT) . '-' . str_pad($procurementProduct->unit_id, 3, '0', STR_PAD_LEFT) . '-' . str_pad($procurementProduct->id, 3, '0', STR_PAD_LEFT); + $procurementProduct->barcode = str_pad( $product->barcode, 5, '0', STR_PAD_LEFT ) . '-' . str_pad( $procurementProduct->unit_id, 3, '0', STR_PAD_LEFT ) . '-' . str_pad( $procurementProduct->id, 3, '0', STR_PAD_LEFT ); $procurementProduct->save(); - event(new ProcurementAfterSaveProductEvent($procurement, $procurementProduct, $procuredProduct)); + event( new ProcurementAfterSaveProductEvent( $procurement, $procurementProduct, $procuredProduct ) ); return $procurementProduct; - }); + } ); return $procuredProducts; } @@ -453,7 +466,7 @@ public function saveProducts(Procurement $procurement, Collection $products) /** * prepare the procurement entry. */ - private function __procureForUnitGroup(array $data) + private function __procureForUnitGroup( array $data ) { /** * @var $storeUnitReference @@ -461,17 +474,17 @@ private function __procureForUnitGroup(array $data) * @var $storedBase * @var $item */ - extract($data); - - if (empty($stored = @$storedUnitReference[ $procurementProduct->unit_id ])) { - $unit = $this->unitService->get($procurementProduct->unit_id); - $group = $this->unitService->getGroups($item->purchase_unit_id); // which should retrieve the group - $base = $unit->base_unit ? $unit : $this->unitService->getBaseUnit($group); - $base_quantity = $this->unitService->computeBaseUnit($unit, $base, $procurementProduct->quantity); - $storedBase[ $procurementProduct->unit_id ] = compact('base', 'unit', 'group'); + extract( $data ); + + if ( empty( $stored = @$storedUnitReference[ $procurementProduct->unit_id ] ) ) { + $unit = $this->unitService->get( $procurementProduct->unit_id ); + $group = $this->unitService->getGroups( $item->purchase_unit_id ); // which should retrieve the group + $base = $unit->base_unit ? $unit : $this->unitService->getBaseUnit( $group ); + $base_quantity = $this->unitService->computeBaseUnit( $unit, $base, $procurementProduct->quantity ); + $storedBase[ $procurementProduct->unit_id ] = compact( 'base', 'unit', 'group' ); } else { - extract($stored); - $base_quantity = $this->unitService->computeBaseUnit($unit, $base, $procurementProduct->quantity); + extract( $stored ); + $base_quantity = $this->unitService->computeBaseUnit( $unit, $base, $procurementProduct->quantity ); } /** @@ -479,8 +492,8 @@ private function __procureForUnitGroup(array $data) * during the purchase is a sub unit of the * unit assigned to the item. */ - if ($group->id !== $item->purchase_unit_id) { - throw new Exception(sprintf(__('The unit used for the product %s doesn\'t belongs to the Unit Group assigned to the item'), $item->name)); + if ( $group->id !== $item->purchase_unit_id ) { + throw new Exception( sprintf( __( 'The unit used for the product %s doesn\'t belongs to the Unit Group assigned to the item' ), $item->name ) ); } $itemData = [ @@ -488,34 +501,34 @@ private function __procureForUnitGroup(array $data) 'unit_id' => $procurementProduct->unit_id, 'base_quantity' => $base_quantity, 'quantity' => $procurementProduct->quantity, - 'purchase_price' => $this->currency->value($procurementProduct->purchase_price)->get(), - 'total_purchase_price' => $this->currency->value($procurementProduct->purchase_price)->multiplyBy($procurementProduct->quantity)->get(), + 'purchase_price' => $this->currency->value( $procurementProduct->purchase_price )->get(), + 'total_purchase_price' => $this->currency->value( $procurementProduct->purchase_price )->multiplyBy( $procurementProduct->quantity )->get(), 'author' => Auth::id(), 'name' => $item->name, ]; $itemsToSave[] = $itemData; - return compact('itemsToSave', 'storedUnitReference'); + return compact( 'itemsToSave', 'storedUnitReference' ); } - private function __procureForSingleUnit($data) + private function __procureForSingleUnit( $data ) { - extract($data); + extract( $data ); /** * if the purchase unit id hasn't already been * recorded, then let's save it */ - if (empty($stored = @$storedUnitReference[ $item->purchase_unit_id ])) { - $unit = $this->unitService->get($item->purchase_unit_id); + if ( empty( $stored = @$storedUnitReference[ $item->purchase_unit_id ] ) ) { + $unit = $this->unitService->get( $item->purchase_unit_id ); $group = $unit->group; - $base = $unit->base_unit ? $unit : $this->unitService->getBaseUnit($group); - $base_quantity = $this->unitService->computeBaseUnit($unit, $base, $procurementProduct->quantity); - $storedUnitReference[ $item->purchase_unit_id ] = compact('base', 'unit'); + $base = $unit->base_unit ? $unit : $this->unitService->getBaseUnit( $group ); + $base_quantity = $this->unitService->computeBaseUnit( $unit, $base, $procurementProduct->quantity ); + $storedUnitReference[ $item->purchase_unit_id ] = compact( 'base', 'unit' ); } else { - extract($stored); - $base_quantity = $this->unitService->computeBaseUnit($unit, $base, $procurementProduct->quantity); + extract( $stored ); + $base_quantity = $this->unitService->computeBaseUnit( $unit, $base, $procurementProduct->quantity ); } $itemData = [ @@ -523,15 +536,15 @@ private function __procureForSingleUnit($data) 'unit_id' => $item->purchase_unit_id, 'base_quantity' => $base_quantity, 'quantity' => $procurementProduct->quantity, - 'purchase_price' => $this->currency->value($procurementProduct->purchase_price)->get(), - 'total_price' => $this->currency->value($procurementProduct->purchase_price)->multiplyBy($procurementProduct->quantity)->get(), + 'purchase_price' => $this->currency->value( $procurementProduct->purchase_price )->get(), + 'total_price' => $this->currency->value( $procurementProduct->purchase_price )->multiplyBy( $procurementProduct->quantity )->get(), 'author' => Auth::id(), 'name' => $item->name, ]; $itemsToSave[] = $itemData; - return compact('itemsToSave', 'storedUnitReference'); + return compact( 'itemsToSave', 'storedUnitReference' ); } /** @@ -541,14 +554,14 @@ private function __procureForSingleUnit($data) * @param array items * @return array; */ - public function saveProcurementProducts($procurement_id, $items) + public function saveProcurementProducts( $procurement_id, $items ) { $procuredItems = []; - foreach ($items as $item) { + foreach ( $items as $item ) { $product = new ProcurementProduct; - foreach ($item as $field => $value) { + foreach ( $item as $field => $value ) { $product->$field = $value; } @@ -561,7 +574,7 @@ public function saveProcurementProducts($procurement_id, $items) return [ 'status' => 'success', - 'message' => __('The operation has completed.'), + 'message' => __( 'The operation has completed.' ), 'data' => [ 'success' => $procuredItems, ], @@ -572,17 +585,17 @@ public function saveProcurementProducts($procurement_id, $items) * refresh a procurement * by counting the total items & value * - * @param Procurement $provided procurement + * @param Procurement $provided procurement * @return array */ - public function refresh(Procurement $procurement) + public function refresh( Procurement $procurement ) { /** * @var ProductService */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); - Procurement::withoutEvents(function () use ($procurement, $productService) { + Procurement::withoutEvents( function () use ( $procurement, $productService ) { /** * Let's loop all procured produt * and get unit quantity if that exists @@ -591,11 +604,11 @@ public function refresh(Procurement $procurement) $purchases = $procurement ->products() ->get() - ->map(function ($procurementProduct) use ($productService) { + ->map( function ( $procurementProduct ) use ( $productService ) { $unitPrice = 0; - $unit = $productService->getUnitQuantity($procurementProduct->product_id, $procurementProduct->unit_id); + $unit = $productService->getUnitQuantity( $procurementProduct->product_id, $procurementProduct->unit_id ); - if ($unit instanceof ProductUnitQuantity) { + if ( $unit instanceof ProductUnitQuantity ) { $unitPrice = $unit->sale_price * $procurementProduct->quantity; } @@ -608,19 +621,19 @@ public function refresh(Procurement $procurement) 'tax_value' => $procurementProduct->tax_value, 'total_price' => $unitPrice, ]; - }); + } ); - $procurement->cost = $purchases->sum('total_purchase_price'); - $procurement->tax_value = $purchases->sum('tax_value'); - $procurement->value = $purchases->sum('total_price'); - $procurement->total_items = count($purchases); + $procurement->cost = $purchases->sum( 'total_purchase_price' ); + $procurement->tax_value = $purchases->sum( 'tax_value' ); + $procurement->value = $purchases->sum( 'total_price' ); + $procurement->total_items = count( $purchases ); $procurement->save(); - }); + } ); return [ 'status' => 'success', - 'message' => __('The procurement has been refreshed.'), - 'data' => compact('procurement'), + 'message' => __( 'The procurement has been refreshed.' ), + 'data' => compact( 'procurement' ), ]; } @@ -630,23 +643,23 @@ public function refresh(Procurement $procurement) * * @deprecated */ - public function resetProcurement($id) + public function resetProcurement( $id ) { - $procurement = Procurement::find($id); + $procurement = Procurement::find( $id ); - $procurement->products->each(function ($product) { + $procurement->products->each( function ( $product ) { $product->delete(); - }); + } ); /** * trigger a specific event * to let other perform some action */ - event(new ProcurementCancelationEvent($procurement)); + event( new ProcurementCancelationEvent( $procurement ) ); return [ 'status' => 'success', - 'message' => __('The procurement has been reset.'), + 'message' => __( 'The procurement has been reset.' ), ]; } @@ -657,15 +670,15 @@ public function resetProcurement($id) * @param Procurement * @return array */ - public function deleteProducts(Procurement $procurement) + public function deleteProducts( Procurement $procurement ) { - $procurement->products->each(function ($product) { + $procurement->products->each( function ( $product ) { $product->delete(); - }); + } ); return [ 'status' => 'success', - 'message' => __('The procurement products has been deleted.'), + 'message' => __( 'The procurement products has been deleted.' ), ]; } @@ -677,22 +690,22 @@ public function deleteProducts(Procurement $procurement) * @param int procurement id * @param int product id */ - public function hasProduct(int $procurement_id, int $product_id) + public function hasProduct( int $procurement_id, int $product_id ) { - $procurement = $this->get($procurement_id); + $procurement = $this->get( $procurement_id ); - return $procurement->products->filter(function ($product) use ($product_id) { + return $procurement->products->filter( function ( $product ) use ( $product_id ) { return (int) $product->id === (int) $product_id; - })->count() > 0; + } )->count() > 0; } /** * @deprecated */ - public function updateProcurementProduct($product_id, $fields) + public function updateProcurementProduct( $product_id, $fields ) { - $procurementProduct = $this->getProcurementProduct($product_id); - $item = $this->productService->get($procurementProduct->product_id); + $procurementProduct = $this->getProcurementProduct( $product_id ); + $item = $this->productService->get( $procurementProduct->product_id ); $storedUnitReference = []; $itemsToSave = []; @@ -701,7 +714,7 @@ public function updateProcurementProduct($product_id, $fields) * quantity, unit_id and purchase price, since that information * is used on __computeProcurementProductValues */ - foreach ($fields as $field => $value) { + foreach ( $fields as $field => $value ) { $procurementProduct->$field = $value; } @@ -709,13 +722,13 @@ public function updateProcurementProduct($product_id, $fields) * @var array $itemsToSave * @var array errors */ - extract($this->__computeProcurementProductValues(compact('item', 'procurementProduct', 'storeUnitReference', 'itemsToSave', 'errors'))); + extract( $this->__computeProcurementProductValues( compact( 'item', 'procurementProduct', 'storeUnitReference', 'itemsToSave', 'errors' ) ) ); /** * typically since the items to save should be * only a single entry, we'll harcode it to be "0" */ - foreach ($itemsToSave[0] as $field => $value) { + foreach ( $itemsToSave[0] as $field => $value ) { $procurementProduct->$field = $value; } @@ -724,19 +737,19 @@ public function updateProcurementProduct($product_id, $fields) return [ 'status' => 'success', - 'message' => __('The procurement product has been updated.'), + 'message' => __( 'The procurement product has been updated.' ), 'data' => [ 'product' => $procurementProduct, ], ]; } - public function getProcurementProduct($product_id) + public function getProcurementProduct( $product_id ) { - $product = ProcurementProduct::find($product_id); + $product = ProcurementProduct::find( $product_id ); - if (! $product instanceof ProcurementProduct) { - throw new Exception(__('Unable to find the procurement product using the provided id.')); + if ( ! $product instanceof ProcurementProduct ) { + throw new Exception( __( 'Unable to find the procurement product using the provided id.' ) ); } return $product; @@ -748,26 +761,26 @@ public function getProcurementProduct($product_id) * @param int procurement product id * @return array response */ - public function deleteProduct(ProcurementProduct $procurementProduct, Procurement $procurement) + public function deleteProduct( ProcurementProduct $procurementProduct, Procurement $procurement ) { /** * this could be useful to prevent deletion for * product which might be in use by another resource */ - event(new ProcurementBeforeDeleteProductEvent($procurementProduct)); + event( new ProcurementBeforeDeleteProductEvent( $procurementProduct ) ); /** * we'll reduce the stock only if the * procurement has been stocked. */ - if ($procurement->delivery_status === 'stocked') { + if ( $procurement->delivery_status === 'stocked' ) { /** * if the product was'nt convered into a different unit * then we'll directly perform a stock adjustment on that product. */ - if (! empty($procurementProduct->convert_unit_id)) { - $from = Unit::find($procurementProduct->unit_id); - $to = Unit::find($procurementProduct->convert_unit_id); + if ( ! empty( $procurementProduct->convert_unit_id ) ) { + $from = Unit::find( $procurementProduct->unit_id ); + $to = Unit::find( $procurementProduct->convert_unit_id ); $convertedQuantityToRemove = $this->unitService->getConvertedQuantity( from: $from, to: $to, @@ -780,27 +793,27 @@ public function deleteProduct(ProcurementProduct $procurementProduct, Procuremen to: $to ); - $this->productService->stockAdjustment(ProductHistory::ACTION_DELETED, [ - 'total_price' => ns()->currency->define($purchasePrice)->multipliedBy($convertedQuantityToRemove)->toFloat(), + $this->productService->stockAdjustment( ProductHistory::ACTION_DELETED, [ + 'total_price' => ns()->currency->define( $purchasePrice )->multipliedBy( $convertedQuantityToRemove )->toFloat(), 'unit_price' => $purchasePrice, 'unit_id' => $procurementProduct->convert_unit_id, 'product_id' => $procurementProduct->product_id, 'quantity' => $convertedQuantityToRemove, 'procurementProduct' => $procurementProduct, - ]); + ] ); } else { /** * Record the deletion on the product * history */ - $this->productService->stockAdjustment('deleted', [ + $this->productService->stockAdjustment( 'deleted', [ 'total_price' => $procurementProduct->total_purchase_price, 'unit_price' => $procurementProduct->purchase_price, 'unit_id' => $procurementProduct->unit_id, 'product_id' => $procurementProduct->product_id, 'quantity' => $procurementProduct->quantity, 'procurementProduct' => $procurementProduct, - ]); + ] ); } } @@ -810,21 +823,21 @@ public function deleteProduct(ProcurementProduct $procurementProduct, Procuremen * the product has been deleted, so we couldn't pass * the Model Object anymore */ - event(new ProcurementAfterDeleteProductEvent($procurementProduct->id, $procurement)); + event( new ProcurementAfterDeleteProductEvent( $procurementProduct->id, $procurement ) ); return [ 'status' => 'sucecss', 'message' => sprintf( - __('The product %s has been deleted from the procurement %s'), + __( 'The product %s has been deleted from the procurement %s' ), $procurementProduct->name, $procurement->name, ), ]; } - public function getProcurementProducts($procurement_id) + public function getProcurementProducts( $procurement_id ) { - return ProcurementProduct::getByProcurement($procurement_id) + return ProcurementProduct::getByProcurement( $procurement_id ) ->get(); } @@ -838,27 +851,27 @@ public function getProcurementProducts($procurement_id) * * @deprecated */ - public function bulkUpdateProducts($procurement_id, $products) + public function bulkUpdateProducts( $procurement_id, $products ) { - $productsId = $this->getProcurementProducts($procurement_id) - ->pluck('id'); + $productsId = $this->getProcurementProducts( $procurement_id ) + ->pluck( 'id' ); - $result = collect($products) - ->map(function ($product) use ($productsId) { - if (! in_array($product[ 'id' ], $productsId)) { - throw new Exception(sprintf(__('The product with the following ID "%s" is not initially included on the procurement'), $product[ 'id' ])); + $result = collect( $products ) + ->map( function ( $product ) use ( $productsId ) { + if ( ! in_array( $product[ 'id' ], $productsId ) ) { + throw new Exception( sprintf( __( 'The product with the following ID "%s" is not initially included on the procurement' ), $product[ 'id' ] ) ); } return $product; - }) - ->map(function ($product) { - return $this->updateProcurementProduct($product[ 'id' ], $product); - }); + } ) + ->map( function ( $product ) { + return $this->updateProcurementProduct( $product[ 'id' ], $product ); + } ); return [ 'status' => 'success', - 'message' => __('The procurement products has been updated.'), - 'data' => compact('result'), + 'message' => __( 'The procurement products has been updated.' ), + 'data' => compact( 'result' ), ]; } @@ -867,19 +880,19 @@ public function bulkUpdateProducts($procurement_id, $products) * * @param int procurement id */ - public function getProducts($procurement_id): EloquentCollection + public function getProducts( $procurement_id ): EloquentCollection { - $procurement = $this->get($procurement_id); + $procurement = $this->get( $procurement_id ); return $procurement->products; } - public function setDeliveryStatus(Procurement $procurement, string $status) + public function setDeliveryStatus( Procurement $procurement, string $status ) { - Procurement::withoutEvents(function () use ($procurement, $status) { + Procurement::withoutEvents( function () use ( $procurement, $status ) { $procurement->delivery_status = $status; $procurement->save(); - }); + } ); } /** @@ -889,17 +902,17 @@ public function setDeliveryStatus(Procurement $procurement, string $status) * * @return void */ - public function handleProcurement(Procurement $procurement) + public function handleProcurement( Procurement $procurement ) { - event(new ProcurementBeforeHandledEvent($procurement)); + event( new ProcurementBeforeHandledEvent( $procurement ) ); - if ($procurement->delivery_status === Procurement::DELIVERED) { - $procurement->products->map(function (ProcurementProduct $product) { + if ( $procurement->delivery_status === Procurement::DELIVERED ) { + $procurement->products->map( function ( ProcurementProduct $product ) { /** * We'll keep an history of what has just happened. * in order to monitor how the stock evolve. */ - $this->productService->saveHistory(ProductHistory::ACTION_STOCKED, [ + $this->productService->saveHistory( ProductHistory::ACTION_STOCKED, [ 'procurement_id' => $product->procurement_id, 'product_id' => $product->product_id, 'procurement_product_id' => $product->id, @@ -908,7 +921,7 @@ public function handleProcurement(Procurement $procurement) 'unit_price' => $product->purchase_price, 'total_price' => $product->total_purchase_price, 'unit_id' => $product->unit_id, - ]); + ] ); $currentQuantity = $this->productService->getQuantity( $product->product_id, @@ -917,39 +930,39 @@ public function handleProcurement(Procurement $procurement) ); $newQuantity = $this->currency - ->define($currentQuantity) - ->additionateBy($product->quantity) + ->define( $currentQuantity ) + ->additionateBy( $product->quantity ) ->get(); - $this->productService->setQuantity($product->product_id, $product->unit_id, $newQuantity, $product->id); + $this->productService->setQuantity( $product->product_id, $product->unit_id, $newQuantity, $product->id ); /** * will generate a unique barcode for the procured product */ - $this->generateBarcode($product); + $this->generateBarcode( $product ); /** * We'll now check if the product is about to be * converted in another unit */ - if (! empty($product->convert_unit_id)) { + if ( ! empty( $product->convert_unit_id ) ) { $this->productService->convertUnitQuantities( product: $product->product, quantity: $product->quantity, from: $product->unit, procurementProduct: $product, - to: Unit::find($product->convert_unit_id) + to: Unit::find( $product->convert_unit_id ) ); } - }); + } ); - $this->setDeliveryStatus($procurement, Procurement::STOCKED); + $this->setDeliveryStatus( $procurement, Procurement::STOCKED ); } - event(new ProcurementAfterHandledEvent($procurement)); + event( new ProcurementAfterHandledEvent( $procurement ) ); } - public function generateBarcode(ProcurementProduct $procurementProduct) + public function generateBarcode( ProcurementProduct $procurementProduct ) { $this->barcodeService->generateBarcode( $procurementProduct->barcode, @@ -966,91 +979,91 @@ public function generateBarcode(ProcurementProduct $procurementProduct) public function stockAwaitingProcurements() { $startOfDay = $this->dateService->copy(); - $procurements = Procurement::where('delivery_time', '<=', $startOfDay) + $procurements = Procurement::where( 'delivery_time', '<=', $startOfDay ) ->pending() ->autoApproval() ->get(); - $procurements->each(function (Procurement $procurement) { - $this->setDeliveryStatus($procurement, Procurement::DELIVERED); - $this->handleProcurement($procurement); - }); + $procurements->each( function ( Procurement $procurement ) { + $this->setDeliveryStatus( $procurement, Procurement::DELIVERED ); + $this->handleProcurement( $procurement ); + } ); - if ($procurements->count()) { - ns()->notification->create([ - 'title' => __('Procurement Automatically Stocked'), + if ( $procurements->count() ) { + ns()->notification->create( [ + 'title' => __( 'Procurement Automatically Stocked' ), 'identifier' => 'ns-warn-auto-procurement', - 'url' => url('/dashboard/procurements'), - 'description' => sprintf(__('%s procurement(s) has recently been automatically procured.'), $procurements->count()), - ])->dispatchForGroup([ - Role::namespace('admin'), - Role::namespace('nexopos.store.administrator'), - ]); + 'url' => url( '/dashboard/procurements' ), + 'description' => sprintf( __( '%s procurement(s) has recently been automatically procured.' ), $procurements->count() ), + ] )->dispatchForGroup( [ + Role::namespace( 'admin' ), + Role::namespace( 'nexopos.store.administrator' ), + ] ); } } - public function getDeliveryLabel($label) + public function getDeliveryLabel( $label ) { - switch ($label) { + switch ( $label ) { case Procurement::DELIVERED: - return __('Delivered'); + return __( 'Delivered' ); case Procurement::DRAFT: - return __('Draft'); + return __( 'Draft' ); case Procurement::PENDING: - return __('Pending'); + return __( 'Pending' ); case Procurement::STOCKED: - return __('Stocked'); + return __( 'Stocked' ); default: return $label; } } - public function getPaymentLabel($label) + public function getPaymentLabel( $label ) { - switch ($label) { + switch ( $label ) { case Procurement::PAYMENT_PAID: - return __('Paid'); + return __( 'Paid' ); case Procurement::PAYMENT_UNPAID: - return __('Unpaid'); + return __( 'Unpaid' ); default: return $label; } } - public function searchProduct($argument, $limit = 10) + public function searchProduct( $argument, $limit = 10 ) { return Product::query() - ->whereIn('type', [ + ->whereIn( 'type', [ Product::TYPE_DEMATERIALIZED, Product::TYPE_MATERIALIZED, - ]) - ->where(function ($query) use ($argument) { - $query->orWhere('name', 'LIKE', "%{$argument}%") - ->orWhere('sku', 'LIKE', "%{$argument}%") - ->orWhere('barcode', 'LIKE', "%{$argument}%"); - }) + ] ) + ->where( function ( $query ) use ( $argument ) { + $query->orWhere( 'name', 'LIKE', "%{$argument}%" ) + ->orWhere( 'sku', 'LIKE', "%{$argument}%" ) + ->orWhere( 'barcode', 'LIKE', "%{$argument}%" ); + } ) ->withStockEnabled() - ->with('unit_quantities.unit') - ->limit($limit) + ->with( 'unit_quantities.unit' ) + ->limit( $limit ) ->get() - ->map(function ($product) { - $units = json_decode($product->purchase_unit_ids); + ->map( function ( $product ) { + $units = json_decode( $product->purchase_unit_ids ); - if ($units) { + if ( $units ) { $product->purchase_units = collect(); - collect($units)->each(function ($unitID) use (&$product) { - $product->purchase_units->push(Unit::find($unitID)); - }); + collect( $units )->each( function ( $unitID ) use ( &$product ) { + $product->purchase_units->push( Unit::find( $unitID ) ); + } ); } /** * We'll pull the last purchase * price for the item retreived */ - $product->unit_quantities->each(function ($unitQuantity) { - $lastPurchase = ProcurementProduct::where('product_id', $unitQuantity->product_id) - ->where('unit_id', $unitQuantity->unit_id) - ->orderBy('updated_at', 'desc') + $product->unit_quantities->each( function ( $unitQuantity ) { + $lastPurchase = ProcurementProduct::where( 'product_id', $unitQuantity->product_id ) + ->where( 'unit_id', $unitQuantity->unit_id ) + ->orderBy( 'updated_at', 'desc' ) ->first(); /** @@ -1059,22 +1072,22 @@ public function searchProduct($argument, $limit = 10) */ $unitQuantity->last_purchase_price = 0; - if ($lastPurchase instanceof ProcurementProduct) { + if ( $lastPurchase instanceof ProcurementProduct ) { $unitQuantity->last_purchase_price = $lastPurchase->purchase_price; } - }); + } ); return $product; - }); + } ); } - public function searchProcurementProduct($argument) + public function searchProcurementProduct( $argument ) { - $procurementProduct = ProcurementProduct::where('barcode', $argument) - ->with([ 'unit', 'procurement' ]) + $procurementProduct = ProcurementProduct::where( 'barcode', $argument ) + ->with( [ 'unit', 'procurement' ] ) ->first(); - if ($procurementProduct instanceof ProcurementProduct) { + if ( $procurementProduct instanceof ProcurementProduct ) { $procurementProduct->unit_quantity = $this->productService->getUnitQuantity( $procurementProduct->product_id, $procurementProduct->unit_id diff --git a/app/Services/ProductCategoryService.php b/app/Services/ProductCategoryService.php index feff20364..691a653a3 100644 --- a/app/Services/ProductCategoryService.php +++ b/app/Services/ProductCategoryService.php @@ -16,10 +16,10 @@ class ProductCategoryService * @param int category id * @return ProductCategory|false */ - public function get($id) + public function get( $id ) { - $category = ProductCategory::find($id); - if (! $category instanceof ProductCategory) { + $category = ProductCategory::find( $id ); + if ( ! $category instanceof ProductCategory ) { return false; } @@ -30,12 +30,12 @@ public function get($id) * Get a specific category using * a defined name * - * @param string $name + * @param string $name * @return ProductCategory|null */ - public function getUsingName($name) + public function getUsingName( $name ) { - return ProductCategory::where('name', $name)->first(); + return ProductCategory::where( 'name', $name )->first(); } /** @@ -45,7 +45,7 @@ public function getUsingName($name) * @param array details * @return array */ - public function create($data, ProductCategory $productCategory = null) + public function create( $data, ?ProductCategory $productCategory = null ) { $category = $productCategory === null ? new ProductCategory : $productCategory; $category->author = Auth::id(); @@ -56,16 +56,16 @@ public function create($data, ProductCategory $productCategory = null) $category->displays_on_pos = $data[ 'displays_on_pos' ] ?? true; $category->save(); - ProductCategoryAfterCreatedEvent::dispatch($category); + ProductCategoryAfterCreatedEvent::dispatch( $category ); return [ 'status' => 'success', - 'message' => __('The category has been created'), - 'data' => compact('category'), + 'message' => __( 'The category has been created' ), + 'data' => compact( 'category' ), ]; } - public function computeProducts(ProductCategory $category) + public function computeProducts( ProductCategory $category ) { $category->total_items = $category->products()->count(); $category->save(); @@ -75,21 +75,21 @@ public function computeProducts(ProductCategory $category) * Retrieve all the child category * that belongs to a specific category * - * @param int $category_id + * @param int $category_id * @return array */ - public function getCategoryChildrens($category_id) + public function getCategoryChildrens( $category_id ) { - $categories = ProductCategory::where('parent_id', $category_id) + $categories = ProductCategory::where( 'parent_id', $category_id ) ->get(); - if ($categories->count() > 0) { + if ( $categories->count() > 0 ) { return $categories - ->map(function ($category) { - return $this->getCategoryChildrens($category->id); - }) + ->map( function ( $category ) { + return $this->getCategoryChildrens( $category->id ); + } ) ->flatten() - ->prepend($category_id) + ->prepend( $category_id ) ->toArray(); } @@ -99,21 +99,21 @@ public function getCategoryChildrens($category_id) /** * Retreive category parents * - * @param int $category_id + * @param int $category_id * @return array */ - public function getCategoryParents($category_id) + public function getCategoryParents( $category_id ) { - $current = ProductCategory::find($category_id); + $current = ProductCategory::find( $category_id ); - if ($current instanceof ProductCategory) { - if (! empty($current->parent_id)) { - $parent = ProductCategory::where('id', $current->parent_id)->first(); + if ( $current instanceof ProductCategory ) { + if ( ! empty( $current->parent_id ) ) { + $parent = ProductCategory::where( 'id', $current->parent_id )->first(); - if ($parent instanceof ProductCategory) { - return collect($this->getCategoryParents($parent->id)) + if ( $parent instanceof ProductCategory ) { + return collect( $this->getCategoryParents( $parent->id ) ) ->flatten() - ->prepend($current->id) + ->prepend( $current->id ) ->toArray(); } } @@ -121,7 +121,7 @@ public function getCategoryParents($category_id) return [ $current->id ]; } - throw new NotFoundException(__('The requested category doesn\'t exists')); + throw new NotFoundException( __( 'The requested category doesn\'t exists' ) ); } /** @@ -132,8 +132,8 @@ public function getCategoryParents($category_id) */ public function getAllCategoryChildrens() { - $categories = ProductCategory::where('parent_id', null)->get(); + $categories = ProductCategory::where( 'parent_id', null )->get(); - return $categories->map(fn($category) => $this->getCategoryChildrens($category->id))->flatten(); + return $categories->map( fn( $category ) => $this->getCategoryChildrens( $category->id ) )->flatten(); } } diff --git a/app/Services/ProductService.php b/app/Services/ProductService.php index 01658b7c6..d1da35c1b 100644 --- a/app/Services/ProductService.php +++ b/app/Services/ProductService.php @@ -46,12 +46,12 @@ public function __construct( * @param int product id * @return Product */ - public function get($id) + public function get( $id ) { - $product = Product::find($id); + $product = Product::find( $id ); - if (! $product instanceof Product) { - throw new Exception(__('Unable to find the product using the provided id.')); + if ( ! $product instanceof Product ) { + throw new Exception( __( 'Unable to find the product using the provided id.' ) ); } return $product; @@ -63,16 +63,16 @@ public function get($id) * @param string barcode * @return Product|false */ - public function getProductUsingBarcode($barcode) + public function getProductUsingBarcode( $barcode ) { /** * checks if a similar product already * exists and throw an error if it's the case */ - $product = Product::findUsingBarcode($barcode) + $product = Product::findUsingBarcode( $barcode ) ->first(); - if ($product instanceof Product) { + if ( $product instanceof Product ) { return $product; } @@ -85,16 +85,16 @@ public function getProductUsingBarcode($barcode) * @param string barcode * @return Product|false */ - public function getProductUsingBarcodeOrFail($barcode) + public function getProductUsingBarcodeOrFail( $barcode ) { /** * checks if a similar product already * exists and throw an error if it's the case */ - $product = Product::findUsingBarcode($barcode) + $product = Product::findUsingBarcode( $barcode ) ->first(); - if ($product instanceof Product) { + if ( $product instanceof Product ) { return $product; } @@ -107,16 +107,16 @@ public function getProductUsingBarcodeOrFail($barcode) * @param string sku * @return Product|false */ - public function getProductUsingSKU($sku) + public function getProductUsingSKU( $sku ) { /** * checks if a similar product already * exists and throw an error if it's the case */ - $product = Product::findUsingSKU($sku) + $product = Product::findUsingSKU( $sku ) ->first(); - if ($product instanceof Product) { + if ( $product instanceof Product ) { return $product; } @@ -130,12 +130,12 @@ public function getProductUsingSKU($sku) * @param string sku * @return Product */ - public function getProductUsingSKUOrFail($sku) + public function getProductUsingSKUOrFail( $sku ) { - $product = $this->getProductUsingSKU($sku); + $product = $this->getProductUsingSKU( $sku ); - if (! $product instanceof Product) { - throw new Exception(__('Unable to find the requested product using the provided SKU.')); + if ( ! $product instanceof Product ) { + throw new Exception( __( 'Unable to find the requested product using the provided SKU.' ) ); } return $product; @@ -148,14 +148,14 @@ public function getProductUsingSKUOrFail($sku) * @param array data to handle * @return array response */ - public function create($data) + public function create( $data ) { /** * check if the provided category * exists or throw an error */ - if (! $this->categoryService->get($data[ 'category_id' ])) { - throw new Exception(__('The category to which the product is attached doesn\'t exists or has been deleted')); + if ( ! $this->categoryService->get( $data[ 'category_id' ] ) ) { + throw new Exception( __( 'The category to which the product is attached doesn\'t exists or has been deleted' ) ); } /** @@ -163,19 +163,32 @@ public function create($data) * before proceed and avoiding adding grouped * product within grouped product. */ - if ($data[ 'type' ] === Product::TYPE_GROUPED) { - $this->checkGroupProduct($data[ 'groups' ]); + if ( $data[ 'type' ] === Product::TYPE_GROUPED ) { + $this->checkGroupProduct( $data[ 'groups' ] ); + } + + /** + * We want to check here if the unit quantities + * attached to the product uses the same unit_id + */ + if ( $data[ 'units' ] ) { + $unitIds = collect( $data[ 'units' ][ 'selling_group' ] )->map( fn( $group ) => $group[ 'unit_id' ] ); + $unitIds->each( function ( $unitId ) use ( $unitIds ) { + if ( $unitIds->filter( fn( $id ) => $id === $unitId )->count() > 1 ) { + throw new NotAllowedException( __( 'You cannot assign the same unit to more than one selling unit.' ) ); + } + } ); } /** * check if it's a simple product or not */ - if ($data[ 'product_type' ] === 'product') { - return $this->createSimpleProduct($data); - } elseif ($data[ 'product_type' ] === 'variable') { - return $this->createVariableProduct($data); + if ( $data[ 'product_type' ] === 'product' ) { + return $this->createSimpleProduct( $data ); + } elseif ( $data[ 'product_type' ] === 'variable' ) { + return $this->createVariableProduct( $data ); } else { - throw new NotAllowedException(sprintf(__('Unable to create a product with an unknow type : %s'), $data[ 'product_type' ])); + throw new NotAllowedException( sprintf( __( 'Unable to create a product with an unknow type : %s' ), $data[ 'product_type' ] ) ); } } @@ -185,32 +198,32 @@ public function create($data) * @param array data to handle * @return array response */ - public function createVariableProduct($data) + public function createVariableProduct( $data ) { /** * let's try to check if the product required * fields are valid. We should do that before saving anything to * the database */ - collect($data[ 'variations' ])->each(function ($variation) { - if ($this->getProductUsingBarcode($variation[ 'barcode' ])) { - throw new Exception(sprintf(__('A variation within the product has a barcode which is already in use : %s.'), $variation[ 'barcode' ])); + collect( $data[ 'variations' ] )->each( function ( $variation ) { + if ( $this->getProductUsingBarcode( $variation[ 'barcode' ] ) ) { + throw new Exception( sprintf( __( 'A variation within the product has a barcode which is already in use : %s.' ), $variation[ 'barcode' ] ) ); } /** * search a product using the provided SKU * and throw an error if it's the case */ - if ($this->getProductUsingSKU($variation[ 'sku' ])) { - throw new Exception(sprintf(__('A variation within the product has a SKU which is already in use : %s'), $variation[ 'sku' ])); + if ( $this->getProductUsingSKU( $variation[ 'sku' ] ) ) { + throw new Exception( sprintf( __( 'A variation within the product has a SKU which is already in use : %s' ), $variation[ 'sku' ] ) ); } - }); + } ); /** * save the simple product * as a variable product */ - $result = $this->createSimpleProduct($data); + $result = $this->createSimpleProduct( $data ); $parent = $result[ 'data' ][ 'product' ]; $parent->product_type = 'variable'; $parent->save(); @@ -219,14 +232,14 @@ public function createVariableProduct($data) * loop variations to * see if they aren't using already in use SKU, Barcode */ - foreach ($data[ 'variations' ] as $variation) { - $this->createProductVariation($parent, $variation); + foreach ( $data[ 'variations' ] as $variation ) { + $this->createProductVariation( $parent, $variation ); } return [ 'status' => 'success', - 'message' => __('The variable product has been created.'), - 'data' => compact('parent'), + 'message' => __( 'The variable product has been created.' ), + 'data' => compact( 'parent' ), ]; } @@ -236,37 +249,37 @@ public function createVariableProduct($data) * @param array data to handle * @return array response */ - public function createSimpleProduct($data) + public function createSimpleProduct( $data ) { - if (! empty($data[ 'barcode' ]) && $this->getProductUsingBarcode($data[ 'barcode' ]) instanceof Product) { - throw new Exception(sprintf( - __('The provided barcode "%s" is already in use.'), + if ( ! empty( $data[ 'barcode' ] ) && $this->getProductUsingBarcode( $data[ 'barcode' ] ) instanceof Product ) { + throw new Exception( sprintf( + __( 'The provided barcode "%s" is already in use.' ), $data[ 'barcode' ] - )); + ) ); } - if (empty($data[ 'barcode' ])) { - $data[ 'barcode' ] = $this->barcodeService->generateRandomBarcode($data[ 'barcode_type' ]); + if ( empty( $data[ 'barcode' ] ) ) { + $data[ 'barcode' ] = $this->barcodeService->generateRandomBarcode( $data[ 'barcode_type' ] ); } /** * search a product using the provided SKU * and throw an error if it's the case */ - if ($this->getProductUsingSKU($data[ 'sku' ]) && ! empty($data[ 'barcode' ])) { - throw new Exception(sprintf( - __('The provided SKU "%s" is already in use.'), + if ( $this->getProductUsingSKU( $data[ 'sku' ] ) && ! empty( $data[ 'barcode' ] ) ) { + throw new Exception( sprintf( + __( 'The provided SKU "%s" is already in use.' ), $data[ 'sku' ] - )); + ) ); } /** * We'll generate an SKU automatically * if it's not provided by the form. */ - if (empty($data[ 'sku' ])) { - $category = ProductCategory::find($data[ 'category_id' ]); - $data[ 'sku' ] = Str::slug($category->name) . '--' . Str::slug($data[ 'name' ]) . '--' . Str::random(5); + if ( empty( $data[ 'sku' ] ) ) { + $category = ProductCategory::find( $data[ 'category_id' ] ); + $data[ 'sku' ] = Str::slug( $category->name ) . '--' . Str::slug( $data[ 'name' ] ) . '--' . Str::random( 5 ); } $product = new Product; @@ -277,7 +290,7 @@ public function createSimpleProduct($data) foreach ($data as $field => $value) { if (! in_array($field, [ 'variations' ])) { $fields = $data; - $this->__fillProductFields($product, compact('field', 'value', 'mode', 'fields')); + $this->__fillProductFields( $product, compact( 'field', 'value', 'mode', 'fields' ) ); } } @@ -288,34 +301,34 @@ public function createSimpleProduct($data) * this will calculate the unit quantities * for the created product. This also comute taxes */ - $this->__computeUnitQuantities($fields, $product); + $this->__computeUnitQuantities( $fields, $product ); /** * We'll reload the unit quantity * that is helpful to test if the tax is well computed */ - $product->load('unit_quantities'); + $product->load( 'unit_quantities' ); /** * save product images */ - $this->saveGallery($product, $fields[ 'images' ] ?? []); + $this->saveGallery( $product, $fields[ 'images' ] ?? [] ); /** * We'll now save all attached sub items */ - if ($product->type === Product::TYPE_GROUPED) { - $this->saveSubItems($product, $fields[ 'groups' ] ?? []); + if ( $product->type === Product::TYPE_GROUPED ) { + $this->saveSubItems( $product, $fields[ 'groups' ] ?? [] ); } - $editUrl = ns()->route('ns.products-edit', [ 'product' => $product->id ]); + $editUrl = ns()->route( 'ns.products-edit', [ 'product' => $product->id ] ); event( new ProductAfterCreatedEvent( $product ) ); return [ 'status' => 'success', - 'message' => __('The product has been saved.'), - 'data' => compact('product', 'editUrl'), + 'message' => __( 'The product has been saved.' ), + 'data' => compact( 'product', 'editUrl' ), ]; } @@ -326,14 +339,14 @@ public function createSimpleProduct($data) * @param array fields * @return array response */ - public function update(Product $product, array $data): array + public function update( Product $product, array $data ): array { /** * check if the provided category * exists or throw an error */ - if (! $this->categoryService->get($data[ 'category_id' ])) { - throw new Exception(__('The category to which the product is attached doesn\'t exists or has been deleted')); + if ( ! $this->categoryService->get( $data[ 'category_id' ] ) ) { + throw new Exception( __( 'The category to which the product is attached doesn\'t exists or has been deleted' ) ); } /** @@ -341,19 +354,32 @@ public function update(Product $product, array $data): array * before proceed and avoiding adding grouped * product within grouped product. */ - if ($data[ 'type' ] === Product::TYPE_GROUPED) { - $this->checkGroupProduct($data[ 'groups' ]); + if ( $data[ 'type' ] === Product::TYPE_GROUPED ) { + $this->checkGroupProduct( $data[ 'groups' ] ); } - switch ($data[ 'product_type' ]) { + /** + * We want to check here if the unit quantities + * attached to the product uses the same unit_id + */ + if ( $data[ 'units' ] ) { + $unitIds = collect( $data[ 'units' ][ 'selling_group' ] )->map( fn( $group ) => $group[ 'unit_id' ] ); + $unitIds->each( function ( $unitId ) use ( $unitIds ) { + if ( $unitIds->filter( fn( $id ) => $id === $unitId )->count() > 1 ) { + throw new NotAllowedException( __( 'You cannot assign the same unit to more than one selling unit.' ) ); + } + } ); + } + + switch ( $data[ 'product_type' ] ) { case 'product': - return $this->updateSimpleProduct($product, $data); + return $this->updateSimpleProduct( $product, $data ); break; case 'variable': - return $this->updateVariableProduct($product, $data); + return $this->updateVariableProduct( $product, $data ); break; default: - throw new Exception(sprintf(__('Unable to edit a product with an unknown type : %s'), $data[ 'product_type' ])); + throw new Exception( sprintf( __( 'Unable to edit a product with an unknown type : %s' ), $data[ 'product_type' ] ) ); break; } } @@ -365,7 +391,7 @@ public function update(Product $product, array $data): array * @param Product * @return void */ - public function releaseProductTaxes($product) + public function releaseProductTaxes( $product ) { $product->product_taxes()->delete(); } @@ -376,17 +402,17 @@ public function releaseProductTaxes($product) * * @param array $fields */ - public function checkGroupProduct($fields): void + public function checkGroupProduct( $fields ): void { - if (! isset($fields[ 'product_subitems' ])) { - throw new NotAllowedException(__('A grouped product cannot be saved without any sub items.')); + if ( ! isset( $fields[ 'product_subitems' ] ) ) { + throw new NotAllowedException( __( 'A grouped product cannot be saved without any sub items.' ) ); } - foreach ($fields[ 'product_subitems' ] as $item) { - $product = Product::find($item[ 'product_id' ]); + foreach ( $fields[ 'product_subitems' ] as $item ) { + $product = Product::find( $item[ 'product_id' ] ); - if ($product->type === Product::TYPE_GROUPED) { - throw new NotAllowedException(__('A grouped product cannot contain grouped product.')); + if ( $product->type === Product::TYPE_GROUPED ) { + throw new NotAllowedException( __( 'A grouped product cannot contain grouped product.' ) ); } } } @@ -400,14 +426,14 @@ public function checkGroupProduct($fields): void * @param array fields * @return array response */ - public function updateSimpleProduct($id, $fields) + public function updateSimpleProduct( $id, $fields ) { /** * will get a product if * the provided value is an integer * and not an instance of Product */ - $product = $this->getProductUsingArgument('id', $id); + $product = $this->getProductUsingArgument( 'id', $id ); $mode = 'update'; @@ -415,33 +441,33 @@ public function updateSimpleProduct($id, $fields) $this->releaseProductTaxes($product); - if (empty($fields[ 'barcode' ])) { - $fields[ 'barcode' ] = $this->barcodeService->generateRandomBarcode($fields[ 'barcode_type' ]); + if ( empty( $fields[ 'barcode' ] ) ) { + $fields[ 'barcode' ] = $this->barcodeService->generateRandomBarcode( $fields[ 'barcode_type' ] ); } - if ($existingProduct = $this->getProductUsingBarcode($fields[ 'barcode' ])) { - if ($existingProduct->id !== $product->id) { - throw new Exception(__('The provided barcode is already in use.')); + if ( $existingProduct = $this->getProductUsingBarcode( $fields[ 'barcode' ] ) ) { + if ( $existingProduct->id !== $product->id ) { + throw new Exception( __( 'The provided barcode is already in use.' ) ); } } - if (empty($fields[ 'sku' ])) { - $category = ProductCategory::find($fields[ 'category_id' ]); - $fields[ 'sku' ] = Str::slug($category->name) . '--' . Str::slug($fields[ 'name' ]) . '--' . strtolower(Str::random(5)); + if ( empty( $fields[ 'sku' ] ) ) { + $category = ProductCategory::find( $fields[ 'category_id' ] ); + $fields[ 'sku' ] = Str::slug( $category->name ) . '--' . Str::slug( $fields[ 'name' ] ) . '--' . strtolower( Str::random( 5 ) ); } /** * search a product using the provided SKU * and throw an error if it's the case */ - if ($existingProduct = $this->getProductUsingSKU($fields[ 'sku' ])) { - if ($existingProduct->id !== $product->id) { - throw new Exception(__('The provided SKU is already in use.')); + if ( $existingProduct = $this->getProductUsingSKU( $fields[ 'sku' ] ) ) { + if ( $existingProduct->id !== $product->id ) { + throw new Exception( __( 'The provided SKU is already in use.' ) ); } } - foreach ($fields as $field => $value) { - $this->__fillProductFields($product, compact('field', 'value', 'mode', 'fields')); + foreach ( $fields as $field => $value ) { + $this->__fillProductFields( $product, compact( 'field', 'value', 'mode', 'fields' ) ); } $product->author = $fields[ 'author' ] ?? Auth::id(); @@ -451,44 +477,44 @@ public function updateSimpleProduct($id, $fields) * this will calculate the unit quantities * for the created product. */ - $this->__computeUnitQuantities($fields, $product); + $this->__computeUnitQuantities( $fields, $product ); /** * save product images */ - $this->saveGallery($product, $fields[ 'images' ] ?? []); + $this->saveGallery( $product, $fields[ 'images' ] ?? [] ); /** * We'll now save all attached sub items. That is only applicable * if the product is set to be a grouped product. */ - if ($product->type === Product::TYPE_GROUPED) { - $this->saveSubItems($product, $fields[ 'groups' ] ?? []); + if ( $product->type === Product::TYPE_GROUPED ) { + $this->saveSubItems( $product, $fields[ 'groups' ] ?? [] ); } - $editUrl = ns()->route('ns.products-edit', [ 'product' => $product->id ]); + $editUrl = ns()->route( 'ns.products-edit', [ 'product' => $product->id ] ); event( new ProductAfterUpdatedEvent( $product ) ); return [ 'status' => 'success', - 'message' => __('The product has been updated'), - 'data' => compact('product', 'editUrl'), + 'message' => __( 'The product has been updated' ), + 'data' => compact( 'product', 'editUrl' ), ]; } /** * Saves the sub items by binding that to a product * - * @param array $subItems + * @param array $subItems * @return array response */ - public function saveSubItems(Product $product, $subItems) + public function saveSubItems( Product $product, $subItems ) { - $savedItems = collect([]); + $savedItems = collect( [] ); - foreach ($subItems[ 'product_subitems' ] as $item) { - if (! isset($item[ 'id' ])) { + foreach ( $subItems[ 'product_subitems' ] as $item ) { + if ( ! isset( $item[ 'id' ] ) ) { $subitem = new ProductSubItem; $subitem->parent_id = $product->id; $subitem->product_id = $item[ 'product_id' ]; @@ -500,10 +526,10 @@ public function saveSubItems(Product $product, $subItems) $subitem->author = Auth::id(); $subitem->save(); } else { - $subitem = ProductSubItem::find($item[ 'id' ]); + $subitem = ProductSubItem::find( $item[ 'id' ] ); - if (! $subitem instanceof ProductSubItem) { - throw new NotFoundException(__('The requested sub item doesn\'t exists.')); + if ( ! $subitem instanceof ProductSubItem ) { + throw new NotFoundException( __( 'The requested sub item doesn\'t exists.' ) ); } $subitem->parent_id = $product->id; @@ -517,30 +543,30 @@ public function saveSubItems(Product $product, $subItems) $subitem->save(); } - $savedItems->push($subitem->id); + $savedItems->push( $subitem->id ); } /** * We'll delete all products * that aren't submitted */ - ProductSubItem::where('parent_id', $product->id) - ->whereNotIn('id', $savedItems->toArray()) + ProductSubItem::where( 'parent_id', $product->id ) + ->whereNotIn( 'id', $savedItems->toArray() ) ->delete(); return [ 'status' => 'success', - 'message' => __('The subitem has been saved.'), + 'message' => __( 'The subitem has been saved.' ), ]; } - public function saveGallery(Product $product, $groups) + public function saveGallery( Product $product, $groups ) { $product->galleries() ->get() - ->each(function ($image) { + ->each( function ( $image ) { $image->delete(); - }); + } ); /** * if there are many featured images @@ -548,17 +574,17 @@ public function saveGallery(Product $product, $groups) * * @todo should be tested */ - $manyPrimary = collect($groups)->map(function ($fields) { - return isset($fields[ 'featured' ]) && (int) $fields[ 'featured' ] === 1; - }) - ->filter(fn($result) => $result === true) + $manyPrimary = collect( $groups )->map( function ( $fields ) { + return isset( $fields[ 'featured' ] ) && (int) $fields[ 'featured' ] === 1; + } ) + ->filter( fn( $result ) => $result === true ) ->count() > 1; - if ($manyPrimary) { - $groups = collect($groups)->map(function ($fields, $index) { - return collect($fields)->map(function ($field, $fieldName) use ($index) { - if ($fieldName === 'featured') { - if ($index === 0) { + if ( $manyPrimary ) { + $groups = collect( $groups )->map( function ( $fields, $index ) { + return collect( $fields )->map( function ( $field, $fieldName ) use ( $index ) { + if ( $fieldName === 'featured' ) { + if ( $index === 0 ) { $field = 1; } else { $field = 0; @@ -566,11 +592,11 @@ public function saveGallery(Product $product, $groups) } return $field; - }); - }); + } ); + } ); } - foreach ($groups as $group) { + foreach ( $groups as $group ) { $image = new ProductGallery; $image->featured = $group[ 'featured' ] ?? 0; $image->url = $group[ 'url' ]; @@ -586,7 +612,7 @@ public function saveGallery(Product $product, $groups) * @param array fields to save * @return array response of the process */ - public function updateVariableProduct(Product $product, $data) + public function updateVariableProduct( Product $product, $data ) { /** * let's try to check if the product variations @@ -595,24 +621,24 @@ public function updateVariableProduct(Product $product, $data) * * @var Illuminate\Support\Collection */ - $valid = collect($data[ 'variations' ])->filter(function ($product) { - return ! empty($product[ 'id' ]); - }); + $valid = collect( $data[ 'variations' ] )->filter( function ( $product ) { + return ! empty( $product[ 'id' ] ); + } ); /** * if the product variation doesn\'t include * any identifier */ - if ($valid->empty()) { + if ( $valid->empty() ) { throw new Exception( - __('One of the provided product variation doesn\'t include an identifier.') + __( 'One of the provided product variation doesn\'t include an identifier.' ) ); } - $valid->each(function ($variation) { - if ($foundProduct = $this->getProductUsingBarcode($variation[ 'barcode' ])) { - if ($foundProduct->id !== $variation[ 'id' ]) { - throw new Exception(sprintf(__('A variation within the product has a barcode which is already in use : %s.'), $variation[ 'barcode' ])); + $valid->each( function ( $variation ) { + if ( $foundProduct = $this->getProductUsingBarcode( $variation[ 'barcode' ] ) ) { + if ( $foundProduct->id !== $variation[ 'id' ] ) { + throw new Exception( sprintf( __( 'A variation within the product has a barcode which is already in use : %s.' ), $variation[ 'barcode' ] ) ); } } @@ -620,24 +646,24 @@ public function updateVariableProduct(Product $product, $data) * search a product using the provided SKU * and throw an error if it's the case */ - if ($foundProduct = $this->getProductUsingSKU($variation[ 'sku' ])) { - if ($foundProduct->id !== $variation[ 'id' ]) { - throw new Exception(sprintf(__('A variation within the product has a SKU which is already in use : %s'), $variation[ 'sku' ])); + if ( $foundProduct = $this->getProductUsingSKU( $variation[ 'sku' ] ) ) { + if ( $foundProduct->id !== $variation[ 'id' ] ) { + throw new Exception( sprintf( __( 'A variation within the product has a SKU which is already in use : %s' ), $variation[ 'sku' ] ) ); } } - }); + } ); /** * let's update the product and recover the * parent product, which id will be reused. * * @var array [ - * 'status': string, - * 'message': string, - * 'product': Product - * ] + * 'status': string, + * 'message': string, + * 'product': Product + * ] */ - $result = $this->updateSimpleProduct($product, $data); + $result = $this->updateSimpleProduct( $product, $data ); $parent = $result[ 'data' ][ 'product' ]; $parent->product_type = 'variable'; @@ -645,8 +671,8 @@ public function updateVariableProduct(Product $product, $data) * loop variations to see if they aren't * using already used SKU or Barcode */ - foreach ($data[ 'variations' ] as $variation) { - $this->updateProductVariation($parent, $variation[ 'id' ], $variation); + foreach ( $data[ 'variations' ] as $variation ) { + $this->updateProductVariation( $parent, $variation[ 'id' ], $variation ); } $parent->save(); @@ -655,8 +681,8 @@ public function updateVariableProduct(Product $product, $data) return [ 'status' => 'success', - 'message' => __('The variable product has been updated.'), - 'data' => compact('parent'), + 'message' => __( 'The variable product has been updated.' ), + 'data' => compact( 'parent' ), ]; } @@ -665,35 +691,35 @@ public function updateVariableProduct(Product $product, $data) * product according to the tax assigned * to that product */ - private function __fillProductFields(Product $product, array $data) + private function __fillProductFields( Product $product, array $data ) { /** * @param string $field - * @param mixed $value + * @param mixed $value * @param string $mode * @param array fields */ - extract($data); + extract( $data ); - if (! in_array($field, [ 'units', 'images', 'groups' ]) && ! is_array($value)) { + if ( ! in_array( $field, [ 'units', 'images', 'groups' ] ) && ! is_array( $value ) ) { $product->$field = $value; - } elseif ($field === 'units') { + } elseif ( $field === 'units' ) { $product->unit_group = $fields[ 'units' ][ 'unit_group' ]; $product->accurate_tracking = $fields[ 'units' ][ 'accurate_tracking' ] ?? false; $product->auto_cogs = $fields[ 'units' ][ 'auto_cogs' ] ?? false; } } - private function __computeUnitQuantities($fields, $product) + private function __computeUnitQuantities( $fields, $product ) { - if ($fields[ 'units' ]) { - foreach ($fields[ 'units' ][ 'selling_group' ] as $group) { + if ( $fields[ 'units' ] ) { + foreach ( $fields[ 'units' ][ 'selling_group' ] as $group ) { $unitQuantity = $this->getUnitQuantity( $product->id, $group[ 'unit_id' ] ); - if (! $unitQuantity instanceof ProductUnitQuantity) { + if ( ! $unitQuantity instanceof ProductUnitQuantity ) { $unitQuantity = new ProductUnitQuantity; $unitQuantity->unit_id = $group[ 'unit_id' ]; $unitQuantity->product_id = $product->id; @@ -705,9 +731,9 @@ private function __computeUnitQuantities($fields, $product) * available on the group variable, that's why we define * explicitly how everything is saved here. */ - $unitQuantity->sale_price = $this->currency->define($group[ 'sale_price_edit' ])->getRaw(); - $unitQuantity->sale_price_edit = $this->currency->define($group[ 'sale_price_edit' ])->getRaw(); - $unitQuantity->wholesale_price_edit = $this->currency->define($group[ 'wholesale_price_edit' ])->getRaw(); + $unitQuantity->sale_price = $this->currency->define( $group[ 'sale_price_edit' ] )->getRaw(); + $unitQuantity->sale_price_edit = $this->currency->define( $group[ 'sale_price_edit' ] )->getRaw(); + $unitQuantity->wholesale_price_edit = $this->currency->define( $group[ 'wholesale_price_edit' ] )->getRaw(); $unitQuantity->preview_url = $group[ 'preview_url' ] ?? ''; $unitQuantity->low_quantity = $group[ 'low_quantity' ] ?? 0; $unitQuantity->stock_alert_enabled = $group[ 'stock_alert_enabled' ] ?? false; @@ -738,34 +764,34 @@ private function __computeUnitQuantities($fields, $product) * We'll get the Cost Of Good Sold from * the whole product history. */ - public function computeCogsIfNecessary(ProductHistory $productHistory): void + public function computeCogsIfNecessary( ProductHistory $productHistory ): void { - $productHistory->load('product'); + $productHistory->load( 'product' ); /** * if the value is explicitely defined * then we'll skip the automatic detection */ - if ($productHistory->product instanceof Product && $productHistory->product->auto_cogs) { - $productHistories = ProductHistory::where('unit_id', $productHistory->unit_id)->where('product_id', $productHistory->product_id) - ->whereIn('operation_type', [ + if ( $productHistory->product instanceof Product && $productHistory->product->auto_cogs ) { + $productHistories = ProductHistory::where( 'unit_id', $productHistory->unit_id )->where( 'product_id', $productHistory->product_id ) + ->whereIn( 'operation_type', [ ProductHistory::ACTION_CONVERT_IN, ProductHistory::ACTION_STOCKED, // we might need to consider futher conversion option. - ]) + ] ) ->get(); - $totalQuantities = $productHistories->map(fn($productHistory) => $productHistory->quantity)->sum(); - $sums = $productHistories->map(fn($productHistory) => $productHistory->total_price)->sum(); + $totalQuantities = $productHistories->map( fn( $productHistory ) => $productHistory->quantity )->sum(); + $sums = $productHistories->map( fn( $productHistory ) => $productHistory->total_price )->sum(); - if ($sums > 0 && $totalQuantities > 0) { - $cogs = ns()->currency->define($sums)->divideBy($totalQuantities)->toFloat(); + if ( $sums > 0 && $totalQuantities > 0 ) { + $cogs = ns()->currency->define( $sums )->divideBy( $totalQuantities )->toFloat(); - $productUnitQuantity = ProductUnitQuantity::where('unit_id', $productHistory->unit_id) - ->where('product_id', $productHistory->product_id) + $productUnitQuantity = ProductUnitQuantity::where( 'unit_id', $productHistory->unit_id ) + ->where( 'product_id', $productHistory->product_id ) ->first(); - if ($productUnitQuantity instanceof ProductUnitQuantity) { + if ( $productUnitQuantity instanceof ProductUnitQuantity ) { $productUnitQuantity->cogs = $cogs; $productUnitQuantity->save(); } @@ -781,23 +807,23 @@ public function computeCogsIfNecessary(ProductHistory $productHistory): void * * @deprecated */ - public function refreshPrices(ProductUnitQuantity $product) + public function refreshPrices( ProductUnitQuantity $product ) { - return $this->taxService->computeTax($product, $product->tax_group_id ?? null); + return $this->taxService->computeTax( $product, $product->tax_group_id ?? null ); } /** * get product quantity according * to a specific unit id */ - public function getQuantity(int $product_id, int $unit_id) + public function getQuantity( int $product_id, int $unit_id ) { - $product = Product::with([ - 'unit_quantities' => fn($query) => $query->where('unit_id', $unit_id), - ])->find($product_id); + $product = Product::with( [ + 'unit_quantities' => fn( $query ) => $query->where( 'unit_id', $unit_id ), + ] )->find( $product_id ); - if ($product->unit_quantities->count() > 0) { - return $this->currency->define($product->unit_quantities->first()->quantity)->toFloat(); + if ( $product->unit_quantities->count() > 0 ) { + return $this->currency->define( $product->unit_quantities->first()->quantity )->toFloat(); } return 0; @@ -810,11 +836,11 @@ public function getQuantity(int $product_id, int $unit_id) * @param array history to save * @return array */ - public function saveHistory($operationType, array $data) + public function saveHistory( $operationType, array $data ) { - switch ($operationType) { + switch ( $operationType ) { case ProductHistory::ACTION_STOCKED: - $this->__saveProcurementHistory($data); + $this->__saveProcurementHistory( $data ); break; } } @@ -827,23 +853,23 @@ public function saveHistory($operationType, array $data) * @return array response of the process. * @return void */ - private function __saveProcurementHistory($data) + private function __saveProcurementHistory( $data ) { /** - * @var int unit_id - * @var int product_id + * @var int unit_id + * @var int product_id * @var float unit_price * @var float total_price - * @var int procurement_product_id - * @var int procurement_id + * @var int procurement_product_id + * @var int procurement_id * @var float quantity */ - extract($data); + extract( $data ); - $currentQuantity = $this->getQuantity($product_id, $unit_id); + $currentQuantity = $this->getQuantity( $product_id, $unit_id ); $newQuantity = $this->currency - ->define($currentQuantity) - ->additionateBy($quantity) + ->define( $currentQuantity ) + ->additionateBy( $quantity ) ->get(); $history = new ProductHistory; @@ -857,7 +883,7 @@ private function __saveProcurementHistory($data) $history->before_quantity = $currentQuantity; $history->quantity = $quantity; $history->after_quantity = $newQuantity; - $history->author = Auth::id() ?: Procurement::find($procurement_id)->author; + $history->author = Auth::id() ?: Procurement::find( $procurement_id )->author; $history->save(); } @@ -871,14 +897,14 @@ private function __saveProcurementHistory($data) * @param float quantity * @return arrray response */ - public function setQuantity($product_id, $unit_id, $quantity) + public function setQuantity( $product_id, $unit_id, $quantity ) { - $query = ProductUnitQuantity::where('product_id', $product_id) - ->where('unit_id', $unit_id); + $query = ProductUnitQuantity::where( 'product_id', $product_id ) + ->where( 'unit_id', $unit_id ); $unitQuantity = $query->first(); - if (! $unitQuantity instanceof ProductUnitQuantity) { + if ( ! $unitQuantity instanceof ProductUnitQuantity ) { $unitQuantity = new ProductUnitQuantity; } @@ -889,8 +915,8 @@ public function setQuantity($product_id, $unit_id, $quantity) return [ 'status' => 'success', - 'message' => __('The product\'s unit quantity has been updated.'), - 'data' => compact('unitQuantity'), + 'message' => __( 'The product\'s unit quantity has been updated.' ), + 'data' => compact( 'unitQuantity' ), ]; } @@ -901,59 +927,59 @@ public function setQuantity($product_id, $unit_id, $quantity) * @param int|Product product id * @return array response */ - public function resetProduct($product_id) + public function resetProduct( $product_id ) { /** * to avoid multiple call to the DB */ - if ($product_id instanceof Product) { + if ( $product_id instanceof Product ) { $product = $product_id; $product_id = $product->id; } else { - $product = $this->get($product_id); + $product = $this->get( $product_id ); } /** * let's check if the product is a variable * product */ - if ($product->product_type === 'variable') { - $result = $product->variations->map(function (Product $product) { - return $this->__resetProductRelatives($product); - })->toArray(); + if ( $product->product_type === 'variable' ) { + $result = $product->variations->map( function ( Product $product ) { + return $this->__resetProductRelatives( $product ); + } )->toArray(); - if (count($result) === 0) { + if ( count( $result ) === 0 ) { return [ 'status' => 'info', - 'message' => sprintf(__('Unable to reset this variable product "%s", since it doens\'t seems to have any variations'), $product->name), + 'message' => sprintf( __( 'Unable to reset this variable product "%s", since it doens\'t seems to have any variations' ), $product->name ), ]; } return [ 'status' => 'success', - 'message' => __('The product variations has been reset'), - 'data' => compact('result'), + 'message' => __( 'The product variations has been reset' ), + 'data' => compact( 'result' ), ]; } else { - return $this->__resetProductRelatives($product); + return $this->__resetProductRelatives( $product ); } } - private function __resetProductRelatives(Product $product) + private function __resetProductRelatives( Product $product ) { - ProductHistory::where('product_id', $product->id)->delete(); - ProductUnitQuantity::where('product_id', $product->id)->delete(); + ProductHistory::where( 'product_id', $product->id )->delete(); + ProductUnitQuantity::where( 'product_id', $product->id )->delete(); /** * dispatch an event to let everyone knows * a product has been reset */ - event(new ProductResetEvent($product)); + event( new ProductResetEvent( $product ) ); return [ 'status' => 'success', - 'message' => __('The product has been reset.'), - 'data' => compact('product'), + 'message' => __( 'The product has been reset.' ), + 'data' => compact( 'product' ), ]; } @@ -964,11 +990,11 @@ private function __resetProductRelatives(Product $product) * @param int product id * @return array operation status */ - public function deleteUsingID($product_id) + public function deleteUsingID( $product_id ) { - $product = $this->get($product_id); + $product = $this->get( $product_id ); - return $this->deleteProduct($product); + return $this->deleteProduct( $product ); } /** @@ -977,7 +1003,7 @@ public function deleteUsingID($product_id) * @param Product instance to delete * @return array operation status */ - public function deleteProduct(Product $product) + public function deleteProduct( Product $product ) { $name = $product->name; @@ -985,7 +1011,7 @@ public function deleteProduct(Product $product) return [ 'status' => 'success', - 'message' => sprintf(__('The product "%s" has been successfully deleted'), $name), + 'message' => sprintf( __( 'The product "%s" has been successfully deleted' ), $name ), ]; } @@ -995,11 +1021,11 @@ public function deleteProduct(Product $product) * @param int|Product * @return Collection variation */ - public function getProductVariations($product = null) + public function getProductVariations( $product = null ) { - if ($product !== null) { - if (is_numeric($product)) { - $product = $this->get($product); + if ( $product !== null ) { + if ( is_numeric( $product ) ) { + $product = $this->get( $product ); } return $product->variations; @@ -1025,14 +1051,14 @@ public function getVariations() * @param int variation id * @return Product */ - public function getVariation($id) + public function getVariation( $id ) { - $variation = Product::where('product_type', 'variation') - ->where('id', $id) + $variation = Product::where( 'product_type', 'variation' ) + ->where( 'id', $id ) ->first(); - if (! $variation instanceof Product) { - throw new Exception(__('Unable to find the requested variation using the provided ID.')); + if ( ! $variation instanceof Product ) { + throw new Exception( __( 'Unable to find the requested variation using the provided ID.' ) ); } return $variation; @@ -1044,21 +1070,21 @@ public function getVariation($id) * @param int product id * @return Collection */ - public function getUnitQuantities($product_id) + public function getUnitQuantities( $product_id ) { - return ProductUnitQuantity::withProduct($product_id) + return ProductUnitQuantity::withProduct( $product_id ) ->get() - ->map(function ($productQuantity) { + ->map( function ( $productQuantity ) { $productQuantity->unit; return $productQuantity; - }); + } ); } - public function getUnitQuantity($product_id, $unit_id) + public function getUnitQuantity( $product_id, $unit_id ) { - return ProductUnitQuantity::withProduct($product_id) - ->withUnit($unit_id) + return ProductUnitQuantity::withProduct( $product_id ) + ->withUnit( $unit_id ) ->first(); } @@ -1068,13 +1094,13 @@ public function getUnitQuantity($product_id, $unit_id) * @param int id * @return Collection */ - public function getProductHistory($product_id) + public function getProductHistory( $product_id ) { - return ProductHistory::withProduct($product_id)->orderBy('id')->get()->map(function ($product) { + return ProductHistory::withProduct( $product_id )->orderBy( 'id' )->get()->map( function ( $product ) { $product->unit; return $product; - }); + } ); } /** @@ -1082,9 +1108,9 @@ public function getProductHistory($product_id) * @param array fields [ quantity, unit_id, purchase_price ] * @return void */ - public function procurementStockOuting(ProcurementProduct $oldProduct, $fields) + public function procurementStockOuting( ProcurementProduct $oldProduct, $fields ) { - $history = $this->stockAdjustment(ProductHistory::ACTION_REMOVED, [ + $history = $this->stockAdjustment( ProductHistory::ACTION_REMOVED, [ 'unit_id' => $oldProduct->unit_id, 'product_id' => $oldProduct->product_id, 'unit_price' => $oldProduct->purchase_price, @@ -1093,12 +1119,12 @@ public function procurementStockOuting(ProcurementProduct $oldProduct, $fields) 'procurementProduct' => $oldProduct, 'procurement_product_id' => $oldProduct->id, 'quantity' => $fields[ 'quantity' ], - ]); + ] ); return [ 'status' => 'success', - 'message' => __('The product stock has been updated.'), - 'compac' => compact('history'), + 'message' => __( 'The product stock has been updated.' ), + 'compac' => compact( 'history' ), ]; } @@ -1109,32 +1135,32 @@ public function procurementStockOuting(ProcurementProduct $oldProduct, $fields) * @param string operation : deducted, sold, procured, deleted, adjusted, damaged * @param mixed[]<$unit_id,$product_id,$unit_price,?$total_price,?$procurement_id,?$procurement_product_id,?$sale_id,?$quantity> $data to manage */ - public function stockAdjustment($action, $data): ProductHistory|EloquentCollection|bool + public function stockAdjustment( $action, $data ): ProductHistory|EloquentCollection|bool { - extract($data, EXTR_REFS); + extract( $data, EXTR_REFS ); /** - * @param int $product_id - * @param float $unit_price - * @param id $unit_id - * @param float $total_price - * @param int $procurement_product_id - * @param OrderProduct $orderProduct + * @param int $product_id + * @param float $unit_price + * @param id $unit_id + * @param float $total_price + * @param int $procurement_product_id + * @param OrderProduct $orderProduct * @param ProcurementProduct $procurementProduct - * @param string $description - * @param float $quantity - * @param string $sku - * @param string $unit_identifier + * @param string $description + * @param float $quantity + * @param string $sku + * @param string $unit_identifier */ - $product = isset($product_id) ? Product::findOrFail($product_id) : Product::usingSKU($sku)->first(); + $product = isset( $product_id ) ? Product::findOrFail( $product_id ) : Product::usingSKU( $sku )->first(); $product_id = $product->id; - $unit_id = isset($unit_id) ? $unit_id : $unit->id; - $unit = Unit::findOrFail($unit_id); + $unit_id = isset( $unit_id ) ? $unit_id : $unit->id; + $unit = Unit::findOrFail( $unit_id ); /** * let's check the different * actions which are allowed on the current request */ - if (! in_array($action, [ + if ( ! in_array( $action, [ ProductHistory::ACTION_DEFECTIVE, ProductHistory::ACTION_DELETED, ProductHistory::ACTION_STOCKED, @@ -1153,30 +1179,30 @@ public function stockAdjustment($action, $data): ProductHistory|EloquentCollecti ProductHistory::ACTION_CONVERT_IN, ProductHistory::ACTION_CONVERT_OUT, ProductHistory::ACTION_SET, - ])) { - throw new NotAllowedException(__('The action is not an allowed operation.')); + ] ) ) { + throw new NotAllowedException( __( 'The action is not an allowed operation.' ) ); } /** * if the total_price is not provided * then we'll compute it */ - $total_price = empty($data[ 'total_price' ]) ? $this->currency - ->define($data[ 'unit_price' ]) - ->multipliedBy($data[ 'quantity' ]) + $total_price = empty( $data[ 'total_price' ] ) ? $this->currency + ->define( $data[ 'unit_price' ] ) + ->multipliedBy( $data[ 'quantity' ] ) ->get() : $data[ 'total_price' ]; /** * the change on the stock is only performed * if the Product has the stock management enabled. */ - if ($product->stock_management === Product::STOCK_MANAGEMENT_ENABLED) { - if ($product->type === Product::TYPE_GROUPED) { + if ( $product->stock_management === Product::STOCK_MANAGEMENT_ENABLED ) { + if ( $product->type === Product::TYPE_GROUPED ) { return $this->handleStockAdjustmentsForGroupedProducts( action: $action, orderProductQuantity: $quantity, product: $product, - orderProduct: isset($orderProduct) ? $orderProduct : null, + orderProduct: isset( $orderProduct ) ? $orderProduct : null, parentUnit: $unit ); } else { @@ -1187,8 +1213,8 @@ public function stockAdjustment($action, $data): ProductHistory|EloquentCollecti unit_id: $unit_id, total_price: $total_price, unit_price: $unit_price, - orderProduct: isset($orderProduct) ? $orderProduct : null, - procurementProduct: isset($procurementProduct) ? $procurementProduct : null + orderProduct: isset( $orderProduct ) ? $orderProduct : null, + procurementProduct: isset( $procurementProduct ) ? $procurementProduct : null ); } } @@ -1200,23 +1226,23 @@ public function stockAdjustment($action, $data): ProductHistory|EloquentCollecti * Handle stock transaction for the grouped products * * @param string $action - * @param float $quantity - * @param Unit $unit + * @param float $quantity + * @param Unit $unit */ private function handleStockAdjustmentsForGroupedProducts( $action, $orderProductQuantity, Product $product, Unit $parentUnit, - OrderProduct $orderProduct = null): EloquentCollection + ?OrderProduct $orderProduct = null ): EloquentCollection { - $product->load('sub_items'); + $product->load( 'sub_items' ); - if (! $orderProduct instanceof OrderProduct) { - throw new Exception(__('Adjusting grouped product inventory must result of a create, update, delete sale operation.')); + if ( ! $orderProduct instanceof OrderProduct ) { + throw new Exception( __( 'Adjusting grouped product inventory must result of a create, update, delete sale operation.' ) ); } - $products = $product->sub_items->map(function (ProductSubItem $subItem) use ($action, $orderProductQuantity, $parentUnit, $orderProduct) { + $products = $product->sub_items->map( function ( ProductSubItem $subItem ) use ( $action, $orderProductQuantity, $parentUnit, $orderProduct ) { $finalQuantity = $this->computeSubItemQuantity( subItemQuantity: $subItem->quantity, parentUnit: $parentUnit, @@ -1226,9 +1252,9 @@ private function handleStockAdjustmentsForGroupedProducts( /** * Let's retrieve the old item quantity. */ - $oldQuantity = $this->getQuantity($subItem->product_id, $subItem->unit_id); + $oldQuantity = $this->getQuantity( $subItem->product_id, $subItem->unit_id ); - if (in_array($action, ProductHistory::STOCK_REDUCE)) { + if ( in_array( $action, ProductHistory::STOCK_REDUCE ) ) { $this->preventNegativity( oldQuantity: $oldQuantity, quantity: $finalQuantity @@ -1237,7 +1263,7 @@ private function handleStockAdjustmentsForGroupedProducts( /** * @var string status * @var string message - * @var array [ 'oldQuantity', 'newQuantity' ] + * @var array [ 'oldQuantity', 'newQuantity' ] */ $result = $this->reduceUnitQuantities( product_id: $subItem->product_id, @@ -1245,11 +1271,11 @@ private function handleStockAdjustmentsForGroupedProducts( quantity: $finalQuantity, oldQuantity: $oldQuantity ); - } elseif (in_array($action, ProductHistory::STOCK_INCREASE)) { + } elseif ( in_array( $action, ProductHistory::STOCK_INCREASE ) ) { /** * @var string status * @var string message - * @var array [ 'oldQuantity', 'newQuantity' ] + * @var array [ 'oldQuantity', 'newQuantity' ] */ $result = $this->increaseUnitQuantities( product_id: $subItem->product_id, @@ -1275,7 +1301,7 @@ private function handleStockAdjustmentsForGroupedProducts( old_quantity: $result[ 'data' ][ 'oldQuantity' ], new_quantity: $result[ 'data' ][ 'newQuantity' ] ); - }); + } ); /** * This should record the transaction for @@ -1300,23 +1326,23 @@ private function handleStockAdjustmentsForGroupedProducts( /** * Will prevent negativity to occurs * - * @param float $oldQuantity - * @param float $quantity + * @param float $oldQuantity + * @param float $quantity * @return void */ - private function preventNegativity($oldQuantity, $quantity) + private function preventNegativity( $oldQuantity, $quantity ) { $diffQuantity = $this->currency - ->define($oldQuantity) - ->subtractBy($quantity) + ->define( $oldQuantity ) + ->subtractBy( $quantity ) ->get(); /** * this should prevent negative * stock on the current item */ - if ($diffQuantity < 0) { - throw new NotAllowedException(sprintf(__('Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).'), $diffQuantity, $oldQuantity, $quantity)); + if ( $diffQuantity < 0 ) { + throw new NotAllowedException( sprintf( __( 'Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).' ), $diffQuantity, $oldQuantity, $quantity ) ); } } @@ -1324,27 +1350,27 @@ private function preventNegativity($oldQuantity, $quantity) * We'll handle here stock adjustment * for all regular products * - * @param string $action - * @param float $oldQuantity - * @param float $quantity - * @param int $product_id - * @param int $order_id - * @param int $order_product_id - * @param int $unit_id - * @param ProcurementProduct $procurementProduct + * @param string $action + * @param float $oldQuantity + * @param float $quantity + * @param int $product_id + * @param int $order_id + * @param int $order_product_id + * @param int $unit_id + * @param ProcurementProduct $procurementProduct * @return ProductHistory */ - private function handleStockAdjustmentRegularProducts($action, $quantity, $product_id, $unit_id, $orderProduct = null, $unit_price = 0, $total_price = 0, $procurementProduct = null) + private function handleStockAdjustmentRegularProducts( $action, $quantity, $product_id, $unit_id, $orderProduct = null, $unit_price = 0, $total_price = 0, $procurementProduct = null ) { /** * we would like to verify if * by editing a procurement product * the remaining quantity will be greather than 0 */ - $oldQuantity = $this->getQuantity($product_id, $unit_id); + $oldQuantity = $this->getQuantity( $product_id, $unit_id ); - if (in_array($action, ProductHistory::STOCK_REDUCE) || in_array($action, ProductHistory::STOCK_INCREASE)) { - if (in_array($action, ProductHistory::STOCK_REDUCE)) { + if ( in_array( $action, ProductHistory::STOCK_REDUCE ) || in_array( $action, ProductHistory::STOCK_INCREASE ) ) { + if ( in_array( $action, ProductHistory::STOCK_REDUCE ) ) { $this->preventNegativity( oldQuantity: $oldQuantity, quantity: $quantity @@ -1353,33 +1379,33 @@ private function handleStockAdjustmentRegularProducts($action, $quantity, $produ /** * @var string status * @var string message - * @var array [ 'oldQuantity', 'newQuantity' ] + * @var array [ 'oldQuantity', 'newQuantity' ] */ - $result = $this->reduceUnitQuantities($product_id, $unit_id, abs($quantity), $oldQuantity); + $result = $this->reduceUnitQuantities( $product_id, $unit_id, abs( $quantity ), $oldQuantity ); /** * We should reduce the quantity if * we're dealing with a product that has * accurate stock tracking */ - if ($procurementProduct instanceof ProcurementProduct) { - $this->updateProcurementProductQuantity($procurementProduct, $quantity, ProcurementProduct::STOCK_REDUCE); + if ( $procurementProduct instanceof ProcurementProduct ) { + $this->updateProcurementProductQuantity( $procurementProduct, $quantity, ProcurementProduct::STOCK_REDUCE ); } - } elseif (in_array($action, ProductHistory::STOCK_INCREASE)) { + } elseif ( in_array( $action, ProductHistory::STOCK_INCREASE ) ) { /** * @var string status * @var string message - * @var array [ 'oldQuantity', 'newQuantity' ] + * @var array [ 'oldQuantity', 'newQuantity' ] */ - $result = $this->increaseUnitQuantities($product_id, $unit_id, abs($quantity), $oldQuantity); + $result = $this->increaseUnitQuantities( $product_id, $unit_id, abs( $quantity ), $oldQuantity ); /** * We should reduce the quantity if * we're dealing with a product that has * accurate stock tracking */ - if ($procurementProduct instanceof ProcurementProduct) { - $this->updateProcurementProductQuantity($procurementProduct, $quantity, ProcurementProduct::STOCK_INCREASE); + if ( $procurementProduct instanceof ProcurementProduct ) { + $this->updateProcurementProductQuantity( $procurementProduct, $quantity, ProcurementProduct::STOCK_INCREASE ); } } @@ -1392,20 +1418,20 @@ private function handleStockAdjustmentRegularProducts($action, $quantity, $produ total_price: $total_price, procurement_product_id: $procurementProduct?->id ?: null, procurement_id: $procurementProduct->procurement_id ?? null, - order_id: isset($orderProduct) ? $orderProduct->order_id : null, - order_product_id: isset($orderProduct) ? $orderProduct->id : null, + order_id: isset( $orderProduct ) ? $orderProduct->order_id : null, + order_product_id: isset( $orderProduct ) ? $orderProduct->id : null, old_quantity: $result[ 'data' ][ 'oldQuantity' ], new_quantity: $result[ 'data' ][ 'newQuantity' ] ); } elseif ( - in_array($action, [ ProductHistory::ACTION_SET ]) + in_array( $action, [ ProductHistory::ACTION_SET ] ) ) { $currentQuantity = $this->getQuantity( product_id: $product_id, unit_id: $unit_id ); - if ($currentQuantity < $quantity) { + if ( $currentQuantity < $quantity ) { $action = ProductHistory::ACTION_ADDED; $adjustQuantity = $quantity - $currentQuantity; @@ -1415,7 +1441,7 @@ private function handleStockAdjustmentRegularProducts($action, $quantity, $produ quantity: $adjustQuantity, oldQuantity: $currentQuantity ); - } elseif ($currentQuantity > $quantity) { + } elseif ( $currentQuantity > $quantity ) { $action = ProductHistory::ACTION_REMOVED; $adjustQuantity = $currentQuantity - $quantity; @@ -1436,8 +1462,8 @@ private function handleStockAdjustmentRegularProducts($action, $quantity, $produ total_price: $total_price, procurement_product_id: $procurementProduct?->id ?: null, procurement_id: $procurementProduct->procurement_id ?? null, - order_id: isset($orderProduct) ? $orderProduct->order_id : null, - order_product_id: isset($orderProduct) ? $orderProduct->id : null, + order_id: isset( $orderProduct ) ? $orderProduct->order_id : null, + order_product_id: isset( $orderProduct ) ? $orderProduct->id : null, old_quantity: $currentQuantity, new_quantity: $quantity ); @@ -1445,7 +1471,7 @@ private function handleStockAdjustmentRegularProducts($action, $quantity, $produ throw new NotAllowedException( sprintf( - __('Unsupported stock action "%s"'), + __( 'Unsupported stock action "%s"' ), $action ) ); @@ -1454,14 +1480,14 @@ private function handleStockAdjustmentRegularProducts($action, $quantity, $produ /** * Records stock transaction for the provided product. * - * @param int $product_id + * @param int $product_id * @param string $action - * @param int $unit_id - * @param float $unit_price - * @param float $quantity - * @param float $total_price - * @param float $old_quantity - * @param float $new_quantity + * @param int $unit_id + * @param float $unit_price + * @param float $quantity + * @param float $total_price + * @param float $old_quantity + * @param float $new_quantity */ public function recordStockHistory( $product_id, @@ -1475,7 +1501,7 @@ public function recordStockHistory( $procurement_product_id = null, $procurement_id = null, $old_quantity = 0, - $new_quantity = 0) + $new_quantity = 0 ) { $history = new ProductHistory; $history->product_id = $product_id; @@ -1489,12 +1515,12 @@ public function recordStockHistory( $history->total_price = $total_price; $history->description = $description ?? ''; // a description might be provided to describe the operation $history->before_quantity = $old_quantity; // if the stock management is 0, it shouldn't change - $history->quantity = abs($quantity); + $history->quantity = abs( $quantity ); $history->after_quantity = $new_quantity; // if the stock management is 0, it shouldn't change $history->author = Auth::id(); $history->save(); - event(new ProductAfterStockAdjustmentEvent($history)); + event( new ProductAfterStockAdjustmentEvent( $history ) ); return $history; } @@ -1502,37 +1528,37 @@ public function recordStockHistory( /** * Return a base unit from a unit. */ - public function getBaseUnit(Unit $unit) + public function getBaseUnit( Unit $unit ) { - if ($unit->base_unit) { + if ( $unit->base_unit ) { return $unit; } - $unit->load('group.units'); + $unit->load( 'group.units' ); - return $unit->group->units->filter(fn($unit) => $unit->base_unit)->first(); + return $unit->group->units->filter( fn( $unit ) => $unit->base_unit )->first(); } public function computeSubItemQuantity( float $subItemQuantity, Unit $parentUnit, - float $parentQuantity) + float $parentQuantity ) { - return ($subItemQuantity * $parentUnit->value) * $parentQuantity; + return ( $subItemQuantity * $parentUnit->value ) * $parentQuantity; } /** * Update procurement product quantity * * @param ProcurementProduct $procurementProduct - * @param int $quantity - * @param string $action + * @param int $quantity + * @param string $action */ - public function updateProcurementProductQuantity($procurementProduct, $quantity, $action) + public function updateProcurementProductQuantity( $procurementProduct, $quantity, $action ) { - if ($action === ProcurementProduct::STOCK_INCREASE) { + if ( $action === ProcurementProduct::STOCK_INCREASE ) { $procurementProduct->available_quantity += $quantity; - } elseif ($action === ProcurementProduct::STOCK_REDUCE) { + } elseif ( $action === ProcurementProduct::STOCK_REDUCE ) { $procurementProduct->available_quantity -= $quantity; } @@ -1548,7 +1574,7 @@ public function updateProcurementProductQuantity($procurementProduct, $quantity, * @param float quantity * @return void */ - public function reduceUnitQuantities($product_id, $unit_id, $quantity, $oldQuantity) + public function reduceUnitQuantities( $product_id, $unit_id, $quantity, $oldQuantity ) { /** * we would like to verify if @@ -1556,8 +1582,8 @@ public function reduceUnitQuantities($product_id, $unit_id, $quantity, $oldQuant * the remaining quantity will be greather than 0 */ $newQuantity = $this->currency - ->define($oldQuantity) - ->subtractBy($quantity) + ->define( $oldQuantity ) + ->subtractBy( $quantity ) ->get(); /** @@ -1573,8 +1599,8 @@ public function reduceUnitQuantities($product_id, $unit_id, $quantity, $oldQuant return [ 'status' => 'success', - 'message' => __('The product quantity has been updated.'), - 'data' => compact('newQuantity', 'oldQuantity', 'quantity'), + 'message' => __( 'The product quantity has been updated.' ), + 'data' => compact( 'newQuantity', 'oldQuantity', 'quantity' ), ]; } @@ -1587,7 +1613,7 @@ public function reduceUnitQuantities($product_id, $unit_id, $quantity, $oldQuant * @param float quantity * @return void */ - public function increaseUnitQuantities($product_id, $unit_id, $quantity, $oldQuantity) + public function increaseUnitQuantities( $product_id, $unit_id, $quantity, $oldQuantity ) { /** * we would like to verify if @@ -1595,8 +1621,8 @@ public function increaseUnitQuantities($product_id, $unit_id, $quantity, $oldQua * the remaining quantity will be greather than 0 */ $newQuantity = $this->currency - ->define($oldQuantity) - ->additionateBy($quantity) + ->define( $oldQuantity ) + ->additionateBy( $quantity ) ->get(); /** @@ -1612,8 +1638,8 @@ public function increaseUnitQuantities($product_id, $unit_id, $quantity, $oldQua return [ 'status' => 'success', - 'message' => __('The product quantity has been updated.'), - 'data' => compact('newQuantity', 'oldQuantity', 'quantity'), + 'message' => __( 'The product quantity has been updated.' ), + 'data' => compact( 'newQuantity', 'oldQuantity', 'quantity' ), ]; } @@ -1623,9 +1649,9 @@ public function increaseUnitQuantities($product_id, $unit_id, $quantity, $oldQua * * @param array<$quantity,$unit_id,$purchase_price,$product_id> */ - public function procurementStockEntry(ProcurementProduct $product, $fields) + public function procurementStockEntry( ProcurementProduct $product, $fields ) { - $history = $this->stockAdjustment(ProductHistory::ACTION_ADDED, [ + $history = $this->stockAdjustment( ProductHistory::ACTION_ADDED, [ 'unit_id' => $product->unit_id, 'product_id' => $product->product_id, 'unit_price' => $product->purchase_price, @@ -1634,12 +1660,12 @@ public function procurementStockEntry(ProcurementProduct $product, $fields) 'procurementProduct' => $product, 'procurement_product_id' => $product->id, 'quantity' => $fields[ 'quantity' ], - ]); + ] ); return [ 'status' => 'success', - 'message' => __('The product stock has been updated.'), - 'data' => compact('history'), + 'message' => __( 'The product stock has been updated.' ), + 'data' => compact( 'history' ), ]; } @@ -1658,25 +1684,25 @@ public function getProducts() * * @return array operation result */ - public function deleteVariations($id = null) + public function deleteVariations( $id = null ) { - $variations = $this->getVariations($id); + $variations = $this->getVariations( $id ); $count = $variations->count(); - $variations->map(function ($variation) { + $variations->map( function ( $variation ) { $variation->delete(); - }); + } ); - if ($count === 0) { + if ( $count === 0 ) { return [ 'status' => 'info', - 'message' => __('There is no variations to delete.'), + 'message' => __( 'There is no variations to delete.' ), ]; } return [ 'status' => 'success', - 'message' => sprintf(__('%s product(s) has been deleted.'), $count), + 'message' => sprintf( __( '%s product(s) has been deleted.' ), $count ), ]; } @@ -1687,21 +1713,21 @@ public function deleteVariations($id = null) */ public function deleteAllProducts() { - $result = $this->getProducts()->map(function ($product) { - return $this->deleteProduct($product); - })->toArray(); + $result = $this->getProducts()->map( function ( $product ) { + return $this->deleteProduct( $product ); + } )->toArray(); - if (! $result) { + if ( ! $result ) { return [ 'status' => 'info', - 'message' => __('There is no products to delete.'), + 'message' => __( 'There is no products to delete.' ), ]; } return [ 'status' => 'success', - 'message' => sprintf(__('%s products(s) has been deleted.'), count($result)), - 'data' => compact('result'), + 'message' => sprintf( __( '%s products(s) has been deleted.' ), count( $result ) ), + 'data' => compact( 'result' ), ]; } @@ -1709,20 +1735,20 @@ public function deleteAllProducts() * Will return the last purchase price * defined for the provided product */ - public function getLastPurchasePrice(?Product $product, Unit $unit, string $before = null): float|int + public function getLastPurchasePrice( ?Product $product, Unit $unit, ?string $before = null ): float|int { - if ($product instanceof Product) { - $request = ProcurementProduct::where('product_id', $product->id) - ->where('unit_id', $unit->id) - ->orderBy('id', 'desc'); + if ( $product instanceof Product ) { + $request = ProcurementProduct::where( 'product_id', $product->id ) + ->where( 'unit_id', $unit->id ) + ->orderBy( 'id', 'desc' ); - if ($before) { - $request->where('created_at', '<=', $before); + if ( $before ) { + $request->where( 'created_at', '<=', $before ); } $procurementProduct = $request->first(); - if ($procurementProduct instanceof ProcurementProduct) { + if ( $procurementProduct instanceof ProcurementProduct ) { return $procurementProduct->purchase_price; } } @@ -1738,23 +1764,23 @@ public function getLastPurchasePrice(?Product $product, Unit $unit, string $befo * @param string|int identifier * @return Product */ - public function getProductUsingArgument($argument = 'id', $identifier = null) + public function getProductUsingArgument( $argument = 'id', $identifier = null ) { - if ($identifier instanceof Product) { + if ( $identifier instanceof Product ) { return $identifier; } try { - switch ($argument) { + switch ( $argument ) { case 'id': - return $this->get($identifier); + return $this->get( $identifier ); case 'sku': - return $this->getProductUsingSKUOrFail($identifier); + return $this->getProductUsingSKUOrFail( $identifier ); case 'barcode': - return $this->getProductUsingBarcodeOrFail($identifier); + return $this->getProductUsingBarcodeOrFail( $identifier ); } - } catch (Exception $exception) { - throw new Exception(sprintf(__('Unable to find the product, as the argument "%s" which value is "%s", doesn\'t have any match.'), $argument, $identifier)); + } catch ( Exception $exception ) { + throw new Exception( sprintf( __( 'Unable to find the product, as the argument "%s" which value is "%s", doesn\'t have any match.' ), $argument, $identifier ) ); } } @@ -1766,7 +1792,7 @@ public function getProductUsingArgument($argument = 'id', $identifier = null) * @param array fields * @return array */ - public function createProductVariation(Product $parent, $fields) + public function createProductVariation( Product $parent, $fields ) { $product = new Product; @@ -1774,8 +1800,8 @@ public function createProductVariation(Product $parent, $fields) $mode = 'create'; - foreach ($fields as $field => $value) { - $this->__fillProductFields($product, compact('field', 'value', 'mode', 'fields')); + foreach ( $fields as $field => $value ) { + $this->__fillProductFields( $product, compact( 'field', 'value', 'mode', 'fields' ) ); } $product->author = Auth::id(); @@ -1794,22 +1820,22 @@ public function createProductVariation(Product $parent, $fields) return [ 'status' => 'success', - 'message' => __('The product variation has been successfully created.'), - 'data' => compact('product'), + 'message' => __( 'The product variation has been successfully created.' ), + 'data' => compact( 'product' ), ]; } /** * Update product variation * - * @param Product $parent - * @param int $id - * @param array $fields + * @param Product $parent + * @param int $id + * @param array $fields * @return array */ - public function updateProductVariation($parent, $id, $fields) + public function updateProductVariation( $parent, $id, $fields ) { - $product = Product::find($id); + $product = Product::find( $id ); $mode = 'update'; event( new ProductBeforeUpdatedEvent( $product ) ); @@ -1820,7 +1846,7 @@ public function updateProductVariation($parent, $id, $fields) * since the variation don't need to * access the parent data informations. */ - $this->__fillProductFields($product, compact('field', 'value', 'mode', 'fields')); + $this->__fillProductFields( $product, compact( 'field', 'value', 'mode', 'fields' ) ); } $product->author = Auth::id(); @@ -1840,8 +1866,8 @@ public function updateProductVariation($parent, $id, $fields) return [ 'status' => 'success', - 'message' => __('The product variation has been updated.'), - 'data' => compact('product'), + 'message' => __( 'The product variation has been updated.' ), + 'data' => compact( 'product' ), ]; } @@ -1851,10 +1877,10 @@ public function updateProductVariation($parent, $id, $fields) * * @return array */ - public function getProductUnitQuantities(Product $product) + public function getProductUnitQuantities( Product $product ) { return $product->unit_quantities() - ->with([ 'unit' ]) + ->with( [ 'unit' ] ) ->visible() ->get(); } @@ -1865,89 +1891,144 @@ public function getProductUnitQuantities(Product $product) * * @return void */ - public function generateProductBarcode(Product $product) + public function generateProductBarcode( Product $product ) { $this->barcodeService->generateBarcode( $product->barcode, $product->barcode_type ); - $product->unit_quantities->each(function ($unitQuantity) use ($product) { + $product->unit_quantities->each( function ( $unitQuantity ) use ( $product ) { $this->barcodeService->generateBarcode( $unitQuantity->barcode, $product->barcode_type ); - }); + } ); } /** * Convert quantity from a source unit ($from) to a destination unit ($to) * using the provided quantity and product. */ - public function convertUnitQuantities(Product $product, Unit $from, float $quantity, Unit $to, ProcurementProduct $procurementProduct = null): array + public function convertUnitQuantities( Product $product, Unit $from, float $quantity, Unit $to, ?ProcurementProduct $procurementProduct = null ): array { - if ($product->stock_management !== Product::STOCK_MANAGEMENT_ENABLED) { - throw new NotAllowedException(__('You cannot convert unit on a product having stock management disabled.')); + if ( $product->stock_management !== Product::STOCK_MANAGEMENT_ENABLED ) { + throw new NotAllowedException( __( 'You cannot convert unit on a product having stock management disabled.' ) ); } - $unitQuantityFrom = ProductUnitQuantity::where('product_id', $product->id) - ->where('unit_id', $from->id) + if ( $quantity == 0 ) { + throw new NotAllowedException( __( 'The quantity to convert can\'t be zero.' ) ); + } + + $unitQuantityFrom = ProductUnitQuantity::where( 'product_id', $product->id ) + ->where( 'unit_id', $from->id ) ->first(); - $unitQuantityTo = ProductUnitQuantity::where('product_id', $product->id) - ->where('unit_id', $to->id) + $unitQuantityTo = ProductUnitQuantity::where( 'product_id', $product->id ) + ->where( 'unit_id', $to->id ) ->first(); - if ($from->id === $to->id) { + if ( $unitQuantityFrom->quantity < $quantity ) { throw new NotAllowedException( - __('The source and the destination unit can\'t be the same. What are you trying to do ?') - ); - } - - if (! $unitQuantityFrom instanceof ProductUnitQuantity) { - throw new NotFoundException( sprintf( - __('There is no source unit quantity having the name "%s" for the item %s'), + __( 'The source unit "(%s)" for the product "%s", does not have enough quantity "%s". "%s" is required for the conversion.' ), $from->name, - $product->name + $product->name, + $unitQuantityFrom->quantity, + $quantity ) ); } - if (! $unitQuantityTo instanceof ProductUnitQuantity) { + if ( $from->id === $to->id ) { + throw new NotAllowedException( + __( 'The source and the destination unit can\'t be the same. What are you trying to do ?' ) + ); + } + + if ( ! $unitQuantityFrom instanceof ProductUnitQuantity ) { throw new NotFoundException( sprintf( - __('There is no destination unit quantity having the name %s for the item %s'), + __( 'There is no source unit quantity having the name "%s" for the item %s' ), $from->name, $product->name ) ); } - if (! $this->unitService->isFromSameGroup($from, $to)) { - throw new NotAllowedException(__('The source unit and the destination unit doens\'t belong to the same unit group.')); + /** + * if the unitQuantityTo is missing, we might then + * create a new unit with price set to 0. + */ + if ( ! $unitQuantityTo instanceof ProductUnitQuantity ) { + $unitQuantityTo = new ProductUnitQuantity; + $unitQuantityTo->product_id = $product->id; + $unitQuantityTo->unit_id = $to->id; + $unitQuantityTo->quantity = 0; + $unitQuantityTo->visible = false; + $unitQuantityTo->save(); + } + + if ( ! $this->unitService->isFromSameGroup( $from, $to ) ) { + throw new NotAllowedException( __( 'The source unit and the destination unit doens\'t belong to the same unit group.' ) ); } /** * We can't proceed with no base unit defined. */ - $from->load([ - 'group.units' => function ($query) { - $query->where('base_unit', true); + $from->load( [ + 'group.units' => function ( $query ) { + $query->where( 'base_unit', true ); }, - ]); + ] ); $baseUnit = $from->group->units->first(); - if (! $baseUnit instanceof Unit) { + if ( ! $baseUnit instanceof Unit ) { throw new NotFoundException( sprintf( - __('The group %s has no base unit defined'), + __( 'The group %s has no base unit defined' ), $from->group->name ) ); } + /** + * avoid converting unnecessary quantity, in order + * to avoid having a quantity with a lot of decimal. + * + * @todo this should be skippable if the user has enabled decimal quantity + */ + if ( $from->value < $to->value ) { + $totalPossibleSlots = floor( ( $from->value * $quantity ) / $to->value ); + $quantity = $totalPossibleSlots * $to->value; + } + + /** + * This quantity will be added removed + * from the source ProductUnitQuantity + */ + $finalDestinationQuantity = $this->unitService->getConvertedQuantity( + from: $from, + to: $to, + quantity: $quantity + ); + + /** + * unless if decimal values are allowed + * we should prevent a convertion that cause float numbers + */ + if ( $finalDestinationQuantity < 1 ) { + throw new NotAllowedException( + sprintf( + __( 'The conversion from "%s" will cause a decimal value less than one count of the destination unit "%s".' ), + $from->name, + $finalDestinationQuantity, + $to->name + ) + ); + } + $lastFromPurchasePrice = $this->getLastPurchasePrice( product: $product, unit: $from @@ -1964,7 +2045,7 @@ public function convertUnitQuantities(Product $product, Unit $from, float $quant unit_price: $lastFromPurchasePrice, quantity: $quantity, procurementProduct: $procurementProduct, - total_price: ns()->currency->define($lastFromPurchasePrice)->multipliedBy($quantity)->getRaw(), + total_price: ns()->currency->define( $lastFromPurchasePrice )->multipliedBy( $quantity )->getRaw(), ); $lastToPurchasePrice = $this->getLastPurchasePrice( @@ -1972,16 +2053,6 @@ public function convertUnitQuantities(Product $product, Unit $from, float $quant unit: $to ); - /** - * This quantity will be added removed - * from the source ProductUnitQuantity - */ - $finalDestinationQuantity = $this->unitService->getConvertedQuantity( - from: $from, - to: $to, - quantity: $quantity - ); - $this->handleStockAdjustmentRegularProducts( action: ProductHistory::ACTION_CONVERT_IN, product_id: $product->id, @@ -1989,13 +2060,13 @@ public function convertUnitQuantities(Product $product, Unit $from, float $quant unit_price: $lastToPurchasePrice, quantity: $finalDestinationQuantity, procurementProduct: $procurementProduct, - total_price: ns()->currency->define($lastFromPurchasePrice)->multipliedBy($quantity)->getRaw(), + total_price: ns()->currency->define( $lastFromPurchasePrice )->multipliedBy( $quantity )->getRaw(), ); return [ 'status' => 'success', 'message' => sprintf( - __('The conversion of %s(%s) to %s(%s) was successful'), + __( 'The conversion of %s(%s) to %s(%s) was successful' ), $quantity, $from->name, $finalDestinationQuantity, @@ -2007,66 +2078,66 @@ public function convertUnitQuantities(Product $product, Unit $from, float $quant /** * Get the product using the provided SKU */ - public function searchProduct(string $search, int $limit = 5, array $arguments = []) + public function searchProduct( string $search, int $limit = 5, array $arguments = [] ) { /** * @var Builder $query */ $query = Product::query() - ->where(function ($query) use ($search) { + ->where( function ( $query ) use ( $search ) { $query - ->orWhere('name', 'LIKE', "%{$search}%") - ->orWhere('sku', 'LIKE', "%{$search}%") - ->orWhere('barcode', 'LIKE', "%{$search}%"); - }) - ->with([ + ->orWhere( 'name', 'LIKE', "%{$search}%" ) + ->orWhere( 'sku', 'LIKE', "%{$search}%" ) + ->orWhere( 'barcode', 'LIKE', "%{$search}%" ); + } ) + ->with( [ 'unit_quantities.unit', 'category', 'tax_group.taxes', - ]) - ->limit($limit); + ] ) + ->limit( $limit ); /** * if custom arguments are provided * we'll parse it and convert it into * eloquent arguments */ - if (! empty($arguments)) { + if ( ! empty( $arguments ) ) { $eloquenize = new EloquenizeArrayService; - $eloquenize->parse($query, $arguments); + $eloquenize->parse( $query, $arguments ); } return $query->get() - ->map(function ($product) { - $units = json_decode($product->purchase_unit_ids); + ->map( function ( $product ) { + $units = json_decode( $product->purchase_unit_ids ); - if ($units) { + if ( $units ) { $product->purchase_units = collect(); - collect($units)->each(function ($unitID) use (&$product) { - $product->purchase_units->push(Unit::find($unitID)); - }); + collect( $units )->each( function ( $unitID ) use ( &$product ) { + $product->purchase_units->push( Unit::find( $unitID ) ); + } ); } return $product; - }); + } ); } /** * Get the product history for the provided. */ - public function sumProductHistory(int $product_id, int $unit_id, string $startOfDay, string $endOfDay, array $action): float|int + public function sumProductHistory( int $product_id, int $unit_id, string $startOfDay, string $endOfDay, array $action ): float|int { - return ProductHistory::where('product_id', $product_id) - ->where('unit_id', $unit_id) - ->whereIn('action', $action) - ->whereBetween('created_at', [$startOfDay, $endOfDay]) - ->sum('quantity'); + return ProductHistory::where( 'product_id', $product_id ) + ->where( 'unit_id', $unit_id ) + ->whereIn( 'action', $action ) + ->whereBetween( 'created_at', [$startOfDay, $endOfDay] ) + ->sum( 'quantity' ); } /** * Delete relations linked to a product */ - public function deleteProductRelations(Product $product) + public function deleteProductRelations( Product $product ) { $product->sub_items()->delete(); $product->galleries()->delete(); @@ -2077,7 +2148,7 @@ public function deleteProductRelations(Product $product) return [ 'status' => 'success', - 'message' => __('The product has been deleted.'), + 'message' => __( 'The product has been deleted.' ), ]; } } diff --git a/app/Services/ProviderService.php b/app/Services/ProviderService.php index e309d64b3..356b6605a 100644 --- a/app/Services/ProviderService.php +++ b/app/Services/ProviderService.php @@ -10,9 +10,9 @@ class ProviderService { - public function get($id = null) + public function get( $id = null ) { - return $id === null ? Provider::get() : Provider::find($id); + return $id === null ? Provider::get() : Provider::find( $id ); } /** @@ -22,11 +22,11 @@ public function get($id = null) * @param array information to save * @return array response */ - public function create($data) + public function create( $data ) { $provider = new Provider; - foreach ($data as $field => $value) { + foreach ( $data as $field => $value ) { $provider->$field = $value; } @@ -35,8 +35,8 @@ public function create($data) return [ 'status' => 'success', - 'message' => __('The provider has been created.'), - 'data' => compact('provider'), + 'message' => __( 'The provider has been created.' ), + 'data' => compact( 'provider' ), ]; } @@ -48,12 +48,12 @@ public function create($data) * @param array data to update * @return array response */ - public function edit($id, $data) + public function edit( $id, $data ) { - $provider = Provider::find($id); + $provider = Provider::find( $id ); - if ($provider instanceof Provider) { - foreach ($data as $field => $value) { + if ( $provider instanceof Provider ) { + foreach ( $data as $field => $value ) { $provider->$field = $value; } @@ -62,12 +62,12 @@ public function edit($id, $data) return [ 'status' => 'success', - 'message' => __('The provider has been updated.'), - 'data' => compact('provider'), + 'message' => __( 'The provider has been updated.' ), + 'data' => compact( 'provider' ), ]; } - throw new Exception(__('Unable to find the provider using the specified id.')); + throw new Exception( __( 'Unable to find the provider using the specified id.' ) ); } /** @@ -77,14 +77,14 @@ public function edit($id, $data) * @param int provider id * @return array response */ - public function delete($id) + public function delete( $id ) { - $provider = Provider::findOrFail($id); + $provider = Provider::findOrFail( $id ); $provider->delete(); return [ 'status' => 'success', - 'message' => __('The provider has been deleted.'), + 'message' => __( 'The provider has been deleted.' ), ]; } @@ -95,12 +95,12 @@ public function delete($id) * @param int provider id * @return array */ - public function procurements($provider_id) + public function procurements( $provider_id ) { - $provider = Provider::find($provider_id); + $provider = Provider::find( $provider_id ); - if (! $provider instanceof Provider) { - throw new Exception(__('Unable to find the provider using the specified identifier.')); + if ( ! $provider instanceof Provider ) { + throw new Exception( __( 'Unable to find the provider using the specified identifier.' ) ); } return $provider->procurements; @@ -112,11 +112,11 @@ public function procurements($provider_id) * @param int provider id * @return array */ - public function computeSummary(Provider $provider) + public function computeSummary( Provider $provider ) { try { - $totalOwed = $provider->procurements()->where('payment_status', 'unpaid')->sum('value'); - $totalPaid = $provider->procurements()->where('payment_status', 'paid')->sum('value'); + $totalOwed = $provider->procurements()->where( 'payment_status', 'unpaid' )->sum( 'value' ); + $totalPaid = $provider->procurements()->where( 'payment_status', 'paid' )->sum( 'value' ); $provider->amount_due = $totalOwed; $provider->amount_paid = $totalPaid; @@ -124,33 +124,33 @@ public function computeSummary(Provider $provider) return [ 'status' => 'success', - 'message' => __('The provider account has been updated.'), + 'message' => __( 'The provider account has been updated.' ), ]; - } catch (Exception $exception) { - throw new Exception(sprintf(__('An error occurred: %s.'), $exception->getMessage())); + } catch ( Exception $exception ) { + throw new Exception( sprintf( __( 'An error occurred: %s.' ), $exception->getMessage() ) ); } } /** * Will return a human redale status * - * @param string $label + * @param string $label * @return string */ - public function getDeliveryStatusLabel($label) + public function getDeliveryStatusLabel( $label ) { - switch ($label) { + switch ( $label ) { case Procurement::PENDING: - $label = __('Pending'); + $label = __( 'Pending' ); break; case Procurement::DELIVERED: - $label = __('Delivered'); + $label = __( 'Delivered' ); break; case Procurement::STOCKED: - $label = __('Stocked'); + $label = __( 'Stocked' ); break; default: - $label = Hook::filter('ns-delivery-status', $label); + $label = Hook::filter( 'ns-delivery-status', $label ); break; } @@ -160,17 +160,17 @@ public function getDeliveryStatusLabel($label) /** * Will return the payment status label * - * @param string $label + * @param string $label * @return string */ - public function getPaymentStatusLabel($label) + public function getPaymentStatusLabel( $label ) { - switch ($label) { + switch ( $label ) { case Procurement::PAYMENT_UNPAID: - $label = __('Unpaid'); + $label = __( 'Unpaid' ); break; case Procurement::PAYMENT_PAID: - $label = __('Paid'); + $label = __( 'Paid' ); break; } @@ -184,12 +184,12 @@ public function getPaymentStatusLabel($label) * * @return void */ - public function cancelPaymentForProcurement(Procurement $procurement) + public function cancelPaymentForProcurement( Procurement $procurement ) { - $provider = Provider::find($procurement->provider_id); + $provider = Provider::find( $procurement->provider_id ); - if ($provider instanceof Provider) { - if ($procurement->payment_status === 'paid') { + if ( $provider instanceof Provider ) { + if ( $procurement->payment_status === 'paid' ) { $provider->amount_paid -= $procurement->cost; } else { $provider->amount_due -= $procurement->cost; @@ -200,7 +200,7 @@ public function cancelPaymentForProcurement(Procurement $procurement) return [ 'status' => 'succecss', - 'message' => __('The procurement payment has been deducted.'), + 'message' => __( 'The procurement payment has been deducted.' ), ]; } } diff --git a/app/Services/ReportService.php b/app/Services/ReportService.php index abb6c1847..a2ba0fa5a 100644 --- a/app/Services/ReportService.php +++ b/app/Services/ReportService.php @@ -41,38 +41,38 @@ public function __construct( // ... } - public function refreshFromDashboardDay(DashboardDay $todayReport) + public function refreshFromDashboardDay( DashboardDay $todayReport ) { - $previousReport = DashboardDay::forLastRecentDay($todayReport); + $previousReport = DashboardDay::forLastRecentDay( $todayReport ); /** * when the method is used without defining * the dayStarts and dayEnds, this method * create these values. */ - $this->defineDate($todayReport); - - $this->computeUnpaidOrdersCount($previousReport, $todayReport); - $this->computeUnpaidOrders($previousReport, $todayReport); - $this->computePaidOrders($previousReport, $todayReport); - $this->computePaidOrdersCount($previousReport, $todayReport); - $this->computeOrdersTaxes($previousReport, $todayReport); - $this->computePartiallyPaidOrders($previousReport, $todayReport); - $this->computePartiallyPaidOrdersCount($previousReport, $todayReport); - $this->computeDiscounts($previousReport, $todayReport); - $this->computeIncome($previousReport, $todayReport); + $this->defineDate( $todayReport ); + + $this->computeUnpaidOrdersCount( $previousReport, $todayReport ); + $this->computeUnpaidOrders( $previousReport, $todayReport ); + $this->computePaidOrders( $previousReport, $todayReport ); + $this->computePaidOrdersCount( $previousReport, $todayReport ); + $this->computeOrdersTaxes( $previousReport, $todayReport ); + $this->computePartiallyPaidOrders( $previousReport, $todayReport ); + $this->computePartiallyPaidOrdersCount( $previousReport, $todayReport ); + $this->computeDiscounts( $previousReport, $todayReport ); + $this->computeIncome( $previousReport, $todayReport ); } - private function defineDate(DashboardDay $dashboardDay) + private function defineDate( DashboardDay $dashboardDay ) { - $this->dayStarts = empty($this->dayStarts) ? (Carbon::parse($dashboardDay->range_starts)->startOfDay()->toDateTimeString()) : $this->dayStarts; - $this->dayEnds = empty($this->dayEnds) ? (Carbon::parse($dashboardDay->range_ends)->endOfDay()->toDateTimeString()) : $this->dayEnds; + $this->dayStarts = empty( $this->dayStarts ) ? ( Carbon::parse( $dashboardDay->range_starts )->startOfDay()->toDateTimeString() ) : $this->dayStarts; + $this->dayEnds = empty( $this->dayEnds ) ? ( Carbon::parse( $dashboardDay->range_ends )->endOfDay()->toDateTimeString() ) : $this->dayEnds; } /** * Will compute the report for the current day */ - public function computeDayReport($dateStart = null, $dateEnd = null) + public function computeDayReport( $dateStart = null, $dateEnd = null ) { $this->dayStarts = $dateStart ?: $this->dateService->copy()->startOfDay()->toDateTimeString(); $this->dayEnds = $dateEnd ?: $this->dateService->copy()->endOfDay()->toDateTimeString(); @@ -81,38 +81,38 @@ public function computeDayReport($dateStart = null, $dateEnd = null) * Before proceeding, let's clear everything * that is not assigned during this specific time range. */ - $this->clearUnassignedCashFlow($this->dayStarts, $this->dayEnds); + $this->clearUnassignedCashFlow( $this->dayStarts, $this->dayEnds ); - $todayReport = DashboardDay::firstOrCreate([ + $todayReport = DashboardDay::firstOrCreate( [ 'range_starts' => $this->dayStarts, 'range_ends' => $this->dayEnds, - 'day_of_year' => Carbon::parse($this->dayStarts)->dayOfYear, - ]); + 'day_of_year' => Carbon::parse( $this->dayStarts )->dayOfYear, + ] ); - $this->refreshFromDashboardDay($todayReport); + $this->refreshFromDashboardDay( $todayReport ); $todayReport->save(); return $todayReport; } - public function computeDashboardMonth($todayCarbon = null) + public function computeDashboardMonth( $todayCarbon = null ) { - if ($todayCarbon === null) { + if ( $todayCarbon === null ) { $todayCarbon = $this->dateService->copy()->now(); } $monthStarts = $todayCarbon->startOfMonth()->toDateTimeString(); $monthEnds = $todayCarbon->endOfMonth()->toDateTimeString(); - $entries = DashboardDay::from($monthStarts) - ->to($monthEnds); + $entries = DashboardDay::from( $monthStarts ) + ->to( $monthEnds ); - $dashboardMonth = DashboardMonth::from($monthStarts) - ->to($monthEnds) + $dashboardMonth = DashboardMonth::from( $monthStarts ) + ->to( $monthEnds ) ->first(); - if (! $dashboardMonth instanceof DashboardMonth) { + if ( ! $dashboardMonth instanceof DashboardMonth ) { $dashboardMonth = new DashboardMonth; $dashboardMonth->range_starts = $monthStarts; $dashboardMonth->range_ends = $monthEnds; @@ -120,20 +120,20 @@ public function computeDashboardMonth($todayCarbon = null) $dashboardMonth->save(); } - $dashboardMonth->month_unpaid_orders = $entries->sum('day_unpaid_orders'); - $dashboardMonth->month_unpaid_orders_count = $entries->sum('day_unpaid_orders_count'); - $dashboardMonth->month_paid_orders = $entries->sum('day_paid_orders'); - $dashboardMonth->month_paid_orders_count = $entries->sum('day_paid_orders_count'); - $dashboardMonth->month_partially_paid_orders = $entries->sum('day_partially_paid_orders'); - $dashboardMonth->month_partially_paid_orders_count = $entries->sum('day_partially_paid_orders_count'); - $dashboardMonth->month_income = $entries->sum('day_income'); - $dashboardMonth->month_discounts = $entries->sum('day_discounts'); - $dashboardMonth->month_taxes = $entries->sum('day_taxes'); - $dashboardMonth->month_wasted_goods_count = $entries->sum('day_wasted_goods_count'); - $dashboardMonth->month_wasted_goods = $entries->sum('day_wasted_goods'); - $dashboardMonth->month_expenses = $entries->sum('day_expenses'); - - foreach ([ + $dashboardMonth->month_unpaid_orders = $entries->sum( 'day_unpaid_orders' ); + $dashboardMonth->month_unpaid_orders_count = $entries->sum( 'day_unpaid_orders_count' ); + $dashboardMonth->month_paid_orders = $entries->sum( 'day_paid_orders' ); + $dashboardMonth->month_paid_orders_count = $entries->sum( 'day_paid_orders_count' ); + $dashboardMonth->month_partially_paid_orders = $entries->sum( 'day_partially_paid_orders' ); + $dashboardMonth->month_partially_paid_orders_count = $entries->sum( 'day_partially_paid_orders_count' ); + $dashboardMonth->month_income = $entries->sum( 'day_income' ); + $dashboardMonth->month_discounts = $entries->sum( 'day_discounts' ); + $dashboardMonth->month_taxes = $entries->sum( 'day_taxes' ); + $dashboardMonth->month_wasted_goods_count = $entries->sum( 'day_wasted_goods_count' ); + $dashboardMonth->month_wasted_goods = $entries->sum( 'day_wasted_goods' ); + $dashboardMonth->month_expenses = $entries->sum( 'day_expenses' ); + + foreach ( [ 'total_unpaid_orders', 'total_unpaid_orders_count', 'total_paid_orders', @@ -146,7 +146,7 @@ public function computeDashboardMonth($todayCarbon = null) 'total_wasted_goods_count', 'total_wasted_goods', 'total_expenses', - ] as $field) { + ] as $field ) { $dashboardMonth->$field = $entries->get()->last()->$field ?? 0; } @@ -155,15 +155,15 @@ public function computeDashboardMonth($todayCarbon = null) return $dashboardMonth; } - public function computeOrdersTaxes($previousReport, $todayReport) + public function computeOrdersTaxes( $previousReport, $todayReport ) { - $timeRangeTaxes = Order::from($this->dayStarts) - ->to($this->dayEnds) - ->paymentStatus('paid') - ->sum('tax_value'); + $timeRangeTaxes = Order::from( $this->dayStarts ) + ->to( $this->dayEnds ) + ->paymentStatus( 'paid' ) + ->sum( 'tax_value' ); $todayReport->day_taxes = $timeRangeTaxes; - $todayReport->total_taxes = ($todayReport->total_taxes ?? 0) + $timeRangeTaxes; + $todayReport->total_taxes = ( $todayReport->total_taxes ?? 0 ) + $timeRangeTaxes; } /** @@ -171,27 +171,27 @@ public function computeOrdersTaxes($previousReport, $todayReport) * * @return void */ - public function handleStockAdjustment(ProductHistory $history) + public function handleStockAdjustment( ProductHistory $history ) { - if (in_array($history->operation_type, [ + if ( in_array( $history->operation_type, [ ProductHistory::ACTION_DEFECTIVE, ProductHistory::ACTION_LOST, ProductHistory::ACTION_DELETED, ProductHistory::ACTION_REMOVED, - ])) { + ] ) ) { $currentDay = DashboardDay::forToday(); - if ($currentDay instanceof DashboardDay) { - $yesterDay = DashboardDay::forLastRecentDay($currentDay); + if ( $currentDay instanceof DashboardDay ) { + $yesterDay = DashboardDay::forLastRecentDay( $currentDay ); $currentDay->day_wasted_goods_count += $history->quantity; $currentDay->day_wasted_goods += $history->total_price; - $currentDay->total_wasted_goods_count = ($yesterDay->total_wasted_goods_count ?? 0) + $currentDay->day_wasted_goods_count; - $currentDay->total_wasted_goods = ($yesterDay->total_wasted_goods ?? 0) + $currentDay->day_wasted_goods; + $currentDay->total_wasted_goods_count = ( $yesterDay->total_wasted_goods_count ?? 0 ) + $currentDay->day_wasted_goods_count; + $currentDay->total_wasted_goods = ( $yesterDay->total_wasted_goods ?? 0 ) + $currentDay->day_wasted_goods; $currentDay->save(); return [ 'status' => 'success', - 'message' => __('The dashboard report has been updated.'), + 'message' => __( 'The dashboard report has been updated.' ), ]; } @@ -200,13 +200,13 @@ public function handleStockAdjustment(ProductHistory $history) * * @var NotificationService */ - $message = __('A stock operation has recently been detected, however NexoPOS was\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\'nt been created.'); - $notification = app()->make(NotificationService::class); - $notification->create([ - 'title' => __('Untracked Stock Operation'), + $message = __( 'A stock operation has recently been detected, however NexoPOS was\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\'nt been created.' ); + $notification = app()->make( NotificationService::class ); + $notification->create( [ + 'title' => __( 'Untracked Stock Operation' ), 'description' => $message, 'url' => 'https://my.nexopos.com/en/troubleshooting/untracked-stock-operation', - ])->dispatchForGroup(Role::namespace('admin')); + ] )->dispatchForGroup( Role::namespace( 'admin' ) ); return [ 'status' => 'failed', @@ -216,7 +216,7 @@ public function handleStockAdjustment(ProductHistory $history) return [ 'status' => 'failed', - 'message' => __('Unsupported action'), + 'message' => __( 'Unsupported action' ), ]; } @@ -224,24 +224,24 @@ public function handleStockAdjustment(ProductHistory $history) * Clear all orphan stock flow * to avoid inaccurate computing * - * @param string $startAt - * @param string $endAt + * @param string $startAt + * @param string $endAt * @return void */ - public function clearUnassignedCashFlow($startAt, $endsAt) + public function clearUnassignedCashFlow( $startAt, $endsAt ) { - $cashFlows = TransactionHistory::where('created_at', '>=', $startAt) - ->where('created_at', '<=', $endsAt) + $cashFlows = TransactionHistory::where( 'created_at', '>=', $startAt ) + ->where( 'created_at', '<=', $endsAt ) ->get(); - $cashFlows->each(function ($cashFlow) { + $cashFlows->each( function ( $cashFlow ) { /** * let's clear unassigned to orders */ - if ($cashFlow->operation === TransactionHistory::OPERATION_CREDIT && ! empty($cashFlow->order_id)) { - $order = Order::find($cashFlow->order_id); + if ( $cashFlow->operation === TransactionHistory::OPERATION_CREDIT && ! empty( $cashFlow->order_id ) ) { + $order = Order::find( $cashFlow->order_id ); - if (! $order instanceof Order) { + if ( ! $order instanceof Order ) { $cashFlow->delete(); } } @@ -249,10 +249,10 @@ public function clearUnassignedCashFlow($startAt, $endsAt) /** * let's clear unassigned to procurements */ - if ($cashFlow->operation === TransactionHistory::OPERATION_DEBIT && ! empty($cashFlow->procurement_id)) { - $order = Procurement::find($cashFlow->procurement_id); + if ( $cashFlow->operation === TransactionHistory::OPERATION_DEBIT && ! empty( $cashFlow->procurement_id ) ) { + $order = Procurement::find( $cashFlow->procurement_id ); - if (! $order instanceof Procurement) { + if ( ! $order instanceof Procurement ) { $cashFlow->delete(); } } @@ -260,10 +260,10 @@ public function clearUnassignedCashFlow($startAt, $endsAt) /** * let's clear unassigned to order refund */ - if (! empty($cashFlow->order_refund_id)) { - $order = OrderRefund::find($cashFlow->order_refund_id); + if ( ! empty( $cashFlow->order_refund_id ) ) { + $order = OrderRefund::find( $cashFlow->order_refund_id ); - if (! $order instanceof OrderRefund) { + if ( ! $order instanceof OrderRefund ) { $cashFlow->delete(); } } @@ -271,10 +271,10 @@ public function clearUnassignedCashFlow($startAt, $endsAt) /** * let's clear unassigned to register history */ - if (! empty($cashFlow->register_history_id)) { - $history = RegisterHistory::find($cashFlow->register_history_id); + if ( ! empty( $cashFlow->register_history_id ) ) { + $history = RegisterHistory::find( $cashFlow->register_history_id ); - if (! $history instanceof RegisterHistory) { + if ( ! $history instanceof RegisterHistory ) { $cashFlow->delete(); } } @@ -282,14 +282,14 @@ public function clearUnassignedCashFlow($startAt, $endsAt) /** * let's clear unassigned to customer account history */ - if (! empty($cashFlow->customer_account_history_id)) { - $history = CustomerAccountHistory::find($cashFlow->customer_account_history_id); + if ( ! empty( $cashFlow->customer_account_history_id ) ) { + $history = CustomerAccountHistory::find( $cashFlow->customer_account_history_id ); - if (! $history instanceof CustomerAccountHistory) { + if ( ! $history instanceof CustomerAccountHistory ) { $cashFlow->delete(); } } - }); + } ); } /** @@ -298,9 +298,9 @@ public function clearUnassignedCashFlow($startAt, $endsAt) * * @return void */ - public function deleteOrderCashFlow(Order $order) + public function deleteOrderCashFlow( Order $order ) { - TransactionHistory::where('order_id', $order->id)->delete(); + TransactionHistory::where( 'order_id', $order->id )->delete(); } /** @@ -309,27 +309,27 @@ public function deleteOrderCashFlow(Order $order) * * @return void */ - public function deleteProcurementCashFlow(Procurement $procurement) + public function deleteProcurementCashFlow( Procurement $procurement ) { - TransactionHistory::where('procurement_id', $procurement->id)->delete(); + TransactionHistory::where( 'procurement_id', $procurement->id )->delete(); } - public function computeIncome($previousReport, $todayReport) + public function computeIncome( $previousReport, $todayReport ) { - $totalIncome = TransactionHistory::from($this->dayStarts) - ->to($this->dayEnds) - ->operation(TransactionHistory::OPERATION_CREDIT) - ->sum('value'); + $totalIncome = TransactionHistory::from( $this->dayStarts ) + ->to( $this->dayEnds ) + ->operation( TransactionHistory::OPERATION_CREDIT ) + ->sum( 'value' ); - $totalExpenses = TransactionHistory::from($this->dayStarts) - ->to($this->dayEnds) - ->operation(TransactionHistory::OPERATION_DEBIT) - ->sum('value'); + $totalExpenses = TransactionHistory::from( $this->dayStarts ) + ->to( $this->dayEnds ) + ->operation( TransactionHistory::OPERATION_DEBIT ) + ->sum( 'value' ); $todayReport->day_expenses = $totalExpenses; $todayReport->day_income = $totalIncome - $totalExpenses; - $todayReport->total_income = ($previousReport->total_income ?? 0) + $todayReport->day_income; - $todayReport->total_expenses = ($previousReport->total_expenses ?? 0) + $todayReport->day_expenses; + $todayReport->total_income = ( $previousReport->total_income ?? 0 ) + $todayReport->day_income; + $todayReport->total_expenses = ( $previousReport->total_expenses ?? 0 ) + $todayReport->day_expenses; } /** @@ -338,15 +338,15 @@ public function computeIncome($previousReport, $todayReport) * * @return void */ - private function computeUnpaidOrdersCount($previousReport, $todayReport) + private function computeUnpaidOrdersCount( $previousReport, $todayReport ) { - $totalUnpaidOrders = Order::from($this->dayStarts) - ->to($this->dayEnds) - ->paymentStatus('unpaid') + $totalUnpaidOrders = Order::from( $this->dayStarts ) + ->to( $this->dayEnds ) + ->paymentStatus( 'unpaid' ) ->count(); $todayReport->day_unpaid_orders_count = $totalUnpaidOrders; - $todayReport->total_unpaid_orders_count = ($previousReport->total_unpaid_orders_count ?? 0) + $totalUnpaidOrders; + $todayReport->total_unpaid_orders_count = ( $previousReport->total_unpaid_orders_count ?? 0 ) + $totalUnpaidOrders; } /** @@ -355,15 +355,15 @@ private function computeUnpaidOrdersCount($previousReport, $todayReport) * * @return void */ - private function computeUnpaidOrders($previousReport, $todayReport) + private function computeUnpaidOrders( $previousReport, $todayReport ) { - $totalUnpaidOrders = Order::from($this->dayStarts) - ->to($this->dayEnds) - ->paymentStatus('unpaid') - ->sum('total'); + $totalUnpaidOrders = Order::from( $this->dayStarts ) + ->to( $this->dayEnds ) + ->paymentStatus( 'unpaid' ) + ->sum( 'total' ); $todayReport->day_unpaid_orders = $totalUnpaidOrders; - $todayReport->total_unpaid_orders = ($previousReport->total_unpaid_orders ?? 0) + $totalUnpaidOrders; + $todayReport->total_unpaid_orders = ( $previousReport->total_unpaid_orders ?? 0 ) + $totalUnpaidOrders; } /** @@ -372,15 +372,15 @@ private function computeUnpaidOrders($previousReport, $todayReport) * * @return void */ - private function computePaidOrders($previousReport, $todayReport) + private function computePaidOrders( $previousReport, $todayReport ) { - $totalPaid = Order::from($this->dayStarts) - ->to($this->dayEnds) - ->paymentStatus('paid') - ->sum('total'); + $totalPaid = Order::from( $this->dayStarts ) + ->to( $this->dayEnds ) + ->paymentStatus( 'paid' ) + ->sum( 'total' ); $todayReport->day_paid_orders = $totalPaid; - $todayReport->total_paid_orders = ($previousReport->total_paid_orders ?? 0) + $totalPaid; + $todayReport->total_paid_orders = ( $previousReport->total_paid_orders ?? 0 ) + $totalPaid; } /** @@ -389,15 +389,15 @@ private function computePaidOrders($previousReport, $todayReport) * * @return void */ - private function computePaidOrdersCount($previousReport, $todayReport) + private function computePaidOrdersCount( $previousReport, $todayReport ) { - $totalPaidOrders = Order::from($this->dayStarts) - ->to($this->dayEnds) - ->paymentStatus('paid') + $totalPaidOrders = Order::from( $this->dayStarts ) + ->to( $this->dayEnds ) + ->paymentStatus( 'paid' ) ->count(); $todayReport->day_paid_orders_count = $totalPaidOrders; - $todayReport->total_paid_orders_count = ($previousReport->total_paid_orders_count ?? 0) + $totalPaidOrders; + $todayReport->total_paid_orders_count = ( $previousReport->total_paid_orders_count ?? 0 ) + $totalPaidOrders; } /** @@ -406,15 +406,15 @@ private function computePaidOrdersCount($previousReport, $todayReport) * * @return void */ - private function computePartiallyPaidOrders($previousReport, $todayReport) + private function computePartiallyPaidOrders( $previousReport, $todayReport ) { - $totalPaid = Order::from($this->dayStarts) - ->to($this->dayEnds) - ->paymentStatus('partially_paid') - ->sum('total'); + $totalPaid = Order::from( $this->dayStarts ) + ->to( $this->dayEnds ) + ->paymentStatus( 'partially_paid' ) + ->sum( 'total' ); $todayReport->day_partially_paid_orders = $totalPaid; - $todayReport->total_partially_paid_orders = ($previousReport->total_partially_paid_orders ?? 0) + $totalPaid; + $todayReport->total_partially_paid_orders = ( $previousReport->total_partially_paid_orders ?? 0 ) + $totalPaid; } /** @@ -423,51 +423,51 @@ private function computePartiallyPaidOrders($previousReport, $todayReport) * * @return void */ - private function computePartiallyPaidOrdersCount($previousReport, $todayReport) + private function computePartiallyPaidOrdersCount( $previousReport, $todayReport ) { - $totalPartiallyPaidOrdersCount = Order::from($this->dayStarts) - ->to($this->dayEnds) - ->paymentStatus('partially_paid') + $totalPartiallyPaidOrdersCount = Order::from( $this->dayStarts ) + ->to( $this->dayEnds ) + ->paymentStatus( 'partially_paid' ) ->count(); $todayReport->day_partially_paid_orders_count = $totalPartiallyPaidOrdersCount; - $todayReport->total_partially_paid_orders_count = ($previousReport->total_partially_paid_orders_count ?? 0) + $totalPartiallyPaidOrdersCount; + $todayReport->total_partially_paid_orders_count = ( $previousReport->total_partially_paid_orders_count ?? 0 ) + $totalPartiallyPaidOrdersCount; } - private function computeDiscounts($previousReport, $todayReport) + private function computeDiscounts( $previousReport, $todayReport ) { - $totalDiscount = Order::from($this->dayStarts) - ->to($this->dayEnds) - ->paymentStatus('paid') - ->sum('discount'); + $totalDiscount = Order::from( $this->dayStarts ) + ->to( $this->dayEnds ) + ->paymentStatus( 'paid' ) + ->sum( 'discount' ); $todayReport->day_discounts = $totalDiscount; - $todayReport->total_discounts = ($previousReport->total_discounts ?? 0) + $totalDiscount; + $todayReport->total_discounts = ( $previousReport->total_discounts ?? 0 ) + $totalDiscount; } /** * @deprecated */ - public function increaseDailyExpenses(TransactionHistory $cashFlow, $today = null) + public function increaseDailyExpenses( TransactionHistory $cashFlow, $today = null ) { $today = $today === null ? DashboardDay::forToday() : $today; - if ($today instanceof DashboardDay) { - if ($cashFlow->operation === TransactionHistory::OPERATION_DEBIT) { - $yesterday = DashboardDay::forLastRecentDay($today); - $today->day_expenses += $cashFlow->getRawOriginal('value'); - $today->total_expenses = ($yesterday->total_expenses ?? 0) + $today->day_expenses; + if ( $today instanceof DashboardDay ) { + if ( $cashFlow->operation === TransactionHistory::OPERATION_DEBIT ) { + $yesterday = DashboardDay::forLastRecentDay( $today ); + $today->day_expenses += $cashFlow->getRawOriginal( 'value' ); + $today->total_expenses = ( $yesterday->total_expenses ?? 0 ) + $today->day_expenses; $today->save(); } else { - $yesterday = DashboardDay::forLastRecentDay($today); - $today->day_income += $cashFlow->getRawOriginal('value'); - $today->total_income = ($yesterday->total_income ?? 0) + $today->day_income; + $yesterday = DashboardDay::forLastRecentDay( $today ); + $today->day_income += $cashFlow->getRawOriginal( 'value' ); + $today->total_income = ( $yesterday->total_income ?? 0 ) + $today->day_income; $today->save(); } return [ 'status' => 'success', - 'message' => __('The expense has been correctly saved.'), + 'message' => __( 'The expense has been correctly saved.' ), ]; } @@ -477,26 +477,26 @@ public function increaseDailyExpenses(TransactionHistory $cashFlow, $today = nul /** * @deprecated */ - public function reduceDailyExpenses(TransactionHistory $cashFlow, $today = null) + public function reduceDailyExpenses( TransactionHistory $cashFlow, $today = null ) { $today = $today === null ? DashboardDay::forToday() : $today; - if ($today instanceof DashboardDay) { - if ($cashFlow->operation === TransactionHistory::OPERATION_CREDIT) { - $yesterday = DashboardDay::forLastRecentDay($today); - $today->day_income -= $cashFlow->getRawOriginal('value'); - $today->total_income = ($yesterday->total_income ?? 0) + $today->day_income; + if ( $today instanceof DashboardDay ) { + if ( $cashFlow->operation === TransactionHistory::OPERATION_CREDIT ) { + $yesterday = DashboardDay::forLastRecentDay( $today ); + $today->day_income -= $cashFlow->getRawOriginal( 'value' ); + $today->total_income = ( $yesterday->total_income ?? 0 ) + $today->day_income; $today->save(); } else { - $yesterday = DashboardDay::forLastRecentDay($today); - $today->day_expenses -= $cashFlow->getRawOriginal('value'); - $today->total_expenses = ($yesterday->total_expenses ?? 0) + $today->day_expenses; + $yesterday = DashboardDay::forLastRecentDay( $today ); + $today->day_expenses -= $cashFlow->getRawOriginal( 'value' ); + $today->total_expenses = ( $yesterday->total_expenses ?? 0 ) + $today->day_expenses; $today->save(); } return [ 'status' => 'success', - 'message' => __('The expense has been correctly saved.'), + 'message' => __( 'The expense has been correctly saved.' ), ]; } @@ -510,14 +510,14 @@ public function notifyIncorrectDashboardReport() * * @var NotificationService */ - $message = __('A stock operation has recently been detected, however NexoPOS was\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\'nt been created.'); + $message = __( 'A stock operation has recently been detected, however NexoPOS was\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\'nt been created.' ); - $notification = app()->make(NotificationService::class); - $notification->create([ - 'title' => __('Untracked Stock Operation'), + $notification = app()->make( NotificationService::class ); + $notification->create( [ + 'title' => __( 'Untracked Stock Operation' ), 'description' => $message, 'url' => 'https://my.nexopos.com/en/troubleshooting/untracked-stock-operation', - ])->dispatchForGroup(Role::namespace('admin')); + ] )->dispatchForGroup( Role::namespace( 'admin' ) ); return [ 'status' => 'failed', @@ -536,24 +536,24 @@ public function initializeDailyReport() /** * get from a specific date * - * @param string $startDate - * @param string $endDate + * @param string $startDate + * @param string $endDate * @return Collection */ - public function getFromTimeRange($startDate, $endDate) + public function getFromTimeRange( $startDate, $endDate ) { - return DashboardDay::from($startDate) - ->to($endDate) + return DashboardDay::from( $startDate ) + ->to( $endDate ) ->get(); } /** * This return the year report * - * @param string $year - * @return array $reports + * @param string $year + * @return array $reports */ - public function getYearReportFor($year) + public function getYearReportFor( $year ) { $date = $this->dateService->now(); $date->year = $year >= 2019 && $year <= 2099 ? $year : 2020; // validate the date @@ -565,18 +565,18 @@ public function getYearReportFor($year) do { $currentMonth = $startOfYear->copy(); - $monthReport = DashboardMonth::from($currentMonth->startOfMonth()->toDateTimeString()) - ->to($currentMonth->endOfMonth()->toDateTimeString()) + $monthReport = DashboardMonth::from( $currentMonth->startOfMonth()->toDateTimeString() ) + ->to( $currentMonth->endOfMonth()->toDateTimeString() ) ->first(); - if (! $monthReport instanceof DashboardMonth) { - $monthReport = $this->computeDashboardMonth($currentMonth); + if ( ! $monthReport instanceof DashboardMonth ) { + $monthReport = $this->computeDashboardMonth( $currentMonth ); } - $reports[ (int) $currentMonth->format('m') ] = $monthReport; + $reports[ (int) $currentMonth->format( 'm' ) ] = $monthReport; $startOfYear->addMonth(); - } while (! $startOfYear->isSameMonth($endOfYear->copy()->addMonth())); + } while ( ! $startOfYear->isSameMonth( $endOfYear->copy()->addMonth() ) ); return $reports; } @@ -584,34 +584,34 @@ public function getYearReportFor($year) /** * Will return the products report * - * @param string $startDate - * @param string $endDate - * @param string $sort + * @param string $startDate + * @param string $endDate + * @param string $sort * @return array */ - public function getProductSalesDiff($startDate, $endDate, $sort) + public function getProductSalesDiff( $startDate, $endDate, $sort ) { - $startDate = Carbon::parse($startDate); - $endDate = Carbon::parse($endDate); - $diffInDays = Carbon::parse($startDate)->diffInDays($endDate); + $startDate = Carbon::parse( $startDate ); + $endDate = Carbon::parse( $endDate ); + $diffInDays = Carbon::parse( $startDate )->diffInDays( $endDate ); - $orderProductTable = Hook::filter('ns-model-table', 'nexopos_orders_products'); - $productsTable = Hook::filter('ns-model-table', 'nexopos_products'); - $unitstable = Hook::filter('ns-model-table', 'nexopos_units'); + $orderProductTable = Hook::filter( 'ns-model-table', 'nexopos_orders_products' ); + $productsTable = Hook::filter( 'ns-model-table', 'nexopos_products' ); + $unitstable = Hook::filter( 'ns-model-table', 'nexopos_units' ); - if ($diffInDays > 0) { + if ( $diffInDays > 0 ) { // check if it's the start and end of the month - $isStartOfMonth = Carbon::parse($startDate)->startOfMonth()->isSameDay($startDate); - $isEndOfMonth = Carbon::parse($endDate)->endOfMonth()->isSameDay($endDate); + $isStartOfMonth = Carbon::parse( $startDate )->startOfMonth()->isSameDay( $startDate ); + $isEndOfMonth = Carbon::parse( $endDate )->endOfMonth()->isSameDay( $endDate ); if ( $isStartOfMonth && $isEndOfMonth ) { - $startCycle = Carbon::parse($startDate)->subMonth()->startOfMonth(); - $endCycle = Carbon::parse($endDate)->subDay()->subMonth()->endOfMonth(); + $startCycle = Carbon::parse( $startDate )->subMonth()->startOfMonth(); + $endCycle = Carbon::parse( $endDate )->subDay()->subMonth()->endOfMonth(); } else { - $startCycle = Carbon::parse($startDate)->subDays($diffInDays + 1); - $endCycle = Carbon::parse($endDate)->subDays($diffInDays + 1); + $startCycle = Carbon::parse( $startDate )->subDays( $diffInDays + 1 ); + $endCycle = Carbon::parse( $endDate )->subDays( $diffInDays + 1 ); } $previousDates = [ @@ -625,10 +625,10 @@ public function getProductSalesDiff($startDate, $endDate, $sort) ], ]; - return $this->getBestRecords($previousDates, $sort); + return $this->getBestRecords( $previousDates, $sort ); } else { - $startCycle = Carbon::parse($startDate)->subDay(); - $endCycle = Carbon::parse($endDate)->subDay(); + $startCycle = Carbon::parse( $startDate )->subDay(); + $endCycle = Carbon::parse( $endDate )->subDay(); $previousDates = [ 'previous' => [ @@ -641,7 +641,7 @@ public function getProductSalesDiff($startDate, $endDate, $sort) ], ]; - return $this->getBestRecords($previousDates, $sort); + return $this->getBestRecords( $previousDates, $sort ); } } @@ -649,35 +649,35 @@ public function getProductSalesDiff($startDate, $endDate, $sort) * Will detect whether an increase * or decrease exists between an old and new value * - * @param int $old - * @param int $new + * @param int $old + * @param int $new * @return int */ - private function getDiff($old, $new) + private function getDiff( $old, $new ) { - if ($old > $new) { - return $this->computeDiff($old, $new, 'decrease'); + if ( $old > $new ) { + return $this->computeDiff( $old, $new, 'decrease' ); } else { - return $this->computeDiff($old, $new, 'increase'); + return $this->computeDiff( $old, $new, 'increase' ); } } /** * Will compute the difference between two numbers * - * @param int $old - * @param int $new - * @param string $operation + * @param int $old + * @param int $new + * @param string $operation * @return int */ - private function computeDiff($old, $new, $operation) + private function computeDiff( $old, $new, $operation ) { - if ($new == 0) { + if ( $new == 0 ) { return 100; } else { - $change = (($old - $new) / $new) * 100; + $change = ( ( $old - $new ) / $new ) * 100; - return $operation === 'increase' ? abs($change) : $change; + return $operation === 'increase' ? abs( $change ) : $change; } } @@ -685,18 +685,18 @@ private function computeDiff($old, $new, $operation) * Will proceed the request to the * database that returns the products report * - * @param array $previousDates - * @param string $sort + * @param array $previousDates + * @param string $sort * @return void */ - private function getBestRecords($previousDates, $sort) + private function getBestRecords( $previousDates, $sort ) { - $orderProductTable = Hook::filter('ns-model-table', 'nexopos_orders_products'); - $orderTable = Hook::filter('ns-model-table', 'nexopos_orders'); - $productsTable = Hook::filter('ns-model-table', 'nexopos_products'); - $unitstable = Hook::filter('ns-model-table', 'nexopos_units'); + $orderProductTable = Hook::filter( 'ns-model-table', 'nexopos_orders_products' ); + $orderTable = Hook::filter( 'ns-model-table', 'nexopos_orders' ); + $productsTable = Hook::filter( 'ns-model-table', 'nexopos_products' ); + $unitstable = Hook::filter( 'ns-model-table', 'nexopos_units' ); - switch ($sort) { + switch ( $sort ) { case 'using_quantity_asc': $sorting = [ 'column' => 'quantity', @@ -741,42 +741,42 @@ private function getBestRecords($previousDates, $sort) break; } - foreach ($previousDates as $key => $report) { - $previousDates[ $key ][ 'products' ] = DB::table($orderProductTable) - ->select([ + foreach ( $previousDates as $key => $report ) { + $previousDates[ $key ][ 'products' ] = DB::table( $orderProductTable ) + ->select( [ $orderProductTable . '.unit_name as unit_name', $orderProductTable . '.product_id as product_id', $orderProductTable . '.name as name', - DB::raw('SUM( quantity ) as quantity'), - DB::raw('SUM( total_price ) as total_price'), - DB::raw('SUM( ' . env('DB_PREFIX') . $orderProductTable . '.tax_value ) as tax_value'), - ]) + DB::raw( 'SUM( quantity ) as quantity' ), + DB::raw( 'SUM( total_price ) as total_price' ), + DB::raw( 'SUM( ' . env( 'DB_PREFIX' ) . $orderProductTable . '.tax_value ) as tax_value' ), + ] ) ->groupBy( $orderProductTable . '.unit_name', $orderProductTable . '.product_id', $orderProductTable . '.name' ) - ->orderBy($sorting[ 'column' ], $sorting[ 'direction' ]) - ->join($orderTable, $orderTable . '.id', '=', $orderProductTable . '.order_id') - ->where($orderTable . '.created_at', '>=', $report[ 'startDate' ]) - ->where($orderTable . '.created_at', '<=', $report[ 'endDate' ]) - ->whereIn($orderTable . '.payment_status', [ Order::PAYMENT_PAID ]) + ->orderBy( $sorting[ 'column' ], $sorting[ 'direction' ] ) + ->join( $orderTable, $orderTable . '.id', '=', $orderProductTable . '.order_id' ) + ->where( $orderTable . '.created_at', '>=', $report[ 'startDate' ] ) + ->where( $orderTable . '.created_at', '<=', $report[ 'endDate' ] ) + ->whereIn( $orderTable . '.payment_status', [ Order::PAYMENT_PAID ] ) ->get() - ->map(function ($product) { + ->map( function ( $product ) { $product->difference = 0; return $product; - }); + } ); } - foreach ($previousDates[ 'current' ][ 'products' ] as $id => &$product) { + foreach ( $previousDates[ 'current' ][ 'products' ] as $id => &$product ) { $default = new stdClass; $default->total_price = 0; $default->quantity = 0; - $oldProduct = collect($previousDates[ 'previous' ][ 'products' ])->filter(function ($previousProduct) use ($product) { + $oldProduct = collect( $previousDates[ 'previous' ][ 'products' ] )->filter( function ( $previousProduct ) use ( $product ) { return $previousProduct->product_id === $product->product_id; - })->first() ?: $default; + } )->first() ?: $default; $product->old_total_price = $oldProduct->total_price; $product->old_quantity = $oldProduct->quantity ?? 0; @@ -788,12 +788,12 @@ private function getBestRecords($previousDates, $sort) $product->evolution = $product->quantity > $oldProduct->quantity ? 'progress' : 'regress'; } - $previousDates[ 'current' ][ 'total_price' ] = collect($previousDates[ 'current' ][ 'products' ]) - ->map(fn($product) => $product->total_price) + $previousDates[ 'current' ][ 'total_price' ] = collect( $previousDates[ 'current' ][ 'products' ] ) + ->map( fn( $product ) => $product->total_price ) ->sum(); - $previousDates[ 'previous' ][ 'total_price' ] = collect($previousDates[ 'previous' ][ 'products' ]) - ->map(fn($product) => $product->total_price) + $previousDates[ 'previous' ][ 'total_price' ] = collect( $previousDates[ 'previous' ][ 'products' ] ) + ->map( fn( $product ) => $product->total_price ) ->sum(); return $previousDates; @@ -803,9 +803,9 @@ private function getBestRecords($previousDates, $sort) * Will return a report based * on the requested type. */ - public function getSaleReport(string $start, string $end, string $type, $user_id = null, $categories_id = null) + public function getSaleReport( string $start, string $end, string $type, $user_id = null, $categories_id = null ) { - switch ($type) { + switch ( $type ) { case 'products_report': return $this->getProductsReports( start: $start, @@ -826,10 +826,10 @@ public function getSaleReport(string $start, string $end, string $type, $user_id } } - private function getSalesSummary($orders) + private function getSalesSummary( $orders ) { - $allSales = $orders->map(function ($order) { - $productTaxes = $order->products()->sum('tax_value'); + $allSales = $orders->map( function ( $order ) { + $productTaxes = $order->products()->sum( 'tax_value' ); return [ 'subtotal' => $order->subtotal, @@ -839,98 +839,98 @@ private function getSalesSummary($orders) 'shipping' => $order->shipping, 'total' => $order->total, ]; - }); + } ); return [ - 'sales_discounts' => Currency::define($allSales->sum('sales_discounts'))->toFloat(), - 'product_taxes' => Currency::define($allSales->sum('product_taxes'))->toFloat(), - 'sales_taxes' => Currency::define($allSales->sum('sales_taxes'))->toFloat(), - 'subtotal' => Currency::define($allSales->sum('subtotal'))->toFloat(), - 'shipping' => Currency::define($allSales->sum('shipping'))->toFloat(), - 'total' => Currency::define($allSales->sum('total'))->toFloat(), + 'sales_discounts' => Currency::define( $allSales->sum( 'sales_discounts' ) )->toFloat(), + 'product_taxes' => Currency::define( $allSales->sum( 'product_taxes' ) )->toFloat(), + 'sales_taxes' => Currency::define( $allSales->sum( 'sales_taxes' ) )->toFloat(), + 'subtotal' => Currency::define( $allSales->sum( 'subtotal' ) )->toFloat(), + 'shipping' => Currency::define( $allSales->sum( 'shipping' ) )->toFloat(), + 'total' => Currency::define( $allSales->sum( 'total' ) )->toFloat(), ]; } /** * @todo add support for category filter */ - public function getProductsReports($start, $end, $user_id = null, $categories_id = null) + public function getProductsReports( $start, $end, $user_id = null, $categories_id = null ) { - $request = Order::paymentStatus(Order::PAYMENT_PAID) - ->from($start) - ->to($end); + $request = Order::paymentStatus( Order::PAYMENT_PAID ) + ->from( $start ) + ->to( $end ); - if (! empty($user_id)) { - $request = $request->where('author', $user_id); + if ( ! empty( $user_id ) ) { + $request = $request->where( 'author', $user_id ); } - if (! empty($categories_id)) { + if ( ! empty( $categories_id ) ) { /** * Will only pull orders that has products which * belongs to the categories id provided */ - $request = $request->whereHas('products', function ($query) use ($categories_id) { - $query->whereIn('product_category_id', $categories_id); - }); + $request = $request->whereHas( 'products', function ( $query ) use ( $categories_id ) { + $query->whereIn( 'product_category_id', $categories_id ); + } ); /** * Will only pull products that belongs to the categories id provided. */ - $request = $request->with([ - 'products' => function ($query) use ($categories_id) { - $query->whereIn('product_category_id', $categories_id); + $request = $request->with( [ + 'products' => function ( $query ) use ( $categories_id ) { + $query->whereIn( 'product_category_id', $categories_id ); }, - ]); + ] ); } $orders = $request->get(); - $summary = $this->getSalesSummary($orders); - $products = $orders->map(fn($order) => $order->products)->flatten(); - $productsIds = $products->map(fn($product) => $product->product_id)->unique(); + $summary = $this->getSalesSummary( $orders ); + $products = $orders->map( fn( $order ) => $order->products )->flatten(); + $productsIds = $products->map( fn( $product ) => $product->product_id )->unique(); return [ - 'result' => $productsIds->map(function ($id) use ($products) { - $product = $products->where('product_id', $id)->first(); - $filtredProdcuts = $products->where('product_id', $id)->all(); + 'result' => $productsIds->map( function ( $id ) use ( $products ) { + $product = $products->where( 'product_id', $id )->first(); + $filtredProdcuts = $products->where( 'product_id', $id )->all(); $summable = [ 'quantity', 'discount', 'wholesale_tax_value', 'sale_tax_value', 'tax_value', 'total_price_without_tax', 'total_price', 'total_price_with_tax', 'total_purchase_price' ]; - foreach ($summable as $key) { - $product->$key = collect($filtredProdcuts)->sum($key); + foreach ( $summable as $key ) { + $product->$key = collect( $filtredProdcuts )->sum( $key ); } return $product; - })->values(), + } )->values(), 'summary' => $summary, ]; } - public function getCategoryReports($start, $end, $orderAttribute = 'name', $orderDirection = 'desc', $user_id = null, $categories_id = []) + public function getCategoryReports( $start, $end, $orderAttribute = 'name', $orderDirection = 'desc', $user_id = null, $categories_id = [] ) { - $request = Order::paymentStatus(Order::PAYMENT_PAID) - ->from($start) - ->to($end); + $request = Order::paymentStatus( Order::PAYMENT_PAID ) + ->from( $start ) + ->to( $end ); - if (! empty($user_id)) { - $request = $request->where('author', $user_id); + if ( ! empty( $user_id ) ) { + $request = $request->where( 'author', $user_id ); } - if (! empty($categories_id)) { + if ( ! empty( $categories_id ) ) { /** * Will only pull orders that has products which * belongs to the categories id provided */ - $request = $request->whereHas('products', function ($query) use ($categories_id) { - $query->whereIn('product_category_id', $categories_id); - }); + $request = $request->whereHas( 'products', function ( $query ) use ( $categories_id ) { + $query->whereIn( 'product_category_id', $categories_id ); + } ); /** * Will only pull products that belongs to the categories id provided. */ - $request = $request->with([ - 'products' => function ($query) use ($categories_id) { - $query->whereIn('product_category_id', $categories_id); + $request = $request->with( [ + 'products' => function ( $query ) use ( $categories_id ) { + $query->whereIn( 'product_category_id', $categories_id ); }, - ]); + ] ); } $orders = $request->get(); @@ -939,10 +939,10 @@ public function getCategoryReports($start, $end, $orderAttribute = 'name', $orde * We'll pull the sales * summary */ - $summary = $this->getSalesSummary($orders); + $summary = $this->getSalesSummary( $orders ); - $products = $orders->map(fn($order) => $order->products)->flatten(); - $category_ids = $orders->map(fn($order) => $order->products->map(fn($product) => $product->product_category_id)); + $products = $orders->map( fn( $order ) => $order->products )->flatten(); + $category_ids = $orders->map( fn( $order ) => $order->products->map( fn( $product ) => $product->product_category_id ) ); $unitIds = $category_ids->flatten()->unique()->toArray(); @@ -950,15 +950,15 @@ public function getCategoryReports($start, $end, $orderAttribute = 'name', $orde * We'll get all category that are listed * on the product sold */ - $categories = ProductCategory::whereIn('id', $unitIds) - ->orderBy($orderAttribute, $orderDirection) + $categories = ProductCategory::whereIn( 'id', $unitIds ) + ->orderBy( $orderAttribute, $orderDirection ) ->get(); /** * That will sum all the total prices */ - $categories->each(function ($category) use ($products) { - $rawProducts = collect($products->where('product_category_id', $category->id)->all())->values(); + $categories->each( function ( $category ) use ( $products ) { + $rawProducts = collect( $products->where( 'product_category_id', $category->id )->all() )->values(); $products = []; @@ -966,30 +966,30 @@ public function getCategoryReports($start, $end, $orderAttribute = 'name', $orde * this will merge similar products * to summarize them. */ - $rawProducts->each(function ($product) use (&$products) { - if (isset($products[ $product->product_id ])) { + $rawProducts->each( function ( $product ) use ( &$products ) { + if ( isset( $products[ $product->product_id ] ) ) { $products[ $product->product_id ][ 'quantity' ] += $product->quantity; $products[ $product->product_id ][ 'tax_value' ] += $product->tax_value; $products[ $product->product_id ][ 'discount' ] += $product->discount; $products[ $product->product_id ][ 'total_price' ] += $product->total_price; } else { - $products[ $product->product_id ] = array_merge($product->toArray(), [ + $products[ $product->product_id ] = array_merge( $product->toArray(), [ 'quantity' => $product->quantity, 'tax_value' => $product->tax_value, 'discount' => $product->discount, 'total_price' => $product->total_price, - ]); + ] ); } - }); + } ); - $category->products = array_values($products); + $category->products = array_values( $products ); - $category->total_tax_value = collect($category->products)->sum('tax_value'); - $category->total_price = collect($category->products)->sum('total_price'); - $category->total_discount = collect($category->products)->sum('discount'); - $category->total_sold_items = collect($category->products)->sum('quantity'); - $category->total_purchase_price = collect($category->products)->sum('total_purchase_price'); - }); + $category->total_tax_value = collect( $category->products )->sum( 'tax_value' ); + $category->total_price = collect( $category->products )->sum( 'total_price' ); + $category->total_discount = collect( $category->products )->sum( 'discount' ); + $category->total_sold_items = collect( $category->products )->sum( 'quantity' ); + $category->total_purchase_price = collect( $category->products )->sum( 'total_purchase_price' ); + } ); return [ 'result' => $categories->toArray(), @@ -1000,157 +1000,157 @@ public function getCategoryReports($start, $end, $orderAttribute = 'name', $orde /** * Will returns the details for a specific cashier */ - public function getCashierDashboard($cashier, $startDate = null, $endDate = null) + public function getCashierDashboard( $cashier, $startDate = null, $endDate = null ) { $cacheKey = 'cashier-report-' . $cashier; - if (! empty(request()->query('refresh'))) { - Cache::forget($cacheKey); + if ( ! empty( request()->query( 'refresh' ) ) ) { + Cache::forget( $cacheKey ); } - return Cache::remember($cacheKey, now()->addDay(1), function () use ($startDate, $cashier, $endDate) { + return Cache::remember( $cacheKey, now()->addDay( 1 ), function () use ( $startDate, $cashier, $endDate ) { $startDate = $startDate === null ? ns()->date->getNow()->startOfDay()->toDateTimeString() : $startDate; $endDate = $endDate === null ? ns()->date->getNow()->endOfDay()->toDateTimeString() : $endDate; $totalSales = Order::paid() - ->where('author', $cashier) + ->where( 'author', $cashier ) ->count(); $todaySales = Order::paid() - ->where('created_at', '>=', $startDate) - ->where('created_at', '<=', $endDate) - ->where('author', $cashier) + ->where( 'created_at', '>=', $startDate ) + ->where( 'created_at', '<=', $endDate ) + ->where( 'author', $cashier ) ->count(); $totalSalesAmount = Order::paid() - ->where('author', $cashier) - ->sum('total'); + ->where( 'author', $cashier ) + ->sum( 'total' ); $todaySalesAmount = Order::paid() - ->where('created_at', '>=', $startDate) - ->where('created_at', '<=', $endDate) - ->where('author', $cashier) - ->sum('total'); + ->where( 'created_at', '>=', $startDate ) + ->where( 'created_at', '<=', $endDate ) + ->where( 'author', $cashier ) + ->sum( 'total' ); $totalRefundsAmount = Order::refunded() - ->where('author', $cashier) - ->sum('total'); + ->where( 'author', $cashier ) + ->sum( 'total' ); $todayRefunds = Order::refunded() - ->where('created_at', '>=', $startDate) - ->where('created_at', '<=', $endDate) - ->where('author', $cashier) - ->sum('total'); + ->where( 'created_at', '>=', $startDate ) + ->where( 'created_at', '<=', $endDate ) + ->where( 'author', $cashier ) + ->sum( 'total' ); - $totalCustomers = Customer::where('author', $cashier) + $totalCustomers = Customer::where( 'author', $cashier ) ->count(); - $todayCustomers = Customer::where('created_at', '>=', $startDate) - ->where('created_at', '<=', $endDate) - ->where('author', $cashier) + $todayCustomers = Customer::where( 'created_at', '>=', $startDate ) + ->where( 'created_at', '<=', $endDate ) + ->where( 'author', $cashier ) ->count(); /** * This will compute the cashier * commissions and displays on his dashboard. */ - $module = app()->make(ModulesService::class); + $module = app()->make( ModulesService::class ); $config = []; - if ($module->getIfEnabled('NsCommissions')) { + if ( $module->getIfEnabled( 'NsCommissions' ) ) { $config = [ - 'today_commissions' => EarnedCommission::for(Auth::id()) - ->where('created_at', '>=', ns()->date->getNow()->copy()->startOfDay()->toDateTimeString()) - ->where('created_at', '<=', ns()->date->getNow()->copy()->endOfDay()->toDateTimeString()) - ->sum('value'), - 'total_commissions' => EarnedCommission::for(Auth::id()) - ->sum('value'), + 'today_commissions' => EarnedCommission::for( Auth::id() ) + ->where( 'created_at', '>=', ns()->date->getNow()->copy()->startOfDay()->toDateTimeString() ) + ->where( 'created_at', '<=', ns()->date->getNow()->copy()->endOfDay()->toDateTimeString() ) + ->sum( 'value' ), + 'total_commissions' => EarnedCommission::for( Auth::id() ) + ->sum( 'value' ), ]; } - return array_merge([ + return array_merge( [ [ 'key' => 'created_at', - 'value' => ns()->date->getFormatted(Auth::user()->created_at), - 'label' => __('Member Since'), + 'value' => ns()->date->getFormatted( Auth::user()->created_at ), + 'label' => __( 'Member Since' ), ], [ 'key' => 'total_sales_count', 'value' => $totalSales, - 'label' => __('Total Orders'), + 'label' => __( 'Total Orders' ), 'today' => [ 'key' => 'today_sales_count', 'value' => $todaySales, - 'label' => __('Today\'s Orders'), + 'label' => __( 'Today\'s Orders' ), ], ], [ 'key' => 'total_sales_amount', - 'value' => ns()->currency->define($totalSalesAmount)->format(), - 'label' => __('Total Sales'), + 'value' => ns()->currency->define( $totalSalesAmount )->format(), + 'label' => __( 'Total Sales' ), 'today' => [ 'key' => 'today_sales_amount', - 'value' => ns()->currency->define($todaySalesAmount)->format(), - 'label' => __('Today\'s Sales'), + 'value' => ns()->currency->define( $todaySalesAmount )->format(), + 'label' => __( 'Today\'s Sales' ), ], ], [ 'key' => 'total_refunds_amount', - 'value' => ns()->currency->define($totalRefundsAmount)->format(), - 'label' => __('Total Refunds'), + 'value' => ns()->currency->define( $totalRefundsAmount )->format(), + 'label' => __( 'Total Refunds' ), 'today' => [ 'key' => 'today_refunds_amount', - 'value' => ns()->currency->define($todayRefunds)->format(), - 'label' => __('Today\'s Refunds'), + 'value' => ns()->currency->define( $todayRefunds )->format(), + 'label' => __( 'Today\'s Refunds' ), ], ], [ 'key' => 'total_customers', 'value' => $totalCustomers, - 'label' => __('Total Customers'), + 'label' => __( 'Total Customers' ), 'today' => [ 'key' => 'today_customers', 'value' => $todayCustomers, - 'label' => __('Today\'s Customers'), + 'label' => __( 'Today\'s Customers' ), ], ], - ], $config); - }); + ], $config ); + } ); } /** - * @param int $year + * @param int $year * @return array $response */ - public function computeYearReport($year) + public function computeYearReport( $year ) { $date = ns()->date->copy(); $date->year = $year; $startOfYear = $date->copy()->startOfYear(); $endOfYear = $date->copy()->endOfYear(); - while (! $startOfYear->isSameMonth($endOfYear)) { - $this->computeDashboardMonth($startOfYear->copy()); + while ( ! $startOfYear->isSameMonth( $endOfYear ) ) { + $this->computeDashboardMonth( $startOfYear->copy() ); $startOfYear->addMonth(); } return [ 'status' => 'success', - 'message' => __('The report has been computed successfully.'), + 'message' => __( 'The report has been computed successfully.' ), ]; } - public function getStockReport($categories, $units) + public function getStockReport( $categories, $units ) { - $query = Product::with([ 'unit_quantities' => function ($query) use ($units) { - if (! empty($units)) { - $query->whereIn('unit_id', $units); + $query = Product::with( [ 'unit_quantities' => function ( $query ) use ( $units ) { + if ( ! empty( $units ) ) { + $query->whereIn( 'unit_id', $units ); } else { return false; } - }, 'unit_quantities.unit' ]); + }, 'unit_quantities.unit' ] ); - if (! empty($categories)) { - $query->whereIn('category_id', $categories); + if ( ! empty( $categories ) ) { + $query->whereIn( 'category_id', $categories ); } - return $query->paginate(50); + return $query->paginate( 50 ); } /** @@ -1158,37 +1158,37 @@ public function getStockReport($categories, $units) * * @return array $products */ - public function getLowStockProducts($categories, $units) + public function getLowStockProducts( $categories, $units ) { return ProductUnitQuantity::query() - ->where('stock_alert_enabled', 1) - ->whereRaw('low_quantity > quantity') - ->with([ + ->where( 'stock_alert_enabled', 1 ) + ->whereRaw( 'low_quantity > quantity' ) + ->with( [ 'product', - 'unit' => function ($query) use ($units) { - if (! empty($units)) { - $query->whereIn('id', $units); + 'unit' => function ( $query ) use ( $units ) { + if ( ! empty( $units ) ) { + $query->whereIn( 'id', $units ); } }, - ]) - ->whereHas('unit', function ($query) use ($units) { - if (! empty($units)) { - $query->whereIn('id', $units); + ] ) + ->whereHas( 'unit', function ( $query ) use ( $units ) { + if ( ! empty( $units ) ) { + $query->whereIn( 'id', $units ); } else { return false; } - }) - ->whereHas('product', function ($query) use ($categories) { - if (! empty($categories)) { - $query->whereIn('category_id', $categories); + } ) + ->whereHas( 'product', function ( $query ) use ( $categories ) { + if ( ! empty( $categories ) ) { + $query->whereIn( 'category_id', $categories ); } return false; - }) + } ) ->get(); } - public function recomputeTransactions($fromDate, $toDate) + public function recomputeTransactions( $fromDate, $toDate ) { TransactionHistory::truncate(); DashboardDay::truncate(); @@ -1200,22 +1200,22 @@ public function recomputeTransactions($fromDate, $toDate) /** * @var TransactionService */ - $transactionService = app()->make(TransactionService::class); + $transactionService = app()->make( TransactionService::class ); $transactionService->recomputeCashFlow( $startDateString, $endDateString ); - $days = ns()->date->getDaysInBetween($fromDate, $toDate); + $days = ns()->date->getDaysInBetween( $fromDate, $toDate ); - foreach ($days as $day) { + foreach ( $days as $day ) { $this->computeDayReport( $day->startOfDay()->toDateTimeString(), $day->endOfDay()->toDateTimeString() ); - $this->computeDashboardMonth($day); + $this->computeDashboardMonth( $day ); } } @@ -1224,10 +1224,10 @@ public function recomputeTransactions($fromDate, $toDate) * * @return array */ - public function getCustomerStatement(Customer $customer, $rangeStarts = null, $rangeEnds = null) + public function getCustomerStatement( Customer $customer, $rangeStarts = null, $rangeEnds = null ) { - $rangeStarts = Carbon::parse($rangeStarts)->toDateTimeString(); - $rangeEnds = Carbon::parse($rangeEnds)->toDateTimeString(); + $rangeStarts = Carbon::parse( $rangeStarts )->toDateTimeString(); + $rangeEnds = Carbon::parse( $rangeEnds )->toDateTimeString(); return [ 'purchases_amount' => $customer->purchases_amount, @@ -1235,41 +1235,41 @@ public function getCustomerStatement(Customer $customer, $rangeStarts = null, $r 'account_amount' => $customer->account_amount, 'total_orders' => $customer->orders()->count(), 'credit_limit_amount' => $customer->credit_limit_amount, - 'orders' => Order::where('customer_id', $customer->id) - ->paymentStatusIn([ Order::PAYMENT_PAID, Order::PAYMENT_UNPAID, Order::PAYMENT_REFUNDED, Order::PAYMENT_PARTIALLY ]) - ->where('created_at', '>=', $rangeStarts) - ->where('created_at', '<=', $rangeEnds) + 'orders' => Order::where( 'customer_id', $customer->id ) + ->paymentStatusIn( [ Order::PAYMENT_PAID, Order::PAYMENT_UNPAID, Order::PAYMENT_REFUNDED, Order::PAYMENT_PARTIALLY ] ) + ->where( 'created_at', '>=', $rangeStarts ) + ->where( 'created_at', '<=', $rangeEnds ) ->get(), - 'wallet_transactions' => CustomerAccountHistory::where('customer_id', $customer->id) - ->where('created_at', '>=', $rangeStarts) - ->where('created_at', '<=', $rangeEnds) + 'wallet_transactions' => CustomerAccountHistory::where( 'customer_id', $customer->id ) + ->where( 'created_at', '>=', $rangeStarts ) + ->where( 'created_at', '<=', $rangeEnds ) ->get(), ]; } - public function combineProductHistory(ProductHistory $productHistory) + public function combineProductHistory( ProductHistory $productHistory ) { - $currentDetailedHistory = $this->prepareProductHistoryCombinedHistory($productHistory); - $this->saveProductHistoryCombined($currentDetailedHistory, $productHistory); + $currentDetailedHistory = $this->prepareProductHistoryCombinedHistory( $productHistory ); + $this->saveProductHistoryCombined( $currentDetailedHistory, $productHistory ); $currentDetailedHistory->save(); } /** * Will prepare the product history combined */ - public function prepareProductHistoryCombinedHistory(ProductHistory $productHistory): ProductHistoryCombined + public function prepareProductHistoryCombinedHistory( ProductHistory $productHistory ): ProductHistoryCombined { - $formatedDate = $this->dateService->now()->format('Y-m-d'); - $currentDetailedHistory = ProductHistoryCombined::where('date', $formatedDate) - ->where('unit_id', $productHistory->unit_id) - ->where('product_id', $productHistory->product_id) + $formatedDate = $this->dateService->now()->format( 'Y-m-d' ); + $currentDetailedHistory = ProductHistoryCombined::where( 'date', $formatedDate ) + ->where( 'unit_id', $productHistory->unit_id ) + ->where( 'product_id', $productHistory->product_id ) ->first(); /** * if this is not set, the we're probably doing this for the * first time of the day, so we need to pull the current quantity of the product */ - if (! $currentDetailedHistory instanceof ProductHistoryCombined) { + if ( ! $currentDetailedHistory instanceof ProductHistoryCombined ) { $currentDetailedHistory = new ProductHistoryCombined; $currentDetailedHistory->date = $formatedDate; $currentDetailedHistory->name = $productHistory->product->name; @@ -1288,46 +1288,46 @@ public function prepareProductHistoryCombinedHistory(ProductHistory $productHist /** * Will save the product history combined */ - public function saveProductHistoryCombined(ProductHistoryCombined &$currentDetailedHistory, ProductHistory $productHistory): ProductHistoryCombined + public function saveProductHistoryCombined( ProductHistoryCombined &$currentDetailedHistory, ProductHistory $productHistory ): ProductHistoryCombined { - if ($productHistory->operation_type === ProductHistory::ACTION_ADDED) { + if ( $productHistory->operation_type === ProductHistory::ACTION_ADDED ) { $currentDetailedHistory->procured_quantity += $productHistory->quantity; - } elseif ($productHistory->operation_type === ProductHistory::ACTION_DELETED) { + } elseif ( $productHistory->operation_type === ProductHistory::ACTION_DELETED ) { $currentDetailedHistory->defective_quantity += $productHistory->quantity; - } elseif ($productHistory->operation_type === ProductHistory::ACTION_STOCKED) { + } elseif ( $productHistory->operation_type === ProductHistory::ACTION_STOCKED ) { $currentDetailedHistory->procured_quantity += $productHistory->quantity; - } elseif ($productHistory->operation_type === ProductHistory::ACTION_LOST) { + } elseif ( $productHistory->operation_type === ProductHistory::ACTION_LOST ) { $currentDetailedHistory->defective_quantity += $productHistory->quantity; - } elseif ($productHistory->operation_type === ProductHistory::ACTION_REMOVED) { + } elseif ( $productHistory->operation_type === ProductHistory::ACTION_REMOVED ) { $currentDetailedHistory->defective_quantity += $productHistory->quantity; - } elseif ($productHistory->operation_type === ProductHistory::ACTION_SOLD) { + } elseif ( $productHistory->operation_type === ProductHistory::ACTION_SOLD ) { $currentDetailedHistory->sold_quantity += $productHistory->quantity; - } elseif ($productHistory->operation_type === ProductHistory::ACTION_ADJUSTMENT_RETURN) { + } elseif ( $productHistory->operation_type === ProductHistory::ACTION_ADJUSTMENT_RETURN ) { $currentDetailedHistory->procured_quantity += $productHistory->quantity; - } elseif ($productHistory->operation_type === ProductHistory::ACTION_CONVERT_IN) { + } elseif ( $productHistory->operation_type === ProductHistory::ACTION_CONVERT_IN ) { $currentDetailedHistory->procured_quantity += $productHistory->quantity; - } elseif ($productHistory->operation_type === ProductHistory::ACTION_RETURNED) { + } elseif ( $productHistory->operation_type === ProductHistory::ACTION_RETURNED ) { $currentDetailedHistory->procured_quantity += $productHistory->quantity; - } elseif ($productHistory->operation_type === ProductHistory::ACTION_TRANSFER_IN) { + } elseif ( $productHistory->operation_type === ProductHistory::ACTION_TRANSFER_IN ) { $currentDetailedHistory->procured_quantity += $productHistory->quantity; - } elseif ($productHistory->operation_type === ProductHistory::ACTION_TRANSFER_CANCELED) { + } elseif ( $productHistory->operation_type === ProductHistory::ACTION_TRANSFER_CANCELED ) { $currentDetailedHistory->procured_quantity += $productHistory->quantity; - } elseif ($productHistory->operation_type === ProductHistory::ACTION_TRANSFER_REJECTED) { + } elseif ( $productHistory->operation_type === ProductHistory::ACTION_TRANSFER_REJECTED ) { $currentDetailedHistory->procured_quantity += $productHistory->quantity; } - $currentDetailedHistory->final_quantity = ns()->currency->define($currentDetailedHistory->initial_quantity) - ->additionateBy($currentDetailedHistory->procured_quantity) - ->subtractBy($currentDetailedHistory->sold_quantity) - ->subtractBy($currentDetailedHistory->defective_quantity) + $currentDetailedHistory->final_quantity = ns()->currency->define( $currentDetailedHistory->initial_quantity ) + ->additionateBy( $currentDetailedHistory->procured_quantity ) + ->subtractBy( $currentDetailedHistory->sold_quantity ) + ->subtractBy( $currentDetailedHistory->defective_quantity ) ->getRaw(); return $currentDetailedHistory; } - public function getCombinedProductHistory($date, $categories, $units) + public function getCombinedProductHistory( $date, $categories, $units ) { - $request = DB::query()->select([ + $request = DB::query()->select( [ 'nexopos_products_unit_quantities.*', 'nexopos_products.category_id as product_category_id', 'nexopos_units.name as unit_name', @@ -1340,27 +1340,27 @@ public function getCombinedProductHistory($date, $categories, $units) 'nexopos_products_histories_combined.unit_id as history_unit_id', 'nexopos_products_histories_combined.product_id as history_product_id', 'nexopos_products_histories_combined.name as history_name', - ])->from('nexopos_products_unit_quantities') - ->rightJoin('nexopos_products', 'nexopos_products.id', '=', 'nexopos_products_unit_quantities.product_id') - ->rightJoin('nexopos_products_histories_combined', function ($join) use ($date) { - $join->on('nexopos_products_histories_combined.product_id', '=', 'nexopos_products_unit_quantities.product_id'); - $join->on('nexopos_products_histories_combined.unit_id', '=', 'nexopos_products_unit_quantities.unit_id'); - $join->where('nexopos_products_histories_combined.date', $date); - }) - ->rightJoin('nexopos_units', 'nexopos_units.id', '=', 'nexopos_products_histories_combined.unit_id'); + ] )->from( 'nexopos_products_unit_quantities' ) + ->rightJoin( 'nexopos_products', 'nexopos_products.id', '=', 'nexopos_products_unit_quantities.product_id' ) + ->rightJoin( 'nexopos_products_histories_combined', function ( $join ) use ( $date ) { + $join->on( 'nexopos_products_histories_combined.product_id', '=', 'nexopos_products_unit_quantities.product_id' ); + $join->on( 'nexopos_products_histories_combined.unit_id', '=', 'nexopos_products_unit_quantities.unit_id' ); + $join->where( 'nexopos_products_histories_combined.date', $date ); + } ) + ->rightJoin( 'nexopos_units', 'nexopos_units.id', '=', 'nexopos_products_histories_combined.unit_id' ); /** * Will only pull products that belongs to the units id provided. */ - if (! empty($units)) { - $request->whereIn('nexopos_products_histories_combined.unit_id', $units); + if ( ! empty( $units ) ) { + $request->whereIn( 'nexopos_products_histories_combined.unit_id', $units ); } - if (! empty($categories)) { - $request->whereIn('nexopos_products.category_id', $categories); + if ( ! empty( $categories ) ) { + $request->whereIn( 'nexopos_products.category_id', $categories ); } - $request->where('nexopos_products_histories_combined.date', Carbon::parse($date)->format('Y-m-d')); + $request->where( 'nexopos_products_histories_combined.date', Carbon::parse( $date )->format( 'Y-m-d' ) ); return $request->get(); } @@ -1374,7 +1374,7 @@ public function computeCombinedReport() return [ 'status' => 'success', - 'message' => __('The report will be generated. Try loading the report within few minutes.'), + 'message' => __( 'The report will be generated. Try loading the report within few minutes.' ), ]; } } diff --git a/app/Services/ResetService.php b/app/Services/ResetService.php index 583512d71..1264dcf5f 100644 --- a/app/Services/ResetService.php +++ b/app/Services/ResetService.php @@ -14,7 +14,7 @@ class ResetService { public function softReset() { - $tables = Hook::filter('ns-wipeable-tables', [ + $tables = Hook::filter( 'ns-wipeable-tables', [ 'nexopos_coupons', 'nexopos_coupons_products', 'nexopos_coupons_categories', @@ -75,11 +75,11 @@ public function softReset() 'nexopos_units', 'nexopos_units_groups', - ]); + ] ); - foreach ($tables as $table) { - if (Hook::filter('ns-reset-table', $table) !== false && Schema::hasTable(Hook::filter('ns-reset-table', $table))) { - DB::table(Hook::filter('ns-table-name', $table))->truncate(); + foreach ( $tables as $table ) { + if ( Hook::filter( 'ns-reset-table', $table ) !== false && Schema::hasTable( Hook::filter( 'ns-reset-table', $table ) ) ) { + DB::table( Hook::filter( 'ns-table-name', $table ) )->truncate(); } } @@ -87,11 +87,11 @@ public function softReset() * Customers stills needs to be cleared * so we'll remove them manually. */ - Customer::get()->each(fn($customer) => app()->make(CustomerService::class)->delete($customer)); + Customer::get()->each( fn( $customer ) => app()->make( CustomerService::class )->delete( $customer ) ); return [ 'status' => 'success', - 'message' => __('The table has been truncated.'), + 'message' => __( 'The table has been truncated.' ), ]; } @@ -107,44 +107,44 @@ public function hardReset(): array * this will only apply clearing all tables * when we're not using sqlite. */ - if (env('DB_CONNECTION') !== 'sqlite') { - $tables = DB::select('SHOW TABLES'); - - foreach ($tables as $table) { - $table_name = array_values((array) $table)[0]; - DB::statement('SET FOREIGN_KEY_CHECKS = 0'); - DB::statement("DROP TABLE `$table_name`"); - DB::statement('SET FOREIGN_KEY_CHECKS = 1'); + if ( env( 'DB_CONNECTION' ) !== 'sqlite' ) { + $tables = DB::select( 'SHOW TABLES' ); + + foreach ( $tables as $table ) { + $table_name = array_values( (array) $table )[0]; + DB::statement( 'SET FOREIGN_KEY_CHECKS = 0' ); + DB::statement( "DROP TABLE `$table_name`" ); + DB::statement( 'SET FOREIGN_KEY_CHECKS = 1' ); } } else { - file_put_contents(database_path('database.sqlite'), ''); + file_put_contents( database_path( 'database.sqlite' ), '' ); } - Artisan::call('key:generate', [ '--force' => true ]); - Artisan::call('ns:cookie generate'); + Artisan::call( 'key:generate', [ '--force' => true ] ); + Artisan::call( 'ns:cookie generate' ); - exec('rm -rf public/storage'); + exec( 'rm -rf public/storage' ); AfterHardResetEvent::dispatch(); return [ 'status' => 'success', - 'message' => __('The database has been wiped out.'), + 'message' => __( 'The database has been wiped out.' ), ]; } - public function handleCustom($data) + public function handleCustom( $data ) { /** * @var string $mode - * @var bool $create_sales - * @var bool $create_procurements + * @var bool $create_sales + * @var bool $create_procurements */ - extract($data); + extract( $data ); - return Hook::filter('ns-handle-custom-reset', [ + return Hook::filter( 'ns-handle-custom-reset', [ 'status' => 'failed', - 'message' => __('No custom handler for the reset "' . $mode . '"'), - ], $data); + 'message' => __( 'No custom handler for the reset "' . $mode . '"' ), + ], $data ); } } diff --git a/app/Services/Schema.php b/app/Services/Schema.php index c81c72a28..771e2b1d8 100644 --- a/app/Services/Schema.php +++ b/app/Services/Schema.php @@ -10,10 +10,10 @@ class Schema * @param array of schema structure * @return void */ - public function render($schemas) + public function render( $schemas ) { - foreach ($schemas as $name => $type) { - if (in_array($type, [ + foreach ( $schemas as $name => $type ) { + if ( in_array( $type, [ 'bigIncrements', 'bigInteger', 'binary', 'boolean', 'char', 'date', @@ -22,11 +22,11 @@ public function render($schemas) 'jsonb', 'longText', 'mediumInteger', 'mediumText', 'morphs', 'nullableTimestamps', 'smallInteger', 'tinyInteger', 'string', 'text', 'time', 'timestamp', - ])) { + ] ) ) { echo "\t\t\t\$table->{$type}( '{$name}' );\n"; - } elseif (in_array($type, [ + } elseif ( in_array( $type, [ 'enum', 'softDeletes', 'timestamps', 'rememberToken', 'unsigned', - ])) { + ] ) ) { } } } @@ -37,16 +37,16 @@ public function render($schemas) * @param array * @return void */ - public function renderSchema($data) + public function renderSchema( $data ) { - extract($data); + extract( $data ); - if (isset($table) && ! empty($table)) { + if ( isset( $table ) && ! empty( $table ) ) { echo "if ( ! Schema::hasTable( '{$table}' ) ) {\n"; echo "\t\t\tSchema::create( '{$table}', function (Blueprint \$table) {\n"; echo "\t\t\t\t\$table->increments('id');\n"; - if (@$schema) { - $this->render($schema); + if ( @$schema ) { + $this->render( $schema ); } echo "\t\t\t\t\$table->timestamps();\n"; echo "\t\t\t});\n"; @@ -62,11 +62,11 @@ public function renderSchema($data) * @param array of schema details * @return string */ - public function renderDrop($details) + public function renderDrop( $details ) { - extract($details); + extract( $details ); - if (isset($table) && ! empty($table)) { + if ( isset( $table ) && ! empty( $table ) ) { echo "Schema::dropIfExists( '{$table}' );\n"; } else { echo "// drop tables here\n"; diff --git a/app/Services/SettingsPage.php b/app/Services/SettingsPage.php index 07c0bb7e2..0e6a6d46c 100644 --- a/app/Services/SettingsPage.php +++ b/app/Services/SettingsPage.php @@ -20,25 +20,25 @@ class SettingsPage */ public function getForm(): array { - return collect($this->form)->mapWithKeys(function ($tab, $key) { - if ($tab === 'tabs') { + return collect( $this->form )->mapWithKeys( function ( $tab, $key ) { + if ( $tab === 'tabs' ) { return [ - $key => collect($tab)->mapWithKeys(function ($tab, $key) { + $key => collect( $tab )->mapWithKeys( function ( $tab, $key ) { /** * in case not fields is provided * let's save the tab with no fields. */ - if (! isset($tab[ 'fields' ])) { + if ( ! isset( $tab[ 'fields' ] ) ) { $tab[ 'fields' ] = []; } return [ $key => $tab ]; - }), + } ), ]; } return [ $key => $tab ]; - })->toArray(); + } )->toArray(); } public function getIdentifier() @@ -65,7 +65,7 @@ public static function renderForm() * is renderer, we'll trigger the method here if * that exists. */ - if (method_exists($settings, 'beforeRenderForm')) { + if ( method_exists( $settings, 'beforeRenderForm' ) ) { $settings->beforeRenderForm(); } @@ -73,7 +73,7 @@ public static function renderForm() * When the settingsPage class has the "getView" method, * we return it as it might provide a custom View page. */ - if (method_exists($settings, 'getView')) { + if ( method_exists( $settings, 'getView' ) ) { return $settings->getView(); } @@ -83,21 +83,21 @@ public static function renderForm() * if the form is an instance of a view * that view is rendered in place of the default form. */ - return View::make('pages.dashboard.settings.form', [ - 'title' => $form[ 'title' ] ?? __('Untitled Settings Page'), + return View::make( 'pages.dashboard.settings.form', [ + 'title' => $form[ 'title' ] ?? __( 'Untitled Settings Page' ), /** * retrive the description provided on the SettingsPage instance. * Otherwhise a default settings is used . */ - 'description' => $form[ 'description' ] ?? __('No description provided for this settings page.'), + 'description' => $form[ 'description' ] ?? __( 'No description provided for this settings page.' ), /** * retrieve the identifier of the settings if it's defined. * this is used to load the settings asynchronously. */ 'identifier' => $settings->getIdentifier(), - ]); + ] ); } /** @@ -106,7 +106,7 @@ public static function renderForm() * * @return array */ - public function validateForm(Request $request) + public function validateForm( Request $request ) { $arrayRules = $this->extractValidation(); @@ -114,14 +114,14 @@ public function validateForm(Request $request) * As rules might contains complex array (with Rule class), * we don't want that array to be transformed using the dot key form. */ - $isolatedRules = $this->isolateArrayRules($arrayRules); + $isolatedRules = $this->isolateArrayRules( $arrayRules ); /** * Let's properly flat everything. */ - $flatRules = collect($isolatedRules)->mapWithKeys(function ($rule) { + $flatRules = collect( $isolatedRules )->mapWithKeys( function ( $rule ) { return [ $rule[0] => $rule[1] ]; - })->toArray(); + } )->toArray(); return $flatRules; } @@ -132,26 +132,26 @@ public function validateForm(Request $request) * * @return array */ - public function saveForm(Request $request) + public function saveForm( Request $request ) { /** * @var Options */ - $options = app()->make(Options::class); + $options = app()->make( Options::class ); - foreach ($this->getPlainData($request) as $key => $value) { - if (empty($value)) { - $options->delete($key); + foreach ( $this->getPlainData( $request ) as $key => $value ) { + if ( empty( $value ) ) { + $options->delete( $key ); } else { - $options->set($key, $value); + $options->set( $key, $value ); } } - event(new SettingsSavedEvent($options->get(), $request->all(), get_class($this))); + event( new SettingsSavedEvent( $options->get(), $request->all(), get_class( $this ) ) ); return [ 'status' => 'success', - 'message' => __('The form has been successfully saved.'), + 'message' => __( 'The form has been successfully saved.' ), ]; } } diff --git a/app/Services/SetupService.php b/app/Services/SetupService.php index 81a69892b..594b4732b 100644 --- a/app/Services/SetupService.php +++ b/app/Services/SetupService.php @@ -20,61 +20,61 @@ class SetupService * * @return void */ - public function saveDatabaseSettings(Request $request) + public function saveDatabaseSettings( Request $request ) { - $databaseDriver = $request->input('database_driver'); - - config([ 'database.connections.test' => [ - 'driver' => $request->input('database_driver') ?: 'mysql', - 'host' => $request->input('hostname'), - 'port' => $request->input('database_port') ?: env('DB_PORT', '3306'), - 'database' => $request->input('database_driver') === 'sqlite' ? database_path('database.sqlite') : $request->input('database_name'), - 'username' => $request->input('username'), - 'password' => $request->input('password'), - 'unix_socket' => env('DB_SOCKET', ''), + $databaseDriver = $request->input( 'database_driver' ); + + config( [ 'database.connections.test' => [ + 'driver' => $request->input( 'database_driver' ) ?: 'mysql', + 'host' => $request->input( 'hostname' ), + 'port' => $request->input( 'database_port' ) ?: env( 'DB_PORT', '3306' ), + 'database' => $request->input( 'database_driver' ) === 'sqlite' ? database_path( 'database.sqlite' ) : $request->input( 'database_name' ), + 'username' => $request->input( 'username' ), + 'password' => $request->input( 'password' ), + 'unix_socket' => env( 'DB_SOCKET', '' ), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', - 'prefix' => $request->input('database_prefix'), + 'prefix' => $request->input( 'database_prefix' ), 'strict' => true, 'engine' => null, - ]]); + ]] ); try { - DB::connection('test')->getPdo(); - } catch (\Exception $e) { - switch ($e->getCode()) { + DB::connection( 'test' )->getPdo(); + } catch ( \Exception $e ) { + switch ( $e->getCode() ) { case 2002: $message = [ 'name' => 'hostname', - 'message' => __('Unable to reach the host'), + 'message' => __( 'Unable to reach the host' ), 'status' => 'failed', ]; break; case 1045: $message = [ 'name' => 'username', - 'message' => __('Unable to connect to the database using the credentials provided.'), + 'message' => __( 'Unable to connect to the database using the credentials provided.' ), 'status' => 'failed', ]; break; case 1049: $message = [ 'name' => 'database_name', - 'message' => __('Unable to select the database.'), + 'message' => __( 'Unable to select the database.' ), 'status' => 'failed', ]; break; case 1044: $message = [ 'name' => 'username', - 'message' => __('Access denied for this user.'), + 'message' => __( 'Access denied for this user.' ), 'status' => 'failed', ]; break; case 1698: $message = [ 'name' => 'username', - 'message' => __('Incorrect Authentication Plugin Provided.'), + 'message' => __( 'Incorrect Authentication Plugin Provided.' ), 'status' => 'failed', ]; break; @@ -87,49 +87,49 @@ public function saveDatabaseSettings(Request $request) break; } - return response()->json($message, 403); + return response()->json( $message, 403 ); } // we'll empty the database - file_put_contents(database_path('database.sqlite'), ''); + file_put_contents( database_path( 'database.sqlite' ), '' ); $this->updateAppUrl(); - $this->updateAppDBConfiguration($request->post()); + $this->updateAppDBConfiguration( $request->post() ); /** * Link the resource storage */ - Artisan::call('storage:link', [ '--force' => true ]); + Artisan::call( 'storage:link', [ '--force' => true ] ); return [ 'status' => 'success', - 'message' => __('The connexion with the database was successful'), + 'message' => __( 'The connexion with the database was successful' ), ]; } public function updateAppURL() { - $domain = parse_url(url()->to('/')); + $domain = parse_url( url()->to( '/' ) ); - ns()->envEditor->set('APP_URL', url()->to('/')); - ns()->envEditor->set('SESSION_DOMAIN', $domain[ 'host' ]); - ns()->envEditor->set('SANCTUM_STATEFUL_DOMAINS', $domain[ 'host' ] . (isset($domain[ 'port' ]) ? ':' . $domain[ 'port' ] : '')); + ns()->envEditor->set( 'APP_URL', url()->to( '/' ) ); + ns()->envEditor->set( 'SESSION_DOMAIN', $domain[ 'host' ] ); + ns()->envEditor->set( 'SANCTUM_STATEFUL_DOMAINS', $domain[ 'host' ] . ( isset( $domain[ 'port' ] ) ? ':' . $domain[ 'port' ] : '' ) ); } - public function updateAppDBConfiguration($data) + public function updateAppDBConfiguration( $data ) { - ns()->envEditor->set('DB_CONNECTION', $data[ 'database_driver' ]); - - if ($data[ 'database_driver' ] === 'sqlite') { - ns()->envEditor->set('DB_DATABASE', database_path('database.sqlite')); - ns()->envEditor->set('DB_PREFIX', $data[ 'database_prefix' ]); - } elseif ($data[ 'database_driver' ] === 'mysql') { - ns()->envEditor->set('DB_HOST', $data[ 'hostname' ]); - ns()->envEditor->set('DB_DATABASE', $data[ 'database_name' ] ?: database_path('database.sqlite')); - ns()->envEditor->set('DB_USERNAME', $data[ 'username' ]); - ns()->envEditor->set('DB_PASSWORD', $data[ 'password' ]); - ns()->envEditor->set('DB_PREFIX', $data[ 'database_prefix' ]); - ns()->envEditor->set('DB_PORT', $data[ 'database_port' ] ?: 3306); + ns()->envEditor->set( 'DB_CONNECTION', $data[ 'database_driver' ] ); + + if ( $data[ 'database_driver' ] === 'sqlite' ) { + ns()->envEditor->set( 'DB_DATABASE', database_path( 'database.sqlite' ) ); + ns()->envEditor->set( 'DB_PREFIX', $data[ 'database_prefix' ] ); + } elseif ( $data[ 'database_driver' ] === 'mysql' ) { + ns()->envEditor->set( 'DB_HOST', $data[ 'hostname' ] ); + ns()->envEditor->set( 'DB_DATABASE', $data[ 'database_name' ] ?: database_path( 'database.sqlite' ) ); + ns()->envEditor->set( 'DB_USERNAME', $data[ 'username' ] ); + ns()->envEditor->set( 'DB_PASSWORD', $data[ 'password' ] ); + ns()->envEditor->set( 'DB_PREFIX', $data[ 'database_prefix' ] ); + ns()->envEditor->set( 'DB_PORT', $data[ 'database_port' ] ?: 3306 ); } } @@ -139,7 +139,7 @@ public function updateAppDBConfiguration($data) * @param Http Request * @return void */ - public function runMigration($fields) + public function runMigration( $fields ) { /** * We assume so far the application is installed @@ -147,26 +147,26 @@ public function runMigration($fields) */ $configuredLanguage = $fields[ 'language' ] ?? 'en'; - App::setLocale($configuredLanguage); + App::setLocale( $configuredLanguage ); /** * We're running this simple migration call to ensure * default tables are created. Those table are located at the * root of the database folder. */ - Artisan::call('migrate'); + Artisan::call( 'migrate' ); /** * NexoPOS uses Sanctum, we're making sure to publish the package. */ - Artisan::call('vendor:publish', [ + Artisan::call( 'vendor:publish', [ '--force' => true, '--provider' => 'Laravel\Sanctum\SanctumServiceProvider', - ]); + ] ); - Artisan::call('ns:translate', [ + Artisan::call( 'ns:translate', [ '--symlink' => true, - ]); + ] ); /** * we'll register all "update" migration @@ -178,9 +178,9 @@ public function runMigration($fields) directories: [ 'core', 'create' ], ignoreMigrations: true ) - ->each(function ($file) { - ns()->update->executeMigrationFromFileName($file); - }); + ->each( function ( $file ) { + ns()->update->executeMigrationFromFileName( $file ); + } ); /** * The update migrations should'nt be executed. @@ -191,13 +191,13 @@ public function runMigration($fields) directories: [ 'update' ], ignoreMigrations: true ) - ->each(function ($file) { - ns()->update->assumeExecuted($file); - }); + ->each( function ( $file ) { + ns()->update->assumeExecuted( $file ); + } ); - $this->options = app()->make(Options::class); + $this->options = app()->make( Options::class ); $this->options->setDefault(); - $this->options->set('ns_store_language', $configuredLanguage); + $this->options->set( 'ns_store_language', $configuredLanguage ); /** * From this moment, new permissions has been created. @@ -205,56 +205,56 @@ public function runMigration($fields) */ ns()->registerGatePermissions(); - $userID = rand(1, 99); + $userID = rand( 1, 99 ); $user = new User; $user->id = $userID; $user->username = $fields[ 'admin_username' ]; - $user->password = Hash::make($fields[ 'password' ]); + $user->password = Hash::make( $fields[ 'password' ] ); $user->email = $fields[ 'admin_email' ]; $user->author = $userID; $user->active = true; // first user active by default; $user->save(); - $user->assignRole('admin'); + $user->assignRole( 'admin' ); /** * define default user language */ - $user->attribute()->create([ + $user->attribute()->create( [ 'language' => $fields[ 'language' ] ?? 'en', - ]); + ] ); - UserAfterActivationSuccessfulEvent::dispatch($user); + UserAfterActivationSuccessfulEvent::dispatch( $user ); - $this->createDefaultPayment($user); + $this->createDefaultPayment( $user ); return [ 'status' => 'success', - 'message' => __('NexoPOS has been successfully installed.'), + 'message' => __( 'NexoPOS has been successfully installed.' ), ]; } - public function createDefaultPayment($user) + public function createDefaultPayment( $user ) { /** * let's create default payment * for the system */ $paymentType = new PaymentType; - $paymentType->label = __('Cash'); + $paymentType->label = __( 'Cash' ); $paymentType->identifier = 'cash-payment'; $paymentType->readonly = true; $paymentType->author = $user->id; $paymentType->save(); $paymentType = new PaymentType; - $paymentType->label = __('Bank Payment'); + $paymentType->label = __( 'Bank Payment' ); $paymentType->identifier = 'bank-payment'; $paymentType->readonly = true; $paymentType->author = $user->id; $paymentType->save(); $paymentType = new PaymentType; - $paymentType->label = __('Customer Account'); + $paymentType->label = __( 'Customer Account' ); $paymentType->identifier = 'account-payment'; $paymentType->readonly = true; $paymentType->author = $user->id; @@ -264,46 +264,46 @@ public function createDefaultPayment($user) public function testDBConnexion() { try { - $DB = DB::connection(env('DB_CONNECTION', 'mysql'))->getPdo(); + $DB = DB::connection( env( 'DB_CONNECTION', 'mysql' ) )->getPdo(); return [ 'status' => 'success', - 'message' => __('Database connection was successful.'), + 'message' => __( 'Database connection was successful.' ), ]; - } catch (\Exception $e) { - switch ($e->getCode()) { + } catch ( \Exception $e ) { + switch ( $e->getCode() ) { case 2002: $message = [ 'name' => 'hostname', - 'message' => __('Unable to reach the host'), + 'message' => __( 'Unable to reach the host' ), 'status' => 'failed', ]; break; case 1045: $message = [ 'name' => 'username', - 'message' => __('Unable to connect to the database using the credentials provided.'), + 'message' => __( 'Unable to connect to the database using the credentials provided.' ), 'status' => 'failed', ]; break; case 1049: $message = [ 'name' => 'database_name', - 'message' => __('Unable to select the database.'), + 'message' => __( 'Unable to select the database.' ), 'status' => 'failed', ]; break; case 1044: $message = [ 'name' => 'username', - 'message' => __('Access denied for this user.'), + 'message' => __( 'Access denied for this user.' ), 'status' => 'failed', ]; break; case 1698: $message = [ 'name' => 'username', - 'message' => __('Incorrect Authentication Plugin Provided.'), + 'message' => __( 'Incorrect Authentication Plugin Provided.' ), 'status' => 'failed', ]; break; @@ -316,7 +316,7 @@ public function testDBConnexion() break; } - return response()->json($message, 403); + return response()->json( $message, 403 ); } } } diff --git a/app/Services/TaxService.php b/app/Services/TaxService.php index bd8fade52..4f6fa4ea5 100644 --- a/app/Services/TaxService.php +++ b/app/Services/TaxService.php @@ -13,15 +13,15 @@ class TaxService { - public function __construct(protected CurrencyService $currency) + public function __construct( protected CurrencyService $currency ) { // ... } - private function __checkTaxParentExists($parent) + private function __checkTaxParentExists( $parent ) { - if (! $parent instanceof Tax) { - throw new Exception(__('Unable to proceed. The parent tax doesn\'t exists.')); + if ( ! $parent instanceof Tax ) { + throw new Exception( __( 'Unable to proceed. The parent tax doesn\'t exists.' ) ); } } @@ -32,14 +32,14 @@ private function __checkTaxParentExists($parent) * @param Tax parent tax * @return void */ - private function __checkTaxParentOnCreation(Tax $parent) + private function __checkTaxParentOnCreation( Tax $parent ) { - if ($parent->type !== 'grouped') { - throw new Exception(__('A simple tax must not be assigned to a parent tax with the type "simple", but "grouped" instead.')); + if ( $parent->type !== 'grouped' ) { + throw new Exception( __( 'A simple tax must not be assigned to a parent tax with the type "simple", but "grouped" instead.' ) ); } - if (! $parent instanceof Tax) { - throw new Exception(__('Unable to proceed. The parent tax doesn\'t exists.')); + if ( ! $parent instanceof Tax ) { + throw new Exception( __( 'Unable to proceed. The parent tax doesn\'t exists.' ) ); } } @@ -51,10 +51,10 @@ private function __checkTaxParentOnCreation(Tax $parent) * @param int tax id * @return void */ - private function __checkTaxParentOnModification(Tax $parent, $id) + private function __checkTaxParentOnModification( Tax $parent, $id ) { - if ($parent->id === $id) { - throw new Exception(__('A tax cannot be his own parent.')); + if ( $parent->id === $id ) { + throw new Exception( __( 'A tax cannot be his own parent.' ) ); } } @@ -65,10 +65,10 @@ private function __checkTaxParentOnModification(Tax $parent, $id) * @param array tax * @return void */ - private function __checkIfNotGroupedTax($fields) + private function __checkIfNotGroupedTax( $fields ) { - if ($fields[ 'type' ] === 'grouped') { - throw new Exception(__('The tax hierarchy is limited to 1. A sub tax must not have the tax type set to "grouped".')); + if ( $fields[ 'type' ] === 'grouped' ) { + throw new Exception( __( 'The tax hierarchy is limited to 1. A sub tax must not have the tax type set to "grouped".' ) ); } } @@ -79,11 +79,11 @@ private function __checkIfNotGroupedTax($fields) * @param int tax id * @return Tax */ - public function get($tax_id) + public function get( $tax_id ) { - $tax = Tax::find($tax_id); - if (! $tax instanceof Tax) { - throw new NotFoundException(__('Unable to find the requested tax using the provided identifier.')); + $tax = Tax::find( $tax_id ); + if ( ! $tax instanceof Tax ) { + throw new NotFoundException( __( 'Unable to find the requested tax using the provided identifier.' ) ); } return $tax; @@ -93,24 +93,24 @@ public function get($tax_id) * That will return the first * tax using a specific name * - * @param string $name + * @param string $name * @return Tax */ - public function getUsingName($name) + public function getUsingName( $name ) { - return Tax::where('name', $name)->first(); + return Tax::where( 'name', $name )->first(); } /** * That will return the first * tax using a specific name * - * @param string $name + * @param string $name * @return TaxGroup */ - public function getTaxGroupUsingName($name) + public function getTaxGroupUsingName( $name ) { - return TaxGroup::where('name', $name)->first(); + return TaxGroup::where( 'name', $name )->first(); } /** @@ -119,18 +119,18 @@ public function getTaxGroupUsingName($name) * @param int group id * @return TaxGroup */ - public function getGroup($group_id) + public function getGroup( $group_id ) { - return TaxGroup::findOrFail($group_id); + return TaxGroup::findOrFail( $group_id ); } /** * Create a tax group * - * @param array $fields + * @param array $fields * @return array $response */ - public function createTaxGroup($fields) + public function createTaxGroup( $fields ) { $group = new TaxGroup; $group->name = $fields[ 'name' ]; @@ -140,15 +140,15 @@ public function createTaxGroup($fields) return [ 'status' => 'success', - 'message' => __('The tax group has been correctly saved.'), - 'data' => compact('group'), + 'message' => __( 'The tax group has been correctly saved.' ), + 'data' => compact( 'group' ), ]; } /** * creates a tax using provided details */ - public function createTax($fields) + public function createTax( $fields ) { $tax = new Tax; $tax->name = $fields[ 'name' ]; @@ -160,8 +160,8 @@ public function createTax($fields) return [ 'status' => 'success', - 'message' => __('The tax has been correctly created.'), - 'data' => compact('tax'), + 'message' => __( 'The tax has been correctly created.' ), + 'data' => compact( 'tax' ), ]; } @@ -174,17 +174,17 @@ public function createTax($fields) * * @return Tax */ - public function create($fields) + public function create( $fields ) { /** * Check if the parent tax exists */ - if (isset($fields[ 'parent_id' ])) { - $parent = Tax::find($fields[ 'parent_id' ]); + if ( isset( $fields[ 'parent_id' ] ) ) { + $parent = Tax::find( $fields[ 'parent_id' ] ); - $this->__checkTaxParentExists($parent); - $this->__checkTaxParentOnCreation($parent); - $this->__checkIfNotGroupedTax($fields); + $this->__checkTaxParentExists( $parent ); + $this->__checkTaxParentOnCreation( $parent ); + $this->__checkIfNotGroupedTax( $fields ); } /** @@ -192,7 +192,7 @@ public function create($fields) */ $tax = new Tax; - foreach ($fields as $field => $value) { + foreach ( $fields as $field => $value ) { $tax->$field = $value; } @@ -210,26 +210,26 @@ public function create($fields) * @param array tax data * @return Tax */ - public function update($id, $fields) + public function update( $id, $fields ) { /** * Check if the parent tax exists */ - if (isset($fields[ 'parent_id' ])) { - $parent = Tax::find($fields[ 'parent_id' ]); + if ( isset( $fields[ 'parent_id' ] ) ) { + $parent = Tax::find( $fields[ 'parent_id' ] ); - $this->__checkTaxParentExists($parent); - $this->__checkTaxParentOnCreation($parent); - $this->__checkTaxParentOnModification($parent, $id); - $this->__checkIfNotGroupedTax($fields); + $this->__checkTaxParentExists( $parent ); + $this->__checkTaxParentOnCreation( $parent ); + $this->__checkTaxParentOnModification( $parent, $id ); + $this->__checkIfNotGroupedTax( $fields ); } /** * @todo check circular hierarchy */ - $tax = $this->get($id); + $tax = $this->get( $id ); - foreach ($fields as $field => $value) { + foreach ( $fields as $field => $value ) { $tax->$field = $value; } @@ -243,14 +243,14 @@ public function update($id, $fields) * Retreive the tax value for a specific * amount using a determined tax group id on which the calculation is made */ - public function getComputedTaxGroupValue(?string $tax_type, ?int $tax_group_id, float $price) + public function getComputedTaxGroupValue( ?string $tax_type, ?int $tax_group_id, float $price ) { - $taxGroup = TaxGroup::find($tax_group_id); + $taxGroup = TaxGroup::find( $tax_group_id ); - if ($taxGroup instanceof TaxGroup) { - $summarizedRate = $taxGroup->taxes->sum('rate'); + if ( $taxGroup instanceof TaxGroup ) { + $summarizedRate = $taxGroup->taxes->sum( 'rate' ); - return $this->getVatValue($tax_type, $summarizedRate, $price); + return $this->getVatValue( $tax_type, $summarizedRate, $price ); } return 0; @@ -261,16 +261,16 @@ public function getComputedTaxGroupValue(?string $tax_type, ?int $tax_group_id, * provided on the $rates and return the global tax value * and the tax value for each rates. */ - public function getTaxesComputed(string $tax_type, array $rates, float $value): array + public function getTaxesComputed( string $tax_type, array $rates, float $value ): array { $response = []; $response[ 'value' ] = $value; - $response[ 'rate' ] = collect($rates)->sum(); - $response[ 'percentages' ] = collect($rates)->map(fn($rate) => ns()->currency->define( - ns()->currency->define($rate)->dividedBy($response[ 'rate' ])->toFloat() - )->multipliedBy(100)->toFloat()); + $response[ 'rate' ] = collect( $rates )->sum(); + $response[ 'percentages' ] = collect( $rates )->map( fn( $rate ) => ns()->currency->define( + ns()->currency->define( $rate )->dividedBy( $response[ 'rate' ] )->toFloat() + )->multipliedBy( 100 )->toFloat() ); - if ($tax_type === 'inclusive') { + if ( $tax_type === 'inclusive' ) { $response[ 'with-tax' ] = $response[ 'value' ]; $response[ 'without-tax' ] = $this->getPriceWithoutTax( type: $tax_type, @@ -279,7 +279,7 @@ public function getTaxesComputed(string $tax_type, array $rates, float $value): ); $response[ 'tax' ] = $value - $response[ 'without-tax' ]; - } elseif ($tax_type === 'exclusive') { + } elseif ( $tax_type === 'exclusive' ) { $response[ 'without-tax' ] = $response[ 'value' ]; $response[ 'with-tax' ] = $this->getPriceWithTax( type: $tax_type, @@ -294,17 +294,17 @@ public function getTaxesComputed(string $tax_type, array $rates, float $value): /** * let's now compute the individual values */ - $response[ 'percentages' ] = collect($response[ 'percentages' ])->map(function ($percentage) use ($value, $response) { + $response[ 'percentages' ] = collect( $response[ 'percentages' ] )->map( function ( $percentage ) use ( $value, $response ) { $computed = ns()->currency->define( - ns()->currency->define($value)->multipliedBy($percentage)->toFloat() - )->divideBy(100)->toFloat(); + ns()->currency->define( $value )->multipliedBy( $percentage )->toFloat() + )->divideBy( 100 )->toFloat(); $tax = ns()->currency->define( - ns()->currency->define($response[ 'tax' ])->multipliedBy($percentage)->toFloat() - )->dividedBy(100)->toFloat(); + ns()->currency->define( $response[ 'tax' ] )->multipliedBy( $percentage )->toFloat() + )->dividedBy( 100 )->toFloat(); - return compact('computed', 'percentage', 'tax'); - })->toArray(); + return compact( 'computed', 'percentage', 'tax' ); + } )->toArray(); return $response; } @@ -313,48 +313,48 @@ public function getTaxesComputed(string $tax_type, array $rates, float $value): * compute the tax added to a * product using a defined tax group id and type. */ - public function computeTax(ProductUnitQuantity $unitQuantity, ?int $tax_group_id, string $tax_type = null): void + public function computeTax( ProductUnitQuantity $unitQuantity, ?int $tax_group_id, ?string $tax_type = null ): void { - $taxGroup = TaxGroup::find($tax_group_id); + $taxGroup = TaxGroup::find( $tax_group_id ); - $unitQuantity->sale_price = $this->currency->define($unitQuantity->sale_price_edit)->getRaw(); - $unitQuantity->sale_price_with_tax = $this->currency->define($unitQuantity->sale_price_edit)->getRaw(); - $unitQuantity->sale_price_without_tax = $this->currency->define($unitQuantity->sale_price_edit)->getRaw(); + $unitQuantity->sale_price = $this->currency->define( $unitQuantity->sale_price_edit )->getRaw(); + $unitQuantity->sale_price_with_tax = $this->currency->define( $unitQuantity->sale_price_edit )->getRaw(); + $unitQuantity->sale_price_without_tax = $this->currency->define( $unitQuantity->sale_price_edit )->getRaw(); $unitQuantity->sale_price_tax = 0; - $unitQuantity->wholesale_price = $this->currency->define($unitQuantity->wholesale_price_edit)->getRaw(); - $unitQuantity->wholesale_price_with_tax = $this->currency->define($unitQuantity->wholesale_price_edit)->getRaw(); - $unitQuantity->wholesale_price_without_tax = $this->currency->define($unitQuantity->wholesale_price_edit)->getRaw(); + $unitQuantity->wholesale_price = $this->currency->define( $unitQuantity->wholesale_price_edit )->getRaw(); + $unitQuantity->wholesale_price_with_tax = $this->currency->define( $unitQuantity->wholesale_price_edit )->getRaw(); + $unitQuantity->wholesale_price_without_tax = $this->currency->define( $unitQuantity->wholesale_price_edit )->getRaw(); $unitQuantity->wholesale_price_tax = 0; /** * calculate the taxes whether they are all * inclusive or exclusive for the sale_price */ - if ($taxGroup instanceof TaxGroup) { + if ( $taxGroup instanceof TaxGroup ) { $taxRate = $taxGroup->taxes - ->map(function ($tax) { - return floatval($tax[ 'rate' ]); - }) + ->map( function ( $tax ) { + return floatval( $tax[ 'rate' ] ); + } ) ->sum(); - if (($tax_type ?? $unitQuantity->tax_type) === 'inclusive') { - $unitQuantity->sale_price_with_tax = (floatval($unitQuantity->sale_price_edit)); + if ( ( $tax_type ?? $unitQuantity->tax_type ) === 'inclusive' ) { + $unitQuantity->sale_price_with_tax = ( floatval( $unitQuantity->sale_price_edit ) ); $unitQuantity->sale_price_without_tax = $this->getPriceWithoutTax( type: 'inclusive', rate: $taxRate, value: $unitQuantity->sale_price_edit ); - $unitQuantity->sale_price_tax = (floatval($this->getVatValue('inclusive', $taxRate, $unitQuantity->sale_price_edit))); + $unitQuantity->sale_price_tax = ( floatval( $this->getVatValue( 'inclusive', $taxRate, $unitQuantity->sale_price_edit ) ) ); $unitQuantity->sale_price = $unitQuantity->sale_price_with_tax; } else { - $unitQuantity->sale_price_without_tax = floatval($unitQuantity->sale_price_edit); + $unitQuantity->sale_price_without_tax = floatval( $unitQuantity->sale_price_edit ); $unitQuantity->sale_price_with_tax = $this->getPriceWithTax( type: 'exclusive', rate: $taxRate, value: $unitQuantity->sale_price_edit ); - $unitQuantity->sale_price_tax = (floatval($this->getVatValue('exclusive', $taxRate, $unitQuantity->sale_price_edit))); + $unitQuantity->sale_price_tax = ( floatval( $this->getVatValue( 'exclusive', $taxRate, $unitQuantity->sale_price_edit ) ) ); $unitQuantity->sale_price = $unitQuantity->sale_price_with_tax; } } @@ -363,16 +363,16 @@ public function computeTax(ProductUnitQuantity $unitQuantity, ?int $tax_group_id * calculate the taxes whether they are all * inclusive or exclusive for the wholesale price */ - if ($taxGroup instanceof TaxGroup) { + if ( $taxGroup instanceof TaxGroup ) { $taxRate = $taxGroup->taxes - ->map(function ($tax) { - return floatval($tax[ 'rate' ]); - }) + ->map( function ( $tax ) { + return floatval( $tax[ 'rate' ] ); + } ) ->sum(); - if (($tax_type ?? $unitQuantity->tax_type) === 'inclusive') { - $unitQuantity->wholesale_price_tax = (floatval($this->getVatValue('inclusive', $taxRate, $unitQuantity->wholesale_price_edit))); - $unitQuantity->wholesale_price_with_tax = $this->currency->define($unitQuantity->wholesale_price_edit)->getRaw(); + if ( ( $tax_type ?? $unitQuantity->tax_type ) === 'inclusive' ) { + $unitQuantity->wholesale_price_tax = ( floatval( $this->getVatValue( 'inclusive', $taxRate, $unitQuantity->wholesale_price_edit ) ) ); + $unitQuantity->wholesale_price_with_tax = $this->currency->define( $unitQuantity->wholesale_price_edit )->getRaw(); $unitQuantity->wholesale_price_without_tax = $this->getPriceWithoutTax( type: 'inclusive', rate: $taxRate, @@ -380,8 +380,8 @@ public function computeTax(ProductUnitQuantity $unitQuantity, ?int $tax_group_id ); $unitQuantity->wholesale_price = $unitQuantity->wholesale_price_without_tax; } else { - $unitQuantity->wholesale_price_tax = (floatval($this->getVatValue('exclusive', $taxRate, $unitQuantity->wholesale_price_edit))); - $unitQuantity->wholesale_price_without_tax = $this->currency->define($unitQuantity->wholesale_price_edit)->getRaw(); + $unitQuantity->wholesale_price_tax = ( floatval( $this->getVatValue( 'exclusive', $taxRate, $unitQuantity->wholesale_price_edit ) ) ); + $unitQuantity->wholesale_price_without_tax = $this->currency->define( $unitQuantity->wholesale_price_edit )->getRaw(); $unitQuantity->wholesale_price_with_tax = $this->getPriceWithTax( type: 'exclusive', rate: $taxRate, @@ -397,19 +397,19 @@ public function computeTax(ProductUnitQuantity $unitQuantity, ?int $tax_group_id /** * Compute tax for a provided unit group * - * @param string $type inclusive or exclusive - * @param float|int $value + * @param string $type inclusive or exclusive + * @param float|int $value * @return float * * @deprecated */ - public function getTaxGroupComputedValue($type, TaxGroup $group, $value) + public function getTaxGroupComputedValue( $type, TaxGroup $group, $value ) { - $rate = $group->taxes->map(fn($tax) => $tax->rate)->sum(); + $rate = $group->taxes->map( fn( $tax ) => $tax->rate )->sum(); - switch ($type) { - case 'inclusive': return $this->getPriceWithTax($type, $rate, $value); - case 'exclusive': return $this->getPriceWithoutTax($type, $rate, $value); + switch ( $type ) { + case 'inclusive': return $this->getPriceWithTax( $type, $rate, $value ); + case 'exclusive': return $this->getPriceWithoutTax( $type, $rate, $value ); } return 0; @@ -419,12 +419,12 @@ public function getTaxGroupComputedValue($type, TaxGroup $group, $value) * We might not need to perform this if * the product already comes with defined tax. */ - public function computeOrderProductTaxes(OrderProduct $orderProduct): OrderProduct + public function computeOrderProductTaxes( OrderProduct $orderProduct ): OrderProduct { /** * let's load the original product with the tax group */ - $orderProduct->load('product.tax_group'); + $orderProduct->load( 'product.tax_group' ); /** * let's compute the discount @@ -433,12 +433,12 @@ public function computeOrderProductTaxes(OrderProduct $orderProduct): OrderProdu */ $discount = (float) 0; - if ($orderProduct->discount_type === 'percentage') { + if ( $orderProduct->discount_type === 'percentage' ) { $discount = $this->getPercentageOf( value: $orderProduct->unit_price * $orderProduct->quantity, rate: $orderProduct->discount_percentage, ); - } elseif ($orderProduct->discount_type === 'flat') { + } elseif ( $orderProduct->discount_type === 'flat' ) { /** * @todo not exactly correct. The discount should be defined per * price type on the frontend. @@ -449,16 +449,16 @@ public function computeOrderProductTaxes(OrderProduct $orderProduct): OrderProdu /** * Let's now compute the taxes */ - $taxGroup = TaxGroup::find($orderProduct->tax_group_id); + $taxGroup = TaxGroup::find( $orderProduct->tax_group_id ); - $type = $orderProduct->product instanceof Product ? $orderProduct->product->tax_type : ns()->option->get('ns_pos_tax_type'); + $type = $orderProduct->product instanceof Product ? $orderProduct->product->tax_type : ns()->option->get( 'ns_pos_tax_type' ); /** * if the tax group is not defined, * then probably it's not assigned to the product. */ - if ($taxGroup instanceof TaxGroup) { - if ($type === 'exclusive') { + if ( $taxGroup instanceof TaxGroup ) { + if ( $type === 'exclusive' ) { $orderProduct->price_with_tax = $orderProduct->unit_price; $orderProduct->price_without_tax = $this->getPriceWithoutTaxUsingGroup( type: 'inclusive', @@ -474,25 +474,25 @@ public function computeOrderProductTaxes(OrderProduct $orderProduct): OrderProdu ); } - $orderProduct->tax_value = ($orderProduct->price_with_tax - $orderProduct->price_without_tax) * $orderProduct->quantity; + $orderProduct->tax_value = ( $orderProduct->price_with_tax - $orderProduct->price_without_tax ) * $orderProduct->quantity; } $orderProduct->discount = $discount; $orderProduct->total_price_without_tax = ns()->currency - ->fresh($orderProduct->price_without_tax) - ->multiplyBy($orderProduct->quantity) + ->fresh( $orderProduct->price_without_tax ) + ->multiplyBy( $orderProduct->quantity ) ->get(); $orderProduct->total_price = ns()->currency - ->fresh($orderProduct->unit_price) - ->multiplyBy($orderProduct->quantity) - ->subtractBy($discount) + ->fresh( $orderProduct->unit_price ) + ->multiplyBy( $orderProduct->quantity ) + ->subtractBy( $discount ) ->getRaw(); $orderProduct->total_price_with_tax = ns()->currency - ->fresh($orderProduct->price_with_tax) - ->multiplyBy($orderProduct->quantity) + ->fresh( $orderProduct->price_with_tax ) + ->multiplyBy( $orderProduct->quantity ) ->get(); return $orderProduct; @@ -502,37 +502,37 @@ public function computeOrderProductTaxes(OrderProduct $orderProduct): OrderProdu * Compute the gross price from net price * using the tax group rate. */ - public function getPriceWithoutTaxUsingGroup(string $type, TaxGroup $group, $price): float + public function getPriceWithoutTaxUsingGroup( string $type, TaxGroup $group, $price ): float { - $rate = $group->taxes->map(fn($tax) => $tax->rate)->sum(); + $rate = $group->taxes->map( fn( $tax ) => $tax->rate )->sum(); - return $this->getPriceWithoutTax($type, $rate, $price); + return $this->getPriceWithoutTax( $type, $rate, $price ); } /** * Computes the net price using the gross * price along with a TaxGroup rate. */ - public function getPriceWithTaxUsingGroup(string $type, TaxGroup $group, $price): float + public function getPriceWithTaxUsingGroup( string $type, TaxGroup $group, $price ): float { - $rate = $group->taxes()->get()->map(fn($tax) => $tax->rate)->sum(); + $rate = $group->taxes()->get()->map( fn( $tax ) => $tax->rate )->sum(); - return $this->getPriceWithTax($type, $rate, $price); + return $this->getPriceWithTax( $type, $rate, $price ); } /** * Compute the net price using a rate * and a tax type provided. */ - public function getPriceWithoutTax(string $type, float $rate, float $value): float + public function getPriceWithoutTax( string $type, float $rate, float $value ): float { - if ($type === 'inclusive') { + if ( $type === 'inclusive' ) { return $this->currency->define( - $this->currency->define($value)->dividedBy( - $this->currency->define($rate)->additionateBy(100)->toFloat() + $this->currency->define( $value )->dividedBy( + $this->currency->define( $rate )->additionateBy( 100 )->toFloat() )->toFloat() ) - ->multipliedBy(100) + ->multipliedBy( 100 ) ->toFloat(); } @@ -543,13 +543,13 @@ public function getPriceWithoutTax(string $type, float $rate, float $value): flo * Compute the gross price using a rate * and a tax type provided. */ - public function getPriceWithTax(string $type, float $rate, float $value): float + public function getPriceWithTax( string $type, float $rate, float $value ): float { - if ($type === 'exclusive') { + if ( $type === 'exclusive' ) { return $this->currency->define( - $this->currency->define($value)->dividedBy(100)->toFloat() + $this->currency->define( $value )->dividedBy( 100 )->toFloat() )->multipliedBy( - $this->currency->define($rate)->additionateBy(100)->toFloat() + $this->currency->define( $rate )->additionateBy( 100 )->toFloat() )->toFloat(); } @@ -559,12 +559,12 @@ public function getPriceWithTax(string $type, float $rate, float $value): float /** * Computes the vat value for a defined amount. */ - public function getVatValue(?string $type, float $rate, float $value): float + public function getVatValue( ?string $type, float $rate, float $value ): float { - if ($type === 'inclusive') { - return $this->currency->define($value)->subtractBy($this->getPriceWithoutTax($type, $rate, $value))->toFloat(); - } elseif ($type === 'exclusive') { - return $this->currency->define($this->getPriceWithTax($type, $rate, $value))->subtractBy($value)->toFloat(); + if ( $type === 'inclusive' ) { + return $this->currency->define( $value )->subtractBy( $this->getPriceWithoutTax( $type, $rate, $value ) )->toFloat(); + } elseif ( $type === 'exclusive' ) { + return $this->currency->define( $this->getPriceWithTax( $type, $rate, $value ) )->subtractBy( $value )->toFloat(); } return 0; @@ -574,12 +574,12 @@ public function getVatValue(?string $type, float $rate, float $value): float * get the tax value from an amount calculated * over a provided tax group. */ - public function getTaxGroupVatValue(?string $type, TaxGroup $group, float $value): float + public function getTaxGroupVatValue( ?string $type, TaxGroup $group, float $value ): float { - if ($type === 'inclusive') { - return $this->currency->define($value)->subtractBy($this->getPriceWithTaxUsingGroup($type, $group, $value))->toFloat(); - } elseif ($type === 'exclusive') { - return $this->currency->define($this->getPriceWithoutTaxUsingGroup($type, $group, $value))->subtractBy($value)->toFloat(); + if ( $type === 'inclusive' ) { + return $this->currency->define( $value )->subtractBy( $this->getPriceWithTaxUsingGroup( $type, $group, $value ) )->toFloat(); + } elseif ( $type === 'exclusive' ) { + return $this->currency->define( $this->getPriceWithoutTaxUsingGroup( $type, $group, $value ) )->subtractBy( $value )->toFloat(); } return 0; @@ -589,11 +589,11 @@ public function getTaxGroupVatValue(?string $type, TaxGroup $group, float $value * calculate a percentage of a provided * value using a defined rate */ - public function getPercentageOf(float $value, float $rate): float + public function getPercentageOf( float $value, float $rate ): float { - return $this->currency->fresh($value) - ->multipliedBy($rate) - ->dividedBy(100) + return $this->currency->fresh( $value ) + ->multipliedBy( $rate ) + ->dividedBy( 100 ) ->toFloat(); } @@ -603,14 +603,14 @@ public function getPercentageOf(float $value, float $rate): float * * @throws NotFoundException */ - public function delete(int $id): array + public function delete( int $id ): array { - $tax = $this->get($id); + $tax = $this->get( $id ); $tax->delete(); return [ 'status' => 'success', - 'message' => __('The tax has been successfully deleted.'), + 'message' => __( 'The tax has been successfully deleted.' ), ]; } } diff --git a/app/Services/TestService.php b/app/Services/TestService.php index 621a0a384..65b51ba93 100644 --- a/app/Services/TestService.php +++ b/app/Services/TestService.php @@ -19,15 +19,15 @@ class TestService { - public function prepareProduct($data = []) + public function prepareProduct( $data = [] ) { $faker = Factory::create(); $category = ProductCategory::get()->random(); $unitGroup = UnitGroup::get()->random(); $taxGroup = TaxGroup::get()->random(); - return array_merge([ - 'name' => ucwords($faker->word), + return array_merge( [ + 'name' => ucwords( $faker->word ), 'variations' => [ [ '$primary' => true, @@ -39,103 +39,103 @@ public function prepareProduct($data = []) 'identification' => [ 'barcode' => $faker->ean13(), 'barcode_type' => 'ean13', - 'searchable' => $faker->randomElement([ true, false ]), + 'searchable' => $faker->randomElement( [ true, false ] ), 'category_id' => $category->id, - 'description' => __('Created via tests'), + 'description' => __( 'Created via tests' ), 'product_type' => 'product', - 'type' => $faker->randomElement([ Product::TYPE_MATERIALIZED, Product::TYPE_DEMATERIALIZED ]), - 'sku' => Str::random(15) . '-sku', + 'type' => $faker->randomElement( [ Product::TYPE_MATERIALIZED, Product::TYPE_DEMATERIALIZED ] ), + 'sku' => Str::random( 15 ) . '-sku', 'status' => 'available', 'stock_management' => 'enabled', ], 'images' => [], 'taxes' => [ 'tax_group_id' => 1, - 'tax_type' => Arr::random([ 'inclusive', 'exclusive' ]), + 'tax_type' => Arr::random( [ 'inclusive', 'exclusive' ] ), ], 'units' => [ - 'selling_group' => $unitGroup->units->map(function ($unit) use ($faker) { + 'selling_group' => $unitGroup->units->map( function ( $unit ) use ( $faker ) { return [ - 'sale_price_edit' => $faker->numberBetween(20, 25), - 'wholesale_price_edit' => $faker->numberBetween(20, 25), + 'sale_price_edit' => $faker->numberBetween( 20, 25 ), + 'wholesale_price_edit' => $faker->numberBetween( 20, 25 ), 'unit_id' => $unit->id, ]; - })->toArray(), + } )->toArray(), 'unit_group' => $unitGroup->id, ], ], ], - ], $data); + ], $data ); } - public function prepareOrder(Carbon $date, array $orderDetails = [], array $productDetails = [], array $config = []) + public function prepareOrder( Carbon $date, array $orderDetails = [], array $productDetails = [], array $config = [] ) { /** * @var CurrencyService */ - $currency = app()->make(CurrencyService::class); + $currency = app()->make( CurrencyService::class ); $faker = Factory::create(); - $products = isset($config[ 'products' ]) ? $config[ 'products' ]() : Product::where('tax_group_id', '>', 0) - ->where('type', '<>', Product::TYPE_GROUPED) - ->whereRelation('unit_quantities', 'quantity', '>', 1000) - ->with('unit_quantities', function ($query) { - $query->where('quantity', '>', 3); - }) + $products = isset( $config[ 'products' ] ) ? $config[ 'products' ]() : Product::where( 'tax_group_id', '>', 0 ) + ->where( 'type', '<>', Product::TYPE_GROUPED ) + ->whereRelation( 'unit_quantities', 'quantity', '>', 1000 ) + ->with( 'unit_quantities', function ( $query ) { + $query->where( 'quantity', '>', 3 ); + } ) ->get() ->shuffle() - ->take(3); - $shippingFees = $faker->randomElement([10, 15, 20, 25, 30, 35, 40]); - $discountRate = $faker->numberBetween(0, 5); + ->take( 3 ); + $shippingFees = $faker->randomElement( [10, 15, 20, 25, 30, 35, 40] ); + $discountRate = $faker->numberBetween( 0, 5 ); - $products = $products->map(function ($product) use ($faker, $productDetails, $config) { - $unitElement = $faker->randomElement($product->unit_quantities); + $products = $products->map( function ( $product ) use ( $faker, $productDetails, $config ) { + $unitElement = $faker->randomElement( $product->unit_quantities ); - $data = array_merge([ + $data = array_merge( [ 'name' => $product->name, - 'quantity' => $product->quantity ?? $faker->numberBetween(1, 3), + 'quantity' => $product->quantity ?? $faker->numberBetween( 1, 3 ), 'unit_price' => $unitElement->sale_price, 'tax_type' => 'inclusive', 'tax_group_id' => 1, 'unit_id' => $unitElement->unit_id, - ], $productDetails); + ], $productDetails ); if ( - (isset($product->id)) || - ($faker->randomElement([ false, true ]) && ! ($config[ 'allow_quick_products' ] ?? true)) + ( isset( $product->id ) ) || + ( $faker->randomElement( [ false, true ] ) && ! ( $config[ 'allow_quick_products' ] ?? true ) ) ) { $data[ 'product_id' ] = $product->id; $data[ 'unit_quantity_id' ] = $unitElement->id; } return $data; - })->filter(function ($product) { + } )->filter( function ( $product ) { return $product[ 'quantity' ] > 0; - }); + } ); /** * testing customer balance */ $customer = Customer::get()->random(); - $subtotal = ns()->currency->getRaw($products->map(function ($product) use ($currency) { + $subtotal = ns()->currency->getRaw( $products->map( function ( $product ) use ( $currency ) { return $currency - ->define($product[ 'unit_price' ]) - ->multiplyBy($product[ 'quantity' ]) + ->define( $product[ 'unit_price' ] ) + ->multiplyBy( $product[ 'quantity' ] ) ->getRaw(); - })->sum()); + } )->sum() ); $discount = [ - 'type' => $faker->randomElement([ 'percentage', 'flat' ]), + 'type' => $faker->randomElement( [ 'percentage', 'flat' ] ), ]; /** * If the discount is percentage or flat. */ - if ($discount[ 'type' ] === 'percentage') { + if ( $discount[ 'type' ] === 'percentage' ) { $discount[ 'rate' ] = $discountRate; - $discount[ 'value' ] = $currency->define($discount[ 'rate' ]) - ->multiplyBy($subtotal) - ->divideBy(100) + $discount[ 'value' ] = $currency->define( $discount[ 'rate' ] ) + ->multiplyBy( $subtotal ) + ->divideBy( 100 ) ->getRaw(); } else { $discount[ 'value' ] = 2; @@ -143,8 +143,8 @@ public function prepareOrder(Carbon $date, array $orderDetails = [], array $prod } $dateString = $date->startOfDay()->addHours( - $faker->numberBetween(0, 23) - )->format('Y-m-d H:m:s'); + $faker->numberBetween( 0, 23 ) + )->format( 'Y-m-d H:m:s' ); $finalDetails = [ 'customer_id' => $customer->id, @@ -165,53 +165,53 @@ public function prepareOrder(Carbon $date, array $orderDetails = [], array $prod 'country' => 'United State Seattle', ], ], - 'author' => User::get('id')->pluck('id')->shuffle()->first(), + 'author' => User::get( 'id' )->pluck( 'id' )->shuffle()->first(), 'coupons' => [], 'subtotal' => $subtotal, 'shipping' => $shippingFees, 'products' => $products->toArray(), ]; - if (isset($config[ 'payments' ]) && is_callable($config[ 'payments' ])) { - $finalDetails[ 'payments' ] = $config[ 'payments' ]($finalDetails); + if ( isset( $config[ 'payments' ] ) && is_callable( $config[ 'payments' ] ) ) { + $finalDetails[ 'payments' ] = $config[ 'payments' ]( $finalDetails ); } else { $finalDetails[ 'payments' ] = [ [ 'identifier' => 'cash-payment', - 'value' => $currency->define($subtotal) - ->additionateBy($shippingFees) + 'value' => $currency->define( $subtotal ) + ->additionateBy( $shippingFees ) ->getRaw(), ], ]; } - return array_merge($finalDetails, $orderDetails); + return array_merge( $finalDetails, $orderDetails ); } - public function prepareProcurement(Carbon $date, array $details = []) + public function prepareProcurement( Carbon $date, array $details = [] ) { $faker = Factory::create(); /** * @var TaxService */ - $taxService = app()->make(TaxService::class); + $taxService = app()->make( TaxService::class ); - $taxType = Arr::random([ 'inclusive', 'exclusive' ]); + $taxType = Arr::random( [ 'inclusive', 'exclusive' ] ); $taxGroup = TaxGroup::get()->random(); $margin = 25; $request = Product::withStockEnabled() - ->limit($details[ 'total_products' ] ?? -1) - ->with([ + ->limit( $details[ 'total_products' ] ?? -1 ) + ->with( [ 'unitGroup', - 'unit_quantities' => function ($query) use ($details) { - $query->limit($details[ 'total_unit_quantities' ] ?? -1); + 'unit_quantities' => function ( $query ) use ( $details ) { + $query->limit( $details[ 'total_unit_quantities' ] ?? -1 ); }, - ]) + ] ) ->get(); $config = [ - 'name' => sprintf(__('Sample Procurement %s'), Str::random(5)), + 'name' => sprintf( __( 'Sample Procurement %s' ), Str::random( 5 ) ), 'general' => [ 'provider_id' => Provider::get()->random()->id, 'payment_status' => Procurement::PAYMENT_PAID, @@ -220,12 +220,12 @@ public function prepareProcurement(Carbon $date, array $details = []) 'automatic_approval' => 1, 'created_at' => $date->toDateTimeString(), ], - 'products' => $request->map(function ($product) { - return $product->unitGroup->units->map(function ($unit) use ($product) { + 'products' => $request->map( function ( $product ) { + return $product->unitGroup->units->map( function ( $unit ) use ( $product ) { // we retreive the unit quantity only if that is included on the group units. - $unitQuantity = $product->unit_quantities->filter(fn($q) => (int) $q->unit_id === (int) $unit->id)->first(); + $unitQuantity = $product->unit_quantities->filter( fn( $q ) => (int) $q->unit_id === (int) $unit->id )->first(); - if ($unitQuantity instanceof ProductUnitQuantity) { + if ( $unitQuantity instanceof ProductUnitQuantity ) { return (object) [ 'unit' => $unit, 'unitQuantity' => $unitQuantity, @@ -234,9 +234,9 @@ public function prepareProcurement(Carbon $date, array $details = []) } return false; - })->filter(); - })->flatten()->map(function ($data) use ($taxService, $taxType, $taxGroup, $margin, $faker) { - $quantity = $faker->numberBetween(100, 999); + } )->filter(); + } )->flatten()->map( function ( $data ) use ( $taxService, $taxType, $taxGroup, $margin, $faker ) { + $quantity = $faker->numberBetween( 100, 999 ); return [ 'product_id' => $data->product->id, @@ -271,11 +271,11 @@ public function prepareProcurement(Carbon $date, array $details = []) ) * $quantity, 'unit_id' => $data->unit->id, ]; - }), + } ), ]; - foreach ($details as $key => $value) { - Arr::set($config, $key, $value); + foreach ( $details as $key => $value ) { + Arr::set( $config, $key, $value ); } return $config; diff --git a/app/Services/TransactionService.php b/app/Services/TransactionService.php index 0d5d1033e..44c523663 100644 --- a/app/Services/TransactionService.php +++ b/app/Services/TransactionService.php @@ -42,53 +42,53 @@ class TransactionService TransactionHistory::ACCOUNT_CUSTOMER_DEBIT => [ 'operation' => TransactionHistory::OPERATION_DEBIT, 'option' => 'ns_customer_debitting_cashflow_account' ], ]; - public function __construct(DateService $dateService) + public function __construct( DateService $dateService ) { $this->dateService = $dateService; } - public function create($fields) + public function create( $fields ) { $transaction = new Transaction; - foreach ($fields as $field => $value) { + foreach ( $fields as $field => $value ) { $transaction->$field = $value; } $transaction->author = Auth::id(); $transaction->save(); - event(new TransactionAfterCreatedEvent($transaction, request()->all())); + event( new TransactionAfterCreatedEvent( $transaction, request()->all() ) ); return [ 'status' => 'success', - 'message' => __('The transaction has been successfully saved.'), - 'data' => compact('transaction'), + 'message' => __( 'The transaction has been successfully saved.' ), + 'data' => compact( 'transaction' ), ]; } - public function edit($id, $fields) + public function edit( $id, $fields ) { - $transaction = $this->get($id); + $transaction = $this->get( $id ); - if ($transaction instanceof Transaction) { - foreach ($fields as $field => $value) { + if ( $transaction instanceof Transaction ) { + foreach ( $fields as $field => $value ) { $transaction->$field = $value; } $transaction->author = Auth::id(); $transaction->save(); - event(new TransactionAfterUpdatedEvent($transaction, request()->all())); + event( new TransactionAfterUpdatedEvent( $transaction, request()->all() ) ); return [ 'status' => 'success', - 'message' => __('The transaction has been successfully updated.'), - 'data' => compact('transaction'), + 'message' => __( 'The transaction has been successfully updated.' ), + 'data' => compact( 'transaction' ), ]; } - throw new NotFoundException(__('Unable to find the transaction using the provided identifier.')); + throw new NotFoundException( __( 'Unable to find the transaction using the provided identifier.' ) ); } /** @@ -97,16 +97,16 @@ public function edit($id, $fields) * * @throws NotFoundException */ - public function get(int $id = null): Collection|Transaction + public function get( ?int $id = null ): Collection|Transaction { - if ($id === null) { + if ( $id === null ) { return Transaction::get(); } - $transaction = Transaction::find($id); + $transaction = Transaction::find( $id ); - if (! $transaction instanceof Transaction) { - throw new NotFoundException(__('Unable to find the requested transaction using the provided id.')); + if ( ! $transaction instanceof Transaction ) { + throw new NotFoundException( __( 'Unable to find the requested transaction using the provided id.' ) ); } return $transaction; @@ -119,14 +119,14 @@ public function get(int $id = null): Collection|Transaction * @param int transction id * @return array */ - public function delete($id) + public function delete( $id ) { - $transaction = $this->get($id); + $transaction = $this->get( $id ); $transaction->delete(); return [ 'status' => 'success', - 'message' => __('The transction has been correctly deleted.'), + 'message' => __( 'The transction has been correctly deleted.' ), ]; } @@ -134,12 +134,12 @@ public function delete($id) * Retreive a specific account type * or all account type */ - public function getTransactionAccountByID(int $id = null) + public function getTransactionAccountByID( ?int $id = null ) { - if ($id !== null) { - $account = TransactionAccount::find($id); - if (! $account instanceof TransactionAccount) { - throw new NotFoundException(__('Unable to find the requested account type using the provided id.')); + if ( $id !== null ) { + $account = TransactionAccount::find( $id ); + if ( ! $account instanceof TransactionAccount ) { + throw new NotFoundException( __( 'Unable to find the requested account type using the provided id.' ) ); } return $account; @@ -153,27 +153,27 @@ public function getTransactionAccountByID(int $id = null) * * @todo must be implemented */ - public function deleteTransactionAccount($id, $force = true) + public function deleteTransactionAccount( $id, $force = true ) { - $accountType = $this->getTransactionAccountByID($id); + $accountType = $this->getTransactionAccountByID( $id ); - if ($accountType->transactions->count() > 0 && $force === false) { - throw new NotAllowedException(__('You cannot delete an account type that has transaction bound.')); + if ( $accountType->transactions->count() > 0 && $force === false ) { + throw new NotAllowedException( __( 'You cannot delete an account type that has transaction bound.' ) ); } /** * if there is not transaction, it * won't be looped */ - $accountType->transactions->map(function ($transaction) { + $accountType->transactions->map( function ( $transaction ) { $transaction->delete(); - }); + } ); $accountType->delete(); return [ 'status' => 'success', - 'message' => __('The account type has been deleted.'), + 'message' => __( 'The account type has been deleted.' ), ]; } @@ -183,27 +183,27 @@ public function deleteTransactionAccount($id, $force = true) * * @throws NotAllowedException */ - public function deleteAccount(int $id, bool $force = false): array + public function deleteAccount( int $id, bool $force = false ): array { - $accountType = $this->getTransactionAccountByID($id); + $accountType = $this->getTransactionAccountByID( $id ); - if ($accountType->transactions->count() > 0 && $force === false) { - throw new NotAllowedException(__('You cannot delete an account which has transactions bound.')); + if ( $accountType->transactions->count() > 0 && $force === false ) { + throw new NotAllowedException( __( 'You cannot delete an account which has transactions bound.' ) ); } /** * if there is not transaction, it * won't be looped */ - $accountType->transactions->map(function ($transaction) { + $accountType->transactions->map( function ( $transaction ) { $transaction->delete(); - }); + } ); $accountType->delete(); return [ 'status' => 'success', - 'message' => __('The transaction account has been deleted.'), + 'message' => __( 'The transaction account has been deleted.' ), ]; } @@ -213,12 +213,12 @@ public function deleteAccount(int $id, bool $force = false): array * * @throws NotFoundException */ - public function getTransaction(int $id): TransactionAccount + public function getTransaction( int $id ): TransactionAccount { - $accountType = TransactionAccount::with('transactions')->find($id); + $accountType = TransactionAccount::with( 'transactions' )->find( $id ); - if (! $accountType instanceof TransactionAccount) { - throw new NotFoundException(__('Unable to find the transaction account using the provided ID.')); + if ( ! $accountType instanceof TransactionAccount ) { + throw new NotFoundException( __( 'Unable to find the transaction account using the provided ID.' ) ); } return $accountType; @@ -227,11 +227,11 @@ public function getTransaction(int $id): TransactionAccount /** * Creates an accounting account */ - public function createAccount(array $fields): array + public function createAccount( array $fields ): array { $account = new TransactionAccount; - foreach ($fields as $field => $value) { + foreach ( $fields as $field => $value ) { $account->$field = $value; } @@ -240,8 +240,8 @@ public function createAccount(array $fields): array return [ 'status' => 'success', - 'message' => __('The account has been created.'), - 'data' => compact('account'), + 'message' => __( 'The account has been created.' ), + 'data' => compact( 'account' ), ]; } @@ -249,11 +249,11 @@ public function createAccount(array $fields): array * Update specified expense * account using a provided ID */ - public function editTransactionAccount(int $id, array $fields): array + public function editTransactionAccount( int $id, array $fields ): array { - $account = $this->getTransaction($id); + $account = $this->getTransaction( $id ); - foreach ($fields as $field => $value) { + foreach ( $fields as $field => $value ) { $account->$field = $value; } @@ -262,25 +262,25 @@ public function editTransactionAccount(int $id, array $fields): array return [ 'status' => 'success', - 'message' => __('The transaction account has been updated.'), - 'data' => compact('account'), + 'message' => __( 'The transaction account has been updated.' ), + 'data' => compact( 'account' ), ]; } /** * Will trigger for not recurring transaction */ - public function triggerTransaction(Transaction $transaction): array + public function triggerTransaction( Transaction $transaction ): array { - if (! in_array($transaction->type, [ + if ( ! in_array( $transaction->type, [ Transaction::TYPE_DIRECT, Transaction::TYPE_ENTITY, Transaction::TYPE_SCHEDULED, - ])) { - throw new NotAllowedException(__('This transaction type can\'t be triggered.')); + ] ) ) { + throw new NotAllowedException( __( 'This transaction type can\'t be triggered.' ) ); } - $histories = $this->recordTransactionHistory($transaction); + $histories = $this->recordTransactionHistory( $transaction ); /** * a non recurring transaction @@ -292,29 +292,29 @@ public function triggerTransaction(Transaction $transaction): array return [ 'status' => 'success', - 'message' => __('The transaction has been successfully triggered.'), - 'data' => compact('transaction', 'histories'), + 'message' => __( 'The transaction has been successfully triggered.' ), + 'data' => compact( 'transaction', 'histories' ), ]; } - public function getAccountTransactions($id) + public function getAccountTransactions( $id ) { - $accountType = $this->getTransaction($id); + $accountType = $this->getTransaction( $id ); return $accountType->transactions; } - public function recordTransactionHistory($transaction) + public function recordTransactionHistory( $transaction ) { - if (! empty($transaction->group_id)) { - return Role::find($transaction->group_id)->users()->get()->map(function ($user) use ($transaction) { - if ($transaction->account instanceof TransactionAccount) { + if ( ! empty( $transaction->group_id ) ) { + return Role::find( $transaction->group_id )->users()->get()->map( function ( $user ) use ( $transaction ) { + if ( $transaction->account instanceof TransactionAccount ) { $history = new TransactionHistory; $history->value = $transaction->value; $history->transaction_id = $transaction->id; $history->operation = 'debit'; $history->author = $transaction->author; - $history->name = str_replace('{user}', ucwords($user->username), $transaction->name); + $history->name = str_replace( '{user}', ucwords( $user->username ), $transaction->name ); $history->transaction_account_id = $transaction->account->id; $history->save(); @@ -322,9 +322,9 @@ public function recordTransactionHistory($transaction) } return false; - })->filter(); // only return valid history created + } )->filter(); // only return valid history created } else { - if ($transaction->account instanceof TransactionAccount) { + if ( $transaction->account instanceof TransactionAccount ) { $history = new TransactionHistory; $history->value = $transaction->value; $history->transaction_id = $transaction->id; @@ -341,9 +341,9 @@ public function recordTransactionHistory($transaction) $history->transaction_account_id = $transaction->account->id; $history->save(); - return collect([ $history ]); + return collect( [ $history ] ); } else { - throw new ModelNotFoundException(sprintf('The transaction account is not found.')); + throw new ModelNotFoundException( sprintf( 'The transaction account is not found.' ) ); } } } @@ -355,31 +355,31 @@ public function recordTransactionHistory($transaction) * * @return array of process results. */ - public function handleRecurringTransactions(Carbon $date = null) + public function handleRecurringTransactions( ?Carbon $date = null ) { - if ($date === null) { + if ( $date === null ) { $date = $this->dateService->copy(); } $processStatus = Transaction::recurring() ->active() ->get() - ->map(function ($transaction) use ($date) { - switch ($transaction->occurrence) { + ->map( function ( $transaction ) use ( $date ) { + switch ( $transaction->occurrence ) { case 'month_starts': $transactionScheduledDate = $date->copy()->startOfMonth(); break; case 'month_mid': - $transactionScheduledDate = $date->copy()->startOfMonth()->addDays(14); + $transactionScheduledDate = $date->copy()->startOfMonth()->addDays( 14 ); break; case 'month_ends': $transactionScheduledDate = $date->copy()->endOfMonth(); break; case 'x_before_month_ends': - $transactionScheduledDate = $date->copy()->endOfMonth()->subDays($transaction->occurrence_value); + $transactionScheduledDate = $date->copy()->endOfMonth()->subDays( $transaction->occurrence_value ); break; case 'x_after_month_starts': - $transactionScheduledDate = $date->copy()->startOfMonth()->addDays($transaction->occurrence_value); + $transactionScheduledDate = $date->copy()->startOfMonth()->addDays( $transaction->occurrence_value ); break; case 'on_specific_day': $transactionScheduledDate = $date->copy(); @@ -387,43 +387,43 @@ public function handleRecurringTransactions(Carbon $date = null) break; } - if (isset($transactionScheduledDate) && $transactionScheduledDate instanceof Carbon) { + if ( isset( $transactionScheduledDate ) && $transactionScheduledDate instanceof Carbon ) { /** * Checks if the recurring transactions about to be saved has been * already issued on the occuring day. */ - if ($date->isSameDay($transactionScheduledDate)) { - if (! $this->hadTransactionHistory($transactionScheduledDate, $transaction)) { - $histories = $this->recordTransactionHistory($transaction); + if ( $date->isSameDay( $transactionScheduledDate ) ) { + if ( ! $this->hadTransactionHistory( $transactionScheduledDate, $transaction ) ) { + $histories = $this->recordTransactionHistory( $transaction ); return [ 'status' => 'success', - 'data' => compact('transaction', 'histories'), - 'message' => sprintf(__('The transaction "%s" has been processed on day "%s".'), $transaction->name, $date->toDateTimeString()), + 'data' => compact( 'transaction', 'histories' ), + 'message' => sprintf( __( 'The transaction "%s" has been processed on day "%s".' ), $transaction->name, $date->toDateTimeString() ), ]; } return [ 'status' => 'failed', - 'message' => sprintf(__('The transaction "%s" has already been processed.'), $transaction->name), + 'message' => sprintf( __( 'The transaction "%s" has already been processed.' ), $transaction->name ), ]; } } return [ 'status' => 'failed', - 'message' => sprintf(__('The transactions "%s" hasn\'t been proceesed, as it\'s out of date.'), $transaction->name), + 'message' => sprintf( __( 'The transactions "%s" hasn\'t been proceesed, as it\'s out of date.' ), $transaction->name ), ]; - }); + } ); - $successFulProcesses = collect($processStatus)->filter(fn($process) => $process[ 'status' ] === 'success'); + $successFulProcesses = collect( $processStatus )->filter( fn( $process ) => $process[ 'status' ] === 'success' ); return [ 'status' => 'success', 'data' => $processStatus->toArray(), 'message' => $successFulProcesses->count() === $processStatus->count() ? - __('The process has been correctly executed and all transactions has been processed.') : - sprintf(__('The process has been executed with some failures. %s/%s process(es) has successed.'), $successFulProcesses->count(), $processStatus->count()), + __( 'The process has been correctly executed and all transactions has been processed.' ) : + sprintf( __( 'The process has been executed with some failures. %s/%s process(es) has successed.' ), $successFulProcesses->count(), $processStatus->count() ), ]; } @@ -432,11 +432,11 @@ public function handleRecurringTransactions(Carbon $date = null) * To prevent many recurring transactions to trigger multiple times * during a day. */ - public function hadTransactionHistory($date, Transaction $transaction) + public function hadTransactionHistory( $date, Transaction $transaction ) { - $history = TransactionHistory::where('transaction_id', $transaction->id) - ->where('created_at', '>=', $date->startOfDay()->toDateTimeString()) - ->where('created_at', '<=', $date->endOfDay()->toDateTimeString()) + $history = TransactionHistory::where( 'transaction_id', $transaction->id ) + ->where( 'created_at', '>=', $date->startOfDay()->toDateTimeString() ) + ->where( 'created_at', '<=', $date->endOfDay()->toDateTimeString() ) ->get(); return $history instanceof TransactionHistory; @@ -447,23 +447,23 @@ public function hadTransactionHistory($date, Transaction $transaction) * * @return void */ - public function handleProcurementTransaction(Procurement $procurement) + public function handleProcurementTransaction( Procurement $procurement ) { if ( $procurement->payment_status === Procurement::PAYMENT_PAID && $procurement->delivery_status === Procurement::STOCKED ) { - $accountTypeCode = $this->getTransactionAccountByCode(TransactionHistory::ACCOUNT_PROCUREMENTS); + $accountTypeCode = $this->getTransactionAccountByCode( TransactionHistory::ACCOUNT_PROCUREMENTS ); /** * this behave as a flash transaction * made only for recording an history. */ - $transaction = TransactionHistory::where('procurement_id', $procurement->id)->firstOrNew(); + $transaction = TransactionHistory::where( 'procurement_id', $procurement->id )->firstOrNew(); $transaction->value = $procurement->cost; $transaction->author = $procurement->author; $transaction->procurement_id = $procurement->id; - $transaction->name = sprintf(__('Procurement : %s'), $procurement->name); + $transaction->name = sprintf( __( 'Procurement : %s' ), $procurement->name ); $transaction->transaction_account_id = $accountTypeCode->id; $transaction->operation = 'debit'; $transaction->created_at = $procurement->created_at; @@ -478,17 +478,17 @@ public function handleProcurementTransaction(Procurement $procurement) * If the procurement is not paid, we'll * record a liability for the procurement. */ - $accountTypeCode = $this->getTransactionAccountByCode(TransactionHistory::ACCOUNT_LIABILITIES); + $accountTypeCode = $this->getTransactionAccountByCode( TransactionHistory::ACCOUNT_LIABILITIES ); /** * this behave as a flash transaction * made only for recording an history. */ - $transaction = TransactionHistory::where('procurement_id', $procurement->id)->firstOrNew(); + $transaction = TransactionHistory::where( 'procurement_id', $procurement->id )->firstOrNew(); $transaction->value = $procurement->cost; $transaction->author = $procurement->author; $transaction->procurement_id = $procurement->id; - $transaction->name = sprintf(__('Procurement Liability : %s'), $procurement->name); + $transaction->name = sprintf( __( 'Procurement Liability : %s' ), $procurement->name ); $transaction->transaction_account_id = $accountTypeCode->id; $transaction->operation = 'debit'; $transaction->created_at = $procurement->created_at; @@ -542,9 +542,9 @@ public function createTransactionHistory( * * @return void */ - public function createTransactionFromRefund(Order $order, OrderProductRefund $orderProductRefund, OrderProduct $orderProduct) + public function createTransactionFromRefund( Order $order, OrderProductRefund $orderProductRefund, OrderProduct $orderProduct ) { - $transactionAccount = $this->getTransactionAccountByCode(TransactionHistory::ACCOUNT_REFUNDS); + $transactionAccount = $this->getTransactionAccountByCode( TransactionHistory::ACCOUNT_REFUNDS ); /** * Every product refund produce a debit @@ -559,18 +559,18 @@ public function createTransactionFromRefund(Order $order, OrderProductRefund $or $transaction->order_product_id = $orderProduct->id; $transaction->order_refund_id = $orderProductRefund->order_refund_id; $transaction->order_refund_product_id = $orderProductRefund->id; - $transaction->name = sprintf(__('Refunding : %s'), $orderProduct->name); + $transaction->name = sprintf( __( 'Refunding : %s' ), $orderProduct->name ); $transaction->id = 0; // this is not assigned to an existing transaction $transaction->account = $transactionAccount; - $this->recordTransactionHistory($transaction); + $this->recordTransactionHistory( $transaction ); - if ($orderProductRefund->condition === OrderProductRefund::CONDITION_DAMAGED) { + if ( $orderProductRefund->condition === OrderProductRefund::CONDITION_DAMAGED ) { /** * Only if the product is damaged we should * consider saving that as a waste. */ - $transactionAccount = $this->getTransactionAccountByCode(TransactionHistory::ACCOUNT_SPOILED); + $transactionAccount = $this->getTransactionAccountByCode( TransactionHistory::ACCOUNT_SPOILED ); $transaction = new Transaction; $transaction->value = $orderProductRefund->total_price; @@ -581,11 +581,11 @@ public function createTransactionFromRefund(Order $order, OrderProductRefund $or $transaction->order_product_id = $orderProduct->id; $transaction->order_refund_id = $orderProductRefund->order_refund_id; $transaction->order_refund_product_id = $orderProductRefund->id; - $transaction->name = sprintf(__('Spoiled Good : %s'), $orderProduct->name); + $transaction->name = sprintf( __( 'Spoiled Good : %s' ), $orderProduct->name ); $transaction->id = 0; // this is not assigned to an existing transaction $transaction->account = $transactionAccount; - $this->recordTransactionHistory($transaction); + $this->recordTransactionHistory( $transaction ); } } @@ -596,10 +596,10 @@ public function createTransactionFromRefund(Order $order, OrderProductRefund $or * * @return void */ - public function handleCreatedOrder(Order $order) + public function handleCreatedOrder( Order $order ) { - if ($order->payment_status === Order::PAYMENT_PAID) { - $transactionAccount = $this->getTransactionAccountByCode(TransactionHistory::ACCOUNT_SALES); + if ( $order->payment_status === Order::PAYMENT_PAID ) { + $transactionAccount = $this->getTransactionAccountByCode( TransactionHistory::ACCOUNT_SALES ); $transaction = new Transaction; $transaction->value = $order->total; @@ -607,13 +607,13 @@ public function handleCreatedOrder(Order $order) $transaction->operation = TransactionHistory::OPERATION_CREDIT; $transaction->author = $order->author; $transaction->order_id = $order->id; - $transaction->name = sprintf(__('Sale : %s'), $order->code); + $transaction->name = sprintf( __( 'Sale : %s' ), $order->code ); $transaction->id = 0; // this is not assigned to an existing transaction $transaction->account = $transactionAccount; $transaction->created_at = $order->created_at; $transaction->updated_at = $order->updated_at; - $this->recordTransactionHistory($transaction); + $this->recordTransactionHistory( $transaction ); } } @@ -622,14 +622,14 @@ public function handleCreatedOrder(Order $order) * or will create a new one according to the settings * * @param string $accountSettingsName - * @param array $defaults + * @param array $defaults */ - public function getDefinedTransactionAccount($accountSettingsName, $defaults): TransactionAccount + public function getDefinedTransactionAccount( $accountSettingsName, $defaults ): TransactionAccount { - $accountType = TransactionAccount::find(ns()->option->get($accountSettingsName)); + $accountType = TransactionAccount::find( ns()->option->get( $accountSettingsName ) ); - if (! $accountType instanceof TransactionAccount) { - $result = $this->createAccount($defaults); + if ( ! $accountType instanceof TransactionAccount ) { + $result = $this->createAccount( $defaults ); $accountType = (object) $result[ 'data' ][ 'account' ]; @@ -637,9 +637,9 @@ public function getDefinedTransactionAccount($accountSettingsName, $defaults): T * Will set the transaction as the default account transaction * account for subsequent transactions. */ - ns()->option->set($accountSettingsName, $accountType->id); + ns()->option->set( $accountSettingsName, $accountType->id ); - $accountType = TransactionAccount::find(ns()->option->get($accountSettingsName)); + $accountType = TransactionAccount::find( ns()->option->get( $accountSettingsName ) ); } return $accountType; @@ -650,20 +650,20 @@ public function getDefinedTransactionAccount($accountSettingsName, $defaults): T * and if the previous and the new payment status are supported * the transaction will be record to the cash flow. */ - public function handlePaymentStatus(string $previous, string $new, Order $order) + public function handlePaymentStatus( string $previous, string $new, Order $order ) { - if (in_array($previous, [ + if ( in_array( $previous, [ Order::PAYMENT_HOLD, Order::PAYMENT_DUE, Order::PAYMENT_PARTIALLY, Order::PAYMENT_PARTIALLY_DUE, Order::PAYMENT_UNPAID, - ]) && in_array( + ] ) && in_array( $new, [ Order::PAYMENT_PAID, ] - )) { - $transactionAccount = $this->getTransactionAccountByCode(TransactionHistory::ACCOUNT_SALES); + ) ) { + $transactionAccount = $this->getTransactionAccountByCode( TransactionHistory::ACCOUNT_SALES ); $transaction = new Transaction; $transaction->value = $order->total; @@ -671,28 +671,28 @@ public function handlePaymentStatus(string $previous, string $new, Order $order) $transaction->operation = TransactionHistory::OPERATION_CREDIT; $transaction->author = $order->author; $transaction->order_id = $order->id; - $transaction->name = sprintf(__('Sale : %s'), $order->code); + $transaction->name = sprintf( __( 'Sale : %s' ), $order->code ); $transaction->id = 0; // this is not assigned to an existing transaction $transaction->account = $transactionAccount; - $this->recordTransactionHistory($transaction); + $this->recordTransactionHistory( $transaction ); } } /** * @deprecated ? */ - public function recomputeTransactionHistory($rangeStarts = null, $rangeEnds = null) + public function recomputeTransactionHistory( $rangeStarts = null, $rangeEnds = null ) { /** * We'll register cash flow for complete orders */ - $this->processPaidOrders($rangeStarts, $rangeEnds); - $this->processCustomerAccountHistories($rangeStarts, $rangeEnds); - $this->processTransactions($rangeStarts, $rangeEnds); - $this->processProcurements($rangeStarts, $rangeEnds); - $this->processRecurringTransactions($rangeStarts, $rangeEnds); - $this->processRefundedOrders($rangeStarts, $rangeEnds); + $this->processPaidOrders( $rangeStarts, $rangeEnds ); + $this->processCustomerAccountHistories( $rangeStarts, $rangeEnds ); + $this->processTransactions( $rangeStarts, $rangeEnds ); + $this->processProcurements( $rangeStarts, $rangeEnds ); + $this->processRecurringTransactions( $rangeStarts, $rangeEnds ); + $this->processRefundedOrders( $rangeStarts, $rangeEnds ); } /** @@ -701,46 +701,46 @@ public function recomputeTransactionHistory($rangeStarts = null, $rangeEnds = nu * * @param string $type */ - public function getTransactionAccountByCode($type): TransactionAccount + public function getTransactionAccountByCode( $type ): TransactionAccount { $account = $this->accountTypes[ $type ] ?? false; - if (! empty($account)) { + if ( ! empty( $account ) ) { /** * This will define the label */ - switch ($type) { - case TransactionHistory::ACCOUNT_CUSTOMER_CREDIT: $label = __('Customer Credit Account'); + switch ( $type ) { + case TransactionHistory::ACCOUNT_CUSTOMER_CREDIT: $label = __( 'Customer Credit Account' ); break; - case TransactionHistory::ACCOUNT_LIABILITIES: $label = __('Liabilities Account'); + case TransactionHistory::ACCOUNT_LIABILITIES: $label = __( 'Liabilities Account' ); break; - case TransactionHistory::ACCOUNT_CUSTOMER_DEBIT: $label = __('Customer Debit Account'); + case TransactionHistory::ACCOUNT_CUSTOMER_DEBIT: $label = __( 'Customer Debit Account' ); break; - case TransactionHistory::ACCOUNT_PROCUREMENTS: $label = __('Procurements Account'); + case TransactionHistory::ACCOUNT_PROCUREMENTS: $label = __( 'Procurements Account' ); break; - case TransactionHistory::ACCOUNT_REFUNDS: $label = __('Sales Refunds Account'); + case TransactionHistory::ACCOUNT_REFUNDS: $label = __( 'Sales Refunds Account' ); break; - case TransactionHistory::ACCOUNT_REGISTER_CASHIN: $label = __('Register Cash-In Account'); + case TransactionHistory::ACCOUNT_REGISTER_CASHIN: $label = __( 'Register Cash-In Account' ); break; - case TransactionHistory::ACCOUNT_REGISTER_CASHOUT: $label = __('Register Cash-Out Account'); + case TransactionHistory::ACCOUNT_REGISTER_CASHOUT: $label = __( 'Register Cash-Out Account' ); break; - case TransactionHistory::ACCOUNT_SALES: $label = __('Sales Account'); + case TransactionHistory::ACCOUNT_SALES: $label = __( 'Sales Account' ); break; - case TransactionHistory::ACCOUNT_SPOILED: $label = __('Spoiled Goods Account'); + case TransactionHistory::ACCOUNT_SPOILED: $label = __( 'Spoiled Goods Account' ); break; } - return $this->getDefinedTransactionAccount($account[ 'option' ], [ + return $this->getDefinedTransactionAccount( $account[ 'option' ], [ 'name' => $label, 'operation' => $account[ 'operation' ], 'account' => $type, - ]); + ] ); } - throw new NotFoundException(sprintf( - __('Not found account type: %s'), + throw new NotFoundException( sprintf( + __( 'Not found account type: %s' ), $type - )); + ) ); } /** @@ -748,77 +748,77 @@ public function getTransactionAccountByCode($type): TransactionAccount * * @todo the method might no longer be in use. * - * @param string $rangeStart - * @param string $rangeEnds + * @param string $rangeStart + * @param string $rangeEnds * @return void */ - public function processRefundedOrders($rangeStarts, $rangeEnds) + public function processRefundedOrders( $rangeStarts, $rangeEnds ) { - $orders = Order::where('created_at', '>=', $rangeStarts) - ->where('created_at', '<=', $rangeEnds) - ->paymentStatus(Order::PAYMENT_REFUNDED) + $orders = Order::where( 'created_at', '>=', $rangeStarts ) + ->where( 'created_at', '<=', $rangeEnds ) + ->paymentStatus( Order::PAYMENT_REFUNDED ) ->get(); - $transactionAccount = $this->getTransactionAccountByCode(TransactionHistory::ACCOUNT_REFUNDS); + $transactionAccount = $this->getTransactionAccountByCode( TransactionHistory::ACCOUNT_REFUNDS ); - $orders->each(function ($order) use ($transactionAccount) { + $orders->each( function ( $order ) use ( $transactionAccount ) { $transaction = new Transaction; $transaction->value = $order->total; $transaction->active = true; $transaction->operation = TransactionHistory::OPERATION_DEBIT; $transaction->author = $order->author; $transaction->customer_account_history_id = $order->id; - $transaction->name = sprintf(__('Refund : %s'), $order->code); + $transaction->name = sprintf( __( 'Refund : %s' ), $order->code ); $transaction->id = 0; // this is not assigned to an existing transaction $transaction->account = $transactionAccount; $transaction->created_at = $order->created_at; $transaction->updated_at = $order->updated_at; - $this->recordTransactionHistory($transaction); - }); + $this->recordTransactionHistory( $transaction ); + } ); } /** * Will process paid orders * - * @param string $rangeStart - * @param string $rangeEnds + * @param string $rangeStart + * @param string $rangeEnds * @return void */ - public function processPaidOrders($rangeStart, $rangeEnds) + public function processPaidOrders( $rangeStart, $rangeEnds ) { - $orders = Order::where('created_at', '>=', $rangeStart) - ->with('customer') - ->where('created_at', '<=', $rangeEnds) - ->paymentStatus(Order::PAYMENT_PAID) + $orders = Order::where( 'created_at', '>=', $rangeStart ) + ->with( 'customer' ) + ->where( 'created_at', '<=', $rangeEnds ) + ->paymentStatus( Order::PAYMENT_PAID ) ->get(); - $transactionAccount = $this->getTransactionAccountByCode(TransactionHistory::ACCOUNT_SALES); + $transactionAccount = $this->getTransactionAccountByCode( TransactionHistory::ACCOUNT_SALES ); - Customer::where('id', '>', 0)->update([ 'purchases_amount' => 0 ]); + Customer::where( 'id', '>', 0 )->update( [ 'purchases_amount' => 0 ] ); - $orders->each(function ($order) use ($transactionAccount) { + $orders->each( function ( $order ) use ( $transactionAccount ) { $transaction = new Transaction; $transaction->value = $order->total; $transaction->active = true; $transaction->operation = TransactionHistory::OPERATION_CREDIT; $transaction->author = $order->author; $transaction->customer_account_history_id = $order->id; - $transaction->name = sprintf(__('Sale : %s'), $order->code); + $transaction->name = sprintf( __( 'Sale : %s' ), $order->code ); $transaction->id = 0; // this is not assigned to an existing transaction $transaction->account = $transactionAccount; $transaction->created_at = $order->created_at; $transaction->updated_at = $order->updated_at; - $customer = Customer::find($order->customer_id); + $customer = Customer::find( $order->customer_id ); - if ($customer instanceof Customer) { + if ( $customer instanceof Customer ) { $customer->purchases_amount += $order->total; $customer->save(); } - $this->recordTransactionHistory($transaction); - }); + $this->recordTransactionHistory( $transaction ); + } ); } /** @@ -826,15 +826,15 @@ public function processPaidOrders($rangeStart, $rangeEnds) * * @return void */ - public function processCustomerAccountHistories($rangeStarts, $rangeEnds) + public function processCustomerAccountHistories( $rangeStarts, $rangeEnds ) { - $histories = CustomerAccountHistory::where('created_at', '>=', $rangeStarts) - ->where('created_at', '<=', $rangeEnds) + $histories = CustomerAccountHistory::where( 'created_at', '>=', $rangeStarts ) + ->where( 'created_at', '<=', $rangeEnds ) ->get(); - $histories->each(function ($history) { - $this->handleCustomerCredit($history); - }); + $histories->each( function ( $history ) { + $this->handleCustomerCredit( $history ); + } ); } /** @@ -842,13 +842,13 @@ public function processCustomerAccountHistories($rangeStarts, $rangeEnds) * * @return void */ - public function processProcurements($rangeStarts, $rangeEnds) + public function processProcurements( $rangeStarts, $rangeEnds ) { - Procurement::where('created_at', '>=', $rangeStarts) - ->where('created_at', '<=', $rangeEnds) - ->get()->each(function ($procurement) { - $this->handleProcurementTransaction($procurement); - }); + Procurement::where( 'created_at', '>=', $rangeStarts ) + ->where( 'created_at', '<=', $rangeEnds ) + ->get()->each( function ( $procurement ) { + $this->handleProcurementTransaction( $procurement ); + } ); } /** @@ -856,27 +856,27 @@ public function processProcurements($rangeStarts, $rangeEnds) * * @return void */ - public function processTransactions($rangeStarts, $rangeEnds) + public function processTransactions( $rangeStarts, $rangeEnds ) { - Transaction::where('created_at', '>=', $rangeStarts) - ->where('created_at', '<=', $rangeEnds) + Transaction::where( 'created_at', '>=', $rangeStarts ) + ->where( 'created_at', '<=', $rangeEnds ) ->notRecurring() ->get() - ->each(function ($transaction) { - $this->triggerTransaction($transaction); - }); + ->each( function ( $transaction ) { + $this->triggerTransaction( $transaction ); + } ); } - public function processRecurringTransactions($rangeStart, $rangeEnds) + public function processRecurringTransactions( $rangeStart, $rangeEnds ) { - $startDate = Carbon::parse($rangeStart); - $endDate = Carbon::parse($rangeEnds); + $startDate = Carbon::parse( $rangeStart ); + $endDate = Carbon::parse( $rangeEnds ); - if ($startDate->lessThan($endDate) && $startDate->diffInDays($endDate) >= 1) { - while ($startDate->isSameDay()) { + if ( $startDate->lessThan( $endDate ) && $startDate->diffInDays( $endDate ) >= 1 ) { + while ( $startDate->isSameDay() ) { ns()->date = $startDate; - $this->handleRecurringTransactions($startDate); + $this->handleRecurringTransactions( $startDate ); $startDate->addDay(); } @@ -889,13 +889,13 @@ public function processRecurringTransactions($rangeStart, $rangeEnds) * * @return void */ - public function handleCustomerCredit(CustomerAccountHistory $customerHistory) + public function handleCustomerCredit( CustomerAccountHistory $customerHistory ) { - if (in_array($customerHistory->operation, [ + if ( in_array( $customerHistory->operation, [ CustomerAccountHistory::OPERATION_ADD, CustomerAccountHistory::OPERATION_REFUND, - ])) { - $transactionAccount = $this->getTransactionAccountByCode(TransactionHistory::ACCOUNT_CUSTOMER_CREDIT); + ] ) ) { + $transactionAccount = $this->getTransactionAccountByCode( TransactionHistory::ACCOUNT_CUSTOMER_CREDIT ); $transaction = new Transaction; $transaction->value = $customerHistory->amount; @@ -903,19 +903,19 @@ public function handleCustomerCredit(CustomerAccountHistory $customerHistory) $transaction->operation = TransactionHistory::OPERATION_CREDIT; $transaction->author = $customerHistory->author; $transaction->customer_account_history_id = $customerHistory->id; - $transaction->name = sprintf(__('Customer Account Crediting : %s'), $customerHistory->customer->name); + $transaction->name = sprintf( __( 'Customer Account Crediting : %s' ), $customerHistory->customer->name ); $transaction->id = 0; // this is not assigned to an existing transaction $transaction->account = $transactionAccount; $transaction->created_at = $customerHistory->created_at; $transaction->updated_at = $customerHistory->updated_at; - $this->recordTransactionHistory($transaction); - } elseif (in_array( + $this->recordTransactionHistory( $transaction ); + } elseif ( in_array( $customerHistory->operation, [ CustomerAccountHistory::OPERATION_PAYMENT, ] - )) { - $transactionAccount = $this->getTransactionAccountByCode(TransactionHistory::ACCOUNT_CUSTOMER_DEBIT); + ) ) { + $transactionAccount = $this->getTransactionAccountByCode( TransactionHistory::ACCOUNT_CUSTOMER_DEBIT ); $transaction = new Transaction; $transaction->value = $customerHistory->amount; @@ -924,19 +924,19 @@ public function handleCustomerCredit(CustomerAccountHistory $customerHistory) $transaction->author = $customerHistory->author; $transaction->customer_account_history_id = $customerHistory->id; $transaction->order_id = $customerHistory->order_id; - $transaction->name = sprintf(__('Customer Account Purchase : %s'), $customerHistory->customer->name); + $transaction->name = sprintf( __( 'Customer Account Purchase : %s' ), $customerHistory->customer->name ); $transaction->id = 0; // this is not assigned to an existing transaction $transaction->account = $transactionAccount; $transaction->created_at = $customerHistory->created_at; $transaction->updated_at = $customerHistory->updated_at; - $this->recordTransactionHistory($transaction); - } elseif (in_array( + $this->recordTransactionHistory( $transaction ); + } elseif ( in_array( $customerHistory->operation, [ CustomerAccountHistory::OPERATION_DEDUCT, ] - )) { - $transactionAccount = $this->getTransactionAccountByCode(TransactionHistory::ACCOUNT_CUSTOMER_DEBIT); + ) ) { + $transactionAccount = $this->getTransactionAccountByCode( TransactionHistory::ACCOUNT_CUSTOMER_DEBIT ); $transaction = new Transaction; $transaction->value = $customerHistory->amount; @@ -944,22 +944,22 @@ public function handleCustomerCredit(CustomerAccountHistory $customerHistory) $transaction->operation = TransactionHistory::OPERATION_DEBIT; $transaction->author = $customerHistory->author; $transaction->customer_account_history_id = $customerHistory->id; - $transaction->name = sprintf(__('Customer Account Deducting : %s'), $customerHistory->customer->name); + $transaction->name = sprintf( __( 'Customer Account Deducting : %s' ), $customerHistory->customer->name ); $transaction->id = 0; // this is not assigned to an existing transaction $transaction->account = $transactionAccount; $transaction->created_at = $customerHistory->created_at; $transaction->updated_at = $customerHistory->updated_at; - $this->recordTransactionHistory($transaction); + $this->recordTransactionHistory( $transaction ); } } - public function getConfigurations(Transaction $transaction) + public function getConfigurations( Transaction $transaction ) { - $recurringFields = new ReccurringTransactionFields($transaction); - $directFields = new DirectTransactionFields($transaction); - $entityFields = new EntityTransactionFields($transaction); - $scheduledFields = new ScheduledTransactionFields($transaction); + $recurringFields = new ReccurringTransactionFields( $transaction ); + $directFields = new DirectTransactionFields( $transaction ); + $entityFields = new EntityTransactionFields( $transaction ); + $scheduledFields = new ScheduledTransactionFields( $transaction ); $asyncTransactions = []; $warningMessage = false; @@ -968,58 +968,58 @@ public function getConfigurations(Transaction $transaction) * Those features can only be enabled * if the jobs are configured correctly. */ - if (ns()->canPerformAsynchronousOperations()) { + if ( ns()->canPerformAsynchronousOperations() ) { $asyncTransactions = [ [ 'identifier' => ReccurringTransactionFields::getIdentifier(), - 'label' => __('Recurring Transaction'), - 'icon' => asset('images/recurring.png'), + 'label' => __( 'Recurring Transaction' ), + 'icon' => asset( 'images/recurring.png' ), 'fields' => $recurringFields->get(), ], [ 'identifier' => EntityTransactionFields::getIdentifier(), - 'label' => __('Entity Transaction'), - 'icon' => asset('images/salary.png'), + 'label' => __( 'Entity Transaction' ), + 'icon' => asset( 'images/salary.png' ), 'fields' => $entityFields->get(), ], [ 'identifier' => ScheduledTransactionFields::getIdentifier(), - 'label' => __('Scheduled Transaction'), - 'icon' => asset('images/schedule.png'), + 'label' => __( 'Scheduled Transaction' ), + 'icon' => asset( 'images/schedule.png' ), 'fields' => $scheduledFields->get(), ], ]; } else { $warningMessage = sprintf( - __('Some transactions are disabled as NexoPOS is not able to perform asynchronous requests.'), + __( 'Some transactions are disabled as NexoPOS is not able to perform asynchronous requests.' ), 'https://my.nexopos.com/en/documentation/troubleshooting/workers-or-async-requests-disabled' ); } - $configurations = Hook::filter('ns-transactions-configurations', [ + $configurations = Hook::filter( 'ns-transactions-configurations', [ [ 'identifier' => DirectTransactionFields::getIdentifier(), - 'label' => __('Direct Transaction'), - 'icon' => asset('images/budget.png'), + 'label' => __( 'Direct Transaction' ), + 'icon' => asset( 'images/budget.png' ), 'fields' => $directFields->get(), ], ...$asyncTransactions, - ]); + ] ); - $recurrence = Hook::filter('ns-transactions-recurrence', [ + $recurrence = Hook::filter( 'ns-transactions-recurrence', [ [ 'type' => 'select', - 'label' => __('Condition'), + 'label' => __( 'Condition' ), 'name' => 'occurrence', 'value' => $transaction->occurrence ?? '', - 'options' => Helper::kvToJsOptions([ - Transaction::OCCURRENCE_START_OF_MONTH => __('First Day Of Month'), - Transaction::OCCURRENCE_END_OF_MONTH => __('Last Day Of Month'), - Transaction::OCCURRENCE_MIDDLE_OF_MONTH => __('Month middle Of Month'), - Transaction::OCCURRENCE_X_AFTER_MONTH_STARTS => __('{day} after month starts'), - Transaction::OCCURRENCE_X_BEFORE_MONTH_ENDS => __('{day} before month ends'), - Transaction::OCCURRENCE_SPECIFIC_DAY => __('Every {day} of the month'), - ]), + 'options' => Helper::kvToJsOptions( [ + Transaction::OCCURRENCE_START_OF_MONTH => __( 'First Day Of Month' ), + Transaction::OCCURRENCE_END_OF_MONTH => __( 'Last Day Of Month' ), + Transaction::OCCURRENCE_MIDDLE_OF_MONTH => __( 'Month middle Of Month' ), + Transaction::OCCURRENCE_X_AFTER_MONTH_STARTS => __( '{day} after month starts' ), + Transaction::OCCURRENCE_X_BEFORE_MONTH_ENDS => __( '{day} before month ends' ), + Transaction::OCCURRENCE_SPECIFIC_DAY => __( 'Every {day} of the month' ), + ] ), ], [ 'type' => 'number', - 'label' => __('Days'), + 'label' => __( 'Days' ), 'name' => 'occurrence_value', 'value' => $transaction->occurrence_value ?? 0, 'shows' => [ @@ -1029,10 +1029,10 @@ public function getConfigurations(Transaction $transaction) Transaction::OCCURRENCE_SPECIFIC_DAY, ], ], - 'description' => __('Make sure set a day that is likely to be executed'), + 'description' => __( 'Make sure set a day that is likely to be executed' ), ], - ]); + ] ); - return compact('recurrence', 'configurations', 'warningMessage'); + return compact( 'recurrence', 'configurations', 'warningMessage' ); } } diff --git a/app/Services/UnitService.php b/app/Services/UnitService.php index 0d3c6188c..c7216c357 100644 --- a/app/Services/UnitService.php +++ b/app/Services/UnitService.php @@ -11,12 +11,12 @@ class UnitService { - public function __construct(public CurrencyService $currency) + public function __construct( public CurrencyService $currency ) { // ... } - public function createGroup($data) + public function createGroup( $data ) { $unitGroup = new UnitGroup; $unitGroup->name = $data[ 'name' ]; @@ -26,16 +26,16 @@ public function createGroup($data) return [ 'status' => 'success', - 'message' => __('The Unit Group has been created.'), + 'message' => __( 'The Unit Group has been created.' ), 'data' => [ 'group' => $unitGroup, ], ]; } - public function updateGroup($id, $data) + public function updateGroup( $id, $data ) { - $unitGroup = UnitGroup::findOrFail($id); + $unitGroup = UnitGroup::findOrFail( $id ); $unitGroup->name = $data[ 'name' ]; $unitGroup->description = @$data[ 'description' ] ?: ''; $unitGroup->author = Auth::id(); @@ -43,7 +43,7 @@ public function updateGroup($id, $data) return [ 'status' => 'success', - 'message' => sprintf(__('The unit group %s has been updated.'), $unitGroup->name), + 'message' => sprintf( __( 'The unit group %s has been updated.' ), $unitGroup->name ), 'data' => [ 'group' => $unitGroup, ], @@ -56,13 +56,13 @@ public function updateGroup($id, $data) * @param int group id * @return array|UnitGroup */ - public function getGroups($id = null) + public function getGroups( $id = null ) { - if ($id !== null) { - $group = UnitGroup::find($id); + if ( $id !== null ) { + $group = UnitGroup::find( $id ); - if (! $group instanceof UnitGroup) { - throw new Exception(__('Unable to find the unit group to which this unit is attached.')); + if ( ! $group instanceof UnitGroup ) { + throw new Exception( __( 'Unable to find the unit group to which this unit is attached.' ) ); } return $group; @@ -76,11 +76,11 @@ public function getGroups($id = null) * Used to retreive other units that belongs to * the same unit group and the defined unit. */ - public function getSiblingUnits(Unit $unit) + public function getSiblingUnits( Unit $unit ) { - $unit->load([ 'group.units' => function ($query) use ($unit) { - $query->whereNotIn('id', [ $unit->id ]); - }]); + $unit->load( [ 'group.units' => function ( $query ) use ( $unit ) { + $query->whereNotIn( 'id', [ $unit->id ] ); + }] ); return $unit->group->units; } @@ -91,26 +91,26 @@ public function getSiblingUnits(Unit $unit) * @param array unit array * @return array response */ - public function createUnit($data) + public function createUnit( $data ) { - $group = $this->getGroups($data[ 'group_id' ]); + $group = $this->getGroups( $data[ 'group_id' ] ); /** * Let's make sure that if the * unit is set as base unit, all * other units changes */ - if ($data[ 'base_unit' ] === true) { - $group->units->map(function ($unit) { + if ( $data[ 'base_unit' ] === true ) { + $group->units->map( function ( $unit ) { $unit->base_unit = false; $unit->save(); - }); + } ); } $unit = new Unit; $fields = $data; - foreach ($fields as $field => $value) { + foreach ( $fields as $field => $value ) { $unit->$field = $value; } @@ -119,8 +119,8 @@ public function createUnit($data) return [ 'status' => 'success', - 'message' => __('The unit has been saved.'), - 'data' => compact('unit'), + 'message' => __( 'The unit has been saved.' ), + 'data' => compact( 'unit' ), ]; } @@ -129,15 +129,15 @@ public function createUnit($data) * * @return Collection|Unit */ - public function get($id = null) + public function get( $id = null ) { - if ($id !== null) { - $unit = Unit::find($id); - if (! $unit instanceof Unit) { - throw new NotFoundException([ + if ( $id !== null ) { + $unit = Unit::find( $id ); + if ( ! $unit instanceof Unit ) { + throw new NotFoundException( [ 'status' => 'failed', - 'message' => __('Unable to find the Unit using the provided id.'), - ]); + 'message' => __( 'Unable to find the Unit using the provided id.' ), + ] ); } return $unit; @@ -153,9 +153,9 @@ public function get($id = null) * @param string * @return Unit */ - public function getUsingIdentifier($identifier) + public function getUsingIdentifier( $identifier ) { - return Unit::identifier($identifier)->first(); + return Unit::identifier( $identifier )->first(); } /** @@ -166,17 +166,17 @@ public function getUsingIdentifier($identifier) * @param array data * @return array response */ - public function updateUnit($id, $fields) + public function updateUnit( $id, $fields ) { - $unit = Unit::findOrFail($id); + $unit = Unit::findOrFail( $id ); try { - $group = $this->getGroups($fields[ 'group_id' ]); - } catch (\Exception $exception) { - throw new NotFoundException([ + $group = $this->getGroups( $fields[ 'group_id' ] ); + } catch ( \Exception $exception ) { + throw new NotFoundException( [ 'status' => 'failed', - 'message' => __('Unable to find the unit group to which this unit is attached.'), - ]); + 'message' => __( 'Unable to find the unit group to which this unit is attached.' ), + ] ); } /** @@ -184,16 +184,16 @@ public function updateUnit($id, $fields) * unit is set as base unit, all * other units changes */ - if ($fields[ 'base_unit' ] === true) { - $group->units->map(function ($unit) use ($id) { - if ($unit->id !== $id) { + if ( $fields[ 'base_unit' ] === true ) { + $group->units->map( function ( $unit ) use ( $id ) { + if ( $unit->id !== $id ) { $unit->base_unit = false; $unit->save(); } - }); + } ); } - foreach ($fields as $field => $value) { + foreach ( $fields as $field => $value ) { $unit->$field = $value; } @@ -202,8 +202,8 @@ public function updateUnit($id, $fields) return [ 'status' => 'success', - 'message' => __('The unit has been updated.'), - 'data' => compact('unit'), + 'message' => __( 'The unit has been updated.' ), + 'data' => compact( 'unit' ), ]; } @@ -214,9 +214,9 @@ public function updateUnit($id, $fields) * @param int Parent Group * @return UnitGroup */ - public function getUnitParentGroup($id) + public function getUnitParentGroup( $id ) { - $unit = Unit::findOrFail($id); + $unit = Unit::findOrFail( $id ); return $unit->group; } @@ -227,21 +227,21 @@ public function getUnitParentGroup($id) * * @return Unit */ - public function getBaseUnit(UnitGroup $group) + public function getBaseUnit( UnitGroup $group ) { - $baseUnit = UnitGroup::find($group->id) + $baseUnit = UnitGroup::find( $group->id ) ->units() ->get() - ->filter(function ($unit) { + ->filter( function ( $unit ) { return $unit->base_unit; - }); + } ); $unitCount = $baseUnit->count(); - if ($unitCount > 1) { - throw new Exception(sprintf(__('The unit group %s has more than one base unit'), $group->name)); - } elseif ($unitCount === 0) { - throw new Exception(sprintf(__('The unit group %s doesn\'t have a base unit'), $group->name)); + if ( $unitCount > 1 ) { + throw new Exception( sprintf( __( 'The unit group %s has more than one base unit' ), $group->name ) ); + } elseif ( $unitCount === 0 ) { + throw new Exception( sprintf( __( 'The unit group %s doesn\'t have a base unit' ), $group->name ) ); } return $baseUnit->first(); @@ -253,21 +253,21 @@ public function getBaseUnit(UnitGroup $group) * * @param Unit base unit */ - public function computeBaseUnit(Unit $unit, Unit $base, $quantity) + public function computeBaseUnit( Unit $unit, Unit $base, $quantity ) { - $value = $this->currency->value($base->value) - ->multiplyBy($unit->value) + $value = $this->currency->value( $base->value ) + ->multiplyBy( $unit->value ) ->get(); - return $this->currency->value($value) - ->multiplyBy($quantity) + return $this->currency->value( $value ) + ->multiplyBy( $quantity ) ->get(); } /** * Checks wether two units belongs to the same unit group. */ - public function isFromSameGroup(Unit $from, Unit $to): bool + public function isFromSameGroup( Unit $from, Unit $to ): bool { return $from->group_id === $to->group_id; } @@ -275,15 +275,15 @@ public function isFromSameGroup(Unit $from, Unit $to): bool /** * Will returns the final quantity of a converted unit. */ - public function getConvertedQuantity(Unit $from, Unit $to, float $quantity): float|int + public function getConvertedQuantity( Unit $from, Unit $to, float $quantity ): float|int { return ns()->currency->define( ns()->currency - ->define($from->value) - ->multipliedBy($quantity) + ->define( $from->value ) + ->multipliedBy( $quantity ) ->getRaw() ) - ->dividedBy($to->value) + ->dividedBy( $to->value ) ->getRaw(); } @@ -291,25 +291,25 @@ public function getConvertedQuantity(Unit $from, Unit $to, float $quantity): flo * Using the source unit, will return the purchase price * for a converted unit. */ - public function getPurchasePriceFromUnit($purchasePrice, Unit $from, Unit $to) + public function getPurchasePriceFromUnit( $purchasePrice, Unit $from, Unit $to ) { return ns()->currency->define( - ns()->currency->define($purchasePrice)->dividedBy($from->value)->toFloat() - )->multipliedBy($to->value)->getRaw(); + ns()->currency->define( $purchasePrice )->dividedBy( $from->value )->toFloat() + )->multipliedBy( $to->value )->getRaw(); } - public function deleteUnit($id) + public function deleteUnit( $id ) { /** * @todo we might check if the * unit is currently in use */ - $unit = $this->get($id); + $unit = $this->get( $id ); $unit->delete(); return [ 'status' => 'success', - 'message' => __('The unit has been deleted.'), + 'message' => __( 'The unit has been deleted.' ), ]; } } diff --git a/app/Services/UpdateService.php b/app/Services/UpdateService.php index 8d7235a87..01082a216 100644 --- a/app/Services/UpdateService.php +++ b/app/Services/UpdateService.php @@ -16,54 +16,54 @@ class UpdateService * * @param bool $ignoreMigrations */ - public function getMigrations($ignoreMigrations = false, $directories = [ 'create', 'update', 'core' ]): Collection + public function getMigrations( $ignoreMigrations = false, $directories = [ 'create', 'update', 'core' ] ): Collection { /** * in case the option ignoreMigration * is set to "true". */ - $migrations = collect([]); + $migrations = collect( [] ); - if ($ignoreMigrations === false) { - $migrations = Migration::get()->map(fn($migration) => $migration->migration); + if ( $ignoreMigrations === false ) { + $migrations = Migration::get()->map( fn( $migration ) => $migration->migration ); } - return collect($directories)->map(function ($directory) { - $files = collect(Storage::disk('ns')->allFiles('database/migrations/' . $directory)) - ->filter(fn($file) => pathinfo($file)[ 'extension' ] === 'php') - ->map(function ($file) { - $fileInfo = pathinfo($file); + return collect( $directories )->map( function ( $directory ) { + $files = collect( Storage::disk( 'ns' )->allFiles( 'database/migrations/' . $directory ) ) + ->filter( fn( $file ) => pathinfo( $file )[ 'extension' ] === 'php' ) + ->map( function ( $file ) { + $fileInfo = pathinfo( $file ); return $fileInfo[ 'filename' ]; - }); + } ); return $files; - })->flatten()->diff($migrations); + } )->flatten()->diff( $migrations ); } /** * execute a files by pulling the full path * in order to identifiy the migration type */ - public function executeMigrationFromFileName(string $file): void + public function executeMigrationFromFileName( string $file ): void { - $file = $this->getMatchingFullPath($file); - $this->executeMigration($file, 'up'); + $file = $this->getMatchingFullPath( $file ); + $this->executeMigration( $file, 'up' ); } /** * Will mark migration file as * executed while it might have not been executed */ - public function assumeExecuted(string $file) + public function assumeExecuted( string $file ) { - $file = $this->getMatchingFullPath($file); - $pathinfo = pathinfo($file); - $type = collect(explode('/', $pathinfo[ 'dirname' ]))->last(); + $file = $this->getMatchingFullPath( $file ); + $pathinfo = pathinfo( $file ); + $type = collect( explode( '/', $pathinfo[ 'dirname' ] ) )->last(); - $class = require base_path($file); + $class = require base_path( $file ); - if ($class instanceof MigrationsMigration) { + if ( $class instanceof MigrationsMigration ) { $migration = new Migration; $migration->migration = $pathinfo[ 'filename' ]; $migration->type = $type; @@ -73,30 +73,30 @@ public function assumeExecuted(string $file) return $migration; } - throw new Exception('Unsupported class provided for the migration.'); + throw new Exception( 'Unsupported class provided for the migration.' ); } - public function getMatchingFullPath($file) + public function getMatchingFullPath( $file ) { - $files = collect(Storage::disk('ns')->allFiles('database/migrations')) - ->filter(fn($file) => pathinfo($file)[ 'extension' ] === 'php') - ->mapWithKeys(function ($file) { - $fileInfo = pathinfo($file); + $files = collect( Storage::disk( 'ns' )->allFiles( 'database/migrations' ) ) + ->filter( fn( $file ) => pathinfo( $file )[ 'extension' ] === 'php' ) + ->mapWithKeys( function ( $file ) { + $fileInfo = pathinfo( $file ); return [ $fileInfo[ 'filename' ] => $file ]; - }); + } ); return $files[ $file ]; } - public function executeMigration($file, $method = 'up') + public function executeMigration( $file, $method = 'up' ) { - $pathinfo = pathinfo($file); - $type = collect(explode('/', $pathinfo[ 'dirname' ]))->last(); + $pathinfo = pathinfo( $file ); + $type = collect( explode( '/', $pathinfo[ 'dirname' ] ) )->last(); - $class = require base_path($file); + $class = require base_path( $file ); - if ($class instanceof MigrationsMigration) { + if ( $class instanceof MigrationsMigration ) { $class->$method(); $migration = new Migration; $migration->migration = $pathinfo[ 'filename' ]; @@ -107,6 +107,6 @@ public function executeMigration($file, $method = 'up') return $migration; } - throw new Exception('Unsupported class provided for the migration.'); + throw new Exception( 'Unsupported class provided for the migration.' ); } } diff --git a/app/Services/UserOptions.php b/app/Services/UserOptions.php index a4a4799b4..5230c314f 100644 --- a/app/Services/UserOptions.php +++ b/app/Services/UserOptions.php @@ -8,7 +8,7 @@ class UserOptions extends Options { protected $user_id; - public function __construct($user_id) + public function __construct( $user_id ) { $this->user_id = $user_id; parent::__construct(); @@ -16,10 +16,10 @@ public function __construct($user_id) public function option() { - return Option::where('user_id', $this->user_id); + return Option::where( 'user_id', $this->user_id ); } - public function beforeSave($option) + public function beforeSave( $option ) { $option->user_id = $this->user_id; @@ -27,7 +27,7 @@ public function beforeSave($option) * sanitizing input to remove * all script tags */ - $option->value = strip_tags($option->value); + $option->value = strip_tags( $option->value ); return $option; } diff --git a/app/Services/UsersService.php b/app/Services/UsersService.php index ff517f9b8..5ad450ac0 100644 --- a/app/Services/UsersService.php +++ b/app/Services/UsersService.php @@ -33,10 +33,10 @@ public function __construct() * @param string * @return array of users */ - public function all($namespace = null) + public function all( $namespace = null ) { - if ($namespace != null) { - return Role::namespace($namespace)->users()->get(); + if ( $namespace != null ) { + return Role::namespace( $namespace )->users()->get(); } else { return User::get(); } @@ -46,69 +46,69 @@ public function all($namespace = null) * Will either create or update an existing user * that will check the attribute or the user * - * @param array $attributes - * @param User $user + * @param array $attributes + * @param User $user * @return array $response */ - public function setUser($attributes, $user = null) + public function setUser( $attributes, $user = null ) { - $validation_required = ns()->option->get('ns_registration_validated', 'yes') === 'yes' ? true : false; - $registration_role = ns()->option->get('ns_registration_role', false); - $defaultRole = Role::namespace(Role::USER)->first(); - $assignedRole = Role::find($registration_role); + $validation_required = ns()->option->get( 'ns_registration_validated', 'yes' ) === 'yes' ? true : false; + $registration_role = ns()->option->get( 'ns_registration_role', false ); + $defaultRole = Role::namespace( Role::USER )->first(); + $assignedRole = Role::find( $registration_role ); $roleToUse = $registration_role === false ? $defaultRole : $assignedRole; - if (! $defaultRole instanceof Role) { - throw new NotFoundException(__('The system role "Users" can be retrieved.')); + if ( ! $defaultRole instanceof Role ) { + throw new NotFoundException( __( 'The system role "Users" can be retrieved.' ) ); } - if (! $assignedRole instanceof Role) { - throw new NotFoundException(__('The default role that must be assigned to new users cannot be retrieved.')); + if ( ! $assignedRole instanceof Role ) { + throw new NotFoundException( __( 'The default role that must be assigned to new users cannot be retrieved.' ) ); } - collect([ - 'username' => fn() => User::where('username', $attributes[ 'username' ]), - 'email' => fn() => User::where('email', $attributes[ 'email' ]), - ])->each(function ($callback, $key) use ($user) { + collect( [ + 'username' => fn() => User::where( 'username', $attributes[ 'username' ] ), + 'email' => fn() => User::where( 'email', $attributes[ 'email' ] ), + ] )->each( function ( $callback, $key ) use ( $user ) { $query = $callback(); - if ($user instanceof User) { - $query->where('id', '<>', $user->id); + if ( $user instanceof User ) { + $query->where( 'id', '<>', $user->id ); } $user = $query->first(); - if ($user instanceof User) { + if ( $user instanceof User ) { throw new NotAllowedException( sprintf( - __('The %s is already taken.'), + __( 'The %s is already taken.' ), $key ) ); } - }); + } ); $user = new User; $user->username = $attributes[ 'username' ]; $user->email = $attributes[ 'email' ]; - $user->active = $attributes[ 'active' ] ?? ($validation_required ? false : true); - $user->password = Hash::make($attributes[ 'password' ]); + $user->active = $attributes[ 'active' ] ?? ( $validation_required ? false : true ); + $user->password = Hash::make( $attributes[ 'password' ] ); /** * if the validation is required, we'll create an activation token * and define the activation expiration for that token. */ - if ($validation_required) { - $user->activation_token = Str::random(20); - $user->activation_expiration = now()->addMinutes(config('nexopos.authentication.activation_token_lifetime', 30)); + if ( $validation_required ) { + $user->activation_token = Str::random( 20 ); + $user->activation_expiration = now()->addMinutes( config( 'nexopos.authentication.activation_token_lifetime', 30 ) ); } /** * For additional parameters * we'll provide them. */ - foreach ($attributes as $name => $value) { - if (! in_array( + foreach ( $attributes as $name => $value ) { + if ( ! in_array( $name, [ 'username', 'id', @@ -117,7 +117,7 @@ public function setUser($attributes, $user = null) 'active', 'roles', // will be used elsewhere ] - )) { + ) ) { $user->$name = $value; } } @@ -128,13 +128,13 @@ public function setUser($attributes, $user = null) * if the role are defined we'll use them. Otherwise, we'll use * the role defined by default. */ - $this->setUserRole($user, $attributes[ 'roles' ] ?? ns()->option->get('ns_registration_role')); + $this->setUserRole( $user, $attributes[ 'roles' ] ?? ns()->option->get( 'ns_registration_role' ) ); /** * Every new user comes with attributes that * should be explicitly defined. */ - $this->createAttribute($user); + $this->createAttribute( $user ); /** * let's try to email the new user with @@ -146,34 +146,34 @@ public function setUser($attributes, $user = null) * send an email to ask the user to validate his account. * Otherwise, we'll notify him about his new account. */ - if (! $validation_required) { - Mail::to($user->email) - ->queue(new WelcomeMail($user)); + if ( ! $validation_required ) { + Mail::to( $user->email ) + ->queue( new WelcomeMail( $user ) ); } else { - Mail::to($user->email) - ->queue(new ActivateYourAccountMail($user)); + Mail::to( $user->email ) + ->queue( new ActivateYourAccountMail( $user ) ); } /** * The administrator might be aware * of the user having created their account. */ - Role::namespace('admin')->users->each(function ($admin) use ($user) { - Mail::to($admin->email) - ->queue(new UserRegisteredMail($admin, $user)); - }); - } catch (Exception $exception) { - Log::error($exception->getMessage()); + Role::namespace( 'admin' )->users->each( function ( $admin ) use ( $user ) { + Mail::to( $admin->email ) + ->queue( new UserRegisteredMail( $admin, $user ) ); + } ); + } catch ( Exception $exception ) { + Log::error( $exception->getMessage() ); } - $validation_required = ns()->option->get('ns_registration_validated', 'yes') === 'yes' ? true : false; + $validation_required = ns()->option->get( 'ns_registration_validated', 'yes' ) === 'yes' ? true : false; return [ 'status' => 'success', 'message' => ! $validation_required ? - __('Your Account has been successfully created.') : - __('Your Account has been created but requires email validation.'), - 'data' => compact('user'), + __( 'Your Account has been successfully created.' ) : + __( 'Your Account has been created but requires email validation.' ), + 'data' => compact( 'user' ), ]; } @@ -182,13 +182,13 @@ public function setUser($attributes, $user = null) * * @param array $roles */ - public function setUserRole(User $user, $roles) + public function setUserRole( User $user, $roles ) { - UserRoleRelation::where('user_id', $user->id)->delete(); + UserRoleRelation::where( 'user_id', $user->id )->delete(); - $roles = collect($roles)->unique()->toArray(); + $roles = collect( $roles )->unique()->toArray(); - foreach ($roles as $roleId) { + foreach ( $roles as $roleId ) { $relation = new UserRoleRelation; $relation->user_id = $user->id; $relation->role_id = $roleId; @@ -199,42 +199,42 @@ public function setUserRole(User $user, $roles) /** * Check if a user belongs to a group */ - public function is(string|array $group_name): bool + public function is( string|array $group_name ): bool { $roles = Auth::user() ->roles - ->map(fn($role) => $role->namespace); + ->map( fn( $role ) => $role->namespace ); - if (is_array($group_name)) { + if ( is_array( $group_name ) ) { return $roles - ->filter(fn($roleNamespace) => in_array($roleNamespace, $group_name)) + ->filter( fn( $roleNamespace ) => in_array( $roleNamespace, $group_name ) ) ->count() > 0; } else { - return in_array($group_name, $roles->toArray()); + return in_array( $group_name, $roles->toArray() ); } } /** * Clone a role assigning same permissions */ - public function cloneRole(Role $role): array + public function cloneRole( Role $role ): array { $newRole = $role->toArray(); - unset($newRole[ 'id' ]); - unset($newRole[ 'created_at' ]); - unset($newRole[ 'updated_at' ]); + unset( $newRole[ 'id' ] ); + unset( $newRole[ 'created_at' ] ); + unset( $newRole[ 'updated_at' ] ); /** * We would however like * to provide a unique name and namespace */ $name = sprintf( - __('Clone of "%s"'), + __( 'Clone of "%s"' ), $newRole[ 'name' ] ); - $namespace = Str::slug($name); + $namespace = Str::slug( $name ); $newRole[ 'name' ] = $name; $newRole[ 'namespace' ] = $namespace; @@ -243,12 +243,12 @@ public function cloneRole(Role $role): array /** * @var Role */ - $newRole = Role::create($newRole); - $newRole->addPermissions($role->permissions); + $newRole = Role::create( $newRole ); + $newRole->addPermissions( $role->permissions ); return [ 'status' => 'success', - 'message' => __('The role has been cloned.'), + 'message' => __( 'The role has been cloned.' ), ]; } @@ -257,12 +257,12 @@ public function cloneRole(Role $role): array * for the provided user if that doesn't * exist yet. */ - public function createAttribute(User $user): void + public function createAttribute( User $user ): void { - if (! $user->attribute instanceof UserAttribute) { + if ( ! $user->attribute instanceof UserAttribute ) { $userAttribute = new UserAttribute; $userAttribute->user_id = $user->id; - $userAttribute->language = ns()->option->get('ns_store_language'); + $userAttribute->language = ns()->option->get( 'ns_store_language' ); $userAttribute->save(); } } @@ -271,21 +271,21 @@ public function createAttribute(User $user): void * Stores the widgets details * on the provided area */ - public function storeWidgetsOnAreas(array $config, User $user = null): array + public function storeWidgetsOnAreas( array $config, ?User $user = null ): array { $userId = $user !== null ? $user->id : Auth::user()->id; - extract($config); + extract( $config ); /** * @var array $column */ - foreach ($column[ 'widgets' ] as $position => $columnWidget) { - $widget = UserWidget::where('identifier', $columnWidget[ 'component-name' ]) - ->where('column', $column[ 'name' ]) - ->where('user_id', $userId) + foreach ( $column[ 'widgets' ] as $position => $columnWidget ) { + $widget = UserWidget::where( 'identifier', $columnWidget[ 'component-name' ] ) + ->where( 'column', $column[ 'name' ] ) + ->where( 'user_id', $userId ) ->first(); - if (! $widget instanceof UserWidget) { + if ( ! $widget instanceof UserWidget ) { $widget = new UserWidget; } @@ -297,16 +297,16 @@ public function storeWidgetsOnAreas(array $config, User $user = null): array $widget->save(); } - $identifiers = collect($column[ 'widgets' ])->map(fn($widget) => $widget[ 'component-name' ])->toArray(); + $identifiers = collect( $column[ 'widgets' ] )->map( fn( $widget ) => $widget[ 'component-name' ] )->toArray(); - UserWidget::whereNotIn('identifier', $identifiers) - ->where('column', $column[ 'name' ]) - ->where('user_id', $userId) + UserWidget::whereNotIn( 'identifier', $identifiers ) + ->where( 'column', $column[ 'name' ] ) + ->where( 'user_id', $userId ) ->delete(); return [ 'status' => 'success', - 'message' => __('The widgets was successfully updated.'), + 'message' => __( 'The widgets was successfully updated.' ), ]; } @@ -314,9 +314,9 @@ public function storeWidgetsOnAreas(array $config, User $user = null): array * Will generate a token for either the * logged user or for the provided user */ - public function createToken($name, User $user = null): array + public function createToken( $name, ?User $user = null ): array { - if ($user === null) { + if ( $user === null ) { /** * @var User $user */ @@ -325,9 +325,9 @@ public function createToken($name, User $user = null): array return [ 'status' => 'success', - 'message' => __('The token was successfully created'), + 'message' => __( 'The token was successfully created' ), 'data' => [ - 'token' => $user->createToken($name), + 'token' => $user->createToken( $name ), ], ]; } @@ -336,32 +336,32 @@ public function createToken($name, User $user = null): array * Returns all generated token * using the provided user or the logged one. */ - public function getTokens(User $user = null): EloquentCollection + public function getTokens( ?User $user = null ): EloquentCollection { - if ($user === null) { + if ( $user === null ) { /** * @var User $user */ $user = Auth::user(); } - return $user->tokens()->orderBy('created_at', 'desc')->get(); + return $user->tokens()->orderBy( 'created_at', 'desc' )->get(); } - public function deleteToken($tokenId, User $user = null) + public function deleteToken( $tokenId, ?User $user = null ) { - if ($user === null) { + if ( $user === null ) { /** * @var User $user */ $user = Auth::user(); } - $user->tokens()->where('id', $tokenId)->delete(); + $user->tokens()->where( 'id', $tokenId )->delete(); return [ 'status' => 'success', - 'message' => __('The token has been successfully deleted.'), + 'message' => __( 'The token has been successfully deleted.' ), ]; } } diff --git a/app/Services/Validation.php b/app/Services/Validation.php index 3d90ce960..5b2fc9004 100644 --- a/app/Services/Validation.php +++ b/app/Services/Validation.php @@ -14,7 +14,7 @@ class Validation * @param string from class * @return self */ - public function from($class) + public function from( $class ) { $this->class = $class; @@ -28,20 +28,20 @@ public function from($class) * @param string method to call * @return array */ - public function extract($method, $model = null) + public function extract( $method, $model = null ) { - if (class_exists($this->class)) { + if ( class_exists( $this->class ) ) { $object = new $this->class; - $fields = $object->$method($model); - $validation = collect($fields)->mapWithKeys(function ($field) { + $fields = $object->$method( $model ); + $validation = collect( $fields )->mapWithKeys( function ( $field ) { return [ - $field->name => ! empty($field->validation) ? $field->validation : '', + $field->name => ! empty( $field->validation ) ? $field->validation : '', ]; - })->toArray(); + } )->toArray(); return $validation; } - throw new Exception(sprintf(__('unable to find this validation class %s.'), $this->class)); + throw new Exception( sprintf( __( 'unable to find this validation class %s.' ), $this->class ) ); } } diff --git a/app/Services/WidgetService.php b/app/Services/WidgetService.php index 1d6ff0d6e..b1d6672f0 100644 --- a/app/Services/WidgetService.php +++ b/app/Services/WidgetService.php @@ -54,9 +54,9 @@ class WidgetService */ protected $description; - public function __construct(private UsersService $usersService) + public function __construct( private UsersService $usersService ) { - $this->widgets = Hook::filter('ns-dashboard-widgets', [ + $this->widgets = Hook::filter( 'ns-dashboard-widgets', [ IncompleteSaleCardWidget::class, ExpenseCardWidget::class, SaleCardWidget::class, @@ -65,7 +65,7 @@ public function __construct(private UsersService $usersService) OrdersChartWidget::class, OrdersSummaryWidget::class, BestCashiersWidget::class, - ]); + ] ); } /** @@ -88,9 +88,9 @@ public function getName(): string * Return a boolean if the logged user * is allowed to see the current widget */ - public function canAccess(User $user = null): bool + public function canAccess( ?User $user = null ): bool { - return ! $this->permission ?: ($user == null ? Gate::allows($this->permission) : Gate::forUser($user)->allows($this->permission)); + return ! $this->permission ?: ( $user == null ? Gate::allows( $this->permission ) : Gate::forUser( $user )->allows( $this->permission ) ); } /** @@ -99,7 +99,7 @@ public function canAccess(User $user = null): bool */ public function getAllWidgets(): Collection { - return collect($this->widgets)->map(function ($widget) { + return collect( $this->widgets )->map( function ( $widget ) { /** * @var WidgetService $widgetInstance */ @@ -112,7 +112,7 @@ public function getAllWidgets(): Collection 'component-name' => $widgetInstance->getVueComponent(), 'canAccess' => $widgetInstance->canAccess(), ]; - }); + } ); } /** @@ -122,9 +122,9 @@ public function getAllWidgets(): Collection public function getWidgets(): Collection { return $this->getAllWidgets() - ->filter(function ($widget) { + ->filter( function ( $widget ) { return $widget->canAccess; - }); + } ); } /** @@ -149,13 +149,13 @@ public function getDescription() * Declare widgets classes that * should be registered */ - public function registerWidgets(string|array $widget): void + public function registerWidgets( string|array $widget ): void { - if (! is_array($widget)) { + if ( ! is_array( $widget ) ) { $this->widgets[] = $widget; } else { - foreach ($widget as $_widget) { - $this->registerWidgets($_widget); + foreach ( $widget as $_widget ) { + $this->registerWidgets( $_widget ); } } } @@ -163,7 +163,7 @@ public function registerWidgets(string|array $widget): void /** * Register widgets areas. */ - public function registerWidgetsArea(string $name, Closure $columns): void + public function registerWidgetsArea( string $name, Closure $columns ): void { $this->widgetAreas[ $name ] = $columns; } @@ -171,25 +171,25 @@ public function registerWidgetsArea(string $name, Closure $columns): void /** * Get the widget defined for a specifc area. */ - public function getWidgetsArea(string $name): Collection + public function getWidgetsArea( string $name ): Collection { $widgets = $this->widgetAreas[ $name ] ?? []; - if (! empty($widgets())) { - return collect($widgets())->map(function ($widget) use ($name) { - return array_merge($widget, [ + if ( ! empty( $widgets() ) ) { + return collect( $widgets() )->map( function ( $widget ) use ( $name ) { + return array_merge( $widget, [ 'parent' => $name, - ]); - }); + ] ); + } ); } - return collect([]); + return collect( [] ); } /** * Will assign the widget to the provider user. */ - public function addDefaultWidgetsToAreas(User $user): void + public function addDefaultWidgetsToAreas( User $user ): void { $areas = [ 'first-column', @@ -199,15 +199,15 @@ public function addDefaultWidgetsToAreas(User $user): void $areaWidgets = []; - $widgetClasses = collect($this->widgets)->filter(function ($class) use ($user) { - return ( new $class )->canAccess($user); - })->toArray(); + $widgetClasses = collect( $this->widgets )->filter( function ( $class ) use ( $user ) { + return ( new $class )->canAccess( $user ); + } )->toArray(); /** * This will assign all widgets * to available areas. */ - foreach ($widgetClasses as $index => $widgetClass) { + foreach ( $widgetClasses as $index => $widgetClass ) { /** * @var WidgetService $widgetInstance */ @@ -223,7 +223,7 @@ public function addDefaultWidgetsToAreas(User $user): void * We're now storing widgets to * each relevant area. */ - foreach ($areaWidgets as $areaName => $widgets) { + foreach ( $areaWidgets as $areaName => $widgets ) { $config = [ 'column' => [ 'name' => $areaName, @@ -244,21 +244,21 @@ public function addDefaultWidgetsToAreas(User $user): void public function bootWidgetsAreas(): void { $widgetArea = function () { - return collect([ 'first', 'second', 'third' ])->map(function ($column) { + return collect( [ 'first', 'second', 'third' ] )->map( function ( $column ) { $columnName = $column . '-column'; return [ 'name' => $columnName, - 'widgets' => UserWidget::where('user_id', Auth::id()) - ->where('column', $columnName) - ->orderBy('position') + 'widgets' => UserWidget::where( 'user_id', Auth::id() ) + ->where( 'column', $columnName ) + ->orderBy( 'position' ) ->get() - ->filter(fn($widget) => Gate::allows(( new $widget->class_name )->getPermission())) + ->filter( fn( $widget ) => Gate::allows( ( new $widget->class_name )->getPermission() ) ) ->values(), ]; - })->toArray(); + } )->toArray(); }; - $this->registerWidgetsArea('ns-dashboard-widgets', $widgetArea); + $this->registerWidgetsArea( 'ns-dashboard-widgets', $widgetArea ); } } diff --git a/app/Settings/AboutSettings.php b/app/Settings/AboutSettings.php index 965579ef8..be598b44b 100644 --- a/app/Settings/AboutSettings.php +++ b/app/Settings/AboutSettings.php @@ -21,29 +21,33 @@ class AboutSettings extends SettingsPage public function getView() { - return View::make('pages.dashboard.about', [ - 'title' => __('About'), - 'description' => __('Details about the environment.'), + return View::make( 'pages.dashboard.about', [ + 'title' => __( 'About' ), + 'description' => __( 'Details about the environment.' ), 'details' => [ - __('Core Version') => config('nexopos.version'), - __('Laravel Version') => app()->version(), - __('PHP Version') => phpversion(), + __( 'Core Version' ) => config( 'nexopos.version' ), + __( 'Laravel Version' ) => app()->version(), + __( 'PHP Version' ) => phpversion(), ], 'extensions' => [ - __('Mb String Enabled') => extension_loaded('mbstring'), - __('Zip Enabled') => extension_loaded('zip'), - __('Curl Enabled') => extension_loaded('curl'), - __('Math Enabled') => extension_loaded('bcmath'), - __('XML Enabled') => extension_loaded('xml'), - __('XDebug Enabled') => extension_loaded('xdebug'), + __( 'Mb String Enabled' ) => extension_loaded( 'mbstring' ), + __( 'Zip Enabled' ) => extension_loaded( 'zip' ), + __( 'Curl Enabled' ) => extension_loaded( 'curl' ), + __( 'Math Enabled' ) => extension_loaded( 'bcmath' ), + __( 'XML Enabled' ) => extension_loaded( 'xml' ), + __( 'XDebug Enabled' ) => extension_loaded( 'xdebug' ), ], 'configurations' => [ - __('File Upload Enabled') => ((bool) ini_get('file_uploads')) ? __('Yes') : __('No'), - __('File Upload Size') => ini_get('upload_max_filesize'), - __('Post Max Size') => ini_get('post_max_size'), - __('Max Execution Time') => sprintf(__('%s Second(s)'), ini_get('max_execution_time')), - __('Memory Limit') => ini_get('memory_limit'), + __( 'File Upload Enabled' ) => ( (bool) ini_get( 'file_uploads' ) ) ? __( 'Yes' ) : __( 'No' ), + __( 'File Upload Size' ) => ini_get( 'upload_max_filesize' ), + __( 'Post Max Size' ) => ini_get( 'post_max_size' ), + __( 'Max Execution Time' ) => sprintf( __( '%s Second(s)' ), ini_get( 'max_execution_time' ) ), + __( 'Memory Limit' ) => ini_get( 'memory_limit' ), ], - ]); + 'developpers' => [ + __( 'User' ) => exec( 'whoami' ), + __( 'Path' ) => base_path(), + ], + ] ); } } diff --git a/app/Settings/AccountingSettings.php b/app/Settings/AccountingSettings.php index b5f5d1a4a..a72bd2479 100644 --- a/app/Settings/AccountingSettings.php +++ b/app/Settings/AccountingSettings.php @@ -13,10 +13,10 @@ class AccountingSettings extends SettingsPage public function __construct() { $this->form = [ - 'title' => __('Accounting'), - 'description' => __('Configure the accounting feature'), + 'title' => __( 'Accounting' ), + 'description' => __( 'Configure the accounting feature' ), 'tabs' => [ - 'general' => include(dirname(__FILE__) . '/accounting/general.php'), + 'general' => include ( dirname( __FILE__ ) . '/accounting/general.php' ), ], ]; } diff --git a/app/Settings/CustomersSettings.php b/app/Settings/CustomersSettings.php index 9d028f75c..63d2fdbdd 100644 --- a/app/Settings/CustomersSettings.php +++ b/app/Settings/CustomersSettings.php @@ -13,13 +13,13 @@ class CustomersSettings extends SettingsPage public function __construct() { - $options = app()->make(Options::class); + $options = app()->make( Options::class ); $this->form = [ - 'title' => __('Customers Settings'), - 'description' => __('Configure the customers settings of the application.'), + 'title' => __( 'Customers Settings' ), + 'description' => __( 'Configure the customers settings of the application.' ), 'tabs' => [ - 'general' => include(dirname(__FILE__) . '/customers/general.php'), + 'general' => include ( dirname( __FILE__ ) . '/customers/general.php' ), ], ]; } diff --git a/app/Settings/GeneralSettings.php b/app/Settings/GeneralSettings.php index ffbe81ad5..4a28ccbfc 100644 --- a/app/Settings/GeneralSettings.php +++ b/app/Settings/GeneralSettings.php @@ -16,250 +16,250 @@ class GeneralSettings extends SettingsPage public function __construct() { $this->form = [ - 'title' => __('General Settings'), - 'description' => __('Configure the general settings of the application.'), + 'title' => __( 'General Settings' ), + 'description' => __( 'Configure the general settings of the application.' ), 'tabs' => [ 'identification' => [ - 'label' => __('Identification'), + 'label' => __( 'Identification' ), 'fields' => [ [ 'name' => 'ns_store_name', - 'value' => ns()->option->get('ns_store_name'), - 'label' => __('Store Name'), + 'value' => ns()->option->get( 'ns_store_name' ), + 'label' => __( 'Store Name' ), 'type' => 'text', - 'description' => __('This is the store name.'), + 'description' => __( 'This is the store name.' ), 'validation' => 'required', ], [ 'name' => 'ns_store_address', - 'value' => ns()->option->get('ns_store_address'), - 'label' => __('Store Address'), + 'value' => ns()->option->get( 'ns_store_address' ), + 'label' => __( 'Store Address' ), 'type' => 'text', - 'description' => __('The actual store address.'), + 'description' => __( 'The actual store address.' ), ], [ 'name' => 'ns_store_city', - 'value' => ns()->option->get('ns_store_city'), - 'label' => __('Store City'), + 'value' => ns()->option->get( 'ns_store_city' ), + 'label' => __( 'Store City' ), 'type' => 'text', - 'description' => __('The actual store city.'), + 'description' => __( 'The actual store city.' ), ], [ 'name' => 'ns_store_phone', - 'value' => ns()->option->get('ns_store_phone'), - 'label' => __('Store Phone'), + 'value' => ns()->option->get( 'ns_store_phone' ), + 'label' => __( 'Store Phone' ), 'type' => 'text', - 'description' => __('The phone number to reach the store.'), + 'description' => __( 'The phone number to reach the store.' ), ], [ 'name' => 'ns_store_email', - 'value' => ns()->option->get('ns_store_email'), - 'label' => __('Store Email'), + 'value' => ns()->option->get( 'ns_store_email' ), + 'label' => __( 'Store Email' ), 'type' => 'text', - 'description' => __('The actual store email. Might be used on invoice or for reports.'), + 'description' => __( 'The actual store email. Might be used on invoice or for reports.' ), ], [ 'name' => 'ns_store_pobox', - 'value' => ns()->option->get('ns_store_pobox'), - 'label' => __('Store PO.Box'), + 'value' => ns()->option->get( 'ns_store_pobox' ), + 'label' => __( 'Store PO.Box' ), 'type' => 'text', - 'description' => __('The store mail box number.'), + 'description' => __( 'The store mail box number.' ), ], [ 'name' => 'ns_store_fax', - 'value' => ns()->option->get('ns_store_fax'), - 'label' => __('Store Fax'), + 'value' => ns()->option->get( 'ns_store_fax' ), + 'label' => __( 'Store Fax' ), 'type' => 'text', - 'description' => __('The store fax number.'), + 'description' => __( 'The store fax number.' ), ], [ 'name' => 'ns_store_additional', - 'value' => ns()->option->get('ns_store_additional'), - 'label' => __('Store Additional Information'), + 'value' => ns()->option->get( 'ns_store_additional' ), + 'label' => __( 'Store Additional Information' ), 'type' => 'textarea', - 'description' => __('Store additional information.'), + 'description' => __( 'Store additional information.' ), ], [ 'name' => 'ns_store_square_logo', - 'value' => ns()->option->get('ns_store_square_logo'), - 'label' => __('Store Square Logo'), + 'value' => ns()->option->get( 'ns_store_square_logo' ), + 'label' => __( 'Store Square Logo' ), 'type' => 'media', - 'description' => __('Choose what is the square logo of the store.'), + 'description' => __( 'Choose what is the square logo of the store.' ), ], [ 'name' => 'ns_store_rectangle_logo', - 'value' => ns()->option->get('ns_store_rectangle_logo'), - 'label' => __('Store Rectangle Logo'), + 'value' => ns()->option->get( 'ns_store_rectangle_logo' ), + 'label' => __( 'Store Rectangle Logo' ), 'type' => 'media', - 'description' => __('Choose what is the rectangle logo of the store.'), + 'description' => __( 'Choose what is the rectangle logo of the store.' ), ], [ 'name' => 'ns_store_language', - 'value' => ns()->option->get('ns_store_language'), - 'options' => Helper::kvToJsOptions(config('nexopos.languages')), - 'label' => __('Language'), + 'value' => ns()->option->get( 'ns_store_language' ), + 'options' => Helper::kvToJsOptions( config( 'nexopos.languages' ) ), + 'label' => __( 'Language' ), 'type' => 'select', - 'description' => __('Define the default fallback language.'), + 'description' => __( 'Define the default fallback language.' ), ], [ 'name' => 'ns_default_theme', - 'value' => ns()->option->get('ns_default_theme'), - 'options' => Helper::kvToJsOptions([ - 'dark' => __('Dark'), - 'light' => __('Light'), - ]), - 'label' => __('Theme'), + 'value' => ns()->option->get( 'ns_default_theme' ), + 'options' => Helper::kvToJsOptions( [ + 'dark' => __( 'Dark' ), + 'light' => __( 'Light' ), + ] ), + 'label' => __( 'Theme' ), 'type' => 'select', - 'description' => __('Define the default theme.'), + 'description' => __( 'Define the default theme.' ), ], ], ], 'currency' => [ - 'label' => __('Currency'), + 'label' => __( 'Currency' ), 'fields' => [ [ 'name' => 'ns_currency_symbol', - 'value' => ns()->option->get('ns_currency_symbol'), - 'label' => __('Currency Symbol'), + 'value' => ns()->option->get( 'ns_currency_symbol' ), + 'label' => __( 'Currency Symbol' ), 'type' => 'text', - 'description' => __('This is the currency symbol.'), + 'description' => __( 'This is the currency symbol.' ), 'validation' => 'required', ], [ 'name' => 'ns_currency_iso', - 'value' => ns()->option->get('ns_currency_iso'), - 'label' => __('Currency ISO'), + 'value' => ns()->option->get( 'ns_currency_iso' ), + 'label' => __( 'Currency ISO' ), 'type' => 'text', - 'description' => __('The international currency ISO format.'), + 'description' => __( 'The international currency ISO format.' ), 'validation' => 'required', ], [ 'name' => 'ns_currency_position', - 'value' => ns()->option->get('ns_currency_position'), - 'label' => __('Currency Position'), + 'value' => ns()->option->get( 'ns_currency_position' ), + 'label' => __( 'Currency Position' ), 'type' => 'select', 'options' => [ [ - 'label' => __('Before the amount'), + 'label' => __( 'Before the amount' ), 'value' => 'before', ], [ - 'label' => __('After the amount'), + 'label' => __( 'After the amount' ), 'value' => 'after', ], ], - 'description' => __('Define where the currency should be located.'), + 'description' => __( 'Define where the currency should be located.' ), ], [ 'name' => 'ns_currency_prefered', - 'value' => ns()->option->get('ns_currency_prefered'), - 'label' => __('Preferred Currency'), + 'value' => ns()->option->get( 'ns_currency_prefered' ), + 'label' => __( 'Preferred Currency' ), 'type' => 'select', 'options' => [ [ - 'label' => __('ISO Currency'), + 'label' => __( 'ISO Currency' ), 'value' => 'iso', ], [ - 'label' => __('Symbol'), + 'label' => __( 'Symbol' ), 'value' => 'symbol', ], ], - 'description' => __('Determine what is the currency indicator that should be used.'), + 'description' => __( 'Determine what is the currency indicator that should be used.' ), ], [ 'name' => 'ns_currency_thousand_separator', - 'value' => ns()->option->get('ns_currency_thousand_separator'), - 'label' => __('Currency Thousand Separator'), + 'value' => ns()->option->get( 'ns_currency_thousand_separator' ), + 'label' => __( 'Currency Thousand Separator' ), 'type' => 'text', - 'description' => __('Define the symbol that indicate thousand. By default "," is used.'), + 'description' => __( 'Define the symbol that indicate thousand. By default "," is used.' ), ], [ 'name' => 'ns_currency_decimal_separator', - 'value' => ns()->option->get('ns_currency_decimal_separator'), - 'label' => __('Currency Decimal Separator'), + 'value' => ns()->option->get( 'ns_currency_decimal_separator' ), + 'label' => __( 'Currency Decimal Separator' ), 'type' => 'text', - 'description' => __('Define the symbol that indicate decimal number. By default "." is used.'), + 'description' => __( 'Define the symbol that indicate decimal number. By default "." is used.' ), ], [ 'name' => 'ns_currency_precision', - 'value' => ns()->option->get('ns_currency_precision', '0'), - 'label' => __('Currency Precision'), + 'value' => ns()->option->get( 'ns_currency_precision', '0' ), + 'label' => __( 'Currency Precision' ), 'type' => 'select', - 'options' => collect([0, 1, 2, 3, 4, 5])->map(function ($index) { + 'options' => collect( [0, 1, 2, 3, 4, 5] )->map( function ( $index ) { return [ - 'label' => sprintf(__('%s numbers after the decimal'), $index), + 'label' => sprintf( __( '%s numbers after the decimal' ), $index ), 'value' => $index, ]; - })->toArray(), - 'description' => __('Define where the currency should be located.'), + } )->toArray(), + 'description' => __( 'Define where the currency should be located.' ), ], ], ], 'date' => [ - 'label' => __('Date'), + 'label' => __( 'Date' ), 'fields' => [ [ - 'label' => __('Date Format'), + 'label' => __( 'Date Format' ), 'name' => 'ns_date_format', - 'value' => ns()->option->get('ns_date_format'), + 'value' => ns()->option->get( 'ns_date_format' ), 'type' => 'select', - 'options' => Helper::kvToJsOptions([ - 'Y-m-d' => ns()->date->format('Y-m-d'), - 'Y/m/d' => ns()->date->format('Y/m/d'), - 'd-m-y' => ns()->date->format('d-m-Y'), - 'd/m/y' => ns()->date->format('d/m/Y'), - 'M dS, Y' => ns()->date->format('M dS, Y'), - 'd M Y' => ns()->date->format('d M Y'), - 'd.m.Y' => ns()->date->format('d.m.Y'), - ]), - 'description' => __('This define how the date should be defined. The default format is "Y-m-d".'), + 'options' => Helper::kvToJsOptions( [ + 'Y-m-d' => ns()->date->format( 'Y-m-d' ), + 'Y/m/d' => ns()->date->format( 'Y/m/d' ), + 'd-m-y' => ns()->date->format( 'd-m-Y' ), + 'd/m/y' => ns()->date->format( 'd/m/Y' ), + 'M dS, Y' => ns()->date->format( 'M dS, Y' ), + 'd M Y' => ns()->date->format( 'd M Y' ), + 'd.m.Y' => ns()->date->format( 'd.m.Y' ), + ] ), + 'description' => __( 'This define how the date should be defined. The default format is "Y-m-d".' ), ], [ - 'label' => __('Date Time Format'), + 'label' => __( 'Date Time Format' ), 'name' => 'ns_datetime_format', - 'value' => ns()->option->get('ns_datetime_format'), + 'value' => ns()->option->get( 'ns_datetime_format' ), 'type' => 'select', - 'options' => Helper::kvToJsOptions([ - 'Y-m-d H:i' => ns()->date->format('Y-m-d H:i'), - 'Y/m/d H:i' => ns()->date->format('Y/m/d H:i'), - 'd-m-y H:i' => ns()->date->format('d-m-Y H:i'), - 'd/m/y H:i' => ns()->date->format('d/m/Y H:i'), - 'M dS, Y H:i' => ns()->date->format('M dS, Y H:i'), - 'd M Y, H:i' => ns()->date->format('d M Y, H:i'), - 'd.m.Y, H:i' => ns()->date->format('d.m.Y, H:i'), - ]), - 'description' => __('This define how the date and times hould be formated. The default format is "Y-m-d H:i".'), + 'options' => Helper::kvToJsOptions( [ + 'Y-m-d H:i' => ns()->date->format( 'Y-m-d H:i' ), + 'Y/m/d H:i' => ns()->date->format( 'Y/m/d H:i' ), + 'd-m-y H:i' => ns()->date->format( 'd-m-Y H:i' ), + 'd/m/y H:i' => ns()->date->format( 'd/m/Y H:i' ), + 'M dS, Y H:i' => ns()->date->format( 'M dS, Y H:i' ), + 'd M Y, H:i' => ns()->date->format( 'd M Y, H:i' ), + 'd.m.Y, H:i' => ns()->date->format( 'd.m.Y, H:i' ), + ] ), + 'description' => __( 'This define how the date and times hould be formated. The default format is "Y-m-d H:i".' ), ], [ - 'label' => sprintf(__('Date TimeZone')), + 'label' => sprintf( __( 'Date TimeZone' ) ), 'name' => 'ns_datetime_timezone', - 'value' => ns()->option->get('ns_datetime_timezone'), + 'value' => ns()->option->get( 'ns_datetime_timezone' ), 'type' => 'search-select', - 'options' => Helper::kvToJsOptions(config('nexopos.timezones')), - 'description' => sprintf(__('Determine the default timezone of the store. Current Time: %s'), ns()->date->getNowFormatted()), + 'options' => Helper::kvToJsOptions( config( 'nexopos.timezones' ) ), + 'description' => sprintf( __( 'Determine the default timezone of the store. Current Time: %s' ), ns()->date->getNowFormatted() ), ], ], ], 'registration' => [ - 'label' => __('Registration'), + 'label' => __( 'Registration' ), 'fields' => [ [ 'name' => 'ns_registration_enabled', - 'value' => ns()->option->get('ns_registration_enabled'), - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'label' => __('Registration Open'), + 'value' => ns()->option->get( 'ns_registration_enabled' ), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'label' => __( 'Registration Open' ), 'type' => 'select', - 'description' => __('Determine if everyone can register.'), + 'description' => __( 'Determine if everyone can register.' ), ], [ 'name' => 'ns_registration_role', - 'value' => ns()->option->get('ns_registration_role'), - 'options' => Helper::toJsOptions(Hook::filter('ns-registration-roles', Role::get()), [ 'id', 'name' ]), - 'label' => __('Registration Role'), + 'value' => ns()->option->get( 'ns_registration_role' ), + 'options' => Helper::toJsOptions( Hook::filter( 'ns-registration-roles', Role::get() ), [ 'id', 'name' ] ), + 'label' => __( 'Registration Role' ), 'type' => 'select', - 'description' => __('Select what is the registration role.'), + 'description' => __( 'Select what is the registration role.' ), ], [ 'name' => 'ns_registration_validated', - 'value' => ns()->option->get('ns_registration_validated'), - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'label' => __('Requires Validation'), + 'value' => ns()->option->get( 'ns_registration_validated' ), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'label' => __( 'Requires Validation' ), 'type' => 'select', - 'description' => __('Force account validation after the registration.'), + 'description' => __( 'Force account validation after the registration.' ), ], [ 'name' => 'ns_recovery_enabled', - 'value' => ns()->option->get('ns_recovery_enabled'), - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'label' => __('Allow Recovery'), + 'value' => ns()->option->get( 'ns_recovery_enabled' ), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'label' => __( 'Allow Recovery' ), 'type' => 'switch', - 'description' => __('Allow any user to recover his account.'), + 'description' => __( 'Allow any user to recover his account.' ), ], ], ], diff --git a/app/Settings/InvoiceSettings.php b/app/Settings/InvoiceSettings.php index a9720d1c0..8aef1d010 100644 --- a/app/Settings/InvoiceSettings.php +++ b/app/Settings/InvoiceSettings.php @@ -13,10 +13,10 @@ class InvoiceSettings extends SettingsPage public function __construct() { $this->form = [ - 'title' => __('Invoice Settings'), - 'description' => __('Configure how invoice and receipts are used.'), + 'title' => __( 'Invoice Settings' ), + 'description' => __( 'Configure how invoice and receipts are used.' ), 'tabs' => [ - 'receipts' => include(dirname(__FILE__) . '/invoice-settings/receipts.php'), + 'receipts' => include ( dirname( __FILE__ ) . '/invoice-settings/receipts.php' ), ], ]; } diff --git a/app/Settings/OrdersSettings.php b/app/Settings/OrdersSettings.php index 3595ac992..ebdd0ef86 100644 --- a/app/Settings/OrdersSettings.php +++ b/app/Settings/OrdersSettings.php @@ -13,13 +13,13 @@ class OrdersSettings extends SettingsPage public function __construct() { - $options = app()->make(Options::class); + $options = app()->make( Options::class ); $this->form = [ - 'title' => __('Orders Settings'), - 'description' => __('configure settings that applies to orders.'), + 'title' => __( 'Orders Settings' ), + 'description' => __( 'configure settings that applies to orders.' ), 'tabs' => [ - 'layout' => include(dirname(__FILE__) . '/orders/general.php'), + 'layout' => include ( dirname( __FILE__ ) . '/orders/general.php' ), ], ]; } diff --git a/app/Settings/PosSettings.php b/app/Settings/PosSettings.php index 19cb07715..3bf78ace5 100644 --- a/app/Settings/PosSettings.php +++ b/app/Settings/PosSettings.php @@ -15,19 +15,19 @@ class PosSettings extends SettingsPage public function __construct() { - $posSettingsTabs = Hook::filter('ns-pos-settings-tabs', [ - 'layout' => include(dirname(__FILE__) . '/pos/layout.php'), - 'printing' => include(dirname(__FILE__) . '/pos/printing.php'), - 'registers' => include(dirname(__FILE__) . '/pos/registers.php'), - 'vat' => include(dirname(__FILE__) . '/pos/vat.php'), - 'shortcuts' => include(dirname(__FILE__) . '/pos/shortcuts.php'), - 'features' => include(dirname(__FILE__) . '/pos/features.php'), - ]); + $posSettingsTabs = Hook::filter( 'ns-pos-settings-tabs', [ + 'layout' => include ( dirname( __FILE__ ) . '/pos/layout.php' ), + 'printing' => include ( dirname( __FILE__ ) . '/pos/printing.php' ), + 'registers' => include ( dirname( __FILE__ ) . '/pos/registers.php' ), + 'vat' => include ( dirname( __FILE__ ) . '/pos/vat.php' ), + 'shortcuts' => include ( dirname( __FILE__ ) . '/pos/shortcuts.php' ), + 'features' => include ( dirname( __FILE__ ) . '/pos/features.php' ), + ] ); $this->form = [ 'tabs' => $posSettingsTabs, - 'title' => __('POS Settings'), - 'description' => __('Configure the pos settings.'), + 'title' => __( 'POS Settings' ), + 'description' => __( 'Configure the pos settings.' ), ]; } } diff --git a/app/Settings/ReportsSettings.php b/app/Settings/ReportsSettings.php index cc3d07451..d7395f47c 100644 --- a/app/Settings/ReportsSettings.php +++ b/app/Settings/ReportsSettings.php @@ -13,10 +13,10 @@ class ReportsSettings extends SettingsPage public function __construct() { $this->form = [ - 'title' => __('Report Settings'), - 'description' => __('Configure the settings'), + 'title' => __( 'Report Settings' ), + 'description' => __( 'Configure the settings' ), 'tabs' => [ - 'general' => include(dirname(__FILE__) . '/reports/general.php'), + 'general' => include ( dirname( __FILE__ ) . '/reports/general.php' ), ], ]; } diff --git a/app/Settings/ResetSettings.php b/app/Settings/ResetSettings.php index b8c0c2d33..bd313e4ba 100644 --- a/app/Settings/ResetSettings.php +++ b/app/Settings/ResetSettings.php @@ -18,34 +18,34 @@ class ResetSettings extends SettingsPage public function __construct() { $this->form = [ - 'title' => __('Reset'), - 'description' => __('Wipes and Reset the database.'), + 'title' => __( 'Reset' ), + 'description' => __( 'Wipes and Reset the database.' ), 'tabs' => [ 'reset' => [ - 'label' => __('Reset'), + 'label' => __( 'Reset' ), 'fields' => [ [ 'name' => 'mode', - 'label' => __('Mode'), + 'label' => __( 'Mode' ), 'validation' => 'required', 'type' => 'select', - 'options' => Helper::kvToJsOptions(Hook::filter('ns-reset-options', [ - 'wipe_all' => __('Wipe All'), - 'wipe_plus_grocery' => __('Wipe Plus Grocery'), - ])), - 'description' => __('Choose what mode applies to this demo.'), + 'options' => Helper::kvToJsOptions( Hook::filter( 'ns-reset-options', [ + 'wipe_all' => __( 'Wipe All' ), + 'wipe_plus_grocery' => __( 'Wipe Plus Grocery' ), + ] ) ), + 'description' => __( 'Choose what mode applies to this demo.' ), ], [ 'name' => 'create_sales', - 'label' => __('Create Sales (needs Procurements)'), + 'label' => __( 'Create Sales (needs Procurements)' ), 'type' => 'checkbox', 'value' => 1, - 'description' => __('Set if the sales should be created.'), + 'description' => __( 'Set if the sales should be created.' ), ], [ 'name' => 'create_procurements', - 'label' => __('Create Procurements'), + 'label' => __( 'Create Procurements' ), 'type' => 'checkbox', 'value' => 1, - 'description' => __('Will create procurements.'), + 'description' => __( 'Will create procurements.' ), ], ], ], @@ -55,6 +55,6 @@ public function __construct() public function beforeRenderForm() { - Hook::addAction('ns-dashboard-footer', fn(Output $output) => $output->addView('pages.dashboard.settings.reset-footer')); + Hook::addAction( 'ns-dashboard-footer', fn( Output $output ) => $output->addView( 'pages.dashboard.settings.reset-footer' ) ); } } diff --git a/app/Settings/SuppliesDeliveriesSettings.php b/app/Settings/SuppliesDeliveriesSettings.php index defe702e5..0a06158b1 100644 --- a/app/Settings/SuppliesDeliveriesSettings.php +++ b/app/Settings/SuppliesDeliveriesSettings.php @@ -13,10 +13,10 @@ class SuppliesDeliveriesSettings extends SettingsPage public function __construct() { $this->form = [ - 'title' => __('Supply Delivery'), - 'description' => __('Configure the delivery feature.'), + 'title' => __( 'Supply Delivery' ), + 'description' => __( 'Configure the delivery feature.' ), 'tabs' => [ - 'layout' => include(dirname(__FILE__) . '/supplies-deliveries/general.php'), + 'layout' => include ( dirname( __FILE__ ) . '/supplies-deliveries/general.php' ), ], ]; } diff --git a/app/Settings/WorkersSettings.php b/app/Settings/WorkersSettings.php index f7d696ea1..a83985c2b 100644 --- a/app/Settings/WorkersSettings.php +++ b/app/Settings/WorkersSettings.php @@ -13,13 +13,13 @@ class WorkersSettings extends SettingsPage public function __construct() { - $options = app()->make(Options::class); + $options = app()->make( Options::class ); $this->form = [ - 'title' => __('Workers Settings'), - 'description' => __('Configure how background operations works.'), + 'title' => __( 'Workers Settings' ), + 'description' => __( 'Configure how background operations works.' ), 'tabs' => [ - 'general' => include(dirname(__FILE__) . '/workers/general.php'), + 'general' => include ( dirname( __FILE__ ) . '/workers/general.php' ), ], ]; } diff --git a/app/Settings/accounting/general.php b/app/Settings/accounting/general.php index defe9333c..282005d10 100644 --- a/app/Settings/accounting/general.php +++ b/app/Settings/accounting/general.php @@ -7,79 +7,79 @@ $transactions = TransactionAccount::get(); return [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ - 'label' => __('Procurement Cash Flow Account'), + 'label' => __( 'Procurement Cash Flow Account' ), 'name' => 'ns_procurement_cashflow_account', - 'value' => ns()->option->get('ns_procurement_cashflow_account'), - 'description' => __('Every procurement will be added to the selected transaction account'), + 'value' => ns()->option->get( 'ns_procurement_cashflow_account' ), + 'description' => __( 'Every procurement will be added to the selected transaction account' ), 'component' => 'nsCrudForm', 'props' => TransactionAccountCrud::getFormConfig(), - 'options' => Helper::toJsOptions($transactions, [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( $transactions, [ 'id', 'name' ] ), 'type' => 'search-select', ], [ - 'label' => __('Sale Cash Flow Account'), + 'label' => __( 'Sale Cash Flow Account' ), 'name' => 'ns_sales_cashflow_account', - 'value' => ns()->option->get('ns_sales_cashflow_account'), - 'description' => __('Every sales will be added to the selected transaction account'), + 'value' => ns()->option->get( 'ns_sales_cashflow_account' ), + 'description' => __( 'Every sales will be added to the selected transaction account' ), 'component' => 'nsCrudForm', 'props' => TransactionAccountCrud::getFormConfig(), - 'options' => Helper::toJsOptions($transactions, [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( $transactions, [ 'id', 'name' ] ), 'type' => 'search-select', ], [ - 'label' => __('Customer Credit Account (crediting)'), + 'label' => __( 'Customer Credit Account (crediting)' ), 'name' => 'ns_customer_crediting_cashflow_account', - 'value' => ns()->option->get('ns_customer_crediting_cashflow_account'), - 'description' => __('Every customer credit will be added to the selected transaction account'), + 'value' => ns()->option->get( 'ns_customer_crediting_cashflow_account' ), + 'description' => __( 'Every customer credit will be added to the selected transaction account' ), 'component' => 'nsCrudForm', 'props' => TransactionAccountCrud::getFormConfig(), - 'options' => Helper::toJsOptions($transactions, [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( $transactions, [ 'id', 'name' ] ), 'type' => 'search-select', ], [ - 'label' => __('Customer Credit Account (debitting)'), + 'label' => __( 'Customer Credit Account (debitting)' ), 'name' => 'ns_customer_debitting_cashflow_account', - 'value' => ns()->option->get('ns_customer_debitting_cashflow_account'), - 'description' => __('Every customer credit removed will be added to the selected transaction account'), + 'value' => ns()->option->get( 'ns_customer_debitting_cashflow_account' ), + 'description' => __( 'Every customer credit removed will be added to the selected transaction account' ), 'component' => 'nsCrudForm', 'props' => TransactionAccountCrud::getFormConfig(), - 'options' => Helper::toJsOptions($transactions, [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( $transactions, [ 'id', 'name' ] ), 'type' => 'search-select', ], [ - 'label' => __('Sales Refunds Account'), + 'label' => __( 'Sales Refunds Account' ), 'name' => 'ns_sales_refunds_account', - 'value' => ns()->option->get('ns_sales_refunds_account'), - 'description' => __('Sales refunds will be attached to this transaction account'), + 'value' => ns()->option->get( 'ns_sales_refunds_account' ), + 'description' => __( 'Sales refunds will be attached to this transaction account' ), 'component' => 'nsCrudForm', 'props' => TransactionAccountCrud::getFormConfig(), - 'options' => Helper::toJsOptions($transactions, [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( $transactions, [ 'id', 'name' ] ), 'type' => 'search-select', ], [ - 'label' => __('Stock Return Account (Spoiled Items)'), + 'label' => __( 'Stock Return Account (Spoiled Items)' ), 'name' => 'ns_stock_return_spoiled_account', - 'value' => ns()->option->get('ns_stock_return_spoiled_account'), - 'description' => __('Stock return for spoiled items will be attached to this account'), + 'value' => ns()->option->get( 'ns_stock_return_spoiled_account' ), + 'description' => __( 'Stock return for spoiled items will be attached to this account' ), 'component' => 'nsCrudForm', 'props' => TransactionAccountCrud::getFormConfig(), - 'options' => Helper::toJsOptions($transactions, [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( $transactions, [ 'id', 'name' ] ), 'type' => 'search-select', ], [ - 'label' => __('Disbursement (cash register)'), + 'label' => __( 'Disbursement (cash register)' ), 'name' => 'ns_disbursement_cash_register_account', - 'value' => ns()->option->get('ns_disbursement_cash_register_account'), + 'value' => ns()->option->get( 'ns_disbursement_cash_register_account' ), 'component' => 'nsCrudForm', 'props' => TransactionAccountCrud::getFormConfig(), - 'description' => __('Transaction account for all cash disbursement.'), - 'options' => Helper::toJsOptions($transactions, [ 'id', 'name' ]), + 'description' => __( 'Transaction account for all cash disbursement.' ), + 'options' => Helper::toJsOptions( $transactions, [ 'id', 'name' ] ), 'type' => 'search-select', ], [ - 'label' => __('Liabilities'), + 'label' => __( 'Liabilities' ), 'name' => 'ns_liabilities_account', - 'value' => ns()->option->get('ns_liabilities_account'), - 'description' => __('Transaction account for all liabilities.'), + 'value' => ns()->option->get( 'ns_liabilities_account' ), + 'description' => __( 'Transaction account for all liabilities.' ), 'component' => 'nsCrudForm', 'props' => TransactionAccountCrud::getFormConfig(), - 'options' => Helper::toJsOptions($transactions, [ 'id', 'name' ]), + 'options' => Helper::toJsOptions( $transactions, [ 'id', 'name' ] ), 'type' => 'search-select', ], ], diff --git a/app/Settings/customers/general.php b/app/Settings/customers/general.php index 1030b08b1..3e3082d08 100644 --- a/app/Settings/customers/general.php +++ b/app/Settings/customers/general.php @@ -5,62 +5,62 @@ use App\Services\Helper; return [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'select', - 'label' => __('Enable Reward'), - 'description' => __('Will activate the reward system for the customers.'), + 'label' => __( 'Enable Reward' ), + 'description' => __( 'Will activate the reward system for the customers.' ), 'name' => 'ns_customers_rewards_enabled', - 'value' => ns()->option->get('ns_customers_rewards_enabled', 'no'), - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), + 'value' => ns()->option->get( 'ns_customers_rewards_enabled', 'no' ), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), ], [ 'type' => 'select', - 'label' => __('Require Valid Email'), - 'description' => __('Will for valid unique email for every customer.'), + 'label' => __( 'Require Valid Email' ), + 'description' => __( 'Will for valid unique email for every customer.' ), 'name' => 'ns_customers_force_valid_email', - 'value' => ns()->option->get('ns_customers_force_valid_email', 'no'), - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), + 'value' => ns()->option->get( 'ns_customers_force_valid_email', 'no' ), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), ], [ 'type' => 'select', - 'label' => __('Require Unique Phone'), - 'description' => __('Every customer should have a unique phone number.'), + 'label' => __( 'Require Unique Phone' ), + 'description' => __( 'Every customer should have a unique phone number.' ), 'name' => 'ns_customers_force_unique_phone', - 'value' => ns()->option->get('ns_customers_force_unique_phone', 'no'), - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), + 'value' => ns()->option->get( 'ns_customers_force_unique_phone', 'no' ), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), ], [ 'type' => 'select', - 'label' => __('Default Customer Account'), - 'description' => __('You must create a customer to which each sales are attributed when the walking customer doesn\'t register.'), + 'label' => __( 'Default Customer Account' ), + 'description' => __( 'You must create a customer to which each sales are attributed when the walking customer doesn\'t register.' ), 'name' => 'ns_customers_default', - 'value' => ns()->option->get('ns_customers_default', 'no'), - 'options' => Helper::toJsOptions(Customer::get(), [ 'id', 'name' ]), + 'value' => ns()->option->get( 'ns_customers_default', 'no' ), + 'options' => Helper::toJsOptions( Customer::get(), [ 'id', [ 'first_name', 'last_name' ] ] ), ], [ 'type' => 'select', - 'label' => __('Default Customer Group'), - 'description' => __('Select to which group each new created customers are assigned to.'), + 'label' => __( 'Default Customer Group' ), + 'description' => __( 'Select to which group each new created customers are assigned to.' ), 'name' => 'ns_customers_default_group', - 'value' => ns()->option->get('ns_customers_default_group', 'no'), - 'options' => Helper::toJsOptions(CustomerGroup::get(), [ 'id', 'name' ]), + 'value' => ns()->option->get( 'ns_customers_default_group', 'no' ), + 'options' => Helper::toJsOptions( CustomerGroup::get(), [ 'id', 'name' ] ), ], [ 'type' => 'select', - 'label' => __('Enable Credit & Account'), - 'description' => __('The customers will be able to make deposit or obtain credit.'), + 'label' => __( 'Enable Credit & Account' ), + 'description' => __( 'The customers will be able to make deposit or obtain credit.' ), 'name' => 'ns_customers_credit_enabled', - 'value' => ns()->option->get('ns_customers_credit_enabled', 'no'), - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), + 'value' => ns()->option->get( 'ns_customers_credit_enabled', 'no' ), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), ], ], ]; diff --git a/app/Settings/invoice-settings/receipts.php b/app/Settings/invoice-settings/receipts.php index a3122be6d..f68f473d5 100644 --- a/app/Settings/invoice-settings/receipts.php +++ b/app/Settings/invoice-settings/receipts.php @@ -4,127 +4,127 @@ use App\Services\Helper; return [ - 'label' => __('Receipts'), + 'label' => __( 'Receipts' ), 'fields' => [ [ - 'label' => __('Receipt Template'), + 'label' => __( 'Receipt Template' ), 'type' => 'select', - 'options' => Helper::kvToJsOptions([ - 'default' => __('Default'), - ]), + 'options' => Helper::kvToJsOptions( [ + 'default' => __( 'Default' ), + ] ), 'name' => 'ns_invoice_receipt_template', - 'value' => ns()->option->get('ns_invoice_receipt_template'), - 'description' => __('Choose the template that applies to receipts'), + 'value' => ns()->option->get( 'ns_invoice_receipt_template' ), + 'description' => __( 'Choose the template that applies to receipts' ), ], [ - 'label' => __('Receipt Logo'), + 'label' => __( 'Receipt Logo' ), 'type' => 'media', 'name' => 'ns_invoice_receipt_logo', - 'value' => ns()->option->get('ns_invoice_receipt_logo'), - 'description' => __('Provide a URL to the logo.'), + 'value' => ns()->option->get( 'ns_invoice_receipt_logo' ), + 'description' => __( 'Provide a URL to the logo.' ), ], [ - 'label' => __('Merge Products On Receipt/Invoice'), + 'label' => __( 'Merge Products On Receipt/Invoice' ), 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ - 'no' => __('No'), - 'yes' => __('Yes'), - ]), + 'options' => Helper::kvToJsOptions( [ + 'no' => __( 'No' ), + 'yes' => __( 'Yes' ), + ] ), 'name' => 'ns_invoice_merge_similar_products', - 'value' => ns()->option->get('ns_invoice_merge_similar_products'), - 'description' => __('All similar products will be merged to avoid a paper waste for the receipt/invoice.'), + 'value' => ns()->option->get( 'ns_invoice_merge_similar_products' ), + 'description' => __( 'All similar products will be merged to avoid a paper waste for the receipt/invoice.' ), ], [ - 'label' => __('Show Tax Breakdown'), + 'label' => __( 'Show Tax Breakdown' ), 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ - 'no' => __('No'), - 'yes' => __('Yes'), - ]), + 'options' => Helper::kvToJsOptions( [ + 'no' => __( 'No' ), + 'yes' => __( 'Yes' ), + ] ), 'name' => 'ns_invoice_display_tax_breakdown', - 'value' => ns()->option->get('ns_invoice_display_tax_breakdown'), - 'description' => __('Will display the tax breakdown on the receipt/invoice.'), + 'value' => ns()->option->get( 'ns_invoice_display_tax_breakdown' ), + 'description' => __( 'Will display the tax breakdown on the receipt/invoice.' ), ], [ - 'label' => __('Receipt Footer'), + 'label' => __( 'Receipt Footer' ), 'type' => 'textarea', 'name' => 'ns_invoice_receipt_footer', - 'value' => ns()->option->get('ns_invoice_receipt_footer'), - 'description' => __('If you would like to add some disclosure at the bottom of the receipt.'), + 'value' => ns()->option->get( 'ns_invoice_receipt_footer' ), + 'description' => __( 'If you would like to add some disclosure at the bottom of the receipt.' ), ], [ - 'label' => __('Column A'), + 'label' => __( 'Column A' ), 'type' => 'textarea', 'name' => 'ns_invoice_receipt_column_a', - 'value' => ns()->option->get('ns_invoice_receipt_column_a'), - 'description' => Hook::filter('ns-receipts-settings-tags', [ - __('Available tags : ') . '
' . - __('{store_name}: displays the store name.') . '
', - __('{store_email}: displays the store email.'), '
', - __('{store_phone}: displays the store phone number.'), '
', - __('{cashier_name}: displays the cashier name.'), '
', - __('{cashier_id}: displays the cashier id.'), '
', - __('{order_code}: displays the order code.'), '
', - __('{order_date}: displays the order date.'), '
', - __('{order_type}: displays the order type.'), '
', - __('{customer_first_name}: displays the customer first name.'), '
', - __('{customer_last_name}: displays the customer last name.'), '
', - __('{customer_email}: displays the customer email.'), '
', - __('{shipping_first_name}: displays the shipping first name.'), '
', - __('{shipping_last_name}: displays the shipping last name.'), '
', - __('{shipping_phone}: displays the shipping phone.'), '
', - __('{shipping_address_1}: displays the shipping address_1.'), '
', - __('{shipping_address_2}: displays the shipping address_2.'), '
', - __('{shipping_country}: displays the shipping country.'), '
', - __('{shipping_city}: displays the shipping city.'), '
', - __('{shipping_pobox}: displays the shipping pobox.'), '
', - __('{shipping_company}: displays the shipping company.'), '
', - __('{shipping_email}: displays the shipping email.'), '
', - __('{billing_first_name}: displays the billing first name.'), '
', - __('{billing_last_name}: displays the billing last name.'), '
', - __('{billing_phone}: displays the billing phone.'), '
', - __('{billing_address_1}: displays the billing address_1.'), '
', - __('{billing_address_2}: displays the billing address_2.'), '
', - __('{billing_country}: displays the billing country.'), '
', - __('{billing_city}: displays the billing city.'), '
', - __('{billing_pobox}: displays the billing pobox.'), '
', - __('{billing_company}: displays the billing company.'), '
', - __('{billing_email}: displays the billing email.') . '
', - ]), + 'value' => ns()->option->get( 'ns_invoice_receipt_column_a' ), + 'description' => Hook::filter( 'ns-receipts-settings-tags', [ + __( 'Available tags : ' ) . '
' . + __( '{store_name}: displays the store name.' ) . '
', + __( '{store_email}: displays the store email.' ), '
', + __( '{store_phone}: displays the store phone number.' ), '
', + __( '{cashier_name}: displays the cashier name.' ), '
', + __( '{cashier_id}: displays the cashier id.' ), '
', + __( '{order_code}: displays the order code.' ), '
', + __( '{order_date}: displays the order date.' ), '
', + __( '{order_type}: displays the order type.' ), '
', + __( '{customer_first_name}: displays the customer first name.' ), '
', + __( '{customer_last_name}: displays the customer last name.' ), '
', + __( '{customer_email}: displays the customer email.' ), '
', + __( '{shipping_first_name}: displays the shipping first name.' ), '
', + __( '{shipping_last_name}: displays the shipping last name.' ), '
', + __( '{shipping_phone}: displays the shipping phone.' ), '
', + __( '{shipping_address_1}: displays the shipping address_1.' ), '
', + __( '{shipping_address_2}: displays the shipping address_2.' ), '
', + __( '{shipping_country}: displays the shipping country.' ), '
', + __( '{shipping_city}: displays the shipping city.' ), '
', + __( '{shipping_pobox}: displays the shipping pobox.' ), '
', + __( '{shipping_company}: displays the shipping company.' ), '
', + __( '{shipping_email}: displays the shipping email.' ), '
', + __( '{billing_first_name}: displays the billing first name.' ), '
', + __( '{billing_last_name}: displays the billing last name.' ), '
', + __( '{billing_phone}: displays the billing phone.' ), '
', + __( '{billing_address_1}: displays the billing address_1.' ), '
', + __( '{billing_address_2}: displays the billing address_2.' ), '
', + __( '{billing_country}: displays the billing country.' ), '
', + __( '{billing_city}: displays the billing city.' ), '
', + __( '{billing_pobox}: displays the billing pobox.' ), '
', + __( '{billing_company}: displays the billing company.' ), '
', + __( '{billing_email}: displays the billing email.' ) . '
', + ] ), ], [ - 'label' => __('Column B'), + 'label' => __( 'Column B' ), 'type' => 'textarea', 'name' => 'ns_invoice_receipt_column_b', - 'value' => ns()->option->get('ns_invoice_receipt_column_b'), - 'description' => Hook::filter('ns-receipts-settings-tags', [ - __('Available tags :') . '
', - __('{store_name}: displays the store name.') . '
', - __('{store_email}: displays the store email.') . '
', - __('{store_phone}: displays the store phone number.') . '
', - __('{cashier_name}: displays the cashier name.') . '
', - __('{cashier_id}: displays the cashier id.') . '
', - __('{order_code}: displays the order code.') . '
', - __('{order_date}: displays the order date.') . '
', - __('{order_type}: displays the order type.'), '
', - __('{customer_first_name}: displays the customer first name.') . '
', - __('{customer_last_name}: displays the customer last name.') . '
', - __('{customer_email}: displays the customer email.') . '
', - __('{shipping_first_name}: displays the shipping first name.') . '
', - __('{shipping_last_name}: displays the shipping last name.') . '
', - __('{shipping_phone}: displays the shipping phone.') . '
', - __('{shipping_address_1}: displays the shipping address_1.') . '
', - __('{shipping_address_2}: displays the shipping address_2.') . '
', - __('{shipping_country}: displays the shipping country.') . '
', - __('{shipping_city}: displays the shipping city.') . '
', - __('{shipping_pobox}: displays the shipping pobox.') . '
', - __('{shipping_company}: displays the shipping company.') . '
', - __('{shipping_email}: displays the shipping email.') . '
', - __('{billing_first_name}: displays the billing first name.') . '
', - __('{billing_last_name}: displays the billing last name.') . '
', - __('{billing_phone}: displays the billing phone.') . '
', - __('{billing_address_1}: displays the billing address_1.') . '
', - __('{billing_address_2}: displays the billing address_2.') . '
', - __('{billing_country}: displays the billing country.') . '
', - __('{billing_city}: displays the billing city.') . '
', - __('{billing_pobox}: displays the billing pobox.') . '
', - __('{billing_company}: displays the billing company.') . '
', - __('{billing_email}: displays the billing email.') . '
', - ]), + 'value' => ns()->option->get( 'ns_invoice_receipt_column_b' ), + 'description' => Hook::filter( 'ns-receipts-settings-tags', [ + __( 'Available tags :' ) . '
', + __( '{store_name}: displays the store name.' ) . '
', + __( '{store_email}: displays the store email.' ) . '
', + __( '{store_phone}: displays the store phone number.' ) . '
', + __( '{cashier_name}: displays the cashier name.' ) . '
', + __( '{cashier_id}: displays the cashier id.' ) . '
', + __( '{order_code}: displays the order code.' ) . '
', + __( '{order_date}: displays the order date.' ) . '
', + __( '{order_type}: displays the order type.' ), '
', + __( '{customer_first_name}: displays the customer first name.' ) . '
', + __( '{customer_last_name}: displays the customer last name.' ) . '
', + __( '{customer_email}: displays the customer email.' ) . '
', + __( '{shipping_first_name}: displays the shipping first name.' ) . '
', + __( '{shipping_last_name}: displays the shipping last name.' ) . '
', + __( '{shipping_phone}: displays the shipping phone.' ) . '
', + __( '{shipping_address_1}: displays the shipping address_1.' ) . '
', + __( '{shipping_address_2}: displays the shipping address_2.' ) . '
', + __( '{shipping_country}: displays the shipping country.' ) . '
', + __( '{shipping_city}: displays the shipping city.' ) . '
', + __( '{shipping_pobox}: displays the shipping pobox.' ) . '
', + __( '{shipping_company}: displays the shipping company.' ) . '
', + __( '{shipping_email}: displays the shipping email.' ) . '
', + __( '{billing_first_name}: displays the billing first name.' ) . '
', + __( '{billing_last_name}: displays the billing last name.' ) . '
', + __( '{billing_phone}: displays the billing phone.' ) . '
', + __( '{billing_address_1}: displays the billing address_1.' ) . '
', + __( '{billing_address_2}: displays the billing address_2.' ) . '
', + __( '{billing_country}: displays the billing country.' ) . '
', + __( '{billing_city}: displays the billing city.' ) . '
', + __( '{billing_pobox}: displays the billing pobox.' ) . '
', + __( '{billing_company}: displays the billing company.' ) . '
', + __( '{billing_email}: displays the billing email.' ) . '
', + ] ), ], ], ]; diff --git a/app/Settings/orders/general.php b/app/Settings/orders/general.php index 419ddbd49..25edee4c7 100644 --- a/app/Settings/orders/general.php +++ b/app/Settings/orders/general.php @@ -3,50 +3,50 @@ use App\Services\Helper; return [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'select', - 'label' => __('Order Code Type'), - 'description' => __('Determine how the system will generate code for each orders.'), + 'label' => __( 'Order Code Type' ), + 'description' => __( 'Determine how the system will generate code for each orders.' ), 'name' => 'ns_orders_code_type', - 'value' => ns()->option->get('ns_orders_code_type'), - 'options' => Helper::kvToJsOptions([ - 'date_sequential' => __('Sequential'), - 'random_code' => __('Random Code'), - 'number_sequential' => __('Number Sequential'), - ]), + 'value' => ns()->option->get( 'ns_orders_code_type' ), + 'options' => Helper::kvToJsOptions( [ + 'date_sequential' => __( 'Sequential' ), + 'random_code' => __( 'Random Code' ), + 'number_sequential' => __( 'Number Sequential' ), + ] ), ], [ 'type' => 'switch', - 'label' => __('Allow Unpaid Orders'), + 'label' => __( 'Allow Unpaid Orders' ), 'name' => 'ns_orders_allow_unpaid', - 'value' => ns()->option->get('ns_orders_allow_unpaid'), - 'description' => __('Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to "yes".'), - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), + 'value' => ns()->option->get( 'ns_orders_allow_unpaid' ), + 'description' => __( 'Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to "yes".' ), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), ], [ 'type' => 'switch', - 'label' => __('Allow Partial Orders'), + 'label' => __( 'Allow Partial Orders' ), 'name' => 'ns_orders_allow_partial', - 'value' => ns()->option->get('ns_orders_allow_partial'), - 'description' => __('Will prevent partially paid orders to be placed.'), - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), + 'value' => ns()->option->get( 'ns_orders_allow_partial' ), + 'description' => __( 'Will prevent partially paid orders to be placed.' ), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), ], [ 'type' => 'select', - 'label' => __('Quotation Expiration'), + 'label' => __( 'Quotation Expiration' ), 'name' => 'ns_orders_quotation_expiration', - 'value' => ns()->option->get('ns_orders_quotation_expiration'), - 'description' => __('Quotations will get deleted after they defined they has reached.'), - 'options' => Helper::kvToJsOptions(collect([3, 5, 10, 15, 30])->mapWithKeys(function ($days) { + 'value' => ns()->option->get( 'ns_orders_quotation_expiration' ), + 'description' => __( 'Quotations will get deleted after they defined they has reached.' ), + 'options' => Helper::kvToJsOptions( collect( [3, 5, 10, 15, 30] )->mapWithKeys( function ( $days ) { return [ - $days => sprintf(__('%s Days'), $days), + $days => sprintf( __( '%s Days' ), $days ), ]; - })), + } ) ), ], ], ]; diff --git a/app/Settings/pos/features.php b/app/Settings/pos/features.php index 4d49e3b6a..c884b72a5 100644 --- a/app/Settings/pos/features.php +++ b/app/Settings/pos/features.php @@ -5,142 +5,142 @@ use App\Services\OrdersService; return [ - 'label' => __('Features'), + 'label' => __( 'Features' ), 'fields' => [ [ 'name' => 'ns_pos_show_quantity', - 'value' => ns()->option->get('ns_pos_show_quantity'), - 'label' => __('Show Quantity'), + 'value' => ns()->option->get( 'ns_pos_show_quantity' ), + 'label' => __( 'Show Quantity' ), 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'description' => __('Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.'), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'description' => __( 'Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.' ), ], [ 'name' => 'ns_pos_items_merge', - 'value' => ns()->option->get('ns_pos_items_merge'), - 'label' => __('Merge Similar Items'), + 'value' => ns()->option->get( 'ns_pos_items_merge' ), + 'label' => __( 'Merge Similar Items' ), 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'description' => __('Will enforce similar products to be merged from the POS.'), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'description' => __( 'Will enforce similar products to be merged from the POS.' ), ], [ 'name' => 'ns_pos_allow_wholesale_price', - 'value' => ns()->option->get('ns_pos_allow_wholesale_price'), - 'label' => __('Allow Wholesale Price'), + 'value' => ns()->option->get( 'ns_pos_allow_wholesale_price' ), + 'label' => __( 'Allow Wholesale Price' ), 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'description' => __('Define if the wholesale price can be selected on the POS.'), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'description' => __( 'Define if the wholesale price can be selected on the POS.' ), ], [ 'name' => 'ns_pos_allow_decimal_quantities', - 'value' => ns()->option->get('ns_pos_allow_decimal_quantities'), - 'label' => __('Allow Decimal Quantities'), + 'value' => ns()->option->get( 'ns_pos_allow_decimal_quantities' ), + 'label' => __( 'Allow Decimal Quantities' ), 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'description' => __('Will change the numeric keyboard for allowing decimal for quantities. Only for "default" numpad.'), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'description' => __( 'Will change the numeric keyboard for allowing decimal for quantities. Only for "default" numpad.' ), ], [ 'name' => 'ns_pos_customers_creation_enabled', - 'value' => ns()->option->get('ns_pos_customers_creation_enabled'), - 'label' => __('Allow Customer Creation'), + 'value' => ns()->option->get( 'ns_pos_customers_creation_enabled' ), + 'label' => __( 'Allow Customer Creation' ), 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'description' => __('Allow customers to be created on the POS.'), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'description' => __( 'Allow customers to be created on the POS.' ), ], [ 'name' => 'ns_pos_quick_product', - 'value' => ns()->option->get('ns_pos_quick_product'), - 'label' => __('Quick Product'), + 'value' => ns()->option->get( 'ns_pos_quick_product' ), + 'label' => __( 'Quick Product' ), 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'description' => __('Allow quick product to be created from the POS.'), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'description' => __( 'Allow quick product to be created from the POS.' ), ], [ 'name' => 'ns_pos_quick_product_default_unit', - 'value' => ns()->option->get('ns_pos_quick_product_default_unit'), - 'label' => __('Quick Product Default Unit'), + 'value' => ns()->option->get( 'ns_pos_quick_product_default_unit' ), + 'label' => __( 'Quick Product Default Unit' ), 'type' => 'select', - 'options' => Helper::toJsOptions(Unit::get(), [ 'id', 'name' ]), - 'description' => __('Set what unit is assigned by default to all quick product.'), + 'options' => Helper::toJsOptions( Unit::get(), [ 'id', 'name' ] ), + 'description' => __( 'Set what unit is assigned by default to all quick product.' ), ], [ 'name' => 'ns_pos_unit_price_ediable', - 'value' => ns()->option->get('ns_pos_unit_price_ediable'), - 'label' => __('Editable Unit Price'), + 'value' => ns()->option->get( 'ns_pos_unit_price_ediable' ), + 'label' => __( 'Editable Unit Price' ), 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'description' => __('Allow product unit price to be edited.'), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'description' => __( 'Allow product unit price to be edited.' ), ], [ 'name' => 'ns_pos_price_with_tax', - 'value' => ns()->option->get('ns_pos_price_with_tax'), - 'label' => __('Show Price With Tax'), + 'value' => ns()->option->get( 'ns_pos_price_with_tax' ), + 'label' => __( 'Show Price With Tax' ), 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'description' => __('Will display price with tax for each products.'), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'description' => __( 'Will display price with tax for each products.' ), ], [ 'name' => 'ns_pos_order_types', - 'value' => ns()->option->get('ns_pos_order_types'), - 'label' => __('Order Types'), + 'value' => ns()->option->get( 'ns_pos_order_types' ), + 'label' => __( 'Order Types' ), 'type' => 'multiselect', - 'options' => Helper::kvToJsOptions(app()->make(OrdersService::class)->getTypeLabels()), - 'description' => __('Control the order type enabled.'), + 'options' => Helper::kvToJsOptions( app()->make( OrdersService::class )->getTypeLabels() ), + 'description' => __( 'Control the order type enabled.' ), ], [ 'name' => 'ns_pos_numpad', - 'value' => ns()->option->get('ns_pos_numpad'), - 'label' => __('Numpad'), + 'value' => ns()->option->get( 'ns_pos_numpad' ), + 'label' => __( 'Numpad' ), 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ - 'default' => __('Default'), - 'advanced' => __('Advanced'), - ]), - 'description' => __('Will set what is the numpad used on the POS screen.'), + 'options' => Helper::kvToJsOptions( [ + 'default' => __( 'Default' ), + 'advanced' => __( 'Advanced' ), + ] ), + 'description' => __( 'Will set what is the numpad used on the POS screen.' ), ], [ 'name' => 'ns_pos_force_autofocus', - 'value' => ns()->option->get('ns_pos_force_autofocus'), - 'label' => __('Force Barcode Auto Focus'), + 'value' => ns()->option->get( 'ns_pos_force_autofocus' ), + 'label' => __( 'Force Barcode Auto Focus' ), 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'description' => __('Will permanently enable barcode autofocus to ease using a barcode reader.'), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'description' => __( 'Will permanently enable barcode autofocus to ease using a barcode reader.' ), ], [ 'name' => 'ns_pos_hide_exhausted_products', - 'value' => ns()->option->get('ns_pos_hide_exhausted_products'), - 'label' => __('Hide Exhausted Products'), + 'value' => ns()->option->get( 'ns_pos_hide_exhausted_products' ), + 'label' => __( 'Hide Exhausted Products' ), 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'description' => __('Will hide exhausted products from selection on the POS.'), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'description' => __( 'Will hide exhausted products from selection on the POS.' ), ], [ 'name' => 'ns_pos_hide_empty_categories', - 'value' => ns()->option->get('ns_pos_hide_empty_categories'), - 'label' => __('Hide Empty Category'), + 'value' => ns()->option->get( 'ns_pos_hide_empty_categories' ), + 'label' => __( 'Hide Empty Category' ), 'type' => 'switch', - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'description' => __('Category with no or exhausted products will be hidden from selection.'), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'description' => __( 'Category with no or exhausted products will be hidden from selection.' ), ], ], ]; diff --git a/app/Settings/pos/layout.php b/app/Settings/pos/layout.php index 789b792bb..e534ad72a 100644 --- a/app/Settings/pos/layout.php +++ b/app/Settings/pos/layout.php @@ -2,41 +2,41 @@ use App\Services\Helper; -$audios = Helper::kvToJsOptions([ - '' => __('Disabled'), - url('/audio/bubble.mp3') => __('Bubble'), - url('/audio/ding.mp3') => __('Ding'), - url('/audio/pop.mp3') => __('Pop'), - url('/audio/cash-sound.mp3') => __('Cash Sound'), -]); +$audios = Helper::kvToJsOptions( [ + '' => __( 'Disabled' ), + url( '/audio/bubble.mp3' ) => __( 'Bubble' ), + url( '/audio/ding.mp3' ) => __( 'Ding' ), + url( '/audio/pop.mp3' ) => __( 'Pop' ), + url( '/audio/cash-sound.mp3' ) => __( 'Cash Sound' ), +] ); return [ - 'label' => __('Layout'), + 'label' => __( 'Layout' ), 'fields' => [ [ 'name' => 'ns_pos_layout', - 'value' => ns()->option->get('ns_pos_layout'), - 'options' => Helper::kvToJsOptions([ - 'grocery_shop' => __('Retail Layout'), - 'clothing_shop' => __('Clothing Shop'), - ]), - 'label' => __('POS Layout'), + 'value' => ns()->option->get( 'ns_pos_layout' ), + 'options' => Helper::kvToJsOptions( [ + 'grocery_shop' => __( 'Retail Layout' ), + 'clothing_shop' => __( 'Clothing Shop' ), + ] ), + 'label' => __( 'POS Layout' ), 'type' => 'select', - 'description' => __('Change the layout of the POS.'), + 'description' => __( 'Change the layout of the POS.' ), ], [ 'name' => 'ns_pos_complete_sale_audio', - 'value' => ns()->option->get('ns_pos_complete_sale_audio'), + 'value' => ns()->option->get( 'ns_pos_complete_sale_audio' ), 'options' => $audios, - 'label' => __('Sale Complete Sound'), + 'label' => __( 'Sale Complete Sound' ), 'type' => 'select-audio', - 'description' => __('Change the layout of the POS.'), + 'description' => __( 'Change the layout of the POS.' ), ], [ 'name' => 'ns_pos_new_item_audio', - 'value' => ns()->option->get('ns_pos_new_item_audio'), + 'value' => ns()->option->get( 'ns_pos_new_item_audio' ), 'options' => $audios, - 'label' => __('New Item Audio'), + 'label' => __( 'New Item Audio' ), 'type' => 'select-audio', - 'description' => __('The sound that plays when an item is added to the cart.'), + 'description' => __( 'The sound that plays when an item is added to the cart.' ), ], ], ]; diff --git a/app/Settings/pos/printing.php b/app/Settings/pos/printing.php index 349095296..94a1e9676 100644 --- a/app/Settings/pos/printing.php +++ b/app/Settings/pos/printing.php @@ -4,39 +4,39 @@ use App\Services\Helper; return [ - 'label' => __('Printing'), - 'fields' => Hook::filter('ns-printing-settings-fields', [ + 'label' => __( 'Printing' ), + 'fields' => Hook::filter( 'ns-printing-settings-fields', [ [ 'name' => 'ns_pos_printing_document', - 'value' => ns()->option->get('ns_pos_printing_document'), - 'label' => __('Printed Document'), + 'value' => ns()->option->get( 'ns_pos_printing_document' ), + 'label' => __( 'Printed Document' ), 'type' => 'select', - 'options' => Helper::kvToJsOptions([ - 'invoice' => __('Invoice'), - 'receipt' => __('Receipt'), - ]), - 'description' => __('Choose the document used for printing aster a sale.'), + 'options' => Helper::kvToJsOptions( [ + 'invoice' => __( 'Invoice' ), + 'receipt' => __( 'Receipt' ), + ] ), + 'description' => __( 'Choose the document used for printing aster a sale.' ), ], [ 'name' => 'ns_pos_printing_enabled_for', - 'value' => ns()->option->get('ns_pos_printing_enabled_for'), - 'label' => __('Printing Enabled For'), + 'value' => ns()->option->get( 'ns_pos_printing_enabled_for' ), + 'label' => __( 'Printing Enabled For' ), 'type' => 'select', - 'options' => Helper::kvToJsOptions([ - 'disabled' => __('Disabled'), - 'all_orders' => __('All Orders'), - 'partially_paid_orders' => __('From Partially Paid Orders'), - 'only_paid_orders' => __('Only Paid Orders'), - ]), - 'description' => __('Determine when the printing should be enabled.'), + 'options' => Helper::kvToJsOptions( [ + 'disabled' => __( 'Disabled' ), + 'all_orders' => __( 'All Orders' ), + 'partially_paid_orders' => __( 'From Partially Paid Orders' ), + 'only_paid_orders' => __( 'Only Paid Orders' ), + ] ), + 'description' => __( 'Determine when the printing should be enabled.' ), ], [ 'name' => 'ns_pos_printing_gateway', - 'value' => ns()->option->get('ns_pos_printing_gateway'), - 'label' => __('Printing Gateway'), + 'value' => ns()->option->get( 'ns_pos_printing_gateway' ), + 'label' => __( 'Printing Gateway' ), 'type' => 'select', - 'options' => Helper::kvToJsOptions([ - 'default' => __('Default Printing (web)'), - ]), - 'description' => __('Determine what is the gateway used for printing.'), + 'options' => Helper::kvToJsOptions( [ + 'default' => __( 'Default Printing (web)' ), + ] ), + 'description' => __( 'Determine what is the gateway used for printing.' ), ], - ]), + ] ), ]; diff --git a/app/Settings/pos/registers.php b/app/Settings/pos/registers.php index f64c6a18c..cfdf11d9c 100644 --- a/app/Settings/pos/registers.php +++ b/app/Settings/pos/registers.php @@ -5,48 +5,48 @@ $cashRegisters = [ [ 'name' => 'ns_pos_registers_enabled', - 'value' => ns()->option->get('ns_pos_registers_enabled'), - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'label' => __('Enable Cash Registers'), + 'value' => ns()->option->get( 'ns_pos_registers_enabled' ), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'label' => __( 'Enable Cash Registers' ), 'type' => 'select', - 'description' => __('Determine if the POS will support cash registers.'), + 'description' => __( 'Determine if the POS will support cash registers.' ), ], ]; -if (ns()->option->get('ns_pos_registers_enabled') === 'yes') { +if ( ns()->option->get( 'ns_pos_registers_enabled' ) === 'yes' ) { $cashRegisters[] = [ - 'label' => __('Cashier Idle Counter'), + 'label' => __( 'Cashier Idle Counter' ), 'name' => 'ns_pos_idle_counter', 'type' => 'select', - 'value' => ns()->option->get('ns_pos_idle_counter'), - 'options' => Helper::kvToJsOptions([ - 'disabled' => __('Disabled'), - '5min' => __('5 Minutes'), - '10min' => __('10 Minutes'), - '15min' => __('15 Minutes'), - '20min' => __('20 Minutes'), - '30min' => __('30 Minutes'), - ]), - 'description' => __('Selected after how many minutes the system will set the cashier as idle.'), + 'value' => ns()->option->get( 'ns_pos_idle_counter' ), + 'options' => Helper::kvToJsOptions( [ + 'disabled' => __( 'Disabled' ), + '5min' => __( '5 Minutes' ), + '10min' => __( '10 Minutes' ), + '15min' => __( '15 Minutes' ), + '20min' => __( '20 Minutes' ), + '30min' => __( '30 Minutes' ), + ] ), + 'description' => __( 'Selected after how many minutes the system will set the cashier as idle.' ), ]; $cashRegisters[] = [ - 'label' => __('Cash Disbursement'), + 'label' => __( 'Cash Disbursement' ), 'name' => 'ns_pos_disbursement', 'type' => 'select', - 'value' => ns()->option->get('ns_pos_disbursement'), - 'description' => __('Allow cash disbursement by the cashier.'), - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), + 'value' => ns()->option->get( 'ns_pos_disbursement' ), + 'description' => __( 'Allow cash disbursement by the cashier.' ), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), ]; } return [ - 'label' => __('Cash Registers'), + 'label' => __( 'Cash Registers' ), 'fields' => $cashRegisters, ]; diff --git a/app/Settings/pos/shortcuts.php b/app/Settings/pos/shortcuts.php index f3f124446..7277d8485 100644 --- a/app/Settings/pos/shortcuts.php +++ b/app/Settings/pos/shortcuts.php @@ -257,84 +257,84 @@ ]; return [ - 'label' => __('Keyboard Shortcuts'), + 'label' => __( 'Keyboard Shortcuts' ), 'fields' => [ [ 'name' => 'ns_pos_keyboard_cancel_order', - 'value' => ns()->option->get('ns_pos_keyboard_cancel_order', []), - 'label' => __('Cancel Order'), + 'value' => ns()->option->get( 'ns_pos_keyboard_cancel_order', [] ), + 'label' => __( 'Cancel Order' ), 'type' => 'inline-multiselect', 'options' => $shortcuts, - 'description' => __('Keyboard shortcut to cancel the current order.'), + 'description' => __( 'Keyboard shortcut to cancel the current order.' ), ], [ 'name' => 'ns_pos_keyboard_hold_order', - 'value' => ns()->option->get('ns_pos_keyboard_hold_order', []), - 'label' => __('Hold Order'), + 'value' => ns()->option->get( 'ns_pos_keyboard_hold_order', [] ), + 'label' => __( 'Hold Order' ), 'type' => 'inline-multiselect', 'options' => $shortcuts, - 'description' => __('Keyboard shortcut to hold the current order.'), + 'description' => __( 'Keyboard shortcut to hold the current order.' ), ], [ 'name' => 'ns_pos_keyboard_create_customer', - 'value' => ns()->option->get('ns_pos_keyboard_create_customer', []), - 'label' => __('Create Customer'), + 'value' => ns()->option->get( 'ns_pos_keyboard_create_customer', [] ), + 'label' => __( 'Create Customer' ), 'type' => 'inline-multiselect', 'options' => $shortcuts, - 'description' => __('Keyboard shortcut to create a customer.'), + 'description' => __( 'Keyboard shortcut to create a customer.' ), ], [ 'name' => 'ns_pos_keyboard_payment', - 'value' => ns()->option->get('ns_pos_keyboard_payment', []), - 'label' => __('Proceed Payment'), + 'value' => ns()->option->get( 'ns_pos_keyboard_payment', [] ), + 'label' => __( 'Proceed Payment' ), 'type' => 'inline-multiselect', 'options' => $shortcuts, - 'description' => __('Keyboard shortcut to proceed to the payment.'), + 'description' => __( 'Keyboard shortcut to proceed to the payment.' ), ], [ 'name' => 'ns_pos_keyboard_shipping', - 'value' => ns()->option->get('ns_pos_keyboard_shipping', []), - 'label' => __('Open Shipping'), + 'value' => ns()->option->get( 'ns_pos_keyboard_shipping', [] ), + 'label' => __( 'Open Shipping' ), 'type' => 'inline-multiselect', 'options' => $shortcuts, - 'description' => __('Keyboard shortcut to define shipping details.'), + 'description' => __( 'Keyboard shortcut to define shipping details.' ), ], [ 'name' => 'ns_pos_keyboard_note', - 'value' => ns()->option->get('ns_pos_keyboard_note', []), - 'label' => __('Open Note'), + 'value' => ns()->option->get( 'ns_pos_keyboard_note', [] ), + 'label' => __( 'Open Note' ), 'type' => 'inline-multiselect', 'options' => $shortcuts, - 'description' => __('Keyboard shortcut to open the notes.'), + 'description' => __( 'Keyboard shortcut to open the notes.' ), ], [ 'name' => 'ns_pos_keyboard_order_type', - 'value' => ns()->option->get('ns_pos_keyboard_order_type', []), - 'label' => __('Order Type Selector'), + 'value' => ns()->option->get( 'ns_pos_keyboard_order_type', [] ), + 'label' => __( 'Order Type Selector' ), 'type' => 'inline-multiselect', 'options' => $shortcuts, - 'description' => __('Keyboard shortcut to open the order type selector.'), + 'description' => __( 'Keyboard shortcut to open the order type selector.' ), ], [ 'name' => 'ns_pos_keyboard_fullscreen', - 'value' => ns()->option->get('ns_pos_keyboard_fullscreen', []), - 'label' => __('Toggle Fullscreen'), + 'value' => ns()->option->get( 'ns_pos_keyboard_fullscreen', [] ), + 'label' => __( 'Toggle Fullscreen' ), 'type' => 'inline-multiselect', 'options' => $shortcuts, - 'description' => __('Keyboard shortcut to toggle fullscreen.'), + 'description' => __( 'Keyboard shortcut to toggle fullscreen.' ), ], [ 'name' => 'ns_pos_keyboard_quick_search', - 'value' => ns()->option->get('ns_pos_keyboard_quick_search', []), - 'label' => __('Quick Search'), + 'value' => ns()->option->get( 'ns_pos_keyboard_quick_search', [] ), + 'label' => __( 'Quick Search' ), 'type' => 'inline-multiselect', 'options' => $shortcuts, - 'description' => __('Keyboard shortcut open the quick search popup.'), + 'description' => __( 'Keyboard shortcut open the quick search popup.' ), ], [ 'name' => 'ns_pos_keyboard_toggle_merge', - 'value' => ns()->option->get('ns_pos_keyboard_toggle_merge', []), - 'label' => __('Toggle Product Merge'), + 'value' => ns()->option->get( 'ns_pos_keyboard_toggle_merge', [] ), + 'label' => __( 'Toggle Product Merge' ), 'type' => 'inline-multiselect', 'options' => $shortcuts, - 'description' => __('Will enable or disable the product merging.'), + 'description' => __( 'Will enable or disable the product merging.' ), ], [ 'name' => 'ns_pos_amount_shortcut', - 'value' => ns()->option->get('ns_pos_amount_shortcut'), - 'label' => __('Amount Shortcuts'), + 'value' => ns()->option->get( 'ns_pos_amount_shortcut' ), + 'label' => __( 'Amount Shortcuts' ), 'type' => 'text', - 'description' => __('The amount numbers shortcuts separated with a "|".'), + 'description' => __( 'The amount numbers shortcuts separated with a "|".' ), ], ], ]; diff --git a/app/Settings/pos/vat.php b/app/Settings/pos/vat.php index cc0f2b1a4..e0c682e47 100644 --- a/app/Settings/pos/vat.php +++ b/app/Settings/pos/vat.php @@ -5,48 +5,48 @@ $fields = [ [ - 'label' => __('VAT Type'), + 'label' => __( 'VAT Type' ), 'name' => 'ns_pos_vat', 'type' => 'select', - 'value' => ns()->option->get('ns_pos_vat'), - 'description' => __('Determine the VAT type that should be used.'), - 'options' => Helper::kvToJsOptions([ - 'disabled' => __('Disabled'), - 'flat_vat' => __('Flat Rate'), - 'variable_vat' => __('Flexible Rate'), - 'products_vat' => __('Products Vat'), - 'products_flat_vat' => __('Products & Flat Rate'), - 'products_variable_vat' => __('Products & Flexible Rate'), - ]), + 'value' => ns()->option->get( 'ns_pos_vat' ), + 'description' => __( 'Determine the VAT type that should be used.' ), + 'options' => Helper::kvToJsOptions( [ + 'disabled' => __( 'Disabled' ), + 'flat_vat' => __( 'Flat Rate' ), + 'variable_vat' => __( 'Flexible Rate' ), + 'products_vat' => __( 'Products Vat' ), + 'products_flat_vat' => __( 'Products & Flat Rate' ), + 'products_variable_vat' => __( 'Products & Flexible Rate' ), + ] ), ], ]; -if (in_array(ns()->option->get('ns_pos_vat'), [ 'flat_vat', 'products_flat_vat' ])) { +if ( in_array( ns()->option->get( 'ns_pos_vat' ), [ 'flat_vat', 'products_flat_vat' ] ) ) { $fields[] = [ 'type' => 'select', 'name' => 'ns_pos_tax_group', - 'value' => ns()->option->get('ns_pos_tax_group'), - 'options' => Helper::toJsOptions(TaxGroup::get(), [ 'id', 'name' ]), - 'label' => __('Tax Group'), - 'description' => __('Define the tax group that applies to the sales.'), + 'value' => ns()->option->get( 'ns_pos_tax_group' ), + 'options' => Helper::toJsOptions( TaxGroup::get(), [ 'id', 'name' ] ), + 'label' => __( 'Tax Group' ), + 'description' => __( 'Define the tax group that applies to the sales.' ), ]; } -if (in_array(ns()->option->get('ns_pos_vat'), [ 'flat_vat', 'products_vat', 'products_flat_vat', 'variable_vat', 'products_variable_vat' ])) { +if ( in_array( ns()->option->get( 'ns_pos_vat' ), [ 'flat_vat', 'products_vat', 'products_flat_vat', 'variable_vat', 'products_variable_vat' ] ) ) { $fields[] = [ 'type' => 'select', 'name' => 'ns_pos_tax_type', - 'value' => ns()->option->get('ns_pos_tax_type'), - 'options' => Helper::kvToJsOptions([ - 'inclusive' => __('Inclusive'), - 'exclusive' => __('Exclusive'), - ]), - 'label' => __('Tax Type'), - 'description' => __('Define how the tax is computed on sales.'), + 'value' => ns()->option->get( 'ns_pos_tax_type' ), + 'options' => Helper::kvToJsOptions( [ + 'inclusive' => __( 'Inclusive' ), + 'exclusive' => __( 'Exclusive' ), + ] ), + 'label' => __( 'Tax Type' ), + 'description' => __( 'Define how the tax is computed on sales.' ), ]; } return [ - 'label' => __('VAT Settings'), + 'label' => __( 'VAT Settings' ), 'fields' => $fields, ]; diff --git a/app/Settings/reports/general.php b/app/Settings/reports/general.php index a85826180..d4d12d37e 100644 --- a/app/Settings/reports/general.php +++ b/app/Settings/reports/general.php @@ -3,18 +3,18 @@ use App\Services\Helper; return [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'switch', 'name' => 'ns_reports_email', - 'label' => __('Enable Email Reporting'), - 'options' => Helper::kvToJsOptions([ - 'yes' => __('Yes'), - 'no' => __('No'), - ]), - 'value' => ns()->option->get('ns_reports_email'), - 'description' => __('Determine if the reporting should be enabled globally.'), + 'label' => __( 'Enable Email Reporting' ), + 'options' => Helper::kvToJsOptions( [ + 'yes' => __( 'Yes' ), + 'no' => __( 'No' ), + ] ), + 'value' => ns()->option->get( 'ns_reports_email' ), + 'description' => __( 'Determine if the reporting should be enabled globally.' ), ], ], ]; diff --git a/app/Settings/supplies-deliveries/general.php b/app/Settings/supplies-deliveries/general.php index 43ff38bc3..b0461a40c 100644 --- a/app/Settings/supplies-deliveries/general.php +++ b/app/Settings/supplies-deliveries/general.php @@ -1,7 +1,7 @@ __('Supplies'), + 'label' => __( 'Supplies' ), 'fields' => [ // ], diff --git a/app/Settings/user-profile/general.php b/app/Settings/user-profile/general.php index feb8d8ea0..7bf5ff7df 100644 --- a/app/Settings/user-profile/general.php +++ b/app/Settings/user-profile/general.php @@ -1,14 +1,14 @@ __('General'), + 'label' => __( 'General' ), 'fields' => [ [ - 'label' => __('Public Name'), + 'label' => __( 'Public Name' ), 'name' => 'public_name', - 'value' => ns()->option->get('public_name'), + 'value' => ns()->option->get( 'public_name' ), 'type' => 'text', - 'description' => __('Define what is the user public name. If not provided, the username is used instead.'), + 'description' => __( 'Define what is the user public name. If not provided, the username is used instead.' ), ], ], ]; diff --git a/app/Settings/user-profile/security.php b/app/Settings/user-profile/security.php index a24cc91d8..0d1cc2ffc 100644 --- a/app/Settings/user-profile/security.php +++ b/app/Settings/user-profile/security.php @@ -1,24 +1,24 @@ __('Security'), + 'label' => __( 'Security' ), 'fields' => [ [ - 'label' => __('Old Password'), + 'label' => __( 'Old Password' ), 'name' => 'old_password', 'type' => 'password', - 'description' => __('Provide the old password.'), + 'description' => __( 'Provide the old password.' ), ], [ - 'label' => __('Password'), + 'label' => __( 'Password' ), 'name' => 'password', 'type' => 'password', - 'description' => __('Change your password with a better stronger password.'), + 'description' => __( 'Change your password with a better stronger password.' ), 'validation' => 'min:6', ], [ - 'label' => __('Password Confirmation'), + 'label' => __( 'Password Confirmation' ), 'name' => 'password_confirm', 'type' => 'password', - 'description' => __('Change your password with a better stronger password.'), + 'description' => __( 'Change your password with a better stronger password.' ), 'validation' => 'min:6|same:security.password', ], ], diff --git a/app/Settings/workers/general.php b/app/Settings/workers/general.php index 3d4862781..258b44490 100644 --- a/app/Settings/workers/general.php +++ b/app/Settings/workers/general.php @@ -3,26 +3,26 @@ use App\Services\Helper; return [ - 'label' => __('General'), + 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'switch', - 'label' => __('Enable Workers'), - 'description' => __('Enable background services for NexoPOS. Refresh to check whether the option has turned to "Yes".'), + 'label' => __( 'Enable Workers' ), + 'description' => __( 'Enable background services for NexoPOS. Refresh to check whether the option has turned to "Yes".' ), 'name' => 'ns_workers_enabled', - 'value' => ns()->option->get('ns_workers_enabled', 'no'), - 'options' => collect(Helper::kvToJsOptions([ - 'no' => __('No'), - 'await_confirm' => __('Test'), - 'yes' => __('Yes'), - ]))->map(function ($option) { + 'value' => ns()->option->get( 'ns_workers_enabled', 'no' ), + 'options' => collect( Helper::kvToJsOptions( [ + 'no' => __( 'No' ), + 'await_confirm' => __( 'Test' ), + 'yes' => __( 'Yes' ), + ] ) )->map( function ( $option ) { $option[ 'disabled' ] = false; - if ($option[ 'value' ] === 'yes') { + if ( $option[ 'value' ] === 'yes' ) { $option[ 'disabled' ] = true; } return $option; - }), + } ), ], ], ]; diff --git a/app/Traits/NsForms.php b/app/Traits/NsForms.php index 24ea7e167..4e7ae759a 100644 --- a/app/Traits/NsForms.php +++ b/app/Traits/NsForms.php @@ -13,7 +13,7 @@ trait NsForms * Provide a callback notation for * a specific method */ - public static function method(string $methodName): string + public static function method( string $methodName ): string { return get_called_class() . '@' . $methodName; } @@ -21,20 +21,20 @@ public static function method(string $methodName): string /** * Extracts validation from either a crud form or setting page. */ - public function extractValidation($model = null): array + public function extractValidation( $model = null ): array { - $form = $this->getFormObject(model: $model); + $form = $this->getFormObject( model: $model ); $rules = []; - if (isset($form[ 'main' ][ 'validation' ])) { + if ( isset( $form[ 'main' ][ 'validation' ] ) ) { $rules[ $form[ 'main' ][ 'name' ] ] = $form[ 'main' ][ 'validation' ]; } - foreach ($form[ 'tabs' ] as $tabKey => $tab) { - if (! empty($tab[ 'fields' ])) { - foreach ($tab[ 'fields' ] as $field) { - if (isset($field[ 'validation' ])) { + foreach ( $form[ 'tabs' ] as $tabKey => $tab ) { + if ( ! empty( $tab[ 'fields' ] ) ) { + foreach ( $tab[ 'fields' ] as $field ) { + if ( isset( $field[ 'validation' ] ) ) { $rules[ $tabKey ][ $field[ 'name' ] ] = $field[ 'validation' ]; } } @@ -48,10 +48,10 @@ public function extractValidation($model = null): array * Returns the array that represent the * form object for either the CrudService or the SettingsPage. */ - private function getFormObject($model = null): array + private function getFormObject( $model = null ): array { - if (is_subclass_of($this, CrudService::class) || is_subclass_of($this, SettingsPage::class)) { - return Hook::filter(get_class($this)::method('getForm'), $this->getForm($model), compact('model')); + if ( is_subclass_of( $this, CrudService::class ) || is_subclass_of( $this, SettingsPage::class ) ) { + return Hook::filter( get_class( $this )::method( 'getForm' ), $this->getForm( $model ), compact( 'model' ) ); } return []; @@ -60,17 +60,17 @@ private function getFormObject($model = null): array /** * Isolate Rules that use the Rule class */ - public function isolateArrayRules(array $arrayRules, string $parentKey = ''): array + public function isolateArrayRules( array $arrayRules, string $parentKey = '' ): array { $rules = []; - foreach ($arrayRules as $key => $value) { - if (is_array($value) && collect(array_keys($value))->filter(function ($key) { - return is_string($key); - })->count() > 0) { - $rules = array_merge($rules, $this->isolateArrayRules($value, $key)); + foreach ( $arrayRules as $key => $value ) { + if ( is_array( $value ) && collect( array_keys( $value ) )->filter( function ( $key ) { + return is_string( $key ); + } )->count() > 0 ) { + $rules = array_merge( $rules, $this->isolateArrayRules( $value, $key ) ); } else { - $rules[] = [ (! empty($parentKey) ? $parentKey . '.' : '') . $key, $value ]; + $rules[] = [ ( ! empty( $parentKey ) ? $parentKey . '.' : '' ) . $key, $value ]; } } @@ -80,39 +80,39 @@ public function isolateArrayRules(array $arrayRules, string $parentKey = ''): ar /** * Return flat fields for the crud form provided */ - public function getFlatForm(array $fields, $model = null): array + public function getFlatForm( array $fields, $model = null ): array { - $form = $this->getFormObject(model: $model); + $form = $this->getFormObject( model: $model ); $data = []; - if (isset($form[ 'main' ][ 'name' ])) { + if ( isset( $form[ 'main' ][ 'name' ] ) ) { $data[ $form[ 'main' ][ 'name' ] ] = $fields[ $form[ 'main' ][ 'name' ] ]; } - foreach ($form[ 'tabs' ] as $tabKey => $tab) { + foreach ( $form[ 'tabs' ] as $tabKey => $tab ) { /** * if the object bein used is not an instance * of a Crud and include the method, let's skip * this. */ $keys = []; - if (method_exists($this, 'getTabsRelations')) { - $keys = array_keys($this->getTabsRelations()); + if ( method_exists( $this, 'getTabsRelations' ) ) { + $keys = array_keys( $this->getTabsRelations() ); } /** * We're ignoring the tabs * that are linked to a model. */ - if (! in_array($tabKey, $keys) && ! empty($tab[ 'fields' ])) { - foreach ($tab[ 'fields' ] as $field) { - $value = data_get($fields, $tabKey . '.' . $field[ 'name' ]); + if ( ! in_array( $tabKey, $keys ) && ! empty( $tab[ 'fields' ] ) ) { + foreach ( $tab[ 'fields' ] as $field ) { + $value = data_get( $fields, $tabKey . '.' . $field[ 'name' ] ); /** * if the field doesn't have any value * we'll omit it. To avoid filling wrong value */ - if (! empty($value) || (int) $value === 0) { + if ( ! empty( $value ) || (int) $value === 0 ) { $data[ $field[ 'name' ] ] = $value; } } @@ -123,10 +123,10 @@ public function getFlatForm(array $fields, $model = null): array * We'll add custom fields * that might be added by modules */ - $fieldsToIgnore = array_keys(collect($form[ 'tabs' ])->toArray()); + $fieldsToIgnore = array_keys( collect( $form[ 'tabs' ] )->toArray() ); - foreach ($fields as $field => $value) { - if (! in_array($field, $fieldsToIgnore)) { + foreach ( $fields as $field => $value ) { + if ( ! in_array( $field, $fieldsToIgnore ) ) { $data[ $field ] = $value; } } @@ -139,41 +139,41 @@ public function getFlatForm(array $fields, $model = null): array * for inserting. The data is parsed from the defined * form on the Request. */ - public function getPlainData(Request $request, $model = null): array + public function getPlainData( Request $request, $model = null ): array { $fields = $request->post(); - return $this->getFlatForm($fields, $model); + return $this->getFlatForm( $fields, $model ); } /** * The PHP version of FormValidation.extractForm. * This returns a flattened version of a Form. */ - public function extractForm($form): array + public function extractForm( $form ): array { $formValue = []; - if (isset($form['main'])) { + if ( isset( $form['main'] ) ) { $formValue[$form['main']['name']] = $form['main']['value']; } - if (isset($form['tabs'])) { - foreach ($form['tabs'] as $tabIdentifier => $tab) { - if (! isset($formValue[$tabIdentifier])) { + if ( isset( $form['tabs'] ) ) { + foreach ( $form['tabs'] as $tabIdentifier => $tab ) { + if ( ! isset( $formValue[$tabIdentifier] ) ) { $formValue[$tabIdentifier] = []; } - $formValue[$tabIdentifier] = $this->extractFields($tab[ 'fields' ]); + $formValue[$tabIdentifier] = $this->extractFields( $tab[ 'fields' ] ); } } return $formValue; } - public function extractFields($fields, $formValue = []) + public function extractFields( $fields, $formValue = [] ) { - foreach ($fields as $field) { + foreach ( $fields as $field ) { $formValue[$field['name']] = $field['value'] ?? ''; } diff --git a/app/Traits/NsSerialize.php b/app/Traits/NsSerialize.php index 3d5b11b6b..5f317762a 100644 --- a/app/Traits/NsSerialize.php +++ b/app/Traits/NsSerialize.php @@ -14,7 +14,7 @@ trait NsSerialize protected function prepareSerialization() { - JobBeforeSerializeEvent::dispatch($this); + JobBeforeSerializeEvent::dispatch( $this ); } public function middleware() diff --git a/app/View/Components/SessionMessage.php b/app/View/Components/SessionMessage.php index ca0755360..52223b8ba 100644 --- a/app/View/Components/SessionMessage.php +++ b/app/View/Components/SessionMessage.php @@ -23,6 +23,6 @@ public function __construct() */ public function render() { - return view('components.session-message'); + return view( 'components.session-message' ); } } diff --git a/app/Widgets/BestCashiersWidget.php b/app/Widgets/BestCashiersWidget.php index c321a677b..be303e6c7 100644 --- a/app/Widgets/BestCashiersWidget.php +++ b/app/Widgets/BestCashiersWidget.php @@ -10,8 +10,8 @@ class BestCashiersWidget extends WidgetService public function __construct() { - $this->name = __('Best Cashiers'); - $this->description = __('Will display all cashiers who performs well.'); + $this->name = __( 'Best Cashiers' ); + $this->description = __( 'Will display all cashiers who performs well.' ); $this->permission = 'nexopos.see.best-cashier-widget'; } } diff --git a/app/Widgets/BestCustomersWidget.php b/app/Widgets/BestCustomersWidget.php index 7d84ee6c7..27340cf1f 100644 --- a/app/Widgets/BestCustomersWidget.php +++ b/app/Widgets/BestCustomersWidget.php @@ -10,8 +10,8 @@ class BestCustomersWidget extends WidgetService public function __construct() { - $this->name = __('Best Customers'); - $this->description = __('Will display all customers with the highest purchases.'); + $this->name = __( 'Best Customers' ); + $this->description = __( 'Will display all customers with the highest purchases.' ); $this->permission = 'nexopos.see.best-customers-widget'; } } diff --git a/app/Widgets/ExpenseCardWidget.php b/app/Widgets/ExpenseCardWidget.php index 0a0fe65cf..f5f0473eb 100644 --- a/app/Widgets/ExpenseCardWidget.php +++ b/app/Widgets/ExpenseCardWidget.php @@ -10,8 +10,8 @@ class ExpenseCardWidget extends WidgetService public function __construct() { - $this->name = __('Expense Card Widget'); - $this->description = __('Will display a card of current and overwall expenses.'); + $this->name = __( 'Expense Card Widget' ); + $this->description = __( 'Will display a card of current and overwall expenses.' ); $this->permission = 'nexopos.see.expense-card-widget'; } } diff --git a/app/Widgets/IncompleteSaleCardWidget.php b/app/Widgets/IncompleteSaleCardWidget.php index 1142656b3..924c35fe3 100644 --- a/app/Widgets/IncompleteSaleCardWidget.php +++ b/app/Widgets/IncompleteSaleCardWidget.php @@ -10,8 +10,8 @@ class IncompleteSaleCardWidget extends WidgetService public function __construct() { - $this->name = __('Incomplete Sale Card Widget'); - $this->description = __('Will display a card of current and overall incomplete sales.'); + $this->name = __( 'Incomplete Sale Card Widget' ); + $this->description = __( 'Will display a card of current and overall incomplete sales.' ); $this->permission = 'nexopos.see.incomplete-sale-card-widget'; } } diff --git a/app/Widgets/OrdersChartWidget.php b/app/Widgets/OrdersChartWidget.php index d3ae8ac5d..91764020c 100644 --- a/app/Widgets/OrdersChartWidget.php +++ b/app/Widgets/OrdersChartWidget.php @@ -10,8 +10,8 @@ class OrdersChartWidget extends WidgetService public function __construct() { - $this->name = __('Orders Chart'); - $this->description = __('Will display a chart of weekly sales.'); + $this->name = __( 'Orders Chart' ); + $this->description = __( 'Will display a chart of weekly sales.' ); $this->permission = 'nexopos.see.orders-chart-widget'; } } diff --git a/app/Widgets/OrdersSummaryWidget.php b/app/Widgets/OrdersSummaryWidget.php index e918a59ff..3aeac576b 100644 --- a/app/Widgets/OrdersSummaryWidget.php +++ b/app/Widgets/OrdersSummaryWidget.php @@ -10,8 +10,8 @@ class OrdersSummaryWidget extends WidgetService public function __construct() { - $this->name = __('Orders Summary'); - $this->description = __('Will display a summary of recent sales.'); + $this->name = __( 'Orders Summary' ); + $this->description = __( 'Will display a summary of recent sales.' ); $this->permission = 'nexopos.see.orders-summary-widget'; } } diff --git a/app/Widgets/ProfileWidget.php b/app/Widgets/ProfileWidget.php index 5a5bee8c9..83b2c154b 100644 --- a/app/Widgets/ProfileWidget.php +++ b/app/Widgets/ProfileWidget.php @@ -10,8 +10,8 @@ class ProfileWidget extends WidgetService public function __construct() { - $this->name = __('Profile'); - $this->description = __('Will display a profile widget with user stats.'); + $this->name = __( 'Profile' ); + $this->description = __( 'Will display a profile widget with user stats.' ); $this->permission = 'nexopos.see.profile-widget'; } } diff --git a/app/Widgets/SaleCardWidget.php b/app/Widgets/SaleCardWidget.php index 0fba013c5..d97c20d6c 100644 --- a/app/Widgets/SaleCardWidget.php +++ b/app/Widgets/SaleCardWidget.php @@ -10,8 +10,8 @@ class SaleCardWidget extends WidgetService public function __construct() { - $this->name = __('Sale Card Widget'); - $this->description = __('Will display current and overall sales.'); + $this->name = __( 'Sale Card Widget' ); + $this->description = __( 'Will display current and overall sales.' ); $this->permission = 'nexopos.see.sale-card-widget'; } } diff --git a/bootstrap/app.php b/bootstrap/app.php index 037e17df0..3180bfe70 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -12,7 +12,7 @@ */ $app = new Illuminate\Foundation\Application( - $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__) + $_ENV['APP_BASE_PATH'] ?? dirname( __DIR__ ) ); /* diff --git a/composer.json b/composer.json index d8099cf94..bab084003 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,7 @@ "nikic/php-parser": "^4.14", "phpoffice/phpspreadsheet": "^2.0", "picqer/php-barcode-generator": "^2.1", - "predis/predis": "^2.0", + "predis/predis": "^2.2", "pusher/pusher-php-server": "^7.0", "spatie/laravel-db-snapshots": "^2.2", "symfony/http-client": "^6.0", diff --git a/composer.lock b/composer.lock index ede41ca55..07bcfae17 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7cdb3a26f8baccdb146551a4eaef523b", + "content-hash": "34828ba4219af51dcad545fe69dd45c0", "packages": [ { "name": "beyondcode/laravel-websockets", @@ -589,16 +589,16 @@ }, { "name": "doctrine/dbal", - "version": "3.8.0", + "version": "3.8.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "d244f2e6e6bf32bff5174e6729b57214923ecec9" + "reference": "a19a1d05ca211f41089dffcc387733a6875196cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/d244f2e6e6bf32bff5174e6729b57214923ecec9", - "reference": "d244f2e6e6bf32bff5174e6729b57214923ecec9", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/a19a1d05ca211f41089dffcc387733a6875196cb", + "reference": "a19a1d05ca211f41089dffcc387733a6875196cb", "shasum": "" }, "require": { @@ -614,9 +614,9 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.56", + "phpstan/phpstan": "1.10.57", "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.15", + "phpunit/phpunit": "9.6.16", "psalm/plugin-phpunit": "0.18.4", "slevomat/coding-standard": "8.13.1", "squizlabs/php_codesniffer": "3.8.1", @@ -682,7 +682,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.8.0" + "source": "https://github.com/doctrine/dbal/tree/3.8.2" }, "funding": [ { @@ -698,7 +698,7 @@ "type": "tidelift" } ], - "time": "2024-01-25T21:44:02+00:00" + "time": "2024-02-12T18:36:36+00:00" }, { "name": "doctrine/deprecations", @@ -840,16 +840,16 @@ }, { "name": "doctrine/inflector", - "version": "2.0.9", + "version": "2.0.10", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65" + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/2930cd5ef353871c821d5c43ed030d39ac8cfe65", - "reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", "shasum": "" }, "require": { @@ -911,7 +911,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.9" + "source": "https://github.com/doctrine/inflector/tree/2.0.10" }, "funding": [ { @@ -927,31 +927,31 @@ "type": "tidelift" } ], - "time": "2024-01-15T18:05:13+00:00" + "time": "2024-02-18T20:23:39+00:00" }, { "name": "doctrine/lexer", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "84a527db05647743d50373e0ec53a152f2cde568" + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", - "reference": "84a527db05647743d50373e0ec53a152f2cde568", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^9.5", + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.0" + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { @@ -988,7 +988,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.0" + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, "funding": [ { @@ -1004,7 +1004,7 @@ "type": "tidelift" } ], - "time": "2022-12-15T16:57:16+00:00" + "time": "2024-02-05T11:56:58+00:00" }, { "name": "dragonmantank/cron-expression", @@ -1299,16 +1299,16 @@ }, { "name": "fidry/cpu-core-counter", - "version": "1.0.0", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "85193c0b0cb5c47894b5eaec906e946f054e7077" + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/85193c0b0cb5c47894b5eaec906e946f054e7077", - "reference": "85193c0b0cb5c47894b5eaec906e946f054e7077", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", "shasum": "" }, "require": { @@ -1348,7 +1348,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.0.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" }, "funding": [ { @@ -1356,7 +1356,7 @@ "type": "github" } ], - "time": "2023-09-17T21:38:23+00:00" + "time": "2024-02-07T09:43:46+00:00" }, { "name": "fig/http-message-util", @@ -2078,16 +2078,16 @@ }, { "name": "laravel/framework", - "version": "v10.43.0", + "version": "v10.46.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "4f7802dfc9993cb57cf69615491ce1a7eb2e9529" + "reference": "5e95946a8283a8d5c015035793f9c61c297e937f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/4f7802dfc9993cb57cf69615491ce1a7eb2e9529", - "reference": "4f7802dfc9993cb57cf69615491ce1a7eb2e9529", + "url": "https://api.github.com/repos/laravel/framework/zipball/5e95946a8283a8d5c015035793f9c61c297e937f", + "reference": "5e95946a8283a8d5c015035793f9c61c297e937f", "shasum": "" }, "require": { @@ -2135,6 +2135,7 @@ "conflict": { "carbonphp/carbon-doctrine-types": ">=3.0", "doctrine/dbal": ">=4.0", + "phpunit/phpunit": ">=11.0.0", "tightenco/collect": "<5.5.33" }, "provide": { @@ -2279,20 +2280,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-01-30T16:25:02+00:00" + "time": "2024-02-27T16:46:54+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.15", + "version": "v0.1.16", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "d814a27514d99b03c85aa42b22cfd946568636c1" + "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/d814a27514d99b03c85aa42b22cfd946568636c1", - "reference": "d814a27514d99b03c85aa42b22cfd946568636c1", + "url": "https://api.github.com/repos/laravel/prompts/zipball/ca6872ab6aec3ab61db3a61f83a6caf764ec7781", + "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781", "shasum": "" }, "require": { @@ -2334,9 +2335,9 @@ ], "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.15" + "source": "https://github.com/laravel/prompts/tree/v0.1.16" }, - "time": "2023-12-29T22:37:42+00:00" + "time": "2024-02-21T19:25:27+00:00" }, { "name": "laravel/sanctum", @@ -2466,16 +2467,16 @@ }, { "name": "laravel/telescope", - "version": "v4.17.5", + "version": "v4.17.6", "source": { "type": "git", "url": "https://github.com/laravel/telescope.git", - "reference": "2c5295261d1459e4f9b157c407a663a6685f3ddf" + "reference": "2d453dc629b27e8cf39fb1217aba062f8c54e690" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/telescope/zipball/2c5295261d1459e4f9b157c407a663a6685f3ddf", - "reference": "2c5295261d1459e4f9b157c407a663a6685f3ddf", + "url": "https://api.github.com/repos/laravel/telescope/zipball/2d453dc629b27e8cf39fb1217aba062f8c54e690", + "reference": "2d453dc629b27e8cf39fb1217aba062f8c54e690", "shasum": "" }, "require": { @@ -2531,9 +2532,9 @@ ], "support": { "issues": "https://github.com/laravel/telescope/issues", - "source": "https://github.com/laravel/telescope/tree/v4.17.5" + "source": "https://github.com/laravel/telescope/tree/v4.17.6" }, - "time": "2024-01-30T15:41:45+00:00" + "time": "2024-02-08T15:04:38+00:00" }, { "name": "laravel/tinker", @@ -2672,16 +2673,16 @@ }, { "name": "league/commonmark", - "version": "2.4.1", + "version": "2.4.2", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5" + "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5", - "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91c24291965bd6d7c46c46a12ba7492f83b1cadf", + "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf", "shasum": "" }, "require": { @@ -2694,7 +2695,7 @@ }, "require-dev": { "cebe/markdown": "^1.0", - "commonmark/cmark": "0.30.0", + "commonmark/cmark": "0.30.3", "commonmark/commonmark.js": "0.30.0", "composer/package-versions-deprecated": "^1.8", "embed/embed": "^4.4", @@ -2704,10 +2705,10 @@ "michelf/php-markdown": "^1.4 || ^2.0", "nyholm/psr7": "^1.5", "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.21", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "symfony/finder": "^5.3 | ^6.0 || ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", "unleashedtech/php-coding-standard": "^3.1.1", "vimeo/psalm": "^4.24.0 || ^5.0.0" }, @@ -2774,7 +2775,7 @@ "type": "tidelift" } ], - "time": "2023-08-30T16:55:00+00:00" + "time": "2024-02-02T11:59:32+00:00" }, { "name": "league/config", @@ -2860,16 +2861,16 @@ }, { "name": "league/flysystem", - "version": "3.23.1", + "version": "3.24.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "199e1aebbe3e62bd39f4d4fc8c61ce0b3786197e" + "reference": "b25a361508c407563b34fac6f64a8a17a8819675" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/199e1aebbe3e62bd39f4d4fc8c61ce0b3786197e", - "reference": "199e1aebbe3e62bd39f4d4fc8c61ce0b3786197e", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b25a361508c407563b34fac6f64a8a17a8819675", + "reference": "b25a361508c407563b34fac6f64a8a17a8819675", "shasum": "" }, "require": { @@ -2889,7 +2890,7 @@ "require-dev": { "async-aws/s3": "^1.5 || ^2.0", "async-aws/simple-s3": "^1.1 || ^2.0", - "aws/aws-sdk-php": "^3.220.0", + "aws/aws-sdk-php": "^3.295.10", "composer/semver": "^3.0", "ext-fileinfo": "*", "ext-ftp": "*", @@ -2900,7 +2901,7 @@ "phpseclib/phpseclib": "^3.0.34", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.5.11|^10.0", - "sabre/dav": "^4.3.1" + "sabre/dav": "^4.6.0" }, "type": "library", "autoload": { @@ -2934,7 +2935,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.23.1" + "source": "https://github.com/thephpleague/flysystem/tree/3.24.0" }, "funding": [ { @@ -2946,7 +2947,7 @@ "type": "github" } ], - "time": "2024-01-26T18:42:03+00:00" + "time": "2024-02-04T12:10:17+00:00" }, { "name": "league/flysystem-local", @@ -3414,16 +3415,16 @@ }, { "name": "nesbot/carbon", - "version": "2.72.2", + "version": "2.72.3", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "3e7edc41b58d65509baeb0d4a14c8fa41d627130" + "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/3e7edc41b58d65509baeb0d4a14c8fa41d627130", - "reference": "3e7edc41b58d65509baeb0d4a14c8fa41d627130", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0c6fd108360c562f6e4fd1dedb8233b423e91c83", + "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83", "shasum": "" }, "require": { @@ -3517,7 +3518,7 @@ "type": "tidelift" } ], - "time": "2024-01-19T00:21:53+00:00" + "time": "2024-01-25T10:35:09+00:00" }, { "name": "nette/schema", @@ -4624,16 +4625,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.5", + "version": "10.5.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "ed21115d505b4b4f7dc7b5651464e19a2c7f7856" + "reference": "0d968f6323deb3dbfeba5bfd4929b9415eb7a9a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ed21115d505b4b4f7dc7b5651464e19a2c7f7856", - "reference": "ed21115d505b4b4f7dc7b5651464e19a2c7f7856", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0d968f6323deb3dbfeba5bfd4929b9415eb7a9a4", + "reference": "0d968f6323deb3dbfeba5bfd4929b9415eb7a9a4", "shasum": "" }, "require": { @@ -4705,7 +4706,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.5" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.11" }, "funding": [ { @@ -4721,7 +4722,7 @@ "type": "tidelift" } ], - "time": "2023-12-27T15:13:52+00:00" + "time": "2024-02-25T14:05:00+00:00" }, { "name": "picqer/php-barcode-generator", @@ -7412,20 +7413,20 @@ }, { "name": "spatie/laravel-package-tools", - "version": "1.16.1", + "version": "1.16.2", "source": { "type": "git", "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "cc7c991555a37f9fa6b814aa03af73f88026a83d" + "reference": "e62eeb1fe8a8a0b2e83227a6c279c8c59f7d3a15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/cc7c991555a37f9fa6b814aa03af73f88026a83d", - "reference": "cc7c991555a37f9fa6b814aa03af73f88026a83d", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/e62eeb1fe8a8a0b2e83227a6c279c8c59f7d3a15", + "reference": "e62eeb1fe8a8a0b2e83227a6c279c8c59f7d3a15", "shasum": "" }, "require": { - "illuminate/contracts": "^9.28|^10.0", + "illuminate/contracts": "^9.28|^10.0|^11.0", "php": "^8.0" }, "require-dev": { @@ -7460,7 +7461,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.1" + "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.2" }, "funding": [ { @@ -7468,7 +7469,7 @@ "type": "github" } ], - "time": "2023-08-23T09:04:39+00:00" + "time": "2024-01-11T08:43:00+00:00" }, { "name": "spatie/temporary-directory", @@ -7533,16 +7534,16 @@ }, { "name": "symfony/console", - "version": "v6.4.2", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0254811a143e6bc6c8deea08b589a7e68a37f625" + "reference": "0d9e4eb5ad413075624378f474c4167ea202de78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0254811a143e6bc6c8deea08b589a7e68a37f625", - "reference": "0254811a143e6bc6c8deea08b589a7e68a37f625", + "url": "https://api.github.com/repos/symfony/console/zipball/0d9e4eb5ad413075624378f474c4167ea202de78", + "reference": "0d9e4eb5ad413075624378f474c4167ea202de78", "shasum": "" }, "require": { @@ -7607,7 +7608,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.2" + "source": "https://github.com/symfony/console/tree/v6.4.4" }, "funding": [ { @@ -7623,20 +7624,20 @@ "type": "tidelift" } ], - "time": "2023-12-10T16:15:48+00:00" + "time": "2024-02-22T20:27:10+00:00" }, { "name": "symfony/css-selector", - "version": "v6.4.0", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4" + "reference": "ee0f7ed5cf298cc019431bb3b3977ebc52b86229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/d036c6c0d0b09e24a14a35f8292146a658f986e4", - "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/ee0f7ed5cf298cc019431bb3b3977ebc52b86229", + "reference": "ee0f7ed5cf298cc019431bb3b3977ebc52b86229", "shasum": "" }, "require": { @@ -7672,7 +7673,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.4.0" + "source": "https://github.com/symfony/css-selector/tree/v6.4.3" }, "funding": [ { @@ -7688,7 +7689,7 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:40:20+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/deprecation-contracts", @@ -7759,16 +7760,16 @@ }, { "name": "symfony/error-handler", - "version": "v6.4.0", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788" + "reference": "c725219bdf2afc59423c32793d5019d2a904e13a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c873490a1c97b3a0a4838afc36ff36c112d02788", - "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c725219bdf2afc59423c32793d5019d2a904e13a", + "reference": "c725219bdf2afc59423c32793d5019d2a904e13a", "shasum": "" }, "require": { @@ -7814,7 +7815,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.0" + "source": "https://github.com/symfony/error-handler/tree/v6.4.4" }, "funding": [ { @@ -7830,20 +7831,20 @@ "type": "tidelift" } ], - "time": "2023-10-18T09:43:34+00:00" + "time": "2024-02-22T20:27:10+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.2", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "e95216850555cd55e71b857eb9d6c2674124603a" + "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e95216850555cd55e71b857eb9d6c2674124603a", - "reference": "e95216850555cd55e71b857eb9d6c2674124603a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ae9d3a6f3003a6caf56acd7466d8d52378d44fef", + "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef", "shasum": "" }, "require": { @@ -7894,7 +7895,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.2" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.3" }, "funding": [ { @@ -7910,7 +7911,7 @@ "type": "tidelift" } ], - "time": "2023-12-27T22:16:42+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -8054,16 +8055,16 @@ }, { "name": "symfony/http-client", - "version": "v6.4.2", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "fc0944665bd932cf32a7b8a1d009466afc16528f" + "reference": "aa6281ddb3be1b3088f329307d05abfbbeb97649" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/fc0944665bd932cf32a7b8a1d009466afc16528f", - "reference": "fc0944665bd932cf32a7b8a1d009466afc16528f", + "url": "https://api.github.com/repos/symfony/http-client/zipball/aa6281ddb3be1b3088f329307d05abfbbeb97649", + "reference": "aa6281ddb3be1b3088f329307d05abfbbeb97649", "shasum": "" }, "require": { @@ -8127,7 +8128,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.2" + "source": "https://github.com/symfony/http-client/tree/v6.4.4" }, "funding": [ { @@ -8143,7 +8144,7 @@ "type": "tidelift" } ], - "time": "2023-12-02T12:49:56+00:00" + "time": "2024-02-14T16:28:12+00:00" }, { "name": "symfony/http-client-contracts", @@ -8225,16 +8226,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.4.2", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "172d807f9ef3fc3fbed8377cc57c20d389269271" + "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/172d807f9ef3fc3fbed8377cc57c20d389269271", - "reference": "172d807f9ef3fc3fbed8377cc57c20d389269271", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ebc713bc6e6f4b53f46539fc158be85dfcd77304", + "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304", "shasum": "" }, "require": { @@ -8282,7 +8283,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.2" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.4" }, "funding": [ { @@ -8298,20 +8299,20 @@ "type": "tidelift" } ], - "time": "2023-12-27T22:16:42+00:00" + "time": "2024-02-08T15:01:18+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.2", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "13e8387320b5942d0dc408440c888e2d526efef4" + "reference": "7a186f64a7f02787c04e8476538624d6aa888e42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/13e8387320b5942d0dc408440c888e2d526efef4", - "reference": "13e8387320b5942d0dc408440c888e2d526efef4", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7a186f64a7f02787c04e8476538624d6aa888e42", + "reference": "7a186f64a7f02787c04e8476538624d6aa888e42", "shasum": "" }, "require": { @@ -8360,7 +8361,7 @@ "symfony/process": "^5.4|^6.0|^7.0", "symfony/property-access": "^5.4.5|^6.0.5|^7.0", "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.3|^7.0", + "symfony/serializer": "^6.4.4|^7.0.4", "symfony/stopwatch": "^5.4|^6.0|^7.0", "symfony/translation": "^5.4|^6.0|^7.0", "symfony/translation-contracts": "^2.5|^3", @@ -8395,7 +8396,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.2" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.4" }, "funding": [ { @@ -8411,20 +8412,20 @@ "type": "tidelift" } ], - "time": "2023-12-30T15:31:44+00:00" + "time": "2024-02-27T06:32:13+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.2", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "6da89e5c9202f129717a770a03183fb140720168" + "reference": "791c5d31a8204cf3db0c66faab70282307f4376b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/6da89e5c9202f129717a770a03183fb140720168", - "reference": "6da89e5c9202f129717a770a03183fb140720168", + "url": "https://api.github.com/repos/symfony/mailer/zipball/791c5d31a8204cf3db0c66faab70282307f4376b", + "reference": "791c5d31a8204cf3db0c66faab70282307f4376b", "shasum": "" }, "require": { @@ -8475,7 +8476,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.2" + "source": "https://github.com/symfony/mailer/tree/v6.4.4" }, "funding": [ { @@ -8491,20 +8492,20 @@ "type": "tidelift" } ], - "time": "2023-12-19T09:12:31+00:00" + "time": "2024-02-03T21:33:47+00:00" }, { "name": "symfony/mailgun-mailer", - "version": "v6.4.0", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/mailgun-mailer.git", - "reference": "72d2f72f2016e559d0152188bef5a5dc9ebf5ec7" + "reference": "8c018872b40ce050590b6d18cf741db0c8313435" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/72d2f72f2016e559d0152188bef5a5dc9ebf5ec7", - "reference": "72d2f72f2016e559d0152188bef5a5dc9ebf5ec7", + "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/8c018872b40ce050590b6d18cf741db0c8313435", + "reference": "8c018872b40ce050590b6d18cf741db0c8313435", "shasum": "" }, "require": { @@ -8544,7 +8545,7 @@ "description": "Symfony Mailgun Mailer Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailgun-mailer/tree/v6.4.0" + "source": "https://github.com/symfony/mailgun-mailer/tree/v6.4.4" }, "funding": [ { @@ -8560,20 +8561,20 @@ "type": "tidelift" } ], - "time": "2023-11-06T17:20:05+00:00" + "time": "2024-02-14T06:31:46+00:00" }, { "name": "symfony/mime", - "version": "v6.4.0", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205" + "reference": "5017e0a9398c77090b7694be46f20eb796262a34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", - "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", + "url": "https://api.github.com/repos/symfony/mime/zipball/5017e0a9398c77090b7694be46f20eb796262a34", + "reference": "5017e0a9398c77090b7694be46f20eb796262a34", "shasum": "" }, "require": { @@ -8628,7 +8629,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.0" + "source": "https://github.com/symfony/mime/tree/v6.4.3" }, "funding": [ { @@ -8644,20 +8645,20 @@ "type": "tidelift" } ], - "time": "2023-10-17T11:49:05+00:00" + "time": "2024-01-30T08:32:12+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", "shasum": "" }, "require": { @@ -8671,9 +8672,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -8710,7 +8708,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, "funding": [ { @@ -8726,20 +8724,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1" + "reference": "cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/6de50471469b8c9afc38164452ab2b6170ee71c1", - "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f", + "reference": "cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f", "shasum": "" }, "require": { @@ -8753,9 +8751,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -8793,7 +8788,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.29.0" }, "funding": [ { @@ -8809,20 +8804,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", "shasum": "" }, "require": { @@ -8833,9 +8828,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -8874,7 +8866,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" }, "funding": [ { @@ -8890,20 +8882,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919", + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919", "shasum": "" }, "require": { @@ -8916,9 +8908,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -8961,7 +8950,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0" }, "funding": [ { @@ -8977,20 +8966,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:30:37+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", "shasum": "" }, "require": { @@ -9001,9 +8990,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -9045,7 +9031,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" }, "funding": [ { @@ -9061,20 +9047,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { @@ -9088,9 +9074,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -9128,7 +9111,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -9144,20 +9127,20 @@ "type": "tidelift" } ], - "time": "2023-07-28T09:04:16+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25", "shasum": "" }, "require": { @@ -9165,9 +9148,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -9204,7 +9184,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0" }, "funding": [ { @@ -9220,20 +9200,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", "shasum": "" }, "require": { @@ -9241,9 +9221,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -9287,7 +9264,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" }, "funding": [ { @@ -9303,20 +9280,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff", + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff", "shasum": "" }, "require": { @@ -9325,9 +9302,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -9367,7 +9341,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0" }, "funding": [ { @@ -9383,20 +9357,20 @@ "type": "tidelift" } ], - "time": "2023-08-16T06:22:46+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e" + "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/9c44518a5aff8da565c8a55dbe85d2769e6f630e", - "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/3abdd21b0ceaa3000ee950097bc3cf9efc137853", + "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853", "shasum": "" }, "require": { @@ -9410,9 +9384,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -9449,7 +9420,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.29.0" }, "funding": [ { @@ -9465,20 +9436,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/process", - "version": "v6.4.2", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "c4b1ef0bc80533d87a2e969806172f1c2a980241" + "reference": "710e27879e9be3395de2b98da3f52a946039f297" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c4b1ef0bc80533d87a2e969806172f1c2a980241", - "reference": "c4b1ef0bc80533d87a2e969806172f1c2a980241", + "url": "https://api.github.com/repos/symfony/process/zipball/710e27879e9be3395de2b98da3f52a946039f297", + "reference": "710e27879e9be3395de2b98da3f52a946039f297", "shasum": "" }, "require": { @@ -9510,7 +9481,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.2" + "source": "https://github.com/symfony/process/tree/v6.4.4" }, "funding": [ { @@ -9526,7 +9497,7 @@ "type": "tidelift" } ], - "time": "2023-12-22T16:42:54+00:00" + "time": "2024-02-20T12:31:00+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -9619,16 +9590,16 @@ }, { "name": "symfony/routing", - "version": "v6.4.2", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "98eab13a07fddc85766f1756129c69f207ffbc21" + "reference": "3b2957ad54902f0f544df83e3d58b38d7e8e5842" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/98eab13a07fddc85766f1756129c69f207ffbc21", - "reference": "98eab13a07fddc85766f1756129c69f207ffbc21", + "url": "https://api.github.com/repos/symfony/routing/zipball/3b2957ad54902f0f544df83e3d58b38d7e8e5842", + "reference": "3b2957ad54902f0f544df83e3d58b38d7e8e5842", "shasum": "" }, "require": { @@ -9682,7 +9653,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.2" + "source": "https://github.com/symfony/routing/tree/v6.4.3" }, "funding": [ { @@ -9698,7 +9669,7 @@ "type": "tidelift" } ], - "time": "2023-12-29T15:34:34+00:00" + "time": "2024-01-30T13:55:02+00:00" }, { "name": "symfony/service-contracts", @@ -9784,16 +9755,16 @@ }, { "name": "symfony/string", - "version": "v6.4.2", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "7cb80bc10bfcdf6b5492741c0b9357dac66940bc" + "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/7cb80bc10bfcdf6b5492741c0b9357dac66940bc", - "reference": "7cb80bc10bfcdf6b5492741c0b9357dac66940bc", + "url": "https://api.github.com/repos/symfony/string/zipball/4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", + "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", "shasum": "" }, "require": { @@ -9850,7 +9821,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.2" + "source": "https://github.com/symfony/string/tree/v6.4.4" }, "funding": [ { @@ -9866,20 +9837,20 @@ "type": "tidelift" } ], - "time": "2023-12-10T16:15:48+00:00" + "time": "2024-02-01T13:16:41+00:00" }, { "name": "symfony/translation", - "version": "v6.4.2", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a2ab2ec1a462e53016de8e8d5e8912bfd62ea681" + "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a2ab2ec1a462e53016de8e8d5e8912bfd62ea681", - "reference": "a2ab2ec1a462e53016de8e8d5e8912bfd62ea681", + "url": "https://api.github.com/repos/symfony/translation/zipball/bce6a5a78e94566641b2594d17e48b0da3184a8e", + "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e", "shasum": "" }, "require": { @@ -9902,7 +9873,7 @@ "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.13", + "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", "symfony/config": "^5.4|^6.0|^7.0", "symfony/console": "^5.4|^6.0|^7.0", @@ -9945,7 +9916,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.2" + "source": "https://github.com/symfony/translation/tree/v6.4.4" }, "funding": [ { @@ -9961,7 +9932,7 @@ "type": "tidelift" } ], - "time": "2023-12-18T09:25:29+00:00" + "time": "2024-02-20T13:16:58+00:00" }, { "name": "symfony/translation-contracts", @@ -10043,16 +10014,16 @@ }, { "name": "symfony/uid", - "version": "v6.4.0", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92" + "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/8092dd1b1a41372110d06374f99ee62f7f0b9a92", - "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92", + "url": "https://api.github.com/repos/symfony/uid/zipball/1d31267211cc3a2fff32bcfc7c1818dac41b6fc0", + "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0", "shasum": "" }, "require": { @@ -10097,7 +10068,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.0" + "source": "https://github.com/symfony/uid/tree/v6.4.3" }, "funding": [ { @@ -10113,20 +10084,20 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:18:17+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.2", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "68d6573ec98715ddcae5a0a85bee3c1c27a4c33f" + "reference": "b439823f04c98b84d4366c79507e9da6230944b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/68d6573ec98715ddcae5a0a85bee3c1c27a4c33f", - "reference": "68d6573ec98715ddcae5a0a85bee3c1c27a4c33f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b439823f04c98b84d4366c79507e9da6230944b1", + "reference": "b439823f04c98b84d4366c79507e9da6230944b1", "shasum": "" }, "require": { @@ -10182,7 +10153,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.2" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.4" }, "funding": [ { @@ -10198,7 +10169,7 @@ "type": "tidelift" } ], - "time": "2023-12-28T19:16:56+00:00" + "time": "2024-02-15T11:23:52+00:00" }, { "name": "theseer/tokenizer", @@ -10901,16 +10872,16 @@ }, { "name": "laravel/pint", - "version": "v1.13.10", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "e2b5060885694ca30ac008c05dc9d47f10ed1abf" + "reference": "6b127276e3f263f7bb17d5077e9e0269e61b2a0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/e2b5060885694ca30ac008c05dc9d47f10ed1abf", - "reference": "e2b5060885694ca30ac008c05dc9d47f10ed1abf", + "url": "https://api.github.com/repos/laravel/pint/zipball/6b127276e3f263f7bb17d5077e9e0269e61b2a0e", + "reference": "6b127276e3f263f7bb17d5077e9e0269e61b2a0e", "shasum": "" }, "require": { @@ -10921,13 +10892,13 @@ "php": "^8.1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.47.1", - "illuminate/view": "^10.41.0", + "friendsofphp/php-cs-fixer": "^3.49.0", + "illuminate/view": "^10.43.0", "larastan/larastan": "^2.8.1", "laravel-zero/framework": "^10.3.0", "mockery/mockery": "^1.6.7", "nunomaduro/termwind": "^1.15.1", - "pestphp/pest": "^2.31.0" + "pestphp/pest": "^2.33.6" }, "bin": [ "builds/pint" @@ -10963,7 +10934,7 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2024-01-22T09:04:15+00:00" + "time": "2024-02-20T17:38:05+00:00" }, { "name": "mockery/mockery", @@ -11208,21 +11179,20 @@ }, { "name": "spatie/flare-client-php", - "version": "1.4.3", + "version": "1.4.4", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "5db2fdd743c3ede33f2a5367d89ec1a7c9c1d1ec" + "reference": "17082e780752d346c2db12ef5d6bee8e835e399c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/5db2fdd743c3ede33f2a5367d89ec1a7c9c1d1ec", - "reference": "5db2fdd743c3ede33f2a5367d89ec1a7c9c1d1ec", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/17082e780752d346c2db12ef5d6bee8e835e399c", + "reference": "17082e780752d346c2db12ef5d6bee8e835e399c", "shasum": "" }, "require": { "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", - "nesbot/carbon": "^2.62.1", "php": "^8.0", "spatie/backtrace": "^1.5.2", "symfony/http-foundation": "^5.2|^6.0|^7.0", @@ -11266,7 +11236,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.4.3" + "source": "https://github.com/spatie/flare-client-php/tree/1.4.4" }, "funding": [ { @@ -11274,7 +11244,7 @@ "type": "github" } ], - "time": "2023-10-17T15:54:07+00:00" + "time": "2024-01-31T14:18:45+00:00" }, { "name": "spatie/ignition", @@ -11361,16 +11331,16 @@ }, { "name": "spatie/laravel-ignition", - "version": "2.4.1", + "version": "2.4.2", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "005e1e7b1232f3b22d7e7be3f602693efc7dba67" + "reference": "351504f4570e32908839fc5a2dc53bf77d02f85e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/005e1e7b1232f3b22d7e7be3f602693efc7dba67", - "reference": "005e1e7b1232f3b22d7e7be3f602693efc7dba67", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/351504f4570e32908839fc5a2dc53bf77d02f85e", + "reference": "351504f4570e32908839fc5a2dc53bf77d02f85e", "shasum": "" }, "require": { @@ -11449,7 +11419,7 @@ "type": "github" } ], - "time": "2024-01-12T13:14:58+00:00" + "time": "2024-02-09T16:08:40+00:00" } ], "aliases": [], diff --git a/config/app.php b/config/app.php index 5b53e592d..d120b65b7 100644 --- a/config/app.php +++ b/config/app.php @@ -13,7 +13,7 @@ | */ - 'name' => env('APP_NAME', 'Laravel'), + 'name' => env( 'APP_NAME', 'Laravel' ), /* |-------------------------------------------------------------------------- @@ -26,7 +26,7 @@ | */ - 'env' => env('APP_ENV', 'production'), + 'env' => env( 'APP_ENV', 'production' ), /* |-------------------------------------------------------------------------- @@ -39,7 +39,7 @@ | */ - 'debug' => (bool) env('APP_DEBUG', false), + 'debug' => (bool) env( 'APP_DEBUG', false ), /* |-------------------------------------------------------------------------- @@ -52,9 +52,9 @@ | */ - 'url' => env('APP_URL', 'http://localhost'), + 'url' => env( 'APP_URL', 'http://localhost' ), - 'asset_url' => env('ASSET_URL', null), + 'asset_url' => env( 'ASSET_URL', null ), /* |-------------------------------------------------------------------------- @@ -119,7 +119,7 @@ | */ - 'key' => env('APP_KEY'), + 'key' => env( 'APP_KEY' ), 'cipher' => 'AES-256-CBC', diff --git a/config/broadcasting.php b/config/broadcasting.php index b2ca8b805..fd804103f 100644 --- a/config/broadcasting.php +++ b/config/broadcasting.php @@ -15,7 +15,7 @@ | */ - 'default' => env('BROADCAST_DRIVER', 'null'), + 'default' => env( 'BROADCAST_DRIVER', 'null' ), /* |-------------------------------------------------------------------------- @@ -32,16 +32,16 @@ 'pusher' => [ 'driver' => 'pusher', - 'key' => env('PUSHER_APP_KEY'), - 'secret' => env('PUSHER_APP_SECRET'), - 'app_id' => env('PUSHER_APP_ID'), + 'key' => env( 'PUSHER_APP_KEY' ), + 'secret' => env( 'PUSHER_APP_SECRET' ), + 'app_id' => env( 'PUSHER_APP_ID' ), 'options' => [ - 'cluster' => env('PUSHER_APP_CLUSTER'), - 'useTLS' => env('NS_SOCKET_SECURED', false) ? true : false, - 'host' => env('NS_SOCKET_DOMAIN', env('SESSION_DOMAIN')), - 'port' => env('NS_SOCKET_PORT', 6001), - 'scheme' => env('NS_SOCKET_SECURED', false) ? 'https' : 'http', - 'encrypted' => env('NS_SOCKET_SECURED', false) ? true : false, + 'cluster' => env( 'PUSHER_APP_CLUSTER' ), + 'useTLS' => env( 'NS_SOCKET_SECURED', false ) ? true : false, + 'host' => env( 'NS_SOCKET_DOMAIN', env( 'SESSION_DOMAIN' ) ), + 'port' => env( 'NS_SOCKET_PORT', 6001 ), + 'scheme' => env( 'NS_SOCKET_SECURED', false ) ? 'https' : 'http', + 'encrypted' => env( 'NS_SOCKET_SECURED', false ) ? true : false, 'curl_options' => [ CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0, diff --git a/config/cache.php b/config/cache.php index a8eaf93b1..21c64aabe 100644 --- a/config/cache.php +++ b/config/cache.php @@ -18,7 +18,7 @@ | */ - 'default' => env('CACHE_DRIVER', 'file'), + 'default' => env( 'CACHE_DRIVER', 'file' ), /* |-------------------------------------------------------------------------- @@ -50,23 +50,23 @@ 'file' => [ 'driver' => 'file', - 'path' => storage_path('framework/cache/data'), + 'path' => storage_path( 'framework/cache/data' ), ], 'memcached' => [ 'driver' => 'memcached', - 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'persistent_id' => env( 'MEMCACHED_PERSISTENT_ID' ), 'sasl' => [ - env('MEMCACHED_USERNAME'), - env('MEMCACHED_PASSWORD'), + env( 'MEMCACHED_USERNAME' ), + env( 'MEMCACHED_PASSWORD' ), ], 'options' => [ // Memcached::OPT_CONNECT_TIMEOUT => 2000, ], 'servers' => [ [ - 'host' => env('MEMCACHED_HOST', '127.0.0.1'), - 'port' => env('MEMCACHED_PORT', 11211), + 'host' => env( 'MEMCACHED_HOST', '127.0.0.1' ), + 'port' => env( 'MEMCACHED_PORT', 11211 ), 'weight' => 100, ], ], @@ -79,11 +79,11 @@ 'dynamodb' => [ 'driver' => 'dynamodb', - 'key' => env('AWS_ACCESS_KEY_ID'), - 'secret' => env('AWS_SECRET_ACCESS_KEY'), - 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), - 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), - 'endpoint' => env('DYNAMODB_ENDPOINT'), + 'key' => env( 'AWS_ACCESS_KEY_ID' ), + 'secret' => env( 'AWS_SECRET_ACCESS_KEY' ), + 'region' => env( 'AWS_DEFAULT_REGION', 'us-east-1' ), + 'table' => env( 'DYNAMODB_CACHE_TABLE', 'cache' ), + 'endpoint' => env( 'DYNAMODB_ENDPOINT' ), ], ], @@ -99,6 +99,6 @@ | */ - 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache'), + 'prefix' => env( 'CACHE_PREFIX', Str::slug( env( 'APP_NAME', 'laravel' ), '_' ) . '_cache' ), ]; diff --git a/config/database.php b/config/database.php index b6d608e60..bde050c15 100644 --- a/config/database.php +++ b/config/database.php @@ -15,7 +15,7 @@ | */ - 'default' => env('DB_CONNECTION', 'mysql'), + 'default' => env( 'DB_CONNECTION', 'mysql' ), /* |-------------------------------------------------------------------------- @@ -37,40 +37,40 @@ 'sqlite' => [ 'driver' => 'sqlite', - 'url' => env('DATABASE_URL'), - 'database' => env('DB_DATABASE', database_path('database.sqlite')), - 'prefix' => env('DB_PREFIX', ''), - 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + 'url' => env( 'DATABASE_URL' ), + 'database' => env( 'DB_DATABASE', database_path( 'database.sqlite' ) ), + 'prefix' => env( 'DB_PREFIX', '' ), + 'foreign_key_constraints' => env( 'DB_FOREIGN_KEYS', true ), ], 'mysql' => [ 'driver' => 'mysql', - 'url' => env('DATABASE_URL'), - 'host' => env('DB_HOST', '127.0.0.1'), - 'port' => env('DB_PORT', '3306'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), - 'password' => env('DB_PASSWORD', ''), - 'unix_socket' => env('DB_SOCKET', ''), + 'url' => env( 'DATABASE_URL' ), + 'host' => env( 'DB_HOST', '127.0.0.1' ), + 'port' => env( 'DB_PORT', '3306' ), + 'database' => env( 'DB_DATABASE', 'forge' ), + 'username' => env( 'DB_USERNAME', 'forge' ), + 'password' => env( 'DB_PASSWORD', '' ), + 'unix_socket' => env( 'DB_SOCKET', '' ), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => env('DB_PREFIX', ''), + 'prefix' => env( 'DB_PREFIX', '' ), 'prefix_indexes' => true, 'strict' => true, 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], + 'options' => extension_loaded( 'pdo_mysql' ) ? array_filter( [ + PDO::MYSQL_ATTR_SSL_CA => env( 'MYSQL_ATTR_SSL_CA' ), + ] ) : [], ], 'pgsql' => [ 'driver' => 'pgsql', - 'url' => env('DATABASE_URL'), - 'host' => env('DB_HOST', '127.0.0.1'), - 'port' => env('DB_PORT', '5432'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), - 'password' => env('DB_PASSWORD', ''), + 'url' => env( 'DATABASE_URL' ), + 'host' => env( 'DB_HOST', '127.0.0.1' ), + 'port' => env( 'DB_PORT', '5432' ), + 'database' => env( 'DB_DATABASE', 'forge' ), + 'username' => env( 'DB_USERNAME', 'forge' ), + 'password' => env( 'DB_PASSWORD', '' ), 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, @@ -80,12 +80,12 @@ 'sqlsrv' => [ 'driver' => 'sqlsrv', - 'url' => env('DATABASE_URL'), - 'host' => env('DB_HOST', 'localhost'), - 'port' => env('DB_PORT', '1433'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), - 'password' => env('DB_PASSWORD', ''), + 'url' => env( 'DATABASE_URL' ), + 'host' => env( 'DB_HOST', 'localhost' ), + 'port' => env( 'DB_PORT', '1433' ), + 'database' => env( 'DB_DATABASE', 'forge' ), + 'username' => env( 'DB_USERNAME', 'forge' ), + 'password' => env( 'DB_PASSWORD', '' ), 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, @@ -119,27 +119,27 @@ 'redis' => [ - 'client' => env('REDIS_CLIENT', 'phpredis'), + 'client' => env( 'REDIS_CLIENT', 'phpredis' ), 'options' => [ - 'cluster' => env('REDIS_CLUSTER', 'redis'), - 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'), + 'cluster' => env( 'REDIS_CLUSTER', 'redis' ), + 'prefix' => env( 'REDIS_PREFIX', Str::slug( env( 'APP_NAME', 'laravel' ), '_' ) . '_database_' ), ], 'default' => [ - 'url' => env('REDIS_URL'), - 'host' => env('REDIS_HOST', '127.0.0.1'), - 'password' => env('REDIS_PASSWORD', null), - 'port' => env('REDIS_PORT', '6379'), - 'database' => env('REDIS_DB', '0'), + 'url' => env( 'REDIS_URL' ), + 'host' => env( 'REDIS_HOST', '127.0.0.1' ), + 'password' => env( 'REDIS_PASSWORD', null ), + 'port' => env( 'REDIS_PORT', '6379' ), + 'database' => env( 'REDIS_DB', '0' ), ], 'cache' => [ - 'url' => env('REDIS_URL'), - 'host' => env('REDIS_HOST', '127.0.0.1'), - 'password' => env('REDIS_PASSWORD', null), - 'port' => env('REDIS_PORT', '6379'), - 'database' => env('REDIS_CACHE_DB', '1'), + 'url' => env( 'REDIS_URL' ), + 'host' => env( 'REDIS_HOST', '127.0.0.1' ), + 'password' => env( 'REDIS_PASSWORD', null ), + 'port' => env( 'REDIS_PORT', '6379' ), + 'database' => env( 'REDIS_CACHE_DB', '1' ), ], ], diff --git a/config/filesystems.php b/config/filesystems.php index 1f82e015d..bbc66f64a 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -13,7 +13,7 @@ | */ - 'default' => env('FILESYSTEM_DRIVER', 'local'), + 'default' => env( 'FILESYSTEM_DRIVER', 'local' ), /* |-------------------------------------------------------------------------- @@ -26,7 +26,7 @@ | */ - 'cloud' => env('FILESYSTEM_CLOUD', 's3'), + 'cloud' => env( 'FILESYSTEM_CLOUD', 's3' ), /* |-------------------------------------------------------------------------- @@ -45,30 +45,30 @@ 'local' => [ 'driver' => 'local', - 'root' => storage_path('app'), + 'root' => storage_path( 'app' ), ], 'snapshots' => [ 'driver' => 'local', - 'root' => storage_path('snapshots'), + 'root' => storage_path( 'snapshots' ), ], 'public' => [ 'driver' => 'local', - 'root' => storage_path('app/public'), - 'url' => env('APP_URL') . '/storage', + 'root' => storage_path( 'app/public' ), + 'url' => env( 'APP_URL' ) . '/storage', 'visibility' => 'public', 'throw' => true, ], 's3' => [ 'driver' => 's3', - 'key' => env('AWS_ACCESS_KEY_ID'), - 'secret' => env('AWS_SECRET_ACCESS_KEY'), - 'region' => env('AWS_DEFAULT_REGION'), - 'bucket' => env('AWS_BUCKET'), - 'url' => env('AWS_URL'), - 'endpoint' => env('AWS_ENDPOINT'), + 'key' => env( 'AWS_ACCESS_KEY_ID' ), + 'secret' => env( 'AWS_SECRET_ACCESS_KEY' ), + 'region' => env( 'AWS_DEFAULT_REGION' ), + 'bucket' => env( 'AWS_BUCKET' ), + 'url' => env( 'AWS_URL' ), + 'endpoint' => env( 'AWS_ENDPOINT' ), ], 'ns' => [ @@ -78,22 +78,22 @@ 'ns-public' => [ 'driver' => 'local', - 'root' => base_path('public'), + 'root' => base_path( 'public' ), ], 'ns-modules' => [ 'driver' => 'local', - 'root' => base_path('modules'), + 'root' => base_path( 'modules' ), ], 'ns-modules-temp' => [ 'driver' => 'local', - 'root' => storage_path('temporary-files/modules'), + 'root' => storage_path( 'temporary-files/modules' ), ], 'ns-temp' => [ 'driver' => 'local', - 'root' => storage_path('temporary-files'), + 'root' => storage_path( 'temporary-files' ), ], ], @@ -109,7 +109,7 @@ */ 'links' => [ - public_path('storage') => storage_path('app/public'), + public_path( 'storage' ) => storage_path( 'app/public' ), ], ]; diff --git a/config/hashing.php b/config/hashing.php index 842577087..9f3d98c25 100644 --- a/config/hashing.php +++ b/config/hashing.php @@ -29,7 +29,7 @@ */ 'bcrypt' => [ - 'rounds' => env('BCRYPT_ROUNDS', 10), + 'rounds' => env( 'BCRYPT_ROUNDS', 10 ), ], /* diff --git a/config/logging.php b/config/logging.php index 6a80bbf5c..99cfe223e 100644 --- a/config/logging.php +++ b/config/logging.php @@ -17,7 +17,7 @@ | */ - 'default' => env('LOG_CHANNEL', 'daily'), + 'default' => env( 'LOG_CHANNEL', 'daily' ), /* |-------------------------------------------------------------------------- @@ -30,7 +30,7 @@ | */ - 'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'deprecations' => env( 'LOG_DEPRECATIONS_CHANNEL', 'null' ), /* |-------------------------------------------------------------------------- @@ -56,41 +56,41 @@ 'single' => [ 'driver' => 'single', - 'path' => storage_path('logs/laravel.log'), - 'level' => env('LOG_LEVEL', 'debug'), + 'path' => storage_path( 'logs/laravel.log' ), + 'level' => env( 'LOG_LEVEL', 'debug' ), ], 'daily' => [ 'driver' => 'daily', - 'path' => storage_path('logs/laravel.log'), - 'level' => env('LOG_LEVEL', 'debug'), + 'path' => storage_path( 'logs/laravel.log' ), + 'level' => env( 'LOG_LEVEL', 'debug' ), 'days' => 14, ], 'slack' => [ 'driver' => 'slack', - 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'url' => env( 'LOG_SLACK_WEBHOOK_URL' ), 'username' => 'Laravel Log', 'emoji' => ':boom:', - 'level' => env('LOG_LEVEL', 'critical'), + 'level' => env( 'LOG_LEVEL', 'critical' ), ], 'papertrail' => [ 'driver' => 'monolog', - 'level' => env('LOG_LEVEL', 'debug'), - 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'level' => env( 'LOG_LEVEL', 'debug' ), + 'handler' => env( 'LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class ), 'handler_with' => [ - 'host' => env('PAPERTRAIL_URL'), - 'port' => env('PAPERTRAIL_PORT'), - 'connectionString' => 'tls://' . env('PAPERTRAIL_URL') . ':' . env('PAPERTRAIL_PORT'), + 'host' => env( 'PAPERTRAIL_URL' ), + 'port' => env( 'PAPERTRAIL_PORT' ), + 'connectionString' => 'tls://' . env( 'PAPERTRAIL_URL' ) . ':' . env( 'PAPERTRAIL_PORT' ), ], ], 'stderr' => [ 'driver' => 'monolog', - 'level' => env('LOG_LEVEL', 'debug'), + 'level' => env( 'LOG_LEVEL', 'debug' ), 'handler' => StreamHandler::class, - 'formatter' => env('LOG_STDERR_FORMATTER'), + 'formatter' => env( 'LOG_STDERR_FORMATTER' ), 'with' => [ 'stream' => 'php://stderr', ], @@ -98,12 +98,12 @@ 'syslog' => [ 'driver' => 'syslog', - 'level' => env('LOG_LEVEL', 'debug'), + 'level' => env( 'LOG_LEVEL', 'debug' ), ], 'errorlog' => [ 'driver' => 'errorlog', - 'level' => env('LOG_LEVEL', 'debug'), + 'level' => env( 'LOG_LEVEL', 'debug' ), ], 'null' => [ @@ -112,7 +112,7 @@ ], 'emergency' => [ - 'path' => storage_path('logs/laravel.log'), + 'path' => storage_path( 'logs/laravel.log' ), ], ], diff --git a/config/mail.php b/config/mail.php index 54299aabf..03fcc9a90 100644 --- a/config/mail.php +++ b/config/mail.php @@ -13,7 +13,7 @@ | */ - 'default' => env('MAIL_MAILER', 'smtp'), + 'default' => env( 'MAIL_MAILER', 'smtp' ), /* |-------------------------------------------------------------------------- @@ -36,11 +36,11 @@ 'mailers' => [ 'smtp' => [ 'transport' => 'smtp', - 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), - 'port' => env('MAIL_PORT', 587), - 'encryption' => env('MAIL_ENCRYPTION', 'tls'), - 'username' => env('MAIL_USERNAME'), - 'password' => env('MAIL_PASSWORD'), + 'host' => env( 'MAIL_HOST', 'smtp.mailgun.org' ), + 'port' => env( 'MAIL_PORT', 587 ), + 'encryption' => env( 'MAIL_ENCRYPTION', 'tls' ), + 'username' => env( 'MAIL_USERNAME' ), + 'password' => env( 'MAIL_PASSWORD' ), 'timeout' => null, 'auth_mode' => null, ], @@ -64,7 +64,7 @@ 'log' => [ 'transport' => 'log', - 'channel' => env('MAIL_LOG_CHANNEL'), + 'channel' => env( 'MAIL_LOG_CHANNEL' ), ], 'array' => [ @@ -84,8 +84,8 @@ */ 'from' => [ - 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), - 'name' => env('MAIL_FROM_NAME', 'Example'), + 'address' => env( 'MAIL_FROM_ADDRESS', 'hello@example.com' ), + 'name' => env( 'MAIL_FROM_NAME', 'Example' ), ], /* @@ -103,7 +103,7 @@ 'theme' => 'default', 'paths' => [ - resource_path('views/vendor/mail'), + resource_path( 'views/vendor/mail' ), ], ], diff --git a/config/nexopos.php b/config/nexopos.php index f5d490f98..41f328195 100644 --- a/config/nexopos.php +++ b/config/nexopos.php @@ -9,7 +9,7 @@ * This is the core version of NexoPOS. This is used to displays on the * dashboard and to ensure a compatibility with the modules. */ - 'version' => '5.0.4', + 'version' => '5.1.0', /** * -------------------------------------------------------------------- diff --git a/config/queue.php b/config/queue.php index 00b76d651..8baf0dcb0 100644 --- a/config/queue.php +++ b/config/queue.php @@ -13,7 +13,7 @@ | */ - 'default' => env('QUEUE_CONNECTION', 'sync'), + 'default' => env( 'QUEUE_CONNECTION', 'sync' ), /* |-------------------------------------------------------------------------- @@ -51,18 +51,18 @@ 'sqs' => [ 'driver' => 'sqs', - 'key' => env('AWS_ACCESS_KEY_ID'), - 'secret' => env('AWS_SECRET_ACCESS_KEY'), - 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), - 'queue' => env('SQS_QUEUE', 'your-queue-name'), - 'suffix' => env('SQS_SUFFIX'), - 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'key' => env( 'AWS_ACCESS_KEY_ID' ), + 'secret' => env( 'AWS_SECRET_ACCESS_KEY' ), + 'prefix' => env( 'SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id' ), + 'queue' => env( 'SQS_QUEUE', 'your-queue-name' ), + 'suffix' => env( 'SQS_SUFFIX' ), + 'region' => env( 'AWS_DEFAULT_REGION', 'us-east-1' ), ], 'redis' => [ 'driver' => 'redis', 'connection' => 'default', - 'queue' => env('REDIS_QUEUE', 'default'), + 'queue' => env( 'REDIS_QUEUE', 'default' ), 'retry_after' => 90, 'block_for' => null, ], @@ -81,8 +81,8 @@ */ 'failed' => [ - 'driver' => env('QUEUE_FAILED_DRIVER', 'database'), - 'database' => env('DB_CONNECTION', 'mysql'), + 'driver' => env( 'QUEUE_FAILED_DRIVER', 'database' ), + 'database' => env( 'DB_CONNECTION', 'mysql' ), 'table' => 'failed_jobs', ], diff --git a/config/sanctum.php b/config/sanctum.php index 35d75b31e..18d596f4d 100644 --- a/config/sanctum.php +++ b/config/sanctum.php @@ -15,11 +15,11 @@ | */ - 'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + 'stateful' => explode( ',', env( 'SANCTUM_STATEFUL_DOMAINS', sprintf( '%s%s', 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', Sanctum::currentApplicationUrlWithPort() - ))), + ) ) ), /* |-------------------------------------------------------------------------- @@ -61,7 +61,7 @@ | */ - 'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''), + 'token_prefix' => env( 'SANCTUM_TOKEN_PREFIX', '' ), /* |-------------------------------------------------------------------------- diff --git a/config/services.php b/config/services.php index 2a1d616c7..c92892e4a 100644 --- a/config/services.php +++ b/config/services.php @@ -15,19 +15,19 @@ */ 'mailgun' => [ - 'domain' => env('MAILGUN_DOMAIN'), - 'secret' => env('MAILGUN_SECRET'), - 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + 'domain' => env( 'MAILGUN_DOMAIN' ), + 'secret' => env( 'MAILGUN_SECRET' ), + 'endpoint' => env( 'MAILGUN_ENDPOINT', 'api.mailgun.net' ), ], 'postmark' => [ - 'token' => env('POSTMARK_TOKEN'), + 'token' => env( 'POSTMARK_TOKEN' ), ], 'ses' => [ - 'key' => env('AWS_ACCESS_KEY_ID'), - 'secret' => env('AWS_SECRET_ACCESS_KEY'), - 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'key' => env( 'AWS_ACCESS_KEY_ID' ), + 'secret' => env( 'AWS_SECRET_ACCESS_KEY' ), + 'region' => env( 'AWS_DEFAULT_REGION', 'us-east-1' ), ], ]; diff --git a/config/session.php b/config/session.php index 5ba4e1d90..1182283d9 100644 --- a/config/session.php +++ b/config/session.php @@ -18,7 +18,7 @@ | */ - 'driver' => env('SESSION_DRIVER', 'file'), + 'driver' => env( 'SESSION_DRIVER', 'file' ), /* |-------------------------------------------------------------------------- @@ -31,7 +31,7 @@ | */ - 'lifetime' => env('SESSION_LIFETIME', 120), + 'lifetime' => env( 'SESSION_LIFETIME', 120 ), 'expire_on_close' => false, @@ -59,7 +59,7 @@ | */ - 'files' => storage_path('framework/sessions'), + 'files' => storage_path( 'framework/sessions' ), /* |-------------------------------------------------------------------------- @@ -72,7 +72,7 @@ | */ - 'connection' => env('SESSION_CONNECTION', null), + 'connection' => env( 'SESSION_CONNECTION', null ), /* |-------------------------------------------------------------------------- @@ -100,7 +100,7 @@ | */ - 'store' => env('SESSION_STORE', null), + 'store' => env( 'SESSION_STORE', null ), /* |-------------------------------------------------------------------------- @@ -128,7 +128,7 @@ 'cookie' => env( 'SESSION_COOKIE', - Str::slug(env('APP_NAME', 'laravel'), '_') . '_session' + Str::slug( env( 'APP_NAME', 'laravel' ), '_' ) . '_session' ), /* @@ -155,7 +155,7 @@ | */ - 'domain' => env('SESSION_DOMAIN', null), + 'domain' => env( 'SESSION_DOMAIN', null ), /* |-------------------------------------------------------------------------- @@ -168,7 +168,7 @@ | */ - 'secure' => env('SESSION_SECURE_COOKIE'), + 'secure' => env( 'SESSION_SECURE_COOKIE' ), /* |-------------------------------------------------------------------------- @@ -181,7 +181,7 @@ | */ - 'http_only' => env('SESSION_HTTP_ONLY', true), + 'http_only' => env( 'SESSION_HTTP_ONLY', true ), /* |-------------------------------------------------------------------------- @@ -196,6 +196,6 @@ | */ - 'same_site' => env('SESSION_SAME_DOMAIN', 'lax'), + 'same_site' => env( 'SESSION_SAME_DOMAIN', 'lax' ), ]; diff --git a/config/telescope.php b/config/telescope.php index 9a09fda1f..22723aeb2 100644 --- a/config/telescope.php +++ b/config/telescope.php @@ -16,7 +16,7 @@ | */ - 'domain' => env('TELESCOPE_DOMAIN'), + 'domain' => env( 'TELESCOPE_DOMAIN' ), /* |-------------------------------------------------------------------------- @@ -29,7 +29,7 @@ | */ - 'path' => env('TELESCOPE_PATH', 'telescope'), + 'path' => env( 'TELESCOPE_PATH', 'telescope' ), /* |-------------------------------------------------------------------------- @@ -42,11 +42,11 @@ | */ - 'driver' => env('TELESCOPE_DRIVER', 'database'), + 'driver' => env( 'TELESCOPE_DRIVER', 'database' ), 'storage' => [ 'database' => [ - 'connection' => env('DB_CONNECTION', 'mysql'), + 'connection' => env( 'DB_CONNECTION', 'mysql' ), 'chunk' => 1000, ], ], @@ -62,7 +62,7 @@ | */ - 'enabled' => env('TELESCOPE_ENABLED', true), + 'enabled' => env( 'TELESCOPE_ENABLED', true ), /* |-------------------------------------------------------------------------- @@ -115,73 +115,73 @@ */ 'watchers' => [ - Watchers\BatchWatcher::class => env('TELESCOPE_BATCH_WATCHER', true), + Watchers\BatchWatcher::class => env( 'TELESCOPE_BATCH_WATCHER', true ), Watchers\CacheWatcher::class => [ - 'enabled' => env('TELESCOPE_CACHE_WATCHER', true), + 'enabled' => env( 'TELESCOPE_CACHE_WATCHER', true ), 'hidden' => [], ], - Watchers\ClientRequestWatcher::class => env('TELESCOPE_CLIENT_REQUEST_WATCHER', true), + Watchers\ClientRequestWatcher::class => env( 'TELESCOPE_CLIENT_REQUEST_WATCHER', true ), Watchers\CommandWatcher::class => [ - 'enabled' => env('TELESCOPE_COMMAND_WATCHER', true), + 'enabled' => env( 'TELESCOPE_COMMAND_WATCHER', true ), 'ignore' => [], ], Watchers\DumpWatcher::class => [ - 'enabled' => env('TELESCOPE_DUMP_WATCHER', true), - 'always' => env('TELESCOPE_DUMP_WATCHER_ALWAYS', false), + 'enabled' => env( 'TELESCOPE_DUMP_WATCHER', true ), + 'always' => env( 'TELESCOPE_DUMP_WATCHER_ALWAYS', false ), ], Watchers\EventWatcher::class => [ - 'enabled' => env('TELESCOPE_EVENT_WATCHER', true), + 'enabled' => env( 'TELESCOPE_EVENT_WATCHER', true ), 'ignore' => [], ], - Watchers\ExceptionWatcher::class => env('TELESCOPE_EXCEPTION_WATCHER', true), + Watchers\ExceptionWatcher::class => env( 'TELESCOPE_EXCEPTION_WATCHER', true ), Watchers\GateWatcher::class => [ - 'enabled' => env('TELESCOPE_GATE_WATCHER', true), + 'enabled' => env( 'TELESCOPE_GATE_WATCHER', true ), 'ignore_abilities' => [], 'ignore_packages' => true, 'ignore_paths' => [], ], - Watchers\JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true), + Watchers\JobWatcher::class => env( 'TELESCOPE_JOB_WATCHER', true ), Watchers\LogWatcher::class => [ - 'enabled' => env('TELESCOPE_LOG_WATCHER', true), + 'enabled' => env( 'TELESCOPE_LOG_WATCHER', true ), 'level' => 'error', ], - Watchers\MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true), + Watchers\MailWatcher::class => env( 'TELESCOPE_MAIL_WATCHER', true ), Watchers\ModelWatcher::class => [ - 'enabled' => env('TELESCOPE_MODEL_WATCHER', true), + 'enabled' => env( 'TELESCOPE_MODEL_WATCHER', true ), 'events' => ['eloquent.*'], 'hydrations' => true, ], - Watchers\NotificationWatcher::class => env('TELESCOPE_NOTIFICATION_WATCHER', true), + Watchers\NotificationWatcher::class => env( 'TELESCOPE_NOTIFICATION_WATCHER', true ), Watchers\QueryWatcher::class => [ - 'enabled' => env('TELESCOPE_QUERY_WATCHER', true), + 'enabled' => env( 'TELESCOPE_QUERY_WATCHER', true ), 'ignore_packages' => true, 'ignore_paths' => [], 'slow' => 100, ], - Watchers\RedisWatcher::class => env('TELESCOPE_REDIS_WATCHER', true), + Watchers\RedisWatcher::class => env( 'TELESCOPE_REDIS_WATCHER', true ), Watchers\RequestWatcher::class => [ - 'enabled' => env('TELESCOPE_REQUEST_WATCHER', true), - 'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64), + 'enabled' => env( 'TELESCOPE_REQUEST_WATCHER', true ), + 'size_limit' => env( 'TELESCOPE_RESPONSE_SIZE_LIMIT', 64 ), 'ignore_http_methods' => [], 'ignore_status_codes' => [], ], - Watchers\ScheduleWatcher::class => env('TELESCOPE_SCHEDULE_WATCHER', true), - Watchers\ViewWatcher::class => env('TELESCOPE_VIEW_WATCHER', true), + Watchers\ScheduleWatcher::class => env( 'TELESCOPE_SCHEDULE_WATCHER', true ), + Watchers\ViewWatcher::class => env( 'TELESCOPE_VIEW_WATCHER', true ), ], ]; diff --git a/config/view.php b/config/view.php index 22b8a18d3..4473bb4b2 100644 --- a/config/view.php +++ b/config/view.php @@ -14,7 +14,7 @@ */ 'paths' => [ - resource_path('views'), + resource_path( 'views' ), ], /* @@ -30,7 +30,7 @@ 'compiled' => env( 'VIEW_COMPILED_PATH', - realpath(storage_path('framework/views')) + realpath( storage_path( 'framework/views' ) ) ), ]; diff --git a/config/websockets.php b/config/websockets.php index 09d916f37..ae7102799 100644 --- a/config/websockets.php +++ b/config/websockets.php @@ -8,7 +8,7 @@ * Set a custom dashboard configuration */ 'dashboard' => [ - 'port' => env('NS_SOCKET_PORT', 6001), + 'port' => env( 'NS_SOCKET_PORT', 6001 ), ], /* @@ -23,13 +23,13 @@ */ 'apps' => [ [ - 'id' => env('PUSHER_APP_ID'), - 'name' => env('APP_NAME'), - 'key' => env('PUSHER_APP_KEY'), - 'secret' => env('PUSHER_APP_SECRET'), - 'path' => env('PUSHER_APP_PATH'), + 'id' => env( 'PUSHER_APP_ID' ), + 'name' => env( 'APP_NAME' ), + 'key' => env( 'PUSHER_APP_KEY' ), + 'secret' => env( 'PUSHER_APP_SECRET' ), + 'path' => env( 'PUSHER_APP_PATH' ), 'capacity' => null, - 'host' => env('NS_SOCKET_DOMAIN', env('SESSION_DOMAIN')), + 'host' => env( 'NS_SOCKET_DOMAIN', env( 'SESSION_DOMAIN' ) ), 'enable_client_messages' => false, 'enable_statistics' => true, ], @@ -119,18 +119,18 @@ * certificate chain of issuers. The private key also may be contained * in a separate file specified by local_pk. */ - 'local_cert' => env('NS_SSL_LOCAL_CERT', null), + 'local_cert' => env( 'NS_SSL_LOCAL_CERT', null ), /* * Path to local private key file on filesystem in case of separate files for * certificate (local_cert) and private key. */ - 'local_pk' => env('NS_SSL_LOCAL_PK', null), + 'local_pk' => env( 'NS_SSL_LOCAL_PK', null ), /* * Passphrase for your local_cert file. */ - 'passphrase' => env('NS_SSL_PASSPHRASE', null), + 'passphrase' => env( 'NS_SSL_PASSPHRASE', null ), 'verify_peer' => false, ], diff --git a/database/factories/CouponFactory.php b/database/factories/CouponFactory.php index e0de3d61f..cf0cb5103 100644 --- a/database/factories/CouponFactory.php +++ b/database/factories/CouponFactory.php @@ -23,12 +23,12 @@ class CouponFactory extends Factory public function definition() { return [ - 'name' => __('Sample Coupon'), + 'name' => __( 'Sample Coupon' ), 'type' => 'percentage_discount', - 'code' => 'CP-' . ($this->faker->randomDigit) . ($this->faker->randomDigit) . ($this->faker->randomDigit) . ($this->faker->randomDigit) . ($this->faker->randomDigit), - 'author' => $this->faker->randomElement(User::get()->map(fn($user) => $user->id)), - 'discount_value' => $this->faker->randomElement([ 10, 15, 20, 25 ]), - 'limit_usage' => $this->faker->randomElement([ 1, 5, 10 ]), + 'code' => 'CP-' . ( $this->faker->randomDigit ) . ( $this->faker->randomDigit ) . ( $this->faker->randomDigit ) . ( $this->faker->randomDigit ) . ( $this->faker->randomDigit ), + 'author' => $this->faker->randomElement( User::get()->map( fn( $user ) => $user->id ) ), + 'discount_value' => $this->faker->randomElement( [ 10, 15, 20, 25 ] ), + 'limit_usage' => $this->faker->randomElement( [ 1, 5, 10 ] ), ]; } } diff --git a/database/factories/CustomerFactory.php b/database/factories/CustomerFactory.php index 77dd48623..f0163d4f3 100644 --- a/database/factories/CustomerFactory.php +++ b/database/factories/CustomerFactory.php @@ -23,22 +23,22 @@ public function definition() 'first_name' => $this->faker->firstName(), 'last_name' => $this->faker->lastName(), 'username' => $this->faker->userName(), - 'password' => Hash::make($this->faker->password()), + 'password' => Hash::make( $this->faker->password() ), 'email' => $this->faker->email(), 'active' => true, - 'gender' => $this->faker->randomElement([ 'male', 'female', '' ]), + 'gender' => $this->faker->randomElement( [ 'male', 'female', '' ] ), 'phone' => $this->faker->phoneNumber(), 'pobox' => $this->faker->postcode(), - 'author' => $this->faker->randomElement(User::get()->map(fn($user) => $user->id)), - 'group_id' => $this->faker->randomElement(CustomerGroup::get()->map(fn($group) => $group->id)), + 'author' => $this->faker->randomElement( User::get()->map( fn( $user ) => $user->id ) ), + 'group_id' => $this->faker->randomElement( CustomerGroup::get()->map( fn( $group ) => $group->id ) ), ]; } public function configure(): static { - return $this->afterCreating(function ($model) { - $user = User::find($model->id); - $user->assignRole(Role::STORECUSTOMER); - }); + return $this->afterCreating( function ( $model ) { + $user = User::find( $model->id ); + $user->assignRole( Role::STORECUSTOMER ); + } ); } } diff --git a/database/factories/CustomerGroupFactory.php b/database/factories/CustomerGroupFactory.php index d3c3478d3..3aeae8025 100644 --- a/database/factories/CustomerGroupFactory.php +++ b/database/factories/CustomerGroupFactory.php @@ -17,9 +17,9 @@ public function definition() { return [ 'name' => $this->faker->catchPhrase(), - 'minimal_credit_payment' => $this->faker->numberBetween(0, 50), - 'author' => $this->faker->randomElement(User::get()->map(fn($user) => $user->id)), - 'reward_system_id' => $this->faker->randomElement(RewardSystem::get()->map(fn($reward) => $reward->id)), + 'minimal_credit_payment' => $this->faker->numberBetween( 0, 50 ), + 'author' => $this->faker->randomElement( User::get()->map( fn( $user ) => $user->id ) ), + 'reward_system_id' => $this->faker->randomElement( RewardSystem::get()->map( fn( $reward ) => $reward->id ) ), ]; } } diff --git a/database/factories/ProductCategoryFactory.php b/database/factories/ProductCategoryFactory.php index ad9b96ed8..831c2d825 100644 --- a/database/factories/ProductCategoryFactory.php +++ b/database/factories/ProductCategoryFactory.php @@ -17,8 +17,8 @@ public function definition() return [ 'name' => $this->faker->name, 'description' => $this->faker->sentence, - 'displays_on_pos' => $this->faker->randomElement([ true, false ]), - 'author' => $this->faker->randomElement(User::get()->map(fn($user) => $user->id)), + 'displays_on_pos' => $this->faker->randomElement( [ true, false ] ), + 'author' => $this->faker->randomElement( User::get()->map( fn( $user ) => $user->id ) ), ]; } } diff --git a/database/factories/ProductFactory.php b/database/factories/ProductFactory.php index 23749cb0a..8c0af8842 100644 --- a/database/factories/ProductFactory.php +++ b/database/factories/ProductFactory.php @@ -17,12 +17,12 @@ class ProductFactory extends Factory public function definition() { - $unitGroup = $this->faker->randomElement(UnitGroup::get()); + $unitGroup = $this->faker->randomElement( UnitGroup::get() ); /** * @var TaxService */ - $taxType = $this->faker->randomElement([ 'inclusive', 'exclusive' ]); + $taxType = $this->faker->randomElement( [ 'inclusive', 'exclusive' ] ); $taxGroup = TaxGroup::get()->first(); return [ @@ -31,12 +31,12 @@ public function definition() 'barcode' => $this->faker->word, 'tax_type' => $taxType, 'tax_group_id' => $taxGroup->id, // assuming there is only one group - 'stock_management' => $this->faker->randomElement([ 'enabled', 'disabled' ]), - 'barcode_type' => $this->faker->randomElement([ 'ean13' ]), - 'sku' => $this->faker->word . date('s'), - 'type' => $this->faker->randomElement([ 'materialized', 'dematerialized']), + 'stock_management' => $this->faker->randomElement( [ 'enabled', 'disabled' ] ), + 'barcode_type' => $this->faker->randomElement( [ 'ean13' ] ), + 'sku' => $this->faker->word . date( 's' ), + 'type' => $this->faker->randomElement( [ 'materialized', 'dematerialized'] ), 'unit_group' => $unitGroup->id, - 'author' => $this->faker->randomElement(User::get()->map(fn($user) => $user->id)), + 'author' => $this->faker->randomElement( User::get()->map( fn( $user ) => $user->id ) ), ]; } } diff --git a/database/factories/ProductUnitQuantityFactory.php b/database/factories/ProductUnitQuantityFactory.php index 5dae66a2e..60d77379a 100644 --- a/database/factories/ProductUnitQuantityFactory.php +++ b/database/factories/ProductUnitQuantityFactory.php @@ -21,11 +21,11 @@ class ProductUnitQuantityFactory extends Factory */ public function definition() { - $sale_price = $this->faker->numberBetween(20, 30); - $wholesale_price = $this->faker->numberBetween(10, 20); + $sale_price = $this->faker->numberBetween( 20, 30 ); + $wholesale_price = $this->faker->numberBetween( 10, 20 ); return [ - 'quantity' => $this->faker->numberBetween(50, 400), + 'quantity' => $this->faker->numberBetween( 50, 400 ), 'sale_price' => $sale_price, 'sale_price_edit' => $sale_price, 'excl_tax_sale_price' => $sale_price, diff --git a/database/factories/RewardSystemFactory.php b/database/factories/RewardSystemFactory.php index 8cec4b6f6..350222e88 100644 --- a/database/factories/RewardSystemFactory.php +++ b/database/factories/RewardSystemFactory.php @@ -17,9 +17,9 @@ public function definition() { return [ 'name' => $this->faker->company, - 'target' => $this->faker->numberBetween(500, 10000), - 'coupon_id' => $this->faker->randomElement(Coupon::get()->map(fn($user) => $user->id)), - 'author' => $this->faker->randomElement(User::get()->map(fn($user) => $user->id)), + 'target' => $this->faker->numberBetween( 500, 10000 ), + 'coupon_id' => $this->faker->randomElement( Coupon::get()->map( fn( $user ) => $user->id ) ), + 'author' => $this->faker->randomElement( User::get()->map( fn( $user ) => $user->id ) ), ]; } } diff --git a/database/factories/RewardSystemRuleFactory.php b/database/factories/RewardSystemRuleFactory.php index 12764519e..8cc43b846 100644 --- a/database/factories/RewardSystemRuleFactory.php +++ b/database/factories/RewardSystemRuleFactory.php @@ -16,9 +16,9 @@ public function definition() { return [ 'from' => 0, - 'to' => $this->faker->numberBetween(100, 500), - 'reward' => $this->faker->numberBetween(100, 200), - 'author' => $this->faker->randomElement(User::get()->map(fn($user) => $user->id)), + 'to' => $this->faker->numberBetween( 100, 500 ), + 'reward' => $this->faker->numberBetween( 100, 200 ), + 'author' => $this->faker->randomElement( User::get()->map( fn( $user ) => $user->id ) ), ]; } } diff --git a/database/factories/TaxFactory.php b/database/factories/TaxFactory.php index c52364de0..fb4296ded 100644 --- a/database/factories/TaxFactory.php +++ b/database/factories/TaxFactory.php @@ -17,8 +17,8 @@ public function definition() return [ 'name' => $this->faker->name, 'description' => $this->faker->sentence, - 'rate' => $this->faker->numberBetween(1, 20), - 'author' => $this->faker->randomElement(User::get()->map(fn($user) => $user->id)), + 'rate' => $this->faker->numberBetween( 1, 20 ), + 'author' => $this->faker->randomElement( User::get()->map( fn( $user ) => $user->id ) ), ]; } } diff --git a/database/factories/TaxGroupFactory.php b/database/factories/TaxGroupFactory.php index 10ac8ade7..6a26d5e0e 100644 --- a/database/factories/TaxGroupFactory.php +++ b/database/factories/TaxGroupFactory.php @@ -17,7 +17,7 @@ public function definition() return [ 'name' => $this->faker->word, 'description' => $this->faker->sentence, - 'author' => $this->faker->randomElement(User::get()->map(fn($user) => $user->id)), + 'author' => $this->faker->randomElement( User::get()->map( fn( $user ) => $user->id ) ), ]; } } diff --git a/database/factories/UnitFactory.php b/database/factories/UnitFactory.php index d60fcbc8e..9304dca34 100644 --- a/database/factories/UnitFactory.php +++ b/database/factories/UnitFactory.php @@ -17,9 +17,9 @@ public function definition() return [ 'name' => $this->faker->name, 'description' => $this->faker->sentence, - 'base_unit' => $this->faker->randomElement([ 0, 1 ]), - 'value' => $this->faker->numberBetween(5, 20), - 'author' => $this->faker->randomElement(User::get()->map(fn($user) => $user->id)), + 'base_unit' => $this->faker->randomElement( [ 0, 1 ] ), + 'value' => $this->faker->numberBetween( 5, 20 ), + 'author' => $this->faker->randomElement( User::get()->map( fn( $user ) => $user->id ) ), ]; } } diff --git a/database/factories/UnitGroupFactory.php b/database/factories/UnitGroupFactory.php index 3206f04c1..a7df62ebd 100644 --- a/database/factories/UnitGroupFactory.php +++ b/database/factories/UnitGroupFactory.php @@ -17,7 +17,7 @@ public function definition() return [ 'name' => $this->faker->word, 'description' => $this->faker->sentence, - 'author' => $this->faker->randomElement(User::get()->map(fn($user) => $user->id)), + 'author' => $this->faker->randomElement( User::get()->map( fn( $user ) => $user->id ) ), ]; } } diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index 33b46061e..979a30084 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -31,7 +31,7 @@ public function definition() 'email' => $this->faker->unique()->safeEmail, 'email_verified_at' => now(), 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password - 'remember_token' => Str::random(10), + 'remember_token' => Str::random( 10 ), ]; } } diff --git a/database/migrations/2018_08_08_100000_create_telescope_entries_table.php b/database/migrations/2018_08_08_100000_create_telescope_entries_table.php index 3f92a533e..d096e6e56 100644 --- a/database/migrations/2018_08_08_100000_create_telescope_entries_table.php +++ b/database/migrations/2018_08_08_100000_create_telescope_entries_table.php @@ -11,7 +11,7 @@ */ public function getConnection(): ?string { - return config('telescope.storage.database.connection'); + return config( 'telescope.storage.database.connection' ); } /** @@ -19,41 +19,41 @@ public function getConnection(): ?string */ public function up(): void { - $schema = Schema::connection($this->getConnection()); + $schema = Schema::connection( $this->getConnection() ); - $schema->create('telescope_entries', function (Blueprint $table) { - $table->bigIncrements('sequence'); - $table->uuid('uuid'); - $table->uuid('batch_id'); - $table->string('family_hash')->nullable(); - $table->boolean('should_display_on_index')->default(true); - $table->string('type', 20); - $table->longText('content'); - $table->dateTime('created_at')->nullable(); + $schema->create( 'telescope_entries', function ( Blueprint $table ) { + $table->bigIncrements( 'sequence' ); + $table->uuid( 'uuid' ); + $table->uuid( 'batch_id' ); + $table->string( 'family_hash' )->nullable(); + $table->boolean( 'should_display_on_index' )->default( true ); + $table->string( 'type', 20 ); + $table->longText( 'content' ); + $table->dateTime( 'created_at' )->nullable(); - $table->unique('uuid'); - $table->index('batch_id'); - $table->index('family_hash'); - $table->index('created_at'); - $table->index(['type', 'should_display_on_index']); - }); + $table->unique( 'uuid' ); + $table->index( 'batch_id' ); + $table->index( 'family_hash' ); + $table->index( 'created_at' ); + $table->index( ['type', 'should_display_on_index'] ); + } ); - $schema->create('telescope_entries_tags', function (Blueprint $table) { - $table->uuid('entry_uuid'); - $table->string('tag'); + $schema->create( 'telescope_entries_tags', function ( Blueprint $table ) { + $table->uuid( 'entry_uuid' ); + $table->string( 'tag' ); - $table->index(['entry_uuid', 'tag']); - $table->index('tag'); + $table->index( ['entry_uuid', 'tag'] ); + $table->index( 'tag' ); - $table->foreign('entry_uuid') - ->references('uuid') - ->on('telescope_entries') - ->onDelete('cascade'); - }); + $table->foreign( 'entry_uuid' ) + ->references( 'uuid' ) + ->on( 'telescope_entries' ) + ->onDelete( 'cascade' ); + } ); - $schema->create('telescope_monitoring', function (Blueprint $table) { - $table->string('tag'); - }); + $schema->create( 'telescope_monitoring', function ( Blueprint $table ) { + $table->string( 'tag' ); + } ); } /** @@ -61,10 +61,10 @@ public function up(): void */ public function down(): void { - $schema = Schema::connection($this->getConnection()); + $schema = Schema::connection( $this->getConnection() ); - $schema->dropIfExists('telescope_entries_tags'); - $schema->dropIfExists('telescope_entries'); - $schema->dropIfExists('telescope_monitoring'); + $schema->dropIfExists( 'telescope_entries_tags' ); + $schema->dropIfExists( 'telescope_entries' ); + $schema->dropIfExists( 'telescope_monitoring' ); } }; diff --git a/database/migrations/2022_10_28_123458_setup_migration_table.php b/database/migrations/2022_10_28_123458_setup_migration_table.php index 438bc9255..4ca5359d7 100644 --- a/database/migrations/2022_10_28_123458_setup_migration_table.php +++ b/database/migrations/2022_10_28_123458_setup_migration_table.php @@ -13,11 +13,11 @@ */ public function up() { - Schema::table('migrations', function (Blueprint $table) { - if (! Schema::hasColumn('migrations', 'type')) { - $table->string('type')->nullable(); + Schema::table( 'migrations', function ( Blueprint $table ) { + if ( ! Schema::hasColumn( 'migrations', 'type' ) ) { + $table->string( 'type' )->nullable(); } - }); + } ); } /** diff --git a/database/migrations/core/2014_10_13_000000_create_users_table.php b/database/migrations/core/2014_10_13_000000_create_users_table.php index ce69478c6..8dd7fb25c 100644 --- a/database/migrations/core/2014_10_13_000000_create_users_table.php +++ b/database/migrations/core/2014_10_13_000000_create_users_table.php @@ -23,32 +23,32 @@ public function runOnMultiStore() */ public function up() { - if (! Schema::hasTable('nexopos_users')) { - Schema::create('nexopos_users', function (Blueprint $table) { - $table->increments('id'); - $table->string('username'); - $table->boolean('active')->default(false); - $table->integer('author')->nullable(); // the first user is created by him self - $table->string('email')->unique(); - $table->string('password'); - $table->integer('group_id')->nullable(); - $table->string('first_name')->nullable(); - $table->string('last_name')->nullable(); - $table->string('gender')->nullable(); - $table->string('phone')->nullable(); - $table->string('pobox')->nullable(); - $table->datetime('activation_expiration')->nullable(); - $table->integer('total_sales_count')->default(0); - $table->float('total_sales', 18, 5)->default(0); - $table->datetime('birth_date')->nullable(); - $table->float('purchases_amount')->default(0); - $table->float('owed_amount')->default(0); - $table->float('credit_limit_amount')->default(0); - $table->float('account_amount')->default(0); - $table->string('activation_token')->nullable(); + if ( ! Schema::hasTable( 'nexopos_users' ) ) { + Schema::create( 'nexopos_users', function ( Blueprint $table ) { + $table->increments( 'id' ); + $table->string( 'username' ); + $table->boolean( 'active' )->default( false ); + $table->integer( 'author' )->nullable(); // the first user is created by him self + $table->string( 'email' )->unique(); + $table->string( 'password' ); + $table->integer( 'group_id' )->nullable(); + $table->string( 'first_name' )->nullable(); + $table->string( 'last_name' )->nullable(); + $table->string( 'gender' )->nullable(); + $table->string( 'phone' )->nullable(); + $table->string( 'pobox' )->nullable(); + $table->datetime( 'activation_expiration' )->nullable(); + $table->integer( 'total_sales_count' )->default( 0 ); + $table->float( 'total_sales', 18, 5 )->default( 0 ); + $table->datetime( 'birth_date' )->nullable(); + $table->float( 'purchases_amount' )->default( 0 ); + $table->float( 'owed_amount' )->default( 0 ); + $table->float( 'credit_limit_amount' )->default( 0 ); + $table->float( 'account_amount' )->default( 0 ); + $table->string( 'activation_token' )->nullable(); $table->rememberToken(); $table->timestamps(); - }); + } ); } } @@ -59,6 +59,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_users'); + Schema::dropIfExists( 'nexopos_users' ); } }; diff --git a/database/migrations/core/2017_07_28_130434_create_roles_table.php b/database/migrations/core/2017_07_28_130434_create_roles_table.php index ac6d50a54..80cfd453e 100644 --- a/database/migrations/core/2017_07_28_130434_create_roles_table.php +++ b/database/migrations/core/2017_07_28_130434_create_roles_table.php @@ -23,27 +23,27 @@ public function runOnMultiStore() */ public function up() { - if (! Schema::hasTable('nexopos_roles')) { - Schema::create('nexopos_roles', function (Blueprint $table) { - $table->increments('id'); - $table->string('name')->unique(); - $table->string('namespace')->unique(); - $table->text('description')->nullable(); - $table->integer('reward_system_id')->nullable(); - $table->float('minimal_credit_payment')->default(0); - $table->integer('author')->nullable(); // when provided match the user id - $table->boolean('locked')->default(true); // means the role can be edited from the frontend. + if ( ! Schema::hasTable( 'nexopos_roles' ) ) { + Schema::create( 'nexopos_roles', function ( Blueprint $table ) { + $table->increments( 'id' ); + $table->string( 'name' )->unique(); + $table->string( 'namespace' )->unique(); + $table->text( 'description' )->nullable(); + $table->integer( 'reward_system_id' )->nullable(); + $table->float( 'minimal_credit_payment' )->default( 0 ); + $table->integer( 'author' )->nullable(); // when provided match the user id + $table->boolean( 'locked' )->default( true ); // means the role can be edited from the frontend. $table->timestamps(); - }); + } ); } // Permissions Relation with Roles - if (! Schema::hasTable('nexopos_role_permission')) { - Schema::create('nexopos_role_permission', function (Blueprint $table) { - $table->integer('permission_id'); - $table->integer('role_id'); - $table->primary([ 'permission_id', 'role_id' ]); - }); + if ( ! Schema::hasTable( 'nexopos_role_permission' ) ) { + Schema::create( 'nexopos_role_permission', function ( Blueprint $table ) { + $table->integer( 'permission_id' ); + $table->integer( 'role_id' ); + $table->primary( [ 'permission_id', 'role_id' ] ); + } ); } } @@ -54,7 +54,7 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_roles'); - Schema::dropIfExists('nexopos_role_permission'); + Schema::dropIfExists( 'nexopos_roles' ); + Schema::dropIfExists( 'nexopos_role_permission' ); } }; diff --git a/database/migrations/core/2017_07_28_130610_create_permissions_table.php b/database/migrations/core/2017_07_28_130610_create_permissions_table.php index 91b96fb73..3c94375d7 100644 --- a/database/migrations/core/2017_07_28_130610_create_permissions_table.php +++ b/database/migrations/core/2017_07_28_130610_create_permissions_table.php @@ -23,14 +23,14 @@ public function runOnMultiStore() */ public function up() { - if (! Schema::hasTable('nexopos_permissions')) { - Schema::create('nexopos_permissions', function (Blueprint $table) { - $table->increments('id'); - $table->string('name')->unique(); - $table->string('namespace')->unique(); - $table->text('description'); + if ( ! Schema::hasTable( 'nexopos_permissions' ) ) { + Schema::create( 'nexopos_permissions', function ( Blueprint $table ) { + $table->increments( 'id' ); + $table->string( 'name' )->unique(); + $table->string( 'namespace' )->unique(); + $table->text( 'description' ); $table->timestamps(); - }); + } ); } } @@ -41,6 +41,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_permissions'); + Schema::dropIfExists( 'nexopos_permissions' ); } }; diff --git a/database/migrations/core/2018_08_08_100000_create_telescope_entries_table.php b/database/migrations/core/2018_08_08_100000_create_telescope_entries_table.php index 94e1c0e87..a4d341e05 100644 --- a/database/migrations/core/2018_08_08_100000_create_telescope_entries_table.php +++ b/database/migrations/core/2018_08_08_100000_create_telescope_entries_table.php @@ -30,7 +30,7 @@ public function runOnMultiStore() */ public function __construct() { - $this->schema = Schema::connection($this->getConnection()); + $this->schema = Schema::connection( $this->getConnection() ); } /** @@ -40,7 +40,7 @@ public function __construct() */ public function getConnection() { - return config('telescope.storage.database.connection'); + return config( 'telescope.storage.database.connection' ); } /** @@ -50,44 +50,44 @@ public function getConnection() */ public function up() { - if (! Schema::hasTable('telescope_entries')) { - $this->schema->create('telescope_entries', function (Blueprint $table) { - $table->bigIncrements('sequence'); - $table->uuid('uuid'); - $table->uuid('batch_id'); - $table->string('family_hash')->nullable(); - $table->boolean('should_display_on_index')->default(true); - $table->string('type', 20); - $table->longText('content'); - $table->dateTime('created_at')->nullable(); + if ( ! Schema::hasTable( 'telescope_entries' ) ) { + $this->schema->create( 'telescope_entries', function ( Blueprint $table ) { + $table->bigIncrements( 'sequence' ); + $table->uuid( 'uuid' ); + $table->uuid( 'batch_id' ); + $table->string( 'family_hash' )->nullable(); + $table->boolean( 'should_display_on_index' )->default( true ); + $table->string( 'type', 20 ); + $table->longText( 'content' ); + $table->dateTime( 'created_at' )->nullable(); - $table->unique('uuid'); - $table->index('batch_id'); - $table->index('family_hash'); - $table->index('created_at'); - $table->index(['type', 'should_display_on_index']); - }); + $table->unique( 'uuid' ); + $table->index( 'batch_id' ); + $table->index( 'family_hash' ); + $table->index( 'created_at' ); + $table->index( ['type', 'should_display_on_index'] ); + } ); } - if (! Schema::hasTable('telescope_entries_tags')) { - $this->schema->create('telescope_entries_tags', function (Blueprint $table) { - $table->uuid('entry_uuid'); - $table->string('tag'); + if ( ! Schema::hasTable( 'telescope_entries_tags' ) ) { + $this->schema->create( 'telescope_entries_tags', function ( Blueprint $table ) { + $table->uuid( 'entry_uuid' ); + $table->string( 'tag' ); - $table->index(['entry_uuid', 'tag']); - $table->index('tag'); + $table->index( ['entry_uuid', 'tag'] ); + $table->index( 'tag' ); - $table->foreign('entry_uuid') - ->references('uuid') - ->on('telescope_entries') - ->onDelete('cascade'); - }); + $table->foreign( 'entry_uuid' ) + ->references( 'uuid' ) + ->on( 'telescope_entries' ) + ->onDelete( 'cascade' ); + } ); } - if (! Schema::hasTable('telescope_monitoring')) { - $this->schema->create('telescope_monitoring', function (Blueprint $table) { - $table->string('tag'); - }); + if ( ! Schema::hasTable( 'telescope_monitoring' ) ) { + $this->schema->create( 'telescope_monitoring', function ( Blueprint $table ) { + $table->string( 'tag' ); + } ); } } @@ -98,8 +98,8 @@ public function up() */ public function down() { - $this->schema->dropIfExists('telescope_entries_tags'); - $this->schema->dropIfExists('telescope_entries'); - $this->schema->dropIfExists('telescope_monitoring'); + $this->schema->dropIfExists( 'telescope_entries_tags' ); + $this->schema->dropIfExists( 'telescope_entries' ); + $this->schema->dropIfExists( 'telescope_monitoring' ); } }; diff --git a/database/migrations/core/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/core/2019_08_19_000000_create_failed_jobs_table.php index 76f0c8d11..a2f8c070d 100644 --- a/database/migrations/core/2019_08_19_000000_create_failed_jobs_table.php +++ b/database/migrations/core/2019_08_19_000000_create_failed_jobs_table.php @@ -23,15 +23,15 @@ public function runOnMultiStore() */ public function up() { - if (! Schema::hasTable('failed_jobs')) { - Schema::create('failed_jobs', function (Blueprint $table) { + if ( ! Schema::hasTable( 'failed_jobs' ) ) { + Schema::create( 'failed_jobs', function ( Blueprint $table ) { $table->id(); - $table->text('connection'); - $table->text('queue'); - $table->longText('payload'); - $table->longText('exception'); - $table->timestamp('failed_at')->useCurrent(); - }); + $table->text( 'connection' ); + $table->text( 'queue' ); + $table->longText( 'payload' ); + $table->longText( 'exception' ); + $table->timestamp( 'failed_at' )->useCurrent(); + } ); } } @@ -42,6 +42,6 @@ public function up() */ public function down() { - Schema::dropIfExists('failed_jobs'); + Schema::dropIfExists( 'failed_jobs' ); } }; diff --git a/database/migrations/core/2020_06_20_000000_create_permissions.php b/database/migrations/core/2020_06_20_000000_create_permissions.php index c376272d9..324cb1f1d 100644 --- a/database/migrations/core/2020_06_20_000000_create_permissions.php +++ b/database/migrations/core/2020_06_20_000000_create_permissions.php @@ -25,98 +25,98 @@ public function runOnMultiStore() /** * Run the migrations. * - * @return void + * @return void */ public function up() { - $this->options = app()->make(Options::class); + $this->options = app()->make( Options::class ); /** * Categories Permissions. * let's create a constant which will allow the creation, * since these files are included as migration file */ - if (! defined('NEXO_CREATE_PERMISSIONS')) { - define('NEXO_CREATE_PERMISSIONS', true); + if ( ! defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + define( 'NEXO_CREATE_PERMISSIONS', true ); } /** * All roles with basic permissions */ // Crud for users and options - foreach ([ 'users', 'roles' ] as $permission) { - foreach ([ 'create', 'read', 'update', 'delete' ] as $crud) { + foreach ( [ 'users', 'roles' ] as $permission ) { + foreach ( [ 'create', 'read', 'update', 'delete' ] as $crud ) { // Create User - $this->permission = Permission::firstOrNew([ 'namespace' => $crud . '.' . $permission ]); - $this->permission->name = ucwords($crud) . ' ' . ucwords($permission); + $this->permission = Permission::firstOrNew( [ 'namespace' => $crud . '.' . $permission ] ); + $this->permission->name = ucwords( $crud ) . ' ' . ucwords( $permission ); $this->permission->namespace = $crud . '.' . $permission; - $this->permission->description = sprintf(__('Can %s %s'), $crud, $permission); + $this->permission->description = sprintf( __( 'Can %s %s' ), $crud, $permission ); $this->permission->save(); } } // for core update - $this->permission = Permission::firstOrNew([ 'namespace' => 'update.core' ]); - $this->permission->name = __('Update Core'); + $this->permission = Permission::firstOrNew( [ 'namespace' => 'update.core' ] ); + $this->permission->name = __( 'Update Core' ); $this->permission->namespace = 'update.core'; - $this->permission->description = __('Can update core'); + $this->permission->description = __( 'Can update core' ); $this->permission->save(); // for core permission - $this->permission = Permission::firstOrNew([ 'namespace' => 'manage.profile' ]); - $this->permission->name = __('Manage Profile'); + $this->permission = Permission::firstOrNew( [ 'namespace' => 'manage.profile' ] ); + $this->permission->name = __( 'Manage Profile' ); $this->permission->namespace = 'manage.profile'; - $this->permission->description = __('Can manage profile'); + $this->permission->description = __( 'Can manage profile' ); $this->permission->save(); // for module migration - $this->permission = Permission::firstOrNew([ 'namespace' => 'manage.modules' ]); - $this->permission->name = __('Manage Modules'); + $this->permission = Permission::firstOrNew( [ 'namespace' => 'manage.modules' ] ); + $this->permission->name = __( 'Manage Modules' ); $this->permission->namespace = 'manage.modules'; - $this->permission->description = __('Can manage module : install, delete, update, migrate, enable, disable'); + $this->permission->description = __( 'Can manage module : install, delete, update, migrate, enable, disable' ); $this->permission->save(); // for options - $this->permission = Permission::firstOrNew([ 'namespace' => 'manage.options' ]); - $this->permission->name = __('Manage Options'); + $this->permission = Permission::firstOrNew( [ 'namespace' => 'manage.options' ] ); + $this->permission->name = __( 'Manage Options' ); $this->permission->namespace = 'manage.options'; - $this->permission->description = __('Can manage options : read, update'); + $this->permission->description = __( 'Can manage options : read, update' ); $this->permission->save(); // for options - $this->permission = Permission::firstOrNew([ 'namespace' => 'read.dashboard' ]); - $this->permission->name = __('View Dashboard'); + $this->permission = Permission::firstOrNew( [ 'namespace' => 'read.dashboard' ] ); + $this->permission->name = __( 'View Dashboard' ); $this->permission->namespace = 'read.dashboard'; - $this->permission->description = __('Can access the dashboard and see metrics'); + $this->permission->description = __( 'Can access the dashboard and see metrics' ); $this->permission->save(); - include_once dirname(__FILE__) . '/../../permissions/medias.php'; - include_once dirname(__FILE__) . '/../../permissions/categories.php'; - include_once dirname(__FILE__) . '/../../permissions/customers.php'; - include_once dirname(__FILE__) . '/../../permissions/customers-groups.php'; - include_once dirname(__FILE__) . '/../../permissions/coupons.php'; - include_once dirname(__FILE__) . '/../../permissions/transactions-accounts.php'; - include_once dirname(__FILE__) . '/../../permissions/transactions.php'; - include_once dirname(__FILE__) . '/../../permissions/orders.php'; - include_once dirname(__FILE__) . '/../../permissions/procurements.php'; - include_once dirname(__FILE__) . '/../../permissions/providers.php'; - include_once dirname(__FILE__) . '/../../permissions/products.php'; - include_once dirname(__FILE__) . '/../../permissions/registers.php'; - include_once dirname(__FILE__) . '/../../permissions/rewards.php'; - include_once dirname(__FILE__) . '/../../permissions/taxes.php'; - include_once dirname(__FILE__) . '/../../permissions/reports.php'; - include_once dirname(__FILE__) . '/../../permissions/payments-types.php'; - include_once dirname(__FILE__) . '/../../permissions/pos.php'; - include_once dirname(__FILE__) . '/../../permissions/widgets.php'; + include_once dirname( __FILE__ ) . '/../../permissions/medias.php'; + include_once dirname( __FILE__ ) . '/../../permissions/categories.php'; + include_once dirname( __FILE__ ) . '/../../permissions/customers.php'; + include_once dirname( __FILE__ ) . '/../../permissions/customers-groups.php'; + include_once dirname( __FILE__ ) . '/../../permissions/coupons.php'; + include_once dirname( __FILE__ ) . '/../../permissions/transactions-accounts.php'; + include_once dirname( __FILE__ ) . '/../../permissions/transactions.php'; + include_once dirname( __FILE__ ) . '/../../permissions/orders.php'; + include_once dirname( __FILE__ ) . '/../../permissions/procurements.php'; + include_once dirname( __FILE__ ) . '/../../permissions/providers.php'; + include_once dirname( __FILE__ ) . '/../../permissions/products.php'; + include_once dirname( __FILE__ ) . '/../../permissions/registers.php'; + include_once dirname( __FILE__ ) . '/../../permissions/rewards.php'; + include_once dirname( __FILE__ ) . '/../../permissions/taxes.php'; + include_once dirname( __FILE__ ) . '/../../permissions/reports.php'; + include_once dirname( __FILE__ ) . '/../../permissions/payments-types.php'; + include_once dirname( __FILE__ ) . '/../../permissions/pos.php'; + include_once dirname( __FILE__ ) . '/../../permissions/widgets.php'; } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - Permission::where('namespace', 'like', '%nexopos.%')->delete(); + Permission::where( 'namespace', 'like', '%nexopos.%' )->delete(); } }; diff --git a/database/migrations/core/2020_06_20_000000_create_roles.php b/database/migrations/core/2020_06_20_000000_create_roles.php index 62b1dd1de..b0648fda5 100644 --- a/database/migrations/core/2020_06_20_000000_create_roles.php +++ b/database/migrations/core/2020_06_20_000000_create_roles.php @@ -21,42 +21,42 @@ public function runOnMultiStore() /** * Run the migrations. * - * @return void + * @return void */ public function up() { - $this->options = app()->make(Options::class); + $this->options = app()->make( Options::class ); /** * Each of the following files will define a role * and permissions that are assigned to those roles. */ - include_once dirname(__FILE__) . '/../../permissions/user-role.php'; - include_once dirname(__FILE__) . '/../../permissions/admin-role.php'; - include_once dirname(__FILE__) . '/../../permissions/store-admin-role.php'; - include_once dirname(__FILE__) . '/../../permissions/store-cashier-role.php'; - include_once dirname(__FILE__) . '/../../permissions/store-customer-role.php'; + include_once dirname( __FILE__ ) . '/../../permissions/user-role.php'; + include_once dirname( __FILE__ ) . '/../../permissions/admin-role.php'; + include_once dirname( __FILE__ ) . '/../../permissions/store-admin-role.php'; + include_once dirname( __FILE__ ) . '/../../permissions/store-cashier-role.php'; + include_once dirname( __FILE__ ) . '/../../permissions/store-customer-role.php'; } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - $role = Role::where('namespace', 'nexopos.store.administrator')->first(); - if ($role instanceof Role) { + $role = Role::where( 'namespace', 'nexopos.store.administrator' )->first(); + if ( $role instanceof Role ) { $role->delete(); } - $role = Role::where('namespace', 'nexopos.store.cashier')->first(); - if ($role instanceof Role) { + $role = Role::where( 'namespace', 'nexopos.store.cashier' )->first(); + if ( $role instanceof Role ) { $role->delete(); } - $role = Role::where('namespace', Role::STORECUSTOMER)->first(); - if ($role instanceof Role) { + $role = Role::where( 'namespace', Role::STORECUSTOMER )->first(); + if ( $role instanceof Role ) { $role->delete(); } } diff --git a/database/migrations/core/2020_10_11_122857_create_jobs_table.php b/database/migrations/core/2020_10_11_122857_create_jobs_table.php index de8f8a39a..dbc15173e 100644 --- a/database/migrations/core/2020_10_11_122857_create_jobs_table.php +++ b/database/migrations/core/2020_10_11_122857_create_jobs_table.php @@ -23,16 +23,16 @@ public function runOnMultiStore() */ public function up() { - if (! Schema::hasTable('jobs')) { - Schema::create('jobs', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('queue')->index(); - $table->longText('payload'); - $table->unsignedTinyInteger('attempts'); - $table->unsignedInteger('reserved_at')->nullable(); - $table->unsignedInteger('available_at'); - $table->unsignedInteger('created_at'); - }); + if ( ! Schema::hasTable( 'jobs' ) ) { + Schema::create( 'jobs', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'queue' )->index(); + $table->longText( 'payload' ); + $table->unsignedTinyInteger( 'attempts' ); + $table->unsignedInteger( 'reserved_at' )->nullable(); + $table->unsignedInteger( 'available_at' ); + $table->unsignedInteger( 'created_at' ); + } ); } } @@ -43,6 +43,6 @@ public function up() */ public function down() { - Schema::dropIfExists('jobs'); + Schema::dropIfExists( 'jobs' ); } }; diff --git a/database/migrations/core/2020_11_04_124040_add_new_customers_permission_nov4.php b/database/migrations/core/2020_11_04_124040_add_new_customers_permission_nov4.php index 1b4e9fb51..7bb0d8b6b 100644 --- a/database/migrations/core/2020_11_04_124040_add_new_customers_permission_nov4.php +++ b/database/migrations/core/2020_11_04_124040_add_new_customers_permission_nov4.php @@ -27,19 +27,19 @@ public function runOnMultiStore() */ public function up() { - $permission = Permission::namespace($this->permission); + $permission = Permission::namespace( $this->permission ); - if (! $permission instanceof Permission) { - $permission = Permission::firstOrNew([ 'namespace' => $this->permission ]); + if ( ! $permission instanceof Permission ) { + $permission = Permission::firstOrNew( [ 'namespace' => $this->permission ] ); $permission->namespace = $this->permission; - $permission->name = __('Manage Customer Account History'); - $permission->description = __('Can add, deduct amount from each customers account.'); + $permission->name = __( 'Manage Customer Account History' ); + $permission->description = __( 'Can add, deduct amount from each customers account.' ); $permission->save(); } - Role::namespace('admin')->addPermissions($this->permission); - Role::namespace('nexopos.store.administrator')->addPermissions($this->permission); - Role::namespace('nexopos.store.cashier')->addPermissions($this->permission); + Role::namespace( 'admin' )->addPermissions( $this->permission ); + Role::namespace( 'nexopos.store.administrator' )->addPermissions( $this->permission ); + Role::namespace( 'nexopos.store.cashier' )->addPermissions( $this->permission ); } /** @@ -49,12 +49,12 @@ public function up() */ public function down() { - if (Schema::hasTable('nexopos_permissions')) { - $permission = Permission::namespace($this->permission); + if ( Schema::hasTable( 'nexopos_permissions' ) ) { + $permission = Permission::namespace( $this->permission ); - if ($permission instanceof Permission) { - RolePermission::where('permission_id', $permission->id)->delete(); - Permission::namespace($this->permission)->delete(); + if ( $permission instanceof Permission ) { + RolePermission::where( 'permission_id', $permission->id )->delete(); + Permission::namespace( $this->permission )->delete(); } } } diff --git a/database/migrations/core/2020_11_11_151614_nov11_create_nexopos_users_attributes_table.php b/database/migrations/core/2020_11_11_151614_nov11_create_nexopos_users_attributes_table.php index 7b7cbae2f..1beaa16ba 100644 --- a/database/migrations/core/2020_11_11_151614_nov11_create_nexopos_users_attributes_table.php +++ b/database/migrations/core/2020_11_11_151614_nov11_create_nexopos_users_attributes_table.php @@ -23,14 +23,14 @@ public function runOnMultiStore() */ public function up() { - if (! Schema::hasTable('nexopos_users_attributes')) { - Schema::create('nexopos_users_attributes', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('user_id'); - $table->string('avatar_link')->nullable(); - $table->string('theme')->nullable(); - $table->string('language')->nullable(); - }); + if ( ! Schema::hasTable( 'nexopos_users_attributes' ) ) { + Schema::create( 'nexopos_users_attributes', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'user_id' ); + $table->string( 'avatar_link' )->nullable(); + $table->string( 'theme' )->nullable(); + $table->string( 'language' )->nullable(); + } ); } } @@ -41,6 +41,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_users_attributes'); + Schema::dropIfExists( 'nexopos_users_attributes' ); } }; diff --git a/database/migrations/core/2020_11_12_205243_nov12_create_order_permission.php b/database/migrations/core/2020_11_12_205243_nov12_create_order_permission.php index 93d4f01c5..9891c77b0 100644 --- a/database/migrations/core/2020_11_12_205243_nov12_create_order_permission.php +++ b/database/migrations/core/2020_11_12_205243_nov12_create_order_permission.php @@ -26,18 +26,18 @@ public function runOnMultiStore() */ public function up() { - $permission = Permission::namespace(self::permissionName); + $permission = Permission::namespace( self::permissionName ); - if (! $permission instanceof Permission) { - $permission = Permission::firstOrNew([ 'namespace' => self::permissionName ]); + if ( ! $permission instanceof Permission ) { + $permission = Permission::firstOrNew( [ 'namespace' => self::permissionName ] ); $permission->namespace = self::permissionName; - $permission->name = __('Make Payment To Orders'); - $permission->description = __('Allow the user to perform additional payment for a specific incomplete order.'); + $permission->name = __( 'Make Payment To Orders' ); + $permission->description = __( 'Allow the user to perform additional payment for a specific incomplete order.' ); $permission->save(); } - Role::namespace('admin')->addPermissions($permission); - Role::namespace('nexopos.store.administrator')->addPermissions($permission); + Role::namespace( 'admin' )->addPermissions( $permission ); + Role::namespace( 'nexopos.store.administrator' )->addPermissions( $permission ); } /** @@ -47,8 +47,8 @@ public function up() */ public function down() { - if (Schema::hasTable('nexopos_permissions')) { - $permission = Permission::namespace(self::permissionName); + if ( Schema::hasTable( 'nexopos_permissions' ) ) { + $permission = Permission::namespace( self::permissionName ); $permission->removeFromRoles(); } } diff --git a/database/migrations/core/2020_11_25_203531_nov25_fix_report_permissions_attribution.php b/database/migrations/core/2020_11_25_203531_nov25_fix_report_permissions_attribution.php index b64cf91d0..3c52358aa 100644 --- a/database/migrations/core/2020_11_25_203531_nov25_fix_report_permissions_attribution.php +++ b/database/migrations/core/2020_11_25_203531_nov25_fix_report_permissions_attribution.php @@ -23,19 +23,19 @@ public function runOnMultiStore() */ public function up() { - Permission::where('namespace', 'like', '%.report.%') + Permission::where( 'namespace', 'like', '%.report.%' ) ->get() - ->each(function ($permission) { - $permission->namespace = str_replace('.report.', '.reports.', $permission->namespace); + ->each( function ( $permission ) { + $permission->namespace = str_replace( '.report.', '.reports.', $permission->namespace ); $permission->save(); - }); + } ); - $permissions = Permission::where('namespace', 'like', '%.reports.%') + $permissions = Permission::where( 'namespace', 'like', '%.reports.%' ) ->get(); - if ($permissions->count() > 0) { - Role::namespace('admin')->addPermissions($permissions); - Role::namespace('nexopos.store.administrator')->addPermissions($permissions); + if ( $permissions->count() > 0 ) { + Role::namespace( 'admin' )->addPermissions( $permissions ); + Role::namespace( 'nexopos.store.administrator' )->addPermissions( $permissions ); } } diff --git a/database/migrations/core/2020_12_08_210001_dec8add_new_permissions.php b/database/migrations/core/2020_12_08_210001_dec8add_new_permissions.php index a2f442cdb..ccc87d48c 100644 --- a/database/migrations/core/2020_12_08_210001_dec8add_new_permissions.php +++ b/database/migrations/core/2020_12_08_210001_dec8add_new_permissions.php @@ -23,27 +23,27 @@ public function runOnMultiStore() */ public function up() { - $readHistory = Permission::withNamespaceOrNew('nexopos.read.cash-flow-history'); - $readHistory->name = __('Read Cash Flow History'); + $readHistory = Permission::withNamespaceOrNew( 'nexopos.read.cash-flow-history' ); + $readHistory->name = __( 'Read Cash Flow History' ); $readHistory->namespace = 'nexopos.read.cash-flow-history'; - $readHistory->description = __('Allow to the Cash Flow History.'); + $readHistory->description = __( 'Allow to the Cash Flow History.' ); $readHistory->save(); - $deleteHistory = Permission::withNamespaceOrNew('nexopos.delete.cash-flow-history'); - $deleteHistory->name = __('Delete Expense History'); + $deleteHistory = Permission::withNamespaceOrNew( 'nexopos.delete.cash-flow-history' ); + $deleteHistory->name = __( 'Delete Expense History' ); $deleteHistory->namespace = 'nexopos.delete.cash-flow-history'; - $deleteHistory->description = __('Allow to delete an expense history.'); + $deleteHistory->description = __( 'Allow to delete an expense history.' ); $deleteHistory->save(); - Role::namespace('admin')->addPermissions([ + Role::namespace( 'admin' )->addPermissions( [ $readHistory, $deleteHistory, - ]); + ] ); - Role::namespace('nexopos.store.administrator')->addPermissions([ + Role::namespace( 'nexopos.store.administrator' )->addPermissions( [ $readHistory, $deleteHistory, - ]); + ] ); } /** diff --git a/database/migrations/core/2020_12_19_221434_create_nexopos_modules_migrations_table.php b/database/migrations/core/2020_12_19_221434_create_nexopos_modules_migrations_table.php index c56670df6..03ea6b936 100644 --- a/database/migrations/core/2020_12_19_221434_create_nexopos_modules_migrations_table.php +++ b/database/migrations/core/2020_12_19_221434_create_nexopos_modules_migrations_table.php @@ -23,12 +23,12 @@ public function runOnMultiStore() */ public function up() { - if (! Schema::hasTable('nexopos_modules_migrations')) { - Schema::create('nexopos_modules_migrations', function (Blueprint $table) { + if ( ! Schema::hasTable( 'nexopos_modules_migrations' ) ) { + Schema::create( 'nexopos_modules_migrations', function ( Blueprint $table ) { $table->id(); - $table->string('namespace'); - $table->string('file'); - }); + $table->string( 'namespace' ); + $table->string( 'file' ); + } ); } } @@ -39,6 +39,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_modules_migrations'); + Schema::dropIfExists( 'nexopos_modules_migrations' ); } }; diff --git a/database/migrations/core/2021_01_07_143635_add_new_customer_permission_janv7_21.php b/database/migrations/core/2021_01_07_143635_add_new_customer_permission_janv7_21.php index a22624726..0236da137 100644 --- a/database/migrations/core/2021_01_07_143635_add_new_customer_permission_janv7_21.php +++ b/database/migrations/core/2021_01_07_143635_add_new_customer_permission_janv7_21.php @@ -25,16 +25,16 @@ public function runOnMultiStore() */ public function up() { - if (! Permission::namespace('nexopos.customers.manage-account') instanceof Permission) { - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.customers.manage-account' ]); + if ( ! Permission::namespace( 'nexopos.customers.manage-account' ) instanceof Permission ) { + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.customers.manage-account' ] ); $permission->namespace = 'nexopos.customers.manage-account'; - $permission->name = __('Manage Customers Account'); - $permission->description = __('Allow to manage customer virtual deposit account.'); + $permission->name = __( 'Manage Customers Account' ); + $permission->description = __( 'Allow to manage customer virtual deposit account.' ); $permission->save(); } - Role::namespace('admin')->addPermissions('nexopos.customers.manage-account'); - Role::namespace('nexopos.store.administrator')->addPermissions('nexopos.customers.manage-account'); + Role::namespace( 'admin' )->addPermissions( 'nexopos.customers.manage-account' ); + Role::namespace( 'nexopos.store.administrator' )->addPermissions( 'nexopos.customers.manage-account' ); } /** @@ -44,11 +44,11 @@ public function up() */ public function down() { - if (Schema::hasTable('nexopos_permissions')) { - $permission = Permission::namespace('nexopos.customers.manage-account'); + if ( Schema::hasTable( 'nexopos_permissions' ) ) { + $permission = Permission::namespace( 'nexopos.customers.manage-account' ); - if ($permission instanceof Permission) { - RolePermission::where('permission_id', $permission->id)->delete(); + if ( $permission instanceof Permission ) { + RolePermission::where( 'permission_id', $permission->id )->delete(); $permission->delete(); } } diff --git a/database/migrations/core/2021_03_09_165538_create_new_permissions_march_9.php b/database/migrations/core/2021_03_09_165538_create_new_permissions_march_9.php index 1f1b5b02c..960650744 100644 --- a/database/migrations/core/2021_03_09_165538_create_new_permissions_march_9.php +++ b/database/migrations/core/2021_03_09_165538_create_new_permissions_march_9.php @@ -23,13 +23,13 @@ public function runOnMultiStore() */ public function up() { - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.create.products-labels' ]); - $permission->name = __('Create Products Labels'); - $permission->description = __('Allow the user to create products labels'); + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.products-labels' ] ); + $permission->name = __( 'Create Products Labels' ); + $permission->description = __( 'Allow the user to create products labels' ); $permission->save(); - Role::namespace('admin')->addPermissions($permission); - Role::namespace('nexopos.store.administrator')->addPermissions($permission); + Role::namespace( 'admin' )->addPermissions( $permission ); + Role::namespace( 'nexopos.store.administrator' )->addPermissions( $permission ); } /** @@ -39,7 +39,7 @@ public function up() */ public function down() { - $permission = Permission::namespace('nexopos.create.products-labels'); + $permission = Permission::namespace( 'nexopos.create.products-labels' ); $permission->removeFromRoles(); $permission->delete(); } diff --git a/database/migrations/core/2021_05_25_175424_update_add_payment_type_permissions.php b/database/migrations/core/2021_05_25_175424_update_add_payment_type_permissions.php index 58232dce0..403a4d87b 100644 --- a/database/migrations/core/2021_05_25_175424_update_add_payment_type_permissions.php +++ b/database/migrations/core/2021_05_25_175424_update_add_payment_type_permissions.php @@ -25,18 +25,18 @@ public function runOnMultiStore() */ public function up() { - $permission = Permission::namespace('nexopos.manage-payments-types'); + $permission = Permission::namespace( 'nexopos.manage-payments-types' ); - if (! $permission instanceof Permission) { - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.manage-payments-types' ]); + if ( ! $permission instanceof Permission ) { + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.manage-payments-types' ] ); $permission->namespace = 'nexopos.manage-payments-types'; - $permission->name = __('Manage Order Payment Types'); - $permission->description = __('Allow to create, update and delete payments type.'); + $permission->name = __( 'Manage Order Payment Types' ); + $permission->description = __( 'Allow to create, update and delete payments type.' ); $permission->save(); } - Role::namespace('admin')->addPermissions($permission); - Role::namespace('nexopos.store.administrator')->addPermissions($permission); + Role::namespace( 'admin' )->addPermissions( $permission ); + Role::namespace( 'nexopos.store.administrator' )->addPermissions( $permission ); } /** @@ -46,11 +46,11 @@ public function up() */ public function down() { - if (Schema::hasTable('nexopos_permissions')) { - $permission = Permission::namespace('nexopos.manage-payments-types'); + if ( Schema::hasTable( 'nexopos_permissions' ) ) { + $permission = Permission::namespace( 'nexopos.manage-payments-types' ); - if ($permission instanceof Permission) { - RolePermission::where('permission_id', $permission->id)->delete(); + if ( $permission instanceof Permission ) { + RolePermission::where( 'permission_id', $permission->id )->delete(); $permission->delete(); } } diff --git a/database/migrations/core/2021_05_28_114827_create_new_report_permissions_may28.php b/database/migrations/core/2021_05_28_114827_create_new_report_permissions_may28.php index 0ce510ec3..28103b100 100644 --- a/database/migrations/core/2021_05_28_114827_create_new_report_permissions_may28.php +++ b/database/migrations/core/2021_05_28_114827_create_new_report_permissions_may28.php @@ -23,18 +23,18 @@ public function runOnMultiStore() */ public function up() { - $permission = Permission::namespace('nexopos.reports.payment-types'); + $permission = Permission::namespace( 'nexopos.reports.payment-types' ); - if (! $permission instanceof Permission) { - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.reports.payment-types' ]); - $permission->name = __('Read Sales by Payment Types'); + if ( ! $permission instanceof Permission ) { + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.reports.payment-types' ] ); + $permission->name = __( 'Read Sales by Payment Types' ); $permission->namespace = 'nexopos.reports.payment-types'; - $permission->description = __('Let the user read the report that shows sales by payment types.'); + $permission->description = __( 'Let the user read the report that shows sales by payment types.' ); $permission->save(); } - Role::namespace('admin')->addPermissions($permission); - Role::namespace('nexopos.store.administrator')->addPermissions($permission); + Role::namespace( 'admin' )->addPermissions( $permission ); + Role::namespace( 'nexopos.store.administrator' )->addPermissions( $permission ); } /** diff --git a/database/migrations/core/2021_06_24_053134_update_permissions_jun24.php b/database/migrations/core/2021_06_24_053134_update_permissions_jun24.php index fbd01bafa..801eb6423 100644 --- a/database/migrations/core/2021_06_24_053134_update_permissions_jun24.php +++ b/database/migrations/core/2021_06_24_053134_update_permissions_jun24.php @@ -23,18 +23,18 @@ public function runOnMultiStore() */ public function up() { - $permission = Permission::namespace('nexopos.reports.products-report'); + $permission = Permission::namespace( 'nexopos.reports.products-report' ); - if (! $permission instanceof Permission) { - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.reports.products-report' ]); - $permission->name = __('See Products Report'); + if ( ! $permission instanceof Permission ) { + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.reports.products-report' ] ); + $permission->name = __( 'See Products Report' ); $permission->namespace = 'nexopos.reports.products-report'; - $permission->description = __('Let you see the Products report'); + $permission->description = __( 'Let you see the Products report' ); $permission->save(); } - Role::namespace('admin')->addPermissions($permission); - Role::namespace('nexopos.store.administrator')->addPermissions($permission); + Role::namespace( 'admin' )->addPermissions( $permission ); + Role::namespace( 'nexopos.store.administrator' )->addPermissions( $permission ); } /** diff --git a/database/migrations/core/2021_07_31_153029_update_dashboard_days_report_jul31.php b/database/migrations/core/2021_07_31_153029_update_dashboard_days_report_jul31.php index ef1234edf..2950a4429 100644 --- a/database/migrations/core/2021_07_31_153029_update_dashboard_days_report_jul31.php +++ b/database/migrations/core/2021_07_31_153029_update_dashboard_days_report_jul31.php @@ -13,15 +13,15 @@ */ public function up() { - Schema::table('nexopos_dashboard_days', function (Blueprint $table) { - if (Schema::hasColumn('nexopos_dashboard_days', 'total_cashin')) { - $table->float('total_other_cashin')->default(0); + Schema::table( 'nexopos_dashboard_days', function ( Blueprint $table ) { + if ( Schema::hasColumn( 'nexopos_dashboard_days', 'total_cashin' ) ) { + $table->float( 'total_other_cashin' )->default( 0 ); } - if (Schema::hasColumn('nexopos_dashboard_days', 'day_cashin')) { - $table->float('day_other_cashin')->default(0); + if ( Schema::hasColumn( 'nexopos_dashboard_days', 'day_cashin' ) ) { + $table->float( 'day_other_cashin' )->default( 0 ); } - }); + } ); } /** diff --git a/database/migrations/create/0000_00_00_000000_create_websockets_statistics_entries_table.php b/database/migrations/create/0000_00_00_000000_create_websockets_statistics_entries_table.php index ab48ab419..ad9cdb9f4 100644 --- a/database/migrations/create/0000_00_00_000000_create_websockets_statistics_entries_table.php +++ b/database/migrations/create/0000_00_00_000000_create_websockets_statistics_entries_table.php @@ -23,15 +23,15 @@ public function runOnMultiStore() */ public function up() { - if (! Schema::hasTable('websockets_statistics_entries')) { - Schema::create('websockets_statistics_entries', function (Blueprint $table) { - $table->increments('id'); - $table->string('app_id'); - $table->integer('peak_connection_count'); - $table->integer('websocket_message_count'); - $table->integer('api_message_count'); + if ( ! Schema::hasTable( 'websockets_statistics_entries' ) ) { + Schema::create( 'websockets_statistics_entries', function ( Blueprint $table ) { + $table->increments( 'id' ); + $table->string( 'app_id' ); + $table->integer( 'peak_connection_count' ); + $table->integer( 'websocket_message_count' ); + $table->integer( 'api_message_count' ); $table->nullableTimestamps(); - }); + } ); } } @@ -42,6 +42,6 @@ public function up() */ public function down() { - Schema::dropIfExists('websockets_statistics_entries'); + Schema::dropIfExists( 'websockets_statistics_entries' ); } }; diff --git a/database/migrations/create/2014_10_12_000000_create_medias_table.php b/database/migrations/create/2014_10_12_000000_create_medias_table.php index 47ee2057a..887e71f87 100644 --- a/database/migrations/create/2014_10_12_000000_create_medias_table.php +++ b/database/migrations/create/2014_10_12_000000_create_medias_table.php @@ -13,14 +13,14 @@ */ public function up() { - Schema::createIfMissing('nexopos_medias', function (Blueprint $table) { - $table->increments('id'); - $table->string('name')->unique(); - $table->string('extension'); - $table->string('slug'); - $table->integer('user_id'); + Schema::createIfMissing( 'nexopos_medias', function ( Blueprint $table ) { + $table->increments( 'id' ); + $table->string( 'name' )->unique(); + $table->string( 'extension' ); + $table->string( 'slug' ); + $table->integer( 'user_id' ); $table->timestamps(); - }); + } ); } /** @@ -30,6 +30,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_medias'); + Schema::dropIfExists( 'nexopos_medias' ); } }; diff --git a/database/migrations/create/2017_12_29_174613_create_options_table.php b/database/migrations/create/2017_12_29_174613_create_options_table.php index 5424cf6d3..741d9b2e5 100644 --- a/database/migrations/create/2017_12_29_174613_create_options_table.php +++ b/database/migrations/create/2017_12_29_174613_create_options_table.php @@ -13,15 +13,15 @@ */ public function up() { - Schema::createIfMissing('nexopos_options', function (Blueprint $table) { - $table->increments('id'); - $table->integer('user_id')->nullable(); - $table->string('key'); - $table->text('value')->nullable(); - $table->datetime('expire_on')->nullable(); - $table->boolean('array'); // this will avoid some option to be saved as options + Schema::createIfMissing( 'nexopos_options', function ( Blueprint $table ) { + $table->increments( 'id' ); + $table->integer( 'user_id' )->nullable(); + $table->string( 'key' ); + $table->text( 'value' )->nullable(); + $table->datetime( 'expire_on' )->nullable(); + $table->boolean( 'array' ); // this will avoid some option to be saved as options $table->timestamps(); - }); + } ); } /** @@ -31,6 +31,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_options'); + Schema::dropIfExists( 'nexopos_options' ); } }; diff --git a/database/migrations/create/2020_06_20_000000_create_customers_groups_table.php b/database/migrations/create/2020_06_20_000000_create_customers_groups_table.php index e2554d340..bae2aa3f7 100644 --- a/database/migrations/create/2020_06_20_000000_create_customers_groups_table.php +++ b/database/migrations/create/2020_06_20_000000_create_customers_groups_table.php @@ -12,33 +12,33 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_customers_groups')) { - Schema::createIfMissing('nexopos_customers_groups', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('name'); - $table->text('description')->nullable(); - $table->integer('reward_system_id')->default(0)->nullable(); - $table->integer('minimal_credit_payment')->default(0); - $table->integer('author'); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_customers_groups' ) ) { + Schema::createIfMissing( 'nexopos_customers_groups', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'name' ); + $table->text( 'description' )->nullable(); + $table->integer( 'reward_system_id' )->default( 0 )->nullable(); + $table->integer( 'minimal_credit_payment' )->default( 0 ); + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_customers_groups')) { - Schema::drop('nexopos_customers_groups'); + if ( Schema::hasTable( 'nexopos_customers_groups' ) ) { + Schema::drop( 'nexopos_customers_groups' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_customers_table.php b/database/migrations/create/2020_06_20_000000_create_customers_table.php index 42e0a2769..c93c2fb67 100644 --- a/database/migrations/create/2020_06_20_000000_create_customers_table.php +++ b/database/migrations/create/2020_06_20_000000_create_customers_table.php @@ -12,55 +12,55 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_customers_addresses')) { - Schema::createIfMissing('nexopos_customers_addresses', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('customer_id'); - $table->string('type'); // either "billing" | "shipping" - $table->string('email')->nullable(); - $table->string('first_name')->nullable(); - $table->string('last_name')->nullable(); - $table->string('phone')->nullable(); - $table->string('address_1')->nullable(); - $table->string('address_2')->nullable(); - $table->string('country')->nullable(); - $table->string('city')->nullable(); - $table->string('pobox')->nullable(); - $table->string('company')->nullable(); - $table->string('uuid')->nullable(); - $table->integer('author'); + if ( ! Schema::hasTable( 'nexopos_customers_addresses' ) ) { + Schema::createIfMissing( 'nexopos_customers_addresses', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'customer_id' ); + $table->string( 'type' ); // either "billing" | "shipping" + $table->string( 'email' )->nullable(); + $table->string( 'first_name' )->nullable(); + $table->string( 'last_name' )->nullable(); + $table->string( 'phone' )->nullable(); + $table->string( 'address_1' )->nullable(); + $table->string( 'address_2' )->nullable(); + $table->string( 'country' )->nullable(); + $table->string( 'city' )->nullable(); + $table->string( 'pobox' )->nullable(); + $table->string( 'company' )->nullable(); + $table->string( 'uuid' )->nullable(); + $table->integer( 'author' ); $table->timestamps(); - }); + } ); } - if (! Schema::hasTable('nexopos_customers_account_history')) { - Schema::createIfMissing('nexopos_customers_account_history', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('customer_id'); - $table->integer('order_id')->nullable(); - $table->float('previous_amount')->default(0); - $table->float('amount')->default(0); - $table->float('next_amount')->default(0); - $table->string('operation'); // sub / add - $table->integer('author'); - $table->text('description')->nullable(); + if ( ! Schema::hasTable( 'nexopos_customers_account_history' ) ) { + Schema::createIfMissing( 'nexopos_customers_account_history', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'customer_id' ); + $table->integer( 'order_id' )->nullable(); + $table->float( 'previous_amount' )->default( 0 ); + $table->float( 'amount' )->default( 0 ); + $table->float( 'next_amount' )->default( 0 ); + $table->string( 'operation' ); // sub / add + $table->integer( 'author' ); + $table->text( 'description' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - Schema::dropIfExists('nexopos_customers_addresses'); - Schema::dropIfExists('nexopos_customers_account_history'); + Schema::dropIfExists( 'nexopos_customers_addresses' ); + Schema::dropIfExists( 'nexopos_customers_account_history' ); } }; diff --git a/database/migrations/create/2020_06_20_000000_create_expenses_categories_table.php b/database/migrations/create/2020_06_20_000000_create_expenses_categories_table.php index d226effc2..dbe8cc6e9 100644 --- a/database/migrations/create/2020_06_20_000000_create_expenses_categories_table.php +++ b/database/migrations/create/2020_06_20_000000_create_expenses_categories_table.php @@ -12,31 +12,31 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_transactions_accounts')) { - Schema::createIfMissing('nexopos_transactions_accounts', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('name'); - $table->string('operation')->default('debit'); // "credit" or "debit". - $table->string('account')->default(0); - $table->text('description')->nullable(); - $table->integer('author'); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_transactions_accounts' ) ) { + Schema::createIfMissing( 'nexopos_transactions_accounts', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'name' ); + $table->string( 'operation' )->default( 'debit' ); // "credit" or "debit". + $table->string( 'account' )->default( 0 ); + $table->text( 'description' )->nullable(); + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - Schema::dropIfExists('nexopos_transactions_accounts'); + Schema::dropIfExists( 'nexopos_transactions_accounts' ); } }; diff --git a/database/migrations/create/2020_06_20_000000_create_expenses_table.php b/database/migrations/create/2020_06_20_000000_create_expenses_table.php index 19215de73..a66e78575 100644 --- a/database/migrations/create/2020_06_20_000000_create_expenses_table.php +++ b/database/migrations/create/2020_06_20_000000_create_expenses_table.php @@ -12,37 +12,37 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - Schema::createIfMissing('nexopos_transactions', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('name'); - $table->integer('account_id'); - $table->text('description')->nullable(); - $table->integer('media_id')->default(0); - $table->float('value', 18, 5)->default(0); - $table->boolean('recurring')->default(false); - $table->string('type')->nullable(); // direct, recurring, salary - $table->boolean('active')->default(false); - $table->integer('group_id')->nullable(); - $table->string('occurrence')->nullable(); // 1st 15th startOfMonth, endOfMonth - $table->string('occurrence_value')->nullable(); // 1,2,3... - $table->dateTime('scheduled_date')->nullable(); - $table->integer('author'); - $table->string('uuid')->nullable(); + Schema::createIfMissing( 'nexopos_transactions', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'name' ); + $table->integer( 'account_id' ); + $table->text( 'description' )->nullable(); + $table->integer( 'media_id' )->default( 0 ); + $table->float( 'value', 18, 5 )->default( 0 ); + $table->boolean( 'recurring' )->default( false ); + $table->string( 'type' )->nullable(); // direct, recurring, salary + $table->boolean( 'active' )->default( false ); + $table->integer( 'group_id' )->nullable(); + $table->string( 'occurrence' )->nullable(); // 1st 15th startOfMonth, endOfMonth + $table->string( 'occurrence_value' )->nullable(); // 1,2,3... + $table->dateTime( 'scheduled_date' )->nullable(); + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - Schema::dropIfExists('nexopos_transactions'); + Schema::dropIfExists( 'nexopos_transactions' ); } }; diff --git a/database/migrations/create/2020_06_20_000000_create_orders_addresses_table.php b/database/migrations/create/2020_06_20_000000_create_orders_addresses_table.php index 8a7ae7905..8e8044d56 100644 --- a/database/migrations/create/2020_06_20_000000_create_orders_addresses_table.php +++ b/database/migrations/create/2020_06_20_000000_create_orders_addresses_table.php @@ -12,41 +12,41 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_orders_addresses')) { - Schema::createIfMissing('nexopos_orders_addresses', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('order_id'); - $table->string('type'); // either "billing" or "shipping" - $table->string('first_name')->nullable(); - $table->string('last_name')->nullable(); - $table->string('phone')->nullable(); - $table->string('address_1')->nullable(); - $table->string('email')->nullable(); - $table->string('address_2')->nullable(); - $table->string('country')->nullable(); - $table->string('city')->nullable(); - $table->string('pobox')->nullable(); - $table->string('company')->nullable(); - $table->integer('author'); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_orders_addresses' ) ) { + Schema::createIfMissing( 'nexopos_orders_addresses', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'order_id' ); + $table->string( 'type' ); // either "billing" or "shipping" + $table->string( 'first_name' )->nullable(); + $table->string( 'last_name' )->nullable(); + $table->string( 'phone' )->nullable(); + $table->string( 'address_1' )->nullable(); + $table->string( 'email' )->nullable(); + $table->string( 'address_2' )->nullable(); + $table->string( 'country' )->nullable(); + $table->string( 'city' )->nullable(); + $table->string( 'pobox' )->nullable(); + $table->string( 'company' )->nullable(); + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_orders_addresses')) { - Schema::drop('nexopos_orders_addresses'); + if ( Schema::hasTable( 'nexopos_orders_addresses' ) ) { + Schema::drop( 'nexopos_orders_addresses' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_orders_coupons_table.php b/database/migrations/create/2020_06_20_000000_create_orders_coupons_table.php index 0db7f6be3..22a38b5a0 100644 --- a/database/migrations/create/2020_06_20_000000_create_orders_coupons_table.php +++ b/database/migrations/create/2020_06_20_000000_create_orders_coupons_table.php @@ -12,41 +12,41 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_orders_coupons')) { - Schema::createIfMissing('nexopos_orders_coupons', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('code'); - $table->string('name'); - $table->integer('customer_coupon_id'); - $table->integer('coupon_id'); - $table->integer('order_id'); - $table->string('type'); // discount_percentage, flat_percentage - $table->float('discount_value', 18, 5); - $table->float('minimum_cart_value', 18, 5)->default(0); - $table->float('maximum_cart_value', 18, 5)->default(0); - $table->integer('limit_usage')->default(0); - $table->float('value', 18, 5)->default(0); - $table->integer('author'); - $table->boolean('counted')->default(false); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_orders_coupons' ) ) { + Schema::createIfMissing( 'nexopos_orders_coupons', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'code' ); + $table->string( 'name' ); + $table->integer( 'customer_coupon_id' ); + $table->integer( 'coupon_id' ); + $table->integer( 'order_id' ); + $table->string( 'type' ); // discount_percentage, flat_percentage + $table->float( 'discount_value', 18, 5 ); + $table->float( 'minimum_cart_value', 18, 5 )->default( 0 ); + $table->float( 'maximum_cart_value', 18, 5 )->default( 0 ); + $table->integer( 'limit_usage' )->default( 0 ); + $table->float( 'value', 18, 5 )->default( 0 ); + $table->integer( 'author' ); + $table->boolean( 'counted' )->default( false ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_orders_coupons')) { - Schema::dropIfExists('nexopos_orders_coupons'); + if ( Schema::hasTable( 'nexopos_orders_coupons' ) ) { + Schema::dropIfExists( 'nexopos_orders_coupons' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_orders_metas_table.php b/database/migrations/create/2020_06_20_000000_create_orders_metas_table.php index 66ac3d71b..fb2462821 100644 --- a/database/migrations/create/2020_06_20_000000_create_orders_metas_table.php +++ b/database/migrations/create/2020_06_20_000000_create_orders_metas_table.php @@ -12,32 +12,32 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_orders_metas')) { - Schema::createIfMissing('nexopos_orders_metas', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('order_id'); - $table->string('key'); - $table->string('value'); - $table->integer('author'); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_orders_metas' ) ) { + Schema::createIfMissing( 'nexopos_orders_metas', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'order_id' ); + $table->string( 'key' ); + $table->string( 'value' ); + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_orders_metas')) { - Schema::dropIfExists('nexopos_orders_metas'); + if ( Schema::hasTable( 'nexopos_orders_metas' ) ) { + Schema::dropIfExists( 'nexopos_orders_metas' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_orders_payment_table.php b/database/migrations/create/2020_06_20_000000_create_orders_payment_table.php index 68898a21e..7e41eed93 100644 --- a/database/migrations/create/2020_06_20_000000_create_orders_payment_table.php +++ b/database/migrations/create/2020_06_20_000000_create_orders_payment_table.php @@ -12,32 +12,32 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_orders_payments')) { - Schema::createIfMissing('nexopos_orders_payments', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('order_id'); - $table->float('value', 18, 5)->default(0); - $table->integer('author'); - $table->string('identifier'); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_orders_payments' ) ) { + Schema::createIfMissing( 'nexopos_orders_payments', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'order_id' ); + $table->float( 'value', 18, 5 )->default( 0 ); + $table->integer( 'author' ); + $table->string( 'identifier' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_orders_payments')) { - Schema::dropIfExists('nexopos_orders_payments'); + if ( Schema::hasTable( 'nexopos_orders_payments' ) ) { + Schema::dropIfExists( 'nexopos_orders_payments' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_orders_products_table.php b/database/migrations/create/2020_06_20_000000_create_orders_products_table.php index 50ac4ab2e..1318b0564 100644 --- a/database/migrations/create/2020_06_20_000000_create_orders_products_table.php +++ b/database/migrations/create/2020_06_20_000000_create_orders_products_table.php @@ -12,58 +12,58 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_orders_products')) { - Schema::createIfMissing('nexopos_orders_products', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('name'); - $table->string('unit_name')->nullable(); - $table->string('mode')->default('normal'); // - $table->string('product_type')->default('product'); // group - $table->integer('product_id'); - $table->integer('order_id'); - $table->integer('unit_id'); - $table->integer('unit_quantity_id'); - $table->integer('product_category_id'); - $table->integer('procurement_product_id')->nullable(); - $table->integer('tax_group_id')->default(0); - $table->string('tax_type')->default(0); - $table->string('uuid')->nullable(); - $table->string('status')->default('sold'); // sold, refunded - $table->text('return_observations')->nullable(); - $table->string('return_condition')->nullable(); - $table->string('discount_type')->default('none'); - $table->float('discount', 18, 5)->default(0); - $table->float('quantity', 18, 5); // could be the base unit - $table->float('discount_percentage', 18, 5)->default(0); - $table->float('unit_price', 18, 5)->default(0); - $table->float('price_with_tax', 18, 5)->default(0); - $table->float('price_without_tax', 18, 5)->default(0); - $table->float('wholesale_tax_value', 18, 5)->default(0); - $table->float('sale_tax_value', 18, 5)->default(0); - $table->float('tax_value', 18, 5)->default(0); - $table->float('rate')->default(0); - $table->float('total_price', 18, 5)->default(0); - $table->float('total_price_with_tax', 18, 5)->default(0); - $table->float('total_price_without_tax', 18, 5)->default(0); - $table->float('total_purchase_price', 18, 5)->default(0); + if ( ! Schema::hasTable( 'nexopos_orders_products' ) ) { + Schema::createIfMissing( 'nexopos_orders_products', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'name' ); + $table->string( 'unit_name' )->nullable(); + $table->string( 'mode' )->default( 'normal' ); // + $table->string( 'product_type' )->default( 'product' ); // group + $table->integer( 'product_id' ); + $table->integer( 'order_id' ); + $table->integer( 'unit_id' ); + $table->integer( 'unit_quantity_id' ); + $table->integer( 'product_category_id' ); + $table->integer( 'procurement_product_id' )->nullable(); + $table->integer( 'tax_group_id' )->default( 0 ); + $table->string( 'tax_type' )->default( 0 ); + $table->string( 'uuid' )->nullable(); + $table->string( 'status' )->default( 'sold' ); // sold, refunded + $table->text( 'return_observations' )->nullable(); + $table->string( 'return_condition' )->nullable(); + $table->string( 'discount_type' )->default( 'none' ); + $table->float( 'discount', 18, 5 )->default( 0 ); + $table->float( 'quantity', 18, 5 ); // could be the base unit + $table->float( 'discount_percentage', 18, 5 )->default( 0 ); + $table->float( 'unit_price', 18, 5 )->default( 0 ); + $table->float( 'price_with_tax', 18, 5 )->default( 0 ); + $table->float( 'price_without_tax', 18, 5 )->default( 0 ); + $table->float( 'wholesale_tax_value', 18, 5 )->default( 0 ); + $table->float( 'sale_tax_value', 18, 5 )->default( 0 ); + $table->float( 'tax_value', 18, 5 )->default( 0 ); + $table->float( 'rate' )->default( 0 ); + $table->float( 'total_price', 18, 5 )->default( 0 ); + $table->float( 'total_price_with_tax', 18, 5 )->default( 0 ); + $table->float( 'total_price_without_tax', 18, 5 )->default( 0 ); + $table->float( 'total_purchase_price', 18, 5 )->default( 0 ); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_orders_products')) { - Schema::dropIfExists('nexopos_orders_products'); + if ( Schema::hasTable( 'nexopos_orders_products' ) ) { + Schema::dropIfExists( 'nexopos_orders_products' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_orders_table.php b/database/migrations/create/2020_06_20_000000_create_orders_table.php index 6d6a61456..46f1010a4 100644 --- a/database/migrations/create/2020_06_20_000000_create_orders_table.php +++ b/database/migrations/create/2020_06_20_000000_create_orders_table.php @@ -12,89 +12,89 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_orders')) { - Schema::createIfMissing('nexopos_orders', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->text('description')->nullable(); - $table->string('code'); - $table->string('title')->nullable(); - $table->string('type'); // delivery, in_store - $table->string('payment_status'); // paid, unpaid, partially_paid - $table->string('process_status')->default('pending'); // complete, ongoing, pending - $table->string('delivery_status')->default('pending'); // pending, shipped, delivered, - $table->float('discount', 18, 5)->default(0); - $table->string('discount_type')->nullable(); - $table->boolean('support_instalments')->default(true); // define whether an order should only be paid using instalments feature - $table->float('discount_percentage', 18, 5)->nullable(); - $table->float('shipping', 18, 5)->default(0); // could be set manually or computed based on shipping_rate and shipping_type - $table->float('shipping_rate', 18, 5)->default(0); - $table->string('shipping_type')->nullable(); // "flat" | "percentage" (based on the order total) - $table->float('total_without_tax', 18, 5)->default(0); - $table->float('subtotal', 18, 5)->default(0); - $table->float('total_with_tax', 18, 5)->default(0); - $table->float('total_coupons', 18, 5)->default(0); - $table->float('total', 18, 5)->default(0); - $table->float('tax_value', 18, 5)->default(0); - $table->float('products_tax_value')->default(0); - $table->float('total_tax_value')->default(0); - $table->integer('tax_group_id')->nullable(); - $table->string('tax_type')->nullable(); - $table->float('tendered', 18, 5)->default(0); - $table->float('change', 18, 5)->default(0); - $table->datetime('final_payment_date')->nullable(); - $table->integer('total_instalments')->default(0); - $table->integer('customer_id'); - $table->string('note')->nullable(); - $table->string('note_visibility')->nullable(); - $table->integer('author'); - $table->string('uuid')->nullable(); - $table->integer('register_id')->nullable(); - $table->text('voidance_reason')->nullable(); + if ( ! Schema::hasTable( 'nexopos_orders' ) ) { + Schema::createIfMissing( 'nexopos_orders', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->text( 'description' )->nullable(); + $table->string( 'code' ); + $table->string( 'title' )->nullable(); + $table->string( 'type' ); // delivery, in_store + $table->string( 'payment_status' ); // paid, unpaid, partially_paid + $table->string( 'process_status' )->default( 'pending' ); // complete, ongoing, pending + $table->string( 'delivery_status' )->default( 'pending' ); // pending, shipped, delivered, + $table->float( 'discount', 18, 5 )->default( 0 ); + $table->string( 'discount_type' )->nullable(); + $table->boolean( 'support_instalments' )->default( true ); // define whether an order should only be paid using instalments feature + $table->float( 'discount_percentage', 18, 5 )->nullable(); + $table->float( 'shipping', 18, 5 )->default( 0 ); // could be set manually or computed based on shipping_rate and shipping_type + $table->float( 'shipping_rate', 18, 5 )->default( 0 ); + $table->string( 'shipping_type' )->nullable(); // "flat" | "percentage" (based on the order total) + $table->float( 'total_without_tax', 18, 5 )->default( 0 ); + $table->float( 'subtotal', 18, 5 )->default( 0 ); + $table->float( 'total_with_tax', 18, 5 )->default( 0 ); + $table->float( 'total_coupons', 18, 5 )->default( 0 ); + $table->float( 'total', 18, 5 )->default( 0 ); + $table->float( 'tax_value', 18, 5 )->default( 0 ); + $table->float( 'products_tax_value' )->default( 0 ); + $table->float( 'total_tax_value' )->default( 0 ); + $table->integer( 'tax_group_id' )->nullable(); + $table->string( 'tax_type' )->nullable(); + $table->float( 'tendered', 18, 5 )->default( 0 ); + $table->float( 'change', 18, 5 )->default( 0 ); + $table->datetime( 'final_payment_date' )->nullable(); + $table->integer( 'total_instalments' )->default( 0 ); + $table->integer( 'customer_id' ); + $table->string( 'note' )->nullable(); + $table->string( 'note_visibility' )->nullable(); + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); + $table->integer( 'register_id' )->nullable(); + $table->text( 'voidance_reason' )->nullable(); $table->timestamps(); - }); + } ); } - if (! Schema::hasTable('nexopos_orders_count')) { - Schema::createIfMissing('nexopos_orders_count', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('count'); - $table->datetime('date'); - }); + if ( ! Schema::hasTable( 'nexopos_orders_count' ) ) { + Schema::createIfMissing( 'nexopos_orders_count', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'count' ); + $table->datetime( 'date' ); + } ); } - if (! Schema::hasTable('nexopos_orders_taxes')) { - Schema::createIfMissing('nexopos_orders_taxes', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('tax_id')->nullable(); - $table->integer('order_id')->nullable(); - $table->float('rate'); - $table->string('tax_name')->nullable(); - $table->float('tax_value')->default(0); - }); + if ( ! Schema::hasTable( 'nexopos_orders_taxes' ) ) { + Schema::createIfMissing( 'nexopos_orders_taxes', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'tax_id' )->nullable(); + $table->integer( 'order_id' )->nullable(); + $table->float( 'rate' ); + $table->string( 'tax_name' )->nullable(); + $table->float( 'tax_value' )->default( 0 ); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_orders')) { - Schema::dropIfExists('nexopos_orders'); + if ( Schema::hasTable( 'nexopos_orders' ) ) { + Schema::dropIfExists( 'nexopos_orders' ); } - if (Schema::hasTable('nexopos_orders_count')) { - Schema::dropIfExists('nexopos_orders_count'); + if ( Schema::hasTable( 'nexopos_orders_count' ) ) { + Schema::dropIfExists( 'nexopos_orders_count' ); } - if (Schema::hasTable('nexopos_orders_taxes')) { - Schema::dropIfExists('nexopos_orders_taxes'); + if ( Schema::hasTable( 'nexopos_orders_taxes' ) ) { + Schema::dropIfExists( 'nexopos_orders_taxes' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_procurements_products_table.php b/database/migrations/create/2020_06_20_000000_create_procurements_products_table.php index be2283a75..bb42cea0e 100644 --- a/database/migrations/create/2020_06_20_000000_create_procurements_products_table.php +++ b/database/migrations/create/2020_06_20_000000_create_procurements_products_table.php @@ -12,45 +12,45 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_procurements_products')) { - Schema::createIfMissing('nexopos_procurements_products', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('name'); - $table->float('gross_purchase_price', 18, 5)->default(0); - $table->float('net_purchase_price', 18, 5)->default(0); - $table->integer('procurement_id'); - $table->integer('product_id'); - $table->float('purchase_price', 18, 5)->default(0); - $table->float('quantity', 18, 5); - $table->float('available_quantity', 18, 5); - $table->integer('tax_group_id'); - $table->string('barcode')->nullable(); - $table->datetime('expiration_date')->nullable(); - $table->string('tax_type'); // inclusive or exclusive; - $table->float('tax_value', 18, 5)->default(0); - $table->float('total_purchase_price', 18, 5)->default(0); - $table->integer('unit_id'); - $table->integer('convert_unit_id')->nullable(); - $table->integer('author'); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_procurements_products' ) ) { + Schema::createIfMissing( 'nexopos_procurements_products', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'name' ); + $table->float( 'gross_purchase_price', 18, 5 )->default( 0 ); + $table->float( 'net_purchase_price', 18, 5 )->default( 0 ); + $table->integer( 'procurement_id' ); + $table->integer( 'product_id' ); + $table->float( 'purchase_price', 18, 5 )->default( 0 ); + $table->float( 'quantity', 18, 5 ); + $table->float( 'available_quantity', 18, 5 ); + $table->integer( 'tax_group_id' ); + $table->string( 'barcode' )->nullable(); + $table->datetime( 'expiration_date' )->nullable(); + $table->string( 'tax_type' ); // inclusive or exclusive; + $table->float( 'tax_value', 18, 5 )->default( 0 ); + $table->float( 'total_purchase_price', 18, 5 )->default( 0 ); + $table->integer( 'unit_id' ); + $table->integer( 'convert_unit_id' )->nullable(); + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_procurements_products')) { - Schema::dropIfExists('nexopos_procurements_products'); + if ( Schema::hasTable( 'nexopos_procurements_products' ) ) { + Schema::dropIfExists( 'nexopos_procurements_products' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_procurements_table.php b/database/migrations/create/2020_06_20_000000_create_procurements_table.php index b1e10c972..3317453ab 100644 --- a/database/migrations/create/2020_06_20_000000_create_procurements_table.php +++ b/database/migrations/create/2020_06_20_000000_create_procurements_table.php @@ -12,42 +12,42 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_procurements')) { - Schema::createIfMissing('nexopos_procurements', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('name'); - $table->integer('provider_id'); - $table->float('value', 18, 5)->default(0); - $table->float('cost', 18, 5)->default(0); - $table->float('tax_value', 18, 5)->default(0); - $table->string('invoice_reference')->nullable(); - $table->boolean('automatic_approval')->default(false)->nullable(); - $table->datetime('delivery_time')->nullable(); - $table->datetime('invoice_date')->nullable(); - $table->string('payment_status')->default('unpaid'); // paid | unpaid - $table->string('delivery_status')->default('pending'); // pending, delivered, stocked - $table->integer('total_items')->default(0); - $table->text('description')->nullable(); - $table->integer('author'); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_procurements' ) ) { + Schema::createIfMissing( 'nexopos_procurements', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'name' ); + $table->integer( 'provider_id' ); + $table->float( 'value', 18, 5 )->default( 0 ); + $table->float( 'cost', 18, 5 )->default( 0 ); + $table->float( 'tax_value', 18, 5 )->default( 0 ); + $table->string( 'invoice_reference' )->nullable(); + $table->boolean( 'automatic_approval' )->default( false )->nullable(); + $table->datetime( 'delivery_time' )->nullable(); + $table->datetime( 'invoice_date' )->nullable(); + $table->string( 'payment_status' )->default( 'unpaid' ); // paid | unpaid + $table->string( 'delivery_status' )->default( 'pending' ); // pending, delivered, stocked + $table->integer( 'total_items' )->default( 0 ); + $table->text( 'description' )->nullable(); + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_procurements')) { - Schema::dropIfExists('nexopos_procurements'); + if ( Schema::hasTable( 'nexopos_procurements' ) ) { + Schema::dropIfExists( 'nexopos_procurements' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_products_categories_table.php b/database/migrations/create/2020_06_20_000000_create_products_categories_table.php index 5b6416893..f20490e9e 100644 --- a/database/migrations/create/2020_06_20_000000_create_products_categories_table.php +++ b/database/migrations/create/2020_06_20_000000_create_products_categories_table.php @@ -12,36 +12,36 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_products_categories')) { - Schema::createIfMissing('nexopos_products_categories', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('name'); - $table->integer('parent_id')->default(0)->nullable(); - $table->integer('media_id')->default(0); - $table->string('preview_url')->nullable(); - $table->boolean('displays_on_pos')->default(true); - $table->integer('total_items')->default(0); - $table->text('description')->nullable(); - $table->integer('author'); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_products_categories' ) ) { + Schema::createIfMissing( 'nexopos_products_categories', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'name' ); + $table->integer( 'parent_id' )->default( 0 )->nullable(); + $table->integer( 'media_id' )->default( 0 ); + $table->string( 'preview_url' )->nullable(); + $table->boolean( 'displays_on_pos' )->default( true ); + $table->integer( 'total_items' )->default( 0 ); + $table->text( 'description' )->nullable(); + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_products_categories')) { - Schema::dropIfExists('nexopos_products_categories'); + if ( Schema::hasTable( 'nexopos_products_categories' ) ) { + Schema::dropIfExists( 'nexopos_products_categories' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_products_gallery_table.php b/database/migrations/create/2020_06_20_000000_create_products_gallery_table.php index d22aaa447..82bf26edf 100644 --- a/database/migrations/create/2020_06_20_000000_create_products_gallery_table.php +++ b/database/migrations/create/2020_06_20_000000_create_products_gallery_table.php @@ -12,35 +12,35 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_products_galleries')) { - Schema::createIfMissing('nexopos_products_galleries', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('name')->nullable(); - $table->integer('product_id'); - $table->integer('media_id')->nullable(); - $table->string('url')->nullable(); - $table->integer('order')->default(0); - $table->boolean('featured')->default(0); - $table->integer('author'); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_products_galleries' ) ) { + Schema::createIfMissing( 'nexopos_products_galleries', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'name' )->nullable(); + $table->integer( 'product_id' ); + $table->integer( 'media_id' )->nullable(); + $table->string( 'url' )->nullable(); + $table->integer( 'order' )->default( 0 ); + $table->boolean( 'featured' )->default( 0 ); + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_products_galleries')) { - Schema::dropIfExists('nexopos_products_galleries'); + if ( Schema::hasTable( 'nexopos_products_galleries' ) ) { + Schema::dropIfExists( 'nexopos_products_galleries' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_products_history_table.php b/database/migrations/create/2020_06_20_000000_create_products_history_table.php index 64c922f08..b52c2223e 100644 --- a/database/migrations/create/2020_06_20_000000_create_products_history_table.php +++ b/database/migrations/create/2020_06_20_000000_create_products_history_table.php @@ -12,42 +12,42 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_products_histories')) { - Schema::createIfMissing('nexopos_products_histories', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('product_id'); - $table->integer('procurement_id')->nullable(); - $table->integer('procurement_product_id')->nullable(); - $table->integer('order_id')->nullable(); - $table->integer('order_product_id')->nullable(); - $table->string('operation_type'); // sale, procurement, adjustment, return, defective - $table->integer('unit_id'); - $table->float('before_quantity', 18, 5)->nullable(); - $table->float('quantity', 18, 5); // current unit quantity - $table->float('after_quantity', 18, 5)->nullable(); - $table->float('unit_price', 18, 5); // could be the cost of the procurement, the lost (defective) - $table->float('total_price', 18, 5); // could be the cost of the procurement, the lost (defective) - $table->text('description')->nullable(); - $table->integer('author'); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_products_histories' ) ) { + Schema::createIfMissing( 'nexopos_products_histories', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'product_id' ); + $table->integer( 'procurement_id' )->nullable(); + $table->integer( 'procurement_product_id' )->nullable(); + $table->integer( 'order_id' )->nullable(); + $table->integer( 'order_product_id' )->nullable(); + $table->string( 'operation_type' ); // sale, procurement, adjustment, return, defective + $table->integer( 'unit_id' ); + $table->float( 'before_quantity', 18, 5 )->nullable(); + $table->float( 'quantity', 18, 5 ); // current unit quantity + $table->float( 'after_quantity', 18, 5 )->nullable(); + $table->float( 'unit_price', 18, 5 ); // could be the cost of the procurement, the lost (defective) + $table->float( 'total_price', 18, 5 ); // could be the cost of the procurement, the lost (defective) + $table->text( 'description' )->nullable(); + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_products_histories')) { - Schema::dropIfExists('nexopos_products_histories'); + if ( Schema::hasTable( 'nexopos_products_histories' ) ) { + Schema::dropIfExists( 'nexopos_products_histories' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_products_metas_table.php b/database/migrations/create/2020_06_20_000000_create_products_metas_table.php index 0f0f80679..65c1fe6df 100644 --- a/database/migrations/create/2020_06_20_000000_create_products_metas_table.php +++ b/database/migrations/create/2020_06_20_000000_create_products_metas_table.php @@ -12,32 +12,32 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_products_metas')) { - Schema::createIfMissing('nexopos_products_metas', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('product_id'); - $table->string('key'); - $table->text('value')->nullable(); - $table->integer('author'); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_products_metas' ) ) { + Schema::createIfMissing( 'nexopos_products_metas', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'product_id' ); + $table->string( 'key' ); + $table->text( 'value' )->nullable(); + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_products_metas')) { - Schema::dropIfExists('nexopos_products_metas'); + if ( Schema::hasTable( 'nexopos_products_metas' ) ) { + Schema::dropIfExists( 'nexopos_products_metas' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_products_table.php b/database/migrations/create/2020_06_20_000000_create_products_table.php index 7f44ffbf7..0dc4d9bdf 100644 --- a/database/migrations/create/2020_06_20_000000_create_products_table.php +++ b/database/migrations/create/2020_06_20_000000_create_products_table.php @@ -12,53 +12,53 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_products')) { - Schema::createIfMissing('nexopos_products', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('name'); - $table->string('tax_type')->nullable(); // inclusive, exclusive - $table->integer('tax_group_id')->nullable(); - $table->float('tax_value', 18, 5)->default(0); // computed automatically - $table->string('product_type')->default('product'); // product, variation, variable - $table->string('type')->default('tangible'); // intangible, tangible (or any other extended types) - $table->boolean('accurate_tracking')->default(0); // @since db 1.3 - $table->boolean('auto_cogs')->default(true); // @since v5.0.x - $table->string('status')->default('available'); // available, unavailable - $table->string('stock_management')->default('enabled'); // enabled, disabled - $table->string('barcode'); // works if the product type is "product" - $table->string('barcode_type'); // works if the product type is "product" - $table->string('sku'); // works if the product type is "product" + if ( ! Schema::hasTable( 'nexopos_products' ) ) { + Schema::createIfMissing( 'nexopos_products', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'name' ); + $table->string( 'tax_type' )->nullable(); // inclusive, exclusive + $table->integer( 'tax_group_id' )->nullable(); + $table->float( 'tax_value', 18, 5 )->default( 0 ); // computed automatically + $table->string( 'product_type' )->default( 'product' ); // product, variation, variable + $table->string( 'type' )->default( 'tangible' ); // intangible, tangible (or any other extended types) + $table->boolean( 'accurate_tracking' )->default( 0 ); // @since db 1.3 + $table->boolean( 'auto_cogs' )->default( true ); // @since v5.0.x + $table->string( 'status' )->default( 'available' ); // available, unavailable + $table->string( 'stock_management' )->default( 'enabled' ); // enabled, disabled + $table->string( 'barcode' ); // works if the product type is "product" + $table->string( 'barcode_type' ); // works if the product type is "product" + $table->string( 'sku' ); // works if the product type is "product" - $table->text('description')->nullable(); + $table->text( 'description' )->nullable(); - $table->integer('thumbnail_id')->nullable(); // link to medias - $table->integer('category_id')->nullable(); // could be nullable specially if it's a variation - $table->integer('parent_id')->default(0); // to refer to a parent variable product + $table->integer( 'thumbnail_id' )->nullable(); // link to medias + $table->integer( 'category_id' )->nullable(); // could be nullable specially if it's a variation + $table->integer( 'parent_id' )->default( 0 ); // to refer to a parent variable product - $table->integer('unit_group'); - $table->string('on_expiration')->default('prevent_sales'); // allow_sales, prevent_sales - $table->boolean('expires')->default(false); // true/false - $table->boolean('searchable')->default(true); // whether the product can be searched on the POS. - $table->integer('author'); - $table->string('uuid')->nullable(); + $table->integer( 'unit_group' ); + $table->string( 'on_expiration' )->default( 'prevent_sales' ); // allow_sales, prevent_sales + $table->boolean( 'expires' )->default( false ); // true/false + $table->boolean( 'searchable' )->default( true ); // whether the product can be searched on the POS. + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_products')) { - Schema::dropIfExists('nexopos_products'); + if ( Schema::hasTable( 'nexopos_products' ) ) { + Schema::dropIfExists( 'nexopos_products' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_products_taxes_table.php b/database/migrations/create/2020_06_20_000000_create_products_taxes_table.php index 1c6dc40ca..5a9caa7e2 100644 --- a/database/migrations/create/2020_06_20_000000_create_products_taxes_table.php +++ b/database/migrations/create/2020_06_20_000000_create_products_taxes_table.php @@ -12,35 +12,35 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_products_taxes')) { - Schema::createIfMissing('nexopos_products_taxes', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('product_id'); - $table->integer('unit_quantity_id'); - $table->string('tax_id'); // grouped, simple - $table->string('name'); - $table->float('rate', 18, 5); - $table->float('value', 18, 5); // actual computed tax value - $table->integer('author'); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_products_taxes' ) ) { + Schema::createIfMissing( 'nexopos_products_taxes', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'product_id' ); + $table->integer( 'unit_quantity_id' ); + $table->string( 'tax_id' ); // grouped, simple + $table->string( 'name' ); + $table->float( 'rate', 18, 5 ); + $table->float( 'value', 18, 5 ); // actual computed tax value + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_products_taxes')) { - Schema::dropIfExists('nexopos_products_taxes'); + if ( Schema::hasTable( 'nexopos_products_taxes' ) ) { + Schema::dropIfExists( 'nexopos_products_taxes' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_products_unit_quantities.php b/database/migrations/create/2020_06_20_000000_create_products_unit_quantities.php index 5d22ebbf4..67f4d86dc 100644 --- a/database/migrations/create/2020_06_20_000000_create_products_unit_quantities.php +++ b/database/migrations/create/2020_06_20_000000_create_products_unit_quantities.php @@ -12,55 +12,55 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_products_unit_quantities')) { - Schema::createIfMissing('nexopos_products_unit_quantities', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('product_id'); - $table->string('type')->default('product'); // product | variation - $table->string('preview_url')->nullable(); - $table->datetime('expiration_date')->nullable(); - $table->integer('unit_id'); - $table->string('barcode')->nullable(); - $table->float('quantity', 18, 5); - $table->float('low_quantity', 18, 5)->default(0); - $table->boolean('stock_alert_enabled')->default(false); - $table->float('sale_price', 18, 5)->default(0); // could be 0 if the product support variations - $table->float('sale_price_edit', 18, 5)->default(0); // to let the system consider the price sent by the client - $table->float('sale_price_without_tax', 18, 5)->default(0); // must be computed automatically - $table->float('sale_price_with_tax', 18, 5)->default(0); // must be computed automatically - $table->float('sale_price_tax', 18, 5)->default(0); - $table->float('wholesale_price', 18, 5)->default(0); - $table->float('wholesale_price_edit', 18, 5)->default(0); - $table->float('wholesale_price_with_tax', 18, 5)->default(0); // include tax whole sale price - $table->float('wholesale_price_without_tax', 18, 5)->default(0); // exclude tax whole sale price - $table->float('wholesale_price_tax', 18, 5)->default(0); - $table->float('custom_price', 18, 5)->default(0); - $table->float('custom_price_edit', 18, 5)->default(0); - $table->float('custom_price_with_tax', 18, 5)->default(0); - $table->float('custom_price_without_tax', 18, 5)->default(0); - $table->float('custom_price_tax', 18, 5)->default(0); - $table->boolean('visible')->default(true); // wether the unit should available for sale. - $table->integer('convert_unit_id')->nullable(); - $table->float('cogs')->default(0); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_products_unit_quantities' ) ) { + Schema::createIfMissing( 'nexopos_products_unit_quantities', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'product_id' ); + $table->string( 'type' )->default( 'product' ); // product | variation + $table->string( 'preview_url' )->nullable(); + $table->datetime( 'expiration_date' )->nullable(); + $table->integer( 'unit_id' ); + $table->string( 'barcode' )->nullable(); + $table->float( 'quantity', 18, 5 ); + $table->float( 'low_quantity', 18, 5 )->default( 0 ); + $table->boolean( 'stock_alert_enabled' )->default( false ); + $table->float( 'sale_price', 18, 5 )->default( 0 ); // could be 0 if the product support variations + $table->float( 'sale_price_edit', 18, 5 )->default( 0 ); // to let the system consider the price sent by the client + $table->float( 'sale_price_without_tax', 18, 5 )->default( 0 ); // must be computed automatically + $table->float( 'sale_price_with_tax', 18, 5 )->default( 0 ); // must be computed automatically + $table->float( 'sale_price_tax', 18, 5 )->default( 0 ); + $table->float( 'wholesale_price', 18, 5 )->default( 0 ); + $table->float( 'wholesale_price_edit', 18, 5 )->default( 0 ); + $table->float( 'wholesale_price_with_tax', 18, 5 )->default( 0 ); // include tax whole sale price + $table->float( 'wholesale_price_without_tax', 18, 5 )->default( 0 ); // exclude tax whole sale price + $table->float( 'wholesale_price_tax', 18, 5 )->default( 0 ); + $table->float( 'custom_price', 18, 5 )->default( 0 ); + $table->float( 'custom_price_edit', 18, 5 )->default( 0 ); + $table->float( 'custom_price_with_tax', 18, 5 )->default( 0 ); + $table->float( 'custom_price_without_tax', 18, 5 )->default( 0 ); + $table->float( 'custom_price_tax', 18, 5 )->default( 0 ); + $table->boolean( 'visible' )->default( true ); // wether the unit should available for sale. + $table->integer( 'convert_unit_id' )->nullable(); + $table->float( 'cogs' )->default( 0 ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_products_unit_quantities')) { - Schema::dropIfExists('nexopos_products_unit_quantities'); + if ( Schema::hasTable( 'nexopos_products_unit_quantities' ) ) { + Schema::dropIfExists( 'nexopos_products_unit_quantities' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_providers_table.php b/database/migrations/create/2020_06_20_000000_create_providers_table.php index 6f7cd007b..447ddb506 100644 --- a/database/migrations/create/2020_06_20_000000_create_providers_table.php +++ b/database/migrations/create/2020_06_20_000000_create_providers_table.php @@ -12,40 +12,40 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_providers')) { - Schema::createIfMissing('nexopos_providers', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('first_name'); - $table->string('last_name')->nullable(); - $table->string('email') + if ( ! Schema::hasTable( 'nexopos_providers' ) ) { + Schema::createIfMissing( 'nexopos_providers', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'first_name' ); + $table->string( 'last_name' )->nullable(); + $table->string( 'email' ) ->unique() ->nullable(); - $table->string('phone')->nullable(); - $table->string('address_1')->nullable(); - $table->string('address_2')->nullable(); - $table->integer('author'); - $table->text('description')->nullable(); - $table->float('amount_due', 18, 5)->default(0); - $table->float('amount_paid', 18, 5)->default(0); - $table->string('uuid')->nullable(); + $table->string( 'phone' )->nullable(); + $table->string( 'address_1' )->nullable(); + $table->string( 'address_2' )->nullable(); + $table->integer( 'author' ); + $table->text( 'description' )->nullable(); + $table->float( 'amount_due', 18, 5 )->default( 0 ); + $table->float( 'amount_paid', 18, 5 )->default( 0 ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_providers')) { - Schema::dropIfExists('nexopos_providers'); + if ( Schema::hasTable( 'nexopos_providers' ) ) { + Schema::dropIfExists( 'nexopos_providers' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_registers_history_table.php b/database/migrations/create/2020_06_20_000000_create_registers_history_table.php index e72857977..70947ddfd 100644 --- a/database/migrations/create/2020_06_20_000000_create_registers_history_table.php +++ b/database/migrations/create/2020_06_20_000000_create_registers_history_table.php @@ -12,39 +12,39 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_registers_history')) { - Schema::createIfMissing('nexopos_registers_history', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('register_id'); - $table->integer('payment_id')->nullable(); - $table->integer('payment_type_id')->default(0); - $table->integer('order_id')->nullable(); - $table->string('action'); - $table->integer('author'); - $table->float('value', 18, 5)->default(0); - $table->text('description')->nullable(); - $table->string('uuid')->nullable(); - $table->float('balance_before', 18, 5)->default(0); - $table->string('transaction_type')->nullable(); // can be "unchanged", "negative", "positive". - $table->float('balance_after', 18, 5)->default(0); + if ( ! Schema::hasTable( 'nexopos_registers_history' ) ) { + Schema::createIfMissing( 'nexopos_registers_history', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'register_id' ); + $table->integer( 'payment_id' )->nullable(); + $table->integer( 'payment_type_id' )->default( 0 ); + $table->integer( 'order_id' )->nullable(); + $table->string( 'action' ); + $table->integer( 'author' ); + $table->float( 'value', 18, 5 )->default( 0 ); + $table->text( 'description' )->nullable(); + $table->string( 'uuid' )->nullable(); + $table->float( 'balance_before', 18, 5 )->default( 0 ); + $table->string( 'transaction_type' )->nullable(); // can be "unchanged", "negative", "positive". + $table->float( 'balance_after', 18, 5 )->default( 0 ); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_registers_history')) { - Schema::dropIfExists('nexopos_registers_history'); + if ( Schema::hasTable( 'nexopos_registers_history' ) ) { + Schema::dropIfExists( 'nexopos_registers_history' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_registers_table.php b/database/migrations/create/2020_06_20_000000_create_registers_table.php index 0d7068fa4..b570f5b42 100644 --- a/database/migrations/create/2020_06_20_000000_create_registers_table.php +++ b/database/migrations/create/2020_06_20_000000_create_registers_table.php @@ -12,34 +12,34 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_registers')) { - Schema::createIfMissing('nexopos_registers', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('name'); - $table->string('status')->default('closed'); // open, closed, disabled - $table->text('description')->nullable(); - $table->integer('used_by')->nullable(); - $table->integer('author'); - $table->float('balance', 18, 5)->default(0); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_registers' ) ) { + Schema::createIfMissing( 'nexopos_registers', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'name' ); + $table->string( 'status' )->default( 'closed' ); // open, closed, disabled + $table->text( 'description' )->nullable(); + $table->integer( 'used_by' )->nullable(); + $table->integer( 'author' ); + $table->float( 'balance', 18, 5 )->default( 0 ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_registers')) { - Schema::dropIfExists('nexopos_registers'); + if ( Schema::hasTable( 'nexopos_registers' ) ) { + Schema::dropIfExists( 'nexopos_registers' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_rewards_system_rules_table.php b/database/migrations/create/2020_06_20_000000_create_rewards_system_rules_table.php index 0e96f0cf9..93517ed48 100644 --- a/database/migrations/create/2020_06_20_000000_create_rewards_system_rules_table.php +++ b/database/migrations/create/2020_06_20_000000_create_rewards_system_rules_table.php @@ -12,33 +12,33 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_rewards_system_rules')) { - Schema::createIfMissing('nexopos_rewards_system_rules', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->float('from', 18, 5); - $table->float('to', 18, 5); - $table->float('reward', 18, 5); - $table->integer('reward_id'); - $table->string('uuid')->nullable(); - $table->integer('author'); + if ( ! Schema::hasTable( 'nexopos_rewards_system_rules' ) ) { + Schema::createIfMissing( 'nexopos_rewards_system_rules', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->float( 'from', 18, 5 ); + $table->float( 'to', 18, 5 ); + $table->float( 'reward', 18, 5 ); + $table->integer( 'reward_id' ); + $table->string( 'uuid' )->nullable(); + $table->integer( 'author' ); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_rewards_system_rules')) { - Schema::dropIfExists('nexopos_rewards_system_rules'); + if ( Schema::hasTable( 'nexopos_rewards_system_rules' ) ) { + Schema::dropIfExists( 'nexopos_rewards_system_rules' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_rewards_system_table.php b/database/migrations/create/2020_06_20_000000_create_rewards_system_table.php index 929502503..d625e970d 100644 --- a/database/migrations/create/2020_06_20_000000_create_rewards_system_table.php +++ b/database/migrations/create/2020_06_20_000000_create_rewards_system_table.php @@ -12,33 +12,33 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_rewards_system')) { - Schema::createIfMissing('nexopos_rewards_system', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('author'); - $table->string('name'); - $table->float('target', 18, 5)->default(0); - $table->text('description')->nullable(); - $table->integer('coupon_id')->nullable(); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_rewards_system' ) ) { + Schema::createIfMissing( 'nexopos_rewards_system', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'author' ); + $table->string( 'name' ); + $table->float( 'target', 18, 5 )->default( 0 ); + $table->text( 'description' )->nullable(); + $table->integer( 'coupon_id' )->nullable(); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_rewards_system')) { - Schema::dropIfExists('nexopos_rewards_system'); + if ( Schema::hasTable( 'nexopos_rewards_system' ) ) { + Schema::dropIfExists( 'nexopos_rewards_system' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_taxes_table.php b/database/migrations/create/2020_06_20_000000_create_taxes_table.php index 0697dd701..1620c11f5 100644 --- a/database/migrations/create/2020_06_20_000000_create_taxes_table.php +++ b/database/migrations/create/2020_06_20_000000_create_taxes_table.php @@ -12,48 +12,48 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_taxes')) { - Schema::createIfMissing('nexopos_taxes', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('name'); - $table->text('description')->nullable(); - $table->float('rate', 18, 5); - $table->integer('tax_group_id'); - $table->integer('author'); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_taxes' ) ) { + Schema::createIfMissing( 'nexopos_taxes', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'name' ); + $table->text( 'description' )->nullable(); + $table->float( 'rate', 18, 5 ); + $table->integer( 'tax_group_id' ); + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } - if (! Schema::hasTable('nexopos_taxes_groups')) { - Schema::createIfMissing('nexopos_taxes_groups', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('name'); - $table->text('description')->nullable(); - $table->integer('author'); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_taxes_groups' ) ) { + Schema::createIfMissing( 'nexopos_taxes_groups', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'name' ); + $table->text( 'description' )->nullable(); + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_taxes')) { - Schema::dropIfExists('nexopos_taxes'); + if ( Schema::hasTable( 'nexopos_taxes' ) ) { + Schema::dropIfExists( 'nexopos_taxes' ); } - if (Schema::hasTable('nexopos_taxes_groups')) { - Schema::dropIfExists('nexopos_taxes_groups'); + if ( Schema::hasTable( 'nexopos_taxes_groups' ) ) { + Schema::dropIfExists( 'nexopos_taxes_groups' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_units_group_table.php b/database/migrations/create/2020_06_20_000000_create_units_group_table.php index 6c28f6983..361cd5da0 100644 --- a/database/migrations/create/2020_06_20_000000_create_units_group_table.php +++ b/database/migrations/create/2020_06_20_000000_create_units_group_table.php @@ -12,31 +12,31 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_units_groups')) { - Schema::createIfMissing('nexopos_units_groups', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('name'); - $table->text('description')->nullable(); - $table->integer('author'); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_units_groups' ) ) { + Schema::createIfMissing( 'nexopos_units_groups', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'name' ); + $table->text( 'description' )->nullable(); + $table->integer( 'author' ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_units_groups')) { - Schema::dropIfExists('nexopos_units_groups'); + if ( Schema::hasTable( 'nexopos_units_groups' ) ) { + Schema::dropIfExists( 'nexopos_units_groups' ); } } }; diff --git a/database/migrations/create/2020_06_20_000000_create_units_table.php b/database/migrations/create/2020_06_20_000000_create_units_table.php index 8d72ca015..dd33cc6a9 100644 --- a/database/migrations/create/2020_06_20_000000_create_units_table.php +++ b/database/migrations/create/2020_06_20_000000_create_units_table.php @@ -12,36 +12,36 @@ /** * Run the migrations. * - * @return void + * @return void */ public function up() { - if (! Schema::hasTable('nexopos_units')) { - Schema::createIfMissing('nexopos_units', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->string('name'); - $table->string('identifier')->unique(); - $table->text('description')->nullable(); - $table->integer('author'); - $table->integer('group_id'); - $table->float('value', 18, 5); - $table->string('preview_url')->nullable(); - $table->boolean('base_unit'); // 0, 1 - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_units' ) ) { + Schema::createIfMissing( 'nexopos_units', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->string( 'name' ); + $table->string( 'identifier' )->unique(); + $table->text( 'description' )->nullable(); + $table->integer( 'author' ); + $table->integer( 'group_id' ); + $table->float( 'value', 18, 5 ); + $table->string( 'preview_url' )->nullable(); + $table->boolean( 'base_unit' ); // 0, 1 + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } /** * Reverse the migrations. * - * @return void + * @return void */ public function down() { - if (Schema::hasTable('nexopos_units')) { - Schema::dropIfExists('nexopos_units'); + if ( Schema::hasTable( 'nexopos_units' ) ) { + Schema::dropIfExists( 'nexopos_units' ); } } }; diff --git a/database/migrations/create/2020_08_01_143801_create_customers_coupons_table.php b/database/migrations/create/2020_08_01_143801_create_customers_coupons_table.php index cef8f349d..947ca5870 100644 --- a/database/migrations/create/2020_08_01_143801_create_customers_coupons_table.php +++ b/database/migrations/create/2020_08_01_143801_create_customers_coupons_table.php @@ -13,18 +13,18 @@ */ public function up() { - Schema::createIfMissing('nexopos_customers_coupons', function (Blueprint $table) { + Schema::createIfMissing( 'nexopos_customers_coupons', function ( Blueprint $table ) { $table->id(); - $table->string('name'); - $table->integer('usage')->default(0); - $table->integer('limit_usage'); - $table->boolean('active')->default(true); - $table->string('code'); - $table->integer('coupon_id'); - $table->integer('customer_id'); - $table->integer('author'); + $table->string( 'name' ); + $table->integer( 'usage' )->default( 0 ); + $table->integer( 'limit_usage' ); + $table->boolean( 'active' )->default( true ); + $table->string( 'code' ); + $table->integer( 'coupon_id' ); + $table->integer( 'customer_id' ); + $table->integer( 'author' ); $table->timestamps(); - }); + } ); } /** @@ -34,6 +34,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_customers_coupons'); + Schema::dropIfExists( 'nexopos_customers_coupons' ); } }; diff --git a/database/migrations/create/2020_10_10_224639_create_dashboard_table.php b/database/migrations/create/2020_10_10_224639_create_dashboard_table.php index c01cf03ec..46b007d0f 100644 --- a/database/migrations/create/2020_10_10_224639_create_dashboard_table.php +++ b/database/migrations/create/2020_10_10_224639_create_dashboard_table.php @@ -13,21 +13,21 @@ */ public function up() { - if (! Schema::hasTable('nexopos_dashboard_days')) { - Schema::createIfMissing('nexopos_dashboard_days', function (Blueprint $table) { - if (! Schema::hasColumn('nexopos_dashboard_days', 'id')) { - $table->bigIncrements('id'); + if ( ! Schema::hasTable( 'nexopos_dashboard_days' ) ) { + Schema::createIfMissing( 'nexopos_dashboard_days', function ( Blueprint $table ) { + if ( ! Schema::hasColumn( 'nexopos_dashboard_days', 'id' ) ) { + $table->bigIncrements( 'id' ); } - }); + } ); } - if (Schema::hasTable('nexopos_dashboard_days')) { - Schema::table('nexopos_dashboard_days', function (Blueprint $table) { - if (! Schema::hasColumn('nexopos_dashboard_days', 'id')) { - $table->bigIncrements('id'); + if ( Schema::hasTable( 'nexopos_dashboard_days' ) ) { + Schema::table( 'nexopos_dashboard_days', function ( Blueprint $table ) { + if ( ! Schema::hasColumn( 'nexopos_dashboard_days', 'id' ) ) { + $table->bigIncrements( 'id' ); } - foreach ([ + foreach ( [ 'total_unpaid_orders', 'day_unpaid_orders', @@ -63,59 +63,59 @@ public function up() 'total_expenses', 'day_expenses', - ] as $column) { - if (! Schema::hasColumn('nexopos_dashboard_days', $column)) { - $table->float($column, 18, 5)->default(0); + ] as $column ) { + if ( ! Schema::hasColumn( 'nexopos_dashboard_days', $column ) ) { + $table->float( $column, 18, 5 )->default( 0 ); } } - if (! Schema::hasColumn('nexopos_dashboard_days', 'day_of_year')) { - $table->integer('day_of_year')->default(0); + if ( ! Schema::hasColumn( 'nexopos_dashboard_days', 'day_of_year' ) ) { + $table->integer( 'day_of_year' )->default( 0 ); } - if (! Schema::hasColumn('nexopos_dashboard_days', 'range_starts')) { - $table->datetime('range_starts')->nullable(); + if ( ! Schema::hasColumn( 'nexopos_dashboard_days', 'range_starts' ) ) { + $table->datetime( 'range_starts' )->nullable(); } - if (! Schema::hasColumn('nexopos_dashboard_days', 'range_ends')) { - $table->datetime('range_ends')->nullable(); + if ( ! Schema::hasColumn( 'nexopos_dashboard_days', 'range_ends' ) ) { + $table->datetime( 'range_ends' )->nullable(); } - }); + } ); } - if (! Schema::hasTable('nexopos_dashboard_weeks')) { - Schema::createIfMissing('nexopos_dashboard_weeks', function (Blueprint $table) { - if (! Schema::hasColumn('nexopos_dashboard_weeks', 'id')) { - $table->bigIncrements('id'); + if ( ! Schema::hasTable( 'nexopos_dashboard_weeks' ) ) { + Schema::createIfMissing( 'nexopos_dashboard_weeks', function ( Blueprint $table ) { + if ( ! Schema::hasColumn( 'nexopos_dashboard_weeks', 'id' ) ) { + $table->bigIncrements( 'id' ); } - }); + } ); } - if (Schema::hasTable('nexopos_dashboard_weeks')) { - Schema::table('nexopos_dashboard_weeks', function (Blueprint $table) { - foreach ([ + if ( Schema::hasTable( 'nexopos_dashboard_weeks' ) ) { + Schema::table( 'nexopos_dashboard_weeks', function ( Blueprint $table ) { + foreach ( [ 'total_gross_income', 'total_taxes', 'total_expenses', 'total_net_income', - ] as $column) { - if (! Schema::hasColumn('nexopos_dashboard_weeks', $column)) { - $table->float($column, 18, 5)->default(0); + ] as $column ) { + if ( ! Schema::hasColumn( 'nexopos_dashboard_weeks', $column ) ) { + $table->float( $column, 18, 5 )->default( 0 ); } } - if (! Schema::hasColumn('nexopos_dashboard_weeks', 'week_number')) { - $table->integer('week_number')->default(0); + if ( ! Schema::hasColumn( 'nexopos_dashboard_weeks', 'week_number' ) ) { + $table->integer( 'week_number' )->default( 0 ); } - if (! Schema::hasColumn('nexopos_dashboard_weeks', 'range_starts')) { - $table->datetime('range_starts')->nullable(); + if ( ! Schema::hasColumn( 'nexopos_dashboard_weeks', 'range_starts' ) ) { + $table->datetime( 'range_starts' )->nullable(); } - if (! Schema::hasColumn('nexopos_dashboard_weeks', 'range_ends')) { - $table->datetime('range_ends')->nullable(); + if ( ! Schema::hasColumn( 'nexopos_dashboard_weeks', 'range_ends' ) ) { + $table->datetime( 'range_ends' )->nullable(); } - }); + } ); } } @@ -126,7 +126,7 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_dashboard_days'); - Schema::dropIfExists('nexopos_dashboard_weeks'); + Schema::dropIfExists( 'nexopos_dashboard_days' ); + Schema::dropIfExists( 'nexopos_dashboard_weeks' ); } }; diff --git a/database/migrations/create/2020_10_11_074631_create_nexopos_notifications_table.php b/database/migrations/create/2020_10_11_074631_create_nexopos_notifications_table.php index 1ed99a9b4..f77199021 100644 --- a/database/migrations/create/2020_10_11_074631_create_nexopos_notifications_table.php +++ b/database/migrations/create/2020_10_11_074631_create_nexopos_notifications_table.php @@ -22,18 +22,18 @@ */ public function up() { - if (! Schema::hasTable('nexopos_notifications')) { - Schema::createIfMissing('nexopos_notifications', function (Blueprint $table) { + if ( ! Schema::hasTable( 'nexopos_notifications' ) ) { + Schema::createIfMissing( 'nexopos_notifications', function ( Blueprint $table ) { $table->id(); - $table->integer('user_id'); - $table->string('identifier'); - $table->string('title'); - $table->text('description'); - $table->string('url')->default('#'); - $table->string('source')->default('system'); - $table->boolean('dismissable')->default(true); + $table->integer( 'user_id' ); + $table->string( 'identifier' ); + $table->string( 'title' ); + $table->text( 'description' ); + $table->string( 'url' )->default( '#' ); + $table->string( 'source' )->default( 'system' ); + $table->boolean( 'dismissable' )->default( true ); $table->timestamps(); - }); + } ); } } @@ -44,6 +44,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_notifications'); + Schema::dropIfExists( 'nexopos_notifications' ); } }; diff --git a/database/migrations/create/2020_10_17_231628_create_nexopos_orders_storage.php b/database/migrations/create/2020_10_17_231628_create_nexopos_orders_storage.php index 3d1d46219..dd36d5ed0 100644 --- a/database/migrations/create/2020_10_17_231628_create_nexopos_orders_storage.php +++ b/database/migrations/create/2020_10_17_231628_create_nexopos_orders_storage.php @@ -13,15 +13,15 @@ */ public function up() { - Schema::createIfMissing('nexopos_orders_storage', function (Blueprint $table) { + Schema::createIfMissing( 'nexopos_orders_storage', function ( Blueprint $table ) { $table->id(); - $table->integer('product_id')->nullable(); - $table->integer('unit_quantity_id')->nullable(); - $table->integer('unit_id')->nullable(); - $table->integer('quantity')->nullable(); - $table->string('session_identifier'); + $table->integer( 'product_id' )->nullable(); + $table->integer( 'unit_quantity_id' )->nullable(); + $table->integer( 'unit_id' )->nullable(); + $table->integer( 'quantity' )->nullable(); + $table->string( 'session_identifier' ); $table->timestamps(); - }); + } ); } /** @@ -31,6 +31,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_orders_storage'); + Schema::dropIfExists( 'nexopos_orders_storage' ); } }; diff --git a/database/migrations/create/2020_10_29_150642_create_nexopos_expenses_history_table.php b/database/migrations/create/2020_10_29_150642_create_nexopos_expenses_history_table.php index 50bf3eeea..551e03ff9 100644 --- a/database/migrations/create/2020_10_29_150642_create_nexopos_expenses_history_table.php +++ b/database/migrations/create/2020_10_29_150642_create_nexopos_expenses_history_table.php @@ -14,24 +14,24 @@ */ public function up() { - Schema::createIfMissing('nexopos_transactions_histories', function (Blueprint $table) { + Schema::createIfMissing( 'nexopos_transactions_histories', function ( Blueprint $table ) { $table->id(); - $table->integer('transaction_id')->nullable(); - $table->string('operation'); // credit or debit - $table->integer('transaction_account_id')->nullable(); - $table->integer('procurement_id')->nullable(); // when the procurement is deleted the transaction history will be deleted automatically as well. - $table->integer('order_refund_id')->nullable(); // to link an transaction to an order refund. - $table->integer('order_refund_product_id')->nullable(); // link the refund to an order refund product - $table->integer('order_id')->nullable(); // to link an transaction to an order. - $table->integer('order_product_id')->nullable(); // link the refund to an order product - $table->integer('register_history_id')->nullable(); // if an transactions has been created from a register transaction - $table->integer('customer_account_history_id')->nullable(); // if a customer credit is generated - $table->string('name'); - $table->string('status')->default(TransactionHistory::STATUS_ACTIVE); - $table->float('value', 18, 5)->default(0); - $table->integer('author'); + $table->integer( 'transaction_id' )->nullable(); + $table->string( 'operation' ); // credit or debit + $table->integer( 'transaction_account_id' )->nullable(); + $table->integer( 'procurement_id' )->nullable(); // when the procurement is deleted the transaction history will be deleted automatically as well. + $table->integer( 'order_refund_id' )->nullable(); // to link an transaction to an order refund. + $table->integer( 'order_refund_product_id' )->nullable(); // link the refund to an order refund product + $table->integer( 'order_id' )->nullable(); // to link an transaction to an order. + $table->integer( 'order_product_id' )->nullable(); // link the refund to an order product + $table->integer( 'register_history_id' )->nullable(); // if an transactions has been created from a register transaction + $table->integer( 'customer_account_history_id' )->nullable(); // if a customer credit is generated + $table->string( 'name' ); + $table->string( 'status' )->default( TransactionHistory::STATUS_ACTIVE ); + $table->float( 'value', 18, 5 )->default( 0 ); + $table->integer( 'author' ); $table->timestamps(); - }); + } ); } /** @@ -41,6 +41,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_transactions_histories'); + Schema::dropIfExists( 'nexopos_transactions_histories' ); } }; diff --git a/database/migrations/create/2020_11_17_120204_nov17_add_fields_to_nexopos_orders_products_table.php b/database/migrations/create/2020_11_17_120204_nov17_add_fields_to_nexopos_orders_products_table.php index 7875ee70e..e2682533f 100644 --- a/database/migrations/create/2020_11_17_120204_nov17_add_fields_to_nexopos_orders_products_table.php +++ b/database/migrations/create/2020_11_17_120204_nov17_add_fields_to_nexopos_orders_products_table.php @@ -13,33 +13,33 @@ */ public function up() { - Schema::createIfMissing('nexopos_orders_refunds', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('order_id'); - $table->integer('author'); - $table->float('total', 18, 5); - $table->float('tax_value', 18, 5)->default(0); - $table->float('shipping', 18, 5); - $table->string('payment_method'); + Schema::createIfMissing( 'nexopos_orders_refunds', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'order_id' ); + $table->integer( 'author' ); + $table->float( 'total', 18, 5 ); + $table->float( 'tax_value', 18, 5 )->default( 0 ); + $table->float( 'shipping', 18, 5 ); + $table->string( 'payment_method' ); $table->timestamps(); - }); + } ); - Schema::createIfMissing('nexopos_orders_products_refunds', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->integer('order_id'); - $table->integer('order_refund_id'); - $table->integer('order_product_id'); - $table->integer('unit_id'); - $table->integer('product_id'); - $table->float('unit_price', 18, 5); - $table->float('tax_value', 18, 5)->default(0); - $table->float('quantity', 18, 5); - $table->float('total_price', 18, 5); - $table->string('condition'); // either unspoiled, damaged - $table->text('description')->nullable(); - $table->integer('author'); + Schema::createIfMissing( 'nexopos_orders_products_refunds', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->integer( 'order_id' ); + $table->integer( 'order_refund_id' ); + $table->integer( 'order_product_id' ); + $table->integer( 'unit_id' ); + $table->integer( 'product_id' ); + $table->float( 'unit_price', 18, 5 ); + $table->float( 'tax_value', 18, 5 )->default( 0 ); + $table->float( 'quantity', 18, 5 ); + $table->float( 'total_price', 18, 5 ); + $table->string( 'condition' ); // either unspoiled, damaged + $table->text( 'description' )->nullable(); + $table->integer( 'author' ); $table->timestamps(); - }); + } ); } /** @@ -49,7 +49,7 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_orders_products_refunds'); - Schema::dropIfExists('nexopos_orders_refunds'); + Schema::dropIfExists( 'nexopos_orders_products_refunds' ); + Schema::dropIfExists( 'nexopos_orders_refunds' ); } }; diff --git a/database/migrations/create/2020_12_11_210734_create_nexopos_dashboard_months_table.php b/database/migrations/create/2020_12_11_210734_create_nexopos_dashboard_months_table.php index 389f0becd..40d7a3ae6 100644 --- a/database/migrations/create/2020_12_11_210734_create_nexopos_dashboard_months_table.php +++ b/database/migrations/create/2020_12_11_210734_create_nexopos_dashboard_months_table.php @@ -13,37 +13,37 @@ */ public function up() { - Schema::createIfMissing('nexopos_dashboard_months', function (Blueprint $table) { + Schema::createIfMissing( 'nexopos_dashboard_months', function ( Blueprint $table ) { $table->id(); - $table->float('month_taxes', 18, 5)->default(0); - $table->float('month_unpaid_orders', 18, 5)->default(0); - $table->float('month_unpaid_orders_count', 18, 5)->default(0); - $table->float('month_paid_orders', 18, 5)->default(0); - $table->float('month_paid_orders_count', 18, 5)->default(0); - $table->float('month_partially_paid_orders', 18, 5)->default(0); - $table->float('month_partially_paid_orders_count', 18, 5)->default(0); - $table->float('month_income', 18, 5)->default(0); - $table->float('month_discounts', 18, 5)->default(0); - $table->float('month_wasted_goods_count', 18, 5)->default(0); - $table->float('month_wasted_goods', 18, 5)->default(0); - $table->float('month_expenses', 18, 5)->default(0); - $table->float('total_wasted_goods', 18, 5)->default(0); - $table->float('total_unpaid_orders', 18, 5)->default(0); - $table->float('total_unpaid_orders_count', 18, 5)->default(0); - $table->float('total_paid_orders', 18, 5)->default(0); - $table->float('total_paid_orders_count', 18, 5)->default(0); - $table->float('total_partially_paid_orders', 18, 5)->default(0); - $table->float('total_partially_paid_orders_count', 18, 5)->default(0); - $table->float('total_income', 18, 5)->default(0); - $table->float('total_discounts', 18, 5)->default(0); - $table->float('total_taxes', 18, 5)->default(0); - $table->float('total_wasted_goods_count', 18, 5)->default(0); - $table->float('total_expenses', 18, 5)->default(0); - $table->integer('month_of_year')->default(0); - $table->datetime('range_starts'); - $table->datetime('range_ends'); + $table->float( 'month_taxes', 18, 5 )->default( 0 ); + $table->float( 'month_unpaid_orders', 18, 5 )->default( 0 ); + $table->float( 'month_unpaid_orders_count', 18, 5 )->default( 0 ); + $table->float( 'month_paid_orders', 18, 5 )->default( 0 ); + $table->float( 'month_paid_orders_count', 18, 5 )->default( 0 ); + $table->float( 'month_partially_paid_orders', 18, 5 )->default( 0 ); + $table->float( 'month_partially_paid_orders_count', 18, 5 )->default( 0 ); + $table->float( 'month_income', 18, 5 )->default( 0 ); + $table->float( 'month_discounts', 18, 5 )->default( 0 ); + $table->float( 'month_wasted_goods_count', 18, 5 )->default( 0 ); + $table->float( 'month_wasted_goods', 18, 5 )->default( 0 ); + $table->float( 'month_expenses', 18, 5 )->default( 0 ); + $table->float( 'total_wasted_goods', 18, 5 )->default( 0 ); + $table->float( 'total_unpaid_orders', 18, 5 )->default( 0 ); + $table->float( 'total_unpaid_orders_count', 18, 5 )->default( 0 ); + $table->float( 'total_paid_orders', 18, 5 )->default( 0 ); + $table->float( 'total_paid_orders_count', 18, 5 )->default( 0 ); + $table->float( 'total_partially_paid_orders', 18, 5 )->default( 0 ); + $table->float( 'total_partially_paid_orders_count', 18, 5 )->default( 0 ); + $table->float( 'total_income', 18, 5 )->default( 0 ); + $table->float( 'total_discounts', 18, 5 )->default( 0 ); + $table->float( 'total_taxes', 18, 5 )->default( 0 ); + $table->float( 'total_wasted_goods_count', 18, 5 )->default( 0 ); + $table->float( 'total_expenses', 18, 5 )->default( 0 ); + $table->integer( 'month_of_year' )->default( 0 ); + $table->datetime( 'range_starts' ); + $table->datetime( 'range_ends' ); $table->timestamps(); - }); + } ); } /** @@ -53,6 +53,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_dashboard_months'); + Schema::dropIfExists( 'nexopos_dashboard_months' ); } }; diff --git a/database/migrations/create/2021_01_23_225101_create_coupons_table.php b/database/migrations/create/2021_01_23_225101_create_coupons_table.php index f3e63a49c..f1aabf430 100644 --- a/database/migrations/create/2021_01_23_225101_create_coupons_table.php +++ b/database/migrations/create/2021_01_23_225101_create_coupons_table.php @@ -13,47 +13,47 @@ */ public function up() { - Schema::createIfMissing('nexopos_coupons', function (Blueprint $table) { + Schema::createIfMissing( 'nexopos_coupons', function ( Blueprint $table ) { $table->id(); - $table->string('name'); - $table->string('code'); - $table->string('type')->default('discount'); // percentage_discount, flat_discount, giveaway - $table->float('discount_value', 18, 5)->default(0); // flat value or percentage - $table->datetime('valid_until')->nullable(); // unlimited - $table->float('minimum_cart_value', 18, 5)->default(0)->nullable(); - $table->float('maximum_cart_value', 18, 5)->default(0)->nullable(); - $table->datetime('valid_hours_start')->nullable(); - $table->datetime('valid_hours_end')->nullable(); - $table->float('limit_usage', 18, 5)->default(0); // unlimited - $table->string('groups_id')->nullable(); - $table->string('customers_id')->nullable(); - $table->integer('author'); + $table->string( 'name' ); + $table->string( 'code' ); + $table->string( 'type' )->default( 'discount' ); // percentage_discount, flat_discount, giveaway + $table->float( 'discount_value', 18, 5 )->default( 0 ); // flat value or percentage + $table->datetime( 'valid_until' )->nullable(); // unlimited + $table->float( 'minimum_cart_value', 18, 5 )->default( 0 )->nullable(); + $table->float( 'maximum_cart_value', 18, 5 )->default( 0 )->nullable(); + $table->datetime( 'valid_hours_start' )->nullable(); + $table->datetime( 'valid_hours_end' )->nullable(); + $table->float( 'limit_usage', 18, 5 )->default( 0 ); // unlimited + $table->string( 'groups_id' )->nullable(); + $table->string( 'customers_id' )->nullable(); + $table->integer( 'author' ); $table->timestamps(); - }); + } ); - Schema::createIfMissing('nexopos_coupons_products', function (Blueprint $table) { + Schema::createIfMissing( 'nexopos_coupons_products', function ( Blueprint $table ) { $table->id(); - $table->integer('coupon_id'); - $table->integer('product_id'); - }); + $table->integer( 'coupon_id' ); + $table->integer( 'product_id' ); + } ); - Schema::createIfMissing('nexopos_coupons_categories', function (Blueprint $table) { + Schema::createIfMissing( 'nexopos_coupons_categories', function ( Blueprint $table ) { $table->id(); - $table->integer('coupon_id'); - $table->integer('category_id'); - }); + $table->integer( 'coupon_id' ); + $table->integer( 'category_id' ); + } ); - Schema::createIfMissing('nexopos_coupons_customers', function (Blueprint $table) { + Schema::createIfMissing( 'nexopos_coupons_customers', function ( Blueprint $table ) { $table->id(); - $table->integer('coupon_id'); - $table->integer('customer_id'); - }); + $table->integer( 'coupon_id' ); + $table->integer( 'customer_id' ); + } ); - Schema::createIfMissing('nexopos_coupons_customers_groups', function (Blueprint $table) { + Schema::createIfMissing( 'nexopos_coupons_customers_groups', function ( Blueprint $table ) { $table->id(); - $table->integer('coupon_id'); - $table->integer('group_id'); - }); + $table->integer( 'coupon_id' ); + $table->integer( 'group_id' ); + } ); } /** @@ -63,8 +63,8 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_coupons'); - Schema::dropIfExists('nexopos_coupons_products'); - Schema::dropIfExists('nexopos_coupons_categories'); + Schema::dropIfExists( 'nexopos_coupons' ); + Schema::dropIfExists( 'nexopos_coupons_products' ); + Schema::dropIfExists( 'nexopos_coupons_categories' ); } }; diff --git a/database/migrations/create/2021_01_23_225713_create_customers_rewards_table.php b/database/migrations/create/2021_01_23_225713_create_customers_rewards_table.php index aced4958a..098d4e737 100644 --- a/database/migrations/create/2021_01_23_225713_create_customers_rewards_table.php +++ b/database/migrations/create/2021_01_23_225713_create_customers_rewards_table.php @@ -13,15 +13,15 @@ */ public function up() { - Schema::createIfMissing('nexopos_customers_rewards', function (Blueprint $table) { + Schema::createIfMissing( 'nexopos_customers_rewards', function ( Blueprint $table ) { $table->id(); - $table->integer('customer_id'); - $table->integer('reward_id'); - $table->string('reward_name'); - $table->float('points', 18, 5); - $table->float('target', 18, 5); + $table->integer( 'customer_id' ); + $table->integer( 'reward_id' ); + $table->string( 'reward_name' ); + $table->float( 'points', 18, 5 ); + $table->float( 'target', 18, 5 ); $table->timestamps(); - }); + } ); } /** @@ -31,6 +31,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_customers_rewards'); + Schema::dropIfExists( 'nexopos_customers_rewards' ); } }; diff --git a/database/migrations/create/2021_02_21_144532_create_orders_instalments_table.php b/database/migrations/create/2021_02_21_144532_create_orders_instalments_table.php index 256e70e61..e94832aa1 100644 --- a/database/migrations/create/2021_02_21_144532_create_orders_instalments_table.php +++ b/database/migrations/create/2021_02_21_144532_create_orders_instalments_table.php @@ -13,14 +13,14 @@ */ public function up() { - Schema::createIfMissing('nexopos_orders_instalments', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->float('amount', 18, 5)->default(0); - $table->integer('order_id')->nullable(); - $table->boolean('paid')->default(false); - $table->integer('payment_id')->nullable(); - $table->datetime('date'); - }); + Schema::createIfMissing( 'nexopos_orders_instalments', function ( Blueprint $table ) { + $table->bigIncrements( 'id' ); + $table->float( 'amount', 18, 5 )->default( 0 ); + $table->integer( 'order_id' )->nullable(); + $table->boolean( 'paid' )->default( false ); + $table->integer( 'payment_id' )->nullable(); + $table->datetime( 'date' ); + } ); } /** @@ -30,6 +30,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_orders_instalments'); + Schema::dropIfExists( 'nexopos_orders_instalments' ); } }; diff --git a/database/migrations/create/2021_02_23_004748_create_new_instalments_permissions.php b/database/migrations/create/2021_02_23_004748_create_new_instalments_permissions.php index 6e8a97f46..128aa1387 100644 --- a/database/migrations/create/2021_02_23_004748_create_new_instalments_permissions.php +++ b/database/migrations/create/2021_02_23_004748_create_new_instalments_permissions.php @@ -24,43 +24,43 @@ public function runOnMultiStore() */ public function up() { - $createInstalment = Permission::firstOrNew([ 'namespace' => 'nexopos.create.orders-instalments' ]); + $createInstalment = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.orders-instalments' ] ); $createInstalment->namespace = 'nexopos.create.orders-instalments'; - $createInstalment->name = __('Create Instalment'); - $createInstalment->description = __('Allow the user to create instalments.'); + $createInstalment->name = __( 'Create Instalment' ); + $createInstalment->description = __( 'Allow the user to create instalments.' ); $createInstalment->save(); - $updateInstalment = Permission::firstOrNew([ 'namespace' => 'nexopos.update.orders-instalments' ]); + $updateInstalment = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.orders-instalments' ] ); $updateInstalment->namespace = 'nexopos.update.orders-instalments'; - $updateInstalment->name = __('Update Instalment'); - $updateInstalment->description = __('Allow the user to update instalments.'); + $updateInstalment->name = __( 'Update Instalment' ); + $updateInstalment->description = __( 'Allow the user to update instalments.' ); $updateInstalment->save(); - $readInstalment = Permission::firstOrNew([ 'namespace' => 'nexopos.read.orders-instalments' ]); + $readInstalment = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.orders-instalments' ] ); $readInstalment->namespace = 'nexopos.read.orders-instalments'; - $readInstalment->name = __('Read Instalment'); - $readInstalment->description = __('Allow the user to read instalments.'); + $readInstalment->name = __( 'Read Instalment' ); + $readInstalment->description = __( 'Allow the user to read instalments.' ); $readInstalment->save(); - $deleteInstalments = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.orders-instalments' ]); + $deleteInstalments = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.orders-instalments' ] ); $deleteInstalments->namespace = 'nexopos.delete.orders-instalments'; - $deleteInstalments->name = __('Delete Instalment'); - $deleteInstalments->description = __('Allow the user to delete instalments.'); + $deleteInstalments->name = __( 'Delete Instalment' ); + $deleteInstalments->description = __( 'Allow the user to delete instalments.' ); $deleteInstalments->save(); - Role::namespace('admin')->addPermissions([ + Role::namespace( 'admin' )->addPermissions( [ $createInstalment, $updateInstalment, $readInstalment, $deleteInstalments, - ]); + ] ); - Role::namespace('nexopos.store.administrator')->addPermissions([ + Role::namespace( 'nexopos.store.administrator' )->addPermissions( [ $createInstalment, $updateInstalment, $readInstalment, $deleteInstalments, - ]); + ] ); } /** @@ -70,19 +70,19 @@ public function up() */ public function down() { - if (Schema::hasTable('nexopos_permissions') && Schema::hasTable('nexopos_roles')) { - collect([ + if ( Schema::hasTable( 'nexopos_permissions' ) && Schema::hasTable( 'nexopos_roles' ) ) { + collect( [ 'nexopos.create.orders-instalments', 'nexopos.update.orders-instalments', 'nexopos.read.orders-instalments', 'nexopos.delete.orders-instalments', - ])->each(function ($identifier) { - $permission = Permission::where('namespace', $identifier + ] )->each( function ( $identifier ) { + $permission = Permission::where( 'namespace', $identifier )->first(); $permission->removeFromRoles(); $permission->delete(); - }); + } ); } } }; diff --git a/database/migrations/create/2021_05_25_131104_create_nexopos_payments_types_table.php b/database/migrations/create/2021_05_25_131104_create_nexopos_payments_types_table.php index 59811663b..6bb5e4664 100644 --- a/database/migrations/create/2021_05_25_131104_create_nexopos_payments_types_table.php +++ b/database/migrations/create/2021_05_25_131104_create_nexopos_payments_types_table.php @@ -13,17 +13,17 @@ */ public function up() { - Schema::createIfMissing('nexopos_payments_types', function (Blueprint $table) { + Schema::createIfMissing( 'nexopos_payments_types', function ( Blueprint $table ) { $table->id(); - $table->string('label'); - $table->string('identifier'); - $table->integer('priority')->default(0); - $table->text('description')->nullable(); - $table->integer('author'); - $table->boolean('active')->default(true); - $table->boolean('readonly')->default(false); + $table->string( 'label' ); + $table->string( 'identifier' ); + $table->integer( 'priority' )->default( 0 ); + $table->text( 'description' )->nullable(); + $table->integer( 'author' ); + $table->boolean( 'active' )->default( true ); + $table->boolean( 'readonly' )->default( false ); $table->timestamps(); - }); + } ); } /** @@ -33,6 +33,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_payments_types'); + Schema::dropIfExists( 'nexopos_payments_types' ); } }; diff --git a/database/migrations/create/2022_01_20_202253_create_user_role_relations_table.php b/database/migrations/create/2022_01_20_202253_create_user_role_relations_table.php index 78ef81bf8..8e1f1a817 100644 --- a/database/migrations/create/2022_01_20_202253_create_user_role_relations_table.php +++ b/database/migrations/create/2022_01_20_202253_create_user_role_relations_table.php @@ -26,26 +26,26 @@ public function runOnMultiStore() */ public function up() { - if (! Schema::hasTable('nexopos_users_roles_relations')) { - Schema::create('nexopos_users_roles_relations', function (Blueprint $table) { + if ( ! Schema::hasTable( 'nexopos_users_roles_relations' ) ) { + Schema::create( 'nexopos_users_roles_relations', function ( Blueprint $table ) { $table->id(); - $table->integer('role_id'); - $table->integer('user_id'); + $table->integer( 'role_id' ); + $table->integer( 'user_id' ); $table->timestamps(); - }); + } ); } - if (Schema::hasColumn('nexopos_users', 'role_id')) { - Role::get()->each(function ($role) { - User::where('role_id', $role->id) + if ( Schema::hasColumn( 'nexopos_users', 'role_id' ) ) { + Role::get()->each( function ( $role ) { + User::where( 'role_id', $role->id ) ->get() - ->each(function ($user) use ($role) { + ->each( function ( $user ) use ( $role ) { $relation = new UserRoleRelation; $relation->user_id = $user->id; $relation->role_id = $role->id; $relation->save(); - }); - }); + } ); + } ); } } @@ -56,6 +56,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_users_roles_relations'); + Schema::dropIfExists( 'nexopos_users_roles_relations' ); } }; diff --git a/database/migrations/create/2022_05_13_142039_create_products_group_items_table.php b/database/migrations/create/2022_05_13_142039_create_products_group_items_table.php index f9009733e..3203b528d 100644 --- a/database/migrations/create/2022_05_13_142039_create_products_group_items_table.php +++ b/database/migrations/create/2022_05_13_142039_create_products_group_items_table.php @@ -13,19 +13,19 @@ */ public function up() { - if (! Schema::hasTable('nexopos_products_subitems')) { - Schema::create('nexopos_products_subitems', function (Blueprint $table) { + if ( ! Schema::hasTable( 'nexopos_products_subitems' ) ) { + Schema::create( 'nexopos_products_subitems', function ( Blueprint $table ) { $table->id(); - $table->integer('parent_id'); - $table->integer('product_id'); - $table->integer('unit_id'); - $table->integer('unit_quantity_id'); - $table->float('sale_price')->default(0); - $table->float('quantity')->default(0); - $table->float('total_price')->default(0); - $table->integer('author'); + $table->integer( 'parent_id' ); + $table->integer( 'product_id' ); + $table->integer( 'unit_id' ); + $table->integer( 'unit_quantity_id' ); + $table->float( 'sale_price' )->default( 0 ); + $table->float( 'quantity' )->default( 0 ); + $table->float( 'total_price' )->default( 0 ); + $table->integer( 'author' ); $table->timestamps(); - }); + } ); } } @@ -36,6 +36,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_products_subitems'); + Schema::dropIfExists( 'nexopos_products_subitems' ); } }; diff --git a/database/migrations/create/2022_10_12_083552_update_register_history_oct12_22.php b/database/migrations/create/2022_10_12_083552_update_register_history_oct12_22.php index e89414737..c6fbe48c3 100644 --- a/database/migrations/create/2022_10_12_083552_update_register_history_oct12_22.php +++ b/database/migrations/create/2022_10_12_083552_update_register_history_oct12_22.php @@ -13,20 +13,20 @@ */ public function up() { - if (Schema::hasTable('nexopos_registers_history')) { - Schema::table('nexopos_registers_history', function (Blueprint $table) { - if (! Schema::hasColumn('nexopos_registers_history', 'payment_id')) { - $table->integer('payment_id')->nullable(); + if ( Schema::hasTable( 'nexopos_registers_history' ) ) { + Schema::table( 'nexopos_registers_history', function ( Blueprint $table ) { + if ( ! Schema::hasColumn( 'nexopos_registers_history', 'payment_id' ) ) { + $table->integer( 'payment_id' )->nullable(); } - if (! Schema::hasColumn('nexopos_registers_history', 'payment_type_id')) { - $table->integer('payment_type_id')->default(0); + if ( ! Schema::hasColumn( 'nexopos_registers_history', 'payment_type_id' ) ) { + $table->integer( 'payment_type_id' )->default( 0 ); } - if (! Schema::hasColumn('nexopos_registers_history', 'order_id')) { - $table->integer('order_id')->nullable(); + if ( ! Schema::hasColumn( 'nexopos_registers_history', 'order_id' ) ) { + $table->integer( 'order_id' )->nullable(); } - }); + } ); } } diff --git a/database/migrations/create/2022_10_28_093041_update_expense_table28_oct22.php b/database/migrations/create/2022_10_28_093041_update_expense_table28_oct22.php index 118fddf37..6fea7dfc5 100644 --- a/database/migrations/create/2022_10_28_093041_update_expense_table28_oct22.php +++ b/database/migrations/create/2022_10_28_093041_update_expense_table28_oct22.php @@ -14,24 +14,24 @@ */ public function up() { - if (Schema::hasTable('nexopos_transacations')) { - Schema::table('nexopos_transactions', function (Blueprint $table) { - if (! Schema::hasColumn('nexopos_transactions', 'type')) { - $table->string('type')->nullable(); + if ( Schema::hasTable( 'nexopos_transacations' ) ) { + Schema::table( 'nexopos_transactions', function ( Blueprint $table ) { + if ( ! Schema::hasColumn( 'nexopos_transactions', 'type' ) ) { + $table->string( 'type' )->nullable(); } - }); + } ); - Transaction::get()->each(function ($transaction) { - if ($transaction->recurring) { + Transaction::get()->each( function ( $transaction ) { + if ( $transaction->recurring ) { $transaction->type = Transaction::TYPE_RECURRING; - } elseif ($transaction->group_id > 0) { + } elseif ( $transaction->group_id > 0 ) { $transaction->type = Transaction::TYPE_ENTITY; } else { $transaction->type = Transaction::TYPE_DIRECT; } $transaction->save(); - }); + } ); } } @@ -42,10 +42,10 @@ public function up() */ public function down() { - Schema::table('nexopos_transactions', function (Blueprint $table) { - if (Schema::hasColumn('nexopos_transactions', 'type')) { - $table->dropColumn('type'); + Schema::table( 'nexopos_transactions', function ( Blueprint $table ) { + if ( Schema::hasColumn( 'nexopos_transactions', 'type' ) ) { + $table->dropColumn( 'type' ); } - }); + } ); } }; diff --git a/database/migrations/create/2022_11_25_071626_create_users_widgets_table.php b/database/migrations/create/2022_11_25_071626_create_users_widgets_table.php index 64ac635bf..6ab220898 100644 --- a/database/migrations/create/2022_11_25_071626_create_users_widgets_table.php +++ b/database/migrations/create/2022_11_25_071626_create_users_widgets_table.php @@ -13,16 +13,16 @@ */ public function up() { - if (! Schema::hasTable('nexopos_users_widgets')) { - Schema::create('nexopos_users_widgets', function (Blueprint $table) { - $table->uuid('id')->primary(); - $table->string('identifier'); - $table->string('column'); - $table->string('class_name'); - $table->integer('position'); - $table->integer('user_id'); + if ( ! Schema::hasTable( 'nexopos_users_widgets' ) ) { + Schema::create( 'nexopos_users_widgets', function ( Blueprint $table ) { + $table->uuid( 'id' )->primary(); + $table->string( 'identifier' ); + $table->string( 'column' ); + $table->string( 'class_name' ); + $table->integer( 'position' ); + $table->integer( 'user_id' ); $table->timestamps(); - }); + } ); } } @@ -33,6 +33,6 @@ public function up() */ public function down() { - Schema::dropIfExists('nexopos_users_widgets'); + Schema::dropIfExists( 'nexopos_users_widgets' ); } }; diff --git a/database/migrations/create/2023_10_31_120602_stock_history_detailed.php b/database/migrations/create/2023_10_31_120602_stock_history_detailed.php index 9f7fb7ae9..9d90fae4a 100644 --- a/database/migrations/create/2023_10_31_120602_stock_history_detailed.php +++ b/database/migrations/create/2023_10_31_120602_stock_history_detailed.php @@ -11,21 +11,21 @@ */ public function up(): void { - if (! Schema::hasTable('nexopos_products_histories_combined')) { - Schema::create('nexopos_products_histories_combined', function (Blueprint $table) { - $table->increments('id'); - $table->string('name'); - $table->date('date'); - $table->integer('product_id'); - $table->integer('unit_id'); - $table->float('initial_quantity')->default(0); - $table->float('sold_quantity')->default(0); - $table->float('procured_quantity')->default(0); - $table->float('defective_quantity')->default(0); - $table->float('final_quantity')->default(0); - $table->string('uuid')->nullable(); + if ( ! Schema::hasTable( 'nexopos_products_histories_combined' ) ) { + Schema::create( 'nexopos_products_histories_combined', function ( Blueprint $table ) { + $table->increments( 'id' ); + $table->string( 'name' ); + $table->date( 'date' ); + $table->integer( 'product_id' ); + $table->integer( 'unit_id' ); + $table->float( 'initial_quantity' )->default( 0 ); + $table->float( 'sold_quantity' )->default( 0 ); + $table->float( 'procured_quantity' )->default( 0 ); + $table->float( 'defective_quantity' )->default( 0 ); + $table->float( 'final_quantity' )->default( 0 ); + $table->string( 'uuid' )->nullable(); $table->timestamps(); - }); + } ); } } @@ -34,6 +34,6 @@ public function up(): void */ public function down(): void { - Schema::dropIfExists('nexopos_products_histories_combined'); + Schema::dropIfExists( 'nexopos_products_histories_combined' ); } }; diff --git a/database/migrations/update/2022_11_28_000259_v5x_general_database_update.php b/database/migrations/update/2022_11_28_000259_v5x_general_database_update.php index 0cee52ac9..4637632bb 100644 --- a/database/migrations/update/2022_11_28_000259_v5x_general_database_update.php +++ b/database/migrations/update/2022_11_28_000259_v5x_general_database_update.php @@ -36,39 +36,39 @@ public function up() /** * @var UsersService $usersService */ - $usersService = app()->make(UsersService::class); + $usersService = app()->make( UsersService::class ); /** * @var DoctorService $doctorService */ - $doctorService = app()->make(DoctorService::class); + $doctorService = app()->make( DoctorService::class ); /** * @var CoreService $coreService */ - $coreService = app()->make(CoreService::class); + $coreService = app()->make( CoreService::class ); - Schema::table('nexopos_roles', function (Blueprint $table) { - if (! Schema::hasColumn('nexopos_roles', 'dashid')) { - $table->removeColumn('dashid'); + Schema::table( 'nexopos_roles', function ( Blueprint $table ) { + if ( ! Schema::hasColumn( 'nexopos_roles', 'dashid' ) ) { + $table->removeColumn( 'dashid' ); } - }); + } ); /** * let's create a constant which will allow the creation, * since these files are included as migration file */ - if (! defined('NEXO_CREATE_PERMISSIONS')) { - define('NEXO_CREATE_PERMISSIONS', true); + if ( ! defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + define( 'NEXO_CREATE_PERMISSIONS', true ); } /** * We're deleting here all permissions that are * no longer used by the system. */ - Permission::where('namespace', 'like', '%.expense')->each(function (Permission $permission) { + Permission::where( 'namespace', 'like', '%.expense' )->each( function ( Permission $permission ) { $permission->removeFromRoles(); - }); + } ); /** * let's include the files that will create permissions @@ -82,22 +82,22 @@ public function up() /** * We'll now defined default permissions */ - $admin = Role::namespace(Role::ADMIN); - $storeAdmin = Role::namespace(Role::STOREADMIN); - $storeCashier = Role::namespace(Role::STORECASHIER); - - $admin->addPermissions(Permission::includes('-widget')->get()->map(fn($permission) => $permission->namespace)); - $admin->addPermissions(Permission::includes('.transactions')->get()->map(fn($permission) => $permission->namespace)); - $admin->addPermissions(Permission::includes('.transactions-account')->get()->map(fn($permission) => $permission->namespace)); - $admin->addPermissions(Permission::includes('.reports')->get()->map(fn($permission) => $permission->namespace)); + $admin = Role::namespace( Role::ADMIN ); + $storeAdmin = Role::namespace( Role::STOREADMIN ); + $storeCashier = Role::namespace( Role::STORECASHIER ); + + $admin->addPermissions( Permission::includes( '-widget' )->get()->map( fn( $permission ) => $permission->namespace ) ); + $admin->addPermissions( Permission::includes( '.transactions' )->get()->map( fn( $permission ) => $permission->namespace ) ); + $admin->addPermissions( Permission::includes( '.transactions-account' )->get()->map( fn( $permission ) => $permission->namespace ) ); + $admin->addPermissions( Permission::includes( '.reports' )->get()->map( fn( $permission ) => $permission->namespace ) ); // - $storeAdmin->addPermissions(Permission::includes('-widget')->get()->map(fn($permission) => $permission->namespace)); - $storeAdmin->addPermissions(Permission::includes('.transactions')->get()->map(fn($permission) => $permission->namespace)); - $storeAdmin->addPermissions(Permission::includes('.transactions-account')->get()->map(fn($permission) => $permission->namespace)); + $storeAdmin->addPermissions( Permission::includes( '-widget' )->get()->map( fn( $permission ) => $permission->namespace ) ); + $storeAdmin->addPermissions( Permission::includes( '.transactions' )->get()->map( fn( $permission ) => $permission->namespace ) ); + $storeAdmin->addPermissions( Permission::includes( '.transactions-account' )->get()->map( fn( $permission ) => $permission->namespace ) ); - $storeCashier->addPermissions(Permission::whereIn('namespace', [ + $storeCashier->addPermissions( Permission::whereIn( 'namespace', [ ( new ProfileWidget )->getPermission(), - ])->get()->map(fn($permission) => $permission->namespace)); + ] )->get()->map( fn( $permission ) => $permission->namespace ) ); /** * We need to register the permissions as gates, @@ -116,168 +116,168 @@ public function up() * * @var WidgetService $widgetService */ - $widgetService = app()->make(WidgetService::class); + $widgetService = app()->make( WidgetService::class ); - User::get()->each(fn($user) => $widgetService->addDefaultWidgetsToAreas($user)); + User::get()->each( fn( $user ) => $widgetService->addDefaultWidgetsToAreas( $user ) ); /** * We're make the users table to be able to receive customers */ - Schema::table('nexopos_users', function (Blueprint $table) { - if (! Schema::hasColumn('nexopos_users', 'birth_date')) { - $table->datetime('birth_date')->nullable(); + Schema::table( 'nexopos_users', function ( Blueprint $table ) { + if ( ! Schema::hasColumn( 'nexopos_users', 'birth_date' ) ) { + $table->datetime( 'birth_date' )->nullable(); } - if (! Schema::hasColumn('nexopos_users', 'purchases_amount')) { - $table->float('purchases_amount')->default(0); + if ( ! Schema::hasColumn( 'nexopos_users', 'purchases_amount' ) ) { + $table->float( 'purchases_amount' )->default( 0 ); } - if (! Schema::hasColumn('nexopos_users', 'owed_amount')) { - $table->float('owed_amount')->default(0); + if ( ! Schema::hasColumn( 'nexopos_users', 'owed_amount' ) ) { + $table->float( 'owed_amount' )->default( 0 ); } - if (! Schema::hasColumn('nexopos_users', 'credit_limit_amount')) { - $table->float('credit_limit_amount')->default(0); + if ( ! Schema::hasColumn( 'nexopos_users', 'credit_limit_amount' ) ) { + $table->float( 'credit_limit_amount' )->default( 0 ); } - if (! Schema::hasColumn('nexopos_users', 'account_amount')) { - $table->float('account_amount')->default(0); + if ( ! Schema::hasColumn( 'nexopos_users', 'account_amount' ) ) { + $table->float( 'account_amount' )->default( 0 ); } - if (! Schema::hasColumn('nexopos_users', 'first_name')) { - $table->string('first_name')->nullable(); + if ( ! Schema::hasColumn( 'nexopos_users', 'first_name' ) ) { + $table->string( 'first_name' )->nullable(); } - if (! Schema::hasColumn('nexopos_users', 'last_name')) { - $table->string('last_name')->nullable(); + if ( ! Schema::hasColumn( 'nexopos_users', 'last_name' ) ) { + $table->string( 'last_name' )->nullable(); } - if (! Schema::hasColumn('nexopos_users', 'gender')) { - $table->string('gender')->nullable(); + if ( ! Schema::hasColumn( 'nexopos_users', 'gender' ) ) { + $table->string( 'gender' )->nullable(); } - if (! Schema::hasColumn('nexopos_users', 'phone')) { - $table->string('phone')->nullable(); + if ( ! Schema::hasColumn( 'nexopos_users', 'phone' ) ) { + $table->string( 'phone' )->nullable(); } - if (! Schema::hasColumn('nexopos_users', 'pobox')) { - $table->string('pobox')->nullable(); + if ( ! Schema::hasColumn( 'nexopos_users', 'pobox' ) ) { + $table->string( 'pobox' )->nullable(); } - if (! Schema::hasColumn('nexopos_users', 'group_id')) { - $table->integer('group_id')->nullable(); + if ( ! Schema::hasColumn( 'nexopos_users', 'group_id' ) ) { + $table->integer( 'group_id' )->nullable(); } - }); + } ); /** * Coupons can now be added to * customer groups. */ - Schema::table('nexopos_coupons', function (Blueprint $table) { - if (! Schema::hasColumn('nexopos_coupons', 'groups_id')) { - $table->string('groups_id')->nullable(); + Schema::table( 'nexopos_coupons', function ( Blueprint $table ) { + if ( ! Schema::hasColumn( 'nexopos_coupons', 'groups_id' ) ) { + $table->string( 'groups_id' )->nullable(); } - if (! Schema::hasColumn('nexopos_coupons', 'customers_id')) { - $table->string('customers_id')->nullable(); + if ( ! Schema::hasColumn( 'nexopos_coupons', 'customers_id' ) ) { + $table->string( 'customers_id' )->nullable(); } - }); + } ); - if (! Schema::hasTable('nexopos_coupons_customers')) { - Schema::create('nexopos_coupons_customers', function (Blueprint $table) { + if ( ! Schema::hasTable( 'nexopos_coupons_customers' ) ) { + Schema::create( 'nexopos_coupons_customers', function ( Blueprint $table ) { $table->id(); - $table->integer('coupon_id'); - $table->integer('customer_id'); - }); + $table->integer( 'coupon_id' ); + $table->integer( 'customer_id' ); + } ); } - if (! Schema::hasTable('nexopos_coupons_customers_groups')) { - Schema::create('nexopos_coupons_customers_groups', function (Blueprint $table) { + if ( ! Schema::hasTable( 'nexopos_coupons_customers_groups' ) ) { + Schema::create( 'nexopos_coupons_customers_groups', function ( Blueprint $table ) { $table->id(); - $table->integer('coupon_id'); - $table->integer('group_id'); - }); + $table->integer( 'coupon_id' ); + $table->integer( 'group_id' ); + } ); } /** * rename the provider columns */ - Schema::table('nexopos_providers', function (Blueprint $table) { - if (Schema::hasColumn('nexopos_providers', 'name')) { - $table->renameColumn('name', 'first_name'); + Schema::table( 'nexopos_providers', function ( Blueprint $table ) { + if ( Schema::hasColumn( 'nexopos_providers', 'name' ) ) { + $table->renameColumn( 'name', 'first_name' ); } - if (Schema::hasColumn('nexopos_providers', 'surname')) { - $table->renameColumn('surname', 'last_name'); + if ( Schema::hasColumn( 'nexopos_providers', 'surname' ) ) { + $table->renameColumn( 'surname', 'last_name' ); } - }); + } ); - Schema::table('nexopos_cash_flow', function (Blueprint $table) { - if (Schema::hasColumn('nexopos_cash_flow', 'order_refund_product_id')) { - $table->integer('order_refund_product_id'); + Schema::table( 'nexopos_cash_flow', function ( Blueprint $table ) { + if ( Schema::hasColumn( 'nexopos_cash_flow', 'order_refund_product_id' ) ) { + $table->integer( 'order_refund_product_id' ); } - if (Schema::hasColumn('nexopos_cash_flow', 'order_product_id')) { - $table->integer('order_product_id'); + if ( Schema::hasColumn( 'nexopos_cash_flow', 'order_product_id' ) ) { + $table->integer( 'order_product_id' ); } - if (Schema::hasColumn('nexopos_cash_flow', 'transaction_id')) { - $table->renameColumn('transaction_id', 'transaction_id'); + if ( Schema::hasColumn( 'nexopos_cash_flow', 'transaction_id' ) ) { + $table->renameColumn( 'transaction_id', 'transaction_id' ); } - }); + } ); - Schema::table('nexopos_procurements_products', function (Blueprint $table) { - if (!Schema::hasColumn('nexopos_procurements_products', 'convert_unit_id')) { - $table->integer('convert_unit_id')->nullable(); + Schema::table( 'nexopos_procurements_products', function ( Blueprint $table ) { + if ( ! Schema::hasColumn( 'nexopos_procurements_products', 'convert_unit_id' ) ) { + $table->integer( 'convert_unit_id' )->nullable(); } - }); + } ); - Schema::table('nexopos_customers_addresses', function (Blueprint $table) { - if (Schema::hasColumn('nexopos_customers_addresses', 'name')) { - $table->renameColumn('name', 'first_name'); + Schema::table( 'nexopos_customers_addresses', function ( Blueprint $table ) { + if ( Schema::hasColumn( 'nexopos_customers_addresses', 'name' ) ) { + $table->renameColumn( 'name', 'first_name' ); } - if (Schema::hasColumn('nexopos_customers_addresses', 'surname')) { - $table->renameColumn('surname', 'last_name'); + if ( Schema::hasColumn( 'nexopos_customers_addresses', 'surname' ) ) { + $table->renameColumn( 'surname', 'last_name' ); } - }); + } ); - Schema::table('nexopos_orders_coupons', function (Blueprint $table) { - if (! Schema::hasColumn('nexopos_orders_coupons', 'counted')) { - $table->boolean('counted')->default(false); + Schema::table( 'nexopos_orders_coupons', function ( Blueprint $table ) { + if ( ! Schema::hasColumn( 'nexopos_orders_coupons', 'counted' ) ) { + $table->boolean( 'counted' )->default( false ); } - }); + } ); - Schema::table('nexopos_orders_addresses', function (Blueprint $table) { - if (Schema::hasColumn('nexopos_orders_addresses', 'name')) { - $table->renameColumn('name', 'first_name'); + Schema::table( 'nexopos_orders_addresses', function ( Blueprint $table ) { + if ( Schema::hasColumn( 'nexopos_orders_addresses', 'name' ) ) { + $table->renameColumn( 'name', 'first_name' ); } - if (Schema::hasColumn('nexopos_orders_addresses', 'surname')) { - $table->renameColumn('surname', 'last_name'); + if ( Schema::hasColumn( 'nexopos_orders_addresses', 'surname' ) ) { + $table->renameColumn( 'surname', 'last_name' ); } - }); + } ); - Schema::table('nexopos_products_unit_quantities', function (Blueprint $table) { - if (! Schema::hasColumn('nexopos_products_unit_quantities', 'convert_unit_id')) { - $table->integer('convert_unit_id')->nullable(); + Schema::table( 'nexopos_products_unit_quantities', function ( Blueprint $table ) { + if ( ! Schema::hasColumn( 'nexopos_products_unit_quantities', 'convert_unit_id' ) ) { + $table->integer( 'convert_unit_id' )->nullable(); } - if (! Schema::hasColumn('nexopos_products_unit_quantities', 'visible')) { - $table->integer('visible')->nullable(); + if ( ! Schema::hasColumn( 'nexopos_products_unit_quantities', 'visible' ) ) { + $table->integer( 'visible' )->nullable(); } - if (! Schema::hasColumn('nexopos_products_unit_quantities', 'cogs')) { - $table->integer('cogs')->nullable(); + if ( ! Schema::hasColumn( 'nexopos_products_unit_quantities', 'cogs' ) ) { + $table->integer( 'cogs' )->nullable(); } - }); + } ); - Schema::table('nexopos_products', function (Blueprint $table) { - if (! Schema::hasColumn('nexopos_products', 'auto_cogs')) { - $table->boolean('auto_cogs')->default(true); + Schema::table( 'nexopos_products', function ( Blueprint $table ) { + if ( ! Schema::hasColumn( 'nexopos_products', 'auto_cogs' ) ) { + $table->boolean( 'auto_cogs' )->default( true ); } - }); + } ); /** * Let's convert customers into users */ - $firstAdministrator = Role::namespace(Role::ADMIN)->users()->first(); - $faker = (new Factory)->create(); + $firstAdministrator = Role::namespace( Role::ADMIN )->users()->first(); + $faker = ( new Factory )->create(); - if (Schema::hasTable('nexopos_customers')) { - $users = DB::table('nexopos_customers')->get('*')->map(function ($customer) use ($faker, $usersService, $doctorService, $firstAdministrator) { - $user = User::where('email', $customer->email) - ->orWhere('username', $customer->email) + if ( Schema::hasTable( 'nexopos_customers' ) ) { + $users = DB::table( 'nexopos_customers' )->get( '*' )->map( function ( $customer ) use ( $faker, $usersService, $doctorService, $firstAdministrator ) { + $user = User::where( 'email', $customer->email ) + ->orWhere( 'username', $customer->email ) ->firstOrNew(); $user->birth_date = $customer->birth_date; - $user->username = ($customer->email ?? 'user-') . $faker->randomNumber(5); - $user->email = ($customer->email ?? $user->username) . '@nexopos.com'; + $user->username = ( $customer->email ?? 'user-' ) . $faker->randomNumber( 5 ); + $user->email = ( $customer->email ?? $user->username ) . '@nexopos.com'; $user->purchases_amount = $customer->purchases_amount ?: 0; $user->owed_amount = $customer->owed_amount ?: 0; $user->credit_limit_amount = $customer->credit_limit_amount ?: 0; @@ -290,48 +290,48 @@ public function up() $user->group_id = $customer->group_id; $user->author = $firstAdministrator->id; $user->active = true; - $user->password = Hash::make(Str::random(10)); // every customer has a random password. + $user->password = Hash::make( Str::random( 10 ) ); // every customer has a random password. $user->save(); /** * We'll assign the user to the role that was created based. */ - $usersService->setUserRole($user, [ Role::namespace(Role::STORECUSTOMER)->id ]); - $doctorService->createAttributeForUser($user); + $usersService->setUserRole( $user, [ Role::namespace( Role::STORECUSTOMER )->id ] ); + $doctorService->createAttributeForUser( $user ); return [ 'old_id' => $customer->id, 'new_id' => $user->id, 'user' => $user, ]; - }); + } ); /** * Every models that was pointing to the old customer id * must be update to support the new customer id which is not * set on the users table. */ - $users->each(function ($data) { - foreach ([ Order::class, CustomerAccountHistory::class, CustomerCoupon::class, CustomerAddress::class, CustomerReward::class ] as $class) { - $class::where('customer_id', $data[ 'old_id' ])->get()->each(function ($address) use ($data) { + $users->each( function ( $data ) { + foreach ( [ Order::class, CustomerAccountHistory::class, CustomerCoupon::class, CustomerAddress::class, CustomerReward::class ] as $class ) { + $class::where( 'customer_id', $data[ 'old_id' ] )->get()->each( function ( $address ) use ( $data ) { $address->customer_id = $data[ 'new_id' ]; $address->save(); - }); + } ); } - }); + } ); - Schema::drop('nexopos_customers'); - Schema::drop('nexopos_customers_metas'); + Schema::drop( 'nexopos_customers' ); + Schema::drop( 'nexopos_customers_metas' ); } /** * We noticed taxes were saved as a negative value on order products * this will fix those value by storing absolute values. */ - OrderProduct::get('tax_value')->each(function ($orderProduct) { - $orderProduct->tax_value = abs($orderProduct->tax_value); + OrderProduct::get( 'tax_value' )->each( function ( $orderProduct ) { + $orderProduct->tax_value = abs( $orderProduct->tax_value ); $orderProduct->save(); - }); + } ); /** * We'll drop permissions we no longer use @@ -341,10 +341,10 @@ public function up() * 1: This permission is a duplicate one, and can easilly be confused * with "nexopos.customers.manage-account-history" */ - $permission = Permission::namespace('nexopos.customers.manage-account'); + $permission = Permission::namespace( 'nexopos.customers.manage-account' ); - if ($permission instanceof Permission) { - RolePermission::where('permission_id', $permission->id)->delete(); + if ( $permission instanceof Permission ) { + RolePermission::where( 'permission_id', $permission->id )->delete(); $permission->delete(); } @@ -353,20 +353,20 @@ public function up() */ $options = Option::get(); - $options->each(function ($option) { - $json = json_decode($option->value, true); + $options->each( function ( $option ) { + $json = json_decode( $option->value, true ); - if (preg_match('/^[0-9]{1,}$/', $option->value)) { + if ( preg_match( '/^[0-9]{1,}$/', $option->value ) ) { $option->value = (int) $option->value; - } elseif (preg_match('/^[0-9]{1,}\.[0-9]{1,}$/', $option->value)) { + } elseif ( preg_match( '/^[0-9]{1,}\.[0-9]{1,}$/', $option->value ) ) { $option->value = (float) $option->value; - } elseif (json_last_error() == JSON_ERROR_NONE) { + } elseif ( json_last_error() == JSON_ERROR_NONE ) { $option->value = $json; $option->array = 1; } $option->save(); - }); + } ); } /** diff --git a/database/migrations/update/2022_11_30_224820_update_orders_coupon_table.php b/database/migrations/update/2022_11_30_224820_update_orders_coupon_table.php index ea05c1c6d..37b1fe48e 100644 --- a/database/migrations/update/2022_11_30_224820_update_orders_coupon_table.php +++ b/database/migrations/update/2022_11_30_224820_update_orders_coupon_table.php @@ -13,11 +13,11 @@ */ public function up() { - Schema::table('nexopos_orders_coupons', function (Blueprint $table) { - if (! Schema::hasColumn('nexopos_orders_coupons', 'coupon_id')) { - $table->integer('coupon_id')->nullable(); + Schema::table( 'nexopos_orders_coupons', function ( Blueprint $table ) { + if ( ! Schema::hasColumn( 'nexopos_orders_coupons', 'coupon_id' ) ) { + $table->integer( 'coupon_id' )->nullable(); } - }); + } ); } /** @@ -27,10 +27,10 @@ public function up() */ public function down() { - Schema::table('nexopos_orders_coupons', function (Blueprint $table) { - if (Schema::hasColumn('nexopos_orders_coupons', 'coupon_id')) { - $table->dropColumn('coupon_id'); + Schema::table( 'nexopos_orders_coupons', function ( Blueprint $table ) { + if ( Schema::hasColumn( 'nexopos_orders_coupons', 'coupon_id' ) ) { + $table->dropColumn( 'coupon_id' ); } - }); + } ); } }; diff --git a/database/migrations/update/2023_02_14_123130_update_product_history_table14_fev23.php b/database/migrations/update/2023_02_14_123130_update_product_history_table14_fev23.php index 35c952aed..51f9f756f 100644 --- a/database/migrations/update/2023_02_14_123130_update_product_history_table14_fev23.php +++ b/database/migrations/update/2023_02_14_123130_update_product_history_table14_fev23.php @@ -14,11 +14,11 @@ */ public function up() { - Schema::table('nexopos_products_histories', function (Blueprint $table) { - if (! Schema::hasColumn('nexopos_products_histories', 'order_product_id')) { - $table->integer('order_product_id')->nullable(); + Schema::table( 'nexopos_products_histories', function ( Blueprint $table ) { + if ( ! Schema::hasColumn( 'nexopos_products_histories', 'order_product_id' ) ) { + $table->integer( 'order_product_id' )->nullable(); } - }); + } ); ModelsMigration::truncate(); } diff --git a/database/migrations/update/2023_03_16_214039_update_expense_table.php b/database/migrations/update/2023_03_16_214039_update_expense_table.php index 0d4d67368..ae6d24723 100644 --- a/database/migrations/update/2023_03_16_214039_update_expense_table.php +++ b/database/migrations/update/2023_03_16_214039_update_expense_table.php @@ -13,15 +13,15 @@ */ public function up() { - if (Schema::hasTable('nexopos_expenses')) { - Schema::table('nexopos_expenses', function (Blueprint $table) { - if (Schema::hasColumn('nexopos_expenses', 'occurence')) { - $table->renameColumn('occurence', 'occurrence'); + if ( Schema::hasTable( 'nexopos_expenses' ) ) { + Schema::table( 'nexopos_expenses', function ( Blueprint $table ) { + if ( Schema::hasColumn( 'nexopos_expenses', 'occurence' ) ) { + $table->renameColumn( 'occurence', 'occurrence' ); } - if (Schema::hasColumn('nexopos_expenses', 'occurence_value')) { - $table->renameColumn('occurence_value', 'occurrence_value'); + if ( Schema::hasColumn( 'nexopos_expenses', 'occurence_value' ) ) { + $table->renameColumn( 'occurence_value', 'occurrence_value' ); } - }); + } ); } } diff --git a/database/migrations/update/2023_07_30_235454_fix_wrong_purchase_price_32_jul_23.php b/database/migrations/update/2023_07_30_235454_fix_wrong_purchase_price_32_jul_23.php index e6068707f..422ee9153 100644 --- a/database/migrations/update/2023_07_30_235454_fix_wrong_purchase_price_32_jul_23.php +++ b/database/migrations/update/2023_07_30_235454_fix_wrong_purchase_price_32_jul_23.php @@ -18,28 +18,28 @@ */ public function up() { - $this->productService = app()->make(ProductService::class); + $this->productService = app()->make( ProductService::class ); /** * will ensure a single product * is handled every time. */ - $cached = json_decode(Cache::get('fix_wrong_purchase_prices', '[]')); + $cached = json_decode( Cache::get( 'fix_wrong_purchase_prices', '[]' ) ); - OrderProduct::whereNotIn('id', $cached)->get()->each(function (OrderProduct $orderProduct) use ($cached) { - $product = Product::find($orderProduct->product_id); + OrderProduct::whereNotIn( 'id', $cached )->get()->each( function ( OrderProduct $orderProduct ) use ( $cached ) { + $product = Product::find( $orderProduct->product_id ); $lastPurchasePrice = $this->productService->getLastPurchasePrice( product: $product, unit: $orderProduct->unit, before: $orderProduct->created_at ); - $orderProduct->total_purchase_price = Currency::fresh($lastPurchasePrice)->multipliedBy($orderProduct->quantity)->getRaw(); + $orderProduct->total_purchase_price = Currency::fresh( $lastPurchasePrice )->multipliedBy( $orderProduct->quantity )->getRaw(); $orderProduct->save(); $cached[] = $orderProduct->id; - Cache::put('fix_wrong_purchase_prices', json_encode($cached), now()->addDay()); - }); + Cache::put( 'fix_wrong_purchase_prices', json_encode( $cached ), now()->addDay() ); + } ); } /** diff --git a/database/migrations/update/2024_01_26_075544_update_expenses_and_accounts.php b/database/migrations/update/2024_01_26_075544_update_expenses_and_accounts.php index 915e42e59..e9a17220d 100644 --- a/database/migrations/update/2024_01_26_075544_update_expenses_and_accounts.php +++ b/database/migrations/update/2024_01_26_075544_update_expenses_and_accounts.php @@ -3,7 +3,6 @@ use App\Models\Permission; use App\Models\Role; use Illuminate\Database\Migrations\Migration; -use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration @@ -13,25 +12,25 @@ */ public function up(): void { - if (Schema::hasTable('nexopos_expenses')) { - Schema::rename('nexopos_expenses', 'nexopos_transactions'); + if ( Schema::hasTable( 'nexopos_expenses' ) ) { + Schema::rename( 'nexopos_expenses', 'nexopos_transactions' ); } - if (Schema::hasTable('nexopos_expenses_categories')) { - Schema::rename('nexopos_expenses_categories', 'nexopos_transactions_accounts'); + if ( Schema::hasTable( 'nexopos_expenses_categories' ) ) { + Schema::rename( 'nexopos_expenses_categories', 'nexopos_transactions_accounts' ); } - - if (Schema::hasTable('nexopos_cash_flow')) { - Schema::rename('nexopos_cash_flow', 'nexopos_transactions_histories'); + + if ( Schema::hasTable( 'nexopos_cash_flow' ) ) { + Schema::rename( 'nexopos_cash_flow', 'nexopos_transactions_histories' ); } include_once base_path() . '/database/permissions/transactions-accounts.php'; - $admin = Role::namespace(Role::ADMIN); - $storeAdmin = Role::namespace(Role::STOREADMIN); + $admin = Role::namespace( Role::ADMIN ); + $storeAdmin = Role::namespace( Role::STOREADMIN ); - $admin->addPermissions(Permission::includes('.transactions-account')->get()->map(fn($permission) => $permission->namespace)); - $storeAdmin->addPermissions(Permission::includes('.transactions-account')->get()->map(fn($permission) => $permission->namespace)); + $admin->addPermissions( Permission::includes( '.transactions-account' )->get()->map( fn( $permission ) => $permission->namespace ) ); + $storeAdmin->addPermissions( Permission::includes( '.transactions-account' )->get()->map( fn( $permission ) => $permission->namespace ) ); } /** diff --git a/database/migrations/update/2024_01_26_165001_update_transaction_histories.php b/database/migrations/update/2024_01_26_165001_update_transaction_histories.php new file mode 100644 index 000000000..c7a19f3f9 --- /dev/null +++ b/database/migrations/update/2024_01_26_165001_update_transaction_histories.php @@ -0,0 +1,34 @@ +renameColumn( 'expense_category_id', 'transaction_account_id' ); + } + } ); + + Schema::table( 'nexopos_procurements_products', function ( Blueprint $table ) { + if ( Schema::hasColumn( 'nexopos_procurements_products', 'tax_group_id' ) ) { + $table->unsignedBigInteger( 'tax_group_id' )->nullable()->change(); + } + } ); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // + } +}; diff --git a/database/permissions/admin-role.php b/database/permissions/admin-role.php index 1eda9bae3..6545e166c 100644 --- a/database/permissions/admin-role.php +++ b/database/permissions/admin-role.php @@ -3,13 +3,13 @@ use App\Models\Permission; use App\Models\Role; -$admin = Role::firstOrNew([ 'namespace' => 'admin' ]); -$admin->name = __('Administrator'); +$admin = Role::firstOrNew( [ 'namespace' => 'admin' ] ); +$admin->name = __( 'Administrator' ); $admin->namespace = 'admin'; $admin->locked = true; -$admin->description = __('Master role which can perform all actions like create users, install/update/delete modules and much more.'); +$admin->description = __( 'Master role which can perform all actions like create users, install/update/delete modules and much more.' ); $admin->save(); -$admin->addPermissions([ +$admin->addPermissions( [ 'create.users', 'read.users', 'update.users', @@ -23,33 +23,33 @@ 'manage.options', 'manage.modules', 'read.dashboard', -]); +] ); -$admin->addPermissions(Permission::includes('.transactions')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.cash-flow-history')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.transactions-accounts')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.medias')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.categories')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.customers')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.customers-groups')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.coupons')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.orders')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.procurements')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.providers')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.products')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.products-history')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.products-adjustments')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.products-units')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.profile')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.registers')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.registers-history')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.rewards')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.reports.')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.stores')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.taxes')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.trucks')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.units')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.manage-payments-types')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.pos')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('.pos')->get()->map(fn($permission) => $permission->namespace)); -$admin->addPermissions(Permission::includes('-widget')->get()->map(fn($permission) => $permission->namespace)); +$admin->addPermissions( Permission::includes( '.transactions' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.cash-flow-history' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.transactions-accounts' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.medias' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.categories' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.customers' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.customers-groups' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.coupons' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.orders' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.procurements' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.providers' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.products' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.products-history' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.products-adjustments' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.products-units' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.profile' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.registers' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.registers-history' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.rewards' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.reports.' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.stores' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.taxes' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.trucks' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.units' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.manage-payments-types' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.pos' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '.pos' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$admin->addPermissions( Permission::includes( '-widget' )->get()->map( fn( $permission ) => $permission->namespace ) ); diff --git a/database/permissions/categories.php b/database/permissions/categories.php index aee885392..42dbb4f52 100644 --- a/database/permissions/categories.php +++ b/database/permissions/categories.php @@ -2,28 +2,28 @@ use App\Models\Permission; -if (defined('NEXO_CREATE_PERMISSIONS')) { - $category = Permission::firstOrNew([ 'namespace' => 'nexopos.create.categories' ]); - $category->name = __('Create Categories'); +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $category = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.categories' ] ); + $category->name = __( 'Create Categories' ); $category->namespace = 'nexopos.create.categories'; - $category->description = __('Let the user create products categories.'); + $category->description = __( 'Let the user create products categories.' ); $category->save(); - $category = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.categories' ]); - $category->name = __('Delete Categories'); + $category = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.categories' ] ); + $category->name = __( 'Delete Categories' ); $category->namespace = 'nexopos.delete.categories'; - $category->description = __('Let the user delete products categories.'); + $category->description = __( 'Let the user delete products categories.' ); $category->save(); - $category = Permission::firstOrNew([ 'namespace' => 'nexopos.update.categories' ]); - $category->name = __('Update Categories'); + $category = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.categories' ] ); + $category->name = __( 'Update Categories' ); $category->namespace = 'nexopos.update.categories'; - $category->description = __('Let the user update products categories.'); + $category->description = __( 'Let the user update products categories.' ); $category->save(); - $category = Permission::firstOrNew([ 'namespace' => 'nexopos.read.categories' ]); - $category->name = __('Read Categories'); + $category = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.categories' ] ); + $category->name = __( 'Read Categories' ); $category->namespace = 'nexopos.read.categories'; - $category->description = __('Let the user read products categories.'); + $category->description = __( 'Let the user read products categories.' ); $category->save(); } diff --git a/database/permissions/coupons.php b/database/permissions/coupons.php index 819f33ac9..c02f7a190 100644 --- a/database/permissions/coupons.php +++ b/database/permissions/coupons.php @@ -2,28 +2,28 @@ use App\Models\Permission; -if (defined('NEXO_CREATE_PERMISSIONS')) { - $coupons = Permission::firstOrNew([ 'namespace' => 'nexopos.create.coupons' ]); - $coupons->name = __('Create Coupons'); +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $coupons = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.coupons' ] ); + $coupons->name = __( 'Create Coupons' ); $coupons->namespace = 'nexopos.create.coupons'; - $coupons->description = __('Let the user create coupons'); + $coupons->description = __( 'Let the user create coupons' ); $coupons->save(); - $coupons = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.coupons' ]); - $coupons->name = __('Delete Coupons'); + $coupons = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.coupons' ] ); + $coupons->name = __( 'Delete Coupons' ); $coupons->namespace = 'nexopos.delete.coupons'; - $coupons->description = __('Let the user delete coupons'); + $coupons->description = __( 'Let the user delete coupons' ); $coupons->save(); - $coupons = Permission::firstOrNew([ 'namespace' => 'nexopos.update.coupons' ]); - $coupons->name = __('Update Coupons'); + $coupons = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.coupons' ] ); + $coupons->name = __( 'Update Coupons' ); $coupons->namespace = 'nexopos.update.coupons'; - $coupons->description = __('Let the user update coupons'); + $coupons->description = __( 'Let the user update coupons' ); $coupons->save(); - $coupons = Permission::firstOrNew([ 'namespace' => 'nexopos.read.coupons' ]); - $coupons->name = __('Read Coupons'); + $coupons = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.coupons' ] ); + $coupons->name = __( 'Read Coupons' ); $coupons->namespace = 'nexopos.read.coupons'; - $coupons->description = __('Let the user read coupons'); + $coupons->description = __( 'Let the user read coupons' ); $coupons->save(); } diff --git a/database/permissions/customers-groups.php b/database/permissions/customers-groups.php index 599078a41..690b12fa0 100644 --- a/database/permissions/customers-groups.php +++ b/database/permissions/customers-groups.php @@ -2,28 +2,28 @@ use App\Models\Permission; -if (defined('NEXO_CREATE_PERMISSIONS')) { - $customersGroups = Permission::firstOrNew([ 'namespace' => 'nexopos.create.customers-groups' ]); - $customersGroups->name = __('Create Customers Groups'); +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $customersGroups = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.customers-groups' ] ); + $customersGroups->name = __( 'Create Customers Groups' ); $customersGroups->namespace = 'nexopos.create.customers-groups'; - $customersGroups->description = __('Let the user create Customers Groups'); + $customersGroups->description = __( 'Let the user create Customers Groups' ); $customersGroups->save(); - $customersGroups = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.customers-groups' ]); - $customersGroups->name = __('Delete Customers Groups'); + $customersGroups = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.customers-groups' ] ); + $customersGroups->name = __( 'Delete Customers Groups' ); $customersGroups->namespace = 'nexopos.delete.customers-groups'; - $customersGroups->description = __('Let the user delete Customers Groups'); + $customersGroups->description = __( 'Let the user delete Customers Groups' ); $customersGroups->save(); - $customersGroups = Permission::firstOrNew([ 'namespace' => 'nexopos.update.customers-groups' ]); - $customersGroups->name = __('Update Customers Groups'); + $customersGroups = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.customers-groups' ] ); + $customersGroups->name = __( 'Update Customers Groups' ); $customersGroups->namespace = 'nexopos.update.customers-groups'; - $customersGroups->description = __('Let the user update Customers Groups'); + $customersGroups->description = __( 'Let the user update Customers Groups' ); $customersGroups->save(); - $customersGroups = Permission::firstOrNew([ 'namespace' => 'nexopos.read.customers-groups' ]); - $customersGroups->name = __('Read Customers Groups'); + $customersGroups = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.customers-groups' ] ); + $customersGroups->name = __( 'Read Customers Groups' ); $customersGroups->namespace = 'nexopos.read.customers-groups'; - $customersGroups->description = __('Let the user read Customers Groups'); + $customersGroups->description = __( 'Let the user read Customers Groups' ); $customersGroups->save(); } diff --git a/database/permissions/customers.php b/database/permissions/customers.php index d400675d0..9ee3bd3bf 100644 --- a/database/permissions/customers.php +++ b/database/permissions/customers.php @@ -2,40 +2,40 @@ use App\Models\Permission; -if (defined('NEXO_CREATE_PERMISSIONS')) { - $customers = Permission::firstOrNew([ 'namespace' => 'nexopos.create.customers' ]); - $customers->name = __('Create Customers'); +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $customers = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.customers' ] ); + $customers->name = __( 'Create Customers' ); $customers->namespace = 'nexopos.create.customers'; - $customers->description = __('Let the user create customers.'); + $customers->description = __( 'Let the user create customers.' ); $customers->save(); - $customers = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.customers' ]); - $customers->name = __('Delete Customers'); + $customers = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.customers' ] ); + $customers->name = __( 'Delete Customers' ); $customers->namespace = 'nexopos.delete.customers'; - $customers->description = __('Let the user delete customers.'); + $customers->description = __( 'Let the user delete customers.' ); $customers->save(); - $customers = Permission::firstOrNew([ 'namespace' => 'nexopos.update.customers' ]); - $customers->name = __('Update Customers'); + $customers = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.customers' ] ); + $customers->name = __( 'Update Customers' ); $customers->namespace = 'nexopos.update.customers'; - $customers->description = __('Let the user update customers.'); + $customers->description = __( 'Let the user update customers.' ); $customers->save(); - $customers = Permission::firstOrNew([ 'namespace' => 'nexopos.read.customers' ]); - $customers->name = __('Read Customers'); + $customers = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.customers' ] ); + $customers->name = __( 'Read Customers' ); $customers->namespace = 'nexopos.read.customers'; - $customers->description = __('Let the user read customers.'); + $customers->description = __( 'Let the user read customers.' ); $customers->save(); - $customers = Permission::firstOrNew([ 'namespace' => 'nexopos.import.customers' ]); - $customers->name = __('Import Customers'); + $customers = Permission::firstOrNew( [ 'namespace' => 'nexopos.import.customers' ] ); + $customers->name = __( 'Import Customers' ); $customers->namespace = 'nexopos.import.customers'; - $customers->description = __('Let the user import customers.'); + $customers->description = __( 'Let the user import customers.' ); $customers->save(); - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.customers.manage-account-history' ]); + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.customers.manage-account-history' ] ); $permission->namespace = 'nexopos.customers.manage-account-history'; - $permission->name = __('Manage Customer Account History'); - $permission->description = __('Can add, deduct amount from each customers account.'); + $permission->name = __( 'Manage Customer Account History' ); + $permission->description = __( 'Can add, deduct amount from each customers account.' ); $permission->save(); } diff --git a/database/permissions/medias.php b/database/permissions/medias.php index 00a4f198e..5977b7974 100644 --- a/database/permissions/medias.php +++ b/database/permissions/medias.php @@ -2,28 +2,28 @@ use App\Models\Permission; -if (defined('NEXO_CREATE_PERMISSIONS')) { - $medias = Permission::firstOrNew([ 'namespace' => 'nexopos.upload.medias' ]); - $medias->name = __('Upload Medias'); +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $medias = Permission::firstOrNew( [ 'namespace' => 'nexopos.upload.medias' ] ); + $medias->name = __( 'Upload Medias' ); $medias->namespace = 'nexopos.upload.medias'; - $medias->description = __('Let the user upload medias.'); + $medias->description = __( 'Let the user upload medias.' ); $medias->save(); - $medias = Permission::firstOrNew([ 'namespace' => 'nexopos.see.medias' ]); - $medias->name = __('See Medias'); + $medias = Permission::firstOrNew( [ 'namespace' => 'nexopos.see.medias' ] ); + $medias->name = __( 'See Medias' ); $medias->namespace = 'nexopos.see.medias'; - $medias->description = __('Let the user see medias.'); + $medias->description = __( 'Let the user see medias.' ); $medias->save(); - $medias = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.medias' ]); - $medias->name = __('Delete Medias'); + $medias = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.medias' ] ); + $medias->name = __( 'Delete Medias' ); $medias->namespace = 'nexopos.delete.medias'; - $medias->description = __('Let the user delete medias.'); + $medias->description = __( 'Let the user delete medias.' ); $medias->save(); - $medias = Permission::firstOrNew([ 'namespace' => 'nexopos.update.medias' ]); - $medias->name = __('Update Medias'); + $medias = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.medias' ] ); + $medias->name = __( 'Update Medias' ); $medias->namespace = 'nexopos.update.medias'; - $medias->description = __('Let the user update uploaded medias.'); + $medias->description = __( 'Let the user update uploaded medias.' ); $medias->save(); } diff --git a/database/permissions/orders.php b/database/permissions/orders.php index d7c34bd1a..b5dc3493b 100644 --- a/database/permissions/orders.php +++ b/database/permissions/orders.php @@ -2,46 +2,46 @@ use App\Models\Permission; -if (defined('NEXO_CREATE_PERMISSIONS')) { - $orders = Permission::firstOrNew([ 'namespace' => 'nexopos.create.orders' ]); - $orders->name = __('Create Orders'); +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $orders = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.orders' ] ); + $orders->name = __( 'Create Orders' ); $orders->namespace = 'nexopos.create.orders'; - $orders->description = __('Let the user create orders'); + $orders->description = __( 'Let the user create orders' ); $orders->save(); - $orders = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.orders' ]); - $orders->name = __('Delete Orders'); + $orders = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.orders' ] ); + $orders->name = __( 'Delete Orders' ); $orders->namespace = 'nexopos.delete.orders'; - $orders->description = __('Let the user delete orders'); + $orders->description = __( 'Let the user delete orders' ); $orders->save(); - $orders = Permission::firstOrNew([ 'namespace' => 'nexopos.update.orders' ]); - $orders->name = __('Update Orders'); + $orders = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.orders' ] ); + $orders->name = __( 'Update Orders' ); $orders->namespace = 'nexopos.update.orders'; - $orders->description = __('Let the user update orders'); + $orders->description = __( 'Let the user update orders' ); $orders->save(); - $orders = Permission::firstOrNew([ 'namespace' => 'nexopos.read.orders' ]); - $orders->name = __('Read Orders'); + $orders = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.orders' ] ); + $orders->name = __( 'Read Orders' ); $orders->namespace = 'nexopos.read.orders'; - $orders->description = __('Let the user read orders'); + $orders->description = __( 'Let the user read orders' ); $orders->save(); - $orders = Permission::firstOrNew([ 'namespace' => 'nexopos.void.orders' ]); - $orders->name = __('Void Order'); + $orders = Permission::firstOrNew( [ 'namespace' => 'nexopos.void.orders' ] ); + $orders->name = __( 'Void Order' ); $orders->namespace = 'nexopos.void.orders'; - $orders->description = __('Let the user void orders'); + $orders->description = __( 'Let the user void orders' ); $orders->save(); - $orders = Permission::firstOrNew([ 'namespace' => 'nexopos.refund.orders' ]); - $orders->name = __('Refund Order'); + $orders = Permission::firstOrNew( [ 'namespace' => 'nexopos.refund.orders' ] ); + $orders->name = __( 'Refund Order' ); $orders->namespace = 'nexopos.refund.orders'; - $orders->description = __('Let the user refund orders'); + $orders->description = __( 'Let the user refund orders' ); $orders->save(); - $orders = Permission::firstOrNew([ 'namespace' => 'nexopos.make-payment.orders' ]); - $orders->name = __('Make Payment To orders'); + $orders = Permission::firstOrNew( [ 'namespace' => 'nexopos.make-payment.orders' ] ); + $orders->name = __( 'Make Payment To orders' ); $orders->namespace = 'nexopos.make-payment.orders'; - $orders->description = __('Allow the user to make payments to orders.'); + $orders->description = __( 'Allow the user to make payments to orders.' ); $orders->save(); } diff --git a/database/permissions/payments-types.php b/database/permissions/payments-types.php index 2805cd65c..bf130a92a 100644 --- a/database/permissions/payments-types.php +++ b/database/permissions/payments-types.php @@ -2,8 +2,8 @@ use App\Models\Permission; -$permission = Permission::firstOrNew([ 'namespace' => 'nexopos.manage-payments-types' ]); +$permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.manage-payments-types' ] ); $permission->namespace = 'nexopos.manage-payments-types'; -$permission->name = __('Manage Order Payments'); -$permission->description = __('Allow to create, update and delete payments type.'); +$permission->name = __( 'Manage Order Payments' ); +$permission->description = __( 'Allow to create, update and delete payments type.' ); $permission->save(); diff --git a/database/permissions/pos.php b/database/permissions/pos.php index d3d808020..614add261 100644 --- a/database/permissions/pos.php +++ b/database/permissions/pos.php @@ -2,34 +2,34 @@ use App\Models\Permission; -if (! Permission::namespace('nexopos.pos.edit-purchase-price') instanceof Permission) { - $pos = Permission::firstOrNew([ 'namespace' => 'nexopos.pos.edit-purchase-price' ]); - $pos->name = __('Edit Purchase Price'); +if ( ! Permission::namespace( 'nexopos.pos.edit-purchase-price' ) instanceof Permission ) { + $pos = Permission::firstOrNew( [ 'namespace' => 'nexopos.pos.edit-purchase-price' ] ); + $pos->name = __( 'Edit Purchase Price' ); $pos->namespace = 'nexopos.pos.edit-purchase-price'; - $pos->description = __('Let the user edit the purchase price of products.'); + $pos->description = __( 'Let the user edit the purchase price of products.' ); $pos->save(); } -if (! Permission::namespace('nexopos.pos.edit-settings') instanceof Permission) { - $pos = Permission::firstOrNew([ 'namespace' => 'nexopos.pos.edit-settings' ]); - $pos->name = __('Edit Order Settings'); +if ( ! Permission::namespace( 'nexopos.pos.edit-settings' ) instanceof Permission ) { + $pos = Permission::firstOrNew( [ 'namespace' => 'nexopos.pos.edit-settings' ] ); + $pos->name = __( 'Edit Order Settings' ); $pos->namespace = 'nexopos.pos.edit-settings'; - $pos->description = __('Let the user edit the order settings.'); + $pos->description = __( 'Let the user edit the order settings.' ); $pos->save(); } -if (! Permission::namespace('nexopos.pos.products-discount') instanceof Permission) { - $pos = Permission::firstOrNew([ 'namespace' => 'nexopos.pos.products-discount' ]); - $pos->name = __('Edit Product Discounts'); +if ( ! Permission::namespace( 'nexopos.pos.products-discount' ) instanceof Permission ) { + $pos = Permission::firstOrNew( [ 'namespace' => 'nexopos.pos.products-discount' ] ); + $pos->name = __( 'Edit Product Discounts' ); $pos->namespace = 'nexopos.pos.products-discount'; - $pos->description = __('Let the user add discount on products.'); + $pos->description = __( 'Let the user add discount on products.' ); $pos->save(); } -if (! Permission::namespace('nexopos.pos.cart-discount') instanceof Permission) { - $pos = Permission::firstOrNew([ 'namespace' => 'nexopos.pos.cart-discount' ]); - $pos->name = __('Edit Cart Discounts'); +if ( ! Permission::namespace( 'nexopos.pos.cart-discount' ) instanceof Permission ) { + $pos = Permission::firstOrNew( [ 'namespace' => 'nexopos.pos.cart-discount' ] ); + $pos->name = __( 'Edit Cart Discounts' ); $pos->namespace = 'nexopos.pos.cart-discount'; - $pos->description = __('Let the user add discount on cart.'); + $pos->description = __( 'Let the user add discount on cart.' ); $pos->save(); } diff --git a/database/permissions/procurements.php b/database/permissions/procurements.php index a0d505dec..268c0d77f 100644 --- a/database/permissions/procurements.php +++ b/database/permissions/procurements.php @@ -2,28 +2,28 @@ use App\Models\Permission; -if (defined('NEXO_CREATE_PERMISSIONS')) { - $procurements = Permission::firstOrNew([ 'namespace' => 'nexopos.create.procurements' ]); - $procurements->name = __('Create Procurements'); +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $procurements = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.procurements' ] ); + $procurements->name = __( 'Create Procurements' ); $procurements->namespace = 'nexopos.create.procurements'; - $procurements->description = __('Let the user create procurements'); + $procurements->description = __( 'Let the user create procurements' ); $procurements->save(); - $procurements = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.procurements' ]); - $procurements->name = __('Delete Procurements'); + $procurements = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.procurements' ] ); + $procurements->name = __( 'Delete Procurements' ); $procurements->namespace = 'nexopos.delete.procurements'; - $procurements->description = __('Let the user delete procurements'); + $procurements->description = __( 'Let the user delete procurements' ); $procurements->save(); - $procurements = Permission::firstOrNew([ 'namespace' => 'nexopos.update.procurements' ]); - $procurements->name = __('Update Procurements'); + $procurements = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.procurements' ] ); + $procurements->name = __( 'Update Procurements' ); $procurements->namespace = 'nexopos.update.procurements'; - $procurements->description = __('Let the user update procurements'); + $procurements->description = __( 'Let the user update procurements' ); $procurements->save(); - $procurements = Permission::firstOrNew([ 'namespace' => 'nexopos.read.procurements' ]); - $procurements->name = __('Read Procurements'); + $procurements = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.procurements' ] ); + $procurements->name = __( 'Read Procurements' ); $procurements->namespace = 'nexopos.read.procurements'; - $procurements->description = __('Let the user read procurements'); + $procurements->description = __( 'Let the user read procurements' ); $procurements->save(); } diff --git a/database/permissions/products.php b/database/permissions/products.php index a26cf80cf..0c5571e7d 100644 --- a/database/permissions/products.php +++ b/database/permissions/products.php @@ -2,64 +2,64 @@ use App\Models\Permission; -if (defined('NEXO_CREATE_PERMISSIONS')) { - $product = Permission::firstOrNew([ 'namespace' => 'nexopos.create.products' ]); - $product->name = __('Create Products'); +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $product = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.products' ] ); + $product->name = __( 'Create Products' ); $product->namespace = 'nexopos.create.products'; - $product->description = __('Let the user create products'); + $product->description = __( 'Let the user create products' ); $product->save(); - $product = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.products' ]); - $product->name = __('Delete Products'); + $product = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.products' ] ); + $product->name = __( 'Delete Products' ); $product->namespace = 'nexopos.delete.products'; - $product->description = __('Let the user delete products'); + $product->description = __( 'Let the user delete products' ); $product->save(); - $product = Permission::firstOrNew([ 'namespace' => 'nexopos.update.products' ]); - $product->name = __('Update Products'); + $product = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.products' ] ); + $product->name = __( 'Update Products' ); $product->namespace = 'nexopos.update.products'; - $product->description = __('Let the user update products'); + $product->description = __( 'Let the user update products' ); $product->save(); - $product = Permission::firstOrNew([ 'namespace' => 'nexopos.read.products' ]); - $product->name = __('Read Products'); + $product = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.products' ] ); + $product->name = __( 'Read Products' ); $product->namespace = 'nexopos.read.products'; - $product->description = __('Let the user read products'); + $product->description = __( 'Let the user read products' ); $product->save(); - $product = Permission::firstOrNew([ 'namespace' => 'nexopos.read.products-history' ]); - $product->name = __('Read Product History'); + $product = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.products-history' ] ); + $product->name = __( 'Read Product History' ); $product->namespace = 'nexopos.read.products-history'; - $product->description = __('Let the user read products history'); + $product->description = __( 'Let the user read products history' ); $product->save(); - $product = Permission::firstOrNew([ 'namespace' => 'nexopos.make.products-adjustments' ]); - $product->name = __('Adjust Product Stock'); + $product = Permission::firstOrNew( [ 'namespace' => 'nexopos.make.products-adjustments' ] ); + $product->name = __( 'Adjust Product Stock' ); $product->namespace = 'nexopos.make.products-adjustments'; - $product->description = __('Let the user adjust product stock.'); + $product->description = __( 'Let the user adjust product stock.' ); $product->save(); - $product = Permission::firstOrNew([ 'namespace' => 'nexopos.create.products-units' ]); - $product->name = __('Create Product Units/Unit Group'); + $product = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.products-units' ] ); + $product->name = __( 'Create Product Units/Unit Group' ); $product->namespace = 'nexopos.create.products-units'; - $product->description = __('Let the user create products units.'); + $product->description = __( 'Let the user create products units.' ); $product->save(); - $product = Permission::firstOrNew([ 'namespace' => 'nexopos.read.products-units' ]); - $product->name = __('Read Product Units/Unit Group'); + $product = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.products-units' ] ); + $product->name = __( 'Read Product Units/Unit Group' ); $product->namespace = 'nexopos.read.products-units'; - $product->description = __('Let the user read products units.'); + $product->description = __( 'Let the user read products units.' ); $product->save(); - $product = Permission::firstOrNew([ 'namespace' => 'nexopos.update.products-units' ]); - $product->name = __('Update Product Units/Unit Group'); + $product = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.products-units' ] ); + $product->name = __( 'Update Product Units/Unit Group' ); $product->namespace = 'nexopos.update.products-units'; - $product->description = __('Let the user update products units.'); + $product->description = __( 'Let the user update products units.' ); $product->save(); - $product = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.products-units' ]); - $product->name = __('Delete Product Units/Unit Group'); + $product = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.products-units' ] ); + $product->name = __( 'Delete Product Units/Unit Group' ); $product->namespace = 'nexopos.delete.products-units'; - $product->description = __('Let the user delete products units.'); + $product->description = __( 'Let the user delete products units.' ); $product->save(); } diff --git a/database/permissions/providers.php b/database/permissions/providers.php index e27940e16..b6516419b 100644 --- a/database/permissions/providers.php +++ b/database/permissions/providers.php @@ -2,28 +2,28 @@ use App\Models\Permission; -if (defined('NEXO_CREATE_PERMISSIONS')) { - $providers = Permission::firstOrNew([ 'namespace' => 'nexopos.create.providers' ]); - $providers->name = __('Create Providers'); +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $providers = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.providers' ] ); + $providers->name = __( 'Create Providers' ); $providers->namespace = 'nexopos.create.providers'; - $providers->description = __('Let the user create providers'); + $providers->description = __( 'Let the user create providers' ); $providers->save(); - $providers = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.providers' ]); - $providers->name = __('Delete Providers'); + $providers = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.providers' ] ); + $providers->name = __( 'Delete Providers' ); $providers->namespace = 'nexopos.delete.providers'; - $providers->description = __('Let the user delete providers'); + $providers->description = __( 'Let the user delete providers' ); $providers->save(); - $providers = Permission::firstOrNew([ 'namespace' => 'nexopos.update.providers' ]); - $providers->name = __('Update Providers'); + $providers = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.providers' ] ); + $providers->name = __( 'Update Providers' ); $providers->namespace = 'nexopos.update.providers'; - $providers->description = __('Let the user update providers'); + $providers->description = __( 'Let the user update providers' ); $providers->save(); - $providers = Permission::firstOrNew([ 'namespace' => 'nexopos.read.providers' ]); - $providers->name = __('Read Providers'); + $providers = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.providers' ] ); + $providers->name = __( 'Read Providers' ); $providers->namespace = 'nexopos.read.providers'; - $providers->description = __('Let the user read providers'); + $providers->description = __( 'Let the user read providers' ); $providers->save(); } diff --git a/database/permissions/registers.php b/database/permissions/registers.php index fa3801325..5aec012fc 100644 --- a/database/permissions/registers.php +++ b/database/permissions/registers.php @@ -2,40 +2,40 @@ use App\Models\Permission; -if (defined('NEXO_CREATE_PERMISSIONS')) { - $registers = Permission::firstOrNew([ 'namespace' => 'nexopos.create.registers' ]); - $registers->name = __('Create Registers'); +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $registers = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.registers' ] ); + $registers->name = __( 'Create Registers' ); $registers->namespace = 'nexopos.create.registers'; - $registers->description = __('Let the user create registers'); + $registers->description = __( 'Let the user create registers' ); $registers->save(); - $registers = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.registers' ]); - $registers->name = __('Delete Registers'); + $registers = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.registers' ] ); + $registers->name = __( 'Delete Registers' ); $registers->namespace = 'nexopos.delete.registers'; - $registers->description = __('Let the user delete registers'); + $registers->description = __( 'Let the user delete registers' ); $registers->save(); - $registers = Permission::firstOrNew([ 'namespace' => 'nexopos.update.registers' ]); - $registers->name = __('Update Registers'); + $registers = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.registers' ] ); + $registers->name = __( 'Update Registers' ); $registers->namespace = 'nexopos.update.registers'; - $registers->description = __('Let the user update registers'); + $registers->description = __( 'Let the user update registers' ); $registers->save(); - $registers = Permission::firstOrNew([ 'namespace' => 'nexopos.read.registers' ]); - $registers->name = __('Read Registers'); + $registers = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.registers' ] ); + $registers->name = __( 'Read Registers' ); $registers->namespace = 'nexopos.read.registers'; - $registers->description = __('Let the user read registers'); + $registers->description = __( 'Let the user read registers' ); $registers->save(); - $registers = Permission::firstOrNew([ 'namespace' => 'nexopos.read.registers-history' ]); - $registers->name = __('Read Registers History'); + $registers = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.registers-history' ] ); + $registers->name = __( 'Read Registers History' ); $registers->namespace = 'nexopos.read.registers-history'; - $registers->description = __('Let the user read registers history'); + $registers->description = __( 'Let the user read registers history' ); $registers->save(); - $registers = Permission::firstOrNew([ 'namespace' => 'nexopos.use.registers' ]); - $registers->name = __('Read Use Registers'); + $registers = Permission::firstOrNew( [ 'namespace' => 'nexopos.use.registers' ] ); + $registers->name = __( 'Read Use Registers' ); $registers->namespace = 'nexopos.use.registers'; - $registers->description = __('Let the user use registers'); + $registers->description = __( 'Let the user use registers' ); $registers->save(); } diff --git a/database/permissions/reports.php b/database/permissions/reports.php index e09dae3f6..f42b9aa68 100644 --- a/database/permissions/reports.php +++ b/database/permissions/reports.php @@ -2,70 +2,70 @@ use App\Models\Permission; -if (defined('NEXO_CREATE_PERMISSIONS')) { - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.reports.sales' ]); - $permission->name = __('See Sale Report'); +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.reports.sales' ] ); + $permission->name = __( 'See Sale Report' ); $permission->namespace = 'nexopos.reports.sales'; - $permission->description = __('Let you see the sales report'); + $permission->description = __( 'Let you see the sales report' ); $permission->save(); - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.reports.products-report' ]); - $permission->name = __('See Products Report'); + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.reports.products-report' ] ); + $permission->name = __( 'See Products Report' ); $permission->namespace = 'nexopos.reports.products-report'; - $permission->description = __('Let you see the Products report'); + $permission->description = __( 'Let you see the Products report' ); $permission->save(); - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.reports.best_sales' ]); - $permission->name = __('See Best Report'); + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.reports.best_sales' ] ); + $permission->name = __( 'See Best Report' ); $permission->namespace = 'nexopos.reports.best_sales'; - $permission->description = __('Let you see the best_sales report'); + $permission->description = __( 'Let you see the best_sales report' ); $permission->save(); - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.reports.transactions' ]); - $permission->name = __('See Transaction Report'); + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.reports.transactions' ] ); + $permission->name = __( 'See Transaction Report' ); $permission->namespace = 'nexopos.reports.transactions'; - $permission->description = __('Let you see the transactions report'); + $permission->description = __( 'Let you see the transactions report' ); $permission->save(); - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.reports.yearly' ]); - $permission->name = __('See Yearly Sales'); + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.reports.yearly' ] ); + $permission->name = __( 'See Yearly Sales' ); $permission->namespace = 'nexopos.reports.yearly'; - $permission->description = __('Allow to see the yearly sales.'); + $permission->description = __( 'Allow to see the yearly sales.' ); $permission->save(); - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.reports.customers' ]); - $permission->name = __('See Customers'); + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.reports.customers' ] ); + $permission->name = __( 'See Customers' ); $permission->namespace = 'nexopos.reports.customers'; - $permission->description = __('Allow to see the customers'); + $permission->description = __( 'Allow to see the customers' ); $permission->save(); - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.reports.inventory' ]); - $permission->name = __('See Inventory Tracking'); + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.reports.inventory' ] ); + $permission->name = __( 'See Inventory Tracking' ); $permission->namespace = 'nexopos.reports.inventory'; - $permission->description = __('Allow to see the inventory'); + $permission->description = __( 'Allow to see the inventory' ); $permission->save(); - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.reports.customers-statement' ]); - $permission->name = __('See Customers Statement'); + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.reports.customers-statement' ] ); + $permission->name = __( 'See Customers Statement' ); $permission->namespace = 'nexopos.reports.customers-statement'; - $permission->description = __('Allow to see the customers statement.'); + $permission->description = __( 'Allow to see the customers statement.' ); $permission->save(); - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.reports.payment-types' ]); - $permission->name = __('Read Sales by Payment Types'); + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.reports.payment-types' ] ); + $permission->name = __( 'Read Sales by Payment Types' ); $permission->namespace = 'nexopos.reports.payment-types'; - $permission->description = __('Let the user read the report that shows sales by payment types.'); + $permission->description = __( 'Let the user read the report that shows sales by payment types.' ); $permission->save(); - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.reports.low-stock' ]); - $permission->name = __('Read Low Stock Report'); + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.reports.low-stock' ] ); + $permission->name = __( 'Read Low Stock Report' ); $permission->namespace = 'nexopos.reports.low-stock'; - $permission->description = __('Let the user read the report that shows low stock.'); + $permission->description = __( 'Let the user read the report that shows low stock.' ); $permission->save(); - $permission = Permission::firstOrNew([ 'namespace' => 'nexopos.reports.stock-history' ]); - $permission->name = __('Read Stock History'); + $permission = Permission::firstOrNew( [ 'namespace' => 'nexopos.reports.stock-history' ] ); + $permission->name = __( 'Read Stock History' ); $permission->namespace = 'nexopos.reports.stock-history'; - $permission->description = __('Let the user read the stock history report.'); + $permission->description = __( 'Let the user read the stock history report.' ); $permission->save(); } diff --git a/database/permissions/rewards.php b/database/permissions/rewards.php index 23945b6a4..0e03fa05d 100644 --- a/database/permissions/rewards.php +++ b/database/permissions/rewards.php @@ -2,28 +2,28 @@ use App\Models\Permission; -if (defined('NEXO_CREATE_PERMISSIONS')) { - $reward = Permission::firstOrNew([ 'namespace' => 'nexopos.create.rewards' ]); - $reward->name = __('Create Rewards'); +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $reward = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.rewards' ] ); + $reward->name = __( 'Create Rewards' ); $reward->namespace = 'nexopos.create.rewards'; - $reward->description = __('Let the user create Rewards'); + $reward->description = __( 'Let the user create Rewards' ); $reward->save(); - $reward = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.rewards' ]); - $reward->name = __('Delete Rewards'); + $reward = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.rewards' ] ); + $reward->name = __( 'Delete Rewards' ); $reward->namespace = 'nexopos.delete.rewards'; - $reward->description = __('Let the user delete Rewards'); + $reward->description = __( 'Let the user delete Rewards' ); $reward->save(); - $reward = Permission::firstOrNew([ 'namespace' => 'nexopos.update.rewards' ]); - $reward->name = __('Update Rewards'); + $reward = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.rewards' ] ); + $reward->name = __( 'Update Rewards' ); $reward->namespace = 'nexopos.update.rewards'; - $reward->description = __('Let the user update Rewards'); + $reward->description = __( 'Let the user update Rewards' ); $reward->save(); - $reward = Permission::firstOrNew([ 'namespace' => 'nexopos.read.rewards' ]); - $reward->name = __('Read Rewards'); + $reward = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.rewards' ] ); + $reward->name = __( 'Read Rewards' ); $reward->namespace = 'nexopos.read.rewards'; - $reward->description = __('Let the user read Rewards'); + $reward->description = __( 'Let the user read Rewards' ); $reward->save(); } diff --git a/database/permissions/store-admin-role.php b/database/permissions/store-admin-role.php index d65c326e8..14453bbb8 100644 --- a/database/permissions/store-admin-role.php +++ b/database/permissions/store-admin-role.php @@ -3,37 +3,37 @@ use App\Models\Permission; use App\Models\Role; -$storeAdmin = Role::firstOrNew([ 'namespace' => 'nexopos.store.administrator' ]); -$storeAdmin->name = __('Store Administrator'); +$storeAdmin = Role::firstOrNew( [ 'namespace' => 'nexopos.store.administrator' ] ); +$storeAdmin->name = __( 'Store Administrator' ); $storeAdmin->namespace = 'nexopos.store.administrator'; $storeAdmin->locked = true; -$storeAdmin->description = __('Has a control over an entire store of NexoPOS.'); +$storeAdmin->description = __( 'Has a control over an entire store of NexoPOS.' ); $storeAdmin->save(); -$storeAdmin->addPermissions([ 'read.dashboard' ]); -$storeAdmin->addPermissions(Permission::includes('.transactions')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.cash-flow-history')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.transactions-accounts')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.categories')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.customers')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.customers-groups')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.coupons')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.orders')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.procurements')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.providers')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.products')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.products-history')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.products-adjustments')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.products-units')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.profile')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.registers')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.registers-history')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.rewards')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.reports.')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.stores')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.taxes')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.trucks')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.units')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.manage-payments-types')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('.pos')->get()->map(fn($permission) => $permission->namespace)); -$storeAdmin->addPermissions(Permission::includes('-widget')->get()->map(fn($permission) => $permission->namespace)); +$storeAdmin->addPermissions( [ 'read.dashboard' ] ); +$storeAdmin->addPermissions( Permission::includes( '.transactions' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.cash-flow-history' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.transactions-accounts' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.categories' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.customers' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.customers-groups' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.coupons' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.orders' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.procurements' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.providers' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.products' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.products-history' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.products-adjustments' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.products-units' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.profile' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.registers' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.registers-history' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.rewards' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.reports.' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.stores' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.taxes' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.trucks' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.units' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.manage-payments-types' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '.pos' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeAdmin->addPermissions( Permission::includes( '-widget' )->get()->map( fn( $permission ) => $permission->namespace ) ); diff --git a/database/permissions/store-cashier-role.php b/database/permissions/store-cashier-role.php index 4d1cc682b..3c00d07b6 100644 --- a/database/permissions/store-cashier-role.php +++ b/database/permissions/store-cashier-role.php @@ -4,15 +4,15 @@ use App\Models\Role; use App\Widgets\ProfileWidget; -$storeCashier = Role::firstOrNew([ 'namespace' => 'nexopos.store.cashier' ]); -$storeCashier->name = __('Store Cashier'); +$storeCashier = Role::firstOrNew( [ 'namespace' => 'nexopos.store.cashier' ] ); +$storeCashier->name = __( 'Store Cashier' ); $storeCashier->namespace = 'nexopos.store.cashier'; $storeCashier->locked = true; -$storeCashier->description = __('Has a control over the sale process.'); +$storeCashier->description = __( 'Has a control over the sale process.' ); $storeCashier->save(); -$storeCashier->addPermissions([ 'read.dashboard' ]); -$storeCashier->addPermissions(Permission::includes('.profile')->get()->map(fn($permission) => $permission->namespace)); -$storeCashier->addPermissions(Permission::whereIn('namespace', [ +$storeCashier->addPermissions( [ 'read.dashboard' ] ); +$storeCashier->addPermissions( Permission::includes( '.profile' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeCashier->addPermissions( Permission::whereIn( 'namespace', [ 'nexopos.create.orders', 'nexopos.read.orders', 'nexopos.update.orders', @@ -23,9 +23,9 @@ 'nexopos.update.orders-instaments', 'nexopos.read.orders-instaments', 'nexopos.customers.manage-account-history', -])->get()->map(fn($permission) => $permission->namespace)); +] )->get()->map( fn( $permission ) => $permission->namespace ) ); -$storeCashier->addPermissions(Permission::includes('.pos')->get()->map(fn($permission) => $permission->namespace)); -$storeCashier->addPermissions(Permission::whereIn('namespace', [ +$storeCashier->addPermissions( Permission::includes( '.pos' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeCashier->addPermissions( Permission::whereIn( 'namespace', [ ( new ProfileWidget )->getPermission(), -])->get()->map(fn($permission) => $permission->namespace)); +] )->get()->map( fn( $permission ) => $permission->namespace ) ); diff --git a/database/permissions/store-customer-role.php b/database/permissions/store-customer-role.php index 588e131ae..0347c8970 100644 --- a/database/permissions/store-customer-role.php +++ b/database/permissions/store-customer-role.php @@ -4,15 +4,15 @@ use App\Models\Role; use App\Widgets\ProfileWidget; -$storeCustomer = Role::firstOrNew([ 'namespace' => 'nexopos.store.customer' ]); -$storeCustomer->name = __('Store Customer'); +$storeCustomer = Role::firstOrNew( [ 'namespace' => 'nexopos.store.customer' ] ); +$storeCustomer->name = __( 'Store Customer' ); $storeCustomer->namespace = 'nexopos.store.customer'; $storeCustomer->locked = true; -$storeCustomer->description = __('Can purchase orders and manage his profile.'); +$storeCustomer->description = __( 'Can purchase orders and manage his profile.' ); $storeCustomer->save(); -$storeCustomer->addPermissions([ 'read.dashboard' ]); -$storeCustomer->addPermissions(Permission::includes('.profile')->get()->map(fn($permission) => $permission->namespace)); -$storeCustomer->addPermissions(Permission::whereIn('namespace', [ +$storeCustomer->addPermissions( [ 'read.dashboard' ] ); +$storeCustomer->addPermissions( Permission::includes( '.profile' )->get()->map( fn( $permission ) => $permission->namespace ) ); +$storeCustomer->addPermissions( Permission::whereIn( 'namespace', [ ( new ProfileWidget )->getPermission(), -])->get()->map(fn($permission) => $permission->namespace)); +] )->get()->map( fn( $permission ) => $permission->namespace ) ); diff --git a/database/permissions/taxes.php b/database/permissions/taxes.php index 16ee57945..e45c9729b 100644 --- a/database/permissions/taxes.php +++ b/database/permissions/taxes.php @@ -2,28 +2,28 @@ use App\Models\Permission; -if (defined('NEXO_CREATE_PERMISSIONS')) { - $taxes = Permission::firstOrNew([ 'namespace' => 'nexopos.create.taxes' ]); - $taxes->name = __('Create Taxes'); +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $taxes = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.taxes' ] ); + $taxes->name = __( 'Create Taxes' ); $taxes->namespace = 'nexopos.create.taxes'; - $taxes->description = __('Let the user create taxes'); + $taxes->description = __( 'Let the user create taxes' ); $taxes->save(); - $taxes = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.taxes' ]); - $taxes->name = __('Delete Taxes'); + $taxes = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.taxes' ] ); + $taxes->name = __( 'Delete Taxes' ); $taxes->namespace = 'nexopos.delete.taxes'; - $taxes->description = __('Let the user delete taxes'); + $taxes->description = __( 'Let the user delete taxes' ); $taxes->save(); - $taxes = Permission::firstOrNew([ 'namespace' => 'nexopos.update.taxes' ]); - $taxes->name = __('Update Taxes'); + $taxes = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.taxes' ] ); + $taxes->name = __( 'Update Taxes' ); $taxes->namespace = 'nexopos.update.taxes'; - $taxes->description = __('Let the user update taxes'); + $taxes->description = __( 'Let the user update taxes' ); $taxes->save(); - $taxes = Permission::firstOrNew([ 'namespace' => 'nexopos.read.taxes' ]); - $taxes->name = __('Read Taxes'); + $taxes = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.taxes' ] ); + $taxes->name = __( 'Read Taxes' ); $taxes->namespace = 'nexopos.read.taxes'; - $taxes->description = __('Let the user read taxes'); + $taxes->description = __( 'Let the user read taxes' ); $taxes->save(); } diff --git a/database/permissions/transactions-accounts.php b/database/permissions/transactions-accounts.php index 3b2ecb5e6..47a1a584c 100644 --- a/database/permissions/transactions-accounts.php +++ b/database/permissions/transactions-accounts.php @@ -2,28 +2,28 @@ use App\Models\Permission; -if (defined('NEXO_CREATE_PERMISSIONS')) { - $transactionAccount = Permission::firstOrNew([ 'namespace' => 'nexopos.create.transactions-account' ]); - $transactionAccount->name = __('Create Transaction Account'); +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $transactionAccount = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.transactions-account' ] ); + $transactionAccount->name = __( 'Create Transaction Account' ); $transactionAccount->namespace = 'nexopos.create.transactions-account'; - $transactionAccount->description = __('Let the user create transactions account'); + $transactionAccount->description = __( 'Let the user create transactions account' ); $transactionAccount->save(); - $transactionAccount = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.transactions-account' ]); - $transactionAccount->name = __('Delete Transactions Account'); + $transactionAccount = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.transactions-account' ] ); + $transactionAccount->name = __( 'Delete Transactions Account' ); $transactionAccount->namespace = 'nexopos.delete.transactions-account'; - $transactionAccount->description = __('Let the user delete Transaction Account'); + $transactionAccount->description = __( 'Let the user delete Transaction Account' ); $transactionAccount->save(); - $transactionAccount = Permission::firstOrNew([ 'namespace' => 'nexopos.update.transactions-account' ]); - $transactionAccount->name = __('Update Transactions Account'); + $transactionAccount = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.transactions-account' ] ); + $transactionAccount->name = __( 'Update Transactions Account' ); $transactionAccount->namespace = 'nexopos.update.transactions-account'; - $transactionAccount->description = __('Let the user update Transaction Account'); + $transactionAccount->description = __( 'Let the user update Transaction Account' ); $transactionAccount->save(); - $transactionAccount = Permission::firstOrNew([ 'namespace' => 'nexopos.read.transactions-account' ]); - $transactionAccount->name = __('Read Transactions Account'); + $transactionAccount = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.transactions-account' ] ); + $transactionAccount->name = __( 'Read Transactions Account' ); $transactionAccount->namespace = 'nexopos.read.transactions-account'; - $transactionAccount->description = __('Let the user read Transaction Account'); + $transactionAccount->description = __( 'Let the user read Transaction Account' ); $transactionAccount->save(); } diff --git a/database/permissions/transactions.php b/database/permissions/transactions.php index b1bf449bf..00db8621d 100644 --- a/database/permissions/transactions.php +++ b/database/permissions/transactions.php @@ -2,52 +2,52 @@ use App\Models\Permission; -if (defined('NEXO_CREATE_PERMISSIONS')) { - $transaction = Permission::firstOrNew([ 'namespace' => 'nexopos.create.transactions' ]); - $transaction->name = __('Create Transaction'); +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $transaction = Permission::firstOrNew( [ 'namespace' => 'nexopos.create.transactions' ] ); + $transaction->name = __( 'Create Transaction' ); $transaction->namespace = 'nexopos.create.transactions'; - $transaction->description = __('Let the user create transactions'); + $transaction->description = __( 'Let the user create transactions' ); $transaction->save(); - $transaction = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.transactions' ]); - $transaction->name = __('Delete Transaction'); + $transaction = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.transactions' ] ); + $transaction->name = __( 'Delete Transaction' ); $transaction->namespace = 'nexopos.delete.transactions'; - $transaction->description = __('Let the user delete transactions'); + $transaction->description = __( 'Let the user delete transactions' ); $transaction->save(); - $transaction = Permission::firstOrNew([ 'namespace' => 'nexopos.update.transactions' ]); - $transaction->name = __('Update Transaction'); + $transaction = Permission::firstOrNew( [ 'namespace' => 'nexopos.update.transactions' ] ); + $transaction->name = __( 'Update Transaction' ); $transaction->namespace = 'nexopos.update.transactions'; - $transaction->description = __('Let the user update transactions'); + $transaction->description = __( 'Let the user update transactions' ); $transaction->save(); - $transaction = Permission::firstOrNew([ 'namespace' => 'nexopos.read.transactions' ]); - $transaction->name = __('Read Transaction'); + $transaction = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.transactions' ] ); + $transaction->name = __( 'Read Transaction' ); $transaction->namespace = 'nexopos.read.transactions'; - $transaction->description = __('Let the user read transactions'); + $transaction->description = __( 'Let the user read transactions' ); $transaction->save(); - $readCashFlowHistory = Permission::firstOrNew([ 'namespace' => 'nexopos.read.transactions-history' ]); - $readCashFlowHistory->name = __('Read Transactions History'); + $readCashFlowHistory = Permission::firstOrNew( [ 'namespace' => 'nexopos.read.transactions-history' ] ); + $readCashFlowHistory->name = __( 'Read Transactions History' ); $readCashFlowHistory->namespace = 'nexopos.read.transactions-history'; - $readCashFlowHistory->description = __('Give access to the transactions history.'); + $readCashFlowHistory->description = __( 'Give access to the transactions history.' ); $readCashFlowHistory->save(); - $deleteCashFlowHistory = Permission::firstOrNew([ 'namespace' => 'nexopos.delete.transactions-history' ]); - $deleteCashFlowHistory->name = __('Delete Transactions History'); + $deleteCashFlowHistory = Permission::firstOrNew( [ 'namespace' => 'nexopos.delete.transactions-history' ] ); + $deleteCashFlowHistory->name = __( 'Delete Transactions History' ); $deleteCashFlowHistory->namespace = 'nexopos.delete.transactions-history'; - $deleteCashFlowHistory->description = __('Allow to delete an Transactions History.'); + $deleteCashFlowHistory->description = __( 'Allow to delete an Transactions History.' ); $deleteCashFlowHistory->save(); - $readCashFlowHistory = Permission::withNamespaceOrNew('nexopos.update.transactions-history'); - $readCashFlowHistory->name = __('Update Transactions History'); + $readCashFlowHistory = Permission::withNamespaceOrNew( 'nexopos.update.transactions-history' ); + $readCashFlowHistory->name = __( 'Update Transactions History' ); $readCashFlowHistory->namespace = 'nexopos.update.transactions-history'; - $readCashFlowHistory->description = __('Allow to the Transactions History.'); + $readCashFlowHistory->description = __( 'Allow to the Transactions History.' ); $readCashFlowHistory->save(); - $createCashFlowHistory = Permission::withNamespaceOrNew('nexopos.create.transactions-history'); - $createCashFlowHistory->name = __('Create Transactions History'); + $createCashFlowHistory = Permission::withNamespaceOrNew( 'nexopos.create.transactions-history' ); + $createCashFlowHistory->name = __( 'Create Transactions History' ); $createCashFlowHistory->namespace = 'nexopos.create.transactions-history'; - $createCashFlowHistory->description = __('Allow to create a Transactions History.'); + $createCashFlowHistory->description = __( 'Allow to create a Transactions History.' ); $createCashFlowHistory->save(); } diff --git a/database/permissions/user-role.php b/database/permissions/user-role.php index 0c6ff1517..6dba1bd7f 100644 --- a/database/permissions/user-role.php +++ b/database/permissions/user-role.php @@ -4,15 +4,15 @@ use App\Models\Role; use App\Widgets\ProfileWidget; -$user = Role::firstOrNew([ 'namespace' => 'user' ]); -$user->name = __('User'); +$user = Role::firstOrNew( [ 'namespace' => 'user' ] ); +$user->name = __( 'User' ); $user->namespace = 'user'; $user->locked = true; -$user->description = __('Basic user role.'); +$user->description = __( 'Basic user role.' ); $user->save(); -$user->addPermissions([ +$user->addPermissions( [ 'manage.profile', -]); -$user->addPermissions(Permission::whereIn('namespace', [ +] ); +$user->addPermissions( Permission::whereIn( 'namespace', [ ( new ProfileWidget )->getPermission(), -])->get()->map(fn($permission) => $permission->namespace)); +] )->get()->map( fn( $permission ) => $permission->namespace ) ); diff --git a/database/permissions/widgets.php b/database/permissions/widgets.php index 746430c5e..81fd842a8 100644 --- a/database/permissions/widgets.php +++ b/database/permissions/widgets.php @@ -7,22 +7,22 @@ use App\Models\Permission; use App\Services\WidgetService; -$widgetService = app()->make(WidgetService::class); +$widgetService = app()->make( WidgetService::class ); $widgets = $widgetService->getAllWidgets(); -if (defined('NEXO_CREATE_PERMISSIONS')) { - $widgets->each(function ($widget) { +if ( defined( 'NEXO_CREATE_PERMISSIONS' ) ) { + $widgets->each( function ( $widget ) { /** * The permission is created only * if the widget declares some permission. */ - if ($widget->instance->getPermission()) { - $taxes = Permission::firstOrNew([ 'namespace' => $widget->instance->getPermission() ]); - $taxes->name = sprintf(__('Widget: %s'), $widget->instance->getName()); + if ( $widget->instance->getPermission() ) { + $taxes = Permission::firstOrNew( [ 'namespace' => $widget->instance->getPermission() ] ); + $taxes->name = sprintf( __( 'Widget: %s' ), $widget->instance->getName() ); $taxes->namespace = $widget->instance->getPermission(); $taxes->description = $widget->instance->getDescription(); $taxes->save(); } - }); + } ); } diff --git a/database/seeders/CustomerGroupSeeder.php b/database/seeders/CustomerGroupSeeder.php index 5c59fd3bc..dff35a052 100644 --- a/database/seeders/CustomerGroupSeeder.php +++ b/database/seeders/CustomerGroupSeeder.php @@ -15,8 +15,8 @@ class CustomerGroupSeeder extends Seeder public function run() { return CustomerGroup::factory() - ->count(10) - ->hasCustomers(10) + ->count( 10 ) + ->hasCustomers( 10 ) ->create(); } } diff --git a/database/seeders/CustomerSeeder.php b/database/seeders/CustomerSeeder.php index 387227ea3..cb311a9fe 100644 --- a/database/seeders/CustomerSeeder.php +++ b/database/seeders/CustomerSeeder.php @@ -15,9 +15,9 @@ class CustomerSeeder extends Seeder public function run() { return Customer::factory() - ->count(10) - ->hasShipping(1) - ->hasBilling(1) + ->count( 10 ) + ->hasShipping( 1 ) + ->hasBilling( 1 ) ->create(); } } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 1c10d6f87..06c1ac8b7 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -13,10 +13,10 @@ class DatabaseSeeder extends Seeder */ public function run() { - $this->call(RewardSystemSeeder::class); - $this->call(CustomerGroupSeeder::class); - $this->call(UnitGroupSeeder::class); - $this->call(TaxSeeder::class); - $this->call(ProductsSeeder::class); + $this->call( RewardSystemSeeder::class ); + $this->call( CustomerGroupSeeder::class ); + $this->call( UnitGroupSeeder::class ); + $this->call( TaxSeeder::class ); + $this->call( ProductsSeeder::class ); } } diff --git a/database/seeders/DefaultCategorySeeder.php b/database/seeders/DefaultCategorySeeder.php index 251120441..926e988d1 100644 --- a/database/seeders/DefaultCategorySeeder.php +++ b/database/seeders/DefaultCategorySeeder.php @@ -15,9 +15,9 @@ class DefaultCategorySeeder extends Seeder */ public function run() { - return ProductCategory::create([ - 'name' => __('Default Category'), - 'author' => Role::namespace('admin')->users->first()->id, - ]); + return ProductCategory::create( [ + 'name' => __( 'Default Category' ), + 'author' => Role::namespace( 'admin' )->users->first()->id, + ] ); } } diff --git a/database/seeders/DefaultProviderSeeder.php b/database/seeders/DefaultProviderSeeder.php index d17092004..b2b1675dc 100644 --- a/database/seeders/DefaultProviderSeeder.php +++ b/database/seeders/DefaultProviderSeeder.php @@ -15,9 +15,9 @@ class DefaultProviderSeeder extends Seeder */ public function run() { - return Provider::create([ - 'first_name' => __('Default Provider'), - 'author' => Role::namespace(Role::ADMIN)->users->first()->id, - ]); + return Provider::create( [ + 'first_name' => __( 'Default Provider' ), + 'author' => Role::namespace( Role::ADMIN )->users->first()->id, + ] ); } } diff --git a/database/seeders/DefaultSeeder.php b/database/seeders/DefaultSeeder.php index 4fef1747c..828418dbb 100644 --- a/database/seeders/DefaultSeeder.php +++ b/database/seeders/DefaultSeeder.php @@ -13,9 +13,9 @@ class DefaultSeeder extends Seeder */ public function run() { - $this->call(DefaultCategorySeeder::class); - $this->call(DefaultUnitGroupSeeder::class); - $this->call(DefaultProviderSeeder::class); - $this->call(CustomerGroupSeeder::class); + $this->call( DefaultCategorySeeder::class ); + $this->call( DefaultUnitGroupSeeder::class ); + $this->call( DefaultProviderSeeder::class ); + $this->call( CustomerGroupSeeder::class ); } } diff --git a/database/seeders/DefaultUnitGroupSeeder.php b/database/seeders/DefaultUnitGroupSeeder.php index fe7d6cc4f..7559982be 100644 --- a/database/seeders/DefaultUnitGroupSeeder.php +++ b/database/seeders/DefaultUnitGroupSeeder.php @@ -16,18 +16,18 @@ class DefaultUnitGroupSeeder extends Seeder */ public function run() { - $unitGroup = UnitGroup::create([ - 'name' => __('Countable'), - 'author' => Role::namespace('admin')->users->first()->id, - ]); + $unitGroup = UnitGroup::create( [ + 'name' => __( 'Countable' ), + 'author' => Role::namespace( 'admin' )->users->first()->id, + ] ); - $piece = Unit::create([ - 'name' => __('Piece'), + $piece = Unit::create( [ + 'name' => __( 'Piece' ), 'value' => 1, 'identifier' => 'piece', 'base_unit' => true, 'group_id' => $unitGroup->id, - 'author' => Role::namespace('admin')->users->first()->id, - ]); + 'author' => Role::namespace( 'admin' )->users->first()->id, + ] ); } } diff --git a/database/seeders/FirstDemoSeeder.php b/database/seeders/FirstDemoSeeder.php index ff7bf0b23..c7b59dfb2 100644 --- a/database/seeders/FirstDemoSeeder.php +++ b/database/seeders/FirstDemoSeeder.php @@ -13,9 +13,9 @@ class FirstDemoSeeder extends Seeder */ public function run() { - $this->call(RewardSystemSeeder::class); - $this->call(CustomerGroupSeeder::class); - $this->call(TransactionSeeder::class); - $this->call(FirstExampleProviderSeeder::class); + $this->call( RewardSystemSeeder::class ); + $this->call( CustomerGroupSeeder::class ); + $this->call( TransactionSeeder::class ); + $this->call( FirstExampleProviderSeeder::class ); } } diff --git a/database/seeders/FirstExampleProviderSeeder.php b/database/seeders/FirstExampleProviderSeeder.php index 6b65f7b77..59a401933 100644 --- a/database/seeders/FirstExampleProviderSeeder.php +++ b/database/seeders/FirstExampleProviderSeeder.php @@ -15,7 +15,7 @@ class FirstExampleProviderSeeder extends Seeder */ public function run() { - $author = User::get()->map(fn($user) => $user->id) + $author = User::get()->map( fn( $user ) => $user->id ) ->shuffle() ->first(); diff --git a/database/seeders/FirstExampleTaxesSeeder.php b/database/seeders/FirstExampleTaxesSeeder.php index 69710c113..3d45769af 100644 --- a/database/seeders/FirstExampleTaxesSeeder.php +++ b/database/seeders/FirstExampleTaxesSeeder.php @@ -16,7 +16,7 @@ class FirstExampleTaxesSeeder extends Seeder */ public function run() { - $author = $author = User::get()->map(fn($user) => $user->id) + $author = $author = User::get()->map( fn( $user ) => $user->id ) ->shuffle() ->first(); diff --git a/database/seeders/FirstExampleUnitGroupSeeder.php b/database/seeders/FirstExampleUnitGroupSeeder.php index d10e50c39..cfbc9ab7a 100644 --- a/database/seeders/FirstExampleUnitGroupSeeder.php +++ b/database/seeders/FirstExampleUnitGroupSeeder.php @@ -17,7 +17,7 @@ class FirstExampleUnitGroupSeeder extends Seeder */ public function run() { - $author = User::get()->map(fn($user) => $user->id) + $author = User::get()->map( fn( $user ) => $user->id ) ->shuffle() ->first(); @@ -29,7 +29,7 @@ public function run() $unit = new Unit; $unit->group_id = $unitGroup->id; $unit->value = 1; - $unit->identifier = 'Piece-' . Str::random(10); + $unit->identifier = 'Piece-' . Str::random( 10 ); $unit->base_unit = true; $unit->name = 'Piece'; $unit->author = $author; @@ -38,7 +38,7 @@ public function run() $unit = new Unit; $unit->group_id = $unitGroup->id; $unit->value = 10; - $unit->identifier = 'Decade-' . Str::random(10); + $unit->identifier = 'Decade-' . Str::random( 10 ); $unit->base_unit = false; $unit->name = 'Decade'; $unit->author = $author; @@ -47,7 +47,7 @@ public function run() $unit = new Unit; $unit->group_id = $unitGroup->id; $unit->value = 50; - $unit->identifier = 'Fifties-' . Str::random(10); + $unit->identifier = 'Fifties-' . Str::random( 10 ); $unit->base_unit = false; $unit->name = 'Fifties'; $unit->author = $author; @@ -61,7 +61,7 @@ public function run() $unit = new Unit; $unit->group_id = $unitGroup->id; $unit->value = 300; - $unit->identifier = 'Shot-' . Str::random(10); + $unit->identifier = 'Shot-' . Str::random( 10 ); $unit->base_unit = true; $unit->name = 'Shot (200ml)'; $unit->author = $author; @@ -70,7 +70,7 @@ public function run() $unit = new Unit; $unit->group_id = $unitGroup->id; $unit->value = 600; - $unit->identifier = 'Half-' . Str::random(10); + $unit->identifier = 'Half-' . Str::random( 10 ); $unit->base_unit = false; $unit->name = 'Half Bottle (600ml)'; $unit->author = $author; @@ -79,7 +79,7 @@ public function run() $unit = new Unit; $unit->group_id = $unitGroup->id; $unit->value = 1200; - $unit->identifier = 'Bottle-' . Str::random(10); + $unit->identifier = 'Bottle-' . Str::random( 10 ); $unit->base_unit = false; $unit->name = 'Bottle (1200ml)'; $unit->author = $author; @@ -88,7 +88,7 @@ public function run() $unit = new Unit; $unit->group_id = $unitGroup->id; $unit->value = 1200 * 6; - $unit->identifier = '6-' . Str::random(10); + $unit->identifier = '6-' . Str::random( 10 ); $unit->base_unit = false; $unit->name = '6 Bottles Box (1200mlx6)'; $unit->author = $author; diff --git a/database/seeders/ProductsSeeder.php b/database/seeders/ProductsSeeder.php index 75e4365b1..29972e913 100644 --- a/database/seeders/ProductsSeeder.php +++ b/database/seeders/ProductsSeeder.php @@ -18,22 +18,22 @@ class ProductsSeeder extends Seeder public function run() { return ProductCategory::factory() - ->count(2) + ->count( 2 ) ->create() - ->each(function ($category) { + ->each( function ( $category ) { Product::factory() - ->count(3) - ->create([ 'category_id' => $category->id ]) - ->each(function ($product) { - UnitGroup::find($product->unit_group)->units->each(function ($unit) use ($product) { + ->count( 3 ) + ->create( [ 'category_id' => $category->id ] ) + ->each( function ( $product ) { + UnitGroup::find( $product->unit_group )->units->each( function ( $unit ) use ( $product ) { ProductUnitQuantity::factory() - ->count(1) - ->create([ + ->count( 1 ) + ->create( [ 'product_id' => $product->id, 'unit_id' => $unit->id, - ]); - }); - }); - }); + ] ); + } ); + } ); + } ); } } diff --git a/database/seeders/RewardSystemSeeder.php b/database/seeders/RewardSystemSeeder.php index 60c2048ab..53b13dbf2 100644 --- a/database/seeders/RewardSystemSeeder.php +++ b/database/seeders/RewardSystemSeeder.php @@ -15,9 +15,9 @@ class RewardSystemSeeder extends Seeder public function run() { return RewardSystem::factory() - ->count(20) - ->hasRules(4) - ->hasCoupon(1) + ->count( 20 ) + ->hasRules( 4 ) + ->hasCoupon( 1 ) ->create(); } } diff --git a/database/seeders/TaxSeeder.php b/database/seeders/TaxSeeder.php index 297de81e5..316846a6f 100644 --- a/database/seeders/TaxSeeder.php +++ b/database/seeders/TaxSeeder.php @@ -15,8 +15,8 @@ class TaxSeeder extends Seeder public function run() { return TaxGroup::factory() - ->count(5) - ->hasTaxes(2) + ->count( 5 ) + ->hasTaxes( 2 ) ->create(); } } diff --git a/database/seeders/TransactionSeeder.php b/database/seeders/TransactionSeeder.php index 66362c2f2..054206b72 100644 --- a/database/seeders/TransactionSeeder.php +++ b/database/seeders/TransactionSeeder.php @@ -16,7 +16,7 @@ class TransactionSeeder extends Seeder */ public function run() { - $author = User::get()->map(fn($user) => $user->id) + $author = User::get()->map( fn( $user ) => $user->id ) ->shuffle() ->first(); diff --git a/database/seeders/UnitGroupSeeder.php b/database/seeders/UnitGroupSeeder.php index 4e5b2e48e..575eab985 100644 --- a/database/seeders/UnitGroupSeeder.php +++ b/database/seeders/UnitGroupSeeder.php @@ -15,8 +15,8 @@ class UnitGroupSeeder extends Seeder public function run() { return UnitGroup::factory() - ->count(5) - ->hasUnits(8) + ->count( 5 ) + ->hasUnits( 8 ) ->create(); } } diff --git a/lang/ar.json b/lang/ar.json index 5535c64af..e13350ce5 100644 --- a/lang/ar.json +++ b/lang/ar.json @@ -1 +1,2696 @@ -{"OK":"\u0646\u0639\u0645","Howdy, {name}":"\u0645\u0631\u062d\u0628\u064b\u0627 \u060c {name}","This field is required.":"\u0647\u0630\u0647 \u0627\u0644\u062e\u0627\u0646\u0629 \u0645\u0637\u0644\u0648\u0628\u0647.","This field must contain a valid email address.":"\u064a\u062c\u0628 \u0623\u0646 \u064a\u062d\u062a\u0648\u064a \u0647\u0630\u0627 \u0627\u0644\u062d\u0642\u0644 \u0639\u0644\u0649 \u0639\u0646\u0648\u0627\u0646 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0635\u0627\u0644\u062d.","Go Back":"\u0639\u062f","Filters":"\u0627\u0644\u0645\u0631\u0634\u062d\u0627\u062a","Has Filters":"\u0644\u062f\u064a\u0647\u0627 \u0641\u0644\u0627\u062a\u0631","{entries} entries selected":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062f {\u0625\u062f\u062e\u0627\u0644\u0627\u062a} \u0645\u0646 \u0627\u0644\u0625\u062f\u062e\u0627\u0644\u0627\u062a","Download":"\u062a\u062d\u0645\u064a\u0644","There is nothing to display...":"\u0644\u0627 \u064a\u0648\u062c\u062f \u0634\u064a\u0621 \u0644\u0639\u0631\u0636\u0647 ...","Bulk Actions":"\u0625\u062c\u0631\u0627\u0621\u0627\u062a \u062c\u0645\u0644\u0629","displaying {perPage} on {items} items":"\u0639\u0631\u0636 {perPage} \u0639\u0644\u0649 {items} \u0639\u0646\u0635\u0631","The document has been generated.":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0633\u062a\u0646\u062f.","Unexpected error occurred.":"\u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639.","Clear Selected Entries ?":"\u0645\u0633\u062d \u0627\u0644\u0625\u062f\u062e\u0627\u0644\u0627\u062a \u0627\u0644\u0645\u062d\u062f\u062f\u0629\u061f","Would you like to clear all selected entries ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0645\u0633\u062d \u0643\u0627\u0641\u0629 \u0627\u0644\u0625\u062f\u062e\u0627\u0644\u0627\u062a \u0627\u0644\u0645\u062e\u062a\u0627\u0631\u0629\u061f","Would you like to perform the selected bulk action on the selected entries ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u0646\u0641\u064a\u0630 \u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u0645\u062c\u0645\u0639 \u0627\u0644\u0645\u062d\u062f\u062f \u0639\u0644\u0649 \u0627\u0644\u0625\u062f\u062e\u0627\u0644\u0627\u062a \u0627\u0644\u0645\u062d\u062f\u062f\u0629\u061f","No selection has been made.":"\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0627\u062e\u062a\u064a\u0627\u0631","No action has been selected.":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u062d\u062f\u064a\u062f \u0623\u064a \u0625\u062c\u0631\u0627\u0621.","N\/D":"\u0627\u062e\u062a\u0635\u0627\u0631 \u0627\u0644\u062b\u0627\u0646\u064a","Range Starts":"\u064a\u0628\u062f\u0623 \u0627\u0644\u0646\u0637\u0627\u0642","Range Ends":"\u064a\u0646\u062a\u0647\u064a \u0627\u0644\u0646\u0637\u0627\u0642","Sun":"\u0627\u0644\u0634\u0645\u0633","Mon":"\u0627\u0644\u0625\u062b\u0646\u064a\u0646","Tue":"\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621","Wed":"\u062a\u0632\u0648\u062c","Fri":"\u0627\u0644\u062c\u0645\u0639\u0629","Sat":"\u062c\u0644\u0633","Date":"\u062a\u0627\u0631\u064a\u062e","N\/A":"\u063a\u064a\u0631 \u0645\u062a\u0627\u062d","Nothing to display":"\u0644\u0627 \u0634\u064a\u0621 \u0644\u0639\u0631\u0636\u0647","Unknown Status":"\u062d\u0627\u0644\u0629 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641\u0629","Password Forgotten ?":"\u0647\u0644 \u0646\u0633\u064a\u062a \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631\u061f","Sign In":"\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644","Register":"\u064a\u0633\u062c\u0644","An unexpected error occurred.":"\u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639.","Unable to proceed the form is not valid.":"\u062a\u0639\u0630\u0631 \u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","Save Password":"\u062d\u0641\u0638 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631","Remember Your Password ?":"\u062a\u0630\u0643\u0631 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643\u061f","Submit":"\u064a\u0642\u062f\u0645","Already registered ?":"\u0645\u0633\u062c\u0644 \u0628\u0627\u0644\u0641\u0639\u0644\u061f","Best Cashiers":"\u0623\u0641\u0636\u0644 \u0627\u0644\u0635\u0631\u0627\u0641\u064a\u0646","No result to display.":"\u0644\u0627 \u062a\u0648\u062c\u062f \u0646\u062a\u064a\u062c\u0629 \u0644\u0639\u0631\u0636\u0647\u0627.","Well.. nothing to show for the meantime.":"\u062d\u0633\u0646\u064b\u0627 .. \u0644\u0627 \u0634\u064a\u0621 \u0644\u0625\u0638\u0647\u0627\u0631\u0647 \u0641\u064a \u0647\u0630\u0647 \u0627\u0644\u0623\u062b\u0646\u0627\u0621.","Best Customers":"\u0623\u0641\u0636\u0644 \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Well.. nothing to show for the meantime":"\u062d\u0633\u0646\u064b\u0627 .. \u0644\u0627 \u0634\u064a\u0621 \u0644\u0625\u0638\u0647\u0627\u0631\u0647 \u0641\u064a \u0647\u0630\u0647 \u0627\u0644\u0623\u062b\u0646\u0627\u0621","Total Sales":"\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a","Today":"\u0627\u0644\u064a\u0648\u0645","Total Refunds":"\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0645\u0628\u0627\u0644\u063a \u0627\u0644\u0645\u0633\u062a\u0631\u062f\u0629","Clients Registered":"\u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u0645\u0633\u062c\u0644\u064a\u0646","Commissions":"\u0627\u0644\u0644\u062c\u0627\u0646","Total":"\u0627\u0644\u0645\u062c\u0645\u0648\u0639","Discount":"\u062e\u0635\u0645","Status":"\u062d\u0627\u0644\u0629","Paid":"\u0645\u062f\u0641\u0648\u0639","Partially Paid":"\u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629 \u062c\u0632\u0626\u064a\u0627","Unpaid":"\u063a\u064a\u0631 \u0645\u062f\u0641\u0648\u0639\u0629","Hold":"\u0645\u0639\u0644\u0642","Void":"\u0641\u0627\u0631\u063a","Refunded":"\u0645\u0639\u0627\u062f","Partially Refunded":"\u0627\u0644\u0645\u0631\u062f\u0648\u062f\u0629 \u062c\u0632\u0626\u064a\u0627","Incomplete Orders":"\u0623\u0648\u0627\u0645\u0631 \u063a\u064a\u0631 \u0645\u0643\u062a\u0645\u0644\u0629","Expenses":"\u0646\u0641\u0642\u0627\u062a","Weekly Sales":"\u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u0627\u0644\u0623\u0633\u0628\u0648\u0639\u064a\u0629","Week Taxes":"\u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u0623\u0633\u0628\u0648\u0639","Net Income":"\u0635\u0627\u0641\u064a \u0627\u0644\u062f\u062e\u0644","Week Expenses":"\u0645\u0635\u0627\u0631\u064a\u0641 \u0627\u0644\u0623\u0633\u0628\u0648\u0639","Current Week":"\u0627\u0644\u0623\u0633\u0628\u0648\u0639 \u0627\u0644\u062d\u0627\u0644\u064a","Previous Week":"\u0627\u0644\u0623\u0633\u0628\u0648\u0639 \u0627\u0644\u0633\u0627\u0628\u0642","Order":"\u062a\u0631\u062a\u064a\u0628","Refresh":"\u064a\u0646\u0639\u0634","Upload":"\u062a\u062d\u0645\u064a\u0644","Enabled":"\u0645\u0645\u0643\u0646","Disabled":"\u0645\u0639\u0627\u0642","Enable":"\u0645\u0645\u0643\u0646","Disable":"\u0625\u0628\u0637\u0627\u0644","Gallery":"\u0635\u0627\u0644\u0629 \u0639\u0631\u0636","Medias Manager":"\u0645\u062f\u064a\u0631 \u0627\u0644\u0648\u0633\u0627\u0626\u0637","Click Here Or Drop Your File To Upload":"\u0627\u0646\u0642\u0631 \u0647\u0646\u0627 \u0623\u0648 \u0623\u0633\u0642\u0637 \u0645\u0644\u0641\u0643 \u0644\u0644\u062a\u062d\u0645\u064a\u0644","Nothing has already been uploaded":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u062d\u0645\u064a\u0644 \u0623\u064a \u0634\u064a\u0621 \u0628\u0627\u0644\u0641\u0639\u0644","File Name":"\u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641","Uploaded At":"\u062a\u0645 \u0627\u0644\u0631\u0641\u0639 \u0641\u064a","By":"\u0628\u0648\u0627\u0633\u0637\u0629","Previous":"\u0633\u0627\u0628\u0642","Next":"\u0627\u0644\u062a\u0627\u0644\u064a","Use Selected":"\u0627\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u062d\u062f\u062f","Clear All":"\u0627\u0645\u0633\u062d \u0627\u0644\u0643\u0644","Confirm Your Action":"\u0642\u0645 \u0628\u062a\u0623\u0643\u064a\u062f \u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643","Would you like to clear all the notifications ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0645\u0633\u062d \u062c\u0645\u064a\u0639 \u0627\u0644\u0625\u062e\u0637\u0627\u0631\u0627\u062a\u061f","Permissions":"\u0623\u0630\u0648\u0646\u0627\u062a","Payment Summary":"\u0645\u0644\u062e\u0635 \u0627\u0644\u062f\u0641\u0639","Sub Total":"\u0627\u0644\u0645\u062c\u0645\u0648\u0639 \u0627\u0644\u0641\u0631\u0639\u064a","Shipping":"\u0634\u062d\u0646","Coupons":"\u0643\u0648\u0628\u0648\u0646\u0627\u062a","Taxes":"\u0627\u0644\u0636\u0631\u0627\u0626\u0628","Change":"\u064a\u062a\u063a\u064a\u0631\u0648\u0646","Order Status":"\u062d\u0627\u0644\u0629 \u0627\u0644\u0637\u0644\u0628","Customer":"\u0639\u0645\u064a\u0644","Type":"\u0646\u0648\u0639","Delivery Status":"\u062d\u0627\u0644\u0629 \u0627\u0644\u062a\u0648\u0635\u064a\u0644","Save":"\u064a\u062d\u0641\u0638","Processing Status":"\u062d\u0627\u0644\u0629 \u0627\u0644\u0645\u0639\u0627\u0644\u062c\u0629","Payment Status":"\u062d\u0627\u0644\u0629 \u0627\u0644\u0633\u062f\u0627\u062f","Products":"\u0645\u0646\u062a\u062c\u0627\u062a","Refunded Products":"\u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0639\u0627\u062f\u0629","Would you proceed ?":"\u0647\u0644 \u0633\u062a\u0645\u0636\u064a \u0642\u062f\u0645\u0627\u061f","The processing status of the order will be changed. Please confirm your action.":"\u0633\u064a\u062a\u0645 \u062a\u063a\u064a\u064a\u0631 \u062d\u0627\u0644\u0629 \u0645\u0639\u0627\u0644\u062c\u0629 \u0627\u0644\u0637\u0644\u0628. \u064a\u0631\u062c\u0649 \u062a\u0623\u0643\u064a\u062f \u0639\u0645\u0644\u0643.","The delivery status of the order will be changed. Please confirm your action.":"\u0633\u064a\u062a\u0645 \u062a\u063a\u064a\u064a\u0631 \u062d\u0627\u0644\u0629 \u062a\u0633\u0644\u064a\u0645 \u0627\u0644\u0637\u0644\u0628. \u064a\u0631\u062c\u0649 \u062a\u0623\u0643\u064a\u062f \u0639\u0645\u0644\u0643.","Instalments":"\u0623\u0642\u0633\u0627\u0637","Create":"\u0625\u0646\u0634\u0627\u0621","Add Instalment":"\u0623\u0636\u0641 \u062a\u0642\u0633\u064a\u0637","Would you like to create this instalment ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0625\u0646\u0634\u0627\u0621 \u0647\u0630\u0627 \u0627\u0644\u0642\u0633\u0637\u061f","An unexpected error has occurred":"\u0644\u0642\u062f \u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639","Would you like to delete this instalment ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0642\u0633\u0637\u061f","Would you like to update that instalment ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u062d\u062f\u064a\u062b \u0647\u0630\u0627 \u0627\u0644\u0642\u0633\u0637\u061f","Print":"\u0645\u0637\u0628\u0639\u0629","Store Details":"\u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0645\u062a\u062c\u0631","Order Code":"\u0631\u0645\u0632 \u0627\u0644\u0637\u0644\u0628","Cashier":"\u0623\u0645\u064a\u0646 \u0627\u0644\u0635\u0646\u062f\u0648\u0642","Billing Details":"\u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629","Shipping Details":"\u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0634\u062d\u0646","Product":"\u0627\u0644\u0645\u0646\u062a\u062c","Unit Price":"\u0633\u0639\u0631 \u0627\u0644\u0648\u062d\u062f\u0629","Quantity":"\u0643\u0645\u064a\u0629","Tax":"\u0636\u0631\u064a\u0628\u0629","Total Price":"\u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0643\u0644\u064a","Expiration Date":"\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0625\u0646\u062a\u0647\u0627\u0621","Due":"\u0628\u0633\u0628\u0628","Customer Account":"\u062d\u0633\u0627\u0628 \u0627\u0644\u0632\u0628\u0648\u0646","Payment":"\u0642\u0633\u0637","No payment possible for paid order.":"\u0644\u0627 \u064a\u0648\u062c\u062f \u062f\u0641\u0639 \u0645\u0645\u0643\u0646 \u0644\u0644\u0637\u0644\u0628 \u0627\u0644\u0645\u062f\u0641\u0648\u0639.","Payment History":"\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u062f\u0641\u0639","Unable to proceed the form is not valid":"\u062a\u0639\u0630\u0631 \u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u063a\u064a\u0631 \u0635\u0627\u0644\u062d","Please provide a valid value":"\u0627\u0644\u0631\u062c\u0627\u0621 \u0625\u062f\u062e\u0627\u0644 \u0642\u064a\u0645\u0629 \u0635\u0627\u0644\u062d\u0629","Refund With Products":"\u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0645\u0639 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a","Refund Shipping":"\u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u0634\u062d\u0646","Add Product":"\u0623\u0636\u0641 \u0645\u0646\u062a\u062c","Damaged":"\u062a\u0627\u0644\u0641","Unspoiled":"\u063a\u064a\u0631 \u0645\u0644\u0648\u062b","Summary":"\u0645\u0644\u062e\u0635","Payment Gateway":"\u0628\u0648\u0627\u0628\u0629 \u0627\u0644\u062f\u0641\u0639","Screen":"\u0634\u0627\u0634\u0629","Select the product to perform a refund.":"\u062d\u062f\u062f \u0627\u0644\u0645\u0646\u062a\u062c \u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0633\u062a\u0631\u062f\u0627\u062f.","Please select a payment gateway before proceeding.":"\u0627\u0644\u0631\u062c\u0627\u0621 \u062a\u062d\u062f\u064a\u062f \u0628\u0648\u0627\u0628\u0629 \u0627\u0644\u062f\u0641\u0639 \u0642\u0628\u0644 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629.","There is nothing to refund.":"\u0644\u0627 \u064a\u0648\u062c\u062f \u0634\u064a\u0621 \u0644\u0627\u0633\u062a\u0631\u062f\u0627\u062f\u0647.","Please provide a valid payment amount.":"\u0627\u0644\u0631\u062c\u0627\u0621 \u062a\u0642\u062f\u064a\u0645 \u0645\u0628\u0644\u063a \u062f\u0641\u0639 \u0635\u0627\u0644\u062d.","The refund will be made on the current order.":"\u0633\u064a\u062a\u0645 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u0645\u0628\u0644\u063a \u0641\u064a \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u062d\u0627\u0644\u064a.","Please select a product before proceeding.":"\u0627\u0644\u0631\u062c\u0627\u0621 \u062a\u062d\u062f\u064a\u062f \u0645\u0646\u062a\u062c \u0642\u0628\u0644 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629.","Not enough quantity to proceed.":"\u0644\u0627 \u062a\u0648\u062c\u062f \u0643\u0645\u064a\u0629 \u0643\u0627\u0641\u064a\u0629 \u0644\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627.","Would you like to delete this product ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062a\u062c\u061f","Customers":"\u0639\u0645\u0644\u0627\u0621","Dashboard":"\u0644\u0648\u062d\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629","Order Type":"\u0646\u0648\u0639 \u0627\u0644\u0637\u0644\u0628","Orders":"\u0627\u0644\u0637\u0644\u0628 #%s","Cash Register":"\u0645\u0627\u0643\u064a\u0646\u0629 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0627\u062a \u0627\u0644\u0646\u0642\u062f\u064a\u0629","Reset":"\u0625\u0639\u0627\u062f\u0629 \u0636\u0628\u0637","Cart":"\u0639\u0631\u0628\u0629 \u0627\u0644\u062a\u0633\u0648\u0642","Comments":"\u062a\u0639\u0644\u064a\u0642\u0627\u062a","Settings":"\u0625\u0639\u062f\u0627\u062f\u0627\u062a","No products added...":"\u0644\u0627 \u062a\u0648\u062c\u062f \u0645\u0646\u062a\u062c\u0627\u062a \u0645\u0636\u0627\u0641\u0629 ...","Price":"\u0633\u0639\u0631","Flat":"\u0645\u0633\u0637\u062d\u0629","Pay":"\u064a\u062f\u0641\u0639","The product price has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0633\u0639\u0631 \u0627\u0644\u0645\u0646\u062a\u062c.","The editable price feature is disabled.":"\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0645\u064a\u0632\u0629 \u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0642\u0627\u0628\u0644 \u0644\u0644\u062a\u0639\u062f\u064a\u0644.","Current Balance":"\u0627\u0644\u0631\u0635\u064a\u062f \u0627\u0644\u062d\u0627\u0644\u064a","Full Payment":"\u062f\u0641\u0639 \u0643\u0627\u0645\u0644","The customer account can only be used once per order. Consider deleting the previously used payment.":"\u064a\u0645\u0643\u0646 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644 \u0645\u0631\u0629 \u0648\u0627\u062d\u062f\u0629 \u0641\u0642\u0637 \u0644\u0643\u0644 \u0637\u0644\u0628. \u0636\u0639 \u0641\u064a \u0627\u0639\u062a\u0628\u0627\u0631\u0643 \u062d\u0630\u0641 \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0645\u0633\u0628\u0642\u064b\u0627.","Not enough funds to add {amount} as a payment. Available balance {balance}.":"\u0644\u0627 \u062a\u0648\u062c\u062f \u0623\u0645\u0648\u0627\u0644 \u0643\u0627\u0641\u064a\u0629 \u0644\u0625\u0636\u0627\u0641\u0629 {amount} \u0643\u062f\u0641\u0639\u0629. \u0627\u0644\u0631\u0635\u064a\u062f \u0627\u0644\u0645\u062a\u0627\u062d {\u0627\u0644\u0631\u0635\u064a\u062f}.","Confirm Full Payment":"\u062a\u0623\u0643\u064a\u062f \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0643\u0627\u0645\u0644","A full payment will be made using {paymentType} for {total}":"\u0633\u064a\u062a\u0645 \u0625\u062c\u0631\u0627\u0621 \u062f\u0641\u0639\u0629 \u0643\u0627\u0645\u0644\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 {paymentType} \u0628\u0645\u0628\u0644\u063a {total}","You need to provide some products before proceeding.":"\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u062a\u0642\u062f\u064a\u0645 \u0628\u0639\u0636 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0642\u0628\u0644 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629.","Unable to add the product, there is not enough stock. Remaining %s":"\u062a\u0639\u0630\u0631 \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0645\u0646\u062a\u062c \u060c \u0644\u0627 \u064a\u0648\u062c\u062f \u0645\u062e\u0632\u0648\u0646 \u0643\u0627\u0641\u064d. \u0627\u0644\u0645\u062a\u0628\u0642\u064a\u0629%s","Add Images":"\u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0635\u0648\u0631","New Group":"\u0645\u062c\u0645\u0648\u0639\u0629 \u062c\u062f\u064a\u062f\u0629","Available Quantity":"\u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0645\u062a\u0648\u0641\u0631\u0629","Delete":"\u062d\u0630\u0641","Would you like to delete this group ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0647\u0630\u0647 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629\u061f","Your Attention Is Required":"\u0627\u0646\u062a\u0628\u0627\u0647\u0643 \u0645\u0637\u0644\u0648\u0628","Please select at least one unit group before you proceed.":"\u064a\u0631\u062c\u0649 \u062a\u062d\u062f\u064a\u062f \u0645\u062c\u0645\u0648\u0639\u0629 \u0648\u062d\u062f\u0629 \u0648\u0627\u062d\u062f\u0629 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0642\u0628\u0644 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629.","Unable to proceed as one of the unit group field is invalid":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0644\u0623\u0646 \u0623\u062d\u062f \u062d\u0642\u0648\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0629 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d","Would you like to delete this variation ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0627\u062e\u062a\u0644\u0627\u0641\u061f","Details":"\u062a\u0641\u0627\u0635\u064a\u0644","Unable to proceed, no product were provided.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0644\u0645 \u064a\u062a\u0645 \u062a\u0642\u062f\u064a\u0645 \u0623\u064a \u0645\u0646\u062a\u062c.","Unable to proceed, one or more product has incorrect values.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0645\u0646\u062a\u062c \u0648\u0627\u062d\u062f \u0623\u0648 \u0623\u0643\u062b\u0631 \u0628\u0647 \u0642\u064a\u0645 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d\u0629.","Unable to proceed, the procurement form is not valid.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0646\u0645\u0648\u0630\u062c \u0627\u0644\u0634\u0631\u0627\u0621 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","Unable to submit, no valid submit URL were provided.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0625\u0631\u0633\u0627\u0644 \u060c \u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0639\u0646\u0648\u0627\u0646 URL \u0635\u0627\u0644\u062d \u0644\u0644\u0625\u0631\u0633\u0627\u0644.","No title is provided":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0639\u0646\u0648\u0627\u0646","SKU":"SKU","Barcode":"\u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a","Options":"\u062e\u064a\u0627\u0631\u0627\u062a","The product already exists on the table.":"\u0627\u0644\u0645\u0646\u062a\u062c \u0645\u0648\u062c\u0648\u062f \u0628\u0627\u0644\u0641\u0639\u0644 \u0639\u0644\u0649 \u0627\u0644\u0637\u0627\u0648\u0644\u0629.","The specified quantity exceed the available quantity.":"\u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0645\u062d\u062f\u062f\u0629 \u062a\u062a\u062c\u0627\u0648\u0632 \u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0645\u062a\u0627\u062d\u0629.","Unable to proceed as the table is empty.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0644\u0623\u0646 \u0627\u0644\u062c\u062f\u0648\u0644 \u0641\u0627\u0631\u063a.","The stock adjustment is about to be made. Would you like to confirm ?":"\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0639\u0644\u0649 \u0648\u0634\u0643 \u0623\u0646 \u064a\u062a\u0645. \u0647\u0644 \u062a\u0648\u062f \u0627\u0644\u062a\u0623\u0643\u064a\u062f\u061f","More Details":"\u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644","Useful to describe better what are the reasons that leaded to this adjustment.":"\u0645\u0641\u064a\u062f \u0644\u0648\u0635\u0641 \u0623\u0641\u0636\u0644 \u0645\u0627 \u0647\u064a \u0627\u0644\u0623\u0633\u0628\u0627\u0628 \u0627\u0644\u062a\u064a \u0623\u062f\u062a \u0625\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062a\u0639\u062f\u064a\u0644.","The reason has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0633\u0628\u0628.","Would you like to remove this product from the table ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0625\u0632\u0627\u0644\u0629 \u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062a\u062c \u0645\u0646 \u0627\u0644\u062c\u062f\u0648\u0644\u061f","Search":"\u0628\u062d\u062b","Unit":"\u0648\u062d\u062f\u0629","Operation":"\u0639\u0645\u0644\u064a\u0629","Procurement":"\u062a\u062d\u0635\u064a\u0644","Value":"\u0642\u064a\u0645\u0629","Search and add some products":"\u0628\u062d\u062b \u0648\u0625\u0636\u0627\u0641\u0629 \u0628\u0639\u0636 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a","Proceed":"\u062a\u0642\u062f\u0645","Unable to proceed. Select a correct time range.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627. \u062d\u062f\u062f \u0627\u0644\u0646\u0637\u0627\u0642 \u0627\u0644\u0632\u0645\u0646\u064a \u0627\u0644\u0635\u062d\u064a\u062d.","Unable to proceed. The current time range is not valid.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627. \u0627\u0644\u0646\u0637\u0627\u0642 \u0627\u0644\u0632\u0645\u0646\u064a \u0627\u0644\u062d\u0627\u0644\u064a \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","Would you like to proceed ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627 \u061f","An unexpected error has occurred.":"\u0644\u0642\u062f \u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639.","No rules has been provided.":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0623\u064a \u0642\u0648\u0627\u0639\u062f.","No valid run were provided.":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u062a\u0634\u063a\u064a\u0644 \u0635\u0627\u0644\u062d.","Unable to proceed, the form is invalid.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","Unable to proceed, no valid submit URL is defined.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0644\u0645 \u064a\u062a\u0645 \u062a\u062d\u062f\u064a\u062f \u0639\u0646\u0648\u0627\u0646 URL \u0635\u0627\u0644\u062d \u0644\u0644\u0625\u0631\u0633\u0627\u0644.","No title Provided":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0639\u0646\u0648\u0627\u0646","General":"\u0639\u0627\u0645","Add Rule":"\u0623\u0636\u0641 \u0627\u0644\u0642\u0627\u0639\u062f\u0629","Save Settings":"\u0627\u062d\u0641\u0638 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a","An unexpected error occurred":"\u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639","Ok":"\u0646\u0639\u0645","New Transaction":"\u0645\u0639\u0627\u0645\u0644\u0629 \u062c\u062f\u064a\u062f\u0629","Close":"\u0642\u0631\u064a\u0628","Search Filters":"\u0645\u0631\u0634\u062d\u0627\u062a \u0627\u0644\u0628\u062d\u062b","Clear Filters":"\u0645\u0633\u062d \u0639\u0648\u0627\u0645\u0644 \u0627\u0644\u062a\u0635\u0641\u064a\u0629","Use Filters":"\u0627\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0631\u0634\u062d\u0627\u062a","Would you like to delete this order":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628","The current order will be void. This action will be recorded. Consider providing a reason for this operation":"\u0633\u064a\u0643\u0648\u0646 \u0627\u0644\u062a\u0631\u062a\u064a\u0628 \u0627\u0644\u062d\u0627\u0644\u064a \u0628\u0627\u0637\u0644\u0627\u064b. \u0633\u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0647\u0630\u0627 \u0627\u0644\u0625\u062c\u0631\u0627\u0621. \u0636\u0639 \u0641\u064a \u0627\u0639\u062a\u0628\u0627\u0631\u0643 \u062a\u0642\u062f\u064a\u0645 \u0633\u0628\u0628 \u0644\u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064a\u0629","Order Options":"\u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u0637\u0644\u0628","Payments":"\u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0627\u062a","Refund & Return":"\u0627\u0644\u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0648\u0627\u0644\u0625\u0631\u062c\u0627\u0639","Installments":"\u0623\u0642\u0633\u0627\u0637","Order Refunds":"\u0637\u0644\u0628 \u0627\u0644\u0645\u0628\u0627\u0644\u063a \u0627\u0644\u0645\u0633\u062a\u0631\u062f\u0629","Condition":"\u0634\u0631\u0637","The form is not valid.":"\u0627\u0644\u0646\u0645\u0648\u0630\u062c \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","Balance":"\u0627\u0644\u0631\u0635\u064a\u062f","Input":"\u0645\u062f\u062e\u0644","Register History":"\u0633\u062c\u0644 \u0627\u0644\u062a\u0627\u0631\u064a\u062e","Close Register":"\u0625\u063a\u0644\u0627\u0642 \u0627\u0644\u062a\u0633\u062c\u064a\u0644","Cash In":"\u0627\u0644\u062a\u062f\u0641\u0642\u0627\u062a \u0627\u0644\u0646\u0642\u062f\u064a\u0629 \u0627\u0644\u062f\u0627\u062e\u0644\u0629","Cash Out":"\u0627\u0644\u0645\u0635\u0631\u0648\u0641\u0627\u062a","Register Options":"\u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u062a\u0633\u062c\u064a\u0644","Sales":"\u0645\u0628\u064a\u0639\u0627\u062a","History":"\u062a\u0627\u0631\u064a\u062e","Unable to open this register. Only closed register can be opened.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0641\u062a\u062d \u0647\u0630\u0627 \u0627\u0644\u0633\u062c\u0644. \u064a\u0645\u0643\u0646 \u0641\u062a\u062d \u0627\u0644\u0633\u062c\u0644 \u0627\u0644\u0645\u063a\u0644\u0642 \u0641\u0642\u0637.","Open The Register":"\u0627\u0641\u062a\u062d \u0627\u0644\u0633\u062c\u0644","Exit To Orders":"\u0627\u0644\u062e\u0631\u0648\u062c \u0645\u0646 \u0627\u0644\u0623\u0648\u0627\u0645\u0631","Looks like there is no registers. At least one register is required to proceed.":"\u064a\u0628\u062f\u0648 \u0623\u0646\u0647 \u0644\u0627 \u062a\u0648\u062c\u062f \u0633\u062c\u0644\u0627\u062a. \u0645\u0637\u0644\u0648\u0628 \u0633\u062c\u0644 \u0648\u0627\u062d\u062f \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0644\u0644\u0645\u062a\u0627\u0628\u0639\u0629.","Create Cash Register":"\u0625\u0646\u0634\u0627\u0621 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u0646\u0642\u062f\u064a\u0629","Yes":"\u0646\u0639\u0645","No":"\u0644\u0627","Load Coupon":"\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0642\u0633\u064a\u0645\u0629","Apply A Coupon":"\u062a\u0637\u0628\u064a\u0642 \u0642\u0633\u064a\u0645\u0629","Load":"\u062d\u0645\u0644","Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.":"\u0623\u062f\u062e\u0644 \u0631\u0645\u0632 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0630\u064a \u064a\u062c\u0628 \u0623\u0646 \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639. \u0625\u0630\u0627 \u062a\u0645 \u0625\u0635\u062f\u0627\u0631 \u0642\u0633\u064a\u0645\u0629 \u0644\u0623\u062d\u062f \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u060c \u0641\u064a\u062c\u0628 \u062a\u062d\u062f\u064a\u062f \u0647\u0630\u0627 \u0627\u0644\u0639\u0645\u064a\u0644 \u0645\u0633\u0628\u0642\u064b\u0627.","Click here to choose a customer.":"\u0627\u0646\u0642\u0631 \u0647\u0646\u0627 \u0644\u0627\u062e\u062a\u064a\u0627\u0631 \u0639\u0645\u064a\u0644.","Coupon Name":"\u0627\u0633\u0645 \u0627\u0644\u0642\u0633\u064a\u0645\u0629","Usage":"\u0625\u0633\u062a\u0639\u0645\u0627\u0644","Unlimited":"\u063a\u064a\u0631 \u0645\u062d\u062f\u0648\u062f","Valid From":"\u0635\u0627\u0644\u062d \u0645\u0646 \u062a\u0627\u0631\u064a\u062e","Valid Till":"\u0635\u0627\u0644\u062d \u062d\u062a\u0649","Categories":"\u0641\u0626\u0627\u062a","Active Coupons":"\u0627\u0644\u0642\u0633\u0627\u0626\u0645 \u0627\u0644\u0646\u0634\u0637\u0629","Apply":"\u062a\u0637\u0628\u064a\u0642","Cancel":"\u064a\u0644\u063a\u064a","Coupon Code":"\u0631\u0645\u0632 \u0627\u0644\u0643\u0648\u0628\u0648\u0646","The coupon is out from validity date range.":"\u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u062e\u0627\u0631\u062c \u0646\u0637\u0627\u0642 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0635\u0644\u0627\u062d\u064a\u0629.","The coupon has applied to the cart.":"\u062a\u0645 \u062a\u0637\u0628\u064a\u0642 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0639\u0644\u0649 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642.","Percentage":"\u0627\u0644\u0646\u0633\u0628\u0629 \u0627\u0644\u0645\u0626\u0648\u064a\u0629","Unknown Type":"\u0646\u0648\u0639 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641","You must select a customer before applying a coupon.":"\u064a\u062c\u0628 \u0639\u0644\u064a\u0643 \u062a\u062d\u062f\u064a\u062f \u0639\u0645\u064a\u0644 \u0642\u0628\u0644 \u062a\u0637\u0628\u064a\u0642 \u0627\u0644\u0642\u0633\u064a\u0645\u0629.","The coupon has been loaded.":"\u062a\u0645 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0642\u0633\u064a\u0645\u0629.","Use":"\u064a\u0633\u062a\u062e\u062f\u0645","No coupon available for this customer":"\u0644\u0627 \u0642\u0633\u064a\u0645\u0629 \u0645\u062a\u0627\u062d\u0629 \u0644\u0647\u0630\u0627 \u0627\u0644\u0639\u0645\u064a\u0644","Select Customer":"\u062d\u062f\u062f \u0627\u0644\u0639\u0645\u064a\u0644","No customer match your query...":"\u0644\u0627 \u064a\u0648\u062c\u062f \u0639\u0645\u064a\u0644 \u064a\u0637\u0627\u0628\u0642 \u0627\u0633\u062a\u0641\u0633\u0627\u0631\u0643 ...","Create a customer":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0639\u0645\u064a\u0644","Customer Name":"\u0627\u0633\u0645 \u0627\u0644\u0632\u0628\u0648\u0646","Save Customer":"\u062d\u0641\u0638 \u0627\u0644\u0639\u0645\u064a\u0644","No Customer Selected":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u062d\u062f\u064a\u062f \u0623\u064a \u0632\u0628\u0648\u0646","In order to see a customer account, you need to select one customer.":"\u0644\u0643\u064a \u062a\u0631\u0649 \u062d\u0633\u0627\u0628 \u0639\u0645\u064a\u0644 \u060c \u0639\u0644\u064a\u0643 \u062a\u062d\u062f\u064a\u062f \u0639\u0645\u064a\u0644 \u0648\u0627\u062d\u062f.","Summary For":"\u0645\u0644\u062e\u0635 \u0644\u0640","Total Purchases":"\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a","Last Purchases":"\u0639\u0645\u0644\u064a\u0627\u062a \u0627\u0644\u0634\u0631\u0627\u0621 \u0627\u0644\u0623\u062e\u064a\u0631\u0629","No orders...":"\u0644\u0627 \u062a\u0648\u062c\u062f \u0623\u0648\u0627\u0645\u0631 ...","Name":"\u0627\u0633\u0645","No coupons for the selected customer...":"\u0644\u0627 \u0643\u0648\u0628\u0648\u0646\u0627\u062a \u0644\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0645\u062d\u062f\u062f ...","Use Coupon":"\u0627\u0633\u062a\u062e\u062f\u0645 \u0642\u0633\u064a\u0645\u0629","Rewards":"\u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a","Points":"\u0646\u0642\u0627\u0637","Target":"\u0627\u0633\u062a\u0647\u062f\u0627\u0641","No rewards available the selected customer...":"\u0644\u0627 \u062a\u0648\u062c\u062f \u0645\u0643\u0627\u0641\u0622\u062a \u0645\u062a\u0627\u062d\u0629 \u0644\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0645\u062e\u062a\u0627\u0631 ...","Account Transaction":"\u0645\u0639\u0627\u0645\u0644\u0629 \u0627\u0644\u062d\u0633\u0627\u0628","Percentage Discount":"\u0646\u0633\u0628\u0629 \u0627\u0644\u062e\u0635\u0645","Flat Discount":"\u062e\u0635\u0645 \u062b\u0627\u0628\u062a","Use Customer ?":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0632\u0628\u0648\u0646\u061f","No customer is selected. Would you like to proceed with this customer ?":"\u0644\u0645 \u064a\u062a\u0645 \u0627\u062e\u062a\u064a\u0627\u0631 \u0623\u064a \u0632\u0628\u0648\u0646. \u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0645\u0639 \u0647\u0630\u0627 \u0627\u0644\u0639\u0645\u064a\u0644\u061f","Change Customer ?":"\u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u0639\u0645\u064a\u0644\u061f","Would you like to assign this customer to the ongoing order ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u062e\u0635\u064a\u0635 \u0647\u0630\u0627 \u0627\u0644\u0639\u0645\u064a\u0644 \u0644\u0644\u0637\u0644\u0628 \u0627\u0644\u062c\u0627\u0631\u064a\u061f","Product Discount":"\u062e\u0635\u0645 \u0627\u0644\u0645\u0646\u062a\u062c","Cart Discount":"\u0633\u0644\u0629 \u0627\u0644\u062e\u0635\u0645","Hold Order":"\u0639\u0642\u062f \u0627\u0644\u0623\u0645\u0631","The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.":"\u0633\u064a\u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0623\u0645\u0631 \u0627\u0644\u062d\u0627\u0644\u064a \u0642\u064a\u062f \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631. \u064a\u0645\u0643\u0646\u0643 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628 \u0645\u0646 \u0632\u0631 \u0627\u0644\u0623\u0645\u0631 \u0627\u0644\u0645\u0639\u0644\u0642. \u0642\u062f \u064a\u0633\u0627\u0639\u062f\u0643 \u062a\u0648\u0641\u064a\u0631 \u0645\u0631\u062c\u0639 \u0644\u0647 \u0641\u064a \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0623\u0645\u0631 \u0628\u0633\u0631\u0639\u0629 \u0623\u0643\u0628\u0631.","Confirm":"\u064a\u062a\u0623\u0643\u062f","Layaway Parameters":"\u0645\u0639\u0644\u0645\u0627\u062a Layaway","Minimum Payment":"\u0627\u0644\u062d\u062f \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0644\u062f\u0641\u0639","Instalments & Payments":"\u0627\u0644\u0623\u0642\u0633\u0627\u0637 \u0648\u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0627\u062a","The final payment date must be the last within the instalments.":"\u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0646\u0647\u0627\u0626\u064a \u0647\u0648 \u0627\u0644\u0623\u062e\u064a\u0631 \u062e\u0644\u0627\u0644 \u0627\u0644\u0623\u0642\u0633\u0627\u0637.","Amount":"\u0643\u0645\u064a\u0629","You must define layaway settings before proceeding.":"\u064a\u062c\u0628 \u0639\u0644\u064a\u0643 \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u0624\u0642\u062a\u0629 \u0642\u0628\u0644 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629.","Please provide instalments before proceeding.":"\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 \u0627\u0644\u0623\u0642\u0633\u0627\u0637 \u0642\u0628\u0644 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629.","Unable to process, the form is not valid":"\u062a\u0639\u0630\u0631 \u0645\u0639\u0627\u0644\u062c\u0629 \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u063a\u064a\u0631 \u0635\u0627\u0644\u062d","One or more instalments has an invalid date.":"\u0642\u0633\u0637 \u0648\u0627\u062d\u062f \u0623\u0648 \u0623\u0643\u062b\u0631 \u0644\u0647 \u062a\u0627\u0631\u064a\u062e \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","One or more instalments has an invalid amount.":"\u0642\u0633\u0637 \u0648\u0627\u062d\u062f \u0623\u0648 \u0623\u0643\u062b\u0631 \u0628\u0647 \u0645\u0628\u0644\u063a \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","One or more instalments has a date prior to the current date.":"\u0642\u0633\u0637 \u0648\u0627\u062d\u062f \u0623\u0648 \u0623\u0643\u062b\u0631 \u0644\u0647 \u062a\u0627\u0631\u064a\u062e \u0633\u0627\u0628\u0642 \u0644\u0644\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u062d\u0627\u0644\u064a.","The payment to be made today is less than what is expected.":"\u0627\u0644\u062f\u0641\u0639\u0629 \u0627\u0644\u062a\u064a \u064a\u062a\u0639\u064a\u0646 \u0633\u062f\u0627\u062f\u0647\u0627 \u0627\u0644\u064a\u0648\u0645 \u0623\u0642\u0644 \u0645\u0645\u0627 \u0647\u0648 \u0645\u062a\u0648\u0642\u0639.","Total instalments must be equal to the order total.":"\u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0623\u0642\u0633\u0627\u0637 \u0645\u0633\u0627\u0648\u064a\u064b\u0627 \u0644\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0637\u0644\u0628.","Order Note":"\u0645\u0630\u0643\u0631\u0629 \u0627\u0644\u0646\u0638\u0627\u0645","Note":"\u0645\u0644\u062d\u0648\u0638\u0629","More details about this order":"\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 \u062d\u0648\u0644 \u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628","Display On Receipt":"\u0627\u0644\u0639\u0631\u0636 \u0639\u0646\u062f \u0627\u0644\u0627\u0633\u062a\u0644\u0627\u0645","Will display the note on the receipt":"\u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u0627\u0644\u0645\u0644\u0627\u062d\u0638\u0629 \u0639\u0644\u0649 \u0627\u0644\u0625\u064a\u0635\u0627\u0644","Open":"\u0627\u0641\u062a\u062d","Order Settings":"\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0637\u0644\u0628","Define The Order Type":"\u062a\u062d\u062f\u064a\u062f \u0646\u0648\u0639 \u0627\u0644\u0623\u0645\u0631","Payment List":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062f\u0641\u0639","List Of Payments":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0627\u062a","No Payment added.":"\u0644\u0627 \u064a\u0648\u062c\u062f \u062f\u0641\u0639 \u0645\u0636\u0627\u0641.","Select Payment":"\u062d\u062f\u062f \u0627\u0644\u062f\u0641\u0639","Submit Payment":"\u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u062f\u0641\u0639","Layaway":"\u0627\u0633\u062a\u0631\u0627\u062d","On Hold":"\u0641\u064a \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631","Tendered":"\u0645\u0646\u0627\u0642\u0635\u0629","Nothing to display...":"\u0644\u0627 \u0634\u064a\u0621 \u0644\u0639\u0631\u0636\u0647 ...","Product Price":"\u0633\u0639\u0631 \u0627\u0644\u0645\u0646\u062a\u062c","Define Quantity":"\u062d\u062f\u062f \u0627\u0644\u0643\u0645\u064a\u0629","Please provide a quantity":"\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 \u0643\u0645\u064a\u0629","Product \/ Service":"\u0627\u0644\u0645\u0646\u062a\u062c \/ \u0627\u0644\u062e\u062f\u0645\u0629","Unable to proceed. The form is not valid.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627. \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","An error has occurred while computing the product.":"\u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0646\u062a\u062c.","Provide a unique name for the product.":"\u0623\u062f\u062e\u0644 \u0627\u0633\u0645\u064b\u0627 \u0641\u0631\u064a\u062f\u064b\u0627 \u0644\u0644\u0645\u0646\u062a\u062c.","Define what is the sale price of the item.":"\u062a\u062d\u062f\u064a\u062f \u0633\u0639\u0631 \u0628\u064a\u0639 \u0627\u0644\u0633\u0644\u0639\u0629.","Set the quantity of the product.":"\u062d\u062f\u062f \u0643\u0645\u064a\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.","Assign a unit to the product.":"\u0642\u0645 \u0628\u062a\u0639\u064a\u064a\u0646 \u0648\u062d\u062f\u0629 \u0644\u0644\u0645\u0646\u062a\u062c.","Tax Type":"\u0646\u0648\u0639 \u0627\u0644\u0636\u0631\u064a\u0628\u0629","Inclusive":"\u0634\u0627\u0645\u0644","Exclusive":"\u062d\u0635\u0631\u064a","Define what is tax type of the item.":"\u062a\u062d\u062f\u064a\u062f \u0646\u0648\u0639 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0644\u0644\u0639\u0646\u0635\u0631.","Tax Group":"\u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u064a\u0628\u064a\u0629","Choose the tax group that should apply to the item.":"\u0627\u062e\u062a\u0631 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u062a\u064a \u064a\u062c\u0628 \u062a\u0637\u0628\u064a\u0642\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0639\u0646\u0635\u0631.","Search Product":"\u0627\u0644\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u0645\u0646\u062a\u062c","There is nothing to display. Have you started the search ?":"\u0644\u0627 \u064a\u0648\u062c\u062f \u0634\u064a\u0621 \u0644\u0639\u0631\u0636\u0647. \u0647\u0644 \u0628\u062f\u0623\u062a \u0627\u0644\u0628\u062d\u062b\u061f","Shipping & Billing":"\u0627\u0644\u0634\u062d\u0646 \u0648\u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631","Tax & Summary":"\u0627\u0644\u0636\u0631\u0627\u0626\u0628 \u0648\u0627\u0644\u0645\u0644\u062e\u0635","Select Tax":"\u062d\u062f\u062f \u0627\u0644\u0636\u0631\u0627\u0626\u0628","Define the tax that apply to the sale.":"\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u062a\u064a \u062a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0628\u064a\u0639.","Define how the tax is computed":"\u062a\u062d\u062f\u064a\u062f \u0643\u064a\u0641\u064a\u0629 \u0627\u062d\u062a\u0633\u0627\u0628 \u0627\u0644\u0636\u0631\u064a\u0628\u0629","Define when that specific product should expire.":"\u062d\u062f\u062f \u0645\u062a\u0649 \u064a\u062c\u0628 \u0623\u0646 \u062a\u0646\u062a\u0647\u064a \u0635\u0644\u0627\u062d\u064a\u0629 \u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u062d\u062f\u062f.","Renders the automatically generated barcode.":"\u064a\u062c\u0633\u062f \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a \u0627\u0644\u0630\u064a \u062a\u0645 \u0625\u0646\u0634\u0627\u0624\u0647 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627.","Adjust how tax is calculated on the item.":"\u0627\u0636\u0628\u0637 \u0643\u064a\u0641\u064a\u0629 \u0627\u062d\u062a\u0633\u0627\u0628 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0639\u0644\u0649 \u0627\u0644\u0639\u0646\u0635\u0631.","Units & Quantities":"\u0627\u0644\u0648\u062d\u062f\u0627\u062a \u0648\u0627\u0644\u0643\u0645\u064a\u0627\u062a","Sale Price":"\u0633\u0639\u0631 \u0627\u0644\u0628\u064a\u0639","Wholesale Price":"\u0633\u0639\u0631 \u0628\u0627\u0644\u062c\u0645\u0644\u0629","Select":"\u064a\u062e\u062a\u0627\u0631","The customer has been loaded":"\u062a\u0645 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0639\u0645\u064a\u0644","Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.":"\u062a\u0639\u0630\u0631 \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a. \u064a\u0628\u062f\u0648 \u0623\u0646 \u0627\u0644\u0639\u0645\u064a\u0644 \u0644\u0645 \u064a\u0639\u062f \u0645\u0648\u062c\u0648\u062f\u064b\u0627. \u0636\u0639 \u0641\u064a \u0627\u0639\u062a\u0628\u0627\u0631\u0643 \u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a \u0641\u064a \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a.","OKAY":"\u062d\u0633\u0646\u0627","Some products has been added to the cart. Would youl ike to discard this order ?":"\u062a\u0645\u062a \u0625\u0636\u0627\u0641\u0629 \u0628\u0639\u0636 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0625\u0644\u0649 \u0639\u0631\u0628\u0629 \u0627\u0644\u062a\u0633\u0648\u0642. \u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u062c\u0627\u0647\u0644 \u0647\u0630\u0627 \u0627\u0644\u0623\u0645\u0631\u061f","This coupon is already added to the cart":"\u062a\u0645\u062a \u0625\u0636\u0627\u0641\u0629 \u0647\u0630\u0647 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0628\u0627\u0644\u0641\u0639\u0644 \u0625\u0644\u0649 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642","No tax group assigned to the order":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0645\u062c\u0645\u0648\u0639\u0629 \u0636\u0631\u064a\u0628\u064a\u0629 \u0644\u0644\u0623\u0645\u0631","Unable to proceed":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627","Layaway defined":"\u062a\u062d\u062f\u064a\u062f Layaway","Partially paid orders are disabled.":"\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629 \u062c\u0632\u0626\u064a\u064b\u0627.","An order is currently being processed.":"\u0623\u0645\u0631 \u0642\u064a\u062f \u0627\u0644\u0645\u0639\u0627\u0644\u062c\u0629 \u062d\u0627\u0644\u064a\u0627.","Okay":"\u062a\u0645\u0627\u0645","An unexpected error has occurred while fecthing taxes.":"\u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639 \u0623\u062b\u0646\u0627\u0621 \u0641\u0631\u0636 \u0627\u0644\u0636\u0631\u0627\u0626\u0628.","Loading...":"\u062a\u062d\u0645\u064a\u0644...","Profile":"\u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0634\u062e\u0635\u064a","Logout":"\u062a\u0633\u062c\u064a\u0644 \u062e\u0631\u0648\u062c","Unnamed Page":"\u0627\u0644\u0635\u0641\u062d\u0629 \u063a\u064a\u0631 \u0627\u0644\u0645\u0633\u0645\u0627\u0629","No description":"\u0628\u062f\u0648\u0646 \u0648\u0635\u0641","Provide a name to the resource.":"\u0623\u062f\u062e\u0644 \u0627\u0633\u0645\u064b\u0627 \u0644\u0644\u0645\u0648\u0631\u062f.","Edit":"\u064a\u062d\u0631\u0631","Would you like to delete this ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0647\u0630\u0627\u061f","Delete Selected Groups":"\u062d\u0630\u0641 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0645\u062e\u062a\u0627\u0631\u0629","Activate Your Account":"\u0641\u0639\u0644 \u062d\u0633\u0627\u0628\u0643","The account you have created for __%s__, require an activation. In order to proceed, please click on the following link":"\u064a\u062a\u0637\u0644\u0628 \u0627\u0644\u062d\u0633\u0627\u0628 \u0627\u0644\u0630\u064a \u0642\u0645\u062a \u0628\u0625\u0646\u0634\u0627\u0626\u0647 \u0644\u0640 __%s__ \u062a\u0646\u0634\u064a\u0637\u064b\u0627. \u0644\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0627\u0644\u0631\u062c\u0627\u0621 \u0627\u0644\u0636\u063a\u0637 \u0639\u0644\u0649 \u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u062a\u0627\u0644\u064a","Password Recovered":"\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631","Your password has been successfully updated on __%s__. You can now login with your new password.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631\u0643 \u0628\u0646\u062c\u0627\u062d \u0641\u064a __%s__. \u064a\u0645\u0643\u0646\u0643 \u0627\u0644\u0622\u0646 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u062c\u062f\u064a\u062f\u0629 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643.","Password Recovery":"\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631","Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ":"\u0637\u0644\u0628 \u0634\u062e\u0635 \u0645\u0627 \u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643 \u0639\u0644\u0649 __ \"%s\" __. \u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u062a\u0630\u0643\u0631 \u0623\u0646\u0643 \u0642\u0645\u062a \u0628\u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628 \u060c \u0641\u064a\u0631\u062c\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0628\u0627\u0644\u0646\u0642\u0631 \u0641\u0648\u0642 \u0627\u0644\u0632\u0631 \u0623\u062f\u0646\u0627\u0647.","Reset Password":"\u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631","New User Registration":"\u062a\u0633\u062c\u064a\u0644 \u0645\u0633\u062a\u062e\u062f\u0645 \u062c\u062f\u064a\u062f","Your Account Has Been Created":"\u0644\u0642\u062f \u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628\u0643","Login":"\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644","Save Coupon":"\u062d\u0641\u0638 \u0627\u0644\u0642\u0633\u064a\u0645\u0629","This field is required":"\u0647\u0630\u0647 \u0627\u0644\u062e\u0627\u0646\u0629 \u0645\u0637\u0644\u0648\u0628\u0647","The form is not valid. Please check it and try again":"\u0627\u0644\u0646\u0645\u0648\u0630\u062c \u063a\u064a\u0631 \u0635\u0627\u0644\u062d. \u064a\u0631\u062c\u0649 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0630\u0644\u0643 \u0648\u062d\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649","mainFieldLabel not defined":"mainFieldLabel \u063a\u064a\u0631 \u0645\u0639\u0631\u0651\u0641","Create Customer Group":"\u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Save a new customer group":"\u062d\u0641\u0638 \u0645\u062c\u0645\u0648\u0639\u0629 \u0639\u0645\u0644\u0627\u0621 \u062c\u062f\u064a\u062f\u0629","Update Group":"\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629","Modify an existing customer group":"\u062a\u0639\u062f\u064a\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u062d\u0627\u0644\u064a\u0629","Managing Customers Groups":"\u0625\u062f\u0627\u0631\u0629 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Create groups to assign customers":"\u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0644\u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Create Customer":"\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0639\u0645\u064a\u0644","Managing Customers":"\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621","List of registered customers":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u0645\u0633\u062c\u0644\u064a\u0646","Log out":"\u062a\u0633\u062c\u064a\u0644 \u062e\u0631\u0648\u062c","Your Module":"\u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643","Choose the zip file you would like to upload":"\u0627\u062e\u062a\u0631 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0645\u0636\u063a\u0648\u0637 \u0627\u0644\u0630\u064a \u062a\u0631\u064a\u062f \u062a\u062d\u0645\u064a\u0644\u0647","Managing Orders":"\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0637\u0644\u0628\u0627\u062a","Manage all registered orders.":"\u0625\u062f\u0627\u0631\u0629 \u062c\u0645\u064a\u0639 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0645\u0633\u062c\u0644\u0629.","Receipt — %s":"\u0627\u0633\u062a\u0644\u0627\u0645 \u0648 [\u0645\u062f\u0634] \u061b \u066a\u0633","Order receipt":"\u0625\u064a\u0635\u0627\u0644 \u0627\u0644\u0637\u0644\u0628","Hide Dashboard":"\u0627\u062e\u0641\u0627\u0621 \u0644\u0648\u062d\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629","Refund receipt":"\u0625\u064a\u0635\u0627\u0644 \u0627\u0644\u0627\u0633\u062a\u0631\u062f\u0627\u062f","Unknown Payment":"\u062f\u0641\u0639 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641","Procurement Name":"\u0627\u0633\u0645 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a","Unable to proceed no products has been provided.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0644\u0645 \u064a\u062a\u0645 \u062a\u0642\u062f\u064a\u0645 \u0623\u064a \u0645\u0646\u062a\u062c\u0627\u062a.","Unable to proceed, one or more products is not valid.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0645\u0646\u062a\u062c \u0648\u0627\u062d\u062f \u0623\u0648 \u0623\u0643\u062b\u0631 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","Unable to proceed the procurement form is not valid.":"\u062a\u0639\u0630\u0631 \u0645\u062a\u0627\u0628\u0639\u0629 \u0646\u0645\u0648\u0630\u062c \u0627\u0644\u0634\u0631\u0627\u0621 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","Unable to proceed, no submit url has been provided.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0639\u0646\u0648\u0627\u0646 url \u0644\u0644\u0625\u0631\u0633\u0627\u0644.","SKU, Barcode, Product name.":"SKU \u060c \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a \u060c \u0627\u0633\u0645 \u0627\u0644\u0645\u0646\u062a\u062c.","Email":"\u0628\u0631\u064a\u062f \u0627\u0644\u0627\u0644\u0643\u062a\u0631\u0648\u0646\u064a","Phone":"\u0647\u0627\u062a\u0641","First Address":"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0623\u0648\u0644","Second Address":"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u062b\u0627\u0646\u064a","Address":"\u0639\u0646\u0648\u0627\u0646","City":"\u0645\u062f\u064a\u0646\u0629","PO.Box":"\u0635\u0646\u062f\u0648\u0642 \u0628\u0631\u064a\u062f","Description":"\u0648\u0635\u0641","Included Products":"\u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u062a\u0636\u0645\u0646\u0629","Apply Settings":"\u062a\u0637\u0628\u064a\u0642 \u0625\u0639\u062f\u0627\u062f\u0627\u062a","Basic Settings":"\u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629","Visibility Settings":"\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0631\u0624\u064a\u0629","Unable to load the report as the timezone is not set on the settings.":"\u062a\u0639\u0630\u0631 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u062a\u0642\u0631\u064a\u0631 \u062d\u064a\u062b \u0644\u0645 \u064a\u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0645\u0646\u0637\u0642\u0629 \u0627\u0644\u0632\u0645\u0646\u064a\u0629 \u0639\u0644\u0649 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a.","Year":"\u0639\u0627\u0645","Recompute":"\u0625\u0639\u0627\u062f\u0629 \u062d\u0633\u0627\u0628","Income":"\u062f\u062e\u0644","January":"\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a","March":"\u0645\u0627\u0631\u0633","April":"\u0623\u0628\u0631\u064a\u0644","May":"\u0642\u062f","June":"\u064a\u0648\u0646\u064a\u0648","July":"\u062a\u0645\u0648\u0632","August":"\u0634\u0647\u0631 \u0627\u063a\u0633\u0637\u0633","September":"\u0633\u0628\u062a\u0645\u0628\u0631","October":"\u0627\u0643\u062a\u0648\u0628\u0631","November":"\u0634\u0647\u0631 \u0646\u0648\u0641\u0645\u0628\u0631","December":"\u062f\u064a\u0633\u0645\u0628\u0631","Sort Results":"\u0641\u0631\u0632 \u0627\u0644\u0646\u062a\u0627\u0626\u062c","Using Quantity Ascending":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062a\u0635\u0627\u0639\u062f\u064a \u0627\u0644\u0643\u0645\u064a\u0629","Using Quantity Descending":"\u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062a\u0646\u0627\u0632\u0644\u064a \u0627\u0644\u0643\u0645\u064a\u0629","Using Sales Ascending":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u062a\u0635\u0627\u0639\u062f\u064a\u0627","Using Sales Descending":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u062a\u0646\u0627\u0632\u0644\u064a\u0627\u064b","Using Name Ascending":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0627\u0633\u0645 \u062a\u0635\u0627\u0639\u062f\u064a\u064b\u0627","Using Name Descending":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0627\u0633\u0645 \u062a\u0646\u0627\u0632\u0644\u064a\u064b\u0627","Progress":"\u062a\u0642\u062f\u0645","Purchase Price":"\u0633\u0639\u0631 \u0627\u0644\u0634\u0631\u0627\u0621","Profit":"\u0631\u0628\u062d","Discounts":"\u0627\u0644\u062e\u0635\u0648\u0645\u0627\u062a","Tax Value":"\u0642\u064a\u0645\u0629 \u0627\u0644\u0636\u0631\u064a\u0628\u0629","Reward System Name":"\u0627\u0633\u0645 \u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629","Try Again":"\u062d\u0627\u0648\u0644 \u0645\u062c\u062f\u062f\u0627","Home":"\u0627\u0644\u0635\u0641\u062d\u0629 \u0627\u0644\u0631\u0626\u064a\u0633\u064a\u0629","Not Allowed Action":"\u0625\u062c\u0631\u0627\u0621 \u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0628\u0647","How to change database configuration":"\u0643\u064a\u0641\u064a\u0629 \u062a\u063a\u064a\u064a\u0631 \u062a\u0643\u0648\u064a\u0646 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a","Common Database Issues":"\u0642\u0636\u0627\u064a\u0627 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0645\u0634\u062a\u0631\u0643\u0629","Setup":"\u0627\u0642\u0627\u0645\u0629","Method Not Allowed":"\u0637\u0631\u064a\u0642\u0629 \u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d\u0629","Documentation":"\u062a\u0648\u062b\u064a\u0642","Missing Dependency":"\u062a\u0628\u0639\u064a\u0629 \u0645\u0641\u0642\u0648\u062f\u0629","Continue":"\u064a\u0643\u0645\u0644","Module Version Mismatch":"\u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \u063a\u064a\u0631 \u0645\u062a\u0637\u0627\u0628\u0642","Access Denied":"\u062a\u0645 \u0627\u0644\u0631\u0641\u0636","Sign Up":"\u0627\u0634\u062a\u0631\u0627\u0643","An invalid date were provided. Make sure it a prior date to the actual server date.":"\u062a\u0645 \u062a\u0642\u062f\u064a\u0645 \u062a\u0627\u0631\u064a\u062e \u063a\u064a\u0631 \u0635\u0627\u0644\u062d. \u062a\u0623\u0643\u062f \u0645\u0646 \u0623\u0646\u0647 \u062a\u0627\u0631\u064a\u062e \u0633\u0627\u0628\u0642 \u0644\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u062e\u0627\u062f\u0645 \u0627\u0644\u0641\u0639\u0644\u064a.","Computing report from %s...":"\u062c\u0627\u0631\u064a \u062d\u0633\u0627\u0628 \u0627\u0644\u062a\u0642\u0631\u064a\u0631 \u0645\u0646%s ...","The operation was successful.":"\u0643\u0627\u0646\u062a \u0627\u0644\u0639\u0645\u0644\u064a\u0629 \u0646\u0627\u062c\u062d\u0629.","Unable to find a module having the identifier\/namespace \"%s\"":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0648\u062d\u062f\u0629 \u0646\u0645\u0637\u064a\u0629 \u0628\u0647\u0627 \u0627\u0644\u0645\u0639\u0631\u0641 \/ \u0645\u0633\u0627\u062d\u0629 \u0627\u0644\u0627\u0633\u0645 \"%s\"","What is the CRUD single resource name ? [Q] to quit.":"\u0645\u0627 \u0647\u0648 \u0627\u0633\u0645 \u0645\u0648\u0631\u062f \u0648\u0627\u062d\u062f CRUD\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.","Which table name should be used ? [Q] to quit.":"\u0645\u0627 \u0627\u0633\u0645 \u0627\u0644\u062c\u062f\u0648\u0644 \u0627\u0644\u0630\u064a \u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.","If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"\u0625\u0630\u0627 \u0643\u0627\u0646 \u0645\u0648\u0631\u062f CRUD \u0627\u0644\u062e\u0627\u0635 \u0628\u0643 \u0644\u0647 \u0639\u0644\u0627\u0642\u0629 \u060c \u0641\u0630\u0643\u0631\u0647 \u0639\u0644\u0649 \u0627\u0644\u0646\u062d\u0648 \u0627\u0644\u062a\u0627\u0644\u064a \"foreign_table\u060c foreign_key\u060c local_key \"\u061f [S] \u0644\u0644\u062a\u062e\u0637\u064a \u060c [\u0633] \u0644\u0644\u0625\u0646\u0647\u0627\u0621.","Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"\u0623\u0636\u0641 \u0639\u0644\u0627\u0642\u0629 \u062c\u062f\u064a\u062f\u0629\u061f \u0623\u0630\u0643\u0631\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0646\u062d\u0648 \u0627\u0644\u062a\u0627\u0644\u064a \"foreign_table\u060c foreign_key\u060c local_key \"\u061f [S] \u0644\u0644\u062a\u062e\u0637\u064a \u060c [\u0633] \u0644\u0644\u0625\u0646\u0647\u0627\u0621.","Not enough parameters provided for the relation.":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0645\u0639\u0644\u0645\u0627\u062a \u0643\u0627\u0641\u064a\u0629 \u0644\u0644\u0639\u0644\u0627\u0642\u0629.","The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0645\u0648\u0631\u062f CRUD \"%s\"\u0644\u0644\u0648\u062d\u062f\u0629 \"%s\"\u0641\u064a \"%s\"","The CRUD resource \"%s\" has been generated at %s":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0645\u0648\u0631\u062f CRUD \"%s\" \u0641\u064a%s","Localization for %s extracted to %s":"\u062a\u0645 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0627\u0644\u062a\u0631\u062c\u0645\u0629 \u0644\u0640%s \u0625\u0644\u0649%s","Unable to find the requested module.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629.","Version":"\u0625\u0635\u062f\u0627\u0631","Path":"\u0637\u0631\u064a\u0642","Index":"\u0641\u0647\u0631\u0633","Entry Class":"\u0641\u0626\u0629 \u0627\u0644\u062f\u062e\u0648\u0644","Routes":"\u0637\u0631\u0642","Api":"\u0623\u0628\u064a","Controllers":"\u062a\u062d\u0643\u0645","Views":"\u0627\u0644\u0622\u0631\u0627\u0621","Attribute":"\u064a\u0635\u0641","Namespace":"\u0645\u0633\u0627\u062d\u0629 \u0627\u0644\u0627\u0633\u0645","Author":"\u0645\u0624\u0644\u0641","There is no migrations to perform for the module \"%s\"":"\u0644\u0627 \u062a\u0648\u062c\u062f \u0639\u0645\u0644\u064a\u0627\u062a \u062a\u0631\u062d\u064a\u0644 \u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \"%s\"","The module migration has successfully been performed for the module \"%s\"":"\u062a\u0645 \u062a\u0646\u0641\u064a\u0630 \u062a\u0631\u062d\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \u0628\u0646\u062c\u0627\u062d \u0644\u0644\u0648\u062d\u062f\u0629 \"%s\"","The product barcodes has been refreshed successfully.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0631\u0645\u0648\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a\u0629 \u0644\u0644\u0645\u0646\u062a\u062c \u0628\u0646\u062c\u0627\u062d.","The demo has been enabled.":"\u062a\u0645 \u062a\u0641\u0639\u064a\u0644 \u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u062a\u0648\u0636\u064a\u062d\u064a.","What is the store name ? [Q] to quit.":"\u0645\u0627 \u0647\u0648 \u0627\u0633\u0645 \u0627\u0644\u0645\u062a\u062c\u0631\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.","Please provide at least 6 characters for store name.":"\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 6 \u0623\u062d\u0631\u0641 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0644\u0627\u0633\u0645 \u0627\u0644\u0645\u062a\u062c\u0631.","What is the administrator password ? [Q] to quit.":"\u0645\u0627 \u0647\u064a \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0627\u0644\u0645\u0633\u0624\u0648\u0644\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.","Please provide at least 6 characters for the administrator password.":"\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 6 \u0623\u062d\u0631\u0641 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0644\u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0627\u0644\u0645\u0633\u0624\u0648\u0644.","What is the administrator email ? [Q] to quit.":"\u0645\u0627 \u0647\u0648 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0644\u0644\u0645\u0633\u0624\u0648\u0644\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.","Please provide a valid email for the administrator.":"\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0635\u0627\u0644\u062d \u0644\u0644\u0645\u0633\u0624\u0648\u0644.","What is the administrator username ? [Q] to quit.":"\u0645\u0627 \u0647\u0648 \u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0633\u0624\u0648\u0644\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.","Please provide at least 5 characters for the administrator username.":"\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 5 \u0623\u062d\u0631\u0641 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0644\u0627\u0633\u0645 \u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0633\u0624\u0648\u0644.","Downloading latest dev build...":"\u062c\u0627\u0631\u064d \u062a\u0646\u0632\u064a\u0644 \u0623\u062d\u062f\u062b \u0625\u0635\u062f\u0627\u0631 \u0645\u0646 \u0627\u0644\u062a\u0637\u0648\u064a\u0631 ...","Reset project to HEAD...":"\u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0645\u0634\u0631\u0648\u0639 \u0625\u0644\u0649 HEAD ...","Credit":"\u062a\u0646\u0633\u0628 \u0625\u0644\u064a\u0647","Debit":"\u0645\u062f\u064a\u0646","Coupons List":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0642\u0633\u0627\u0626\u0645","Display all coupons.":"\u0627\u0639\u0631\u0636 \u0643\u0644 \u0627\u0644\u0642\u0633\u0627\u0626\u0645.","No coupons has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0643\u0648\u0628\u0648\u0646\u0627\u062a","Add a new coupon":"\u0623\u0636\u0641 \u0642\u0633\u064a\u0645\u0629 \u062c\u062f\u064a\u062f\u0629","Create a new coupon":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0642\u0633\u064a\u0645\u0629 \u062c\u062f\u064a\u062f\u0629","Register a new coupon and save it.":"\u0633\u062c\u0644 \u0642\u0633\u064a\u0645\u0629 \u062c\u062f\u064a\u062f\u0629 \u0648\u0627\u062d\u0641\u0638\u0647\u0627.","Edit coupon":"\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0642\u0633\u064a\u0645\u0629","Modify Coupon.":"\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0642\u0633\u064a\u0645\u0629.","Return to Coupons":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0642\u0633\u0627\u0626\u0645","Might be used while printing the coupon.":"\u064a\u0645\u0643\u0646 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u0627 \u0623\u062b\u0646\u0627\u0621 \u0637\u0628\u0627\u0639\u0629 \u0627\u0644\u0642\u0633\u064a\u0645\u0629.","Define which type of discount apply to the current coupon.":"\u062d\u062f\u062f \u0646\u0648\u0639 \u0627\u0644\u062e\u0635\u0645 \u0627\u0644\u0630\u064a \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.","Discount Value":"\u0642\u064a\u0645\u0629 \u0627\u0644\u062e\u0635\u0645","Define the percentage or flat value.":"\u062d\u062f\u062f \u0627\u0644\u0646\u0633\u0628\u0629 \u0627\u0644\u0645\u0626\u0648\u064a\u0629 \u0623\u0648 \u0627\u0644\u0642\u064a\u0645\u0629 \u0627\u0644\u062b\u0627\u0628\u062a\u0629.","Valid Until":"\u0635\u0627\u0644\u062d \u062d\u062a\u0649","Minimum Cart Value":"\u0627\u0644\u062d\u062f \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0642\u064a\u0645\u0629 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642","What is the minimum value of the cart to make this coupon eligible.":"\u0645\u0627 \u0647\u0648 \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0642\u064a\u0645\u0629 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642 \u0644\u062c\u0639\u0644 \u0647\u0630\u0647 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0645\u0624\u0647\u0644\u0629.","Maximum Cart Value":"\u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0642\u064a\u0645\u0629 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642","Valid Hours Start":"\u062a\u0628\u062f\u0623 \u0627\u0644\u0633\u0627\u0639\u0627\u062a \u0627\u0644\u0635\u0627\u0644\u062d\u0629","Define form which hour during the day the coupons is valid.":"\u062d\u062f\u062f \u0634\u0643\u0644 \u0623\u064a \u0633\u0627\u0639\u0629 \u062e\u0644\u0627\u0644 \u0627\u0644\u064a\u0648\u0645 \u062a\u0643\u0648\u0646 \u0627\u0644\u0642\u0633\u0627\u0626\u0645 \u0635\u0627\u0644\u062d\u0629.","Valid Hours End":"\u0627\u0646\u062a\u0647\u0627\u0621 \u0627\u0644\u0633\u0627\u0639\u0627\u062a \u0627\u0644\u0635\u0627\u0644\u062d\u0629","Define to which hour during the day the coupons end stop valid.":"\u062d\u062f\u062f \u0625\u0644\u0649 \u0623\u064a \u0633\u0627\u0639\u0629 \u062e\u0644\u0627\u0644 \u0627\u0644\u064a\u0648\u0645 \u062a\u062a\u0648\u0642\u0641 \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0642\u0633\u0627\u0626\u0645.","Limit Usage":"\u062d\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645","Define how many time a coupons can be redeemed.":"\u062d\u062f\u062f \u0639\u062f\u062f \u0627\u0644\u0645\u0631\u0627\u062a \u0627\u0644\u062a\u064a \u064a\u0645\u0643\u0646 \u0641\u064a\u0647\u0627 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u0642\u0633\u0627\u0626\u0645.","Select Products":"\u062d\u062f\u062f \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a","The following products will be required to be present on the cart, in order for this coupon to be valid.":"\u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u062a\u0627\u0644\u064a\u0629 \u0645\u0648\u062c\u0648\u062f\u0629 \u0641\u064a \u0639\u0631\u0628\u0629 \u0627\u0644\u062a\u0633\u0648\u0642 \u060c \u062d\u062a\u0649 \u062a\u0643\u0648\u0646 \u0647\u0630\u0647 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0635\u0627\u0644\u062d\u0629.","Select Categories":"\u062d\u062f\u062f \u0627\u0644\u0641\u0626\u0627\u062a","The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.":"\u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u062e\u0635\u0635\u0629 \u0644\u0625\u062d\u062f\u0649 \u0647\u0630\u0647 \u0627\u0644\u0641\u0626\u0627\u062a \u0645\u0648\u062c\u0648\u062f\u0629 \u0641\u064a \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642 \u060c \u062d\u062a\u0649 \u062a\u0643\u0648\u0646 \u0647\u0630\u0647 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0635\u0627\u0644\u062d\u0629.","Created At":"\u0623\u0646\u0634\u0626\u062a \u0641\u064a","Undefined":"\u063a\u064a\u0631 \u0645\u0639\u0631\u0641","Delete a licence":"\u062d\u0630\u0641 \u062a\u0631\u062e\u064a\u0635","Customer Accounts List":"\u0642\u0627\u0626\u0645\u0629 \u062d\u0633\u0627\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Display all customer accounts.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u062d\u0633\u0627\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621.","No customer accounts has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u062d\u0633\u0627\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Add a new customer account":"\u0625\u0636\u0627\u0641\u0629 \u062d\u0633\u0627\u0628 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f","Create a new customer account":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f","Register a new customer account and save it.":"\u0633\u062c\u0644 \u062d\u0633\u0627\u0628 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.","Edit customer account":"\u062a\u062d\u0631\u064a\u0631 \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644","Modify Customer Account.":"\u062a\u0639\u062f\u064a\u0644 \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644.","Return to Customer Accounts":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u062d\u0633\u0627\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621","This will be ignored.":"\u0633\u064a\u062a\u0645 \u062a\u062c\u0627\u0647\u0644 \u0647\u0630\u0627.","Define the amount of the transaction":"\u062d\u062f\u062f \u0645\u0628\u0644\u063a \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629","Deduct":"\u062e\u0635\u0645","Add":"\u064a\u0636\u064a\u0641","Define what operation will occurs on the customer account.":"\u062d\u062f\u062f \u0627\u0644\u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u062a\u064a \u0633\u062a\u062d\u062f\u062b \u0639\u0644\u0649 \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644.","Customer Coupons List":"\u0642\u0627\u0626\u0645\u0629 \u0642\u0633\u0627\u0626\u0645 \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Display all customer coupons.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0643\u0648\u0628\u0648\u0646\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621.","No customer coupons has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0642\u0633\u0627\u0626\u0645 \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Add a new customer coupon":"\u0623\u0636\u0641 \u0642\u0633\u064a\u0645\u0629 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f","Create a new customer coupon":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0642\u0633\u064a\u0645\u0629 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f","Register a new customer coupon and save it.":"\u0633\u062c\u0644 \u0642\u0633\u064a\u0645\u0629 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647\u0627.","Edit customer coupon":"\u062a\u062d\u0631\u064a\u0631 \u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0639\u0645\u064a\u0644","Modify Customer Coupon.":"\u062a\u0639\u062f\u064a\u0644 \u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0639\u0645\u064a\u0644.","Return to Customer Coupons":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0643\u0648\u0628\u0648\u0646\u0627\u062a \u0627\u0644\u0639\u0645\u064a\u0644","Define how many time the coupon has been used.":"\u062d\u062f\u062f \u0639\u062f\u062f \u0645\u0631\u0627\u062a \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0642\u0633\u064a\u0645\u0629.","Limit":"\u062d\u062f","Define the maximum usage possible for this coupon.":"\u062d\u062f\u062f \u0623\u0642\u0635\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0645\u0645\u0643\u0646 \u0644\u0647\u0630\u0647 \u0627\u0644\u0642\u0633\u064a\u0645\u0629.","Code":"\u0627\u0644\u0634\u0641\u0631\u0629","Customers List":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Display all customers.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0639\u0645\u0644\u0627\u0621.","No customers has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0639\u0645\u0644\u0627\u0621","Add a new customer":"\u0625\u0636\u0627\u0641\u0629 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f","Create a new customer":"\u0623\u0646\u0634\u0626 \u0639\u0645\u064a\u0644\u0627\u064b \u062c\u062f\u064a\u062f\u064b\u0627","Register a new customer and save it.":"\u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.","Edit customer":"\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0639\u0645\u064a\u0644","Modify Customer.":"\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0639\u0645\u064a\u0644.","Return to Customers":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0644\u0644\u0639\u0645\u0644\u0627\u0621","Provide a unique name for the customer.":"\u0623\u062f\u062e\u0644 \u0627\u0633\u0645\u064b\u0627 \u0641\u0631\u064a\u062f\u064b\u0627 \u0644\u0644\u0639\u0645\u064a\u0644.","Group":"\u0645\u062c\u0645\u0648\u0639\u0629","Assign the customer to a group":"\u0642\u0645 \u0628\u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0639\u0645\u064a\u0644 \u0644\u0645\u062c\u0645\u0648\u0639\u0629","Phone Number":"\u0631\u0642\u0645 \u0627\u0644\u0647\u0627\u062a\u0641","Provide the customer phone number":"\u0623\u062f\u062e\u0644 \u0631\u0642\u0645 \u0647\u0627\u062a\u0641 \u0627\u0644\u0639\u0645\u064a\u0644","PO Box":"\u0635\u0646\u062f\u0648\u0642 \u0628\u0631\u064a\u062f","Provide the customer PO.Box":"\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0635\u0646\u062f\u0648\u0642 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u062e\u0627\u0635 \u0628\u0627\u0644\u0639\u0645\u064a\u0644","Not Defined":"\u063a\u064a\u0631 \u0645\u0639\u0631\u0641","Male":"\u0630\u0643\u0631","Female":"\u0623\u0646\u062b\u0649","Gender":"\u062c\u0646\u0633 \u062a\u0630\u0643\u064a\u0631 \u0623\u0648 \u062a\u0623\u0646\u064a\u062b","Billing Address":"\u0639\u0646\u0648\u0627\u0646 \u0648\u0635\u0648\u0644 \u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631","Billing phone number.":"\u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631 \u0631\u0642\u0645 \u0627\u0644\u0647\u0627\u062a\u0641.","Address 1":"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 1","Billing First Address.":"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629 \u0627\u0644\u0623\u0648\u0644.","Address 2":"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 2","Billing Second Address.":"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629 \u0627\u0644\u062b\u0627\u0646\u064a.","Country":"\u062f\u0648\u0644\u0629","Billing Country.":"\u0628\u0644\u062f \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631.","Postal Address":"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0628\u0631\u064a\u062f\u064a","Company":"\u0634\u0631\u0643\u0629","Shipping Address":"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0634\u062d\u0646","Shipping phone number.":"\u0631\u0642\u0645 \u0647\u0627\u062a\u0641 \u0627\u0644\u0634\u062d\u0646.","Shipping First Address.":"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0634\u062d\u0646 \u0627\u0644\u0623\u0648\u0644.","Shipping Second Address.":"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0634\u062d\u0646 \u0627\u0644\u062b\u0627\u0646\u064a.","Shipping Country.":"\u0628\u0644\u062f \u0627\u0644\u0634\u062d\u0646.","Account Credit":"\u0627\u0626\u062a\u0645\u0627\u0646 \u0627\u0644\u062d\u0633\u0627\u0628","Owed Amount":"\u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0645\u0645\u0644\u0648\u0643","Purchase Amount":"\u0645\u0628\u0644\u063a \u0627\u0644\u0634\u0631\u0627\u0621","Delete a customers":"\u062d\u0630\u0641 \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Delete Selected Customers":"\u062d\u0630\u0641 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u0645\u062d\u062f\u062f\u064a\u0646","Customer Groups List":"\u0642\u0627\u0626\u0645\u0629 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Display all Customers Groups.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621.","No Customers Groups has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0639\u0645\u0644\u0627\u0621","Add a new Customers Group":"\u0625\u0636\u0627\u0641\u0629 \u0645\u062c\u0645\u0648\u0639\u0629 \u0639\u0645\u0644\u0627\u0621 \u062c\u062f\u064a\u062f\u0629","Create a new Customers Group":"\u0623\u0646\u0634\u0626 \u0645\u062c\u0645\u0648\u0639\u0629 \u0639\u0645\u0644\u0627\u0621 \u062c\u062f\u064a\u062f\u0629","Register a new Customers Group and save it.":"\u0633\u062c\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0639\u0645\u0644\u0627\u0621 \u062c\u062f\u064a\u062f\u0629 \u0648\u0627\u062d\u0641\u0638\u0647\u0627.","Edit Customers Group":"\u062a\u062d\u0631\u064a\u0631 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Modify Customers group.":"\u062a\u0639\u062f\u064a\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621.","Return to Customers Groups":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Reward System":"\u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a","Select which Reward system applies to the group":"\u062d\u062f\u062f \u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a \u0627\u0644\u0630\u064a \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629","Minimum Credit Amount":"\u0627\u0644\u062d\u062f \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646","A brief description about what this group is about":"\u0648\u0635\u0641 \u0645\u0648\u062c\u0632 \u0644\u0645\u0627 \u062a\u062f\u0648\u0631 \u062d\u0648\u0644\u0647 \u0647\u0630\u0647 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629","Created On":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0639\u0644\u0649","Customer Orders List":"\u0642\u0627\u0626\u0645\u0629 \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Display all customer orders.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621.","No customer orders has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Add a new customer order":"\u0623\u0636\u0641 \u0637\u0644\u0628 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f","Create a new customer order":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0637\u0644\u0628 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f","Register a new customer order and save it.":"\u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0637\u0644\u0628 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.","Edit customer order":"\u062a\u062d\u0631\u064a\u0631 \u0637\u0644\u0628 \u0627\u0644\u0639\u0645\u064a\u0644","Modify Customer Order.":"\u062a\u0639\u062f\u064a\u0644 \u0637\u0644\u0628 \u0627\u0644\u0639\u0645\u064a\u0644.","Return to Customer Orders":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Created at":"\u0623\u0646\u0634\u0626\u062a \u0641\u064a","Customer Id":"\u0647\u0648\u064a\u0629 \u0627\u0644\u0632\u0628\u0648\u0646","Discount Percentage":"\u0646\u0633\u0628\u0629 \u0627\u0644\u062e\u0635\u0645","Discount Type":"\u0646\u0648\u0639 \u0627\u0644\u062e\u0635\u0645","Final Payment Date":"\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0646\u0647\u0627\u0626\u064a","Id":"\u0647\u0648\u064a\u0629 \u0634\u062e\u0635\u064a\u0629","Process Status":"\u062d\u0627\u0644\u0629 \u0627\u0644\u0639\u0645\u0644\u064a\u0629","Shipping Rate":"\u0633\u0639\u0631 \u0627\u0644\u0634\u062d\u0646","Shipping Type":"\u0646\u0648\u0639 \u0627\u0644\u0634\u062d\u0646","Title":"\u0639\u0646\u0648\u0627\u0646","Total installments":"\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0623\u0642\u0633\u0627\u0637","Updated at":"\u062a\u0645 \u0627\u0644\u062a\u062d\u062f\u064a\u062b \u0641\u064a","Uuid":"Uuid","Voidance Reason":"\u0633\u0628\u0628 \u0627\u0644\u0625\u0628\u0637\u0627\u0644","Customer Rewards List":"\u0642\u0627\u0626\u0645\u0629 \u0645\u0643\u0627\u0641\u0622\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Display all customer rewards.":"\u0627\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0645\u0643\u0627\u0641\u0622\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621.","No customer rewards has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0645\u0643\u0627\u0641\u0622\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Add a new customer reward":"\u0623\u0636\u0641 \u0645\u0643\u0627\u0641\u0623\u0629 \u062c\u062f\u064a\u062f\u0629 \u0644\u0644\u0639\u0645\u064a\u0644","Create a new customer reward":"\u0623\u0646\u0634\u0626 \u0645\u0643\u0627\u0641\u0623\u0629 \u062c\u062f\u064a\u062f\u0629 \u0644\u0644\u0639\u0645\u064a\u0644","Register a new customer reward and save it.":"\u0633\u062c\u0644 \u0645\u0643\u0627\u0641\u0623\u0629 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647\u0627.","Edit customer reward":"\u062a\u062d\u0631\u064a\u0631 \u0645\u0643\u0627\u0641\u0623\u0629 \u0627\u0644\u0639\u0645\u064a\u0644","Modify Customer Reward.":"\u062a\u0639\u062f\u064a\u0644 \u0645\u0643\u0627\u0641\u0623\u0629 \u0627\u0644\u0639\u0645\u064a\u0644.","Return to Customer Rewards":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u0643\u0627\u0641\u0622\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Reward Name":"\u0627\u0633\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629","Last Update":"\u0627\u062e\u0631 \u062a\u062d\u062f\u064a\u062b","All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.":"\u062c\u0645\u064a\u0639 \u0627\u0644\u0643\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0645\u0631\u062a\u0628\u0637\u0629 \u0628\u0647\u0630\u0647 \u0627\u0644\u0641\u0626\u0629 \u0633\u062a\u0646\u062a\u062c \u0625\u0645\u0627 \"credit\" or \"debit\" to the cash flow history.","Account":"\u062d\u0633\u0627\u0628","Provide the accounting number for this category.":"\u0623\u062f\u062e\u0644 \u0631\u0642\u0645 \u0627\u0644\u0645\u062d\u0627\u0633\u0628\u0629 \u0644\u0647\u0630\u0647 \u0627\u0644\u0641\u0626\u0629.","Active":"\u0646\u0634\u064a\u0637","Users Group":"\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646","None":"\u0644\u0627 \u0623\u062d\u062f","Recurring":"\u064a\u062a\u0643\u0631\u0631","Start of Month":"\u0628\u062f\u0627\u064a\u0629 \u0627\u0644\u0634\u0647\u0631","Mid of Month":"\u0645\u0646\u062a\u0635\u0641 \u0627\u0644\u0634\u0647\u0631","End of Month":"\u0646\u0647\u0627\u064a\u0629 \u0627\u0644\u0634\u0647\u0631","X days Before Month Ends":"X \u064a\u0648\u0645 \u0642\u0628\u0644 \u0646\u0647\u0627\u064a\u0629 \u0627\u0644\u0634\u0647\u0631","X days After Month Starts":"X \u064a\u0648\u0645 \u0628\u0639\u062f \u0628\u062f\u0627\u064a\u0629 \u0627\u0644\u0634\u0647\u0631","Occurrence":"\u062d\u0627\u062f\u062b\u0629","Occurrence Value":"\u0642\u064a\u0645\u0629 \u0627\u0644\u062d\u062f\u0648\u062b","Must be used in case of X days after month starts and X days before month ends.":"\u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647 \u0641\u064a \u062d\u0627\u0644\u0629 X \u064a\u0648\u0645\u064b\u0627 \u0628\u0639\u062f \u0628\u062f\u0627\u064a\u0629 \u0627\u0644\u0634\u0647\u0631 \u0648 X \u064a\u0648\u0645\u064b\u0627 \u0642\u0628\u0644 \u0646\u0647\u0627\u064a\u0629 \u0627\u0644\u0634\u0647\u0631.","Category":"\u0641\u0626\u0629","Month Starts":"\u064a\u0628\u062f\u0623 \u0627\u0644\u0634\u0647\u0631","Month Middle":"\u0645\u0646\u062a\u0635\u0641 \u0627\u0644\u0634\u0647\u0631","Month Ends":"\u064a\u0646\u062a\u0647\u064a \u0627\u0644\u0634\u0647\u0631","X Days Before Month Ends":"X \u064a\u0648\u0645 \u0642\u0628\u0644 \u0646\u0647\u0627\u064a\u0629 \u0627\u0644\u0634\u0647\u0631","Hold Orders List":"\u0642\u0627\u0626\u0645\u0629 \u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631","Display all hold orders.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u062d\u062c\u0632.","No hold orders has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u062d\u062c\u0632","Add a new hold order":"\u0623\u0636\u0641 \u0623\u0645\u0631 \u062d\u062c\u0632 \u062c\u062f\u064a\u062f","Create a new hold order":"\u0625\u0646\u0634\u0627\u0621 \u0623\u0645\u0631 \u062d\u062c\u0632 \u062c\u062f\u064a\u062f","Register a new hold order and save it.":"\u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0623\u0645\u0631 \u062a\u0639\u0644\u064a\u0642 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.","Edit hold order":"\u062a\u062d\u0631\u064a\u0631 \u0623\u0645\u0631 \u0627\u0644\u062d\u062c\u0632","Modify Hold Order.":"\u062a\u0639\u062f\u064a\u0644 \u0623\u0645\u0631 \u0627\u0644\u062d\u062c\u0632.","Return to Hold Orders":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u062d\u062c\u0632","Updated At":"\u062a\u0645 \u0627\u0644\u062a\u062d\u062f\u064a\u062b \u0641\u064a","Restrict the orders by the creation date.":"\u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0628\u062d\u0644\u0648\u0644 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0625\u0646\u0634\u0627\u0621.","Created Between":"\u062e\u0644\u0642\u062a \u0628\u064a\u0646","Restrict the orders by the payment status.":"\u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0645\u0646 \u062e\u0644\u0627\u0644 \u062d\u0627\u0644\u0629 \u0627\u0644\u062f\u0641\u0639.","Voided":"\u0628\u0627\u0637\u0644","Due With Payment":"\u0645\u0633\u062a\u062d\u0642 \u0627\u0644\u062f\u0641\u0639","Restrict the orders by the author.":"\u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0624\u0644\u0641.","Restrict the orders by the customer.":"\u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0639\u0645\u064a\u0644.","Customer Phone":"\u0647\u0627\u062a\u0641 \u0627\u0644\u0639\u0645\u064a\u0644","Restrict orders using the customer phone number.":"\u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0631\u0642\u0645 \u0647\u0627\u062a\u0641 \u0627\u0644\u0639\u0645\u064a\u0644.","Restrict the orders to the cash registers.":"\u062d\u0635\u0631 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0641\u064a \u0623\u062c\u0647\u0632\u0629 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u0646\u0642\u062f.","Orders List":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0637\u0644\u0628\u0627\u062a","Display all orders.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0637\u0644\u0628\u0627\u062a.","No orders has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0623\u0648\u0627\u0645\u0631","Add a new order":"\u0623\u0636\u0641 \u0637\u0644\u0628\u064b\u0627 \u062c\u062f\u064a\u062f\u064b\u0627","Create a new order":"\u0623\u0646\u0634\u0626 \u0637\u0644\u0628\u064b\u0627 \u062c\u062f\u064a\u062f\u064b\u0627","Register a new order and save it.":"\u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0637\u0644\u0628 \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.","Edit order":"\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0623\u0645\u0631","Modify Order.":"\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u062a\u0631\u062a\u064a\u0628.","Return to Orders":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0637\u0644\u0628\u0627\u062a","Discount Rate":"\u0645\u0639\u062f\u0644 \u0627\u0644\u062e\u0635\u0645","The order and the attached products has been deleted.":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0637\u0644\u0628 \u0648\u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0631\u0641\u0642\u0629.","Invoice":"\u0641\u0627\u062a\u0648\u0631\u0629","Receipt":"\u0625\u064a\u0635\u0627\u0644","Refund Receipt":"\u0625\u064a\u0635\u0627\u0644 \u0627\u0644\u0627\u0633\u062a\u0631\u062f\u0627\u062f","Order Instalments List":"\u0642\u0627\u0626\u0645\u0629 \u0623\u0642\u0633\u0627\u0637 \u0627\u0644\u0646\u0638\u0627\u0645","Display all Order Instalments.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0623\u0642\u0633\u0627\u0637 \u0627\u0644\u0637\u0644\u0628.","No Order Instalment has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0623\u0642\u0633\u0627\u0637 \u0644\u0644\u0637\u0644\u0628","Add a new Order Instalment":"\u0623\u0636\u0641 \u062a\u0642\u0633\u064a\u0637 \u0623\u0645\u0631 \u062c\u062f\u064a\u062f","Create a new Order Instalment":"\u0625\u0646\u0634\u0627\u0621 \u062a\u0642\u0633\u064a\u0637 \u0623\u0645\u0631 \u062c\u062f\u064a\u062f","Register a new Order Instalment and save it.":"\u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0637\u0644\u0628 \u062c\u062f\u064a\u062f \u0628\u0627\u0644\u062a\u0642\u0633\u064a\u0637 \u0648\u062d\u0641\u0638\u0647.","Edit Order Instalment":"\u062a\u062d\u0631\u064a\u0631 \u062a\u0642\u0633\u064a\u0637 \u0627\u0644\u0637\u0644\u0628","Modify Order Instalment.":"\u062a\u0639\u062f\u064a\u0644 \u062a\u0642\u0633\u064a\u0637 \u0627\u0644\u0637\u0644\u0628.","Return to Order Instalment":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u062a\u0642\u0633\u064a\u0637 \u0627\u0644\u0637\u0644\u0628","Order Id":"\u0631\u0642\u0645 \u0627\u0644\u062a\u0639\u0631\u064a\u0641 \u0627\u0644\u062e\u0627\u0635 \u0628\u0627\u0644\u0637\u0644\u0628","Payment Types List":"\u0642\u0627\u0626\u0645\u0629 \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u062f\u0641\u0639","Display all payment types.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u062f\u0641\u0639.","No payment types has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0623\u0646\u0648\u0627\u0639 \u062f\u0641\u0639","Add a new payment type":"\u0623\u0636\u0641 \u0646\u0648\u0639 \u062f\u0641\u0639 \u062c\u062f\u064a\u062f","Create a new payment type":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0646\u0648\u0639 \u062f\u0641\u0639 \u062c\u062f\u064a\u062f","Register a new payment type and save it.":"\u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0646\u0648\u0639 \u062f\u0641\u0639 \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.","Edit payment type":"\u062a\u062d\u0631\u064a\u0631 \u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639","Modify Payment Type.":"\u062a\u0639\u062f\u064a\u0644 \u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639.","Return to Payment Types":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u062f\u0641\u0639","Label":"\u0645\u0644\u0635\u0642","Provide a label to the resource.":"\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u062a\u0633\u0645\u064a\u0629 \u0644\u0644\u0645\u0648\u0631\u062f.","Identifier":"\u0627\u0644\u0645\u0639\u0631\u0641","A payment type having the same identifier already exists.":"\u064a\u0648\u062c\u062f \u0646\u0648\u0639 \u062f\u0641\u0639 \u0644\u0647 \u0646\u0641\u0633 \u0627\u0644\u0645\u0639\u0631\u0641 \u0628\u0627\u0644\u0641\u0639\u0644.","Unable to delete a read-only payments type.":"\u062a\u0639\u0630\u0631 \u062d\u0630\u0641 \u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639 \u0644\u0644\u0642\u0631\u0627\u0621\u0629 \u0641\u0642\u0637.","Readonly":"\u064a\u0642\u0631\u0623 \u0641\u0642\u0637","Procurements List":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a","Display all procurements.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.","No procurements has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u0634\u062a\u0631\u064a\u0627\u062a","Add a new procurement":"\u0625\u0636\u0627\u0641\u0629 \u0639\u0645\u0644\u064a\u0629 \u0634\u0631\u0627\u0621 \u062c\u062f\u064a\u062f\u0629","Create a new procurement":"\u0625\u0646\u0634\u0627\u0621 \u0639\u0645\u0644\u064a\u0629 \u0634\u0631\u0627\u0621 \u062c\u062f\u064a\u062f\u0629","Register a new procurement and save it.":"\u062a\u0633\u062c\u064a\u0644 \u0645\u0634\u062a\u0631\u064a\u0627\u062a \u062c\u062f\u064a\u062f\u0629 \u0648\u062d\u0641\u0638\u0647\u0627.","Edit procurement":"\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a","Modify Procurement.":"\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.","Return to Procurements":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a","Provider Id":"\u0645\u0639\u0631\u0651\u0641 \u0627\u0644\u0645\u0648\u0641\u0631","Total Items":"\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0639\u0646\u0627\u0635\u0631","Provider":"\u0645\u0632\u0648\u062f","Procurement Products List":"\u0642\u0627\u0626\u0645\u0629 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a","Display all procurement products.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.","No procurement products has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u0646\u062a\u062c\u0627\u062a \u0634\u0631\u0627\u0621","Add a new procurement product":"\u0623\u0636\u0641 \u0645\u0646\u062a\u062c \u062a\u062f\u0628\u064a\u0631 \u062c\u062f\u064a\u062f","Create a new procurement product":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0646\u062a\u062c \u062a\u062f\u0628\u064a\u0631 \u062c\u062f\u064a\u062f","Register a new procurement product and save it.":"\u062a\u0633\u062c\u064a\u0644 \u0645\u0646\u062a\u062c \u0634\u0631\u0627\u0621 \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.","Edit procurement product":"\u062a\u062d\u0631\u064a\u0631 \u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a","Modify Procurement Product.":"\u062a\u0639\u062f\u064a\u0644 \u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.","Return to Procurement Products":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a","Define what is the expiration date of the product.":"\u062d\u062f\u062f \u0645\u0627 \u0647\u0648 \u062a\u0627\u0631\u064a\u062e \u0627\u0646\u062a\u0647\u0627\u0621 \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.","On":"\u062a\u0634\u063a\u064a\u0644","Category Products List":"\u0642\u0627\u0626\u0645\u0629 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0641\u0626\u0629","Display all category products.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0641\u0626\u0627\u062a.","No category products has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0645\u0646\u062a\u062c\u0627\u062a \u0641\u0626\u0629","Add a new category product":"\u0623\u0636\u0641 \u0645\u0646\u062a\u062c \u0641\u0626\u0629 \u062c\u062f\u064a\u062f","Create a new category product":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0646\u062a\u062c \u0641\u0626\u0629 \u062c\u062f\u064a\u062f","Register a new category product and save it.":"\u0633\u062c\u0644 \u0645\u0646\u062a\u062c \u0641\u0626\u0629 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.","Edit category product":"\u062a\u062d\u0631\u064a\u0631 \u0641\u0626\u0629 \u0627\u0644\u0645\u0646\u062a\u062c","Modify Category Product.":"\u062a\u0639\u062f\u064a\u0644 \u0641\u0626\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.","Return to Category Products":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0641\u0626\u0629 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a","No Parent":"\u0644\u0627 \u064a\u0648\u062c\u062f \u0623\u0635\u0644","Preview":"\u0645\u0639\u0627\u064a\u0646\u0629","Provide a preview url to the category.":"\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0645\u0639\u0627\u064a\u0646\u0629 \u0644\u0644\u0641\u0626\u0629.","Displays On POS":"\u064a\u0639\u0631\u0636 \u0641\u064a \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639","Parent":"\u0627\u0644\u0623\u0628\u0648\u064a\u0646","If this category should be a child category of an existing category":"\u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0647\u0630\u0647 \u0627\u0644\u0641\u0626\u0629 \u0641\u0626\u0629 \u0641\u0631\u0639\u064a\u0629 \u0645\u0646 \u0641\u0626\u0629 \u0645\u0648\u062c\u0648\u062f\u0629","Total Products":"\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a","Products List":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a","Display all products.":"\u0639\u0631\u0636 \u0643\u0644 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a.","No products has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u0646\u062a\u062c\u0627\u062a","Add a new product":"\u0623\u0636\u0641 \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f","Create a new product":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f","Register a new product and save it.":"\u062a\u0633\u062c\u064a\u0644 \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.","Edit product":"\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0645\u0646\u062a\u062c","Modify Product.":"\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u0646\u062a\u062c.","Return to Products":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a","Assigned Unit":"\u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u062e\u0635\u0635\u0629","The assigned unit for sale":"\u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u062e\u0635\u0635\u0629 \u0644\u0644\u0628\u064a\u0639","Define the regular selling price.":"\u062a\u062d\u062f\u064a\u062f \u0633\u0639\u0631 \u0627\u0644\u0628\u064a\u0639 \u0627\u0644\u0639\u0627\u062f\u064a.","Define the wholesale price.":"\u062a\u062d\u062f\u064a\u062f \u0633\u0639\u0631 \u0627\u0644\u062c\u0645\u0644\u0629.","Preview Url":"\u0645\u0639\u0627\u064a\u0646\u0629 \u0639\u0646\u0648\u0627\u0646 Url","Provide the preview of the current unit.":"\u0642\u062f\u0645 \u0645\u0639\u0627\u064a\u0646\u0629 \u0644\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.","Identification":"\u0647\u0648\u064a\u0629","Define the barcode value. Focus the cursor here before scanning the product.":"\u062d\u062f\u062f \u0642\u064a\u0645\u0629 \u0627\u0644\u0628\u0627\u0631\u0643\u0648\u062f. \u0631\u0643\u0632 \u0627\u0644\u0645\u0624\u0634\u0631 \u0647\u0646\u0627 \u0642\u0628\u0644 \u0645\u0633\u062d \u0627\u0644\u0645\u0646\u062a\u062c.","Define the barcode type scanned.":"\u062a\u062d\u062f\u064a\u062f \u0646\u0648\u0639 \u0627\u0644\u0628\u0627\u0631\u0643\u0648\u062f \u0627\u0644\u0645\u0645\u0633\u0648\u062d.","EAN 8":"\u0631\u0642\u0645 EAN 8","EAN 13":"\u0631\u0642\u0645 EAN 13","Codabar":"\u0643\u0648\u062f\u0627\u0628\u0627\u0631","Code 128":"\u0627\u0644\u0631\u0645\u0632 128","Code 39":"\u0627\u0644\u0631\u0645\u0632 39","Code 11":"\u0627\u0644\u0631\u0645\u0632 11","UPC A":"\u0627\u062a\u062d\u0627\u062f \u0627\u0644\u0648\u0637\u0646\u064a\u064a\u0646 \u0627\u0644\u0643\u0648\u0646\u063a\u0648\u0644\u064a\u064a\u0646 \u0623","UPC E":"\u0627\u062a\u062d\u0627\u062f \u0627\u0644\u0648\u0637\u0646\u064a\u064a\u0646 \u0627\u0644\u0643\u0648\u0646\u063a\u0648\u0644\u064a\u064a\u0646 E","Barcode Type":"\u0646\u0648\u0639 \u0627\u0644\u0628\u0627\u0631\u0643\u0648\u062f","Select to which category the item is assigned.":"\u062d\u062f\u062f \u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u062a\u064a \u062a\u0645 \u062a\u062e\u0635\u064a\u0635 \u0627\u0644\u0639\u0646\u0635\u0631 \u0625\u0644\u064a\u0647\u0627.","Materialized Product":"\u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0627\u062f\u064a","Dematerialized Product":"\u0627\u0644\u0645\u0646\u062a\u062c \u063a\u064a\u0631 \u0627\u0644\u0645\u0627\u062f\u064a","Define the product type. Applies to all variations.":"\u062d\u062f\u062f \u0646\u0648\u0639 \u0627\u0644\u0645\u0646\u062a\u062c. \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u062c\u0645\u064a\u0639 \u0627\u0644\u0627\u062e\u062a\u0644\u0627\u0641\u0627\u062a.","Product Type":"\u0646\u0648\u0639 \u0627\u0644\u0645\u0646\u062a\u062c","Define a unique SKU value for the product.":"\u062d\u062f\u062f \u0642\u064a\u0645\u0629 SKU \u0641\u0631\u064a\u062f\u0629 \u0644\u0644\u0645\u0646\u062a\u062c.","On Sale":"\u0644\u0644\u0628\u064a\u0639","Hidden":"\u0645\u062e\u062a\u0641\u064a","Define whether the product is available for sale.":"\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0627\u0644\u0645\u0646\u062a\u062c \u0645\u062a\u0627\u062d\u064b\u0627 \u0644\u0644\u0628\u064a\u0639.","Enable the stock management on the product. Will not work for service or uncountable products.":"\u062a\u0645\u0643\u064a\u0646 \u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c. \u0644\u0646 \u062a\u0639\u0645\u0644 \u0644\u0644\u062e\u062f\u0645\u0629 \u0623\u0648 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u062a\u064a \u0644\u0627 \u062a\u0639\u062f \u0648\u0644\u0627 \u062a\u062d\u0635\u0649.","Stock Management Enabled":"\u062a\u0645\u0643\u064a\u0646 \u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0645\u062e\u0632\u0648\u0646","Units":"\u0627\u0644\u0648\u062d\u062f\u0627\u062a","Accurate Tracking":"\u062a\u062a\u0628\u0639 \u062f\u0642\u064a\u0642","What unit group applies to the actual item. This group will apply during the procurement.":"\u0645\u0627 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a \u0627\u0644\u062a\u064a \u062a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0641\u0639\u0644\u064a. \u0633\u064a\u062a\u0645 \u062a\u0637\u0628\u064a\u0642 \u0647\u0630\u0647 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0623\u062b\u0646\u0627\u0621 \u0627\u0644\u0634\u0631\u0627\u0621.","Unit Group":"\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0629","Determine the unit for sale.":"\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0648\u062d\u062f\u0629 \u0644\u0644\u0628\u064a\u0639.","Selling Unit":"\u0648\u062d\u062f\u0629 \u0627\u0644\u0628\u064a\u0639","Expiry":"\u0627\u0646\u0642\u0636\u0627\u0621","Product Expires":"\u0627\u0646\u062a\u0647\u0627\u0621 \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0645\u0646\u062a\u062c","Set to \"No\" expiration time will be ignored.":"\u062a\u0639\u064a\u064a\u0646 \u0625\u0644\u0649 \"\u0644\u0627\" \u0633\u064a\u062a\u0645 \u062a\u062c\u0627\u0647\u0644 \u0648\u0642\u062a \u0627\u0646\u062a\u0647\u0627\u0621 \u0627\u0644\u0635\u0644\u0627\u062d\u064a\u0629.","Prevent Sales":"\u0645\u0646\u0639 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a","Allow Sales":"\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a","Determine the action taken while a product has expired.":"\u062d\u062f\u062f \u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u0630\u064a \u062a\u0645 \u0627\u062a\u062e\u0627\u0630\u0647 \u0623\u062b\u0646\u0627\u0621 \u0627\u0646\u062a\u0647\u0627\u0621 \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.","On Expiration":"\u0639\u0646\u062f \u0627\u0646\u062a\u0647\u0627\u0621 \u0627\u0644\u0635\u0644\u0627\u062d\u064a\u0629","Select the tax group that applies to the product\/variation.":"\u062d\u062f\u062f \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u062a\u064a \u062a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c \/ \u0627\u0644\u062a\u0628\u0627\u064a\u0646.","Define what is the type of the tax.":"\u062a\u062d\u062f\u064a\u062f \u0646\u0648\u0639 \u0627\u0644\u0636\u0631\u064a\u0628\u0629.","Images":"\u0627\u0644\u0635\u0648\u0631","Image":"\u0635\u0648\u0631\u0629","Choose an image to add on the product gallery":"\u0627\u062e\u062a\u0631 \u0635\u0648\u0631\u0629 \u0644\u0625\u0636\u0627\u0641\u062a\u0647\u0627 \u0625\u0644\u0649 \u0645\u0639\u0631\u0636 \u0627\u0644\u0645\u0646\u062a\u062c","Is Primary":"\u0623\u0633\u0627\u0633\u064a","Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.":"\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0627\u0644\u0635\u0648\u0631\u0629 \u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0623\u0648\u0644\u064a\u0629. \u0625\u0630\u0627 \u0643\u0627\u0646 \u0647\u0646\u0627\u0643 \u0623\u0643\u062b\u0631 \u0645\u0646 \u0635\u0648\u0631\u0629 \u0623\u0633\u0627\u0633\u064a\u0629 \u0648\u0627\u062d\u062f\u0629 \u060c \u0641\u0633\u064a\u062a\u0645 \u0627\u062e\u062a\u064a\u0627\u0631 \u0635\u0648\u0631\u0629 \u0644\u0643.","Sku":"SKU","Materialized":"\u062a\u062a\u062d\u0642\u0642","Dematerialized":"\u063a\u064a\u0631 \u0645\u0627\u062f\u064a","Available":"\u0645\u062a\u0648\u0641\u0631\u0629","See Quantities":"\u0627\u0646\u0638\u0631 \u0627\u0644\u0643\u0645\u064a\u0627\u062a","See History":"\u0627\u0646\u0638\u0631 \u0627\u0644\u062a\u0627\u0631\u064a\u062e","Would you like to delete selected entries ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0627\u0644\u0645\u062f\u062e\u0644\u0627\u062a \u0627\u0644\u0645\u062e\u062a\u0627\u0631\u0629\u061f","Product Histories":"\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0645\u0646\u062a\u062c","Display all product histories.":"\u0639\u0631\u0636 \u0643\u0644 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0645\u0646\u062a\u062c.","No product histories has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u062a\u0627\u0631\u064a\u062e \u0645\u0646\u062a\u062c","Add a new product history":"\u0623\u0636\u0641 \u062a\u0627\u0631\u064a\u062e \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f","Create a new product history":"\u0625\u0646\u0634\u0627\u0621 \u062a\u0627\u0631\u064a\u062e \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f","Register a new product history and save it.":"\u0633\u062c\u0644 \u062a\u0627\u0631\u064a\u062e \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.","Edit product history":"\u062a\u062d\u0631\u064a\u0631 \u0645\u062d\u0641\u0648\u0638\u0627\u062a \u0627\u0644\u0645\u0646\u062a\u062c","Modify Product History.":"\u062a\u0639\u062f\u064a\u0644 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0645\u0646\u062a\u062c.","Return to Product Histories":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0645\u0646\u062a\u062c","After Quantity":"\u0628\u0639\u062f \u0627\u0644\u0643\u0645\u064a\u0629","Before Quantity":"\u0642\u0628\u0644 \u0627\u0644\u0643\u0645\u064a\u0629","Operation Type":"\u0646\u0648\u0639 \u0627\u0644\u0639\u0645\u0644\u064a\u0629","Order id":"\u0631\u0642\u0645 \u0627\u0644\u062a\u0639\u0631\u064a\u0641 \u0627\u0644\u062e\u0627\u0635 \u0628\u0627\u0644\u0637\u0644\u0628","Procurement Id":"\u0645\u0639\u0631\u0651\u0641 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a","Procurement Product Id":"\u0645\u0639\u0631\u0651\u0641 \u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a","Product Id":"\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0646\u062a\u062c","Unit Id":"\u0645\u0639\u0631\u0641 \u0627\u0644\u0648\u062d\u062f\u0629","P. Quantity":"P. \u0627\u0644\u0643\u0645\u064a\u0629","N. Quantity":"N. \u0627\u0644\u0643\u0645\u064a\u0629","Stocked":"\u0645\u062e\u0632\u0648\u0646","Defective":"\u0645\u0639\u064a\u0628","Deleted":"\u062a\u0645 \u0627\u0644\u062d\u0630\u0641","Removed":"\u0625\u0632\u0627\u0644\u0629","Returned":"\u0639\u0627\u062f","Sold":"\u0645\u0628\u0627\u0639","Lost":"\u0636\u0627\u0626\u0639","Added":"\u0645\u0636\u0627\u0641","Incoming Transfer":"\u062a\u062d\u0648\u064a\u0644 \u0648\u0627\u0631\u062f","Outgoing Transfer":"\u062a\u062d\u0648\u064a\u0644 \u0635\u0627\u062f\u0631","Transfer Rejected":"\u062a\u0645 \u0631\u0641\u0636 \u0627\u0644\u062a\u062d\u0648\u064a\u0644","Transfer Canceled":"\u062a\u0645 \u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u062a\u062d\u0648\u064a\u0644","Void Return":"\u0639\u0648\u062f\u0629 \u0628\u0627\u0637\u0644\u0629","Adjustment Return":"\u0639\u0648\u062f\u0629 \u0627\u0644\u062a\u0639\u062f\u064a\u0644","Adjustment Sale":"\u0628\u064a\u0639 \u0627\u0644\u062a\u0639\u062f\u064a\u0644","Product Unit Quantities List":"\u0642\u0627\u0626\u0645\u0629 \u0643\u0645\u064a\u0627\u062a \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c","Display all product unit quantities.":"\u0639\u0631\u0636 \u0643\u0644 \u0643\u0645\u064a\u0627\u062a \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.","No product unit quantities has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0643\u0645\u064a\u0627\u062a \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c","Add a new product unit quantity":"\u0623\u0636\u0641 \u0643\u0645\u064a\u0629 \u0648\u062d\u062f\u0629 \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f\u0629","Create a new product unit quantity":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0643\u0645\u064a\u0629 \u0648\u062d\u062f\u0629 \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f\u0629","Register a new product unit quantity and save it.":"\u0633\u062c\u0644 \u0643\u0645\u064a\u0629 \u0648\u062d\u062f\u0629 \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f\u0629 \u0648\u0627\u062d\u0641\u0638\u0647\u0627.","Edit product unit quantity":"\u062a\u062d\u0631\u064a\u0631 \u0643\u0645\u064a\u0629 \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c","Modify Product Unit Quantity.":"\u062a\u0639\u062f\u064a\u0644 \u0643\u0645\u064a\u0629 \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.","Return to Product Unit Quantities":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0643\u0645\u064a\u0627\u062a \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c","Created_at":"\u0623\u0646\u0634\u0626\u062a \u0641\u064a","Product id":"\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0646\u062a\u062c","Updated_at":"\u062a\u0645 \u0627\u0644\u062a\u062d\u062f\u064a\u062b \u0641\u064a","Providers List":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0648\u0641\u0631\u064a\u0646","Display all providers.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0648\u0641\u0631\u064a\u0646.","No providers has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u0642\u062f\u0645\u064a","Add a new provider":"\u0625\u0636\u0627\u0641\u0629 \u0645\u0632\u0648\u062f \u062c\u062f\u064a\u062f","Create a new provider":"\u0625\u0646\u0634\u0627\u0621 \u0645\u0632\u0648\u062f \u062c\u062f\u064a\u062f","Register a new provider and save it.":"\u0633\u062c\u0644 \u0645\u0632\u0648\u062f\u064b\u0627 \u062c\u062f\u064a\u062f\u064b\u0627 \u0648\u0627\u062d\u0641\u0638\u0647.","Edit provider":"\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0645\u0648\u0641\u0631","Modify Provider.":"\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u0632\u0648\u062f.","Return to Providers":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u0642\u062f\u0645\u064a \u0627\u0644\u062e\u062f\u0645\u0627\u062a","Provide the provider email. Might be used to send automated email.":"\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0644\u0644\u0645\u0648\u0641\u0631. \u0631\u0628\u0645\u0627 \u062a\u0633\u062a\u062e\u062f\u0645 \u0644\u0625\u0631\u0633\u0627\u0644 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0622\u0644\u064a.","Contact phone number for the provider. Might be used to send automated SMS notifications.":"\u0631\u0642\u0645 \u0647\u0627\u062a\u0641 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0644\u0645\u0632\u0648\u062f. \u064a\u0645\u0643\u0646 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u0627 \u0644\u0625\u0631\u0633\u0627\u0644 \u0625\u0634\u0639\u0627\u0631\u0627\u062a \u0627\u0644\u0631\u0633\u0627\u0626\u0644 \u0627\u0644\u0642\u0635\u064a\u0631\u0629 \u0627\u0644\u0622\u0644\u064a\u0629.","First address of the provider.":"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0623\u0648\u0644 \u0644\u0644\u0645\u0632\u0648\u062f.","Second address of the provider.":"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u062b\u0627\u0646\u064a \u0644\u0644\u0645\u0632\u0648\u062f.","Further details about the provider":"\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 \u062d\u0648\u0644 \u0627\u0644\u0645\u0632\u0648\u062f","Amount Due":"\u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0645\u0633\u062a\u062d\u0642","Amount Paid":"\u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0645\u062f\u0641\u0648\u0639","See Procurements":"\u0627\u0646\u0638\u0631 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a","See Products":"\u0627\u0646\u0638\u0631 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a","Provider Procurements List":"\u0642\u0627\u0626\u0645\u0629 \u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u0645\u0632\u0648\u062f","Display all provider procurements.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u0645\u0632\u0648\u062f.","No provider procurements has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0645\u0632\u0648\u062f","Add a new provider procurement":"\u0625\u0636\u0627\u0641\u0629 \u0634\u0631\u0627\u0621 \u0645\u0632\u0648\u062f \u062c\u062f\u064a\u062f","Create a new provider procurement":"\u0625\u0646\u0634\u0627\u0621 \u0634\u0631\u0627\u0621 \u0645\u0632\u0648\u062f \u062c\u062f\u064a\u062f","Register a new provider procurement and save it.":"\u0633\u062c\u0644 \u0634\u0631\u0627\u0621 \u0645\u0632\u0648\u062f \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.","Edit provider procurement":"\u062a\u062d\u0631\u064a\u0631 \u0634\u0631\u0627\u0621 \u0645\u0632\u0648\u062f","Modify Provider Procurement.":"\u062a\u0639\u062f\u064a\u0644 \u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u0645\u0648\u0641\u0631.","Return to Provider Procurements":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u0645\u0632\u0648\u062f","Delivered On":"\u062a\u0645 \u0627\u0644\u062a\u0633\u0644\u064a\u0645","Delivery":"\u062a\u0648\u0635\u064a\u0644","Items":"\u0627\u0644\u0639\u0646\u0627\u0635\u0631","Provider Products List":"\u0642\u0627\u0626\u0645\u0629 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0648\u0641\u0631","Display all Provider Products.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0648\u0641\u0631.","No Provider Products has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u0646\u062a\u062c\u0627\u062a \u0645\u0648\u0641\u0631","Add a new Provider Product":"\u0623\u0636\u0641 \u0645\u0646\u062a\u062c \u0645\u0648\u0641\u0631 \u062c\u062f\u064a\u062f","Create a new Provider Product":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0646\u062a\u062c \u0645\u0648\u0641\u0631 \u062c\u062f\u064a\u062f","Register a new Provider Product and save it.":"\u0633\u062c\u0644 \u0645\u0646\u062a\u062c \u0645\u0648\u0641\u0631 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.","Edit Provider Product":"\u062a\u062d\u0631\u064a\u0631 \u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0648\u0641\u0631","Modify Provider Product.":"\u062a\u0639\u062f\u064a\u0644 \u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0648\u0641\u0631.","Return to Provider Products":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0632\u0648\u062f","Registers List":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062a\u0633\u062c\u064a\u0644\u0627\u062a","Display all registers.":"\u0627\u0639\u0631\u0636 \u0643\u0644 \u0627\u0644\u0633\u062c\u0644\u0627\u062a.","No registers has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0633\u062c\u0644\u0627\u062a","Add a new register":"\u0625\u0636\u0627\u0641\u0629 \u0633\u062c\u0644 \u062c\u062f\u064a\u062f","Create a new register":"\u0625\u0646\u0634\u0627\u0621 \u0633\u062c\u0644 \u062c\u062f\u064a\u062f","Register a new register and save it.":"\u0633\u062c\u0644 \u0633\u062c\u0644\u0627 \u062c\u062f\u064a\u062f\u0627 \u0648\u0627\u062d\u0641\u0638\u0647.","Edit register":"\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u062a\u0633\u062c\u064a\u0644","Modify Register.":"\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u062a\u0633\u062c\u064a\u0644.","Return to Registers":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0633\u062c\u0644\u0627\u062a","Closed":"\u0645\u063a\u0644\u0642","Define what is the status of the register.":"\u062a\u062d\u062f\u064a\u062f \u0645\u0627 \u0647\u064a \u062d\u0627\u0644\u0629 \u0627\u0644\u0633\u062c\u0644.","Provide mode details about this cash register.":"\u062a\u0642\u062f\u064a\u0645 \u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0648\u0636\u0639 \u062d\u0648\u0644 \u0647\u0630\u0627 \u0627\u0644\u0633\u062c\u0644 \u0627\u0644\u0646\u0642\u062f\u064a.","Unable to delete a register that is currently in use":"\u062a\u0639\u0630\u0631 \u062d\u0630\u0641 \u0633\u062c\u0644 \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062d\u0627\u0644\u064a\u064b\u0627","Used By":"\u0627\u0633\u062a\u0639\u0645\u0644 \u0645\u0646 \u0642\u0628\u0644","Register History List":"\u0633\u062c\u0644 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062a\u0627\u0631\u064a\u062e","Display all register histories.":"\u0639\u0631\u0636 \u0643\u0644 \u0633\u062c\u0644\u0627\u062a \u0627\u0644\u062a\u0633\u062c\u064a\u0644.","No register histories has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0633\u062c\u0644\u0627\u062a \u0627\u0644\u062a\u0627\u0631\u064a\u062e","Add a new register history":"\u0625\u0636\u0627\u0641\u0629 \u0633\u062c\u0644 \u0633\u062c\u0644 \u062c\u062f\u064a\u062f","Create a new register history":"\u0625\u0646\u0634\u0627\u0621 \u0633\u062c\u0644 \u0633\u062c\u0644 \u062c\u062f\u064a\u062f","Register a new register history and save it.":"\u0633\u062c\u0644 \u0633\u062c\u0644 \u0633\u062c\u0644 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.","Edit register history":"\u062a\u062d\u0631\u064a\u0631 \u0633\u062c\u0644 \u0627\u0644\u0633\u062c\u0644","Modify Registerhistory.":"\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0633\u062c\u0644.","Return to Register History":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0633\u062c\u0644 \u0627\u0644\u062a\u0627\u0631\u064a\u062e","Register Id":"\u0645\u0639\u0631\u0641 \u0627\u0644\u062a\u0633\u062c\u064a\u0644","Action":"\u0639\u0645\u0644","Register Name":"\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u0627\u0633\u0645","Done At":"\u062a\u0645 \u0641\u064a","Reward Systems List":"\u0642\u0627\u0626\u0645\u0629 \u0623\u0646\u0638\u0645\u0629 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a","Display all reward systems.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0623\u0646\u0638\u0645\u0629 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a.","No reward systems has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u0646\u0638\u0645\u0629 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a","Add a new reward system":"\u0623\u0636\u0641 \u0646\u0638\u0627\u0645 \u0645\u0643\u0627\u0641\u0623\u0629 \u062c\u062f\u064a\u062f","Create a new reward system":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0646\u0638\u0627\u0645 \u062c\u062f\u064a\u062f \u0644\u0644\u0645\u0643\u0627\u0641\u0622\u062a","Register a new reward system and save it.":"\u0633\u062c\u0644 \u0646\u0638\u0627\u0645 \u0645\u0643\u0627\u0641\u0623\u0629 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.","Edit reward system":"\u062a\u062d\u0631\u064a\u0631 \u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a","Modify Reward System.":"\u062a\u0639\u062f\u064a\u0644 \u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a.","Return to Reward Systems":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0623\u0646\u0638\u0645\u0629 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a","From":"\u0645\u0646 \u0639\u0646\u062f","The interval start here.":"\u064a\u0628\u062f\u0623 \u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064a \u0647\u0646\u0627.","To":"\u0625\u0644\u0649","The interval ends here.":"\u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064a \u064a\u0646\u062a\u0647\u064a \u0647\u0646\u0627.","Points earned.":"\u0627\u0644\u0646\u0642\u0627\u0637 \u0627\u0644\u062a\u064a \u0623\u062d\u0631\u0632\u062a\u0647\u0627.","Coupon":"\u0642\u0633\u064a\u0645\u0629","Decide which coupon you would apply to the system.":"\u062d\u062f\u062f \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u062a\u064a \u062a\u0631\u064a\u062f \u062a\u0637\u0628\u064a\u0642\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0646\u0638\u0627\u0645.","This is the objective that the user should reach to trigger the reward.":"\u0647\u0630\u0627 \u0647\u0648 \u0627\u0644\u0647\u062f\u0641 \u0627\u0644\u0630\u064a \u064a\u062c\u0628 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u064a\u0647 \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629.","A short description about this system":"\u0648\u0635\u0641 \u0645\u0648\u062c\u0632 \u0639\u0646 \u0647\u0630\u0627 \u0627\u0644\u0646\u0638\u0627\u0645","Would you like to delete this reward system ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a \u0647\u0630\u0627\u061f","Delete Selected Rewards":"\u062d\u0630\u0641 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a \u0627\u0644\u0645\u062d\u062f\u062f\u0629","Would you like to delete selected rewards?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a \u0627\u0644\u0645\u062e\u062a\u0627\u0631\u0629\u061f","Roles List":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0623\u062f\u0648\u0627\u0631","Display all roles.":"\u0627\u0639\u0631\u0636 \u0643\u0644 \u0627\u0644\u0623\u062f\u0648\u0627\u0631.","No role has been registered.":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u062f\u0648\u0631.","Add a new role":"\u0623\u0636\u0641 \u062f\u0648\u0631\u064b\u0627 \u062c\u062f\u064a\u062f\u064b\u0627","Create a new role":"\u0623\u0646\u0634\u0626 \u062f\u0648\u0631\u064b\u0627 \u062c\u062f\u064a\u062f\u064b\u0627","Create a new role and save it.":"\u0623\u0646\u0634\u0626 \u062f\u0648\u0631\u064b\u0627 \u062c\u062f\u064a\u062f\u064b\u0627 \u0648\u0627\u062d\u0641\u0638\u0647.","Edit role":"\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u062f\u0648\u0631","Modify Role.":"\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u062f\u0648\u0631.","Return to Roles":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0623\u062f\u0648\u0627\u0631","Provide a name to the role.":"\u0623\u062f\u062e\u0644 \u0627\u0633\u0645\u064b\u0627 \u0644\u0644\u062f\u0648\u0631.","Should be a unique value with no spaces or special character":"\u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0642\u064a\u0645\u0629 \u0641\u0631\u064a\u062f\u0629 \u0628\u062f\u0648\u0646 \u0645\u0633\u0627\u0641\u0627\u062a \u0623\u0648 \u0623\u062d\u0631\u0641 \u062e\u0627\u0635\u0629","Store Dashboard":"\u062a\u062e\u0632\u064a\u0646 \u0644\u0648\u062d\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629","Cashier Dashboard":"\u0644\u0648\u062d\u0629 \u062a\u062d\u0643\u0645 \u0623\u0645\u064a\u0646 \u0627\u0644\u0635\u0646\u062f\u0648\u0642","Default Dashboard":"\u0644\u0648\u062d\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629","Provide more details about what this role is about.":"\u0642\u062f\u0645 \u0645\u0632\u064a\u062f\u064b\u0627 \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 \u062d\u0648\u0644 \u0645\u0648\u0636\u0648\u0639 \u0647\u0630\u0627 \u0627\u0644\u062f\u0648\u0631.","Unable to delete a system role.":"\u062a\u0639\u0630\u0631 \u062d\u0630\u0641 \u062f\u0648\u0631 \u0627\u0644\u0646\u0638\u0627\u0645.","Clone":"\u0627\u0633\u062a\u0646\u0633\u0627\u062e","Would you like to clone this role ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0633\u062a\u0646\u0633\u0627\u062e \u0647\u0630\u0627 \u0627\u0644\u062f\u0648\u0631\u061f","You do not have enough permissions to perform this action.":"\u0644\u064a\u0633 \u0644\u062f\u064a\u0643 \u0623\u0630\u0648\u0646\u0627\u062a \u0643\u0627\u0641\u064a\u0629 \u0644\u0644\u0642\u064a\u0627\u0645 \u0628\u0647\u0630\u0627 \u0627\u0644\u0625\u062c\u0631\u0627\u0621.","Taxes List":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628","Display all taxes.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0636\u0631\u0627\u0626\u0628.","No taxes has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0636\u0631\u0627\u0626\u0628","Add a new tax":"\u0623\u0636\u0641 \u0636\u0631\u064a\u0628\u0629 \u062c\u062f\u064a\u062f\u0629","Create a new tax":"\u0625\u0646\u0634\u0627\u0621 \u0636\u0631\u064a\u0628\u0629 \u062c\u062f\u064a\u062f\u0629","Register a new tax and save it.":"\u062a\u0633\u062c\u064a\u0644 \u0636\u0631\u064a\u0628\u0629 \u062c\u062f\u064a\u062f\u0629 \u0648\u062d\u0641\u0638\u0647\u0627.","Edit tax":"\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0636\u0631\u064a\u0628\u0629","Modify Tax.":"\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0636\u0631\u064a\u0628\u0629.","Return to Taxes":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0636\u0631\u0627\u0626\u0628","Provide a name to the tax.":"\u0623\u062f\u062e\u0644 \u0627\u0633\u0645\u064b\u0627 \u0644\u0644\u0636\u0631\u064a\u0628\u0629.","Assign the tax to a tax group.":"\u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0636\u0631\u064a\u0628\u064a\u0629.","Rate":"\u0645\u0639\u062f\u0644","Define the rate value for the tax.":"\u062a\u062d\u062f\u064a\u062f \u0642\u064a\u0645\u0629 \u0645\u0639\u062f\u0644 \u0627\u0644\u0636\u0631\u064a\u0628\u0629.","Provide a description to the tax.":"\u0642\u062f\u0645 \u0648\u0635\u0641\u064b\u0627 \u0644\u0644\u0636\u0631\u064a\u0628\u0629.","Taxes Groups List":"\u0642\u0627\u0626\u0645\u0629 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0636\u0631\u0627\u0626\u0628","Display all taxes groups.":"\u0627\u0639\u0631\u0636 \u0643\u0644 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0636\u0631\u0627\u0626\u0628.","No taxes groups has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0636\u0631\u0627\u0626\u0628","Add a new tax group":"\u0623\u0636\u0641 \u0645\u062c\u0645\u0648\u0639\u0629 \u0636\u0631\u064a\u0628\u064a\u0629 \u062c\u062f\u064a\u062f\u0629","Create a new tax group":"\u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0629 \u0636\u0631\u064a\u0628\u064a\u0629 \u062c\u062f\u064a\u062f\u0629","Register a new tax group and save it.":"\u0633\u062c\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0636\u0631\u064a\u0628\u064a\u0629 \u062c\u062f\u064a\u062f\u0629 \u0648\u0627\u062d\u0641\u0638\u0647\u0627.","Edit tax group":"\u062a\u062d\u0631\u064a\u0631 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628","Modify Tax Group.":"\u062a\u0639\u062f\u064a\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628.","Return to Taxes Groups":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0636\u0631\u0627\u0626\u0628","Provide a short description to the tax group.":"\u0642\u062f\u0645 \u0648\u0635\u0641\u064b\u0627 \u0645\u0648\u062c\u0632\u064b\u0627 \u200b\u200b\u0644\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u064a\u0628\u064a\u0629.","Units List":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a","Display all units.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0648\u062d\u062f\u0627\u062a.","No units has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0648\u062d\u062f\u0627\u062a","Add a new unit":"\u0623\u0636\u0641 \u0648\u062d\u062f\u0629 \u062c\u062f\u064a\u062f\u0629","Create a new unit":"\u0623\u0646\u0634\u0626 \u0648\u062d\u062f\u0629 \u062c\u062f\u064a\u062f\u0629","Register a new unit and save it.":"\u0633\u062c\u0644 \u0648\u062d\u062f\u0629 \u062c\u062f\u064a\u062f\u0629 \u0648\u0627\u062d\u0641\u0638\u0647\u0627.","Edit unit":"\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0648\u062d\u062f\u0629","Modify Unit.":"\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629.","Return to Units":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0648\u062d\u062f\u0627\u062a","Preview URL":"\u0645\u0639\u0627\u064a\u0646\u0629 URL","Preview of the unit.":"\u0645\u0639\u0627\u064a\u0646\u0629 \u0627\u0644\u0648\u062d\u062f\u0629.","Define the value of the unit.":"\u062d\u062f\u062f \u0642\u064a\u0645\u0629 \u0627\u0644\u0648\u062d\u062f\u0629.","Define to which group the unit should be assigned.":"\u062d\u062f\u062f \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u062a\u064a \u064a\u062c\u0628 \u062a\u062e\u0635\u064a\u0635 \u0627\u0644\u0648\u062d\u062f\u0629 \u0644\u0647\u0627.","Base Unit":"\u0648\u062d\u062f\u0629 \u0642\u0627\u0639\u062f\u0629","Determine if the unit is the base unit from the group.":"\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0627\u0644\u0648\u062d\u062f\u0629 \u0647\u064a \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629 \u0645\u0646 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629.","Provide a short description about the unit.":"\u0642\u062f\u0645 \u0648\u0635\u0641\u064b\u0627 \u0645\u0648\u062c\u0632\u064b\u0627 \u200b\u200b\u0644\u0644\u0648\u062d\u062f\u0629.","Unit Groups List":"\u0642\u0627\u0626\u0645\u0629 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0648\u062d\u062f\u0627\u062a","Display all unit groups.":"\u0627\u0639\u0631\u0636 \u0643\u0644 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0648\u062d\u062f\u0627\u062a.","No unit groups has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0648\u062d\u062f\u0627\u062a","Add a new unit group":"\u0623\u0636\u0641 \u0645\u062c\u0645\u0648\u0639\u0629 \u0648\u062d\u062f\u0629 \u062c\u062f\u064a\u062f\u0629","Create a new unit group":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0629 \u0648\u062d\u062f\u0629 \u062c\u062f\u064a\u062f\u0629","Register a new unit group and save it.":"\u0633\u062c\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0648\u062d\u062f\u0629 \u062c\u062f\u064a\u062f\u0629 \u0648\u0627\u062d\u0641\u0638\u0647\u0627.","Edit unit group":"\u062a\u062d\u0631\u064a\u0631 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0629","Modify Unit Group.":"\u062a\u0639\u062f\u064a\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0629.","Return to Unit Groups":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0648\u062d\u062f\u0627\u062a","Users List":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646","Display all users.":"\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646.","No users has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646","Add a new user":"\u0625\u0636\u0627\u0641\u0629 \u0645\u0633\u062a\u062e\u062f\u0645 \u062c\u062f\u064a\u062f","Create a new user":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0633\u062a\u062e\u062f\u0645 \u062c\u062f\u064a\u062f","Register a new user and save it.":"\u062a\u0633\u062c\u064a\u0644 \u0645\u0633\u062a\u062e\u062f\u0645 \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.","Edit user":"\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0639\u0636\u0648","Modify User.":"\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645.","Return to Users":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646","Username":"\u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645","Will be used for various purposes such as email recovery.":"\u0633\u064a\u062a\u0645 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647 \u0644\u0623\u063a\u0631\u0627\u0636 \u0645\u062e\u062a\u0644\u0641\u0629 \u0645\u062b\u0644 \u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a.","Password":"\u0643\u0644\u0645\u0647 \u0627\u0644\u0633\u0631","Make a unique and secure password.":"\u0623\u0646\u0634\u0626 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0641\u0631\u064a\u062f\u0629 \u0648\u0622\u0645\u0646\u0629.","Confirm Password":"\u062a\u0623\u0643\u064a\u062f \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631","Should be the same as the password.":"\u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0647\u064a \u0646\u0641\u0633\u0647\u0627 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631.","Define whether the user can use the application.":"\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u0645\u0643\u0646 \u0644\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u062a\u0637\u0628\u064a\u0642.","Incompatibility Exception":"\u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u0639\u062f\u0645 \u0627\u0644\u062a\u0648\u0627\u0641\u0642","The action you tried to perform is not allowed.":"\u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u0630\u064a \u062d\u0627\u0648\u0644\u062a \u0627\u0644\u0642\u064a\u0627\u0645 \u0628\u0647 \u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0628\u0647.","Not Enough Permissions":"\u0623\u0630\u0648\u0646\u0627\u062a \u063a\u064a\u0631 \u0643\u0627\u0641\u064a\u0629","The resource of the page you tried to access is not available or might have been deleted.":"\u0645\u0648\u0631\u062f \u0627\u0644\u0635\u0641\u062d\u0629 \u0627\u0644\u0630\u064a \u062d\u0627\u0648\u0644\u062a \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u064a\u0647 \u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631 \u0623\u0648 \u0631\u0628\u0645\u0627 \u062a\u0645 \u062d\u0630\u0641\u0647.","Not Found Exception":"\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0633\u062a\u062b\u0646\u0627\u0621","Query Exception":"\u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u0627\u0644\u0627\u0633\u062a\u0639\u0644\u0627\u0645","Provide your username.":"\u0623\u062f\u062e\u0644 \u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643.","Provide your password.":"\u0623\u062f\u062e\u0644 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643.","Provide your email.":"\u0623\u062f\u062e\u0644 \u0628\u0631\u064a\u062f\u0643 \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a.","Password Confirm":"\u062a\u0623\u0643\u064a\u062f \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631","define the amount of the transaction.":"\u062a\u062d\u062f\u064a\u062f \u0645\u0628\u0644\u063a \u0627\u0644\u0635\u0641\u0642\u0629.","Further observation while proceeding.":"\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0645\u0631\u0627\u0642\u0628\u0629 \u0623\u062b\u0646\u0627\u0621 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629.","determine what is the transaction type.":"\u062a\u062d\u062f\u064a\u062f \u0646\u0648\u0639 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629.","Determine the amount of the transaction.":"\u062a\u062d\u062f\u064a\u062f \u0645\u0628\u0644\u063a \u0627\u0644\u0635\u0641\u0642\u0629.","Further details about the transaction.":"\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 \u062d\u0648\u0644 \u0627\u0644\u0635\u0641\u0642\u0629.","Define the installments for the current order.":"\u062d\u062f\u062f \u0623\u0642\u0633\u0627\u0637 \u0627\u0644\u0623\u0645\u0631 \u0627\u0644\u062d\u0627\u0644\u064a.","New Password":"\u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u062c\u062f\u064a\u062f\u0629","define your new password.":"\u062d\u062f\u062f \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631\u0643 \u0627\u0644\u062c\u062f\u064a\u062f\u0629.","confirm your new password.":"\u0623\u0643\u062f \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631\u0643 \u0627\u0644\u062c\u062f\u064a\u062f\u0629.","choose the payment type.":"\u0627\u062e\u062a\u0631 \u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639.","Define the order name.":"\u062d\u062f\u062f \u0627\u0633\u0645 \u0627\u0644\u0623\u0645\u0631.","Define the date of creation of the order.":"\u062d\u062f\u062f \u062a\u0627\u0631\u064a\u062e \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0623\u0645\u0631.","Provide the procurement name.":"\u0623\u062f\u062e\u0644 \u0627\u0633\u0645 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.","Describe the procurement.":"\u0635\u0641 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.","Define the provider.":"\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0648\u0641\u0631.","Define what is the unit price of the product.":"\u062d\u062f\u062f \u0633\u0639\u0631 \u0627\u0644\u0648\u062d\u062f\u0629 \u0644\u0644\u0645\u0646\u062a\u062c.","Determine in which condition the product is returned.":"\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u062d\u0627\u0644\u0629 \u0627\u0644\u062a\u064a \u064a\u062a\u0645 \u0641\u064a\u0647\u0627 \u0625\u0631\u062c\u0627\u0639 \u0627\u0644\u0645\u0646\u062a\u062c.","Other Observations":"\u0645\u0644\u0627\u062d\u0638\u0627\u062a \u0623\u062e\u0631\u0649","Describe in details the condition of the returned product.":"\u0635\u0641 \u0628\u0627\u0644\u062a\u0641\u0635\u064a\u0644 \u062d\u0627\u0644\u0629 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0631\u062a\u062c\u0639.","Unit Group Name":"\u0627\u0633\u0645 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0629","Provide a unit name to the unit.":"\u0623\u062f\u062e\u0644 \u0627\u0633\u0645 \u0648\u062d\u062f\u0629 \u0644\u0644\u0648\u062d\u062f\u0629.","Describe the current unit.":"\u0635\u0641 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.","assign the current unit to a group.":"\u0642\u0645 \u0628\u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0625\u0644\u0649 \u0645\u062c\u0645\u0648\u0639\u0629.","define the unit value.":"\u062d\u062f\u062f \u0642\u064a\u0645\u0629 \u0627\u0644\u0648\u062d\u062f\u0629.","Provide a unit name to the units group.":"\u0623\u062f\u062e\u0644 \u0627\u0633\u0645 \u0648\u062d\u062f\u0629 \u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a.","Describe the current unit group.":"\u0635\u0641 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.","POS":"\u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639","Open POS":"\u0627\u0641\u062a\u062d \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639","Create Register":"\u0625\u0646\u0634\u0627\u0621 \u062a\u0633\u062c\u064a\u0644","Use Customer Billing":"\u0627\u0633\u062a\u062e\u062f\u0645 \u0641\u0648\u0627\u062a\u064a\u0631 \u0627\u0644\u0639\u0645\u064a\u0644","Define whether the customer billing information should be used.":"\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0627\u0644\u0639\u0645\u064a\u0644.","General Shipping":"\u0627\u0644\u0634\u062d\u0646 \u0627\u0644\u0639\u0627\u0645","Define how the shipping is calculated.":"\u062d\u062f\u062f \u0643\u064a\u0641\u064a\u0629 \u062d\u0633\u0627\u0628 \u0627\u0644\u0634\u062d\u0646.","Shipping Fees":"\u0645\u0635\u0627\u0631\u064a\u0641 \u0627\u0644\u0634\u062d\u0646","Define shipping fees.":"\u062a\u062d\u062f\u064a\u062f \u0631\u0633\u0648\u0645 \u0627\u0644\u0634\u062d\u0646.","Use Customer Shipping":"\u0627\u0633\u062a\u062e\u062f\u0645 \u0634\u062d\u0646 \u0627\u0644\u0639\u0645\u064a\u0644","Define whether the customer shipping information should be used.":"\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u0634\u062d\u0646 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0627\u0644\u0639\u0645\u064a\u0644.","Invoice Number":"\u0631\u0642\u0645 \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629","If the procurement has been issued outside of NexoPOS, please provide a unique reference.":"\u0625\u0630\u0627 \u062a\u0645 \u0625\u0635\u062f\u0627\u0631 \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0634\u0631\u0627\u0621 \u062e\u0627\u0631\u062c NexoPOS \u060c \u0641\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 \u0645\u0631\u062c\u0639 \u0641\u0631\u064a\u062f.","Delivery Time":"\u0645\u0648\u0639\u062f \u0627\u0644\u062a\u0633\u0644\u064a\u0645","If the procurement has to be delivered at a specific time, define the moment here.":"\u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u062a\u0633\u0644\u064a\u0645 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0641\u064a \u0648\u0642\u062a \u0645\u062d\u062f\u062f \u060c \u0641\u062d\u062f\u062f \u0627\u0644\u0644\u062d\u0638\u0629 \u0647\u0646\u0627.","Automatic Approval":"\u0627\u0644\u0645\u0648\u0627\u0641\u0642\u0629 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u064a\u0629","Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.":"\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u0648\u0636\u0639 \u0639\u0644\u0627\u0645\u0629 \u0639\u0644\u0649 \u0627\u0644\u0634\u0631\u0627\u0621 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0639\u0644\u0649 \u0623\u0646\u0647 \u062a\u0645\u062a \u0627\u0644\u0645\u0648\u0627\u0641\u0642\u0629 \u0639\u0644\u064a\u0647 \u0628\u0645\u062c\u0631\u062f \u062d\u062f\u0648\u062b \u0648\u0642\u062a \u0627\u0644\u062a\u0633\u0644\u064a\u0645.","Pending":"\u0642\u064a\u062f \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631","Delivered":"\u062a\u0645 \u0627\u0644\u062a\u0648\u0635\u064a\u0644","Determine what is the actual payment status of the procurement.":"\u062a\u062d\u062f\u064a\u062f \u062d\u0627\u0644\u0629 \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0641\u0639\u0644\u064a\u0629 \u0644\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.","Determine what is the actual provider of the current procurement.":"\u062a\u062d\u062f\u064a\u062f \u0645\u0627 \u0647\u0648 \u0627\u0644\u0645\u0648\u0641\u0631 \u0627\u0644\u0641\u0639\u0644\u064a \u0644\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u062d\u0627\u0644\u064a\u0629.","Provide a name that will help to identify the procurement.":"\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0627\u0633\u0645 \u064a\u0633\u0627\u0639\u062f \u0641\u064a \u062a\u062d\u062f\u064a\u062f \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0634\u0631\u0627\u0621.","First Name":"\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u0648\u0644","Avatar":"\u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u0631\u0645\u0632\u064a\u0629","Define the image that should be used as an avatar.":"\u062d\u062f\u062f \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u062a\u064a \u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u0627 \u0643\u0635\u0648\u0631\u0629 \u0631\u0645\u0632\u064a\u0629.","Language":"\u0644\u063a\u0629","Choose the language for the current account.":"\u0627\u062e\u062a\u0631 \u0644\u063a\u0629 \u0627\u0644\u062d\u0633\u0627\u0628 \u0627\u0644\u062c\u0627\u0631\u064a.","Security":"\u062d\u0645\u0627\u064a\u0629","Old Password":"\u0643\u0644\u0645\u0629 \u0633\u0631 \u0642\u062f\u064a\u0645\u0629","Provide the old password.":"\u0623\u062f\u062e\u0644 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u0642\u062f\u064a\u0645\u0629.","Change your password with a better stronger password.":"\u0642\u0645 \u0628\u062a\u063a\u064a\u064a\u0631 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643 \u0628\u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0623\u0642\u0648\u0649.","Password Confirmation":"\u062a\u0623\u0643\u064a\u062f \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631","The profile has been successfully saved.":"\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0634\u062e\u0635\u064a \u0628\u0646\u062c\u0627\u062d.","The user attribute has been saved.":"\u062a\u0645 \u062d\u0641\u0638 \u0633\u0645\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645.","The options has been successfully updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u062e\u064a\u0627\u0631\u0627\u062a \u0628\u0646\u062c\u0627\u062d.","Wrong password provided":"\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u062e\u0627\u0637\u0626\u0629","Wrong old password provided":"\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0642\u062f\u064a\u0645\u0629 \u062e\u0627\u0637\u0626\u0629","Password Successfully updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0628\u0646\u062c\u0627\u062d.","Sign In — NexoPOS":"\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 & [\u0645\u062f\u0634] \u061b NexoPOS","Sign Up — NexoPOS":"\u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0648 [\u0645\u062f\u0634] \u061b NexoPOS","Password Lost":"\u0641\u0642\u062f\u062a \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631","Unable to proceed as the token provided is invalid.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0644\u0623\u0646 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0645\u064a\u0632 \u0627\u0644\u0645\u0642\u062f\u0645 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","The token has expired. Please request a new activation token.":"\u0627\u0646\u062a\u0647\u062a \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0645\u064a\u0632. \u064a\u0631\u062c\u0649 \u0637\u0644\u0628 \u0631\u0645\u0632 \u062a\u0646\u0634\u064a\u0637 \u062c\u062f\u064a\u062f.","Set New Password":"\u062a\u0639\u064a\u064a\u0646 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u062c\u062f\u064a\u062f\u0629","Database Update":"\u062a\u062d\u062f\u064a\u062b \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a","This account is disabled.":"\u0647\u0630\u0627 \u0627\u0644\u062d\u0633\u0627\u0628 \u0645\u0639\u0637\u0644.","Unable to find record having that username.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0633\u062c\u0644 \u0644\u0647 \u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0647\u0630\u0627.","Unable to find record having that password.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0633\u062c\u0644 \u0627\u0644\u0630\u064a \u064a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0647\u0630\u0647.","Invalid username or password.":"\u062e\u0637\u0623 \u0641\u064a \u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0623\u0648 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631.","Unable to login, the provided account is not active.":"\u062a\u0639\u0630\u0631 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u060c \u0627\u0644\u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0642\u062f\u0645 \u063a\u064a\u0631 \u0646\u0634\u0637.","You have been successfully connected.":"\u0644\u0642\u062f \u062a\u0645 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0646\u062c\u0627\u062d.","The recovery email has been send to your inbox.":"\u062a\u0645 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0627\u0644\u0645\u062e\u0635\u0635 \u0644\u0644\u0637\u0648\u0627\u0631\u0626 \u0625\u0644\u0649 \u0635\u0646\u062f\u0648\u0642 \u0627\u0644\u0648\u0627\u0631\u062f \u0627\u0644\u062e\u0627\u0635 \u0628\u0643.","Unable to find a record matching your entry.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0633\u062c\u0644 \u064a\u0637\u0627\u0628\u0642 \u0625\u062f\u062e\u0627\u0644\u0643.","Your Account has been created but requires email validation.":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628\u0643 \u0648\u0644\u0643\u0646\u0647 \u064a\u062a\u0637\u0644\u0628 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0635\u062d\u0629 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a.","Unable to find the requested user.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0637\u0644\u0648\u0628.","Unable to proceed, the provided token is not valid.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0642\u062f\u0645 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","Unable to proceed, the token has expired.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0627\u0646\u062a\u0647\u062a \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0645\u064a\u0632.","Your password has been updated.":"\u0644\u0642\u062f \u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643.","Unable to edit a register that is currently in use":"\u062a\u0639\u0630\u0631 \u062a\u062d\u0631\u064a\u0631 \u0633\u062c\u0644 \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062d\u0627\u0644\u064a\u064b\u0627","No register has been opened by the logged user.":"\u062a\u0645 \u0641\u062a\u062d \u0623\u064a \u0633\u062c\u0644 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0633\u062c\u0644.","The register is opened.":"\u062a\u0645 \u0641\u062a\u062d \u0627\u0644\u0633\u062c\u0644.","Closing":"\u0625\u063a\u0644\u0627\u0642","Opening":"\u0627\u0641\u062a\u062a\u0627\u062d","Sale":"\u0623\u0648\u0643\u0627\u0632\u064a\u0648\u0646","Refund":"\u0627\u0633\u062a\u0631\u062f\u0627\u062f","Unable to find the category using the provided identifier":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0641\u0626\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645","The category has been deleted.":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0641\u0626\u0629.","Unable to find the category using the provided identifier.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0641\u0626\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.","Unable to find the attached category parent":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0623\u0635\u0644 \u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u0645\u0631\u0641\u0642\u0629","The category has been correctly saved":"\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0641\u0626\u0629 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d","The category has been updated":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0641\u0626\u0629","The category products has been refreshed":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0641\u0626\u0629","The entry has been successfully deleted.":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0625\u062f\u062e\u0627\u0644 \u0628\u0646\u062c\u0627\u062d.","A new entry has been successfully created.":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0625\u062f\u062e\u0627\u0644 \u062c\u062f\u064a\u062f \u0628\u0646\u062c\u0627\u062d.","Unhandled crud resource":"\u0645\u0648\u0631\u062f \u062e\u0627\u0645 \u063a\u064a\u0631 \u0645\u0639\u0627\u0644\u062c","You need to select at least one item to delete":"\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u062a\u062d\u062f\u064a\u062f \u0639\u0646\u0635\u0631 \u0648\u0627\u062d\u062f \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0644\u062d\u0630\u0641\u0647","You need to define which action to perform":"\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u0630\u064a \u064a\u062c\u0628 \u0627\u0644\u0642\u064a\u0627\u0645 \u0628\u0647","%s has been processed, %s has not been processed.":"\u062a\u0645\u062a \u0645\u0639\u0627\u0644\u062c\u0629 %s \u060c \u0648\u0644\u0645 \u062a\u062a\u0645 \u0645\u0639\u0627\u0644\u062c\u0629 %s.","Unable to proceed. No matching CRUD resource has been found.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627. \u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0645\u0648\u0631\u062f CRUD \u0645\u0637\u0627\u0628\u0642.","The requested file cannot be downloaded or has already been downloaded.":"\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u0646\u0632\u064a\u0644 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0623\u0648 \u062a\u0645 \u062a\u0646\u0632\u064a\u0644\u0647 \u0628\u0627\u0644\u0641\u0639\u0644.","The requested customer cannot be found.":"\u0644\u0627 \u064a\u0645\u0643\u0646 \u0645\u062e\u0627\u0644\u0641\u0629 \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0645\u0637\u0644\u0648\u0628.","Create Coupon":"\u0625\u0646\u0634\u0627\u0621 \u0642\u0633\u064a\u0645\u0629","helps you creating a coupon.":"\u064a\u0633\u0627\u0639\u062f\u0643 \u0641\u064a \u0625\u0646\u0634\u0627\u0621 \u0642\u0633\u064a\u0645\u0629.","Edit Coupon":"\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0642\u0633\u064a\u0645\u0629","Editing an existing coupon.":"\u062a\u062d\u0631\u064a\u0631 \u0642\u0633\u064a\u0645\u0629 \u0645\u0648\u062c\u0648\u062f\u0629.","Invalid Request.":"\u0637\u0644\u0628 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","Displays the customer account history for %s":"\u0639\u0631\u0636 \u0645\u062d\u0641\u0648\u0638\u0627\u062a \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644 \u0644\u0640 %s","Unable to delete a group to which customers are still assigned.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062d\u0630\u0641 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u062a\u064a \u0644\u0627 \u064a\u0632\u0627\u0644 \u064a\u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0644\u0647\u0627.","The customer group has been deleted.":"\u062a\u0645 \u062d\u0630\u0641 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621.","Unable to find the requested group.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629.","The customer group has been successfully created.":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0628\u0646\u062c\u0627\u062d.","The customer group has been successfully saved.":"\u062a\u0645 \u062d\u0641\u0638 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0628\u0646\u062c\u0627\u062d.","Unable to transfer customers to the same account.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u0648\u064a\u0644 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0625\u0644\u0649 \u0646\u0641\u0633 \u0627\u0644\u062d\u0633\u0627\u0628.","The categories has been transferred to the group %s.":"\u062a\u0645 \u0646\u0642\u0644 \u0627\u0644\u0641\u0626\u0627\u062a \u0625\u0644\u0649 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 %s.","No customer identifier has been provided to proceed to the transfer.":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0645\u0639\u0631\u0651\u0641 \u0627\u0644\u0639\u0645\u064a\u0644 \u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u0646\u0642\u0644.","Unable to find the requested group using the provided id.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.","\"%s\" is not an instance of \"FieldsService\"":"\"%s\" \u0644\u064a\u0633 \u0645\u062b\u064a\u0644\u0627\u064b \u0644\u0640 \"FieldsService \"","Manage Medias":"\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0648\u0633\u0627\u0626\u0637","Modules List":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a","List all available modules.":"\u0642\u0627\u0626\u0645\u0629 \u0628\u062c\u0645\u064a\u0639 \u0627\u0644\u0648\u062d\u062f\u0627\u062a \u0627\u0644\u0645\u062a\u0627\u062d\u0629.","Upload A Module":"\u062a\u062d\u0645\u064a\u0644 \u0648\u062d\u062f\u0629","Extends NexoPOS features with some new modules.":"\u064a\u0648\u0633\u0639 \u0645\u064a\u0632\u0627\u062a NexoPOS \u0628\u0628\u0639\u0636 \u0627\u0644\u0648\u062d\u062f\u0627\u062a \u0627\u0644\u062c\u062f\u064a\u062f\u0629.","The notification has been successfully deleted":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0625\u062e\u0637\u0627\u0631 \u0628\u0646\u062c\u0627\u062d","All the notifications have been cleared.":"\u062a\u0645 \u0645\u0633\u062d \u062c\u0645\u064a\u0639 \u0627\u0644\u0625\u062e\u0637\u0627\u0631\u0627\u062a.","Order Invoice — %s":"\u0623\u0645\u0631 \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629 \u0648 [\u0645\u062f\u0634]\u061b \u066a\u0633","Order Refund Receipt — %s":"\u0637\u0644\u0628 \u0625\u064a\u0635\u0627\u0644 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0648 [\u0645\u062f\u0634] \u061b \u066a\u0633","Order Receipt — %s":"\u0627\u0633\u062a\u0644\u0627\u0645 \u0627\u0644\u0637\u0644\u0628 \u0648 [\u0645\u062f\u0634] \u061b \u066a\u0633","The printing event has been successfully dispatched.":"\u062a\u0645 \u0625\u0631\u0633\u0627\u0644 \u062d\u062f\u062b \u0627\u0644\u0637\u0628\u0627\u0639\u0629 \u0628\u0646\u062c\u0627\u062d.","There is a mismatch between the provided order and the order attached to the instalment.":"\u064a\u0648\u062c\u062f \u0639\u062f\u0645 \u062a\u0637\u0627\u0628\u0642 \u0628\u064a\u0646 \u0627\u0644\u0623\u0645\u0631 \u0627\u0644\u0645\u0642\u062f\u0645 \u0648\u0627\u0644\u0623\u0645\u0631 \u0627\u0644\u0645\u0631\u0641\u0642 \u0628\u0627\u0644\u0642\u0633\u0637.","Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u0631\u064a\u0631 \u0639\u0645\u0644\u064a\u0629 \u0634\u0631\u0627\u0621 \u0645\u062e\u0632\u0646\u0629. \u0636\u0639 \u0641\u064a \u0627\u0639\u062a\u0628\u0627\u0631\u0643 \u0625\u062c\u0631\u0627\u0621 \u062a\u0639\u062f\u064a\u0644 \u0623\u0648 \u062d\u0630\u0641 \u0627\u0644\u062a\u062f\u0628\u064a\u0631.","New Procurement":"\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u062c\u062f\u064a\u062f\u0629","Edit Procurement":"\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0627\u0642\u062a\u0646\u0627\u0621","Perform adjustment on existing procurement.":"\u0625\u062c\u0631\u0627\u0621 \u062a\u0639\u062f\u064a\u0644 \u0639\u0644\u0649 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u062d\u0627\u0644\u064a\u0629.","%s - Invoice":" %s - \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629","list of product procured.":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0634\u062a\u0631\u0627\u0629.","The product price has been refreshed.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0633\u0639\u0631 \u0627\u0644\u0645\u0646\u062a\u062c.","The single variation has been deleted.":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0634\u0643\u0644 \u0627\u0644\u0641\u0631\u062f\u064a.","Edit a product":"\u062a\u062d\u0631\u064a\u0631 \u0645\u0646\u062a\u062c","Makes modifications to a product":"\u064a\u0642\u0648\u0645 \u0628\u0625\u062c\u0631\u0627\u0621 \u062a\u0639\u062f\u064a\u0644\u0627\u062a \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c","Create a product":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0646\u062a\u062c","Add a new product on the system":"\u0623\u0636\u0641 \u0645\u0646\u062a\u062c\u064b\u0627 \u062c\u062f\u064a\u062f\u064b\u0627 \u0639\u0644\u0649 \u0627\u0644\u0646\u0638\u0627\u0645","Stock Adjustment":"\u0627\u0644\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0623\u0633\u0647\u0645","Adjust stock of existing products.":"\u0636\u0628\u0637 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u062d\u0627\u0644\u064a\u0629.","No stock is provided for the requested product.":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0645\u062e\u0632\u0648\u0646 \u0644\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0637\u0644\u0648\u0628.","The product unit quantity has been deleted.":"\u062a\u0645 \u062d\u0630\u0641 \u0643\u0645\u064a\u0629 \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.","Unable to proceed as the request is not valid.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0644\u0623\u0646 \u0627\u0644\u0637\u0644\u0628 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","Unsupported action for the product %s.":"\u0625\u062c\u0631\u0627\u0621 \u063a\u064a\u0631 \u0645\u0639\u062a\u0645\u062f \u0644\u0644\u0645\u0646\u062a\u062c %s.","The stock has been adjustment successfully.":"\u062a\u0645 \u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0628\u0646\u062c\u0627\u062d.","Unable to add the product to the cart as it has expired.":"\u062a\u0639\u0630\u0631 \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0645\u0646\u062a\u062c \u0625\u0644\u0649 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642 \u062d\u064a\u062b \u0627\u0646\u062a\u0647\u062a \u0635\u0644\u0627\u062d\u064a\u062a\u0647.","Unable to add a product that has accurate tracking enabled, using an ordinary barcode.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0625\u0636\u0627\u0641\u0629 \u0645\u0646\u062a\u062c \u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u062a\u062a\u0628\u0639 \u0627\u0644\u062f\u0642\u064a\u0642 \u0628\u0647 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0631\u0645\u0632 \u0634\u0631\u064a\u0637\u064a \u0639\u0627\u062f\u064a.","There is no products matching the current request.":"\u0644\u0627 \u062a\u0648\u062c\u062f \u0645\u0646\u062a\u062c\u0627\u062a \u0645\u0637\u0627\u0628\u0642\u0629 \u0644\u0644\u0637\u0644\u0628 \u0627\u0644\u062d\u0627\u0644\u064a.","Print Labels":"\u0637\u0628\u0627\u0639\u0629 \u0627\u0644\u0645\u0644\u0635\u0642\u0627\u062a","Customize and print products labels.":"\u062a\u062e\u0635\u064a\u0635 \u0648\u0637\u0628\u0627\u0639\u0629 \u0645\u0644\u0635\u0642\u0627\u062a \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a.","Procurements by \"%s\"":"\u0639\u0645\u0644\u064a\u0627\u062a \u0627\u0644\u0634\u0631\u0627\u0621 \u0628\u0648\u0627\u0633\u0637\u0629 \"%s\"","Sales Report":"\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a","Provides an overview over the sales during a specific period":"\u064a\u0642\u062f\u0645 \u0646\u0638\u0631\u0629 \u0639\u0627\u0645\u0629 \u0639\u0644\u0649 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u062e\u0644\u0627\u0644 \u0641\u062a\u0631\u0629 \u0645\u062d\u062f\u062f\u0629","Provides an overview over the best products sold during a specific period.":"\u064a\u0642\u062f\u0645 \u0644\u0645\u062d\u0629 \u0639\u0627\u0645\u0629 \u0639\u0646 \u0623\u0641\u0636\u0644 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u062a\u064a \u062a\u0645 \u0628\u064a\u0639\u0647\u0627 \u062e\u0644\u0627\u0644 \u0641\u062a\u0631\u0629 \u0645\u062d\u062f\u062f\u0629.","Sold Stock":"\u062a\u0628\u0627\u0639 \u0627\u0644\u0623\u0633\u0647\u0645","Provides an overview over the sold stock during a specific period.":"\u064a\u0642\u062f\u0645 \u0646\u0638\u0631\u0629 \u0639\u0627\u0645\u0629 \u0639\u0644\u0649 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0628\u0627\u0639 \u062e\u0644\u0627\u0644 \u0641\u062a\u0631\u0629 \u0645\u062d\u062f\u062f\u0629.","Profit Report":"\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0631\u0628\u062d","Provides an overview of the provide of the products sold.":"\u064a\u0648\u0641\u0631 \u0644\u0645\u062d\u0629 \u0639\u0627\u0645\u0629 \u0639\u0646 \u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0628\u0627\u0639\u0629.","Provides an overview on the activity for a specific period.":"\u064a\u0648\u0641\u0631 \u0646\u0638\u0631\u0629 \u0639\u0627\u0645\u0629 \u0639\u0644\u0649 \u0627\u0644\u0646\u0634\u0627\u0637 \u0644\u0641\u062a\u0631\u0629 \u0645\u062d\u062f\u062f\u0629.","Annual Report":"\u062a\u0642\u0631\u064a\u0631 \u0633\u0646\u0648\u064a","Sales By Payment Types":"\u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u062d\u0633\u0628 \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u062f\u0641\u0639","Provide a report of the sales by payment types, for a specific period.":"\u062a\u0642\u062f\u064a\u0645 \u062a\u0642\u0631\u064a\u0631 \u0628\u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u0628\u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u062f\u0641\u0639 \u0644\u0641\u062a\u0631\u0629 \u0645\u062d\u062f\u062f\u0629.","The report will be computed for the current year.":"\u0633\u064a\u062a\u0645 \u0627\u062d\u062a\u0633\u0627\u0628 \u0627\u0644\u062a\u0642\u0631\u064a\u0631 \u0644\u0644\u0633\u0646\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.","Unknown report to refresh.":"\u062a\u0642\u0631\u064a\u0631 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641 \u0644\u0644\u062a\u062d\u062f\u064a\u062b.","Invalid authorization code provided.":"\u062a\u0645 \u062a\u0642\u062f\u064a\u0645 \u0631\u0645\u0632 \u062a\u0641\u0648\u064a\u0636 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","The database has been successfully seeded.":"\u062a\u0645 \u0628\u0630\u0631 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0628\u0646\u062c\u0627\u062d.","Settings Page Not Found":"\u0635\u0641\u062d\u0629 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f\u0629","Customers Settings":"\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Configure the customers settings of the application.":"\u062a\u0643\u0648\u064a\u0646 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0644\u0644\u062a\u0637\u0628\u064a\u0642.","General Settings":"\u0627\u0644\u0627\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0639\u0627\u0645\u0629","Configure the general settings of the application.":"\u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0639\u0627\u0645\u0629 \u0644\u0644\u062a\u0637\u0628\u064a\u0642.","Orders Settings":"\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0637\u0644\u0628\u0627\u062a","POS Settings":"\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639","Configure the pos settings.":"\u062a\u0643\u0648\u064a\u0646 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639.","Workers Settings":"\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0639\u0645\u0627\u0644","%s is not an instance of \"%s\".":" %s \u0644\u064a\u0633 \u0645\u062b\u064a\u0644\u0627\u064b \u0644\u0640 \"%s\".","Unable to find the requested product tax using the provided id":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645","Unable to find the requested product tax using the provided identifier.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.","The product tax has been created.":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.","The product tax has been updated":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0645\u0646\u062a\u062c","Unable to retrieve the requested tax group using the provided identifier \"%s\".":"\u062a\u0639\u0630\u0631 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645 \"%s\".","Permission Manager":"\u0645\u062f\u064a\u0631 \u0627\u0644\u0623\u0630\u0648\u0646\u0627\u062a","Manage all permissions and roles":"\u0625\u062f\u0627\u0631\u0629 \u062c\u0645\u064a\u0639 \u0627\u0644\u0623\u0630\u0648\u0646\u0627\u062a \u0648\u0627\u0644\u0623\u062f\u0648\u0627\u0631","My Profile":"\u0645\u0644\u0641\u064a","Change your personal settings":"\u0642\u0645 \u0628\u062a\u063a\u064a\u064a\u0631 \u0625\u0639\u062f\u0627\u062f\u0627\u062a\u0643 \u0627\u0644\u0634\u062e\u0635\u064a\u0629","The permissions has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0623\u0630\u0648\u0646\u0627\u062a.","Sunday":"\u064a\u0648\u0645 \u0627\u0644\u0623\u062d\u062f","Monday":"\u0627\u0644\u0625\u062b\u0646\u064a\u0646","Tuesday":"\u064a\u0648\u0645 \u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621","Wednesday":"\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621","Thursday":"\u064a\u0648\u0645 \u0627\u0644\u062e\u0645\u064a\u0633","Friday":"\u062c\u0645\u0639\u0629","Saturday":"\u0627\u0644\u0633\u0628\u062a","The migration has successfully run.":"\u062a\u0645 \u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u062a\u0631\u062d\u064a\u0644 \u0628\u0646\u062c\u0627\u062d.","Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.":"\u062a\u0639\u0630\u0631 \u062a\u0647\u064a\u0626\u0629 \u0635\u0641\u062d\u0629 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a. \u0644\u0627 \u064a\u0645\u0643\u0646 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0639\u0631\u0641 \"%s\".","Unable to register. The registration is closed.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u062a\u0633\u062c\u064a\u0644. \u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0645\u063a\u0644\u0642.","Hold Order Cleared":"\u062a\u0645 \u0645\u0633\u062d \u0623\u0645\u0631 \u0627\u0644\u062d\u062c\u0632","Report Refreshed":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u062a\u0642\u0631\u064a\u0631","The yearly report has been successfully refreshed for the year \"%s\".":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0633\u0646\u0648\u064a \u0628\u0646\u062c\u0627\u062d \u0644\u0644\u0639\u0627\u0645 \"%s\".","[NexoPOS] Activate Your Account":"[NexoPOS] \u062a\u0646\u0634\u064a\u0637 \u062d\u0633\u0627\u0628\u0643","[NexoPOS] A New User Has Registered":"[NexoPOS] \u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0645\u0633\u062a\u062e\u062f\u0645 \u062c\u062f\u064a\u062f","[NexoPOS] Your Account Has Been Created":"[NexoPOS] \u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628\u0643","Unable to find the permission with the namespace \"%s\".":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0625\u0630\u0646 \u0628\u0645\u0633\u0627\u062d\u0629 \u0627\u0644\u0627\u0633\u0645 \"%s\".","Take Away":"\u064a\u0628\u0639\u062f","The register has been successfully opened":"\u062a\u0645 \u0641\u062a\u062d \u0627\u0644\u0633\u062c\u0644 \u0628\u0646\u062c\u0627\u062d","The register has been successfully closed":"\u062a\u0645 \u0625\u063a\u0644\u0627\u0642 \u0627\u0644\u0633\u062c\u0644 \u0628\u0646\u062c\u0627\u062d","The provided amount is not allowed. The amount should be greater than \"0\". ":"\u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0645\u0642\u062f\u0645 \u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0628\u0647. \u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0627\u0644\u0645\u0628\u0644\u063a \u0623\u0643\u0628\u0631 \u0645\u0646 \"0 \".","The cash has successfully been stored":"\u062a\u0645 \u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0646\u0642\u0648\u062f \u0628\u0646\u062c\u0627\u062d","Not enough fund to cash out.":"\u0644\u0627 \u064a\u0648\u062c\u062f \u0635\u0646\u062f\u0648\u0642 \u0643\u0627\u0641 \u0644\u0633\u062d\u0628 \u0627\u0644\u0623\u0645\u0648\u0627\u0644.","The cash has successfully been disbursed.":"\u062a\u0645 \u0635\u0631\u0641 \u0627\u0644\u0623\u0645\u0648\u0627\u0644 \u0628\u0646\u062c\u0627\u062d.","In Use":"\u0641\u064a \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645","Opened":"\u0627\u0641\u062a\u062a\u062d","Delete Selected entries":"\u062d\u0630\u0641 \u0627\u0644\u0625\u062f\u062e\u0627\u0644\u0627\u062a \u0627\u0644\u0645\u062d\u062f\u062f\u0629","%s entries has been deleted":"\u062a\u0645 \u062d\u0630\u0641 %s \u0645\u0646 \u0627\u0644\u0625\u062f\u062e\u0627\u0644\u0627\u062a","%s entries has not been deleted":"\u0644\u0645 \u064a\u062a\u0645 \u062d\u0630\u0641 %s \u0625\u062f\u062e\u0627\u0644\u0627\u062a","Unable to find the customer using the provided id.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064a\u0644 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.","The customer has been deleted.":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0639\u0645\u064a\u0644.","The customer has been created.":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0639\u0645\u064a\u0644.","Unable to find the customer using the provided ID.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064a\u0644 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.","The customer has been edited.":"\u062a\u0645 \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0639\u0645\u064a\u0644.","Unable to find the customer using the provided email.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064a\u0644 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0627\u0644\u0645\u0642\u062f\u0645.","The customer account has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644.","Issuing Coupon Failed":"\u0641\u0634\u0644 \u0627\u0635\u062f\u0627\u0631 \u0627\u0644\u0643\u0648\u0628\u0648\u0646","Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u0637\u0628\u064a\u0642 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0645\u0631\u0641\u0642\u0629 \u0628\u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629 \"%s\". \u064a\u0628\u062f\u0648 \u0623\u0646 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0644\u0645 \u062a\u0639\u062f \u0645\u0648\u062c\u0648\u062f\u0629.","Unable to find a coupon with the provided code.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0642\u0633\u064a\u0645\u0629 \u0628\u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0642\u062f\u0645.","The coupon has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0642\u0633\u064a\u0645\u0629.","The group has been created.":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629.","Crediting":"\u0627\u0626\u062a\u0645\u0627\u0646","Deducting":"\u0627\u0642\u062a\u0637\u0627\u0639","Order Payment":"\u062f\u0641\u0639 \u0627\u0644\u0646\u0638\u0627\u0645","Order Refund":"\u0637\u0644\u0628 \u0627\u0633\u062a\u0631\u062f\u0627\u062f","Unknown Operation":"\u0639\u0645\u0644\u064a\u0629 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641\u0629","Countable":"\u0642\u0627\u0628\u0644 \u0644\u0644\u0639\u062f","Piece":"\u0642\u0637\u0639\u0629","GST":"\u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0633\u0644\u0639 \u0648\u0627\u0644\u062e\u062f\u0645\u0627\u062a","SGST":"SGST","CGST":"CGST","Sample Procurement %s":"\u0646\u0645\u0648\u0630\u062c \u0627\u0644\u0627\u0642\u062a\u0646\u0627\u0621 %s","generated":"\u0648\u0644\u062f\u062a","The media has been deleted":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0648\u0633\u0627\u0626\u0637","Unable to find the media.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0648\u0633\u0627\u0626\u0637.","Unable to find the requested file.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0645\u0637\u0644\u0648\u0628.","Unable to find the media entry":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0625\u062f\u062e\u0627\u0644 \u0627\u0644\u0648\u0633\u0627\u0626\u0637","Payment Types":"\u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u062f\u0641\u0639","Medias":"\u0627\u0644\u0648\u0633\u0627\u0626\u0637","List":"\u0642\u0627\u0626\u0645\u0629","Customers Groups":"\u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Create Group":"\u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0629","Reward Systems":"\u0623\u0646\u0638\u0645\u0629 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a","Create Reward":"\u0623\u0646\u0634\u0626 \u0645\u0643\u0627\u0641\u0623\u0629","List Coupons":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0642\u0633\u0627\u0626\u0645","Providers":"\u0627\u0644\u0645\u0648\u0641\u0631\u0648\u0646","Create A Provider":"\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0648\u0641\u0631","Accounting":"\u0645\u062d\u0627\u0633\u0628\u0629","Inventory":"\u0627\u0644\u0645\u062e\u0632\u0648\u0646","Create Product":"\u0625\u0646\u0634\u0627\u0621 \u0645\u0646\u062a\u062c","Create Category":"\u0625\u0646\u0634\u0627\u0621 \u0641\u0626\u0629","Create Unit":"\u0625\u0646\u0634\u0627\u0621 \u0648\u062d\u062f\u0629","Unit Groups":"\u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0648\u062d\u062f\u0627\u062a","Create Unit Groups":"\u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0648\u062d\u062f\u0627\u062a","Taxes Groups":"\u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0636\u0631\u0627\u0626\u0628","Create Tax Groups":"\u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0636\u0631\u064a\u0628\u064a\u0629","Create Tax":"\u0625\u0646\u0634\u0627\u0621 \u0636\u0631\u064a\u0628\u0629","Modules":"\u0627\u0644\u0648\u062d\u062f\u0627\u062a","Upload Module":"\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629","Users":"\u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u0648\u0646","Create User":"\u0625\u0646\u0634\u0627\u0621 \u0645\u0633\u062a\u062e\u062f\u0645","Roles":"\u0627\u0644\u0623\u062f\u0648\u0627\u0631","Create Roles":"\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0623\u062f\u0648\u0627\u0631","Permissions Manager":"\u0645\u062f\u064a\u0631 \u0627\u0644\u0623\u0630\u0648\u0646\u0627\u062a","Procurements":"\u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a","Reports":"\u0627\u0644\u062a\u0642\u0627\u0631\u064a\u0631","Sale Report":"\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0628\u064a\u0639","Incomes & Loosses":"\u0627\u0644\u062f\u062e\u0644 \u0648\u0641\u0642\u062f\u0627\u0646","Sales By Payments":"\u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u0639\u0646 \u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0627\u062a","Invoice Settings":"\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629","Workers":"\u0639\u0645\u0627\u0644","Unable to locate the requested module.":"\u062a\u0639\u0630\u0631 \u062a\u062d\u062f\u064a\u062f \u0645\u0648\u0642\u0639 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629.","The module \"%s\" has been disabled as the dependency \"%s\" is missing. ":"\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \"%s\" \u0644\u0623\u0646 \u0627\u0644\u062a\u0628\u0639\u064a\u0629 \"%s\" \u0645\u0641\u0642\u0648\u062f\u0629.","The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ":"\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \"%s\" \u0646\u0638\u0631\u064b\u0627 \u0644\u0639\u062f\u0645 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u062a\u0628\u0639\u064a\u0629 \"%s\".","The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ":"\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \"%s\"\u0644\u0623\u0646 \u0627\u0644\u062a\u0628\u0639\u064a\u0629 \"%s\"\u0644\u064a\u0633\u062a \u0639\u0644\u0649 \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u062f\u0646\u0649 \u0645\u0646 \u0627\u0644\u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \"%s\".","The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ":"\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \"%s\"\u0644\u0623\u0646 \u0627\u0644\u062a\u0628\u0639\u064a\u0629 \"%s\"\u0645\u0648\u062c\u0648\u062f\u0629 \u0639\u0644\u0649 \u0625\u0635\u062f\u0627\u0631 \u064a\u062a\u062c\u0627\u0648\u0632 \"%s\"\u0627\u0644\u0645\u0648\u0635\u0649 \u0628\u0647. ","Unable to detect the folder from where to perform the installation.":"\u062a\u0639\u0630\u0631 \u0627\u0643\u062a\u0634\u0627\u0641 \u0627\u0644\u0645\u062c\u0644\u062f \u0645\u0646 \u0645\u0643\u0627\u0646 \u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u062a\u062b\u0628\u064a\u062a.","The uploaded file is not a valid module.":"\u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0630\u064a \u062a\u0645 \u062a\u062d\u0645\u064a\u0644\u0647 \u0644\u064a\u0633 \u0648\u062d\u062f\u0629 \u0646\u0645\u0637\u064a\u0629 \u0635\u0627\u0644\u062d\u0629.","The module has been successfully installed.":"\u062a\u0645 \u062a\u062b\u0628\u064a\u062a \u0627\u0644\u0648\u062d\u062f\u0629 \u0628\u0646\u062c\u0627\u062d.","The migration run successfully.":"\u062a\u0645 \u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u062a\u0631\u062d\u064a\u0644 \u0628\u0646\u062c\u0627\u062d.","The module has correctly been enabled.":"\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0648\u062d\u062f\u0629 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d.","Unable to enable the module.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0648\u062d\u062f\u0629.","The Module has been disabled.":"\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629.","Unable to disable the module.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629.","Unable to proceed, the modules management is disabled.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a \u0645\u0639\u0637\u0644\u0629.","Missing required parameters to create a notification":"\u0627\u0644\u0645\u0639\u0644\u0645\u0627\u062a \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0645\u0641\u0642\u0648\u062f\u0629 \u0644\u0625\u0646\u0634\u0627\u0621 \u0625\u0634\u0639\u0627\u0631","The order has been placed.":"\u062a\u0645 \u0648\u0636\u0639 \u0627\u0644\u0637\u0644\u0628.","The percentage discount provided is not valid.":"\u0627\u0644\u0646\u0633\u0628\u0629 \u0627\u0644\u0645\u0626\u0648\u064a\u0629 \u0644\u0644\u062e\u0635\u0645 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d\u0629.","A discount cannot exceed the sub total value of an order.":"\u0644\u0627 \u064a\u0645\u0643\u0646 \u0623\u0646 \u064a\u062a\u062c\u0627\u0648\u0632 \u0627\u0644\u062e\u0635\u0645 \u0627\u0644\u0642\u064a\u0645\u0629 \u0627\u0644\u0625\u062c\u0645\u0627\u0644\u064a\u0629 \u0627\u0644\u0641\u0631\u0639\u064a\u0629 \u0644\u0623\u0645\u0631 \u0645\u0627.","No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.":"\u0644\u0627 \u064a\u0648\u062c\u062f \u062f\u0641\u0639 \u0645\u062a\u0648\u0642\u0639 \u0641\u064a \u0627\u0644\u0648\u0642\u062a \u0627\u0644\u062d\u0627\u0644\u064a. \u0625\u0630\u0627 \u0623\u0631\u0627\u062f \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u062f\u0641\u0639 \u0645\u0628\u0643\u0631\u064b\u0627 \u060c \u0641\u0641\u0643\u0631 \u0641\u064a \u062a\u0639\u062f\u064a\u0644 \u062a\u0627\u0631\u064a\u062e \u0633\u062f\u0627\u062f \u0627\u0644\u0623\u0642\u0633\u0627\u0637.","The payment has been saved.":"\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u062f\u0641\u0639.","Unable to edit an order that is completely paid.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u0630\u064a \u062a\u0645 \u062f\u0641\u0639\u0647 \u0628\u0627\u0644\u0643\u0627\u0645\u0644.","Unable to proceed as one of the previous submitted payment is missing from the order.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0644\u0623\u0646 \u0625\u062d\u062f\u0649 \u0627\u0644\u062f\u0641\u0639\u0629 \u0627\u0644\u0645\u0631\u0633\u0644\u0629 \u0627\u0644\u0633\u0627\u0628\u0642\u0629 \u0645\u0641\u0642\u0648\u062f\u0629 \u0645\u0646 \u0627\u0644\u0637\u0644\u0628.","The order payment status cannot switch to hold as a payment has already been made on that order.":"\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u0628\u062f\u064a\u0644 \u062d\u0627\u0644\u0629 \u062f\u0641\u0639 \u0627\u0644\u0637\u0644\u0628 \u0644\u0644\u062a\u0639\u0644\u064a\u0642 \u062d\u064a\u062b \u062a\u0645 \u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u062f\u0641\u0639 \u0628\u0627\u0644\u0641\u0639\u0644 \u0644\u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628.","Unable to proceed. One of the submitted payment type is not supported.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627. \u0623\u062d\u062f \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0645\u0642\u062f\u0645\u0629 \u063a\u064a\u0631 \u0645\u0639\u062a\u0645\u062f.","Unnamed Product":"\u0645\u0646\u062a\u062c \u063a\u064a\u0631 \u0645\u0633\u0645\u0649","Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0627\u0644\u0645\u0646\u062a\u062c \"%s\" \u0628\u0647 \u0648\u062d\u062f\u0629 \u0644\u0627 \u064a\u0645\u0643\u0646 \u0627\u0633\u062a\u0631\u062f\u0627\u062f\u0647\u0627. \u0631\u0628\u0645\u0627 \u062a\u0645 \u062d\u0630\u0641\u0647.","Unable to find the customer using the provided ID. The order creation has failed.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064a\u0644 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645. \u0641\u0634\u0644 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0623\u0645\u0631.","Unable to proceed a refund on an unpaid order.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u0623\u0645\u0648\u0627\u0644 \u0639\u0644\u0649 \u0637\u0644\u0628 \u063a\u064a\u0631 \u0645\u062f\u0641\u0648\u0639.","The current credit has been issued from a refund.":"\u062a\u0645 \u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646 \u0627\u0644\u062d\u0627\u0644\u064a \u0645\u0646 \u0627\u0633\u062a\u0631\u062f\u0627\u062f.","The order has been successfully refunded.":"\u062a\u0645 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u0637\u0644\u0628 \u0628\u0646\u062c\u0627\u062d.","unable to proceed to a refund as the provided status is not supported.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0644\u0623\u0646 \u0627\u0644\u062d\u0627\u0644\u0629 \u0627\u0644\u0645\u0642\u062f\u0645\u0629 \u063a\u064a\u0631 \u0645\u062f\u0639\u0648\u0645\u0629.","The product %s has been successfully refunded.":"\u062a\u0645 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u0645\u0646\u062a\u062c %s \u0628\u0646\u062c\u0627\u062d.","Unable to find the order product using the provided id.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0645\u0646\u062a\u062c \u0627\u0644\u0637\u0644\u0628 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.","Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \"%s\" \u0643\u0645\u062d\u0648\u0631 \u0648 \"%s\" \u0643\u0645\u0639\u0631\u0641","Unable to fetch the order as the provided pivot argument is not supported.":"\u062a\u0639\u0630\u0631 \u062c\u0644\u0628 \u0627\u0644\u0637\u0644\u0628 \u0644\u0623\u0646 \u0627\u0644\u0648\u0633\u064a\u0637\u0629 \u0627\u0644\u0645\u062d\u0648\u0631\u064a\u0629 \u0627\u0644\u0645\u062a\u0648\u0641\u0631\u0629 \u063a\u064a\u0631 \u0645\u062f\u0639\u0648\u0645\u0629.","The product has been added to the order \"%s\"":"\u062a\u0645\u062a \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0645\u0646\u062a\u062c \u0625\u0644\u0649 \u0627\u0644\u0637\u0644\u0628 \"%s\"","the order has been successfully computed.":"\u062a\u0645 \u0627\u062d\u062a\u0633\u0627\u0628 \u0627\u0644\u0637\u0644\u0628 \u0628\u0646\u062c\u0627\u062d.","The order has been deleted.":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0637\u0644\u0628.","The product has been successfully deleted from the order.":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0645\u0646\u062a\u062c \u0628\u0646\u062c\u0627\u062d \u0645\u0646 \u0627\u0644\u0637\u0644\u0628.","Unable to find the requested product on the provider order.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0641\u064a \u0637\u0644\u0628 \u0627\u0644\u0645\u0648\u0641\u0631.","Ongoing":"\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u0646\u0641\u064a\u0630","Ready":"\u0645\u0633\u062a\u0639\u062f","Not Available":"\u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631","Failed":"\u0628\u0627\u0621\u062a \u0628\u0627\u0644\u0641\u0634\u0644","Unpaid Orders Turned Due":"\u062a\u062d\u0648\u0644\u062a \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u063a\u064a\u0631 \u0627\u0644\u0645\u0633\u062f\u062f\u0629 \u0625\u0644\u0649 \u0645\u0648\u0639\u062f \u0627\u0633\u062a\u062d\u0642\u0627\u0642\u0647\u0627","No orders to handle for the moment.":"\u0644\u0627 \u062a\u0648\u062c\u062f \u0623\u0648\u0627\u0645\u0631 \u0644\u0644\u062a\u0639\u0627\u0645\u0644 \u0645\u0639\u0647\u0627 \u0641\u064a \u0627\u0644\u0648\u0642\u062a \u0627\u0644\u062d\u0627\u0644\u064a.","The order has been correctly voided.":"\u062a\u0645 \u0625\u0628\u0637\u0627\u0644 \u0627\u0644\u0623\u0645\u0631 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d.","Unable to edit an already paid instalment.":"\u062a\u0639\u0630\u0631 \u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0642\u0633\u0637 \u0627\u0644\u0645\u062f\u0641\u0648\u0639 \u0628\u0627\u0644\u0641\u0639\u0644.","The instalment has been saved.":"\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0642\u0633\u0637.","The instalment has been deleted.":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0642\u0633\u0637.","The defined amount is not valid.":"\u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0645\u062d\u062f\u062f \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","No further instalments is allowed for this order. The total instalment already covers the order total.":"\u0644\u0627 \u064a\u0633\u0645\u062d \u0628\u0623\u0642\u0633\u0627\u0637 \u0623\u062e\u0631\u0649 \u0644\u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628. \u064a\u063a\u0637\u064a \u0627\u0644\u0642\u0633\u0637 \u0627\u0644\u0625\u062c\u0645\u0627\u0644\u064a \u0628\u0627\u0644\u0641\u0639\u0644 \u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0637\u0644\u0628.","The instalment has been created.":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0642\u0633\u0637.","The provided status is not supported.":"\u0627\u0644\u062d\u0627\u0644\u0629 \u0627\u0644\u0645\u0642\u062f\u0645\u0629 \u063a\u064a\u0631 \u0645\u062f\u0639\u0648\u0645\u0629.","The order has been successfully updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0637\u0644\u0628 \u0628\u0646\u062c\u0627\u062d.","Unable to find the requested procurement using the provided identifier.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.","Unable to find the assigned provider.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0648\u0641\u0631 \u0627\u0644\u0645\u0639\u064a\u0646.","The procurement has been created.":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.","Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u0631\u064a\u0631 \u0639\u0645\u0644\u064a\u0629 \u0634\u0631\u0627\u0621 \u062a\u0645 \u062a\u062e\u0632\u064a\u0646\u0647\u0627 \u0628\u0627\u0644\u0641\u0639\u0644. \u064a\u0631\u062c\u0649 \u0627\u0644\u0646\u0638\u0631 \u0641\u064a \u0627\u0644\u0623\u062f\u0627\u0621 \u0648\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u062e\u0632\u0648\u0646.","The provider has been edited.":"\u062a\u0645 \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0645\u0648\u0641\u0631.","Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0645\u0639\u0631\u0641 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a \u0644\u0644\u0645\u0646\u062a\u062c \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0631\u062c\u0639 \"%s\" \u0643\u0640 \"%s\"","The operation has completed.":"\u0627\u0643\u062a\u0645\u0644\u062a \u0627\u0644\u0639\u0645\u0644\u064a\u0629.","The procurement has been refreshed.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.","The procurement has been reset.":"\u062a\u0645\u062a \u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.","The procurement products has been deleted.":"\u062a\u0645 \u062d\u0630\u0641 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0634\u0631\u0627\u0621.","The procurement product has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0645\u0646\u062a\u062c \u0627\u0644\u0634\u0631\u0627\u0621.","Unable to find the procurement product using the provided id.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0645\u0646\u062a\u062c \u0627\u0644\u0634\u0631\u0627\u0621 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.","The product %s has been deleted from the procurement %s":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0645\u0646\u062a\u062c %s \u0645\u0646 \u0627\u0644\u062a\u062f\u0628\u064a\u0631 %s","The product with the following ID \"%s\" is not initially included on the procurement":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0636\u0645\u064a\u0646 \u0627\u0644\u0645\u0646\u062a\u062c \u0628\u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u062a\u0627\u0644\u064a \"%s\" \u0641\u064a \u0627\u0644\u0628\u062f\u0627\u064a\u0629 \u0641\u064a \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0634\u0631\u0627\u0621","The procurement products has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0634\u0631\u0627\u0621.","Procurement Automatically Stocked":"\u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0645\u062e\u0632\u0646\u0629 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627","Draft":"\u0645\u0634\u0631\u0648\u0639","The category has been created":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0641\u0626\u0629","Unable to find the product using the provided id.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.","Unable to find the requested product using the provided SKU.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 SKU \u0627\u0644\u0645\u0642\u062f\u0645.","The variable product has been created.":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u062a\u063a\u064a\u0631.","The provided barcode \"%s\" is already in use.":"\u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a \u0627\u0644\u0645\u0642\u062f\u0645 \"%s\" \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u0627\u0644\u0641\u0639\u0644.","The provided SKU \"%s\" is already in use.":"SKU \u0627\u0644\u0645\u0642\u062f\u0645 \"%s\" \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u0627\u0644\u0641\u0639\u0644.","The product has been saved.":"\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0645\u0646\u062a\u062c.","The provided barcode is already in use.":"\u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a \u0627\u0644\u0645\u0642\u062f\u0645 \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u0627\u0644\u0641\u0639\u0644.","The provided SKU is already in use.":"\u0643\u0648\u062f \u0627\u0644\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u062a\u0639\u0631\u064a\u0641\u064a \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u0627\u0644\u0641\u0639\u0644.","The product has been updated":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0645\u0646\u062a\u062c","The variable product has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u062a\u063a\u064a\u0631.","The product variations has been reset":"\u062a\u0645\u062a \u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0623\u0634\u0643\u0627\u0644 \u0627\u0644\u0645\u0646\u062a\u062c","The product has been reset.":"\u062a\u0645 \u0625\u0639\u0627\u062f\u0629 \u0636\u0628\u0637 \u0627\u0644\u0645\u0646\u062a\u062c.","The product \"%s\" has been successfully deleted":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0645\u0646\u062a\u062c \"%s\" \u0628\u0646\u062c\u0627\u062d","Unable to find the requested variation using the provided ID.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0634\u0643\u0644 \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.","The product stock has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c.","The action is not an allowed operation.":"\u0647\u0630\u0627 \u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0644\u064a\u0633 \u0639\u0645\u0644\u064a\u0629 \u0645\u0633\u0645\u0648\u062d \u0628\u0647\u0627.","The product quantity has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0643\u0645\u064a\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.","There is no variations to delete.":"\u0644\u0627 \u062a\u0648\u062c\u062f \u0627\u062e\u062a\u0644\u0627\u0641\u0627\u062a \u0644\u062d\u0630\u0641\u0647\u0627.","There is no products to delete.":"\u0644\u0627 \u062a\u0648\u062c\u062f \u0645\u0646\u062a\u062c\u0627\u062a \u0644\u062d\u0630\u0641\u0647\u0627.","The product variation has been successfully created.":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u062a\u0646\u0648\u0639 \u0627\u0644\u0645\u0646\u062a\u062c \u0628\u0646\u062c\u0627\u062d.","The product variation has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0634\u0643\u0644 \u0627\u0644\u0645\u0646\u062a\u062c.","The provider has been created.":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0648\u0641\u0631.","The provider has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0645\u0648\u0641\u0631.","Unable to find the provider using the specified id.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0648\u0641\u0631 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u062d\u062f\u062f.","The provider has been deleted.":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0645\u0648\u0641\u0631.","Unable to find the provider using the specified identifier.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0648\u0641\u0631 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u062d\u062f\u062f.","The provider account has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0648\u0641\u0631.","The procurement payment has been deducted.":"\u062a\u0645 \u062e\u0635\u0645 \u062f\u0641\u0639\u0629 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.","The dashboard report has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u062a\u0642\u0631\u064a\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629.","Untracked Stock Operation":"\u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u063a\u064a\u0631 \u0627\u0644\u0645\u062a\u0639\u0642\u0628","Unsupported action":"\u0625\u062c\u0631\u0627\u0621 \u063a\u064a\u0631 \u0645\u062f\u0639\u0648\u0645","The expense has been correctly saved.":"\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0645\u0635\u0627\u0631\u064a\u0641 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d.","The report has been computed successfully.":"\u062a\u0645 \u0627\u062d\u062a\u0633\u0627\u0628 \u0627\u0644\u062a\u0642\u0631\u064a\u0631 \u0628\u0646\u062c\u0627\u062d.","The table has been truncated.":"\u062a\u0645 \u0642\u0637\u0639 \u0627\u0644\u062c\u062f\u0648\u0644.","Untitled Settings Page":"\u0635\u0641\u062d\u0629 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0628\u062f\u0648\u0646 \u0639\u0646\u0648\u0627\u0646","No description provided for this settings page.":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0648\u0635\u0641 \u0644\u0635\u0641\u062d\u0629 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0647\u0630\u0647.","The form has been successfully saved.":"\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u0628\u0646\u062c\u0627\u062d.","Unable to reach the host":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u0645\u0636\u064a\u0641","Unable to connect to the database using the credentials provided.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0627\u0639\u062a\u0645\u0627\u062f \u0627\u0644\u0645\u0642\u062f\u0645\u0629.","Unable to select the database.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u062f\u064a\u062f \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a.","Access denied for this user.":"\u0627\u0644\u0648\u0635\u0648\u0644 \u0645\u0631\u0641\u0648\u0636 \u0644\u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645.","The connexion with the database was successful":"\u0643\u0627\u0646 \u0627\u0644\u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0646\u0627\u062c\u062d\u064b\u0627","Cash":"\u0627\u0644\u0633\u064a\u0648\u0644\u0629 \u0627\u0644\u0646\u0642\u062f\u064a\u0629","Bank Payment":"\u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0645\u0635\u0631\u0641\u064a\u0629","NexoPOS has been successfully installed.":"\u062a\u0645 \u062a\u062b\u0628\u064a\u062a NexoPOS \u0628\u0646\u062c\u0627\u062d.","A tax cannot be his own parent.":"\u0644\u0627 \u064a\u0645\u0643\u0646 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0648\u0627\u0644\u062f\u064a\u0647.","The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".":"\u0627\u0644\u062a\u0633\u0644\u0633\u0644 \u0627\u0644\u0647\u0631\u0645\u064a \u0644\u0644\u0636\u0631\u0627\u0626\u0628 \u0645\u062d\u062f\u062f \u0628\u0640 1. \u064a\u062c\u0628 \u0623\u0644\u0627 \u064a\u0643\u0648\u0646 \u0646\u0648\u0639 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0644\u0644\u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0641\u0631\u0639\u064a\u0629 \u0645\u0639\u064a\u0651\u0646\u064b\u0627 \u0639\u0644\u0649 \"\u0645\u062c\u0645\u0639\u0629 \".","Unable to find the requested tax using the provided identifier.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.","The tax group has been correctly saved.":"\u062a\u0645 \u062d\u0641\u0638 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d.","The tax has been correctly created.":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d.","The tax has been successfully deleted.":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0628\u0646\u062c\u0627\u062d.","The Unit Group has been created.":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a.","The unit group %s has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a %s.","Unable to find the unit group to which this unit is attached.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u062a\u064a \u062a\u062a\u0635\u0644 \u0628\u0647\u0627 \u0647\u0630\u0647 \u0627\u0644\u0648\u062d\u062f\u0629.","The unit has been saved.":"\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0648\u062d\u062f\u0629.","Unable to find the Unit using the provided id.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0648\u062d\u062f\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.","The unit has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0648\u062d\u062f\u0629.","The unit group %s has more than one base unit":"\u062a\u062d\u062a\u0648\u064a \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a %s \u0639\u0644\u0649 \u0623\u0643\u062b\u0631 \u0645\u0646 \u0648\u062d\u062f\u0629 \u0623\u0633\u0627\u0633\u064a\u0629 \u0648\u0627\u062d\u062f\u0629","The unit has been deleted.":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0648\u062d\u062f\u0629.","Clone of \"%s\"":"\u0646\u0633\u062e\u0629 \u0645\u0646 \"%s\"","The role has been cloned.":"\u062a\u0645 \u0627\u0633\u062a\u0646\u0633\u0627\u062e \u0627\u0644\u062f\u0648\u0631.","unable to find this validation class %s.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0641\u0626\u0629 \u0627\u0644\u062a\u062d\u0642\u0642 \u0647\u0630\u0647 %s.","Procurement Cash Flow Account":"\u062d\u0633\u0627\u0628 \u0627\u0644\u062a\u062f\u0641\u0642 \u0627\u0644\u0646\u0642\u062f\u064a \u0644\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a","Sale Cash Flow Account":"\u062d\u0633\u0627\u0628 \u0627\u0644\u062a\u062f\u0641\u0642 \u0627\u0644\u0646\u0642\u062f\u064a \u0644\u0644\u0628\u064a\u0639","Sales Refunds Account":"\u062d\u0633\u0627\u0628 \u0645\u0631\u062f\u0648\u062f\u0627\u062a \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a","Stock return for spoiled items will be attached to this account":"\u0633\u064a\u062a\u0645 \u0625\u0631\u0641\u0627\u0642 \u0625\u0631\u062c\u0627\u0639 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0644\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0641\u0627\u0633\u062f\u0629 \u0628\u0647\u0630\u0627 \u0627\u0644\u062d\u0633\u0627\u0628","Enable Reward":"\u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629","Will activate the reward system for the customers.":"\u0633\u064a\u062a\u0645 \u062a\u0641\u0639\u064a\u0644 \u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a \u0644\u0644\u0639\u0645\u0644\u0627\u0621.","Default Customer Account":"\u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a","Default Customer Group":"\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629","Select to which group each new created customers are assigned to.":"\u062d\u062f\u062f \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u062a\u064a \u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0643\u0644 \u0639\u0645\u0644\u0627\u0621 \u062c\u062f\u062f \u0644\u0647\u0627.","Enable Credit & Account":"\u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646 \u0648\u0627\u0644\u062d\u0633\u0627\u0628","The customers will be able to make deposit or obtain credit.":"\u0633\u064a\u062a\u0645\u0643\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0645\u0646 \u0627\u0644\u0625\u064a\u062f\u0627\u0639 \u0623\u0648 \u0627\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646.","Store Name":"\u0627\u0633\u0645 \u0627\u0644\u0645\u062a\u062c\u0631","This is the store name.":"\u0647\u0630\u0627 \u0647\u0648 \u0627\u0633\u0645 \u0627\u0644\u0645\u062a\u062c\u0631.","Store Address":"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0645\u062a\u062c\u0631","The actual store address.":"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0645\u062a\u062c\u0631 \u0627\u0644\u0641\u0639\u0644\u064a.","Store City":"\u0633\u062a\u0648\u0631 \u0633\u064a\u062a\u064a","The actual store city.":"\u0645\u062f\u064a\u0646\u0629 \u0627\u0644\u0645\u062a\u062c\u0631 \u0627\u0644\u0641\u0639\u0644\u064a\u0629.","Store Phone":"\u0647\u0627\u062a\u0641 \u0627\u0644\u0645\u062a\u062c\u0631","The phone number to reach the store.":"\u0631\u0642\u0645 \u0627\u0644\u0647\u0627\u062a\u0641 \u0627\u0644\u0645\u0631\u0627\u062f \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u0645\u062a\u062c\u0631.","Store Email":"\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0627\u0644\u062e\u0627\u0635 \u0628\u0627\u0644\u0645\u062a\u062c\u0631","The actual store email. Might be used on invoice or for reports.":"\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0627\u0644\u0641\u0639\u0644\u064a \u0644\u0644\u0645\u062a\u062c\u0631. \u064a\u0645\u0643\u0646 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u0627 \u0641\u064a \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629 \u0623\u0648 \u0627\u0644\u062a\u0642\u0627\u0631\u064a\u0631.","Store PO.Box":"\u062a\u062e\u0632\u064a\u0646 \u0635\u0646\u062f\u0648\u0642 \u0627\u0644\u0628\u0631\u064a\u062f","The store mail box number.":"\u0631\u0642\u0645 \u0635\u0646\u062f\u0648\u0642 \u0628\u0631\u064a\u062f \u0627\u0644\u0645\u062a\u062c\u0631.","Store Fax":"\u0641\u0627\u0643\u0633 \u0627\u0644\u0645\u062a\u062c\u0631","The store fax number.":"\u0631\u0642\u0645 \u0641\u0627\u0643\u0633 \u0627\u0644\u0645\u062a\u062c\u0631.","Store Additional Information":"\u062a\u062e\u0632\u064a\u0646 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0625\u0636\u0627\u0641\u064a\u0629","Store additional information.":"\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u0625\u0636\u0627\u0641\u064a\u0629.","Store Square Logo":"\u0645\u062a\u062c\u0631 \u0627\u0644\u0634\u0639\u0627\u0631 \u0627\u0644\u0645\u0631\u0628\u0639","Choose what is the square logo of the store.":"\u0627\u062e\u062a\u0631 \u0645\u0627 \u0647\u0648 \u0627\u0644\u0634\u0639\u0627\u0631 \u0627\u0644\u0645\u0631\u0628\u0639 \u0644\u0644\u0645\u062a\u062c\u0631.","Store Rectangle Logo":"\u0645\u062a\u062c\u0631 \u0634\u0639\u0627\u0631 \u0627\u0644\u0645\u0633\u062a\u0637\u064a\u0644","Choose what is the rectangle logo of the store.":"\u0627\u062e\u062a\u0631 \u0645\u0627 \u0647\u0648 \u0634\u0639\u0627\u0631 \u0627\u0644\u0645\u062a\u062c\u0631 \u0627\u0644\u0645\u0633\u062a\u0637\u064a\u0644.","Define the default fallback language.":"\u062d\u062f\u062f \u0627\u0644\u0644\u063a\u0629 \u0627\u0644\u0627\u062d\u062a\u064a\u0627\u0637\u064a\u0629 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629.","Currency":"\u0639\u0645\u0644\u0629","Currency Symbol":"\u0631\u0645\u0632 \u0627\u0644\u0639\u0645\u0644\u0629","This is the currency symbol.":"\u0647\u0630\u0627 \u0647\u0648 \u0631\u0645\u0632 \u0627\u0644\u0639\u0645\u0644\u0629.","Currency ISO":"ISO \u0627\u0644\u0639\u0645\u0644\u0629","The international currency ISO format.":"\u062a\u0646\u0633\u064a\u0642 ISO \u0644\u0644\u0639\u0645\u0644\u0629 \u0627\u0644\u062f\u0648\u0644\u064a\u0629.","Currency Position":"\u0648\u0636\u0639 \u0627\u0644\u0639\u0645\u0644\u0629","Before the amount":"\u0642\u0628\u0644 \u0627\u0644\u0645\u0628\u0644\u063a","After the amount":"\u0628\u0639\u062f \u0627\u0644\u0645\u0628\u0644\u063a","Define where the currency should be located.":"\u062d\u062f\u062f \u0645\u0643\u0627\u0646 \u062a\u0648\u0627\u062c\u062f \u0627\u0644\u0639\u0645\u0644\u0629.","Preferred Currency":"\u0627\u0644\u0639\u0645\u0644\u0629 \u0627\u0644\u0645\u0641\u0636\u0644\u0629","ISO Currency":"\u0639\u0645\u0644\u0629 ISO","Symbol":"\u0631\u0645\u0632","Determine what is the currency indicator that should be used.":"\u062d\u062f\u062f \u0645\u0627 \u0647\u0648 \u0645\u0624\u0634\u0631 \u0627\u0644\u0639\u0645\u0644\u0629 \u0627\u0644\u0630\u064a \u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647.","Currency Thousand Separator":"\u0641\u0627\u0635\u0644 \u0622\u0644\u0627\u0641 \u0627\u0644\u0639\u0645\u0644\u0627\u062a","Currency Decimal Separator":"\u0641\u0627\u0635\u0644 \u0639\u0634\u0631\u064a \u0644\u0644\u0639\u0645\u0644\u0629","Define the symbol that indicate decimal number. By default \".\" is used.":"\u062d\u062f\u062f \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0630\u064a \u064a\u0634\u064a\u0631 \u0625\u0644\u0649 \u0627\u0644\u0631\u0642\u0645 \u0627\u0644\u0639\u0634\u0631\u064a. \u0628\u0634\u0643\u0644 \u0627\u0641\u062a\u0631\u0627\u0636\u064a \u060c \u064a\u062a\u0645 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \".\".","Currency Precision":"\u062f\u0642\u0629 \u0627\u0644\u0639\u0645\u0644\u0629","%s numbers after the decimal":" %s \u0623\u0631\u0642\u0627\u0645 \u0628\u0639\u062f \u0627\u0644\u0641\u0627\u0635\u0644\u0629 \u0627\u0644\u0639\u0634\u0631\u064a\u0629","Date Format":"\u0635\u064a\u063a\u0629 \u0627\u0644\u062a\u0627\u0631\u064a\u062e","This define how the date should be defined. The default format is \"Y-m-d\".":"\u0647\u0630\u0627 \u064a\u062d\u062f\u062f \u0643\u064a\u0641 \u064a\u062c\u0628 \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u062a\u0627\u0631\u064a\u062e. \u0627\u0644\u062a\u0646\u0633\u064a\u0642 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a \u0647\u0648 \"Y-m-d\".","Registration":"\u062a\u0633\u062c\u064a\u0644","Registration Open":"\u0641\u062a\u062d \u0627\u0644\u062a\u0633\u062c\u064a\u0644","Determine if everyone can register.":"\u062a\u062d\u062f\u064a\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u0645\u0643\u0646 \u0644\u0644\u062c\u0645\u064a\u0639 \u0627\u0644\u062a\u0633\u062c\u064a\u0644.","Registration Role":"\u062f\u0648\u0631 \u0627\u0644\u062a\u0633\u062c\u064a\u0644","Select what is the registration role.":"\u062d\u062f\u062f \u0645\u0627 \u0647\u0648 \u062f\u0648\u0631 \u0627\u0644\u062a\u0633\u062c\u064a\u0644.","Requires Validation":"\u064a\u062a\u0637\u0644\u0628 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0627\u0644\u0635\u062d\u0629","Force account validation after the registration.":"\u0641\u0631\u0636 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0635\u062d\u0629 \u0627\u0644\u062d\u0633\u0627\u0628 \u0628\u0639\u062f \u0627\u0644\u062a\u0633\u062c\u064a\u0644.","Allow Recovery":"\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0644\u0627\u0633\u062a\u0631\u062f\u0627\u062f","Allow any user to recover his account.":"\u0627\u0644\u0633\u0645\u0627\u062d \u0644\u0623\u064a \u0645\u0633\u062a\u062e\u062f\u0645 \u0628\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u062d\u0633\u0627\u0628\u0647.","Receipts":"\u0627\u0644\u0625\u064a\u0635\u0627\u0644\u0627\u062a","Receipt Template":"\u0646\u0645\u0648\u0630\u062c \u0627\u0644\u0625\u064a\u0635\u0627\u0644","Default":"\u062a\u0642\u0635\u064a\u0631","Choose the template that applies to receipts":"\u0627\u062e\u062a\u0631 \u0627\u0644\u0642\u0627\u0644\u0628 \u0627\u0644\u0630\u064a \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0625\u064a\u0635\u0627\u0644\u0627\u062a","Receipt Logo":"\u0634\u0639\u0627\u0631 \u0627\u0644\u0627\u0633\u062a\u0644\u0627\u0645","Provide a URL to the logo.":"\u0623\u062f\u062e\u0644 \u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0634\u0639\u0627\u0631.","Merge Products On Receipt\/Invoice":"\u062f\u0645\u062c \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0639\u0646\u062f \u0627\u0644\u0627\u0633\u062a\u0644\u0627\u0645 \/ \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629","All similar products will be merged to avoid a paper waste for the receipt\/invoice.":"\u0633\u064a\u062a\u0645 \u062f\u0645\u062c \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0645\u0627\u062b\u0644\u0629 \u0644\u062a\u062c\u0646\u0628 \u0625\u0647\u062f\u0627\u0631 \u0627\u0644\u0648\u0631\u0642 \u0644\u0644\u0625\u064a\u0635\u0627\u0644 \/ \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629.","Receipt Footer":"\u062a\u0630\u064a\u064a\u0644 \u0627\u0644\u0625\u064a\u0635\u0627\u0644","If you would like to add some disclosure at the bottom of the receipt.":"\u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u0631\u063a\u0628 \u0641\u064a \u0625\u0636\u0627\u0641\u0629 \u0628\u0639\u0636 \u0627\u0644\u0625\u0641\u0635\u0627\u062d \u0641\u064a \u0623\u0633\u0641\u0644 \u0627\u0644\u0625\u064a\u0635\u0627\u0644.","Column A":"\u0627\u0644\u0639\u0645\u0648\u062f \u0623","Column B":"\u0627\u0644\u0639\u0645\u0648\u062f \u0628","Order Code Type":"\u0646\u0648\u0639 \u0631\u0645\u0632 \u0627\u0644\u0637\u0644\u0628","Determine how the system will generate code for each orders.":"\u062d\u062f\u062f \u0643\u064a\u0641 \u0633\u064a\u0642\u0648\u0645 \u0627\u0644\u0646\u0638\u0627\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0631\u0645\u0632 \u0644\u0643\u0644 \u0637\u0644\u0628.","Sequential":"\u062a\u0633\u0644\u0633\u0644\u064a","Random Code":"\u0643\u0648\u062f \u0639\u0634\u0648\u0627\u0626\u064a","Number Sequential":"\u0631\u0642\u0645 \u0645\u062a\u0633\u0644\u0633\u0644","Allow Unpaid Orders":"\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0644\u0637\u0644\u0628\u0627\u062a \u063a\u064a\u0631 \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629","Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".":"\u0633\u064a\u0645\u0646\u0639 \u0648\u0636\u0639 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u063a\u064a\u0631 \u0627\u0644\u0645\u0643\u062a\u0645\u0644\u0629. \u0625\u0630\u0627 \u0643\u0627\u0646 \u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646 \u0645\u0633\u0645\u0648\u062d\u064b\u0627 \u0628\u0647 \u060c \u0641\u064a\u062c\u0628 \u062a\u0639\u064a\u064a\u0646 \u0647\u0630\u0627 \u0627\u0644\u062e\u064a\u0627\u0631 \u0639\u0644\u0649 \"\u0646\u0639\u0645\".","Allow Partial Orders":"\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u062c\u0632\u0626\u064a\u0629","Will prevent partially paid orders to be placed.":"\u0633\u064a\u0645\u0646\u0639 \u0648\u0636\u0639 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629 \u062c\u0632\u0626\u064a\u064b\u0627.","Quotation Expiration":"\u0627\u0646\u062a\u0647\u0627\u0621 \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0627\u0642\u062a\u0628\u0627\u0633","Quotations will get deleted after they defined they has reached.":"\u0633\u064a\u062a\u0645 \u062d\u0630\u0641 \u0639\u0631\u0648\u0636 \u0627\u0644\u0623\u0633\u0639\u0627\u0631 \u0628\u0639\u062f \u062a\u062d\u062f\u064a\u062f\u0647\u0627.","%s Days":"\u066a s \u064a\u0648\u0645","Features":"\u0633\u0645\u0627\u062a","Show Quantity":"\u0639\u0631\u0636 \u0627\u0644\u0643\u0645\u064a\u0629","Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.":"\u0633\u064a\u0638\u0647\u0631 \u0645\u062d\u062f\u062f \u0627\u0644\u0643\u0645\u064a\u0629 \u0623\u062b\u0646\u0627\u0621 \u0627\u062e\u062a\u064a\u0627\u0631 \u0627\u0644\u0645\u0646\u062a\u062c. \u0648\u0628\u062e\u0644\u0627\u0641 \u0630\u0644\u0643 \u060c \u064a\u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 \u0639\u0644\u0649 1.","Allow Customer Creation":"\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Allow customers to be created on the POS.":"\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0639\u0644\u0649 \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639.","Quick Product":"\u0645\u0646\u062a\u062c \u0633\u0631\u064a\u0639","Allow quick product to be created from the POS.":"\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0646\u062a\u062c \u0633\u0631\u064a\u0639 \u0645\u0646 \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639.","Editable Unit Price":"\u0633\u0639\u0631 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0642\u0627\u0628\u0644 \u0644\u0644\u062a\u0639\u062f\u064a\u0644","Allow product unit price to be edited.":"\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u062a\u0639\u062f\u064a\u0644 \u0633\u0639\u0631 \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.","Order Types":"\u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0623\u0648\u0627\u0645\u0631","Control the order type enabled.":"\u0627\u0644\u062a\u062d\u0643\u0645 \u0641\u064a \u0646\u0648\u0639 \u0627\u0644\u0623\u0645\u0631 \u0645\u0645\u0643\u0651\u0646.","Bubble":"\u0641\u0642\u0627\u0639\u0629","Ding":"\u062f\u064a\u0646\u063a","Pop":"\u0641\u0631\u0642\u0639\u0629","Cash Sound":"\u0627\u0644\u0635\u0648\u062a \u0627\u0644\u0646\u0642\u062f\u064a","Layout":"\u062a\u062e\u0637\u064a\u0637","Retail Layout":"\u062a\u062e\u0637\u064a\u0637 \u0627\u0644\u0628\u064a\u0639 \u0628\u0627\u0644\u062a\u062c\u0632\u0626\u0629","Clothing Shop":"\u0645\u062d\u0644 \u0645\u0644\u0627\u0628\u0633","POS Layout":"\u062a\u062e\u0637\u064a\u0637 \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639","Change the layout of the POS.":"\u0642\u0645 \u0628\u062a\u063a\u064a\u064a\u0631 \u062a\u062e\u0637\u064a\u0637 POS.","Sale Complete Sound":"\u0628\u064a\u0639 \u0627\u0644\u0635\u0648\u062a \u0627\u0644\u0643\u0627\u0645\u0644","New Item Audio":"\u0639\u0646\u0635\u0631 \u0635\u0648\u062a\u064a \u062c\u062f\u064a\u062f","The sound that plays when an item is added to the cart.":"\u0627\u0644\u0635\u0648\u062a \u0627\u0644\u0630\u064a \u064a\u062a\u0645 \u062a\u0634\u063a\u064a\u0644\u0647 \u0639\u0646\u062f \u0625\u0636\u0627\u0641\u0629 \u0639\u0646\u0635\u0631 \u0625\u0644\u0649 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642.","Printing":"\u0637\u0628\u0627\u0639\u0629","Printed Document":"\u0648\u062b\u064a\u0642\u0629 \u0645\u0637\u0628\u0648\u0639\u0629","Choose the document used for printing aster a sale.":"\u0627\u062e\u062a\u0631 \u0627\u0644\u0648\u062b\u064a\u0642\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u0629 \u0644\u0637\u0628\u0627\u0639\u0629 aster a sale.","Printing Enabled For":"\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0637\u0628\u0627\u0639\u0629 \u0644\u0640","All Orders":"\u062c\u0645\u064a\u0639 \u0627\u0644\u0637\u0644\u0628\u0627\u062a","From Partially Paid Orders":"\u0645\u0646 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629 \u062c\u0632\u0626\u064a\u064b\u0627","Only Paid Orders":"\u0641\u0642\u0637 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629","Determine when the printing should be enabled.":"\u062d\u062f\u062f \u0645\u062a\u0649 \u064a\u062c\u0628 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0637\u0628\u0627\u0639\u0629.","Printing Gateway":"\u0628\u0648\u0627\u0628\u0629 \u0627\u0644\u0637\u0628\u0627\u0639\u0629","Determine what is the gateway used for printing.":"\u062a\u062d\u062f\u064a\u062f \u0645\u0627 \u0647\u064a \u0627\u0644\u0628\u0648\u0627\u0628\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u0629 \u0644\u0644\u0637\u0628\u0627\u0639\u0629.","Enable Cash Registers":"\u062a\u0645\u0643\u064a\u0646 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u0646\u0642\u062f","Determine if the POS will support cash registers.":"\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639 \u0633\u062a\u062f\u0639\u0645 \u0645\u0633\u062c\u0644\u0627\u062a \u0627\u0644\u0646\u0642\u062f.","Cashier Idle Counter":"\u0639\u062f\u0627\u062f \u0627\u0644\u062e\u0645\u0648\u0644 \u0623\u0645\u064a\u0646 \u0627\u0644\u0635\u0646\u062f\u0648\u0642","5 Minutes":"5 \u062f\u0642\u0627\u0626\u0642","10 Minutes":"10 \u062f\u0642\u0627\u0626\u0642","15 Minutes":"15 \u062f\u0642\u064a\u0642\u0629","20 Minutes":"20 \u062f\u0642\u064a\u0642\u0629","30 Minutes":"30 \u062f\u0642\u064a\u0642\u0629","Selected after how many minutes the system will set the cashier as idle.":"\u064a\u062a\u0645 \u062a\u062d\u062f\u064a\u062f\u0647 \u0628\u0639\u062f \u0639\u062f\u062f \u0627\u0644\u062f\u0642\u0627\u0626\u0642 \u0627\u0644\u062a\u064a \u0633\u064a\u0642\u0648\u0645 \u0627\u0644\u0646\u0638\u0627\u0645 \u0641\u064a\u0647\u0627 \u0628\u062a\u0639\u064a\u064a\u0646 \u0623\u0645\u064a\u0646 \u0627\u0644\u0635\u0646\u062f\u0648\u0642 \u0641\u064a \u0648\u0636\u0639 \u0627\u0644\u062e\u0645\u0648\u0644.","Cash Disbursement":"\u0627\u0644\u0635\u0631\u0641 \u0627\u0644\u0646\u0642\u062f\u064a","Allow cash disbursement by the cashier.":"\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0644\u0635\u0631\u0641 \u0627\u0644\u0646\u0642\u062f\u064a \u0645\u0646 \u0642\u0628\u0644 \u0623\u0645\u064a\u0646 \u0627\u0644\u0635\u0646\u062f\u0648\u0642.","Cash Registers":"\u0627\u0644\u0627\u062a \u0627\u0644\u0645\u062d\u0627\u0633\u0628\u0647","Keyboard Shortcuts":"\u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d","Cancel Order":"\u0627\u0644\u063a\u0627\u0621 \u0627\u0644\u0637\u0644\u0628","Keyboard shortcut to cancel the current order.":"\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u062d\u0627\u0644\u064a.","Keyboard shortcut to hold the current order.":"\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u0627\u062d\u062a\u0641\u0627\u0638 \u0628\u0627\u0644\u062a\u0631\u062a\u064a\u0628 \u0627\u0644\u062d\u0627\u0644\u064a.","Keyboard shortcut to create a customer.":"\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0625\u0646\u0634\u0627\u0621 \u0639\u0645\u064a\u0644.","Proceed Payment":"\u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u062f\u0641\u0639","Keyboard shortcut to proceed to the payment.":"\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u062f\u0641\u0639.","Open Shipping":"\u0641\u062a\u062d \u0627\u0644\u0634\u062d\u0646","Keyboard shortcut to define shipping details.":"\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u062a\u062d\u062f\u064a\u062f \u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0634\u062d\u0646.","Open Note":"\u0627\u0641\u062a\u062d \u0627\u0644\u0645\u0644\u0627\u062d\u0638\u0629","Keyboard shortcut to open the notes.":"\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0641\u062a\u062d \u0627\u0644\u0645\u0644\u0627\u062d\u0638\u0627\u062a.","Order Type Selector":"\u0645\u062d\u062f\u062f \u0646\u0648\u0639 \u0627\u0644\u0637\u0644\u0628","Keyboard shortcut to open the order type selector.":"\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0641\u062a\u062d \u0645\u062d\u062f\u062f \u0646\u0648\u0639 \u0627\u0644\u0637\u0644\u0628.","Toggle Fullscreen":"\u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629 \u062a\u0628\u062f\u064a\u0644","Keyboard shortcut to toggle fullscreen.":"\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u062a\u0628\u062f\u064a\u0644 \u0625\u0644\u0649 \u0648\u0636\u0639 \u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629.","Quick Search":"\u0628\u062d\u062b \u0633\u0631\u064a\u0639","Keyboard shortcut open the quick search popup.":"\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0627\u0641\u062a\u062d \u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0628\u062d\u062b \u0627\u0644\u0633\u0631\u064a\u0639 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0629.","Amount Shortcuts":"\u0645\u0642\u062f\u0627\u0631 \u0627\u0644\u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a","VAT Type":"\u0646\u0648\u0639 \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0642\u064a\u0645\u0629 \u0627\u0644\u0645\u0636\u0627\u0641\u0629","Determine the VAT type that should be used.":"\u062a\u062d\u062f\u064a\u062f \u0646\u0648\u0639 \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0642\u064a\u0645\u0629 \u0627\u0644\u0645\u0636\u0627\u0641\u0629 \u0627\u0644\u062a\u064a \u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u0627.","Flat Rate":"\u0645\u0639\u062f\u0644","Flexible Rate":"\u0646\u0633\u0628\u0629 \u0645\u0631\u0646\u0629","Products Vat":"\u0645\u0646\u062a\u062c\u0627\u062a \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0642\u064a\u0645\u0629 \u0627\u0644\u0645\u0636\u0627\u0641\u0629","Products & Flat Rate":"\u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0648\u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u062b\u0627\u0628\u062a","Products & Flexible Rate":"\u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0648\u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0645\u0631\u0646","Define the tax group that applies to the sales.":"\u062d\u062f\u062f \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u062a\u064a \u062a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a.","Define how the tax is computed on sales.":"\u062a\u062d\u062f\u064a\u062f \u0643\u064a\u0641\u064a\u0629 \u0627\u062d\u062a\u0633\u0627\u0628 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0639\u0644\u0649 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a.","VAT Settings":"\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0642\u064a\u0645\u0629 \u0627\u0644\u0645\u0636\u0627\u0641\u0629","Enable Email Reporting":"\u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0625\u0628\u0644\u0627\u063a \u0639\u0646 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a","Determine if the reporting should be enabled globally.":"\u062a\u062d\u062f\u064a\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u062a\u0645\u0643\u064a\u0646 \u0625\u0639\u062f\u0627\u062f \u0627\u0644\u062a\u0642\u0627\u0631\u064a\u0631 \u0639\u0644\u0649 \u0627\u0644\u0635\u0639\u064a\u062f \u0627\u0644\u0639\u0627\u0644\u0645\u064a.","Supplies":"\u0627\u0644\u0644\u0648\u0627\u0632\u0645","Public Name":"\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0639\u0627\u0645","Define what is the user public name. If not provided, the username is used instead.":"\u062d\u062f\u062f \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0639\u0627\u0645 \u0644\u0644\u0645\u0633\u062a\u062e\u062f\u0645. \u0625\u0630\u0627 \u0644\u0645 \u064a\u062a\u0645 \u062a\u0642\u062f\u064a\u0645\u0647 \u060c \u0641\u0633\u064a\u062a\u0645 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u0630\u0644\u0643.","Enable Workers":"\u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0639\u0645\u0627\u0644","Test":"\u0627\u062e\u062a\u0628\u0627\u0631","There is no product to display...":"\u0644\u0627 \u064a\u0648\u062c\u062f \u0645\u0646\u062a\u062c \u0644\u0639\u0631\u0636\u0647 ...","Low Quantity":"\u0643\u0645\u064a\u0629 \u0642\u0644\u064a\u0644\u0629","Which quantity should be assumed low.":"\u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u062a\u064a \u064a\u062c\u0628 \u0627\u0641\u062a\u0631\u0627\u0636\u0647\u0627 \u0645\u0646\u062e\u0641\u0636\u0629.","Stock Alert":"\u062a\u0646\u0628\u064a\u0647 \u0627\u0644\u0645\u062e\u0632\u0648\u0646","Low Stock Report":"\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062e\u0641\u0636","Low Stock Alert":"\u062a\u0646\u0628\u064a\u0647 \u0627\u0646\u062e\u0641\u0627\u0636 \u0627\u0644\u0645\u062e\u0632\u0648\u0646","Define whether the stock alert should be enabled for this unit.":"\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u062a\u0645\u0643\u064a\u0646 \u062a\u0646\u0628\u064a\u0647 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0644\u0647\u0630\u0647 \u0627\u0644\u0648\u062d\u062f\u0629.","All Refunds":"\u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0628\u0627\u0644\u063a \u0627\u0644\u0645\u0639\u0627\u062f\u0629","No result match your query.":"\u0644\u0627 \u062a\u0648\u062c\u062f \u0646\u062a\u064a\u062c\u0629 \u062a\u0637\u0627\u0628\u0642 \u0627\u0644\u0627\u0633\u062a\u0639\u0644\u0627\u0645 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643.","Report Type":"\u0646\u0648\u0639 \u0627\u0644\u062a\u0642\u0631\u064a\u0631","Categories Detailed":"\u0641\u0626\u0627\u062a \u0645\u0641\u0635\u0644\u0629","Categories Summary":"\u0645\u0644\u062e\u0635 \u0627\u0644\u0641\u0626\u0627\u062a","Allow you to choose the report type.":"\u062a\u0633\u0645\u062d \u0644\u0643 \u0628\u0627\u062e\u062a\u064a\u0627\u0631 \u0646\u0648\u0639 \u0627\u0644\u062a\u0642\u0631\u064a\u0631.","Unknown":"\u0645\u062c\u0647\u0648\u0644","Not Authorized":"\u063a\u064a\u0631 \u0645\u062e\u0648\u0644","Creating customers has been explicitly disabled from the settings.":"\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0628\u0634\u0643\u0644 \u0635\u0631\u064a\u062d \u0645\u0646 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a.","Sales Discounts":"\u062a\u062e\u0641\u064a\u0636 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a","Sales Taxes":"\u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a","Birth Date":"\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0648\u0644\u0627\u062f\u0629","Displays the customer birth date":"\u064a\u0639\u0631\u0636 \u062a\u0627\u0631\u064a\u062e \u0645\u064a\u0644\u0627\u062f \u0627\u0644\u0639\u0645\u064a\u0644","Sale Value":"\u0642\u064a\u0645\u0629 \u0627\u0644\u0628\u064a\u0639","Purchase Value":"\u0642\u064a\u0645\u0629 \u0627\u0644\u0634\u0631\u0627\u0621","Would you like to refresh this ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u062d\u062f\u064a\u062b \u0647\u0630\u0627\u061f","You cannot delete your own account.":"\u0644\u0627 \u064a\u0645\u0643\u0646\u0643 \u062d\u0630\u0641 \u062d\u0633\u0627\u0628\u0643 \u0627\u0644\u062e\u0627\u0635.","Sales Progress":"\u062a\u0642\u062f\u0645 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a","Procurement Refreshed":"\u062a\u062c\u062f\u064a\u062f \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a","The procurement \"%s\" has been successfully refreshed.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \"\u066as\" \u0628\u0646\u062c\u0627\u062d.","Partially Due":"\u0645\u0633\u062a\u062d\u0642 \u062c\u0632\u0626\u064a\u064b\u0627","No payment type has been selected on the settings. Please check your POS features and choose the supported order type":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u062d\u062f\u064a\u062f \u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639 \u0641\u064a \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a. \u064a\u0631\u062c\u0649 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0645\u064a\u0632\u0627\u062a \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643 \u0648\u0627\u062e\u062a\u064a\u0627\u0631 \u0646\u0648\u0639 \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u0645\u062f\u0639\u0648\u0645","Read More":"\u0627\u0642\u0631\u0623 \u0623\u0643\u062b\u0631","Wipe All":"\u0627\u0645\u0633\u062d \u0627\u0644\u0643\u0644","Wipe Plus Grocery":"\u0628\u0642\u0627\u0644\u0629 \u0648\u0627\u064a\u0628 \u0628\u0644\u0633","Accounts List":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062d\u0633\u0627\u0628\u0627\u062a","Display All Accounts.":"\u0639\u0631\u0636 \u0643\u0627\u0641\u0629 \u0627\u0644\u062d\u0633\u0627\u0628\u0627\u062a.","No Account has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u062d\u0633\u0627\u0628","Add a new Account":"\u0625\u0636\u0627\u0641\u0629 \u062d\u0633\u0627\u0628 \u062c\u062f\u064a\u062f","Create a new Account":"\u0627\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628 \u062c\u062f\u064a\u062f","Register a new Account and save it.":"\u062a\u0633\u062c\u064a\u0644 \u062d\u0633\u0627\u0628 \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.","Edit Account":"\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u062d\u0633\u0627\u0628","Modify An Account.":"\u062a\u0639\u062f\u064a\u0644 \u062d\u0633\u0627\u0628.","Return to Accounts":"\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u062d\u0633\u0627\u0628\u0627\u062a","Accounts":"\u062d\u0633\u0627\u0628\u0627\u062a","Create Account":"\u0625\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628","Payment Method":"Payment Method","Before submitting the payment, choose the payment type used for that order.":"\u0642\u0628\u0644 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u062f\u0641\u0639\u0629 \u060c \u0627\u062e\u062a\u0631 \u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0644\u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628.","Select the payment type that must apply to the current order.":"\u062d\u062f\u062f \u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0630\u064a \u064a\u062c\u0628 \u0623\u0646 \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0623\u0645\u0631 \u0627\u0644\u062d\u0627\u0644\u064a.","Payment Type":"\u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639","Remove Image":"\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0635\u0648\u0631\u0629","This form is not completely loaded.":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u062d\u0645\u064a\u0644 \u0647\u0630\u0627 \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u0628\u0627\u0644\u0643\u0627\u0645\u0644.","Updating":"\u0627\u0644\u062a\u062d\u062f\u064a\u062b","Updating Modules":"\u0648\u062d\u062f\u0627\u062a \u0627\u0644\u062a\u062d\u062f\u064a\u062b","Return":"\u064a\u0639\u0648\u062f","Credit Limit":"\u0627\u0644\u062d\u062f \u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646\u064a","The request was canceled":"\u062a\u0645 \u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u0637\u0644\u0628","Payment Receipt — %s":"\u0625\u064a\u0635\u0627\u0644 \u0627\u0644\u062f\u0641\u0639 \u0648 [\u0645\u062f\u0634] \u061b \u066a\u0633","Payment receipt":"\u0625\u064a\u0635\u0627\u0644 \u0627\u0644\u062f\u0641\u0639","Current Payment":"\u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u062d\u0627\u0644\u064a","Total Paid":"\u0645\u062c\u0645\u0648\u0639 \u0627\u0644\u0645\u0628\u0627\u0644\u063a \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629","Set what should be the limit of the purchase on credit.":"\u062d\u062f\u062f \u0645\u0627 \u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u062d\u062f \u0627\u0644\u0634\u0631\u0627\u0621 \u0628\u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646.","Provide the customer email.":"\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0644\u0644\u0639\u0645\u064a\u0644.","Priority":"\u0623\u0641\u0636\u0644\u064a\u0629","Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".":"\u062d\u062f\u062f \u062a\u0631\u062a\u064a\u0628 \u0627\u0644\u062f\u0641\u0639. \u0643\u0644\u0645\u0627 \u0627\u0646\u062e\u0641\u0636 \u0627\u0644\u0631\u0642\u0645 \u060c \u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u0627\u0644\u0631\u0642\u0645 \u0627\u0644\u0623\u0648\u0644 \u0641\u064a \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0629 \u0644\u0644\u062f\u0641\u0639. \u064a\u062c\u0628 \u0623\u0646 \u064a\u0628\u062f\u0623 \u0645\u0646 \"0 \".","Mode":"\u0627\u0644\u0648\u0636\u0639","Choose what mode applies to this demo.":"\u0627\u062e\u062a\u0631 \u0627\u0644\u0648\u0636\u0639 \u0627\u0644\u0630\u064a \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u062a\u0648\u0636\u064a\u062d\u064a.","Set if the sales should be created.":"\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a.","Create Procurements":"\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a","Will create procurements.":"\u0633\u064a\u062e\u0644\u0642 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.","Sales Account":"\u062d\u0633\u0627\u0628 \u0645\u0628\u064a\u0639\u0627\u062a","Procurements Account":"\u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a","Sale Refunds Account":"\u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0628\u0627\u0644\u063a \u0627\u0644\u0645\u0633\u062a\u0631\u062f\u0629 \u0644\u0644\u0628\u064a\u0639","Spoiled Goods Account":"\u062d\u0633\u0627\u0628 \u0627\u0644\u0628\u0636\u0627\u0626\u0639 \u0627\u0644\u0641\u0627\u0633\u062f\u0629","Customer Crediting Account":"\u062d\u0633\u0627\u0628 \u0627\u0626\u062a\u0645\u0627\u0646 \u0627\u0644\u0639\u0645\u064a\u0644","Customer Debiting Account":"\u062d\u0633\u0627\u0628 \u062e\u0635\u0645 \u0627\u0644\u0639\u0645\u064a\u0644","Unable to find the requested account type using the provided id.":"\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0646\u0648\u0639 \u0627\u0644\u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.","You cannot delete an account type that has transaction bound.":"\u0644\u0627 \u064a\u0645\u0643\u0646\u0643 \u062d\u0630\u0641 \u0646\u0648\u0639 \u062d\u0633\u0627\u0628 \u0645\u0631\u062a\u0628\u0637 \u0628\u0645\u0639\u0627\u0645\u0644\u0629.","The account type has been deleted.":"\u062a\u0645 \u062d\u0630\u0641 \u0646\u0648\u0639 \u0627\u0644\u062d\u0633\u0627\u0628.","The account has been created.":"\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u062d\u0633\u0627\u0628.","Customer Credit Account":"\u062d\u0633\u0627\u0628 \u0627\u0626\u062a\u0645\u0627\u0646 \u0627\u0644\u0639\u0645\u064a\u0644","Customer Debit Account":"\u062d\u0633\u0627\u0628 \u0645\u062f\u064a\u0646 \u0644\u0644\u0639\u0645\u064a\u0644","Register Cash-In Account":"\u062a\u0633\u062c\u064a\u0644 \u062d\u0633\u0627\u0628 \u0625\u064a\u062f\u0627\u0639 \u0646\u0642\u062f\u064a","Register Cash-Out Account":"\u062a\u0633\u062c\u064a\u0644 \u062d\u0633\u0627\u0628 \u0627\u0644\u0633\u062d\u0628 \u0627\u0644\u0646\u0642\u062f\u064a","Require Valid Email":"\u0645\u0637\u0644\u0648\u0628 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0635\u0627\u0644\u062d","Will for valid unique email for every customer.":"\u0625\u0631\u0627\u062f\u0629 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0641\u0631\u064a\u062f \u0635\u0627\u0644\u062d \u0644\u0643\u0644 \u0639\u0645\u064a\u0644.","Choose an option":"\u0625\u062e\u062a\u0631 \u062e\u064a\u0627\u0631","Update Instalment Date":"\u062a\u062d\u062f\u064a\u062b \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0642\u0633\u0637","Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u062d\u062f\u064a\u062f \u0645\u0648\u0639\u062f \u0627\u0633\u062a\u062d\u0642\u0627\u0642 \u0627\u0644\u0642\u0633\u0637 \u0627\u0644\u064a\u0648\u0645\u061f \u0625\u0630\u0627 \u0643\u0646\u062au confirm the instalment will be marked as paid.","Search for products.":"\u0627\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a.","Toggle merging similar products.":"\u062a\u0628\u062f\u064a\u0644 \u062f\u0645\u062c \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0645\u0627\u062b\u0644\u0629.","Toggle auto focus.":"\u062a\u0628\u062f\u064a\u0644 \u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u064a.","Filter User":"\u0639\u0627\u0645\u0644 \u0627\u0644\u062a\u0635\u0641\u064a\u0629","All Users":"\u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646","No user was found for proceeding the filtering.":"\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0645\u0633\u062a\u062e\u062f\u0645 \u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u062a\u0635\u0641\u064a\u0629.","available":"\u0645\u062a\u0648\u0641\u0631\u0629","No coupons applies to the cart.":"\u0644\u0627 \u0643\u0648\u0628\u0648\u0646\u0627\u062a \u062a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642.","Selected":"\u0627\u0644\u0645\u062d\u062f\u062f","An error occurred while opening the order options":"\u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u0641\u062a\u062d \u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u0623\u0645\u0631","There is no instalment defined. Please set how many instalments are allowed for this order":"\u0644\u0627 \u064a\u0648\u062c\u062f \u0642\u0633\u0637 \u0645\u062d\u062f\u062f. \u064a\u0631\u062c\u0649 \u062a\u062d\u062f\u064a\u062f \u0639\u062f\u062f \u0627\u0644\u0623\u0642\u0633\u0627\u0637 \u0627\u0644\u0645\u0633\u0645\u0648\u062d \u0628\u0647\u0627d for this order","Select Payment Gateway":"\u062d\u062f\u062f \u0628\u0648\u0627\u0628\u0629 \u0627\u0644\u062f\u0641\u0639","Gateway":"\u0628\u0648\u0627\u0628\u0629","No tax is active":"\u0644\u0627 \u062a\u0648\u062c\u062f \u0636\u0631\u064a\u0628\u0629 \u0646\u0634\u0637\u0629","Unable to delete a payment attached to the order.":"\u064a\u062a\u0639\u0630\u0631 \u062d\u0630\u0641 \u0627\u0644\u062f\u0641\u0639\u0629 \u0627\u0644\u0645\u0631\u0641\u0642\u0629 \u0628\u0627\u0644\u0637\u0644\u0628.","The discount has been set to the cart subtotal.":"\u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u062e\u0635\u0645 \u0639\u0644\u0649 \u0627\u0644\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0641\u0631\u0639\u064a \u0644\u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642.","Order Deletion":"\u0637\u0644\u0628 \u062d\u0630\u0641","The current order will be deleted as no payment has been made so far.":"\u0633\u064a\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u062d\u0627\u0644\u064a \u0646\u0638\u0631\u064b\u0627 \u0644\u0639\u062f\u0645 \u0625\u062c\u0631\u0627\u0621 \u0623\u064a \u062f\u0641\u0639\u0629 \u062d\u062a\u0649 \u0627\u0644\u0622\u0646.","Void The Order":"\u0627\u0644\u0623\u0645\u0631 \u0628\u0627\u0637\u0644","Unable to void an unpaid order.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0625\u0628\u0637\u0627\u0644 \u0623\u0645\u0631 \u063a\u064a\u0631 \u0645\u062f\u0641\u0648\u0639.","Environment Details":"\u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0628\u064a\u0626\u0629","Properties":"\u0627\u0644\u062e\u0635\u0627\u0626\u0635","Extensions":"\u0645\u0644\u062d\u0642\u0627\u062a","Configurations":"\u0627\u0644\u062a\u0643\u0648\u064a\u0646\u0627\u062a","Learn More":"\u064a\u062a\u0639\u0644\u0645 \u0623\u0643\u062b\u0631","Search Products...":"\u0627\u0644\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a...","No results to show.":"\u0644\u0627 \u062a\u0648\u062c\u062f \u0646\u062a\u0627\u0626\u062c \u0644\u0644\u0639\u0631\u0636.","Start by choosing a range and loading the report.":"\u0627\u0628\u062f\u0623 \u0628\u0627\u062e\u062a\u064a\u0627\u0631 \u0646\u0637\u0627\u0642 \u0648\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u062a\u0642\u0631\u064a\u0631.","Invoice Date":"\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629","Initial Balance":"\u0627\u0644\u0631\u0635\u064a\u062f \u0627\u0644\u0627\u0641\u062a\u062a\u0627\u062d\u064a","New Balance":"\u0627\u0644\u0631\u0635\u064a\u062f \u0627\u0644\u062c\u062f\u064a\u062f","Transaction Type":"\u0646\u0648\u0639 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629","Unchanged":"\u062f\u0648\u0646 \u062a\u063a\u064a\u064a\u0631","Define what roles applies to the user":"\u062d\u062f\u062f \u0627\u0644\u0623\u062f\u0648\u0627\u0631 \u0627\u0644\u062a\u064a \u062a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645","Not Assigned":"\u063a\u064a\u0631\u0645\u0639\u062a\u0645\u062f","This value is already in use on the database.":"\u0647\u0630\u0647 \u0627\u0644\u0642\u064a\u0645\u0629 \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u0627\u0644\u0641\u0639\u0644 \u0641\u064a \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a.","This field should be checked.":"\u064a\u062c\u0628 \u0641\u062d\u0635 \u0647\u0630\u0627 \u0627\u0644\u0645\u062c\u0627\u0644.","This field must be a valid URL.":"\u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0647\u0630\u0627 \u0627\u0644\u062d\u0642\u0644 \u0639\u0646\u0648\u0627\u0646 URL \u0635\u0627\u0644\u062d\u064b\u0627.","This field is not a valid email.":"\u0647\u0630\u0627 \u0627\u0644\u062d\u0642\u0644 \u0644\u064a\u0633 \u0628\u0631\u064a\u062f\u064b\u0627 \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a\u064b\u0627 \u0635\u0627\u0644\u062d\u064b\u0627.","If you would like to define a custom invoice date.":"\u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u062d\u062f\u064a\u062f \u062a\u0627\u0631\u064a\u062e \u0641\u0627\u062a\u0648\u0631\u0629 \u0645\u062e\u0635\u0635.","Theme":"\u0633\u0645\u0629","Dark":"\u0645\u0638\u0644\u0645","Light":"\u062e\u0641\u064a\u0641\u0629","Define what is the theme that applies to the dashboard.":"\u062d\u062f\u062f \u0645\u0627 \u0647\u0648 \u0627\u0644\u0645\u0648\u0636\u0648\u0639 \u0627\u0644\u0630\u064a \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629.","Unable to delete this resource as it has %s dependency with %s item.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0631\u062f \u0644\u0623\u0646\u0647 \u064a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u062a\u0628\u0639\u064a\u0629\u066a s \u0645\u0639 \u0639\u0646\u0635\u0631\u066a s.","Unable to delete this resource as it has %s dependency with %s items.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0631\u062f \u0644\u0623\u0646\u0647 \u064a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u062a\u0628\u0639\u064a\u0629\u066a s \u0645\u0639\u066a s \u0639\u0646\u0635\u0631.","Make a new procurement.":"\u0625\u062c\u0631\u0627\u0621 \u0639\u0645\u0644\u064a\u0629 \u0634\u0631\u0627\u0621 \u062c\u062f\u064a\u062f\u0629.","About":"\u062d\u0648\u0644","Details about the environment.":"\u062a\u0641\u0627\u0635\u064a\u0644 \u062d\u0648\u0644 \u0627\u0644\u0628\u064a\u0626\u0629.","Core Version":"\u0627\u0644\u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u0623\u0633\u0627\u0633\u064a","PHP Version":"\u0625\u0635\u062f\u0627\u0631 PHP","Mb String Enabled":"\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0633\u0644\u0633\u0644\u0629 \u0645\u064a\u063a\u0627\u0628\u0627\u064a\u062a","Zip Enabled":"\u062a\u0645 \u062a\u0641\u0639\u064a\u0644 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0628\u0631\u064a\u062f\u064a","Curl Enabled":"\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0636\u0641\u064a\u0631\u0629","Math Enabled":"\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0631\u064a\u0627\u0636\u064a\u0627\u062a","XML Enabled":"\u062a\u0645\u0643\u064a\u0646 XML","XDebug Enabled":"\u062a\u0645\u0643\u064a\u0646 XDebug","File Upload Enabled":"\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0644\u0641","File Upload Size":"\u062d\u062c\u0645 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0644\u0641","Post Max Size":"\u062d\u062c\u0645 \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629 \u0627\u0644\u0642\u0635\u0648\u0649","Max Execution Time":"\u0623\u0642\u0635\u0649 \u0648\u0642\u062a \u0644\u0644\u062a\u0646\u0641\u064a\u0630","Memory Limit":"\u062d\u062f \u0627\u0644\u0630\u0627\u0643\u0631\u0629","Administrator":"\u0645\u062f\u064a\u0631","Store Administrator":"\u0645\u0633\u0624\u0648\u0644 \u0627\u0644\u0645\u062a\u062c\u0631","Store Cashier":"\u0623\u0645\u064a\u0646 \u0627\u0644\u0635\u0646\u062f\u0648\u0642 \u0645\u062e\u0632\u0646","User":"\u0627\u0644\u0645\u0633\u062a\u0639\u0645\u0644","Incorrect Authentication Plugin Provided.":"\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0645\u0643\u0648\u0646 \u0625\u0636\u0627\u0641\u064a \u0644\u0644\u0645\u0635\u0627\u062f\u0642\u0629 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d.","Require Unique Phone":"\u062a\u062a\u0637\u0644\u0628 \u0647\u0627\u062a\u0641\u064b\u0627 \u0641\u0631\u064a\u062f\u064b\u0627","Every customer should have a unique phone number.":"\u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0644\u0643\u0644 \u0639\u0645\u064a\u0644 \u0631\u0642\u0645 \u0647\u0627\u062a\u0641 \u0641\u0631\u064a\u062f.","Define the default theme.":"\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0648\u0636\u0648\u0639 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a.","Merge Similar Items":"\u062f\u0645\u062c \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0645\u062a\u0634\u0627\u0628\u0647\u0629","Will enforce similar products to be merged from the POS.":"\u0633\u064a\u062a\u0645 \u0641\u0631\u0636 \u0645\u0646\u062a\u062c\u0627\u062a \u0645\u0645\u0627\u062b\u0644\u0629 \u0644\u064a\u062a\u0645 \u062f\u0645\u062c\u0647\u0627 \u0645\u0646 \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639.","Toggle Product Merge":"\u062a\u0628\u062f\u064a\u0644 \u062f\u0645\u062c \u0627\u0644\u0645\u0646\u062a\u062c","Will enable or disable the product merging.":"\u0633\u064a\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0623\u0648 \u062a\u0639\u0637\u064a\u0644 \u062f\u0645\u062c \u0627\u0644\u0645\u0646\u062a\u062c.","Your system is running in production mode. You probably need to build the assets":"\u064a\u0639\u0645\u0644 \u0646\u0638\u0627\u0645\u0643 \u0641\u064a \u0648\u0636\u0639 \u0627\u0644\u0625\u0646\u062a\u0627\u062c. \u0631\u0628\u0645\u0627 \u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0628\u0646\u0627\u0621 \u0627\u0644\u0623\u0635\u0648\u0644","Your system is in development mode. Make sure to build the assets.":"\u0627\u0644\u0646\u0638\u0627\u0645 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643 \u0641\u064a \u0648\u0636\u0639 \u0627\u0644\u062a\u0637\u0648\u064a\u0631. \u062a\u0623\u0643\u062f \u0645\u0646 \u0628\u0646\u0627\u0621 \u0627\u0644\u0623\u0635\u0648\u0644.","Unassigned":"\u063a\u064a\u0631 \u0645\u0639\u064a\u0646","Display all product stock flow.":"\u0639\u0631\u0636 \u0643\u0644 \u062a\u062f\u0641\u0642 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c.","No products stock flow has been registered":"\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u062a\u062f\u0641\u0642 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a","Add a new products stock flow":"\u0625\u0636\u0627\u0641\u0629 \u062a\u062f\u0641\u0642 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u062c\u062f\u064a\u062f\u0629","Create a new products stock flow":"\u0625\u0646\u0634\u0627\u0621 \u062a\u062f\u0641\u0642 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u062c\u062f\u064a\u062f\u0629","Register a new products stock flow and save it.":"\u062a\u0633\u062c\u064a\u0644 \u062a\u062f\u0641\u0642 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u062c\u062f\u064a\u062f\u0629 \u0648\u062d\u0641\u0638\u0647.","Edit products stock flow":"\u062a\u062d\u0631\u064a\u0631 \u062a\u062f\u0641\u0642 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a","Modify Globalproducthistorycrud.":"\u062a\u0639\u062f\u064a\u0644 Globalproducthistorycrud.","Initial Quantity":"\u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0623\u0648\u0644\u064a\u0629","New Quantity":"\u0643\u0645\u064a\u0629 \u062c\u062f\u064a\u062f\u0629","No Dashboard":"\u0644\u0627 \u0644\u0648\u062d\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629","Not Found Assets":"\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0623\u0635\u0648\u0644","Stock Flow Records":"\u0633\u062c\u0644\u0627\u062a \u062a\u062f\u0641\u0642 \u0627\u0644\u0645\u062e\u0632\u0648\u0646","The user attributes has been updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0633\u0645\u0627\u062a \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645.","Laravel Version":"\u0625\u0635\u062f\u0627\u0631 Laravel","There is a missing dependency issue.":"\u0647\u0646\u0627\u0643 \u0645\u0634\u0643\u0644\u0629 \u062a\u0628\u0639\u064a\u0629 \u0645\u0641\u0642\u0648\u062f\u0629.","The Action You Tried To Perform Is Not Allowed.":"\u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u0630\u064a \u062d\u0627\u0648\u0644\u062a \u0627\u0644\u0642\u064a\u0627\u0645 \u0628\u0647 \u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0628\u0647.","Unable to locate the assets.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u062f\u064a\u062f \u0645\u0648\u0642\u0639 \u0627\u0644\u0623\u0635\u0648\u0644.","All the customers has been transferred to the new group %s.":"\u062a\u0645 \u0646\u0642\u0644 \u0643\u0627\u0641\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0625\u0644\u0649 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u062c\u062f\u064a\u062f\u0629\u066a s.","The request method is not allowed.":"\u0637\u0631\u064a\u0642\u0629 \u0627\u0644\u0637\u0644\u0628 \u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0628\u0647\u0627.","A Database Exception Occurred.":"\u062d\u062f\u062b \u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u0641\u064a \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a.","An error occurred while validating the form.":"\u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0635\u062d\u0629 \u0627\u0644\u0646\u0645\u0648\u0630\u062c.","Enter":"\u064a\u062f\u062e\u0644","Search...":"\u064a\u0628\u062d\u062b...","Unable to hold an order which payment status has been updated already.":"\u062a\u0639\u0630\u0631 \u062a\u0639\u0644\u064a\u0642 \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u0630\u064a \u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u062d\u0627\u0644\u0629 \u0627\u0644\u062f\u0641\u0639 \u0641\u064a\u0647 \u0628\u0627\u0644\u0641\u0639\u0644.","Unable to change the price mode. This feature has been disabled.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u063a\u064a\u064a\u0631 \u0648\u0636\u0639 \u0627\u0644\u0633\u0639\u0631. \u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0647\u0630\u0647 \u0627\u0644\u0645\u064a\u0632\u0629.","Enable WholeSale Price":"\u062a\u0641\u0639\u064a\u0644 \u0633\u0639\u0631 \u0627\u0644\u0628\u064a\u0639 \u0627\u0644\u0643\u0627\u0645\u0644","Would you like to switch to wholesale price ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u062a\u062d\u0648\u0644 \u0625\u0644\u0649 \u0623\u0633\u0639\u0627\u0631 \u0627\u0644\u062c\u0645\u0644\u0629\u061f","Enable Normal Price":"\u062a\u0641\u0639\u064a\u0644 \u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0639\u0627\u062f\u064a","Would you like to switch to normal price ?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u062a\u062d\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0639\u0627\u062f\u064a\u061f","Search products...":"\u0627\u0644\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a...","Set Sale Price":"\u062d\u062f\u062f \u0633\u0639\u0631 \u0627\u0644\u0628\u064a\u0639","Remove":"\u0625\u0632\u0627\u0644\u0629","No product are added to this group.":"\u0644\u0645 \u064a\u062a\u0645 \u0625\u0636\u0627\u0641\u0629 \u0623\u064a \u0645\u0646\u062a\u062c \u0644\u0647\u0630\u0647 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629.","Delete Sub item":"\u062d\u0630\u0641 \u0627\u0644\u0628\u0646\u062f \u0627\u0644\u0641\u0631\u0639\u064a","Would you like to delete this sub item?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0641\u0631\u0639\u064a\u061f","Unable to add a grouped product.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0625\u0636\u0627\u0641\u0629 \u0645\u0646\u062a\u062c \u0645\u062c\u0645\u0639.","Choose The Unit":"\u0627\u062e\u062a\u0631 \u0627\u0644\u0648\u062d\u062f\u0629","Stock Report":"\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0627\u0633\u0647\u0645","Wallet Amount":"\u0645\u0628\u0644\u063a \u0627\u0644\u0645\u062d\u0641\u0638\u0629","Wallet History":"\u0645\u062d\u0641\u0648\u0638\u0627\u062a \u0627\u0644\u0645\u062d\u0641\u0638\u0629","Transaction":"\u0639\u0645\u0644\u064a\u0629","No History...":"\u0644\u0627 \u062a\u0627\u0631\u064a\u062e...","Removing":"\u0625\u0632\u0627\u0644\u0629","Refunding":"\u0627\u0644\u0633\u062f\u0627\u062f","Unknow":"\u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641","Skip Instalments":"\u062a\u062e\u0637\u064a \u0627\u0644\u0623\u0642\u0633\u0627\u0637","Define the product type.":"\u062d\u062f\u062f \u0646\u0648\u0639 \u0627\u0644\u0645\u0646\u062a\u062c.","Dynamic":"\u0645\u062a\u062d\u0631\u0643","In case the product is computed based on a percentage, define the rate here.":"\u0641\u064a \u062d\u0627\u0644\u0629 \u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0646\u062a\u062c \u0639\u0644\u0649 \u0623\u0633\u0627\u0633 \u0646\u0633\u0628\u0629 \u0645\u0626\u0648\u064a\u0629 \u060c \u062d\u062f\u062f \u0627\u0644\u0633\u0639\u0631 \u0647\u0646\u0627.","Before saving this order, a minimum payment of {amount} is required":"\u0642\u0628\u0644 \u062d\u0641\u0638 \u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628 \u060c \u064a\u062c\u0628 \u062f\u0641\u0639 \u0645\u0628\u0644\u063a {amount} \u0643\u062d\u062f \u0623\u062f\u0646\u0649","Initial Payment":"\u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0623\u0648\u0644\u064a","In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?":"\u0644\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u064a\u062c\u0628 \u062f\u0641\u0639 \u0645\u0628\u0644\u063a {amount} \u0645\u0628\u062f\u0626\u064a\u064b\u0627 \u0644\u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0645\u062d\u062f\u062f \"{paymentType}\". \u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627 \u061f","Search Customer...":"\u0628\u062d\u062b \u0639\u0646 \u0632\u0628\u0648\u0646 ...","Due Amount":"\u0645\u0628\u0644\u063a \u0645\u0633\u062a\u062d\u0642","Wallet Balance":"\u0631\u0635\u064a\u062f \u0627\u0644\u0645\u062d\u0641\u0638\u0629","Total Orders":"\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0637\u0644\u0628\u0627\u062a","What slug should be used ? [Q] to quit.":"\u0645\u0627 \u0647\u064a \u0633\u0628\u064a\u0643\u0629 \u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u0627\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.","\"%s\" is a reserved class name":"\"%s\" \u0647\u0648 \u0627\u0633\u0645 \u0641\u0626\u0629 \u0645\u062d\u062c\u0648\u0632","The migration file has been successfully forgotten for the module %s.":"\u062a\u0645 \u0646\u0633\u064a\u0627\u0646 \u0645\u0644\u0641 \u0627\u0644\u062a\u0631\u062d\u064a\u0644 \u0628\u0646\u062c\u0627\u062d \u0644\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 %s.","%s products where updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b %s \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a.","Previous Amount":"\u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0633\u0627\u0628\u0642","Next Amount":"\u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u062a\u0627\u0644\u064a","Restrict the records by the creation date.":"\u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0633\u062c\u0644\u0627\u062a \u0628\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0625\u0646\u0634\u0627\u0621.","Restrict the records by the author.":"\u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0633\u062c\u0644\u0627\u062a \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0624\u0644\u0641.","Grouped Product":"\u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u062c\u0645\u0639","Groups":"\u0645\u062c\u0645\u0648\u0639\u0627\u062a","Choose Group":"\u0627\u062e\u062a\u0631 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629","Grouped":"\u0645\u062c\u0645\u0639\u0629","An error has occurred":"\u062d\u062f\u062b \u062e\u0637\u0623","Unable to proceed, the submitted form is not valid.":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u0627\u0644\u0645\u0642\u062f\u0645 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","No activation is needed for this account.":"\u0644\u0627 \u064a\u0644\u0632\u0645 \u0627\u0644\u062a\u0646\u0634\u064a\u0637 \u0644\u0647\u0630\u0627 \u0627\u0644\u062d\u0633\u0627\u0628.","Invalid activation token.":"\u0631\u0645\u0632 \u0627\u0644\u062a\u0646\u0634\u064a\u0637 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.","The expiration token has expired.":"\u0627\u0646\u062a\u0647\u062a \u0635\u0644\u0627\u062d\u064a\u0629 \u0631\u0645\u0632 \u0627\u0646\u062a\u0647\u0627\u0621 \u0627\u0644\u0635\u0644\u0627\u062d\u064a\u0629.","Your account is not activated.":"\u062d\u0633\u0627\u0628\u0643 \u063a\u064a\u0631 \u0645\u0641\u0639\u0644.","Unable to change a password for a non active user.":"\u062a\u0639\u0630\u0631 \u062a\u063a\u064a\u064a\u0631 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u063a\u064a\u0631 \u0646\u0634\u0637.","Unable to submit a new password for a non active user.":"\u062a\u0639\u0630\u0631 \u0625\u0631\u0633\u0627\u0644 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u062c\u062f\u064a\u062f\u0629 \u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u063a\u064a\u0631 \u0646\u0634\u0637.","Unable to delete an entry that no longer exists.":"\u062a\u0639\u0630\u0631 \u062d\u0630\u0641 \u0625\u062f\u062e\u0627\u0644 \u0644\u0645 \u064a\u0639\u062f \u0645\u0648\u062c\u0648\u062f\u064b\u0627.","Provides an overview of the products stock.":"\u064a\u0642\u062f\u0645 \u0644\u0645\u062d\u0629 \u0639\u0627\u0645\u0629 \u0639\u0646 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a.","Customers Statement":"\u0628\u064a\u0627\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u0621","Display the complete customer statement.":"\u0639\u0631\u0636 \u0628\u064a\u0627\u0646 \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0643\u0627\u0645\u0644.","The recovery has been explicitly disabled.":"\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0628\u0634\u0643\u0644 \u0635\u0631\u064a\u062d.","The registration has been explicitly disabled.":"\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0628\u0634\u0643\u0644 \u0635\u0631\u064a\u062d.","The entry has been successfully updated.":"\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0625\u062f\u062e\u0627\u0644 \u0628\u0646\u062c\u0627\u062d.","A similar module has been found":"\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0648\u062d\u062f\u0629 \u0645\u0645\u0627\u062b\u0644\u0629","A grouped product cannot be saved without any sub items.":"\u0644\u0627 \u064a\u0645\u0643\u0646 \u062d\u0641\u0638 \u0645\u0646\u062a\u062c \u0645\u062c\u0645\u0639 \u0628\u062f\u0648\u0646 \u0623\u064a \u0639\u0646\u0627\u0635\u0631 \u0641\u0631\u0639\u064a\u0629.","A grouped product cannot contain grouped product.":"\u0644\u0627 \u064a\u0645\u0643\u0646 \u0623\u0646 \u064a\u062d\u062a\u0648\u064a \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u062c\u0645\u0639 \u0639\u0644\u0649 \u0645\u0646\u062a\u062c \u0645\u062c\u0645\u0639.","The subitem has been saved.":"\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0641\u0631\u0639\u064a.","The %s is already taken.":"%s \u0645\u0623\u062e\u0648\u0630 \u0628\u0627\u0644\u0641\u0639\u0644.","Allow Wholesale Price":"\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0633\u0639\u0631 \u0627\u0644\u062c\u0645\u0644\u0629","Define if the wholesale price can be selected on the POS.":"\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u0645\u0643\u0646 \u062a\u062d\u062f\u064a\u062f \u0633\u0639\u0631 \u0627\u0644\u062c\u0645\u0644\u0629 \u0641\u064a \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639.","Allow Decimal Quantities":"\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0644\u0643\u0645\u064a\u0627\u062a \u0627\u0644\u0639\u0634\u0631\u064a\u0629","Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.":"\u0633\u064a\u062a\u0645 \u062a\u063a\u064a\u064a\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0627\u0644\u0631\u0642\u0645\u064a\u0629 \u0644\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0644\u0643\u0645\u064a\u0627\u062a \u0627\u0644\u0639\u0634\u0631\u064a\u0629. \u0641\u0642\u0637 \u0644\u0644\u0648\u062d\u0629 \"\u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629\".","Numpad":"\u0646\u0648\u0645\u0628\u0627\u062f","Advanced":"\u0645\u062a\u0642\u062f\u0645","Will set what is the numpad used on the POS screen.":"\u0633\u064a\u062d\u062f\u062f \u0645\u0627 \u0647\u064a \u0627\u0644\u0644\u0648\u062d\u0629 \u0627\u0644\u0631\u0642\u0645\u064a\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u0629 \u0639\u0644\u0649 \u0634\u0627\u0634\u0629 POS.","Force Barcode Auto Focus":"\u0641\u0631\u0636 \u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u064a \u0644\u0644\u0631\u0645\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a","Will permanently enable barcode autofocus to ease using a barcode reader.":"\u0633\u064a\u0645\u0643\u0646 \u0628\u0634\u0643\u0644 \u062f\u0627\u0626\u0645 \u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u064a \u0644\u0644\u0631\u0645\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a \u0644\u062a\u0633\u0647\u064a\u0644 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0642\u0627\u0631\u0626 \u0627\u0644\u0628\u0627\u0631\u0643\u0648\u062f.","Tax Included":"\u0634\u0627\u0645\u0644 \u0627\u0644\u0636\u0631\u064a\u0628\u0629","Unable to proceed, more than one product is set as featured":"\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0623\u0643\u062b\u0631 \u0645\u0646 \u0645\u0646\u062a\u062c \u0648\u0627\u062d\u062f \u0643\u0645\u0646\u062a\u062c \u0645\u0645\u064a\u0632","The transaction was deleted.":"\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629.","Database connection was successful.":"\u062a\u0645 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0628\u0646\u062c\u0627\u062d.","The products taxes were computed successfully.":"\u062a\u0645 \u0627\u062d\u062a\u0633\u0627\u0628 \u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0628\u0646\u062c\u0627\u062d.","Tax Excluded":"\u0644\u0627 \u062a\u0634\u0645\u0644 \u0627\u0644\u0636\u0631\u0627\u0626\u0628","Set Paid":"\u0645\u062c\u0645\u0648\u0639\u0629 \u0645\u062f\u0641\u0648\u0639\u0629","Would you like to mark this procurement as paid?":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0648\u0636\u0639 \u0639\u0644\u0627\u0645\u0629 \u0639\u0644\u0649 \u0647\u0630\u0647 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0639\u0644\u0649 \u0623\u0646\u0647\u0627 \u0645\u062f\u0641\u0648\u0639\u0629\u061f","Unidentified Item":"\u0639\u0646\u0635\u0631 \u063a\u064a\u0631 \u0645\u062d\u062f\u062f","Non-existent Item":"\u0639\u0646\u0635\u0631 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f","You cannot change the status of an already paid procurement.":"\u0644\u0627 \u064a\u0645\u0643\u0646\u0643 \u062a\u063a\u064a\u064a\u0631 \u062d\u0627\u0644\u0629 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629 \u0628\u0627\u0644\u0641\u0639\u0644.","The procurement payment status has been changed successfully.":"\u062a\u0645 \u062a\u063a\u064a\u064a\u0631 \u062d\u0627\u0644\u0629 \u062f\u0641\u0639 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0628\u0646\u062c\u0627\u062d.","The procurement has been marked as paid.":"\u062a\u0645 \u0648\u0636\u0639 \u0639\u0644\u0627\u0645\u0629 \u0639\u0644\u0649 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0639\u0644\u0649 \u0623\u0646\u0647\u0627 \u0645\u062f\u0641\u0648\u0639\u0629.","Show Price With Tax":"\u0639\u0631\u0636 \u0627\u0644\u0633\u0639\u0631 \u0645\u0639 \u0627\u0644\u0636\u0631\u064a\u0628\u0629","Will display price with tax for each products.":"\u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u0627\u0644\u0633\u0639\u0631 \u0645\u0639 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0644\u0643\u0644 \u0645\u0646\u062a\u062c.","Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".":"\u062a\u0639\u0630\u0631 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0643\u0648\u0646 \"${action.component}\". \u062a\u0623\u0643\u062f \u0645\u0646 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u0645\u0643\u0648\u0646 \u0625\u0644\u0649 \"nsExtraComponents\".","Tax Inclusive":"\u0634\u0627\u0645\u0644 \u0627\u0644\u0636\u0631\u064a\u0628\u0629","Apply Coupon":"\u062a\u0637\u0628\u064a\u0642 \u0627\u0644\u0642\u0633\u064a\u0645\u0629","Not applicable":"\u0644\u0627 \u064a\u0646\u0637\u0628\u0642","Normal":"\u0637\u0628\u064a\u0639\u064a","Product Taxes":"\u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u0645\u0646\u062a\u062c","The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.":"\u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0631\u0641\u0642\u0629 \u0628\u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062a\u062c \u0645\u0641\u0642\u0648\u062f\u0629 \u0623\u0648 \u0644\u0645 \u064a\u062a\u0645 \u062a\u0639\u064a\u064a\u0646\u0647\u0627. \u0627\u0644\u0631\u062c\u0627\u0621 \u0645\u0631\u0627\u062c\u0639\u0629 \u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062a\u0628\u0648\u064a\u0628 \"\u0627\u0644\u0648\u062d\u062f\u0629\" \u0644\u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062a\u062c.","X Days After Month Starts":"X Days After Month Starts","On Specific Day":"On Specific Day","Unknown Occurance":"Unknown Occurance","Please provide a valid value.":"Please provide a valid value.","Done":"Done","Would you like to delete \"%s\"?":"Would you like to delete \"%s\"?","Unable to find a module having as namespace \"%s\"":"Unable to find a module having as namespace \"%s\"","Api File":"Api File","Migrations":"Migrations","Determine Until When the coupon is valid.":"Determine Until When the coupon is valid.","Customer Groups":"Customer Groups","Assigned To Customer Group":"Assigned To Customer Group","Only the customers who belongs to the selected groups will be able to use the coupon.":"Only the customers who belongs to the selected groups will be able to use the coupon.","Assigned To Customers":"Assigned To Customers","Only the customers selected will be ale to use the coupon.":"Only the customers selected will be ale to use the coupon.","Unable to save the coupon as one of the selected customer no longer exists.":"Unable to save the coupon as one of the selected customer no longer exists.","Unable to save the coupon as one of the selected customer group no longer exists.":"Unable to save the coupon as one of the selected customer group no longer exists.","Unable to save the coupon as one of the customers provided no longer exists.":"Unable to save the coupon as one of the customers provided no longer exists.","Unable to save the coupon as one of the provided customer group no longer exists.":"Unable to save the coupon as one of the provided customer group no longer exists.","Coupon Order Histories List":"Coupon Order Histories List","Display all coupon order histories.":"Display all coupon order histories.","No coupon order histories has been registered":"No coupon order histories has been registered","Add a new coupon order history":"Add a new coupon order history","Create a new coupon order history":"Create a new coupon order history","Register a new coupon order history and save it.":"Register a new coupon order history and save it.","Edit coupon order history":"Edit coupon order history","Modify Coupon Order History.":"Modify Coupon Order History.","Return to Coupon Order Histories":"Return to Coupon Order Histories","Customer_coupon_id":"Customer_coupon_id","Order_id":"Order_id","Discount_value":"Discount_value","Minimum_cart_value":"Minimum_cart_value","Maximum_cart_value":"Maximum_cart_value","Limit_usage":"Limit_usage","Would you like to delete this?":"Would you like to delete this?","Usage History":"Usage History","Customer Coupon Histories List":"Customer Coupon Histories List","Display all customer coupon histories.":"Display all customer coupon histories.","No customer coupon histories has been registered":"No customer coupon histories has been registered","Add a new customer coupon history":"Add a new customer coupon history","Create a new customer coupon history":"Create a new customer coupon history","Register a new customer coupon history and save it.":"Register a new customer coupon history and save it.","Edit customer coupon history":"Edit customer coupon history","Modify Customer Coupon History.":"Modify Customer Coupon History.","Return to Customer Coupon Histories":"Return to Customer Coupon Histories","Last Name":"Last Name","Provide the customer last name":"Provide the customer last name","Provide the customer gender.":"Provide the customer gender.","Provide the billing first name.":"Provide the billing first name.","Provide the billing last name.":"Provide the billing last name.","Provide the shipping First Name.":"Provide the shipping First Name.","Provide the shipping Last Name.":"Provide the shipping Last Name.","Scheduled":"Scheduled","Set the scheduled date.":"Set the scheduled date.","Account Name":"Account Name","Provider last name if necessary.":"Provider last name if necessary.","Provide the user first name.":"Provide the user first name.","Provide the user last name.":"Provide the user last name.","Set the user gender.":"Set the user gender.","Set the user phone number.":"Set the user phone number.","Set the user PO Box.":"Set the user PO Box.","Provide the billing First Name.":"Provide the billing First Name.","Last name":"Last name","Group Name":"Group Name","Delete a user":"Delete a user","Activated":"Activated","type":"type","User Group":"User Group","Scheduled On":"Scheduled On","Biling":"Biling","API Token":"API Token","Your Account has been successfully created.":"Your Account has been successfully created.","Unable to export if there is nothing to export.":"Unable to export if there is nothing to export.","%s Coupons":"%s Coupons","%s Coupon History":"%s Coupon History","\"%s\" Record History":"\"%s\" Record History","The media name was successfully updated.":"The media name was successfully updated.","The role was successfully assigned.":"The role was successfully assigned.","The role were successfully assigned.":"The role were successfully assigned.","Unable to identifier the provided role.":"Unable to identifier the provided role.","Good Condition":"Good Condition","Cron Disabled":"Cron Disabled","Task Scheduling Disabled":"Task Scheduling Disabled","NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.":"NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.","The email \"%s\" is already used for another customer.":"The email \"%s\" is already used for another customer.","The provided coupon cannot be loaded for that customer.":"The provided coupon cannot be loaded for that customer.","The provided coupon cannot be loaded for the group assigned to the selected customer.":"The provided coupon cannot be loaded for the group assigned to the selected customer.","Unable to use the coupon %s as it has expired.":"Unable to use the coupon %s as it has expired.","Unable to use the coupon %s at this moment.":"Unable to use the coupon %s at this moment.","Small Box":"Small Box","Box":"Box","%s products were freed":"%s products were freed","Restoring cash flow from paid orders...":"Restoring cash flow from paid orders...","Restoring cash flow from refunded orders...":"Restoring cash flow from refunded orders...","%s on %s directories were deleted.":"%s on %s directories were deleted.","%s on %s files were deleted.":"%s on %s files were deleted.","First Day Of Month":"First Day Of Month","Last Day Of Month":"Last Day Of Month","Month middle Of Month":"Month middle Of Month","{day} after month starts":"{day} after month starts","{day} before month ends":"{day} before month ends","Every {day} of the month":"Every {day} of the month","Days":"Days","Make sure set a day that is likely to be executed":"Make sure set a day that is likely to be executed","Invalid Module provided.":"Invalid Module provided.","The module was \"%s\" was successfully installed.":"The module was \"%s\" was successfully installed.","The modules \"%s\" was deleted successfully.":"The modules \"%s\" was deleted successfully.","Unable to locate a module having as identifier \"%s\".":"Unable to locate a module having as identifier \"%s\".","All migration were executed.":"All migration were executed.","Unknown Product Status":"Unknown Product Status","Member Since":"Member Since","Total Customers":"Total Customers","The widgets was successfully updated.":"The widgets was successfully updated.","The token was successfully created":"The token was successfully created","The token has been successfully deleted.":"The token has been successfully deleted.","Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".":"Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".","Will display all cashiers who performs well.":"Will display all cashiers who performs well.","Will display all customers with the highest purchases.":"Will display all customers with the highest purchases.","Expense Card Widget":"Expense Card Widget","Will display a card of current and overwall expenses.":"Will display a card of current and overwall expenses.","Incomplete Sale Card Widget":"Incomplete Sale Card Widget","Will display a card of current and overall incomplete sales.":"Will display a card of current and overall incomplete sales.","Orders Chart":"Orders Chart","Will display a chart of weekly sales.":"Will display a chart of weekly sales.","Orders Summary":"Orders Summary","Will display a summary of recent sales.":"Will display a summary of recent sales.","Will display a profile widget with user stats.":"Will display a profile widget with user stats.","Sale Card Widget":"Sale Card Widget","Will display current and overall sales.":"Will display current and overall sales.","Return To Calendar":"Return To Calendar","Thr":"Thr","The left range will be invalid.":"The left range will be invalid.","The right range will be invalid.":"The right range will be invalid.","Click here to add widgets":"Click here to add widgets","Choose Widget":"Choose Widget","Select with widget you want to add to the column.":"Select with widget you want to add to the column.","Unamed Tab":"Unamed Tab","An error unexpected occured while printing.":"An error unexpected occured while printing.","and":"and","{date} ago":"{date} ago","In {date}":"In {date}","An unexpected error occured.":"An unexpected error occured.","Warning":"Warning","Change Type":"Change Type","Save Expense":"Save Expense","No configuration were choosen. Unable to proceed.":"No configuration were choosen. Unable to proceed.","Conditions":"Conditions","By proceeding the current for and all your entries will be cleared. Would you like to proceed?":"By proceeding the current for and all your entries will be cleared. Would you like to proceed?","No modules matches your search term.":"No modules matches your search term.","Press \"\/\" to search modules":"Press \"\/\" to search modules","No module has been uploaded yet.":"No module has been uploaded yet.","{module}":"{module}","Would you like to delete \"{module}\"? All data created by the module might also be deleted.":"Would you like to delete \"{module}\"? All data created by the module might also be deleted.","Search Medias":"Search Medias","Bulk Select":"Bulk Select","Press "\/" to search permissions":"Press "\/" to search permissions","SKU, Barcode, Name":"SKU, Barcode, Name","About Token":"About Token","Save Token":"Save Token","Generated Tokens":"Generated Tokens","Created":"Created","Last Use":"Last Use","Never":"Never","Expires":"Expires","Revoke":"Revoke","Token Name":"Token Name","This will be used to identifier the token.":"This will be used to identifier the token.","Unable to proceed, the form is not valid.":"Unable to proceed, the form is not valid.","An unexpected error occured":"An unexpected error occured","An Error Has Occured":"An Error Has Occured","Febuary":"Febuary","Configure":"Configure","Unable to add the product":"Unable to add the product","No result to result match the search value provided.":"No result to result match the search value provided.","This QR code is provided to ease authentication on external applications.":"This QR code is provided to ease authentication on external applications.","Copy And Close":"Copy And Close","An error has occured":"An error has occured","Recents Orders":"Recents Orders","Unamed Page":"Unamed Page","Assignation":"Assignation","Incoming Conversion":"Incoming Conversion","Outgoing Conversion":"Outgoing Conversion","Unknown Action":"Unknown Action","Direct Transaction":"Direct Transaction","Recurring Transaction":"Recurring Transaction","Entity Transaction":"Entity Transaction","Scheduled Transaction":"Scheduled Transaction","Unknown Type (%s)":"Unknown Type (%s)","What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.":"What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.","What is the full model name. eg: App\\Models\\Order ? [Q] to quit.":"What is the full model name. eg: App\\Models\\Order ? [Q] to quit.","What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.":"What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.","Unsupported argument provided: \"%s\"":"Unsupported argument provided: \"%s\"","The authorization token can\\'t be changed manually.":"The authorization token can\\'t be changed manually.","Translation process is complete for the module %s !":"Translation process is complete for the module %s !","%s migration(s) has been deleted.":"%s migration(s) has been deleted.","The command has been created for the module \"%s\"!":"The command has been created for the module \"%s\"!","The controller has been created for the module \"%s\"!":"The controller has been created for the module \"%s\"!","The event has been created at the following path \"%s\"!":"The event has been created at the following path \"%s\"!","The listener has been created on the path \"%s\"!":"The listener has been created on the path \"%s\"!","A request with the same name has been found !":"A request with the same name has been found !","Unable to find a module having the identifier \"%s\".":"Unable to find a module having the identifier \"%s\".","Unsupported reset mode.":"Unsupported reset mode.","You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.":"You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.","Unable to find a module having \"%s\" as namespace.":"Unable to find a module having \"%s\" as namespace.","A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.":"A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.","A new form class was created at the path \"%s\"":"A new form class was created at the path \"%s\"","Unable to proceed, looks like the database can\\'t be used.":"Unable to proceed, looks like the database can\\'t be used.","In which language would you like to install NexoPOS ?":"In which language would you like to install NexoPOS ?","You must define the language of installation.":"You must define the language of installation.","The value above which the current coupon can\\'t apply.":"The value above which the current coupon can\\'t apply.","Unable to save the coupon product as this product doens\\'t exists.":"Unable to save the coupon product as this product doens\\'t exists.","Unable to save the coupon category as this category doens\\'t exists.":"Unable to save the coupon category as this category doens\\'t exists.","Unable to save the coupon as this category doens\\'t exists.":"Unable to save the coupon as this category doens\\'t exists.","You\\re not allowed to do that.":"You\\re not allowed to do that.","Crediting (Add)":"Crediting (Add)","Refund (Add)":"Refund (Add)","Deducting (Remove)":"Deducting (Remove)","Payment (Remove)":"Payment (Remove)","The assigned default customer group doesn\\'t exist or is not defined.":"The assigned default customer group doesn\\'t exist or is not defined.","Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0":"Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0","You\\'re not allowed to do this operation":"You\\'re not allowed to do this operation","If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.":"If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.","Convert Unit":"Convert Unit","The unit that is selected for convertion by default.":"The unit that is selected for convertion by default.","COGS":"COGS","Used to define the Cost of Goods Sold.":"Used to define the Cost of Goods Sold.","Visible":"Visible","Define whether the unit is available for sale.":"Define whether the unit is available for sale.","Product unique name. If it\\' variation, it should be relevant for that variation":"Product unique name. If it\\' variation, it should be relevant for that variation","The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.":"The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.","The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.":"The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.","Auto COGS":"Auto COGS","Unknown Type: %s":"Unknown Type: %s","Shortage":"Shortage","Overage":"Overage","Transactions List":"Transactions List","Display all transactions.":"Display all transactions.","No transactions has been registered":"No transactions has been registered","Add a new transaction":"Add a new transaction","Create a new transaction":"Create a new transaction","Register a new transaction and save it.":"Register a new transaction and save it.","Edit transaction":"Edit transaction","Modify Transaction.":"Modify Transaction.","Return to Transactions":"Return to Transactions","determine if the transaction is effective or not. Work for recurring and not recurring transactions.":"determine if the transaction is effective or not. Work for recurring and not recurring transactions.","Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.":"Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.","Transaction Account":"Transaction Account","Assign the transaction to an account430":"Assign the transaction to an account430","Is the value or the cost of the transaction.":"Is the value or the cost of the transaction.","If set to Yes, the transaction will trigger on defined occurrence.":"If set to Yes, the transaction will trigger on defined occurrence.","Define how often this transaction occurs":"Define how often this transaction occurs","Define what is the type of the transactions.":"Define what is the type of the transactions.","Trigger":"Trigger","Would you like to trigger this expense now?":"Would you like to trigger this expense now?","Transactions History List":"Transactions History List","Display all transaction history.":"Display all transaction history.","No transaction history has been registered":"No transaction history has been registered","Add a new transaction history":"Add a new transaction history","Create a new transaction history":"Create a new transaction history","Register a new transaction history and save it.":"Register a new transaction history and save it.","Edit transaction history":"Edit transaction history","Modify Transactions history.":"Modify Transactions history.","Return to Transactions History":"Return to Transactions History","Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.":"Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.","Set the limit that can\\'t be exceeded by the user.":"Set the limit that can\\'t be exceeded by the user.","Oops, We\\'re Sorry!!!":"Oops, We\\'re Sorry!!!","Class: %s":"Class: %s","There\\'s is mismatch with the core version.":"There\\'s is mismatch with the core version.","You\\'re not authenticated.":"You\\'re not authenticated.","An error occured while performing your request.":"An error occured while performing your request.","A mismatch has occured between a module and it\\'s dependency.":"A mismatch has occured between a module and it\\'s dependency.","You\\'re not allowed to see that page.":"You\\'re not allowed to see that page.","Post Too Large":"Post Too Large","The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini":"The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini","This field does\\'nt have a valid value.":"This field does\\'nt have a valid value.","Describe the direct transaction.":"Describe the direct transaction.","If set to yes, the transaction will take effect immediately and be saved on the history.":"If set to yes, the transaction will take effect immediately and be saved on the history.","Assign the transaction to an account.":"Assign the transaction to an account.","set the value of the transaction.":"set the value of the transaction.","Further details on the transaction.":"Further details on the transaction.","Describe the direct transactions.":"Describe the direct transactions.","set the value of the transactions.":"set the value of the transactions.","The transactions will be multipled by the number of user having that role.":"The transactions will be multipled by the number of user having that role.","Create Sales (needs Procurements)":"Create Sales (needs Procurements)","Set when the transaction should be executed.":"Set when the transaction should be executed.","The addresses were successfully updated.":"The addresses were successfully updated.","Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.":"Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.","The register doesn\\'t have an history.":"The register doesn\\'t have an history.","Unable to check a register session history if it\\'s closed.":"Unable to check a register session history if it\\'s closed.","Register History For : %s":"Register History For : %s","Can\\'t delete a category having sub categories linked to it.":"Can\\'t delete a category having sub categories linked to it.","Unable to proceed. The request doesn\\'t provide enough data which could be handled":"Unable to proceed. The request doesn\\'t provide enough data which could be handled","Unable to load the CRUD resource : %s.":"Unable to load the CRUD resource : %s.","Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods":"Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods","The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.":"The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.","The crud columns exceed the maximum column that can be exported (27)":"The crud columns exceed the maximum column that can be exported (27)","This link has expired.":"This link has expired.","Account History : %s":"Account History : %s","Welcome — %s":"Welcome — %s","Upload and manage medias (photos).":"Upload and manage medias (photos).","The product which id is %s doesnt\\'t belong to the procurement which id is %s":"The product which id is %s doesnt\\'t belong to the procurement which id is %s","The refresh process has started. You\\'ll get informed once it\\'s complete.":"The refresh process has started. You\\'ll get informed once it\\'s complete.","The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".":"The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".","Stock History For %s":"Stock History For %s","Set":"Set","The unit is not set for the product \"%s\".":"The unit is not set for the product \"%s\".","The operation will cause a negative stock for the product \"%s\" (%s).":"The operation will cause a negative stock for the product \"%s\" (%s).","The adjustment quantity can\\'t be negative for the product \"%s\" (%s)":"The adjustment quantity can\\'t be negative for the product \"%s\" (%s)","%s\\'s Products":"%s\\'s Products","Transactions Report":"Transactions Report","Combined Report":"Combined Report","Provides a combined report for every transactions on products.":"Provides a combined report for every transactions on products.","Unable to initiallize the settings page. The identifier \"' . $identifier . '":"Unable to initiallize the settings page. The identifier \"' . $identifier . '","Shows all histories generated by the transaction.":"Shows all histories generated by the transaction.","Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.":"Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.","Create New Transaction":"Create New Transaction","Set direct, scheduled transactions.":"Set direct, scheduled transactions.","Update Transaction":"Update Transaction","The provided data aren\\'t valid":"The provided data aren\\'t valid","Welcome — NexoPOS":"Welcome — NexoPOS","You\\'re not allowed to see this page.":"You\\'re not allowed to see this page.","Your don\\'t have enough permission to perform this action.":"Your don\\'t have enough permission to perform this action.","You don\\'t have the necessary role to see this page.":"You don\\'t have the necessary role to see this page.","%s order(s) has recently been deleted as they has expired.":"%s order(s) has recently been deleted as they has expired.","%s product(s) has low stock. Reorder those product(s) before it get exhausted.":"%s product(s) has low stock. Reorder those product(s) before it get exhausted.","Scheduled Transactions":"Scheduled Transactions","the transaction \"%s\" was executed as scheduled on %s.":"the transaction \"%s\" was executed as scheduled on %s.","Workers Aren\\'t Running":"Workers Aren\\'t Running","The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.":"The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.","Unable to remove the permissions \"%s\". It doesn\\'t exists.":"Unable to remove the permissions \"%s\". It doesn\\'t exists.","An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A":"An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A","Unable to open \"%s\" *, as it\\'s not closed.":"Unable to open \"%s\" *, as it\\'s not closed.","Unable to open \"%s\" *, as it\\'s not opened.":"Unable to open \"%s\" *, as it\\'s not opened.","Unable to cashing on \"%s\" *, as it\\'s not opened.":"Unable to cashing on \"%s\" *, as it\\'s not opened.","Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.":"Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.","Unable to cashout on \"%s":"Unable to cashout on \"%s","Symbolic Links Missing":"Symbolic Links Missing","The Symbolic Links to the public directory is missing. Your medias might be broken and not display.":"The Symbolic Links to the public directory is missing. Your medias might be broken and not display.","Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.":"Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.","The requested module %s cannot be found.":"The requested module %s cannot be found.","The manifest.json can\\'t be located inside the module %s on the path: %s":"The manifest.json can\\'t be located inside the module %s on the path: %s","the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.":"the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.","Sorting is explicitely disabled for the column \"%s\".":"Sorting is explicitely disabled for the column \"%s\".","Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s":"Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s","Unable to find the customer using the provided id %s.":"Unable to find the customer using the provided id %s.","Not enough credits on the customer account. Requested : %s, Remaining: %s.":"Not enough credits on the customer account. Requested : %s, Remaining: %s.","The customer account doesn\\'t have enough funds to proceed.":"The customer account doesn\\'t have enough funds to proceed.","Unable to find a reference to the attached coupon : %s":"Unable to find a reference to the attached coupon : %s","You\\'re not allowed to use this coupon as it\\'s no longer active":"You\\'re not allowed to use this coupon as it\\'s no longer active","You\\'re not allowed to use this coupon it has reached the maximum usage allowed.":"You\\'re not allowed to use this coupon it has reached the maximum usage allowed.","Terminal A":"Terminal A","Terminal B":"Terminal B","%s link were deleted":"%s link were deleted","Unable to execute the following class callback string : %s":"Unable to execute the following class callback string : %s","%s — %s":"%s — %s","Transactions":"Transactions","Create Transaction":"Create Transaction","Stock History":"Stock History","Invoices":"Invoices","Failed to parse the configuration file on the following path \"%s\"":"Failed to parse the configuration file on the following path \"%s\"","No config.xml has been found on the directory : %s. This folder is ignored":"No config.xml has been found on the directory : %s. This folder is ignored","The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ":"The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ","Unable to upload this module as it\\'s older than the version installed":"Unable to upload this module as it\\'s older than the version installed","The migration file doens\\'t have a valid class name. Expected class : %s":"The migration file doens\\'t have a valid class name. Expected class : %s","Unable to locate the following file : %s":"Unable to locate the following file : %s","The migration file doens\\'t have a valid method name. Expected method : %s":"The migration file doens\\'t have a valid method name. Expected method : %s","The module %s cannot be enabled as his dependency (%s) is missing or not enabled.":"The module %s cannot be enabled as his dependency (%s) is missing or not enabled.","The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.":"The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.","An Error Occurred \"%s\": %s":"An Error Occurred \"%s\": %s","The order has been updated":"The order has been updated","The minimal payment of %s has\\'nt been provided.":"The minimal payment of %s has\\'nt been provided.","Unable to proceed as the order is already paid.":"Unable to proceed as the order is already paid.","The customer account funds are\\'nt enough to process the payment.":"The customer account funds are\\'nt enough to process the payment.","Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.","Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.","By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.":"By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.","You\\'re not allowed to make payments.":"You\\'re not allowed to make payments.","Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s":"Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s","Unknown Status (%s)":"Unknown Status (%s)","%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.":"%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.","Unable to find a reference of the provided coupon : %s":"Unable to find a reference of the provided coupon : %s","The procurement has been deleted. %s included stock record(s) has been deleted as well.":"The procurement has been deleted. %s included stock record(s) has been deleted as well.","Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.":"Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.","Unable to find the product using the provided id \"%s\"":"Unable to find the product using the provided id \"%s\"","Unable to procure the product \"%s\" as the stock management is disabled.":"Unable to procure the product \"%s\" as the stock management is disabled.","Unable to procure the product \"%s\" as it is a grouped product.":"Unable to procure the product \"%s\" as it is a grouped product.","The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item":"The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item","%s procurement(s) has recently been automatically procured.":"%s procurement(s) has recently been automatically procured.","The requested category doesn\\'t exists":"The requested category doesn\\'t exists","The category to which the product is attached doesn\\'t exists or has been deleted":"The category to which the product is attached doesn\\'t exists or has been deleted","Unable to create a product with an unknow type : %s":"Unable to create a product with an unknow type : %s","A variation within the product has a barcode which is already in use : %s.":"A variation within the product has a barcode which is already in use : %s.","A variation within the product has a SKU which is already in use : %s":"A variation within the product has a SKU which is already in use : %s","Unable to edit a product with an unknown type : %s":"Unable to edit a product with an unknown type : %s","The requested sub item doesn\\'t exists.":"The requested sub item doesn\\'t exists.","One of the provided product variation doesn\\'t include an identifier.":"One of the provided product variation doesn\\'t include an identifier.","The product\\'s unit quantity has been updated.":"The product\\'s unit quantity has been updated.","Unable to reset this variable product \"%s":"Unable to reset this variable product \"%s","Adjusting grouped product inventory must result of a create, update, delete sale operation.":"Adjusting grouped product inventory must result of a create, update, delete sale operation.","Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).":"Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).","Unsupported stock action \"%s\"":"Unsupported stock action \"%s\"","%s product(s) has been deleted.":"%s product(s) has been deleted.","%s products(s) has been deleted.":"%s products(s) has been deleted.","Unable to find the product, as the argument \"%s\" which value is \"%s":"Unable to find the product, as the argument \"%s\" which value is \"%s","You cannot convert unit on a product having stock management disabled.":"You cannot convert unit on a product having stock management disabled.","The source and the destination unit can\\'t be the same. What are you trying to do ?":"The source and the destination unit can\\'t be the same. What are you trying to do ?","There is no source unit quantity having the name \"%s\" for the item %s":"There is no source unit quantity having the name \"%s\" for the item %s","There is no destination unit quantity having the name %s for the item %s":"There is no destination unit quantity having the name %s for the item %s","The source unit and the destination unit doens\\'t belong to the same unit group.":"The source unit and the destination unit doens\\'t belong to the same unit group.","The group %s has no base unit defined":"The group %s has no base unit defined","The conversion of %s(%s) to %s(%s) was successful":"The conversion of %s(%s) to %s(%s) was successful","The product has been deleted.":"The product has been deleted.","An error occurred: %s.":"An error occurred: %s.","A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.":"A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.","Today\\'s Orders":"Today\\'s Orders","Today\\'s Sales":"Today\\'s Sales","Today\\'s Refunds":"Today\\'s Refunds","Today\\'s Customers":"Today\\'s Customers","The report will be generated. Try loading the report within few minutes.":"The report will be generated. Try loading the report within few minutes.","The database has been wiped out.":"The database has been wiped out.","No custom handler for the reset \"' . $mode . '\"":"No custom handler for the reset \"' . $mode . '\"","Unable to proceed. The parent tax doesn\\'t exists.":"Unable to proceed. The parent tax doesn\\'t exists.","A simple tax must not be assigned to a parent tax with the type \"simple":"A simple tax must not be assigned to a parent tax with the type \"simple","Created via tests":"Created via tests","The transaction has been successfully saved.":"The transaction has been successfully saved.","The transaction has been successfully updated.":"The transaction has been successfully updated.","Unable to find the transaction using the provided identifier.":"Unable to find the transaction using the provided identifier.","Unable to find the requested transaction using the provided id.":"Unable to find the requested transaction using the provided id.","The transction has been correctly deleted.":"The transction has been correctly deleted.","You cannot delete an account which has transactions bound.":"You cannot delete an account which has transactions bound.","The transaction account has been deleted.":"The transaction account has been deleted.","Unable to find the transaction account using the provided ID.":"Unable to find the transaction account using the provided ID.","The transaction account has been updated.":"The transaction account has been updated.","This transaction type can\\'t be triggered.":"This transaction type can\\'t be triggered.","The transaction has been successfully triggered.":"The transaction has been successfully triggered.","The transaction \"%s\" has been processed on day \"%s\".":"The transaction \"%s\" has been processed on day \"%s\".","The transaction \"%s\" has already been processed.":"The transaction \"%s\" has already been processed.","The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.":"The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.","The process has been correctly executed and all transactions has been processed.":"The process has been correctly executed and all transactions has been processed.","The process has been executed with some failures. %s\/%s process(es) has successed.":"The process has been executed with some failures. %s\/%s process(es) has successed.","Procurement : %s":"Procurement : %s","Procurement Liability : %s":"Procurement Liability : %s","Refunding : %s":"Refunding : %s","Spoiled Good : %s":"Spoiled Good : %s","Sale : %s":"Sale : %s","Liabilities Account":"Liabilities Account","Not found account type: %s":"Not found account type: %s","Refund : %s":"Refund : %s","Customer Account Crediting : %s":"Customer Account Crediting : %s","Customer Account Purchase : %s":"Customer Account Purchase : %s","Customer Account Deducting : %s":"Customer Account Deducting : %s","Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.":"Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.","The unit group %s doesn\\'t have a base unit":"The unit group %s doesn\\'t have a base unit","The system role \"Users\" can be retrieved.":"The system role \"Users\" can be retrieved.","The default role that must be assigned to new users cannot be retrieved.":"The default role that must be assigned to new users cannot be retrieved.","%s Second(s)":"%s Second(s)","Configure the accounting feature":"Configure the accounting feature","Define the symbol that indicate thousand. By default ":"Define the symbol that indicate thousand. By default ","Date Time Format":"Date Time Format","This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".":"This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".","Date TimeZone":"Date TimeZone","Determine the default timezone of the store. Current Time: %s":"Determine the default timezone of the store. Current Time: %s","Configure how invoice and receipts are used.":"Configure how invoice and receipts are used.","configure settings that applies to orders.":"configure settings that applies to orders.","Report Settings":"Report Settings","Configure the settings":"Configure the settings","Wipes and Reset the database.":"Wipes and Reset the database.","Supply Delivery":"Supply Delivery","Configure the delivery feature.":"Configure the delivery feature.","Configure how background operations works.":"Configure how background operations works.","Every procurement will be added to the selected transaction account":"Every procurement will be added to the selected transaction account","Every sales will be added to the selected transaction account":"Every sales will be added to the selected transaction account","Customer Credit Account (crediting)":"Customer Credit Account (crediting)","Every customer credit will be added to the selected transaction account":"Every customer credit will be added to the selected transaction account","Customer Credit Account (debitting)":"Customer Credit Account (debitting)","Every customer credit removed will be added to the selected transaction account":"Every customer credit removed will be added to the selected transaction account","Sales refunds will be attached to this transaction account":"Sales refunds will be attached to this transaction account","Stock Return Account (Spoiled Items)":"Stock Return Account (Spoiled Items)","Disbursement (cash register)":"Disbursement (cash register)","Transaction account for all cash disbursement.":"Transaction account for all cash disbursement.","Liabilities":"Liabilities","Transaction account for all liabilities.":"Transaction account for all liabilities.","You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.":"You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.","Show Tax Breakdown":"Show Tax Breakdown","Will display the tax breakdown on the receipt\/invoice.":"Will display the tax breakdown on the receipt\/invoice.","Available tags : ":"Available tags : ","{store_name}: displays the store name.":"{store_name}: displays the store name.","{store_email}: displays the store email.":"{store_email}: displays the store email.","{store_phone}: displays the store phone number.":"{store_phone}: displays the store phone number.","{cashier_name}: displays the cashier name.":"{cashier_name}: displays the cashier name.","{cashier_id}: displays the cashier id.":"{cashier_id}: displays the cashier id.","{order_code}: displays the order code.":"{order_code}: displays the order code.","{order_date}: displays the order date.":"{order_date}: displays the order date.","{order_type}: displays the order type.":"{order_type}: displays the order type.","{customer_name}: displays the customer name.":"{customer_name}: displays the customer name.","{customer_email}: displays the customer email.":"{customer_email}: displays the customer email.","{shipping_first_name}: displays the shipping first name.":"{shipping_first_name}: displays the shipping first name.","{shipping_last_name}: displays the shipping last name.":"{shipping_last_name}: displays the shipping last name.","{shipping_phone}: displays the shipping phone.":"{shipping_phone}: displays the shipping phone.","{shipping_address_1}: displays the shipping address_1.":"{shipping_address_1}: displays the shipping address_1.","{shipping_address_2}: displays the shipping address_2.":"{shipping_address_2}: displays the shipping address_2.","{shipping_country}: displays the shipping country.":"{shipping_country}: displays the shipping country.","{shipping_city}: displays the shipping city.":"{shipping_city}: displays the shipping city.","{shipping_pobox}: displays the shipping pobox.":"{shipping_pobox}: displays the shipping pobox.","{shipping_company}: displays the shipping company.":"{shipping_company}: displays the shipping company.","{shipping_email}: displays the shipping email.":"{shipping_email}: displays the shipping email.","{billing_first_name}: displays the billing first name.":"{billing_first_name}: displays the billing first name.","{billing_last_name}: displays the billing last name.":"{billing_last_name}: displays the billing last name.","{billing_phone}: displays the billing phone.":"{billing_phone}: displays the billing phone.","{billing_address_1}: displays the billing address_1.":"{billing_address_1}: displays the billing address_1.","{billing_address_2}: displays the billing address_2.":"{billing_address_2}: displays the billing address_2.","{billing_country}: displays the billing country.":"{billing_country}: displays the billing country.","{billing_city}: displays the billing city.":"{billing_city}: displays the billing city.","{billing_pobox}: displays the billing pobox.":"{billing_pobox}: displays the billing pobox.","{billing_company}: displays the billing company.":"{billing_company}: displays the billing company.","{billing_email}: displays the billing email.":"{billing_email}: displays the billing email.","Available tags :":"Available tags :","Quick Product Default Unit":"Quick Product Default Unit","Set what unit is assigned by default to all quick product.":"Set what unit is assigned by default to all quick product.","Hide Exhausted Products":"Hide Exhausted Products","Will hide exhausted products from selection on the POS.":"Will hide exhausted products from selection on the POS.","Hide Empty Category":"Hide Empty Category","Category with no or exhausted products will be hidden from selection.":"Category with no or exhausted products will be hidden from selection.","Default Printing (web)":"Default Printing (web)","The amount numbers shortcuts separated with a \"|\".":"The amount numbers shortcuts separated with a \"|\".","No submit URL was provided":"No submit URL was provided","Sorting is explicitely disabled on this column":"Sorting is explicitely disabled on this column","An unpexpected error occured while using the widget.":"An unpexpected error occured while using the widget.","This field must be similar to \"{other}\"\"":"This field must be similar to \"{other}\"\"","This field must have at least \"{length}\" characters\"":"This field must have at least \"{length}\" characters\"","This field must have at most \"{length}\" characters\"":"This field must have at most \"{length}\" characters\"","This field must be different from \"{other}\"\"":"This field must be different from \"{other}\"\"","Search result":"Search result","Choose...":"Choose...","The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.":"The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.","+{count} other":"+{count} other","The selected print gateway doesn't support this type of printing.":"The selected print gateway doesn't support this type of printing.","millisecond| second| minute| hour| day| week| month| year| decade| century| millennium":"millisecond| second| minute| hour| day| week| month| year| decade| century| millennium","milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia":"milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia","An error occured":"An error occured","You\\'re about to delete selected resources. Would you like to proceed?":"You\\'re about to delete selected resources. Would you like to proceed?","See Error":"See Error","Your uploaded files will displays here.":"Your uploaded files will displays here.","Nothing to care about !":"Nothing to care about !","Would you like to bulk edit a system role ?":"Would you like to bulk edit a system role ?","Total :":"Total :","Remaining :":"Remaining :","Instalments:":"Instalments:","This instalment doesn\\'t have any payment attached.":"This instalment doesn\\'t have any payment attached.","You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?":"You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?","An error has occured while seleting the payment gateway.":"An error has occured while seleting the payment gateway.","You're not allowed to add a discount on the product.":"You're not allowed to add a discount on the product.","You're not allowed to add a discount on the cart.":"You're not allowed to add a discount on the cart.","Cash Register : {register}":"Cash Register : {register}","The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?":"The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?","You don't have the right to edit the purchase price.":"You don't have the right to edit the purchase price.","Dynamic product can\\'t have their price updated.":"Dynamic product can\\'t have their price updated.","You\\'re not allowed to edit the order settings.":"You\\'re not allowed to edit the order settings.","Looks like there is either no products and no categories. How about creating those first to get started ?":"Looks like there is either no products and no categories. How about creating those first to get started ?","Create Categories":"Create Categories","You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?":"You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?","An unexpected error has occured while loading the form. Please check the log or contact the support.":"An unexpected error has occured while loading the form. Please check the log or contact the support.","We were not able to load the units. Make sure there are units attached on the unit group selected.":"We were not able to load the units. Make sure there are units attached on the unit group selected.","The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?":"The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?","There shoulnd\\'t be more option than there are units.":"There shoulnd\\'t be more option than there are units.","Either Selling or Purchase unit isn\\'t defined. Unable to proceed.":"Either Selling or Purchase unit isn\\'t defined. Unable to proceed.","Select the procured unit first before selecting the conversion unit.":"Select the procured unit first before selecting the conversion unit.","Convert to unit":"Convert to unit","An unexpected error has occured":"An unexpected error has occured","Unable to add product which doesn\\'t unit quantities defined.":"Unable to add product which doesn\\'t unit quantities defined.","{product}: Purchase Unit":"{product}: Purchase Unit","The product will be procured on that unit.":"The product will be procured on that unit.","Unkown Unit":"Unkown Unit","Choose Tax":"Choose Tax","The tax will be assigned to the procured product.":"The tax will be assigned to the procured product.","Show Details":"Show Details","Hide Details":"Hide Details","Important Notes":"Important Notes","Stock Management Products.":"Stock Management Products.","Doesn\\'t work with Grouped Product.":"Doesn\\'t work with Grouped Product.","Convert":"Convert","Looks like no valid products matched the searched term.":"Looks like no valid products matched the searched term.","This product doesn't have any stock to adjust.":"This product doesn't have any stock to adjust.","Select Unit":"Select Unit","Select the unit that you want to adjust the stock with.":"Select the unit that you want to adjust the stock with.","A similar product with the same unit already exists.":"A similar product with the same unit already exists.","Select Procurement":"Select Procurement","Select the procurement that you want to adjust the stock with.":"Select the procurement that you want to adjust the stock with.","Select Action":"Select Action","Select the action that you want to perform on the stock.":"Select the action that you want to perform on the stock.","Would you like to remove the selected products from the table ?":"Would you like to remove the selected products from the table ?","Unit:":"Unit:","Operation:":"Operation:","Procurement:":"Procurement:","Reason:":"Reason:","Provided":"Provided","Not Provided":"Not Provided","Remove Selected":"Remove Selected","Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.":"Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.","You haven\\'t yet generated any token for your account. Create one to get started.":"You haven\\'t yet generated any token for your account. Create one to get started.","You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?":"You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?","Date Range : {date1} - {date2}":"Date Range : {date1} - {date2}","Document : Best Products":"Document : Best Products","By : {user}":"By : {user}","Range : {date1} — {date2}":"Range : {date1} — {date2}","Document : Sale By Payment":"Document : Sale By Payment","Document : Customer Statement":"Document : Customer Statement","Customer : {selectedCustomerName}":"Customer : {selectedCustomerName}","All Categories":"All Categories","All Units":"All Units","Date : {date}":"Date : {date}","Document : {reportTypeName}":"Document : {reportTypeName}","Threshold":"Threshold","Select Units":"Select Units","An error has occured while loading the units.":"An error has occured while loading the units.","An error has occured while loading the categories.":"An error has occured while loading the categories.","Document : Payment Type":"Document : Payment Type","Document : Profit Report":"Document : Profit Report","Filter by Category":"Filter by Category","Filter by Units":"Filter by Units","An error has occured while loading the categories":"An error has occured while loading the categories","An error has occured while loading the units":"An error has occured while loading the units","By Type":"By Type","By User":"By User","By Category":"By Category","All Category":"All Category","Document : Sale Report":"Document : Sale Report","Filter By Category":"Filter By Category","Allow you to choose the category.":"Allow you to choose the category.","No category was found for proceeding the filtering.":"No category was found for proceeding the filtering.","Document : Sold Stock Report":"Document : Sold Stock Report","Filter by Unit":"Filter by Unit","Limit Results By Categories":"Limit Results By Categories","Limit Results By Units":"Limit Results By Units","Generate Report":"Generate Report","Document : Combined Products History":"Document : Combined Products History","Ini. Qty":"Ini. Qty","Added Quantity":"Added Quantity","Add. Qty":"Add. Qty","Sold Quantity":"Sold Quantity","Sold Qty":"Sold Qty","Defective Quantity":"Defective Quantity","Defec. Qty":"Defec. Qty","Final Quantity":"Final Quantity","Final Qty":"Final Qty","No data available":"No data available","Document : Yearly Report":"Document : Yearly Report","The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.":"The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.","Unable to edit this transaction":"Unable to edit this transaction","This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.":"This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.","Save Transaction":"Save Transaction","While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.":"While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.","The transaction is about to be saved. Would you like to confirm your action ?":"The transaction is about to be saved. Would you like to confirm your action ?","Unable to load the transaction":"Unable to load the transaction","You cannot edit this transaction if NexoPOS cannot perform background requests.":"You cannot edit this transaction if NexoPOS cannot perform background requests.","MySQL is selected as database driver":"MySQL is selected as database driver","Please provide the credentials to ensure NexoPOS can connect to the database.":"Please provide the credentials to ensure NexoPOS can connect to the database.","Sqlite is selected as database driver":"Sqlite is selected as database driver","Make sure Sqlite module is available for PHP. Your database will be located on the database directory.":"Make sure Sqlite module is available for PHP. Your database will be located on the database directory.","Checking database connectivity...":"Checking database connectivity...","Driver":"Driver","Set the database driver":"Set the database driver","Hostname":"Hostname","Provide the database hostname":"Provide the database hostname","Username required to connect to the database.":"Username required to connect to the database.","The username password required to connect.":"The username password required to connect.","Database Name":"Database Name","Provide the database name. Leave empty to use default file for SQLite Driver.":"Provide the database name. Leave empty to use default file for SQLite Driver.","Database Prefix":"Database Prefix","Provide the database prefix.":"Provide the database prefix.","Port":"Port","Provide the hostname port.":"Provide the hostname port.","NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.":"NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.","Install":"Install","Application":"Application","That is the application name.":"That is the application name.","Provide the administrator username.":"Provide the administrator username.","Provide the administrator email.":"Provide the administrator email.","What should be the password required for authentication.":"What should be the password required for authentication.","Should be the same as the password above.":"Should be the same as the password above.","Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.":"Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.","Choose your language to get started.":"Choose your language to get started.","Remaining Steps":"Remaining Steps","Database Configuration":"Database Configuration","Application Configuration":"Application Configuration","Language Selection":"Language Selection","Select what will be the default language of NexoPOS.":"Select what will be the default language of NexoPOS.","In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.":"In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.","Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.":"Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.","Please report this message to the support : ":"Please report this message to the support : ","No refunds made so far. Good news right?":"No refunds made so far. Good news right?","Open Register : %s":"Open Register : %s","Loading Coupon For : ":"Loading Coupon For : ","This coupon requires products that aren\\'t available on the cart at the moment.":"This coupon requires products that aren\\'t available on the cart at the moment.","This coupon requires products that belongs to specific categories that aren\\'t included at the moment.":"This coupon requires products that belongs to specific categories that aren\\'t included at the moment.","Too many results.":"Too many results.","New Customer":"New Customer","Purchases":"Purchases","Owed":"Owed","Usage :":"Usage :","Code :":"Code :","Order Reference":"Order Reference","The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?":"The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?","{product} : Units":"{product} : Units","This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.":"This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.","Previewing :":"Previewing :","Search for options":"Search for options","The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.":"The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.","The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.":"The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.","The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.":"The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.","The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.":"The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.","Invalid Error Message":"Invalid Error Message","{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List":"{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List","Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.":"Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.","No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered":"No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered","Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.":"Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.","Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.":"Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.","Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}":"Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}","{{ ucwords( $column ) }}":"{{ ucwords( $column ) }}","Delete Selected Entries":"Delete Selected Entries","Unamed Settings Page":"Unamed Settings Page","Description of unamed setting page":"Description of unamed setting page","Text Field":"Text Field","This is a sample text field.":"This is a sample text field.","No description has been provided.":"No description has been provided.","You\\'re using NexoPOS %s<\/a>":"You\\'re using NexoPOS %s<\/a>","If you haven\\'t asked this, please get in touch with the administrators.":"If you haven\\'t asked this, please get in touch with the administrators.","A new user has registered to your store (%s) with the email %s.":"A new user has registered to your store (%s) with the email %s.","The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.":"The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.","Note: ":"Note: ","Inclusive Product Taxes":"Inclusive Product Taxes","Exclusive Product Taxes":"Exclusive Product Taxes","Condition:":"Condition:","Date : %s":"Date : %s","The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?":"The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?","NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.":"NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.","Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.":"Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.","Retry":"Retry","If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.":"If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources."} \ No newline at end of file +{ + "OK": "\u0646\u0639\u0645", + "Howdy, {name}": "\u0645\u0631\u062d\u0628\u064b\u0627 \u060c {name}", + "This field is required.": "\u0647\u0630\u0647 \u0627\u0644\u062e\u0627\u0646\u0629 \u0645\u0637\u0644\u0648\u0628\u0647.", + "This field must contain a valid email address.": "\u064a\u062c\u0628 \u0623\u0646 \u064a\u062d\u062a\u0648\u064a \u0647\u0630\u0627 \u0627\u0644\u062d\u0642\u0644 \u0639\u0644\u0649 \u0639\u0646\u0648\u0627\u0646 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0635\u0627\u0644\u062d.", + "Go Back": "\u0639\u062f", + "Filters": "\u0627\u0644\u0645\u0631\u0634\u062d\u0627\u062a", + "Has Filters": "\u0644\u062f\u064a\u0647\u0627 \u0641\u0644\u0627\u062a\u0631", + "{entries} entries selected": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062f {\u0625\u062f\u062e\u0627\u0644\u0627\u062a} \u0645\u0646 \u0627\u0644\u0625\u062f\u062e\u0627\u0644\u0627\u062a", + "Download": "\u062a\u062d\u0645\u064a\u0644", + "There is nothing to display...": "\u0644\u0627 \u064a\u0648\u062c\u062f \u0634\u064a\u0621 \u0644\u0639\u0631\u0636\u0647 ...", + "Bulk Actions": "\u0625\u062c\u0631\u0627\u0621\u0627\u062a \u062c\u0645\u0644\u0629", + "displaying {perPage} on {items} items": "\u0639\u0631\u0636 {perPage} \u0639\u0644\u0649 {items} \u0639\u0646\u0635\u0631", + "The document has been generated.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0633\u062a\u0646\u062f.", + "Unexpected error occurred.": "\u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639.", + "Clear Selected Entries ?": "\u0645\u0633\u062d \u0627\u0644\u0625\u062f\u062e\u0627\u0644\u0627\u062a \u0627\u0644\u0645\u062d\u062f\u062f\u0629\u061f", + "Would you like to clear all selected entries ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0645\u0633\u062d \u0643\u0627\u0641\u0629 \u0627\u0644\u0625\u062f\u062e\u0627\u0644\u0627\u062a \u0627\u0644\u0645\u062e\u062a\u0627\u0631\u0629\u061f", + "Would you like to perform the selected bulk action on the selected entries ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u0646\u0641\u064a\u0630 \u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u0645\u062c\u0645\u0639 \u0627\u0644\u0645\u062d\u062f\u062f \u0639\u0644\u0649 \u0627\u0644\u0625\u062f\u062e\u0627\u0644\u0627\u062a \u0627\u0644\u0645\u062d\u062f\u062f\u0629\u061f", + "No selection has been made.": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0627\u062e\u062a\u064a\u0627\u0631", + "No action has been selected.": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u062d\u062f\u064a\u062f \u0623\u064a \u0625\u062c\u0631\u0627\u0621.", + "N\/D": "\u0627\u062e\u062a\u0635\u0627\u0631 \u0627\u0644\u062b\u0627\u0646\u064a", + "Range Starts": "\u064a\u0628\u062f\u0623 \u0627\u0644\u0646\u0637\u0627\u0642", + "Range Ends": "\u064a\u0646\u062a\u0647\u064a \u0627\u0644\u0646\u0637\u0627\u0642", + "Sun": "\u0627\u0644\u0634\u0645\u0633", + "Mon": "\u0627\u0644\u0625\u062b\u0646\u064a\u0646", + "Tue": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "Wed": "\u062a\u0632\u0648\u062c", + "Fri": "\u0627\u0644\u062c\u0645\u0639\u0629", + "Sat": "\u062c\u0644\u0633", + "Date": "\u062a\u0627\u0631\u064a\u062e", + "N\/A": "\u063a\u064a\u0631 \u0645\u062a\u0627\u062d", + "Nothing to display": "\u0644\u0627 \u0634\u064a\u0621 \u0644\u0639\u0631\u0636\u0647", + "Unknown Status": "\u062d\u0627\u0644\u0629 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641\u0629", + "Password Forgotten ?": "\u0647\u0644 \u0646\u0633\u064a\u062a \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631\u061f", + "Sign In": "\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644", + "Register": "\u064a\u0633\u062c\u0644", + "An unexpected error occurred.": "\u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639.", + "Unable to proceed the form is not valid.": "\u062a\u0639\u0630\u0631 \u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "Save Password": "\u062d\u0641\u0638 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631", + "Remember Your Password ?": "\u062a\u0630\u0643\u0631 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643\u061f", + "Submit": "\u064a\u0642\u062f\u0645", + "Already registered ?": "\u0645\u0633\u062c\u0644 \u0628\u0627\u0644\u0641\u0639\u0644\u061f", + "Best Cashiers": "\u0623\u0641\u0636\u0644 \u0627\u0644\u0635\u0631\u0627\u0641\u064a\u0646", + "No result to display.": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0646\u062a\u064a\u062c\u0629 \u0644\u0639\u0631\u0636\u0647\u0627.", + "Well.. nothing to show for the meantime.": "\u062d\u0633\u0646\u064b\u0627 .. \u0644\u0627 \u0634\u064a\u0621 \u0644\u0625\u0638\u0647\u0627\u0631\u0647 \u0641\u064a \u0647\u0630\u0647 \u0627\u0644\u0623\u062b\u0646\u0627\u0621.", + "Best Customers": "\u0623\u0641\u0636\u0644 \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Well.. nothing to show for the meantime": "\u062d\u0633\u0646\u064b\u0627 .. \u0644\u0627 \u0634\u064a\u0621 \u0644\u0625\u0638\u0647\u0627\u0631\u0647 \u0641\u064a \u0647\u0630\u0647 \u0627\u0644\u0623\u062b\u0646\u0627\u0621", + "Total Sales": "\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a", + "Today": "\u0627\u0644\u064a\u0648\u0645", + "Total Refunds": "\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0645\u0628\u0627\u0644\u063a \u0627\u0644\u0645\u0633\u062a\u0631\u062f\u0629", + "Clients Registered": "\u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u0645\u0633\u062c\u0644\u064a\u0646", + "Commissions": "\u0627\u0644\u0644\u062c\u0627\u0646", + "Total": "\u0627\u0644\u0645\u062c\u0645\u0648\u0639", + "Discount": "\u062e\u0635\u0645", + "Status": "\u062d\u0627\u0644\u0629", + "Paid": "\u0645\u062f\u0641\u0648\u0639", + "Partially Paid": "\u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629 \u062c\u0632\u0626\u064a\u0627", + "Unpaid": "\u063a\u064a\u0631 \u0645\u062f\u0641\u0648\u0639\u0629", + "Hold": "\u0645\u0639\u0644\u0642", + "Void": "\u0641\u0627\u0631\u063a", + "Refunded": "\u0645\u0639\u0627\u062f", + "Partially Refunded": "\u0627\u0644\u0645\u0631\u062f\u0648\u062f\u0629 \u062c\u0632\u0626\u064a\u0627", + "Incomplete Orders": "\u0623\u0648\u0627\u0645\u0631 \u063a\u064a\u0631 \u0645\u0643\u062a\u0645\u0644\u0629", + "Expenses": "\u0646\u0641\u0642\u0627\u062a", + "Weekly Sales": "\u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u0627\u0644\u0623\u0633\u0628\u0648\u0639\u064a\u0629", + "Week Taxes": "\u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u0623\u0633\u0628\u0648\u0639", + "Net Income": "\u0635\u0627\u0641\u064a \u0627\u0644\u062f\u062e\u0644", + "Week Expenses": "\u0645\u0635\u0627\u0631\u064a\u0641 \u0627\u0644\u0623\u0633\u0628\u0648\u0639", + "Current Week": "\u0627\u0644\u0623\u0633\u0628\u0648\u0639 \u0627\u0644\u062d\u0627\u0644\u064a", + "Previous Week": "\u0627\u0644\u0623\u0633\u0628\u0648\u0639 \u0627\u0644\u0633\u0627\u0628\u0642", + "Order": "\u062a\u0631\u062a\u064a\u0628", + "Refresh": "\u064a\u0646\u0639\u0634", + "Upload": "\u062a\u062d\u0645\u064a\u0644", + "Enabled": "\u0645\u0645\u0643\u0646", + "Disabled": "\u0645\u0639\u0627\u0642", + "Enable": "\u0645\u0645\u0643\u0646", + "Disable": "\u0625\u0628\u0637\u0627\u0644", + "Gallery": "\u0635\u0627\u0644\u0629 \u0639\u0631\u0636", + "Medias Manager": "\u0645\u062f\u064a\u0631 \u0627\u0644\u0648\u0633\u0627\u0626\u0637", + "Click Here Or Drop Your File To Upload": "\u0627\u0646\u0642\u0631 \u0647\u0646\u0627 \u0623\u0648 \u0623\u0633\u0642\u0637 \u0645\u0644\u0641\u0643 \u0644\u0644\u062a\u062d\u0645\u064a\u0644", + "Nothing has already been uploaded": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u062d\u0645\u064a\u0644 \u0623\u064a \u0634\u064a\u0621 \u0628\u0627\u0644\u0641\u0639\u0644", + "File Name": "\u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641", + "Uploaded At": "\u062a\u0645 \u0627\u0644\u0631\u0641\u0639 \u0641\u064a", + "By": "\u0628\u0648\u0627\u0633\u0637\u0629", + "Previous": "\u0633\u0627\u0628\u0642", + "Next": "\u0627\u0644\u062a\u0627\u0644\u064a", + "Use Selected": "\u0627\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u062d\u062f\u062f", + "Clear All": "\u0627\u0645\u0633\u062d \u0627\u0644\u0643\u0644", + "Confirm Your Action": "\u0642\u0645 \u0628\u062a\u0623\u0643\u064a\u062f \u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643", + "Would you like to clear all the notifications ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0645\u0633\u062d \u062c\u0645\u064a\u0639 \u0627\u0644\u0625\u062e\u0637\u0627\u0631\u0627\u062a\u061f", + "Permissions": "\u0623\u0630\u0648\u0646\u0627\u062a", + "Payment Summary": "\u0645\u0644\u062e\u0635 \u0627\u0644\u062f\u0641\u0639", + "Sub Total": "\u0627\u0644\u0645\u062c\u0645\u0648\u0639 \u0627\u0644\u0641\u0631\u0639\u064a", + "Shipping": "\u0634\u062d\u0646", + "Coupons": "\u0643\u0648\u0628\u0648\u0646\u0627\u062a", + "Taxes": "\u0627\u0644\u0636\u0631\u0627\u0626\u0628", + "Change": "\u064a\u062a\u063a\u064a\u0631\u0648\u0646", + "Order Status": "\u062d\u0627\u0644\u0629 \u0627\u0644\u0637\u0644\u0628", + "Customer": "\u0639\u0645\u064a\u0644", + "Type": "\u0646\u0648\u0639", + "Delivery Status": "\u062d\u0627\u0644\u0629 \u0627\u0644\u062a\u0648\u0635\u064a\u0644", + "Save": "\u064a\u062d\u0641\u0638", + "Processing Status": "\u062d\u0627\u0644\u0629 \u0627\u0644\u0645\u0639\u0627\u0644\u062c\u0629", + "Payment Status": "\u062d\u0627\u0644\u0629 \u0627\u0644\u0633\u062f\u0627\u062f", + "Products": "\u0645\u0646\u062a\u062c\u0627\u062a", + "Refunded Products": "\u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0639\u0627\u062f\u0629", + "Would you proceed ?": "\u0647\u0644 \u0633\u062a\u0645\u0636\u064a \u0642\u062f\u0645\u0627\u061f", + "The processing status of the order will be changed. Please confirm your action.": "\u0633\u064a\u062a\u0645 \u062a\u063a\u064a\u064a\u0631 \u062d\u0627\u0644\u0629 \u0645\u0639\u0627\u0644\u062c\u0629 \u0627\u0644\u0637\u0644\u0628. \u064a\u0631\u062c\u0649 \u062a\u0623\u0643\u064a\u062f \u0639\u0645\u0644\u0643.", + "The delivery status of the order will be changed. Please confirm your action.": "\u0633\u064a\u062a\u0645 \u062a\u063a\u064a\u064a\u0631 \u062d\u0627\u0644\u0629 \u062a\u0633\u0644\u064a\u0645 \u0627\u0644\u0637\u0644\u0628. \u064a\u0631\u062c\u0649 \u062a\u0623\u0643\u064a\u062f \u0639\u0645\u0644\u0643.", + "Instalments": "\u0623\u0642\u0633\u0627\u0637", + "Create": "\u0625\u0646\u0634\u0627\u0621", + "Add Instalment": "\u0623\u0636\u0641 \u062a\u0642\u0633\u064a\u0637", + "Would you like to create this instalment ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0625\u0646\u0634\u0627\u0621 \u0647\u0630\u0627 \u0627\u0644\u0642\u0633\u0637\u061f", + "An unexpected error has occurred": "\u0644\u0642\u062f \u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639", + "Would you like to delete this instalment ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0642\u0633\u0637\u061f", + "Would you like to update that instalment ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u062d\u062f\u064a\u062b \u0647\u0630\u0627 \u0627\u0644\u0642\u0633\u0637\u061f", + "Print": "\u0645\u0637\u0628\u0639\u0629", + "Store Details": "\u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0645\u062a\u062c\u0631", + "Order Code": "\u0631\u0645\u0632 \u0627\u0644\u0637\u0644\u0628", + "Cashier": "\u0623\u0645\u064a\u0646 \u0627\u0644\u0635\u0646\u062f\u0648\u0642", + "Billing Details": "\u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629", + "Shipping Details": "\u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0634\u062d\u0646", + "Product": "\u0627\u0644\u0645\u0646\u062a\u062c", + "Unit Price": "\u0633\u0639\u0631 \u0627\u0644\u0648\u062d\u062f\u0629", + "Quantity": "\u0643\u0645\u064a\u0629", + "Tax": "\u0636\u0631\u064a\u0628\u0629", + "Total Price": "\u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0643\u0644\u064a", + "Expiration Date": "\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0625\u0646\u062a\u0647\u0627\u0621", + "Due": "\u0628\u0633\u0628\u0628", + "Customer Account": "\u062d\u0633\u0627\u0628 \u0627\u0644\u0632\u0628\u0648\u0646", + "Payment": "\u0642\u0633\u0637", + "No payment possible for paid order.": "\u0644\u0627 \u064a\u0648\u062c\u062f \u062f\u0641\u0639 \u0645\u0645\u0643\u0646 \u0644\u0644\u0637\u0644\u0628 \u0627\u0644\u0645\u062f\u0641\u0648\u0639.", + "Payment History": "\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u062f\u0641\u0639", + "Unable to proceed the form is not valid": "\u062a\u0639\u0630\u0631 \u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u063a\u064a\u0631 \u0635\u0627\u0644\u062d", + "Please provide a valid value": "\u0627\u0644\u0631\u062c\u0627\u0621 \u0625\u062f\u062e\u0627\u0644 \u0642\u064a\u0645\u0629 \u0635\u0627\u0644\u062d\u0629", + "Refund With Products": "\u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0645\u0639 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a", + "Refund Shipping": "\u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u0634\u062d\u0646", + "Add Product": "\u0623\u0636\u0641 \u0645\u0646\u062a\u062c", + "Damaged": "\u062a\u0627\u0644\u0641", + "Unspoiled": "\u063a\u064a\u0631 \u0645\u0644\u0648\u062b", + "Summary": "\u0645\u0644\u062e\u0635", + "Payment Gateway": "\u0628\u0648\u0627\u0628\u0629 \u0627\u0644\u062f\u0641\u0639", + "Screen": "\u0634\u0627\u0634\u0629", + "Select the product to perform a refund.": "\u062d\u062f\u062f \u0627\u0644\u0645\u0646\u062a\u062c \u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0633\u062a\u0631\u062f\u0627\u062f.", + "Please select a payment gateway before proceeding.": "\u0627\u0644\u0631\u062c\u0627\u0621 \u062a\u062d\u062f\u064a\u062f \u0628\u0648\u0627\u0628\u0629 \u0627\u0644\u062f\u0641\u0639 \u0642\u0628\u0644 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629.", + "There is nothing to refund.": "\u0644\u0627 \u064a\u0648\u062c\u062f \u0634\u064a\u0621 \u0644\u0627\u0633\u062a\u0631\u062f\u0627\u062f\u0647.", + "Please provide a valid payment amount.": "\u0627\u0644\u0631\u062c\u0627\u0621 \u062a\u0642\u062f\u064a\u0645 \u0645\u0628\u0644\u063a \u062f\u0641\u0639 \u0635\u0627\u0644\u062d.", + "The refund will be made on the current order.": "\u0633\u064a\u062a\u0645 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u0645\u0628\u0644\u063a \u0641\u064a \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u062d\u0627\u0644\u064a.", + "Please select a product before proceeding.": "\u0627\u0644\u0631\u062c\u0627\u0621 \u062a\u062d\u062f\u064a\u062f \u0645\u0646\u062a\u062c \u0642\u0628\u0644 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629.", + "Not enough quantity to proceed.": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0643\u0645\u064a\u0629 \u0643\u0627\u0641\u064a\u0629 \u0644\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627.", + "Would you like to delete this product ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062a\u062c\u061f", + "Customers": "\u0639\u0645\u0644\u0627\u0621", + "Dashboard": "\u0644\u0648\u062d\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629", + "Order Type": "\u0646\u0648\u0639 \u0627\u0644\u0637\u0644\u0628", + "Orders": "\u0627\u0644\u0637\u0644\u0628 #%s", + "Cash Register": "\u0645\u0627\u0643\u064a\u0646\u0629 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0627\u062a \u0627\u0644\u0646\u0642\u062f\u064a\u0629", + "Reset": "\u0625\u0639\u0627\u062f\u0629 \u0636\u0628\u0637", + "Cart": "\u0639\u0631\u0628\u0629 \u0627\u0644\u062a\u0633\u0648\u0642", + "Comments": "\u062a\u0639\u0644\u064a\u0642\u0627\u062a", + "Settings": "\u0625\u0639\u062f\u0627\u062f\u0627\u062a", + "No products added...": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0645\u0646\u062a\u062c\u0627\u062a \u0645\u0636\u0627\u0641\u0629 ...", + "Price": "\u0633\u0639\u0631", + "Flat": "\u0645\u0633\u0637\u062d\u0629", + "Pay": "\u064a\u062f\u0641\u0639", + "The product price has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0633\u0639\u0631 \u0627\u0644\u0645\u0646\u062a\u062c.", + "The editable price feature is disabled.": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0645\u064a\u0632\u0629 \u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0642\u0627\u0628\u0644 \u0644\u0644\u062a\u0639\u062f\u064a\u0644.", + "Current Balance": "\u0627\u0644\u0631\u0635\u064a\u062f \u0627\u0644\u062d\u0627\u0644\u064a", + "Full Payment": "\u062f\u0641\u0639 \u0643\u0627\u0645\u0644", + "The customer account can only be used once per order. Consider deleting the previously used payment.": "\u064a\u0645\u0643\u0646 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644 \u0645\u0631\u0629 \u0648\u0627\u062d\u062f\u0629 \u0641\u0642\u0637 \u0644\u0643\u0644 \u0637\u0644\u0628. \u0636\u0639 \u0641\u064a \u0627\u0639\u062a\u0628\u0627\u0631\u0643 \u062d\u0630\u0641 \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0645\u0633\u0628\u0642\u064b\u0627.", + "Not enough funds to add {amount} as a payment. Available balance {balance}.": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0623\u0645\u0648\u0627\u0644 \u0643\u0627\u0641\u064a\u0629 \u0644\u0625\u0636\u0627\u0641\u0629 {amount} \u0643\u062f\u0641\u0639\u0629. \u0627\u0644\u0631\u0635\u064a\u062f \u0627\u0644\u0645\u062a\u0627\u062d {\u0627\u0644\u0631\u0635\u064a\u062f}.", + "Confirm Full Payment": "\u062a\u0623\u0643\u064a\u062f \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0643\u0627\u0645\u0644", + "A full payment will be made using {paymentType} for {total}": "\u0633\u064a\u062a\u0645 \u0625\u062c\u0631\u0627\u0621 \u062f\u0641\u0639\u0629 \u0643\u0627\u0645\u0644\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 {paymentType} \u0628\u0645\u0628\u0644\u063a {total}", + "You need to provide some products before proceeding.": "\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u062a\u0642\u062f\u064a\u0645 \u0628\u0639\u0636 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0642\u0628\u0644 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629.", + "Unable to add the product, there is not enough stock. Remaining %s": "\u062a\u0639\u0630\u0631 \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0645\u0646\u062a\u062c \u060c \u0644\u0627 \u064a\u0648\u062c\u062f \u0645\u062e\u0632\u0648\u0646 \u0643\u0627\u0641\u064d. \u0627\u0644\u0645\u062a\u0628\u0642\u064a\u0629%s", + "Add Images": "\u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0635\u0648\u0631", + "New Group": "\u0645\u062c\u0645\u0648\u0639\u0629 \u062c\u062f\u064a\u062f\u0629", + "Available Quantity": "\u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0645\u062a\u0648\u0641\u0631\u0629", + "Delete": "\u062d\u0630\u0641", + "Would you like to delete this group ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0647\u0630\u0647 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629\u061f", + "Your Attention Is Required": "\u0627\u0646\u062a\u0628\u0627\u0647\u0643 \u0645\u0637\u0644\u0648\u0628", + "Please select at least one unit group before you proceed.": "\u064a\u0631\u062c\u0649 \u062a\u062d\u062f\u064a\u062f \u0645\u062c\u0645\u0648\u0639\u0629 \u0648\u062d\u062f\u0629 \u0648\u0627\u062d\u062f\u0629 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0642\u0628\u0644 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629.", + "Unable to proceed as one of the unit group field is invalid": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0644\u0623\u0646 \u0623\u062d\u062f \u062d\u0642\u0648\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0629 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d", + "Would you like to delete this variation ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0627\u062e\u062a\u0644\u0627\u0641\u061f", + "Details": "\u062a\u0641\u0627\u0635\u064a\u0644", + "Unable to proceed, no product were provided.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0644\u0645 \u064a\u062a\u0645 \u062a\u0642\u062f\u064a\u0645 \u0623\u064a \u0645\u0646\u062a\u062c.", + "Unable to proceed, one or more product has incorrect values.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0645\u0646\u062a\u062c \u0648\u0627\u062d\u062f \u0623\u0648 \u0623\u0643\u062b\u0631 \u0628\u0647 \u0642\u064a\u0645 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d\u0629.", + "Unable to proceed, the procurement form is not valid.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0646\u0645\u0648\u0630\u062c \u0627\u0644\u0634\u0631\u0627\u0621 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "Unable to submit, no valid submit URL were provided.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0625\u0631\u0633\u0627\u0644 \u060c \u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0639\u0646\u0648\u0627\u0646 URL \u0635\u0627\u0644\u062d \u0644\u0644\u0625\u0631\u0633\u0627\u0644.", + "No title is provided": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0639\u0646\u0648\u0627\u0646", + "SKU": "SKU", + "Barcode": "\u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a", + "Options": "\u062e\u064a\u0627\u0631\u0627\u062a", + "The product already exists on the table.": "\u0627\u0644\u0645\u0646\u062a\u062c \u0645\u0648\u062c\u0648\u062f \u0628\u0627\u0644\u0641\u0639\u0644 \u0639\u0644\u0649 \u0627\u0644\u0637\u0627\u0648\u0644\u0629.", + "The specified quantity exceed the available quantity.": "\u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0645\u062d\u062f\u062f\u0629 \u062a\u062a\u062c\u0627\u0648\u0632 \u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0645\u062a\u0627\u062d\u0629.", + "Unable to proceed as the table is empty.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0644\u0623\u0646 \u0627\u0644\u062c\u062f\u0648\u0644 \u0641\u0627\u0631\u063a.", + "The stock adjustment is about to be made. Would you like to confirm ?": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0639\u0644\u0649 \u0648\u0634\u0643 \u0623\u0646 \u064a\u062a\u0645. \u0647\u0644 \u062a\u0648\u062f \u0627\u0644\u062a\u0623\u0643\u064a\u062f\u061f", + "More Details": "\u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644", + "Useful to describe better what are the reasons that leaded to this adjustment.": "\u0645\u0641\u064a\u062f \u0644\u0648\u0635\u0641 \u0623\u0641\u0636\u0644 \u0645\u0627 \u0647\u064a \u0627\u0644\u0623\u0633\u0628\u0627\u0628 \u0627\u0644\u062a\u064a \u0623\u062f\u062a \u0625\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062a\u0639\u062f\u064a\u0644.", + "The reason has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0633\u0628\u0628.", + "Would you like to remove this product from the table ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0625\u0632\u0627\u0644\u0629 \u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062a\u062c \u0645\u0646 \u0627\u0644\u062c\u062f\u0648\u0644\u061f", + "Search": "\u0628\u062d\u062b", + "Unit": "\u0648\u062d\u062f\u0629", + "Operation": "\u0639\u0645\u0644\u064a\u0629", + "Procurement": "\u062a\u062d\u0635\u064a\u0644", + "Value": "\u0642\u064a\u0645\u0629", + "Search and add some products": "\u0628\u062d\u062b \u0648\u0625\u0636\u0627\u0641\u0629 \u0628\u0639\u0636 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a", + "Proceed": "\u062a\u0642\u062f\u0645", + "Unable to proceed. Select a correct time range.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627. \u062d\u062f\u062f \u0627\u0644\u0646\u0637\u0627\u0642 \u0627\u0644\u0632\u0645\u0646\u064a \u0627\u0644\u0635\u062d\u064a\u062d.", + "Unable to proceed. The current time range is not valid.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627. \u0627\u0644\u0646\u0637\u0627\u0642 \u0627\u0644\u0632\u0645\u0646\u064a \u0627\u0644\u062d\u0627\u0644\u064a \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "Would you like to proceed ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627 \u061f", + "An unexpected error has occurred.": "\u0644\u0642\u062f \u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639.", + "No rules has been provided.": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0623\u064a \u0642\u0648\u0627\u0639\u062f.", + "No valid run were provided.": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u062a\u0634\u063a\u064a\u0644 \u0635\u0627\u0644\u062d.", + "Unable to proceed, the form is invalid.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "Unable to proceed, no valid submit URL is defined.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0644\u0645 \u064a\u062a\u0645 \u062a\u062d\u062f\u064a\u062f \u0639\u0646\u0648\u0627\u0646 URL \u0635\u0627\u0644\u062d \u0644\u0644\u0625\u0631\u0633\u0627\u0644.", + "No title Provided": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0639\u0646\u0648\u0627\u0646", + "General": "\u0639\u0627\u0645", + "Add Rule": "\u0623\u0636\u0641 \u0627\u0644\u0642\u0627\u0639\u062f\u0629", + "Save Settings": "\u0627\u062d\u0641\u0638 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a", + "An unexpected error occurred": "\u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639", + "Ok": "\u0646\u0639\u0645", + "New Transaction": "\u0645\u0639\u0627\u0645\u0644\u0629 \u062c\u062f\u064a\u062f\u0629", + "Close": "\u0642\u0631\u064a\u0628", + "Search Filters": "\u0645\u0631\u0634\u062d\u0627\u062a \u0627\u0644\u0628\u062d\u062b", + "Clear Filters": "\u0645\u0633\u062d \u0639\u0648\u0627\u0645\u0644 \u0627\u0644\u062a\u0635\u0641\u064a\u0629", + "Use Filters": "\u0627\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0631\u0634\u062d\u0627\u062a", + "Would you like to delete this order": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628", + "The current order will be void. This action will be recorded. Consider providing a reason for this operation": "\u0633\u064a\u0643\u0648\u0646 \u0627\u0644\u062a\u0631\u062a\u064a\u0628 \u0627\u0644\u062d\u0627\u0644\u064a \u0628\u0627\u0637\u0644\u0627\u064b. \u0633\u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0647\u0630\u0627 \u0627\u0644\u0625\u062c\u0631\u0627\u0621. \u0636\u0639 \u0641\u064a \u0627\u0639\u062a\u0628\u0627\u0631\u0643 \u062a\u0642\u062f\u064a\u0645 \u0633\u0628\u0628 \u0644\u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064a\u0629", + "Order Options": "\u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u0637\u0644\u0628", + "Payments": "\u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0627\u062a", + "Refund & Return": "\u0627\u0644\u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0648\u0627\u0644\u0625\u0631\u062c\u0627\u0639", + "Installments": "\u0623\u0642\u0633\u0627\u0637", + "Order Refunds": "\u0637\u0644\u0628 \u0627\u0644\u0645\u0628\u0627\u0644\u063a \u0627\u0644\u0645\u0633\u062a\u0631\u062f\u0629", + "Condition": "\u0634\u0631\u0637", + "The form is not valid.": "\u0627\u0644\u0646\u0645\u0648\u0630\u062c \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "Balance": "\u0627\u0644\u0631\u0635\u064a\u062f", + "Input": "\u0645\u062f\u062e\u0644", + "Register History": "\u0633\u062c\u0644 \u0627\u0644\u062a\u0627\u0631\u064a\u062e", + "Close Register": "\u0625\u063a\u0644\u0627\u0642 \u0627\u0644\u062a\u0633\u062c\u064a\u0644", + "Cash In": "\u0627\u0644\u062a\u062f\u0641\u0642\u0627\u062a \u0627\u0644\u0646\u0642\u062f\u064a\u0629 \u0627\u0644\u062f\u0627\u062e\u0644\u0629", + "Cash Out": "\u0627\u0644\u0645\u0635\u0631\u0648\u0641\u0627\u062a", + "Register Options": "\u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u062a\u0633\u062c\u064a\u0644", + "Sales": "\u0645\u0628\u064a\u0639\u0627\u062a", + "History": "\u062a\u0627\u0631\u064a\u062e", + "Unable to open this register. Only closed register can be opened.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0641\u062a\u062d \u0647\u0630\u0627 \u0627\u0644\u0633\u062c\u0644. \u064a\u0645\u0643\u0646 \u0641\u062a\u062d \u0627\u0644\u0633\u062c\u0644 \u0627\u0644\u0645\u063a\u0644\u0642 \u0641\u0642\u0637.", + "Open The Register": "\u0627\u0641\u062a\u062d \u0627\u0644\u0633\u062c\u0644", + "Exit To Orders": "\u0627\u0644\u062e\u0631\u0648\u062c \u0645\u0646 \u0627\u0644\u0623\u0648\u0627\u0645\u0631", + "Looks like there is no registers. At least one register is required to proceed.": "\u064a\u0628\u062f\u0648 \u0623\u0646\u0647 \u0644\u0627 \u062a\u0648\u062c\u062f \u0633\u062c\u0644\u0627\u062a. \u0645\u0637\u0644\u0648\u0628 \u0633\u062c\u0644 \u0648\u0627\u062d\u062f \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0644\u0644\u0645\u062a\u0627\u0628\u0639\u0629.", + "Create Cash Register": "\u0625\u0646\u0634\u0627\u0621 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u0646\u0642\u062f\u064a\u0629", + "Yes": "\u0646\u0639\u0645", + "No": "\u0644\u0627", + "Load Coupon": "\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0642\u0633\u064a\u0645\u0629", + "Apply A Coupon": "\u062a\u0637\u0628\u064a\u0642 \u0642\u0633\u064a\u0645\u0629", + "Load": "\u062d\u0645\u0644", + "Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.": "\u0623\u062f\u062e\u0644 \u0631\u0645\u0632 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0630\u064a \u064a\u062c\u0628 \u0623\u0646 \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639. \u0625\u0630\u0627 \u062a\u0645 \u0625\u0635\u062f\u0627\u0631 \u0642\u0633\u064a\u0645\u0629 \u0644\u0623\u062d\u062f \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u060c \u0641\u064a\u062c\u0628 \u062a\u062d\u062f\u064a\u062f \u0647\u0630\u0627 \u0627\u0644\u0639\u0645\u064a\u0644 \u0645\u0633\u0628\u0642\u064b\u0627.", + "Click here to choose a customer.": "\u0627\u0646\u0642\u0631 \u0647\u0646\u0627 \u0644\u0627\u062e\u062a\u064a\u0627\u0631 \u0639\u0645\u064a\u0644.", + "Coupon Name": "\u0627\u0633\u0645 \u0627\u0644\u0642\u0633\u064a\u0645\u0629", + "Usage": "\u0625\u0633\u062a\u0639\u0645\u0627\u0644", + "Unlimited": "\u063a\u064a\u0631 \u0645\u062d\u062f\u0648\u062f", + "Valid From": "\u0635\u0627\u0644\u062d \u0645\u0646 \u062a\u0627\u0631\u064a\u062e", + "Valid Till": "\u0635\u0627\u0644\u062d \u062d\u062a\u0649", + "Categories": "\u0641\u0626\u0627\u062a", + "Active Coupons": "\u0627\u0644\u0642\u0633\u0627\u0626\u0645 \u0627\u0644\u0646\u0634\u0637\u0629", + "Apply": "\u062a\u0637\u0628\u064a\u0642", + "Cancel": "\u064a\u0644\u063a\u064a", + "Coupon Code": "\u0631\u0645\u0632 \u0627\u0644\u0643\u0648\u0628\u0648\u0646", + "The coupon is out from validity date range.": "\u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u062e\u0627\u0631\u062c \u0646\u0637\u0627\u0642 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0635\u0644\u0627\u062d\u064a\u0629.", + "The coupon has applied to the cart.": "\u062a\u0645 \u062a\u0637\u0628\u064a\u0642 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0639\u0644\u0649 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642.", + "Percentage": "\u0627\u0644\u0646\u0633\u0628\u0629 \u0627\u0644\u0645\u0626\u0648\u064a\u0629", + "Unknown Type": "\u0646\u0648\u0639 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641", + "You must select a customer before applying a coupon.": "\u064a\u062c\u0628 \u0639\u0644\u064a\u0643 \u062a\u062d\u062f\u064a\u062f \u0639\u0645\u064a\u0644 \u0642\u0628\u0644 \u062a\u0637\u0628\u064a\u0642 \u0627\u0644\u0642\u0633\u064a\u0645\u0629.", + "The coupon has been loaded.": "\u062a\u0645 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0642\u0633\u064a\u0645\u0629.", + "Use": "\u064a\u0633\u062a\u062e\u062f\u0645", + "No coupon available for this customer": "\u0644\u0627 \u0642\u0633\u064a\u0645\u0629 \u0645\u062a\u0627\u062d\u0629 \u0644\u0647\u0630\u0627 \u0627\u0644\u0639\u0645\u064a\u0644", + "Select Customer": "\u062d\u062f\u062f \u0627\u0644\u0639\u0645\u064a\u0644", + "No customer match your query...": "\u0644\u0627 \u064a\u0648\u062c\u062f \u0639\u0645\u064a\u0644 \u064a\u0637\u0627\u0628\u0642 \u0627\u0633\u062a\u0641\u0633\u0627\u0631\u0643 ...", + "Create a customer": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0639\u0645\u064a\u0644", + "Customer Name": "\u0627\u0633\u0645 \u0627\u0644\u0632\u0628\u0648\u0646", + "Save Customer": "\u062d\u0641\u0638 \u0627\u0644\u0639\u0645\u064a\u0644", + "No Customer Selected": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u062d\u062f\u064a\u062f \u0623\u064a \u0632\u0628\u0648\u0646", + "In order to see a customer account, you need to select one customer.": "\u0644\u0643\u064a \u062a\u0631\u0649 \u062d\u0633\u0627\u0628 \u0639\u0645\u064a\u0644 \u060c \u0639\u0644\u064a\u0643 \u062a\u062d\u062f\u064a\u062f \u0639\u0645\u064a\u0644 \u0648\u0627\u062d\u062f.", + "Summary For": "\u0645\u0644\u062e\u0635 \u0644\u0640", + "Total Purchases": "\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Last Purchases": "\u0639\u0645\u0644\u064a\u0627\u062a \u0627\u0644\u0634\u0631\u0627\u0621 \u0627\u0644\u0623\u062e\u064a\u0631\u0629", + "No orders...": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0623\u0648\u0627\u0645\u0631 ...", + "Name": "\u0627\u0633\u0645", + "No coupons for the selected customer...": "\u0644\u0627 \u0643\u0648\u0628\u0648\u0646\u0627\u062a \u0644\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0645\u062d\u062f\u062f ...", + "Use Coupon": "\u0627\u0633\u062a\u062e\u062f\u0645 \u0642\u0633\u064a\u0645\u0629", + "Rewards": "\u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a", + "Points": "\u0646\u0642\u0627\u0637", + "Target": "\u0627\u0633\u062a\u0647\u062f\u0627\u0641", + "No rewards available the selected customer...": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0645\u0643\u0627\u0641\u0622\u062a \u0645\u062a\u0627\u062d\u0629 \u0644\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0645\u062e\u062a\u0627\u0631 ...", + "Account Transaction": "\u0645\u0639\u0627\u0645\u0644\u0629 \u0627\u0644\u062d\u0633\u0627\u0628", + "Percentage Discount": "\u0646\u0633\u0628\u0629 \u0627\u0644\u062e\u0635\u0645", + "Flat Discount": "\u062e\u0635\u0645 \u062b\u0627\u0628\u062a", + "Use Customer ?": "\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0632\u0628\u0648\u0646\u061f", + "No customer is selected. Would you like to proceed with this customer ?": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u062e\u062a\u064a\u0627\u0631 \u0623\u064a \u0632\u0628\u0648\u0646. \u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0645\u0639 \u0647\u0630\u0627 \u0627\u0644\u0639\u0645\u064a\u0644\u061f", + "Change Customer ?": "\u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u0639\u0645\u064a\u0644\u061f", + "Would you like to assign this customer to the ongoing order ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u062e\u0635\u064a\u0635 \u0647\u0630\u0627 \u0627\u0644\u0639\u0645\u064a\u0644 \u0644\u0644\u0637\u0644\u0628 \u0627\u0644\u062c\u0627\u0631\u064a\u061f", + "Product Discount": "\u062e\u0635\u0645 \u0627\u0644\u0645\u0646\u062a\u062c", + "Cart Discount": "\u0633\u0644\u0629 \u0627\u0644\u062e\u0635\u0645", + "Hold Order": "\u0639\u0642\u062f \u0627\u0644\u0623\u0645\u0631", + "The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.": "\u0633\u064a\u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0623\u0645\u0631 \u0627\u0644\u062d\u0627\u0644\u064a \u0642\u064a\u062f \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631. \u064a\u0645\u0643\u0646\u0643 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628 \u0645\u0646 \u0632\u0631 \u0627\u0644\u0623\u0645\u0631 \u0627\u0644\u0645\u0639\u0644\u0642. \u0642\u062f \u064a\u0633\u0627\u0639\u062f\u0643 \u062a\u0648\u0641\u064a\u0631 \u0645\u0631\u062c\u0639 \u0644\u0647 \u0641\u064a \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0623\u0645\u0631 \u0628\u0633\u0631\u0639\u0629 \u0623\u0643\u0628\u0631.", + "Confirm": "\u064a\u062a\u0623\u0643\u062f", + "Layaway Parameters": "\u0645\u0639\u0644\u0645\u0627\u062a Layaway", + "Minimum Payment": "\u0627\u0644\u062d\u062f \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0644\u062f\u0641\u0639", + "Instalments & Payments": "\u0627\u0644\u0623\u0642\u0633\u0627\u0637 \u0648\u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0627\u062a", + "The final payment date must be the last within the instalments.": "\u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0646\u0647\u0627\u0626\u064a \u0647\u0648 \u0627\u0644\u0623\u062e\u064a\u0631 \u062e\u0644\u0627\u0644 \u0627\u0644\u0623\u0642\u0633\u0627\u0637.", + "Amount": "\u0643\u0645\u064a\u0629", + "You must define layaway settings before proceeding.": "\u064a\u062c\u0628 \u0639\u0644\u064a\u0643 \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u0624\u0642\u062a\u0629 \u0642\u0628\u0644 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629.", + "Please provide instalments before proceeding.": "\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 \u0627\u0644\u0623\u0642\u0633\u0627\u0637 \u0642\u0628\u0644 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629.", + "Unable to process, the form is not valid": "\u062a\u0639\u0630\u0631 \u0645\u0639\u0627\u0644\u062c\u0629 \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u063a\u064a\u0631 \u0635\u0627\u0644\u062d", + "One or more instalments has an invalid date.": "\u0642\u0633\u0637 \u0648\u0627\u062d\u062f \u0623\u0648 \u0623\u0643\u062b\u0631 \u0644\u0647 \u062a\u0627\u0631\u064a\u062e \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "One or more instalments has an invalid amount.": "\u0642\u0633\u0637 \u0648\u0627\u062d\u062f \u0623\u0648 \u0623\u0643\u062b\u0631 \u0628\u0647 \u0645\u0628\u0644\u063a \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "One or more instalments has a date prior to the current date.": "\u0642\u0633\u0637 \u0648\u0627\u062d\u062f \u0623\u0648 \u0623\u0643\u062b\u0631 \u0644\u0647 \u062a\u0627\u0631\u064a\u062e \u0633\u0627\u0628\u0642 \u0644\u0644\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u062d\u0627\u0644\u064a.", + "The payment to be made today is less than what is expected.": "\u0627\u0644\u062f\u0641\u0639\u0629 \u0627\u0644\u062a\u064a \u064a\u062a\u0639\u064a\u0646 \u0633\u062f\u0627\u062f\u0647\u0627 \u0627\u0644\u064a\u0648\u0645 \u0623\u0642\u0644 \u0645\u0645\u0627 \u0647\u0648 \u0645\u062a\u0648\u0642\u0639.", + "Total instalments must be equal to the order total.": "\u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0623\u0642\u0633\u0627\u0637 \u0645\u0633\u0627\u0648\u064a\u064b\u0627 \u0644\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0637\u0644\u0628.", + "Order Note": "\u0645\u0630\u0643\u0631\u0629 \u0627\u0644\u0646\u0638\u0627\u0645", + "Note": "\u0645\u0644\u062d\u0648\u0638\u0629", + "More details about this order": "\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 \u062d\u0648\u0644 \u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628", + "Display On Receipt": "\u0627\u0644\u0639\u0631\u0636 \u0639\u0646\u062f \u0627\u0644\u0627\u0633\u062a\u0644\u0627\u0645", + "Will display the note on the receipt": "\u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u0627\u0644\u0645\u0644\u0627\u062d\u0638\u0629 \u0639\u0644\u0649 \u0627\u0644\u0625\u064a\u0635\u0627\u0644", + "Open": "\u0627\u0641\u062a\u062d", + "Order Settings": "\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0637\u0644\u0628", + "Define The Order Type": "\u062a\u062d\u062f\u064a\u062f \u0646\u0648\u0639 \u0627\u0644\u0623\u0645\u0631", + "Payment List": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062f\u0641\u0639", + "List Of Payments": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0627\u062a", + "No Payment added.": "\u0644\u0627 \u064a\u0648\u062c\u062f \u062f\u0641\u0639 \u0645\u0636\u0627\u0641.", + "Select Payment": "\u062d\u062f\u062f \u0627\u0644\u062f\u0641\u0639", + "Submit Payment": "\u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u062f\u0641\u0639", + "Layaway": "\u0627\u0633\u062a\u0631\u0627\u062d", + "On Hold": "\u0641\u064a \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631", + "Tendered": "\u0645\u0646\u0627\u0642\u0635\u0629", + "Nothing to display...": "\u0644\u0627 \u0634\u064a\u0621 \u0644\u0639\u0631\u0636\u0647 ...", + "Product Price": "\u0633\u0639\u0631 \u0627\u0644\u0645\u0646\u062a\u062c", + "Define Quantity": "\u062d\u062f\u062f \u0627\u0644\u0643\u0645\u064a\u0629", + "Please provide a quantity": "\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 \u0643\u0645\u064a\u0629", + "Product \/ Service": "\u0627\u0644\u0645\u0646\u062a\u062c \/ \u0627\u0644\u062e\u062f\u0645\u0629", + "Unable to proceed. The form is not valid.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627. \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "An error has occurred while computing the product.": "\u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0646\u062a\u062c.", + "Provide a unique name for the product.": "\u0623\u062f\u062e\u0644 \u0627\u0633\u0645\u064b\u0627 \u0641\u0631\u064a\u062f\u064b\u0627 \u0644\u0644\u0645\u0646\u062a\u062c.", + "Define what is the sale price of the item.": "\u062a\u062d\u062f\u064a\u062f \u0633\u0639\u0631 \u0628\u064a\u0639 \u0627\u0644\u0633\u0644\u0639\u0629.", + "Set the quantity of the product.": "\u062d\u062f\u062f \u0643\u0645\u064a\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.", + "Assign a unit to the product.": "\u0642\u0645 \u0628\u062a\u0639\u064a\u064a\u0646 \u0648\u062d\u062f\u0629 \u0644\u0644\u0645\u0646\u062a\u062c.", + "Tax Type": "\u0646\u0648\u0639 \u0627\u0644\u0636\u0631\u064a\u0628\u0629", + "Inclusive": "\u0634\u0627\u0645\u0644", + "Exclusive": "\u062d\u0635\u0631\u064a", + "Define what is tax type of the item.": "\u062a\u062d\u062f\u064a\u062f \u0646\u0648\u0639 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0644\u0644\u0639\u0646\u0635\u0631.", + "Tax Group": "\u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u064a\u0628\u064a\u0629", + "Choose the tax group that should apply to the item.": "\u0627\u062e\u062a\u0631 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u062a\u064a \u064a\u062c\u0628 \u062a\u0637\u0628\u064a\u0642\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0639\u0646\u0635\u0631.", + "Search Product": "\u0627\u0644\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u0645\u0646\u062a\u062c", + "There is nothing to display. Have you started the search ?": "\u0644\u0627 \u064a\u0648\u062c\u062f \u0634\u064a\u0621 \u0644\u0639\u0631\u0636\u0647. \u0647\u0644 \u0628\u062f\u0623\u062a \u0627\u0644\u0628\u062d\u062b\u061f", + "Shipping & Billing": "\u0627\u0644\u0634\u062d\u0646 \u0648\u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631", + "Tax & Summary": "\u0627\u0644\u0636\u0631\u0627\u0626\u0628 \u0648\u0627\u0644\u0645\u0644\u062e\u0635", + "Select Tax": "\u062d\u062f\u062f \u0627\u0644\u0636\u0631\u0627\u0626\u0628", + "Define the tax that apply to the sale.": "\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u062a\u064a \u062a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0628\u064a\u0639.", + "Define how the tax is computed": "\u062a\u062d\u062f\u064a\u062f \u0643\u064a\u0641\u064a\u0629 \u0627\u062d\u062a\u0633\u0627\u0628 \u0627\u0644\u0636\u0631\u064a\u0628\u0629", + "Define when that specific product should expire.": "\u062d\u062f\u062f \u0645\u062a\u0649 \u064a\u062c\u0628 \u0623\u0646 \u062a\u0646\u062a\u0647\u064a \u0635\u0644\u0627\u062d\u064a\u0629 \u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u062d\u062f\u062f.", + "Renders the automatically generated barcode.": "\u064a\u062c\u0633\u062f \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a \u0627\u0644\u0630\u064a \u062a\u0645 \u0625\u0646\u0634\u0627\u0624\u0647 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627.", + "Adjust how tax is calculated on the item.": "\u0627\u0636\u0628\u0637 \u0643\u064a\u0641\u064a\u0629 \u0627\u062d\u062a\u0633\u0627\u0628 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0639\u0644\u0649 \u0627\u0644\u0639\u0646\u0635\u0631.", + "Units & Quantities": "\u0627\u0644\u0648\u062d\u062f\u0627\u062a \u0648\u0627\u0644\u0643\u0645\u064a\u0627\u062a", + "Sale Price": "\u0633\u0639\u0631 \u0627\u0644\u0628\u064a\u0639", + "Wholesale Price": "\u0633\u0639\u0631 \u0628\u0627\u0644\u062c\u0645\u0644\u0629", + "Select": "\u064a\u062e\u062a\u0627\u0631", + "The customer has been loaded": "\u062a\u0645 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0639\u0645\u064a\u0644", + "Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.": "\u062a\u0639\u0630\u0631 \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a. \u064a\u0628\u062f\u0648 \u0623\u0646 \u0627\u0644\u0639\u0645\u064a\u0644 \u0644\u0645 \u064a\u0639\u062f \u0645\u0648\u062c\u0648\u062f\u064b\u0627. \u0636\u0639 \u0641\u064a \u0627\u0639\u062a\u0628\u0627\u0631\u0643 \u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a \u0641\u064a \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a.", + "OKAY": "\u062d\u0633\u0646\u0627", + "Some products has been added to the cart. Would youl ike to discard this order ?": "\u062a\u0645\u062a \u0625\u0636\u0627\u0641\u0629 \u0628\u0639\u0636 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0625\u0644\u0649 \u0639\u0631\u0628\u0629 \u0627\u0644\u062a\u0633\u0648\u0642. \u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u062c\u0627\u0647\u0644 \u0647\u0630\u0627 \u0627\u0644\u0623\u0645\u0631\u061f", + "This coupon is already added to the cart": "\u062a\u0645\u062a \u0625\u0636\u0627\u0641\u0629 \u0647\u0630\u0647 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0628\u0627\u0644\u0641\u0639\u0644 \u0625\u0644\u0649 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642", + "No tax group assigned to the order": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0645\u062c\u0645\u0648\u0639\u0629 \u0636\u0631\u064a\u0628\u064a\u0629 \u0644\u0644\u0623\u0645\u0631", + "Unable to proceed": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627", + "Layaway defined": "\u062a\u062d\u062f\u064a\u062f Layaway", + "Partially paid orders are disabled.": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629 \u062c\u0632\u0626\u064a\u064b\u0627.", + "An order is currently being processed.": "\u0623\u0645\u0631 \u0642\u064a\u062f \u0627\u0644\u0645\u0639\u0627\u0644\u062c\u0629 \u062d\u0627\u0644\u064a\u0627.", + "Okay": "\u062a\u0645\u0627\u0645", + "An unexpected error has occurred while fecthing taxes.": "\u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639 \u0623\u062b\u0646\u0627\u0621 \u0641\u0631\u0636 \u0627\u0644\u0636\u0631\u0627\u0626\u0628.", + "Loading...": "\u062a\u062d\u0645\u064a\u0644...", + "Profile": "\u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0634\u062e\u0635\u064a", + "Logout": "\u062a\u0633\u062c\u064a\u0644 \u062e\u0631\u0648\u062c", + "Unnamed Page": "\u0627\u0644\u0635\u0641\u062d\u0629 \u063a\u064a\u0631 \u0627\u0644\u0645\u0633\u0645\u0627\u0629", + "No description": "\u0628\u062f\u0648\u0646 \u0648\u0635\u0641", + "Provide a name to the resource.": "\u0623\u062f\u062e\u0644 \u0627\u0633\u0645\u064b\u0627 \u0644\u0644\u0645\u0648\u0631\u062f.", + "Edit": "\u064a\u062d\u0631\u0631", + "Would you like to delete this ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0647\u0630\u0627\u061f", + "Delete Selected Groups": "\u062d\u0630\u0641 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0645\u062e\u062a\u0627\u0631\u0629", + "Activate Your Account": "\u0641\u0639\u0644 \u062d\u0633\u0627\u0628\u0643", + "The account you have created for __%s__, require an activation. In order to proceed, please click on the following link": "\u064a\u062a\u0637\u0644\u0628 \u0627\u0644\u062d\u0633\u0627\u0628 \u0627\u0644\u0630\u064a \u0642\u0645\u062a \u0628\u0625\u0646\u0634\u0627\u0626\u0647 \u0644\u0640 __%s__ \u062a\u0646\u0634\u064a\u0637\u064b\u0627. \u0644\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0627\u0644\u0631\u062c\u0627\u0621 \u0627\u0644\u0636\u063a\u0637 \u0639\u0644\u0649 \u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u062a\u0627\u0644\u064a", + "Password Recovered": "\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631", + "Your password has been successfully updated on __%s__. You can now login with your new password.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631\u0643 \u0628\u0646\u062c\u0627\u062d \u0641\u064a __%s__. \u064a\u0645\u0643\u0646\u0643 \u0627\u0644\u0622\u0646 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u062c\u062f\u064a\u062f\u0629 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643.", + "Password Recovery": "\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631", + "Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ": "\u0637\u0644\u0628 \u0634\u062e\u0635 \u0645\u0627 \u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643 \u0639\u0644\u0649 __ \"%s\" __. \u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u062a\u0630\u0643\u0631 \u0623\u0646\u0643 \u0642\u0645\u062a \u0628\u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628 \u060c \u0641\u064a\u0631\u062c\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0628\u0627\u0644\u0646\u0642\u0631 \u0641\u0648\u0642 \u0627\u0644\u0632\u0631 \u0623\u062f\u0646\u0627\u0647.", + "Reset Password": "\u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631", + "New User Registration": "\u062a\u0633\u062c\u064a\u0644 \u0645\u0633\u062a\u062e\u062f\u0645 \u062c\u062f\u064a\u062f", + "Your Account Has Been Created": "\u0644\u0642\u062f \u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628\u0643", + "Login": "\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644", + "Save Coupon": "\u062d\u0641\u0638 \u0627\u0644\u0642\u0633\u064a\u0645\u0629", + "This field is required": "\u0647\u0630\u0647 \u0627\u0644\u062e\u0627\u0646\u0629 \u0645\u0637\u0644\u0648\u0628\u0647", + "The form is not valid. Please check it and try again": "\u0627\u0644\u0646\u0645\u0648\u0630\u062c \u063a\u064a\u0631 \u0635\u0627\u0644\u062d. \u064a\u0631\u062c\u0649 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0630\u0644\u0643 \u0648\u062d\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649", + "mainFieldLabel not defined": "mainFieldLabel \u063a\u064a\u0631 \u0645\u0639\u0631\u0651\u0641", + "Create Customer Group": "\u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Save a new customer group": "\u062d\u0641\u0638 \u0645\u062c\u0645\u0648\u0639\u0629 \u0639\u0645\u0644\u0627\u0621 \u062c\u062f\u064a\u062f\u0629", + "Update Group": "\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629", + "Modify an existing customer group": "\u062a\u0639\u062f\u064a\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u062d\u0627\u0644\u064a\u0629", + "Managing Customers Groups": "\u0625\u062f\u0627\u0631\u0629 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Create groups to assign customers": "\u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0644\u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Create Customer": "\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0639\u0645\u064a\u0644", + "Managing Customers": "\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "List of registered customers": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u0645\u0633\u062c\u0644\u064a\u0646", + "Log out": "\u062a\u0633\u062c\u064a\u0644 \u062e\u0631\u0648\u062c", + "Your Module": "\u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643", + "Choose the zip file you would like to upload": "\u0627\u062e\u062a\u0631 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0645\u0636\u063a\u0648\u0637 \u0627\u0644\u0630\u064a \u062a\u0631\u064a\u062f \u062a\u062d\u0645\u064a\u0644\u0647", + "Managing Orders": "\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0637\u0644\u0628\u0627\u062a", + "Manage all registered orders.": "\u0625\u062f\u0627\u0631\u0629 \u062c\u0645\u064a\u0639 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0645\u0633\u062c\u0644\u0629.", + "Receipt — %s": "\u0627\u0633\u062a\u0644\u0627\u0645 \u0648 [\u0645\u062f\u0634] \u061b \u066a\u0633", + "Order receipt": "\u0625\u064a\u0635\u0627\u0644 \u0627\u0644\u0637\u0644\u0628", + "Hide Dashboard": "\u0627\u062e\u0641\u0627\u0621 \u0644\u0648\u062d\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629", + "Refund receipt": "\u0625\u064a\u0635\u0627\u0644 \u0627\u0644\u0627\u0633\u062a\u0631\u062f\u0627\u062f", + "Unknown Payment": "\u062f\u0641\u0639 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641", + "Procurement Name": "\u0627\u0633\u0645 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Unable to proceed no products has been provided.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0644\u0645 \u064a\u062a\u0645 \u062a\u0642\u062f\u064a\u0645 \u0623\u064a \u0645\u0646\u062a\u062c\u0627\u062a.", + "Unable to proceed, one or more products is not valid.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0645\u0646\u062a\u062c \u0648\u0627\u062d\u062f \u0623\u0648 \u0623\u0643\u062b\u0631 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "Unable to proceed the procurement form is not valid.": "\u062a\u0639\u0630\u0631 \u0645\u062a\u0627\u0628\u0639\u0629 \u0646\u0645\u0648\u0630\u062c \u0627\u0644\u0634\u0631\u0627\u0621 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "Unable to proceed, no submit url has been provided.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0639\u0646\u0648\u0627\u0646 url \u0644\u0644\u0625\u0631\u0633\u0627\u0644.", + "SKU, Barcode, Product name.": "SKU \u060c \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a \u060c \u0627\u0633\u0645 \u0627\u0644\u0645\u0646\u062a\u062c.", + "Email": "\u0628\u0631\u064a\u062f \u0627\u0644\u0627\u0644\u0643\u062a\u0631\u0648\u0646\u064a", + "Phone": "\u0647\u0627\u062a\u0641", + "First Address": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0623\u0648\u0644", + "Second Address": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "Address": "\u0639\u0646\u0648\u0627\u0646", + "City": "\u0645\u062f\u064a\u0646\u0629", + "PO.Box": "\u0635\u0646\u062f\u0648\u0642 \u0628\u0631\u064a\u062f", + "Description": "\u0648\u0635\u0641", + "Included Products": "\u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u062a\u0636\u0645\u0646\u0629", + "Apply Settings": "\u062a\u0637\u0628\u064a\u0642 \u0625\u0639\u062f\u0627\u062f\u0627\u062a", + "Basic Settings": "\u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629", + "Visibility Settings": "\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0631\u0624\u064a\u0629", + "Unable to load the report as the timezone is not set on the settings.": "\u062a\u0639\u0630\u0631 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u062a\u0642\u0631\u064a\u0631 \u062d\u064a\u062b \u0644\u0645 \u064a\u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0645\u0646\u0637\u0642\u0629 \u0627\u0644\u0632\u0645\u0646\u064a\u0629 \u0639\u0644\u0649 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a.", + "Year": "\u0639\u0627\u0645", + "Recompute": "\u0625\u0639\u0627\u062f\u0629 \u062d\u0633\u0627\u0628", + "Income": "\u062f\u062e\u0644", + "January": "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "March": "\u0645\u0627\u0631\u0633", + "April": "\u0623\u0628\u0631\u064a\u0644", + "May": "\u0642\u062f", + "June": "\u064a\u0648\u0646\u064a\u0648", + "July": "\u062a\u0645\u0648\u0632", + "August": "\u0634\u0647\u0631 \u0627\u063a\u0633\u0637\u0633", + "September": "\u0633\u0628\u062a\u0645\u0628\u0631", + "October": "\u0627\u0643\u062a\u0648\u0628\u0631", + "November": "\u0634\u0647\u0631 \u0646\u0648\u0641\u0645\u0628\u0631", + "December": "\u062f\u064a\u0633\u0645\u0628\u0631", + "Sort Results": "\u0641\u0631\u0632 \u0627\u0644\u0646\u062a\u0627\u0626\u062c", + "Using Quantity Ascending": "\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062a\u0635\u0627\u0639\u062f\u064a \u0627\u0644\u0643\u0645\u064a\u0629", + "Using Quantity Descending": "\u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062a\u0646\u0627\u0632\u0644\u064a \u0627\u0644\u0643\u0645\u064a\u0629", + "Using Sales Ascending": "\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u062a\u0635\u0627\u0639\u062f\u064a\u0627", + "Using Sales Descending": "\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u062a\u0646\u0627\u0632\u0644\u064a\u0627\u064b", + "Using Name Ascending": "\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0627\u0633\u0645 \u062a\u0635\u0627\u0639\u062f\u064a\u064b\u0627", + "Using Name Descending": "\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0627\u0633\u0645 \u062a\u0646\u0627\u0632\u0644\u064a\u064b\u0627", + "Progress": "\u062a\u0642\u062f\u0645", + "Purchase Price": "\u0633\u0639\u0631 \u0627\u0644\u0634\u0631\u0627\u0621", + "Profit": "\u0631\u0628\u062d", + "Discounts": "\u0627\u0644\u062e\u0635\u0648\u0645\u0627\u062a", + "Tax Value": "\u0642\u064a\u0645\u0629 \u0627\u0644\u0636\u0631\u064a\u0628\u0629", + "Reward System Name": "\u0627\u0633\u0645 \u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629", + "Try Again": "\u062d\u0627\u0648\u0644 \u0645\u062c\u062f\u062f\u0627", + "Home": "\u0627\u0644\u0635\u0641\u062d\u0629 \u0627\u0644\u0631\u0626\u064a\u0633\u064a\u0629", + "Not Allowed Action": "\u0625\u062c\u0631\u0627\u0621 \u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0628\u0647", + "How to change database configuration": "\u0643\u064a\u0641\u064a\u0629 \u062a\u063a\u064a\u064a\u0631 \u062a\u0643\u0648\u064a\u0646 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", + "Common Database Issues": "\u0642\u0636\u0627\u064a\u0627 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0645\u0634\u062a\u0631\u0643\u0629", + "Setup": "\u0627\u0642\u0627\u0645\u0629", + "Method Not Allowed": "\u0637\u0631\u064a\u0642\u0629 \u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d\u0629", + "Documentation": "\u062a\u0648\u062b\u064a\u0642", + "Missing Dependency": "\u062a\u0628\u0639\u064a\u0629 \u0645\u0641\u0642\u0648\u062f\u0629", + "Continue": "\u064a\u0643\u0645\u0644", + "Module Version Mismatch": "\u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \u063a\u064a\u0631 \u0645\u062a\u0637\u0627\u0628\u0642", + "Access Denied": "\u062a\u0645 \u0627\u0644\u0631\u0641\u0636", + "Sign Up": "\u0627\u0634\u062a\u0631\u0627\u0643", + "An invalid date were provided. Make sure it a prior date to the actual server date.": "\u062a\u0645 \u062a\u0642\u062f\u064a\u0645 \u062a\u0627\u0631\u064a\u062e \u063a\u064a\u0631 \u0635\u0627\u0644\u062d. \u062a\u0623\u0643\u062f \u0645\u0646 \u0623\u0646\u0647 \u062a\u0627\u0631\u064a\u062e \u0633\u0627\u0628\u0642 \u0644\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u062e\u0627\u062f\u0645 \u0627\u0644\u0641\u0639\u0644\u064a.", + "Computing report from %s...": "\u062c\u0627\u0631\u064a \u062d\u0633\u0627\u0628 \u0627\u0644\u062a\u0642\u0631\u064a\u0631 \u0645\u0646%s ...", + "The operation was successful.": "\u0643\u0627\u0646\u062a \u0627\u0644\u0639\u0645\u0644\u064a\u0629 \u0646\u0627\u062c\u062d\u0629.", + "Unable to find a module having the identifier\/namespace \"%s\"": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0648\u062d\u062f\u0629 \u0646\u0645\u0637\u064a\u0629 \u0628\u0647\u0627 \u0627\u0644\u0645\u0639\u0631\u0641 \/ \u0645\u0633\u0627\u062d\u0629 \u0627\u0644\u0627\u0633\u0645 \"%s\"", + "What is the CRUD single resource name ? [Q] to quit.": "\u0645\u0627 \u0647\u0648 \u0627\u0633\u0645 \u0645\u0648\u0631\u062f \u0648\u0627\u062d\u062f CRUD\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.", + "Which table name should be used ? [Q] to quit.": "\u0645\u0627 \u0627\u0633\u0645 \u0627\u0644\u062c\u062f\u0648\u0644 \u0627\u0644\u0630\u064a \u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.", + "If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "\u0625\u0630\u0627 \u0643\u0627\u0646 \u0645\u0648\u0631\u062f CRUD \u0627\u0644\u062e\u0627\u0635 \u0628\u0643 \u0644\u0647 \u0639\u0644\u0627\u0642\u0629 \u060c \u0641\u0630\u0643\u0631\u0647 \u0639\u0644\u0649 \u0627\u0644\u0646\u062d\u0648 \u0627\u0644\u062a\u0627\u0644\u064a \"foreign_table\u060c foreign_key\u060c local_key \"\u061f [S] \u0644\u0644\u062a\u062e\u0637\u064a \u060c [\u0633] \u0644\u0644\u0625\u0646\u0647\u0627\u0621.", + "Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "\u0623\u0636\u0641 \u0639\u0644\u0627\u0642\u0629 \u062c\u062f\u064a\u062f\u0629\u061f \u0623\u0630\u0643\u0631\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0646\u062d\u0648 \u0627\u0644\u062a\u0627\u0644\u064a \"foreign_table\u060c foreign_key\u060c local_key \"\u061f [S] \u0644\u0644\u062a\u062e\u0637\u064a \u060c [\u0633] \u0644\u0644\u0625\u0646\u0647\u0627\u0621.", + "Not enough parameters provided for the relation.": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0645\u0639\u0644\u0645\u0627\u062a \u0643\u0627\u0641\u064a\u0629 \u0644\u0644\u0639\u0644\u0627\u0642\u0629.", + "The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0645\u0648\u0631\u062f CRUD \"%s\"\u0644\u0644\u0648\u062d\u062f\u0629 \"%s\"\u0641\u064a \"%s\"", + "The CRUD resource \"%s\" has been generated at %s": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0645\u0648\u0631\u062f CRUD \"%s\" \u0641\u064a%s", + "Localization for %s extracted to %s": "\u062a\u0645 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0627\u0644\u062a\u0631\u062c\u0645\u0629 \u0644\u0640%s \u0625\u0644\u0649%s", + "Unable to find the requested module.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629.", + "Version": "\u0625\u0635\u062f\u0627\u0631", + "Path": "\u0637\u0631\u064a\u0642", + "Index": "\u0641\u0647\u0631\u0633", + "Entry Class": "\u0641\u0626\u0629 \u0627\u0644\u062f\u062e\u0648\u0644", + "Routes": "\u0637\u0631\u0642", + "Api": "\u0623\u0628\u064a", + "Controllers": "\u062a\u062d\u0643\u0645", + "Views": "\u0627\u0644\u0622\u0631\u0627\u0621", + "Attribute": "\u064a\u0635\u0641", + "Namespace": "\u0645\u0633\u0627\u062d\u0629 \u0627\u0644\u0627\u0633\u0645", + "Author": "\u0645\u0624\u0644\u0641", + "There is no migrations to perform for the module \"%s\"": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0639\u0645\u0644\u064a\u0627\u062a \u062a\u0631\u062d\u064a\u0644 \u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \"%s\"", + "The module migration has successfully been performed for the module \"%s\"": "\u062a\u0645 \u062a\u0646\u0641\u064a\u0630 \u062a\u0631\u062d\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \u0628\u0646\u062c\u0627\u062d \u0644\u0644\u0648\u062d\u062f\u0629 \"%s\"", + "The product barcodes has been refreshed successfully.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0631\u0645\u0648\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a\u0629 \u0644\u0644\u0645\u0646\u062a\u062c \u0628\u0646\u062c\u0627\u062d.", + "The demo has been enabled.": "\u062a\u0645 \u062a\u0641\u0639\u064a\u0644 \u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u062a\u0648\u0636\u064a\u062d\u064a.", + "What is the store name ? [Q] to quit.": "\u0645\u0627 \u0647\u0648 \u0627\u0633\u0645 \u0627\u0644\u0645\u062a\u062c\u0631\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.", + "Please provide at least 6 characters for store name.": "\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 6 \u0623\u062d\u0631\u0641 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0644\u0627\u0633\u0645 \u0627\u0644\u0645\u062a\u062c\u0631.", + "What is the administrator password ? [Q] to quit.": "\u0645\u0627 \u0647\u064a \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0627\u0644\u0645\u0633\u0624\u0648\u0644\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.", + "Please provide at least 6 characters for the administrator password.": "\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 6 \u0623\u062d\u0631\u0641 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0644\u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0627\u0644\u0645\u0633\u0624\u0648\u0644.", + "What is the administrator email ? [Q] to quit.": "\u0645\u0627 \u0647\u0648 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0644\u0644\u0645\u0633\u0624\u0648\u0644\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.", + "Please provide a valid email for the administrator.": "\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0635\u0627\u0644\u062d \u0644\u0644\u0645\u0633\u0624\u0648\u0644.", + "What is the administrator username ? [Q] to quit.": "\u0645\u0627 \u0647\u0648 \u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0633\u0624\u0648\u0644\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.", + "Please provide at least 5 characters for the administrator username.": "\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 5 \u0623\u062d\u0631\u0641 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0644\u0627\u0633\u0645 \u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0633\u0624\u0648\u0644.", + "Downloading latest dev build...": "\u062c\u0627\u0631\u064d \u062a\u0646\u0632\u064a\u0644 \u0623\u062d\u062f\u062b \u0625\u0635\u062f\u0627\u0631 \u0645\u0646 \u0627\u0644\u062a\u0637\u0648\u064a\u0631 ...", + "Reset project to HEAD...": "\u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0645\u0634\u0631\u0648\u0639 \u0625\u0644\u0649 HEAD ...", + "Credit": "\u062a\u0646\u0633\u0628 \u0625\u0644\u064a\u0647", + "Debit": "\u0645\u062f\u064a\u0646", + "Coupons List": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0642\u0633\u0627\u0626\u0645", + "Display all coupons.": "\u0627\u0639\u0631\u0636 \u0643\u0644 \u0627\u0644\u0642\u0633\u0627\u0626\u0645.", + "No coupons has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0643\u0648\u0628\u0648\u0646\u0627\u062a", + "Add a new coupon": "\u0623\u0636\u0641 \u0642\u0633\u064a\u0645\u0629 \u062c\u062f\u064a\u062f\u0629", + "Create a new coupon": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0642\u0633\u064a\u0645\u0629 \u062c\u062f\u064a\u062f\u0629", + "Register a new coupon and save it.": "\u0633\u062c\u0644 \u0642\u0633\u064a\u0645\u0629 \u062c\u062f\u064a\u062f\u0629 \u0648\u0627\u062d\u0641\u0638\u0647\u0627.", + "Edit coupon": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0642\u0633\u064a\u0645\u0629", + "Modify Coupon.": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0642\u0633\u064a\u0645\u0629.", + "Return to Coupons": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0642\u0633\u0627\u0626\u0645", + "Might be used while printing the coupon.": "\u064a\u0645\u0643\u0646 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u0627 \u0623\u062b\u0646\u0627\u0621 \u0637\u0628\u0627\u0639\u0629 \u0627\u0644\u0642\u0633\u064a\u0645\u0629.", + "Define which type of discount apply to the current coupon.": "\u062d\u062f\u062f \u0646\u0648\u0639 \u0627\u0644\u062e\u0635\u0645 \u0627\u0644\u0630\u064a \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.", + "Discount Value": "\u0642\u064a\u0645\u0629 \u0627\u0644\u062e\u0635\u0645", + "Define the percentage or flat value.": "\u062d\u062f\u062f \u0627\u0644\u0646\u0633\u0628\u0629 \u0627\u0644\u0645\u0626\u0648\u064a\u0629 \u0623\u0648 \u0627\u0644\u0642\u064a\u0645\u0629 \u0627\u0644\u062b\u0627\u0628\u062a\u0629.", + "Valid Until": "\u0635\u0627\u0644\u062d \u062d\u062a\u0649", + "Minimum Cart Value": "\u0627\u0644\u062d\u062f \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0642\u064a\u0645\u0629 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642", + "What is the minimum value of the cart to make this coupon eligible.": "\u0645\u0627 \u0647\u0648 \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0642\u064a\u0645\u0629 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642 \u0644\u062c\u0639\u0644 \u0647\u0630\u0647 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0645\u0624\u0647\u0644\u0629.", + "Maximum Cart Value": "\u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0642\u064a\u0645\u0629 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642", + "Valid Hours Start": "\u062a\u0628\u062f\u0623 \u0627\u0644\u0633\u0627\u0639\u0627\u062a \u0627\u0644\u0635\u0627\u0644\u062d\u0629", + "Define form which hour during the day the coupons is valid.": "\u062d\u062f\u062f \u0634\u0643\u0644 \u0623\u064a \u0633\u0627\u0639\u0629 \u062e\u0644\u0627\u0644 \u0627\u0644\u064a\u0648\u0645 \u062a\u0643\u0648\u0646 \u0627\u0644\u0642\u0633\u0627\u0626\u0645 \u0635\u0627\u0644\u062d\u0629.", + "Valid Hours End": "\u0627\u0646\u062a\u0647\u0627\u0621 \u0627\u0644\u0633\u0627\u0639\u0627\u062a \u0627\u0644\u0635\u0627\u0644\u062d\u0629", + "Define to which hour during the day the coupons end stop valid.": "\u062d\u062f\u062f \u0625\u0644\u0649 \u0623\u064a \u0633\u0627\u0639\u0629 \u062e\u0644\u0627\u0644 \u0627\u0644\u064a\u0648\u0645 \u062a\u062a\u0648\u0642\u0641 \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0642\u0633\u0627\u0626\u0645.", + "Limit Usage": "\u062d\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645", + "Define how many time a coupons can be redeemed.": "\u062d\u062f\u062f \u0639\u062f\u062f \u0627\u0644\u0645\u0631\u0627\u062a \u0627\u0644\u062a\u064a \u064a\u0645\u0643\u0646 \u0641\u064a\u0647\u0627 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u0642\u0633\u0627\u0626\u0645.", + "Select Products": "\u062d\u062f\u062f \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a", + "The following products will be required to be present on the cart, in order for this coupon to be valid.": "\u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u062a\u0627\u0644\u064a\u0629 \u0645\u0648\u062c\u0648\u062f\u0629 \u0641\u064a \u0639\u0631\u0628\u0629 \u0627\u0644\u062a\u0633\u0648\u0642 \u060c \u062d\u062a\u0649 \u062a\u0643\u0648\u0646 \u0647\u0630\u0647 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0635\u0627\u0644\u062d\u0629.", + "Select Categories": "\u062d\u062f\u062f \u0627\u0644\u0641\u0626\u0627\u062a", + "The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.": "\u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u062e\u0635\u0635\u0629 \u0644\u0625\u062d\u062f\u0649 \u0647\u0630\u0647 \u0627\u0644\u0641\u0626\u0627\u062a \u0645\u0648\u062c\u0648\u062f\u0629 \u0641\u064a \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642 \u060c \u062d\u062a\u0649 \u062a\u0643\u0648\u0646 \u0647\u0630\u0647 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0635\u0627\u0644\u062d\u0629.", + "Created At": "\u0623\u0646\u0634\u0626\u062a \u0641\u064a", + "Undefined": "\u063a\u064a\u0631 \u0645\u0639\u0631\u0641", + "Delete a licence": "\u062d\u0630\u0641 \u062a\u0631\u062e\u064a\u0635", + "Customer Accounts List": "\u0642\u0627\u0626\u0645\u0629 \u062d\u0633\u0627\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Display all customer accounts.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u062d\u0633\u0627\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621.", + "No customer accounts has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u062d\u0633\u0627\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Add a new customer account": "\u0625\u0636\u0627\u0641\u0629 \u062d\u0633\u0627\u0628 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f", + "Create a new customer account": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f", + "Register a new customer account and save it.": "\u0633\u062c\u0644 \u062d\u0633\u0627\u0628 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.", + "Edit customer account": "\u062a\u062d\u0631\u064a\u0631 \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644", + "Modify Customer Account.": "\u062a\u0639\u062f\u064a\u0644 \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644.", + "Return to Customer Accounts": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u062d\u0633\u0627\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "This will be ignored.": "\u0633\u064a\u062a\u0645 \u062a\u062c\u0627\u0647\u0644 \u0647\u0630\u0627.", + "Define the amount of the transaction": "\u062d\u062f\u062f \u0645\u0628\u0644\u063a \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629", + "Deduct": "\u062e\u0635\u0645", + "Add": "\u064a\u0636\u064a\u0641", + "Define what operation will occurs on the customer account.": "\u062d\u062f\u062f \u0627\u0644\u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u062a\u064a \u0633\u062a\u062d\u062f\u062b \u0639\u0644\u0649 \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644.", + "Customer Coupons List": "\u0642\u0627\u0626\u0645\u0629 \u0642\u0633\u0627\u0626\u0645 \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Display all customer coupons.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0643\u0648\u0628\u0648\u0646\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621.", + "No customer coupons has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0642\u0633\u0627\u0626\u0645 \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Add a new customer coupon": "\u0623\u0636\u0641 \u0642\u0633\u064a\u0645\u0629 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f", + "Create a new customer coupon": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0642\u0633\u064a\u0645\u0629 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f", + "Register a new customer coupon and save it.": "\u0633\u062c\u0644 \u0642\u0633\u064a\u0645\u0629 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647\u0627.", + "Edit customer coupon": "\u062a\u062d\u0631\u064a\u0631 \u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0639\u0645\u064a\u0644", + "Modify Customer Coupon.": "\u062a\u0639\u062f\u064a\u0644 \u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0639\u0645\u064a\u0644.", + "Return to Customer Coupons": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0643\u0648\u0628\u0648\u0646\u0627\u062a \u0627\u0644\u0639\u0645\u064a\u0644", + "Define how many time the coupon has been used.": "\u062d\u062f\u062f \u0639\u062f\u062f \u0645\u0631\u0627\u062a \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0642\u0633\u064a\u0645\u0629.", + "Limit": "\u062d\u062f", + "Define the maximum usage possible for this coupon.": "\u062d\u062f\u062f \u0623\u0642\u0635\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0645\u0645\u0643\u0646 \u0644\u0647\u0630\u0647 \u0627\u0644\u0642\u0633\u064a\u0645\u0629.", + "Code": "\u0627\u0644\u0634\u0641\u0631\u0629", + "Customers List": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Display all customers.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0639\u0645\u0644\u0627\u0621.", + "No customers has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0639\u0645\u0644\u0627\u0621", + "Add a new customer": "\u0625\u0636\u0627\u0641\u0629 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f", + "Create a new customer": "\u0623\u0646\u0634\u0626 \u0639\u0645\u064a\u0644\u0627\u064b \u062c\u062f\u064a\u062f\u064b\u0627", + "Register a new customer and save it.": "\u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.", + "Edit customer": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0639\u0645\u064a\u0644", + "Modify Customer.": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0639\u0645\u064a\u0644.", + "Return to Customers": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0644\u0644\u0639\u0645\u0644\u0627\u0621", + "Provide a unique name for the customer.": "\u0623\u062f\u062e\u0644 \u0627\u0633\u0645\u064b\u0627 \u0641\u0631\u064a\u062f\u064b\u0627 \u0644\u0644\u0639\u0645\u064a\u0644.", + "Group": "\u0645\u062c\u0645\u0648\u0639\u0629", + "Assign the customer to a group": "\u0642\u0645 \u0628\u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0639\u0645\u064a\u0644 \u0644\u0645\u062c\u0645\u0648\u0639\u0629", + "Phone Number": "\u0631\u0642\u0645 \u0627\u0644\u0647\u0627\u062a\u0641", + "Provide the customer phone number": "\u0623\u062f\u062e\u0644 \u0631\u0642\u0645 \u0647\u0627\u062a\u0641 \u0627\u0644\u0639\u0645\u064a\u0644", + "PO Box": "\u0635\u0646\u062f\u0648\u0642 \u0628\u0631\u064a\u062f", + "Provide the customer PO.Box": "\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0635\u0646\u062f\u0648\u0642 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u062e\u0627\u0635 \u0628\u0627\u0644\u0639\u0645\u064a\u0644", + "Not Defined": "\u063a\u064a\u0631 \u0645\u0639\u0631\u0641", + "Male": "\u0630\u0643\u0631", + "Female": "\u0623\u0646\u062b\u0649", + "Gender": "\u062c\u0646\u0633 \u062a\u0630\u0643\u064a\u0631 \u0623\u0648 \u062a\u0623\u0646\u064a\u062b", + "Billing Address": "\u0639\u0646\u0648\u0627\u0646 \u0648\u0635\u0648\u0644 \u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631", + "Billing phone number.": "\u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631 \u0631\u0642\u0645 \u0627\u0644\u0647\u0627\u062a\u0641.", + "Address 1": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 1", + "Billing First Address.": "\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629 \u0627\u0644\u0623\u0648\u0644.", + "Address 2": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 2", + "Billing Second Address.": "\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629 \u0627\u0644\u062b\u0627\u0646\u064a.", + "Country": "\u062f\u0648\u0644\u0629", + "Billing Country.": "\u0628\u0644\u062f \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631.", + "Postal Address": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0628\u0631\u064a\u062f\u064a", + "Company": "\u0634\u0631\u0643\u0629", + "Shipping Address": "\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0634\u062d\u0646", + "Shipping phone number.": "\u0631\u0642\u0645 \u0647\u0627\u062a\u0641 \u0627\u0644\u0634\u062d\u0646.", + "Shipping First Address.": "\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0634\u062d\u0646 \u0627\u0644\u0623\u0648\u0644.", + "Shipping Second Address.": "\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0634\u062d\u0646 \u0627\u0644\u062b\u0627\u0646\u064a.", + "Shipping Country.": "\u0628\u0644\u062f \u0627\u0644\u0634\u062d\u0646.", + "Account Credit": "\u0627\u0626\u062a\u0645\u0627\u0646 \u0627\u0644\u062d\u0633\u0627\u0628", + "Owed Amount": "\u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0645\u0645\u0644\u0648\u0643", + "Purchase Amount": "\u0645\u0628\u0644\u063a \u0627\u0644\u0634\u0631\u0627\u0621", + "Delete a customers": "\u062d\u0630\u0641 \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Delete Selected Customers": "\u062d\u0630\u0641 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u0645\u062d\u062f\u062f\u064a\u0646", + "Customer Groups List": "\u0642\u0627\u0626\u0645\u0629 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Display all Customers Groups.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621.", + "No Customers Groups has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0639\u0645\u0644\u0627\u0621", + "Add a new Customers Group": "\u0625\u0636\u0627\u0641\u0629 \u0645\u062c\u0645\u0648\u0639\u0629 \u0639\u0645\u0644\u0627\u0621 \u062c\u062f\u064a\u062f\u0629", + "Create a new Customers Group": "\u0623\u0646\u0634\u0626 \u0645\u062c\u0645\u0648\u0639\u0629 \u0639\u0645\u0644\u0627\u0621 \u062c\u062f\u064a\u062f\u0629", + "Register a new Customers Group and save it.": "\u0633\u062c\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0639\u0645\u0644\u0627\u0621 \u062c\u062f\u064a\u062f\u0629 \u0648\u0627\u062d\u0641\u0638\u0647\u0627.", + "Edit Customers Group": "\u062a\u062d\u0631\u064a\u0631 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Modify Customers group.": "\u062a\u0639\u062f\u064a\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621.", + "Return to Customers Groups": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Reward System": "\u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a", + "Select which Reward system applies to the group": "\u062d\u062f\u062f \u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a \u0627\u0644\u0630\u064a \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629", + "Minimum Credit Amount": "\u0627\u0644\u062d\u062f \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646", + "A brief description about what this group is about": "\u0648\u0635\u0641 \u0645\u0648\u062c\u0632 \u0644\u0645\u0627 \u062a\u062f\u0648\u0631 \u062d\u0648\u0644\u0647 \u0647\u0630\u0647 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629", + "Created On": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0639\u0644\u0649", + "Customer Orders List": "\u0642\u0627\u0626\u0645\u0629 \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Display all customer orders.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621.", + "No customer orders has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Add a new customer order": "\u0623\u0636\u0641 \u0637\u0644\u0628 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f", + "Create a new customer order": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0637\u0644\u0628 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f", + "Register a new customer order and save it.": "\u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0637\u0644\u0628 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.", + "Edit customer order": "\u062a\u062d\u0631\u064a\u0631 \u0637\u0644\u0628 \u0627\u0644\u0639\u0645\u064a\u0644", + "Modify Customer Order.": "\u062a\u0639\u062f\u064a\u0644 \u0637\u0644\u0628 \u0627\u0644\u0639\u0645\u064a\u0644.", + "Return to Customer Orders": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Created at": "\u0623\u0646\u0634\u0626\u062a \u0641\u064a", + "Customer Id": "\u0647\u0648\u064a\u0629 \u0627\u0644\u0632\u0628\u0648\u0646", + "Discount Percentage": "\u0646\u0633\u0628\u0629 \u0627\u0644\u062e\u0635\u0645", + "Discount Type": "\u0646\u0648\u0639 \u0627\u0644\u062e\u0635\u0645", + "Final Payment Date": "\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0646\u0647\u0627\u0626\u064a", + "Id": "\u0647\u0648\u064a\u0629 \u0634\u062e\u0635\u064a\u0629", + "Process Status": "\u062d\u0627\u0644\u0629 \u0627\u0644\u0639\u0645\u0644\u064a\u0629", + "Shipping Rate": "\u0633\u0639\u0631 \u0627\u0644\u0634\u062d\u0646", + "Shipping Type": "\u0646\u0648\u0639 \u0627\u0644\u0634\u062d\u0646", + "Title": "\u0639\u0646\u0648\u0627\u0646", + "Total installments": "\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0623\u0642\u0633\u0627\u0637", + "Updated at": "\u062a\u0645 \u0627\u0644\u062a\u062d\u062f\u064a\u062b \u0641\u064a", + "Uuid": "Uuid", + "Voidance Reason": "\u0633\u0628\u0628 \u0627\u0644\u0625\u0628\u0637\u0627\u0644", + "Customer Rewards List": "\u0642\u0627\u0626\u0645\u0629 \u0645\u0643\u0627\u0641\u0622\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Display all customer rewards.": "\u0627\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0645\u0643\u0627\u0641\u0622\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621.", + "No customer rewards has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0645\u0643\u0627\u0641\u0622\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Add a new customer reward": "\u0623\u0636\u0641 \u0645\u0643\u0627\u0641\u0623\u0629 \u062c\u062f\u064a\u062f\u0629 \u0644\u0644\u0639\u0645\u064a\u0644", + "Create a new customer reward": "\u0623\u0646\u0634\u0626 \u0645\u0643\u0627\u0641\u0623\u0629 \u062c\u062f\u064a\u062f\u0629 \u0644\u0644\u0639\u0645\u064a\u0644", + "Register a new customer reward and save it.": "\u0633\u062c\u0644 \u0645\u0643\u0627\u0641\u0623\u0629 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647\u0627.", + "Edit customer reward": "\u062a\u062d\u0631\u064a\u0631 \u0645\u0643\u0627\u0641\u0623\u0629 \u0627\u0644\u0639\u0645\u064a\u0644", + "Modify Customer Reward.": "\u062a\u0639\u062f\u064a\u0644 \u0645\u0643\u0627\u0641\u0623\u0629 \u0627\u0644\u0639\u0645\u064a\u0644.", + "Return to Customer Rewards": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u0643\u0627\u0641\u0622\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Reward Name": "\u0627\u0633\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629", + "Last Update": "\u0627\u062e\u0631 \u062a\u062d\u062f\u064a\u062b", + "All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.": "\u062c\u0645\u064a\u0639 \u0627\u0644\u0643\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0645\u0631\u062a\u0628\u0637\u0629 \u0628\u0647\u0630\u0647 \u0627\u0644\u0641\u0626\u0629 \u0633\u062a\u0646\u062a\u062c \u0625\u0645\u0627 \"credit\" or \"debit\" to the cash flow history.", + "Account": "\u062d\u0633\u0627\u0628", + "Provide the accounting number for this category.": "\u0623\u062f\u062e\u0644 \u0631\u0642\u0645 \u0627\u0644\u0645\u062d\u0627\u0633\u0628\u0629 \u0644\u0647\u0630\u0647 \u0627\u0644\u0641\u0626\u0629.", + "Active": "\u0646\u0634\u064a\u0637", + "Users Group": "\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646", + "None": "\u0644\u0627 \u0623\u062d\u062f", + "Recurring": "\u064a\u062a\u0643\u0631\u0631", + "Start of Month": "\u0628\u062f\u0627\u064a\u0629 \u0627\u0644\u0634\u0647\u0631", + "Mid of Month": "\u0645\u0646\u062a\u0635\u0641 \u0627\u0644\u0634\u0647\u0631", + "End of Month": "\u0646\u0647\u0627\u064a\u0629 \u0627\u0644\u0634\u0647\u0631", + "X days Before Month Ends": "X \u064a\u0648\u0645 \u0642\u0628\u0644 \u0646\u0647\u0627\u064a\u0629 \u0627\u0644\u0634\u0647\u0631", + "X days After Month Starts": "X \u064a\u0648\u0645 \u0628\u0639\u062f \u0628\u062f\u0627\u064a\u0629 \u0627\u0644\u0634\u0647\u0631", + "Occurrence": "\u062d\u0627\u062f\u062b\u0629", + "Occurrence Value": "\u0642\u064a\u0645\u0629 \u0627\u0644\u062d\u062f\u0648\u062b", + "Must be used in case of X days after month starts and X days before month ends.": "\u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647 \u0641\u064a \u062d\u0627\u0644\u0629 X \u064a\u0648\u0645\u064b\u0627 \u0628\u0639\u062f \u0628\u062f\u0627\u064a\u0629 \u0627\u0644\u0634\u0647\u0631 \u0648 X \u064a\u0648\u0645\u064b\u0627 \u0642\u0628\u0644 \u0646\u0647\u0627\u064a\u0629 \u0627\u0644\u0634\u0647\u0631.", + "Category": "\u0641\u0626\u0629", + "Month Starts": "\u064a\u0628\u062f\u0623 \u0627\u0644\u0634\u0647\u0631", + "Month Middle": "\u0645\u0646\u062a\u0635\u0641 \u0627\u0644\u0634\u0647\u0631", + "Month Ends": "\u064a\u0646\u062a\u0647\u064a \u0627\u0644\u0634\u0647\u0631", + "X Days Before Month Ends": "X \u064a\u0648\u0645 \u0642\u0628\u0644 \u0646\u0647\u0627\u064a\u0629 \u0627\u0644\u0634\u0647\u0631", + "Hold Orders List": "\u0642\u0627\u0626\u0645\u0629 \u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631", + "Display all hold orders.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u062d\u062c\u0632.", + "No hold orders has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u062d\u062c\u0632", + "Add a new hold order": "\u0623\u0636\u0641 \u0623\u0645\u0631 \u062d\u062c\u0632 \u062c\u062f\u064a\u062f", + "Create a new hold order": "\u0625\u0646\u0634\u0627\u0621 \u0623\u0645\u0631 \u062d\u062c\u0632 \u062c\u062f\u064a\u062f", + "Register a new hold order and save it.": "\u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0623\u0645\u0631 \u062a\u0639\u0644\u064a\u0642 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.", + "Edit hold order": "\u062a\u062d\u0631\u064a\u0631 \u0623\u0645\u0631 \u0627\u0644\u062d\u062c\u0632", + "Modify Hold Order.": "\u062a\u0639\u062f\u064a\u0644 \u0623\u0645\u0631 \u0627\u0644\u062d\u062c\u0632.", + "Return to Hold Orders": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u062d\u062c\u0632", + "Updated At": "\u062a\u0645 \u0627\u0644\u062a\u062d\u062f\u064a\u062b \u0641\u064a", + "Restrict the orders by the creation date.": "\u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0628\u062d\u0644\u0648\u0644 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0625\u0646\u0634\u0627\u0621.", + "Created Between": "\u062e\u0644\u0642\u062a \u0628\u064a\u0646", + "Restrict the orders by the payment status.": "\u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0645\u0646 \u062e\u0644\u0627\u0644 \u062d\u0627\u0644\u0629 \u0627\u0644\u062f\u0641\u0639.", + "Voided": "\u0628\u0627\u0637\u0644", + "Due With Payment": "\u0645\u0633\u062a\u062d\u0642 \u0627\u0644\u062f\u0641\u0639", + "Restrict the orders by the author.": "\u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0624\u0644\u0641.", + "Restrict the orders by the customer.": "\u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0639\u0645\u064a\u0644.", + "Customer Phone": "\u0647\u0627\u062a\u0641 \u0627\u0644\u0639\u0645\u064a\u0644", + "Restrict orders using the customer phone number.": "\u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0631\u0642\u0645 \u0647\u0627\u062a\u0641 \u0627\u0644\u0639\u0645\u064a\u0644.", + "Restrict the orders to the cash registers.": "\u062d\u0635\u0631 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0641\u064a \u0623\u062c\u0647\u0632\u0629 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u0646\u0642\u062f.", + "Orders List": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0637\u0644\u0628\u0627\u062a", + "Display all orders.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0637\u0644\u0628\u0627\u062a.", + "No orders has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0623\u0648\u0627\u0645\u0631", + "Add a new order": "\u0623\u0636\u0641 \u0637\u0644\u0628\u064b\u0627 \u062c\u062f\u064a\u062f\u064b\u0627", + "Create a new order": "\u0623\u0646\u0634\u0626 \u0637\u0644\u0628\u064b\u0627 \u062c\u062f\u064a\u062f\u064b\u0627", + "Register a new order and save it.": "\u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0637\u0644\u0628 \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.", + "Edit order": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0623\u0645\u0631", + "Modify Order.": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u062a\u0631\u062a\u064a\u0628.", + "Return to Orders": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0637\u0644\u0628\u0627\u062a", + "Discount Rate": "\u0645\u0639\u062f\u0644 \u0627\u0644\u062e\u0635\u0645", + "The order and the attached products has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0637\u0644\u0628 \u0648\u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0631\u0641\u0642\u0629.", + "Invoice": "\u0641\u0627\u062a\u0648\u0631\u0629", + "Receipt": "\u0625\u064a\u0635\u0627\u0644", + "Refund Receipt": "\u0625\u064a\u0635\u0627\u0644 \u0627\u0644\u0627\u0633\u062a\u0631\u062f\u0627\u062f", + "Order Instalments List": "\u0642\u0627\u0626\u0645\u0629 \u0623\u0642\u0633\u0627\u0637 \u0627\u0644\u0646\u0638\u0627\u0645", + "Display all Order Instalments.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0623\u0642\u0633\u0627\u0637 \u0627\u0644\u0637\u0644\u0628.", + "No Order Instalment has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0623\u0642\u0633\u0627\u0637 \u0644\u0644\u0637\u0644\u0628", + "Add a new Order Instalment": "\u0623\u0636\u0641 \u062a\u0642\u0633\u064a\u0637 \u0623\u0645\u0631 \u062c\u062f\u064a\u062f", + "Create a new Order Instalment": "\u0625\u0646\u0634\u0627\u0621 \u062a\u0642\u0633\u064a\u0637 \u0623\u0645\u0631 \u062c\u062f\u064a\u062f", + "Register a new Order Instalment and save it.": "\u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0637\u0644\u0628 \u062c\u062f\u064a\u062f \u0628\u0627\u0644\u062a\u0642\u0633\u064a\u0637 \u0648\u062d\u0641\u0638\u0647.", + "Edit Order Instalment": "\u062a\u062d\u0631\u064a\u0631 \u062a\u0642\u0633\u064a\u0637 \u0627\u0644\u0637\u0644\u0628", + "Modify Order Instalment.": "\u062a\u0639\u062f\u064a\u0644 \u062a\u0642\u0633\u064a\u0637 \u0627\u0644\u0637\u0644\u0628.", + "Return to Order Instalment": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u062a\u0642\u0633\u064a\u0637 \u0627\u0644\u0637\u0644\u0628", + "Order Id": "\u0631\u0642\u0645 \u0627\u0644\u062a\u0639\u0631\u064a\u0641 \u0627\u0644\u062e\u0627\u0635 \u0628\u0627\u0644\u0637\u0644\u0628", + "Payment Types List": "\u0642\u0627\u0626\u0645\u0629 \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u062f\u0641\u0639", + "Display all payment types.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u062f\u0641\u0639.", + "No payment types has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0623\u0646\u0648\u0627\u0639 \u062f\u0641\u0639", + "Add a new payment type": "\u0623\u0636\u0641 \u0646\u0648\u0639 \u062f\u0641\u0639 \u062c\u062f\u064a\u062f", + "Create a new payment type": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0646\u0648\u0639 \u062f\u0641\u0639 \u062c\u062f\u064a\u062f", + "Register a new payment type and save it.": "\u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0646\u0648\u0639 \u062f\u0641\u0639 \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.", + "Edit payment type": "\u062a\u062d\u0631\u064a\u0631 \u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639", + "Modify Payment Type.": "\u062a\u0639\u062f\u064a\u0644 \u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639.", + "Return to Payment Types": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u062f\u0641\u0639", + "Label": "\u0645\u0644\u0635\u0642", + "Provide a label to the resource.": "\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u062a\u0633\u0645\u064a\u0629 \u0644\u0644\u0645\u0648\u0631\u062f.", + "Identifier": "\u0627\u0644\u0645\u0639\u0631\u0641", + "A payment type having the same identifier already exists.": "\u064a\u0648\u062c\u062f \u0646\u0648\u0639 \u062f\u0641\u0639 \u0644\u0647 \u0646\u0641\u0633 \u0627\u0644\u0645\u0639\u0631\u0641 \u0628\u0627\u0644\u0641\u0639\u0644.", + "Unable to delete a read-only payments type.": "\u062a\u0639\u0630\u0631 \u062d\u0630\u0641 \u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639 \u0644\u0644\u0642\u0631\u0627\u0621\u0629 \u0641\u0642\u0637.", + "Readonly": "\u064a\u0642\u0631\u0623 \u0641\u0642\u0637", + "Procurements List": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Display all procurements.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.", + "No procurements has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Add a new procurement": "\u0625\u0636\u0627\u0641\u0629 \u0639\u0645\u0644\u064a\u0629 \u0634\u0631\u0627\u0621 \u062c\u062f\u064a\u062f\u0629", + "Create a new procurement": "\u0625\u0646\u0634\u0627\u0621 \u0639\u0645\u0644\u064a\u0629 \u0634\u0631\u0627\u0621 \u062c\u062f\u064a\u062f\u0629", + "Register a new procurement and save it.": "\u062a\u0633\u062c\u064a\u0644 \u0645\u0634\u062a\u0631\u064a\u0627\u062a \u062c\u062f\u064a\u062f\u0629 \u0648\u062d\u0641\u0638\u0647\u0627.", + "Edit procurement": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Modify Procurement.": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.", + "Return to Procurements": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Provider Id": "\u0645\u0639\u0631\u0651\u0641 \u0627\u0644\u0645\u0648\u0641\u0631", + "Total Items": "\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0639\u0646\u0627\u0635\u0631", + "Provider": "\u0645\u0632\u0648\u062f", + "Procurement Products List": "\u0642\u0627\u0626\u0645\u0629 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Display all procurement products.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.", + "No procurement products has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u0646\u062a\u062c\u0627\u062a \u0634\u0631\u0627\u0621", + "Add a new procurement product": "\u0623\u0636\u0641 \u0645\u0646\u062a\u062c \u062a\u062f\u0628\u064a\u0631 \u062c\u062f\u064a\u062f", + "Create a new procurement product": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0646\u062a\u062c \u062a\u062f\u0628\u064a\u0631 \u062c\u062f\u064a\u062f", + "Register a new procurement product and save it.": "\u062a\u0633\u062c\u064a\u0644 \u0645\u0646\u062a\u062c \u0634\u0631\u0627\u0621 \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.", + "Edit procurement product": "\u062a\u062d\u0631\u064a\u0631 \u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Modify Procurement Product.": "\u062a\u0639\u062f\u064a\u0644 \u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.", + "Return to Procurement Products": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a", + "Define what is the expiration date of the product.": "\u062d\u062f\u062f \u0645\u0627 \u0647\u0648 \u062a\u0627\u0631\u064a\u062e \u0627\u0646\u062a\u0647\u0627\u0621 \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.", + "On": "\u062a\u0634\u063a\u064a\u0644", + "Category Products List": "\u0642\u0627\u0626\u0645\u0629 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0641\u0626\u0629", + "Display all category products.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0641\u0626\u0627\u062a.", + "No category products has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0645\u0646\u062a\u062c\u0627\u062a \u0641\u0626\u0629", + "Add a new category product": "\u0623\u0636\u0641 \u0645\u0646\u062a\u062c \u0641\u0626\u0629 \u062c\u062f\u064a\u062f", + "Create a new category product": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0646\u062a\u062c \u0641\u0626\u0629 \u062c\u062f\u064a\u062f", + "Register a new category product and save it.": "\u0633\u062c\u0644 \u0645\u0646\u062a\u062c \u0641\u0626\u0629 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.", + "Edit category product": "\u062a\u062d\u0631\u064a\u0631 \u0641\u0626\u0629 \u0627\u0644\u0645\u0646\u062a\u062c", + "Modify Category Product.": "\u062a\u0639\u062f\u064a\u0644 \u0641\u0626\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.", + "Return to Category Products": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0641\u0626\u0629 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a", + "No Parent": "\u0644\u0627 \u064a\u0648\u062c\u062f \u0623\u0635\u0644", + "Preview": "\u0645\u0639\u0627\u064a\u0646\u0629", + "Provide a preview url to the category.": "\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0645\u0639\u0627\u064a\u0646\u0629 \u0644\u0644\u0641\u0626\u0629.", + "Displays On POS": "\u064a\u0639\u0631\u0636 \u0641\u064a \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639", + "Parent": "\u0627\u0644\u0623\u0628\u0648\u064a\u0646", + "If this category should be a child category of an existing category": "\u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0647\u0630\u0647 \u0627\u0644\u0641\u0626\u0629 \u0641\u0626\u0629 \u0641\u0631\u0639\u064a\u0629 \u0645\u0646 \u0641\u0626\u0629 \u0645\u0648\u062c\u0648\u062f\u0629", + "Total Products": "\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a", + "Products List": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a", + "Display all products.": "\u0639\u0631\u0636 \u0643\u0644 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a.", + "No products has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u0646\u062a\u062c\u0627\u062a", + "Add a new product": "\u0623\u0636\u0641 \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f", + "Create a new product": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f", + "Register a new product and save it.": "\u062a\u0633\u062c\u064a\u0644 \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.", + "Edit product": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0645\u0646\u062a\u062c", + "Modify Product.": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u0646\u062a\u062c.", + "Return to Products": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a", + "Assigned Unit": "\u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u062e\u0635\u0635\u0629", + "The assigned unit for sale": "\u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u062e\u0635\u0635\u0629 \u0644\u0644\u0628\u064a\u0639", + "Define the regular selling price.": "\u062a\u062d\u062f\u064a\u062f \u0633\u0639\u0631 \u0627\u0644\u0628\u064a\u0639 \u0627\u0644\u0639\u0627\u062f\u064a.", + "Define the wholesale price.": "\u062a\u062d\u062f\u064a\u062f \u0633\u0639\u0631 \u0627\u0644\u062c\u0645\u0644\u0629.", + "Preview Url": "\u0645\u0639\u0627\u064a\u0646\u0629 \u0639\u0646\u0648\u0627\u0646 Url", + "Provide the preview of the current unit.": "\u0642\u062f\u0645 \u0645\u0639\u0627\u064a\u0646\u0629 \u0644\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.", + "Identification": "\u0647\u0648\u064a\u0629", + "Define the barcode value. Focus the cursor here before scanning the product.": "\u062d\u062f\u062f \u0642\u064a\u0645\u0629 \u0627\u0644\u0628\u0627\u0631\u0643\u0648\u062f. \u0631\u0643\u0632 \u0627\u0644\u0645\u0624\u0634\u0631 \u0647\u0646\u0627 \u0642\u0628\u0644 \u0645\u0633\u062d \u0627\u0644\u0645\u0646\u062a\u062c.", + "Define the barcode type scanned.": "\u062a\u062d\u062f\u064a\u062f \u0646\u0648\u0639 \u0627\u0644\u0628\u0627\u0631\u0643\u0648\u062f \u0627\u0644\u0645\u0645\u0633\u0648\u062d.", + "EAN 8": "\u0631\u0642\u0645 EAN 8", + "EAN 13": "\u0631\u0642\u0645 EAN 13", + "Codabar": "\u0643\u0648\u062f\u0627\u0628\u0627\u0631", + "Code 128": "\u0627\u0644\u0631\u0645\u0632 128", + "Code 39": "\u0627\u0644\u0631\u0645\u0632 39", + "Code 11": "\u0627\u0644\u0631\u0645\u0632 11", + "UPC A": "\u0627\u062a\u062d\u0627\u062f \u0627\u0644\u0648\u0637\u0646\u064a\u064a\u0646 \u0627\u0644\u0643\u0648\u0646\u063a\u0648\u0644\u064a\u064a\u0646 \u0623", + "UPC E": "\u0627\u062a\u062d\u0627\u062f \u0627\u0644\u0648\u0637\u0646\u064a\u064a\u0646 \u0627\u0644\u0643\u0648\u0646\u063a\u0648\u0644\u064a\u064a\u0646 E", + "Barcode Type": "\u0646\u0648\u0639 \u0627\u0644\u0628\u0627\u0631\u0643\u0648\u062f", + "Select to which category the item is assigned.": "\u062d\u062f\u062f \u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u062a\u064a \u062a\u0645 \u062a\u062e\u0635\u064a\u0635 \u0627\u0644\u0639\u0646\u0635\u0631 \u0625\u0644\u064a\u0647\u0627.", + "Materialized Product": "\u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0627\u062f\u064a", + "Dematerialized Product": "\u0627\u0644\u0645\u0646\u062a\u062c \u063a\u064a\u0631 \u0627\u0644\u0645\u0627\u062f\u064a", + "Define the product type. Applies to all variations.": "\u062d\u062f\u062f \u0646\u0648\u0639 \u0627\u0644\u0645\u0646\u062a\u062c. \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u062c\u0645\u064a\u0639 \u0627\u0644\u0627\u062e\u062a\u0644\u0627\u0641\u0627\u062a.", + "Product Type": "\u0646\u0648\u0639 \u0627\u0644\u0645\u0646\u062a\u062c", + "Define a unique SKU value for the product.": "\u062d\u062f\u062f \u0642\u064a\u0645\u0629 SKU \u0641\u0631\u064a\u062f\u0629 \u0644\u0644\u0645\u0646\u062a\u062c.", + "On Sale": "\u0644\u0644\u0628\u064a\u0639", + "Hidden": "\u0645\u062e\u062a\u0641\u064a", + "Define whether the product is available for sale.": "\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0627\u0644\u0645\u0646\u062a\u062c \u0645\u062a\u0627\u062d\u064b\u0627 \u0644\u0644\u0628\u064a\u0639.", + "Enable the stock management on the product. Will not work for service or uncountable products.": "\u062a\u0645\u0643\u064a\u0646 \u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c. \u0644\u0646 \u062a\u0639\u0645\u0644 \u0644\u0644\u062e\u062f\u0645\u0629 \u0623\u0648 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u062a\u064a \u0644\u0627 \u062a\u0639\u062f \u0648\u0644\u0627 \u062a\u062d\u0635\u0649.", + "Stock Management Enabled": "\u062a\u0645\u0643\u064a\u0646 \u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0645\u062e\u0632\u0648\u0646", + "Units": "\u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "Accurate Tracking": "\u062a\u062a\u0628\u0639 \u062f\u0642\u064a\u0642", + "What unit group applies to the actual item. This group will apply during the procurement.": "\u0645\u0627 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a \u0627\u0644\u062a\u064a \u062a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0641\u0639\u0644\u064a. \u0633\u064a\u062a\u0645 \u062a\u0637\u0628\u064a\u0642 \u0647\u0630\u0647 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0623\u062b\u0646\u0627\u0621 \u0627\u0644\u0634\u0631\u0627\u0621.", + "Unit Group": "\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0629", + "Determine the unit for sale.": "\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0648\u062d\u062f\u0629 \u0644\u0644\u0628\u064a\u0639.", + "Selling Unit": "\u0648\u062d\u062f\u0629 \u0627\u0644\u0628\u064a\u0639", + "Expiry": "\u0627\u0646\u0642\u0636\u0627\u0621", + "Product Expires": "\u0627\u0646\u062a\u0647\u0627\u0621 \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0645\u0646\u062a\u062c", + "Set to \"No\" expiration time will be ignored.": "\u062a\u0639\u064a\u064a\u0646 \u0625\u0644\u0649 \"\u0644\u0627\" \u0633\u064a\u062a\u0645 \u062a\u062c\u0627\u0647\u0644 \u0648\u0642\u062a \u0627\u0646\u062a\u0647\u0627\u0621 \u0627\u0644\u0635\u0644\u0627\u062d\u064a\u0629.", + "Prevent Sales": "\u0645\u0646\u0639 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a", + "Allow Sales": "\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a", + "Determine the action taken while a product has expired.": "\u062d\u062f\u062f \u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u0630\u064a \u062a\u0645 \u0627\u062a\u062e\u0627\u0630\u0647 \u0623\u062b\u0646\u0627\u0621 \u0627\u0646\u062a\u0647\u0627\u0621 \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.", + "On Expiration": "\u0639\u0646\u062f \u0627\u0646\u062a\u0647\u0627\u0621 \u0627\u0644\u0635\u0644\u0627\u062d\u064a\u0629", + "Select the tax group that applies to the product\/variation.": "\u062d\u062f\u062f \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u062a\u064a \u062a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c \/ \u0627\u0644\u062a\u0628\u0627\u064a\u0646.", + "Define what is the type of the tax.": "\u062a\u062d\u062f\u064a\u062f \u0646\u0648\u0639 \u0627\u0644\u0636\u0631\u064a\u0628\u0629.", + "Images": "\u0627\u0644\u0635\u0648\u0631", + "Image": "\u0635\u0648\u0631\u0629", + "Choose an image to add on the product gallery": "\u0627\u062e\u062a\u0631 \u0635\u0648\u0631\u0629 \u0644\u0625\u0636\u0627\u0641\u062a\u0647\u0627 \u0625\u0644\u0649 \u0645\u0639\u0631\u0636 \u0627\u0644\u0645\u0646\u062a\u062c", + "Is Primary": "\u0623\u0633\u0627\u0633\u064a", + "Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.": "\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0627\u0644\u0635\u0648\u0631\u0629 \u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0623\u0648\u0644\u064a\u0629. \u0625\u0630\u0627 \u0643\u0627\u0646 \u0647\u0646\u0627\u0643 \u0623\u0643\u062b\u0631 \u0645\u0646 \u0635\u0648\u0631\u0629 \u0623\u0633\u0627\u0633\u064a\u0629 \u0648\u0627\u062d\u062f\u0629 \u060c \u0641\u0633\u064a\u062a\u0645 \u0627\u062e\u062a\u064a\u0627\u0631 \u0635\u0648\u0631\u0629 \u0644\u0643.", + "Sku": "SKU", + "Materialized": "\u062a\u062a\u062d\u0642\u0642", + "Dematerialized": "\u063a\u064a\u0631 \u0645\u0627\u062f\u064a", + "Available": "\u0645\u062a\u0648\u0641\u0631\u0629", + "See Quantities": "\u0627\u0646\u0638\u0631 \u0627\u0644\u0643\u0645\u064a\u0627\u062a", + "See History": "\u0627\u0646\u0638\u0631 \u0627\u0644\u062a\u0627\u0631\u064a\u062e", + "Would you like to delete selected entries ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0627\u0644\u0645\u062f\u062e\u0644\u0627\u062a \u0627\u0644\u0645\u062e\u062a\u0627\u0631\u0629\u061f", + "Product Histories": "\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0645\u0646\u062a\u062c", + "Display all product histories.": "\u0639\u0631\u0636 \u0643\u0644 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0645\u0646\u062a\u062c.", + "No product histories has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u062a\u0627\u0631\u064a\u062e \u0645\u0646\u062a\u062c", + "Add a new product history": "\u0623\u0636\u0641 \u062a\u0627\u0631\u064a\u062e \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f", + "Create a new product history": "\u0625\u0646\u0634\u0627\u0621 \u062a\u0627\u0631\u064a\u062e \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f", + "Register a new product history and save it.": "\u0633\u062c\u0644 \u062a\u0627\u0631\u064a\u062e \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.", + "Edit product history": "\u062a\u062d\u0631\u064a\u0631 \u0645\u062d\u0641\u0648\u0638\u0627\u062a \u0627\u0644\u0645\u0646\u062a\u062c", + "Modify Product History.": "\u062a\u0639\u062f\u064a\u0644 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0645\u0646\u062a\u062c.", + "Return to Product Histories": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0645\u0646\u062a\u062c", + "After Quantity": "\u0628\u0639\u062f \u0627\u0644\u0643\u0645\u064a\u0629", + "Before Quantity": "\u0642\u0628\u0644 \u0627\u0644\u0643\u0645\u064a\u0629", + "Operation Type": "\u0646\u0648\u0639 \u0627\u0644\u0639\u0645\u0644\u064a\u0629", + "Order id": "\u0631\u0642\u0645 \u0627\u0644\u062a\u0639\u0631\u064a\u0641 \u0627\u0644\u062e\u0627\u0635 \u0628\u0627\u0644\u0637\u0644\u0628", + "Procurement Id": "\u0645\u0639\u0631\u0651\u0641 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Procurement Product Id": "\u0645\u0639\u0631\u0651\u0641 \u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Product Id": "\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0646\u062a\u062c", + "Unit Id": "\u0645\u0639\u0631\u0641 \u0627\u0644\u0648\u062d\u062f\u0629", + "P. Quantity": "P. \u0627\u0644\u0643\u0645\u064a\u0629", + "N. Quantity": "N. \u0627\u0644\u0643\u0645\u064a\u0629", + "Stocked": "\u0645\u062e\u0632\u0648\u0646", + "Defective": "\u0645\u0639\u064a\u0628", + "Deleted": "\u062a\u0645 \u0627\u0644\u062d\u0630\u0641", + "Removed": "\u0625\u0632\u0627\u0644\u0629", + "Returned": "\u0639\u0627\u062f", + "Sold": "\u0645\u0628\u0627\u0639", + "Lost": "\u0636\u0627\u0626\u0639", + "Added": "\u0645\u0636\u0627\u0641", + "Incoming Transfer": "\u062a\u062d\u0648\u064a\u0644 \u0648\u0627\u0631\u062f", + "Outgoing Transfer": "\u062a\u062d\u0648\u064a\u0644 \u0635\u0627\u062f\u0631", + "Transfer Rejected": "\u062a\u0645 \u0631\u0641\u0636 \u0627\u0644\u062a\u062d\u0648\u064a\u0644", + "Transfer Canceled": "\u062a\u0645 \u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u062a\u062d\u0648\u064a\u0644", + "Void Return": "\u0639\u0648\u062f\u0629 \u0628\u0627\u0637\u0644\u0629", + "Adjustment Return": "\u0639\u0648\u062f\u0629 \u0627\u0644\u062a\u0639\u062f\u064a\u0644", + "Adjustment Sale": "\u0628\u064a\u0639 \u0627\u0644\u062a\u0639\u062f\u064a\u0644", + "Product Unit Quantities List": "\u0642\u0627\u0626\u0645\u0629 \u0643\u0645\u064a\u0627\u062a \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c", + "Display all product unit quantities.": "\u0639\u0631\u0636 \u0643\u0644 \u0643\u0645\u064a\u0627\u062a \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.", + "No product unit quantities has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0643\u0645\u064a\u0627\u062a \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c", + "Add a new product unit quantity": "\u0623\u0636\u0641 \u0643\u0645\u064a\u0629 \u0648\u062d\u062f\u0629 \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f\u0629", + "Create a new product unit quantity": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0643\u0645\u064a\u0629 \u0648\u062d\u062f\u0629 \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f\u0629", + "Register a new product unit quantity and save it.": "\u0633\u062c\u0644 \u0643\u0645\u064a\u0629 \u0648\u062d\u062f\u0629 \u0645\u0646\u062a\u062c \u062c\u062f\u064a\u062f\u0629 \u0648\u0627\u062d\u0641\u0638\u0647\u0627.", + "Edit product unit quantity": "\u062a\u062d\u0631\u064a\u0631 \u0643\u0645\u064a\u0629 \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c", + "Modify Product Unit Quantity.": "\u062a\u0639\u062f\u064a\u0644 \u0643\u0645\u064a\u0629 \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.", + "Return to Product Unit Quantities": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0643\u0645\u064a\u0627\u062a \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c", + "Created_at": "\u0623\u0646\u0634\u0626\u062a \u0641\u064a", + "Product id": "\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0646\u062a\u062c", + "Updated_at": "\u062a\u0645 \u0627\u0644\u062a\u062d\u062f\u064a\u062b \u0641\u064a", + "Providers List": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0648\u0641\u0631\u064a\u0646", + "Display all providers.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0648\u0641\u0631\u064a\u0646.", + "No providers has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u0642\u062f\u0645\u064a", + "Add a new provider": "\u0625\u0636\u0627\u0641\u0629 \u0645\u0632\u0648\u062f \u062c\u062f\u064a\u062f", + "Create a new provider": "\u0625\u0646\u0634\u0627\u0621 \u0645\u0632\u0648\u062f \u062c\u062f\u064a\u062f", + "Register a new provider and save it.": "\u0633\u062c\u0644 \u0645\u0632\u0648\u062f\u064b\u0627 \u062c\u062f\u064a\u062f\u064b\u0627 \u0648\u0627\u062d\u0641\u0638\u0647.", + "Edit provider": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0645\u0648\u0641\u0631", + "Modify Provider.": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u0632\u0648\u062f.", + "Return to Providers": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u0642\u062f\u0645\u064a \u0627\u0644\u062e\u062f\u0645\u0627\u062a", + "Provide the provider email. Might be used to send automated email.": "\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0644\u0644\u0645\u0648\u0641\u0631. \u0631\u0628\u0645\u0627 \u062a\u0633\u062a\u062e\u062f\u0645 \u0644\u0625\u0631\u0633\u0627\u0644 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0622\u0644\u064a.", + "Contact phone number for the provider. Might be used to send automated SMS notifications.": "\u0631\u0642\u0645 \u0647\u0627\u062a\u0641 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0644\u0645\u0632\u0648\u062f. \u064a\u0645\u0643\u0646 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u0627 \u0644\u0625\u0631\u0633\u0627\u0644 \u0625\u0634\u0639\u0627\u0631\u0627\u062a \u0627\u0644\u0631\u0633\u0627\u0626\u0644 \u0627\u0644\u0642\u0635\u064a\u0631\u0629 \u0627\u0644\u0622\u0644\u064a\u0629.", + "First address of the provider.": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0623\u0648\u0644 \u0644\u0644\u0645\u0632\u0648\u062f.", + "Second address of the provider.": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u062b\u0627\u0646\u064a \u0644\u0644\u0645\u0632\u0648\u062f.", + "Further details about the provider": "\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 \u062d\u0648\u0644 \u0627\u0644\u0645\u0632\u0648\u062f", + "Amount Due": "\u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0645\u0633\u062a\u062d\u0642", + "Amount Paid": "\u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0645\u062f\u0641\u0648\u0639", + "See Procurements": "\u0627\u0646\u0638\u0631 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "See Products": "\u0627\u0646\u0638\u0631 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a", + "Provider Procurements List": "\u0642\u0627\u0626\u0645\u0629 \u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u0645\u0632\u0648\u062f", + "Display all provider procurements.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u0645\u0632\u0648\u062f.", + "No provider procurements has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0645\u0632\u0648\u062f", + "Add a new provider procurement": "\u0625\u0636\u0627\u0641\u0629 \u0634\u0631\u0627\u0621 \u0645\u0632\u0648\u062f \u062c\u062f\u064a\u062f", + "Create a new provider procurement": "\u0625\u0646\u0634\u0627\u0621 \u0634\u0631\u0627\u0621 \u0645\u0632\u0648\u062f \u062c\u062f\u064a\u062f", + "Register a new provider procurement and save it.": "\u0633\u062c\u0644 \u0634\u0631\u0627\u0621 \u0645\u0632\u0648\u062f \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.", + "Edit provider procurement": "\u062a\u062d\u0631\u064a\u0631 \u0634\u0631\u0627\u0621 \u0645\u0632\u0648\u062f", + "Modify Provider Procurement.": "\u062a\u0639\u062f\u064a\u0644 \u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u0645\u0648\u0641\u0631.", + "Return to Provider Procurements": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u0645\u0632\u0648\u062f", + "Delivered On": "\u062a\u0645 \u0627\u0644\u062a\u0633\u0644\u064a\u0645", + "Delivery": "\u062a\u0648\u0635\u064a\u0644", + "Items": "\u0627\u0644\u0639\u0646\u0627\u0635\u0631", + "Provider Products List": "\u0642\u0627\u0626\u0645\u0629 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0648\u0641\u0631", + "Display all Provider Products.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0648\u0641\u0631.", + "No Provider Products has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u0646\u062a\u062c\u0627\u062a \u0645\u0648\u0641\u0631", + "Add a new Provider Product": "\u0623\u0636\u0641 \u0645\u0646\u062a\u062c \u0645\u0648\u0641\u0631 \u062c\u062f\u064a\u062f", + "Create a new Provider Product": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0646\u062a\u062c \u0645\u0648\u0641\u0631 \u062c\u062f\u064a\u062f", + "Register a new Provider Product and save it.": "\u0633\u062c\u0644 \u0645\u0646\u062a\u062c \u0645\u0648\u0641\u0631 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.", + "Edit Provider Product": "\u062a\u062d\u0631\u064a\u0631 \u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0648\u0641\u0631", + "Modify Provider Product.": "\u062a\u0639\u062f\u064a\u0644 \u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0648\u0641\u0631.", + "Return to Provider Products": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0632\u0648\u062f", + "Registers List": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062a\u0633\u062c\u064a\u0644\u0627\u062a", + "Display all registers.": "\u0627\u0639\u0631\u0636 \u0643\u0644 \u0627\u0644\u0633\u062c\u0644\u0627\u062a.", + "No registers has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0633\u062c\u0644\u0627\u062a", + "Add a new register": "\u0625\u0636\u0627\u0641\u0629 \u0633\u062c\u0644 \u062c\u062f\u064a\u062f", + "Create a new register": "\u0625\u0646\u0634\u0627\u0621 \u0633\u062c\u0644 \u062c\u062f\u064a\u062f", + "Register a new register and save it.": "\u0633\u062c\u0644 \u0633\u062c\u0644\u0627 \u062c\u062f\u064a\u062f\u0627 \u0648\u0627\u062d\u0641\u0638\u0647.", + "Edit register": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u062a\u0633\u062c\u064a\u0644", + "Modify Register.": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u062a\u0633\u062c\u064a\u0644.", + "Return to Registers": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0633\u062c\u0644\u0627\u062a", + "Closed": "\u0645\u063a\u0644\u0642", + "Define what is the status of the register.": "\u062a\u062d\u062f\u064a\u062f \u0645\u0627 \u0647\u064a \u062d\u0627\u0644\u0629 \u0627\u0644\u0633\u062c\u0644.", + "Provide mode details about this cash register.": "\u062a\u0642\u062f\u064a\u0645 \u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0648\u0636\u0639 \u062d\u0648\u0644 \u0647\u0630\u0627 \u0627\u0644\u0633\u062c\u0644 \u0627\u0644\u0646\u0642\u062f\u064a.", + "Unable to delete a register that is currently in use": "\u062a\u0639\u0630\u0631 \u062d\u0630\u0641 \u0633\u062c\u0644 \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062d\u0627\u0644\u064a\u064b\u0627", + "Used By": "\u0627\u0633\u062a\u0639\u0645\u0644 \u0645\u0646 \u0642\u0628\u0644", + "Register History List": "\u0633\u062c\u0644 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062a\u0627\u0631\u064a\u062e", + "Display all register histories.": "\u0639\u0631\u0636 \u0643\u0644 \u0633\u062c\u0644\u0627\u062a \u0627\u0644\u062a\u0633\u062c\u064a\u0644.", + "No register histories has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0633\u062c\u0644\u0627\u062a \u0627\u0644\u062a\u0627\u0631\u064a\u062e", + "Add a new register history": "\u0625\u0636\u0627\u0641\u0629 \u0633\u062c\u0644 \u0633\u062c\u0644 \u062c\u062f\u064a\u062f", + "Create a new register history": "\u0625\u0646\u0634\u0627\u0621 \u0633\u062c\u0644 \u0633\u062c\u0644 \u062c\u062f\u064a\u062f", + "Register a new register history and save it.": "\u0633\u062c\u0644 \u0633\u062c\u0644 \u0633\u062c\u0644 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.", + "Edit register history": "\u062a\u062d\u0631\u064a\u0631 \u0633\u062c\u0644 \u0627\u0644\u0633\u062c\u0644", + "Modify Registerhistory.": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0633\u062c\u0644.", + "Return to Register History": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0633\u062c\u0644 \u0627\u0644\u062a\u0627\u0631\u064a\u062e", + "Register Id": "\u0645\u0639\u0631\u0641 \u0627\u0644\u062a\u0633\u062c\u064a\u0644", + "Action": "\u0639\u0645\u0644", + "Register Name": "\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u0627\u0633\u0645", + "Done At": "\u062a\u0645 \u0641\u064a", + "Reward Systems List": "\u0642\u0627\u0626\u0645\u0629 \u0623\u0646\u0638\u0645\u0629 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a", + "Display all reward systems.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0623\u0646\u0638\u0645\u0629 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a.", + "No reward systems has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u0646\u0638\u0645\u0629 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a", + "Add a new reward system": "\u0623\u0636\u0641 \u0646\u0638\u0627\u0645 \u0645\u0643\u0627\u0641\u0623\u0629 \u062c\u062f\u064a\u062f", + "Create a new reward system": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0646\u0638\u0627\u0645 \u062c\u062f\u064a\u062f \u0644\u0644\u0645\u0643\u0627\u0641\u0622\u062a", + "Register a new reward system and save it.": "\u0633\u062c\u0644 \u0646\u0638\u0627\u0645 \u0645\u0643\u0627\u0641\u0623\u0629 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.", + "Edit reward system": "\u062a\u062d\u0631\u064a\u0631 \u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a", + "Modify Reward System.": "\u062a\u0639\u062f\u064a\u0644 \u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a.", + "Return to Reward Systems": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0623\u0646\u0638\u0645\u0629 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a", + "From": "\u0645\u0646 \u0639\u0646\u062f", + "The interval start here.": "\u064a\u0628\u062f\u0623 \u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064a \u0647\u0646\u0627.", + "To": "\u0625\u0644\u0649", + "The interval ends here.": "\u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064a \u064a\u0646\u062a\u0647\u064a \u0647\u0646\u0627.", + "Points earned.": "\u0627\u0644\u0646\u0642\u0627\u0637 \u0627\u0644\u062a\u064a \u0623\u062d\u0631\u0632\u062a\u0647\u0627.", + "Coupon": "\u0642\u0633\u064a\u0645\u0629", + "Decide which coupon you would apply to the system.": "\u062d\u062f\u062f \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u062a\u064a \u062a\u0631\u064a\u062f \u062a\u0637\u0628\u064a\u0642\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0646\u0638\u0627\u0645.", + "This is the objective that the user should reach to trigger the reward.": "\u0647\u0630\u0627 \u0647\u0648 \u0627\u0644\u0647\u062f\u0641 \u0627\u0644\u0630\u064a \u064a\u062c\u0628 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u064a\u0647 \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629.", + "A short description about this system": "\u0648\u0635\u0641 \u0645\u0648\u062c\u0632 \u0639\u0646 \u0647\u0630\u0627 \u0627\u0644\u0646\u0638\u0627\u0645", + "Would you like to delete this reward system ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a \u0647\u0630\u0627\u061f", + "Delete Selected Rewards": "\u062d\u0630\u0641 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a \u0627\u0644\u0645\u062d\u062f\u062f\u0629", + "Would you like to delete selected rewards?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a \u0627\u0644\u0645\u062e\u062a\u0627\u0631\u0629\u061f", + "Roles List": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0623\u062f\u0648\u0627\u0631", + "Display all roles.": "\u0627\u0639\u0631\u0636 \u0643\u0644 \u0627\u0644\u0623\u062f\u0648\u0627\u0631.", + "No role has been registered.": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u062f\u0648\u0631.", + "Add a new role": "\u0623\u0636\u0641 \u062f\u0648\u0631\u064b\u0627 \u062c\u062f\u064a\u062f\u064b\u0627", + "Create a new role": "\u0623\u0646\u0634\u0626 \u062f\u0648\u0631\u064b\u0627 \u062c\u062f\u064a\u062f\u064b\u0627", + "Create a new role and save it.": "\u0623\u0646\u0634\u0626 \u062f\u0648\u0631\u064b\u0627 \u062c\u062f\u064a\u062f\u064b\u0627 \u0648\u0627\u062d\u0641\u0638\u0647.", + "Edit role": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u062f\u0648\u0631", + "Modify Role.": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u062f\u0648\u0631.", + "Return to Roles": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0623\u062f\u0648\u0627\u0631", + "Provide a name to the role.": "\u0623\u062f\u062e\u0644 \u0627\u0633\u0645\u064b\u0627 \u0644\u0644\u062f\u0648\u0631.", + "Should be a unique value with no spaces or special character": "\u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0642\u064a\u0645\u0629 \u0641\u0631\u064a\u062f\u0629 \u0628\u062f\u0648\u0646 \u0645\u0633\u0627\u0641\u0627\u062a \u0623\u0648 \u0623\u062d\u0631\u0641 \u062e\u0627\u0635\u0629", + "Store Dashboard": "\u062a\u062e\u0632\u064a\u0646 \u0644\u0648\u062d\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629", + "Cashier Dashboard": "\u0644\u0648\u062d\u0629 \u062a\u062d\u0643\u0645 \u0623\u0645\u064a\u0646 \u0627\u0644\u0635\u0646\u062f\u0648\u0642", + "Default Dashboard": "\u0644\u0648\u062d\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629", + "Provide more details about what this role is about.": "\u0642\u062f\u0645 \u0645\u0632\u064a\u062f\u064b\u0627 \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 \u062d\u0648\u0644 \u0645\u0648\u0636\u0648\u0639 \u0647\u0630\u0627 \u0627\u0644\u062f\u0648\u0631.", + "Unable to delete a system role.": "\u062a\u0639\u0630\u0631 \u062d\u0630\u0641 \u062f\u0648\u0631 \u0627\u0644\u0646\u0638\u0627\u0645.", + "Clone": "\u0627\u0633\u062a\u0646\u0633\u0627\u062e", + "Would you like to clone this role ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0633\u062a\u0646\u0633\u0627\u062e \u0647\u0630\u0627 \u0627\u0644\u062f\u0648\u0631\u061f", + "You do not have enough permissions to perform this action.": "\u0644\u064a\u0633 \u0644\u062f\u064a\u0643 \u0623\u0630\u0648\u0646\u0627\u062a \u0643\u0627\u0641\u064a\u0629 \u0644\u0644\u0642\u064a\u0627\u0645 \u0628\u0647\u0630\u0627 \u0627\u0644\u0625\u062c\u0631\u0627\u0621.", + "Taxes List": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628", + "Display all taxes.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0636\u0631\u0627\u0626\u0628.", + "No taxes has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0636\u0631\u0627\u0626\u0628", + "Add a new tax": "\u0623\u0636\u0641 \u0636\u0631\u064a\u0628\u0629 \u062c\u062f\u064a\u062f\u0629", + "Create a new tax": "\u0625\u0646\u0634\u0627\u0621 \u0636\u0631\u064a\u0628\u0629 \u062c\u062f\u064a\u062f\u0629", + "Register a new tax and save it.": "\u062a\u0633\u062c\u064a\u0644 \u0636\u0631\u064a\u0628\u0629 \u062c\u062f\u064a\u062f\u0629 \u0648\u062d\u0641\u0638\u0647\u0627.", + "Edit tax": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0636\u0631\u064a\u0628\u0629", + "Modify Tax.": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0636\u0631\u064a\u0628\u0629.", + "Return to Taxes": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0636\u0631\u0627\u0626\u0628", + "Provide a name to the tax.": "\u0623\u062f\u062e\u0644 \u0627\u0633\u0645\u064b\u0627 \u0644\u0644\u0636\u0631\u064a\u0628\u0629.", + "Assign the tax to a tax group.": "\u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0636\u0631\u064a\u0628\u064a\u0629.", + "Rate": "\u0645\u0639\u062f\u0644", + "Define the rate value for the tax.": "\u062a\u062d\u062f\u064a\u062f \u0642\u064a\u0645\u0629 \u0645\u0639\u062f\u0644 \u0627\u0644\u0636\u0631\u064a\u0628\u0629.", + "Provide a description to the tax.": "\u0642\u062f\u0645 \u0648\u0635\u0641\u064b\u0627 \u0644\u0644\u0636\u0631\u064a\u0628\u0629.", + "Taxes Groups List": "\u0642\u0627\u0626\u0645\u0629 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0636\u0631\u0627\u0626\u0628", + "Display all taxes groups.": "\u0627\u0639\u0631\u0636 \u0643\u0644 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0636\u0631\u0627\u0626\u0628.", + "No taxes groups has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0636\u0631\u0627\u0626\u0628", + "Add a new tax group": "\u0623\u0636\u0641 \u0645\u062c\u0645\u0648\u0639\u0629 \u0636\u0631\u064a\u0628\u064a\u0629 \u062c\u062f\u064a\u062f\u0629", + "Create a new tax group": "\u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0629 \u0636\u0631\u064a\u0628\u064a\u0629 \u062c\u062f\u064a\u062f\u0629", + "Register a new tax group and save it.": "\u0633\u062c\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0636\u0631\u064a\u0628\u064a\u0629 \u062c\u062f\u064a\u062f\u0629 \u0648\u0627\u062d\u0641\u0638\u0647\u0627.", + "Edit tax group": "\u062a\u062d\u0631\u064a\u0631 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628", + "Modify Tax Group.": "\u062a\u0639\u062f\u064a\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628.", + "Return to Taxes Groups": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0636\u0631\u0627\u0626\u0628", + "Provide a short description to the tax group.": "\u0642\u062f\u0645 \u0648\u0635\u0641\u064b\u0627 \u0645\u0648\u062c\u0632\u064b\u0627 \u200b\u200b\u0644\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u064a\u0628\u064a\u0629.", + "Units List": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "Display all units.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0648\u062d\u062f\u0627\u062a.", + "No units has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0648\u062d\u062f\u0627\u062a", + "Add a new unit": "\u0623\u0636\u0641 \u0648\u062d\u062f\u0629 \u062c\u062f\u064a\u062f\u0629", + "Create a new unit": "\u0623\u0646\u0634\u0626 \u0648\u062d\u062f\u0629 \u062c\u062f\u064a\u062f\u0629", + "Register a new unit and save it.": "\u0633\u062c\u0644 \u0648\u062d\u062f\u0629 \u062c\u062f\u064a\u062f\u0629 \u0648\u0627\u062d\u0641\u0638\u0647\u0627.", + "Edit unit": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0648\u062d\u062f\u0629", + "Modify Unit.": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629.", + "Return to Units": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "Preview URL": "\u0645\u0639\u0627\u064a\u0646\u0629 URL", + "Preview of the unit.": "\u0645\u0639\u0627\u064a\u0646\u0629 \u0627\u0644\u0648\u062d\u062f\u0629.", + "Define the value of the unit.": "\u062d\u062f\u062f \u0642\u064a\u0645\u0629 \u0627\u0644\u0648\u062d\u062f\u0629.", + "Define to which group the unit should be assigned.": "\u062d\u062f\u062f \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u062a\u064a \u064a\u062c\u0628 \u062a\u062e\u0635\u064a\u0635 \u0627\u0644\u0648\u062d\u062f\u0629 \u0644\u0647\u0627.", + "Base Unit": "\u0648\u062d\u062f\u0629 \u0642\u0627\u0639\u062f\u0629", + "Determine if the unit is the base unit from the group.": "\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0627\u0644\u0648\u062d\u062f\u0629 \u0647\u064a \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629 \u0645\u0646 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629.", + "Provide a short description about the unit.": "\u0642\u062f\u0645 \u0648\u0635\u0641\u064b\u0627 \u0645\u0648\u062c\u0632\u064b\u0627 \u200b\u200b\u0644\u0644\u0648\u062d\u062f\u0629.", + "Unit Groups List": "\u0642\u0627\u0626\u0645\u0629 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "Display all unit groups.": "\u0627\u0639\u0631\u0636 \u0643\u0644 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0648\u062d\u062f\u0627\u062a.", + "No unit groups has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0648\u062d\u062f\u0627\u062a", + "Add a new unit group": "\u0623\u0636\u0641 \u0645\u062c\u0645\u0648\u0639\u0629 \u0648\u062d\u062f\u0629 \u062c\u062f\u064a\u062f\u0629", + "Create a new unit group": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0629 \u0648\u062d\u062f\u0629 \u062c\u062f\u064a\u062f\u0629", + "Register a new unit group and save it.": "\u0633\u062c\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0648\u062d\u062f\u0629 \u062c\u062f\u064a\u062f\u0629 \u0648\u0627\u062d\u0641\u0638\u0647\u0627.", + "Edit unit group": "\u062a\u062d\u0631\u064a\u0631 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0629", + "Modify Unit Group.": "\u062a\u0639\u062f\u064a\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0629.", + "Return to Unit Groups": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "Users List": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646", + "Display all users.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646.", + "No users has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646", + "Add a new user": "\u0625\u0636\u0627\u0641\u0629 \u0645\u0633\u062a\u062e\u062f\u0645 \u062c\u062f\u064a\u062f", + "Create a new user": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0633\u062a\u062e\u062f\u0645 \u062c\u062f\u064a\u062f", + "Register a new user and save it.": "\u062a\u0633\u062c\u064a\u0644 \u0645\u0633\u062a\u062e\u062f\u0645 \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.", + "Edit user": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0639\u0636\u0648", + "Modify User.": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645.", + "Return to Users": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646", + "Username": "\u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645", + "Will be used for various purposes such as email recovery.": "\u0633\u064a\u062a\u0645 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647 \u0644\u0623\u063a\u0631\u0627\u0636 \u0645\u062e\u062a\u0644\u0641\u0629 \u0645\u062b\u0644 \u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a.", + "Password": "\u0643\u0644\u0645\u0647 \u0627\u0644\u0633\u0631", + "Make a unique and secure password.": "\u0623\u0646\u0634\u0626 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0641\u0631\u064a\u062f\u0629 \u0648\u0622\u0645\u0646\u0629.", + "Confirm Password": "\u062a\u0623\u0643\u064a\u062f \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631", + "Should be the same as the password.": "\u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0647\u064a \u0646\u0641\u0633\u0647\u0627 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631.", + "Define whether the user can use the application.": "\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u0645\u0643\u0646 \u0644\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u062a\u0637\u0628\u064a\u0642.", + "Incompatibility Exception": "\u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u0639\u062f\u0645 \u0627\u0644\u062a\u0648\u0627\u0641\u0642", + "The action you tried to perform is not allowed.": "\u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u0630\u064a \u062d\u0627\u0648\u0644\u062a \u0627\u0644\u0642\u064a\u0627\u0645 \u0628\u0647 \u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0628\u0647.", + "Not Enough Permissions": "\u0623\u0630\u0648\u0646\u0627\u062a \u063a\u064a\u0631 \u0643\u0627\u0641\u064a\u0629", + "The resource of the page you tried to access is not available or might have been deleted.": "\u0645\u0648\u0631\u062f \u0627\u0644\u0635\u0641\u062d\u0629 \u0627\u0644\u0630\u064a \u062d\u0627\u0648\u0644\u062a \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u064a\u0647 \u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631 \u0623\u0648 \u0631\u0628\u0645\u0627 \u062a\u0645 \u062d\u0630\u0641\u0647.", + "Not Found Exception": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0633\u062a\u062b\u0646\u0627\u0621", + "Query Exception": "\u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u0627\u0644\u0627\u0633\u062a\u0639\u0644\u0627\u0645", + "Provide your username.": "\u0623\u062f\u062e\u0644 \u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643.", + "Provide your password.": "\u0623\u062f\u062e\u0644 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643.", + "Provide your email.": "\u0623\u062f\u062e\u0644 \u0628\u0631\u064a\u062f\u0643 \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a.", + "Password Confirm": "\u062a\u0623\u0643\u064a\u062f \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631", + "define the amount of the transaction.": "\u062a\u062d\u062f\u064a\u062f \u0645\u0628\u0644\u063a \u0627\u0644\u0635\u0641\u0642\u0629.", + "Further observation while proceeding.": "\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0645\u0631\u0627\u0642\u0628\u0629 \u0623\u062b\u0646\u0627\u0621 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629.", + "determine what is the transaction type.": "\u062a\u062d\u062f\u064a\u062f \u0646\u0648\u0639 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629.", + "Determine the amount of the transaction.": "\u062a\u062d\u062f\u064a\u062f \u0645\u0628\u0644\u063a \u0627\u0644\u0635\u0641\u0642\u0629.", + "Further details about the transaction.": "\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 \u062d\u0648\u0644 \u0627\u0644\u0635\u0641\u0642\u0629.", + "Define the installments for the current order.": "\u062d\u062f\u062f \u0623\u0642\u0633\u0627\u0637 \u0627\u0644\u0623\u0645\u0631 \u0627\u0644\u062d\u0627\u0644\u064a.", + "New Password": "\u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u062c\u062f\u064a\u062f\u0629", + "define your new password.": "\u062d\u062f\u062f \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631\u0643 \u0627\u0644\u062c\u062f\u064a\u062f\u0629.", + "confirm your new password.": "\u0623\u0643\u062f \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631\u0643 \u0627\u0644\u062c\u062f\u064a\u062f\u0629.", + "choose the payment type.": "\u0627\u062e\u062a\u0631 \u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639.", + "Define the order name.": "\u062d\u062f\u062f \u0627\u0633\u0645 \u0627\u0644\u0623\u0645\u0631.", + "Define the date of creation of the order.": "\u062d\u062f\u062f \u062a\u0627\u0631\u064a\u062e \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0623\u0645\u0631.", + "Provide the procurement name.": "\u0623\u062f\u062e\u0644 \u0627\u0633\u0645 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.", + "Describe the procurement.": "\u0635\u0641 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.", + "Define the provider.": "\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0648\u0641\u0631.", + "Define what is the unit price of the product.": "\u062d\u062f\u062f \u0633\u0639\u0631 \u0627\u0644\u0648\u062d\u062f\u0629 \u0644\u0644\u0645\u0646\u062a\u062c.", + "Determine in which condition the product is returned.": "\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u062d\u0627\u0644\u0629 \u0627\u0644\u062a\u064a \u064a\u062a\u0645 \u0641\u064a\u0647\u0627 \u0625\u0631\u062c\u0627\u0639 \u0627\u0644\u0645\u0646\u062a\u062c.", + "Other Observations": "\u0645\u0644\u0627\u062d\u0638\u0627\u062a \u0623\u062e\u0631\u0649", + "Describe in details the condition of the returned product.": "\u0635\u0641 \u0628\u0627\u0644\u062a\u0641\u0635\u064a\u0644 \u062d\u0627\u0644\u0629 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0631\u062a\u062c\u0639.", + "Unit Group Name": "\u0627\u0633\u0645 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0629", + "Provide a unit name to the unit.": "\u0623\u062f\u062e\u0644 \u0627\u0633\u0645 \u0648\u062d\u062f\u0629 \u0644\u0644\u0648\u062d\u062f\u0629.", + "Describe the current unit.": "\u0635\u0641 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.", + "assign the current unit to a group.": "\u0642\u0645 \u0628\u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0625\u0644\u0649 \u0645\u062c\u0645\u0648\u0639\u0629.", + "define the unit value.": "\u062d\u062f\u062f \u0642\u064a\u0645\u0629 \u0627\u0644\u0648\u062d\u062f\u0629.", + "Provide a unit name to the units group.": "\u0623\u062f\u062e\u0644 \u0627\u0633\u0645 \u0648\u062d\u062f\u0629 \u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a.", + "Describe the current unit group.": "\u0635\u0641 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.", + "POS": "\u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639", + "Open POS": "\u0627\u0641\u062a\u062d \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639", + "Create Register": "\u0625\u0646\u0634\u0627\u0621 \u062a\u0633\u062c\u064a\u0644", + "Use Customer Billing": "\u0627\u0633\u062a\u062e\u062f\u0645 \u0641\u0648\u0627\u062a\u064a\u0631 \u0627\u0644\u0639\u0645\u064a\u0644", + "Define whether the customer billing information should be used.": "\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0627\u0644\u0639\u0645\u064a\u0644.", + "General Shipping": "\u0627\u0644\u0634\u062d\u0646 \u0627\u0644\u0639\u0627\u0645", + "Define how the shipping is calculated.": "\u062d\u062f\u062f \u0643\u064a\u0641\u064a\u0629 \u062d\u0633\u0627\u0628 \u0627\u0644\u0634\u062d\u0646.", + "Shipping Fees": "\u0645\u0635\u0627\u0631\u064a\u0641 \u0627\u0644\u0634\u062d\u0646", + "Define shipping fees.": "\u062a\u062d\u062f\u064a\u062f \u0631\u0633\u0648\u0645 \u0627\u0644\u0634\u062d\u0646.", + "Use Customer Shipping": "\u0627\u0633\u062a\u062e\u062f\u0645 \u0634\u062d\u0646 \u0627\u0644\u0639\u0645\u064a\u0644", + "Define whether the customer shipping information should be used.": "\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u0634\u062d\u0646 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0627\u0644\u0639\u0645\u064a\u0644.", + "Invoice Number": "\u0631\u0642\u0645 \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629", + "If the procurement has been issued outside of NexoPOS, please provide a unique reference.": "\u0625\u0630\u0627 \u062a\u0645 \u0625\u0635\u062f\u0627\u0631 \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0634\u0631\u0627\u0621 \u062e\u0627\u0631\u062c NexoPOS \u060c \u0641\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 \u0645\u0631\u062c\u0639 \u0641\u0631\u064a\u062f.", + "Delivery Time": "\u0645\u0648\u0639\u062f \u0627\u0644\u062a\u0633\u0644\u064a\u0645", + "If the procurement has to be delivered at a specific time, define the moment here.": "\u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u062a\u0633\u0644\u064a\u0645 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0641\u064a \u0648\u0642\u062a \u0645\u062d\u062f\u062f \u060c \u0641\u062d\u062f\u062f \u0627\u0644\u0644\u062d\u0638\u0629 \u0647\u0646\u0627.", + "Automatic Approval": "\u0627\u0644\u0645\u0648\u0627\u0641\u0642\u0629 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u064a\u0629", + "Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.": "\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u0648\u0636\u0639 \u0639\u0644\u0627\u0645\u0629 \u0639\u0644\u0649 \u0627\u0644\u0634\u0631\u0627\u0621 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0639\u0644\u0649 \u0623\u0646\u0647 \u062a\u0645\u062a \u0627\u0644\u0645\u0648\u0627\u0641\u0642\u0629 \u0639\u0644\u064a\u0647 \u0628\u0645\u062c\u0631\u062f \u062d\u062f\u0648\u062b \u0648\u0642\u062a \u0627\u0644\u062a\u0633\u0644\u064a\u0645.", + "Pending": "\u0642\u064a\u062f \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631", + "Delivered": "\u062a\u0645 \u0627\u0644\u062a\u0648\u0635\u064a\u0644", + "Determine what is the actual payment status of the procurement.": "\u062a\u062d\u062f\u064a\u062f \u062d\u0627\u0644\u0629 \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0641\u0639\u0644\u064a\u0629 \u0644\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.", + "Determine what is the actual provider of the current procurement.": "\u062a\u062d\u062f\u064a\u062f \u0645\u0627 \u0647\u0648 \u0627\u0644\u0645\u0648\u0641\u0631 \u0627\u0644\u0641\u0639\u0644\u064a \u0644\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u062d\u0627\u0644\u064a\u0629.", + "Provide a name that will help to identify the procurement.": "\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0627\u0633\u0645 \u064a\u0633\u0627\u0639\u062f \u0641\u064a \u062a\u062d\u062f\u064a\u062f \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0634\u0631\u0627\u0621.", + "First Name": "\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u0648\u0644", + "Avatar": "\u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u0631\u0645\u0632\u064a\u0629", + "Define the image that should be used as an avatar.": "\u062d\u062f\u062f \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u062a\u064a \u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u0627 \u0643\u0635\u0648\u0631\u0629 \u0631\u0645\u0632\u064a\u0629.", + "Language": "\u0644\u063a\u0629", + "Choose the language for the current account.": "\u0627\u062e\u062a\u0631 \u0644\u063a\u0629 \u0627\u0644\u062d\u0633\u0627\u0628 \u0627\u0644\u062c\u0627\u0631\u064a.", + "Security": "\u062d\u0645\u0627\u064a\u0629", + "Old Password": "\u0643\u0644\u0645\u0629 \u0633\u0631 \u0642\u062f\u064a\u0645\u0629", + "Provide the old password.": "\u0623\u062f\u062e\u0644 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u0642\u062f\u064a\u0645\u0629.", + "Change your password with a better stronger password.": "\u0642\u0645 \u0628\u062a\u063a\u064a\u064a\u0631 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643 \u0628\u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0623\u0642\u0648\u0649.", + "Password Confirmation": "\u062a\u0623\u0643\u064a\u062f \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631", + "The profile has been successfully saved.": "\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0634\u062e\u0635\u064a \u0628\u0646\u062c\u0627\u062d.", + "The user attribute has been saved.": "\u062a\u0645 \u062d\u0641\u0638 \u0633\u0645\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645.", + "The options has been successfully updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u062e\u064a\u0627\u0631\u0627\u062a \u0628\u0646\u062c\u0627\u062d.", + "Wrong password provided": "\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u062e\u0627\u0637\u0626\u0629", + "Wrong old password provided": "\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0642\u062f\u064a\u0645\u0629 \u062e\u0627\u0637\u0626\u0629", + "Password Successfully updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0628\u0646\u062c\u0627\u062d.", + "Sign In — NexoPOS": "\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 & [\u0645\u062f\u0634] \u061b NexoPOS", + "Sign Up — NexoPOS": "\u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0648 [\u0645\u062f\u0634] \u061b NexoPOS", + "Password Lost": "\u0641\u0642\u062f\u062a \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631", + "Unable to proceed as the token provided is invalid.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0644\u0623\u0646 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0645\u064a\u0632 \u0627\u0644\u0645\u0642\u062f\u0645 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "The token has expired. Please request a new activation token.": "\u0627\u0646\u062a\u0647\u062a \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0645\u064a\u0632. \u064a\u0631\u062c\u0649 \u0637\u0644\u0628 \u0631\u0645\u0632 \u062a\u0646\u0634\u064a\u0637 \u062c\u062f\u064a\u062f.", + "Set New Password": "\u062a\u0639\u064a\u064a\u0646 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u062c\u062f\u064a\u062f\u0629", + "Database Update": "\u062a\u062d\u062f\u064a\u062b \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", + "This account is disabled.": "\u0647\u0630\u0627 \u0627\u0644\u062d\u0633\u0627\u0628 \u0645\u0639\u0637\u0644.", + "Unable to find record having that username.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0633\u062c\u0644 \u0644\u0647 \u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0647\u0630\u0627.", + "Unable to find record having that password.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0633\u062c\u0644 \u0627\u0644\u0630\u064a \u064a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0647\u0630\u0647.", + "Invalid username or password.": "\u062e\u0637\u0623 \u0641\u064a \u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0623\u0648 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631.", + "Unable to login, the provided account is not active.": "\u062a\u0639\u0630\u0631 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u060c \u0627\u0644\u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0642\u062f\u0645 \u063a\u064a\u0631 \u0646\u0634\u0637.", + "You have been successfully connected.": "\u0644\u0642\u062f \u062a\u0645 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0646\u062c\u0627\u062d.", + "The recovery email has been send to your inbox.": "\u062a\u0645 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0627\u0644\u0645\u062e\u0635\u0635 \u0644\u0644\u0637\u0648\u0627\u0631\u0626 \u0625\u0644\u0649 \u0635\u0646\u062f\u0648\u0642 \u0627\u0644\u0648\u0627\u0631\u062f \u0627\u0644\u062e\u0627\u0635 \u0628\u0643.", + "Unable to find a record matching your entry.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0633\u062c\u0644 \u064a\u0637\u0627\u0628\u0642 \u0625\u062f\u062e\u0627\u0644\u0643.", + "Your Account has been created but requires email validation.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628\u0643 \u0648\u0644\u0643\u0646\u0647 \u064a\u062a\u0637\u0644\u0628 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0635\u062d\u0629 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a.", + "Unable to find the requested user.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0637\u0644\u0648\u0628.", + "Unable to proceed, the provided token is not valid.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0642\u062f\u0645 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "Unable to proceed, the token has expired.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0627\u0646\u062a\u0647\u062a \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0645\u064a\u0632.", + "Your password has been updated.": "\u0644\u0642\u062f \u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643.", + "Unable to edit a register that is currently in use": "\u062a\u0639\u0630\u0631 \u062a\u062d\u0631\u064a\u0631 \u0633\u062c\u0644 \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062d\u0627\u0644\u064a\u064b\u0627", + "No register has been opened by the logged user.": "\u062a\u0645 \u0641\u062a\u062d \u0623\u064a \u0633\u062c\u0644 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0633\u062c\u0644.", + "The register is opened.": "\u062a\u0645 \u0641\u062a\u062d \u0627\u0644\u0633\u062c\u0644.", + "Closing": "\u0625\u063a\u0644\u0627\u0642", + "Opening": "\u0627\u0641\u062a\u062a\u0627\u062d", + "Sale": "\u0623\u0648\u0643\u0627\u0632\u064a\u0648\u0646", + "Refund": "\u0627\u0633\u062a\u0631\u062f\u0627\u062f", + "Unable to find the category using the provided identifier": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0641\u0626\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645", + "The category has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0641\u0626\u0629.", + "Unable to find the category using the provided identifier.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0641\u0626\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "Unable to find the attached category parent": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0623\u0635\u0644 \u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u0645\u0631\u0641\u0642\u0629", + "The category has been correctly saved": "\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0641\u0626\u0629 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d", + "The category has been updated": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0641\u0626\u0629", + "The category products has been refreshed": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0641\u0626\u0629", + "The entry has been successfully deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0625\u062f\u062e\u0627\u0644 \u0628\u0646\u062c\u0627\u062d.", + "A new entry has been successfully created.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0625\u062f\u062e\u0627\u0644 \u062c\u062f\u064a\u062f \u0628\u0646\u062c\u0627\u062d.", + "Unhandled crud resource": "\u0645\u0648\u0631\u062f \u062e\u0627\u0645 \u063a\u064a\u0631 \u0645\u0639\u0627\u0644\u062c", + "You need to select at least one item to delete": "\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u062a\u062d\u062f\u064a\u062f \u0639\u0646\u0635\u0631 \u0648\u0627\u062d\u062f \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0644\u062d\u0630\u0641\u0647", + "You need to define which action to perform": "\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u0630\u064a \u064a\u062c\u0628 \u0627\u0644\u0642\u064a\u0627\u0645 \u0628\u0647", + "%s has been processed, %s has not been processed.": "\u062a\u0645\u062a \u0645\u0639\u0627\u0644\u062c\u0629 %s \u060c \u0648\u0644\u0645 \u062a\u062a\u0645 \u0645\u0639\u0627\u0644\u062c\u0629 %s.", + "Unable to proceed. No matching CRUD resource has been found.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627. \u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0645\u0648\u0631\u062f CRUD \u0645\u0637\u0627\u0628\u0642.", + "The requested file cannot be downloaded or has already been downloaded.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u0646\u0632\u064a\u0644 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0623\u0648 \u062a\u0645 \u062a\u0646\u0632\u064a\u0644\u0647 \u0628\u0627\u0644\u0641\u0639\u0644.", + "The requested customer cannot be found.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u0645\u062e\u0627\u0644\u0641\u0629 \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0645\u0637\u0644\u0648\u0628.", + "Create Coupon": "\u0625\u0646\u0634\u0627\u0621 \u0642\u0633\u064a\u0645\u0629", + "helps you creating a coupon.": "\u064a\u0633\u0627\u0639\u062f\u0643 \u0641\u064a \u0625\u0646\u0634\u0627\u0621 \u0642\u0633\u064a\u0645\u0629.", + "Edit Coupon": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0642\u0633\u064a\u0645\u0629", + "Editing an existing coupon.": "\u062a\u062d\u0631\u064a\u0631 \u0642\u0633\u064a\u0645\u0629 \u0645\u0648\u062c\u0648\u062f\u0629.", + "Invalid Request.": "\u0637\u0644\u0628 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "Displays the customer account history for %s": "\u0639\u0631\u0636 \u0645\u062d\u0641\u0648\u0638\u0627\u062a \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644 \u0644\u0640 %s", + "Unable to delete a group to which customers are still assigned.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062d\u0630\u0641 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u062a\u064a \u0644\u0627 \u064a\u0632\u0627\u0644 \u064a\u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0644\u0647\u0627.", + "The customer group has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621.", + "Unable to find the requested group.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629.", + "The customer group has been successfully created.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0628\u0646\u062c\u0627\u062d.", + "The customer group has been successfully saved.": "\u062a\u0645 \u062d\u0641\u0638 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0628\u0646\u062c\u0627\u062d.", + "Unable to transfer customers to the same account.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u0648\u064a\u0644 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0625\u0644\u0649 \u0646\u0641\u0633 \u0627\u0644\u062d\u0633\u0627\u0628.", + "The categories has been transferred to the group %s.": "\u062a\u0645 \u0646\u0642\u0644 \u0627\u0644\u0641\u0626\u0627\u062a \u0625\u0644\u0649 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 %s.", + "No customer identifier has been provided to proceed to the transfer.": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0645\u0639\u0631\u0651\u0641 \u0627\u0644\u0639\u0645\u064a\u0644 \u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u0646\u0642\u0644.", + "Unable to find the requested group using the provided id.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "\"%s\" is not an instance of \"FieldsService\"": "\"%s\" \u0644\u064a\u0633 \u0645\u062b\u064a\u0644\u0627\u064b \u0644\u0640 \"FieldsService \"", + "Manage Medias": "\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0648\u0633\u0627\u0626\u0637", + "Modules List": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "List all available modules.": "\u0642\u0627\u0626\u0645\u0629 \u0628\u062c\u0645\u064a\u0639 \u0627\u0644\u0648\u062d\u062f\u0627\u062a \u0627\u0644\u0645\u062a\u0627\u062d\u0629.", + "Upload A Module": "\u062a\u062d\u0645\u064a\u0644 \u0648\u062d\u062f\u0629", + "Extends NexoPOS features with some new modules.": "\u064a\u0648\u0633\u0639 \u0645\u064a\u0632\u0627\u062a NexoPOS \u0628\u0628\u0639\u0636 \u0627\u0644\u0648\u062d\u062f\u0627\u062a \u0627\u0644\u062c\u062f\u064a\u062f\u0629.", + "The notification has been successfully deleted": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0625\u062e\u0637\u0627\u0631 \u0628\u0646\u062c\u0627\u062d", + "All the notifications have been cleared.": "\u062a\u0645 \u0645\u0633\u062d \u062c\u0645\u064a\u0639 \u0627\u0644\u0625\u062e\u0637\u0627\u0631\u0627\u062a.", + "Order Invoice — %s": "\u0623\u0645\u0631 \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629 \u0648 [\u0645\u062f\u0634]\u061b \u066a\u0633", + "Order Refund Receipt — %s": "\u0637\u0644\u0628 \u0625\u064a\u0635\u0627\u0644 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0648 [\u0645\u062f\u0634] \u061b \u066a\u0633", + "Order Receipt — %s": "\u0627\u0633\u062a\u0644\u0627\u0645 \u0627\u0644\u0637\u0644\u0628 \u0648 [\u0645\u062f\u0634] \u061b \u066a\u0633", + "The printing event has been successfully dispatched.": "\u062a\u0645 \u0625\u0631\u0633\u0627\u0644 \u062d\u062f\u062b \u0627\u0644\u0637\u0628\u0627\u0639\u0629 \u0628\u0646\u062c\u0627\u062d.", + "There is a mismatch between the provided order and the order attached to the instalment.": "\u064a\u0648\u062c\u062f \u0639\u062f\u0645 \u062a\u0637\u0627\u0628\u0642 \u0628\u064a\u0646 \u0627\u0644\u0623\u0645\u0631 \u0627\u0644\u0645\u0642\u062f\u0645 \u0648\u0627\u0644\u0623\u0645\u0631 \u0627\u0644\u0645\u0631\u0641\u0642 \u0628\u0627\u0644\u0642\u0633\u0637.", + "Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u0631\u064a\u0631 \u0639\u0645\u0644\u064a\u0629 \u0634\u0631\u0627\u0621 \u0645\u062e\u0632\u0646\u0629. \u0636\u0639 \u0641\u064a \u0627\u0639\u062a\u0628\u0627\u0631\u0643 \u0625\u062c\u0631\u0627\u0621 \u062a\u0639\u062f\u064a\u0644 \u0623\u0648 \u062d\u0630\u0641 \u0627\u0644\u062a\u062f\u0628\u064a\u0631.", + "New Procurement": "\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u062c\u062f\u064a\u062f\u0629", + "Edit Procurement": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0627\u0642\u062a\u0646\u0627\u0621", + "Perform adjustment on existing procurement.": "\u0625\u062c\u0631\u0627\u0621 \u062a\u0639\u062f\u064a\u0644 \u0639\u0644\u0649 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u062d\u0627\u0644\u064a\u0629.", + "%s - Invoice": " %s - \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629", + "list of product procured.": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0634\u062a\u0631\u0627\u0629.", + "The product price has been refreshed.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0633\u0639\u0631 \u0627\u0644\u0645\u0646\u062a\u062c.", + "The single variation has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0634\u0643\u0644 \u0627\u0644\u0641\u0631\u062f\u064a.", + "Edit a product": "\u062a\u062d\u0631\u064a\u0631 \u0645\u0646\u062a\u062c", + "Makes modifications to a product": "\u064a\u0642\u0648\u0645 \u0628\u0625\u062c\u0631\u0627\u0621 \u062a\u0639\u062f\u064a\u0644\u0627\u062a \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c", + "Create a product": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0646\u062a\u062c", + "Add a new product on the system": "\u0623\u0636\u0641 \u0645\u0646\u062a\u062c\u064b\u0627 \u062c\u062f\u064a\u062f\u064b\u0627 \u0639\u0644\u0649 \u0627\u0644\u0646\u0638\u0627\u0645", + "Stock Adjustment": "\u0627\u0644\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0623\u0633\u0647\u0645", + "Adjust stock of existing products.": "\u0636\u0628\u0637 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u062d\u0627\u0644\u064a\u0629.", + "No stock is provided for the requested product.": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0645\u062e\u0632\u0648\u0646 \u0644\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0637\u0644\u0648\u0628.", + "The product unit quantity has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0643\u0645\u064a\u0629 \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.", + "Unable to proceed as the request is not valid.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0644\u0623\u0646 \u0627\u0644\u0637\u0644\u0628 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "Unsupported action for the product %s.": "\u0625\u062c\u0631\u0627\u0621 \u063a\u064a\u0631 \u0645\u0639\u062a\u0645\u062f \u0644\u0644\u0645\u0646\u062a\u062c %s.", + "The stock has been adjustment successfully.": "\u062a\u0645 \u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0628\u0646\u062c\u0627\u062d.", + "Unable to add the product to the cart as it has expired.": "\u062a\u0639\u0630\u0631 \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0645\u0646\u062a\u062c \u0625\u0644\u0649 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642 \u062d\u064a\u062b \u0627\u0646\u062a\u0647\u062a \u0635\u0644\u0627\u062d\u064a\u062a\u0647.", + "Unable to add a product that has accurate tracking enabled, using an ordinary barcode.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0625\u0636\u0627\u0641\u0629 \u0645\u0646\u062a\u062c \u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u062a\u062a\u0628\u0639 \u0627\u0644\u062f\u0642\u064a\u0642 \u0628\u0647 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0631\u0645\u0632 \u0634\u0631\u064a\u0637\u064a \u0639\u0627\u062f\u064a.", + "There is no products matching the current request.": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0645\u0646\u062a\u062c\u0627\u062a \u0645\u0637\u0627\u0628\u0642\u0629 \u0644\u0644\u0637\u0644\u0628 \u0627\u0644\u062d\u0627\u0644\u064a.", + "Print Labels": "\u0637\u0628\u0627\u0639\u0629 \u0627\u0644\u0645\u0644\u0635\u0642\u0627\u062a", + "Customize and print products labels.": "\u062a\u062e\u0635\u064a\u0635 \u0648\u0637\u0628\u0627\u0639\u0629 \u0645\u0644\u0635\u0642\u0627\u062a \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a.", + "Procurements by \"%s\"": "\u0639\u0645\u0644\u064a\u0627\u062a \u0627\u0644\u0634\u0631\u0627\u0621 \u0628\u0648\u0627\u0633\u0637\u0629 \"%s\"", + "Sales Report": "\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a", + "Provides an overview over the sales during a specific period": "\u064a\u0642\u062f\u0645 \u0646\u0638\u0631\u0629 \u0639\u0627\u0645\u0629 \u0639\u0644\u0649 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u062e\u0644\u0627\u0644 \u0641\u062a\u0631\u0629 \u0645\u062d\u062f\u062f\u0629", + "Provides an overview over the best products sold during a specific period.": "\u064a\u0642\u062f\u0645 \u0644\u0645\u062d\u0629 \u0639\u0627\u0645\u0629 \u0639\u0646 \u0623\u0641\u0636\u0644 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u062a\u064a \u062a\u0645 \u0628\u064a\u0639\u0647\u0627 \u062e\u0644\u0627\u0644 \u0641\u062a\u0631\u0629 \u0645\u062d\u062f\u062f\u0629.", + "Sold Stock": "\u062a\u0628\u0627\u0639 \u0627\u0644\u0623\u0633\u0647\u0645", + "Provides an overview over the sold stock during a specific period.": "\u064a\u0642\u062f\u0645 \u0646\u0638\u0631\u0629 \u0639\u0627\u0645\u0629 \u0639\u0644\u0649 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0628\u0627\u0639 \u062e\u0644\u0627\u0644 \u0641\u062a\u0631\u0629 \u0645\u062d\u062f\u062f\u0629.", + "Profit Report": "\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0631\u0628\u062d", + "Provides an overview of the provide of the products sold.": "\u064a\u0648\u0641\u0631 \u0644\u0645\u062d\u0629 \u0639\u0627\u0645\u0629 \u0639\u0646 \u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0628\u0627\u0639\u0629.", + "Provides an overview on the activity for a specific period.": "\u064a\u0648\u0641\u0631 \u0646\u0638\u0631\u0629 \u0639\u0627\u0645\u0629 \u0639\u0644\u0649 \u0627\u0644\u0646\u0634\u0627\u0637 \u0644\u0641\u062a\u0631\u0629 \u0645\u062d\u062f\u062f\u0629.", + "Annual Report": "\u062a\u0642\u0631\u064a\u0631 \u0633\u0646\u0648\u064a", + "Sales By Payment Types": "\u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u062d\u0633\u0628 \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u062f\u0641\u0639", + "Provide a report of the sales by payment types, for a specific period.": "\u062a\u0642\u062f\u064a\u0645 \u062a\u0642\u0631\u064a\u0631 \u0628\u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u0628\u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u062f\u0641\u0639 \u0644\u0641\u062a\u0631\u0629 \u0645\u062d\u062f\u062f\u0629.", + "The report will be computed for the current year.": "\u0633\u064a\u062a\u0645 \u0627\u062d\u062a\u0633\u0627\u0628 \u0627\u0644\u062a\u0642\u0631\u064a\u0631 \u0644\u0644\u0633\u0646\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.", + "Unknown report to refresh.": "\u062a\u0642\u0631\u064a\u0631 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641 \u0644\u0644\u062a\u062d\u062f\u064a\u062b.", + "Invalid authorization code provided.": "\u062a\u0645 \u062a\u0642\u062f\u064a\u0645 \u0631\u0645\u0632 \u062a\u0641\u0648\u064a\u0636 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "The database has been successfully seeded.": "\u062a\u0645 \u0628\u0630\u0631 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0628\u0646\u062c\u0627\u062d.", + "Settings Page Not Found": "\u0635\u0641\u062d\u0629 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f\u0629", + "Customers Settings": "\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Configure the customers settings of the application.": "\u062a\u0643\u0648\u064a\u0646 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0644\u0644\u062a\u0637\u0628\u064a\u0642.", + "General Settings": "\u0627\u0644\u0627\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0639\u0627\u0645\u0629", + "Configure the general settings of the application.": "\u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0639\u0627\u0645\u0629 \u0644\u0644\u062a\u0637\u0628\u064a\u0642.", + "Orders Settings": "\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0637\u0644\u0628\u0627\u062a", + "POS Settings": "\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639", + "Configure the pos settings.": "\u062a\u0643\u0648\u064a\u0646 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639.", + "Workers Settings": "\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0639\u0645\u0627\u0644", + "%s is not an instance of \"%s\".": " %s \u0644\u064a\u0633 \u0645\u062b\u064a\u0644\u0627\u064b \u0644\u0640 \"%s\".", + "Unable to find the requested product tax using the provided id": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645", + "Unable to find the requested product tax using the provided identifier.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "The product tax has been created.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.", + "The product tax has been updated": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0645\u0646\u062a\u062c", + "Unable to retrieve the requested tax group using the provided identifier \"%s\".": "\u062a\u0639\u0630\u0631 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645 \"%s\".", + "Permission Manager": "\u0645\u062f\u064a\u0631 \u0627\u0644\u0623\u0630\u0648\u0646\u0627\u062a", + "Manage all permissions and roles": "\u0625\u062f\u0627\u0631\u0629 \u062c\u0645\u064a\u0639 \u0627\u0644\u0623\u0630\u0648\u0646\u0627\u062a \u0648\u0627\u0644\u0623\u062f\u0648\u0627\u0631", + "My Profile": "\u0645\u0644\u0641\u064a", + "Change your personal settings": "\u0642\u0645 \u0628\u062a\u063a\u064a\u064a\u0631 \u0625\u0639\u062f\u0627\u062f\u0627\u062a\u0643 \u0627\u0644\u0634\u062e\u0635\u064a\u0629", + "The permissions has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0623\u0630\u0648\u0646\u0627\u062a.", + "Sunday": "\u064a\u0648\u0645 \u0627\u0644\u0623\u062d\u062f", + "Monday": "\u0627\u0644\u0625\u062b\u0646\u064a\u0646", + "Tuesday": "\u064a\u0648\u0645 \u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "Wednesday": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "Thursday": "\u064a\u0648\u0645 \u0627\u0644\u062e\u0645\u064a\u0633", + "Friday": "\u062c\u0645\u0639\u0629", + "Saturday": "\u0627\u0644\u0633\u0628\u062a", + "The migration has successfully run.": "\u062a\u0645 \u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u062a\u0631\u062d\u064a\u0644 \u0628\u0646\u062c\u0627\u062d.", + "Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.": "\u062a\u0639\u0630\u0631 \u062a\u0647\u064a\u0626\u0629 \u0635\u0641\u062d\u0629 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a. \u0644\u0627 \u064a\u0645\u0643\u0646 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0639\u0631\u0641 \"%s\".", + "Unable to register. The registration is closed.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u062a\u0633\u062c\u064a\u0644. \u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0645\u063a\u0644\u0642.", + "Hold Order Cleared": "\u062a\u0645 \u0645\u0633\u062d \u0623\u0645\u0631 \u0627\u0644\u062d\u062c\u0632", + "Report Refreshed": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u062a\u0642\u0631\u064a\u0631", + "The yearly report has been successfully refreshed for the year \"%s\".": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0633\u0646\u0648\u064a \u0628\u0646\u062c\u0627\u062d \u0644\u0644\u0639\u0627\u0645 \"%s\".", + "[NexoPOS] Activate Your Account": "[NexoPOS] \u062a\u0646\u0634\u064a\u0637 \u062d\u0633\u0627\u0628\u0643", + "[NexoPOS] A New User Has Registered": "[NexoPOS] \u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0645\u0633\u062a\u062e\u062f\u0645 \u062c\u062f\u064a\u062f", + "[NexoPOS] Your Account Has Been Created": "[NexoPOS] \u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628\u0643", + "Unable to find the permission with the namespace \"%s\".": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0625\u0630\u0646 \u0628\u0645\u0633\u0627\u062d\u0629 \u0627\u0644\u0627\u0633\u0645 \"%s\".", + "Take Away": "\u064a\u0628\u0639\u062f", + "The register has been successfully opened": "\u062a\u0645 \u0641\u062a\u062d \u0627\u0644\u0633\u062c\u0644 \u0628\u0646\u062c\u0627\u062d", + "The register has been successfully closed": "\u062a\u0645 \u0625\u063a\u0644\u0627\u0642 \u0627\u0644\u0633\u062c\u0644 \u0628\u0646\u062c\u0627\u062d", + "The provided amount is not allowed. The amount should be greater than \"0\". ": "\u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0645\u0642\u062f\u0645 \u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0628\u0647. \u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0627\u0644\u0645\u0628\u0644\u063a \u0623\u0643\u0628\u0631 \u0645\u0646 \"0 \".", + "The cash has successfully been stored": "\u062a\u0645 \u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0646\u0642\u0648\u062f \u0628\u0646\u062c\u0627\u062d", + "Not enough fund to cash out.": "\u0644\u0627 \u064a\u0648\u062c\u062f \u0635\u0646\u062f\u0648\u0642 \u0643\u0627\u0641 \u0644\u0633\u062d\u0628 \u0627\u0644\u0623\u0645\u0648\u0627\u0644.", + "The cash has successfully been disbursed.": "\u062a\u0645 \u0635\u0631\u0641 \u0627\u0644\u0623\u0645\u0648\u0627\u0644 \u0628\u0646\u062c\u0627\u062d.", + "In Use": "\u0641\u064a \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645", + "Opened": "\u0627\u0641\u062a\u062a\u062d", + "Delete Selected entries": "\u062d\u0630\u0641 \u0627\u0644\u0625\u062f\u062e\u0627\u0644\u0627\u062a \u0627\u0644\u0645\u062d\u062f\u062f\u0629", + "%s entries has been deleted": "\u062a\u0645 \u062d\u0630\u0641 %s \u0645\u0646 \u0627\u0644\u0625\u062f\u062e\u0627\u0644\u0627\u062a", + "%s entries has not been deleted": "\u0644\u0645 \u064a\u062a\u0645 \u062d\u0630\u0641 %s \u0625\u062f\u062e\u0627\u0644\u0627\u062a", + "Unable to find the customer using the provided id.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064a\u0644 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "The customer has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0639\u0645\u064a\u0644.", + "The customer has been created.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0639\u0645\u064a\u0644.", + "Unable to find the customer using the provided ID.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064a\u0644 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "The customer has been edited.": "\u062a\u0645 \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0639\u0645\u064a\u0644.", + "Unable to find the customer using the provided email.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064a\u0644 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0627\u0644\u0645\u0642\u062f\u0645.", + "The customer account has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644.", + "Issuing Coupon Failed": "\u0641\u0634\u0644 \u0627\u0635\u062f\u0627\u0631 \u0627\u0644\u0643\u0648\u0628\u0648\u0646", + "Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u0637\u0628\u064a\u0642 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0645\u0631\u0641\u0642\u0629 \u0628\u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629 \"%s\". \u064a\u0628\u062f\u0648 \u0623\u0646 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0644\u0645 \u062a\u0639\u062f \u0645\u0648\u062c\u0648\u062f\u0629.", + "Unable to find a coupon with the provided code.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0642\u0633\u064a\u0645\u0629 \u0628\u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0642\u062f\u0645.", + "The coupon has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0642\u0633\u064a\u0645\u0629.", + "The group has been created.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629.", + "Crediting": "\u0627\u0626\u062a\u0645\u0627\u0646", + "Deducting": "\u0627\u0642\u062a\u0637\u0627\u0639", + "Order Payment": "\u062f\u0641\u0639 \u0627\u0644\u0646\u0638\u0627\u0645", + "Order Refund": "\u0637\u0644\u0628 \u0627\u0633\u062a\u0631\u062f\u0627\u062f", + "Unknown Operation": "\u0639\u0645\u0644\u064a\u0629 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641\u0629", + "Countable": "\u0642\u0627\u0628\u0644 \u0644\u0644\u0639\u062f", + "Piece": "\u0642\u0637\u0639\u0629", + "GST": "\u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0633\u0644\u0639 \u0648\u0627\u0644\u062e\u062f\u0645\u0627\u062a", + "SGST": "SGST", + "CGST": "CGST", + "Sample Procurement %s": "\u0646\u0645\u0648\u0630\u062c \u0627\u0644\u0627\u0642\u062a\u0646\u0627\u0621 %s", + "generated": "\u0648\u0644\u062f\u062a", + "The media has been deleted": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0648\u0633\u0627\u0626\u0637", + "Unable to find the media.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0648\u0633\u0627\u0626\u0637.", + "Unable to find the requested file.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0645\u0637\u0644\u0648\u0628.", + "Unable to find the media entry": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0625\u062f\u062e\u0627\u0644 \u0627\u0644\u0648\u0633\u0627\u0626\u0637", + "Payment Types": "\u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u062f\u0641\u0639", + "Medias": "\u0627\u0644\u0648\u0633\u0627\u0626\u0637", + "List": "\u0642\u0627\u0626\u0645\u0629", + "Customers Groups": "\u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Create Group": "\u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0629", + "Reward Systems": "\u0623\u0646\u0638\u0645\u0629 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a", + "Create Reward": "\u0623\u0646\u0634\u0626 \u0645\u0643\u0627\u0641\u0623\u0629", + "List Coupons": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0642\u0633\u0627\u0626\u0645", + "Providers": "\u0627\u0644\u0645\u0648\u0641\u0631\u0648\u0646", + "Create A Provider": "\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0648\u0641\u0631", + "Accounting": "\u0645\u062d\u0627\u0633\u0628\u0629", + "Inventory": "\u0627\u0644\u0645\u062e\u0632\u0648\u0646", + "Create Product": "\u0625\u0646\u0634\u0627\u0621 \u0645\u0646\u062a\u062c", + "Create Category": "\u0625\u0646\u0634\u0627\u0621 \u0641\u0626\u0629", + "Create Unit": "\u0625\u0646\u0634\u0627\u0621 \u0648\u062d\u062f\u0629", + "Unit Groups": "\u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "Create Unit Groups": "\u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "Taxes Groups": "\u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0636\u0631\u0627\u0626\u0628", + "Create Tax Groups": "\u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0636\u0631\u064a\u0628\u064a\u0629", + "Create Tax": "\u0625\u0646\u0634\u0627\u0621 \u0636\u0631\u064a\u0628\u0629", + "Modules": "\u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "Upload Module": "\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629", + "Users": "\u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u0648\u0646", + "Create User": "\u0625\u0646\u0634\u0627\u0621 \u0645\u0633\u062a\u062e\u062f\u0645", + "Roles": "\u0627\u0644\u0623\u062f\u0648\u0627\u0631", + "Create Roles": "\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0623\u062f\u0648\u0627\u0631", + "Permissions Manager": "\u0645\u062f\u064a\u0631 \u0627\u0644\u0623\u0630\u0648\u0646\u0627\u062a", + "Procurements": "\u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Reports": "\u0627\u0644\u062a\u0642\u0627\u0631\u064a\u0631", + "Sale Report": "\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0628\u064a\u0639", + "Incomes & Loosses": "\u0627\u0644\u062f\u062e\u0644 \u0648\u0641\u0642\u062f\u0627\u0646", + "Sales By Payments": "\u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u0639\u0646 \u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0627\u062a", + "Invoice Settings": "\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629", + "Workers": "\u0639\u0645\u0627\u0644", + "Unable to locate the requested module.": "\u062a\u0639\u0630\u0631 \u062a\u062d\u062f\u064a\u062f \u0645\u0648\u0642\u0639 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629.", + "The module \"%s\" has been disabled as the dependency \"%s\" is missing. ": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \"%s\" \u0644\u0623\u0646 \u0627\u0644\u062a\u0628\u0639\u064a\u0629 \"%s\" \u0645\u0641\u0642\u0648\u062f\u0629.", + "The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \"%s\" \u0646\u0638\u0631\u064b\u0627 \u0644\u0639\u062f\u0645 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u062a\u0628\u0639\u064a\u0629 \"%s\".", + "The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \"%s\"\u0644\u0623\u0646 \u0627\u0644\u062a\u0628\u0639\u064a\u0629 \"%s\"\u0644\u064a\u0633\u062a \u0639\u0644\u0649 \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u062f\u0646\u0649 \u0645\u0646 \u0627\u0644\u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \"%s\".", + "The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \"%s\"\u0644\u0623\u0646 \u0627\u0644\u062a\u0628\u0639\u064a\u0629 \"%s\"\u0645\u0648\u062c\u0648\u062f\u0629 \u0639\u0644\u0649 \u0625\u0635\u062f\u0627\u0631 \u064a\u062a\u062c\u0627\u0648\u0632 \"%s\"\u0627\u0644\u0645\u0648\u0635\u0649 \u0628\u0647. ", + "Unable to detect the folder from where to perform the installation.": "\u062a\u0639\u0630\u0631 \u0627\u0643\u062a\u0634\u0627\u0641 \u0627\u0644\u0645\u062c\u0644\u062f \u0645\u0646 \u0645\u0643\u0627\u0646 \u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u062a\u062b\u0628\u064a\u062a.", + "The uploaded file is not a valid module.": "\u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0630\u064a \u062a\u0645 \u062a\u062d\u0645\u064a\u0644\u0647 \u0644\u064a\u0633 \u0648\u062d\u062f\u0629 \u0646\u0645\u0637\u064a\u0629 \u0635\u0627\u0644\u062d\u0629.", + "The module has been successfully installed.": "\u062a\u0645 \u062a\u062b\u0628\u064a\u062a \u0627\u0644\u0648\u062d\u062f\u0629 \u0628\u0646\u062c\u0627\u062d.", + "The migration run successfully.": "\u062a\u0645 \u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u062a\u0631\u062d\u064a\u0644 \u0628\u0646\u062c\u0627\u062d.", + "The module has correctly been enabled.": "\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0648\u062d\u062f\u0629 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d.", + "Unable to enable the module.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0648\u062d\u062f\u0629.", + "The Module has been disabled.": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629.", + "Unable to disable the module.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629.", + "Unable to proceed, the modules management is disabled.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a \u0645\u0639\u0637\u0644\u0629.", + "Missing required parameters to create a notification": "\u0627\u0644\u0645\u0639\u0644\u0645\u0627\u062a \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0645\u0641\u0642\u0648\u062f\u0629 \u0644\u0625\u0646\u0634\u0627\u0621 \u0625\u0634\u0639\u0627\u0631", + "The order has been placed.": "\u062a\u0645 \u0648\u0636\u0639 \u0627\u0644\u0637\u0644\u0628.", + "The percentage discount provided is not valid.": "\u0627\u0644\u0646\u0633\u0628\u0629 \u0627\u0644\u0645\u0626\u0648\u064a\u0629 \u0644\u0644\u062e\u0635\u0645 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d\u0629.", + "A discount cannot exceed the sub total value of an order.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u0623\u0646 \u064a\u062a\u062c\u0627\u0648\u0632 \u0627\u0644\u062e\u0635\u0645 \u0627\u0644\u0642\u064a\u0645\u0629 \u0627\u0644\u0625\u062c\u0645\u0627\u0644\u064a\u0629 \u0627\u0644\u0641\u0631\u0639\u064a\u0629 \u0644\u0623\u0645\u0631 \u0645\u0627.", + "No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.": "\u0644\u0627 \u064a\u0648\u062c\u062f \u062f\u0641\u0639 \u0645\u062a\u0648\u0642\u0639 \u0641\u064a \u0627\u0644\u0648\u0642\u062a \u0627\u0644\u062d\u0627\u0644\u064a. \u0625\u0630\u0627 \u0623\u0631\u0627\u062f \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u062f\u0641\u0639 \u0645\u0628\u0643\u0631\u064b\u0627 \u060c \u0641\u0641\u0643\u0631 \u0641\u064a \u062a\u0639\u062f\u064a\u0644 \u062a\u0627\u0631\u064a\u062e \u0633\u062f\u0627\u062f \u0627\u0644\u0623\u0642\u0633\u0627\u0637.", + "The payment has been saved.": "\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u062f\u0641\u0639.", + "Unable to edit an order that is completely paid.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u0630\u064a \u062a\u0645 \u062f\u0641\u0639\u0647 \u0628\u0627\u0644\u0643\u0627\u0645\u0644.", + "Unable to proceed as one of the previous submitted payment is missing from the order.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0644\u0623\u0646 \u0625\u062d\u062f\u0649 \u0627\u0644\u062f\u0641\u0639\u0629 \u0627\u0644\u0645\u0631\u0633\u0644\u0629 \u0627\u0644\u0633\u0627\u0628\u0642\u0629 \u0645\u0641\u0642\u0648\u062f\u0629 \u0645\u0646 \u0627\u0644\u0637\u0644\u0628.", + "The order payment status cannot switch to hold as a payment has already been made on that order.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u0628\u062f\u064a\u0644 \u062d\u0627\u0644\u0629 \u062f\u0641\u0639 \u0627\u0644\u0637\u0644\u0628 \u0644\u0644\u062a\u0639\u0644\u064a\u0642 \u062d\u064a\u062b \u062a\u0645 \u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u062f\u0641\u0639 \u0628\u0627\u0644\u0641\u0639\u0644 \u0644\u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628.", + "Unable to proceed. One of the submitted payment type is not supported.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627. \u0623\u062d\u062f \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0645\u0642\u062f\u0645\u0629 \u063a\u064a\u0631 \u0645\u0639\u062a\u0645\u062f.", + "Unnamed Product": "\u0645\u0646\u062a\u062c \u063a\u064a\u0631 \u0645\u0633\u0645\u0649", + "Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0627\u0644\u0645\u0646\u062a\u062c \"%s\" \u0628\u0647 \u0648\u062d\u062f\u0629 \u0644\u0627 \u064a\u0645\u0643\u0646 \u0627\u0633\u062a\u0631\u062f\u0627\u062f\u0647\u0627. \u0631\u0628\u0645\u0627 \u062a\u0645 \u062d\u0630\u0641\u0647.", + "Unable to find the customer using the provided ID. The order creation has failed.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064a\u0644 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645. \u0641\u0634\u0644 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0623\u0645\u0631.", + "Unable to proceed a refund on an unpaid order.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u0623\u0645\u0648\u0627\u0644 \u0639\u0644\u0649 \u0637\u0644\u0628 \u063a\u064a\u0631 \u0645\u062f\u0641\u0648\u0639.", + "The current credit has been issued from a refund.": "\u062a\u0645 \u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646 \u0627\u0644\u062d\u0627\u0644\u064a \u0645\u0646 \u0627\u0633\u062a\u0631\u062f\u0627\u062f.", + "The order has been successfully refunded.": "\u062a\u0645 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u0637\u0644\u0628 \u0628\u0646\u062c\u0627\u062d.", + "unable to proceed to a refund as the provided status is not supported.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0644\u0623\u0646 \u0627\u0644\u062d\u0627\u0644\u0629 \u0627\u0644\u0645\u0642\u062f\u0645\u0629 \u063a\u064a\u0631 \u0645\u062f\u0639\u0648\u0645\u0629.", + "The product %s has been successfully refunded.": "\u062a\u0645 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u0645\u0646\u062a\u062c %s \u0628\u0646\u062c\u0627\u062d.", + "Unable to find the order product using the provided id.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0645\u0646\u062a\u062c \u0627\u0644\u0637\u0644\u0628 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \"%s\" \u0643\u0645\u062d\u0648\u0631 \u0648 \"%s\" \u0643\u0645\u0639\u0631\u0641", + "Unable to fetch the order as the provided pivot argument is not supported.": "\u062a\u0639\u0630\u0631 \u062c\u0644\u0628 \u0627\u0644\u0637\u0644\u0628 \u0644\u0623\u0646 \u0627\u0644\u0648\u0633\u064a\u0637\u0629 \u0627\u0644\u0645\u062d\u0648\u0631\u064a\u0629 \u0627\u0644\u0645\u062a\u0648\u0641\u0631\u0629 \u063a\u064a\u0631 \u0645\u062f\u0639\u0648\u0645\u0629.", + "The product has been added to the order \"%s\"": "\u062a\u0645\u062a \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0645\u0646\u062a\u062c \u0625\u0644\u0649 \u0627\u0644\u0637\u0644\u0628 \"%s\"", + "the order has been successfully computed.": "\u062a\u0645 \u0627\u062d\u062a\u0633\u0627\u0628 \u0627\u0644\u0637\u0644\u0628 \u0628\u0646\u062c\u0627\u062d.", + "The order has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0637\u0644\u0628.", + "The product has been successfully deleted from the order.": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0645\u0646\u062a\u062c \u0628\u0646\u062c\u0627\u062d \u0645\u0646 \u0627\u0644\u0637\u0644\u0628.", + "Unable to find the requested product on the provider order.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0641\u064a \u0637\u0644\u0628 \u0627\u0644\u0645\u0648\u0641\u0631.", + "Ongoing": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u0646\u0641\u064a\u0630", + "Ready": "\u0645\u0633\u062a\u0639\u062f", + "Not Available": "\u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631", + "Failed": "\u0628\u0627\u0621\u062a \u0628\u0627\u0644\u0641\u0634\u0644", + "Unpaid Orders Turned Due": "\u062a\u062d\u0648\u0644\u062a \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u063a\u064a\u0631 \u0627\u0644\u0645\u0633\u062f\u062f\u0629 \u0625\u0644\u0649 \u0645\u0648\u0639\u062f \u0627\u0633\u062a\u062d\u0642\u0627\u0642\u0647\u0627", + "No orders to handle for the moment.": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0623\u0648\u0627\u0645\u0631 \u0644\u0644\u062a\u0639\u0627\u0645\u0644 \u0645\u0639\u0647\u0627 \u0641\u064a \u0627\u0644\u0648\u0642\u062a \u0627\u0644\u062d\u0627\u0644\u064a.", + "The order has been correctly voided.": "\u062a\u0645 \u0625\u0628\u0637\u0627\u0644 \u0627\u0644\u0623\u0645\u0631 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d.", + "Unable to edit an already paid instalment.": "\u062a\u0639\u0630\u0631 \u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0642\u0633\u0637 \u0627\u0644\u0645\u062f\u0641\u0648\u0639 \u0628\u0627\u0644\u0641\u0639\u0644.", + "The instalment has been saved.": "\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0642\u0633\u0637.", + "The instalment has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0642\u0633\u0637.", + "The defined amount is not valid.": "\u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0645\u062d\u062f\u062f \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "No further instalments is allowed for this order. The total instalment already covers the order total.": "\u0644\u0627 \u064a\u0633\u0645\u062d \u0628\u0623\u0642\u0633\u0627\u0637 \u0623\u062e\u0631\u0649 \u0644\u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628. \u064a\u063a\u0637\u064a \u0627\u0644\u0642\u0633\u0637 \u0627\u0644\u0625\u062c\u0645\u0627\u0644\u064a \u0628\u0627\u0644\u0641\u0639\u0644 \u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0637\u0644\u0628.", + "The instalment has been created.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0642\u0633\u0637.", + "The provided status is not supported.": "\u0627\u0644\u062d\u0627\u0644\u0629 \u0627\u0644\u0645\u0642\u062f\u0645\u0629 \u063a\u064a\u0631 \u0645\u062f\u0639\u0648\u0645\u0629.", + "The order has been successfully updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0637\u0644\u0628 \u0628\u0646\u062c\u0627\u062d.", + "Unable to find the requested procurement using the provided identifier.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "Unable to find the assigned provider.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0648\u0641\u0631 \u0627\u0644\u0645\u0639\u064a\u0646.", + "The procurement has been created.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.", + "Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u0631\u064a\u0631 \u0639\u0645\u0644\u064a\u0629 \u0634\u0631\u0627\u0621 \u062a\u0645 \u062a\u062e\u0632\u064a\u0646\u0647\u0627 \u0628\u0627\u0644\u0641\u0639\u0644. \u064a\u0631\u062c\u0649 \u0627\u0644\u0646\u0638\u0631 \u0641\u064a \u0627\u0644\u0623\u062f\u0627\u0621 \u0648\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u062e\u0632\u0648\u0646.", + "The provider has been edited.": "\u062a\u0645 \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0645\u0648\u0641\u0631.", + "Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0645\u0639\u0631\u0641 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a \u0644\u0644\u0645\u0646\u062a\u062c \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0631\u062c\u0639 \"%s\" \u0643\u0640 \"%s\"", + "The operation has completed.": "\u0627\u0643\u062a\u0645\u0644\u062a \u0627\u0644\u0639\u0645\u0644\u064a\u0629.", + "The procurement has been refreshed.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.", + "The procurement has been reset.": "\u062a\u0645\u062a \u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.", + "The procurement products has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0634\u0631\u0627\u0621.", + "The procurement product has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0645\u0646\u062a\u062c \u0627\u0644\u0634\u0631\u0627\u0621.", + "Unable to find the procurement product using the provided id.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0645\u0646\u062a\u062c \u0627\u0644\u0634\u0631\u0627\u0621 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "The product %s has been deleted from the procurement %s": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0645\u0646\u062a\u062c %s \u0645\u0646 \u0627\u0644\u062a\u062f\u0628\u064a\u0631 %s", + "The product with the following ID \"%s\" is not initially included on the procurement": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0636\u0645\u064a\u0646 \u0627\u0644\u0645\u0646\u062a\u062c \u0628\u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u062a\u0627\u0644\u064a \"%s\" \u0641\u064a \u0627\u0644\u0628\u062f\u0627\u064a\u0629 \u0641\u064a \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0634\u0631\u0627\u0621", + "The procurement products has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0634\u0631\u0627\u0621.", + "Procurement Automatically Stocked": "\u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0645\u062e\u0632\u0646\u0629 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627", + "Draft": "\u0645\u0634\u0631\u0648\u0639", + "The category has been created": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0641\u0626\u0629", + "Unable to find the product using the provided id.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "Unable to find the requested product using the provided SKU.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 SKU \u0627\u0644\u0645\u0642\u062f\u0645.", + "The variable product has been created.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u062a\u063a\u064a\u0631.", + "The provided barcode \"%s\" is already in use.": "\u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a \u0627\u0644\u0645\u0642\u062f\u0645 \"%s\" \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u0627\u0644\u0641\u0639\u0644.", + "The provided SKU \"%s\" is already in use.": "SKU \u0627\u0644\u0645\u0642\u062f\u0645 \"%s\" \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u0627\u0644\u0641\u0639\u0644.", + "The product has been saved.": "\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0645\u0646\u062a\u062c.", + "The provided barcode is already in use.": "\u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a \u0627\u0644\u0645\u0642\u062f\u0645 \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u0627\u0644\u0641\u0639\u0644.", + "The provided SKU is already in use.": "\u0643\u0648\u062f \u0627\u0644\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u062a\u0639\u0631\u064a\u0641\u064a \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u0627\u0644\u0641\u0639\u0644.", + "The product has been updated": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0645\u0646\u062a\u062c", + "The variable product has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u062a\u063a\u064a\u0631.", + "The product variations has been reset": "\u062a\u0645\u062a \u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0623\u0634\u0643\u0627\u0644 \u0627\u0644\u0645\u0646\u062a\u062c", + "The product has been reset.": "\u062a\u0645 \u0625\u0639\u0627\u062f\u0629 \u0636\u0628\u0637 \u0627\u0644\u0645\u0646\u062a\u062c.", + "The product \"%s\" has been successfully deleted": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0645\u0646\u062a\u062c \"%s\" \u0628\u0646\u062c\u0627\u062d", + "Unable to find the requested variation using the provided ID.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0634\u0643\u0644 \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "The product stock has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c.", + "The action is not an allowed operation.": "\u0647\u0630\u0627 \u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0644\u064a\u0633 \u0639\u0645\u0644\u064a\u0629 \u0645\u0633\u0645\u0648\u062d \u0628\u0647\u0627.", + "The product quantity has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0643\u0645\u064a\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.", + "There is no variations to delete.": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0627\u062e\u062a\u0644\u0627\u0641\u0627\u062a \u0644\u062d\u0630\u0641\u0647\u0627.", + "There is no products to delete.": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0645\u0646\u062a\u062c\u0627\u062a \u0644\u062d\u0630\u0641\u0647\u0627.", + "The product variation has been successfully created.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u062a\u0646\u0648\u0639 \u0627\u0644\u0645\u0646\u062a\u062c \u0628\u0646\u062c\u0627\u062d.", + "The product variation has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0634\u0643\u0644 \u0627\u0644\u0645\u0646\u062a\u062c.", + "The provider has been created.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0648\u0641\u0631.", + "The provider has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0645\u0648\u0641\u0631.", + "Unable to find the provider using the specified id.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0648\u0641\u0631 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u062d\u062f\u062f.", + "The provider has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0645\u0648\u0641\u0631.", + "Unable to find the provider using the specified identifier.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0648\u0641\u0631 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u062d\u062f\u062f.", + "The provider account has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0648\u0641\u0631.", + "The procurement payment has been deducted.": "\u062a\u0645 \u062e\u0635\u0645 \u062f\u0641\u0639\u0629 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.", + "The dashboard report has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u062a\u0642\u0631\u064a\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629.", + "Untracked Stock Operation": "\u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u063a\u064a\u0631 \u0627\u0644\u0645\u062a\u0639\u0642\u0628", + "Unsupported action": "\u0625\u062c\u0631\u0627\u0621 \u063a\u064a\u0631 \u0645\u062f\u0639\u0648\u0645", + "The expense has been correctly saved.": "\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0645\u0635\u0627\u0631\u064a\u0641 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d.", + "The report has been computed successfully.": "\u062a\u0645 \u0627\u062d\u062a\u0633\u0627\u0628 \u0627\u0644\u062a\u0642\u0631\u064a\u0631 \u0628\u0646\u062c\u0627\u062d.", + "The table has been truncated.": "\u062a\u0645 \u0642\u0637\u0639 \u0627\u0644\u062c\u062f\u0648\u0644.", + "Untitled Settings Page": "\u0635\u0641\u062d\u0629 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0628\u062f\u0648\u0646 \u0639\u0646\u0648\u0627\u0646", + "No description provided for this settings page.": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0648\u0635\u0641 \u0644\u0635\u0641\u062d\u0629 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0647\u0630\u0647.", + "The form has been successfully saved.": "\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u0628\u0646\u062c\u0627\u062d.", + "Unable to reach the host": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u0645\u0636\u064a\u0641", + "Unable to connect to the database using the credentials provided.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0627\u0639\u062a\u0645\u0627\u062f \u0627\u0644\u0645\u0642\u062f\u0645\u0629.", + "Unable to select the database.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u062f\u064a\u062f \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a.", + "Access denied for this user.": "\u0627\u0644\u0648\u0635\u0648\u0644 \u0645\u0631\u0641\u0648\u0636 \u0644\u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645.", + "The connexion with the database was successful": "\u0643\u0627\u0646 \u0627\u0644\u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0646\u0627\u062c\u062d\u064b\u0627", + "Cash": "\u0627\u0644\u0633\u064a\u0648\u0644\u0629 \u0627\u0644\u0646\u0642\u062f\u064a\u0629", + "Bank Payment": "\u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0645\u0635\u0631\u0641\u064a\u0629", + "NexoPOS has been successfully installed.": "\u062a\u0645 \u062a\u062b\u0628\u064a\u062a NexoPOS \u0628\u0646\u062c\u0627\u062d.", + "A tax cannot be his own parent.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0648\u0627\u0644\u062f\u064a\u0647.", + "The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".": "\u0627\u0644\u062a\u0633\u0644\u0633\u0644 \u0627\u0644\u0647\u0631\u0645\u064a \u0644\u0644\u0636\u0631\u0627\u0626\u0628 \u0645\u062d\u062f\u062f \u0628\u0640 1. \u064a\u062c\u0628 \u0623\u0644\u0627 \u064a\u0643\u0648\u0646 \u0646\u0648\u0639 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0644\u0644\u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0641\u0631\u0639\u064a\u0629 \u0645\u0639\u064a\u0651\u0646\u064b\u0627 \u0639\u0644\u0649 \"\u0645\u062c\u0645\u0639\u0629 \".", + "Unable to find the requested tax using the provided identifier.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "The tax group has been correctly saved.": "\u062a\u0645 \u062d\u0641\u0638 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d.", + "The tax has been correctly created.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d.", + "The tax has been successfully deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0628\u0646\u062c\u0627\u062d.", + "The Unit Group has been created.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a.", + "The unit group %s has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a %s.", + "Unable to find the unit group to which this unit is attached.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u062a\u064a \u062a\u062a\u0635\u0644 \u0628\u0647\u0627 \u0647\u0630\u0647 \u0627\u0644\u0648\u062d\u062f\u0629.", + "The unit has been saved.": "\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0648\u062d\u062f\u0629.", + "Unable to find the Unit using the provided id.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0648\u062d\u062f\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "The unit has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0648\u062d\u062f\u0629.", + "The unit group %s has more than one base unit": "\u062a\u062d\u062a\u0648\u064a \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a %s \u0639\u0644\u0649 \u0623\u0643\u062b\u0631 \u0645\u0646 \u0648\u062d\u062f\u0629 \u0623\u0633\u0627\u0633\u064a\u0629 \u0648\u0627\u062d\u062f\u0629", + "The unit has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0648\u062d\u062f\u0629.", + "Clone of \"%s\"": "\u0646\u0633\u062e\u0629 \u0645\u0646 \"%s\"", + "The role has been cloned.": "\u062a\u0645 \u0627\u0633\u062a\u0646\u0633\u0627\u062e \u0627\u0644\u062f\u0648\u0631.", + "unable to find this validation class %s.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0641\u0626\u0629 \u0627\u0644\u062a\u062d\u0642\u0642 \u0647\u0630\u0647 %s.", + "Procurement Cash Flow Account": "\u062d\u0633\u0627\u0628 \u0627\u0644\u062a\u062f\u0641\u0642 \u0627\u0644\u0646\u0642\u062f\u064a \u0644\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Sale Cash Flow Account": "\u062d\u0633\u0627\u0628 \u0627\u0644\u062a\u062f\u0641\u0642 \u0627\u0644\u0646\u0642\u062f\u064a \u0644\u0644\u0628\u064a\u0639", + "Sales Refunds Account": "\u062d\u0633\u0627\u0628 \u0645\u0631\u062f\u0648\u062f\u0627\u062a \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a", + "Stock return for spoiled items will be attached to this account": "\u0633\u064a\u062a\u0645 \u0625\u0631\u0641\u0627\u0642 \u0625\u0631\u062c\u0627\u0639 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0644\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0641\u0627\u0633\u062f\u0629 \u0628\u0647\u0630\u0627 \u0627\u0644\u062d\u0633\u0627\u0628", + "Enable Reward": "\u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629", + "Will activate the reward system for the customers.": "\u0633\u064a\u062a\u0645 \u062a\u0641\u0639\u064a\u0644 \u0646\u0638\u0627\u0645 \u0627\u0644\u0645\u0643\u0627\u0641\u0622\u062a \u0644\u0644\u0639\u0645\u0644\u0627\u0621.", + "Default Customer Account": "\u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a", + "Default Customer Group": "\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629", + "Select to which group each new created customers are assigned to.": "\u062d\u062f\u062f \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u062a\u064a \u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0643\u0644 \u0639\u0645\u0644\u0627\u0621 \u062c\u062f\u062f \u0644\u0647\u0627.", + "Enable Credit & Account": "\u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646 \u0648\u0627\u0644\u062d\u0633\u0627\u0628", + "The customers will be able to make deposit or obtain credit.": "\u0633\u064a\u062a\u0645\u0643\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0645\u0646 \u0627\u0644\u0625\u064a\u062f\u0627\u0639 \u0623\u0648 \u0627\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646.", + "Store Name": "\u0627\u0633\u0645 \u0627\u0644\u0645\u062a\u062c\u0631", + "This is the store name.": "\u0647\u0630\u0627 \u0647\u0648 \u0627\u0633\u0645 \u0627\u0644\u0645\u062a\u062c\u0631.", + "Store Address": "\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0645\u062a\u062c\u0631", + "The actual store address.": "\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0645\u062a\u062c\u0631 \u0627\u0644\u0641\u0639\u0644\u064a.", + "Store City": "\u0633\u062a\u0648\u0631 \u0633\u064a\u062a\u064a", + "The actual store city.": "\u0645\u062f\u064a\u0646\u0629 \u0627\u0644\u0645\u062a\u062c\u0631 \u0627\u0644\u0641\u0639\u0644\u064a\u0629.", + "Store Phone": "\u0647\u0627\u062a\u0641 \u0627\u0644\u0645\u062a\u062c\u0631", + "The phone number to reach the store.": "\u0631\u0642\u0645 \u0627\u0644\u0647\u0627\u062a\u0641 \u0627\u0644\u0645\u0631\u0627\u062f \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u0645\u062a\u062c\u0631.", + "Store Email": "\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0627\u0644\u062e\u0627\u0635 \u0628\u0627\u0644\u0645\u062a\u062c\u0631", + "The actual store email. Might be used on invoice or for reports.": "\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0627\u0644\u0641\u0639\u0644\u064a \u0644\u0644\u0645\u062a\u062c\u0631. \u064a\u0645\u0643\u0646 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u0627 \u0641\u064a \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629 \u0623\u0648 \u0627\u0644\u062a\u0642\u0627\u0631\u064a\u0631.", + "Store PO.Box": "\u062a\u062e\u0632\u064a\u0646 \u0635\u0646\u062f\u0648\u0642 \u0627\u0644\u0628\u0631\u064a\u062f", + "The store mail box number.": "\u0631\u0642\u0645 \u0635\u0646\u062f\u0648\u0642 \u0628\u0631\u064a\u062f \u0627\u0644\u0645\u062a\u062c\u0631.", + "Store Fax": "\u0641\u0627\u0643\u0633 \u0627\u0644\u0645\u062a\u062c\u0631", + "The store fax number.": "\u0631\u0642\u0645 \u0641\u0627\u0643\u0633 \u0627\u0644\u0645\u062a\u062c\u0631.", + "Store Additional Information": "\u062a\u062e\u0632\u064a\u0646 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0625\u0636\u0627\u0641\u064a\u0629", + "Store additional information.": "\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u0625\u0636\u0627\u0641\u064a\u0629.", + "Store Square Logo": "\u0645\u062a\u062c\u0631 \u0627\u0644\u0634\u0639\u0627\u0631 \u0627\u0644\u0645\u0631\u0628\u0639", + "Choose what is the square logo of the store.": "\u0627\u062e\u062a\u0631 \u0645\u0627 \u0647\u0648 \u0627\u0644\u0634\u0639\u0627\u0631 \u0627\u0644\u0645\u0631\u0628\u0639 \u0644\u0644\u0645\u062a\u062c\u0631.", + "Store Rectangle Logo": "\u0645\u062a\u062c\u0631 \u0634\u0639\u0627\u0631 \u0627\u0644\u0645\u0633\u062a\u0637\u064a\u0644", + "Choose what is the rectangle logo of the store.": "\u0627\u062e\u062a\u0631 \u0645\u0627 \u0647\u0648 \u0634\u0639\u0627\u0631 \u0627\u0644\u0645\u062a\u062c\u0631 \u0627\u0644\u0645\u0633\u062a\u0637\u064a\u0644.", + "Define the default fallback language.": "\u062d\u062f\u062f \u0627\u0644\u0644\u063a\u0629 \u0627\u0644\u0627\u062d\u062a\u064a\u0627\u0637\u064a\u0629 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629.", + "Currency": "\u0639\u0645\u0644\u0629", + "Currency Symbol": "\u0631\u0645\u0632 \u0627\u0644\u0639\u0645\u0644\u0629", + "This is the currency symbol.": "\u0647\u0630\u0627 \u0647\u0648 \u0631\u0645\u0632 \u0627\u0644\u0639\u0645\u0644\u0629.", + "Currency ISO": "ISO \u0627\u0644\u0639\u0645\u0644\u0629", + "The international currency ISO format.": "\u062a\u0646\u0633\u064a\u0642 ISO \u0644\u0644\u0639\u0645\u0644\u0629 \u0627\u0644\u062f\u0648\u0644\u064a\u0629.", + "Currency Position": "\u0648\u0636\u0639 \u0627\u0644\u0639\u0645\u0644\u0629", + "Before the amount": "\u0642\u0628\u0644 \u0627\u0644\u0645\u0628\u0644\u063a", + "After the amount": "\u0628\u0639\u062f \u0627\u0644\u0645\u0628\u0644\u063a", + "Define where the currency should be located.": "\u062d\u062f\u062f \u0645\u0643\u0627\u0646 \u062a\u0648\u0627\u062c\u062f \u0627\u0644\u0639\u0645\u0644\u0629.", + "Preferred Currency": "\u0627\u0644\u0639\u0645\u0644\u0629 \u0627\u0644\u0645\u0641\u0636\u0644\u0629", + "ISO Currency": "\u0639\u0645\u0644\u0629 ISO", + "Symbol": "\u0631\u0645\u0632", + "Determine what is the currency indicator that should be used.": "\u062d\u062f\u062f \u0645\u0627 \u0647\u0648 \u0645\u0624\u0634\u0631 \u0627\u0644\u0639\u0645\u0644\u0629 \u0627\u0644\u0630\u064a \u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647.", + "Currency Thousand Separator": "\u0641\u0627\u0635\u0644 \u0622\u0644\u0627\u0641 \u0627\u0644\u0639\u0645\u0644\u0627\u062a", + "Currency Decimal Separator": "\u0641\u0627\u0635\u0644 \u0639\u0634\u0631\u064a \u0644\u0644\u0639\u0645\u0644\u0629", + "Define the symbol that indicate decimal number. By default \".\" is used.": "\u062d\u062f\u062f \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0630\u064a \u064a\u0634\u064a\u0631 \u0625\u0644\u0649 \u0627\u0644\u0631\u0642\u0645 \u0627\u0644\u0639\u0634\u0631\u064a. \u0628\u0634\u0643\u0644 \u0627\u0641\u062a\u0631\u0627\u0636\u064a \u060c \u064a\u062a\u0645 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \".\".", + "Currency Precision": "\u062f\u0642\u0629 \u0627\u0644\u0639\u0645\u0644\u0629", + "%s numbers after the decimal": " %s \u0623\u0631\u0642\u0627\u0645 \u0628\u0639\u062f \u0627\u0644\u0641\u0627\u0635\u0644\u0629 \u0627\u0644\u0639\u0634\u0631\u064a\u0629", + "Date Format": "\u0635\u064a\u063a\u0629 \u0627\u0644\u062a\u0627\u0631\u064a\u062e", + "This define how the date should be defined. The default format is \"Y-m-d\".": "\u0647\u0630\u0627 \u064a\u062d\u062f\u062f \u0643\u064a\u0641 \u064a\u062c\u0628 \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u062a\u0627\u0631\u064a\u062e. \u0627\u0644\u062a\u0646\u0633\u064a\u0642 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a \u0647\u0648 \"Y-m-d\".", + "Registration": "\u062a\u0633\u062c\u064a\u0644", + "Registration Open": "\u0641\u062a\u062d \u0627\u0644\u062a\u0633\u062c\u064a\u0644", + "Determine if everyone can register.": "\u062a\u062d\u062f\u064a\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u0645\u0643\u0646 \u0644\u0644\u062c\u0645\u064a\u0639 \u0627\u0644\u062a\u0633\u062c\u064a\u0644.", + "Registration Role": "\u062f\u0648\u0631 \u0627\u0644\u062a\u0633\u062c\u064a\u0644", + "Select what is the registration role.": "\u062d\u062f\u062f \u0645\u0627 \u0647\u0648 \u062f\u0648\u0631 \u0627\u0644\u062a\u0633\u062c\u064a\u0644.", + "Requires Validation": "\u064a\u062a\u0637\u0644\u0628 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0627\u0644\u0635\u062d\u0629", + "Force account validation after the registration.": "\u0641\u0631\u0636 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0635\u062d\u0629 \u0627\u0644\u062d\u0633\u0627\u0628 \u0628\u0639\u062f \u0627\u0644\u062a\u0633\u062c\u064a\u0644.", + "Allow Recovery": "\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0644\u0627\u0633\u062a\u0631\u062f\u0627\u062f", + "Allow any user to recover his account.": "\u0627\u0644\u0633\u0645\u0627\u062d \u0644\u0623\u064a \u0645\u0633\u062a\u062e\u062f\u0645 \u0628\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u062d\u0633\u0627\u0628\u0647.", + "Receipts": "\u0627\u0644\u0625\u064a\u0635\u0627\u0644\u0627\u062a", + "Receipt Template": "\u0646\u0645\u0648\u0630\u062c \u0627\u0644\u0625\u064a\u0635\u0627\u0644", + "Default": "\u062a\u0642\u0635\u064a\u0631", + "Choose the template that applies to receipts": "\u0627\u062e\u062a\u0631 \u0627\u0644\u0642\u0627\u0644\u0628 \u0627\u0644\u0630\u064a \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0625\u064a\u0635\u0627\u0644\u0627\u062a", + "Receipt Logo": "\u0634\u0639\u0627\u0631 \u0627\u0644\u0627\u0633\u062a\u0644\u0627\u0645", + "Provide a URL to the logo.": "\u0623\u062f\u062e\u0644 \u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0634\u0639\u0627\u0631.", + "Merge Products On Receipt\/Invoice": "\u062f\u0645\u062c \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0639\u0646\u062f \u0627\u0644\u0627\u0633\u062a\u0644\u0627\u0645 \/ \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629", + "All similar products will be merged to avoid a paper waste for the receipt\/invoice.": "\u0633\u064a\u062a\u0645 \u062f\u0645\u062c \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0645\u0627\u062b\u0644\u0629 \u0644\u062a\u062c\u0646\u0628 \u0625\u0647\u062f\u0627\u0631 \u0627\u0644\u0648\u0631\u0642 \u0644\u0644\u0625\u064a\u0635\u0627\u0644 \/ \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629.", + "Receipt Footer": "\u062a\u0630\u064a\u064a\u0644 \u0627\u0644\u0625\u064a\u0635\u0627\u0644", + "If you would like to add some disclosure at the bottom of the receipt.": "\u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u0631\u063a\u0628 \u0641\u064a \u0625\u0636\u0627\u0641\u0629 \u0628\u0639\u0636 \u0627\u0644\u0625\u0641\u0635\u0627\u062d \u0641\u064a \u0623\u0633\u0641\u0644 \u0627\u0644\u0625\u064a\u0635\u0627\u0644.", + "Column A": "\u0627\u0644\u0639\u0645\u0648\u062f \u0623", + "Column B": "\u0627\u0644\u0639\u0645\u0648\u062f \u0628", + "Order Code Type": "\u0646\u0648\u0639 \u0631\u0645\u0632 \u0627\u0644\u0637\u0644\u0628", + "Determine how the system will generate code for each orders.": "\u062d\u062f\u062f \u0643\u064a\u0641 \u0633\u064a\u0642\u0648\u0645 \u0627\u0644\u0646\u0638\u0627\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0631\u0645\u0632 \u0644\u0643\u0644 \u0637\u0644\u0628.", + "Sequential": "\u062a\u0633\u0644\u0633\u0644\u064a", + "Random Code": "\u0643\u0648\u062f \u0639\u0634\u0648\u0627\u0626\u064a", + "Number Sequential": "\u0631\u0642\u0645 \u0645\u062a\u0633\u0644\u0633\u0644", + "Allow Unpaid Orders": "\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0644\u0637\u0644\u0628\u0627\u062a \u063a\u064a\u0631 \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629", + "Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".": "\u0633\u064a\u0645\u0646\u0639 \u0648\u0636\u0639 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u063a\u064a\u0631 \u0627\u0644\u0645\u0643\u062a\u0645\u0644\u0629. \u0625\u0630\u0627 \u0643\u0627\u0646 \u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646 \u0645\u0633\u0645\u0648\u062d\u064b\u0627 \u0628\u0647 \u060c \u0641\u064a\u062c\u0628 \u062a\u0639\u064a\u064a\u0646 \u0647\u0630\u0627 \u0627\u0644\u062e\u064a\u0627\u0631 \u0639\u0644\u0649 \"\u0646\u0639\u0645\".", + "Allow Partial Orders": "\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u062c\u0632\u0626\u064a\u0629", + "Will prevent partially paid orders to be placed.": "\u0633\u064a\u0645\u0646\u0639 \u0648\u0636\u0639 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629 \u062c\u0632\u0626\u064a\u064b\u0627.", + "Quotation Expiration": "\u0627\u0646\u062a\u0647\u0627\u0621 \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0627\u0642\u062a\u0628\u0627\u0633", + "Quotations will get deleted after they defined they has reached.": "\u0633\u064a\u062a\u0645 \u062d\u0630\u0641 \u0639\u0631\u0648\u0636 \u0627\u0644\u0623\u0633\u0639\u0627\u0631 \u0628\u0639\u062f \u062a\u062d\u062f\u064a\u062f\u0647\u0627.", + "%s Days": "\u066a s \u064a\u0648\u0645", + "Features": "\u0633\u0645\u0627\u062a", + "Show Quantity": "\u0639\u0631\u0636 \u0627\u0644\u0643\u0645\u064a\u0629", + "Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.": "\u0633\u064a\u0638\u0647\u0631 \u0645\u062d\u062f\u062f \u0627\u0644\u0643\u0645\u064a\u0629 \u0623\u062b\u0646\u0627\u0621 \u0627\u062e\u062a\u064a\u0627\u0631 \u0627\u0644\u0645\u0646\u062a\u062c. \u0648\u0628\u062e\u0644\u0627\u0641 \u0630\u0644\u0643 \u060c \u064a\u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 \u0639\u0644\u0649 1.", + "Allow Customer Creation": "\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Allow customers to be created on the POS.": "\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0639\u0644\u0649 \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639.", + "Quick Product": "\u0645\u0646\u062a\u062c \u0633\u0631\u064a\u0639", + "Allow quick product to be created from the POS.": "\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0646\u062a\u062c \u0633\u0631\u064a\u0639 \u0645\u0646 \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639.", + "Editable Unit Price": "\u0633\u0639\u0631 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0642\u0627\u0628\u0644 \u0644\u0644\u062a\u0639\u062f\u064a\u0644", + "Allow product unit price to be edited.": "\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u062a\u0639\u062f\u064a\u0644 \u0633\u0639\u0631 \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.", + "Order Types": "\u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0623\u0648\u0627\u0645\u0631", + "Control the order type enabled.": "\u0627\u0644\u062a\u062d\u0643\u0645 \u0641\u064a \u0646\u0648\u0639 \u0627\u0644\u0623\u0645\u0631 \u0645\u0645\u0643\u0651\u0646.", + "Bubble": "\u0641\u0642\u0627\u0639\u0629", + "Ding": "\u062f\u064a\u0646\u063a", + "Pop": "\u0641\u0631\u0642\u0639\u0629", + "Cash Sound": "\u0627\u0644\u0635\u0648\u062a \u0627\u0644\u0646\u0642\u062f\u064a", + "Layout": "\u062a\u062e\u0637\u064a\u0637", + "Retail Layout": "\u062a\u062e\u0637\u064a\u0637 \u0627\u0644\u0628\u064a\u0639 \u0628\u0627\u0644\u062a\u062c\u0632\u0626\u0629", + "Clothing Shop": "\u0645\u062d\u0644 \u0645\u0644\u0627\u0628\u0633", + "POS Layout": "\u062a\u062e\u0637\u064a\u0637 \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639", + "Change the layout of the POS.": "\u0642\u0645 \u0628\u062a\u063a\u064a\u064a\u0631 \u062a\u062e\u0637\u064a\u0637 POS.", + "Sale Complete Sound": "\u0628\u064a\u0639 \u0627\u0644\u0635\u0648\u062a \u0627\u0644\u0643\u0627\u0645\u0644", + "New Item Audio": "\u0639\u0646\u0635\u0631 \u0635\u0648\u062a\u064a \u062c\u062f\u064a\u062f", + "The sound that plays when an item is added to the cart.": "\u0627\u0644\u0635\u0648\u062a \u0627\u0644\u0630\u064a \u064a\u062a\u0645 \u062a\u0634\u063a\u064a\u0644\u0647 \u0639\u0646\u062f \u0625\u0636\u0627\u0641\u0629 \u0639\u0646\u0635\u0631 \u0625\u0644\u0649 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642.", + "Printing": "\u0637\u0628\u0627\u0639\u0629", + "Printed Document": "\u0648\u062b\u064a\u0642\u0629 \u0645\u0637\u0628\u0648\u0639\u0629", + "Choose the document used for printing aster a sale.": "\u0627\u062e\u062a\u0631 \u0627\u0644\u0648\u062b\u064a\u0642\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u0629 \u0644\u0637\u0628\u0627\u0639\u0629 aster a sale.", + "Printing Enabled For": "\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0637\u0628\u0627\u0639\u0629 \u0644\u0640", + "All Orders": "\u062c\u0645\u064a\u0639 \u0627\u0644\u0637\u0644\u0628\u0627\u062a", + "From Partially Paid Orders": "\u0645\u0646 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629 \u062c\u0632\u0626\u064a\u064b\u0627", + "Only Paid Orders": "\u0641\u0642\u0637 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629", + "Determine when the printing should be enabled.": "\u062d\u062f\u062f \u0645\u062a\u0649 \u064a\u062c\u0628 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0637\u0628\u0627\u0639\u0629.", + "Printing Gateway": "\u0628\u0648\u0627\u0628\u0629 \u0627\u0644\u0637\u0628\u0627\u0639\u0629", + "Determine what is the gateway used for printing.": "\u062a\u062d\u062f\u064a\u062f \u0645\u0627 \u0647\u064a \u0627\u0644\u0628\u0648\u0627\u0628\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u0629 \u0644\u0644\u0637\u0628\u0627\u0639\u0629.", + "Enable Cash Registers": "\u062a\u0645\u0643\u064a\u0646 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u0646\u0642\u062f", + "Determine if the POS will support cash registers.": "\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639 \u0633\u062a\u062f\u0639\u0645 \u0645\u0633\u062c\u0644\u0627\u062a \u0627\u0644\u0646\u0642\u062f.", + "Cashier Idle Counter": "\u0639\u062f\u0627\u062f \u0627\u0644\u062e\u0645\u0648\u0644 \u0623\u0645\u064a\u0646 \u0627\u0644\u0635\u0646\u062f\u0648\u0642", + "5 Minutes": "5 \u062f\u0642\u0627\u0626\u0642", + "10 Minutes": "10 \u062f\u0642\u0627\u0626\u0642", + "15 Minutes": "15 \u062f\u0642\u064a\u0642\u0629", + "20 Minutes": "20 \u062f\u0642\u064a\u0642\u0629", + "30 Minutes": "30 \u062f\u0642\u064a\u0642\u0629", + "Selected after how many minutes the system will set the cashier as idle.": "\u064a\u062a\u0645 \u062a\u062d\u062f\u064a\u062f\u0647 \u0628\u0639\u062f \u0639\u062f\u062f \u0627\u0644\u062f\u0642\u0627\u0626\u0642 \u0627\u0644\u062a\u064a \u0633\u064a\u0642\u0648\u0645 \u0627\u0644\u0646\u0638\u0627\u0645 \u0641\u064a\u0647\u0627 \u0628\u062a\u0639\u064a\u064a\u0646 \u0623\u0645\u064a\u0646 \u0627\u0644\u0635\u0646\u062f\u0648\u0642 \u0641\u064a \u0648\u0636\u0639 \u0627\u0644\u062e\u0645\u0648\u0644.", + "Cash Disbursement": "\u0627\u0644\u0635\u0631\u0641 \u0627\u0644\u0646\u0642\u062f\u064a", + "Allow cash disbursement by the cashier.": "\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0644\u0635\u0631\u0641 \u0627\u0644\u0646\u0642\u062f\u064a \u0645\u0646 \u0642\u0628\u0644 \u0623\u0645\u064a\u0646 \u0627\u0644\u0635\u0646\u062f\u0648\u0642.", + "Cash Registers": "\u0627\u0644\u0627\u062a \u0627\u0644\u0645\u062d\u0627\u0633\u0628\u0647", + "Keyboard Shortcuts": "\u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d", + "Cancel Order": "\u0627\u0644\u063a\u0627\u0621 \u0627\u0644\u0637\u0644\u0628", + "Keyboard shortcut to cancel the current order.": "\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u062d\u0627\u0644\u064a.", + "Keyboard shortcut to hold the current order.": "\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u0627\u062d\u062a\u0641\u0627\u0638 \u0628\u0627\u0644\u062a\u0631\u062a\u064a\u0628 \u0627\u0644\u062d\u0627\u0644\u064a.", + "Keyboard shortcut to create a customer.": "\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0625\u0646\u0634\u0627\u0621 \u0639\u0645\u064a\u0644.", + "Proceed Payment": "\u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u062f\u0641\u0639", + "Keyboard shortcut to proceed to the payment.": "\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u062f\u0641\u0639.", + "Open Shipping": "\u0641\u062a\u062d \u0627\u0644\u0634\u062d\u0646", + "Keyboard shortcut to define shipping details.": "\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u062a\u062d\u062f\u064a\u062f \u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0634\u062d\u0646.", + "Open Note": "\u0627\u0641\u062a\u062d \u0627\u0644\u0645\u0644\u0627\u062d\u0638\u0629", + "Keyboard shortcut to open the notes.": "\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0641\u062a\u062d \u0627\u0644\u0645\u0644\u0627\u062d\u0638\u0627\u062a.", + "Order Type Selector": "\u0645\u062d\u062f\u062f \u0646\u0648\u0639 \u0627\u0644\u0637\u0644\u0628", + "Keyboard shortcut to open the order type selector.": "\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0641\u062a\u062d \u0645\u062d\u062f\u062f \u0646\u0648\u0639 \u0627\u0644\u0637\u0644\u0628.", + "Toggle Fullscreen": "\u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629 \u062a\u0628\u062f\u064a\u0644", + "Keyboard shortcut to toggle fullscreen.": "\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u062a\u0628\u062f\u064a\u0644 \u0625\u0644\u0649 \u0648\u0636\u0639 \u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629.", + "Quick Search": "\u0628\u062d\u062b \u0633\u0631\u064a\u0639", + "Keyboard shortcut open the quick search popup.": "\u0627\u062e\u062a\u0635\u0627\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0627\u0641\u062a\u062d \u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0628\u062d\u062b \u0627\u0644\u0633\u0631\u064a\u0639 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0629.", + "Amount Shortcuts": "\u0645\u0642\u062f\u0627\u0631 \u0627\u0644\u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a", + "VAT Type": "\u0646\u0648\u0639 \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0642\u064a\u0645\u0629 \u0627\u0644\u0645\u0636\u0627\u0641\u0629", + "Determine the VAT type that should be used.": "\u062a\u062d\u062f\u064a\u062f \u0646\u0648\u0639 \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0642\u064a\u0645\u0629 \u0627\u0644\u0645\u0636\u0627\u0641\u0629 \u0627\u0644\u062a\u064a \u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u0627.", + "Flat Rate": "\u0645\u0639\u062f\u0644", + "Flexible Rate": "\u0646\u0633\u0628\u0629 \u0645\u0631\u0646\u0629", + "Products Vat": "\u0645\u0646\u062a\u062c\u0627\u062a \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0642\u064a\u0645\u0629 \u0627\u0644\u0645\u0636\u0627\u0641\u0629", + "Products & Flat Rate": "\u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0648\u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u062b\u0627\u0628\u062a", + "Products & Flexible Rate": "\u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0648\u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0645\u0631\u0646", + "Define the tax group that applies to the sales.": "\u062d\u062f\u062f \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u062a\u064a \u062a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a.", + "Define how the tax is computed on sales.": "\u062a\u062d\u062f\u064a\u062f \u0643\u064a\u0641\u064a\u0629 \u0627\u062d\u062a\u0633\u0627\u0628 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0639\u0644\u0649 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a.", + "VAT Settings": "\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0642\u064a\u0645\u0629 \u0627\u0644\u0645\u0636\u0627\u0641\u0629", + "Enable Email Reporting": "\u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0625\u0628\u0644\u0627\u063a \u0639\u0646 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a", + "Determine if the reporting should be enabled globally.": "\u062a\u062d\u062f\u064a\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u062a\u0645\u0643\u064a\u0646 \u0625\u0639\u062f\u0627\u062f \u0627\u0644\u062a\u0642\u0627\u0631\u064a\u0631 \u0639\u0644\u0649 \u0627\u0644\u0635\u0639\u064a\u062f \u0627\u0644\u0639\u0627\u0644\u0645\u064a.", + "Supplies": "\u0627\u0644\u0644\u0648\u0627\u0632\u0645", + "Public Name": "\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0639\u0627\u0645", + "Define what is the user public name. If not provided, the username is used instead.": "\u062d\u062f\u062f \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0639\u0627\u0645 \u0644\u0644\u0645\u0633\u062a\u062e\u062f\u0645. \u0625\u0630\u0627 \u0644\u0645 \u064a\u062a\u0645 \u062a\u0642\u062f\u064a\u0645\u0647 \u060c \u0641\u0633\u064a\u062a\u0645 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u0630\u0644\u0643.", + "Enable Workers": "\u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0639\u0645\u0627\u0644", + "Test": "\u0627\u062e\u062a\u0628\u0627\u0631", + "There is no product to display...": "\u0644\u0627 \u064a\u0648\u062c\u062f \u0645\u0646\u062a\u062c \u0644\u0639\u0631\u0636\u0647 ...", + "Low Quantity": "\u0643\u0645\u064a\u0629 \u0642\u0644\u064a\u0644\u0629", + "Which quantity should be assumed low.": "\u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u062a\u064a \u064a\u062c\u0628 \u0627\u0641\u062a\u0631\u0627\u0636\u0647\u0627 \u0645\u0646\u062e\u0641\u0636\u0629.", + "Stock Alert": "\u062a\u0646\u0628\u064a\u0647 \u0627\u0644\u0645\u062e\u0632\u0648\u0646", + "Low Stock Report": "\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062e\u0641\u0636", + "Low Stock Alert": "\u062a\u0646\u0628\u064a\u0647 \u0627\u0646\u062e\u0641\u0627\u0636 \u0627\u0644\u0645\u062e\u0632\u0648\u0646", + "Define whether the stock alert should be enabled for this unit.": "\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u062a\u0645\u0643\u064a\u0646 \u062a\u0646\u0628\u064a\u0647 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0644\u0647\u0630\u0647 \u0627\u0644\u0648\u062d\u062f\u0629.", + "All Refunds": "\u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0628\u0627\u0644\u063a \u0627\u0644\u0645\u0639\u0627\u062f\u0629", + "No result match your query.": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0646\u062a\u064a\u062c\u0629 \u062a\u0637\u0627\u0628\u0642 \u0627\u0644\u0627\u0633\u062a\u0639\u0644\u0627\u0645 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643.", + "Report Type": "\u0646\u0648\u0639 \u0627\u0644\u062a\u0642\u0631\u064a\u0631", + "Categories Detailed": "\u0641\u0626\u0627\u062a \u0645\u0641\u0635\u0644\u0629", + "Categories Summary": "\u0645\u0644\u062e\u0635 \u0627\u0644\u0641\u0626\u0627\u062a", + "Allow you to choose the report type.": "\u062a\u0633\u0645\u062d \u0644\u0643 \u0628\u0627\u062e\u062a\u064a\u0627\u0631 \u0646\u0648\u0639 \u0627\u0644\u062a\u0642\u0631\u064a\u0631.", + "Unknown": "\u0645\u062c\u0647\u0648\u0644", + "Not Authorized": "\u063a\u064a\u0631 \u0645\u062e\u0648\u0644", + "Creating customers has been explicitly disabled from the settings.": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0628\u0634\u0643\u0644 \u0635\u0631\u064a\u062d \u0645\u0646 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a.", + "Sales Discounts": "\u062a\u062e\u0641\u064a\u0636 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a", + "Sales Taxes": "\u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a", + "Birth Date": "\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0648\u0644\u0627\u062f\u0629", + "Displays the customer birth date": "\u064a\u0639\u0631\u0636 \u062a\u0627\u0631\u064a\u062e \u0645\u064a\u0644\u0627\u062f \u0627\u0644\u0639\u0645\u064a\u0644", + "Sale Value": "\u0642\u064a\u0645\u0629 \u0627\u0644\u0628\u064a\u0639", + "Purchase Value": "\u0642\u064a\u0645\u0629 \u0627\u0644\u0634\u0631\u0627\u0621", + "Would you like to refresh this ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u062d\u062f\u064a\u062b \u0647\u0630\u0627\u061f", + "You cannot delete your own account.": "\u0644\u0627 \u064a\u0645\u0643\u0646\u0643 \u062d\u0630\u0641 \u062d\u0633\u0627\u0628\u0643 \u0627\u0644\u062e\u0627\u0635.", + "Sales Progress": "\u062a\u0642\u062f\u0645 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a", + "Procurement Refreshed": "\u062a\u062c\u062f\u064a\u062f \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "The procurement \"%s\" has been successfully refreshed.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \"\u066as\" \u0628\u0646\u062c\u0627\u062d.", + "Partially Due": "\u0645\u0633\u062a\u062d\u0642 \u062c\u0632\u0626\u064a\u064b\u0627", + "No payment type has been selected on the settings. Please check your POS features and choose the supported order type": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u062d\u062f\u064a\u062f \u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639 \u0641\u064a \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a. \u064a\u0631\u062c\u0649 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0645\u064a\u0632\u0627\u062a \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643 \u0648\u0627\u062e\u062a\u064a\u0627\u0631 \u0646\u0648\u0639 \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u0645\u062f\u0639\u0648\u0645", + "Read More": "\u0627\u0642\u0631\u0623 \u0623\u0643\u062b\u0631", + "Wipe All": "\u0627\u0645\u0633\u062d \u0627\u0644\u0643\u0644", + "Wipe Plus Grocery": "\u0628\u0642\u0627\u0644\u0629 \u0648\u0627\u064a\u0628 \u0628\u0644\u0633", + "Accounts List": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062d\u0633\u0627\u0628\u0627\u062a", + "Display All Accounts.": "\u0639\u0631\u0636 \u0643\u0627\u0641\u0629 \u0627\u0644\u062d\u0633\u0627\u0628\u0627\u062a.", + "No Account has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u062d\u0633\u0627\u0628", + "Add a new Account": "\u0625\u0636\u0627\u0641\u0629 \u062d\u0633\u0627\u0628 \u062c\u062f\u064a\u062f", + "Create a new Account": "\u0627\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628 \u062c\u062f\u064a\u062f", + "Register a new Account and save it.": "\u062a\u0633\u062c\u064a\u0644 \u062d\u0633\u0627\u0628 \u062c\u062f\u064a\u062f \u0648\u062d\u0641\u0638\u0647.", + "Edit Account": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u062d\u0633\u0627\u0628", + "Modify An Account.": "\u062a\u0639\u062f\u064a\u0644 \u062d\u0633\u0627\u0628.", + "Return to Accounts": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u062d\u0633\u0627\u0628\u0627\u062a", + "Accounts": "\u062d\u0633\u0627\u0628\u0627\u062a", + "Create Account": "\u0625\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628", + "Payment Method": "Payment Method", + "Before submitting the payment, choose the payment type used for that order.": "\u0642\u0628\u0644 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u062f\u0641\u0639\u0629 \u060c \u0627\u062e\u062a\u0631 \u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0644\u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628.", + "Select the payment type that must apply to the current order.": "\u062d\u062f\u062f \u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0630\u064a \u064a\u062c\u0628 \u0623\u0646 \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0623\u0645\u0631 \u0627\u0644\u062d\u0627\u0644\u064a.", + "Payment Type": "\u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639", + "Remove Image": "\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0635\u0648\u0631\u0629", + "This form is not completely loaded.": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u062d\u0645\u064a\u0644 \u0647\u0630\u0627 \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u0628\u0627\u0644\u0643\u0627\u0645\u0644.", + "Updating": "\u0627\u0644\u062a\u062d\u062f\u064a\u062b", + "Updating Modules": "\u0648\u062d\u062f\u0627\u062a \u0627\u0644\u062a\u062d\u062f\u064a\u062b", + "Return": "\u064a\u0639\u0648\u062f", + "Credit Limit": "\u0627\u0644\u062d\u062f \u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646\u064a", + "The request was canceled": "\u062a\u0645 \u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u0637\u0644\u0628", + "Payment Receipt — %s": "\u0625\u064a\u0635\u0627\u0644 \u0627\u0644\u062f\u0641\u0639 \u0648 [\u0645\u062f\u0634] \u061b \u066a\u0633", + "Payment receipt": "\u0625\u064a\u0635\u0627\u0644 \u0627\u0644\u062f\u0641\u0639", + "Current Payment": "\u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u062d\u0627\u0644\u064a", + "Total Paid": "\u0645\u062c\u0645\u0648\u0639 \u0627\u0644\u0645\u0628\u0627\u0644\u063a \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629", + "Set what should be the limit of the purchase on credit.": "\u062d\u062f\u062f \u0645\u0627 \u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u062d\u062f \u0627\u0644\u0634\u0631\u0627\u0621 \u0628\u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646.", + "Provide the customer email.": "\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0644\u0644\u0639\u0645\u064a\u0644.", + "Priority": "\u0623\u0641\u0636\u0644\u064a\u0629", + "Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".": "\u062d\u062f\u062f \u062a\u0631\u062a\u064a\u0628 \u0627\u0644\u062f\u0641\u0639. \u0643\u0644\u0645\u0627 \u0627\u0646\u062e\u0641\u0636 \u0627\u0644\u0631\u0642\u0645 \u060c \u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u0627\u0644\u0631\u0642\u0645 \u0627\u0644\u0623\u0648\u0644 \u0641\u064a \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0629 \u0644\u0644\u062f\u0641\u0639. \u064a\u062c\u0628 \u0623\u0646 \u064a\u0628\u062f\u0623 \u0645\u0646 \"0 \".", + "Mode": "\u0627\u0644\u0648\u0636\u0639", + "Choose what mode applies to this demo.": "\u0627\u062e\u062a\u0631 \u0627\u0644\u0648\u0636\u0639 \u0627\u0644\u0630\u064a \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u062a\u0648\u0636\u064a\u062d\u064a.", + "Set if the sales should be created.": "\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u062c\u0628 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a.", + "Create Procurements": "\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Will create procurements.": "\u0633\u064a\u062e\u0644\u0642 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.", + "Sales Account": "\u062d\u0633\u0627\u0628 \u0645\u0628\u064a\u0639\u0627\u062a", + "Procurements Account": "\u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Sale Refunds Account": "\u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0628\u0627\u0644\u063a \u0627\u0644\u0645\u0633\u062a\u0631\u062f\u0629 \u0644\u0644\u0628\u064a\u0639", + "Spoiled Goods Account": "\u062d\u0633\u0627\u0628 \u0627\u0644\u0628\u0636\u0627\u0626\u0639 \u0627\u0644\u0641\u0627\u0633\u062f\u0629", + "Customer Crediting Account": "\u062d\u0633\u0627\u0628 \u0627\u0626\u062a\u0645\u0627\u0646 \u0627\u0644\u0639\u0645\u064a\u0644", + "Customer Debiting Account": "\u062d\u0633\u0627\u0628 \u062e\u0635\u0645 \u0627\u0644\u0639\u0645\u064a\u0644", + "Unable to find the requested account type using the provided id.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0646\u0648\u0639 \u0627\u0644\u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "You cannot delete an account type that has transaction bound.": "\u0644\u0627 \u064a\u0645\u0643\u0646\u0643 \u062d\u0630\u0641 \u0646\u0648\u0639 \u062d\u0633\u0627\u0628 \u0645\u0631\u062a\u0628\u0637 \u0628\u0645\u0639\u0627\u0645\u0644\u0629.", + "The account type has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0646\u0648\u0639 \u0627\u0644\u062d\u0633\u0627\u0628.", + "The account has been created.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u062d\u0633\u0627\u0628.", + "Customer Credit Account": "\u062d\u0633\u0627\u0628 \u0627\u0626\u062a\u0645\u0627\u0646 \u0627\u0644\u0639\u0645\u064a\u0644", + "Customer Debit Account": "\u062d\u0633\u0627\u0628 \u0645\u062f\u064a\u0646 \u0644\u0644\u0639\u0645\u064a\u0644", + "Register Cash-In Account": "\u062a\u0633\u062c\u064a\u0644 \u062d\u0633\u0627\u0628 \u0625\u064a\u062f\u0627\u0639 \u0646\u0642\u062f\u064a", + "Register Cash-Out Account": "\u062a\u0633\u062c\u064a\u0644 \u062d\u0633\u0627\u0628 \u0627\u0644\u0633\u062d\u0628 \u0627\u0644\u0646\u0642\u062f\u064a", + "Require Valid Email": "\u0645\u0637\u0644\u0648\u0628 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0635\u0627\u0644\u062d", + "Will for valid unique email for every customer.": "\u0625\u0631\u0627\u062f\u0629 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0641\u0631\u064a\u062f \u0635\u0627\u0644\u062d \u0644\u0643\u0644 \u0639\u0645\u064a\u0644.", + "Choose an option": "\u0625\u062e\u062a\u0631 \u062e\u064a\u0627\u0631", + "Update Instalment Date": "\u062a\u062d\u062f\u064a\u062b \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0642\u0633\u0637", + "Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u062d\u062f\u064a\u062f \u0645\u0648\u0639\u062f \u0627\u0633\u062a\u062d\u0642\u0627\u0642 \u0627\u0644\u0642\u0633\u0637 \u0627\u0644\u064a\u0648\u0645\u061f \u0625\u0630\u0627 \u0643\u0646\u062au confirm the instalment will be marked as paid.", + "Search for products.": "\u0627\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a.", + "Toggle merging similar products.": "\u062a\u0628\u062f\u064a\u0644 \u062f\u0645\u062c \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0645\u0627\u062b\u0644\u0629.", + "Toggle auto focus.": "\u062a\u0628\u062f\u064a\u0644 \u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u064a.", + "Filter User": "\u0639\u0627\u0645\u0644 \u0627\u0644\u062a\u0635\u0641\u064a\u0629", + "All Users": "\u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646", + "No user was found for proceeding the filtering.": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0645\u0633\u062a\u062e\u062f\u0645 \u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u062a\u0635\u0641\u064a\u0629.", + "available": "\u0645\u062a\u0648\u0641\u0631\u0629", + "No coupons applies to the cart.": "\u0644\u0627 \u0643\u0648\u0628\u0648\u0646\u0627\u062a \u062a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642.", + "Selected": "\u0627\u0644\u0645\u062d\u062f\u062f", + "An error occurred while opening the order options": "\u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u0641\u062a\u062d \u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u0623\u0645\u0631", + "There is no instalment defined. Please set how many instalments are allowed for this order": "\u0644\u0627 \u064a\u0648\u062c\u062f \u0642\u0633\u0637 \u0645\u062d\u062f\u062f. \u064a\u0631\u062c\u0649 \u062a\u062d\u062f\u064a\u062f \u0639\u062f\u062f \u0627\u0644\u0623\u0642\u0633\u0627\u0637 \u0627\u0644\u0645\u0633\u0645\u0648\u062d \u0628\u0647\u0627d for this order", + "Select Payment Gateway": "\u062d\u062f\u062f \u0628\u0648\u0627\u0628\u0629 \u0627\u0644\u062f\u0641\u0639", + "Gateway": "\u0628\u0648\u0627\u0628\u0629", + "No tax is active": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0636\u0631\u064a\u0628\u0629 \u0646\u0634\u0637\u0629", + "Unable to delete a payment attached to the order.": "\u064a\u062a\u0639\u0630\u0631 \u062d\u0630\u0641 \u0627\u0644\u062f\u0641\u0639\u0629 \u0627\u0644\u0645\u0631\u0641\u0642\u0629 \u0628\u0627\u0644\u0637\u0644\u0628.", + "The discount has been set to the cart subtotal.": "\u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u062e\u0635\u0645 \u0639\u0644\u0649 \u0627\u0644\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0641\u0631\u0639\u064a \u0644\u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642.", + "Order Deletion": "\u0637\u0644\u0628 \u062d\u0630\u0641", + "The current order will be deleted as no payment has been made so far.": "\u0633\u064a\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u062d\u0627\u0644\u064a \u0646\u0638\u0631\u064b\u0627 \u0644\u0639\u062f\u0645 \u0625\u062c\u0631\u0627\u0621 \u0623\u064a \u062f\u0641\u0639\u0629 \u062d\u062a\u0649 \u0627\u0644\u0622\u0646.", + "Void The Order": "\u0627\u0644\u0623\u0645\u0631 \u0628\u0627\u0637\u0644", + "Unable to void an unpaid order.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0625\u0628\u0637\u0627\u0644 \u0623\u0645\u0631 \u063a\u064a\u0631 \u0645\u062f\u0641\u0648\u0639.", + "Environment Details": "\u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0628\u064a\u0626\u0629", + "Properties": "\u0627\u0644\u062e\u0635\u0627\u0626\u0635", + "Extensions": "\u0645\u0644\u062d\u0642\u0627\u062a", + "Configurations": "\u0627\u0644\u062a\u0643\u0648\u064a\u0646\u0627\u062a", + "Learn More": "\u064a\u062a\u0639\u0644\u0645 \u0623\u0643\u062b\u0631", + "Search Products...": "\u0627\u0644\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a...", + "No results to show.": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0646\u062a\u0627\u0626\u062c \u0644\u0644\u0639\u0631\u0636.", + "Start by choosing a range and loading the report.": "\u0627\u0628\u062f\u0623 \u0628\u0627\u062e\u062a\u064a\u0627\u0631 \u0646\u0637\u0627\u0642 \u0648\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u062a\u0642\u0631\u064a\u0631.", + "Invoice Date": "\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629", + "Initial Balance": "\u0627\u0644\u0631\u0635\u064a\u062f \u0627\u0644\u0627\u0641\u062a\u062a\u0627\u062d\u064a", + "New Balance": "\u0627\u0644\u0631\u0635\u064a\u062f \u0627\u0644\u062c\u062f\u064a\u062f", + "Transaction Type": "\u0646\u0648\u0639 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629", + "Unchanged": "\u062f\u0648\u0646 \u062a\u063a\u064a\u064a\u0631", + "Define what roles applies to the user": "\u062d\u062f\u062f \u0627\u0644\u0623\u062f\u0648\u0627\u0631 \u0627\u0644\u062a\u064a \u062a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645", + "Not Assigned": "\u063a\u064a\u0631\u0645\u0639\u062a\u0645\u062f", + "This value is already in use on the database.": "\u0647\u0630\u0647 \u0627\u0644\u0642\u064a\u0645\u0629 \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u0627\u0644\u0641\u0639\u0644 \u0641\u064a \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a.", + "This field should be checked.": "\u064a\u062c\u0628 \u0641\u062d\u0635 \u0647\u0630\u0627 \u0627\u0644\u0645\u062c\u0627\u0644.", + "This field must be a valid URL.": "\u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0647\u0630\u0627 \u0627\u0644\u062d\u0642\u0644 \u0639\u0646\u0648\u0627\u0646 URL \u0635\u0627\u0644\u062d\u064b\u0627.", + "This field is not a valid email.": "\u0647\u0630\u0627 \u0627\u0644\u062d\u0642\u0644 \u0644\u064a\u0633 \u0628\u0631\u064a\u062f\u064b\u0627 \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a\u064b\u0627 \u0635\u0627\u0644\u062d\u064b\u0627.", + "If you would like to define a custom invoice date.": "\u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u062d\u062f\u064a\u062f \u062a\u0627\u0631\u064a\u062e \u0641\u0627\u062a\u0648\u0631\u0629 \u0645\u062e\u0635\u0635.", + "Theme": "\u0633\u0645\u0629", + "Dark": "\u0645\u0638\u0644\u0645", + "Light": "\u062e\u0641\u064a\u0641\u0629", + "Define what is the theme that applies to the dashboard.": "\u062d\u062f\u062f \u0645\u0627 \u0647\u0648 \u0627\u0644\u0645\u0648\u0636\u0648\u0639 \u0627\u0644\u0630\u064a \u064a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629.", + "Unable to delete this resource as it has %s dependency with %s item.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0631\u062f \u0644\u0623\u0646\u0647 \u064a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u062a\u0628\u0639\u064a\u0629\u066a s \u0645\u0639 \u0639\u0646\u0635\u0631\u066a s.", + "Unable to delete this resource as it has %s dependency with %s items.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0631\u062f \u0644\u0623\u0646\u0647 \u064a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u062a\u0628\u0639\u064a\u0629\u066a s \u0645\u0639\u066a s \u0639\u0646\u0635\u0631.", + "Make a new procurement.": "\u0625\u062c\u0631\u0627\u0621 \u0639\u0645\u0644\u064a\u0629 \u0634\u0631\u0627\u0621 \u062c\u062f\u064a\u062f\u0629.", + "About": "\u062d\u0648\u0644", + "Details about the environment.": "\u062a\u0641\u0627\u0635\u064a\u0644 \u062d\u0648\u0644 \u0627\u0644\u0628\u064a\u0626\u0629.", + "Core Version": "\u0627\u0644\u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u0623\u0633\u0627\u0633\u064a", + "PHP Version": "\u0625\u0635\u062f\u0627\u0631 PHP", + "Mb String Enabled": "\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0633\u0644\u0633\u0644\u0629 \u0645\u064a\u063a\u0627\u0628\u0627\u064a\u062a", + "Zip Enabled": "\u062a\u0645 \u062a\u0641\u0639\u064a\u0644 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0628\u0631\u064a\u062f\u064a", + "Curl Enabled": "\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0636\u0641\u064a\u0631\u0629", + "Math Enabled": "\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0631\u064a\u0627\u0636\u064a\u0627\u062a", + "XML Enabled": "\u062a\u0645\u0643\u064a\u0646 XML", + "XDebug Enabled": "\u062a\u0645\u0643\u064a\u0646 XDebug", + "File Upload Enabled": "\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0644\u0641", + "File Upload Size": "\u062d\u062c\u0645 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0644\u0641", + "Post Max Size": "\u062d\u062c\u0645 \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629 \u0627\u0644\u0642\u0635\u0648\u0649", + "Max Execution Time": "\u0623\u0642\u0635\u0649 \u0648\u0642\u062a \u0644\u0644\u062a\u0646\u0641\u064a\u0630", + "Memory Limit": "\u062d\u062f \u0627\u0644\u0630\u0627\u0643\u0631\u0629", + "Administrator": "\u0645\u062f\u064a\u0631", + "Store Administrator": "\u0645\u0633\u0624\u0648\u0644 \u0627\u0644\u0645\u062a\u062c\u0631", + "Store Cashier": "\u0623\u0645\u064a\u0646 \u0627\u0644\u0635\u0646\u062f\u0648\u0642 \u0645\u062e\u0632\u0646", + "User": "\u0627\u0644\u0645\u0633\u062a\u0639\u0645\u0644", + "Incorrect Authentication Plugin Provided.": "\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0645\u0643\u0648\u0646 \u0625\u0636\u0627\u0641\u064a \u0644\u0644\u0645\u0635\u0627\u062f\u0642\u0629 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d.", + "Require Unique Phone": "\u062a\u062a\u0637\u0644\u0628 \u0647\u0627\u062a\u0641\u064b\u0627 \u0641\u0631\u064a\u062f\u064b\u0627", + "Every customer should have a unique phone number.": "\u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0644\u0643\u0644 \u0639\u0645\u064a\u0644 \u0631\u0642\u0645 \u0647\u0627\u062a\u0641 \u0641\u0631\u064a\u062f.", + "Define the default theme.": "\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0648\u0636\u0648\u0639 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a.", + "Merge Similar Items": "\u062f\u0645\u062c \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0645\u062a\u0634\u0627\u0628\u0647\u0629", + "Will enforce similar products to be merged from the POS.": "\u0633\u064a\u062a\u0645 \u0641\u0631\u0636 \u0645\u0646\u062a\u062c\u0627\u062a \u0645\u0645\u0627\u062b\u0644\u0629 \u0644\u064a\u062a\u0645 \u062f\u0645\u062c\u0647\u0627 \u0645\u0646 \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639.", + "Toggle Product Merge": "\u062a\u0628\u062f\u064a\u0644 \u062f\u0645\u062c \u0627\u0644\u0645\u0646\u062a\u062c", + "Will enable or disable the product merging.": "\u0633\u064a\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0623\u0648 \u062a\u0639\u0637\u064a\u0644 \u062f\u0645\u062c \u0627\u0644\u0645\u0646\u062a\u062c.", + "Your system is running in production mode. You probably need to build the assets": "\u064a\u0639\u0645\u0644 \u0646\u0638\u0627\u0645\u0643 \u0641\u064a \u0648\u0636\u0639 \u0627\u0644\u0625\u0646\u062a\u0627\u062c. \u0631\u0628\u0645\u0627 \u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0628\u0646\u0627\u0621 \u0627\u0644\u0623\u0635\u0648\u0644", + "Your system is in development mode. Make sure to build the assets.": "\u0627\u0644\u0646\u0638\u0627\u0645 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643 \u0641\u064a \u0648\u0636\u0639 \u0627\u0644\u062a\u0637\u0648\u064a\u0631. \u062a\u0623\u0643\u062f \u0645\u0646 \u0628\u0646\u0627\u0621 \u0627\u0644\u0623\u0635\u0648\u0644.", + "Unassigned": "\u063a\u064a\u0631 \u0645\u0639\u064a\u0646", + "Display all product stock flow.": "\u0639\u0631\u0636 \u0643\u0644 \u062a\u062f\u0641\u0642 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c.", + "No products stock flow has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u062a\u062f\u0641\u0642 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a", + "Add a new products stock flow": "\u0625\u0636\u0627\u0641\u0629 \u062a\u062f\u0641\u0642 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u062c\u062f\u064a\u062f\u0629", + "Create a new products stock flow": "\u0625\u0646\u0634\u0627\u0621 \u062a\u062f\u0641\u0642 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u062c\u062f\u064a\u062f\u0629", + "Register a new products stock flow and save it.": "\u062a\u0633\u062c\u064a\u0644 \u062a\u062f\u0641\u0642 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u062c\u062f\u064a\u062f\u0629 \u0648\u062d\u0641\u0638\u0647.", + "Edit products stock flow": "\u062a\u062d\u0631\u064a\u0631 \u062a\u062f\u0641\u0642 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a", + "Modify Globalproducthistorycrud.": "\u062a\u0639\u062f\u064a\u0644 Globalproducthistorycrud.", + "Initial Quantity": "\u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0623\u0648\u0644\u064a\u0629", + "New Quantity": "\u0643\u0645\u064a\u0629 \u062c\u062f\u064a\u062f\u0629", + "No Dashboard": "\u0644\u0627 \u0644\u0648\u062d\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629", + "Not Found Assets": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0623\u0635\u0648\u0644", + "Stock Flow Records": "\u0633\u062c\u0644\u0627\u062a \u062a\u062f\u0641\u0642 \u0627\u0644\u0645\u062e\u0632\u0648\u0646", + "The user attributes has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0633\u0645\u0627\u062a \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645.", + "Laravel Version": "\u0625\u0635\u062f\u0627\u0631 Laravel", + "There is a missing dependency issue.": "\u0647\u0646\u0627\u0643 \u0645\u0634\u0643\u0644\u0629 \u062a\u0628\u0639\u064a\u0629 \u0645\u0641\u0642\u0648\u062f\u0629.", + "The Action You Tried To Perform Is Not Allowed.": "\u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u0630\u064a \u062d\u0627\u0648\u0644\u062a \u0627\u0644\u0642\u064a\u0627\u0645 \u0628\u0647 \u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0628\u0647.", + "Unable to locate the assets.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u062f\u064a\u062f \u0645\u0648\u0642\u0639 \u0627\u0644\u0623\u0635\u0648\u0644.", + "All the customers has been transferred to the new group %s.": "\u062a\u0645 \u0646\u0642\u0644 \u0643\u0627\u0641\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0625\u0644\u0649 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u062c\u062f\u064a\u062f\u0629\u066a s.", + "The request method is not allowed.": "\u0637\u0631\u064a\u0642\u0629 \u0627\u0644\u0637\u0644\u0628 \u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0628\u0647\u0627.", + "A Database Exception Occurred.": "\u062d\u062f\u062b \u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u0641\u064a \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a.", + "An error occurred while validating the form.": "\u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0635\u062d\u0629 \u0627\u0644\u0646\u0645\u0648\u0630\u062c.", + "Enter": "\u064a\u062f\u062e\u0644", + "Search...": "\u064a\u0628\u062d\u062b...", + "Unable to hold an order which payment status has been updated already.": "\u062a\u0639\u0630\u0631 \u062a\u0639\u0644\u064a\u0642 \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u0630\u064a \u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u062d\u0627\u0644\u0629 \u0627\u0644\u062f\u0641\u0639 \u0641\u064a\u0647 \u0628\u0627\u0644\u0641\u0639\u0644.", + "Unable to change the price mode. This feature has been disabled.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u063a\u064a\u064a\u0631 \u0648\u0636\u0639 \u0627\u0644\u0633\u0639\u0631. \u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0647\u0630\u0647 \u0627\u0644\u0645\u064a\u0632\u0629.", + "Enable WholeSale Price": "\u062a\u0641\u0639\u064a\u0644 \u0633\u0639\u0631 \u0627\u0644\u0628\u064a\u0639 \u0627\u0644\u0643\u0627\u0645\u0644", + "Would you like to switch to wholesale price ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u062a\u062d\u0648\u0644 \u0625\u0644\u0649 \u0623\u0633\u0639\u0627\u0631 \u0627\u0644\u062c\u0645\u0644\u0629\u061f", + "Enable Normal Price": "\u062a\u0641\u0639\u064a\u0644 \u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0639\u0627\u062f\u064a", + "Would you like to switch to normal price ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u062a\u062d\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0639\u0627\u062f\u064a\u061f", + "Search products...": "\u0627\u0644\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a...", + "Set Sale Price": "\u062d\u062f\u062f \u0633\u0639\u0631 \u0627\u0644\u0628\u064a\u0639", + "Remove": "\u0625\u0632\u0627\u0644\u0629", + "No product are added to this group.": "\u0644\u0645 \u064a\u062a\u0645 \u0625\u0636\u0627\u0641\u0629 \u0623\u064a \u0645\u0646\u062a\u062c \u0644\u0647\u0630\u0647 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629.", + "Delete Sub item": "\u062d\u0630\u0641 \u0627\u0644\u0628\u0646\u062f \u0627\u0644\u0641\u0631\u0639\u064a", + "Would you like to delete this sub item?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0641\u0631\u0639\u064a\u061f", + "Unable to add a grouped product.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0625\u0636\u0627\u0641\u0629 \u0645\u0646\u062a\u062c \u0645\u062c\u0645\u0639.", + "Choose The Unit": "\u0627\u062e\u062a\u0631 \u0627\u0644\u0648\u062d\u062f\u0629", + "Stock Report": "\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0627\u0633\u0647\u0645", + "Wallet Amount": "\u0645\u0628\u0644\u063a \u0627\u0644\u0645\u062d\u0641\u0638\u0629", + "Wallet History": "\u0645\u062d\u0641\u0648\u0638\u0627\u062a \u0627\u0644\u0645\u062d\u0641\u0638\u0629", + "Transaction": "\u0639\u0645\u0644\u064a\u0629", + "No History...": "\u0644\u0627 \u062a\u0627\u0631\u064a\u062e...", + "Removing": "\u0625\u0632\u0627\u0644\u0629", + "Refunding": "\u0627\u0644\u0633\u062f\u0627\u062f", + "Unknow": "\u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641", + "Skip Instalments": "\u062a\u062e\u0637\u064a \u0627\u0644\u0623\u0642\u0633\u0627\u0637", + "Define the product type.": "\u062d\u062f\u062f \u0646\u0648\u0639 \u0627\u0644\u0645\u0646\u062a\u062c.", + "Dynamic": "\u0645\u062a\u062d\u0631\u0643", + "In case the product is computed based on a percentage, define the rate here.": "\u0641\u064a \u062d\u0627\u0644\u0629 \u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0646\u062a\u062c \u0639\u0644\u0649 \u0623\u0633\u0627\u0633 \u0646\u0633\u0628\u0629 \u0645\u0626\u0648\u064a\u0629 \u060c \u062d\u062f\u062f \u0627\u0644\u0633\u0639\u0631 \u0647\u0646\u0627.", + "Before saving this order, a minimum payment of {amount} is required": "\u0642\u0628\u0644 \u062d\u0641\u0638 \u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628 \u060c \u064a\u062c\u0628 \u062f\u0641\u0639 \u0645\u0628\u0644\u063a {amount} \u0643\u062d\u062f \u0623\u062f\u0646\u0649", + "Initial Payment": "\u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0623\u0648\u0644\u064a", + "In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?": "\u0644\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u064a\u062c\u0628 \u062f\u0641\u0639 \u0645\u0628\u0644\u063a {amount} \u0645\u0628\u062f\u0626\u064a\u064b\u0627 \u0644\u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0645\u062d\u062f\u062f \"{paymentType}\". \u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627 \u061f", + "Search Customer...": "\u0628\u062d\u062b \u0639\u0646 \u0632\u0628\u0648\u0646 ...", + "Due Amount": "\u0645\u0628\u0644\u063a \u0645\u0633\u062a\u062d\u0642", + "Wallet Balance": "\u0631\u0635\u064a\u062f \u0627\u0644\u0645\u062d\u0641\u0638\u0629", + "Total Orders": "\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0637\u0644\u0628\u0627\u062a", + "What slug should be used ? [Q] to quit.": "\u0645\u0627 \u0647\u064a \u0633\u0628\u064a\u0643\u0629 \u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u0627\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.", + "\"%s\" is a reserved class name": "\"%s\" \u0647\u0648 \u0627\u0633\u0645 \u0641\u0626\u0629 \u0645\u062d\u062c\u0648\u0632", + "The migration file has been successfully forgotten for the module %s.": "\u062a\u0645 \u0646\u0633\u064a\u0627\u0646 \u0645\u0644\u0641 \u0627\u0644\u062a\u0631\u062d\u064a\u0644 \u0628\u0646\u062c\u0627\u062d \u0644\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 %s.", + "%s products where updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b %s \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a.", + "Previous Amount": "\u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0633\u0627\u0628\u0642", + "Next Amount": "\u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u062a\u0627\u0644\u064a", + "Restrict the records by the creation date.": "\u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0633\u062c\u0644\u0627\u062a \u0628\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0625\u0646\u0634\u0627\u0621.", + "Restrict the records by the author.": "\u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0633\u062c\u0644\u0627\u062a \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0624\u0644\u0641.", + "Grouped Product": "\u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u062c\u0645\u0639", + "Groups": "\u0645\u062c\u0645\u0648\u0639\u0627\u062a", + "Choose Group": "\u0627\u062e\u062a\u0631 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629", + "Grouped": "\u0645\u062c\u0645\u0639\u0629", + "An error has occurred": "\u062d\u062f\u062b \u062e\u0637\u0623", + "Unable to proceed, the submitted form is not valid.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u0627\u0644\u0645\u0642\u062f\u0645 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "No activation is needed for this account.": "\u0644\u0627 \u064a\u0644\u0632\u0645 \u0627\u0644\u062a\u0646\u0634\u064a\u0637 \u0644\u0647\u0630\u0627 \u0627\u0644\u062d\u0633\u0627\u0628.", + "Invalid activation token.": "\u0631\u0645\u0632 \u0627\u0644\u062a\u0646\u0634\u064a\u0637 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "The expiration token has expired.": "\u0627\u0646\u062a\u0647\u062a \u0635\u0644\u0627\u062d\u064a\u0629 \u0631\u0645\u0632 \u0627\u0646\u062a\u0647\u0627\u0621 \u0627\u0644\u0635\u0644\u0627\u062d\u064a\u0629.", + "Your account is not activated.": "\u062d\u0633\u0627\u0628\u0643 \u063a\u064a\u0631 \u0645\u0641\u0639\u0644.", + "Unable to change a password for a non active user.": "\u062a\u0639\u0630\u0631 \u062a\u063a\u064a\u064a\u0631 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u063a\u064a\u0631 \u0646\u0634\u0637.", + "Unable to submit a new password for a non active user.": "\u062a\u0639\u0630\u0631 \u0625\u0631\u0633\u0627\u0644 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u062c\u062f\u064a\u062f\u0629 \u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u063a\u064a\u0631 \u0646\u0634\u0637.", + "Unable to delete an entry that no longer exists.": "\u062a\u0639\u0630\u0631 \u062d\u0630\u0641 \u0625\u062f\u062e\u0627\u0644 \u0644\u0645 \u064a\u0639\u062f \u0645\u0648\u062c\u0648\u062f\u064b\u0627.", + "Provides an overview of the products stock.": "\u064a\u0642\u062f\u0645 \u0644\u0645\u062d\u0629 \u0639\u0627\u0645\u0629 \u0639\u0646 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a.", + "Customers Statement": "\u0628\u064a\u0627\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Display the complete customer statement.": "\u0639\u0631\u0636 \u0628\u064a\u0627\u0646 \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0643\u0627\u0645\u0644.", + "The recovery has been explicitly disabled.": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0628\u0634\u0643\u0644 \u0635\u0631\u064a\u062d.", + "The registration has been explicitly disabled.": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0628\u0634\u0643\u0644 \u0635\u0631\u064a\u062d.", + "The entry has been successfully updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0625\u062f\u062e\u0627\u0644 \u0628\u0646\u062c\u0627\u062d.", + "A similar module has been found": "\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0648\u062d\u062f\u0629 \u0645\u0645\u0627\u062b\u0644\u0629", + "A grouped product cannot be saved without any sub items.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062d\u0641\u0638 \u0645\u0646\u062a\u062c \u0645\u062c\u0645\u0639 \u0628\u062f\u0648\u0646 \u0623\u064a \u0639\u0646\u0627\u0635\u0631 \u0641\u0631\u0639\u064a\u0629.", + "A grouped product cannot contain grouped product.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u0623\u0646 \u064a\u062d\u062a\u0648\u064a \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u062c\u0645\u0639 \u0639\u0644\u0649 \u0645\u0646\u062a\u062c \u0645\u062c\u0645\u0639.", + "The subitem has been saved.": "\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0641\u0631\u0639\u064a.", + "The %s is already taken.": "%s \u0645\u0623\u062e\u0648\u0630 \u0628\u0627\u0644\u0641\u0639\u0644.", + "Allow Wholesale Price": "\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0633\u0639\u0631 \u0627\u0644\u062c\u0645\u0644\u0629", + "Define if the wholesale price can be selected on the POS.": "\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u064a\u0645\u0643\u0646 \u062a\u062d\u062f\u064a\u062f \u0633\u0639\u0631 \u0627\u0644\u062c\u0645\u0644\u0629 \u0641\u064a \u0646\u0642\u0627\u0637 \u0627\u0644\u0628\u064a\u0639.", + "Allow Decimal Quantities": "\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0644\u0643\u0645\u064a\u0627\u062a \u0627\u0644\u0639\u0634\u0631\u064a\u0629", + "Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.": "\u0633\u064a\u062a\u0645 \u062a\u063a\u064a\u064a\u0631 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0627\u0644\u0631\u0642\u0645\u064a\u0629 \u0644\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0644\u0643\u0645\u064a\u0627\u062a \u0627\u0644\u0639\u0634\u0631\u064a\u0629. \u0641\u0642\u0637 \u0644\u0644\u0648\u062d\u0629 \"\u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629\".", + "Numpad": "\u0646\u0648\u0645\u0628\u0627\u062f", + "Advanced": "\u0645\u062a\u0642\u062f\u0645", + "Will set what is the numpad used on the POS screen.": "\u0633\u064a\u062d\u062f\u062f \u0645\u0627 \u0647\u064a \u0627\u0644\u0644\u0648\u062d\u0629 \u0627\u0644\u0631\u0642\u0645\u064a\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u0629 \u0639\u0644\u0649 \u0634\u0627\u0634\u0629 POS.", + "Force Barcode Auto Focus": "\u0641\u0631\u0636 \u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u064a \u0644\u0644\u0631\u0645\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a", + "Will permanently enable barcode autofocus to ease using a barcode reader.": "\u0633\u064a\u0645\u0643\u0646 \u0628\u0634\u0643\u0644 \u062f\u0627\u0626\u0645 \u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u064a \u0644\u0644\u0631\u0645\u0632 \u0627\u0644\u0634\u0631\u064a\u0637\u064a \u0644\u062a\u0633\u0647\u064a\u0644 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0642\u0627\u0631\u0626 \u0627\u0644\u0628\u0627\u0631\u0643\u0648\u062f.", + "Tax Included": "\u0634\u0627\u0645\u0644 \u0627\u0644\u0636\u0631\u064a\u0628\u0629", + "Unable to proceed, more than one product is set as featured": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u060c \u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0623\u0643\u062b\u0631 \u0645\u0646 \u0645\u0646\u062a\u062c \u0648\u0627\u062d\u062f \u0643\u0645\u0646\u062a\u062c \u0645\u0645\u064a\u0632", + "The transaction was deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629.", + "Database connection was successful.": "\u062a\u0645 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0628\u0646\u062c\u0627\u062d.", + "The products taxes were computed successfully.": "\u062a\u0645 \u0627\u062d\u062a\u0633\u0627\u0628 \u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0628\u0646\u062c\u0627\u062d.", + "Tax Excluded": "\u0644\u0627 \u062a\u0634\u0645\u0644 \u0627\u0644\u0636\u0631\u0627\u0626\u0628", + "Set Paid": "\u0645\u062c\u0645\u0648\u0639\u0629 \u0645\u062f\u0641\u0648\u0639\u0629", + "Would you like to mark this procurement as paid?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0648\u0636\u0639 \u0639\u0644\u0627\u0645\u0629 \u0639\u0644\u0649 \u0647\u0630\u0647 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0639\u0644\u0649 \u0623\u0646\u0647\u0627 \u0645\u062f\u0641\u0648\u0639\u0629\u061f", + "Unidentified Item": "\u0639\u0646\u0635\u0631 \u063a\u064a\u0631 \u0645\u062d\u062f\u062f", + "Non-existent Item": "\u0639\u0646\u0635\u0631 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f", + "You cannot change the status of an already paid procurement.": "\u0644\u0627 \u064a\u0645\u0643\u0646\u0643 \u062a\u063a\u064a\u064a\u0631 \u062d\u0627\u0644\u0629 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629 \u0628\u0627\u0644\u0641\u0639\u0644.", + "The procurement payment status has been changed successfully.": "\u062a\u0645 \u062a\u063a\u064a\u064a\u0631 \u062d\u0627\u0644\u0629 \u062f\u0641\u0639 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0628\u0646\u062c\u0627\u062d.", + "The procurement has been marked as paid.": "\u062a\u0645 \u0648\u0636\u0639 \u0639\u0644\u0627\u0645\u0629 \u0639\u0644\u0649 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a \u0639\u0644\u0649 \u0623\u0646\u0647\u0627 \u0645\u062f\u0641\u0648\u0639\u0629.", + "Show Price With Tax": "\u0639\u0631\u0636 \u0627\u0644\u0633\u0639\u0631 \u0645\u0639 \u0627\u0644\u0636\u0631\u064a\u0628\u0629", + "Will display price with tax for each products.": "\u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u0627\u0644\u0633\u0639\u0631 \u0645\u0639 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0644\u0643\u0644 \u0645\u0646\u062a\u062c.", + "Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".": "\u062a\u0639\u0630\u0631 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0643\u0648\u0646 \"${action.component}\". \u062a\u0623\u0643\u062f \u0645\u0646 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u0645\u0643\u0648\u0646 \u0625\u0644\u0649 \"nsExtraComponents\".", + "Tax Inclusive": "\u0634\u0627\u0645\u0644 \u0627\u0644\u0636\u0631\u064a\u0628\u0629", + "Apply Coupon": "\u062a\u0637\u0628\u064a\u0642 \u0627\u0644\u0642\u0633\u064a\u0645\u0629", + "Not applicable": "\u0644\u0627 \u064a\u0646\u0637\u0628\u0642", + "Normal": "\u0637\u0628\u064a\u0639\u064a", + "Product Taxes": "\u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u0645\u0646\u062a\u062c", + "The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.": "\u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0631\u0641\u0642\u0629 \u0628\u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062a\u062c \u0645\u0641\u0642\u0648\u062f\u0629 \u0623\u0648 \u0644\u0645 \u064a\u062a\u0645 \u062a\u0639\u064a\u064a\u0646\u0647\u0627. \u0627\u0644\u0631\u062c\u0627\u0621 \u0645\u0631\u0627\u062c\u0639\u0629 \u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062a\u0628\u0648\u064a\u0628 \"\u0627\u0644\u0648\u062d\u062f\u0629\" \u0644\u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062a\u062c.", + "X Days After Month Starts": "X \u0623\u064a\u0627\u0645 \u0628\u0639\u062f \u0628\u062f\u0621 \u0627\u0644\u0634\u0647\u0631", + "On Specific Day": "\u0641\u064a \u064a\u0648\u0645 \u0645\u062d\u062f\u062f", + "Unknown Occurance": "\u062d\u062f\u062b \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641", + "Please provide a valid value.": "\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 \u0642\u064a\u0645\u0629 \u0635\u0627\u0644\u062d\u0629.", + "Done": "\u0645\u0646\u062a\u0647\u064a", + "Would you like to delete \"%s\"?": "\u0647\u0644 \u062a\u0631\u064a\u062f \u062d\u0630\u0641 \"%s\"\u061f", + "Unable to find a module having as namespace \"%s\"": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0648\u062d\u062f\u0629 \u0628\u0647\u0627 \u0645\u0633\u0627\u062d\u0629 \u0627\u0633\u0645 \"%s\"", + "Api File": "\u0645\u0644\u0641 API", + "Migrations": "\u0627\u0644\u0647\u062c\u0631\u0627\u062a", + "Determine Until When the coupon is valid.": "\u062a\u062d\u062f\u064a\u062f \u062d\u062a\u0649 \u0645\u062a\u0649 \u062a\u0643\u0648\u0646 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0635\u0627\u0644\u062d\u0629.", + "Customer Groups": "\u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Assigned To Customer Group": "\u0627\u0644\u0645\u062e\u0635\u0635\u0629 \u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Only the customers who belongs to the selected groups will be able to use the coupon.": "\u0633\u064a\u062a\u0645\u0643\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u0630\u064a\u0646 \u064a\u0646\u062a\u0645\u0648\u0646 \u0625\u0644\u0649 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0645\u062d\u062f\u062f\u0629 \u0641\u0642\u0637 \u0645\u0646 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0642\u0633\u064a\u0645\u0629.", + "Assigned To Customers": "\u0627\u0644\u0645\u062e\u0635\u0635\u0629 \u0644\u0644\u0639\u0645\u0644\u0627\u0621", + "Only the customers selected will be ale to use the coupon.": "\u0641\u0642\u0637 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u0630\u064a\u0646 \u062a\u0645 \u0627\u062e\u062a\u064a\u0627\u0631\u0647\u0645 \u0633\u064a\u0643\u0648\u0646\u0648\u0646 \u0642\u0627\u062f\u0631\u064a\u0646 \u0639\u0644\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0642\u0633\u064a\u0645\u0629.", + "Unable to save the coupon as one of the selected customer no longer exists.": "\u062a\u0639\u0630\u0631 \u062d\u0641\u0638 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0644\u0623\u0646 \u0623\u062d\u062f \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u0645\u062d\u062f\u062f\u064a\u0646 \u0644\u0645 \u064a\u0639\u062f \u0645\u0648\u062c\u0648\u062f\u064b\u0627.", + "Unable to save the coupon as one of the selected customer group no longer exists.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062d\u0641\u0638 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0644\u0623\u0646 \u0625\u062d\u062f\u0649 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u0645\u062d\u062f\u062f\u0629 \u0644\u0645 \u062a\u0639\u062f \u0645\u0648\u062c\u0648\u062f\u0629.", + "Unable to save the coupon as one of the customers provided no longer exists.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062d\u0641\u0638 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0644\u0623\u0646 \u0623\u062d\u062f \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u0645\u0642\u062f\u0645\u064a\u0646 \u0644\u0645 \u064a\u0639\u062f \u0645\u0648\u062c\u0648\u062f\u064b\u0627.", + "Unable to save the coupon as one of the provided customer group no longer exists.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062d\u0641\u0638 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0644\u0623\u0646 \u0625\u062d\u062f\u0649 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u0645\u0642\u062f\u0645\u0629 \u0644\u0645 \u062a\u0639\u062f \u0645\u0648\u062c\u0648\u062f\u0629.", + "Coupon Order Histories List": "\u0642\u0627\u0626\u0645\u0629 \u0645\u062d\u0641\u0648\u0638\u0627\u062a \u0637\u0644\u0628 \u0627\u0644\u0642\u0633\u064a\u0645\u0629", + "Display all coupon order histories.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0633\u062c\u0644\u0627\u062a \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0642\u0633\u064a\u0645\u0629.", + "No coupon order histories has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0633\u062c\u0644 \u0644\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0642\u0633\u064a\u0645\u0629", + "Add a new coupon order history": "\u0625\u0636\u0627\u0641\u0629 \u0633\u062c\u0644 \u0637\u0644\u0628 \u0642\u0633\u064a\u0645\u0629 \u062c\u062f\u064a\u062f", + "Create a new coupon order history": "\u0625\u0646\u0634\u0627\u0621 \u0633\u062c\u0644 \u0637\u0644\u0628 \u0642\u0633\u064a\u0645\u0629 \u062c\u062f\u064a\u062f", + "Register a new coupon order history and save it.": "\u0633\u062c\u0644 \u0633\u062c\u0644 \u0637\u0644\u0628\u0627\u062a \u0642\u0633\u064a\u0645\u0629 \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.", + "Edit coupon order history": "\u062a\u062d\u0631\u064a\u0631 \u0633\u062c\u0644 \u0637\u0644\u0628 \u0627\u0644\u0642\u0633\u064a\u0645\u0629", + "Modify Coupon Order History.": "\u062a\u0639\u062f\u064a\u0644 \u0633\u062c\u0644 \u0637\u0644\u0628 \u0627\u0644\u0642\u0633\u064a\u0645\u0629.", + "Return to Coupon Order Histories": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u062a\u0627\u0631\u064a\u062e \u0637\u0644\u0628 \u0627\u0644\u0642\u0633\u064a\u0645\u0629", + "Customer_coupon_id": "Customer_coupon_id", + "Order_id": "\u0631\u0642\u0645 \u0627\u0644\u062a\u0639\u0631\u064a\u0641 \u0627\u0644\u062e\u0627\u0635 \u0628\u0627\u0644\u0637\u0644\u0628", + "Discount_value": "Discount_value", + "Minimum_cart_value": "\u0627\u0644\u062d\u062f \u0627\u0644\u0623\u062f\u0646\u0649_\u0644\u0642\u064a\u0645\u0629_\u0639\u0631\u0628\u0629_\u0627\u0644\u0639\u0631\u0628\u0629", + "Maximum_cart_value": "Max_cart_value", + "Limit_usage": "Limit_usage", + "Would you like to delete this?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \u0647\u0630\u0627\u061f", + "Usage History": "\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645", + "Customer Coupon Histories List": "\u0642\u0627\u0626\u0645\u0629 \u0645\u062d\u0641\u0648\u0638\u0627\u062a \u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Display all customer coupon histories.": "\u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0633\u062c\u0644\u0627\u062a \u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621.", + "No customer coupon histories has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0633\u062c\u0644\u0627\u062a \u0644\u0642\u0633\u0627\u0626\u0645 \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Add a new customer coupon history": "\u0625\u0636\u0627\u0641\u0629 \u0633\u062c\u0644 \u0642\u0633\u064a\u0645\u0629 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f", + "Create a new customer coupon history": "\u0625\u0646\u0634\u0627\u0621 \u0633\u062c\u0644 \u0642\u0633\u064a\u0645\u0629 \u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f", + "Register a new customer coupon history and save it.": "\u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0633\u062c\u0644 \u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.", + "Edit customer coupon history": "\u062a\u062d\u0631\u064a\u0631 \u0633\u062c\u0644 \u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0639\u0645\u064a\u0644", + "Modify Customer Coupon History.": "\u062a\u0639\u062f\u064a\u0644 \u0633\u062c\u0644 \u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0639\u0645\u064a\u0644.", + "Return to Customer Coupon Histories": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0633\u062c\u0644\u0627\u062a \u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "Last Name": "\u0627\u0633\u0645 \u0627\u0644\u0639\u0627\u0626\u0644\u0629", + "Provide the customer last name": "\u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u062e\u064a\u0631 \u0644\u0644\u0639\u0645\u064a\u0644", + "Provide the customer gender.": "\u062a\u0648\u0641\u064a\u0631 \u062c\u0646\u0633 \u0627\u0644\u0639\u0645\u064a\u0644.", + "Provide the billing first name.": "\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u0648\u0644 \u0644\u0644\u0641\u0648\u062a\u0631\u0629.", + "Provide the billing last name.": "\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u062e\u064a\u0631 \u0644\u0644\u0641\u0648\u062a\u0631\u0629.", + "Provide the shipping First Name.": "\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u0648\u0644 \u0644\u0644\u0634\u062d\u0646.", + "Provide the shipping Last Name.": "\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u062e\u064a\u0631 \u0644\u0644\u0634\u062d\u0646.", + "Scheduled": "\u0627\u0644\u0645\u0642\u0631\u0631", + "Set the scheduled date.": "\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0645\u0642\u0631\u0631.", + "Account Name": "\u0625\u0633\u0645 \u0627\u0644\u062d\u0633\u0627\u0628", + "Provider last name if necessary.": "\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u062e\u064a\u0631 \u0644\u0644\u0645\u0632\u0648\u062f \u0625\u0630\u0627 \u0644\u0632\u0645 \u0627\u0644\u0623\u0645\u0631.", + "Provide the user first name.": "\u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u0648\u0644 \u0644\u0644\u0645\u0633\u062a\u062e\u062f\u0645.", + "Provide the user last name.": "\u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u062e\u064a\u0631 \u0644\u0644\u0645\u0633\u062a\u062e\u062f\u0645.", + "Set the user gender.": "\u0636\u0628\u0637 \u062c\u0646\u0633 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645.", + "Set the user phone number.": "\u0636\u0628\u0637 \u0631\u0642\u0645 \u0647\u0627\u062a\u0641 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645.", + "Set the user PO Box.": "\u0642\u0645 \u0628\u062a\u0639\u064a\u064a\u0646 \u0635\u0646\u062f\u0648\u0642 \u0628\u0631\u064a\u062f \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645.", + "Provide the billing First Name.": "\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u0648\u0644 \u0644\u0644\u0641\u0648\u062a\u0631\u0629.", + "Last name": "\u0627\u0633\u0645 \u0627\u0644\u0639\u0627\u0626\u0644\u0629", + "Group Name": "\u0623\u0633\u0645 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629", + "Delete a user": "\u062d\u0630\u0641 \u0645\u0633\u062a\u062e\u062f\u0645", + "Activated": "\u0645\u0641\u0639\u0644", + "type": "\u064a\u0643\u062a\u0628", + "User Group": "\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646", + "Scheduled On": "\u062a\u0645\u062a \u062c\u062f\u0648\u0644\u062a\u0647", + "Biling": "\u0628\u064a\u0644\u064a\u0646\u063a", + "API Token": "\u0631\u0645\u0632 API", + "Your Account has been successfully created.": "\u0644\u0642\u062f \u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628\u0643 \u0628\u0646\u062c\u0627\u062d.", + "Unable to export if there is nothing to export.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u062a\u0635\u062f\u064a\u0631 \u0625\u0630\u0627 \u0644\u0645 \u064a\u0643\u0646 \u0647\u0646\u0627\u0643 \u0634\u064a\u0621 \u0644\u0644\u062a\u0635\u062f\u064a\u0631.", + "%s Coupons": "\u0643\u0648\u0628\u0648\u0646\u0627\u062a %s", + "%s Coupon History": "\u0633\u062c\u0644 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 %s", + "\"%s\" Record History": "\"%s\" \u0633\u062c\u0644 \u0627\u0644\u0633\u062c\u0644", + "The media name was successfully updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0633\u0645 \u0627\u0644\u0648\u0633\u0627\u0626\u0637 \u0628\u0646\u062c\u0627\u062d.", + "The role was successfully assigned.": "\u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u062f\u0648\u0631 \u0628\u0646\u062c\u0627\u062d.", + "The role were successfully assigned.": "\u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u062f\u0648\u0631 \u0628\u0646\u062c\u0627\u062d.", + "Unable to identifier the provided role.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u062f\u0648\u0631 \u0627\u0644\u0645\u0642\u062f\u0645.", + "Good Condition": "\u0628\u062d\u0627\u0644\u0629 \u062c\u064a\u062f\u0629", + "Cron Disabled": "\u0643\u0631\u0648\u0646 \u0645\u0639\u0637\u0644", + "Task Scheduling Disabled": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u062c\u062f\u0648\u0644\u0629 \u0627\u0644\u0645\u0647\u0627\u0645", + "NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.": "NexoPOS \u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062c\u062f\u0648\u0644\u0629 \u0645\u0647\u0627\u0645 \u0627\u0644\u062e\u0644\u0641\u064a\u0629. \u0642\u062f \u064a\u0624\u062f\u064a \u0647\u0630\u0627 \u0625\u0644\u0649 \u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0645\u064a\u0632\u0627\u062a \u0627\u0644\u0636\u0631\u0648\u0631\u064a\u0629. \u0627\u0646\u0642\u0631 \u0647\u0646\u0627 \u0644\u0645\u0639\u0631\u0641\u0629 \u0643\u064a\u0641\u064a\u0629 \u0625\u0635\u0644\u0627\u062d \u0630\u0644\u0643.", + "The email \"%s\" is already used for another customer.": "\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \"%s\" \u0645\u0633\u062a\u062e\u062f\u0645 \u0628\u0627\u0644\u0641\u0639\u0644 \u0644\u0639\u0645\u064a\u0644 \u0622\u062e\u0631.", + "The provided coupon cannot be loaded for that customer.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0645\u0642\u062f\u0645\u0629 \u0644\u0647\u0630\u0627 \u0627\u0644\u0639\u0645\u064a\u0644.", + "The provided coupon cannot be loaded for the group assigned to the selected customer.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0645\u0642\u062f\u0645\u0629 \u0644\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u062e\u0635\u0635\u0629 \u0644\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0645\u062d\u062f\u062f.", + "Unable to use the coupon %s as it has expired.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 %s \u0646\u0638\u0631\u064b\u0627 \u0644\u0627\u0646\u062a\u0647\u0627\u0621 \u0635\u0644\u0627\u062d\u064a\u062a\u0647\u0627.", + "Unable to use the coupon %s at this moment.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 %s \u0641\u064a \u0647\u0630\u0647 \u0627\u0644\u0644\u062d\u0638\u0629.", + "Small Box": "\u0635\u0646\u062f\u0648\u0642 \u0635\u063a\u064a\u0631", + "Box": "\u0635\u0646\u062f\u0648\u0642", + "%s products were freed": "\u062a\u0645 \u062a\u062d\u0631\u064a\u0631 %s \u0645\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a", + "Restoring cash flow from paid orders...": "\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0627\u0644\u062a\u062f\u0641\u0642 \u0627\u0644\u0646\u0642\u062f\u064a \u0645\u0646 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629...", + "Restoring cash flow from refunded orders...": "\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0627\u0644\u062a\u062f\u0641\u0642 \u0627\u0644\u0646\u0642\u062f\u064a \u0645\u0646 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0645\u0633\u062a\u0631\u062f\u0629...", + "%s on %s directories were deleted.": "\u062a\u0645 \u062d\u0630\u0641 %s \u0645\u0646 \u0623\u062f\u0644\u0629 %s.", + "%s on %s files were deleted.": "\u062a\u0645 \u062d\u0630\u0641 %s \u0645\u0646 \u0645\u0644\u0641\u0627\u062a %s.", + "First Day Of Month": "\u0627\u0644\u064a\u0648\u0645 \u0627\u0644\u0623\u0648\u0644 \u0645\u0646 \u0627\u0644\u0634\u0647\u0631", + "Last Day Of Month": "\u0622\u062e\u0631 \u064a\u0648\u0645 \u0645\u0646 \u0627\u0644\u0634\u0647\u0631", + "Month middle Of Month": "\u0634\u0647\u0631 \u0645\u0646\u062a\u0635\u0641 \u0627\u0644\u0634\u0647\u0631", + "{day} after month starts": "{\u064a\u0648\u0645} \u0628\u0639\u062f \u0628\u062f\u0627\u064a\u0629 \u0627\u0644\u0634\u0647\u0631", + "{day} before month ends": "{day} \u0642\u0628\u0644 \u0627\u0646\u062a\u0647\u0627\u0621 \u0627\u0644\u0634\u0647\u0631", + "Every {day} of the month": "\u0643\u0644 {\u064a\u0648\u0645} \u0645\u0646 \u0627\u0644\u0634\u0647\u0631", + "Days": "\u0623\u064a\u0627\u0645", + "Make sure set a day that is likely to be executed": "\u062a\u0623\u0643\u062f \u0645\u0646 \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u064a\u0648\u0645 \u0627\u0644\u0630\u064a \u0645\u0646 \u0627\u0644\u0645\u0631\u062c\u062d \u0623\u0646 \u064a\u062a\u0645 \u062a\u0646\u0641\u064a\u0630\u0647", + "Invalid Module provided.": "\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0648\u062d\u062f\u0629 \u0646\u0645\u0637\u064a\u0629 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d\u0629.", + "The module was \"%s\" was successfully installed.": "\u062a\u0645 \u062a\u062b\u0628\u064a\u062a \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \"%s\" \u0628\u0646\u062c\u0627\u062d.", + "The modules \"%s\" was deleted successfully.": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0648\u062d\u062f\u0627\u062a \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \"%s\" \u0628\u0646\u062c\u0627\u062d.", + "Unable to locate a module having as identifier \"%s\".": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u062f\u064a\u062f \u0645\u0648\u0642\u0639 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \u0630\u0627\u062a \u0627\u0644\u0645\u0639\u0631\u0641 \"%s\".", + "All migration were executed.": "\u062a\u0645 \u062a\u0646\u0641\u064a\u0630 \u062c\u0645\u064a\u0639 \u0627\u0644\u0647\u062c\u0631\u0629.", + "Unknown Product Status": "\u062d\u0627\u0644\u0629 \u0627\u0644\u0645\u0646\u062a\u062c \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641\u0629", + "Member Since": "\u0639\u0636\u0648 \u0645\u0646\u0630", + "Total Customers": "\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0639\u0645\u0644\u0627\u0621", + "The widgets was successfully updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0623\u062f\u0648\u0627\u062a \u0628\u0646\u062c\u0627\u062d.", + "The token was successfully created": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0645\u064a\u0632 \u0628\u0646\u062c\u0627\u062d", + "The token has been successfully deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0645\u064a\u0632 \u0628\u0646\u062c\u0627\u062d.", + "Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".": "\u062a\u0645\u0643\u064a\u0646 \u062e\u062f\u0645\u0627\u062a \u0627\u0644\u062e\u0644\u0641\u064a\u0629 \u0644\u0640 NexoPOS. \u0642\u0645 \u0628\u0627\u0644\u062a\u062d\u062f\u064a\u062b \u0644\u0644\u062a\u062d\u0642\u0642 \u0645\u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0627\u0644\u062e\u064a\u0627\u0631 \u0642\u062f \u062a\u062d\u0648\u0644 \u0625\u0644\u0649 \"\u0646\u0639\u0645\".", + "Will display all cashiers who performs well.": "\u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0635\u0631\u0627\u0641\u064a\u0646 \u0627\u0644\u0630\u064a\u0646 \u064a\u0642\u062f\u0645\u0648\u0646 \u0623\u062f\u0627\u0621\u064b \u062c\u064a\u062f\u064b\u0627.", + "Will display all customers with the highest purchases.": "\u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u062c\u0645\u064a\u0639 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0630\u0648\u064a \u0623\u0639\u0644\u0649 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.", + "Expense Card Widget": "\u0627\u0644\u0642\u0637\u0639\u0629 \u0628\u0637\u0627\u0642\u0629 \u0627\u0644\u0646\u0641\u0642\u0627\u062a", + "Will display a card of current and overwall expenses.": "\u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u0628\u0637\u0627\u0642\u0629 \u0627\u0644\u0646\u0641\u0642\u0627\u062a \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0648\u0627\u0644\u0646\u0641\u0642\u0627\u062a \u0627\u0644\u0639\u0627\u0645\u0629.", + "Incomplete Sale Card Widget": "\u0627\u0644\u0642\u0637\u0639\u0629 \u063a\u064a\u0631 \u0645\u0643\u062a\u0645\u0644\u0629 \u0644\u0628\u0637\u0627\u0642\u0629 \u0627\u0644\u0628\u064a\u0639", + "Will display a card of current and overall incomplete sales.": "\u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u0628\u0637\u0627\u0642\u0629 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0648\u063a\u064a\u0631 \u0627\u0644\u0645\u0643\u062a\u0645\u0644\u0629 \u0628\u0634\u0643\u0644 \u0639\u0627\u0645.", + "Orders Chart": "\u0645\u062e\u0637\u0637 \u0627\u0644\u0637\u0644\u0628\u0627\u062a", + "Will display a chart of weekly sales.": "\u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u0645\u062e\u0637\u0637 \u0644\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u0627\u0644\u0623\u0633\u0628\u0648\u0639\u064a\u0629.", + "Orders Summary": "\u0645\u0644\u062e\u0635 \u0627\u0644\u0637\u0644\u0628\u0627\u062a", + "Will display a summary of recent sales.": "\u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u0645\u0644\u062e\u0635 \u0644\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u0627\u0644\u0623\u062e\u064a\u0631\u0629.", + "Will display a profile widget with user stats.": "\u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u0623\u062f\u0627\u0629 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0634\u062e\u0635\u064a \u0645\u0639 \u0625\u062d\u0635\u0627\u0626\u064a\u0627\u062a \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645.", + "Sale Card Widget": "\u0627\u0644\u0642\u0637\u0639\u0629 \u0628\u0637\u0627\u0642\u0629 \u0627\u0644\u0628\u064a\u0639", + "Will display current and overall sales.": "\u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0648\u0627\u0644\u0625\u062c\u0645\u0627\u0644\u064a\u0629.", + "Return To Calendar": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u062a\u0642\u0648\u064a\u0645", + "Thr": "\u062b", + "The left range will be invalid.": "\u0633\u064a\u0643\u0648\u0646 \u0627\u0644\u0646\u0637\u0627\u0642 \u0627\u0644\u0623\u064a\u0633\u0631 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "The right range will be invalid.": "\u0627\u0644\u0646\u0637\u0627\u0642 \u0627\u0644\u0635\u062d\u064a\u062d \u0633\u064a\u0643\u0648\u0646 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "Click here to add widgets": "\u0627\u0646\u0642\u0631 \u0647\u0646\u0627 \u0644\u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u062d\u0627\u062c\u064a\u0627\u062a", + "Choose Widget": "\u0627\u062e\u062a\u0631 \u0627\u0644\u0642\u0637\u0639\u0629", + "Select with widget you want to add to the column.": "\u062d\u062f\u062f \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0623\u062f\u0627\u0629 \u0627\u0644\u062a\u064a \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u062a\u0647\u0627 \u0625\u0644\u0649 \u0627\u0644\u0639\u0645\u0648\u062f.", + "Unamed Tab": "\u0639\u0644\u0627\u0645\u0629 \u062a\u0628\u0648\u064a\u0628 \u063a\u064a\u0631 \u0645\u0633\u0645\u0627\u0629", + "An error unexpected occured while printing.": "\u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639 \u0623\u062b\u0646\u0627\u0621 \u0627\u0644\u0637\u0628\u0627\u0639\u0629.", + "and": "\u0648", + "{date} ago": "\u0645\u0646\u0630 {\u0627\u0644\u062a\u0627\u0631\u064a\u062e}.", + "In {date}": "\u0641\u064a \u0645\u0648\u0639\u062f}", + "An unexpected error occured.": "\u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639.", + "Warning": "\u062a\u062d\u0630\u064a\u0631", + "Change Type": "\u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u0646\u0648\u0639", + "Save Expense": "\u062d\u0641\u0638 \u0627\u0644\u0646\u0641\u0642\u0627\u062a", + "No configuration were choosen. Unable to proceed.": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u062e\u062a\u064a\u0627\u0631 \u0623\u064a \u062a\u0643\u0648\u064a\u0646. \u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627.", + "Conditions": "\u0634\u0631\u0648\u0637", + "By proceeding the current for and all your entries will be cleared. Would you like to proceed?": "\u0645\u0646 \u062e\u0644\u0627\u0644 \u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u062a\u064a\u0627\u0631 \u0648\u0633\u064a\u062a\u0645 \u0645\u0633\u062d \u062c\u0645\u064a\u0639 \u0625\u062f\u062e\u0627\u0644\u0627\u062a\u0643. \u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629\u061f", + "No modules matches your search term.": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0648\u062d\u062f\u0627\u062a \u062a\u0637\u0627\u0628\u0642 \u0645\u0635\u0637\u0644\u062d \u0627\u0644\u0628\u062d\u062b \u0627\u0644\u062e\u0627\u0635 \u0628\u0643.", + "Press \"\/\" to search modules": "\u0627\u0636\u063a\u0637 \u0639\u0644\u0649 \"\/\" \u0644\u0644\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "No module has been uploaded yet.": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u062d\u0645\u064a\u0644 \u0623\u064a \u0648\u062d\u062f\u0629 \u062d\u062a\u0649 \u0627\u0644\u0622\u0646.", + "{module}": "{\u0648\u062d\u062f\u0629}", + "Would you like to delete \"{module}\"? All data created by the module might also be deleted.": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062d\u0630\u0641 \"{module}\"\u061f \u0642\u062f \u064a\u062a\u0645 \u0623\u064a\u0636\u064b\u0627 \u062d\u0630\u0641 \u062c\u0645\u064a\u0639 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u062a\u064a \u0623\u0646\u0634\u0623\u062a\u0647\u0627 \u0627\u0644\u0648\u062d\u062f\u0629.", + "Search Medias": "\u0628\u062d\u062b \u0627\u0644\u0648\u0633\u0627\u0626\u0637", + "Bulk Select": "\u062a\u062d\u062f\u064a\u062f \u0628\u0627\u0644\u062c\u0645\u0644\u0629", + "Press "\/" to search permissions": "\u0627\u0636\u063a\u0637 \u0639\u0644\u0649 "\/" \u0644\u0623\u0630\u0648\u0646\u0627\u062a \u0627\u0644\u0628\u062d\u062b", + "SKU, Barcode, Name": "SKU\u060c \u0627\u0644\u0628\u0627\u0631\u0643\u0648\u062f\u060c \u0627\u0644\u0627\u0633\u0645", + "About Token": "\u062d\u0648\u0644 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0645\u064a\u0632", + "Save Token": "\u062d\u0641\u0638 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0645\u064a\u0632", + "Generated Tokens": "\u0627\u0644\u0631\u0645\u0648\u0632 \u0627\u0644\u0645\u0648\u0644\u062f\u0629", + "Created": "\u0645\u062e\u0644\u0648\u0642", + "Last Use": "\u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0623\u062e\u064a\u0631", + "Never": "\u0623\u0628\u062f\u0627\u064b", + "Expires": "\u062a\u0646\u062a\u0647\u064a", + "Revoke": "\u0633\u062d\u0628 \u0627\u0648 \u0625\u0628\u0637\u0627\u0644", + "Token Name": "\u0627\u0633\u0645 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0645\u064a\u0632", + "This will be used to identifier the token.": "\u0633\u064a\u062a\u0645 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0647\u0630\u0627 \u0644\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0645\u064a\u0632.", + "Unable to proceed, the form is not valid.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629\u060c \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.", + "An unexpected error occured": "\u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639", + "An Error Has Occured": "\u062d\u062f\u062b \u062e\u0637\u0623", + "Febuary": "\u0641\u0628\u0631\u0627\u064a\u0631", + "Configure": "\u062a\u0647\u064a\u0626\u0629", + "Unable to add the product": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0645\u0646\u062a\u062c", + "No result to result match the search value provided.": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0646\u062a\u064a\u062c\u0629 \u0644\u0644\u0646\u062a\u064a\u062c\u0629 \u062a\u0637\u0627\u0628\u0642 \u0642\u064a\u0645\u0629 \u0627\u0644\u0628\u062d\u062b \u0627\u0644\u0645\u0642\u062f\u0645\u0629.", + "This QR code is provided to ease authentication on external applications.": "\u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0631\u0645\u0632 \u0627\u0644\u0627\u0633\u062a\u062c\u0627\u0628\u0629 \u0627\u0644\u0633\u0631\u064a\u0639\u0629 \u0647\u0630\u0627 \u0644\u062a\u0633\u0647\u064a\u0644 \u0627\u0644\u0645\u0635\u0627\u062f\u0642\u0629 \u0639\u0644\u0649 \u0627\u0644\u062a\u0637\u0628\u064a\u0642\u0627\u062a \u0627\u0644\u062e\u0627\u0631\u062c\u064a\u0629.", + "Copy And Close": "\u0646\u0633\u062e \u0648\u0625\u063a\u0644\u0627\u0642", + "An error has occured": "\u062d\u062f\u062b \u062e\u0637\u0623", + "Recents Orders": "\u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0623\u062e\u064a\u0631\u0629", + "Unamed Page": "\u0635\u0641\u062d\u0629 \u063a\u064a\u0631 \u0645\u0633\u0645\u0627\u0629", + "Assignation": "\u0627\u0644\u062a\u0639\u064a\u064a\u0646", + "Incoming Conversion": "\u0627\u0644\u062a\u062d\u0648\u064a\u0644 \u0627\u0644\u0648\u0627\u0631\u062f", + "Outgoing Conversion": "\u0627\u0644\u062a\u062d\u0648\u064a\u0644 \u0627\u0644\u0635\u0627\u062f\u0631", + "Unknown Action": "\u0625\u062c\u0631\u0627\u0621 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641", + "Direct Transaction": "\u0627\u0644\u062a\u0639\u0627\u0645\u0644 \u0627\u0644\u0645\u0628\u0627\u0634\u0631", + "Recurring Transaction": "\u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0627\u0644\u0645\u062a\u0643\u0631\u0631\u0629", + "Entity Transaction": "\u0645\u0639\u0627\u0645\u0644\u0629 \u0627\u0644\u0643\u064a\u0627\u0646", + "Scheduled Transaction": "\u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0627\u0644\u0645\u062c\u062f\u0648\u0644\u0629", + "Unknown Type (%s)": "\u0646\u0648\u0639 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641 (%s)", + "What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.": "\u0645\u0627 \u0647\u064a \u0645\u0633\u0627\u062d\u0629 \u0627\u0633\u0645 \u0627\u0644\u0645\u0648\u0631\u062f CRUD. \u0639\u0644\u0649 \u0633\u0628\u064a\u0644 \u0627\u0644\u0645\u062b\u0627\u0644: \u0645\u0633\u062a\u062e\u062f\u0645\u0648 \u0627\u0644\u0646\u0638\u0627\u0645\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.", + "What is the full model name. eg: App\\Models\\Order ? [Q] to quit.": "\u0645\u0627 \u0647\u0648 \u0627\u0633\u0645 \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u0627\u0644\u0643\u0627\u0645\u0644. \u0639\u0644\u0649 \u0633\u0628\u064a\u0644 \u0627\u0644\u0645\u062b\u0627\u0644: \u0627\u0644\u062a\u0637\u0628\u064a\u0642\\\u0627\u0644\u0646\u0645\u0627\u0630\u062c\\\u0627\u0644\u0637\u0644\u0628\u061f [\u0633] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.", + "What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.": "\u0645\u0627 \u0647\u0648 \u0627\u0644\u0639\u0645\u0648\u062f \u0627\u0644\u0642\u0627\u0628\u0644 \u0644\u0644\u0645\u0644\u0621 \u0641\u064a \u0627\u0644\u062c\u062f\u0648\u0644: \u0639\u0644\u0649 \u0633\u0628\u064a\u0644 \u0627\u0644\u0645\u062b\u0627\u0644: \u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u060c \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a\u060c \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631\u061f [S] \u0644\u0644\u062a\u062e\u0637\u064a\u060c [Q] \u0644\u0644\u0627\u0646\u0633\u062d\u0627\u0628.", + "Unsupported argument provided: \"%s\"": "\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0648\u0633\u064a\u0637\u0629 \u063a\u064a\u0631 \u0645\u0639\u062a\u0645\u062f\u0629: \"%s\"", + "The authorization token can\\'t be changed manually.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u063a\u064a\u064a\u0631 \u0631\u0645\u0632 \u0627\u0644\u062a\u0641\u0648\u064a\u0636 \u064a\u062f\u0648\u064a\u064b\u0627.", + "Translation process is complete for the module %s !": "\u0627\u0643\u062a\u0645\u0644\u062a \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u062a\u0631\u062c\u0645\u0629 \u0644\u0644\u0648\u062d\u062f\u0629 %s!", + "%s migration(s) has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 %s \u0645\u0646 \u0639\u0645\u0644\u064a\u0627\u062a \u0627\u0644\u062a\u0631\u062d\u064a\u0644.", + "The command has been created for the module \"%s\"!": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0623\u0645\u0631 \u0644\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \"%s\"!", + "The controller has been created for the module \"%s\"!": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0648\u062d\u062f\u0629 \u0627\u0644\u062a\u062d\u0643\u0645 \u0644\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \"%s\"!", + "The event has been created at the following path \"%s\"!": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u062d\u062f\u062b \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0631 \u0627\u0644\u062a\u0627\u0644\u064a \"%s\"!", + "The listener has been created on the path \"%s\"!": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0633\u062a\u0645\u0639 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0631 \"%s\"!", + "A request with the same name has been found !": "\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0637\u0644\u0628 \u0628\u0646\u0641\u0633 \u0627\u0644\u0627\u0633\u0645!", + "Unable to find a module having the identifier \"%s\".": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \u0630\u0627\u062a \u0627\u0644\u0645\u0639\u0631\u0641 \"%s\".", + "Unsupported reset mode.": "\u0648\u0636\u0639 \u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u0636\u0628\u0637 \u063a\u064a\u0631 \u0645\u062f\u0639\u0648\u0645.", + "You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.": "\u0644\u0645 \u062a\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0627\u0633\u0645 \u0645\u0644\u0641 \u0635\u0627\u0644\u062d. \u0648\u064a\u062c\u0628 \u0623\u0644\u0627 \u064a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u0623\u064a \u0645\u0633\u0627\u0641\u0629 \u0623\u0648 \u0646\u0642\u0637\u0629 \u0623\u0648 \u0623\u062d\u0631\u0641 \u062e\u0627\u0635\u0629.", + "Unable to find a module having \"%s\" as namespace.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0648\u062d\u062f\u0629 \u062a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \"%s\" \u0643\u0645\u0633\u0627\u062d\u0629 \u0627\u0633\u0645.", + "A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.": "\u064a\u0648\u062c\u062f \u0645\u0644\u0641 \u0645\u0645\u0627\u062b\u0644 \u0628\u0627\u0644\u0641\u0639\u0644 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0631 \"%s\". \u0627\u0633\u062a\u062e\u062f\u0645 \"--force\" \u0644\u0644\u0643\u062a\u0627\u0628\u0629 \u0641\u0648\u0642\u0647.", + "A new form class was created at the path \"%s\"": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0641\u0626\u0629 \u0646\u0645\u0648\u0630\u062c \u062c\u062f\u064a\u062f\u0629 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0631 \"%s\"", + "Unable to proceed, looks like the database can\\'t be used.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629\u060c \u064a\u0628\u062f\u0648 \u0623\u0646\u0647 \u0644\u0627 \u064a\u0645\u0643\u0646 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a.", + "In which language would you like to install NexoPOS ?": "\u0628\u0623\u064a \u0644\u063a\u0629 \u062a\u0631\u064a\u062f \u062a\u062b\u0628\u064a\u062a NexoPOS\u061f", + "You must define the language of installation.": "\u064a\u062c\u0628 \u0639\u0644\u064a\u0643 \u062a\u062d\u062f\u064a\u062f \u0644\u063a\u0629 \u0627\u0644\u062a\u062b\u0628\u064a\u062a.", + "The value above which the current coupon can\\'t apply.": "\u0627\u0644\u0642\u064a\u0645\u0629 \u0627\u0644\u062a\u064a \u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u0637\u0628\u064a\u0642 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0641\u0648\u0642\u0647\u0627.", + "Unable to save the coupon product as this product doens\\'t exists.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062d\u0641\u0638 \u0645\u0646\u062a\u062c \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0644\u0623\u0646 \u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062a\u062c \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f.", + "Unable to save the coupon category as this category doens\\'t exists.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062d\u0641\u0638 \u0641\u0626\u0629 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0644\u0623\u0646 \u0647\u0630\u0647 \u0627\u0644\u0641\u0626\u0629 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f\u0629.", + "Unable to save the coupon as this category doens\\'t exists.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062d\u0641\u0638 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0644\u0623\u0646 \u0647\u0630\u0647 \u0627\u0644\u0641\u0626\u0629 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f\u0629.", + "You\\re not allowed to do that.": "\u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0644\u0643 \u0628\u0641\u0639\u0644 \u0630\u0644\u0643.", + "Crediting (Add)": "\u0627\u0644\u0627\u0639\u062a\u0645\u0627\u062f (\u0625\u0636\u0627\u0641\u0629)", + "Refund (Add)": "\u0627\u0633\u062a\u0631\u062f\u0627\u062f (\u0625\u0636\u0627\u0641\u0629)", + "Deducting (Remove)": "\u062e\u0635\u0645 (\u0625\u0632\u0627\u0644\u0629)", + "Payment (Remove)": "\u0627\u0644\u062f\u0641\u0639 (\u0625\u0632\u0627\u0644\u0629)", + "The assigned default customer group doesn\\'t exist or is not defined.": "\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 \u0627\u0644\u0645\u0639\u064a\u0646\u0629 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f\u0629 \u0623\u0648 \u0644\u0645 \u064a\u062a\u0645 \u062a\u0639\u0631\u064a\u0641\u0647\u0627.", + "Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0": "\u062a\u062d\u062f\u064a\u062f \u0628\u0627\u0644\u0646\u0633\u0628\u0629 \u0627\u0644\u0645\u0626\u0648\u064a\u0629\u060c \u0645\u0627 \u0647\u0648 \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0623\u0648\u0644 \u062f\u0641\u0639\u0629 \u0627\u0626\u062a\u0645\u0627\u0646\u064a\u0629 \u064a\u0642\u0648\u0645 \u0628\u0647\u0627 \u062c\u0645\u064a\u0639 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0641\u064a \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629\u060c \u0641\u064a \u062d\u0627\u0644\u0629 \u0623\u0645\u0631 \u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646. \u0625\u0630\u0627 \u062a\u0631\u0643\u062a \u0625\u0644\u0649 \"0", + "You\\'re not allowed to do this operation": "\u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0644\u0643 \u0628\u0627\u0644\u0642\u064a\u0627\u0645 \u0628\u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064a\u0629", + "If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.": "\u0625\u0630\u0627 \u062a\u0645 \u0627\u0644\u0646\u0642\u0631 \u0639\u0644\u0649 \u0644\u0627\u060c \u0641\u0644\u0646 \u062a\u0638\u0647\u0631 \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u062e\u0635\u0635\u0629 \u0644\u0647\u0630\u0647 \u0627\u0644\u0641\u0626\u0629 \u0623\u0648 \u062c\u0645\u064a\u0639 \u0627\u0644\u0641\u0626\u0627\u062a \u0627\u0644\u0641\u0631\u0639\u064a\u0629 \u0641\u064a \u0646\u0642\u0637\u0629 \u0627\u0644\u0628\u064a\u0639.", + "Convert Unit": "\u062a\u062d\u0648\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629", + "The unit that is selected for convertion by default.": "\u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u062d\u062f\u062f\u0629 \u0644\u0644\u062a\u062d\u0648\u064a\u0644 \u0628\u0634\u0643\u0644 \u0627\u0641\u062a\u0631\u0627\u0636\u064a.", + "COGS": "\u062a\u0643\u0644\u0641\u0629 \u0627\u0644\u0628\u0636\u0627\u0626\u0639 \u0627\u0644\u0645\u0628\u0627\u0639\u0629", + "Used to define the Cost of Goods Sold.": "\u064a\u0633\u062a\u062e\u062f\u0645 \u0644\u062a\u062d\u062f\u064a\u062f \u062a\u0643\u0644\u0641\u0629 \u0627\u0644\u0628\u0636\u0627\u0626\u0639 \u0627\u0644\u0645\u0628\u0627\u0639\u0629.", + "Visible": "\u0645\u0631\u0626\u064a", + "Define whether the unit is available for sale.": "\u062a\u062d\u062f\u064a\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0627\u0644\u0648\u062d\u062f\u0629 \u0645\u062a\u0627\u062d\u0629 \u0644\u0644\u0628\u064a\u0639.", + "Product unique name. If it\\' variation, it should be relevant for that variation": "\u0627\u0633\u0645 \u0641\u0631\u064a\u062f \u0644\u0644\u0645\u0646\u062a\u062c. \u0625\u0630\u0627 \u0643\u0627\u0646 \u0647\u0646\u0627\u0643 \u0627\u062e\u062a\u0644\u0627\u0641\u060c \u0641\u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0630\u0627 \u0635\u0644\u0629 \u0628\u0647\u0630\u0627 \u0627\u0644\u0627\u062e\u062a\u0644\u0627\u0641", + "The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.": "\u0644\u0646 \u064a\u0643\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c \u0645\u0631\u0626\u064a\u064b\u0627 \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u0648\u0644\u0646 \u064a\u062a\u0645 \u062c\u0644\u0628\u0647 \u0625\u0644\u0627 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0642\u0627\u0631\u0626 \u0627\u0644\u0628\u0627\u0631\u0643\u0648\u062f \u0623\u0648 \u0627\u0644\u0628\u0627\u0631\u0643\u0648\u062f \u0627\u0644\u0645\u0631\u062a\u0628\u0637 \u0628\u0647.", + "The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.": "\u0633\u064a\u062a\u0645 \u062d\u0633\u0627\u0628 \u062a\u0643\u0644\u0641\u0629 \u0627\u0644\u0628\u0636\u0627\u0626\u0639 \u0627\u0644\u0645\u0628\u0627\u0639\u0629 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0628\u0646\u0627\u0621\u064b \u0639\u0644\u0649 \u0627\u0644\u0634\u0631\u0627\u0621 \u0648\u0627\u0644\u062a\u062d\u0648\u064a\u0644.", + "Auto COGS": "\u062a\u0643\u0644\u0641\u0629 \u0627\u0644\u0628\u0636\u0627\u0626\u0639 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u064a\u0629", + "Unknown Type: %s": "\u0646\u0648\u0639 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641: %s", + "Shortage": "\u0646\u0642\u0635", + "Overage": "\u0641\u0627\u0626\u0636", + "Transactions List": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a", + "Display all transactions.": "\u0639\u0631\u0636 \u0643\u0627\u0641\u0629 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a.", + "No transactions has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a\u0629 \u0645\u0639\u0627\u0645\u0644\u0627\u062a", + "Add a new transaction": "\u0625\u0636\u0627\u0641\u0629 \u0645\u0639\u0627\u0645\u0644\u0629 \u062c\u062f\u064a\u062f\u0629", + "Create a new transaction": "\u0625\u0646\u0634\u0627\u0621 \u0645\u0639\u0627\u0645\u0644\u0629 \u062c\u062f\u064a\u062f\u0629", + "Register a new transaction and save it.": "\u062a\u0633\u062c\u064a\u0644 \u0645\u0639\u0627\u0645\u0644\u0629 \u062c\u062f\u064a\u062f\u0629 \u0648\u062d\u0641\u0638\u0647\u0627.", + "Edit transaction": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629", + "Modify Transaction.": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629.", + "Return to Transactions": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a", + "determine if the transaction is effective or not. Work for recurring and not recurring transactions.": "\u062a\u062d\u062f\u064a\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0627\u0644\u0635\u0641\u0642\u0629 \u0641\u0639\u0627\u0644\u0629 \u0623\u0645 \u0644\u0627. \u0627\u0644\u0639\u0645\u0644 \u0639\u0644\u0649 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0627\u0644\u0645\u062a\u0643\u0631\u0631\u0629 \u0648\u063a\u064a\u0631 \u0627\u0644\u0645\u062a\u0643\u0631\u0631\u0629.", + "Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.": "\u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646. \u0648\u0628\u0627\u0644\u062a\u0627\u0644\u064a \u0633\u064a\u062a\u0645 \u0636\u0631\u0628 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0628\u0639\u062f\u062f \u0627\u0644\u0643\u064a\u0627\u0646.", + "Transaction Account": "\u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a", + "Assign the transaction to an account430": "\u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0625\u0644\u0649 \u062d\u0633\u0627\u0628430", + "Is the value or the cost of the transaction.": "\u0647\u064a \u0642\u064a\u0645\u0629 \u0623\u0648 \u062a\u0643\u0644\u0641\u0629 \u0627\u0644\u0635\u0641\u0642\u0629.", + "If set to Yes, the transaction will trigger on defined occurrence.": "\u0625\u0630\u0627 \u062a\u0645 \u0627\u0644\u062a\u0639\u064a\u064a\u0646 \u0639\u0644\u0649 \u0646\u0639\u0645\u060c \u0641\u0633\u064a\u062a\u0645 \u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0639\u0646\u062f \u062d\u062f\u0648\u062b \u0645\u062d\u062f\u062f.", + "Define how often this transaction occurs": "\u062a\u062d\u062f\u064a\u062f \u0639\u062f\u062f \u0645\u0631\u0627\u062a \u062d\u062f\u0648\u062b \u0647\u0630\u0647 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629", + "Define what is the type of the transactions.": "\u062a\u062d\u062f\u064a\u062f \u0645\u0627 \u0647\u0648 \u0646\u0648\u0639 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a.", + "Trigger": "\u0645\u0634\u063a\u0644", + "Would you like to trigger this expense now?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u0641\u0639\u064a\u0644 \u0647\u0630\u0647 \u0627\u0644\u0646\u0641\u0642\u0627\u062a \u0627\u0644\u0622\u0646\u061f", + "Transactions History List": "\u0642\u0627\u0626\u0645\u0629 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a", + "Display all transaction history.": "\u0639\u0631\u0636 \u0643\u0644 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a.", + "No transaction history has been registered": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0633\u062c\u064a\u0644 \u0623\u064a \u0633\u062c\u0644 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a", + "Add a new transaction history": "\u0625\u0636\u0627\u0641\u0629 \u0633\u062c\u0644 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0627\u0644\u062c\u062f\u064a\u062f", + "Create a new transaction history": "\u0625\u0646\u0634\u0627\u0621 \u0633\u062c\u0644 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0627\u0644\u062c\u062f\u064a\u062f", + "Register a new transaction history and save it.": "\u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0633\u062c\u0644 \u0645\u0639\u0627\u0645\u0644\u0627\u062a \u062c\u062f\u064a\u062f \u0648\u0627\u062d\u0641\u0638\u0647.", + "Edit transaction history": "\u062a\u062d\u0631\u064a\u0631 \u0633\u062c\u0644 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a", + "Modify Transactions history.": "\u062a\u0639\u062f\u064a\u0644 \u0633\u062c\u0644 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a.", + "Return to Transactions History": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a", + "Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.": "\u062a\u0648\u0641\u064a\u0631 \u0642\u064a\u0645\u0629 \u0641\u0631\u064a\u062f\u0629 \u0644\u0647\u0630\u0647 \u0627\u0644\u0648\u062d\u062f\u0629. \u064a\u0645\u0643\u0646 \u0623\u0646 \u064a\u062a\u0643\u0648\u0646 \u0645\u0646 \u0627\u0633\u0645 \u0648\u0644\u0643\u0646 \u064a\u062c\u0628 \u0623\u0644\u0627 \u064a\u062a\u0636\u0645\u0646 \u0645\u0633\u0627\u0641\u0629 \u0623\u0648 \u0623\u062d\u0631\u0641 \u062e\u0627\u0635\u0629.", + "Set the limit that can\\'t be exceeded by the user.": "\u0642\u0645 \u0628\u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u062d\u062f \u0627\u0644\u0630\u064a \u0644\u0627 \u064a\u0645\u0643\u0646 \u0644\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u062a\u062c\u0627\u0648\u0632\u0647.", + "Oops, We\\'re Sorry!!!": "\u0639\u0641\u0648\u064b\u0627\u060c \u0646\u062d\u0646 \u0622\u0633\u0641\u0648\u0646!!!", + "Class: %s": "\u0627\u0644\u0641\u0626\u0629: %s", + "There\\'s is mismatch with the core version.": "\u0647\u0646\u0627\u0643 \u0639\u062f\u0645 \u062a\u0637\u0627\u0628\u0642 \u0645\u0639 \u0627\u0644\u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u0623\u0633\u0627\u0633\u064a.", + "You\\'re not authenticated.": "\u0644\u0645 \u062a\u062a\u0645 \u0645\u0635\u0627\u062f\u0642\u062a\u0643.", + "An error occured while performing your request.": "\u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u062a\u0646\u0641\u064a\u0630 \u0637\u0644\u0628\u0643.", + "A mismatch has occured between a module and it\\'s dependency.": "\u062d\u062f\u062b \u0639\u062f\u0645 \u062a\u0637\u0627\u0628\u0642 \u0628\u064a\u0646 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \u0648\u062a\u0628\u0639\u064a\u062a\u0647\u0627.", + "You\\'re not allowed to see that page.": "\u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0644\u0643 \u0628\u0631\u0624\u064a\u0629 \u062a\u0644\u0643 \u0627\u0644\u0635\u0641\u062d\u0629.", + "Post Too Large": "\u0645\u0634\u0627\u0631\u0643\u0629 \u0643\u0628\u064a\u0631\u0629 \u062c\u062f\u064b\u0627", + "The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini": "\u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u0645\u0642\u062f\u0645 \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0645\u062a\u0648\u0642\u0639. \u0641\u0643\u0631 \u0641\u064a \u0632\u064a\u0627\u062f\u0629 \"post_max_size\" \u0639\u0644\u0649 \u0645\u0644\u0641 PHP.ini \u0627\u0644\u062e\u0627\u0635 \u0628\u0643", + "This field does\\'nt have a valid value.": "\u0647\u0630\u0627 \u0627\u0644\u062d\u0642\u0644 \u0644\u0627 \u064a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u0642\u064a\u0645\u0629 \u0635\u0627\u0644\u062d\u0629.", + "Describe the direct transaction.": "\u0648\u0635\u0641 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0627\u0644\u0645\u0628\u0627\u0634\u0631\u0629.", + "If set to yes, the transaction will take effect immediately and be saved on the history.": "\u0625\u0630\u0627 \u062a\u0645 \u0627\u0644\u062a\u0639\u064a\u064a\u0646 \u0639\u0644\u0649 \u0646\u0639\u0645\u060c \u0641\u0633\u062a\u062f\u062e\u0644 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u062d\u064a\u0632 \u0627\u0644\u062a\u0646\u0641\u064a\u0630 \u0639\u0644\u0649 \u0627\u0644\u0641\u0648\u0631 \u0648\u0633\u064a\u062a\u0645 \u062d\u0641\u0638\u0647\u0627 \u0641\u064a \u0627\u0644\u0633\u062c\u0644.", + "Assign the transaction to an account.": "\u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0625\u0644\u0649 \u062d\u0633\u0627\u0628.", + "set the value of the transaction.": "\u062a\u0639\u064a\u064a\u0646 \u0642\u064a\u0645\u0629 \u0627\u0644\u0635\u0641\u0642\u0629.", + "Further details on the transaction.": "\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 \u062d\u0648\u0644 \u0627\u0644\u0635\u0641\u0642\u0629.", + "Describe the direct transactions.": "\u0648\u0635\u0641 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0627\u0644\u0645\u0628\u0627\u0634\u0631\u0629.", + "set the value of the transactions.": "\u062a\u0639\u064a\u064a\u0646 \u0642\u064a\u0645\u0629 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a.", + "The transactions will be multipled by the number of user having that role.": "\u0633\u064a\u062a\u0645 \u0645\u0636\u0627\u0639\u0641\u0629 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0628\u0639\u062f\u062f \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646 \u0627\u0644\u0630\u064a\u0646 \u0644\u062f\u064a\u0647\u0645 \u0647\u0630\u0627 \u0627\u0644\u062f\u0648\u0631.", + "Create Sales (needs Procurements)": "\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a (\u064a\u062d\u062a\u0627\u062c \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a)", + "Set when the transaction should be executed.": "\u0642\u0645 \u0628\u062a\u0639\u064a\u064a\u0646 \u0645\u062a\u0649 \u064a\u062c\u0628 \u062a\u0646\u0641\u064a\u0630 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629.", + "The addresses were successfully updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0639\u0646\u0627\u0648\u064a\u0646 \u0628\u0646\u062c\u0627\u062d.", + "Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.": "\u062a\u062d\u062f\u064a\u062f \u0645\u0627 \u0647\u064a \u0627\u0644\u0642\u064a\u0645\u0629 \u0627\u0644\u0641\u0639\u0644\u064a\u0629 \u0644\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a. \u0628\u0645\u062c\u0631\u062f \"\u0627\u0644\u062a\u0633\u0644\u064a\u0645\" \u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u062d\u0627\u0644\u0629\u060c \u0648\u0633\u064a\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0645\u062e\u0632\u0648\u0646.", + "The register doesn\\'t have an history.": "\u0627\u0644\u0633\u062c\u0644 \u0644\u064a\u0633 \u0644\u0647 \u062a\u0627\u0631\u064a\u062e.", + "Unable to check a register session history if it\\'s closed.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0633\u062c\u0644 \u062c\u0644\u0633\u0629 \u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0645\u063a\u0644\u0642\u0627\u064b.", + "Register History For : %s": "\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062a\u0627\u0631\u064a\u062e \u0644\u0640 : %s", + "Can\\'t delete a category having sub categories linked to it.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062d\u0630\u0641 \u0641\u0626\u0629 \u0644\u0647\u0627 \u0641\u0626\u0627\u062a \u0641\u0631\u0639\u064a\u0629 \u0645\u0631\u062a\u0628\u0637\u0629 \u0628\u0647\u0627.", + "Unable to proceed. The request doesn\\'t provide enough data which could be handled": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627. \u0644\u0627 \u064a\u0648\u0641\u0631 \u0627\u0644\u0637\u0644\u0628 \u0628\u064a\u0627\u0646\u0627\u062a \u0643\u0627\u0641\u064a\u0629 \u064a\u0645\u0643\u0646 \u0645\u0639\u0627\u0644\u062c\u062a\u0647\u0627", + "Unable to load the CRUD resource : %s.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u0645\u064a\u0644 \u0645\u0648\u0631\u062f CRUD : %s.", + "Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u0639\u0646\u0627\u0635\u0631. \u0644\u0627 \u064a\u0642\u0648\u0645 \u0645\u0648\u0631\u062f CRUD \u0627\u0644\u062d\u0627\u0644\u064a \u0628\u062a\u0646\u0641\u064a\u0630 \u0623\u0633\u0627\u0644\u064a\u0628 \"getEntries\".", + "The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0639\u0631\u064a\u0641 \u0627\u0644\u0641\u0626\u0629 \"%s\". \u0647\u0644 \u0647\u0630\u0647 \u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u062e\u0627\u0645 \u0645\u0648\u062c\u0648\u062f\u0629\u061f \u062a\u0623\u0643\u062f \u0645\u0646 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u0645\u062b\u064a\u0644 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0627\u0644\u0623\u0645\u0631 \u0643\u0630\u0644\u0643.", + "The crud columns exceed the maximum column that can be exported (27)": "\u0623\u0639\u0645\u062f\u0629 \u0627\u0644\u062e\u0627\u0645 \u062a\u062a\u062c\u0627\u0648\u0632 \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0639\u0645\u0648\u062f \u0627\u0644\u0630\u064a \u064a\u0645\u0643\u0646 \u062a\u0635\u062f\u064a\u0631\u0647 (27)", + "This link has expired.": "\u0627\u0646\u062a\u0647\u062a \u0635\u0644\u0627\u062d\u064a\u0629 \u0647\u0630\u0627 \u0627\u0644\u0631\u0627\u0628\u0637.", + "Account History : %s": "\u0633\u062c\u0644 \u0627\u0644\u062d\u0633\u0627\u0628 : %s", + "Welcome — %s": "\u0645\u0631\u062d\u0628\u064b\u0627 — \u066a\u0633", + "Upload and manage medias (photos).": "\u062a\u062d\u0645\u064a\u0644 \u0648\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0648\u0633\u0627\u0626\u0637 (\u0627\u0644\u0635\u0648\u0631).", + "The product which id is %s doesnt\\'t belong to the procurement which id is %s": "\u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0630\u064a \u0644\u0647 \u0627\u0644\u0645\u0639\u0631\u0641 %s \u0644\u0627 \u064a\u0646\u062a\u0645\u064a \u0625\u0644\u0649 \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0634\u0631\u0627\u0621 \u0627\u0644\u062a\u064a \u064a\u0643\u0648\u0646 \u0627\u0644\u0645\u0639\u0631\u0641 \u0644\u0647\u0627 %s", + "The refresh process has started. You\\'ll get informed once it\\'s complete.": "\u0628\u062f\u0623\u062a \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u062a\u062d\u062f\u064a\u062b. \u0633\u064a\u062a\u0645 \u0625\u0639\u0644\u0627\u0645\u0643 \u0628\u0645\u062c\u0631\u062f \u0627\u0643\u062a\u0645\u0627\u0644\u0647.", + "The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".": "\u0644\u0645 \u064a\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0627\u062e\u062a\u0644\u0627\u0641 \u0644\u0623\u0646\u0647 \u0642\u062f \u0644\u0627 \u064a\u0643\u0648\u0646 \u0645\u0648\u062c\u0648\u062f\u064b\u0627 \u0623\u0648 \u0644\u0645 \u064a\u062a\u0645 \u062a\u0639\u064a\u064a\u0646\u0647 \u0644\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0623\u0635\u0644\u064a \"%s\".", + "Stock History For %s": "\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0644\u0640 %s", + "Set": "\u062a\u0639\u064a\u064a\u0646", + "The unit is not set for the product \"%s\".": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0648\u062d\u062f\u0629 \u0644\u0644\u0645\u0646\u062a\u062c \"%s\".", + "The operation will cause a negative stock for the product \"%s\" (%s).": "\u0633\u062a\u0624\u062f\u064a \u0627\u0644\u0639\u0645\u0644\u064a\u0629 \u0625\u0644\u0649 \u0645\u062e\u0632\u0648\u0646 \u0633\u0644\u0628\u064a \u0644\u0644\u0645\u0646\u062a\u062c \"%s\" (%s).", + "The adjustment quantity can\\'t be negative for the product \"%s\" (%s)": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0643\u0645\u064a\u0629 \u0627\u0644\u062a\u0639\u062f\u064a\u0644 \u0633\u0627\u0644\u0628\u0629 \u0644\u0644\u0645\u0646\u062a\u062c \"%s\" (%s)", + "%s\\'s Products": "\u0645\u0646\u062a\u062c\u0627\u062a %s\\'s", + "Transactions Report": "\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a", + "Combined Report": "\u0627\u0644\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0645\u0648\u062d\u062f", + "Provides a combined report for every transactions on products.": "\u064a\u0648\u0641\u0631 \u062a\u0642\u0631\u064a\u0631\u064b\u0627 \u0645\u062c\u0645\u0639\u064b\u0627 \u0644\u0643\u0644 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a.", + "Unable to initiallize the settings page. The identifier \"' . $identifier . '": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u0647\u064a\u0626\u0629 \u0635\u0641\u062d\u0629 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a. \u0627\u0644\u0645\u0639\u0631\u0641 \"' . $identifier .'", + "Shows all histories generated by the transaction.": "\u064a\u0639\u0631\u0636 \u0643\u0627\u0641\u0629 \u0627\u0644\u062a\u0648\u0627\u0631\u064a\u062e \u0627\u0644\u062a\u064a \u062a\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0628\u0648\u0627\u0633\u0637\u0629 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629.", + "Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0627\u0644\u0645\u062c\u062f\u0648\u0644\u0629 \u0648\u0627\u0644\u0645\u062a\u0643\u0631\u0631\u0629 \u0648\u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0627\u0644\u0643\u064a\u0627\u0646 \u062d\u064a\u062b \u0644\u0645 \u064a\u062a\u0645 \u062a\u0643\u0648\u064a\u0646 \u0642\u0648\u0627\u0626\u0645 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d.", + "Create New Transaction": "\u0625\u0646\u0634\u0627\u0621 \u0645\u0639\u0627\u0645\u0644\u0629 \u062c\u062f\u064a\u062f\u0629", + "Set direct, scheduled transactions.": "\u0636\u0628\u0637 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0627\u0644\u0645\u0628\u0627\u0634\u0631\u0629 \u0648\u0627\u0644\u0645\u062c\u062f\u0648\u0644\u0629.", + "Update Transaction": "\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629", + "The provided data aren\\'t valid": "\u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0645\u0642\u062f\u0645\u0629 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d\u0629", + "Welcome — NexoPOS": "\u0645\u0631\u062d\u0628\u064b\u0627 — \u0646\u064a\u0643\u0633\u0648\u0628\u0648\u0633", + "You\\'re not allowed to see this page.": "\u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0644\u0643 \u0628\u0631\u0624\u064a\u0629 \u0647\u0630\u0647 \u0627\u0644\u0635\u0641\u062d\u0629.", + "Your don\\'t have enough permission to perform this action.": "\u0644\u064a\u0633 \u0644\u062f\u064a\u0643 \u0627\u0644\u0625\u0630\u0646 \u0627\u0644\u0643\u0627\u0641\u064a \u0644\u0644\u0642\u064a\u0627\u0645 \u0628\u0647\u0630\u0627 \u0627\u0644\u0625\u062c\u0631\u0627\u0621.", + "You don\\'t have the necessary role to see this page.": "\u0644\u064a\u0633 \u0644\u062f\u064a\u0643 \u0627\u0644\u062f\u0648\u0631 \u0627\u0644\u0644\u0627\u0632\u0645 \u0644\u0631\u0624\u064a\u0629 \u0647\u0630\u0647 \u0627\u0644\u0635\u0641\u062d\u0629.", + "%s product(s) has low stock. Reorder those product(s) before it get exhausted.": "\u064a\u062d\u062a\u0648\u064a \u0645\u0646\u062a\u062c (\u0645\u0646\u062a\u062c\u0627\u062a) %s \u0639\u0644\u0649 \u0645\u062e\u0632\u0648\u0646 \u0645\u0646\u062e\u0641\u0636. \u0623\u0639\u062f \u0637\u0644\u0628 \u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062a\u062c (\u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a) \u0642\u0628\u0644 \u0627\u0633\u062a\u0646\u0641\u0627\u062f\u0647.", + "Scheduled Transactions": "\u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0627\u0644\u0645\u062c\u062f\u0648\u0644\u0629", + "the transaction \"%s\" was executed as scheduled on %s.": "\u062a\u0645 \u062a\u0646\u0641\u064a\u0630 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \"%s\" \u0643\u0645\u0627 \u0647\u0648 \u0645\u0642\u0631\u0631 \u0641\u064a %s.", + "Workers Aren\\'t Running": "\u0627\u0644\u0639\u0645\u0627\u0644 \u0644\u0627 \u064a\u0631\u0643\u0636\u0648\u0646", + "The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.": "\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0639\u0645\u0627\u0644\u060c \u0648\u0644\u0643\u0646 \u064a\u0628\u062f\u0648 \u0623\u0646 NexoPOS \u0644\u0627 \u064a\u0645\u0643\u0646\u0647 \u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0639\u0645\u0627\u0644. \u064a\u062d\u062f\u062b \u0647\u0630\u0627 \u0639\u0627\u062f\u0629\u064b \u0625\u0630\u0627 \u0644\u0645 \u064a\u062a\u0645 \u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u0645\u0634\u0631\u0641 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d.", + "Unable to remove the permissions \"%s\". It doesn\\'t exists.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0623\u0630\u0648\u0646\u0627\u062a \"%s\". \u0625\u0646\u0647 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f.", + "Unable to open \"%s\" *, as it\\'s not closed.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0641\u062a\u062d \"%s\" *\u060c \u0644\u0623\u0646\u0647 \u063a\u064a\u0631 \u0645\u063a\u0644\u0642.", + "Unable to open \"%s\" *, as it\\'s not opened.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0641\u062a\u062d \"%s\" *\u060c \u0644\u0623\u0646\u0647 \u063a\u064a\u0631 \u0645\u0641\u062a\u0648\u062d.", + "Unable to cashing on \"%s\" *, as it\\'s not opened.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0635\u0631\u0641 \u0623\u0645\u0648\u0627\u0644 \"%s\" *\u060c \u0644\u0623\u0646\u0647 \u0644\u0645 \u064a\u062a\u0645 \u0641\u062a\u062d\u0647.", + "Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.": "\u0644\u0627 \u064a\u0648\u062c\u062f \u0631\u0635\u064a\u062f \u0643\u0627\u0641\u064d \u0644\u062d\u0630\u0641 \u0639\u0645\u0644\u064a\u0629 \u0628\u064a\u0639 \u0645\u0646 \"%s\". \u0625\u0630\u0627 \u062a\u0645 \u0633\u062d\u0628 \u0627\u0644\u0623\u0645\u0648\u0627\u0644 \u0623\u0648 \u0635\u0631\u0641\u0647\u0627\u060c \u0641\u0643\u0631 \u0641\u064a \u0625\u0636\u0627\u0641\u0629 \u0628\u0639\u0636 \u0627\u0644\u0623\u0645\u0648\u0627\u0644 \u0627\u0644\u0646\u0642\u062f\u064a\u0629 (%s) \u0625\u0644\u0649 \u0627\u0644\u0633\u062c\u0644.", + "Unable to cashout on \"%s": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0633\u062d\u0628 \u0639\u0644\u0649 \"%s", + "Symbolic Links Missing": "\u0627\u0644\u0631\u0648\u0627\u0628\u0637 \u0627\u0644\u0631\u0645\u0632\u064a\u0629 \u0645\u0641\u0642\u0648\u062f\u0629", + "The Symbolic Links to the public directory is missing. Your medias might be broken and not display.": "\u0627\u0644\u0627\u0631\u062a\u0628\u0627\u0637\u0627\u062a \u0627\u0644\u0631\u0645\u0632\u064a\u0629 \u0644\u0644\u062f\u0644\u064a\u0644 \u0627\u0644\u0639\u0627\u0645 \u0645\u0641\u0642\u0648\u062f\u0629. \u0642\u062f \u062a\u0643\u0648\u0646 \u0627\u0644\u0648\u0633\u0627\u0626\u0637 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643 \u0645\u0639\u0637\u0644\u0629 \u0648\u0644\u0627 \u064a\u062a\u0645 \u0639\u0631\u0636\u0647\u0627.", + "Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0643\u0648\u064a\u0646 \u0648\u0638\u0627\u0626\u0641 Cron \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d \u0639\u0644\u0649 NexoPOS. \u0642\u062f \u064a\u0624\u062f\u064a \u0647\u0630\u0627 \u0625\u0644\u0649 \u062a\u0642\u064a\u064a\u062f \u0627\u0644\u0645\u064a\u0632\u0627\u062a \u0627\u0644\u0636\u0631\u0648\u0631\u064a\u0629. \u0627\u0646\u0642\u0631 \u0647\u0646\u0627 \u0644\u0645\u0639\u0631\u0641\u0629 \u0643\u064a\u0641\u064a\u0629 \u0625\u0635\u0644\u0627\u062d \u0630\u0644\u0643.", + "The requested module %s cannot be found.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 %s.", + "The manifest.json can\\'t be located inside the module %s on the path: %s": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u062d\u062f\u064a\u062f \u0645\u0648\u0642\u0639 \u0645\u0644\u0641 Manifest.json \u062f\u0627\u062e\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 %s \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0631: %s", + "the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \"%s\" \u062f\u0627\u062e\u0644 \u0627\u0644\u0645\u0644\u0641 Manifest.json \u0644\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 %s.", + "Sorting is explicitely disabled for the column \"%s\".": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0641\u0631\u0632 \u0628\u0634\u0643\u0644 \u0635\u0631\u064a\u062d \u0644\u0644\u0639\u0645\u0648\u062f \"%s\".", + "Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062d\u0630\u0641 \"%s\" \u0644\u0623\u0646\u0647\\ \u062a\u0627\u0628\u0639 \u0644\u0640 \"%s\"%s", + "Unable to find the customer using the provided id %s.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064a\u0644 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645 %s.", + "Not enough credits on the customer account. Requested : %s, Remaining: %s.": "\u0639\u062f\u0645 \u0648\u062c\u0648\u062f \u0623\u0631\u0635\u062f\u0629 \u0643\u0627\u0641\u064a\u0629 \u0641\u064a \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644. \u0627\u0644\u0645\u0637\u0644\u0648\u0628: %s\u060c \u0627\u0644\u0645\u062a\u0628\u0642\u064a: %s.", + "The customer account doesn\\'t have enough funds to proceed.": "\u0644\u0627 \u064a\u062d\u062a\u0648\u064a \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644 \u0639\u0644\u0649 \u0623\u0645\u0648\u0627\u0644 \u0643\u0627\u0641\u064a\u0629 \u0644\u0644\u0645\u062a\u0627\u0628\u0639\u0629.", + "Unable to find a reference to the attached coupon : %s": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0645\u0631\u062c\u0639 \u0644\u0644\u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0645\u0631\u0641\u0642\u0629: %s", + "You\\'re not allowed to use this coupon as it\\'s no longer active": "\u0644\u0627 \u064a\u064f\u0633\u0645\u062d \u0644\u0643 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0647\u0630\u0647 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0644\u0623\u0646\u0647\u0627 \u0644\u0645 \u062a\u0639\u062f \u0646\u0634\u0637\u0629", + "You\\'re not allowed to use this coupon it has reached the maximum usage allowed.": "\u0644\u0627 \u064a\u0633\u0645\u062d \u0644\u0643 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0647\u0630\u0647 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0644\u0642\u062f \u0648\u0635\u0644\u062a \u0625\u0644\u0649 \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0633\u0645\u0648\u062d \u0628\u0647.", + "Terminal A": "\u0627\u0644\u0645\u062d\u0637\u0629 \u0623", + "Terminal B": "\u0627\u0644\u0645\u062d\u0637\u0629 \u0628", + "%s link were deleted": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0631\u0627\u0628\u0637 %s", + "Unable to execute the following class callback string : %s": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u0646\u0641\u064a\u0630 \u0633\u0644\u0633\u0644\u0629 \u0631\u062f \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0644\u0644\u0641\u0626\u0629 \u0627\u0644\u062a\u0627\u0644\u064a\u0629: %s", + "%s — %s": "%s — \u066a\u0633", + "Transactions": "\u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a", + "Create Transaction": "\u0625\u0646\u0634\u0627\u0621 \u0645\u0639\u0627\u0645\u0644\u0629", + "Stock History": "\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0623\u0633\u0647\u0645", + "Invoices": "\u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631", + "Failed to parse the configuration file on the following path \"%s\"": "\u0641\u0634\u0644 \u062a\u062d\u0644\u064a\u0644 \u0645\u0644\u0641 \u0627\u0644\u062a\u0643\u0648\u064a\u0646 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0631 \u0627\u0644\u062a\u0627\u0644\u064a \"%s\"", + "No config.xml has been found on the directory : %s. This folder is ignored": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 config.xml \u0641\u064a \u0627\u0644\u062f\u0644\u064a\u0644 : %s. \u064a\u062a\u0645 \u062a\u062c\u0627\u0647\u0644 \u0647\u0630\u0627 \u0627\u0644\u0645\u062c\u0644\u062f", + "The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0629 \"%s\" \u0644\u0623\u0646\u0647\u0627\\ \u063a\u064a\u0631 \u0645\u062a\u0648\u0627\u0641\u0642\u0629 \u0645\u0639 \u0627\u0644\u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u062d\u0627\u0644\u064a \u0645\u0646 NexoPOS %s\u060c \u0648\u0644\u0643\u0646\u0647\u0627 \u062a\u062a\u0637\u0644\u0628 %s.", + "Unable to upload this module as it\\'s older than the version installed": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u0645\u064a\u0644 \u0647\u0630\u0647 \u0627\u0644\u0648\u062d\u062f\u0629 \u0644\u0623\u0646\u0647\u0627 \u0623\u0642\u062f\u0645 \u0645\u0646 \u0627\u0644\u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u0645\u062b\u0628\u062a", + "The migration file doens\\'t have a valid class name. Expected class : %s": "\u0644\u0627 \u064a\u062d\u062a\u0648\u064a \u0645\u0644\u0641 \u0627\u0644\u062a\u0631\u062d\u064a\u0644 \u0639\u0644\u0649 \u0627\u0633\u0645 \u0641\u0626\u0629 \u0635\u0627\u0644\u062d. \u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u0645\u062a\u0648\u0642\u0639\u0629: %s", + "Unable to locate the following file : %s": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u062f\u064a\u062f \u0645\u0648\u0642\u0639 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u062a\u0627\u0644\u064a: %s", + "The migration file doens\\'t have a valid method name. Expected method : %s": "\u0644\u0627 \u064a\u062d\u062a\u0648\u064a \u0645\u0644\u0641 \u0627\u0644\u062a\u0631\u062d\u064a\u0644 \u0639\u0644\u0649 \u0627\u0633\u0645 \u0623\u0633\u0644\u0648\u0628 \u0635\u0627\u0644\u062d. \u0627\u0644\u0637\u0631\u064a\u0642\u0629 \u0627\u0644\u0645\u062a\u0648\u0642\u0639\u0629 : %s", + "The module %s cannot be enabled as his dependency (%s) is missing or not enabled.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0648\u062d\u062f\u0629 %s \u0644\u0623\u0646 \u062a\u0628\u0639\u064a\u062a\u0647\u0627 (%s) \u0645\u0641\u0642\u0648\u062f\u0629 \u0623\u0648 \u063a\u064a\u0631 \u0645\u0645\u0643\u0651\u0646\u0629.", + "The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0646\u0645\u0637\u064a\u0629 %s \u0644\u0623\u0646 \u062a\u0628\u0639\u064a\u0627\u062a\u0647 (%s) \u0645\u0641\u0642\u0648\u062f\u0629 \u0623\u0648 \u063a\u064a\u0631 \u0645\u0645\u0643\u0651\u0646\u0629.", + "An Error Occurred \"%s\": %s": "\u062d\u062f\u062b \u062e\u0637\u0623 \"%s\": %s", + "The order has been updated": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0637\u0644\u0628", + "The minimal payment of %s has\\'nt been provided.": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0644\u062f\u0641\u0639 \u0648\u0647\u0648 %s.", + "Unable to proceed as the order is already paid.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0644\u0623\u0646 \u0627\u0644\u0637\u0644\u0628 \u0642\u062f \u062a\u0645 \u062f\u0641\u0639\u0647 \u0628\u0627\u0644\u0641\u0639\u0644.", + "The customer account funds are\\'nt enough to process the payment.": "\u0623\u0645\u0648\u0627\u0644 \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644 \u063a\u064a\u0631 \u0643\u0627\u0641\u064a\u0629 \u0644\u0645\u0639\u0627\u0644\u062c\u0629 \u0627\u0644\u062f\u0641\u0639.", + "Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627. \u0644\u0627 \u064a\u064f\u0633\u0645\u062d \u0628\u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629 \u062c\u0632\u0626\u064a\u064b\u0627. \u064a\u0645\u0643\u0646 \u062a\u063a\u064a\u064a\u0631 \u0647\u0630\u0627 \u0627\u0644\u062e\u064a\u0627\u0631 \u0641\u064a \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a.", + "Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627. \u0644\u0627 \u064a\u064f\u0633\u0645\u062d \u0628\u0627\u0644\u0637\u0644\u0628\u0627\u062a \u063a\u064a\u0631 \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0629. \u064a\u0645\u0643\u0646 \u062a\u063a\u064a\u064a\u0631 \u0647\u0630\u0627 \u0627\u0644\u062e\u064a\u0627\u0631 \u0641\u064a \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a.", + "By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.": "\u0645\u0646 \u062e\u0644\u0627\u0644 \u0645\u062a\u0627\u0628\u0639\u0629 \u0647\u0630\u0627 \u0627\u0644\u0637\u0644\u0628\u060c \u0633\u064a\u062a\u062c\u0627\u0648\u0632 \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0631\u0635\u064a\u062f \u0627\u0644\u0645\u0633\u0645\u0648\u062d \u0628\u0647 \u0644\u062d\u0633\u0627\u0628\u0647: %s.", + "You\\'re not allowed to make payments.": "\u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0644\u0643 \u0628\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u062f\u0641\u0639\u0627\u062a.", + "Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629\u060c \u0644\u0627 \u064a\u0648\u062c\u062f \u0645\u062e\u0632\u0648\u0646 \u0643\u0627\u0641\u064d \u0644\u0640 %s \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0648\u062d\u062f\u0629 %s. \u0627\u0644\u0645\u0637\u0644\u0648\u0628: %s\u060c \u0645\u062a\u0627\u062d %s", + "Unknown Status (%s)": "\u062d\u0627\u0644\u0629 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641\u0629 (%s)", + "%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.": "%s \u0623\u0645\u0631 (\u0637\u0644\u0628\u0627\u062a) \u063a\u064a\u0631 \u0645\u062f\u0641\u0648\u0639\u0629 \u0623\u0648 \u0645\u062f\u0641\u0648\u0639\u0629 \u062c\u0632\u0626\u064a\u064b\u0627 \u0623\u0635\u0628\u062d\u062a \u0645\u0633\u062a\u062d\u0642\u0629 \u0627\u0644\u062f\u0641\u0639. \u064a\u062d\u062f\u062b \u0647\u0630\u0627 \u0625\u0630\u0627 \u0644\u0645 \u064a\u062a\u0645 \u0625\u0643\u0645\u0627\u0644 \u0623\u064a \u0645\u0646\u0647\u0627 \u0642\u0628\u0644 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u062f\u0641\u0639 \u0627\u0644\u0645\u062a\u0648\u0642\u0639.", + "Unable to find a reference of the provided coupon : %s": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0645\u0631\u062c\u0639 \u0644\u0644\u0642\u0633\u064a\u0645\u0629 \u0627\u0644\u0645\u062a\u0648\u0641\u0631\u0629: %s", + "The procurement has been deleted. %s included stock record(s) has been deleted as well.": "\u062a\u0645 \u062d\u0630\u0641 \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0634\u0631\u0627\u0621. \u062a\u0645 \u0623\u064a\u0636\u064b\u0627 \u062d\u0630\u0641 %s \u0645\u0646 \u0633\u062c\u0644 (\u0633\u062c\u0644\u0627\u062a) \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0636\u0645\u0646\u0629.", + "Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062d\u0630\u0641 \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0634\u0631\u0627\u0621 \u0644\u0623\u0646\u0647 \u0644\u0627 \u064a\u0648\u062c\u062f \u0645\u062e\u0632\u0648\u0646 \u0643\u0627\u0641\u064d \u0644\u0640 \"%s\" \u0641\u064a \u0627\u0644\u0648\u062d\u062f\u0629 \"%s\". \u0648\u0647\u0630\u0627 \u064a\u0639\u0646\u064a \u0639\u0644\u0649 \u0627\u0644\u0623\u0631\u062c\u062d \u0623\u0646 \u0639\u062f\u062f \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0642\u062f \u062a\u063a\u064a\u0631 \u0633\u0648\u0627\u0621 \u0645\u0639 \u0627\u0644\u0628\u064a\u0639\u060c \u0623\u0648 \u0627\u0644\u062a\u0639\u062f\u064a\u0644 \u0628\u0639\u062f \u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a.", + "Unable to find the product using the provided id \"%s\"": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645 \"%s\"", + "Unable to procure the product \"%s\" as the stock management is disabled.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0634\u0631\u0627\u0621 \u0627\u0644\u0645\u0646\u062a\u062c \"%s\" \u0644\u0623\u0646 \u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0645\u0639\u0637\u0644\u0629.", + "Unable to procure the product \"%s\" as it is a grouped product.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0634\u0631\u0627\u0621 \u0627\u0644\u0645\u0646\u062a\u062c \"%s\" \u0644\u0623\u0646\u0647 \u0645\u0646\u062a\u062c \u0645\u062c\u0645\u0639.", + "The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item": "\u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u0629 \u0644\u0644\u0645\u0646\u062a\u062c %s \u0644\u0627 \u062a\u0646\u062a\u0645\u064a \u0625\u0644\u0649 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a \u0627\u0644\u0645\u062e\u0635\u0635\u0629 \u0644\u0644\u0639\u0646\u0635\u0631", + "%s procurement(s) has recently been automatically procured.": "\u062a\u0645 \u0645\u0624\u062e\u0631\u064b\u0627 \u0634\u0631\u0627\u0621 %s \u0645\u0646 \u0639\u0645\u0644\u064a\u0627\u062a \u0627\u0644\u0634\u0631\u0627\u0621 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627.", + "The requested category doesn\\'t exists": "\u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f\u0629", + "The category to which the product is attached doesn\\'t exists or has been deleted": "\u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u062a\u064a \u062a\u0645 \u0625\u0631\u0641\u0627\u0642 \u0627\u0644\u0645\u0646\u062a\u062c \u0628\u0647\u0627 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f\u0629 \u0623\u0648 \u062a\u0645 \u062d\u0630\u0641\u0647\u0627", + "Unable to create a product with an unknow type : %s": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0625\u0646\u0634\u0627\u0621 \u0645\u0646\u062a\u062c \u0628\u0646\u0648\u0639 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641: %s", + "A variation within the product has a barcode which is already in use : %s.": "\u064a\u062d\u062a\u0648\u064a \u0623\u062d\u062f \u0627\u0644\u0623\u0634\u0643\u0627\u0644 \u0627\u0644\u0645\u062e\u062a\u0644\u0641\u0629 \u0644\u0644\u0645\u0646\u062a\u062c \u0639\u0644\u0649 \u0631\u0645\u0632 \u0634\u0631\u064a\u0637\u064a \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u0627\u0644\u0641\u0639\u0644: %s.", + "A variation within the product has a SKU which is already in use : %s": "\u064a\u062d\u062a\u0648\u064a \u0623\u062d\u062f \u0627\u0644\u0623\u0634\u0643\u0627\u0644 \u0627\u0644\u0645\u062e\u062a\u0644\u0641\u0629 \u0644\u0644\u0645\u0646\u062a\u062c \u0639\u0644\u0649 SKU \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u0627\u0644\u0641\u0639\u0644: %s", + "Unable to edit a product with an unknown type : %s": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u0631\u064a\u0631 \u0645\u0646\u062a\u062c \u0628\u0646\u0648\u0639 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641: %s", + "The requested sub item doesn\\'t exists.": "\u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0641\u0631\u0639\u064a \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f.", + "One of the provided product variation doesn\\'t include an identifier.": "\u0623\u062d\u062f \u0623\u0634\u0643\u0627\u0644 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u062a\u0648\u0641\u0631\u0629 \u0644\u0627 \u064a\u062a\u0636\u0645\u0646 \u0645\u0639\u0631\u0641\u064b\u0627.", + "The product\\'s unit quantity has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0643\u0645\u064a\u0629 \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0646\u062a\u062c.", + "Unable to reset this variable product \"%s": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u062a\u063a\u064a\u0631 \"%s", + "Adjusting grouped product inventory must result of a create, update, delete sale operation.": "\u064a\u062c\u0628 \u0623\u0646 \u064a\u0624\u062f\u064a \u0636\u0628\u0637 \u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u062c\u0645\u0639\u0629 \u0625\u0644\u0649 \u0639\u0645\u0644\u064a\u0629 \u0625\u0646\u0634\u0627\u0621 \u0648\u062a\u062d\u062f\u064a\u062b \u0648\u062d\u0630\u0641 \u0627\u0644\u0628\u064a\u0639.", + "Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629\u060c \u0633\u064a\u0624\u062f\u064a \u0647\u0630\u0627 \u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0625\u0644\u0649 \u0627\u0646\u062e\u0641\u0627\u0636 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 (%s). \u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0642\u062f\u064a\u0645\u0629 : (%s)\u060c \u0627\u0644\u0643\u0645\u064a\u0629 : (%s).", + "Unsupported stock action \"%s\"": "\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u063a\u064a\u0631 \u0645\u0639\u062a\u0645\u062f \"%s\"", + "%s product(s) has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 %s \u0645\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a.", + "%s products(s) has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 %s \u0645\u0646 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a.", + "Unable to find the product, as the argument \"%s\" which value is \"%s": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c\u060c \u062d\u064a\u062b \u0623\u0646 \u0642\u064a\u0645\u0629 \u0627\u0644\u0648\u0633\u064a\u0637\u0629 \"%s\" \u0647\u064a \"%s", + "You cannot convert unit on a product having stock management disabled.": "\u0644\u0627 \u064a\u0645\u0643\u0646\u0643 \u062a\u062d\u0648\u064a\u0644 \u0648\u062d\u062f\u0629 \u0639\u0644\u0649 \u0645\u0646\u062a\u062c \u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0641\u064a\u0647.", + "The source and the destination unit can\\'t be the same. What are you trying to do ?": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0635\u062f\u0631 \u0648\u0627\u0644\u0648\u062c\u0647\u0629 \u0647\u064a \u0646\u0641\u0633\u0647\u0627. \u0645\u0627\u0630\u0627 \u062a\u062d\u0627\u0648\u0644 \u0623\u0646 \u062a\u0641\u0639\u0644 \u061f", + "There is no source unit quantity having the name \"%s\" for the item %s": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0643\u0645\u064a\u0629 \u0648\u062d\u062f\u0629 \u0645\u0635\u062f\u0631 \u062a\u062d\u0645\u0644 \u0627\u0644\u0627\u0633\u0645 \"%s\" \u0644\u0644\u0639\u0646\u0635\u0631 %s", + "There is no destination unit quantity having the name %s for the item %s": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0643\u0645\u064a\u0629 \u0648\u062d\u062f\u0629 \u0648\u062c\u0647\u0629 \u062a\u062d\u0645\u0644 \u0627\u0644\u0627\u0633\u0645 %s \u0644\u0644\u0639\u0646\u0635\u0631 %s", + "The source unit and the destination unit doens\\'t belong to the same unit group.": "\u0644\u0627 \u062a\u0646\u062a\u0645\u064a \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0635\u062f\u0631 \u0648\u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0648\u062c\u0647\u0629 \u0625\u0644\u0649 \u0646\u0641\u0633 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a.", + "The group %s has no base unit defined": "\u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 %s \u0644\u064a\u0633 \u0644\u0647\u0627 \u0648\u062d\u062f\u0629 \u0623\u0633\u0627\u0633\u064a\u0629 \u0645\u062d\u062f\u062f\u0629", + "The conversion of %s(%s) to %s(%s) was successful": "\u062a\u0645 \u062a\u062d\u0648\u064a\u0644 %s(%s) \u0625\u0644\u0649 %s(%s) \u0628\u0646\u062c\u0627\u062d", + "The product has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0645\u0646\u062a\u062c.", + "An error occurred: %s.": "\u062d\u062f\u062b \u062e\u0637\u0623: %s.", + "A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.": "\u062a\u0645 \u0627\u0643\u062a\u0634\u0627\u0641 \u0639\u0645\u0644\u064a\u0629 \u0645\u062e\u0632\u0648\u0646 \u0645\u0624\u062e\u0631\u064b\u0627\u060c \u0625\u0644\u0627 \u0623\u0646 NexoPOS \u0644\u0645 \u064a\u062a\u0645\u0643\u0646 \u0645\u0646 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u062a\u0642\u0631\u064a\u0631 \u0648\u0641\u0642\u064b\u0627 \u0644\u0630\u0644\u0643. \u064a\u062d\u062f\u062b \u0647\u0630\u0627 \u0625\u0630\u0627 \u0644\u0645 \u064a\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0645\u0631\u062c\u0639 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u064a\u0648\u0645\u064a.", + "Today\\'s Orders": "\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u064a\u0648\u0645", + "Today\\'s Sales": "\u0645\u0628\u064a\u0639\u0627\u062a \u0627\u0644\u064a\u0648\u0645", + "Today\\'s Refunds": "\u0627\u0644\u0645\u0628\u0627\u0644\u063a \u0627\u0644\u0645\u0633\u062a\u0631\u062f\u0629 \u0627\u0644\u064a\u0648\u0645", + "Today\\'s Customers": "\u0639\u0645\u0644\u0627\u0621 \u0627\u0644\u064a\u0648\u0645", + "The report will be generated. Try loading the report within few minutes.": "\u0633\u064a\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u062a\u0642\u0631\u064a\u0631. \u062d\u0627\u0648\u0644 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u062a\u0642\u0631\u064a\u0631 \u062e\u0644\u0627\u0644 \u062f\u0642\u0627\u0626\u0642 \u0642\u0644\u064a\u0644\u0629.", + "The database has been wiped out.": "\u0644\u0642\u062f \u062a\u0645 \u0645\u0633\u062d \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a.", + "No custom handler for the reset \"' . $mode . '\"": "\u0644\u0627 \u064a\u0648\u062c\u062f \u0645\u0639\u0627\u0644\u062c \u0645\u062e\u0635\u0635 \u0644\u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \"' . $mode . '\"", + "Unable to proceed. The parent tax doesn\\'t exists.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627. \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0623\u0635\u0644\u064a\u0629 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f\u0629.", + "A simple tax must not be assigned to a parent tax with the type \"simple": "\u0644\u0627 \u064a\u062c\u0648\u0632 \u062a\u0639\u064a\u064a\u0646 \u0636\u0631\u064a\u0628\u0629 \u0628\u0633\u064a\u0637\u0629 \u0625\u0644\u0649 \u0636\u0631\u064a\u0628\u0629 \u0623\u0635\u0644\u064a\u0629 \u0645\u0646 \u0627\u0644\u0646\u0648\u0639 \"\u0628\u0633\u064a\u0637\u0629", + "Created via tests": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0639\u0646 \u0637\u0631\u064a\u0642 \u0627\u0644\u0627\u062e\u062a\u0628\u0627\u0631\u0627\u062a", + "The transaction has been successfully saved.": "\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0628\u0646\u062c\u0627\u062d.", + "The transaction has been successfully updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0628\u0646\u062c\u0627\u062d.", + "Unable to find the transaction using the provided identifier.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "Unable to find the requested transaction using the provided id.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "The transction has been correctly deleted.": "\u0644\u0642\u062f \u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0635\u0641\u0642\u0629 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d.", + "You cannot delete an account which has transactions bound.": "\u0644\u0627 \u064a\u0645\u0643\u0646\u0643 \u062d\u0630\u0641 \u062d\u0633\u0627\u0628 \u0644\u0647 \u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0645\u0631\u062a\u0628\u0637\u0629.", + "The transaction account has been deleted.": "\u062a\u0645 \u062d\u0630\u0641 \u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629.", + "Unable to find the transaction account using the provided ID.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u0627\u0644\u0645\u0642\u062f\u0645.", + "The transaction account has been updated.": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629.", + "This transaction type can\\'t be triggered.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u0634\u063a\u064a\u0644 \u0646\u0648\u0639 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0647\u0630\u0627.", + "The transaction has been successfully triggered.": "\u062a\u0645 \u062a\u0641\u0639\u064a\u0644 \u0627\u0644\u0635\u0641\u0642\u0629 \u0628\u0646\u062c\u0627\u062d.", + "The transaction \"%s\" has been processed on day \"%s\".": "\u062a\u0645\u062a \u0645\u0639\u0627\u0644\u062c\u0629 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \"%s\" \u0641\u064a \u0627\u0644\u064a\u0648\u0645 \"%s\".", + "The transaction \"%s\" has already been processed.": "\u062a\u0645\u062a \u0645\u0639\u0627\u0644\u062c\u0629 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \"%s\" \u0628\u0627\u0644\u0641\u0639\u0644.", + "The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.": "\u0644\u0645 \u062a\u062a\u0645 \u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a \"%s\" \u0644\u0623\u0646\u0647\u0627 \u0623\u0635\u0628\u062d\u062a \u0642\u062f\u064a\u0645\u0629.", + "The process has been correctly executed and all transactions has been processed.": "\u062a\u0645 \u062a\u0646\u0641\u064a\u0630 \u0627\u0644\u0639\u0645\u0644\u064a\u0629 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d \u0648\u062a\u0645\u062a \u0645\u0639\u0627\u0644\u062c\u0629 \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a.", + "The process has been executed with some failures. %s\/%s process(es) has successed.": "\u062a\u0645 \u062a\u0646\u0641\u064a\u0630 \u0627\u0644\u0639\u0645\u0644\u064a\u0629 \u0645\u0639 \u0628\u0639\u0636 \u0627\u0644\u0625\u062e\u0641\u0627\u0642\u0627\u062a. \u0644\u0642\u062f \u0646\u062c\u062d\u062a \u0627\u0644\u0639\u0645\u0644\u064a\u0629 (\u0627\u0644\u0639\u0645\u0644\u064a\u0627\u062a) %s\/%s.", + "Procurement : %s": "\u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a : %s", + "Procurement Liability : %s": "\u0645\u0633\u0624\u0648\u0644\u064a\u0629 \u0627\u0644\u0634\u0631\u0627\u0621 : %s", + "Refunding : %s": "\u0627\u0633\u062a\u0631\u062f\u0627\u062f : %s", + "Spoiled Good : %s": "\u0627\u0644\u0633\u0644\u0639\u0629 \u0627\u0644\u0641\u0627\u0633\u062f\u0629 : %s", + "Sale : %s": "\u0645\u0628\u064a\u0639\u0627\u062a", + "Liabilities Account": "\u062d\u0633\u0627\u0628 \u0627\u0644\u0627\u0644\u062a\u0632\u0627\u0645\u0627\u062a", + "Not found account type: %s": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0646\u0648\u0639 \u0627\u0644\u062d\u0633\u0627\u0628: %s", + "Refund : %s": "\u0627\u0633\u062a\u0631\u062f\u0627\u062f : %s", + "Customer Account Crediting : %s": "\u0627\u0639\u062a\u0645\u0627\u062f \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644 : %s", + "Customer Account Purchase : %s": "\u0634\u0631\u0627\u0621 \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644 : %s", + "Customer Account Deducting : %s": "\u062e\u0635\u0645 \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644 : %s", + "Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0628\u0639\u0636 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0644\u0623\u0646 NexoPOS \u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u0646\u0641\u064a\u0630 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u063a\u064a\u0631 \u0627\u0644\u0645\u062a\u0632\u0627\u0645\u0646\u0629<\/a>.", + "The unit group %s doesn\\'t have a base unit": "\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a %s\\'\u0644\u0627 \u062a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u0648\u062d\u062f\u0629 \u0623\u0633\u0627\u0633\u064a\u0629", + "The system role \"Users\" can be retrieved.": "\u064a\u0645\u0643\u0646 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u062f\u0648\u0631 \u0627\u0644\u0646\u0638\u0627\u0645 \"\u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646\".", + "The default role that must be assigned to new users cannot be retrieved.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u062f\u0648\u0631 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a \u0627\u0644\u0630\u064a \u064a\u062c\u0628 \u062a\u0639\u064a\u064a\u0646\u0647 \u0644\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646 \u0627\u0644\u062c\u062f\u062f.", + "%s Second(s)": "%s \u062b\u0627\u0646\u064a\u0629 (\u062b\u0648\u0627\u0646\u064a)", + "Configure the accounting feature": "\u062a\u0643\u0648\u064a\u0646 \u0645\u064a\u0632\u0629 \u0627\u0644\u0645\u062d\u0627\u0633\u0628\u0629", + "Define the symbol that indicate thousand. By default ": "\u062d\u062f\u062f \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0630\u064a \u064a\u0634\u064a\u0631 \u0625\u0644\u0649 \u0627\u0644\u0623\u0644\u0641. \u0628\u0634\u0643\u0644 \u0627\u0641\u062a\u0631\u0627\u0636\u064a", + "Date Time Format": "\u062a\u0646\u0633\u064a\u0642 \u0627\u0644\u062a\u0627\u0631\u064a\u062e \u0648\u0627\u0644\u0648\u0642\u062a", + "This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".": "\u064a\u062d\u062f\u062f \u0647\u0630\u0627 \u0643\u064a\u0641\u064a\u0629 \u062a\u0646\u0633\u064a\u0642 \u0627\u0644\u062a\u0627\u0631\u064a\u062e \u0648\u0627\u0644\u0623\u0648\u0642\u0627\u062a. \u0627\u0644\u062a\u0646\u0633\u064a\u0642 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a \u0647\u0648 \"Y-m-d H:i\".", + "Date TimeZone": "\u0627\u0644\u0645\u0646\u0637\u0642\u0629 \u0627\u0644\u0632\u0645\u0646\u064a\u0629 \u0644\u0644\u062a\u0627\u0631\u064a\u062e", + "Determine the default timezone of the store. Current Time: %s": "\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0646\u0637\u0642\u0629 \u0627\u0644\u0632\u0645\u0646\u064a\u0629 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 \u0644\u0644\u0645\u062a\u062c\u0631. \u0627\u0644\u0648\u0642\u062a \u0627\u0644\u062d\u0627\u0644\u064a: %s", + "Configure how invoice and receipts are used.": "\u062a\u0643\u0648\u064a\u0646 \u0643\u064a\u0641\u064a\u0629 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629 \u0648\u0627\u0644\u0625\u064a\u0635\u0627\u0644\u0627\u062a.", + "configure settings that applies to orders.": "\u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u062a\u064a \u062a\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0627\u0644\u0637\u0644\u0628\u0627\u062a.", + "Report Settings": "\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u062a\u0642\u0631\u064a\u0631", + "Configure the settings": "\u0642\u0645 \u0628\u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a", + "Wipes and Reset the database.": "\u0645\u0633\u062d \u0648\u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a.", + "Supply Delivery": "\u062a\u0633\u0644\u064a\u0645 \u0627\u0644\u0625\u0645\u062f\u0627\u062f\u0627\u062a", + "Configure the delivery feature.": "\u062a\u0643\u0648\u064a\u0646 \u0645\u064a\u0632\u0629 \u0627\u0644\u062a\u0633\u0644\u064a\u0645.", + "Configure how background operations works.": "\u062a\u0643\u0648\u064a\u0646 \u0643\u064a\u0641\u064a\u0629 \u0639\u0645\u0644 \u0639\u0645\u0644\u064a\u0627\u062a \u0627\u0644\u062e\u0644\u0641\u064a\u0629.", + "Every procurement will be added to the selected transaction account": "\u0633\u062a\u062a\u0645 \u0625\u0636\u0627\u0641\u0629 \u0643\u0644 \u0639\u0645\u0644\u064a\u0629 \u0634\u0631\u0627\u0621 \u0625\u0644\u0649 \u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0627\u0644\u0645\u062d\u062f\u062f", + "Every sales will be added to the selected transaction account": "\u0633\u064a\u062a\u0645 \u0625\u0636\u0627\u0641\u0629 \u0643\u0644 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u0625\u0644\u0649 \u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0627\u0644\u0645\u062d\u062f\u062f", + "Customer Credit Account (crediting)": "\u062d\u0633\u0627\u0628 \u0627\u0626\u062a\u0645\u0627\u0646 \u0627\u0644\u0639\u0645\u064a\u0644 (\u0627\u0644\u0627\u0626\u062a\u0645\u0627\u0646)", + "Every customer credit will be added to the selected transaction account": "\u0633\u062a\u062a\u0645 \u0625\u0636\u0627\u0641\u0629 \u0643\u0644 \u0631\u0635\u064a\u062f \u0639\u0645\u064a\u0644 \u0625\u0644\u0649 \u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0627\u0644\u0645\u062d\u062f\u062f", + "Customer Credit Account (debitting)": "\u062d\u0633\u0627\u0628 \u0627\u0626\u062a\u0645\u0627\u0646 \u0627\u0644\u0639\u0645\u064a\u0644 (\u0627\u0644\u0645\u062f\u064a\u0646)", + "Every customer credit removed will be added to the selected transaction account": "\u0633\u062a\u062a\u0645 \u0625\u0636\u0627\u0641\u0629 \u0643\u0644 \u0631\u0635\u064a\u062f \u0639\u0645\u064a\u0644 \u062a\u0645\u062a \u0625\u0632\u0627\u0644\u062a\u0647 \u0625\u0644\u0649 \u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0627\u0644\u0645\u062d\u062f\u062f", + "Sales refunds will be attached to this transaction account": "\u0633\u064a\u062a\u0645 \u0625\u0631\u0641\u0627\u0642 \u0627\u0644\u0645\u0628\u0627\u0644\u063a \u0627\u0644\u0645\u0633\u062a\u0631\u062f\u0629 \u0645\u0646 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u0628\u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0647\u0630\u0627", + "Stock Return Account (Spoiled Items)": "\u062d\u0633\u0627\u0628 \u0625\u0631\u062c\u0627\u0639 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 (\u0627\u0644\u0623\u0635\u0646\u0627\u0641 \u0627\u0644\u062a\u0627\u0644\u0641\u0629)", + "Disbursement (cash register)": "\u0627\u0644\u0635\u0631\u0641 (\u0627\u0644\u0633\u062c\u0644 \u0627\u0644\u0646\u0642\u062f\u064a)", + "Transaction account for all cash disbursement.": "\u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0644\u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u062f\u0641\u0648\u0639\u0627\u062a \u0627\u0644\u0646\u0642\u062f\u064a\u0629.", + "Liabilities": "\u0627\u0644\u0625\u0644\u062a\u0632\u0627\u0645\u0627\u062a", + "Transaction account for all liabilities.": "\u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0644\u062c\u0645\u064a\u0639 \u0627\u0644\u0627\u0644\u062a\u0632\u0627\u0645\u0627\u062a.", + "You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.": "\u064a\u062c\u0628 \u0639\u0644\u064a\u0643 \u0625\u0646\u0634\u0627\u0621 \u0639\u0645\u064a\u0644 \u062a\u064f\u0646\u0633\u0628 \u0625\u0644\u064a\u0647 \u0643\u0644 \u0627\u0644\u0645\u0628\u064a\u0639\u0627\u062a \u0639\u0646\u062f\u0645\u0627 \u0644\u0627 \u064a\u0642\u0648\u0645 \u0627\u0644\u0639\u0645\u064a\u0644 \u0627\u0644\u0645\u062a\u062c\u0648\u0644 \u0628\u0627\u0644\u062a\u0633\u062c\u064a\u0644.", + "Show Tax Breakdown": "\u0639\u0631\u0636 \u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0636\u0631\u0627\u0626\u0628", + "Will display the tax breakdown on the receipt\/invoice.": "\u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0639\u0644\u0649 \u0627\u0644\u0625\u064a\u0635\u0627\u0644\/\u0627\u0644\u0641\u0627\u062a\u0648\u0631\u0629.", + "Available tags : ": "\u0627\u0644\u0639\u0644\u0627\u0645\u0627\u062a \u0627\u0644\u0645\u062a\u0627\u062d\u0629:", + "{store_name}: displays the store name.": "{store_name}: \u064a\u0639\u0631\u0636 \u0627\u0633\u0645 \u0627\u0644\u0645\u062a\u062c\u0631.", + "{store_email}: displays the store email.": "{store_email}: \u064a\u0639\u0631\u0636 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0644\u0644\u0645\u062a\u062c\u0631.", + "{store_phone}: displays the store phone number.": "{store_phone}: \u064a\u0639\u0631\u0636 \u0631\u0642\u0645 \u0647\u0627\u062a\u0641 \u0627\u0644\u0645\u062a\u062c\u0631.", + "{cashier_name}: displays the cashier name.": "{cashier_name}: \u064a\u0639\u0631\u0636 \u0627\u0633\u0645 \u0623\u0645\u064a\u0646 \u0627\u0644\u0635\u0646\u062f\u0648\u0642.", + "{cashier_id}: displays the cashier id.": "{cashier_id}: \u064a\u0639\u0631\u0636 \u0645\u0639\u0631\u0641 \u0623\u0645\u064a\u0646 \u0627\u0644\u0635\u0646\u062f\u0648\u0642.", + "{order_code}: displays the order code.": "{order_code}: \u064a\u0639\u0631\u0636 \u0631\u0645\u0632 \u0627\u0644\u0637\u0644\u0628.", + "{order_date}: displays the order date.": "{order_date}: \u064a\u0639\u0631\u0636 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0637\u0644\u0628.", + "{order_type}: displays the order type.": "{order_type}: \u064a\u0639\u0631\u0636 \u0646\u0648\u0639 \u0627\u0644\u0637\u0644\u0628.", + "{customer_email}: displays the customer email.": "{customer_email}: \u064a\u0639\u0631\u0636 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0644\u0644\u0639\u0645\u064a\u0644.", + "{shipping_first_name}: displays the shipping first name.": "{shipping_first_name}: \u064a\u0639\u0631\u0636 \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u0648\u0644 \u0644\u0644\u0634\u062d\u0646.", + "{shipping_last_name}: displays the shipping last name.": "{shipping_last_name}: \u064a\u0639\u0631\u0636 \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u062e\u064a\u0631 \u0644\u0644\u0634\u062d\u0646.", + "{shipping_phone}: displays the shipping phone.": "{shipping_phone}: \u064a\u0639\u0631\u0636 \u0647\u0627\u062a\u0641 \u0627\u0644\u0634\u062d\u0646.", + "{shipping_address_1}: displays the shipping address_1.": "{shipping_address_1}: \u064a\u0639\u0631\u0636 \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0634\u062d\u0646_1.", + "{shipping_address_2}: displays the shipping address_2.": "{shipping_address_2}: \u064a\u0639\u0631\u0636 \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0634\u062d\u0646_2.", + "{shipping_country}: displays the shipping country.": "{shipping_country}: \u064a\u0639\u0631\u0636 \u0628\u0644\u062f \u0627\u0644\u0634\u062d\u0646.", + "{shipping_city}: displays the shipping city.": "{shipping_city}: \u064a\u0639\u0631\u0636 \u0645\u062f\u064a\u0646\u0629 \u0627\u0644\u0634\u062d\u0646.", + "{shipping_pobox}: displays the shipping pobox.": "{shipping_pobox}: \u064a\u0639\u0631\u0636 \u0635\u0646\u062f\u0648\u0642 \u0627\u0644\u0634\u062d\u0646.", + "{shipping_company}: displays the shipping company.": "{shipping_company}: \u064a\u0639\u0631\u0636 \u0634\u0631\u0643\u0629 \u0627\u0644\u0634\u062d\u0646.", + "{shipping_email}: displays the shipping email.": "{shipping_email}: \u064a\u0639\u0631\u0636 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0627\u0644\u062e\u0627\u0635 \u0628\u0627\u0644\u0634\u062d\u0646.", + "{billing_first_name}: displays the billing first name.": "{billing_first_name}: \u064a\u0639\u0631\u0636 \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u0648\u0644 \u0644\u0644\u0641\u0648\u062a\u0631\u0629.", + "{billing_last_name}: displays the billing last name.": "{billing_last_name}: \u064a\u0639\u0631\u0636 \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u062e\u064a\u0631 \u0644\u0644\u0641\u0648\u062a\u0631\u0629.", + "{billing_phone}: displays the billing phone.": "{billing_phone}: \u064a\u0639\u0631\u0636 \u0647\u0627\u062a\u0641 \u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631.", + "{billing_address_1}: displays the billing address_1.": "{billing_address_1}: \u064a\u0639\u0631\u0636 \u0639\u0646\u0648\u0627\u0646 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631_1.", + "{billing_address_2}: displays the billing address_2.": "{billing_address_2}: \u064a\u0639\u0631\u0636 \u0639\u0646\u0648\u0627\u0646 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631_2.", + "{billing_country}: displays the billing country.": "{billing_country}: \u064a\u0639\u0631\u0636 \u0628\u0644\u062f \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631.", + "{billing_city}: displays the billing city.": "{billing_city}: \u064a\u0639\u0631\u0636 \u0645\u062f\u064a\u0646\u0629 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631.", + "{billing_pobox}: displays the billing pobox.": "{billing_pobox}: \u064a\u0639\u0631\u0636 \u0635\u0646\u062f\u0648\u0642 \u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631.", + "{billing_company}: displays the billing company.": "{billing_company}: \u064a\u0639\u0631\u0636 \u0634\u0631\u0643\u0629 \u0627\u0644\u0641\u0648\u0627\u062a\u064a\u0631.", + "{billing_email}: displays the billing email.": "{billing_email}: \u064a\u0639\u0631\u0636 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0627\u0644\u062e\u0627\u0635 \u0628\u0627\u0644\u0641\u0648\u062a\u0631\u0629.", + "Available tags :": "\u0627\u0644\u0639\u0644\u0627\u0645\u0627\u062a \u0627\u0644\u0645\u062a\u0627\u062d\u0629:", + "Quick Product Default Unit": "\u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 \u0644\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0633\u0631\u064a\u0639", + "Set what unit is assigned by default to all quick product.": "\u0642\u0645 \u0628\u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u062e\u0635\u0635\u0629 \u0627\u0641\u062a\u0631\u0627\u0636\u064a\u064b\u0627 \u0644\u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0633\u0631\u064a\u0639\u0629.", + "Hide Exhausted Products": "\u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0633\u062a\u0646\u0641\u062f\u0629", + "Will hide exhausted products from selection on the POS.": "\u0633\u064a\u062a\u0645 \u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u0633\u062a\u0646\u0641\u062f\u0629 \u0645\u0646 \u0627\u0644\u0627\u062e\u062a\u064a\u0627\u0631 \u0639\u0644\u0649 \u0646\u0642\u0637\u0629 \u0627\u0644\u0628\u064a\u0639.", + "Hide Empty Category": "\u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u0641\u0627\u0631\u063a\u0629", + "Category with no or exhausted products will be hidden from selection.": "\u0633\u064a\u062a\u0645 \u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0641\u0626\u0629 \u0627\u0644\u062a\u064a \u0644\u0627 \u062a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u0645\u0646\u062a\u062c\u0627\u062a \u0623\u0648 \u062a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u0645\u0646\u062a\u062c\u0627\u062a \u0645\u0633\u062a\u0646\u0641\u062f\u0629 \u0645\u0646 \u0627\u0644\u062a\u062d\u062f\u064a\u062f.", + "Default Printing (web)": "\u0627\u0644\u0637\u0628\u0627\u0639\u0629 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 (\u0627\u0644\u0648\u064a\u0628)", + "The amount numbers shortcuts separated with a \"|\".": "\u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a \u0623\u0631\u0642\u0627\u0645 \u0627\u0644\u0645\u0628\u0644\u063a \u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0640 \"|\".", + "No submit URL was provided": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u0642\u062f\u064a\u0645 \u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0625\u0631\u0633\u0627\u0644", + "Sorting is explicitely disabled on this column": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0641\u0631\u0632 \u0628\u0634\u0643\u0644 \u0635\u0631\u064a\u062d \u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u0639\u0645\u0648\u062f", + "An unpexpected error occured while using the widget.": "\u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639 \u0623\u062b\u0646\u0627\u0621 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0623\u062f\u0627\u0629.", + "This field must be similar to \"{other}\"\"": "\u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0647\u0630\u0627 \u0627\u0644\u062d\u0642\u0644 \u0645\u0634\u0627\u0628\u0647\u064b\u0627 \u0644\u0640 \"{other}\"\"", + "This field must have at least \"{length}\" characters\"": "\u064a\u062c\u0628 \u0623\u0646 \u064a\u062d\u062a\u0648\u064a \u0647\u0630\u0627 \u0627\u0644\u062d\u0642\u0644 \u0639\u0644\u0649 \"{length}\" \u0645\u0646 \u0627\u0644\u0623\u062d\u0631\u0641\" \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644", + "This field must have at most \"{length}\" characters\"": "\u064a\u062c\u0628 \u0623\u0646 \u064a\u062d\u062a\u0648\u064a \u0647\u0630\u0627 \u0627\u0644\u062d\u0642\u0644 \u0639\u0644\u0649 \"{length}\" \u0645\u0646 \u0627\u0644\u0623\u062d\u0631\u0641\" \u0639\u0644\u0649 \u0627\u0644\u0623\u0643\u062b\u0631", + "This field must be different from \"{other}\"\"": "\u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0647\u0630\u0627 \u0627\u0644\u062d\u0642\u0644 \u0645\u062e\u062a\u0644\u0641\u064b\u0627 \u0639\u0646 \"{other}\"\"", + "Search result": "\u0646\u062a\u064a\u062c\u0629 \u0627\u0644\u0628\u062d\u062b", + "Choose...": "\u064a\u062e\u062a\u0627\u0631...", + "The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0643\u0648\u0646 ${field.component}. \u062a\u0623\u0643\u062f \u0645\u0646 \u062d\u0642\u0646\u0647 \u0641\u064a \u0643\u0627\u0626\u0646 nsExtraComponents.", + "+{count} other": "+{\u0639\u062f} \u0623\u062e\u0631\u0649", + "The selected print gateway doesn't support this type of printing.": "\u0628\u0648\u0627\u0628\u0629 \u0627\u0644\u0637\u0628\u0627\u0639\u0629 \u0627\u0644\u0645\u062d\u062f\u062f\u0629 \u0644\u0627 \u062a\u062f\u0639\u0645 \u0647\u0630\u0627 \u0627\u0644\u0646\u0648\u0639 \u0645\u0646 \u0627\u0644\u0637\u0628\u0627\u0639\u0629.", + "millisecond| second| minute| hour| day| week| month| year| decade| century| millennium": "\u0645\u064a\u0644\u064a \u062b\u0627\u0646\u064a\u0629| \u0627\u0644\u062b\u0627\u0646\u064a\u0629| \u062f\u0642\u064a\u0642\u0629| \u0633\u0627\u0639\u0629| \u064a\u0648\u0645| \u0627\u0633\u0628\u0648\u0639| \u0634\u0647\u0631| \u0633\u0646\u0629| \u0639\u0642\u062f| \u0642\u0631\u0646| \u0627\u0644\u0623\u0644\u0641\u064a\u0629", + "milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia": "\u0645\u064a\u0644\u064a \u062b\u0627\u0646\u064a\u0629| \u062b\u0648\u0627\u0646\u064a| \u062f\u0642\u0627\u0626\u0642| \u0633\u0627\u0639\u0627\u062a| \u0623\u064a\u0627\u0645| \u0623\u0633\u0627\u0628\u064a\u0639| \u0623\u0634\u0647\u0631| \u0633\u0646\u0648\u0627\u062a| \u0639\u0642\u0648\u062f| \u0642\u0631\u0648\u0646| \u0622\u0644\u0641\u064a\u0629", + "An error occured": "\u062d\u062f\u062b \u062e\u0637\u0623", + "You\\'re about to delete selected resources. Would you like to proceed?": "\u0623\u0646\u062a \u0639\u0644\u0649 \u0648\u0634\u0643 \u062d\u0630\u0641 \u0627\u0644\u0645\u0648\u0627\u0631\u062f \u0627\u0644\u0645\u062d\u062f\u062f\u0629. \u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629\u061f", + "See Error": "\u0627\u0646\u0638\u0631 \u0627\u0644\u062e\u0637\u0623", + "Your uploaded files will displays here.": "\u0633\u064a\u062a\u0645 \u0639\u0631\u0636 \u0645\u0644\u0641\u0627\u062a\u0643 \u0627\u0644\u062a\u064a \u062a\u0645 \u062a\u062d\u0645\u064a\u0644\u0647\u0627 \u0647\u0646\u0627.", + "Nothing to care about !": "\u0644\u0627 \u0634\u064a\u0621 \u064a\u0633\u062a\u062d\u0642 \u0627\u0644\u0627\u0647\u062a\u0645\u0627\u0645!", + "Would you like to bulk edit a system role ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u0639\u062f\u064a\u0644 \u062f\u0648\u0631 \u0627\u0644\u0646\u0638\u0627\u0645 \u0628\u0634\u0643\u0644 \u0645\u062c\u0645\u0651\u0639\u061f", + "Total :": "\u0627\u0644\u0645\u062c\u0645\u0648\u0639 :", + "Remaining :": "\u0645\u062a\u0628\u0642\u064a :", + "Instalments:": "\u0627\u0644\u0623\u0642\u0633\u0627\u0637:", + "This instalment doesn\\'t have any payment attached.": "\u0644\u0627 \u062a\u062d\u062a\u0648\u064a \u0647\u0630\u0647 \u0627\u0644\u062f\u0641\u0639\u0629 \u0639\u0644\u0649 \u0623\u064a \u062f\u0641\u0639\u0627\u062a \u0645\u0631\u0641\u0642\u0629.", + "You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?": "\u0644\u0642\u062f \u0623\u062c\u0631\u064a\u062a \u062f\u0641\u0639\u0629 \u0628\u0645\u0628\u0644\u063a {amount}. \u0644\u0627 \u064a\u0645\u0643\u0646 \u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u062f\u0641\u0639. \u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u061f", + "An error has occured while seleting the payment gateway.": "\u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u0627\u062e\u062a\u064a\u0627\u0631 \u0628\u0648\u0627\u0628\u0629 \u0627\u0644\u062f\u0641\u0639.", + "You're not allowed to add a discount on the product.": "\u0644\u0627 \u064a\u0633\u0645\u062d \u0644\u0643 \u0628\u0625\u0636\u0627\u0641\u0629 \u062e\u0635\u0645 \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062a\u062c.", + "You're not allowed to add a discount on the cart.": "\u0644\u0627 \u064a\u0633\u0645\u062d \u0644\u0643 \u0628\u0625\u0636\u0627\u0641\u0629 \u062e\u0635\u0645 \u0639\u0644\u0649 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642.", + "Cash Register : {register}": "\u0633\u062c\u0644 \u0627\u0644\u0646\u0642\u062f\u064a\u0629 : {\u062a\u0633\u062c\u064a\u0644}", + "The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?": "\u0633\u064a\u062a\u0645 \u0645\u0633\u062d \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u062d\u0627\u0644\u064a. \u0648\u0644\u0643\u0646 \u0644\u0627 \u064a\u062a\u0645 \u062d\u0630\u0641\u0647\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0645\u0633\u062a\u0645\u0631\u0629. \u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u061f", + "You don't have the right to edit the purchase price.": "\u0644\u064a\u0633 \u0644\u062f\u064a\u0643 \u0627\u0644\u062d\u0642 \u0641\u064a \u062a\u0639\u062f\u064a\u0644 \u0633\u0639\u0631 \u0627\u0644\u0634\u0631\u0627\u0621.", + "Dynamic product can\\'t have their price updated.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u062d\u062f\u064a\u062b \u0633\u0639\u0631 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u062f\u064a\u0646\u0627\u0645\u064a\u0643\u064a.", + "You\\'re not allowed to edit the order settings.": "\u063a\u064a\u0631 \u0645\u0633\u0645\u0648\u062d \u0644\u0643 \u0628\u062a\u0639\u062f\u064a\u0644 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0637\u0644\u0628.", + "Looks like there is either no products and no categories. How about creating those first to get started ?": "\u064a\u0628\u062f\u0648 \u0623\u0646\u0647 \u0644\u0627 \u062a\u0648\u062c\u062f \u0645\u0646\u062a\u062c\u0627\u062a \u0648\u0644\u0627 \u0641\u0626\u0627\u062a. \u0645\u0627\u0630\u0627 \u0639\u0646 \u0625\u0646\u0634\u0627\u0621 \u0647\u0624\u0644\u0627\u0621 \u0623\u0648\u0644\u0627\u064b \u0644\u0644\u0628\u062f\u0621\u061f", + "Create Categories": "\u0625\u0646\u0634\u0627\u0621 \u0641\u0626\u0627\u062a", + "You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?": "\u0623\u0646\u062a \u0639\u0644\u0649 \u0648\u0634\u0643 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 {amount} \u0645\u0646 \u062d\u0633\u0627\u0628 \u0627\u0644\u0639\u0645\u064a\u0644 \u0644\u0625\u062c\u0631\u0627\u0621 \u062f\u0641\u0639\u0629. \u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u061f", + "An unexpected error has occured while loading the form. Please check the log or contact the support.": "\u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639 \u0623\u062b\u0646\u0627\u0621 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0646\u0645\u0648\u0630\u062c. \u064a\u0631\u062c\u0649 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0627\u0644\u0633\u062c\u0644 \u0623\u0648 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0627\u0644\u062f\u0639\u0645.", + "We were not able to load the units. Make sure there are units attached on the unit group selected.": "\u0644\u0645 \u0646\u062a\u0645\u0643\u0646 \u0645\u0646 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0627\u062a. \u062a\u0623\u0643\u062f \u0645\u0646 \u0648\u062c\u0648\u062f \u0648\u062d\u062f\u0627\u062a \u0645\u0644\u062d\u0642\u0629 \u0628\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0648\u062d\u062f\u0627\u062a \u0627\u0644\u0645\u062d\u062f\u062f\u0629.", + "The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?": "\u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0627\u0644\u062a\u064a \u0623\u0646\u062a \u0639\u0644\u0649 \u0648\u0634\u0643 \u062d\u0630\u0641\u0647\u0627 \u0644\u0647\u0627 \u0645\u0631\u062c\u0639 \u0641\u064a \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0648\u0631\u0628\u0645\u0627 \u0642\u0627\u0645\u062a \u0628\u0634\u0631\u0627\u0621 \u0645\u062e\u0632\u0648\u0646 \u0628\u0627\u0644\u0641\u0639\u0644. \u0633\u064a\u0624\u062f\u064a \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0645\u0631\u062c\u0639 \u0625\u0644\u0649 \u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0630\u064a \u062a\u0645 \u0634\u0631\u0627\u0624\u0647. \u0647\u0644 \u0633\u062a\u0633\u062a\u0645\u0631\u061f", + "There shoulnd\\'t be more option than there are units.": "\u0644\u0627 \u064a\u0646\u0628\u063a\u064a \u0623\u0646 \u064a\u0643\u0648\u0646 \u0647\u0646\u0627\u0643 \u062e\u064a\u0627\u0631 \u0623\u0643\u062b\u0631 \u0645\u0646 \u0627\u0644\u0648\u062d\u062f\u0627\u062a.", + "Either Selling or Purchase unit isn\\'t defined. Unable to proceed.": "\u0644\u0645 \u064a\u062a\u0645 \u062a\u062d\u062f\u064a\u062f \u0648\u062d\u062f\u0629 \u0627\u0644\u0628\u064a\u0639 \u0623\u0648 \u0627\u0644\u0634\u0631\u0627\u0621. \u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0627\u0644\u0645\u0636\u064a \u0642\u062f\u0645\u0627.", + "Select the procured unit first before selecting the conversion unit.": "\u062d\u062f\u062f \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u0645\u0634\u062a\u0631\u0627\u0629 \u0623\u0648\u0644\u0627\u064b \u0642\u0628\u0644 \u062a\u062d\u062f\u064a\u062f \u0648\u062d\u062f\u0629 \u0627\u0644\u062a\u062d\u0648\u064a\u0644.", + "Convert to unit": "\u062a\u062d\u0648\u064a\u0644 \u0625\u0644\u0649 \u0648\u062d\u062f\u0629", + "An unexpected error has occured": "\u0644\u0642\u062f \u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639", + "Unable to add product which doesn\\'t unit quantities defined.": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u0625\u0636\u0627\u0641\u0629 \u0645\u0646\u062a\u062c \u0644\u0627 \u064a\u0648\u062d\u062f \u0627\u0644\u0643\u0645\u064a\u0627\u062a \u0627\u0644\u0645\u062d\u062f\u062f\u0629.", + "{product}: Purchase Unit": "{\u0627\u0644\u0645\u0646\u062a\u062c}: \u0648\u062d\u062f\u0629 \u0627\u0644\u0634\u0631\u0627\u0621", + "The product will be procured on that unit.": "\u0633\u064a\u062a\u0645 \u0634\u0631\u0627\u0621 \u0627\u0644\u0645\u0646\u062a\u062c \u0639\u0644\u0649 \u062a\u0644\u0643 \u0627\u0644\u0648\u062d\u062f\u0629.", + "Unkown Unit": "\u0648\u062d\u062f\u0629 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641\u0629", + "Choose Tax": "\u0627\u062e\u062a\u0631 \u0627\u0644\u0636\u0631\u064a\u0628\u0629", + "The tax will be assigned to the procured product.": "\u0633\u064a\u062a\u0645 \u062a\u062e\u0635\u064a\u0635 \u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0644\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0630\u064a \u062a\u0645 \u0634\u0631\u0627\u0624\u0647.", + "Show Details": "\u0627\u0638\u0647\u0631 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644", + "Hide Details": "\u0623\u062e\u0641 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644", + "Important Notes": "\u0645\u0644\u0627\u062d\u0638\u0627\u062a \u0647\u0627\u0645\u0629", + "Stock Management Products.": "\u0645\u0646\u062a\u062c\u0627\u062a \u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0645\u062e\u0632\u0648\u0646.", + "Doesn\\'t work with Grouped Product.": "\u0644\u0627 \u064a\u0639\u0645\u0644 \u0645\u0639 \u0627\u0644\u0645\u0646\u062a\u062c \u0627\u0644\u0645\u062c\u0645\u0639.", + "Convert": "\u064a\u062a\u062d\u0648\u0644", + "Looks like no valid products matched the searched term.": "\u064a\u0628\u062f\u0648 \u0623\u0646\u0647 \u0644\u0627 \u062a\u0648\u062c\u062f \u0645\u0646\u062a\u062c\u0627\u062a \u0635\u0627\u0644\u062d\u0629 \u062a\u0637\u0627\u0628\u0642 \u0627\u0644\u0645\u0635\u0637\u0644\u062d \u0627\u0644\u0630\u064a \u062a\u0645 \u0627\u0644\u0628\u062d\u062b \u0639\u0646\u0647.", + "This product doesn't have any stock to adjust.": "\u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062a\u062c \u0644\u064a\u0633 \u0644\u062f\u064a\u0647 \u0623\u064a \u0645\u062e\u0632\u0648\u0646 \u0644\u0636\u0628\u0637\u0647.", + "Select Unit": "\u062d\u062f\u062f \u0627\u0644\u0648\u062d\u062f\u0629", + "Select the unit that you want to adjust the stock with.": "\u062d\u062f\u062f \u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u062a\u064a \u062a\u0631\u064a\u062f \u0636\u0628\u0637 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0628\u0647\u0627.", + "A similar product with the same unit already exists.": "\u064a\u0648\u062c\u062f \u0628\u0627\u0644\u0641\u0639\u0644 \u0645\u0646\u062a\u062c \u0645\u0645\u0627\u062b\u0644 \u0628\u0646\u0641\u0633 \u0627\u0644\u0648\u062d\u062f\u0629.", + "Select Procurement": "\u062d\u062f\u062f \u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Select the procurement that you want to adjust the stock with.": "\u062d\u062f\u062f \u0627\u0644\u0634\u0631\u0627\u0621 \u0627\u0644\u0630\u064a \u062a\u0631\u064a\u062f \u0636\u0628\u0637 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0628\u0647.", + "Select Action": "\u0627\u062e\u062a\u0631 \u0641\u0639\u0644\u0627", + "Select the action that you want to perform on the stock.": "\u062d\u062f\u062f \u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u0630\u064a \u062a\u0631\u064a\u062f \u062a\u0646\u0641\u064a\u0630\u0647 \u0639\u0644\u0649 \u0627\u0644\u0633\u0647\u0645.", + "Would you like to remove the selected products from the table ?": "\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u062d\u062f\u062f\u0629 \u0645\u0646 \u0627\u0644\u062c\u062f\u0648\u0644\u061f", + "Unit:": "\u0648\u062d\u062f\u0629:", + "Operation:": "\u0639\u0645\u0644\u064a\u0629:", + "Procurement:": "\u0634\u0631\u0627\u0621:", + "Reason:": "\u0633\u0628\u0628:", + "Provided": "\u0645\u062a\u0627\u062d", + "Not Provided": "\u063a\u064a\u0631 \u0645\u0632\u0648\u062f", + "Remove Selected": "\u0627\u0632\u0644 \u0627\u0644\u0645\u062d\u062f\u062f", + "Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.": "\u064a\u062a\u0645 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0645\u064a\u0632 \u0644\u062a\u0648\u0641\u064a\u0631 \u0648\u0635\u0648\u0644 \u0622\u0645\u0646 \u0625\u0644\u0649 \u0645\u0648\u0627\u0631\u062f NexoPOS \u062f\u0648\u0646 \u0627\u0644\u062d\u0627\u062c\u0629 \u0625\u0644\u0649 \u0645\u0634\u0627\u0631\u0643\u0629 \u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0648\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u0634\u062e\u0635\u064a\u0629 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643.\n \u0628\u0645\u062c\u0631\u062f \u0625\u0646\u0634\u0627\u0626\u0647\u060c \u0644\u0646 \u062a\u0646\u062a\u0647\u064a \u0635\u0644\u0627\u062d\u064a\u062a\u0647 \u062d\u062a\u0649 \u062a\u0642\u0648\u0645 \u0628\u0625\u0628\u0637\u0627\u0644\u0647 \u0628\u0634\u0643\u0644 \u0635\u0631\u064a\u062d.", + "You haven\\'t yet generated any token for your account. Create one to get started.": "\u0644\u0645 \u062a\u0642\u0645 \u0628\u0639\u062f \u0628\u0625\u0646\u0634\u0627\u0621 \u0623\u064a \u0631\u0645\u0632 \u0645\u0645\u064a\u0632 \u0644\u062d\u0633\u0627\u0628\u0643. \u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0648\u0627\u062d\u062f\u0629 \u0644\u0644\u0628\u062f\u0621.", + "You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?": "\u0623\u0646\u062a \u0639\u0644\u0649 \u0648\u0634\u0643 \u062d\u0630\u0641 \u0631\u0645\u0632 \u0645\u0645\u064a\u0632 \u0642\u062f \u064a\u0643\u0648\u0646 \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u0648\u0627\u0633\u0637\u0629 \u062a\u0637\u0628\u064a\u0642 \u062e\u0627\u0631\u062c\u064a. \u0633\u064a\u0624\u062f\u064a \u0627\u0644\u062d\u0630\u0641 \u0625\u0644\u0649 \u0645\u0646\u0639 \u0647\u0630\u0627 \u0627\u0644\u062a\u0637\u0628\u064a\u0642 \u0645\u0646 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0648\u0627\u062c\u0647\u0629 \u0628\u0631\u0645\u062c\u0629 \u0627\u0644\u062a\u0637\u0628\u064a\u0642\u0627\u062a. \u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u061f", + "Date Range : {date1} - {date2}": "\u0627\u0644\u0646\u0637\u0627\u0642 \u0627\u0644\u0632\u0645\u0646\u064a: {date1} - {date2}", + "Document : Best Products": "\u0627\u0644\u0648\u062b\u064a\u0642\u0629 : \u0623\u0641\u0636\u0644 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a", + "By : {user}": "\u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645}", + "Range : {date1} — {date2}": "\u0627\u0644\u0646\u0637\u0627\u0642: {date1} — {\u0627\u0644\u062a\u0627\u0631\u064a\u062e2}", + "Document : Sale By Payment": "\u0627\u0644\u0648\u062b\u064a\u0642\u0629 : \u0627\u0644\u0628\u064a\u0639 \u0628\u0627\u0644\u062f\u0641\u0639", + "Document : Customer Statement": "\u0627\u0644\u0648\u062b\u064a\u0642\u0629: \u0628\u064a\u0627\u0646 \u0627\u0644\u0639\u0645\u064a\u0644", + "Customer : {selectedCustomerName}": "\u0627\u0644\u0639\u0645\u064a\u0644 : {selectedCustomerName}", + "All Categories": "\u062c\u0645\u064a\u0639 \u0627\u0644\u0641\u0626\u0627\u062a", + "All Units": "\u062c\u0645\u064a\u0639 \u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "Date : {date}": "\u0627\u0644\u062a\u0627\u0631\u064a\u062e : {\u0627\u0644\u062a\u0627\u0631\u064a\u062e}", + "Document : {reportTypeName}": "\u0627\u0644\u0645\u0633\u062a\u0646\u062f: {reportTypeName}", + "Threshold": "\u0639\u062a\u0628\u0629", + "Select Units": "\u062d\u062f\u062f \u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "An error has occured while loading the units.": "\u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0627\u062a.", + "An error has occured while loading the categories.": "\u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0641\u0626\u0627\u062a.", + "Document : Payment Type": "\u0627\u0644\u0648\u062b\u064a\u0642\u0629: \u0646\u0648\u0639 \u0627\u0644\u062f\u0641\u0639", + "Document : Profit Report": "\u0627\u0644\u0648\u062b\u064a\u0642\u0629: \u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0631\u0628\u062d", + "Filter by Category": "\u062a\u0635\u0641\u064a\u0629 \u062d\u0633\u0628 \u0627\u0644\u0641\u0626\u0629", + "Filter by Units": "\u062a\u0635\u0641\u064a\u0629 \u062d\u0633\u0628 \u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "An error has occured while loading the categories": "\u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0641\u0626\u0627\u062a", + "An error has occured while loading the units": "\u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "By Type": "\u062d\u0633\u0628 \u0627\u0644\u0646\u0648\u0639", + "By User": "\u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645", + "By Category": "\u0628\u0627\u0644\u062a\u0635\u0646\u064a\u0641", + "All Category": "\u062c\u0645\u064a\u0639 \u0627\u0644\u0641\u0626\u0627\u062a", + "Document : Sale Report": "\u0627\u0644\u0648\u062b\u064a\u0642\u0629: \u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0628\u064a\u0639", + "Filter By Category": "\u062a\u0635\u0641\u064a\u0629 \u062d\u0633\u0628 \u0627\u0644\u0641\u0626\u0629", + "Allow you to choose the category.": "\u0627\u0633\u0645\u062d \u0644\u0643 \u0628\u0627\u062e\u062a\u064a\u0627\u0631 \u0627\u0644\u0641\u0626\u0629.", + "No category was found for proceeding the filtering.": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0641\u0626\u0629 \u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u062a\u0635\u0641\u064a\u0629.", + "Document : Sold Stock Report": "\u0627\u0644\u0645\u0633\u062a\u0646\u062f: \u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0645\u062e\u0632\u0648\u0646 \u0627\u0644\u0645\u0628\u0627\u0639", + "Filter by Unit": "\u0627\u0644\u062a\u0635\u0641\u064a\u0629 \u062d\u0633\u0628 \u0627\u0644\u0648\u062d\u062f\u0629", + "Limit Results By Categories": "\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0646\u062a\u0627\u0626\u062c \u062d\u0633\u0628 \u0627\u0644\u0641\u0626\u0627\u062a", + "Limit Results By Units": "\u0627\u0644\u062d\u062f \u0645\u0646 \u0627\u0644\u0646\u062a\u0627\u0626\u062c \u062d\u0633\u0628 \u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "Generate Report": "\u0627\u0646\u0634\u0627\u0621 \u062a\u0642\u0631\u064a\u0631", + "Document : Combined Products History": "\u0627\u0644\u0645\u0633\u062a\u0646\u062f: \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u062c\u0645\u0639\u0629", + "Ini. Qty": "\u0625\u064a\u0646\u064a. \u0627\u0644\u0643\u0645\u064a\u0629", + "Added Quantity": "\u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0645\u0636\u0627\u0641\u0629", + "Add. Qty": "\u064a\u0636\u064a\u0641. \u0627\u0644\u0643\u0645\u064a\u0629", + "Sold Quantity": "\u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0645\u0628\u0627\u0639\u0629", + "Sold Qty": "\u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0645\u0628\u0627\u0639\u0629", + "Defective Quantity": "\u0643\u0645\u064a\u0629 \u0645\u0639\u064a\u0628\u0629", + "Defec. Qty": "\u0639\u064a\u0628. \u0627\u0644\u0643\u0645\u064a\u0629", + "Final Quantity": "\u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0646\u0647\u0627\u0626\u064a\u0629", + "Final Qty": "\u0627\u0644\u0643\u0645\u064a\u0629 \u0627\u0644\u0646\u0647\u0627\u0626\u064a\u0629", + "No data available": "\u0644\u0627 \u062a\u062a\u0648\u0627\u0641\u0631 \u0628\u064a\u0627\u0646\u0627\u062a", + "Document : Yearly Report": "\u0627\u0644\u0648\u062b\u064a\u0642\u0629: \u0627\u0644\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0633\u0646\u0648\u064a", + "The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.": "\u0633\u064a\u062a\u0645 \u062d\u0633\u0627\u0628 \u0627\u0644\u062a\u0642\u0631\u064a\u0631 \u0644\u0644\u0639\u0627\u0645 \u0627\u0644\u062d\u0627\u0644\u064a\u060c \u0648\u0633\u064a\u062a\u0645 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0648\u0638\u064a\u0641\u0629 \u0648\u0633\u064a\u062a\u0645 \u0625\u0639\u0644\u0627\u0645\u0643 \u0628\u0645\u062c\u0631\u062f \u0627\u0643\u062a\u0645\u0627\u0644\u0647\u0627.", + "Unable to edit this transaction": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u0631\u064a\u0631 \u0647\u0630\u0647 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629", + "This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0647\u0630\u0647 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0628\u0646\u0648\u0639 \u0644\u0645 \u064a\u0639\u062f \u0645\u062a\u0648\u0641\u0631\u064b\u0627. \u0644\u0645 \u064a\u0639\u062f \u0647\u0630\u0627 \u0627\u0644\u0646\u0648\u0639 \u0645\u062a\u0627\u062d\u064b\u0627 \u0644\u0623\u0646 NexoPOS \u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u0646\u0641\u064a\u0630 \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u062e\u0644\u0641\u064a\u0629.", + "Save Transaction": "\u062d\u0641\u0638 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629", + "While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.": "\u0623\u062b\u0646\u0627\u0621 \u062a\u062d\u062f\u064a\u062f \u0645\u0639\u0627\u0645\u0644\u0629 \u0627\u0644\u0643\u064a\u0627\u0646\u060c \u0633\u064a\u062a\u0645 \u0636\u0631\u0628 \u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0645\u062d\u062f\u062f \u0628\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0639\u064a\u0646 \u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646 \u0627\u0644\u0645\u062d\u062f\u062f\u0629.", + "The transaction is about to be saved. Would you like to confirm your action ?": "\u0627\u0644\u0635\u0641\u0642\u0629 \u0639\u0644\u0649 \u0648\u0634\u0643 \u0623\u0646 \u064a\u062a\u0645 \u062d\u0641\u0638\u0647\u0627. \u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u0623\u0643\u064a\u062f \u0627\u0644\u0625\u062c\u0631\u0627\u0621 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643\u061f", + "Unable to load the transaction": "\u063a\u064a\u0631 \u0642\u0627\u062f\u0631 \u0639\u0644\u0649 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629", + "You cannot edit this transaction if NexoPOS cannot perform background requests.": "\u0644\u0627 \u064a\u0645\u0643\u0646\u0643 \u062a\u062d\u0631\u064a\u0631 \u0647\u0630\u0647 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0625\u0630\u0627 \u0644\u0645 \u064a\u062a\u0645\u0643\u0646 NexoPOS \u0645\u0646 \u062a\u0646\u0641\u064a\u0630 \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u062e\u0644\u0641\u064a\u0629.", + "MySQL is selected as database driver": "\u062a\u0645 \u0627\u062e\u062a\u064a\u0627\u0631 MySQL \u0643\u0628\u0631\u0646\u0627\u0645\u062c \u062a\u0634\u063a\u064a\u0644 \u0644\u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", + "Please provide the credentials to ensure NexoPOS can connect to the database.": "\u064a\u0631\u062c\u0649 \u062a\u0642\u062f\u064a\u0645 \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0627\u0639\u062a\u0645\u0627\u062f \u0644\u0644\u062a\u0623\u0643\u062f \u0645\u0646 \u0625\u0645\u0643\u0627\u0646\u064a\u0629 \u0627\u062a\u0635\u0627\u0644 NexoPOS \u0628\u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a.", + "Sqlite is selected as database driver": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062f Sqlite \u0643\u0628\u0631\u0646\u0627\u0645\u062c \u062a\u0634\u063a\u064a\u0644 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", + "Make sure Sqlite module is available for PHP. Your database will be located on the database directory.": "\u062a\u0623\u0643\u062f \u0645\u0646 \u062a\u0648\u0641\u0631 \u0648\u062d\u062f\u0629 Sqlite \u0644\u0640 PHP. \u0633\u062a\u0643\u0648\u0646 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643 \u0645\u0648\u062c\u0648\u062f\u0629 \u0641\u064a \u062f\u0644\u064a\u0644 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a.", + "Checking database connectivity...": "\u062c\u0627\u0631\u064d \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0627\u062a\u0635\u0627\u0644 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a...", + "Driver": "\u0633\u0627\u0626\u0642", + "Set the database driver": "\u0642\u0645 \u0628\u062a\u0639\u064a\u064a\u0646 \u0628\u0631\u0646\u0627\u0645\u062c \u062a\u0634\u063a\u064a\u0644 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", + "Hostname": "\u0627\u0633\u0645 \u0627\u0644\u0645\u0636\u064a\u0641", + "Provide the database hostname": "\u062a\u0648\u0641\u064a\u0631 \u0627\u0633\u0645 \u0645\u0636\u064a\u0641 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", + "Username required to connect to the database.": "\u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0645\u0637\u0644\u0648\u0628 \u0644\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a.", + "The username password required to connect.": "\u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0644\u0644\u0627\u062a\u0635\u0627\u0644.", + "Database Name": "\u0627\u0633\u0645 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", + "Provide the database name. Leave empty to use default file for SQLite Driver.": "\u062a\u0648\u0641\u064a\u0631 \u0627\u0633\u0645 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a. \u0627\u062a\u0631\u0643\u0647 \u0641\u0627\u0631\u063a\u064b\u0627 \u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a \u0644\u0628\u0631\u0646\u0627\u0645\u062c \u062a\u0634\u063a\u064a\u0644 SQLite.", + "Database Prefix": "\u0628\u0627\u062f\u0626\u0629 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", + "Provide the database prefix.": "\u062a\u0648\u0641\u064a\u0631 \u0628\u0627\u062f\u0626\u0629 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a.", + "Port": "\u0645\u064a\u0646\u0627\u0621", + "Provide the hostname port.": "\u0642\u0645 \u0628\u062a\u0648\u0641\u064a\u0631 \u0645\u0646\u0641\u0630 \u0627\u0633\u0645 \u0627\u0644\u0645\u0636\u064a\u0641.", + "NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.": "\u0623\u0635\u0628\u062d NexoPOS<\/strong> \u0627\u0644\u0622\u0646 \u0642\u0627\u062f\u0631\u064b\u0627 \u0639\u0644\u0649 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a. \u0627\u0628\u062f\u0623 \u0628\u0625\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628 \u0627\u0644\u0645\u0633\u0624\u0648\u0644 \u0648\u0625\u0639\u0637\u0627\u0621 \u0627\u0633\u0645 \u0644\u0644\u062a\u062b\u0628\u064a\u062a \u0627\u0644\u062e\u0627\u0635 \u0628\u0643. \u0628\u0645\u062c\u0631\u062f \u0627\u0644\u062a\u062b\u0628\u064a\u062a\u060c \u0644\u0646 \u064a\u0643\u0648\u0646 \u0645\u0646 \u0627\u0644\u0645\u0645\u0643\u0646 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0647\u0630\u0647 \u0627\u0644\u0635\u0641\u062d\u0629.", + "Install": "\u062b\u064e\u0628\u064e\u0651\u062a\u064e", + "Application": "\u0637\u0644\u0628", + "That is the application name.": "\u0647\u0630\u0627 \u0647\u0648 \u0627\u0633\u0645 \u0627\u0644\u062a\u0637\u0628\u064a\u0642.", + "Provide the administrator username.": "\u062a\u0648\u0641\u064a\u0631 \u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0633\u0624\u0648\u0644.", + "Provide the administrator email.": "\u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0644\u0644\u0645\u0633\u0624\u0648\u0644.", + "What should be the password required for authentication.": "\u0645\u0627 \u064a\u0646\u0628\u063a\u064a \u0623\u0646 \u062a\u0643\u0648\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0644\u0644\u0645\u0635\u0627\u062f\u0642\u0629.", + "Should be the same as the password above.": "\u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0647\u064a \u0646\u0641\u0633 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0623\u0639\u0644\u0627\u0647.", + "Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.": "\u0634\u0643\u0631\u064b\u0627 \u0644\u0643 \u0639\u0644\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 NexoPOS \u0644\u0625\u062f\u0627\u0631\u0629 \u0645\u062a\u062c\u0631\u0643. \u0633\u064a\u0633\u0627\u0639\u062f\u0643 \u0645\u0639\u0627\u0644\u062c \u0627\u0644\u062a\u062b\u0628\u064a\u062a \u0647\u0630\u0627 \u0639\u0644\u0649 \u062a\u0634\u063a\u064a\u0644 NexoPOS \u0641\u064a \u0623\u064a \u0648\u0642\u062a \u0645\u0646 \u0627\u0644\u0623\u0648\u0642\u0627\u062a.", + "Choose your language to get started.": "\u0627\u062e\u062a\u0631 \u0644\u063a\u062a\u0643 \u0644\u0644\u0628\u062f\u0621.", + "Remaining Steps": "\u0627\u0644\u062e\u0637\u0648\u0627\u062a \u0627\u0644\u0645\u062a\u0628\u0642\u064a\u0629", + "Database Configuration": "\u062a\u0643\u0648\u064a\u0646 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", + "Application Configuration": "\u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u062a\u0637\u0628\u064a\u0642", + "Language Selection": "\u0627\u062e\u062a\u064a\u0627\u0631 \u0627\u0644\u0644\u063a\u0629", + "Select what will be the default language of NexoPOS.": "\u062d\u062f\u062f \u0627\u0644\u0644\u063a\u0629 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629 \u0644\u0640 NexoPOS.", + "In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.": "\u0645\u0646 \u0623\u062c\u0644 \u0627\u0644\u062d\u0641\u0627\u0638 \u0639\u0644\u0649 \u0639\u0645\u0644 NexoPOS \u0628\u0633\u0644\u0627\u0633\u0629 \u0645\u0639 \u0627\u0644\u062a\u062d\u062f\u064a\u062b\u0627\u062a\u060c \u0646\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629 \u0625\u0644\u0649 \u062a\u0631\u062d\u064a\u0644 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a. \u0641\u064a \u0627\u0644\u0648\u0627\u0642\u0639\u060c \u0644\u0627 \u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0627\u0644\u0642\u064a\u0627\u0645 \u0628\u0623\u064a \u0625\u062c\u0631\u0627\u0621\u060c \u0641\u0642\u0637 \u0627\u0646\u062a\u0638\u0631 \u062d\u062a\u0649 \u062a\u0646\u062a\u0647\u064a \u0627\u0644\u0639\u0645\u0644\u064a\u0629 \u0648\u0633\u064a\u062a\u0645 \u0625\u0639\u0627\u062f\u0629 \u062a\u0648\u062c\u064a\u0647\u0643.", + "Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.": "\u064a\u0628\u062f\u0648 \u0623\u0646\u0647 \u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u0627\u0644\u062a\u062d\u062f\u064a\u062b. \u0639\u0627\u062f\u0629\u064b \u0645\u0627 \u064a\u0624\u062f\u064a \u0625\u0639\u0637\u0627\u0621 \u062c\u0631\u0639\u0629 \u0623\u062e\u0631\u0649 \u0625\u0644\u0649 \u0625\u0635\u0644\u0627\u062d \u0630\u0644\u0643. \u0648\u0645\u0639 \u0630\u0644\u0643\u060c \u0625\u0630\u0627 \u0643\u0646\u062a \u0644\u0627 \u062a\u0632\u0627\u0644 \u0644\u0627 \u062a\u062d\u0635\u0644 \u0639\u0644\u0649 \u0623\u064a \u0641\u0631\u0635\u0629.", + "Please report this message to the support : ": "\u064a\u0631\u062c\u0649 \u0627\u0644\u0625\u0628\u0644\u0627\u063a \u0639\u0646 \u0647\u0630\u0647 \u0627\u0644\u0631\u0633\u0627\u0644\u0629 \u0625\u0644\u0649 \u0627\u0644\u062f\u0639\u0645:", + "No refunds made so far. Good news right?": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0623\u064a \u0645\u0628\u0627\u0644\u063a \u062d\u062a\u0649 \u0627\u0644\u0622\u0646. \u0623\u062e\u0628\u0627\u0631 \u062c\u064a\u062f\u0629 \u0623\u0644\u064a\u0633 \u0643\u0630\u0644\u0643\u061f", + "Open Register : %s": "\u0641\u062a\u062d \u0627\u0644\u062a\u0633\u062c\u064a\u0644: %s", + "Loading Coupon For : ": "\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0644:", + "This coupon requires products that aren\\'t available on the cart at the moment.": "\u062a\u062a\u0637\u0644\u0628 \u0647\u0630\u0647 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0645\u0646\u062a\u062c\u0627\u062a \u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631\u0629 \u0641\u064a \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642 \u0641\u064a \u0627\u0644\u0648\u0642\u062a \u0627\u0644\u062d\u0627\u0644\u064a.", + "This coupon requires products that belongs to specific categories that aren\\'t included at the moment.": "\u062a\u062a\u0637\u0644\u0628 \u0647\u0630\u0647 \u0627\u0644\u0642\u0633\u064a\u0645\u0629 \u0645\u0646\u062a\u062c\u0627\u062a \u062a\u0646\u062a\u0645\u064a \u0625\u0644\u0649 \u0641\u0626\u0627\u062a \u0645\u062d\u062f\u062f\u0629 \u0644\u0645 \u064a\u062a\u0645 \u062a\u0636\u0645\u064a\u0646\u0647\u0627 \u0641\u064a \u0627\u0644\u0648\u0642\u062a \u0627\u0644\u062d\u0627\u0644\u064a.", + "Too many results.": "\u0646\u062a\u0627\u0626\u062c \u0643\u062b\u064a\u0631\u0629 \u062c\u062f\u064b\u0627.", + "New Customer": "\u0639\u0645\u064a\u0644 \u062c\u062f\u064a\u062f", + "Purchases": "\u0627\u0644\u0645\u0634\u062a\u0631\u064a\u0627\u062a", + "Owed": "\u0627\u0644\u0645\u0633\u062a\u062d\u0642", + "Usage :": "\u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 :", + "Code :": "\u0634\u0641\u0631\u0629 :", + "Order Reference": "\u062a\u0631\u062a\u064a\u0628 \u0627\u0644\u0645\u0631\u062c\u0639\u064a", + "The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0645\u0646\u062a\u062c \"{product}\" \u0645\u0646 \u062d\u0642\u0644 \u0627\u0644\u0628\u062d\u062b\u060c \u062d\u064a\u062b \u064a\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \"\u0627\u0644\u062a\u062a\u0628\u0639 \u0627\u0644\u062f\u0642\u064a\u0642\". \u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u064a \u0645\u0639\u0631\u0641\u0629 \u0627\u0644\u0645\u0632\u064a\u062f \u061f", + "{product} : Units": "{\u0627\u0644\u0645\u0646\u062a\u062c}: \u0627\u0644\u0648\u062d\u062f\u0627\u062a", + "This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.": "\u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062a\u062c \u0644\u064a\u0633 \u0644\u062f\u064a\u0647 \u0623\u064a \u0648\u062d\u062f\u0629 \u0645\u062d\u062f\u062f\u0629 \u0644\u0644\u0628\u064a\u0639. \u062a\u0623\u0643\u062f \u0645\u0646 \u0648\u0636\u0639 \u0639\u0644\u0627\u0645\u0629 \u0639\u0644\u0649 \u0648\u062d\u062f\u0629 \u0648\u0627\u062d\u062f\u0629 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0643\u0645\u0631\u0626\u064a\u0629.", + "Previewing :": "\u0627\u0644\u0645\u0639\u0627\u064a\u0646\u0629 :", + "Search for options": "\u0627\u0644\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u062e\u064a\u0627\u0631\u0627\u062a", + "The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0631\u0645\u0632 API \u0627\u0644\u0645\u0645\u064a\u0632. \u062a\u0623\u0643\u062f \u0645\u0646 \u0646\u0633\u062e \u0647\u0630\u0627 \u0627\u0644\u0631\u0645\u0632 \u0641\u064a \u0645\u0643\u0627\u0646 \u0622\u0645\u0646 \u062d\u064a\u062b \u0633\u064a\u062a\u0645 \u0639\u0631\u0636\u0647 \u0645\u0631\u0629 \u0648\u0627\u062d\u062f\u0629 \u0641\u0642\u0637.\n \u0625\u0630\u0627 \u0641\u0642\u062f\u062a \u0647\u0630\u0627 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0645\u064a\u0632\u060c \u0641\u0633\u0648\u0641 \u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0625\u0628\u0637\u0627\u0644\u0647 \u0648\u0625\u0646\u0634\u0627\u0621 \u0631\u0645\u0632 \u062c\u062f\u064a\u062f.", + "The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.": "\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0636\u0631\u0627\u0626\u0628 \u0627\u0644\u0645\u062d\u062f\u062f\u0629 \u0644\u064a\u0633 \u0644\u062f\u064a\u0647\u0627 \u0623\u064a \u0636\u0631\u0627\u0626\u0628 \u0641\u0631\u0639\u064a\u0629 \u0645\u0639\u064a\u0646\u0629. \u0648\u0647\u0630\u0627 \u0642\u062f \u064a\u0633\u0628\u0628 \u0623\u0631\u0642\u0627\u0645\u0627 \u062e\u0627\u0637\u0626\u0629.", + "The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.": "\u062a\u0645\u062a \u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0642\u0633\u0627\u0626\u0645 \"%s\" \u0645\u0646 \u0633\u0644\u0629 \u0627\u0644\u062a\u0633\u0648\u0642\u060c \u0646\u0638\u0631\u064b\u0627 \u0644\u0639\u062f\u0645 \u0627\u0633\u062a\u064a\u0641\u0627\u0621 \u0627\u0644\u0634\u0631\u0648\u0637 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0644\u0647\u0627.", + "The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.": "\u0633\u064a\u0643\u0648\u0646 \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u062d\u0627\u0644\u064a \u0628\u0627\u0637\u0644\u0627. \u0633\u064a\u0624\u062f\u064a \u0647\u0630\u0627 \u0625\u0644\u0649 \u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629\u060c \u0648\u0644\u0643\u0646 \u0644\u0646 \u064a\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0637\u0644\u0628. \u0633\u064a\u062a\u0645 \u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 \u062d\u0648\u0644 \u0627\u0644\u0639\u0645\u0644\u064a\u0629 \u0641\u064a \u0627\u0644\u062a\u0642\u0631\u064a\u0631. \u062e\u0630 \u0628\u0639\u064a\u0646 \u0627\u0644\u0627\u0639\u062a\u0628\u0627\u0631 \u062a\u0642\u062f\u064a\u0645 \u0633\u0628\u0628 \u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u064a\u0629.", + "Invalid Error Message": "\u0631\u0633\u0627\u0644\u0629 \u062e\u0637\u0623 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d\u0629", + "Unamed Settings Page": "صفحة الإعدادات غير المسماة", + "Description of unamed setting page": "وصف صفحة الإعدادات غير المسماة", + "Text Field": "حقل نصي", + "This is a sample text field.": "هذا حقل نصي نموذجي.", + "No description has been provided.": "لم يتم تقديم وصف.", + "You\\'re using NexoPOS %s<\/a>": "أنت تستخدم NexoPOS %s", + "If you haven\\'t asked this, please get in touch with the administrators.": "إذا لم تطلب هذا ، يرجى الاتصال بالمسؤولين.", + "A new user has registered to your store (%s) with the email %s.": "قام مستخدم جديد بالتسجيل في متجرك (%s) بالبريد الإلكتروني %s.", + "The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.": "تم إنشاء الحساب الذي أنشأته لـ %s بنجاح. يمكنك الآن تسجيل الدخول إلى اسم المستخدم الخاص بك (%s) وكلمة المرور التي حددتها.", + "Note: ": "ملاحظة:", + "Inclusive Product Taxes": "ضرائب المنتجات الشاملة", + "Exclusive Product Taxes": "ضرائب المنتجات الحصرية", + "Condition:": "الشرط:", + "Date : %s": "التاريخ: %s", + "NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.": "لم يتمكن NexoPOS من تنفيذ طلب قاعدة بيانات. قد يكون هذا الخطأ مرتبطًا بتكوين خاطئ في ملف env. الخاص بك. قد يكون الدليل التالي مفيدًا لمساعدتك في حل هذه المشكلة.", + "Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.": "لسوء الحظ ، حدث شيء غير متوقع. يمكنك البدء بإعطاء لقطة أخرى بالنقر فوق \"حاول مرة أخرى\". إذا استمرت المشكلة ، فاستخدم الناتج أدناه لتلقي الدعم.", + "Retry": "أعد المحاولة", + "If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.": "إذا رأيت هذه الصفحة ، فهذا يعني أن NexoPOS مثبت بشكل صحيح على نظامك. نظرًا لأن هذه الصفحة من المفترض أن تكون واجهة المستخدم الأمامية ، فإن NexoPOS لا يحتوي على واجهة أمامية في الوقت الحالي. تعرض هذه الصفحة روابط مفيدة ستأخذك إلى الموارد المهمة.", + "Compute Products": "حساب المنتجات", + "Unammed Section": "قسم غير مسمى", + "%s order(s) has recently been deleted as they have expired.": "تم مؤخرًا حذف طلب (طلبات) %s نظرًا لانتهاء صلاحيتها.", + "%s products will be updated": "سيتم تحديث منتجات %s", + "Procurement %s": "المشتريات %s", + "You cannot assign the same unit to more than one selling unit.": "لا يمكنك تعيين نفس الوحدة لأكثر من وحدة بيع واحدة.", + "The quantity to convert can\\'t be zero.": "الكمية المراد تحويلها لا يمكن أن تكون صفرًا.", + "The source unit \"(%s)\" for the product \"%s": "وحدة المصدر \"(%s)\" للمنتج \"%s\"", + "The conversion from \"%s\" will cause a decimal value less than one count of the destination unit \"%s\".": "سيؤدي التحويل من \"%s\" إلى قيمة عشرية أقل من عدد واحد من وحدة الوجهة \"%s\".", + "{customer_first_name}: displays the customer first name.": "{customer_first_name}: يعرض الاسم الأول للعميل.", + "{customer_last_name}: displays the customer last name.": "{customer_last_name}: يعرض اسم العائلة للعميل.", + "No Unit Selected": "لم يتم تحديد وحدة", + "Unit Conversion : {product}": "تحويل الوحدة: {product}", + "Convert {quantity} available": "تحويل الكمية المتاحة: {quantity}", + "The quantity should be greater than 0": "يجب أن تكون الكمية أكبر من 0", + "The provided quantity can\\'t result in any convertion for unit \"{destination}\"": "The provided quantity can\\'t result in any convertion for unit \"{destination}\"", + "Conversion Warning": "Conversion Warning", + "Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?": "Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?", + "Confirm Conversion": "Confirm Conversion", + "You\\'re about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?": "You\\'re about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?", + "Conversion Successful": "Conversion Successful", + "The product {product} has been converted successfully.": "The product {product} has been converted successfully.", + "An error occured while converting the product {product}": "An error occured while converting the product {product}", + "The quantity has been set to the maximum available": "The quantity has been set to the maximum available", + "The product {product} has no base unit": "The product {product} has no base unit", + "Developper Section": "Developper Section", + "The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?": "The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?", + "An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s": "An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s" +} \ No newline at end of file diff --git a/lang/de.json b/lang/de.json index 419c4d168..524183052 100644 --- a/lang/de.json +++ b/lang/de.json @@ -1 +1,2696 @@ -{"An invalid date were provided. Make sure it a prior date to the actual server date.":"Ein ung\u00fcltiges Datum wurde angegeben. Vergewissern Sie sich, dass es sich um ein fr\u00fcheres Datum als das tats\u00e4chliche Serverdatum handelt.","Computing report from %s...":"Berechne Bericht von %s...","The operation was successful.":"Die Operation war erfolgreich.","Unable to find a module having the identifier\/namespace \"%s\"":"Es kann kein Modul mit der Kennung\/dem Namespace \"%s\" gefunden werden","What is the CRUD single resource name ? [Q] to quit.":"Wie lautet der Name der CRUD-Einzelressource ? [Q] to quit.","Please provide a valid value":"Bitte geben Sie einen g\u00fcltigen Wert ein","Which table name should be used ? [Q] to quit.":"Welcher Tabellenname soll verwendet werden? [Q] to quit.","What slug should be used ? [Q] to quit.":"Welcher Slug sollte verwendet werden ? [Q] to quit.","Please provide a valid value.":"Bitte geben Sie einen g\u00fcltigen Wert ein.","If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Wenn Ihre CRUD-Ressource eine Beziehung hat, erw\u00e4hnen Sie sie wie folgt: \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.","Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Neue Beziehung hinzuf\u00fcgen? Erw\u00e4hnen Sie es wie folgt: \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.","Not enough parameters provided for the relation.":"Es wurden nicht gen\u00fcgend Parameter f\u00fcr die Beziehung bereitgestellt.","The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"":"Die CRUD Ressource \"%s\" f\u00fcr das Modul \"%s\" wurde auf \"%s\" generiert","The CRUD resource \"%s\" has been generated at %s":"Die CRUD-Ressource \"%s\" wurde am %s generiert","An unexpected error has occurred.":"Ein unerwarteter Fehler ist aufgetreten.","Localization for %s extracted to %s":"Lokalisierung f\u00fcr %s extrahiert nach %s","Unable to find the requested module.":"Das angeforderte Modul kann nicht gefunden werden.","\"%s\" is a reserved class name":"\"%s\" ist ein reservierter Klassenname","The migration file has been successfully forgotten for the module %s.":"Die Migrationsdatei wurde erfolgreich f\u00fcr das Modul %s vergessen.","Name":"Name","Namespace":"Namespace","Version":"Version","Author":"Autor","Enabled":"Aktiviert","Yes":"Ja","No":"Nein","Path":"Pfad","Index":"Index","Entry Class":"Einstiegsklasse","Routes":"Routen","Api":"Api","Controllers":"Controller","Views":"Ansichten","Dashboard":"Dashboard","Attribute":"Attribut","Value":"Wert","There is no migrations to perform for the module \"%s\"":"F\u00fcr das Modul \"%s\" sind keine Migrationen durchzuf\u00fchren","The module migration has successfully been performed for the module \"%s\"":"Die Modulmigration wurde erfolgreich f\u00fcr das Modul \"%s\" durchgef\u00fchrt","The products taxes were computed successfully.":"Die Produktsteuern wurden erfolgreich berechnet.","The product barcodes has been refreshed successfully.":"Die Produkt-Barcodes wurden erfolgreich aktualisiert.","%s products where updated.":"%s Produkte wurden aktualisiert.","The demo has been enabled.":"Die Demo wurde aktiviert.","What is the store name ? [Q] to quit.":"Wie lautet der Name des Gesch\u00e4fts? [Q] to quit.","Please provide at least 6 characters for store name.":"Bitte geben Sie mindestens 6 Zeichen f\u00fcr den Namen des Gesch\u00e4fts an.","What is the administrator password ? [Q] to quit.":"Wie lautet das Administratorpasswort ? [Q] to quit.","Please provide at least 6 characters for the administrator password.":"Bitte geben Sie mindestens 6 Zeichen f\u00fcr das Administratorkennwort ein.","What is the administrator email ? [Q] to quit.":"Wie lautet die Administrator-E-Mail ? [Q] to quit.","Please provide a valid email for the administrator.":"Bitte geben Sie eine g\u00fcltige E-Mail-Adresse f\u00fcr den Administrator an.","What is the administrator username ? [Q] to quit.":"Wie lautet der Administrator-Benutzername ? [Q] to quit.","Please provide at least 5 characters for the administrator username.":"Bitte geben Sie mindestens 5 Zeichen f\u00fcr den Administratorbenutzernamen an.","Downloading latest dev build...":"Neueste Entwicklung wird heruntergeladen...","Reset project to HEAD...":"Projekt auf KOPF zur\u00fccksetzen...","Provide a name to the resource.":"Geben Sie der Ressource einen Namen.","General":"Allgemeines","Operation":"Betrieb","By":"Von","Date":"Datum","Credit":"Gutschrift","Debit":"Soll","Delete":"L\u00f6schen","Would you like to delete this ?":"M\u00f6chten Sie dies l\u00f6schen?","Delete Selected Groups":"Ausgew\u00e4hlte Gruppen l\u00f6schen","Coupons List":"Gutscheinliste","Display all coupons.":"Alle Gutscheine anzeigen.","No coupons has been registered":"Es wurden keine Gutscheine registriert","Add a new coupon":"Neuen Gutschein hinzuf\u00fcgen","Create a new coupon":"Neuen Gutschein erstellen","Register a new coupon and save it.":"Registrieren Sie einen neuen Gutschein und speichern Sie ihn.","Edit coupon":"Gutschein bearbeiten","Modify Coupon.":"Gutschein \u00e4ndern.","Return to Coupons":"Zur\u00fcck zu Gutscheine","Coupon Code":"Gutscheincode","Might be used while printing the coupon.":"Kann beim Drucken des Coupons verwendet werden.","Percentage Discount":"Prozentualer Rabatt","Flat Discount":"Pauschalrabatt","Type":"Typ","Define which type of discount apply to the current coupon.":"Legen Sie fest, welche Art von Rabatt auf den aktuellen Coupon angewendet wird.","Discount Value":"Rabattwert","Define the percentage or flat value.":"Definieren Sie den Prozentsatz oder den flachen Wert.","Valid Until":"G\u00fcltig bis","Minimum Cart Value":"Minimaler Warenkorbwert","What is the minimum value of the cart to make this coupon eligible.":"Wie hoch ist der Mindestwert des Warenkorbs, um diesen Gutschein g\u00fcltig zu machen?","Maximum Cart Value":"Maximaler Warenkorbwert","Valid Hours Start":"G\u00fcltige Stunden Start","Define form which hour during the day the coupons is valid.":"Legen Sie fest, zu welcher Tageszeit die Gutscheine g\u00fcltig sind.","Valid Hours End":"G\u00fcltige Stunden enden","Define to which hour during the day the coupons end stop valid.":"Legen Sie fest, bis zu welcher Tagesstunde die Gutscheine g\u00fcltig sind.","Limit Usage":"Nutzung einschr\u00e4nken","Define how many time a coupons can be redeemed.":"Legen Sie fest, wie oft ein Coupon eingel\u00f6st werden kann.","Products":"Produkte","Select Products":"Produkte ausw\u00e4hlen","The following products will be required to be present on the cart, in order for this coupon to be valid.":"Die folgenden Produkte m\u00fcssen im Warenkorb vorhanden sein, damit dieser Gutschein g\u00fcltig ist.","Categories":"Kategorien","Select Categories":"Kategorien ausw\u00e4hlen","The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.":"Die Produkte, die einer dieser Kategorien zugeordnet sind, sollten sich im Warenkorb befinden, damit dieser Gutschein g\u00fcltig ist.","Valid From":"G\u00fcltig ab","Valid Till":"G\u00fcltig bis","Created At":"Erstellt am","N\/A":"N\/A","Undefined":"Undefiniert","Edit":"Bearbeiten","Delete a licence":"Eine Lizenz l\u00f6schen","Previous Amount":"Vorheriger Betrag","Amount":"Betrag","Next Amount":"N\u00e4chster Betrag","Description":"Beschreibung","Order":"Bestellung","Restrict the records by the creation date.":"Beschr\u00e4nken Sie die Datens\u00e4tze auf das Erstellungsdatum.","Created Between":"Erstellt zwischen","Operation Type":"Betriebsart","Restrict the orders by the payment status.":"Beschr\u00e4nken Sie die Bestellungen auf den Zahlungsstatus.","Restrict the records by the author.":"Beschr\u00e4nken Sie die Aufzeichnungen des Autors.","Total":"Gesamt","Customer Accounts List":"Kundenkontenliste","Display all customer accounts.":"Alle Kundenkonten anzeigen.","No customer accounts has been registered":"Es wurden keine Kundenkonten registriert","Add a new customer account":"Neues Kundenkonto hinzuf\u00fcgen","Create a new customer account":"Neues Kundenkonto erstellen","Register a new customer account and save it.":"Registrieren Sie ein neues Kundenkonto und speichern Sie es.","Edit customer account":"Kundenkonto bearbeiten","Modify Customer Account.":"Kundenkonto \u00e4ndern.","Return to Customer Accounts":"Zur\u00fcck zu den Kundenkonten","This will be ignored.":"Dies wird ignoriert.","Define the amount of the transaction":"Definieren Sie den Betrag der Transaktion","Deduct":"Abzug","Add":"Hinzuf\u00fcgen","Define what operation will occurs on the customer account.":"Legen Sie fest, welche Vorg\u00e4nge auf dem Kundenkonto ausgef\u00fchrt werden.","Customer Coupons List":"Kunden-Gutscheine Liste","Display all customer coupons.":"Alle Kundengutscheine anzeigen.","No customer coupons has been registered":"Es wurden keine Kundengutscheine registriert","Add a new customer coupon":"Neuen Kundengutschein hinzuf\u00fcgen","Create a new customer coupon":"Neuen Kundengutschein erstellen","Register a new customer coupon and save it.":"Registrieren Sie einen neuen Kundengutschein und speichern Sie ihn.","Edit customer coupon":"Kundengutschein bearbeiten","Modify Customer Coupon.":"Kundengutschein \u00e4ndern.","Return to Customer Coupons":"Zur\u00fcck zu Kundengutscheine","Usage":"Verwendung","Define how many time the coupon has been used.":"Legen Sie fest, wie oft der Gutschein verwendet wurde.","Limit":"Limit","Define the maximum usage possible for this coupon.":"Definieren Sie die maximal m\u00f6gliche Verwendung f\u00fcr diesen Gutschein.","Customer":"Kunde","Code":"Code","Percentage":"Prozentsatz","Flat":"Flach","Customers List":"Kundenliste","Display all customers.":"Alle Kunden anzeigen.","No customers has been registered":"Es wurden keine Kunden registriert","Add a new customer":"Neuen Kunden hinzuf\u00fcgen","Create a new customer":"Neuen Kunden anlegen","Register a new customer and save it.":"Registrieren Sie einen neuen Kunden und speichern Sie ihn.","Edit customer":"Kunde bearbeiten","Modify Customer.":"Kunde \u00e4ndern.","Return to Customers":"Zur\u00fcck zu Kunden","Customer Name":"Kundenname","Provide a unique name for the customer.":"Geben Sie einen eindeutigen Namen f\u00fcr den Kunden an.","Credit Limit":"Kreditlimit","Set what should be the limit of the purchase on credit.":"Legen Sie fest, was das Limit f\u00fcr den Kauf auf Kredit sein soll.","Group":"Gruppe","Assign the customer to a group":"Den Kunden einer Gruppe zuordnen","Birth Date":"Geburtsdatum","Displays the customer birth date":"Zeigt das Geburtsdatum des Kunden an","Email":"E-Mail","Provide the customer email.":"Geben Sie die E-Mail-Adresse des Kunden an.","Phone Number":"Telefonnummer","Provide the customer phone number":"Geben Sie die Telefonnummer des Kunden an","PO Box":"Postfach","Provide the customer PO.Box":"Geben Sie die Postfachnummer des Kunden an","Provide the customer gender.":"Geben Sie das Geschlecht des Kunden an","Not Defined":"Nicht definiert","Male":"M\u00e4nnlich","Female":"Weiblich","Gender":"Geschlecht","Billing Address":"Rechnungsadresse","Phone":"Telefon","Billing phone number.":"Telefonnummer der Rechnung.","Address 1":"Adresse 1","Billing First Address.":"Erste Rechnungsadresse.","Address 2":"Adresse 2","Billing Second Address.":"Zweite Rechnungsadresse.","Country":"Land","Billing Country.":"Rechnungsland.","City":"Stadt","PO.Box":"Postfach","Postal Address":"Postanschrift","Company":"Unternehmen","Shipping Address":"Lieferadresse","Shipping phone number.":"Telefonnummer des Versands.","Shipping First Address.":"Versand Erste Adresse.","Shipping Second Address.":"Zweite Lieferadresse.","Shipping Country.":"Lieferland.","Account Credit":"Kontoguthaben","Owed Amount":"Geschuldeter Betrag","Purchase Amount":"Kaufbetrag","Orders":"Bestellungen","Rewards":"Belohnungen","Coupons":"Gutscheine","Wallet History":"Wallet-Historie","Delete a customers":"Einen Kunden l\u00f6schen","Delete Selected Customers":"Ausgew\u00e4hlte Kunden l\u00f6schen","Customer Groups List":"Kundengruppenliste","Display all Customers Groups.":"Alle Kundengruppen anzeigen.","No Customers Groups has been registered":"Es wurden keine Kundengruppen registriert","Add a new Customers Group":"Eine neue Kundengruppe hinzuf\u00fcgen","Create a new Customers Group":"Eine neue Kundengruppe erstellen","Register a new Customers Group and save it.":"Registrieren Sie eine neue Kundengruppe und speichern Sie sie.","Edit Customers Group":"Kundengruppe bearbeiten","Modify Customers group.":"Kundengruppe \u00e4ndern.","Return to Customers Groups":"Zur\u00fcck zu Kundengruppen","Reward System":"Belohnungssystem","Select which Reward system applies to the group":"W\u00e4hlen Sie aus, welches Belohnungssystem f\u00fcr die Gruppe gilt","Minimum Credit Amount":"Mindestguthabenbetrag","A brief description about what this group is about":"Eine kurze Beschreibung, worum es in dieser Gruppe geht","Created On":"Erstellt am","Customer Orders List":"Liste der Kundenbestellungen","Display all customer orders.":"Alle Kundenauftr\u00e4ge anzeigen.","No customer orders has been registered":"Es wurden keine Kundenbestellungen registriert","Add a new customer order":"Eine neue Kundenbestellung hinzuf\u00fcgen","Create a new customer order":"Einen neuen Kundenauftrag erstellen","Register a new customer order and save it.":"Registrieren Sie einen neuen Kundenauftrag und speichern Sie ihn.","Edit customer order":"Kundenauftrag bearbeiten","Modify Customer Order.":"Kundenauftrag \u00e4ndern.","Return to Customer Orders":"Zur\u00fcck zu Kundenbestellungen","Change":"Wechselgeld","Created at":"Erstellt am","Customer Id":"Kunden-ID","Delivery Status":"Lieferstatus","Discount":"Rabatt","Discount Percentage":"Rabattprozentsatz","Discount Type":"Rabattart","Final Payment Date":"Endg\u00fcltiges Zahlungsdatum","Tax Excluded":"Ohne Steuern","Id":"ID","Tax Included":"Inklusive Steuern","Payment Status":"Zahlungsstatus","Process Status":"Prozessstatus","Shipping":"Versand","Shipping Rate":"Versandkosten","Shipping Type":"Versandart","Sub Total":"Zwischensumme","Tax Value":"Steuerwert","Tendered":"Angezahlt","Title":"Titel","Total installments":"Summe Ratenzahlungen","Updated at":"Aktualisiert am","Uuid":"Uuid","Voidance Reason":"Stornogrund","Customer Rewards List":"Kundenbelohnungsliste","Display all customer rewards.":"Alle Kundenbelohnungen anzeigen.","No customer rewards has been registered":"Es wurden keine Kundenbelohnungen registriert","Add a new customer reward":"Eine neue Kundenbelohnung hinzuf\u00fcgen","Create a new customer reward":"Eine neue Kundenbelohnung erstellen","Register a new customer reward and save it.":"Registrieren Sie eine neue Kundenbelohnung und speichern Sie sie.","Edit customer reward":"Kundenbelohnung bearbeiten","Modify Customer Reward.":"Kundenbelohnung \u00e4ndern.","Return to Customer Rewards":"Zur\u00fcck zu Kundenbelohnungen","Points":"Punkte","Target":"Target","Reward Name":"Name der Belohnung","Last Update":"Letzte Aktualisierung","Accounts List":"Kontenliste","Display All Accounts.":"Alle Konten anzeigen.","No Account has been registered":"Es wurde kein Konto registriert","Add a new Account":"Neues Konto hinzuf\u00fcgen","Create a new Account":"Neues Konto erstellen","Register a new Account and save it.":"Registrieren Sie ein neues Konto und speichern Sie es.","Edit Account":"Konto bearbeiten","Modify An Account.":"Ein Konto \u00e4ndern.","Return to Accounts":"Zur\u00fcck zu den Konten","All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.":"Alle mit dieser Kategorie verbundenen Unternehmen erstellen entweder eine \u201eGutschrift\u201c oder eine \u201eBelastung\u201c des Cashflow-Verlaufs.","Account":"Konto","Provide the accounting number for this category.":"Geben Sie die Buchungsnummer f\u00fcr diese Kategorie an.","Active":"Aktiv","Users Group":"Benutzergruppe","None":"Keine","Recurring":"Wiederkehrend","Start of Month":"Monatsbeginn","Mid of Month":"Mitte des Monats","End of Month":"Monatsende","X days Before Month Ends":"X Tage vor Monatsende","X days After Month Starts":"X Tage nach Monatsbeginn","Occurrence":"Vorkommen","Occurrence Value":"Wert des Vorkommens","Must be used in case of X days after month starts and X days before month ends.":"Muss bei X Tagen nach Monatsbeginn und X Tagen vor Monatsende verwendet werden.","Category":"Kategorie","Month Starts":"Monatliche Starts","Month Middle":"Monat Mitte","Month Ends":"Monatsende","X Days Before Month Ends":"X Tage vor Monatsende","Product Histories":"Produkthistorien","Display all product stock flow.":"Alle Produktbest\u00e4nde anzeigen.","No products stock flow has been registered":"Es wurde kein Produktbestandsfluss registriert","Add a new products stock flow":"Hinzuf\u00fcgen eines neuen Produktbestands","Create a new products stock flow":"Erstellen eines neuen Produktbestands","Register a new products stock flow and save it.":"Registrieren Sie einen neuen Produktbestandsfluss und speichern Sie ihn.","Edit products stock flow":"Produktbestandsfluss bearbeiten","Modify Globalproducthistorycrud.":"Globalproducthistorycrud \u00e4ndern.","Return to Product Histories":"Zur\u00fcck zu den Produkthistorien","Product":"Produkt","Procurement":"Beschaffung","Unit":"Einheit","Initial Quantity":"Anfangsmenge","Quantity":"Menge","New Quantity":"Neue Menge","Total Price":"Gesamtpreis","Added":"Hinzugef\u00fcgt","Defective":"Defekt","Deleted":"Gel\u00f6scht","Lost":"Verloren","Removed":"Entfernt","Sold":"Verkauft","Stocked":"Vorr\u00e4tig","Transfer Canceled":"\u00dcbertragung abgebrochen","Incoming Transfer":"Eingehende \u00dcberweisung","Outgoing Transfer":"Ausgehende \u00dcberweisung","Void Return":"R\u00fccksendung stornieren","Hold Orders List":"Aufbewahrungsauftragsliste","Display all hold orders.":"Alle Halteauftr\u00e4ge anzeigen.","No hold orders has been registered":"Es wurden keine Hold-Auftr\u00e4ge registriert","Add a new hold order":"Eine neue Hold-Order hinzuf\u00fcgen","Create a new hold order":"Eine neue Hold-Order erstellen","Register a new hold order and save it.":"Registrieren Sie einen neuen Halteauftrag und speichern Sie ihn.","Edit hold order":"Halteauftrag bearbeiten","Modify Hold Order.":"Halteauftrag \u00e4ndern.","Return to Hold Orders":"Zur\u00fcck zur Auftragssperre","Updated At":"Aktualisiert am","Continue":"Weiter","Restrict the orders by the creation date.":"Beschr\u00e4nken Sie die Bestellungen auf das Erstellungsdatum.","Paid":"Bezahlt","Hold":"Halten","Partially Paid":"Teilweise bezahlt","Partially Refunded":"Teilweise erstattet","Refunded":"R\u00fcckerstattet","Unpaid":"Unbezahlt","Voided":"Storniert","Due":"F\u00e4llig","Due With Payment":"F\u00e4llig mit Zahlung","Restrict the orders by the author.":"Beschr\u00e4nken Sie die Bestellungen des Autors.","Restrict the orders by the customer.":"Beschr\u00e4nken Sie die Bestellungen durch den Kunden.","Customer Phone":"Kunden-Telefonnummer","Restrict orders using the customer phone number.":"Beschr\u00e4nken Sie Bestellungen \u00fcber die Telefonnummer des Kunden.","Cash Register":"Registrierkasse","Restrict the orders to the cash registers.":"Beschr\u00e4nken Sie die Bestellungen auf die Kassen.","Orders List":"Bestellliste","Display all orders.":"Alle Bestellungen anzeigen.","No orders has been registered":"Es wurden keine Bestellungen registriert","Add a new order":"Neue Bestellung hinzuf\u00fcgen","Create a new order":"Neue Bestellung erstellen","Register a new order and save it.":"Registrieren Sie eine neue Bestellung und speichern Sie sie.","Edit order":"Bestellung bearbeiten","Modify Order.":"Reihenfolge \u00e4ndern.","Return to Orders":"Zur\u00fcck zu Bestellungen","Discount Rate":"Abzinsungssatz","The order and the attached products has been deleted.":"Die Bestellung und die angeh\u00e4ngten Produkte wurden gel\u00f6scht.","Options":"Optionen","Refund Receipt":"R\u00fcckerstattungsbeleg","Invoice":"Rechnung","Receipt":"Quittung","Order Instalments List":"Liste der Ratenbestellungen","Display all Order Instalments.":"Alle Auftragsraten anzeigen.","No Order Instalment has been registered":"Es wurde keine Auftragsrate registriert","Add a new Order Instalment":"Neue Bestellrate hinzuf\u00fcgen","Create a new Order Instalment":"Eine neue Bestellrate erstellen","Register a new Order Instalment and save it.":"Registrieren Sie eine neue Auftragsrate und speichern Sie sie.","Edit Order Instalment":"Bestellrate bearbeiten","Modify Order Instalment.":"Bestellrate \u00e4ndern.","Return to Order Instalment":"Zur\u00fcck zur Bestellrate","Order Id":"Bestellnummer","Payment Types List":"Liste der Zahlungsarten","Display all payment types.":"Alle Zahlungsarten anzeigen.","No payment types has been registered":"Es wurden keine Zahlungsarten registriert","Add a new payment type":"Neue Zahlungsart hinzuf\u00fcgen","Create a new payment type":"Neue Zahlungsart erstellen","Register a new payment type and save it.":"Registrieren Sie eine neue Zahlungsart und speichern Sie diese.","Edit payment type":"Zahlungsart bearbeiten","Modify Payment Type.":"Zahlungsart \u00e4ndern.","Return to Payment Types":"Zur\u00fcck zu den Zahlungsarten","Label":"Beschriftung","Provide a label to the resource.":"Geben Sie der Ressource ein Label.","Priority":"Priorit\u00e4t","Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".":"Definieren Sie die Bestellung f\u00fcr die Zahlung. Je niedriger die Zahl ist, desto zuerst wird sie im Zahlungs-Popup angezeigt. Muss bei \"0\" beginnen.","Identifier":"Identifier","A payment type having the same identifier already exists.":"Eine Zahlungsart mit der gleichen Kennung existiert bereits.","Unable to delete a read-only payments type.":"Ein schreibgesch\u00fctzter Zahlungstyp kann nicht gel\u00f6scht werden.","Readonly":"Schreibgesch\u00fctzt","Procurements List":"Beschaffungsliste","Display all procurements.":"Alle Beschaffungen anzeigen.","No procurements has been registered":"Es wurden keine Beschaffungen registriert","Add a new procurement":"Neue Beschaffung hinzuf\u00fcgen","Create a new procurement":"Neue Beschaffung erstellen","Register a new procurement and save it.":"Registrieren Sie eine neue Beschaffung und speichern Sie sie.","Edit procurement":"Beschaffung bearbeiten","Modify Procurement.":"Beschaffung \u00e4ndern.","Return to Procurements":"Zur\u00fcck zu den Beschaffungen","Provider Id":"Anbieter-ID","Status":"Status","Total Items":"Artikel insgesamt","Provider":"Anbieter","Invoice Date":"Rechnungsdatum","Sale Value":"Verkaufswert","Purchase Value":"Kaufwert","Taxes":"Steuern","Set Paid":"Bezahlt festlegen","Would you like to mark this procurement as paid?":"M\u00f6chten Sie diese Beschaffung als bezahlt markieren?","Refresh":"Aktualisieren","Would you like to refresh this ?":"M\u00f6chten Sie das aktualisieren?","Procurement Products List":"Liste der Beschaffungsprodukte","Display all procurement products.":"Alle Beschaffungsprodukte anzeigen.","No procurement products has been registered":"Es wurden keine Beschaffungsprodukte registriert","Add a new procurement product":"Neues Beschaffungsprodukt hinzuf\u00fcgen","Create a new procurement product":"Neues Beschaffungsprodukt anlegen","Register a new procurement product and save it.":"Registrieren Sie ein neues Beschaffungsprodukt und speichern Sie es.","Edit procurement product":"Beschaffungsprodukt bearbeiten","Modify Procurement Product.":"Beschaffungsprodukt \u00e4ndern.","Return to Procurement Products":"Zur\u00fcck zu den Beschaffungsprodukten","Expiration Date":"Ablaufdatum","Define what is the expiration date of the product.":"Definieren Sie das Ablaufdatum des Produkts.","Barcode":"Barcode","On":"Ein","Category Products List":"Produktkategorieliste","Display all category products.":"Alle Produkte der Kategorie anzeigen.","No category products has been registered":"Es wurden keine Produktkategorien registriert","Add a new category product":"Eine neue Produktkategorie hinzuf\u00fcgen","Create a new category product":"Erstellen Sie eine neue Produktkategorie","Register a new category product and save it.":"Registrieren Sie eine neue Produktkategorie und speichern Sie sie.","Edit category product":"Produktkategorie bearbeiten","Modify Category Product.":"Produktkategorie \u00e4ndern.","Return to Category Products":"Zur\u00fcck zur Produktkategorie","No Parent":"Nichts \u00fcbergeordnet","Preview":"Vorschau","Provide a preview url to the category.":"Geben Sie der Kategorie eine Vorschau-URL.","Displays On POS":"In Verkaufsterminal anzeigen","Parent":"\u00dcbergeordnet","If this category should be a child category of an existing category":"Wenn diese Kategorie eine untergeordnete Kategorie einer bestehenden Kategorie sein soll","Total Products":"Produkte insgesamt","Products List":"Produktliste","Display all products.":"Alle Produkte anzeigen.","No products has been registered":"Es wurden keine Produkte registriert","Add a new product":"Neues Produkt hinzuf\u00fcgen","Create a new product":"Neues Produkt erstellen","Register a new product and save it.":"Registrieren Sie ein neues Produkt und speichern Sie es.","Edit product":"Produkt bearbeiten","Modify Product.":"Produkt \u00e4ndern.","Return to Products":"Zur\u00fcck zu den Produkten","Assigned Unit":"Zugewiesene Einheit","The assigned unit for sale":"Die zugewiesene Einheit zum Verkauf","Sale Price":"Angebotspreis","Define the regular selling price.":"Definieren Sie den regul\u00e4ren Verkaufspreis.","Wholesale Price":"Gro\u00dfhandelspreis","Define the wholesale price.":"Definieren Sie den Gro\u00dfhandelspreis.","Stock Alert":"Bestandsbenachrichtigung","Define whether the stock alert should be enabled for this unit.":"Legen Sie fest, ob der Bestandsalarm f\u00fcr diese Einheit aktiviert werden soll.","Low Quantity":"Geringe Menge","Which quantity should be assumed low.":"Welche Menge soll niedrig angenommen werden.","Preview Url":"Vorschau-URL","Provide the preview of the current unit.":"Geben Sie die Vorschau der aktuellen Einheit an.","Identification":"Identifikation","Select to which category the item is assigned.":"W\u00e4hlen Sie aus, welcher Kategorie das Element zugeordnet ist.","Define the barcode value. Focus the cursor here before scanning the product.":"Definieren Sie den Barcode-Wert. Fokussieren Sie den Cursor hier, bevor Sie das Produkt scannen.","Define a unique SKU value for the product.":"Definieren Sie einen eindeutigen SKU-Wert f\u00fcr das Produkt.","SKU":"SKU","Define the barcode type scanned.":"Definieren Sie den gescannten Barcode-Typ.","EAN 8":"EAN 8","EAN 13":"EAN 13","Codabar":"Codabar","Code 128":"Code 128","Code 39":"Code 39","Code 11":"Code 11","UPC A":"UPC A","UPC E":"UPC E","Barcode Type":"Barcode-Typ","Materialized Product":"Materialisiertes Produkt","Dematerialized Product":"Dematerialisiertes Produkt","Grouped Product":"Gruppiertes Produkt","Define the product type. Applies to all variations.":"Definieren Sie den Produkttyp. Gilt f\u00fcr alle Varianten.","Product Type":"Produkttyp","On Sale":"Im Angebot","Hidden":"Versteckt","Define whether the product is available for sale.":"Definieren Sie, ob das Produkt zum Verkauf steht.","Enable the stock management on the product. Will not work for service or uncountable products.":"Aktivieren Sie die Lagerverwaltung f\u00fcr das Produkt. Funktioniert nicht f\u00fcr Service oder unz\u00e4hlige Produkte.","Stock Management Enabled":"Bestandsverwaltung aktiviert","Groups":"Gruppen","Units":"Einheiten","Accurate Tracking":"Genaue Nachverfolgung","What unit group applies to the actual item. This group will apply during the procurement.":"Welche Einheitengruppe gilt f\u00fcr die aktuelle Position? Diese Gruppe wird w\u00e4hrend der Beschaffung angewendet.","Unit Group":"Einheitengruppe","Determine the unit for sale.":"Bestimmen Sie die zu verkaufende Einheit.","Selling Unit":"Verkaufseinheit","Expiry":"Ablaufdatum","Product Expires":"Produkt l\u00e4uft ab","Set to \"No\" expiration time will be ignored.":"Auf \"Nein\" gesetzte Ablaufzeit wird ignoriert.","Prevent Sales":"Verk\u00e4ufe verhindern","Allow Sales":"Verk\u00e4ufe erlauben","Determine the action taken while a product has expired.":"Bestimmen Sie die Aktion, die durchgef\u00fchrt wird, w\u00e4hrend ein Produkt abgelaufen ist.","On Expiration":"Bei Ablauf","Choose Group":"Gruppe ausw\u00e4hlen","Select the tax group that applies to the product\/variation.":"W\u00e4hlen Sie die Steuergruppe aus, die f\u00fcr das Produkt\/die Variation gilt.","Tax Group":"Steuergruppe","Inclusive":"Inklusiv","Exclusive":"Exklusiv","Define what is the type of the tax.":"Definieren Sie die Art der Steuer.","Tax Type":"Steuerart","Images":"Bilder","Image":"Bild","Choose an image to add on the product gallery":"W\u00e4hlen Sie ein Bild aus, das in der Produktgalerie hinzugef\u00fcgt werden soll","Is Primary":"Ist prim\u00e4r","Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.":"Definieren Sie, ob das Bild prim\u00e4r sein soll. Wenn es mehr als ein prim\u00e4res Bild gibt, wird eines f\u00fcr Sie ausgew\u00e4hlt.","Sku":"SKU","Materialized":"Materialisiert","Dematerialized":"Dematerialisiert","Grouped":"Gruppiert","Disabled":"Deaktiviert","Available":"Verf\u00fcgbar","Unassigned":"Nicht zugewiesen","See Quantities":"Siehe Mengen","See History":"Verlauf ansehen","Would you like to delete selected entries ?":"M\u00f6chten Sie die ausgew\u00e4hlten Eintr\u00e4ge l\u00f6schen?","Display all product histories.":"Alle Produkthistorien anzeigen.","No product histories has been registered":"Es wurden keine Produkthistorien registriert","Add a new product history":"Neue Produkthistorie hinzuf\u00fcgen","Create a new product history":"Neue Produkthistorie erstellen","Register a new product history and save it.":"Registrieren Sie einen neuen Produktverlauf und speichern Sie ihn.","Edit product history":"Produkthistorie bearbeiten","Modify Product History.":"Produkthistorie \u00e4ndern.","After Quantity":"Nach Menge","Before Quantity":"Vor Menge","Order id":"Bestellnummer","Procurement Id":"Beschaffungs-ID","Procurement Product Id":"Beschaffung Produkt-ID","Product Id":"Produkt-ID","Unit Id":"Einheit-ID","Unit Price":"St\u00fcckpreis","P. Quantity":"P. Menge","N. Quantity":"N. Menge","Returned":"Zur\u00fcckgesendet","Transfer Rejected":"\u00dcbertragung abgelehnt","Adjustment Return":"Anpassungsr\u00fcckgabe","Adjustment Sale":"Anpassung Verkauf","Product Unit Quantities List":"Mengenliste der Produkteinheiten","Display all product unit quantities.":"Alle Produktmengen anzeigen.","No product unit quantities has been registered":"Es wurden keine Produktmengen pro Einheit registriert","Add a new product unit quantity":"Eine neue Produktmengeneinheit hinzuf\u00fcgen","Create a new product unit quantity":"Eine neue Produktmengeneinheit erstellen","Register a new product unit quantity and save it.":"Registrieren Sie eine neue Produktmengeneinheit und speichern Sie diese.","Edit product unit quantity":"Menge der Produkteinheit bearbeiten","Modify Product Unit Quantity.":"\u00c4ndern Sie die Menge der Produkteinheit.","Return to Product Unit Quantities":"Zur\u00fcck zur Produktmengeneinheit","Created_at":"Erstellt_am","Product id":"Produkt-ID","Updated_at":"Updated_at","Providers List":"Anbieterliste","Display all providers.":"Alle Anbieter anzeigen.","No providers has been registered":"Es wurden keine Anbieter registriert","Add a new provider":"Neuen Anbieter hinzuf\u00fcgen","Create a new provider":"Einen neuen Anbieter erstellen","Register a new provider and save it.":"Registrieren Sie einen neuen Anbieter und speichern Sie ihn.","Edit provider":"Anbieter bearbeiten","Modify Provider.":"Anbieter \u00e4ndern.","Return to Providers":"Zur\u00fcck zu den Anbietern","Provide the provider email. Might be used to send automated email.":"Geben Sie die E-Mail-Adresse des Anbieters an. K\u00f6nnte verwendet werden, um automatisierte E-Mails zu senden.","Contact phone number for the provider. Might be used to send automated SMS notifications.":"Kontakttelefonnummer des Anbieters. Kann verwendet werden, um automatische SMS-Benachrichtigungen zu senden.","First address of the provider.":"Erste Adresse des Anbieters.","Second address of the provider.":"Zweite Adresse des Anbieters.","Further details about the provider":"Weitere Angaben zum Anbieter","Amount Due":"F\u00e4lliger Betrag","Amount Paid":"Gezahlter Betrag","See Procurements":"Siehe Beschaffungen","See Products":"Produkte ansehen","Provider Procurements List":"Beschaffungsliste des Anbieters","Display all provider procurements.":"Alle Anbieterbeschaffungen anzeigen.","No provider procurements has been registered":"Es wurden keine Anbieterbeschaffungen registriert","Add a new provider procurement":"Eine neue Anbieterbeschaffung hinzuf\u00fcgen","Create a new provider procurement":"Eine neue Anbieterbeschaffung erstellen","Register a new provider procurement and save it.":"Registrieren Sie eine neue Anbieterbeschaffung und speichern Sie sie.","Edit provider procurement":"Anbieterbeschaffung bearbeiten","Modify Provider Procurement.":"Anbieterbeschaffung \u00e4ndern.","Return to Provider Procurements":"Zur\u00fcck zu Anbieterbeschaffungen","Delivered On":"Geliefert am","Tax":"Steuer","Delivery":"Lieferung","Payment":"Zahlung","Items":"Artikel","Provider Products List":"Anbieter Produktliste","Display all Provider Products.":"Alle Anbieterprodukte anzeigen.","No Provider Products has been registered":"Es wurden keine Anbieterprodukte registriert","Add a new Provider Product":"Neues Anbieterprodukt hinzuf\u00fcgen","Create a new Provider Product":"Neues Anbieterprodukt erstellen","Register a new Provider Product and save it.":"Registrieren Sie ein neues Anbieterprodukt und speichern Sie es.","Edit Provider Product":"Anbieterprodukt bearbeiten","Modify Provider Product.":"Anbieterprodukt \u00e4ndern.","Return to Provider Products":"Zur\u00fcck zu den Produkten des Anbieters","Purchase Price":"Kaufpreis","Display all registers.":"Alle Register anzeigen.","No registers has been registered":"Es wurden keine Register registriert","Add a new register":"Neue Kasse hinzuf\u00fcgen","Create a new register":"Neue Kasse erstellen","Register a new register and save it.":"Registrieren Sie ein neues Register und speichern Sie es.","Edit register":"Kasse bearbeiten","Modify Register.":"Register \u00e4ndern.","Return to Registers":"Zur\u00fcck zu den Kassen","Closed":"Geschlossen","Define what is the status of the register.":"Definieren Sie den Status des Registers.","Provide mode details about this cash register.":"Geben Sie Details zum Modus dieser Kasse an.","Unable to delete a register that is currently in use":"L\u00f6schen eines aktuell verwendeten Registers nicht m\u00f6glich","Used By":"Verwendet von","Balance":"Guthaben","Register History":"Registrierungsverlauf","Register History List":"Registrierungsverlaufsliste","Display all register histories.":"Alle Registerverl\u00e4ufe anzeigen.","No register histories has been registered":"Es wurden keine Registerhistorien registriert","Add a new register history":"Neue Kassenhistorie hinzuf\u00fcgen","Create a new register history":"Erstellen Sie eine neue Kassenhistorie","Register a new register history and save it.":"Registrieren Sie eine neue Registrierungshistorie und speichern Sie sie.","Edit register history":"Kassenverlauf bearbeiten","Modify Registerhistory.":"\u00c4ndern Sie die Registerhistorie.","Return to Register History":"Zur\u00fcck zum Registrierungsverlauf","Register Id":"Registrierungs-ID","Action":"Aktion","Register Name":"Registrierungsname","Initial Balance":"Anfangssaldo","New Balance":"Neues Guthaben","Transaction Type":"Transaktionstyp","Done At":"Erledigt am","Unchanged":"Unver\u00e4ndert","Reward Systems List":"Liste der Belohnungssysteme","Display all reward systems.":"Alle Belohnungssysteme anzeigen.","No reward systems has been registered":"Es wurden keine Belohnungssysteme registriert","Add a new reward system":"Neues Belohnungssystem hinzuf\u00fcgen","Create a new reward system":"Neues Belohnungssystem erstellen","Register a new reward system and save it.":"Registrieren Sie ein neues Belohnungssystem und speichern Sie es.","Edit reward system":"Pr\u00e4miensystem bearbeiten","Modify Reward System.":"\u00c4ndern des Belohnungssystems.","Return to Reward Systems":"Zur\u00fcck zu Belohnungssystemen","From":"Von","The interval start here.":"Das Intervall beginnt hier.","To":"An","The interval ends here.":"Das Intervall endet hier.","Points earned.":"Verdiente Punkte.","Coupon":"Coupon","Decide which coupon you would apply to the system.":"Entscheiden Sie, welchen Gutschein Sie auf das System anwenden m\u00f6chten.","This is the objective that the user should reach to trigger the reward.":"Dies ist das Ziel, das der Benutzer erreichen sollte, um die Belohnung auszul\u00f6sen.","A short description about this system":"Eine kurze Beschreibung zu diesem System","Would you like to delete this reward system ?":"M\u00f6chten Sie dieses Belohnungssystem l\u00f6schen?","Delete Selected Rewards":"Ausgew\u00e4hlte Belohnungen l\u00f6schen","Would you like to delete selected rewards?":"M\u00f6chten Sie die ausgew\u00e4hlten Belohnungen l\u00f6schen?","No Dashboard":"Kein Dashboard","Store Dashboard":"Shop Dashboard","Cashier Dashboard":"Kassierer-Dashboard","Default Dashboard":"Standard-Dashboard","Roles List":"Rollenliste","Display all roles.":"Alle Rollen anzeigen.","No role has been registered.":"Es wurde keine Rolle registriert.","Add a new role":"Neue Rolle hinzuf\u00fcgen","Create a new role":"Neue Rolle erstellen","Create a new role and save it.":"Erstellen Sie eine neue Rolle und speichern Sie sie.","Edit role":"Rolle bearbeiten","Modify Role.":"Rolle \u00e4ndern.","Return to Roles":"Zur\u00fcck zu den Rollen","Provide a name to the role.":"Geben Sie der Rolle einen Namen.","Should be a unique value with no spaces or special character":"Sollte ein eindeutiger Wert ohne Leerzeichen oder Sonderzeichen sein","Provide more details about what this role is about.":"Geben Sie weitere Details dar\u00fcber an, worum es bei dieser Rolle geht.","Unable to delete a system role.":"Eine Systemrolle kann nicht gel\u00f6scht werden.","Clone":"Klonen","Would you like to clone this role ?":"M\u00f6chten Sie diese Rolle klonen?","You do not have enough permissions to perform this action.":"Sie haben nicht gen\u00fcgend Berechtigungen, um diese Aktion auszuf\u00fchren.","Taxes List":"Steuerliste","Display all taxes.":"Alle Steuern anzeigen.","No taxes has been registered":"Es wurden keine Steuern registriert","Add a new tax":"Neue Steuer hinzuf\u00fcgen","Create a new tax":"Neue Steuer erstellen","Register a new tax and save it.":"Registrieren Sie eine neue Steuer und speichern Sie sie.","Edit tax":"Steuer bearbeiten","Modify Tax.":"Steuer \u00e4ndern.","Return to Taxes":"Zur\u00fcck zu Steuern","Provide a name to the tax.":"Geben Sie der Steuer einen Namen.","Assign the tax to a tax group.":"Weisen Sie die Steuer einer Steuergruppe zu.","Rate":"Rate","Define the rate value for the tax.":"Definieren Sie den Satzwert f\u00fcr die Steuer.","Provide a description to the tax.":"Geben Sie der Steuer eine Beschreibung.","Taxes Groups List":"Liste der Steuergruppen","Display all taxes groups.":"Alle Steuergruppen anzeigen.","No taxes groups has been registered":"Es wurden keine Steuergruppen registriert","Add a new tax group":"Neue Steuergruppe hinzuf\u00fcgen","Create a new tax group":"Neue Steuergruppe erstellen","Register a new tax group and save it.":"Registrieren Sie eine neue Steuergruppe und speichern Sie sie.","Edit tax group":"Steuergruppe bearbeiten","Modify Tax Group.":"Steuergruppe \u00e4ndern.","Return to Taxes Groups":"Zur\u00fcck zu den Steuergruppen","Provide a short description to the tax group.":"Geben Sie der Steuergruppe eine kurze Beschreibung.","Units List":"Einheitenliste","Display all units.":"Alle Einheiten anzeigen.","No units has been registered":"Es wurden keine Einheiten registriert","Add a new unit":"Neue Einheit hinzuf\u00fcgen","Create a new unit":"Eine neue Einheit erstellen","Register a new unit and save it.":"Registrieren Sie eine neue Einheit und speichern Sie sie.","Edit unit":"Einheit bearbeiten","Modify Unit.":"Einheit \u00e4ndern.","Return to Units":"Zur\u00fcck zu Einheiten","Preview URL":"Vorschau-URL","Preview of the unit.":"Vorschau der Einheit.","Define the value of the unit.":"Definieren Sie den Wert der Einheit.","Define to which group the unit should be assigned.":"Definieren Sie, welcher Gruppe die Einheit zugeordnet werden soll.","Base Unit":"Basiseinheit","Determine if the unit is the base unit from the group.":"Bestimmen Sie, ob die Einheit die Basiseinheit aus der Gruppe ist.","Provide a short description about the unit.":"Geben Sie eine kurze Beschreibung der Einheit an.","Unit Groups List":"Einheitengruppenliste","Display all unit groups.":"Alle Einheitengruppen anzeigen.","No unit groups has been registered":"Es wurden keine Einheitengruppen registriert","Add a new unit group":"Eine neue Einheitengruppe hinzuf\u00fcgen","Create a new unit group":"Eine neue Einheitengruppe erstellen","Register a new unit group and save it.":"Registrieren Sie eine neue Einheitengruppe und speichern Sie sie.","Edit unit group":"Einheitengruppe bearbeiten","Modify Unit Group.":"Einheitengruppe \u00e4ndern.","Return to Unit Groups":"Zur\u00fcck zu Einheitengruppen","Users List":"Benutzerliste","Display all users.":"Alle Benutzer anzeigen.","No users has been registered":"Es wurden keine Benutzer registriert","Add a new user":"Neuen Benutzer hinzuf\u00fcgen","Create a new user":"Neuen Benutzer erstellen","Register a new user and save it.":"Registrieren Sie einen neuen Benutzer und speichern Sie ihn.","Edit user":"Benutzer bearbeiten","Modify User.":"Benutzer \u00e4ndern.","Return to Users":"Zur\u00fcck zu Benutzern","Username":"Benutzername","Will be used for various purposes such as email recovery.":"Wird f\u00fcr verschiedene Zwecke wie die Wiederherstellung von E-Mails verwendet.","Password":"Passwort","Make a unique and secure password.":"Erstellen Sie ein einzigartiges und sicheres Passwort.","Confirm Password":"Passwort best\u00e4tigen","Should be the same as the password.":"Sollte mit dem Passwort identisch sein.","Define whether the user can use the application.":"Definieren Sie, ob der Benutzer die Anwendung verwenden kann.","Define what roles applies to the user":"Definieren Sie, welche Rollen f\u00fcr den Benutzer gelten","Roles":"Rollen","You cannot delete your own account.":"Sie k\u00f6nnen Ihr eigenes Konto nicht l\u00f6schen.","Not Assigned":"Nicht zugewiesen","Access Denied":"Zugriff verweigert","Incompatibility Exception":"Inkompatibilit\u00e4tsausnahme","The request method is not allowed.":"Die Anforderungsmethode ist nicht zul\u00e4ssig.","Method Not Allowed":"Methode nicht erlaubt","There is a missing dependency issue.":"Es fehlt ein Abh\u00e4ngigkeitsproblem.","Missing Dependency":"Fehlende Abh\u00e4ngigkeit","Module Version Mismatch":"Modulversion stimmt nicht \u00fcberein","The Action You Tried To Perform Is Not Allowed.":"Die Aktion, die Sie auszuf\u00fchren versucht haben, ist nicht erlaubt.","Not Allowed Action":"Nicht zul\u00e4ssige Aktion","The action you tried to perform is not allowed.":"Die Aktion, die Sie auszuf\u00fchren versucht haben, ist nicht zul\u00e4ssig.","A Database Exception Occurred.":"Eine Datenbankausnahme ist aufgetreten.","Not Enough Permissions":"Nicht gen\u00fcgend Berechtigungen","Unable to locate the assets.":"Die Assets k\u00f6nnen nicht gefunden werden.","Not Found Assets":"Nicht gefundene Assets","The resource of the page you tried to access is not available or might have been deleted.":"Die Ressource der Seite, auf die Sie zugreifen wollten, ist nicht verf\u00fcgbar oder wurde m\u00f6glicherweise gel\u00f6scht.","Not Found Exception":"Ausnahme nicht gefunden","Query Exception":"Abfrageausnahme","An error occurred while validating the form.":"Beim Validieren des Formulars ist ein Fehler aufgetreten.","An error has occurred":"Ein Fehler ist aufgetreten","Unable to proceed, the submitted form is not valid.":"Kann nicht fortfahren, das \u00fcbermittelte Formular ist ung\u00fcltig.","Unable to proceed the form is not valid":"Das Formular kann nicht fortgesetzt werden. Es ist ung\u00fcltig","This value is already in use on the database.":"Dieser Wert wird bereits in der Datenbank verwendet.","This field is required.":"Dieses Feld ist erforderlich.","This field should be checked.":"Dieses Feld sollte gepr\u00fcft werden.","This field must be a valid URL.":"Dieses Feld muss eine g\u00fcltige URL sein.","This field is not a valid email.":"Dieses Feld ist keine g\u00fcltige E-Mail-Adresse.","Provide your username.":"Geben Sie Ihren Benutzernamen ein.","Provide your password.":"Geben Sie Ihr Passwort ein.","Provide your email.":"Geben Sie Ihre E-Mail-Adresse an.","Password Confirm":"Passwort best\u00e4tigen","define the amount of the transaction.":"definieren Sie den Betrag der Transaktion.","Further observation while proceeding.":"Weitere Beobachtung w\u00e4hrend des Verfahrens.","determine what is the transaction type.":"bestimmen, was die Transaktionsart ist.","Determine the amount of the transaction.":"Bestimmen Sie den Betrag der Transaktion.","Further details about the transaction.":"Weitere Details zur Transaktion.","Installments":"Ratenzahlungen","Define the installments for the current order.":"Definieren Sie die Raten f\u00fcr den aktuellen Auftrag.","New Password":"Neues Passwort","define your new password.":"definieren Sie Ihr neues Passwort.","confirm your new password.":"best\u00e4tigen Sie Ihr neues Passwort.","Select Payment":"Zahlung ausw\u00e4hlen","choose the payment type.":"w\u00e4hlen Sie die Zahlungsart.","Define the order name.":"Definieren Sie den Auftragsnamen.","Define the date of creation of the order.":"Definieren Sie das Datum der Auftragsanlage.","Provide the procurement name.":"Geben Sie den Beschaffungsnamen an.","Describe the procurement.":"Beschreiben Sie die Beschaffung.","Define the provider.":"Definieren Sie den Anbieter.","Define what is the unit price of the product.":"Definieren Sie den St\u00fcckpreis des Produkts.","Condition":"Bedingung","Determine in which condition the product is returned.":"Bestimmen Sie, in welchem Zustand das Produkt zur\u00fcckgegeben wird.","Damaged":"Besch\u00e4digt","Unspoiled":"Unber\u00fchrt","Other Observations":"Sonstige Beobachtungen","Describe in details the condition of the returned product.":"Beschreiben Sie detailliert den Zustand des zur\u00fcckgegebenen Produkts.","Mode":"Modus","Wipe All":"Alle l\u00f6schen","Wipe Plus Grocery":"Wischen Plus Lebensmittelgesch\u00e4ft","Choose what mode applies to this demo.":"W\u00e4hlen Sie aus, welcher Modus f\u00fcr diese Demo gilt.","Set if the sales should be created.":"Legen Sie fest, ob die Verk\u00e4ufe erstellt werden sollen.","Create Procurements":"Beschaffungen erstellen","Will create procurements.":"Erstellt Beschaffungen.","Unit Group Name":"Name der Einheitengruppe","Provide a unit name to the unit.":"Geben Sie der Einheit einen Namen.","Describe the current unit.":"Beschreiben Sie die aktuelle Einheit.","assign the current unit to a group.":"ordnen Sie die aktuelle Einheit einer Gruppe zu.","define the unit value.":"definieren Sie den Einheitswert.","Provide a unit name to the units group.":"Geben Sie der Einheitengruppe einen Einheitennamen an.","Describe the current unit group.":"Beschreiben Sie die aktuelle Einheitengruppe.","POS":"Verkaufsterminal","Open POS":"Verkaufsterminal \u00f6ffnen","Create Register":"Kasse erstellen","Registers List":"Kassenliste","Instalments":"Ratenzahlungen","Procurement Name":"Beschaffungsname","Provide a name that will help to identify the procurement.":"Geben Sie einen Namen an, der zur Identifizierung der Beschaffung beitr\u00e4gt.","The profile has been successfully saved.":"Das Profil wurde erfolgreich gespeichert.","The user attribute has been saved.":"Das Benutzerattribut wurde gespeichert.","The options has been successfully updated.":"Die Optionen wurden erfolgreich aktualisiert.","Wrong password provided":"Falsches Passwort angegeben","Wrong old password provided":"Falsches altes Passwort angegeben","Password Successfully updated.":"Passwort erfolgreich aktualisiert.","Use Customer Billing":"Kundenabrechnung verwenden","Define whether the customer billing information should be used.":"Legen Sie fest, ob die Rechnungsinformationen des Kunden verwendet werden sollen.","General Shipping":"Allgemeiner Versand","Define how the shipping is calculated.":"Legen Sie fest, wie der Versand berechnet wird.","Shipping Fees":"Versandkosten","Define shipping fees.":"Versandkosten definieren.","Use Customer Shipping":"Kundenversand verwenden","Define whether the customer shipping information should be used.":"Legen Sie fest, ob die Versandinformationen des Kunden verwendet werden sollen.","Invoice Number":"Rechnungsnummer","If the procurement has been issued outside of NexoPOS, please provide a unique reference.":"Wenn die Beschaffung au\u00dferhalb von NexoPOS erfolgt ist, geben Sie bitte eine eindeutige Referenz an.","Delivery Time":"Lieferzeit","If the procurement has to be delivered at a specific time, define the moment here.":"Wenn die Beschaffung zu einem bestimmten Zeitpunkt geliefert werden muss, legen Sie hier den Zeitpunkt fest.","If you would like to define a custom invoice date.":"Wenn Sie ein benutzerdefiniertes Rechnungsdatum definieren m\u00f6chten.","Automatic Approval":"Automatische Genehmigung","Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.":"Legen Sie fest, ob die Beschaffung automatisch als genehmigt markiert werden soll, sobald die Lieferzeit eintritt.","Pending":"Ausstehend","Delivered":"Zugestellt","Determine what is the actual payment status of the procurement.":"Bestimmen Sie den tats\u00e4chlichen Zahlungsstatus der Beschaffung.","Determine what is the actual provider of the current procurement.":"Bestimmen Sie, was der eigentliche Anbieter der aktuellen Beschaffung ist.","First Name":"Vorname","Theme":"Theme","Dark":"Dunkel","Light":"Hell","Define what is the theme that applies to the dashboard.":"Definieren Sie das Thema, das auf das Dashboard zutrifft.","Avatar":"Avatar","Define the image that should be used as an avatar.":"Definieren Sie das Bild, das als Avatar verwendet werden soll.","Language":"Sprache","Choose the language for the current account.":"W\u00e4hlen Sie die Sprache f\u00fcr das aktuelle Konto.","Security":"Sicherheit","Old Password":"Altes Passwort","Provide the old password.":"Geben Sie das alte Passwort ein.","Change your password with a better stronger password.":"\u00c4ndern Sie Ihr Passwort mit einem besseren, st\u00e4rkeren Passwort.","Password Confirmation":"Passwortbest\u00e4tigung","Sign In — NexoPOS":"Anmelden — NexoPOS","Sign Up — NexoPOS":"Anmelden — NexoPOS","No activation is needed for this account.":"F\u00fcr dieses Konto ist keine Aktivierung erforderlich.","Invalid activation token.":"Ung\u00fcltiges Aktivierungstoken.","The expiration token has expired.":"Der Ablauf-Token ist abgelaufen.","Your account is not activated.":"Ihr Konto ist nicht aktiviert.","Password Lost":"Passwort vergessen","Unable to change a password for a non active user.":"Ein Passwort f\u00fcr einen nicht aktiven Benutzer kann nicht ge\u00e4ndert werden.","Unable to proceed as the token provided is invalid.":"Das angegebene Token kann nicht fortgesetzt werden, da es ung\u00fcltig ist.","The token has expired. Please request a new activation token.":"Der Token ist abgelaufen. Bitte fordern Sie ein neues Aktivierungstoken an.","Set New Password":"Neues Passwort festlegen","Database Update":"Datenbank-Update","This account is disabled.":"Dieses Konto ist deaktiviert.","Unable to find record having that username.":"Datensatz mit diesem Benutzernamen kann nicht gefunden werden.","Unable to find record having that password.":"Datensatz mit diesem Passwort kann nicht gefunden werden.","Invalid username or password.":"Ung\u00fcltiger Benutzername oder Passwort.","Unable to login, the provided account is not active.":"Anmeldung nicht m\u00f6glich, das angegebene Konto ist nicht aktiv.","You have been successfully connected.":"Sie wurden erfolgreich verbunden.","The recovery email has been send to your inbox.":"Die Wiederherstellungs-E-Mail wurde an Ihren Posteingang gesendet.","Unable to find a record matching your entry.":"Es kann kein Datensatz gefunden werden, der zu Ihrem Eintrag passt.","Your Account has been successfully created.":"Ihr Konto wurde erfolgreich erstellt.","Your Account has been created but requires email validation.":"Ihr Konto wurde erstellt, erfordert jedoch eine E-Mail-Validierung.","Unable to find the requested user.":"Der angeforderte Benutzer kann nicht gefunden werden.","Unable to submit a new password for a non active user.":"Ein neues Passwort f\u00fcr einen nicht aktiven Benutzer kann nicht \u00fcbermittelt werden.","Unable to proceed, the provided token is not valid.":"Kann nicht fortfahren, das angegebene Token ist nicht g\u00fcltig.","Unable to proceed, the token has expired.":"Kann nicht fortfahren, das Token ist abgelaufen.","Your password has been updated.":"Ihr Passwort wurde aktualisiert.","Unable to edit a register that is currently in use":"Eine aktuell verwendete Kasse kann nicht bearbeitet werden","No register has been opened by the logged user.":"Der angemeldete Benutzer hat kein Register ge\u00f6ffnet.","The register is opened.":"Das Register wird ge\u00f6ffnet.","Cash In":"Cash In","Cash Out":"Auszahlung","Closing":"Abschluss","Opening":"Er\u00f6ffnung","Sale":"Sale","Refund":"R\u00fcckerstattung","Unable to find the category using the provided identifier":"Die Kategorie kann mit der angegebenen Kennung nicht gefunden werden","The category has been deleted.":"Die Kategorie wurde gel\u00f6scht.","Unable to find the category using the provided identifier.":"Die Kategorie kann mit der angegebenen Kennung nicht gefunden werden.","Unable to find the attached category parent":"Die angeh\u00e4ngte \u00fcbergeordnete Kategorie kann nicht gefunden werden","The category has been correctly saved":"Die Kategorie wurde korrekt gespeichert","The category has been updated":"Die Kategorie wurde aktualisiert","The category products has been refreshed":"Die Kategorie Produkte wurde aktualisiert","Unable to delete an entry that no longer exists.":"Ein nicht mehr vorhandener Eintrag kann nicht gel\u00f6scht werden.","The entry has been successfully deleted.":"Der Eintrag wurde erfolgreich gel\u00f6scht.","Unhandled crud resource":"Unbehandelte Rohressource","You need to select at least one item to delete":"Sie m\u00fcssen mindestens ein Element zum L\u00f6schen ausw\u00e4hlen","You need to define which action to perform":"Sie m\u00fcssen definieren, welche Aktion ausgef\u00fchrt werden soll","%s has been processed, %s has not been processed.":"%s wurde verarbeitet, %s wurde nicht verarbeitet.","Unable to proceed. No matching CRUD resource has been found.":"Fortfahren nicht m\u00f6glich. Es wurde keine passende CRUD-Ressource gefunden.","The requested file cannot be downloaded or has already been downloaded.":"Die angeforderte Datei kann nicht heruntergeladen werden oder wurde bereits heruntergeladen.","The requested customer cannot be found.":"Der angeforderte Kunde kann kein Fonud sein.","Void":"Storno","Create Coupon":"Gutschein erstellen","helps you creating a coupon.":"hilft Ihnen beim Erstellen eines Gutscheins.","Edit Coupon":"Gutschein bearbeiten","Editing an existing coupon.":"Einen vorhandenen Gutschein bearbeiten.","Invalid Request.":"Ung\u00fcltige Anfrage.","Displays the customer account history for %s":"Zeigt den Verlauf des Kundenkontos f\u00fcr %s an","Unable to delete a group to which customers are still assigned.":"Eine Gruppe, der noch Kunden zugeordnet sind, kann nicht gel\u00f6scht werden.","The customer group has been deleted.":"Die Kundengruppe wurde gel\u00f6scht.","Unable to find the requested group.":"Die angeforderte Gruppe kann nicht gefunden werden.","The customer group has been successfully created.":"Die Kundengruppe wurde erfolgreich erstellt.","The customer group has been successfully saved.":"Die Kundengruppe wurde erfolgreich gespeichert.","Unable to transfer customers to the same account.":"Kunden k\u00f6nnen nicht auf dasselbe Konto \u00fcbertragen werden.","All the customers has been transferred to the new group %s.":"Alle Kunden wurden in die neue Gruppe %s \u00fcbertragen.","The categories has been transferred to the group %s.":"Die Kategorien wurden in die Gruppe %s \u00fcbertragen.","No customer identifier has been provided to proceed to the transfer.":"Es wurde keine Kundenkennung angegeben, um mit der \u00dcbertragung fortzufahren.","Unable to find the requested group using the provided id.":"Die angeforderte Gruppe kann mit der angegebenen ID nicht gefunden werden.","Expenses":"Aufwendungen","\"%s\" is not an instance of \"FieldsService\"":"\"%s\" ist keine Instanz von \"FieldsService\"","Manage Medias":"Medien verwalten","Modules List":"Modulliste","List all available modules.":"Listen Sie alle verf\u00fcgbaren Module auf.","Upload A Module":"Modul hochladen","Extends NexoPOS features with some new modules.":"Erweitert die NexoPOS-Funktionen um einige neue Module.","The notification has been successfully deleted":"Die Benachrichtigung wurde erfolgreich gel\u00f6scht","All the notifications have been cleared.":"Alle Meldungen wurden gel\u00f6scht.","Payment Receipt — %s":"Zahlungsbeleg — %s","Order Invoice — %s":"Rechnung — %s bestellen","Order Refund Receipt — %s":"Bestellungsr\u00fcckerstattungsbeleg — %s","Order Receipt — %s":"Bestellbeleg — %s","The printing event has been successfully dispatched.":"Der Druckvorgang wurde erfolgreich versendet.","There is a mismatch between the provided order and the order attached to the instalment.":"Es besteht eine Diskrepanz zwischen dem bereitgestellten Auftrag und dem Auftrag, der der Rate beigef\u00fcgt ist.","Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.":"Es ist nicht m\u00f6glich, eine auf Lager befindliche Beschaffung zu bearbeiten. Erw\u00e4gen Sie eine Anpassung oder l\u00f6schen Sie entweder die Beschaffung.","You cannot change the status of an already paid procurement.":"Sie k\u00f6nnen den Status einer bereits bezahlten Beschaffung nicht \u00e4ndern.","The procurement payment status has been changed successfully.":"Der Zahlungsstatus der Beschaffung wurde erfolgreich ge\u00e4ndert.","The procurement has been marked as paid.":"Die Beschaffung wurde als bezahlt markiert.","New Procurement":"Neue Beschaffung","Make a new procurement.":"Machen Sie eine neue Beschaffung.","Edit Procurement":"Beschaffung bearbeiten","Perform adjustment on existing procurement.":"Anpassung an bestehende Beschaffung durchf\u00fchren.","%s - Invoice":"%s - Rechnung","list of product procured.":"liste der beschafften Produkte.","The product price has been refreshed.":"Der Produktpreis wurde aktualisiert.","The single variation has been deleted.":"Die einzelne Variante wurde gel\u00f6scht.","Edit a product":"Produkt bearbeiten","Makes modifications to a product":"Nimmt \u00c4nderungen an einem Produkt vor","Create a product":"Erstellen Sie ein Produkt","Add a new product on the system":"Neues Produkt im System hinzuf\u00fcgen","Stock Adjustment":"Bestandsanpassung","Adjust stock of existing products.":"Passen Sie den Bestand an vorhandenen Produkten an.","No stock is provided for the requested product.":"F\u00fcr das angeforderte Produkt ist kein Lagerbestand vorgesehen.","The product unit quantity has been deleted.":"Die Menge der Produkteinheit wurde gel\u00f6scht.","Unable to proceed as the request is not valid.":"Die Anfrage kann nicht fortgesetzt werden, da sie ung\u00fcltig ist.","Unsupported action for the product %s.":"Nicht unterst\u00fctzte Aktion f\u00fcr das Produkt %s.","The stock has been adjustment successfully.":"Der Bestand wurde erfolgreich angepasst.","Unable to add the product to the cart as it has expired.":"Das Produkt kann nicht in den Warenkorb gelegt werden, da es abgelaufen ist.","Unable to add a product that has accurate tracking enabled, using an ordinary barcode.":"Es ist nicht m\u00f6glich, ein Produkt mit aktivierter genauer Verfolgung mit einem gew\u00f6hnlichen Barcode hinzuzuf\u00fcgen.","There is no products matching the current request.":"Es gibt keine Produkte, die der aktuellen Anfrage entsprechen.","Print Labels":"Etiketten drucken","Customize and print products labels.":"Anpassen und Drucken von Produktetiketten.","Procurements by \"%s\"":"Beschaffungen von \"%s\"","Sales Report":"Verkaufsbericht","Provides an overview over the sales during a specific period":"Bietet einen \u00dcberblick \u00fcber die Verk\u00e4ufe in einem bestimmten Zeitraum","Sales Progress":"Verkaufsfortschritt","Provides an overview over the best products sold during a specific period.":"Bietet einen \u00dcberblick \u00fcber die besten Produkte, die in einem bestimmten Zeitraum verkauft wurden.","Sold Stock":"Verkaufter Bestand","Provides an overview over the sold stock during a specific period.":"Bietet einen \u00dcberblick \u00fcber den verkauften Bestand w\u00e4hrend eines bestimmten Zeitraums.","Stock Report":"Bestandsbericht","Provides an overview of the products stock.":"Bietet einen \u00dcberblick \u00fcber den Produktbestand.","Profit Report":"Gewinnbericht","Provides an overview of the provide of the products sold.":"Bietet einen \u00dcberblick \u00fcber die Bereitstellung der verkauften Produkte.","Provides an overview on the activity for a specific period.":"Bietet einen \u00dcberblick \u00fcber die Aktivit\u00e4t f\u00fcr einen bestimmten Zeitraum.","Annual Report":"Gesch\u00e4ftsbericht","Sales By Payment Types":"Verk\u00e4ufe nach Zahlungsarten","Provide a report of the sales by payment types, for a specific period.":"Geben Sie einen Bericht \u00fcber die Verk\u00e4ufe nach Zahlungsarten f\u00fcr einen bestimmten Zeitraum an.","The report will be computed for the current year.":"Der Bericht wird f\u00fcr das laufende Jahr berechnet.","Unknown report to refresh.":"Unbekannter Bericht zum Aktualisieren.","Customers Statement":"Kundenauszug","Display the complete customer statement.":"Zeigen Sie die vollst\u00e4ndige Kundenerkl\u00e4rung an.","Invalid authorization code provided.":"Ung\u00fcltiger Autorisierungscode angegeben.","The database has been successfully seeded.":"Die Datenbank wurde erfolgreich gesetzt.","About":"\u00dcber uns","Details about the environment.":"Details zur Umwelt.","Core Version":"Kernversion","Laravel Version":"Laravel Version","PHP Version":"PHP-Version","Mb String Enabled":"Mb-String aktiviert","Zip Enabled":"Zip aktiviert","Curl Enabled":"Curl aktiviert","Math Enabled":"Mathematik aktiviert","XML Enabled":"XML aktiviert","XDebug Enabled":"XDebug aktiviert","File Upload Enabled":"Datei-Upload aktiviert","File Upload Size":"Datei-Upload-Gr\u00f6\u00dfe","Post Max Size":"Maximale Beitragsgr\u00f6\u00dfe","Max Execution Time":"Max. Ausf\u00fchrungszeit","Memory Limit":"Speicherlimit","Settings Page Not Found":"Einstellungsseite nicht gefunden","Customers Settings":"Kundeneinstellungen","Configure the customers settings of the application.":"Konfigurieren Sie die Kundeneinstellungen der Anwendung.","General Settings":"Allgemeine Einstellungen","Configure the general settings of the application.":"Konfigurieren Sie die allgemeinen Einstellungen der Anwendung.","Orders Settings":"Bestellungseinstellungen","POS Settings":"POS-Einstellungen","Configure the pos settings.":"Konfigurieren Sie die POS-Einstellungen.","Workers Settings":"Arbeitereinstellungen","%s is not an instance of \"%s\".":"%s ist keine Instanz von \"%s\".","Unable to find the requested product tax using the provided id":"Die angeforderte Produktsteuer kann mit der angegebenen ID nicht gefunden werden","Unable to find the requested product tax using the provided identifier.":"Die angeforderte Produktsteuer kann mit der angegebenen Kennung nicht gefunden werden.","The product tax has been created.":"Die Produktsteuer wurde erstellt.","The product tax has been updated":"Die Produktsteuer wurde aktualisiert","Unable to retrieve the requested tax group using the provided identifier \"%s\".":"Die angeforderte Steuergruppe kann mit der angegebenen Kennung \"%s\" nicht abgerufen werden.","Permission Manager":"Berechtigungs-Manager","Manage all permissions and roles":"Alle Berechtigungen und Rollen verwalten","My Profile":"Mein Profil","Change your personal settings":"Pers\u00f6nliche Einstellungen \u00e4ndern","The permissions has been updated.":"Die Berechtigungen wurden aktualisiert.","Sunday":"Sonntag","Monday":"Montag","Tuesday":"Dienstag","Wednesday":"Mittwoch","Thursday":"Donnerstag","Friday":"Freitag","Saturday":"Samstag","The migration has successfully run.":"Die Migration wurde erfolgreich ausgef\u00fchrt.","The recovery has been explicitly disabled.":"Die Wiederherstellung wurde explizit deaktiviert.","The registration has been explicitly disabled.":"Die Registrierung wurde explizit deaktiviert.","Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.":"Die Einstellungsseite kann nicht initialisiert werden. Die Kennung \"%s\" kann nicht instanziiert werden.","Unable to register. The registration is closed.":"Registrierung nicht m\u00f6glich. Die Registrierung ist geschlossen.","Hold Order Cleared":"Auftrag in Wartestellung gel\u00f6scht","Report Refreshed":"Bericht aktualisiert","The yearly report has been successfully refreshed for the year \"%s\".":"Der Jahresbericht wurde erfolgreich f\u00fcr das Jahr \"%s\" aktualisiert.","Low Stock Alert":"Warnung bei niedrigem Lagerbestand","Procurement Refreshed":"Beschaffung aktualisiert","The procurement \"%s\" has been successfully refreshed.":"Die Beschaffung \"%s\" wurde erfolgreich aktualisiert.","The transaction was deleted.":"Die Transaktion wurde gel\u00f6scht.","[NexoPOS] Activate Your Account":"[NexoPOS] Aktivieren Sie Ihr Konto","[NexoPOS] A New User Has Registered":"[NexoPOS] Ein neuer Benutzer hat sich registriert","[NexoPOS] Your Account Has Been Created":"[NexoPOS] Ihr Konto wurde erstellt","Unknown Payment":"Unbekannte Zahlung","Unable to find the permission with the namespace \"%s\".":"Die Berechtigung mit dem Namensraum \"%s\" konnte nicht gefunden werden.","Partially Due":"Teilweise f\u00e4llig","Take Away":"Take Away","The register has been successfully opened":"Die Kasse wurde erfolgreich ge\u00f6ffnet","The register has been successfully closed":"Die Kasse wurde erfolgreich geschlossen","The provided amount is not allowed. The amount should be greater than \"0\". ":"Der angegebene Betrag ist nicht zul\u00e4ssig. Der Betrag sollte gr\u00f6\u00dfer als \"0\" sein. ","The cash has successfully been stored":"Das Bargeld wurde erfolgreich eingelagert","Not enough fund to cash out.":"Nicht genug Geld zum Auszahlen.","The cash has successfully been disbursed.":"Das Bargeld wurde erfolgreich ausgezahlt.","In Use":"In Verwendung","Opened":"Ge\u00f6ffnet","Delete Selected entries":"Ausgew\u00e4hlte Eintr\u00e4ge l\u00f6schen","%s entries has been deleted":"%s Eintr\u00e4ge wurden gel\u00f6scht","%s entries has not been deleted":"%s Eintr\u00e4ge wurden nicht gel\u00f6scht","A new entry has been successfully created.":"Ein neuer Eintrag wurde erfolgreich erstellt.","The entry has been successfully updated.":"Der Eintrag wurde erfolgreich aktualisiert.","Unidentified Item":"Nicht identifizierter Artikel","Non-existent Item":"Nicht vorhandener Artikel","Unable to delete this resource as it has %s dependency with %s item.":"Diese Ressource kann nicht gel\u00f6scht werden, da sie %s -Abh\u00e4ngigkeit mit %s -Element hat.","Unable to delete this resource as it has %s dependency with %s items.":"Diese Ressource kann nicht gel\u00f6scht werden, da sie %s Abh\u00e4ngigkeit von %s Elementen hat.","Unable to find the customer using the provided id.":"Der Kunde kann mit der angegebenen ID nicht gefunden werden.","The customer has been deleted.":"Der Kunde wurde gel\u00f6scht.","The customer has been created.":"Der Kunde wurde erstellt.","Unable to find the customer using the provided ID.":"Der Kunde kann mit der angegebenen ID nicht gefunden werden.","The customer has been edited.":"Der Kunde wurde bearbeitet.","Unable to find the customer using the provided email.":"Der Kunde kann mit der angegebenen E-Mail nicht gefunden werden.","The customer account has been updated.":"Das Kundenkonto wurde aktualisiert.","Issuing Coupon Failed":"Ausgabe des Gutscheins fehlgeschlagen","Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.":"Ein Gutschein, der an die Belohnung \"%s\" angeh\u00e4ngt ist, kann nicht angewendet werden. Es sieht so aus, als ob der Gutschein nicht mehr existiert.","Unable to find a coupon with the provided code.":"Es kann kein Gutschein mit dem angegebenen Code gefunden werden.","The coupon has been updated.":"Der Gutschein wurde aktualisiert.","The group has been created.":"Die Gruppe wurde erstellt.","Crediting":"Gutschrift","Deducting":"Abzug","Order Payment":"Zahlung der Bestellung","Order Refund":"R\u00fcckerstattung der Bestellung","Unknown Operation":"Unbekannter Vorgang","Countable":"Z\u00e4hlbar","Piece":"St\u00fcck","Sales Account":"Verkaufskonto","Procurements Account":"Beschaffungskonto","Sale Refunds Account":"Verkauf R\u00fcckerstattungen Konto","Spoiled Goods Account":"Konto f\u00fcr verderbte Waren","Customer Crediting Account":"Kundengutschriftkonto","Customer Debiting Account":"Debitor Abbuchungskonto","GST":"GST","SGST":"SGST","CGST":"CGST","Sample Procurement %s":"Musterbeschaffung %s","generated":"generiert","The user attributes has been updated.":"Die Benutzerattribute wurden aktualisiert.","Administrator":"Administrator","Store Administrator":"Shop-Administrator","Store Cashier":"Filialkassierer","User":"Benutzer","%s products were freed":"%s Produkte wurden freigegeben","Restoring cash flow from paid orders...":"Cashflow aus bezahlten Bestellungen wird wiederhergestellt...","Restoring cash flow from refunded orders...":"Cashflow aus erstatteten Bestellungen wird wiederhergestellt...","Unable to find the requested account type using the provided id.":"Der angeforderte Kontotyp kann mit der angegebenen ID nicht gefunden werden.","You cannot delete an account type that has transaction bound.":"Sie k\u00f6nnen keinen Kontotyp l\u00f6schen, f\u00fcr den eine Transaktion gebunden ist.","The account type has been deleted.":"Der Kontotyp wurde gel\u00f6scht.","The account has been created.":"Das Konto wurde erstellt.","Customer Credit Account":"Kundenkreditkonto","Customer Debit Account":"Debitorisches Debitkonto","Sales Refunds Account":"Konto f\u00fcr Verkaufsr\u00fcckerstattungen","Register Cash-In Account":"Kassenkonto registrieren","Register Cash-Out Account":"Auszahlungskonto registrieren","The media has been deleted":"Das Medium wurde gel\u00f6scht","Unable to find the media.":"Das Medium kann nicht gefunden werden.","Unable to find the requested file.":"Die angeforderte Datei kann nicht gefunden werden.","Unable to find the media entry":"Medieneintrag kann nicht gefunden werden","Home":"Startseite","Payment Types":"Zahlungsarten","Medias":"Medien","Customers":"Kunden","List":"Liste","Create Customer":"Kunde erstellen","Customers Groups":"Kundengruppen","Create Group":"Kundengruppe erstellen","Reward Systems":"Belohnungssysteme","Create Reward":"Belohnung erstellen","List Coupons":"Gutscheine","Providers":"Anbieter","Create A Provider":"Anbieter erstellen","Accounting":"Buchhaltung","Accounts":"Konten","Create Account":"Konto erstellen","Inventory":"Inventar","Create Product":"Produkt erstellen","Create Category":"Kategorie erstellen","Create Unit":"Einheit erstellen","Unit Groups":"Einheitengruppen","Create Unit Groups":"Einheitengruppen erstellen","Stock Flow Records":"Bestandsflussprotokolle","Taxes Groups":"Steuergruppen","Create Tax Groups":"Steuergruppen erstellen","Create Tax":"Steuer erstellen","Modules":"Module","Upload Module":"Modul hochladen","Users":"Benutzer","Create User":"Benutzer erstellen","Create Roles":"Rollen erstellen","Permissions Manager":"Berechtigungs-Manager","Profile":"Profil","Procurements":"Beschaffung","Reports":"Berichte","Sale Report":"Verkaufsbericht","Incomes & Loosses":"Einnahmen und Verluste","Sales By Payments":"Umsatz nach Zahlungen","Settings":"Einstellungen","Invoice Settings":"Rechnungseinstellungen","Workers":"Arbeiter","Reset":"Zur\u00fccksetzen","Unable to locate the requested module.":"Das angeforderte Modul kann nicht gefunden werden.","The module \"%s\" has been disabled as the dependency \"%s\" is missing. ":"Das Modul \"%s\" wurde deaktiviert, da die Abh\u00e4ngigkeit \"%s\" fehlt. ","The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ":"Das Modul \"%s\" wurde deaktiviert, da die Abh\u00e4ngigkeit \"%s\" nicht aktiviert ist. ","The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ":"Das Modul \"%s\" wurde deaktiviert, da die Abh\u00e4ngigkeit \"%s\" nicht auf der minimal erforderlichen Version \"%s\" liegt. ","The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ":"Das Modul \"%s\" wurde deaktiviert, da die Abh\u00e4ngigkeit \"%s\" von einer Version ist, die \u00fcber die empfohlene \"%s\" hinausgeht. ","Unable to detect the folder from where to perform the installation.":"Der Ordner, von dem aus die Installation durchgef\u00fchrt werden soll, kann nicht erkannt werden.","The uploaded file is not a valid module.":"Die hochgeladene Datei ist kein g\u00fcltiges Modul.","The module has been successfully installed.":"Das Modul wurde erfolgreich installiert.","The migration run successfully.":"Die Migration wurde erfolgreich ausgef\u00fchrt.","The module has correctly been enabled.":"Das Modul wurde korrekt aktiviert.","Unable to enable the module.":"Das Modul kann nicht aktiviert werden.","The Module has been disabled.":"Das Modul wurde deaktiviert.","Unable to disable the module.":"Das Modul kann nicht deaktiviert werden.","Unable to proceed, the modules management is disabled.":"Kann nicht fortfahren, die Modulverwaltung ist deaktiviert.","A similar module has been found":"Ein \u00e4hnliches Modul wurde gefunden","Missing required parameters to create a notification":"Fehlende erforderliche Parameter zum Erstellen einer Benachrichtigung","The order has been placed.":"Die Bestellung wurde aufgegeben.","The percentage discount provided is not valid.":"Der angegebene prozentuale Rabatt ist nicht g\u00fcltig.","A discount cannot exceed the sub total value of an order.":"Ein Rabatt darf den Zwischensummenwert einer Bestellung nicht \u00fcberschreiten.","No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.":"Im Moment wird keine Zahlung erwartet. Wenn der Kunde vorzeitig zahlen m\u00f6chte, sollten Sie das Datum der Ratenzahlung anpassen.","The payment has been saved.":"Die Zahlung wurde gespeichert.","Unable to edit an order that is completely paid.":"Eine Bestellung, die vollst\u00e4ndig bezahlt wurde, kann nicht bearbeitet werden.","Unable to proceed as one of the previous submitted payment is missing from the order.":"Es kann nicht fortgefahren werden, da eine der zuvor eingereichten Zahlungen in der Bestellung fehlt.","The order payment status cannot switch to hold as a payment has already been made on that order.":"Der Zahlungsstatus der Bestellung kann nicht auf \"Halten\" ge\u00e4ndert werden, da f\u00fcr diese Bestellung bereits eine Zahlung get\u00e4tigt wurde.","Unable to proceed. One of the submitted payment type is not supported.":"Fortfahren nicht m\u00f6glich. Eine der eingereichten Zahlungsarten wird nicht unterst\u00fctzt.","Unnamed Product":"Unbenanntes Produkt","Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.":"Kann nicht fortfahren, das Produkt \"%s\" hat eine Einheit, die nicht wiederhergestellt werden kann. Es k\u00f6nnte gel\u00f6scht worden sein.","Unable to find the customer using the provided ID. The order creation has failed.":"Der Kunde kann mit der angegebenen ID nicht gefunden werden. Die Auftragserstellung ist fehlgeschlagen.","Unable to proceed a refund on an unpaid order.":"Eine R\u00fcckerstattung f\u00fcr eine unbezahlte Bestellung kann nicht durchgef\u00fchrt werden.","The current credit has been issued from a refund.":"Das aktuelle Guthaben wurde aus einer R\u00fcckerstattung ausgegeben.","The order has been successfully refunded.":"Die Bestellung wurde erfolgreich zur\u00fcckerstattet.","unable to proceed to a refund as the provided status is not supported.":"kann nicht mit einer R\u00fcckerstattung fortfahren, da der angegebene Status nicht unterst\u00fctzt wird.","The product %s has been successfully refunded.":"Das Produkt %s wurde erfolgreich zur\u00fcckerstattet.","Unable to find the order product using the provided id.":"Das Bestellprodukt kann mit der angegebenen ID nicht gefunden werden.","Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier":"Die angeforderte Bestellung kann mit \"%s\" als Pivot und \"%s\" als Kennung nicht gefunden werden","Unable to fetch the order as the provided pivot argument is not supported.":"Die Reihenfolge kann nicht abgerufen werden, da das angegebene Pivot-Argument nicht unterst\u00fctzt wird.","The product has been added to the order \"%s\"":"Das Produkt wurde der Bestellung \"%s\" hinzugef\u00fcgt","the order has been successfully computed.":"die Bestellung erfolgreich berechnet wurde.","The order has been deleted.":"Die Bestellung wurde gel\u00f6scht.","The product has been successfully deleted from the order.":"Das Produkt wurde erfolgreich aus der Bestellung gel\u00f6scht.","Unable to find the requested product on the provider order.":"Das angeforderte Produkt kann auf der Anbieterbestellung nicht gefunden werden.","Ongoing":"Fortlaufend","Ready":"Bereit","Not Available":"Nicht verf\u00fcgbar","Failed":"Fehlgeschlagen","Unpaid Orders Turned Due":"Unbezahlte f\u00e4llige Bestellungen","No orders to handle for the moment.":"Im Moment gibt es keine Befehle.","The order has been correctly voided.":"Die Bestellung wurde korrekt storniert.","Unable to edit an already paid instalment.":"Eine bereits bezahlte Rate kann nicht bearbeitet werden.","The instalment has been saved.":"Die Rate wurde gespeichert.","The instalment has been deleted.":"Die Rate wurde gel\u00f6scht.","The defined amount is not valid.":"Der definierte Betrag ist ung\u00fcltig.","No further instalments is allowed for this order. The total instalment already covers the order total.":"F\u00fcr diese Bestellung sind keine weiteren Raten zul\u00e4ssig. Die Gesamtrate deckt bereits die Gesamtsumme der Bestellung ab.","The instalment has been created.":"Die Rate wurde erstellt.","The provided status is not supported.":"Der angegebene Status wird nicht unterst\u00fctzt.","The order has been successfully updated.":"Die Bestellung wurde erfolgreich aktualisiert.","Unable to find the requested procurement using the provided identifier.":"Die angeforderte Beschaffung kann mit der angegebenen Kennung nicht gefunden werden.","Unable to find the assigned provider.":"Der zugewiesene Anbieter kann nicht gefunden werden.","The procurement has been created.":"Die Beschaffung wurde angelegt.","Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.":"Eine bereits vorr\u00e4tige Beschaffung kann nicht bearbeitet werden. Bitte ber\u00fccksichtigen Sie die Durchf\u00fchrung und Bestandsanpassung.","The provider has been edited.":"Der Anbieter wurde bearbeitet.","Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"":"Es ist nicht m\u00f6glich, eine Einheitengruppen-ID f\u00fcr das Produkt mit der Referenz \"%s\" als \"%s\" zu haben","The operation has completed.":"Der Vorgang ist abgeschlossen.","The procurement has been refreshed.":"Die Beschaffung wurde aktualisiert.","The procurement has been reset.":"Die Beschaffung wurde zur\u00fcckgesetzt.","The procurement products has been deleted.":"Die Beschaffungsprodukte wurden gel\u00f6scht.","The procurement product has been updated.":"Das Beschaffungsprodukt wurde aktualisiert.","Unable to find the procurement product using the provided id.":"Das Beschaffungsprodukt kann mit der angegebenen ID nicht gefunden werden.","The product %s has been deleted from the procurement %s":"Das Produkt %s wurde aus der Beschaffung %s gel\u00f6scht","The product with the following ID \"%s\" is not initially included on the procurement":"Das Produkt mit der folgenden ID \"%s\" ist zun\u00e4chst nicht in der Beschaffung enthalten","The procurement products has been updated.":"Die Beschaffungsprodukte wurden aktualisiert.","Procurement Automatically Stocked":"Beschaffung Automatisch best\u00fcckt","Draft":"Entwurf","The category has been created":"Die Kategorie wurde erstellt","Unable to find the product using the provided id.":"Das Produkt kann mit der angegebenen ID nicht gefunden werden.","Unable to find the requested product using the provided SKU.":"Das angeforderte Produkt kann mit der angegebenen SKU nicht gefunden werden.","The variable product has been created.":"Das variable Produkt wurde erstellt.","The provided barcode \"%s\" is already in use.":"Der angegebene Barcode \"%s\" wird bereits verwendet.","The provided SKU \"%s\" is already in use.":"Die angegebene SKU \"%s\" wird bereits verwendet.","The product has been saved.":"Das Produkt wurde gespeichert.","A grouped product cannot be saved without any sub items.":"Ein gruppiertes Produkt kann nicht ohne Unterelemente gespeichert werden.","A grouped product cannot contain grouped product.":"Ein gruppiertes Produkt darf kein gruppiertes Produkt enthalten.","The provided barcode is already in use.":"Der angegebene Barcode wird bereits verwendet.","The provided SKU is already in use.":"Die angegebene SKU wird bereits verwendet.","The product has been updated":"Das Produkt wurde aktualisiert","The subitem has been saved.":"Der Unterpunkt wurde gespeichert.","The variable product has been updated.":"Das variable Produkt wurde aktualisiert.","The product variations has been reset":"Die Produktvariationen wurden zur\u00fcckgesetzt","The product has been reset.":"Das Produkt wurde zur\u00fcckgesetzt.","The product \"%s\" has been successfully deleted":"Das Produkt \"%s\" wurde erfolgreich gel\u00f6scht","Unable to find the requested variation using the provided ID.":"Die angeforderte Variante kann mit der angegebenen ID nicht gefunden werden.","The product stock has been updated.":"Der Produktbestand wurde aktualisiert.","The action is not an allowed operation.":"Die Aktion ist keine erlaubte Operation.","The product quantity has been updated.":"Die Produktmenge wurde aktualisiert.","There is no variations to delete.":"Es gibt keine zu l\u00f6schenden Variationen.","There is no products to delete.":"Es gibt keine Produkte zu l\u00f6schen.","The product variation has been successfully created.":"Die Produktvariante wurde erfolgreich erstellt.","The product variation has been updated.":"Die Produktvariante wurde aktualisiert.","The provider has been created.":"Der Anbieter wurde erstellt.","The provider has been updated.":"Der Anbieter wurde aktualisiert.","Unable to find the provider using the specified id.":"Der Anbieter kann mit der angegebenen ID nicht gefunden werden.","The provider has been deleted.":"Der Anbieter wurde gel\u00f6scht.","Unable to find the provider using the specified identifier.":"Der Anbieter mit der angegebenen Kennung kann nicht gefunden werden.","The provider account has been updated.":"Das Anbieterkonto wurde aktualisiert.","The procurement payment has been deducted.":"Die Beschaffungszahlung wurde abgezogen.","The dashboard report has been updated.":"Der Dashboard-Bericht wurde aktualisiert.","Untracked Stock Operation":"Nicht nachverfolgter Lagerbetrieb","Unsupported action":"Nicht unterst\u00fctzte Aktion","The expense has been correctly saved.":"Der Aufwand wurde korrekt gespeichert.","The report has been computed successfully.":"Der Bericht wurde erfolgreich berechnet.","The table has been truncated.":"Die Tabelle wurde abgeschnitten.","Untitled Settings Page":"Unbenannte Einstellungsseite","No description provided for this settings page.":"F\u00fcr diese Einstellungsseite wurde keine Beschreibung angegeben.","The form has been successfully saved.":"Das Formular wurde erfolgreich gespeichert.","Unable to reach the host":"Der Gastgeber kann nicht erreicht werden","Unable to connect to the database using the credentials provided.":"Es kann keine Verbindung zur Datenbank mit den angegebenen Anmeldeinformationen hergestellt werden.","Unable to select the database.":"Die Datenbank kann nicht ausgew\u00e4hlt werden.","Access denied for this user.":"Zugriff f\u00fcr diesen Benutzer verweigert.","Incorrect Authentication Plugin Provided.":"Falsches Authentifizierungs-Plugin bereitgestellt.","The connexion with the database was successful":"Die Verbindung zur Datenbank war erfolgreich","NexoPOS has been successfully installed.":"NexoPOS wurde erfolgreich installiert.","Cash":"Barmittel","Bank Payment":"Bankzahlung","Customer Account":"Kundenkonto","Database connection was successful.":"Datenbankverbindung war erfolgreich.","A tax cannot be his own parent.":"Eine Steuer kann nicht sein eigener Elternteil sein.","The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".":"Die Steuerhierarchie ist auf 1 beschr\u00e4nkt. Bei einer Teilsteuer darf nicht die Steuerart auf \u201egruppiert\u201c gesetzt sein.","Unable to find the requested tax using the provided identifier.":"Die angeforderte Steuer kann mit der angegebenen Kennung nicht gefunden werden.","The tax group has been correctly saved.":"Die Steuergruppe wurde korrekt gespeichert.","The tax has been correctly created.":"Die Steuer wurde korrekt erstellt.","The tax has been successfully deleted.":"Die Steuer wurde erfolgreich gel\u00f6scht.","The Unit Group has been created.":"Die Einheitengruppe wurde erstellt.","The unit group %s has been updated.":"Die Einheitengruppe %s wurde aktualisiert.","Unable to find the unit group to which this unit is attached.":"Die Einheitengruppe, mit der dieses Einheit verbunden ist, kann nicht gefunden werden.","The unit has been saved.":"Die Einheit wurde gespeichert.","Unable to find the Unit using the provided id.":"Die Einheit kann mit der angegebenen ID nicht gefunden werden.","The unit has been updated.":"Die Einheit wurde aktualisiert.","The unit group %s has more than one base unit":"Die Einheitengruppe %s hat mehr als eine Basiseinheit","The unit has been deleted.":"Die Einheit wurde gel\u00f6scht.","The %s is already taken.":"Die %s ist bereits vergeben.","Clone of \"%s\"":"Klon von \"%s\"","The role has been cloned.":"Die Rolle wurde geklont.","unable to find this validation class %s.":"diese Validierungsklasse %s kann nicht gefunden werden.","Store Name":"Name","This is the store name.":"Dies ist der Name des Gesch\u00e4fts.","Store Address":"Adresse","The actual store address.":"Die tats\u00e4chliche Adresse des Stores.","Store City":"Ort","The actual store city.":"Der Ort in dem sich das Gesch\u00e4ft befindet.","Store Phone":"Telefon","The phone number to reach the store.":"Die Telefonnummer, um das Gesch\u00e4ft zu erreichen.","Store Email":"E-Mail","The actual store email. Might be used on invoice or for reports.":"Die tats\u00e4chliche Gesch\u00e4fts-E-Mail. Kann auf Rechnungen oder f\u00fcr Berichte verwendet werden.","Store PO.Box":"Postfach","The store mail box number.":"Die Postfachnummer des Gesch\u00e4fts.","Store Fax":"Fax","The store fax number.":"Die Faxnummer des Gesch\u00e4fts.","Store Additional Information":"Zus\u00e4tzliche Informationen","Store additional information.":"Zus\u00e4tzliche Informationen zum Gesch\u00e4ft.","Store Square Logo":"Quadratisches Logo","Choose what is the square logo of the store.":"W\u00e4hlen Sie das quadratische Logo des Gesch\u00e4fts.","Store Rectangle Logo":"Rechteckiges Logo","Choose what is the rectangle logo of the store.":"W\u00e4hlen Sie das rechteckige Logo des Gesch\u00e4fts.","Define the default fallback language.":"Definieren Sie die Standard-Fallback-Sprache.","Define the default theme.":"Definieren Sie das Standard-Theme.","Currency":"W\u00e4hrung","Currency Symbol":"W\u00e4hrungssymbol","This is the currency symbol.":"Dies ist das W\u00e4hrungssymbol.","Currency ISO":"W\u00e4hrung ISO","The international currency ISO format.":"Das ISO-Format f\u00fcr internationale W\u00e4hrungen.","Currency Position":"W\u00e4hrungsposition","Before the amount":"Vor dem Betrag","After the amount":"Nach dem Betrag","Define where the currency should be located.":"Definieren Sie, wo sich die W\u00e4hrung befinden soll.","Preferred Currency":"Bevorzugte W\u00e4hrung","ISO Currency":"ISO-W\u00e4hrung","Symbol":"Symbol","Determine what is the currency indicator that should be used.":"Bestimmen Sie, welches W\u00e4hrungskennzeichen verwendet werden soll.","Currency Thousand Separator":"Tausendertrennzeichen","Currency Decimal Separator":"W\u00e4hrung Dezimaltrennzeichen","Define the symbol that indicate decimal number. By default \".\" is used.":"Definieren Sie das Symbol, das die Dezimalzahl angibt. Standardm\u00e4\u00dfig wird \".\" verwendet.","Currency Precision":"W\u00e4hrungsgenauigkeit","%s numbers after the decimal":"%s Zahlen nach der Dezimalstelle","Date Format":"Datumsformat","This define how the date should be defined. The default format is \"Y-m-d\".":"Diese definieren, wie das Datum definiert werden soll. Das Standardformat ist \"Y-m-d\".","Registration":"Registrierung","Registration Open":"Registrierung offen","Determine if everyone can register.":"Bestimmen Sie, ob sich jeder registrieren kann.","Registration Role":"Registrierungsrolle","Select what is the registration role.":"W\u00e4hlen Sie die Registrierungsrolle aus.","Requires Validation":"Validierung erforderlich","Force account validation after the registration.":"Kontovalidierung nach der Registrierung erzwingen.","Allow Recovery":"Wiederherstellung zulassen","Allow any user to recover his account.":"Erlauben Sie jedem Benutzer, sein Konto wiederherzustellen.","Procurement Cash Flow Account":"Cashflow-Konto Beschaffung","Sale Cash Flow Account":"Verkauf Cashflow-Konto","Stock return for spoiled items will be attached to this account":"Die Lagerr\u00fcckgabe f\u00fcr besch\u00e4digte Artikel wird diesem Konto beigef\u00fcgt","Enable Reward":"Belohnung aktivieren","Will activate the reward system for the customers.":"Aktiviert das Belohnungssystem f\u00fcr die Kunden.","Require Valid Email":"G\u00fcltige E-Mail-Adresse erforderlich","Will for valid unique email for every customer.":"Will f\u00fcr g\u00fcltige eindeutige E-Mail f\u00fcr jeden Kunden.","Require Unique Phone":"Eindeutige Telefonnummer erforderlich","Every customer should have a unique phone number.":"Jeder Kunde sollte eine eindeutige Telefonnummer haben.","Default Customer Account":"Standardkundenkonto","Default Customer Group":"Standardkundengruppe","Select to which group each new created customers are assigned to.":"W\u00e4hlen Sie aus, welcher Gruppe jeder neu angelegte Kunde zugeordnet ist.","Enable Credit & Account":"Guthaben & Konto aktivieren","The customers will be able to make deposit or obtain credit.":"Die Kunden k\u00f6nnen Einzahlungen vornehmen oder Kredite erhalten.","Receipts":"Quittungen","Receipt Template":"Belegvorlage","Default":"Standard","Choose the template that applies to receipts":"W\u00e4hlen Sie die Vorlage, die f\u00fcr Belege gilt","Receipt Logo":"Quittungslogo","Provide a URL to the logo.":"Geben Sie eine URL zum Logo an.","Merge Products On Receipt\/Invoice":"Produkte bei Eingang\/Rechnung zusammenf\u00fchren","All similar products will be merged to avoid a paper waste for the receipt\/invoice.":"Alle \u00e4hnlichen Produkte werden zusammengef\u00fchrt, um Papierverschwendung f\u00fcr den Beleg\/die Rechnung zu vermeiden.","Receipt Footer":"Beleg-Fu\u00dfzeile","If you would like to add some disclosure at the bottom of the receipt.":"Wenn Sie am Ende des Belegs eine Offenlegung hinzuf\u00fcgen m\u00f6chten.","Column A":"Spalte A","Column B":"Spalte B","Order Code Type":"Bestellcode Typ","Determine how the system will generate code for each orders.":"Bestimmen Sie, wie das System f\u00fcr jede Bestellung Code generiert.","Sequential":"Sequentiell","Random Code":"Zufallscode","Number Sequential":"Nummer Sequentiell","Allow Unpaid Orders":"Unbezahlte Bestellungen zulassen","Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".":"Verhindert, dass unvollst\u00e4ndige Bestellungen aufgegeben werden. Wenn Gutschrift erlaubt ist, sollte diese Option auf \u201eJa\u201c gesetzt werden.","Allow Partial Orders":"Teilauftr\u00e4ge zulassen","Will prevent partially paid orders to be placed.":"Verhindert, dass teilweise bezahlte Bestellungen aufgegeben werden.","Quotation Expiration":"Angebotsablaufdatum","Quotations will get deleted after they defined they has reached.":"Angebote werden gel\u00f6scht, nachdem sie definiert wurden.","%s Days":"%s Tage","Features":"Funktionen","Show Quantity":"Menge anzeigen","Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.":"Zeigt die Mengenauswahl bei der Auswahl eines Produkts an. Andernfalls wird die Standardmenge auf 1 gesetzt.","Merge Similar Items":"\u00c4hnliche Elemente zusammenf\u00fchren","Will enforce similar products to be merged from the POS.":"Wird \u00e4hnliche Produkte erzwingen, die vom POS zusammengef\u00fchrt werden sollen.","Allow Wholesale Price":"Gro\u00dfhandelspreis zulassen","Define if the wholesale price can be selected on the POS.":"Legen Sie fest, ob der Gro\u00dfhandelspreis am POS ausgew\u00e4hlt werden kann.","Allow Decimal Quantities":"Dezimalmengen zulassen","Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.":"\u00c4ndert die numerische Tastatur, um Dezimalzahlen f\u00fcr Mengen zuzulassen. Nur f\u00fcr \"default\" numpad.","Allow Customer Creation":"Kundenerstellung zulassen","Allow customers to be created on the POS.":"Erm\u00f6glichen Sie die Erstellung von Kunden am POS.","Quick Product":"Schnelles Produkt","Allow quick product to be created from the POS.":"Erm\u00f6glicht die schnelle Erstellung von Produkten am POS.","Editable Unit Price":"Bearbeitbarer St\u00fcckpreis","Allow product unit price to be edited.":"Erlaube die Bearbeitung des Produktpreises pro Einheit.","Show Price With Tax":"Preis mit Steuer anzeigen","Will display price with tax for each products.":"Zeigt den Preis mit Steuern f\u00fcr jedes Produkt an.","Order Types":"Auftragstypen","Control the order type enabled.":"Steuern Sie die Bestellart aktiviert.","Numpad":"Numpad","Advanced":"Erweitert","Will set what is the numpad used on the POS screen.":"Legt fest, welches Nummernblock auf dem POS-Bildschirm verwendet wird.","Force Barcode Auto Focus":"Barcode-Autofokus erzwingen","Will permanently enable barcode autofocus to ease using a barcode reader.":"Aktiviert dauerhaft den Barcode-Autofokus, um die Verwendung eines Barcodelesers zu vereinfachen.","Bubble":"Blase","Ding":"Ding","Pop":"Pop","Cash Sound":"Cash Sound","Layout":"Layout","Retail Layout":"Einzelhandelslayout","Clothing Shop":"Bekleidungsgesch\u00e4ft","POS Layout":"POS-Layout","Change the layout of the POS.":"\u00c4ndern Sie das Layout des Pos.","Sale Complete Sound":"Sale Complete Sound","New Item Audio":"Neues Element Audio","The sound that plays when an item is added to the cart.":"Der Ton, der abgespielt wird, wenn ein Artikel in den Warenkorb gelegt wird.","Printing":"Drucken","Printed Document":"Gedrucktes Dokument","Choose the document used for printing aster a sale.":"W\u00e4hlen Sie das Dokument aus, das f\u00fcr den Druck von Aster A Sale verwendet wird.","Printing Enabled For":"Drucken aktiviert f\u00fcr","All Orders":"Alle Bestellungen","From Partially Paid Orders":"Von teilweise bezahlten Bestellungen","Only Paid Orders":"Nur bezahlte Bestellungen","Determine when the printing should be enabled.":"Legen Sie fest, wann der Druck aktiviert werden soll.","Printing Gateway":"Druck-Gateway","Determine what is the gateway used for printing.":"Bestimmen Sie, welches Gateway f\u00fcr den Druck verwendet wird.","Enable Cash Registers":"Registrierkassen aktivieren","Determine if the POS will support cash registers.":"Bestimmen Sie, ob der Pos Kassen unterst\u00fctzt.","Cashier Idle Counter":"Kassierer Idle Counter","5 Minutes":"5 Minuten","10 Minutes":"10 Minuten","15 Minutes":"15 Minuten","20 Minutes":"20 Minuten","30 Minutes":"30 Minuten","Selected after how many minutes the system will set the cashier as idle.":"Ausgew\u00e4hlt, nach wie vielen Minuten das System den Kassierer als Leerlauf einstellt.","Cash Disbursement":"Barauszahlung","Allow cash disbursement by the cashier.":"Barauszahlung durch den Kassierer zulassen.","Cash Registers":"Registrierkassen","Keyboard Shortcuts":"Tastenkombinationen","Cancel Order":"Bestellung stornieren","Keyboard shortcut to cancel the current order.":"Tastenkombination, um die aktuelle Bestellung abzubrechen.","Hold Order":"Auftrag halten","Keyboard shortcut to hold the current order.":"Tastenkombination, um die aktuelle Reihenfolge zu halten.","Keyboard shortcut to create a customer.":"Tastenkombination zum Erstellen eines Kunden.","Proceed Payment":"Zahlung fortsetzen","Keyboard shortcut to proceed to the payment.":"Tastenkombination, um mit der Zahlung fortzufahren.","Open Shipping":"Versand \u00f6ffnen","Keyboard shortcut to define shipping details.":"Tastenkombination zum Definieren von Versanddetails.","Open Note":"Anmerkung \u00f6ffnen","Keyboard shortcut to open the notes.":"Tastenkombination zum \u00d6ffnen der Notizen.","Order Type Selector":"Order Type Selector","Keyboard shortcut to open the order type selector.":"Tastenkombination zum \u00d6ffnen des Order Type Selector.","Toggle Fullscreen":"Vollbildmodus umschalten","Keyboard shortcut to toggle fullscreen.":"Tastenkombination zum Umschalten des Vollbildmodus.","Quick Search":"Schnellsuche","Keyboard shortcut open the quick search popup.":"Tastenkombination \u00f6ffnet das Popup f\u00fcr die Schnellsuche.","Toggle Product Merge":"Produktzusammenf\u00fchrung umschalten","Will enable or disable the product merging.":"Aktiviert oder deaktiviert die Produktzusammenf\u00fchrung.","Amount Shortcuts":"Betrag Shortcuts","VAT Type":"Umsatzsteuer-Typ","Determine the VAT type that should be used.":"Bestimmen Sie die Umsatzsteuerart, die verwendet werden soll.","Flat Rate":"Pauschale","Flexible Rate":"Flexibler Tarif","Products Vat":"Produkte MwSt.","Products & Flat Rate":"Produkte & Flatrate","Products & Flexible Rate":"Produkte & Flexibler Tarif","Define the tax group that applies to the sales.":"Definieren Sie die Steuergruppe, die f\u00fcr den Umsatz gilt.","Define how the tax is computed on sales.":"Legen Sie fest, wie die Steuer auf den Umsatz berechnet wird.","VAT Settings":"MwSt.-Einstellungen","Enable Email Reporting":"E-Mail-Berichterstattung aktivieren","Determine if the reporting should be enabled globally.":"Legen Sie fest, ob das Reporting global aktiviert werden soll.","Supplies":"Vorr\u00e4te","Public Name":"\u00d6ffentlicher Name","Define what is the user public name. If not provided, the username is used instead.":"Definieren Sie den \u00f6ffentlichen Benutzernamen. Wenn nicht angegeben, wird stattdessen der Benutzername verwendet.","Enable Workers":"Mitarbeiter aktivieren","Test":"Test","OK":"OK","Howdy, {name}":"Hallo, {name}","This field must contain a valid email address.":"Dieses Feld muss eine g\u00fcltige E-Mail-Adresse enthalten.","Okay":"Okay","Go Back":"Zur\u00fcck","Save":"Speichern","Filters":"Filter","Has Filters":"Hat Filter","{entries} entries selected":"{entries} Eintr\u00e4ge ausgew\u00e4hlt","Download":"Herunterladen","There is nothing to display...":"Es gibt nichts anzuzeigen...","Bulk Actions":"Massenaktionen","Apply":"Anwenden","displaying {perPage} on {items} items":"{perPage} von {items} Elemente","The document has been generated.":"Das Dokument wurde erstellt.","Unexpected error occurred.":"Unerwarteter Fehler aufgetreten.","Clear Selected Entries ?":"Ausgew\u00e4hlte Eintr\u00e4ge l\u00f6schen ?","Would you like to clear all selected entries ?":"M\u00f6chten Sie alle ausgew\u00e4hlten Eintr\u00e4ge l\u00f6schen ?","Would you like to perform the selected bulk action on the selected entries ?":"M\u00f6chten Sie die ausgew\u00e4hlte Massenaktion f\u00fcr die ausgew\u00e4hlten Eintr\u00e4ge ausf\u00fchren?","No selection has been made.":"Es wurde keine Auswahl getroffen.","No action has been selected.":"Es wurde keine Aktion ausgew\u00e4hlt.","N\/D":"N\/D","Range Starts":"Bereich startet","Range Ends":"Bereich endet","Sun":"So","Mon":"Mo","Tue":"Di","Wed":"Mi","Fri":"Fr","Sat":"Sa","Nothing to display":"Nichts anzuzeigen","Enter":"Eingeben","Search...":"Suche...","An unexpected error occurred.":"Ein unerwarteter Fehler ist aufgetreten.","Choose an option":"W\u00e4hlen Sie eine Option","Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".":"Die Komponente \"${action.component}\" kann nicht geladen werden. Stellen Sie sicher, dass die Komponente auf \"nsExtraComponents\" registriert ist.","Unknown Status":"Unbekannter Status","Password Forgotten ?":"Passwort vergessen ?","Sign In":"Anmelden","Register":"Registrieren","Unable to proceed the form is not valid.":"Das Formular kann nicht fortgesetzt werden.","Save Password":"Passwort speichern","Remember Your Password ?":"Passwort merken ?","Submit":"Absenden","Already registered ?":"Bereits registriert ?","Return":"Zur\u00fcck","Best Cashiers":"Beste Kassierer","No result to display.":"Kein Ergebnis zum Anzeigen.","Well.. nothing to show for the meantime.":"Nun... nichts, was ich in der Zwischenzeit zeigen k\u00f6nnte.","Best Customers":"Beste Kunden","Well.. nothing to show for the meantime":"Naja.. nichts was man in der Zwischenzeit zeigen kann","Total Sales":"Gesamtumsatz","Today":"Heute","Total Refunds":"R\u00fcckerstattungen insgesamt","Clients Registered":"Registrierte Kunden","Commissions":"Provisionen","Incomplete Orders":"Unvollst\u00e4ndige Bestellungen","Weekly Sales":"W\u00f6chentliche Verk\u00e4ufe","Week Taxes":"Steuern pro Woche","Net Income":"Nettoertrag","Week Expenses":"Wochenausgaben","Current Week":"Aktuelle Woche","Previous Week":"Vorherige Woche","Upload":"Hochladen","Enable":"Aktivieren","Disable":"Deaktivieren","Gallery":"Galerie","Confirm Your Action":"Best\u00e4tigen Sie Ihre Aktion","Medias Manager":"Medien Manager","Click Here Or Drop Your File To Upload":"Klicken Sie hier oder legen Sie Ihre Datei zum Hochladen ab","Nothing has already been uploaded":"Es wurde nocht nichts hochgeladen","File Name":"Dateiname","Uploaded At":"Hochgeladen um","Previous":"Zur\u00fcck","Next":"Weiter","Use Selected":"Ausgew\u00e4hlte verwenden","Clear All":"Alles l\u00f6schen","Would you like to clear all the notifications ?":"M\u00f6chten Sie alle Benachrichtigungen l\u00f6schen ?","Permissions":"Berechtigungen","Payment Summary":"Zahlungs\u00fcbersicht","Order Status":"Bestellstatus","Processing Status":"Bearbeitungsstatus","Refunded Products":"R\u00fcckerstattete Produkte","All Refunds":"Alle R\u00fcckerstattungen","Would you proceed ?":"W\u00fcrden Sie fortfahren ?","The processing status of the order will be changed. Please confirm your action.":"Der Bearbeitungsstatus der Bestellung wird ge\u00e4ndert. Bitte best\u00e4tigen Sie Ihre Aktion.","The delivery status of the order will be changed. Please confirm your action.":"Der Lieferstatus der Bestellung wird ge\u00e4ndert. Bitte best\u00e4tigen Sie Ihre Aktion.","Payment Method":"Zahlungsmethode","Before submitting the payment, choose the payment type used for that order.":"W\u00e4hlen Sie vor dem Absenden der Zahlung die Zahlungsart aus, die f\u00fcr diese Bestellung verwendet wird.","Submit Payment":"Zahlung einreichen","Select the payment type that must apply to the current order.":"W\u00e4hlen Sie die Zahlungsart aus, die f\u00fcr die aktuelle Bestellung gelten muss.","Payment Type":"Zahlungsart","An unexpected error has occurred":"Ein unerwarteter Fehler ist aufgetreten","The form is not valid.":"Das Formular ist ung\u00fcltig.","Update Instalment Date":"Aktualisiere Ratenzahlungstermin","Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.":"M\u00f6chten Sie diese Rate heute als f\u00e4llig markieren? Wenn Sie best\u00e4tigen, wird die Rate als bezahlt markiert.","Create":"Erstellen","Add Instalment":"Ratenzahlung hinzuf\u00fcgen","Would you like to create this instalment ?":"M\u00f6chten Sie diese Rate erstellen?","Would you like to delete this instalment ?":"M\u00f6chten Sie diese Rate l\u00f6schen?","Would you like to update that instalment ?":"M\u00f6chten Sie diese Rate aktualisieren?","Print":"Drucken","Store Details":"Store-Details","Order Code":"Bestellnummer","Cashier":"Kassierer","Billing Details":"Rechnungsdetails","Shipping Details":"Versanddetails","No payment possible for paid order.":"Keine Zahlung f\u00fcr bezahlte Bestellung m\u00f6glich.","Payment History":"Zahlungsverlauf","Unknown":"Unbekannt","Refund With Products":"R\u00fcckerstattung mit Produkten","Refund Shipping":"Versandkostenr\u00fcckerstattung","Add Product":"Produkt hinzuf\u00fcgen","Summary":"Zusammenfassung","Payment Gateway":"Zahlungs-Gateway","Screen":"Eingabe","Select the product to perform a refund.":"W\u00e4hlen Sie das Produkt aus, um eine R\u00fcckerstattung durchzuf\u00fchren.","Please select a payment gateway before proceeding.":"Bitte w\u00e4hlen Sie ein Zahlungs-Gateway, bevor Sie fortfahren.","There is nothing to refund.":"Es gibt nichts zu erstatten.","Please provide a valid payment amount.":"Bitte geben Sie einen g\u00fcltigen Zahlungsbetrag an.","The refund will be made on the current order.":"Die R\u00fcckerstattung erfolgt auf die aktuelle Bestellung.","Please select a product before proceeding.":"Bitte w\u00e4hlen Sie ein Produkt aus, bevor Sie fortfahren.","Not enough quantity to proceed.":"Nicht genug Menge, um fortzufahren.","Would you like to delete this product ?":"M\u00f6chten Sie dieses Produkt l\u00f6schen?","Order Type":"Bestellart","Cart":"Warenkorb","Comments":"Anmerkungen","No products added...":"Keine Produkte hinzugef\u00fcgt...","Price":"Preis","Tax Inclusive":"Inklusive Steuern","Pay":"Bezahlen","Apply Coupon":"Gutschein einl\u00f6sen","The product price has been updated.":"Der Produktpreis wurde aktualisiert.","The editable price feature is disabled.":"Die bearbeitbare Preisfunktion ist deaktiviert.","Unable to hold an order which payment status has been updated already.":"Es kann keine Bestellung gehalten werden, deren Zahlungsstatus bereits aktualisiert wurde.","Unable to change the price mode. This feature has been disabled.":"Der Preismodus kann nicht ge\u00e4ndert werden. Diese Funktion wurde deaktiviert.","Enable WholeSale Price":"Gro\u00dfhandelspreis aktivieren","Would you like to switch to wholesale price ?":"M\u00f6chten Sie zum Gro\u00dfhandelspreis wechseln?","Enable Normal Price":"Normalpreis aktivieren","Would you like to switch to normal price ?":"M\u00f6chten Sie zum Normalpreis wechseln?","Search for products.":"Nach Produkten suchen.","Toggle merging similar products.":"Schaltet das Zusammenf\u00fchren \u00e4hnlicher Produkte um.","Toggle auto focus.":"Autofokus umschalten.","Current Balance":"Aktuelles Guthaben","Full Payment":"Vollst\u00e4ndige Zahlung","The customer account can only be used once per order. Consider deleting the previously used payment.":"Das Kundenkonto kann nur einmal pro Bestellung verwendet werden. Erw\u00e4gen Sie, die zuvor verwendete Zahlung zu l\u00f6schen.","Not enough funds to add {amount} as a payment. Available balance {balance}.":"Nicht genug Geld, um {amount} als Zahlung hinzuzuf\u00fcgen. Verf\u00fcgbares Guthaben {balance}.","Confirm Full Payment":"Vollst\u00e4ndige Zahlung best\u00e4tigen","A full payment will be made using {paymentType} for {total}":"Eine vollst\u00e4ndige Zahlung erfolgt mit {paymentType} f\u00fcr {total}","You need to provide some products before proceeding.":"Sie m\u00fcssen einige Produkte bereitstellen, bevor Sie fortfahren k\u00f6nnen.","Unable to add the product, there is not enough stock. Remaining %s":"Das Produkt kann nicht hinzugef\u00fcgt werden, es ist nicht genug vorr\u00e4tig. Verbleibende %s","Add Images":"Bilder hinzuf\u00fcgen","Remove Image":"Bild entfernen","New Group":"Neue Gruppe","Available Quantity":"Verf\u00fcgbare Menge","Would you like to delete this group ?":"M\u00f6chten Sie diese Gruppe l\u00f6schen?","Your Attention Is Required":"Ihre Aufmerksamkeit ist erforderlich","Please select at least one unit group before you proceed.":"Bitte w\u00e4hlen Sie mindestens eine Einheitengruppe aus, bevor Sie fortfahren.","Unable to proceed, more than one product is set as featured":"Kann nicht fortfahren, mehr als ein Produkt ist als empfohlen festgelegt","Unable to proceed as one of the unit group field is invalid":"Es kann nicht fortgefahren werden, da eines der Einheitengruppenfelder ung\u00fcltig ist","Would you like to delete this variation ?":"M\u00f6chten Sie diese Variante l\u00f6schen?","Details":"Details","No result match your query.":"Kein Ergebnis stimmt mit Ihrer Anfrage \u00fcberein.","Unable to proceed, no product were provided.":"Kann nicht fortfahren, es wurde kein Produkt bereitgestellt.","Unable to proceed, one or more product has incorrect values.":"Kann nicht fortfahren, ein oder mehrere Produkte haben falsche Werte.","Unable to proceed, the procurement form is not valid.":"Kann nicht fortfahren, das Beschaffungsformular ist ung\u00fcltig.","Unable to submit, no valid submit URL were provided.":"Kann nicht gesendet werden, es wurde keine g\u00fcltige Sende-URL angegeben.","No title is provided":"Kein Titel angegeben","Search products...":"Produkte suchen...","Set Sale Price":"Verkaufspreis festlegen","Remove":"Entfernen","No product are added to this group.":"Dieser Gruppe wurde kein Produkt hinzugef\u00fcgt.","Delete Sub item":"Unterpunkt l\u00f6schen","Would you like to delete this sub item?":"M\u00f6chten Sie diesen Unterpunkt l\u00f6schen?","Unable to add a grouped product.":"Ein gruppiertes Produkt kann nicht hinzugef\u00fcgt werden.","Choose The Unit":"W\u00e4hlen Sie die Einheit","An unexpected error occurred":"Ein unerwarteter Fehler ist aufgetreten","Ok":"Ok","The product already exists on the table.":"Das Produkt liegt bereits auf dem Tisch.","The specified quantity exceed the available quantity.":"Die angegebene Menge \u00fcberschreitet die verf\u00fcgbare Menge.","Unable to proceed as the table is empty.":"Kann nicht fortfahren, da die Tabelle leer ist.","The stock adjustment is about to be made. Would you like to confirm ?":"Die Bestandsanpassung ist im Begriff, vorgenommen zu werden. M\u00f6chten Sie best\u00e4tigen ?","More Details":"Weitere Details","Useful to describe better what are the reasons that leaded to this adjustment.":"N\u00fctzlich, um besser zu beschreiben, was die Gr\u00fcnde sind, die zu dieser Anpassung gef\u00fchrt haben.","The reason has been updated.":"Der Grund wurde aktualisiert.","Would you like to remove this product from the table ?":"M\u00f6chten Sie dieses Produkt aus dem Tisch entfernen?","Search":"Suche","Search and add some products":"Suche und f\u00fcge einige Produkte hinzu","Proceed":"Fortfahren","Low Stock Report":"Bericht \u00fcber geringe Lagerbest\u00e4nde","Report Type":"Berichtstyp","Unable to proceed. Select a correct time range.":"Fortfahren nicht m\u00f6glich. W\u00e4hlen Sie einen korrekten Zeitbereich.","Unable to proceed. The current time range is not valid.":"Fortfahren nicht m\u00f6glich. Der aktuelle Zeitbereich ist nicht g\u00fcltig.","Categories Detailed":"Kategorien Detailliert","Categories Summary":"Zusammenfassung der Kategorien","Allow you to choose the report type.":"Erlauben Sie Ihnen, den Berichtstyp auszuw\u00e4hlen.","Filter User":"Benutzer filtern","All Users":"Alle Benutzer","No user was found for proceeding the filtering.":"Es wurde kein Benutzer f\u00fcr die Fortsetzung der Filterung gefunden.","Would you like to proceed ?":"M\u00f6chten Sie fortfahren ?","This form is not completely loaded.":"Dieses Formular ist nicht vollst\u00e4ndig geladen.","No rules has been provided.":"Es wurden keine Regeln festgelegt.","No valid run were provided.":"Es wurde kein g\u00fcltiger Lauf angegeben.","Unable to proceed, the form is invalid.":"Kann nicht fortfahren, das Formular ist ung\u00fcltig.","Unable to proceed, no valid submit URL is defined.":"Kann nicht fortfahren, es ist keine g\u00fcltige Absende-URL definiert.","No title Provided":"Kein Titel angegeben","Add Rule":"Regel hinzuf\u00fcgen","Save Settings":"Einstellungen speichern","Try Again":"Erneut versuchen","Updating":"Aktualisieren","Updating Modules":"Module werden aktualisiert","New Transaction":"Neue Transaktion","Close":"Schlie\u00dfen","Search Filters":"Suchfilter","Clear Filters":"Filter l\u00f6schen","Use Filters":"Filter verwenden","Would you like to delete this order":"M\u00f6chten Sie diese Bestellung l\u00f6schen","The current order will be void. This action will be recorded. Consider providing a reason for this operation":"Die aktuelle Bestellung ist ung\u00fcltig. Diese Aktion wird aufgezeichnet. Erw\u00e4gen Sie, einen Grund f\u00fcr diese Operation anzugeben","Order Options":"Bestelloptionen","Payments":"Zahlungen","Refund & Return":"R\u00fcckerstattung & R\u00fcckgabe","available":"verf\u00fcgbar","Order Refunds":"R\u00fcckerstattungen f\u00fcr Bestellungen","Input":"Eingabe","Close Register":"Kasse schlie\u00dfen","Register Options":"Registrierungsoptionen","Sales":"Vertrieb","History":"Geschichte","Unable to open this register. Only closed register can be opened.":"Diese Kasse kann nicht ge\u00f6ffnet werden. Es kann nur geschlossenes Register ge\u00f6ffnet werden.","Open The Register":"\u00d6ffnen Sie die Kasse","Exit To Orders":"Zu Bestellungen zur\u00fcckkehren","Looks like there is no registers. At least one register is required to proceed.":"Sieht aus, als g\u00e4be es keine Kassen. Zum Fortfahren ist mindestens ein Register erforderlich.","Create Cash Register":"Registrierkasse erstellen","Load Coupon":"Coupon laden","Apply A Coupon":"Gutschein einl\u00f6sen","Load":"Laden","Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.":"Geben Sie den Gutscheincode ein, der f\u00fcr den Pos gelten soll. Wenn ein Coupon f\u00fcr einen Kunden ausgestellt wird, muss dieser Kunde vorher ausgew\u00e4hlt werden.","Click here to choose a customer.":"Klicken Sie hier, um einen Kunden auszuw\u00e4hlen.","Coupon Name":"Coupon-Name","Unlimited":"Unbegrenzt","Not applicable":"Nicht zutreffend","Active Coupons":"Aktive Gutscheine","No coupons applies to the cart.":"Es gelten keine Gutscheine f\u00fcr den Warenkorb.","Cancel":"Abbrechen","The coupon is out from validity date range.":"Der Gutschein liegt au\u00dferhalb des G\u00fcltigkeitszeitraums.","The coupon has applied to the cart.":"Der Gutschein wurde auf den Warenkorb angewendet.","Unknown Type":"Unbekannter Typ","You must select a customer before applying a coupon.":"Sie m\u00fcssen einen Kunden ausw\u00e4hlen, bevor Sie einen Gutschein einl\u00f6sen k\u00f6nnen.","The coupon has been loaded.":"Der Gutschein wurde geladen.","Use":"Verwendung","No coupon available for this customer":"F\u00fcr diesen Kunden ist kein Gutschein verf\u00fcgbar","Select Customer":"Kunden ausw\u00e4hlen","Selected":"Ausgew\u00e4hlt","No customer match your query...":"Kein Kunde stimmt mit Ihrer Anfrage \u00fcberein...","Create a customer":"Einen Kunden erstellen","Save Customer":"Kunden speichern","Not Authorized":"Nicht autorisiert","Creating customers has been explicitly disabled from the settings.":"Das Erstellen von Kunden wurde in den Einstellungen explizit deaktiviert.","No Customer Selected":"Kein Kunde ausgew\u00e4hlt","In order to see a customer account, you need to select one customer.":"Um ein Kundenkonto zu sehen, m\u00fcssen Sie einen Kunden ausw\u00e4hlen.","Summary For":"Zusammenfassung f\u00fcr","Total Purchases":"K\u00e4ufe insgesamt","Wallet Amount":"Wallet-Betrag","Last Purchases":"Letzte K\u00e4ufe","No orders...":"Keine Befehle...","Transaction":"Transaktion","No History...":"Kein Verlauf...","No coupons for the selected customer...":"Keine Gutscheine f\u00fcr den ausgew\u00e4hlten Kunden...","Use Coupon":"Gutschein verwenden","No rewards available the selected customer...":"Keine Belohnungen f\u00fcr den ausgew\u00e4hlten Kunden verf\u00fcgbar...","Account Transaction":"Kontotransaktion","Removing":"Entfernen","Refunding":"R\u00fcckerstattung","Unknow":"Unbekannt","An error occurred while opening the order options":"Beim \u00d6ffnen der Bestelloptionen ist ein Fehler aufgetreten","Use Customer ?":"Kunden verwenden?","No customer is selected. Would you like to proceed with this customer ?":"Es wurde kein Kunde ausgew\u00e4hlt. M\u00f6chten Sie mit diesem Kunden fortfahren?","Change Customer ?":"Kunden \u00e4ndern?","Would you like to assign this customer to the ongoing order ?":"M\u00f6chten Sie diesen Kunden der laufenden Bestellung zuordnen?","Product Discount":"Produktrabatt","Cart Discount":"Warenkorb-Rabatt","The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.":"Die aktuelle Bestellung wird in die Warteschleife gesetzt. Sie k\u00f6nnen diese Bestellung \u00fcber die Schaltfl\u00e4che \"Ausstehende Bestellung\" zur\u00fcckziehen. Die Angabe eines Verweises darauf k\u00f6nnte Ihnen helfen, die Bestellung schneller zu identifizieren.","Confirm":"Best\u00e4tigen","Layaway Parameters":"Layaway-Parameter","Minimum Payment":"Mindestzahlung","Instalments & Payments":"Raten & Zahlungen","The final payment date must be the last within the instalments.":"Der letzte Zahlungstermin muss der letzte innerhalb der Raten sein.","There is no instalment defined. Please set how many instalments are allowed for this order":"Es ist keine Rate definiert. Bitte legen Sie fest, wie viele Raten f\u00fcr diese Bestellung zul\u00e4ssig sind","Skip Instalments":"Raten \u00fcberspringen","You must define layaway settings before proceeding.":"Sie m\u00fcssen die Layaway-Einstellungen definieren, bevor Sie fortfahren.","Please provide instalments before proceeding.":"Bitte geben Sie Raten an, bevor Sie fortfahren.","Unable to process, the form is not valid":"Das Formular kann nicht verarbeitet werden","One or more instalments has an invalid date.":"Eine oder mehrere Raten haben ein ung\u00fcltiges Datum.","One or more instalments has an invalid amount.":"Eine oder mehrere Raten haben einen ung\u00fcltigen Betrag.","One or more instalments has a date prior to the current date.":"Eine oder mehrere Raten haben ein Datum vor dem aktuellen Datum.","The payment to be made today is less than what is expected.":"Die heute zu leistende Zahlung ist geringer als erwartet.","Total instalments must be equal to the order total.":"Die Gesamtraten m\u00fcssen der Gesamtsumme der Bestellung entsprechen.","Order Note":"Anmerkung zur Bestellung","Note":"Anmerkung","More details about this order":"Weitere Details zu dieser Bestellung","Display On Receipt":"Auf Beleg anzeigen","Will display the note on the receipt":"Zeigt die Anmerkung auf dem Beleg an","Open":"Offen","Order Settings":"Bestellungseinstellungen","Define The Order Type":"Definieren Sie den Auftragstyp","No payment type has been selected on the settings. Please check your POS features and choose the supported order type":"In den Einstellungen wurde keine Zahlungsart ausgew\u00e4hlt. Bitte \u00fcberpr\u00fcfen Sie Ihre POS-Funktionen und w\u00e4hlen Sie die unterst\u00fctzte Bestellart","Read More":"Weiterlesen","Select Payment Gateway":"Zahlungsart ausw\u00e4hlen","Gateway":"Gateway","Payment List":"Zahlungsliste","List Of Payments":"Liste der Zahlungen","No Payment added.":"Keine Zahlung hinzugef\u00fcgt.","Layaway":"Layaway","On Hold":"Wartend","Nothing to display...":"Nichts anzuzeigen...","Product Price":"Produktpreis","Define Quantity":"Menge definieren","Please provide a quantity":"Bitte geben Sie eine Menge an","Product \/ Service":"Produkt \/ Dienstleistung","Unable to proceed. The form is not valid.":"Fortfahren nicht m\u00f6glich. Das Formular ist ung\u00fcltig.","Provide a unique name for the product.":"Geben Sie einen eindeutigen Namen f\u00fcr das Produkt an.","Define the product type.":"Definieren Sie den Produkttyp.","Normal":"Normal","Dynamic":"Dynamisch","In case the product is computed based on a percentage, define the rate here.":"Wenn das Produkt auf der Grundlage eines Prozentsatzes berechnet wird, definieren Sie hier den Satz.","Define what is the sale price of the item.":"Definieren Sie den Verkaufspreis des Artikels.","Set the quantity of the product.":"Legen Sie die Menge des Produkts fest.","Assign a unit to the product.":"Weisen Sie dem Produkt eine Einheit zu.","Define what is tax type of the item.":"Definieren Sie, was die Steuerart der Position ist.","Choose the tax group that should apply to the item.":"W\u00e4hlen Sie die Steuergruppe, die f\u00fcr den Artikel gelten soll.","Search Product":"Produkt suchen","There is nothing to display. Have you started the search ?":"Es gibt nichts anzuzeigen. Haben Sie mit der Suche begonnen?","Unable to add the product":"Das Produkt kann nicht hinzugef\u00fcgt werden","No result to result match the search value provided.":"Kein Ergebnis entspricht dem angegebenen Suchwert.","Shipping & Billing":"Versand & Abrechnung","Tax & Summary":"Steuer & Zusammenfassung","No tax is active":"Keine Steuer aktiv","Product Taxes":"Produktsteuern","Select Tax":"Steuer ausw\u00e4hlen","Define the tax that apply to the sale.":"Definieren Sie die Steuer, die f\u00fcr den Verkauf gilt.","Define how the tax is computed":"Definieren Sie, wie die Steuer berechnet wird","The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.":"Die f\u00fcr dieses Produkt konfigurierte Einheit fehlt oder ist nicht zugewiesen. Bitte \u00fcberpr\u00fcfen Sie die Registerkarte \"Einheit\" f\u00fcr dieses Produkt.","Define when that specific product should expire.":"Definieren Sie, wann dieses spezifische Produkt ablaufen soll.","Renders the automatically generated barcode.":"Rendert den automatisch generierten Barcode.","Adjust how tax is calculated on the item.":"Passen Sie an, wie die Steuer auf den Artikel berechnet wird.","Units & Quantities":"Einheiten & Mengen","Select":"Ausw\u00e4hlen","The customer has been loaded":"Der Kunde wurde geladen","Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.":"Der Standardkunde kann nicht ausgew\u00e4hlt werden. Sieht so aus, als ob der Kunde nicht mehr existiert. Erw\u00e4gen Sie, den Standardkunden in den Einstellungen zu \u00e4ndern.","OKAY":"OKAY","Some products has been added to the cart. Would youl ike to discard this order ?":"Einige Produkte wurden in den Warenkorb gelegt. W\u00fcrden Sie diese Bestellung gerne verwerfen?","This coupon is already added to the cart":"Dieser Gutschein wurde bereits in den Warenkorb gelegt","Unable to delete a payment attached to the order.":"Eine mit der Bestellung verbundene Zahlung kann nicht gel\u00f6scht werden.","No tax group assigned to the order":"Keine Steuergruppe dem Auftrag zugeordnet","Before saving this order, a minimum payment of {amount} is required":"Vor dem Speichern dieser Bestellung ist eine Mindestzahlung von {amount} erforderlich","Unable to proceed":"Fortfahren nicht m\u00f6glich","Layaway defined":"Layaway definiert","Initial Payment":"Erstzahlung","In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?":"Um fortzufahren, ist eine erste Zahlung in H\u00f6he von {amount} f\u00fcr die ausgew\u00e4hlte Zahlungsart \"{paymentType}\" erforderlich. M\u00f6chten Sie fortfahren ?","The request was canceled":"Die Anfrage wurde storniert","Partially paid orders are disabled.":"Teilweise bezahlte Bestellungen sind deaktiviert.","An order is currently being processed.":"Eine Bestellung wird gerade bearbeitet.","An error has occurred while computing the product.":"Beim Berechnen des Produkts ist ein Fehler aufgetreten.","The discount has been set to the cart subtotal.":"Der Rabatt wurde auf die Zwischensumme des Warenkorbs festgelegt.","An unexpected error has occurred while fecthing taxes.":"Bei der Berechnung der Steuern ist ein unerwarteter Fehler aufgetreten.","Order Deletion":"L\u00f6schen der Bestellung","The current order will be deleted as no payment has been made so far.":"Die aktuelle Bestellung wird gel\u00f6scht, da noch keine Zahlung erfolgt ist.","Void The Order":"Die Bestellung stornieren","Unable to void an unpaid order.":"Eine unbezahlte Bestellung kann nicht storniert werden.","Loading...":"Wird geladen...","Logout":"Abmelden","Unnamed Page":"Unnamed Page","No description":"Keine Beschreibung","Activate Your Account":"Aktivieren Sie Ihr Konto","The account you have created for __%s__, require an activation. In order to proceed, please click on the following link":"Das Konto, das Sie f\u00fcr __%s__ erstellt haben, erfordert eine Aktivierung. Um fortzufahren, klicken Sie bitte auf den folgenden Link","Password Recovered":"Passwort wiederhergestellt","Your password has been successfully updated on __%s__. You can now login with your new password.":"Ihr Passwort wurde am __%s__ erfolgreich aktualisiert. Sie k\u00f6nnen sich jetzt mit Ihrem neuen Passwort anmelden.","Password Recovery":"Passwort-Wiederherstellung","Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ":"Jemand hat darum gebeten, dein Passwort auf __\"%s\"__ zur\u00fcckzusetzen. Wenn Sie sich daran erinnern, dass Sie diese Anfrage gestellt haben, klicken Sie bitte auf die Schaltfl\u00e4che unten. ","Reset Password":"Passwort zur\u00fccksetzen","New User Registration":"Neue Benutzerregistrierung","Your Account Has Been Created":"Ihr Konto wurde erstellt","Login":"Anmelden","Environment Details":"Umgebungsdetails","Properties":"Eigenschaften","Extensions":"Erweiterungen","Configurations":"Konfigurationen","Learn More":"Mehr erfahren","Save Coupon":"Gutschein speichern","This field is required":"Dieses Feld ist erforderlich","The form is not valid. Please check it and try again":"Das Formular ist ung\u00fcltig. Bitte \u00fcberpr\u00fcfen Sie es und versuchen Sie es erneut","mainFieldLabel not defined":"mainFieldLabel nicht definiert","Create Customer Group":"Kundengruppe erstellen","Save a new customer group":"Eine neue Kundengruppe speichern","Update Group":"Gruppe aktualisieren","Modify an existing customer group":"\u00c4ndern einer bestehenden Kundengruppe","Managing Customers Groups":"Verwalten von Kundengruppen","Create groups to assign customers":"Erstellen Sie Gruppen, um Kunden zuzuweisen","Managing Customers":"Verwalten von Kunden","List of registered customers":"Liste der registrierten Kunden","Log out":"Abmelden","Your Module":"Ihr Modul","Choose the zip file you would like to upload":"W\u00e4hlen Sie die ZIP-Datei, die Sie hochladen m\u00f6chten","Managing Orders":"Bestellungen verwalten","Manage all registered orders.":"Verwalten Sie alle registrierten Bestellungen.","Payment receipt":"Zahlungsbeleg","Hide Dashboard":"Dashboard ausblenden","Receipt — %s":"Beleg — %s","Order receipt":"Auftragseingang","Refund receipt":"R\u00fcckerstattungsbeleg","Current Payment":"Aktuelle Zahlung","Total Paid":"Bezahlte Gesamtsumme","Unable to proceed no products has been provided.":"Es konnten keine Produkte bereitgestellt werden.","Unable to proceed, one or more products is not valid.":"Kann nicht fortfahren, ein oder mehrere Produkte sind ung\u00fcltig.","Unable to proceed the procurement form is not valid.":"Das Beschaffungsformular kann nicht fortgesetzt werden.","Unable to proceed, no submit url has been provided.":"Kann nicht fortfahren, es wurde keine \u00dcbermittlungs-URL angegeben.","SKU, Barcode, Product name.":"SKU, Barcode, Produktname.","First Address":"Erste Adresse","Second Address":"Zweite Adresse","Address":"Adresse","Search Products...":"Produkte suchen...","Included Products":"Enthaltene Produkte","Apply Settings":"Einstellungen anwenden","Basic Settings":"Grundeinstellungen","Visibility Settings":"Sichtbarkeitseinstellungen","Unable to load the report as the timezone is not set on the settings.":"Der Bericht kann nicht geladen werden, da die Zeitzone in den Einstellungen nicht festgelegt ist.","Year":"Jahr","Recompute":"Neuberechnung","Income":"Einkommen","January":"J\u00e4nner","March":"M\u00e4rz","April":"April","May":"Mai","June":"Juni","July":"Juli","August":"August","September":"September","October":"Oktober","November":"November","December":"Dezember","Sort Results":"Ergebnisse sortieren nach ...","Using Quantity Ascending":"Menge aufsteigend","Using Quantity Descending":"Menge absteigend","Using Sales Ascending":"Verk\u00e4ufe aufsteigend","Using Sales Descending":"Verk\u00e4ufe absteigend","Using Name Ascending":"Name aufsteigend","Using Name Descending":"Name absteigend","Progress":"Fortschritt","No results to show.":"Keine Ergebnisse zum Anzeigen.","Start by choosing a range and loading the report.":"Beginnen Sie mit der Auswahl eines Bereichs und dem Laden des Berichts.","Search Customer...":"Kunden suchen...","Due Amount":"F\u00e4lliger Betrag","Wallet Balance":"Wallet-Guthaben","Total Orders":"Gesamtbestellungen","There is no product to display...":"Es gibt kein Produkt zum Anzeigen...","Profit":"Gewinn","Sales Discounts":"Verkaufsrabatte","Sales Taxes":"Umsatzsteuern","Discounts":"Rabatte","Reward System Name":"Name des Belohnungssystems","Your system is running in production mode. You probably need to build the assets":"Ihr System wird im Produktionsmodus ausgef\u00fchrt. Sie m\u00fcssen wahrscheinlich die Assets erstellen","Your system is in development mode. Make sure to build the assets.":"Ihr System befindet sich im Entwicklungsmodus. Stellen Sie sicher, dass Sie die Assets bauen.","How to change database configuration":"So \u00e4ndern Sie die Datenbankkonfiguration","Setup":"Setup","Common Database Issues":"H\u00e4ufige Datenbankprobleme","Documentation":"Dokumentation","Sign Up":"Registrieren","X Days After Month Starts":"X Days After Month Starts","On Specific Day":"On Specific Day","Unknown Occurance":"Unknown Occurance","Done":"Done","Would you like to delete \"%s\"?":"Would you like to delete \"%s\"?","Unable to find a module having as namespace \"%s\"":"Unable to find a module having as namespace \"%s\"","Api File":"Api File","Migrations":"Migrations","Determine Until When the coupon is valid.":"Determine Until When the coupon is valid.","Customer Groups":"Customer Groups","Assigned To Customer Group":"Assigned To Customer Group","Only the customers who belongs to the selected groups will be able to use the coupon.":"Only the customers who belongs to the selected groups will be able to use the coupon.","Assigned To Customers":"Assigned To Customers","Only the customers selected will be ale to use the coupon.":"Only the customers selected will be ale to use the coupon.","Unable to save the coupon as one of the selected customer no longer exists.":"Unable to save the coupon as one of the selected customer no longer exists.","Unable to save the coupon as one of the selected customer group no longer exists.":"Unable to save the coupon as one of the selected customer group no longer exists.","Unable to save the coupon as one of the customers provided no longer exists.":"Unable to save the coupon as one of the customers provided no longer exists.","Unable to save the coupon as one of the provided customer group no longer exists.":"Unable to save the coupon as one of the provided customer group no longer exists.","Coupon Order Histories List":"Coupon Order Histories List","Display all coupon order histories.":"Display all coupon order histories.","No coupon order histories has been registered":"No coupon order histories has been registered","Add a new coupon order history":"Add a new coupon order history","Create a new coupon order history":"Create a new coupon order history","Register a new coupon order history and save it.":"Register a new coupon order history and save it.","Edit coupon order history":"Edit coupon order history","Modify Coupon Order History.":"Modify Coupon Order History.","Return to Coupon Order Histories":"Return to Coupon Order Histories","Customer_coupon_id":"Customer_coupon_id","Order_id":"Order_id","Discount_value":"Discount_value","Minimum_cart_value":"Minimum_cart_value","Maximum_cart_value":"Maximum_cart_value","Limit_usage":"Limit_usage","Would you like to delete this?":"Would you like to delete this?","Usage History":"Usage History","Customer Coupon Histories List":"Customer Coupon Histories List","Display all customer coupon histories.":"Display all customer coupon histories.","No customer coupon histories has been registered":"No customer coupon histories has been registered","Add a new customer coupon history":"Add a new customer coupon history","Create a new customer coupon history":"Create a new customer coupon history","Register a new customer coupon history and save it.":"Register a new customer coupon history and save it.","Edit customer coupon history":"Edit customer coupon history","Modify Customer Coupon History.":"Modify Customer Coupon History.","Return to Customer Coupon Histories":"Return to Customer Coupon Histories","Last Name":"Last Name","Provide the customer last name":"Provide the customer last name","Provide the billing first name.":"Provide the billing first name.","Provide the billing last name.":"Provide the billing last name.","Provide the shipping First Name.":"Provide the shipping First Name.","Provide the shipping Last Name.":"Provide the shipping Last Name.","Scheduled":"Scheduled","Set the scheduled date.":"Set the scheduled date.","Account Name":"Account Name","Provider last name if necessary.":"Provider last name if necessary.","Provide the user first name.":"Provide the user first name.","Provide the user last name.":"Provide the user last name.","Set the user gender.":"Set the user gender.","Set the user phone number.":"Set the user phone number.","Set the user PO Box.":"Set the user PO Box.","Provide the billing First Name.":"Provide the billing First Name.","Last name":"Last name","Group Name":"Group Name","Delete a user":"Delete a user","Activated":"Activated","type":"type","User Group":"User Group","Scheduled On":"Scheduled On","Biling":"Biling","API Token":"API Token","Unable to export if there is nothing to export.":"Unable to export if there is nothing to export.","%s Coupons":"%s Coupons","%s Coupon History":"%s Coupon History","\"%s\" Record History":"\"%s\" Record History","The media name was successfully updated.":"The media name was successfully updated.","The role was successfully assigned.":"The role was successfully assigned.","The role were successfully assigned.":"The role were successfully assigned.","Unable to identifier the provided role.":"Unable to identifier the provided role.","Good Condition":"Good Condition","Cron Disabled":"Cron Disabled","Task Scheduling Disabled":"Task Scheduling Disabled","NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.":"NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.","The email \"%s\" is already used for another customer.":"The email \"%s\" is already used for another customer.","The provided coupon cannot be loaded for that customer.":"The provided coupon cannot be loaded for that customer.","The provided coupon cannot be loaded for the group assigned to the selected customer.":"The provided coupon cannot be loaded for the group assigned to the selected customer.","Unable to use the coupon %s as it has expired.":"Unable to use the coupon %s as it has expired.","Unable to use the coupon %s at this moment.":"Unable to use the coupon %s at this moment.","Small Box":"Small Box","Box":"Box","%s on %s directories were deleted.":"%s on %s directories were deleted.","%s on %s files were deleted.":"%s on %s files were deleted.","First Day Of Month":"First Day Of Month","Last Day Of Month":"Last Day Of Month","Month middle Of Month":"Month middle Of Month","{day} after month starts":"{day} after month starts","{day} before month ends":"{day} before month ends","Every {day} of the month":"Every {day} of the month","Days":"Days","Make sure set a day that is likely to be executed":"Make sure set a day that is likely to be executed","Invalid Module provided.":"Invalid Module provided.","The module was \"%s\" was successfully installed.":"The module was \"%s\" was successfully installed.","The modules \"%s\" was deleted successfully.":"The modules \"%s\" was deleted successfully.","Unable to locate a module having as identifier \"%s\".":"Unable to locate a module having as identifier \"%s\".","All migration were executed.":"All migration were executed.","Unknown Product Status":"Unknown Product Status","Member Since":"Member Since","Total Customers":"Total Customers","The widgets was successfully updated.":"The widgets was successfully updated.","The token was successfully created":"The token was successfully created","The token has been successfully deleted.":"The token has been successfully deleted.","Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".":"Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".","Will display all cashiers who performs well.":"Will display all cashiers who performs well.","Will display all customers with the highest purchases.":"Will display all customers with the highest purchases.","Expense Card Widget":"Expense Card Widget","Will display a card of current and overwall expenses.":"Will display a card of current and overwall expenses.","Incomplete Sale Card Widget":"Incomplete Sale Card Widget","Will display a card of current and overall incomplete sales.":"Will display a card of current and overall incomplete sales.","Orders Chart":"Orders Chart","Will display a chart of weekly sales.":"Will display a chart of weekly sales.","Orders Summary":"Orders Summary","Will display a summary of recent sales.":"Will display a summary of recent sales.","Will display a profile widget with user stats.":"Will display a profile widget with user stats.","Sale Card Widget":"Sale Card Widget","Will display current and overall sales.":"Will display current and overall sales.","Return To Calendar":"Return To Calendar","Thr":"Thr","The left range will be invalid.":"The left range will be invalid.","The right range will be invalid.":"The right range will be invalid.","Click here to add widgets":"Click here to add widgets","Choose Widget":"Choose Widget","Select with widget you want to add to the column.":"Select with widget you want to add to the column.","Unamed Tab":"Unamed Tab","An error unexpected occured while printing.":"An error unexpected occured while printing.","and":"and","{date} ago":"{date} ago","In {date}":"In {date}","An unexpected error occured.":"An unexpected error occured.","Warning":"Warning","Change Type":"Change Type","Save Expense":"Save Expense","No configuration were choosen. Unable to proceed.":"No configuration were choosen. Unable to proceed.","Conditions":"Conditions","By proceeding the current for and all your entries will be cleared. Would you like to proceed?":"By proceeding the current for and all your entries will be cleared. Would you like to proceed?","No modules matches your search term.":"No modules matches your search term.","Press \"\/\" to search modules":"Press \"\/\" to search modules","No module has been uploaded yet.":"No module has been uploaded yet.","{module}":"{module}","Would you like to delete \"{module}\"? All data created by the module might also be deleted.":"Would you like to delete \"{module}\"? All data created by the module might also be deleted.","Search Medias":"Search Medias","Bulk Select":"Bulk Select","Press "\/" to search permissions":"Press "\/" to search permissions","SKU, Barcode, Name":"SKU, Barcode, Name","About Token":"About Token","Save Token":"Save Token","Generated Tokens":"Generated Tokens","Created":"Created","Last Use":"Last Use","Never":"Never","Expires":"Expires","Revoke":"Revoke","Token Name":"Token Name","This will be used to identifier the token.":"This will be used to identifier the token.","Unable to proceed, the form is not valid.":"Unable to proceed, the form is not valid.","An unexpected error occured":"An unexpected error occured","An Error Has Occured":"An Error Has Occured","Febuary":"Febuary","Configure":"Configure","This QR code is provided to ease authentication on external applications.":"This QR code is provided to ease authentication on external applications.","Copy And Close":"Copy And Close","An error has occured":"An error has occured","Recents Orders":"Recents Orders","Unamed Page":"Unamed Page","Assignation":"Assignation","Incoming Conversion":"Incoming Conversion","Outgoing Conversion":"Outgoing Conversion","Unknown Action":"Unknown Action","Direct Transaction":"Direct Transaction","Recurring Transaction":"Recurring Transaction","Entity Transaction":"Entity Transaction","Scheduled Transaction":"Scheduled Transaction","Unknown Type (%s)":"Unknown Type (%s)","What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.":"What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.","What is the full model name. eg: App\\Models\\Order ? [Q] to quit.":"What is the full model name. eg: App\\Models\\Order ? [Q] to quit.","What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.":"What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.","Unsupported argument provided: \"%s\"":"Unsupported argument provided: \"%s\"","The authorization token can\\'t be changed manually.":"The authorization token can\\'t be changed manually.","Translation process is complete for the module %s !":"Translation process is complete for the module %s !","%s migration(s) has been deleted.":"%s migration(s) has been deleted.","The command has been created for the module \"%s\"!":"The command has been created for the module \"%s\"!","The controller has been created for the module \"%s\"!":"The controller has been created for the module \"%s\"!","The event has been created at the following path \"%s\"!":"The event has been created at the following path \"%s\"!","The listener has been created on the path \"%s\"!":"The listener has been created on the path \"%s\"!","A request with the same name has been found !":"A request with the same name has been found !","Unable to find a module having the identifier \"%s\".":"Unable to find a module having the identifier \"%s\".","Unsupported reset mode.":"Unsupported reset mode.","You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.":"You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.","Unable to find a module having \"%s\" as namespace.":"Unable to find a module having \"%s\" as namespace.","A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.":"A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.","A new form class was created at the path \"%s\"":"A new form class was created at the path \"%s\"","Unable to proceed, looks like the database can\\'t be used.":"Unable to proceed, looks like the database can\\'t be used.","In which language would you like to install NexoPOS ?":"In which language would you like to install NexoPOS ?","You must define the language of installation.":"You must define the language of installation.","The value above which the current coupon can\\'t apply.":"The value above which the current coupon can\\'t apply.","Unable to save the coupon product as this product doens\\'t exists.":"Unable to save the coupon product as this product doens\\'t exists.","Unable to save the coupon category as this category doens\\'t exists.":"Unable to save the coupon category as this category doens\\'t exists.","Unable to save the coupon as this category doens\\'t exists.":"Unable to save the coupon as this category doens\\'t exists.","You\\re not allowed to do that.":"You\\re not allowed to do that.","Crediting (Add)":"Crediting (Add)","Refund (Add)":"Refund (Add)","Deducting (Remove)":"Deducting (Remove)","Payment (Remove)":"Payment (Remove)","The assigned default customer group doesn\\'t exist or is not defined.":"The assigned default customer group doesn\\'t exist or is not defined.","Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0":"Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0","You\\'re not allowed to do this operation":"You\\'re not allowed to do this operation","If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.":"If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.","Convert Unit":"Convert Unit","The unit that is selected for convertion by default.":"The unit that is selected for convertion by default.","COGS":"COGS","Used to define the Cost of Goods Sold.":"Used to define the Cost of Goods Sold.","Visible":"Visible","Define whether the unit is available for sale.":"Define whether the unit is available for sale.","Product unique name. If it\\' variation, it should be relevant for that variation":"Product unique name. If it\\' variation, it should be relevant for that variation","The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.":"The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.","The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.":"The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.","Auto COGS":"Auto COGS","Unknown Type: %s":"Unknown Type: %s","Shortage":"Shortage","Overage":"Overage","Transactions List":"Transactions List","Display all transactions.":"Display all transactions.","No transactions has been registered":"No transactions has been registered","Add a new transaction":"Add a new transaction","Create a new transaction":"Create a new transaction","Register a new transaction and save it.":"Register a new transaction and save it.","Edit transaction":"Edit transaction","Modify Transaction.":"Modify Transaction.","Return to Transactions":"Return to Transactions","determine if the transaction is effective or not. Work for recurring and not recurring transactions.":"determine if the transaction is effective or not. Work for recurring and not recurring transactions.","Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.":"Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.","Transaction Account":"Transaction Account","Assign the transaction to an account430":"Assign the transaction to an account430","Is the value or the cost of the transaction.":"Is the value or the cost of the transaction.","If set to Yes, the transaction will trigger on defined occurrence.":"If set to Yes, the transaction will trigger on defined occurrence.","Define how often this transaction occurs":"Define how often this transaction occurs","Define what is the type of the transactions.":"Define what is the type of the transactions.","Trigger":"Trigger","Would you like to trigger this expense now?":"Would you like to trigger this expense now?","Transactions History List":"Transactions History List","Display all transaction history.":"Display all transaction history.","No transaction history has been registered":"No transaction history has been registered","Add a new transaction history":"Add a new transaction history","Create a new transaction history":"Create a new transaction history","Register a new transaction history and save it.":"Register a new transaction history and save it.","Edit transaction history":"Edit transaction history","Modify Transactions history.":"Modify Transactions history.","Return to Transactions History":"Return to Transactions History","Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.":"Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.","Set the limit that can\\'t be exceeded by the user.":"Set the limit that can\\'t be exceeded by the user.","Oops, We\\'re Sorry!!!":"Oops, We\\'re Sorry!!!","Class: %s":"Class: %s","There\\'s is mismatch with the core version.":"There\\'s is mismatch with the core version.","You\\'re not authenticated.":"You\\'re not authenticated.","An error occured while performing your request.":"An error occured while performing your request.","A mismatch has occured between a module and it\\'s dependency.":"A mismatch has occured between a module and it\\'s dependency.","You\\'re not allowed to see that page.":"You\\'re not allowed to see that page.","Post Too Large":"Post Too Large","The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini":"The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini","This field does\\'nt have a valid value.":"This field does\\'nt have a valid value.","Describe the direct transaction.":"Describe the direct transaction.","If set to yes, the transaction will take effect immediately and be saved on the history.":"If set to yes, the transaction will take effect immediately and be saved on the history.","Assign the transaction to an account.":"Assign the transaction to an account.","set the value of the transaction.":"set the value of the transaction.","Further details on the transaction.":"Further details on the transaction.","Describe the direct transactions.":"Describe the direct transactions.","set the value of the transactions.":"set the value of the transactions.","The transactions will be multipled by the number of user having that role.":"The transactions will be multipled by the number of user having that role.","Create Sales (needs Procurements)":"Create Sales (needs Procurements)","Set when the transaction should be executed.":"Set when the transaction should be executed.","The addresses were successfully updated.":"The addresses were successfully updated.","Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.":"Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.","The register doesn\\'t have an history.":"The register doesn\\'t have an history.","Unable to check a register session history if it\\'s closed.":"Unable to check a register session history if it\\'s closed.","Register History For : %s":"Register History For : %s","Can\\'t delete a category having sub categories linked to it.":"Can\\'t delete a category having sub categories linked to it.","Unable to proceed. The request doesn\\'t provide enough data which could be handled":"Unable to proceed. The request doesn\\'t provide enough data which could be handled","Unable to load the CRUD resource : %s.":"Unable to load the CRUD resource : %s.","Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods":"Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods","The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.":"The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.","The crud columns exceed the maximum column that can be exported (27)":"The crud columns exceed the maximum column that can be exported (27)","This link has expired.":"This link has expired.","Account History : %s":"Account History : %s","Welcome — %s":"Welcome — %s","Upload and manage medias (photos).":"Upload and manage medias (photos).","The product which id is %s doesnt\\'t belong to the procurement which id is %s":"The product which id is %s doesnt\\'t belong to the procurement which id is %s","The refresh process has started. You\\'ll get informed once it\\'s complete.":"The refresh process has started. You\\'ll get informed once it\\'s complete.","The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".":"The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".","Stock History For %s":"Stock History For %s","Set":"Set","The unit is not set for the product \"%s\".":"The unit is not set for the product \"%s\".","The operation will cause a negative stock for the product \"%s\" (%s).":"The operation will cause a negative stock for the product \"%s\" (%s).","The adjustment quantity can\\'t be negative for the product \"%s\" (%s)":"The adjustment quantity can\\'t be negative for the product \"%s\" (%s)","%s\\'s Products":"%s\\'s Products","Transactions Report":"Transactions Report","Combined Report":"Combined Report","Provides a combined report for every transactions on products.":"Provides a combined report for every transactions on products.","Unable to initiallize the settings page. The identifier \"' . $identifier . '":"Unable to initiallize the settings page. The identifier \"' . $identifier . '","Shows all histories generated by the transaction.":"Shows all histories generated by the transaction.","Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.":"Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.","Create New Transaction":"Create New Transaction","Set direct, scheduled transactions.":"Set direct, scheduled transactions.","Update Transaction":"Update Transaction","The provided data aren\\'t valid":"The provided data aren\\'t valid","Welcome — NexoPOS":"Welcome — NexoPOS","You\\'re not allowed to see this page.":"You\\'re not allowed to see this page.","Your don\\'t have enough permission to perform this action.":"Your don\\'t have enough permission to perform this action.","You don\\'t have the necessary role to see this page.":"You don\\'t have the necessary role to see this page.","%s order(s) has recently been deleted as they has expired.":"%s order(s) has recently been deleted as they has expired.","%s product(s) has low stock. Reorder those product(s) before it get exhausted.":"%s product(s) has low stock. Reorder those product(s) before it get exhausted.","Scheduled Transactions":"Scheduled Transactions","the transaction \"%s\" was executed as scheduled on %s.":"the transaction \"%s\" was executed as scheduled on %s.","Workers Aren\\'t Running":"Workers Aren\\'t Running","The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.":"The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.","Unable to remove the permissions \"%s\". It doesn\\'t exists.":"Unable to remove the permissions \"%s\". It doesn\\'t exists.","An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A":"An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A","Unable to open \"%s\" *, as it\\'s not closed.":"Unable to open \"%s\" *, as it\\'s not closed.","Unable to open \"%s\" *, as it\\'s not opened.":"Unable to open \"%s\" *, as it\\'s not opened.","Unable to cashing on \"%s\" *, as it\\'s not opened.":"Unable to cashing on \"%s\" *, as it\\'s not opened.","Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.":"Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.","Unable to cashout on \"%s":"Unable to cashout on \"%s","Symbolic Links Missing":"Symbolic Links Missing","The Symbolic Links to the public directory is missing. Your medias might be broken and not display.":"The Symbolic Links to the public directory is missing. Your medias might be broken and not display.","Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.":"Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.","The requested module %s cannot be found.":"The requested module %s cannot be found.","The manifest.json can\\'t be located inside the module %s on the path: %s":"The manifest.json can\\'t be located inside the module %s on the path: %s","the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.":"the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.","Sorting is explicitely disabled for the column \"%s\".":"Sorting is explicitely disabled for the column \"%s\".","Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s":"Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s","Unable to find the customer using the provided id %s.":"Unable to find the customer using the provided id %s.","Not enough credits on the customer account. Requested : %s, Remaining: %s.":"Not enough credits on the customer account. Requested : %s, Remaining: %s.","The customer account doesn\\'t have enough funds to proceed.":"The customer account doesn\\'t have enough funds to proceed.","Unable to find a reference to the attached coupon : %s":"Unable to find a reference to the attached coupon : %s","You\\'re not allowed to use this coupon as it\\'s no longer active":"You\\'re not allowed to use this coupon as it\\'s no longer active","You\\'re not allowed to use this coupon it has reached the maximum usage allowed.":"You\\'re not allowed to use this coupon it has reached the maximum usage allowed.","Terminal A":"Terminal A","Terminal B":"Terminal B","%s link were deleted":"%s link were deleted","Unable to execute the following class callback string : %s":"Unable to execute the following class callback string : %s","%s — %s":"%s — %s","Transactions":"Transactions","Create Transaction":"Create Transaction","Stock History":"Stock History","Invoices":"Invoices","Failed to parse the configuration file on the following path \"%s\"":"Failed to parse the configuration file on the following path \"%s\"","No config.xml has been found on the directory : %s. This folder is ignored":"No config.xml has been found on the directory : %s. This folder is ignored","The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ":"The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ","Unable to upload this module as it\\'s older than the version installed":"Unable to upload this module as it\\'s older than the version installed","The migration file doens\\'t have a valid class name. Expected class : %s":"The migration file doens\\'t have a valid class name. Expected class : %s","Unable to locate the following file : %s":"Unable to locate the following file : %s","The migration file doens\\'t have a valid method name. Expected method : %s":"The migration file doens\\'t have a valid method name. Expected method : %s","The module %s cannot be enabled as his dependency (%s) is missing or not enabled.":"The module %s cannot be enabled as his dependency (%s) is missing or not enabled.","The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.":"The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.","An Error Occurred \"%s\": %s":"An Error Occurred \"%s\": %s","The order has been updated":"The order has been updated","The minimal payment of %s has\\'nt been provided.":"The minimal payment of %s has\\'nt been provided.","Unable to proceed as the order is already paid.":"Unable to proceed as the order is already paid.","The customer account funds are\\'nt enough to process the payment.":"The customer account funds are\\'nt enough to process the payment.","Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.","Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.","By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.":"By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.","You\\'re not allowed to make payments.":"You\\'re not allowed to make payments.","Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s":"Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s","Unknown Status (%s)":"Unknown Status (%s)","%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.":"%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.","Unable to find a reference of the provided coupon : %s":"Unable to find a reference of the provided coupon : %s","The procurement has been deleted. %s included stock record(s) has been deleted as well.":"The procurement has been deleted. %s included stock record(s) has been deleted as well.","Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.":"Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.","Unable to find the product using the provided id \"%s\"":"Unable to find the product using the provided id \"%s\"","Unable to procure the product \"%s\" as the stock management is disabled.":"Unable to procure the product \"%s\" as the stock management is disabled.","Unable to procure the product \"%s\" as it is a grouped product.":"Unable to procure the product \"%s\" as it is a grouped product.","The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item":"The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item","%s procurement(s) has recently been automatically procured.":"%s procurement(s) has recently been automatically procured.","The requested category doesn\\'t exists":"The requested category doesn\\'t exists","The category to which the product is attached doesn\\'t exists or has been deleted":"The category to which the product is attached doesn\\'t exists or has been deleted","Unable to create a product with an unknow type : %s":"Unable to create a product with an unknow type : %s","A variation within the product has a barcode which is already in use : %s.":"A variation within the product has a barcode which is already in use : %s.","A variation within the product has a SKU which is already in use : %s":"A variation within the product has a SKU which is already in use : %s","Unable to edit a product with an unknown type : %s":"Unable to edit a product with an unknown type : %s","The requested sub item doesn\\'t exists.":"The requested sub item doesn\\'t exists.","One of the provided product variation doesn\\'t include an identifier.":"One of the provided product variation doesn\\'t include an identifier.","The product\\'s unit quantity has been updated.":"The product\\'s unit quantity has been updated.","Unable to reset this variable product \"%s":"Unable to reset this variable product \"%s","Adjusting grouped product inventory must result of a create, update, delete sale operation.":"Adjusting grouped product inventory must result of a create, update, delete sale operation.","Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).":"Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).","Unsupported stock action \"%s\"":"Unsupported stock action \"%s\"","%s product(s) has been deleted.":"%s product(s) has been deleted.","%s products(s) has been deleted.":"%s products(s) has been deleted.","Unable to find the product, as the argument \"%s\" which value is \"%s":"Unable to find the product, as the argument \"%s\" which value is \"%s","You cannot convert unit on a product having stock management disabled.":"You cannot convert unit on a product having stock management disabled.","The source and the destination unit can\\'t be the same. What are you trying to do ?":"The source and the destination unit can\\'t be the same. What are you trying to do ?","There is no source unit quantity having the name \"%s\" for the item %s":"There is no source unit quantity having the name \"%s\" for the item %s","There is no destination unit quantity having the name %s for the item %s":"There is no destination unit quantity having the name %s for the item %s","The source unit and the destination unit doens\\'t belong to the same unit group.":"The source unit and the destination unit doens\\'t belong to the same unit group.","The group %s has no base unit defined":"The group %s has no base unit defined","The conversion of %s(%s) to %s(%s) was successful":"The conversion of %s(%s) to %s(%s) was successful","The product has been deleted.":"The product has been deleted.","An error occurred: %s.":"An error occurred: %s.","A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.":"A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.","Today\\'s Orders":"Today\\'s Orders","Today\\'s Sales":"Today\\'s Sales","Today\\'s Refunds":"Today\\'s Refunds","Today\\'s Customers":"Today\\'s Customers","The report will be generated. Try loading the report within few minutes.":"The report will be generated. Try loading the report within few minutes.","The database has been wiped out.":"The database has been wiped out.","No custom handler for the reset \"' . $mode . '\"":"No custom handler for the reset \"' . $mode . '\"","Unable to proceed. The parent tax doesn\\'t exists.":"Unable to proceed. The parent tax doesn\\'t exists.","A simple tax must not be assigned to a parent tax with the type \"simple":"A simple tax must not be assigned to a parent tax with the type \"simple","Created via tests":"Created via tests","The transaction has been successfully saved.":"The transaction has been successfully saved.","The transaction has been successfully updated.":"The transaction has been successfully updated.","Unable to find the transaction using the provided identifier.":"Unable to find the transaction using the provided identifier.","Unable to find the requested transaction using the provided id.":"Unable to find the requested transaction using the provided id.","The transction has been correctly deleted.":"The transction has been correctly deleted.","You cannot delete an account which has transactions bound.":"You cannot delete an account which has transactions bound.","The transaction account has been deleted.":"The transaction account has been deleted.","Unable to find the transaction account using the provided ID.":"Unable to find the transaction account using the provided ID.","The transaction account has been updated.":"The transaction account has been updated.","This transaction type can\\'t be triggered.":"This transaction type can\\'t be triggered.","The transaction has been successfully triggered.":"The transaction has been successfully triggered.","The transaction \"%s\" has been processed on day \"%s\".":"The transaction \"%s\" has been processed on day \"%s\".","The transaction \"%s\" has already been processed.":"The transaction \"%s\" has already been processed.","The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.":"The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.","The process has been correctly executed and all transactions has been processed.":"The process has been correctly executed and all transactions has been processed.","The process has been executed with some failures. %s\/%s process(es) has successed.":"The process has been executed with some failures. %s\/%s process(es) has successed.","Procurement : %s":"Procurement : %s","Procurement Liability : %s":"Procurement Liability : %s","Refunding : %s":"Refunding : %s","Spoiled Good : %s":"Spoiled Good : %s","Sale : %s":"Sale : %s","Liabilities Account":"Liabilities Account","Not found account type: %s":"Not found account type: %s","Refund : %s":"Refund : %s","Customer Account Crediting : %s":"Customer Account Crediting : %s","Customer Account Purchase : %s":"Customer Account Purchase : %s","Customer Account Deducting : %s":"Customer Account Deducting : %s","Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.":"Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.","The unit group %s doesn\\'t have a base unit":"The unit group %s doesn\\'t have a base unit","The system role \"Users\" can be retrieved.":"The system role \"Users\" can be retrieved.","The default role that must be assigned to new users cannot be retrieved.":"The default role that must be assigned to new users cannot be retrieved.","%s Second(s)":"%s Second(s)","Configure the accounting feature":"Configure the accounting feature","Define the symbol that indicate thousand. By default ":"Define the symbol that indicate thousand. By default ","Date Time Format":"Date Time Format","This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".":"This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".","Date TimeZone":"Date TimeZone","Determine the default timezone of the store. Current Time: %s":"Determine the default timezone of the store. Current Time: %s","Configure how invoice and receipts are used.":"Configure how invoice and receipts are used.","configure settings that applies to orders.":"configure settings that applies to orders.","Report Settings":"Report Settings","Configure the settings":"Configure the settings","Wipes and Reset the database.":"Wipes and Reset the database.","Supply Delivery":"Supply Delivery","Configure the delivery feature.":"Configure the delivery feature.","Configure how background operations works.":"Configure how background operations works.","Every procurement will be added to the selected transaction account":"Every procurement will be added to the selected transaction account","Every sales will be added to the selected transaction account":"Every sales will be added to the selected transaction account","Customer Credit Account (crediting)":"Customer Credit Account (crediting)","Every customer credit will be added to the selected transaction account":"Every customer credit will be added to the selected transaction account","Customer Credit Account (debitting)":"Customer Credit Account (debitting)","Every customer credit removed will be added to the selected transaction account":"Every customer credit removed will be added to the selected transaction account","Sales refunds will be attached to this transaction account":"Sales refunds will be attached to this transaction account","Stock Return Account (Spoiled Items)":"Stock Return Account (Spoiled Items)","Disbursement (cash register)":"Disbursement (cash register)","Transaction account for all cash disbursement.":"Transaction account for all cash disbursement.","Liabilities":"Liabilities","Transaction account for all liabilities.":"Transaction account for all liabilities.","You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.":"You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.","Show Tax Breakdown":"Show Tax Breakdown","Will display the tax breakdown on the receipt\/invoice.":"Will display the tax breakdown on the receipt\/invoice.","Available tags : ":"Available tags : ","{store_name}: displays the store name.":"{store_name}: displays the store name.","{store_email}: displays the store email.":"{store_email}: displays the store email.","{store_phone}: displays the store phone number.":"{store_phone}: displays the store phone number.","{cashier_name}: displays the cashier name.":"{cashier_name}: displays the cashier name.","{cashier_id}: displays the cashier id.":"{cashier_id}: displays the cashier id.","{order_code}: displays the order code.":"{order_code}: displays the order code.","{order_date}: displays the order date.":"{order_date}: displays the order date.","{order_type}: displays the order type.":"{order_type}: displays the order type.","{customer_name}: displays the customer name.":"{customer_name}: displays the customer name.","{customer_email}: displays the customer email.":"{customer_email}: displays the customer email.","{shipping_first_name}: displays the shipping first name.":"{shipping_first_name}: displays the shipping first name.","{shipping_last_name}: displays the shipping last name.":"{shipping_last_name}: displays the shipping last name.","{shipping_phone}: displays the shipping phone.":"{shipping_phone}: displays the shipping phone.","{shipping_address_1}: displays the shipping address_1.":"{shipping_address_1}: displays the shipping address_1.","{shipping_address_2}: displays the shipping address_2.":"{shipping_address_2}: displays the shipping address_2.","{shipping_country}: displays the shipping country.":"{shipping_country}: displays the shipping country.","{shipping_city}: displays the shipping city.":"{shipping_city}: displays the shipping city.","{shipping_pobox}: displays the shipping pobox.":"{shipping_pobox}: displays the shipping pobox.","{shipping_company}: displays the shipping company.":"{shipping_company}: displays the shipping company.","{shipping_email}: displays the shipping email.":"{shipping_email}: displays the shipping email.","{billing_first_name}: displays the billing first name.":"{billing_first_name}: displays the billing first name.","{billing_last_name}: displays the billing last name.":"{billing_last_name}: displays the billing last name.","{billing_phone}: displays the billing phone.":"{billing_phone}: displays the billing phone.","{billing_address_1}: displays the billing address_1.":"{billing_address_1}: displays the billing address_1.","{billing_address_2}: displays the billing address_2.":"{billing_address_2}: displays the billing address_2.","{billing_country}: displays the billing country.":"{billing_country}: displays the billing country.","{billing_city}: displays the billing city.":"{billing_city}: displays the billing city.","{billing_pobox}: displays the billing pobox.":"{billing_pobox}: displays the billing pobox.","{billing_company}: displays the billing company.":"{billing_company}: displays the billing company.","{billing_email}: displays the billing email.":"{billing_email}: displays the billing email.","Available tags :":"Available tags :","Quick Product Default Unit":"Quick Product Default Unit","Set what unit is assigned by default to all quick product.":"Set what unit is assigned by default to all quick product.","Hide Exhausted Products":"Hide Exhausted Products","Will hide exhausted products from selection on the POS.":"Will hide exhausted products from selection on the POS.","Hide Empty Category":"Hide Empty Category","Category with no or exhausted products will be hidden from selection.":"Category with no or exhausted products will be hidden from selection.","Default Printing (web)":"Default Printing (web)","The amount numbers shortcuts separated with a \"|\".":"The amount numbers shortcuts separated with a \"|\".","No submit URL was provided":"No submit URL was provided","Sorting is explicitely disabled on this column":"Sorting is explicitely disabled on this column","An unpexpected error occured while using the widget.":"An unpexpected error occured while using the widget.","This field must be similar to \"{other}\"\"":"This field must be similar to \"{other}\"\"","This field must have at least \"{length}\" characters\"":"This field must have at least \"{length}\" characters\"","This field must have at most \"{length}\" characters\"":"This field must have at most \"{length}\" characters\"","This field must be different from \"{other}\"\"":"This field must be different from \"{other}\"\"","Search result":"Search result","Choose...":"Choose...","The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.":"The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.","+{count} other":"+{count} other","The selected print gateway doesn't support this type of printing.":"The selected print gateway doesn't support this type of printing.","millisecond| second| minute| hour| day| week| month| year| decade| century| millennium":"millisecond| second| minute| hour| day| week| month| year| decade| century| millennium","milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia":"milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia","An error occured":"An error occured","You\\'re about to delete selected resources. Would you like to proceed?":"You\\'re about to delete selected resources. Would you like to proceed?","See Error":"See Error","Your uploaded files will displays here.":"Your uploaded files will displays here.","Nothing to care about !":"Nothing to care about !","Would you like to bulk edit a system role ?":"Would you like to bulk edit a system role ?","Total :":"Total :","Remaining :":"Remaining :","Instalments:":"Instalments:","This instalment doesn\\'t have any payment attached.":"This instalment doesn\\'t have any payment attached.","You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?":"You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?","An error has occured while seleting the payment gateway.":"An error has occured while seleting the payment gateway.","You're not allowed to add a discount on the product.":"You're not allowed to add a discount on the product.","You're not allowed to add a discount on the cart.":"You're not allowed to add a discount on the cart.","Cash Register : {register}":"Cash Register : {register}","The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?":"The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?","You don't have the right to edit the purchase price.":"You don't have the right to edit the purchase price.","Dynamic product can\\'t have their price updated.":"Dynamic product can\\'t have their price updated.","You\\'re not allowed to edit the order settings.":"You\\'re not allowed to edit the order settings.","Looks like there is either no products and no categories. How about creating those first to get started ?":"Looks like there is either no products and no categories. How about creating those first to get started ?","Create Categories":"Create Categories","You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?":"You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?","An unexpected error has occured while loading the form. Please check the log or contact the support.":"An unexpected error has occured while loading the form. Please check the log or contact the support.","We were not able to load the units. Make sure there are units attached on the unit group selected.":"We were not able to load the units. Make sure there are units attached on the unit group selected.","The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?":"The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?","There shoulnd\\'t be more option than there are units.":"There shoulnd\\'t be more option than there are units.","Either Selling or Purchase unit isn\\'t defined. Unable to proceed.":"Either Selling or Purchase unit isn\\'t defined. Unable to proceed.","Select the procured unit first before selecting the conversion unit.":"Select the procured unit first before selecting the conversion unit.","Convert to unit":"Convert to unit","An unexpected error has occured":"An unexpected error has occured","Unable to add product which doesn\\'t unit quantities defined.":"Unable to add product which doesn\\'t unit quantities defined.","{product}: Purchase Unit":"{product}: Purchase Unit","The product will be procured on that unit.":"The product will be procured on that unit.","Unkown Unit":"Unkown Unit","Choose Tax":"Choose Tax","The tax will be assigned to the procured product.":"The tax will be assigned to the procured product.","Show Details":"Show Details","Hide Details":"Hide Details","Important Notes":"Important Notes","Stock Management Products.":"Stock Management Products.","Doesn\\'t work with Grouped Product.":"Doesn\\'t work with Grouped Product.","Convert":"Convert","Looks like no valid products matched the searched term.":"Looks like no valid products matched the searched term.","This product doesn't have any stock to adjust.":"This product doesn't have any stock to adjust.","Select Unit":"Select Unit","Select the unit that you want to adjust the stock with.":"Select the unit that you want to adjust the stock with.","A similar product with the same unit already exists.":"A similar product with the same unit already exists.","Select Procurement":"Select Procurement","Select the procurement that you want to adjust the stock with.":"Select the procurement that you want to adjust the stock with.","Select Action":"Select Action","Select the action that you want to perform on the stock.":"Select the action that you want to perform on the stock.","Would you like to remove the selected products from the table ?":"Would you like to remove the selected products from the table ?","Unit:":"Unit:","Operation:":"Operation:","Procurement:":"Procurement:","Reason:":"Reason:","Provided":"Provided","Not Provided":"Not Provided","Remove Selected":"Remove Selected","Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.":"Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.","You haven\\'t yet generated any token for your account. Create one to get started.":"You haven\\'t yet generated any token for your account. Create one to get started.","You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?":"You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?","Date Range : {date1} - {date2}":"Date Range : {date1} - {date2}","Document : Best Products":"Document : Best Products","By : {user}":"By : {user}","Range : {date1} — {date2}":"Range : {date1} — {date2}","Document : Sale By Payment":"Document : Sale By Payment","Document : Customer Statement":"Document : Customer Statement","Customer : {selectedCustomerName}":"Customer : {selectedCustomerName}","All Categories":"All Categories","All Units":"All Units","Date : {date}":"Date : {date}","Document : {reportTypeName}":"Document : {reportTypeName}","Threshold":"Threshold","Select Units":"Select Units","An error has occured while loading the units.":"An error has occured while loading the units.","An error has occured while loading the categories.":"An error has occured while loading the categories.","Document : Payment Type":"Document : Payment Type","Document : Profit Report":"Document : Profit Report","Filter by Category":"Filter by Category","Filter by Units":"Filter by Units","An error has occured while loading the categories":"An error has occured while loading the categories","An error has occured while loading the units":"An error has occured while loading the units","By Type":"By Type","By User":"By User","By Category":"By Category","All Category":"All Category","Document : Sale Report":"Document : Sale Report","Filter By Category":"Filter By Category","Allow you to choose the category.":"Allow you to choose the category.","No category was found for proceeding the filtering.":"No category was found for proceeding the filtering.","Document : Sold Stock Report":"Document : Sold Stock Report","Filter by Unit":"Filter by Unit","Limit Results By Categories":"Limit Results By Categories","Limit Results By Units":"Limit Results By Units","Generate Report":"Generate Report","Document : Combined Products History":"Document : Combined Products History","Ini. Qty":"Ini. Qty","Added Quantity":"Added Quantity","Add. Qty":"Add. Qty","Sold Quantity":"Sold Quantity","Sold Qty":"Sold Qty","Defective Quantity":"Defective Quantity","Defec. Qty":"Defec. Qty","Final Quantity":"Final Quantity","Final Qty":"Final Qty","No data available":"No data available","Document : Yearly Report":"Document : Yearly Report","The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.":"The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.","Unable to edit this transaction":"Unable to edit this transaction","This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.":"This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.","Save Transaction":"Save Transaction","While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.":"While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.","The transaction is about to be saved. Would you like to confirm your action ?":"The transaction is about to be saved. Would you like to confirm your action ?","Unable to load the transaction":"Unable to load the transaction","You cannot edit this transaction if NexoPOS cannot perform background requests.":"You cannot edit this transaction if NexoPOS cannot perform background requests.","MySQL is selected as database driver":"MySQL is selected as database driver","Please provide the credentials to ensure NexoPOS can connect to the database.":"Please provide the credentials to ensure NexoPOS can connect to the database.","Sqlite is selected as database driver":"Sqlite is selected as database driver","Make sure Sqlite module is available for PHP. Your database will be located on the database directory.":"Make sure Sqlite module is available for PHP. Your database will be located on the database directory.","Checking database connectivity...":"Checking database connectivity...","Driver":"Driver","Set the database driver":"Set the database driver","Hostname":"Hostname","Provide the database hostname":"Provide the database hostname","Username required to connect to the database.":"Username required to connect to the database.","The username password required to connect.":"The username password required to connect.","Database Name":"Database Name","Provide the database name. Leave empty to use default file for SQLite Driver.":"Provide the database name. Leave empty to use default file for SQLite Driver.","Database Prefix":"Database Prefix","Provide the database prefix.":"Provide the database prefix.","Port":"Port","Provide the hostname port.":"Provide the hostname port.","NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.":"NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.","Install":"Install","Application":"Application","That is the application name.":"That is the application name.","Provide the administrator username.":"Provide the administrator username.","Provide the administrator email.":"Provide the administrator email.","What should be the password required for authentication.":"What should be the password required for authentication.","Should be the same as the password above.":"Should be the same as the password above.","Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.":"Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.","Choose your language to get started.":"Choose your language to get started.","Remaining Steps":"Remaining Steps","Database Configuration":"Database Configuration","Application Configuration":"Application Configuration","Language Selection":"Language Selection","Select what will be the default language of NexoPOS.":"Select what will be the default language of NexoPOS.","In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.":"In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.","Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.":"Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.","Please report this message to the support : ":"Please report this message to the support : ","No refunds made so far. Good news right?":"No refunds made so far. Good news right?","Open Register : %s":"Open Register : %s","Loading Coupon For : ":"Loading Coupon For : ","This coupon requires products that aren\\'t available on the cart at the moment.":"This coupon requires products that aren\\'t available on the cart at the moment.","This coupon requires products that belongs to specific categories that aren\\'t included at the moment.":"This coupon requires products that belongs to specific categories that aren\\'t included at the moment.","Too many results.":"Too many results.","New Customer":"New Customer","Purchases":"Purchases","Owed":"Owed","Usage :":"Usage :","Code :":"Code :","Order Reference":"Order Reference","The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?":"The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?","{product} : Units":"{product} : Units","This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.":"This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.","Previewing :":"Previewing :","Search for options":"Search for options","The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.":"The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.","The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.":"The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.","The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.":"The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.","The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.":"The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.","Invalid Error Message":"Invalid Error Message","{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List":"{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List","Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.":"Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.","No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered":"No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered","Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.":"Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.","Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.":"Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.","Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}":"Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}","{{ ucwords( $column ) }}":"{{ ucwords( $column ) }}","Delete Selected Entries":"Delete Selected Entries","Unamed Settings Page":"Unamed Settings Page","Description of unamed setting page":"Description of unamed setting page","Text Field":"Text Field","This is a sample text field.":"This is a sample text field.","No description has been provided.":"No description has been provided.","You\\'re using NexoPOS %s<\/a>":"You\\'re using NexoPOS %s<\/a>","If you haven\\'t asked this, please get in touch with the administrators.":"If you haven\\'t asked this, please get in touch with the administrators.","A new user has registered to your store (%s) with the email %s.":"A new user has registered to your store (%s) with the email %s.","The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.":"The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.","Note: ":"Note: ","Inclusive Product Taxes":"Inclusive Product Taxes","Exclusive Product Taxes":"Exclusive Product Taxes","Condition:":"Condition:","Date : %s":"Date : %s","The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?":"The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?","NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.":"NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.","Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.":"Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.","Retry":"Retry","If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.":"If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources."} \ No newline at end of file +{ + "An invalid date were provided. Make sure it a prior date to the actual server date.": "Ein ung\u00fcltiges Datum wurde angegeben. Vergewissern Sie sich, dass es sich um ein fr\u00fcheres Datum als das tats\u00e4chliche Serverdatum handelt.", + "Computing report from %s...": "Berechne Bericht von %s...", + "The operation was successful.": "Die Operation war erfolgreich.", + "Unable to find a module having the identifier\/namespace \"%s\"": "Es kann kein Modul mit der Kennung\/dem Namespace \"%s\" gefunden werden", + "What is the CRUD single resource name ? [Q] to quit.": "Wie lautet der Name der CRUD-Einzelressource ? [Q] to quit.", + "Please provide a valid value": "Bitte geben Sie einen g\u00fcltigen Wert ein", + "Which table name should be used ? [Q] to quit.": "Welcher Tabellenname soll verwendet werden? [Q] to quit.", + "What slug should be used ? [Q] to quit.": "Welcher Slug sollte verwendet werden ? [Q] to quit.", + "Please provide a valid value.": "Bitte geben Sie einen g\u00fcltigen Wert ein.", + "If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "Wenn Ihre CRUD-Ressource eine Beziehung hat, erw\u00e4hnen Sie sie wie folgt: \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.", + "Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "Neue Beziehung hinzuf\u00fcgen? Erw\u00e4hnen Sie es wie folgt: \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.", + "Not enough parameters provided for the relation.": "Es wurden nicht gen\u00fcgend Parameter f\u00fcr die Beziehung bereitgestellt.", + "The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"": "Die CRUD Ressource \"%s\" f\u00fcr das Modul \"%s\" wurde auf \"%s\" generiert", + "The CRUD resource \"%s\" has been generated at %s": "Die CRUD-Ressource \"%s\" wurde am %s generiert", + "An unexpected error has occurred.": "Ein unerwarteter Fehler ist aufgetreten.", + "Localization for %s extracted to %s": "Lokalisierung f\u00fcr %s extrahiert nach %s", + "Unable to find the requested module.": "Das angeforderte Modul kann nicht gefunden werden.", + "\"%s\" is a reserved class name": "\"%s\" ist ein reservierter Klassenname", + "The migration file has been successfully forgotten for the module %s.": "Die Migrationsdatei wurde erfolgreich f\u00fcr das Modul %s vergessen.", + "Name": "Name", + "Namespace": "Namespace", + "Version": "Version", + "Author": "Autor", + "Enabled": "Aktiviert", + "Yes": "Ja", + "No": "Nein", + "Path": "Pfad", + "Index": "Index", + "Entry Class": "Einstiegsklasse", + "Routes": "Routen", + "Api": "Api", + "Controllers": "Controller", + "Views": "Ansichten", + "Dashboard": "Dashboard", + "Attribute": "Attribut", + "Value": "Wert", + "There is no migrations to perform for the module \"%s\"": "F\u00fcr das Modul \"%s\" sind keine Migrationen durchzuf\u00fchren", + "The module migration has successfully been performed for the module \"%s\"": "Die Modulmigration wurde erfolgreich f\u00fcr das Modul \"%s\" durchgef\u00fchrt", + "The products taxes were computed successfully.": "Die Produktsteuern wurden erfolgreich berechnet.", + "The product barcodes has been refreshed successfully.": "Die Produkt-Barcodes wurden erfolgreich aktualisiert.", + "%s products where updated.": "%s Produkte wurden aktualisiert.", + "The demo has been enabled.": "Die Demo wurde aktiviert.", + "What is the store name ? [Q] to quit.": "Wie lautet der Name des Gesch\u00e4fts? [Q] to quit.", + "Please provide at least 6 characters for store name.": "Bitte geben Sie mindestens 6 Zeichen f\u00fcr den Namen des Gesch\u00e4fts an.", + "What is the administrator password ? [Q] to quit.": "Wie lautet das Administratorpasswort ? [Q] to quit.", + "Please provide at least 6 characters for the administrator password.": "Bitte geben Sie mindestens 6 Zeichen f\u00fcr das Administratorkennwort ein.", + "What is the administrator email ? [Q] to quit.": "Wie lautet die Administrator-E-Mail ? [Q] to quit.", + "Please provide a valid email for the administrator.": "Bitte geben Sie eine g\u00fcltige E-Mail-Adresse f\u00fcr den Administrator an.", + "What is the administrator username ? [Q] to quit.": "Wie lautet der Administrator-Benutzername ? [Q] to quit.", + "Please provide at least 5 characters for the administrator username.": "Bitte geben Sie mindestens 5 Zeichen f\u00fcr den Administratorbenutzernamen an.", + "Downloading latest dev build...": "Neueste Entwicklung wird heruntergeladen...", + "Reset project to HEAD...": "Projekt auf KOPF zur\u00fccksetzen...", + "Provide a name to the resource.": "Geben Sie der Ressource einen Namen.", + "General": "Allgemeines", + "Operation": "Betrieb", + "By": "Von", + "Date": "Datum", + "Credit": "Gutschrift", + "Debit": "Soll", + "Delete": "L\u00f6schen", + "Would you like to delete this ?": "M\u00f6chten Sie dies l\u00f6schen?", + "Delete Selected Groups": "Ausgew\u00e4hlte Gruppen l\u00f6schen", + "Coupons List": "Gutscheinliste", + "Display all coupons.": "Alle Gutscheine anzeigen.", + "No coupons has been registered": "Es wurden keine Gutscheine registriert", + "Add a new coupon": "Neuen Gutschein hinzuf\u00fcgen", + "Create a new coupon": "Neuen Gutschein erstellen", + "Register a new coupon and save it.": "Registrieren Sie einen neuen Gutschein und speichern Sie ihn.", + "Edit coupon": "Gutschein bearbeiten", + "Modify Coupon.": "Gutschein \u00e4ndern.", + "Return to Coupons": "Zur\u00fcck zu Gutscheine", + "Coupon Code": "Gutscheincode", + "Might be used while printing the coupon.": "Kann beim Drucken des Coupons verwendet werden.", + "Percentage Discount": "Prozentualer Rabatt", + "Flat Discount": "Pauschalrabatt", + "Type": "Typ", + "Define which type of discount apply to the current coupon.": "Legen Sie fest, welche Art von Rabatt auf den aktuellen Coupon angewendet wird.", + "Discount Value": "Rabattwert", + "Define the percentage or flat value.": "Definieren Sie den Prozentsatz oder den flachen Wert.", + "Valid Until": "G\u00fcltig bis", + "Minimum Cart Value": "Minimaler Warenkorbwert", + "What is the minimum value of the cart to make this coupon eligible.": "Wie hoch ist der Mindestwert des Warenkorbs, um diesen Gutschein g\u00fcltig zu machen?", + "Maximum Cart Value": "Maximaler Warenkorbwert", + "Valid Hours Start": "G\u00fcltige Stunden Start", + "Define form which hour during the day the coupons is valid.": "Legen Sie fest, zu welcher Tageszeit die Gutscheine g\u00fcltig sind.", + "Valid Hours End": "G\u00fcltige Stunden enden", + "Define to which hour during the day the coupons end stop valid.": "Legen Sie fest, bis zu welcher Tagesstunde die Gutscheine g\u00fcltig sind.", + "Limit Usage": "Nutzung einschr\u00e4nken", + "Define how many time a coupons can be redeemed.": "Legen Sie fest, wie oft ein Coupon eingel\u00f6st werden kann.", + "Products": "Produkte", + "Select Products": "Produkte ausw\u00e4hlen", + "The following products will be required to be present on the cart, in order for this coupon to be valid.": "Die folgenden Produkte m\u00fcssen im Warenkorb vorhanden sein, damit dieser Gutschein g\u00fcltig ist.", + "Categories": "Kategorien", + "Select Categories": "Kategorien ausw\u00e4hlen", + "The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.": "Die Produkte, die einer dieser Kategorien zugeordnet sind, sollten sich im Warenkorb befinden, damit dieser Gutschein g\u00fcltig ist.", + "Valid From": "G\u00fcltig ab", + "Valid Till": "G\u00fcltig bis", + "Created At": "Erstellt am", + "N\/A": "N\/A", + "Undefined": "Undefiniert", + "Edit": "Bearbeiten", + "Delete a licence": "Eine Lizenz l\u00f6schen", + "Previous Amount": "Vorheriger Betrag", + "Amount": "Betrag", + "Next Amount": "N\u00e4chster Betrag", + "Description": "Beschreibung", + "Order": "Bestellung", + "Restrict the records by the creation date.": "Beschr\u00e4nken Sie die Datens\u00e4tze auf das Erstellungsdatum.", + "Created Between": "Erstellt zwischen", + "Operation Type": "Betriebsart", + "Restrict the orders by the payment status.": "Beschr\u00e4nken Sie die Bestellungen auf den Zahlungsstatus.", + "Restrict the records by the author.": "Beschr\u00e4nken Sie die Aufzeichnungen des Autors.", + "Total": "Gesamt", + "Customer Accounts List": "Kundenkontenliste", + "Display all customer accounts.": "Alle Kundenkonten anzeigen.", + "No customer accounts has been registered": "Es wurden keine Kundenkonten registriert", + "Add a new customer account": "Neues Kundenkonto hinzuf\u00fcgen", + "Create a new customer account": "Neues Kundenkonto erstellen", + "Register a new customer account and save it.": "Registrieren Sie ein neues Kundenkonto und speichern Sie es.", + "Edit customer account": "Kundenkonto bearbeiten", + "Modify Customer Account.": "Kundenkonto \u00e4ndern.", + "Return to Customer Accounts": "Zur\u00fcck zu den Kundenkonten", + "This will be ignored.": "Dies wird ignoriert.", + "Define the amount of the transaction": "Definieren Sie den Betrag der Transaktion", + "Deduct": "Abzug", + "Add": "Hinzuf\u00fcgen", + "Define what operation will occurs on the customer account.": "Legen Sie fest, welche Vorg\u00e4nge auf dem Kundenkonto ausgef\u00fchrt werden.", + "Customer Coupons List": "Kunden-Gutscheine Liste", + "Display all customer coupons.": "Alle Kundengutscheine anzeigen.", + "No customer coupons has been registered": "Es wurden keine Kundengutscheine registriert", + "Add a new customer coupon": "Neuen Kundengutschein hinzuf\u00fcgen", + "Create a new customer coupon": "Neuen Kundengutschein erstellen", + "Register a new customer coupon and save it.": "Registrieren Sie einen neuen Kundengutschein und speichern Sie ihn.", + "Edit customer coupon": "Kundengutschein bearbeiten", + "Modify Customer Coupon.": "Kundengutschein \u00e4ndern.", + "Return to Customer Coupons": "Zur\u00fcck zu Kundengutscheine", + "Usage": "Verwendung", + "Define how many time the coupon has been used.": "Legen Sie fest, wie oft der Gutschein verwendet wurde.", + "Limit": "Limit", + "Define the maximum usage possible for this coupon.": "Definieren Sie die maximal m\u00f6gliche Verwendung f\u00fcr diesen Gutschein.", + "Customer": "Kunde", + "Code": "Code", + "Percentage": "Prozentsatz", + "Flat": "Flach", + "Customers List": "Kundenliste", + "Display all customers.": "Alle Kunden anzeigen.", + "No customers has been registered": "Es wurden keine Kunden registriert", + "Add a new customer": "Neuen Kunden hinzuf\u00fcgen", + "Create a new customer": "Neuen Kunden anlegen", + "Register a new customer and save it.": "Registrieren Sie einen neuen Kunden und speichern Sie ihn.", + "Edit customer": "Kunde bearbeiten", + "Modify Customer.": "Kunde \u00e4ndern.", + "Return to Customers": "Zur\u00fcck zu Kunden", + "Customer Name": "Kundenname", + "Provide a unique name for the customer.": "Geben Sie einen eindeutigen Namen f\u00fcr den Kunden an.", + "Credit Limit": "Kreditlimit", + "Set what should be the limit of the purchase on credit.": "Legen Sie fest, was das Limit f\u00fcr den Kauf auf Kredit sein soll.", + "Group": "Gruppe", + "Assign the customer to a group": "Den Kunden einer Gruppe zuordnen", + "Birth Date": "Geburtsdatum", + "Displays the customer birth date": "Zeigt das Geburtsdatum des Kunden an", + "Email": "E-Mail", + "Provide the customer email.": "Geben Sie die E-Mail-Adresse des Kunden an.", + "Phone Number": "Telefonnummer", + "Provide the customer phone number": "Geben Sie die Telefonnummer des Kunden an", + "PO Box": "Postfach", + "Provide the customer PO.Box": "Geben Sie die Postfachnummer des Kunden an", + "Provide the customer gender.": "Geben Sie das Geschlecht des Kunden an", + "Not Defined": "Nicht definiert", + "Male": "M\u00e4nnlich", + "Female": "Weiblich", + "Gender": "Geschlecht", + "Billing Address": "Rechnungsadresse", + "Phone": "Telefon", + "Billing phone number.": "Telefonnummer der Rechnung.", + "Address 1": "Adresse 1", + "Billing First Address.": "Erste Rechnungsadresse.", + "Address 2": "Adresse 2", + "Billing Second Address.": "Zweite Rechnungsadresse.", + "Country": "Land", + "Billing Country.": "Rechnungsland.", + "City": "Stadt", + "PO.Box": "Postfach", + "Postal Address": "Postanschrift", + "Company": "Unternehmen", + "Shipping Address": "Lieferadresse", + "Shipping phone number.": "Telefonnummer des Versands.", + "Shipping First Address.": "Versand Erste Adresse.", + "Shipping Second Address.": "Zweite Lieferadresse.", + "Shipping Country.": "Lieferland.", + "Account Credit": "Kontoguthaben", + "Owed Amount": "Geschuldeter Betrag", + "Purchase Amount": "Kaufbetrag", + "Orders": "Bestellungen", + "Rewards": "Belohnungen", + "Coupons": "Gutscheine", + "Wallet History": "Wallet-Historie", + "Delete a customers": "Einen Kunden l\u00f6schen", + "Delete Selected Customers": "Ausgew\u00e4hlte Kunden l\u00f6schen", + "Customer Groups List": "Kundengruppenliste", + "Display all Customers Groups.": "Alle Kundengruppen anzeigen.", + "No Customers Groups has been registered": "Es wurden keine Kundengruppen registriert", + "Add a new Customers Group": "Eine neue Kundengruppe hinzuf\u00fcgen", + "Create a new Customers Group": "Eine neue Kundengruppe erstellen", + "Register a new Customers Group and save it.": "Registrieren Sie eine neue Kundengruppe und speichern Sie sie.", + "Edit Customers Group": "Kundengruppe bearbeiten", + "Modify Customers group.": "Kundengruppe \u00e4ndern.", + "Return to Customers Groups": "Zur\u00fcck zu Kundengruppen", + "Reward System": "Belohnungssystem", + "Select which Reward system applies to the group": "W\u00e4hlen Sie aus, welches Belohnungssystem f\u00fcr die Gruppe gilt", + "Minimum Credit Amount": "Mindestguthabenbetrag", + "A brief description about what this group is about": "Eine kurze Beschreibung, worum es in dieser Gruppe geht", + "Created On": "Erstellt am", + "Customer Orders List": "Liste der Kundenbestellungen", + "Display all customer orders.": "Alle Kundenauftr\u00e4ge anzeigen.", + "No customer orders has been registered": "Es wurden keine Kundenbestellungen registriert", + "Add a new customer order": "Eine neue Kundenbestellung hinzuf\u00fcgen", + "Create a new customer order": "Einen neuen Kundenauftrag erstellen", + "Register a new customer order and save it.": "Registrieren Sie einen neuen Kundenauftrag und speichern Sie ihn.", + "Edit customer order": "Kundenauftrag bearbeiten", + "Modify Customer Order.": "Kundenauftrag \u00e4ndern.", + "Return to Customer Orders": "Zur\u00fcck zu Kundenbestellungen", + "Change": "Wechselgeld", + "Created at": "Erstellt am", + "Customer Id": "Kunden-ID", + "Delivery Status": "Lieferstatus", + "Discount": "Rabatt", + "Discount Percentage": "Rabattprozentsatz", + "Discount Type": "Rabattart", + "Final Payment Date": "Endg\u00fcltiges Zahlungsdatum", + "Tax Excluded": "Ohne Steuern", + "Id": "ID", + "Tax Included": "Inklusive Steuern", + "Payment Status": "Zahlungsstatus", + "Process Status": "Prozessstatus", + "Shipping": "Versand", + "Shipping Rate": "Versandkosten", + "Shipping Type": "Versandart", + "Sub Total": "Zwischensumme", + "Tax Value": "Steuerwert", + "Tendered": "Angezahlt", + "Title": "Titel", + "Total installments": "Summe Ratenzahlungen", + "Updated at": "Aktualisiert am", + "Uuid": "Uuid", + "Voidance Reason": "Stornogrund", + "Customer Rewards List": "Kundenbelohnungsliste", + "Display all customer rewards.": "Alle Kundenbelohnungen anzeigen.", + "No customer rewards has been registered": "Es wurden keine Kundenbelohnungen registriert", + "Add a new customer reward": "Eine neue Kundenbelohnung hinzuf\u00fcgen", + "Create a new customer reward": "Eine neue Kundenbelohnung erstellen", + "Register a new customer reward and save it.": "Registrieren Sie eine neue Kundenbelohnung und speichern Sie sie.", + "Edit customer reward": "Kundenbelohnung bearbeiten", + "Modify Customer Reward.": "Kundenbelohnung \u00e4ndern.", + "Return to Customer Rewards": "Zur\u00fcck zu Kundenbelohnungen", + "Points": "Punkte", + "Target": "Target", + "Reward Name": "Name der Belohnung", + "Last Update": "Letzte Aktualisierung", + "Accounts List": "Kontenliste", + "Display All Accounts.": "Alle Konten anzeigen.", + "No Account has been registered": "Es wurde kein Konto registriert", + "Add a new Account": "Neues Konto hinzuf\u00fcgen", + "Create a new Account": "Neues Konto erstellen", + "Register a new Account and save it.": "Registrieren Sie ein neues Konto und speichern Sie es.", + "Edit Account": "Konto bearbeiten", + "Modify An Account.": "Ein Konto \u00e4ndern.", + "Return to Accounts": "Zur\u00fcck zu den Konten", + "All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.": "Alle mit dieser Kategorie verbundenen Unternehmen erstellen entweder eine \u201eGutschrift\u201c oder eine \u201eBelastung\u201c des Cashflow-Verlaufs.", + "Account": "Konto", + "Provide the accounting number for this category.": "Geben Sie die Buchungsnummer f\u00fcr diese Kategorie an.", + "Active": "Aktiv", + "Users Group": "Benutzergruppe", + "None": "Keine", + "Recurring": "Wiederkehrend", + "Start of Month": "Monatsbeginn", + "Mid of Month": "Mitte des Monats", + "End of Month": "Monatsende", + "X days Before Month Ends": "X Tage vor Monatsende", + "X days After Month Starts": "X Tage nach Monatsbeginn", + "Occurrence": "Vorkommen", + "Occurrence Value": "Wert des Vorkommens", + "Must be used in case of X days after month starts and X days before month ends.": "Muss bei X Tagen nach Monatsbeginn und X Tagen vor Monatsende verwendet werden.", + "Category": "Kategorie", + "Month Starts": "Monatliche Starts", + "Month Middle": "Monat Mitte", + "Month Ends": "Monatsende", + "X Days Before Month Ends": "X Tage vor Monatsende", + "Product Histories": "Produkthistorien", + "Display all product stock flow.": "Alle Produktbest\u00e4nde anzeigen.", + "No products stock flow has been registered": "Es wurde kein Produktbestandsfluss registriert", + "Add a new products stock flow": "Hinzuf\u00fcgen eines neuen Produktbestands", + "Create a new products stock flow": "Erstellen eines neuen Produktbestands", + "Register a new products stock flow and save it.": "Registrieren Sie einen neuen Produktbestandsfluss und speichern Sie ihn.", + "Edit products stock flow": "Produktbestandsfluss bearbeiten", + "Modify Globalproducthistorycrud.": "Globalproducthistorycrud \u00e4ndern.", + "Return to Product Histories": "Zur\u00fcck zu den Produkthistorien", + "Product": "Produkt", + "Procurement": "Beschaffung", + "Unit": "Einheit", + "Initial Quantity": "Anfangsmenge", + "Quantity": "Menge", + "New Quantity": "Neue Menge", + "Total Price": "Gesamtpreis", + "Added": "Hinzugef\u00fcgt", + "Defective": "Defekt", + "Deleted": "Gel\u00f6scht", + "Lost": "Verloren", + "Removed": "Entfernt", + "Sold": "Verkauft", + "Stocked": "Vorr\u00e4tig", + "Transfer Canceled": "\u00dcbertragung abgebrochen", + "Incoming Transfer": "Eingehende \u00dcberweisung", + "Outgoing Transfer": "Ausgehende \u00dcberweisung", + "Void Return": "R\u00fccksendung stornieren", + "Hold Orders List": "Aufbewahrungsauftragsliste", + "Display all hold orders.": "Alle Halteauftr\u00e4ge anzeigen.", + "No hold orders has been registered": "Es wurden keine Hold-Auftr\u00e4ge registriert", + "Add a new hold order": "Eine neue Hold-Order hinzuf\u00fcgen", + "Create a new hold order": "Eine neue Hold-Order erstellen", + "Register a new hold order and save it.": "Registrieren Sie einen neuen Halteauftrag und speichern Sie ihn.", + "Edit hold order": "Halteauftrag bearbeiten", + "Modify Hold Order.": "Halteauftrag \u00e4ndern.", + "Return to Hold Orders": "Zur\u00fcck zur Auftragssperre", + "Updated At": "Aktualisiert am", + "Continue": "Weiter", + "Restrict the orders by the creation date.": "Beschr\u00e4nken Sie die Bestellungen auf das Erstellungsdatum.", + "Paid": "Bezahlt", + "Hold": "Halten", + "Partially Paid": "Teilweise bezahlt", + "Partially Refunded": "Teilweise erstattet", + "Refunded": "R\u00fcckerstattet", + "Unpaid": "Unbezahlt", + "Voided": "Storniert", + "Due": "F\u00e4llig", + "Due With Payment": "F\u00e4llig mit Zahlung", + "Restrict the orders by the author.": "Beschr\u00e4nken Sie die Bestellungen des Autors.", + "Restrict the orders by the customer.": "Beschr\u00e4nken Sie die Bestellungen durch den Kunden.", + "Customer Phone": "Kunden-Telefonnummer", + "Restrict orders using the customer phone number.": "Beschr\u00e4nken Sie Bestellungen \u00fcber die Telefonnummer des Kunden.", + "Cash Register": "Registrierkasse", + "Restrict the orders to the cash registers.": "Beschr\u00e4nken Sie die Bestellungen auf die Kassen.", + "Orders List": "Bestellliste", + "Display all orders.": "Alle Bestellungen anzeigen.", + "No orders has been registered": "Es wurden keine Bestellungen registriert", + "Add a new order": "Neue Bestellung hinzuf\u00fcgen", + "Create a new order": "Neue Bestellung erstellen", + "Register a new order and save it.": "Registrieren Sie eine neue Bestellung und speichern Sie sie.", + "Edit order": "Bestellung bearbeiten", + "Modify Order.": "Reihenfolge \u00e4ndern.", + "Return to Orders": "Zur\u00fcck zu Bestellungen", + "Discount Rate": "Abzinsungssatz", + "The order and the attached products has been deleted.": "Die Bestellung und die angeh\u00e4ngten Produkte wurden gel\u00f6scht.", + "Options": "Optionen", + "Refund Receipt": "R\u00fcckerstattungsbeleg", + "Invoice": "Rechnung", + "Receipt": "Quittung", + "Order Instalments List": "Liste der Ratenbestellungen", + "Display all Order Instalments.": "Alle Auftragsraten anzeigen.", + "No Order Instalment has been registered": "Es wurde keine Auftragsrate registriert", + "Add a new Order Instalment": "Neue Bestellrate hinzuf\u00fcgen", + "Create a new Order Instalment": "Eine neue Bestellrate erstellen", + "Register a new Order Instalment and save it.": "Registrieren Sie eine neue Auftragsrate und speichern Sie sie.", + "Edit Order Instalment": "Bestellrate bearbeiten", + "Modify Order Instalment.": "Bestellrate \u00e4ndern.", + "Return to Order Instalment": "Zur\u00fcck zur Bestellrate", + "Order Id": "Bestellnummer", + "Payment Types List": "Liste der Zahlungsarten", + "Display all payment types.": "Alle Zahlungsarten anzeigen.", + "No payment types has been registered": "Es wurden keine Zahlungsarten registriert", + "Add a new payment type": "Neue Zahlungsart hinzuf\u00fcgen", + "Create a new payment type": "Neue Zahlungsart erstellen", + "Register a new payment type and save it.": "Registrieren Sie eine neue Zahlungsart und speichern Sie diese.", + "Edit payment type": "Zahlungsart bearbeiten", + "Modify Payment Type.": "Zahlungsart \u00e4ndern.", + "Return to Payment Types": "Zur\u00fcck zu den Zahlungsarten", + "Label": "Beschriftung", + "Provide a label to the resource.": "Geben Sie der Ressource ein Label.", + "Priority": "Priorit\u00e4t", + "Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".": "Definieren Sie die Bestellung f\u00fcr die Zahlung. Je niedriger die Zahl ist, desto zuerst wird sie im Zahlungs-Popup angezeigt. Muss bei \"0\" beginnen.", + "Identifier": "Identifier", + "A payment type having the same identifier already exists.": "Eine Zahlungsart mit der gleichen Kennung existiert bereits.", + "Unable to delete a read-only payments type.": "Ein schreibgesch\u00fctzter Zahlungstyp kann nicht gel\u00f6scht werden.", + "Readonly": "Schreibgesch\u00fctzt", + "Procurements List": "Beschaffungsliste", + "Display all procurements.": "Alle Beschaffungen anzeigen.", + "No procurements has been registered": "Es wurden keine Beschaffungen registriert", + "Add a new procurement": "Neue Beschaffung hinzuf\u00fcgen", + "Create a new procurement": "Neue Beschaffung erstellen", + "Register a new procurement and save it.": "Registrieren Sie eine neue Beschaffung und speichern Sie sie.", + "Edit procurement": "Beschaffung bearbeiten", + "Modify Procurement.": "Beschaffung \u00e4ndern.", + "Return to Procurements": "Zur\u00fcck zu den Beschaffungen", + "Provider Id": "Anbieter-ID", + "Status": "Status", + "Total Items": "Artikel insgesamt", + "Provider": "Anbieter", + "Invoice Date": "Rechnungsdatum", + "Sale Value": "Verkaufswert", + "Purchase Value": "Kaufwert", + "Taxes": "Steuern", + "Set Paid": "Bezahlt festlegen", + "Would you like to mark this procurement as paid?": "M\u00f6chten Sie diese Beschaffung als bezahlt markieren?", + "Refresh": "Aktualisieren", + "Would you like to refresh this ?": "M\u00f6chten Sie das aktualisieren?", + "Procurement Products List": "Liste der Beschaffungsprodukte", + "Display all procurement products.": "Alle Beschaffungsprodukte anzeigen.", + "No procurement products has been registered": "Es wurden keine Beschaffungsprodukte registriert", + "Add a new procurement product": "Neues Beschaffungsprodukt hinzuf\u00fcgen", + "Create a new procurement product": "Neues Beschaffungsprodukt anlegen", + "Register a new procurement product and save it.": "Registrieren Sie ein neues Beschaffungsprodukt und speichern Sie es.", + "Edit procurement product": "Beschaffungsprodukt bearbeiten", + "Modify Procurement Product.": "Beschaffungsprodukt \u00e4ndern.", + "Return to Procurement Products": "Zur\u00fcck zu den Beschaffungsprodukten", + "Expiration Date": "Ablaufdatum", + "Define what is the expiration date of the product.": "Definieren Sie das Ablaufdatum des Produkts.", + "Barcode": "Barcode", + "On": "Ein", + "Category Products List": "Produktkategorieliste", + "Display all category products.": "Alle Produkte der Kategorie anzeigen.", + "No category products has been registered": "Es wurden keine Produktkategorien registriert", + "Add a new category product": "Eine neue Produktkategorie hinzuf\u00fcgen", + "Create a new category product": "Erstellen Sie eine neue Produktkategorie", + "Register a new category product and save it.": "Registrieren Sie eine neue Produktkategorie und speichern Sie sie.", + "Edit category product": "Produktkategorie bearbeiten", + "Modify Category Product.": "Produktkategorie \u00e4ndern.", + "Return to Category Products": "Zur\u00fcck zur Produktkategorie", + "No Parent": "Nichts \u00fcbergeordnet", + "Preview": "Vorschau", + "Provide a preview url to the category.": "Geben Sie der Kategorie eine Vorschau-URL.", + "Displays On POS": "In Verkaufsterminal anzeigen", + "Parent": "\u00dcbergeordnet", + "If this category should be a child category of an existing category": "Wenn diese Kategorie eine untergeordnete Kategorie einer bestehenden Kategorie sein soll", + "Total Products": "Produkte insgesamt", + "Products List": "Produktliste", + "Display all products.": "Alle Produkte anzeigen.", + "No products has been registered": "Es wurden keine Produkte registriert", + "Add a new product": "Neues Produkt hinzuf\u00fcgen", + "Create a new product": "Neues Produkt erstellen", + "Register a new product and save it.": "Registrieren Sie ein neues Produkt und speichern Sie es.", + "Edit product": "Produkt bearbeiten", + "Modify Product.": "Produkt \u00e4ndern.", + "Return to Products": "Zur\u00fcck zu den Produkten", + "Assigned Unit": "Zugewiesene Einheit", + "The assigned unit for sale": "Die zugewiesene Einheit zum Verkauf", + "Sale Price": "Angebotspreis", + "Define the regular selling price.": "Definieren Sie den regul\u00e4ren Verkaufspreis.", + "Wholesale Price": "Gro\u00dfhandelspreis", + "Define the wholesale price.": "Definieren Sie den Gro\u00dfhandelspreis.", + "Stock Alert": "Bestandsbenachrichtigung", + "Define whether the stock alert should be enabled for this unit.": "Legen Sie fest, ob der Bestandsalarm f\u00fcr diese Einheit aktiviert werden soll.", + "Low Quantity": "Geringe Menge", + "Which quantity should be assumed low.": "Welche Menge soll niedrig angenommen werden.", + "Preview Url": "Vorschau-URL", + "Provide the preview of the current unit.": "Geben Sie die Vorschau der aktuellen Einheit an.", + "Identification": "Identifikation", + "Select to which category the item is assigned.": "W\u00e4hlen Sie aus, welcher Kategorie das Element zugeordnet ist.", + "Define the barcode value. Focus the cursor here before scanning the product.": "Definieren Sie den Barcode-Wert. Fokussieren Sie den Cursor hier, bevor Sie das Produkt scannen.", + "Define a unique SKU value for the product.": "Definieren Sie einen eindeutigen SKU-Wert f\u00fcr das Produkt.", + "SKU": "SKU", + "Define the barcode type scanned.": "Definieren Sie den gescannten Barcode-Typ.", + "EAN 8": "EAN 8", + "EAN 13": "EAN 13", + "Codabar": "Codabar", + "Code 128": "Code 128", + "Code 39": "Code 39", + "Code 11": "Code 11", + "UPC A": "UPC A", + "UPC E": "UPC E", + "Barcode Type": "Barcode-Typ", + "Materialized Product": "Materialisiertes Produkt", + "Dematerialized Product": "Dematerialisiertes Produkt", + "Grouped Product": "Gruppiertes Produkt", + "Define the product type. Applies to all variations.": "Definieren Sie den Produkttyp. Gilt f\u00fcr alle Varianten.", + "Product Type": "Produkttyp", + "On Sale": "Im Angebot", + "Hidden": "Versteckt", + "Define whether the product is available for sale.": "Definieren Sie, ob das Produkt zum Verkauf steht.", + "Enable the stock management on the product. Will not work for service or uncountable products.": "Aktivieren Sie die Lagerverwaltung f\u00fcr das Produkt. Funktioniert nicht f\u00fcr Service oder unz\u00e4hlige Produkte.", + "Stock Management Enabled": "Bestandsverwaltung aktiviert", + "Groups": "Gruppen", + "Units": "Einheiten", + "Accurate Tracking": "Genaue Nachverfolgung", + "What unit group applies to the actual item. This group will apply during the procurement.": "Welche Einheitengruppe gilt f\u00fcr die aktuelle Position? Diese Gruppe wird w\u00e4hrend der Beschaffung angewendet.", + "Unit Group": "Einheitengruppe", + "Determine the unit for sale.": "Bestimmen Sie die zu verkaufende Einheit.", + "Selling Unit": "Verkaufseinheit", + "Expiry": "Ablaufdatum", + "Product Expires": "Produkt l\u00e4uft ab", + "Set to \"No\" expiration time will be ignored.": "Auf \"Nein\" gesetzte Ablaufzeit wird ignoriert.", + "Prevent Sales": "Verk\u00e4ufe verhindern", + "Allow Sales": "Verk\u00e4ufe erlauben", + "Determine the action taken while a product has expired.": "Bestimmen Sie die Aktion, die durchgef\u00fchrt wird, w\u00e4hrend ein Produkt abgelaufen ist.", + "On Expiration": "Bei Ablauf", + "Choose Group": "Gruppe ausw\u00e4hlen", + "Select the tax group that applies to the product\/variation.": "W\u00e4hlen Sie die Steuergruppe aus, die f\u00fcr das Produkt\/die Variation gilt.", + "Tax Group": "Steuergruppe", + "Inclusive": "Inklusiv", + "Exclusive": "Exklusiv", + "Define what is the type of the tax.": "Definieren Sie die Art der Steuer.", + "Tax Type": "Steuerart", + "Images": "Bilder", + "Image": "Bild", + "Choose an image to add on the product gallery": "W\u00e4hlen Sie ein Bild aus, das in der Produktgalerie hinzugef\u00fcgt werden soll", + "Is Primary": "Ist prim\u00e4r", + "Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.": "Definieren Sie, ob das Bild prim\u00e4r sein soll. Wenn es mehr als ein prim\u00e4res Bild gibt, wird eines f\u00fcr Sie ausgew\u00e4hlt.", + "Sku": "SKU", + "Materialized": "Materialisiert", + "Dematerialized": "Dematerialisiert", + "Grouped": "Gruppiert", + "Disabled": "Deaktiviert", + "Available": "Verf\u00fcgbar", + "Unassigned": "Nicht zugewiesen", + "See Quantities": "Siehe Mengen", + "See History": "Verlauf ansehen", + "Would you like to delete selected entries ?": "M\u00f6chten Sie die ausgew\u00e4hlten Eintr\u00e4ge l\u00f6schen?", + "Display all product histories.": "Alle Produkthistorien anzeigen.", + "No product histories has been registered": "Es wurden keine Produkthistorien registriert", + "Add a new product history": "Neue Produkthistorie hinzuf\u00fcgen", + "Create a new product history": "Neue Produkthistorie erstellen", + "Register a new product history and save it.": "Registrieren Sie einen neuen Produktverlauf und speichern Sie ihn.", + "Edit product history": "Produkthistorie bearbeiten", + "Modify Product History.": "Produkthistorie \u00e4ndern.", + "After Quantity": "Nach Menge", + "Before Quantity": "Vor Menge", + "Order id": "Bestellnummer", + "Procurement Id": "Beschaffungs-ID", + "Procurement Product Id": "Beschaffung Produkt-ID", + "Product Id": "Produkt-ID", + "Unit Id": "Einheit-ID", + "Unit Price": "St\u00fcckpreis", + "P. Quantity": "P. Menge", + "N. Quantity": "N. Menge", + "Returned": "Zur\u00fcckgesendet", + "Transfer Rejected": "\u00dcbertragung abgelehnt", + "Adjustment Return": "Anpassungsr\u00fcckgabe", + "Adjustment Sale": "Anpassung Verkauf", + "Product Unit Quantities List": "Mengenliste der Produkteinheiten", + "Display all product unit quantities.": "Alle Produktmengen anzeigen.", + "No product unit quantities has been registered": "Es wurden keine Produktmengen pro Einheit registriert", + "Add a new product unit quantity": "Eine neue Produktmengeneinheit hinzuf\u00fcgen", + "Create a new product unit quantity": "Eine neue Produktmengeneinheit erstellen", + "Register a new product unit quantity and save it.": "Registrieren Sie eine neue Produktmengeneinheit und speichern Sie diese.", + "Edit product unit quantity": "Menge der Produkteinheit bearbeiten", + "Modify Product Unit Quantity.": "\u00c4ndern Sie die Menge der Produkteinheit.", + "Return to Product Unit Quantities": "Zur\u00fcck zur Produktmengeneinheit", + "Created_at": "Erstellt_am", + "Product id": "Produkt-ID", + "Updated_at": "Updated_at", + "Providers List": "Anbieterliste", + "Display all providers.": "Alle Anbieter anzeigen.", + "No providers has been registered": "Es wurden keine Anbieter registriert", + "Add a new provider": "Neuen Anbieter hinzuf\u00fcgen", + "Create a new provider": "Einen neuen Anbieter erstellen", + "Register a new provider and save it.": "Registrieren Sie einen neuen Anbieter und speichern Sie ihn.", + "Edit provider": "Anbieter bearbeiten", + "Modify Provider.": "Anbieter \u00e4ndern.", + "Return to Providers": "Zur\u00fcck zu den Anbietern", + "Provide the provider email. Might be used to send automated email.": "Geben Sie die E-Mail-Adresse des Anbieters an. K\u00f6nnte verwendet werden, um automatisierte E-Mails zu senden.", + "Contact phone number for the provider. Might be used to send automated SMS notifications.": "Kontakttelefonnummer des Anbieters. Kann verwendet werden, um automatische SMS-Benachrichtigungen zu senden.", + "First address of the provider.": "Erste Adresse des Anbieters.", + "Second address of the provider.": "Zweite Adresse des Anbieters.", + "Further details about the provider": "Weitere Angaben zum Anbieter", + "Amount Due": "F\u00e4lliger Betrag", + "Amount Paid": "Gezahlter Betrag", + "See Procurements": "Siehe Beschaffungen", + "See Products": "Produkte ansehen", + "Provider Procurements List": "Beschaffungsliste des Anbieters", + "Display all provider procurements.": "Alle Anbieterbeschaffungen anzeigen.", + "No provider procurements has been registered": "Es wurden keine Anbieterbeschaffungen registriert", + "Add a new provider procurement": "Eine neue Anbieterbeschaffung hinzuf\u00fcgen", + "Create a new provider procurement": "Eine neue Anbieterbeschaffung erstellen", + "Register a new provider procurement and save it.": "Registrieren Sie eine neue Anbieterbeschaffung und speichern Sie sie.", + "Edit provider procurement": "Anbieterbeschaffung bearbeiten", + "Modify Provider Procurement.": "Anbieterbeschaffung \u00e4ndern.", + "Return to Provider Procurements": "Zur\u00fcck zu Anbieterbeschaffungen", + "Delivered On": "Geliefert am", + "Tax": "Steuer", + "Delivery": "Lieferung", + "Payment": "Zahlung", + "Items": "Artikel", + "Provider Products List": "Anbieter Produktliste", + "Display all Provider Products.": "Alle Anbieterprodukte anzeigen.", + "No Provider Products has been registered": "Es wurden keine Anbieterprodukte registriert", + "Add a new Provider Product": "Neues Anbieterprodukt hinzuf\u00fcgen", + "Create a new Provider Product": "Neues Anbieterprodukt erstellen", + "Register a new Provider Product and save it.": "Registrieren Sie ein neues Anbieterprodukt und speichern Sie es.", + "Edit Provider Product": "Anbieterprodukt bearbeiten", + "Modify Provider Product.": "Anbieterprodukt \u00e4ndern.", + "Return to Provider Products": "Zur\u00fcck zu den Produkten des Anbieters", + "Purchase Price": "Kaufpreis", + "Display all registers.": "Alle Register anzeigen.", + "No registers has been registered": "Es wurden keine Register registriert", + "Add a new register": "Neue Kasse hinzuf\u00fcgen", + "Create a new register": "Neue Kasse erstellen", + "Register a new register and save it.": "Registrieren Sie ein neues Register und speichern Sie es.", + "Edit register": "Kasse bearbeiten", + "Modify Register.": "Register \u00e4ndern.", + "Return to Registers": "Zur\u00fcck zu den Kassen", + "Closed": "Geschlossen", + "Define what is the status of the register.": "Definieren Sie den Status des Registers.", + "Provide mode details about this cash register.": "Geben Sie Details zum Modus dieser Kasse an.", + "Unable to delete a register that is currently in use": "L\u00f6schen eines aktuell verwendeten Registers nicht m\u00f6glich", + "Used By": "Verwendet von", + "Balance": "Guthaben", + "Register History": "Registrierungsverlauf", + "Register History List": "Registrierungsverlaufsliste", + "Display all register histories.": "Alle Registerverl\u00e4ufe anzeigen.", + "No register histories has been registered": "Es wurden keine Registerhistorien registriert", + "Add a new register history": "Neue Kassenhistorie hinzuf\u00fcgen", + "Create a new register history": "Erstellen Sie eine neue Kassenhistorie", + "Register a new register history and save it.": "Registrieren Sie eine neue Registrierungshistorie und speichern Sie sie.", + "Edit register history": "Kassenverlauf bearbeiten", + "Modify Registerhistory.": "\u00c4ndern Sie die Registerhistorie.", + "Return to Register History": "Zur\u00fcck zum Registrierungsverlauf", + "Register Id": "Registrierungs-ID", + "Action": "Aktion", + "Register Name": "Registrierungsname", + "Initial Balance": "Anfangssaldo", + "New Balance": "Neues Guthaben", + "Transaction Type": "Transaktionstyp", + "Done At": "Erledigt am", + "Unchanged": "Unver\u00e4ndert", + "Reward Systems List": "Liste der Belohnungssysteme", + "Display all reward systems.": "Alle Belohnungssysteme anzeigen.", + "No reward systems has been registered": "Es wurden keine Belohnungssysteme registriert", + "Add a new reward system": "Neues Belohnungssystem hinzuf\u00fcgen", + "Create a new reward system": "Neues Belohnungssystem erstellen", + "Register a new reward system and save it.": "Registrieren Sie ein neues Belohnungssystem und speichern Sie es.", + "Edit reward system": "Pr\u00e4miensystem bearbeiten", + "Modify Reward System.": "\u00c4ndern des Belohnungssystems.", + "Return to Reward Systems": "Zur\u00fcck zu Belohnungssystemen", + "From": "Von", + "The interval start here.": "Das Intervall beginnt hier.", + "To": "An", + "The interval ends here.": "Das Intervall endet hier.", + "Points earned.": "Verdiente Punkte.", + "Coupon": "Coupon", + "Decide which coupon you would apply to the system.": "Entscheiden Sie, welchen Gutschein Sie auf das System anwenden m\u00f6chten.", + "This is the objective that the user should reach to trigger the reward.": "Dies ist das Ziel, das der Benutzer erreichen sollte, um die Belohnung auszul\u00f6sen.", + "A short description about this system": "Eine kurze Beschreibung zu diesem System", + "Would you like to delete this reward system ?": "M\u00f6chten Sie dieses Belohnungssystem l\u00f6schen?", + "Delete Selected Rewards": "Ausgew\u00e4hlte Belohnungen l\u00f6schen", + "Would you like to delete selected rewards?": "M\u00f6chten Sie die ausgew\u00e4hlten Belohnungen l\u00f6schen?", + "No Dashboard": "Kein Dashboard", + "Store Dashboard": "Shop Dashboard", + "Cashier Dashboard": "Kassierer-Dashboard", + "Default Dashboard": "Standard-Dashboard", + "Roles List": "Rollenliste", + "Display all roles.": "Alle Rollen anzeigen.", + "No role has been registered.": "Es wurde keine Rolle registriert.", + "Add a new role": "Neue Rolle hinzuf\u00fcgen", + "Create a new role": "Neue Rolle erstellen", + "Create a new role and save it.": "Erstellen Sie eine neue Rolle und speichern Sie sie.", + "Edit role": "Rolle bearbeiten", + "Modify Role.": "Rolle \u00e4ndern.", + "Return to Roles": "Zur\u00fcck zu den Rollen", + "Provide a name to the role.": "Geben Sie der Rolle einen Namen.", + "Should be a unique value with no spaces or special character": "Sollte ein eindeutiger Wert ohne Leerzeichen oder Sonderzeichen sein", + "Provide more details about what this role is about.": "Geben Sie weitere Details dar\u00fcber an, worum es bei dieser Rolle geht.", + "Unable to delete a system role.": "Eine Systemrolle kann nicht gel\u00f6scht werden.", + "Clone": "Klonen", + "Would you like to clone this role ?": "M\u00f6chten Sie diese Rolle klonen?", + "You do not have enough permissions to perform this action.": "Sie haben nicht gen\u00fcgend Berechtigungen, um diese Aktion auszuf\u00fchren.", + "Taxes List": "Steuerliste", + "Display all taxes.": "Alle Steuern anzeigen.", + "No taxes has been registered": "Es wurden keine Steuern registriert", + "Add a new tax": "Neue Steuer hinzuf\u00fcgen", + "Create a new tax": "Neue Steuer erstellen", + "Register a new tax and save it.": "Registrieren Sie eine neue Steuer und speichern Sie sie.", + "Edit tax": "Steuer bearbeiten", + "Modify Tax.": "Steuer \u00e4ndern.", + "Return to Taxes": "Zur\u00fcck zu Steuern", + "Provide a name to the tax.": "Geben Sie der Steuer einen Namen.", + "Assign the tax to a tax group.": "Weisen Sie die Steuer einer Steuergruppe zu.", + "Rate": "Rate", + "Define the rate value for the tax.": "Definieren Sie den Satzwert f\u00fcr die Steuer.", + "Provide a description to the tax.": "Geben Sie der Steuer eine Beschreibung.", + "Taxes Groups List": "Liste der Steuergruppen", + "Display all taxes groups.": "Alle Steuergruppen anzeigen.", + "No taxes groups has been registered": "Es wurden keine Steuergruppen registriert", + "Add a new tax group": "Neue Steuergruppe hinzuf\u00fcgen", + "Create a new tax group": "Neue Steuergruppe erstellen", + "Register a new tax group and save it.": "Registrieren Sie eine neue Steuergruppe und speichern Sie sie.", + "Edit tax group": "Steuergruppe bearbeiten", + "Modify Tax Group.": "Steuergruppe \u00e4ndern.", + "Return to Taxes Groups": "Zur\u00fcck zu den Steuergruppen", + "Provide a short description to the tax group.": "Geben Sie der Steuergruppe eine kurze Beschreibung.", + "Units List": "Einheitenliste", + "Display all units.": "Alle Einheiten anzeigen.", + "No units has been registered": "Es wurden keine Einheiten registriert", + "Add a new unit": "Neue Einheit hinzuf\u00fcgen", + "Create a new unit": "Eine neue Einheit erstellen", + "Register a new unit and save it.": "Registrieren Sie eine neue Einheit und speichern Sie sie.", + "Edit unit": "Einheit bearbeiten", + "Modify Unit.": "Einheit \u00e4ndern.", + "Return to Units": "Zur\u00fcck zu Einheiten", + "Preview URL": "Vorschau-URL", + "Preview of the unit.": "Vorschau der Einheit.", + "Define the value of the unit.": "Definieren Sie den Wert der Einheit.", + "Define to which group the unit should be assigned.": "Definieren Sie, welcher Gruppe die Einheit zugeordnet werden soll.", + "Base Unit": "Basiseinheit", + "Determine if the unit is the base unit from the group.": "Bestimmen Sie, ob die Einheit die Basiseinheit aus der Gruppe ist.", + "Provide a short description about the unit.": "Geben Sie eine kurze Beschreibung der Einheit an.", + "Unit Groups List": "Einheitengruppenliste", + "Display all unit groups.": "Alle Einheitengruppen anzeigen.", + "No unit groups has been registered": "Es wurden keine Einheitengruppen registriert", + "Add a new unit group": "Eine neue Einheitengruppe hinzuf\u00fcgen", + "Create a new unit group": "Eine neue Einheitengruppe erstellen", + "Register a new unit group and save it.": "Registrieren Sie eine neue Einheitengruppe und speichern Sie sie.", + "Edit unit group": "Einheitengruppe bearbeiten", + "Modify Unit Group.": "Einheitengruppe \u00e4ndern.", + "Return to Unit Groups": "Zur\u00fcck zu Einheitengruppen", + "Users List": "Benutzerliste", + "Display all users.": "Alle Benutzer anzeigen.", + "No users has been registered": "Es wurden keine Benutzer registriert", + "Add a new user": "Neuen Benutzer hinzuf\u00fcgen", + "Create a new user": "Neuen Benutzer erstellen", + "Register a new user and save it.": "Registrieren Sie einen neuen Benutzer und speichern Sie ihn.", + "Edit user": "Benutzer bearbeiten", + "Modify User.": "Benutzer \u00e4ndern.", + "Return to Users": "Zur\u00fcck zu Benutzern", + "Username": "Benutzername", + "Will be used for various purposes such as email recovery.": "Wird f\u00fcr verschiedene Zwecke wie die Wiederherstellung von E-Mails verwendet.", + "Password": "Passwort", + "Make a unique and secure password.": "Erstellen Sie ein einzigartiges und sicheres Passwort.", + "Confirm Password": "Passwort best\u00e4tigen", + "Should be the same as the password.": "Sollte mit dem Passwort identisch sein.", + "Define whether the user can use the application.": "Definieren Sie, ob der Benutzer die Anwendung verwenden kann.", + "Define what roles applies to the user": "Definieren Sie, welche Rollen f\u00fcr den Benutzer gelten", + "Roles": "Rollen", + "You cannot delete your own account.": "Sie k\u00f6nnen Ihr eigenes Konto nicht l\u00f6schen.", + "Not Assigned": "Nicht zugewiesen", + "Access Denied": "Zugriff verweigert", + "Incompatibility Exception": "Inkompatibilit\u00e4tsausnahme", + "The request method is not allowed.": "Die Anforderungsmethode ist nicht zul\u00e4ssig.", + "Method Not Allowed": "Methode nicht erlaubt", + "There is a missing dependency issue.": "Es fehlt ein Abh\u00e4ngigkeitsproblem.", + "Missing Dependency": "Fehlende Abh\u00e4ngigkeit", + "Module Version Mismatch": "Modulversion stimmt nicht \u00fcberein", + "The Action You Tried To Perform Is Not Allowed.": "Die Aktion, die Sie auszuf\u00fchren versucht haben, ist nicht erlaubt.", + "Not Allowed Action": "Nicht zul\u00e4ssige Aktion", + "The action you tried to perform is not allowed.": "Die Aktion, die Sie auszuf\u00fchren versucht haben, ist nicht zul\u00e4ssig.", + "A Database Exception Occurred.": "Eine Datenbankausnahme ist aufgetreten.", + "Not Enough Permissions": "Nicht gen\u00fcgend Berechtigungen", + "Unable to locate the assets.": "Die Assets k\u00f6nnen nicht gefunden werden.", + "Not Found Assets": "Nicht gefundene Assets", + "The resource of the page you tried to access is not available or might have been deleted.": "Die Ressource der Seite, auf die Sie zugreifen wollten, ist nicht verf\u00fcgbar oder wurde m\u00f6glicherweise gel\u00f6scht.", + "Not Found Exception": "Ausnahme nicht gefunden", + "Query Exception": "Abfrageausnahme", + "An error occurred while validating the form.": "Beim Validieren des Formulars ist ein Fehler aufgetreten.", + "An error has occurred": "Ein Fehler ist aufgetreten", + "Unable to proceed, the submitted form is not valid.": "Kann nicht fortfahren, das \u00fcbermittelte Formular ist ung\u00fcltig.", + "Unable to proceed the form is not valid": "Das Formular kann nicht fortgesetzt werden. Es ist ung\u00fcltig", + "This value is already in use on the database.": "Dieser Wert wird bereits in der Datenbank verwendet.", + "This field is required.": "Dieses Feld ist erforderlich.", + "This field should be checked.": "Dieses Feld sollte gepr\u00fcft werden.", + "This field must be a valid URL.": "Dieses Feld muss eine g\u00fcltige URL sein.", + "This field is not a valid email.": "Dieses Feld ist keine g\u00fcltige E-Mail-Adresse.", + "Provide your username.": "Geben Sie Ihren Benutzernamen ein.", + "Provide your password.": "Geben Sie Ihr Passwort ein.", + "Provide your email.": "Geben Sie Ihre E-Mail-Adresse an.", + "Password Confirm": "Passwort best\u00e4tigen", + "define the amount of the transaction.": "definieren Sie den Betrag der Transaktion.", + "Further observation while proceeding.": "Weitere Beobachtung w\u00e4hrend des Verfahrens.", + "determine what is the transaction type.": "bestimmen, was die Transaktionsart ist.", + "Determine the amount of the transaction.": "Bestimmen Sie den Betrag der Transaktion.", + "Further details about the transaction.": "Weitere Details zur Transaktion.", + "Installments": "Ratenzahlungen", + "Define the installments for the current order.": "Definieren Sie die Raten f\u00fcr den aktuellen Auftrag.", + "New Password": "Neues Passwort", + "define your new password.": "definieren Sie Ihr neues Passwort.", + "confirm your new password.": "best\u00e4tigen Sie Ihr neues Passwort.", + "Select Payment": "Zahlung ausw\u00e4hlen", + "choose the payment type.": "w\u00e4hlen Sie die Zahlungsart.", + "Define the order name.": "Definieren Sie den Auftragsnamen.", + "Define the date of creation of the order.": "Definieren Sie das Datum der Auftragsanlage.", + "Provide the procurement name.": "Geben Sie den Beschaffungsnamen an.", + "Describe the procurement.": "Beschreiben Sie die Beschaffung.", + "Define the provider.": "Definieren Sie den Anbieter.", + "Define what is the unit price of the product.": "Definieren Sie den St\u00fcckpreis des Produkts.", + "Condition": "Bedingung", + "Determine in which condition the product is returned.": "Bestimmen Sie, in welchem Zustand das Produkt zur\u00fcckgegeben wird.", + "Damaged": "Besch\u00e4digt", + "Unspoiled": "Unber\u00fchrt", + "Other Observations": "Sonstige Beobachtungen", + "Describe in details the condition of the returned product.": "Beschreiben Sie detailliert den Zustand des zur\u00fcckgegebenen Produkts.", + "Mode": "Modus", + "Wipe All": "Alle l\u00f6schen", + "Wipe Plus Grocery": "Wischen Plus Lebensmittelgesch\u00e4ft", + "Choose what mode applies to this demo.": "W\u00e4hlen Sie aus, welcher Modus f\u00fcr diese Demo gilt.", + "Set if the sales should be created.": "Legen Sie fest, ob die Verk\u00e4ufe erstellt werden sollen.", + "Create Procurements": "Beschaffungen erstellen", + "Will create procurements.": "Erstellt Beschaffungen.", + "Unit Group Name": "Name der Einheitengruppe", + "Provide a unit name to the unit.": "Geben Sie der Einheit einen Namen.", + "Describe the current unit.": "Beschreiben Sie die aktuelle Einheit.", + "assign the current unit to a group.": "ordnen Sie die aktuelle Einheit einer Gruppe zu.", + "define the unit value.": "definieren Sie den Einheitswert.", + "Provide a unit name to the units group.": "Geben Sie der Einheitengruppe einen Einheitennamen an.", + "Describe the current unit group.": "Beschreiben Sie die aktuelle Einheitengruppe.", + "POS": "Verkaufsterminal", + "Open POS": "Verkaufsterminal \u00f6ffnen", + "Create Register": "Kasse erstellen", + "Registers List": "Kassenliste", + "Instalments": "Ratenzahlungen", + "Procurement Name": "Beschaffungsname", + "Provide a name that will help to identify the procurement.": "Geben Sie einen Namen an, der zur Identifizierung der Beschaffung beitr\u00e4gt.", + "The profile has been successfully saved.": "Das Profil wurde erfolgreich gespeichert.", + "The user attribute has been saved.": "Das Benutzerattribut wurde gespeichert.", + "The options has been successfully updated.": "Die Optionen wurden erfolgreich aktualisiert.", + "Wrong password provided": "Falsches Passwort angegeben", + "Wrong old password provided": "Falsches altes Passwort angegeben", + "Password Successfully updated.": "Passwort erfolgreich aktualisiert.", + "Use Customer Billing": "Kundenabrechnung verwenden", + "Define whether the customer billing information should be used.": "Legen Sie fest, ob die Rechnungsinformationen des Kunden verwendet werden sollen.", + "General Shipping": "Allgemeiner Versand", + "Define how the shipping is calculated.": "Legen Sie fest, wie der Versand berechnet wird.", + "Shipping Fees": "Versandkosten", + "Define shipping fees.": "Versandkosten definieren.", + "Use Customer Shipping": "Kundenversand verwenden", + "Define whether the customer shipping information should be used.": "Legen Sie fest, ob die Versandinformationen des Kunden verwendet werden sollen.", + "Invoice Number": "Rechnungsnummer", + "If the procurement has been issued outside of NexoPOS, please provide a unique reference.": "Wenn die Beschaffung au\u00dferhalb von NexoPOS erfolgt ist, geben Sie bitte eine eindeutige Referenz an.", + "Delivery Time": "Lieferzeit", + "If the procurement has to be delivered at a specific time, define the moment here.": "Wenn die Beschaffung zu einem bestimmten Zeitpunkt geliefert werden muss, legen Sie hier den Zeitpunkt fest.", + "If you would like to define a custom invoice date.": "Wenn Sie ein benutzerdefiniertes Rechnungsdatum definieren m\u00f6chten.", + "Automatic Approval": "Automatische Genehmigung", + "Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.": "Legen Sie fest, ob die Beschaffung automatisch als genehmigt markiert werden soll, sobald die Lieferzeit eintritt.", + "Pending": "Ausstehend", + "Delivered": "Zugestellt", + "Determine what is the actual payment status of the procurement.": "Bestimmen Sie den tats\u00e4chlichen Zahlungsstatus der Beschaffung.", + "Determine what is the actual provider of the current procurement.": "Bestimmen Sie, was der eigentliche Anbieter der aktuellen Beschaffung ist.", + "First Name": "Vorname", + "Theme": "Theme", + "Dark": "Dunkel", + "Light": "Hell", + "Define what is the theme that applies to the dashboard.": "Definieren Sie das Thema, das auf das Dashboard zutrifft.", + "Avatar": "Avatar", + "Define the image that should be used as an avatar.": "Definieren Sie das Bild, das als Avatar verwendet werden soll.", + "Language": "Sprache", + "Choose the language for the current account.": "W\u00e4hlen Sie die Sprache f\u00fcr das aktuelle Konto.", + "Security": "Sicherheit", + "Old Password": "Altes Passwort", + "Provide the old password.": "Geben Sie das alte Passwort ein.", + "Change your password with a better stronger password.": "\u00c4ndern Sie Ihr Passwort mit einem besseren, st\u00e4rkeren Passwort.", + "Password Confirmation": "Passwortbest\u00e4tigung", + "Sign In — NexoPOS": "Anmelden — NexoPOS", + "Sign Up — NexoPOS": "Anmelden — NexoPOS", + "No activation is needed for this account.": "F\u00fcr dieses Konto ist keine Aktivierung erforderlich.", + "Invalid activation token.": "Ung\u00fcltiges Aktivierungstoken.", + "The expiration token has expired.": "Der Ablauf-Token ist abgelaufen.", + "Your account is not activated.": "Ihr Konto ist nicht aktiviert.", + "Password Lost": "Passwort vergessen", + "Unable to change a password for a non active user.": "Ein Passwort f\u00fcr einen nicht aktiven Benutzer kann nicht ge\u00e4ndert werden.", + "Unable to proceed as the token provided is invalid.": "Das angegebene Token kann nicht fortgesetzt werden, da es ung\u00fcltig ist.", + "The token has expired. Please request a new activation token.": "Der Token ist abgelaufen. Bitte fordern Sie ein neues Aktivierungstoken an.", + "Set New Password": "Neues Passwort festlegen", + "Database Update": "Datenbank-Update", + "This account is disabled.": "Dieses Konto ist deaktiviert.", + "Unable to find record having that username.": "Datensatz mit diesem Benutzernamen kann nicht gefunden werden.", + "Unable to find record having that password.": "Datensatz mit diesem Passwort kann nicht gefunden werden.", + "Invalid username or password.": "Ung\u00fcltiger Benutzername oder Passwort.", + "Unable to login, the provided account is not active.": "Anmeldung nicht m\u00f6glich, das angegebene Konto ist nicht aktiv.", + "You have been successfully connected.": "Sie wurden erfolgreich verbunden.", + "The recovery email has been send to your inbox.": "Die Wiederherstellungs-E-Mail wurde an Ihren Posteingang gesendet.", + "Unable to find a record matching your entry.": "Es kann kein Datensatz gefunden werden, der zu Ihrem Eintrag passt.", + "Your Account has been successfully created.": "Ihr Konto wurde erfolgreich erstellt.", + "Your Account has been created but requires email validation.": "Ihr Konto wurde erstellt, erfordert jedoch eine E-Mail-Validierung.", + "Unable to find the requested user.": "Der angeforderte Benutzer kann nicht gefunden werden.", + "Unable to submit a new password for a non active user.": "Ein neues Passwort f\u00fcr einen nicht aktiven Benutzer kann nicht \u00fcbermittelt werden.", + "Unable to proceed, the provided token is not valid.": "Kann nicht fortfahren, das angegebene Token ist nicht g\u00fcltig.", + "Unable to proceed, the token has expired.": "Kann nicht fortfahren, das Token ist abgelaufen.", + "Your password has been updated.": "Ihr Passwort wurde aktualisiert.", + "Unable to edit a register that is currently in use": "Eine aktuell verwendete Kasse kann nicht bearbeitet werden", + "No register has been opened by the logged user.": "Der angemeldete Benutzer hat kein Register ge\u00f6ffnet.", + "The register is opened.": "Das Register wird ge\u00f6ffnet.", + "Cash In": "Cash In", + "Cash Out": "Auszahlung", + "Closing": "Abschluss", + "Opening": "Er\u00f6ffnung", + "Sale": "Sale", + "Refund": "R\u00fcckerstattung", + "Unable to find the category using the provided identifier": "Die Kategorie kann mit der angegebenen Kennung nicht gefunden werden", + "The category has been deleted.": "Die Kategorie wurde gel\u00f6scht.", + "Unable to find the category using the provided identifier.": "Die Kategorie kann mit der angegebenen Kennung nicht gefunden werden.", + "Unable to find the attached category parent": "Die angeh\u00e4ngte \u00fcbergeordnete Kategorie kann nicht gefunden werden", + "The category has been correctly saved": "Die Kategorie wurde korrekt gespeichert", + "The category has been updated": "Die Kategorie wurde aktualisiert", + "The category products has been refreshed": "Die Kategorie Produkte wurde aktualisiert", + "Unable to delete an entry that no longer exists.": "Ein nicht mehr vorhandener Eintrag kann nicht gel\u00f6scht werden.", + "The entry has been successfully deleted.": "Der Eintrag wurde erfolgreich gel\u00f6scht.", + "Unhandled crud resource": "Unbehandelte Rohressource", + "You need to select at least one item to delete": "Sie m\u00fcssen mindestens ein Element zum L\u00f6schen ausw\u00e4hlen", + "You need to define which action to perform": "Sie m\u00fcssen definieren, welche Aktion ausgef\u00fchrt werden soll", + "%s has been processed, %s has not been processed.": "%s wurde verarbeitet, %s wurde nicht verarbeitet.", + "Unable to proceed. No matching CRUD resource has been found.": "Fortfahren nicht m\u00f6glich. Es wurde keine passende CRUD-Ressource gefunden.", + "The requested file cannot be downloaded or has already been downloaded.": "Die angeforderte Datei kann nicht heruntergeladen werden oder wurde bereits heruntergeladen.", + "The requested customer cannot be found.": "Der angeforderte Kunde kann kein Fonud sein.", + "Void": "Storno", + "Create Coupon": "Gutschein erstellen", + "helps you creating a coupon.": "hilft Ihnen beim Erstellen eines Gutscheins.", + "Edit Coupon": "Gutschein bearbeiten", + "Editing an existing coupon.": "Einen vorhandenen Gutschein bearbeiten.", + "Invalid Request.": "Ung\u00fcltige Anfrage.", + "Displays the customer account history for %s": "Zeigt den Verlauf des Kundenkontos f\u00fcr %s an", + "Unable to delete a group to which customers are still assigned.": "Eine Gruppe, der noch Kunden zugeordnet sind, kann nicht gel\u00f6scht werden.", + "The customer group has been deleted.": "Die Kundengruppe wurde gel\u00f6scht.", + "Unable to find the requested group.": "Die angeforderte Gruppe kann nicht gefunden werden.", + "The customer group has been successfully created.": "Die Kundengruppe wurde erfolgreich erstellt.", + "The customer group has been successfully saved.": "Die Kundengruppe wurde erfolgreich gespeichert.", + "Unable to transfer customers to the same account.": "Kunden k\u00f6nnen nicht auf dasselbe Konto \u00fcbertragen werden.", + "All the customers has been transferred to the new group %s.": "Alle Kunden wurden in die neue Gruppe %s \u00fcbertragen.", + "The categories has been transferred to the group %s.": "Die Kategorien wurden in die Gruppe %s \u00fcbertragen.", + "No customer identifier has been provided to proceed to the transfer.": "Es wurde keine Kundenkennung angegeben, um mit der \u00dcbertragung fortzufahren.", + "Unable to find the requested group using the provided id.": "Die angeforderte Gruppe kann mit der angegebenen ID nicht gefunden werden.", + "Expenses": "Aufwendungen", + "\"%s\" is not an instance of \"FieldsService\"": "\"%s\" ist keine Instanz von \"FieldsService\"", + "Manage Medias": "Medien verwalten", + "Modules List": "Modulliste", + "List all available modules.": "Listen Sie alle verf\u00fcgbaren Module auf.", + "Upload A Module": "Modul hochladen", + "Extends NexoPOS features with some new modules.": "Erweitert die NexoPOS-Funktionen um einige neue Module.", + "The notification has been successfully deleted": "Die Benachrichtigung wurde erfolgreich gel\u00f6scht", + "All the notifications have been cleared.": "Alle Meldungen wurden gel\u00f6scht.", + "Payment Receipt — %s": "Zahlungsbeleg — %s", + "Order Invoice — %s": "Rechnung — %s bestellen", + "Order Refund Receipt — %s": "Bestellungsr\u00fcckerstattungsbeleg — %s", + "Order Receipt — %s": "Bestellbeleg — %s", + "The printing event has been successfully dispatched.": "Der Druckvorgang wurde erfolgreich versendet.", + "There is a mismatch between the provided order and the order attached to the instalment.": "Es besteht eine Diskrepanz zwischen dem bereitgestellten Auftrag und dem Auftrag, der der Rate beigef\u00fcgt ist.", + "Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.": "Es ist nicht m\u00f6glich, eine auf Lager befindliche Beschaffung zu bearbeiten. Erw\u00e4gen Sie eine Anpassung oder l\u00f6schen Sie entweder die Beschaffung.", + "You cannot change the status of an already paid procurement.": "Sie k\u00f6nnen den Status einer bereits bezahlten Beschaffung nicht \u00e4ndern.", + "The procurement payment status has been changed successfully.": "Der Zahlungsstatus der Beschaffung wurde erfolgreich ge\u00e4ndert.", + "The procurement has been marked as paid.": "Die Beschaffung wurde als bezahlt markiert.", + "New Procurement": "Neue Beschaffung", + "Make a new procurement.": "Machen Sie eine neue Beschaffung.", + "Edit Procurement": "Beschaffung bearbeiten", + "Perform adjustment on existing procurement.": "Anpassung an bestehende Beschaffung durchf\u00fchren.", + "%s - Invoice": "%s - Rechnung", + "list of product procured.": "liste der beschafften Produkte.", + "The product price has been refreshed.": "Der Produktpreis wurde aktualisiert.", + "The single variation has been deleted.": "Die einzelne Variante wurde gel\u00f6scht.", + "Edit a product": "Produkt bearbeiten", + "Makes modifications to a product": "Nimmt \u00c4nderungen an einem Produkt vor", + "Create a product": "Erstellen Sie ein Produkt", + "Add a new product on the system": "Neues Produkt im System hinzuf\u00fcgen", + "Stock Adjustment": "Bestandsanpassung", + "Adjust stock of existing products.": "Passen Sie den Bestand an vorhandenen Produkten an.", + "No stock is provided for the requested product.": "F\u00fcr das angeforderte Produkt ist kein Lagerbestand vorgesehen.", + "The product unit quantity has been deleted.": "Die Menge der Produkteinheit wurde gel\u00f6scht.", + "Unable to proceed as the request is not valid.": "Die Anfrage kann nicht fortgesetzt werden, da sie ung\u00fcltig ist.", + "Unsupported action for the product %s.": "Nicht unterst\u00fctzte Aktion f\u00fcr das Produkt %s.", + "The stock has been adjustment successfully.": "Der Bestand wurde erfolgreich angepasst.", + "Unable to add the product to the cart as it has expired.": "Das Produkt kann nicht in den Warenkorb gelegt werden, da es abgelaufen ist.", + "Unable to add a product that has accurate tracking enabled, using an ordinary barcode.": "Es ist nicht m\u00f6glich, ein Produkt mit aktivierter genauer Verfolgung mit einem gew\u00f6hnlichen Barcode hinzuzuf\u00fcgen.", + "There is no products matching the current request.": "Es gibt keine Produkte, die der aktuellen Anfrage entsprechen.", + "Print Labels": "Etiketten drucken", + "Customize and print products labels.": "Anpassen und Drucken von Produktetiketten.", + "Procurements by \"%s\"": "Beschaffungen von \"%s\"", + "Sales Report": "Verkaufsbericht", + "Provides an overview over the sales during a specific period": "Bietet einen \u00dcberblick \u00fcber die Verk\u00e4ufe in einem bestimmten Zeitraum", + "Sales Progress": "Verkaufsfortschritt", + "Provides an overview over the best products sold during a specific period.": "Bietet einen \u00dcberblick \u00fcber die besten Produkte, die in einem bestimmten Zeitraum verkauft wurden.", + "Sold Stock": "Verkaufter Bestand", + "Provides an overview over the sold stock during a specific period.": "Bietet einen \u00dcberblick \u00fcber den verkauften Bestand w\u00e4hrend eines bestimmten Zeitraums.", + "Stock Report": "Bestandsbericht", + "Provides an overview of the products stock.": "Bietet einen \u00dcberblick \u00fcber den Produktbestand.", + "Profit Report": "Gewinnbericht", + "Provides an overview of the provide of the products sold.": "Bietet einen \u00dcberblick \u00fcber die Bereitstellung der verkauften Produkte.", + "Provides an overview on the activity for a specific period.": "Bietet einen \u00dcberblick \u00fcber die Aktivit\u00e4t f\u00fcr einen bestimmten Zeitraum.", + "Annual Report": "Gesch\u00e4ftsbericht", + "Sales By Payment Types": "Verk\u00e4ufe nach Zahlungsarten", + "Provide a report of the sales by payment types, for a specific period.": "Geben Sie einen Bericht \u00fcber die Verk\u00e4ufe nach Zahlungsarten f\u00fcr einen bestimmten Zeitraum an.", + "The report will be computed for the current year.": "Der Bericht wird f\u00fcr das laufende Jahr berechnet.", + "Unknown report to refresh.": "Unbekannter Bericht zum Aktualisieren.", + "Customers Statement": "Kundenauszug", + "Display the complete customer statement.": "Zeigen Sie die vollst\u00e4ndige Kundenerkl\u00e4rung an.", + "Invalid authorization code provided.": "Ung\u00fcltiger Autorisierungscode angegeben.", + "The database has been successfully seeded.": "Die Datenbank wurde erfolgreich gesetzt.", + "About": "\u00dcber uns", + "Details about the environment.": "Details zur Umwelt.", + "Core Version": "Kernversion", + "Laravel Version": "Laravel Version", + "PHP Version": "PHP-Version", + "Mb String Enabled": "Mb-String aktiviert", + "Zip Enabled": "Zip aktiviert", + "Curl Enabled": "Curl aktiviert", + "Math Enabled": "Mathematik aktiviert", + "XML Enabled": "XML aktiviert", + "XDebug Enabled": "XDebug aktiviert", + "File Upload Enabled": "Datei-Upload aktiviert", + "File Upload Size": "Datei-Upload-Gr\u00f6\u00dfe", + "Post Max Size": "Maximale Beitragsgr\u00f6\u00dfe", + "Max Execution Time": "Max. Ausf\u00fchrungszeit", + "Memory Limit": "Speicherlimit", + "Settings Page Not Found": "Einstellungsseite nicht gefunden", + "Customers Settings": "Kundeneinstellungen", + "Configure the customers settings of the application.": "Konfigurieren Sie die Kundeneinstellungen der Anwendung.", + "General Settings": "Allgemeine Einstellungen", + "Configure the general settings of the application.": "Konfigurieren Sie die allgemeinen Einstellungen der Anwendung.", + "Orders Settings": "Bestellungseinstellungen", + "POS Settings": "POS-Einstellungen", + "Configure the pos settings.": "Konfigurieren Sie die POS-Einstellungen.", + "Workers Settings": "Arbeitereinstellungen", + "%s is not an instance of \"%s\".": "%s ist keine Instanz von \"%s\".", + "Unable to find the requested product tax using the provided id": "Die angeforderte Produktsteuer kann mit der angegebenen ID nicht gefunden werden", + "Unable to find the requested product tax using the provided identifier.": "Die angeforderte Produktsteuer kann mit der angegebenen Kennung nicht gefunden werden.", + "The product tax has been created.": "Die Produktsteuer wurde erstellt.", + "The product tax has been updated": "Die Produktsteuer wurde aktualisiert", + "Unable to retrieve the requested tax group using the provided identifier \"%s\".": "Die angeforderte Steuergruppe kann mit der angegebenen Kennung \"%s\" nicht abgerufen werden.", + "Permission Manager": "Berechtigungs-Manager", + "Manage all permissions and roles": "Alle Berechtigungen und Rollen verwalten", + "My Profile": "Mein Profil", + "Change your personal settings": "Pers\u00f6nliche Einstellungen \u00e4ndern", + "The permissions has been updated.": "Die Berechtigungen wurden aktualisiert.", + "Sunday": "Sonntag", + "Monday": "Montag", + "Tuesday": "Dienstag", + "Wednesday": "Mittwoch", + "Thursday": "Donnerstag", + "Friday": "Freitag", + "Saturday": "Samstag", + "The migration has successfully run.": "Die Migration wurde erfolgreich ausgef\u00fchrt.", + "The recovery has been explicitly disabled.": "Die Wiederherstellung wurde explizit deaktiviert.", + "The registration has been explicitly disabled.": "Die Registrierung wurde explizit deaktiviert.", + "Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.": "Die Einstellungsseite kann nicht initialisiert werden. Die Kennung \"%s\" kann nicht instanziiert werden.", + "Unable to register. The registration is closed.": "Registrierung nicht m\u00f6glich. Die Registrierung ist geschlossen.", + "Hold Order Cleared": "Auftrag in Wartestellung gel\u00f6scht", + "Report Refreshed": "Bericht aktualisiert", + "The yearly report has been successfully refreshed for the year \"%s\".": "Der Jahresbericht wurde erfolgreich f\u00fcr das Jahr \"%s\" aktualisiert.", + "Low Stock Alert": "Warnung bei niedrigem Lagerbestand", + "Procurement Refreshed": "Beschaffung aktualisiert", + "The procurement \"%s\" has been successfully refreshed.": "Die Beschaffung \"%s\" wurde erfolgreich aktualisiert.", + "The transaction was deleted.": "Die Transaktion wurde gel\u00f6scht.", + "[NexoPOS] Activate Your Account": "[NexoPOS] Aktivieren Sie Ihr Konto", + "[NexoPOS] A New User Has Registered": "[NexoPOS] Ein neuer Benutzer hat sich registriert", + "[NexoPOS] Your Account Has Been Created": "[NexoPOS] Ihr Konto wurde erstellt", + "Unknown Payment": "Unbekannte Zahlung", + "Unable to find the permission with the namespace \"%s\".": "Die Berechtigung mit dem Namensraum \"%s\" konnte nicht gefunden werden.", + "Partially Due": "Teilweise f\u00e4llig", + "Take Away": "Take Away", + "The register has been successfully opened": "Die Kasse wurde erfolgreich ge\u00f6ffnet", + "The register has been successfully closed": "Die Kasse wurde erfolgreich geschlossen", + "The provided amount is not allowed. The amount should be greater than \"0\". ": "Der angegebene Betrag ist nicht zul\u00e4ssig. Der Betrag sollte gr\u00f6\u00dfer als \"0\" sein. ", + "The cash has successfully been stored": "Das Bargeld wurde erfolgreich eingelagert", + "Not enough fund to cash out.": "Nicht genug Geld zum Auszahlen.", + "The cash has successfully been disbursed.": "Das Bargeld wurde erfolgreich ausgezahlt.", + "In Use": "In Verwendung", + "Opened": "Ge\u00f6ffnet", + "Delete Selected entries": "Ausgew\u00e4hlte Eintr\u00e4ge l\u00f6schen", + "%s entries has been deleted": "%s Eintr\u00e4ge wurden gel\u00f6scht", + "%s entries has not been deleted": "%s Eintr\u00e4ge wurden nicht gel\u00f6scht", + "A new entry has been successfully created.": "Ein neuer Eintrag wurde erfolgreich erstellt.", + "The entry has been successfully updated.": "Der Eintrag wurde erfolgreich aktualisiert.", + "Unidentified Item": "Nicht identifizierter Artikel", + "Non-existent Item": "Nicht vorhandener Artikel", + "Unable to delete this resource as it has %s dependency with %s item.": "Diese Ressource kann nicht gel\u00f6scht werden, da sie %s -Abh\u00e4ngigkeit mit %s -Element hat.", + "Unable to delete this resource as it has %s dependency with %s items.": "Diese Ressource kann nicht gel\u00f6scht werden, da sie %s Abh\u00e4ngigkeit von %s Elementen hat.", + "Unable to find the customer using the provided id.": "Der Kunde kann mit der angegebenen ID nicht gefunden werden.", + "The customer has been deleted.": "Der Kunde wurde gel\u00f6scht.", + "The customer has been created.": "Der Kunde wurde erstellt.", + "Unable to find the customer using the provided ID.": "Der Kunde kann mit der angegebenen ID nicht gefunden werden.", + "The customer has been edited.": "Der Kunde wurde bearbeitet.", + "Unable to find the customer using the provided email.": "Der Kunde kann mit der angegebenen E-Mail nicht gefunden werden.", + "The customer account has been updated.": "Das Kundenkonto wurde aktualisiert.", + "Issuing Coupon Failed": "Ausgabe des Gutscheins fehlgeschlagen", + "Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.": "Ein Gutschein, der an die Belohnung \"%s\" angeh\u00e4ngt ist, kann nicht angewendet werden. Es sieht so aus, als ob der Gutschein nicht mehr existiert.", + "Unable to find a coupon with the provided code.": "Es kann kein Gutschein mit dem angegebenen Code gefunden werden.", + "The coupon has been updated.": "Der Gutschein wurde aktualisiert.", + "The group has been created.": "Die Gruppe wurde erstellt.", + "Crediting": "Gutschrift", + "Deducting": "Abzug", + "Order Payment": "Zahlung der Bestellung", + "Order Refund": "R\u00fcckerstattung der Bestellung", + "Unknown Operation": "Unbekannter Vorgang", + "Countable": "Z\u00e4hlbar", + "Piece": "St\u00fcck", + "Sales Account": "Verkaufskonto", + "Procurements Account": "Beschaffungskonto", + "Sale Refunds Account": "Verkauf R\u00fcckerstattungen Konto", + "Spoiled Goods Account": "Konto f\u00fcr verderbte Waren", + "Customer Crediting Account": "Kundengutschriftkonto", + "Customer Debiting Account": "Debitor Abbuchungskonto", + "GST": "GST", + "SGST": "SGST", + "CGST": "CGST", + "Sample Procurement %s": "Musterbeschaffung %s", + "generated": "generiert", + "The user attributes has been updated.": "Die Benutzerattribute wurden aktualisiert.", + "Administrator": "Administrator", + "Store Administrator": "Shop-Administrator", + "Store Cashier": "Filialkassierer", + "User": "Benutzer", + "%s products were freed": "%s Produkte wurden freigegeben", + "Restoring cash flow from paid orders...": "Cashflow aus bezahlten Bestellungen wird wiederhergestellt...", + "Restoring cash flow from refunded orders...": "Cashflow aus erstatteten Bestellungen wird wiederhergestellt...", + "Unable to find the requested account type using the provided id.": "Der angeforderte Kontotyp kann mit der angegebenen ID nicht gefunden werden.", + "You cannot delete an account type that has transaction bound.": "Sie k\u00f6nnen keinen Kontotyp l\u00f6schen, f\u00fcr den eine Transaktion gebunden ist.", + "The account type has been deleted.": "Der Kontotyp wurde gel\u00f6scht.", + "The account has been created.": "Das Konto wurde erstellt.", + "Customer Credit Account": "Kundenkreditkonto", + "Customer Debit Account": "Debitorisches Debitkonto", + "Sales Refunds Account": "Konto f\u00fcr Verkaufsr\u00fcckerstattungen", + "Register Cash-In Account": "Kassenkonto registrieren", + "Register Cash-Out Account": "Auszahlungskonto registrieren", + "The media has been deleted": "Das Medium wurde gel\u00f6scht", + "Unable to find the media.": "Das Medium kann nicht gefunden werden.", + "Unable to find the requested file.": "Die angeforderte Datei kann nicht gefunden werden.", + "Unable to find the media entry": "Medieneintrag kann nicht gefunden werden", + "Home": "Startseite", + "Payment Types": "Zahlungsarten", + "Medias": "Medien", + "Customers": "Kunden", + "List": "Liste", + "Create Customer": "Kunde erstellen", + "Customers Groups": "Kundengruppen", + "Create Group": "Kundengruppe erstellen", + "Reward Systems": "Belohnungssysteme", + "Create Reward": "Belohnung erstellen", + "List Coupons": "Gutscheine", + "Providers": "Anbieter", + "Create A Provider": "Anbieter erstellen", + "Accounting": "Buchhaltung", + "Accounts": "Konten", + "Create Account": "Konto erstellen", + "Inventory": "Inventar", + "Create Product": "Produkt erstellen", + "Create Category": "Kategorie erstellen", + "Create Unit": "Einheit erstellen", + "Unit Groups": "Einheitengruppen", + "Create Unit Groups": "Einheitengruppen erstellen", + "Stock Flow Records": "Bestandsflussprotokolle", + "Taxes Groups": "Steuergruppen", + "Create Tax Groups": "Steuergruppen erstellen", + "Create Tax": "Steuer erstellen", + "Modules": "Module", + "Upload Module": "Modul hochladen", + "Users": "Benutzer", + "Create User": "Benutzer erstellen", + "Create Roles": "Rollen erstellen", + "Permissions Manager": "Berechtigungs-Manager", + "Profile": "Profil", + "Procurements": "Beschaffung", + "Reports": "Berichte", + "Sale Report": "Verkaufsbericht", + "Incomes & Loosses": "Einnahmen und Verluste", + "Sales By Payments": "Umsatz nach Zahlungen", + "Settings": "Einstellungen", + "Invoice Settings": "Rechnungseinstellungen", + "Workers": "Arbeiter", + "Reset": "Zur\u00fccksetzen", + "Unable to locate the requested module.": "Das angeforderte Modul kann nicht gefunden werden.", + "The module \"%s\" has been disabled as the dependency \"%s\" is missing. ": "Das Modul \"%s\" wurde deaktiviert, da die Abh\u00e4ngigkeit \"%s\" fehlt. ", + "The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ": "Das Modul \"%s\" wurde deaktiviert, da die Abh\u00e4ngigkeit \"%s\" nicht aktiviert ist. ", + "The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ": "Das Modul \"%s\" wurde deaktiviert, da die Abh\u00e4ngigkeit \"%s\" nicht auf der minimal erforderlichen Version \"%s\" liegt. ", + "The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ": "Das Modul \"%s\" wurde deaktiviert, da die Abh\u00e4ngigkeit \"%s\" von einer Version ist, die \u00fcber die empfohlene \"%s\" hinausgeht. ", + "Unable to detect the folder from where to perform the installation.": "Der Ordner, von dem aus die Installation durchgef\u00fchrt werden soll, kann nicht erkannt werden.", + "The uploaded file is not a valid module.": "Die hochgeladene Datei ist kein g\u00fcltiges Modul.", + "The module has been successfully installed.": "Das Modul wurde erfolgreich installiert.", + "The migration run successfully.": "Die Migration wurde erfolgreich ausgef\u00fchrt.", + "The module has correctly been enabled.": "Das Modul wurde korrekt aktiviert.", + "Unable to enable the module.": "Das Modul kann nicht aktiviert werden.", + "The Module has been disabled.": "Das Modul wurde deaktiviert.", + "Unable to disable the module.": "Das Modul kann nicht deaktiviert werden.", + "Unable to proceed, the modules management is disabled.": "Kann nicht fortfahren, die Modulverwaltung ist deaktiviert.", + "A similar module has been found": "Ein \u00e4hnliches Modul wurde gefunden", + "Missing required parameters to create a notification": "Fehlende erforderliche Parameter zum Erstellen einer Benachrichtigung", + "The order has been placed.": "Die Bestellung wurde aufgegeben.", + "The percentage discount provided is not valid.": "Der angegebene prozentuale Rabatt ist nicht g\u00fcltig.", + "A discount cannot exceed the sub total value of an order.": "Ein Rabatt darf den Zwischensummenwert einer Bestellung nicht \u00fcberschreiten.", + "No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.": "Im Moment wird keine Zahlung erwartet. Wenn der Kunde vorzeitig zahlen m\u00f6chte, sollten Sie das Datum der Ratenzahlung anpassen.", + "The payment has been saved.": "Die Zahlung wurde gespeichert.", + "Unable to edit an order that is completely paid.": "Eine Bestellung, die vollst\u00e4ndig bezahlt wurde, kann nicht bearbeitet werden.", + "Unable to proceed as one of the previous submitted payment is missing from the order.": "Es kann nicht fortgefahren werden, da eine der zuvor eingereichten Zahlungen in der Bestellung fehlt.", + "The order payment status cannot switch to hold as a payment has already been made on that order.": "Der Zahlungsstatus der Bestellung kann nicht auf \"Halten\" ge\u00e4ndert werden, da f\u00fcr diese Bestellung bereits eine Zahlung get\u00e4tigt wurde.", + "Unable to proceed. One of the submitted payment type is not supported.": "Fortfahren nicht m\u00f6glich. Eine der eingereichten Zahlungsarten wird nicht unterst\u00fctzt.", + "Unnamed Product": "Unbenanntes Produkt", + "Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.": "Kann nicht fortfahren, das Produkt \"%s\" hat eine Einheit, die nicht wiederhergestellt werden kann. Es k\u00f6nnte gel\u00f6scht worden sein.", + "Unable to find the customer using the provided ID. The order creation has failed.": "Der Kunde kann mit der angegebenen ID nicht gefunden werden. Die Auftragserstellung ist fehlgeschlagen.", + "Unable to proceed a refund on an unpaid order.": "Eine R\u00fcckerstattung f\u00fcr eine unbezahlte Bestellung kann nicht durchgef\u00fchrt werden.", + "The current credit has been issued from a refund.": "Das aktuelle Guthaben wurde aus einer R\u00fcckerstattung ausgegeben.", + "The order has been successfully refunded.": "Die Bestellung wurde erfolgreich zur\u00fcckerstattet.", + "unable to proceed to a refund as the provided status is not supported.": "kann nicht mit einer R\u00fcckerstattung fortfahren, da der angegebene Status nicht unterst\u00fctzt wird.", + "The product %s has been successfully refunded.": "Das Produkt %s wurde erfolgreich zur\u00fcckerstattet.", + "Unable to find the order product using the provided id.": "Das Bestellprodukt kann mit der angegebenen ID nicht gefunden werden.", + "Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier": "Die angeforderte Bestellung kann mit \"%s\" als Pivot und \"%s\" als Kennung nicht gefunden werden", + "Unable to fetch the order as the provided pivot argument is not supported.": "Die Reihenfolge kann nicht abgerufen werden, da das angegebene Pivot-Argument nicht unterst\u00fctzt wird.", + "The product has been added to the order \"%s\"": "Das Produkt wurde der Bestellung \"%s\" hinzugef\u00fcgt", + "the order has been successfully computed.": "die Bestellung erfolgreich berechnet wurde.", + "The order has been deleted.": "Die Bestellung wurde gel\u00f6scht.", + "The product has been successfully deleted from the order.": "Das Produkt wurde erfolgreich aus der Bestellung gel\u00f6scht.", + "Unable to find the requested product on the provider order.": "Das angeforderte Produkt kann auf der Anbieterbestellung nicht gefunden werden.", + "Ongoing": "Fortlaufend", + "Ready": "Bereit", + "Not Available": "Nicht verf\u00fcgbar", + "Failed": "Fehlgeschlagen", + "Unpaid Orders Turned Due": "Unbezahlte f\u00e4llige Bestellungen", + "No orders to handle for the moment.": "Im Moment gibt es keine Befehle.", + "The order has been correctly voided.": "Die Bestellung wurde korrekt storniert.", + "Unable to edit an already paid instalment.": "Eine bereits bezahlte Rate kann nicht bearbeitet werden.", + "The instalment has been saved.": "Die Rate wurde gespeichert.", + "The instalment has been deleted.": "Die Rate wurde gel\u00f6scht.", + "The defined amount is not valid.": "Der definierte Betrag ist ung\u00fcltig.", + "No further instalments is allowed for this order. The total instalment already covers the order total.": "F\u00fcr diese Bestellung sind keine weiteren Raten zul\u00e4ssig. Die Gesamtrate deckt bereits die Gesamtsumme der Bestellung ab.", + "The instalment has been created.": "Die Rate wurde erstellt.", + "The provided status is not supported.": "Der angegebene Status wird nicht unterst\u00fctzt.", + "The order has been successfully updated.": "Die Bestellung wurde erfolgreich aktualisiert.", + "Unable to find the requested procurement using the provided identifier.": "Die angeforderte Beschaffung kann mit der angegebenen Kennung nicht gefunden werden.", + "Unable to find the assigned provider.": "Der zugewiesene Anbieter kann nicht gefunden werden.", + "The procurement has been created.": "Die Beschaffung wurde angelegt.", + "Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.": "Eine bereits vorr\u00e4tige Beschaffung kann nicht bearbeitet werden. Bitte ber\u00fccksichtigen Sie die Durchf\u00fchrung und Bestandsanpassung.", + "The provider has been edited.": "Der Anbieter wurde bearbeitet.", + "Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"": "Es ist nicht m\u00f6glich, eine Einheitengruppen-ID f\u00fcr das Produkt mit der Referenz \"%s\" als \"%s\" zu haben", + "The operation has completed.": "Der Vorgang ist abgeschlossen.", + "The procurement has been refreshed.": "Die Beschaffung wurde aktualisiert.", + "The procurement has been reset.": "Die Beschaffung wurde zur\u00fcckgesetzt.", + "The procurement products has been deleted.": "Die Beschaffungsprodukte wurden gel\u00f6scht.", + "The procurement product has been updated.": "Das Beschaffungsprodukt wurde aktualisiert.", + "Unable to find the procurement product using the provided id.": "Das Beschaffungsprodukt kann mit der angegebenen ID nicht gefunden werden.", + "The product %s has been deleted from the procurement %s": "Das Produkt %s wurde aus der Beschaffung %s gel\u00f6scht", + "The product with the following ID \"%s\" is not initially included on the procurement": "Das Produkt mit der folgenden ID \"%s\" ist zun\u00e4chst nicht in der Beschaffung enthalten", + "The procurement products has been updated.": "Die Beschaffungsprodukte wurden aktualisiert.", + "Procurement Automatically Stocked": "Beschaffung Automatisch best\u00fcckt", + "Draft": "Entwurf", + "The category has been created": "Die Kategorie wurde erstellt", + "Unable to find the product using the provided id.": "Das Produkt kann mit der angegebenen ID nicht gefunden werden.", + "Unable to find the requested product using the provided SKU.": "Das angeforderte Produkt kann mit der angegebenen SKU nicht gefunden werden.", + "The variable product has been created.": "Das variable Produkt wurde erstellt.", + "The provided barcode \"%s\" is already in use.": "Der angegebene Barcode \"%s\" wird bereits verwendet.", + "The provided SKU \"%s\" is already in use.": "Die angegebene SKU \"%s\" wird bereits verwendet.", + "The product has been saved.": "Das Produkt wurde gespeichert.", + "A grouped product cannot be saved without any sub items.": "Ein gruppiertes Produkt kann nicht ohne Unterelemente gespeichert werden.", + "A grouped product cannot contain grouped product.": "Ein gruppiertes Produkt darf kein gruppiertes Produkt enthalten.", + "The provided barcode is already in use.": "Der angegebene Barcode wird bereits verwendet.", + "The provided SKU is already in use.": "Die angegebene SKU wird bereits verwendet.", + "The product has been updated": "Das Produkt wurde aktualisiert", + "The subitem has been saved.": "Der Unterpunkt wurde gespeichert.", + "The variable product has been updated.": "Das variable Produkt wurde aktualisiert.", + "The product variations has been reset": "Die Produktvariationen wurden zur\u00fcckgesetzt", + "The product has been reset.": "Das Produkt wurde zur\u00fcckgesetzt.", + "The product \"%s\" has been successfully deleted": "Das Produkt \"%s\" wurde erfolgreich gel\u00f6scht", + "Unable to find the requested variation using the provided ID.": "Die angeforderte Variante kann mit der angegebenen ID nicht gefunden werden.", + "The product stock has been updated.": "Der Produktbestand wurde aktualisiert.", + "The action is not an allowed operation.": "Die Aktion ist keine erlaubte Operation.", + "The product quantity has been updated.": "Die Produktmenge wurde aktualisiert.", + "There is no variations to delete.": "Es gibt keine zu l\u00f6schenden Variationen.", + "There is no products to delete.": "Es gibt keine Produkte zu l\u00f6schen.", + "The product variation has been successfully created.": "Die Produktvariante wurde erfolgreich erstellt.", + "The product variation has been updated.": "Die Produktvariante wurde aktualisiert.", + "The provider has been created.": "Der Anbieter wurde erstellt.", + "The provider has been updated.": "Der Anbieter wurde aktualisiert.", + "Unable to find the provider using the specified id.": "Der Anbieter kann mit der angegebenen ID nicht gefunden werden.", + "The provider has been deleted.": "Der Anbieter wurde gel\u00f6scht.", + "Unable to find the provider using the specified identifier.": "Der Anbieter mit der angegebenen Kennung kann nicht gefunden werden.", + "The provider account has been updated.": "Das Anbieterkonto wurde aktualisiert.", + "The procurement payment has been deducted.": "Die Beschaffungszahlung wurde abgezogen.", + "The dashboard report has been updated.": "Der Dashboard-Bericht wurde aktualisiert.", + "Untracked Stock Operation": "Nicht nachverfolgter Lagerbetrieb", + "Unsupported action": "Nicht unterst\u00fctzte Aktion", + "The expense has been correctly saved.": "Der Aufwand wurde korrekt gespeichert.", + "The report has been computed successfully.": "Der Bericht wurde erfolgreich berechnet.", + "The table has been truncated.": "Die Tabelle wurde abgeschnitten.", + "Untitled Settings Page": "Unbenannte Einstellungsseite", + "No description provided for this settings page.": "F\u00fcr diese Einstellungsseite wurde keine Beschreibung angegeben.", + "The form has been successfully saved.": "Das Formular wurde erfolgreich gespeichert.", + "Unable to reach the host": "Der Gastgeber kann nicht erreicht werden", + "Unable to connect to the database using the credentials provided.": "Es kann keine Verbindung zur Datenbank mit den angegebenen Anmeldeinformationen hergestellt werden.", + "Unable to select the database.": "Die Datenbank kann nicht ausgew\u00e4hlt werden.", + "Access denied for this user.": "Zugriff f\u00fcr diesen Benutzer verweigert.", + "Incorrect Authentication Plugin Provided.": "Falsches Authentifizierungs-Plugin bereitgestellt.", + "The connexion with the database was successful": "Die Verbindung zur Datenbank war erfolgreich", + "NexoPOS has been successfully installed.": "NexoPOS wurde erfolgreich installiert.", + "Cash": "Barmittel", + "Bank Payment": "Bankzahlung", + "Customer Account": "Kundenkonto", + "Database connection was successful.": "Datenbankverbindung war erfolgreich.", + "A tax cannot be his own parent.": "Eine Steuer kann nicht sein eigener Elternteil sein.", + "The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".": "Die Steuerhierarchie ist auf 1 beschr\u00e4nkt. Bei einer Teilsteuer darf nicht die Steuerart auf \u201egruppiert\u201c gesetzt sein.", + "Unable to find the requested tax using the provided identifier.": "Die angeforderte Steuer kann mit der angegebenen Kennung nicht gefunden werden.", + "The tax group has been correctly saved.": "Die Steuergruppe wurde korrekt gespeichert.", + "The tax has been correctly created.": "Die Steuer wurde korrekt erstellt.", + "The tax has been successfully deleted.": "Die Steuer wurde erfolgreich gel\u00f6scht.", + "The Unit Group has been created.": "Die Einheitengruppe wurde erstellt.", + "The unit group %s has been updated.": "Die Einheitengruppe %s wurde aktualisiert.", + "Unable to find the unit group to which this unit is attached.": "Die Einheitengruppe, mit der dieses Einheit verbunden ist, kann nicht gefunden werden.", + "The unit has been saved.": "Die Einheit wurde gespeichert.", + "Unable to find the Unit using the provided id.": "Die Einheit kann mit der angegebenen ID nicht gefunden werden.", + "The unit has been updated.": "Die Einheit wurde aktualisiert.", + "The unit group %s has more than one base unit": "Die Einheitengruppe %s hat mehr als eine Basiseinheit", + "The unit has been deleted.": "Die Einheit wurde gel\u00f6scht.", + "The %s is already taken.": "Die %s ist bereits vergeben.", + "Clone of \"%s\"": "Klon von \"%s\"", + "The role has been cloned.": "Die Rolle wurde geklont.", + "unable to find this validation class %s.": "diese Validierungsklasse %s kann nicht gefunden werden.", + "Store Name": "Name", + "This is the store name.": "Dies ist der Name des Gesch\u00e4fts.", + "Store Address": "Adresse", + "The actual store address.": "Die tats\u00e4chliche Adresse des Stores.", + "Store City": "Ort", + "The actual store city.": "Der Ort in dem sich das Gesch\u00e4ft befindet.", + "Store Phone": "Telefon", + "The phone number to reach the store.": "Die Telefonnummer, um das Gesch\u00e4ft zu erreichen.", + "Store Email": "E-Mail", + "The actual store email. Might be used on invoice or for reports.": "Die tats\u00e4chliche Gesch\u00e4fts-E-Mail. Kann auf Rechnungen oder f\u00fcr Berichte verwendet werden.", + "Store PO.Box": "Postfach", + "The store mail box number.": "Die Postfachnummer des Gesch\u00e4fts.", + "Store Fax": "Fax", + "The store fax number.": "Die Faxnummer des Gesch\u00e4fts.", + "Store Additional Information": "Zus\u00e4tzliche Informationen", + "Store additional information.": "Zus\u00e4tzliche Informationen zum Gesch\u00e4ft.", + "Store Square Logo": "Quadratisches Logo", + "Choose what is the square logo of the store.": "W\u00e4hlen Sie das quadratische Logo des Gesch\u00e4fts.", + "Store Rectangle Logo": "Rechteckiges Logo", + "Choose what is the rectangle logo of the store.": "W\u00e4hlen Sie das rechteckige Logo des Gesch\u00e4fts.", + "Define the default fallback language.": "Definieren Sie die Standard-Fallback-Sprache.", + "Define the default theme.": "Definieren Sie das Standard-Theme.", + "Currency": "W\u00e4hrung", + "Currency Symbol": "W\u00e4hrungssymbol", + "This is the currency symbol.": "Dies ist das W\u00e4hrungssymbol.", + "Currency ISO": "W\u00e4hrung ISO", + "The international currency ISO format.": "Das ISO-Format f\u00fcr internationale W\u00e4hrungen.", + "Currency Position": "W\u00e4hrungsposition", + "Before the amount": "Vor dem Betrag", + "After the amount": "Nach dem Betrag", + "Define where the currency should be located.": "Definieren Sie, wo sich die W\u00e4hrung befinden soll.", + "Preferred Currency": "Bevorzugte W\u00e4hrung", + "ISO Currency": "ISO-W\u00e4hrung", + "Symbol": "Symbol", + "Determine what is the currency indicator that should be used.": "Bestimmen Sie, welches W\u00e4hrungskennzeichen verwendet werden soll.", + "Currency Thousand Separator": "Tausendertrennzeichen", + "Currency Decimal Separator": "W\u00e4hrung Dezimaltrennzeichen", + "Define the symbol that indicate decimal number. By default \".\" is used.": "Definieren Sie das Symbol, das die Dezimalzahl angibt. Standardm\u00e4\u00dfig wird \".\" verwendet.", + "Currency Precision": "W\u00e4hrungsgenauigkeit", + "%s numbers after the decimal": "%s Zahlen nach der Dezimalstelle", + "Date Format": "Datumsformat", + "This define how the date should be defined. The default format is \"Y-m-d\".": "Diese definieren, wie das Datum definiert werden soll. Das Standardformat ist \"Y-m-d\".", + "Registration": "Registrierung", + "Registration Open": "Registrierung offen", + "Determine if everyone can register.": "Bestimmen Sie, ob sich jeder registrieren kann.", + "Registration Role": "Registrierungsrolle", + "Select what is the registration role.": "W\u00e4hlen Sie die Registrierungsrolle aus.", + "Requires Validation": "Validierung erforderlich", + "Force account validation after the registration.": "Kontovalidierung nach der Registrierung erzwingen.", + "Allow Recovery": "Wiederherstellung zulassen", + "Allow any user to recover his account.": "Erlauben Sie jedem Benutzer, sein Konto wiederherzustellen.", + "Procurement Cash Flow Account": "Cashflow-Konto Beschaffung", + "Sale Cash Flow Account": "Verkauf Cashflow-Konto", + "Stock return for spoiled items will be attached to this account": "Die Lagerr\u00fcckgabe f\u00fcr besch\u00e4digte Artikel wird diesem Konto beigef\u00fcgt", + "Enable Reward": "Belohnung aktivieren", + "Will activate the reward system for the customers.": "Aktiviert das Belohnungssystem f\u00fcr die Kunden.", + "Require Valid Email": "G\u00fcltige E-Mail-Adresse erforderlich", + "Will for valid unique email for every customer.": "Will f\u00fcr g\u00fcltige eindeutige E-Mail f\u00fcr jeden Kunden.", + "Require Unique Phone": "Eindeutige Telefonnummer erforderlich", + "Every customer should have a unique phone number.": "Jeder Kunde sollte eine eindeutige Telefonnummer haben.", + "Default Customer Account": "Standardkundenkonto", + "Default Customer Group": "Standardkundengruppe", + "Select to which group each new created customers are assigned to.": "W\u00e4hlen Sie aus, welcher Gruppe jeder neu angelegte Kunde zugeordnet ist.", + "Enable Credit & Account": "Guthaben & Konto aktivieren", + "The customers will be able to make deposit or obtain credit.": "Die Kunden k\u00f6nnen Einzahlungen vornehmen oder Kredite erhalten.", + "Receipts": "Quittungen", + "Receipt Template": "Belegvorlage", + "Default": "Standard", + "Choose the template that applies to receipts": "W\u00e4hlen Sie die Vorlage, die f\u00fcr Belege gilt", + "Receipt Logo": "Quittungslogo", + "Provide a URL to the logo.": "Geben Sie eine URL zum Logo an.", + "Merge Products On Receipt\/Invoice": "Produkte bei Eingang\/Rechnung zusammenf\u00fchren", + "All similar products will be merged to avoid a paper waste for the receipt\/invoice.": "Alle \u00e4hnlichen Produkte werden zusammengef\u00fchrt, um Papierverschwendung f\u00fcr den Beleg\/die Rechnung zu vermeiden.", + "Receipt Footer": "Beleg-Fu\u00dfzeile", + "If you would like to add some disclosure at the bottom of the receipt.": "Wenn Sie am Ende des Belegs eine Offenlegung hinzuf\u00fcgen m\u00f6chten.", + "Column A": "Spalte A", + "Column B": "Spalte B", + "Order Code Type": "Bestellcode Typ", + "Determine how the system will generate code for each orders.": "Bestimmen Sie, wie das System f\u00fcr jede Bestellung Code generiert.", + "Sequential": "Sequentiell", + "Random Code": "Zufallscode", + "Number Sequential": "Nummer Sequentiell", + "Allow Unpaid Orders": "Unbezahlte Bestellungen zulassen", + "Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".": "Verhindert, dass unvollst\u00e4ndige Bestellungen aufgegeben werden. Wenn Gutschrift erlaubt ist, sollte diese Option auf \u201eJa\u201c gesetzt werden.", + "Allow Partial Orders": "Teilauftr\u00e4ge zulassen", + "Will prevent partially paid orders to be placed.": "Verhindert, dass teilweise bezahlte Bestellungen aufgegeben werden.", + "Quotation Expiration": "Angebotsablaufdatum", + "Quotations will get deleted after they defined they has reached.": "Angebote werden gel\u00f6scht, nachdem sie definiert wurden.", + "%s Days": "%s Tage", + "Features": "Funktionen", + "Show Quantity": "Menge anzeigen", + "Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.": "Zeigt die Mengenauswahl bei der Auswahl eines Produkts an. Andernfalls wird die Standardmenge auf 1 gesetzt.", + "Merge Similar Items": "\u00c4hnliche Elemente zusammenf\u00fchren", + "Will enforce similar products to be merged from the POS.": "Wird \u00e4hnliche Produkte erzwingen, die vom POS zusammengef\u00fchrt werden sollen.", + "Allow Wholesale Price": "Gro\u00dfhandelspreis zulassen", + "Define if the wholesale price can be selected on the POS.": "Legen Sie fest, ob der Gro\u00dfhandelspreis am POS ausgew\u00e4hlt werden kann.", + "Allow Decimal Quantities": "Dezimalmengen zulassen", + "Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.": "\u00c4ndert die numerische Tastatur, um Dezimalzahlen f\u00fcr Mengen zuzulassen. Nur f\u00fcr \"default\" numpad.", + "Allow Customer Creation": "Kundenerstellung zulassen", + "Allow customers to be created on the POS.": "Erm\u00f6glichen Sie die Erstellung von Kunden am POS.", + "Quick Product": "Schnelles Produkt", + "Allow quick product to be created from the POS.": "Erm\u00f6glicht die schnelle Erstellung von Produkten am POS.", + "Editable Unit Price": "Bearbeitbarer St\u00fcckpreis", + "Allow product unit price to be edited.": "Erlaube die Bearbeitung des Produktpreises pro Einheit.", + "Show Price With Tax": "Preis mit Steuer anzeigen", + "Will display price with tax for each products.": "Zeigt den Preis mit Steuern f\u00fcr jedes Produkt an.", + "Order Types": "Auftragstypen", + "Control the order type enabled.": "Steuern Sie die Bestellart aktiviert.", + "Numpad": "Numpad", + "Advanced": "Erweitert", + "Will set what is the numpad used on the POS screen.": "Legt fest, welches Nummernblock auf dem POS-Bildschirm verwendet wird.", + "Force Barcode Auto Focus": "Barcode-Autofokus erzwingen", + "Will permanently enable barcode autofocus to ease using a barcode reader.": "Aktiviert dauerhaft den Barcode-Autofokus, um die Verwendung eines Barcodelesers zu vereinfachen.", + "Bubble": "Blase", + "Ding": "Ding", + "Pop": "Pop", + "Cash Sound": "Cash Sound", + "Layout": "Layout", + "Retail Layout": "Einzelhandelslayout", + "Clothing Shop": "Bekleidungsgesch\u00e4ft", + "POS Layout": "POS-Layout", + "Change the layout of the POS.": "\u00c4ndern Sie das Layout des Pos.", + "Sale Complete Sound": "Sale Complete Sound", + "New Item Audio": "Neues Element Audio", + "The sound that plays when an item is added to the cart.": "Der Ton, der abgespielt wird, wenn ein Artikel in den Warenkorb gelegt wird.", + "Printing": "Drucken", + "Printed Document": "Gedrucktes Dokument", + "Choose the document used for printing aster a sale.": "W\u00e4hlen Sie das Dokument aus, das f\u00fcr den Druck von Aster A Sale verwendet wird.", + "Printing Enabled For": "Drucken aktiviert f\u00fcr", + "All Orders": "Alle Bestellungen", + "From Partially Paid Orders": "Von teilweise bezahlten Bestellungen", + "Only Paid Orders": "Nur bezahlte Bestellungen", + "Determine when the printing should be enabled.": "Legen Sie fest, wann der Druck aktiviert werden soll.", + "Printing Gateway": "Druck-Gateway", + "Determine what is the gateway used for printing.": "Bestimmen Sie, welches Gateway f\u00fcr den Druck verwendet wird.", + "Enable Cash Registers": "Registrierkassen aktivieren", + "Determine if the POS will support cash registers.": "Bestimmen Sie, ob der Pos Kassen unterst\u00fctzt.", + "Cashier Idle Counter": "Kassierer Idle Counter", + "5 Minutes": "5 Minuten", + "10 Minutes": "10 Minuten", + "15 Minutes": "15 Minuten", + "20 Minutes": "20 Minuten", + "30 Minutes": "30 Minuten", + "Selected after how many minutes the system will set the cashier as idle.": "Ausgew\u00e4hlt, nach wie vielen Minuten das System den Kassierer als Leerlauf einstellt.", + "Cash Disbursement": "Barauszahlung", + "Allow cash disbursement by the cashier.": "Barauszahlung durch den Kassierer zulassen.", + "Cash Registers": "Registrierkassen", + "Keyboard Shortcuts": "Tastenkombinationen", + "Cancel Order": "Bestellung stornieren", + "Keyboard shortcut to cancel the current order.": "Tastenkombination, um die aktuelle Bestellung abzubrechen.", + "Hold Order": "Auftrag halten", + "Keyboard shortcut to hold the current order.": "Tastenkombination, um die aktuelle Reihenfolge zu halten.", + "Keyboard shortcut to create a customer.": "Tastenkombination zum Erstellen eines Kunden.", + "Proceed Payment": "Zahlung fortsetzen", + "Keyboard shortcut to proceed to the payment.": "Tastenkombination, um mit der Zahlung fortzufahren.", + "Open Shipping": "Versand \u00f6ffnen", + "Keyboard shortcut to define shipping details.": "Tastenkombination zum Definieren von Versanddetails.", + "Open Note": "Anmerkung \u00f6ffnen", + "Keyboard shortcut to open the notes.": "Tastenkombination zum \u00d6ffnen der Notizen.", + "Order Type Selector": "Order Type Selector", + "Keyboard shortcut to open the order type selector.": "Tastenkombination zum \u00d6ffnen des Order Type Selector.", + "Toggle Fullscreen": "Vollbildmodus umschalten", + "Keyboard shortcut to toggle fullscreen.": "Tastenkombination zum Umschalten des Vollbildmodus.", + "Quick Search": "Schnellsuche", + "Keyboard shortcut open the quick search popup.": "Tastenkombination \u00f6ffnet das Popup f\u00fcr die Schnellsuche.", + "Toggle Product Merge": "Produktzusammenf\u00fchrung umschalten", + "Will enable or disable the product merging.": "Aktiviert oder deaktiviert die Produktzusammenf\u00fchrung.", + "Amount Shortcuts": "Betrag Shortcuts", + "VAT Type": "Umsatzsteuer-Typ", + "Determine the VAT type that should be used.": "Bestimmen Sie die Umsatzsteuerart, die verwendet werden soll.", + "Flat Rate": "Pauschale", + "Flexible Rate": "Flexibler Tarif", + "Products Vat": "Produkte MwSt.", + "Products & Flat Rate": "Produkte & Flatrate", + "Products & Flexible Rate": "Produkte & Flexibler Tarif", + "Define the tax group that applies to the sales.": "Definieren Sie die Steuergruppe, die f\u00fcr den Umsatz gilt.", + "Define how the tax is computed on sales.": "Legen Sie fest, wie die Steuer auf den Umsatz berechnet wird.", + "VAT Settings": "MwSt.-Einstellungen", + "Enable Email Reporting": "E-Mail-Berichterstattung aktivieren", + "Determine if the reporting should be enabled globally.": "Legen Sie fest, ob das Reporting global aktiviert werden soll.", + "Supplies": "Vorr\u00e4te", + "Public Name": "\u00d6ffentlicher Name", + "Define what is the user public name. If not provided, the username is used instead.": "Definieren Sie den \u00f6ffentlichen Benutzernamen. Wenn nicht angegeben, wird stattdessen der Benutzername verwendet.", + "Enable Workers": "Mitarbeiter aktivieren", + "Test": "Test", + "OK": "OK", + "Howdy, {name}": "Hallo, {name}", + "This field must contain a valid email address.": "Dieses Feld muss eine g\u00fcltige E-Mail-Adresse enthalten.", + "Okay": "Okay", + "Go Back": "Zur\u00fcck", + "Save": "Speichern", + "Filters": "Filter", + "Has Filters": "Hat Filter", + "{entries} entries selected": "{entries} Eintr\u00e4ge ausgew\u00e4hlt", + "Download": "Herunterladen", + "There is nothing to display...": "Es gibt nichts anzuzeigen...", + "Bulk Actions": "Massenaktionen", + "Apply": "Anwenden", + "displaying {perPage} on {items} items": "{perPage} von {items} Elemente", + "The document has been generated.": "Das Dokument wurde erstellt.", + "Unexpected error occurred.": "Unerwarteter Fehler aufgetreten.", + "Clear Selected Entries ?": "Ausgew\u00e4hlte Eintr\u00e4ge l\u00f6schen ?", + "Would you like to clear all selected entries ?": "M\u00f6chten Sie alle ausgew\u00e4hlten Eintr\u00e4ge l\u00f6schen ?", + "Would you like to perform the selected bulk action on the selected entries ?": "M\u00f6chten Sie die ausgew\u00e4hlte Massenaktion f\u00fcr die ausgew\u00e4hlten Eintr\u00e4ge ausf\u00fchren?", + "No selection has been made.": "Es wurde keine Auswahl getroffen.", + "No action has been selected.": "Es wurde keine Aktion ausgew\u00e4hlt.", + "N\/D": "N\/D", + "Range Starts": "Bereich startet", + "Range Ends": "Bereich endet", + "Sun": "So", + "Mon": "Mo", + "Tue": "Di", + "Wed": "Mi", + "Fri": "Fr", + "Sat": "Sa", + "Nothing to display": "Nichts anzuzeigen", + "Enter": "Eingeben", + "Search...": "Suche...", + "An unexpected error occurred.": "Ein unerwarteter Fehler ist aufgetreten.", + "Choose an option": "W\u00e4hlen Sie eine Option", + "Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".": "Die Komponente \"${action.component}\" kann nicht geladen werden. Stellen Sie sicher, dass die Komponente auf \"nsExtraComponents\" registriert ist.", + "Unknown Status": "Unbekannter Status", + "Password Forgotten ?": "Passwort vergessen ?", + "Sign In": "Anmelden", + "Register": "Registrieren", + "Unable to proceed the form is not valid.": "Das Formular kann nicht fortgesetzt werden.", + "Save Password": "Passwort speichern", + "Remember Your Password ?": "Passwort merken ?", + "Submit": "Absenden", + "Already registered ?": "Bereits registriert ?", + "Return": "Zur\u00fcck", + "Best Cashiers": "Beste Kassierer", + "No result to display.": "Kein Ergebnis zum Anzeigen.", + "Well.. nothing to show for the meantime.": "Nun... nichts, was ich in der Zwischenzeit zeigen k\u00f6nnte.", + "Best Customers": "Beste Kunden", + "Well.. nothing to show for the meantime": "Naja.. nichts was man in der Zwischenzeit zeigen kann", + "Total Sales": "Gesamtumsatz", + "Today": "Heute", + "Total Refunds": "R\u00fcckerstattungen insgesamt", + "Clients Registered": "Registrierte Kunden", + "Commissions": "Provisionen", + "Incomplete Orders": "Unvollst\u00e4ndige Bestellungen", + "Weekly Sales": "W\u00f6chentliche Verk\u00e4ufe", + "Week Taxes": "Steuern pro Woche", + "Net Income": "Nettoertrag", + "Week Expenses": "Wochenausgaben", + "Current Week": "Aktuelle Woche", + "Previous Week": "Vorherige Woche", + "Upload": "Hochladen", + "Enable": "Aktivieren", + "Disable": "Deaktivieren", + "Gallery": "Galerie", + "Confirm Your Action": "Best\u00e4tigen Sie Ihre Aktion", + "Medias Manager": "Medien Manager", + "Click Here Or Drop Your File To Upload": "Klicken Sie hier oder legen Sie Ihre Datei zum Hochladen ab", + "Nothing has already been uploaded": "Es wurde nocht nichts hochgeladen", + "File Name": "Dateiname", + "Uploaded At": "Hochgeladen um", + "Previous": "Zur\u00fcck", + "Next": "Weiter", + "Use Selected": "Ausgew\u00e4hlte verwenden", + "Clear All": "Alles l\u00f6schen", + "Would you like to clear all the notifications ?": "M\u00f6chten Sie alle Benachrichtigungen l\u00f6schen ?", + "Permissions": "Berechtigungen", + "Payment Summary": "Zahlungs\u00fcbersicht", + "Order Status": "Bestellstatus", + "Processing Status": "Bearbeitungsstatus", + "Refunded Products": "R\u00fcckerstattete Produkte", + "All Refunds": "Alle R\u00fcckerstattungen", + "Would you proceed ?": "W\u00fcrden Sie fortfahren ?", + "The processing status of the order will be changed. Please confirm your action.": "Der Bearbeitungsstatus der Bestellung wird ge\u00e4ndert. Bitte best\u00e4tigen Sie Ihre Aktion.", + "The delivery status of the order will be changed. Please confirm your action.": "Der Lieferstatus der Bestellung wird ge\u00e4ndert. Bitte best\u00e4tigen Sie Ihre Aktion.", + "Payment Method": "Zahlungsmethode", + "Before submitting the payment, choose the payment type used for that order.": "W\u00e4hlen Sie vor dem Absenden der Zahlung die Zahlungsart aus, die f\u00fcr diese Bestellung verwendet wird.", + "Submit Payment": "Zahlung einreichen", + "Select the payment type that must apply to the current order.": "W\u00e4hlen Sie die Zahlungsart aus, die f\u00fcr die aktuelle Bestellung gelten muss.", + "Payment Type": "Zahlungsart", + "An unexpected error has occurred": "Ein unerwarteter Fehler ist aufgetreten", + "The form is not valid.": "Das Formular ist ung\u00fcltig.", + "Update Instalment Date": "Aktualisiere Ratenzahlungstermin", + "Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.": "M\u00f6chten Sie diese Rate heute als f\u00e4llig markieren? Wenn Sie best\u00e4tigen, wird die Rate als bezahlt markiert.", + "Create": "Erstellen", + "Add Instalment": "Ratenzahlung hinzuf\u00fcgen", + "Would you like to create this instalment ?": "M\u00f6chten Sie diese Rate erstellen?", + "Would you like to delete this instalment ?": "M\u00f6chten Sie diese Rate l\u00f6schen?", + "Would you like to update that instalment ?": "M\u00f6chten Sie diese Rate aktualisieren?", + "Print": "Drucken", + "Store Details": "Store-Details", + "Order Code": "Bestellnummer", + "Cashier": "Kassierer", + "Billing Details": "Rechnungsdetails", + "Shipping Details": "Versanddetails", + "No payment possible for paid order.": "Keine Zahlung f\u00fcr bezahlte Bestellung m\u00f6glich.", + "Payment History": "Zahlungsverlauf", + "Unknown": "Unbekannt", + "Refund With Products": "R\u00fcckerstattung mit Produkten", + "Refund Shipping": "Versandkostenr\u00fcckerstattung", + "Add Product": "Produkt hinzuf\u00fcgen", + "Summary": "Zusammenfassung", + "Payment Gateway": "Zahlungs-Gateway", + "Screen": "Eingabe", + "Select the product to perform a refund.": "W\u00e4hlen Sie das Produkt aus, um eine R\u00fcckerstattung durchzuf\u00fchren.", + "Please select a payment gateway before proceeding.": "Bitte w\u00e4hlen Sie ein Zahlungs-Gateway, bevor Sie fortfahren.", + "There is nothing to refund.": "Es gibt nichts zu erstatten.", + "Please provide a valid payment amount.": "Bitte geben Sie einen g\u00fcltigen Zahlungsbetrag an.", + "The refund will be made on the current order.": "Die R\u00fcckerstattung erfolgt auf die aktuelle Bestellung.", + "Please select a product before proceeding.": "Bitte w\u00e4hlen Sie ein Produkt aus, bevor Sie fortfahren.", + "Not enough quantity to proceed.": "Nicht genug Menge, um fortzufahren.", + "Would you like to delete this product ?": "M\u00f6chten Sie dieses Produkt l\u00f6schen?", + "Order Type": "Bestellart", + "Cart": "Warenkorb", + "Comments": "Anmerkungen", + "No products added...": "Keine Produkte hinzugef\u00fcgt...", + "Price": "Preis", + "Tax Inclusive": "Inklusive Steuern", + "Pay": "Bezahlen", + "Apply Coupon": "Gutschein einl\u00f6sen", + "The product price has been updated.": "Der Produktpreis wurde aktualisiert.", + "The editable price feature is disabled.": "Die bearbeitbare Preisfunktion ist deaktiviert.", + "Unable to hold an order which payment status has been updated already.": "Es kann keine Bestellung gehalten werden, deren Zahlungsstatus bereits aktualisiert wurde.", + "Unable to change the price mode. This feature has been disabled.": "Der Preismodus kann nicht ge\u00e4ndert werden. Diese Funktion wurde deaktiviert.", + "Enable WholeSale Price": "Gro\u00dfhandelspreis aktivieren", + "Would you like to switch to wholesale price ?": "M\u00f6chten Sie zum Gro\u00dfhandelspreis wechseln?", + "Enable Normal Price": "Normalpreis aktivieren", + "Would you like to switch to normal price ?": "M\u00f6chten Sie zum Normalpreis wechseln?", + "Search for products.": "Nach Produkten suchen.", + "Toggle merging similar products.": "Schaltet das Zusammenf\u00fchren \u00e4hnlicher Produkte um.", + "Toggle auto focus.": "Autofokus umschalten.", + "Current Balance": "Aktuelles Guthaben", + "Full Payment": "Vollst\u00e4ndige Zahlung", + "The customer account can only be used once per order. Consider deleting the previously used payment.": "Das Kundenkonto kann nur einmal pro Bestellung verwendet werden. Erw\u00e4gen Sie, die zuvor verwendete Zahlung zu l\u00f6schen.", + "Not enough funds to add {amount} as a payment. Available balance {balance}.": "Nicht genug Geld, um {amount} als Zahlung hinzuzuf\u00fcgen. Verf\u00fcgbares Guthaben {balance}.", + "Confirm Full Payment": "Vollst\u00e4ndige Zahlung best\u00e4tigen", + "A full payment will be made using {paymentType} for {total}": "Eine vollst\u00e4ndige Zahlung erfolgt mit {paymentType} f\u00fcr {total}", + "You need to provide some products before proceeding.": "Sie m\u00fcssen einige Produkte bereitstellen, bevor Sie fortfahren k\u00f6nnen.", + "Unable to add the product, there is not enough stock. Remaining %s": "Das Produkt kann nicht hinzugef\u00fcgt werden, es ist nicht genug vorr\u00e4tig. Verbleibende %s", + "Add Images": "Bilder hinzuf\u00fcgen", + "Remove Image": "Bild entfernen", + "New Group": "Neue Gruppe", + "Available Quantity": "Verf\u00fcgbare Menge", + "Would you like to delete this group ?": "M\u00f6chten Sie diese Gruppe l\u00f6schen?", + "Your Attention Is Required": "Ihre Aufmerksamkeit ist erforderlich", + "Please select at least one unit group before you proceed.": "Bitte w\u00e4hlen Sie mindestens eine Einheitengruppe aus, bevor Sie fortfahren.", + "Unable to proceed, more than one product is set as featured": "Kann nicht fortfahren, mehr als ein Produkt ist als empfohlen festgelegt", + "Unable to proceed as one of the unit group field is invalid": "Es kann nicht fortgefahren werden, da eines der Einheitengruppenfelder ung\u00fcltig ist", + "Would you like to delete this variation ?": "M\u00f6chten Sie diese Variante l\u00f6schen?", + "Details": "Details", + "No result match your query.": "Kein Ergebnis stimmt mit Ihrer Anfrage \u00fcberein.", + "Unable to proceed, no product were provided.": "Kann nicht fortfahren, es wurde kein Produkt bereitgestellt.", + "Unable to proceed, one or more product has incorrect values.": "Kann nicht fortfahren, ein oder mehrere Produkte haben falsche Werte.", + "Unable to proceed, the procurement form is not valid.": "Kann nicht fortfahren, das Beschaffungsformular ist ung\u00fcltig.", + "Unable to submit, no valid submit URL were provided.": "Kann nicht gesendet werden, es wurde keine g\u00fcltige Sende-URL angegeben.", + "No title is provided": "Kein Titel angegeben", + "Search products...": "Produkte suchen...", + "Set Sale Price": "Verkaufspreis festlegen", + "Remove": "Entfernen", + "No product are added to this group.": "Dieser Gruppe wurde kein Produkt hinzugef\u00fcgt.", + "Delete Sub item": "Unterpunkt l\u00f6schen", + "Would you like to delete this sub item?": "M\u00f6chten Sie diesen Unterpunkt l\u00f6schen?", + "Unable to add a grouped product.": "Ein gruppiertes Produkt kann nicht hinzugef\u00fcgt werden.", + "Choose The Unit": "W\u00e4hlen Sie die Einheit", + "An unexpected error occurred": "Ein unerwarteter Fehler ist aufgetreten", + "Ok": "Ok", + "The product already exists on the table.": "Das Produkt liegt bereits auf dem Tisch.", + "The specified quantity exceed the available quantity.": "Die angegebene Menge \u00fcberschreitet die verf\u00fcgbare Menge.", + "Unable to proceed as the table is empty.": "Kann nicht fortfahren, da die Tabelle leer ist.", + "The stock adjustment is about to be made. Would you like to confirm ?": "Die Bestandsanpassung ist im Begriff, vorgenommen zu werden. M\u00f6chten Sie best\u00e4tigen ?", + "More Details": "Weitere Details", + "Useful to describe better what are the reasons that leaded to this adjustment.": "N\u00fctzlich, um besser zu beschreiben, was die Gr\u00fcnde sind, die zu dieser Anpassung gef\u00fchrt haben.", + "The reason has been updated.": "Der Grund wurde aktualisiert.", + "Would you like to remove this product from the table ?": "M\u00f6chten Sie dieses Produkt aus dem Tisch entfernen?", + "Search": "Suche", + "Search and add some products": "Suche und f\u00fcge einige Produkte hinzu", + "Proceed": "Fortfahren", + "Low Stock Report": "Bericht \u00fcber geringe Lagerbest\u00e4nde", + "Report Type": "Berichtstyp", + "Unable to proceed. Select a correct time range.": "Fortfahren nicht m\u00f6glich. W\u00e4hlen Sie einen korrekten Zeitbereich.", + "Unable to proceed. The current time range is not valid.": "Fortfahren nicht m\u00f6glich. Der aktuelle Zeitbereich ist nicht g\u00fcltig.", + "Categories Detailed": "Kategorien Detailliert", + "Categories Summary": "Zusammenfassung der Kategorien", + "Allow you to choose the report type.": "Erlauben Sie Ihnen, den Berichtstyp auszuw\u00e4hlen.", + "Filter User": "Benutzer filtern", + "All Users": "Alle Benutzer", + "No user was found for proceeding the filtering.": "Es wurde kein Benutzer f\u00fcr die Fortsetzung der Filterung gefunden.", + "Would you like to proceed ?": "M\u00f6chten Sie fortfahren ?", + "This form is not completely loaded.": "Dieses Formular ist nicht vollst\u00e4ndig geladen.", + "No rules has been provided.": "Es wurden keine Regeln festgelegt.", + "No valid run were provided.": "Es wurde kein g\u00fcltiger Lauf angegeben.", + "Unable to proceed, the form is invalid.": "Kann nicht fortfahren, das Formular ist ung\u00fcltig.", + "Unable to proceed, no valid submit URL is defined.": "Kann nicht fortfahren, es ist keine g\u00fcltige Absende-URL definiert.", + "No title Provided": "Kein Titel angegeben", + "Add Rule": "Regel hinzuf\u00fcgen", + "Save Settings": "Einstellungen speichern", + "Try Again": "Erneut versuchen", + "Updating": "Aktualisieren", + "Updating Modules": "Module werden aktualisiert", + "New Transaction": "Neue Transaktion", + "Close": "Schlie\u00dfen", + "Search Filters": "Suchfilter", + "Clear Filters": "Filter l\u00f6schen", + "Use Filters": "Filter verwenden", + "Would you like to delete this order": "M\u00f6chten Sie diese Bestellung l\u00f6schen", + "The current order will be void. This action will be recorded. Consider providing a reason for this operation": "Die aktuelle Bestellung ist ung\u00fcltig. Diese Aktion wird aufgezeichnet. Erw\u00e4gen Sie, einen Grund f\u00fcr diese Operation anzugeben", + "Order Options": "Bestelloptionen", + "Payments": "Zahlungen", + "Refund & Return": "R\u00fcckerstattung & R\u00fcckgabe", + "available": "verf\u00fcgbar", + "Order Refunds": "R\u00fcckerstattungen f\u00fcr Bestellungen", + "Input": "Eingabe", + "Close Register": "Kasse schlie\u00dfen", + "Register Options": "Registrierungsoptionen", + "Sales": "Vertrieb", + "History": "Geschichte", + "Unable to open this register. Only closed register can be opened.": "Diese Kasse kann nicht ge\u00f6ffnet werden. Es kann nur geschlossenes Register ge\u00f6ffnet werden.", + "Open The Register": "\u00d6ffnen Sie die Kasse", + "Exit To Orders": "Zu Bestellungen zur\u00fcckkehren", + "Looks like there is no registers. At least one register is required to proceed.": "Sieht aus, als g\u00e4be es keine Kassen. Zum Fortfahren ist mindestens ein Register erforderlich.", + "Create Cash Register": "Registrierkasse erstellen", + "Load Coupon": "Coupon laden", + "Apply A Coupon": "Gutschein einl\u00f6sen", + "Load": "Laden", + "Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.": "Geben Sie den Gutscheincode ein, der f\u00fcr den Pos gelten soll. Wenn ein Coupon f\u00fcr einen Kunden ausgestellt wird, muss dieser Kunde vorher ausgew\u00e4hlt werden.", + "Click here to choose a customer.": "Klicken Sie hier, um einen Kunden auszuw\u00e4hlen.", + "Coupon Name": "Coupon-Name", + "Unlimited": "Unbegrenzt", + "Not applicable": "Nicht zutreffend", + "Active Coupons": "Aktive Gutscheine", + "No coupons applies to the cart.": "Es gelten keine Gutscheine f\u00fcr den Warenkorb.", + "Cancel": "Abbrechen", + "The coupon is out from validity date range.": "Der Gutschein liegt au\u00dferhalb des G\u00fcltigkeitszeitraums.", + "The coupon has applied to the cart.": "Der Gutschein wurde auf den Warenkorb angewendet.", + "Unknown Type": "Unbekannter Typ", + "You must select a customer before applying a coupon.": "Sie m\u00fcssen einen Kunden ausw\u00e4hlen, bevor Sie einen Gutschein einl\u00f6sen k\u00f6nnen.", + "The coupon has been loaded.": "Der Gutschein wurde geladen.", + "Use": "Verwendung", + "No coupon available for this customer": "F\u00fcr diesen Kunden ist kein Gutschein verf\u00fcgbar", + "Select Customer": "Kunden ausw\u00e4hlen", + "Selected": "Ausgew\u00e4hlt", + "No customer match your query...": "Kein Kunde stimmt mit Ihrer Anfrage \u00fcberein...", + "Create a customer": "Einen Kunden erstellen", + "Save Customer": "Kunden speichern", + "Not Authorized": "Nicht autorisiert", + "Creating customers has been explicitly disabled from the settings.": "Das Erstellen von Kunden wurde in den Einstellungen explizit deaktiviert.", + "No Customer Selected": "Kein Kunde ausgew\u00e4hlt", + "In order to see a customer account, you need to select one customer.": "Um ein Kundenkonto zu sehen, m\u00fcssen Sie einen Kunden ausw\u00e4hlen.", + "Summary For": "Zusammenfassung f\u00fcr", + "Total Purchases": "K\u00e4ufe insgesamt", + "Wallet Amount": "Wallet-Betrag", + "Last Purchases": "Letzte K\u00e4ufe", + "No orders...": "Keine Befehle...", + "Transaction": "Transaktion", + "No History...": "Kein Verlauf...", + "No coupons for the selected customer...": "Keine Gutscheine f\u00fcr den ausgew\u00e4hlten Kunden...", + "Use Coupon": "Gutschein verwenden", + "No rewards available the selected customer...": "Keine Belohnungen f\u00fcr den ausgew\u00e4hlten Kunden verf\u00fcgbar...", + "Account Transaction": "Kontotransaktion", + "Removing": "Entfernen", + "Refunding": "R\u00fcckerstattung", + "Unknow": "Unbekannt", + "An error occurred while opening the order options": "Beim \u00d6ffnen der Bestelloptionen ist ein Fehler aufgetreten", + "Use Customer ?": "Kunden verwenden?", + "No customer is selected. Would you like to proceed with this customer ?": "Es wurde kein Kunde ausgew\u00e4hlt. M\u00f6chten Sie mit diesem Kunden fortfahren?", + "Change Customer ?": "Kunden \u00e4ndern?", + "Would you like to assign this customer to the ongoing order ?": "M\u00f6chten Sie diesen Kunden der laufenden Bestellung zuordnen?", + "Product Discount": "Produktrabatt", + "Cart Discount": "Warenkorb-Rabatt", + "The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.": "Die aktuelle Bestellung wird in die Warteschleife gesetzt. Sie k\u00f6nnen diese Bestellung \u00fcber die Schaltfl\u00e4che \"Ausstehende Bestellung\" zur\u00fcckziehen. Die Angabe eines Verweises darauf k\u00f6nnte Ihnen helfen, die Bestellung schneller zu identifizieren.", + "Confirm": "Best\u00e4tigen", + "Layaway Parameters": "Layaway-Parameter", + "Minimum Payment": "Mindestzahlung", + "Instalments & Payments": "Raten & Zahlungen", + "The final payment date must be the last within the instalments.": "Der letzte Zahlungstermin muss der letzte innerhalb der Raten sein.", + "There is no instalment defined. Please set how many instalments are allowed for this order": "Es ist keine Rate definiert. Bitte legen Sie fest, wie viele Raten f\u00fcr diese Bestellung zul\u00e4ssig sind", + "Skip Instalments": "Raten \u00fcberspringen", + "You must define layaway settings before proceeding.": "Sie m\u00fcssen die Layaway-Einstellungen definieren, bevor Sie fortfahren.", + "Please provide instalments before proceeding.": "Bitte geben Sie Raten an, bevor Sie fortfahren.", + "Unable to process, the form is not valid": "Das Formular kann nicht verarbeitet werden", + "One or more instalments has an invalid date.": "Eine oder mehrere Raten haben ein ung\u00fcltiges Datum.", + "One or more instalments has an invalid amount.": "Eine oder mehrere Raten haben einen ung\u00fcltigen Betrag.", + "One or more instalments has a date prior to the current date.": "Eine oder mehrere Raten haben ein Datum vor dem aktuellen Datum.", + "The payment to be made today is less than what is expected.": "Die heute zu leistende Zahlung ist geringer als erwartet.", + "Total instalments must be equal to the order total.": "Die Gesamtraten m\u00fcssen der Gesamtsumme der Bestellung entsprechen.", + "Order Note": "Anmerkung zur Bestellung", + "Note": "Anmerkung", + "More details about this order": "Weitere Details zu dieser Bestellung", + "Display On Receipt": "Auf Beleg anzeigen", + "Will display the note on the receipt": "Zeigt die Anmerkung auf dem Beleg an", + "Open": "Offen", + "Order Settings": "Bestellungseinstellungen", + "Define The Order Type": "Definieren Sie den Auftragstyp", + "No payment type has been selected on the settings. Please check your POS features and choose the supported order type": "In den Einstellungen wurde keine Zahlungsart ausgew\u00e4hlt. Bitte \u00fcberpr\u00fcfen Sie Ihre POS-Funktionen und w\u00e4hlen Sie die unterst\u00fctzte Bestellart", + "Read More": "Weiterlesen", + "Select Payment Gateway": "Zahlungsart ausw\u00e4hlen", + "Gateway": "Gateway", + "Payment List": "Zahlungsliste", + "List Of Payments": "Liste der Zahlungen", + "No Payment added.": "Keine Zahlung hinzugef\u00fcgt.", + "Layaway": "Layaway", + "On Hold": "Wartend", + "Nothing to display...": "Nichts anzuzeigen...", + "Product Price": "Produktpreis", + "Define Quantity": "Menge definieren", + "Please provide a quantity": "Bitte geben Sie eine Menge an", + "Product \/ Service": "Produkt \/ Dienstleistung", + "Unable to proceed. The form is not valid.": "Fortfahren nicht m\u00f6glich. Das Formular ist ung\u00fcltig.", + "Provide a unique name for the product.": "Geben Sie einen eindeutigen Namen f\u00fcr das Produkt an.", + "Define the product type.": "Definieren Sie den Produkttyp.", + "Normal": "Normal", + "Dynamic": "Dynamisch", + "In case the product is computed based on a percentage, define the rate here.": "Wenn das Produkt auf der Grundlage eines Prozentsatzes berechnet wird, definieren Sie hier den Satz.", + "Define what is the sale price of the item.": "Definieren Sie den Verkaufspreis des Artikels.", + "Set the quantity of the product.": "Legen Sie die Menge des Produkts fest.", + "Assign a unit to the product.": "Weisen Sie dem Produkt eine Einheit zu.", + "Define what is tax type of the item.": "Definieren Sie, was die Steuerart der Position ist.", + "Choose the tax group that should apply to the item.": "W\u00e4hlen Sie die Steuergruppe, die f\u00fcr den Artikel gelten soll.", + "Search Product": "Produkt suchen", + "There is nothing to display. Have you started the search ?": "Es gibt nichts anzuzeigen. Haben Sie mit der Suche begonnen?", + "Unable to add the product": "Das Produkt kann nicht hinzugef\u00fcgt werden", + "No result to result match the search value provided.": "Kein Ergebnis entspricht dem angegebenen Suchwert.", + "Shipping & Billing": "Versand & Abrechnung", + "Tax & Summary": "Steuer & Zusammenfassung", + "No tax is active": "Keine Steuer aktiv", + "Product Taxes": "Produktsteuern", + "Select Tax": "Steuer ausw\u00e4hlen", + "Define the tax that apply to the sale.": "Definieren Sie die Steuer, die f\u00fcr den Verkauf gilt.", + "Define how the tax is computed": "Definieren Sie, wie die Steuer berechnet wird", + "The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.": "Die f\u00fcr dieses Produkt konfigurierte Einheit fehlt oder ist nicht zugewiesen. Bitte \u00fcberpr\u00fcfen Sie die Registerkarte \"Einheit\" f\u00fcr dieses Produkt.", + "Define when that specific product should expire.": "Definieren Sie, wann dieses spezifische Produkt ablaufen soll.", + "Renders the automatically generated barcode.": "Rendert den automatisch generierten Barcode.", + "Adjust how tax is calculated on the item.": "Passen Sie an, wie die Steuer auf den Artikel berechnet wird.", + "Units & Quantities": "Einheiten & Mengen", + "Select": "Ausw\u00e4hlen", + "The customer has been loaded": "Der Kunde wurde geladen", + "Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.": "Der Standardkunde kann nicht ausgew\u00e4hlt werden. Sieht so aus, als ob der Kunde nicht mehr existiert. Erw\u00e4gen Sie, den Standardkunden in den Einstellungen zu \u00e4ndern.", + "OKAY": "OKAY", + "Some products has been added to the cart. Would youl ike to discard this order ?": "Einige Produkte wurden in den Warenkorb gelegt. W\u00fcrden Sie diese Bestellung gerne verwerfen?", + "This coupon is already added to the cart": "Dieser Gutschein wurde bereits in den Warenkorb gelegt", + "Unable to delete a payment attached to the order.": "Eine mit der Bestellung verbundene Zahlung kann nicht gel\u00f6scht werden.", + "No tax group assigned to the order": "Keine Steuergruppe dem Auftrag zugeordnet", + "Before saving this order, a minimum payment of {amount} is required": "Vor dem Speichern dieser Bestellung ist eine Mindestzahlung von {amount} erforderlich", + "Unable to proceed": "Fortfahren nicht m\u00f6glich", + "Layaway defined": "Layaway definiert", + "Initial Payment": "Erstzahlung", + "In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?": "Um fortzufahren, ist eine erste Zahlung in H\u00f6he von {amount} f\u00fcr die ausgew\u00e4hlte Zahlungsart \"{paymentType}\" erforderlich. M\u00f6chten Sie fortfahren ?", + "The request was canceled": "Die Anfrage wurde storniert", + "Partially paid orders are disabled.": "Teilweise bezahlte Bestellungen sind deaktiviert.", + "An order is currently being processed.": "Eine Bestellung wird gerade bearbeitet.", + "An error has occurred while computing the product.": "Beim Berechnen des Produkts ist ein Fehler aufgetreten.", + "The discount has been set to the cart subtotal.": "Der Rabatt wurde auf die Zwischensumme des Warenkorbs festgelegt.", + "An unexpected error has occurred while fecthing taxes.": "Bei der Berechnung der Steuern ist ein unerwarteter Fehler aufgetreten.", + "Order Deletion": "L\u00f6schen der Bestellung", + "The current order will be deleted as no payment has been made so far.": "Die aktuelle Bestellung wird gel\u00f6scht, da noch keine Zahlung erfolgt ist.", + "Void The Order": "Die Bestellung stornieren", + "Unable to void an unpaid order.": "Eine unbezahlte Bestellung kann nicht storniert werden.", + "Loading...": "Wird geladen...", + "Logout": "Abmelden", + "Unnamed Page": "Unnamed Page", + "No description": "Keine Beschreibung", + "Activate Your Account": "Aktivieren Sie Ihr Konto", + "The account you have created for __%s__, require an activation. In order to proceed, please click on the following link": "Das Konto, das Sie f\u00fcr __%s__ erstellt haben, erfordert eine Aktivierung. Um fortzufahren, klicken Sie bitte auf den folgenden Link", + "Password Recovered": "Passwort wiederhergestellt", + "Your password has been successfully updated on __%s__. You can now login with your new password.": "Ihr Passwort wurde am __%s__ erfolgreich aktualisiert. Sie k\u00f6nnen sich jetzt mit Ihrem neuen Passwort anmelden.", + "Password Recovery": "Passwort-Wiederherstellung", + "Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ": "Jemand hat darum gebeten, dein Passwort auf __\"%s\"__ zur\u00fcckzusetzen. Wenn Sie sich daran erinnern, dass Sie diese Anfrage gestellt haben, klicken Sie bitte auf die Schaltfl\u00e4che unten. ", + "Reset Password": "Passwort zur\u00fccksetzen", + "New User Registration": "Neue Benutzerregistrierung", + "Your Account Has Been Created": "Ihr Konto wurde erstellt", + "Login": "Anmelden", + "Environment Details": "Umgebungsdetails", + "Properties": "Eigenschaften", + "Extensions": "Erweiterungen", + "Configurations": "Konfigurationen", + "Learn More": "Mehr erfahren", + "Save Coupon": "Gutschein speichern", + "This field is required": "Dieses Feld ist erforderlich", + "The form is not valid. Please check it and try again": "Das Formular ist ung\u00fcltig. Bitte \u00fcberpr\u00fcfen Sie es und versuchen Sie es erneut", + "mainFieldLabel not defined": "mainFieldLabel nicht definiert", + "Create Customer Group": "Kundengruppe erstellen", + "Save a new customer group": "Eine neue Kundengruppe speichern", + "Update Group": "Gruppe aktualisieren", + "Modify an existing customer group": "\u00c4ndern einer bestehenden Kundengruppe", + "Managing Customers Groups": "Verwalten von Kundengruppen", + "Create groups to assign customers": "Erstellen Sie Gruppen, um Kunden zuzuweisen", + "Managing Customers": "Verwalten von Kunden", + "List of registered customers": "Liste der registrierten Kunden", + "Log out": "Abmelden", + "Your Module": "Ihr Modul", + "Choose the zip file you would like to upload": "W\u00e4hlen Sie die ZIP-Datei, die Sie hochladen m\u00f6chten", + "Managing Orders": "Bestellungen verwalten", + "Manage all registered orders.": "Verwalten Sie alle registrierten Bestellungen.", + "Payment receipt": "Zahlungsbeleg", + "Hide Dashboard": "Dashboard ausblenden", + "Receipt — %s": "Beleg — %s", + "Order receipt": "Auftragseingang", + "Refund receipt": "R\u00fcckerstattungsbeleg", + "Current Payment": "Aktuelle Zahlung", + "Total Paid": "Bezahlte Gesamtsumme", + "Unable to proceed no products has been provided.": "Es konnten keine Produkte bereitgestellt werden.", + "Unable to proceed, one or more products is not valid.": "Kann nicht fortfahren, ein oder mehrere Produkte sind ung\u00fcltig.", + "Unable to proceed the procurement form is not valid.": "Das Beschaffungsformular kann nicht fortgesetzt werden.", + "Unable to proceed, no submit url has been provided.": "Kann nicht fortfahren, es wurde keine \u00dcbermittlungs-URL angegeben.", + "SKU, Barcode, Product name.": "SKU, Barcode, Produktname.", + "First Address": "Erste Adresse", + "Second Address": "Zweite Adresse", + "Address": "Adresse", + "Search Products...": "Produkte suchen...", + "Included Products": "Enthaltene Produkte", + "Apply Settings": "Einstellungen anwenden", + "Basic Settings": "Grundeinstellungen", + "Visibility Settings": "Sichtbarkeitseinstellungen", + "Unable to load the report as the timezone is not set on the settings.": "Der Bericht kann nicht geladen werden, da die Zeitzone in den Einstellungen nicht festgelegt ist.", + "Year": "Jahr", + "Recompute": "Neuberechnung", + "Income": "Einkommen", + "January": "J\u00e4nner", + "March": "M\u00e4rz", + "April": "April", + "May": "Mai", + "June": "Juni", + "July": "Juli", + "August": "August", + "September": "September", + "October": "Oktober", + "November": "November", + "December": "Dezember", + "Sort Results": "Ergebnisse sortieren nach ...", + "Using Quantity Ascending": "Menge aufsteigend", + "Using Quantity Descending": "Menge absteigend", + "Using Sales Ascending": "Verk\u00e4ufe aufsteigend", + "Using Sales Descending": "Verk\u00e4ufe absteigend", + "Using Name Ascending": "Name aufsteigend", + "Using Name Descending": "Name absteigend", + "Progress": "Fortschritt", + "No results to show.": "Keine Ergebnisse zum Anzeigen.", + "Start by choosing a range and loading the report.": "Beginnen Sie mit der Auswahl eines Bereichs und dem Laden des Berichts.", + "Search Customer...": "Kunden suchen...", + "Due Amount": "F\u00e4lliger Betrag", + "Wallet Balance": "Wallet-Guthaben", + "Total Orders": "Gesamtbestellungen", + "There is no product to display...": "Es gibt kein Produkt zum Anzeigen...", + "Profit": "Gewinn", + "Sales Discounts": "Verkaufsrabatte", + "Sales Taxes": "Umsatzsteuern", + "Discounts": "Rabatte", + "Reward System Name": "Name des Belohnungssystems", + "Your system is running in production mode. You probably need to build the assets": "Ihr System wird im Produktionsmodus ausgef\u00fchrt. Sie m\u00fcssen wahrscheinlich die Assets erstellen", + "Your system is in development mode. Make sure to build the assets.": "Ihr System befindet sich im Entwicklungsmodus. Stellen Sie sicher, dass Sie die Assets bauen.", + "How to change database configuration": "So \u00e4ndern Sie die Datenbankkonfiguration", + "Setup": "Setup", + "Common Database Issues": "H\u00e4ufige Datenbankprobleme", + "Documentation": "Dokumentation", + "Sign Up": "Registrieren", + "X Days After Month Starts": "X Tage nach Monatsbeginn", + "On Specific Day": "An einem bestimmten Tag", + "Unknown Occurance": "Unbekanntes Vorkommnis", + "Done": "Erledigt", + "Would you like to delete \"%s\"?": "Möchten Sie „%s“ löschen?", + "Unable to find a module having as namespace \"%s\"": "Es konnte kein Modul mit dem Namensraum „%s“ gefunden werden.", + "Api File": "API-Datei", + "Migrations": "Migrationen", + "Determine Until When the coupon is valid.": "Bestimmen Sie, bis wann der Gutschein gültig ist.", + "Customer Groups": "Kundengruppen", + "Assigned To Customer Group": "Der Kundengruppe zugeordnet", + "Only the customers who belongs to the selected groups will be able to use the coupon.": "Nur die Kunden, die zu den ausgewählten Gruppen gehören, können den Gutschein verwenden.", + "Assigned To Customers": "Kunden zugeordnet", + "Only the customers selected will be ale to use the coupon.": "Nur die ausgewählten Kunden können den Gutschein einlösen.", + "Unable to save the coupon as one of the selected customer no longer exists.": "Der Gutschein kann nicht gespeichert werden, da einer der ausgewählten Kunden nicht mehr existiert.", + "Unable to save the coupon as one of the selected customer group no longer exists.": "Der Coupon kann nicht gespeichert werden, da einer der ausgewählten Kundengruppen nicht mehr existiert.", + "Unable to save the coupon as one of the customers provided no longer exists.": "Der Gutschein kann nicht gespeichert werden, da einer der angegebenen Kunden nicht mehr existiert.", + "Unable to save the coupon as one of the provided customer group no longer exists.": "Der Coupon kann nicht gespeichert werden, da einer der angegebenen Kundengruppen nicht mehr existiert.", + "Coupon Order Histories List": "Liste der Coupon-Bestellhistorien", + "Display all coupon order histories.": "Alle Coupon-Bestellhistorien anzeigen.", + "No coupon order histories has been registered": "Es wurden keine Gutschein-Bestellhistorien registriert", + "Add a new coupon order history": "Fügen Sie eine neue Coupon-Bestellhistorie hinzu", + "Create a new coupon order history": "Erstellen Sie eine neue Gutschein-Bestellhistorie", + "Register a new coupon order history and save it.": "Registrieren Sie einen neuen Coupon-Bestellverlauf und speichern Sie ihn.", + "Edit coupon order history": "Coupon-Bestellverlauf bearbeiten", + "Modify Coupon Order History.": "Coupon-Bestellverlauf ändern.", + "Return to Coupon Order Histories": "Zurück zur Coupon-Bestellhistorie", + "Customer_coupon_id": "Kundencoupon_id", + "Order_id": "Auftragsnummer", + "Discount_value": "Rabattwert", + "Minimum_cart_value": "Minimum_cart_value", + "Maximum_cart_value": "Maximum_cart_value", + "Limit_usage": "Limit_usage", + "Would you like to delete this?": "Möchten Sie dies löschen?", + "Usage History": "Nutzungsverlauf", + "Customer Coupon Histories List": "Liste der Kundengutscheinhistorien", + "Display all customer coupon histories.": "Zeigen Sie alle Kunden-Coupon-Historien an.", + "No customer coupon histories has been registered": "Es wurden keine Kunden-Coupon-Historien registriert", + "Add a new customer coupon history": "Fügen Sie einen Gutscheinverlauf für neue Kunden hinzu", + "Create a new customer coupon history": "Erstellen Sie eine neue Kunden-Coupon-Historie", + "Register a new customer coupon history and save it.": "Registrieren Sie einen neuen Kunden-Coupon-Verlauf und speichern Sie ihn.", + "Edit customer coupon history": "Bearbeiten Sie den Gutscheinverlauf des Kunden", + "Modify Customer Coupon History.": "Ändern Sie den Kunden-Coupon-Verlauf.", + "Return to Customer Coupon Histories": "Zurück zur Kunden-Coupon-Historie", + "Last Name": "Familienname, Nachname", + "Provide the customer last name": "Geben Sie den Nachnamen des Kunden an", + "Provide the billing first name.": "Geben Sie den Vornamen der Rechnung an.", + "Provide the billing last name.": "Geben Sie den Nachnamen der Rechnung an.", + "Provide the shipping First Name.": "Geben Sie den Versand-Vornamen an.", + "Provide the shipping Last Name.": "Geben Sie den Nachnamen des Versands an.", + "Scheduled": "Geplant", + "Set the scheduled date.": "Legen Sie das geplante Datum fest.", + "Account Name": "Kontoname", + "Provider last name if necessary.": "Gegebenenfalls Nachname des Anbieters.", + "Provide the user first name.": "Geben Sie den Vornamen des Benutzers an.", + "Provide the user last name.": "Geben Sie den Nachnamen des Benutzers an.", + "Set the user gender.": "Legen Sie das Geschlecht des Benutzers fest.", + "Set the user phone number.": "Legen Sie die Telefonnummer des Benutzers fest.", + "Set the user PO Box.": "Legen Sie das Postfach des Benutzers fest.", + "Provide the billing First Name.": "Geben Sie den Vornamen der Rechnung an.", + "Last name": "Familienname, Nachname", + "Group Name": "Gruppenname", + "Delete a user": "Einen Benutzer löschen", + "Activated": "Aktiviert", + "type": "Typ", + "User Group": "Benutzergruppe", + "Scheduled On": "Geplant am", + "Biling": "Biling", + "API Token": "API-Token", + "Unable to export if there is nothing to export.": "Der Export ist nicht möglich, wenn nichts zum Exportieren vorhanden ist.", + "%s Coupons": "%s Gutscheine", + "%s Coupon History": "%s Gutscheinverlauf", + "\"%s\" Record History": "\"%s\" Datensatzverlauf", + "The media name was successfully updated.": "Der Medienname wurde erfolgreich aktualisiert.", + "The role was successfully assigned.": "Die Rolle wurde erfolgreich zugewiesen.", + "The role were successfully assigned.": "Die Rolle wurde erfolgreich zugewiesen.", + "Unable to identifier the provided role.": "Die bereitgestellte Rolle konnte nicht identifiziert werden.", + "Good Condition": "Guter Zustand", + "Cron Disabled": "Cron deaktiviert", + "Task Scheduling Disabled": "Aufgabenplanung deaktiviert", + "NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.": "NexoPOS kann keine Hintergrundaufgaben planen. Dadurch können notwendige Funktionen eingeschränkt sein. Klicken Sie hier, um zu erfahren, wie Sie das Problem beheben können.", + "The email \"%s\" is already used for another customer.": "Die E-Mail-Adresse „%s“ wird bereits für einen anderen Kunden verwendet.", + "The provided coupon cannot be loaded for that customer.": "Der bereitgestellte Coupon kann für diesen Kunden nicht geladen werden.", + "The provided coupon cannot be loaded for the group assigned to the selected customer.": "Der bereitgestellte Coupon kann für die dem ausgewählten Kunden zugeordnete Gruppe nicht geladen werden.", + "Unable to use the coupon %s as it has expired.": "Der Gutschein %s kann nicht verwendet werden, da er abgelaufen ist.", + "Unable to use the coupon %s at this moment.": "Der Gutschein %s kann derzeit nicht verwendet werden.", + "Small Box": "Kleine Kiste", + "Box": "Kasten", + "%s on %s directories were deleted.": "%s in %s Verzeichnissen wurden gelöscht.", + "%s on %s files were deleted.": "%s auf %s Dateien wurden gelöscht.", + "First Day Of Month": "Erster Tag des Monats", + "Last Day Of Month": "Letzter Tag des Monats", + "Month middle Of Month": "Monatsmitte", + "{day} after month starts": "{Tag} nach Monatsbeginn", + "{day} before month ends": "{Tag} vor Monatsende", + "Every {day} of the month": "Jeden {Tag} des Monats", + "Days": "Tage", + "Make sure set a day that is likely to be executed": "Stellen Sie sicher, dass Sie einen Tag festlegen, an dem die Ausführung wahrscheinlich ist", + "Invalid Module provided.": "Ungültiges Modul bereitgestellt.", + "The module was \"%s\" was successfully installed.": "Das Modul „%s“ wurde erfolgreich installiert.", + "The modules \"%s\" was deleted successfully.": "Das Modul „%s“ wurde erfolgreich gelöscht.", + "Unable to locate a module having as identifier \"%s\".": "Es konnte kein Modul mit der Kennung „%s“ gefunden werden.", + "All migration were executed.": "Alle Migrationen wurden durchgeführt.", + "Unknown Product Status": "Unbekannter Produktstatus", + "Member Since": "Mitglied seit", + "Total Customers": "Gesamtzahl der Kunden", + "The widgets was successfully updated.": "Die Widgets wurden erfolgreich aktualisiert.", + "The token was successfully created": "Das Token wurde erfolgreich erstellt", + "The token has been successfully deleted.": "Das Token wurde erfolgreich gelöscht.", + "Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".": "Aktivieren Sie Hintergrunddienste für NexoPOS. Aktualisieren Sie, um zu überprüfen, ob die Option auf „Ja“ gesetzt wurde.", + "Will display all cashiers who performs well.": "Zeigt alle Kassierer an, die gute Leistungen erbringen.", + "Will display all customers with the highest purchases.": "Zeigt alle Kunden mit den höchsten Einkäufen an.", + "Expense Card Widget": "Spesenkarten-Widget", + "Will display a card of current and overwall expenses.": "Zeigt eine Karte mit den laufenden Ausgaben und den Zusatzkosten an.", + "Incomplete Sale Card Widget": "Unvollständiges Verkaufskarten-Widget", + "Will display a card of current and overall incomplete sales.": "Zeigt eine Karte mit aktuellen und insgesamt unvollständigen Verkäufen an.", + "Orders Chart": "Auftragsdiagramm", + "Will display a chart of weekly sales.": "Zeigt ein Diagramm der wöchentlichen Verkäufe an.", + "Orders Summary": "Bestellübersicht", + "Will display a summary of recent sales.": "Zeigt eine Zusammenfassung der letzten Verkäufe an.", + "Will display a profile widget with user stats.": "Zeigt ein Profil-Widget mit Benutzerstatistiken an.", + "Sale Card Widget": "Verkaufskarten-Widget", + "Will display current and overall sales.": "Zeigt aktuelle und Gesamtverkäufe an.", + "Return To Calendar": "Zurück zum Kalender", + "Thr": "Thr", + "The left range will be invalid.": "Der linke Bereich ist ungültig.", + "The right range will be invalid.": "Der richtige Bereich ist ungültig.", + "Click here to add widgets": "Klicken Sie hier, um Widgets hinzuzufügen", + "Choose Widget": "Wählen Sie Widget", + "Select with widget you want to add to the column.": "Wählen Sie das Widget aus, das Sie der Spalte hinzufügen möchten.", + "Unamed Tab": "Unbenannter Tab", + "An error unexpected occured while printing.": "Beim Drucken ist ein unerwarteter Fehler aufgetreten.", + "and": "Und", + "{date} ago": "vor {Datum}", + "In {date}": "Im {Datum}", + "An unexpected error occured.": "Es ist ein unerwarteter Fehler aufgetreten.", + "Warning": "Warnung", + "Change Type": "Typ ändern", + "Save Expense": "Kosten sparen", + "No configuration were choosen. Unable to proceed.": "Es wurden keine Konfigurationen ausgewählt. Nicht in der Lage, fortzufahren.", + "Conditions": "Bedingungen", + "By proceeding the current for and all your entries will be cleared. Would you like to proceed?": "Wenn Sie fortfahren, werden alle Ihre Eingaben gelöscht. Möchten Sie fortfahren?", + "No modules matches your search term.": "Keine Module entsprechen Ihrem Suchbegriff.", + "Press \"\/\" to search modules": "Drücken Sie \"\/\", um nach Modulen zu suchen", + "No module has been uploaded yet.": "Es wurde noch kein Modul hochgeladen.", + "{module}": "{Modul}", + "Would you like to delete \"{module}\"? All data created by the module might also be deleted.": "Möchten Sie \"{module}\" löschen? Möglicherweise werden auch alle vom Modul erstellten Daten gelöscht.", + "Search Medias": "Medien durchsuchen", + "Bulk Select": "Massenauswahl", + "Press "\/" to search permissions": "Drücken Sie „\/“. um nach Berechtigungen zu suchen", + "SKU, Barcode, Name": "SKU, Barcode, Name", + "About Token": "Über Token", + "Save Token": "Token speichern", + "Generated Tokens": "Generierte Token", + "Created": "Erstellt", + "Last Use": "Letzte Verwendung", + "Never": "Niemals", + "Expires": "Läuft ab", + "Revoke": "Widerrufen", + "Token Name": "Tokenname", + "This will be used to identifier the token.": "Dies wird zur Identifizierung des Tokens verwendet.", + "Unable to proceed, the form is not valid.": "Der Vorgang kann nicht fortgesetzt werden, da das Formular ungültig ist.", + "An unexpected error occured": "Es ist ein unerwarteter Fehler aufgetreten", + "An Error Has Occured": "Ein Fehler ist aufgetreten", + "Febuary": "Februar", + "Configure": "Konfigurieren", + "This QR code is provided to ease authentication on external applications.": "Dieser QR-Code wird bereitgestellt, um die Authentifizierung bei externen Anwendungen zu erleichtern.", + "Copy And Close": "Kopieren und schließen", + "An error has occured": "Ein Fehler ist aufgetreten", + "Recents Orders": "Letzte Bestellungen", + "Unamed Page": "Unbenannte Seite", + "Assignation": "Zuweisung", + "Incoming Conversion": "Eingehende Konvertierung", + "Outgoing Conversion": "Ausgehende Konvertierung", + "Unknown Action": "Unbekannte Aktion", + "Direct Transaction": "Direkte Transaktion", + "Recurring Transaction": "Wiederkehrende Transaktion", + "Entity Transaction": "Entitätstransaktion", + "Scheduled Transaction": "Geplante Transaktion", + "Unknown Type (%s)": "Unbekannter Typ (%s)", + "What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.": "Was ist der Namespace der CRUD-Ressource? zB: system.users ? [Q] zum Beenden.", + "What is the full model name. eg: App\\Models\\Order ? [Q] to quit.": "Wie lautet der vollständige Modellname? zB: App\\Models\\Order ? [Q] zum Beenden.", + "What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.": "Was sind die ausfüllbaren Spalten in der Tabelle: zB: Benutzername, E-Mail, Passwort? [S] zum Überspringen, [Q] zum Beenden.", + "Unsupported argument provided: \"%s\"": "Nicht unterstütztes Argument angegeben: \"%s\"", + "The authorization token can\\'t be changed manually.": "Das Autorisierungstoken kann nicht manuell geändert werden.", + "Translation process is complete for the module %s !": "Der Übersetzungsprozess für das Modul %s ist abgeschlossen!", + "%s migration(s) has been deleted.": "%s Migration(en) wurden gelöscht.", + "The command has been created for the module \"%s\"!": "Der Befehl wurde für das Modul „%s“ erstellt!", + "The controller has been created for the module \"%s\"!": "Der Controller wurde für das Modul „%s“ erstellt!", + "The event has been created at the following path \"%s\"!": "Das Ereignis wurde unter folgendem Pfad „%s“ erstellt!", + "The listener has been created on the path \"%s\"!": "Der Listener wurde im Pfad „%s“ erstellt!", + "A request with the same name has been found !": "Es wurde eine Anfrage mit demselben Namen gefunden!", + "Unable to find a module having the identifier \"%s\".": "Es konnte kein Modul mit der Kennung „%s“ gefunden werden.", + "Unsupported reset mode.": "Nicht unterstützter Reset-Modus.", + "You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.": "Sie haben keinen gültigen Dateinamen angegeben. Es sollte keine Leerzeichen, Punkte oder Sonderzeichen enthalten.", + "Unable to find a module having \"%s\" as namespace.": "Es konnte kein Modul mit „%s“ als Namespace gefunden werden.", + "A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.": "Eine ähnliche Datei existiert bereits im Pfad „%s“. Verwenden Sie „--force“, um es zu überschreiben.", + "A new form class was created at the path \"%s\"": "Eine neue Formularklasse wurde im Pfad „%s“ erstellt.", + "Unable to proceed, looks like the database can\\'t be used.": "Der Vorgang kann nicht fortgesetzt werden, die Datenbank kann anscheinend nicht verwendet werden.", + "In which language would you like to install NexoPOS ?": "In welcher Sprache möchten Sie NexoPOS installieren?", + "You must define the language of installation.": "Sie müssen die Sprache der Installation definieren.", + "The value above which the current coupon can\\'t apply.": "Der Wert, über dem der aktuelle Gutschein nicht angewendet werden kann.", + "Unable to save the coupon product as this product doens\\'t exists.": "Das Gutscheinprodukt kann nicht gespeichert werden, da dieses Produkt nicht existiert.", + "Unable to save the coupon category as this category doens\\'t exists.": "Die Gutscheinkategorie kann nicht gespeichert werden, da diese Kategorie nicht existiert.", + "Unable to save the coupon as this category doens\\'t exists.": "Der Gutschein kann nicht gespeichert werden, da diese Kategorie nicht existiert.", + "You\\re not allowed to do that.": "Das ist Ihnen nicht gestattet.", + "Crediting (Add)": "Gutschrift (Hinzufügen)", + "Refund (Add)": "Rückerstattung (Hinzufügen)", + "Deducting (Remove)": "Abziehen (Entfernen)", + "Payment (Remove)": "Zahlung (Entfernen)", + "The assigned default customer group doesn\\'t exist or is not defined.": "Die zugewiesene Standardkundengruppe existiert nicht oder ist nicht definiert.", + "Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0": "Bestimmen Sie in Prozent, wie hoch die erste Mindestkreditzahlung ist, die von allen Kunden der Gruppe im Falle einer Kreditbestellung geleistet wird. Wenn es auf „0“ belassen wird", + "You\\'re not allowed to do this operation": "Sie dürfen diesen Vorgang nicht ausführen", + "If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.": "Wenn Sie auf „Nein“ klicken, werden nicht alle Produkte, die dieser Kategorie oder allen Unterkategorien zugeordnet sind, am POS angezeigt.", + "Convert Unit": "Einheit umrechnen", + "The unit that is selected for convertion by default.": "Die Einheit, die standardmäßig zur Umrechnung ausgewählt ist.", + "COGS": "ZÄHNE", + "Used to define the Cost of Goods Sold.": "Wird verwendet, um die Kosten der verkauften Waren zu definieren.", + "Visible": "Sichtbar", + "Define whether the unit is available for sale.": "Legen Sie fest, ob die Einheit zum Verkauf verfügbar ist.", + "Product unique name. If it\\' variation, it should be relevant for that variation": "Eindeutiger Produktname. Wenn es sich um eine Variation handelt, sollte es für diese Variation relevant sein", + "The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.": "Das Produkt ist im Raster nicht sichtbar und kann nur über den Barcodeleser oder den zugehörigen Barcode abgerufen werden.", + "The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.": "Die Kosten der verkauften Waren werden automatisch auf Grundlage der Beschaffung und Umrechnung berechnet.", + "Auto COGS": "Automatische COGS", + "Unknown Type: %s": "Unbekannter Typ: %s", + "Shortage": "Mangel", + "Overage": "Überschuss", + "Transactions List": "Transaktionsliste", + "Display all transactions.": "Alle Transaktionen anzeigen.", + "No transactions has been registered": "Es wurden keine Transaktionen registriert", + "Add a new transaction": "Fügen Sie eine neue Transaktion hinzu", + "Create a new transaction": "Erstellen Sie eine neue Transaktion", + "Register a new transaction and save it.": "Registrieren Sie eine neue Transaktion und speichern Sie sie.", + "Edit transaction": "Transaktion bearbeiten", + "Modify Transaction.": "Transaktion ändern.", + "Return to Transactions": "Zurück zu Transaktionen", + "determine if the transaction is effective or not. Work for recurring and not recurring transactions.": "feststellen, ob die Transaktion wirksam ist oder nicht. Arbeiten Sie für wiederkehrende und nicht wiederkehrende Transaktionen.", + "Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.": "Weisen Sie die Transaktion der Benutzergruppe zu. Die Transaktion wird daher mit der Anzahl der Unternehmen multipliziert.", + "Transaction Account": "Transaktionskonto", + "Assign the transaction to an account430": "Ordnen Sie die Transaktion einem Konto430 zu", + "Is the value or the cost of the transaction.": "Ist der Wert oder die Kosten der Transaktion.", + "If set to Yes, the transaction will trigger on defined occurrence.": "Bei der Einstellung „Ja“ wird die Transaktion bei einem definierten Ereignis ausgelöst.", + "Define how often this transaction occurs": "Legen Sie fest, wie oft diese Transaktion stattfindet", + "Define what is the type of the transactions.": "Definieren Sie die Art der Transaktionen.", + "Trigger": "Auslösen", + "Would you like to trigger this expense now?": "Möchten Sie diese Ausgabe jetzt auslösen?", + "Transactions History List": "Liste der Transaktionshistorien", + "Display all transaction history.": "Zeigen Sie den gesamten Transaktionsverlauf an.", + "No transaction history has been registered": "Es wurde kein Transaktionsverlauf registriert", + "Add a new transaction history": "Fügen Sie einen neuen Transaktionsverlauf hinzu", + "Create a new transaction history": "Erstellen Sie einen neuen Transaktionsverlauf", + "Register a new transaction history and save it.": "Registrieren Sie einen neuen Transaktionsverlauf und speichern Sie ihn.", + "Edit transaction history": "Bearbeiten Sie den Transaktionsverlauf", + "Modify Transactions history.": "Ändern Sie den Transaktionsverlauf.", + "Return to Transactions History": "Zurück zum Transaktionsverlauf", + "Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.": "Geben Sie einen eindeutigen Wert für diese Einheit an. Kann aus einem Namen bestehen, sollte aber keine Leerzeichen oder Sonderzeichen enthalten.", + "Set the limit that can\\'t be exceeded by the user.": "Legen Sie den Grenzwert fest, der vom Benutzer nicht überschritten werden darf.", + "Oops, We\\'re Sorry!!!": "Ups, es tut uns leid!!!", + "Class: %s": "Klasse: %s", + "There\\'s is mismatch with the core version.": "Es besteht eine Nichtübereinstimmung mit der Kernversion.", + "You\\'re not authenticated.": "Sie sind nicht authentifiziert.", + "An error occured while performing your request.": "Beim Ausführen Ihrer Anfrage ist ein Fehler aufgetreten.", + "A mismatch has occured between a module and it\\'s dependency.": "Es ist eine Diskrepanz zwischen einem Modul und seiner Abhängigkeit aufgetreten.", + "You\\'re not allowed to see that page.": "Sie dürfen diese Seite nicht sehen.", + "Post Too Large": "Beitrag zu groß", + "The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini": "Die übermittelte Anfrage ist größer als erwartet. Erwägen Sie eine Erhöhung von „post_max_size“ in Ihrer PHP.ini", + "This field does\\'nt have a valid value.": "Dieses Feld hat keinen gültigen Wert.", + "Describe the direct transaction.": "Beschreiben Sie die direkte Transaktion.", + "If set to yes, the transaction will take effect immediately and be saved on the history.": "Bei der Einstellung „Ja“ wird die Transaktion sofort wirksam und im Verlauf gespeichert.", + "Assign the transaction to an account.": "Ordnen Sie die Transaktion einem Konto zu.", + "set the value of the transaction.": "Legen Sie den Wert der Transaktion fest.", + "Further details on the transaction.": "Weitere Details zur Transaktion.", + "Describe the direct transactions.": "Beschreiben Sie die direkten Transaktionen.", + "set the value of the transactions.": "Legen Sie den Wert der Transaktionen fest.", + "The transactions will be multipled by the number of user having that role.": "Die Transaktionen werden mit der Anzahl der Benutzer mit dieser Rolle multipliziert.", + "Create Sales (needs Procurements)": "Verkäufe erstellen (benötigt Beschaffungen)", + "Set when the transaction should be executed.": "Legen Sie fest, wann die Transaktion ausgeführt werden soll.", + "The addresses were successfully updated.": "Die Adressen wurden erfolgreich aktualisiert.", + "Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.": "Bestimmen Sie den tatsächlichen Wert der Beschaffung. Sobald „Geliefert“ ist, kann der Status nicht mehr geändert werden und der Lagerbestand wird aktualisiert.", + "The register doesn\\'t have an history.": "Das Register hat keinen Verlauf.", + "Unable to check a register session history if it\\'s closed.": "Der Verlauf einer Registrierungssitzung kann nicht überprüft werden, wenn sie geschlossen ist.", + "Register History For : %s": "Registrierungsverlauf für: %s", + "Can\\'t delete a category having sub categories linked to it.": "Eine Kategorie mit verknüpften Unterkategorien kann nicht gelöscht werden.", + "Unable to proceed. The request doesn\\'t provide enough data which could be handled": "Nicht in der Lage, fortzufahren. Die Anfrage stellt nicht genügend Daten bereit, die verarbeitet werden könnten", + "Unable to load the CRUD resource : %s.": "Die CRUD-Ressource konnte nicht geladen werden: %s.", + "Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods": "Elemente können nicht abgerufen werden. Die aktuelle CRUD-Ressource implementiert keine „getEntries“-Methoden", + "The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.": "Die Klasse „%s“ ist nicht definiert. Existiert diese grobe Klasse? Stellen Sie sicher, dass Sie die Instanz registriert haben, wenn dies der Fall ist.", + "The crud columns exceed the maximum column that can be exported (27)": "Die Rohspalten überschreiten die maximale Spalte, die exportiert werden kann (27)", + "This link has expired.": "Dieser Link ist abgelaufen.", + "Account History : %s": "Kontoverlauf: %s", + "Welcome — %s": "Willkommen – %S", + "Upload and manage medias (photos).": "Medien (Fotos) hochladen und verwalten.", + "The product which id is %s doesnt\\'t belong to the procurement which id is %s": "Das Produkt mit der ID %s gehört nicht zur Beschaffung mit der ID %s", + "The refresh process has started. You\\'ll get informed once it\\'s complete.": "Der Aktualisierungsprozess hat begonnen. Sie werden benachrichtigt, sobald der Vorgang abgeschlossen ist.", + "The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".": "Die Variante wurde nicht gelöscht, da sie möglicherweise nicht existiert oder nicht dem übergeordneten Produkt „%s“ zugewiesen ist.", + "Stock History For %s": "Lagerbestandsverlauf für %s", + "Set": "Satz", + "The unit is not set for the product \"%s\".": "Die Einheit ist für das Produkt „%s“ nicht eingestellt.", + "The operation will cause a negative stock for the product \"%s\" (%s).": "Der Vorgang führt zu einem negativen Bestand für das Produkt „%s“ (%s).", + "The adjustment quantity can\\'t be negative for the product \"%s\" (%s)": "Die Anpassungsmenge darf für das Produkt „%s“ (%s) nicht negativ sein.", + "%s\\'s Products": "%s\\s Produkte", + "Transactions Report": "Transaktionsbericht", + "Combined Report": "Kombinierter Bericht", + "Provides a combined report for every transactions on products.": "Bietet einen kombinierten Bericht für alle Transaktionen zu Produkten.", + "Unable to initiallize the settings page. The identifier \"' . $identifier . '": "Die Einstellungsseite konnte nicht initialisiert werden. Der Bezeichner \"' . $identifier . '", + "Shows all histories generated by the transaction.": "Zeigt alle durch die Transaktion generierten Historien an.", + "Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.": "Geplante, wiederkehrende und Entitätstransaktionen können nicht verwendet werden, da die Warteschlangen nicht richtig konfiguriert sind.", + "Create New Transaction": "Neue Transaktion erstellen", + "Set direct, scheduled transactions.": "Legen Sie direkte, geplante Transaktionen fest.", + "Update Transaction": "Transaktion aktualisieren", + "The provided data aren\\'t valid": "Die bereitgestellten Daten sind ungültig", + "Welcome — NexoPOS": "Willkommen – NexoPOS", + "You\\'re not allowed to see this page.": "Sie dürfen diese Seite nicht sehen.", + "Your don\\'t have enough permission to perform this action.": "Sie verfügen nicht über ausreichende Berechtigungen, um diese Aktion auszuführen.", + "You don\\'t have the necessary role to see this page.": "Sie verfügen nicht über die erforderliche Rolle, um diese Seite anzuzeigen.", + "%s product(s) has low stock. Reorder those product(s) before it get exhausted.": "%s Produkt(e) haben nur noch geringe Lagerbestände. Bestellen Sie diese Produkte noch einmal, bevor sie aufgebraucht sind.", + "Scheduled Transactions": "Geplante Transaktionen", + "the transaction \"%s\" was executed as scheduled on %s.": "Die Transaktion „%s“ wurde wie geplant am %s ausgeführt.", + "Workers Aren\\'t Running": "Arbeiter laufen nicht", + "The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.": "Die Worker wurden aktiviert, aber es sieht so aus, als ob NexoPOS keine Worker ausführen kann. Dies geschieht normalerweise, wenn Supervisor nicht richtig konfiguriert ist.", + "Unable to remove the permissions \"%s\". It doesn\\'t exists.": "Die Berechtigungen „%s“ können nicht entfernt werden. Es existiert nicht.", + "Unable to open \"%s\" *, as it\\'s not closed.": "„%s“ * kann nicht geöffnet werden, da es nicht geschlossen ist.", + "Unable to open \"%s\" *, as it\\'s not opened.": "„%s“ * kann nicht geöffnet werden, da es nicht geöffnet ist.", + "Unable to cashing on \"%s\" *, as it\\'s not opened.": "Die Auszahlung von „%s“ * ist nicht möglich, da es nicht geöffnet ist.", + "Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.": "Nicht genügend Guthaben, um einen Verkauf von „%s“ zu löschen. Wenn Gelder ausgezahlt oder ausgezahlt wurden, sollten Sie erwägen, der Kasse etwas Bargeld (%s) hinzuzufügen.", + "Unable to cashout on \"%s": "Auszahlung am „%s“ nicht möglich", + "Symbolic Links Missing": "Symbolische Links fehlen", + "The Symbolic Links to the public directory is missing. Your medias might be broken and not display.": "Die symbolischen Links zum öffentlichen Verzeichnis fehlen. Möglicherweise sind Ihre Medien defekt und werden nicht angezeigt.", + "Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.": "Cron-Jobs sind auf NexoPOS nicht richtig konfiguriert. Dadurch können notwendige Funktionen eingeschränkt sein. Klicken Sie hier, um zu erfahren, wie Sie das Problem beheben können.", + "The requested module %s cannot be found.": "Das angeforderte Modul %s kann nicht gefunden werden.", + "The manifest.json can\\'t be located inside the module %s on the path: %s": "Die Datei manifest.json kann nicht im Modul %s im Pfad %s gefunden werden", + "the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.": "Die angeforderte Datei „%s“ kann nicht in der manifest.json für das Modul %s gefunden werden.", + "Sorting is explicitely disabled for the column \"%s\".": "Die Sortierung ist für die Spalte „%s“ explizit deaktiviert.", + "Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s": "\"%s\" kann nicht gelöscht werden, da es eine Abhängigkeit für \"%s\"%s ist", + "Unable to find the customer using the provided id %s.": "Der Kunde konnte mit der angegebenen ID %s nicht gefunden werden.", + "Not enough credits on the customer account. Requested : %s, Remaining: %s.": "Nicht genügend Guthaben auf dem Kundenkonto. Angefordert: %s, Verbleibend: %s.", + "The customer account doesn\\'t have enough funds to proceed.": "Das Kundenkonto verfügt nicht über genügend Guthaben, um fortzufahren.", + "Unable to find a reference to the attached coupon : %s": "Es konnte kein Verweis auf den angehängten Coupon gefunden werden: %s", + "You\\'re not allowed to use this coupon as it\\'s no longer active": "Sie dürfen diesen Gutschein nicht verwenden, da er nicht mehr aktiv ist", + "You\\'re not allowed to use this coupon it has reached the maximum usage allowed.": "Sie dürfen diesen Coupon nicht verwenden, da die maximal zulässige Nutzung erreicht ist.", + "Terminal A": "Terminal A", + "Terminal B": "Terminal B", + "%s link were deleted": "%s Link wurden gelöscht", + "Unable to execute the following class callback string : %s": "Die folgende Klassenrückrufzeichenfolge kann nicht ausgeführt werden: %s", + "%s — %s": "%s – %S", + "Transactions": "Transaktionen", + "Create Transaction": "Transaktion erstellen", + "Stock History": "Aktienhistorie", + "Invoices": "Rechnungen", + "Failed to parse the configuration file on the following path \"%s\"": "Die Konfigurationsdatei im folgenden Pfad „%s“ konnte nicht analysiert werden.", + "No config.xml has been found on the directory : %s. This folder is ignored": "Im Verzeichnis %s wurde keine config.xml gefunden. Dieser Ordner wird ignoriert", + "The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ": "Das Modul „%s“ wurde deaktiviert, da es nicht mit der aktuellen Version von NexoPOS %s kompatibel ist, aber %s erfordert.", + "Unable to upload this module as it\\'s older than the version installed": "Dieses Modul kann nicht hochgeladen werden, da es älter als die installierte Version ist", + "The migration file doens\\'t have a valid class name. Expected class : %s": "Die Migrationsdatei hat keinen gültigen Klassennamen. Erwartete Klasse: %s", + "Unable to locate the following file : %s": "Die folgende Datei konnte nicht gefunden werden: %s", + "The migration file doens\\'t have a valid method name. Expected method : %s": "Die Migrationsdatei hat keinen gültigen Methodennamen. Erwartete Methode: %s", + "The module %s cannot be enabled as his dependency (%s) is missing or not enabled.": "Das Modul %s kann nicht aktiviert werden, da seine Abhängigkeit (%s) fehlt oder nicht aktiviert ist.", + "The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.": "Das Modul %s kann nicht aktiviert werden, da seine Abhängigkeiten (%s) fehlen oder nicht aktiviert sind.", + "An Error Occurred \"%s\": %s": "Es ist ein Fehler aufgetreten \"%s\": %s", + "The order has been updated": "Die Bestellung wurde aktualisiert", + "The minimal payment of %s has\\'nt been provided.": "Die Mindestzahlung von %s wurde nicht geleistet.", + "Unable to proceed as the order is already paid.": "Der Vorgang kann nicht fortgesetzt werden, da die Bestellung bereits bezahlt ist.", + "The customer account funds are\\'nt enough to process the payment.": "Das Guthaben auf dem Kundenkonto reicht nicht aus, um die Zahlung abzuwickeln.", + "Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.": "Nicht in der Lage, fortzufahren. Teilbezahlte Bestellungen sind nicht zulässig. Diese Option kann in den Einstellungen geändert werden.", + "Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.": "Nicht in der Lage, fortzufahren. Unbezahlte Bestellungen sind nicht zulässig. Diese Option kann in den Einstellungen geändert werden.", + "By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.": "Durch die Ausführung dieser Bestellung überschreitet der Kunde das maximal zulässige Guthaben für sein Konto: %s.", + "You\\'re not allowed to make payments.": "Es ist Ihnen nicht gestattet, Zahlungen vorzunehmen.", + "Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s": "Der Vorgang kann nicht fortgesetzt werden, da nicht genügend Lagerbestand für %s mit der Einheit %s vorhanden ist. Angefordert: %s, verfügbar %s", + "Unknown Status (%s)": "Unbekannter Status (%s)", + "%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.": "%s unbezahlte oder teilweise bezahlte Bestellung(en) ist fällig. Dies ist der Fall, wenn vor dem erwarteten Zahlungstermin keine abgeschlossen wurde.", + "Unable to find a reference of the provided coupon : %s": "Es konnte keine Referenz des bereitgestellten Gutscheins gefunden werden: %s", + "The procurement has been deleted. %s included stock record(s) has been deleted as well.": "Die Beschaffung wurde gelöscht. %s enthaltene(r) Bestandsdatensatz(e) wurden ebenfalls gelöscht.", + "Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.": "Die Beschaffung kann nicht gelöscht werden, da auf der Einheit „%s“ nicht mehr genügend Lagerbestand für „%s“ vorhanden ist. Dies bedeutet wahrscheinlich, dass sich die Bestandszahl entweder durch einen Verkauf oder durch eine Anpassung nach der Beschaffung geändert hat.", + "Unable to find the product using the provided id \"%s\"": "Das Produkt konnte mit der angegebenen ID „%s“ nicht gefunden werden.", + "Unable to procure the product \"%s\" as the stock management is disabled.": "Das Produkt „%s“ kann nicht beschafft werden, da die Lagerverwaltung deaktiviert ist.", + "Unable to procure the product \"%s\" as it is a grouped product.": "Das Produkt „%s“ kann nicht beschafft werden, da es sich um ein gruppiertes Produkt handelt.", + "The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item": "Die für das Produkt %s verwendete Einheit gehört nicht zu der dem Artikel zugewiesenen Einheitengruppe", + "%s procurement(s) has recently been automatically procured.": "%s Beschaffung(en) wurden kürzlich automatisch beschafft.", + "The requested category doesn\\'t exists": "Die angeforderte Kategorie existiert nicht", + "The category to which the product is attached doesn\\'t exists or has been deleted": "Die Kategorie, der das Produkt zugeordnet ist, existiert nicht oder wurde gelöscht", + "Unable to create a product with an unknow type : %s": "Es kann kein Produkt mit einem unbekannten Typ erstellt werden: %s", + "A variation within the product has a barcode which is already in use : %s.": "Eine Variation innerhalb des Produkts hat einen Barcode, der bereits verwendet wird: %s.", + "A variation within the product has a SKU which is already in use : %s": "Eine Variation innerhalb des Produkts hat eine SKU, die bereits verwendet wird: %s", + "Unable to edit a product with an unknown type : %s": "Ein Produkt mit einem unbekannten Typ kann nicht bearbeitet werden: %s", + "The requested sub item doesn\\'t exists.": "Das angeforderte Unterelement existiert nicht.", + "One of the provided product variation doesn\\'t include an identifier.": "Eine der bereitgestellten Produktvarianten enthält keine Kennung.", + "The product\\'s unit quantity has been updated.": "Die Stückzahl des Produkts wurde aktualisiert.", + "Unable to reset this variable product \"%s": "Dieses variable Produkt „%s“ konnte nicht zurückgesetzt werden", + "Adjusting grouped product inventory must result of a create, update, delete sale operation.": "Die Anpassung des gruppierten Produktinventars muss das Ergebnis eines Verkaufsvorgangs zum Erstellen, Aktualisieren und Löschen sein.", + "Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).": "Die Aktion kann nicht fortgesetzt werden, da sie zu einem negativen Bestand (%s) führt. Alte Menge: (%s), Menge: (%s).", + "Unsupported stock action \"%s\"": "Nicht unterstützte Aktienaktion „%s“", + "%s product(s) has been deleted.": "%s Produkt(e) wurden gelöscht.", + "%s products(s) has been deleted.": "%s Produkte wurden gelöscht.", + "Unable to find the product, as the argument \"%s\" which value is \"%s": "Das Produkt konnte nicht gefunden werden, da das Argument „%s“ den Wert „%s“ hat", + "You cannot convert unit on a product having stock management disabled.": "Sie können keine Einheiten für ein Produkt umrechnen, bei dem die Lagerverwaltung deaktiviert ist.", + "The source and the destination unit can\\'t be the same. What are you trying to do ?": "Die Quell- und Zieleinheit dürfen nicht identisch sein. Was versuchst du zu machen ?", + "There is no source unit quantity having the name \"%s\" for the item %s": "Für den Artikel %s gibt es keine Quelleinheitsmenge mit dem Namen „%s“.", + "There is no destination unit quantity having the name %s for the item %s": "Es gibt keine Zieleinheitsmenge mit dem Namen %s für den Artikel %s", + "The source unit and the destination unit doens\\'t belong to the same unit group.": "Die Quelleinheit und die Zieleinheit gehören nicht zur selben Einheitengruppe.", + "The group %s has no base unit defined": "Für die Gruppe %s ist keine Basiseinheit definiert", + "The conversion of %s(%s) to %s(%s) was successful": "Die Konvertierung von %s(%s) in %s(%s) war erfolgreich", + "The product has been deleted.": "Das Produkt wurde gelöscht.", + "An error occurred: %s.": "Es ist ein Fehler aufgetreten: %s.", + "A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.": "Kürzlich wurde ein Lagerbestandsvorgang erkannt, NexoPOS konnte den Bericht jedoch nicht entsprechend aktualisieren. Dies tritt auf, wenn die tägliche Dashboard-Referenz nicht erstellt wurde.", + "Today\\'s Orders": "Heutige Bestellungen", + "Today\\'s Sales": "Heutige Verkäufe", + "Today\\'s Refunds": "Heutige Rückerstattungen", + "Today\\'s Customers": "Die Kunden von heute", + "The report will be generated. Try loading the report within few minutes.": "Der Bericht wird generiert. Versuchen Sie, den Bericht innerhalb weniger Minuten zu laden.", + "The database has been wiped out.": "Die Datenbank wurde gelöscht.", + "No custom handler for the reset \"' . $mode . '\"": "Kein benutzerdefinierter Handler für das Zurücksetzen \"' . $mode . '\"", + "Unable to proceed. The parent tax doesn\\'t exists.": "Nicht in der Lage, fortzufahren. Die übergeordnete Steuer ist nicht vorhanden.", + "A simple tax must not be assigned to a parent tax with the type \"simple": "Eine einfache Steuer darf keiner übergeordneten Steuer vom Typ „einfach“ zugeordnet werden", + "Created via tests": "Erstellt durch Tests", + "The transaction has been successfully saved.": "Die Transaktion wurde erfolgreich gespeichert.", + "The transaction has been successfully updated.": "Die Transaktion wurde erfolgreich aktualisiert.", + "Unable to find the transaction using the provided identifier.": "Die Transaktion konnte mit der angegebenen Kennung nicht gefunden werden.", + "Unable to find the requested transaction using the provided id.": "Die angeforderte Transaktion konnte mit der angegebenen ID nicht gefunden werden.", + "The transction has been correctly deleted.": "Die Transaktion wurde korrekt gelöscht.", + "You cannot delete an account which has transactions bound.": "Sie können kein Konto löschen, für das Transaktionen gebunden sind.", + "The transaction account has been deleted.": "Das Transaktionskonto wurde gelöscht.", + "Unable to find the transaction account using the provided ID.": "Das Transaktionskonto konnte mit der angegebenen ID nicht gefunden werden.", + "The transaction account has been updated.": "Das Transaktionskonto wurde aktualisiert.", + "This transaction type can\\'t be triggered.": "Dieser Transaktionstyp kann nicht ausgelöst werden.", + "The transaction has been successfully triggered.": "Die Transaktion wurde erfolgreich ausgelöst.", + "The transaction \"%s\" has been processed on day \"%s\".": "Die Transaktion „%s“ wurde am Tag „%s“ verarbeitet.", + "The transaction \"%s\" has already been processed.": "Die Transaktion „%s“ wurde bereits verarbeitet.", + "The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.": "Die Transaktion „%s“ wurde nicht verarbeitet, da sie veraltet ist.", + "The process has been correctly executed and all transactions has been processed.": "Der Vorgang wurde korrekt ausgeführt und alle Transaktionen wurden verarbeitet.", + "The process has been executed with some failures. %s\/%s process(es) has successed.": "Der Prozess wurde mit einigen Fehlern ausgeführt. %s\/%s Prozess(e) waren erfolgreich.", + "Procurement : %s": "Beschaffung: %s", + "Procurement Liability : %s": "Beschaffungshaftung: %s", + "Refunding : %s": "Rückerstattung: %s", + "Spoiled Good : %s": "Verdorbenes Gutes: %s", + "Sale : %s": "Verkäufe", + "Liabilities Account": "Passivkonto", + "Not found account type: %s": "Kontotyp nicht gefunden: %s", + "Refund : %s": "Rückerstattung: %s", + "Customer Account Crediting : %s": "Gutschrift auf dem Kundenkonto: %s", + "Customer Account Purchase : %s": "Kundenkontokauf: %s", + "Customer Account Deducting : %s": "Abbuchung vom Kundenkonto: %s", + "Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.": "Einige Transaktionen sind deaktiviert, da NexoPOS nicht in der Lage ist, asynchrone Anfragen auszuführen<\/a>.", + "The unit group %s doesn\\'t have a base unit": "Die Einheitengruppe %s hat keine Basiseinheit", + "The system role \"Users\" can be retrieved.": "Die Systemrolle „Benutzer“ kann abgerufen werden.", + "The default role that must be assigned to new users cannot be retrieved.": "Die Standardrolle, die neuen Benutzern zugewiesen werden muss, kann nicht abgerufen werden.", + "%s Second(s)": "%s Sekunde(n)", + "Configure the accounting feature": "Konfigurieren Sie die Buchhaltungsfunktion", + "Define the symbol that indicate thousand. By default ": "Definieren Sie das Symbol, das Tausend anzeigt. Standardmäßig", + "Date Time Format": "Datum-Uhrzeit-Format", + "This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".": "Hier wird festgelegt, wie Datum und Uhrzeit formatiert werden sollen. Das Standardformat ist „Y-m-d H:i“.", + "Date TimeZone": "Datum Zeitzone", + "Determine the default timezone of the store. Current Time: %s": "Bestimmen Sie die Standardzeitzone des Geschäfts. Aktuelle Zeit: %s", + "Configure how invoice and receipts are used.": "Konfigurieren Sie, wie Rechnungen und Quittungen verwendet werden.", + "configure settings that applies to orders.": "Konfigurieren Sie Einstellungen, die für Bestellungen gelten.", + "Report Settings": "Berichtseinstellungen", + "Configure the settings": "Konfigurieren Sie die Einstellungen", + "Wipes and Reset the database.": "Löscht die Datenbank und setzt sie zurück.", + "Supply Delivery": "Lieferung von Lieferungen", + "Configure the delivery feature.": "Konfigurieren Sie die Lieferfunktion.", + "Configure how background operations works.": "Konfigurieren Sie, wie Hintergrundvorgänge funktionieren.", + "Every procurement will be added to the selected transaction account": "Jede Beschaffung wird dem ausgewählten Transaktionskonto hinzugefügt", + "Every sales will be added to the selected transaction account": "Alle Verkäufe werden dem ausgewählten Transaktionskonto hinzugefügt", + "Customer Credit Account (crediting)": "Kundenguthabenkonto (Gutschrift)", + "Every customer credit will be added to the selected transaction account": "Jedes Kundenguthaben wird dem ausgewählten Transaktionskonto gutgeschrieben", + "Customer Credit Account (debitting)": "Kundenguthabenkonto (Abbuchung)", + "Every customer credit removed will be added to the selected transaction account": "Jedes entnommene Kundenguthaben wird dem ausgewählten Transaktionskonto gutgeschrieben", + "Sales refunds will be attached to this transaction account": "Umsatzrückerstattungen werden diesem Transaktionskonto zugeordnet", + "Stock Return Account (Spoiled Items)": "Lagerrückgabekonto (verdorbene Artikel)", + "Disbursement (cash register)": "Auszahlung (Kasse)", + "Transaction account for all cash disbursement.": "Transaktionskonto für alle Barauszahlungen.", + "Liabilities": "Verbindlichkeiten", + "Transaction account for all liabilities.": "Transaktionskonto für alle Verbindlichkeiten.", + "You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.": "Sie müssen einen Kunden erstellen, dem alle Verkäufe zugeordnet werden, wenn sich der laufende Kunde nicht registriert.", + "Show Tax Breakdown": "Steueraufschlüsselung anzeigen", + "Will display the tax breakdown on the receipt\/invoice.": "Zeigt die Steueraufschlüsselung auf der Quittung/Rechnung an.", + "Available tags : ": "Verfügbare Tags:", + "{store_name}: displays the store name.": "{store_name}: Zeigt den Namen des Geschäfts an.", + "{store_email}: displays the store email.": "{store_email}: Zeigt die E-Mail-Adresse des Shops an.", + "{store_phone}: displays the store phone number.": "{store_phone}: Zeigt die Telefonnummer des Geschäfts an.", + "{cashier_name}: displays the cashier name.": "{cashier_name}: Zeigt den Namen des Kassierers an.", + "{cashier_id}: displays the cashier id.": "{cashier_id}: Zeigt die Kassierer-ID an.", + "{order_code}: displays the order code.": "{order_code}: Zeigt den Bestellcode an.", + "{order_date}: displays the order date.": "{order_date}: Zeigt das Bestelldatum an.", + "{order_type}: displays the order type.": "{order_type}: zeigt den Bestelltyp an.", + "{customer_email}: displays the customer email.": "{customer_email}: zeigt die E-Mail-Adresse des Kunden an.", + "{shipping_first_name}: displays the shipping first name.": "{shipping_first_name}: Zeigt den Vornamen des Versands an.", + "{shipping_last_name}: displays the shipping last name.": "{shipping_last_name}: Zeigt den Nachnamen des Versands an.", + "{shipping_phone}: displays the shipping phone.": "{shipping_phone}: Zeigt die Versandtelefonnummer an.", + "{shipping_address_1}: displays the shipping address_1.": "{shipping_address_1}: zeigt die Lieferadresse_1 an.", + "{shipping_address_2}: displays the shipping address_2.": "{shipping_address_2}: zeigt die Lieferadresse_2 an.", + "{shipping_country}: displays the shipping country.": "{shipping_country}: Zeigt das Versandland an.", + "{shipping_city}: displays the shipping city.": "{shipping_city}: Zeigt die Versandstadt an.", + "{shipping_pobox}: displays the shipping pobox.": "{shipping_pobox}: Zeigt das Versandpostfach an.", + "{shipping_company}: displays the shipping company.": "{shipping_company}: Zeigt das Versandunternehmen an.", + "{shipping_email}: displays the shipping email.": "{shipping_email}: Zeigt die Versand-E-Mail an.", + "{billing_first_name}: displays the billing first name.": "{billing_first_name}: Zeigt den Vornamen der Rechnung an.", + "{billing_last_name}: displays the billing last name.": "{billing_last_name}: Zeigt den Nachnamen der Rechnung an.", + "{billing_phone}: displays the billing phone.": "{billing_phone}: Zeigt das Abrechnungstelefon an.", + "{billing_address_1}: displays the billing address_1.": "{billing_address_1}: zeigt die Rechnungsadresse_1 an.", + "{billing_address_2}: displays the billing address_2.": "{billing_address_2}: zeigt die Rechnungsadresse_2 an.", + "{billing_country}: displays the billing country.": "{billing_country}: Zeigt das Rechnungsland an.", + "{billing_city}: displays the billing city.": "{billing_city}: Zeigt die Rechnungsstadt an.", + "{billing_pobox}: displays the billing pobox.": "{billing_pobox}: Zeigt das Rechnungspostfach an.", + "{billing_company}: displays the billing company.": "{billing_company}: Zeigt das Abrechnungsunternehmen an.", + "{billing_email}: displays the billing email.": "{billing_email}: zeigt die Rechnungs-E-Mail an.", + "Available tags :": "Verfügbare Tags:", + "Quick Product Default Unit": "Schnelle Produkt-Standardeinheit", + "Set what unit is assigned by default to all quick product.": "Legen Sie fest, welche Einheit allen Schnellprodukten standardmäßig zugewiesen ist.", + "Hide Exhausted Products": "Erschöpfte Produkte ausblenden", + "Will hide exhausted products from selection on the POS.": "Versteckt erschöpfte Produkte vor der Auswahl am POS.", + "Hide Empty Category": "Leere Kategorie ausblenden", + "Category with no or exhausted products will be hidden from selection.": "Kategorien mit keinen oder erschöpften Produkten werden aus der Auswahl ausgeblendet.", + "Default Printing (web)": "Standarddruck (Web)", + "The amount numbers shortcuts separated with a \"|\".": "Die Mengennummernkürzel werden durch ein \"|\" getrennt.", + "No submit URL was provided": "Es wurde keine Übermittlungs-URL angegeben", + "Sorting is explicitely disabled on this column": "Die Sortierung ist für diese Spalte explizit deaktiviert", + "An unpexpected error occured while using the widget.": "Bei der Verwendung des Widgets ist ein unerwarteter Fehler aufgetreten.", + "This field must be similar to \"{other}\"\"": "Dieses Feld muss ähnlich sein wie \"{other}\"\"", + "This field must have at least \"{length}\" characters\"": "Dieses Feld muss mindestens \"{length}\" Zeichen enthalten.", + "This field must have at most \"{length}\" characters\"": "Dieses Feld darf höchstens \"{length}\" Zeichen enthalten.", + "This field must be different from \"{other}\"\"": "Dieses Feld muss sich von \"{other}\"\" unterscheiden.", + "Search result": "Suchergebnis", + "Choose...": "Wählen...", + "The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.": "Die Komponente ${field.component} kann nicht geladen werden. Stellen Sie sicher, dass es in das nsExtraComponents-Objekt eingefügt wird.", + "+{count} other": "+{count} andere", + "The selected print gateway doesn't support this type of printing.": "Das ausgewählte Druck-Gateway unterstützt diese Art des Druckens nicht.", + "millisecond| second| minute| hour| day| week| month| year| decade| century| millennium": "Millisekunde| Sekunde| Minute| Stunde| Tag| Woche| Monat| Jahr| Jahrzehnt| Jahrhundert| Millennium", + "milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia": "Millisekunden| Sekunden| Minuten| Stunden| Tage| Wochen| Monate| Jahre| Jahrzehnte| Jahrhunderte| Jahrtausende", + "An error occured": "Es ist ein Fehler aufgetreten", + "You\\'re about to delete selected resources. Would you like to proceed?": "Sie sind dabei, ausgewählte Ressourcen zu löschen. Möchten Sie fortfahren?", + "See Error": "Siehe Fehler", + "Your uploaded files will displays here.": "Ihre hochgeladenen Dateien werden hier angezeigt.", + "Nothing to care about !": "Kein Grund zur Sorge!", + "Would you like to bulk edit a system role ?": "Möchten Sie eine Systemrolle in großen Mengen bearbeiten?", + "Total :": "Gesamt:", + "Remaining :": "Übrig :", + "Instalments:": "Raten:", + "This instalment doesn\\'t have any payment attached.": "Mit dieser Rate ist keine Zahlung verbunden.", + "You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?": "Sie leisten eine Zahlung für {amount}. Eine Zahlung kann nicht storniert werden. Möchten Sie fortfahren?", + "An error has occured while seleting the payment gateway.": "Beim Auswählen des Zahlungsgateways ist ein Fehler aufgetreten.", + "You're not allowed to add a discount on the product.": "Es ist nicht gestattet, einen Rabatt auf das Produkt hinzuzufügen.", + "You're not allowed to add a discount on the cart.": "Es ist nicht gestattet, dem Warenkorb einen Rabatt hinzuzufügen.", + "Cash Register : {register}": "Registrierkasse: {register}", + "The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?": "Die aktuelle Bestellung wird gelöscht. Wird jedoch nicht gelöscht, wenn es dauerhaft ist. Möchten Sie fortfahren?", + "You don't have the right to edit the purchase price.": "Sie haben kein Recht, den Kaufpreis zu ändern.", + "Dynamic product can\\'t have their price updated.": "Der Preis eines dynamischen Produkts kann nicht aktualisiert werden.", + "You\\'re not allowed to edit the order settings.": "Sie sind nicht berechtigt, die Bestelleinstellungen zu bearbeiten.", + "Looks like there is either no products and no categories. How about creating those first to get started ?": "Es sieht so aus, als gäbe es entweder keine Produkte und keine Kategorien. Wie wäre es, wenn Sie diese zuerst erstellen würden, um loszulegen?", + "Create Categories": "Erstellen Sie Kategorien", + "You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?": "Sie sind im Begriff, {Betrag} vom Kundenkonto für eine Zahlung zu verwenden. Möchten Sie fortfahren?", + "An unexpected error has occured while loading the form. Please check the log or contact the support.": "Beim Laden des Formulars ist ein unerwarteter Fehler aufgetreten. Bitte überprüfen Sie das Protokoll oder kontaktieren Sie den Support.", + "We were not able to load the units. Make sure there are units attached on the unit group selected.": "Wir konnten die Einheiten nicht laden. Stellen Sie sicher, dass der ausgewählten Einheitengruppe Einheiten zugeordnet sind.", + "The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?": "Die aktuelle Einheit, die Sie löschen möchten, hat eine Referenz in der Datenbank und könnte bereits Lagerbestände beschafft haben. Durch das Löschen dieser Referenz werden beschaffte Bestände entfernt. Würden Sie fortfahren?", + "There shoulnd\\'t be more option than there are units.": "Es sollte nicht mehr Optionen geben, als Einheiten vorhanden sind.", + "Either Selling or Purchase unit isn\\'t defined. Unable to proceed.": "Entweder die Verkaufs- oder Einkaufseinheit ist nicht definiert. Nicht in der Lage, fortzufahren.", + "Select the procured unit first before selecting the conversion unit.": "Wählen Sie zuerst die beschaffte Einheit aus, bevor Sie die Umrechnungseinheit auswählen.", + "Convert to unit": "In Einheit umrechnen", + "An unexpected error has occured": "Es ist ein unerwarteter Fehler aufgetreten", + "Unable to add product which doesn\\'t unit quantities defined.": "Es konnte kein Produkt hinzugefügt werden, für das keine Einheitsmengen definiert sind.", + "{product}: Purchase Unit": "{Produkt}: Kaufeinheit", + "The product will be procured on that unit.": "Das Produkt wird auf dieser Einheit beschafft.", + "Unkown Unit": "Unbekannte Einheit", + "Choose Tax": "Wählen Sie Steuern", + "The tax will be assigned to the procured product.": "Die Steuer wird dem beschafften Produkt zugeordnet.", + "Show Details": "Zeige Details", + "Hide Details": "Details ausblenden", + "Important Notes": "Wichtige Notizen", + "Stock Management Products.": "Lagerverwaltungsprodukte.", + "Doesn\\'t work with Grouped Product.": "Funktioniert nicht mit gruppierten Produkten.", + "Convert": "Konvertieren", + "Looks like no valid products matched the searched term.": "Es sieht so aus, als ob keine gültigen Produkte mit dem gesuchten Begriff übereinstimmen.", + "This product doesn't have any stock to adjust.": "Für dieses Produkt ist kein Lagerbestand zum Anpassen vorhanden.", + "Select Unit": "Wählen Sie Einheit", + "Select the unit that you want to adjust the stock with.": "Wählen Sie die Einheit aus, mit der Sie den Bestand anpassen möchten.", + "A similar product with the same unit already exists.": "Ein ähnliches Produkt mit der gleichen Einheit existiert bereits.", + "Select Procurement": "Wählen Sie Beschaffung", + "Select the procurement that you want to adjust the stock with.": "Wählen Sie die Beschaffung aus, bei der Sie den Bestand anpassen möchten.", + "Select Action": "Aktion auswählen", + "Select the action that you want to perform on the stock.": "Wählen Sie die Aktion aus, die Sie für die Aktie ausführen möchten.", + "Would you like to remove the selected products from the table ?": "Möchten Sie die ausgewählten Produkte aus der Tabelle entfernen?", + "Unit:": "Einheit:", + "Operation:": "Betrieb:", + "Procurement:": "Beschaffung:", + "Reason:": "Grund:", + "Provided": "Bereitgestellt", + "Not Provided": "Nicht bereitgestellt", + "Remove Selected": "Ausgewählte entfernen", + "Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.": "Token werden verwendet, um einen sicheren Zugriff auf NexoPOS-Ressourcen zu ermöglichen, ohne dass Sie Ihren persönlichen Benutzernamen und Ihr Passwort weitergeben müssen.\n Einmal generiert, verfallen sie nicht, bis Sie sie ausdrücklich widerrufen.", + "You haven\\'t yet generated any token for your account. Create one to get started.": "Sie haben noch kein Token für Ihr Konto generiert. Erstellen Sie eines, um loszulegen.", + "You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?": "Sie sind dabei, ein Token zu löschen, das möglicherweise von einer externen App verwendet wird. Durch das Löschen wird verhindert, dass die App auf die API zugreift. Möchten Sie fortfahren?", + "Date Range : {date1} - {date2}": "Datumsbereich: {Datum1} – {Datum2}", + "Document : Best Products": "Dokument: Beste Produkte", + "By : {user}": "Vom Nutzer}", + "Range : {date1} — {date2}": "Bereich: {date1} – {Datum2}", + "Document : Sale By Payment": "Dokument: Verkauf gegen Zahlung", + "Document : Customer Statement": "Dokument: Kundenerklärung", + "Customer : {selectedCustomerName}": "Kunde: {selectedCustomerName}", + "All Categories": "Alle Kategorien", + "All Units": "Alle Einheiten", + "Date : {date}": "Datum datum}", + "Document : {reportTypeName}": "Dokument: {reportTypeName}", + "Threshold": "Schwelle", + "Select Units": "Wählen Sie Einheiten aus", + "An error has occured while loading the units.": "Beim Laden der Einheiten ist ein Fehler aufgetreten.", + "An error has occured while loading the categories.": "Beim Laden der Kategorien ist ein Fehler aufgetreten.", + "Document : Payment Type": "Dokument: Zahlungsart", + "Document : Profit Report": "Dokument: Gewinnbericht", + "Filter by Category": "Nach Kategorie filtern", + "Filter by Units": "Nach Einheiten filtern", + "An error has occured while loading the categories": "Beim Laden der Kategorien ist ein Fehler aufgetreten", + "An error has occured while loading the units": "Beim Laden der Einheiten ist ein Fehler aufgetreten", + "By Type": "Nach Typ", + "By User": "Vom Nutzer", + "By Category": "Nach Kategorie", + "All Category": "Alle Kategorie", + "Document : Sale Report": "Dokument: Verkaufsbericht", + "Filter By Category": "Nach Kategorie filtern", + "Allow you to choose the category.": "Hier können Sie die Kategorie auswählen.", + "No category was found for proceeding the filtering.": "Für die Filterung wurde keine Kategorie gefunden.", + "Document : Sold Stock Report": "Dokument: Bericht über verkaufte Lagerbestände", + "Filter by Unit": "Nach Einheit filtern", + "Limit Results By Categories": "Begrenzen Sie die Ergebnisse nach Kategorien", + "Limit Results By Units": "Begrenzen Sie die Ergebnisse nach Einheiten", + "Generate Report": "Bericht generieren", + "Document : Combined Products History": "Dokument: Geschichte der kombinierten Produkte", + "Ini. Qty": "Ini. Menge", + "Added Quantity": "Zusätzliche Menge", + "Add. Qty": "Hinzufügen. Menge", + "Sold Quantity": "Verkaufte Menge", + "Sold Qty": "Verkaufte Menge", + "Defective Quantity": "Mangelhafte Menge", + "Defec. Qty": "Defekt. Menge", + "Final Quantity": "Endgültige Menge", + "Final Qty": "Endgültige Menge", + "No data available": "Keine Daten verfügbar", + "Document : Yearly Report": "Dokument: Jahresbericht", + "The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.": "Der Bericht wird für das laufende Jahr berechnet, ein Auftrag wird versandt und Sie werden benachrichtigt, sobald er abgeschlossen ist.", + "Unable to edit this transaction": "Diese Transaktion kann nicht bearbeitet werden", + "This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.": "Diese Transaktion wurde mit einem Typ erstellt, der nicht mehr verfügbar ist. Dieser Typ ist nicht mehr verfügbar, da NexoPOS keine Hintergrundanfragen ausführen kann.", + "Save Transaction": "Transaktion speichern", + "While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.": "Bei der Auswahl einer Entitätstransaktion wird der definierte Betrag mit der Gesamtzahl der Benutzer multipliziert, die der ausgewählten Benutzergruppe zugewiesen sind.", + "The transaction is about to be saved. Would you like to confirm your action ?": "Die Transaktion wird gerade gespeichert. Möchten Sie Ihre Aktion bestätigen?", + "Unable to load the transaction": "Die Transaktion konnte nicht geladen werden", + "You cannot edit this transaction if NexoPOS cannot perform background requests.": "Sie können diese Transaktion nicht bearbeiten, wenn NexoPOS keine Hintergrundanfragen durchführen kann.", + "MySQL is selected as database driver": "Als Datenbanktreiber ist MySQL ausgewählt", + "Please provide the credentials to ensure NexoPOS can connect to the database.": "Bitte geben Sie die Anmeldeinformationen an, um sicherzustellen, dass NexoPOS eine Verbindung zur Datenbank herstellen kann.", + "Sqlite is selected as database driver": "Als Datenbanktreiber ist SQLite ausgewählt", + "Make sure Sqlite module is available for PHP. Your database will be located on the database directory.": "Stellen Sie sicher, dass das SQLite-Modul für PHP verfügbar ist. Ihre Datenbank befindet sich im Datenbankverzeichnis.", + "Checking database connectivity...": "Datenbankkonnektivität wird überprüft...", + "Driver": "Treiber", + "Set the database driver": "Legen Sie den Datenbanktreiber fest", + "Hostname": "Hostname", + "Provide the database hostname": "Geben Sie den Hostnamen der Datenbank an", + "Username required to connect to the database.": "Benutzername erforderlich, um eine Verbindung zur Datenbank herzustellen.", + "The username password required to connect.": "Das für die Verbindung erforderliche Benutzername-Passwort.", + "Database Name": "Name der Datenbank", + "Provide the database name. Leave empty to use default file for SQLite Driver.": "Geben Sie den Datenbanknamen an. Lassen Sie das Feld leer, um die Standarddatei für den SQLite-Treiber zu verwenden.", + "Database Prefix": "Datenbankpräfix", + "Provide the database prefix.": "Geben Sie das Datenbankpräfix an.", + "Port": "Hafen", + "Provide the hostname port.": "Geben Sie den Hostnamen-Port an.", + "NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.": "NexoPOS<\/strong> kann jetzt eine Verbindung zur Datenbank herstellen. Erstellen Sie zunächst das Administratorkonto und geben Sie Ihrer Installation einen Namen. Nach der Installation ist diese Seite nicht mehr zugänglich.", + "Install": "Installieren", + "Application": "Anwendung", + "That is the application name.": "Das ist der Anwendungsname.", + "Provide the administrator username.": "Geben Sie den Administrator-Benutzernamen an.", + "Provide the administrator email.": "Geben Sie die E-Mail-Adresse des Administrators an.", + "What should be the password required for authentication.": "Welches Passwort sollte zur Authentifizierung erforderlich sein?", + "Should be the same as the password above.": "Sollte mit dem Passwort oben identisch sein.", + "Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.": "Vielen Dank, dass Sie NexoPOS zur Verwaltung Ihres Shops nutzen. Mit diesem Installationsassistenten können Sie NexoPOS im Handumdrehen ausführen.", + "Choose your language to get started.": "Wählen Sie Ihre Sprache, um loszulegen.", + "Remaining Steps": "Verbleibende Schritte", + "Database Configuration": "Datenbankkonfiguration", + "Application Configuration": "Anwendungskonfiguration", + "Language Selection": "Sprachauswahl", + "Select what will be the default language of NexoPOS.": "Wählen Sie die Standardsprache von NexoPOS aus.", + "In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.": "Damit NexoPOS mit Updates reibungslos läuft, müssen wir mit der Datenbankmigration fortfahren. Tatsächlich müssen Sie nichts unternehmen. Warten Sie einfach, bis der Vorgang abgeschlossen ist, und Sie werden weitergeleitet.", + "Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.": "Offenbar ist beim Update ein Fehler aufgetreten. Normalerweise sollte das durch einen weiteren Versuch behoben werden. Wenn Sie jedoch immer noch keine Chance haben.", + "Please report this message to the support : ": "Bitte melden Sie diese Nachricht dem Support:", + "No refunds made so far. Good news right?": "Bisher wurden keine Rückerstattungen vorgenommen. Gute Nachrichten, oder?", + "Open Register : %s": "Register öffnen: %s", + "Loading Coupon For : ": "Gutschein wird geladen für:", + "This coupon requires products that aren\\'t available on the cart at the moment.": "Für diesen Gutschein sind Produkte erforderlich, die derzeit nicht im Warenkorb verfügbar sind.", + "This coupon requires products that belongs to specific categories that aren\\'t included at the moment.": "Für diesen Gutschein sind Produkte erforderlich, die zu bestimmten Kategorien gehören, die derzeit nicht enthalten sind.", + "Too many results.": "Zu viele Ergebnisse.", + "New Customer": "Neukunde", + "Purchases": "Einkäufe", + "Owed": "Geschuldet", + "Usage :": "Verwendung :", + "Code :": "Code:", + "Order Reference": "Bestellnummer", + "The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?": "Das Produkt „{product}“ kann nicht über ein Suchfeld hinzugefügt werden, da „Accurate Tracking“ aktiviert ist. Möchten Sie mehr erfahren?", + "{product} : Units": "{Produkt}: Einheiten", + "This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.": "Für dieses Produkt ist keine Verkaufseinheit definiert. Stellen Sie sicher, dass Sie mindestens eine Einheit als sichtbar markieren.", + "Previewing :": "Vorschau:", + "Search for options": "Suchen Sie nach Optionen", + "The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.": "Das API-Token wurde generiert. Stellen Sie sicher, dass Sie diesen Code an einem sicheren Ort kopieren, da er nur einmal angezeigt wird.\n Wenn Sie dieses Token verlieren, müssen Sie es widerrufen und ein neues generieren.", + "The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.": "Der ausgewählten Steuergruppe sind keine Untersteuern zugewiesen. Dies könnte zu falschen Zahlen führen.", + "The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.": "Der Gutschein „%s“ wurde aus dem Warenkorb entfernt, da die erforderlichen Bedingungen nicht mehr erfüllt sind.", + "The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.": "Die aktuelle Bestellung ist ungültig. Dadurch wird die Transaktion abgebrochen, die Bestellung wird jedoch nicht gelöscht. Weitere Details zum Vorgang werden im Bericht aufgeführt. Erwägen Sie die Angabe des Grundes für diesen Vorgang.", + "Invalid Error Message": "Ungültige Fehlermeldung", + "Unamed Settings Page": "Unbenannte Einstellungsseite", + "Description of unamed setting page": "Beschreibung der unbenannten Einstellungsseite", + "Text Field": "Textfeld", + "This is a sample text field.": "Dies ist ein Beispieltextfeld.", + "No description has been provided.": "Es wurde keine Beschreibung bereitgestellt.", + "You\\'re using NexoPOS %s<\/a>": "Sie verwenden NexoPOS %s<\/a >", + "If you haven\\'t asked this, please get in touch with the administrators.": "Wenn Sie dies nicht gefragt haben, wenden Sie sich bitte an die Administratoren.", + "A new user has registered to your store (%s) with the email %s.": "Ein neuer Benutzer hat sich in Ihrem Shop (%s) mit der E-Mail-Adresse %s registriert.", + "The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.": "Das Konto, das Sie für __%s__ erstellt haben, wurde erfolgreich erstellt. Sie können sich jetzt mit Ihrem Benutzernamen (__%s__) und dem von Ihnen festgelegten Passwort anmelden.", + "Note: ": "Notiz:", + "Inclusive Product Taxes": "Inklusive Produktsteuern", + "Exclusive Product Taxes": "Exklusive Produktsteuern", + "Condition:": "Zustand:", + "Date : %s": "Termine", + "NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.": "NexoPOS konnte keine Datenbankanfrage ausführen. Dieser Fehler hängt möglicherweise mit einer Fehlkonfiguration Ihrer .env-Datei zusammen. Der folgende Leitfaden könnte hilfreich sein, um Ihnen bei der Lösung dieses Problems zu helfen.", + "Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.": "Leider ist etwas Unerwartetes passiert. Sie können beginnen, indem Sie einen weiteren Versuch starten und auf „Erneut versuchen“ klicken. Wenn das Problem weiterhin besteht, verwenden Sie die folgende Ausgabe, um Unterstützung zu erhalten.", + "Retry": "Wiederholen", + "If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.": "Wenn Sie diese Seite sehen, bedeutet dies, dass NexoPOS korrekt auf Ihrem System installiert ist. Da diese Seite als Frontend gedacht ist, verfügt NexoPOS vorerst über kein Frontend. Auf dieser Seite finden Sie nützliche Links, die Sie zu wichtigen Ressourcen führen.", + "Compute Products": "Computerprodukte", + "Unammed Section": "Ungepanzerter Abschnitt", + "%s order(s) has recently been deleted as they have expired.": "%s Bestellungen wurden kürzlich gelöscht, da sie abgelaufen sind.", + "%s products will be updated": "%s Produkte werden aktualisiert", + "Procurement %s": "Beschaffung %s", + "You cannot assign the same unit to more than one selling unit.": "Sie können dieselbe Einheit nicht mehr als einer Verkaufseinheit zuordnen.", + "The quantity to convert can\\'t be zero.": "Die umzurechnende Menge darf nicht Null sein.", + "The source unit \"(%s)\" for the product \"%s": "Die Quelleinheit „(%s)“ für das Produkt „%s“.", + "The conversion from \"%s\" will cause a decimal value less than one count of the destination unit \"%s\".": "Die Konvertierung von „%s“ führt zu einem Dezimalwert, der kleiner als eine Zählung der Zieleinheit „%s“ ist.", + "{customer_first_name}: displays the customer first name.": "{customer_first_name}: Zeigt den Vornamen des Kunden an.", + "{customer_last_name}: displays the customer last name.": "{customer_last_name}: Zeigt den Nachnamen des Kunden an.", + "No Unit Selected": "Keine Einheit ausgewählt", + "Unit Conversion : {product}": "Einheitenumrechnung: {Produkt}", + "Convert {quantity} available": "Konvertieren Sie {quantity} verfügbar", + "The quantity should be greater than 0": "Die Menge sollte größer als 0 sein", + "The provided quantity can\\'t result in any convertion for unit \"{destination}\"": "Die angegebene Menge kann nicht zu einer Umrechnung für die Einheit „{destination}“ führen.", + "Conversion Warning": "Konvertierungswarnung", + "Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?": "Nur {quantity}({source}) kann in {destinationCount}({destination}) konvertiert werden. Möchten Sie fortfahren?", + "Confirm Conversion": "Konvertierung bestätigen", + "You\\'re about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?": "Sie sind dabei, {quantity}({source}) in {destinationCount}({destination}) umzuwandeln. Möchten Sie fortfahren?", + "Conversion Successful": "Konvertierung erfolgreich", + "The product {product} has been converted successfully.": "Das Produkt {product} wurde erfolgreich konvertiert.", + "An error occured while converting the product {product}": "Beim Konvertieren des Produkts {product} ist ein Fehler aufgetreten", + "The quantity has been set to the maximum available": "Die Menge wurde auf die maximal verfügbare Menge eingestellt", + "The product {product} has no base unit": "Das Produkt {product} hat keine Basiseinheit", + "Developper Section": "Entwicklerbereich", + "The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?": "Die Datenbank wird geleert und alle Daten werden gelöscht. Es bleiben nur Benutzer und Rollen erhalten. Möchten Sie fortfahren?", + "An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s": "Beim Erstellen eines Barcodes „%s“ mit dem Typ „%s“ für das Produkt ist ein Fehler aufgetreten. Stellen Sie sicher, dass der Barcode-Wert für den ausgewählten Barcode-Typ korrekt ist. Zusätzlicher Einblick: %s" +} \ No newline at end of file diff --git a/lang/en.json b/lang/en.json index 235839a22..4db313148 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1 +1 @@ -{"displaying {perPage} on {items} items":"displaying {perPage} on {items} items","The document has been generated.":"The document has been generated.","Unexpected error occurred.":"Unexpected error occurred.","{entries} entries selected":"{entries} entries selected","Download":"Download","Bulk Actions":"Bulk Actions","Delivery":"Delivery","Take Away":"Take Away","Unknown Type":"Unknown Type","Pending":"Pending","Ongoing":"Ongoing","Delivered":"Delivered","Unknown Status":"Unknown Status","Ready":"Ready","Paid":"Paid","Hold":"Hold","Unpaid":"Unpaid","Partially Paid":"Partially Paid","Save Password":"Save Password","Unable to proceed the form is not valid.":"Unable to proceed the form is not valid.","Submit":"Submit","Register":"Register","An unexpected error occurred.":"An unexpected error occurred.","Best Cashiers":"Best Cashiers","No result to display.":"No result to display.","Well.. nothing to show for the meantime.":"Well.. nothing to show for the meantime.","Best Customers":"Best Customers","Well.. nothing to show for the meantime":"Well.. nothing to show for the meantime","Total Sales":"Total Sales","Today":"Today","Incomplete Orders":"Incomplete Orders","Expenses":"Expenses","Weekly Sales":"Weekly Sales","Week Taxes":"Week Taxes","Net Income":"Net Income","Week Expenses":"Week Expenses","Order":"Order","Clear All":"Clear All","Confirm Your Action":"Confirm Your Action","Save":"Save","The processing status of the order will be changed. Please confirm your action.":"The processing status of the order will be changed. Please confirm your action.","Instalments":"Instalments","Create":"Create","Add Instalment":"Add Instalment","An unexpected error has occurred":"An unexpected error has occurred","Store Details":"Store Details","Order Code":"Order Code","Cashier":"Cashier","Date":"Date","Customer":"Customer","Type":"Type","Payment Status":"Payment Status","Delivery Status":"Delivery Status","Billing Details":"Billing Details","Shipping Details":"Shipping Details","Product":"Product","Unit Price":"Unit Price","Quantity":"Quantity","Discount":"Discount","Tax":"Tax","Total Price":"Total Price","Expiration Date":"Expiration Date","Sub Total":"Sub Total","Coupons":"Coupons","Shipping":"Shipping","Total":"Total","Due":"Due","Change":"Change","No title is provided":"No title is provided","SKU":"SKU","Barcode":"Barcode","The product already exists on the table.":"The product already exists on the table.","The specified quantity exceed the available quantity.":"The specified quantity exceed the available quantity.","Unable to proceed as the table is empty.":"Unable to proceed as the table is empty.","More Details":"More Details","Useful to describe better what are the reasons that leaded to this adjustment.":"Useful to describe better what are the reasons that leaded to this adjustment.","Search":"Search","Unit":"Unit","Operation":"Operation","Procurement":"Procurement","Value":"Value","Search and add some products":"Search and add some products","Proceed":"Proceed","An unexpected error occurred":"An unexpected error occurred","Load Coupon":"Load Coupon","Apply A Coupon":"Apply A Coupon","Load":"Load","Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.":"Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.","Click here to choose a customer.":"Click here to choose a customer.","Coupon Name":"Coupon Name","Usage":"Usage","Unlimited":"Unlimited","Valid From":"Valid From","Valid Till":"Valid Till","Categories":"Categories","Products":"Products","Active Coupons":"Active Coupons","Apply":"Apply","Cancel":"Cancel","Coupon Code":"Coupon Code","The coupon is out from validity date range.":"The coupon is out from validity date range.","The coupon has applied to the cart.":"The coupon has applied to the cart.","Percentage":"Percentage","Flat":"Flat","The coupon has been loaded.":"The coupon has been loaded.","Layaway Parameters":"Layaway Parameters","Minimum Payment":"Minimum Payment","Instalments & Payments":"Instalments & Payments","The final payment date must be the last within the instalments.":"The final payment date must be the last within the instalments.","Amount":"Amount","You must define layaway settings before proceeding.":"You must define layaway settings before proceeding.","Please provide instalments before proceeding.":"Please provide instalments before proceeding.","Unable to process, the form is not valid":"Unable to process, the form is not valid","One or more instalments has an invalid date.":"One or more instalments has an invalid date.","One or more instalments has an invalid amount.":"One or more instalments has an invalid amount.","One or more instalments has a date prior to the current date.":"One or more instalments has a date prior to the current date.","Total instalments must be equal to the order total.":"Total instalments must be equal to the order total.","The customer has been loaded":"The customer has been loaded","This coupon is already added to the cart":"This coupon is already added to the cart","No tax group assigned to the order":"No tax group assigned to the order","Layaway defined":"Layaway defined","Okay":"Okay","An unexpected error has occurred while fecthing taxes.":"An unexpected error has occurred while fecthing taxes.","OKAY":"OKAY","Loading...":"Loading...","Profile":"Profile","Logout":"Logout","Unnamed Page":"Unnamed Page","No description":"No description","Name":"Name","Provide a name to the resource.":"Provide a name to the resource.","General":"General","Edit":"Edit","Delete":"Delete","Delete Selected Groups":"Delete Selected Groups","Activate Your Account":"Activate Your Account","Password Recovered":"Password Recovered","Password Recovery":"Password Recovery","Reset Password":"Reset Password","New User Registration":"New User Registration","Your Account Has Been Created":"Your Account Has Been Created","Login":"Login","Save Coupon":"Save Coupon","This field is required":"This field is required","The form is not valid. Please check it and try again":"The form is not valid. Please check it and try again","mainFieldLabel not defined":"mainFieldLabel not defined","Create Customer Group":"Create Customer Group","Save a new customer group":"Save a new customer group","Update Group":"Update Group","Modify an existing customer group":"Modify an existing customer group","Managing Customers Groups":"Managing Customers Groups","Create groups to assign customers":"Create groups to assign customers","Create Customer":"Create Customer","Managing Customers":"Managing Customers","List of registered customers":"List of registered customers","Your Module":"Your Module","Choose the zip file you would like to upload":"Choose the zip file you would like to upload","Upload":"Upload","Managing Orders":"Managing Orders","Manage all registered orders.":"Manage all registered orders.","Failed":"Failed","Order receipt":"Order receipt","Hide Dashboard":"Hide Dashboard","Taxes":"Taxes","Unknown Payment":"Unknown Payment","Procurement Name":"Procurement Name","Unable to proceed no products has been provided.":"Unable to proceed no products has been provided.","Unable to proceed, one or more products is not valid.":"Unable to proceed, one or more products is not valid.","Unable to proceed the procurement form is not valid.":"Unable to proceed the procurement form is not valid.","Unable to proceed, no submit url has been provided.":"Unable to proceed, no submit url has been provided.","SKU, Barcode, Product name.":"SKU, Barcode, Product name.","N\/A":"N\/A","Email":"Email","Phone":"Phone","First Address":"First Address","Second Address":"Second Address","Address":"Address","City":"City","PO.Box":"PO.Box","Price":"Price","Print":"Print","Description":"Description","Included Products":"Included Products","Apply Settings":"Apply Settings","Basic Settings":"Basic Settings","Visibility Settings":"Visibility Settings","Year":"Year","Sales":"Sales","Income":"Income","January":"January","March":"March","April":"April","May":"May","June":"June","July":"July","August":"August","September":"September","October":"October","November":"November","December":"December","Purchase Price":"Purchase Price","Sale Price":"Sale Price","Profit":"Profit","Tax Value":"Tax Value","Reward System Name":"Reward System Name","Missing Dependency":"Missing Dependency","Go Back":"Go Back","Continue":"Continue","Home":"Home","Not Allowed Action":"Not Allowed Action","Try Again":"Try Again","Access Denied":"Access Denied","Dashboard":"Dashboard","Sign In":"Sign In","Sign Up":"Sign Up","This field is required.":"This field is required.","This field must contain a valid email address.":"This field must contain a valid email address.","Clear Selected Entries ?":"Clear Selected Entries ?","Would you like to clear all selected entries ?":"Would you like to clear all selected entries ?","No selection has been made.":"No selection has been made.","No action has been selected.":"No action has been selected.","There is nothing to display...":"There is nothing to display...","Sun":"Sun","Mon":"Mon","Tue":"Tue","Wed":"Wed","Fri":"Fri","Sat":"Sat","Nothing to display":"Nothing to display","Password Forgotten ?":"Password Forgotten ?","OK":"OK","Remember Your Password ?":"Remember Your Password ?","Already registered ?":"Already registered ?","Refresh":"Refresh","Enabled":"Enabled","Disabled":"Disabled","Enable":"Enable","Disable":"Disable","Gallery":"Gallery","Medias Manager":"Medias Manager","Click Here Or Drop Your File To Upload":"Click Here Or Drop Your File To Upload","Nothing has already been uploaded":"Nothing has already been uploaded","File Name":"File Name","Uploaded At":"Uploaded At","By":"By","Previous":"Previous","Next":"Next","Use Selected":"Use Selected","Would you like to clear all the notifications ?":"Would you like to clear all the notifications ?","Permissions":"Permissions","Payment Summary":"Payment Summary","Order Status":"Order Status","Would you proceed ?":"Would you proceed ?","Would you like to create this instalment ?":"Would you like to create this instalment ?","Would you like to delete this instalment ?":"Would you like to delete this instalment ?","Would you like to update that instalment ?":"Would you like to update that instalment ?","Customer Account":"Customer Account","Payment":"Payment","No payment possible for paid order.":"No payment possible for paid order.","Payment History":"Payment History","Unable to proceed the form is not valid":"Unable to proceed the form is not valid","Please provide a valid value":"Please provide a valid value","Refund With Products":"Refund With Products","Refund Shipping":"Refund Shipping","Add Product":"Add Product","Damaged":"Damaged","Unspoiled":"Unspoiled","Summary":"Summary","Payment Gateway":"Payment Gateway","Screen":"Screen","Select the product to perform a refund.":"Select the product to perform a refund.","Please select a payment gateway before proceeding.":"Please select a payment gateway before proceeding.","There is nothing to refund.":"There is nothing to refund.","Please provide a valid payment amount.":"Please provide a valid payment amount.","The refund will be made on the current order.":"The refund will be made on the current order.","Please select a product before proceeding.":"Please select a product before proceeding.","Not enough quantity to proceed.":"Not enough quantity to proceed.","Would you like to delete this product ?":"Would you like to delete this product ?","Customers":"Customers","Order Type":"Order Type","Orders":"Orders","Cash Register":"Cash Register","Reset":"Reset","Cart":"Cart","Comments":"Comments","No products added...":"No products added...","Pay":"Pay","Void":"Void","Current Balance":"Current Balance","Full Payment":"Full Payment","The customer account can only be used once per order. Consider deleting the previously used payment.":"The customer account can only be used once per order. Consider deleting the previously used payment.","Not enough funds to add {amount} as a payment. Available balance {balance}.":"Not enough funds to add {amount} as a payment. Available balance {balance}.","Confirm Full Payment":"Confirm Full Payment","A full payment will be made using {paymentType} for {total}":"A full payment will be made using {paymentType} for {total}","You need to provide some products before proceeding.":"You need to provide some products before proceeding.","Unable to add the product, there is not enough stock. Remaining %s":"Unable to add the product, there is not enough stock. Remaining %s","Add Images":"Add Images","New Group":"New Group","Available Quantity":"Available Quantity","Would you like to delete this group ?":"Would you like to delete this group ?","Your Attention Is Required":"Your Attention Is Required","Please select at least one unit group before you proceed.":"Please select at least one unit group before you proceed.","Unable to proceed as one of the unit group field is invalid":"Unable to proceed as one of the unit group field is invalid","Would you like to delete this variation ?":"Would you like to delete this variation ?","Details":"Details","Unable to proceed, no product were provided.":"Unable to proceed, no product were provided.","Unable to proceed, one or more product has incorrect values.":"Unable to proceed, one or more product has incorrect values.","Unable to proceed, the procurement form is not valid.":"Unable to proceed, the procurement form is not valid.","Unable to submit, no valid submit URL were provided.":"Unable to submit, no valid submit URL were provided.","Options":"Options","The stock adjustment is about to be made. Would you like to confirm ?":"The stock adjustment is about to be made. Would you like to confirm ?","Would you like to remove this product from the table ?":"Would you like to remove this product from the table ?","Unable to proceed. Select a correct time range.":"Unable to proceed. Select a correct time range.","Unable to proceed. The current time range is not valid.":"Unable to proceed. The current time range is not valid.","Would you like to proceed ?":"Would you like to proceed ?","No rules has been provided.":"No rules has been provided.","No valid run were provided.":"No valid run were provided.","Unable to proceed, the form is invalid.":"Unable to proceed, the form is invalid.","Unable to proceed, no valid submit URL is defined.":"Unable to proceed, no valid submit URL is defined.","No title Provided":"No title Provided","Add Rule":"Add Rule","Save Settings":"Save Settings","Ok":"Ok","New Transaction":"New Transaction","Close":"Close","Would you like to delete this order":"Would you like to delete this order","The current order will be void. This action will be recorded. Consider providing a reason for this operation":"The current order will be void. This action will be recorded. Consider providing a reason for this operation","Order Options":"Order Options","Payments":"Payments","Refund & Return":"Refund & Return","Installments":"Installments","The form is not valid.":"The form is not valid.","Balance":"Balance","Input":"Input","Register History":"Register History","Close Register":"Close Register","Cash In":"Cash In","Cash Out":"Cash Out","Register Options":"Register Options","History":"History","Unable to open this register. Only closed register can be opened.":"Unable to open this register. Only closed register can be opened.","Open The Register":"Open The Register","Exit To Orders":"Exit To Orders","Looks like there is no registers. At least one register is required to proceed.":"Looks like there is no registers. At least one register is required to proceed.","Create Cash Register":"Create Cash Register","Yes":"Yes","No":"No","Use":"Use","No coupon available for this customer":"No coupon available for this customer","Select Customer":"Select Customer","No customer match your query...":"No customer match your query...","Customer Name":"Customer Name","Save Customer":"Save Customer","No Customer Selected":"No Customer Selected","In order to see a customer account, you need to select one customer.":"In order to see a customer account, you need to select one customer.","Summary For":"Summary For","Total Purchases":"Total Purchases","Last Purchases":"Last Purchases","Status":"Status","No orders...":"No orders...","Account Transaction":"Account Transaction","Product Discount":"Product Discount","Cart Discount":"Cart Discount","Hold Order":"Hold Order","The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.":"The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.","Confirm":"Confirm","Order Note":"Order Note","Note":"Note","More details about this order":"More details about this order","Display On Receipt":"Display On Receipt","Will display the note on the receipt":"Will display the note on the receipt","Open":"Open","Define The Order Type":"Define The Order Type","Payment List":"Payment List","List Of Payments":"List Of Payments","No Payment added.":"No Payment added.","Select Payment":"Select Payment","Submit Payment":"Submit Payment","Layaway":"Layaway","On Hold":"On Hold","Tendered":"Tendered","Nothing to display...":"Nothing to display...","Define Quantity":"Define Quantity","Please provide a quantity":"Please provide a quantity","Search Product":"Search Product","There is nothing to display. Have you started the search ?":"There is nothing to display. Have you started the search ?","Shipping & Billing":"Shipping & Billing","Tax & Summary":"Tax & Summary","Settings":"Settings","Select Tax":"Select Tax","Define the tax that apply to the sale.":"Define the tax that apply to the sale.","Define how the tax is computed":"Define how the tax is computed","Exclusive":"Exclusive","Inclusive":"Inclusive","Define when that specific product should expire.":"Define when that specific product should expire.","Renders the automatically generated barcode.":"Renders the automatically generated barcode.","Tax Type":"Tax Type","Adjust how tax is calculated on the item.":"Adjust how tax is calculated on the item.","Unable to proceed. The form is not valid.":"Unable to proceed. The form is not valid.","Units & Quantities":"Units & Quantities","Wholesale Price":"Wholesale Price","Select":"Select","Would you like to delete this ?":"Would you like to delete this ?","The account you have created for __%s__, require an activation. In order to proceed, please click on the following link":"The account you have created for __%s__, require an activation. In order to proceed, please click on the following link","Your password has been successfully updated on __%s__. You can now login with your new password.":"Your password has been successfully updated on __%s__. You can now login with your new password.","Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ":"Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ","Receipt — %s":"Receipt — %s","Unable to find a module having the identifier\/namespace \"%s\"":"Unable to find a module having the identifier\/namespace \"%s\"","What is the CRUD single resource name ? [Q] to quit.":"What is the CRUD single resource name ? [Q] to quit.","Which table name should be used ? [Q] to quit.":"Which table name should be used ? [Q] to quit.","If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.","Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.","Not enough parameters provided for the relation.":"Not enough parameters provided for the relation.","The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"":"The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"","The CRUD resource \"%s\" has been generated at %s":"The CRUD resource \"%s\" has been generated at %s","An unexpected error has occurred.":"An unexpected error has occurred.","Localization for %s extracted to %s":"Localization for %s extracted to %s","Unable to find the requested module.":"Unable to find the requested module.","Version":"Version","Path":"Path","Index":"Index","Entry Class":"Entry Class","Routes":"Routes","Api":"Api","Controllers":"Controllers","Views":"Views","Attribute":"Attribute","Namespace":"Namespace","Author":"Author","The product barcodes has been refreshed successfully.":"The product barcodes has been refreshed successfully.","What is the store name ? [Q] to quit.":"What is the store name ? [Q] to quit.","Please provide at least 6 characters for store name.":"Please provide at least 6 characters for store name.","What is the administrator password ? [Q] to quit.":"What is the administrator password ? [Q] to quit.","Please provide at least 6 characters for the administrator password.":"Please provide at least 6 characters for the administrator password.","What is the administrator email ? [Q] to quit.":"What is the administrator email ? [Q] to quit.","Please provide a valid email for the administrator.":"Please provide a valid email for the administrator.","What is the administrator username ? [Q] to quit.":"What is the administrator username ? [Q] to quit.","Please provide at least 5 characters for the administrator username.":"Please provide at least 5 characters for the administrator username.","Downloading latest dev build...":"Downloading latest dev build...","Reset project to HEAD...":"Reset project to HEAD...","Coupons List":"Coupons List","Display all coupons.":"Display all coupons.","No coupons has been registered":"No coupons has been registered","Add a new coupon":"Add a new coupon","Create a new coupon":"Create a new coupon","Register a new coupon and save it.":"Register a new coupon and save it.","Edit coupon":"Edit coupon","Modify Coupon.":"Modify Coupon.","Return to Coupons":"Return to Coupons","Might be used while printing the coupon.":"Might be used while printing the coupon.","Percentage Discount":"Percentage Discount","Flat Discount":"Flat Discount","Define which type of discount apply to the current coupon.":"Define which type of discount apply to the current coupon.","Discount Value":"Discount Value","Define the percentage or flat value.":"Define the percentage or flat value.","Valid Until":"Valid Until","Minimum Cart Value":"Minimum Cart Value","What is the minimum value of the cart to make this coupon eligible.":"What is the minimum value of the cart to make this coupon eligible.","Maximum Cart Value":"Maximum Cart Value","Valid Hours Start":"Valid Hours Start","Define form which hour during the day the coupons is valid.":"Define form which hour during the day the coupons is valid.","Valid Hours End":"Valid Hours End","Define to which hour during the day the coupons end stop valid.":"Define to which hour during the day the coupons end stop valid.","Limit Usage":"Limit Usage","Define how many time a coupons can be redeemed.":"Define how many time a coupons can be redeemed.","Select Products":"Select Products","The following products will be required to be present on the cart, in order for this coupon to be valid.":"The following products will be required to be present on the cart, in order for this coupon to be valid.","Select Categories":"Select Categories","The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.":"The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.","Created At":"Created At","Undefined":"Undefined","Delete a licence":"Delete a licence","Customer Coupons List":"Customer Coupons List","Display all customer coupons.":"Display all customer coupons.","No customer coupons has been registered":"No customer coupons has been registered","Add a new customer coupon":"Add a new customer coupon","Create a new customer coupon":"Create a new customer coupon","Register a new customer coupon and save it.":"Register a new customer coupon and save it.","Edit customer coupon":"Edit customer coupon","Modify Customer Coupon.":"Modify Customer Coupon.","Return to Customer Coupons":"Return to Customer Coupons","Id":"Id","Limit":"Limit","Created_at":"Created_at","Updated_at":"Updated_at","Code":"Code","Customers List":"Customers List","Display all customers.":"Display all customers.","No customers has been registered":"No customers has been registered","Add a new customer":"Add a new customer","Create a new customer":"Create a new customer","Register a new customer and save it.":"Register a new customer and save it.","Edit customer":"Edit customer","Modify Customer.":"Modify Customer.","Return to Customers":"Return to Customers","Provide a unique name for the customer.":"Provide a unique name for the customer.","Group":"Group","Assign the customer to a group":"Assign the customer to a group","Phone Number":"Phone Number","Provide the customer phone number":"Provide the customer phone number","PO Box":"PO Box","Provide the customer PO.Box":"Provide the customer PO.Box","Not Defined":"Not Defined","Male":"Male","Female":"Female","Gender":"Gender","Billing Address":"Billing Address","Billing phone number.":"Billing phone number.","Address 1":"Address 1","Billing First Address.":"Billing First Address.","Address 2":"Address 2","Billing Second Address.":"Billing Second Address.","Country":"Country","Billing Country.":"Billing Country.","Postal Address":"Postal Address","Company":"Company","Shipping Address":"Shipping Address","Shipping phone number.":"Shipping phone number.","Shipping First Address.":"Shipping First Address.","Shipping Second Address.":"Shipping Second Address.","Shipping Country.":"Shipping Country.","Account Credit":"Account Credit","Owed Amount":"Owed Amount","Purchase Amount":"Purchase Amount","Rewards":"Rewards","Delete a customers":"Delete a customers","Delete Selected Customers":"Delete Selected Customers","Customer Groups List":"Customer Groups List","Display all Customers Groups.":"Display all Customers Groups.","No Customers Groups has been registered":"No Customers Groups has been registered","Add a new Customers Group":"Add a new Customers Group","Create a new Customers Group":"Create a new Customers Group","Register a new Customers Group and save it.":"Register a new Customers Group and save it.","Edit Customers Group":"Edit Customers Group","Modify Customers group.":"Modify Customers group.","Return to Customers Groups":"Return to Customers Groups","Reward System":"Reward System","Select which Reward system applies to the group":"Select which Reward system applies to the group","Minimum Credit Amount":"Minimum Credit Amount","A brief description about what this group is about":"A brief description about what this group is about","Created On":"Created On","Customer Orders List":"Customer Orders List","Display all customer orders.":"Display all customer orders.","No customer orders has been registered":"No customer orders has been registered","Add a new customer order":"Add a new customer order","Create a new customer order":"Create a new customer order","Register a new customer order and save it.":"Register a new customer order and save it.","Edit customer order":"Edit customer order","Modify Customer Order.":"Modify Customer Order.","Return to Customer Orders":"Return to Customer Orders","Created at":"Created at","Customer Id":"Customer Id","Discount Percentage":"Discount Percentage","Discount Type":"Discount Type","Final Payment Date":"Final Payment Date","Process Status":"Process Status","Shipping Rate":"Shipping Rate","Shipping Type":"Shipping Type","Title":"Title","Total installments":"Total installments","Updated at":"Updated at","Uuid":"Uuid","Voidance Reason":"Voidance Reason","Customer Rewards List":"Customer Rewards List","Display all customer rewards.":"Display all customer rewards.","No customer rewards has been registered":"No customer rewards has been registered","Add a new customer reward":"Add a new customer reward","Create a new customer reward":"Create a new customer reward","Register a new customer reward and save it.":"Register a new customer reward and save it.","Edit customer reward":"Edit customer reward","Modify Customer Reward.":"Modify Customer Reward.","Return to Customer Rewards":"Return to Customer Rewards","Points":"Points","Target":"Target","Reward Name":"Reward Name","Last Update":"Last Update","Active":"Active","Users Group":"Users Group","None":"None","Recurring":"Recurring","Start of Month":"Start of Month","Mid of Month":"Mid of Month","End of Month":"End of Month","X days Before Month Ends":"X days Before Month Ends","X days After Month Starts":"X days After Month Starts","Occurrence":"Occurrence","Occurrence Value":"Occurrence Value","Must be used in case of X days after month starts and X days before month ends.":"Must be used in case of X days after month starts and X days before month ends.","Category":"Category","Month Starts":"Month Starts","Month Middle":"Month Middle","Month Ends":"Month Ends","X Days Before Month Ends":"X Days Before Month Ends","Updated At":"Updated At","Hold Orders List":"Hold Orders List","Display all hold orders.":"Display all hold orders.","No hold orders has been registered":"No hold orders has been registered","Add a new hold order":"Add a new hold order","Create a new hold order":"Create a new hold order","Register a new hold order and save it.":"Register a new hold order and save it.","Edit hold order":"Edit hold order","Modify Hold Order.":"Modify Hold Order.","Return to Hold Orders":"Return to Hold Orders","Orders List":"Orders List","Display all orders.":"Display all orders.","No orders has been registered":"No orders has been registered","Add a new order":"Add a new order","Create a new order":"Create a new order","Register a new order and save it.":"Register a new order and save it.","Edit order":"Edit order","Modify Order.":"Modify Order.","Return to Orders":"Return to Orders","Discount Rate":"Discount Rate","The order and the attached products has been deleted.":"The order and the attached products has been deleted.","Invoice":"Invoice","Receipt":"Receipt","Order Instalments List":"Order Instalments List","Display all Order Instalments.":"Display all Order Instalments.","No Order Instalment has been registered":"No Order Instalment has been registered","Add a new Order Instalment":"Add a new Order Instalment","Create a new Order Instalment":"Create a new Order Instalment","Register a new Order Instalment and save it.":"Register a new Order Instalment and save it.","Edit Order Instalment":"Edit Order Instalment","Modify Order Instalment.":"Modify Order Instalment.","Return to Order Instalment":"Return to Order Instalment","Order Id":"Order Id","Payment Types List":"Payment Types List","Display all payment types.":"Display all payment types.","No payment types has been registered":"No payment types has been registered","Add a new payment type":"Add a new payment type","Create a new payment type":"Create a new payment type","Register a new payment type and save it.":"Register a new payment type and save it.","Edit payment type":"Edit payment type","Modify Payment Type.":"Modify Payment Type.","Return to Payment Types":"Return to Payment Types","Label":"Label","Provide a label to the resource.":"Provide a label to the resource.","Identifier":"Identifier","A payment type having the same identifier already exists.":"A payment type having the same identifier already exists.","Unable to delete a read-only payments type.":"Unable to delete a read-only payments type.","Readonly":"Readonly","Procurements List":"Procurements List","Display all procurements.":"Display all procurements.","No procurements has been registered":"No procurements has been registered","Add a new procurement":"Add a new procurement","Create a new procurement":"Create a new procurement","Register a new procurement and save it.":"Register a new procurement and save it.","Edit procurement":"Edit procurement","Modify Procurement.":"Modify Procurement.","Return to Procurements":"Return to Procurements","Provider Id":"Provider Id","Total Items":"Total Items","Provider":"Provider","Stocked":"Stocked","Procurement Products List":"Procurement Products List","Display all procurement products.":"Display all procurement products.","No procurement products has been registered":"No procurement products has been registered","Add a new procurement product":"Add a new procurement product","Create a new procurement product":"Create a new procurement product","Register a new procurement product and save it.":"Register a new procurement product and save it.","Edit procurement product":"Edit procurement product","Modify Procurement Product.":"Modify Procurement Product.","Return to Procurement Products":"Return to Procurement Products","Define what is the expiration date of the product.":"Define what is the expiration date of the product.","On":"On","Category Products List":"Category Products List","Display all category products.":"Display all category products.","No category products has been registered":"No category products has been registered","Add a new category product":"Add a new category product","Create a new category product":"Create a new category product","Register a new category product and save it.":"Register a new category product and save it.","Edit category product":"Edit category product","Modify Category Product.":"Modify Category Product.","Return to Category Products":"Return to Category Products","No Parent":"No Parent","Preview":"Preview","Provide a preview url to the category.":"Provide a preview url to the category.","Displays On POS":"Displays On POS","Parent":"Parent","If this category should be a child category of an existing category":"If this category should be a child category of an existing category","Total Products":"Total Products","Products List":"Products List","Display all products.":"Display all products.","No products has been registered":"No products has been registered","Add a new product":"Add a new product","Create a new product":"Create a new product","Register a new product and save it.":"Register a new product and save it.","Edit product":"Edit product","Modify Product.":"Modify Product.","Return to Products":"Return to Products","Assigned Unit":"Assigned Unit","The assigned unit for sale":"The assigned unit for sale","Define the regular selling price.":"Define the regular selling price.","Define the wholesale price.":"Define the wholesale price.","Preview Url":"Preview Url","Provide the preview of the current unit.":"Provide the preview of the current unit.","Identification":"Identification","Define the barcode value. Focus the cursor here before scanning the product.":"Define the barcode value. Focus the cursor here before scanning the product.","Define the barcode type scanned.":"Define the barcode type scanned.","EAN 8":"EAN 8","EAN 13":"EAN 13","Barcode Type":"Barcode Type","Select to which category the item is assigned.":"Select to which category the item is assigned.","Materialized Product":"Materialized Product","Dematerialized Product":"Dematerialized Product","Define the product type. Applies to all variations.":"Define the product type. Applies to all variations.","Product Type":"Product Type","Define a unique SKU value for the product.":"Define a unique SKU value for the product.","On Sale":"On Sale","Hidden":"Hidden","Define whether the product is available for sale.":"Define whether the product is available for sale.","Enable the stock management on the product. Will not work for service or uncountable products.":"Enable the stock management on the product. Will not work for service or uncountable products.","Stock Management Enabled":"Stock Management Enabled","Units":"Units","Accurate Tracking":"Accurate Tracking","What unit group applies to the actual item. This group will apply during the procurement.":"What unit group applies to the actual item. This group will apply during the procurement.","Unit Group":"Unit Group","Determine the unit for sale.":"Determine the unit for sale.","Selling Unit":"Selling Unit","Expiry":"Expiry","Product Expires":"Product Expires","Set to \"No\" expiration time will be ignored.":"Set to \"No\" expiration time will be ignored.","Prevent Sales":"Prevent Sales","Allow Sales":"Allow Sales","Determine the action taken while a product has expired.":"Determine the action taken while a product has expired.","On Expiration":"On Expiration","Select the tax group that applies to the product\/variation.":"Select the tax group that applies to the product\/variation.","Tax Group":"Tax Group","Define what is the type of the tax.":"Define what is the type of the tax.","Images":"Images","Image":"Image","Choose an image to add on the product gallery":"Choose an image to add on the product gallery","Is Primary":"Is Primary","Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.":"Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.","Sku":"Sku","Materialized":"Materialized","Dematerialized":"Dematerialized","Available":"Available","See Quantities":"See Quantities","See History":"See History","Would you like to delete selected entries ?":"Would you like to delete selected entries ?","Product Histories":"Product Histories","Display all product histories.":"Display all product histories.","No product histories has been registered":"No product histories has been registered","Add a new product history":"Add a new product history","Create a new product history":"Create a new product history","Register a new product history and save it.":"Register a new product history and save it.","Edit product history":"Edit product history","Modify Product History.":"Modify Product History.","Return to Product Histories":"Return to Product Histories","After Quantity":"After Quantity","Before Quantity":"Before Quantity","Operation Type":"Operation Type","Order id":"Order id","Procurement Id":"Procurement Id","Procurement Product Id":"Procurement Product Id","Product Id":"Product Id","Unit Id":"Unit Id","P. Quantity":"P. Quantity","N. Quantity":"N. Quantity","Defective":"Defective","Deleted":"Deleted","Removed":"Removed","Returned":"Returned","Sold":"Sold","Added":"Added","Incoming Transfer":"Incoming Transfer","Outgoing Transfer":"Outgoing Transfer","Transfer Rejected":"Transfer Rejected","Transfer Canceled":"Transfer Canceled","Void Return":"Void Return","Adjustment Return":"Adjustment Return","Adjustment Sale":"Adjustment Sale","Product Unit Quantities List":"Product Unit Quantities List","Display all product unit quantities.":"Display all product unit quantities.","No product unit quantities has been registered":"No product unit quantities has been registered","Add a new product unit quantity":"Add a new product unit quantity","Create a new product unit quantity":"Create a new product unit quantity","Register a new product unit quantity and save it.":"Register a new product unit quantity and save it.","Edit product unit quantity":"Edit product unit quantity","Modify Product Unit Quantity.":"Modify Product Unit Quantity.","Return to Product Unit Quantities":"Return to Product Unit Quantities","Product id":"Product id","Providers List":"Providers List","Display all providers.":"Display all providers.","No providers has been registered":"No providers has been registered","Add a new provider":"Add a new provider","Create a new provider":"Create a new provider","Register a new provider and save it.":"Register a new provider and save it.","Edit provider":"Edit provider","Modify Provider.":"Modify Provider.","Return to Providers":"Return to Providers","Provide the provider email. Might be used to send automated email.":"Provide the provider email. Might be used to send automated email.","Contact phone number for the provider. Might be used to send automated SMS notifications.":"Contact phone number for the provider. Might be used to send automated SMS notifications.","First address of the provider.":"First address of the provider.","Second address of the provider.":"Second address of the provider.","Further details about the provider":"Further details about the provider","Amount Due":"Amount Due","Amount Paid":"Amount Paid","See Procurements":"See Procurements","Registers List":"Registers List","Display all registers.":"Display all registers.","No registers has been registered":"No registers has been registered","Add a new register":"Add a new register","Create a new register":"Create a new register","Register a new register and save it.":"Register a new register and save it.","Edit register":"Edit register","Modify Register.":"Modify Register.","Return to Registers":"Return to Registers","Closed":"Closed","Define what is the status of the register.":"Define what is the status of the register.","Provide mode details about this cash register.":"Provide mode details about this cash register.","Unable to delete a register that is currently in use":"Unable to delete a register that is currently in use","Used By":"Used By","Register History List":"Register History List","Display all register histories.":"Display all register histories.","No register histories has been registered":"No register histories has been registered","Add a new register history":"Add a new register history","Create a new register history":"Create a new register history","Register a new register history and save it.":"Register a new register history and save it.","Edit register history":"Edit register history","Modify Registerhistory.":"Modify Registerhistory.","Return to Register History":"Return to Register History","Register Id":"Register Id","Action":"Action","Register Name":"Register Name","Done At":"Done At","Reward Systems List":"Reward Systems List","Display all reward systems.":"Display all reward systems.","No reward systems has been registered":"No reward systems has been registered","Add a new reward system":"Add a new reward system","Create a new reward system":"Create a new reward system","Register a new reward system and save it.":"Register a new reward system and save it.","Edit reward system":"Edit reward system","Modify Reward System.":"Modify Reward System.","Return to Reward Systems":"Return to Reward Systems","From":"From","The interval start here.":"The interval start here.","To":"To","The interval ends here.":"The interval ends here.","Points earned.":"Points earned.","Coupon":"Coupon","Decide which coupon you would apply to the system.":"Decide which coupon you would apply to the system.","This is the objective that the user should reach to trigger the reward.":"This is the objective that the user should reach to trigger the reward.","A short description about this system":"A short description about this system","Would you like to delete this reward system ?":"Would you like to delete this reward system ?","Delete Selected Rewards":"Delete Selected Rewards","Would you like to delete selected rewards?":"Would you like to delete selected rewards?","Roles List":"Roles List","Display all roles.":"Display all roles.","No role has been registered.":"No role has been registered.","Add a new role":"Add a new role","Create a new role":"Create a new role","Create a new role and save it.":"Create a new role and save it.","Edit role":"Edit role","Modify Role.":"Modify Role.","Return to Roles":"Return to Roles","Provide a name to the role.":"Provide a name to the role.","Should be a unique value with no spaces or special character":"Should be a unique value with no spaces or special character","Provide more details about what this role is about.":"Provide more details about what this role is about.","Unable to delete a system role.":"Unable to delete a system role.","You do not have enough permissions to perform this action.":"You do not have enough permissions to perform this action.","Taxes List":"Taxes List","Display all taxes.":"Display all taxes.","No taxes has been registered":"No taxes has been registered","Add a new tax":"Add a new tax","Create a new tax":"Create a new tax","Register a new tax and save it.":"Register a new tax and save it.","Edit tax":"Edit tax","Modify Tax.":"Modify Tax.","Return to Taxes":"Return to Taxes","Provide a name to the tax.":"Provide a name to the tax.","Assign the tax to a tax group.":"Assign the tax to a tax group.","Rate":"Rate","Define the rate value for the tax.":"Define the rate value for the tax.","Provide a description to the tax.":"Provide a description to the tax.","Taxes Groups List":"Taxes Groups List","Display all taxes groups.":"Display all taxes groups.","No taxes groups has been registered":"No taxes groups has been registered","Add a new tax group":"Add a new tax group","Create a new tax group":"Create a new tax group","Register a new tax group and save it.":"Register a new tax group and save it.","Edit tax group":"Edit tax group","Modify Tax Group.":"Modify Tax Group.","Return to Taxes Groups":"Return to Taxes Groups","Provide a short description to the tax group.":"Provide a short description to the tax group.","Units List":"Units List","Display all units.":"Display all units.","No units has been registered":"No units has been registered","Add a new unit":"Add a new unit","Create a new unit":"Create a new unit","Register a new unit and save it.":"Register a new unit and save it.","Edit unit":"Edit unit","Modify Unit.":"Modify Unit.","Return to Units":"Return to Units","Preview URL":"Preview URL","Preview of the unit.":"Preview of the unit.","Define the value of the unit.":"Define the value of the unit.","Define to which group the unit should be assigned.":"Define to which group the unit should be assigned.","Base Unit":"Base Unit","Determine if the unit is the base unit from the group.":"Determine if the unit is the base unit from the group.","Provide a short description about the unit.":"Provide a short description about the unit.","Unit Groups List":"Unit Groups List","Display all unit groups.":"Display all unit groups.","No unit groups has been registered":"No unit groups has been registered","Add a new unit group":"Add a new unit group","Create a new unit group":"Create a new unit group","Register a new unit group and save it.":"Register a new unit group and save it.","Edit unit group":"Edit unit group","Modify Unit Group.":"Modify Unit Group.","Return to Unit Groups":"Return to Unit Groups","Users List":"Users List","Display all users.":"Display all users.","No users has been registered":"No users has been registered","Add a new user":"Add a new user","Create a new user":"Create a new user","Register a new user and save it.":"Register a new user and save it.","Edit user":"Edit user","Modify User.":"Modify User.","Return to Users":"Return to Users","Username":"Username","Will be used for various purposes such as email recovery.":"Will be used for various purposes such as email recovery.","Password":"Password","Make a unique and secure password.":"Make a unique and secure password.","Confirm Password":"Confirm Password","Should be the same as the password.":"Should be the same as the password.","Define whether the user can use the application.":"Define whether the user can use the application.","The action you tried to perform is not allowed.":"The action you tried to perform is not allowed.","Not Enough Permissions":"Not Enough Permissions","The resource of the page you tried to access is not available or might have been deleted.":"The resource of the page you tried to access is not available or might have been deleted.","Not Found Exception":"Not Found Exception","Provide your username.":"Provide your username.","Provide your password.":"Provide your password.","Provide your email.":"Provide your email.","Password Confirm":"Password Confirm","define the amount of the transaction.":"define the amount of the transaction.","Further observation while proceeding.":"Further observation while proceeding.","determine what is the transaction type.":"determine what is the transaction type.","Add":"Add","Deduct":"Deduct","Determine the amount of the transaction.":"Determine the amount of the transaction.","Further details about the transaction.":"Further details about the transaction.","Define the installments for the current order.":"Define the installments for the current order.","New Password":"New Password","define your new password.":"define your new password.","confirm your new password.":"confirm your new password.","choose the payment type.":"choose the payment type.","Provide the procurement name.":"Provide the procurement name.","Describe the procurement.":"Describe the procurement.","Define the provider.":"Define the provider.","Define what is the unit price of the product.":"Define what is the unit price of the product.","Condition":"Condition","Determine in which condition the product is returned.":"Determine in which condition the product is returned.","Other Observations":"Other Observations","Describe in details the condition of the returned product.":"Describe in details the condition of the returned product.","Unit Group Name":"Unit Group Name","Provide a unit name to the unit.":"Provide a unit name to the unit.","Describe the current unit.":"Describe the current unit.","assign the current unit to a group.":"assign the current unit to a group.","define the unit value.":"define the unit value.","Provide a unit name to the units group.":"Provide a unit name to the units group.","Describe the current unit group.":"Describe the current unit group.","POS":"POS","Open POS":"Open POS","Create Register":"Create Register","Use Customer Billing":"Use Customer Billing","Define whether the customer billing information should be used.":"Define whether the customer billing information should be used.","General Shipping":"General Shipping","Define how the shipping is calculated.":"Define how the shipping is calculated.","Shipping Fees":"Shipping Fees","Define shipping fees.":"Define shipping fees.","Use Customer Shipping":"Use Customer Shipping","Define whether the customer shipping information should be used.":"Define whether the customer shipping information should be used.","Invoice Number":"Invoice Number","If the procurement has been issued outside of NexoPOS, please provide a unique reference.":"If the procurement has been issued outside of NexoPOS, please provide a unique reference.","Delivery Time":"Delivery Time","If the procurement has to be delivered at a specific time, define the moment here.":"If the procurement has to be delivered at a specific time, define the moment here.","Automatic Approval":"Automatic Approval","Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.":"Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.","Determine what is the actual payment status of the procurement.":"Determine what is the actual payment status of the procurement.","Determine what is the actual provider of the current procurement.":"Determine what is the actual provider of the current procurement.","Provide a name that will help to identify the procurement.":"Provide a name that will help to identify the procurement.","First Name":"First Name","Avatar":"Avatar","Define the image that should be used as an avatar.":"Define the image that should be used as an avatar.","Language":"Language","Choose the language for the current account.":"Choose the language for the current account.","Security":"Security","Old Password":"Old Password","Provide the old password.":"Provide the old password.","Change your password with a better stronger password.":"Change your password with a better stronger password.","Password Confirmation":"Password Confirmation","The profile has been successfully saved.":"The profile has been successfully saved.","The user attribute has been saved.":"The user attribute has been saved.","The options has been successfully updated.":"The options has been successfully updated.","Wrong password provided":"Wrong password provided","Wrong old password provided":"Wrong old password provided","Password Successfully updated.":"Password Successfully updated.","Sign In — NexoPOS":"Sign In — NexoPOS","Sign Up — NexoPOS":"Sign Up — NexoPOS","Password Lost":"Password Lost","Unable to proceed as the token provided is invalid.":"Unable to proceed as the token provided is invalid.","The token has expired. Please request a new activation token.":"The token has expired. Please request a new activation token.","Set New Password":"Set New Password","Database Update":"Database Update","This account is disabled.":"This account is disabled.","Unable to find record having that username.":"Unable to find record having that username.","Unable to find record having that password.":"Unable to find record having that password.","Invalid username or password.":"Invalid username or password.","Unable to login, the provided account is not active.":"Unable to login, the provided account is not active.","You have been successfully connected.":"You have been successfully connected.","The recovery email has been send to your inbox.":"The recovery email has been send to your inbox.","Unable to find a record matching your entry.":"Unable to find a record matching your entry.","Your Account has been created but requires email validation.":"Your Account has been created but requires email validation.","Unable to find the requested user.":"Unable to find the requested user.","Unable to proceed, the provided token is not valid.":"Unable to proceed, the provided token is not valid.","Unable to proceed, the token has expired.":"Unable to proceed, the token has expired.","Your password has been updated.":"Your password has been updated.","Unable to edit a register that is currently in use":"Unable to edit a register that is currently in use","No register has been opened by the logged user.":"No register has been opened by the logged user.","The register is opened.":"The register is opened.","Closing":"Closing","Opening":"Opening","Sale":"Sale","Refund":"Refund","Unable to find the category using the provided identifier":"Unable to find the category using the provided identifier","The category has been deleted.":"The category has been deleted.","Unable to find the category using the provided identifier.":"Unable to find the category using the provided identifier.","Unable to find the attached category parent":"Unable to find the attached category parent","The category has been correctly saved":"The category has been correctly saved","The category has been updated":"The category has been updated","The entry has been successfully deleted.":"The entry has been successfully deleted.","A new entry has been successfully created.":"A new entry has been successfully created.","Unhandled crud resource":"Unhandled crud resource","You need to select at least one item to delete":"You need to select at least one item to delete","You need to define which action to perform":"You need to define which action to perform","Unable to proceed. No matching CRUD resource has been found.":"Unable to proceed. No matching CRUD resource has been found.","Create Coupon":"Create Coupon","helps you creating a coupon.":"helps you creating a coupon.","Edit Coupon":"Edit Coupon","Editing an existing coupon.":"Editing an existing coupon.","Invalid Request.":"Invalid Request.","Unable to delete a group to which customers are still assigned.":"Unable to delete a group to which customers are still assigned.","The customer group has been deleted.":"The customer group has been deleted.","Unable to find the requested group.":"Unable to find the requested group.","The customer group has been successfully created.":"The customer group has been successfully created.","The customer group has been successfully saved.":"The customer group has been successfully saved.","Unable to transfer customers to the same account.":"Unable to transfer customers to the same account.","The categories has been transferred to the group %s.":"The categories has been transferred to the group %s.","No customer identifier has been provided to proceed to the transfer.":"No customer identifier has been provided to proceed to the transfer.","Unable to find the requested group using the provided id.":"Unable to find the requested group using the provided id.","\"%s\" is not an instance of \"FieldsService\"":"\"%s\" is not an instance of \"FieldsService\"","Manage Medias":"Manage Medias","The operation was successful.":"The operation was successful.","Modules List":"Modules List","List all available modules.":"List all available modules.","Upload A Module":"Upload A Module","Extends NexoPOS features with some new modules.":"Extends NexoPOS features with some new modules.","The notification has been successfully deleted":"The notification has been successfully deleted","All the notifications have been cleared.":"All the notifications have been cleared.","Order Invoice — %s":"Order Invoice — %s","Order Receipt — %s":"Order Receipt — %s","The printing event has been successfully dispatched.":"The printing event has been successfully dispatched.","There is a mismatch between the provided order and the order attached to the instalment.":"There is a mismatch between the provided order and the order attached to the instalment.","Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.":"Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.","New Procurement":"New Procurement","Edit Procurement":"Edit Procurement","Perform adjustment on existing procurement.":"Perform adjustment on existing procurement.","%s - Invoice":"%s - Invoice","list of product procured.":"list of product procured.","The product price has been refreshed.":"The product price has been refreshed.","The single variation has been deleted.":"The single variation has been deleted.","Edit a product":"Edit a product","Makes modifications to a product":"Makes modifications to a product","Create a product":"Create a product","Add a new product on the system":"Add a new product on the system","Stock Adjustment":"Stock Adjustment","Adjust stock of existing products.":"Adjust stock of existing products.","Lost":"Lost","No stock is provided for the requested product.":"No stock is provided for the requested product.","The product unit quantity has been deleted.":"The product unit quantity has been deleted.","Unable to proceed as the request is not valid.":"Unable to proceed as the request is not valid.","Unsupported action for the product %s.":"Unsupported action for the product %s.","The stock has been adjustment successfully.":"The stock has been adjustment successfully.","Unable to add the product to the cart as it has expired.":"Unable to add the product to the cart as it has expired.","Unable to add a product that has accurate tracking enabled, using an ordinary barcode.":"Unable to add a product that has accurate tracking enabled, using an ordinary barcode.","There is no products matching the current request.":"There is no products matching the current request.","Print Labels":"Print Labels","Customize and print products labels.":"Customize and print products labels.","Sales Report":"Sales Report","Provides an overview over the sales during a specific period":"Provides an overview over the sales during a specific period","Sold Stock":"Sold Stock","Provides an overview over the sold stock during a specific period.":"Provides an overview over the sold stock during a specific period.","Profit Report":"Profit Report","Provides an overview of the provide of the products sold.":"Provides an overview of the provide of the products sold.","Provides an overview on the activity for a specific period.":"Provides an overview on the activity for a specific period.","Annual Report":"Annual Report","Invalid authorization code provided.":"Invalid authorization code provided.","The database has been successfully seeded.":"The database has been successfully seeded.","Settings Page Not Found":"Settings Page Not Found","Customers Settings":"Customers Settings","Configure the customers settings of the application.":"Configure the customers settings of the application.","General Settings":"General Settings","Configure the general settings of the application.":"Configure the general settings of the application.","Orders Settings":"Orders Settings","POS Settings":"POS Settings","Configure the pos settings.":"Configure the pos settings.","Workers Settings":"Workers Settings","%s is not an instance of \"%s\".":"%s is not an instance of \"%s\".","Unable to find the requested product tax using the provided id":"Unable to find the requested product tax using the provided id","Unable to find the requested product tax using the provided identifier.":"Unable to find the requested product tax using the provided identifier.","The product tax has been created.":"The product tax has been created.","The product tax has been updated":"The product tax has been updated","Unable to retrieve the requested tax group using the provided identifier \"%s\".":"Unable to retrieve the requested tax group using the provided identifier \"%s\".","Permission Manager":"Permission Manager","Manage all permissions and roles":"Manage all permissions and roles","My Profile":"My Profile","Change your personal settings":"Change your personal settings","The permissions has been updated.":"The permissions has been updated.","Sunday":"Sunday","Monday":"Monday","Tuesday":"Tuesday","Wednesday":"Wednesday","Thursday":"Thursday","Friday":"Friday","Saturday":"Saturday","The migration has successfully run.":"The migration has successfully run.","Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.":"Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.","Unable to register. The registration is closed.":"Unable to register. The registration is closed.","Hold Order Cleared":"Hold Order Cleared","[NexoPOS] Activate Your Account":"[NexoPOS] Activate Your Account","[NexoPOS] A New User Has Registered":"[NexoPOS] A New User Has Registered","[NexoPOS] Your Account Has Been Created":"[NexoPOS] Your Account Has Been Created","Unable to find the permission with the namespace \"%s\".":"Unable to find the permission with the namespace \"%s\".","Voided":"Voided","Refunded":"Refunded","Partially Refunded":"Partially Refunded","The register has been successfully opened":"The register has been successfully opened","The register has been successfully closed":"The register has been successfully closed","The provided amount is not allowed. The amount should be greater than \"0\". ":"The provided amount is not allowed. The amount should be greater than \"0\". ","The cash has successfully been stored":"The cash has successfully been stored","Not enough fund to cash out.":"Not enough fund to cash out.","The cash has successfully been disbursed.":"The cash has successfully been disbursed.","In Use":"In Use","Opened":"Opened","Delete Selected entries":"Delete Selected entries","%s entries has been deleted":"%s entries has been deleted","%s entries has not been deleted":"%s entries has not been deleted","Unable to find the customer using the provided id.":"Unable to find the customer using the provided id.","The customer has been deleted.":"The customer has been deleted.","The customer has been created.":"The customer has been created.","Unable to find the customer using the provided ID.":"Unable to find the customer using the provided ID.","The customer has been edited.":"The customer has been edited.","Unable to find the customer using the provided email.":"Unable to find the customer using the provided email.","The customer account has been updated.":"The customer account has been updated.","Issuing Coupon Failed":"Issuing Coupon Failed","Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.":"Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.","Unable to find a coupon with the provided code.":"Unable to find a coupon with the provided code.","The coupon has been updated.":"The coupon has been updated.","The group has been created.":"The group has been created.","The media has been deleted":"The media has been deleted","Unable to find the media.":"Unable to find the media.","Unable to find the requested file.":"Unable to find the requested file.","Unable to find the media entry":"Unable to find the media entry","Payment Types":"Payment Types","Medias":"Medias","List":"List","Customers Groups":"Customers Groups","Create Group":"Create Group","Reward Systems":"Reward Systems","Create Reward":"Create Reward","List Coupons":"List Coupons","Providers":"Providers","Create A Provider":"Create A Provider","Inventory":"Inventory","Create Product":"Create Product","Create Category":"Create Category","Create Unit":"Create Unit","Unit Groups":"Unit Groups","Create Unit Groups":"Create Unit Groups","Taxes Groups":"Taxes Groups","Create Tax Groups":"Create Tax Groups","Create Tax":"Create Tax","Modules":"Modules","Upload Module":"Upload Module","Users":"Users","Create User":"Create User","Roles":"Roles","Create Roles":"Create Roles","Permissions Manager":"Permissions Manager","Procurements":"Procurements","Reports":"Reports","Sale Report":"Sale Report","Incomes & Loosses":"Incomes & Loosses","Invoice Settings":"Invoice Settings","Workers":"Workers","Unable to locate the requested module.":"Unable to locate the requested module.","The module \"%s\" has been disabled as the dependency \"%s\" is missing. ":"The module \"%s\" has been disabled as the dependency \"%s\" is missing. ","The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ":"The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ","Unable to detect the folder from where to perform the installation.":"Unable to detect the folder from where to perform the installation.","The uploaded file is not a valid module.":"The uploaded file is not a valid module.","The module has been successfully installed.":"The module has been successfully installed.","The migration run successfully.":"The migration run successfully.","The module has correctly been enabled.":"The module has correctly been enabled.","Unable to enable the module.":"Unable to enable the module.","The Module has been disabled.":"The Module has been disabled.","Unable to disable the module.":"Unable to disable the module.","Unable to proceed, the modules management is disabled.":"Unable to proceed, the modules management is disabled.","Missing required parameters to create a notification":"Missing required parameters to create a notification","The order has been placed.":"The order has been placed.","The percentage discount provided is not valid.":"The percentage discount provided is not valid.","A discount cannot exceed the sub total value of an order.":"A discount cannot exceed the sub total value of an order.","No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.":"No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.","The payment has been saved.":"The payment has been saved.","Unable to edit an order that is completely paid.":"Unable to edit an order that is completely paid.","Unable to proceed as one of the previous submitted payment is missing from the order.":"Unable to proceed as one of the previous submitted payment is missing from the order.","The order payment status cannot switch to hold as a payment has already been made on that order.":"The order payment status cannot switch to hold as a payment has already been made on that order.","Unable to proceed. One of the submitted payment type is not supported.":"Unable to proceed. One of the submitted payment type is not supported.","Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.":"Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.","Unable to find the customer using the provided ID. The order creation has failed.":"Unable to find the customer using the provided ID. The order creation has failed.","Unable to proceed a refund on an unpaid order.":"Unable to proceed a refund on an unpaid order.","The current credit has been issued from a refund.":"The current credit has been issued from a refund.","The order has been successfully refunded.":"The order has been successfully refunded.","unable to proceed to a refund as the provided status is not supported.":"unable to proceed to a refund as the provided status is not supported.","The product %s has been successfully refunded.":"The product %s has been successfully refunded.","Unable to find the order product using the provided id.":"Unable to find the order product using the provided id.","Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier":"Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier","Unable to fetch the order as the provided pivot argument is not supported.":"Unable to fetch the order as the provided pivot argument is not supported.","The product has been added to the order \"%s\"":"The product has been added to the order \"%s\"","the order has been successfully computed.":"the order has been successfully computed.","The order has been deleted.":"The order has been deleted.","The product has been successfully deleted from the order.":"The product has been successfully deleted from the order.","Unable to find the requested product on the provider order.":"Unable to find the requested product on the provider order.","Unpaid Orders Turned Due":"Unpaid Orders Turned Due","No orders to handle for the moment.":"No orders to handle for the moment.","The order has been correctly voided.":"The order has been correctly voided.","Unable to edit an already paid instalment.":"Unable to edit an already paid instalment.","The instalment has been saved.":"The instalment has been saved.","The instalment has been deleted.":"The instalment has been deleted.","The defined amount is not valid.":"The defined amount is not valid.","No further instalments is allowed for this order. The total instalment already covers the order total.":"No further instalments is allowed for this order. The total instalment already covers the order total.","The instalment has been created.":"The instalment has been created.","The provided status is not supported.":"The provided status is not supported.","The order has been successfully updated.":"The order has been successfully updated.","Unable to find the requested procurement using the provided identifier.":"Unable to find the requested procurement using the provided identifier.","Unable to find the assigned provider.":"Unable to find the assigned provider.","The procurement has been created.":"The procurement has been created.","Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.":"Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.","The provider has been edited.":"The provider has been edited.","Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"":"Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"","The operation has completed.":"The operation has completed.","The procurement has been refreshed.":"The procurement has been refreshed.","The procurement has been reset.":"The procurement has been reset.","The procurement products has been deleted.":"The procurement products has been deleted.","The procurement product has been updated.":"The procurement product has been updated.","Unable to find the procurement product using the provided id.":"Unable to find the procurement product using the provided id.","The product %s has been deleted from the procurement %s":"The product %s has been deleted from the procurement %s","The product with the following ID \"%s\" is not initially included on the procurement":"The product with the following ID \"%s\" is not initially included on the procurement","The procurement products has been updated.":"The procurement products has been updated.","Procurement Automatically Stocked":"Procurement Automatically Stocked","Draft":"Draft","The category has been created":"The category has been created","Unable to find the product using the provided id.":"Unable to find the product using the provided id.","Unable to find the requested product using the provided SKU.":"Unable to find the requested product using the provided SKU.","The variable product has been created.":"The variable product has been created.","The provided barcode \"%s\" is already in use.":"The provided barcode \"%s\" is already in use.","The provided SKU \"%s\" is already in use.":"The provided SKU \"%s\" is already in use.","The product has been saved.":"The product has been saved.","The provided barcode is already in use.":"The provided barcode is already in use.","The provided SKU is already in use.":"The provided SKU is already in use.","The product has been updated":"The product has been updated","The variable product has been updated.":"The variable product has been updated.","The product variations has been reset":"The product variations has been reset","The product has been reset.":"The product has been reset.","The product \"%s\" has been successfully deleted":"The product \"%s\" has been successfully deleted","Unable to find the requested variation using the provided ID.":"Unable to find the requested variation using the provided ID.","The product stock has been updated.":"The product stock has been updated.","The action is not an allowed operation.":"The action is not an allowed operation.","The product quantity has been updated.":"The product quantity has been updated.","There is no variations to delete.":"There is no variations to delete.","There is no products to delete.":"There is no products to delete.","The product variation has been successfully created.":"The product variation has been successfully created.","The product variation has been updated.":"The product variation has been updated.","The provider has been created.":"The provider has been created.","The provider has been updated.":"The provider has been updated.","Unable to find the provider using the specified id.":"Unable to find the provider using the specified id.","The provider has been deleted.":"The provider has been deleted.","Unable to find the provider using the specified identifier.":"Unable to find the provider using the specified identifier.","The provider account has been updated.":"The provider account has been updated.","The procurement payment has been deducted.":"The procurement payment has been deducted.","The dashboard report has been updated.":"The dashboard report has been updated.","Untracked Stock Operation":"Untracked Stock Operation","Unsupported action":"Unsupported action","The expense has been correctly saved.":"The expense has been correctly saved.","The table has been truncated.":"The table has been truncated.","Untitled Settings Page":"Untitled Settings Page","No description provided for this settings page.":"No description provided for this settings page.","The form has been successfully saved.":"The form has been successfully saved.","Unable to reach the host":"Unable to reach the host","Unable to connect to the database using the credentials provided.":"Unable to connect to the database using the credentials provided.","Unable to select the database.":"Unable to select the database.","Access denied for this user.":"Access denied for this user.","The connexion with the database was successful":"The connexion with the database was successful","Cash":"Cash","Bank Payment":"Bank Payment","NexoPOS has been successfully installed.":"NexoPOS has been successfully installed.","A tax cannot be his own parent.":"A tax cannot be his own parent.","The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".":"The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".","Unable to find the requested tax using the provided identifier.":"Unable to find the requested tax using the provided identifier.","The tax group has been correctly saved.":"The tax group has been correctly saved.","The tax has been correctly created.":"The tax has been correctly created.","The tax has been successfully deleted.":"The tax has been successfully deleted.","The Unit Group has been created.":"The Unit Group has been created.","The unit group %s has been updated.":"The unit group %s has been updated.","Unable to find the unit group to which this unit is attached.":"Unable to find the unit group to which this unit is attached.","The unit has been saved.":"The unit has been saved.","Unable to find the Unit using the provided id.":"Unable to find the Unit using the provided id.","The unit has been updated.":"The unit has been updated.","The unit group %s has more than one base unit":"The unit group %s has more than one base unit","The unit has been deleted.":"The unit has been deleted.","unable to find this validation class %s.":"unable to find this validation class %s.","Enable Reward":"Enable Reward","Will activate the reward system for the customers.":"Will activate the reward system for the customers.","Default Customer Account":"Default Customer Account","Default Customer Group":"Default Customer Group","Select to which group each new created customers are assigned to.":"Select to which group each new created customers are assigned to.","Enable Credit & Account":"Enable Credit & Account","The customers will be able to make deposit or obtain credit.":"The customers will be able to make deposit or obtain credit.","Store Name":"Store Name","This is the store name.":"This is the store name.","Store Address":"Store Address","The actual store address.":"The actual store address.","Store City":"Store City","The actual store city.":"The actual store city.","Store Phone":"Store Phone","The phone number to reach the store.":"The phone number to reach the store.","Store Email":"Store Email","The actual store email. Might be used on invoice or for reports.":"The actual store email. Might be used on invoice or for reports.","Store PO.Box":"Store PO.Box","The store mail box number.":"The store mail box number.","Store Fax":"Store Fax","The store fax number.":"The store fax number.","Store Additional Information":"Store Additional Information","Store additional information.":"Store additional information.","Store Square Logo":"Store Square Logo","Choose what is the square logo of the store.":"Choose what is the square logo of the store.","Store Rectangle Logo":"Store Rectangle Logo","Choose what is the rectangle logo of the store.":"Choose what is the rectangle logo of the store.","Define the default fallback language.":"Define the default fallback language.","Currency":"Currency","Currency Symbol":"Currency Symbol","This is the currency symbol.":"This is the currency symbol.","Currency ISO":"Currency ISO","The international currency ISO format.":"The international currency ISO format.","Currency Position":"Currency Position","Before the amount":"Before the amount","After the amount":"After the amount","Define where the currency should be located.":"Define where the currency should be located.","Preferred Currency":"Preferred Currency","ISO Currency":"ISO Currency","Symbol":"Symbol","Determine what is the currency indicator that should be used.":"Determine what is the currency indicator that should be used.","Currency Thousand Separator":"Currency Thousand Separator","Currency Decimal Separator":"Currency Decimal Separator","Define the symbol that indicate decimal number. By default \".\" is used.":"Define the symbol that indicate decimal number. By default \".\" is used.","Currency Precision":"Currency Precision","%s numbers after the decimal":"%s numbers after the decimal","Date Format":"Date Format","This define how the date should be defined. The default format is \"Y-m-d\".":"This define how the date should be defined. The default format is \"Y-m-d\".","Registration":"Registration","Registration Open":"Registration Open","Determine if everyone can register.":"Determine if everyone can register.","Registration Role":"Registration Role","Select what is the registration role.":"Select what is the registration role.","Requires Validation":"Requires Validation","Force account validation after the registration.":"Force account validation after the registration.","Allow Recovery":"Allow Recovery","Allow any user to recover his account.":"Allow any user to recover his account.","Receipts":"Receipts","Receipt Template":"Receipt Template","Default":"Default","Choose the template that applies to receipts":"Choose the template that applies to receipts","Receipt Logo":"Receipt Logo","Provide a URL to the logo.":"Provide a URL to the logo.","Receipt Footer":"Receipt Footer","If you would like to add some disclosure at the bottom of the receipt.":"If you would like to add some disclosure at the bottom of the receipt.","Column A":"Column A","Column B":"Column B","Order Code Type":"Order Code Type","Determine how the system will generate code for each orders.":"Determine how the system will generate code for each orders.","Sequential":"Sequential","Random Code":"Random Code","Number Sequential":"Number Sequential","Allow Unpaid Orders":"Allow Unpaid Orders","Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".":"Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".","Allow Partial Orders":"Allow Partial Orders","Will prevent partially paid orders to be placed.":"Will prevent partially paid orders to be placed.","Quotation Expiration":"Quotation Expiration","Quotations will get deleted after they defined they has reached.":"Quotations will get deleted after they defined they has reached.","%s Days":"%s Days","Features":"Features","Show Quantity":"Show Quantity","Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.":"Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.","Allow Customer Creation":"Allow Customer Creation","Allow customers to be created on the POS.":"Allow customers to be created on the POS.","Quick Product":"Quick Product","Allow quick product to be created from the POS.":"Allow quick product to be created from the POS.","Editable Unit Price":"Editable Unit Price","Allow product unit price to be edited.":"Allow product unit price to be edited.","Order Types":"Order Types","Control the order type enabled.":"Control the order type enabled.","Layout":"Layout","Retail Layout":"Retail Layout","Clothing Shop":"Clothing Shop","POS Layout":"POS Layout","Change the layout of the POS.":"Change the layout of the POS.","Printing":"Printing","Printed Document":"Printed Document","Choose the document used for printing aster a sale.":"Choose the document used for printing aster a sale.","Printing Enabled For":"Printing Enabled For","All Orders":"All Orders","From Partially Paid Orders":"From Partially Paid Orders","Only Paid Orders":"Only Paid Orders","Determine when the printing should be enabled.":"Determine when the printing should be enabled.","Printing Gateway":"Printing Gateway","Determine what is the gateway used for printing.":"Determine what is the gateway used for printing.","Enable Cash Registers":"Enable Cash Registers","Determine if the POS will support cash registers.":"Determine if the POS will support cash registers.","Cashier Idle Counter":"Cashier Idle Counter","5 Minutes":"5 Minutes","10 Minutes":"10 Minutes","15 Minutes":"15 Minutes","20 Minutes":"20 Minutes","30 Minutes":"30 Minutes","Selected after how many minutes the system will set the cashier as idle.":"Selected after how many minutes the system will set the cashier as idle.","Cash Disbursement":"Cash Disbursement","Allow cash disbursement by the cashier.":"Allow cash disbursement by the cashier.","Cash Registers":"Cash Registers","Keyboard Shortcuts":"Keyboard Shortcuts","Cancel Order":"Cancel Order","Keyboard shortcut to cancel the current order.":"Keyboard shortcut to cancel the current order.","Keyboard shortcut to hold the current order.":"Keyboard shortcut to hold the current order.","Keyboard shortcut to create a customer.":"Keyboard shortcut to create a customer.","Proceed Payment":"Proceed Payment","Keyboard shortcut to proceed to the payment.":"Keyboard shortcut to proceed to the payment.","Open Shipping":"Open Shipping","Keyboard shortcut to define shipping details.":"Keyboard shortcut to define shipping details.","Open Note":"Open Note","Keyboard shortcut to open the notes.":"Keyboard shortcut to open the notes.","Order Type Selector":"Order Type Selector","Keyboard shortcut to open the order type selector.":"Keyboard shortcut to open the order type selector.","Toggle Fullscreen":"Toggle Fullscreen","Keyboard shortcut to toggle fullscreen.":"Keyboard shortcut to toggle fullscreen.","Quick Search":"Quick Search","Keyboard shortcut open the quick search popup.":"Keyboard shortcut open the quick search popup.","Amount Shortcuts":"Amount Shortcuts","VAT Type":"VAT Type","Determine the VAT type that should be used.":"Determine the VAT type that should be used.","Flat Rate":"Flat Rate","Flexible Rate":"Flexible Rate","Products Vat":"Products Vat","Products & Flat Rate":"Products & Flat Rate","Products & Flexible Rate":"Products & Flexible Rate","Define the tax group that applies to the sales.":"Define the tax group that applies to the sales.","Define how the tax is computed on sales.":"Define how the tax is computed on sales.","VAT Settings":"VAT Settings","Enable Email Reporting":"Enable Email Reporting","Determine if the reporting should be enabled globally.":"Determine if the reporting should be enabled globally.","Supplies":"Supplies","Public Name":"Public Name","Define what is the user public name. If not provided, the username is used instead.":"Define what is the user public name. If not provided, the username is used instead.","Enable Workers":"Enable Workers","Test":"Test","Current Week":"Current Week","Previous Week":"Previous Week","There is no migrations to perform for the module \"%s\"":"There is no migrations to perform for the module \"%s\"","The module migration has successfully been performed for the module \"%s\"":"The module migration has successfully been performed for the module \"%s\"","Sales By Payment Types":"Sales By Payment Types","Provide a report of the sales by payment types, for a specific period.":"Provide a report of the sales by payment types, for a specific period.","Sales By Payments":"Sales By Payments","Order Settings":"Order Settings","Define the order name.":"Define the order name.","Define the date of creation of the order.":"Define the date of creation of the order.","Total Refunds":"Total Refunds","Clients Registered":"Clients Registered","Commissions":"Commissions","Processing Status":"Processing Status","Refunded Products":"Refunded Products","The delivery status of the order will be changed. Please confirm your action.":"The delivery status of the order will be changed. Please confirm your action.","The product price has been updated.":"The product price has been updated.","The editable price feature is disabled.":"The editable price feature is disabled.","Order Refunds":"Order Refunds","Product Price":"Product Price","Unable to proceed":"Unable to proceed","Partially paid orders are disabled.":"Partially paid orders are disabled.","An order is currently being processed.":"An order is currently being processed.","Log out":"Log out","Refund receipt":"Refund receipt","Recompute":"Recompute","Sort Results":"Sort Results","Using Quantity Ascending":"Using Quantity Ascending","Using Quantity Descending":"Using Quantity Descending","Using Sales Ascending":"Using Sales Ascending","Using Sales Descending":"Using Sales Descending","Using Name Ascending":"Using Name Ascending","Using Name Descending":"Using Name Descending","Progress":"Progress","Discounts":"Discounts","An invalid date were provided. Make sure it a prior date to the actual server date.":"An invalid date were provided. Make sure it a prior date to the actual server date.","Computing report from %s...":"Computing report from %s...","The demo has been enabled.":"The demo has been enabled.","Refund Receipt":"Refund Receipt","Codabar":"Codabar","Code 128":"Code 128","Code 39":"Code 39","Code 11":"Code 11","UPC A":"UPC A","UPC E":"UPC E","Store Dashboard":"Store Dashboard","Cashier Dashboard":"Cashier Dashboard","Default Dashboard":"Default Dashboard","%s has been processed, %s has not been processed.":"%s has been processed, %s has not been processed.","Order Refund Receipt — %s":"Order Refund Receipt — %s","Provides an overview over the best products sold during a specific period.":"Provides an overview over the best products sold during a specific period.","The report will be computed for the current year.":"The report will be computed for the current year.","Unknown report to refresh.":"Unknown report to refresh.","Report Refreshed":"Report Refreshed","The yearly report has been successfully refreshed for the year \"%s\".":"The yearly report has been successfully refreshed for the year \"%s\".","Countable":"Countable","Piece":"Piece","GST":"GST","SGST":"SGST","CGST":"CGST","Sample Procurement %s":"Sample Procurement %s","generated":"generated","Not Available":"Not Available","The report has been computed successfully.":"The report has been computed successfully.","Create a customer":"Create a customer","Credit":"Credit","Debit":"Debit","All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.":"All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.","Account":"Account","Provide the accounting number for this category.":"Provide the accounting number for this category.","Accounting":"Accounting","Procurement Cash Flow Account":"Procurement Cash Flow Account","Sale Cash Flow Account":"Sale Cash Flow Account","Sales Refunds Account":"Sales Refunds Account","Stock return for spoiled items will be attached to this account":"Stock return for spoiled items will be attached to this account","The reason has been updated.":"The reason has been updated.","You must select a customer before applying a coupon.":"You must select a customer before applying a coupon.","No coupons for the selected customer...":"No coupons for the selected customer...","Use Coupon":"Use Coupon","Use Customer ?":"Use Customer ?","No customer is selected. Would you like to proceed with this customer ?":"No customer is selected. Would you like to proceed with this customer ?","Change Customer ?":"Change Customer ?","Would you like to assign this customer to the ongoing order ?":"Would you like to assign this customer to the ongoing order ?","Product \/ Service":"Product \/ Service","An error has occurred while computing the product.":"An error has occurred while computing the product.","Provide a unique name for the product.":"Provide a unique name for the product.","Define what is the sale price of the item.":"Define what is the sale price of the item.","Set the quantity of the product.":"Set the quantity of the product.","Define what is tax type of the item.":"Define what is tax type of the item.","Choose the tax group that should apply to the item.":"Choose the tax group that should apply to the item.","Assign a unit to the product.":"Assign a unit to the product.","Some products has been added to the cart. Would youl ike to discard this order ?":"Some products has been added to the cart. Would youl ike to discard this order ?","Customer Accounts List":"Customer Accounts List","Display all customer accounts.":"Display all customer accounts.","No customer accounts has been registered":"No customer accounts has been registered","Add a new customer account":"Add a new customer account","Create a new customer account":"Create a new customer account","Register a new customer account and save it.":"Register a new customer account and save it.","Edit customer account":"Edit customer account","Modify Customer Account.":"Modify Customer Account.","Return to Customer Accounts":"Return to Customer Accounts","This will be ignored.":"This will be ignored.","Define the amount of the transaction":"Define the amount of the transaction","Define what operation will occurs on the customer account.":"Define what operation will occurs on the customer account.","Provider Procurements List":"Provider Procurements List","Display all provider procurements.":"Display all provider procurements.","No provider procurements has been registered":"No provider procurements has been registered","Add a new provider procurement":"Add a new provider procurement","Create a new provider procurement":"Create a new provider procurement","Register a new provider procurement and save it.":"Register a new provider procurement and save it.","Edit provider procurement":"Edit provider procurement","Modify Provider Procurement.":"Modify Provider Procurement.","Return to Provider Procurements":"Return to Provider Procurements","Delivered On":"Delivered On","Items":"Items","Displays the customer account history for %s":"Displays the customer account history for %s","Procurements by \"%s\"":"Procurements by \"%s\"","Crediting":"Crediting","Deducting":"Deducting","Order Payment":"Order Payment","Order Refund":"Order Refund","Unknown Operation":"Unknown Operation","Unnamed Product":"Unnamed Product","Bubble":"Bubble","Ding":"Ding","Pop":"Pop","Cash Sound":"Cash Sound","Sale Complete Sound":"Sale Complete Sound","New Item Audio":"New Item Audio","The sound that plays when an item is added to the cart.":"The sound that plays when an item is added to the cart.","Howdy, {name}":"Howdy, {name}","Would you like to perform the selected bulk action on the selected entries ?":"Would you like to perform the selected bulk action on the selected entries ?","The payment to be made today is less than what is expected.":"The payment to be made today is less than what is expected.","Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.":"Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.","How to change database configuration":"How to change database configuration","Common Database Issues":"Common Database Issues","Setup":"Setup","Query Exception":"Query Exception","The category products has been refreshed":"The category products has been refreshed","The requested customer cannot be found.":"The requested customer cannot be found.","Filters":"Filters","Has Filters":"Has Filters","N\/D":"N\/D","Range Starts":"Range Starts","Range Ends":"Range Ends","Search Filters":"Search Filters","Clear Filters":"Clear Filters","Use Filters":"Use Filters","No rewards available the selected customer...":"No rewards available the selected customer...","Unable to load the report as the timezone is not set on the settings.":"Unable to load the report as the timezone is not set on the settings.","There is no product to display...":"There is no product to display...","Method Not Allowed":"Method Not Allowed","Documentation":"Documentation","Module Version Mismatch":"Module Version Mismatch","Define how many time the coupon has been used.":"Define how many time the coupon has been used.","Define the maximum usage possible for this coupon.":"Define the maximum usage possible for this coupon.","Restrict the orders by the creation date.":"Restrict the orders by the creation date.","Created Between":"Created Between","Restrict the orders by the payment status.":"Restrict the orders by the payment status.","Due With Payment":"Due With Payment","Restrict the orders by the author.":"Restrict the orders by the author.","Restrict the orders by the customer.":"Restrict the orders by the customer.","Customer Phone":"Customer Phone","Restrict orders using the customer phone number.":"Restrict orders using the customer phone number.","Restrict the orders to the cash registers.":"Restrict the orders to the cash registers.","Low Quantity":"Low Quantity","Which quantity should be assumed low.":"Which quantity should be assumed low.","Stock Alert":"Stock Alert","See Products":"See Products","Provider Products List":"Provider Products List","Display all Provider Products.":"Display all Provider Products.","No Provider Products has been registered":"No Provider Products has been registered","Add a new Provider Product":"Add a new Provider Product","Create a new Provider Product":"Create a new Provider Product","Register a new Provider Product and save it.":"Register a new Provider Product and save it.","Edit Provider Product":"Edit Provider Product","Modify Provider Product.":"Modify Provider Product.","Return to Provider Products":"Return to Provider Products","Clone":"Clone","Would you like to clone this role ?":"Would you like to clone this role ?","Incompatibility Exception":"Incompatibility Exception","The requested file cannot be downloaded or has already been downloaded.":"The requested file cannot be downloaded or has already been downloaded.","Low Stock Report":"Low Stock Report","Low Stock Alert":"Low Stock Alert","The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ":"The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ","The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ":"The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ","Clone of \"%s\"":"Clone of \"%s\"","The role has been cloned.":"The role has been cloned.","Merge Products On Receipt\/Invoice":"Merge Products On Receipt\/Invoice","All similar products will be merged to avoid a paper waste for the receipt\/invoice.":"All similar products will be merged to avoid a paper waste for the receipt\/invoice.","Define whether the stock alert should be enabled for this unit.":"Define whether the stock alert should be enabled for this unit.","All Refunds":"All Refunds","No result match your query.":"No result match your query.","Report Type":"Report Type","Categories Detailed":"Categories Detailed","Categories Summary":"Categories Summary","Allow you to choose the report type.":"Allow you to choose the report type.","Unknown":"Unknown","Not Authorized":"Not Authorized","Creating customers has been explicitly disabled from the settings.":"Creating customers has been explicitly disabled from the settings.","Sales Discounts":"Sales Discounts","Sales Taxes":"Sales Taxes","Birth Date":"Birth Date","Displays the customer birth date":"Displays the customer birth date","Sale Value":"Sale Value","Purchase Value":"Purchase Value","Would you like to refresh this ?":"Would you like to refresh this ?","You cannot delete your own account.":"You cannot delete your own account.","Sales Progress":"Sales Progress","Procurement Refreshed":"Procurement Refreshed","The procurement \"%s\" has been successfully refreshed.":"The procurement \"%s\" has been successfully refreshed.","Partially Due":"Partially Due","No payment type has been selected on the settings. Please check your POS features and choose the supported order type":"No payment type has been selected on the settings. Please check your POS features and choose the supported order type","Read More":"Read More","Wipe All":"Wipe All","Wipe Plus Grocery":"Wipe Plus Grocery","Accounts List":"Accounts List","Display All Accounts.":"Display All Accounts.","No Account has been registered":"No Account has been registered","Add a new Account":"Add a new Account","Create a new Account":"Create a new Account","Register a new Account and save it.":"Register a new Account and save it.","Edit Account":"Edit Account","Modify An Account.":"Modify An Account.","Return to Accounts":"Return to Accounts","Accounts":"Accounts","Create Account":"Create Account","Payment Method":"Payment Method","Before submitting the payment, choose the payment type used for that order.":"Before submitting the payment, choose the payment type used for that order.","Select the payment type that must apply to the current order.":"Select the payment type that must apply to the current order.","Payment Type":"Payment Type","Remove Image":"Remove Image","This form is not completely loaded.":"This form is not completely loaded.","Updating":"Updating","Updating Modules":"Updating Modules","Return":"Return","Credit Limit":"Credit Limit","The request was canceled":"The request was canceled","Payment Receipt — %s":"Payment Receipt — %s","Payment receipt":"Payment receipt","Current Payment":"Current Payment","Total Paid":"Total Paid","Set what should be the limit of the purchase on credit.":"Set what should be the limit of the purchase on credit.","Provide the customer email.":"Provide the customer email.","Priority":"Priority","Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".":"Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".","Mode":"Mode","Choose what mode applies to this demo.":"Choose what mode applies to this demo.","Set if the sales should be created.":"Set if the sales should be created.","Create Procurements":"Create Procurements","Will create procurements.":"Will create procurements.","Sales Account":"Sales Account","Procurements Account":"Procurements Account","Sale Refunds Account":"Sale Refunds Account","Spoiled Goods Account":"Spoiled Goods Account","Customer Crediting Account":"Customer Crediting Account","Customer Debiting Account":"Customer Debiting Account","Unable to find the requested account type using the provided id.":"Unable to find the requested account type using the provided id.","You cannot delete an account type that has transaction bound.":"You cannot delete an account type that has transaction bound.","The account type has been deleted.":"The account type has been deleted.","The account has been created.":"The account has been created.","Customer Credit Account":"Customer Credit Account","Customer Debit Account":"Customer Debit Account","Register Cash-In Account":"Register Cash-In Account","Register Cash-Out Account":"Register Cash-Out Account","Require Valid Email":"Require Valid Email","Will for valid unique email for every customer.":"Will for valid unique email for every customer.","Choose an option":"Choose an option","Update Instalment Date":"Update Instalment Date","Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.":"Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.","Search for products.":"Search for products.","Toggle merging similar products.":"Toggle merging similar products.","Toggle auto focus.":"Toggle auto focus.","Filter User":"Filter User","All Users":"All Users","No user was found for proceeding the filtering.":"No user was found for proceeding the filtering.","available":"available","No coupons applies to the cart.":"No coupons applies to the cart.","Selected":"Selected","An error occurred while opening the order options":"An error occurred while opening the order options","There is no instalment defined. Please set how many instalments are allowed for this order":"There is no instalment defined. Please set how many instalments are allowed for this order","Select Payment Gateway":"Select Payment Gateway","Gateway":"Gateway","No tax is active":"No tax is active","Unable to delete a payment attached to the order.":"Unable to delete a payment attached to the order.","The discount has been set to the cart subtotal.":"The discount has been set to the cart subtotal.","Order Deletion":"Order Deletion","The current order will be deleted as no payment has been made so far.":"The current order will be deleted as no payment has been made so far.","Void The Order":"Void The Order","Unable to void an unpaid order.":"Unable to void an unpaid order.","Environment Details":"Environment Details","Properties":"Properties","Extensions":"Extensions","Configurations":"Configurations","Learn More":"Learn More","Search Products...":"Search Products...","No results to show.":"No results to show.","Start by choosing a range and loading the report.":"Start by choosing a range and loading the report.","Invoice Date":"Invoice Date","Initial Balance":"Initial Balance","New Balance":"New Balance","Transaction Type":"Transaction Type","Unchanged":"Unchanged","Define what roles applies to the user":"Define what roles applies to the user","Not Assigned":"Not Assigned","This value is already in use on the database.":"This value is already in use on the database.","This field should be checked.":"This field should be checked.","This field must be a valid URL.":"This field must be a valid URL.","This field is not a valid email.":"This field is not a valid email.","If you would like to define a custom invoice date.":"If you would like to define a custom invoice date.","Theme":"Theme","Dark":"Dark","Light":"Light","Define what is the theme that applies to the dashboard.":"Define what is the theme that applies to the dashboard.","Unable to delete this resource as it has %s dependency with %s item.":"Unable to delete this resource as it has %s dependency with %s item.","Unable to delete this resource as it has %s dependency with %s items.":"Unable to delete this resource as it has %s dependency with %s items.","Make a new procurement.":"Make a new procurement.","About":"About","Details about the environment.":"Details about the environment.","Core Version":"Core Version","PHP Version":"PHP Version","Mb String Enabled":"Mb String Enabled","Zip Enabled":"Zip Enabled","Curl Enabled":"Curl Enabled","Math Enabled":"Math Enabled","XML Enabled":"XML Enabled","XDebug Enabled":"XDebug Enabled","File Upload Enabled":"File Upload Enabled","File Upload Size":"File Upload Size","Post Max Size":"Post Max Size","Max Execution Time":"Max Execution Time","Memory Limit":"Memory Limit","Administrator":"Administrator","Store Administrator":"Store Administrator","Store Cashier":"Store Cashier","User":"User","Incorrect Authentication Plugin Provided.":"Incorrect Authentication Plugin Provided.","Require Unique Phone":"Require Unique Phone","Every customer should have a unique phone number.":"Every customer should have a unique phone number.","Define the default theme.":"Define the default theme.","Merge Similar Items":"Merge Similar Items","Will enforce similar products to be merged from the POS.":"Will enforce similar products to be merged from the POS.","Toggle Product Merge":"Toggle Product Merge","Will enable or disable the product merging.":"Will enable or disable the product merging.","Your system is running in production mode. You probably need to build the assets":"Your system is running in production mode. You probably need to build the assets","Your system is in development mode. Make sure to build the assets.":"Your system is in development mode. Make sure to build the assets.","Unassigned":"Unassigned","Display all product stock flow.":"Display all product stock flow.","No products stock flow has been registered":"No products stock flow has been registered","Add a new products stock flow":"Add a new products stock flow","Create a new products stock flow":"Create a new products stock flow","Register a new products stock flow and save it.":"Register a new products stock flow and save it.","Edit products stock flow":"Edit products stock flow","Modify Globalproducthistorycrud.":"Modify Globalproducthistorycrud.","Initial Quantity":"Initial Quantity","New Quantity":"New Quantity","No Dashboard":"No Dashboard","Not Found Assets":"Not Found Assets","Stock Flow Records":"Stock Flow Records","The user attributes has been updated.":"The user attributes has been updated.","Laravel Version":"Laravel Version","There is a missing dependency issue.":"There is a missing dependency issue.","The Action You Tried To Perform Is Not Allowed.":"The Action You Tried To Perform Is Not Allowed.","Unable to locate the assets.":"Unable to locate the assets.","All the customers has been transferred to the new group %s.":"All the customers has been transferred to the new group %s.","The request method is not allowed.":"The request method is not allowed.","A Database Exception Occurred.":"A Database Exception Occurred.","An error occurred while validating the form.":"An error occurred while validating the form.","Enter":"Enter","Search...":"Search...","Unable to hold an order which payment status has been updated already.":"Unable to hold an order which payment status has been updated already.","Unable to change the price mode. This feature has been disabled.":"Unable to change the price mode. This feature has been disabled.","Enable WholeSale Price":"Enable WholeSale Price","Would you like to switch to wholesale price ?":"Would you like to switch to wholesale price ?","Enable Normal Price":"Enable Normal Price","Would you like to switch to normal price ?":"Would you like to switch to normal price ?","Search products...":"Search products...","Set Sale Price":"Set Sale Price","Remove":"Remove","No product are added to this group.":"No product are added to this group.","Delete Sub item":"Delete Sub item","Would you like to delete this sub item?":"Would you like to delete this sub item?","Unable to add a grouped product.":"Unable to add a grouped product.","Choose The Unit":"Choose The Unit","Stock Report":"Stock Report","Wallet Amount":"Wallet Amount","Wallet History":"Wallet History","Transaction":"Transaction","No History...":"No History...","Removing":"Removing","Refunding":"Refunding","Unknow":"Unknow","Skip Instalments":"Skip Instalments","Define the product type.":"Define the product type.","Dynamic":"Dynamic","In case the product is computed based on a percentage, define the rate here.":"In case the product is computed based on a percentage, define the rate here.","Before saving this order, a minimum payment of {amount} is required":"Before saving this order, a minimum payment of {amount} is required","Initial Payment":"Initial Payment","In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?":"In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?","Search Customer...":"Search Customer...","Due Amount":"Due Amount","Wallet Balance":"Wallet Balance","Total Orders":"Total Orders","What slug should be used ? [Q] to quit.":"What slug should be used ? [Q] to quit.","\"%s\" is a reserved class name":"\"%s\" is a reserved class name","The migration file has been successfully forgotten for the module %s.":"The migration file has been successfully forgotten for the module %s.","%s products where updated.":"%s products where updated.","Previous Amount":"Previous Amount","Next Amount":"Next Amount","Restrict the records by the creation date.":"Restrict the records by the creation date.","Restrict the records by the author.":"Restrict the records by the author.","Grouped Product":"Grouped Product","Groups":"Groups","Choose Group":"Choose Group","Grouped":"Grouped","An error has occurred":"An error has occurred","Unable to proceed, the submitted form is not valid.":"Unable to proceed, the submitted form is not valid.","No activation is needed for this account.":"No activation is needed for this account.","Invalid activation token.":"Invalid activation token.","The expiration token has expired.":"The expiration token has expired.","Your account is not activated.":"Your account is not activated.","Unable to change a password for a non active user.":"Unable to change a password for a non active user.","Unable to submit a new password for a non active user.":"Unable to submit a new password for a non active user.","Unable to delete an entry that no longer exists.":"Unable to delete an entry that no longer exists.","Provides an overview of the products stock.":"Provides an overview of the products stock.","Customers Statement":"Customers Statement","Display the complete customer statement.":"Display the complete customer statement.","The recovery has been explicitly disabled.":"The recovery has been explicitly disabled.","The registration has been explicitly disabled.":"The registration has been explicitly disabled.","The entry has been successfully updated.":"The entry has been successfully updated.","A similar module has been found":"A similar module has been found","A grouped product cannot be saved without any sub items.":"A grouped product cannot be saved without any sub items.","A grouped product cannot contain grouped product.":"A grouped product cannot contain grouped product.","The subitem has been saved.":"The subitem has been saved.","The %s is already taken.":"The %s is already taken.","Allow Wholesale Price":"Allow Wholesale Price","Define if the wholesale price can be selected on the POS.":"Define if the wholesale price can be selected on the POS.","Allow Decimal Quantities":"Allow Decimal Quantities","Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.":"Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.","Numpad":"Numpad","Advanced":"Advanced","Will set what is the numpad used on the POS screen.":"Will set what is the numpad used on the POS screen.","Force Barcode Auto Focus":"Force Barcode Auto Focus","Will permanently enable barcode autofocus to ease using a barcode reader.":"Will permanently enable barcode autofocus to ease using a barcode reader.","Tax Included":"Tax Included","Unable to proceed, more than one product is set as featured":"Unable to proceed, more than one product is set as featured","The transaction was deleted.":"The transaction was deleted.","Database connection was successful.":"Database connection was successful.","The products taxes were computed successfully.":"The products taxes were computed successfully.","Tax Excluded":"Tax Excluded","Set Paid":"Set Paid","Would you like to mark this procurement as paid?":"Would you like to mark this procurement as paid?","Unidentified Item":"Unidentified Item","Non-existent Item":"Non-existent Item","You cannot change the status of an already paid procurement.":"You cannot change the status of an already paid procurement.","The procurement payment status has been changed successfully.":"The procurement payment status has been changed successfully.","The procurement has been marked as paid.":"The procurement has been marked as paid.","Show Price With Tax":"Show Price With Tax","Will display price with tax for each products.":"Will display price with tax for each products.","Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".":"Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".","Tax Inclusive":"Tax Inclusive","Apply Coupon":"Apply Coupon","Not applicable":"Not applicable","Normal":"Normal","Product Taxes":"Product Taxes","The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.":"The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.","Please provide a valid value.":"Please provide a valid value.","Your Account has been successfully created.":"Your Account has been successfully created.","%s products were freed":"%s products were freed","Restoring cash flow from paid orders...":"Restoring cash flow from paid orders...","Restoring cash flow from refunded orders...":"Restoring cash flow from refunded orders...","Unable to add the product":"Unable to add the product","No result to result match the search value provided.":"No result to result match the search value provided.","Provide the customer gender.":"Provide the customer gender.","Small Box":"Small Box","Box":"Box","X Days After Month Starts":"X Days After Month Starts","On Specific Day":"On Specific Day","Unknown Occurance":"Unknown Occurance","Done":"Done","Would you like to delete \"%s\"?":"Would you like to delete \"%s\"?","Unable to find a module having as namespace \"%s\"":"Unable to find a module having as namespace \"%s\"","Api File":"Api File","Migrations":"Migrations","Determine Until When the coupon is valid.":"Determine Until When the coupon is valid.","Customer Groups":"Customer Groups","Assigned To Customer Group":"Assigned To Customer Group","Only the customers who belongs to the selected groups will be able to use the coupon.":"Only the customers who belongs to the selected groups will be able to use the coupon.","Assigned To Customers":"Assigned To Customers","Only the customers selected will be ale to use the coupon.":"Only the customers selected will be ale to use the coupon.","Unable to save the coupon as one of the selected customer no longer exists.":"Unable to save the coupon as one of the selected customer no longer exists.","Unable to save the coupon as one of the selected customer group no longer exists.":"Unable to save the coupon as one of the selected customer group no longer exists.","Unable to save the coupon as one of the customers provided no longer exists.":"Unable to save the coupon as one of the customers provided no longer exists.","Unable to save the coupon as one of the provided customer group no longer exists.":"Unable to save the coupon as one of the provided customer group no longer exists.","Coupon Order Histories List":"Coupon Order Histories List","Display all coupon order histories.":"Display all coupon order histories.","No coupon order histories has been registered":"No coupon order histories has been registered","Add a new coupon order history":"Add a new coupon order history","Create a new coupon order history":"Create a new coupon order history","Register a new coupon order history and save it.":"Register a new coupon order history and save it.","Edit coupon order history":"Edit coupon order history","Modify Coupon Order History.":"Modify Coupon Order History.","Return to Coupon Order Histories":"Return to Coupon Order Histories","Customer_coupon_id":"Customer_coupon_id","Order_id":"Order_id","Discount_value":"Discount_value","Minimum_cart_value":"Minimum_cart_value","Maximum_cart_value":"Maximum_cart_value","Limit_usage":"Limit_usage","Would you like to delete this?":"Would you like to delete this?","Usage History":"Usage History","Customer Coupon Histories List":"Customer Coupon Histories List","Display all customer coupon histories.":"Display all customer coupon histories.","No customer coupon histories has been registered":"No customer coupon histories has been registered","Add a new customer coupon history":"Add a new customer coupon history","Create a new customer coupon history":"Create a new customer coupon history","Register a new customer coupon history and save it.":"Register a new customer coupon history and save it.","Edit customer coupon history":"Edit customer coupon history","Modify Customer Coupon History.":"Modify Customer Coupon History.","Return to Customer Coupon Histories":"Return to Customer Coupon Histories","Last Name":"Last Name","Provide the customer last name":"Provide the customer last name","Provide the billing first name.":"Provide the billing first name.","Provide the billing last name.":"Provide the billing last name.","Provide the shipping First Name.":"Provide the shipping First Name.","Provide the shipping Last Name.":"Provide the shipping Last Name.","Scheduled":"Scheduled","Set the scheduled date.":"Set the scheduled date.","Account Name":"Account Name","Provider last name if necessary.":"Provider last name if necessary.","Provide the user first name.":"Provide the user first name.","Provide the user last name.":"Provide the user last name.","Set the user gender.":"Set the user gender.","Set the user phone number.":"Set the user phone number.","Set the user PO Box.":"Set the user PO Box.","Provide the billing First Name.":"Provide the billing First Name.","Last name":"Last name","Group Name":"Group Name","Delete a user":"Delete a user","Activated":"Activated","type":"type","User Group":"User Group","Scheduled On":"Scheduled On","Biling":"Biling","API Token":"API Token","Unable to export if there is nothing to export.":"Unable to export if there is nothing to export.","%s Coupons":"%s Coupons","%s Coupon History":"%s Coupon History","\"%s\" Record History":"\"%s\" Record History","The media name was successfully updated.":"The media name was successfully updated.","The role was successfully assigned.":"The role was successfully assigned.","The role were successfully assigned.":"The role were successfully assigned.","Unable to identifier the provided role.":"Unable to identifier the provided role.","Good Condition":"Good Condition","Cron Disabled":"Cron Disabled","Task Scheduling Disabled":"Task Scheduling Disabled","NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.":"NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.","The email \"%s\" is already used for another customer.":"The email \"%s\" is already used for another customer.","The provided coupon cannot be loaded for that customer.":"The provided coupon cannot be loaded for that customer.","The provided coupon cannot be loaded for the group assigned to the selected customer.":"The provided coupon cannot be loaded for the group assigned to the selected customer.","Unable to use the coupon %s as it has expired.":"Unable to use the coupon %s as it has expired.","Unable to use the coupon %s at this moment.":"Unable to use the coupon %s at this moment.","%s on %s directories were deleted.":"%s on %s directories were deleted.","%s on %s files were deleted.":"%s on %s files were deleted.","First Day Of Month":"First Day Of Month","Last Day Of Month":"Last Day Of Month","Month middle Of Month":"Month middle Of Month","{day} after month starts":"{day} after month starts","{day} before month ends":"{day} before month ends","Every {day} of the month":"Every {day} of the month","Days":"Days","Make sure set a day that is likely to be executed":"Make sure set a day that is likely to be executed","Invalid Module provided.":"Invalid Module provided.","The module was \"%s\" was successfully installed.":"The module was \"%s\" was successfully installed.","The modules \"%s\" was deleted successfully.":"The modules \"%s\" was deleted successfully.","Unable to locate a module having as identifier \"%s\".":"Unable to locate a module having as identifier \"%s\".","All migration were executed.":"All migration were executed.","Unknown Product Status":"Unknown Product Status","Member Since":"Member Since","Total Customers":"Total Customers","The widgets was successfully updated.":"The widgets was successfully updated.","The token was successfully created":"The token was successfully created","The token has been successfully deleted.":"The token has been successfully deleted.","Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".":"Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".","Will display all cashiers who performs well.":"Will display all cashiers who performs well.","Will display all customers with the highest purchases.":"Will display all customers with the highest purchases.","Expense Card Widget":"Expense Card Widget","Will display a card of current and overwall expenses.":"Will display a card of current and overwall expenses.","Incomplete Sale Card Widget":"Incomplete Sale Card Widget","Will display a card of current and overall incomplete sales.":"Will display a card of current and overall incomplete sales.","Orders Chart":"Orders Chart","Will display a chart of weekly sales.":"Will display a chart of weekly sales.","Orders Summary":"Orders Summary","Will display a summary of recent sales.":"Will display a summary of recent sales.","Will display a profile widget with user stats.":"Will display a profile widget with user stats.","Sale Card Widget":"Sale Card Widget","Will display current and overall sales.":"Will display current and overall sales.","Return To Calendar":"Return To Calendar","Thr":"Thr","The left range will be invalid.":"The left range will be invalid.","The right range will be invalid.":"The right range will be invalid.","Click here to add widgets":"Click here to add widgets","Choose Widget":"Choose Widget","Select with widget you want to add to the column.":"Select with widget you want to add to the column.","Unamed Tab":"Unamed Tab","An error unexpected occured while printing.":"An error unexpected occured while printing.","and":"and","{date} ago":"{date} ago","In {date}":"In {date}","An unexpected error occured.":"An unexpected error occured.","Warning":"Warning","Change Type":"Change Type","Save Expense":"Save Expense","No configuration were choosen. Unable to proceed.":"No configuration were choosen. Unable to proceed.","Conditions":"Conditions","By proceeding the current for and all your entries will be cleared. Would you like to proceed?":"By proceeding the current for and all your entries will be cleared. Would you like to proceed?","No modules matches your search term.":"No modules matches your search term.","Press \"\/\" to search modules":"Press \"\/\" to search modules","No module has been uploaded yet.":"No module has been uploaded yet.","{module}":"{module}","Would you like to delete \"{module}\"? All data created by the module might also be deleted.":"Would you like to delete \"{module}\"? All data created by the module might also be deleted.","Search Medias":"Search Medias","Bulk Select":"Bulk Select","Press "\/" to search permissions":"Press "\/" to search permissions","SKU, Barcode, Name":"SKU, Barcode, Name","About Token":"About Token","Save Token":"Save Token","Generated Tokens":"Generated Tokens","Created":"Created","Last Use":"Last Use","Never":"Never","Expires":"Expires","Revoke":"Revoke","Token Name":"Token Name","This will be used to identifier the token.":"This will be used to identifier the token.","Unable to proceed, the form is not valid.":"Unable to proceed, the form is not valid.","An unexpected error occured":"An unexpected error occured","An Error Has Occured":"An Error Has Occured","Febuary":"Febuary","Configure":"Configure","This QR code is provided to ease authentication on external applications.":"This QR code is provided to ease authentication on external applications.","Copy And Close":"Copy And Close","An error has occured":"An error has occured","Recents Orders":"Recents Orders","Unamed Page":"Unamed Page","Assignation":"Assignation","Incoming Conversion":"Incoming Conversion","Outgoing Conversion":"Outgoing Conversion","Unknown Action":"Unknown Action","Direct Transaction":"Direct Transaction","Recurring Transaction":"Recurring Transaction","Entity Transaction":"Entity Transaction","Scheduled Transaction":"Scheduled Transaction","Unknown Type (%s)":"Unknown Type (%s)","What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.":"What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.","What is the full model name. eg: App\\Models\\Order ? [Q] to quit.":"What is the full model name. eg: App\\Models\\Order ? [Q] to quit.","What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.":"What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.","Unsupported argument provided: \"%s\"":"Unsupported argument provided: \"%s\"","The authorization token can\\'t be changed manually.":"The authorization token can\\'t be changed manually.","Translation process is complete for the module %s !":"Translation process is complete for the module %s !","%s migration(s) has been deleted.":"%s migration(s) has been deleted.","The command has been created for the module \"%s\"!":"The command has been created for the module \"%s\"!","The controller has been created for the module \"%s\"!":"The controller has been created for the module \"%s\"!","The event has been created at the following path \"%s\"!":"The event has been created at the following path \"%s\"!","The listener has been created on the path \"%s\"!":"The listener has been created on the path \"%s\"!","A request with the same name has been found !":"A request with the same name has been found !","Unable to find a module having the identifier \"%s\".":"Unable to find a module having the identifier \"%s\".","Unsupported reset mode.":"Unsupported reset mode.","You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.":"You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.","Unable to find a module having \"%s\" as namespace.":"Unable to find a module having \"%s\" as namespace.","A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.":"A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.","A new form class was created at the path \"%s\"":"A new form class was created at the path \"%s\"","Unable to proceed, looks like the database can\\'t be used.":"Unable to proceed, looks like the database can\\'t be used.","In which language would you like to install NexoPOS ?":"In which language would you like to install NexoPOS ?","You must define the language of installation.":"You must define the language of installation.","The value above which the current coupon can\\'t apply.":"The value above which the current coupon can\\'t apply.","Unable to save the coupon product as this product doens\\'t exists.":"Unable to save the coupon product as this product doens\\'t exists.","Unable to save the coupon category as this category doens\\'t exists.":"Unable to save the coupon category as this category doens\\'t exists.","Unable to save the coupon as this category doens\\'t exists.":"Unable to save the coupon as this category doens\\'t exists.","You\\re not allowed to do that.":"You\\re not allowed to do that.","Crediting (Add)":"Crediting (Add)","Refund (Add)":"Refund (Add)","Deducting (Remove)":"Deducting (Remove)","Payment (Remove)":"Payment (Remove)","The assigned default customer group doesn\\'t exist or is not defined.":"The assigned default customer group doesn\\'t exist or is not defined.","Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0":"Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0","You\\'re not allowed to do this operation":"You\\'re not allowed to do this operation","If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.":"If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.","Convert Unit":"Convert Unit","The unit that is selected for convertion by default.":"The unit that is selected for convertion by default.","COGS":"COGS","Used to define the Cost of Goods Sold.":"Used to define the Cost of Goods Sold.","Visible":"Visible","Define whether the unit is available for sale.":"Define whether the unit is available for sale.","Product unique name. If it\\' variation, it should be relevant for that variation":"Product unique name. If it\\' variation, it should be relevant for that variation","The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.":"The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.","The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.":"The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.","Auto COGS":"Auto COGS","Unknown Type: %s":"Unknown Type: %s","Shortage":"Shortage","Overage":"Overage","Transactions List":"Transactions List","Display all transactions.":"Display all transactions.","No transactions has been registered":"No transactions has been registered","Add a new transaction":"Add a new transaction","Create a new transaction":"Create a new transaction","Register a new transaction and save it.":"Register a new transaction and save it.","Edit transaction":"Edit transaction","Modify Transaction.":"Modify Transaction.","Return to Transactions":"Return to Transactions","determine if the transaction is effective or not. Work for recurring and not recurring transactions.":"determine if the transaction is effective or not. Work for recurring and not recurring transactions.","Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.":"Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.","Transaction Account":"Transaction Account","Assign the transaction to an account430":"Assign the transaction to an account430","Is the value or the cost of the transaction.":"Is the value or the cost of the transaction.","If set to Yes, the transaction will trigger on defined occurrence.":"If set to Yes, the transaction will trigger on defined occurrence.","Define how often this transaction occurs":"Define how often this transaction occurs","Define what is the type of the transactions.":"Define what is the type of the transactions.","Trigger":"Trigger","Would you like to trigger this expense now?":"Would you like to trigger this expense now?","Transactions History List":"Transactions History List","Display all transaction history.":"Display all transaction history.","No transaction history has been registered":"No transaction history has been registered","Add a new transaction history":"Add a new transaction history","Create a new transaction history":"Create a new transaction history","Register a new transaction history and save it.":"Register a new transaction history and save it.","Edit transaction history":"Edit transaction history","Modify Transactions history.":"Modify Transactions history.","Return to Transactions History":"Return to Transactions History","Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.":"Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.","Set the limit that can\\'t be exceeded by the user.":"Set the limit that can\\'t be exceeded by the user.","Oops, We\\'re Sorry!!!":"Oops, We\\'re Sorry!!!","Class: %s":"Class: %s","There\\'s is mismatch with the core version.":"There\\'s is mismatch with the core version.","You\\'re not authenticated.":"You\\'re not authenticated.","An error occured while performing your request.":"An error occured while performing your request.","A mismatch has occured between a module and it\\'s dependency.":"A mismatch has occured between a module and it\\'s dependency.","You\\'re not allowed to see that page.":"You\\'re not allowed to see that page.","Post Too Large":"Post Too Large","The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini":"The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini","This field does\\'nt have a valid value.":"This field does\\'nt have a valid value.","Describe the direct transaction.":"Describe the direct transaction.","If set to yes, the transaction will take effect immediately and be saved on the history.":"If set to yes, the transaction will take effect immediately and be saved on the history.","Assign the transaction to an account.":"Assign the transaction to an account.","set the value of the transaction.":"set the value of the transaction.","Further details on the transaction.":"Further details on the transaction.","Describe the direct transactions.":"Describe the direct transactions.","set the value of the transactions.":"set the value of the transactions.","The transactions will be multipled by the number of user having that role.":"The transactions will be multipled by the number of user having that role.","Create Sales (needs Procurements)":"Create Sales (needs Procurements)","Set when the transaction should be executed.":"Set when the transaction should be executed.","The addresses were successfully updated.":"The addresses were successfully updated.","Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.":"Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.","The register doesn\\'t have an history.":"The register doesn\\'t have an history.","Unable to check a register session history if it\\'s closed.":"Unable to check a register session history if it\\'s closed.","Register History For : %s":"Register History For : %s","Can\\'t delete a category having sub categories linked to it.":"Can\\'t delete a category having sub categories linked to it.","Unable to proceed. The request doesn\\'t provide enough data which could be handled":"Unable to proceed. The request doesn\\'t provide enough data which could be handled","Unable to load the CRUD resource : %s.":"Unable to load the CRUD resource : %s.","Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods":"Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods","The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.":"The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.","The crud columns exceed the maximum column that can be exported (27)":"The crud columns exceed the maximum column that can be exported (27)","This link has expired.":"This link has expired.","Account History : %s":"Account History : %s","Welcome — %s":"Welcome — %s","Upload and manage medias (photos).":"Upload and manage medias (photos).","The product which id is %s doesnt\\'t belong to the procurement which id is %s":"The product which id is %s doesnt\\'t belong to the procurement which id is %s","The refresh process has started. You\\'ll get informed once it\\'s complete.":"The refresh process has started. You\\'ll get informed once it\\'s complete.","The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".":"The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".","Stock History For %s":"Stock History For %s","Set":"Set","The unit is not set for the product \"%s\".":"The unit is not set for the product \"%s\".","The operation will cause a negative stock for the product \"%s\" (%s).":"The operation will cause a negative stock for the product \"%s\" (%s).","The adjustment quantity can\\'t be negative for the product \"%s\" (%s)":"The adjustment quantity can\\'t be negative for the product \"%s\" (%s)","%s\\'s Products":"%s\\'s Products","Transactions Report":"Transactions Report","Combined Report":"Combined Report","Provides a combined report for every transactions on products.":"Provides a combined report for every transactions on products.","Unable to initiallize the settings page. The identifier \"' . $identifier . '":"Unable to initiallize the settings page. The identifier \"' . $identifier . '","Shows all histories generated by the transaction.":"Shows all histories generated by the transaction.","Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.":"Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.","Create New Transaction":"Create New Transaction","Set direct, scheduled transactions.":"Set direct, scheduled transactions.","Update Transaction":"Update Transaction","The provided data aren\\'t valid":"The provided data aren\\'t valid","Welcome — NexoPOS":"Welcome — NexoPOS","You\\'re not allowed to see this page.":"You\\'re not allowed to see this page.","Your don\\'t have enough permission to perform this action.":"Your don\\'t have enough permission to perform this action.","You don\\'t have the necessary role to see this page.":"You don\\'t have the necessary role to see this page.","%s order(s) has recently been deleted as they has expired.":"%s order(s) has recently been deleted as they has expired.","%s product(s) has low stock. Reorder those product(s) before it get exhausted.":"%s product(s) has low stock. Reorder those product(s) before it get exhausted.","Scheduled Transactions":"Scheduled Transactions","the transaction \"%s\" was executed as scheduled on %s.":"the transaction \"%s\" was executed as scheduled on %s.","Workers Aren\\'t Running":"Workers Aren\\'t Running","The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.":"The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.","Unable to remove the permissions \"%s\". It doesn\\'t exists.":"Unable to remove the permissions \"%s\". It doesn\\'t exists.","An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A":"An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A","Unable to open \"%s\" *, as it\\'s not closed.":"Unable to open \"%s\" *, as it\\'s not closed.","Unable to open \"%s\" *, as it\\'s not opened.":"Unable to open \"%s\" *, as it\\'s not opened.","Unable to cashing on \"%s\" *, as it\\'s not opened.":"Unable to cashing on \"%s\" *, as it\\'s not opened.","Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.":"Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.","Unable to cashout on \"%s":"Unable to cashout on \"%s","Symbolic Links Missing":"Symbolic Links Missing","The Symbolic Links to the public directory is missing. Your medias might be broken and not display.":"The Symbolic Links to the public directory is missing. Your medias might be broken and not display.","Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.":"Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.","The requested module %s cannot be found.":"The requested module %s cannot be found.","The manifest.json can\\'t be located inside the module %s on the path: %s":"The manifest.json can\\'t be located inside the module %s on the path: %s","the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.":"the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.","Sorting is explicitely disabled for the column \"%s\".":"Sorting is explicitely disabled for the column \"%s\".","Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s":"Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s","Unable to find the customer using the provided id %s.":"Unable to find the customer using the provided id %s.","Not enough credits on the customer account. Requested : %s, Remaining: %s.":"Not enough credits on the customer account. Requested : %s, Remaining: %s.","The customer account doesn\\'t have enough funds to proceed.":"The customer account doesn\\'t have enough funds to proceed.","Unable to find a reference to the attached coupon : %s":"Unable to find a reference to the attached coupon : %s","You\\'re not allowed to use this coupon as it\\'s no longer active":"You\\'re not allowed to use this coupon as it\\'s no longer active","You\\'re not allowed to use this coupon it has reached the maximum usage allowed.":"You\\'re not allowed to use this coupon it has reached the maximum usage allowed.","Terminal A":"Terminal A","Terminal B":"Terminal B","%s link were deleted":"%s link were deleted","Unable to execute the following class callback string : %s":"Unable to execute the following class callback string : %s","%s — %s":"%s — %s","Transactions":"Transactions","Create Transaction":"Create Transaction","Stock History":"Stock History","Invoices":"Invoices","Failed to parse the configuration file on the following path \"%s\"":"Failed to parse the configuration file on the following path \"%s\"","No config.xml has been found on the directory : %s. This folder is ignored":"No config.xml has been found on the directory : %s. This folder is ignored","The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ":"The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ","Unable to upload this module as it\\'s older than the version installed":"Unable to upload this module as it\\'s older than the version installed","The migration file doens\\'t have a valid class name. Expected class : %s":"The migration file doens\\'t have a valid class name. Expected class : %s","Unable to locate the following file : %s":"Unable to locate the following file : %s","The migration file doens\\'t have a valid method name. Expected method : %s":"The migration file doens\\'t have a valid method name. Expected method : %s","The module %s cannot be enabled as his dependency (%s) is missing or not enabled.":"The module %s cannot be enabled as his dependency (%s) is missing or not enabled.","The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.":"The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.","An Error Occurred \"%s\": %s":"An Error Occurred \"%s\": %s","The order has been updated":"The order has been updated","The minimal payment of %s has\\'nt been provided.":"The minimal payment of %s has\\'nt been provided.","Unable to proceed as the order is already paid.":"Unable to proceed as the order is already paid.","The customer account funds are\\'nt enough to process the payment.":"The customer account funds are\\'nt enough to process the payment.","Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.","Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.","By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.":"By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.","You\\'re not allowed to make payments.":"You\\'re not allowed to make payments.","Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s":"Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s","Unknown Status (%s)":"Unknown Status (%s)","%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.":"%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.","Unable to find a reference of the provided coupon : %s":"Unable to find a reference of the provided coupon : %s","The procurement has been deleted. %s included stock record(s) has been deleted as well.":"The procurement has been deleted. %s included stock record(s) has been deleted as well.","Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.":"Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.","Unable to find the product using the provided id \"%s\"":"Unable to find the product using the provided id \"%s\"","Unable to procure the product \"%s\" as the stock management is disabled.":"Unable to procure the product \"%s\" as the stock management is disabled.","Unable to procure the product \"%s\" as it is a grouped product.":"Unable to procure the product \"%s\" as it is a grouped product.","The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item":"The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item","%s procurement(s) has recently been automatically procured.":"%s procurement(s) has recently been automatically procured.","The requested category doesn\\'t exists":"The requested category doesn\\'t exists","The category to which the product is attached doesn\\'t exists or has been deleted":"The category to which the product is attached doesn\\'t exists or has been deleted","Unable to create a product with an unknow type : %s":"Unable to create a product with an unknow type : %s","A variation within the product has a barcode which is already in use : %s.":"A variation within the product has a barcode which is already in use : %s.","A variation within the product has a SKU which is already in use : %s":"A variation within the product has a SKU which is already in use : %s","Unable to edit a product with an unknown type : %s":"Unable to edit a product with an unknown type : %s","The requested sub item doesn\\'t exists.":"The requested sub item doesn\\'t exists.","One of the provided product variation doesn\\'t include an identifier.":"One of the provided product variation doesn\\'t include an identifier.","The product\\'s unit quantity has been updated.":"The product\\'s unit quantity has been updated.","Unable to reset this variable product \"%s":"Unable to reset this variable product \"%s","Adjusting grouped product inventory must result of a create, update, delete sale operation.":"Adjusting grouped product inventory must result of a create, update, delete sale operation.","Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).":"Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).","Unsupported stock action \"%s\"":"Unsupported stock action \"%s\"","%s product(s) has been deleted.":"%s product(s) has been deleted.","%s products(s) has been deleted.":"%s products(s) has been deleted.","Unable to find the product, as the argument \"%s\" which value is \"%s":"Unable to find the product, as the argument \"%s\" which value is \"%s","You cannot convert unit on a product having stock management disabled.":"You cannot convert unit on a product having stock management disabled.","The source and the destination unit can\\'t be the same. What are you trying to do ?":"The source and the destination unit can\\'t be the same. What are you trying to do ?","There is no source unit quantity having the name \"%s\" for the item %s":"There is no source unit quantity having the name \"%s\" for the item %s","There is no destination unit quantity having the name %s for the item %s":"There is no destination unit quantity having the name %s for the item %s","The source unit and the destination unit doens\\'t belong to the same unit group.":"The source unit and the destination unit doens\\'t belong to the same unit group.","The group %s has no base unit defined":"The group %s has no base unit defined","The conversion of %s(%s) to %s(%s) was successful":"The conversion of %s(%s) to %s(%s) was successful","The product has been deleted.":"The product has been deleted.","An error occurred: %s.":"An error occurred: %s.","A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.":"A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.","Today\\'s Orders":"Today\\'s Orders","Today\\'s Sales":"Today\\'s Sales","Today\\'s Refunds":"Today\\'s Refunds","Today\\'s Customers":"Today\\'s Customers","The report will be generated. Try loading the report within few minutes.":"The report will be generated. Try loading the report within few minutes.","The database has been wiped out.":"The database has been wiped out.","No custom handler for the reset \"' . $mode . '\"":"No custom handler for the reset \"' . $mode . '\"","Unable to proceed. The parent tax doesn\\'t exists.":"Unable to proceed. The parent tax doesn\\'t exists.","A simple tax must not be assigned to a parent tax with the type \"simple":"A simple tax must not be assigned to a parent tax with the type \"simple","Created via tests":"Created via tests","The transaction has been successfully saved.":"The transaction has been successfully saved.","The transaction has been successfully updated.":"The transaction has been successfully updated.","Unable to find the transaction using the provided identifier.":"Unable to find the transaction using the provided identifier.","Unable to find the requested transaction using the provided id.":"Unable to find the requested transaction using the provided id.","The transction has been correctly deleted.":"The transction has been correctly deleted.","You cannot delete an account which has transactions bound.":"You cannot delete an account which has transactions bound.","The transaction account has been deleted.":"The transaction account has been deleted.","Unable to find the transaction account using the provided ID.":"Unable to find the transaction account using the provided ID.","The transaction account has been updated.":"The transaction account has been updated.","This transaction type can\\'t be triggered.":"This transaction type can\\'t be triggered.","The transaction has been successfully triggered.":"The transaction has been successfully triggered.","The transaction \"%s\" has been processed on day \"%s\".":"The transaction \"%s\" has been processed on day \"%s\".","The transaction \"%s\" has already been processed.":"The transaction \"%s\" has already been processed.","The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.":"The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.","The process has been correctly executed and all transactions has been processed.":"The process has been correctly executed and all transactions has been processed.","The process has been executed with some failures. %s\/%s process(es) has successed.":"The process has been executed with some failures. %s\/%s process(es) has successed.","Procurement : %s":"Procurement : %s","Procurement Liability : %s":"Procurement Liability : %s","Refunding : %s":"Refunding : %s","Spoiled Good : %s":"Spoiled Good : %s","Sale : %s":"Sale : %s","Liabilities Account":"Liabilities Account","Not found account type: %s":"Not found account type: %s","Refund : %s":"Refund : %s","Customer Account Crediting : %s":"Customer Account Crediting : %s","Customer Account Purchase : %s":"Customer Account Purchase : %s","Customer Account Deducting : %s":"Customer Account Deducting : %s","Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.":"Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.","The unit group %s doesn\\'t have a base unit":"The unit group %s doesn\\'t have a base unit","The system role \"Users\" can be retrieved.":"The system role \"Users\" can be retrieved.","The default role that must be assigned to new users cannot be retrieved.":"The default role that must be assigned to new users cannot be retrieved.","%s Second(s)":"%s Second(s)","Configure the accounting feature":"Configure the accounting feature","Define the symbol that indicate thousand. By default ":"Define the symbol that indicate thousand. By default ","Date Time Format":"Date Time Format","This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".":"This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".","Date TimeZone":"Date TimeZone","Determine the default timezone of the store. Current Time: %s":"Determine the default timezone of the store. Current Time: %s","Configure how invoice and receipts are used.":"Configure how invoice and receipts are used.","configure settings that applies to orders.":"configure settings that applies to orders.","Report Settings":"Report Settings","Configure the settings":"Configure the settings","Wipes and Reset the database.":"Wipes and Reset the database.","Supply Delivery":"Supply Delivery","Configure the delivery feature.":"Configure the delivery feature.","Configure how background operations works.":"Configure how background operations works.","Every procurement will be added to the selected transaction account":"Every procurement will be added to the selected transaction account","Every sales will be added to the selected transaction account":"Every sales will be added to the selected transaction account","Customer Credit Account (crediting)":"Customer Credit Account (crediting)","Every customer credit will be added to the selected transaction account":"Every customer credit will be added to the selected transaction account","Customer Credit Account (debitting)":"Customer Credit Account (debitting)","Every customer credit removed will be added to the selected transaction account":"Every customer credit removed will be added to the selected transaction account","Sales refunds will be attached to this transaction account":"Sales refunds will be attached to this transaction account","Stock Return Account (Spoiled Items)":"Stock Return Account (Spoiled Items)","Disbursement (cash register)":"Disbursement (cash register)","Transaction account for all cash disbursement.":"Transaction account for all cash disbursement.","Liabilities":"Liabilities","Transaction account for all liabilities.":"Transaction account for all liabilities.","You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.":"You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.","Show Tax Breakdown":"Show Tax Breakdown","Will display the tax breakdown on the receipt\/invoice.":"Will display the tax breakdown on the receipt\/invoice.","Available tags : ":"Available tags : ","{store_name}: displays the store name.":"{store_name}: displays the store name.","{store_email}: displays the store email.":"{store_email}: displays the store email.","{store_phone}: displays the store phone number.":"{store_phone}: displays the store phone number.","{cashier_name}: displays the cashier name.":"{cashier_name}: displays the cashier name.","{cashier_id}: displays the cashier id.":"{cashier_id}: displays the cashier id.","{order_code}: displays the order code.":"{order_code}: displays the order code.","{order_date}: displays the order date.":"{order_date}: displays the order date.","{order_type}: displays the order type.":"{order_type}: displays the order type.","{customer_name}: displays the customer name.":"{customer_name}: displays the customer name.","{customer_email}: displays the customer email.":"{customer_email}: displays the customer email.","{shipping_first_name}: displays the shipping first name.":"{shipping_first_name}: displays the shipping first name.","{shipping_last_name}: displays the shipping last name.":"{shipping_last_name}: displays the shipping last name.","{shipping_phone}: displays the shipping phone.":"{shipping_phone}: displays the shipping phone.","{shipping_address_1}: displays the shipping address_1.":"{shipping_address_1}: displays the shipping address_1.","{shipping_address_2}: displays the shipping address_2.":"{shipping_address_2}: displays the shipping address_2.","{shipping_country}: displays the shipping country.":"{shipping_country}: displays the shipping country.","{shipping_city}: displays the shipping city.":"{shipping_city}: displays the shipping city.","{shipping_pobox}: displays the shipping pobox.":"{shipping_pobox}: displays the shipping pobox.","{shipping_company}: displays the shipping company.":"{shipping_company}: displays the shipping company.","{shipping_email}: displays the shipping email.":"{shipping_email}: displays the shipping email.","{billing_first_name}: displays the billing first name.":"{billing_first_name}: displays the billing first name.","{billing_last_name}: displays the billing last name.":"{billing_last_name}: displays the billing last name.","{billing_phone}: displays the billing phone.":"{billing_phone}: displays the billing phone.","{billing_address_1}: displays the billing address_1.":"{billing_address_1}: displays the billing address_1.","{billing_address_2}: displays the billing address_2.":"{billing_address_2}: displays the billing address_2.","{billing_country}: displays the billing country.":"{billing_country}: displays the billing country.","{billing_city}: displays the billing city.":"{billing_city}: displays the billing city.","{billing_pobox}: displays the billing pobox.":"{billing_pobox}: displays the billing pobox.","{billing_company}: displays the billing company.":"{billing_company}: displays the billing company.","{billing_email}: displays the billing email.":"{billing_email}: displays the billing email.","Available tags :":"Available tags :","Quick Product Default Unit":"Quick Product Default Unit","Set what unit is assigned by default to all quick product.":"Set what unit is assigned by default to all quick product.","Hide Exhausted Products":"Hide Exhausted Products","Will hide exhausted products from selection on the POS.":"Will hide exhausted products from selection on the POS.","Hide Empty Category":"Hide Empty Category","Category with no or exhausted products will be hidden from selection.":"Category with no or exhausted products will be hidden from selection.","Default Printing (web)":"Default Printing (web)","The amount numbers shortcuts separated with a \"|\".":"The amount numbers shortcuts separated with a \"|\".","No submit URL was provided":"No submit URL was provided","Sorting is explicitely disabled on this column":"Sorting is explicitely disabled on this column","An unpexpected error occured while using the widget.":"An unpexpected error occured while using the widget.","This field must be similar to \"{other}\"\"":"This field must be similar to \"{other}\"\"","This field must have at least \"{length}\" characters\"":"This field must have at least \"{length}\" characters\"","This field must have at most \"{length}\" characters\"":"This field must have at most \"{length}\" characters\"","This field must be different from \"{other}\"\"":"This field must be different from \"{other}\"\"","Search result":"Search result","Choose...":"Choose...","The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.":"The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.","+{count} other":"+{count} other","The selected print gateway doesn't support this type of printing.":"The selected print gateway doesn't support this type of printing.","millisecond| second| minute| hour| day| week| month| year| decade| century| millennium":"millisecond| second| minute| hour| day| week| month| year| decade| century| millennium","milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia":"milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia","An error occured":"An error occured","You\\'re about to delete selected resources. Would you like to proceed?":"You\\'re about to delete selected resources. Would you like to proceed?","See Error":"See Error","Your uploaded files will displays here.":"Your uploaded files will displays here.","Nothing to care about !":"Nothing to care about !","Would you like to bulk edit a system role ?":"Would you like to bulk edit a system role ?","Total :":"Total :","Remaining :":"Remaining :","Instalments:":"Instalments:","This instalment doesn\\'t have any payment attached.":"This instalment doesn\\'t have any payment attached.","You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?":"You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?","An error has occured while seleting the payment gateway.":"An error has occured while seleting the payment gateway.","You're not allowed to add a discount on the product.":"You're not allowed to add a discount on the product.","You're not allowed to add a discount on the cart.":"You're not allowed to add a discount on the cart.","Cash Register : {register}":"Cash Register : {register}","The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?":"The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?","You don't have the right to edit the purchase price.":"You don't have the right to edit the purchase price.","Dynamic product can\\'t have their price updated.":"Dynamic product can\\'t have their price updated.","You\\'re not allowed to edit the order settings.":"You\\'re not allowed to edit the order settings.","Looks like there is either no products and no categories. How about creating those first to get started ?":"Looks like there is either no products and no categories. How about creating those first to get started ?","Create Categories":"Create Categories","You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?":"You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?","An unexpected error has occured while loading the form. Please check the log or contact the support.":"An unexpected error has occured while loading the form. Please check the log or contact the support.","We were not able to load the units. Make sure there are units attached on the unit group selected.":"We were not able to load the units. Make sure there are units attached on the unit group selected.","The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?":"The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?","There shoulnd\\'t be more option than there are units.":"There shoulnd\\'t be more option than there are units.","Either Selling or Purchase unit isn\\'t defined. Unable to proceed.":"Either Selling or Purchase unit isn\\'t defined. Unable to proceed.","Select the procured unit first before selecting the conversion unit.":"Select the procured unit first before selecting the conversion unit.","Convert to unit":"Convert to unit","An unexpected error has occured":"An unexpected error has occured","Unable to add product which doesn\\'t unit quantities defined.":"Unable to add product which doesn\\'t unit quantities defined.","{product}: Purchase Unit":"{product}: Purchase Unit","The product will be procured on that unit.":"The product will be procured on that unit.","Unkown Unit":"Unkown Unit","Choose Tax":"Choose Tax","The tax will be assigned to the procured product.":"The tax will be assigned to the procured product.","Show Details":"Show Details","Hide Details":"Hide Details","Important Notes":"Important Notes","Stock Management Products.":"Stock Management Products.","Doesn\\'t work with Grouped Product.":"Doesn\\'t work with Grouped Product.","Convert":"Convert","Looks like no valid products matched the searched term.":"Looks like no valid products matched the searched term.","This product doesn't have any stock to adjust.":"This product doesn't have any stock to adjust.","Select Unit":"Select Unit","Select the unit that you want to adjust the stock with.":"Select the unit that you want to adjust the stock with.","A similar product with the same unit already exists.":"A similar product with the same unit already exists.","Select Procurement":"Select Procurement","Select the procurement that you want to adjust the stock with.":"Select the procurement that you want to adjust the stock with.","Select Action":"Select Action","Select the action that you want to perform on the stock.":"Select the action that you want to perform on the stock.","Would you like to remove the selected products from the table ?":"Would you like to remove the selected products from the table ?","Unit:":"Unit:","Operation:":"Operation:","Procurement:":"Procurement:","Reason:":"Reason:","Provided":"Provided","Not Provided":"Not Provided","Remove Selected":"Remove Selected","Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.":"Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.","You haven\\'t yet generated any token for your account. Create one to get started.":"You haven\\'t yet generated any token for your account. Create one to get started.","You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?":"You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?","Date Range : {date1} - {date2}":"Date Range : {date1} - {date2}","Document : Best Products":"Document : Best Products","By : {user}":"By : {user}","Range : {date1} — {date2}":"Range : {date1} — {date2}","Document : Sale By Payment":"Document : Sale By Payment","Document : Customer Statement":"Document : Customer Statement","Customer : {selectedCustomerName}":"Customer : {selectedCustomerName}","All Categories":"All Categories","All Units":"All Units","Date : {date}":"Date : {date}","Document : {reportTypeName}":"Document : {reportTypeName}","Threshold":"Threshold","Select Units":"Select Units","An error has occured while loading the units.":"An error has occured while loading the units.","An error has occured while loading the categories.":"An error has occured while loading the categories.","Document : Payment Type":"Document : Payment Type","Document : Profit Report":"Document : Profit Report","Filter by Category":"Filter by Category","Filter by Units":"Filter by Units","An error has occured while loading the categories":"An error has occured while loading the categories","An error has occured while loading the units":"An error has occured while loading the units","By Type":"By Type","By User":"By User","By Category":"By Category","All Category":"All Category","Document : Sale Report":"Document : Sale Report","Filter By Category":"Filter By Category","Allow you to choose the category.":"Allow you to choose the category.","No category was found for proceeding the filtering.":"No category was found for proceeding the filtering.","Document : Sold Stock Report":"Document : Sold Stock Report","Filter by Unit":"Filter by Unit","Limit Results By Categories":"Limit Results By Categories","Limit Results By Units":"Limit Results By Units","Generate Report":"Generate Report","Document : Combined Products History":"Document : Combined Products History","Ini. Qty":"Ini. Qty","Added Quantity":"Added Quantity","Add. Qty":"Add. Qty","Sold Quantity":"Sold Quantity","Sold Qty":"Sold Qty","Defective Quantity":"Defective Quantity","Defec. Qty":"Defec. Qty","Final Quantity":"Final Quantity","Final Qty":"Final Qty","No data available":"No data available","Document : Yearly Report":"Document : Yearly Report","The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.":"The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.","Unable to edit this transaction":"Unable to edit this transaction","This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.":"This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.","Save Transaction":"Save Transaction","While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.":"While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.","The transaction is about to be saved. Would you like to confirm your action ?":"The transaction is about to be saved. Would you like to confirm your action ?","Unable to load the transaction":"Unable to load the transaction","You cannot edit this transaction if NexoPOS cannot perform background requests.":"You cannot edit this transaction if NexoPOS cannot perform background requests.","MySQL is selected as database driver":"MySQL is selected as database driver","Please provide the credentials to ensure NexoPOS can connect to the database.":"Please provide the credentials to ensure NexoPOS can connect to the database.","Sqlite is selected as database driver":"Sqlite is selected as database driver","Make sure Sqlite module is available for PHP. Your database will be located on the database directory.":"Make sure Sqlite module is available for PHP. Your database will be located on the database directory.","Checking database connectivity...":"Checking database connectivity...","Driver":"Driver","Set the database driver":"Set the database driver","Hostname":"Hostname","Provide the database hostname":"Provide the database hostname","Username required to connect to the database.":"Username required to connect to the database.","The username password required to connect.":"The username password required to connect.","Database Name":"Database Name","Provide the database name. Leave empty to use default file for SQLite Driver.":"Provide the database name. Leave empty to use default file for SQLite Driver.","Database Prefix":"Database Prefix","Provide the database prefix.":"Provide the database prefix.","Port":"Port","Provide the hostname port.":"Provide the hostname port.","NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.":"NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.","Install":"Install","Application":"Application","That is the application name.":"That is the application name.","Provide the administrator username.":"Provide the administrator username.","Provide the administrator email.":"Provide the administrator email.","What should be the password required for authentication.":"What should be the password required for authentication.","Should be the same as the password above.":"Should be the same as the password above.","Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.":"Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.","Choose your language to get started.":"Choose your language to get started.","Remaining Steps":"Remaining Steps","Database Configuration":"Database Configuration","Application Configuration":"Application Configuration","Language Selection":"Language Selection","Select what will be the default language of NexoPOS.":"Select what will be the default language of NexoPOS.","In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.":"In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.","Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.":"Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.","Please report this message to the support : ":"Please report this message to the support : ","No refunds made so far. Good news right?":"No refunds made so far. Good news right?","Open Register : %s":"Open Register : %s","Loading Coupon For : ":"Loading Coupon For : ","This coupon requires products that aren\\'t available on the cart at the moment.":"This coupon requires products that aren\\'t available on the cart at the moment.","This coupon requires products that belongs to specific categories that aren\\'t included at the moment.":"This coupon requires products that belongs to specific categories that aren\\'t included at the moment.","Too many results.":"Too many results.","New Customer":"New Customer","Purchases":"Purchases","Owed":"Owed","Usage :":"Usage :","Code :":"Code :","Order Reference":"Order Reference","The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?":"The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?","{product} : Units":"{product} : Units","This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.":"This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.","Previewing :":"Previewing :","Search for options":"Search for options","The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.":"The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.","The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.":"The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.","The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.":"The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.","The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.":"The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.","Invalid Error Message":"Invalid Error Message","{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List":"{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List","Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.":"Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.","No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered":"No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered","Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.":"Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.","Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.":"Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.","Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}":"Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}","{{ ucwords( $column ) }}":"{{ ucwords( $column ) }}","Delete Selected Entries":"Delete Selected Entries","Unamed Settings Page":"Unamed Settings Page","Description of unamed setting page":"Description of unamed setting page","Text Field":"Text Field","This is a sample text field.":"This is a sample text field.","No description has been provided.":"No description has been provided.","You\\'re using NexoPOS %s<\/a>":"You\\'re using NexoPOS %s<\/a>","If you haven\\'t asked this, please get in touch with the administrators.":"If you haven\\'t asked this, please get in touch with the administrators.","A new user has registered to your store (%s) with the email %s.":"A new user has registered to your store (%s) with the email %s.","The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.":"The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.","Note: ":"Note: ","Inclusive Product Taxes":"Inclusive Product Taxes","Exclusive Product Taxes":"Exclusive Product Taxes","Condition:":"Condition:","Date : %s":"Date : %s","The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?":"The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?","NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.":"NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.","Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.":"Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.","Retry":"Retry","If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.":"If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources."} \ No newline at end of file +{"displaying {perPage} on {items} items":"displaying {perPage} on {items} items","The document has been generated.":"The document has been generated.","Unexpected error occurred.":"Unexpected error occurred.","{entries} entries selected":"{entries} entries selected","Download":"Download","Bulk Actions":"Bulk Actions","Delivery":"Delivery","Take Away":"Take Away","Unknown Type":"Unknown Type","Pending":"Pending","Ongoing":"Ongoing","Delivered":"Delivered","Unknown Status":"Unknown Status","Ready":"Ready","Paid":"Paid","Hold":"Hold","Unpaid":"Unpaid","Partially Paid":"Partially Paid","Save Password":"Save Password","Unable to proceed the form is not valid.":"Unable to proceed the form is not valid.","Submit":"Submit","Register":"Register","An unexpected error occurred.":"An unexpected error occurred.","Best Cashiers":"Best Cashiers","No result to display.":"No result to display.","Well.. nothing to show for the meantime.":"Well.. nothing to show for the meantime.","Best Customers":"Best Customers","Well.. nothing to show for the meantime":"Well.. nothing to show for the meantime","Total Sales":"Total Sales","Today":"Today","Incomplete Orders":"Incomplete Orders","Expenses":"Expenses","Weekly Sales":"Weekly Sales","Week Taxes":"Week Taxes","Net Income":"Net Income","Week Expenses":"Week Expenses","Order":"Order","Clear All":"Clear All","Confirm Your Action":"Confirm Your Action","Save":"Save","The processing status of the order will be changed. Please confirm your action.":"The processing status of the order will be changed. Please confirm your action.","Instalments":"Instalments","Create":"Create","Add Instalment":"Add Instalment","An unexpected error has occurred":"An unexpected error has occurred","Store Details":"Store Details","Order Code":"Order Code","Cashier":"Cashier","Date":"Date","Customer":"Customer","Type":"Type","Payment Status":"Payment Status","Delivery Status":"Delivery Status","Billing Details":"Billing Details","Shipping Details":"Shipping Details","Product":"Product","Unit Price":"Unit Price","Quantity":"Quantity","Discount":"Discount","Tax":"Tax","Total Price":"Total Price","Expiration Date":"Expiration Date","Sub Total":"Sub Total","Coupons":"Coupons","Shipping":"Shipping","Total":"Total","Due":"Due","Change":"Change","No title is provided":"No title is provided","SKU":"SKU","Barcode":"Barcode","The product already exists on the table.":"The product already exists on the table.","The specified quantity exceed the available quantity.":"The specified quantity exceed the available quantity.","Unable to proceed as the table is empty.":"Unable to proceed as the table is empty.","More Details":"More Details","Useful to describe better what are the reasons that leaded to this adjustment.":"Useful to describe better what are the reasons that leaded to this adjustment.","Search":"Search","Unit":"Unit","Operation":"Operation","Procurement":"Procurement","Value":"Value","Search and add some products":"Search and add some products","Proceed":"Proceed","An unexpected error occurred":"An unexpected error occurred","Load Coupon":"Load Coupon","Apply A Coupon":"Apply A Coupon","Load":"Load","Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.":"Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.","Click here to choose a customer.":"Click here to choose a customer.","Coupon Name":"Coupon Name","Usage":"Usage","Unlimited":"Unlimited","Valid From":"Valid From","Valid Till":"Valid Till","Categories":"Categories","Products":"Products","Active Coupons":"Active Coupons","Apply":"Apply","Cancel":"Cancel","Coupon Code":"Coupon Code","The coupon is out from validity date range.":"The coupon is out from validity date range.","The coupon has applied to the cart.":"The coupon has applied to the cart.","Percentage":"Percentage","Flat":"Flat","The coupon has been loaded.":"The coupon has been loaded.","Layaway Parameters":"Layaway Parameters","Minimum Payment":"Minimum Payment","Instalments & Payments":"Instalments & Payments","The final payment date must be the last within the instalments.":"The final payment date must be the last within the instalments.","Amount":"Amount","You must define layaway settings before proceeding.":"You must define layaway settings before proceeding.","Please provide instalments before proceeding.":"Please provide instalments before proceeding.","Unable to process, the form is not valid":"Unable to process, the form is not valid","One or more instalments has an invalid date.":"One or more instalments has an invalid date.","One or more instalments has an invalid amount.":"One or more instalments has an invalid amount.","One or more instalments has a date prior to the current date.":"One or more instalments has a date prior to the current date.","Total instalments must be equal to the order total.":"Total instalments must be equal to the order total.","The customer has been loaded":"The customer has been loaded","This coupon is already added to the cart":"This coupon is already added to the cart","No tax group assigned to the order":"No tax group assigned to the order","Layaway defined":"Layaway defined","Okay":"Okay","An unexpected error has occurred while fecthing taxes.":"An unexpected error has occurred while fecthing taxes.","OKAY":"OKAY","Loading...":"Loading...","Profile":"Profile","Logout":"Logout","Unnamed Page":"Unnamed Page","No description":"No description","Name":"Name","Provide a name to the resource.":"Provide a name to the resource.","General":"General","Edit":"Edit","Delete":"Delete","Delete Selected Groups":"Delete Selected Groups","Activate Your Account":"Activate Your Account","Password Recovered":"Password Recovered","Password Recovery":"Password Recovery","Reset Password":"Reset Password","New User Registration":"New User Registration","Your Account Has Been Created":"Your Account Has Been Created","Login":"Login","Save Coupon":"Save Coupon","This field is required":"This field is required","The form is not valid. Please check it and try again":"The form is not valid. Please check it and try again","mainFieldLabel not defined":"mainFieldLabel not defined","Create Customer Group":"Create Customer Group","Save a new customer group":"Save a new customer group","Update Group":"Update Group","Modify an existing customer group":"Modify an existing customer group","Managing Customers Groups":"Managing Customers Groups","Create groups to assign customers":"Create groups to assign customers","Create Customer":"Create Customer","Managing Customers":"Managing Customers","List of registered customers":"List of registered customers","Your Module":"Your Module","Choose the zip file you would like to upload":"Choose the zip file you would like to upload","Upload":"Upload","Managing Orders":"Managing Orders","Manage all registered orders.":"Manage all registered orders.","Failed":"Failed","Order receipt":"Order receipt","Hide Dashboard":"Hide Dashboard","Taxes":"Taxes","Unknown Payment":"Unknown Payment","Procurement Name":"Procurement Name","Unable to proceed no products has been provided.":"Unable to proceed no products has been provided.","Unable to proceed, one or more products is not valid.":"Unable to proceed, one or more products is not valid.","Unable to proceed the procurement form is not valid.":"Unable to proceed the procurement form is not valid.","Unable to proceed, no submit url has been provided.":"Unable to proceed, no submit url has been provided.","SKU, Barcode, Product name.":"SKU, Barcode, Product name.","N\/A":"N\/A","Email":"Email","Phone":"Phone","First Address":"First Address","Second Address":"Second Address","Address":"Address","City":"City","PO.Box":"PO.Box","Price":"Price","Print":"Print","Description":"Description","Included Products":"Included Products","Apply Settings":"Apply Settings","Basic Settings":"Basic Settings","Visibility Settings":"Visibility Settings","Year":"Year","Sales":"Sales","Income":"Income","January":"January","March":"March","April":"April","May":"May","June":"June","July":"July","August":"August","September":"September","October":"October","November":"November","December":"December","Purchase Price":"Purchase Price","Sale Price":"Sale Price","Profit":"Profit","Tax Value":"Tax Value","Reward System Name":"Reward System Name","Missing Dependency":"Missing Dependency","Go Back":"Go Back","Continue":"Continue","Home":"Home","Not Allowed Action":"Not Allowed Action","Try Again":"Try Again","Access Denied":"Access Denied","Dashboard":"Dashboard","Sign In":"Sign In","Sign Up":"Sign Up","This field is required.":"This field is required.","This field must contain a valid email address.":"This field must contain a valid email address.","Clear Selected Entries ?":"Clear Selected Entries ?","Would you like to clear all selected entries ?":"Would you like to clear all selected entries ?","No selection has been made.":"No selection has been made.","No action has been selected.":"No action has been selected.","There is nothing to display...":"There is nothing to display...","Sun":"Sun","Mon":"Mon","Tue":"Tue","Wed":"Wed","Fri":"Fri","Sat":"Sat","Nothing to display":"Nothing to display","Password Forgotten ?":"Password Forgotten ?","OK":"OK","Remember Your Password ?":"Remember Your Password ?","Already registered ?":"Already registered ?","Refresh":"Refresh","Enabled":"Enabled","Disabled":"Disabled","Enable":"Enable","Disable":"Disable","Gallery":"Gallery","Medias Manager":"Medias Manager","Click Here Or Drop Your File To Upload":"Click Here Or Drop Your File To Upload","Nothing has already been uploaded":"Nothing has already been uploaded","File Name":"File Name","Uploaded At":"Uploaded At","By":"By","Previous":"Previous","Next":"Next","Use Selected":"Use Selected","Would you like to clear all the notifications ?":"Would you like to clear all the notifications ?","Permissions":"Permissions","Payment Summary":"Payment Summary","Order Status":"Order Status","Would you proceed ?":"Would you proceed ?","Would you like to create this instalment ?":"Would you like to create this instalment ?","Would you like to delete this instalment ?":"Would you like to delete this instalment ?","Would you like to update that instalment ?":"Would you like to update that instalment ?","Customer Account":"Customer Account","Payment":"Payment","No payment possible for paid order.":"No payment possible for paid order.","Payment History":"Payment History","Unable to proceed the form is not valid":"Unable to proceed the form is not valid","Please provide a valid value":"Please provide a valid value","Refund With Products":"Refund With Products","Refund Shipping":"Refund Shipping","Add Product":"Add Product","Damaged":"Damaged","Unspoiled":"Unspoiled","Summary":"Summary","Payment Gateway":"Payment Gateway","Screen":"Screen","Select the product to perform a refund.":"Select the product to perform a refund.","Please select a payment gateway before proceeding.":"Please select a payment gateway before proceeding.","There is nothing to refund.":"There is nothing to refund.","Please provide a valid payment amount.":"Please provide a valid payment amount.","The refund will be made on the current order.":"The refund will be made on the current order.","Please select a product before proceeding.":"Please select a product before proceeding.","Not enough quantity to proceed.":"Not enough quantity to proceed.","Would you like to delete this product ?":"Would you like to delete this product ?","Customers":"Customers","Order Type":"Order Type","Orders":"Orders","Cash Register":"Cash Register","Reset":"Reset","Cart":"Cart","Comments":"Comments","No products added...":"No products added...","Pay":"Pay","Void":"Void","Current Balance":"Current Balance","Full Payment":"Full Payment","The customer account can only be used once per order. Consider deleting the previously used payment.":"The customer account can only be used once per order. Consider deleting the previously used payment.","Not enough funds to add {amount} as a payment. Available balance {balance}.":"Not enough funds to add {amount} as a payment. Available balance {balance}.","Confirm Full Payment":"Confirm Full Payment","A full payment will be made using {paymentType} for {total}":"A full payment will be made using {paymentType} for {total}","You need to provide some products before proceeding.":"You need to provide some products before proceeding.","Unable to add the product, there is not enough stock. Remaining %s":"Unable to add the product, there is not enough stock. Remaining %s","Add Images":"Add Images","New Group":"New Group","Available Quantity":"Available Quantity","Would you like to delete this group ?":"Would you like to delete this group ?","Your Attention Is Required":"Your Attention Is Required","Please select at least one unit group before you proceed.":"Please select at least one unit group before you proceed.","Unable to proceed as one of the unit group field is invalid":"Unable to proceed as one of the unit group field is invalid","Would you like to delete this variation ?":"Would you like to delete this variation ?","Details":"Details","Unable to proceed, no product were provided.":"Unable to proceed, no product were provided.","Unable to proceed, one or more product has incorrect values.":"Unable to proceed, one or more product has incorrect values.","Unable to proceed, the procurement form is not valid.":"Unable to proceed, the procurement form is not valid.","Unable to submit, no valid submit URL were provided.":"Unable to submit, no valid submit URL were provided.","Options":"Options","The stock adjustment is about to be made. Would you like to confirm ?":"The stock adjustment is about to be made. Would you like to confirm ?","Would you like to remove this product from the table ?":"Would you like to remove this product from the table ?","Unable to proceed. Select a correct time range.":"Unable to proceed. Select a correct time range.","Unable to proceed. The current time range is not valid.":"Unable to proceed. The current time range is not valid.","Would you like to proceed ?":"Would you like to proceed ?","No rules has been provided.":"No rules has been provided.","No valid run were provided.":"No valid run were provided.","Unable to proceed, the form is invalid.":"Unable to proceed, the form is invalid.","Unable to proceed, no valid submit URL is defined.":"Unable to proceed, no valid submit URL is defined.","No title Provided":"No title Provided","Add Rule":"Add Rule","Save Settings":"Save Settings","Ok":"Ok","New Transaction":"New Transaction","Close":"Close","Would you like to delete this order":"Would you like to delete this order","The current order will be void. This action will be recorded. Consider providing a reason for this operation":"The current order will be void. This action will be recorded. Consider providing a reason for this operation","Order Options":"Order Options","Payments":"Payments","Refund & Return":"Refund & Return","Installments":"Installments","The form is not valid.":"The form is not valid.","Balance":"Balance","Input":"Input","Register History":"Register History","Close Register":"Close Register","Cash In":"Cash In","Cash Out":"Cash Out","Register Options":"Register Options","History":"History","Unable to open this register. Only closed register can be opened.":"Unable to open this register. Only closed register can be opened.","Open The Register":"Open The Register","Exit To Orders":"Exit To Orders","Looks like there is no registers. At least one register is required to proceed.":"Looks like there is no registers. At least one register is required to proceed.","Create Cash Register":"Create Cash Register","Yes":"Yes","No":"No","Use":"Use","No coupon available for this customer":"No coupon available for this customer","Select Customer":"Select Customer","No customer match your query...":"No customer match your query...","Customer Name":"Customer Name","Save Customer":"Save Customer","No Customer Selected":"No Customer Selected","In order to see a customer account, you need to select one customer.":"In order to see a customer account, you need to select one customer.","Summary For":"Summary For","Total Purchases":"Total Purchases","Last Purchases":"Last Purchases","Status":"Status","No orders...":"No orders...","Account Transaction":"Account Transaction","Product Discount":"Product Discount","Cart Discount":"Cart Discount","Hold Order":"Hold Order","The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.":"The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.","Confirm":"Confirm","Order Note":"Order Note","Note":"Note","More details about this order":"More details about this order","Display On Receipt":"Display On Receipt","Will display the note on the receipt":"Will display the note on the receipt","Open":"Open","Define The Order Type":"Define The Order Type","Payment List":"Payment List","List Of Payments":"List Of Payments","No Payment added.":"No Payment added.","Select Payment":"Select Payment","Submit Payment":"Submit Payment","Layaway":"Layaway","On Hold":"On Hold","Tendered":"Tendered","Nothing to display...":"Nothing to display...","Define Quantity":"Define Quantity","Please provide a quantity":"Please provide a quantity","Search Product":"Search Product","There is nothing to display. Have you started the search ?":"There is nothing to display. Have you started the search ?","Shipping & Billing":"Shipping & Billing","Tax & Summary":"Tax & Summary","Settings":"Settings","Select Tax":"Select Tax","Define the tax that apply to the sale.":"Define the tax that apply to the sale.","Define how the tax is computed":"Define how the tax is computed","Exclusive":"Exclusive","Inclusive":"Inclusive","Define when that specific product should expire.":"Define when that specific product should expire.","Renders the automatically generated barcode.":"Renders the automatically generated barcode.","Tax Type":"Tax Type","Adjust how tax is calculated on the item.":"Adjust how tax is calculated on the item.","Unable to proceed. The form is not valid.":"Unable to proceed. The form is not valid.","Units & Quantities":"Units & Quantities","Wholesale Price":"Wholesale Price","Select":"Select","Would you like to delete this ?":"Would you like to delete this ?","The account you have created for __%s__, require an activation. In order to proceed, please click on the following link":"The account you have created for __%s__, require an activation. In order to proceed, please click on the following link","Your password has been successfully updated on __%s__. You can now login with your new password.":"Your password has been successfully updated on __%s__. You can now login with your new password.","Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ":"Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ","Receipt — %s":"Receipt — %s","Unable to find a module having the identifier\/namespace \"%s\"":"Unable to find a module having the identifier\/namespace \"%s\"","What is the CRUD single resource name ? [Q] to quit.":"What is the CRUD single resource name ? [Q] to quit.","Which table name should be used ? [Q] to quit.":"Which table name should be used ? [Q] to quit.","If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.","Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.","Not enough parameters provided for the relation.":"Not enough parameters provided for the relation.","The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"":"The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"","The CRUD resource \"%s\" has been generated at %s":"The CRUD resource \"%s\" has been generated at %s","An unexpected error has occurred.":"An unexpected error has occurred.","Localization for %s extracted to %s":"Localization for %s extracted to %s","Unable to find the requested module.":"Unable to find the requested module.","Version":"Version","Path":"Path","Index":"Index","Entry Class":"Entry Class","Routes":"Routes","Api":"Api","Controllers":"Controllers","Views":"Views","Attribute":"Attribute","Namespace":"Namespace","Author":"Author","The product barcodes has been refreshed successfully.":"The product barcodes has been refreshed successfully.","What is the store name ? [Q] to quit.":"What is the store name ? [Q] to quit.","Please provide at least 6 characters for store name.":"Please provide at least 6 characters for store name.","What is the administrator password ? [Q] to quit.":"What is the administrator password ? [Q] to quit.","Please provide at least 6 characters for the administrator password.":"Please provide at least 6 characters for the administrator password.","What is the administrator email ? [Q] to quit.":"What is the administrator email ? [Q] to quit.","Please provide a valid email for the administrator.":"Please provide a valid email for the administrator.","What is the administrator username ? [Q] to quit.":"What is the administrator username ? [Q] to quit.","Please provide at least 5 characters for the administrator username.":"Please provide at least 5 characters for the administrator username.","Downloading latest dev build...":"Downloading latest dev build...","Reset project to HEAD...":"Reset project to HEAD...","Coupons List":"Coupons List","Display all coupons.":"Display all coupons.","No coupons has been registered":"No coupons has been registered","Add a new coupon":"Add a new coupon","Create a new coupon":"Create a new coupon","Register a new coupon and save it.":"Register a new coupon and save it.","Edit coupon":"Edit coupon","Modify Coupon.":"Modify Coupon.","Return to Coupons":"Return to Coupons","Might be used while printing the coupon.":"Might be used while printing the coupon.","Percentage Discount":"Percentage Discount","Flat Discount":"Flat Discount","Define which type of discount apply to the current coupon.":"Define which type of discount apply to the current coupon.","Discount Value":"Discount Value","Define the percentage or flat value.":"Define the percentage or flat value.","Valid Until":"Valid Until","Minimum Cart Value":"Minimum Cart Value","What is the minimum value of the cart to make this coupon eligible.":"What is the minimum value of the cart to make this coupon eligible.","Maximum Cart Value":"Maximum Cart Value","Valid Hours Start":"Valid Hours Start","Define form which hour during the day the coupons is valid.":"Define form which hour during the day the coupons is valid.","Valid Hours End":"Valid Hours End","Define to which hour during the day the coupons end stop valid.":"Define to which hour during the day the coupons end stop valid.","Limit Usage":"Limit Usage","Define how many time a coupons can be redeemed.":"Define how many time a coupons can be redeemed.","Select Products":"Select Products","The following products will be required to be present on the cart, in order for this coupon to be valid.":"The following products will be required to be present on the cart, in order for this coupon to be valid.","Select Categories":"Select Categories","The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.":"The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.","Created At":"Created At","Undefined":"Undefined","Delete a licence":"Delete a licence","Customer Coupons List":"Customer Coupons List","Display all customer coupons.":"Display all customer coupons.","No customer coupons has been registered":"No customer coupons has been registered","Add a new customer coupon":"Add a new customer coupon","Create a new customer coupon":"Create a new customer coupon","Register a new customer coupon and save it.":"Register a new customer coupon and save it.","Edit customer coupon":"Edit customer coupon","Modify Customer Coupon.":"Modify Customer Coupon.","Return to Customer Coupons":"Return to Customer Coupons","Id":"Id","Limit":"Limit","Created_at":"Created_at","Updated_at":"Updated_at","Code":"Code","Customers List":"Customers List","Display all customers.":"Display all customers.","No customers has been registered":"No customers has been registered","Add a new customer":"Add a new customer","Create a new customer":"Create a new customer","Register a new customer and save it.":"Register a new customer and save it.","Edit customer":"Edit customer","Modify Customer.":"Modify Customer.","Return to Customers":"Return to Customers","Provide a unique name for the customer.":"Provide a unique name for the customer.","Group":"Group","Assign the customer to a group":"Assign the customer to a group","Phone Number":"Phone Number","Provide the customer phone number":"Provide the customer phone number","PO Box":"PO Box","Provide the customer PO.Box":"Provide the customer PO.Box","Not Defined":"Not Defined","Male":"Male","Female":"Female","Gender":"Gender","Billing Address":"Billing Address","Billing phone number.":"Billing phone number.","Address 1":"Address 1","Billing First Address.":"Billing First Address.","Address 2":"Address 2","Billing Second Address.":"Billing Second Address.","Country":"Country","Billing Country.":"Billing Country.","Postal Address":"Postal Address","Company":"Company","Shipping Address":"Shipping Address","Shipping phone number.":"Shipping phone number.","Shipping First Address.":"Shipping First Address.","Shipping Second Address.":"Shipping Second Address.","Shipping Country.":"Shipping Country.","Account Credit":"Account Credit","Owed Amount":"Owed Amount","Purchase Amount":"Purchase Amount","Rewards":"Rewards","Delete a customers":"Delete a customers","Delete Selected Customers":"Delete Selected Customers","Customer Groups List":"Customer Groups List","Display all Customers Groups.":"Display all Customers Groups.","No Customers Groups has been registered":"No Customers Groups has been registered","Add a new Customers Group":"Add a new Customers Group","Create a new Customers Group":"Create a new Customers Group","Register a new Customers Group and save it.":"Register a new Customers Group and save it.","Edit Customers Group":"Edit Customers Group","Modify Customers group.":"Modify Customers group.","Return to Customers Groups":"Return to Customers Groups","Reward System":"Reward System","Select which Reward system applies to the group":"Select which Reward system applies to the group","Minimum Credit Amount":"Minimum Credit Amount","A brief description about what this group is about":"A brief description about what this group is about","Created On":"Created On","Customer Orders List":"Customer Orders List","Display all customer orders.":"Display all customer orders.","No customer orders has been registered":"No customer orders has been registered","Add a new customer order":"Add a new customer order","Create a new customer order":"Create a new customer order","Register a new customer order and save it.":"Register a new customer order and save it.","Edit customer order":"Edit customer order","Modify Customer Order.":"Modify Customer Order.","Return to Customer Orders":"Return to Customer Orders","Created at":"Created at","Customer Id":"Customer Id","Discount Percentage":"Discount Percentage","Discount Type":"Discount Type","Final Payment Date":"Final Payment Date","Process Status":"Process Status","Shipping Rate":"Shipping Rate","Shipping Type":"Shipping Type","Title":"Title","Total installments":"Total installments","Updated at":"Updated at","Uuid":"Uuid","Voidance Reason":"Voidance Reason","Customer Rewards List":"Customer Rewards List","Display all customer rewards.":"Display all customer rewards.","No customer rewards has been registered":"No customer rewards has been registered","Add a new customer reward":"Add a new customer reward","Create a new customer reward":"Create a new customer reward","Register a new customer reward and save it.":"Register a new customer reward and save it.","Edit customer reward":"Edit customer reward","Modify Customer Reward.":"Modify Customer Reward.","Return to Customer Rewards":"Return to Customer Rewards","Points":"Points","Target":"Target","Reward Name":"Reward Name","Last Update":"Last Update","Active":"Active","Users Group":"Users Group","None":"None","Recurring":"Recurring","Start of Month":"Start of Month","Mid of Month":"Mid of Month","End of Month":"End of Month","X days Before Month Ends":"X days Before Month Ends","X days After Month Starts":"X days After Month Starts","Occurrence":"Occurrence","Occurrence Value":"Occurrence Value","Must be used in case of X days after month starts and X days before month ends.":"Must be used in case of X days after month starts and X days before month ends.","Category":"Category","Month Starts":"Month Starts","Month Middle":"Month Middle","Month Ends":"Month Ends","X Days Before Month Ends":"X Days Before Month Ends","Updated At":"Updated At","Hold Orders List":"Hold Orders List","Display all hold orders.":"Display all hold orders.","No hold orders has been registered":"No hold orders has been registered","Add a new hold order":"Add a new hold order","Create a new hold order":"Create a new hold order","Register a new hold order and save it.":"Register a new hold order and save it.","Edit hold order":"Edit hold order","Modify Hold Order.":"Modify Hold Order.","Return to Hold Orders":"Return to Hold Orders","Orders List":"Orders List","Display all orders.":"Display all orders.","No orders has been registered":"No orders has been registered","Add a new order":"Add a new order","Create a new order":"Create a new order","Register a new order and save it.":"Register a new order and save it.","Edit order":"Edit order","Modify Order.":"Modify Order.","Return to Orders":"Return to Orders","Discount Rate":"Discount Rate","The order and the attached products has been deleted.":"The order and the attached products has been deleted.","Invoice":"Invoice","Receipt":"Receipt","Order Instalments List":"Order Instalments List","Display all Order Instalments.":"Display all Order Instalments.","No Order Instalment has been registered":"No Order Instalment has been registered","Add a new Order Instalment":"Add a new Order Instalment","Create a new Order Instalment":"Create a new Order Instalment","Register a new Order Instalment and save it.":"Register a new Order Instalment and save it.","Edit Order Instalment":"Edit Order Instalment","Modify Order Instalment.":"Modify Order Instalment.","Return to Order Instalment":"Return to Order Instalment","Order Id":"Order Id","Payment Types List":"Payment Types List","Display all payment types.":"Display all payment types.","No payment types has been registered":"No payment types has been registered","Add a new payment type":"Add a new payment type","Create a new payment type":"Create a new payment type","Register a new payment type and save it.":"Register a new payment type and save it.","Edit payment type":"Edit payment type","Modify Payment Type.":"Modify Payment Type.","Return to Payment Types":"Return to Payment Types","Label":"Label","Provide a label to the resource.":"Provide a label to the resource.","Identifier":"Identifier","A payment type having the same identifier already exists.":"A payment type having the same identifier already exists.","Unable to delete a read-only payments type.":"Unable to delete a read-only payments type.","Readonly":"Readonly","Procurements List":"Procurements List","Display all procurements.":"Display all procurements.","No procurements has been registered":"No procurements has been registered","Add a new procurement":"Add a new procurement","Create a new procurement":"Create a new procurement","Register a new procurement and save it.":"Register a new procurement and save it.","Edit procurement":"Edit procurement","Modify Procurement.":"Modify Procurement.","Return to Procurements":"Return to Procurements","Provider Id":"Provider Id","Total Items":"Total Items","Provider":"Provider","Stocked":"Stocked","Procurement Products List":"Procurement Products List","Display all procurement products.":"Display all procurement products.","No procurement products has been registered":"No procurement products has been registered","Add a new procurement product":"Add a new procurement product","Create a new procurement product":"Create a new procurement product","Register a new procurement product and save it.":"Register a new procurement product and save it.","Edit procurement product":"Edit procurement product","Modify Procurement Product.":"Modify Procurement Product.","Return to Procurement Products":"Return to Procurement Products","Define what is the expiration date of the product.":"Define what is the expiration date of the product.","On":"On","Category Products List":"Category Products List","Display all category products.":"Display all category products.","No category products has been registered":"No category products has been registered","Add a new category product":"Add a new category product","Create a new category product":"Create a new category product","Register a new category product and save it.":"Register a new category product and save it.","Edit category product":"Edit category product","Modify Category Product.":"Modify Category Product.","Return to Category Products":"Return to Category Products","No Parent":"No Parent","Preview":"Preview","Provide a preview url to the category.":"Provide a preview url to the category.","Displays On POS":"Displays On POS","Parent":"Parent","If this category should be a child category of an existing category":"If this category should be a child category of an existing category","Total Products":"Total Products","Products List":"Products List","Display all products.":"Display all products.","No products has been registered":"No products has been registered","Add a new product":"Add a new product","Create a new product":"Create a new product","Register a new product and save it.":"Register a new product and save it.","Edit product":"Edit product","Modify Product.":"Modify Product.","Return to Products":"Return to Products","Assigned Unit":"Assigned Unit","The assigned unit for sale":"The assigned unit for sale","Define the regular selling price.":"Define the regular selling price.","Define the wholesale price.":"Define the wholesale price.","Preview Url":"Preview Url","Provide the preview of the current unit.":"Provide the preview of the current unit.","Identification":"Identification","Define the barcode value. Focus the cursor here before scanning the product.":"Define the barcode value. Focus the cursor here before scanning the product.","Define the barcode type scanned.":"Define the barcode type scanned.","EAN 8":"EAN 8","EAN 13":"EAN 13","Barcode Type":"Barcode Type","Select to which category the item is assigned.":"Select to which category the item is assigned.","Materialized Product":"Materialized Product","Dematerialized Product":"Dematerialized Product","Define the product type. Applies to all variations.":"Define the product type. Applies to all variations.","Product Type":"Product Type","Define a unique SKU value for the product.":"Define a unique SKU value for the product.","On Sale":"On Sale","Hidden":"Hidden","Define whether the product is available for sale.":"Define whether the product is available for sale.","Enable the stock management on the product. Will not work for service or uncountable products.":"Enable the stock management on the product. Will not work for service or uncountable products.","Stock Management Enabled":"Stock Management Enabled","Units":"Units","Accurate Tracking":"Accurate Tracking","What unit group applies to the actual item. This group will apply during the procurement.":"What unit group applies to the actual item. This group will apply during the procurement.","Unit Group":"Unit Group","Determine the unit for sale.":"Determine the unit for sale.","Selling Unit":"Selling Unit","Expiry":"Expiry","Product Expires":"Product Expires","Set to \"No\" expiration time will be ignored.":"Set to \"No\" expiration time will be ignored.","Prevent Sales":"Prevent Sales","Allow Sales":"Allow Sales","Determine the action taken while a product has expired.":"Determine the action taken while a product has expired.","On Expiration":"On Expiration","Select the tax group that applies to the product\/variation.":"Select the tax group that applies to the product\/variation.","Tax Group":"Tax Group","Define what is the type of the tax.":"Define what is the type of the tax.","Images":"Images","Image":"Image","Choose an image to add on the product gallery":"Choose an image to add on the product gallery","Is Primary":"Is Primary","Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.":"Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.","Sku":"Sku","Materialized":"Materialized","Dematerialized":"Dematerialized","Available":"Available","See Quantities":"See Quantities","See History":"See History","Would you like to delete selected entries ?":"Would you like to delete selected entries ?","Product Histories":"Product Histories","Display all product histories.":"Display all product histories.","No product histories has been registered":"No product histories has been registered","Add a new product history":"Add a new product history","Create a new product history":"Create a new product history","Register a new product history and save it.":"Register a new product history and save it.","Edit product history":"Edit product history","Modify Product History.":"Modify Product History.","Return to Product Histories":"Return to Product Histories","After Quantity":"After Quantity","Before Quantity":"Before Quantity","Operation Type":"Operation Type","Order id":"Order id","Procurement Id":"Procurement Id","Procurement Product Id":"Procurement Product Id","Product Id":"Product Id","Unit Id":"Unit Id","P. Quantity":"P. Quantity","N. Quantity":"N. Quantity","Defective":"Defective","Deleted":"Deleted","Removed":"Removed","Returned":"Returned","Sold":"Sold","Added":"Added","Incoming Transfer":"Incoming Transfer","Outgoing Transfer":"Outgoing Transfer","Transfer Rejected":"Transfer Rejected","Transfer Canceled":"Transfer Canceled","Void Return":"Void Return","Adjustment Return":"Adjustment Return","Adjustment Sale":"Adjustment Sale","Product Unit Quantities List":"Product Unit Quantities List","Display all product unit quantities.":"Display all product unit quantities.","No product unit quantities has been registered":"No product unit quantities has been registered","Add a new product unit quantity":"Add a new product unit quantity","Create a new product unit quantity":"Create a new product unit quantity","Register a new product unit quantity and save it.":"Register a new product unit quantity and save it.","Edit product unit quantity":"Edit product unit quantity","Modify Product Unit Quantity.":"Modify Product Unit Quantity.","Return to Product Unit Quantities":"Return to Product Unit Quantities","Product id":"Product id","Providers List":"Providers List","Display all providers.":"Display all providers.","No providers has been registered":"No providers has been registered","Add a new provider":"Add a new provider","Create a new provider":"Create a new provider","Register a new provider and save it.":"Register a new provider and save it.","Edit provider":"Edit provider","Modify Provider.":"Modify Provider.","Return to Providers":"Return to Providers","Provide the provider email. Might be used to send automated email.":"Provide the provider email. Might be used to send automated email.","Contact phone number for the provider. Might be used to send automated SMS notifications.":"Contact phone number for the provider. Might be used to send automated SMS notifications.","First address of the provider.":"First address of the provider.","Second address of the provider.":"Second address of the provider.","Further details about the provider":"Further details about the provider","Amount Due":"Amount Due","Amount Paid":"Amount Paid","See Procurements":"See Procurements","Registers List":"Registers List","Display all registers.":"Display all registers.","No registers has been registered":"No registers has been registered","Add a new register":"Add a new register","Create a new register":"Create a new register","Register a new register and save it.":"Register a new register and save it.","Edit register":"Edit register","Modify Register.":"Modify Register.","Return to Registers":"Return to Registers","Closed":"Closed","Define what is the status of the register.":"Define what is the status of the register.","Provide mode details about this cash register.":"Provide mode details about this cash register.","Unable to delete a register that is currently in use":"Unable to delete a register that is currently in use","Used By":"Used By","Register History List":"Register History List","Display all register histories.":"Display all register histories.","No register histories has been registered":"No register histories has been registered","Add a new register history":"Add a new register history","Create a new register history":"Create a new register history","Register a new register history and save it.":"Register a new register history and save it.","Edit register history":"Edit register history","Modify Registerhistory.":"Modify Registerhistory.","Return to Register History":"Return to Register History","Register Id":"Register Id","Action":"Action","Register Name":"Register Name","Done At":"Done At","Reward Systems List":"Reward Systems List","Display all reward systems.":"Display all reward systems.","No reward systems has been registered":"No reward systems has been registered","Add a new reward system":"Add a new reward system","Create a new reward system":"Create a new reward system","Register a new reward system and save it.":"Register a new reward system and save it.","Edit reward system":"Edit reward system","Modify Reward System.":"Modify Reward System.","Return to Reward Systems":"Return to Reward Systems","From":"From","The interval start here.":"The interval start here.","To":"To","The interval ends here.":"The interval ends here.","Points earned.":"Points earned.","Coupon":"Coupon","Decide which coupon you would apply to the system.":"Decide which coupon you would apply to the system.","This is the objective that the user should reach to trigger the reward.":"This is the objective that the user should reach to trigger the reward.","A short description about this system":"A short description about this system","Would you like to delete this reward system ?":"Would you like to delete this reward system ?","Delete Selected Rewards":"Delete Selected Rewards","Would you like to delete selected rewards?":"Would you like to delete selected rewards?","Roles List":"Roles List","Display all roles.":"Display all roles.","No role has been registered.":"No role has been registered.","Add a new role":"Add a new role","Create a new role":"Create a new role","Create a new role and save it.":"Create a new role and save it.","Edit role":"Edit role","Modify Role.":"Modify Role.","Return to Roles":"Return to Roles","Provide a name to the role.":"Provide a name to the role.","Should be a unique value with no spaces or special character":"Should be a unique value with no spaces or special character","Provide more details about what this role is about.":"Provide more details about what this role is about.","Unable to delete a system role.":"Unable to delete a system role.","You do not have enough permissions to perform this action.":"You do not have enough permissions to perform this action.","Taxes List":"Taxes List","Display all taxes.":"Display all taxes.","No taxes has been registered":"No taxes has been registered","Add a new tax":"Add a new tax","Create a new tax":"Create a new tax","Register a new tax and save it.":"Register a new tax and save it.","Edit tax":"Edit tax","Modify Tax.":"Modify Tax.","Return to Taxes":"Return to Taxes","Provide a name to the tax.":"Provide a name to the tax.","Assign the tax to a tax group.":"Assign the tax to a tax group.","Rate":"Rate","Define the rate value for the tax.":"Define the rate value for the tax.","Provide a description to the tax.":"Provide a description to the tax.","Taxes Groups List":"Taxes Groups List","Display all taxes groups.":"Display all taxes groups.","No taxes groups has been registered":"No taxes groups has been registered","Add a new tax group":"Add a new tax group","Create a new tax group":"Create a new tax group","Register a new tax group and save it.":"Register a new tax group and save it.","Edit tax group":"Edit tax group","Modify Tax Group.":"Modify Tax Group.","Return to Taxes Groups":"Return to Taxes Groups","Provide a short description to the tax group.":"Provide a short description to the tax group.","Units List":"Units List","Display all units.":"Display all units.","No units has been registered":"No units has been registered","Add a new unit":"Add a new unit","Create a new unit":"Create a new unit","Register a new unit and save it.":"Register a new unit and save it.","Edit unit":"Edit unit","Modify Unit.":"Modify Unit.","Return to Units":"Return to Units","Preview URL":"Preview URL","Preview of the unit.":"Preview of the unit.","Define the value of the unit.":"Define the value of the unit.","Define to which group the unit should be assigned.":"Define to which group the unit should be assigned.","Base Unit":"Base Unit","Determine if the unit is the base unit from the group.":"Determine if the unit is the base unit from the group.","Provide a short description about the unit.":"Provide a short description about the unit.","Unit Groups List":"Unit Groups List","Display all unit groups.":"Display all unit groups.","No unit groups has been registered":"No unit groups has been registered","Add a new unit group":"Add a new unit group","Create a new unit group":"Create a new unit group","Register a new unit group and save it.":"Register a new unit group and save it.","Edit unit group":"Edit unit group","Modify Unit Group.":"Modify Unit Group.","Return to Unit Groups":"Return to Unit Groups","Users List":"Users List","Display all users.":"Display all users.","No users has been registered":"No users has been registered","Add a new user":"Add a new user","Create a new user":"Create a new user","Register a new user and save it.":"Register a new user and save it.","Edit user":"Edit user","Modify User.":"Modify User.","Return to Users":"Return to Users","Username":"Username","Will be used for various purposes such as email recovery.":"Will be used for various purposes such as email recovery.","Password":"Password","Make a unique and secure password.":"Make a unique and secure password.","Confirm Password":"Confirm Password","Should be the same as the password.":"Should be the same as the password.","Define whether the user can use the application.":"Define whether the user can use the application.","The action you tried to perform is not allowed.":"The action you tried to perform is not allowed.","Not Enough Permissions":"Not Enough Permissions","The resource of the page you tried to access is not available or might have been deleted.":"The resource of the page you tried to access is not available or might have been deleted.","Not Found Exception":"Not Found Exception","Provide your username.":"Provide your username.","Provide your password.":"Provide your password.","Provide your email.":"Provide your email.","Password Confirm":"Password Confirm","define the amount of the transaction.":"define the amount of the transaction.","Further observation while proceeding.":"Further observation while proceeding.","determine what is the transaction type.":"determine what is the transaction type.","Add":"Add","Deduct":"Deduct","Determine the amount of the transaction.":"Determine the amount of the transaction.","Further details about the transaction.":"Further details about the transaction.","Define the installments for the current order.":"Define the installments for the current order.","New Password":"New Password","define your new password.":"define your new password.","confirm your new password.":"confirm your new password.","choose the payment type.":"choose the payment type.","Provide the procurement name.":"Provide the procurement name.","Describe the procurement.":"Describe the procurement.","Define the provider.":"Define the provider.","Define what is the unit price of the product.":"Define what is the unit price of the product.","Condition":"Condition","Determine in which condition the product is returned.":"Determine in which condition the product is returned.","Other Observations":"Other Observations","Describe in details the condition of the returned product.":"Describe in details the condition of the returned product.","Unit Group Name":"Unit Group Name","Provide a unit name to the unit.":"Provide a unit name to the unit.","Describe the current unit.":"Describe the current unit.","assign the current unit to a group.":"assign the current unit to a group.","define the unit value.":"define the unit value.","Provide a unit name to the units group.":"Provide a unit name to the units group.","Describe the current unit group.":"Describe the current unit group.","POS":"POS","Open POS":"Open POS","Create Register":"Create Register","Use Customer Billing":"Use Customer Billing","Define whether the customer billing information should be used.":"Define whether the customer billing information should be used.","General Shipping":"General Shipping","Define how the shipping is calculated.":"Define how the shipping is calculated.","Shipping Fees":"Shipping Fees","Define shipping fees.":"Define shipping fees.","Use Customer Shipping":"Use Customer Shipping","Define whether the customer shipping information should be used.":"Define whether the customer shipping information should be used.","Invoice Number":"Invoice Number","If the procurement has been issued outside of NexoPOS, please provide a unique reference.":"If the procurement has been issued outside of NexoPOS, please provide a unique reference.","Delivery Time":"Delivery Time","If the procurement has to be delivered at a specific time, define the moment here.":"If the procurement has to be delivered at a specific time, define the moment here.","Automatic Approval":"Automatic Approval","Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.":"Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.","Determine what is the actual payment status of the procurement.":"Determine what is the actual payment status of the procurement.","Determine what is the actual provider of the current procurement.":"Determine what is the actual provider of the current procurement.","Provide a name that will help to identify the procurement.":"Provide a name that will help to identify the procurement.","First Name":"First Name","Avatar":"Avatar","Define the image that should be used as an avatar.":"Define the image that should be used as an avatar.","Language":"Language","Choose the language for the current account.":"Choose the language for the current account.","Security":"Security","Old Password":"Old Password","Provide the old password.":"Provide the old password.","Change your password with a better stronger password.":"Change your password with a better stronger password.","Password Confirmation":"Password Confirmation","The profile has been successfully saved.":"The profile has been successfully saved.","The user attribute has been saved.":"The user attribute has been saved.","The options has been successfully updated.":"The options has been successfully updated.","Wrong password provided":"Wrong password provided","Wrong old password provided":"Wrong old password provided","Password Successfully updated.":"Password Successfully updated.","Sign In — NexoPOS":"Sign In — NexoPOS","Sign Up — NexoPOS":"Sign Up — NexoPOS","Password Lost":"Password Lost","Unable to proceed as the token provided is invalid.":"Unable to proceed as the token provided is invalid.","The token has expired. Please request a new activation token.":"The token has expired. Please request a new activation token.","Set New Password":"Set New Password","Database Update":"Database Update","This account is disabled.":"This account is disabled.","Unable to find record having that username.":"Unable to find record having that username.","Unable to find record having that password.":"Unable to find record having that password.","Invalid username or password.":"Invalid username or password.","Unable to login, the provided account is not active.":"Unable to login, the provided account is not active.","You have been successfully connected.":"You have been successfully connected.","The recovery email has been send to your inbox.":"The recovery email has been send to your inbox.","Unable to find a record matching your entry.":"Unable to find a record matching your entry.","Your Account has been created but requires email validation.":"Your Account has been created but requires email validation.","Unable to find the requested user.":"Unable to find the requested user.","Unable to proceed, the provided token is not valid.":"Unable to proceed, the provided token is not valid.","Unable to proceed, the token has expired.":"Unable to proceed, the token has expired.","Your password has been updated.":"Your password has been updated.","Unable to edit a register that is currently in use":"Unable to edit a register that is currently in use","No register has been opened by the logged user.":"No register has been opened by the logged user.","The register is opened.":"The register is opened.","Closing":"Closing","Opening":"Opening","Sale":"Sale","Refund":"Refund","Unable to find the category using the provided identifier":"Unable to find the category using the provided identifier","The category has been deleted.":"The category has been deleted.","Unable to find the category using the provided identifier.":"Unable to find the category using the provided identifier.","Unable to find the attached category parent":"Unable to find the attached category parent","The category has been correctly saved":"The category has been correctly saved","The category has been updated":"The category has been updated","The entry has been successfully deleted.":"The entry has been successfully deleted.","A new entry has been successfully created.":"A new entry has been successfully created.","Unhandled crud resource":"Unhandled crud resource","You need to select at least one item to delete":"You need to select at least one item to delete","You need to define which action to perform":"You need to define which action to perform","Unable to proceed. No matching CRUD resource has been found.":"Unable to proceed. No matching CRUD resource has been found.","Create Coupon":"Create Coupon","helps you creating a coupon.":"helps you creating a coupon.","Edit Coupon":"Edit Coupon","Editing an existing coupon.":"Editing an existing coupon.","Invalid Request.":"Invalid Request.","Unable to delete a group to which customers are still assigned.":"Unable to delete a group to which customers are still assigned.","The customer group has been deleted.":"The customer group has been deleted.","Unable to find the requested group.":"Unable to find the requested group.","The customer group has been successfully created.":"The customer group has been successfully created.","The customer group has been successfully saved.":"The customer group has been successfully saved.","Unable to transfer customers to the same account.":"Unable to transfer customers to the same account.","The categories has been transferred to the group %s.":"The categories has been transferred to the group %s.","No customer identifier has been provided to proceed to the transfer.":"No customer identifier has been provided to proceed to the transfer.","Unable to find the requested group using the provided id.":"Unable to find the requested group using the provided id.","\"%s\" is not an instance of \"FieldsService\"":"\"%s\" is not an instance of \"FieldsService\"","Manage Medias":"Manage Medias","The operation was successful.":"The operation was successful.","Modules List":"Modules List","List all available modules.":"List all available modules.","Upload A Module":"Upload A Module","Extends NexoPOS features with some new modules.":"Extends NexoPOS features with some new modules.","The notification has been successfully deleted":"The notification has been successfully deleted","All the notifications have been cleared.":"All the notifications have been cleared.","Order Invoice — %s":"Order Invoice — %s","Order Receipt — %s":"Order Receipt — %s","The printing event has been successfully dispatched.":"The printing event has been successfully dispatched.","There is a mismatch between the provided order and the order attached to the instalment.":"There is a mismatch between the provided order and the order attached to the instalment.","Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.":"Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.","New Procurement":"New Procurement","Edit Procurement":"Edit Procurement","Perform adjustment on existing procurement.":"Perform adjustment on existing procurement.","%s - Invoice":"%s - Invoice","list of product procured.":"list of product procured.","The product price has been refreshed.":"The product price has been refreshed.","The single variation has been deleted.":"The single variation has been deleted.","Edit a product":"Edit a product","Makes modifications to a product":"Makes modifications to a product","Create a product":"Create a product","Add a new product on the system":"Add a new product on the system","Stock Adjustment":"Stock Adjustment","Adjust stock of existing products.":"Adjust stock of existing products.","Lost":"Lost","No stock is provided for the requested product.":"No stock is provided for the requested product.","The product unit quantity has been deleted.":"The product unit quantity has been deleted.","Unable to proceed as the request is not valid.":"Unable to proceed as the request is not valid.","Unsupported action for the product %s.":"Unsupported action for the product %s.","The stock has been adjustment successfully.":"The stock has been adjustment successfully.","Unable to add the product to the cart as it has expired.":"Unable to add the product to the cart as it has expired.","Unable to add a product that has accurate tracking enabled, using an ordinary barcode.":"Unable to add a product that has accurate tracking enabled, using an ordinary barcode.","There is no products matching the current request.":"There is no products matching the current request.","Print Labels":"Print Labels","Customize and print products labels.":"Customize and print products labels.","Sales Report":"Sales Report","Provides an overview over the sales during a specific period":"Provides an overview over the sales during a specific period","Sold Stock":"Sold Stock","Provides an overview over the sold stock during a specific period.":"Provides an overview over the sold stock during a specific period.","Profit Report":"Profit Report","Provides an overview of the provide of the products sold.":"Provides an overview of the provide of the products sold.","Provides an overview on the activity for a specific period.":"Provides an overview on the activity for a specific period.","Annual Report":"Annual Report","Invalid authorization code provided.":"Invalid authorization code provided.","The database has been successfully seeded.":"The database has been successfully seeded.","Settings Page Not Found":"Settings Page Not Found","Customers Settings":"Customers Settings","Configure the customers settings of the application.":"Configure the customers settings of the application.","General Settings":"General Settings","Configure the general settings of the application.":"Configure the general settings of the application.","Orders Settings":"Orders Settings","POS Settings":"POS Settings","Configure the pos settings.":"Configure the pos settings.","Workers Settings":"Workers Settings","%s is not an instance of \"%s\".":"%s is not an instance of \"%s\".","Unable to find the requested product tax using the provided id":"Unable to find the requested product tax using the provided id","Unable to find the requested product tax using the provided identifier.":"Unable to find the requested product tax using the provided identifier.","The product tax has been created.":"The product tax has been created.","The product tax has been updated":"The product tax has been updated","Unable to retrieve the requested tax group using the provided identifier \"%s\".":"Unable to retrieve the requested tax group using the provided identifier \"%s\".","Permission Manager":"Permission Manager","Manage all permissions and roles":"Manage all permissions and roles","My Profile":"My Profile","Change your personal settings":"Change your personal settings","The permissions has been updated.":"The permissions has been updated.","Sunday":"Sunday","Monday":"Monday","Tuesday":"Tuesday","Wednesday":"Wednesday","Thursday":"Thursday","Friday":"Friday","Saturday":"Saturday","The migration has successfully run.":"The migration has successfully run.","Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.":"Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.","Unable to register. The registration is closed.":"Unable to register. The registration is closed.","Hold Order Cleared":"Hold Order Cleared","[NexoPOS] Activate Your Account":"[NexoPOS] Activate Your Account","[NexoPOS] A New User Has Registered":"[NexoPOS] A New User Has Registered","[NexoPOS] Your Account Has Been Created":"[NexoPOS] Your Account Has Been Created","Unable to find the permission with the namespace \"%s\".":"Unable to find the permission with the namespace \"%s\".","Voided":"Voided","Refunded":"Refunded","Partially Refunded":"Partially Refunded","The register has been successfully opened":"The register has been successfully opened","The register has been successfully closed":"The register has been successfully closed","The provided amount is not allowed. The amount should be greater than \"0\". ":"The provided amount is not allowed. The amount should be greater than \"0\". ","The cash has successfully been stored":"The cash has successfully been stored","Not enough fund to cash out.":"Not enough fund to cash out.","The cash has successfully been disbursed.":"The cash has successfully been disbursed.","In Use":"In Use","Opened":"Opened","Delete Selected entries":"Delete Selected entries","%s entries has been deleted":"%s entries has been deleted","%s entries has not been deleted":"%s entries has not been deleted","Unable to find the customer using the provided id.":"Unable to find the customer using the provided id.","The customer has been deleted.":"The customer has been deleted.","The customer has been created.":"The customer has been created.","Unable to find the customer using the provided ID.":"Unable to find the customer using the provided ID.","The customer has been edited.":"The customer has been edited.","Unable to find the customer using the provided email.":"Unable to find the customer using the provided email.","The customer account has been updated.":"The customer account has been updated.","Issuing Coupon Failed":"Issuing Coupon Failed","Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.":"Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.","Unable to find a coupon with the provided code.":"Unable to find a coupon with the provided code.","The coupon has been updated.":"The coupon has been updated.","The group has been created.":"The group has been created.","The media has been deleted":"The media has been deleted","Unable to find the media.":"Unable to find the media.","Unable to find the requested file.":"Unable to find the requested file.","Unable to find the media entry":"Unable to find the media entry","Payment Types":"Payment Types","Medias":"Medias","List":"List","Customers Groups":"Customers Groups","Create Group":"Create Group","Reward Systems":"Reward Systems","Create Reward":"Create Reward","List Coupons":"List Coupons","Providers":"Providers","Create A Provider":"Create A Provider","Inventory":"Inventory","Create Product":"Create Product","Create Category":"Create Category","Create Unit":"Create Unit","Unit Groups":"Unit Groups","Create Unit Groups":"Create Unit Groups","Taxes Groups":"Taxes Groups","Create Tax Groups":"Create Tax Groups","Create Tax":"Create Tax","Modules":"Modules","Upload Module":"Upload Module","Users":"Users","Create User":"Create User","Roles":"Roles","Create Roles":"Create Roles","Permissions Manager":"Permissions Manager","Procurements":"Procurements","Reports":"Reports","Sale Report":"Sale Report","Incomes & Loosses":"Incomes & Loosses","Invoice Settings":"Invoice Settings","Workers":"Workers","Unable to locate the requested module.":"Unable to locate the requested module.","The module \"%s\" has been disabled as the dependency \"%s\" is missing. ":"The module \"%s\" has been disabled as the dependency \"%s\" is missing. ","The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ":"The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ","Unable to detect the folder from where to perform the installation.":"Unable to detect the folder from where to perform the installation.","The uploaded file is not a valid module.":"The uploaded file is not a valid module.","The module has been successfully installed.":"The module has been successfully installed.","The migration run successfully.":"The migration run successfully.","The module has correctly been enabled.":"The module has correctly been enabled.","Unable to enable the module.":"Unable to enable the module.","The Module has been disabled.":"The Module has been disabled.","Unable to disable the module.":"Unable to disable the module.","Unable to proceed, the modules management is disabled.":"Unable to proceed, the modules management is disabled.","Missing required parameters to create a notification":"Missing required parameters to create a notification","The order has been placed.":"The order has been placed.","The percentage discount provided is not valid.":"The percentage discount provided is not valid.","A discount cannot exceed the sub total value of an order.":"A discount cannot exceed the sub total value of an order.","No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.":"No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.","The payment has been saved.":"The payment has been saved.","Unable to edit an order that is completely paid.":"Unable to edit an order that is completely paid.","Unable to proceed as one of the previous submitted payment is missing from the order.":"Unable to proceed as one of the previous submitted payment is missing from the order.","The order payment status cannot switch to hold as a payment has already been made on that order.":"The order payment status cannot switch to hold as a payment has already been made on that order.","Unable to proceed. One of the submitted payment type is not supported.":"Unable to proceed. One of the submitted payment type is not supported.","Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.":"Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.","Unable to find the customer using the provided ID. The order creation has failed.":"Unable to find the customer using the provided ID. The order creation has failed.","Unable to proceed a refund on an unpaid order.":"Unable to proceed a refund on an unpaid order.","The current credit has been issued from a refund.":"The current credit has been issued from a refund.","The order has been successfully refunded.":"The order has been successfully refunded.","unable to proceed to a refund as the provided status is not supported.":"unable to proceed to a refund as the provided status is not supported.","The product %s has been successfully refunded.":"The product %s has been successfully refunded.","Unable to find the order product using the provided id.":"Unable to find the order product using the provided id.","Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier":"Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier","Unable to fetch the order as the provided pivot argument is not supported.":"Unable to fetch the order as the provided pivot argument is not supported.","The product has been added to the order \"%s\"":"The product has been added to the order \"%s\"","the order has been successfully computed.":"the order has been successfully computed.","The order has been deleted.":"The order has been deleted.","The product has been successfully deleted from the order.":"The product has been successfully deleted from the order.","Unable to find the requested product on the provider order.":"Unable to find the requested product on the provider order.","Unpaid Orders Turned Due":"Unpaid Orders Turned Due","No orders to handle for the moment.":"No orders to handle for the moment.","The order has been correctly voided.":"The order has been correctly voided.","Unable to edit an already paid instalment.":"Unable to edit an already paid instalment.","The instalment has been saved.":"The instalment has been saved.","The instalment has been deleted.":"The instalment has been deleted.","The defined amount is not valid.":"The defined amount is not valid.","No further instalments is allowed for this order. The total instalment already covers the order total.":"No further instalments is allowed for this order. The total instalment already covers the order total.","The instalment has been created.":"The instalment has been created.","The provided status is not supported.":"The provided status is not supported.","The order has been successfully updated.":"The order has been successfully updated.","Unable to find the requested procurement using the provided identifier.":"Unable to find the requested procurement using the provided identifier.","Unable to find the assigned provider.":"Unable to find the assigned provider.","The procurement has been created.":"The procurement has been created.","Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.":"Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.","The provider has been edited.":"The provider has been edited.","Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"":"Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"","The operation has completed.":"The operation has completed.","The procurement has been refreshed.":"The procurement has been refreshed.","The procurement has been reset.":"The procurement has been reset.","The procurement products has been deleted.":"The procurement products has been deleted.","The procurement product has been updated.":"The procurement product has been updated.","Unable to find the procurement product using the provided id.":"Unable to find the procurement product using the provided id.","The product %s has been deleted from the procurement %s":"The product %s has been deleted from the procurement %s","The product with the following ID \"%s\" is not initially included on the procurement":"The product with the following ID \"%s\" is not initially included on the procurement","The procurement products has been updated.":"The procurement products has been updated.","Procurement Automatically Stocked":"Procurement Automatically Stocked","Draft":"Draft","The category has been created":"The category has been created","Unable to find the product using the provided id.":"Unable to find the product using the provided id.","Unable to find the requested product using the provided SKU.":"Unable to find the requested product using the provided SKU.","The variable product has been created.":"The variable product has been created.","The provided barcode \"%s\" is already in use.":"The provided barcode \"%s\" is already in use.","The provided SKU \"%s\" is already in use.":"The provided SKU \"%s\" is already in use.","The product has been saved.":"The product has been saved.","The provided barcode is already in use.":"The provided barcode is already in use.","The provided SKU is already in use.":"The provided SKU is already in use.","The product has been updated":"The product has been updated","The variable product has been updated.":"The variable product has been updated.","The product variations has been reset":"The product variations has been reset","The product has been reset.":"The product has been reset.","The product \"%s\" has been successfully deleted":"The product \"%s\" has been successfully deleted","Unable to find the requested variation using the provided ID.":"Unable to find the requested variation using the provided ID.","The product stock has been updated.":"The product stock has been updated.","The action is not an allowed operation.":"The action is not an allowed operation.","The product quantity has been updated.":"The product quantity has been updated.","There is no variations to delete.":"There is no variations to delete.","There is no products to delete.":"There is no products to delete.","The product variation has been successfully created.":"The product variation has been successfully created.","The product variation has been updated.":"The product variation has been updated.","The provider has been created.":"The provider has been created.","The provider has been updated.":"The provider has been updated.","Unable to find the provider using the specified id.":"Unable to find the provider using the specified id.","The provider has been deleted.":"The provider has been deleted.","Unable to find the provider using the specified identifier.":"Unable to find the provider using the specified identifier.","The provider account has been updated.":"The provider account has been updated.","The procurement payment has been deducted.":"The procurement payment has been deducted.","The dashboard report has been updated.":"The dashboard report has been updated.","Untracked Stock Operation":"Untracked Stock Operation","Unsupported action":"Unsupported action","The expense has been correctly saved.":"The expense has been correctly saved.","The table has been truncated.":"The table has been truncated.","Untitled Settings Page":"Untitled Settings Page","No description provided for this settings page.":"No description provided for this settings page.","The form has been successfully saved.":"The form has been successfully saved.","Unable to reach the host":"Unable to reach the host","Unable to connect to the database using the credentials provided.":"Unable to connect to the database using the credentials provided.","Unable to select the database.":"Unable to select the database.","Access denied for this user.":"Access denied for this user.","The connexion with the database was successful":"The connexion with the database was successful","Cash":"Cash","Bank Payment":"Bank Payment","NexoPOS has been successfully installed.":"NexoPOS has been successfully installed.","A tax cannot be his own parent.":"A tax cannot be his own parent.","The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".":"The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".","Unable to find the requested tax using the provided identifier.":"Unable to find the requested tax using the provided identifier.","The tax group has been correctly saved.":"The tax group has been correctly saved.","The tax has been correctly created.":"The tax has been correctly created.","The tax has been successfully deleted.":"The tax has been successfully deleted.","The Unit Group has been created.":"The Unit Group has been created.","The unit group %s has been updated.":"The unit group %s has been updated.","Unable to find the unit group to which this unit is attached.":"Unable to find the unit group to which this unit is attached.","The unit has been saved.":"The unit has been saved.","Unable to find the Unit using the provided id.":"Unable to find the Unit using the provided id.","The unit has been updated.":"The unit has been updated.","The unit group %s has more than one base unit":"The unit group %s has more than one base unit","The unit has been deleted.":"The unit has been deleted.","unable to find this validation class %s.":"unable to find this validation class %s.","Enable Reward":"Enable Reward","Will activate the reward system for the customers.":"Will activate the reward system for the customers.","Default Customer Account":"Default Customer Account","Default Customer Group":"Default Customer Group","Select to which group each new created customers are assigned to.":"Select to which group each new created customers are assigned to.","Enable Credit & Account":"Enable Credit & Account","The customers will be able to make deposit or obtain credit.":"The customers will be able to make deposit or obtain credit.","Store Name":"Store Name","This is the store name.":"This is the store name.","Store Address":"Store Address","The actual store address.":"The actual store address.","Store City":"Store City","The actual store city.":"The actual store city.","Store Phone":"Store Phone","The phone number to reach the store.":"The phone number to reach the store.","Store Email":"Store Email","The actual store email. Might be used on invoice or for reports.":"The actual store email. Might be used on invoice or for reports.","Store PO.Box":"Store PO.Box","The store mail box number.":"The store mail box number.","Store Fax":"Store Fax","The store fax number.":"The store fax number.","Store Additional Information":"Store Additional Information","Store additional information.":"Store additional information.","Store Square Logo":"Store Square Logo","Choose what is the square logo of the store.":"Choose what is the square logo of the store.","Store Rectangle Logo":"Store Rectangle Logo","Choose what is the rectangle logo of the store.":"Choose what is the rectangle logo of the store.","Define the default fallback language.":"Define the default fallback language.","Currency":"Currency","Currency Symbol":"Currency Symbol","This is the currency symbol.":"This is the currency symbol.","Currency ISO":"Currency ISO","The international currency ISO format.":"The international currency ISO format.","Currency Position":"Currency Position","Before the amount":"Before the amount","After the amount":"After the amount","Define where the currency should be located.":"Define where the currency should be located.","Preferred Currency":"Preferred Currency","ISO Currency":"ISO Currency","Symbol":"Symbol","Determine what is the currency indicator that should be used.":"Determine what is the currency indicator that should be used.","Currency Thousand Separator":"Currency Thousand Separator","Currency Decimal Separator":"Currency Decimal Separator","Define the symbol that indicate decimal number. By default \".\" is used.":"Define the symbol that indicate decimal number. By default \".\" is used.","Currency Precision":"Currency Precision","%s numbers after the decimal":"%s numbers after the decimal","Date Format":"Date Format","This define how the date should be defined. The default format is \"Y-m-d\".":"This define how the date should be defined. The default format is \"Y-m-d\".","Registration":"Registration","Registration Open":"Registration Open","Determine if everyone can register.":"Determine if everyone can register.","Registration Role":"Registration Role","Select what is the registration role.":"Select what is the registration role.","Requires Validation":"Requires Validation","Force account validation after the registration.":"Force account validation after the registration.","Allow Recovery":"Allow Recovery","Allow any user to recover his account.":"Allow any user to recover his account.","Receipts":"Receipts","Receipt Template":"Receipt Template","Default":"Default","Choose the template that applies to receipts":"Choose the template that applies to receipts","Receipt Logo":"Receipt Logo","Provide a URL to the logo.":"Provide a URL to the logo.","Receipt Footer":"Receipt Footer","If you would like to add some disclosure at the bottom of the receipt.":"If you would like to add some disclosure at the bottom of the receipt.","Column A":"Column A","Column B":"Column B","Order Code Type":"Order Code Type","Determine how the system will generate code for each orders.":"Determine how the system will generate code for each orders.","Sequential":"Sequential","Random Code":"Random Code","Number Sequential":"Number Sequential","Allow Unpaid Orders":"Allow Unpaid Orders","Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".":"Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".","Allow Partial Orders":"Allow Partial Orders","Will prevent partially paid orders to be placed.":"Will prevent partially paid orders to be placed.","Quotation Expiration":"Quotation Expiration","Quotations will get deleted after they defined they has reached.":"Quotations will get deleted after they defined they has reached.","%s Days":"%s Days","Features":"Features","Show Quantity":"Show Quantity","Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.":"Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.","Allow Customer Creation":"Allow Customer Creation","Allow customers to be created on the POS.":"Allow customers to be created on the POS.","Quick Product":"Quick Product","Allow quick product to be created from the POS.":"Allow quick product to be created from the POS.","Editable Unit Price":"Editable Unit Price","Allow product unit price to be edited.":"Allow product unit price to be edited.","Order Types":"Order Types","Control the order type enabled.":"Control the order type enabled.","Layout":"Layout","Retail Layout":"Retail Layout","Clothing Shop":"Clothing Shop","POS Layout":"POS Layout","Change the layout of the POS.":"Change the layout of the POS.","Printing":"Printing","Printed Document":"Printed Document","Choose the document used for printing aster a sale.":"Choose the document used for printing aster a sale.","Printing Enabled For":"Printing Enabled For","All Orders":"All Orders","From Partially Paid Orders":"From Partially Paid Orders","Only Paid Orders":"Only Paid Orders","Determine when the printing should be enabled.":"Determine when the printing should be enabled.","Printing Gateway":"Printing Gateway","Determine what is the gateway used for printing.":"Determine what is the gateway used for printing.","Enable Cash Registers":"Enable Cash Registers","Determine if the POS will support cash registers.":"Determine if the POS will support cash registers.","Cashier Idle Counter":"Cashier Idle Counter","5 Minutes":"5 Minutes","10 Minutes":"10 Minutes","15 Minutes":"15 Minutes","20 Minutes":"20 Minutes","30 Minutes":"30 Minutes","Selected after how many minutes the system will set the cashier as idle.":"Selected after how many minutes the system will set the cashier as idle.","Cash Disbursement":"Cash Disbursement","Allow cash disbursement by the cashier.":"Allow cash disbursement by the cashier.","Cash Registers":"Cash Registers","Keyboard Shortcuts":"Keyboard Shortcuts","Cancel Order":"Cancel Order","Keyboard shortcut to cancel the current order.":"Keyboard shortcut to cancel the current order.","Keyboard shortcut to hold the current order.":"Keyboard shortcut to hold the current order.","Keyboard shortcut to create a customer.":"Keyboard shortcut to create a customer.","Proceed Payment":"Proceed Payment","Keyboard shortcut to proceed to the payment.":"Keyboard shortcut to proceed to the payment.","Open Shipping":"Open Shipping","Keyboard shortcut to define shipping details.":"Keyboard shortcut to define shipping details.","Open Note":"Open Note","Keyboard shortcut to open the notes.":"Keyboard shortcut to open the notes.","Order Type Selector":"Order Type Selector","Keyboard shortcut to open the order type selector.":"Keyboard shortcut to open the order type selector.","Toggle Fullscreen":"Toggle Fullscreen","Keyboard shortcut to toggle fullscreen.":"Keyboard shortcut to toggle fullscreen.","Quick Search":"Quick Search","Keyboard shortcut open the quick search popup.":"Keyboard shortcut open the quick search popup.","Amount Shortcuts":"Amount Shortcuts","VAT Type":"VAT Type","Determine the VAT type that should be used.":"Determine the VAT type that should be used.","Flat Rate":"Flat Rate","Flexible Rate":"Flexible Rate","Products Vat":"Products Vat","Products & Flat Rate":"Products & Flat Rate","Products & Flexible Rate":"Products & Flexible Rate","Define the tax group that applies to the sales.":"Define the tax group that applies to the sales.","Define how the tax is computed on sales.":"Define how the tax is computed on sales.","VAT Settings":"VAT Settings","Enable Email Reporting":"Enable Email Reporting","Determine if the reporting should be enabled globally.":"Determine if the reporting should be enabled globally.","Supplies":"Supplies","Public Name":"Public Name","Define what is the user public name. If not provided, the username is used instead.":"Define what is the user public name. If not provided, the username is used instead.","Enable Workers":"Enable Workers","Test":"Test","Current Week":"Current Week","Previous Week":"Previous Week","There is no migrations to perform for the module \"%s\"":"There is no migrations to perform for the module \"%s\"","The module migration has successfully been performed for the module \"%s\"":"The module migration has successfully been performed for the module \"%s\"","Sales By Payment Types":"Sales By Payment Types","Provide a report of the sales by payment types, for a specific period.":"Provide a report of the sales by payment types, for a specific period.","Sales By Payments":"Sales By Payments","Order Settings":"Order Settings","Define the order name.":"Define the order name.","Define the date of creation of the order.":"Define the date of creation of the order.","Total Refunds":"Total Refunds","Clients Registered":"Clients Registered","Commissions":"Commissions","Processing Status":"Processing Status","Refunded Products":"Refunded Products","The delivery status of the order will be changed. Please confirm your action.":"The delivery status of the order will be changed. Please confirm your action.","The product price has been updated.":"The product price has been updated.","The editable price feature is disabled.":"The editable price feature is disabled.","Order Refunds":"Order Refunds","Product Price":"Product Price","Unable to proceed":"Unable to proceed","Partially paid orders are disabled.":"Partially paid orders are disabled.","An order is currently being processed.":"An order is currently being processed.","Log out":"Log out","Refund receipt":"Refund receipt","Recompute":"Recompute","Sort Results":"Sort Results","Using Quantity Ascending":"Using Quantity Ascending","Using Quantity Descending":"Using Quantity Descending","Using Sales Ascending":"Using Sales Ascending","Using Sales Descending":"Using Sales Descending","Using Name Ascending":"Using Name Ascending","Using Name Descending":"Using Name Descending","Progress":"Progress","Discounts":"Discounts","An invalid date were provided. Make sure it a prior date to the actual server date.":"An invalid date were provided. Make sure it a prior date to the actual server date.","Computing report from %s...":"Computing report from %s...","The demo has been enabled.":"The demo has been enabled.","Refund Receipt":"Refund Receipt","Codabar":"Codabar","Code 128":"Code 128","Code 39":"Code 39","Code 11":"Code 11","UPC A":"UPC A","UPC E":"UPC E","Store Dashboard":"Store Dashboard","Cashier Dashboard":"Cashier Dashboard","Default Dashboard":"Default Dashboard","%s has been processed, %s has not been processed.":"%s has been processed, %s has not been processed.","Order Refund Receipt — %s":"Order Refund Receipt — %s","Provides an overview over the best products sold during a specific period.":"Provides an overview over the best products sold during a specific period.","The report will be computed for the current year.":"The report will be computed for the current year.","Unknown report to refresh.":"Unknown report to refresh.","Report Refreshed":"Report Refreshed","The yearly report has been successfully refreshed for the year \"%s\".":"The yearly report has been successfully refreshed for the year \"%s\".","Countable":"Countable","Piece":"Piece","GST":"GST","SGST":"SGST","CGST":"CGST","Sample Procurement %s":"Sample Procurement %s","generated":"generated","Not Available":"Not Available","The report has been computed successfully.":"The report has been computed successfully.","Create a customer":"Create a customer","Credit":"Credit","Debit":"Debit","All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.":"All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.","Account":"Account","Provide the accounting number for this category.":"Provide the accounting number for this category.","Accounting":"Accounting","Procurement Cash Flow Account":"Procurement Cash Flow Account","Sale Cash Flow Account":"Sale Cash Flow Account","Sales Refunds Account":"Sales Refunds Account","Stock return for spoiled items will be attached to this account":"Stock return for spoiled items will be attached to this account","The reason has been updated.":"The reason has been updated.","You must select a customer before applying a coupon.":"You must select a customer before applying a coupon.","No coupons for the selected customer...":"No coupons for the selected customer...","Use Coupon":"Use Coupon","Use Customer ?":"Use Customer ?","No customer is selected. Would you like to proceed with this customer ?":"No customer is selected. Would you like to proceed with this customer ?","Change Customer ?":"Change Customer ?","Would you like to assign this customer to the ongoing order ?":"Would you like to assign this customer to the ongoing order ?","Product \/ Service":"Product \/ Service","An error has occurred while computing the product.":"An error has occurred while computing the product.","Provide a unique name for the product.":"Provide a unique name for the product.","Define what is the sale price of the item.":"Define what is the sale price of the item.","Set the quantity of the product.":"Set the quantity of the product.","Define what is tax type of the item.":"Define what is tax type of the item.","Choose the tax group that should apply to the item.":"Choose the tax group that should apply to the item.","Assign a unit to the product.":"Assign a unit to the product.","Some products has been added to the cart. Would youl ike to discard this order ?":"Some products has been added to the cart. Would youl ike to discard this order ?","Customer Accounts List":"Customer Accounts List","Display all customer accounts.":"Display all customer accounts.","No customer accounts has been registered":"No customer accounts has been registered","Add a new customer account":"Add a new customer account","Create a new customer account":"Create a new customer account","Register a new customer account and save it.":"Register a new customer account and save it.","Edit customer account":"Edit customer account","Modify Customer Account.":"Modify Customer Account.","Return to Customer Accounts":"Return to Customer Accounts","This will be ignored.":"This will be ignored.","Define the amount of the transaction":"Define the amount of the transaction","Define what operation will occurs on the customer account.":"Define what operation will occurs on the customer account.","Provider Procurements List":"Provider Procurements List","Display all provider procurements.":"Display all provider procurements.","No provider procurements has been registered":"No provider procurements has been registered","Add a new provider procurement":"Add a new provider procurement","Create a new provider procurement":"Create a new provider procurement","Register a new provider procurement and save it.":"Register a new provider procurement and save it.","Edit provider procurement":"Edit provider procurement","Modify Provider Procurement.":"Modify Provider Procurement.","Return to Provider Procurements":"Return to Provider Procurements","Delivered On":"Delivered On","Items":"Items","Displays the customer account history for %s":"Displays the customer account history for %s","Procurements by \"%s\"":"Procurements by \"%s\"","Crediting":"Crediting","Deducting":"Deducting","Order Payment":"Order Payment","Order Refund":"Order Refund","Unknown Operation":"Unknown Operation","Unnamed Product":"Unnamed Product","Bubble":"Bubble","Ding":"Ding","Pop":"Pop","Cash Sound":"Cash Sound","Sale Complete Sound":"Sale Complete Sound","New Item Audio":"New Item Audio","The sound that plays when an item is added to the cart.":"The sound that plays when an item is added to the cart.","Howdy, {name}":"Howdy, {name}","Would you like to perform the selected bulk action on the selected entries ?":"Would you like to perform the selected bulk action on the selected entries ?","The payment to be made today is less than what is expected.":"The payment to be made today is less than what is expected.","Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.":"Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.","How to change database configuration":"How to change database configuration","Common Database Issues":"Common Database Issues","Setup":"Setup","Query Exception":"Query Exception","The category products has been refreshed":"The category products has been refreshed","The requested customer cannot be found.":"The requested customer cannot be found.","Filters":"Filters","Has Filters":"Has Filters","N\/D":"N\/D","Range Starts":"Range Starts","Range Ends":"Range Ends","Search Filters":"Search Filters","Clear Filters":"Clear Filters","Use Filters":"Use Filters","No rewards available the selected customer...":"No rewards available the selected customer...","Unable to load the report as the timezone is not set on the settings.":"Unable to load the report as the timezone is not set on the settings.","There is no product to display...":"There is no product to display...","Method Not Allowed":"Method Not Allowed","Documentation":"Documentation","Module Version Mismatch":"Module Version Mismatch","Define how many time the coupon has been used.":"Define how many time the coupon has been used.","Define the maximum usage possible for this coupon.":"Define the maximum usage possible for this coupon.","Restrict the orders by the creation date.":"Restrict the orders by the creation date.","Created Between":"Created Between","Restrict the orders by the payment status.":"Restrict the orders by the payment status.","Due With Payment":"Due With Payment","Restrict the orders by the author.":"Restrict the orders by the author.","Restrict the orders by the customer.":"Restrict the orders by the customer.","Customer Phone":"Customer Phone","Restrict orders using the customer phone number.":"Restrict orders using the customer phone number.","Restrict the orders to the cash registers.":"Restrict the orders to the cash registers.","Low Quantity":"Low Quantity","Which quantity should be assumed low.":"Which quantity should be assumed low.","Stock Alert":"Stock Alert","See Products":"See Products","Provider Products List":"Provider Products List","Display all Provider Products.":"Display all Provider Products.","No Provider Products has been registered":"No Provider Products has been registered","Add a new Provider Product":"Add a new Provider Product","Create a new Provider Product":"Create a new Provider Product","Register a new Provider Product and save it.":"Register a new Provider Product and save it.","Edit Provider Product":"Edit Provider Product","Modify Provider Product.":"Modify Provider Product.","Return to Provider Products":"Return to Provider Products","Clone":"Clone","Would you like to clone this role ?":"Would you like to clone this role ?","Incompatibility Exception":"Incompatibility Exception","The requested file cannot be downloaded or has already been downloaded.":"The requested file cannot be downloaded or has already been downloaded.","Low Stock Report":"Low Stock Report","Low Stock Alert":"Low Stock Alert","The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ":"The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ","The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ":"The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ","Clone of \"%s\"":"Clone of \"%s\"","The role has been cloned.":"The role has been cloned.","Merge Products On Receipt\/Invoice":"Merge Products On Receipt\/Invoice","All similar products will be merged to avoid a paper waste for the receipt\/invoice.":"All similar products will be merged to avoid a paper waste for the receipt\/invoice.","Define whether the stock alert should be enabled for this unit.":"Define whether the stock alert should be enabled for this unit.","All Refunds":"All Refunds","No result match your query.":"No result match your query.","Report Type":"Report Type","Categories Detailed":"Categories Detailed","Categories Summary":"Categories Summary","Allow you to choose the report type.":"Allow you to choose the report type.","Unknown":"Unknown","Not Authorized":"Not Authorized","Creating customers has been explicitly disabled from the settings.":"Creating customers has been explicitly disabled from the settings.","Sales Discounts":"Sales Discounts","Sales Taxes":"Sales Taxes","Birth Date":"Birth Date","Displays the customer birth date":"Displays the customer birth date","Sale Value":"Sale Value","Purchase Value":"Purchase Value","Would you like to refresh this ?":"Would you like to refresh this ?","You cannot delete your own account.":"You cannot delete your own account.","Sales Progress":"Sales Progress","Procurement Refreshed":"Procurement Refreshed","The procurement \"%s\" has been successfully refreshed.":"The procurement \"%s\" has been successfully refreshed.","Partially Due":"Partially Due","No payment type has been selected on the settings. Please check your POS features and choose the supported order type":"No payment type has been selected on the settings. Please check your POS features and choose the supported order type","Read More":"Read More","Wipe All":"Wipe All","Wipe Plus Grocery":"Wipe Plus Grocery","Accounts List":"Accounts List","Display All Accounts.":"Display All Accounts.","No Account has been registered":"No Account has been registered","Add a new Account":"Add a new Account","Create a new Account":"Create a new Account","Register a new Account and save it.":"Register a new Account and save it.","Edit Account":"Edit Account","Modify An Account.":"Modify An Account.","Return to Accounts":"Return to Accounts","Accounts":"Accounts","Create Account":"Create Account","Payment Method":"Payment Method","Before submitting the payment, choose the payment type used for that order.":"Before submitting the payment, choose the payment type used for that order.","Select the payment type that must apply to the current order.":"Select the payment type that must apply to the current order.","Payment Type":"Payment Type","Remove Image":"Remove Image","This form is not completely loaded.":"This form is not completely loaded.","Updating":"Updating","Updating Modules":"Updating Modules","Return":"Return","Credit Limit":"Credit Limit","The request was canceled":"The request was canceled","Payment Receipt — %s":"Payment Receipt — %s","Payment receipt":"Payment receipt","Current Payment":"Current Payment","Total Paid":"Total Paid","Set what should be the limit of the purchase on credit.":"Set what should be the limit of the purchase on credit.","Provide the customer email.":"Provide the customer email.","Priority":"Priority","Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".":"Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".","Mode":"Mode","Choose what mode applies to this demo.":"Choose what mode applies to this demo.","Set if the sales should be created.":"Set if the sales should be created.","Create Procurements":"Create Procurements","Will create procurements.":"Will create procurements.","Sales Account":"Sales Account","Procurements Account":"Procurements Account","Sale Refunds Account":"Sale Refunds Account","Spoiled Goods Account":"Spoiled Goods Account","Customer Crediting Account":"Customer Crediting Account","Customer Debiting Account":"Customer Debiting Account","Unable to find the requested account type using the provided id.":"Unable to find the requested account type using the provided id.","You cannot delete an account type that has transaction bound.":"You cannot delete an account type that has transaction bound.","The account type has been deleted.":"The account type has been deleted.","The account has been created.":"The account has been created.","Customer Credit Account":"Customer Credit Account","Customer Debit Account":"Customer Debit Account","Register Cash-In Account":"Register Cash-In Account","Register Cash-Out Account":"Register Cash-Out Account","Require Valid Email":"Require Valid Email","Will for valid unique email for every customer.":"Will for valid unique email for every customer.","Choose an option":"Choose an option","Update Instalment Date":"Update Instalment Date","Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.":"Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.","Search for products.":"Search for products.","Toggle merging similar products.":"Toggle merging similar products.","Toggle auto focus.":"Toggle auto focus.","Filter User":"Filter User","All Users":"All Users","No user was found for proceeding the filtering.":"No user was found for proceeding the filtering.","available":"available","No coupons applies to the cart.":"No coupons applies to the cart.","Selected":"Selected","An error occurred while opening the order options":"An error occurred while opening the order options","There is no instalment defined. Please set how many instalments are allowed for this order":"There is no instalment defined. Please set how many instalments are allowed for this order","Select Payment Gateway":"Select Payment Gateway","Gateway":"Gateway","No tax is active":"No tax is active","Unable to delete a payment attached to the order.":"Unable to delete a payment attached to the order.","The discount has been set to the cart subtotal.":"The discount has been set to the cart subtotal.","Order Deletion":"Order Deletion","The current order will be deleted as no payment has been made so far.":"The current order will be deleted as no payment has been made so far.","Void The Order":"Void The Order","Unable to void an unpaid order.":"Unable to void an unpaid order.","Environment Details":"Environment Details","Properties":"Properties","Extensions":"Extensions","Configurations":"Configurations","Learn More":"Learn More","Search Products...":"Search Products...","No results to show.":"No results to show.","Start by choosing a range and loading the report.":"Start by choosing a range and loading the report.","Invoice Date":"Invoice Date","Initial Balance":"Initial Balance","New Balance":"New Balance","Transaction Type":"Transaction Type","Unchanged":"Unchanged","Define what roles applies to the user":"Define what roles applies to the user","Not Assigned":"Not Assigned","This value is already in use on the database.":"This value is already in use on the database.","This field should be checked.":"This field should be checked.","This field must be a valid URL.":"This field must be a valid URL.","This field is not a valid email.":"This field is not a valid email.","If you would like to define a custom invoice date.":"If you would like to define a custom invoice date.","Theme":"Theme","Dark":"Dark","Light":"Light","Define what is the theme that applies to the dashboard.":"Define what is the theme that applies to the dashboard.","Unable to delete this resource as it has %s dependency with %s item.":"Unable to delete this resource as it has %s dependency with %s item.","Unable to delete this resource as it has %s dependency with %s items.":"Unable to delete this resource as it has %s dependency with %s items.","Make a new procurement.":"Make a new procurement.","About":"About","Details about the environment.":"Details about the environment.","Core Version":"Core Version","PHP Version":"PHP Version","Mb String Enabled":"Mb String Enabled","Zip Enabled":"Zip Enabled","Curl Enabled":"Curl Enabled","Math Enabled":"Math Enabled","XML Enabled":"XML Enabled","XDebug Enabled":"XDebug Enabled","File Upload Enabled":"File Upload Enabled","File Upload Size":"File Upload Size","Post Max Size":"Post Max Size","Max Execution Time":"Max Execution Time","Memory Limit":"Memory Limit","Administrator":"Administrator","Store Administrator":"Store Administrator","Store Cashier":"Store Cashier","User":"User","Incorrect Authentication Plugin Provided.":"Incorrect Authentication Plugin Provided.","Require Unique Phone":"Require Unique Phone","Every customer should have a unique phone number.":"Every customer should have a unique phone number.","Define the default theme.":"Define the default theme.","Merge Similar Items":"Merge Similar Items","Will enforce similar products to be merged from the POS.":"Will enforce similar products to be merged from the POS.","Toggle Product Merge":"Toggle Product Merge","Will enable or disable the product merging.":"Will enable or disable the product merging.","Your system is running in production mode. You probably need to build the assets":"Your system is running in production mode. You probably need to build the assets","Your system is in development mode. Make sure to build the assets.":"Your system is in development mode. Make sure to build the assets.","Unassigned":"Unassigned","Display all product stock flow.":"Display all product stock flow.","No products stock flow has been registered":"No products stock flow has been registered","Add a new products stock flow":"Add a new products stock flow","Create a new products stock flow":"Create a new products stock flow","Register a new products stock flow and save it.":"Register a new products stock flow and save it.","Edit products stock flow":"Edit products stock flow","Modify Globalproducthistorycrud.":"Modify Globalproducthistorycrud.","Initial Quantity":"Initial Quantity","New Quantity":"New Quantity","No Dashboard":"No Dashboard","Not Found Assets":"Not Found Assets","Stock Flow Records":"Stock Flow Records","The user attributes has been updated.":"The user attributes has been updated.","Laravel Version":"Laravel Version","There is a missing dependency issue.":"There is a missing dependency issue.","The Action You Tried To Perform Is Not Allowed.":"The Action You Tried To Perform Is Not Allowed.","Unable to locate the assets.":"Unable to locate the assets.","All the customers has been transferred to the new group %s.":"All the customers has been transferred to the new group %s.","The request method is not allowed.":"The request method is not allowed.","A Database Exception Occurred.":"A Database Exception Occurred.","An error occurred while validating the form.":"An error occurred while validating the form.","Enter":"Enter","Search...":"Search...","Unable to hold an order which payment status has been updated already.":"Unable to hold an order which payment status has been updated already.","Unable to change the price mode. This feature has been disabled.":"Unable to change the price mode. This feature has been disabled.","Enable WholeSale Price":"Enable WholeSale Price","Would you like to switch to wholesale price ?":"Would you like to switch to wholesale price ?","Enable Normal Price":"Enable Normal Price","Would you like to switch to normal price ?":"Would you like to switch to normal price ?","Search products...":"Search products...","Set Sale Price":"Set Sale Price","Remove":"Remove","No product are added to this group.":"No product are added to this group.","Delete Sub item":"Delete Sub item","Would you like to delete this sub item?":"Would you like to delete this sub item?","Unable to add a grouped product.":"Unable to add a grouped product.","Choose The Unit":"Choose The Unit","Stock Report":"Stock Report","Wallet Amount":"Wallet Amount","Wallet History":"Wallet History","Transaction":"Transaction","No History...":"No History...","Removing":"Removing","Refunding":"Refunding","Unknow":"Unknow","Skip Instalments":"Skip Instalments","Define the product type.":"Define the product type.","Dynamic":"Dynamic","In case the product is computed based on a percentage, define the rate here.":"In case the product is computed based on a percentage, define the rate here.","Before saving this order, a minimum payment of {amount} is required":"Before saving this order, a minimum payment of {amount} is required","Initial Payment":"Initial Payment","In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?":"In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?","Search Customer...":"Search Customer...","Due Amount":"Due Amount","Wallet Balance":"Wallet Balance","Total Orders":"Total Orders","What slug should be used ? [Q] to quit.":"What slug should be used ? [Q] to quit.","\"%s\" is a reserved class name":"\"%s\" is a reserved class name","The migration file has been successfully forgotten for the module %s.":"The migration file has been successfully forgotten for the module %s.","%s products where updated.":"%s products where updated.","Previous Amount":"Previous Amount","Next Amount":"Next Amount","Restrict the records by the creation date.":"Restrict the records by the creation date.","Restrict the records by the author.":"Restrict the records by the author.","Grouped Product":"Grouped Product","Groups":"Groups","Choose Group":"Choose Group","Grouped":"Grouped","An error has occurred":"An error has occurred","Unable to proceed, the submitted form is not valid.":"Unable to proceed, the submitted form is not valid.","No activation is needed for this account.":"No activation is needed for this account.","Invalid activation token.":"Invalid activation token.","The expiration token has expired.":"The expiration token has expired.","Your account is not activated.":"Your account is not activated.","Unable to change a password for a non active user.":"Unable to change a password for a non active user.","Unable to submit a new password for a non active user.":"Unable to submit a new password for a non active user.","Unable to delete an entry that no longer exists.":"Unable to delete an entry that no longer exists.","Provides an overview of the products stock.":"Provides an overview of the products stock.","Customers Statement":"Customers Statement","Display the complete customer statement.":"Display the complete customer statement.","The recovery has been explicitly disabled.":"The recovery has been explicitly disabled.","The registration has been explicitly disabled.":"The registration has been explicitly disabled.","The entry has been successfully updated.":"The entry has been successfully updated.","A similar module has been found":"A similar module has been found","A grouped product cannot be saved without any sub items.":"A grouped product cannot be saved without any sub items.","A grouped product cannot contain grouped product.":"A grouped product cannot contain grouped product.","The subitem has been saved.":"The subitem has been saved.","The %s is already taken.":"The %s is already taken.","Allow Wholesale Price":"Allow Wholesale Price","Define if the wholesale price can be selected on the POS.":"Define if the wholesale price can be selected on the POS.","Allow Decimal Quantities":"Allow Decimal Quantities","Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.":"Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.","Numpad":"Numpad","Advanced":"Advanced","Will set what is the numpad used on the POS screen.":"Will set what is the numpad used on the POS screen.","Force Barcode Auto Focus":"Force Barcode Auto Focus","Will permanently enable barcode autofocus to ease using a barcode reader.":"Will permanently enable barcode autofocus to ease using a barcode reader.","Tax Included":"Tax Included","Unable to proceed, more than one product is set as featured":"Unable to proceed, more than one product is set as featured","The transaction was deleted.":"The transaction was deleted.","Database connection was successful.":"Database connection was successful.","The products taxes were computed successfully.":"The products taxes were computed successfully.","Tax Excluded":"Tax Excluded","Set Paid":"Set Paid","Would you like to mark this procurement as paid?":"Would you like to mark this procurement as paid?","Unidentified Item":"Unidentified Item","Non-existent Item":"Non-existent Item","You cannot change the status of an already paid procurement.":"You cannot change the status of an already paid procurement.","The procurement payment status has been changed successfully.":"The procurement payment status has been changed successfully.","The procurement has been marked as paid.":"The procurement has been marked as paid.","Show Price With Tax":"Show Price With Tax","Will display price with tax for each products.":"Will display price with tax for each products.","Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".":"Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".","Tax Inclusive":"Tax Inclusive","Apply Coupon":"Apply Coupon","Not applicable":"Not applicable","Normal":"Normal","Product Taxes":"Product Taxes","The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.":"The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.","Please provide a valid value.":"Please provide a valid value.","Your Account has been successfully created.":"Your Account has been successfully created.","%s products were freed":"%s products were freed","Restoring cash flow from paid orders...":"Restoring cash flow from paid orders...","Restoring cash flow from refunded orders...":"Restoring cash flow from refunded orders...","Unable to add the product":"Unable to add the product","No result to result match the search value provided.":"No result to result match the search value provided.","Provide the customer gender.":"Provide the customer gender.","Small Box":"Small Box","Box":"Box","X Days After Month Starts":"X Days After Month Starts","On Specific Day":"On Specific Day","Unknown Occurance":"Unknown Occurance","Done":"Done","Would you like to delete \"%s\"?":"Would you like to delete \"%s\"?","Unable to find a module having as namespace \"%s\"":"Unable to find a module having as namespace \"%s\"","Api File":"Api File","Migrations":"Migrations","Determine Until When the coupon is valid.":"Determine Until When the coupon is valid.","Customer Groups":"Customer Groups","Assigned To Customer Group":"Assigned To Customer Group","Only the customers who belongs to the selected groups will be able to use the coupon.":"Only the customers who belongs to the selected groups will be able to use the coupon.","Assigned To Customers":"Assigned To Customers","Only the customers selected will be ale to use the coupon.":"Only the customers selected will be ale to use the coupon.","Unable to save the coupon as one of the selected customer no longer exists.":"Unable to save the coupon as one of the selected customer no longer exists.","Unable to save the coupon as one of the selected customer group no longer exists.":"Unable to save the coupon as one of the selected customer group no longer exists.","Unable to save the coupon as one of the customers provided no longer exists.":"Unable to save the coupon as one of the customers provided no longer exists.","Unable to save the coupon as one of the provided customer group no longer exists.":"Unable to save the coupon as one of the provided customer group no longer exists.","Coupon Order Histories List":"Coupon Order Histories List","Display all coupon order histories.":"Display all coupon order histories.","No coupon order histories has been registered":"No coupon order histories has been registered","Add a new coupon order history":"Add a new coupon order history","Create a new coupon order history":"Create a new coupon order history","Register a new coupon order history and save it.":"Register a new coupon order history and save it.","Edit coupon order history":"Edit coupon order history","Modify Coupon Order History.":"Modify Coupon Order History.","Return to Coupon Order Histories":"Return to Coupon Order Histories","Customer_coupon_id":"Customer_coupon_id","Order_id":"Order_id","Discount_value":"Discount_value","Minimum_cart_value":"Minimum_cart_value","Maximum_cart_value":"Maximum_cart_value","Limit_usage":"Limit_usage","Would you like to delete this?":"Would you like to delete this?","Usage History":"Usage History","Customer Coupon Histories List":"Customer Coupon Histories List","Display all customer coupon histories.":"Display all customer coupon histories.","No customer coupon histories has been registered":"No customer coupon histories has been registered","Add a new customer coupon history":"Add a new customer coupon history","Create a new customer coupon history":"Create a new customer coupon history","Register a new customer coupon history and save it.":"Register a new customer coupon history and save it.","Edit customer coupon history":"Edit customer coupon history","Modify Customer Coupon History.":"Modify Customer Coupon History.","Return to Customer Coupon Histories":"Return to Customer Coupon Histories","Last Name":"Last Name","Provide the customer last name":"Provide the customer last name","Provide the billing first name.":"Provide the billing first name.","Provide the billing last name.":"Provide the billing last name.","Provide the shipping First Name.":"Provide the shipping First Name.","Provide the shipping Last Name.":"Provide the shipping Last Name.","Scheduled":"Scheduled","Set the scheduled date.":"Set the scheduled date.","Account Name":"Account Name","Provider last name if necessary.":"Provider last name if necessary.","Provide the user first name.":"Provide the user first name.","Provide the user last name.":"Provide the user last name.","Set the user gender.":"Set the user gender.","Set the user phone number.":"Set the user phone number.","Set the user PO Box.":"Set the user PO Box.","Provide the billing First Name.":"Provide the billing First Name.","Last name":"Last name","Group Name":"Group Name","Delete a user":"Delete a user","Activated":"Activated","type":"type","User Group":"User Group","Scheduled On":"Scheduled On","Biling":"Biling","API Token":"API Token","Unable to export if there is nothing to export.":"Unable to export if there is nothing to export.","%s Coupons":"%s Coupons","%s Coupon History":"%s Coupon History","\"%s\" Record History":"\"%s\" Record History","The media name was successfully updated.":"The media name was successfully updated.","The role was successfully assigned.":"The role was successfully assigned.","The role were successfully assigned.":"The role were successfully assigned.","Unable to identifier the provided role.":"Unable to identifier the provided role.","Good Condition":"Good Condition","Cron Disabled":"Cron Disabled","Task Scheduling Disabled":"Task Scheduling Disabled","NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.":"NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.","The email \"%s\" is already used for another customer.":"The email \"%s\" is already used for another customer.","The provided coupon cannot be loaded for that customer.":"The provided coupon cannot be loaded for that customer.","The provided coupon cannot be loaded for the group assigned to the selected customer.":"The provided coupon cannot be loaded for the group assigned to the selected customer.","Unable to use the coupon %s as it has expired.":"Unable to use the coupon %s as it has expired.","Unable to use the coupon %s at this moment.":"Unable to use the coupon %s at this moment.","%s on %s directories were deleted.":"%s on %s directories were deleted.","%s on %s files were deleted.":"%s on %s files were deleted.","First Day Of Month":"First Day Of Month","Last Day Of Month":"Last Day Of Month","Month middle Of Month":"Month middle Of Month","{day} after month starts":"{day} after month starts","{day} before month ends":"{day} before month ends","Every {day} of the month":"Every {day} of the month","Days":"Days","Make sure set a day that is likely to be executed":"Make sure set a day that is likely to be executed","Invalid Module provided.":"Invalid Module provided.","The module was \"%s\" was successfully installed.":"The module was \"%s\" was successfully installed.","The modules \"%s\" was deleted successfully.":"The modules \"%s\" was deleted successfully.","Unable to locate a module having as identifier \"%s\".":"Unable to locate a module having as identifier \"%s\".","All migration were executed.":"All migration were executed.","Unknown Product Status":"Unknown Product Status","Member Since":"Member Since","Total Customers":"Total Customers","The widgets was successfully updated.":"The widgets was successfully updated.","The token was successfully created":"The token was successfully created","The token has been successfully deleted.":"The token has been successfully deleted.","Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".":"Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".","Will display all cashiers who performs well.":"Will display all cashiers who performs well.","Will display all customers with the highest purchases.":"Will display all customers with the highest purchases.","Expense Card Widget":"Expense Card Widget","Will display a card of current and overwall expenses.":"Will display a card of current and overwall expenses.","Incomplete Sale Card Widget":"Incomplete Sale Card Widget","Will display a card of current and overall incomplete sales.":"Will display a card of current and overall incomplete sales.","Orders Chart":"Orders Chart","Will display a chart of weekly sales.":"Will display a chart of weekly sales.","Orders Summary":"Orders Summary","Will display a summary of recent sales.":"Will display a summary of recent sales.","Will display a profile widget with user stats.":"Will display a profile widget with user stats.","Sale Card Widget":"Sale Card Widget","Will display current and overall sales.":"Will display current and overall sales.","Return To Calendar":"Return To Calendar","Thr":"Thr","The left range will be invalid.":"The left range will be invalid.","The right range will be invalid.":"The right range will be invalid.","Click here to add widgets":"Click here to add widgets","Choose Widget":"Choose Widget","Select with widget you want to add to the column.":"Select with widget you want to add to the column.","Unamed Tab":"Unamed Tab","An error unexpected occured while printing.":"An error unexpected occured while printing.","and":"and","{date} ago":"{date} ago","In {date}":"In {date}","An unexpected error occured.":"An unexpected error occured.","Warning":"Warning","Change Type":"Change Type","Save Expense":"Save Expense","No configuration were choosen. Unable to proceed.":"No configuration were choosen. Unable to proceed.","Conditions":"Conditions","By proceeding the current for and all your entries will be cleared. Would you like to proceed?":"By proceeding the current for and all your entries will be cleared. Would you like to proceed?","No modules matches your search term.":"No modules matches your search term.","Press \"\/\" to search modules":"Press \"\/\" to search modules","No module has been uploaded yet.":"No module has been uploaded yet.","{module}":"{module}","Would you like to delete \"{module}\"? All data created by the module might also be deleted.":"Would you like to delete \"{module}\"? All data created by the module might also be deleted.","Search Medias":"Search Medias","Bulk Select":"Bulk Select","Press "\/" to search permissions":"Press "\/" to search permissions","SKU, Barcode, Name":"SKU, Barcode, Name","About Token":"About Token","Save Token":"Save Token","Generated Tokens":"Generated Tokens","Created":"Created","Last Use":"Last Use","Never":"Never","Expires":"Expires","Revoke":"Revoke","Token Name":"Token Name","This will be used to identifier the token.":"This will be used to identifier the token.","Unable to proceed, the form is not valid.":"Unable to proceed, the form is not valid.","An unexpected error occured":"An unexpected error occured","An Error Has Occured":"An Error Has Occured","Febuary":"Febuary","Configure":"Configure","This QR code is provided to ease authentication on external applications.":"This QR code is provided to ease authentication on external applications.","Copy And Close":"Copy And Close","An error has occured":"An error has occured","Recents Orders":"Recents Orders","Unamed Page":"Unamed Page","Assignation":"Assignation","Incoming Conversion":"Incoming Conversion","Outgoing Conversion":"Outgoing Conversion","Unknown Action":"Unknown Action","Direct Transaction":"Direct Transaction","Recurring Transaction":"Recurring Transaction","Entity Transaction":"Entity Transaction","Scheduled Transaction":"Scheduled Transaction","Unknown Type (%s)":"Unknown Type (%s)","What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.":"What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.","What is the full model name. eg: App\\Models\\Order ? [Q] to quit.":"What is the full model name. eg: App\\Models\\Order ? [Q] to quit.","What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.":"What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.","Unsupported argument provided: \"%s\"":"Unsupported argument provided: \"%s\"","The authorization token can\\'t be changed manually.":"The authorization token can\\'t be changed manually.","Translation process is complete for the module %s !":"Translation process is complete for the module %s !","%s migration(s) has been deleted.":"%s migration(s) has been deleted.","The command has been created for the module \"%s\"!":"The command has been created for the module \"%s\"!","The controller has been created for the module \"%s\"!":"The controller has been created for the module \"%s\"!","The event has been created at the following path \"%s\"!":"The event has been created at the following path \"%s\"!","The listener has been created on the path \"%s\"!":"The listener has been created on the path \"%s\"!","A request with the same name has been found !":"A request with the same name has been found !","Unable to find a module having the identifier \"%s\".":"Unable to find a module having the identifier \"%s\".","Unsupported reset mode.":"Unsupported reset mode.","You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.":"You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.","Unable to find a module having \"%s\" as namespace.":"Unable to find a module having \"%s\" as namespace.","A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.":"A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.","A new form class was created at the path \"%s\"":"A new form class was created at the path \"%s\"","Unable to proceed, looks like the database can\\'t be used.":"Unable to proceed, looks like the database can\\'t be used.","In which language would you like to install NexoPOS ?":"In which language would you like to install NexoPOS ?","You must define the language of installation.":"You must define the language of installation.","The value above which the current coupon can\\'t apply.":"The value above which the current coupon can\\'t apply.","Unable to save the coupon product as this product doens\\'t exists.":"Unable to save the coupon product as this product doens\\'t exists.","Unable to save the coupon category as this category doens\\'t exists.":"Unable to save the coupon category as this category doens\\'t exists.","Unable to save the coupon as this category doens\\'t exists.":"Unable to save the coupon as this category doens\\'t exists.","You\\re not allowed to do that.":"You\\re not allowed to do that.","Crediting (Add)":"Crediting (Add)","Refund (Add)":"Refund (Add)","Deducting (Remove)":"Deducting (Remove)","Payment (Remove)":"Payment (Remove)","The assigned default customer group doesn\\'t exist or is not defined.":"The assigned default customer group doesn\\'t exist or is not defined.","Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0":"Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0","You\\'re not allowed to do this operation":"You\\'re not allowed to do this operation","If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.":"If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.","Convert Unit":"Convert Unit","The unit that is selected for convertion by default.":"The unit that is selected for convertion by default.","COGS":"COGS","Used to define the Cost of Goods Sold.":"Used to define the Cost of Goods Sold.","Visible":"Visible","Define whether the unit is available for sale.":"Define whether the unit is available for sale.","Product unique name. If it\\' variation, it should be relevant for that variation":"Product unique name. If it\\' variation, it should be relevant for that variation","The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.":"The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.","The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.":"The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.","Auto COGS":"Auto COGS","Unknown Type: %s":"Unknown Type: %s","Shortage":"Shortage","Overage":"Overage","Transactions List":"Transactions List","Display all transactions.":"Display all transactions.","No transactions has been registered":"No transactions has been registered","Add a new transaction":"Add a new transaction","Create a new transaction":"Create a new transaction","Register a new transaction and save it.":"Register a new transaction and save it.","Edit transaction":"Edit transaction","Modify Transaction.":"Modify Transaction.","Return to Transactions":"Return to Transactions","determine if the transaction is effective or not. Work for recurring and not recurring transactions.":"determine if the transaction is effective or not. Work for recurring and not recurring transactions.","Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.":"Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.","Transaction Account":"Transaction Account","Assign the transaction to an account430":"Assign the transaction to an account430","Is the value or the cost of the transaction.":"Is the value or the cost of the transaction.","If set to Yes, the transaction will trigger on defined occurrence.":"If set to Yes, the transaction will trigger on defined occurrence.","Define how often this transaction occurs":"Define how often this transaction occurs","Define what is the type of the transactions.":"Define what is the type of the transactions.","Trigger":"Trigger","Would you like to trigger this expense now?":"Would you like to trigger this expense now?","Transactions History List":"Transactions History List","Display all transaction history.":"Display all transaction history.","No transaction history has been registered":"No transaction history has been registered","Add a new transaction history":"Add a new transaction history","Create a new transaction history":"Create a new transaction history","Register a new transaction history and save it.":"Register a new transaction history and save it.","Edit transaction history":"Edit transaction history","Modify Transactions history.":"Modify Transactions history.","Return to Transactions History":"Return to Transactions History","Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.":"Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.","Set the limit that can\\'t be exceeded by the user.":"Set the limit that can\\'t be exceeded by the user.","Oops, We\\'re Sorry!!!":"Oops, We\\'re Sorry!!!","Class: %s":"Class: %s","There\\'s is mismatch with the core version.":"There\\'s is mismatch with the core version.","You\\'re not authenticated.":"You\\'re not authenticated.","An error occured while performing your request.":"An error occured while performing your request.","A mismatch has occured between a module and it\\'s dependency.":"A mismatch has occured between a module and it\\'s dependency.","You\\'re not allowed to see that page.":"You\\'re not allowed to see that page.","Post Too Large":"Post Too Large","The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini":"The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini","This field does\\'nt have a valid value.":"This field does\\'nt have a valid value.","Describe the direct transaction.":"Describe the direct transaction.","If set to yes, the transaction will take effect immediately and be saved on the history.":"If set to yes, the transaction will take effect immediately and be saved on the history.","Assign the transaction to an account.":"Assign the transaction to an account.","set the value of the transaction.":"set the value of the transaction.","Further details on the transaction.":"Further details on the transaction.","Describe the direct transactions.":"Describe the direct transactions.","set the value of the transactions.":"set the value of the transactions.","The transactions will be multipled by the number of user having that role.":"The transactions will be multipled by the number of user having that role.","Create Sales (needs Procurements)":"Create Sales (needs Procurements)","Set when the transaction should be executed.":"Set when the transaction should be executed.","The addresses were successfully updated.":"The addresses were successfully updated.","Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.":"Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.","The register doesn\\'t have an history.":"The register doesn\\'t have an history.","Unable to check a register session history if it\\'s closed.":"Unable to check a register session history if it\\'s closed.","Register History For : %s":"Register History For : %s","Can\\'t delete a category having sub categories linked to it.":"Can\\'t delete a category having sub categories linked to it.","Unable to proceed. The request doesn\\'t provide enough data which could be handled":"Unable to proceed. The request doesn\\'t provide enough data which could be handled","Unable to load the CRUD resource : %s.":"Unable to load the CRUD resource : %s.","Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods":"Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods","The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.":"The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.","The crud columns exceed the maximum column that can be exported (27)":"The crud columns exceed the maximum column that can be exported (27)","This link has expired.":"This link has expired.","Account History : %s":"Account History : %s","Welcome — %s":"Welcome — %s","Upload and manage medias (photos).":"Upload and manage medias (photos).","The product which id is %s doesnt\\'t belong to the procurement which id is %s":"The product which id is %s doesnt\\'t belong to the procurement which id is %s","The refresh process has started. You\\'ll get informed once it\\'s complete.":"The refresh process has started. You\\'ll get informed once it\\'s complete.","The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".":"The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".","Stock History For %s":"Stock History For %s","Set":"Set","The unit is not set for the product \"%s\".":"The unit is not set for the product \"%s\".","The operation will cause a negative stock for the product \"%s\" (%s).":"The operation will cause a negative stock for the product \"%s\" (%s).","The adjustment quantity can\\'t be negative for the product \"%s\" (%s)":"The adjustment quantity can\\'t be negative for the product \"%s\" (%s)","%s\\'s Products":"%s\\'s Products","Transactions Report":"Transactions Report","Combined Report":"Combined Report","Provides a combined report for every transactions on products.":"Provides a combined report for every transactions on products.","Unable to initiallize the settings page. The identifier \"' . $identifier . '":"Unable to initiallize the settings page. The identifier \"' . $identifier . '","Shows all histories generated by the transaction.":"Shows all histories generated by the transaction.","Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.":"Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.","Create New Transaction":"Create New Transaction","Set direct, scheduled transactions.":"Set direct, scheduled transactions.","Update Transaction":"Update Transaction","The provided data aren\\'t valid":"The provided data aren\\'t valid","Welcome — NexoPOS":"Welcome — NexoPOS","You\\'re not allowed to see this page.":"You\\'re not allowed to see this page.","Your don\\'t have enough permission to perform this action.":"Your don\\'t have enough permission to perform this action.","You don\\'t have the necessary role to see this page.":"You don\\'t have the necessary role to see this page.","%s product(s) has low stock. Reorder those product(s) before it get exhausted.":"%s product(s) has low stock. Reorder those product(s) before it get exhausted.","Scheduled Transactions":"Scheduled Transactions","the transaction \"%s\" was executed as scheduled on %s.":"the transaction \"%s\" was executed as scheduled on %s.","Workers Aren\\'t Running":"Workers Aren\\'t Running","The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.":"The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.","Unable to remove the permissions \"%s\". It doesn\\'t exists.":"Unable to remove the permissions \"%s\". It doesn\\'t exists.","Unable to open \"%s\" *, as it\\'s not closed.":"Unable to open \"%s\" *, as it\\'s not closed.","Unable to open \"%s\" *, as it\\'s not opened.":"Unable to open \"%s\" *, as it\\'s not opened.","Unable to cashing on \"%s\" *, as it\\'s not opened.":"Unable to cashing on \"%s\" *, as it\\'s not opened.","Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.":"Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.","Unable to cashout on \"%s":"Unable to cashout on \"%s","Symbolic Links Missing":"Symbolic Links Missing","The Symbolic Links to the public directory is missing. Your medias might be broken and not display.":"The Symbolic Links to the public directory is missing. Your medias might be broken and not display.","Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.":"Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.","The requested module %s cannot be found.":"The requested module %s cannot be found.","The manifest.json can\\'t be located inside the module %s on the path: %s":"The manifest.json can\\'t be located inside the module %s on the path: %s","the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.":"the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.","Sorting is explicitely disabled for the column \"%s\".":"Sorting is explicitely disabled for the column \"%s\".","Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s":"Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s","Unable to find the customer using the provided id %s.":"Unable to find the customer using the provided id %s.","Not enough credits on the customer account. Requested : %s, Remaining: %s.":"Not enough credits on the customer account. Requested : %s, Remaining: %s.","The customer account doesn\\'t have enough funds to proceed.":"The customer account doesn\\'t have enough funds to proceed.","Unable to find a reference to the attached coupon : %s":"Unable to find a reference to the attached coupon : %s","You\\'re not allowed to use this coupon as it\\'s no longer active":"You\\'re not allowed to use this coupon as it\\'s no longer active","You\\'re not allowed to use this coupon it has reached the maximum usage allowed.":"You\\'re not allowed to use this coupon it has reached the maximum usage allowed.","Terminal A":"Terminal A","Terminal B":"Terminal B","%s link were deleted":"%s link were deleted","Unable to execute the following class callback string : %s":"Unable to execute the following class callback string : %s","%s — %s":"%s — %s","Transactions":"Transactions","Create Transaction":"Create Transaction","Stock History":"Stock History","Invoices":"Invoices","Failed to parse the configuration file on the following path \"%s\"":"Failed to parse the configuration file on the following path \"%s\"","No config.xml has been found on the directory : %s. This folder is ignored":"No config.xml has been found on the directory : %s. This folder is ignored","The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ":"The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ","Unable to upload this module as it\\'s older than the version installed":"Unable to upload this module as it\\'s older than the version installed","The migration file doens\\'t have a valid class name. Expected class : %s":"The migration file doens\\'t have a valid class name. Expected class : %s","Unable to locate the following file : %s":"Unable to locate the following file : %s","The migration file doens\\'t have a valid method name. Expected method : %s":"The migration file doens\\'t have a valid method name. Expected method : %s","The module %s cannot be enabled as his dependency (%s) is missing or not enabled.":"The module %s cannot be enabled as his dependency (%s) is missing or not enabled.","The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.":"The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.","An Error Occurred \"%s\": %s":"An Error Occurred \"%s\": %s","The order has been updated":"The order has been updated","The minimal payment of %s has\\'nt been provided.":"The minimal payment of %s has\\'nt been provided.","Unable to proceed as the order is already paid.":"Unable to proceed as the order is already paid.","The customer account funds are\\'nt enough to process the payment.":"The customer account funds are\\'nt enough to process the payment.","Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.","Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.","By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.":"By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.","You\\'re not allowed to make payments.":"You\\'re not allowed to make payments.","Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s":"Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s","Unknown Status (%s)":"Unknown Status (%s)","%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.":"%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.","Unable to find a reference of the provided coupon : %s":"Unable to find a reference of the provided coupon : %s","The procurement has been deleted. %s included stock record(s) has been deleted as well.":"The procurement has been deleted. %s included stock record(s) has been deleted as well.","Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.":"Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.","Unable to find the product using the provided id \"%s\"":"Unable to find the product using the provided id \"%s\"","Unable to procure the product \"%s\" as the stock management is disabled.":"Unable to procure the product \"%s\" as the stock management is disabled.","Unable to procure the product \"%s\" as it is a grouped product.":"Unable to procure the product \"%s\" as it is a grouped product.","The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item":"The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item","%s procurement(s) has recently been automatically procured.":"%s procurement(s) has recently been automatically procured.","The requested category doesn\\'t exists":"The requested category doesn\\'t exists","The category to which the product is attached doesn\\'t exists or has been deleted":"The category to which the product is attached doesn\\'t exists or has been deleted","Unable to create a product with an unknow type : %s":"Unable to create a product with an unknow type : %s","A variation within the product has a barcode which is already in use : %s.":"A variation within the product has a barcode which is already in use : %s.","A variation within the product has a SKU which is already in use : %s":"A variation within the product has a SKU which is already in use : %s","Unable to edit a product with an unknown type : %s":"Unable to edit a product with an unknown type : %s","The requested sub item doesn\\'t exists.":"The requested sub item doesn\\'t exists.","One of the provided product variation doesn\\'t include an identifier.":"One of the provided product variation doesn\\'t include an identifier.","The product\\'s unit quantity has been updated.":"The product\\'s unit quantity has been updated.","Unable to reset this variable product \"%s":"Unable to reset this variable product \"%s","Adjusting grouped product inventory must result of a create, update, delete sale operation.":"Adjusting grouped product inventory must result of a create, update, delete sale operation.","Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).":"Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).","Unsupported stock action \"%s\"":"Unsupported stock action \"%s\"","%s product(s) has been deleted.":"%s product(s) has been deleted.","%s products(s) has been deleted.":"%s products(s) has been deleted.","Unable to find the product, as the argument \"%s\" which value is \"%s":"Unable to find the product, as the argument \"%s\" which value is \"%s","You cannot convert unit on a product having stock management disabled.":"You cannot convert unit on a product having stock management disabled.","The source and the destination unit can\\'t be the same. What are you trying to do ?":"The source and the destination unit can\\'t be the same. What are you trying to do ?","There is no source unit quantity having the name \"%s\" for the item %s":"There is no source unit quantity having the name \"%s\" for the item %s","There is no destination unit quantity having the name %s for the item %s":"There is no destination unit quantity having the name %s for the item %s","The source unit and the destination unit doens\\'t belong to the same unit group.":"The source unit and the destination unit doens\\'t belong to the same unit group.","The group %s has no base unit defined":"The group %s has no base unit defined","The conversion of %s(%s) to %s(%s) was successful":"The conversion of %s(%s) to %s(%s) was successful","The product has been deleted.":"The product has been deleted.","An error occurred: %s.":"An error occurred: %s.","A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.":"A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.","Today\\'s Orders":"Today\\'s Orders","Today\\'s Sales":"Today\\'s Sales","Today\\'s Refunds":"Today\\'s Refunds","Today\\'s Customers":"Today\\'s Customers","The report will be generated. Try loading the report within few minutes.":"The report will be generated. Try loading the report within few minutes.","The database has been wiped out.":"The database has been wiped out.","No custom handler for the reset \"' . $mode . '\"":"No custom handler for the reset \"' . $mode . '\"","Unable to proceed. The parent tax doesn\\'t exists.":"Unable to proceed. The parent tax doesn\\'t exists.","A simple tax must not be assigned to a parent tax with the type \"simple":"A simple tax must not be assigned to a parent tax with the type \"simple","Created via tests":"Created via tests","The transaction has been successfully saved.":"The transaction has been successfully saved.","The transaction has been successfully updated.":"The transaction has been successfully updated.","Unable to find the transaction using the provided identifier.":"Unable to find the transaction using the provided identifier.","Unable to find the requested transaction using the provided id.":"Unable to find the requested transaction using the provided id.","The transction has been correctly deleted.":"The transction has been correctly deleted.","You cannot delete an account which has transactions bound.":"You cannot delete an account which has transactions bound.","The transaction account has been deleted.":"The transaction account has been deleted.","Unable to find the transaction account using the provided ID.":"Unable to find the transaction account using the provided ID.","The transaction account has been updated.":"The transaction account has been updated.","This transaction type can\\'t be triggered.":"This transaction type can\\'t be triggered.","The transaction has been successfully triggered.":"The transaction has been successfully triggered.","The transaction \"%s\" has been processed on day \"%s\".":"The transaction \"%s\" has been processed on day \"%s\".","The transaction \"%s\" has already been processed.":"The transaction \"%s\" has already been processed.","The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.":"The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.","The process has been correctly executed and all transactions has been processed.":"The process has been correctly executed and all transactions has been processed.","The process has been executed with some failures. %s\/%s process(es) has successed.":"The process has been executed with some failures. %s\/%s process(es) has successed.","Procurement : %s":"Procurement : %s","Procurement Liability : %s":"Procurement Liability : %s","Refunding : %s":"Refunding : %s","Spoiled Good : %s":"Spoiled Good : %s","Sale : %s":"Sale : %s","Liabilities Account":"Liabilities Account","Not found account type: %s":"Not found account type: %s","Refund : %s":"Refund : %s","Customer Account Crediting : %s":"Customer Account Crediting : %s","Customer Account Purchase : %s":"Customer Account Purchase : %s","Customer Account Deducting : %s":"Customer Account Deducting : %s","Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.":"Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.","The unit group %s doesn\\'t have a base unit":"The unit group %s doesn\\'t have a base unit","The system role \"Users\" can be retrieved.":"The system role \"Users\" can be retrieved.","The default role that must be assigned to new users cannot be retrieved.":"The default role that must be assigned to new users cannot be retrieved.","%s Second(s)":"%s Second(s)","Configure the accounting feature":"Configure the accounting feature","Define the symbol that indicate thousand. By default ":"Define the symbol that indicate thousand. By default ","Date Time Format":"Date Time Format","This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".":"This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".","Date TimeZone":"Date TimeZone","Determine the default timezone of the store. Current Time: %s":"Determine the default timezone of the store. Current Time: %s","Configure how invoice and receipts are used.":"Configure how invoice and receipts are used.","configure settings that applies to orders.":"configure settings that applies to orders.","Report Settings":"Report Settings","Configure the settings":"Configure the settings","Wipes and Reset the database.":"Wipes and Reset the database.","Supply Delivery":"Supply Delivery","Configure the delivery feature.":"Configure the delivery feature.","Configure how background operations works.":"Configure how background operations works.","Every procurement will be added to the selected transaction account":"Every procurement will be added to the selected transaction account","Every sales will be added to the selected transaction account":"Every sales will be added to the selected transaction account","Customer Credit Account (crediting)":"Customer Credit Account (crediting)","Every customer credit will be added to the selected transaction account":"Every customer credit will be added to the selected transaction account","Customer Credit Account (debitting)":"Customer Credit Account (debitting)","Every customer credit removed will be added to the selected transaction account":"Every customer credit removed will be added to the selected transaction account","Sales refunds will be attached to this transaction account":"Sales refunds will be attached to this transaction account","Stock Return Account (Spoiled Items)":"Stock Return Account (Spoiled Items)","Disbursement (cash register)":"Disbursement (cash register)","Transaction account for all cash disbursement.":"Transaction account for all cash disbursement.","Liabilities":"Liabilities","Transaction account for all liabilities.":"Transaction account for all liabilities.","You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.":"You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.","Show Tax Breakdown":"Show Tax Breakdown","Will display the tax breakdown on the receipt\/invoice.":"Will display the tax breakdown on the receipt\/invoice.","Available tags : ":"Available tags : ","{store_name}: displays the store name.":"{store_name}: displays the store name.","{store_email}: displays the store email.":"{store_email}: displays the store email.","{store_phone}: displays the store phone number.":"{store_phone}: displays the store phone number.","{cashier_name}: displays the cashier name.":"{cashier_name}: displays the cashier name.","{cashier_id}: displays the cashier id.":"{cashier_id}: displays the cashier id.","{order_code}: displays the order code.":"{order_code}: displays the order code.","{order_date}: displays the order date.":"{order_date}: displays the order date.","{order_type}: displays the order type.":"{order_type}: displays the order type.","{customer_email}: displays the customer email.":"{customer_email}: displays the customer email.","{shipping_first_name}: displays the shipping first name.":"{shipping_first_name}: displays the shipping first name.","{shipping_last_name}: displays the shipping last name.":"{shipping_last_name}: displays the shipping last name.","{shipping_phone}: displays the shipping phone.":"{shipping_phone}: displays the shipping phone.","{shipping_address_1}: displays the shipping address_1.":"{shipping_address_1}: displays the shipping address_1.","{shipping_address_2}: displays the shipping address_2.":"{shipping_address_2}: displays the shipping address_2.","{shipping_country}: displays the shipping country.":"{shipping_country}: displays the shipping country.","{shipping_city}: displays the shipping city.":"{shipping_city}: displays the shipping city.","{shipping_pobox}: displays the shipping pobox.":"{shipping_pobox}: displays the shipping pobox.","{shipping_company}: displays the shipping company.":"{shipping_company}: displays the shipping company.","{shipping_email}: displays the shipping email.":"{shipping_email}: displays the shipping email.","{billing_first_name}: displays the billing first name.":"{billing_first_name}: displays the billing first name.","{billing_last_name}: displays the billing last name.":"{billing_last_name}: displays the billing last name.","{billing_phone}: displays the billing phone.":"{billing_phone}: displays the billing phone.","{billing_address_1}: displays the billing address_1.":"{billing_address_1}: displays the billing address_1.","{billing_address_2}: displays the billing address_2.":"{billing_address_2}: displays the billing address_2.","{billing_country}: displays the billing country.":"{billing_country}: displays the billing country.","{billing_city}: displays the billing city.":"{billing_city}: displays the billing city.","{billing_pobox}: displays the billing pobox.":"{billing_pobox}: displays the billing pobox.","{billing_company}: displays the billing company.":"{billing_company}: displays the billing company.","{billing_email}: displays the billing email.":"{billing_email}: displays the billing email.","Available tags :":"Available tags :","Quick Product Default Unit":"Quick Product Default Unit","Set what unit is assigned by default to all quick product.":"Set what unit is assigned by default to all quick product.","Hide Exhausted Products":"Hide Exhausted Products","Will hide exhausted products from selection on the POS.":"Will hide exhausted products from selection on the POS.","Hide Empty Category":"Hide Empty Category","Category with no or exhausted products will be hidden from selection.":"Category with no or exhausted products will be hidden from selection.","Default Printing (web)":"Default Printing (web)","The amount numbers shortcuts separated with a \"|\".":"The amount numbers shortcuts separated with a \"|\".","No submit URL was provided":"No submit URL was provided","Sorting is explicitely disabled on this column":"Sorting is explicitely disabled on this column","An unpexpected error occured while using the widget.":"An unpexpected error occured while using the widget.","This field must be similar to \"{other}\"\"":"This field must be similar to \"{other}\"\"","This field must have at least \"{length}\" characters\"":"This field must have at least \"{length}\" characters\"","This field must have at most \"{length}\" characters\"":"This field must have at most \"{length}\" characters\"","This field must be different from \"{other}\"\"":"This field must be different from \"{other}\"\"","Search result":"Search result","Choose...":"Choose...","The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.":"The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.","+{count} other":"+{count} other","The selected print gateway doesn't support this type of printing.":"The selected print gateway doesn't support this type of printing.","millisecond| second| minute| hour| day| week| month| year| decade| century| millennium":"millisecond| second| minute| hour| day| week| month| year| decade| century| millennium","milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia":"milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia","An error occured":"An error occured","You\\'re about to delete selected resources. Would you like to proceed?":"You\\'re about to delete selected resources. Would you like to proceed?","See Error":"See Error","Your uploaded files will displays here.":"Your uploaded files will displays here.","Nothing to care about !":"Nothing to care about !","Would you like to bulk edit a system role ?":"Would you like to bulk edit a system role ?","Total :":"Total :","Remaining :":"Remaining :","Instalments:":"Instalments:","This instalment doesn\\'t have any payment attached.":"This instalment doesn\\'t have any payment attached.","You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?":"You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?","An error has occured while seleting the payment gateway.":"An error has occured while seleting the payment gateway.","You're not allowed to add a discount on the product.":"You're not allowed to add a discount on the product.","You're not allowed to add a discount on the cart.":"You're not allowed to add a discount on the cart.","Cash Register : {register}":"Cash Register : {register}","The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?":"The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?","You don't have the right to edit the purchase price.":"You don't have the right to edit the purchase price.","Dynamic product can\\'t have their price updated.":"Dynamic product can\\'t have their price updated.","You\\'re not allowed to edit the order settings.":"You\\'re not allowed to edit the order settings.","Looks like there is either no products and no categories. How about creating those first to get started ?":"Looks like there is either no products and no categories. How about creating those first to get started ?","Create Categories":"Create Categories","You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?":"You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?","An unexpected error has occured while loading the form. Please check the log or contact the support.":"An unexpected error has occured while loading the form. Please check the log or contact the support.","We were not able to load the units. Make sure there are units attached on the unit group selected.":"We were not able to load the units. Make sure there are units attached on the unit group selected.","The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?":"The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?","There shoulnd\\'t be more option than there are units.":"There shoulnd\\'t be more option than there are units.","Either Selling or Purchase unit isn\\'t defined. Unable to proceed.":"Either Selling or Purchase unit isn\\'t defined. Unable to proceed.","Select the procured unit first before selecting the conversion unit.":"Select the procured unit first before selecting the conversion unit.","Convert to unit":"Convert to unit","An unexpected error has occured":"An unexpected error has occured","Unable to add product which doesn\\'t unit quantities defined.":"Unable to add product which doesn\\'t unit quantities defined.","{product}: Purchase Unit":"{product}: Purchase Unit","The product will be procured on that unit.":"The product will be procured on that unit.","Unkown Unit":"Unkown Unit","Choose Tax":"Choose Tax","The tax will be assigned to the procured product.":"The tax will be assigned to the procured product.","Show Details":"Show Details","Hide Details":"Hide Details","Important Notes":"Important Notes","Stock Management Products.":"Stock Management Products.","Doesn\\'t work with Grouped Product.":"Doesn\\'t work with Grouped Product.","Convert":"Convert","Looks like no valid products matched the searched term.":"Looks like no valid products matched the searched term.","This product doesn't have any stock to adjust.":"This product doesn't have any stock to adjust.","Select Unit":"Select Unit","Select the unit that you want to adjust the stock with.":"Select the unit that you want to adjust the stock with.","A similar product with the same unit already exists.":"A similar product with the same unit already exists.","Select Procurement":"Select Procurement","Select the procurement that you want to adjust the stock with.":"Select the procurement that you want to adjust the stock with.","Select Action":"Select Action","Select the action that you want to perform on the stock.":"Select the action that you want to perform on the stock.","Would you like to remove the selected products from the table ?":"Would you like to remove the selected products from the table ?","Unit:":"Unit:","Operation:":"Operation:","Procurement:":"Procurement:","Reason:":"Reason:","Provided":"Provided","Not Provided":"Not Provided","Remove Selected":"Remove Selected","Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.":"Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.","You haven\\'t yet generated any token for your account. Create one to get started.":"You haven\\'t yet generated any token for your account. Create one to get started.","You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?":"You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?","Date Range : {date1} - {date2}":"Date Range : {date1} - {date2}","Document : Best Products":"Document : Best Products","By : {user}":"By : {user}","Range : {date1} — {date2}":"Range : {date1} — {date2}","Document : Sale By Payment":"Document : Sale By Payment","Document : Customer Statement":"Document : Customer Statement","Customer : {selectedCustomerName}":"Customer : {selectedCustomerName}","All Categories":"All Categories","All Units":"All Units","Date : {date}":"Date : {date}","Document : {reportTypeName}":"Document : {reportTypeName}","Threshold":"Threshold","Select Units":"Select Units","An error has occured while loading the units.":"An error has occured while loading the units.","An error has occured while loading the categories.":"An error has occured while loading the categories.","Document : Payment Type":"Document : Payment Type","Document : Profit Report":"Document : Profit Report","Filter by Category":"Filter by Category","Filter by Units":"Filter by Units","An error has occured while loading the categories":"An error has occured while loading the categories","An error has occured while loading the units":"An error has occured while loading the units","By Type":"By Type","By User":"By User","By Category":"By Category","All Category":"All Category","Document : Sale Report":"Document : Sale Report","Filter By Category":"Filter By Category","Allow you to choose the category.":"Allow you to choose the category.","No category was found for proceeding the filtering.":"No category was found for proceeding the filtering.","Document : Sold Stock Report":"Document : Sold Stock Report","Filter by Unit":"Filter by Unit","Limit Results By Categories":"Limit Results By Categories","Limit Results By Units":"Limit Results By Units","Generate Report":"Generate Report","Document : Combined Products History":"Document : Combined Products History","Ini. Qty":"Ini. Qty","Added Quantity":"Added Quantity","Add. Qty":"Add. Qty","Sold Quantity":"Sold Quantity","Sold Qty":"Sold Qty","Defective Quantity":"Defective Quantity","Defec. Qty":"Defec. Qty","Final Quantity":"Final Quantity","Final Qty":"Final Qty","No data available":"No data available","Document : Yearly Report":"Document : Yearly Report","The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.":"The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.","Unable to edit this transaction":"Unable to edit this transaction","This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.":"This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.","Save Transaction":"Save Transaction","While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.":"While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.","The transaction is about to be saved. Would you like to confirm your action ?":"The transaction is about to be saved. Would you like to confirm your action ?","Unable to load the transaction":"Unable to load the transaction","You cannot edit this transaction if NexoPOS cannot perform background requests.":"You cannot edit this transaction if NexoPOS cannot perform background requests.","MySQL is selected as database driver":"MySQL is selected as database driver","Please provide the credentials to ensure NexoPOS can connect to the database.":"Please provide the credentials to ensure NexoPOS can connect to the database.","Sqlite is selected as database driver":"Sqlite is selected as database driver","Make sure Sqlite module is available for PHP. Your database will be located on the database directory.":"Make sure Sqlite module is available for PHP. Your database will be located on the database directory.","Checking database connectivity...":"Checking database connectivity...","Driver":"Driver","Set the database driver":"Set the database driver","Hostname":"Hostname","Provide the database hostname":"Provide the database hostname","Username required to connect to the database.":"Username required to connect to the database.","The username password required to connect.":"The username password required to connect.","Database Name":"Database Name","Provide the database name. Leave empty to use default file for SQLite Driver.":"Provide the database name. Leave empty to use default file for SQLite Driver.","Database Prefix":"Database Prefix","Provide the database prefix.":"Provide the database prefix.","Port":"Port","Provide the hostname port.":"Provide the hostname port.","NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.":"NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.","Install":"Install","Application":"Application","That is the application name.":"That is the application name.","Provide the administrator username.":"Provide the administrator username.","Provide the administrator email.":"Provide the administrator email.","What should be the password required for authentication.":"What should be the password required for authentication.","Should be the same as the password above.":"Should be the same as the password above.","Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.":"Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.","Choose your language to get started.":"Choose your language to get started.","Remaining Steps":"Remaining Steps","Database Configuration":"Database Configuration","Application Configuration":"Application Configuration","Language Selection":"Language Selection","Select what will be the default language of NexoPOS.":"Select what will be the default language of NexoPOS.","In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.":"In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.","Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.":"Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.","Please report this message to the support : ":"Please report this message to the support : ","No refunds made so far. Good news right?":"No refunds made so far. Good news right?","Open Register : %s":"Open Register : %s","Loading Coupon For : ":"Loading Coupon For : ","This coupon requires products that aren\\'t available on the cart at the moment.":"This coupon requires products that aren\\'t available on the cart at the moment.","This coupon requires products that belongs to specific categories that aren\\'t included at the moment.":"This coupon requires products that belongs to specific categories that aren\\'t included at the moment.","Too many results.":"Too many results.","New Customer":"New Customer","Purchases":"Purchases","Owed":"Owed","Usage :":"Usage :","Code :":"Code :","Order Reference":"Order Reference","The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?":"The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?","{product} : Units":"{product} : Units","This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.":"This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.","Previewing :":"Previewing :","Search for options":"Search for options","The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.":"The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.","The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.":"The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.","The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.":"The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.","The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.":"The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.","Invalid Error Message":"Invalid Error Message","Unamed Settings Page":"Unamed Settings Page","Description of unamed setting page":"Description of unamed setting page","Text Field":"Text Field","This is a sample text field.":"This is a sample text field.","No description has been provided.":"No description has been provided.","You\\'re using NexoPOS %s<\/a>":"You\\'re using NexoPOS %s<\/a>","If you haven\\'t asked this, please get in touch with the administrators.":"If you haven\\'t asked this, please get in touch with the administrators.","A new user has registered to your store (%s) with the email %s.":"A new user has registered to your store (%s) with the email %s.","The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.":"The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.","Note: ":"Note: ","Inclusive Product Taxes":"Inclusive Product Taxes","Exclusive Product Taxes":"Exclusive Product Taxes","Condition:":"Condition:","Date : %s":"Date : %s","NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.":"NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.","Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.":"Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.","Retry":"Retry","If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.":"If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.","Compute Products":"Compute Products","Unammed Section":"Unammed Section","%s order(s) has recently been deleted as they have expired.":"%s order(s) has recently been deleted as they have expired.","%s products will be updated":"%s products will be updated","Procurement %s":"Procurement %s","You cannot assign the same unit to more than one selling unit.":"You cannot assign the same unit to more than one selling unit.","The quantity to convert can\\'t be zero.":"The quantity to convert can\\'t be zero.","The source unit \"(%s)\" for the product \"%s":"The source unit \"(%s)\" for the product \"%s","The conversion from \"%s\" will cause a decimal value less than one count of the destination unit \"%s\".":"The conversion from \"%s\" will cause a decimal value less than one count of the destination unit \"%s\".","{customer_first_name}: displays the customer first name.":"{customer_first_name}: displays the customer first name.","{customer_last_name}: displays the customer last name.":"{customer_last_name}: displays the customer last name.","No Unit Selected":"No Unit Selected","Unit Conversion : {product}":"Unit Conversion : {product}","Convert {quantity} available":"Convert {quantity} available","The quantity should be greater than 0":"The quantity should be greater than 0","The provided quantity can\\'t result in any convertion for unit \"{destination}\"":"The provided quantity can\\'t result in any convertion for unit \"{destination}\"","Conversion Warning":"Conversion Warning","Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?":"Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?","Confirm Conversion":"Confirm Conversion","You\\'re about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?":"You\\'re about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?","Conversion Successful":"Conversion Successful","The product {product} has been converted successfully.":"The product {product} has been converted successfully.","An error occured while converting the product {product}":"An error occured while converting the product {product}","The quantity has been set to the maximum available":"The quantity has been set to the maximum available","The product {product} has no base unit":"The product {product} has no base unit","Developper Section":"Developper Section","The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?":"The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?","An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s":"An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s"} \ No newline at end of file diff --git a/lang/es.json b/lang/es.json index 95c378549..45736b214 100644 --- a/lang/es.json +++ b/lang/es.json @@ -1 +1,2696 @@ -{"displaying {perPage} on {items} items":"mostrando {perPage} en {items} items","The document has been generated.":"El documento ha sido generado.","Unexpected error occurred.":"Se ha producido un error inesperado.","{entries} entries selected":"{entries} entradas seleccionadas","Download":"descargar","This field is required.":"Este campo es obligatorio.","This field must contain a valid email address.":"Este campo debe contener una direcci\u00f3n de correo electr\u00f3nico v\u00e1lida.","Clear Selected Entries ?":"Borrar entradas seleccionadas ?","Would you like to clear all selected entries ?":"\u00bfDesea borrar todas las entradas seleccionadas?","No selection has been made.":"No se ha hecho ninguna selecci\u00f3n.","No action has been selected.":"No se ha seleccionado ninguna acci\u00f3n.","There is nothing to display...":"No hay nada que mostrar...","Bulk Actions":"Acciones masivas","Date":"fecha","N\/A":"N\/A","Sun":"Sab","Mon":"Mon","Tue":"Mar","Wed":"Mi\u00e9rcoles","Fri":"Vie","Sat":"S\u00e1b","Nothing to display":"Nada que mostrar","Delivery":"entrega","Take Away":"A domicilio","Unknown Type":"Tipo desconocido","Pending":"pendiente","Ongoing":"actual","Delivered":"entregado","Unknown Status":"Estado desconocido","Ready":"listo","Paid":"pagado","Hold":"sostener","Unpaid":"impagado","Partially Paid":"Parcialmente pagado","Password Forgotten ?":"Contrase\u00f1a olvidada ?","Sign In":"Inicia sesi\u00f3n","Register":"registro","An unexpected error occurred.":"Se ha producido un error inesperado.","OK":"De acuerdo","Unable to proceed the form is not valid.":"No se puede continuar el formulario no es v\u00e1lido.","Save Password":"Guardar contrase\u00f1a","Remember Your Password ?":"\u00bfRecuerdas tu contrase\u00f1a?","Submit":"Enviar","Already registered ?":"\u00bfYa est\u00e1 registrado?","Best Cashiers":"Los mejores cajeros","No result to display.":"No hay resultado que mostrar.","Well.. nothing to show for the meantime.":"pozo.. nada que mostrar mientras tanto.","Best Customers":"Los mejores clientes","Well.. nothing to show for the meantime":"pozo.. nada que mostrar mientras tanto","Total Sales":"Ventas totales","Today":"Hoy","Incomplete Orders":"\u00d3rdenes incompletas","Expenses":"expensas","Weekly Sales":"Ventas semanales","Week Taxes":"Impuestos semanales","Net Income":"Ingresos netos","Week Expenses":"Gastos semanales","Order":"orden","Refresh":"actualizar","Upload":"subir","Enabled":"Habilitado","Disabled":"Deshabilitado","Enable":"habilitar","Disable":"inutilizar","Gallery":"galer\u00eda","Medias Manager":"Gerente de Medios","Click Here Or Drop Your File To Upload":"Haga clic aqu\u00ed o deje caer su archivo para cargarlo","Nothing has already been uploaded":"Nada ya ha sido subido","File Name":"nombre de archivo","Uploaded At":"Subido en","By":"por","Previous":"anterior","Next":"pr\u00f3ximo","Use Selected":"Usar seleccionado","Clear All":"Borrar todo","Confirm Your Action":"Confirme su acci\u00f3n","Would you like to clear all the notifications ?":"\u00bfDesea borrar todas las notificaciones?","Permissions":"Permisos","Payment Summary":"Resumen de pagos","Sub Total":"Sub Total","Discount":"Descuento","Shipping":"Naviero","Coupons":"Cupones","Total":"Total","Taxes":"Impuestos","Change":"cambio","Order Status":"Estado del pedido","Customer":"Cliente","Type":"Tipo","Delivery Status":"Estado de entrega","Save":"Salvar","Payment Status":"Estado de pago","Products":"Productos","Would you proceed ?":"\u00bfProceder\u00eda?","The processing status of the order will be changed. Please confirm your action.":"Se cambiar\u00e1 el estado de procesamiento del pedido. Por favor, confirme su acci\u00f3n.","Instalments":"Cuotas","Create":"Crear","Add Instalment":"A\u00f1adir cuota","Would you like to create this instalment ?":"\u00bfTe gustar\u00eda crear esta entrega?","An unexpected error has occurred":"Se ha producido un error inesperado","Would you like to delete this instalment ?":"\u00bfDesea eliminar esta cuota?","Would you like to update that instalment ?":"\u00bfLe gustar\u00eda actualizar esa entrega?","Print":"Impresi\u00f3n","Store Details":"Detalles de la tienda","Order Code":"C\u00f3digo de pedido","Cashier":"cajero","Billing Details":"Detalles de facturaci\u00f3n","Shipping Details":"Detalles del env\u00edo","Product":"Producto","Unit Price":"Precio por unidad","Quantity":"Cantidad","Tax":"Impuesto","Total Price":"Precio total","Expiration Date":"fecha de caducidad","Due":"Pendiente","Customer Account":"Cuenta de cliente","Payment":"Pago","No payment possible for paid order.":"No es posible realizar ning\u00fan pago por pedido pagado.","Payment History":"Historial de pagos","Unable to proceed the form is not valid":"No poder continuar el formulario no es v\u00e1lido","Please provide a valid value":"Proporcione un valor v\u00e1lido","Refund With Products":"Reembolso con productos","Refund Shipping":"Env\u00edo de reembolso","Add Product":"A\u00f1adir producto","Damaged":"da\u00f1ado","Unspoiled":"virgen","Summary":"resumen","Payment Gateway":"Pasarela de pago","Screen":"pantalla","Select the product to perform a refund.":"Seleccione el producto para realizar un reembolso.","Please select a payment gateway before proceeding.":"Seleccione una pasarela de pago antes de continuar.","There is nothing to refund.":"No hay nada que reembolsar.","Please provide a valid payment amount.":"Indique un importe de pago v\u00e1lido.","The refund will be made on the current order.":"El reembolso se realizar\u00e1 en el pedido actual.","Please select a product before proceeding.":"Seleccione un producto antes de continuar.","Not enough quantity to proceed.":"No hay suficiente cantidad para proceder.","Would you like to delete this product ?":"\u00bfDesea eliminar este producto?","Customers":"Clientela","Dashboard":"Salpicadero","Order Type":"Tipo de pedido","Orders":"\u00d3rdenes","Cash Register":"Caja registradora","Reset":"Reiniciar","Cart":"Carro","Comments":"Comentarios","No products added...":"No hay productos a\u00f1adidos ...","Price":"Precio","Flat":"Departamento","Pay":"Pagar","Void":"Vac\u00eda","Current Balance":"Saldo actual","Full Payment":"Pago completo","The customer account can only be used once per order. Consider deleting the previously used payment.":"La cuenta del cliente solo se puede utilizar una vez por pedido.Considere la eliminaci\u00f3n del pago utilizado anteriormente.","Not enough funds to add {amount} as a payment. Available balance {balance}.":"No hay suficientes fondos para agregar {amount} como pago.Balance disponible {balance}.","Confirm Full Payment":"Confirmar el pago completo","A full payment will be made using {paymentType} for {total}":"Se realizar\u00e1 un pago completo utilizando {paymentType} para {total}","You need to provide some products before proceeding.":"Debe proporcionar algunos productos antes de continuar.","Unable to add the product, there is not enough stock. Remaining %s":"No se puede agregar el producto, no hay suficiente stock.%s Siendo","Add Images":"A\u00f1adir im\u00e1genes","New Group":"Nuevo grupo","Available Quantity":"Cantidad disponible","Delete":"Borrar","Would you like to delete this group ?":"\u00bfTe gustar\u00eda eliminar este grupo?","Your Attention Is Required":"Se requiere su atenci\u00f3n","Please select at least one unit group before you proceed.":"Seleccione al menos un grupo de unidades antes de continuar.","Unable to proceed as one of the unit group field is invalid":"Incapaz de proceder como uno de los campos de grupo unitario no es v\u00e1lido","Would you like to delete this variation ?":"\u00bfTe gustar\u00eda eliminar esta variaci\u00f3n?","Details":"Detalles","Unable to proceed, no product were provided.":"No se puede proceder, no se proporcion\u00f3 ning\u00fan producto.","Unable to proceed, one or more product has incorrect values.":"No se puede continuar, uno o m\u00e1s productos tienen valores incorrectos.","Unable to proceed, the procurement form is not valid.":"No se puede continuar, el formulario de adquisici\u00f3n no es v\u00e1lido.","Unable to submit, no valid submit URL were provided.":"No se puede enviar, no se proporcion\u00f3 una URL de env\u00edo v\u00e1lida.","No title is provided":"No se proporciona ning\u00fan t\u00edtulo","SKU":"SKU","Barcode":"C\u00f3digo de barras","Options":"Opciones","The product already exists on the table.":"El producto ya existe sobre la mesa.","The specified quantity exceed the available quantity.":"La cantidad especificada excede la cantidad disponible.","Unable to proceed as the table is empty.":"No se puede continuar porque la mesa est\u00e1 vac\u00eda.","The stock adjustment is about to be made. Would you like to confirm ?":"El ajuste de existencias est\u00e1 a punto de realizarse. \u00bfQuieres confirmar?","More Details":"M\u00e1s detalles","Useful to describe better what are the reasons that leaded to this adjustment.":"\u00datil para describir mejor cu\u00e1les son las razones que llevaron a este ajuste.","Would you like to remove this product from the table ?":"\u00bfLe gustar\u00eda quitar este producto de la mesa?","Search":"Buscar","Unit":"Unidad","Operation":"Operaci\u00f3n","Procurement":"Obtenci\u00f3n","Value":"Valor","Search and add some products":"Buscar y agregar algunos productos","Proceed":"Continuar","Unable to proceed. Select a correct time range.":"Incapaces de proceder. Seleccione un intervalo de tiempo correcto.","Unable to proceed. The current time range is not valid.":"Incapaces de proceder. El intervalo de tiempo actual no es v\u00e1lido.","Would you like to proceed ?":"\u00bfLe gustar\u00eda continuar?","No rules has been provided.":"No se han proporcionado reglas.","No valid run were provided.":"No se proporcionaron ejecuciones v\u00e1lidas.","Unable to proceed, the form is invalid.":"No se puede continuar, el formulario no es v\u00e1lido.","Unable to proceed, no valid submit URL is defined.":"No se puede continuar, no se define una URL de env\u00edo v\u00e1lida.","No title Provided":"Sin t\u00edtulo proporcionado","General":"General","Add Rule":"Agregar regla","Save Settings":"Guardar ajustes","An unexpected error occurred":"Ocurri\u00f3 un error inesperado","Ok":"OK","New Transaction":"Nueva transacci\u00f3n","Close":"Cerca","Would you like to delete this order":"\u00bfLe gustar\u00eda eliminar este pedido?","The current order will be void. This action will be recorded. Consider providing a reason for this operation":"El pedido actual ser\u00e1 nulo. Esta acci\u00f3n quedar\u00e1 registrada. Considere proporcionar una raz\u00f3n para esta operaci\u00f3n","Order Options":"Opciones de pedido","Payments":"Pagos","Refund & Return":"Reembolso y devoluci\u00f3n","Installments":"Cuotas","The form is not valid.":"El formulario no es v\u00e1lido.","Balance":"Equilibrio","Input":"Aporte","Register History":"Historial de registro","Close Register":"Cerrar Registro","Cash In":"Dinero en efectivo en","Cash Out":"Retiro de efectivo","Register Options":"Opciones de registro","History":"Historia","Unable to open this register. Only closed register can be opened.":"No se puede abrir este registro. Solo se puede abrir el registro cerrado.","Open The Register":"Abrir el registro","Exit To Orders":"Salir a pedidos","Looks like there is no registers. At least one register is required to proceed.":"Parece que no hay registros. Se requiere al menos un registro para continuar.","Create Cash Register":"Crear caja registradora","Yes":"s\u00ed","No":"No","Load Coupon":"Cargar cup\u00f3n","Apply A Coupon":"Aplicar un cup\u00f3n","Load":"Carga","Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.":"Ingrese el c\u00f3digo de cup\u00f3n que debe aplicarse al POS. Si se emite un cup\u00f3n para un cliente, ese cliente debe seleccionarse previamente.","Click here to choose a customer.":"Haga clic aqu\u00ed para elegir un cliente.","Coupon Name":"Nombre del cup\u00f3n","Usage":"Uso","Unlimited":"Ilimitado","Valid From":"V\u00e1lida desde","Valid Till":"V\u00e1lida hasta","Categories":"Categorias","Active Coupons":"Cupones activos","Apply":"Solicitar","Cancel":"Cancelar","Coupon Code":"C\u00f3digo promocional","The coupon is out from validity date range.":"El cup\u00f3n est\u00e1 fuera del rango de fechas de validez.","The coupon has applied to the cart.":"El cup\u00f3n se ha aplicado al carrito.","Percentage":"Porcentaje","The coupon has been loaded.":"Se carg\u00f3 el cup\u00f3n.","Use":"Usar","No coupon available for this customer":"No hay cup\u00f3n disponible para este cliente","Select Customer":"Seleccionar cliente","No customer match your query...":"Ning\u00fan cliente coincide con su consulta ...","Customer Name":"Nombre del cliente","Save Customer":"Salvar al cliente","No Customer Selected":"Ning\u00fan cliente seleccionado","In order to see a customer account, you need to select one customer.":"Para ver una cuenta de cliente, debe seleccionar un cliente.","Summary For":"Resumen para","Total Purchases":"Compras totales","Last Purchases":"\u00daltimas compras","Status":"Estado","No orders...":"Sin pedidos ...","Account Transaction":"Transacci\u00f3n de cuenta","Product Discount":"Descuento de producto","Cart Discount":"Descuento del carrito","Hold Order":"Mantener orden","The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.":"El pedido actual se pondr\u00e1 en espera. Puede recuperar este pedido desde el bot\u00f3n de pedido pendiente. Proporcionar una referencia podr\u00eda ayudarlo a identificar el pedido m\u00e1s r\u00e1pidamente.","Confirm":"Confirmar","Layaway Parameters":"Par\u00e1metros de layaway","Minimum Payment":"Pago m\u00ednimo","Instalments & Payments":"Cuotas y pagos","The final payment date must be the last within the instalments.":"La fecha de pago final debe ser la \u00faltima dentro de las cuotas.","Amount":"Monto","You must define layaway settings before proceeding.":"Debe definir la configuraci\u00f3n de layaway antes de continuar.","Please provide instalments before proceeding.":"Proporcione cuotas antes de continuar.","Unable to process, the form is not valid":"No se puede continuar, el formulario no es v\u00e1lido","One or more instalments has an invalid date.":"Una o m\u00e1s cuotas tienen una fecha no v\u00e1lida.","One or more instalments has an invalid amount.":"Una o m\u00e1s cuotas tienen un monto no v\u00e1lido.","One or more instalments has a date prior to the current date.":"Una o m\u00e1s cuotas tienen una fecha anterior a la fecha actual.","Total instalments must be equal to the order total.":"Las cuotas totales deben ser iguales al total del pedido.","Order Note":"Nota de pedido","Note":"Nota","More details about this order":"M\u00e1s detalles sobre este pedido","Display On Receipt":"Mostrar al recibir","Will display the note on the receipt":"Mostrar\u00e1 la nota en el recibo","Open":"Abierto","Define The Order Type":"Definir el tipo de orden","Payment List":"Lista de pagos","List Of Payments":"Lista de pagos","No Payment added.":"Sin pago agregado.","Select Payment":"Seleccione Pago","Submit Payment":"Enviar pago","Layaway":"Apartado","On Hold":"En espera","Tendered":"Licitado","Nothing to display...":"Nada que mostrar...","Define Quantity":"Definir cantidad","Please provide a quantity":"Por favor proporcione una cantidad","Search Product":"Buscar producto","There is nothing to display. Have you started the search ?":"No hay nada que mostrar. \u00bfHas comenzado la b\u00fasqueda?","Shipping & Billing":"Envio de factura","Tax & Summary":"Impuestos y resumen","Settings":"Ajustes","Select Tax":"Seleccionar impuesto","Define the tax that apply to the sale.":"Defina el impuesto que se aplica a la venta.","Define how the tax is computed":"Definir c\u00f3mo se calcula el impuesto","Exclusive":"Exclusivo","Inclusive":"Inclusivo","Define when that specific product should expire.":"Defina cu\u00e1ndo debe caducar ese producto espec\u00edfico.","Renders the automatically generated barcode.":"Muestra el c\u00f3digo de barras generado autom\u00e1ticamente.","Tax Type":"Tipo de impuesto","Adjust how tax is calculated on the item.":"Ajusta c\u00f3mo se calcula el impuesto sobre el art\u00edculo.","Unable to proceed. The form is not valid.":"Incapaces de proceder. El formulario no es v\u00e1lido.","Units & Quantities":"Unidades y Cantidades","Sale Price":"Precio de venta","Wholesale Price":"Precio al por mayor","Select":"Seleccione","The customer has been loaded":"El cliente ha sido cargado","This coupon is already added to the cart":"Este cup\u00f3n ya est\u00e1 agregado al carrito","No tax group assigned to the order":"Ning\u00fan grupo de impuestos asignado al pedido","Layaway defined":"Apartado definido","Okay":"Okey","An unexpected error has occurred while fecthing taxes.":"Ha ocurrido un error inesperado al cobrar impuestos.","OKAY":"OKEY","Loading...":"Cargando...","Profile":"Perfil","Logout":"Cerrar sesi\u00f3n","Unnamed Page":"P\u00e1gina sin nombre","No description":"Sin descripci\u00f3n","Name":"Nombre","Provide a name to the resource.":"Proporcione un nombre al recurso.","Edit":"Editar","Would you like to delete this ?":"\u00bfLe gustar\u00eda borrar esto?","Delete Selected Groups":"Eliminar grupos seleccionados","Activate Your Account":"Activa tu cuenta","The account you have created for __%s__, require an activation. In order to proceed, please click on the following link":"La cuenta que ha creado para __%s__ requiere una activaci\u00f3n. Para continuar, haga clic en el siguiente enlace","Password Recovered":"Contrase\u00f1a recuperada","Your password has been successfully updated on __%s__. You can now login with your new password.":"Su contrase\u00f1a se ha actualizado correctamente el __%s__. Ahora puede iniciar sesi\u00f3n con su nueva contrase\u00f1a.","Password Recovery":"Recuperaci\u00f3n de contrase\u00f1a","Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ":"Alguien ha solicitado restablecer su contrase\u00f1a en __ \"%s\" __. Si recuerda haber realizado esa solicitud, contin\u00fae haciendo clic en el bot\u00f3n a continuaci\u00f3n.","Reset Password":"Restablecer la contrase\u00f1a","New User Registration":"Registro de nuevo usuario","Your Account Has Been Created":"Tu cuenta ha sido creada","Login":"Acceso","Save Coupon":"Guardar cup\u00f3n","This field is required":"Este campo es obligatorio","The form is not valid. Please check it and try again":"El formulario no es v\u00e1lido. por favor revisalo e int\u00e9ntalo de nuevo","mainFieldLabel not defined":"mainFieldLabel no definido","Create Customer Group":"Crear grupo de clientes","Save a new customer group":"Guardar un nuevo grupo de clientes","Update Group":"Grupo de actualizaci\u00f3n","Modify an existing customer group":"Modificar un grupo de clientes existente","Managing Customers Groups":"Gesti\u00f3n de grupos de clientes","Create groups to assign customers":"Crea grupos para asignar clientes","Create Customer":"Crear cliente","Managing Customers":"Gesti\u00f3n de clientes","List of registered customers":"Lista de clientes registrados","Your Module":"Tu m\u00f3dulo","Choose the zip file you would like to upload":"Elija el archivo zip que le gustar\u00eda cargar","Managing Orders":"Gesti\u00f3n de pedidos","Manage all registered orders.":"Gestione todos los pedidos registrados.","Failed":"Ha fallado","Order receipt":"Recibo de pedido","Hide Dashboard":"Ocultar panel","Unknown Payment":"Pago desconocido","Procurement Name":"Nombre de la adquisici\u00f3n","Unable to proceed no products has been provided.":"No se puede continuar, no se ha proporcionado ning\u00fan producto.","Unable to proceed, one or more products is not valid.":"No se puede continuar, uno o m\u00e1s productos no son v\u00e1lidos.","Unable to proceed the procurement form is not valid.":"No se puede continuar, el formulario de adquisici\u00f3n no es v\u00e1lido.","Unable to proceed, no submit url has been provided.":"No se puede continuar, no se ha proporcionado ninguna URL de env\u00edo.","SKU, Barcode, Product name.":"SKU, c\u00f3digo de barras, nombre del producto.","Email":"Correo electr\u00f3nico","Phone":"Tel\u00e9fono","First Address":"Primera direccion","Second Address":"Segunda direcci\u00f3n","Address":"Habla a","City":"Ciudad","PO.Box":"PO.Box","Description":"Descripci\u00f3n","Included Products":"Productos incluidos","Apply Settings":"Aplicar configuraciones","Basic Settings":"Ajustes b\u00e1sicos","Visibility Settings":"Configuraci\u00f3n de visibilidad","Year":"A\u00f1o","Sales":"Ventas","Income":"Ingreso","January":"enero","March":"marcha","April":"abril","May":"Mayo","June":"junio","July":"mes de julio","August":"agosto","September":"septiembre","October":"octubre","November":"noviembre","December":"diciembre","Purchase Price":"Precio de compra","Profit":"Lucro","Tax Value":"Valor fiscal","Reward System Name":"Nombre del sistema de recompensas","Missing Dependency":"Dependencia faltante","Go Back":"Regresa","Continue":"Continuar","Home":"Casa","Not Allowed Action":"Acci\u00f3n no permitida","Try Again":"Intentar otra vez","Access Denied":"Acceso denegado","Sign Up":"Inscribirse","Unable to find a module having the identifier\/namespace \"%s\"":"No se pudo encontrar un m\u00f3dulo con el identificador\/espacio de nombres \"%s\"","What is the CRUD single resource name ? [Q] to quit.":"\u00bfCu\u00e1l es el nombre de recurso \u00fanico de CRUD? [Q] para salir.","Which table name should be used ? [Q] to quit.":"\u00bfQu\u00e9 nombre de tabla deber\u00eda usarse? [Q] para salir.","If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Si su recurso CRUD tiene una relaci\u00f3n, menci\u00f3nelo como sigue \"foreign_table, foreign_key, local_key \"? [S] para omitir, [Q] para salir.","Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"\u00bfAgregar una nueva relaci\u00f3n? Mencionarlo como sigue \"foreign_table, foreign_key, local_key\"? [S] para omitir, [Q] para salir.","Not enough parameters provided for the relation.":"No se proporcionaron suficientes par\u00e1metros para la relaci\u00f3n.","The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"":"El recurso CRUD \"%s\" para el m\u00f3dulo \"%s\" se ha generado en \"%s\"","The CRUD resource \"%s\" has been generated at %s":"El recurso CRUD \"%s\" se ha generado en%s","An unexpected error has occurred.":"Un error inesperado ha ocurrido.","Unable to find the requested module.":"No se pudo encontrar el m\u00f3dulo solicitado.","Version":"Versi\u00f3n","Path":"Camino","Index":"\u00cdndice","Entry Class":"Clase de entrada","Routes":"Rutas","Api":"API","Controllers":"Controladores","Views":"Puntos de vista","Attribute":"Atributo","Namespace":"Espacio de nombres","Author":"Autor","The product barcodes has been refreshed successfully.":"Los c\u00f3digos de barras del producto se han actualizado correctamente.","What is the store name ? [Q] to quit.":"Cual es el nombre de la tienda? [Q] para salir.","Please provide at least 6 characters for store name.":"Proporcione al menos 6 caracteres para el nombre de la tienda.","What is the administrator password ? [Q] to quit.":"\u00bfCu\u00e1l es la contrase\u00f1a de administrador? [Q] para salir.","Please provide at least 6 characters for the administrator password.":"Proporcione al menos 6 caracteres para la contrase\u00f1a de administrador.","What is the administrator email ? [Q] to quit.":"\u00bfQu\u00e9 es el correo electr\u00f3nico del administrador? [Q] para salir.","Please provide a valid email for the administrator.":"Proporcione un correo electr\u00f3nico v\u00e1lido para el administrador.","What is the administrator username ? [Q] to quit.":"\u00bfCu\u00e1l es el nombre de usuario del administrador? [Q] para salir.","Please provide at least 5 characters for the administrator username.":"Proporcione al menos 5 caracteres para el nombre de usuario del administrador.","Coupons List":"Lista de cupones","Display all coupons.":"Muestre todos los cupones.","No coupons has been registered":"No se han registrado cupones","Add a new coupon":"Agregar un nuevo cup\u00f3n","Create a new coupon":"Crea un nuevo cup\u00f3n","Register a new coupon and save it.":"Registre un nuevo cup\u00f3n y gu\u00e1rdelo.","Edit coupon":"Editar cup\u00f3n","Modify Coupon.":"Modificar cup\u00f3n.","Return to Coupons":"Volver a Cupones","Might be used while printing the coupon.":"Puede usarse al imprimir el cup\u00f3n.","Percentage Discount":"Descuento porcentual","Flat Discount":"Descuento plano","Define which type of discount apply to the current coupon.":"Defina qu\u00e9 tipo de descuento se aplica al cup\u00f3n actual.","Discount Value":"Valor de descuento","Define the percentage or flat value.":"Defina el porcentaje o valor fijo.","Valid Until":"V\u00e1lido hasta","Minimum Cart Value":"Valor m\u00ednimo del carrito","What is the minimum value of the cart to make this coupon eligible.":"\u00bfCu\u00e1l es el valor m\u00ednimo del carrito para que este cup\u00f3n sea elegible?","Maximum Cart Value":"Valor m\u00e1ximo del carrito","Valid Hours Start":"Inicio de horas v\u00e1lidas","Define form which hour during the day the coupons is valid.":"Defina de qu\u00e9 hora del d\u00eda son v\u00e1lidos los cupones.","Valid Hours End":"Fin de las horas v\u00e1lidas","Define to which hour during the day the coupons end stop valid.":"Defina a qu\u00e9 hora del d\u00eda dejar\u00e1n de ser v\u00e1lidos los cupones.","Limit Usage":"Limitar el uso","Define how many time a coupons can be redeemed.":"Defina cu\u00e1ntas veces se pueden canjear los cupones.","Select Products":"Seleccionar productos","The following products will be required to be present on the cart, in order for this coupon to be valid.":"Los siguientes productos deber\u00e1n estar presentes en el carrito para que este cup\u00f3n sea v\u00e1lido.","Select Categories":"Seleccionar categor\u00edas","The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.":"Los productos asignados a una de estas categor\u00edas deben estar en el carrito para que este cup\u00f3n sea v\u00e1lido.","Created At":"Creado en","Undefined":"Indefinido","Delete a licence":"Eliminar una licencia","Customer Coupons List":"Lista de cupones para clientes","Display all customer coupons.":"Muestre todos los cupones de clientes.","No customer coupons has been registered":"No se han registrado cupones de clientes.","Add a new customer coupon":"Agregar un cup\u00f3n de cliente nuevo","Create a new customer coupon":"Crea un nuevo cup\u00f3n de cliente","Register a new customer coupon and save it.":"Registre un cup\u00f3n de cliente nuevo y gu\u00e1rdelo.","Edit customer coupon":"Editar cup\u00f3n de cliente","Modify Customer Coupon.":"Modificar cup\u00f3n de cliente.","Return to Customer Coupons":"Volver a Cupones para clientes","Id":"Identificaci\u00f3n","Limit":"L\u00edmite","Created_at":"Creado en","Updated_at":"Actualizado_en","Code":"C\u00f3digo","Customers List":"Lista de clientes","Display all customers.":"Mostrar todos los clientes.","No customers has been registered":"No se ha registrado ning\u00fan cliente","Add a new customer":"Agregar un nuevo cliente","Create a new customer":"Crea un nuevo cliente","Register a new customer and save it.":"Registre un nuevo cliente y gu\u00e1rdelo.","Edit customer":"Editar cliente","Modify Customer.":"Modificar cliente.","Return to Customers":"Regreso a Clientes","Provide a unique name for the customer.":"Proporcione un nombre \u00fanico para el cliente.","Group":"Grupo","Assign the customer to a group":"Asignar al cliente a un grupo","Phone Number":"N\u00famero de tel\u00e9fono","Provide the customer phone number":"Proporcione el n\u00famero de tel\u00e9fono del cliente.","PO Box":"Apartado de correos","Provide the customer PO.Box":"Proporcionar al cliente PO.Box","Not Defined":"No definida","Male":"Masculino","Female":"Mujer","Gender":"G\u00e9nero","Billing Address":"Direcci\u00f3n de Envio","Billing phone number.":"N\u00famero de tel\u00e9fono de facturaci\u00f3n.","Address 1":"Direcci\u00f3n 1","Billing First Address.":"Primera direcci\u00f3n de facturaci\u00f3n.","Address 2":"Direcci\u00f3n 2","Billing Second Address.":"Segunda direcci\u00f3n de facturaci\u00f3n.","Country":"Pa\u00eds","Billing Country.":"Pa\u00eds de facturaci\u00f3n.","Postal Address":"Direccion postal","Company":"Empresa","Shipping Address":"Direcci\u00f3n de Env\u00edo","Shipping phone number.":"N\u00famero de tel\u00e9fono de env\u00edo.","Shipping First Address.":"Primera direcci\u00f3n de env\u00edo.","Shipping Second Address.":"Segunda direcci\u00f3n de env\u00edo.","Shipping Country.":"Pa\u00eds de env\u00edo.","Account Credit":"Cr\u00e9dito de cuenta","Owed Amount":"Monto adeudado","Purchase Amount":"Monto de la compra","Rewards":"Recompensas","Delete a customers":"Eliminar un cliente","Delete Selected Customers":"Eliminar clientes seleccionados","Customer Groups List":"Lista de grupos de clientes","Display all Customers Groups.":"Mostrar todos los grupos de clientes.","No Customers Groups has been registered":"No se ha registrado ning\u00fan grupo de clientes","Add a new Customers Group":"Agregar un nuevo grupo de clientes","Create a new Customers Group":"Crear un nuevo grupo de clientes","Register a new Customers Group and save it.":"Registre un nuevo grupo de clientes y gu\u00e1rdelo.","Edit Customers Group":"Editar grupo de clientes","Modify Customers group.":"Modificar grupo Clientes.","Return to Customers Groups":"Regresar a Grupos de Clientes","Reward System":"Sistema de recompensas","Select which Reward system applies to the group":"Seleccione qu\u00e9 sistema de recompensas se aplica al grupo","Minimum Credit Amount":"Monto m\u00ednimo de cr\u00e9dito","A brief description about what this group is about":"Una breve descripci\u00f3n sobre de qu\u00e9 se trata este grupo.","Created On":"Creado en","Customer Orders List":"Lista de pedidos de clientes","Display all customer orders.":"Muestra todos los pedidos de los clientes.","No customer orders has been registered":"No se han registrado pedidos de clientes","Add a new customer order":"Agregar un nuevo pedido de cliente","Create a new customer order":"Crear un nuevo pedido de cliente","Register a new customer order and save it.":"Registre un nuevo pedido de cliente y gu\u00e1rdelo.","Edit customer order":"Editar pedido de cliente","Modify Customer Order.":"Modificar pedido de cliente.","Return to Customer Orders":"Volver a pedidos de clientes","Created at":"Creado en","Customer Id":"Identificaci\u00f3n del cliente","Discount Percentage":"Porcentaje de descuento","Discount Type":"Tipo de descuento","Final Payment Date":"Fecha de pago final","Process Status":"Estado del proceso","Shipping Rate":"Tarifa de envio","Shipping Type":"Tipo de env\u00edo","Title":"T\u00edtulo","Total installments":"Cuotas totales","Updated at":"Actualizado en","Uuid":"Uuid","Voidance Reason":"Raz\u00f3n de anulaci\u00f3n","Customer Rewards List":"Lista de recompensas para clientes","Display all customer rewards.":"Muestre todas las recompensas de los clientes.","No customer rewards has been registered":"No se han registrado recompensas para clientes","Add a new customer reward":"Agregar una nueva recompensa para clientes","Create a new customer reward":"Crear una nueva recompensa para el cliente","Register a new customer reward and save it.":"Registre una recompensa de nuevo cliente y gu\u00e1rdela.","Edit customer reward":"Editar la recompensa del cliente","Modify Customer Reward.":"Modificar la recompensa del cliente.","Return to Customer Rewards":"Volver a Recompensas para clientes","Points":"Puntos","Target":"Objetivo","Reward Name":"Nombre de la recompensa","Last Update":"\u00daltima actualizaci\u00f3n","Active":"Activo","Users Group":"Grupo de usuarios","None":"Ninguno","Recurring":"Peri\u00f3dico","Start of Month":"Inicio de mes","Mid of Month":"Mediados de mes","End of Month":"Fin de mes","X days Before Month Ends":"X d\u00edas antes de que finalice el mes","X days After Month Starts":"X d\u00edas despu\u00e9s del comienzo del mes","Occurrence":"Ocurrencia","Occurrence Value":"Valor de ocurrencia","Must be used in case of X days after month starts and X days before month ends.":"Debe usarse en el caso de X d\u00edas despu\u00e9s del comienzo del mes y X d\u00edas antes de que finalice el mes.","Category":"Categor\u00eda","Month Starts":"Comienza el mes","Month Middle":"Mes medio","Month Ends":"Fin de mes","X Days Before Month Ends":"X d\u00edas antes de que termine el mes","Updated At":"Actualizado en","Hold Orders List":"Lista de pedidos en espera","Display all hold orders.":"Muestra todas las \u00f3rdenes de retenci\u00f3n.","No hold orders has been registered":"No se ha registrado ninguna orden de retenci\u00f3n","Add a new hold order":"Agregar una nueva orden de retenci\u00f3n","Create a new hold order":"Crear una nueva orden de retenci\u00f3n","Register a new hold order and save it.":"Registre una nueva orden de retenci\u00f3n y gu\u00e1rdela.","Edit hold order":"Editar orden de retenci\u00f3n","Modify Hold Order.":"Modificar orden de retenci\u00f3n.","Return to Hold Orders":"Volver a \u00f3rdenes de espera","Orders List":"Lista de pedidos","Display all orders.":"Muestra todos los pedidos.","No orders has been registered":"No se han registrado pedidos","Add a new order":"Agregar un nuevo pedido","Create a new order":"Crea un nuevo pedido","Register a new order and save it.":"Registre un nuevo pedido y gu\u00e1rdelo.","Edit order":"Editar orden","Modify Order.":"Modificar orden.","Return to Orders":"Volver a pedidos","Discount Rate":"Tasa de descuento","The order and the attached products has been deleted.":"Se ha eliminado el pedido y los productos adjuntos.","Invoice":"Factura","Receipt":"Recibo","Order Instalments List":"Lista de pagos a plazos","Display all Order Instalments.":"Mostrar todas las cuotas de pedidos.","No Order Instalment has been registered":"No se ha registrado ning\u00fan pago a plazos","Add a new Order Instalment":"Agregar un nuevo pago a plazos","Create a new Order Instalment":"Crear un nuevo pago a plazos","Register a new Order Instalment and save it.":"Registre un nuevo pago a plazos y gu\u00e1rdelo.","Edit Order Instalment":"Editar pago a plazos","Modify Order Instalment.":"Modificar el plazo de la orden.","Return to Order Instalment":"Volver a la orden de pago a plazos","Order Id":"Solicitar ID","Procurements List":"Lista de adquisiciones","Display all procurements.":"Visualice todas las adquisiciones.","No procurements has been registered":"No se han registrado adquisiciones","Add a new procurement":"Agregar una nueva adquisici\u00f3n","Create a new procurement":"Crear una nueva adquisici\u00f3n","Register a new procurement and save it.":"Registre una nueva adquisici\u00f3n y gu\u00e1rdela.","Edit procurement":"Editar adquisiciones","Modify Procurement.":"Modificar adquisiciones.","Return to Procurements":"Volver a Adquisiciones","Provider Id":"ID de proveedor","Total Items":"Articulos totales","Provider":"Proveedor","Stocked":"En stock","Procurement Products List":"Lista de productos de adquisiciones","Display all procurement products.":"Muestre todos los productos de aprovisionamiento.","No procurement products has been registered":"No se ha registrado ning\u00fan producto de adquisici\u00f3n","Add a new procurement product":"Agregar un nuevo producto de adquisici\u00f3n","Create a new procurement product":"Crear un nuevo producto de compras","Register a new procurement product and save it.":"Registre un nuevo producto de adquisici\u00f3n y gu\u00e1rdelo.","Edit procurement product":"Editar producto de adquisici\u00f3n","Modify Procurement Product.":"Modificar el producto de adquisici\u00f3n.","Return to Procurement Products":"Regresar a Productos de Adquisici\u00f3n","Define what is the expiration date of the product.":"Defina cu\u00e1l es la fecha de vencimiento del producto.","On":"En","Category Products List":"Lista de productos de categor\u00eda","Display all category products.":"Mostrar todos los productos de la categor\u00eda.","No category products has been registered":"No se ha registrado ninguna categor\u00eda de productos","Add a new category product":"Agregar un producto de nueva categor\u00eda","Create a new category product":"Crear un producto de nueva categor\u00eda","Register a new category product and save it.":"Registre un producto de nueva categor\u00eda y gu\u00e1rdelo.","Edit category product":"Editar producto de categor\u00eda","Modify Category Product.":"Modificar producto de categor\u00eda.","Return to Category Products":"Volver a la categor\u00eda Productos","No Parent":"Sin padre","Preview":"Avance","Provide a preview url to the category.":"Proporcione una URL de vista previa de la categor\u00eda.","Displays On POS":"Muestra en POS","Parent":"Padre","If this category should be a child category of an existing category":"Si esta categor\u00eda debe ser una categor\u00eda secundaria de una categor\u00eda existente","Total Products":"Productos totales","Products List":"Lista de productos","Display all products.":"Mostrar todos los productos.","No products has been registered":"No se ha registrado ning\u00fan producto","Add a new product":"Agregar un nuevo producto","Create a new product":"Crea un nuevo producto","Register a new product and save it.":"Registre un nuevo producto y gu\u00e1rdelo.","Edit product":"Editar producto","Modify Product.":"Modificar producto.","Return to Products":"Volver a Productos","Assigned Unit":"Unidad asignada","The assigned unit for sale":"La unidad asignada a la venta","Define the regular selling price.":"Defina el precio de venta regular.","Define the wholesale price.":"Defina el precio al por mayor.","Preview Url":"URL de vista previa","Provide the preview of the current unit.":"Proporciona la vista previa de la unidad actual.","Identification":"Identificaci\u00f3n","Define the barcode value. Focus the cursor here before scanning the product.":"Defina el valor del c\u00f3digo de barras. Enfoque el cursor aqu\u00ed antes de escanear el producto.","Define the barcode type scanned.":"Defina el tipo de c\u00f3digo de barras escaneado.","EAN 8":"EAN 8","EAN 13":"EAN 13","Barcode Type":"Tipo de c\u00f3digo de barras","Select to which category the item is assigned.":"Seleccione a qu\u00e9 categor\u00eda est\u00e1 asignado el art\u00edculo.","Materialized Product":"Producto materializado","Dematerialized Product":"Producto desmaterializado","Define the product type. Applies to all variations.":"Defina el tipo de producto. Se aplica a todas las variaciones.","Product Type":"tipo de producto","Define a unique SKU value for the product.":"Defina un valor de SKU \u00fanico para el producto.","On Sale":"En venta","Hidden":"Oculto","Define whether the product is available for sale.":"Defina si el producto est\u00e1 disponible para la venta.","Enable the stock management on the product. Will not work for service or uncountable products.":"Habilite la gesti\u00f3n de stock del producto. No funcionar\u00e1 para servicios o productos incontables.","Stock Management Enabled":"Gesti\u00f3n de stock habilitada","Units":"Unidades","Accurate Tracking":"Seguimiento preciso","What unit group applies to the actual item. This group will apply during the procurement.":"Qu\u00e9 grupo de unidades se aplica al art\u00edculo real. Este grupo se aplicar\u00e1 durante la contrataci\u00f3n.","Unit Group":"Grupo de unidad","Determine the unit for sale.":"Determine la unidad a la venta.","Selling Unit":"Unidad de venta","Expiry":"Expiraci\u00f3n","Product Expires":"El producto caduca","Set to \"No\" expiration time will be ignored.":"Se ignorar\u00e1 el tiempo de caducidad establecido en \"No\".","Prevent Sales":"Prevenir ventas","Allow Sales":"Permitir ventas","Determine the action taken while a product has expired.":"Determine la acci\u00f3n tomada mientras un producto ha caducado.","On Expiration":"Al vencimiento","Select the tax group that applies to the product\/variation.":"Seleccione el grupo de impuestos que se aplica al producto\/variaci\u00f3n.","Tax Group":"Grupo fiscal","Define what is the type of the tax.":"Defina cu\u00e1l es el tipo de impuesto.","Images":"Imagenes","Image":"Imagen","Choose an image to add on the product gallery":"Elija una imagen para agregar en la galer\u00eda de productos","Is Primary":"Es primaria","Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.":"Defina si la imagen debe ser primaria. Si hay m\u00e1s de una imagen principal, se elegir\u00e1 una para usted.","Sku":"Sku","Materialized":"Materializado","Dematerialized":"Desmaterializado","Available":"Disponible","See Quantities":"Ver Cantidades","See History":"Ver Historia","Would you like to delete selected entries ?":"\u00bfLe gustar\u00eda eliminar las entradas seleccionadas?","Product Histories":"Historias de productos","Display all product histories.":"Muestra todos los historiales de productos.","No product histories has been registered":"No se ha registrado ning\u00fan historial de productos","Add a new product history":"Agregar un nuevo historial de productos","Create a new product history":"Crear un nuevo historial de productos","Register a new product history and save it.":"Registre un nuevo historial de producto y gu\u00e1rdelo.","Edit product history":"Editar el historial de productos","Modify Product History.":"Modificar el historial del producto.","Return to Product Histories":"Volver a Historias de productos","After Quantity":"Despu\u00e9s de la cantidad","Before Quantity":"Antes de la cantidad","Operation Type":"Tipo de operaci\u00f3n","Order id":"Solicitar ID","Procurement Id":"ID de adquisici\u00f3n","Procurement Product Id":"ID de producto de adquisici\u00f3n","Product Id":"ID del Producto","Unit Id":"ID de unidad","P. Quantity":"P. Cantidad","N. Quantity":"N. Cantidad","Defective":"Defectuoso","Deleted":"Eliminado","Removed":"Remoto","Returned":"Devuelto","Sold":"Vendido","Added":"Adicional","Incoming Transfer":"Transferencia entrante","Outgoing Transfer":"Transferencia saliente","Transfer Rejected":"Transferencia rechazada","Transfer Canceled":"Transferencia cancelada","Void Return":"Retorno vac\u00edo","Adjustment Return":"Retorno de ajuste","Adjustment Sale":"Venta de ajuste","Product Unit Quantities List":"Lista de cantidades de unidades de producto","Display all product unit quantities.":"Muestra todas las cantidades de unidades de producto.","No product unit quantities has been registered":"No se han registrado cantidades unitarias de producto","Add a new product unit quantity":"Agregar una nueva cantidad de unidades de producto","Create a new product unit quantity":"Crear una nueva cantidad de unidades de producto","Register a new product unit quantity and save it.":"Registre una nueva cantidad de unidad de producto y gu\u00e1rdela.","Edit product unit quantity":"Editar la cantidad de unidades de producto","Modify Product Unit Quantity.":"Modificar la cantidad de unidades de producto.","Return to Product Unit Quantities":"Volver al producto Cantidades unitarias","Product id":"ID del Producto","Providers List":"Lista de proveedores","Display all providers.":"Mostrar todos los proveedores.","No providers has been registered":"No se ha registrado ning\u00fan proveedor","Add a new provider":"Agregar un nuevo proveedor","Create a new provider":"Crea un nuevo proveedor","Register a new provider and save it.":"Registre un nuevo proveedor y gu\u00e1rdelo.","Edit provider":"Editar proveedor","Modify Provider.":"Modificar proveedor.","Return to Providers":"Volver a proveedores","Provide the provider email. Might be used to send automated email.":"Proporcione el correo electr\u00f3nico del proveedor. Podr\u00eda usarse para enviar correos electr\u00f3nicos automatizados.","Contact phone number for the provider. Might be used to send automated SMS notifications.":"N\u00famero de tel\u00e9fono de contacto del proveedor. Puede usarse para enviar notificaciones autom\u00e1ticas por SMS.","First address of the provider.":"Primera direcci\u00f3n del proveedor.","Second address of the provider.":"Segunda direcci\u00f3n del proveedor.","Further details about the provider":"M\u00e1s detalles sobre el proveedor","Amount Due":"Monto adeudado","Amount Paid":"Cantidad pagada","See Procurements":"Ver adquisiciones","Registers List":"Lista de registros","Display all registers.":"Muestra todos los registros.","No registers has been registered":"No se ha registrado ning\u00fan registro","Add a new register":"Agregar un nuevo registro","Create a new register":"Crea un nuevo registro","Register a new register and save it.":"Registre un nuevo registro y gu\u00e1rdelo.","Edit register":"Editar registro","Modify Register.":"Modificar registro.","Return to Registers":"Regresar a Registros","Closed":"Cerrado","Define what is the status of the register.":"Defina cu\u00e1l es el estado del registro.","Provide mode details about this cash register.":"Proporcione detalles sobre el modo de esta caja registradora.","Unable to delete a register that is currently in use":"No se puede eliminar un registro que est\u00e1 actualmente en uso","Used By":"Usado por","Register History List":"Registro de lista de historial","Display all register histories.":"Muestra todos los historiales de registros.","No register histories has been registered":"No se han registrado historiales de registro","Add a new register history":"Agregar un nuevo historial de registro","Create a new register history":"Crea un nuevo historial de registro","Register a new register history and save it.":"Registre un nuevo historial de registros y gu\u00e1rdelo.","Edit register history":"Editar historial de registro","Modify Registerhistory.":"Modificar Registerhistory.","Return to Register History":"Volver al historial de registros","Register Id":"ID de registro","Action":"Acci\u00f3n","Register Name":"Nombre de registro","Done At":"Hecho","Reward Systems List":"Lista de sistemas de recompensas","Display all reward systems.":"Muestre todos los sistemas de recompensa.","No reward systems has been registered":"No se ha registrado ning\u00fan sistema de recompensa","Add a new reward system":"Agregar un nuevo sistema de recompensas","Create a new reward system":"Crea un nuevo sistema de recompensas","Register a new reward system and save it.":"Registre un nuevo sistema de recompensas y gu\u00e1rdelo.","Edit reward system":"Editar sistema de recompensas","Modify Reward System.":"Modificar el sistema de recompensas.","Return to Reward Systems":"Regresar a los sistemas de recompensas","From":"De","The interval start here.":"El intervalo comienza aqu\u00ed.","To":"A","The interval ends here.":"El intervalo termina aqu\u00ed.","Points earned.":"Puntos ganados.","Coupon":"Cup\u00f3n","Decide which coupon you would apply to the system.":"Decida qu\u00e9 cup\u00f3n aplicar\u00e1 al sistema.","This is the objective that the user should reach to trigger the reward.":"Este es el objetivo que debe alcanzar el usuario para activar la recompensa.","A short description about this system":"Una breve descripci\u00f3n de este sistema","Would you like to delete this reward system ?":"\u00bfLe gustar\u00eda eliminar este sistema de recompensas?","Delete Selected Rewards":"Eliminar recompensas seleccionadas","Would you like to delete selected rewards?":"\u00bfLe gustar\u00eda eliminar las recompensas seleccionadas?","Roles List":"Lista de roles","Display all roles.":"Muestra todos los roles.","No role has been registered.":"No se ha registrado ning\u00fan rol.","Add a new role":"Agregar un rol nuevo","Create a new role":"Crea un nuevo rol","Create a new role and save it.":"Cree un nuevo rol y gu\u00e1rdelo.","Edit role":"Editar rol","Modify Role.":"Modificar rol.","Return to Roles":"Regresar a Roles","Provide a name to the role.":"Proporcione un nombre al rol.","Should be a unique value with no spaces or special character":"Debe ser un valor \u00fanico sin espacios ni caracteres especiales.","Provide more details about what this role is about.":"Proporcione m\u00e1s detalles sobre de qu\u00e9 se trata este rol.","Unable to delete a system role.":"No se puede eliminar una funci\u00f3n del sistema.","You do not have enough permissions to perform this action.":"No tienes suficientes permisos para realizar esta acci\u00f3n.","Taxes List":"Lista de impuestos","Display all taxes.":"Muestra todos los impuestos.","No taxes has been registered":"No se han registrado impuestos","Add a new tax":"Agregar un nuevo impuesto","Create a new tax":"Crear un impuesto nuevo","Register a new tax and save it.":"Registre un nuevo impuesto y gu\u00e1rdelo.","Edit tax":"Editar impuesto","Modify Tax.":"Modificar impuestos.","Return to Taxes":"Volver a impuestos","Provide a name to the tax.":"Proporcione un nombre para el impuesto.","Assign the tax to a tax group.":"Asigne el impuesto a un grupo de impuestos.","Rate":"Velocidad","Define the rate value for the tax.":"Defina el valor de la tasa del impuesto.","Provide a description to the tax.":"Proporcione una descripci\u00f3n del impuesto.","Taxes Groups List":"Lista de grupos de impuestos","Display all taxes groups.":"Muestra todos los grupos de impuestos.","No taxes groups has been registered":"No se ha registrado ning\u00fan grupo de impuestos","Add a new tax group":"Agregar un nuevo grupo de impuestos","Create a new tax group":"Crear un nuevo grupo de impuestos","Register a new tax group and save it.":"Registre un nuevo grupo de impuestos y gu\u00e1rdelo.","Edit tax group":"Editar grupo de impuestos","Modify Tax Group.":"Modificar grupo fiscal.","Return to Taxes Groups":"Volver a grupos de impuestos","Provide a short description to the tax group.":"Proporcione una breve descripci\u00f3n del grupo fiscal.","Units List":"Lista de unidades","Display all units.":"Mostrar todas las unidades.","No units has been registered":"No se ha registrado ninguna unidad","Add a new unit":"Agregar una nueva unidad","Create a new unit":"Crea una nueva unidad","Register a new unit and save it.":"Registre una nueva unidad y gu\u00e1rdela.","Edit unit":"Editar unidad","Modify Unit.":"Modificar unidad.","Return to Units":"Regresar a Unidades","Identifier":"Identificador","Preview URL":"URL de vista previa","Preview of the unit.":"Vista previa de la unidad.","Define the value of the unit.":"Defina el valor de la unidad.","Define to which group the unit should be assigned.":"Defina a qu\u00e9 grupo debe asignarse la unidad.","Base Unit":"Unidad base","Determine if the unit is the base unit from the group.":"Determine si la unidad es la unidad base del grupo.","Provide a short description about the unit.":"Proporcione una breve descripci\u00f3n sobre la unidad.","Unit Groups List":"Lista de grupos de unidades","Display all unit groups.":"Muestra todos los grupos de unidades.","No unit groups has been registered":"No se ha registrado ning\u00fan grupo de unidades","Add a new unit group":"Agregar un nuevo grupo de unidades","Create a new unit group":"Crear un nuevo grupo de unidades","Register a new unit group and save it.":"Registre un nuevo grupo de unidades y gu\u00e1rdelo.","Edit unit group":"Editar grupo de unidades","Modify Unit Group.":"Modificar grupo de unidades.","Return to Unit Groups":"Regresar a Grupos de Unidades","Users List":"Lista de usuarios","Display all users.":"Mostrar todos los usuarios.","No users has been registered":"No se ha registrado ning\u00fan usuario","Add a new user":"Agregar un nuevo usuario","Create a new user":"Crea un nuevo usuario","Register a new user and save it.":"Registre un nuevo usuario y gu\u00e1rdelo.","Edit user":"Editar usuario","Modify User.":"Modificar usuario.","Return to Users":"Volver a los usuarios","Username":"Nombre de usuario","Will be used for various purposes such as email recovery.":"Se utilizar\u00e1 para diversos fines, como la recuperaci\u00f3n de correo electr\u00f3nico.","Password":"Contrase\u00f1a","Make a unique and secure password.":"Crea una contrase\u00f1a \u00fanica y segura.","Confirm Password":"confirmar Contrase\u00f1a","Should be the same as the password.":"Debe ser la misma que la contrase\u00f1a.","Define whether the user can use the application.":"Defina si el usuario puede utilizar la aplicaci\u00f3n.","The action you tried to perform is not allowed.":"La acci\u00f3n que intent\u00f3 realizar no est\u00e1 permitida.","Not Enough Permissions":"No hay suficientes permisos","The resource of the page you tried to access is not available or might have been deleted.":"El recurso de la p\u00e1gina a la que intent\u00f3 acceder no est\u00e1 disponible o puede que se haya eliminado.","Not Found Exception":"Excepci\u00f3n no encontrada","Provide your username.":"Proporcione su nombre de usuario.","Provide your password.":"Proporcione su contrase\u00f1a.","Provide your email.":"Proporcione su correo electr\u00f3nico.","Password Confirm":"Contrase\u00f1a confirmada","define the amount of the transaction.":"definir el monto de la transacci\u00f3n.","Further observation while proceeding.":"Observaci\u00f3n adicional mientras se procede.","determine what is the transaction type.":"determinar cu\u00e1l es el tipo de transacci\u00f3n.","Add":"Agregar","Deduct":"Deducir","Determine the amount of the transaction.":"Determina el monto de la transacci\u00f3n.","Further details about the transaction.":"M\u00e1s detalles sobre la transacci\u00f3n.","Define the installments for the current order.":"Defina las cuotas del pedido actual.","New Password":"Nueva contrase\u00f1a","define your new password.":"defina su nueva contrase\u00f1a.","confirm your new password.":"Confirma tu nueva contrase\u00f1a.","choose the payment type.":"elija el tipo de pago.","Provide the procurement name.":"Proporcione el nombre de la adquisici\u00f3n.","Describe the procurement.":"Describa la adquisici\u00f3n.","Define the provider.":"Defina el proveedor.","Define what is the unit price of the product.":"Defina cu\u00e1l es el precio unitario del producto.","Condition":"Condici\u00f3n","Determine in which condition the product is returned.":"Determinar en qu\u00e9 estado se devuelve el producto.","Other Observations":"Otras Observaciones","Describe in details the condition of the returned product.":"Describa en detalle el estado del producto devuelto.","Unit Group Name":"Nombre del grupo de unidad","Provide a unit name to the unit.":"Proporcione un nombre de unidad a la unidad.","Describe the current unit.":"Describe la unidad actual.","assign the current unit to a group.":"asignar la unidad actual a un grupo.","define the unit value.":"definir el valor unitario.","Provide a unit name to the units group.":"Proporcione un nombre de unidad al grupo de unidades.","Describe the current unit group.":"Describe el grupo de unidades actual.","POS":"POS","Open POS":"POS abierto","Create Register":"Crear registro","Use Customer Billing":"Utilice la facturaci\u00f3n del cliente","Define whether the customer billing information should be used.":"Defina si se debe utilizar la informaci\u00f3n de facturaci\u00f3n del cliente.","General Shipping":"Env\u00edo general","Define how the shipping is calculated.":"Defina c\u00f3mo se calcula el env\u00edo.","Shipping Fees":"Gastos de env\u00edo","Define shipping fees.":"Defina las tarifas de env\u00edo.","Use Customer Shipping":"Usar env\u00edo del cliente","Define whether the customer shipping information should be used.":"Defina si se debe utilizar la informaci\u00f3n de env\u00edo del cliente.","Invoice Number":"N\u00famero de factura","If the procurement has been issued outside of NexoPOS, please provide a unique reference.":"Si la adquisici\u00f3n se ha emitido fuera de NexoPOS, proporcione una referencia \u00fanica.","Delivery Time":"El tiempo de entrega","If the procurement has to be delivered at a specific time, define the moment here.":"Si el aprovisionamiento debe entregarse en un momento espec\u00edfico, defina el momento aqu\u00ed.","Automatic Approval":"Aprobaci\u00f3n autom\u00e1tica","Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.":"Determine si la adquisici\u00f3n debe marcarse autom\u00e1ticamente como aprobada una vez que se cumpla el plazo de entrega.","Determine what is the actual payment status of the procurement.":"Determine cu\u00e1l es el estado de pago real de la adquisici\u00f3n.","Determine what is the actual provider of the current procurement.":"Determine cu\u00e1l es el proveedor real de la contrataci\u00f3n actual.","Provide a name that will help to identify the procurement.":"Proporcione un nombre que ayude a identificar la contrataci\u00f3n.","First Name":"Primer nombre","Avatar":"Avatar","Define the image that should be used as an avatar.":"Defina la imagen que debe usarse como avatar.","Language":"Idioma","Security":"Seguridad","Old Password":"Contrase\u00f1a anterior","Provide the old password.":"Proporcione la contrase\u00f1a anterior.","Change your password with a better stronger password.":"Cambie su contrase\u00f1a con una contrase\u00f1a mejor y m\u00e1s segura.","Password Confirmation":"Confirmaci\u00f3n de contrase\u00f1a","The profile has been successfully saved.":"El perfil se ha guardado correctamente.","The user attribute has been saved.":"Se ha guardado el atributo de usuario.","The options has been successfully updated.":"Las opciones se han actualizado correctamente.","Wrong password provided":"Se proporcion\u00f3 una contrase\u00f1a incorrecta","Wrong old password provided":"Se proporcion\u00f3 una contrase\u00f1a antigua incorrecta","Password Successfully updated.":"Contrase\u00f1a actualizada correctamente.","Password Lost":"Contrase\u00f1a perdida","Unable to proceed as the token provided is invalid.":"No se puede continuar porque el token proporcionado no es v\u00e1lido.","The token has expired. Please request a new activation token.":"El token ha caducado. Solicite un nuevo token de activaci\u00f3n.","Set New Password":"Establecer nueva contrase\u00f1a","Database Update":"Actualizaci\u00f3n de la base de datos","This account is disabled.":"Esta cuenta est\u00e1 inhabilitada.","Unable to find record having that username.":"No se pudo encontrar el registro con ese nombre de usuario.","Unable to find record having that password.":"No se pudo encontrar el registro con esa contrase\u00f1a.","Invalid username or password.":"Usuario o contrase\u00f1a invalido.","Unable to login, the provided account is not active.":"No se puede iniciar sesi\u00f3n, la cuenta proporcionada no est\u00e1 activa.","You have been successfully connected.":"Se ha conectado correctamente.","The recovery email has been send to your inbox.":"El correo de recuperaci\u00f3n se ha enviado a su bandeja de entrada.","Unable to find a record matching your entry.":"No se pudo encontrar un registro que coincida con su entrada.","Your Account has been created but requires email validation.":"Su cuenta ha sido creada pero requiere validaci\u00f3n por correo electr\u00f3nico.","Unable to find the requested user.":"No se pudo encontrar al usuario solicitado.","Unable to proceed, the provided token is not valid.":"No se puede continuar, el token proporcionado no es v\u00e1lido.","Unable to proceed, the token has expired.":"No se puede continuar, el token ha caducado.","Your password has been updated.":"Tu contrase\u00f1a ha sido actualizada.","Unable to edit a register that is currently in use":"No se puede editar un registro que est\u00e1 actualmente en uso","No register has been opened by the logged user.":"El usuario registrado no ha abierto ning\u00fan registro.","The register is opened.":"Se abre el registro.","Closing":"Clausura","Opening":"Apertura","Sale":"Venta","Refund":"Reembolso","Unable to find the category using the provided identifier":"No se puede encontrar la categor\u00eda con el identificador proporcionado.","The category has been deleted.":"La categor\u00eda ha sido eliminada.","Unable to find the category using the provided identifier.":"No se puede encontrar la categor\u00eda con el identificador proporcionado.","Unable to find the attached category parent":"No se puede encontrar el padre de la categor\u00eda adjunta","The category has been correctly saved":"La categor\u00eda se ha guardado correctamente","The category has been updated":"La categor\u00eda ha sido actualizada","The entry has been successfully deleted.":"La entrada se ha eliminado correctamente.","A new entry has been successfully created.":"Se ha creado una nueva entrada con \u00e9xito.","Unhandled crud resource":"Recurso de basura no manejada","You need to select at least one item to delete":"Debe seleccionar al menos un elemento para eliminar","You need to define which action to perform":"Necesitas definir qu\u00e9 acci\u00f3n realizar","Unable to proceed. No matching CRUD resource has been found.":"Incapaces de proceder. No se ha encontrado ning\u00fan recurso CRUD coincidente.","Create Coupon":"Crear cup\u00f3n","helps you creating a coupon.":"te ayuda a crear un cup\u00f3n.","Edit Coupon":"Editar cup\u00f3n","Editing an existing coupon.":"Editar un cup\u00f3n existente.","Invalid Request.":"Solicitud no v\u00e1lida.","Unable to delete a group to which customers are still assigned.":"No se puede eliminar un grupo al que todav\u00eda est\u00e1n asignados los clientes.","The customer group has been deleted.":"El grupo de clientes se ha eliminado.","Unable to find the requested group.":"No se pudo encontrar el grupo solicitado.","The customer group has been successfully created.":"El grupo de clientes se ha creado correctamente.","The customer group has been successfully saved.":"El grupo de clientes se ha guardado correctamente.","Unable to transfer customers to the same account.":"No se pueden transferir clientes a la misma cuenta.","The categories has been transferred to the group %s.":"Las categor\u00edas se han transferido al grupo%s.","No customer identifier has been provided to proceed to the transfer.":"No se ha proporcionado ning\u00fan identificador de cliente para proceder a la transferencia.","Unable to find the requested group using the provided id.":"No se pudo encontrar el grupo solicitado con la identificaci\u00f3n proporcionada.","\"%s\" is not an instance of \"FieldsService\"":"\"%s\" no es una instancia de \"FieldsService\"","Manage Medias":"Administrar medios","The operation was successful.":"La operaci\u00f3n fue exitosa.","Modules List":"Lista de m\u00f3dulos","List all available modules.":"Enumere todos los m\u00f3dulos disponibles.","Upload A Module":"Cargar un m\u00f3dulo","Extends NexoPOS features with some new modules.":"Ampl\u00eda las funciones de NexoPOS con algunos m\u00f3dulos nuevos.","The notification has been successfully deleted":"La notificaci\u00f3n se ha eliminado correctamente","All the notifications have been cleared.":"Se han borrado todas las notificaciones.","The printing event has been successfully dispatched.":"El evento de impresi\u00f3n se ha enviado correctamente.","There is a mismatch between the provided order and the order attached to the instalment.":"Existe una discrepancia entre el pedido proporcionado y el pedido adjunto a la entrega.","Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.":"No se puede editar una adquisici\u00f3n que est\u00e1 en stock. Considere realizar un ajuste o eliminar la adquisici\u00f3n.","New Procurement":"Adquisiciones nuevas","Edit Procurement":"Editar adquisiciones","Perform adjustment on existing procurement.":"Realizar ajustes en adquisiciones existentes.","%s - Invoice":"%s - Factura","list of product procured.":"lista de productos adquiridos.","The product price has been refreshed.":"Se actualiz\u00f3 el precio del producto.","The single variation has been deleted.":"Se ha eliminado la \u00fanica variaci\u00f3n.","Edit a product":"Editar un producto","Makes modifications to a product":"Realiza modificaciones en un producto.","Create a product":"Crea un producto","Add a new product on the system":"Agregar un nuevo producto al sistema","Stock Adjustment":"Ajuste de Stock","Adjust stock of existing products.":"Ajustar stock de productos existentes.","Lost":"Perdi\u00f3","No stock is provided for the requested product.":"No se proporciona stock para el producto solicitado.","The product unit quantity has been deleted.":"Se ha eliminado la cantidad de unidades de producto.","Unable to proceed as the request is not valid.":"No se puede continuar porque la solicitud no es v\u00e1lida.","Unsupported action for the product %s.":"Acci\u00f3n no admitida para el producto%s.","The stock has been adjustment successfully.":"El stock se ha ajustado con \u00e9xito.","Unable to add the product to the cart as it has expired.":"No se puede agregar el producto al carrito porque ha vencido.","Unable to add a product that has accurate tracking enabled, using an ordinary barcode.":"No se puede agregar un producto que tiene habilitado un seguimiento preciso, utilizando un c\u00f3digo de barras normal.","There is no products matching the current request.":"No hay productos que coincidan con la solicitud actual.","Print Labels":"Imprimir etiquetas","Customize and print products labels.":"Personalice e imprima etiquetas de productos.","Providers":"Proveedores","Create A Provider":"Crear un proveedor","Sales Report":"Reporte de ventas","Provides an overview over the sales during a specific period":"Proporciona una descripci\u00f3n general de las ventas durante un per\u00edodo espec\u00edfico.","Sold Stock":"Stock vendido","Provides an overview over the sold stock during a specific period.":"Proporciona una descripci\u00f3n general de las existencias vendidas durante un per\u00edodo espec\u00edfico.","Profit Report":"Informe de ganancias","Provides an overview of the provide of the products sold.":"Proporciona una descripci\u00f3n general de la oferta de los productos vendidos.","Provides an overview on the activity for a specific period.":"Proporciona una descripci\u00f3n general de la actividad durante un per\u00edodo espec\u00edfico.","Annual Report":"Reporte anual","Invalid authorization code provided.":"Se proporcion\u00f3 un c\u00f3digo de autorizaci\u00f3n no v\u00e1lido.","The database has been successfully seeded.":"La base de datos se ha sembrado con \u00e9xito.","Settings Page Not Found":"P\u00e1gina de configuraci\u00f3n no encontrada","Customers Settings":"Configuraci\u00f3n de clientes","Configure the customers settings of the application.":"Configure los ajustes de los clientes de la aplicaci\u00f3n.","General Settings":"Configuraci\u00f3n general","Configure the general settings of the application.":"Configure los ajustes generales de la aplicaci\u00f3n.","Orders Settings":"Configuraci\u00f3n de pedidos","POS Settings":"Configuraci\u00f3n de POS","Configure the pos settings.":"Configure los ajustes de posici\u00f3n.","Workers Settings":"Configuraci\u00f3n de trabajadores","%s is not an instance of \"%s\".":"%s no es una instancia de \"%s\".","Unable to find the requested product tax using the provided id":"No se puede encontrar el impuesto sobre el producto solicitado con la identificaci\u00f3n proporcionada","Unable to find the requested product tax using the provided identifier.":"No se puede encontrar el impuesto sobre el producto solicitado con el identificador proporcionado.","The product tax has been created.":"Se ha creado el impuesto sobre el producto.","The product tax has been updated":"Se actualiz\u00f3 el impuesto sobre el producto.","Unable to retrieve the requested tax group using the provided identifier \"%s\".":"No se puede recuperar el grupo de impuestos solicitado con el identificador proporcionado \"%s\".","Create User":"Crear usuario","Permission Manager":"Administrador de permisos","Manage all permissions and roles":"Gestionar todos los permisos y roles","My Profile":"Mi perfil","Change your personal settings":"Cambiar su configuraci\u00f3n personal","The permissions has been updated.":"Los permisos se han actualizado.","Roles":"Roles","Sunday":"domingo","Monday":"lunes","Tuesday":"martes","Wednesday":"mi\u00e9rcoles","Thursday":"jueves","Friday":"viernes","Saturday":"s\u00e1bado","The migration has successfully run.":"La migraci\u00f3n se ha realizado correctamente.","Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.":"No se puede inicializar la p\u00e1gina de configuraci\u00f3n. No se puede crear una instancia del identificador \"%s\".","Unable to register. The registration is closed.":"No se puede registrar. El registro est\u00e1 cerrado.","Hold Order Cleared":"Retener orden despejada","[NexoPOS] Activate Your Account":"[NexoPOS] Active su cuenta","[NexoPOS] A New User Has Registered":"[NexoPOS] Se ha registrado un nuevo usuario","[NexoPOS] Your Account Has Been Created":"[NexoPOS] Se ha creado su cuenta","Unable to find the permission with the namespace \"%s\".":"No se pudo encontrar el permiso con el espacio de nombres \"%s\".","Voided":"Anulado","Refunded":"Reintegrado","Partially Refunded":"reintegrado parcialmente","The register has been successfully opened":"El registro se ha abierto con \u00e9xito","The register has been successfully closed":"El registro se ha cerrado con \u00e9xito","The provided amount is not allowed. The amount should be greater than \"0\". ":"La cantidad proporcionada no est\u00e1 permitida. La cantidad debe ser mayor que \"0\".","The cash has successfully been stored":"El efectivo se ha almacenado correctamente","Not enough fund to cash out.":"No hay fondos suficientes para cobrar.","The cash has successfully been disbursed.":"El efectivo se ha desembolsado con \u00e9xito.","In Use":"En uso","Opened":"Abri\u00f3","Delete Selected entries":"Eliminar entradas seleccionadas","%s entries has been deleted":"Se han eliminado%s entradas","%s entries has not been deleted":"%s entradas no se han eliminado","Unable to find the customer using the provided id.":"No se pudo encontrar al cliente con la identificaci\u00f3n proporcionada.","The customer has been deleted.":"El cliente ha sido eliminado.","The customer has been created.":"Se ha creado el cliente.","Unable to find the customer using the provided ID.":"No se pudo encontrar al cliente con la identificaci\u00f3n proporcionada.","The customer has been edited.":"El cliente ha sido editado.","Unable to find the customer using the provided email.":"No se pudo encontrar al cliente utilizando el correo electr\u00f3nico proporcionado.","The customer account has been updated.":"La cuenta del cliente se ha actualizado.","Issuing Coupon Failed":"Error al emitir el cup\u00f3n","Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.":"No se puede aplicar un cup\u00f3n adjunto a la recompensa \"%s\". Parece que el cup\u00f3n ya no existe.","Unable to find a coupon with the provided code.":"No se pudo encontrar un cup\u00f3n con el c\u00f3digo proporcionado.","The coupon has been updated.":"El cup\u00f3n se ha actualizado.","The group has been created.":"Se ha creado el grupo.","The media has been deleted":"El medio ha sido eliminado","Unable to find the media.":"Incapaz de encontrar los medios.","Unable to find the requested file.":"No se pudo encontrar el archivo solicitado.","Unable to find the media entry":"No se pudo encontrar la entrada de medios","Medias":"Medios","List":"Lista","Customers Groups":"Grupos de Clientes","Create Group":"Crea un grupo","Reward Systems":"Sistemas de recompensa","Create Reward":"Crear recompensa","List Coupons":"Lista de cupones","Inventory":"Inventario","Create Product":"Crear producto","Create Category":"Crear categor\u00eda","Create Unit":"Crear unidad","Unit Groups":"Grupos de unidades","Create Unit Groups":"Crear grupos de unidades","Taxes Groups":"Grupos de impuestos","Create Tax Groups":"Crear grupos de impuestos","Create Tax":"Crear impuesto","Modules":"M\u00f3dulos","Upload Module":"M\u00f3dulo de carga","Users":"Usuarios","Create Roles":"Crear roles","Permissions Manager":"Administrador de permisos","Procurements":"Adquisiciones","Reports":"Informes","Sale Report":"Informe de venta","Incomes & Loosses":"Ingresos y p\u00e9rdidas","Invoice Settings":"Configuraci\u00f3n de facturas","Workers":"Trabajadores","Unable to locate the requested module.":"No se pudo localizar el m\u00f3dulo solicitado.","The module \"%s\" has been disabled as the dependency \"%s\" is missing. ":"El m\u00f3dulo \"%s\" se ha desactivado porque falta la dependencia \"%s\".","The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ":"El m\u00f3dulo \"%s\" ha sido deshabilitado porque la dependencia \"%s\" no est\u00e1 habilitada.","Unable to detect the folder from where to perform the installation.":"No se pudo detectar la carpeta desde donde realizar la instalaci\u00f3n.","The uploaded file is not a valid module.":"El archivo cargado no es un m\u00f3dulo v\u00e1lido.","The module has been successfully installed.":"El m\u00f3dulo se ha instalado correctamente.","The migration run successfully.":"La migraci\u00f3n se ejecut\u00f3 correctamente.","The module has correctly been enabled.":"El m\u00f3dulo se ha habilitado correctamente.","Unable to enable the module.":"No se puede habilitar el m\u00f3dulo.","The Module has been disabled.":"El m\u00f3dulo se ha desactivado.","Unable to disable the module.":"No se puede deshabilitar el m\u00f3dulo.","Unable to proceed, the modules management is disabled.":"No se puede continuar, la gesti\u00f3n de m\u00f3dulos est\u00e1 deshabilitada.","Missing required parameters to create a notification":"Faltan par\u00e1metros necesarios para crear una notificaci\u00f3n","The order has been placed.":"Se ha realizado el pedido.","The percentage discount provided is not valid.":"El porcentaje de descuento proporcionado no es v\u00e1lido.","A discount cannot exceed the sub total value of an order.":"Un descuento no puede exceder el valor subtotal de un pedido.","No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.":"No se espera ning\u00fan pago por el momento. Si el cliente desea pagar antes, considere ajustar la fecha de pago a plazos.","The payment has been saved.":"El pago se ha guardado.","Unable to edit an order that is completely paid.":"No se puede editar un pedido que est\u00e1 completamente pagado.","Unable to proceed as one of the previous submitted payment is missing from the order.":"No se puede continuar porque falta uno de los pagos enviados anteriormente en el pedido.","The order payment status cannot switch to hold as a payment has already been made on that order.":"El estado de pago del pedido no puede cambiar a retenido porque ya se realiz\u00f3 un pago en ese pedido.","Unable to proceed. One of the submitted payment type is not supported.":"Incapaces de proceder. Uno de los tipos de pago enviados no es compatible.","Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.":"No se puede continuar, el producto \"%s\" tiene una unidad que no se puede recuperar. Podr\u00eda haber sido eliminado.","Unable to find the customer using the provided ID. The order creation has failed.":"No se pudo encontrar al cliente con la identificaci\u00f3n proporcionada. La creaci\u00f3n de la orden ha fallado.","Unable to proceed a refund on an unpaid order.":"No se puede proceder con el reembolso de un pedido no pagado.","The current credit has been issued from a refund.":"El cr\u00e9dito actual se ha emitido a partir de un reembolso.","The order has been successfully refunded.":"El pedido ha sido reembolsado correctamente.","unable to proceed to a refund as the provided status is not supported.":"no se puede proceder a un reembolso porque el estado proporcionado no es compatible.","The product %s has been successfully refunded.":"El producto%s ha sido reembolsado correctamente.","Unable to find the order product using the provided id.":"No se puede encontrar el producto del pedido con la identificaci\u00f3n proporcionada.","Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier":"No se pudo encontrar el pedido solicitado usando \"%s\" como pivote y \"%s\" como identificador","Unable to fetch the order as the provided pivot argument is not supported.":"No se puede recuperar el pedido porque el argumento din\u00e1mico proporcionado no es compatible.","The product has been added to the order \"%s\"":"El producto se ha a\u00f1adido al pedido \"%s\"","the order has been successfully computed.":"el pedido se ha calculado con \u00e9xito.","The order has been deleted.":"El pedido ha sido eliminado.","The product has been successfully deleted from the order.":"El producto se ha eliminado correctamente del pedido.","Unable to find the requested product on the provider order.":"No se pudo encontrar el producto solicitado en el pedido del proveedor.","Unpaid Orders Turned Due":"Pedidos impagos vencidos","No orders to handle for the moment.":"No hay \u00f3rdenes que manejar por el momento.","The order has been correctly voided.":"La orden ha sido anulada correctamente.","Unable to edit an already paid instalment.":"No se puede editar una cuota ya pagada.","The instalment has been saved.":"La cuota se ha guardado.","The instalment has been deleted.":"La cuota ha sido eliminada.","The defined amount is not valid.":"La cantidad definida no es v\u00e1lida.","No further instalments is allowed for this order. The total instalment already covers the order total.":"No se permiten m\u00e1s cuotas para este pedido. La cuota total ya cubre el total del pedido.","The instalment has been created.":"Se ha creado la cuota.","The provided status is not supported.":"El estado proporcionado no es compatible.","The order has been successfully updated.":"El pedido se ha actualizado correctamente.","Unable to find the requested procurement using the provided identifier.":"No se puede encontrar la adquisici\u00f3n solicitada con el identificador proporcionado.","Unable to find the assigned provider.":"No se pudo encontrar el proveedor asignado.","The procurement has been created.":"Se ha creado la contrataci\u00f3n.","Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.":"No se puede editar una adquisici\u00f3n que ya se ha almacenado. Considere el ajuste de rendimiento y stock.","The provider has been edited.":"El proveedor ha sido editado.","Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"":"No se puede tener un ID de grupo de unidades para el producto que usa la referencia \"%s\" como \"%s\"","The operation has completed.":"La operaci\u00f3n ha finalizado.","The procurement has been refreshed.":"La adquisici\u00f3n se ha actualizado.","The procurement has been reset.":"La adquisici\u00f3n se ha restablecido.","The procurement products has been deleted.":"Se han eliminado los productos de adquisici\u00f3n.","The procurement product has been updated.":"El producto de adquisici\u00f3n se ha actualizado.","Unable to find the procurement product using the provided id.":"No se puede encontrar el producto de adquisici\u00f3n con la identificaci\u00f3n proporcionada.","The product %s has been deleted from the procurement %s":"El producto%s se ha eliminado del aprovisionamiento%s","The product with the following ID \"%s\" is not initially included on the procurement":"El producto con el siguiente ID \"%s\" no se incluye inicialmente en la adquisici\u00f3n","The procurement products has been updated.":"Los productos de adquisici\u00f3n se han actualizado.","Procurement Automatically Stocked":"Adquisiciones almacenadas autom\u00e1ticamente","Draft":"Sequ\u00eda","The category has been created":"La categor\u00eda ha sido creada","Unable to find the product using the provided id.":"No se puede encontrar el producto con la identificaci\u00f3n proporcionada.","Unable to find the requested product using the provided SKU.":"No se puede encontrar el producto solicitado con el SKU proporcionado.","The variable product has been created.":"Se ha creado el producto variable.","The provided barcode \"%s\" is already in use.":"El c\u00f3digo de barras proporcionado \"%s\" ya est\u00e1 en uso.","The provided SKU \"%s\" is already in use.":"El SKU proporcionado \"%s\" ya est\u00e1 en uso.","The product has been saved.":"El producto se ha guardado.","The provided barcode is already in use.":"El c\u00f3digo de barras proporcionado ya est\u00e1 en uso.","The provided SKU is already in use.":"El SKU proporcionado ya est\u00e1 en uso.","The product has been updated":"El producto ha sido actualizado","The variable product has been updated.":"Se ha actualizado el producto variable.","The product variations has been reset":"Las variaciones del producto se han restablecido.","The product has been reset.":"El producto se ha reiniciado.","The product \"%s\" has been successfully deleted":"El producto \"%s\" se ha eliminado correctamente","Unable to find the requested variation using the provided ID.":"No se puede encontrar la variaci\u00f3n solicitada con el ID proporcionado.","The product stock has been updated.":"Se ha actualizado el stock del producto.","The action is not an allowed operation.":"La acci\u00f3n no es una operaci\u00f3n permitida.","The product quantity has been updated.":"Se actualiz\u00f3 la cantidad de producto.","There is no variations to delete.":"No hay variaciones para eliminar.","There is no products to delete.":"No hay productos para eliminar.","The product variation has been successfully created.":"La variaci\u00f3n de producto se ha creado con \u00e9xito.","The product variation has been updated.":"Se actualiz\u00f3 la variaci\u00f3n del producto.","The provider has been created.":"Se ha creado el proveedor.","The provider has been updated.":"El proveedor se ha actualizado.","Unable to find the provider using the specified id.":"No se pudo encontrar el proveedor con la identificaci\u00f3n especificada.","The provider has been deleted.":"El proveedor ha sido eliminado.","Unable to find the provider using the specified identifier.":"No se pudo encontrar el proveedor con el identificador especificado.","The provider account has been updated.":"La cuenta del proveedor se ha actualizado.","The procurement payment has been deducted.":"Se ha deducido el pago de la adquisici\u00f3n.","The dashboard report has been updated.":"El informe del panel se ha actualizado.","Untracked Stock Operation":"Operaci\u00f3n de stock sin seguimiento","Unsupported action":"Acci\u00f3n no admitida","The expense has been correctly saved.":"El gasto se ha guardado correctamente.","The table has been truncated.":"La tabla se ha truncado.","Untitled Settings Page":"P\u00e1gina de configuraci\u00f3n sin t\u00edtulo","No description provided for this settings page.":"No se proporciona una descripci\u00f3n para esta p\u00e1gina de configuraci\u00f3n.","The form has been successfully saved.":"El formulario se ha guardado correctamente.","Unable to reach the host":"Incapaz de comunicarse con el anfitri\u00f3n","Unable to connect to the database using the credentials provided.":"No se puede conectar a la base de datos con las credenciales proporcionadas.","Unable to select the database.":"No se puede seleccionar la base de datos.","Access denied for this user.":"Acceso denegado para este usuario.","The connexion with the database was successful":"La conexi\u00f3n con la base de datos fue exitosa","NexoPOS has been successfully installed.":"NexoPOS se ha instalado correctamente.","A tax cannot be his own parent.":"Un impuesto no puede ser su propio padre.","The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".":"La jerarqu\u00eda de impuestos est\u00e1 limitada a 1. Un impuesto secundario no debe tener el tipo de impuesto establecido en \"agrupado\".","Unable to find the requested tax using the provided identifier.":"No se pudo encontrar el impuesto solicitado con el identificador proporcionado.","The tax group has been correctly saved.":"El grupo de impuestos se ha guardado correctamente.","The tax has been correctly created.":"El impuesto se ha creado correctamente.","The tax has been successfully deleted.":"El impuesto se ha eliminado correctamente.","The Unit Group has been created.":"Se ha creado el Grupo de Unidades.","The unit group %s has been updated.":"El grupo de unidades%s se ha actualizado.","Unable to find the unit group to which this unit is attached.":"No se puede encontrar el grupo de unidades al que est\u00e1 adjunta esta unidad.","The unit has been saved.":"La unidad se ha guardado.","Unable to find the Unit using the provided id.":"No se puede encontrar la unidad con la identificaci\u00f3n proporcionada.","The unit has been updated.":"La unidad se ha actualizado.","The unit group %s has more than one base unit":"El grupo de unidades%s tiene m\u00e1s de una unidad base","The unit has been deleted.":"La unidad ha sido eliminada.","unable to find this validation class %s.":"no se puede encontrar esta clase de validaci\u00f3n%s.","Enable Reward":"Habilitar recompensa","Will activate the reward system for the customers.":"Activar\u00e1 el sistema de recompensas para los clientes.","Default Customer Account":"Cuenta de cliente predeterminada","Default Customer Group":"Grupo de clientes predeterminado","Select to which group each new created customers are assigned to.":"Seleccione a qu\u00e9 grupo est\u00e1 asignado cada nuevo cliente creado.","Enable Credit & Account":"Habilitar cr\u00e9dito y cuenta","The customers will be able to make deposit or obtain credit.":"Los clientes podr\u00e1n realizar dep\u00f3sitos u obtener cr\u00e9dito.","Store Name":"Nombre de la tienda","This is the store name.":"Este es el nombre de la tienda.","Store Address":"Direcci\u00f3n de la tienda","The actual store address.":"La direcci\u00f3n real de la tienda.","Store City":"Ciudad de la tienda","The actual store city.":"La ciudad real de la tienda.","Store Phone":"Tel\u00e9fono de la tienda","The phone number to reach the store.":"El n\u00famero de tel\u00e9fono para comunicarse con la tienda.","Store Email":"Correo electr\u00f3nico de la tienda","The actual store email. Might be used on invoice or for reports.":"El correo electr\u00f3nico real de la tienda. Puede utilizarse en facturas o informes.","Store PO.Box":"Tienda PO.Box","The store mail box number.":"El n\u00famero de casilla de correo de la tienda.","Store Fax":"Fax de la tienda","The store fax number.":"El n\u00famero de fax de la tienda.","Store Additional Information":"Almacenar informaci\u00f3n adicional","Store additional information.":"Almacene informaci\u00f3n adicional.","Store Square Logo":"Logotipo de Store Square","Choose what is the square logo of the store.":"Elige cu\u00e1l es el logo cuadrado de la tienda.","Store Rectangle Logo":"Logotipo de tienda rectangular","Choose what is the rectangle logo of the store.":"Elige cu\u00e1l es el logo rectangular de la tienda.","Define the default fallback language.":"Defina el idioma de respaldo predeterminado.","Currency":"Divisa","Currency Symbol":"S\u00edmbolo de moneda","This is the currency symbol.":"Este es el s\u00edmbolo de la moneda.","Currency ISO":"Moneda ISO","The international currency ISO format.":"El formato ISO de moneda internacional.","Currency Position":"Posici\u00f3n de moneda","Before the amount":"Antes de la cantidad","After the amount":"Despues de la cantidad","Define where the currency should be located.":"Defina d\u00f3nde debe ubicarse la moneda.","Preferred Currency":"Moneda preferida","ISO Currency":"Moneda ISO","Symbol":"S\u00edmbolo","Determine what is the currency indicator that should be used.":"Determine cu\u00e1l es el indicador de moneda que se debe utilizar.","Currency Thousand Separator":"Separador de miles de moneda","Currency Decimal Separator":"Separador decimal de moneda","Define the symbol that indicate decimal number. By default \".\" is used.":"Defina el s\u00edmbolo que indica el n\u00famero decimal. Por defecto se utiliza \".\".","Currency Precision":"Precisi\u00f3n de moneda","%s numbers after the decimal":"%s n\u00fameros despu\u00e9s del decimal","Date Format":"Formato de fecha","This define how the date should be defined. The default format is \"Y-m-d\".":"Esto define c\u00f3mo se debe definir la fecha. El formato predeterminado es \"Y-m-d \".","Registration":"Registro","Registration Open":"Registro abierto","Determine if everyone can register.":"Determina si todos pueden registrarse.","Registration Role":"Rol de registro","Select what is the registration role.":"Seleccione cu\u00e1l es el rol de registro.","Requires Validation":"Requiere validaci\u00f3n","Force account validation after the registration.":"Forzar la validaci\u00f3n de la cuenta despu\u00e9s del registro.","Allow Recovery":"Permitir recuperaci\u00f3n","Allow any user to recover his account.":"Permita que cualquier usuario recupere su cuenta.","Receipts":"Ingresos","Receipt Template":"Plantilla de recibo","Default":"Defecto","Choose the template that applies to receipts":"Elija la plantilla que se aplica a los recibos","Receipt Logo":"Logotipo de recibo","Provide a URL to the logo.":"Proporcione una URL al logotipo.","Receipt Footer":"Pie de p\u00e1gina del recibo","If you would like to add some disclosure at the bottom of the receipt.":"Si desea agregar alguna divulgaci\u00f3n en la parte inferior del recibo.","Column A":"Columna A","Column B":"Columna B","Order Code Type":"Tipo de c\u00f3digo de pedido","Determine how the system will generate code for each orders.":"Determine c\u00f3mo generar\u00e1 el sistema el c\u00f3digo para cada pedido.","Sequential":"Secuencial","Random Code":"C\u00f3digo aleatorio","Number Sequential":"N\u00famero secuencial","Allow Unpaid Orders":"Permitir pedidos impagos","Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".":"Evitar\u00e1 que se realicen pedidos incompletos. Si se permite el cr\u00e9dito, esta opci\u00f3n debe establecerse en \"s\u00ed\".","Allow Partial Orders":"Permitir pedidos parciales","Will prevent partially paid orders to be placed.":"Evitar\u00e1 que se realicen pedidos parcialmente pagados.","Quotation Expiration":"Vencimiento de cotizaci\u00f3n","Quotations will get deleted after they defined they has reached.":"Las citas se eliminar\u00e1n despu\u00e9s de que hayan definido su alcance.","%s Days":"%s d\u00edas","Features":"Caracter\u00edsticas","Show Quantity":"Mostrar cantidad","Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.":"Mostrar\u00e1 el selector de cantidad al elegir un producto. De lo contrario, la cantidad predeterminada se establece en 1.","Allow Customer Creation":"Permitir la creaci\u00f3n de clientes","Allow customers to be created on the POS.":"Permitir la creaci\u00f3n de clientes en el TPV.","Quick Product":"Producto r\u00e1pido","Allow quick product to be created from the POS.":"Permita que se cree un producto r\u00e1pido desde el POS.","Editable Unit Price":"Precio unitario editable","Allow product unit price to be edited.":"Permitir que se edite el precio unitario del producto.","Order Types":"Tipos de orden","Control the order type enabled.":"Controle el tipo de orden habilitado.","Layout":"Dise\u00f1o","Retail Layout":"Dise\u00f1o minorista","Clothing Shop":"Tienda de ropa","POS Layout":"Dise\u00f1o POS","Change the layout of the POS.":"Cambia el dise\u00f1o del TPV.","Printing":"Impresi\u00f3n","Printed Document":"Documento impreso","Choose the document used for printing aster a sale.":"Elija el documento utilizado para imprimir una venta.","Printing Enabled For":"Impresi\u00f3n habilitada para","All Orders":"Todas las \u00f3rdenes","From Partially Paid Orders":"De pedidos pagados parcialmente","Only Paid Orders":"Solo pedidos pagados","Determine when the printing should be enabled.":"Determine cu\u00e1ndo debe habilitarse la impresi\u00f3n.","Enable Cash Registers":"Habilitar cajas registradoras","Determine if the POS will support cash registers.":"Determine si el POS admitir\u00e1 cajas registradoras.","Cashier Idle Counter":"Contador inactivo del cajero","5 Minutes":"5 minutos","10 Minutes":"10 minutos","15 Minutes":"15 minutos","20 Minutes":"20 minutos","30 Minutes":"30 minutos","Selected after how many minutes the system will set the cashier as idle.":"Seleccionado despu\u00e9s de cu\u00e1ntos minutos el sistema establecer\u00e1 el cajero como inactivo.","Cash Disbursement":"Desembolso de efectivo","Allow cash disbursement by the cashier.":"Permitir el desembolso de efectivo por parte del cajero.","Cash Registers":"Cajas registradoras","Keyboard Shortcuts":"Atajos de teclado","Cancel Order":"Cancelar orden","Keyboard shortcut to cancel the current order.":"Atajo de teclado para cancelar el pedido actual.","Keyboard shortcut to hold the current order.":"Atajo de teclado para mantener el orden actual.","Keyboard shortcut to create a customer.":"Atajo de teclado para crear un cliente.","Proceed Payment":"Proceder al pago","Keyboard shortcut to proceed to the payment.":"Atajo de teclado para proceder al pago.","Open Shipping":"Env\u00edo Abierto","Keyboard shortcut to define shipping details.":"Atajo de teclado para definir detalles de env\u00edo.","Open Note":"Abrir nota","Keyboard shortcut to open the notes.":"Atajo de teclado para abrir las notas.","Order Type Selector":"Selector de tipo de orden","Keyboard shortcut to open the order type selector.":"Atajo de teclado para abrir el selector de tipo de orden.","Toggle Fullscreen":"Alternar pantalla completa","Keyboard shortcut to toggle fullscreen.":"Atajo de teclado para alternar la pantalla completa.","Quick Search":"B\u00fasqueda r\u00e1pida","Keyboard shortcut open the quick search popup.":"El atajo de teclado abre la ventana emergente de b\u00fasqueda r\u00e1pida.","Amount Shortcuts":"Accesos directos de cantidad","VAT Type":"Tipo de IVA","Determine the VAT type that should be used.":"Determine el tipo de IVA que se debe utilizar.","Flat Rate":"Tarifa plana","Flexible Rate":"Tarifa flexible","Products Vat":"Productos Tina","Products & Flat Rate":"Productos y tarifa plana","Products & Flexible Rate":"Productos y tarifa flexible","Define the tax group that applies to the sales.":"Defina el grupo de impuestos que se aplica a las ventas.","Define how the tax is computed on sales.":"Defina c\u00f3mo se calcula el impuesto sobre las ventas.","VAT Settings":"Configuraci\u00f3n de IVA","Enable Email Reporting":"Habilitar informes por correo electr\u00f3nico","Determine if the reporting should be enabled globally.":"Determine si los informes deben habilitarse a nivel mundial.","Supplies":"Suministros","Public Name":"Nombre publico","Define what is the user public name. If not provided, the username is used instead.":"Defina cu\u00e1l es el nombre p\u00fablico del usuario. Si no se proporciona, se utiliza en su lugar el nombre de usuario.","Enable Workers":"Habilitar trabajadores","Test":"Test","Receipt — %s":"Recibo — %s","Choose the language for the current account.":"Elija el idioma para la cuenta corriente.","Sign In — NexoPOS":"Iniciar sesi\u00f3n — NexoPOS","Sign Up — NexoPOS":"Reg\u00edstrate — NexoPOS","Order Invoice — %s":"Factura de pedido — %s","Order Receipt — %s":"Recibo de pedido — %s","Printing Gateway":"Puerta de entrada de impresi\u00f3n","Determine what is the gateway used for printing.":"Determine qu\u00e9 se usa la puerta de enlace para imprimir.","Localization for %s extracted to %s":"Localizaci\u00f3n de %s extra\u00edda a %s","Downloading latest dev build...":"Descargando la \u00faltima compilaci\u00f3n de desarrollo ...","Reset project to HEAD...":"Restablecer proyecto a HEAD ...","Payment Types List":"Lista de tipos de pago","Display all payment types.":"Muestra todos los tipos de pago.","No payment types has been registered":"No se ha registrado ning\u00fan tipo de pago","Add a new payment type":"Agregar un nuevo tipo de pago","Create a new payment type":"Crea un nuevo tipo de pago","Register a new payment type and save it.":"Registre un nuevo tipo de pago y gu\u00e1rdelo.","Edit payment type":"Editar tipo de pago","Modify Payment Type.":"Modificar el tipo de pago.","Return to Payment Types":"Volver a tipos de pago","Label":"Etiqueta","Provide a label to the resource.":"Proporcione una etiqueta al recurso.","A payment type having the same identifier already exists.":"Ya existe un tipo de pago que tiene el mismo identificador.","Unable to delete a read-only payments type.":"No se puede eliminar un tipo de pago de solo lectura.","Readonly":"Solo lectura","Payment Types":"Formas de pago","Cash":"Dinero en efectivo","Bank Payment":"Pago bancario","Current Week":"Semana actual","Previous Week":"Semana pasada","There is no migrations to perform for the module \"%s\"":"No hay migraciones que realizar para el m\u00f3dulo \"%s\"","The module migration has successfully been performed for the module \"%s\"":"La migraci\u00f3n del m\u00f3dulo se ha realizado correctamente para el m\u00f3dulo \"%s\"","Sales By Payment Types":"Ventas por tipos de pago","Provide a report of the sales by payment types, for a specific period.":"Proporcionar un informe de las ventas por tipos de pago, para un per\u00edodo espec\u00edfico.","Sales By Payments":"Ventas por Pagos","Order Settings":"Configuraci\u00f3n de pedidos","Define the order name.":"Defina el nombre del pedido.","Define the date of creation of the order.":"Establecer el cierre de la creaci\u00f3n de la orden.","Total Refunds":"Reembolsos totales","Clients Registered":"Clientes registrados","Commissions":"Comisiones","Processing Status":"Estado de procesamiento","Refunded Products":"Productos reembolsados","The delivery status of the order will be changed. Please confirm your action.":"Se modificar\u00e1 el estado de entrega del pedido. Confirme su acci\u00f3n.","The product price has been updated.":"El precio del producto se ha actualizado.","The editable price feature is disabled.":"La funci\u00f3n de precio editable est\u00e1 deshabilitada.","Order Refunds":"Reembolsos de pedidos","Product Price":"Precio del producto","Unable to proceed":"Incapaces de proceder","Partially paid orders are disabled.":"Los pedidos parcialmente pagados est\u00e1n desactivados.","An order is currently being processed.":"Actualmente se est\u00e1 procesando un pedido.","Log out":"cerrar sesi\u00f3n","Refund receipt":"Recibo de reembolso","Recompute":"Volver a calcular","Sort Results":"Ordenar resultados","Using Quantity Ascending":"Usando cantidad ascendente","Using Quantity Descending":"Usar cantidad descendente","Using Sales Ascending":"Usar ventas ascendentes","Using Sales Descending":"Usar ventas descendentes","Using Name Ascending":"Usando el nombre ascendente","Using Name Descending":"Usar nombre descendente","Progress":"Progreso","Discounts":"descuentos","An invalid date were provided. Make sure it a prior date to the actual server date.":"Se proporcion\u00f3 una fecha no v\u00e1lida. Aseg\u00farese de que sea una fecha anterior a la fecha actual del servidor.","Computing report from %s...":"Informe de c\u00e1lculo de% s ...","The demo has been enabled.":"La demostraci\u00f3n se ha habilitado.","Refund Receipt":"Recibo de reembolso","Codabar":"codabar","Code 128":"C\u00f3digo 128","Code 39":"C\u00f3digo 39","Code 11":"C\u00f3digo 11","UPC A":"UPC A","UPC E":"UPC E","Store Dashboard":"Tablero de la tienda","Cashier Dashboard":"Panel de cajero","Default Dashboard":"Panel de control predeterminado","%s has been processed, %s has not been processed.":"% s se ha procesado,% s no se ha procesado.","Order Refund Receipt — %s":"Recibo de reembolso del pedido y mdash; %s","Provides an overview over the best products sold during a specific period.":"Proporciona una descripci\u00f3n general de los mejores productos vendidos durante un per\u00edodo espec\u00edfico.","The report will be computed for the current year.":"El informe se calcular\u00e1 para el a\u00f1o actual.","Unknown report to refresh.":"Informe desconocido para actualizar.","Report Refreshed":"Informe actualizado","The yearly report has been successfully refreshed for the year \"%s\".":"El informe anual se ha actualizado con \u00e9xito para el a\u00f1o \"%s\".","Countable":"contable","Piece":"Trozo","GST":"GST","SGST":"SGST","CGST":"CGST","Sample Procurement %s":"Muestra de compras% s","generated":"generado","Not Available":"No disponible","The report has been computed successfully.":"El informe se ha calculado correctamente.","Create a customer":"Crea un cliente","Credit":"Cr\u00e9dito","Debit":"D\u00e9bito","All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.":"Todas las entidades adscritas a esta categor\u00eda producir\u00e1n un \"cr\u00e9dito\" o un \"d\u00e9bito\" en el historial de flujo de caja.","Account":"Cuenta","Provide the accounting number for this category.":"Proporcione el n\u00famero de contabilidad para esta categor\u00eda.","Accounting":"Contabilidad","Procurement Cash Flow Account":"Cuenta de flujo de efectivo de adquisiciones","Sale Cash Flow Account":"Venta Cuenta de flujo de efectivo","Sales Refunds Account":"Cuenta de reembolsos de ventas","Stock return for spoiled items will be attached to this account":"La devoluci\u00f3n de existencias por art\u00edculos estropeados se adjuntar\u00e1 a esta cuenta","The reason has been updated.":"La raz\u00f3n ha sido actualizada.","You must select a customer before applying a coupon.":"Debe seleccionar un cliente antes de aplicar un cup\u00f3n.","No coupons for the selected customer...":"No hay cupones para el cliente seleccionado ...","Use Coupon":"Usar cupon","Use Customer ?":"Usar cliente?","No customer is selected. Would you like to proceed with this customer ?":"No se selecciona ning\u00fan cliente.\u00bfTe gustar\u00eda proceder con este cliente?","Change Customer ?":"Cambiar al cliente?","Would you like to assign this customer to the ongoing order ?":"\u00bfLe gustar\u00eda asignar a este cliente a la orden en curso?","Product \/ Service":"Producto \/ Servicio","An error has occurred while computing the product.":"Se ha producido un error al calcular el producto.","Provide a unique name for the product.":"Proporcionar un nombre \u00fanico para el producto.","Define what is the sale price of the item.":"Definir cu\u00e1l es el precio de venta del art\u00edculo.","Set the quantity of the product.":"Establecer la cantidad del producto.","Define what is tax type of the item.":"Definir qu\u00e9 es el tipo de impuesto del art\u00edculo.","Choose the tax group that should apply to the item.":"Elija el grupo de impuestos que debe aplicarse al art\u00edculo.","Assign a unit to the product.":"Asignar una unidad al producto.","Some products has been added to the cart. Would youl ike to discard this order ?":"Algunos productos se han agregado al carrito.\u00bfIKE IKE para descartar esta orden?","Customer Accounts List":"Lista de cuentas de clientes","Display all customer accounts.":"Mostrar todas las cuentas de clientes.","No customer accounts has been registered":"No se han registrado cuentas de clientes.","Add a new customer account":"A\u00f1adir una nueva cuenta de cliente","Create a new customer account":"Crear una nueva cuenta de cliente","Register a new customer account and save it.":"Registre una nueva cuenta de cliente y gu\u00e1rdela.","Edit customer account":"Editar cuenta de cliente","Modify Customer Account.":"Modificar la cuenta del cliente.","Return to Customer Accounts":"Volver a las cuentas de los clientes","This will be ignored.":"Esto ser\u00e1 ignorado.","Define the amount of the transaction":"Definir la cantidad de la transacci\u00f3n.","Define what operation will occurs on the customer account.":"Defina qu\u00e9 operaci\u00f3n ocurre en la cuenta del cliente.","Provider Procurements List":"Lista de adquisiciones de proveedores","Display all provider procurements.":"Mostrar todas las adquisiciones de proveedores.","No provider procurements has been registered":"No se han registrado adquisiciones de proveedores.","Add a new provider procurement":"A\u00f1adir una nueva adquisici\u00f3n del proveedor","Create a new provider procurement":"Crear una nueva adquisici\u00f3n de proveedores","Register a new provider procurement and save it.":"Registre una nueva adquisici\u00f3n del proveedor y gu\u00e1rdela.","Edit provider procurement":"Editar adquisici\u00f3n del proveedor","Modify Provider Procurement.":"Modificar la adquisici\u00f3n del proveedor.","Return to Provider Procurements":"Volver a las adquisiciones del proveedor","Delivered On":"Entregado en","Items":"Elementos","Displays the customer account history for %s":"Muestra el historial de la cuenta del cliente para% s","Procurements by \"%s\"":"Adquisiciones por \"%s\"","Crediting":"Acreditaci\u00f3n","Deducting":"Deducci\u00f3n","Order Payment":"Orden de pago","Order Refund":"Reembolso de pedidos","Unknown Operation":"Operaci\u00f3n desconocida","Unnamed Product":"Producto por calificaciones","Bubble":"Burbuja","Ding":"Cosa","Pop":"M\u00fasica pop","Cash Sound":"Sonido en efectivo","Sale Complete Sound":"Venta de sonido completo","New Item Audio":"Nuevo art\u00edculo de audio","The sound that plays when an item is added to the cart.":"El sonido que se reproduce cuando se agrega un art\u00edculo al carrito..","Howdy, {name}":"Howdy, {name}","Would you like to perform the selected bulk action on the selected entries ?":"\u00bfLe gustar\u00eda realizar la acci\u00f3n a granel seleccionada en las entradas seleccionadas?","The payment to be made today is less than what is expected.":"El pago que se realizar\u00e1 hoy es menor que lo que se espera.","Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.":"No se puede seleccionar el cliente predeterminado.Parece que el cliente ya no existe.Considere cambiar el cliente predeterminado en la configuraci\u00f3n.","How to change database configuration":"C\u00f3mo cambiar la configuraci\u00f3n de la base de datos","Common Database Issues":"Problemas de base de datos comunes","Setup":"Configuraci\u00f3n","Query Exception":"Excepci\u00f3n de consulta","The category products has been refreshed":"Los productos de la categor\u00eda se han actualizado.","The requested customer cannot be found.":"El cliente solicitado no se puede encontrar.","Filters":"Filtros","Has Filters":"Tiene filtros","N\/D":"DAKOTA DEL NORTE","Range Starts":"Inicio de rango","Range Ends":"Termina el rango","Search Filters":"Filtros de b\u00fasqueda","Clear Filters":"Limpiar filtros","Use Filters":"Usar filtros","No rewards available the selected customer...":"No hay recompensas disponibles para el cliente seleccionado ...","Unable to load the report as the timezone is not set on the settings.":"No se puede cargar el informe porque la zona horaria no est\u00e1 configurada en la configuraci\u00f3n.","There is no product to display...":"No hay producto para mostrar ...","Method Not Allowed":"M\u00e9todo no permitido","Documentation":"Documentaci\u00f3n","Module Version Mismatch":"Discrepancia en la versi\u00f3n del m\u00f3dulo","Define how many time the coupon has been used.":"Defina cu\u00e1ntas veces se ha utilizado el cup\u00f3n.","Define the maximum usage possible for this coupon.":"Defina el uso m\u00e1ximo posible para este cup\u00f3n.","Restrict the orders by the creation date.":"Restringe los pedidos por la fecha de creaci\u00f3n.","Created Between":"Creado entre","Restrict the orders by the payment status.":"Restringe los pedidos por el estado de pago.","Due With Payment":"Vencimiento con pago","Restrict the orders by the author.":"Restringir las \u00f3rdenes del autor.","Restrict the orders by the customer.":"Restringir los pedidos por parte del cliente.","Customer Phone":"Tel\u00e9fono del cliente","Restrict orders using the customer phone number.":"Restrinja los pedidos utilizando el n\u00famero de tel\u00e9fono del cliente.","Restrict the orders to the cash registers.":"Restringir los pedidos a las cajas registradoras.","Low Quantity":"Cantidad baja","Which quantity should be assumed low.":"Qu\u00e9 cantidad debe asumirse como baja.","Stock Alert":"Alerta de stock","See Products":"Ver productos","Provider Products List":"Lista de productos de proveedores","Display all Provider Products.":"Mostrar todos los productos del proveedor.","No Provider Products has been registered":"No se ha registrado ning\u00fan producto de proveedor","Add a new Provider Product":"Agregar un nuevo producto de proveedor","Create a new Provider Product":"Crear un nuevo producto de proveedor","Register a new Provider Product and save it.":"Registre un nuevo producto de proveedor y gu\u00e1rdelo.","Edit Provider Product":"Editar producto del proveedor","Modify Provider Product.":"Modificar el producto del proveedor.","Return to Provider Products":"Volver a Productos del proveedor","Clone":"Clon","Would you like to clone this role ?":"\u00bfTe gustar\u00eda clonar este rol?","Incompatibility Exception":"Excepci\u00f3n de incompatibilidad","The requested file cannot be downloaded or has already been downloaded.":"El archivo solicitado no se puede descargar o ya se ha descargado.","Low Stock Report":"Informe de stock bajo","Low Stock Alert":"Alerta de stock bajo","The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ":"El m\u00f3dulo \"%s\" ha sido deshabilitado porque la dependencia \"%s\" no est\u00e1 en la versi\u00f3n m\u00ednima requerida \"%s\".","The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ":"El m\u00f3dulo \"%s\" ha sido deshabilitado porque la dependencia \"%s\" est\u00e1 en una versi\u00f3n m\u00e1s all\u00e1 de la recomendada \"%s\". ","Clone of \"%s\"":"Clon de \"%s\"","The role has been cloned.":"El papel ha sido clonado.","Merge Products On Receipt\/Invoice":"Fusionar productos al recibir \/ factura","All similar products will be merged to avoid a paper waste for the receipt\/invoice.":"Todos los productos similares se fusionar\u00e1n para evitar un desperdicio de papel para el recibo \/ factura.","Define whether the stock alert should be enabled for this unit.":"Defina si la alerta de existencias debe habilitarse para esta unidad.","All Refunds":"Todos los reembolsos","No result match your query.":"Ning\u00fan resultado coincide con su consulta.","Report Type":"Tipo de informe","Categories Detailed":"Categor\u00edas Detalladas","Categories Summary":"Resumen de categor\u00edas","Allow you to choose the report type.":"Le permite elegir el tipo de informe.","Unknown":"Desconocido","Not Authorized":"No autorizado","Creating customers has been explicitly disabled from the settings.":"La creaci\u00f3n de clientes se ha deshabilitado expl\u00edcitamente en la configuraci\u00f3n.","Sales Discounts":"Descuentos de ventas","Sales Taxes":"Impuestos de ventas","Birth Date":"Fecha de nacimiento","Displays the customer birth date":"Muestra la fecha de nacimiento del cliente.","Sale Value":"Valor comercial","Purchase Value":"Valor de la compra","Would you like to refresh this ?":"\u00bfLe gustar\u00eda actualizar esto?","You cannot delete your own account.":"No puede borrar su propia cuenta.","Sales Progress":"Progreso de ventas","Procurement Refreshed":"Adquisiciones actualizado","The procurement \"%s\" has been successfully refreshed.":"La adquisici\u00f3n \"%s\" se ha actualizado correctamente.","Partially Due":"Parcialmente vencido","No payment type has been selected on the settings. Please check your POS features and choose the supported order type":"No se ha seleccionado ning\u00fan tipo de pago en la configuraci\u00f3n. Verifique las caracter\u00edsticas de su POS y elija el tipo de pedido admitido","Read More":"Lee mas","Wipe All":"Limpiar todo","Wipe Plus Grocery":"Wipe Plus Grocery","Accounts List":"Lista de cuentas","Display All Accounts.":"Mostrar todas las cuentas.","No Account has been registered":"No se ha registrado ninguna cuenta","Add a new Account":"Agregar una nueva cuenta","Create a new Account":"Crea una cuenta nueva","Register a new Account and save it.":"Registre una nueva cuenta y gu\u00e1rdela.","Edit Account":"Editar cuenta","Modify An Account.":"Modificar una cuenta.","Return to Accounts":"Volver a cuentas","Accounts":"Cuentas","Create Account":"Crear una cuenta","Payment Method":"Payment Method","Before submitting the payment, choose the payment type used for that order.":"Antes de enviar el pago, elija el tipo de pago utilizado para ese pedido.","Select the payment type that must apply to the current order.":"Seleccione el tipo de pago que debe aplicarse al pedido actual.","Payment Type":"Tipo de pago","Remove Image":"Quita la imagen","This form is not completely loaded.":"Este formulario no est\u00e1 completamente cargado.","Updating":"Actualizando","Updating Modules":"Actualizaci\u00f3n de m\u00f3dulos","Return":"Regreso","Credit Limit":"L\u00edmite de cr\u00e9dito","The request was canceled":"La solicitud fue cancelada","Payment Receipt — %s":"Recibo de pago: %s","Payment receipt":"Recibo de pago","Current Payment":"Pago actual","Total Paid":"Total pagado","Set what should be the limit of the purchase on credit.":"Establece cu\u00e1l debe ser el l\u00edmite de la compra a cr\u00e9dito.","Provide the customer email.":"Proporcionar el correo electr\u00f3nico del cliente.","Priority":"Prioridad","Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".":"Definir el orden para el pago. Cuanto menor sea el n\u00famero, primero se mostrar\u00e1 en la ventana emergente de pago. Debe comenzar desde \"0\".","Mode":"Modo","Choose what mode applies to this demo.":"Elija qu\u00e9 modo se aplica a esta demostraci\u00f3n.","Set if the sales should be created.":"Establezca si se deben crear las ventas.","Create Procurements":"Crear adquisiciones","Will create procurements.":"Crear\u00e1 adquisiciones.","Sales Account":"Cuenta de ventas","Procurements Account":"Cuenta de Adquisiciones","Sale Refunds Account":"Cuenta de Reembolsos de Venta","Spoiled Goods Account":"Cuenta de bienes estropeados","Customer Crediting Account":"Cuenta de cr\u00e9dito del cliente","Customer Debiting Account":"Cuenta de d\u00e9bito del cliente","Unable to find the requested account type using the provided id.":"No se puede encontrar el tipo de cuenta solicitado con la identificaci\u00f3n proporcionada.","You cannot delete an account type that has transaction bound.":"No puede eliminar un tipo de cuenta que tenga transacciones vinculadas.","The account type has been deleted.":"El tipo de cuenta ha sido eliminado.","The account has been created.":"La cuenta ha sido creada.","Customer Credit Account":"Cuenta de cr\u00e9dito del cliente","Customer Debit Account":"Cuenta de d\u00e9bito del cliente","Register Cash-In Account":"Registrar cuenta de ingreso de efectivo","Register Cash-Out Account":"Registrar cuenta de retiro","Require Valid Email":"Requerir correo electr\u00f3nico v\u00e1lido","Will for valid unique email for every customer.":"Voluntad de correo electr\u00f3nico \u00fanico y v\u00e1lido para cada cliente.","Choose an option":"Elige una opcion","Update Instalment Date":"Actualizar fecha de pago","Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.":"\u00bfLe gustar\u00eda marcar esa cuota como vencida hoy? si tuu confirm the instalment will be marked as paid.","Search for products.":"Buscar productos.","Toggle merging similar products.":"Alternar la fusi\u00f3n de productos similares.","Toggle auto focus.":"Alternar el enfoque autom\u00e1tico.","Filter User":"Filtrar usuario","All Users":"Todos los usuarios","No user was found for proceeding the filtering.":"No se encontr\u00f3 ning\u00fan usuario para proceder al filtrado.","available":"disponible","No coupons applies to the cart.":"No se aplican cupones al carrito.","Selected":"Seleccionado","An error occurred while opening the order options":"Ocurri\u00f3 un error al abrir las opciones de pedido","There is no instalment defined. Please set how many instalments are allowed for this order":"No hay cuota definida. Por favor, establezca cu\u00e1ntas cuotas se permitend for this order","Select Payment Gateway":"Seleccionar pasarela de pago","Gateway":"Puerta","No tax is active":"Ning\u00fan impuesto est\u00e1 activo","Unable to delete a payment attached to the order.":"No se puede eliminar un pago adjunto al pedido.","The discount has been set to the cart subtotal.":"El descuento se ha establecido en el subtotal del carrito.","Order Deletion":"Eliminaci\u00f3n de pedidos","The current order will be deleted as no payment has been made so far.":"El pedido actual se eliminar\u00e1 ya que no se ha realizado ning\u00fan pago hasta el momento.","Void The Order":"anular la orden","Unable to void an unpaid order.":"No se puede anular un pedido impago.","Environment Details":"Detalles del entorno","Properties":"Propiedades","Extensions":"Extensiones","Configurations":"Configuraciones","Learn More":"Aprende m\u00e1s","Search Products...":"Buscar Productos...","No results to show.":"No hay resultados para mostrar.","Start by choosing a range and loading the report.":"Comience eligiendo un rango y cargando el informe.","Invoice Date":"Fecha de la factura","Initial Balance":"Saldo inicial","New Balance":"Nuevo equilibrio","Transaction Type":"tipo de transacci\u00f3n","Unchanged":"Sin alterar","Define what roles applies to the user":"Definir qu\u00e9 roles se aplican al usuario","Not Assigned":"No asignado","This value is already in use on the database.":"Este valor ya est\u00e1 en uso en la base de datos.","This field should be checked.":"Este campo debe estar marcado.","This field must be a valid URL.":"Este campo debe ser una URL v\u00e1lida.","This field is not a valid email.":"Este campo no es un correo electr\u00f3nico v\u00e1lido.","If you would like to define a custom invoice date.":"Si desea definir una fecha de factura personalizada.","Theme":"Tema","Dark":"Oscuro","Light":"Luz","Define what is the theme that applies to the dashboard.":"Definir cu\u00e1l es el tema que se aplica al tablero.","Unable to delete this resource as it has %s dependency with %s item.":"No se puede eliminar este recurso porque tiene una dependencia de %s con el elemento %s.","Unable to delete this resource as it has %s dependency with %s items.":"No se puede eliminar este recurso porque tiene una dependencia de %s con %s elementos.","Make a new procurement.":"Hacer una nueva adquisici\u00f3n.","About":"Sobre","Details about the environment.":"Detalles sobre el entorno.","Core Version":"Versi\u00f3n principal","PHP Version":"Versi\u00f3n PHP","Mb String Enabled":"Cadena Mb habilitada","Zip Enabled":"Cremallera habilitada","Curl Enabled":"Rizo habilitado","Math Enabled":"Matem\u00e1ticas habilitadas","XML Enabled":"XML habilitado","XDebug Enabled":"XDepuraci\u00f3n habilitada","File Upload Enabled":"Carga de archivos habilitada","File Upload Size":"Tama\u00f1o de carga del archivo","Post Max Size":"Tama\u00f1o m\u00e1ximo de publicaci\u00f3n","Max Execution Time":"Tiempo m\u00e1ximo de ejecuci\u00f3n","Memory Limit":"Limite de memoria","Administrator":"Administrador","Store Administrator":"Administrador de tienda","Store Cashier":"Cajero de tienda","User":"Usuario","Incorrect Authentication Plugin Provided.":"Complemento de autenticaci\u00f3n incorrecto proporcionado.","Require Unique Phone":"Requerir Tel\u00e9fono \u00danico","Every customer should have a unique phone number.":"Cada cliente debe tener un n\u00famero de tel\u00e9fono \u00fanico.","Define the default theme.":"Defina el tema predeterminado.","Merge Similar Items":"Fusionar elementos similares","Will enforce similar products to be merged from the POS.":"Exigir\u00e1 que productos similares se fusionen desde el POS.","Toggle Product Merge":"Alternar combinaci\u00f3n de productos","Will enable or disable the product merging.":"Habilitar\u00e1 o deshabilitar\u00e1 la fusi\u00f3n del producto.","Your system is running in production mode. You probably need to build the assets":"Su sistema se est\u00e1 ejecutando en modo de producci\u00f3n. Probablemente necesite construir los activos","Your system is in development mode. Make sure to build the assets.":"Su sistema est\u00e1 en modo de desarrollo. Aseg\u00farese de construir los activos.","Unassigned":"Sin asignar","Display all product stock flow.":"Mostrar todo el flujo de existencias de productos.","No products stock flow has been registered":"No se ha registrado flujo de stock de productos","Add a new products stock flow":"Agregar un nuevo flujo de stock de productos","Create a new products stock flow":"Crear un nuevo flujo de stock de productos","Register a new products stock flow and save it.":"Registre un flujo de stock de nuevos productos y gu\u00e1rdelo.","Edit products stock flow":"Editar flujo de stock de productos","Modify Globalproducthistorycrud.":"Modificar Globalproducthistorycrud.","Initial Quantity":"Cantidad inicial","New Quantity":"Nueva cantidad","No Dashboard":"Sin tablero","Not Found Assets":"Activos no encontrados","Stock Flow Records":"Registros de flujo de existencias","The user attributes has been updated.":"Los atributos de usuario han sido actualizados.","Laravel Version":"Versi\u00f3n Laravel","There is a missing dependency issue.":"Falta un problema de dependencia.","The Action You Tried To Perform Is Not Allowed.":"La acci\u00f3n que intent\u00f3 realizar no est\u00e1 permitida.","Unable to locate the assets.":"No se pueden localizar los activos.","All the customers has been transferred to the new group %s.":"Todos los clientes han sido transferidos al nuevo grupo %s.","The request method is not allowed.":"El m\u00e9todo de solicitud no est\u00e1 permitido.","A Database Exception Occurred.":"Ocurri\u00f3 una excepci\u00f3n de base de datos.","An error occurred while validating the form.":"Ocurri\u00f3 un error al validar el formulario.","Enter":"Ingresar","Search...":"B\u00fasqueda...","Unable to hold an order which payment status has been updated already.":"No se puede retener un pedido cuyo estado de pago ya se actualiz\u00f3.","Unable to change the price mode. This feature has been disabled.":"No se puede cambiar el modo de precio. Esta caracter\u00edstica ha sido deshabilitada.","Enable WholeSale Price":"Habilitar precio de venta al por mayor","Would you like to switch to wholesale price ?":"\u00bfTe gustar\u00eda cambiar a precio mayorista?","Enable Normal Price":"Habilitar precio normal","Would you like to switch to normal price ?":"\u00bfTe gustar\u00eda cambiar al precio normal?","Search products...":"Buscar Productos...","Set Sale Price":"Establecer precio de venta","Remove":"Remover","No product are added to this group.":"No se a\u00f1ade ning\u00fan producto a este grupo.","Delete Sub item":"Eliminar elemento secundario","Would you like to delete this sub item?":"\u00bfDesea eliminar este elemento secundario?","Unable to add a grouped product.":"No se puede agregar un producto agrupado.","Choose The Unit":"Elija la unidad","Stock Report":"Informe de existencias","Wallet Amount":"Importe de la cartera","Wallet History":"Historial de la billetera","Transaction":"Transacci\u00f3n","No History...":"No historia...","Removing":"eliminando","Refunding":"Reembolso","Unknow":"Desconocido","Skip Instalments":"Saltar Cuotas","Define the product type.":"Defina el tipo de producto.","Dynamic":"Din\u00e1mica","In case the product is computed based on a percentage, define the rate here.":"En caso de que el producto se calcule en base a un porcentaje, defina aqu\u00ed la tasa.","Before saving this order, a minimum payment of {amount} is required":"Antes de guardar este pedido, se requiere un pago m\u00ednimo de {amount}","Initial Payment":"Pago inicial","In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?":"Para continuar, se requiere un pago inicial de {cantidad} para el tipo de pago seleccionado \"{tipo de pago}\". \u00bfLe gustar\u00eda continuar?","Search Customer...":"Buscar cliente...","Due Amount":"Cantidad debida","Wallet Balance":"Saldo de la cartera","Total Orders":"Pedidos totales","What slug should be used ? [Q] to quit.":"\u00bfQu\u00e9 babosa se debe usar? [Q] para salir.","\"%s\" is a reserved class name":"\"%s\" es un nombre de clase reservado","The migration file has been successfully forgotten for the module %s.":"El archivo de migraci\u00f3n se ha olvidado correctamente para el m\u00f3dulo %s.","%s products where updated.":"Se actualizaron %s productos.","Previous Amount":"Importe anterior","Next Amount":"Cantidad siguiente","Restrict the records by the creation date.":"Restrinja los registros por la fecha de creaci\u00f3n.","Restrict the records by the author.":"Restringir los registros por autor.","Grouped Product":"Producto agrupado","Groups":"Grupos","Choose Group":"Elegir grupo","Grouped":"agrupados","An error has occurred":"Ha ocurrido un error","Unable to proceed, the submitted form is not valid.":"No se puede continuar, el formulario enviado no es v\u00e1lido.","No activation is needed for this account.":"No se necesita activaci\u00f3n para esta cuenta.","Invalid activation token.":"Token de activaci\u00f3n no v\u00e1lido.","The expiration token has expired.":"El token de caducidad ha caducado.","Your account is not activated.":"Su cuenta no est\u00e1 activada.","Unable to change a password for a non active user.":"No se puede cambiar una contrase\u00f1a para un usuario no activo.","Unable to submit a new password for a non active user.":"No se puede enviar una nueva contrase\u00f1a para un usuario no activo.","Unable to delete an entry that no longer exists.":"No se puede eliminar una entrada que ya no existe.","Provides an overview of the products stock.":"Proporciona una visi\u00f3n general del stock de productos.","Customers Statement":"Declaraci\u00f3n de clientes","Display the complete customer statement.":"Muestre la declaraci\u00f3n completa del cliente.","The recovery has been explicitly disabled.":"La recuperaci\u00f3n se ha desactivado expl\u00edcitamente.","The registration has been explicitly disabled.":"El registro ha sido expl\u00edcitamente deshabilitado.","The entry has been successfully updated.":"La entrada se ha actualizado correctamente.","A similar module has been found":"Se ha encontrado un m\u00f3dulo similar.","A grouped product cannot be saved without any sub items.":"Un producto agrupado no se puede guardar sin subart\u00edculos.","A grouped product cannot contain grouped product.":"Un producto agrupado no puede contener un producto agrupado.","The subitem has been saved.":"El subelemento se ha guardado.","The %s is already taken.":"El %s ya est\u00e1 en uso.","Allow Wholesale Price":"Permitir precio mayorista","Define if the wholesale price can be selected on the POS.":"Definir si el precio mayorista se puede seleccionar en el PDV.","Allow Decimal Quantities":"Permitir cantidades decimales","Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.":"Cambiar\u00e1 el teclado num\u00e9rico para permitir decimales para cantidades. Solo para el teclado num\u00e9rico \"predeterminado\".","Numpad":"teclado num\u00e9rico","Advanced":"Avanzado","Will set what is the numpad used on the POS screen.":"Establecer\u00e1 cu\u00e1l es el teclado num\u00e9rico utilizado en la pantalla POS.","Force Barcode Auto Focus":"Forzar enfoque autom\u00e1tico de c\u00f3digo de barras","Will permanently enable barcode autofocus to ease using a barcode reader.":"Habilitar\u00e1 permanentemente el enfoque autom\u00e1tico de c\u00f3digo de barras para facilitar el uso de un lector de c\u00f3digo de barras.","Tax Included":"Impuesto incluido","Unable to proceed, more than one product is set as featured":"No se puede continuar, m\u00e1s de un producto est\u00e1 configurado como destacado","The transaction was deleted.":"La transacci\u00f3n fue eliminada.","Database connection was successful.":"La conexi\u00f3n a la base de datos fue exitosa.","The products taxes were computed successfully.":"Los impuestos sobre los productos se calcularon con \u00e9xito.","Tax Excluded":"Sin impuestos","Set Paid":"Establecer pagado","Would you like to mark this procurement as paid?":"\u00bfDesea marcar esta adquisici\u00f3n como pagada?","Unidentified Item":"Art\u00edculo no identificado","Non-existent Item":"Art\u00edculo inexistente","You cannot change the status of an already paid procurement.":"No puede cambiar el estado de una compra ya pagada.","The procurement payment status has been changed successfully.":"El estado de pago de la compra se ha cambiado correctamente.","The procurement has been marked as paid.":"La adquisici\u00f3n se ha marcado como pagada.","Show Price With Tax":"Mostrar precio con impuestos","Will display price with tax for each products.":"Mostrar\u00e1 el precio con impuestos para cada producto.","Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".":"No se pudo cargar el componente \"${action.component}\". Aseg\u00farese de que el componente est\u00e9 registrado en \"nsExtraComponents\".","Tax Inclusive":"Impuestos Incluidos","Apply Coupon":"Aplicar cup\u00f3n","Not applicable":"No aplica","Normal":"Normal","Product Taxes":"Impuestos sobre productos","The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.":"Falta la unidad adjunta a este producto o no est\u00e1 asignada. Revise la pesta\u00f1a \"Unidad\" para este producto.","X Days After Month Starts":"X Days After Month Starts","On Specific Day":"On Specific Day","Unknown Occurance":"Unknown Occurance","Please provide a valid value.":"Please provide a valid value.","Done":"Done","Would you like to delete \"%s\"?":"Would you like to delete \"%s\"?","Unable to find a module having as namespace \"%s\"":"Unable to find a module having as namespace \"%s\"","Api File":"Api File","Migrations":"Migrations","Determine Until When the coupon is valid.":"Determine Until When the coupon is valid.","Customer Groups":"Customer Groups","Assigned To Customer Group":"Assigned To Customer Group","Only the customers who belongs to the selected groups will be able to use the coupon.":"Only the customers who belongs to the selected groups will be able to use the coupon.","Assigned To Customers":"Assigned To Customers","Only the customers selected will be ale to use the coupon.":"Only the customers selected will be ale to use the coupon.","Unable to save the coupon as one of the selected customer no longer exists.":"Unable to save the coupon as one of the selected customer no longer exists.","Unable to save the coupon as one of the selected customer group no longer exists.":"Unable to save the coupon as one of the selected customer group no longer exists.","Unable to save the coupon as one of the customers provided no longer exists.":"Unable to save the coupon as one of the customers provided no longer exists.","Unable to save the coupon as one of the provided customer group no longer exists.":"Unable to save the coupon as one of the provided customer group no longer exists.","Coupon Order Histories List":"Coupon Order Histories List","Display all coupon order histories.":"Display all coupon order histories.","No coupon order histories has been registered":"No coupon order histories has been registered","Add a new coupon order history":"Add a new coupon order history","Create a new coupon order history":"Create a new coupon order history","Register a new coupon order history and save it.":"Register a new coupon order history and save it.","Edit coupon order history":"Edit coupon order history","Modify Coupon Order History.":"Modify Coupon Order History.","Return to Coupon Order Histories":"Return to Coupon Order Histories","Customer_coupon_id":"Customer_coupon_id","Order_id":"Order_id","Discount_value":"Discount_value","Minimum_cart_value":"Minimum_cart_value","Maximum_cart_value":"Maximum_cart_value","Limit_usage":"Limit_usage","Would you like to delete this?":"Would you like to delete this?","Usage History":"Usage History","Customer Coupon Histories List":"Customer Coupon Histories List","Display all customer coupon histories.":"Display all customer coupon histories.","No customer coupon histories has been registered":"No customer coupon histories has been registered","Add a new customer coupon history":"Add a new customer coupon history","Create a new customer coupon history":"Create a new customer coupon history","Register a new customer coupon history and save it.":"Register a new customer coupon history and save it.","Edit customer coupon history":"Edit customer coupon history","Modify Customer Coupon History.":"Modify Customer Coupon History.","Return to Customer Coupon Histories":"Return to Customer Coupon Histories","Last Name":"Last Name","Provide the customer last name":"Provide the customer last name","Provide the customer gender.":"Provide the customer gender.","Provide the billing first name.":"Provide the billing first name.","Provide the billing last name.":"Provide the billing last name.","Provide the shipping First Name.":"Provide the shipping First Name.","Provide the shipping Last Name.":"Provide the shipping Last Name.","Scheduled":"Scheduled","Set the scheduled date.":"Set the scheduled date.","Account Name":"Account Name","Provider last name if necessary.":"Provider last name if necessary.","Provide the user first name.":"Provide the user first name.","Provide the user last name.":"Provide the user last name.","Set the user gender.":"Set the user gender.","Set the user phone number.":"Set the user phone number.","Set the user PO Box.":"Set the user PO Box.","Provide the billing First Name.":"Provide the billing First Name.","Last name":"Last name","Group Name":"Group Name","Delete a user":"Delete a user","Activated":"Activated","type":"type","User Group":"User Group","Scheduled On":"Scheduled On","Biling":"Biling","API Token":"API Token","Your Account has been successfully created.":"Your Account has been successfully created.","Unable to export if there is nothing to export.":"Unable to export if there is nothing to export.","%s Coupons":"%s Coupons","%s Coupon History":"%s Coupon History","\"%s\" Record History":"\"%s\" Record History","The media name was successfully updated.":"The media name was successfully updated.","The role was successfully assigned.":"The role was successfully assigned.","The role were successfully assigned.":"The role were successfully assigned.","Unable to identifier the provided role.":"Unable to identifier the provided role.","Good Condition":"Good Condition","Cron Disabled":"Cron Disabled","Task Scheduling Disabled":"Task Scheduling Disabled","NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.":"NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.","The email \"%s\" is already used for another customer.":"The email \"%s\" is already used for another customer.","The provided coupon cannot be loaded for that customer.":"The provided coupon cannot be loaded for that customer.","The provided coupon cannot be loaded for the group assigned to the selected customer.":"The provided coupon cannot be loaded for the group assigned to the selected customer.","Unable to use the coupon %s as it has expired.":"Unable to use the coupon %s as it has expired.","Unable to use the coupon %s at this moment.":"Unable to use the coupon %s at this moment.","Small Box":"Small Box","Box":"Box","%s products were freed":"%s products were freed","Restoring cash flow from paid orders...":"Restoring cash flow from paid orders...","Restoring cash flow from refunded orders...":"Restoring cash flow from refunded orders...","%s on %s directories were deleted.":"%s on %s directories were deleted.","%s on %s files were deleted.":"%s on %s files were deleted.","First Day Of Month":"First Day Of Month","Last Day Of Month":"Last Day Of Month","Month middle Of Month":"Month middle Of Month","{day} after month starts":"{day} after month starts","{day} before month ends":"{day} before month ends","Every {day} of the month":"Every {day} of the month","Days":"Days","Make sure set a day that is likely to be executed":"Make sure set a day that is likely to be executed","Invalid Module provided.":"Invalid Module provided.","The module was \"%s\" was successfully installed.":"The module was \"%s\" was successfully installed.","The modules \"%s\" was deleted successfully.":"The modules \"%s\" was deleted successfully.","Unable to locate a module having as identifier \"%s\".":"Unable to locate a module having as identifier \"%s\".","All migration were executed.":"All migration were executed.","Unknown Product Status":"Unknown Product Status","Member Since":"Member Since","Total Customers":"Total Customers","The widgets was successfully updated.":"The widgets was successfully updated.","The token was successfully created":"The token was successfully created","The token has been successfully deleted.":"The token has been successfully deleted.","Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".":"Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".","Will display all cashiers who performs well.":"Will display all cashiers who performs well.","Will display all customers with the highest purchases.":"Will display all customers with the highest purchases.","Expense Card Widget":"Expense Card Widget","Will display a card of current and overwall expenses.":"Will display a card of current and overwall expenses.","Incomplete Sale Card Widget":"Incomplete Sale Card Widget","Will display a card of current and overall incomplete sales.":"Will display a card of current and overall incomplete sales.","Orders Chart":"Orders Chart","Will display a chart of weekly sales.":"Will display a chart of weekly sales.","Orders Summary":"Orders Summary","Will display a summary of recent sales.":"Will display a summary of recent sales.","Will display a profile widget with user stats.":"Will display a profile widget with user stats.","Sale Card Widget":"Sale Card Widget","Will display current and overall sales.":"Will display current and overall sales.","Return To Calendar":"Return To Calendar","Thr":"Thr","The left range will be invalid.":"The left range will be invalid.","The right range will be invalid.":"The right range will be invalid.","Click here to add widgets":"Click here to add widgets","Choose Widget":"Choose Widget","Select with widget you want to add to the column.":"Select with widget you want to add to the column.","Unamed Tab":"Unamed Tab","An error unexpected occured while printing.":"An error unexpected occured while printing.","and":"and","{date} ago":"{date} ago","In {date}":"In {date}","An unexpected error occured.":"An unexpected error occured.","Warning":"Warning","Change Type":"Change Type","Save Expense":"Save Expense","No configuration were choosen. Unable to proceed.":"No configuration were choosen. Unable to proceed.","Conditions":"Conditions","By proceeding the current for and all your entries will be cleared. Would you like to proceed?":"By proceeding the current for and all your entries will be cleared. Would you like to proceed?","No modules matches your search term.":"No modules matches your search term.","Press \"\/\" to search modules":"Press \"\/\" to search modules","No module has been uploaded yet.":"No module has been uploaded yet.","{module}":"{module}","Would you like to delete \"{module}\"? All data created by the module might also be deleted.":"Would you like to delete \"{module}\"? All data created by the module might also be deleted.","Search Medias":"Search Medias","Bulk Select":"Bulk Select","Press "\/" to search permissions":"Press "\/" to search permissions","SKU, Barcode, Name":"SKU, Barcode, Name","About Token":"About Token","Save Token":"Save Token","Generated Tokens":"Generated Tokens","Created":"Created","Last Use":"Last Use","Never":"Never","Expires":"Expires","Revoke":"Revoke","Token Name":"Token Name","This will be used to identifier the token.":"This will be used to identifier the token.","Unable to proceed, the form is not valid.":"Unable to proceed, the form is not valid.","An unexpected error occured":"An unexpected error occured","An Error Has Occured":"An Error Has Occured","Febuary":"Febuary","Configure":"Configure","Unable to add the product":"Unable to add the product","No result to result match the search value provided.":"No result to result match the search value provided.","This QR code is provided to ease authentication on external applications.":"This QR code is provided to ease authentication on external applications.","Copy And Close":"Copy And Close","An error has occured":"An error has occured","Recents Orders":"Recents Orders","Unamed Page":"Unamed Page","Assignation":"Assignation","Incoming Conversion":"Incoming Conversion","Outgoing Conversion":"Outgoing Conversion","Unknown Action":"Unknown Action","Direct Transaction":"Direct Transaction","Recurring Transaction":"Recurring Transaction","Entity Transaction":"Entity Transaction","Scheduled Transaction":"Scheduled Transaction","Unknown Type (%s)":"Unknown Type (%s)","What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.":"What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.","What is the full model name. eg: App\\Models\\Order ? [Q] to quit.":"What is the full model name. eg: App\\Models\\Order ? [Q] to quit.","What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.":"What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.","Unsupported argument provided: \"%s\"":"Unsupported argument provided: \"%s\"","The authorization token can\\'t be changed manually.":"The authorization token can\\'t be changed manually.","Translation process is complete for the module %s !":"Translation process is complete for the module %s !","%s migration(s) has been deleted.":"%s migration(s) has been deleted.","The command has been created for the module \"%s\"!":"The command has been created for the module \"%s\"!","The controller has been created for the module \"%s\"!":"The controller has been created for the module \"%s\"!","The event has been created at the following path \"%s\"!":"The event has been created at the following path \"%s\"!","The listener has been created on the path \"%s\"!":"The listener has been created on the path \"%s\"!","A request with the same name has been found !":"A request with the same name has been found !","Unable to find a module having the identifier \"%s\".":"Unable to find a module having the identifier \"%s\".","Unsupported reset mode.":"Unsupported reset mode.","You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.":"You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.","Unable to find a module having \"%s\" as namespace.":"Unable to find a module having \"%s\" as namespace.","A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.":"A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.","A new form class was created at the path \"%s\"":"A new form class was created at the path \"%s\"","Unable to proceed, looks like the database can\\'t be used.":"Unable to proceed, looks like the database can\\'t be used.","In which language would you like to install NexoPOS ?":"In which language would you like to install NexoPOS ?","You must define the language of installation.":"You must define the language of installation.","The value above which the current coupon can\\'t apply.":"The value above which the current coupon can\\'t apply.","Unable to save the coupon product as this product doens\\'t exists.":"Unable to save the coupon product as this product doens\\'t exists.","Unable to save the coupon category as this category doens\\'t exists.":"Unable to save the coupon category as this category doens\\'t exists.","Unable to save the coupon as this category doens\\'t exists.":"Unable to save the coupon as this category doens\\'t exists.","You\\re not allowed to do that.":"You\\re not allowed to do that.","Crediting (Add)":"Crediting (Add)","Refund (Add)":"Refund (Add)","Deducting (Remove)":"Deducting (Remove)","Payment (Remove)":"Payment (Remove)","The assigned default customer group doesn\\'t exist or is not defined.":"The assigned default customer group doesn\\'t exist or is not defined.","Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0":"Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0","You\\'re not allowed to do this operation":"You\\'re not allowed to do this operation","If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.":"If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.","Convert Unit":"Convert Unit","The unit that is selected for convertion by default.":"The unit that is selected for convertion by default.","COGS":"COGS","Used to define the Cost of Goods Sold.":"Used to define the Cost of Goods Sold.","Visible":"Visible","Define whether the unit is available for sale.":"Define whether the unit is available for sale.","Product unique name. If it\\' variation, it should be relevant for that variation":"Product unique name. If it\\' variation, it should be relevant for that variation","The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.":"The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.","The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.":"The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.","Auto COGS":"Auto COGS","Unknown Type: %s":"Unknown Type: %s","Shortage":"Shortage","Overage":"Overage","Transactions List":"Transactions List","Display all transactions.":"Display all transactions.","No transactions has been registered":"No transactions has been registered","Add a new transaction":"Add a new transaction","Create a new transaction":"Create a new transaction","Register a new transaction and save it.":"Register a new transaction and save it.","Edit transaction":"Edit transaction","Modify Transaction.":"Modify Transaction.","Return to Transactions":"Return to Transactions","determine if the transaction is effective or not. Work for recurring and not recurring transactions.":"determine if the transaction is effective or not. Work for recurring and not recurring transactions.","Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.":"Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.","Transaction Account":"Transaction Account","Assign the transaction to an account430":"Assign the transaction to an account430","Is the value or the cost of the transaction.":"Is the value or the cost of the transaction.","If set to Yes, the transaction will trigger on defined occurrence.":"If set to Yes, the transaction will trigger on defined occurrence.","Define how often this transaction occurs":"Define how often this transaction occurs","Define what is the type of the transactions.":"Define what is the type of the transactions.","Trigger":"Trigger","Would you like to trigger this expense now?":"Would you like to trigger this expense now?","Transactions History List":"Transactions History List","Display all transaction history.":"Display all transaction history.","No transaction history has been registered":"No transaction history has been registered","Add a new transaction history":"Add a new transaction history","Create a new transaction history":"Create a new transaction history","Register a new transaction history and save it.":"Register a new transaction history and save it.","Edit transaction history":"Edit transaction history","Modify Transactions history.":"Modify Transactions history.","Return to Transactions History":"Return to Transactions History","Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.":"Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.","Set the limit that can\\'t be exceeded by the user.":"Set the limit that can\\'t be exceeded by the user.","Oops, We\\'re Sorry!!!":"Oops, We\\'re Sorry!!!","Class: %s":"Class: %s","There\\'s is mismatch with the core version.":"There\\'s is mismatch with the core version.","You\\'re not authenticated.":"You\\'re not authenticated.","An error occured while performing your request.":"An error occured while performing your request.","A mismatch has occured between a module and it\\'s dependency.":"A mismatch has occured between a module and it\\'s dependency.","You\\'re not allowed to see that page.":"You\\'re not allowed to see that page.","Post Too Large":"Post Too Large","The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini":"The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini","This field does\\'nt have a valid value.":"This field does\\'nt have a valid value.","Describe the direct transaction.":"Describe the direct transaction.","If set to yes, the transaction will take effect immediately and be saved on the history.":"If set to yes, the transaction will take effect immediately and be saved on the history.","Assign the transaction to an account.":"Assign the transaction to an account.","set the value of the transaction.":"set the value of the transaction.","Further details on the transaction.":"Further details on the transaction.","Describe the direct transactions.":"Describe the direct transactions.","set the value of the transactions.":"set the value of the transactions.","The transactions will be multipled by the number of user having that role.":"The transactions will be multipled by the number of user having that role.","Create Sales (needs Procurements)":"Create Sales (needs Procurements)","Set when the transaction should be executed.":"Set when the transaction should be executed.","The addresses were successfully updated.":"The addresses were successfully updated.","Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.":"Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.","The register doesn\\'t have an history.":"The register doesn\\'t have an history.","Unable to check a register session history if it\\'s closed.":"Unable to check a register session history if it\\'s closed.","Register History For : %s":"Register History For : %s","Can\\'t delete a category having sub categories linked to it.":"Can\\'t delete a category having sub categories linked to it.","Unable to proceed. The request doesn\\'t provide enough data which could be handled":"Unable to proceed. The request doesn\\'t provide enough data which could be handled","Unable to load the CRUD resource : %s.":"Unable to load the CRUD resource : %s.","Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods":"Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods","The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.":"The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.","The crud columns exceed the maximum column that can be exported (27)":"The crud columns exceed the maximum column that can be exported (27)","This link has expired.":"This link has expired.","Account History : %s":"Account History : %s","Welcome — %s":"Welcome — %s","Upload and manage medias (photos).":"Upload and manage medias (photos).","The product which id is %s doesnt\\'t belong to the procurement which id is %s":"The product which id is %s doesnt\\'t belong to the procurement which id is %s","The refresh process has started. You\\'ll get informed once it\\'s complete.":"The refresh process has started. You\\'ll get informed once it\\'s complete.","The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".":"The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".","Stock History For %s":"Stock History For %s","Set":"Set","The unit is not set for the product \"%s\".":"The unit is not set for the product \"%s\".","The operation will cause a negative stock for the product \"%s\" (%s).":"The operation will cause a negative stock for the product \"%s\" (%s).","The adjustment quantity can\\'t be negative for the product \"%s\" (%s)":"The adjustment quantity can\\'t be negative for the product \"%s\" (%s)","%s\\'s Products":"%s\\'s Products","Transactions Report":"Transactions Report","Combined Report":"Combined Report","Provides a combined report for every transactions on products.":"Provides a combined report for every transactions on products.","Unable to initiallize the settings page. The identifier \"' . $identifier . '":"Unable to initiallize the settings page. The identifier \"' . $identifier . '","Shows all histories generated by the transaction.":"Shows all histories generated by the transaction.","Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.":"Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.","Create New Transaction":"Create New Transaction","Set direct, scheduled transactions.":"Set direct, scheduled transactions.","Update Transaction":"Update Transaction","The provided data aren\\'t valid":"The provided data aren\\'t valid","Welcome — NexoPOS":"Welcome — NexoPOS","You\\'re not allowed to see this page.":"You\\'re not allowed to see this page.","Your don\\'t have enough permission to perform this action.":"Your don\\'t have enough permission to perform this action.","You don\\'t have the necessary role to see this page.":"You don\\'t have the necessary role to see this page.","%s order(s) has recently been deleted as they has expired.":"%s order(s) has recently been deleted as they has expired.","%s product(s) has low stock. Reorder those product(s) before it get exhausted.":"%s product(s) has low stock. Reorder those product(s) before it get exhausted.","Scheduled Transactions":"Scheduled Transactions","the transaction \"%s\" was executed as scheduled on %s.":"the transaction \"%s\" was executed as scheduled on %s.","Workers Aren\\'t Running":"Workers Aren\\'t Running","The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.":"The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.","Unable to remove the permissions \"%s\". It doesn\\'t exists.":"Unable to remove the permissions \"%s\". It doesn\\'t exists.","An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A":"An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A","Unable to open \"%s\" *, as it\\'s not closed.":"Unable to open \"%s\" *, as it\\'s not closed.","Unable to open \"%s\" *, as it\\'s not opened.":"Unable to open \"%s\" *, as it\\'s not opened.","Unable to cashing on \"%s\" *, as it\\'s not opened.":"Unable to cashing on \"%s\" *, as it\\'s not opened.","Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.":"Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.","Unable to cashout on \"%s":"Unable to cashout on \"%s","Symbolic Links Missing":"Symbolic Links Missing","The Symbolic Links to the public directory is missing. Your medias might be broken and not display.":"The Symbolic Links to the public directory is missing. Your medias might be broken and not display.","Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.":"Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.","The requested module %s cannot be found.":"The requested module %s cannot be found.","The manifest.json can\\'t be located inside the module %s on the path: %s":"The manifest.json can\\'t be located inside the module %s on the path: %s","the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.":"the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.","Sorting is explicitely disabled for the column \"%s\".":"Sorting is explicitely disabled for the column \"%s\".","Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s":"Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s","Unable to find the customer using the provided id %s.":"Unable to find the customer using the provided id %s.","Not enough credits on the customer account. Requested : %s, Remaining: %s.":"Not enough credits on the customer account. Requested : %s, Remaining: %s.","The customer account doesn\\'t have enough funds to proceed.":"The customer account doesn\\'t have enough funds to proceed.","Unable to find a reference to the attached coupon : %s":"Unable to find a reference to the attached coupon : %s","You\\'re not allowed to use this coupon as it\\'s no longer active":"You\\'re not allowed to use this coupon as it\\'s no longer active","You\\'re not allowed to use this coupon it has reached the maximum usage allowed.":"You\\'re not allowed to use this coupon it has reached the maximum usage allowed.","Terminal A":"Terminal A","Terminal B":"Terminal B","%s link were deleted":"%s link were deleted","Unable to execute the following class callback string : %s":"Unable to execute the following class callback string : %s","%s — %s":"%s — %s","Transactions":"Transactions","Create Transaction":"Create Transaction","Stock History":"Stock History","Invoices":"Invoices","Failed to parse the configuration file on the following path \"%s\"":"Failed to parse the configuration file on the following path \"%s\"","No config.xml has been found on the directory : %s. This folder is ignored":"No config.xml has been found on the directory : %s. This folder is ignored","The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ":"The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ","Unable to upload this module as it\\'s older than the version installed":"Unable to upload this module as it\\'s older than the version installed","The migration file doens\\'t have a valid class name. Expected class : %s":"The migration file doens\\'t have a valid class name. Expected class : %s","Unable to locate the following file : %s":"Unable to locate the following file : %s","The migration file doens\\'t have a valid method name. Expected method : %s":"The migration file doens\\'t have a valid method name. Expected method : %s","The module %s cannot be enabled as his dependency (%s) is missing or not enabled.":"The module %s cannot be enabled as his dependency (%s) is missing or not enabled.","The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.":"The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.","An Error Occurred \"%s\": %s":"An Error Occurred \"%s\": %s","The order has been updated":"The order has been updated","The minimal payment of %s has\\'nt been provided.":"The minimal payment of %s has\\'nt been provided.","Unable to proceed as the order is already paid.":"Unable to proceed as the order is already paid.","The customer account funds are\\'nt enough to process the payment.":"The customer account funds are\\'nt enough to process the payment.","Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.","Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.","By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.":"By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.","You\\'re not allowed to make payments.":"You\\'re not allowed to make payments.","Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s":"Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s","Unknown Status (%s)":"Unknown Status (%s)","%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.":"%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.","Unable to find a reference of the provided coupon : %s":"Unable to find a reference of the provided coupon : %s","The procurement has been deleted. %s included stock record(s) has been deleted as well.":"The procurement has been deleted. %s included stock record(s) has been deleted as well.","Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.":"Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.","Unable to find the product using the provided id \"%s\"":"Unable to find the product using the provided id \"%s\"","Unable to procure the product \"%s\" as the stock management is disabled.":"Unable to procure the product \"%s\" as the stock management is disabled.","Unable to procure the product \"%s\" as it is a grouped product.":"Unable to procure the product \"%s\" as it is a grouped product.","The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item":"The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item","%s procurement(s) has recently been automatically procured.":"%s procurement(s) has recently been automatically procured.","The requested category doesn\\'t exists":"The requested category doesn\\'t exists","The category to which the product is attached doesn\\'t exists or has been deleted":"The category to which the product is attached doesn\\'t exists or has been deleted","Unable to create a product with an unknow type : %s":"Unable to create a product with an unknow type : %s","A variation within the product has a barcode which is already in use : %s.":"A variation within the product has a barcode which is already in use : %s.","A variation within the product has a SKU which is already in use : %s":"A variation within the product has a SKU which is already in use : %s","Unable to edit a product with an unknown type : %s":"Unable to edit a product with an unknown type : %s","The requested sub item doesn\\'t exists.":"The requested sub item doesn\\'t exists.","One of the provided product variation doesn\\'t include an identifier.":"One of the provided product variation doesn\\'t include an identifier.","The product\\'s unit quantity has been updated.":"The product\\'s unit quantity has been updated.","Unable to reset this variable product \"%s":"Unable to reset this variable product \"%s","Adjusting grouped product inventory must result of a create, update, delete sale operation.":"Adjusting grouped product inventory must result of a create, update, delete sale operation.","Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).":"Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).","Unsupported stock action \"%s\"":"Unsupported stock action \"%s\"","%s product(s) has been deleted.":"%s product(s) has been deleted.","%s products(s) has been deleted.":"%s products(s) has been deleted.","Unable to find the product, as the argument \"%s\" which value is \"%s":"Unable to find the product, as the argument \"%s\" which value is \"%s","You cannot convert unit on a product having stock management disabled.":"You cannot convert unit on a product having stock management disabled.","The source and the destination unit can\\'t be the same. What are you trying to do ?":"The source and the destination unit can\\'t be the same. What are you trying to do ?","There is no source unit quantity having the name \"%s\" for the item %s":"There is no source unit quantity having the name \"%s\" for the item %s","There is no destination unit quantity having the name %s for the item %s":"There is no destination unit quantity having the name %s for the item %s","The source unit and the destination unit doens\\'t belong to the same unit group.":"The source unit and the destination unit doens\\'t belong to the same unit group.","The group %s has no base unit defined":"The group %s has no base unit defined","The conversion of %s(%s) to %s(%s) was successful":"The conversion of %s(%s) to %s(%s) was successful","The product has been deleted.":"The product has been deleted.","An error occurred: %s.":"An error occurred: %s.","A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.":"A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.","Today\\'s Orders":"Today\\'s Orders","Today\\'s Sales":"Today\\'s Sales","Today\\'s Refunds":"Today\\'s Refunds","Today\\'s Customers":"Today\\'s Customers","The report will be generated. Try loading the report within few minutes.":"The report will be generated. Try loading the report within few minutes.","The database has been wiped out.":"The database has been wiped out.","No custom handler for the reset \"' . $mode . '\"":"No custom handler for the reset \"' . $mode . '\"","Unable to proceed. The parent tax doesn\\'t exists.":"Unable to proceed. The parent tax doesn\\'t exists.","A simple tax must not be assigned to a parent tax with the type \"simple":"A simple tax must not be assigned to a parent tax with the type \"simple","Created via tests":"Created via tests","The transaction has been successfully saved.":"The transaction has been successfully saved.","The transaction has been successfully updated.":"The transaction has been successfully updated.","Unable to find the transaction using the provided identifier.":"Unable to find the transaction using the provided identifier.","Unable to find the requested transaction using the provided id.":"Unable to find the requested transaction using the provided id.","The transction has been correctly deleted.":"The transction has been correctly deleted.","You cannot delete an account which has transactions bound.":"You cannot delete an account which has transactions bound.","The transaction account has been deleted.":"The transaction account has been deleted.","Unable to find the transaction account using the provided ID.":"Unable to find the transaction account using the provided ID.","The transaction account has been updated.":"The transaction account has been updated.","This transaction type can\\'t be triggered.":"This transaction type can\\'t be triggered.","The transaction has been successfully triggered.":"The transaction has been successfully triggered.","The transaction \"%s\" has been processed on day \"%s\".":"The transaction \"%s\" has been processed on day \"%s\".","The transaction \"%s\" has already been processed.":"The transaction \"%s\" has already been processed.","The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.":"The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.","The process has been correctly executed and all transactions has been processed.":"The process has been correctly executed and all transactions has been processed.","The process has been executed with some failures. %s\/%s process(es) has successed.":"The process has been executed with some failures. %s\/%s process(es) has successed.","Procurement : %s":"Procurement : %s","Procurement Liability : %s":"Procurement Liability : %s","Refunding : %s":"Refunding : %s","Spoiled Good : %s":"Spoiled Good : %s","Sale : %s":"Sale : %s","Liabilities Account":"Liabilities Account","Not found account type: %s":"Not found account type: %s","Refund : %s":"Refund : %s","Customer Account Crediting : %s":"Customer Account Crediting : %s","Customer Account Purchase : %s":"Customer Account Purchase : %s","Customer Account Deducting : %s":"Customer Account Deducting : %s","Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.":"Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.","The unit group %s doesn\\'t have a base unit":"The unit group %s doesn\\'t have a base unit","The system role \"Users\" can be retrieved.":"The system role \"Users\" can be retrieved.","The default role that must be assigned to new users cannot be retrieved.":"The default role that must be assigned to new users cannot be retrieved.","%s Second(s)":"%s Second(s)","Configure the accounting feature":"Configure the accounting feature","Define the symbol that indicate thousand. By default ":"Define the symbol that indicate thousand. By default ","Date Time Format":"Date Time Format","This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".":"This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".","Date TimeZone":"Date TimeZone","Determine the default timezone of the store. Current Time: %s":"Determine the default timezone of the store. Current Time: %s","Configure how invoice and receipts are used.":"Configure how invoice and receipts are used.","configure settings that applies to orders.":"configure settings that applies to orders.","Report Settings":"Report Settings","Configure the settings":"Configure the settings","Wipes and Reset the database.":"Wipes and Reset the database.","Supply Delivery":"Supply Delivery","Configure the delivery feature.":"Configure the delivery feature.","Configure how background operations works.":"Configure how background operations works.","Every procurement will be added to the selected transaction account":"Every procurement will be added to the selected transaction account","Every sales will be added to the selected transaction account":"Every sales will be added to the selected transaction account","Customer Credit Account (crediting)":"Customer Credit Account (crediting)","Every customer credit will be added to the selected transaction account":"Every customer credit will be added to the selected transaction account","Customer Credit Account (debitting)":"Customer Credit Account (debitting)","Every customer credit removed will be added to the selected transaction account":"Every customer credit removed will be added to the selected transaction account","Sales refunds will be attached to this transaction account":"Sales refunds will be attached to this transaction account","Stock Return Account (Spoiled Items)":"Stock Return Account (Spoiled Items)","Disbursement (cash register)":"Disbursement (cash register)","Transaction account for all cash disbursement.":"Transaction account for all cash disbursement.","Liabilities":"Liabilities","Transaction account for all liabilities.":"Transaction account for all liabilities.","You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.":"You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.","Show Tax Breakdown":"Show Tax Breakdown","Will display the tax breakdown on the receipt\/invoice.":"Will display the tax breakdown on the receipt\/invoice.","Available tags : ":"Available tags : ","{store_name}: displays the store name.":"{store_name}: displays the store name.","{store_email}: displays the store email.":"{store_email}: displays the store email.","{store_phone}: displays the store phone number.":"{store_phone}: displays the store phone number.","{cashier_name}: displays the cashier name.":"{cashier_name}: displays the cashier name.","{cashier_id}: displays the cashier id.":"{cashier_id}: displays the cashier id.","{order_code}: displays the order code.":"{order_code}: displays the order code.","{order_date}: displays the order date.":"{order_date}: displays the order date.","{order_type}: displays the order type.":"{order_type}: displays the order type.","{customer_name}: displays the customer name.":"{customer_name}: displays the customer name.","{customer_email}: displays the customer email.":"{customer_email}: displays the customer email.","{shipping_first_name}: displays the shipping first name.":"{shipping_first_name}: displays the shipping first name.","{shipping_last_name}: displays the shipping last name.":"{shipping_last_name}: displays the shipping last name.","{shipping_phone}: displays the shipping phone.":"{shipping_phone}: displays the shipping phone.","{shipping_address_1}: displays the shipping address_1.":"{shipping_address_1}: displays the shipping address_1.","{shipping_address_2}: displays the shipping address_2.":"{shipping_address_2}: displays the shipping address_2.","{shipping_country}: displays the shipping country.":"{shipping_country}: displays the shipping country.","{shipping_city}: displays the shipping city.":"{shipping_city}: displays the shipping city.","{shipping_pobox}: displays the shipping pobox.":"{shipping_pobox}: displays the shipping pobox.","{shipping_company}: displays the shipping company.":"{shipping_company}: displays the shipping company.","{shipping_email}: displays the shipping email.":"{shipping_email}: displays the shipping email.","{billing_first_name}: displays the billing first name.":"{billing_first_name}: displays the billing first name.","{billing_last_name}: displays the billing last name.":"{billing_last_name}: displays the billing last name.","{billing_phone}: displays the billing phone.":"{billing_phone}: displays the billing phone.","{billing_address_1}: displays the billing address_1.":"{billing_address_1}: displays the billing address_1.","{billing_address_2}: displays the billing address_2.":"{billing_address_2}: displays the billing address_2.","{billing_country}: displays the billing country.":"{billing_country}: displays the billing country.","{billing_city}: displays the billing city.":"{billing_city}: displays the billing city.","{billing_pobox}: displays the billing pobox.":"{billing_pobox}: displays the billing pobox.","{billing_company}: displays the billing company.":"{billing_company}: displays the billing company.","{billing_email}: displays the billing email.":"{billing_email}: displays the billing email.","Available tags :":"Available tags :","Quick Product Default Unit":"Quick Product Default Unit","Set what unit is assigned by default to all quick product.":"Set what unit is assigned by default to all quick product.","Hide Exhausted Products":"Hide Exhausted Products","Will hide exhausted products from selection on the POS.":"Will hide exhausted products from selection on the POS.","Hide Empty Category":"Hide Empty Category","Category with no or exhausted products will be hidden from selection.":"Category with no or exhausted products will be hidden from selection.","Default Printing (web)":"Default Printing (web)","The amount numbers shortcuts separated with a \"|\".":"The amount numbers shortcuts separated with a \"|\".","No submit URL was provided":"No submit URL was provided","Sorting is explicitely disabled on this column":"Sorting is explicitely disabled on this column","An unpexpected error occured while using the widget.":"An unpexpected error occured while using the widget.","This field must be similar to \"{other}\"\"":"This field must be similar to \"{other}\"\"","This field must have at least \"{length}\" characters\"":"This field must have at least \"{length}\" characters\"","This field must have at most \"{length}\" characters\"":"This field must have at most \"{length}\" characters\"","This field must be different from \"{other}\"\"":"This field must be different from \"{other}\"\"","Search result":"Search result","Choose...":"Choose...","The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.":"The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.","+{count} other":"+{count} other","The selected print gateway doesn't support this type of printing.":"The selected print gateway doesn't support this type of printing.","millisecond| second| minute| hour| day| week| month| year| decade| century| millennium":"millisecond| second| minute| hour| day| week| month| year| decade| century| millennium","milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia":"milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia","An error occured":"An error occured","You\\'re about to delete selected resources. Would you like to proceed?":"You\\'re about to delete selected resources. Would you like to proceed?","See Error":"See Error","Your uploaded files will displays here.":"Your uploaded files will displays here.","Nothing to care about !":"Nothing to care about !","Would you like to bulk edit a system role ?":"Would you like to bulk edit a system role ?","Total :":"Total :","Remaining :":"Remaining :","Instalments:":"Instalments:","This instalment doesn\\'t have any payment attached.":"This instalment doesn\\'t have any payment attached.","You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?":"You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?","An error has occured while seleting the payment gateway.":"An error has occured while seleting the payment gateway.","You're not allowed to add a discount on the product.":"You're not allowed to add a discount on the product.","You're not allowed to add a discount on the cart.":"You're not allowed to add a discount on the cart.","Cash Register : {register}":"Cash Register : {register}","The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?":"The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?","You don't have the right to edit the purchase price.":"You don't have the right to edit the purchase price.","Dynamic product can\\'t have their price updated.":"Dynamic product can\\'t have their price updated.","You\\'re not allowed to edit the order settings.":"You\\'re not allowed to edit the order settings.","Looks like there is either no products and no categories. How about creating those first to get started ?":"Looks like there is either no products and no categories. How about creating those first to get started ?","Create Categories":"Create Categories","You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?":"You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?","An unexpected error has occured while loading the form. Please check the log or contact the support.":"An unexpected error has occured while loading the form. Please check the log or contact the support.","We were not able to load the units. Make sure there are units attached on the unit group selected.":"We were not able to load the units. Make sure there are units attached on the unit group selected.","The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?":"The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?","There shoulnd\\'t be more option than there are units.":"There shoulnd\\'t be more option than there are units.","Either Selling or Purchase unit isn\\'t defined. Unable to proceed.":"Either Selling or Purchase unit isn\\'t defined. Unable to proceed.","Select the procured unit first before selecting the conversion unit.":"Select the procured unit first before selecting the conversion unit.","Convert to unit":"Convert to unit","An unexpected error has occured":"An unexpected error has occured","Unable to add product which doesn\\'t unit quantities defined.":"Unable to add product which doesn\\'t unit quantities defined.","{product}: Purchase Unit":"{product}: Purchase Unit","The product will be procured on that unit.":"The product will be procured on that unit.","Unkown Unit":"Unkown Unit","Choose Tax":"Choose Tax","The tax will be assigned to the procured product.":"The tax will be assigned to the procured product.","Show Details":"Show Details","Hide Details":"Hide Details","Important Notes":"Important Notes","Stock Management Products.":"Stock Management Products.","Doesn\\'t work with Grouped Product.":"Doesn\\'t work with Grouped Product.","Convert":"Convert","Looks like no valid products matched the searched term.":"Looks like no valid products matched the searched term.","This product doesn't have any stock to adjust.":"This product doesn't have any stock to adjust.","Select Unit":"Select Unit","Select the unit that you want to adjust the stock with.":"Select the unit that you want to adjust the stock with.","A similar product with the same unit already exists.":"A similar product with the same unit already exists.","Select Procurement":"Select Procurement","Select the procurement that you want to adjust the stock with.":"Select the procurement that you want to adjust the stock with.","Select Action":"Select Action","Select the action that you want to perform on the stock.":"Select the action that you want to perform on the stock.","Would you like to remove the selected products from the table ?":"Would you like to remove the selected products from the table ?","Unit:":"Unit:","Operation:":"Operation:","Procurement:":"Procurement:","Reason:":"Reason:","Provided":"Provided","Not Provided":"Not Provided","Remove Selected":"Remove Selected","Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.":"Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.","You haven\\'t yet generated any token for your account. Create one to get started.":"You haven\\'t yet generated any token for your account. Create one to get started.","You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?":"You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?","Date Range : {date1} - {date2}":"Date Range : {date1} - {date2}","Document : Best Products":"Document : Best Products","By : {user}":"By : {user}","Range : {date1} — {date2}":"Range : {date1} — {date2}","Document : Sale By Payment":"Document : Sale By Payment","Document : Customer Statement":"Document : Customer Statement","Customer : {selectedCustomerName}":"Customer : {selectedCustomerName}","All Categories":"All Categories","All Units":"All Units","Date : {date}":"Date : {date}","Document : {reportTypeName}":"Document : {reportTypeName}","Threshold":"Threshold","Select Units":"Select Units","An error has occured while loading the units.":"An error has occured while loading the units.","An error has occured while loading the categories.":"An error has occured while loading the categories.","Document : Payment Type":"Document : Payment Type","Document : Profit Report":"Document : Profit Report","Filter by Category":"Filter by Category","Filter by Units":"Filter by Units","An error has occured while loading the categories":"An error has occured while loading the categories","An error has occured while loading the units":"An error has occured while loading the units","By Type":"By Type","By User":"By User","By Category":"By Category","All Category":"All Category","Document : Sale Report":"Document : Sale Report","Filter By Category":"Filter By Category","Allow you to choose the category.":"Allow you to choose the category.","No category was found for proceeding the filtering.":"No category was found for proceeding the filtering.","Document : Sold Stock Report":"Document : Sold Stock Report","Filter by Unit":"Filter by Unit","Limit Results By Categories":"Limit Results By Categories","Limit Results By Units":"Limit Results By Units","Generate Report":"Generate Report","Document : Combined Products History":"Document : Combined Products History","Ini. Qty":"Ini. Qty","Added Quantity":"Added Quantity","Add. Qty":"Add. Qty","Sold Quantity":"Sold Quantity","Sold Qty":"Sold Qty","Defective Quantity":"Defective Quantity","Defec. Qty":"Defec. Qty","Final Quantity":"Final Quantity","Final Qty":"Final Qty","No data available":"No data available","Document : Yearly Report":"Document : Yearly Report","The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.":"The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.","Unable to edit this transaction":"Unable to edit this transaction","This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.":"This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.","Save Transaction":"Save Transaction","While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.":"While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.","The transaction is about to be saved. Would you like to confirm your action ?":"The transaction is about to be saved. Would you like to confirm your action ?","Unable to load the transaction":"Unable to load the transaction","You cannot edit this transaction if NexoPOS cannot perform background requests.":"You cannot edit this transaction if NexoPOS cannot perform background requests.","MySQL is selected as database driver":"MySQL is selected as database driver","Please provide the credentials to ensure NexoPOS can connect to the database.":"Please provide the credentials to ensure NexoPOS can connect to the database.","Sqlite is selected as database driver":"Sqlite is selected as database driver","Make sure Sqlite module is available for PHP. Your database will be located on the database directory.":"Make sure Sqlite module is available for PHP. Your database will be located on the database directory.","Checking database connectivity...":"Checking database connectivity...","Driver":"Driver","Set the database driver":"Set the database driver","Hostname":"Hostname","Provide the database hostname":"Provide the database hostname","Username required to connect to the database.":"Username required to connect to the database.","The username password required to connect.":"The username password required to connect.","Database Name":"Database Name","Provide the database name. Leave empty to use default file for SQLite Driver.":"Provide the database name. Leave empty to use default file for SQLite Driver.","Database Prefix":"Database Prefix","Provide the database prefix.":"Provide the database prefix.","Port":"Port","Provide the hostname port.":"Provide the hostname port.","NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.":"NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.","Install":"Install","Application":"Application","That is the application name.":"That is the application name.","Provide the administrator username.":"Provide the administrator username.","Provide the administrator email.":"Provide the administrator email.","What should be the password required for authentication.":"What should be the password required for authentication.","Should be the same as the password above.":"Should be the same as the password above.","Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.":"Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.","Choose your language to get started.":"Choose your language to get started.","Remaining Steps":"Remaining Steps","Database Configuration":"Database Configuration","Application Configuration":"Application Configuration","Language Selection":"Language Selection","Select what will be the default language of NexoPOS.":"Select what will be the default language of NexoPOS.","In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.":"In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.","Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.":"Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.","Please report this message to the support : ":"Please report this message to the support : ","No refunds made so far. Good news right?":"No refunds made so far. Good news right?","Open Register : %s":"Open Register : %s","Loading Coupon For : ":"Loading Coupon For : ","This coupon requires products that aren\\'t available on the cart at the moment.":"This coupon requires products that aren\\'t available on the cart at the moment.","This coupon requires products that belongs to specific categories that aren\\'t included at the moment.":"This coupon requires products that belongs to specific categories that aren\\'t included at the moment.","Too many results.":"Too many results.","New Customer":"New Customer","Purchases":"Purchases","Owed":"Owed","Usage :":"Usage :","Code :":"Code :","Order Reference":"Order Reference","The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?":"The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?","{product} : Units":"{product} : Units","This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.":"This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.","Previewing :":"Previewing :","Search for options":"Search for options","The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.":"The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.","The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.":"The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.","The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.":"The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.","The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.":"The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.","Invalid Error Message":"Invalid Error Message","{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List":"{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List","Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.":"Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.","No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered":"No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered","Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.":"Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.","Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.":"Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.","Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}":"Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}","{{ ucwords( $column ) }}":"{{ ucwords( $column ) }}","Delete Selected Entries":"Delete Selected Entries","Unamed Settings Page":"Unamed Settings Page","Description of unamed setting page":"Description of unamed setting page","Text Field":"Text Field","This is a sample text field.":"This is a sample text field.","No description has been provided.":"No description has been provided.","You\\'re using NexoPOS %s<\/a>":"You\\'re using NexoPOS %s<\/a>","If you haven\\'t asked this, please get in touch with the administrators.":"If you haven\\'t asked this, please get in touch with the administrators.","A new user has registered to your store (%s) with the email %s.":"A new user has registered to your store (%s) with the email %s.","The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.":"The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.","Note: ":"Note: ","Inclusive Product Taxes":"Inclusive Product Taxes","Exclusive Product Taxes":"Exclusive Product Taxes","Condition:":"Condition:","Date : %s":"Date : %s","The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?":"The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?","NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.":"NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.","Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.":"Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.","Retry":"Retry","If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.":"If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources."} \ No newline at end of file +{ + "displaying {perPage} on {items} items": "mostrando {perPage} en {items} items", + "The document has been generated.": "El documento ha sido generado.", + "Unexpected error occurred.": "Se ha producido un error inesperado.", + "{entries} entries selected": "{entries} entradas seleccionadas", + "Download": "descargar", + "This field is required.": "Este campo es obligatorio.", + "This field must contain a valid email address.": "Este campo debe contener una direcci\u00f3n de correo electr\u00f3nico v\u00e1lida.", + "Clear Selected Entries ?": "Borrar entradas seleccionadas ?", + "Would you like to clear all selected entries ?": "\u00bfDesea borrar todas las entradas seleccionadas?", + "No selection has been made.": "No se ha hecho ninguna selecci\u00f3n.", + "No action has been selected.": "No se ha seleccionado ninguna acci\u00f3n.", + "There is nothing to display...": "No hay nada que mostrar...", + "Bulk Actions": "Acciones masivas", + "Date": "fecha", + "N\/A": "N\/A", + "Sun": "Sab", + "Mon": "Mon", + "Tue": "Mar", + "Wed": "Mi\u00e9rcoles", + "Fri": "Vie", + "Sat": "S\u00e1b", + "Nothing to display": "Nada que mostrar", + "Delivery": "entrega", + "Take Away": "A domicilio", + "Unknown Type": "Tipo desconocido", + "Pending": "pendiente", + "Ongoing": "actual", + "Delivered": "entregado", + "Unknown Status": "Estado desconocido", + "Ready": "listo", + "Paid": "pagado", + "Hold": "sostener", + "Unpaid": "impagado", + "Partially Paid": "Parcialmente pagado", + "Password Forgotten ?": "Contrase\u00f1a olvidada ?", + "Sign In": "Inicia sesi\u00f3n", + "Register": "registro", + "An unexpected error occurred.": "Se ha producido un error inesperado.", + "OK": "De acuerdo", + "Unable to proceed the form is not valid.": "No se puede continuar el formulario no es v\u00e1lido.", + "Save Password": "Guardar contrase\u00f1a", + "Remember Your Password ?": "\u00bfRecuerdas tu contrase\u00f1a?", + "Submit": "Enviar", + "Already registered ?": "\u00bfYa est\u00e1 registrado?", + "Best Cashiers": "Los mejores cajeros", + "No result to display.": "No hay resultado que mostrar.", + "Well.. nothing to show for the meantime.": "pozo.. nada que mostrar mientras tanto.", + "Best Customers": "Los mejores clientes", + "Well.. nothing to show for the meantime": "pozo.. nada que mostrar mientras tanto", + "Total Sales": "Ventas totales", + "Today": "Hoy", + "Incomplete Orders": "\u00d3rdenes incompletas", + "Expenses": "expensas", + "Weekly Sales": "Ventas semanales", + "Week Taxes": "Impuestos semanales", + "Net Income": "Ingresos netos", + "Week Expenses": "Gastos semanales", + "Order": "orden", + "Refresh": "actualizar", + "Upload": "subir", + "Enabled": "Habilitado", + "Disabled": "Deshabilitado", + "Enable": "habilitar", + "Disable": "inutilizar", + "Gallery": "galer\u00eda", + "Medias Manager": "Gerente de Medios", + "Click Here Or Drop Your File To Upload": "Haga clic aqu\u00ed o deje caer su archivo para cargarlo", + "Nothing has already been uploaded": "Nada ya ha sido subido", + "File Name": "nombre de archivo", + "Uploaded At": "Subido en", + "By": "por", + "Previous": "anterior", + "Next": "pr\u00f3ximo", + "Use Selected": "Usar seleccionado", + "Clear All": "Borrar todo", + "Confirm Your Action": "Confirme su acci\u00f3n", + "Would you like to clear all the notifications ?": "\u00bfDesea borrar todas las notificaciones?", + "Permissions": "Permisos", + "Payment Summary": "Resumen de pagos", + "Sub Total": "Sub Total", + "Discount": "Descuento", + "Shipping": "Naviero", + "Coupons": "Cupones", + "Total": "Total", + "Taxes": "Impuestos", + "Change": "cambio", + "Order Status": "Estado del pedido", + "Customer": "Cliente", + "Type": "Tipo", + "Delivery Status": "Estado de entrega", + "Save": "Salvar", + "Payment Status": "Estado de pago", + "Products": "Productos", + "Would you proceed ?": "\u00bfProceder\u00eda?", + "The processing status of the order will be changed. Please confirm your action.": "Se cambiar\u00e1 el estado de procesamiento del pedido. Por favor, confirme su acci\u00f3n.", + "Instalments": "Cuotas", + "Create": "Crear", + "Add Instalment": "A\u00f1adir cuota", + "Would you like to create this instalment ?": "\u00bfTe gustar\u00eda crear esta entrega?", + "An unexpected error has occurred": "Se ha producido un error inesperado", + "Would you like to delete this instalment ?": "\u00bfDesea eliminar esta cuota?", + "Would you like to update that instalment ?": "\u00bfLe gustar\u00eda actualizar esa entrega?", + "Print": "Impresi\u00f3n", + "Store Details": "Detalles de la tienda", + "Order Code": "C\u00f3digo de pedido", + "Cashier": "cajero", + "Billing Details": "Detalles de facturaci\u00f3n", + "Shipping Details": "Detalles del env\u00edo", + "Product": "Producto", + "Unit Price": "Precio por unidad", + "Quantity": "Cantidad", + "Tax": "Impuesto", + "Total Price": "Precio total", + "Expiration Date": "fecha de caducidad", + "Due": "Pendiente", + "Customer Account": "Cuenta de cliente", + "Payment": "Pago", + "No payment possible for paid order.": "No es posible realizar ning\u00fan pago por pedido pagado.", + "Payment History": "Historial de pagos", + "Unable to proceed the form is not valid": "No poder continuar el formulario no es v\u00e1lido", + "Please provide a valid value": "Proporcione un valor v\u00e1lido", + "Refund With Products": "Reembolso con productos", + "Refund Shipping": "Env\u00edo de reembolso", + "Add Product": "A\u00f1adir producto", + "Damaged": "da\u00f1ado", + "Unspoiled": "virgen", + "Summary": "resumen", + "Payment Gateway": "Pasarela de pago", + "Screen": "pantalla", + "Select the product to perform a refund.": "Seleccione el producto para realizar un reembolso.", + "Please select a payment gateway before proceeding.": "Seleccione una pasarela de pago antes de continuar.", + "There is nothing to refund.": "No hay nada que reembolsar.", + "Please provide a valid payment amount.": "Indique un importe de pago v\u00e1lido.", + "The refund will be made on the current order.": "El reembolso se realizar\u00e1 en el pedido actual.", + "Please select a product before proceeding.": "Seleccione un producto antes de continuar.", + "Not enough quantity to proceed.": "No hay suficiente cantidad para proceder.", + "Would you like to delete this product ?": "\u00bfDesea eliminar este producto?", + "Customers": "Clientela", + "Dashboard": "Salpicadero", + "Order Type": "Tipo de pedido", + "Orders": "\u00d3rdenes", + "Cash Register": "Caja registradora", + "Reset": "Reiniciar", + "Cart": "Carro", + "Comments": "Comentarios", + "No products added...": "No hay productos a\u00f1adidos ...", + "Price": "Precio", + "Flat": "Departamento", + "Pay": "Pagar", + "Void": "Vac\u00eda", + "Current Balance": "Saldo actual", + "Full Payment": "Pago completo", + "The customer account can only be used once per order. Consider deleting the previously used payment.": "La cuenta del cliente solo se puede utilizar una vez por pedido.Considere la eliminaci\u00f3n del pago utilizado anteriormente.", + "Not enough funds to add {amount} as a payment. Available balance {balance}.": "No hay suficientes fondos para agregar {amount} como pago.Balance disponible {balance}.", + "Confirm Full Payment": "Confirmar el pago completo", + "A full payment will be made using {paymentType} for {total}": "Se realizar\u00e1 un pago completo utilizando {paymentType} para {total}", + "You need to provide some products before proceeding.": "Debe proporcionar algunos productos antes de continuar.", + "Unable to add the product, there is not enough stock. Remaining %s": "No se puede agregar el producto, no hay suficiente stock.%s Siendo", + "Add Images": "A\u00f1adir im\u00e1genes", + "New Group": "Nuevo grupo", + "Available Quantity": "Cantidad disponible", + "Delete": "Borrar", + "Would you like to delete this group ?": "\u00bfTe gustar\u00eda eliminar este grupo?", + "Your Attention Is Required": "Se requiere su atenci\u00f3n", + "Please select at least one unit group before you proceed.": "Seleccione al menos un grupo de unidades antes de continuar.", + "Unable to proceed as one of the unit group field is invalid": "Incapaz de proceder como uno de los campos de grupo unitario no es v\u00e1lido", + "Would you like to delete this variation ?": "\u00bfTe gustar\u00eda eliminar esta variaci\u00f3n?", + "Details": "Detalles", + "Unable to proceed, no product were provided.": "No se puede proceder, no se proporcion\u00f3 ning\u00fan producto.", + "Unable to proceed, one or more product has incorrect values.": "No se puede continuar, uno o m\u00e1s productos tienen valores incorrectos.", + "Unable to proceed, the procurement form is not valid.": "No se puede continuar, el formulario de adquisici\u00f3n no es v\u00e1lido.", + "Unable to submit, no valid submit URL were provided.": "No se puede enviar, no se proporcion\u00f3 una URL de env\u00edo v\u00e1lida.", + "No title is provided": "No se proporciona ning\u00fan t\u00edtulo", + "SKU": "SKU", + "Barcode": "C\u00f3digo de barras", + "Options": "Opciones", + "The product already exists on the table.": "El producto ya existe sobre la mesa.", + "The specified quantity exceed the available quantity.": "La cantidad especificada excede la cantidad disponible.", + "Unable to proceed as the table is empty.": "No se puede continuar porque la mesa est\u00e1 vac\u00eda.", + "The stock adjustment is about to be made. Would you like to confirm ?": "El ajuste de existencias est\u00e1 a punto de realizarse. \u00bfQuieres confirmar?", + "More Details": "M\u00e1s detalles", + "Useful to describe better what are the reasons that leaded to this adjustment.": "\u00datil para describir mejor cu\u00e1les son las razones que llevaron a este ajuste.", + "Would you like to remove this product from the table ?": "\u00bfLe gustar\u00eda quitar este producto de la mesa?", + "Search": "Buscar", + "Unit": "Unidad", + "Operation": "Operaci\u00f3n", + "Procurement": "Obtenci\u00f3n", + "Value": "Valor", + "Search and add some products": "Buscar y agregar algunos productos", + "Proceed": "Continuar", + "Unable to proceed. Select a correct time range.": "Incapaces de proceder. Seleccione un intervalo de tiempo correcto.", + "Unable to proceed. The current time range is not valid.": "Incapaces de proceder. El intervalo de tiempo actual no es v\u00e1lido.", + "Would you like to proceed ?": "\u00bfLe gustar\u00eda continuar?", + "No rules has been provided.": "No se han proporcionado reglas.", + "No valid run were provided.": "No se proporcionaron ejecuciones v\u00e1lidas.", + "Unable to proceed, the form is invalid.": "No se puede continuar, el formulario no es v\u00e1lido.", + "Unable to proceed, no valid submit URL is defined.": "No se puede continuar, no se define una URL de env\u00edo v\u00e1lida.", + "No title Provided": "Sin t\u00edtulo proporcionado", + "General": "General", + "Add Rule": "Agregar regla", + "Save Settings": "Guardar ajustes", + "An unexpected error occurred": "Ocurri\u00f3 un error inesperado", + "Ok": "OK", + "New Transaction": "Nueva transacci\u00f3n", + "Close": "Cerca", + "Would you like to delete this order": "\u00bfLe gustar\u00eda eliminar este pedido?", + "The current order will be void. This action will be recorded. Consider providing a reason for this operation": "El pedido actual ser\u00e1 nulo. Esta acci\u00f3n quedar\u00e1 registrada. Considere proporcionar una raz\u00f3n para esta operaci\u00f3n", + "Order Options": "Opciones de pedido", + "Payments": "Pagos", + "Refund & Return": "Reembolso y devoluci\u00f3n", + "Installments": "Cuotas", + "The form is not valid.": "El formulario no es v\u00e1lido.", + "Balance": "Equilibrio", + "Input": "Aporte", + "Register History": "Historial de registro", + "Close Register": "Cerrar Registro", + "Cash In": "Dinero en efectivo en", + "Cash Out": "Retiro de efectivo", + "Register Options": "Opciones de registro", + "History": "Historia", + "Unable to open this register. Only closed register can be opened.": "No se puede abrir este registro. Solo se puede abrir el registro cerrado.", + "Open The Register": "Abrir el registro", + "Exit To Orders": "Salir a pedidos", + "Looks like there is no registers. At least one register is required to proceed.": "Parece que no hay registros. Se requiere al menos un registro para continuar.", + "Create Cash Register": "Crear caja registradora", + "Yes": "s\u00ed", + "No": "No", + "Load Coupon": "Cargar cup\u00f3n", + "Apply A Coupon": "Aplicar un cup\u00f3n", + "Load": "Carga", + "Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.": "Ingrese el c\u00f3digo de cup\u00f3n que debe aplicarse al POS. Si se emite un cup\u00f3n para un cliente, ese cliente debe seleccionarse previamente.", + "Click here to choose a customer.": "Haga clic aqu\u00ed para elegir un cliente.", + "Coupon Name": "Nombre del cup\u00f3n", + "Usage": "Uso", + "Unlimited": "Ilimitado", + "Valid From": "V\u00e1lida desde", + "Valid Till": "V\u00e1lida hasta", + "Categories": "Categorias", + "Active Coupons": "Cupones activos", + "Apply": "Solicitar", + "Cancel": "Cancelar", + "Coupon Code": "C\u00f3digo promocional", + "The coupon is out from validity date range.": "El cup\u00f3n est\u00e1 fuera del rango de fechas de validez.", + "The coupon has applied to the cart.": "El cup\u00f3n se ha aplicado al carrito.", + "Percentage": "Porcentaje", + "The coupon has been loaded.": "Se carg\u00f3 el cup\u00f3n.", + "Use": "Usar", + "No coupon available for this customer": "No hay cup\u00f3n disponible para este cliente", + "Select Customer": "Seleccionar cliente", + "No customer match your query...": "Ning\u00fan cliente coincide con su consulta ...", + "Customer Name": "Nombre del cliente", + "Save Customer": "Salvar al cliente", + "No Customer Selected": "Ning\u00fan cliente seleccionado", + "In order to see a customer account, you need to select one customer.": "Para ver una cuenta de cliente, debe seleccionar un cliente.", + "Summary For": "Resumen para", + "Total Purchases": "Compras totales", + "Last Purchases": "\u00daltimas compras", + "Status": "Estado", + "No orders...": "Sin pedidos ...", + "Account Transaction": "Transacci\u00f3n de cuenta", + "Product Discount": "Descuento de producto", + "Cart Discount": "Descuento del carrito", + "Hold Order": "Mantener orden", + "The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.": "El pedido actual se pondr\u00e1 en espera. Puede recuperar este pedido desde el bot\u00f3n de pedido pendiente. Proporcionar una referencia podr\u00eda ayudarlo a identificar el pedido m\u00e1s r\u00e1pidamente.", + "Confirm": "Confirmar", + "Layaway Parameters": "Par\u00e1metros de layaway", + "Minimum Payment": "Pago m\u00ednimo", + "Instalments & Payments": "Cuotas y pagos", + "The final payment date must be the last within the instalments.": "La fecha de pago final debe ser la \u00faltima dentro de las cuotas.", + "Amount": "Monto", + "You must define layaway settings before proceeding.": "Debe definir la configuraci\u00f3n de layaway antes de continuar.", + "Please provide instalments before proceeding.": "Proporcione cuotas antes de continuar.", + "Unable to process, the form is not valid": "No se puede continuar, el formulario no es v\u00e1lido", + "One or more instalments has an invalid date.": "Una o m\u00e1s cuotas tienen una fecha no v\u00e1lida.", + "One or more instalments has an invalid amount.": "Una o m\u00e1s cuotas tienen un monto no v\u00e1lido.", + "One or more instalments has a date prior to the current date.": "Una o m\u00e1s cuotas tienen una fecha anterior a la fecha actual.", + "Total instalments must be equal to the order total.": "Las cuotas totales deben ser iguales al total del pedido.", + "Order Note": "Nota de pedido", + "Note": "Nota", + "More details about this order": "M\u00e1s detalles sobre este pedido", + "Display On Receipt": "Mostrar al recibir", + "Will display the note on the receipt": "Mostrar\u00e1 la nota en el recibo", + "Open": "Abierto", + "Define The Order Type": "Definir el tipo de orden", + "Payment List": "Lista de pagos", + "List Of Payments": "Lista de pagos", + "No Payment added.": "Sin pago agregado.", + "Select Payment": "Seleccione Pago", + "Submit Payment": "Enviar pago", + "Layaway": "Apartado", + "On Hold": "En espera", + "Tendered": "Licitado", + "Nothing to display...": "Nada que mostrar...", + "Define Quantity": "Definir cantidad", + "Please provide a quantity": "Por favor proporcione una cantidad", + "Search Product": "Buscar producto", + "There is nothing to display. Have you started the search ?": "No hay nada que mostrar. \u00bfHas comenzado la b\u00fasqueda?", + "Shipping & Billing": "Envio de factura", + "Tax & Summary": "Impuestos y resumen", + "Settings": "Ajustes", + "Select Tax": "Seleccionar impuesto", + "Define the tax that apply to the sale.": "Defina el impuesto que se aplica a la venta.", + "Define how the tax is computed": "Definir c\u00f3mo se calcula el impuesto", + "Exclusive": "Exclusivo", + "Inclusive": "Inclusivo", + "Define when that specific product should expire.": "Defina cu\u00e1ndo debe caducar ese producto espec\u00edfico.", + "Renders the automatically generated barcode.": "Muestra el c\u00f3digo de barras generado autom\u00e1ticamente.", + "Tax Type": "Tipo de impuesto", + "Adjust how tax is calculated on the item.": "Ajusta c\u00f3mo se calcula el impuesto sobre el art\u00edculo.", + "Unable to proceed. The form is not valid.": "Incapaces de proceder. El formulario no es v\u00e1lido.", + "Units & Quantities": "Unidades y Cantidades", + "Sale Price": "Precio de venta", + "Wholesale Price": "Precio al por mayor", + "Select": "Seleccione", + "The customer has been loaded": "El cliente ha sido cargado", + "This coupon is already added to the cart": "Este cup\u00f3n ya est\u00e1 agregado al carrito", + "No tax group assigned to the order": "Ning\u00fan grupo de impuestos asignado al pedido", + "Layaway defined": "Apartado definido", + "Okay": "Okey", + "An unexpected error has occurred while fecthing taxes.": "Ha ocurrido un error inesperado al cobrar impuestos.", + "OKAY": "OKEY", + "Loading...": "Cargando...", + "Profile": "Perfil", + "Logout": "Cerrar sesi\u00f3n", + "Unnamed Page": "P\u00e1gina sin nombre", + "No description": "Sin descripci\u00f3n", + "Name": "Nombre", + "Provide a name to the resource.": "Proporcione un nombre al recurso.", + "Edit": "Editar", + "Would you like to delete this ?": "\u00bfLe gustar\u00eda borrar esto?", + "Delete Selected Groups": "Eliminar grupos seleccionados", + "Activate Your Account": "Activa tu cuenta", + "The account you have created for __%s__, require an activation. In order to proceed, please click on the following link": "La cuenta que ha creado para __%s__ requiere una activaci\u00f3n. Para continuar, haga clic en el siguiente enlace", + "Password Recovered": "Contrase\u00f1a recuperada", + "Your password has been successfully updated on __%s__. You can now login with your new password.": "Su contrase\u00f1a se ha actualizado correctamente el __%s__. Ahora puede iniciar sesi\u00f3n con su nueva contrase\u00f1a.", + "Password Recovery": "Recuperaci\u00f3n de contrase\u00f1a", + "Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ": "Alguien ha solicitado restablecer su contrase\u00f1a en __ \"%s\" __. Si recuerda haber realizado esa solicitud, contin\u00fae haciendo clic en el bot\u00f3n a continuaci\u00f3n.", + "Reset Password": "Restablecer la contrase\u00f1a", + "New User Registration": "Registro de nuevo usuario", + "Your Account Has Been Created": "Tu cuenta ha sido creada", + "Login": "Acceso", + "Save Coupon": "Guardar cup\u00f3n", + "This field is required": "Este campo es obligatorio", + "The form is not valid. Please check it and try again": "El formulario no es v\u00e1lido. por favor revisalo e int\u00e9ntalo de nuevo", + "mainFieldLabel not defined": "mainFieldLabel no definido", + "Create Customer Group": "Crear grupo de clientes", + "Save a new customer group": "Guardar un nuevo grupo de clientes", + "Update Group": "Grupo de actualizaci\u00f3n", + "Modify an existing customer group": "Modificar un grupo de clientes existente", + "Managing Customers Groups": "Gesti\u00f3n de grupos de clientes", + "Create groups to assign customers": "Crea grupos para asignar clientes", + "Create Customer": "Crear cliente", + "Managing Customers": "Gesti\u00f3n de clientes", + "List of registered customers": "Lista de clientes registrados", + "Your Module": "Tu m\u00f3dulo", + "Choose the zip file you would like to upload": "Elija el archivo zip que le gustar\u00eda cargar", + "Managing Orders": "Gesti\u00f3n de pedidos", + "Manage all registered orders.": "Gestione todos los pedidos registrados.", + "Failed": "Ha fallado", + "Order receipt": "Recibo de pedido", + "Hide Dashboard": "Ocultar panel", + "Unknown Payment": "Pago desconocido", + "Procurement Name": "Nombre de la adquisici\u00f3n", + "Unable to proceed no products has been provided.": "No se puede continuar, no se ha proporcionado ning\u00fan producto.", + "Unable to proceed, one or more products is not valid.": "No se puede continuar, uno o m\u00e1s productos no son v\u00e1lidos.", + "Unable to proceed the procurement form is not valid.": "No se puede continuar, el formulario de adquisici\u00f3n no es v\u00e1lido.", + "Unable to proceed, no submit url has been provided.": "No se puede continuar, no se ha proporcionado ninguna URL de env\u00edo.", + "SKU, Barcode, Product name.": "SKU, c\u00f3digo de barras, nombre del producto.", + "Email": "Correo electr\u00f3nico", + "Phone": "Tel\u00e9fono", + "First Address": "Primera direccion", + "Second Address": "Segunda direcci\u00f3n", + "Address": "Habla a", + "City": "Ciudad", + "PO.Box": "PO.Box", + "Description": "Descripci\u00f3n", + "Included Products": "Productos incluidos", + "Apply Settings": "Aplicar configuraciones", + "Basic Settings": "Ajustes b\u00e1sicos", + "Visibility Settings": "Configuraci\u00f3n de visibilidad", + "Year": "A\u00f1o", + "Sales": "Ventas", + "Income": "Ingreso", + "January": "enero", + "March": "marcha", + "April": "abril", + "May": "Mayo", + "June": "junio", + "July": "mes de julio", + "August": "agosto", + "September": "septiembre", + "October": "octubre", + "November": "noviembre", + "December": "diciembre", + "Purchase Price": "Precio de compra", + "Profit": "Lucro", + "Tax Value": "Valor fiscal", + "Reward System Name": "Nombre del sistema de recompensas", + "Missing Dependency": "Dependencia faltante", + "Go Back": "Regresa", + "Continue": "Continuar", + "Home": "Casa", + "Not Allowed Action": "Acci\u00f3n no permitida", + "Try Again": "Intentar otra vez", + "Access Denied": "Acceso denegado", + "Sign Up": "Inscribirse", + "Unable to find a module having the identifier\/namespace \"%s\"": "No se pudo encontrar un m\u00f3dulo con el identificador\/espacio de nombres \"%s\"", + "What is the CRUD single resource name ? [Q] to quit.": "\u00bfCu\u00e1l es el nombre de recurso \u00fanico de CRUD? [Q] para salir.", + "Which table name should be used ? [Q] to quit.": "\u00bfQu\u00e9 nombre de tabla deber\u00eda usarse? [Q] para salir.", + "If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "Si su recurso CRUD tiene una relaci\u00f3n, menci\u00f3nelo como sigue \"foreign_table, foreign_key, local_key \"? [S] para omitir, [Q] para salir.", + "Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "\u00bfAgregar una nueva relaci\u00f3n? Mencionarlo como sigue \"foreign_table, foreign_key, local_key\"? [S] para omitir, [Q] para salir.", + "Not enough parameters provided for the relation.": "No se proporcionaron suficientes par\u00e1metros para la relaci\u00f3n.", + "The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"": "El recurso CRUD \"%s\" para el m\u00f3dulo \"%s\" se ha generado en \"%s\"", + "The CRUD resource \"%s\" has been generated at %s": "El recurso CRUD \"%s\" se ha generado en%s", + "An unexpected error has occurred.": "Un error inesperado ha ocurrido.", + "Unable to find the requested module.": "No se pudo encontrar el m\u00f3dulo solicitado.", + "Version": "Versi\u00f3n", + "Path": "Camino", + "Index": "\u00cdndice", + "Entry Class": "Clase de entrada", + "Routes": "Rutas", + "Api": "API", + "Controllers": "Controladores", + "Views": "Puntos de vista", + "Attribute": "Atributo", + "Namespace": "Espacio de nombres", + "Author": "Autor", + "The product barcodes has been refreshed successfully.": "Los c\u00f3digos de barras del producto se han actualizado correctamente.", + "What is the store name ? [Q] to quit.": "Cual es el nombre de la tienda? [Q] para salir.", + "Please provide at least 6 characters for store name.": "Proporcione al menos 6 caracteres para el nombre de la tienda.", + "What is the administrator password ? [Q] to quit.": "\u00bfCu\u00e1l es la contrase\u00f1a de administrador? [Q] para salir.", + "Please provide at least 6 characters for the administrator password.": "Proporcione al menos 6 caracteres para la contrase\u00f1a de administrador.", + "What is the administrator email ? [Q] to quit.": "\u00bfQu\u00e9 es el correo electr\u00f3nico del administrador? [Q] para salir.", + "Please provide a valid email for the administrator.": "Proporcione un correo electr\u00f3nico v\u00e1lido para el administrador.", + "What is the administrator username ? [Q] to quit.": "\u00bfCu\u00e1l es el nombre de usuario del administrador? [Q] para salir.", + "Please provide at least 5 characters for the administrator username.": "Proporcione al menos 5 caracteres para el nombre de usuario del administrador.", + "Coupons List": "Lista de cupones", + "Display all coupons.": "Muestre todos los cupones.", + "No coupons has been registered": "No se han registrado cupones", + "Add a new coupon": "Agregar un nuevo cup\u00f3n", + "Create a new coupon": "Crea un nuevo cup\u00f3n", + "Register a new coupon and save it.": "Registre un nuevo cup\u00f3n y gu\u00e1rdelo.", + "Edit coupon": "Editar cup\u00f3n", + "Modify Coupon.": "Modificar cup\u00f3n.", + "Return to Coupons": "Volver a Cupones", + "Might be used while printing the coupon.": "Puede usarse al imprimir el cup\u00f3n.", + "Percentage Discount": "Descuento porcentual", + "Flat Discount": "Descuento plano", + "Define which type of discount apply to the current coupon.": "Defina qu\u00e9 tipo de descuento se aplica al cup\u00f3n actual.", + "Discount Value": "Valor de descuento", + "Define the percentage or flat value.": "Defina el porcentaje o valor fijo.", + "Valid Until": "V\u00e1lido hasta", + "Minimum Cart Value": "Valor m\u00ednimo del carrito", + "What is the minimum value of the cart to make this coupon eligible.": "\u00bfCu\u00e1l es el valor m\u00ednimo del carrito para que este cup\u00f3n sea elegible?", + "Maximum Cart Value": "Valor m\u00e1ximo del carrito", + "Valid Hours Start": "Inicio de horas v\u00e1lidas", + "Define form which hour during the day the coupons is valid.": "Defina de qu\u00e9 hora del d\u00eda son v\u00e1lidos los cupones.", + "Valid Hours End": "Fin de las horas v\u00e1lidas", + "Define to which hour during the day the coupons end stop valid.": "Defina a qu\u00e9 hora del d\u00eda dejar\u00e1n de ser v\u00e1lidos los cupones.", + "Limit Usage": "Limitar el uso", + "Define how many time a coupons can be redeemed.": "Defina cu\u00e1ntas veces se pueden canjear los cupones.", + "Select Products": "Seleccionar productos", + "The following products will be required to be present on the cart, in order for this coupon to be valid.": "Los siguientes productos deber\u00e1n estar presentes en el carrito para que este cup\u00f3n sea v\u00e1lido.", + "Select Categories": "Seleccionar categor\u00edas", + "The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.": "Los productos asignados a una de estas categor\u00edas deben estar en el carrito para que este cup\u00f3n sea v\u00e1lido.", + "Created At": "Creado en", + "Undefined": "Indefinido", + "Delete a licence": "Eliminar una licencia", + "Customer Coupons List": "Lista de cupones para clientes", + "Display all customer coupons.": "Muestre todos los cupones de clientes.", + "No customer coupons has been registered": "No se han registrado cupones de clientes.", + "Add a new customer coupon": "Agregar un cup\u00f3n de cliente nuevo", + "Create a new customer coupon": "Crea un nuevo cup\u00f3n de cliente", + "Register a new customer coupon and save it.": "Registre un cup\u00f3n de cliente nuevo y gu\u00e1rdelo.", + "Edit customer coupon": "Editar cup\u00f3n de cliente", + "Modify Customer Coupon.": "Modificar cup\u00f3n de cliente.", + "Return to Customer Coupons": "Volver a Cupones para clientes", + "Id": "Identificaci\u00f3n", + "Limit": "L\u00edmite", + "Created_at": "Creado en", + "Updated_at": "Actualizado_en", + "Code": "C\u00f3digo", + "Customers List": "Lista de clientes", + "Display all customers.": "Mostrar todos los clientes.", + "No customers has been registered": "No se ha registrado ning\u00fan cliente", + "Add a new customer": "Agregar un nuevo cliente", + "Create a new customer": "Crea un nuevo cliente", + "Register a new customer and save it.": "Registre un nuevo cliente y gu\u00e1rdelo.", + "Edit customer": "Editar cliente", + "Modify Customer.": "Modificar cliente.", + "Return to Customers": "Regreso a Clientes", + "Provide a unique name for the customer.": "Proporcione un nombre \u00fanico para el cliente.", + "Group": "Grupo", + "Assign the customer to a group": "Asignar al cliente a un grupo", + "Phone Number": "N\u00famero de tel\u00e9fono", + "Provide the customer phone number": "Proporcione el n\u00famero de tel\u00e9fono del cliente.", + "PO Box": "Apartado de correos", + "Provide the customer PO.Box": "Proporcionar al cliente PO.Box", + "Not Defined": "No definida", + "Male": "Masculino", + "Female": "Mujer", + "Gender": "G\u00e9nero", + "Billing Address": "Direcci\u00f3n de Envio", + "Billing phone number.": "N\u00famero de tel\u00e9fono de facturaci\u00f3n.", + "Address 1": "Direcci\u00f3n 1", + "Billing First Address.": "Primera direcci\u00f3n de facturaci\u00f3n.", + "Address 2": "Direcci\u00f3n 2", + "Billing Second Address.": "Segunda direcci\u00f3n de facturaci\u00f3n.", + "Country": "Pa\u00eds", + "Billing Country.": "Pa\u00eds de facturaci\u00f3n.", + "Postal Address": "Direccion postal", + "Company": "Empresa", + "Shipping Address": "Direcci\u00f3n de Env\u00edo", + "Shipping phone number.": "N\u00famero de tel\u00e9fono de env\u00edo.", + "Shipping First Address.": "Primera direcci\u00f3n de env\u00edo.", + "Shipping Second Address.": "Segunda direcci\u00f3n de env\u00edo.", + "Shipping Country.": "Pa\u00eds de env\u00edo.", + "Account Credit": "Cr\u00e9dito de cuenta", + "Owed Amount": "Monto adeudado", + "Purchase Amount": "Monto de la compra", + "Rewards": "Recompensas", + "Delete a customers": "Eliminar un cliente", + "Delete Selected Customers": "Eliminar clientes seleccionados", + "Customer Groups List": "Lista de grupos de clientes", + "Display all Customers Groups.": "Mostrar todos los grupos de clientes.", + "No Customers Groups has been registered": "No se ha registrado ning\u00fan grupo de clientes", + "Add a new Customers Group": "Agregar un nuevo grupo de clientes", + "Create a new Customers Group": "Crear un nuevo grupo de clientes", + "Register a new Customers Group and save it.": "Registre un nuevo grupo de clientes y gu\u00e1rdelo.", + "Edit Customers Group": "Editar grupo de clientes", + "Modify Customers group.": "Modificar grupo Clientes.", + "Return to Customers Groups": "Regresar a Grupos de Clientes", + "Reward System": "Sistema de recompensas", + "Select which Reward system applies to the group": "Seleccione qu\u00e9 sistema de recompensas se aplica al grupo", + "Minimum Credit Amount": "Monto m\u00ednimo de cr\u00e9dito", + "A brief description about what this group is about": "Una breve descripci\u00f3n sobre de qu\u00e9 se trata este grupo.", + "Created On": "Creado en", + "Customer Orders List": "Lista de pedidos de clientes", + "Display all customer orders.": "Muestra todos los pedidos de los clientes.", + "No customer orders has been registered": "No se han registrado pedidos de clientes", + "Add a new customer order": "Agregar un nuevo pedido de cliente", + "Create a new customer order": "Crear un nuevo pedido de cliente", + "Register a new customer order and save it.": "Registre un nuevo pedido de cliente y gu\u00e1rdelo.", + "Edit customer order": "Editar pedido de cliente", + "Modify Customer Order.": "Modificar pedido de cliente.", + "Return to Customer Orders": "Volver a pedidos de clientes", + "Created at": "Creado en", + "Customer Id": "Identificaci\u00f3n del cliente", + "Discount Percentage": "Porcentaje de descuento", + "Discount Type": "Tipo de descuento", + "Final Payment Date": "Fecha de pago final", + "Process Status": "Estado del proceso", + "Shipping Rate": "Tarifa de envio", + "Shipping Type": "Tipo de env\u00edo", + "Title": "T\u00edtulo", + "Total installments": "Cuotas totales", + "Updated at": "Actualizado en", + "Uuid": "Uuid", + "Voidance Reason": "Raz\u00f3n de anulaci\u00f3n", + "Customer Rewards List": "Lista de recompensas para clientes", + "Display all customer rewards.": "Muestre todas las recompensas de los clientes.", + "No customer rewards has been registered": "No se han registrado recompensas para clientes", + "Add a new customer reward": "Agregar una nueva recompensa para clientes", + "Create a new customer reward": "Crear una nueva recompensa para el cliente", + "Register a new customer reward and save it.": "Registre una recompensa de nuevo cliente y gu\u00e1rdela.", + "Edit customer reward": "Editar la recompensa del cliente", + "Modify Customer Reward.": "Modificar la recompensa del cliente.", + "Return to Customer Rewards": "Volver a Recompensas para clientes", + "Points": "Puntos", + "Target": "Objetivo", + "Reward Name": "Nombre de la recompensa", + "Last Update": "\u00daltima actualizaci\u00f3n", + "Active": "Activo", + "Users Group": "Grupo de usuarios", + "None": "Ninguno", + "Recurring": "Peri\u00f3dico", + "Start of Month": "Inicio de mes", + "Mid of Month": "Mediados de mes", + "End of Month": "Fin de mes", + "X days Before Month Ends": "X d\u00edas antes de que finalice el mes", + "X days After Month Starts": "X d\u00edas despu\u00e9s del comienzo del mes", + "Occurrence": "Ocurrencia", + "Occurrence Value": "Valor de ocurrencia", + "Must be used in case of X days after month starts and X days before month ends.": "Debe usarse en el caso de X d\u00edas despu\u00e9s del comienzo del mes y X d\u00edas antes de que finalice el mes.", + "Category": "Categor\u00eda", + "Month Starts": "Comienza el mes", + "Month Middle": "Mes medio", + "Month Ends": "Fin de mes", + "X Days Before Month Ends": "X d\u00edas antes de que termine el mes", + "Updated At": "Actualizado en", + "Hold Orders List": "Lista de pedidos en espera", + "Display all hold orders.": "Muestra todas las \u00f3rdenes de retenci\u00f3n.", + "No hold orders has been registered": "No se ha registrado ninguna orden de retenci\u00f3n", + "Add a new hold order": "Agregar una nueva orden de retenci\u00f3n", + "Create a new hold order": "Crear una nueva orden de retenci\u00f3n", + "Register a new hold order and save it.": "Registre una nueva orden de retenci\u00f3n y gu\u00e1rdela.", + "Edit hold order": "Editar orden de retenci\u00f3n", + "Modify Hold Order.": "Modificar orden de retenci\u00f3n.", + "Return to Hold Orders": "Volver a \u00f3rdenes de espera", + "Orders List": "Lista de pedidos", + "Display all orders.": "Muestra todos los pedidos.", + "No orders has been registered": "No se han registrado pedidos", + "Add a new order": "Agregar un nuevo pedido", + "Create a new order": "Crea un nuevo pedido", + "Register a new order and save it.": "Registre un nuevo pedido y gu\u00e1rdelo.", + "Edit order": "Editar orden", + "Modify Order.": "Modificar orden.", + "Return to Orders": "Volver a pedidos", + "Discount Rate": "Tasa de descuento", + "The order and the attached products has been deleted.": "Se ha eliminado el pedido y los productos adjuntos.", + "Invoice": "Factura", + "Receipt": "Recibo", + "Order Instalments List": "Lista de pagos a plazos", + "Display all Order Instalments.": "Mostrar todas las cuotas de pedidos.", + "No Order Instalment has been registered": "No se ha registrado ning\u00fan pago a plazos", + "Add a new Order Instalment": "Agregar un nuevo pago a plazos", + "Create a new Order Instalment": "Crear un nuevo pago a plazos", + "Register a new Order Instalment and save it.": "Registre un nuevo pago a plazos y gu\u00e1rdelo.", + "Edit Order Instalment": "Editar pago a plazos", + "Modify Order Instalment.": "Modificar el plazo de la orden.", + "Return to Order Instalment": "Volver a la orden de pago a plazos", + "Order Id": "Solicitar ID", + "Procurements List": "Lista de adquisiciones", + "Display all procurements.": "Visualice todas las adquisiciones.", + "No procurements has been registered": "No se han registrado adquisiciones", + "Add a new procurement": "Agregar una nueva adquisici\u00f3n", + "Create a new procurement": "Crear una nueva adquisici\u00f3n", + "Register a new procurement and save it.": "Registre una nueva adquisici\u00f3n y gu\u00e1rdela.", + "Edit procurement": "Editar adquisiciones", + "Modify Procurement.": "Modificar adquisiciones.", + "Return to Procurements": "Volver a Adquisiciones", + "Provider Id": "ID de proveedor", + "Total Items": "Articulos totales", + "Provider": "Proveedor", + "Stocked": "En stock", + "Procurement Products List": "Lista de productos de adquisiciones", + "Display all procurement products.": "Muestre todos los productos de aprovisionamiento.", + "No procurement products has been registered": "No se ha registrado ning\u00fan producto de adquisici\u00f3n", + "Add a new procurement product": "Agregar un nuevo producto de adquisici\u00f3n", + "Create a new procurement product": "Crear un nuevo producto de compras", + "Register a new procurement product and save it.": "Registre un nuevo producto de adquisici\u00f3n y gu\u00e1rdelo.", + "Edit procurement product": "Editar producto de adquisici\u00f3n", + "Modify Procurement Product.": "Modificar el producto de adquisici\u00f3n.", + "Return to Procurement Products": "Regresar a Productos de Adquisici\u00f3n", + "Define what is the expiration date of the product.": "Defina cu\u00e1l es la fecha de vencimiento del producto.", + "On": "En", + "Category Products List": "Lista de productos de categor\u00eda", + "Display all category products.": "Mostrar todos los productos de la categor\u00eda.", + "No category products has been registered": "No se ha registrado ninguna categor\u00eda de productos", + "Add a new category product": "Agregar un producto de nueva categor\u00eda", + "Create a new category product": "Crear un producto de nueva categor\u00eda", + "Register a new category product and save it.": "Registre un producto de nueva categor\u00eda y gu\u00e1rdelo.", + "Edit category product": "Editar producto de categor\u00eda", + "Modify Category Product.": "Modificar producto de categor\u00eda.", + "Return to Category Products": "Volver a la categor\u00eda Productos", + "No Parent": "Sin padre", + "Preview": "Avance", + "Provide a preview url to the category.": "Proporcione una URL de vista previa de la categor\u00eda.", + "Displays On POS": "Muestra en POS", + "Parent": "Padre", + "If this category should be a child category of an existing category": "Si esta categor\u00eda debe ser una categor\u00eda secundaria de una categor\u00eda existente", + "Total Products": "Productos totales", + "Products List": "Lista de productos", + "Display all products.": "Mostrar todos los productos.", + "No products has been registered": "No se ha registrado ning\u00fan producto", + "Add a new product": "Agregar un nuevo producto", + "Create a new product": "Crea un nuevo producto", + "Register a new product and save it.": "Registre un nuevo producto y gu\u00e1rdelo.", + "Edit product": "Editar producto", + "Modify Product.": "Modificar producto.", + "Return to Products": "Volver a Productos", + "Assigned Unit": "Unidad asignada", + "The assigned unit for sale": "La unidad asignada a la venta", + "Define the regular selling price.": "Defina el precio de venta regular.", + "Define the wholesale price.": "Defina el precio al por mayor.", + "Preview Url": "URL de vista previa", + "Provide the preview of the current unit.": "Proporciona la vista previa de la unidad actual.", + "Identification": "Identificaci\u00f3n", + "Define the barcode value. Focus the cursor here before scanning the product.": "Defina el valor del c\u00f3digo de barras. Enfoque el cursor aqu\u00ed antes de escanear el producto.", + "Define the barcode type scanned.": "Defina el tipo de c\u00f3digo de barras escaneado.", + "EAN 8": "EAN 8", + "EAN 13": "EAN 13", + "Barcode Type": "Tipo de c\u00f3digo de barras", + "Select to which category the item is assigned.": "Seleccione a qu\u00e9 categor\u00eda est\u00e1 asignado el art\u00edculo.", + "Materialized Product": "Producto materializado", + "Dematerialized Product": "Producto desmaterializado", + "Define the product type. Applies to all variations.": "Defina el tipo de producto. Se aplica a todas las variaciones.", + "Product Type": "tipo de producto", + "Define a unique SKU value for the product.": "Defina un valor de SKU \u00fanico para el producto.", + "On Sale": "En venta", + "Hidden": "Oculto", + "Define whether the product is available for sale.": "Defina si el producto est\u00e1 disponible para la venta.", + "Enable the stock management on the product. Will not work for service or uncountable products.": "Habilite la gesti\u00f3n de stock del producto. No funcionar\u00e1 para servicios o productos incontables.", + "Stock Management Enabled": "Gesti\u00f3n de stock habilitada", + "Units": "Unidades", + "Accurate Tracking": "Seguimiento preciso", + "What unit group applies to the actual item. This group will apply during the procurement.": "Qu\u00e9 grupo de unidades se aplica al art\u00edculo real. Este grupo se aplicar\u00e1 durante la contrataci\u00f3n.", + "Unit Group": "Grupo de unidad", + "Determine the unit for sale.": "Determine la unidad a la venta.", + "Selling Unit": "Unidad de venta", + "Expiry": "Expiraci\u00f3n", + "Product Expires": "El producto caduca", + "Set to \"No\" expiration time will be ignored.": "Se ignorar\u00e1 el tiempo de caducidad establecido en \"No\".", + "Prevent Sales": "Prevenir ventas", + "Allow Sales": "Permitir ventas", + "Determine the action taken while a product has expired.": "Determine la acci\u00f3n tomada mientras un producto ha caducado.", + "On Expiration": "Al vencimiento", + "Select the tax group that applies to the product\/variation.": "Seleccione el grupo de impuestos que se aplica al producto\/variaci\u00f3n.", + "Tax Group": "Grupo fiscal", + "Define what is the type of the tax.": "Defina cu\u00e1l es el tipo de impuesto.", + "Images": "Imagenes", + "Image": "Imagen", + "Choose an image to add on the product gallery": "Elija una imagen para agregar en la galer\u00eda de productos", + "Is Primary": "Es primaria", + "Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.": "Defina si la imagen debe ser primaria. Si hay m\u00e1s de una imagen principal, se elegir\u00e1 una para usted.", + "Sku": "Sku", + "Materialized": "Materializado", + "Dematerialized": "Desmaterializado", + "Available": "Disponible", + "See Quantities": "Ver Cantidades", + "See History": "Ver Historia", + "Would you like to delete selected entries ?": "\u00bfLe gustar\u00eda eliminar las entradas seleccionadas?", + "Product Histories": "Historias de productos", + "Display all product histories.": "Muestra todos los historiales de productos.", + "No product histories has been registered": "No se ha registrado ning\u00fan historial de productos", + "Add a new product history": "Agregar un nuevo historial de productos", + "Create a new product history": "Crear un nuevo historial de productos", + "Register a new product history and save it.": "Registre un nuevo historial de producto y gu\u00e1rdelo.", + "Edit product history": "Editar el historial de productos", + "Modify Product History.": "Modificar el historial del producto.", + "Return to Product Histories": "Volver a Historias de productos", + "After Quantity": "Despu\u00e9s de la cantidad", + "Before Quantity": "Antes de la cantidad", + "Operation Type": "Tipo de operaci\u00f3n", + "Order id": "Solicitar ID", + "Procurement Id": "ID de adquisici\u00f3n", + "Procurement Product Id": "ID de producto de adquisici\u00f3n", + "Product Id": "ID del Producto", + "Unit Id": "ID de unidad", + "P. Quantity": "P. Cantidad", + "N. Quantity": "N. Cantidad", + "Defective": "Defectuoso", + "Deleted": "Eliminado", + "Removed": "Remoto", + "Returned": "Devuelto", + "Sold": "Vendido", + "Added": "Adicional", + "Incoming Transfer": "Transferencia entrante", + "Outgoing Transfer": "Transferencia saliente", + "Transfer Rejected": "Transferencia rechazada", + "Transfer Canceled": "Transferencia cancelada", + "Void Return": "Retorno vac\u00edo", + "Adjustment Return": "Retorno de ajuste", + "Adjustment Sale": "Venta de ajuste", + "Product Unit Quantities List": "Lista de cantidades de unidades de producto", + "Display all product unit quantities.": "Muestra todas las cantidades de unidades de producto.", + "No product unit quantities has been registered": "No se han registrado cantidades unitarias de producto", + "Add a new product unit quantity": "Agregar una nueva cantidad de unidades de producto", + "Create a new product unit quantity": "Crear una nueva cantidad de unidades de producto", + "Register a new product unit quantity and save it.": "Registre una nueva cantidad de unidad de producto y gu\u00e1rdela.", + "Edit product unit quantity": "Editar la cantidad de unidades de producto", + "Modify Product Unit Quantity.": "Modificar la cantidad de unidades de producto.", + "Return to Product Unit Quantities": "Volver al producto Cantidades unitarias", + "Product id": "ID del Producto", + "Providers List": "Lista de proveedores", + "Display all providers.": "Mostrar todos los proveedores.", + "No providers has been registered": "No se ha registrado ning\u00fan proveedor", + "Add a new provider": "Agregar un nuevo proveedor", + "Create a new provider": "Crea un nuevo proveedor", + "Register a new provider and save it.": "Registre un nuevo proveedor y gu\u00e1rdelo.", + "Edit provider": "Editar proveedor", + "Modify Provider.": "Modificar proveedor.", + "Return to Providers": "Volver a proveedores", + "Provide the provider email. Might be used to send automated email.": "Proporcione el correo electr\u00f3nico del proveedor. Podr\u00eda usarse para enviar correos electr\u00f3nicos automatizados.", + "Contact phone number for the provider. Might be used to send automated SMS notifications.": "N\u00famero de tel\u00e9fono de contacto del proveedor. Puede usarse para enviar notificaciones autom\u00e1ticas por SMS.", + "First address of the provider.": "Primera direcci\u00f3n del proveedor.", + "Second address of the provider.": "Segunda direcci\u00f3n del proveedor.", + "Further details about the provider": "M\u00e1s detalles sobre el proveedor", + "Amount Due": "Monto adeudado", + "Amount Paid": "Cantidad pagada", + "See Procurements": "Ver adquisiciones", + "Registers List": "Lista de registros", + "Display all registers.": "Muestra todos los registros.", + "No registers has been registered": "No se ha registrado ning\u00fan registro", + "Add a new register": "Agregar un nuevo registro", + "Create a new register": "Crea un nuevo registro", + "Register a new register and save it.": "Registre un nuevo registro y gu\u00e1rdelo.", + "Edit register": "Editar registro", + "Modify Register.": "Modificar registro.", + "Return to Registers": "Regresar a Registros", + "Closed": "Cerrado", + "Define what is the status of the register.": "Defina cu\u00e1l es el estado del registro.", + "Provide mode details about this cash register.": "Proporcione detalles sobre el modo de esta caja registradora.", + "Unable to delete a register that is currently in use": "No se puede eliminar un registro que est\u00e1 actualmente en uso", + "Used By": "Usado por", + "Register History List": "Registro de lista de historial", + "Display all register histories.": "Muestra todos los historiales de registros.", + "No register histories has been registered": "No se han registrado historiales de registro", + "Add a new register history": "Agregar un nuevo historial de registro", + "Create a new register history": "Crea un nuevo historial de registro", + "Register a new register history and save it.": "Registre un nuevo historial de registros y gu\u00e1rdelo.", + "Edit register history": "Editar historial de registro", + "Modify Registerhistory.": "Modificar Registerhistory.", + "Return to Register History": "Volver al historial de registros", + "Register Id": "ID de registro", + "Action": "Acci\u00f3n", + "Register Name": "Nombre de registro", + "Done At": "Hecho", + "Reward Systems List": "Lista de sistemas de recompensas", + "Display all reward systems.": "Muestre todos los sistemas de recompensa.", + "No reward systems has been registered": "No se ha registrado ning\u00fan sistema de recompensa", + "Add a new reward system": "Agregar un nuevo sistema de recompensas", + "Create a new reward system": "Crea un nuevo sistema de recompensas", + "Register a new reward system and save it.": "Registre un nuevo sistema de recompensas y gu\u00e1rdelo.", + "Edit reward system": "Editar sistema de recompensas", + "Modify Reward System.": "Modificar el sistema de recompensas.", + "Return to Reward Systems": "Regresar a los sistemas de recompensas", + "From": "De", + "The interval start here.": "El intervalo comienza aqu\u00ed.", + "To": "A", + "The interval ends here.": "El intervalo termina aqu\u00ed.", + "Points earned.": "Puntos ganados.", + "Coupon": "Cup\u00f3n", + "Decide which coupon you would apply to the system.": "Decida qu\u00e9 cup\u00f3n aplicar\u00e1 al sistema.", + "This is the objective that the user should reach to trigger the reward.": "Este es el objetivo que debe alcanzar el usuario para activar la recompensa.", + "A short description about this system": "Una breve descripci\u00f3n de este sistema", + "Would you like to delete this reward system ?": "\u00bfLe gustar\u00eda eliminar este sistema de recompensas?", + "Delete Selected Rewards": "Eliminar recompensas seleccionadas", + "Would you like to delete selected rewards?": "\u00bfLe gustar\u00eda eliminar las recompensas seleccionadas?", + "Roles List": "Lista de roles", + "Display all roles.": "Muestra todos los roles.", + "No role has been registered.": "No se ha registrado ning\u00fan rol.", + "Add a new role": "Agregar un rol nuevo", + "Create a new role": "Crea un nuevo rol", + "Create a new role and save it.": "Cree un nuevo rol y gu\u00e1rdelo.", + "Edit role": "Editar rol", + "Modify Role.": "Modificar rol.", + "Return to Roles": "Regresar a Roles", + "Provide a name to the role.": "Proporcione un nombre al rol.", + "Should be a unique value with no spaces or special character": "Debe ser un valor \u00fanico sin espacios ni caracteres especiales.", + "Provide more details about what this role is about.": "Proporcione m\u00e1s detalles sobre de qu\u00e9 se trata este rol.", + "Unable to delete a system role.": "No se puede eliminar una funci\u00f3n del sistema.", + "You do not have enough permissions to perform this action.": "No tienes suficientes permisos para realizar esta acci\u00f3n.", + "Taxes List": "Lista de impuestos", + "Display all taxes.": "Muestra todos los impuestos.", + "No taxes has been registered": "No se han registrado impuestos", + "Add a new tax": "Agregar un nuevo impuesto", + "Create a new tax": "Crear un impuesto nuevo", + "Register a new tax and save it.": "Registre un nuevo impuesto y gu\u00e1rdelo.", + "Edit tax": "Editar impuesto", + "Modify Tax.": "Modificar impuestos.", + "Return to Taxes": "Volver a impuestos", + "Provide a name to the tax.": "Proporcione un nombre para el impuesto.", + "Assign the tax to a tax group.": "Asigne el impuesto a un grupo de impuestos.", + "Rate": "Velocidad", + "Define the rate value for the tax.": "Defina el valor de la tasa del impuesto.", + "Provide a description to the tax.": "Proporcione una descripci\u00f3n del impuesto.", + "Taxes Groups List": "Lista de grupos de impuestos", + "Display all taxes groups.": "Muestra todos los grupos de impuestos.", + "No taxes groups has been registered": "No se ha registrado ning\u00fan grupo de impuestos", + "Add a new tax group": "Agregar un nuevo grupo de impuestos", + "Create a new tax group": "Crear un nuevo grupo de impuestos", + "Register a new tax group and save it.": "Registre un nuevo grupo de impuestos y gu\u00e1rdelo.", + "Edit tax group": "Editar grupo de impuestos", + "Modify Tax Group.": "Modificar grupo fiscal.", + "Return to Taxes Groups": "Volver a grupos de impuestos", + "Provide a short description to the tax group.": "Proporcione una breve descripci\u00f3n del grupo fiscal.", + "Units List": "Lista de unidades", + "Display all units.": "Mostrar todas las unidades.", + "No units has been registered": "No se ha registrado ninguna unidad", + "Add a new unit": "Agregar una nueva unidad", + "Create a new unit": "Crea una nueva unidad", + "Register a new unit and save it.": "Registre una nueva unidad y gu\u00e1rdela.", + "Edit unit": "Editar unidad", + "Modify Unit.": "Modificar unidad.", + "Return to Units": "Regresar a Unidades", + "Identifier": "Identificador", + "Preview URL": "URL de vista previa", + "Preview of the unit.": "Vista previa de la unidad.", + "Define the value of the unit.": "Defina el valor de la unidad.", + "Define to which group the unit should be assigned.": "Defina a qu\u00e9 grupo debe asignarse la unidad.", + "Base Unit": "Unidad base", + "Determine if the unit is the base unit from the group.": "Determine si la unidad es la unidad base del grupo.", + "Provide a short description about the unit.": "Proporcione una breve descripci\u00f3n sobre la unidad.", + "Unit Groups List": "Lista de grupos de unidades", + "Display all unit groups.": "Muestra todos los grupos de unidades.", + "No unit groups has been registered": "No se ha registrado ning\u00fan grupo de unidades", + "Add a new unit group": "Agregar un nuevo grupo de unidades", + "Create a new unit group": "Crear un nuevo grupo de unidades", + "Register a new unit group and save it.": "Registre un nuevo grupo de unidades y gu\u00e1rdelo.", + "Edit unit group": "Editar grupo de unidades", + "Modify Unit Group.": "Modificar grupo de unidades.", + "Return to Unit Groups": "Regresar a Grupos de Unidades", + "Users List": "Lista de usuarios", + "Display all users.": "Mostrar todos los usuarios.", + "No users has been registered": "No se ha registrado ning\u00fan usuario", + "Add a new user": "Agregar un nuevo usuario", + "Create a new user": "Crea un nuevo usuario", + "Register a new user and save it.": "Registre un nuevo usuario y gu\u00e1rdelo.", + "Edit user": "Editar usuario", + "Modify User.": "Modificar usuario.", + "Return to Users": "Volver a los usuarios", + "Username": "Nombre de usuario", + "Will be used for various purposes such as email recovery.": "Se utilizar\u00e1 para diversos fines, como la recuperaci\u00f3n de correo electr\u00f3nico.", + "Password": "Contrase\u00f1a", + "Make a unique and secure password.": "Crea una contrase\u00f1a \u00fanica y segura.", + "Confirm Password": "confirmar Contrase\u00f1a", + "Should be the same as the password.": "Debe ser la misma que la contrase\u00f1a.", + "Define whether the user can use the application.": "Defina si el usuario puede utilizar la aplicaci\u00f3n.", + "The action you tried to perform is not allowed.": "La acci\u00f3n que intent\u00f3 realizar no est\u00e1 permitida.", + "Not Enough Permissions": "No hay suficientes permisos", + "The resource of the page you tried to access is not available or might have been deleted.": "El recurso de la p\u00e1gina a la que intent\u00f3 acceder no est\u00e1 disponible o puede que se haya eliminado.", + "Not Found Exception": "Excepci\u00f3n no encontrada", + "Provide your username.": "Proporcione su nombre de usuario.", + "Provide your password.": "Proporcione su contrase\u00f1a.", + "Provide your email.": "Proporcione su correo electr\u00f3nico.", + "Password Confirm": "Contrase\u00f1a confirmada", + "define the amount of the transaction.": "definir el monto de la transacci\u00f3n.", + "Further observation while proceeding.": "Observaci\u00f3n adicional mientras se procede.", + "determine what is the transaction type.": "determinar cu\u00e1l es el tipo de transacci\u00f3n.", + "Add": "Agregar", + "Deduct": "Deducir", + "Determine the amount of the transaction.": "Determina el monto de la transacci\u00f3n.", + "Further details about the transaction.": "M\u00e1s detalles sobre la transacci\u00f3n.", + "Define the installments for the current order.": "Defina las cuotas del pedido actual.", + "New Password": "Nueva contrase\u00f1a", + "define your new password.": "defina su nueva contrase\u00f1a.", + "confirm your new password.": "Confirma tu nueva contrase\u00f1a.", + "choose the payment type.": "elija el tipo de pago.", + "Provide the procurement name.": "Proporcione el nombre de la adquisici\u00f3n.", + "Describe the procurement.": "Describa la adquisici\u00f3n.", + "Define the provider.": "Defina el proveedor.", + "Define what is the unit price of the product.": "Defina cu\u00e1l es el precio unitario del producto.", + "Condition": "Condici\u00f3n", + "Determine in which condition the product is returned.": "Determinar en qu\u00e9 estado se devuelve el producto.", + "Other Observations": "Otras Observaciones", + "Describe in details the condition of the returned product.": "Describa en detalle el estado del producto devuelto.", + "Unit Group Name": "Nombre del grupo de unidad", + "Provide a unit name to the unit.": "Proporcione un nombre de unidad a la unidad.", + "Describe the current unit.": "Describe la unidad actual.", + "assign the current unit to a group.": "asignar la unidad actual a un grupo.", + "define the unit value.": "definir el valor unitario.", + "Provide a unit name to the units group.": "Proporcione un nombre de unidad al grupo de unidades.", + "Describe the current unit group.": "Describe el grupo de unidades actual.", + "POS": "POS", + "Open POS": "POS abierto", + "Create Register": "Crear registro", + "Use Customer Billing": "Utilice la facturaci\u00f3n del cliente", + "Define whether the customer billing information should be used.": "Defina si se debe utilizar la informaci\u00f3n de facturaci\u00f3n del cliente.", + "General Shipping": "Env\u00edo general", + "Define how the shipping is calculated.": "Defina c\u00f3mo se calcula el env\u00edo.", + "Shipping Fees": "Gastos de env\u00edo", + "Define shipping fees.": "Defina las tarifas de env\u00edo.", + "Use Customer Shipping": "Usar env\u00edo del cliente", + "Define whether the customer shipping information should be used.": "Defina si se debe utilizar la informaci\u00f3n de env\u00edo del cliente.", + "Invoice Number": "N\u00famero de factura", + "If the procurement has been issued outside of NexoPOS, please provide a unique reference.": "Si la adquisici\u00f3n se ha emitido fuera de NexoPOS, proporcione una referencia \u00fanica.", + "Delivery Time": "El tiempo de entrega", + "If the procurement has to be delivered at a specific time, define the moment here.": "Si el aprovisionamiento debe entregarse en un momento espec\u00edfico, defina el momento aqu\u00ed.", + "Automatic Approval": "Aprobaci\u00f3n autom\u00e1tica", + "Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.": "Determine si la adquisici\u00f3n debe marcarse autom\u00e1ticamente como aprobada una vez que se cumpla el plazo de entrega.", + "Determine what is the actual payment status of the procurement.": "Determine cu\u00e1l es el estado de pago real de la adquisici\u00f3n.", + "Determine what is the actual provider of the current procurement.": "Determine cu\u00e1l es el proveedor real de la contrataci\u00f3n actual.", + "Provide a name that will help to identify the procurement.": "Proporcione un nombre que ayude a identificar la contrataci\u00f3n.", + "First Name": "Primer nombre", + "Avatar": "Avatar", + "Define the image that should be used as an avatar.": "Defina la imagen que debe usarse como avatar.", + "Language": "Idioma", + "Security": "Seguridad", + "Old Password": "Contrase\u00f1a anterior", + "Provide the old password.": "Proporcione la contrase\u00f1a anterior.", + "Change your password with a better stronger password.": "Cambie su contrase\u00f1a con una contrase\u00f1a mejor y m\u00e1s segura.", + "Password Confirmation": "Confirmaci\u00f3n de contrase\u00f1a", + "The profile has been successfully saved.": "El perfil se ha guardado correctamente.", + "The user attribute has been saved.": "Se ha guardado el atributo de usuario.", + "The options has been successfully updated.": "Las opciones se han actualizado correctamente.", + "Wrong password provided": "Se proporcion\u00f3 una contrase\u00f1a incorrecta", + "Wrong old password provided": "Se proporcion\u00f3 una contrase\u00f1a antigua incorrecta", + "Password Successfully updated.": "Contrase\u00f1a actualizada correctamente.", + "Password Lost": "Contrase\u00f1a perdida", + "Unable to proceed as the token provided is invalid.": "No se puede continuar porque el token proporcionado no es v\u00e1lido.", + "The token has expired. Please request a new activation token.": "El token ha caducado. Solicite un nuevo token de activaci\u00f3n.", + "Set New Password": "Establecer nueva contrase\u00f1a", + "Database Update": "Actualizaci\u00f3n de la base de datos", + "This account is disabled.": "Esta cuenta est\u00e1 inhabilitada.", + "Unable to find record having that username.": "No se pudo encontrar el registro con ese nombre de usuario.", + "Unable to find record having that password.": "No se pudo encontrar el registro con esa contrase\u00f1a.", + "Invalid username or password.": "Usuario o contrase\u00f1a invalido.", + "Unable to login, the provided account is not active.": "No se puede iniciar sesi\u00f3n, la cuenta proporcionada no est\u00e1 activa.", + "You have been successfully connected.": "Se ha conectado correctamente.", + "The recovery email has been send to your inbox.": "El correo de recuperaci\u00f3n se ha enviado a su bandeja de entrada.", + "Unable to find a record matching your entry.": "No se pudo encontrar un registro que coincida con su entrada.", + "Your Account has been created but requires email validation.": "Su cuenta ha sido creada pero requiere validaci\u00f3n por correo electr\u00f3nico.", + "Unable to find the requested user.": "No se pudo encontrar al usuario solicitado.", + "Unable to proceed, the provided token is not valid.": "No se puede continuar, el token proporcionado no es v\u00e1lido.", + "Unable to proceed, the token has expired.": "No se puede continuar, el token ha caducado.", + "Your password has been updated.": "Tu contrase\u00f1a ha sido actualizada.", + "Unable to edit a register that is currently in use": "No se puede editar un registro que est\u00e1 actualmente en uso", + "No register has been opened by the logged user.": "El usuario registrado no ha abierto ning\u00fan registro.", + "The register is opened.": "Se abre el registro.", + "Closing": "Clausura", + "Opening": "Apertura", + "Sale": "Venta", + "Refund": "Reembolso", + "Unable to find the category using the provided identifier": "No se puede encontrar la categor\u00eda con el identificador proporcionado.", + "The category has been deleted.": "La categor\u00eda ha sido eliminada.", + "Unable to find the category using the provided identifier.": "No se puede encontrar la categor\u00eda con el identificador proporcionado.", + "Unable to find the attached category parent": "No se puede encontrar el padre de la categor\u00eda adjunta", + "The category has been correctly saved": "La categor\u00eda se ha guardado correctamente", + "The category has been updated": "La categor\u00eda ha sido actualizada", + "The entry has been successfully deleted.": "La entrada se ha eliminado correctamente.", + "A new entry has been successfully created.": "Se ha creado una nueva entrada con \u00e9xito.", + "Unhandled crud resource": "Recurso de basura no manejada", + "You need to select at least one item to delete": "Debe seleccionar al menos un elemento para eliminar", + "You need to define which action to perform": "Necesitas definir qu\u00e9 acci\u00f3n realizar", + "Unable to proceed. No matching CRUD resource has been found.": "Incapaces de proceder. No se ha encontrado ning\u00fan recurso CRUD coincidente.", + "Create Coupon": "Crear cup\u00f3n", + "helps you creating a coupon.": "te ayuda a crear un cup\u00f3n.", + "Edit Coupon": "Editar cup\u00f3n", + "Editing an existing coupon.": "Editar un cup\u00f3n existente.", + "Invalid Request.": "Solicitud no v\u00e1lida.", + "Unable to delete a group to which customers are still assigned.": "No se puede eliminar un grupo al que todav\u00eda est\u00e1n asignados los clientes.", + "The customer group has been deleted.": "El grupo de clientes se ha eliminado.", + "Unable to find the requested group.": "No se pudo encontrar el grupo solicitado.", + "The customer group has been successfully created.": "El grupo de clientes se ha creado correctamente.", + "The customer group has been successfully saved.": "El grupo de clientes se ha guardado correctamente.", + "Unable to transfer customers to the same account.": "No se pueden transferir clientes a la misma cuenta.", + "The categories has been transferred to the group %s.": "Las categor\u00edas se han transferido al grupo%s.", + "No customer identifier has been provided to proceed to the transfer.": "No se ha proporcionado ning\u00fan identificador de cliente para proceder a la transferencia.", + "Unable to find the requested group using the provided id.": "No se pudo encontrar el grupo solicitado con la identificaci\u00f3n proporcionada.", + "\"%s\" is not an instance of \"FieldsService\"": "\"%s\" no es una instancia de \"FieldsService\"", + "Manage Medias": "Administrar medios", + "The operation was successful.": "La operaci\u00f3n fue exitosa.", + "Modules List": "Lista de m\u00f3dulos", + "List all available modules.": "Enumere todos los m\u00f3dulos disponibles.", + "Upload A Module": "Cargar un m\u00f3dulo", + "Extends NexoPOS features with some new modules.": "Ampl\u00eda las funciones de NexoPOS con algunos m\u00f3dulos nuevos.", + "The notification has been successfully deleted": "La notificaci\u00f3n se ha eliminado correctamente", + "All the notifications have been cleared.": "Se han borrado todas las notificaciones.", + "The printing event has been successfully dispatched.": "El evento de impresi\u00f3n se ha enviado correctamente.", + "There is a mismatch between the provided order and the order attached to the instalment.": "Existe una discrepancia entre el pedido proporcionado y el pedido adjunto a la entrega.", + "Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.": "No se puede editar una adquisici\u00f3n que est\u00e1 en stock. Considere realizar un ajuste o eliminar la adquisici\u00f3n.", + "New Procurement": "Adquisiciones nuevas", + "Edit Procurement": "Editar adquisiciones", + "Perform adjustment on existing procurement.": "Realizar ajustes en adquisiciones existentes.", + "%s - Invoice": "%s - Factura", + "list of product procured.": "lista de productos adquiridos.", + "The product price has been refreshed.": "Se actualiz\u00f3 el precio del producto.", + "The single variation has been deleted.": "Se ha eliminado la \u00fanica variaci\u00f3n.", + "Edit a product": "Editar un producto", + "Makes modifications to a product": "Realiza modificaciones en un producto.", + "Create a product": "Crea un producto", + "Add a new product on the system": "Agregar un nuevo producto al sistema", + "Stock Adjustment": "Ajuste de Stock", + "Adjust stock of existing products.": "Ajustar stock de productos existentes.", + "Lost": "Perdi\u00f3", + "No stock is provided for the requested product.": "No se proporciona stock para el producto solicitado.", + "The product unit quantity has been deleted.": "Se ha eliminado la cantidad de unidades de producto.", + "Unable to proceed as the request is not valid.": "No se puede continuar porque la solicitud no es v\u00e1lida.", + "Unsupported action for the product %s.": "Acci\u00f3n no admitida para el producto%s.", + "The stock has been adjustment successfully.": "El stock se ha ajustado con \u00e9xito.", + "Unable to add the product to the cart as it has expired.": "No se puede agregar el producto al carrito porque ha vencido.", + "Unable to add a product that has accurate tracking enabled, using an ordinary barcode.": "No se puede agregar un producto que tiene habilitado un seguimiento preciso, utilizando un c\u00f3digo de barras normal.", + "There is no products matching the current request.": "No hay productos que coincidan con la solicitud actual.", + "Print Labels": "Imprimir etiquetas", + "Customize and print products labels.": "Personalice e imprima etiquetas de productos.", + "Providers": "Proveedores", + "Create A Provider": "Crear un proveedor", + "Sales Report": "Reporte de ventas", + "Provides an overview over the sales during a specific period": "Proporciona una descripci\u00f3n general de las ventas durante un per\u00edodo espec\u00edfico.", + "Sold Stock": "Stock vendido", + "Provides an overview over the sold stock during a specific period.": "Proporciona una descripci\u00f3n general de las existencias vendidas durante un per\u00edodo espec\u00edfico.", + "Profit Report": "Informe de ganancias", + "Provides an overview of the provide of the products sold.": "Proporciona una descripci\u00f3n general de la oferta de los productos vendidos.", + "Provides an overview on the activity for a specific period.": "Proporciona una descripci\u00f3n general de la actividad durante un per\u00edodo espec\u00edfico.", + "Annual Report": "Reporte anual", + "Invalid authorization code provided.": "Se proporcion\u00f3 un c\u00f3digo de autorizaci\u00f3n no v\u00e1lido.", + "The database has been successfully seeded.": "La base de datos se ha sembrado con \u00e9xito.", + "Settings Page Not Found": "P\u00e1gina de configuraci\u00f3n no encontrada", + "Customers Settings": "Configuraci\u00f3n de clientes", + "Configure the customers settings of the application.": "Configure los ajustes de los clientes de la aplicaci\u00f3n.", + "General Settings": "Configuraci\u00f3n general", + "Configure the general settings of the application.": "Configure los ajustes generales de la aplicaci\u00f3n.", + "Orders Settings": "Configuraci\u00f3n de pedidos", + "POS Settings": "Configuraci\u00f3n de POS", + "Configure the pos settings.": "Configure los ajustes de posici\u00f3n.", + "Workers Settings": "Configuraci\u00f3n de trabajadores", + "%s is not an instance of \"%s\".": "%s no es una instancia de \"%s\".", + "Unable to find the requested product tax using the provided id": "No se puede encontrar el impuesto sobre el producto solicitado con la identificaci\u00f3n proporcionada", + "Unable to find the requested product tax using the provided identifier.": "No se puede encontrar el impuesto sobre el producto solicitado con el identificador proporcionado.", + "The product tax has been created.": "Se ha creado el impuesto sobre el producto.", + "The product tax has been updated": "Se actualiz\u00f3 el impuesto sobre el producto.", + "Unable to retrieve the requested tax group using the provided identifier \"%s\".": "No se puede recuperar el grupo de impuestos solicitado con el identificador proporcionado \"%s\".", + "Create User": "Crear usuario", + "Permission Manager": "Administrador de permisos", + "Manage all permissions and roles": "Gestionar todos los permisos y roles", + "My Profile": "Mi perfil", + "Change your personal settings": "Cambiar su configuraci\u00f3n personal", + "The permissions has been updated.": "Los permisos se han actualizado.", + "Roles": "Roles", + "Sunday": "domingo", + "Monday": "lunes", + "Tuesday": "martes", + "Wednesday": "mi\u00e9rcoles", + "Thursday": "jueves", + "Friday": "viernes", + "Saturday": "s\u00e1bado", + "The migration has successfully run.": "La migraci\u00f3n se ha realizado correctamente.", + "Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.": "No se puede inicializar la p\u00e1gina de configuraci\u00f3n. No se puede crear una instancia del identificador \"%s\".", + "Unable to register. The registration is closed.": "No se puede registrar. El registro est\u00e1 cerrado.", + "Hold Order Cleared": "Retener orden despejada", + "[NexoPOS] Activate Your Account": "[NexoPOS] Active su cuenta", + "[NexoPOS] A New User Has Registered": "[NexoPOS] Se ha registrado un nuevo usuario", + "[NexoPOS] Your Account Has Been Created": "[NexoPOS] Se ha creado su cuenta", + "Unable to find the permission with the namespace \"%s\".": "No se pudo encontrar el permiso con el espacio de nombres \"%s\".", + "Voided": "Anulado", + "Refunded": "Reintegrado", + "Partially Refunded": "reintegrado parcialmente", + "The register has been successfully opened": "El registro se ha abierto con \u00e9xito", + "The register has been successfully closed": "El registro se ha cerrado con \u00e9xito", + "The provided amount is not allowed. The amount should be greater than \"0\". ": "La cantidad proporcionada no est\u00e1 permitida. La cantidad debe ser mayor que \"0\".", + "The cash has successfully been stored": "El efectivo se ha almacenado correctamente", + "Not enough fund to cash out.": "No hay fondos suficientes para cobrar.", + "The cash has successfully been disbursed.": "El efectivo se ha desembolsado con \u00e9xito.", + "In Use": "En uso", + "Opened": "Abri\u00f3", + "Delete Selected entries": "Eliminar entradas seleccionadas", + "%s entries has been deleted": "Se han eliminado%s entradas", + "%s entries has not been deleted": "%s entradas no se han eliminado", + "Unable to find the customer using the provided id.": "No se pudo encontrar al cliente con la identificaci\u00f3n proporcionada.", + "The customer has been deleted.": "El cliente ha sido eliminado.", + "The customer has been created.": "Se ha creado el cliente.", + "Unable to find the customer using the provided ID.": "No se pudo encontrar al cliente con la identificaci\u00f3n proporcionada.", + "The customer has been edited.": "El cliente ha sido editado.", + "Unable to find the customer using the provided email.": "No se pudo encontrar al cliente utilizando el correo electr\u00f3nico proporcionado.", + "The customer account has been updated.": "La cuenta del cliente se ha actualizado.", + "Issuing Coupon Failed": "Error al emitir el cup\u00f3n", + "Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.": "No se puede aplicar un cup\u00f3n adjunto a la recompensa \"%s\". Parece que el cup\u00f3n ya no existe.", + "Unable to find a coupon with the provided code.": "No se pudo encontrar un cup\u00f3n con el c\u00f3digo proporcionado.", + "The coupon has been updated.": "El cup\u00f3n se ha actualizado.", + "The group has been created.": "Se ha creado el grupo.", + "The media has been deleted": "El medio ha sido eliminado", + "Unable to find the media.": "Incapaz de encontrar los medios.", + "Unable to find the requested file.": "No se pudo encontrar el archivo solicitado.", + "Unable to find the media entry": "No se pudo encontrar la entrada de medios", + "Medias": "Medios", + "List": "Lista", + "Customers Groups": "Grupos de Clientes", + "Create Group": "Crea un grupo", + "Reward Systems": "Sistemas de recompensa", + "Create Reward": "Crear recompensa", + "List Coupons": "Lista de cupones", + "Inventory": "Inventario", + "Create Product": "Crear producto", + "Create Category": "Crear categor\u00eda", + "Create Unit": "Crear unidad", + "Unit Groups": "Grupos de unidades", + "Create Unit Groups": "Crear grupos de unidades", + "Taxes Groups": "Grupos de impuestos", + "Create Tax Groups": "Crear grupos de impuestos", + "Create Tax": "Crear impuesto", + "Modules": "M\u00f3dulos", + "Upload Module": "M\u00f3dulo de carga", + "Users": "Usuarios", + "Create Roles": "Crear roles", + "Permissions Manager": "Administrador de permisos", + "Procurements": "Adquisiciones", + "Reports": "Informes", + "Sale Report": "Informe de venta", + "Incomes & Loosses": "Ingresos y p\u00e9rdidas", + "Invoice Settings": "Configuraci\u00f3n de facturas", + "Workers": "Trabajadores", + "Unable to locate the requested module.": "No se pudo localizar el m\u00f3dulo solicitado.", + "The module \"%s\" has been disabled as the dependency \"%s\" is missing. ": "El m\u00f3dulo \"%s\" se ha desactivado porque falta la dependencia \"%s\".", + "The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ": "El m\u00f3dulo \"%s\" ha sido deshabilitado porque la dependencia \"%s\" no est\u00e1 habilitada.", + "Unable to detect the folder from where to perform the installation.": "No se pudo detectar la carpeta desde donde realizar la instalaci\u00f3n.", + "The uploaded file is not a valid module.": "El archivo cargado no es un m\u00f3dulo v\u00e1lido.", + "The module has been successfully installed.": "El m\u00f3dulo se ha instalado correctamente.", + "The migration run successfully.": "La migraci\u00f3n se ejecut\u00f3 correctamente.", + "The module has correctly been enabled.": "El m\u00f3dulo se ha habilitado correctamente.", + "Unable to enable the module.": "No se puede habilitar el m\u00f3dulo.", + "The Module has been disabled.": "El m\u00f3dulo se ha desactivado.", + "Unable to disable the module.": "No se puede deshabilitar el m\u00f3dulo.", + "Unable to proceed, the modules management is disabled.": "No se puede continuar, la gesti\u00f3n de m\u00f3dulos est\u00e1 deshabilitada.", + "Missing required parameters to create a notification": "Faltan par\u00e1metros necesarios para crear una notificaci\u00f3n", + "The order has been placed.": "Se ha realizado el pedido.", + "The percentage discount provided is not valid.": "El porcentaje de descuento proporcionado no es v\u00e1lido.", + "A discount cannot exceed the sub total value of an order.": "Un descuento no puede exceder el valor subtotal de un pedido.", + "No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.": "No se espera ning\u00fan pago por el momento. Si el cliente desea pagar antes, considere ajustar la fecha de pago a plazos.", + "The payment has been saved.": "El pago se ha guardado.", + "Unable to edit an order that is completely paid.": "No se puede editar un pedido que est\u00e1 completamente pagado.", + "Unable to proceed as one of the previous submitted payment is missing from the order.": "No se puede continuar porque falta uno de los pagos enviados anteriormente en el pedido.", + "The order payment status cannot switch to hold as a payment has already been made on that order.": "El estado de pago del pedido no puede cambiar a retenido porque ya se realiz\u00f3 un pago en ese pedido.", + "Unable to proceed. One of the submitted payment type is not supported.": "Incapaces de proceder. Uno de los tipos de pago enviados no es compatible.", + "Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.": "No se puede continuar, el producto \"%s\" tiene una unidad que no se puede recuperar. Podr\u00eda haber sido eliminado.", + "Unable to find the customer using the provided ID. The order creation has failed.": "No se pudo encontrar al cliente con la identificaci\u00f3n proporcionada. La creaci\u00f3n de la orden ha fallado.", + "Unable to proceed a refund on an unpaid order.": "No se puede proceder con el reembolso de un pedido no pagado.", + "The current credit has been issued from a refund.": "El cr\u00e9dito actual se ha emitido a partir de un reembolso.", + "The order has been successfully refunded.": "El pedido ha sido reembolsado correctamente.", + "unable to proceed to a refund as the provided status is not supported.": "no se puede proceder a un reembolso porque el estado proporcionado no es compatible.", + "The product %s has been successfully refunded.": "El producto%s ha sido reembolsado correctamente.", + "Unable to find the order product using the provided id.": "No se puede encontrar el producto del pedido con la identificaci\u00f3n proporcionada.", + "Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier": "No se pudo encontrar el pedido solicitado usando \"%s\" como pivote y \"%s\" como identificador", + "Unable to fetch the order as the provided pivot argument is not supported.": "No se puede recuperar el pedido porque el argumento din\u00e1mico proporcionado no es compatible.", + "The product has been added to the order \"%s\"": "El producto se ha a\u00f1adido al pedido \"%s\"", + "the order has been successfully computed.": "el pedido se ha calculado con \u00e9xito.", + "The order has been deleted.": "El pedido ha sido eliminado.", + "The product has been successfully deleted from the order.": "El producto se ha eliminado correctamente del pedido.", + "Unable to find the requested product on the provider order.": "No se pudo encontrar el producto solicitado en el pedido del proveedor.", + "Unpaid Orders Turned Due": "Pedidos impagos vencidos", + "No orders to handle for the moment.": "No hay \u00f3rdenes que manejar por el momento.", + "The order has been correctly voided.": "La orden ha sido anulada correctamente.", + "Unable to edit an already paid instalment.": "No se puede editar una cuota ya pagada.", + "The instalment has been saved.": "La cuota se ha guardado.", + "The instalment has been deleted.": "La cuota ha sido eliminada.", + "The defined amount is not valid.": "La cantidad definida no es v\u00e1lida.", + "No further instalments is allowed for this order. The total instalment already covers the order total.": "No se permiten m\u00e1s cuotas para este pedido. La cuota total ya cubre el total del pedido.", + "The instalment has been created.": "Se ha creado la cuota.", + "The provided status is not supported.": "El estado proporcionado no es compatible.", + "The order has been successfully updated.": "El pedido se ha actualizado correctamente.", + "Unable to find the requested procurement using the provided identifier.": "No se puede encontrar la adquisici\u00f3n solicitada con el identificador proporcionado.", + "Unable to find the assigned provider.": "No se pudo encontrar el proveedor asignado.", + "The procurement has been created.": "Se ha creado la contrataci\u00f3n.", + "Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.": "No se puede editar una adquisici\u00f3n que ya se ha almacenado. Considere el ajuste de rendimiento y stock.", + "The provider has been edited.": "El proveedor ha sido editado.", + "Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"": "No se puede tener un ID de grupo de unidades para el producto que usa la referencia \"%s\" como \"%s\"", + "The operation has completed.": "La operaci\u00f3n ha finalizado.", + "The procurement has been refreshed.": "La adquisici\u00f3n se ha actualizado.", + "The procurement has been reset.": "La adquisici\u00f3n se ha restablecido.", + "The procurement products has been deleted.": "Se han eliminado los productos de adquisici\u00f3n.", + "The procurement product has been updated.": "El producto de adquisici\u00f3n se ha actualizado.", + "Unable to find the procurement product using the provided id.": "No se puede encontrar el producto de adquisici\u00f3n con la identificaci\u00f3n proporcionada.", + "The product %s has been deleted from the procurement %s": "El producto%s se ha eliminado del aprovisionamiento%s", + "The product with the following ID \"%s\" is not initially included on the procurement": "El producto con el siguiente ID \"%s\" no se incluye inicialmente en la adquisici\u00f3n", + "The procurement products has been updated.": "Los productos de adquisici\u00f3n se han actualizado.", + "Procurement Automatically Stocked": "Adquisiciones almacenadas autom\u00e1ticamente", + "Draft": "Sequ\u00eda", + "The category has been created": "La categor\u00eda ha sido creada", + "Unable to find the product using the provided id.": "No se puede encontrar el producto con la identificaci\u00f3n proporcionada.", + "Unable to find the requested product using the provided SKU.": "No se puede encontrar el producto solicitado con el SKU proporcionado.", + "The variable product has been created.": "Se ha creado el producto variable.", + "The provided barcode \"%s\" is already in use.": "El c\u00f3digo de barras proporcionado \"%s\" ya est\u00e1 en uso.", + "The provided SKU \"%s\" is already in use.": "El SKU proporcionado \"%s\" ya est\u00e1 en uso.", + "The product has been saved.": "El producto se ha guardado.", + "The provided barcode is already in use.": "El c\u00f3digo de barras proporcionado ya est\u00e1 en uso.", + "The provided SKU is already in use.": "El SKU proporcionado ya est\u00e1 en uso.", + "The product has been updated": "El producto ha sido actualizado", + "The variable product has been updated.": "Se ha actualizado el producto variable.", + "The product variations has been reset": "Las variaciones del producto se han restablecido.", + "The product has been reset.": "El producto se ha reiniciado.", + "The product \"%s\" has been successfully deleted": "El producto \"%s\" se ha eliminado correctamente", + "Unable to find the requested variation using the provided ID.": "No se puede encontrar la variaci\u00f3n solicitada con el ID proporcionado.", + "The product stock has been updated.": "Se ha actualizado el stock del producto.", + "The action is not an allowed operation.": "La acci\u00f3n no es una operaci\u00f3n permitida.", + "The product quantity has been updated.": "Se actualiz\u00f3 la cantidad de producto.", + "There is no variations to delete.": "No hay variaciones para eliminar.", + "There is no products to delete.": "No hay productos para eliminar.", + "The product variation has been successfully created.": "La variaci\u00f3n de producto se ha creado con \u00e9xito.", + "The product variation has been updated.": "Se actualiz\u00f3 la variaci\u00f3n del producto.", + "The provider has been created.": "Se ha creado el proveedor.", + "The provider has been updated.": "El proveedor se ha actualizado.", + "Unable to find the provider using the specified id.": "No se pudo encontrar el proveedor con la identificaci\u00f3n especificada.", + "The provider has been deleted.": "El proveedor ha sido eliminado.", + "Unable to find the provider using the specified identifier.": "No se pudo encontrar el proveedor con el identificador especificado.", + "The provider account has been updated.": "La cuenta del proveedor se ha actualizado.", + "The procurement payment has been deducted.": "Se ha deducido el pago de la adquisici\u00f3n.", + "The dashboard report has been updated.": "El informe del panel se ha actualizado.", + "Untracked Stock Operation": "Operaci\u00f3n de stock sin seguimiento", + "Unsupported action": "Acci\u00f3n no admitida", + "The expense has been correctly saved.": "El gasto se ha guardado correctamente.", + "The table has been truncated.": "La tabla se ha truncado.", + "Untitled Settings Page": "P\u00e1gina de configuraci\u00f3n sin t\u00edtulo", + "No description provided for this settings page.": "No se proporciona una descripci\u00f3n para esta p\u00e1gina de configuraci\u00f3n.", + "The form has been successfully saved.": "El formulario se ha guardado correctamente.", + "Unable to reach the host": "Incapaz de comunicarse con el anfitri\u00f3n", + "Unable to connect to the database using the credentials provided.": "No se puede conectar a la base de datos con las credenciales proporcionadas.", + "Unable to select the database.": "No se puede seleccionar la base de datos.", + "Access denied for this user.": "Acceso denegado para este usuario.", + "The connexion with the database was successful": "La conexi\u00f3n con la base de datos fue exitosa", + "NexoPOS has been successfully installed.": "NexoPOS se ha instalado correctamente.", + "A tax cannot be his own parent.": "Un impuesto no puede ser su propio padre.", + "The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".": "La jerarqu\u00eda de impuestos est\u00e1 limitada a 1. Un impuesto secundario no debe tener el tipo de impuesto establecido en \"agrupado\".", + "Unable to find the requested tax using the provided identifier.": "No se pudo encontrar el impuesto solicitado con el identificador proporcionado.", + "The tax group has been correctly saved.": "El grupo de impuestos se ha guardado correctamente.", + "The tax has been correctly created.": "El impuesto se ha creado correctamente.", + "The tax has been successfully deleted.": "El impuesto se ha eliminado correctamente.", + "The Unit Group has been created.": "Se ha creado el Grupo de Unidades.", + "The unit group %s has been updated.": "El grupo de unidades%s se ha actualizado.", + "Unable to find the unit group to which this unit is attached.": "No se puede encontrar el grupo de unidades al que est\u00e1 adjunta esta unidad.", + "The unit has been saved.": "La unidad se ha guardado.", + "Unable to find the Unit using the provided id.": "No se puede encontrar la unidad con la identificaci\u00f3n proporcionada.", + "The unit has been updated.": "La unidad se ha actualizado.", + "The unit group %s has more than one base unit": "El grupo de unidades%s tiene m\u00e1s de una unidad base", + "The unit has been deleted.": "La unidad ha sido eliminada.", + "unable to find this validation class %s.": "no se puede encontrar esta clase de validaci\u00f3n%s.", + "Enable Reward": "Habilitar recompensa", + "Will activate the reward system for the customers.": "Activar\u00e1 el sistema de recompensas para los clientes.", + "Default Customer Account": "Cuenta de cliente predeterminada", + "Default Customer Group": "Grupo de clientes predeterminado", + "Select to which group each new created customers are assigned to.": "Seleccione a qu\u00e9 grupo est\u00e1 asignado cada nuevo cliente creado.", + "Enable Credit & Account": "Habilitar cr\u00e9dito y cuenta", + "The customers will be able to make deposit or obtain credit.": "Los clientes podr\u00e1n realizar dep\u00f3sitos u obtener cr\u00e9dito.", + "Store Name": "Nombre de la tienda", + "This is the store name.": "Este es el nombre de la tienda.", + "Store Address": "Direcci\u00f3n de la tienda", + "The actual store address.": "La direcci\u00f3n real de la tienda.", + "Store City": "Ciudad de la tienda", + "The actual store city.": "La ciudad real de la tienda.", + "Store Phone": "Tel\u00e9fono de la tienda", + "The phone number to reach the store.": "El n\u00famero de tel\u00e9fono para comunicarse con la tienda.", + "Store Email": "Correo electr\u00f3nico de la tienda", + "The actual store email. Might be used on invoice or for reports.": "El correo electr\u00f3nico real de la tienda. Puede utilizarse en facturas o informes.", + "Store PO.Box": "Tienda PO.Box", + "The store mail box number.": "El n\u00famero de casilla de correo de la tienda.", + "Store Fax": "Fax de la tienda", + "The store fax number.": "El n\u00famero de fax de la tienda.", + "Store Additional Information": "Almacenar informaci\u00f3n adicional", + "Store additional information.": "Almacene informaci\u00f3n adicional.", + "Store Square Logo": "Logotipo de Store Square", + "Choose what is the square logo of the store.": "Elige cu\u00e1l es el logo cuadrado de la tienda.", + "Store Rectangle Logo": "Logotipo de tienda rectangular", + "Choose what is the rectangle logo of the store.": "Elige cu\u00e1l es el logo rectangular de la tienda.", + "Define the default fallback language.": "Defina el idioma de respaldo predeterminado.", + "Currency": "Divisa", + "Currency Symbol": "S\u00edmbolo de moneda", + "This is the currency symbol.": "Este es el s\u00edmbolo de la moneda.", + "Currency ISO": "Moneda ISO", + "The international currency ISO format.": "El formato ISO de moneda internacional.", + "Currency Position": "Posici\u00f3n de moneda", + "Before the amount": "Antes de la cantidad", + "After the amount": "Despues de la cantidad", + "Define where the currency should be located.": "Defina d\u00f3nde debe ubicarse la moneda.", + "Preferred Currency": "Moneda preferida", + "ISO Currency": "Moneda ISO", + "Symbol": "S\u00edmbolo", + "Determine what is the currency indicator that should be used.": "Determine cu\u00e1l es el indicador de moneda que se debe utilizar.", + "Currency Thousand Separator": "Separador de miles de moneda", + "Currency Decimal Separator": "Separador decimal de moneda", + "Define the symbol that indicate decimal number. By default \".\" is used.": "Defina el s\u00edmbolo que indica el n\u00famero decimal. Por defecto se utiliza \".\".", + "Currency Precision": "Precisi\u00f3n de moneda", + "%s numbers after the decimal": "%s n\u00fameros despu\u00e9s del decimal", + "Date Format": "Formato de fecha", + "This define how the date should be defined. The default format is \"Y-m-d\".": "Esto define c\u00f3mo se debe definir la fecha. El formato predeterminado es \"Y-m-d \".", + "Registration": "Registro", + "Registration Open": "Registro abierto", + "Determine if everyone can register.": "Determina si todos pueden registrarse.", + "Registration Role": "Rol de registro", + "Select what is the registration role.": "Seleccione cu\u00e1l es el rol de registro.", + "Requires Validation": "Requiere validaci\u00f3n", + "Force account validation after the registration.": "Forzar la validaci\u00f3n de la cuenta despu\u00e9s del registro.", + "Allow Recovery": "Permitir recuperaci\u00f3n", + "Allow any user to recover his account.": "Permita que cualquier usuario recupere su cuenta.", + "Receipts": "Ingresos", + "Receipt Template": "Plantilla de recibo", + "Default": "Defecto", + "Choose the template that applies to receipts": "Elija la plantilla que se aplica a los recibos", + "Receipt Logo": "Logotipo de recibo", + "Provide a URL to the logo.": "Proporcione una URL al logotipo.", + "Receipt Footer": "Pie de p\u00e1gina del recibo", + "If you would like to add some disclosure at the bottom of the receipt.": "Si desea agregar alguna divulgaci\u00f3n en la parte inferior del recibo.", + "Column A": "Columna A", + "Column B": "Columna B", + "Order Code Type": "Tipo de c\u00f3digo de pedido", + "Determine how the system will generate code for each orders.": "Determine c\u00f3mo generar\u00e1 el sistema el c\u00f3digo para cada pedido.", + "Sequential": "Secuencial", + "Random Code": "C\u00f3digo aleatorio", + "Number Sequential": "N\u00famero secuencial", + "Allow Unpaid Orders": "Permitir pedidos impagos", + "Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".": "Evitar\u00e1 que se realicen pedidos incompletos. Si se permite el cr\u00e9dito, esta opci\u00f3n debe establecerse en \"s\u00ed\".", + "Allow Partial Orders": "Permitir pedidos parciales", + "Will prevent partially paid orders to be placed.": "Evitar\u00e1 que se realicen pedidos parcialmente pagados.", + "Quotation Expiration": "Vencimiento de cotizaci\u00f3n", + "Quotations will get deleted after they defined they has reached.": "Las citas se eliminar\u00e1n despu\u00e9s de que hayan definido su alcance.", + "%s Days": "%s d\u00edas", + "Features": "Caracter\u00edsticas", + "Show Quantity": "Mostrar cantidad", + "Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.": "Mostrar\u00e1 el selector de cantidad al elegir un producto. De lo contrario, la cantidad predeterminada se establece en 1.", + "Allow Customer Creation": "Permitir la creaci\u00f3n de clientes", + "Allow customers to be created on the POS.": "Permitir la creaci\u00f3n de clientes en el TPV.", + "Quick Product": "Producto r\u00e1pido", + "Allow quick product to be created from the POS.": "Permita que se cree un producto r\u00e1pido desde el POS.", + "Editable Unit Price": "Precio unitario editable", + "Allow product unit price to be edited.": "Permitir que se edite el precio unitario del producto.", + "Order Types": "Tipos de orden", + "Control the order type enabled.": "Controle el tipo de orden habilitado.", + "Layout": "Dise\u00f1o", + "Retail Layout": "Dise\u00f1o minorista", + "Clothing Shop": "Tienda de ropa", + "POS Layout": "Dise\u00f1o POS", + "Change the layout of the POS.": "Cambia el dise\u00f1o del TPV.", + "Printing": "Impresi\u00f3n", + "Printed Document": "Documento impreso", + "Choose the document used for printing aster a sale.": "Elija el documento utilizado para imprimir una venta.", + "Printing Enabled For": "Impresi\u00f3n habilitada para", + "All Orders": "Todas las \u00f3rdenes", + "From Partially Paid Orders": "De pedidos pagados parcialmente", + "Only Paid Orders": "Solo pedidos pagados", + "Determine when the printing should be enabled.": "Determine cu\u00e1ndo debe habilitarse la impresi\u00f3n.", + "Enable Cash Registers": "Habilitar cajas registradoras", + "Determine if the POS will support cash registers.": "Determine si el POS admitir\u00e1 cajas registradoras.", + "Cashier Idle Counter": "Contador inactivo del cajero", + "5 Minutes": "5 minutos", + "10 Minutes": "10 minutos", + "15 Minutes": "15 minutos", + "20 Minutes": "20 minutos", + "30 Minutes": "30 minutos", + "Selected after how many minutes the system will set the cashier as idle.": "Seleccionado despu\u00e9s de cu\u00e1ntos minutos el sistema establecer\u00e1 el cajero como inactivo.", + "Cash Disbursement": "Desembolso de efectivo", + "Allow cash disbursement by the cashier.": "Permitir el desembolso de efectivo por parte del cajero.", + "Cash Registers": "Cajas registradoras", + "Keyboard Shortcuts": "Atajos de teclado", + "Cancel Order": "Cancelar orden", + "Keyboard shortcut to cancel the current order.": "Atajo de teclado para cancelar el pedido actual.", + "Keyboard shortcut to hold the current order.": "Atajo de teclado para mantener el orden actual.", + "Keyboard shortcut to create a customer.": "Atajo de teclado para crear un cliente.", + "Proceed Payment": "Proceder al pago", + "Keyboard shortcut to proceed to the payment.": "Atajo de teclado para proceder al pago.", + "Open Shipping": "Env\u00edo Abierto", + "Keyboard shortcut to define shipping details.": "Atajo de teclado para definir detalles de env\u00edo.", + "Open Note": "Abrir nota", + "Keyboard shortcut to open the notes.": "Atajo de teclado para abrir las notas.", + "Order Type Selector": "Selector de tipo de orden", + "Keyboard shortcut to open the order type selector.": "Atajo de teclado para abrir el selector de tipo de orden.", + "Toggle Fullscreen": "Alternar pantalla completa", + "Keyboard shortcut to toggle fullscreen.": "Atajo de teclado para alternar la pantalla completa.", + "Quick Search": "B\u00fasqueda r\u00e1pida", + "Keyboard shortcut open the quick search popup.": "El atajo de teclado abre la ventana emergente de b\u00fasqueda r\u00e1pida.", + "Amount Shortcuts": "Accesos directos de cantidad", + "VAT Type": "Tipo de IVA", + "Determine the VAT type that should be used.": "Determine el tipo de IVA que se debe utilizar.", + "Flat Rate": "Tarifa plana", + "Flexible Rate": "Tarifa flexible", + "Products Vat": "Productos Tina", + "Products & Flat Rate": "Productos y tarifa plana", + "Products & Flexible Rate": "Productos y tarifa flexible", + "Define the tax group that applies to the sales.": "Defina el grupo de impuestos que se aplica a las ventas.", + "Define how the tax is computed on sales.": "Defina c\u00f3mo se calcula el impuesto sobre las ventas.", + "VAT Settings": "Configuraci\u00f3n de IVA", + "Enable Email Reporting": "Habilitar informes por correo electr\u00f3nico", + "Determine if the reporting should be enabled globally.": "Determine si los informes deben habilitarse a nivel mundial.", + "Supplies": "Suministros", + "Public Name": "Nombre publico", + "Define what is the user public name. If not provided, the username is used instead.": "Defina cu\u00e1l es el nombre p\u00fablico del usuario. Si no se proporciona, se utiliza en su lugar el nombre de usuario.", + "Enable Workers": "Habilitar trabajadores", + "Test": "Test", + "Receipt — %s": "Recibo — %s", + "Choose the language for the current account.": "Elija el idioma para la cuenta corriente.", + "Sign In — NexoPOS": "Iniciar sesi\u00f3n — NexoPOS", + "Sign Up — NexoPOS": "Reg\u00edstrate — NexoPOS", + "Order Invoice — %s": "Factura de pedido — %s", + "Order Receipt — %s": "Recibo de pedido — %s", + "Printing Gateway": "Puerta de entrada de impresi\u00f3n", + "Determine what is the gateway used for printing.": "Determine qu\u00e9 se usa la puerta de enlace para imprimir.", + "Localization for %s extracted to %s": "Localizaci\u00f3n de %s extra\u00edda a %s", + "Downloading latest dev build...": "Descargando la \u00faltima compilaci\u00f3n de desarrollo ...", + "Reset project to HEAD...": "Restablecer proyecto a HEAD ...", + "Payment Types List": "Lista de tipos de pago", + "Display all payment types.": "Muestra todos los tipos de pago.", + "No payment types has been registered": "No se ha registrado ning\u00fan tipo de pago", + "Add a new payment type": "Agregar un nuevo tipo de pago", + "Create a new payment type": "Crea un nuevo tipo de pago", + "Register a new payment type and save it.": "Registre un nuevo tipo de pago y gu\u00e1rdelo.", + "Edit payment type": "Editar tipo de pago", + "Modify Payment Type.": "Modificar el tipo de pago.", + "Return to Payment Types": "Volver a tipos de pago", + "Label": "Etiqueta", + "Provide a label to the resource.": "Proporcione una etiqueta al recurso.", + "A payment type having the same identifier already exists.": "Ya existe un tipo de pago que tiene el mismo identificador.", + "Unable to delete a read-only payments type.": "No se puede eliminar un tipo de pago de solo lectura.", + "Readonly": "Solo lectura", + "Payment Types": "Formas de pago", + "Cash": "Dinero en efectivo", + "Bank Payment": "Pago bancario", + "Current Week": "Semana actual", + "Previous Week": "Semana pasada", + "There is no migrations to perform for the module \"%s\"": "No hay migraciones que realizar para el m\u00f3dulo \"%s\"", + "The module migration has successfully been performed for the module \"%s\"": "La migraci\u00f3n del m\u00f3dulo se ha realizado correctamente para el m\u00f3dulo \"%s\"", + "Sales By Payment Types": "Ventas por tipos de pago", + "Provide a report of the sales by payment types, for a specific period.": "Proporcionar un informe de las ventas por tipos de pago, para un per\u00edodo espec\u00edfico.", + "Sales By Payments": "Ventas por Pagos", + "Order Settings": "Configuraci\u00f3n de pedidos", + "Define the order name.": "Defina el nombre del pedido.", + "Define the date of creation of the order.": "Establecer el cierre de la creaci\u00f3n de la orden.", + "Total Refunds": "Reembolsos totales", + "Clients Registered": "Clientes registrados", + "Commissions": "Comisiones", + "Processing Status": "Estado de procesamiento", + "Refunded Products": "Productos reembolsados", + "The delivery status of the order will be changed. Please confirm your action.": "Se modificar\u00e1 el estado de entrega del pedido. Confirme su acci\u00f3n.", + "The product price has been updated.": "El precio del producto se ha actualizado.", + "The editable price feature is disabled.": "La funci\u00f3n de precio editable est\u00e1 deshabilitada.", + "Order Refunds": "Reembolsos de pedidos", + "Product Price": "Precio del producto", + "Unable to proceed": "Incapaces de proceder", + "Partially paid orders are disabled.": "Los pedidos parcialmente pagados est\u00e1n desactivados.", + "An order is currently being processed.": "Actualmente se est\u00e1 procesando un pedido.", + "Log out": "cerrar sesi\u00f3n", + "Refund receipt": "Recibo de reembolso", + "Recompute": "Volver a calcular", + "Sort Results": "Ordenar resultados", + "Using Quantity Ascending": "Usando cantidad ascendente", + "Using Quantity Descending": "Usar cantidad descendente", + "Using Sales Ascending": "Usar ventas ascendentes", + "Using Sales Descending": "Usar ventas descendentes", + "Using Name Ascending": "Usando el nombre ascendente", + "Using Name Descending": "Usar nombre descendente", + "Progress": "Progreso", + "Discounts": "descuentos", + "An invalid date were provided. Make sure it a prior date to the actual server date.": "Se proporcion\u00f3 una fecha no v\u00e1lida. Aseg\u00farese de que sea una fecha anterior a la fecha actual del servidor.", + "Computing report from %s...": "Informe de c\u00e1lculo de% s ...", + "The demo has been enabled.": "La demostraci\u00f3n se ha habilitado.", + "Refund Receipt": "Recibo de reembolso", + "Codabar": "codabar", + "Code 128": "C\u00f3digo 128", + "Code 39": "C\u00f3digo 39", + "Code 11": "C\u00f3digo 11", + "UPC A": "UPC A", + "UPC E": "UPC E", + "Store Dashboard": "Tablero de la tienda", + "Cashier Dashboard": "Panel de cajero", + "Default Dashboard": "Panel de control predeterminado", + "%s has been processed, %s has not been processed.": "% s se ha procesado,% s no se ha procesado.", + "Order Refund Receipt — %s": "Recibo de reembolso del pedido y mdash; %s", + "Provides an overview over the best products sold during a specific period.": "Proporciona una descripci\u00f3n general de los mejores productos vendidos durante un per\u00edodo espec\u00edfico.", + "The report will be computed for the current year.": "El informe se calcular\u00e1 para el a\u00f1o actual.", + "Unknown report to refresh.": "Informe desconocido para actualizar.", + "Report Refreshed": "Informe actualizado", + "The yearly report has been successfully refreshed for the year \"%s\".": "El informe anual se ha actualizado con \u00e9xito para el a\u00f1o \"%s\".", + "Countable": "contable", + "Piece": "Trozo", + "GST": "GST", + "SGST": "SGST", + "CGST": "CGST", + "Sample Procurement %s": "Muestra de compras% s", + "generated": "generado", + "Not Available": "No disponible", + "The report has been computed successfully.": "El informe se ha calculado correctamente.", + "Create a customer": "Crea un cliente", + "Credit": "Cr\u00e9dito", + "Debit": "D\u00e9bito", + "All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.": "Todas las entidades adscritas a esta categor\u00eda producir\u00e1n un \"cr\u00e9dito\" o un \"d\u00e9bito\" en el historial de flujo de caja.", + "Account": "Cuenta", + "Provide the accounting number for this category.": "Proporcione el n\u00famero de contabilidad para esta categor\u00eda.", + "Accounting": "Contabilidad", + "Procurement Cash Flow Account": "Cuenta de flujo de efectivo de adquisiciones", + "Sale Cash Flow Account": "Venta Cuenta de flujo de efectivo", + "Sales Refunds Account": "Cuenta de reembolsos de ventas", + "Stock return for spoiled items will be attached to this account": "La devoluci\u00f3n de existencias por art\u00edculos estropeados se adjuntar\u00e1 a esta cuenta", + "The reason has been updated.": "La raz\u00f3n ha sido actualizada.", + "You must select a customer before applying a coupon.": "Debe seleccionar un cliente antes de aplicar un cup\u00f3n.", + "No coupons for the selected customer...": "No hay cupones para el cliente seleccionado ...", + "Use Coupon": "Usar cupon", + "Use Customer ?": "Usar cliente?", + "No customer is selected. Would you like to proceed with this customer ?": "No se selecciona ning\u00fan cliente.\u00bfTe gustar\u00eda proceder con este cliente?", + "Change Customer ?": "Cambiar al cliente?", + "Would you like to assign this customer to the ongoing order ?": "\u00bfLe gustar\u00eda asignar a este cliente a la orden en curso?", + "Product \/ Service": "Producto \/ Servicio", + "An error has occurred while computing the product.": "Se ha producido un error al calcular el producto.", + "Provide a unique name for the product.": "Proporcionar un nombre \u00fanico para el producto.", + "Define what is the sale price of the item.": "Definir cu\u00e1l es el precio de venta del art\u00edculo.", + "Set the quantity of the product.": "Establecer la cantidad del producto.", + "Define what is tax type of the item.": "Definir qu\u00e9 es el tipo de impuesto del art\u00edculo.", + "Choose the tax group that should apply to the item.": "Elija el grupo de impuestos que debe aplicarse al art\u00edculo.", + "Assign a unit to the product.": "Asignar una unidad al producto.", + "Some products has been added to the cart. Would youl ike to discard this order ?": "Algunos productos se han agregado al carrito.\u00bfIKE IKE para descartar esta orden?", + "Customer Accounts List": "Lista de cuentas de clientes", + "Display all customer accounts.": "Mostrar todas las cuentas de clientes.", + "No customer accounts has been registered": "No se han registrado cuentas de clientes.", + "Add a new customer account": "A\u00f1adir una nueva cuenta de cliente", + "Create a new customer account": "Crear una nueva cuenta de cliente", + "Register a new customer account and save it.": "Registre una nueva cuenta de cliente y gu\u00e1rdela.", + "Edit customer account": "Editar cuenta de cliente", + "Modify Customer Account.": "Modificar la cuenta del cliente.", + "Return to Customer Accounts": "Volver a las cuentas de los clientes", + "This will be ignored.": "Esto ser\u00e1 ignorado.", + "Define the amount of the transaction": "Definir la cantidad de la transacci\u00f3n.", + "Define what operation will occurs on the customer account.": "Defina qu\u00e9 operaci\u00f3n ocurre en la cuenta del cliente.", + "Provider Procurements List": "Lista de adquisiciones de proveedores", + "Display all provider procurements.": "Mostrar todas las adquisiciones de proveedores.", + "No provider procurements has been registered": "No se han registrado adquisiciones de proveedores.", + "Add a new provider procurement": "A\u00f1adir una nueva adquisici\u00f3n del proveedor", + "Create a new provider procurement": "Crear una nueva adquisici\u00f3n de proveedores", + "Register a new provider procurement and save it.": "Registre una nueva adquisici\u00f3n del proveedor y gu\u00e1rdela.", + "Edit provider procurement": "Editar adquisici\u00f3n del proveedor", + "Modify Provider Procurement.": "Modificar la adquisici\u00f3n del proveedor.", + "Return to Provider Procurements": "Volver a las adquisiciones del proveedor", + "Delivered On": "Entregado en", + "Items": "Elementos", + "Displays the customer account history for %s": "Muestra el historial de la cuenta del cliente para% s", + "Procurements by \"%s\"": "Adquisiciones por \"%s\"", + "Crediting": "Acreditaci\u00f3n", + "Deducting": "Deducci\u00f3n", + "Order Payment": "Orden de pago", + "Order Refund": "Reembolso de pedidos", + "Unknown Operation": "Operaci\u00f3n desconocida", + "Unnamed Product": "Producto por calificaciones", + "Bubble": "Burbuja", + "Ding": "Cosa", + "Pop": "M\u00fasica pop", + "Cash Sound": "Sonido en efectivo", + "Sale Complete Sound": "Venta de sonido completo", + "New Item Audio": "Nuevo art\u00edculo de audio", + "The sound that plays when an item is added to the cart.": "El sonido que se reproduce cuando se agrega un art\u00edculo al carrito..", + "Howdy, {name}": "Howdy, {name}", + "Would you like to perform the selected bulk action on the selected entries ?": "\u00bfLe gustar\u00eda realizar la acci\u00f3n a granel seleccionada en las entradas seleccionadas?", + "The payment to be made today is less than what is expected.": "El pago que se realizar\u00e1 hoy es menor que lo que se espera.", + "Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.": "No se puede seleccionar el cliente predeterminado.Parece que el cliente ya no existe.Considere cambiar el cliente predeterminado en la configuraci\u00f3n.", + "How to change database configuration": "C\u00f3mo cambiar la configuraci\u00f3n de la base de datos", + "Common Database Issues": "Problemas de base de datos comunes", + "Setup": "Configuraci\u00f3n", + "Query Exception": "Excepci\u00f3n de consulta", + "The category products has been refreshed": "Los productos de la categor\u00eda se han actualizado.", + "The requested customer cannot be found.": "El cliente solicitado no se puede encontrar.", + "Filters": "Filtros", + "Has Filters": "Tiene filtros", + "N\/D": "DAKOTA DEL NORTE", + "Range Starts": "Inicio de rango", + "Range Ends": "Termina el rango", + "Search Filters": "Filtros de b\u00fasqueda", + "Clear Filters": "Limpiar filtros", + "Use Filters": "Usar filtros", + "No rewards available the selected customer...": "No hay recompensas disponibles para el cliente seleccionado ...", + "Unable to load the report as the timezone is not set on the settings.": "No se puede cargar el informe porque la zona horaria no est\u00e1 configurada en la configuraci\u00f3n.", + "There is no product to display...": "No hay producto para mostrar ...", + "Method Not Allowed": "M\u00e9todo no permitido", + "Documentation": "Documentaci\u00f3n", + "Module Version Mismatch": "Discrepancia en la versi\u00f3n del m\u00f3dulo", + "Define how many time the coupon has been used.": "Defina cu\u00e1ntas veces se ha utilizado el cup\u00f3n.", + "Define the maximum usage possible for this coupon.": "Defina el uso m\u00e1ximo posible para este cup\u00f3n.", + "Restrict the orders by the creation date.": "Restringe los pedidos por la fecha de creaci\u00f3n.", + "Created Between": "Creado entre", + "Restrict the orders by the payment status.": "Restringe los pedidos por el estado de pago.", + "Due With Payment": "Vencimiento con pago", + "Restrict the orders by the author.": "Restringir las \u00f3rdenes del autor.", + "Restrict the orders by the customer.": "Restringir los pedidos por parte del cliente.", + "Customer Phone": "Tel\u00e9fono del cliente", + "Restrict orders using the customer phone number.": "Restrinja los pedidos utilizando el n\u00famero de tel\u00e9fono del cliente.", + "Restrict the orders to the cash registers.": "Restringir los pedidos a las cajas registradoras.", + "Low Quantity": "Cantidad baja", + "Which quantity should be assumed low.": "Qu\u00e9 cantidad debe asumirse como baja.", + "Stock Alert": "Alerta de stock", + "See Products": "Ver productos", + "Provider Products List": "Lista de productos de proveedores", + "Display all Provider Products.": "Mostrar todos los productos del proveedor.", + "No Provider Products has been registered": "No se ha registrado ning\u00fan producto de proveedor", + "Add a new Provider Product": "Agregar un nuevo producto de proveedor", + "Create a new Provider Product": "Crear un nuevo producto de proveedor", + "Register a new Provider Product and save it.": "Registre un nuevo producto de proveedor y gu\u00e1rdelo.", + "Edit Provider Product": "Editar producto del proveedor", + "Modify Provider Product.": "Modificar el producto del proveedor.", + "Return to Provider Products": "Volver a Productos del proveedor", + "Clone": "Clon", + "Would you like to clone this role ?": "\u00bfTe gustar\u00eda clonar este rol?", + "Incompatibility Exception": "Excepci\u00f3n de incompatibilidad", + "The requested file cannot be downloaded or has already been downloaded.": "El archivo solicitado no se puede descargar o ya se ha descargado.", + "Low Stock Report": "Informe de stock bajo", + "Low Stock Alert": "Alerta de stock bajo", + "The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ": "El m\u00f3dulo \"%s\" ha sido deshabilitado porque la dependencia \"%s\" no est\u00e1 en la versi\u00f3n m\u00ednima requerida \"%s\".", + "The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ": "El m\u00f3dulo \"%s\" ha sido deshabilitado porque la dependencia \"%s\" est\u00e1 en una versi\u00f3n m\u00e1s all\u00e1 de la recomendada \"%s\". ", + "Clone of \"%s\"": "Clon de \"%s\"", + "The role has been cloned.": "El papel ha sido clonado.", + "Merge Products On Receipt\/Invoice": "Fusionar productos al recibir \/ factura", + "All similar products will be merged to avoid a paper waste for the receipt\/invoice.": "Todos los productos similares se fusionar\u00e1n para evitar un desperdicio de papel para el recibo \/ factura.", + "Define whether the stock alert should be enabled for this unit.": "Defina si la alerta de existencias debe habilitarse para esta unidad.", + "All Refunds": "Todos los reembolsos", + "No result match your query.": "Ning\u00fan resultado coincide con su consulta.", + "Report Type": "Tipo de informe", + "Categories Detailed": "Categor\u00edas Detalladas", + "Categories Summary": "Resumen de categor\u00edas", + "Allow you to choose the report type.": "Le permite elegir el tipo de informe.", + "Unknown": "Desconocido", + "Not Authorized": "No autorizado", + "Creating customers has been explicitly disabled from the settings.": "La creaci\u00f3n de clientes se ha deshabilitado expl\u00edcitamente en la configuraci\u00f3n.", + "Sales Discounts": "Descuentos de ventas", + "Sales Taxes": "Impuestos de ventas", + "Birth Date": "Fecha de nacimiento", + "Displays the customer birth date": "Muestra la fecha de nacimiento del cliente.", + "Sale Value": "Valor comercial", + "Purchase Value": "Valor de la compra", + "Would you like to refresh this ?": "\u00bfLe gustar\u00eda actualizar esto?", + "You cannot delete your own account.": "No puede borrar su propia cuenta.", + "Sales Progress": "Progreso de ventas", + "Procurement Refreshed": "Adquisiciones actualizado", + "The procurement \"%s\" has been successfully refreshed.": "La adquisici\u00f3n \"%s\" se ha actualizado correctamente.", + "Partially Due": "Parcialmente vencido", + "No payment type has been selected on the settings. Please check your POS features and choose the supported order type": "No se ha seleccionado ning\u00fan tipo de pago en la configuraci\u00f3n. Verifique las caracter\u00edsticas de su POS y elija el tipo de pedido admitido", + "Read More": "Lee mas", + "Wipe All": "Limpiar todo", + "Wipe Plus Grocery": "Wipe Plus Grocery", + "Accounts List": "Lista de cuentas", + "Display All Accounts.": "Mostrar todas las cuentas.", + "No Account has been registered": "No se ha registrado ninguna cuenta", + "Add a new Account": "Agregar una nueva cuenta", + "Create a new Account": "Crea una cuenta nueva", + "Register a new Account and save it.": "Registre una nueva cuenta y gu\u00e1rdela.", + "Edit Account": "Editar cuenta", + "Modify An Account.": "Modificar una cuenta.", + "Return to Accounts": "Volver a cuentas", + "Accounts": "Cuentas", + "Create Account": "Crear una cuenta", + "Payment Method": "Payment Method", + "Before submitting the payment, choose the payment type used for that order.": "Antes de enviar el pago, elija el tipo de pago utilizado para ese pedido.", + "Select the payment type that must apply to the current order.": "Seleccione el tipo de pago que debe aplicarse al pedido actual.", + "Payment Type": "Tipo de pago", + "Remove Image": "Quita la imagen", + "This form is not completely loaded.": "Este formulario no est\u00e1 completamente cargado.", + "Updating": "Actualizando", + "Updating Modules": "Actualizaci\u00f3n de m\u00f3dulos", + "Return": "Regreso", + "Credit Limit": "L\u00edmite de cr\u00e9dito", + "The request was canceled": "La solicitud fue cancelada", + "Payment Receipt — %s": "Recibo de pago: %s", + "Payment receipt": "Recibo de pago", + "Current Payment": "Pago actual", + "Total Paid": "Total pagado", + "Set what should be the limit of the purchase on credit.": "Establece cu\u00e1l debe ser el l\u00edmite de la compra a cr\u00e9dito.", + "Provide the customer email.": "Proporcionar el correo electr\u00f3nico del cliente.", + "Priority": "Prioridad", + "Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".": "Definir el orden para el pago. Cuanto menor sea el n\u00famero, primero se mostrar\u00e1 en la ventana emergente de pago. Debe comenzar desde \"0\".", + "Mode": "Modo", + "Choose what mode applies to this demo.": "Elija qu\u00e9 modo se aplica a esta demostraci\u00f3n.", + "Set if the sales should be created.": "Establezca si se deben crear las ventas.", + "Create Procurements": "Crear adquisiciones", + "Will create procurements.": "Crear\u00e1 adquisiciones.", + "Sales Account": "Cuenta de ventas", + "Procurements Account": "Cuenta de Adquisiciones", + "Sale Refunds Account": "Cuenta de Reembolsos de Venta", + "Spoiled Goods Account": "Cuenta de bienes estropeados", + "Customer Crediting Account": "Cuenta de cr\u00e9dito del cliente", + "Customer Debiting Account": "Cuenta de d\u00e9bito del cliente", + "Unable to find the requested account type using the provided id.": "No se puede encontrar el tipo de cuenta solicitado con la identificaci\u00f3n proporcionada.", + "You cannot delete an account type that has transaction bound.": "No puede eliminar un tipo de cuenta que tenga transacciones vinculadas.", + "The account type has been deleted.": "El tipo de cuenta ha sido eliminado.", + "The account has been created.": "La cuenta ha sido creada.", + "Customer Credit Account": "Cuenta de cr\u00e9dito del cliente", + "Customer Debit Account": "Cuenta de d\u00e9bito del cliente", + "Register Cash-In Account": "Registrar cuenta de ingreso de efectivo", + "Register Cash-Out Account": "Registrar cuenta de retiro", + "Require Valid Email": "Requerir correo electr\u00f3nico v\u00e1lido", + "Will for valid unique email for every customer.": "Voluntad de correo electr\u00f3nico \u00fanico y v\u00e1lido para cada cliente.", + "Choose an option": "Elige una opcion", + "Update Instalment Date": "Actualizar fecha de pago", + "Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.": "\u00bfLe gustar\u00eda marcar esa cuota como vencida hoy? si tuu confirm the instalment will be marked as paid.", + "Search for products.": "Buscar productos.", + "Toggle merging similar products.": "Alternar la fusi\u00f3n de productos similares.", + "Toggle auto focus.": "Alternar el enfoque autom\u00e1tico.", + "Filter User": "Filtrar usuario", + "All Users": "Todos los usuarios", + "No user was found for proceeding the filtering.": "No se encontr\u00f3 ning\u00fan usuario para proceder al filtrado.", + "available": "disponible", + "No coupons applies to the cart.": "No se aplican cupones al carrito.", + "Selected": "Seleccionado", + "An error occurred while opening the order options": "Ocurri\u00f3 un error al abrir las opciones de pedido", + "There is no instalment defined. Please set how many instalments are allowed for this order": "No hay cuota definida. Por favor, establezca cu\u00e1ntas cuotas se permitend for this order", + "Select Payment Gateway": "Seleccionar pasarela de pago", + "Gateway": "Puerta", + "No tax is active": "Ning\u00fan impuesto est\u00e1 activo", + "Unable to delete a payment attached to the order.": "No se puede eliminar un pago adjunto al pedido.", + "The discount has been set to the cart subtotal.": "El descuento se ha establecido en el subtotal del carrito.", + "Order Deletion": "Eliminaci\u00f3n de pedidos", + "The current order will be deleted as no payment has been made so far.": "El pedido actual se eliminar\u00e1 ya que no se ha realizado ning\u00fan pago hasta el momento.", + "Void The Order": "anular la orden", + "Unable to void an unpaid order.": "No se puede anular un pedido impago.", + "Environment Details": "Detalles del entorno", + "Properties": "Propiedades", + "Extensions": "Extensiones", + "Configurations": "Configuraciones", + "Learn More": "Aprende m\u00e1s", + "Search Products...": "Buscar Productos...", + "No results to show.": "No hay resultados para mostrar.", + "Start by choosing a range and loading the report.": "Comience eligiendo un rango y cargando el informe.", + "Invoice Date": "Fecha de la factura", + "Initial Balance": "Saldo inicial", + "New Balance": "Nuevo equilibrio", + "Transaction Type": "tipo de transacci\u00f3n", + "Unchanged": "Sin alterar", + "Define what roles applies to the user": "Definir qu\u00e9 roles se aplican al usuario", + "Not Assigned": "No asignado", + "This value is already in use on the database.": "Este valor ya est\u00e1 en uso en la base de datos.", + "This field should be checked.": "Este campo debe estar marcado.", + "This field must be a valid URL.": "Este campo debe ser una URL v\u00e1lida.", + "This field is not a valid email.": "Este campo no es un correo electr\u00f3nico v\u00e1lido.", + "If you would like to define a custom invoice date.": "Si desea definir una fecha de factura personalizada.", + "Theme": "Tema", + "Dark": "Oscuro", + "Light": "Luz", + "Define what is the theme that applies to the dashboard.": "Definir cu\u00e1l es el tema que se aplica al tablero.", + "Unable to delete this resource as it has %s dependency with %s item.": "No se puede eliminar este recurso porque tiene una dependencia de %s con el elemento %s.", + "Unable to delete this resource as it has %s dependency with %s items.": "No se puede eliminar este recurso porque tiene una dependencia de %s con %s elementos.", + "Make a new procurement.": "Hacer una nueva adquisici\u00f3n.", + "About": "Sobre", + "Details about the environment.": "Detalles sobre el entorno.", + "Core Version": "Versi\u00f3n principal", + "PHP Version": "Versi\u00f3n PHP", + "Mb String Enabled": "Cadena Mb habilitada", + "Zip Enabled": "Cremallera habilitada", + "Curl Enabled": "Rizo habilitado", + "Math Enabled": "Matem\u00e1ticas habilitadas", + "XML Enabled": "XML habilitado", + "XDebug Enabled": "XDepuraci\u00f3n habilitada", + "File Upload Enabled": "Carga de archivos habilitada", + "File Upload Size": "Tama\u00f1o de carga del archivo", + "Post Max Size": "Tama\u00f1o m\u00e1ximo de publicaci\u00f3n", + "Max Execution Time": "Tiempo m\u00e1ximo de ejecuci\u00f3n", + "Memory Limit": "Limite de memoria", + "Administrator": "Administrador", + "Store Administrator": "Administrador de tienda", + "Store Cashier": "Cajero de tienda", + "User": "Usuario", + "Incorrect Authentication Plugin Provided.": "Complemento de autenticaci\u00f3n incorrecto proporcionado.", + "Require Unique Phone": "Requerir Tel\u00e9fono \u00danico", + "Every customer should have a unique phone number.": "Cada cliente debe tener un n\u00famero de tel\u00e9fono \u00fanico.", + "Define the default theme.": "Defina el tema predeterminado.", + "Merge Similar Items": "Fusionar elementos similares", + "Will enforce similar products to be merged from the POS.": "Exigir\u00e1 que productos similares se fusionen desde el POS.", + "Toggle Product Merge": "Alternar combinaci\u00f3n de productos", + "Will enable or disable the product merging.": "Habilitar\u00e1 o deshabilitar\u00e1 la fusi\u00f3n del producto.", + "Your system is running in production mode. You probably need to build the assets": "Su sistema se est\u00e1 ejecutando en modo de producci\u00f3n. Probablemente necesite construir los activos", + "Your system is in development mode. Make sure to build the assets.": "Su sistema est\u00e1 en modo de desarrollo. Aseg\u00farese de construir los activos.", + "Unassigned": "Sin asignar", + "Display all product stock flow.": "Mostrar todo el flujo de existencias de productos.", + "No products stock flow has been registered": "No se ha registrado flujo de stock de productos", + "Add a new products stock flow": "Agregar un nuevo flujo de stock de productos", + "Create a new products stock flow": "Crear un nuevo flujo de stock de productos", + "Register a new products stock flow and save it.": "Registre un flujo de stock de nuevos productos y gu\u00e1rdelo.", + "Edit products stock flow": "Editar flujo de stock de productos", + "Modify Globalproducthistorycrud.": "Modificar Globalproducthistorycrud.", + "Initial Quantity": "Cantidad inicial", + "New Quantity": "Nueva cantidad", + "No Dashboard": "Sin tablero", + "Not Found Assets": "Activos no encontrados", + "Stock Flow Records": "Registros de flujo de existencias", + "The user attributes has been updated.": "Los atributos de usuario han sido actualizados.", + "Laravel Version": "Versi\u00f3n Laravel", + "There is a missing dependency issue.": "Falta un problema de dependencia.", + "The Action You Tried To Perform Is Not Allowed.": "La acci\u00f3n que intent\u00f3 realizar no est\u00e1 permitida.", + "Unable to locate the assets.": "No se pueden localizar los activos.", + "All the customers has been transferred to the new group %s.": "Todos los clientes han sido transferidos al nuevo grupo %s.", + "The request method is not allowed.": "El m\u00e9todo de solicitud no est\u00e1 permitido.", + "A Database Exception Occurred.": "Ocurri\u00f3 una excepci\u00f3n de base de datos.", + "An error occurred while validating the form.": "Ocurri\u00f3 un error al validar el formulario.", + "Enter": "Ingresar", + "Search...": "B\u00fasqueda...", + "Unable to hold an order which payment status has been updated already.": "No se puede retener un pedido cuyo estado de pago ya se actualiz\u00f3.", + "Unable to change the price mode. This feature has been disabled.": "No se puede cambiar el modo de precio. Esta caracter\u00edstica ha sido deshabilitada.", + "Enable WholeSale Price": "Habilitar precio de venta al por mayor", + "Would you like to switch to wholesale price ?": "\u00bfTe gustar\u00eda cambiar a precio mayorista?", + "Enable Normal Price": "Habilitar precio normal", + "Would you like to switch to normal price ?": "\u00bfTe gustar\u00eda cambiar al precio normal?", + "Search products...": "Buscar Productos...", + "Set Sale Price": "Establecer precio de venta", + "Remove": "Remover", + "No product are added to this group.": "No se a\u00f1ade ning\u00fan producto a este grupo.", + "Delete Sub item": "Eliminar elemento secundario", + "Would you like to delete this sub item?": "\u00bfDesea eliminar este elemento secundario?", + "Unable to add a grouped product.": "No se puede agregar un producto agrupado.", + "Choose The Unit": "Elija la unidad", + "Stock Report": "Informe de existencias", + "Wallet Amount": "Importe de la cartera", + "Wallet History": "Historial de la billetera", + "Transaction": "Transacci\u00f3n", + "No History...": "No historia...", + "Removing": "eliminando", + "Refunding": "Reembolso", + "Unknow": "Desconocido", + "Skip Instalments": "Saltar Cuotas", + "Define the product type.": "Defina el tipo de producto.", + "Dynamic": "Din\u00e1mica", + "In case the product is computed based on a percentage, define the rate here.": "En caso de que el producto se calcule en base a un porcentaje, defina aqu\u00ed la tasa.", + "Before saving this order, a minimum payment of {amount} is required": "Antes de guardar este pedido, se requiere un pago m\u00ednimo de {amount}", + "Initial Payment": "Pago inicial", + "In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?": "Para continuar, se requiere un pago inicial de {amount} para el tipo de pago seleccionado \"{paymentType}\". \u00bfLe gustar\u00eda continuar?", + "Search Customer...": "Buscar cliente...", + "Due Amount": "Cantidad debida", + "Wallet Balance": "Saldo de la cartera", + "Total Orders": "Pedidos totales", + "What slug should be used ? [Q] to quit.": "\u00bfQu\u00e9 babosa se debe usar? [Q] para salir.", + "\"%s\" is a reserved class name": "\"%s\" es un nombre de clase reservado", + "The migration file has been successfully forgotten for the module %s.": "El archivo de migraci\u00f3n se ha olvidado correctamente para el m\u00f3dulo %s.", + "%s products where updated.": "Se actualizaron %s productos.", + "Previous Amount": "Importe anterior", + "Next Amount": "Cantidad siguiente", + "Restrict the records by the creation date.": "Restrinja los registros por la fecha de creaci\u00f3n.", + "Restrict the records by the author.": "Restringir los registros por autor.", + "Grouped Product": "Producto agrupado", + "Groups": "Grupos", + "Choose Group": "Elegir grupo", + "Grouped": "agrupados", + "An error has occurred": "Ha ocurrido un error", + "Unable to proceed, the submitted form is not valid.": "No se puede continuar, el formulario enviado no es v\u00e1lido.", + "No activation is needed for this account.": "No se necesita activaci\u00f3n para esta cuenta.", + "Invalid activation token.": "Token de activaci\u00f3n no v\u00e1lido.", + "The expiration token has expired.": "El token de caducidad ha caducado.", + "Your account is not activated.": "Su cuenta no est\u00e1 activada.", + "Unable to change a password for a non active user.": "No se puede cambiar una contrase\u00f1a para un usuario no activo.", + "Unable to submit a new password for a non active user.": "No se puede enviar una nueva contrase\u00f1a para un usuario no activo.", + "Unable to delete an entry that no longer exists.": "No se puede eliminar una entrada que ya no existe.", + "Provides an overview of the products stock.": "Proporciona una visi\u00f3n general del stock de productos.", + "Customers Statement": "Declaraci\u00f3n de clientes", + "Display the complete customer statement.": "Muestre la declaraci\u00f3n completa del cliente.", + "The recovery has been explicitly disabled.": "La recuperaci\u00f3n se ha desactivado expl\u00edcitamente.", + "The registration has been explicitly disabled.": "El registro ha sido expl\u00edcitamente deshabilitado.", + "The entry has been successfully updated.": "La entrada se ha actualizado correctamente.", + "A similar module has been found": "Se ha encontrado un m\u00f3dulo similar.", + "A grouped product cannot be saved without any sub items.": "Un producto agrupado no se puede guardar sin subart\u00edculos.", + "A grouped product cannot contain grouped product.": "Un producto agrupado no puede contener un producto agrupado.", + "The subitem has been saved.": "El subelemento se ha guardado.", + "The %s is already taken.": "El %s ya est\u00e1 en uso.", + "Allow Wholesale Price": "Permitir precio mayorista", + "Define if the wholesale price can be selected on the POS.": "Definir si el precio mayorista se puede seleccionar en el PDV.", + "Allow Decimal Quantities": "Permitir cantidades decimales", + "Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.": "Cambiar\u00e1 el teclado num\u00e9rico para permitir decimales para cantidades. Solo para el teclado num\u00e9rico \"predeterminado\".", + "Numpad": "teclado num\u00e9rico", + "Advanced": "Avanzado", + "Will set what is the numpad used on the POS screen.": "Establecer\u00e1 cu\u00e1l es el teclado num\u00e9rico utilizado en la pantalla POS.", + "Force Barcode Auto Focus": "Forzar enfoque autom\u00e1tico de c\u00f3digo de barras", + "Will permanently enable barcode autofocus to ease using a barcode reader.": "Habilitar\u00e1 permanentemente el enfoque autom\u00e1tico de c\u00f3digo de barras para facilitar el uso de un lector de c\u00f3digo de barras.", + "Tax Included": "Impuesto incluido", + "Unable to proceed, more than one product is set as featured": "No se puede continuar, m\u00e1s de un producto est\u00e1 configurado como destacado", + "The transaction was deleted.": "La transacci\u00f3n fue eliminada.", + "Database connection was successful.": "La conexi\u00f3n a la base de datos fue exitosa.", + "The products taxes were computed successfully.": "Los impuestos sobre los productos se calcularon con \u00e9xito.", + "Tax Excluded": "Sin impuestos", + "Set Paid": "Establecer pagado", + "Would you like to mark this procurement as paid?": "\u00bfDesea marcar esta adquisici\u00f3n como pagada?", + "Unidentified Item": "Art\u00edculo no identificado", + "Non-existent Item": "Art\u00edculo inexistente", + "You cannot change the status of an already paid procurement.": "No puede cambiar el estado de una compra ya pagada.", + "The procurement payment status has been changed successfully.": "El estado de pago de la compra se ha cambiado correctamente.", + "The procurement has been marked as paid.": "La adquisici\u00f3n se ha marcado como pagada.", + "Show Price With Tax": "Mostrar precio con impuestos", + "Will display price with tax for each products.": "Mostrar\u00e1 el precio con impuestos para cada producto.", + "Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".": "No se pudo cargar el componente \"${action.component}\". Aseg\u00farese de que el componente est\u00e9 registrado en \"nsExtraComponents\".", + "Tax Inclusive": "Impuestos Incluidos", + "Apply Coupon": "Aplicar cup\u00f3n", + "Not applicable": "No aplica", + "Normal": "Normal", + "Product Taxes": "Impuestos sobre productos", + "The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.": "Falta la unidad adjunta a este producto o no est\u00e1 asignada. Revise la pesta\u00f1a \"Unidad\" para este producto.", + "X Days After Month Starts": "X días después del inicio del mes", + "On Specific Day": "En un día específico", + "Unknown Occurance": "Ocurrencia desconocida", + "Please provide a valid value.": "Proporcione un valor válido.", + "Done": "Hecho", + "Would you like to delete \"%s\"?": "¿Quieres eliminar \"%s\"?", + "Unable to find a module having as namespace \"%s\"": "No se puede encontrar un módulo que tenga como espacio de nombres \"%s\"", + "Api File": "Archivo API", + "Migrations": "Migraciones", + "Determine Until When the coupon is valid.": "Determine hasta cuándo el cupón es válido.", + "Customer Groups": "Grupos de clientes", + "Assigned To Customer Group": "Asignado al grupo de clientes", + "Only the customers who belongs to the selected groups will be able to use the coupon.": "Sólo los clientes que pertenezcan a los grupos seleccionados podrán utilizar el cupón.", + "Assigned To Customers": "Asignado a clientes", + "Only the customers selected will be ale to use the coupon.": "Sólo los clientes seleccionados podrán utilizar el cupón.", + "Unable to save the coupon as one of the selected customer no longer exists.": "No se puede guardar el cupón porque uno de los clientes seleccionados ya no existe.", + "Unable to save the coupon as one of the selected customer group no longer exists.": "No se puede guardar el cupón porque uno del grupo de clientes seleccionado ya no existe.", + "Unable to save the coupon as one of the customers provided no longer exists.": "No se puede guardar el cupón porque uno de los clientes proporcionados ya no existe.", + "Unable to save the coupon as one of the provided customer group no longer exists.": "No se puede guardar el cupón porque uno del grupo de clientes proporcionado ya no existe.", + "Coupon Order Histories List": "Lista de historiales de pedidos de cupones", + "Display all coupon order histories.": "Muestra todos los historiales de pedidos de cupones.", + "No coupon order histories has been registered": "No se han registrado historiales de pedidos de cupones", + "Add a new coupon order history": "Agregar un nuevo historial de pedidos de cupones", + "Create a new coupon order history": "Crear un nuevo historial de pedidos de cupones", + "Register a new coupon order history and save it.": "Registre un nuevo historial de pedidos de cupones y guárdelo.", + "Edit coupon order history": "Editar el historial de pedidos de cupones", + "Modify Coupon Order History.": "Modificar el historial de pedidos de cupones.", + "Return to Coupon Order Histories": "Volver al historial de pedidos de cupones", + "Customer_coupon_id": "Customer_coupon_id", + "Order_id": "Solicitar ID", + "Discount_value": "Valor_descuento", + "Minimum_cart_value": "Valor_mínimo_del_carro", + "Maximum_cart_value": "Valor_máximo_carro", + "Limit_usage": "Uso_límite", + "Would you like to delete this?": "¿Quieres eliminar esto?", + "Usage History": "Historial de uso", + "Customer Coupon Histories List": "Lista de historiales de cupones de clientes", + "Display all customer coupon histories.": "Muestra todos los historiales de cupones de clientes.", + "No customer coupon histories has been registered": "No se han registrado historiales de cupones de clientes.", + "Add a new customer coupon history": "Agregar un nuevo historial de cupones de clientes", + "Create a new customer coupon history": "Crear un nuevo historial de cupones de clientes", + "Register a new customer coupon history and save it.": "Registre un historial de cupones de nuevo cliente y guárdelo.", + "Edit customer coupon history": "Editar el historial de cupones del cliente", + "Modify Customer Coupon History.": "Modificar el historial de cupones del cliente.", + "Return to Customer Coupon Histories": "Volver al historial de cupones de clientes", + "Last Name": "Apellido", + "Provide the customer last name": "Proporcionar el apellido del cliente.", + "Provide the customer gender.": "Proporcione el sexo del cliente.", + "Provide the billing first name.": "Proporcione el nombre de facturación.", + "Provide the billing last name.": "Proporcione el apellido de facturación.", + "Provide the shipping First Name.": "Proporcione el nombre de envío.", + "Provide the shipping Last Name.": "Proporcione el apellido de envío.", + "Scheduled": "Programado", + "Set the scheduled date.": "Establecer la fecha programada.", + "Account Name": "Nombre de la cuenta", + "Provider last name if necessary.": "Apellido del proveedor si es necesario.", + "Provide the user first name.": "Proporcione el nombre del usuario.", + "Provide the user last name.": "Proporcione el apellido del usuario.", + "Set the user gender.": "Establece el género del usuario.", + "Set the user phone number.": "Establezca el número de teléfono del usuario.", + "Set the user PO Box.": "Configure el apartado postal del usuario.", + "Provide the billing First Name.": "Proporcione el nombre de facturación.", + "Last name": "Apellido", + "Group Name": "Nombre del grupo", + "Delete a user": "Eliminar un usuario", + "Activated": "Activado", + "type": "tipo", + "User Group": "Grupo de usuario", + "Scheduled On": "Programado el", + "Biling": "Biling", + "API Token": "Ficha API", + "Your Account has been successfully created.": "Su cuenta ha sido creada satisfactoriamente.", + "Unable to export if there is nothing to export.": "No se puede exportar si no hay nada que exportar.", + "%s Coupons": "%s cupones", + "%s Coupon History": "%s historial de cupones", + "\"%s\" Record History": "\"%s\" Historial de registros", + "The media name was successfully updated.": "El nombre del medio se actualizó correctamente.", + "The role was successfully assigned.": "El rol fue asignado exitosamente.", + "The role were successfully assigned.": "El rol fue asignado exitosamente.", + "Unable to identifier the provided role.": "No se puede identificar el rol proporcionado.", + "Good Condition": "Buen estado", + "Cron Disabled": "Cron deshabilitado", + "Task Scheduling Disabled": "Programación de tareas deshabilitada", + "NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.": "NexoPOS no puede programar tareas en segundo plano. Esto podría restringir las funciones necesarias. Presiona aquí para aprender cómo arreglarlo.", + "The email \"%s\" is already used for another customer.": "El correo electrónico \"%s\" ya está utilizado para otro cliente.", + "The provided coupon cannot be loaded for that customer.": "El cupón proporcionado no se puede cargar para ese cliente.", + "The provided coupon cannot be loaded for the group assigned to the selected customer.": "El cupón proporcionado no se puede cargar para el grupo asignado al cliente seleccionado.", + "Unable to use the coupon %s as it has expired.": "No se puede utilizar el cupón %s porque ha caducado.", + "Unable to use the coupon %s at this moment.": "No se puede utilizar el cupón %s en este momento.", + "Small Box": "Caja pequeña", + "Box": "Caja", + "%s products were freed": "%s productos fueron liberados", + "Restoring cash flow from paid orders...": "Restaurando el flujo de caja de los pedidos pagados...", + "Restoring cash flow from refunded orders...": "Restaurando el flujo de caja de los pedidos reembolsados...", + "%s on %s directories were deleted.": "Se eliminaron %s en %s directorios.", + "%s on %s files were deleted.": "Se eliminaron %s en %s archivos.", + "First Day Of Month": "Primer día del mes", + "Last Day Of Month": "último día del mes", + "Month middle Of Month": "Mes a mitad de mes", + "{day} after month starts": "{day} después de que comience el mes", + "{day} before month ends": "{day} antes de que termine el mes", + "Every {day} of the month": "Cada {day} del mes", + "Days": "Días", + "Make sure set a day that is likely to be executed": "Asegúrese de establecer un día en el que sea probable que se ejecute", + "Invalid Module provided.": "Módulo proporcionado no válido.", + "The module was \"%s\" was successfully installed.": "El módulo \"%s\" se instaló exitosamente.", + "The modules \"%s\" was deleted successfully.": "Los módulos \"%s\" se eliminaron exitosamente.", + "Unable to locate a module having as identifier \"%s\".": "No se puede localizar un módulo que tenga como identificador \"%s\".", + "All migration were executed.": "Todas las migraciones fueron ejecutadas.", + "Unknown Product Status": "Estado del producto desconocido", + "Member Since": "Miembro desde", + "Total Customers": "Clientes totales", + "The widgets was successfully updated.": "Los widgets se actualizaron correctamente.", + "The token was successfully created": "El token fue creado exitosamente.", + "The token has been successfully deleted.": "El token se ha eliminado correctamente.", + "Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".": "Habilite los servicios en segundo plano para NexoPOS. Actualice para comprobar si la opción ha cambiado a \"Sí\".", + "Will display all cashiers who performs well.": "Mostrará a todos los cajeros que se desempeñen bien.", + "Will display all customers with the highest purchases.": "Mostrará todos los clientes con las compras más altas.", + "Expense Card Widget": "Widget de tarjeta de gastos", + "Will display a card of current and overwall expenses.": "Mostrará una tarjeta de gastos corrientes y generales.", + "Incomplete Sale Card Widget": "Widget de tarjeta de venta incompleta", + "Will display a card of current and overall incomplete sales.": "Mostrará una tarjeta de ventas incompletas actuales y generales.", + "Orders Chart": "Cuadro de pedidos", + "Will display a chart of weekly sales.": "Mostrará un gráfico de ventas semanales.", + "Orders Summary": "Resumen de pedidos", + "Will display a summary of recent sales.": "Mostrará un resumen de las ventas recientes.", + "Will display a profile widget with user stats.": "Mostrará un widget de perfil con estadísticas de usuario.", + "Sale Card Widget": "Widget de tarjeta de venta", + "Will display current and overall sales.": "Mostrará las ventas actuales y generales.", + "Return To Calendar": "Volver al calendario", + "Thr": "tr", + "The left range will be invalid.": "El rango izquierdo no será válido.", + "The right range will be invalid.": "El rango correcto no será válido.", + "Click here to add widgets": "Haga clic aquí para agregar widgets", + "Choose Widget": "Elija el widget", + "Select with widget you want to add to the column.": "Seleccione el widget que desea agregar a la columna.", + "Unamed Tab": "Pestaña sin nombre", + "An error unexpected occured while printing.": "Se produjo un error inesperado durante la impresión.", + "and": "y", + "{date} ago": "{date} hace", + "In {date}": "En {date}", + "An unexpected error occured.": "Se produjo un error inesperado.", + "Warning": "Advertencia", + "Change Type": "Tipo de cambio", + "Save Expense": "Ahorrar gastos", + "No configuration were choosen. Unable to proceed.": "No se eligió ninguna configuración. Incapaces de proceder.", + "Conditions": "Condiciones", + "By proceeding the current for and all your entries will be cleared. Would you like to proceed?": "Al continuar con el formulario actual y se borrarán todas sus entradas. ¿Quieres continuar?", + "No modules matches your search term.": "Ningún módulo coincide con su término de búsqueda.", + "Press \"\/\" to search modules": "Presione \"\/\" para buscar módulos", + "No module has been uploaded yet.": "Aún no se ha subido ningún módulo.", + "{module}": "{módulo}", + "Would you like to delete \"{module}\"? All data created by the module might also be deleted.": "¿Le gustaría eliminar \"{módulo}\"? Es posible que también se eliminen todos los datos creados por el módulo.", + "Search Medias": "Buscar medios", + "Bulk Select": "Selección masiva", + "Press "\/" to search permissions": "Presione "\/" para buscar permisos", + "SKU, Barcode, Name": "SKU, código de barras, nombre", + "About Token": "Acerca del token", + "Save Token": "Guardar ficha", + "Generated Tokens": "Fichas generadas", + "Created": "Creado", + "Last Use": "Último uso", + "Never": "Nunca", + "Expires": "Vence", + "Revoke": "Revocar", + "Token Name": "Nombre del token", + "This will be used to identifier the token.": "Esto se utilizará para identificar el token.", + "Unable to proceed, the form is not valid.": "No se puede continuar, el formulario no es válido.", + "An unexpected error occured": "Ocurrió un error inesperado", + "An Error Has Occured": "Ha ocurrido un error", + "Febuary": "febrero", + "Configure": "Configurar", + "Unable to add the product": "No se puede agregar el producto", + "No result to result match the search value provided.": "Ningún resultado coincide con el valor de búsqueda proporcionado.", + "This QR code is provided to ease authentication on external applications.": "Este código QR se proporciona para facilitar la autenticación en aplicaciones externas.", + "Copy And Close": "Copiar y cerrar", + "An error has occured": "Ha ocurrido un error", + "Recents Orders": "Pedidos recientes", + "Unamed Page": "Página sin nombre", + "Assignation": "Asignación", + "Incoming Conversion": "Conversión entrante", + "Outgoing Conversion": "Conversión saliente", + "Unknown Action": "Acción desconocida", + "Direct Transaction": "Transacción directa", + "Recurring Transaction": "Transacción recurrente", + "Entity Transaction": "Transacción de entidad", + "Scheduled Transaction": "Transacción programada", + "Unknown Type (%s)": "Tipo desconocido (%s)", + "What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.": "¿Cuál es el espacio de nombres del recurso CRUD? por ejemplo: sistema.usuarios? [Q] para dejar de fumar.", + "What is the full model name. eg: App\\Models\\Order ? [Q] to quit.": "¿Cuál es el nombre completo del modelo? por ejemplo: App\\Models\\Order ? [Q] para dejar de fumar.", + "What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.": "¿Cuáles son las columnas que se pueden completar en la tabla: por ejemplo: nombre de usuario, correo electrónico, contraseña? [S] para saltar, [Q] para salir.", + "Unsupported argument provided: \"%s\"": "Argumento no admitido proporcionado: \"%s\"", + "The authorization token can\\'t be changed manually.": "El token de autorización no se puede cambiar manualmente.", + "Translation process is complete for the module %s !": "¡El proceso de traducción está completo para el módulo %s!", + "%s migration(s) has been deleted.": "Se han eliminado %s migraciones.", + "The command has been created for the module \"%s\"!": "¡El comando ha sido creado para el módulo \"%s\"!", + "The controller has been created for the module \"%s\"!": "¡El controlador ha sido creado para el módulo \"%s\"!", + "The event has been created at the following path \"%s\"!": "¡El evento ha sido creado en la siguiente ruta \"%s\"!", + "The listener has been created on the path \"%s\"!": "¡El oyente ha sido creado en la ruta \"%s\"!", + "A request with the same name has been found !": "¡Se ha encontrado una solicitud con el mismo nombre!", + "Unable to find a module having the identifier \"%s\".": "No se puede encontrar un módulo que tenga el identificador \"%s\".", + "Unsupported reset mode.": "Modo de reinicio no compatible.", + "You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.": "No has proporcionado un nombre de archivo válido. No debe contener espacios, puntos ni caracteres especiales.", + "Unable to find a module having \"%s\" as namespace.": "No se puede encontrar un módulo que tenga \"%s\" como espacio de nombres.", + "A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.": "Ya existe un archivo similar en la ruta \"%s\". Utilice \"--force\" para sobrescribirlo.", + "A new form class was created at the path \"%s\"": "Se creó una nueva clase de formulario en la ruta \"%s\"", + "Unable to proceed, looks like the database can\\'t be used.": "No se puede continuar, parece que la base de datos no se puede utilizar.", + "In which language would you like to install NexoPOS ?": "¿En qué idioma le gustaría instalar NexoPOS?", + "You must define the language of installation.": "Debe definir el idioma de instalación.", + "The value above which the current coupon can\\'t apply.": "El valor por encima del cual no se puede aplicar el cupón actual.", + "Unable to save the coupon product as this product doens\\'t exists.": "No se puede guardar el producto del cupón porque este producto no existe.", + "Unable to save the coupon category as this category doens\\'t exists.": "No se puede guardar la categoría de cupón porque esta categoría no existe.", + "Unable to save the coupon as this category doens\\'t exists.": "No se puede guardar el cupón porque esta categoría no existe.", + "You\\re not allowed to do that.": "No tienes permitido hacer eso.", + "Crediting (Add)": "Acreditación (Agregar)", + "Refund (Add)": "Reembolso (Agregar)", + "Deducting (Remove)": "Deducir (eliminar)", + "Payment (Remove)": "Pago (Eliminar)", + "The assigned default customer group doesn\\'t exist or is not defined.": "El grupo de clientes predeterminado asignado no existe o no está definido.", + "Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0": "Determine en porcentaje cuál es el primer pago mínimo de crédito que realizan todos los clientes del grupo, en caso de orden de crédito. Si se deja en \"0", + "You\\'re not allowed to do this operation": "No tienes permiso para realizar esta operación", + "If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.": "Si se hace clic en No, todos los productos asignados a esta categoría o todas las subcategorías no aparecerán en el POS.", + "Convert Unit": "Convertir unidad", + "The unit that is selected for convertion by default.": "La unidad seleccionada para la conversión de forma predeterminada.", + "COGS": "Dientes", + "Used to define the Cost of Goods Sold.": "Se utiliza para definir el costo de los bienes vendidos.", + "Visible": "Visible", + "Define whether the unit is available for sale.": "Defina si la unidad está disponible para la venta.", + "Product unique name. If it\\' variation, it should be relevant for that variation": "Nombre único del producto. Si se trata de una variación, debería ser relevante para esa variación.", + "The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.": "El producto no será visible en la cuadrícula y se recuperará únicamente mediante el lector de códigos de barras o el código de barras asociado.", + "The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.": "El costo de los bienes vendidos se calculará automáticamente en función de la adquisición y la conversión.", + "Auto COGS": "Dientes automáticos", + "Unknown Type: %s": "Tipo desconocido: %s", + "Shortage": "Escasez", + "Overage": "Exceso", + "Transactions List": "Lista de transacciones", + "Display all transactions.": "Mostrar todas las transacciones.", + "No transactions has been registered": "No se han registrado transacciones", + "Add a new transaction": "Agregar una nueva transacción", + "Create a new transaction": "Crear una nueva transacción", + "Register a new transaction and save it.": "Registre una nueva transacción y guárdela.", + "Edit transaction": "Editar transacción", + "Modify Transaction.": "Modificar transacción.", + "Return to Transactions": "Volver a Transacciones", + "determine if the transaction is effective or not. Work for recurring and not recurring transactions.": "determinar si la transacción es efectiva o no. Trabaja para transacciones recurrentes y no recurrentes.", + "Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.": "Asignar transacción al grupo de usuarios. por lo tanto, la Transacción se multiplicará por el número de entidad.", + "Transaction Account": "Cuenta de transacciones", + "Assign the transaction to an account430": "Asignar la transacción a una cuenta430", + "Is the value or the cost of the transaction.": "Es el valor o el costo de la transacción.", + "If set to Yes, the transaction will trigger on defined occurrence.": "Si se establece en Sí, la transacción se activará cuando ocurra algo definido.", + "Define how often this transaction occurs": "Definir con qué frecuencia ocurre esta transacción", + "Define what is the type of the transactions.": "Definir cuál es el tipo de transacciones.", + "Trigger": "Desencadenar", + "Would you like to trigger this expense now?": "¿Le gustaría activar este gasto ahora?", + "Transactions History List": "Lista de historial de transacciones", + "Display all transaction history.": "Muestra todo el historial de transacciones.", + "No transaction history has been registered": "No se ha registrado ningún historial de transacciones", + "Add a new transaction history": "Agregar un nuevo historial de transacciones", + "Create a new transaction history": "Crear un nuevo historial de transacciones", + "Register a new transaction history and save it.": "Registre un nuevo historial de transacciones y guárdelo.", + "Edit transaction history": "Editar historial de transacciones", + "Modify Transactions history.": "Modificar el historial de transacciones.", + "Return to Transactions History": "Volver al historial de transacciones", + "Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.": "Proporcione un valor único para esta unidad. Puede estar compuesto por un nombre, pero no debe incluir espacios ni caracteres especiales.", + "Set the limit that can\\'t be exceeded by the user.": "Establezca el límite que el usuario no puede superar.", + "Oops, We\\'re Sorry!!!": "¡¡¡Ups, lo sentimos!!!", + "Class: %s": "Clase: %s", + "There\\'s is mismatch with the core version.": "No coincide con la versión principal.", + "You\\'re not authenticated.": "No estás autenticado.", + "An error occured while performing your request.": "Se produjo un error al realizar su solicitud.", + "A mismatch has occured between a module and it\\'s dependency.": "Se ha producido una discrepancia entre un módulo y su dependencia.", + "You\\'re not allowed to see that page.": "No tienes permiso para ver esa página.", + "Post Too Large": "Publicación demasiado grande", + "The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini": "La solicitud enviada es más grande de lo esperado. Considere aumentar su \"post_max_size\" en su PHP.ini", + "This field does\\'nt have a valid value.": "Este campo no tiene un valor válido.", + "Describe the direct transaction.": "Describe la transacción directa.", + "If set to yes, the transaction will take effect immediately and be saved on the history.": "Si se establece en sí, la transacción entrará en vigor inmediatamente y se guardará en el historial.", + "Assign the transaction to an account.": "Asigne la transacción a una cuenta.", + "set the value of the transaction.": "establecer el valor de la transacción.", + "Further details on the transaction.": "Más detalles sobre la transacción.", + "Describe the direct transactions.": "Describa las transacciones directas.", + "set the value of the transactions.": "establecer el valor de las transacciones.", + "The transactions will be multipled by the number of user having that role.": "Las transacciones se multiplicarán por la cantidad de usuarios que tengan ese rol.", + "Create Sales (needs Procurements)": "Crear ventas (necesita adquisiciones)", + "Set when the transaction should be executed.": "Establezca cuándo se debe ejecutar la transacción.", + "The addresses were successfully updated.": "Las direcciones se actualizaron correctamente.", + "Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.": "Determinar cuál es el valor real de la adquisición. Una vez \"Entregado\", el estado no se puede cambiar y el stock se actualizará.", + "The register doesn\\'t have an history.": "La caja registradora no tiene historial.", + "Unable to check a register session history if it\\'s closed.": "No se puede verificar el historial de una sesión de registro si está cerrada.", + "Register History For : %s": "Historial de registro para: %s", + "Can\\'t delete a category having sub categories linked to it.": "No se puede eliminar una categoría que tenga subcategorías vinculadas.", + "Unable to proceed. The request doesn\\'t provide enough data which could be handled": "Incapaces de proceder. La solicitud no proporciona suficientes datos que puedan procesarse.", + "Unable to load the CRUD resource : %s.": "No se puede cargar el recurso CRUD: %s.", + "Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods": "No se pueden recuperar elementos. El recurso CRUD actual no implementa métodos \"getEntries\"", + "The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.": "La clase \"%s\" no está definida. ¿Existe esa clase asquerosa? Asegúrese de haber registrado la instancia si es el caso.", + "The crud columns exceed the maximum column that can be exported (27)": "Las columnas crudas exceden la columna máxima que se puede exportar (27)", + "This link has expired.": "Este enlace ha caducado.", + "Account History : %s": "Historial de cuenta: %s", + "Welcome — %s": "Bienvenido: %s", + "Upload and manage medias (photos).": "Cargar y administrar medios (fotos).", + "The product which id is %s doesnt\\'t belong to the procurement which id is %s": "El producto cuyo id es %s no pertenece a la adquisición cuyo id es %s", + "The refresh process has started. You\\'ll get informed once it\\'s complete.": "El proceso de actualización ha comenzado. Se le informará una vez que esté completo.", + "The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".": "La variación no se ha eliminado porque es posible que no exista o no esté asignada al producto principal \"%s\".", + "Stock History For %s": "Historial de acciones para %s", + "Set": "Colocar", + "The unit is not set for the product \"%s\".": "La unidad no está configurada para el producto \"%s\".", + "The operation will cause a negative stock for the product \"%s\" (%s).": "La operación provocará un stock negativo para el producto \"%s\" (%s).", + "The adjustment quantity can\\'t be negative for the product \"%s\" (%s)": "La cantidad de ajuste no puede ser negativa para el producto \"%s\" (%s)", + "%s\\'s Products": "Productos de %s\\", + "Transactions Report": "Informe de transacciones", + "Combined Report": "Informe combinado", + "Provides a combined report for every transactions on products.": "Proporciona un informe combinado para cada transacción de productos.", + "Unable to initiallize the settings page. The identifier \"' . $identifier . '": "No se puede inicializar la página de configuración. El identificador \"' . $identificador . '", + "Shows all histories generated by the transaction.": "Muestra todos los historiales generados por la transacción.", + "Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.": "No se pueden utilizar transacciones programadas, recurrentes y de entidad porque las colas no están configuradas correctamente.", + "Create New Transaction": "Crear nueva transacción", + "Set direct, scheduled transactions.": "Establezca transacciones directas y programadas.", + "Update Transaction": "Actualizar transacción", + "The provided data aren\\'t valid": "Los datos proporcionados no son válidos.", + "Welcome — NexoPOS": "Bienvenido: NexoPOS", + "You\\'re not allowed to see this page.": "No tienes permiso para ver esta página.", + "Your don\\'t have enough permission to perform this action.": "No tienes permiso suficiente para realizar esta acción.", + "You don\\'t have the necessary role to see this page.": "No tienes el rol necesario para ver esta página.", + "%s product(s) has low stock. Reorder those product(s) before it get exhausted.": "%s productos tienen pocas existencias. Vuelva a pedir esos productos antes de que se agoten.", + "Scheduled Transactions": "Transacciones programadas", + "the transaction \"%s\" was executed as scheduled on %s.": "la transacción \"%s\" se ejecutó según lo programado el %s.", + "Workers Aren\\'t Running": "Los trabajadores no están corriendo", + "The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.": "Los trabajadores se han habilitado, pero parece que NexoPOS no puede ejecutar trabajadores. Esto suele suceder si el supervisor no está configurado correctamente.", + "Unable to remove the permissions \"%s\". It doesn\\'t exists.": "No se pueden eliminar los permisos \"%s\". No existe.", + "Unable to open \"%s\" *, as it\\'s not closed.": "No se puede abrir \"%s\" * porque no está cerrado.", + "Unable to open \"%s\" *, as it\\'s not opened.": "No se puede abrir \"%s\" * porque no está abierto.", + "Unable to cashing on \"%s\" *, as it\\'s not opened.": "No se puede cobrar \"%s\" *, ya que no está abierto.", + "Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.": "No hay fondos suficientes para eliminar una venta de \"%s\". Si se retiraron o desembolsaron fondos, considere agregar algo de efectivo (%s) a la caja registradora.", + "Unable to cashout on \"%s": "No se puede retirar dinero en \"%s", + "Symbolic Links Missing": "Faltan enlaces simbólicos", + "The Symbolic Links to the public directory is missing. Your medias might be broken and not display.": "Faltan los enlaces simbólicos al directorio público. Es posible que sus medios estén rotos y no se muestren.", + "Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.": "Las tareas cron no están configuradas correctamente en NexoPOS. Esto podría restringir las funciones necesarias. Presiona aquí para aprender cómo arreglarlo.", + "The requested module %s cannot be found.": "No se puede encontrar el módulo solicitado %s.", + "The manifest.json can\\'t be located inside the module %s on the path: %s": "El manifest.json no se puede ubicar dentro del módulo %s en la ruta: %s", + "the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.": "el archivo solicitado \"%s\" no se puede ubicar dentro del manifest.json para el módulo %s.", + "Sorting is explicitely disabled for the column \"%s\".": "La clasificación está explícitamente deshabilitada para la columna \"%s\".", + "Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s": "No se puede eliminar \"%s\" ya que es una dependencia de \"%s\"%s", + "Unable to find the customer using the provided id %s.": "No se puede encontrar al cliente utilizando la identificación proporcionada %s.", + "Not enough credits on the customer account. Requested : %s, Remaining: %s.": "No hay suficientes créditos en la cuenta del cliente. Solicitado: %s, Restante: %s.", + "The customer account doesn\\'t have enough funds to proceed.": "La cuenta del cliente no tiene fondos suficientes para continuar.", + "Unable to find a reference to the attached coupon : %s": "No se puede encontrar una referencia al cupón adjunto: %s", + "You\\'re not allowed to use this coupon as it\\'s no longer active": "No puedes utilizar este cupón porque ya no está activo", + "You\\'re not allowed to use this coupon it has reached the maximum usage allowed.": "No puedes utilizar este cupón ya que ha alcanzado el uso máximo permitido.", + "Terminal A": "Terminal A", + "Terminal B": "Terminal B", + "%s link were deleted": "%s enlaces fueron eliminados", + "Unable to execute the following class callback string : %s": "No se puede ejecutar la siguiente cadena de devolución de llamada de clase: %s", + "%s — %s": "%s: %s", + "Transactions": "Actas", + "Create Transaction": "Crear transacción", + "Stock History": "Historial de acciones", + "Invoices": "Facturas", + "Failed to parse the configuration file on the following path \"%s\"": "No se pudo analizar el archivo de configuración en la siguiente ruta \"%s\"", + "No config.xml has been found on the directory : %s. This folder is ignored": "No se ha encontrado ningún config.xml en el directorio: %s. Esta carpeta se ignora", + "The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ": "El módulo \"%s\" ha sido deshabilitado ya que no es compatible con la versión actual de NexoPOS %s, pero requiere %s.", + "Unable to upload this module as it\\'s older than the version installed": "No se puede cargar este módulo porque es anterior a la versión instalada", + "The migration file doens\\'t have a valid class name. Expected class : %s": "El archivo de migración no tiene un nombre de clase válido. Clase esperada: %s", + "Unable to locate the following file : %s": "No se puede localizar el siguiente archivo: %s", + "The migration file doens\\'t have a valid method name. Expected method : %s": "El archivo de migración no tiene un nombre de método válido. Método esperado: %s", + "The module %s cannot be enabled as his dependency (%s) is missing or not enabled.": "El módulo %s no se puede habilitar porque su dependencia (%s) falta o no está habilitada.", + "The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.": "El módulo %s no se puede habilitar porque sus dependencias (%s) faltan o no están habilitadas.", + "An Error Occurred \"%s\": %s": "Se produjo un error \"%s\": %s", + "The order has been updated": "El pedido ha sido actualizado.", + "The minimal payment of %s has\\'nt been provided.": "No se ha realizado el pago mínimo de %s.", + "Unable to proceed as the order is already paid.": "No se puede continuar porque el pedido ya está pagado.", + "The customer account funds are\\'nt enough to process the payment.": "Los fondos de la cuenta del cliente no son suficientes para procesar el pago.", + "Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.": "Incapaces de proceder. No se permiten pedidos parcialmente pagados. Esta opción se puede cambiar en la configuración.", + "Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.": "Incapaces de proceder. No se permiten pedidos impagos. Esta opción se puede cambiar en la configuración.", + "By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.": "Al proceder con este pedido, el cliente excederá el crédito máximo permitido para su cuenta: %s.", + "You\\'re not allowed to make payments.": "No tienes permitido realizar pagos.", + "Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s": "No se puede continuar, no hay suficiente stock para %s que usa la unidad %s. Solicitado: %s, disponible %s", + "Unknown Status (%s)": "Estado desconocido (%s)", + "%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.": "%s pedidos impagos o parcialmente pagados han vencido. Esto ocurre si no se ha completado ninguno antes de la fecha de pago prevista.", + "Unable to find a reference of the provided coupon : %s": "No se puede encontrar una referencia del cupón proporcionado: %s", + "The procurement has been deleted. %s included stock record(s) has been deleted as well.": "La contratación ha sido eliminada. También se han eliminado %s registros de existencias incluidos.", + "Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.": "No se puede eliminar la adquisición porque no queda suficiente stock para \"%s\" en la unidad \"%s\". Esto probablemente significa que el recuento de existencias ha cambiado con una venta o un ajuste después de que se haya almacenado la adquisición.", + "Unable to find the product using the provided id \"%s\"": "No se puede encontrar el producto utilizando el ID proporcionado \"%s\"", + "Unable to procure the product \"%s\" as the stock management is disabled.": "No se puede adquirir el producto \"%s\" porque la gestión de existencias está deshabilitada.", + "Unable to procure the product \"%s\" as it is a grouped product.": "No se puede adquirir el producto \"%s\" ya que es un producto agrupado.", + "The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item": "La unidad utilizada para el producto %s no pertenece al grupo de unidades asignado al artículo", + "%s procurement(s) has recently been automatically procured.": "%s adquisiciones se han adquirido automáticamente recientemente.", + "The requested category doesn\\'t exists": "La categoría solicitada no existe", + "The category to which the product is attached doesn\\'t exists or has been deleted": "La categoría a la que está adscrito el producto no existe o ha sido eliminada", + "Unable to create a product with an unknow type : %s": "No se puede crear un producto con un tipo desconocido: %s", + "A variation within the product has a barcode which is already in use : %s.": "Una variación dentro del producto tiene un código de barras que ya está en uso: %s.", + "A variation within the product has a SKU which is already in use : %s": "Una variación dentro del producto tiene un SKU que ya está en uso: %s", + "Unable to edit a product with an unknown type : %s": "No se puede editar un producto con un tipo desconocido: %s", + "The requested sub item doesn\\'t exists.": "El subelemento solicitado no existe.", + "One of the provided product variation doesn\\'t include an identifier.": "Una de las variaciones de producto proporcionadas no incluye un identificador.", + "The product\\'s unit quantity has been updated.": "Se ha actualizado la cantidad unitaria del producto.", + "Unable to reset this variable product \"%s": "No se puede restablecer esta variable producto \"%s", + "Adjusting grouped product inventory must result of a create, update, delete sale operation.": "El ajuste del inventario de productos agrupados debe ser el resultado de una operación de creación, actualización y eliminación de venta.", + "Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).": "No se puede continuar, esta acción provocará stock negativo (%s). Cantidad anterior: (%s), Cantidad: (%s).", + "Unsupported stock action \"%s\"": "Acción bursátil no admitida \"%s\"", + "%s product(s) has been deleted.": "Se han eliminado %s productos.", + "%s products(s) has been deleted.": "Se han eliminado %s productos.", + "Unable to find the product, as the argument \"%s\" which value is \"%s": "No se puede encontrar el producto, ya que el argumento \"%s\" cuyo valor es \"%s", + "You cannot convert unit on a product having stock management disabled.": "No se pueden convertir unidades en un producto que tiene la gestión de stock deshabilitada.", + "The source and the destination unit can\\'t be the same. What are you trying to do ?": "La unidad de origen y de destino no pueden ser las mismas. Que estás tratando de hacer ?", + "There is no source unit quantity having the name \"%s\" for the item %s": "No hay ninguna cantidad unitaria de origen con el nombre \"%s\" para el artículo %s", + "There is no destination unit quantity having the name %s for the item %s": "No hay ninguna cantidad unitaria de destino con el nombre %s para el artículo %s", + "The source unit and the destination unit doens\\'t belong to the same unit group.": "La unidad de origen y la unidad de destino no pertenecen al mismo grupo de unidades.", + "The group %s has no base unit defined": "El grupo %s no tiene unidad base definida", + "The conversion of %s(%s) to %s(%s) was successful": "La conversión de %s(%s) a %s(%s) fue exitosa", + "The product has been deleted.": "El producto ha sido eliminado.", + "An error occurred: %s.": "Ocurrió un error: %s.", + "A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.": "Recientemente se detectó una operación de stock, sin embargo NexoPOS no pudo actualizar el informe en consecuencia. Esto ocurre si no se ha creado la referencia diaria del panel.", + "Today\\'s Orders": "Pedidos de hoy", + "Today\\'s Sales": "Ventas de hoy", + "Today\\'s Refunds": "Reembolsos de hoy", + "Today\\'s Customers": "Los clientes de hoy", + "The report will be generated. Try loading the report within few minutes.": "Se generará el informe. Intente cargar el informe en unos minutos.", + "The database has been wiped out.": "La base de datos ha sido eliminada.", + "No custom handler for the reset \"' . $mode . '\"": "No hay un controlador personalizado para el reinicio \"' . $mode . '\"", + "Unable to proceed. The parent tax doesn\\'t exists.": "Incapaces de proceder. El impuesto matriz no existe.", + "A simple tax must not be assigned to a parent tax with the type \"simple": "Un impuesto simple no debe asignarse a un impuesto matriz del tipo \"simple", + "Created via tests": "Creado a través de pruebas", + "The transaction has been successfully saved.": "La transacción se ha guardado correctamente.", + "The transaction has been successfully updated.": "La transacción se ha actualizado correctamente.", + "Unable to find the transaction using the provided identifier.": "No se puede encontrar la transacción utilizando el identificador proporcionado.", + "Unable to find the requested transaction using the provided id.": "No se puede encontrar la transacción solicitada utilizando la identificación proporcionada.", + "The transction has been correctly deleted.": "La transacción se ha eliminado correctamente.", + "You cannot delete an account which has transactions bound.": "No puede eliminar una cuenta que tenga transacciones vinculadas.", + "The transaction account has been deleted.": "La cuenta de transacciones ha sido eliminada.", + "Unable to find the transaction account using the provided ID.": "No se puede encontrar la cuenta de transacción utilizando la identificación proporcionada.", + "The transaction account has been updated.": "La cuenta de transacciones ha sido actualizada.", + "This transaction type can\\'t be triggered.": "Este tipo de transacción no se puede activar.", + "The transaction has been successfully triggered.": "La transacción se ha activado con éxito.", + "The transaction \"%s\" has been processed on day \"%s\".": "La transacción \"%s\" ha sido procesada el día \"%s\".", + "The transaction \"%s\" has already been processed.": "La transacción \"%s\" ya ha sido procesada.", + "The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.": "La transacción \"%s\" no ha sido procesada ya que está desactualizada.", + "The process has been correctly executed and all transactions has been processed.": "El proceso se ha ejecutado correctamente y se han procesado todas las transacciones.", + "The process has been executed with some failures. %s\/%s process(es) has successed.": "El proceso se ha ejecutado con algunos fallos. %s\/%s proceso(s) han tenido éxito.", + "Procurement : %s": "Adquisiciones: %s", + "Procurement Liability : %s": "Responsabilidad de adquisiciones: %s", + "Refunding : %s": "Reembolso: %s", + "Spoiled Good : %s": "Bien estropeado: %s", + "Sale : %s": "Ventas", + "Liabilities Account": "Cuenta de pasivos", + "Not found account type: %s": "Tipo de cuenta no encontrada: %s", + "Refund : %s": "Reembolso: %s", + "Customer Account Crediting : %s": "Abono de cuenta de cliente: %s", + "Customer Account Purchase : %s": "Compra de cuenta de cliente: %s", + "Customer Account Deducting : %s": "Deducción de cuenta de cliente: %s", + "Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.": "Algunas transacciones están deshabilitadas porque NexoPOS no puede realizar solicitudes asincrónicas<\/a>.", + "The unit group %s doesn\\'t have a base unit": "El grupo de unidades %s no tiene una unidad base", + "The system role \"Users\" can be retrieved.": "Se puede recuperar la función del sistema \"Usuarios\".", + "The default role that must be assigned to new users cannot be retrieved.": "No se puede recuperar el rol predeterminado que se debe asignar a los nuevos usuarios.", + "%s Second(s)": "%s segundo(s)", + "Configure the accounting feature": "Configurar la función de contabilidad", + "Define the symbol that indicate thousand. By default ": "Defina el símbolo que indica mil. Por defecto", + "Date Time Format": "Formato de fecha y hora", + "This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".": "Esto define cómo se deben formatear la fecha y la hora. El formato predeterminado es \"Y-m-d H:i\".", + "Date TimeZone": "Fecha Zona horaria", + "Determine the default timezone of the store. Current Time: %s": "Determine la zona horaria predeterminada de la tienda. Hora actual: %s", + "Configure how invoice and receipts are used.": "Configure cómo se utilizan las facturas y los recibos.", + "configure settings that applies to orders.": "configurar los ajustes que se aplican a los pedidos.", + "Report Settings": "Configuración de informes", + "Configure the settings": "Configurar los ajustes", + "Wipes and Reset the database.": "Limpia y reinicia la base de datos.", + "Supply Delivery": "Entrega de suministros", + "Configure the delivery feature.": "Configure la función de entrega.", + "Configure how background operations works.": "Configure cómo funcionan las operaciones en segundo plano.", + "Every procurement will be added to the selected transaction account": "Cada adquisición se agregará a la cuenta de transacción seleccionada.", + "Every sales will be added to the selected transaction account": "Cada venta se agregará a la cuenta de transacción seleccionada.", + "Customer Credit Account (crediting)": "Cuenta de crédito del cliente (acreditación)", + "Every customer credit will be added to the selected transaction account": "Cada crédito del cliente se agregará a la cuenta de transacción seleccionada", + "Customer Credit Account (debitting)": "Cuenta de crédito del cliente (débito)", + "Every customer credit removed will be added to the selected transaction account": "Cada crédito de cliente eliminado se agregará a la cuenta de transacción seleccionada", + "Sales refunds will be attached to this transaction account": "Los reembolsos de ventas se adjuntarán a esta cuenta de transacción.", + "Stock Return Account (Spoiled Items)": "Cuenta de devolución de existencias (artículos estropeados)", + "Disbursement (cash register)": "Desembolso (caja registradora)", + "Transaction account for all cash disbursement.": "Cuenta de transacciones para todos los desembolsos de efectivo.", + "Liabilities": "Pasivo", + "Transaction account for all liabilities.": "Cuenta de transacciones para todos los pasivos.", + "You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.": "Debes crear un cliente al que se le atribuyen cada venta cuando el cliente ambulante no se registra.", + "Show Tax Breakdown": "Mostrar desglose de impuestos", + "Will display the tax breakdown on the receipt\/invoice.": "Mostrará el desglose de impuestos en el recibo/factura.", + "Available tags : ": "Etiquetas disponibles:", + "{store_name}: displays the store name.": "{store_name}: muestra el nombre de la tienda.", + "{store_email}: displays the store email.": "{store_email}: muestra el correo electrónico de la tienda.", + "{store_phone}: displays the store phone number.": "{store_phone}: muestra el número de teléfono de la tienda.", + "{cashier_name}: displays the cashier name.": "{cashier_name}: muestra el nombre del cajero.", + "{cashier_id}: displays the cashier id.": "{cashier_id}: muestra la identificación del cajero.", + "{order_code}: displays the order code.": "{order_code}: muestra el código del pedido.", + "{order_date}: displays the order date.": "{order_date}: muestra la fecha del pedido.", + "{order_type}: displays the order type.": "{order_type}: muestra el tipo de orden.", + "{customer_email}: displays the customer email.": "{customer_email}: muestra el correo electrónico del cliente.", + "{shipping_first_name}: displays the shipping first name.": "{shipping_first_name}: muestra el nombre del envío.", + "{shipping_last_name}: displays the shipping last name.": "{shipping_last_name}: muestra el apellido de envío.", + "{shipping_phone}: displays the shipping phone.": "{shipping_phone}: muestra el teléfono de envío.", + "{shipping_address_1}: displays the shipping address_1.": "{shipping_address_1}: muestra la dirección de envío_1.", + "{shipping_address_2}: displays the shipping address_2.": "{shipping_address_2}: muestra la dirección de envío_2.", + "{shipping_country}: displays the shipping country.": "{shipping_country}: muestra el país de envío.", + "{shipping_city}: displays the shipping city.": "{shipping_city}: muestra la ciudad de envío.", + "{shipping_pobox}: displays the shipping pobox.": "{shipping_pobox}: muestra el pobox de envío.", + "{shipping_company}: displays the shipping company.": "{shipping_company}: muestra la empresa de envío.", + "{shipping_email}: displays the shipping email.": "{shipping_email}: muestra el correo electrónico de envío.", + "{billing_first_name}: displays the billing first name.": "{billing_first_name}: muestra el nombre de facturación.", + "{billing_last_name}: displays the billing last name.": "{billing_last_name}: muestra el apellido de facturación.", + "{billing_phone}: displays the billing phone.": "{billing_phone}: muestra el teléfono de facturación.", + "{billing_address_1}: displays the billing address_1.": "{billing_address_1}: muestra la dirección de facturación_1.", + "{billing_address_2}: displays the billing address_2.": "{billing_address_2}: muestra la dirección de facturación_2.", + "{billing_country}: displays the billing country.": "{billing_country}: muestra el país de facturación.", + "{billing_city}: displays the billing city.": "{billing_city}: muestra la ciudad de facturación.", + "{billing_pobox}: displays the billing pobox.": "{billing_pobox}: muestra el pobox de facturación.", + "{billing_company}: displays the billing company.": "{billing_company}: muestra la empresa de facturación.", + "{billing_email}: displays the billing email.": "{billing_email}: muestra el correo electrónico de facturación.", + "Available tags :": "Etiquetas disponibles:", + "Quick Product Default Unit": "Unidad predeterminada del producto rápido", + "Set what unit is assigned by default to all quick product.": "Establezca qué unidad se asigna de forma predeterminada a todos los productos rápidos.", + "Hide Exhausted Products": "Ocultar productos agotados", + "Will hide exhausted products from selection on the POS.": "Ocultará los productos agotados de la selección en el POS.", + "Hide Empty Category": "Ocultar categoría vacía", + "Category with no or exhausted products will be hidden from selection.": "La categoría sin productos o sin productos agotados se ocultará de la selección.", + "Default Printing (web)": "Impresión predeterminada (web)", + "The amount numbers shortcuts separated with a \"|\".": "La cantidad numera los atajos separados por \"|\".", + "No submit URL was provided": "No se proporcionó ninguna URL de envío", + "Sorting is explicitely disabled on this column": "La clasificación está explícitamente deshabilitada en esta columna", + "An unpexpected error occured while using the widget.": "Se produjo un error inesperado al usar el widget.", + "This field must be similar to \"{other}\"\"": "Este campo debe ser similar a \"{other}\"\"", + "This field must have at least \"{length}\" characters\"": "Este campo debe tener al menos \"{length}\" caracteres\"", + "This field must have at most \"{length}\" characters\"": "Este campo debe tener como máximo \"{length}\" caracteres\"", + "This field must be different from \"{other}\"\"": "Este campo debe ser diferente de \"{other}\"\"", + "Search result": "Resultado de búsqueda", + "Choose...": "Elegir...", + "The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.": "El componente ${field.component} no se puede cargar. Asegúrese de que esté inyectado en el objeto nsExtraComponents.", + "+{count} other": "+{count} otro", + "The selected print gateway doesn't support this type of printing.": "La puerta de enlace de impresión seleccionada no admite este tipo de impresión.", + "millisecond| second| minute| hour| day| week| month| year| decade| century| millennium": "milisegundo| segundo| minuto| hora| día| semana| mes| año| década | siglo| milenio", + "milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia": "milisegundos| segundos| minutos| horas| días| semanas| meses| años| décadas| siglos| milenios", + "An error occured": "Ocurrió un error", + "You\\'re about to delete selected resources. Would you like to proceed?": "Estás a punto de eliminar los recursos seleccionados. ¿Quieres continuar?", + "See Error": "Ver error", + "Your uploaded files will displays here.": "Los archivos cargados se mostrarán aquí.", + "Nothing to care about !": "Nothing to care about !", + "Would you like to bulk edit a system role ?": "¿Le gustaría editar de forma masiva una función del sistema?", + "Total :": "Total :", + "Remaining :": "Restante :", + "Instalments:": "Cuotas:", + "This instalment doesn\\'t have any payment attached.": "Esta cuota no tiene ningún pago adjunto.", + "You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?": "Realiza un pago por {quantity}. Un pago no se puede cancelar. ¿Quieres continuar?", + "An error has occured while seleting the payment gateway.": "Se ha producido un error al seleccionar la pasarela de pago.", + "You're not allowed to add a discount on the product.": "No se le permite agregar un descuento en el producto.", + "You're not allowed to add a discount on the cart.": "No puedes agregar un descuento en el carrito.", + "Cash Register : {register}": "Caja registradora: {register}", + "The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?": "Se borrará el pedido actual. Pero no se elimina si es persistente. ¿Quieres continuar?", + "You don't have the right to edit the purchase price.": "No tienes derecho a editar el precio de compra.", + "Dynamic product can\\'t have their price updated.": "El precio del producto dinámico no se puede actualizar.", + "You\\'re not allowed to edit the order settings.": "No tienes permiso para editar la configuración del pedido.", + "Looks like there is either no products and no categories. How about creating those first to get started ?": "Parece que no hay productos ni categorías. ¿Qué tal si los creamos primero para comenzar?", + "Create Categories": "Crear categorías", + "You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?": "Estás a punto de utilizar {amount} de la cuenta del cliente para realizar un pago. ¿Quieres continuar?", + "An unexpected error has occured while loading the form. Please check the log or contact the support.": "Se ha producido un error inesperado al cargar el formulario. Por favor revise el registro o comuníquese con el soporte.", + "We were not able to load the units. Make sure there are units attached on the unit group selected.": "No pudimos cargar las unidades. Asegúrese de que haya unidades adjuntas al grupo de unidades seleccionado.", + "The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?": "La unidad actual que está a punto de eliminar tiene una referencia en la base de datos y es posible que ya haya adquirido stock. Eliminar esa referencia eliminará el stock adquirido. ¿Continuarías?", + "There shoulnd\\'t be more option than there are units.": "No debería haber más opciones que unidades.", + "Either Selling or Purchase unit isn\\'t defined. Unable to proceed.": "La unidad de venta o de compra no está definida. Incapaces de proceder.", + "Select the procured unit first before selecting the conversion unit.": "Seleccione primero la unidad adquirida antes de seleccionar la unidad de conversión.", + "Convert to unit": "Convertir a unidad", + "An unexpected error has occured": "Un error inesperado ha ocurrido", + "Unable to add product which doesn\\'t unit quantities defined.": "No se puede agregar un producto que no tenga cantidades unitarias definidas.", + "{product}: Purchase Unit": "{producto}: Unidad de compra", + "The product will be procured on that unit.": "El producto se adquirirá en esa unidad.", + "Unkown Unit": "Unidad desconocida", + "Choose Tax": "Elija Impuesto", + "The tax will be assigned to the procured product.": "El impuesto se asignará al producto adquirido.", + "Show Details": "Mostrar detalles", + "Hide Details": "Ocultar detalles", + "Important Notes": "Notas importantes", + "Stock Management Products.": "Productos de gestión de stock.", + "Doesn\\'t work with Grouped Product.": "No funciona con productos agrupados.", + "Convert": "Convertir", + "Looks like no valid products matched the searched term.": "Parece que ningún producto válido coincide con el término buscado.", + "This product doesn't have any stock to adjust.": "Este producto no tiene stock para ajustar.", + "Select Unit": "Seleccionar unidad", + "Select the unit that you want to adjust the stock with.": "Seleccione la unidad con la que desea ajustar el stock.", + "A similar product with the same unit already exists.": "Ya existe un producto similar con la misma unidad.", + "Select Procurement": "Seleccionar Adquisición", + "Select the procurement that you want to adjust the stock with.": "Seleccione el aprovisionamiento con el que desea ajustar el stock.", + "Select Action": "Seleccione la acción", + "Select the action that you want to perform on the stock.": "Seleccione la acción que desea realizar en la acción.", + "Would you like to remove the selected products from the table ?": "¿Le gustaría eliminar los productos seleccionados de la tabla?", + "Unit:": "Unidad:", + "Operation:": "Operación:", + "Procurement:": "Obtención:", + "Reason:": "Razón:", + "Provided": "Proporcionó", + "Not Provided": "No provisto", + "Remove Selected": "Eliminar selección", + "Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.": "Los tokens se utilizan para proporcionar un acceso seguro a los recursos de NexoPOS sin tener que compartir su nombre de usuario y contraseña personales.\n Una vez generados, no caducan hasta que los revoque explícitamente.", + "You haven\\'t yet generated any token for your account. Create one to get started.": "Aún no has generado ningún token para tu cuenta. Crea uno para comenzar.", + "You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?": "Estás a punto de eliminar un token que podría estar siendo utilizado por una aplicación externa. La eliminación evitará que esa aplicación acceda a la API. ¿Quieres continuar?", + "Date Range : {date1} - {date2}": "Rango de fechas: {date1} - {date2}", + "Document : Best Products": "Documento : Mejores Productos", + "By : {user}": "Por: {usuario}", + "Range : {date1} — {date2}": "Rango: {date1} - {date2}", + "Document : Sale By Payment": "Documento : Venta Por Pago", + "Document : Customer Statement": "Documento : Declaración del Cliente", + "Customer : {selectedCustomerName}": "Cliente: {selectedCustomerName}", + "All Categories": "todas las categorias", + "All Units": "Todas las unidades", + "Date : {date}": "Fecha: {date}", + "Document : {reportTypeName}": "Documento: {reportTypeName}", + "Threshold": "Límite", + "Select Units": "Seleccionar unidades", + "An error has occured while loading the units.": "Ha ocurrido un error al cargar las unidades.", + "An error has occured while loading the categories.": "Ha ocurrido un error al cargar las categorías.", + "Document : Payment Type": "Documento: Tipo de pago", + "Document : Profit Report": "Documento: Informe de ganancias", + "Filter by Category": "Filtrar por categoría", + "Filter by Units": "Filtrar por Unidades", + "An error has occured while loading the categories": "Ha ocurrido un error al cargar las categorías.", + "An error has occured while loading the units": "Ha ocurrido un error al cargar las unidades.", + "By Type": "Por tipo", + "By User": "Por usuario", + "By Category": "Por categoria", + "All Category": "Toda la categoría", + "Document : Sale Report": "Documento : Informe de Venta", + "Filter By Category": "Filtrar por categoría", + "Allow you to choose the category.": "Le permite elegir la categoría.", + "No category was found for proceeding the filtering.": "No se encontró ninguna categoría para proceder al filtrado.", + "Document : Sold Stock Report": "Documento: Informe de stock vendido", + "Filter by Unit": "Filtrar por unidad", + "Limit Results By Categories": "Limitar resultados por categorías", + "Limit Results By Units": "Limitar resultados por unidades", + "Generate Report": "Generar informe", + "Document : Combined Products History": "Documento: Historia de productos combinados", + "Ini. Qty": "Iní. Cantidad", + "Added Quantity": "Cantidad agregada", + "Add. Qty": "Agregar. Cantidad", + "Sold Quantity": "Cantidad vendida", + "Sold Qty": "Cantidad vendida", + "Defective Quantity": "Cantidad defectuosa", + "Defec. Qty": "Defec. Cantidad", + "Final Quantity": "Cantidad final", + "Final Qty": "Cantidad final", + "No data available": "Datos no disponibles", + "Document : Yearly Report": "Documento : Informe Anual", + "The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.": "El informe se calculará para el año en curso, se enviará un trabajo y se le informará una vez que se haya completado.", + "Unable to edit this transaction": "No se puede editar esta transacción", + "This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.": "Esta transacción se creó con un tipo que ya no está disponible. Este tipo ya no está disponible porque NexoPOS no puede realizar solicitudes en segundo plano.", + "Save Transaction": "Guardar transacción", + "While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.": "Al seleccionar la transacción de la entidad, el monto definido se multiplicará por el usuario total asignado al grupo de usuarios seleccionado.", + "The transaction is about to be saved. Would you like to confirm your action ?": "La transacción está a punto de guardarse. ¿Quieres confirmar tu acción?", + "Unable to load the transaction": "No se puede cargar la transacción", + "You cannot edit this transaction if NexoPOS cannot perform background requests.": "No puede editar esta transacción si NexoPOS no puede realizar solicitudes en segundo plano.", + "MySQL is selected as database driver": "MySQL está seleccionado como controlador de base de datos", + "Please provide the credentials to ensure NexoPOS can connect to the database.": "Proporcione las credenciales para garantizar que NexoPOS pueda conectarse a la base de datos.", + "Sqlite is selected as database driver": "Sqlite está seleccionado como controlador de base de datos", + "Make sure Sqlite module is available for PHP. Your database will be located on the database directory.": "Asegúrese de que el módulo Sqlite esté disponible para PHP. Su base de datos estará ubicada en el directorio de la base de datos.", + "Checking database connectivity...": "Comprobando la conectividad de la base de datos...", + "Driver": "Conductor", + "Set the database driver": "Configurar el controlador de la base de datos", + "Hostname": "Nombre de host", + "Provide the database hostname": "Proporcione el nombre de host de la base de datos", + "Username required to connect to the database.": "Nombre de usuario requerido para conectarse a la base de datos.", + "The username password required to connect.": "El nombre de usuario y la contraseña necesarios para conectarse.", + "Database Name": "Nombre de la base de datos", + "Provide the database name. Leave empty to use default file for SQLite Driver.": "Proporcione el nombre de la base de datos. Déjelo vacío para usar el archivo predeterminado para el controlador SQLite.", + "Database Prefix": "Prefijo de base de datos", + "Provide the database prefix.": "Proporcione el prefijo de la base de datos.", + "Port": "Puerto", + "Provide the hostname port.": "Proporcione el puerto del nombre de host.", + "NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.": "NexoPOS<\/strong> ahora puede conectarse a la base de datos. Comience creando la cuenta de administrador y dándole un nombre a su instalación. Una vez instalada, ya no se podrá acceder a esta página.", + "Install": "Instalar", + "Application": "Solicitud", + "That is the application name.": "Ese es el nombre de la aplicación.", + "Provide the administrator username.": "Proporcione el nombre de usuario del administrador.", + "Provide the administrator email.": "Proporcione el correo electrónico del administrador.", + "What should be the password required for authentication.": "¿Cuál debería ser la contraseña requerida para la autenticación?", + "Should be the same as the password above.": "Debe ser la misma que la contraseña anterior.", + "Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.": "Gracias por utilizar NexoPOS para administrar su tienda. Este asistente de instalación le ayudará a ejecutar NexoPOS en poco tiempo.", + "Choose your language to get started.": "Elija su idioma para comenzar.", + "Remaining Steps": "Pasos restantes", + "Database Configuration": "Configuración de base de datos", + "Application Configuration": "Configuración de la aplicación", + "Language Selection": "Selección de idioma", + "Select what will be the default language of NexoPOS.": "Seleccione cuál será el idioma predeterminado de NexoPOS.", + "In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.": "Para que NexoPOS siga funcionando sin problemas con las actualizaciones, debemos proceder a la migración de la base de datos. De hecho, no necesitas realizar ninguna acción, solo espera hasta que finalice el proceso y serás redirigido.", + "Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.": "Parece que se ha producido un error durante la actualización. Por lo general, dar otra inyección debería solucionar el problema. Sin embargo, si todavía no tienes ninguna oportunidad.", + "Please report this message to the support : ": "Por favor informe este mensaje al soporte:", + "No refunds made so far. Good news right?": "No se han realizado reembolsos hasta el momento. Buenas noticias ¿verdad?", + "Open Register : %s": "Registro abierto: %s", + "Loading Coupon For : ": "Cargando cupón para:", + "This coupon requires products that aren\\'t available on the cart at the moment.": "Este cupón requiere productos que no están disponibles en el carrito en este momento.", + "This coupon requires products that belongs to specific categories that aren\\'t included at the moment.": "Este cupón requiere productos que pertenecen a categorías específicas que no están incluidas en este momento.", + "Too many results.": "Demasiados resultados.", + "New Customer": "Nuevo cliente", + "Purchases": "Compras", + "Owed": "adeudado", + "Usage :": "Uso:", + "Code :": "Código:", + "Order Reference": "Pedir Referencia", + "The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?": "El producto \"{product}\" no se puede agregar desde un campo de búsqueda, ya que \"Seguimiento preciso\" está habilitado. Te gustaría aprender mas ?", + "{product} : Units": "{producto} : Unidades", + "This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.": "Este producto no tiene ninguna unidad definida para su venta. Asegúrese de marcar al menos una unidad como visible.", + "Previewing :": "Vista previa:", + "Search for options": "Buscar opciones", + "The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.": "Se ha generado el token API. Asegúrate de copiar este código en un lugar seguro, ya que solo se mostrará una vez.\n Si pierdes este token, deberás revocarlo y generar uno nuevo.", + "The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.": "El grupo de impuestos seleccionado no tiene ningún subimpuesto asignado. Esto podría provocar cifras erróneas.", + "The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.": "Los cupones \"%s\" han sido eliminados del carrito, ya que ya no cumplen las condiciones requeridas.", + "The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.": "La orden actual será nula. Esto cancelará la transacción, pero el pedido no se eliminará. Se darán más detalles sobre la operación en el informe. Considere proporcionar el motivo de esta operación.", + "Invalid Error Message": "Mensaje de error no válido", + "Unamed Settings Page": "Página de configuración sin nombre", + "Description of unamed setting page": "Descripción de la página de configuración sin nombre", + "Text Field": "Campo de texto", + "This is a sample text field.": "Este es un campo de texto de muestra.", + "No description has been provided.": "No se ha proporcionado ninguna descripción.", + "You\\'re using NexoPOS %s<\/a>": "Estás usando NexoPOS %s<\/a >", + "If you haven\\'t asked this, please get in touch with the administrators.": "Si no ha preguntado esto, póngase en contacto con los administradores.", + "A new user has registered to your store (%s) with the email %s.": "Un nuevo usuario se ha registrado en tu tienda (%s) con el correo electrónico %s.", + "The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.": "La cuenta que ha creado para __%s__ se ha creado correctamente. Ahora puede iniciar sesión como usuario con su nombre de usuario (__%s__) y la contraseña que ha definido.", + "Note: ": "Nota:", + "Inclusive Product Taxes": "Impuestos sobre productos incluidos", + "Exclusive Product Taxes": "Impuestos sobre productos exclusivos", + "Condition:": "Condición:", + "Date : %s": "Fechas", + "NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.": "NexoPOS no pudo realizar una solicitud de base de datos. Este error puede estar relacionado con una mala configuración en su archivo .env. La siguiente guía puede resultarle útil para ayudarle a resolver este problema.", + "Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.": "Desafortunadamente, sucedió algo inesperado. Puedes empezar dando otra oportunidad haciendo clic en \"Intentar de nuevo\". Si el problema persiste, utilice el siguiente resultado para recibir asistencia.", + "Retry": "Rever", + "If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.": "Si ve esta página, significa que NexoPOS está instalado correctamente en su sistema. Como esta página está destinada a ser la interfaz, NexoPOS no tiene una interfaz por el momento. Esta página muestra enlaces útiles que le llevarán a recursos importantes.", + "Compute Products": "Productos informáticos", + "Unammed Section": "Sección sin nombre", + "%s order(s) has recently been deleted as they have expired.": "%s pedidos se han eliminado recientemente porque han caducado.", + "%s products will be updated": "%s productos serán actualizados", + "Procurement %s": "%s de adquisiciones", + "You cannot assign the same unit to more than one selling unit.": "No puedes asignar la misma unidad a más de una unidad de venta.", + "The quantity to convert can\\'t be zero.": "La cantidad a convertir no puede ser cero.", + "The source unit \"(%s)\" for the product \"%s": "La unidad de origen \"(%s)\" para el producto \"%s", + "The conversion from \"%s\" will cause a decimal value less than one count of the destination unit \"%s\".": "La conversión de \"%s\" generará un valor decimal menor que un conteo de la unidad de destino \"%s\".", + "{customer_first_name}: displays the customer first name.": "{customer_first_name}: muestra el nombre del cliente.", + "{customer_last_name}: displays the customer last name.": "{customer_last_name}: muestra el apellido del cliente.", + "No Unit Selected": "Ninguna unidad seleccionada", + "Unit Conversion : {product}": "Conversión de unidades: {producto}", + "Convert {quantity} available": "Convertir {cantidad} disponible", + "The quantity should be greater than 0": "La cantidad debe ser mayor que 0.", + "The provided quantity can\\'t result in any convertion for unit \"{destination}\"": "La cantidad proporcionada no puede generar ninguna conversión para la unidad \"{destination}\"", + "Conversion Warning": "Advertencia de conversión", + "Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?": "Solo {quantity}({source}) se puede convertir a {destinationCount}({destination}). ¿Quieres continuar?", + "Confirm Conversion": "Confirmar conversión", + "You\\'re about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?": "Estás a punto de convertir {cantidad}({source}) a {destinationCount}({destination}). ¿Quieres continuar?", + "Conversion Successful": "Conversión exitosa", + "The product {product} has been converted successfully.": "El producto {product} se ha convertido correctamente.", + "An error occured while converting the product {product}": "Se produjo un error al convertir el producto {product}", + "The quantity has been set to the maximum available": "La cantidad se ha fijado en el máximo disponible.", + "The product {product} has no base unit": "El producto {product} no tiene unidad base", + "Developper Section": "Sección de desarrollador", + "The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?": "La base de datos se borrará y se borrarán todos los datos. Sólo se mantienen los usuarios y roles. ¿Quieres continuar?", + "An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s": "Se produjo un error al crear un código de barras \"%s\" utilizando el tipo \"%s\" para el producto. Asegúrese de que el valor del código de barras sea correcto para el tipo de código de barras seleccionado. Información adicional: %s" +} \ No newline at end of file diff --git a/lang/fr.json b/lang/fr.json index 247d5c9a5..e369e3a1c 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -1 +1,2696 @@ -{"Percentage":"Pourcentage","Flat":"Plat","Unknown Type":"Type inconnu","Male":"M\u00e2le","Female":"Femelle","Not Defined":"Non d\u00e9fini","Month Starts":"D\u00e9but du mois","Month Middle":"Milieu du mois","Month Ends":"Fin du mois","X Days After Month Starts":"X jours apr\u00e8s le d\u00e9but du mois","X Days Before Month Ends":"X jours avant la fin du mois","On Specific Day":"Le jour sp\u00e9cifique","Unknown Occurance":"Occurrence inconnue","Direct Transaction":"Transaction directe","Recurring Transaction":"Transaction r\u00e9currente","Entity Transaction":"Transaction d\u2019entit\u00e9","Scheduled Transaction":"Transaction planifi\u00e9e","Yes":"Oui","No":"Non","An invalid date were provided. Make sure it a prior date to the actual server date.":"Une date invalide a \u00e9t\u00e9 fournie. Assurez-vous qu\u2019il s\u2019agit d\u2019une date ant\u00e9rieure \u00e0 la date r\u00e9elle du serveur.","Computing report from %s...":"Calcul du rapport \u00e0 partir de %s\u2026","The operation was successful.":"L\u2019op\u00e9ration a r\u00e9ussi.","Unable to find a module having the identifier\/namespace \"%s\"":"Impossible de trouver un module ayant l\u2019identifiant \/ l\u2019espace de noms \"%s\".","What is the CRUD single resource name ? [Q] to quit.":"Quel est le nom de ressource unique CRUD ? [Q] pour quitter.","Please provide a valid value":"Veuillez fournir une valeur valide.","Which table name should be used ? [Q] to quit.":"Quel nom de table doit \u00eatre utilis\u00e9 ? [Q] pour quitter.","What slug should be used ? [Q] to quit.":"Quel slug doit \u00eatre utilis\u00e9 ? [Q] pour quitter.","What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.":"Quel est l\u2019espace de noms de la ressource CRUD. par exemple : system.users ? [Q] pour quitter.","Please provide a valid value.":"Veuillez fournir une valeur valide.","What is the full model name. eg: App\\Models\\Order ? [Q] to quit.":"Quel est le nom complet du mod\u00e8le. par exemple : App\\Models\\Order ? [Q] pour quitter.","If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Si votre ressource CRUD a une relation, mentionnez-la comme suit \"foreign_table, foreign_key, local_key\" ? [S] pour sauter, [Q] pour quitter.","Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Ajouter une nouvelle relation ? Mentionnez-la comme suit \"foreign_table, foreign_key, local_key\" ? [S] pour sauter, [Q] pour quitter.","Not enough parameters provided for the relation.":"Pas assez de param\u00e8tres fournis pour la relation.","What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.":"Quelles sont les colonnes remplissables sur la table : par exemple : username, email, password ? [S] pour sauter, [Q] pour quitter.","The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"":"La ressource CRUD \"%s\" pour le module \"%s\" a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e \u00e0 \"%s\"","The CRUD resource \"%s\" has been generated at %s":"La ressource CRUD \"%s\" a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e \u00e0 %s","An unexpected error has occurred.":"Une erreur inattendue s\u2019est produite.","File Name":"Nom de fichier","Status":"Statut","Unsupported argument provided: \"%s\"":"Argument non pris en charge fourni : \"%s\"","Done":"Termin\u00e9","The authorization token can\\'t be changed manually.":"Le jeton d\u2019autorisation ne peut pas \u00eatre modifi\u00e9 manuellement.","Localization for %s extracted to %s":"La localisation pour %s a \u00e9t\u00e9 extraite vers %s","Translation process is complete for the module %s !":"Le processus de traduction est termin\u00e9 pour le module %s !","Unable to find the requested module.":"Impossible de trouver le module demand\u00e9.","\"%s\" is a reserved class name":"\"%s\" est un nom de classe r\u00e9serv\u00e9","The migration file has been successfully forgotten for the module %s.":"Le fichier de migration a \u00e9t\u00e9 oubli\u00e9 avec succ\u00e8s pour le module %s.","%s migration(s) has been deleted.":"%s migration(s) ont \u00e9t\u00e9 supprim\u00e9es.","The command has been created for the module \"%s\"!":"La commande a \u00e9t\u00e9 cr\u00e9\u00e9e pour le module \"%s\"!","The controller has been created for the module \"%s\"!":"Le contr\u00f4leur a \u00e9t\u00e9 cr\u00e9\u00e9 pour le module \"%s\"!","Would you like to delete \"%s\"?":"Voulez-vous supprimer \"%s\"?","Unable to find a module having as namespace \"%s\"":"Impossible de trouver un module ayant pour espace de noms \"%s\"","Name":"Nom","Namespace":"Espace de noms","Version":"Version","Author":"Auteur","Enabled":"Activ\u00e9","Path":"Chemin","Index":"Index","Entry Class":"Classe d'entr\u00e9e","Routes":"Routes","Api":"Api","Controllers":"Contr\u00f4leurs","Views":"Vues","Api File":"Fichier Api","Migrations":"Migrations","Attribute":"Attribut","Value":"Valeur","A request with the same name has been found !":"Une demande portant le m\u00eame nom a \u00e9t\u00e9 trouv\u00e9e !","There is no migrations to perform for the module \"%s\"":"Il n'y a pas de migrations \u00e0 effectuer pour le module \"%s\".","The module migration has successfully been performed for the module \"%s\"":"La migration du module a \u00e9t\u00e9 effectu\u00e9e avec succ\u00e8s pour le module \"%s\".","The products taxes were computed successfully.":"Les taxes des produits ont \u00e9t\u00e9 calcul\u00e9es avec succ\u00e8s.","The product barcodes has been refreshed successfully.":"Les codes-barres des produits ont \u00e9t\u00e9 actualis\u00e9s avec succ\u00e8s.","%s products where updated.":"%s produits ont \u00e9t\u00e9 mis \u00e0 jour.","The demo has been enabled.":"La d\u00e9mo a \u00e9t\u00e9 activ\u00e9e.","Unable to proceed, looks like the database can\\'t be used.":"Impossible de proc\u00e9der, il semble que la base de donn\u00e9es ne puisse pas \u00eatre utilis\u00e9e.","What is the store name ? [Q] to quit.":"Quel est le nom du magasin ? [Q] pour quitter.","Please provide at least 6 characters for store name.":"Veuillez fournir au moins 6 caract\u00e8res pour le nom du magasin.","What is the administrator password ? [Q] to quit.":"Quel est le mot de passe administrateur ? [Q] pour quitter.","Please provide at least 6 characters for the administrator password.":"Veuillez fournir au moins 6 caract\u00e8res pour le mot de passe administrateur.","In which language would you like to install NexoPOS ?":"Dans quelle langue souhaitez-vous installer NexoPOS ?","You must define the language of installation.":"Vous devez d\u00e9finir la langue d'installation.","What is the administrator email ? [Q] to quit.":"Quel est l'e-mail de l'administrateur ? [Q] pour quitter.","Please provide a valid email for the administrator.":"Veuillez fournir une adresse e-mail valide pour l'administrateur.","What is the administrator username ? [Q] to quit.":"Quel est le nom d'utilisateur de l'administrateur ? [Q] pour quitter.","Please provide at least 5 characters for the administrator username.":"Veuillez fournir au moins 5 caract\u00e8res pour le nom d'utilisateur de l'administrateur.","Downloading latest dev build...":"T\u00e9l\u00e9chargement de la derni\u00e8re version en d\u00e9veloppement...","Reset project to HEAD...":"R\u00e9initialiser le projet \u00e0 HEAD...","Provide a name to the resource.":"Donnez un nom \u00e0 la ressource.","General":"G\u00e9n\u00e9ral","You\\re not allowed to do that.":"Vous n'\u00eates pas autoris\u00e9 \u00e0 faire cela.","Operation":"Op\u00e9ration","By":"Par","Date":"Date","Credit":"Cr\u00e9dit","Debit":"D\u00e9bit","Delete":"Supprimer","Would you like to delete this ?":"Voulez-vous supprimer ceci ?","Delete Selected Groups":"Supprimer les groupes s\u00e9lectionn\u00e9s","Coupons List":"Liste des coupons","Display all coupons.":"Afficher tous les coupons.","No coupons has been registered":"Aucun coupon n'a \u00e9t\u00e9 enregistr\u00e9.","Add a new coupon":"Ajouter un nouveau coupon","Create a new coupon":"Cr\u00e9er un nouveau coupon","Register a new coupon and save it.":"Enregistrer un nouveau coupon et enregistrer-le.","Edit coupon":"Modifier le coupon","Modify Coupon.":"Modifier le coupon.","Return to Coupons":"Retour aux coupons","Coupon Code":"Code de coupon","Might be used while printing the coupon.":"Peut \u00eatre utilis\u00e9 lors de l'impression du coupon.","Percentage Discount":"R\u00e9duction en pourcentage","Flat Discount":"R\u00e9duction plate","Type":"Type","Define which type of discount apply to the current coupon.":"D\u00e9finissez le type de r\u00e9duction qui s'applique au coupon actuel.","Discount Value":"Valeur de la r\u00e9duction","Define the percentage or flat value.":"D\u00e9finissez le pourcentage ou la valeur plate.","Valid Until":"Valable jusqu'\u00e0","Determine Until When the coupon is valid.":"D\u00e9terminez jusqu'\u00e0 quand le coupon est valable.","Minimum Cart Value":"Valeur minimale du panier","What is the minimum value of the cart to make this coupon eligible.":"Quelle est la valeur minimale du panier pour rendre ce coupon \u00e9ligible.","Maximum Cart Value":"Valeur maximale du panier","The value above which the current coupon can\\'t apply.":"La valeur au-dessus de laquelle le coupon actuel ne peut pas s'appliquer.","Valid Hours Start":"Heure de d\u00e9but valide","Define form which hour during the day the coupons is valid.":"D\u00e9finir \u00e0 partir de quelle heure pendant la journ\u00e9e les coupons sont valables.","Valid Hours End":"Heure de fin valide","Define to which hour during the day the coupons end stop valid.":"D\u00e9finir \u00e0 quelle heure pendant la journ\u00e9e les coupons cessent d'\u00eatre valables.","Limit Usage":"Limite d'utilisation","Define how many time a coupons can be redeemed.":"D\u00e9finir combien de fois un coupon peut \u00eatre utilis\u00e9.","Products":"Produits","Select Products":"S\u00e9lectionner des produits","The following products will be required to be present on the cart, in order for this coupon to be valid.":"Les produits suivants devront \u00eatre pr\u00e9sents dans le panier pour que ce coupon soit valide.","Categories":"Cat\u00e9gories","Select Categories":"S\u00e9lectionner des cat\u00e9gories","The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.":"Les produits assign\u00e9s \u00e0 l'une de ces cat\u00e9gories doivent \u00eatre dans le panier pour que ce coupon soit valide.","Customer Groups":"Groupes de clients","Assigned To Customer Group":"Attribu\u00e9 au groupe de clients","Only the customers who belongs to the selected groups will be able to use the coupon.":"Seuls les clients appartenant aux groupes s\u00e9lectionn\u00e9s pourront utiliser le coupon.","Customers":"Clients","Assigned To Customers":"Attribu\u00e9 aux clients s\u00e9lectionn\u00e9s","Only the customers selected will be ale to use the coupon.":"Seuls les clients s\u00e9lectionn\u00e9s pourront utiliser le coupon.","Unable to save the coupon product as this product doens\\'t exists.":"Impossible d'enregistrer le produit de coupon car ce produit n'existe pas.","Unable to save the coupon category as this category doens\\'t exists.":"Impossible d'enregistrer la cat\u00e9gorie de coupon car cette cat\u00e9gorie n'existe pas.","Unable to save the coupon as one of the selected customer no longer exists.":"Impossible d'enregistrer le coupon car l'un des clients s\u00e9lectionn\u00e9s n'existe plus.","Unable to save the coupon as one of the selected customer group no longer exists.":"Impossible d'enregistrer le coupon car l'un des groupes de clients s\u00e9lectionn\u00e9s n'existe plus.","Unable to save the coupon as this category doens\\'t exists.":"Impossible d'enregistrer le coupon car cette cat\u00e9gorie n'existe pas.","Unable to save the coupon as one of the customers provided no longer exists.":"Impossible d'enregistrer le coupon car l'un des clients fournis n'existe plus.","Unable to save the coupon as one of the provided customer group no longer exists.":"Impossible d'enregistrer le coupon car l'un des groupes de clients fournis n'existe plus.","Valid From":"Valable \u00e0 partir de","Valid Till":"Valable jusqu'\u00e0","Created At":"Cr\u00e9\u00e9 \u00e0","N\/A":"N \/ A","Undefined":"Ind\u00e9fini","Edit":"Modifier","History":"Histoire","Delete a licence":"Supprimer une licence","Coupon Order Histories List":"Liste des historiques de commande de coupons","Display all coupon order histories.":"Afficher tous les historiques de commande de coupons.","No coupon order histories has been registered":"Aucun historique de commande de coupon n'a \u00e9t\u00e9 enregistr\u00e9.","Add a new coupon order history":"Ajouter un nouvel historique de commande de coupon","Create a new coupon order history":"Cr\u00e9er un nouvel historique de commande de coupon","Register a new coupon order history and save it.":"Enregistrez un nouvel historique de commande de coupon et enregistrez-le.","Edit coupon order history":"Modifier l'historique des commandes de coupons","Modify Coupon Order History.":"Modifier l'historique des commandes de coupons.","Return to Coupon Order Histories":"Retour aux historiques des commandes de coupons","Id":"Id","Code":"Code","Customer_coupon_id":"Customer_coupon_id","Order_id":"Order_id","Discount_value":"Discount_value","Minimum_cart_value":"Minimum_cart_value","Maximum_cart_value":"Maximum_cart_value","Limit_usage":"Limit_usage","Uuid":"Uuid","Created_at":"Created_at","Updated_at":"Updated_at","Customer":"Client","Order":"Commande","Discount":"Remise","Would you like to delete this?":"Voulez-vous supprimer ceci?","Previous Amount":"Montant pr\u00e9c\u00e9dent","Amount":"Montant","Next Amount":"Montant suivant","Description":"Description","Restrict the records by the creation date.":"Restreindre les enregistrements par la date de cr\u00e9ation.","Created Between":"Cr\u00e9\u00e9 entre","Operation Type":"Type d'op\u00e9ration","Restrict the orders by the payment status.":"Restreindre les commandes par l'\u00e9tat de paiement.","Crediting (Add)":"Cr\u00e9dit (Ajouter)","Refund (Add)":"Remboursement (Ajouter)","Deducting (Remove)":"D\u00e9duction (Supprimer)","Payment (Remove)":"Paiement (Supprimer)","Restrict the records by the author.":"Restreindre les enregistrements par l'auteur.","Total":"Total","Customer Accounts List":"Liste des comptes clients","Display all customer accounts.":"Afficher tous les comptes clients.","No customer accounts has been registered":"Aucun compte client n'a \u00e9t\u00e9 enregistr\u00e9.","Add a new customer account":"Ajouter un nouveau compte client","Create a new customer account":"Cr\u00e9er un nouveau compte client","Register a new customer account and save it.":"Enregistrer un nouveau compte client et l'enregistrer.","Edit customer account":"Modifier le compte client","Modify Customer Account.":"Modifier le compte client.","Return to Customer Accounts":"Retour aux comptes clients","This will be ignored.":"Ceci sera ignor\u00e9.","Define the amount of the transaction":"D\u00e9finir le montant de la transaction.","Deduct":"D\u00e9duire","Add":"Ajouter","Define what operation will occurs on the customer account.":"D\u00e9finir l'op\u00e9ration qui se produira sur le compte client.","Customer Coupons List":"Liste des coupons clients","Display all customer coupons.":"Afficher tous les coupons clients.","No customer coupons has been registered":"Aucun coupon client n'a \u00e9t\u00e9 enregistr\u00e9.","Add a new customer coupon":"Ajouter un nouveau coupon client","Create a new customer coupon":"Cr\u00e9er un nouveau coupon client","Register a new customer coupon and save it.":"Enregistrer un nouveau coupon client et l'enregistrer.","Edit customer coupon":"Modifier le coupon client","Modify Customer Coupon.":"Modifier le coupon client.","Return to Customer Coupons":"Retour aux coupons clients","Usage":"Utilisation","Define how many time the coupon has been used.":"D\u00e9finir combien de fois le coupon a \u00e9t\u00e9 utilis\u00e9.","Limit":"Limite","Define the maximum usage possible for this coupon.":"D\u00e9finir l'utilisation maximale possible pour ce coupon.","Usage History":"Historique d'utilisation","Customer Coupon Histories List":"Liste des historiques de coupons clients","Display all customer coupon histories.":"Afficher tous les historiques de coupons clients.","No customer coupon histories has been registered":"Aucun historique de coupon client n'a \u00e9t\u00e9 enregistr\u00e9.","Add a new customer coupon history":"Ajouter un nouvel historique de coupon client","Create a new customer coupon history":"Cr\u00e9er un nouvel historique de coupon client","Register a new customer coupon history and save it.":"Enregistrer un nouvel historique de coupon client et l'enregistrer.","Edit customer coupon history":"Modifier l'historique des coupons clients","Modify Customer Coupon History.":"Modifier l'historique des coupons clients.","Return to Customer Coupon Histories":"Retour aux historiques des coupons clients","Order Code":"Code de commande","Coupon Name":"Nom du coupon","Customers List":"Liste des clients","Display all customers.":"Afficher tous les clients.","No customers has been registered":"Aucun client n'a \u00e9t\u00e9 enregistr\u00e9.","Add a new customer":"Ajouter un nouveau client","Create a new customer":"Cr\u00e9er un nouveau client","Register a new customer and save it.":"Enregistrer un nouveau client et l'enregistrer.","Edit customer":"Modifier le client","Modify Customer.":"Modifier le client.","Return to Customers":"Retour aux clients","Customer Name":"Nom du client","Provide a unique name for the customer.":"Fournir un nom unique pour le client.","Last Name":"Nom de famille","Provide the customer last name":"Fournir le nom de famille du client.","Credit Limit":"Limite de cr\u00e9dit","Set what should be the limit of the purchase on credit.":"D\u00e9finir ce qui devrait \u00eatre la limite d'achat \u00e0 cr\u00e9dit.","Group":"Groupe","Assign the customer to a group":"Attribuer le client \u00e0 un groupe.","Birth Date":"Date de naissance","Displays the customer birth date":"Affiche la date de naissance du client.","Email":"Email","Provide the customer email.":"Fournir l'e-mail du client.","Phone Number":"Num\u00e9ro de t\u00e9l\u00e9phone","Provide the customer phone number":"Fournir le num\u00e9ro de t\u00e9l\u00e9phone du client.","PO Box":"Bo\u00eete postale","Provide the customer PO.Box":"Fournir la bo\u00eete postale du client.","Gender":"Genre","Provide the customer gender.":"Fournir le sexe du client.","Billing Address":"Adresse de facturation","Shipping Address":"Adresse d'exp\u00e9dition","The assigned default customer group doesn\\'t exist or is not defined.":"Le groupe de clients par d\u00e9faut assign\u00e9 n'existe pas ou n'est pas d\u00e9fini.","First Name":"Pr\u00e9nom","Phone":"T\u00e9l\u00e9phone","Account Credit":"Cr\u00e9dit du compte","Owed Amount":"Montant d\u00fb","Purchase Amount":"Montant d'achat","Orders":"Commandes","Rewards":"R\u00e9compenses","Coupons":"Coupons","Wallet History":"Historique du portefeuille","Delete a customers":"Supprimer un client.","Delete Selected Customers":"Supprimer les clients s\u00e9lectionn\u00e9s.","Customer Groups List":"Liste des groupes de clients","Display all Customers Groups.":"Afficher tous les groupes de clients.","No Customers Groups has been registered":"Aucun groupe de clients n'a \u00e9t\u00e9 enregistr\u00e9.","Add a new Customers Group":"Ajouter un nouveau groupe de clients","Create a new Customers Group":"Create a new Customers Group","Register a new Customers Group and save it.":"Register a new Customers Group and save it.","Edit Customers Group":"Edit Customers Group","Modify Customers group.":"Modify Customers group.","Return to Customers Groups":"Return to Customers Groups","Reward System":"Reward System","Select which Reward system applies to the group":"Select which Reward system applies to the group","Minimum Credit Amount":"Minimum Credit Amount","Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0":"Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0","A brief description about what this group is about":"A brief description about what this group is about","Created On":"Created On","You\\'re not allowed to do this operation":"You\\'re not allowed to do this operation","Customer Orders List":"Customer Orders List","Display all customer orders.":"Display all customer orders.","No customer orders has been registered":"No customer orders has been registered","Add a new customer order":"Add a new customer order","Create a new customer order":"Create a new customer order","Register a new customer order and save it.":"Register a new customer order and save it.","Edit customer order":"Edit customer order","Modify Customer Order.":"Modify Customer Order.","Return to Customer Orders":"Return to Customer Orders","Change":"Change","Created at":"Created at","Customer Id":"Customer Id","Delivery Status":"Delivery Status","Discount Percentage":"Discount Percentage","Discount Type":"Discount Type","Final Payment Date":"Final Payment Date","Tax Excluded":"Tax Excluded","Tax Included":"Tax Included","Payment Status":"Payment Status","Process Status":"Process Status","Shipping":"Shipping","Shipping Rate":"Shipping Rate","Shipping Type":"Shipping Type","Sub Total":"Sub Total","Tax Value":"Tax Value","Tendered":"Tendered","Title":"Title","Total installments":"Total installments","Updated at":"Updated at","Voidance Reason":"Voidance Reason","Customer Rewards List":"Customer Rewards List","Display all customer rewards.":"Display all customer rewards.","No customer rewards has been registered":"No customer rewards has been registered","Add a new customer reward":"Add a new customer reward","Create a new customer reward":"Create a new customer reward","Register a new customer reward and save it.":"Register a new customer reward and save it.","Edit customer reward":"Edit customer reward","Modify Customer Reward.":"Modify Customer Reward.","Return to Customer Rewards":"Return to Customer Rewards","Points":"Points","Target":"Target","Reward Name":"Reward Name","Last Update":"Last Update","Account Name":"Account Name","Product Histories":"Product Histories","Display all product stock flow.":"Display all product stock flow.","No products stock flow has been registered":"No products stock flow has been registered","Add a new products stock flow":"Add a new products stock flow","Create a new products stock flow":"Create a new products stock flow","Register a new products stock flow and save it.":"Register a new products stock flow and save it.","Edit products stock flow":"Edit products stock flow","Modify Globalproducthistorycrud.":"Modify Globalproducthistorycrud.","Return to Product Histories":"Return to Product Histories","Product":"Product","Procurement":"Procurement","Unit":"Unit","Initial Quantity":"Initial Quantity","Quantity":"Quantity","New Quantity":"New Quantity","Total Price":"Total Price","Added":"Added","Defective":"Defective","Deleted":"Deleted","Lost":"Lost","Removed":"Removed","Sold":"Sold","Stocked":"Stocked","Transfer Canceled":"Transfer Canceled","Incoming Transfer":"Incoming Transfer","Outgoing Transfer":"Outgoing Transfer","Void Return":"Void Return","Hold Orders List":"Hold Orders List","Display all hold orders.":"Display all hold orders.","No hold orders has been registered":"No hold orders has been registered","Add a new hold order":"Add a new hold order","Create a new hold order":"Create a new hold order","Register a new hold order and save it.":"Register a new hold order and save it.","Edit hold order":"Edit hold order","Modify Hold Order.":"Modify Hold Order.","Return to Hold Orders":"Return to Hold Orders","Updated At":"Updated At","Continue":"Continue","Restrict the orders by the creation date.":"Restrict the orders by the creation date.","Paid":"Paid","Hold":"Hold","Partially Paid":"Partially Paid","Partially Refunded":"Partially Refunded","Refunded":"Refunded","Unpaid":"Unpaid","Voided":"Voided","Due":"Due","Due With Payment":"Due With Payment","Restrict the orders by the author.":"Restrict the orders by the author.","Restrict the orders by the customer.":"Restrict the orders by the customer.","Customer Phone":"Customer Phone","Restrict orders using the customer phone number.":"Restrict orders using the customer phone number.","Cash Register":"Cash Register","Restrict the orders to the cash registers.":"Restrict the orders to the cash registers.","Orders List":"Orders List","Display all orders.":"Display all orders.","No orders has been registered":"No orders has been registered","Add a new order":"Add a new order","Create a new order":"Create a new order","Register a new order and save it.":"Register a new order and save it.","Edit order":"Edit order","Modify Order.":"Modify Order.","Return to Orders":"Return to Orders","Discount Rate":"Discount Rate","The order and the attached products has been deleted.":"The order and the attached products has been deleted.","Options":"Options","Refund Receipt":"Refund Receipt","Invoice":"Invoice","Receipt":"Receipt","Order Instalments List":"Order Instalments List","Display all Order Instalments.":"Display all Order Instalments.","No Order Instalment has been registered":"No Order Instalment has been registered","Add a new Order Instalment":"Add a new Order Instalment","Create a new Order Instalment":"Create a new Order Instalment","Register a new Order Instalment and save it.":"Register a new Order Instalment and save it.","Edit Order Instalment":"Edit Order Instalment","Modify Order Instalment.":"Modify Order Instalment.","Return to Order Instalment":"Return to Order Instalment","Order Id":"Order Id","Payment Types List":"Payment Types List","Display all payment types.":"Display all payment types.","No payment types has been registered":"No payment types has been registered","Add a new payment type":"Add a new payment type","Create a new payment type":"Create a new payment type","Register a new payment type and save it.":"Register a new payment type and save it.","Edit payment type":"Edit payment type","Modify Payment Type.":"Modify Payment Type.","Return to Payment Types":"Return to Payment Types","Label":"Label","Provide a label to the resource.":"Provide a label to the resource.","Active":"Active","Priority":"Priority","Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".":"Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".","Identifier":"Identifier","A payment type having the same identifier already exists.":"A payment type having the same identifier already exists.","Unable to delete a read-only payments type.":"Unable to delete a read-only payments type.","Readonly":"Readonly","Procurements List":"Procurements List","Display all procurements.":"Display all procurements.","No procurements has been registered":"No procurements has been registered","Add a new procurement":"Add a new procurement","Create a new procurement":"Create a new procurement","Register a new procurement and save it.":"Register a new procurement and save it.","Edit procurement":"Edit procurement","Modify Procurement.":"Modify Procurement.","Return to Procurements":"Return to Procurements","Provider Id":"Provider Id","Total Items":"Total Items","Provider":"Provider","Invoice Date":"Invoice Date","Sale Value":"Sale Value","Purchase Value":"Purchase Value","Taxes":"Taxes","Set Paid":"Set Paid","Would you like to mark this procurement as paid?":"Would you like to mark this procurement as paid?","Refresh":"Refresh","Would you like to refresh this ?":"Would you like to refresh this ?","Procurement Products List":"Procurement Products List","Display all procurement products.":"Display all procurement products.","No procurement products has been registered":"No procurement products has been registered","Add a new procurement product":"Add a new procurement product","Create a new procurement product":"Create a new procurement product","Register a new procurement product and save it.":"Register a new procurement product and save it.","Edit procurement product":"Edit procurement product","Modify Procurement Product.":"Modify Procurement Product.","Return to Procurement Products":"Return to Procurement Products","Expiration Date":"Expiration Date","Define what is the expiration date of the product.":"Define what is the expiration date of the product.","Barcode":"Barcode","On":"On","Category Products List":"Category Products List","Display all category products.":"Display all category products.","No category products has been registered":"No category products has been registered","Add a new category product":"Add a new category product","Create a new category product":"Create a new category product","Register a new category product and save it.":"Register a new category product and save it.","Edit category product":"Edit category product","Modify Category Product.":"Modify Category Product.","Return to Category Products":"Return to Category Products","No Parent":"No Parent","Preview":"Preview","Provide a preview url to the category.":"Provide a preview url to the category.","Displays On POS":"Displays On POS","If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.":"If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.","Parent":"Parent","If this category should be a child category of an existing category":"If this category should be a child category of an existing category","Total Products":"Total Products","Products List":"Products List","Display all products.":"Display all products.","No products has been registered":"No products has been registered","Add a new product":"Add a new product","Create a new product":"Create a new product","Register a new product and save it.":"Register a new product and save it.","Edit product":"Edit product","Modify Product.":"Modify Product.","Return to Products":"Return to Products","Assigned Unit":"Assigned Unit","The assigned unit for sale":"The assigned unit for sale","Sale Price":"Sale Price","Define the regular selling price.":"Define the regular selling price.","Wholesale Price":"Wholesale Price","Define the wholesale price.":"Define the wholesale price.","Stock Alert":"Stock Alert","Define whether the stock alert should be enabled for this unit.":"Define whether the stock alert should be enabled for this unit.","Low Quantity":"Low Quantity","Which quantity should be assumed low.":"Which quantity should be assumed low.","Preview Url":"Preview Url","Provide the preview of the current unit.":"Provide the preview of the current unit.","Identification":"Identification","Product unique name. If it\\' variation, it should be relevant for that variation":"Product unique name. If it\\' variation, it should be relevant for that variation","Select to which category the item is assigned.":"Select to which category the item is assigned.","Category":"Category","Define the barcode value. Focus the cursor here before scanning the product.":"Define the barcode value. Focus the cursor here before scanning the product.","Define a unique SKU value for the product.":"Define a unique SKU value for the product.","SKU":"SKU","Define the barcode type scanned.":"Define the barcode type scanned.","EAN 8":"EAN 8","EAN 13":"EAN 13","Codabar":"Codabar","Code 128":"Code 128","Code 39":"Code 39","Code 11":"Code 11","UPC A":"UPC A","UPC E":"UPC E","Barcode Type":"Barcode Type","Materialized Product":"Materialized Product","Dematerialized Product":"Dematerialized Product","Grouped Product":"Grouped Product","Define the product type. Applies to all variations.":"Define the product type. Applies to all variations.","Product Type":"Product Type","On Sale":"On Sale","Hidden":"Hidden","Define whether the product is available for sale.":"Define whether the product is available for sale.","Enable the stock management on the product. Will not work for service or uncountable products.":"Enable the stock management on the product. Will not work for service or uncountable products.","Stock Management Enabled":"Stock Management Enabled","Groups":"Groups","Units":"Units","The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.":"The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.","Accurate Tracking":"Accurate Tracking","What unit group applies to the actual item. This group will apply during the procurement.":"What unit group applies to the actual item. This group will apply during the procurement.","Unit Group":"Unit Group","Determine the unit for sale.":"Determine the unit for sale.","Selling Unit":"Selling Unit","Expiry":"Expiry","Product Expires":"Product Expires","Set to \"No\" expiration time will be ignored.":"Set to \"No\" expiration time will be ignored.","Prevent Sales":"Prevent Sales","Allow Sales":"Allow Sales","Determine the action taken while a product has expired.":"Determine the action taken while a product has expired.","On Expiration":"On Expiration","Choose Group":"Choose Group","Select the tax group that applies to the product\/variation.":"Select the tax group that applies to the product\/variation.","Tax Group":"Tax Group","Inclusive":"Inclusive","Exclusive":"Exclusive","Define what is the type of the tax.":"Define what is the type of the tax.","Tax Type":"Tax Type","Images":"Images","Image":"Image","Choose an image to add on the product gallery":"Choose an image to add on the product gallery","Is Primary":"Is Primary","Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.":"Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.","Sku":"Sku","Materialized":"Materialized","Dematerialized":"Dematerialized","Grouped":"Grouped","Unknown Type: %s":"Unknown Type: %s","Disabled":"Disabled","Available":"Available","Unassigned":"Unassigned","See Quantities":"See Quantities","See History":"See History","Would you like to delete selected entries ?":"Would you like to delete selected entries ?","Display all product histories.":"Display all product histories.","No product histories has been registered":"No product histories has been registered","Add a new product history":"Add a new product history","Create a new product history":"Create a new product history","Register a new product history and save it.":"Register a new product history and save it.","Edit product history":"Edit product history","Modify Product History.":"Modify Product History.","After Quantity":"After Quantity","Before Quantity":"Before Quantity","Order id":"Order id","Procurement Id":"Procurement Id","Procurement Product Id":"Procurement Product Id","Product Id":"Product Id","Unit Id":"Unit Id","Unit Price":"Unit Price","P. Quantity":"P. Quantity","N. Quantity":"N. Quantity","Returned":"Returned","Transfer Rejected":"Transfer Rejected","Adjustment Return":"Adjustment Return","Adjustment Sale":"Adjustment Sale","Product Unit Quantities List":"Product Unit Quantities List","Display all product unit quantities.":"Display all product unit quantities.","No product unit quantities has been registered":"No product unit quantities has been registered","Add a new product unit quantity":"Add a new product unit quantity","Create a new product unit quantity":"Create a new product unit quantity","Register a new product unit quantity and save it.":"Register a new product unit quantity and save it.","Edit product unit quantity":"Edit product unit quantity","Modify Product Unit Quantity.":"Modify Product Unit Quantity.","Return to Product Unit Quantities":"Return to Product Unit Quantities","Product id":"Product id","Providers List":"Providers List","Display all providers.":"Display all providers.","No providers has been registered":"No providers has been registered","Add a new provider":"Add a new provider","Create a new provider":"Create a new provider","Register a new provider and save it.":"Register a new provider and save it.","Edit provider":"Edit provider","Modify Provider.":"Modify Provider.","Return to Providers":"Return to Providers","Provide the provider email. Might be used to send automated email.":"Provide the provider email. Might be used to send automated email.","Provider last name if necessary.":"Provider last name if necessary.","Contact phone number for the provider. Might be used to send automated SMS notifications.":"Contact phone number for the provider. Might be used to send automated SMS notifications.","Address 1":"Address 1","First address of the provider.":"First address of the provider.","Address 2":"Address 2","Second address of the provider.":"Second address of the provider.","Further details about the provider":"Further details about the provider","Amount Due":"Amount Due","Amount Paid":"Amount Paid","See Procurements":"See Procurements","See Products":"See Products","Provider Procurements List":"Provider Procurements List","Display all provider procurements.":"Display all provider procurements.","No provider procurements has been registered":"No provider procurements has been registered","Add a new provider procurement":"Add a new provider procurement","Create a new provider procurement":"Create a new provider procurement","Register a new provider procurement and save it.":"Register a new provider procurement and save it.","Edit provider procurement":"Edit provider procurement","Modify Provider Procurement.":"Modify Provider Procurement.","Return to Provider Procurements":"Return to Provider Procurements","Delivered On":"Delivered On","Tax":"Tax","Delivery":"Delivery","Payment":"Payment","Items":"Items","Provider Products List":"Provider Products List","Display all Provider Products.":"Display all Provider Products.","No Provider Products has been registered":"No Provider Products has been registered","Add a new Provider Product":"Add a new Provider Product","Create a new Provider Product":"Create a new Provider Product","Register a new Provider Product and save it.":"Register a new Provider Product and save it.","Edit Provider Product":"Edit Provider Product","Modify Provider Product.":"Modify Provider Product.","Return to Provider Products":"Return to Provider Products","Purchase Price":"Purchase Price","Registers List":"Registers List","Display all registers.":"Display all registers.","No registers has been registered":"No registers has been registered","Add a new register":"Add a new register","Create a new register":"Create a new register","Register a new register and save it.":"Register a new register and save it.","Edit register":"Edit register","Modify Register.":"Modify Register.","Return to Registers":"Return to Registers","Closed":"Closed","Define what is the status of the register.":"Define what is the status of the register.","Provide mode details about this cash register.":"Provide mode details about this cash register.","Unable to delete a register that is currently in use":"Unable to delete a register that is currently in use","Used By":"Used By","Balance":"Balance","Register History":"Register History","Register History List":"Register History List","Display all register histories.":"Display all register histories.","No register histories has been registered":"No register histories has been registered","Add a new register history":"Add a new register history","Create a new register history":"Create a new register history","Register a new register history and save it.":"Register a new register history and save it.","Edit register history":"Edit register history","Modify Registerhistory.":"Modify Registerhistory.","Return to Register History":"Return to Register History","Register Id":"Register Id","Action":"Action","Register Name":"Register Name","Initial Balance":"Initial Balance","New Balance":"New Balance","Transaction Type":"Transaction Type","Done At":"Done At","Unchanged":"Unchanged","Reward Systems List":"Reward Systems List","Display all reward systems.":"Display all reward systems.","No reward systems has been registered":"No reward systems has been registered","Add a new reward system":"Add a new reward system","Create a new reward system":"Create a new reward system","Register a new reward system and save it.":"Register a new reward system and save it.","Edit reward system":"Edit reward system","Modify Reward System.":"Modify Reward System.","Return to Reward Systems":"Return to Reward Systems","From":"From","The interval start here.":"The interval start here.","To":"To","The interval ends here.":"The interval ends here.","Points earned.":"Points earned.","Coupon":"Coupon","Decide which coupon you would apply to the system.":"Decide which coupon you would apply to the system.","This is the objective that the user should reach to trigger the reward.":"This is the objective that the user should reach to trigger the reward.","A short description about this system":"A short description about this system","Would you like to delete this reward system ?":"Would you like to delete this reward system ?","Delete Selected Rewards":"Delete Selected Rewards","Would you like to delete selected rewards?":"Would you like to delete selected rewards?","No Dashboard":"No Dashboard","Store Dashboard":"Store Dashboard","Cashier Dashboard":"Cashier Dashboard","Default Dashboard":"Default Dashboard","Roles List":"Roles List","Display all roles.":"Display all roles.","No role has been registered.":"No role has been registered.","Add a new role":"Add a new role","Create a new role":"Create a new role","Create a new role and save it.":"Create a new role and save it.","Edit role":"Edit role","Modify Role.":"Modify Role.","Return to Roles":"Return to Roles","Provide a name to the role.":"Provide a name to the role.","Should be a unique value with no spaces or special character":"Should be a unique value with no spaces or special character","Provide more details about what this role is about.":"Provide more details about what this role is about.","Unable to delete a system role.":"Unable to delete a system role.","Clone":"Clone","Would you like to clone this role ?":"Would you like to clone this role ?","You do not have enough permissions to perform this action.":"You do not have enough permissions to perform this action.","Taxes List":"Taxes List","Display all taxes.":"Display all taxes.","No taxes has been registered":"No taxes has been registered","Add a new tax":"Add a new tax","Create a new tax":"Create a new tax","Register a new tax and save it.":"Register a new tax and save it.","Edit tax":"Edit tax","Modify Tax.":"Modify Tax.","Return to Taxes":"Return to Taxes","Provide a name to the tax.":"Provide a name to the tax.","Assign the tax to a tax group.":"Assign the tax to a tax group.","Rate":"Rate","Define the rate value for the tax.":"Define the rate value for the tax.","Provide a description to the tax.":"Provide a description to the tax.","Taxes Groups List":"Taxes Groups List","Display all taxes groups.":"Display all taxes groups.","No taxes groups has been registered":"No taxes groups has been registered","Add a new tax group":"Add a new tax group","Create a new tax group":"Create a new tax group","Register a new tax group and save it.":"Register a new tax group and save it.","Edit tax group":"Edit tax group","Modify Tax Group.":"Modify Tax Group.","Return to Taxes Groups":"Return to Taxes Groups","Provide a short description to the tax group.":"Provide a short description to the tax group.","Accounts List":"Accounts List","Display All Accounts.":"Display All Accounts.","No Account has been registered":"No Account has been registered","Add a new Account":"Add a new Account","Create a new Account":"Create a new Account","Register a new Account and save it.":"Register a new Account and save it.","Edit Account":"Edit Account","Modify An Account.":"Modify An Account.","Return to Accounts":"Return to Accounts","All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.":"All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.","Account":"Account","Provide the accounting number for this category.":"Provide the accounting number for this category.","Transactions List":"Transactions List","Display all transactions.":"Display all transactions.","No transactions has been registered":"No transactions has been registered","Add a new transaction":"Add a new transaction","Create a new transaction":"Create a new transaction","Register a new transaction and save it.":"Register a new transaction and save it.","Edit transaction":"Edit transaction","Modify Transaction.":"Modify Transaction.","Return to Transactions":"Return to Transactions","determine if the transaction is effective or not. Work for recurring and not recurring transactions.":"determine if the transaction is effective or not. Work for recurring and not recurring transactions.","Users Group":"Users Group","Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.":"Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.","None":"None","Transaction Account":"Transaction Account","Is the value or the cost of the transaction.":"Is the value or the cost of the transaction.","If set to Yes, the transaction will trigger on defined occurrence.":"If set to Yes, the transaction will trigger on defined occurrence.","Recurring":"Recurring","Start of Month":"Start of Month","Mid of Month":"Mid of Month","End of Month":"End of Month","X days Before Month Ends":"X days Before Month Ends","X days After Month Starts":"X days After Month Starts","Occurrence":"Occurrence","Occurrence Value":"Occurrence Value","Must be used in case of X days after month starts and X days before month ends.":"Must be used in case of X days after month starts and X days before month ends.","Scheduled":"Scheduled","Set the scheduled date.":"Set the scheduled date.","Units List":"Units List","Display all units.":"Display all units.","No units has been registered":"No units has been registered","Add a new unit":"Add a new unit","Create a new unit":"Create a new unit","Register a new unit and save it.":"Register a new unit and save it.","Edit unit":"Edit unit","Modify Unit.":"Modify Unit.","Return to Units":"Return to Units","Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.":"Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.","Preview URL":"Preview URL","Preview of the unit.":"Preview of the unit.","Define the value of the unit.":"Define the value of the unit.","Define to which group the unit should be assigned.":"Define to which group the unit should be assigned.","Base Unit":"Base Unit","Determine if the unit is the base unit from the group.":"Determine if the unit is the base unit from the group.","Provide a short description about the unit.":"Provide a short description about the unit.","Unit Groups List":"Unit Groups List","Display all unit groups.":"Display all unit groups.","No unit groups has been registered":"No unit groups has been registered","Add a new unit group":"Add a new unit group","Create a new unit group":"Create a new unit group","Register a new unit group and save it.":"Register a new unit group and save it.","Edit unit group":"Edit unit group","Modify Unit Group.":"Modify Unit Group.","Return to Unit Groups":"Return to Unit Groups","Users List":"Users List","Display all users.":"Display all users.","No users has been registered":"No users has been registered","Add a new user":"Add a new user","Create a new user":"Create a new user","Register a new user and save it.":"Register a new user and save it.","Edit user":"Edit user","Modify User.":"Modify User.","Return to Users":"Return to Users","Username":"Username","Will be used for various purposes such as email recovery.":"Will be used for various purposes such as email recovery.","Provide the user first name.":"Provide the user first name.","Provide the user last name.":"Provide the user last name.","Password":"Password","Make a unique and secure password.":"Make a unique and secure password.","Confirm Password":"Confirm Password","Should be the same as the password.":"Should be the same as the password.","Define whether the user can use the application.":"Define whether the user can use the application.","Define what roles applies to the user":"Define what roles applies to the user","Roles":"Roles","Set the limit that can\\'t be exceeded by the user.":"Set the limit that can\\'t be exceeded by the user.","Set the user gender.":"Set the user gender.","Set the user phone number.":"Set the user phone number.","Set the user PO Box.":"Set the user PO Box.","Provide the billing First Name.":"Provide the billing First Name.","Last name":"Last name","Provide the billing last name.":"Provide the billing last name.","Billing phone number.":"Billing phone number.","Billing First Address.":"Billing First Address.","Billing Second Address.":"Billing Second Address.","Country":"Country","Billing Country.":"Billing Country.","City":"City","PO.Box":"PO.Box","Postal Address":"Postal Address","Company":"Company","Provide the shipping First Name.":"Provide the shipping First Name.","Provide the shipping Last Name.":"Provide the shipping Last Name.","Shipping phone number.":"Shipping phone number.","Shipping First Address.":"Shipping First Address.","Shipping Second Address.":"Shipping Second Address.","Shipping Country.":"Shipping Country.","You cannot delete your own account.":"You cannot delete your own account.","Group Name":"Group Name","Wallet Balance":"Wallet Balance","Total Purchases":"Total Purchases","Delete a user":"Delete a user","Not Assigned":"Not Assigned","Access Denied":"Access Denied","There\\'s is mismatch with the core version.":"There\\'s is mismatch with the core version.","Incompatibility Exception":"Incompatibility Exception","You\\'re not authenticated.":"You\\'re not authenticated.","The request method is not allowed.":"The request method is not allowed.","Method Not Allowed":"Method Not Allowed","There is a missing dependency issue.":"There is a missing dependency issue.","Missing Dependency":"Missing Dependency","Module Version Mismatch":"Module Version Mismatch","The Action You Tried To Perform Is Not Allowed.":"The Action You Tried To Perform Is Not Allowed.","Not Allowed Action":"Not Allowed Action","The action you tried to perform is not allowed.":"The action you tried to perform is not allowed.","You\\'re not allowed to see that page.":"You\\'re not allowed to see that page.","Not Enough Permissions":"Not Enough Permissions","Unable to locate the assets.":"Unable to locate the assets.","Not Found Assets":"Not Found Assets","The resource of the page you tried to access is not available or might have been deleted.":"The resource of the page you tried to access is not available or might have been deleted.","Not Found Exception":"Not Found Exception","A Database Exception Occurred.":"A Database Exception Occurred.","Query Exception":"Query Exception","An error occurred while validating the form.":"An error occurred while validating the form.","An error has occurred":"An error has occurred","Unable to proceed, the submitted form is not valid.":"Unable to proceed, the submitted form is not valid.","Unable to proceed the form is not valid":"Unable to proceed the form is not valid","This value is already in use on the database.":"This value is already in use on the database.","This field is required.":"This field is required.","This field does\\'nt have a valid value.":"This field does\\'nt have a valid value.","This field should be checked.":"This field should be checked.","This field must be a valid URL.":"This field must be a valid URL.","This field is not a valid email.":"This field is not a valid email.","Provide your username.":"Provide your username.","Provide your password.":"Provide your password.","Provide your email.":"Provide your email.","Password Confirm":"Password Confirm","define the amount of the transaction.":"define the amount of the transaction.","Further observation while proceeding.":"Further observation while proceeding.","determine what is the transaction type.":"determine what is the transaction type.","Determine the amount of the transaction.":"Determine the amount of the transaction.","Further details about the transaction.":"Further details about the transaction.","Describe the direct transaction.":"Describe the direct transaction.","Activated":"Activated","If set to yes, the transaction will take effect immediately and be saved on the history.":"If set to yes, the transaction will take effect immediately and be saved on the history.","set the value of the transaction.":"set the value of the transaction.","Further details on the transaction.":"Further details on the transaction.","type":"type","User Group":"User Group","Installments":"Installments","Define the installments for the current order.":"Define the installments for the current order.","New Password":"New Password","define your new password.":"define your new password.","confirm your new password.":"confirm your new password.","Select Payment":"Select Payment","choose the payment type.":"choose the payment type.","Define the order name.":"Define the order name.","Define the date of creation of the order.":"Define the date of creation of the order.","Provide the procurement name.":"Provide the procurement name.","Describe the procurement.":"Describe the procurement.","Define the provider.":"Define the provider.","Define what is the unit price of the product.":"Define what is the unit price of the product.","Condition":"Condition","Determine in which condition the product is returned.":"Determine in which condition the product is returned.","Damaged":"Damaged","Unspoiled":"Unspoiled","Other Observations":"Other Observations","Describe in details the condition of the returned product.":"Describe in details the condition of the returned product.","Mode":"Mode","Wipe All":"Wipe All","Wipe Plus Grocery":"Wipe Plus Grocery","Choose what mode applies to this demo.":"Choose what mode applies to this demo.","Create Sales (needs Procurements)":"Create Sales (needs Procurements)","Set if the sales should be created.":"Set if the sales should be created.","Create Procurements":"Create Procurements","Will create procurements.":"Will create procurements.","Scheduled On":"Scheduled On","Unit Group Name":"Unit Group Name","Provide a unit name to the unit.":"Provide a unit name to the unit.","Describe the current unit.":"Describe the current unit.","assign the current unit to a group.":"assign the current unit to a group.","define the unit value.":"define the unit value.","Provide a unit name to the units group.":"Provide a unit name to the units group.","Describe the current unit group.":"Describe the current unit group.","POS":"POS","Open POS":"Open POS","Create Register":"Create Register","Instalments":"Instalments","Procurement Name":"Procurement Name","Provide a name that will help to identify the procurement.":"Provide a name that will help to identify the procurement.","Reset":"Reset","The profile has been successfully saved.":"The profile has been successfully saved.","The user attribute has been saved.":"The user attribute has been saved.","The options has been successfully updated.":"The options has been successfully updated.","Wrong password provided":"Wrong password provided","Wrong old password provided":"Wrong old password provided","Password Successfully updated.":"Password Successfully updated.","Use Customer Billing":"Use Customer Billing","Define whether the customer billing information should be used.":"Define whether the customer billing information should be used.","General Shipping":"General Shipping","Define how the shipping is calculated.":"Define how the shipping is calculated.","Shipping Fees":"Shipping Fees","Define shipping fees.":"Define shipping fees.","Use Customer Shipping":"Use Customer Shipping","Define whether the customer shipping information should be used.":"Define whether the customer shipping information should be used.","Invoice Number":"Invoice Number","If the procurement has been issued outside of NexoPOS, please provide a unique reference.":"If the procurement has been issued outside of NexoPOS, please provide a unique reference.","Delivery Time":"Delivery Time","If the procurement has to be delivered at a specific time, define the moment here.":"If the procurement has to be delivered at a specific time, define the moment here.","If you would like to define a custom invoice date.":"If you would like to define a custom invoice date.","Automatic Approval":"Automatic Approval","Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.":"Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.","Pending":"Pending","Delivered":"Delivered","Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.":"Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.","Determine what is the actual payment status of the procurement.":"Determine what is the actual payment status of the procurement.","Determine what is the actual provider of the current procurement.":"Determine what is the actual provider of the current procurement.","Theme":"Theme","Dark":"Dark","Light":"Light","Define what is the theme that applies to the dashboard.":"Define what is the theme that applies to the dashboard.","Avatar":"Avatar","Define the image that should be used as an avatar.":"Define the image that should be used as an avatar.","Language":"Language","Choose the language for the current account.":"Choose the language for the current account.","Biling":"Biling","Security":"Security","Old Password":"Old Password","Provide the old password.":"Provide the old password.","Change your password with a better stronger password.":"Change your password with a better stronger password.","Password Confirmation":"Password Confirmation","API Token":"API Token","Sign In — NexoPOS":"Sign In — NexoPOS","Sign Up — NexoPOS":"Sign Up — NexoPOS","No activation is needed for this account.":"No activation is needed for this account.","Invalid activation token.":"Invalid activation token.","The expiration token has expired.":"The expiration token has expired.","Your account is not activated.":"Your account is not activated.","Password Lost":"Password Lost","Unable to change a password for a non active user.":"Unable to change a password for a non active user.","Unable to proceed as the token provided is invalid.":"Unable to proceed as the token provided is invalid.","The token has expired. Please request a new activation token.":"The token has expired. Please request a new activation token.","Set New Password":"Set New Password","Database Update":"Database Update","This account is disabled.":"This account is disabled.","Unable to find record having that username.":"Unable to find record having that username.","Unable to find record having that password.":"Unable to find record having that password.","Invalid username or password.":"Invalid username or password.","Unable to login, the provided account is not active.":"Unable to login, the provided account is not active.","You have been successfully connected.":"You have been successfully connected.","The recovery email has been send to your inbox.":"The recovery email has been send to your inbox.","Unable to find a record matching your entry.":"Unable to find a record matching your entry.","Your Account has been successfully created.":"Your Account has been successfully created.","Your Account has been created but requires email validation.":"Your Account has been created but requires email validation.","Unable to find the requested user.":"Unable to find the requested user.","Unable to submit a new password for a non active user.":"Unable to submit a new password for a non active user.","Unable to proceed, the provided token is not valid.":"Unable to proceed, the provided token is not valid.","Unable to proceed, the token has expired.":"Unable to proceed, the token has expired.","Your password has been updated.":"Your password has been updated.","Unable to edit a register that is currently in use":"Unable to edit a register that is currently in use","No register has been opened by the logged user.":"No register has been opened by the logged user.","The register is opened.":"The register is opened.","Cash In":"Cash In","Cash Out":"Cash Out","Closing":"Closing","Opening":"Opening","Sale":"Sale","Refund":"Refund","The register doesn\\'t have an history.":"The register doesn\\'t have an history.","Unable to check a register session history if it\\'s closed.":"Unable to check a register session history if it\\'s closed.","Register History For : %s":"Register History For : %s","Unable to find the category using the provided identifier":"Unable to find the category using the provided identifier","Can\\'t delete a category having sub categories linked to it.":"Can\\'t delete a category having sub categories linked to it.","The category has been deleted.":"The category has been deleted.","Unable to find the category using the provided identifier.":"Unable to find the category using the provided identifier.","Unable to find the attached category parent":"Unable to find the attached category parent","Unable to proceed. The request doesn\\'t provide enough data which could be handled":"Unable to proceed. The request doesn\\'t provide enough data which could be handled","The category has been correctly saved":"The category has been correctly saved","The category has been updated":"The category has been updated","The category products has been refreshed":"The category products has been refreshed","Unable to delete an entry that no longer exists.":"Unable to delete an entry that no longer exists.","The entry has been successfully deleted.":"The entry has been successfully deleted.","Unable to load the CRUD resource : %s.":"Unable to load the CRUD resource : %s.","Unhandled crud resource":"Unhandled crud resource","You need to select at least one item to delete":"You need to select at least one item to delete","You need to define which action to perform":"You need to define which action to perform","%s has been processed, %s has not been processed.":"%s has been processed, %s has not been processed.","Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods":"Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods","Unable to proceed. No matching CRUD resource has been found.":"Unable to proceed. No matching CRUD resource has been found.","The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.":"The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.","The crud columns exceed the maximum column that can be exported (27)":"The crud columns exceed the maximum column that can be exported (27)","Unable to export if there is nothing to export.":"Unable to export if there is nothing to export.","This link has expired.":"This link has expired.","The requested file cannot be downloaded or has already been downloaded.":"The requested file cannot be downloaded or has already been downloaded.","The requested customer cannot be found.":"The requested customer cannot be found.","Void":"Void","Create Coupon":"Create Coupon","helps you creating a coupon.":"helps you creating a coupon.","Edit Coupon":"Edit Coupon","Editing an existing coupon.":"Editing an existing coupon.","Invalid Request.":"Invalid Request.","%s Coupons":"%s Coupons","Displays the customer account history for %s":"Displays the customer account history for %s","Account History : %s":"Account History : %s","%s Coupon History":"%s Coupon History","Unable to delete a group to which customers are still assigned.":"Unable to delete a group to which customers are still assigned.","The customer group has been deleted.":"The customer group has been deleted.","Unable to find the requested group.":"Unable to find the requested group.","The customer group has been successfully created.":"The customer group has been successfully created.","The customer group has been successfully saved.":"The customer group has been successfully saved.","Unable to transfer customers to the same account.":"Unable to transfer customers to the same account.","All the customers has been transferred to the new group %s.":"All the customers has been transferred to the new group %s.","The categories has been transferred to the group %s.":"The categories has been transferred to the group %s.","No customer identifier has been provided to proceed to the transfer.":"No customer identifier has been provided to proceed to the transfer.","Unable to find the requested group using the provided id.":"Unable to find the requested group using the provided id.","\"%s\" is not an instance of \"FieldsService\"":"\"%s\" is not an instance of \"FieldsService\"","Manage Medias":"Manage Medias","Upload and manage medias (photos).":"Upload and manage medias (photos).","The media name was successfully updated.":"The media name was successfully updated.","Modules List":"Modules List","List all available modules.":"List all available modules.","Upload A Module":"Upload A Module","Extends NexoPOS features with some new modules.":"Extends NexoPOS features with some new modules.","The notification has been successfully deleted":"The notification has been successfully deleted","All the notifications have been cleared.":"All the notifications have been cleared.","Payment Receipt — %s":"Payment Receipt — %s","Order Invoice — %s":"Order Invoice — %s","Order Refund Receipt — %s":"Order Refund Receipt — %s","Order Receipt — %s":"Order Receipt — %s","The printing event has been successfully dispatched.":"The printing event has been successfully dispatched.","There is a mismatch between the provided order and the order attached to the instalment.":"There is a mismatch between the provided order and the order attached to the instalment.","Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.":"Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.","You cannot change the status of an already paid procurement.":"You cannot change the status of an already paid procurement.","The procurement payment status has been changed successfully.":"The procurement payment status has been changed successfully.","The procurement has been marked as paid.":"The procurement has been marked as paid.","The product which id is %s doesnt\\'t belong to the procurement which id is %s":"The product which id is %s doesnt\\'t belong to the procurement which id is %s","The refresh process has started. You\\'ll get informed once it\\'s complete.":"The refresh process has started. You\\'ll get informed once it\\'s complete.","New Procurement":"New Procurement","Make a new procurement.":"Make a new procurement.","Edit Procurement":"Edit Procurement","Perform adjustment on existing procurement.":"Perform adjustment on existing procurement.","%s - Invoice":"%s - Invoice","list of product procured.":"list of product procured.","The product price has been refreshed.":"The product price has been refreshed.","The single variation has been deleted.":"The single variation has been deleted.","The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".":"The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".","Edit a product":"Edit a product","Makes modifications to a product":"Makes modifications to a product","Create a product":"Create a product","Add a new product on the system":"Add a new product on the system","Stock Adjustment":"Stock Adjustment","Adjust stock of existing products.":"Adjust stock of existing products.","No stock is provided for the requested product.":"No stock is provided for the requested product.","The product unit quantity has been deleted.":"The product unit quantity has been deleted.","Unable to proceed as the request is not valid.":"Unable to proceed as the request is not valid.","Unsupported action for the product %s.":"Unsupported action for the product %s.","The operation will cause a negative stock for the product \"%s\" (%s).":"The operation will cause a negative stock for the product \"%s\" (%s).","The stock has been adjustment successfully.":"The stock has been adjustment successfully.","Unable to add the product to the cart as it has expired.":"Unable to add the product to the cart as it has expired.","Unable to add a product that has accurate tracking enabled, using an ordinary barcode.":"Unable to add a product that has accurate tracking enabled, using an ordinary barcode.","There is no products matching the current request.":"There is no products matching the current request.","Print Labels":"Print Labels","Customize and print products labels.":"Customize and print products labels.","Procurements by \"%s\"":"Procurements by \"%s\"","%s\\'s Products":"%s\\'s Products","Sales Report":"Sales Report","Provides an overview over the sales during a specific period":"Provides an overview over the sales during a specific period","Sales Progress":"Sales Progress","Provides an overview over the best products sold during a specific period.":"Provides an overview over the best products sold during a specific period.","Sold Stock":"Sold Stock","Provides an overview over the sold stock during a specific period.":"Provides an overview over the sold stock during a specific period.","Stock Report":"Stock Report","Provides an overview of the products stock.":"Provides an overview of the products stock.","Profit Report":"Profit Report","Provides an overview of the provide of the products sold.":"Provides an overview of the provide of the products sold.","Provides an overview on the activity for a specific period.":"Provides an overview on the activity for a specific period.","Annual Report":"Annual Report","Sales By Payment Types":"Sales By Payment Types","Provide a report of the sales by payment types, for a specific period.":"Provide a report of the sales by payment types, for a specific period.","The report will be computed for the current year.":"The report will be computed for the current year.","Unknown report to refresh.":"Unknown report to refresh.","Customers Statement":"Customers Statement","Display the complete customer statement.":"Display the complete customer statement.","Invalid authorization code provided.":"Invalid authorization code provided.","The database has been successfully seeded.":"The database has been successfully seeded.","About":"About","Details about the environment.":"Details about the environment.","Core Version":"Core Version","Laravel Version":"Laravel Version","PHP Version":"PHP Version","Mb String Enabled":"Mb String Enabled","Zip Enabled":"Zip Enabled","Curl Enabled":"Curl Enabled","Math Enabled":"Math Enabled","XML Enabled":"XML Enabled","XDebug Enabled":"XDebug Enabled","File Upload Enabled":"File Upload Enabled","File Upload Size":"File Upload Size","Post Max Size":"Post Max Size","Max Execution Time":"Max Execution Time","%s Second(s)":"%s Second(s)","Memory Limit":"Memory Limit","Settings Page Not Found":"Settings Page Not Found","Customers Settings":"Customers Settings","Configure the customers settings of the application.":"Configure the customers settings of the application.","General Settings":"General Settings","Configure the general settings of the application.":"Configure the general settings of the application.","Orders Settings":"Orders Settings","POS Settings":"POS Settings","Configure the pos settings.":"Configure the pos settings.","Workers Settings":"Workers Settings","%s is not an instance of \"%s\".":"%s is not an instance of \"%s\".","Unable to find the requested product tax using the provided id":"Unable to find the requested product tax using the provided id","Unable to find the requested product tax using the provided identifier.":"Unable to find the requested product tax using the provided identifier.","The product tax has been created.":"The product tax has been created.","The product tax has been updated":"The product tax has been updated","Unable to retrieve the requested tax group using the provided identifier \"%s\".":"Unable to retrieve the requested tax group using the provided identifier \"%s\".","\"%s\" Record History":"\"%s\" Record History","Shows all histories generated by the transaction.":"Shows all histories generated by the transaction.","Transactions":"Transactions","Create New Transaction":"Create New Transaction","Set direct, scheduled transactions.":"Set direct, scheduled transactions.","Update Transaction":"Update Transaction","Permission Manager":"Permission Manager","Manage all permissions and roles":"Manage all permissions and roles","My Profile":"My Profile","Change your personal settings":"Change your personal settings","The permissions has been updated.":"The permissions has been updated.","The provided data aren\\'t valid":"The provided data aren\\'t valid","Dashboard":"Dashboard","Sunday":"Sunday","Monday":"Monday","Tuesday":"Tuesday","Wednesday":"Wednesday","Thursday":"Thursday","Friday":"Friday","Saturday":"Saturday","Welcome — NexoPOS":"Welcome — NexoPOS","The migration has successfully run.":"The migration has successfully run.","You\\'re not allowed to see this page.":"You\\'re not allowed to see this page.","The recovery has been explicitly disabled.":"The recovery has been explicitly disabled.","Your don\\'t have enough permission to perform this action.":"Your don\\'t have enough permission to perform this action.","You don\\'t have the necessary role to see this page.":"You don\\'t have the necessary role to see this page.","The registration has been explicitly disabled.":"The registration has been explicitly disabled.","Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.":"Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.","Unable to register. The registration is closed.":"Unable to register. The registration is closed.","Hold Order Cleared":"Hold Order Cleared","%s order(s) has recently been deleted as they has expired.":"%s order(s) has recently been deleted as they has expired.","Report Refreshed":"Report Refreshed","The yearly report has been successfully refreshed for the year \"%s\".":"The yearly report has been successfully refreshed for the year \"%s\".","Low Stock Alert":"Low Stock Alert","Scheduled Transactions":"Scheduled Transactions","the transaction \"%s\" was executed as scheduled on %s.":"the transaction \"%s\" was executed as scheduled on %s.","Procurement Refreshed":"Procurement Refreshed","The procurement \"%s\" has been successfully refreshed.":"The procurement \"%s\" has been successfully refreshed.","The transaction was deleted.":"The transaction was deleted.","Workers Aren\\'t Running":"Workers Aren\\'t Running","The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.":"The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.","[NexoPOS] Activate Your Account":"[NexoPOS] Activate Your Account","[NexoPOS] A New User Has Registered":"[NexoPOS] A New User Has Registered","[NexoPOS] Your Account Has Been Created":"[NexoPOS] Your Account Has Been Created","Unknown Payment":"Unknown Payment","Unable to find the permission with the namespace \"%s\".":"Unable to find the permission with the namespace \"%s\".","Unable to remove the permissions \"%s\". It doesn\\'t exists.":"Unable to remove the permissions \"%s\". It doesn\\'t exists.","The role was successfully assigned.":"The role was successfully assigned.","The role were successfully assigned.":"The role were successfully assigned.","Unable to identifier the provided role.":"Unable to identifier the provided role.","Partially Due":"Partially Due","Take Away":"Take Away","Good Condition":"Good Condition","Unable to open \"%s\" *, as it\\'s not closed.":"Unable to open \"%s\" *, as it\\'s not closed.","The register has been successfully opened":"The register has been successfully opened","Unable to open \"%s\" *, as it\\'s not opened.":"Unable to open \"%s\" *, as it\\'s not opened.","The register has been successfully closed":"The register has been successfully closed","Unable to cashing on \"%s\" *, as it\\'s not opened.":"Unable to cashing on \"%s\" *, as it\\'s not opened.","The provided amount is not allowed. The amount should be greater than \"0\". ":"The provided amount is not allowed. The amount should be greater than \"0\". ","The cash has successfully been stored":"The cash has successfully been stored","Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.":"Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.","Unable to cashout on \"%s":"Unable to cashout on \"%s","Not enough fund to cash out.":"Not enough fund to cash out.","The cash has successfully been disbursed.":"The cash has successfully been disbursed.","In Use":"In Use","Opened":"Opened","Cron Disabled":"Cron Disabled","Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.":"Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.","Task Scheduling Disabled":"Task Scheduling Disabled","NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.":"NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.","The requested module %s cannot be found.":"The requested module %s cannot be found.","the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.":"the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.","Delete Selected entries":"Delete Selected entries","%s entries has been deleted":"%s entries has been deleted","%s entries has not been deleted":"%s entries has not been deleted","A new entry has been successfully created.":"A new entry has been successfully created.","The entry has been successfully updated.":"The entry has been successfully updated.","Sorting is explicitely disabled for the column \"%s\".":"Sorting is explicitely disabled for the column \"%s\".","Unidentified Item":"Unidentified Item","Non-existent Item":"Non-existent Item","Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s":"Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s","Unable to delete this resource as it has %s dependency with %s item.":"Unable to delete this resource as it has %s dependency with %s item.","Unable to delete this resource as it has %s dependency with %s items.":"Unable to delete this resource as it has %s dependency with %s items.","Unable to find the customer using the provided id %s.":"Unable to find the customer using the provided id %s.","Unable to find the customer using the provided id.":"Unable to find the customer using the provided id.","The customer has been deleted.":"The customer has been deleted.","The email \"%s\" is already used for another customer.":"The email \"%s\" is already used for another customer.","The customer has been created.":"The customer has been created.","Unable to find the customer using the provided ID.":"Unable to find the customer using the provided ID.","The customer has been edited.":"The customer has been edited.","Unable to find the customer using the provided email.":"Unable to find the customer using the provided email.","Not enough credits on the customer account. Requested : %s, Remaining: %s.":"Not enough credits on the customer account. Requested : %s, Remaining: %s.","The customer account has been updated.":"The customer account has been updated.","The customer account doesn\\'t have enough funds to proceed.":"The customer account doesn\\'t have enough funds to proceed.","Issuing Coupon Failed":"Issuing Coupon Failed","Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.":"Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.","The provided coupon cannot be loaded for that customer.":"The provided coupon cannot be loaded for that customer.","The provided coupon cannot be loaded for the group assigned to the selected customer.":"The provided coupon cannot be loaded for the group assigned to the selected customer.","Unable to find a coupon with the provided code.":"Unable to find a coupon with the provided code.","The coupon has been updated.":"The coupon has been updated.","The group has been created.":"The group has been created.","Crediting":"Crediting","Deducting":"Deducting","Order Payment":"Order Payment","Order Refund":"Order Refund","Unknown Operation":"Unknown Operation","Unable to find a reference to the attached coupon : %s":"Unable to find a reference to the attached coupon : %s","Unable to use the coupon %s as it has expired.":"Unable to use the coupon %s as it has expired.","Unable to use the coupon %s at this moment.":"Unable to use the coupon %s at this moment.","You\\'re not allowed to use this coupon as it\\'s no longer active":"You\\'re not allowed to use this coupon as it\\'s no longer active","You\\'re not allowed to use this coupon it has reached the maximum usage allowed.":"You\\'re not allowed to use this coupon it has reached the maximum usage allowed.","Provide the billing first name.":"Provide the billing first name.","Countable":"Countable","Piece":"Piece","Small Box":"Small Box","Box":"Box","Terminal A":"Terminal A","Terminal B":"Terminal B","Sales Account":"Sales Account","Procurements Account":"Procurements Account","Sale Refunds Account":"Sale Refunds Account","Spoiled Goods Account":"Spoiled Goods Account","Customer Crediting Account":"Customer Crediting Account","Customer Debiting Account":"Customer Debiting Account","GST":"GST","SGST":"SGST","CGST":"CGST","Sample Procurement %s":"Sample Procurement %s","generated":"generated","The user attributes has been updated.":"The user attributes has been updated.","Administrator":"Administrator","Store Administrator":"Store Administrator","Store Cashier":"Store Cashier","User":"User","%s products were freed":"%s products were freed","Restoring cash flow from paid orders...":"Restoring cash flow from paid orders...","Restoring cash flow from refunded orders...":"Restoring cash flow from refunded orders...","%s on %s directories were deleted.":"%s on %s directories were deleted.","%s on %s files were deleted.":"%s on %s files were deleted.","%s link were deleted":"%s link were deleted","Unable to execute the following class callback string : %s":"Unable to execute the following class callback string : %s","The media has been deleted":"The media has been deleted","Unable to find the media.":"Unable to find the media.","Unable to find the requested file.":"Unable to find the requested file.","Unable to find the media entry":"Unable to find the media entry","Home":"Home","Payment Types":"Payment Types","Medias":"Medias","List":"List","Create Customer":"Create Customer","Customers Groups":"Customers Groups","Create Group":"Create Group","Reward Systems":"Reward Systems","Create Reward":"Create Reward","List Coupons":"List Coupons","Providers":"Providers","Create A Provider":"Create A Provider","Accounting":"Accounting","Create Transaction":"Create Transaction","Accounts":"Accounts","Create Account":"Create Account","Inventory":"Inventory","Create Product":"Create Product","Create Category":"Create Category","Create Unit":"Create Unit","Unit Groups":"Unit Groups","Create Unit Groups":"Create Unit Groups","Stock Flow Records":"Stock Flow Records","Taxes Groups":"Taxes Groups","Create Tax Groups":"Create Tax Groups","Create Tax":"Create Tax","Modules":"Modules","Upload Module":"Upload Module","Users":"Users","Create User":"Create User","Create Roles":"Create Roles","Permissions Manager":"Permissions Manager","Procurements":"Procurements","Reports":"Reports","Sale Report":"Sale Report","Incomes & Loosses":"Incomes & Loosses","Sales By Payments":"Sales By Payments","Settings":"Settings","Invoice Settings":"Invoice Settings","Workers":"Workers","Unable to locate the requested module.":"Unable to locate the requested module.","Failed to parse the configuration file on the following path \"%s\"":"Failed to parse the configuration file on the following path \"%s\"","No config.xml has been found on the directory : %s. This folder is ignored":"No config.xml has been found on the directory : %s. This folder is ignored","The module \"%s\" has been disabled as the dependency \"%s\" is missing. ":"The module \"%s\" has been disabled as the dependency \"%s\" is missing. ","The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ":"The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ","The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ":"The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ","The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ":"The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ","The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ":"The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ","Unable to detect the folder from where to perform the installation.":"Unable to detect the folder from where to perform the installation.","Invalid Module provided.":"Invalid Module provided.","Unable to upload this module as it\\'s older than the version installed":"Unable to upload this module as it\\'s older than the version installed","The module was \"%s\" was successfully installed.":"The module was \"%s\" was successfully installed.","The uploaded file is not a valid module.":"The uploaded file is not a valid module.","The module has been successfully installed.":"The module has been successfully installed.","The modules \"%s\" was deleted successfully.":"The modules \"%s\" was deleted successfully.","Unable to locate a module having as identifier \"%s\".":"Unable to locate a module having as identifier \"%s\".","The migration run successfully.":"The migration run successfully.","The migration file doens\\'t have a valid class name. Expected class : %s":"The migration file doens\\'t have a valid class name. Expected class : %s","Unable to locate the following file : %s":"Unable to locate the following file : %s","An Error Occurred \"%s\": %s":"An Error Occurred \"%s\": %s","The module has correctly been enabled.":"The module has correctly been enabled.","Unable to enable the module.":"Unable to enable the module.","The Module has been disabled.":"The Module has been disabled.","Unable to disable the module.":"Unable to disable the module.","All migration were executed.":"All migration were executed.","Unable to proceed, the modules management is disabled.":"Unable to proceed, the modules management is disabled.","A similar module has been found":"A similar module has been found","Missing required parameters to create a notification":"Missing required parameters to create a notification","The order has been placed.":"The order has been placed.","The order has been updated":"The order has been updated","The minimal payment of %s has\\'nt been provided.":"The minimal payment of %s has\\'nt been provided.","The percentage discount provided is not valid.":"The percentage discount provided is not valid.","A discount cannot exceed the sub total value of an order.":"A discount cannot exceed the sub total value of an order.","No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.":"No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.","The payment has been saved.":"The payment has been saved.","Unable to edit an order that is completely paid.":"Unable to edit an order that is completely paid.","Unable to proceed as one of the previous submitted payment is missing from the order.":"Unable to proceed as one of the previous submitted payment is missing from the order.","The order payment status cannot switch to hold as a payment has already been made on that order.":"The order payment status cannot switch to hold as a payment has already been made on that order.","The customer account funds are\\'nt enough to process the payment.":"The customer account funds are\\'nt enough to process the payment.","Unable to proceed. One of the submitted payment type is not supported.":"Unable to proceed. One of the submitted payment type is not supported.","Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.","Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.","By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.":"By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.","You\\'re not allowed to make payments.":"You\\'re not allowed to make payments.","Unnamed Product":"Unnamed Product","Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s":"Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s","Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.":"Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.","Unable to find the customer using the provided ID. The order creation has failed.":"Unable to find the customer using the provided ID. The order creation has failed.","Unable to proceed a refund on an unpaid order.":"Unable to proceed a refund on an unpaid order.","The current credit has been issued from a refund.":"The current credit has been issued from a refund.","The order has been successfully refunded.":"The order has been successfully refunded.","unable to proceed to a refund as the provided status is not supported.":"unable to proceed to a refund as the provided status is not supported.","The product %s has been successfully refunded.":"The product %s has been successfully refunded.","Unable to find the order product using the provided id.":"Unable to find the order product using the provided id.","Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier":"Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier","Unable to fetch the order as the provided pivot argument is not supported.":"Unable to fetch the order as the provided pivot argument is not supported.","The product has been added to the order \"%s\"":"The product has been added to the order \"%s\"","the order has been successfully computed.":"the order has been successfully computed.","The order has been deleted.":"The order has been deleted.","The product has been successfully deleted from the order.":"The product has been successfully deleted from the order.","Unable to find the requested product on the provider order.":"Unable to find the requested product on the provider order.","Unknown Type (%s)":"Unknown Type (%s)","Unknown Status (%s)":"Unknown Status (%s)","Unknown Product Status":"Unknown Product Status","Ongoing":"Ongoing","Ready":"Ready","Not Available":"Not Available","Failed":"Failed","Unpaid Orders Turned Due":"Unpaid Orders Turned Due","%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.":"%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.","No orders to handle for the moment.":"No orders to handle for the moment.","The order has been correctly voided.":"The order has been correctly voided.","Unable to find a reference of the provided coupon : %s":"Unable to find a reference of the provided coupon : %s","Unable to edit an already paid instalment.":"Unable to edit an already paid instalment.","The instalment has been saved.":"The instalment has been saved.","The instalment has been deleted.":"The instalment has been deleted.","The defined amount is not valid.":"The defined amount is not valid.","No further instalments is allowed for this order. The total instalment already covers the order total.":"No further instalments is allowed for this order. The total instalment already covers the order total.","The instalment has been created.":"The instalment has been created.","The provided status is not supported.":"The provided status is not supported.","The order has been successfully updated.":"The order has been successfully updated.","Unable to find the requested procurement using the provided identifier.":"Unable to find the requested procurement using the provided identifier.","Unable to find the assigned provider.":"Unable to find the assigned provider.","The procurement has been created.":"The procurement has been created.","Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.":"Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.","The provider has been edited.":"The provider has been edited.","The procurement has been deleted. %s included stock record(s) has been deleted as well.":"The procurement has been deleted. %s included stock record(s) has been deleted as well.","Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"":"Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"","The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item":"The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item","The operation has completed.":"The operation has completed.","The procurement has been refreshed.":"The procurement has been refreshed.","The procurement has been reset.":"The procurement has been reset.","The procurement products has been deleted.":"The procurement products has been deleted.","The procurement product has been updated.":"The procurement product has been updated.","Unable to find the procurement product using the provided id.":"Unable to find the procurement product using the provided id.","The product %s has been deleted from the procurement %s":"The product %s has been deleted from the procurement %s","The product with the following ID \"%s\" is not initially included on the procurement":"The product with the following ID \"%s\" is not initially included on the procurement","The procurement products has been updated.":"The procurement products has been updated.","Procurement Automatically Stocked":"Procurement Automatically Stocked","%s procurement(s) has recently been automatically procured.":"%s procurement(s) has recently been automatically procured.","Draft":"Draft","The category has been created":"The category has been created","The requested category doesn\\'t exists":"The requested category doesn\\'t exists","Unable to find the product using the provided id.":"Unable to find the product using the provided id.","Unable to find the requested product using the provided SKU.":"Unable to find the requested product using the provided SKU.","The category to which the product is attached doesn\\'t exists or has been deleted":"The category to which the product is attached doesn\\'t exists or has been deleted","Unable to create a product with an unknow type : %s":"Unable to create a product with an unknow type : %s","A variation within the product has a barcode which is already in use : %s.":"A variation within the product has a barcode which is already in use : %s.","A variation within the product has a SKU which is already in use : %s":"A variation within the product has a SKU which is already in use : %s","The variable product has been created.":"The variable product has been created.","The provided barcode \"%s\" is already in use.":"The provided barcode \"%s\" is already in use.","The provided SKU \"%s\" is already in use.":"The provided SKU \"%s\" is already in use.","The product has been saved.":"The product has been saved.","Unable to edit a product with an unknown type : %s":"Unable to edit a product with an unknown type : %s","A grouped product cannot be saved without any sub items.":"A grouped product cannot be saved without any sub items.","A grouped product cannot contain grouped product.":"A grouped product cannot contain grouped product.","The provided barcode is already in use.":"The provided barcode is already in use.","The provided SKU is already in use.":"The provided SKU is already in use.","The product has been updated":"The product has been updated","The requested sub item doesn\\'t exists.":"The requested sub item doesn\\'t exists.","The subitem has been saved.":"The subitem has been saved.","One of the provided product variation doesn\\'t include an identifier.":"One of the provided product variation doesn\\'t include an identifier.","The variable product has been updated.":"The variable product has been updated.","The product\\'s unit quantity has been updated.":"The product\\'s unit quantity has been updated.","Unable to reset this variable product \"%s":"Unable to reset this variable product \"%s","The product variations has been reset":"The product variations has been reset","The product has been reset.":"The product has been reset.","The product \"%s\" has been successfully deleted":"The product \"%s\" has been successfully deleted","Unable to find the requested variation using the provided ID.":"Unable to find the requested variation using the provided ID.","The product stock has been updated.":"The product stock has been updated.","The action is not an allowed operation.":"The action is not an allowed operation.","Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).":"Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).","The product quantity has been updated.":"The product quantity has been updated.","There is no variations to delete.":"There is no variations to delete.","%s product(s) has been deleted.":"%s product(s) has been deleted.","There is no products to delete.":"There is no products to delete.","%s products(s) has been deleted.":"%s products(s) has been deleted.","Unable to find the product, as the argument \"%s\" which value is \"%s":"Unable to find the product, as the argument \"%s\" which value is \"%s","The product variation has been successfully created.":"The product variation has been successfully created.","The product variation has been updated.":"The product variation has been updated.","The provider has been created.":"The provider has been created.","The provider has been updated.":"The provider has been updated.","Unable to find the provider using the specified id.":"Unable to find the provider using the specified id.","The provider has been deleted.":"The provider has been deleted.","Unable to find the provider using the specified identifier.":"Unable to find the provider using the specified identifier.","The provider account has been updated.":"The provider account has been updated.","An error occurred: %s.":"An error occurred: %s.","The procurement payment has been deducted.":"The procurement payment has been deducted.","The dashboard report has been updated.":"The dashboard report has been updated.","A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.":"A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.","Untracked Stock Operation":"Untracked Stock Operation","Unsupported action":"Unsupported action","The expense has been correctly saved.":"The expense has been correctly saved.","Member Since":"Member Since","Total Orders":"Total Orders","Today\\'s Orders":"Today\\'s Orders","Total Sales":"Total Sales","Today\\'s Sales":"Today\\'s Sales","Total Refunds":"Total Refunds","Today\\'s Refunds":"Today\\'s Refunds","Total Customers":"Total Customers","Today\\'s Customers":"Today\\'s Customers","The report has been computed successfully.":"The report has been computed successfully.","The table has been truncated.":"The table has been truncated.","No custom handler for the reset \"' . $mode . '\"":"No custom handler for the reset \"' . $mode . '\"","Untitled Settings Page":"Untitled Settings Page","No description provided for this settings page.":"No description provided for this settings page.","The form has been successfully saved.":"The form has been successfully saved.","Unable to reach the host":"Unable to reach the host","Unable to connect to the database using the credentials provided.":"Unable to connect to the database using the credentials provided.","Unable to select the database.":"Unable to select the database.","Access denied for this user.":"Access denied for this user.","Incorrect Authentication Plugin Provided.":"Incorrect Authentication Plugin Provided.","The connexion with the database was successful":"The connexion with the database was successful","NexoPOS has been successfully installed.":"NexoPOS has been successfully installed.","Cash":"Cash","Bank Payment":"Bank Payment","Customer Account":"Customer Account","Database connection was successful.":"Database connection was successful.","Unable to proceed. The parent tax doesn\\'t exists.":"Unable to proceed. The parent tax doesn\\'t exists.","A simple tax must not be assigned to a parent tax with the type \"simple":"A simple tax must not be assigned to a parent tax with the type \"simple","A tax cannot be his own parent.":"A tax cannot be his own parent.","The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".":"The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".","Unable to find the requested tax using the provided identifier.":"Unable to find the requested tax using the provided identifier.","The tax group has been correctly saved.":"The tax group has been correctly saved.","The tax has been correctly created.":"The tax has been correctly created.","The tax has been successfully deleted.":"The tax has been successfully deleted.","Unable to find the requested account type using the provided id.":"Unable to find the requested account type using the provided id.","You cannot delete an account type that has transaction bound.":"You cannot delete an account type that has transaction bound.","The account type has been deleted.":"The account type has been deleted.","The account has been created.":"The account has been created.","The process has been executed with some failures. %s\/%s process(es) has successed.":"The process has been executed with some failures. %s\/%s process(es) has successed.","Procurement : %s":"Procurement : %s","Refunding : %s":"Refunding : %s","Spoiled Good : %s":"Spoiled Good : %s","Sale : %s":"Sale : %s","Customer Credit Account":"Customer Credit Account","Customer Debit Account":"Customer Debit Account","Sales Refunds Account":"Sales Refunds Account","Register Cash-In Account":"Register Cash-In Account","Register Cash-Out Account":"Register Cash-Out Account","Not found account type: %s":"Not found account type: %s","Refund : %s":"Refund : %s","Customer Account Crediting : %s":"Customer Account Crediting : %s","Customer Account Purchase : %s":"Customer Account Purchase : %s","Customer Account Deducting : %s":"Customer Account Deducting : %s","Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.":"Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.","First Day Of Month":"First Day Of Month","Last Day Of Month":"Last Day Of Month","Month middle Of Month":"Month middle Of Month","{day} after month starts":"{day} after month starts","{day} before month ends":"{day} before month ends","Every {day} of the month":"Every {day} of the month","Days":"Days","Make sure set a day that is likely to be executed":"Make sure set a day that is likely to be executed","The Unit Group has been created.":"The Unit Group has been created.","The unit group %s has been updated.":"The unit group %s has been updated.","Unable to find the unit group to which this unit is attached.":"Unable to find the unit group to which this unit is attached.","The unit has been saved.":"The unit has been saved.","Unable to find the Unit using the provided id.":"Unable to find the Unit using the provided id.","The unit has been updated.":"The unit has been updated.","The unit group %s has more than one base unit":"The unit group %s has more than one base unit","The unit group %s doesn\\'t have a base unit":"The unit group %s doesn\\'t have a base unit","The unit has been deleted.":"The unit has been deleted.","The system role \"Users\" can be retrieved.":"The system role \"Users\" can be retrieved.","The default role that must be assigned to new users cannot be retrieved.":"The default role that must be assigned to new users cannot be retrieved.","The %s is already taken.":"The %s is already taken.","Clone of \"%s\"":"Clone of \"%s\"","The role has been cloned.":"The role has been cloned.","The widgets was successfully updated.":"The widgets was successfully updated.","The token was successfully created":"The token was successfully created","The token has been successfully deleted.":"The token has been successfully deleted.","unable to find this validation class %s.":"unable to find this validation class %s.","Store Name":"Store Name","This is the store name.":"This is the store name.","Store Address":"Store Address","The actual store address.":"The actual store address.","Store City":"Store City","The actual store city.":"The actual store city.","Store Phone":"Store Phone","The phone number to reach the store.":"The phone number to reach the store.","Store Email":"Store Email","The actual store email. Might be used on invoice or for reports.":"The actual store email. Might be used on invoice or for reports.","Store PO.Box":"Store PO.Box","The store mail box number.":"The store mail box number.","Store Fax":"Store Fax","The store fax number.":"The store fax number.","Store Additional Information":"Store Additional Information","Store additional information.":"Store additional information.","Store Square Logo":"Store Square Logo","Choose what is the square logo of the store.":"Choose what is the square logo of the store.","Store Rectangle Logo":"Store Rectangle Logo","Choose what is the rectangle logo of the store.":"Choose what is the rectangle logo of the store.","Define the default fallback language.":"Define the default fallback language.","Define the default theme.":"Define the default theme.","Currency":"Currency","Currency Symbol":"Currency Symbol","This is the currency symbol.":"This is the currency symbol.","Currency ISO":"Currency ISO","The international currency ISO format.":"The international currency ISO format.","Currency Position":"Currency Position","Before the amount":"Before the amount","After the amount":"After the amount","Define where the currency should be located.":"Define where the currency should be located.","Preferred Currency":"Preferred Currency","ISO Currency":"ISO Currency","Symbol":"Symbol","Determine what is the currency indicator that should be used.":"Determine what is the currency indicator that should be used.","Currency Thousand Separator":"Currency Thousand Separator","Define the symbol that indicate thousand. By default ":"Define the symbol that indicate thousand. By default ","Currency Decimal Separator":"Currency Decimal Separator","Define the symbol that indicate decimal number. By default \".\" is used.":"Define the symbol that indicate decimal number. By default \".\" is used.","Currency Precision":"Currency Precision","%s numbers after the decimal":"%s numbers after the decimal","Date Format":"Date Format","This define how the date should be defined. The default format is \"Y-m-d\".":"This define how the date should be defined. The default format is \"Y-m-d\".","This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".":"This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".","Registration":"Registration","Registration Open":"Registration Open","Determine if everyone can register.":"Determine if everyone can register.","Registration Role":"Registration Role","Select what is the registration role.":"Select what is the registration role.","Requires Validation":"Requires Validation","Force account validation after the registration.":"Force account validation after the registration.","Allow Recovery":"Allow Recovery","Allow any user to recover his account.":"Allow any user to recover his account.","Procurement Cash Flow Account":"Procurement Cash Flow Account","Sale Cash Flow Account":"Sale Cash Flow Account","Customer Credit Account (crediting)":"Customer Credit Account (crediting)","Customer Credit Account (debitting)":"Customer Credit Account (debitting)","Stock Return Account (Spoiled Items)":"Stock Return Account (Spoiled Items)","Stock return for spoiled items will be attached to this account":"Stock return for spoiled items will be attached to this account","Enable Reward":"Enable Reward","Will activate the reward system for the customers.":"Will activate the reward system for the customers.","Require Valid Email":"Require Valid Email","Will for valid unique email for every customer.":"Will for valid unique email for every customer.","Require Unique Phone":"Require Unique Phone","Every customer should have a unique phone number.":"Every customer should have a unique phone number.","Default Customer Account":"Default Customer Account","You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.":"You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.","Default Customer Group":"Default Customer Group","Select to which group each new created customers are assigned to.":"Select to which group each new created customers are assigned to.","Enable Credit & Account":"Enable Credit & Account","The customers will be able to make deposit or obtain credit.":"The customers will be able to make deposit or obtain credit.","Receipts":"Receipts","Receipt Template":"Receipt Template","Default":"Default","Choose the template that applies to receipts":"Choose the template that applies to receipts","Receipt Logo":"Receipt Logo","Provide a URL to the logo.":"Provide a URL to the logo.","Merge Products On Receipt\/Invoice":"Merge Products On Receipt\/Invoice","All similar products will be merged to avoid a paper waste for the receipt\/invoice.":"All similar products will be merged to avoid a paper waste for the receipt\/invoice.","Show Tax Breakdown":"Show Tax Breakdown","Will display the tax breakdown on the receipt\/invoice.":"Will display the tax breakdown on the receipt\/invoice.","Receipt Footer":"Receipt Footer","If you would like to add some disclosure at the bottom of the receipt.":"If you would like to add some disclosure at the bottom of the receipt.","Column A":"Column A","Available tags : ":"Available tags : ","{store_name}: displays the store name.":"{store_name}: displays the store name.","{store_email}: displays the store email.":"{store_email}: displays the store email.","{store_phone}: displays the store phone number.":"{store_phone}: displays the store phone number.","{cashier_name}: displays the cashier name.":"{cashier_name}: displays the cashier name.","{cashier_id}: displays the cashier id.":"{cashier_id}: displays the cashier id.","{order_code}: displays the order code.":"{order_code}: displays the order code.","{order_date}: displays the order date.":"{order_date}: displays the order date.","{order_type}: displays the order type.":"{order_type}: displays the order type.","{customer_name}: displays the customer name.":"{customer_name}: displays the customer name.","{customer_email}: displays the customer email.":"{customer_email}: displays the customer email.","{shipping_first_name}: displays the shipping first name.":"{shipping_first_name}: displays the shipping first name.","{shipping_last_name}: displays the shipping last name.":"{shipping_last_name}: displays the shipping last name.","{shipping_phone}: displays the shipping phone.":"{shipping_phone}: displays the shipping phone.","{shipping_address_1}: displays the shipping address_1.":"{shipping_address_1}: displays the shipping address_1.","{shipping_address_2}: displays the shipping address_2.":"{shipping_address_2}: displays the shipping address_2.","{shipping_country}: displays the shipping country.":"{shipping_country}: displays the shipping country.","{shipping_city}: displays the shipping city.":"{shipping_city}: displays the shipping city.","{shipping_pobox}: displays the shipping pobox.":"{shipping_pobox}: displays the shipping pobox.","{shipping_company}: displays the shipping company.":"{shipping_company}: displays the shipping company.","{shipping_email}: displays the shipping email.":"{shipping_email}: displays the shipping email.","{billing_first_name}: displays the billing first name.":"{billing_first_name}: displays the billing first name.","{billing_last_name}: displays the billing last name.":"{billing_last_name}: displays the billing last name.","{billing_phone}: displays the billing phone.":"{billing_phone}: displays the billing phone.","{billing_address_1}: displays the billing address_1.":"{billing_address_1}: displays the billing address_1.","{billing_address_2}: displays the billing address_2.":"{billing_address_2}: displays the billing address_2.","{billing_country}: displays the billing country.":"{billing_country}: displays the billing country.","{billing_city}: displays the billing city.":"{billing_city}: displays the billing city.","{billing_pobox}: displays the billing pobox.":"{billing_pobox}: displays the billing pobox.","{billing_company}: displays the billing company.":"{billing_company}: displays the billing company.","{billing_email}: displays the billing email.":"{billing_email}: displays the billing email.","Column B":"Column B","Available tags :":"Available tags :","Order Code Type":"Order Code Type","Determine how the system will generate code for each orders.":"Determine how the system will generate code for each orders.","Sequential":"Sequential","Random Code":"Random Code","Number Sequential":"Number Sequential","Allow Unpaid Orders":"Allow Unpaid Orders","Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".":"Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".","Allow Partial Orders":"Allow Partial Orders","Will prevent partially paid orders to be placed.":"Will prevent partially paid orders to be placed.","Quotation Expiration":"Quotation Expiration","Quotations will get deleted after they defined they has reached.":"Quotations will get deleted after they defined they has reached.","%s Days":"%s Days","Features":"Features","Show Quantity":"Show Quantity","Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.":"Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.","Merge Similar Items":"Merge Similar Items","Will enforce similar products to be merged from the POS.":"Will enforce similar products to be merged from the POS.","Allow Wholesale Price":"Allow Wholesale Price","Define if the wholesale price can be selected on the POS.":"Define if the wholesale price can be selected on the POS.","Allow Decimal Quantities":"Allow Decimal Quantities","Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.":"Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.","Allow Customer Creation":"Allow Customer Creation","Allow customers to be created on the POS.":"Allow customers to be created on the POS.","Quick Product":"Quick Product","Allow quick product to be created from the POS.":"Allow quick product to be created from the POS.","Editable Unit Price":"Editable Unit Price","Allow product unit price to be edited.":"Allow product unit price to be edited.","Show Price With Tax":"Show Price With Tax","Will display price with tax for each products.":"Will display price with tax for each products.","Order Types":"Order Types","Control the order type enabled.":"Control the order type enabled.","Numpad":"Numpad","Advanced":"Advanced","Will set what is the numpad used on the POS screen.":"Will set what is the numpad used on the POS screen.","Force Barcode Auto Focus":"Force Barcode Auto Focus","Will permanently enable barcode autofocus to ease using a barcode reader.":"Will permanently enable barcode autofocus to ease using a barcode reader.","Bubble":"Bubble","Ding":"Ding","Pop":"Pop","Cash Sound":"Cash Sound","Layout":"Layout","Retail Layout":"Retail Layout","Clothing Shop":"Clothing Shop","POS Layout":"POS Layout","Change the layout of the POS.":"Change the layout of the POS.","Sale Complete Sound":"Sale Complete Sound","New Item Audio":"New Item Audio","The sound that plays when an item is added to the cart.":"The sound that plays when an item is added to the cart.","Printing":"Printing","Printed Document":"Printed Document","Choose the document used for printing aster a sale.":"Choose the document used for printing aster a sale.","Printing Enabled For":"Printing Enabled For","All Orders":"All Orders","From Partially Paid Orders":"From Partially Paid Orders","Only Paid Orders":"Only Paid Orders","Determine when the printing should be enabled.":"Determine when the printing should be enabled.","Printing Gateway":"Printing Gateway","Default Printing (web)":"Default Printing (web)","Determine what is the gateway used for printing.":"Determine what is the gateway used for printing.","Enable Cash Registers":"Enable Cash Registers","Determine if the POS will support cash registers.":"Determine if the POS will support cash registers.","Cashier Idle Counter":"Cashier Idle Counter","5 Minutes":"5 Minutes","10 Minutes":"10 Minutes","15 Minutes":"15 Minutes","20 Minutes":"20 Minutes","30 Minutes":"30 Minutes","Selected after how many minutes the system will set the cashier as idle.":"Selected after how many minutes the system will set the cashier as idle.","Cash Disbursement":"Cash Disbursement","Allow cash disbursement by the cashier.":"Allow cash disbursement by the cashier.","Cash Registers":"Cash Registers","Keyboard Shortcuts":"Keyboard Shortcuts","Cancel Order":"Cancel Order","Keyboard shortcut to cancel the current order.":"Keyboard shortcut to cancel the current order.","Hold Order":"Hold Order","Keyboard shortcut to hold the current order.":"Keyboard shortcut to hold the current order.","Keyboard shortcut to create a customer.":"Keyboard shortcut to create a customer.","Proceed Payment":"Proceed Payment","Keyboard shortcut to proceed to the payment.":"Keyboard shortcut to proceed to the payment.","Open Shipping":"Open Shipping","Keyboard shortcut to define shipping details.":"Keyboard shortcut to define shipping details.","Open Note":"Open Note","Keyboard shortcut to open the notes.":"Keyboard shortcut to open the notes.","Order Type Selector":"Order Type Selector","Keyboard shortcut to open the order type selector.":"Keyboard shortcut to open the order type selector.","Toggle Fullscreen":"Toggle Fullscreen","Keyboard shortcut to toggle fullscreen.":"Keyboard shortcut to toggle fullscreen.","Quick Search":"Quick Search","Keyboard shortcut open the quick search popup.":"Keyboard shortcut open the quick search popup.","Toggle Product Merge":"Toggle Product Merge","Will enable or disable the product merging.":"Will enable or disable the product merging.","Amount Shortcuts":"Amount Shortcuts","The amount numbers shortcuts separated with a \"|\".":"The amount numbers shortcuts separated with a \"|\".","VAT Type":"VAT Type","Determine the VAT type that should be used.":"Determine the VAT type that should be used.","Flat Rate":"Flat Rate","Flexible Rate":"Flexible Rate","Products Vat":"Products Vat","Products & Flat Rate":"Products & Flat Rate","Products & Flexible Rate":"Products & Flexible Rate","Define the tax group that applies to the sales.":"Define the tax group that applies to the sales.","Define how the tax is computed on sales.":"Define how the tax is computed on sales.","VAT Settings":"VAT Settings","Enable Email Reporting":"Enable Email Reporting","Determine if the reporting should be enabled globally.":"Determine if the reporting should be enabled globally.","Supplies":"Supplies","Public Name":"Public Name","Define what is the user public name. If not provided, the username is used instead.":"Define what is the user public name. If not provided, the username is used instead.","Enable Workers":"Enable Workers","Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".":"Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".","Test":"Test","Best Cashiers":"Best Cashiers","Will display all cashiers who performs well.":"Will display all cashiers who performs well.","Best Customers":"Best Customers","Will display all customers with the highest purchases.":"Will display all customers with the highest purchases.","Expense Card Widget":"Expense Card Widget","Will display a card of current and overwall expenses.":"Will display a card of current and overwall expenses.","Incomplete Sale Card Widget":"Incomplete Sale Card Widget","Will display a card of current and overall incomplete sales.":"Will display a card of current and overall incomplete sales.","Orders Chart":"Orders Chart","Will display a chart of weekly sales.":"Will display a chart of weekly sales.","Orders Summary":"Orders Summary","Will display a summary of recent sales.":"Will display a summary of recent sales.","Profile":"Profile","Will display a profile widget with user stats.":"Will display a profile widget with user stats.","Sale Card Widget":"Sale Card Widget","Will display current and overall sales.":"Will display current and overall sales.","OK":"OK","Howdy, {name}":"Howdy, {name}","Return To Calendar":"Return To Calendar","Sun":"Sun","Mon":"Mon","Tue":"Tue","Wed":"Wed","Thr":"Thr","Fri":"Fri","Sat":"Sat","The left range will be invalid.":"The left range will be invalid.","The right range will be invalid.":"The right range will be invalid.","This field must contain a valid email address.":"This field must contain a valid email address.","Close":"Close","No submit URL was provided":"No submit URL was provided","Okay":"Okay","Go Back":"Go Back","Save":"Save","Filters":"Filters","Has Filters":"Has Filters","{entries} entries selected":"{entries} entries selected","Download":"Download","There is nothing to display...":"There is nothing to display...","Bulk Actions":"Bulk Actions","Apply":"Apply","displaying {perPage} on {items} items":"displaying {perPage} on {items} items","The document has been generated.":"The document has been generated.","Unexpected error occurred.":"Unexpected error occurred.","Clear Selected Entries ?":"Clear Selected Entries ?","Would you like to clear all selected entries ?":"Would you like to clear all selected entries ?","Sorting is explicitely disabled on this column":"Sorting is explicitely disabled on this column","Would you like to perform the selected bulk action on the selected entries ?":"Would you like to perform the selected bulk action on the selected entries ?","No selection has been made.":"No selection has been made.","No action has been selected.":"No action has been selected.","N\/D":"N\/D","Range Starts":"Range Starts","Range Ends":"Range Ends","Click here to add widgets":"Click here to add widgets","An unpexpected error occured while using the widget.":"An unpexpected error occured while using the widget.","Choose Widget":"Choose Widget","Select with widget you want to add to the column.":"Select with widget you want to add to the column.","Nothing to display":"Nothing to display","Enter":"Enter","Search...":"Search...","An unexpected error occurred.":"An unexpected error occurred.","Choose an option":"Choose an option","Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".":"Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".","Unamed Tab":"Unamed Tab","Unknown Status":"Unknown Status","The selected print gateway doesn't support this type of printing.":"The selected print gateway doesn't support this type of printing.","An error unexpected occured while printing.":"An error unexpected occured while printing.","millisecond| second| minute| hour| day| week| month| year| decade| century| millennium":"millisecond| second| minute| hour| day| week| month| year| decade| century| millennium","milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia":"milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia","and":"and","{date} ago":"{date} ago","In {date}":"In {date}","Password Forgotten ?":"Password Forgotten ?","Sign In":"Sign In","Register":"Register","Unable to proceed the form is not valid.":"Unable to proceed the form is not valid.","An unexpected error occured.":"An unexpected error occured.","Save Password":"Save Password","Remember Your Password ?":"Remember Your Password ?","Submit":"Submit","Already registered ?":"Already registered ?","Return":"Return","Warning":"Warning","Learn More":"Learn More","Change Type":"Change Type","Save Expense":"Save Expense","Confirm Your Action":"Confirm Your Action","No configuration were choosen. Unable to proceed.":"No configuration were choosen. Unable to proceed.","Conditions":"Conditions","By proceeding the current for and all your entries will be cleared. Would you like to proceed?":"By proceeding the current for and all your entries will be cleared. Would you like to proceed?","Today":"Today","Clients Registered":"Clients Registered","Commissions":"Commissions","Upload":"Upload","No modules matches your search term.":"No modules matches your search term.","Read More":"Read More","Enable":"Enable","Disable":"Disable","Press \"\/\" to search modules":"Press \"\/\" to search modules","No module has been uploaded yet.":"No module has been uploaded yet.","{module}":"{module}","Would you like to delete \"{module}\"? All data created by the module might also be deleted.":"Would you like to delete \"{module}\"? All data created by the module might also be deleted.","Gallery":"Gallery","You\\'re about to delete selected resources. Would you like to proceed?":"You\\'re about to delete selected resources. Would you like to proceed?","Medias Manager":"Medias Manager","Click Here Or Drop Your File To Upload":"Click Here Or Drop Your File To Upload","Search Medias":"Search Medias","Cancel":"Cancel","Nothing has already been uploaded":"Nothing has already been uploaded","Uploaded At":"Uploaded At","Bulk Select":"Bulk Select","Previous":"Previous","Next":"Next","Use Selected":"Use Selected","Nothing to care about !":"Nothing to care about !","Clear All":"Clear All","Would you like to clear all the notifications ?":"Would you like to clear all the notifications ?","Press "\/" to search permissions":"Press "\/" to search permissions","Permissions":"Permissions","Would you like to bulk edit a system role ?":"Would you like to bulk edit a system role ?","Save Settings":"Save Settings","Payment Summary":"Payment Summary","Order Status":"Order Status","Processing Status":"Processing Status","Refunded Products":"Refunded Products","All Refunds":"All Refunds","Would you proceed ?":"Would you proceed ?","The processing status of the order will be changed. Please confirm your action.":"The processing status of the order will be changed. Please confirm your action.","The delivery status of the order will be changed. Please confirm your action.":"The delivery status of the order will be changed. Please confirm your action.","Payment Method":"Payment Method","Before submitting the payment, choose the payment type used for that order.":"Before submitting the payment, choose the payment type used for that order.","Submit Payment":"Submit Payment","Select the payment type that must apply to the current order.":"Select the payment type that must apply to the current order.","Payment Type":"Payment Type","An unexpected error has occurred":"An unexpected error has occurred","The form is not valid.":"The form is not valid.","Update Instalment Date":"Update Instalment Date","Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.":"Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.","Create":"Create","Total :":"Total :","Remaining :":"Remaining :","Instalments:":"Instalments:","Add Instalment":"Add Instalment","This instalment doesn\\'t have any payment attached.":"This instalment doesn\\'t have any payment attached.","Would you like to create this instalment ?":"Would you like to create this instalment ?","Would you like to delete this instalment ?":"Would you like to delete this instalment ?","Would you like to update that instalment ?":"Would you like to update that instalment ?","Print":"Print","Store Details":"Store Details","Cashier":"Cashier","Billing Details":"Billing Details","Shipping Details":"Shipping Details","No payment possible for paid order.":"No payment possible for paid order.","Payment History":"Payment History","Unknown":"Unknown","You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?":"You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?","Refund With Products":"Refund With Products","Refund Shipping":"Refund Shipping","Add Product":"Add Product","Summary":"Summary","Payment Gateway":"Payment Gateway","Screen":"Screen","Select the product to perform a refund.":"Select the product to perform a refund.","Please select a payment gateway before proceeding.":"Please select a payment gateway before proceeding.","There is nothing to refund.":"There is nothing to refund.","Please provide a valid payment amount.":"Please provide a valid payment amount.","The refund will be made on the current order.":"The refund will be made on the current order.","Please select a product before proceeding.":"Please select a product before proceeding.","Not enough quantity to proceed.":"Not enough quantity to proceed.","Would you like to delete this product ?":"Would you like to delete this product ?","You're not allowed to add a discount on the product.":"You're not allowed to add a discount on the product.","You're not allowed to add a discount on the cart.":"You're not allowed to add a discount on the cart.","Unable to hold an order which payment status has been updated already.":"Unable to hold an order which payment status has been updated already.","Pay":"Pay","Order Type":"Order Type","Cash Register : {register}":"Cash Register : {register}","The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?":"The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?","Cart":"Cart","Comments":"Comments","No products added...":"No products added...","Price":"Price","Tax Inclusive":"Tax Inclusive","Apply Coupon":"Apply Coupon","You don't have the right to edit the purchase price.":"You don't have the right to edit the purchase price.","Dynamic product can\\'t have their price updated.":"Dynamic product can\\'t have their price updated.","The product price has been updated.":"The product price has been updated.","The editable price feature is disabled.":"The editable price feature is disabled.","You\\'re not allowed to edit the order settings.":"You\\'re not allowed to edit the order settings.","Unable to change the price mode. This feature has been disabled.":"Unable to change the price mode. This feature has been disabled.","Enable WholeSale Price":"Enable WholeSale Price","Would you like to switch to wholesale price ?":"Would you like to switch to wholesale price ?","Enable Normal Price":"Enable Normal Price","Would you like to switch to normal price ?":"Would you like to switch to normal price ?","Search for products.":"Search for products.","Toggle merging similar products.":"Toggle merging similar products.","Toggle auto focus.":"Toggle auto focus.","Current Balance":"Current Balance","Full Payment":"Full Payment","The customer account can only be used once per order. Consider deleting the previously used payment.":"The customer account can only be used once per order. Consider deleting the previously used payment.","Not enough funds to add {amount} as a payment. Available balance {balance}.":"Not enough funds to add {amount} as a payment. Available balance {balance}.","Confirm Full Payment":"Confirm Full Payment","You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?":"You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?","A full payment will be made using {paymentType} for {total}":"A full payment will be made using {paymentType} for {total}","You need to provide some products before proceeding.":"You need to provide some products before proceeding.","Unable to add the product, there is not enough stock. Remaining %s":"Unable to add the product, there is not enough stock. Remaining %s","Add Images":"Add Images","Remove Image":"Remove Image","New Group":"New Group","Available Quantity":"Available Quantity","Would you like to delete this group ?":"Would you like to delete this group ?","Your Attention Is Required":"Your Attention Is Required","The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?":"The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?","Please select at least one unit group before you proceed.":"Please select at least one unit group before you proceed.","There shoulnd\\'t be more option than there are units.":"There shoulnd\\'t be more option than there are units.","Unable to proceed, more than one product is set as featured":"Unable to proceed, more than one product is set as featured","Either Selling or Purchase unit isn\\'t defined. Unable to proceed.":"Either Selling or Purchase unit isn\\'t defined. Unable to proceed.","Unable to proceed as one of the unit group field is invalid":"Unable to proceed as one of the unit group field is invalid","Would you like to delete this variation ?":"Would you like to delete this variation ?","Details":"Details","No result match your query.":"No result match your query.","Unable to add product which doesn\\'t unit quantities defined.":"Unable to add product which doesn\\'t unit quantities defined.","Unable to proceed, no product were provided.":"Unable to proceed, no product were provided.","Unable to proceed, one or more product has incorrect values.":"Unable to proceed, one or more product has incorrect values.","Unable to proceed, the procurement form is not valid.":"Unable to proceed, the procurement form is not valid.","Unable to submit, no valid submit URL were provided.":"Unable to submit, no valid submit URL were provided.","No title is provided":"No title is provided","SKU, Barcode, Name":"SKU, Barcode, Name","Search products...":"Search products...","Set Sale Price":"Set Sale Price","Remove":"Remove","No product are added to this group.":"No product are added to this group.","Delete Sub item":"Delete Sub item","Would you like to delete this sub item?":"Would you like to delete this sub item?","Unable to add a grouped product.":"Unable to add a grouped product.","Choose The Unit":"Choose The Unit","An unexpected error occurred":"An unexpected error occurred","Ok":"Ok","The product already exists on the table.":"The product already exists on the table.","The specified quantity exceed the available quantity.":"The specified quantity exceed the available quantity.","Unable to proceed as the table is empty.":"Unable to proceed as the table is empty.","The stock adjustment is about to be made. Would you like to confirm ?":"The stock adjustment is about to be made. Would you like to confirm ?","More Details":"More Details","Useful to describe better what are the reasons that leaded to this adjustment.":"Useful to describe better what are the reasons that leaded to this adjustment.","The reason has been updated.":"The reason has been updated.","Would you like to remove this product from the table ?":"Would you like to remove this product from the table ?","Search":"Search","Search and add some products":"Search and add some products","Proceed":"Proceed","About Token":"About Token","Save Token":"Save Token","Generated Tokens":"Generated Tokens","Created":"Created","Last Use":"Last Use","Never":"Never","Expires":"Expires","Revoke":"Revoke","You haven\\'t yet generated any token for your account. Create one to get started.":"You haven\\'t yet generated any token for your account. Create one to get started.","Token Name":"Token Name","This will be used to identifier the token.":"This will be used to identifier the token.","Unable to proceed, the form is not valid.":"Unable to proceed, the form is not valid.","You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?":"You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?","Load":"Load","Sort Results":"Sort Results","Using Quantity Ascending":"Using Quantity Ascending","Using Quantity Descending":"Using Quantity Descending","Using Sales Ascending":"Using Sales Ascending","Using Sales Descending":"Using Sales Descending","Using Name Ascending":"Using Name Ascending","Using Name Descending":"Using Name Descending","Date : {date}":"Date : {date}","Document : Best Products":"Document : Best Products","By : {user}":"By : {user}","Progress":"Progress","No results to show.":"No results to show.","Start by choosing a range and loading the report.":"Start by choosing a range and loading the report.","Document : Sale By Payment":"Document : Sale By Payment","Search Customer...":"Search Customer...","Document : Customer Statement":"Document : Customer Statement","Customer : {selectedCustomerName}":"Customer : {selectedCustomerName}","Due Amount":"Due Amount","An unexpected error occured":"An unexpected error occured","Report Type":"Report Type","Document : {reportTypeName}":"Document : {reportTypeName}","There is no product to display...":"There is no product to display...","Low Stock Report":"Low Stock Report","Document : Payment Type":"Document : Payment Type","Unable to proceed. Select a correct time range.":"Unable to proceed. Select a correct time range.","Unable to proceed. The current time range is not valid.":"Unable to proceed. The current time range is not valid.","Document : Profit Report":"Document : Profit Report","Profit":"Profit","All Users":"All Users","Document : Sale Report":"Document : Sale Report","Sales Discounts":"Sales Discounts","Sales Taxes":"Sales Taxes","Product Taxes":"Product Taxes","Discounts":"Discounts","Categories Detailed":"Categories Detailed","Categories Summary":"Categories Summary","Allow you to choose the report type.":"Allow you to choose the report type.","Filter User":"Filter User","No user was found for proceeding the filtering.":"No user was found for proceeding the filtering.","Document : Sold Stock Report":"Document : Sold Stock Report","An Error Has Occured":"An Error Has Occured","Unable to load the report as the timezone is not set on the settings.":"Unable to load the report as the timezone is not set on the settings.","Year":"Year","Recompute":"Recompute","Document : Yearly Report":"Document : Yearly Report","Sales":"Sales","Expenses":"Expenses","Income":"Income","January":"January","Febuary":"Febuary","March":"March","April":"April","May":"May","June":"June","July":"July","August":"August","September":"September","October":"October","November":"November","December":"December","Would you like to proceed ?":"Would you like to proceed ?","The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.":"The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.","This form is not completely loaded.":"This form is not completely loaded.","No rules has been provided.":"No rules has been provided.","No valid run were provided.":"No valid run were provided.","Unable to proceed, the form is invalid.":"Unable to proceed, the form is invalid.","Unable to proceed, no valid submit URL is defined.":"Unable to proceed, no valid submit URL is defined.","No title Provided":"No title Provided","Add Rule":"Add Rule","Driver":"Driver","Set the database driver":"Set the database driver","Hostname":"Hostname","Provide the database hostname":"Provide the database hostname","Username required to connect to the database.":"Username required to connect to the database.","The username password required to connect.":"The username password required to connect.","Database Name":"Database Name","Provide the database name. Leave empty to use default file for SQLite Driver.":"Provide the database name. Leave empty to use default file for SQLite Driver.","Database Prefix":"Database Prefix","Provide the database prefix.":"Provide the database prefix.","Port":"Port","Provide the hostname port.":"Provide the hostname port.","Install":"Install","Application":"Application","That is the application name.":"That is the application name.","Provide the administrator username.":"Provide the administrator username.","Provide the administrator email.":"Provide the administrator email.","What should be the password required for authentication.":"What should be the password required for authentication.","Should be the same as the password above.":"Should be the same as the password above.","Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.":"Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.","Choose your language to get started.":"Choissisez une langue pour commencer.","Remaining Steps":"Remaining Steps","Database Configuration":"Database Configuration","Application Configuration":"Application Configuration","Language Selection":"Language Selection","Select what will be the default language of NexoPOS.":"Select what will be the default language of NexoPOS.","In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.":"In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.","Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.":"Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.","Please report this message to the support : ":"Please report this message to the support : ","Try Again":"Try Again","Updating":"Updating","Updating Modules":"Updating Modules","New Transaction":"New Transaction","Search Filters":"Search Filters","Clear Filters":"Clear Filters","Use Filters":"Use Filters","Would you like to delete this order":"Would you like to delete this order","The current order will be void. This action will be recorded. Consider providing a reason for this operation":"The current order will be void. This action will be recorded. Consider providing a reason for this operation","Order Options":"Order Options","Payments":"Payments","Refund & Return":"Refund & Return","available":"available","Order Refunds":"Order Refunds","Input":"Input","Close Register":"Close Register","Register Options":"Register Options","Unable to open this register. Only closed register can be opened.":"Unable to open this register. Only closed register can be opened.","Open Register : %s":"Open Register : %s","Open The Register":"Open The Register","Exit To Orders":"Exit To Orders","Looks like there is no registers. At least one register is required to proceed.":"Looks like there is no registers. At least one register is required to proceed.","Create Cash Register":"Create Cash Register","Load Coupon":"Load Coupon","Apply A Coupon":"Apply A Coupon","Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.":"Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.","Click here to choose a customer.":"Click here to choose a customer.","Loading Coupon For : ":"Loading Coupon For : ","Unlimited":"Unlimited","Not applicable":"Not applicable","Active Coupons":"Active Coupons","No coupons applies to the cart.":"No coupons applies to the cart.","The coupon is out from validity date range.":"The coupon is out from validity date range.","This coupon requires products that aren\\'t available on the cart at the moment.":"This coupon requires products that aren\\'t available on the cart at the moment.","This coupon requires products that belongs to specific categories that aren\\'t included at the moment.":"This coupon requires products that belongs to specific categories that aren\\'t included at the moment.","The coupon has applied to the cart.":"The coupon has applied to the cart.","You must select a customer before applying a coupon.":"You must select a customer before applying a coupon.","The coupon has been loaded.":"The coupon has been loaded.","Use":"Use","No coupon available for this customer":"No coupon available for this customer","Select Customer":"Select Customer","Selected":"Selected","No customer match your query...":"No customer match your query...","Create a customer":"Create a customer","Too many results.":"Too many results.","New Customer":"New Customer","Save Customer":"Save Customer","Not Authorized":"Not Authorized","Creating customers has been explicitly disabled from the settings.":"Creating customers has been explicitly disabled from the settings.","No Customer Selected":"No Customer Selected","In order to see a customer account, you need to select one customer.":"In order to see a customer account, you need to select one customer.","Summary For":"Summary For","Purchases":"Purchases","Owed":"Owed","Wallet Amount":"Wallet Amount","Last Purchases":"Last Purchases","No orders...":"No orders...","Transaction":"Transaction","No History...":"No History...","No coupons for the selected customer...":"No coupons for the selected customer...","Usage :":"Usage :","Code :":"Code :","Use Coupon":"Use Coupon","No rewards available the selected customer...":"No rewards available the selected customer...","Account Transaction":"Account Transaction","Removing":"Removing","Refunding":"Refunding","Unknow":"Unknow","An error occurred while opening the order options":"An error occurred while opening the order options","Use Customer ?":"Use Customer ?","No customer is selected. Would you like to proceed with this customer ?":"No customer is selected. Would you like to proceed with this customer ?","Change Customer ?":"Change Customer ?","Would you like to assign this customer to the ongoing order ?":"Would you like to assign this customer to the ongoing order ?","Product Discount":"Product Discount","Cart Discount":"Cart Discount","Order Reference":"Order Reference","The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.":"The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.","Confirm":"Confirm","Layaway Parameters":"Layaway Parameters","Minimum Payment":"Minimum Payment","Instalments & Payments":"Instalments & Payments","The final payment date must be the last within the instalments.":"The final payment date must be the last within the instalments.","There is no instalment defined. Please set how many instalments are allowed for this order":"There is no instalment defined. Please set how many instalments are allowed for this order","Skip Instalments":"Skip Instalments","You must define layaway settings before proceeding.":"You must define layaway settings before proceeding.","Please provide instalments before proceeding.":"Please provide instalments before proceeding.","Unable to process, the form is not valid":"Unable to process, the form is not valid","One or more instalments has an invalid date.":"One or more instalments has an invalid date.","One or more instalments has an invalid amount.":"One or more instalments has an invalid amount.","One or more instalments has a date prior to the current date.":"One or more instalments has a date prior to the current date.","The payment to be made today is less than what is expected.":"The payment to be made today is less than what is expected.","Total instalments must be equal to the order total.":"Total instalments must be equal to the order total.","Order Note":"Order Note","Note":"Note","More details about this order":"More details about this order","Display On Receipt":"Display On Receipt","Will display the note on the receipt":"Will display the note on the receipt","Open":"Open","Order Settings":"Order Settings","Define The Order Type":"Define The Order Type","No payment type has been selected on the settings. Please check your POS features and choose the supported order type":"No payment type has been selected on the settings. Please check your POS features and choose the supported order type","Configure":"Configure","Select Payment Gateway":"Select Payment Gateway","Gateway":"Gateway","Payment List":"Payment List","List Of Payments":"List Of Payments","No Payment added.":"No Payment added.","Layaway":"Layaway","On Hold":"On Hold","Nothing to display...":"Nothing to display...","Product Price":"Product Price","Define Quantity":"Define Quantity","Please provide a quantity":"Please provide a quantity","Product \/ Service":"Product \/ Service","Unable to proceed. The form is not valid.":"Unable to proceed. The form is not valid.","Provide a unique name for the product.":"Provide a unique name for the product.","Define the product type.":"Define the product type.","Normal":"Normal","Dynamic":"Dynamic","In case the product is computed based on a percentage, define the rate here.":"In case the product is computed based on a percentage, define the rate here.","Define what is the sale price of the item.":"Define what is the sale price of the item.","Set the quantity of the product.":"Set the quantity of the product.","Assign a unit to the product.":"Assign a unit to the product.","Define what is tax type of the item.":"Define what is tax type of the item.","Choose the tax group that should apply to the item.":"Choose the tax group that should apply to the item.","Search Product":"Search Product","There is nothing to display. Have you started the search ?":"There is nothing to display. Have you started the search ?","Unable to add the product":"Unable to add the product","The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?":"The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?","No result to result match the search value provided.":"No result to result match the search value provided.","Shipping & Billing":"Shipping & Billing","Tax & Summary":"Tax & Summary","No tax is active":"No tax is active","Select Tax":"Select Tax","Define the tax that apply to the sale.":"Define the tax that apply to the sale.","Define how the tax is computed":"Define how the tax is computed","The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.":"The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.","Define when that specific product should expire.":"Define when that specific product should expire.","Renders the automatically generated barcode.":"Renders the automatically generated barcode.","Adjust how tax is calculated on the item.":"Adjust how tax is calculated on the item.","Previewing :":"Previewing :","Units & Quantities":"Units & Quantities","Select":"Select","This QR code is provided to ease authentication on external applications.":"This QR code is provided to ease authentication on external applications.","The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.":"The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.","Copy And Close":"Copy And Close","The customer has been loaded":"The customer has been loaded","An error has occured":"An error has occured","Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.":"Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.","Some products has been added to the cart. Would youl ike to discard this order ?":"Some products has been added to the cart. Would youl ike to discard this order ?","This coupon is already added to the cart":"This coupon is already added to the cart","Unable to delete a payment attached to the order.":"Unable to delete a payment attached to the order.","No tax group assigned to the order":"No tax group assigned to the order","The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.":"The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.","Before saving this order, a minimum payment of {amount} is required":"Before saving this order, a minimum payment of {amount} is required","Unable to proceed":"Unable to proceed","Layaway defined":"Layaway defined","Initial Payment":"Initial Payment","In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?":"In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?","The request was canceled":"The request was canceled","Partially paid orders are disabled.":"Partially paid orders are disabled.","An order is currently being processed.":"An order is currently being processed.","An error has occurred while computing the product.":"An error has occurred while computing the product.","The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.":"The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.","The discount has been set to the cart subtotal.":"The discount has been set to the cart subtotal.","An unexpected error has occurred while fecthing taxes.":"An unexpected error has occurred while fecthing taxes.","OKAY":"OKAY","Order Deletion":"Order Deletion","The current order will be deleted as no payment has been made so far.":"The current order will be deleted as no payment has been made so far.","Void The Order":"Void The Order","The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.":"The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.","Unable to void an unpaid order.":"Unable to void an unpaid order.","No result to display.":"No result to display.","Well.. nothing to show for the meantime.":"Well.. nothing to show for the meantime.","Well.. nothing to show for the meantime":"Well.. nothing to show for the meantime","Incomplete Orders":"Incomplete Orders","Recents Orders":"Recents Orders","Weekly Sales":"Weekly Sales","Week Taxes":"Week Taxes","Net Income":"Net Income","Week Expenses":"Week Expenses","Current Week":"Current Week","Previous Week":"Previous Week","Loading...":"Loading...","Logout":"Logout","Unnamed Page":"Unnamed Page","No description":"No description","{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List":"{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List","Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.":"Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.","No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered":"No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered","Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.":"Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.","Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.":"Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.","Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}":"Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}","{{ ucwords( $column ) }}":"{{ ucwords( $column ) }}","Delete Selected Entries":"Delete Selected Entries","No description has been provided.":"No description has been provided.","Unamed Page":"Unamed Page","You\\'re using NexoPOS %s<\/a>":"You\\'re using NexoPOS %s<\/a>","Activate Your Account":"Activate Your Account","The account you have created for __%s__, require an activation. In order to proceed, please click on the following link":"The account you have created for __%s__, require an activation. In order to proceed, please click on the following link","Password Recovered":"Password Recovered","Your password has been successfully updated on __%s__. You can now login with your new password.":"Your password has been successfully updated on __%s__. You can now login with your new password.","If you haven\\'t asked this, please get in touch with the administrators.":"If you haven\\'t asked this, please get in touch with the administrators.","Password Recovery":"Password Recovery","Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ":"Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ","Reset Password":"Reset Password","New User Registration":"New User Registration","A new user has registered to your store (%s) with the email %s.":"A new user has registered to your store (%s) with the email %s.","Your Account Has Been Created":"Your Account Has Been Created","The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.":"The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.","Login":"Login","Environment Details":"Environment Details","Properties":"Properties","Extensions":"Extensions","Configurations":"Configurations","Save Coupon":"Save Coupon","This field is required":"This field is required","The form is not valid. Please check it and try again":"The form is not valid. Please check it and try again","mainFieldLabel not defined":"mainFieldLabel not defined","Create Customer Group":"Create Customer Group","Save a new customer group":"Save a new customer group","Update Group":"Update Group","Modify an existing customer group":"Modify an existing customer group","Managing Customers Groups":"Managing Customers Groups","Create groups to assign customers":"Create groups to assign customers","Managing Customers":"Managing Customers","List of registered customers":"List of registered customers","Your Module":"Your Module","Choose the zip file you would like to upload":"Choose the zip file you would like to upload","Managing Orders":"Managing Orders","Manage all registered orders.":"Manage all registered orders.","Payment receipt":"Payment receipt","Hide Dashboard":"Hide Dashboard","Receipt — %s":"Receipt — %s","Order receipt":"Order receipt","Refund receipt":"Refund receipt","Current Payment":"Current Payment","Total Paid":"Total Paid","Note: ":"Note: ","Condition:":"Condition:","Unable to proceed no products has been provided.":"Unable to proceed no products has been provided.","Unable to proceed, one or more products is not valid.":"Unable to proceed, one or more products is not valid.","Unable to proceed the procurement form is not valid.":"Unable to proceed the procurement form is not valid.","Unable to proceed, no submit url has been provided.":"Unable to proceed, no submit url has been provided.","SKU, Barcode, Product name.":"SKU, Barcode, Product name.","Date : %s":"Date : %s","First Address":"First Address","Second Address":"Second Address","Address":"Address","Search Products...":"Search Products...","Included Products":"Included Products","Apply Settings":"Apply Settings","Basic Settings":"Basic Settings","Visibility Settings":"Visibility Settings","Reward System Name":"Reward System Name","The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?":"The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?","Your system is running in production mode. You probably need to build the assets":"Your system is running in production mode. You probably need to build the assets","Your system is in development mode. Make sure to build the assets.":"Your system is in development mode. Make sure to build the assets.","How to change database configuration":"How to change database configuration","Setup":"Setup","NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.":"NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.","Common Database Issues":"Common Database Issues","Documentation":"Documentation","Log out":"Log out","Retry":"Retry","If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.":"If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.","Sign Up":"Sign Up","Assignation":"Assignation","Incoming Conversion":"Incoming Conversion","Outgoing Conversion":"Outgoing Conversion","Unknown Action":"Unknown Action","The event has been created at the following path \"%s\"!":"The event has been created at the following path \"%s\"!","The listener has been created on the path \"%s\"!":"The listener has been created on the path \"%s\"!","Unable to find a module having the identifier \"%s\".":"Unable to find a module having the identifier \"%s\".","Unsupported reset mode.":"Unsupported reset mode.","You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.":"You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.","Unable to find a module having \"%s\" as namespace.":"Unable to find a module having \"%s\" as namespace.","A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.":"A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.","A new form class was created at the path \"%s\"":"A new form class was created at the path \"%s\"","Convert Unit":"Convert Unit","The unit that is selected for convertion by default.":"The unit that is selected for convertion by default.","COGS":"COGS","Used to define the Cost of Goods Sold.":"Used to define the Cost of Goods Sold.","Visible":"Visible","Define whether the unit is available for sale.":"Define whether the unit is available for sale.","The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.":"The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.","Auto COGS":"Auto COGS","Shortage":"Shortage","Overage":"Overage","Assign the transaction to an account430":"Assign the transaction to an account430","Define how often this transaction occurs":"Define how often this transaction occurs","Define what is the type of the transactions.":"Define what is the type of the transactions.","Trigger":"Trigger","Would you like to trigger this expense now?":"Would you like to trigger this expense now?","Transactions History List":"Transactions History List","Display all transaction history.":"Display all transaction history.","No transaction history has been registered":"No transaction history has been registered","Add a new transaction history":"Add a new transaction history","Create a new transaction history":"Create a new transaction history","Register a new transaction history and save it.":"Register a new transaction history and save it.","Edit transaction history":"Edit transaction history","Modify Transactions history.":"Modify Transactions history.","Return to Transactions History":"Return to Transactions History","Oops, We\\'re Sorry!!!":"Oops, We\\'re Sorry!!!","Class: %s":"Class: %s","An error occured while performing your request.":"An error occured while performing your request.","A mismatch has occured between a module and it\\'s dependency.":"A mismatch has occured between a module and it\\'s dependency.","Post Too Large":"Post Too Large","The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini":"The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini","Assign the transaction to an account.":"Assign the transaction to an account.","Describe the direct transactions.":"Describe the direct transactions.","set the value of the transactions.":"set the value of the transactions.","The transactions will be multipled by the number of user having that role.":"The transactions will be multipled by the number of user having that role.","Set when the transaction should be executed.":"Set when the transaction should be executed.","The addresses were successfully updated.":"The addresses were successfully updated.","Welcome — %s":"Welcome — %s","Stock History For %s":"Stock History For %s","Set":"Set","The unit is not set for the product \"%s\".":"The unit is not set for the product \"%s\".","The adjustment quantity can\\'t be negative for the product \"%s\" (%s)":"The adjustment quantity can\\'t be negative for the product \"%s\" (%s)","Transactions Report":"Transactions Report","Combined Report":"Combined Report","Provides a combined report for every transactions on products.":"Provides a combined report for every transactions on products.","Unable to initiallize the settings page. The identifier \"' . $identifier . '":"Unable to initiallize the settings page. The identifier \"' . $identifier . '","Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.":"Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.","%s product(s) has low stock. Reorder those product(s) before it get exhausted.":"%s product(s) has low stock. Reorder those product(s) before it get exhausted.","An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A":"An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A","Symbolic Links Missing":"Symbolic Links Missing","The Symbolic Links to the public directory is missing. Your medias might be broken and not display.":"The Symbolic Links to the public directory is missing. Your medias might be broken and not display.","The manifest.json can\\'t be located inside the module %s on the path: %s":"The manifest.json can\\'t be located inside the module %s on the path: %s","%s — %s":"%s — %s","Stock History":"Stock History","Invoices":"Invoices","The migration file doens\\'t have a valid method name. Expected method : %s":"The migration file doens\\'t have a valid method name. Expected method : %s","The module %s cannot be enabled as his dependency (%s) is missing or not enabled.":"The module %s cannot be enabled as his dependency (%s) is missing or not enabled.","The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.":"The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.","Unable to proceed as the order is already paid.":"Unable to proceed as the order is already paid.","Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.":"Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.","Unable to find the product using the provided id \"%s\"":"Unable to find the product using the provided id \"%s\"","Unable to procure the product \"%s\" as the stock management is disabled.":"Unable to procure the product \"%s\" as the stock management is disabled.","Unable to procure the product \"%s\" as it is a grouped product.":"Unable to procure the product \"%s\" as it is a grouped product.","Adjusting grouped product inventory must result of a create, update, delete sale operation.":"Adjusting grouped product inventory must result of a create, update, delete sale operation.","Unsupported stock action \"%s\"":"Unsupported stock action \"%s\"","You cannot convert unit on a product having stock management disabled.":"You cannot convert unit on a product having stock management disabled.","The source and the destination unit can\\'t be the same. What are you trying to do ?":"The source and the destination unit can\\'t be the same. What are you trying to do ?","There is no source unit quantity having the name \"%s\" for the item %s":"There is no source unit quantity having the name \"%s\" for the item %s","There is no destination unit quantity having the name %s for the item %s":"There is no destination unit quantity having the name %s for the item %s","The source unit and the destination unit doens\\'t belong to the same unit group.":"The source unit and the destination unit doens\\'t belong to the same unit group.","The group %s has no base unit defined":"The group %s has no base unit defined","The conversion of %s(%s) to %s(%s) was successful":"The conversion of %s(%s) to %s(%s) was successful","The product has been deleted.":"The product has been deleted.","The report will be generated. Try loading the report within few minutes.":"The report will be generated. Try loading the report within few minutes.","The database has been wiped out.":"The database has been wiped out.","Created via tests":"Created via tests","The transaction has been successfully saved.":"The transaction has been successfully saved.","The transaction has been successfully updated.":"The transaction has been successfully updated.","Unable to find the transaction using the provided identifier.":"Unable to find the transaction using the provided identifier.","Unable to find the requested transaction using the provided id.":"Unable to find the requested transaction using the provided id.","The transction has been correctly deleted.":"The transction has been correctly deleted.","You cannot delete an account which has transactions bound.":"You cannot delete an account which has transactions bound.","The transaction account has been deleted.":"The transaction account has been deleted.","Unable to find the transaction account using the provided ID.":"Unable to find the transaction account using the provided ID.","The transaction account has been updated.":"The transaction account has been updated.","This transaction type can\\'t be triggered.":"This transaction type can\\'t be triggered.","The transaction has been successfully triggered.":"The transaction has been successfully triggered.","The transaction \"%s\" has been processed on day \"%s\".":"The transaction \"%s\" has been processed on day \"%s\".","The transaction \"%s\" has already been processed.":"The transaction \"%s\" has already been processed.","The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.":"The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.","The process has been correctly executed and all transactions has been processed.":"The process has been correctly executed and all transactions has been processed.","Procurement Liability : %s":"Procurement Liability : %s","Liabilities Account":"Liabilities Account","Configure the accounting feature":"Configure the accounting feature","Date Time Format":"Date Time Format","Date TimeZone":"Date TimeZone","Determine the default timezone of the store. Current Time: %s":"Determine the default timezone of the store. Current Time: %s","Configure how invoice and receipts are used.":"Configure how invoice and receipts are used.","configure settings that applies to orders.":"configure settings that applies to orders.","Report Settings":"Report Settings","Configure the settings":"Configure the settings","Wipes and Reset the database.":"Wipes and Reset the database.","Supply Delivery":"Supply Delivery","Configure the delivery feature.":"Configure the delivery feature.","Configure how background operations works.":"Configure how background operations works.","Every procurement will be added to the selected transaction account":"Every procurement will be added to the selected transaction account","Every sales will be added to the selected transaction account":"Every sales will be added to the selected transaction account","Every customer credit will be added to the selected transaction account":"Every customer credit will be added to the selected transaction account","Every customer credit removed will be added to the selected transaction account":"Every customer credit removed will be added to the selected transaction account","Sales refunds will be attached to this transaction account":"Sales refunds will be attached to this transaction account","Disbursement (cash register)":"Disbursement (cash register)","Transaction account for all cash disbursement.":"Transaction account for all cash disbursement.","Liabilities":"Liabilities","Transaction account for all liabilities.":"Transaction account for all liabilities.","Quick Product Default Unit":"Quick Product Default Unit","Set what unit is assigned by default to all quick product.":"Set what unit is assigned by default to all quick product.","Hide Exhausted Products":"Hide Exhausted Products","Will hide exhausted products from selection on the POS.":"Will hide exhausted products from selection on the POS.","Hide Empty Category":"Hide Empty Category","Category with no or exhausted products will be hidden from selection.":"Category with no or exhausted products will be hidden from selection.","This field must be similar to \"{other}\"\"":"This field must be similar to \"{other}\"\"","This field must have at least \"{length}\" characters\"":"This field must have at least \"{length}\" characters\"","This field must have at most \"{length}\" characters\"":"This field must have at most \"{length}\" characters\"","This field must be different from \"{other}\"\"":"This field must be different from \"{other}\"\"","Search result":"Search result","Choose...":"Choose...","The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.":"The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.","+{count} other":"+{count} other","An error occured":"An error occured","See Error":"See Error","Your uploaded files will displays here.":"Your uploaded files will displays here.","An error has occured while seleting the payment gateway.":"An error has occured while seleting the payment gateway.","Looks like there is either no products and no categories. How about creating those first to get started ?":"Looks like there is either no products and no categories. How about creating those first to get started ?","Create Categories":"Create Categories","An unexpected error has occured while loading the form. Please check the log or contact the support.":"An unexpected error has occured while loading the form. Please check the log or contact the support.","We were not able to load the units. Make sure there are units attached on the unit group selected.":"We were not able to load the units. Make sure there are units attached on the unit group selected.","Select the procured unit first before selecting the conversion unit.":"Select the procured unit first before selecting the conversion unit.","Convert to unit":"Convert to unit","An unexpected error has occured":"An unexpected error has occured","{product}: Purchase Unit":"{product}: Purchase Unit","The product will be procured on that unit.":"The product will be procured on that unit.","Unkown Unit":"Unkown Unit","Choose Tax":"Choose Tax","The tax will be assigned to the procured product.":"The tax will be assigned to the procured product.","Show Details":"Show Details","Hide Details":"Hide Details","Important Notes":"Important Notes","Stock Management Products.":"Stock Management Products.","Doesn\\'t work with Grouped Product.":"Doesn\\'t work with Grouped Product.","Convert":"Convert","Looks like no valid products matched the searched term.":"Looks like no valid products matched the searched term.","This product doesn't have any stock to adjust.":"This product doesn't have any stock to adjust.","Select Unit":"Select Unit","Select the unit that you want to adjust the stock with.":"Select the unit that you want to adjust the stock with.","A similar product with the same unit already exists.":"A similar product with the same unit already exists.","Select Procurement":"Select Procurement","Select the procurement that you want to adjust the stock with.":"Select the procurement that you want to adjust the stock with.","Select Action":"Select Action","Select the action that you want to perform on the stock.":"Select the action that you want to perform on the stock.","Would you like to remove the selected products from the table ?":"Would you like to remove the selected products from the table ?","Unit:":"Unit:","Operation:":"Operation:","Procurement:":"Procurement:","Reason:":"Reason:","Provided":"Provided","Not Provided":"Not Provided","Remove Selected":"Remove Selected","Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.":"Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.","Date Range : {date1} - {date2}":"Date Range : {date1} - {date2}","Range : {date1} — {date2}":"Range : {date1} — {date2}","All Categories":"All Categories","All Units":"All Units","Threshold":"Threshold","Select Units":"Select Units","An error has occured while loading the units.":"An error has occured while loading the units.","An error has occured while loading the categories.":"An error has occured while loading the categories.","Filter by Category":"Filter by Category","Filter by Units":"Filter by Units","An error has occured while loading the categories":"An error has occured while loading the categories","An error has occured while loading the units":"An error has occured while loading the units","By Type":"By Type","By User":"By User","By Category":"By Category","All Category":"All Category","Filter By Category":"Filter By Category","Allow you to choose the category.":"Allow you to choose the category.","No category was found for proceeding the filtering.":"No category was found for proceeding the filtering.","Filter by Unit":"Filter by Unit","Limit Results By Categories":"Limit Results By Categories","Limit Results By Units":"Limit Results By Units","Generate Report":"Generate Report","Document : Combined Products History":"Document : Combined Products History","Ini. Qty":"Ini. Qty","Added Quantity":"Added Quantity","Add. Qty":"Add. Qty","Sold Quantity":"Sold Quantity","Sold Qty":"Sold Qty","Defective Quantity":"Defective Quantity","Defec. Qty":"Defec. Qty","Final Quantity":"Final Quantity","Final Qty":"Final Qty","No data available":"No data available","Unable to edit this transaction":"Unable to edit this transaction","This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.":"This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.","Save Transaction":"Save Transaction","While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.":"While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.","The transaction is about to be saved. Would you like to confirm your action ?":"The transaction is about to be saved. Would you like to confirm your action ?","Unable to load the transaction":"Unable to load the transaction","You cannot edit this transaction if NexoPOS cannot perform background requests.":"You cannot edit this transaction if NexoPOS cannot perform background requests.","MySQL is selected as database driver":"MySQL is selected as database driver","Please provide the credentials to ensure NexoPOS can connect to the database.":"Please provide the credentials to ensure NexoPOS can connect to the database.","Sqlite is selected as database driver":"Sqlite is selected as database driver","Make sure Sqlite module is available for PHP. Your database will be located on the database directory.":"Make sure Sqlite module is available for PHP. Your database will be located on the database directory.","Checking database connectivity...":"Checking database connectivity...","NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.":"NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.","No refunds made so far. Good news right?":"No refunds made so far. Good news right?","{product} : Units":"{product} : Units","This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.":"This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.","Search for options":"Search for options","Invalid Error Message":"Invalid Error Message","Unamed Settings Page":"Unamed Settings Page","Description of unamed setting page":"Description of unamed setting page","Text Field":"Text Field","This is a sample text field.":"This is a sample text field.","Inclusive Product Taxes":"Inclusive Product Taxes","Exclusive Product Taxes":"Exclusive Product Taxes","Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.":"Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support."} \ No newline at end of file +{ + "Percentage": "Pourcentage", + "Flat": "Plat", + "Unknown Type": "Type inconnu", + "Male": "M\u00e2le", + "Female": "Femelle", + "Not Defined": "Non d\u00e9fini", + "Month Starts": "D\u00e9but du mois", + "Month Middle": "Milieu du mois", + "Month Ends": "Fin du mois", + "X Days After Month Starts": "X jours apr\u00e8s le d\u00e9but du mois", + "X Days Before Month Ends": "X jours avant la fin du mois", + "On Specific Day": "Le jour sp\u00e9cifique", + "Unknown Occurance": "Occurrence inconnue", + "Direct Transaction": "Transaction directe", + "Recurring Transaction": "Transaction r\u00e9currente", + "Entity Transaction": "Transaction d\u2019entit\u00e9", + "Scheduled Transaction": "Transaction planifi\u00e9e", + "Yes": "Oui", + "No": "Non", + "An invalid date were provided. Make sure it a prior date to the actual server date.": "Une date invalide a \u00e9t\u00e9 fournie. Assurez-vous qu\u2019il s\u2019agit d\u2019une date ant\u00e9rieure \u00e0 la date r\u00e9elle du serveur.", + "Computing report from %s...": "Calcul du rapport \u00e0 partir de %s\u2026", + "The operation was successful.": "L\u2019op\u00e9ration a r\u00e9ussi.", + "Unable to find a module having the identifier\/namespace \"%s\"": "Impossible de trouver un module ayant l\u2019identifiant \/ l\u2019espace de noms \"%s\".", + "What is the CRUD single resource name ? [Q] to quit.": "Quel est le nom de ressource unique CRUD ? [Q] pour quitter.", + "Please provide a valid value": "Veuillez fournir une valeur valide.", + "Which table name should be used ? [Q] to quit.": "Quel nom de table doit \u00eatre utilis\u00e9 ? [Q] pour quitter.", + "What slug should be used ? [Q] to quit.": "Quel slug doit \u00eatre utilis\u00e9 ? [Q] pour quitter.", + "What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.": "Quel est l\u2019espace de noms de la ressource CRUD. par exemple : system.users ? [Q] pour quitter.", + "Please provide a valid value.": "Veuillez fournir une valeur valide.", + "What is the full model name. eg: App\\Models\\Order ? [Q] to quit.": "Quel est le nom complet du mod\u00e8le. par exemple : App\\Models\\Order ? [Q] pour quitter.", + "If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "Si votre ressource CRUD a une relation, mentionnez-la comme suit \"foreign_table, foreign_key, local_key\" ? [S] pour sauter, [Q] pour quitter.", + "Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "Ajouter une nouvelle relation ? Mentionnez-la comme suit \"foreign_table, foreign_key, local_key\" ? [S] pour sauter, [Q] pour quitter.", + "Not enough parameters provided for the relation.": "Pas assez de param\u00e8tres fournis pour la relation.", + "What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.": "Quelles sont les colonnes remplissables sur la table : par exemple : username, email, password ? [S] pour sauter, [Q] pour quitter.", + "The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"": "La ressource CRUD \"%s\" pour le module \"%s\" a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e \u00e0 \"%s\"", + "The CRUD resource \"%s\" has been generated at %s": "La ressource CRUD \"%s\" a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e \u00e0 %s", + "An unexpected error has occurred.": "Une erreur inattendue s\u2019est produite.", + "File Name": "Nom de fichier", + "Status": "Statut", + "Unsupported argument provided: \"%s\"": "Argument non pris en charge fourni : \"%s\"", + "Done": "Termin\u00e9", + "The authorization token can't be changed manually.": "Le jeton d\u2019autorisation ne peut pas \u00eatre modifi\u00e9 manuellement.", + "Localization for %s extracted to %s": "La localisation pour %s a \u00e9t\u00e9 extraite vers %s", + "Translation process is complete for the module %s !": "Le processus de traduction est termin\u00e9 pour le module %s !", + "Unable to find the requested module.": "Impossible de trouver le module demand\u00e9.", + "\"%s\" is a reserved class name": "\"%s\" est un nom de classe r\u00e9serv\u00e9", + "The migration file has been successfully forgotten for the module %s.": "Le fichier de migration a \u00e9t\u00e9 oubli\u00e9 avec succ\u00e8s pour le module %s.", + "%s migration(s) has been deleted.": "%s migration(s) ont \u00e9t\u00e9 supprim\u00e9es.", + "The command has been created for the module \"%s\"!": "La commande a \u00e9t\u00e9 cr\u00e9\u00e9e pour le module \"%s\"!", + "The controller has been created for the module \"%s\"!": "Le contr\u00f4leur a \u00e9t\u00e9 cr\u00e9\u00e9 pour le module \"%s\"!", + "Would you like to delete \"%s\"?": "Voulez-vous supprimer \"%s\"?", + "Unable to find a module having as namespace \"%s\"": "Impossible de trouver un module ayant pour espace de noms \"%s\"", + "Name": "Nom", + "Namespace": "Espace de noms", + "Version": "Version", + "Author": "Auteur", + "Enabled": "Activ\u00e9", + "Path": "Chemin", + "Index": "Index", + "Entry Class": "Classe d'entr\u00e9e", + "Routes": "Routes", + "Api": "Api", + "Controllers": "Contr\u00f4leurs", + "Views": "Vues", + "Api File": "Fichier Api", + "Migrations": "Migrations", + "Attribute": "Attribut", + "Value": "Valeur", + "A request with the same name has been found !": "Une demande portant le m\u00eame nom a \u00e9t\u00e9 trouv\u00e9e !", + "There is no migrations to perform for the module \"%s\"": "Il n'y a pas de migrations \u00e0 effectuer pour le module \"%s\".", + "The module migration has successfully been performed for the module \"%s\"": "La migration du module a \u00e9t\u00e9 effectu\u00e9e avec succ\u00e8s pour le module \"%s\".", + "The products taxes were computed successfully.": "Les taxes des produits ont \u00e9t\u00e9 calcul\u00e9es avec succ\u00e8s.", + "The product barcodes has been refreshed successfully.": "Les codes-barres des produits ont \u00e9t\u00e9 actualis\u00e9s avec succ\u00e8s.", + "%s products where updated.": "%s produits ont \u00e9t\u00e9 mis \u00e0 jour.", + "The demo has been enabled.": "La d\u00e9mo a \u00e9t\u00e9 activ\u00e9e.", + "Unable to proceed, looks like the database can't be used.": "Impossible de proc\u00e9der, il semble que la base de donn\u00e9es ne puisse pas \u00eatre utilis\u00e9e.", + "What is the store name ? [Q] to quit.": "Quel est le nom du magasin ? [Q] pour quitter.", + "Please provide at least 6 characters for store name.": "Veuillez fournir au moins 6 caract\u00e8res pour le nom du magasin.", + "What is the administrator password ? [Q] to quit.": "Quel est le mot de passe administrateur ? [Q] pour quitter.", + "Please provide at least 6 characters for the administrator password.": "Veuillez fournir au moins 6 caract\u00e8res pour le mot de passe administrateur.", + "In which language would you like to install NexoPOS ?": "Dans quelle langue souhaitez-vous installer NexoPOS ?", + "You must define the language of installation.": "Vous devez d\u00e9finir la langue d'installation.", + "What is the administrator email ? [Q] to quit.": "Quel est l'e-mail de l'administrateur ? [Q] pour quitter.", + "Please provide a valid email for the administrator.": "Veuillez fournir une adresse e-mail valide pour l'administrateur.", + "What is the administrator username ? [Q] to quit.": "Quel est le nom d'utilisateur de l'administrateur ? [Q] pour quitter.", + "Please provide at least 5 characters for the administrator username.": "Veuillez fournir au moins 5 caract\u00e8res pour le nom d'utilisateur de l'administrateur.", + "Downloading latest dev build...": "T\u00e9l\u00e9chargement de la derni\u00e8re version en d\u00e9veloppement...", + "Reset project to HEAD...": "R\u00e9initialiser le projet \u00e0 HEAD...", + "Provide a name to the resource.": "Donnez un nom \u00e0 la ressource.", + "General": "G\u00e9n\u00e9ral", + "You\\re not allowed to do that.": "Vous n'\u00eates pas autoris\u00e9 \u00e0 faire cela.", + "Operation": "Op\u00e9ration", + "By": "Par", + "Date": "Date", + "Credit": "Cr\u00e9dit", + "Debit": "D\u00e9bit", + "Delete": "Supprimer", + "Would you like to delete this ?": "Voulez-vous supprimer ceci ?", + "Delete Selected Groups": "Supprimer les groupes s\u00e9lectionn\u00e9s", + "Coupons List": "Liste des coupons", + "Display all coupons.": "Afficher tous les coupons.", + "No coupons has been registered": "Aucun coupon n'a \u00e9t\u00e9 enregistr\u00e9.", + "Add a new coupon": "Ajouter un nouveau coupon", + "Create a new coupon": "Cr\u00e9er un nouveau coupon", + "Register a new coupon and save it.": "Enregistrer un nouveau coupon et enregistrer-le.", + "Edit coupon": "Modifier le coupon", + "Modify Coupon.": "Modifier le coupon.", + "Return to Coupons": "Retour aux coupons", + "Coupon Code": "Code de coupon", + "Might be used while printing the coupon.": "Peut \u00eatre utilis\u00e9 lors de l'impression du coupon.", + "Percentage Discount": "R\u00e9duction en pourcentage", + "Flat Discount": "R\u00e9duction plate", + "Type": "Type", + "Define which type of discount apply to the current coupon.": "D\u00e9finissez le type de r\u00e9duction qui s'applique au coupon actuel.", + "Discount Value": "Valeur de la r\u00e9duction", + "Define the percentage or flat value.": "D\u00e9finissez le pourcentage ou la valeur plate.", + "Valid Until": "Valable jusqu'\u00e0", + "Determine Until When the coupon is valid.": "D\u00e9terminez jusqu'\u00e0 quand le coupon est valable.", + "Minimum Cart Value": "Valeur minimale du panier", + "What is the minimum value of the cart to make this coupon eligible.": "Quelle est la valeur minimale du panier pour rendre ce coupon \u00e9ligible.", + "Maximum Cart Value": "Valeur maximale du panier", + "The value above which the current coupon can't apply.": "La valeur au-dessus de laquelle le coupon actuel ne peut pas s'appliquer.", + "Valid Hours Start": "Heure de d\u00e9but valide", + "Define form which hour during the day the coupons is valid.": "D\u00e9finir \u00e0 partir de quelle heure pendant la journ\u00e9e les coupons sont valables.", + "Valid Hours End": "Heure de fin valide", + "Define to which hour during the day the coupons end stop valid.": "D\u00e9finir \u00e0 quelle heure pendant la journ\u00e9e les coupons cessent d'\u00eatre valables.", + "Limit Usage": "Limite d'utilisation", + "Define how many time a coupons can be redeemed.": "D\u00e9finir combien de fois un coupon peut \u00eatre utilis\u00e9.", + "Products": "Produits", + "Select Products": "S\u00e9lectionner des produits", + "The following products will be required to be present on the cart, in order for this coupon to be valid.": "Les produits suivants devront \u00eatre pr\u00e9sents dans le panier pour que ce coupon soit valide.", + "Categories": "Cat\u00e9gories", + "Select Categories": "S\u00e9lectionner des cat\u00e9gories", + "The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.": "Les produits assign\u00e9s \u00e0 l'une de ces cat\u00e9gories doivent \u00eatre dans le panier pour que ce coupon soit valide.", + "Customer Groups": "Groupes de clients", + "Assigned To Customer Group": "Attribu\u00e9 au groupe de clients", + "Only the customers who belongs to the selected groups will be able to use the coupon.": "Seuls les clients appartenant aux groupes s\u00e9lectionn\u00e9s pourront utiliser le coupon.", + "Customers": "Clients", + "Assigned To Customers": "Attribu\u00e9 aux clients s\u00e9lectionn\u00e9s", + "Only the customers selected will be ale to use the coupon.": "Seuls les clients s\u00e9lectionn\u00e9s pourront utiliser le coupon.", + "Unable to save the coupon product as this product doens't exists.": "Impossible d'enregistrer le produit de coupon car ce produit n'existe pas.", + "Unable to save the coupon category as this category doens't exists.": "Impossible d'enregistrer la cat\u00e9gorie de coupon car cette cat\u00e9gorie n'existe pas.", + "Unable to save the coupon as one of the selected customer no longer exists.": "Impossible d'enregistrer le coupon car l'un des clients s\u00e9lectionn\u00e9s n'existe plus.", + "Unable to save the coupon as one of the selected customer group no longer exists.": "Impossible d'enregistrer le coupon car l'un des groupes de clients s\u00e9lectionn\u00e9s n'existe plus.", + "Unable to save the coupon as this category doens't exists.": "Impossible d'enregistrer le coupon car cette cat\u00e9gorie n'existe pas.", + "Unable to save the coupon as one of the customers provided no longer exists.": "Impossible d'enregistrer le coupon car l'un des clients fournis n'existe plus.", + "Unable to save the coupon as one of the provided customer group no longer exists.": "Impossible d'enregistrer le coupon car l'un des groupes de clients fournis n'existe plus.", + "Valid From": "Valable \u00e0 partir de", + "Valid Till": "Valable jusqu'\u00e0", + "Created At": "Cr\u00e9\u00e9 \u00e0", + "N\/A": "N \/ A", + "Undefined": "Ind\u00e9fini", + "Edit": "Modifier", + "History": "Histoire", + "Delete a licence": "Supprimer une licence", + "Coupon Order Histories List": "Liste des historiques de commande de coupons", + "Display all coupon order histories.": "Afficher tous les historiques de commande de coupons.", + "No coupon order histories has been registered": "Aucun historique de commande de coupon n'a \u00e9t\u00e9 enregistr\u00e9.", + "Add a new coupon order history": "Ajouter un nouvel historique de commande de coupon", + "Create a new coupon order history": "Cr\u00e9er un nouvel historique de commande de coupon", + "Register a new coupon order history and save it.": "Enregistrez un nouvel historique de commande de coupon et enregistrez-le.", + "Edit coupon order history": "Modifier l'historique des commandes de coupons", + "Modify Coupon Order History.": "Modifier l'historique des commandes de coupons.", + "Return to Coupon Order Histories": "Retour aux historiques des commandes de coupons", + "Id": "Id", + "Code": "Code", + "Customer_coupon_id": "Customer_coupon_id", + "Order_id": "Order_id", + "Discount_value": "Discount_value", + "Minimum_cart_value": "Minimum_cart_value", + "Maximum_cart_value": "Maximum_cart_value", + "Limit_usage": "Limit_usage", + "Uuid": "Uuid", + "Created_at": "Created_at", + "Updated_at": "Updated_at", + "Customer": "Client", + "Order": "Commande", + "Discount": "Remise", + "Would you like to delete this?": "Voulez-vous supprimer ceci?", + "Previous Amount": "Montant pr\u00e9c\u00e9dent", + "Amount": "Montant", + "Next Amount": "Montant suivant", + "Description": "Description", + "Restrict the records by the creation date.": "Restreindre les enregistrements par la date de cr\u00e9ation.", + "Created Between": "Cr\u00e9\u00e9 entre", + "Operation Type": "Type d'op\u00e9ration", + "Restrict the orders by the payment status.": "Restreindre les commandes par l'\u00e9tat de paiement.", + "Crediting (Add)": "Cr\u00e9dit (Ajouter)", + "Refund (Add)": "Remboursement (Ajouter)", + "Deducting (Remove)": "D\u00e9duction (Supprimer)", + "Payment (Remove)": "Paiement (Supprimer)", + "Restrict the records by the author.": "Restreindre les enregistrements par l'auteur.", + "Total": "Total", + "Customer Accounts List": "Liste des comptes clients", + "Display all customer accounts.": "Afficher tous les comptes clients.", + "No customer accounts has been registered": "Aucun compte client n'a \u00e9t\u00e9 enregistr\u00e9.", + "Add a new customer account": "Ajouter un nouveau compte client", + "Create a new customer account": "Cr\u00e9er un nouveau compte client", + "Register a new customer account and save it.": "Enregistrer un nouveau compte client et l'enregistrer.", + "Edit customer account": "Modifier le compte client", + "Modify Customer Account.": "Modifier le compte client.", + "Return to Customer Accounts": "Retour aux comptes clients", + "This will be ignored.": "Ceci sera ignor\u00e9.", + "Define the amount of the transaction": "D\u00e9finir le montant de la transaction.", + "Deduct": "D\u00e9duire", + "Add": "Ajouter", + "Define what operation will occurs on the customer account.": "D\u00e9finir l'op\u00e9ration qui se produira sur le compte client.", + "Customer Coupons List": "Liste des coupons clients", + "Display all customer coupons.": "Afficher tous les coupons clients.", + "No customer coupons has been registered": "Aucun coupon client n'a \u00e9t\u00e9 enregistr\u00e9.", + "Add a new customer coupon": "Ajouter un nouveau coupon client", + "Create a new customer coupon": "Cr\u00e9er un nouveau coupon client", + "Register a new customer coupon and save it.": "Enregistrer un nouveau coupon client et l'enregistrer.", + "Edit customer coupon": "Modifier le coupon client", + "Modify Customer Coupon.": "Modifier le coupon client.", + "Return to Customer Coupons": "Retour aux coupons clients", + "Usage": "Utilisation", + "Define how many time the coupon has been used.": "D\u00e9finir combien de fois le coupon a \u00e9t\u00e9 utilis\u00e9.", + "Limit": "Limite", + "Define the maximum usage possible for this coupon.": "D\u00e9finir l'utilisation maximale possible pour ce coupon.", + "Usage History": "Historique d'utilisation", + "Customer Coupon Histories List": "Liste des historiques de coupons clients", + "Display all customer coupon histories.": "Afficher tous les historiques de coupons clients.", + "No customer coupon histories has been registered": "Aucun historique de coupon client n'a \u00e9t\u00e9 enregistr\u00e9.", + "Add a new customer coupon history": "Ajouter un nouvel historique de coupon client", + "Create a new customer coupon history": "Cr\u00e9er un nouvel historique de coupon client", + "Register a new customer coupon history and save it.": "Enregistrer un nouvel historique de coupon client et l'enregistrer.", + "Edit customer coupon history": "Modifier l'historique des coupons clients", + "Modify Customer Coupon History.": "Modifier l'historique des coupons clients.", + "Return to Customer Coupon Histories": "Retour aux historiques des coupons clients", + "Order Code": "Code de commande", + "Coupon Name": "Nom du coupon", + "Customers List": "Liste des clients", + "Display all customers.": "Afficher tous les clients.", + "No customers has been registered": "Aucun client n'a \u00e9t\u00e9 enregistr\u00e9.", + "Add a new customer": "Ajouter un nouveau client", + "Create a new customer": "Cr\u00e9er un nouveau client", + "Register a new customer and save it.": "Enregistrer un nouveau client et l'enregistrer.", + "Edit customer": "Modifier le client", + "Modify Customer.": "Modifier le client.", + "Return to Customers": "Retour aux clients", + "Customer Name": "Nom du client", + "Provide a unique name for the customer.": "Fournir un nom unique pour le client.", + "Last Name": "Nom de famille", + "Provide the customer last name": "Fournir le nom de famille du client.", + "Credit Limit": "Limite de cr\u00e9dit", + "Set what should be the limit of the purchase on credit.": "D\u00e9finir ce qui devrait \u00eatre la limite d'achat \u00e0 cr\u00e9dit.", + "Group": "Groupe", + "Assign the customer to a group": "Attribuer le client \u00e0 un groupe.", + "Birth Date": "Date de naissance", + "Displays the customer birth date": "Affiche la date de naissance du client.", + "Email": "Email", + "Provide the customer email.": "Fournir l'e-mail du client.", + "Phone Number": "Num\u00e9ro de t\u00e9l\u00e9phone", + "Provide the customer phone number": "Fournir le num\u00e9ro de t\u00e9l\u00e9phone du client.", + "PO Box": "Bo\u00eete postale", + "Provide the customer PO.Box": "Fournir la bo\u00eete postale du client.", + "Gender": "Genre", + "Provide the customer gender.": "Fournir le sexe du client.", + "Billing Address": "Adresse de facturation", + "Shipping Address": "Adresse d'exp\u00e9dition", + "The assigned default customer group doesn't exist or is not defined.": "Le groupe de clients par d\u00e9faut assign\u00e9 n'existe pas ou n'est pas d\u00e9fini.", + "First Name": "Pr\u00e9nom", + "Phone": "T\u00e9l\u00e9phone", + "Account Credit": "Cr\u00e9dit du compte", + "Owed Amount": "Montant d\u00fb", + "Purchase Amount": "Montant d'achat", + "Orders": "Commandes", + "Rewards": "R\u00e9compenses", + "Coupons": "Coupons", + "Wallet History": "Historique du portefeuille", + "Delete a customers": "Supprimer un client.", + "Delete Selected Customers": "Supprimer les clients s\u00e9lectionn\u00e9s.", + "Customer Groups List": "Liste des groupes de clients", + "Display all Customers Groups.": "Afficher tous les groupes de clients.", + "No Customers Groups has been registered": "Aucun groupe de clients n'a \u00e9t\u00e9 enregistr\u00e9.", + "Add a new Customers Group": "Ajouter un nouveau groupe de clients", + "Create a new Customers Group": "Créer un nouveau groupe de clients", + "Register a new Customers Group and save it.": "Enregistrez un nouveau groupe de clients et enregistrez-le.", + "Edit Customers Group": "Modifier le groupe de clients", + "Modify Customers group.": "Modifier le groupe Clients.", + "Return to Customers Groups": "Retour aux groupes de clients", + "Reward System": "Système de récompense", + "Select which Reward system applies to the group": "Sélectionnez le système de récompense qui s'applique au groupe", + "Minimum Credit Amount": "Montant minimum du crédit", + "Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0": "Déterminez en pourcentage quel est le premier paiement minimum à crédit effectué par tous les clients du groupe, en cas de commande à crédit. Si laissé à \"0", + "A brief description about what this group is about": "Une brève description de ce qu'est ce groupe", + "Created On": "Créé sur", + "You're not allowed to do this operation": "Vous n'êtes pas autorisé à effectuer cette opération", + "Customer Orders List": "Liste des commandes clients", + "Display all customer orders.": "Affichez toutes les commandes des clients.", + "No customer orders has been registered": "Aucune commande client n'a été enregistrée", + "Add a new customer order": "Ajouter une nouvelle commande client", + "Create a new customer order": "Créer une nouvelle commande client", + "Register a new customer order and save it.": "Enregistrez une nouvelle commande client et enregistrez-la.", + "Edit customer order": "Modifier la commande client", + "Modify Customer Order.": "Modifier la commande client.", + "Return to Customer Orders": "Retour aux commandes clients", + "Change": "Changement", + "Created at": "Créé à", + "Customer Id": "N ° de client", + "Delivery Status": "Statut de livraison", + "Discount Percentage": "Pourcentage de remise", + "Discount Type": "Type de remise", + "Final Payment Date": "Date de paiement final", + "Tax Excluded": "Taxe non comprise", + "Tax Included": "Taxe inclu", + "Payment Status": "Statut de paiement", + "Process Status": "Statut du processus", + "Shipping": "Expédition", + "Shipping Rate": "Tarif d'expédition", + "Shipping Type": "Type d'expédition", + "Sub Total": "Sous-total", + "Tax Value": "Valeur fiscale", + "Tendered": "Soumis", + "Title": "Titre", + "Total installments": "Total des versements", + "Updated at": "Mis à jour à", + "Voidance Reason": "Raison de la nullité", + "Customer Rewards List": "Liste de récompenses client", + "Display all customer rewards.": "Affichez toutes les récompenses des clients.", + "No customer rewards has been registered": "Aucune récompense client n'a été enregistrée", + "Add a new customer reward": "Ajouter une nouvelle récompense client", + "Create a new customer reward": "Créer une nouvelle récompense client", + "Register a new customer reward and save it.": "Enregistrez une nouvelle récompense client et enregistrez-la.", + "Edit customer reward": "Modifier la récompense client", + "Modify Customer Reward.": "Modifier la récompense client.", + "Return to Customer Rewards": "Retour aux récompenses clients", + "Points": "Points", + "Target": "Cible", + "Reward Name": "Nom de la récompense", + "Last Update": "Dernière mise à jour", + "Account Name": "Nom du compte", + "Product Histories": "Historiques de produits", + "Display all product stock flow.": "Afficher tous les flux de stock de produits.", + "No products stock flow has been registered": "Aucun flux de stock de produits n'a été enregistré", + "Add a new products stock flow": "Ajouter un flux de stock de nouveaux produits", + "Create a new products stock flow": "Créer un nouveau flux de stock de produits", + "Register a new products stock flow and save it.": "Enregistrez un flux de stock de nouveaux produits et sauvegardez-le.", + "Edit products stock flow": "Modifier le flux de stock des produits", + "Modify Globalproducthistorycrud.": "Modifiez Globalproducthistorycrud.", + "Return to Product Histories": "Revenir aux historiques de produits", + "Product": "Produit", + "Procurement": "Approvisionnement", + "Unit": "Unité", + "Initial Quantity": "Quantité initiale", + "Quantity": "Quantité", + "New Quantity": "Nouvelle quantité", + "Total Price": "Prix ​​total", + "Added": "Ajoutée", + "Defective": "Défectueux", + "Deleted": "Supprimé", + "Lost": "Perdu", + "Removed": "Supprimé", + "Sold": "Vendu", + "Stocked": "Approvisionné", + "Transfer Canceled": "Transfert annulé", + "Incoming Transfer": "Transfert entrant", + "Outgoing Transfer": "Transfert sortant", + "Void Return": "Retour nul", + "Hold Orders List": "Liste des commandes retenues", + "Display all hold orders.": "Afficher tous les ordres de retenue.", + "No hold orders has been registered": "Aucun ordre de retenue n'a été enregistré", + "Add a new hold order": "Ajouter un nouvel ordre de retenue", + "Create a new hold order": "Créer un nouvel ordre de retenue", + "Register a new hold order and save it.": "Enregistrez un nouvel ordre de retenue et enregistrez-le.", + "Edit hold order": "Modifier l'ordre de retenue", + "Modify Hold Order.": "Modifier l'ordre de conservation.", + "Return to Hold Orders": "Retour aux ordres en attente", + "Updated At": "Mis à jour à", + "Continue": "Continuer", + "Restrict the orders by the creation date.": "Restreindre les commandes par date de création.", + "Paid": "Payé", + "Hold": "Prise", + "Partially Paid": "Partiellement payé", + "Partially Refunded": "Partiellement remboursé", + "Refunded": "Remboursé", + "Unpaid": "Non payé", + "Voided": "Annulé", + "Due": "Exigible", + "Due With Payment": "Due avec paiement", + "Restrict the orders by the author.": "Restreindre les commandes de l'auteur.", + "Restrict the orders by the customer.": "Restreindre les commandes du client.", + "Customer Phone": "Téléphone du client", + "Restrict orders using the customer phone number.": "Restreindre les commandes en utilisant le numéro de téléphone du client.", + "Cash Register": "Caisse", + "Restrict the orders to the cash registers.": "Limitez les commandes aux caisses enregistreuses.", + "Orders List": "Liste des commandes", + "Display all orders.": "Afficher toutes les commandes.", + "No orders has been registered": "Aucune commande n'a été enregistrée", + "Add a new order": "Ajouter une nouvelle commande", + "Create a new order": "Créer une nouvelle commande", + "Register a new order and save it.": "Enregistrez une nouvelle commande et enregistrez-la.", + "Edit order": "Modifier la commande", + "Modify Order.": "Modifier la commande.", + "Return to Orders": "Retour aux commandes", + "Discount Rate": "Taux de remise", + "The order and the attached products has been deleted.": "La commande et les produits joints ont été supprimés.", + "Options": "Options", + "Refund Receipt": "Reçu de remboursement", + "Invoice": "Facture", + "Receipt": "Reçu", + "Order Instalments List": "Liste des versements de commande", + "Display all Order Instalments.": "Afficher tous les versements de commande.", + "No Order Instalment has been registered": "Aucun versement de commande n'a été enregistré", + "Add a new Order Instalment": "Ajouter un nouveau versement de commande", + "Create a new Order Instalment": "Créer un nouveau versement de commande", + "Register a new Order Instalment and save it.": "Enregistrez un nouveau versement de commande et enregistrez-le.", + "Edit Order Instalment": "Modifier le versement de la commande", + "Modify Order Instalment.": "Modifier le versement de la commande.", + "Return to Order Instalment": "Retour au versement de la commande", + "Order Id": "Numéro de commande", + "Payment Types List": "Liste des types de paiement", + "Display all payment types.": "Affichez tous les types de paiement.", + "No payment types has been registered": "Aucun type de paiement n'a été enregistré", + "Add a new payment type": "Ajouter un nouveau type de paiement", + "Create a new payment type": "Créer un nouveau type de paiement", + "Register a new payment type and save it.": "Enregistrez un nouveau type de paiement et enregistrez-le.", + "Edit payment type": "Modifier le type de paiement", + "Modify Payment Type.": "Modifier le type de paiement.", + "Return to Payment Types": "Retour aux types de paiement", + "Label": "Étiquette", + "Provide a label to the resource.": "Fournissez une étiquette à la ressource.", + "Active": "Actif", + "Priority": "Priorité", + "Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".": "Définissez l'ordre de paiement. Plus le nombre est bas, plus il s'affichera en premier dans la fenêtre contextuelle de paiement. Doit commencer à partir de « 0 ».", + "Identifier": "Identifiant", + "A payment type having the same identifier already exists.": "Un type de paiement ayant le même identifiant existe déjà.", + "Unable to delete a read-only payments type.": "Impossible de supprimer un type de paiement en lecture seule.", + "Readonly": "Lecture seulement", + "Procurements List": "Liste des achats", + "Display all procurements.": "Affichez tous les achats.", + "No procurements has been registered": "Aucun marché n'a été enregistré", + "Add a new procurement": "Ajouter un nouvel approvisionnement", + "Create a new procurement": "Créer un nouvel approvisionnement", + "Register a new procurement and save it.": "Enregistrez un nouvel achat et enregistrez-le.", + "Edit procurement": "Modifier l'approvisionnement", + "Modify Procurement.": "Modifier l'approvisionnement.", + "Return to Procurements": "Retour aux approvisionnements", + "Provider Id": "Identifiant du fournisseur", + "Total Items": "Articles au total", + "Provider": "Fournisseur", + "Invoice Date": "Date de facture", + "Sale Value": "Valeur de vente", + "Purchase Value": "Valeur d'achat", + "Taxes": "Impôts", + "Set Paid": "Ensemble payant", + "Would you like to mark this procurement as paid?": "Souhaitez-vous marquer cet achat comme payé ?", + "Refresh": "Rafraîchir", + "Would you like to refresh this ?": "Souhaitez-vous rafraîchir ceci ?", + "Procurement Products List": "Liste des produits d'approvisionnement", + "Display all procurement products.": "Affichez tous les produits d’approvisionnement.", + "No procurement products has been registered": "Aucun produit d'approvisionnement n'a été enregistré", + "Add a new procurement product": "Ajouter un nouveau produit d'approvisionnement", + "Create a new procurement product": "Créer un nouveau produit d'approvisionnement", + "Register a new procurement product and save it.": "Enregistrez un nouveau produit d'approvisionnement et enregistrez-le.", + "Edit procurement product": "Modifier le produit d'approvisionnement", + "Modify Procurement Product.": "Modifier le produit d'approvisionnement.", + "Return to Procurement Products": "Retour aux produits d'approvisionnement", + "Expiration Date": "Date d'expiration", + "Define what is the expiration date of the product.": "Définissez quelle est la date de péremption du produit.", + "Barcode": "code à barre", + "On": "Sur", + "Category Products List": "Liste des produits de la catégorie", + "Display all category products.": "Afficher tous les produits de la catégorie.", + "No category products has been registered": "Aucun produit de catégorie n'a été enregistré", + "Add a new category product": "Ajouter un nouveau produit de catégorie", + "Create a new category product": "Créer une nouvelle catégorie de produit", + "Register a new category product and save it.": "Enregistrez un nouveau produit de catégorie et enregistrez-le.", + "Edit category product": "Modifier le produit de la catégorie", + "Modify Category Product.": "Modifier la catégorie Produit.", + "Return to Category Products": "Retour à la catégorie Produits", + "No Parent": "Aucun parent", + "Preview": "Aperçu", + "Provide a preview url to the category.": "Fournissez une URL d’aperçu de la catégorie.", + "Displays On POS": "Affiche sur le point de vente", + "If clicked to no, all products assigned to this category or all sub categories, won't appear at the POS.": "Si vous cliquez sur non, tous les produits attribués à cette catégorie ou à toutes les sous-catégories n'apparaîtront pas sur le point de vente.", + "Parent": "Parent", + "If this category should be a child category of an existing category": "Si cette catégorie doit être une catégorie enfant d'une catégorie existante", + "Total Products": "Produits totaux", + "Products List": "Liste de produits", + "Display all products.": "Afficher tous les produits.", + "No products has been registered": "Aucun produit n'a été enregistré", + "Add a new product": "Ajouter un nouveau produit", + "Create a new product": "Créer un nouveau produit", + "Register a new product and save it.": "Enregistrez un nouveau produit et enregistrez-le.", + "Edit product": "Modifier le produit", + "Modify Product.": "Modifier le produit.", + "Return to Products": "Retour aux produits", + "Assigned Unit": "Unité assignée", + "The assigned unit for sale": "L'unité attribuée à la vente", + "Sale Price": "Prix ​​de vente", + "Define the regular selling price.": "Définissez le prix de vente régulier.", + "Wholesale Price": "Prix ​​de gros", + "Define the wholesale price.": "Définissez le prix de gros.", + "Stock Alert": "Alerte boursière", + "Define whether the stock alert should be enabled for this unit.": "Définissez si l'alerte de stock doit être activée pour cette unité.", + "Low Quantity": "Faible quantité", + "Which quantity should be assumed low.": "Quelle quantité doit être supposée faible.", + "Preview Url": "URL d'aperçu", + "Provide the preview of the current unit.": "Fournit un aperçu de l’unité actuelle.", + "Identification": "Identification", + "Product unique name. If it' variation, it should be relevant for that variation": "Nom unique du produit. S'il s'agit d'une variation, cela devrait être pertinent pour cette variation", + "Select to which category the item is assigned.": "Sélectionnez à quelle catégorie l'élément est affecté.", + "Category": "Catégorie", + "Define the barcode value. Focus the cursor here before scanning the product.": "Définissez la valeur du code-barres. Concentrez le curseur ici avant de numériser le produit.", + "Define a unique SKU value for the product.": "Définissez une valeur SKU unique pour le produit.", + "SKU": "UGS", + "Define the barcode type scanned.": "Définissez le type de code-barres scanné.", + "EAN 8": "EAN8", + "EAN 13": "EAN13", + "Codabar": "Codabar", + "Code 128": "Code 128", + "Code 39": "Code 39", + "Code 11": "Code 11", + "UPC A": "CUP A", + "UPC E": "CUP E", + "Barcode Type": "Type de code-barres", + "Materialized Product": "Produit matérialisé", + "Dematerialized Product": "Produit dématérialisé", + "Grouped Product": "Produit groupé", + "Define the product type. Applies to all variations.": "Définir le type de produit. S'applique à toutes les variantes.", + "Product Type": "type de produit", + "On Sale": "En soldes", + "Hidden": "Caché", + "Define whether the product is available for sale.": "Définissez si le produit est disponible à la vente.", + "Enable the stock management on the product. Will not work for service or uncountable products.": "Activer la gestion des stocks sur le produit. Ne fonctionnera pas pour le service ou d'innombrables produits.", + "Stock Management Enabled": "Gestion des stocks activée", + "Groups": "Groupes", + "Units": "Unités", + "The product won't be visible on the grid and fetched only using the barcode reader or associated barcode.": "Le produit ne sera pas visible sur la grille et récupéré uniquement à l'aide du lecteur de code barre ou du code barre associé.", + "Accurate Tracking": "Suivi précis", + "What unit group applies to the actual item. This group will apply during the procurement.": "Quel groupe de base s'applique à l'article réel. Ce groupe s'appliquera lors de la passation des marchés.", + "Unit Group": "Groupe de base", + "Determine the unit for sale.": "Déterminez l’unité à vendre.", + "Selling Unit": "Unité de vente", + "Expiry": "Expiration", + "Product Expires": "Le produit expire", + "Set to \"No\" expiration time will be ignored.": "Réglé sur « Non », le délai d’expiration sera ignoré.", + "Prevent Sales": "Empêcher les ventes", + "Allow Sales": "Autoriser les ventes", + "Determine the action taken while a product has expired.": "Déterminez l’action entreprise alors qu’un produit est expiré.", + "On Expiration": "À l'expiration", + "Choose Group": "Choisir un groupe", + "Select the tax group that applies to the product\/variation.": "Sélectionnez le groupe de taxes qui s'applique au produit\/variation.", + "Tax Group": "Groupe fiscal", + "Inclusive": "Compris", + "Exclusive": "Exclusif", + "Define what is the type of the tax.": "Définissez quel est le type de taxe.", + "Tax Type": "Type de taxe", + "Images": "Images", + "Image": "Image", + "Choose an image to add on the product gallery": "Choisissez une image à ajouter sur la galerie de produits", + "Is Primary": "Est primaire", + "Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.": "Définissez si l'image doit être principale. S'il y a plus d'une image principale, une sera choisie pour vous.", + "Sku": "SKU", + "Materialized": "Matérialisé", + "Dematerialized": "Dématérialisé", + "Grouped": "Groupé", + "Unknown Type: %s": "Type inconnu : %s", + "Disabled": "Désactivé", + "Available": "Disponible", + "Unassigned": "Non attribué", + "See Quantities": "Voir les quantités", + "See History": "Voir l'historique", + "Would you like to delete selected entries ?": "Souhaitez-vous supprimer les entrées sélectionnées ?", + "Display all product histories.": "Afficher tous les historiques de produits.", + "No product histories has been registered": "Aucun historique de produit n'a été enregistré", + "Add a new product history": "Ajouter un nouvel historique de produit", + "Create a new product history": "Créer un nouvel historique de produit", + "Register a new product history and save it.": "Enregistrez un nouvel historique de produit et enregistrez-le.", + "Edit product history": "Modifier l'historique du produit", + "Modify Product History.": "Modifier l'historique du produit.", + "After Quantity": "Après Quantité", + "Before Quantity": "Avant Quantité", + "Order id": "Numéro de commande", + "Procurement Id": "Numéro d'approvisionnement", + "Procurement Product Id": "Identifiant du produit d'approvisionnement", + "Product Id": "Identifiant du produit", + "Unit Id": "Identifiant de l'unité", + "Unit Price": "Prix ​​unitaire", + "P. Quantity": "P. Quantité", + "N. Quantity": "N. Quantité", + "Returned": "Revenu", + "Transfer Rejected": "Transfert rejeté", + "Adjustment Return": "Retour d'ajustement", + "Adjustment Sale": "Vente d'ajustement", + "Product Unit Quantities List": "Liste des quantités unitaires de produits", + "Display all product unit quantities.": "Afficher toutes les quantités unitaires de produits.", + "No product unit quantities has been registered": "Aucune quantité unitaire de produit n'a été enregistrée", + "Add a new product unit quantity": "Ajouter une nouvelle quantité unitaire de produit", + "Create a new product unit quantity": "Créer une nouvelle quantité unitaire de produit", + "Register a new product unit quantity and save it.": "Enregistrez une nouvelle quantité unitaire de produit et enregistrez-la.", + "Edit product unit quantity": "Modifier la quantité de l'unité de produit", + "Modify Product Unit Quantity.": "Modifier la quantité unitaire du produit.", + "Return to Product Unit Quantities": "Retour aux quantités unitaires du produit", + "Product id": "Identifiant du produit", + "Providers List": "Liste des fournisseurs", + "Display all providers.": "Afficher tous les fournisseurs.", + "No providers has been registered": "Aucun fournisseur n'a été enregistré", + "Add a new provider": "Ajouter un nouveau fournisseur", + "Create a new provider": "Créer un nouveau fournisseur", + "Register a new provider and save it.": "Enregistrez un nouveau fournisseur et enregistrez-le.", + "Edit provider": "Modifier le fournisseur", + "Modify Provider.": "Modifier le fournisseur.", + "Return to Providers": "Retour aux fournisseurs", + "Provide the provider email. Might be used to send automated email.": "Fournissez l’e-mail du fournisseur. Peut être utilisé pour envoyer un e-mail automatisé.", + "Provider last name if necessary.": "Nom de famille du fournisseur si nécessaire.", + "Contact phone number for the provider. Might be used to send automated SMS notifications.": "Numéro de téléphone de contact du fournisseur. Peut être utilisé pour envoyer des notifications SMS automatisées.", + "Address 1": "Adresse 1", + "First address of the provider.": "Première adresse du fournisseur.", + "Address 2": "Adresse 2", + "Second address of the provider.": "Deuxième adresse du fournisseur.", + "Further details about the provider": "Plus de détails sur le fournisseur", + "Amount Due": "Montant dû", + "Amount Paid": "Le montant payé", + "See Procurements": "Voir les achats", + "See Products": "Voir les produits", + "Provider Procurements List": "Liste des achats des fournisseurs", + "Display all provider procurements.": "Affichez tous les achats des fournisseurs.", + "No provider procurements has been registered": "Aucun achat de fournisseur n'a été enregistré", + "Add a new provider procurement": "Ajouter un nouveau fournisseur d'approvisionnement", + "Create a new provider procurement": "Créer un nouvel approvisionnement fournisseur", + "Register a new provider procurement and save it.": "Enregistrez un nouvel achat de fournisseur et enregistrez-le.", + "Edit provider procurement": "Modifier l'approvisionnement du fournisseur", + "Modify Provider Procurement.": "Modifier l'approvisionnement du fournisseur.", + "Return to Provider Procurements": "Retour aux achats des fournisseurs", + "Delivered On": "Délivré le", + "Tax": "Impôt", + "Delivery": "Livraison", + "Payment": "Paiement", + "Items": "Articles", + "Provider Products List": "Liste des produits du fournisseur", + "Display all Provider Products.": "Afficher tous les produits du fournisseur.", + "No Provider Products has been registered": "Aucun produit de fournisseur n'a été enregistré", + "Add a new Provider Product": "Ajouter un nouveau produit fournisseur", + "Create a new Provider Product": "Créer un nouveau produit fournisseur", + "Register a new Provider Product and save it.": "Enregistrez un nouveau produit fournisseur et enregistrez-le.", + "Edit Provider Product": "Modifier le produit du fournisseur", + "Modify Provider Product.": "Modifier le produit du fournisseur.", + "Return to Provider Products": "Retour aux produits du fournisseur", + "Purchase Price": "Prix ​​d'achat", + "Registers List": "Liste des registres", + "Display all registers.": "Afficher tous les registres.", + "No registers has been registered": "Aucun registre n'a été enregistré", + "Add a new register": "Ajouter un nouveau registre", + "Create a new register": "Créer un nouveau registre", + "Register a new register and save it.": "Enregistrez un nouveau registre et enregistrez-le.", + "Edit register": "Modifier le registre", + "Modify Register.": "Modifier le registre.", + "Return to Registers": "Retour aux registres", + "Closed": "Fermé", + "Define what is the status of the register.": "Définir quel est le statut du registre.", + "Provide mode details about this cash register.": "Fournissez des détails sur le mode de cette caisse enregistreuse.", + "Unable to delete a register that is currently in use": "Impossible de supprimer un registre actuellement utilisé", + "Used By": "Utilisé par", + "Balance": "Équilibre", + "Register History": "Historique d'enregistrement", + "Register History List": "Liste d'historique d'enregistrement", + "Display all register histories.": "Afficher tous les historiques de registre.", + "No register histories has been registered": "Aucun historique d'enregistrement n'a été enregistré", + "Add a new register history": "Ajouter un nouvel historique d'inscription", + "Create a new register history": "Créer un nouvel historique d'inscription", + "Register a new register history and save it.": "Enregistrez un nouvel historique d'enregistrement et enregistrez-le.", + "Edit register history": "Modifier l'historique des inscriptions", + "Modify Registerhistory.": "Modifier l'historique du registre.", + "Return to Register History": "Revenir à l'historique des inscriptions", + "Register Id": "Identifiant d'enregistrement", + "Action": "Action", + "Register Name": "Nom du registre", + "Initial Balance": "Balance initiale", + "New Balance": "Nouvel équilibre", + "Transaction Type": "Type de transaction", + "Done At": "Fait à", + "Unchanged": "Inchangé", + "Reward Systems List": "Liste des systèmes de récompense", + "Display all reward systems.": "Affichez tous les systèmes de récompense.", + "No reward systems has been registered": "Aucun système de récompense n'a été enregistré", + "Add a new reward system": "Ajouter un nouveau système de récompense", + "Create a new reward system": "Créer un nouveau système de récompense", + "Register a new reward system and save it.": "Enregistrez un nouveau système de récompense et enregistrez-le.", + "Edit reward system": "Modifier le système de récompense", + "Modify Reward System.": "Modifier le système de récompense.", + "Return to Reward Systems": "Retour aux systèmes de récompense", + "From": "Depuis", + "The interval start here.": "L'intervalle commence ici.", + "To": "À", + "The interval ends here.": "L'intervalle se termine ici.", + "Points earned.": "Points gagnés.", + "Coupon": "Coupon", + "Decide which coupon you would apply to the system.": "Décidez quel coupon vous appliqueriez au système.", + "This is the objective that the user should reach to trigger the reward.": "C'est l'objectif que l'utilisateur doit atteindre pour déclencher la récompense.", + "A short description about this system": "Une brève description de ce système", + "Would you like to delete this reward system ?": "Souhaitez-vous supprimer ce système de récompense ?", + "Delete Selected Rewards": "Supprimer les récompenses sélectionnées", + "Would you like to delete selected rewards?": "Souhaitez-vous supprimer les récompenses sélectionnées ?", + "No Dashboard": "Pas de tableau de bord", + "Store Dashboard": "Tableau de bord du magasin", + "Cashier Dashboard": "Tableau de bord du caissier", + "Default Dashboard": "Tableau de bord par défaut", + "Roles List": "Liste des rôles", + "Display all roles.": "Afficher tous les rôles.", + "No role has been registered.": "Aucun rôle n'a été enregistré.", + "Add a new role": "Ajouter un nouveau rôle", + "Create a new role": "Créer un nouveau rôle", + "Create a new role and save it.": "Créez un nouveau rôle et enregistrez-le.", + "Edit role": "Modifier le rôle", + "Modify Role.": "Modifier le rôle.", + "Return to Roles": "Retour aux rôles", + "Provide a name to the role.": "Donnez un nom au rôle.", + "Should be a unique value with no spaces or special character": "Doit être une valeur unique sans espaces ni caractères spéciaux", + "Provide more details about what this role is about.": "Fournissez plus de détails sur la nature de ce rôle.", + "Unable to delete a system role.": "Impossible de supprimer un rôle système.", + "Clone": "Cloner", + "Would you like to clone this role ?": "Souhaitez-vous cloner ce rôle ?", + "You do not have enough permissions to perform this action.": "Vous ne disposez pas de suffisamment d'autorisations pour effectuer cette action.", + "Taxes List": "Liste des taxes", + "Display all taxes.": "Afficher toutes les taxes.", + "No taxes has been registered": "Aucune taxe n'a été enregistrée", + "Add a new tax": "Ajouter une nouvelle taxe", + "Create a new tax": "Créer une nouvelle taxe", + "Register a new tax and save it.": "Enregistrez une nouvelle taxe et enregistrez-la.", + "Edit tax": "Modifier la taxe", + "Modify Tax.": "Modifier la taxe.", + "Return to Taxes": "Retour aux Impôts", + "Provide a name to the tax.": "Donnez un nom à la taxe.", + "Assign the tax to a tax group.": "Affectez la taxe à un groupe fiscal.", + "Rate": "Taux", + "Define the rate value for the tax.": "Définissez la valeur du taux de la taxe.", + "Provide a description to the tax.": "Fournissez une description de la taxe.", + "Taxes Groups List": "Liste des groupes de taxes", + "Display all taxes groups.": "Afficher tous les groupes de taxes.", + "No taxes groups has been registered": "Aucun groupe de taxes n'a été enregistré", + "Add a new tax group": "Ajouter un nouveau groupe de taxes", + "Create a new tax group": "Créer un nouveau groupe de taxes", + "Register a new tax group and save it.": "Enregistrez un nouveau groupe fiscal et enregistrez-le.", + "Edit tax group": "Modifier le groupe de taxes", + "Modify Tax Group.": "Modifier le groupe de taxes.", + "Return to Taxes Groups": "Retour aux groupes de taxes", + "Provide a short description to the tax group.": "Fournissez une brève description du groupe fiscal.", + "Accounts List": "Liste des comptes", + "Display All Accounts.": "Afficher tous les comptes.", + "No Account has been registered": "Aucun compte n'a été enregistré", + "Add a new Account": "Ajouter un nouveau compte", + "Create a new Account": "Créer un nouveau compte", + "Register a new Account and save it.": "Enregistrez un nouveau compte et enregistrez-le.", + "Edit Account": "Modifier le compte", + "Modify An Account.": "Modifier un compte.", + "Return to Accounts": "Retour aux comptes", + "All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.": "Toutes les entités rattachées à cette catégorie produiront soit un « crédit » soit un « débit » à l'historique des flux de trésorerie.", + "Account": "Compte", + "Provide the accounting number for this category.": "Fournir le numéro comptable de cette catégorie.", + "Transactions List": "Liste des transactions", + "Display all transactions.": "Afficher toutes les transactions.", + "No transactions has been registered": "Aucune transaction n'a été enregistrée", + "Add a new transaction": "Ajouter une nouvelle transaction", + "Create a new transaction": "Créer une nouvelle transaction", + "Register a new transaction and save it.": "Enregistrez une nouvelle transaction et sauvegardez-la.", + "Edit transaction": "Modifier l'opération", + "Modify Transaction.": "Modifier l'opération.", + "Return to Transactions": "Retour aux transactions", + "determine if the transaction is effective or not. Work for recurring and not recurring transactions.": "déterminer si la transaction est effective ou non. Travaillez pour les transactions récurrentes et non récurrentes.", + "Users Group": "Groupe d'utilisateurs", + "Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.": "Attribuez la transaction au groupe d'utilisateurs. la Transaction sera donc multipliée par le nombre d'entité.", + "None": "Aucun", + "Transaction Account": "Compte de transactions", + "Is the value or the cost of the transaction.": "Est la valeur ou le coût de la transaction.", + "If set to Yes, the transaction will trigger on defined occurrence.": "Si la valeur est Oui, la transaction se déclenchera sur une occurrence définie.", + "Recurring": "Récurrent", + "Start of Month": "Début du mois", + "Mid of Month": "Milieu du mois", + "End of Month": "Fin du mois", + "X days Before Month Ends": "X jours avant la fin du mois", + "X days After Month Starts": "X jours après le début du mois", + "Occurrence": "Occurrence", + "Occurrence Value": "Valeur d'occurrence", + "Must be used in case of X days after month starts and X days before month ends.": "Doit être utilisé X jours après le début du mois et X jours avant la fin du mois.", + "Scheduled": "Programmé", + "Set the scheduled date.": "Fixez la date prévue.", + "Units List": "Liste des unités", + "Display all units.": "Afficher toutes les unités.", + "No units has been registered": "Aucune part n'a été enregistrée", + "Add a new unit": "Ajouter une nouvelle unité", + "Create a new unit": "Créer une nouvelle unité", + "Register a new unit and save it.": "Enregistrez une nouvelle unité et sauvegardez-la.", + "Edit unit": "Modifier l'unité", + "Modify Unit.": "Modifier l'unité.", + "Return to Units": "Retour aux unités", + "Provide a unique value for this unit. Might be composed from a name but shouldn't include space or special characters.": "Fournissez une valeur unique pour cette unité. Peut être composé à partir d'un nom mais ne doit pas inclure d'espace ou de caractères spéciaux.", + "Preview URL": "URL d'aperçu", + "Preview of the unit.": "Aperçu de l'unité.", + "Define the value of the unit.": "Définissez la valeur de l'unité.", + "Define to which group the unit should be assigned.": "Définissez à quel groupe l'unité doit être affectée.", + "Base Unit": "Unité de base", + "Determine if the unit is the base unit from the group.": "Déterminez si l’unité est l’unité de base du groupe.", + "Provide a short description about the unit.": "Fournissez une brève description de l’unité.", + "Unit Groups List": "Liste des groupes d'unités", + "Display all unit groups.": "Afficher tous les groupes d'unités.", + "No unit groups has been registered": "Aucun groupe de base n'a été enregistré", + "Add a new unit group": "Ajouter un nouveau groupe de base", + "Create a new unit group": "Créer un nouveau groupe de base", + "Register a new unit group and save it.": "Enregistrez un nouveau groupe de base et enregistrez-le.", + "Edit unit group": "Modifier le groupe de base", + "Modify Unit Group.": "Modifier le groupe d'unités.", + "Return to Unit Groups": "Retour aux groupes de base", + "Users List": "Liste des utilisateurs", + "Display all users.": "Afficher tous les utilisateurs.", + "No users has been registered": "Aucun utilisateur n'a été enregistré", + "Add a new user": "Ajouter un nouvel utilisateur", + "Create a new user": "Créer un nouvel utilisateur", + "Register a new user and save it.": "Enregistrez un nouvel utilisateur et enregistrez-le.", + "Edit user": "Modifier l'utilisateur", + "Modify User.": "Modifier l'utilisateur.", + "Return to Users": "Retour aux utilisateurs", + "Username": "Nom d'utilisateur", + "Will be used for various purposes such as email recovery.": "Sera utilisé à diverses fins telles que la récupération d'e-mails.", + "Provide the user first name.": "Indiquez le prénom de l'utilisateur.", + "Provide the user last name.": "Indiquez le nom de famille de l'utilisateur.", + "Password": "Mot de passe", + "Make a unique and secure password.": "Créez un mot de passe unique et sécurisé.", + "Confirm Password": "Confirmez le mot de passe", + "Should be the same as the password.": "Doit être le même que le mot de passe.", + "Define whether the user can use the application.": "Définissez si l'utilisateur peut utiliser l'application.", + "Define what roles applies to the user": "Définir les rôles s'appliquant à l'utilisateur", + "Roles": "Les rôles", + "Set the limit that can't be exceeded by the user.": "Définissez la limite qui ne peut pas être dépassée par l'utilisateur.", + "Set the user gender.": "Définissez le sexe de l'utilisateur.", + "Set the user phone number.": "Définissez le numéro de téléphone de l'utilisateur.", + "Set the user PO Box.": "Définissez la boîte postale de l'utilisateur.", + "Provide the billing First Name.": "Indiquez le prénom de facturation.", + "Last name": "Nom de famille", + "Provide the billing last name.": "Indiquez le nom de famille de facturation.", + "Billing phone number.": "Numéro de téléphone de facturation.", + "Billing First Address.": "Première adresse de facturation.", + "Billing Second Address.": "Deuxième adresse de facturation.", + "Country": "Pays", + "Billing Country.": "Pays de facturation.", + "City": "Ville", + "PO.Box": "Boîte postale", + "Postal Address": "Adresse postale", + "Company": "Entreprise", + "Provide the shipping First Name.": "Indiquez le prénom d'expédition.", + "Provide the shipping Last Name.": "Fournissez le nom de famille d’expédition.", + "Shipping phone number.": "Numéro de téléphone d'expédition.", + "Shipping First Address.": "Première adresse d’expédition.", + "Shipping Second Address.": "Deuxième adresse d’expédition.", + "Shipping Country.": "Pays de livraison.", + "You cannot delete your own account.": "Vous ne pouvez pas supprimer votre propre compte.", + "Group Name": "Nom de groupe", + "Wallet Balance": "Solde du portefeuille", + "Total Purchases": "Total des achats", + "Delete a user": "Supprimer un utilisateur", + "Not Assigned": "Non attribué", + "Access Denied": "Accès refusé", + "There's is mismatch with the core version.": "Il y a une incompatibilité avec la version principale.", + "Incompatibility Exception": "Exception d'incompatibilité", + "You're not authenticated.": "Vous n'êtes pas authentifié.", + "The request method is not allowed.": "La méthode de requête n'est pas autorisée.", + "Method Not Allowed": "Méthode Non Autorisée", + "There is a missing dependency issue.": "Il y a un problème de dépendance manquante.", + "Missing Dependency": "Dépendance manquante", + "Module Version Mismatch": "Incompatibilité de version du module", + "The Action You Tried To Perform Is Not Allowed.": "L'action que vous avez essayé d'effectuer n'est pas autorisée.", + "Not Allowed Action": "Action non autorisée", + "The action you tried to perform is not allowed.": "L'action que vous avez tenté d'effectuer n'est pas autorisée.", + "You're not allowed to see that page.": "Vous n'êtes pas autorisé à voir cette page.", + "Not Enough Permissions": "Pas assez d'autorisations", + "Unable to locate the assets.": "Impossible de localiser les actifs.", + "Not Found Assets": "Actifs introuvables", + "The resource of the page you tried to access is not available or might have been deleted.": "La ressource de la page à laquelle vous avez tenté d'accéder n'est pas disponible ou a peut-être été supprimée.", + "Not Found Exception": "Exception introuvable", + "A Database Exception Occurred.": "Une exception de base de données s'est produite.", + "Query Exception": "Exception de requête", + "An error occurred while validating the form.": "Une erreur s'est produite lors de la validation du formulaire.", + "An error has occurred": "Une erreur est survenue", + "Unable to proceed, the submitted form is not valid.": "Impossible de continuer, le formulaire soumis n'est pas valide.", + "Unable to proceed the form is not valid": "Impossible de poursuivre, le formulaire n'est pas valide", + "This value is already in use on the database.": "Cette valeur est déjà utilisée sur la base de données.", + "This field is required.": "Ce champ est obligatoire.", + "This field does'nt have a valid value.": "Ce champ n'a pas de valeur valide.", + "This field should be checked.": "Ce champ doit être coché.", + "This field must be a valid URL.": "Ce champ doit être une URL valide.", + "This field is not a valid email.": "Ce champ n'est pas un email valide.", + "Provide your username.": "Fournissez votre nom d'utilisateur.", + "Provide your password.": "Fournissez votre mot de passe.", + "Provide your email.": "Fournissez votre email.", + "Password Confirm": "Confirmer le mot de passe", + "define the amount of the transaction.": "définir le montant de la transaction.", + "Further observation while proceeding.": "Observation supplémentaire en cours de route.", + "determine what is the transaction type.": "déterminer quel est le type de transaction.", + "Determine the amount of the transaction.": "Déterminez le montant de la transaction.", + "Further details about the transaction.": "Plus de détails sur la transaction.", + "Describe the direct transaction.": "Décrivez la transaction directe.", + "Activated": "Activé", + "If set to yes, the transaction will take effect immediately and be saved on the history.": "Si la valeur est oui, la transaction prendra effet immédiatement et sera enregistrée dans l'historique.", + "set the value of the transaction.": "définir la valeur de la transaction.", + "Further details on the transaction.": "Plus de détails sur la transaction.", + "type": "taper", + "User Group": "Groupe d'utilisateurs", + "Installments": "Versements", + "Define the installments for the current order.": "Définissez les échéances pour la commande en cours.", + "New Password": "nouveau mot de passe", + "define your new password.": "définissez votre nouveau mot de passe.", + "confirm your new password.": "confirmez votre nouveau mot de passe.", + "Select Payment": "Sélectionnez Paiement", + "choose the payment type.": "choisissez le type de paiement.", + "Define the order name.": "Définissez le nom de la commande.", + "Define the date of creation of the order.": "Définir la date de création de la commande.", + "Provide the procurement name.": "Indiquez le nom du marché.", + "Describe the procurement.": "Décrivez l’approvisionnement.", + "Define the provider.": "Définissez le fournisseur.", + "Define what is the unit price of the product.": "Définissez quel est le prix unitaire du produit.", + "Condition": "Condition", + "Determine in which condition the product is returned.": "Déterminez dans quel état le produit est retourné.", + "Damaged": "Endommagé", + "Unspoiled": "Intact", + "Other Observations": "Autres observations", + "Describe in details the condition of the returned product.": "Décrivez en détail l'état du produit retourné.", + "Mode": "Mode", + "Wipe All": "Effacer tout", + "Wipe Plus Grocery": "Wipe Plus Épicerie", + "Choose what mode applies to this demo.": "Choisissez le mode qui s'applique à cette démo.", + "Create Sales (needs Procurements)": "Créer des ventes (nécessite des achats)", + "Set if the sales should be created.": "Définissez si les ventes doivent être créées.", + "Create Procurements": "Créer des approvisionnements", + "Will create procurements.": "Créera des achats.", + "Scheduled On": "Programmé le", + "Unit Group Name": "Nom du groupe d'unités", + "Provide a unit name to the unit.": "Fournissez un nom d'unité à l'unité.", + "Describe the current unit.": "Décrivez l'unité actuelle.", + "assign the current unit to a group.": "attribuer l’unité actuelle à un groupe.", + "define the unit value.": "définir la valeur unitaire.", + "Provide a unit name to the units group.": "Fournissez un nom d'unité au groupe d'unités.", + "Describe the current unit group.": "Décrivez le groupe de base actuel.", + "POS": "PDV", + "Open POS": "Point de vente ouvert", + "Create Register": "Créer un registre", + "Instalments": "Versements", + "Procurement Name": "Nom de l'approvisionnement", + "Provide a name that will help to identify the procurement.": "Fournissez un nom qui aidera à identifier le marché.", + "Reset": "Réinitialiser", + "The profile has been successfully saved.": "Le profil a été enregistré avec succès.", + "The user attribute has been saved.": "L'attribut utilisateur a été enregistré.", + "The options has been successfully updated.": "Les options ont été mises à jour avec succès.", + "Wrong password provided": "Mauvais mot de passe fourni", + "Wrong old password provided": "Ancien mot de passe fourni incorrect", + "Password Successfully updated.": "Mot de passe Mis à jour avec succès.", + "Use Customer Billing": "Utiliser la facturation client", + "Define whether the customer billing information should be used.": "Définissez si les informations de facturation du client doivent être utilisées.", + "General Shipping": "Expédition générale", + "Define how the shipping is calculated.": "Définissez la manière dont les frais de port sont calculés.", + "Shipping Fees": "Frais de port", + "Define shipping fees.": "Définir les frais d'expédition.", + "Use Customer Shipping": "Utiliser l'expédition client", + "Define whether the customer shipping information should be used.": "Définissez si les informations d'expédition du client doivent être utilisées.", + "Invoice Number": "Numéro de facture", + "If the procurement has been issued outside of NexoPOS, please provide a unique reference.": "Si le marché a été émis en dehors de NexoPOS, veuillez fournir une référence unique.", + "Delivery Time": "Délai de livraison", + "If the procurement has to be delivered at a specific time, define the moment here.": "Si le marché doit être livré à une heure précise, définissez le moment ici.", + "If you would like to define a custom invoice date.": "Si vous souhaitez définir une date de facture personnalisée.", + "Automatic Approval": "Approbation automatique", + "Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.": "Déterminez si l’approvisionnement doit être automatiquement marqué comme approuvé une fois le délai de livraison écoulé.", + "Pending": "En attente", + "Delivered": "Livré", + "Determine what is the actual value of the procurement. Once \"Delivered\" the status can't be changed, and the stock will be updated.": "Déterminez quelle est la valeur réelle du marché. Une fois « Livré », le statut ne peut plus être modifié et le stock sera mis à jour.", + "Determine what is the actual payment status of the procurement.": "Déterminez quel est le statut de paiement réel du marché.", + "Determine what is the actual provider of the current procurement.": "Déterminez quel est le véritable fournisseur de l’approvisionnement en cours.", + "Theme": "Thème", + "Dark": "Sombre", + "Light": "Lumière", + "Define what is the theme that applies to the dashboard.": "Définissez quel est le thème qui s'applique au tableau de bord.", + "Avatar": "Avatar", + "Define the image that should be used as an avatar.": "Définissez l'image qui doit être utilisée comme avatar.", + "Language": "Langue", + "Choose the language for the current account.": "Choisissez la langue du compte courant.", + "Biling": "Facturation", + "Security": "Sécurité", + "Old Password": "ancien mot de passe", + "Provide the old password.": "Fournissez l'ancien mot de passe.", + "Change your password with a better stronger password.": "Changez votre mot de passe avec un mot de passe plus fort.", + "Password Confirmation": "Confirmation mot de passe", + "API Token": "Jeton API", + "Sign In — NexoPOS": "Connectez-vous — NexoPOS", + "Sign Up — NexoPOS": "Inscrivez-vous - NexoPOS", + "No activation is needed for this account.": "Aucune activation n'est nécessaire pour ce compte.", + "Invalid activation token.": "Jeton d'activation invalide.", + "The expiration token has expired.": "Le jeton d'expiration a expiré.", + "Your account is not activated.": "Votre compte n'est pas activé.", + "Password Lost": "Mot de passe perdu", + "Unable to change a password for a non active user.": "Impossible de changer un mot de passe pour un utilisateur non actif.", + "Unable to proceed as the token provided is invalid.": "Impossible de continuer car le jeton fourni n'est pas valide.", + "The token has expired. Please request a new activation token.": "Le jeton a expiré. Veuillez demander un nouveau jeton d'activation.", + "Set New Password": "Definir un nouveau mot de passe", + "Database Update": "Mise à jour de la base de données", + "This account is disabled.": "Ce compte est désactivé.", + "Unable to find record having that username.": "Impossible de trouver l'enregistrement portant ce nom d'utilisateur.", + "Unable to find record having that password.": "Impossible de trouver un enregistrement contenant ce mot de passe.", + "Invalid username or password.": "Nom d'utilisateur ou mot de passe invalide.", + "Unable to login, the provided account is not active.": "Impossible de se connecter, le compte fourni n'est pas actif.", + "You have been successfully connected.": "Vous avez été connecté avec succès.", + "The recovery email has been send to your inbox.": "L'e-mail de récupération a été envoyé dans votre boîte de réception.", + "Unable to find a record matching your entry.": "Impossible de trouver un enregistrement correspondant à votre entrée.", + "Your Account has been successfully created.": "Votre compte à été créé avec succès.", + "Your Account has been created but requires email validation.": "Votre compte a été créé mais nécessite une validation par e-mail.", + "Unable to find the requested user.": "Impossible de trouver l'utilisateur demandé.", + "Unable to submit a new password for a non active user.": "Impossible de soumettre un nouveau mot de passe pour un utilisateur non actif.", + "Unable to proceed, the provided token is not valid.": "Impossible de continuer, le jeton fourni n'est pas valide.", + "Unable to proceed, the token has expired.": "Impossible de continuer, le jeton a expiré.", + "Your password has been updated.": "Votre mot de passe a été mis à jour.", + "Unable to edit a register that is currently in use": "Impossible de modifier un registre actuellement utilisé", + "No register has been opened by the logged user.": "Aucun registre n'a été ouvert par l'utilisateur connecté.", + "The register is opened.": "Le registre est ouvert.", + "Cash In": "Encaisser", + "Cash Out": "Encaissement", + "Closing": "Fermeture", + "Opening": "Ouverture", + "Sale": "Vente", + "Refund": "Remboursement", + "The register doesn't have an history.": "Le registre n'a pas d'historique.", + "Unable to check a register session history if it's closed.": "Impossible de vérifier l'historique d'une session d'enregistrement si elle est fermée.", + "Register History For : %s": "Historique d'enregistrement pour : %s", + "Unable to find the category using the provided identifier": "Impossible de trouver la catégorie à l'aide de l'identifiant fourni", + "Can't delete a category having sub categories linked to it.": "Impossible de supprimer une catégorie à laquelle sont liées des sous-catégories.", + "The category has been deleted.": "La catégorie a été supprimée.", + "Unable to find the category using the provided identifier.": "Impossible de trouver la catégorie à l'aide de l'identifiant fourni.", + "Unable to find the attached category parent": "Impossible de trouver la catégorie parent attachée", + "Unable to proceed. The request doesn't provide enough data which could be handled": "Impossible de continuer. La requête ne fournit pas suffisamment de données pouvant être traitées", + "The category has been correctly saved": "La catégorie a été correctement enregistrée", + "The category has been updated": "La catégorie a été mise à jour", + "The category products has been refreshed": "La catégorie produits a été rafraîchie", + "Unable to delete an entry that no longer exists.": "Impossible de supprimer une entrée qui n'existe plus.", + "The entry has been successfully deleted.": "L'entrée a été supprimée avec succès.", + "Unable to load the CRUD resource : %s.": "Impossible de charger la ressource CRUD : %s.", + "Unhandled crud resource": "Ressource brute non gérée", + "You need to select at least one item to delete": "Vous devez sélectionner au moins un élément à supprimer", + "You need to define which action to perform": "Vous devez définir quelle action effectuer", + "%s has been processed, %s has not been processed.": "%s a été traité, %s n'a pas été traité.", + "Unable to retrieve items. The current CRUD resource doesn't implement \"getEntries\" methods": "Impossible de récupérer les éléments. La ressource CRUD actuelle n'implémente pas les méthodes \"getEntries\"", + "Unable to proceed. No matching CRUD resource has been found.": "Impossible de continuer. Aucune ressource CRUD correspondante n'a été trouvée.", + "The class \"%s\" is not defined. Does that crud class exists ? Make sure you've registered the instance if it's the case.": "La classe \"%s\" n'est pas définie. Cette classe grossière existe-t-elle ? Assurez-vous d'avoir enregistré l'instance si c'est le cas.", + "The crud columns exceed the maximum column that can be exported (27)": "Les colonnes crud dépassent la colonne maximale pouvant être exportée (27)", + "Unable to export if there is nothing to export.": "Impossible d'exporter s'il n'y a rien à exporter.", + "This link has expired.": "Ce lien a expiré.", + "The requested file cannot be downloaded or has already been downloaded.": "Le fichier demandé ne peut pas être téléchargé ou a déjà été téléchargé.", + "The requested customer cannot be found.": "Le client demandé est introuvable.", + "Void": "Vide", + "Create Coupon": "Créer un coupon", + "helps you creating a coupon.": "vous aide à créer un coupon.", + "Edit Coupon": "Modifier le coupon", + "Editing an existing coupon.": "Modification d'un coupon existant.", + "Invalid Request.": "Requête invalide.", + "%s Coupons": "%s Coupons", + "Displays the customer account history for %s": "Affiche l'historique du compte client pour %s", + "Account History : %s": "Historique du compte : %s", + "%s Coupon History": "Historique des coupons %s", + "Unable to delete a group to which customers are still assigned.": "Impossible de supprimer un groupe auquel les clients sont toujours affectés.", + "The customer group has been deleted.": "Le groupe de clients a été supprimé.", + "Unable to find the requested group.": "Impossible de trouver le groupe demandé.", + "The customer group has been successfully created.": "Le groupe de clients a été créé avec succès.", + "The customer group has been successfully saved.": "Le groupe de clients a été enregistré avec succès.", + "Unable to transfer customers to the same account.": "Impossible de transférer les clients vers le même compte.", + "All the customers has been transferred to the new group %s.": "Tous les clients ont été transférés vers le nouveau groupe %s.", + "The categories has been transferred to the group %s.": "Les catégories ont été transférées au groupe %s.", + "No customer identifier has been provided to proceed to the transfer.": "Aucun identifiant client n'a été fourni pour procéder au transfert.", + "Unable to find the requested group using the provided id.": "Impossible de trouver le groupe demandé à l'aide de l'identifiant fourni.", + "\"%s\" is not an instance of \"FieldsService\"": "\"%s\" n'est pas une instance de \"FieldsService\"", + "Manage Medias": "Gérer les médias", + "Upload and manage medias (photos).": "Téléchargez et gérez des médias (photos).", + "The media name was successfully updated.": "Le nom du média a été mis à jour avec succès.", + "Modules List": "Liste des modules", + "List all available modules.": "Répertoriez tous les modules disponibles.", + "Upload A Module": "Télécharger un module", + "Extends NexoPOS features with some new modules.": "Étend les fonctionnalités de NexoPOS avec quelques nouveaux modules.", + "The notification has been successfully deleted": "La notification a été supprimée avec succès", + "All the notifications have been cleared.": "Toutes les notifications ont été effacées.", + "Payment Receipt — %s": "Reçu de paiement : %s", + "Order Invoice — %s": "Facture de commande — %s", + "Order Refund Receipt — %s": "Reçu de remboursement de commande — %s", + "Order Receipt — %s": "Reçu de commande — %s", + "The printing event has been successfully dispatched.": "L’événement d’impression a été distribué avec succès.", + "There is a mismatch between the provided order and the order attached to the instalment.": "Il existe une disparité entre la commande fournie et la commande jointe au versement.", + "Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.": "Impossible de modifier un approvisionnement en stock. Envisagez d'effectuer un ajustement ou supprimez l'approvisionnement.", + "You cannot change the status of an already paid procurement.": "Vous ne pouvez pas modifier le statut d'un achat déjà payé.", + "The procurement payment status has been changed successfully.": "Le statut de paiement du marché a été modifié avec succès.", + "The procurement has been marked as paid.": "Le marché a été marqué comme payé.", + "The product which id is %s doesnt't belong to the procurement which id is %s": "Le produit dont l'identifiant est %s n'appartient pas à l'achat dont l'identifiant est %s", + "The refresh process has started. You'll get informed once it's complete.": "Le processus d'actualisation a commencé. Vous serez informé une fois qu'il sera terminé.", + "New Procurement": "Nouvel approvisionnement", + "Make a new procurement.": "Effectuez un nouvel achat.", + "Edit Procurement": "Modifier l'approvisionnement", + "Perform adjustment on existing procurement.": "Effectuer des ajustements sur les achats existants.", + "%s - Invoice": "%s - Facture", + "list of product procured.": "liste des produits achetés.", + "The product price has been refreshed.": "Le prix du produit a été actualisé.", + "The single variation has been deleted.": "La variante unique a été supprimée.", + "The the variation hasn't been deleted because it might not exist or is not assigned to the parent product \"%s\".": "La variante n'a pas été supprimée car elle n'existe peut-être pas ou n'est pas affectée au produit parent \"%s\".", + "Edit a product": "Modifier un produit", + "Makes modifications to a product": "Apporter des modifications à un produit", + "Create a product": "Créer un produit", + "Add a new product on the system": "Ajouter un nouveau produit sur le système", + "Stock Adjustment": "Ajustement des stocks", + "Adjust stock of existing products.": "Ajuster le stock de produits existants.", + "No stock is provided for the requested product.": "Aucun stock n'est prévu pour le produit demandé.", + "The product unit quantity has been deleted.": "La quantité unitaire du produit a été supprimée.", + "Unable to proceed as the request is not valid.": "Impossible de continuer car la demande n'est pas valide.", + "Unsupported action for the product %s.": "Action non prise en charge pour le produit %s.", + "The operation will cause a negative stock for the product \"%s\" (%s).": "L'opération entraînera un stock négatif pour le produit \"%s\" (%s).", + "The stock has been adjustment successfully.": "Le stock a été ajusté avec succès.", + "Unable to add the product to the cart as it has expired.": "Impossible d'ajouter le produit au panier car il a expiré.", + "Unable to add a product that has accurate tracking enabled, using an ordinary barcode.": "Impossible d'ajouter un produit pour lequel le suivi précis est activé, à l'aide d'un code-barres ordinaire.", + "There is no products matching the current request.": "Aucun produit ne correspond à la demande actuelle.", + "Print Labels": "Imprimer des étiquettes", + "Customize and print products labels.": "Personnalisez et imprimez les étiquettes des produits.", + "Procurements by \"%s\"": "Approvisionnements par \"%s\"", + "%s's Products": "Produits de %s\\", + "Sales Report": "Rapport des ventes", + "Provides an overview over the sales during a specific period": "Fournit un aperçu des ventes au cours d’une période spécifique", + "Sales Progress": "Progression des ventes", + "Provides an overview over the best products sold during a specific period.": "Fournit un aperçu des meilleurs produits vendus au cours d’une période spécifique.", + "Sold Stock": "Stock vendu", + "Provides an overview over the sold stock during a specific period.": "Fournit un aperçu du stock vendu pendant une période spécifique.", + "Stock Report": "Rapport de stock", + "Provides an overview of the products stock.": "Fournit un aperçu du stock de produits.", + "Profit Report": "Rapport sur les bénéfices", + "Provides an overview of the provide of the products sold.": "Fournit un aperçu de l’offre des produits vendus.", + "Provides an overview on the activity for a specific period.": "Fournit un aperçu de l’activité pour une période spécifique.", + "Annual Report": "Rapport annuel", + "Sales By Payment Types": "Ventes par types de paiement", + "Provide a report of the sales by payment types, for a specific period.": "Fournissez un rapport des ventes par types de paiement, pour une période spécifique.", + "The report will be computed for the current year.": "Le rapport sera calculé pour l'année en cours.", + "Unknown report to refresh.": "Rapport inconnu à actualiser.", + "Customers Statement": "Déclaration des clients", + "Display the complete customer statement.": "Affichez le relevé client complet.", + "Invalid authorization code provided.": "Code d'autorisation fourni non valide.", + "The database has been successfully seeded.": "La base de données a été amorcée avec succès.", + "About": "À propos", + "Details about the environment.": "Détails sur l'environnement.", + "Core Version": "Version de base", + "Laravel Version": "Version Laravel", + "PHP Version": "Version PHP", + "Mb String Enabled": "Chaîne Mo activée", + "Zip Enabled": "Zip activé", + "Curl Enabled": "Boucle activée", + "Math Enabled": "Mathématiques activées", + "XML Enabled": "XML activé", + "XDebug Enabled": "XDebug activé", + "File Upload Enabled": "Téléchargement de fichiers activé", + "File Upload Size": "Taille du téléchargement du fichier", + "Post Max Size": "Taille maximale du message", + "Max Execution Time": "Temps d'exécution maximum", + "%s Second(s)": "%s Seconde(s)", + "Memory Limit": "Limite de mémoire", + "Settings Page Not Found": "Page de paramètres introuvable", + "Customers Settings": "Paramètres des clients", + "Configure the customers settings of the application.": "Configurez les paramètres clients de l'application.", + "General Settings": "réglages généraux", + "Configure the general settings of the application.": "Configurez les paramètres généraux de l'application.", + "Orders Settings": "Paramètres des commandes", + "POS Settings": "Paramètres du point de vente", + "Configure the pos settings.": "Configurez les paramètres du point de vente.", + "Workers Settings": "Paramètres des travailleurs", + "%s is not an instance of \"%s\".": "%s n'est pas une instance de \"%s\".", + "Unable to find the requested product tax using the provided id": "Impossible de trouver la taxe sur le produit demandée à l'aide de l'identifiant fourni", + "Unable to find the requested product tax using the provided identifier.": "Impossible de trouver la taxe sur le produit demandée à l'aide de l'identifiant fourni.", + "The product tax has been created.": "La taxe sur les produits a été créée.", + "The product tax has been updated": "La taxe sur les produits a été mise à jour", + "Unable to retrieve the requested tax group using the provided identifier \"%s\".": "Impossible de récupérer le groupe de taxes demandé à l'aide de l'identifiant fourni \"%s\".", + "\"%s\" Record History": "\"%s\" Historique des enregistrements", + "Shows all histories generated by the transaction.": "Affiche tous les historiques générés par la transaction.", + "Transactions": "Transactions", + "Create New Transaction": "Créer une nouvelle transaction", + "Set direct, scheduled transactions.": "Définissez des transactions directes et planifiées.", + "Update Transaction": "Mettre à jour la transaction", + "Permission Manager": "Gestionnaire d'autorisations", + "Manage all permissions and roles": "Gérer toutes les autorisations et tous les rôles", + "My Profile": "Mon profil", + "Change your personal settings": "Modifiez vos paramètres personnels", + "The permissions has been updated.": "Les autorisations ont été mises à jour.", + "The provided data aren't valid": "Les données fournies ne sont pas valides", + "Dashboard": "Tableau de bord", + "Sunday": "Dimanche", + "Monday": "Lundi", + "Tuesday": "Mardi", + "Wednesday": "Mercredi", + "Thursday": "Jeudi", + "Friday": "Vendredi", + "Saturday": "Samedi", + "Welcome — NexoPOS": "Bienvenue — NexoPOS", + "The migration has successfully run.": "La migration s'est déroulée avec succès.", + "You're not allowed to see this page.": "Vous n'êtes pas autorisé à voir cette page.", + "The recovery has been explicitly disabled.": "La récupération a été explicitement désactivée.", + "Your don't have enough permission to perform this action.": "Vous n'avez pas les autorisations suffisantes pour effectuer cette action.", + "You don't have the necessary role to see this page.": "Vous n'avez pas le rôle nécessaire pour voir cette page.", + "The registration has been explicitly disabled.": "L'enregistrement a été explicitement désactivé.", + "Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.": "Impossible d'initialiser la page des paramètres. L'identifiant \"%s\" ne peut pas être instancié.", + "Unable to register. The registration is closed.": "Impossible de s'inscrire. Les inscriptions sont closes.", + "Hold Order Cleared": "Ordre de retenue effacé", + "Report Refreshed": "Rapport actualisé", + "The yearly report has been successfully refreshed for the year \"%s\".": "Le rapport annuel a été actualisé avec succès pour l'année \"%s\".", + "Low Stock Alert": "Alerte de stock faible", + "Scheduled Transactions": "Transactions planifiées", + "the transaction \"%s\" was executed as scheduled on %s.": "la transaction \"%s\" a été exécutée comme prévu le %s.", + "Procurement Refreshed": "Achats actualisés", + "The procurement \"%s\" has been successfully refreshed.": "L'approvisionnement \"%s\" a été actualisé avec succès.", + "The transaction was deleted.": "La transaction a été supprimée.", + "Workers Aren't Running": "Les travailleurs ne courent pas", + "The workers has been enabled, but it looks like NexoPOS can't run workers. This usually happen if supervisor is not configured correctly.": "Les Workers ont été activés, mais il semble que NexoPOS ne puisse pas exécuter les Workers. Cela se produit généralement si le superviseur n'est pas configuré correctement.", + "[NexoPOS] Activate Your Account": "[NexoPOS] Activez votre compte", + "[NexoPOS] A New User Has Registered": "[NexoPOS] Un nouvel utilisateur s'est enregistré", + "[NexoPOS] Your Account Has Been Created": "[NexoPOS] Votre compte a été créé", + "Unknown Payment": "Paiement inconnu", + "Unable to find the permission with the namespace \"%s\".": "Impossible de trouver l'autorisation avec l'espace de noms \"%s\".", + "Unable to remove the permissions \"%s\". It doesn't exists.": "Impossible de supprimer les autorisations \"%s\". Cela n'existe pas.", + "The role was successfully assigned.": "Le rôle a été attribué avec succès.", + "The role were successfully assigned.": "Le rôle a été attribué avec succès.", + "Unable to identifier the provided role.": "Impossible d'identifier le rôle fourni.", + "Partially Due": "Partiellement dû", + "Take Away": "Emporter", + "Good Condition": "Bonne condition", + "Unable to open \"%s\" *, as it's not closed.": "Impossible d'ouvrir \"%s\" *, car il n'est pas fermé.", + "The register has been successfully opened": "Le registre a été ouvert avec succès", + "Unable to open \"%s\" *, as it's not opened.": "Impossible d'ouvrir \"%s\" *, car il n'est pas ouvert.", + "The register has been successfully closed": "Le registre a été fermé avec succès", + "Unable to cashing on \"%s\" *, as it's not opened.": "Impossible d'encaisser \"%s\" *, car il n'est pas ouvert.", + "The provided amount is not allowed. The amount should be greater than \"0\". ": "Le montant fourni n'est pas autorisé. Le montant doit être supérieur à « 0 ».", + "The cash has successfully been stored": "L'argent a été stocké avec succès", + "Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.": "Fonds insuffisant pour supprimer une vente de \"%s\". Si les fonds ont été encaissés ou décaissés, envisagez d'ajouter un peu d'argent (%s) au registre.", + "Unable to cashout on \"%s": "Impossible d'encaisser sur \"%s", + "Not enough fund to cash out.": "Pas assez de fonds pour encaisser.", + "The cash has successfully been disbursed.": "L'argent a été décaissé avec succès.", + "In Use": "Utilisé", + "Opened": "Ouvert", + "Cron Disabled": "Cron désactivé", + "Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.": "Les tâches Cron ne sont pas configurées correctement sur NexoPOS. Cela pourrait restreindre les fonctionnalités nécessaires. Cliquez ici pour apprendre comment le réparer.", + "Task Scheduling Disabled": "Planification des tâches désactivée", + "NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.": "NexoPOS n'est pas en mesure de planifier des tâches en arrière-plan. Cela pourrait restreindre les fonctionnalités nécessaires. Cliquez ici pour apprendre comment le réparer.", + "The requested module %s cannot be found.": "Le module demandé %s est introuvable.", + "the requested file \"%s\" can't be located inside the manifest.json for the module %s.": "le fichier demandé \"%s\" ne peut pas être localisé dans le manifest.json pour le module %s.", + "Delete Selected entries": "Supprimer les entrées sélectionnées", + "%s entries has been deleted": "%s entrées ont été supprimées", + "%s entries has not been deleted": "%s entrées n'ont pas été supprimées", + "A new entry has been successfully created.": "Une nouvelle entrée a été créée avec succès.", + "The entry has been successfully updated.": "L'entrée a été mise à jour avec succès.", + "Sorting is explicitely disabled for the column \"%s\".": "Le tri est explicitement désactivé pour la colonne \"%s\".", + "Unidentified Item": "Objet non identifié", + "Non-existent Item": "Article inexistant", + "Unable to delete \"%s\" as it's a dependency for \"%s\"%s": "Impossible de supprimer \"%s\" car il\\ s'agit d'une dépendance pour \"%s\"%s", + "Unable to delete this resource as it has %s dependency with %s item.": "Impossible de supprimer cette ressource car elle a une dépendance %s avec l'élément %s.", + "Unable to delete this resource as it has %s dependency with %s items.": "Impossible de supprimer cette ressource car elle a %s dépendance avec %s éléments.", + "Unable to find the customer using the provided id %s.": "Impossible de trouver le client à l'aide de l'identifiant %s fourni.", + "Unable to find the customer using the provided id.": "Impossible de trouver le client à l'aide de l'identifiant fourni.", + "The customer has been deleted.": "Le client a été supprimé.", + "The email \"%s\" is already used for another customer.": "L'e-mail \"%s\" est déjà utilisé pour un autre client.", + "The customer has been created.": "Le client a été créé.", + "Unable to find the customer using the provided ID.": "Impossible de trouver le client à l'aide de l'ID fourni.", + "The customer has been edited.": "Le client a été modifié.", + "Unable to find the customer using the provided email.": "Impossible de trouver le client à l'aide de l'e-mail fourni.", + "Not enough credits on the customer account. Requested : %s, Remaining: %s.": "Pas assez de crédits sur le compte client. Demandé : %s, Restant : %s.", + "The customer account has been updated.": "Le compte client a été mis à jour.", + "The customer account doesn't have enough funds to proceed.": "Le compte client ne dispose pas de suffisamment de fonds pour continuer.", + "Issuing Coupon Failed": "Échec de l'émission du coupon", + "Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.": "Impossible d'appliquer un coupon attaché à la récompense \"%s\". Il semblerait que le coupon n'existe plus.", + "The provided coupon cannot be loaded for that customer.": "Le coupon fourni ne peut pas être chargé pour ce client.", + "The provided coupon cannot be loaded for the group assigned to the selected customer.": "Le coupon fourni ne peut pas être chargé pour le groupe attribué au client sélectionné.", + "Unable to find a coupon with the provided code.": "Impossible de trouver un coupon avec le code fourni.", + "The coupon has been updated.": "Le coupon a été mis à jour.", + "The group has been created.": "Le groupe a été créé.", + "Crediting": "Créditer", + "Deducting": "Déduire", + "Order Payment": "Paiement de la commande", + "Order Refund": "Remboursement de la commande", + "Unknown Operation": "Opération inconnue", + "Unable to find a reference to the attached coupon : %s": "Impossible de trouver une référence au coupon ci-joint : %s", + "Unable to use the coupon %s as it has expired.": "Impossible d'utiliser le coupon %s car il a expiré.", + "Unable to use the coupon %s at this moment.": "Impossible d'utiliser le coupon %s pour le moment.", + "You're not allowed to use this coupon as it's no longer active": "Vous n'êtes pas autorisé à utiliser ce coupon car il n'est plus actif", + "You're not allowed to use this coupon it has reached the maximum usage allowed.": "Vous n'êtes pas autorisé à utiliser ce coupon, car il a atteint l'utilisation maximale autorisée.", + "Provide the billing first name.": "Indiquez le prénom de facturation.", + "Countable": "Dénombrable", + "Piece": "Morceau", + "Small Box": "Petite boîte", + "Box": "Boîte", + "Terminal A": "Borne A", + "Terminal B": "Borne B", + "Sales Account": "Compte de vente", + "Procurements Account": "Compte des achats", + "Sale Refunds Account": "Compte de remboursement des ventes", + "Spoiled Goods Account": "Compte de marchandises avariées", + "Customer Crediting Account": "Compte de crédit client", + "Customer Debiting Account": "Compte débiteur client", + "GST": "TPS", + "SGST": "SGST", + "CGST": "CGST", + "Sample Procurement %s": "Exemple d'approvisionnement %s", + "generated": "généré", + "The user attributes has been updated.": "Les attributs utilisateur ont été mis à jour.", + "Administrator": "Administrateur", + "Store Administrator": "Administrateur de magasin", + "Store Cashier": "Caissier de magasin", + "User": "Utilisateur", + "%s products were freed": "%s produits ont été libérés", + "Restoring cash flow from paid orders...": "Restaurer la trésorerie des commandes payées...", + "Restoring cash flow from refunded orders...": "Rétablissement de la trésorerie grâce aux commandes remboursées...", + "%s on %s directories were deleted.": "%s sur %s répertoires ont été supprimés.", + "%s on %s files were deleted.": "%s sur %s fichiers ont été supprimés.", + "%s link were deleted": "Le lien %s a été supprimé", + "Unable to execute the following class callback string : %s": "Impossible d'exécuter la chaîne de rappel de classe suivante : %s", + "The media has been deleted": "Le média a été supprimé", + "Unable to find the media.": "Impossible de trouver le média.", + "Unable to find the requested file.": "Impossible de trouver le fichier demandé.", + "Unable to find the media entry": "Impossible de trouver l'entrée multimédia", + "Home": "Maison", + "Payment Types": "Types de paiement", + "Medias": "Des médias", + "List": "Liste", + "Create Customer": "Créer un client", + "Customers Groups": "Groupes de clients", + "Create Group": "Créer un groupe", + "Reward Systems": "Systèmes de récompense", + "Create Reward": "Créer une récompense", + "List Coupons": "Liste des coupons", + "Providers": "Fournisseurs", + "Create A Provider": "Créer un fournisseur", + "Accounting": "Comptabilité", + "Create Transaction": "Créer une transaction", + "Accounts": "Comptes", + "Create Account": "Créer un compte", + "Inventory": "Inventaire", + "Create Product": "Créer un produit", + "Create Category": "Créer une catégorie", + "Create Unit": "Créer une unité", + "Unit Groups": "Groupes de base", + "Create Unit Groups": "Créer des groupes d'unités", + "Stock Flow Records": "Enregistrements des flux de stocks", + "Taxes Groups": "Groupes de taxes", + "Create Tax Groups": "Créer des groupes de taxes", + "Create Tax": "Créer une taxe", + "Modules": "Modules", + "Upload Module": "Télécharger le module", + "Users": "Utilisateurs", + "Create User": "Créer un utilisateur", + "Create Roles": "Créer des rôles", + "Permissions Manager": "Gestionnaire des autorisations", + "Procurements": "Achats", + "Reports": "Rapports", + "Sale Report": "Rapport de vente", + "Incomes & Loosses": "Revenus et pertes", + "Sales By Payments": "Ventes par paiements", + "Settings": "Paramètres", + "Invoice Settings": "Paramètres de facture", + "Workers": "Ouvriers", + "Unable to locate the requested module.": "Impossible de localiser le module demandé.", + "Failed to parse the configuration file on the following path \"%s\"": "Échec de l'analyse du fichier de configuration sur le chemin suivant \"%s\"", + "No config.xml has been found on the directory : %s. This folder is ignored": "Aucun config.xml n'a été trouvé dans le répertoire : %s. Ce dossier est ignoré", + "The module \"%s\" has been disabled as the dependency \"%s\" is missing. ": "Le module \"%s\" a été désactivé car la dépendance \"%s\" est manquante.", + "The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ": "Le module \"%s\" a été désactivé car la dépendance \"%s\" n'est pas activée.", + "The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ": "Le module \"%s\" a été désactivé car la dépendance \"%s\" n'est pas sur la version minimale requise \"%s\".", + "The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ": "Le module \"%s\" a été désactivé car la dépendance \"%s\" est sur une version au-delà de la version recommandée \"%s\".", + "The module \"%s\" has been disabled as it's not compatible with the current version of NexoPOS %s, but requires %s. ": "Le module \"%s\" a été désactivé car il\\ n'est pas compatible avec la version actuelle de NexoPOS %s, mais nécessite %s.", + "Unable to detect the folder from where to perform the installation.": "Impossible de détecter le dossier à partir duquel effectuer l'installation.", + "Invalid Module provided.": "Module fourni non valide.", + "Unable to upload this module as it's older than the version installed": "Impossible de télécharger ce module car il est plus ancien que la version installée", + "The module was \"%s\" was successfully installed.": "Le module \"%s\" a été installé avec succès.", + "The uploaded file is not a valid module.": "Le fichier téléchargé n'est pas un module valide.", + "The module has been successfully installed.": "Le module a été installé avec succès.", + "The modules \"%s\" was deleted successfully.": "Les modules \"%s\" ont été supprimés avec succès.", + "Unable to locate a module having as identifier \"%s\".": "Impossible de localiser un module ayant comme identifiant \"%s\".", + "The migration run successfully.": "La migration s'est exécutée avec succès.", + "The migration file doens't have a valid class name. Expected class : %s": "Le fichier de migration n'a pas de nom de classe valide. Classe attendue : %s", + "Unable to locate the following file : %s": "Impossible de localiser le fichier suivant : %s", + "An Error Occurred \"%s\": %s": "Une erreur s'est produite \"%s\": %s", + "The module has correctly been enabled.": "Le module a été correctement activé.", + "Unable to enable the module.": "Impossible d'activer le module.", + "The Module has been disabled.": "Le module a été désactivé.", + "Unable to disable the module.": "Impossible de désactiver le module.", + "All migration were executed.": "Toutes les migrations ont été exécutées.", + "Unable to proceed, the modules management is disabled.": "Impossible de continuer, la gestion des modules est désactivée.", + "A similar module has been found": "Un module similaire a été trouvé", + "Missing required parameters to create a notification": "Paramètres requis manquants pour créer une notification", + "The order has been placed.": "La commande a été passée.", + "The order has been updated": "La commande a été mise à jour", + "The minimal payment of %s has'nt been provided.": "Le paiement minimum de %s n'a pas été fourni.", + "The percentage discount provided is not valid.": "Le pourcentage de réduction fourni n'est pas valable.", + "A discount cannot exceed the sub total value of an order.": "Une remise ne peut pas dépasser la valeur sous-totale d’une commande.", + "No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.": "Aucun paiement n'est prévu pour le moment. Si le client souhaite payer plus tôt, envisagez d’ajuster la date des paiements échelonnés.", + "The payment has been saved.": "Le paiement a été enregistré.", + "Unable to edit an order that is completely paid.": "Impossible de modifier une commande entièrement payée.", + "Unable to proceed as one of the previous submitted payment is missing from the order.": "Impossible de procéder car l'un des paiements soumis précédemment est manquant dans la commande.", + "The order payment status cannot switch to hold as a payment has already been made on that order.": "Le statut de paiement de la commande ne peut pas passer à En attente car un paiement a déjà été effectué pour cette commande.", + "The customer account funds are'nt enough to process the payment.": "Les fonds du compte client ne suffisent pas pour traiter le paiement.", + "Unable to proceed. One of the submitted payment type is not supported.": "Impossible de continuer. L'un des types de paiement soumis n'est pas pris en charge.", + "Unable to proceed. Partially paid orders aren't allowed. This option could be changed on the settings.": "Impossible de continuer. Les commandes partiellement payées ne sont pas autorisées. Cette option peut être modifiée dans les paramètres.", + "Unable to proceed. Unpaid orders aren't allowed. This option could be changed on the settings.": "Impossible de continuer. Les commandes impayées ne sont pas autorisées. Cette option peut être modifiée dans les paramètres.", + "By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.": "En procédant à cette commande, le client dépassera le crédit maximum autorisé pour son compte : %s.", + "You're not allowed to make payments.": "Vous n'êtes pas autorisé à effectuer des paiements.", + "Unnamed Product": "Produit sans nom", + "Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s": "Impossible de continuer, il n'y a pas assez de stock pour %s utilisant l'unité %s. Demandé : %s, disponible %s", + "Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.": "Impossible de continuer, le produit \"%s\" possède une unité qui ne peut pas être récupérée. Il a peut-être été supprimé.", + "Unable to find the customer using the provided ID. The order creation has failed.": "Impossible de trouver le client à l'aide de l'ID fourni. La création de la commande a échoué.", + "Unable to proceed a refund on an unpaid order.": "Impossible de procéder à un remboursement sur une commande impayée.", + "The current credit has been issued from a refund.": "Le crédit actuel a été émis à partir d'un remboursement.", + "The order has been successfully refunded.": "La commande a été remboursée avec succès.", + "unable to proceed to a refund as the provided status is not supported.": "impossible de procéder à un remboursement car le statut fourni n'est pas pris en charge.", + "The product %s has been successfully refunded.": "Le produit %s a été remboursé avec succès.", + "Unable to find the order product using the provided id.": "Impossible de trouver le produit commandé à l'aide de l'identifiant fourni.", + "Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier": "Impossible de trouver la commande demandée en utilisant \"%s\" comme pivot et \"%s\" comme identifiant", + "Unable to fetch the order as the provided pivot argument is not supported.": "Impossible de récupérer la commande car l'argument pivot fourni n'est pas pris en charge.", + "The product has been added to the order \"%s\"": "Le produit a été ajouté à la commande \"%s\"", + "the order has been successfully computed.": "la commande a été calculée avec succès.", + "The order has been deleted.": "La commande a été supprimée.", + "The product has been successfully deleted from the order.": "Le produit a été supprimé avec succès de la commande.", + "Unable to find the requested product on the provider order.": "Impossible de trouver le produit demandé sur la commande du fournisseur.", + "Unknown Type (%s)": "Type inconnu (%s)", + "Unknown Status (%s)": "Statut inconnu (%s)", + "Unknown Product Status": "Statut du produit inconnu", + "Ongoing": "En cours", + "Ready": "Prêt", + "Not Available": "Pas disponible", + "Failed": "Échoué", + "Unpaid Orders Turned Due": "Commandes impayées devenues exigibles", + "%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.": "%s commande(s), impayées ou partiellement payées, sont devenues exigibles. Cela se produit si aucun n’a été complété avant la date de paiement prévue.", + "No orders to handle for the moment.": "Aucune commande à gérer pour le moment.", + "The order has been correctly voided.": "La commande a été correctement annulée.", + "Unable to find a reference of the provided coupon : %s": "Impossible de trouver une référence du coupon fourni : %s", + "Unable to edit an already paid instalment.": "Impossible de modifier un versement déjà payé.", + "The instalment has been saved.": "Le versement a été enregistré.", + "The instalment has been deleted.": "Le versement a été supprimé.", + "The defined amount is not valid.": "Le montant défini n'est pas valable.", + "No further instalments is allowed for this order. The total instalment already covers the order total.": "Aucun autre versement n’est autorisé pour cette commande. Le versement total couvre déjà le total de la commande.", + "The instalment has been created.": "Le versement a été créé.", + "The provided status is not supported.": "Le statut fourni n'est pas pris en charge.", + "The order has been successfully updated.": "La commande a été mise à jour avec succès.", + "Unable to find the requested procurement using the provided identifier.": "Impossible de trouver le marché demandé à l'aide de l'identifiant fourni.", + "Unable to find the assigned provider.": "Impossible de trouver le fournisseur attribué.", + "The procurement has been created.": "Le marché public a été créé.", + "Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.": "Impossible de modifier un approvisionnement déjà stocké. Merci d'envisager une réalisation et un ajustement des stocks.", + "The provider has been edited.": "Le fournisseur a été modifié.", + "The procurement has been deleted. %s included stock record(s) has been deleted as well.": "Le marché a été supprimé. %s les enregistrements de stock inclus ont également été supprimés.", + "Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"": "Impossible d'avoir un identifiant de groupe d'unités pour le produit en utilisant la référence \"%s\" comme \"%s\"", + "The unit used for the product %s doesn't belongs to the Unit Group assigned to the item": "L'unité utilisée pour le produit %s n'appartient pas au groupe d'unités affecté à l'article", + "The operation has completed.": "L'opération est terminée.", + "The procurement has been refreshed.": "La passation des marchés a été rafraîchie.", + "The procurement has been reset.": "L'approvisionnement a été réinitialisé.", + "The procurement products has been deleted.": "Les produits d'approvisionnement ont été supprimés.", + "The procurement product has been updated.": "Le produit d'approvisionnement a été mis à jour.", + "Unable to find the procurement product using the provided id.": "Impossible de trouver le produit d'approvisionnement à l'aide de l'identifiant fourni.", + "The product %s has been deleted from the procurement %s": "Le produit %s a été supprimé de l'approvisionnement %s", + "The product with the following ID \"%s\" is not initially included on the procurement": "Le produit avec l'ID suivant \"%s\" n'est pas initialement inclus dans l'achat", + "The procurement products has been updated.": "Les produits d'approvisionnement ont été mis à jour.", + "Procurement Automatically Stocked": "Approvisionnement automatiquement stocké", + "%s procurement(s) has recently been automatically procured.": "%s achats ont récemment été effectués automatiquement.", + "Draft": "Brouillon", + "The category has been created": "La catégorie a été créée", + "The requested category doesn't exists": "La catégorie demandée n'existe pas", + "Unable to find the product using the provided id.": "Impossible de trouver le produit à l'aide de l'identifiant fourni.", + "Unable to find the requested product using the provided SKU.": "Impossible de trouver le produit demandé à l'aide du SKU fourni.", + "The category to which the product is attached doesn't exists or has been deleted": "La catégorie à laquelle le produit est rattaché n'existe pas ou a été supprimée", + "Unable to create a product with an unknow type : %s": "Impossible de créer un produit avec un type inconnu : %s", + "A variation within the product has a barcode which is already in use : %s.": "Une variation au sein du produit possède un code barre déjà utilisé : %s.", + "A variation within the product has a SKU which is already in use : %s": "Une variante du produit a un SKU déjà utilisé : %s", + "The variable product has been created.": "Le produit variable a été créé.", + "The provided barcode \"%s\" is already in use.": "Le code-barres fourni \"%s\" est déjà utilisé.", + "The provided SKU \"%s\" is already in use.": "Le SKU fourni \"%s\" est déjà utilisé.", + "The product has been saved.": "Le produit a été enregistré.", + "Unable to edit a product with an unknown type : %s": "Impossible de modifier un produit avec un type inconnu : %s", + "A grouped product cannot be saved without any sub items.": "Un produit groupé ne peut pas être enregistré sans sous-éléments.", + "A grouped product cannot contain grouped product.": "Un produit groupé ne peut pas contenir de produit groupé.", + "The provided barcode is already in use.": "Le code-barres fourni est déjà utilisé.", + "The provided SKU is already in use.": "Le SKU fourni est déjà utilisé.", + "The product has been updated": "Le produit a été mis à jour", + "The requested sub item doesn't exists.": "Le sous-élément demandé n'existe pas.", + "The subitem has been saved.": "Le sous-élément a été enregistré.", + "One of the provided product variation doesn't include an identifier.": "L'une des variantes de produit fournies n'inclut pas d'identifiant.", + "The variable product has been updated.": "Le produit variable a été mis à jour.", + "The product's unit quantity has been updated.": "La quantité unitaire du produit a été mise à jour.", + "Unable to reset this variable product \"%s": "Impossible de réinitialiser ce produit variable \"%s", + "The product variations has been reset": "Les variantes du produit ont été réinitialisées", + "The product has been reset.": "Le produit a été réinitialisé.", + "The product \"%s\" has been successfully deleted": "Le produit \"%s\" a été supprimé avec succès", + "Unable to find the requested variation using the provided ID.": "Impossible de trouver la variante demandée à l'aide de l'ID fourni.", + "The product stock has been updated.": "Le stock de produits a été mis à jour.", + "The action is not an allowed operation.": "L'action n'est pas une opération autorisée.", + "Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).": "Impossible de continuer, cette action entraînera un stock négatif (%s). Ancienne quantité : (%s), Quantité : (%s).", + "The product quantity has been updated.": "La quantité de produit a été mise à jour.", + "There is no variations to delete.": "Il n’y a aucune variante à supprimer.", + "%s product(s) has been deleted.": "%s produit(s) a été supprimé(s).", + "There is no products to delete.": "Il n'y a aucun produit à supprimer.", + "%s products(s) has been deleted.": "%s produits ont été supprimés.", + "Unable to find the product, as the argument \"%s\" which value is \"%s": "Impossible de trouver le produit, comme l'argument \"%s\" dont la valeur est \"%s", + "The product variation has been successfully created.": "La variante de produit a été créée avec succès.", + "The product variation has been updated.": "La variante du produit a été mise à jour.", + "The provider has been created.": "Le fournisseur a été créé.", + "The provider has been updated.": "Le fournisseur a été mis à jour.", + "Unable to find the provider using the specified id.": "Impossible de trouver le fournisseur à l'aide de l'identifiant spécifié.", + "The provider has been deleted.": "Le fournisseur a été supprimé.", + "Unable to find the provider using the specified identifier.": "Impossible de trouver le fournisseur à l'aide de l'identifiant spécifié.", + "The provider account has been updated.": "Le compte du fournisseur a été mis à jour.", + "An error occurred: %s.": "Une erreur s'est produite : %s.", + "The procurement payment has been deducted.": "Le paiement du marché a été déduit.", + "The dashboard report has been updated.": "Le rapport du tableau de bord a été mis à jour.", + "A stock operation has recently been detected, however NexoPOS was'nt able to update the report accordingly. This occurs if the daily dashboard reference has'nt been created.": "Une opération de stock a été récemment détectée, mais NexoPOS n'a pas pu mettre à jour le rapport en conséquence. Cela se produit si la référence du tableau de bord quotidien n'a pas été créée.", + "Untracked Stock Operation": "Opération de stock non suivie", + "Unsupported action": "Action non prise en charge", + "The expense has been correctly saved.": "La dépense a été correctement enregistrée.", + "Member Since": "Membre depuis", + "Total Orders": "Total des commandes", + "Today's Orders": "Les commandes du jour", + "Total Sales": "Ventes totales", + "Today's Sales": "Ventes du jour", + "Total Refunds": "Remboursements totaux", + "Today's Refunds": "Les remboursements d'aujourd'hui", + "Total Customers": "Clients totaux", + "Today's Customers": "Les clients d'aujourd'hui", + "The report has been computed successfully.": "Le rapport a été calculé avec succès.", + "The table has been truncated.": "Le tableau a été tronqué.", + "No custom handler for the reset \"' . $mode . '\"": "Aucun gestionnaire personnalisé pour la réinitialisation \"' . $mode . '\"", + "Untitled Settings Page": "Page de paramètres sans titre", + "No description provided for this settings page.": "Aucune description fournie pour cette page de paramètres.", + "The form has been successfully saved.": "Le formulaire a été enregistré avec succès.", + "Unable to reach the host": "Impossible de joindre l'hôte", + "Unable to connect to the database using the credentials provided.": "Impossible de se connecter à la base de données à l'aide des informations d'identification fournies.", + "Unable to select the database.": "Impossible de sélectionner la base de données.", + "Access denied for this user.": "Accès refusé pour cet utilisateur.", + "Incorrect Authentication Plugin Provided.": "Plugin d'authentification incorrect fourni.", + "The connexion with the database was successful": "La connexion à la base de données a réussi", + "NexoPOS has been successfully installed.": "NexoPOS a été installé avec succès.", + "Cash": "Espèces", + "Bank Payment": "Paiement bancaire", + "Customer Account": "Compte client", + "Database connection was successful.": "La connexion à la base de données a réussi.", + "Unable to proceed. The parent tax doesn't exists.": "Impossible de continuer. La taxe mère n'existe pas.", + "A simple tax must not be assigned to a parent tax with the type \"simple": "Une taxe simple ne doit pas être affectée à une taxe mère de type « simple", + "A tax cannot be his own parent.": "Un impôt ne peut pas être son propre parent.", + "The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".": "La hiérarchie des taxes est limitée à 1. Une sous-taxe ne doit pas avoir le type de taxe défini sur « groupé ».", + "Unable to find the requested tax using the provided identifier.": "Impossible de trouver la taxe demandée à l'aide de l'identifiant fourni.", + "The tax group has been correctly saved.": "Le groupe de taxe a été correctement enregistré.", + "The tax has been correctly created.": "La taxe a été correctement créée.", + "The tax has been successfully deleted.": "La taxe a été supprimée avec succès.", + "Unable to find the requested account type using the provided id.": "Impossible de trouver le type de compte demandé à l'aide de l'identifiant fourni.", + "You cannot delete an account type that has transaction bound.": "Vous ne pouvez pas supprimer un type de compte lié à une transaction.", + "The account type has been deleted.": "Le type de compte a été supprimé.", + "The account has been created.": "Le compte a été créé.", + "The process has been executed with some failures. %s\/%s process(es) has successed.": "Le processus a été exécuté avec quelques échecs. %s\/%s processus ont réussi.", + "Procurement : %s": "Approvisionnement : %s", + "Refunding : %s": "Remboursement : %s", + "Spoiled Good : %s": "Bien gâté : %s", + "Sale : %s": "Ventes", + "Customer Credit Account": "Compte de crédit client", + "Customer Debit Account": "Compte de débit client", + "Sales Refunds Account": "Compte de remboursement des ventes", + "Register Cash-In Account": "Créer un compte d'encaissement", + "Register Cash-Out Account": "Créer un compte de retrait", + "Not found account type: %s": "Type de compte introuvable : %s", + "Refund : %s": "Remboursement : %s", + "Customer Account Crediting : %s": "Crédit du compte client : %s", + "Customer Account Purchase : %s": "Achat du compte client : %s", + "Customer Account Deducting : %s": "Déduction du compte client : %s", + "Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.": "Certaines transactions sont désactivées car NexoPOS n'est pas en mesure d'effectuer des requêtes asynchrones<\/a>.", + "First Day Of Month": "Premier jour du mois", + "Last Day Of Month": "Dernier jour du mois", + "Month middle Of Month": "Milieu du mois", + "{day} after month starts": "{jour} après le début du mois", + "{day} before month ends": "{day} avant la fin du mois", + "Every {day} of the month": "Chaque {jour} du mois", + "Days": "Jours", + "Make sure set a day that is likely to be executed": "Assurez-vous de définir un jour susceptible d'être exécuté", + "The Unit Group has been created.": "Le groupe de base a été créé.", + "The unit group %s has been updated.": "Le groupe de base %s a été mis à jour.", + "Unable to find the unit group to which this unit is attached.": "Impossible de trouver le groupe d'unités auquel cette unité est rattachée.", + "The unit has been saved.": "L'unité a été enregistrée.", + "Unable to find the Unit using the provided id.": "Impossible de trouver l'unité à l'aide de l'identifiant fourni.", + "The unit has been updated.": "L'unité a été mise à jour.", + "The unit group %s has more than one base unit": "Le groupe de base %s comporte plusieurs unités de base", + "The unit group %s doesn't have a base unit": "Le groupe d'unités %s n'a pas d'unité de base", + "The unit has been deleted.": "L'unité a été supprimée.", + "The system role \"Users\" can be retrieved.": "Le rôle système « Utilisateurs » peut être récupéré.", + "The default role that must be assigned to new users cannot be retrieved.": "Le rôle par défaut qui doit être attribué aux nouveaux utilisateurs ne peut pas être récupéré.", + "The %s is already taken.": "Le %s est déjà pris.", + "Clone of \"%s\"": "Clone de \"%s\"", + "The role has been cloned.": "Le rôle a été cloné.", + "The widgets was successfully updated.": "Les widgets ont été mis à jour avec succès.", + "The token was successfully created": "Le jeton a été créé avec succès", + "The token has been successfully deleted.": "Le jeton a été supprimé avec succès.", + "unable to find this validation class %s.": "impossible de trouver cette classe de validation %s.", + "Store Name": "Nom du magasin", + "This is the store name.": "C'est le nom du magasin.", + "Store Address": "Adresse du magasin", + "The actual store address.": "L'adresse réelle du magasin.", + "Store City": "Ville du magasin", + "The actual store city.": "La ville réelle du magasin.", + "Store Phone": "Téléphone du magasin", + "The phone number to reach the store.": "Le numéro de téléphone pour joindre le magasin.", + "Store Email": "E-mail du magasin", + "The actual store email. Might be used on invoice or for reports.": "L'e-mail réel du magasin. Peut être utilisé sur une facture ou pour des rapports.", + "Store PO.Box": "Magasin PO.Box", + "The store mail box number.": "Le numéro de boîte aux lettres du magasin.", + "Store Fax": "Télécopie en magasin", + "The store fax number.": "Le numéro de fax du magasin.", + "Store Additional Information": "Stocker des informations supplémentaires", + "Store additional information.": "Stockez des informations supplémentaires.", + "Store Square Logo": "Logo carré du magasin", + "Choose what is the square logo of the store.": "Choisissez quel est le logo carré du magasin.", + "Store Rectangle Logo": "Logo rectangulaire du magasin", + "Choose what is the rectangle logo of the store.": "Choisissez quel est le logo rectangle du magasin.", + "Define the default fallback language.": "Définissez la langue de secours par défaut.", + "Define the default theme.": "Définissez le thème par défaut.", + "Currency": "Devise", + "Currency Symbol": "Symbole de la monnaie", + "This is the currency symbol.": "C'est le symbole monétaire.", + "Currency ISO": "Devise ISO", + "The international currency ISO format.": "Le format ISO de la monnaie internationale.", + "Currency Position": "Position de la devise", + "Before the amount": "Avant le montant", + "After the amount": "Après le montant", + "Define where the currency should be located.": "Définissez l'emplacement de la devise.", + "Preferred Currency": "Devise préférée", + "ISO Currency": "Devise ISO", + "Symbol": "Symbole", + "Determine what is the currency indicator that should be used.": "Déterminez quel est l’indicateur de devise à utiliser.", + "Currency Thousand Separator": "Séparateur de milliers de devises", + "Define the symbol that indicate thousand. By default ": "Définissez le symbole qui indique mille. Par défaut", + "Currency Decimal Separator": "Séparateur décimal de devise", + "Define the symbol that indicate decimal number. By default \".\" is used.": "Définissez le symbole qui indique le nombre décimal. Par défaut, \".\" est utilisé.", + "Currency Precision": "Précision monétaire", + "%s numbers after the decimal": "%s nombres après la virgule", + "Date Format": "Format de date", + "This define how the date should be defined. The default format is \"Y-m-d\".": "Ceci définit comment la date doit être définie. Le format par défaut est \"Y-m-d\".", + "This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".": "Ceci définit comment la date et les heures doivent être formatées. Le format par défaut est \"Y-m-d H:i\".", + "Registration": "Inscription", + "Registration Open": "Inscription ouverte", + "Determine if everyone can register.": "Déterminez si tout le monde peut s’inscrire.", + "Registration Role": "Rôle d'inscription", + "Select what is the registration role.": "Sélectionnez quel est le rôle d'enregistrement.", + "Requires Validation": "Nécessite une validation", + "Force account validation after the registration.": "Forcer la validation du compte après l'inscription.", + "Allow Recovery": "Autoriser la récupération", + "Allow any user to recover his account.": "Autoriser n'importe quel utilisateur à récupérer son compte.", + "Procurement Cash Flow Account": "Compte de flux de trésorerie d'approvisionnement", + "Sale Cash Flow Account": "Compte de flux de trésorerie de vente", + "Customer Credit Account (crediting)": "Compte de crédit client (crédit)", + "Customer Credit Account (debitting)": "Compte crédit client (débit)", + "Stock Return Account (Spoiled Items)": "Compte de retour de stock (articles abîmés)", + "Stock return for spoiled items will be attached to this account": "Le retour de stock pour les articles gâtés sera joint à ce compte", + "Enable Reward": "Activer la récompense", + "Will activate the reward system for the customers.": "Activera le système de récompense pour les clients.", + "Require Valid Email": "Exiger un e-mail valide", + "Will for valid unique email for every customer.": "Will pour un e-mail unique valide pour chaque client.", + "Require Unique Phone": "Exiger un téléphone unique", + "Every customer should have a unique phone number.": "Chaque client doit avoir un numéro de téléphone unique.", + "Default Customer Account": "Compte client par défaut", + "You must create a customer to which each sales are attributed when the walking customer doesn't register.": "Vous devez créer un client auquel chaque vente est attribuée lorsque le client ambulant ne s'inscrit pas.", + "Default Customer Group": "Groupe de clients par défaut", + "Select to which group each new created customers are assigned to.": "Sélectionnez à quel groupe chaque nouveau client créé est affecté.", + "Enable Credit & Account": "Activer le crédit et le compte", + "The customers will be able to make deposit or obtain credit.": "Les clients pourront effectuer un dépôt ou obtenir un crédit.", + "Receipts": "Reçus", + "Receipt Template": "Modèle de reçu", + "Default": "Défaut", + "Choose the template that applies to receipts": "Choisissez le modèle qui s'applique aux reçus", + "Receipt Logo": "Logo du reçu", + "Provide a URL to the logo.": "Fournissez une URL vers le logo.", + "Merge Products On Receipt\/Invoice": "Fusionner les produits à réception\/facture", + "All similar products will be merged to avoid a paper waste for the receipt\/invoice.": "Tous les produits similaires seront fusionnés afin d'éviter un gaspillage de papier pour le reçu\/facture.", + "Show Tax Breakdown": "Afficher la répartition des taxes", + "Will display the tax breakdown on the receipt\/invoice.": "Affichera le détail des taxes sur le reçu\/la facture.", + "Receipt Footer": "Pied de page du reçu", + "If you would like to add some disclosure at the bottom of the receipt.": "Si vous souhaitez ajouter des informations au bas du reçu.", + "Column A": "Colonne A", + "Available tags : ": "Balises disponibles :", + "{store_name}: displays the store name.": "{store_name} : affiche le nom du magasin.", + "{store_email}: displays the store email.": "{store_email} : affiche l'e-mail du magasin.", + "{store_phone}: displays the store phone number.": "{store_phone} : affiche le numéro de téléphone du magasin.", + "{cashier_name}: displays the cashier name.": "{cashier_name} : affiche le nom du caissier.", + "{cashier_id}: displays the cashier id.": "{cashier_id} : affiche l'identifiant du caissier.", + "{order_code}: displays the order code.": "{order_code} : affiche le code de commande.", + "{order_date}: displays the order date.": "{order_date} : affiche la date de la commande.", + "{order_type}: displays the order type.": "{order_type} : affiche le type de commande.", + "{customer_email}: displays the customer email.": "{customer_email} : affiche l'e-mail du client.", + "{shipping_first_name}: displays the shipping first name.": "{shipping_first_name} : affiche le prénom de l'expéditeur.", + "{shipping_last_name}: displays the shipping last name.": "{shipping_last_name} : affiche le nom de famille d'expédition.", + "{shipping_phone}: displays the shipping phone.": "{shipping_phone} : affiche le téléphone d'expédition.", + "{shipping_address_1}: displays the shipping address_1.": "{shipping_address_1} : affiche l'adresse de livraison_1.", + "{shipping_address_2}: displays the shipping address_2.": "{shipping_address_2} : affiche l'adresse de livraison_2.", + "{shipping_country}: displays the shipping country.": "{shipping_country} : affiche le pays de livraison.", + "{shipping_city}: displays the shipping city.": "{shipping_city} : affiche la ville de livraison.", + "{shipping_pobox}: displays the shipping pobox.": "{shipping_pobox} : affiche la pobox d'expédition.", + "{shipping_company}: displays the shipping company.": "{shipping_company} : affiche la compagnie maritime.", + "{shipping_email}: displays the shipping email.": "{shipping_email} : affiche l'e-mail d'expédition.", + "{billing_first_name}: displays the billing first name.": "{billing_first_name} : affiche le prénom de facturation.", + "{billing_last_name}: displays the billing last name.": "{billing_last_name} : affiche le nom de famille de facturation.", + "{billing_phone}: displays the billing phone.": "{billing_phone} : affiche le téléphone de facturation.", + "{billing_address_1}: displays the billing address_1.": "{billing_address_1} : affiche l'adresse de facturation_1.", + "{billing_address_2}: displays the billing address_2.": "{billing_address_2} : affiche l'adresse de facturation_2.", + "{billing_country}: displays the billing country.": "{billing_country} : affiche le pays de facturation.", + "{billing_city}: displays the billing city.": "{billing_city} : affiche la ville de facturation.", + "{billing_pobox}: displays the billing pobox.": "{billing_pobox} : affiche la pobox de facturation.", + "{billing_company}: displays the billing company.": "{billing_company} : affiche la société de facturation.", + "{billing_email}: displays the billing email.": "{billing_email} : affiche l'e-mail de facturation.", + "Column B": "Colonne B", + "Available tags :": "Balises disponibles :", + "Order Code Type": "Type de code de commande", + "Determine how the system will generate code for each orders.": "Déterminez comment le système générera le code pour chaque commande.", + "Sequential": "Séquentiel", + "Random Code": "Code aléatoire", + "Number Sequential": "Numéro séquentiel", + "Allow Unpaid Orders": "Autoriser les commandes impayées", + "Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".": "Empêchera les commandes incomplètes d’être passées. Si le crédit est autorisé, cette option doit être définie sur « oui ».", + "Allow Partial Orders": "Autoriser les commandes partielles", + "Will prevent partially paid orders to be placed.": "Empêchera la passation de commandes partiellement payées.", + "Quotation Expiration": "Expiration du devis", + "Quotations will get deleted after they defined they has reached.": "Les devis seront supprimés une fois qu'ils auront défini qu'ils ont été atteints.", + "%s Days": "%s jours", + "Features": "Caractéristiques", + "Show Quantity": "Afficher la quantité", + "Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.": "Affichera le sélecteur de quantité lors du choix d'un produit. Sinon, la quantité par défaut est fixée à 1.", + "Merge Similar Items": "Fusionner les éléments similaires", + "Will enforce similar products to be merged from the POS.": "Imposera la fusion des produits similaires à partir du point de vente.", + "Allow Wholesale Price": "Autoriser le prix de gros", + "Define if the wholesale price can be selected on the POS.": "Définissez si le prix de gros peut être sélectionné sur le POS.", + "Allow Decimal Quantities": "Autoriser les quantités décimales", + "Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.": "Changera le clavier numérique pour autoriser la décimale pour les quantités. Uniquement pour le pavé numérique « par défaut ».", + "Allow Customer Creation": "Autoriser la création de clients", + "Allow customers to be created on the POS.": "Autoriser la création de clients sur le point de vente.", + "Quick Product": "Produit rapide", + "Allow quick product to be created from the POS.": "Autoriser la création rapide d'un produit à partir du point de vente.", + "Editable Unit Price": "Prix unitaire modifiable", + "Allow product unit price to be edited.": "Autoriser la modification du prix unitaire du produit.", + "Show Price With Tax": "Afficher le prix avec taxe", + "Will display price with tax for each products.": "Affichera le prix avec taxe pour chaque produit.", + "Order Types": "Types de commandes", + "Control the order type enabled.": "Contrôlez le type de commande activé.", + "Numpad": "Pavé numérique", + "Advanced": "Avancé", + "Will set what is the numpad used on the POS screen.": "Définira quel est le pavé numérique utilisé sur l'écran du point de vente.", + "Force Barcode Auto Focus": "Forcer la mise au point automatique du code-barres", + "Will permanently enable barcode autofocus to ease using a barcode reader.": "Permettra en permanence la mise au point automatique des codes-barres pour faciliter l'utilisation d'un lecteur de codes-barres.", + "Bubble": "Bulle", + "Ding": "Ding", + "Pop": "Populaire", + "Cash Sound": "Son de trésorerie", + "Layout": "Mise en page", + "Retail Layout": "Disposition de vente au détail", + "Clothing Shop": "Boutique de vêtements", + "POS Layout": "Disposition du point de vente", + "Change the layout of the POS.": "Changez la disposition du point de vente.", + "Sale Complete Sound": "Vente Sono complet", + "New Item Audio": "Nouvel élément audio", + "The sound that plays when an item is added to the cart.": "Le son émis lorsqu'un article est ajouté au panier.", + "Printing": "Impression", + "Printed Document": "Document imprimé", + "Choose the document used for printing aster a sale.": "Choisissez le document utilisé pour l'impression après une vente.", + "Printing Enabled For": "Impression activée pour", + "All Orders": "Tous les ordres", + "From Partially Paid Orders": "À partir de commandes partiellement payées", + "Only Paid Orders": "Uniquement les commandes payées", + "Determine when the printing should be enabled.": "Déterminez quand l’impression doit être activée.", + "Printing Gateway": "Passerelle d'impression", + "Default Printing (web)": "Impression par défaut (Web)", + "Determine what is the gateway used for printing.": "Déterminez quelle est la passerelle utilisée pour l’impression.", + "Enable Cash Registers": "Activer les caisses enregistreuses", + "Determine if the POS will support cash registers.": "Déterminez si le point de vente prendra en charge les caisses enregistreuses.", + "Cashier Idle Counter": "Compteur inactif de caissier", + "5 Minutes": "5 minutes", + "10 Minutes": "10 minutes", + "15 Minutes": "15 minutes", + "20 Minutes": "20 minutes", + "30 Minutes": "30 minutes", + "Selected after how many minutes the system will set the cashier as idle.": "Sélectionné après combien de minutes le système définira le caissier comme inactif.", + "Cash Disbursement": "Décaissement en espèces", + "Allow cash disbursement by the cashier.": "Autoriser les décaissements en espèces par le caissier.", + "Cash Registers": "Caisses enregistreuses", + "Keyboard Shortcuts": "Raccourcis clavier", + "Cancel Order": "annuler la commande", + "Keyboard shortcut to cancel the current order.": "Raccourci clavier pour annuler la commande en cours.", + "Hold Order": "Conserver la commande", + "Keyboard shortcut to hold the current order.": "Raccourci clavier pour conserver la commande en cours.", + "Keyboard shortcut to create a customer.": "Raccourci clavier pour créer un client.", + "Proceed Payment": "Procéder au paiement", + "Keyboard shortcut to proceed to the payment.": "Raccourci clavier pour procéder au paiement.", + "Open Shipping": "Expédition ouverte", + "Keyboard shortcut to define shipping details.": "Raccourci clavier pour définir les détails d'expédition.", + "Open Note": "Ouvrir la note", + "Keyboard shortcut to open the notes.": "Raccourci clavier pour ouvrir les notes.", + "Order Type Selector": "Sélecteur de type de commande", + "Keyboard shortcut to open the order type selector.": "Raccourci clavier pour ouvrir le sélecteur de type de commande.", + "Toggle Fullscreen": "Basculer en plein écran", + "Keyboard shortcut to toggle fullscreen.": "Raccourci clavier pour basculer en plein écran.", + "Quick Search": "Recherche rapide", + "Keyboard shortcut open the quick search popup.": "Le raccourci clavier ouvre la fenêtre contextuelle de recherche rapide.", + "Toggle Product Merge": "Toggle Fusion de produits", + "Will enable or disable the product merging.": "Activera ou désactivera la fusion de produits.", + "Amount Shortcuts": "Raccourcis de montant", + "The amount numbers shortcuts separated with a \"|\".": "Le montant numérote les raccourcis séparés par un \"|\".", + "VAT Type": "Type de TVA", + "Determine the VAT type that should be used.": "Déterminez le type de TVA à utiliser.", + "Flat Rate": "Forfait", + "Flexible Rate": "Tarif flexible", + "Products Vat": "Produits TVA", + "Products & Flat Rate": "Produits et forfait", + "Products & Flexible Rate": "Produits et tarifs flexibles", + "Define the tax group that applies to the sales.": "Définissez le groupe de taxe qui s'applique aux ventes.", + "Define how the tax is computed on sales.": "Définissez la manière dont la taxe est calculée sur les ventes.", + "VAT Settings": "Paramètres de TVA", + "Enable Email Reporting": "Activer les rapports par e-mail", + "Determine if the reporting should be enabled globally.": "Déterminez si la création de rapports doit être activée globalement.", + "Supplies": "Fournitures", + "Public Name": "Nom public", + "Define what is the user public name. If not provided, the username is used instead.": "Définissez quel est le nom public de l'utilisateur. S’il n’est pas fourni, le nom d’utilisateur est utilisé à la place.", + "Enable Workers": "Activer les travailleurs", + "Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".": "Activez les services d'arrière-plan pour NexoPOS. Actualisez pour vérifier si l'option est devenue \"Oui\".", + "Test": "Test", + "Best Cashiers": "Meilleurs caissiers", + "Will display all cashiers who performs well.": "Affichera tous les caissiers qui fonctionnent bien.", + "Best Customers": "Meilleurs clients", + "Will display all customers with the highest purchases.": "Affichera tous les clients ayant les achats les plus élevés.", + "Expense Card Widget": "Widget de carte de dépenses", + "Will display a card of current and overwall expenses.": "Affichera une carte des dépenses courantes et globales.", + "Incomplete Sale Card Widget": "Widget de carte de vente incomplète", + "Will display a card of current and overall incomplete sales.": "Affichera une carte des ventes actuelles et globales incomplètes.", + "Orders Chart": "Tableau des commandes", + "Will display a chart of weekly sales.": "Affichera un graphique des ventes hebdomadaires.", + "Orders Summary": "Récapitulatif des commandes", + "Will display a summary of recent sales.": "Affichera un résumé des ventes récentes.", + "Profile": "Profil", + "Will display a profile widget with user stats.": "Affichera un widget de profil avec les statistiques de l'utilisateur.", + "Sale Card Widget": "Widget de carte de vente", + "Will display current and overall sales.": "Affichera les ventes actuelles et globales.", + "OK": "D'ACCORD", + "Howdy, {name}": "Salut, {name}", + "Return To Calendar": "Retour au calendrier", + "Sun": "Soleil", + "Mon": "Lun", + "Tue": "Mar", + "Wed": "Épouser", + "Thr": "Thr", + "Fri": "Ven", + "Sat": "Assis", + "The left range will be invalid.": "La plage de gauche sera invalide.", + "The right range will be invalid.": "La bonne plage sera invalide.", + "This field must contain a valid email address.": "Ce champ doit contenir une adresse email valide.", + "Close": "Fermer", + "No submit URL was provided": "Aucune URL de soumission n'a été fournie", + "Okay": "D'accord", + "Go Back": "Retourner", + "Save": "Sauvegarder", + "Filters": "Filtres", + "Has Filters": "A des filtres", + "{entries} entries selected": "{entries} entrées sélectionnées", + "Download": "Télécharger", + "There is nothing to display...": "Il n'y a rien à afficher...", + "Bulk Actions": "Actions Groupées", + "Apply": "Appliquer", + "displaying {perPage} on {items} items": "affichage de {perPage} sur {items} éléments", + "The document has been generated.": "Le document a été généré.", + "Unexpected error occurred.": "Une erreur inattendue s'est produite.", + "Clear Selected Entries ?": "Effacer les entrées sélectionnées ?", + "Would you like to clear all selected entries ?": "Souhaitez-vous effacer toutes les entrées sélectionnées ?", + "Sorting is explicitely disabled on this column": "Le tri est explicitement désactivé sur cette colonne", + "Would you like to perform the selected bulk action on the selected entries ?": "Souhaitez-vous effectuer l'action groupée sélectionnée sur les entrées sélectionnées ?", + "No selection has been made.": "Aucune sélection n'a été effectuée.", + "No action has been selected.": "Aucune action n'a été sélectionnée.", + "N\/D": "N\/D", + "Range Starts": "Débuts de plage", + "Range Ends": "Fins de plage", + "Click here to add widgets": "Cliquez ici pour ajouter des widgets", + "An unpexpected error occured while using the widget.": "Une erreur inattendue s'est produite lors de l'utilisation du widget.", + "Choose Widget": "Choisir un widget", + "Select with widget you want to add to the column.": "Sélectionnez avec le widget que vous souhaitez ajouter à la colonne.", + "Nothing to display": "Rien à afficher", + "Enter": "Entrer", + "Search...": "Recherche...", + "An unexpected error occurred.": "Une erreur inattendue est apparue.", + "Choose an option": "Choisis une option", + "Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".": "Impossible de charger le composant \"${action.component}\". Assurez-vous que le composant est enregistré dans \"nsExtraComponents\".", + "Unamed Tab": "Onglet sans nom", + "Unknown Status": "Statut inconnu", + "The selected print gateway doesn't support this type of printing.": "La passerelle d'impression sélectionnée ne prend pas en charge ce type d'impression.", + "An error unexpected occured while printing.": "Une erreur inattendue s'est produite lors de l'impression.", + "millisecond| second| minute| hour| day| week| month| year| decade| century| millennium": "milliseconde| seconde| minute| heure| jour| semaine| mois| année| décennie | siècle| millénaire", + "milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia": "millisecondes| secondes| minutes| heures| jours| semaines| mois| ans| décennies| siècles| des millénaires", + "and": "et", + "{date} ago": "il y a {date}", + "In {date}": "À {date}", + "Password Forgotten ?": "Mot de passe oublié ?", + "Sign In": "Se connecter", + "Register": "Registre", + "Unable to proceed the form is not valid.": "Impossible de poursuivre, le formulaire n'est pas valide.", + "An unexpected error occured.": "Une erreur inattendue s'est produite.", + "Save Password": "Enregistrer le mot de passe", + "Remember Your Password ?": "Rappelez-vous votre mot de passe ?", + "Submit": "Soumettre", + "Already registered ?": "Déjà enregistré ?", + "Return": "Retour", + "Warning": "Avertissement", + "Learn More": "Apprendre encore plus", + "Change Type": "Changer le type", + "Save Expense": "Économiser des dépenses", + "Confirm Your Action": "Confirmez votre action", + "No configuration were choosen. Unable to proceed.": "Aucune configuration n'a été choisie. Impossible de continuer.", + "Conditions": "Conditions", + "By proceeding the current for and all your entries will be cleared. Would you like to proceed?": "En poursuivant le processus actuel, toutes vos entrées seront effacées. Voulez vous procéder?", + "Today": "Aujourd'hui", + "Clients Registered": "Clients enregistrés", + "Commissions": "Commissions", + "Upload": "Télécharger", + "No modules matches your search term.": "Aucun module ne correspond à votre terme de recherche.", + "Read More": "En savoir plus", + "Enable": "Activer", + "Disable": "Désactiver", + "Press \"\/\" to search modules": "Appuyez sur \"\/\" pour rechercher des modules", + "No module has been uploaded yet.": "Aucun module n'a encore été téléchargé.", + "{module}": "{module}", + "Would you like to delete \"{module}\"? All data created by the module might also be deleted.": "Souhaitez-vous supprimer \"{module}\" ? Toutes les données créées par le module peuvent également être supprimées.", + "Gallery": "Galerie", + "You're about to delete selected resources. Would you like to proceed?": "Vous êtes sur le point de supprimer les ressources sélectionnées. Voulez vous procéder?", + "Medias Manager": "Mediathèque", + "Click Here Or Drop Your File To Upload": "Cliquez ici ou déposez votre fichier pour le télécharger", + "Search Medias": "Rechercher des médias", + "Cancel": "Annuler", + "Nothing has already been uploaded": "Rien n'a déjà été téléchargé", + "Uploaded At": "Téléchargé à", + "Bulk Select": "Sélection groupée", + "Previous": "Précédent", + "Next": "Suivant", + "Use Selected": "Utiliser la sélection", + "Nothing to care about !": "Rien d'inquiétant !", + "Clear All": "Tout effacer", + "Would you like to clear all the notifications ?": "Souhaitez-vous effacer toutes les notifications ?", + "Press "\/" to search permissions": "Appuyez sur \"\/\" pour rechercher des autorisations", + "Permissions": "Autorisations", + "Would you like to bulk edit a system role ?": "Souhaitez-vous modifier en bloc un rôle système ?", + "Save Settings": "Enregistrer les paramètres", + "Payment Summary": "Résumé de paiement", + "Order Status": "Statut de la commande", + "Processing Status": "Statut de traitement", + "Refunded Products": "Produits remboursés", + "All Refunds": "Tous les remboursements", + "Would you proceed ?": "Voudriez-vous continuer ?", + "The processing status of the order will be changed. Please confirm your action.": "Le statut de traitement de la commande sera modifié. Veuillez confirmer votre action.", + "The delivery status of the order will be changed. Please confirm your action.": "Le statut de livraison de la commande sera modifié. Veuillez confirmer votre action.", + "Payment Method": "Mode de paiement", + "Before submitting the payment, choose the payment type used for that order.": "Avant de soumettre le paiement, choisissez le type de paiement utilisé pour cette commande.", + "Submit Payment": "Soumettre le paiement", + "Select the payment type that must apply to the current order.": "Sélectionnez le type de paiement qui doit s'appliquer à la commande en cours.", + "Payment Type": "Type de paiement", + "An unexpected error has occurred": "Une erreur imprévue s'est produite", + "The form is not valid.": "Le formulaire n'est pas valide.", + "Update Instalment Date": "Date de versement de la mise à jour", + "Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.": "Souhaitez-vous marquer ce versement comme étant dû aujourd'hui ? Si vous confirmez, le versement sera marqué comme payé.", + "Create": "Créer", + "Total :": "Total :", + "Remaining :": "Restant :", + "Instalments:": "Versements :", + "Add Instalment": "Ajouter un versement", + "This instalment doesn't have any payment attached.": "Ce versement n'est associé à aucun paiement.", + "Would you like to create this instalment ?": "Souhaitez-vous créer cette tranche ?", + "Would you like to delete this instalment ?": "Souhaitez-vous supprimer cette tranche ?", + "Would you like to update that instalment ?": "Souhaitez-vous mettre à jour cette version ?", + "Print": "Imprimer", + "Store Details": "Détails du magasin", + "Cashier": "La caissière", + "Billing Details": "Détails de la facturation", + "Shipping Details": "Les détails d'expédition", + "No payment possible for paid order.": "Aucun paiement possible pour commande payée.", + "Payment History": "historique de paiement", + "Unknown": "Inconnu", + "You make a payment for {amount}. A payment can't be canceled. Would you like to proceed ?": "Vous effectuez un paiement de {amount}. Un paiement ne peut pas être annulé. Voulez vous procéder ?", + "Refund With Products": "Remboursement avec les produits", + "Refund Shipping": "Remboursement Expédition", + "Add Product": "Ajouter un produit", + "Summary": "Résumé", + "Payment Gateway": "Passerelle de paiement", + "Screen": "Écran", + "Select the product to perform a refund.": "Sélectionnez le produit pour effectuer un remboursement.", + "Please select a payment gateway before proceeding.": "Veuillez sélectionner une passerelle de paiement avant de continuer.", + "There is nothing to refund.": "Il n'y a rien à rembourser.", + "Please provide a valid payment amount.": "Veuillez fournir un montant de paiement valide.", + "The refund will be made on the current order.": "Le remboursement sera effectué sur la commande en cours.", + "Please select a product before proceeding.": "Veuillez sélectionner un produit avant de continuer.", + "Not enough quantity to proceed.": "Pas assez de quantité pour continuer.", + "Would you like to delete this product ?": "Souhaitez-vous supprimer ce produit ?", + "You're not allowed to add a discount on the product.": "Vous n'êtes pas autorisé à ajouter une remise sur le produit.", + "You're not allowed to add a discount on the cart.": "Vous n'êtes pas autorisé à ajouter une réduction sur le panier.", + "Unable to hold an order which payment status has been updated already.": "Impossible de conserver une commande dont le statut de paiement a déjà été mis à jour.", + "Pay": "Payer", + "Order Type": "Type de commande", + "Cash Register : {register}": "Caisse enregistreuse : {register}", + "The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?": "La commande en cours sera effacée. Mais pas supprimé s'il est persistant. Voulez vous procéder ?", + "Cart": "Chariot", + "Comments": "commentaires", + "No products added...": "Aucun produit ajouté...", + "Price": "Prix", + "Tax Inclusive": "Taxe incluse", + "Apply Coupon": "Appliquer Coupon", + "You don't have the right to edit the purchase price.": "Vous n'avez pas le droit de modifier le prix d'achat.", + "Dynamic product can't have their price updated.": "Le prix des produits dynamiques ne peut pas être mis à jour.", + "The product price has been updated.": "Le prix du produit a été mis à jour.", + "The editable price feature is disabled.": "La fonctionnalité de prix modifiable est désactivée.", + "You're not allowed to edit the order settings.": "Vous n'êtes pas autorisé à modifier les paramètres de la commande.", + "Unable to change the price mode. This feature has been disabled.": "Impossible de changer le mode prix. Cette fonctionnalité a été désactivée.", + "Enable WholeSale Price": "Activer le prix de vente en gros", + "Would you like to switch to wholesale price ?": "Vous souhaitez passer au prix de gros ?", + "Enable Normal Price": "Activer le prix normal", + "Would you like to switch to normal price ?": "Souhaitez-vous passer au prix normal ?", + "Search for products.": "Rechercher des produits.", + "Toggle merging similar products.": "Activer la fusion de produits similaires.", + "Toggle auto focus.": "Activer la mise au point automatique.", + "Current Balance": "Solde actuel", + "Full Payment": "Règlement de la totalité", + "The customer account can only be used once per order. Consider deleting the previously used payment.": "Le compte client ne peut être utilisé qu'une seule fois par commande. Pensez à supprimer le paiement précédemment utilisé.", + "Not enough funds to add {amount} as a payment. Available balance {balance}.": "Pas assez de fonds pour ajouter {amount} comme paiement. Solde disponible {solde}.", + "Confirm Full Payment": "Confirmer le paiement intégral", + "You're about to use {amount} from the customer account to make a payment. Would you like to proceed ?": "Vous\\ êtes sur le point d'utiliser {amount} du compte client pour effectuer un paiement. Voulez vous procéder ?", + "A full payment will be made using {paymentType} for {total}": "Un paiement intégral sera effectué en utilisant {paymentType} pour {total}", + "You need to provide some products before proceeding.": "Vous devez fournir certains produits avant de continuer.", + "Unable to add the product, there is not enough stock. Remaining %s": "Impossible d'ajouter le produit, il n'y a pas assez de stock. % restants", + "Add Images": "Ajouter des images", + "Remove Image": "Supprimer l'image", + "New Group": "Nouveau groupe", + "Available Quantity": "quantité disponible", + "Would you like to delete this group ?": "Souhaitez-vous supprimer ce groupe ?", + "Your Attention Is Required": "Votre attention est requise", + "The current unit you're about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?": "L'unité actuelle que vous êtes sur le point de supprimer a une référence dans la base de données et elle a peut-être déjà approvisionné du stock. La suppression de cette référence supprimera le stock acheté. Voudriez-vous continuer ?", + "Please select at least one unit group before you proceed.": "Veuillez sélectionner au moins un groupe de base avant de continuer.", + "There shoulnd't be more option than there are units.": "Il ne devrait pas y avoir plus d'options qu'il n'y a d'unités.", + "Unable to proceed, more than one product is set as featured": "Impossible de continuer, plusieurs produits sont définis comme présentés", + "Either Selling or Purchase unit isn't defined. Unable to proceed.": "L'unité de vente ou d'achat n'est pas définie. Impossible de continuer.", + "Unable to proceed as one of the unit group field is invalid": "Impossible de continuer car l'un des champs du groupe d'unités n'est pas valide.", + "Would you like to delete this variation ?": "Souhaitez-vous supprimer cette variante ?", + "Details": "Détails", + "No result match your query.": "Aucun résultat ne correspond à votre requête.", + "Unable to add product which doesn't unit quantities defined.": "Impossible d'ajouter un produit dont les quantités unitaires ne sont pas définies.", + "Unable to proceed, no product were provided.": "Impossible de continuer, aucun produit n'a été fourni.", + "Unable to proceed, one or more product has incorrect values.": "Impossible de continuer, un ou plusieurs produits ont des valeurs incorrectes.", + "Unable to proceed, the procurement form is not valid.": "Impossible de procéder, le formulaire de passation de marché n'est pas valide.", + "Unable to submit, no valid submit URL were provided.": "Soumission impossible, aucune URL de soumission valide n'a été fournie.", + "No title is provided": "Aucun titre n'est fourni", + "SKU, Barcode, Name": "SKU, code-barres, nom", + "Search products...": "Recherche de produits...", + "Set Sale Price": "Fixer le prix de vente", + "Remove": "Retirer", + "No product are added to this group.": "Aucun produit n'est ajouté à ce groupe.", + "Delete Sub item": "Supprimer le sous-élément", + "Would you like to delete this sub item?": "Souhaitez-vous supprimer ce sous-élément ?", + "Unable to add a grouped product.": "Impossible d'ajouter un produit groupé.", + "Choose The Unit": "Choisissez l'unité", + "An unexpected error occurred": "une erreur inattendue est apparue", + "Ok": "D'accord", + "The product already exists on the table.": "Le produit existe déjà sur la table.", + "The specified quantity exceed the available quantity.": "La quantité spécifiée dépasse la quantité disponible.", + "Unable to proceed as the table is empty.": "Impossible de continuer car la table est vide.", + "The stock adjustment is about to be made. Would you like to confirm ?": "L'ajustement des stocks est sur le point d'être effectué. Souhaitez-vous confirmer ?", + "More Details": "Plus de détails", + "Useful to describe better what are the reasons that leaded to this adjustment.": "Utile pour mieux décrire quelles sont les raisons qui ont conduit à cet ajustement.", + "The reason has been updated.": "La raison a été mise à jour.", + "Would you like to remove this product from the table ?": "Souhaitez-vous retirer ce produit du tableau ?", + "Search": "Recherche", + "Search and add some products": "Rechercher et ajouter des produits", + "Proceed": "Procéder", + "About Token": "À propos du jeton", + "Save Token": "Enregistrer le jeton", + "Generated Tokens": "Jetons générés", + "Created": "Créé", + "Last Use": "Dernière utilisation", + "Never": "Jamais", + "Expires": "Expire", + "Revoke": "Révoquer", + "You haven't yet generated any token for your account. Create one to get started.": "Vous n'avez encore généré aucun token pour votre compte. Créez-en un pour commencer.", + "Token Name": "Nom du jeton", + "This will be used to identifier the token.": "Ceci sera utilisé pour identifier le jeton.", + "Unable to proceed, the form is not valid.": "Impossible de continuer, le formulaire n'est pas valide.", + "You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?": "Vous êtes sur le point de supprimer un jeton susceptible d'être utilisé par une application externe. La suppression empêchera cette application d'accéder à l'API. Voulez vous procéder ?", + "Load": "Charger", + "Sort Results": "Trier les résultats", + "Using Quantity Ascending": "Utilisation de la quantité croissante", + "Using Quantity Descending": "Utiliser la quantité décroissante", + "Using Sales Ascending": "Utilisation des ventes croissantes", + "Using Sales Descending": "Utilisation des ventes décroissantes", + "Using Name Ascending": "Utilisation du nom par ordre croissant", + "Using Name Descending": "Utilisation du nom par ordre décroissant", + "Date : {date}": "Date : {date}", + "Document : Best Products": "Document : Meilleurs produits", + "By : {user}": "Par : {utilisateur}", + "Progress": "Progrès", + "No results to show.": "Aucun résultat à afficher.", + "Start by choosing a range and loading the report.": "Commencez par choisir une plage et chargez le rapport.", + "Document : Sale By Payment": "Document : Vente Par Paiement", + "Search Customer...": "Rechercher un client...", + "Document : Customer Statement": "Document : Relevé Client", + "Customer : {selectedCustomerName}": "Client : {selectedCustomerName}", + "Due Amount": "Montant dû", + "An unexpected error occured": "Une erreur inattendue s'est produite", + "Report Type": "Type de rapport", + "Document : {reportTypeName}": "Document : {reportTypeName}", + "There is no product to display...": "Il n'y a aucun produit à afficher...", + "Low Stock Report": "Rapport de stock faible", + "Document : Payment Type": "Document : Type de paiement", + "Unable to proceed. Select a correct time range.": "Impossible de continuer. Sélectionnez une plage horaire correcte.", + "Unable to proceed. The current time range is not valid.": "Impossible de continuer. La plage horaire actuelle n'est pas valide.", + "Document : Profit Report": "Document : Rapport sur les bénéfices", + "Profit": "Profit", + "All Users": "Tous les utilisateurs", + "Document : Sale Report": "Document : Rapport de vente", + "Sales Discounts": "Remises sur les ventes", + "Sales Taxes": "Taxes de vente", + "Product Taxes": "Taxes sur les produits", + "Discounts": "Réductions", + "Categories Detailed": "Catégories détaillées", + "Categories Summary": "Résumé des catégories", + "Allow you to choose the report type.": "Vous permet de choisir le type de rapport.", + "Filter User": "Filtrer l'utilisateur", + "No user was found for proceeding the filtering.": "Aucun utilisateur n'a été trouvé pour procéder au filtrage.", + "Document : Sold Stock Report": "Document : Rapport des stocks vendus", + "An Error Has Occured": "Une erreur est survenue", + "Unable to load the report as the timezone is not set on the settings.": "Impossible de charger le rapport car le fuseau horaire n'est pas défini dans les paramètres.", + "Year": "Année", + "Recompute": "Recalculer", + "Document : Yearly Report": "Document : Rapport Annuel", + "Sales": "Ventes", + "Expenses": "Dépenses", + "Income": "Revenu", + "January": "Janvier", + "Febuary": "Février", + "March": "Mars", + "April": "Avril", + "May": "Peut", + "June": "Juin", + "July": "Juillet", + "August": "Août", + "September": "Septembre", + "October": "Octobre", + "November": "Novembre", + "December": "Décembre", + "Would you like to proceed ?": "Voulez vous procéder ?", + "The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.": "Le rapport sera calculé pour l'année en cours, un travail sera expédié et vous serez informé une fois terminé.", + "This form is not completely loaded.": "Ce formulaire n'est pas complètement chargé.", + "No rules has been provided.": "Aucune règle n'a été fournie.", + "No valid run were provided.": "Aucune analyse valide n'a été fournie.", + "Unable to proceed, the form is invalid.": "Impossible de continuer, le formulaire n'est pas valide.", + "Unable to proceed, no valid submit URL is defined.": "Impossible de continuer, aucune URL de soumission valide n'est définie.", + "No title Provided": "Aucun titre fourni", + "Add Rule": "Ajouter une règle", + "Driver": "Conducteur", + "Set the database driver": "Définir le pilote de base de données", + "Hostname": "Nom d'hôte", + "Provide the database hostname": "Fournissez le nom d'hôte de la base de données", + "Username required to connect to the database.": "Nom d'utilisateur requis pour se connecter à la base de données.", + "The username password required to connect.": "Le mot de passe du nom d'utilisateur requis pour se connecter.", + "Database Name": "Nom de la base de données", + "Provide the database name. Leave empty to use default file for SQLite Driver.": "Fournissez le nom de la base de données. Laissez vide pour utiliser le fichier par défaut pour le pilote SQLite.", + "Database Prefix": "Préfixe de base de données", + "Provide the database prefix.": "Fournissez le préfixe de la base de données.", + "Port": "Port", + "Provide the hostname port.": "Fournissez le port du nom d'hôte.", + "Install": "Installer", + "Application": "Application", + "That is the application name.": "C'est le nom de l'application.", + "Provide the administrator username.": "Fournissez le nom d'utilisateur de l'administrateur.", + "Provide the administrator email.": "Fournissez l'e-mail de l'administrateur.", + "What should be the password required for authentication.": "Quel devrait être le mot de passe requis pour l'authentification.", + "Should be the same as the password above.": "Doit être le même que le mot de passe ci-dessus.", + "Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.": "Merci d'utiliser NexoPOS pour gérer votre boutique. Cet assistant d'installation vous aidera à exécuter NexoPOS en un rien de temps.", + "Choose your language to get started.": "Choisissez une langue pour commencer.", + "Remaining Steps": "Étapes restantes", + "Database Configuration": "Configuration de la base de données", + "Application Configuration": "Configuration des applications", + "Language Selection": "Sélection de la langue", + "Select what will be the default language of NexoPOS.": "Sélectionnez quelle sera la langue par défaut de NexoPOS.", + "In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don't need to do any action, just wait until the process is done and you'll be redirected.": "Afin d'assurer le bon fonctionnement de NexoPOS avec les mises à jour, nous devons procéder à la migration de la base de données. En fait, vous n'avez aucune action à effectuer, attendez simplement que le processus soit terminé et vous serez redirigé.", + "Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don't get any chance.": "Il semble qu'une erreur se soit produite lors de la mise à jour. Habituellement, donner une autre chance devrait résoudre ce problème. Cependant, si vous n'avez toujours aucune chance.", + "Please report this message to the support : ": "Merci de signaler ce message au support :", + "Try Again": "Essayer à nouveau", + "Updating": "Mise à jour", + "Updating Modules": "Mise à jour des modules", + "New Transaction": "Nouvelle opération", + "Search Filters": "Filtres de recherche", + "Clear Filters": "Effacer les filtres", + "Use Filters": "Utiliser des filtres", + "Would you like to delete this order": "Souhaitez-vous supprimer cette commande", + "The current order will be void. This action will be recorded. Consider providing a reason for this operation": "La commande en cours sera nulle. Cette action sera enregistrée. Pensez à fournir une raison pour cette opération", + "Order Options": "Options de commande", + "Payments": "Paiements", + "Refund & Return": "Remboursement et retour", + "available": "disponible", + "Order Refunds": "Remboursements de commande", + "Input": "Saisir", + "Close Register": "Fermer le registre", + "Register Options": "Options d'enregistrement", + "Unable to open this register. Only closed register can be opened.": "Impossible d'ouvrir ce registre. Seul un registre fermé peut être ouvert.", + "Open Register : %s": "Registre ouvert : %s", + "Open The Register": "Ouvrez le registre", + "Exit To Orders": "Sortie vers les commandes", + "Looks like there is no registers. At least one register is required to proceed.": "On dirait qu'il n'y a pas de registres. Au moins un enregistrement est requis pour procéder.", + "Create Cash Register": "Créer une caisse enregistreuse", + "Load Coupon": "Charger le coupon", + "Apply A Coupon": "Appliquer un coupon", + "Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.": "Saisissez le code promo qui doit s'appliquer au point de vente. Si un coupon est émis pour un client, ce client doit être sélectionné au préalable.", + "Click here to choose a customer.": "Cliquez ici pour choisir un client.", + "Loading Coupon For : ": "Chargement du coupon pour :", + "Unlimited": "Illimité", + "Not applicable": "N'est pas applicable", + "Active Coupons": "Coupons actifs", + "No coupons applies to the cart.": "Aucun coupon ne s'applique au panier.", + "The coupon is out from validity date range.": "Le coupon est hors plage de dates de validité.", + "This coupon requires products that aren't available on the cart at the moment.": "Ce coupon nécessite des produits qui ne sont pas disponibles dans le panier pour le moment.", + "This coupon requires products that belongs to specific categories that aren't included at the moment.": "Ce coupon nécessite des produits appartenant à des catégories spécifiques qui ne sont pas incluses pour le moment.", + "The coupon has applied to the cart.": "Le coupon s'est appliqué au panier.", + "You must select a customer before applying a coupon.": "Vous devez sélectionner un client avant d'appliquer un coupon.", + "The coupon has been loaded.": "Le coupon a été chargé.", + "Use": "Utiliser", + "No coupon available for this customer": "Aucun coupon disponible pour ce client", + "Select Customer": "Sélectionner un client", + "Selected": "Choisi", + "No customer match your query...": "Aucun client ne correspond à votre requête...", + "Create a customer": "Créer un client", + "Too many results.": "Trop de résultats.", + "New Customer": "Nouveau client", + "Save Customer": "Enregistrer le client", + "Not Authorized": "Pas autorisé", + "Creating customers has been explicitly disabled from the settings.": "La création de clients a été explicitement désactivée dans les paramètres.", + "No Customer Selected": "Aucun client sélectionné", + "In order to see a customer account, you need to select one customer.": "Pour voir un compte client, vous devez sélectionner un client.", + "Summary For": "Résumé pour", + "Purchases": "Achats", + "Owed": "dû", + "Wallet Amount": "Montant du portefeuille", + "Last Purchases": "Derniers achats", + "No orders...": "Aucune commande...", + "Transaction": "Transaction", + "No History...": "Pas d'historique...", + "No coupons for the selected customer...": "Aucun coupon pour le client sélectionné...", + "Usage :": "Utilisation :", + "Code :": "Code :", + "Use Coupon": "Utiliser le coupon", + "No rewards available the selected customer...": "Aucune récompense disponible pour le client sélectionné...", + "Account Transaction": "Opération de compte", + "Removing": "Suppression", + "Refunding": "Remboursement", + "Unknow": "Inconnu", + "An error occurred while opening the order options": "Une erreur s'est produite lors de l'ouverture des options de commande", + "Use Customer ?": "Utiliser Client ?", + "No customer is selected. Would you like to proceed with this customer ?": "Aucun client n'est sélectionné. Souhaitez-vous continuer avec ce client ?", + "Change Customer ?": "Changer de client ?", + "Would you like to assign this customer to the ongoing order ?": "Souhaitez-vous affecter ce client à la commande en cours ?", + "Product Discount": "Remise sur les produits", + "Cart Discount": "Remise sur le panier", + "Order Reference": "Référence de l'achat", + "The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.": "La commande en cours sera mise en attente. Vous pouvez récupérer cette commande à partir du bouton de commande en attente. En y faisant référence, vous pourrez peut-être identifier la commande plus rapidement.", + "Confirm": "Confirmer", + "Layaway Parameters": "Paramètres de mise de côté", + "Minimum Payment": "Paiement minimum", + "Instalments & Payments": "Acomptes et paiements", + "The final payment date must be the last within the instalments.": "La date de paiement final doit être la dernière des échéances.", + "There is no instalment defined. Please set how many instalments are allowed for this order": "Aucun versement n’est défini. Veuillez définir le nombre de versements autorisés pour cette commande", + "Skip Instalments": "Sauter les versements", + "You must define layaway settings before proceeding.": "Vous devez définir les paramètres de mise de côté avant de continuer.", + "Please provide instalments before proceeding.": "Veuillez fournir des versements avant de continuer.", + "Unable to process, the form is not valid": "Traitement impossible, le formulaire n'est pas valide", + "One or more instalments has an invalid date.": "Un ou plusieurs versements ont une date invalide.", + "One or more instalments has an invalid amount.": "Un ou plusieurs versements ont un montant invalide.", + "One or more instalments has a date prior to the current date.": "Un ou plusieurs versements ont une date antérieure à la date du jour.", + "The payment to be made today is less than what is expected.": "Le paiement à effectuer aujourd’hui est inférieur à ce qui était prévu.", + "Total instalments must be equal to the order total.": "Le total des versements doit être égal au total de la commande.", + "Order Note": "Remarque sur la commande", + "Note": "Note", + "More details about this order": "Plus de détails sur cette commande", + "Display On Receipt": "Affichage à la réception", + "Will display the note on the receipt": "Affichera la note sur le reçu", + "Open": "Ouvrir", + "Order Settings": "Paramètres de commande", + "Define The Order Type": "Définir le type de commande", + "No payment type has been selected on the settings. Please check your POS features and choose the supported order type": "Aucun type de paiement n'a été sélectionné dans les paramètres. Veuillez vérifier les fonctionnalités de votre point de vente et choisir le type de commande pris en charge.", + "Configure": "Configurer", + "Select Payment Gateway": "Sélectionnez la passerelle de paiement", + "Gateway": "passerelle", + "Payment List": "Liste de paiement", + "List Of Payments": "Liste des paiements", + "No Payment added.": "Aucun paiement ajouté.", + "Layaway": "Mise de côté", + "On Hold": "En attente", + "Nothing to display...": "Rien à afficher...", + "Product Price": "Prix ​​du produit", + "Define Quantity": "Définir la quantité", + "Please provide a quantity": "Veuillez fournir une quantité", + "Product \/ Service": "Produit \/Service", + "Unable to proceed. The form is not valid.": "Impossible de continuer. Le formulaire n'est pas valide.", + "Provide a unique name for the product.": "Fournissez un nom unique pour le produit.", + "Define the product type.": "Définir le type de produit.", + "Normal": "Normale", + "Dynamic": "Dynamique", + "In case the product is computed based on a percentage, define the rate here.": "Dans le cas où le produit est calculé sur la base d'un pourcentage, définissez ici le taux.", + "Define what is the sale price of the item.": "Définissez quel est le prix de vente de l'article.", + "Set the quantity of the product.": "Définissez la quantité du produit.", + "Assign a unit to the product.": "Attribuez une unité au produit.", + "Define what is tax type of the item.": "Définissez le type de taxe de l'article.", + "Choose the tax group that should apply to the item.": "Choisissez le groupe de taxes qui doit s'appliquer à l'article.", + "Search Product": "Rechercher un produit", + "There is nothing to display. Have you started the search ?": "Il n'y a rien à afficher. Avez-vous commencé la recherche ?", + "Unable to add the product": "Impossible d'ajouter le produit", + "The product \"{product}\" can't be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?": "Le produit \"{product}\" ne peut pas être ajouté à partir d'un champ de recherche, car le \"Suivi précis\" est activé. Vous souhaitez en savoir plus ?", + "No result to result match the search value provided.": "Aucun résultat ne correspond à la valeur de recherche fournie.", + "Shipping & Billing": "Expédition et facturation", + "Tax & Summary": "Taxe et résumé", + "No tax is active": "Aucune taxe n'est active", + "Select Tax": "Sélectionnez la taxe", + "Define the tax that apply to the sale.": "Définissez la taxe applicable à la vente.", + "Define how the tax is computed": "Définir comment la taxe est calculée", + "The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.": "L'unité attachée à ce produit est manquante ou n'est pas attribuée. Veuillez consulter l'onglet « Unité » pour ce produit.", + "Define when that specific product should expire.": "Définissez quand ce produit spécifique doit expirer.", + "Renders the automatically generated barcode.": "Restitue le code-barres généré automatiquement.", + "Adjust how tax is calculated on the item.": "Ajustez la façon dont la taxe est calculée sur l'article.", + "Previewing :": "Aperçu :", + "Units & Quantities": "Unités et quantités", + "Select": "Sélectionner", + "This QR code is provided to ease authentication on external applications.": "Ce QR code est fourni pour faciliter l'authentification sur les applications externes.", + "The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you'll need to revoke it and generate a new one.": "Le jeton API a été généré. Assurez-vous de copier ce code dans un endroit sûr car il ne sera affiché qu'une seule fois.\n Si vous perdez ce jeton, vous devrez le révoquer et en générer un nouveau.", + "Copy And Close": "Copier et fermer", + "The customer has been loaded": "Le client a été chargé", + "An error has occured": "Une erreur est survenue", + "Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.": "Impossible de sélectionner le client par défaut. On dirait que le client n'existe plus. Pensez à changer le client par défaut dans les paramètres.", + "Some products has been added to the cart. Would youl ike to discard this order ?": "Certains produits ont été ajoutés au panier. Souhaitez-vous annuler cette commande ?", + "This coupon is already added to the cart": "Ce coupon est déjà ajouté au panier", + "Unable to delete a payment attached to the order.": "Impossible de supprimer un paiement joint à la commande.", + "No tax group assigned to the order": "Aucun groupe de taxe affecté à la commande", + "The selected tax group doesn't have any assigned sub taxes. This might cause wrong figures.": "Le groupe de taxes sélectionné n'est associé à aucune sous-taxe. Cela pourrait donner lieu à des chiffres erronés.", + "Before saving this order, a minimum payment of {amount} is required": "Avant d'enregistrer cette commande, un paiement minimum de {amount} est requis", + "Unable to proceed": "Impossible de continuer", + "Layaway defined": "Mise de côté définie", + "Initial Payment": "Paiement initial", + "In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?": "Afin de continuer, un paiement initial de {amount} est requis pour le type de paiement sélectionné \"{paymentType}\". Voulez vous procéder ?", + "The request was canceled": "La demande a été annulée", + "Partially paid orders are disabled.": "Les commandes partiellement payées sont désactivées.", + "An order is currently being processed.": "Une commande est actuellement en cours de traitement.", + "An error has occurred while computing the product.": "Une erreur s'est produite lors du calcul du produit.", + "The coupons \"%s\" has been removed from the cart, as it's required conditions are no more meet.": "Le coupon \"%s\" a été supprimé du panier, car ses conditions requises ne sont plus remplies.", + "The discount has been set to the cart subtotal.": "La réduction a été définie sur le sous-total du panier.", + "An unexpected error has occurred while fecthing taxes.": "Une erreur inattendue s'est produite lors de la récupération des taxes.", + "OKAY": "D'ACCORD", + "Order Deletion": "Suppression de la commande", + "The current order will be deleted as no payment has been made so far.": "La commande en cours sera supprimée car aucun paiement n'a été effectué jusqu'à présent.", + "Void The Order": "Annuler la commande", + "The current order will be void. This will cancel the transaction, but the order won't be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.": "La commande en cours sera nulle. Cela annulera la transaction, mais la commande ne sera pas supprimée. De plus amples détails sur l’opération seront suivis dans le rapport. Pensez à fournir la raison de cette opération.", + "Unable to void an unpaid order.": "Impossible d'annuler une commande impayée.", + "No result to display.": "Aucun résultat à afficher.", + "Well.. nothing to show for the meantime.": "Eh bien… rien à montrer pour le moment.", + "Well.. nothing to show for the meantime": "Eh bien... rien à montrer pour le moment", + "Incomplete Orders": "Commandes incomplètes", + "Recents Orders": "Commandes récentes", + "Weekly Sales": "Ventes hebdomadaires", + "Week Taxes": "Taxes de semaine", + "Net Income": "Revenu net", + "Week Expenses": "Dépenses de la semaine", + "Current Week": "Cette semaine", + "Previous Week": "Semaine précédente", + "Loading...": "Chargement...", + "Logout": "Se déconnecter", + "Unnamed Page": "Page sans nom", + "No description": "Pas de description", + "No description has been provided.": "Aucune description n'a été fournie.", + "Unamed Page": "Page sans nom", + "You're using NexoPOS %s<\/a>": "Vous\\ utilisez NexoPOS %s<\/a >", + "Activate Your Account": "Activez votre compte", + "The account you have created for __%s__, require an activation. In order to proceed, please click on the following link": "Le compte que vous avez créé pour __%s__ nécessite une activation. Pour continuer, veuillez cliquer sur le lien suivant", + "Password Recovered": "Mot de passe récupéré", + "Your password has been successfully updated on __%s__. You can now login with your new password.": "Votre mot de passe a été mis à jour avec succès le __%s__. Vous pouvez maintenant vous connecter avec votre nouveau mot de passe.", + "If you haven't asked this, please get in touch with the administrators.": "Si vous n'avez pas posé cette question, veuillez contacter les administrateurs.", + "Password Recovery": "Récupération de mot de passe", + "Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ": "Quelqu'un a demandé la réinitialisation de votre mot de passe le __\"%s\"__. Si vous vous souvenez d'avoir fait cette demande, veuillez procéder en cliquant sur le bouton ci-dessous.", + "Reset Password": "réinitialiser le mot de passe", + "New User Registration": "Enregistrement d'un nouvel utilisateur", + "A new user has registered to your store (%s) with the email %s.": "Un nouvel utilisateur s'est enregistré dans votre boutique (%s) avec l'e-mail %s.", + "Your Account Has Been Created": "Votre compte a été créé", + "The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.": "Le compte que vous avez créé pour __%s__ a été créé avec succès. Vous pouvez maintenant vous connecter avec votre nom d'utilisateur (__%s__) et le mot de passe que vous avez défini.", + "Login": "Se connecter", + "Environment Details": "Détails de l'environnement", + "Properties": "Propriétés", + "Extensions": "Rallonges", + "Configurations": "Configurations", + "Save Coupon": "Enregistrer le coupon", + "This field is required": "Ce champ est obligatoire", + "The form is not valid. Please check it and try again": "Le formulaire n'est pas valide. Veuillez le vérifier et réessayer", + "mainFieldLabel not defined": "mainFieldLabel non défini", + "Create Customer Group": "Créer un groupe de clients", + "Save a new customer group": "Enregistrer un nouveau groupe de clients", + "Update Group": "Mettre à jour le groupe", + "Modify an existing customer group": "Modifier un groupe de clients existant", + "Managing Customers Groups": "Gestion des groupes de clients", + "Create groups to assign customers": "Créer des groupes pour attribuer des clients", + "Managing Customers": "Gestion des clients", + "List of registered customers": "Liste des clients enregistrés", + "Your Module": "Votre module", + "Choose the zip file you would like to upload": "Choisissez le fichier zip que vous souhaitez télécharger", + "Managing Orders": "Gestion des commandes", + "Manage all registered orders.": "Gérez toutes les commandes enregistrées.", + "Payment receipt": "Reçu", + "Hide Dashboard": "Masquer le tableau de bord", + "Receipt — %s": "Reçu — %s", + "Order receipt": "Récépissé de commande", + "Refund receipt": "Reçu de remboursement", + "Current Payment": "Paiement actuel", + "Total Paid": "Total payé", + "Note: ": "Note:", + "Condition:": "Condition:", + "Unable to proceed no products has been provided.": "Impossible de continuer, aucun produit n'a été fourni.", + "Unable to proceed, one or more products is not valid.": "Impossible de continuer, un ou plusieurs produits ne sont pas valides.", + "Unable to proceed the procurement form is not valid.": "Impossible de procéder, le formulaire de passation de marché n'est pas valide.", + "Unable to proceed, no submit url has been provided.": "Impossible de continuer, aucune URL de soumission n'a été fournie.", + "SKU, Barcode, Product name.": "SKU, code-barres, nom du produit.", + "Date : %s": "Rendez-vous", + "First Address": "Première adresse", + "Second Address": "Deuxième adresse", + "Address": "Adresse", + "Search Products...": "Recherche de produits...", + "Included Products": "Produits inclus", + "Apply Settings": "Appliquer les paramètres", + "Basic Settings": "Paramètres de base", + "Visibility Settings": "Paramètres de visibilité", + "Reward System Name": "Nom du système de récompense", + "Your system is running in production mode. You probably need to build the assets": "Votre système fonctionne en mode production. Vous devrez probablement constituer des actifs", + "Your system is in development mode. Make sure to build the assets.": "Votre système est en mode développement. Assurez-vous de développer les atouts.", + "How to change database configuration": "Comment modifier la configuration de la base de données", + "Setup": "Installation", + "NexoPOS wasn't able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.": "NexoPOS n'a pas pu effectuer une requête de base de données. Cette erreur peut être liée à une mauvaise configuration de votre fichier .env. Le guide suivant peut être utile pour vous aider à résoudre ce problème.", + "Common Database Issues": "Problèmes courants de base de données", + "Documentation": "Documentation", + "Log out": "Se déconnecter", + "Retry": "Recommencez", + "If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.": "Si vous voyez cette page, cela signifie que NexoPOS est correctement installé sur votre système. Comme cette page est censée être le frontend, NexoPOS n'a pas de frontend pour le moment. Cette page présente des liens utiles qui vous mèneront aux ressources importantes.", + "Sign Up": "S'inscrire", + "Assignation": "Attribution", + "Incoming Conversion": "Conversion entrante", + "Outgoing Conversion": "Conversion sortante", + "Unknown Action": "Action inconnue", + "The event has been created at the following path \"%s\"!": "L'événement a été créé au chemin suivant \"%s\" !", + "The listener has been created on the path \"%s\"!": "L'écouteur a été créé sur le chemin \"%s\" !", + "Unable to find a module having the identifier \"%s\".": "Impossible de trouver un module ayant l'identifiant \"%s\".", + "Unsupported reset mode.": "Mode de réinitialisation non pris en charge.", + "You've not provided a valid file name. It shouldn't contains any space, dot or special characters.": "Vous\\ n'avez pas fourni un nom de fichier valide. Il ne doit contenir aucun espace, point ou caractère spécial.", + "Unable to find a module having \"%s\" as namespace.": "Impossible de trouver un module ayant \"%s\" comme espace de noms.", + "A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.": "Un fichier similaire existe déjà au chemin \"%s\". Utilisez \"--force\" pour l'écraser.", + "A new form class was created at the path \"%s\"": "Une nouvelle classe de formulaire a été créée au chemin \"%s\"", + "Convert Unit": "Convertir l'unité", + "The unit that is selected for convertion by default.": "L'unité sélectionnée pour la conversion par défaut.", + "COGS": "COGS", + "Used to define the Cost of Goods Sold.": "Utilisé pour définir le coût des marchandises vendues.", + "Visible": "Visible", + "Define whether the unit is available for sale.": "Définissez si l'unité est disponible à la vente.", + "The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.": "Le coût des marchandises vendues sera automatiquement calculé en fonction de l'approvisionnement et de la conversion.", + "Auto COGS": "COGS automatiques", + "Shortage": "Pénurie", + "Overage": "Excédent", + "Assign the transaction to an account430": "Attribuer la transaction à un compte430", + "Define how often this transaction occurs": "Définir la fréquence à laquelle cette transaction se produit", + "Define what is the type of the transactions.": "Définissez quel est le type de transactions.", + "Trigger": "Déclenchement", + "Would you like to trigger this expense now?": "Souhaitez-vous déclencher cette dépense maintenant ?", + "Transactions History List": "Liste de l'historique des transactions", + "Display all transaction history.": "Afficher tout l'historique des transactions.", + "No transaction history has been registered": "Aucun historique de transactions n'a été enregistré", + "Add a new transaction history": "Ajouter un nouvel historique de transactions", + "Create a new transaction history": "Créer un nouvel historique de transactions", + "Register a new transaction history and save it.": "Enregistrez un nouvel historique de transactions et enregistrez-le.", + "Edit transaction history": "Modifier l'historique des transactions", + "Modify Transactions history.": "Modifier l'historique des transactions.", + "Return to Transactions History": "Revenir à l'historique des transactions", + "Oops, We're Sorry!!!": "Oups, nous sommes désolés !!!", + "Class: %s": "Classe : %s", + "An error occured while performing your request.": "Une erreur s'est produite lors de l'exécution de votre demande.", + "A mismatch has occured between a module and it's dependency.": "Une incompatibilité s'est produite entre un module et sa dépendance.", + "Post Too Large": "Message trop volumineux", + "The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini": "La demande soumise est plus importante que prévu. Pensez à augmenter votre \"post_max_size\" sur votre PHP.ini", + "Assign the transaction to an account.": "Attribuez la transaction à un compte.", + "Describe the direct transactions.": "Décrivez les transactions directes.", + "set the value of the transactions.": "fixer la valeur des transactions.", + "The transactions will be multipled by the number of user having that role.": "Les transactions seront multipliées par le nombre d'utilisateurs ayant ce rôle.", + "Set when the transaction should be executed.": "Définissez le moment où la transaction doit être exécutée.", + "The addresses were successfully updated.": "Les adresses ont été mises à jour avec succès.", + "Welcome — %s": "Bienvenue — %s", + "Stock History For %s": "Historique des stocks pour %s", + "Set": "Ensemble", + "The unit is not set for the product \"%s\".": "L'unité n'est pas définie pour le produit \"%s\".", + "The adjustment quantity can't be negative for the product \"%s\" (%s)": "La quantité d'ajustement ne peut pas être négative pour le produit \"%s\" (%s)", + "Transactions Report": "Rapport sur les transactions", + "Combined Report": "Rapport combiné", + "Provides a combined report for every transactions on products.": "Fournit un rapport combiné pour toutes les transactions sur les produits.", + "Unable to initiallize the settings page. The identifier \"' . $identifier . '": "Impossible d'initialiser la page des paramètres. L'identifiant \"' . $identifiant . '", + "Unable to use Scheduled, Recurring and Entity Transactions as Queues aren't configured correctly.": "Impossible d'utiliser les transactions planifiées, récurrentes et d'entité car les files d'attente ne sont pas configurées correctement.", + "%s product(s) has low stock. Reorder those product(s) before it get exhausted.": "Le(s) produit(s) %s ont un stock faible. Réorganisez ces produits avant qu’ils ne soient épuisés.", + "Symbolic Links Missing": "Liens symboliques manquants", + "The Symbolic Links to the public directory is missing. Your medias might be broken and not display.": "Les liens symboliques vers le répertoire public sont manquants. Vos médias peuvent être cassés et ne pas s'afficher.", + "The manifest.json can't be located inside the module %s on the path: %s": "Le manifest.json ne peut pas être situé à l'intérieur du module %s sur le chemin : %s", + "%s — %s": "%s — %s", + "Stock History": "Historique des stocks", + "Invoices": "Factures", + "The migration file doens't have a valid method name. Expected method : %s": "Le fichier de migration n'a pas de nom de méthode valide. Méthode attendue : %s", + "The module %s cannot be enabled as his dependency (%s) is missing or not enabled.": "Le module %s ne peut pas être activé car sa dépendance (%s) est manquante ou n'est pas activée.", + "The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.": "Le module %s ne peut pas être activé car ses dépendances (%s) sont manquantes ou non activées.", + "Unable to proceed as the order is already paid.": "Impossible de procéder car la commande est déjà payée.", + "Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.": "Impossible de supprimer l'approvisionnement car il ne reste pas suffisamment de stock pour \"%s\" sur l'unité \"%s\". Cela signifie probablement que l'inventaire a changé soit avec une vente, soit avec un ajustement après que l'approvisionnement a été stocké.", + "Unable to find the product using the provided id \"%s\"": "Impossible de trouver le produit à l'aide de l'ID fourni \"%s\"", + "Unable to procure the product \"%s\" as the stock management is disabled.": "Impossible de se procurer le produit \"%s\" car la gestion des stocks est désactivée.", + "Unable to procure the product \"%s\" as it is a grouped product.": "Impossible de se procurer le produit \"%s\" car il s'agit d'un produit groupé.", + "Adjusting grouped product inventory must result of a create, update, delete sale operation.": "L'ajustement du stock de produits groupés doit résulter d'une opération de vente de création, mise à jour, suppression.", + "Unsupported stock action \"%s\"": "Action boursière non prise en charge \"%s\"", + "You cannot convert unit on a product having stock management disabled.": "Vous ne pouvez pas convertir d'unité sur un produit dont la gestion des stocks est désactivée.", + "The source and the destination unit can't be the same. What are you trying to do ?": "L'unité source et l'unité de destination ne peuvent pas être identiques. Qu'essayez-vous de faire ?", + "There is no source unit quantity having the name \"%s\" for the item %s": "Il n'existe aucune quantité d'unité source portant le nom \"%s\" pour l'article %s", + "There is no destination unit quantity having the name %s for the item %s": "Il n'existe aucune quantité d'unité de destination portant le nom %s pour l'article %s", + "The source unit and the destination unit doens't belong to the same unit group.": "L'unité source et l'unité de destination n'appartiennent pas au même groupe d'unités.", + "The group %s has no base unit defined": "Le groupe %s n'a pas d'unité de base définie", + "The conversion of %s(%s) to %s(%s) was successful": "La conversion de %s(%s) en %s(%s) a réussi", + "The product has been deleted.": "Le produit a été supprimé.", + "The report will be generated. Try loading the report within few minutes.": "Le rapport sera généré. Essayez de charger le rapport dans quelques minutes.", + "The database has been wiped out.": "La base de données a été effacée.", + "Created via tests": "Créé via des tests", + "The transaction has been successfully saved.": "La transaction a été enregistrée avec succès.", + "The transaction has been successfully updated.": "La transaction a été mise à jour avec succès.", + "Unable to find the transaction using the provided identifier.": "Impossible de trouver la transaction à l'aide de l'identifiant fourni.", + "Unable to find the requested transaction using the provided id.": "Impossible de trouver la transaction demandée à l'aide de l'identifiant fourni.", + "The transction has been correctly deleted.": "La transaction a été correctement supprimée.", + "You cannot delete an account which has transactions bound.": "Vous ne pouvez pas supprimer un compte sur lequel des transactions sont liées.", + "The transaction account has been deleted.": "Le compte de transaction a été supprimé.", + "Unable to find the transaction account using the provided ID.": "Impossible de trouver le compte de transaction à l'aide de l'ID fourni.", + "The transaction account has been updated.": "Le compte de transaction a été mis à jour.", + "This transaction type can't be triggered.": "Ce type de transaction ne peut pas être déclenché.", + "The transaction has been successfully triggered.": "La transaction a été déclenchée avec succès.", + "The transaction \"%s\" has been processed on day \"%s\".": "La transaction \"%s\" a été traitée le jour \"%s\".", + "The transaction \"%s\" has already been processed.": "La transaction \"%s\" a déjà été traitée.", + "The transactions \"%s\" hasn't been proceesed, as it's out of date.": "La transaction \"%s\" n'a pas été traitée car elle est obsolète.", + "The process has been correctly executed and all transactions has been processed.": "Le processus a été correctement exécuté et toutes les transactions ont été traitées.", + "Procurement Liability : %s": "Responsabilité d'approvisionnement : %s", + "Liabilities Account": "Compte de passif", + "Configure the accounting feature": "Configurer la fonctionnalité de comptabilité", + "Date Time Format": "Format de date et d'heure", + "Date TimeZone": "Date Fuseau horaire", + "Determine the default timezone of the store. Current Time: %s": "Déterminez le fuseau horaire par défaut du magasin. Heure actuelle : %s", + "Configure how invoice and receipts are used.": "Configurez la façon dont la facture et les reçus sont utilisés.", + "configure settings that applies to orders.": "configurer les paramètres qui s'appliquent aux commandes.", + "Report Settings": "Paramètres du rapport", + "Configure the settings": "Configurer les paramètres", + "Wipes and Reset the database.": "Essuie et réinitialise la base de données.", + "Supply Delivery": "Livraison des fournitures", + "Configure the delivery feature.": "Configurez la fonctionnalité de livraison.", + "Configure how background operations works.": "Configurez le fonctionnement des opérations en arrière-plan.", + "Every procurement will be added to the selected transaction account": "Chaque achat sera ajouté au compte de transaction sélectionné", + "Every sales will be added to the selected transaction account": "Chaque vente sera ajoutée au compte de transaction sélectionné", + "Every customer credit will be added to the selected transaction account": "Chaque crédit client sera ajouté au compte de transaction sélectionné", + "Every customer credit removed will be added to the selected transaction account": "Chaque crédit client supprimé sera ajouté au compte de transaction sélectionné", + "Sales refunds will be attached to this transaction account": "Les remboursements des ventes seront attachés à ce compte de transaction", + "Disbursement (cash register)": "Décaissement (caisse)", + "Transaction account for all cash disbursement.": "Compte de transaction pour tous les décaissements en espèces.", + "Liabilities": "Passifs", + "Transaction account for all liabilities.": "Compte de transaction pour tous les passifs.", + "Quick Product Default Unit": "Unité par défaut du produit rapide", + "Set what unit is assigned by default to all quick product.": "Définissez quelle unité est attribuée par défaut à tous les produits rapides.", + "Hide Exhausted Products": "Masquer les produits épuisés", + "Will hide exhausted products from selection on the POS.": "Masquera les produits épuisés de la sélection sur le point de vente.", + "Hide Empty Category": "Masquer la catégorie vide", + "Category with no or exhausted products will be hidden from selection.": "Les catégories sans produits ou épuisées seront masquées de la sélection.", + "This field must be similar to \"{other}\"\"": "Ce champ doit être similaire à \"{other}\"\"", + "This field must have at least \"{length}\" characters\"": "Ce champ doit contenir au moins \"{length}\" caractères\"", + "This field must have at most \"{length}\" characters\"": "Ce champ doit contenir au maximum des \"{length}\" caractères\"", + "This field must be different from \"{other}\"\"": "Ce champ doit être différent de \"{other}\"\"", + "Search result": "Résultat de la recherche", + "Choose...": "Choisir...", + "The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.": "Le composant ${field.component} ne peut pas être chargé. Assurez-vous qu'il est injecté sur l'objet nsExtraComponents.", + "+{count} other": "+{count} autre", + "An error occured": "Une erreur s'est produite", + "See Error": "Voir Erreur", + "Your uploaded files will displays here.": "Vos fichiers téléchargés s'afficheront ici.", + "An error has occured while seleting the payment gateway.": "Une erreur s'est produite lors de la sélection de la passerelle de paiement.", + "Looks like there is either no products and no categories. How about creating those first to get started ?": "On dirait qu’il n’y a ni produits ni catégories. Que diriez-vous de les créer en premier pour commencer ?", + "Create Categories": "Créer des catégories", + "An unexpected error has occured while loading the form. Please check the log or contact the support.": "Une erreur inattendue s'est produite lors du chargement du formulaire. Veuillez vérifier le journal ou contacter le support.", + "We were not able to load the units. Make sure there are units attached on the unit group selected.": "Nous n'avons pas pu charger les unités. Assurez-vous qu'il y a des unités attachées au groupe d'unités sélectionné.", + "Select the procured unit first before selecting the conversion unit.": "Sélectionnez d’abord l’unité achetée avant de sélectionner l’unité de conversion.", + "Convert to unit": "Convertir en unité", + "An unexpected error has occured": "Une erreur inattendue s'est produite", + "{product}: Purchase Unit": "{product} : unité d'achat", + "The product will be procured on that unit.": "Le produit sera acheté sur cette unité.", + "Unkown Unit": "Unité inconnue", + "Choose Tax": "Choisissez la taxe", + "The tax will be assigned to the procured product.": "La taxe sera attribuée au produit acheté.", + "Show Details": "Afficher les détails", + "Hide Details": "Cacher les détails", + "Important Notes": "Notes Importantes", + "Stock Management Products.": "Produits de gestion des stocks.", + "Doesn't work with Grouped Product.": "Ne fonctionne pas avec les produits groupés.", + "Convert": "Convertir", + "Looks like no valid products matched the searched term.": "Il semble qu'aucun produit valide ne corresponde au terme recherché.", + "This product doesn't have any stock to adjust.": "Ce produit n'a pas de stock à ajuster.", + "Select Unit": "Sélectionnez l'unité", + "Select the unit that you want to adjust the stock with.": "Sélectionnez l'unité avec laquelle vous souhaitez ajuster le stock.", + "A similar product with the same unit already exists.": "Un produit similaire avec la même unité existe déjà.", + "Select Procurement": "Sélectionnez Approvisionnement", + "Select the procurement that you want to adjust the stock with.": "Sélectionnez l'approvisionnement avec lequel vous souhaitez ajuster le stock.", + "Select Action": "Sélectionnez l'action", + "Select the action that you want to perform on the stock.": "Sélectionnez l'action que vous souhaitez effectuer sur le stock.", + "Would you like to remove the selected products from the table ?": "Souhaitez-vous supprimer les produits sélectionnés du tableau ?", + "Unit:": "Unité:", + "Operation:": "Opération:", + "Procurement:": "Approvisionnement:", + "Reason:": "Raison:", + "Provided": "Fourni", + "Not Provided": "Non fourni", + "Remove Selected": "Enlever la sélection", + "Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won't expires until you explicitely revoke it.": "Les jetons sont utilisés pour fournir un accès sécurisé aux ressources NexoPOS sans avoir à partager votre nom d'utilisateur et votre mot de passe personnels.\n Une fois générés, ils n'expireront pas tant que vous ne les aurez pas explicitement révoqués.", + "Date Range : {date1} - {date2}": "Plage de dates : {date1} - {date2}", + "Range : {date1} — {date2}": "Plage : {date1} — {date2}", + "All Categories": "toutes catégories", + "All Units": "Toutes les unités", + "Threshold": "Seuil", + "Select Units": "Sélectionnez les unités", + "An error has occured while loading the units.": "Une erreur s'est produite lors du chargement des unités.", + "An error has occured while loading the categories.": "Une erreur s'est produite lors du chargement des catégories.", + "Filter by Category": "Filtrer par catégorie", + "Filter by Units": "Filtrer par unités", + "An error has occured while loading the categories": "Une erreur s'est produite lors du chargement des catégories", + "An error has occured while loading the units": "Une erreur s'est produite lors du chargement des unités", + "By Type": "Par type", + "By User": "Par utilisateur", + "By Category": "Par catégorie", + "All Category": "Toutes les catégories", + "Filter By Category": "Filtrer par catégorie", + "Allow you to choose the category.": "Vous permet de choisir la catégorie.", + "No category was found for proceeding the filtering.": "Aucune catégorie n'a été trouvée pour procéder au filtrage.", + "Filter by Unit": "Filtrer par unité", + "Limit Results By Categories": "Limiter les résultats par catégories", + "Limit Results By Units": "Limiter les résultats par unités", + "Generate Report": "Générer un rapport", + "Document : Combined Products History": "Document : Historique des produits combinés", + "Ini. Qty": "Ini. Quantité", + "Added Quantity": "Quantité ajoutée", + "Add. Qty": "Ajouter. Quantité", + "Sold Quantity": "Quantité vendue", + "Sold Qty": "Quantité vendue", + "Defective Quantity": "Quantité défectueuse", + "Defec. Qty": "Déf. Quantité", + "Final Quantity": "Quantité finale", + "Final Qty": "Quantité finale", + "No data available": "Pas de données disponibles", + "Unable to edit this transaction": "Impossible de modifier cette transaction", + "This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.": "Cette transaction a été créée avec un type qui n'est plus disponible. Ce type n'est plus disponible car NexoPOS n'est pas en mesure d'effectuer des requêtes en arrière-plan.", + "Save Transaction": "Enregistrer la transaction", + "While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.": "Lors de la sélection de la transaction de l'entité, le montant défini sera multiplié par le nombre total d'utilisateurs affectés au groupe d'utilisateurs sélectionné.", + "The transaction is about to be saved. Would you like to confirm your action ?": "La transaction est sur le point d'être enregistrée. Souhaitez-vous confirmer votre action ?", + "Unable to load the transaction": "Impossible de charger la transaction", + "You cannot edit this transaction if NexoPOS cannot perform background requests.": "Vous ne pouvez pas modifier cette transaction si NexoPOS ne peut pas effectuer de demandes en arrière-plan.", + "MySQL is selected as database driver": "MySQL est sélectionné comme pilote de base de données", + "Please provide the credentials to ensure NexoPOS can connect to the database.": "Veuillez fournir les informations d'identification pour garantir que NexoPOS peut se connecter à la base de données.", + "Sqlite is selected as database driver": "SQLite est sélectionné comme pilote de base de données", + "Make sure Sqlite module is available for PHP. Your database will be located on the database directory.": "Assurez-vous que le module SQLite est disponible pour PHP. Votre base de données sera située dans le répertoire de la base de données.", + "Checking database connectivity...": "Vérification de la connectivité de la base de données...", + "NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.": "NexoPOS<\/strong> peut désormais se connecter à la base de données. Commencez par créer le compte administrateur et donnez un nom à votre installation. Une fois installée, cette page ne sera plus accessible.", + "No refunds made so far. Good news right?": "Aucun remboursement effectué jusqu'à présent. Bonne nouvelle, non ?", + "{product} : Units": "{product} : unités", + "This product doesn't have any unit defined for selling. Make sure to mark at least one unit as visible.": "Ce produit n'a aucune unité définie pour la vente. Assurez-vous de marquer au moins une unité comme visible.", + "Search for options": "Rechercher des options", + "Invalid Error Message": "Message d'erreur invalide", + "Unamed Settings Page": "Page de paramètres sans nom", + "Description of unamed setting page": "Description de la page de configuration sans nom", + "Text Field": "Champ de texte", + "This is a sample text field.": "Ceci est un exemple de champ de texte.", + "Inclusive Product Taxes": "Taxes sur les produits incluses", + "Exclusive Product Taxes": "Taxes sur les produits exclusifs", + "Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.": "Malheureusement, quelque chose d’inattendu s’est produit. Vous pouvez commencer par donner une autre chance en cliquant sur « Réessayer ». Si le problème persiste, utilisez la sortie ci-dessous pour recevoir de l'aide.", + "Compute Products": "Produits de calcul", + "Unammed Section": "Section sans nom", + "%s order(s) has recently been deleted as they have expired.": "%s commande(s) ont été récemment supprimées car elles ont expiré.", + "%s products will be updated": "%s produits seront mis à jour", + "Procurement %s": "Approvisionnement %s", + "You cannot assign the same unit to more than one selling unit.": "Vous ne pouvez pas attribuer la même unité à plus d’une unité de vente.", + "The quantity to convert can't be zero.": "La quantité à convertir ne peut pas être nulle.", + "The source unit \"(%s)\" for the product \"%s": "L'unité source \"(%s)\" pour le produit \"%s", + "The conversion from \"%s\" will cause a decimal value less than one count of the destination unit \"%s\".": "La conversion de \"%s\" entraînera une valeur décimale inférieure à un compte de l'unité de destination \"%s\".", + "{customer_first_name}: displays the customer first name.": "{customer_first_name} : affiche le prénom du client.", + "{customer_last_name}: displays the customer last name.": "{customer_last_name} : affiche le nom de famille du client.", + "No Unit Selected": "Aucune unité sélectionnée", + "Unit Conversion : {product}": "Conversion d'unité : {product}", + "Convert {quantity} available": "Convertir {quantité} disponible", + "The quantity should be greater than 0": "La quantité doit être supérieure à 0", + "The provided quantity can't result in any convertion for unit \"{destination}\"": "La quantité fournie ne peut donner lieu à aucune conversion pour l'unité \"{destination}\"", + "Conversion Warning": "Avertissement de conversion", + "Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?": "Seule {quantity}({source}) peut être convertie en {destinationCount}({destination}). Voulez vous procéder ?", + "Confirm Conversion": "Confirmer la conversion", + "You're about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?": "Vous\\ êtes sur le point de convertir {quantité}({source}) en {destinationCount}({destination}). Voulez vous procéder?", + "Conversion Successful": "Conversion réussie", + "The product {product} has been converted successfully.": "Le produit {product} a été converti avec succès.", + "An error occured while converting the product {product}": "Une erreur s'est produite lors de la conversion du produit {product}", + "The quantity has been set to the maximum available": "La quantité a été fixée au maximum disponible", + "The product {product} has no base unit": "Le produit {product} n'a pas d'unité de base", + "Developper Section": "Section Développeur", + "The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?": "La base de données sera effacée et toutes les données effacées. Seuls les utilisateurs et les rôles sont conservés. Voulez vous procéder ?", + "An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s": "Une erreur s'est produite lors de la création d'un code-barres \"%s\" utilisant le type \"%s\" pour le produit. Assurez-vous que la valeur du code-barres est correcte pour le type de code-barres sélectionné. Informations supplémentaires : %s" +} \ No newline at end of file diff --git a/lang/it.json b/lang/it.json index 21ad4044d..645b42703 100644 --- a/lang/it.json +++ b/lang/it.json @@ -1 +1,2696 @@ -{"OK":"ok","This field is required.":"Questo campo \u00e8 obbligatorio.","This field must contain a valid email address.":"Questo campo deve contenere un indirizzo email valido.","displaying {perPage} on {items} items":"visualizzando {perPage} su {items} elementi","The document has been generated.":"Il documento \u00e8 stato generato.","Unexpected error occurred.":"Si \u00e8 verificato un errore imprevisto.","Clear Selected Entries ?":"Cancella voci selezionate?","Would you like to clear all selected entries ?":"Vuoi cancellare tutte le voci selezionate?","No selection has been made.":"Non \u00e8 stata effettuata alcuna selezione.","No action has been selected.":"Nessuna azione \u00e8 stata selezionata.","{entries} entries selected":"{voci} voci selezionate","Download":"Scarica","There is nothing to display...":"Non c'\u00e8 niente da mostrare...","Bulk Actions":"Azioni in blocco","Sun":"Dom","Mon":"Lun","Tue":"Mar","Wed":"Mer","Fri":"Ven","Sat":"Sab","Date":"Ti d\u00e0","N\/A":"IN","Nothing to display":"Niente da mostrare","Delivery":"consegna","Take Away":"porta via","Unknown Type":"Tipo sconosciuto","Pending":"In attesa di","Ongoing":"In corso","Delivered":"Consegnato","Unknown Status":"Stato sconosciuto","Ready":"pronto","Paid":"padre","Hold":"presa","Unpaid":"non pagato","Partially Paid":"Parzialmente pagato","Password Forgotten ?":"Password dimenticata?","Sign In":"Registrazione","Register":"Registrati","An unexpected error occurred.":"Si \u00e8 verificato un errore imprevisto.","Unable to proceed the form is not valid.":"Impossibile procedere il modulo non \u00e8 valido.","Save Password":"Salva la password","Remember Your Password ?":"Ricordi la tua password?","Submit":"Invia","Already registered ?":"Gi\u00e0 registrato?","Best Cashiers":"I migliori cassieri","No result to display.":"Nessun risultato da visualizzare.","Well.. nothing to show for the meantime.":"Beh... niente da mostrare per il momento.","Best Customers":"I migliori clienti","Well.. nothing to show for the meantime":"Beh.. niente da mostrare per il momento","Total Sales":"Vendite totali","Today":"oggi","Total Refunds":"Rimborsi totali","Clients Registered":"Clienti registrati","Commissions":"commissioni","Total":"Totale","Discount":"sconto","Status":"Stato","Void":"vuoto","Refunded":"Rimborsato","Partially Refunded":"Parzialmente rimborsato","Incomplete Orders":"Ordini incompleti","Expenses":"Spese","Weekly Sales":"Saldi settimanali","Week Taxes":"Tasse settimanali","Net Income":"reddito netto","Week Expenses":"Settimana delle spese","Current Week":"Settimana corrente","Previous Week":"La settimana precedente","Order":"Ordine","Refresh":"ricaricare","Upload":"Caricamento","Enabled":"Abilitato","Disabled":"Disabilitato","Enable":"Abilitare","Disable":"disattivare","Gallery":"Galleria","Medias Manager":"Responsabile multimediale","Click Here Or Drop Your File To Upload":"Fai clic qui o trascina il tuo file da caricare","Nothing has already been uploaded":"Non \u00e8 gi\u00e0 stato caricato nulla","File Name":"Nome del file","Uploaded At":"Caricato su","By":"Di","Previous":"Precedente","Next":"Prossimo","Use Selected":"Usa selezionato","Clear All":"Cancella tutto","Confirm Your Action":"Conferma la tua azione","Would you like to clear all the notifications ?":"Vuoi cancellare tutte le notifiche?","Permissions":"permessi","Payment Summary":"Riepilogo pagamento","Sub Total":"Totale parziale","Shipping":"Spedizione","Coupons":"Buoni","Taxes":"Le tasse","Change":"Modificare","Order Status":"Stato dell'ordine","Customer":"cliente","Type":"Tipo","Delivery Status":"Stato della consegna","Save":"Salva","Payment Status":"Stato del pagamento","Products":"Prodotti","Would you proceed ?":"Procederesti?","The processing status of the order will be changed. Please confirm your action.":"Lo stato di elaborazione dell'ordine verr\u00e0 modificato. Conferma la tua azione.","Instalments":"Installazioni","Create":"Creare","Add Instalment":"Aggiungi installazione","Would you like to create this instalment ?":"Vuoi creare questa installazione?","An unexpected error has occurred":"Si \u00e8 verificato un errore imprevisto","Would you like to delete this instalment ?":"Vuoi eliminare questa installazione?","Would you like to update that instalment ?":"Vuoi aggiornare quell'installazione?","Print":"Stampa","Store Details":"Dettagli negozio Store","Order Code":"Codice d'ordine","Cashier":"cassiere","Billing Details":"Dettagli di fatturazione","Shipping Details":"Dettagli di spedizione","Product":"Prodotto","Unit Price":"Prezzo unitario","Quantity":"Quantit\u00e0","Tax":"Imposta","Total Price":"Prezzo totale","Expiration Date":"Data di scadenza","Due":"dovuto","Customer Account":"Conto cliente","Payment":"Pagamento","No payment possible for paid order.":"Nessun pagamento possibile per ordine pagato.","Payment History":"Storico dei pagamenti","Unable to proceed the form is not valid":"Impossibile procedere il modulo non \u00e8 valido","Please provide a valid value":"Si prega di fornire un valore valido","Refund With Products":"Rimborso con prodotti","Refund Shipping":"Rimborso spedizione","Add Product":"Aggiungi prodotto","Damaged":"Danneggiato","Unspoiled":"incontaminata","Summary":"Riepilogo","Payment Gateway":"Casello stradale","Screen":"Schermo","Select the product to perform a refund.":"Seleziona il prodotto per eseguire un rimborso.","Please select a payment gateway before proceeding.":"Si prega di selezionare un gateway di pagamento prima di procedere.","There is nothing to refund.":"Non c'\u00e8 niente da rimborsare.","Please provide a valid payment amount.":"Si prega di fornire un importo di pagamento valido.","The refund will be made on the current order.":"Il rimborso verr\u00e0 effettuato sull'ordine in corso.","Please select a product before proceeding.":"Seleziona un prodotto prima di procedere.","Not enough quantity to proceed.":"Quantit\u00e0 insufficiente per procedere.","Would you like to delete this product ?":"Vuoi eliminare questo prodotto?","Customers":"Clienti","Dashboard":"Pannello di controllo","Order Type":"Tipo di ordine","Orders":"Ordini","Cash Register":"Registratore di cassa","Reset":"Ripristina","Cart":"Carrello","Comments":"Commenti","Settings":"Impostazioni","No products added...":"Nessun prodotto aggiunto...","Price":"Prezzo","Flat":"Appartamento","Pay":"Paga","The product price has been updated.":"Il prezzo del prodotto \u00e8 stato aggiornato.","The editable price feature is disabled.":"La funzione del prezzo modificabile \u00e8 disabilitata.","Current Balance":"Bilancio corrente","Full Payment":"Pagamento completo","The customer account can only be used once per order. Consider deleting the previously used payment.":"L'account cliente pu\u00f2 essere utilizzato solo una volta per ordine. Considera l'eliminazione del pagamento utilizzato in precedenza.","Not enough funds to add {amount} as a payment. Available balance {balance}.":"Fondi insufficienti per aggiungere {amount} come pagamento. Saldo disponibile {equilibrio}.","Confirm Full Payment":"Conferma il pagamento completo","A full payment will be made using {paymentType} for {total}":"Verr\u00e0 effettuato un pagamento completo utilizzando {paymentType} per {total}","You need to provide some products before proceeding.":"\u00c8 necessario fornire alcuni prodotti prima di procedere.","Unable to add the product, there is not enough stock. Remaining %s":"Impossibile aggiungere il prodotto, lo stock non \u00e8 sufficiente. %s . rimanenti","Add Images":"Aggiungi immagini","New Group":"Nuovo gruppo","Available Quantity":"quantit\u00e0 disponibile","Delete":"Elimina","Would you like to delete this group ?":"Vuoi eliminare questo gruppo?","Your Attention Is Required":"La tua attenzione \u00e8 richiesta","Please select at least one unit group before you proceed.":"Seleziona almeno un gruppo di unit\u00e0 prima di procedere.","Unable to proceed as one of the unit group field is invalid":"Impossibile procedere poich\u00e9 uno dei campi del gruppo di unit\u00e0 non \u00e8 valido","Would you like to delete this variation ?":"Vuoi eliminare questa variazione?","Details":"Dettagli","Unable to proceed, no product were provided.":"Impossibile procedere, nessun prodotto \u00e8 stato fornito.","Unable to proceed, one or more product has incorrect values.":"Impossibile procedere, uno o pi\u00f9 prodotti hanno valori errati.","Unable to proceed, the procurement form is not valid.":"Impossibile procedere, il modulo di appalto non \u00e8 valido.","Unable to submit, no valid submit URL were provided.":"Impossibile inviare, non \u00e8 stato fornito alcun URL di invio valido.","No title is provided":"Nessun titolo \u00e8 fornito","SKU":"SKU","Barcode":"codice a barre","Options":"Opzioni","The product already exists on the table.":"Il prodotto esiste gi\u00e0 sul tavolo.","The specified quantity exceed the available quantity.":"La quantit\u00e0 specificata supera la quantit\u00e0 disponibile.","Unable to proceed as the table is empty.":"Impossibile procedere perch\u00e9 la tabella \u00e8 vuota.","The stock adjustment is about to be made. Would you like to confirm ?":"L'adeguamento delle scorte sta per essere effettuato. Vuoi confermare?","More Details":"Pi\u00f9 dettagli","Useful to describe better what are the reasons that leaded to this adjustment.":"Utile per descrivere meglio quali sono i motivi che hanno portato a questo adeguamento.","Would you like to remove this product from the table ?":"Vuoi rimuovere questo prodotto dalla tabella?","Search":"Ricerca","Unit":"Unit\u00e0","Operation":"operazione","Procurement":"Approvvigionamento","Value":"Valore","Search and add some products":"Cerca e aggiungi alcuni prodotti","Proceed":"Procedere","Unable to proceed. Select a correct time range.":"Impossibile procedere. Seleziona un intervallo di tempo corretto.","Unable to proceed. The current time range is not valid.":"Impossibile procedere. L'intervallo di tempo corrente non \u00e8 valido.","Would you like to proceed ?":"Vuoi continuare ?","An unexpected error has occurred.":"Si \u00e8 verificato un errore imprevisto.","No rules has been provided.":"Non \u00e8 stata fornita alcuna regola.","No valid run were provided.":"Non sono state fornite corse valide.","Unable to proceed, the form is invalid.":"Impossibile procedere, il modulo non \u00e8 valido.","Unable to proceed, no valid submit URL is defined.":"Impossibile procedere, non \u00e8 stato definito alcun URL di invio valido.","No title Provided":"Nessun titolo fornito","General":"Generale","Add Rule":"Aggiungi regola","Save Settings":"Salva le impostazioni","An unexpected error occurred":"Si \u00e8 verificato un errore imprevisto","Ok":"Ok","New Transaction":"Nuova transazione","Close":"Chiudere","Would you like to delete this order":"Vuoi eliminare questo ordine","The current order will be void. This action will be recorded. Consider providing a reason for this operation":"L'ordine in corso sar\u00e0 nullo. Questa azione verr\u00e0 registrata. Considera di fornire una ragione per questa operazione","Order Options":"Opzioni di ordine","Payments":"Pagamenti","Refund & Return":"Rimborso e restituzione","Installments":"rate","The form is not valid.":"Il modulo non \u00e8 valido.","Balance":"Bilancia","Input":"Ingresso","Register History":"Registro Storia","Close Register":"Chiudi Registrati","Cash In":"Incassare","Cash Out":"Incassare","Register Options":"Opzioni di registrazione","History":"Storia","Unable to open this register. Only closed register can be opened.":"Impossibile aprire questo registro. \u00c8 possibile aprire solo un registro chiuso.","Open The Register":"Apri il registro","Exit To Orders":"Esci agli ordini","Looks like there is no registers. At least one register is required to proceed.":"Sembra che non ci siano registri. Per procedere \u00e8 necessario almeno un registro.","Create Cash Register":"Crea registratore di cassa","Yes":"S\u00ec","No":"No","Load Coupon":"Carica coupon","Apply A Coupon":"Applica un coupon","Load":"Caricare","Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.":"Inserisci il codice coupon da applicare al POS. Se viene emesso un coupon per un cliente, tale cliente deve essere selezionato in precedenza.","Click here to choose a customer.":"Clicca qui per scegliere un cliente.","Coupon Name":"Nome del coupon","Usage":"Utilizzo","Unlimited":"Illimitato","Valid From":"Valido dal","Valid Till":"Valido fino a","Categories":"Categorie","Active Coupons":"Buoni attivi","Apply":"Applicare","Cancel":"Annulla","Coupon Code":"codice coupon","The coupon is out from validity date range.":"Il coupon \u00e8 fuori dall'intervallo di date di validit\u00e0.","The coupon has applied to the cart.":"Il coupon \u00e8 stato applicato al carrello.","Percentage":"Percentuale","The coupon has been loaded.":"Il coupon \u00e8 stato caricato.","Use":"Utilizzo","No coupon available for this customer":"Nessun coupon disponibile per questo cliente","Select Customer":"Seleziona cliente","No customer match your query...":"Nessun cliente corrisponde alla tua richiesta...","Customer Name":"Nome del cliente","Save Customer":"Salva cliente","No Customer Selected":"Nessun cliente selezionato","In order to see a customer account, you need to select one customer.":"Per visualizzare un account cliente, \u00e8 necessario selezionare un cliente.","Summary For":"Riepilogo per","Total Purchases":"Acquisti totali","Last Purchases":"Ultimi acquisti","No orders...":"Nessun ordine...","Account Transaction":"Transazione del conto","Product Discount":"Sconto sul prodotto","Cart Discount":"Sconto carrello","Hold Order":"Mantieni l'ordine","The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.":"L'ordine corrente verr\u00e0 messo in attesa. Puoi recuperare questo ordine dal pulsante dell'ordine in sospeso. Fornire un riferimento ad esso potrebbe aiutarti a identificare l'ordine pi\u00f9 rapidamente.","Confirm":"Confermare","Layaway Parameters":"Parametri layaway","Minimum Payment":"Pagamento minimo","Instalments & Payments":"Rate e pagamenti","The final payment date must be the last within the instalments.":"La data di pagamento finale deve essere l'ultima all'interno delle rate.","Amount":"Importo","You must define layaway settings before proceeding.":"\u00c8 necessario definire le impostazioni layaway prima di procedere.","Please provide instalments before proceeding.":"Si prega di fornire le rate prima di procedere.","Unable to process, the form is not valid":"Impossibile procedere il modulo non \u00e8 valido","One or more instalments has an invalid date.":"Una o pi\u00f9 rate hanno una data non valida.","One or more instalments has an invalid amount.":"Una o pi\u00f9 rate hanno un importo non valido.","One or more instalments has a date prior to the current date.":"Una o pi\u00f9 rate hanno una data antecedente alla data corrente.","Total instalments must be equal to the order total.":"Il totale delle rate deve essere uguale al totale dell'ordine.","Order Note":"Nota sull'ordine","Note":"Nota","More details about this order":"Maggiori dettagli su questo ordine","Display On Receipt":"Visualizza sulla ricevuta","Will display the note on the receipt":"Visualizzer\u00e0 la nota sulla ricevuta","Open":"Aprire","Order Settings":"Impostazioni dell'ordine","Define The Order Type":"Definisci il tipo di ordine","Payment List":"Lista dei pagamenti","List Of Payments":"Elenco dei pagamenti","No Payment added.":"Nessun pagamento aggiunto.","Select Payment":"Seleziona pagamento","Submit Payment":"Inviare pagamento","Layaway":"layaway","On Hold":"In attesa","Tendered":"Tender","Nothing to display...":"Niente da mostrare...","Product Price":"Prezzo del prodotto","Define Quantity":"Definisci la quantit\u00e0","Please provide a quantity":"Si prega di fornire una quantit\u00e0","Search Product":"Cerca prodotto","There is nothing to display. Have you started the search ?":"Non c'\u00e8 niente da mostrare. Hai iniziato la ricerca?","Shipping & Billing":"Spedizione e fatturazione","Tax & Summary":"Tasse e riepilogo","Select Tax":"Seleziona Imposta","Define the tax that apply to the sale.":"Definire l'imposta da applicare alla vendita.","Define how the tax is computed":"Definisci come viene calcolata l'imposta","Exclusive":"Esclusivo","Inclusive":"inclusivo","Define when that specific product should expire.":"Definisci quando quel prodotto specifico dovrebbe scadere.","Renders the automatically generated barcode.":"Visualizza il codice a barre generato automaticamente.","Tax Type":"Tipo di imposta","Adjust how tax is calculated on the item.":"Modifica il modo in cui viene calcolata l'imposta sull'articolo.","Unable to proceed. The form is not valid.":"Impossibile procedere. Il modulo non \u00e8 valido.","Units & Quantities":"Unit\u00e0 e quantit\u00e0","Sale Price":"Prezzo di vendita","Wholesale Price":"Prezzo all'ingrosso","Select":"Selezionare","The customer has been loaded":"Il cliente \u00e8 stato caricato","This coupon is already added to the cart":"Questo coupon \u00e8 gi\u00e0 stato aggiunto al carrello","No tax group assigned to the order":"Nessun gruppo fiscale assegnato all'ordine","Layaway defined":"Layaway definita","Okay":"Va bene","An unexpected error has occurred while fecthing taxes.":"Si \u00e8 verificato un errore imprevisto durante l'evasione delle imposte.","OKAY":"VA BENE","Loading...":"Caricamento in corso...","Profile":"Profilo","Logout":"Disconnettersi","Unnamed Page":"Pagina senza nome","No description":"Nessuna descrizione","Name":"Nome","Provide a name to the resource.":"Fornire un nome alla risorsa.","Edit":"Modificare","Would you like to delete this ?":"Vuoi eliminare questo?","Delete Selected Groups":"Elimina gruppi selezionati Select","Activate Your Account":"Attiva il tuo account","The account you have created for __%s__, require an activation. In order to proceed, please click on the following link":"L'account che hai creato per __%s__ richiede un'attivazione. Per procedere clicca sul seguente link","Password Recovered":"Password recuperata Password","Your password has been successfully updated on __%s__. You can now login with your new password.":"La tua password \u00e8 stata aggiornata con successo il __%s__. Ora puoi accedere con la tua nuova password.","Password Recovery":"Recupero della password","Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ":"Qualcuno ha richiesto di reimpostare la tua password su __\"%s\"__. Se ricordi di aver fatto quella richiesta, procedi cliccando il pulsante qui sotto.","Reset Password":"Resetta la password","New User Registration":"Nuova registrazione utente","Your Account Has Been Created":"Il tuo account \u00e8 stato creato","Login":"Login","Save Coupon":"Salva coupon","This field is required":"Questo campo \u00e8 obbligatorio","The form is not valid. Please check it and try again":"Il modulo non \u00e8 valido. Si prega di controllare e riprovare","mainFieldLabel not defined":"mainFieldLabel non definito","Create Customer Group":"Crea un gruppo di clienti","Save a new customer group":"Salva un nuovo gruppo di clienti","Update Group":"Aggiorna gruppo","Modify an existing customer group":"Modifica un gruppo di clienti esistente","Managing Customers Groups":"Gestire gruppi di clienti","Create groups to assign customers":"Crea gruppi per assegnare i clienti","Create Customer":"Crea cliente","Managing Customers":"Gestione dei clienti","List of registered customers":"Elenco dei clienti registrati","Log out":"Disconnettersi","Your Module":"Il tuo modulo","Choose the zip file you would like to upload":"Scegli il file zip che desideri caricare","Managing Orders":"Gestione degli ordini","Manage all registered orders.":"Gestisci tutti gli ordini registrati.","Failed":"fallito","Receipt — %s":"Ricevuta — %S","Order receipt":"Ricevuta d'ordine","Hide Dashboard":"Nascondi dashboard","Unknown Payment":"Pagamento sconosciuto","Procurement Name":"Nome dell'appalto","Unable to proceed no products has been provided.":"Impossibile procedere non \u00e8 stato fornito alcun prodotto.","Unable to proceed, one or more products is not valid.":"Impossibile procedere, uno o pi\u00f9 prodotti non sono validi.","Unable to proceed the procurement form is not valid.":"Impossibile procedere il modulo di appalto non \u00e8 valido.","Unable to proceed, no submit url has been provided.":"Impossibile procedere, non \u00e8 stato fornito alcun URL di invio.","SKU, Barcode, Product name.":"SKU, codice a barre, nome del prodotto.","Email":"E-mail","Phone":"Telefono","First Address":"Primo indirizzo","Second Address":"Secondo indirizzo","Address":"Indirizzo","City":"Citt\u00e0","PO.Box":"casella postale","Description":"Descrizione","Included Products":"Prodotti inclusi","Apply Settings":"Applica le impostazioni","Basic Settings":"Impostazioni di base","Visibility Settings":"Impostazioni visibilit\u00e0 Visi","Year":"Anno","Recompute":"Ricalcola","Sales":"I saldi","Income":"Reddito","January":"Gennaio","March":"marzo","April":"aprile","May":"Maggio","June":"giugno","July":"luglio","August":"agosto","September":"settembre","October":"ottobre","November":"novembre","December":"dicembre","Sort Results":"Ordina risultati","Using Quantity Ascending":"Utilizzo della quantit\u00e0 crescente","Using Quantity Descending":"Utilizzo della quantit\u00e0 decrescente","Using Sales Ascending":"Utilizzo delle vendite ascendente","Using Sales Descending":"Utilizzo delle vendite decrescenti","Using Name Ascending":"Utilizzo del nome crescente As","Using Name Descending":"Utilizzo del nome decrescente","Progress":"Progresso","Purchase Price":"Prezzo d'acquisto","Profit":"Profitto","Discounts":"Sconti","Tax Value":"Valore fiscale","Reward System Name":"Nome del sistema di ricompense","Missing Dependency":"Dipendenza mancante","Go Back":"Torna indietro","Continue":"Continua","Home":"Casa","Not Allowed Action":"Azione non consentita","Try Again":"Riprova","Access Denied":"Accesso negato","Sign Up":"Iscrizione","An invalid date were provided. Make sure it a prior date to the actual server date.":"\u00c8 stata fornita una data non valida. Assicurati che sia una data precedente alla data effettiva del server.","Computing report from %s...":"Report di calcolo da %s...","The operation was successful.":"L'operazione \u00e8 andata a buon fine.","Unable to find a module having the identifier\/namespace \"%s\"":"Impossibile trovare un modulo con l'identificatore\/namespace \"%s\"","What is the CRUD single resource name ? [Q] to quit.":"Qual \u00e8 il nome della singola risorsa CRUD? [Q] per uscire.","Which table name should be used ? [Q] to quit.":"Quale nome di tabella dovrebbe essere usato? [Q] per uscire.","If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Se la tua risorsa CRUD ha una relazione, menzionala come segue \"foreign_table, foreign_key, local_key\" ? [S] per saltare, [Q] per uscire.","Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Aggiungere una nuova relazione? Menzionalo come segue \"foreign_table, foreign_key, local_key\" ? [S] per saltare, [Q] per uscire.","Not enough parameters provided for the relation.":"Non sono stati forniti parametri sufficienti per la relazione.","The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"":"La risorsa CRUD \"%s\" for the module \"%s\" has been generated at \"%s\"","The CRUD resource \"%s\" has been generated at %s":"La risorsa CRUD \"%s\" has been generated at %s","Localization for %s extracted to %s":"Localizzazione per %s estratta in %s","Unable to find the requested module.":"Impossibile trovare il modulo richiesto.","Version":"Versione","Path":"Il percorso","Index":"Indice","Entry Class":"Classe di ingresso","Routes":"Itinerari","Api":"api","Controllers":"Controllori","Views":"Visualizzazioni","Attribute":"Attributo","Namespace":"Spazio dei nomi","Author":"Autore","There is no migrations to perform for the module \"%s\"":"Non ci sono migrazioni da eseguire per il modulo \"%s\"","The module migration has successfully been performed for the module \"%s\"":"La migrazione del modulo \u00e8 stata eseguita con successo per il modulo \"%s\"","The product barcodes has been refreshed successfully.":"I codici a barre del prodotto sono stati aggiornati con successo.","The demo has been enabled.":"La demo \u00e8 stata abilitata.","What is the store name ? [Q] to quit.":"Qual \u00e8 il nome del negozio? [Q] per uscire.","Please provide at least 6 characters for store name.":"Fornisci almeno 6 caratteri per il nome del negozio.","What is the administrator password ? [Q] to quit.":"Qual \u00e8 la password dell'amministratore? [Q] per uscire.","Please provide at least 6 characters for the administrator password.":"Si prega di fornire almeno 6 caratteri per la password dell'amministratore.","What is the administrator email ? [Q] to quit.":"Qual \u00e8 l'e-mail dell'amministratore? [Q] per uscire.","Please provide a valid email for the administrator.":"Si prega di fornire un'e-mail valida per l'amministratore.","What is the administrator username ? [Q] to quit.":"Qual \u00e8 il nome utente dell'amministratore? [Q] per uscire.","Please provide at least 5 characters for the administrator username.":"Fornisci almeno 5 caratteri per il nome utente dell'amministratore.","Downloading latest dev build...":"Download dell'ultima build di sviluppo...","Reset project to HEAD...":"Reimposta progetto su HEAD...","Coupons List":"Elenco coupon","Display all coupons.":"Visualizza tutti i coupon.","No coupons has been registered":"Nessun coupon \u00e8 stato registrato","Add a new coupon":"Aggiungi un nuovo coupon","Create a new coupon":"Crea un nuovo coupon","Register a new coupon and save it.":"Registra un nuovo coupon e salvalo.","Edit coupon":"Modifica coupon","Modify Coupon.":"Modifica coupon.","Return to Coupons":"Torna a Coupon","Might be used while printing the coupon.":"Potrebbe essere utilizzato durante la stampa del coupon.","Percentage Discount":"Sconto percentuale","Flat Discount":"Sconto piatto","Define which type of discount apply to the current coupon.":"Definisci quale tipo di sconto applicare al coupon corrente.","Discount Value":"Valore di sconto","Define the percentage or flat value.":"Definire la percentuale o il valore fisso.","Valid Until":"Valido fino a","Minimum Cart Value":"Valore minimo del carrello","What is the minimum value of the cart to make this coupon eligible.":"Qual \u00e8 il valore minimo del carrello per rendere idoneo questo coupon.","Maximum Cart Value":"Valore massimo del carrello","Valid Hours Start":"Inizio ore valide","Define form which hour during the day the coupons is valid.":"Definisci da quale ora del giorno i coupon sono validi.","Valid Hours End":"Fine ore valide","Define to which hour during the day the coupons end stop valid.":"Definire a quale ora della giornata sono validi i tagliandi.","Limit Usage":"Limite di utilizzo","Define how many time a coupons can be redeemed.":"Definisci quante volte un coupon pu\u00f2 essere riscattato.","Select Products":"Seleziona prodotti","The following products will be required to be present on the cart, in order for this coupon to be valid.":"I seguenti prodotti dovranno essere presenti nel carrello, affinch\u00e9 questo coupon sia valido.","Select Categories":"Seleziona categorie","The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.":"I prodotti assegnati a una di queste categorie devono essere nel carrello, affinch\u00e9 questo coupon sia valido.","Created At":"Creato a","Undefined":"Non definito","Delete a licence":"Eliminare una licenza","Customer Coupons List":"Elenco coupon cliente","Display all customer coupons.":"Visualizza tutti i coupon cliente.","No customer coupons has been registered":"Nessun coupon cliente \u00e8 stato registrato","Add a new customer coupon":"Aggiungi un nuovo coupon cliente","Create a new customer coupon":"Crea un nuovo coupon cliente","Register a new customer coupon and save it.":"Registra un nuovo coupon cliente e salvalo.","Edit customer coupon":"Modifica coupon cliente","Modify Customer Coupon.":"Modifica coupon cliente.","Return to Customer Coupons":"Torna a Coupon clienti","Id":"ID","Limit":"Limite","Created_at":"Created_at","Updated_at":"Aggiornato_at","Code":"Codice","Customers List":"Elenco clienti","Display all customers.":"Visualizza tutti i clienti.","No customers has been registered":"Nessun cliente \u00e8 stato registrato","Add a new customer":"Aggiungi un nuovo cliente","Create a new customer":"Crea un nuovo cliente","Register a new customer and save it.":"Registra un nuovo cliente e salvalo.","Edit customer":"Modifica cliente","Modify Customer.":"Modifica cliente.","Return to Customers":"Ritorna ai clienti","Provide a unique name for the customer.":"Fornire un nome univoco per il cliente.","Group":"Gruppo","Assign the customer to a group":"Assegna il cliente a un gruppo","Phone Number":"Numero di telefono","Provide the customer phone number":"Fornire il numero di telefono del cliente","PO Box":"casella postale","Provide the customer PO.Box":"Fornire la casella postale del cliente","Not Defined":"Non definito","Male":"Maschio","Female":"Femmina","Gender":"Genere","Billing Address":"Indirizzo Di Fatturazione","Billing phone number.":"Numero di telefono di fatturazione.","Address 1":"Indirizzo 1","Billing First Address.":"Primo indirizzo di fatturazione.","Address 2":"Indirizzo 2","Billing Second Address.":"Secondo indirizzo di fatturazione.","Country":"Nazione","Billing Country.":"Paese di fatturazione.","Postal Address":"Indirizzo postale","Company":"Societ\u00e0","Shipping Address":"Indirizzo di spedizione","Shipping phone number.":"Numero di telefono per la spedizione.","Shipping First Address.":"Primo indirizzo di spedizione.","Shipping Second Address.":"Secondo indirizzo di spedizione.","Shipping Country.":"Paese di spedizione.","Account Credit":"Credito sul conto","Owed Amount":"Importo dovuto","Purchase Amount":"Ammontare dell'acquisto","Rewards":"Ricompense","Delete a customers":"Elimina un cliente","Delete Selected Customers":"Elimina clienti selezionati Select","Customer Groups List":"Elenco dei gruppi di clienti","Display all Customers Groups.":"Visualizza tutti i gruppi di clienti.","No Customers Groups has been registered":"Nessun gruppo di clienti \u00e8 stato registrato","Add a new Customers Group":"Aggiungi un nuovo gruppo di clienti","Create a new Customers Group":"Crea un nuovo Gruppo Clienti","Register a new Customers Group and save it.":"Registra un nuovo Gruppo Clienti e salvalo.","Edit Customers Group":"Modifica gruppo clienti","Modify Customers group.":"Modifica gruppo Clienti.","Return to Customers Groups":"Torna ai gruppi di clienti","Reward System":"Sistema di ricompensa","Select which Reward system applies to the group":"Seleziona quale sistema di premi si applica al gruppo","Minimum Credit Amount":"Importo minimo del credito","A brief description about what this group is about":"Una breve descrizione di cosa tratta questo gruppo","Created On":"Creato","Customer Orders List":"Elenco degli ordini dei clienti","Display all customer orders.":"Visualizza tutti gli ordini dei clienti.","No customer orders has been registered":"Nessun ordine cliente \u00e8 stato registrato","Add a new customer order":"Aggiungi un nuovo ordine cliente","Create a new customer order":"Crea un nuovo ordine cliente","Register a new customer order and save it.":"Registra un nuovo ordine cliente e salvalo.","Edit customer order":"Modifica ordine cliente","Modify Customer Order.":"Modifica ordine cliente.","Return to Customer Orders":"Ritorna agli ordini dei clienti","Created at":"Creato a","Customer Id":"Identificativo del cliente","Discount Percentage":"Percentuale di sconto","Discount Type":"Tipo di sconto","Final Payment Date":"Data di pagamento finale","Process Status":"Stato del processo","Shipping Rate":"Tariffa di spedizione","Shipping Type":"Tipo di spedizione","Title":"Titolo","Total installments":"Totale rate","Updated at":"Aggiornato a","Uuid":"Uuid","Voidance Reason":"Motivo del vuoto","Customer Rewards List":"Elenco dei premi per i clienti","Display all customer rewards.":"Visualizza tutti i premi dei clienti.","No customer rewards has been registered":"Nessun premio per i clienti \u00e8 stato registrato","Add a new customer reward":"Aggiungi un nuovo premio cliente","Create a new customer reward":"Crea un nuovo premio cliente","Register a new customer reward and save it.":"Registra un nuovo premio cliente e salvalo.","Edit customer reward":"Modifica ricompensa cliente","Modify Customer Reward.":"Modifica il premio del cliente.","Return to Customer Rewards":"Torna a Premi per i clienti","Points":"Punti","Target":"Obbiettivo","Reward Name":"Nome ricompensa","Last Update":"Ultimo aggiornamento","Active":"Attivo","Users Group":"Gruppo utenti","None":"Nessuno","Recurring":"Ricorrente","Start of Month":"Inizio del mese","Mid of Month":"Met\u00e0 mese","End of Month":"Fine mese","X days Before Month Ends":"X giorni prima della fine del mese","X days After Month Starts":"X giorni dopo l'inizio del mese","Occurrence":"Evento","Occurrence Value":"Valore di occorrenza","Must be used in case of X days after month starts and X days before month ends.":"Deve essere utilizzato in caso di X giorni dopo l'inizio del mese e X giorni prima della fine del mese.","Category":"Categoria","Month Starts":"Inizio mese Month","Month Middle":"Mese Medio","Month Ends":"Fine del mese","X Days Before Month Ends":"X giorni prima della fine del mese","Updated At":"Aggiornato alle","Hold Orders List":"Elenco ordini in attesa","Display all hold orders.":"Visualizza tutti gli ordini sospesi.","No hold orders has been registered":"Nessun ordine sospeso \u00e8 stato registrato","Add a new hold order":"Aggiungi un nuovo ordine di sospensione","Create a new hold order":"Crea un nuovo ordine di sospensione","Register a new hold order and save it.":"Registra un nuovo ordine di sospensione e salvalo.","Edit hold order":"Modifica ordine di sospensione","Modify Hold Order.":"Modifica ordine di sospensione.","Return to Hold Orders":"Torna a mantenere gli ordini","Orders List":"Elenco ordini","Display all orders.":"Visualizza tutti gli ordini.","No orders has been registered":"Nessun ordine \u00e8 stato registrato","Add a new order":"Aggiungi un nuovo ordine","Create a new order":"Crea un nuovo ordine","Register a new order and save it.":"Registra un nuovo ordine e salvalo.","Edit order":"Modifica ordine","Modify Order.":"Modifica ordine.","Return to Orders":"Torna agli ordini","Discount Rate":"Tasso di sconto","The order and the attached products has been deleted.":"L'ordine e i prodotti allegati sono stati cancellati.","Invoice":"Fattura","Receipt":"Ricevuta","Order Instalments List":"Elenco delle rate dell'ordine","Display all Order Instalments.":"Visualizza tutte le rate dell'ordine.","No Order Instalment has been registered":"Nessuna rata dell'ordine \u00e8 stata registrata","Add a new Order Instalment":"Aggiungi una nuova rata dell'ordine","Create a new Order Instalment":"Crea una nuova rata dell'ordine","Register a new Order Instalment and save it.":"Registra una nuova rata dell'ordine e salvala.","Edit Order Instalment":"Modifica rata ordine","Modify Order Instalment.":"Modifica rata ordine.","Return to Order Instalment":"Ritorno alla rata dell'ordine","Order Id":"ID ordine","Payment Types List":"Elenco dei tipi di pagamento","Display all payment types.":"Visualizza tutti i tipi di pagamento.","No payment types has been registered":"Nessun tipo di pagamento \u00e8 stato registrato","Add a new payment type":"Aggiungi un nuovo tipo di pagamento","Create a new payment type":"Crea un nuovo tipo di pagamento","Register a new payment type and save it.":"Registra un nuovo tipo di pagamento e salvalo.","Edit payment type":"Modifica tipo di pagamento","Modify Payment Type.":"Modifica tipo di pagamento.","Return to Payment Types":"Torna a Tipi di pagamento","Label":"Etichetta","Provide a label to the resource.":"Fornire un'etichetta alla risorsa.","Identifier":"identificatore","A payment type having the same identifier already exists.":"Esiste gi\u00e0 un tipo di pagamento con lo stesso identificatore.","Unable to delete a read-only payments type.":"Impossibile eliminare un tipo di pagamento di sola lettura.","Readonly":"Sola lettura","Procurements List":"Elenco acquisti","Display all procurements.":"Visualizza tutti gli appalti.","No procurements has been registered":"Nessun appalto \u00e8 stato registrato","Add a new procurement":"Aggiungi un nuovo acquisto","Create a new procurement":"Crea un nuovo approvvigionamento","Register a new procurement and save it.":"Registra un nuovo approvvigionamento e salvalo.","Edit procurement":"Modifica approvvigionamento","Modify Procurement.":"Modifica approvvigionamento.","Return to Procurements":"Torna agli acquisti","Provider Id":"ID fornitore","Total Items":"Articoli totali","Provider":"Fornitore","Stocked":"rifornito","Procurement Products List":"Elenco dei prodotti di approvvigionamento","Display all procurement products.":"Visualizza tutti i prodotti di approvvigionamento.","No procurement products has been registered":"Nessun prodotto di approvvigionamento \u00e8 stato registrato","Add a new procurement product":"Aggiungi un nuovo prodotto di approvvigionamento","Create a new procurement product":"Crea un nuovo prodotto di approvvigionamento","Register a new procurement product and save it.":"Registra un nuovo prodotto di approvvigionamento e salvalo.","Edit procurement product":"Modifica prodotto approvvigionamento","Modify Procurement Product.":"Modifica prodotto di appalto.","Return to Procurement Products":"Torna all'acquisto di prodotti","Define what is the expiration date of the product.":"Definire qual \u00e8 la data di scadenza del prodotto.","On":"Su","Category Products List":"Categoria Elenco prodotti","Display all category products.":"Visualizza tutti i prodotti della categoria.","No category products has been registered":"Nessun prodotto di categoria \u00e8 stato registrato","Add a new category product":"Aggiungi un nuovo prodotto di categoria","Create a new category product":"Crea un nuovo prodotto di categoria","Register a new category product and save it.":"Registra un nuovo prodotto di categoria e salvalo.","Edit category product":"Modifica categoria prodotto","Modify Category Product.":"Modifica categoria prodotto.","Return to Category Products":"Torna alla categoria Prodotti","No Parent":"Nessun genitore","Preview":"Anteprima","Provide a preview url to the category.":"Fornisci un URL di anteprima alla categoria.","Displays On POS":"Visualizza su POS","Parent":"Genitore","If this category should be a child category of an existing category":"Se questa categoria deve essere una categoria figlio di una categoria esistente","Total Products":"Prodotti totali","Products List":"Elenco prodotti","Display all products.":"Visualizza tutti i prodotti.","No products has been registered":"Nessun prodotto \u00e8 stato registrato","Add a new product":"Aggiungi un nuovo prodotto","Create a new product":"Crea un nuovo prodotto","Register a new product and save it.":"Registra un nuovo prodotto e salvalo.","Edit product":"Modifica prodotto","Modify Product.":"Modifica prodotto.","Return to Products":"Torna ai prodotti","Assigned Unit":"Unit\u00e0 assegnata","The assigned unit for sale":"L'unit\u00e0 assegnata in vendita","Define the regular selling price.":"Definire il prezzo di vendita regolare.","Define the wholesale price.":"Definire il prezzo all'ingrosso.","Preview Url":"Anteprima URL","Provide the preview of the current unit.":"Fornire l'anteprima dell'unit\u00e0 corrente.","Identification":"Identificazione","Define the barcode value. Focus the cursor here before scanning the product.":"Definire il valore del codice a barre. Metti a fuoco il cursore qui prima di scansionare il prodotto.","Define the barcode type scanned.":"Definire il tipo di codice a barre scansionato.","EAN 8":"EAN 8","EAN 13":"EAN 13","Codabar":"Codabar","Code 128":"Codice 128","Code 39":"Codice 39","Code 11":"Codice 11","UPC A":"UPC A","UPC E":"UPC E","Barcode Type":"Tipo di codice a barre","Select to which category the item is assigned.":"Seleziona a quale categoria \u00e8 assegnato l'articolo.","Materialized Product":"Prodotto materializzato","Dematerialized Product":"Prodotto dematerializzato","Define the product type. Applies to all variations.":"Definire il tipo di prodotto. Si applica a tutte le varianti.","Product Type":"Tipologia di prodotto","Define a unique SKU value for the product.":"Definire un valore SKU univoco per il prodotto.","On Sale":"In vendita","Hidden":"Nascosto","Define whether the product is available for sale.":"Definire se il prodotto \u00e8 disponibile per la vendita.","Enable the stock management on the product. Will not work for service or uncountable products.":"Abilita la gestione delle scorte sul prodotto. Non funzioner\u00e0 per servizi o prodotti non numerabili.","Stock Management Enabled":"Gestione delle scorte abilitata","Units":"Unit\u00e0","Accurate Tracking":"Monitoraggio accurato","What unit group applies to the actual item. This group will apply during the procurement.":"Quale gruppo di unit\u00e0 si applica all'articolo effettivo. Questo gruppo si applicher\u00e0 durante l'appalto.","Unit Group":"Gruppo unit\u00e0","Determine the unit for sale.":"Determinare l'unit\u00e0 in vendita.","Selling Unit":"Unit\u00e0 di vendita","Expiry":"Scadenza","Product Expires":"Il prodotto scade","Set to \"No\" expiration time will be ignored.":"Impostato \"No\" expiration time will be ignored.","Prevent Sales":"Prevenire le vendite","Allow Sales":"Consenti vendite","Determine the action taken while a product has expired.":"Determinare l'azione intrapresa mentre un prodotto \u00e8 scaduto.","On Expiration":"Alla scadenza","Select the tax group that applies to the product\/variation.":"Seleziona il gruppo fiscale che si applica al prodotto\/variante.","Tax Group":"Gruppo fiscale","Define what is the type of the tax.":"Definire qual \u00e8 il tipo di tassa.","Images":"immagini","Image":"Immagine","Choose an image to add on the product gallery":"Scegli un'immagine da aggiungere alla galleria dei prodotti","Is Primary":"\u00e8 primario?","Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.":"Definisci se l'immagine deve essere primaria. Se sono presenti pi\u00f9 immagini principali, ne verr\u00e0 scelta una per te.","Sku":"Sku","Materialized":"materializzato","Dematerialized":"smaterializzato","Available":"A disposizione","See Quantities":"Vedi quantit\u00e0","See History":"Vedi la storia","Would you like to delete selected entries ?":"Vuoi eliminare le voci selezionate?","Product Histories":"Cronologia dei prodotti","Display all product histories.":"Visualizza tutte le cronologie dei prodotti.","No product histories has been registered":"Nessuna cronologia dei prodotti \u00e8 stata registrata","Add a new product history":"Aggiungi una nuova cronologia del prodotto","Create a new product history":"Crea una nuova cronologia del prodotto","Register a new product history and save it.":"Registra una nuova cronologia del prodotto e salvala.","Edit product history":"Modifica la cronologia del prodotto","Modify Product History.":"Modifica la cronologia del prodotto.","Return to Product Histories":"Torna alla cronologia dei prodotti Product","After Quantity":"Dopo la quantit\u00e0","Before Quantity":"Prima della quantit\u00e0","Operation Type":"Tipo di operazione","Order id":"ID ordine","Procurement Id":"ID approvvigionamento","Procurement Product Id":"ID prodotto approvvigionamento","Product Id":"Numero identificativo del prodotto","Unit Id":"ID unit\u00e0","P. Quantity":"P. Quantit\u00e0","N. Quantity":"N. Quantit\u00e0","Defective":"Difettoso","Deleted":"Eliminato","Removed":"RIMOSSO","Returned":"Restituito","Sold":"Venduto","Lost":"Perso","Added":"Aggiunto","Incoming Transfer":"Trasferimento in entrata","Outgoing Transfer":"Trasferimento in uscita","Transfer Rejected":"Trasferimento rifiutato","Transfer Canceled":"Trasferimento annullato","Void Return":"Ritorno nullo","Adjustment Return":"Ritorno di regolazione","Adjustment Sale":"Vendita di aggiustamento","Product Unit Quantities List":"Elenco quantit\u00e0 unit\u00e0 prodotto","Display all product unit quantities.":"Visualizza tutte le quantit\u00e0 di unit\u00e0 di prodotto.","No product unit quantities has been registered":"Nessuna quantit\u00e0 di unit\u00e0 di prodotto \u00e8 stata registrata","Add a new product unit quantity":"Aggiungi una nuova quantit\u00e0 di unit\u00e0 di prodotto","Create a new product unit quantity":"Crea una nuova quantit\u00e0 di unit\u00e0 di prodotto","Register a new product unit quantity and save it.":"Registra una nuova quantit\u00e0 di unit\u00e0 di prodotto e salvala.","Edit product unit quantity":"Modifica la quantit\u00e0 dell'unit\u00e0 di prodotto","Modify Product Unit Quantity.":"Modifica quantit\u00e0 unit\u00e0 prodotto.","Return to Product Unit Quantities":"Torna a Quantit\u00e0 unit\u00e0 prodotto","Product id":"Numero identificativo del prodotto","Providers List":"Elenco dei fornitori","Display all providers.":"Visualizza tutti i fornitori.","No providers has been registered":"Nessun provider \u00e8 stato registrato","Add a new provider":"Aggiungi un nuovo fornitore","Create a new provider":"Crea un nuovo fornitore","Register a new provider and save it.":"Registra un nuovo provider e salvalo.","Edit provider":"Modifica fornitore","Modify Provider.":"Modifica fornitore.","Return to Providers":"Ritorna ai fornitori","Provide the provider email. Might be used to send automated email.":"Fornire l'e-mail del provider. Potrebbe essere utilizzato per inviare e-mail automatizzate.","Contact phone number for the provider. Might be used to send automated SMS notifications.":"Contattare il numero di telefono del provider. Potrebbe essere utilizzato per inviare notifiche SMS automatizzate.","First address of the provider.":"Primo indirizzo del provider.","Second address of the provider.":"Secondo indirizzo del provider.","Further details about the provider":"Ulteriori dettagli sul fornitore","Amount Due":"Importo dovuto","Amount Paid":"Importo pagato","See Procurements":"Vedi Appalti","Registers List":"Elenco Registri","Display all registers.":"Visualizza tutti i registri.","No registers has been registered":"Nessun registro \u00e8 stato registrato","Add a new register":"Aggiungi un nuovo registro","Create a new register":"Crea un nuovo registro","Register a new register and save it.":"Registra un nuovo registro e salvalo.","Edit register":"Modifica registro","Modify Register.":"Modifica registro.","Return to Registers":"Torna ai Registri","Closed":"Chiuso","Define what is the status of the register.":"Definire qual \u00e8 lo stato del registro.","Provide mode details about this cash register.":"Fornisci i dettagli della modalit\u00e0 su questo registratore di cassa.","Unable to delete a register that is currently in use":"Impossibile eliminare un registro attualmente in uso","Used By":"Usato da","Register History List":"Registro Cronologia Lista","Display all register histories.":"Visualizza tutte le cronologie dei registri.","No register histories has been registered":"Nessuna cronologia dei registri \u00e8 stata registrata","Add a new register history":"Aggiungi una nuova cronologia del registro","Create a new register history":"Crea una nuova cronologia dei registri","Register a new register history and save it.":"Registra una nuova cronologia del registro e salvala.","Edit register history":"Modifica la cronologia del registro","Modify Registerhistory.":"Modifica la cronologia del registro.","Return to Register History":"Torna alla cronologia della registrazione","Register Id":"ID di registrazione","Action":"Azione","Register Name":"Registra nome","Done At":"Fatto a","Reward Systems List":"Elenco dei sistemi di ricompensa","Display all reward systems.":"Mostra tutti i sistemi di ricompensa.","No reward systems has been registered":"Nessun sistema di ricompensa \u00e8 stato registrato","Add a new reward system":"Aggiungi un nuovo sistema di ricompense","Create a new reward system":"Crea un nuovo sistema di ricompense","Register a new reward system and save it.":"Registra un nuovo sistema di ricompense e salvalo.","Edit reward system":"Modifica sistema di ricompense","Modify Reward System.":"Modifica il sistema di ricompensa.","Return to Reward Systems":"Torna a Sistemi di ricompensa","From":"A partire dal","The interval start here.":"L'intervallo inizia qui.","To":"a","The interval ends here.":"L'intervallo finisce qui.","Points earned.":"Punti guadagnati.","Coupon":"Buono","Decide which coupon you would apply to the system.":"Decidi quale coupon applicare al sistema.","This is the objective that the user should reach to trigger the reward.":"Questo \u00e8 l'obiettivo che l'utente dovrebbe raggiungere per attivare il premio.","A short description about this system":"Una breve descrizione di questo sistema","Would you like to delete this reward system ?":"Vuoi eliminare questo sistema di ricompensa?","Delete Selected Rewards":"Elimina i premi selezionati","Would you like to delete selected rewards?":"Vuoi eliminare i premi selezionati?","Roles List":"Elenco dei ruoli","Display all roles.":"Visualizza tutti i ruoli.","No role has been registered.":"Nessun ruolo \u00e8 stato registrato.","Add a new role":"Aggiungi un nuovo ruolo","Create a new role":"Crea un nuovo ruolo","Create a new role and save it.":"Crea un nuovo ruolo e salvalo.","Edit role":"Modifica ruolo","Modify Role.":"Modifica ruolo.","Return to Roles":"Torna ai ruoli","Provide a name to the role.":"Assegna un nome al ruolo.","Should be a unique value with no spaces or special character":"Dovrebbe essere un valore univoco senza spazi o caratteri speciali","Store Dashboard":"Pannello di controllo del negozio","Cashier Dashboard":"Pannello di controllo della cassa","Default Dashboard":"Pannello di controllo predefinito","Provide more details about what this role is about.":"Fornisci maggiori dettagli sull'argomento di questo ruolo.","Unable to delete a system role.":"Impossibile eliminare un ruolo di sistema.","You do not have enough permissions to perform this action.":"Non disponi di autorizzazioni sufficienti per eseguire questa azione.","Taxes List":"Elenco delle tasse","Display all taxes.":"Visualizza tutte le tasse.","No taxes has been registered":"Nessuna tassa \u00e8 stata registrata","Add a new tax":"Aggiungi una nuova tassa","Create a new tax":"Crea una nuova tassa","Register a new tax and save it.":"Registra una nuova tassa e salvala.","Edit tax":"Modifica imposta","Modify Tax.":"Modifica imposta.","Return to Taxes":"Torna a Tasse","Provide a name to the tax.":"Fornire un nome alla tassa.","Assign the tax to a tax group.":"Assegnare l'imposta a un gruppo fiscale.","Rate":"Valutare","Define the rate value for the tax.":"Definire il valore dell'aliquota per l'imposta.","Provide a description to the tax.":"Fornire una descrizione dell'imposta.","Taxes Groups List":"Elenco dei gruppi di tasse","Display all taxes groups.":"Visualizza tutti i gruppi di tasse.","No taxes groups has been registered":"Nessun gruppo fiscale \u00e8 stato registrato","Add a new tax group":"Aggiungi un nuovo gruppo fiscale","Create a new tax group":"Crea un nuovo gruppo fiscale","Register a new tax group and save it.":"Registra un nuovo gruppo fiscale e salvalo.","Edit tax group":"Modifica gruppo fiscale","Modify Tax Group.":"Modifica gruppo fiscale.","Return to Taxes Groups":"Torna a Gruppi fiscali","Provide a short description to the tax group.":"Fornire una breve descrizione al gruppo fiscale.","Units List":"Elenco unit\u00e0","Display all units.":"Visualizza tutte le unit\u00e0.","No units has been registered":"Nessuna unit\u00e0 \u00e8 stata registrata","Add a new unit":"Aggiungi una nuova unit\u00e0","Create a new unit":"Crea una nuova unit\u00e0","Register a new unit and save it.":"Registra una nuova unit\u00e0 e salvala.","Edit unit":"Modifica unit\u00e0","Modify Unit.":"Modifica unit\u00e0.","Return to Units":"Torna alle unit\u00e0","Preview URL":"URL di anteprima","Preview of the unit.":"Anteprima dell'unit\u00e0.","Define the value of the unit.":"Definire il valore dell'unit\u00e0.","Define to which group the unit should be assigned.":"Definire a quale gruppo deve essere assegnata l'unit\u00e0.","Base Unit":"Unit\u00e0 base","Determine if the unit is the base unit from the group.":"Determinare se l'unit\u00e0 \u00e8 l'unit\u00e0 di base del gruppo.","Provide a short description about the unit.":"Fornire una breve descrizione dell'unit\u00e0.","Unit Groups List":"Elenco dei gruppi di unit\u00e0","Display all unit groups.":"Visualizza tutti i gruppi di unit\u00e0.","No unit groups has been registered":"Nessun gruppo di unit\u00e0 \u00e8 stato registrato","Add a new unit group":"Aggiungi un nuovo gruppo di unit\u00e0","Create a new unit group":"Crea un nuovo gruppo di unit\u00e0","Register a new unit group and save it.":"Registra un nuovo gruppo di unit\u00e0 e salvalo.","Edit unit group":"Modifica gruppo unit\u00e0","Modify Unit Group.":"Modifica gruppo unit\u00e0.","Return to Unit Groups":"Torna ai gruppi di unit\u00e0","Users List":"Elenco utenti","Display all users.":"Visualizza tutti gli utenti.","No users has been registered":"Nessun utente \u00e8 stato registrato","Add a new user":"Aggiungi un nuovo utente","Create a new user":"Crea un nuovo utente","Register a new user and save it.":"Registra un nuovo utente e salvalo.","Edit user":"Modifica utente","Modify User.":"Modifica utente.","Return to Users":"Torna agli utenti","Username":"Nome utente","Will be used for various purposes such as email recovery.":"Verr\u00e0 utilizzato per vari scopi come il recupero della posta elettronica.","Password":"Parola d'ordine","Make a unique and secure password.":"Crea una password unica e sicura.","Confirm Password":"Conferma password","Should be the same as the password.":"Dovrebbe essere uguale alla password.","Define whether the user can use the application.":"Definire se l'utente pu\u00f2 utilizzare l'applicazione.","The action you tried to perform is not allowed.":"L'azione che hai tentato di eseguire non \u00e8 consentita.","Not Enough Permissions":"Autorizzazioni insufficienti","The resource of the page you tried to access is not available or might have been deleted.":"La risorsa della pagina a cui hai tentato di accedere non \u00e8 disponibile o potrebbe essere stata eliminata.","Not Found Exception":"Eccezione non trovata","Provide your username.":"Fornisci il tuo nome utente.","Provide your password.":"Fornisci la tua password.","Provide your email.":"Fornisci la tua email.","Password Confirm":"Conferma la password","define the amount of the transaction.":"definire l'importo della transazione.","Further observation while proceeding.":"Ulteriori osservazioni mentre si procede.","determine what is the transaction type.":"determinare qual \u00e8 il tipo di transazione.","Add":"Aggiungere","Deduct":"Dedurre","Determine the amount of the transaction.":"Determina l'importo della transazione.","Further details about the transaction.":"Ulteriori dettagli sulla transazione.","Define the installments for the current order.":"Definire le rate per l'ordine corrente.","New Password":"nuova password","define your new password.":"definisci la tua nuova password.","confirm your new password.":"conferma la tua nuova password.","choose the payment type.":"scegli il tipo di pagamento.","Define the order name.":"Definire il nome dell'ordine.","Define the date of creation of the order.":"Definire la data di creazione dell'ordine.","Provide the procurement name.":"Fornire il nome dell'appalto.","Describe the procurement.":"Descrivi l'appalto.","Define the provider.":"Definire il fornitore.","Define what is the unit price of the product.":"Definire qual \u00e8 il prezzo unitario del prodotto.","Condition":"Condizione","Determine in which condition the product is returned.":"Determina in quali condizioni viene restituito il prodotto.","Other Observations":"Altre osservazioni","Describe in details the condition of the returned product.":"Descrivi in \u200b\u200bdettaglio le condizioni del prodotto restituito.","Unit Group Name":"Nome gruppo unit\u00e0","Provide a unit name to the unit.":"Fornire un nome di unit\u00e0 all'unit\u00e0.","Describe the current unit.":"Descrivi l'unit\u00e0 corrente.","assign the current unit to a group.":"assegnare l'unit\u00e0 corrente a un gruppo.","define the unit value.":"definire il valore dell'unit\u00e0.","Provide a unit name to the units group.":"Fornire un nome di unit\u00e0 al gruppo di unit\u00e0.","Describe the current unit group.":"Descrivi il gruppo di unit\u00e0 corrente.","POS":"POS","Open POS":"Apri POS","Create Register":"Crea Registrati","Use Customer Billing":"Usa fatturazione cliente","Define whether the customer billing information should be used.":"Definire se devono essere utilizzate le informazioni di fatturazione del cliente.","General Shipping":"Spedizione generale","Define how the shipping is calculated.":"Definisci come viene calcolata la spedizione.","Shipping Fees":"Spese di spedizione","Define shipping fees.":"Definire le spese di spedizione.","Use Customer Shipping":"Usa la spedizione del cliente","Define whether the customer shipping information should be used.":"Definire se devono essere utilizzate le informazioni di spedizione del cliente.","Invoice Number":"Numero di fattura","If the procurement has been issued outside of NexoPOS, please provide a unique reference.":"Se l'appalto \u00e8 stato emesso al di fuori di NexoPOS, fornire un riferimento univoco.","Delivery Time":"Tempi di consegna","If the procurement has to be delivered at a specific time, define the moment here.":"Se l'approvvigionamento deve essere consegnato in un momento specifico, definire qui il momento.","Automatic Approval":"Approvazione automatica","Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.":"Determinare se l'approvvigionamento deve essere contrassegnato automaticamente come approvato una volta scaduto il termine di consegna.","Determine what is the actual payment status of the procurement.":"Determinare qual \u00e8 l'effettivo stato di pagamento dell'appalto.","Determine what is the actual provider of the current procurement.":"Determinare qual \u00e8 il fornitore effettivo dell'attuale appalto.","Provide a name that will help to identify the procurement.":"Fornire un nome che aiuti a identificare l'appalto.","First Name":"Nome di battesimo","Avatar":"Avatar","Define the image that should be used as an avatar.":"Definisci l'immagine da utilizzare come avatar.","Language":"Lingua","Choose the language for the current account.":"Scegli la lingua per il conto corrente.","Security":"Sicurezza","Old Password":"vecchia password","Provide the old password.":"Fornisci la vecchia password.","Change your password with a better stronger password.":"Cambia la tua password con una password pi\u00f9 forte.","Password Confirmation":"Conferma password","The profile has been successfully saved.":"Il profilo \u00e8 stato salvato con successo.","The user attribute has been saved.":"L'attributo utente \u00e8 stato salvato.","The options has been successfully updated.":"Le opzioni sono state aggiornate con successo.","Wrong password provided":"\u00c8 stata fornita una password errata","Wrong old password provided":"\u00c8 stata fornita una vecchia password errata","Password Successfully updated.":"Password aggiornata con successo.","Sign In — NexoPOS":"Accedi — NexoPOS","Sign Up — NexoPOS":"Registrati — NexoPOS","Password Lost":"Password smarrita","Unable to proceed as the token provided is invalid.":"Impossibile procedere poich\u00e9 il token fornito non \u00e8 valido.","The token has expired. Please request a new activation token.":"Il token \u00e8 scaduto. Richiedi un nuovo token di attivazione.","Set New Password":"Imposta nuova password","Database Update":"Aggiornamento del database","This account is disabled.":"Questo account \u00e8 disabilitato.","Unable to find record having that username.":"Impossibile trovare il record con quel nome utente.","Unable to find record having that password.":"Impossibile trovare il record con quella password.","Invalid username or password.":"Nome utente o password errati.","Unable to login, the provided account is not active.":"Impossibile accedere, l'account fornito non \u00e8 attivo.","You have been successfully connected.":"Sei stato connesso con successo.","The recovery email has been send to your inbox.":"L'e-mail di recupero \u00e8 stata inviata alla tua casella di posta.","Unable to find a record matching your entry.":"Impossibile trovare un record che corrisponda alla tua voce.","Your Account has been created but requires email validation.":"Il tuo account \u00e8 stato creato ma richiede la convalida dell'e-mail.","Unable to find the requested user.":"Impossibile trovare l'utente richiesto.","Unable to proceed, the provided token is not valid.":"Impossibile procedere, il token fornito non \u00e8 valido.","Unable to proceed, the token has expired.":"Impossibile procedere, il token \u00e8 scaduto.","Your password has been updated.":"La tua password \u00e8 stata aggiornata.","Unable to edit a register that is currently in use":"Impossibile modificare un registro attualmente in uso","No register has been opened by the logged user.":"Nessun registro \u00e8 stato aperto dall'utente registrato.","The register is opened.":"Il registro \u00e8 aperto.","Closing":"Chiusura","Opening":"Apertura","Sale":"Vendita","Refund":"Rimborso","Unable to find the category using the provided identifier":"Impossibile trovare la categoria utilizzando l'identificatore fornito","The category has been deleted.":"La categoria \u00e8 stata eliminata.","Unable to find the category using the provided identifier.":"Impossibile trovare la categoria utilizzando l'identificatore fornito.","Unable to find the attached category parent":"Impossibile trovare la categoria allegata genitore","The category has been correctly saved":"La categoria \u00e8 stata salvata correttamente","The category has been updated":"La categoria \u00e8 stata aggiornata","The entry has been successfully deleted.":"La voce \u00e8 stata eliminata con successo.","A new entry has been successfully created.":"Una nuova voce \u00e8 stata creata con successo.","Unhandled crud resource":"Risorsa crud non gestita","You need to select at least one item to delete":"Devi selezionare almeno un elemento da eliminare","You need to define which action to perform":"Devi definire quale azione eseguire","%s has been processed, %s has not been processed.":"%s \u00e8 stato elaborato, %s non \u00e8 stato elaborato.","Unable to proceed. No matching CRUD resource has been found.":"Impossibile procedere. Non \u00e8 stata trovata alcuna risorsa CRUD corrispondente.","Create Coupon":"Crea coupon","helps you creating a coupon.":"ti aiuta a creare un coupon.","Edit Coupon":"Modifica coupon","Editing an existing coupon.":"Modifica di un coupon esistente.","Invalid Request.":"Richiesta non valida.","Unable to delete a group to which customers are still assigned.":"Impossibile eliminare un gruppo a cui i clienti sono ancora assegnati.","The customer group has been deleted.":"Il gruppo di clienti \u00e8 stato eliminato.","Unable to find the requested group.":"Impossibile trovare il gruppo richiesto.","The customer group has been successfully created.":"Il gruppo di clienti \u00e8 stato creato con successo.","The customer group has been successfully saved.":"Il gruppo di clienti \u00e8 stato salvato con successo.","Unable to transfer customers to the same account.":"Impossibile trasferire i clienti sullo stesso account.","The categories has been transferred to the group %s.":"Le categorie sono state trasferite al gruppo %s.","No customer identifier has been provided to proceed to the transfer.":"Non \u00e8 stato fornito alcun identificativo cliente per procedere al trasferimento.","Unable to find the requested group using the provided id.":"Impossibile trovare il gruppo richiesto utilizzando l'ID fornito.","\"%s\" is not an instance of \"FieldsService\"":"\"%s\" is not an instance of \"FieldsService\"","Manage Medias":"Gestisci media Media","Modules List":"Elenco moduli","List all available modules.":"Elenca tutti i moduli disponibili.","Upload A Module":"Carica un modulo","Extends NexoPOS features with some new modules.":"Estende le funzionalit\u00e0 di NexoPOS con alcuni nuovi moduli.","The notification has been successfully deleted":"La notifica \u00e8 stata eliminata con successo","All the notifications have been cleared.":"Tutte le notifiche sono state cancellate.","Order Invoice — %s":"Fattura dell'ordine — %S","Order Receipt — %s":"Ricevuta dell'ordine — %S","The printing event has been successfully dispatched.":"L'evento di stampa \u00e8 stato inviato con successo.","There is a mismatch between the provided order and the order attached to the instalment.":"C'\u00e8 una discrepanza tra l'ordine fornito e l'ordine allegato alla rata.","Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.":"Impossibile modificare un approvvigionamento stoccato. Prendere in considerazione l'esecuzione di una rettifica o l'eliminazione dell'approvvigionamento.","New Procurement":"Nuovo appalto","Edit Procurement":"Modifica approvvigionamento","Perform adjustment on existing procurement.":"Eseguire l'adeguamento sugli appalti esistenti.","%s - Invoice":"%s - Fattura","list of product procured.":"elenco dei prodotti acquistati.","The product price has been refreshed.":"Il prezzo del prodotto \u00e8 stato aggiornato.","The single variation has been deleted.":"La singola variazione \u00e8 stata eliminata.","Edit a product":"Modifica un prodotto","Makes modifications to a product":"Apporta modifiche a un prodotto","Create a product":"Crea un prodotto","Add a new product on the system":"Aggiungi un nuovo prodotto al sistema","Stock Adjustment":"Adeguamento delle scorte","Adjust stock of existing products.":"Adeguare lo stock di prodotti esistenti.","No stock is provided for the requested product.":"Nessuna giacenza \u00e8 prevista per il prodotto richiesto.","The product unit quantity has been deleted.":"La quantit\u00e0 dell'unit\u00e0 di prodotto \u00e8 stata eliminata.","Unable to proceed as the request is not valid.":"Impossibile procedere perch\u00e9 la richiesta non \u00e8 valida.","Unsupported action for the product %s.":"Azione non supportata per il prodotto %s.","The stock has been adjustment successfully.":"Lo stock \u00e8 stato aggiustato con successo.","Unable to add the product to the cart as it has expired.":"Impossibile aggiungere il prodotto al carrello in quanto scaduto.","Unable to add a product that has accurate tracking enabled, using an ordinary barcode.":"Impossibile aggiungere un prodotto per il quale \u00e8 abilitato il monitoraggio accurato, utilizzando un normale codice a barre.","There is no products matching the current request.":"Non ci sono prodotti corrispondenti alla richiesta corrente.","Print Labels":"Stampa etichette","Customize and print products labels.":"Personalizza e stampa le etichette dei prodotti.","Sales Report":"Rapporto delle vendite","Provides an overview over the sales during a specific period":"Fornisce una panoramica sulle vendite durante un periodo specifico","Provides an overview over the best products sold during a specific period.":"Fornisce una panoramica sui migliori prodotti venduti durante un periodo specifico.","Sold Stock":"Stock venduto","Provides an overview over the sold stock during a specific period.":"Fornisce una panoramica sullo stock venduto durante un periodo specifico.","Profit Report":"Rapporto sui profitti","Provides an overview of the provide of the products sold.":"Fornisce una panoramica della fornitura dei prodotti venduti.","Provides an overview on the activity for a specific period.":"Fornisce una panoramica dell'attivit\u00e0 per un periodo specifico.","Annual Report":"Relazione annuale","Sales By Payment Types":"Vendite per tipi di pagamento","Provide a report of the sales by payment types, for a specific period.":"Fornire un report delle vendite per tipi di pagamento, per un periodo specifico.","The report will be computed for the current year.":"Il rendiconto sar\u00e0 calcolato per l'anno in corso.","Unknown report to refresh.":"Rapporto sconosciuto da aggiornare.","Invalid authorization code provided.":"Codice di autorizzazione fornito non valido.","The database has been successfully seeded.":"Il database \u00e8 stato seminato con successo.","Settings Page Not Found":"Pagina Impostazioni non trovata","Customers Settings":"Impostazioni clienti","Configure the customers settings of the application.":"Configurare le impostazioni dei clienti dell'applicazione.","General Settings":"impostazioni generali","Configure the general settings of the application.":"Configura le impostazioni generali dell'applicazione.","Orders Settings":"Impostazioni ordini","POS Settings":"Impostazioni POS","Configure the pos settings.":"Configura le impostazioni della posizione.","Workers Settings":"Impostazioni dei lavoratori","%s is not an instance of \"%s\".":"%s non \u00e8 un'istanza di \"%s\".","Unable to find the requested product tax using the provided id":"Impossibile trovare l'imposta sul prodotto richiesta utilizzando l'ID fornito","Unable to find the requested product tax using the provided identifier.":"Impossibile trovare l'imposta sul prodotto richiesta utilizzando l'identificatore fornito.","The product tax has been created.":"L'imposta sul prodotto \u00e8 stata creata.","The product tax has been updated":"L'imposta sul prodotto \u00e8 stata aggiornata","Unable to retrieve the requested tax group using the provided identifier \"%s\".":"Impossibile recuperare il gruppo fiscale richiesto utilizzando l'identificatore fornito \"%s\".","Permission Manager":"Gestore dei permessi","Manage all permissions and roles":"Gestisci tutti i permessi e i ruoli","My Profile":"Il mio profilo","Change your personal settings":"Modifica le tue impostazioni personali","The permissions has been updated.":"Le autorizzazioni sono state aggiornate.","Sunday":"Domenica","Monday":"luned\u00ec","Tuesday":"marted\u00ec","Wednesday":"Mercoled\u00ec","Thursday":"Gioved\u00ec","Friday":"venerd\u00ec","Saturday":"Sabato","The migration has successfully run.":"La migrazione \u00e8 stata eseguita correttamente.","Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.":"Impossibile inizializzare la pagina delle impostazioni. Impossibile istanziare l'identificatore \"%s\".","Unable to register. The registration is closed.":"Impossibile registrarsi. La registrazione \u00e8 chiusa.","Hold Order Cleared":"Mantieni l'ordine cancellato","Report Refreshed":"Rapporto aggiornato","The yearly report has been successfully refreshed for the year \"%s\".":"Il rapporto annuale \u00e8 stato aggiornato con successo per l'anno \"%s\".","[NexoPOS] Activate Your Account":"[NexoPOS] Attiva il tuo account","[NexoPOS] A New User Has Registered":"[NexoPOS] Si \u00e8 registrato un nuovo utente","[NexoPOS] Your Account Has Been Created":"[NexoPOS] Il tuo account \u00e8 stato creato","Unable to find the permission with the namespace \"%s\".":"Impossibile trovare l'autorizzazione con lo spazio dei nomi \"%s\".","Voided":"annullato","The register has been successfully opened":"Il registro \u00e8 stato aperto con successo","The register has been successfully closed":"Il registro \u00e8 stato chiuso con successo","The provided amount is not allowed. The amount should be greater than \"0\". ":"L'importo fornito non \u00e8 consentito. L'importo deve essere maggiore di \"0\". ","The cash has successfully been stored":"Il denaro \u00e8 stato archiviato con successo","Not enough fund to cash out.":"Fondi insufficienti per incassare.","The cash has successfully been disbursed.":"Il denaro \u00e8 stato erogato con successo.","In Use":"In uso","Opened":"Ha aperto","Delete Selected entries":"Elimina voci selezionate","%s entries has been deleted":"%s voci sono state cancellate","%s entries has not been deleted":"%s voci non sono state cancellate","Unable to find the customer using the provided id.":"Impossibile trovare il cliente utilizzando l'ID fornito.","The customer has been deleted.":"Il cliente \u00e8 stato eliminato.","The customer has been created.":"Il cliente \u00e8 stato creato.","Unable to find the customer using the provided ID.":"Impossibile trovare il cliente utilizzando l'ID fornito.","The customer has been edited.":"Il cliente \u00e8 stato modificato.","Unable to find the customer using the provided email.":"Impossibile trovare il cliente utilizzando l'e-mail fornita.","The customer account has been updated.":"Il conto cliente \u00e8 stato aggiornato.","Issuing Coupon Failed":"Emissione del coupon non riuscita","Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.":"Impossibile applicare un coupon allegato al premio \"%s\". Sembra che il coupon non esista pi\u00f9.","Unable to find a coupon with the provided code.":"Impossibile trovare un coupon con il codice fornito.","The coupon has been updated.":"Il coupon \u00e8 stato aggiornato.","The group has been created.":"Il gruppo \u00e8 stato creato.","Countable":"numerabile","Piece":"Pezzo","GST":"GST","SGST":"SGST","CGST":"CGST","Sample Procurement %s":"Acquisto del campione %s","generated":"generato","The media has been deleted":"Il supporto \u00e8 stato cancellato","Unable to find the media.":"Impossibile trovare il supporto.","Unable to find the requested file.":"Impossibile trovare il file richiesto.","Unable to find the media entry":"Impossibile trovare la voce dei media","Payment Types":"Modalit\u00e0 di pagamento","Medias":"Media","List":"Elenco","Customers Groups":"Gruppi di clienti","Create Group":"Creare un gruppo","Reward Systems":"Sistemi di ricompensa","Create Reward":"Crea ricompensa","List Coupons":"Elenco coupon","Providers":"fornitori","Create A Provider":"Crea un fornitore","Inventory":"Inventario","Create Product":"Crea prodotto","Create Category":"Crea categoria","Create Unit":"Crea unit\u00e0","Unit Groups":"Gruppi di unit\u00e0","Create Unit Groups":"Crea gruppi di unit\u00e0","Taxes Groups":"Gruppi di tasse","Create Tax Groups":"Crea gruppi fiscali","Create Tax":"Crea imposta","Modules":"Moduli","Upload Module":"Modulo di caricamento","Users":"Utenti","Create User":"Creare un utente","Roles":"Ruoli","Create Roles":"Crea ruoli","Permissions Manager":"Gestore dei permessi","Procurements":"Appalti","Reports":"Rapporti","Sale Report":"Rapporto di vendita","Incomes & Loosses":"Redditi e perdite","Sales By Payments":"Vendite tramite pagamenti","Invoice Settings":"Impostazioni fattura","Workers":"Lavoratori","Unable to locate the requested module.":"Impossibile individuare il modulo richiesto.","The module \"%s\" has been disabled as the dependency \"%s\" is missing. ":"Il modulo \"%s\" has been disabled as the dependency \"%s\" is missing. ","The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ":"Il modulo \"%s\" has been disabled as the dependency \"%s\" is not enabled. ","Unable to detect the folder from where to perform the installation.":"Impossibile rilevare la cartella da cui eseguire l'installazione.","The uploaded file is not a valid module.":"Il file caricato non \u00e8 un modulo valido.","The module has been successfully installed.":"Il modulo \u00e8 stato installato con successo.","The migration run successfully.":"La migrazione \u00e8 stata eseguita correttamente.","The module has correctly been enabled.":"Il modulo \u00e8 stato abilitato correttamente.","Unable to enable the module.":"Impossibile abilitare il modulo.","The Module has been disabled.":"Il Modulo \u00e8 stato disabilitato.","Unable to disable the module.":"Impossibile disabilitare il modulo.","Unable to proceed, the modules management is disabled.":"Impossibile procedere, la gestione dei moduli \u00e8 disabilitata.","Missing required parameters to create a notification":"Parametri obbligatori mancanti per creare una notifica","The order has been placed.":"L'ordine \u00e8 stato effettuato.","The percentage discount provided is not valid.":"La percentuale di sconto fornita non \u00e8 valida.","A discount cannot exceed the sub total value of an order.":"Uno sconto non pu\u00f2 superare il valore totale parziale di un ordine.","No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.":"Al momento non \u00e8 previsto alcun pagamento. Se il cliente desidera pagare in anticipo, valuta la possibilit\u00e0 di modificare la data di pagamento delle rate.","The payment has been saved.":"Il pagamento \u00e8 stato salvato.","Unable to edit an order that is completely paid.":"Impossibile modificare un ordine completamente pagato.","Unable to proceed as one of the previous submitted payment is missing from the order.":"Impossibile procedere poich\u00e9 nell'ordine manca uno dei precedenti pagamenti inviati.","The order payment status cannot switch to hold as a payment has already been made on that order.":"Lo stato di pagamento dell'ordine non pu\u00f2 passare in sospeso poich\u00e9 un pagamento \u00e8 gi\u00e0 stato effettuato su tale ordine.","Unable to proceed. One of the submitted payment type is not supported.":"Impossibile procedere. Uno dei tipi di pagamento inviati non \u00e8 supportato.","Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.":"Impossibile procedere, il prodotto \"%s\" has a unit which cannot be retreived. It might have been deleted.","Unable to find the customer using the provided ID. The order creation has failed.":"Impossibile trovare il cliente utilizzando l'ID fornito. La creazione dell'ordine non \u00e8 riuscita.","Unable to proceed a refund on an unpaid order.":"Impossibile procedere al rimborso su un ordine non pagato.","The current credit has been issued from a refund.":"Il credito corrente \u00e8 stato emesso da un rimborso.","The order has been successfully refunded.":"L'ordine \u00e8 stato rimborsato con successo.","unable to proceed to a refund as the provided status is not supported.":"impossibile procedere al rimborso poich\u00e9 lo stato fornito non \u00e8 supportato.","The product %s has been successfully refunded.":"Il prodotto %s \u00e8 stato rimborsato con successo.","Unable to find the order product using the provided id.":"Impossibile trovare il prodotto ordinato utilizzando l'ID fornito.","Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier":"Impossibile trovare l'ordine richiesto utilizzando \"%s\" as pivot and \"%s\" as identifier","Unable to fetch the order as the provided pivot argument is not supported.":"Impossibile recuperare l'ordine poich\u00e9 l'argomento pivot fornito non \u00e8 supportato.","The product has been added to the order \"%s\"":"Il prodotto \u00e8 stato aggiunto all'ordine \"%s\"","the order has been successfully computed.":"l'ordine \u00e8 stato calcolato con successo.","The order has been deleted.":"L'ordine \u00e8 stato cancellato.","The product has been successfully deleted from the order.":"Il prodotto \u00e8 stato eliminato con successo dall'ordine.","Unable to find the requested product on the provider order.":"Impossibile trovare il prodotto richiesto nell'ordine del fornitore.","Unpaid Orders Turned Due":"Ordini non pagati scaduti","No orders to handle for the moment.":"Nessun ordine da gestire per il momento.","The order has been correctly voided.":"L'ordine \u00e8 stato correttamente annullato.","Unable to edit an already paid instalment.":"Impossibile modificare una rata gi\u00e0 pagata.","The instalment has been saved.":"La rata \u00e8 stata salvata.","The instalment has been deleted.":"La rata \u00e8 stata cancellata.","The defined amount is not valid.":"L'importo definito non \u00e8 valido.","No further instalments is allowed for this order. The total instalment already covers the order total.":"Non sono consentite ulteriori rate per questo ordine. La rata totale copre gi\u00e0 il totale dell'ordine.","The instalment has been created.":"La rata \u00e8 stata creata.","The provided status is not supported.":"Lo stato fornito non \u00e8 supportato.","The order has been successfully updated.":"L'ordine \u00e8 stato aggiornato con successo.","Unable to find the requested procurement using the provided identifier.":"Impossibile trovare l'appalto richiesto utilizzando l'identificatore fornito.","Unable to find the assigned provider.":"Impossibile trovare il provider assegnato.","The procurement has been created.":"L'appalto \u00e8 stato creato.","Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.":"Impossibile modificare un approvvigionamento che \u00e8 gi\u00e0 stato stoccato. Si prega di considerare l'esecuzione e la regolazione delle scorte.","The provider has been edited.":"Il provider \u00e8 stato modificato.","Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"":"Impossibile avere un ID gruppo unit\u00e0 per il prodotto utilizzando il riferimento \"%s\" come \"%s\"","The operation has completed.":"L'operazione \u00e8 stata completata.","The procurement has been refreshed.":"L'approvvigionamento \u00e8 stato aggiornato.","The procurement has been reset.":"L'appalto \u00e8 stato ripristinato.","The procurement products has been deleted.":"I prodotti di approvvigionamento sono stati eliminati.","The procurement product has been updated.":"Il prodotto di approvvigionamento \u00e8 stato aggiornato.","Unable to find the procurement product using the provided id.":"Impossibile trovare il prodotto di approvvigionamento utilizzando l'ID fornito.","The product %s has been deleted from the procurement %s":"Il prodotto %s \u00e8 stato eliminato dall'approvvigionamento %s","The product with the following ID \"%s\" is not initially included on the procurement":"Il prodotto con il seguente ID \"%s\" is not initially included on the procurement","The procurement products has been updated.":"I prodotti di approvvigionamento sono stati aggiornati.","Procurement Automatically Stocked":"Approvvigionamento immagazzinato automaticamente","Draft":"Brutta copia","The category has been created":"La categoria \u00e8 stata creata","Unable to find the product using the provided id.":"Impossibile trovare il prodotto utilizzando l'ID fornito.","Unable to find the requested product using the provided SKU.":"Impossibile trovare il prodotto richiesto utilizzando lo SKU fornito.","The variable product has been created.":"Il prodotto variabile \u00e8 stato creato.","The provided barcode \"%s\" is already in use.":"Il codice a barre fornito \"%s\" is already in use.","The provided SKU \"%s\" is already in use.":"Lo SKU fornito \"%s\" is already in use.","The product has been saved.":"Il prodotto \u00e8 stato salvato.","The provided barcode is already in use.":"Il codice a barre fornito \u00e8 gi\u00e0 in uso.","The provided SKU is already in use.":"Lo SKU fornito \u00e8 gi\u00e0 in uso.","The product has been updated":"Il prodotto \u00e8 stato aggiornato","The variable product has been updated.":"Il prodotto variabile \u00e8 stato aggiornato.","The product variations has been reset":"Le variazioni del prodotto sono state ripristinate","The product has been reset.":"Il prodotto \u00e8 stato ripristinato.","The product \"%s\" has been successfully deleted":"Il prodotto \"%s\" has been successfully deleted","Unable to find the requested variation using the provided ID.":"Impossibile trovare la variazione richiesta utilizzando l'ID fornito.","The product stock has been updated.":"Lo stock del prodotto \u00e8 stato aggiornato.","The action is not an allowed operation.":"L'azione non \u00e8 un'operazione consentita.","The product quantity has been updated.":"La quantit\u00e0 del prodotto \u00e8 stata aggiornata.","There is no variations to delete.":"Non ci sono variazioni da eliminare.","There is no products to delete.":"Non ci sono prodotti da eliminare.","The product variation has been successfully created.":"La variazione del prodotto \u00e8 stata creata con successo.","The product variation has been updated.":"La variazione del prodotto \u00e8 stata aggiornata.","The provider has been created.":"Il provider \u00e8 stato creato.","The provider has been updated.":"Il provider \u00e8 stato aggiornato.","Unable to find the provider using the specified id.":"Impossibile trovare il provider utilizzando l'id specificato.","The provider has been deleted.":"Il provider \u00e8 stato eliminato.","Unable to find the provider using the specified identifier.":"Impossibile trovare il provider utilizzando l'identificatore specificato.","The provider account has been updated.":"L'account del provider \u00e8 stato aggiornato.","The procurement payment has been deducted.":"Il pagamento dell'appalto \u00e8 stato detratto.","The dashboard report has been updated.":"Il report della dashboard \u00e8 stato aggiornato.","Untracked Stock Operation":"Operazione di magazzino non tracciata","Unsupported action":"Azione non supportata","The expense has been correctly saved.":"La spesa \u00e8 stata salvata correttamente.","The report has been computed successfully.":"Il rapporto \u00e8 stato calcolato con successo.","The table has been truncated.":"La tabella \u00e8 stata troncata.","Untitled Settings Page":"Pagina delle impostazioni senza titolo","No description provided for this settings page.":"Nessuna descrizione fornita per questa pagina delle impostazioni.","The form has been successfully saved.":"Il modulo \u00e8 stato salvato con successo.","Unable to reach the host":"Impossibile raggiungere l'host","Unable to connect to the database using the credentials provided.":"Impossibile connettersi al database utilizzando le credenziali fornite.","Unable to select the database.":"Impossibile selezionare il database.","Access denied for this user.":"Accesso negato per questo utente.","The connexion with the database was successful":"La connessione con il database \u00e8 andata a buon fine","Cash":"Contanti","Bank Payment":"Pagamento bancario","NexoPOS has been successfully installed.":"NexoPOS \u00e8 stato installato con successo.","A tax cannot be his own parent.":"Una tassa non pu\u00f2 essere il suo stesso genitore.","The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".":"La gerarchia delle imposte \u00e8 limitata a 1. Una sottoimposta non deve avere il tipo di imposta impostato su \"raggruppata\".","Unable to find the requested tax using the provided identifier.":"Impossibile trovare l'imposta richiesta utilizzando l'identificatore fornito.","The tax group has been correctly saved.":"Il gruppo fiscale \u00e8 stato salvato correttamente.","The tax has been correctly created.":"La tassa \u00e8 stata creata correttamente.","The tax has been successfully deleted.":"L'imposta \u00e8 stata eliminata con successo.","The Unit Group has been created.":"Il gruppo di unit\u00e0 \u00e8 stato creato.","The unit group %s has been updated.":"Il gruppo di unit\u00e0 %s \u00e8 stato aggiornato.","Unable to find the unit group to which this unit is attached.":"Impossibile trovare il gruppo di unit\u00e0 a cui \u00e8 collegata questa unit\u00e0.","The unit has been saved.":"L'unit\u00e0 \u00e8 stata salvata.","Unable to find the Unit using the provided id.":"Impossibile trovare l'unit\u00e0 utilizzando l'ID fornito.","The unit has been updated.":"L'unit\u00e0 \u00e8 stata aggiornata.","The unit group %s has more than one base unit":"Il gruppo di unit\u00e0 %s ha pi\u00f9 di un'unit\u00e0 di base","The unit has been deleted.":"L'unit\u00e0 \u00e8 stata eliminata.","unable to find this validation class %s.":"impossibile trovare questa classe di convalida %s.","Enable Reward":"Abilita ricompensa","Will activate the reward system for the customers.":"Attiver\u00e0 il sistema di ricompensa per i clienti.","Default Customer Account":"Account cliente predefinito","Default Customer Group":"Gruppo clienti predefinito","Select to which group each new created customers are assigned to.":"Seleziona a quale gruppo sono assegnati i nuovi clienti creati.","Enable Credit & Account":"Abilita credito e account","The customers will be able to make deposit or obtain credit.":"I clienti potranno effettuare depositi o ottenere credito.","Store Name":"Nome del negozio","This is the store name.":"Questo \u00e8 il nome del negozio.","Store Address":"Indirizzo del negozio","The actual store address.":"L'effettivo indirizzo del negozio.","Store City":"Citt\u00e0 del negozio","The actual store city.":"La vera citt\u00e0 del negozio.","Store Phone":"Telefono negozio","The phone number to reach the store.":"Il numero di telefono per raggiungere il punto vendita.","Store Email":"E-mail del negozio","The actual store email. Might be used on invoice or for reports.":"L'e-mail del negozio reale. Potrebbe essere utilizzato su fattura o per report.","Store PO.Box":"Negozio PO.Box","The store mail box number.":"Il numero della casella di posta del negozio.","Store Fax":"Negozio fax","The store fax number.":"Il numero di fax del negozio.","Store Additional Information":"Memorizzare informazioni aggiuntive","Store additional information.":"Memorizza ulteriori informazioni.","Store Square Logo":"Logo quadrato del negozio","Choose what is the square logo of the store.":"Scegli qual \u00e8 il logo quadrato del negozio.","Store Rectangle Logo":"Negozio Rettangolo Logo","Choose what is the rectangle logo of the store.":"Scegli qual \u00e8 il logo rettangolare del negozio.","Define the default fallback language.":"Definire la lingua di fallback predefinita.","Currency":"Moneta","Currency Symbol":"Simbolo di valuta","This is the currency symbol.":"Questo \u00e8 il simbolo della valuta.","Currency ISO":"Valuta ISO","The international currency ISO format.":"Il formato ISO della valuta internazionale.","Currency Position":"Posizione valutaria","Before the amount":"Prima dell'importo","After the amount":"Dopo l'importo","Define where the currency should be located.":"Definisci dove deve essere posizionata la valuta.","Preferred Currency":"Valuta preferita","ISO Currency":"Valuta ISO","Symbol":"Simbolo","Determine what is the currency indicator that should be used.":"Determina qual \u00e8 l'indicatore di valuta da utilizzare.","Currency Thousand Separator":"Separatore di migliaia di valute","Currency Decimal Separator":"Separatore decimale di valuta","Define the symbol that indicate decimal number. By default \".\" is used.":"Definire il simbolo che indica il numero decimale. Per impostazione predefinita viene utilizzato \".\".","Currency Precision":"Precisione della valuta","%s numbers after the decimal":"%s numeri dopo la virgola","Date Format":"Formato data","This define how the date should be defined. The default format is \"Y-m-d\".":"Questo definisce come deve essere definita la data. Il formato predefinito \u00e8 \"Y-m-d\".","Registration":"Registrazione","Registration Open":"Iscrizioni aperte","Determine if everyone can register.":"Determina se tutti possono registrarsi.","Registration Role":"Ruolo di registrazione","Select what is the registration role.":"Seleziona qual \u00e8 il ruolo di registrazione.","Requires Validation":"Richiede convalida","Force account validation after the registration.":"Forza la convalida dell'account dopo la registrazione.","Allow Recovery":"Consenti recupero","Allow any user to recover his account.":"Consenti a qualsiasi utente di recuperare il suo account.","Receipts":"Ricevute","Receipt Template":"Modello di ricevuta","Default":"Predefinito","Choose the template that applies to receipts":"Scegli il modello che si applica alle ricevute","Receipt Logo":"Logo della ricevuta","Provide a URL to the logo.":"Fornisci un URL al logo.","Receipt Footer":"Pi\u00e8 di pagina della ricevuta","If you would like to add some disclosure at the bottom of the receipt.":"Se desideri aggiungere qualche informativa in fondo alla ricevuta.","Column A":"Colonna A","Column B":"Colonna B","Order Code Type":"Tipo di codice d'ordine","Determine how the system will generate code for each orders.":"Determina come il sistema generer\u00e0 il codice per ogni ordine.","Sequential":"Sequenziale","Random Code":"Codice casuale","Number Sequential":"Numero sequenziale","Allow Unpaid Orders":"Consenti ordini non pagati","Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".":"Eviter\u00e0 che vengano effettuati ordini incompleti. Se il credito \u00e8 consentito, questa opzione dovrebbe essere impostata su \"yes\".","Allow Partial Orders":"Consenti ordini parziali","Will prevent partially paid orders to be placed.":"Impedisce l'effettuazione di ordini parzialmente pagati.","Quotation Expiration":"Scadenza del preventivo","Quotations will get deleted after they defined they has reached.":"Le citazioni verranno eliminate dopo che sono state definite.","%s Days":"%s giorni","Features":"Caratteristiche","Show Quantity":"Mostra quantit\u00e0","Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.":"Mostrer\u00e0 il selettore della quantit\u00e0 durante la scelta di un prodotto. In caso contrario, la quantit\u00e0 predefinita \u00e8 impostata su 1.","Allow Customer Creation":"Consenti la creazione del cliente","Allow customers to be created on the POS.":"Consenti la creazione di clienti sul POS.","Quick Product":"Prodotto veloce","Allow quick product to be created from the POS.":"Consenti la creazione rapida di prodotti dal POS.","Editable Unit Price":"Prezzo unitario modificabile","Allow product unit price to be edited.":"Consenti la modifica del prezzo unitario del prodotto.","Order Types":"Tipi di ordine","Control the order type enabled.":"Controlla il tipo di ordine abilitato.","Layout":"Disposizione","Retail Layout":"Layout di vendita al dettaglio","Clothing Shop":"Negozio di vestiti","POS Layout":"Layout POS","Change the layout of the POS.":"Modificare il layout del POS.","Printing":"Stampa","Printed Document":"Documento stampato","Choose the document used for printing aster a sale.":"Scegli il documento utilizzato per la stampa dopo una vendita.","Printing Enabled For":"Stampa abilitata per","All Orders":"Tutti gli ordini","From Partially Paid Orders":"Da ordini parzialmente pagati","Only Paid Orders":"Solo ordini pagati","Determine when the printing should be enabled.":"Determinare quando abilitare la stampa.","Printing Gateway":"Gateway di stampa","Determine what is the gateway used for printing.":"Determina qual \u00e8 il gateway utilizzato per la stampa.","Enable Cash Registers":"Abilita registratori di cassa","Determine if the POS will support cash registers.":"Determina se il POS supporter\u00e0 i registratori di cassa.","Cashier Idle Counter":"Contatore inattivo del cassiere","5 Minutes":"5 minuti","10 Minutes":"10 minuti","15 Minutes":"15 minuti","20 Minutes":"20 minuti","30 Minutes":"30 minuti","Selected after how many minutes the system will set the cashier as idle.":"Selezionato dopo quanti minuti il \u200b\u200bsistema imposter\u00e0 la cassa come inattiva.","Cash Disbursement":"Pagamento in contanti","Allow cash disbursement by the cashier.":"Consentire l'esborso in contanti da parte del cassiere.","Cash Registers":"Registratori di cassa","Keyboard Shortcuts":"Tasti rapidi","Cancel Order":"Annulla Ordine","Keyboard shortcut to cancel the current order.":"Scorciatoia da tastiera per annullare l'ordine corrente.","Keyboard shortcut to hold the current order.":"Scorciatoia da tastiera per mantenere l'ordine corrente.","Keyboard shortcut to create a customer.":"Scorciatoia da tastiera per creare un cliente.","Proceed Payment":"Procedi al pagamento","Keyboard shortcut to proceed to the payment.":"Scorciatoia da tastiera per procedere al pagamento.","Open Shipping":"Spedizione aperta","Keyboard shortcut to define shipping details.":"Scorciatoia da tastiera per definire i dettagli di spedizione.","Open Note":"Apri nota","Keyboard shortcut to open the notes.":"Scorciatoia da tastiera per aprire le note.","Order Type Selector":"Selettore del tipo di ordine","Keyboard shortcut to open the order type selector.":"Scorciatoia da tastiera per aprire il selettore del tipo di ordine.","Toggle Fullscreen":"Passare a schermo intero","Keyboard shortcut to toggle fullscreen.":"Scorciatoia da tastiera per attivare lo schermo intero.","Quick Search":"Ricerca rapida","Keyboard shortcut open the quick search popup.":"La scorciatoia da tastiera apre il popup di ricerca rapida.","Amount Shortcuts":"Scorciatoie per l'importo","VAT Type":"Tipo di IVA","Determine the VAT type that should be used.":"Determinare il tipo di IVA da utilizzare.","Flat Rate":"Tasso fisso","Flexible Rate":"Tariffa Flessibile","Products Vat":"Prodotti Iva","Products & Flat Rate":"Prodotti e tariffa fissa","Products & Flexible Rate":"Prodotti e tariffa flessibile","Define the tax group that applies to the sales.":"Definire il gruppo imposte che si applica alle vendite.","Define how the tax is computed on sales.":"Definire come viene calcolata l'imposta sulle vendite.","VAT Settings":"Impostazioni IVA","Enable Email Reporting":"Abilita segnalazione e-mail","Determine if the reporting should be enabled globally.":"Determina se i rapporti devono essere abilitati a livello globale.","Supplies":"Forniture","Public Name":"Nome pubblico","Define what is the user public name. If not provided, the username is used instead.":"Definire qual \u00e8 il nome pubblico dell'utente. Se non fornito, viene utilizzato il nome utente.","Enable Workers":"Abilita i lavoratori","Test":"Test","Processing Status":"Stato di elaborazione","Refunded Products":"Prodotti rimborsati","The delivery status of the order will be changed. Please confirm your action.":"Lo stato di consegna dell'ordine verr\u00e0 modificato. Conferma la tua azione.","Order Refunds":"Rimborsi degli ordini","Unable to proceed":"Impossibile procedere","Partially paid orders are disabled.":"Gli ordini parzialmente pagati sono disabilitati.","An order is currently being processed.":"Un ordine \u00e8 attualmente in fase di elaborazione.","Refund receipt":"Ricevuta di rimborso","Refund Receipt":"Ricevuta di rimborso","Order Refund Receipt — %s":"Ricevuta di rimborso dell'ordine — %S","Not Available":"Non disponibile","Create a customer":"Crea un cliente","Credit":"Credito","Debit":"Addebito","All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.":"Tutte le entit\u00e0 collegate a questa categoria produrranno un \"credito\" o un \"debito\" nella cronologia del flusso di cassa.","Account":"Account","Provide the accounting number for this category.":"Fornire il numero di contabilit\u00e0 per questa categoria.","Accounting":"Contabilit\u00e0","Procurement Cash Flow Account":"Conto del flusso di cassa dell'approvvigionamento","Sale Cash Flow Account":"Conto flusso di cassa vendita","Sales Refunds Account":"Conto Rimborsi Vendite","Stock return for spoiled items will be attached to this account":"Il reso in magazzino per gli articoli rovinati sar\u00e0 allegato a questo account","The reason has been updated.":"Il motivo \u00e8 stato aggiornato.","You must select a customer before applying a coupon.":"Devi selezionare un cliente prima di applicare un coupon.","No coupons for the selected customer...":"Nessun coupon per il cliente selezionato...","Use Coupon":"Usa coupon","Use Customer ?":"Usa cliente?","No customer is selected. Would you like to proceed with this customer ?":"Nessun cliente selezionato. Vuoi procedere con questo cliente?","Change Customer ?":"Cambia cliente?","Would you like to assign this customer to the ongoing order ?":"Vuoi assegnare questo cliente all'ordine in corso?","Product \/ Service":"Prodotto \/ Servizio","An error has occurred while computing the product.":"Si \u00e8 verificato un errore durante il calcolo del prodotto.","Provide a unique name for the product.":"Fornire un nome univoco per il prodotto.","Define what is the sale price of the item.":"Definire qual \u00e8 il prezzo di vendita dell'articolo.","Set the quantity of the product.":"Imposta la quantit\u00e0 del prodotto.","Define what is tax type of the item.":"Definire qual \u00e8 il tipo di imposta dell'articolo.","Choose the tax group that should apply to the item.":"Scegli il gruppo imposte da applicare all'articolo.","Assign a unit to the product.":"Assegna un'unit\u00e0 al prodotto.","Some products has been added to the cart. Would youl ike to discard this order ?":"Alcuni prodotti sono stati aggiunti al carrello. Vuoi eliminare questo ordine?","Customer Accounts List":"Elenco dei conti dei clienti","Display all customer accounts.":"Visualizza tutti gli account cliente.","No customer accounts has been registered":"Nessun account cliente \u00e8 stato registrato","Add a new customer account":"Aggiungi un nuovo account cliente","Create a new customer account":"Crea un nuovo account cliente","Register a new customer account and save it.":"Registra un nuovo account cliente e salvalo.","Edit customer account":"Modifica account cliente","Modify Customer Account.":"Modifica account cliente.","Return to Customer Accounts":"Torna agli account dei clienti","This will be ignored.":"Questo verr\u00e0 ignorato.","Define the amount of the transaction":"Definire l'importo della transazione","Define what operation will occurs on the customer account.":"Definire quale operazione verr\u00e0 eseguita sul conto cliente.","Provider Procurements List":"Elenco degli appalti del fornitore","Display all provider procurements.":"Visualizza tutti gli appalti del fornitore.","No provider procurements has been registered":"Nessun approvvigionamento di fornitori \u00e8 stato registrato","Add a new provider procurement":"Aggiungi un nuovo approvvigionamento fornitore","Create a new provider procurement":"Crea un nuovo approvvigionamento fornitore","Register a new provider procurement and save it.":"Registra un nuovo approvvigionamento fornitore e salvalo.","Edit provider procurement":"Modifica approvvigionamento fornitore","Modify Provider Procurement.":"Modificare l'approvvigionamento del fornitore.","Return to Provider Procurements":"Ritorna agli appalti del fornitore","Delivered On":"Consegnato il","Items":"Elementi","Displays the customer account history for %s":"Visualizza la cronologia dell'account cliente per %s","Procurements by \"%s\"":"Appalti di \"%s\"","Crediting":"Accredito","Deducting":"Detrazione","Order Payment":"Pagamento dell'ordine","Order Refund":"Rimborso ordine","Unknown Operation":"Operazione sconosciuta","Unnamed Product":"Prodotto senza nome","Bubble":"Bolla","Ding":"Ding","Pop":"Pop","Cash Sound":"Suono di cassa","Sale Complete Sound":"Vendita Suono Completo","New Item Audio":"Nuovo elemento audio","The sound that plays when an item is added to the cart.":"Il suono che viene riprodotto quando un articolo viene aggiunto al carrello.","Howdy, {name}":"Howdy, {name}","Would you like to perform the selected bulk action on the selected entries ?":"Volete eseguire l'azione sfusa selezionata sulle voci selezionate?","The payment to be made today is less than what is expected.":"Il pagamento da apportare oggi \u00e8 inferiore a quanto previsto.","Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.":"Impossibile selezionare il cliente predefinito.Sembra che il cliente non esista pi\u00f9.Considera di cambiare il cliente predefinito sulle impostazioni.","How to change database configuration":"Come modificare la configurazione del database","Common Database Issues":"Problemi di database comuni","Setup":"Impostare","Query Exception":"Eccezione della query","The category products has been refreshed":"La categoria Prodotti \u00e8 stata aggiornata","The requested customer cannot be found.":"Il cliente richiesto non pu\u00f2 essere trovato.","Filters":"Filtri","Has Filters":"Ha filtri","N\/D":"NS","Range Starts":"Inizio gamma","Range Ends":"Fine intervallo","Search Filters":"Filtri di ricerca","Clear Filters":"Cancella filtri","Use Filters":"Usa filtri","No rewards available the selected customer...":"Nessun premio disponibile il cliente selezionato...","Unable to load the report as the timezone is not set on the settings.":"Impossibile caricare il rapporto poich\u00e9 il fuso orario non \u00e8 impostato nelle impostazioni.","There is no product to display...":"Nessun prodotto da visualizzare...","Method Not Allowed":"operazione non permessa","Documentation":"Documentazione","Module Version Mismatch":"Mancata corrispondenza della versione del modulo","Define how many time the coupon has been used.":"Definire quante volte \u00e8 stato utilizzato il coupon.","Define the maximum usage possible for this coupon.":"Definire l'utilizzo massimo possibile per questo coupon.","Restrict the orders by the creation date.":"Limita gli ordini entro la data di creazione.","Created Between":"Creato tra","Restrict the orders by the payment status.":"Limita gli ordini in base allo stato del pagamento.","Due With Payment":"dovuto con pagamento","Restrict the orders by the author.":"Limita gli ordini dell'autore.","Restrict the orders by the customer.":"Limita gli ordini del cliente.","Customer Phone":"Telefono cliente","Restrict orders using the customer phone number.":"Limita gli ordini utilizzando il numero di telefono del cliente.","Restrict the orders to the cash registers.":"Limita gli ordini ai registratori di cassa.","Low Quantity":"Quantit\u00e0 bassa","Which quantity should be assumed low.":"Quale quantit\u00e0 dovrebbe essere considerata bassa.","Stock Alert":"Avviso di magazzino","See Products":"Vedi prodotti","Provider Products List":"Elenco dei prodotti del fornitore","Display all Provider Products.":"Visualizza tutti i prodotti del fornitore.","No Provider Products has been registered":"Nessun prodotto del fornitore \u00e8 stato registrato","Add a new Provider Product":"Aggiungi un nuovo prodotto fornitore","Create a new Provider Product":"Crea un nuovo prodotto fornitore","Register a new Provider Product and save it.":"Registra un nuovo prodotto del fornitore e salvalo.","Edit Provider Product":"Modifica prodotto fornitore","Modify Provider Product.":"Modifica prodotto fornitore.","Return to Provider Products":"Ritorna ai prodotti del fornitore","Clone":"Clone","Would you like to clone this role ?":"Vuoi clonare questo ruolo?","Incompatibility Exception":"Eccezione di incompatibilit\u00e0","The requested file cannot be downloaded or has already been downloaded.":"Il file richiesto non pu\u00f2 essere scaricato o \u00e8 gi\u00e0 stato scaricato.","Low Stock Report":"Rapporto scorte basse","Low Stock Alert":"Avviso scorte in esaurimento","The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ":"Il modulo \"%s\" \u00e8 stato disabilitato poich\u00e9 la dipendenza \"%s\" non \u00e8 sulla versione minima richiesta \"%s\".","The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ":"Il modulo \"%s\" \u00e8 stato disabilitato poich\u00e9 la dipendenza \"%s\" \u00e8 su una versione oltre quella raccomandata \"%s\".","Clone of \"%s\"":"Clona di \"%s\"","The role has been cloned.":"Il ruolo \u00e8 stato clonato.","Merge Products On Receipt\/Invoice":"Unisci prodotti alla ricevuta\/fattura","All similar products will be merged to avoid a paper waste for the receipt\/invoice.":"Tutti i prodotti simili verranno accorpati per evitare spreco di carta per scontrino\/fattura.","Define whether the stock alert should be enabled for this unit.":"Definire se l'avviso stock deve essere abilitato per questa unit\u00e0.","All Refunds":"Tutti i rimborsi","No result match your query.":"Nessun risultato corrisponde alla tua richiesta.","Report Type":"Tipo di rapporto","Categories Detailed":"Categorie dettagliate","Categories Summary":"Riepilogo categorie","Allow you to choose the report type.":"Consentono di scegliere il tipo di rapporto.","Unknown":"Sconosciuto","Not Authorized":"Non autorizzato","Creating customers has been explicitly disabled from the settings.":"La creazione di clienti \u00e8 stata esplicitamente disabilitata dalle impostazioni.","Sales Discounts":"Sconti sulle vendite","Sales Taxes":"Tasse sul commercio","Birth Date":"Data di nascita","Displays the customer birth date":"Visualizza la data di nascita del cliente","Sale Value":"Valore di vendita","Purchase Value":"Valore d'acquisto","Would you like to refresh this ?":"Vuoi aggiornare questo?","You cannot delete your own account.":"Non puoi eliminare il tuo account.","Sales Progress":"Progresso delle vendite","Procurement Refreshed":"Approvvigionamento aggiornato","The procurement \"%s\" has been successfully refreshed.":"L'approvvigionamento \"%s\" \u00e8 stato aggiornato con successo.","Partially Due":"Parzialmente dovuto","No payment type has been selected on the settings. Please check your POS features and choose the supported order type":"Nessun tipo di pagamento \u00e8 stato selezionato nelle impostazioni. Controlla le caratteristiche del tuo POS e scegli il tipo di ordine supportato","Read More":"Per saperne di pi\u00f9","Wipe All":"Cancella tutto","Wipe Plus Grocery":"Wipe Plus Drogheria","Accounts List":"Elenco dei conti","Display All Accounts.":"Visualizza tutti gli account.","No Account has been registered":"Nessun account \u00e8 stato registrato","Add a new Account":"Aggiungi un nuovo account","Create a new Account":"Creare un nuovo account","Register a new Account and save it.":"Registra un nuovo Account e salvalo.","Edit Account":"Modifica account","Modify An Account.":"Modifica un account.","Return to Accounts":"Torna agli account","Accounts":"Conti","Create Account":"Crea un account","Payment Method":"Metodo di pagamento","Before submitting the payment, choose the payment type used for that order.":"Prima di inviare il pagamento, scegli il tipo di pagamento utilizzato per quell'ordine.","Select the payment type that must apply to the current order.":"Seleziona il tipo di pagamento che deve essere applicato all'ordine corrente.","Payment Type":"Modalit\u00e0 di pagamento","Remove Image":"Rimuovi immagine","This form is not completely loaded.":"Questo modulo non \u00e8 completamente caricato.","Updating":"In aggiornamento","Updating Modules":"Moduli di aggiornamento","Return":"Ritorno","Credit Limit":"Limite di credito","The request was canceled":"La richiesta \u00e8 stata annullata","Payment Receipt — %s":"Ricevuta di pagamento — %S","Payment receipt":"Ricevuta di pagamento","Current Payment":"Pagamento corrente","Total Paid":"Totale pagato","Set what should be the limit of the purchase on credit.":"Imposta quale dovrebbe essere il limite di acquisto a credito.","Provide the customer email.":"Fornisci l'e-mail del cliente.","Priority":"Priorit\u00e0","Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".":"Definire l'ordine per il pagamento. Pi\u00f9 basso \u00e8 il numero, prima verr\u00e0 visualizzato nel popup di pagamento. Deve iniziare da \"0\".","Mode":"Modalit\u00e0","Choose what mode applies to this demo.":"Scegli quale modalit\u00e0 si applica a questa demo.","Set if the sales should be created.":"Imposta se le vendite devono essere create.","Create Procurements":"Crea appalti","Will create procurements.":"Creer\u00e0 appalti.","Sales Account":"Conto vendita","Procurements Account":"Conto acquisti","Sale Refunds Account":"Conto di rimborsi di vendita","Spoiled Goods Account":"Conto merce deteriorata","Customer Crediting Account":"Conto di accredito del cliente","Customer Debiting Account":"Conto di addebito del cliente","Unable to find the requested account type using the provided id.":"Impossibile trovare il tipo di account richiesto utilizzando l'ID fornito.","You cannot delete an account type that has transaction bound.":"Non \u00e8 possibile eliminare un tipo di conto con una transazione vincolata.","The account type has been deleted.":"Il tipo di account \u00e8 stato eliminato.","The account has been created.":"L'account \u00e8 stato creato.","Customer Credit Account":"Conto di credito del cliente","Customer Debit Account":"Conto di addebito del cliente","Register Cash-In Account":"Registra un conto in contanti","Register Cash-Out Account":"Registra un conto di prelievo","Require Valid Email":"Richiedi un'e-mail valida","Will for valid unique email for every customer.":"Will per e-mail univoca valida per ogni cliente.","Choose an option":"Scegliere un'opzione","Update Instalment Date":"Aggiorna la data della rata","Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.":"Vorresti segnare quella rata come dovuta oggi? Se tuu confirm the instalment will be marked as paid.","Search for products.":"Cerca prodotti.","Toggle merging similar products.":"Attiva\/disattiva l'unione di prodotti simili.","Toggle auto focus.":"Attiva\/disattiva la messa a fuoco automatica.","Filter User":"Filtra utente","All Users":"Tutti gli utenti","No user was found for proceeding the filtering.":"Nessun utente trovato per procedere con il filtraggio.","available":"a disposizione","No coupons applies to the cart.":"Nessun coupon si applica al carrello.","Selected":"Selezionato","An error occurred while opening the order options":"Si \u00e8 verificato un errore durante l'apertura delle opzioni dell'ordine","There is no instalment defined. Please set how many instalments are allowed for this order":"Non c'\u00e8 nessuna rata definita. Si prega di impostare quante rate sono consentited for this order","Select Payment Gateway":"Seleziona Gateway di pagamento","Gateway":"Gateway","No tax is active":"Nessuna tassa \u00e8 attiva","Unable to delete a payment attached to the order.":"Impossibile eliminare un pagamento allegato all'ordine.","The discount has been set to the cart subtotal.":"Lo sconto \u00e8 stato impostato sul totale parziale del carrello.","Order Deletion":"Eliminazione dell'ordine","The current order will be deleted as no payment has been made so far.":"L'ordine corrente verr\u00e0 cancellato poich\u00e9 finora non \u00e8 stato effettuato alcun pagamento.","Void The Order":"Annulla l'ordine","Unable to void an unpaid order.":"Impossibile annullare un ordine non pagato.","Environment Details":"Dettagli sull'ambiente","Properties":"Propriet\u00e0","Extensions":"Estensioni","Configurations":"Configurazioni","Learn More":"Per saperne di pi\u00f9","Search Products...":"Cerca prodotti...","No results to show.":"Nessun risultato da mostrare.","Start by choosing a range and loading the report.":"Inizia scegliendo un intervallo e caricando il rapporto.","Invoice Date":"Data fattura","Initial Balance":"Equilibrio iniziale","New Balance":"Nuovo equilibrio","Transaction Type":"Tipo di transazione","Unchanged":"Invariato","Define what roles applies to the user":"Definire quali ruoli si applicano all'utente","Not Assigned":"Non assegnato","This value is already in use on the database.":"Questo valore \u00e8 gi\u00e0 in uso nel database.","This field should be checked.":"Questo campo dovrebbe essere controllato.","This field must be a valid URL.":"Questo campo deve essere un URL valido.","This field is not a valid email.":"Questo campo non \u00e8 un'e-mail valida.","If you would like to define a custom invoice date.":"Se desideri definire una data di fattura personalizzata.","Theme":"Tema","Dark":"Scuro","Light":"Leggero","Define what is the theme that applies to the dashboard.":"Definisci qual \u00e8 il tema che si applica alla dashboard.","Unable to delete this resource as it has %s dependency with %s item.":"Impossibile eliminare questa risorsa poich\u00e9 ha una dipendenza %s con %s elemento.","Unable to delete this resource as it has %s dependency with %s items.":"Impossibile eliminare questa risorsa perch\u00e9 ha una dipendenza %s con %s elementi.","Make a new procurement.":"Fai un nuovo appalto.","About":"Di","Details about the environment.":"Dettagli sull'ambiente.","Core Version":"Versione principale","PHP Version":"Versione PHP","Mb String Enabled":"Stringa Mb abilitata","Zip Enabled":"Zip abilitato","Curl Enabled":"Arricciatura abilitata","Math Enabled":"Matematica abilitata","XML Enabled":"XML abilitato","XDebug Enabled":"XDebug abilitato","File Upload Enabled":"Caricamento file abilitato","File Upload Size":"Dimensione caricamento file","Post Max Size":"Dimensione massima post","Max Execution Time":"Tempo massimo di esecuzione","Memory Limit":"Limite di memoria","Administrator":"Amministratore","Store Administrator":"Amministratore del negozio","Store Cashier":"Cassa del negozio","User":"Utente","Incorrect Authentication Plugin Provided.":"Plugin di autenticazione non corretto fornito.","Require Unique Phone":"Richiedi un telefono unico","Every customer should have a unique phone number.":"Ogni cliente dovrebbe avere un numero di telefono univoco.","Define the default theme.":"Definisci il tema predefinito.","Merge Similar Items":"Unisci elementi simili","Will enforce similar products to be merged from the POS.":"Imporr\u00e0 la fusione di prodotti simili dal POS.","Toggle Product Merge":"Attiva\/disattiva Unione prodotti","Will enable or disable the product merging.":"Abilita o disabilita l'unione del prodotto.","Your system is running in production mode. You probably need to build the assets":"Il sistema \u00e8 in esecuzione in modalit\u00e0 di produzione. Probabilmente hai bisogno di costruire le risorse","Your system is in development mode. Make sure to build the assets.":"Il tuo sistema \u00e8 in modalit\u00e0 di sviluppo. Assicurati di costruire le risorse.","Unassigned":"Non assegnato","Display all product stock flow.":"Visualizza tutto il flusso di stock di prodotti.","No products stock flow has been registered":"Non \u00e8 stato registrato alcun flusso di stock di prodotti","Add a new products stock flow":"Aggiungi un nuovo flusso di stock di prodotti","Create a new products stock flow":"Crea un nuovo flusso di stock di prodotti","Register a new products stock flow and save it.":"Registra un flusso di stock di nuovi prodotti e salvalo.","Edit products stock flow":"Modifica il flusso di stock dei prodotti","Modify Globalproducthistorycrud.":"Modifica Globalproducthistorycrud.","Initial Quantity":"Quantit\u00e0 iniziale","New Quantity":"Nuova quantit\u00e0","No Dashboard":"Nessun dashboard","Not Found Assets":"Risorse non trovate","Stock Flow Records":"Record di flusso azionario","The user attributes has been updated.":"Gli attributi utente sono stati aggiornati.","Laravel Version":"Versione Laravel","There is a missing dependency issue.":"C'\u00e8 un problema di dipendenza mancante.","The Action You Tried To Perform Is Not Allowed.":"L'azione che hai tentato di eseguire non \u00e8 consentita.","Unable to locate the assets.":"Impossibile individuare le risorse.","All the customers has been transferred to the new group %s.":"Tutti i clienti sono stati trasferiti al nuovo gruppo %s.","The request method is not allowed.":"Il metodo di richiesta non \u00e8 consentito.","A Database Exception Occurred.":"Si \u00e8 verificata un'eccezione al database.","An error occurred while validating the form.":"Si \u00e8 verificato un errore durante la convalida del modulo.","Enter":"accedere","Search...":"Ricerca...","Unable to hold an order which payment status has been updated already.":"Impossibile trattenere un ordine il cui stato di pagamento \u00e8 gi\u00e0 stato aggiornato.","Unable to change the price mode. This feature has been disabled.":"Impossibile modificare la modalit\u00e0 prezzo. Questa funzione \u00e8 stata disabilitata.","Enable WholeSale Price":"Abilita prezzo all'ingrosso","Would you like to switch to wholesale price ?":"Vuoi passare al prezzo all'ingrosso?","Enable Normal Price":"Abilita prezzo normale","Would you like to switch to normal price ?":"Vuoi passare al prezzo normale?","Search products...":"Cerca prodotti...","Set Sale Price":"Imposta il prezzo di vendita","Remove":"Rimuovere","No product are added to this group.":"Nessun prodotto viene aggiunto a questo gruppo.","Delete Sub item":"Elimina elemento secondario","Would you like to delete this sub item?":"Vuoi eliminare questo elemento secondario?","Unable to add a grouped product.":"Impossibile aggiungere un prodotto raggruppato.","Choose The Unit":"Scegli L'unit\u00e0","Stock Report":"Rapporto sulle scorte","Wallet Amount":"Importo del portafoglio","Wallet History":"Storia del portafoglio","Transaction":"Transazione","No History...":"Nessuna storia...","Removing":"Rimozione","Refunding":"Rimborso","Unknow":"Sconosciuto","Skip Instalments":"Salta le rate","Define the product type.":"Definisci il tipo di prodotto.","Dynamic":"Dinamico","In case the product is computed based on a percentage, define the rate here.":"Nel caso in cui il prodotto sia calcolato in percentuale, definire qui la tariffa.","Before saving this order, a minimum payment of {amount} is required":"Prima di salvare questo ordine, \u00e8 richiesto un pagamento minimo di {amount}","Initial Payment":"Pagamento iniziale","In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?":"Per procedere, \u00e8 richiesto un pagamento iniziale di {amount} per il tipo di pagamento selezionato \"{paymentType}\". Vuoi continuare ?","Search Customer...":"Cerca cliente...","Due Amount":"Importo dovuto","Wallet Balance":"Saldo del portafoglio","Total Orders":"Ordini totali","What slug should be used ? [Q] to quit.":"Quale slug dovrebbe essere usato? [Q] per uscire.","\"%s\" is a reserved class name":"\"%s\" \u00e8 un nome di classe riservato","The migration file has been successfully forgotten for the module %s.":"Il file di migrazione \u00e8 stato dimenticato con successo per il modulo %s.","%s products where updated.":"%s prodotti dove aggiornato.","Previous Amount":"Importo precedente","Next Amount":"Importo successivo","Restrict the records by the creation date.":"Limita i record entro la data di creazione.","Restrict the records by the author.":"Limitare i record dall'autore.","Grouped Product":"Prodotto Raggruppato","Groups":"Gruppi","Choose Group":"Scegli Gruppo","Grouped":"Raggruppato","An error has occurred":"C'\u00e8 stato un errore","Unable to proceed, the submitted form is not valid.":"Impossibile procedere, il modulo inviato non \u00e8 valido.","No activation is needed for this account.":"Non \u00e8 necessaria alcuna attivazione per questo account.","Invalid activation token.":"Token di attivazione non valido.","The expiration token has expired.":"Il token di scadenza \u00e8 scaduto.","Your account is not activated.":"Il tuo account non \u00e8 attivato.","Unable to change a password for a non active user.":"Impossibile modificare una password per un utente non attivo.","Unable to submit a new password for a non active user.":"Impossibile inviare una nuova password per un utente non attivo.","Unable to delete an entry that no longer exists.":"Impossibile eliminare una voce che non esiste pi\u00f9.","Provides an overview of the products stock.":"Fornisce una panoramica dello stock di prodotti.","Customers Statement":"Dichiarazione dei clienti","Display the complete customer statement.":"Visualizza l'estratto conto completo del cliente.","The recovery has been explicitly disabled.":"La recovery \u00e8 stata espressamente disabilitata.","The registration has been explicitly disabled.":"La registrazione \u00e8 stata espressamente disabilitata.","The entry has been successfully updated.":"La voce \u00e8 stata aggiornata correttamente.","A similar module has been found":"Un modulo simile \u00e8 stato trovato","A grouped product cannot be saved without any sub items.":"Un prodotto raggruppato non pu\u00f2 essere salvato senza alcun elemento secondario.","A grouped product cannot contain grouped product.":"Un prodotto raggruppato non pu\u00f2 contenere prodotti raggruppati.","The subitem has been saved.":"La voce secondaria \u00e8 stata salvata.","The %s is already taken.":"Il %s \u00e8 gi\u00e0 stato preso.","Allow Wholesale Price":"Consenti prezzo all'ingrosso","Define if the wholesale price can be selected on the POS.":"Definire se il prezzo all'ingrosso pu\u00f2 essere selezionato sul POS.","Allow Decimal Quantities":"Consenti quantit\u00e0 decimali","Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.":"Cambier\u00e0 la tastiera numerica per consentire il decimale per le quantit\u00e0. Solo per tastierino numerico \"predefinito\".","Numpad":"tastierino numerico","Advanced":"Avanzate","Will set what is the numpad used on the POS screen.":"Imposter\u00e0 qual \u00e8 il tastierino numerico utilizzato sullo schermo del POS.","Force Barcode Auto Focus":"Forza la messa a fuoco automatica del codice a barre","Will permanently enable barcode autofocus to ease using a barcode reader.":"Abilita permanentemente la messa a fuoco automatica del codice a barre per facilitare l'utilizzo di un lettore di codici a barre.","Tax Included":"Tasse incluse","Unable to proceed, more than one product is set as featured":"Impossibile procedere, pi\u00f9 di un prodotto \u00e8 impostato come in primo piano","The transaction was deleted.":"La transazione \u00e8 stata cancellata.","Database connection was successful.":"La connessione al database \u00e8 riuscita.","The products taxes were computed successfully.":"Le tasse sui prodotti sono state calcolate correttamente.","Tax Excluded":"Tasse escluse","Set Paid":"Imposta pagato","Would you like to mark this procurement as paid?":"Vorresti contrassegnare questo appalto come pagato?","Unidentified Item":"Oggetto non identificato","Non-existent Item":"Oggetto inesistente","You cannot change the status of an already paid procurement.":"Non \u00e8 possibile modificare lo stato di un appalto gi\u00e0 pagato.","The procurement payment status has been changed successfully.":"Lo stato del pagamento dell'approvvigionamento \u00e8 stato modificato correttamente.","The procurement has been marked as paid.":"L'appalto \u00e8 stato contrassegnato come pagato.","Show Price With Tax":"Mostra il prezzo con tasse","Will display price with tax for each products.":"Verr\u00e0 visualizzato il prezzo con le tasse per ogni prodotto.","Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".":"Impossibile caricare il componente \"${action.component}\". Assicurati che il componente sia registrato in \"nsExtraComponents\".","Tax Inclusive":"Tasse incluse","Apply Coupon":"Applicare il coupon","Not applicable":"Non applicabile","Normal":"Normale","Product Taxes":"Tasse sui prodotti","The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.":"L'unit\u00e0 collegata a questo prodotto \u00e8 mancante o non assegnata. Si prega di rivedere la scheda \"Unit\u00e0\" per questo prodotto.","X Days After Month Starts":"X Days After Month Starts","On Specific Day":"On Specific Day","Unknown Occurance":"Unknown Occurance","Please provide a valid value.":"Please provide a valid value.","Done":"Done","Would you like to delete \"%s\"?":"Would you like to delete \"%s\"?","Unable to find a module having as namespace \"%s\"":"Unable to find a module having as namespace \"%s\"","Api File":"Api File","Migrations":"Migrations","Determine Until When the coupon is valid.":"Determine Until When the coupon is valid.","Customer Groups":"Customer Groups","Assigned To Customer Group":"Assigned To Customer Group","Only the customers who belongs to the selected groups will be able to use the coupon.":"Only the customers who belongs to the selected groups will be able to use the coupon.","Assigned To Customers":"Assigned To Customers","Only the customers selected will be ale to use the coupon.":"Only the customers selected will be ale to use the coupon.","Unable to save the coupon as one of the selected customer no longer exists.":"Unable to save the coupon as one of the selected customer no longer exists.","Unable to save the coupon as one of the selected customer group no longer exists.":"Unable to save the coupon as one of the selected customer group no longer exists.","Unable to save the coupon as one of the customers provided no longer exists.":"Unable to save the coupon as one of the customers provided no longer exists.","Unable to save the coupon as one of the provided customer group no longer exists.":"Unable to save the coupon as one of the provided customer group no longer exists.","Coupon Order Histories List":"Coupon Order Histories List","Display all coupon order histories.":"Display all coupon order histories.","No coupon order histories has been registered":"No coupon order histories has been registered","Add a new coupon order history":"Add a new coupon order history","Create a new coupon order history":"Create a new coupon order history","Register a new coupon order history and save it.":"Register a new coupon order history and save it.","Edit coupon order history":"Edit coupon order history","Modify Coupon Order History.":"Modify Coupon Order History.","Return to Coupon Order Histories":"Return to Coupon Order Histories","Customer_coupon_id":"Customer_coupon_id","Order_id":"Order_id","Discount_value":"Discount_value","Minimum_cart_value":"Minimum_cart_value","Maximum_cart_value":"Maximum_cart_value","Limit_usage":"Limit_usage","Would you like to delete this?":"Would you like to delete this?","Usage History":"Usage History","Customer Coupon Histories List":"Customer Coupon Histories List","Display all customer coupon histories.":"Display all customer coupon histories.","No customer coupon histories has been registered":"No customer coupon histories has been registered","Add a new customer coupon history":"Add a new customer coupon history","Create a new customer coupon history":"Create a new customer coupon history","Register a new customer coupon history and save it.":"Register a new customer coupon history and save it.","Edit customer coupon history":"Edit customer coupon history","Modify Customer Coupon History.":"Modify Customer Coupon History.","Return to Customer Coupon Histories":"Return to Customer Coupon Histories","Last Name":"Last Name","Provide the customer last name":"Provide the customer last name","Provide the customer gender.":"Provide the customer gender.","Provide the billing first name.":"Provide the billing first name.","Provide the billing last name.":"Provide the billing last name.","Provide the shipping First Name.":"Provide the shipping First Name.","Provide the shipping Last Name.":"Provide the shipping Last Name.","Scheduled":"Scheduled","Set the scheduled date.":"Set the scheduled date.","Account Name":"Account Name","Provider last name if necessary.":"Provider last name if necessary.","Provide the user first name.":"Provide the user first name.","Provide the user last name.":"Provide the user last name.","Set the user gender.":"Set the user gender.","Set the user phone number.":"Set the user phone number.","Set the user PO Box.":"Set the user PO Box.","Provide the billing First Name.":"Provide the billing First Name.","Last name":"Last name","Group Name":"Group Name","Delete a user":"Delete a user","Activated":"Activated","type":"type","User Group":"User Group","Scheduled On":"Scheduled On","Biling":"Biling","API Token":"API Token","Your Account has been successfully created.":"Your Account has been successfully created.","Unable to export if there is nothing to export.":"Unable to export if there is nothing to export.","%s Coupons":"%s Coupons","%s Coupon History":"%s Coupon History","\"%s\" Record History":"\"%s\" Record History","The media name was successfully updated.":"The media name was successfully updated.","The role was successfully assigned.":"The role was successfully assigned.","The role were successfully assigned.":"The role were successfully assigned.","Unable to identifier the provided role.":"Unable to identifier the provided role.","Good Condition":"Good Condition","Cron Disabled":"Cron Disabled","Task Scheduling Disabled":"Task Scheduling Disabled","NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.":"NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.","The email \"%s\" is already used for another customer.":"The email \"%s\" is already used for another customer.","The provided coupon cannot be loaded for that customer.":"The provided coupon cannot be loaded for that customer.","The provided coupon cannot be loaded for the group assigned to the selected customer.":"The provided coupon cannot be loaded for the group assigned to the selected customer.","Unable to use the coupon %s as it has expired.":"Unable to use the coupon %s as it has expired.","Unable to use the coupon %s at this moment.":"Unable to use the coupon %s at this moment.","Small Box":"Small Box","Box":"Box","%s products were freed":"%s products were freed","Restoring cash flow from paid orders...":"Restoring cash flow from paid orders...","Restoring cash flow from refunded orders...":"Restoring cash flow from refunded orders...","%s on %s directories were deleted.":"%s on %s directories were deleted.","%s on %s files were deleted.":"%s on %s files were deleted.","First Day Of Month":"First Day Of Month","Last Day Of Month":"Last Day Of Month","Month middle Of Month":"Month middle Of Month","{day} after month starts":"{day} after month starts","{day} before month ends":"{day} before month ends","Every {day} of the month":"Every {day} of the month","Days":"Days","Make sure set a day that is likely to be executed":"Make sure set a day that is likely to be executed","Invalid Module provided.":"Invalid Module provided.","The module was \"%s\" was successfully installed.":"The module was \"%s\" was successfully installed.","The modules \"%s\" was deleted successfully.":"The modules \"%s\" was deleted successfully.","Unable to locate a module having as identifier \"%s\".":"Unable to locate a module having as identifier \"%s\".","All migration were executed.":"All migration were executed.","Unknown Product Status":"Unknown Product Status","Member Since":"Member Since","Total Customers":"Total Customers","The widgets was successfully updated.":"The widgets was successfully updated.","The token was successfully created":"The token was successfully created","The token has been successfully deleted.":"The token has been successfully deleted.","Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".":"Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".","Will display all cashiers who performs well.":"Will display all cashiers who performs well.","Will display all customers with the highest purchases.":"Will display all customers with the highest purchases.","Expense Card Widget":"Expense Card Widget","Will display a card of current and overwall expenses.":"Will display a card of current and overwall expenses.","Incomplete Sale Card Widget":"Incomplete Sale Card Widget","Will display a card of current and overall incomplete sales.":"Will display a card of current and overall incomplete sales.","Orders Chart":"Orders Chart","Will display a chart of weekly sales.":"Will display a chart of weekly sales.","Orders Summary":"Orders Summary","Will display a summary of recent sales.":"Will display a summary of recent sales.","Will display a profile widget with user stats.":"Will display a profile widget with user stats.","Sale Card Widget":"Sale Card Widget","Will display current and overall sales.":"Will display current and overall sales.","Return To Calendar":"Return To Calendar","Thr":"Thr","The left range will be invalid.":"The left range will be invalid.","The right range will be invalid.":"The right range will be invalid.","Click here to add widgets":"Click here to add widgets","Choose Widget":"Choose Widget","Select with widget you want to add to the column.":"Select with widget you want to add to the column.","Unamed Tab":"Unamed Tab","An error unexpected occured while printing.":"An error unexpected occured while printing.","and":"and","{date} ago":"{date} ago","In {date}":"In {date}","An unexpected error occured.":"An unexpected error occured.","Warning":"Warning","Change Type":"Change Type","Save Expense":"Save Expense","No configuration were choosen. Unable to proceed.":"No configuration were choosen. Unable to proceed.","Conditions":"Conditions","By proceeding the current for and all your entries will be cleared. Would you like to proceed?":"By proceeding the current for and all your entries will be cleared. Would you like to proceed?","No modules matches your search term.":"No modules matches your search term.","Press \"\/\" to search modules":"Press \"\/\" to search modules","No module has been uploaded yet.":"No module has been uploaded yet.","{module}":"{module}","Would you like to delete \"{module}\"? All data created by the module might also be deleted.":"Would you like to delete \"{module}\"? All data created by the module might also be deleted.","Search Medias":"Search Medias","Bulk Select":"Bulk Select","Press "\/" to search permissions":"Press "\/" to search permissions","SKU, Barcode, Name":"SKU, Barcode, Name","About Token":"About Token","Save Token":"Save Token","Generated Tokens":"Generated Tokens","Created":"Created","Last Use":"Last Use","Never":"Never","Expires":"Expires","Revoke":"Revoke","Token Name":"Token Name","This will be used to identifier the token.":"This will be used to identifier the token.","Unable to proceed, the form is not valid.":"Unable to proceed, the form is not valid.","An unexpected error occured":"An unexpected error occured","An Error Has Occured":"An Error Has Occured","Febuary":"Febuary","Configure":"Configure","Unable to add the product":"Unable to add the product","No result to result match the search value provided.":"No result to result match the search value provided.","This QR code is provided to ease authentication on external applications.":"This QR code is provided to ease authentication on external applications.","Copy And Close":"Copy And Close","An error has occured":"An error has occured","Recents Orders":"Recents Orders","Unamed Page":"Unamed Page","Assignation":"Assignation","Incoming Conversion":"Incoming Conversion","Outgoing Conversion":"Outgoing Conversion","Unknown Action":"Unknown Action","Direct Transaction":"Direct Transaction","Recurring Transaction":"Recurring Transaction","Entity Transaction":"Entity Transaction","Scheduled Transaction":"Scheduled Transaction","Unknown Type (%s)":"Unknown Type (%s)","What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.":"What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.","What is the full model name. eg: App\\Models\\Order ? [Q] to quit.":"What is the full model name. eg: App\\Models\\Order ? [Q] to quit.","What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.":"What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.","Unsupported argument provided: \"%s\"":"Unsupported argument provided: \"%s\"","The authorization token can\\'t be changed manually.":"The authorization token can\\'t be changed manually.","Translation process is complete for the module %s !":"Translation process is complete for the module %s !","%s migration(s) has been deleted.":"%s migration(s) has been deleted.","The command has been created for the module \"%s\"!":"The command has been created for the module \"%s\"!","The controller has been created for the module \"%s\"!":"The controller has been created for the module \"%s\"!","The event has been created at the following path \"%s\"!":"The event has been created at the following path \"%s\"!","The listener has been created on the path \"%s\"!":"The listener has been created on the path \"%s\"!","A request with the same name has been found !":"A request with the same name has been found !","Unable to find a module having the identifier \"%s\".":"Unable to find a module having the identifier \"%s\".","Unsupported reset mode.":"Unsupported reset mode.","You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.":"You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.","Unable to find a module having \"%s\" as namespace.":"Unable to find a module having \"%s\" as namespace.","A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.":"A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.","A new form class was created at the path \"%s\"":"A new form class was created at the path \"%s\"","Unable to proceed, looks like the database can\\'t be used.":"Unable to proceed, looks like the database can\\'t be used.","In which language would you like to install NexoPOS ?":"In which language would you like to install NexoPOS ?","You must define the language of installation.":"You must define the language of installation.","The value above which the current coupon can\\'t apply.":"The value above which the current coupon can\\'t apply.","Unable to save the coupon product as this product doens\\'t exists.":"Unable to save the coupon product as this product doens\\'t exists.","Unable to save the coupon category as this category doens\\'t exists.":"Unable to save the coupon category as this category doens\\'t exists.","Unable to save the coupon as this category doens\\'t exists.":"Unable to save the coupon as this category doens\\'t exists.","You\\re not allowed to do that.":"You\\re not allowed to do that.","Crediting (Add)":"Crediting (Add)","Refund (Add)":"Refund (Add)","Deducting (Remove)":"Deducting (Remove)","Payment (Remove)":"Payment (Remove)","The assigned default customer group doesn\\'t exist or is not defined.":"The assigned default customer group doesn\\'t exist or is not defined.","Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0":"Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0","You\\'re not allowed to do this operation":"You\\'re not allowed to do this operation","If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.":"If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.","Convert Unit":"Convert Unit","The unit that is selected for convertion by default.":"The unit that is selected for convertion by default.","COGS":"COGS","Used to define the Cost of Goods Sold.":"Used to define the Cost of Goods Sold.","Visible":"Visible","Define whether the unit is available for sale.":"Define whether the unit is available for sale.","Product unique name. If it\\' variation, it should be relevant for that variation":"Product unique name. If it\\' variation, it should be relevant for that variation","The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.":"The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.","The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.":"The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.","Auto COGS":"Auto COGS","Unknown Type: %s":"Unknown Type: %s","Shortage":"Shortage","Overage":"Overage","Transactions List":"Transactions List","Display all transactions.":"Display all transactions.","No transactions has been registered":"No transactions has been registered","Add a new transaction":"Add a new transaction","Create a new transaction":"Create a new transaction","Register a new transaction and save it.":"Register a new transaction and save it.","Edit transaction":"Edit transaction","Modify Transaction.":"Modify Transaction.","Return to Transactions":"Return to Transactions","determine if the transaction is effective or not. Work for recurring and not recurring transactions.":"determine if the transaction is effective or not. Work for recurring and not recurring transactions.","Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.":"Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.","Transaction Account":"Transaction Account","Assign the transaction to an account430":"Assign the transaction to an account430","Is the value or the cost of the transaction.":"Is the value or the cost of the transaction.","If set to Yes, the transaction will trigger on defined occurrence.":"If set to Yes, the transaction will trigger on defined occurrence.","Define how often this transaction occurs":"Define how often this transaction occurs","Define what is the type of the transactions.":"Define what is the type of the transactions.","Trigger":"Trigger","Would you like to trigger this expense now?":"Would you like to trigger this expense now?","Transactions History List":"Transactions History List","Display all transaction history.":"Display all transaction history.","No transaction history has been registered":"No transaction history has been registered","Add a new transaction history":"Add a new transaction history","Create a new transaction history":"Create a new transaction history","Register a new transaction history and save it.":"Register a new transaction history and save it.","Edit transaction history":"Edit transaction history","Modify Transactions history.":"Modify Transactions history.","Return to Transactions History":"Return to Transactions History","Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.":"Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.","Set the limit that can\\'t be exceeded by the user.":"Set the limit that can\\'t be exceeded by the user.","Oops, We\\'re Sorry!!!":"Oops, We\\'re Sorry!!!","Class: %s":"Class: %s","There\\'s is mismatch with the core version.":"There\\'s is mismatch with the core version.","You\\'re not authenticated.":"You\\'re not authenticated.","An error occured while performing your request.":"An error occured while performing your request.","A mismatch has occured between a module and it\\'s dependency.":"A mismatch has occured between a module and it\\'s dependency.","You\\'re not allowed to see that page.":"You\\'re not allowed to see that page.","Post Too Large":"Post Too Large","The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini":"The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini","This field does\\'nt have a valid value.":"This field does\\'nt have a valid value.","Describe the direct transaction.":"Describe the direct transaction.","If set to yes, the transaction will take effect immediately and be saved on the history.":"If set to yes, the transaction will take effect immediately and be saved on the history.","Assign the transaction to an account.":"Assign the transaction to an account.","set the value of the transaction.":"set the value of the transaction.","Further details on the transaction.":"Further details on the transaction.","Describe the direct transactions.":"Describe the direct transactions.","set the value of the transactions.":"set the value of the transactions.","The transactions will be multipled by the number of user having that role.":"The transactions will be multipled by the number of user having that role.","Create Sales (needs Procurements)":"Create Sales (needs Procurements)","Set when the transaction should be executed.":"Set when the transaction should be executed.","The addresses were successfully updated.":"The addresses were successfully updated.","Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.":"Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.","The register doesn\\'t have an history.":"The register doesn\\'t have an history.","Unable to check a register session history if it\\'s closed.":"Unable to check a register session history if it\\'s closed.","Register History For : %s":"Register History For : %s","Can\\'t delete a category having sub categories linked to it.":"Can\\'t delete a category having sub categories linked to it.","Unable to proceed. The request doesn\\'t provide enough data which could be handled":"Unable to proceed. The request doesn\\'t provide enough data which could be handled","Unable to load the CRUD resource : %s.":"Unable to load the CRUD resource : %s.","Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods":"Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods","The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.":"The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.","The crud columns exceed the maximum column that can be exported (27)":"The crud columns exceed the maximum column that can be exported (27)","This link has expired.":"This link has expired.","Account History : %s":"Account History : %s","Welcome — %s":"Welcome — %s","Upload and manage medias (photos).":"Upload and manage medias (photos).","The product which id is %s doesnt\\'t belong to the procurement which id is %s":"The product which id is %s doesnt\\'t belong to the procurement which id is %s","The refresh process has started. You\\'ll get informed once it\\'s complete.":"The refresh process has started. You\\'ll get informed once it\\'s complete.","The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".":"The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".","Stock History For %s":"Stock History For %s","Set":"Set","The unit is not set for the product \"%s\".":"The unit is not set for the product \"%s\".","The operation will cause a negative stock for the product \"%s\" (%s).":"The operation will cause a negative stock for the product \"%s\" (%s).","The adjustment quantity can\\'t be negative for the product \"%s\" (%s)":"The adjustment quantity can\\'t be negative for the product \"%s\" (%s)","%s\\'s Products":"%s\\'s Products","Transactions Report":"Transactions Report","Combined Report":"Combined Report","Provides a combined report for every transactions on products.":"Provides a combined report for every transactions on products.","Unable to initiallize the settings page. The identifier \"' . $identifier . '":"Unable to initiallize the settings page. The identifier \"' . $identifier . '","Shows all histories generated by the transaction.":"Shows all histories generated by the transaction.","Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.":"Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.","Create New Transaction":"Create New Transaction","Set direct, scheduled transactions.":"Set direct, scheduled transactions.","Update Transaction":"Update Transaction","The provided data aren\\'t valid":"The provided data aren\\'t valid","Welcome — NexoPOS":"Welcome — NexoPOS","You\\'re not allowed to see this page.":"You\\'re not allowed to see this page.","Your don\\'t have enough permission to perform this action.":"Your don\\'t have enough permission to perform this action.","You don\\'t have the necessary role to see this page.":"You don\\'t have the necessary role to see this page.","%s order(s) has recently been deleted as they has expired.":"%s order(s) has recently been deleted as they has expired.","%s product(s) has low stock. Reorder those product(s) before it get exhausted.":"%s product(s) has low stock. Reorder those product(s) before it get exhausted.","Scheduled Transactions":"Scheduled Transactions","the transaction \"%s\" was executed as scheduled on %s.":"the transaction \"%s\" was executed as scheduled on %s.","Workers Aren\\'t Running":"Workers Aren\\'t Running","The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.":"The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.","Unable to remove the permissions \"%s\". It doesn\\'t exists.":"Unable to remove the permissions \"%s\". It doesn\\'t exists.","An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A":"An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A","Unable to open \"%s\" *, as it\\'s not closed.":"Unable to open \"%s\" *, as it\\'s not closed.","Unable to open \"%s\" *, as it\\'s not opened.":"Unable to open \"%s\" *, as it\\'s not opened.","Unable to cashing on \"%s\" *, as it\\'s not opened.":"Unable to cashing on \"%s\" *, as it\\'s not opened.","Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.":"Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.","Unable to cashout on \"%s":"Unable to cashout on \"%s","Symbolic Links Missing":"Symbolic Links Missing","The Symbolic Links to the public directory is missing. Your medias might be broken and not display.":"The Symbolic Links to the public directory is missing. Your medias might be broken and not display.","Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.":"Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.","The requested module %s cannot be found.":"The requested module %s cannot be found.","The manifest.json can\\'t be located inside the module %s on the path: %s":"The manifest.json can\\'t be located inside the module %s on the path: %s","the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.":"the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.","Sorting is explicitely disabled for the column \"%s\".":"Sorting is explicitely disabled for the column \"%s\".","Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s":"Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s","Unable to find the customer using the provided id %s.":"Unable to find the customer using the provided id %s.","Not enough credits on the customer account. Requested : %s, Remaining: %s.":"Not enough credits on the customer account. Requested : %s, Remaining: %s.","The customer account doesn\\'t have enough funds to proceed.":"The customer account doesn\\'t have enough funds to proceed.","Unable to find a reference to the attached coupon : %s":"Unable to find a reference to the attached coupon : %s","You\\'re not allowed to use this coupon as it\\'s no longer active":"You\\'re not allowed to use this coupon as it\\'s no longer active","You\\'re not allowed to use this coupon it has reached the maximum usage allowed.":"You\\'re not allowed to use this coupon it has reached the maximum usage allowed.","Terminal A":"Terminal A","Terminal B":"Terminal B","%s link were deleted":"%s link were deleted","Unable to execute the following class callback string : %s":"Unable to execute the following class callback string : %s","%s — %s":"%s — %s","Transactions":"Transactions","Create Transaction":"Create Transaction","Stock History":"Stock History","Invoices":"Invoices","Failed to parse the configuration file on the following path \"%s\"":"Failed to parse the configuration file on the following path \"%s\"","No config.xml has been found on the directory : %s. This folder is ignored":"No config.xml has been found on the directory : %s. This folder is ignored","The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ":"The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ","Unable to upload this module as it\\'s older than the version installed":"Unable to upload this module as it\\'s older than the version installed","The migration file doens\\'t have a valid class name. Expected class : %s":"The migration file doens\\'t have a valid class name. Expected class : %s","Unable to locate the following file : %s":"Unable to locate the following file : %s","The migration file doens\\'t have a valid method name. Expected method : %s":"The migration file doens\\'t have a valid method name. Expected method : %s","The module %s cannot be enabled as his dependency (%s) is missing or not enabled.":"The module %s cannot be enabled as his dependency (%s) is missing or not enabled.","The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.":"The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.","An Error Occurred \"%s\": %s":"An Error Occurred \"%s\": %s","The order has been updated":"The order has been updated","The minimal payment of %s has\\'nt been provided.":"The minimal payment of %s has\\'nt been provided.","Unable to proceed as the order is already paid.":"Unable to proceed as the order is already paid.","The customer account funds are\\'nt enough to process the payment.":"The customer account funds are\\'nt enough to process the payment.","Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.","Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.","By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.":"By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.","You\\'re not allowed to make payments.":"You\\'re not allowed to make payments.","Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s":"Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s","Unknown Status (%s)":"Unknown Status (%s)","%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.":"%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.","Unable to find a reference of the provided coupon : %s":"Unable to find a reference of the provided coupon : %s","The procurement has been deleted. %s included stock record(s) has been deleted as well.":"The procurement has been deleted. %s included stock record(s) has been deleted as well.","Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.":"Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.","Unable to find the product using the provided id \"%s\"":"Unable to find the product using the provided id \"%s\"","Unable to procure the product \"%s\" as the stock management is disabled.":"Unable to procure the product \"%s\" as the stock management is disabled.","Unable to procure the product \"%s\" as it is a grouped product.":"Unable to procure the product \"%s\" as it is a grouped product.","The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item":"The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item","%s procurement(s) has recently been automatically procured.":"%s procurement(s) has recently been automatically procured.","The requested category doesn\\'t exists":"The requested category doesn\\'t exists","The category to which the product is attached doesn\\'t exists or has been deleted":"The category to which the product is attached doesn\\'t exists or has been deleted","Unable to create a product with an unknow type : %s":"Unable to create a product with an unknow type : %s","A variation within the product has a barcode which is already in use : %s.":"A variation within the product has a barcode which is already in use : %s.","A variation within the product has a SKU which is already in use : %s":"A variation within the product has a SKU which is already in use : %s","Unable to edit a product with an unknown type : %s":"Unable to edit a product with an unknown type : %s","The requested sub item doesn\\'t exists.":"The requested sub item doesn\\'t exists.","One of the provided product variation doesn\\'t include an identifier.":"One of the provided product variation doesn\\'t include an identifier.","The product\\'s unit quantity has been updated.":"The product\\'s unit quantity has been updated.","Unable to reset this variable product \"%s":"Unable to reset this variable product \"%s","Adjusting grouped product inventory must result of a create, update, delete sale operation.":"Adjusting grouped product inventory must result of a create, update, delete sale operation.","Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).":"Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).","Unsupported stock action \"%s\"":"Unsupported stock action \"%s\"","%s product(s) has been deleted.":"%s product(s) has been deleted.","%s products(s) has been deleted.":"%s products(s) has been deleted.","Unable to find the product, as the argument \"%s\" which value is \"%s":"Unable to find the product, as the argument \"%s\" which value is \"%s","You cannot convert unit on a product having stock management disabled.":"You cannot convert unit on a product having stock management disabled.","The source and the destination unit can\\'t be the same. What are you trying to do ?":"The source and the destination unit can\\'t be the same. What are you trying to do ?","There is no source unit quantity having the name \"%s\" for the item %s":"There is no source unit quantity having the name \"%s\" for the item %s","There is no destination unit quantity having the name %s for the item %s":"There is no destination unit quantity having the name %s for the item %s","The source unit and the destination unit doens\\'t belong to the same unit group.":"The source unit and the destination unit doens\\'t belong to the same unit group.","The group %s has no base unit defined":"The group %s has no base unit defined","The conversion of %s(%s) to %s(%s) was successful":"The conversion of %s(%s) to %s(%s) was successful","The product has been deleted.":"The product has been deleted.","An error occurred: %s.":"An error occurred: %s.","A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.":"A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.","Today\\'s Orders":"Today\\'s Orders","Today\\'s Sales":"Today\\'s Sales","Today\\'s Refunds":"Today\\'s Refunds","Today\\'s Customers":"Today\\'s Customers","The report will be generated. Try loading the report within few minutes.":"The report will be generated. Try loading the report within few minutes.","The database has been wiped out.":"The database has been wiped out.","No custom handler for the reset \"' . $mode . '\"":"No custom handler for the reset \"' . $mode . '\"","Unable to proceed. The parent tax doesn\\'t exists.":"Unable to proceed. The parent tax doesn\\'t exists.","A simple tax must not be assigned to a parent tax with the type \"simple":"A simple tax must not be assigned to a parent tax with the type \"simple","Created via tests":"Created via tests","The transaction has been successfully saved.":"The transaction has been successfully saved.","The transaction has been successfully updated.":"The transaction has been successfully updated.","Unable to find the transaction using the provided identifier.":"Unable to find the transaction using the provided identifier.","Unable to find the requested transaction using the provided id.":"Unable to find the requested transaction using the provided id.","The transction has been correctly deleted.":"The transction has been correctly deleted.","You cannot delete an account which has transactions bound.":"You cannot delete an account which has transactions bound.","The transaction account has been deleted.":"The transaction account has been deleted.","Unable to find the transaction account using the provided ID.":"Unable to find the transaction account using the provided ID.","The transaction account has been updated.":"The transaction account has been updated.","This transaction type can\\'t be triggered.":"This transaction type can\\'t be triggered.","The transaction has been successfully triggered.":"The transaction has been successfully triggered.","The transaction \"%s\" has been processed on day \"%s\".":"The transaction \"%s\" has been processed on day \"%s\".","The transaction \"%s\" has already been processed.":"The transaction \"%s\" has already been processed.","The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.":"The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.","The process has been correctly executed and all transactions has been processed.":"The process has been correctly executed and all transactions has been processed.","The process has been executed with some failures. %s\/%s process(es) has successed.":"The process has been executed with some failures. %s\/%s process(es) has successed.","Procurement : %s":"Procurement : %s","Procurement Liability : %s":"Procurement Liability : %s","Refunding : %s":"Refunding : %s","Spoiled Good : %s":"Spoiled Good : %s","Sale : %s":"Sale : %s","Liabilities Account":"Liabilities Account","Not found account type: %s":"Not found account type: %s","Refund : %s":"Refund : %s","Customer Account Crediting : %s":"Customer Account Crediting : %s","Customer Account Purchase : %s":"Customer Account Purchase : %s","Customer Account Deducting : %s":"Customer Account Deducting : %s","Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.":"Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.","The unit group %s doesn\\'t have a base unit":"The unit group %s doesn\\'t have a base unit","The system role \"Users\" can be retrieved.":"The system role \"Users\" can be retrieved.","The default role that must be assigned to new users cannot be retrieved.":"The default role that must be assigned to new users cannot be retrieved.","%s Second(s)":"%s Second(s)","Configure the accounting feature":"Configure the accounting feature","Define the symbol that indicate thousand. By default ":"Define the symbol that indicate thousand. By default ","Date Time Format":"Date Time Format","This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".":"This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".","Date TimeZone":"Date TimeZone","Determine the default timezone of the store. Current Time: %s":"Determine the default timezone of the store. Current Time: %s","Configure how invoice and receipts are used.":"Configure how invoice and receipts are used.","configure settings that applies to orders.":"configure settings that applies to orders.","Report Settings":"Report Settings","Configure the settings":"Configure the settings","Wipes and Reset the database.":"Wipes and Reset the database.","Supply Delivery":"Supply Delivery","Configure the delivery feature.":"Configure the delivery feature.","Configure how background operations works.":"Configure how background operations works.","Every procurement will be added to the selected transaction account":"Every procurement will be added to the selected transaction account","Every sales will be added to the selected transaction account":"Every sales will be added to the selected transaction account","Customer Credit Account (crediting)":"Customer Credit Account (crediting)","Every customer credit will be added to the selected transaction account":"Every customer credit will be added to the selected transaction account","Customer Credit Account (debitting)":"Customer Credit Account (debitting)","Every customer credit removed will be added to the selected transaction account":"Every customer credit removed will be added to the selected transaction account","Sales refunds will be attached to this transaction account":"Sales refunds will be attached to this transaction account","Stock Return Account (Spoiled Items)":"Stock Return Account (Spoiled Items)","Disbursement (cash register)":"Disbursement (cash register)","Transaction account for all cash disbursement.":"Transaction account for all cash disbursement.","Liabilities":"Liabilities","Transaction account for all liabilities.":"Transaction account for all liabilities.","You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.":"You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.","Show Tax Breakdown":"Show Tax Breakdown","Will display the tax breakdown on the receipt\/invoice.":"Will display the tax breakdown on the receipt\/invoice.","Available tags : ":"Available tags : ","{store_name}: displays the store name.":"{store_name}: displays the store name.","{store_email}: displays the store email.":"{store_email}: displays the store email.","{store_phone}: displays the store phone number.":"{store_phone}: displays the store phone number.","{cashier_name}: displays the cashier name.":"{cashier_name}: displays the cashier name.","{cashier_id}: displays the cashier id.":"{cashier_id}: displays the cashier id.","{order_code}: displays the order code.":"{order_code}: displays the order code.","{order_date}: displays the order date.":"{order_date}: displays the order date.","{order_type}: displays the order type.":"{order_type}: displays the order type.","{customer_name}: displays the customer name.":"{customer_name}: displays the customer name.","{customer_email}: displays the customer email.":"{customer_email}: displays the customer email.","{shipping_first_name}: displays the shipping first name.":"{shipping_first_name}: displays the shipping first name.","{shipping_last_name}: displays the shipping last name.":"{shipping_last_name}: displays the shipping last name.","{shipping_phone}: displays the shipping phone.":"{shipping_phone}: displays the shipping phone.","{shipping_address_1}: displays the shipping address_1.":"{shipping_address_1}: displays the shipping address_1.","{shipping_address_2}: displays the shipping address_2.":"{shipping_address_2}: displays the shipping address_2.","{shipping_country}: displays the shipping country.":"{shipping_country}: displays the shipping country.","{shipping_city}: displays the shipping city.":"{shipping_city}: displays the shipping city.","{shipping_pobox}: displays the shipping pobox.":"{shipping_pobox}: displays the shipping pobox.","{shipping_company}: displays the shipping company.":"{shipping_company}: displays the shipping company.","{shipping_email}: displays the shipping email.":"{shipping_email}: displays the shipping email.","{billing_first_name}: displays the billing first name.":"{billing_first_name}: displays the billing first name.","{billing_last_name}: displays the billing last name.":"{billing_last_name}: displays the billing last name.","{billing_phone}: displays the billing phone.":"{billing_phone}: displays the billing phone.","{billing_address_1}: displays the billing address_1.":"{billing_address_1}: displays the billing address_1.","{billing_address_2}: displays the billing address_2.":"{billing_address_2}: displays the billing address_2.","{billing_country}: displays the billing country.":"{billing_country}: displays the billing country.","{billing_city}: displays the billing city.":"{billing_city}: displays the billing city.","{billing_pobox}: displays the billing pobox.":"{billing_pobox}: displays the billing pobox.","{billing_company}: displays the billing company.":"{billing_company}: displays the billing company.","{billing_email}: displays the billing email.":"{billing_email}: displays the billing email.","Available tags :":"Available tags :","Quick Product Default Unit":"Quick Product Default Unit","Set what unit is assigned by default to all quick product.":"Set what unit is assigned by default to all quick product.","Hide Exhausted Products":"Hide Exhausted Products","Will hide exhausted products from selection on the POS.":"Will hide exhausted products from selection on the POS.","Hide Empty Category":"Hide Empty Category","Category with no or exhausted products will be hidden from selection.":"Category with no or exhausted products will be hidden from selection.","Default Printing (web)":"Default Printing (web)","The amount numbers shortcuts separated with a \"|\".":"The amount numbers shortcuts separated with a \"|\".","No submit URL was provided":"No submit URL was provided","Sorting is explicitely disabled on this column":"Sorting is explicitely disabled on this column","An unpexpected error occured while using the widget.":"An unpexpected error occured while using the widget.","This field must be similar to \"{other}\"\"":"This field must be similar to \"{other}\"\"","This field must have at least \"{length}\" characters\"":"This field must have at least \"{length}\" characters\"","This field must have at most \"{length}\" characters\"":"This field must have at most \"{length}\" characters\"","This field must be different from \"{other}\"\"":"This field must be different from \"{other}\"\"","Search result":"Search result","Choose...":"Choose...","The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.":"The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.","+{count} other":"+{count} other","The selected print gateway doesn't support this type of printing.":"The selected print gateway doesn't support this type of printing.","millisecond| second| minute| hour| day| week| month| year| decade| century| millennium":"millisecond| second| minute| hour| day| week| month| year| decade| century| millennium","milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia":"milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia","An error occured":"An error occured","You\\'re about to delete selected resources. Would you like to proceed?":"You\\'re about to delete selected resources. Would you like to proceed?","See Error":"See Error","Your uploaded files will displays here.":"Your uploaded files will displays here.","Nothing to care about !":"Nothing to care about !","Would you like to bulk edit a system role ?":"Would you like to bulk edit a system role ?","Total :":"Total :","Remaining :":"Remaining :","Instalments:":"Instalments:","This instalment doesn\\'t have any payment attached.":"This instalment doesn\\'t have any payment attached.","You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?":"You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?","An error has occured while seleting the payment gateway.":"An error has occured while seleting the payment gateway.","You're not allowed to add a discount on the product.":"You're not allowed to add a discount on the product.","You're not allowed to add a discount on the cart.":"You're not allowed to add a discount on the cart.","Cash Register : {register}":"Cash Register : {register}","The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?":"The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?","You don't have the right to edit the purchase price.":"You don't have the right to edit the purchase price.","Dynamic product can\\'t have their price updated.":"Dynamic product can\\'t have their price updated.","You\\'re not allowed to edit the order settings.":"You\\'re not allowed to edit the order settings.","Looks like there is either no products and no categories. How about creating those first to get started ?":"Looks like there is either no products and no categories. How about creating those first to get started ?","Create Categories":"Create Categories","You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?":"You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?","An unexpected error has occured while loading the form. Please check the log or contact the support.":"An unexpected error has occured while loading the form. Please check the log or contact the support.","We were not able to load the units. Make sure there are units attached on the unit group selected.":"We were not able to load the units. Make sure there are units attached on the unit group selected.","The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?":"The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?","There shoulnd\\'t be more option than there are units.":"There shoulnd\\'t be more option than there are units.","Either Selling or Purchase unit isn\\'t defined. Unable to proceed.":"Either Selling or Purchase unit isn\\'t defined. Unable to proceed.","Select the procured unit first before selecting the conversion unit.":"Select the procured unit first before selecting the conversion unit.","Convert to unit":"Convert to unit","An unexpected error has occured":"An unexpected error has occured","Unable to add product which doesn\\'t unit quantities defined.":"Unable to add product which doesn\\'t unit quantities defined.","{product}: Purchase Unit":"{product}: Purchase Unit","The product will be procured on that unit.":"The product will be procured on that unit.","Unkown Unit":"Unkown Unit","Choose Tax":"Choose Tax","The tax will be assigned to the procured product.":"The tax will be assigned to the procured product.","Show Details":"Show Details","Hide Details":"Hide Details","Important Notes":"Important Notes","Stock Management Products.":"Stock Management Products.","Doesn\\'t work with Grouped Product.":"Doesn\\'t work with Grouped Product.","Convert":"Convert","Looks like no valid products matched the searched term.":"Looks like no valid products matched the searched term.","This product doesn't have any stock to adjust.":"This product doesn't have any stock to adjust.","Select Unit":"Select Unit","Select the unit that you want to adjust the stock with.":"Select the unit that you want to adjust the stock with.","A similar product with the same unit already exists.":"A similar product with the same unit already exists.","Select Procurement":"Select Procurement","Select the procurement that you want to adjust the stock with.":"Select the procurement that you want to adjust the stock with.","Select Action":"Select Action","Select the action that you want to perform on the stock.":"Select the action that you want to perform on the stock.","Would you like to remove the selected products from the table ?":"Would you like to remove the selected products from the table ?","Unit:":"Unit:","Operation:":"Operation:","Procurement:":"Procurement:","Reason:":"Reason:","Provided":"Provided","Not Provided":"Not Provided","Remove Selected":"Remove Selected","Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.":"Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.","You haven\\'t yet generated any token for your account. Create one to get started.":"You haven\\'t yet generated any token for your account. Create one to get started.","You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?":"You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?","Date Range : {date1} - {date2}":"Date Range : {date1} - {date2}","Document : Best Products":"Document : Best Products","By : {user}":"By : {user}","Range : {date1} — {date2}":"Range : {date1} — {date2}","Document : Sale By Payment":"Document : Sale By Payment","Document : Customer Statement":"Document : Customer Statement","Customer : {selectedCustomerName}":"Customer : {selectedCustomerName}","All Categories":"All Categories","All Units":"All Units","Date : {date}":"Date : {date}","Document : {reportTypeName}":"Document : {reportTypeName}","Threshold":"Threshold","Select Units":"Select Units","An error has occured while loading the units.":"An error has occured while loading the units.","An error has occured while loading the categories.":"An error has occured while loading the categories.","Document : Payment Type":"Document : Payment Type","Document : Profit Report":"Document : Profit Report","Filter by Category":"Filter by Category","Filter by Units":"Filter by Units","An error has occured while loading the categories":"An error has occured while loading the categories","An error has occured while loading the units":"An error has occured while loading the units","By Type":"By Type","By User":"By User","By Category":"By Category","All Category":"All Category","Document : Sale Report":"Document : Sale Report","Filter By Category":"Filter By Category","Allow you to choose the category.":"Allow you to choose the category.","No category was found for proceeding the filtering.":"No category was found for proceeding the filtering.","Document : Sold Stock Report":"Document : Sold Stock Report","Filter by Unit":"Filter by Unit","Limit Results By Categories":"Limit Results By Categories","Limit Results By Units":"Limit Results By Units","Generate Report":"Generate Report","Document : Combined Products History":"Document : Combined Products History","Ini. Qty":"Ini. Qty","Added Quantity":"Added Quantity","Add. Qty":"Add. Qty","Sold Quantity":"Sold Quantity","Sold Qty":"Sold Qty","Defective Quantity":"Defective Quantity","Defec. Qty":"Defec. Qty","Final Quantity":"Final Quantity","Final Qty":"Final Qty","No data available":"No data available","Document : Yearly Report":"Document : Yearly Report","The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.":"The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.","Unable to edit this transaction":"Unable to edit this transaction","This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.":"This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.","Save Transaction":"Save Transaction","While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.":"While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.","The transaction is about to be saved. Would you like to confirm your action ?":"The transaction is about to be saved. Would you like to confirm your action ?","Unable to load the transaction":"Unable to load the transaction","You cannot edit this transaction if NexoPOS cannot perform background requests.":"You cannot edit this transaction if NexoPOS cannot perform background requests.","MySQL is selected as database driver":"MySQL is selected as database driver","Please provide the credentials to ensure NexoPOS can connect to the database.":"Please provide the credentials to ensure NexoPOS can connect to the database.","Sqlite is selected as database driver":"Sqlite is selected as database driver","Make sure Sqlite module is available for PHP. Your database will be located on the database directory.":"Make sure Sqlite module is available for PHP. Your database will be located on the database directory.","Checking database connectivity...":"Checking database connectivity...","Driver":"Driver","Set the database driver":"Set the database driver","Hostname":"Hostname","Provide the database hostname":"Provide the database hostname","Username required to connect to the database.":"Username required to connect to the database.","The username password required to connect.":"The username password required to connect.","Database Name":"Database Name","Provide the database name. Leave empty to use default file for SQLite Driver.":"Provide the database name. Leave empty to use default file for SQLite Driver.","Database Prefix":"Database Prefix","Provide the database prefix.":"Provide the database prefix.","Port":"Port","Provide the hostname port.":"Provide the hostname port.","NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.":"NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.","Install":"Install","Application":"Application","That is the application name.":"That is the application name.","Provide the administrator username.":"Provide the administrator username.","Provide the administrator email.":"Provide the administrator email.","What should be the password required for authentication.":"What should be the password required for authentication.","Should be the same as the password above.":"Should be the same as the password above.","Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.":"Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.","Choose your language to get started.":"Choose your language to get started.","Remaining Steps":"Remaining Steps","Database Configuration":"Database Configuration","Application Configuration":"Application Configuration","Language Selection":"Language Selection","Select what will be the default language of NexoPOS.":"Select what will be the default language of NexoPOS.","In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.":"In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.","Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.":"Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.","Please report this message to the support : ":"Please report this message to the support : ","No refunds made so far. Good news right?":"No refunds made so far. Good news right?","Open Register : %s":"Open Register : %s","Loading Coupon For : ":"Loading Coupon For : ","This coupon requires products that aren\\'t available on the cart at the moment.":"This coupon requires products that aren\\'t available on the cart at the moment.","This coupon requires products that belongs to specific categories that aren\\'t included at the moment.":"This coupon requires products that belongs to specific categories that aren\\'t included at the moment.","Too many results.":"Too many results.","New Customer":"New Customer","Purchases":"Purchases","Owed":"Owed","Usage :":"Usage :","Code :":"Code :","Order Reference":"Order Reference","The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?":"The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?","{product} : Units":"{product} : Units","This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.":"This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.","Previewing :":"Previewing :","Search for options":"Search for options","The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.":"The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.","The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.":"The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.","The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.":"The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.","The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.":"The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.","Invalid Error Message":"Invalid Error Message","{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List":"{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List","Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.":"Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.","No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered":"No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered","Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.":"Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.","Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.":"Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.","Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}":"Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}","{{ ucwords( $column ) }}":"{{ ucwords( $column ) }}","Delete Selected Entries":"Delete Selected Entries","Unamed Settings Page":"Unamed Settings Page","Description of unamed setting page":"Description of unamed setting page","Text Field":"Text Field","This is a sample text field.":"This is a sample text field.","No description has been provided.":"No description has been provided.","You\\'re using NexoPOS %s<\/a>":"You\\'re using NexoPOS %s<\/a>","If you haven\\'t asked this, please get in touch with the administrators.":"If you haven\\'t asked this, please get in touch with the administrators.","A new user has registered to your store (%s) with the email %s.":"A new user has registered to your store (%s) with the email %s.","The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.":"The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.","Note: ":"Note: ","Inclusive Product Taxes":"Inclusive Product Taxes","Exclusive Product Taxes":"Exclusive Product Taxes","Condition:":"Condition:","Date : %s":"Date : %s","The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?":"The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?","NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.":"NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.","Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.":"Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.","Retry":"Retry","If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.":"If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources."} \ No newline at end of file +{ + "OK": "ok", + "This field is required.": "Questo campo \u00e8 obbligatorio.", + "This field must contain a valid email address.": "Questo campo deve contenere un indirizzo email valido.", + "displaying {perPage} on {items} items": "visualizzando {perPage} su {items} elementi", + "The document has been generated.": "Il documento \u00e8 stato generato.", + "Unexpected error occurred.": "Si \u00e8 verificato un errore imprevisto.", + "Clear Selected Entries ?": "Cancella voci selezionate?", + "Would you like to clear all selected entries ?": "Vuoi cancellare tutte le voci selezionate?", + "No selection has been made.": "Non \u00e8 stata effettuata alcuna selezione.", + "No action has been selected.": "Nessuna azione \u00e8 stata selezionata.", + "{entries} entries selected": "{voci} voci selezionate", + "Download": "Scarica", + "There is nothing to display...": "Non c'\u00e8 niente da mostrare...", + "Bulk Actions": "Azioni in blocco", + "Sun": "Dom", + "Mon": "Lun", + "Tue": "Mar", + "Wed": "Mer", + "Fri": "Ven", + "Sat": "Sab", + "Date": "Ti d\u00e0", + "N\/A": "IN", + "Nothing to display": "Niente da mostrare", + "Delivery": "consegna", + "Take Away": "porta via", + "Unknown Type": "Tipo sconosciuto", + "Pending": "In attesa di", + "Ongoing": "In corso", + "Delivered": "Consegnato", + "Unknown Status": "Stato sconosciuto", + "Ready": "pronto", + "Paid": "padre", + "Hold": "presa", + "Unpaid": "non pagato", + "Partially Paid": "Parzialmente pagato", + "Password Forgotten ?": "Password dimenticata?", + "Sign In": "Registrazione", + "Register": "Registrati", + "An unexpected error occurred.": "Si \u00e8 verificato un errore imprevisto.", + "Unable to proceed the form is not valid.": "Impossibile procedere il modulo non \u00e8 valido.", + "Save Password": "Salva la password", + "Remember Your Password ?": "Ricordi la tua password?", + "Submit": "Invia", + "Already registered ?": "Gi\u00e0 registrato?", + "Best Cashiers": "I migliori cassieri", + "No result to display.": "Nessun risultato da visualizzare.", + "Well.. nothing to show for the meantime.": "Beh... niente da mostrare per il momento.", + "Best Customers": "I migliori clienti", + "Well.. nothing to show for the meantime": "Beh.. niente da mostrare per il momento", + "Total Sales": "Vendite totali", + "Today": "oggi", + "Total Refunds": "Rimborsi totali", + "Clients Registered": "Clienti registrati", + "Commissions": "commissioni", + "Total": "Totale", + "Discount": "sconto", + "Status": "Stato", + "Void": "vuoto", + "Refunded": "Rimborsato", + "Partially Refunded": "Parzialmente rimborsato", + "Incomplete Orders": "Ordini incompleti", + "Expenses": "Spese", + "Weekly Sales": "Saldi settimanali", + "Week Taxes": "Tasse settimanali", + "Net Income": "reddito netto", + "Week Expenses": "Settimana delle spese", + "Current Week": "Settimana corrente", + "Previous Week": "La settimana precedente", + "Order": "Ordine", + "Refresh": "ricaricare", + "Upload": "Caricamento", + "Enabled": "Abilitato", + "Disabled": "Disabilitato", + "Enable": "Abilitare", + "Disable": "disattivare", + "Gallery": "Galleria", + "Medias Manager": "Responsabile multimediale", + "Click Here Or Drop Your File To Upload": "Fai clic qui o trascina il tuo file da caricare", + "Nothing has already been uploaded": "Non \u00e8 gi\u00e0 stato caricato nulla", + "File Name": "Nome del file", + "Uploaded At": "Caricato su", + "By": "Di", + "Previous": "Precedente", + "Next": "Prossimo", + "Use Selected": "Usa selezionato", + "Clear All": "Cancella tutto", + "Confirm Your Action": "Conferma la tua azione", + "Would you like to clear all the notifications ?": "Vuoi cancellare tutte le notifiche?", + "Permissions": "permessi", + "Payment Summary": "Riepilogo pagamento", + "Sub Total": "Totale parziale", + "Shipping": "Spedizione", + "Coupons": "Buoni", + "Taxes": "Le tasse", + "Change": "Modificare", + "Order Status": "Stato dell'ordine", + "Customer": "cliente", + "Type": "Tipo", + "Delivery Status": "Stato della consegna", + "Save": "Salva", + "Payment Status": "Stato del pagamento", + "Products": "Prodotti", + "Would you proceed ?": "Procederesti?", + "The processing status of the order will be changed. Please confirm your action.": "Lo stato di elaborazione dell'ordine verr\u00e0 modificato. Conferma la tua azione.", + "Instalments": "Installazioni", + "Create": "Creare", + "Add Instalment": "Aggiungi installazione", + "Would you like to create this instalment ?": "Vuoi creare questa installazione?", + "An unexpected error has occurred": "Si \u00e8 verificato un errore imprevisto", + "Would you like to delete this instalment ?": "Vuoi eliminare questa installazione?", + "Would you like to update that instalment ?": "Vuoi aggiornare quell'installazione?", + "Print": "Stampa", + "Store Details": "Dettagli negozio Store", + "Order Code": "Codice d'ordine", + "Cashier": "cassiere", + "Billing Details": "Dettagli di fatturazione", + "Shipping Details": "Dettagli di spedizione", + "Product": "Prodotto", + "Unit Price": "Prezzo unitario", + "Quantity": "Quantit\u00e0", + "Tax": "Imposta", + "Total Price": "Prezzo totale", + "Expiration Date": "Data di scadenza", + "Due": "dovuto", + "Customer Account": "Conto cliente", + "Payment": "Pagamento", + "No payment possible for paid order.": "Nessun pagamento possibile per ordine pagato.", + "Payment History": "Storico dei pagamenti", + "Unable to proceed the form is not valid": "Impossibile procedere il modulo non \u00e8 valido", + "Please provide a valid value": "Si prega di fornire un valore valido", + "Refund With Products": "Rimborso con prodotti", + "Refund Shipping": "Rimborso spedizione", + "Add Product": "Aggiungi prodotto", + "Damaged": "Danneggiato", + "Unspoiled": "incontaminata", + "Summary": "Riepilogo", + "Payment Gateway": "Casello stradale", + "Screen": "Schermo", + "Select the product to perform a refund.": "Seleziona il prodotto per eseguire un rimborso.", + "Please select a payment gateway before proceeding.": "Si prega di selezionare un gateway di pagamento prima di procedere.", + "There is nothing to refund.": "Non c'\u00e8 niente da rimborsare.", + "Please provide a valid payment amount.": "Si prega di fornire un importo di pagamento valido.", + "The refund will be made on the current order.": "Il rimborso verr\u00e0 effettuato sull'ordine in corso.", + "Please select a product before proceeding.": "Seleziona un prodotto prima di procedere.", + "Not enough quantity to proceed.": "Quantit\u00e0 insufficiente per procedere.", + "Would you like to delete this product ?": "Vuoi eliminare questo prodotto?", + "Customers": "Clienti", + "Dashboard": "Pannello di controllo", + "Order Type": "Tipo di ordine", + "Orders": "Ordini", + "Cash Register": "Registratore di cassa", + "Reset": "Ripristina", + "Cart": "Carrello", + "Comments": "Commenti", + "Settings": "Impostazioni", + "No products added...": "Nessun prodotto aggiunto...", + "Price": "Prezzo", + "Flat": "Appartamento", + "Pay": "Paga", + "The product price has been updated.": "Il prezzo del prodotto \u00e8 stato aggiornato.", + "The editable price feature is disabled.": "La funzione del prezzo modificabile \u00e8 disabilitata.", + "Current Balance": "Bilancio corrente", + "Full Payment": "Pagamento completo", + "The customer account can only be used once per order. Consider deleting the previously used payment.": "L'account cliente pu\u00f2 essere utilizzato solo una volta per ordine. Considera l'eliminazione del pagamento utilizzato in precedenza.", + "Not enough funds to add {amount} as a payment. Available balance {balance}.": "Fondi insufficienti per aggiungere {amount} come pagamento. Saldo disponibile {equilibrio}.", + "Confirm Full Payment": "Conferma il pagamento completo", + "A full payment will be made using {paymentType} for {total}": "Verr\u00e0 effettuato un pagamento completo utilizzando {paymentType} per {total}", + "You need to provide some products before proceeding.": "\u00c8 necessario fornire alcuni prodotti prima di procedere.", + "Unable to add the product, there is not enough stock. Remaining %s": "Impossibile aggiungere il prodotto, lo stock non \u00e8 sufficiente. %s . rimanenti", + "Add Images": "Aggiungi immagini", + "New Group": "Nuovo gruppo", + "Available Quantity": "quantit\u00e0 disponibile", + "Delete": "Elimina", + "Would you like to delete this group ?": "Vuoi eliminare questo gruppo?", + "Your Attention Is Required": "La tua attenzione \u00e8 richiesta", + "Please select at least one unit group before you proceed.": "Seleziona almeno un gruppo di unit\u00e0 prima di procedere.", + "Unable to proceed as one of the unit group field is invalid": "Impossibile procedere poich\u00e9 uno dei campi del gruppo di unit\u00e0 non \u00e8 valido", + "Would you like to delete this variation ?": "Vuoi eliminare questa variazione?", + "Details": "Dettagli", + "Unable to proceed, no product were provided.": "Impossibile procedere, nessun prodotto \u00e8 stato fornito.", + "Unable to proceed, one or more product has incorrect values.": "Impossibile procedere, uno o pi\u00f9 prodotti hanno valori errati.", + "Unable to proceed, the procurement form is not valid.": "Impossibile procedere, il modulo di appalto non \u00e8 valido.", + "Unable to submit, no valid submit URL were provided.": "Impossibile inviare, non \u00e8 stato fornito alcun URL di invio valido.", + "No title is provided": "Nessun titolo \u00e8 fornito", + "SKU": "SKU", + "Barcode": "codice a barre", + "Options": "Opzioni", + "The product already exists on the table.": "Il prodotto esiste gi\u00e0 sul tavolo.", + "The specified quantity exceed the available quantity.": "La quantit\u00e0 specificata supera la quantit\u00e0 disponibile.", + "Unable to proceed as the table is empty.": "Impossibile procedere perch\u00e9 la tabella \u00e8 vuota.", + "The stock adjustment is about to be made. Would you like to confirm ?": "L'adeguamento delle scorte sta per essere effettuato. Vuoi confermare?", + "More Details": "Pi\u00f9 dettagli", + "Useful to describe better what are the reasons that leaded to this adjustment.": "Utile per descrivere meglio quali sono i motivi che hanno portato a questo adeguamento.", + "Would you like to remove this product from the table ?": "Vuoi rimuovere questo prodotto dalla tabella?", + "Search": "Ricerca", + "Unit": "Unit\u00e0", + "Operation": "operazione", + "Procurement": "Approvvigionamento", + "Value": "Valore", + "Search and add some products": "Cerca e aggiungi alcuni prodotti", + "Proceed": "Procedere", + "Unable to proceed. Select a correct time range.": "Impossibile procedere. Seleziona un intervallo di tempo corretto.", + "Unable to proceed. The current time range is not valid.": "Impossibile procedere. L'intervallo di tempo corrente non \u00e8 valido.", + "Would you like to proceed ?": "Vuoi continuare ?", + "An unexpected error has occurred.": "Si \u00e8 verificato un errore imprevisto.", + "No rules has been provided.": "Non \u00e8 stata fornita alcuna regola.", + "No valid run were provided.": "Non sono state fornite corse valide.", + "Unable to proceed, the form is invalid.": "Impossibile procedere, il modulo non \u00e8 valido.", + "Unable to proceed, no valid submit URL is defined.": "Impossibile procedere, non \u00e8 stato definito alcun URL di invio valido.", + "No title Provided": "Nessun titolo fornito", + "General": "Generale", + "Add Rule": "Aggiungi regola", + "Save Settings": "Salva le impostazioni", + "An unexpected error occurred": "Si \u00e8 verificato un errore imprevisto", + "Ok": "Ok", + "New Transaction": "Nuova transazione", + "Close": "Chiudere", + "Would you like to delete this order": "Vuoi eliminare questo ordine", + "The current order will be void. This action will be recorded. Consider providing a reason for this operation": "L'ordine in corso sar\u00e0 nullo. Questa azione verr\u00e0 registrata. Considera di fornire una ragione per questa operazione", + "Order Options": "Opzioni di ordine", + "Payments": "Pagamenti", + "Refund & Return": "Rimborso e restituzione", + "Installments": "rate", + "The form is not valid.": "Il modulo non \u00e8 valido.", + "Balance": "Bilancia", + "Input": "Ingresso", + "Register History": "Registro Storia", + "Close Register": "Chiudi Registrati", + "Cash In": "Incassare", + "Cash Out": "Incassare", + "Register Options": "Opzioni di registrazione", + "History": "Storia", + "Unable to open this register. Only closed register can be opened.": "Impossibile aprire questo registro. \u00c8 possibile aprire solo un registro chiuso.", + "Open The Register": "Apri il registro", + "Exit To Orders": "Esci agli ordini", + "Looks like there is no registers. At least one register is required to proceed.": "Sembra che non ci siano registri. Per procedere \u00e8 necessario almeno un registro.", + "Create Cash Register": "Crea registratore di cassa", + "Yes": "S\u00ec", + "No": "No", + "Load Coupon": "Carica coupon", + "Apply A Coupon": "Applica un coupon", + "Load": "Caricare", + "Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.": "Inserisci il codice coupon da applicare al POS. Se viene emesso un coupon per un cliente, tale cliente deve essere selezionato in precedenza.", + "Click here to choose a customer.": "Clicca qui per scegliere un cliente.", + "Coupon Name": "Nome del coupon", + "Usage": "Utilizzo", + "Unlimited": "Illimitato", + "Valid From": "Valido dal", + "Valid Till": "Valido fino a", + "Categories": "Categorie", + "Active Coupons": "Buoni attivi", + "Apply": "Applicare", + "Cancel": "Annulla", + "Coupon Code": "codice coupon", + "The coupon is out from validity date range.": "Il coupon \u00e8 fuori dall'intervallo di date di validit\u00e0.", + "The coupon has applied to the cart.": "Il coupon \u00e8 stato applicato al carrello.", + "Percentage": "Percentuale", + "The coupon has been loaded.": "Il coupon \u00e8 stato caricato.", + "Use": "Utilizzo", + "No coupon available for this customer": "Nessun coupon disponibile per questo cliente", + "Select Customer": "Seleziona cliente", + "No customer match your query...": "Nessun cliente corrisponde alla tua richiesta...", + "Customer Name": "Nome del cliente", + "Save Customer": "Salva cliente", + "No Customer Selected": "Nessun cliente selezionato", + "In order to see a customer account, you need to select one customer.": "Per visualizzare un account cliente, \u00e8 necessario selezionare un cliente.", + "Summary For": "Riepilogo per", + "Total Purchases": "Acquisti totali", + "Last Purchases": "Ultimi acquisti", + "No orders...": "Nessun ordine...", + "Account Transaction": "Transazione del conto", + "Product Discount": "Sconto sul prodotto", + "Cart Discount": "Sconto carrello", + "Hold Order": "Mantieni l'ordine", + "The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.": "L'ordine corrente verr\u00e0 messo in attesa. Puoi recuperare questo ordine dal pulsante dell'ordine in sospeso. Fornire un riferimento ad esso potrebbe aiutarti a identificare l'ordine pi\u00f9 rapidamente.", + "Confirm": "Confermare", + "Layaway Parameters": "Parametri layaway", + "Minimum Payment": "Pagamento minimo", + "Instalments & Payments": "Rate e pagamenti", + "The final payment date must be the last within the instalments.": "La data di pagamento finale deve essere l'ultima all'interno delle rate.", + "Amount": "Importo", + "You must define layaway settings before proceeding.": "\u00c8 necessario definire le impostazioni layaway prima di procedere.", + "Please provide instalments before proceeding.": "Si prega di fornire le rate prima di procedere.", + "Unable to process, the form is not valid": "Impossibile procedere il modulo non \u00e8 valido", + "One or more instalments has an invalid date.": "Una o pi\u00f9 rate hanno una data non valida.", + "One or more instalments has an invalid amount.": "Una o pi\u00f9 rate hanno un importo non valido.", + "One or more instalments has a date prior to the current date.": "Una o pi\u00f9 rate hanno una data antecedente alla data corrente.", + "Total instalments must be equal to the order total.": "Il totale delle rate deve essere uguale al totale dell'ordine.", + "Order Note": "Nota sull'ordine", + "Note": "Nota", + "More details about this order": "Maggiori dettagli su questo ordine", + "Display On Receipt": "Visualizza sulla ricevuta", + "Will display the note on the receipt": "Visualizzer\u00e0 la nota sulla ricevuta", + "Open": "Aprire", + "Order Settings": "Impostazioni dell'ordine", + "Define The Order Type": "Definisci il tipo di ordine", + "Payment List": "Lista dei pagamenti", + "List Of Payments": "Elenco dei pagamenti", + "No Payment added.": "Nessun pagamento aggiunto.", + "Select Payment": "Seleziona pagamento", + "Submit Payment": "Inviare pagamento", + "Layaway": "layaway", + "On Hold": "In attesa", + "Tendered": "Tender", + "Nothing to display...": "Niente da mostrare...", + "Product Price": "Prezzo del prodotto", + "Define Quantity": "Definisci la quantit\u00e0", + "Please provide a quantity": "Si prega di fornire una quantit\u00e0", + "Search Product": "Cerca prodotto", + "There is nothing to display. Have you started the search ?": "Non c'\u00e8 niente da mostrare. Hai iniziato la ricerca?", + "Shipping & Billing": "Spedizione e fatturazione", + "Tax & Summary": "Tasse e riepilogo", + "Select Tax": "Seleziona Imposta", + "Define the tax that apply to the sale.": "Definire l'imposta da applicare alla vendita.", + "Define how the tax is computed": "Definisci come viene calcolata l'imposta", + "Exclusive": "Esclusivo", + "Inclusive": "inclusivo", + "Define when that specific product should expire.": "Definisci quando quel prodotto specifico dovrebbe scadere.", + "Renders the automatically generated barcode.": "Visualizza il codice a barre generato automaticamente.", + "Tax Type": "Tipo di imposta", + "Adjust how tax is calculated on the item.": "Modifica il modo in cui viene calcolata l'imposta sull'articolo.", + "Unable to proceed. The form is not valid.": "Impossibile procedere. Il modulo non \u00e8 valido.", + "Units & Quantities": "Unit\u00e0 e quantit\u00e0", + "Sale Price": "Prezzo di vendita", + "Wholesale Price": "Prezzo all'ingrosso", + "Select": "Selezionare", + "The customer has been loaded": "Il cliente \u00e8 stato caricato", + "This coupon is already added to the cart": "Questo coupon \u00e8 gi\u00e0 stato aggiunto al carrello", + "No tax group assigned to the order": "Nessun gruppo fiscale assegnato all'ordine", + "Layaway defined": "Layaway definita", + "Okay": "Va bene", + "An unexpected error has occurred while fecthing taxes.": "Si \u00e8 verificato un errore imprevisto durante l'evasione delle imposte.", + "OKAY": "VA BENE", + "Loading...": "Caricamento in corso...", + "Profile": "Profilo", + "Logout": "Disconnettersi", + "Unnamed Page": "Pagina senza nome", + "No description": "Nessuna descrizione", + "Name": "Nome", + "Provide a name to the resource.": "Fornire un nome alla risorsa.", + "Edit": "Modificare", + "Would you like to delete this ?": "Vuoi eliminare questo?", + "Delete Selected Groups": "Elimina gruppi selezionati Select", + "Activate Your Account": "Attiva il tuo account", + "The account you have created for __%s__, require an activation. In order to proceed, please click on the following link": "L'account che hai creato per __%s__ richiede un'attivazione. Per procedere clicca sul seguente link", + "Password Recovered": "Password recuperata Password", + "Your password has been successfully updated on __%s__. You can now login with your new password.": "La tua password \u00e8 stata aggiornata con successo il __%s__. Ora puoi accedere con la tua nuova password.", + "Password Recovery": "Recupero della password", + "Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ": "Qualcuno ha richiesto di reimpostare la tua password su __\"%s\"__. Se ricordi di aver fatto quella richiesta, procedi cliccando il pulsante qui sotto.", + "Reset Password": "Resetta la password", + "New User Registration": "Nuova registrazione utente", + "Your Account Has Been Created": "Il tuo account \u00e8 stato creato", + "Login": "Login", + "Save Coupon": "Salva coupon", + "This field is required": "Questo campo \u00e8 obbligatorio", + "The form is not valid. Please check it and try again": "Il modulo non \u00e8 valido. Si prega di controllare e riprovare", + "mainFieldLabel not defined": "mainFieldLabel non definito", + "Create Customer Group": "Crea un gruppo di clienti", + "Save a new customer group": "Salva un nuovo gruppo di clienti", + "Update Group": "Aggiorna gruppo", + "Modify an existing customer group": "Modifica un gruppo di clienti esistente", + "Managing Customers Groups": "Gestire gruppi di clienti", + "Create groups to assign customers": "Crea gruppi per assegnare i clienti", + "Create Customer": "Crea cliente", + "Managing Customers": "Gestione dei clienti", + "List of registered customers": "Elenco dei clienti registrati", + "Log out": "Disconnettersi", + "Your Module": "Il tuo modulo", + "Choose the zip file you would like to upload": "Scegli il file zip che desideri caricare", + "Managing Orders": "Gestione degli ordini", + "Manage all registered orders.": "Gestisci tutti gli ordini registrati.", + "Failed": "fallito", + "Receipt — %s": "Ricevuta — %S", + "Order receipt": "Ricevuta d'ordine", + "Hide Dashboard": "Nascondi dashboard", + "Unknown Payment": "Pagamento sconosciuto", + "Procurement Name": "Nome dell'appalto", + "Unable to proceed no products has been provided.": "Impossibile procedere non \u00e8 stato fornito alcun prodotto.", + "Unable to proceed, one or more products is not valid.": "Impossibile procedere, uno o pi\u00f9 prodotti non sono validi.", + "Unable to proceed the procurement form is not valid.": "Impossibile procedere il modulo di appalto non \u00e8 valido.", + "Unable to proceed, no submit url has been provided.": "Impossibile procedere, non \u00e8 stato fornito alcun URL di invio.", + "SKU, Barcode, Product name.": "SKU, codice a barre, nome del prodotto.", + "Email": "E-mail", + "Phone": "Telefono", + "First Address": "Primo indirizzo", + "Second Address": "Secondo indirizzo", + "Address": "Indirizzo", + "City": "Citt\u00e0", + "PO.Box": "casella postale", + "Description": "Descrizione", + "Included Products": "Prodotti inclusi", + "Apply Settings": "Applica le impostazioni", + "Basic Settings": "Impostazioni di base", + "Visibility Settings": "Impostazioni visibilit\u00e0 Visi", + "Year": "Anno", + "Recompute": "Ricalcola", + "Sales": "I saldi", + "Income": "Reddito", + "January": "Gennaio", + "March": "marzo", + "April": "aprile", + "May": "Maggio", + "June": "giugno", + "July": "luglio", + "August": "agosto", + "September": "settembre", + "October": "ottobre", + "November": "novembre", + "December": "dicembre", + "Sort Results": "Ordina risultati", + "Using Quantity Ascending": "Utilizzo della quantit\u00e0 crescente", + "Using Quantity Descending": "Utilizzo della quantit\u00e0 decrescente", + "Using Sales Ascending": "Utilizzo delle vendite ascendente", + "Using Sales Descending": "Utilizzo delle vendite decrescenti", + "Using Name Ascending": "Utilizzo del nome crescente As", + "Using Name Descending": "Utilizzo del nome decrescente", + "Progress": "Progresso", + "Purchase Price": "Prezzo d'acquisto", + "Profit": "Profitto", + "Discounts": "Sconti", + "Tax Value": "Valore fiscale", + "Reward System Name": "Nome del sistema di ricompense", + "Missing Dependency": "Dipendenza mancante", + "Go Back": "Torna indietro", + "Continue": "Continua", + "Home": "Casa", + "Not Allowed Action": "Azione non consentita", + "Try Again": "Riprova", + "Access Denied": "Accesso negato", + "Sign Up": "Iscrizione", + "An invalid date were provided. Make sure it a prior date to the actual server date.": "\u00c8 stata fornita una data non valida. Assicurati che sia una data precedente alla data effettiva del server.", + "Computing report from %s...": "Report di calcolo da %s...", + "The operation was successful.": "L'operazione \u00e8 andata a buon fine.", + "Unable to find a module having the identifier\/namespace \"%s\"": "Impossibile trovare un modulo con l'identificatore\/namespace \"%s\"", + "What is the CRUD single resource name ? [Q] to quit.": "Qual \u00e8 il nome della singola risorsa CRUD? [Q] per uscire.", + "Which table name should be used ? [Q] to quit.": "Quale nome di tabella dovrebbe essere usato? [Q] per uscire.", + "If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "Se la tua risorsa CRUD ha una relazione, menzionala come segue \"foreign_table, foreign_key, local_key\" ? [S] per saltare, [Q] per uscire.", + "Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "Aggiungere una nuova relazione? Menzionalo come segue \"foreign_table, foreign_key, local_key\" ? [S] per saltare, [Q] per uscire.", + "Not enough parameters provided for the relation.": "Non sono stati forniti parametri sufficienti per la relazione.", + "The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"": "La risorsa CRUD \"%s\" for the module \"%s\" has been generated at \"%s\"", + "The CRUD resource \"%s\" has been generated at %s": "La risorsa CRUD \"%s\" has been generated at %s", + "Localization for %s extracted to %s": "Localizzazione per %s estratta in %s", + "Unable to find the requested module.": "Impossibile trovare il modulo richiesto.", + "Version": "Versione", + "Path": "Il percorso", + "Index": "Indice", + "Entry Class": "Classe di ingresso", + "Routes": "Itinerari", + "Api": "api", + "Controllers": "Controllori", + "Views": "Visualizzazioni", + "Attribute": "Attributo", + "Namespace": "Spazio dei nomi", + "Author": "Autore", + "There is no migrations to perform for the module \"%s\"": "Non ci sono migrazioni da eseguire per il modulo \"%s\"", + "The module migration has successfully been performed for the module \"%s\"": "La migrazione del modulo \u00e8 stata eseguita con successo per il modulo \"%s\"", + "The product barcodes has been refreshed successfully.": "I codici a barre del prodotto sono stati aggiornati con successo.", + "The demo has been enabled.": "La demo \u00e8 stata abilitata.", + "What is the store name ? [Q] to quit.": "Qual \u00e8 il nome del negozio? [Q] per uscire.", + "Please provide at least 6 characters for store name.": "Fornisci almeno 6 caratteri per il nome del negozio.", + "What is the administrator password ? [Q] to quit.": "Qual \u00e8 la password dell'amministratore? [Q] per uscire.", + "Please provide at least 6 characters for the administrator password.": "Si prega di fornire almeno 6 caratteri per la password dell'amministratore.", + "What is the administrator email ? [Q] to quit.": "Qual \u00e8 l'e-mail dell'amministratore? [Q] per uscire.", + "Please provide a valid email for the administrator.": "Si prega di fornire un'e-mail valida per l'amministratore.", + "What is the administrator username ? [Q] to quit.": "Qual \u00e8 il nome utente dell'amministratore? [Q] per uscire.", + "Please provide at least 5 characters for the administrator username.": "Fornisci almeno 5 caratteri per il nome utente dell'amministratore.", + "Downloading latest dev build...": "Download dell'ultima build di sviluppo...", + "Reset project to HEAD...": "Reimposta progetto su HEAD...", + "Coupons List": "Elenco coupon", + "Display all coupons.": "Visualizza tutti i coupon.", + "No coupons has been registered": "Nessun coupon \u00e8 stato registrato", + "Add a new coupon": "Aggiungi un nuovo coupon", + "Create a new coupon": "Crea un nuovo coupon", + "Register a new coupon and save it.": "Registra un nuovo coupon e salvalo.", + "Edit coupon": "Modifica coupon", + "Modify Coupon.": "Modifica coupon.", + "Return to Coupons": "Torna a Coupon", + "Might be used while printing the coupon.": "Potrebbe essere utilizzato durante la stampa del coupon.", + "Percentage Discount": "Sconto percentuale", + "Flat Discount": "Sconto piatto", + "Define which type of discount apply to the current coupon.": "Definisci quale tipo di sconto applicare al coupon corrente.", + "Discount Value": "Valore di sconto", + "Define the percentage or flat value.": "Definire la percentuale o il valore fisso.", + "Valid Until": "Valido fino a", + "Minimum Cart Value": "Valore minimo del carrello", + "What is the minimum value of the cart to make this coupon eligible.": "Qual \u00e8 il valore minimo del carrello per rendere idoneo questo coupon.", + "Maximum Cart Value": "Valore massimo del carrello", + "Valid Hours Start": "Inizio ore valide", + "Define form which hour during the day the coupons is valid.": "Definisci da quale ora del giorno i coupon sono validi.", + "Valid Hours End": "Fine ore valide", + "Define to which hour during the day the coupons end stop valid.": "Definire a quale ora della giornata sono validi i tagliandi.", + "Limit Usage": "Limite di utilizzo", + "Define how many time a coupons can be redeemed.": "Definisci quante volte un coupon pu\u00f2 essere riscattato.", + "Select Products": "Seleziona prodotti", + "The following products will be required to be present on the cart, in order for this coupon to be valid.": "I seguenti prodotti dovranno essere presenti nel carrello, affinch\u00e9 questo coupon sia valido.", + "Select Categories": "Seleziona categorie", + "The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.": "I prodotti assegnati a una di queste categorie devono essere nel carrello, affinch\u00e9 questo coupon sia valido.", + "Created At": "Creato a", + "Undefined": "Non definito", + "Delete a licence": "Eliminare una licenza", + "Customer Coupons List": "Elenco coupon cliente", + "Display all customer coupons.": "Visualizza tutti i coupon cliente.", + "No customer coupons has been registered": "Nessun coupon cliente \u00e8 stato registrato", + "Add a new customer coupon": "Aggiungi un nuovo coupon cliente", + "Create a new customer coupon": "Crea un nuovo coupon cliente", + "Register a new customer coupon and save it.": "Registra un nuovo coupon cliente e salvalo.", + "Edit customer coupon": "Modifica coupon cliente", + "Modify Customer Coupon.": "Modifica coupon cliente.", + "Return to Customer Coupons": "Torna a Coupon clienti", + "Id": "ID", + "Limit": "Limite", + "Created_at": "Created_at", + "Updated_at": "Aggiornato_at", + "Code": "Codice", + "Customers List": "Elenco clienti", + "Display all customers.": "Visualizza tutti i clienti.", + "No customers has been registered": "Nessun cliente \u00e8 stato registrato", + "Add a new customer": "Aggiungi un nuovo cliente", + "Create a new customer": "Crea un nuovo cliente", + "Register a new customer and save it.": "Registra un nuovo cliente e salvalo.", + "Edit customer": "Modifica cliente", + "Modify Customer.": "Modifica cliente.", + "Return to Customers": "Ritorna ai clienti", + "Provide a unique name for the customer.": "Fornire un nome univoco per il cliente.", + "Group": "Gruppo", + "Assign the customer to a group": "Assegna il cliente a un gruppo", + "Phone Number": "Numero di telefono", + "Provide the customer phone number": "Fornire il numero di telefono del cliente", + "PO Box": "casella postale", + "Provide the customer PO.Box": "Fornire la casella postale del cliente", + "Not Defined": "Non definito", + "Male": "Maschio", + "Female": "Femmina", + "Gender": "Genere", + "Billing Address": "Indirizzo Di Fatturazione", + "Billing phone number.": "Numero di telefono di fatturazione.", + "Address 1": "Indirizzo 1", + "Billing First Address.": "Primo indirizzo di fatturazione.", + "Address 2": "Indirizzo 2", + "Billing Second Address.": "Secondo indirizzo di fatturazione.", + "Country": "Nazione", + "Billing Country.": "Paese di fatturazione.", + "Postal Address": "Indirizzo postale", + "Company": "Societ\u00e0", + "Shipping Address": "Indirizzo di spedizione", + "Shipping phone number.": "Numero di telefono per la spedizione.", + "Shipping First Address.": "Primo indirizzo di spedizione.", + "Shipping Second Address.": "Secondo indirizzo di spedizione.", + "Shipping Country.": "Paese di spedizione.", + "Account Credit": "Credito sul conto", + "Owed Amount": "Importo dovuto", + "Purchase Amount": "Ammontare dell'acquisto", + "Rewards": "Ricompense", + "Delete a customers": "Elimina un cliente", + "Delete Selected Customers": "Elimina clienti selezionati Select", + "Customer Groups List": "Elenco dei gruppi di clienti", + "Display all Customers Groups.": "Visualizza tutti i gruppi di clienti.", + "No Customers Groups has been registered": "Nessun gruppo di clienti \u00e8 stato registrato", + "Add a new Customers Group": "Aggiungi un nuovo gruppo di clienti", + "Create a new Customers Group": "Crea un nuovo Gruppo Clienti", + "Register a new Customers Group and save it.": "Registra un nuovo Gruppo Clienti e salvalo.", + "Edit Customers Group": "Modifica gruppo clienti", + "Modify Customers group.": "Modifica gruppo Clienti.", + "Return to Customers Groups": "Torna ai gruppi di clienti", + "Reward System": "Sistema di ricompensa", + "Select which Reward system applies to the group": "Seleziona quale sistema di premi si applica al gruppo", + "Minimum Credit Amount": "Importo minimo del credito", + "A brief description about what this group is about": "Una breve descrizione di cosa tratta questo gruppo", + "Created On": "Creato", + "Customer Orders List": "Elenco degli ordini dei clienti", + "Display all customer orders.": "Visualizza tutti gli ordini dei clienti.", + "No customer orders has been registered": "Nessun ordine cliente \u00e8 stato registrato", + "Add a new customer order": "Aggiungi un nuovo ordine cliente", + "Create a new customer order": "Crea un nuovo ordine cliente", + "Register a new customer order and save it.": "Registra un nuovo ordine cliente e salvalo.", + "Edit customer order": "Modifica ordine cliente", + "Modify Customer Order.": "Modifica ordine cliente.", + "Return to Customer Orders": "Ritorna agli ordini dei clienti", + "Created at": "Creato a", + "Customer Id": "Identificativo del cliente", + "Discount Percentage": "Percentuale di sconto", + "Discount Type": "Tipo di sconto", + "Final Payment Date": "Data di pagamento finale", + "Process Status": "Stato del processo", + "Shipping Rate": "Tariffa di spedizione", + "Shipping Type": "Tipo di spedizione", + "Title": "Titolo", + "Total installments": "Totale rate", + "Updated at": "Aggiornato a", + "Uuid": "Uuid", + "Voidance Reason": "Motivo del vuoto", + "Customer Rewards List": "Elenco dei premi per i clienti", + "Display all customer rewards.": "Visualizza tutti i premi dei clienti.", + "No customer rewards has been registered": "Nessun premio per i clienti \u00e8 stato registrato", + "Add a new customer reward": "Aggiungi un nuovo premio cliente", + "Create a new customer reward": "Crea un nuovo premio cliente", + "Register a new customer reward and save it.": "Registra un nuovo premio cliente e salvalo.", + "Edit customer reward": "Modifica ricompensa cliente", + "Modify Customer Reward.": "Modifica il premio del cliente.", + "Return to Customer Rewards": "Torna a Premi per i clienti", + "Points": "Punti", + "Target": "Obbiettivo", + "Reward Name": "Nome ricompensa", + "Last Update": "Ultimo aggiornamento", + "Active": "Attivo", + "Users Group": "Gruppo utenti", + "None": "Nessuno", + "Recurring": "Ricorrente", + "Start of Month": "Inizio del mese", + "Mid of Month": "Met\u00e0 mese", + "End of Month": "Fine mese", + "X days Before Month Ends": "X giorni prima della fine del mese", + "X days After Month Starts": "X giorni dopo l'inizio del mese", + "Occurrence": "Evento", + "Occurrence Value": "Valore di occorrenza", + "Must be used in case of X days after month starts and X days before month ends.": "Deve essere utilizzato in caso di X giorni dopo l'inizio del mese e X giorni prima della fine del mese.", + "Category": "Categoria", + "Month Starts": "Inizio mese Month", + "Month Middle": "Mese Medio", + "Month Ends": "Fine del mese", + "X Days Before Month Ends": "X giorni prima della fine del mese", + "Updated At": "Aggiornato alle", + "Hold Orders List": "Elenco ordini in attesa", + "Display all hold orders.": "Visualizza tutti gli ordini sospesi.", + "No hold orders has been registered": "Nessun ordine sospeso \u00e8 stato registrato", + "Add a new hold order": "Aggiungi un nuovo ordine di sospensione", + "Create a new hold order": "Crea un nuovo ordine di sospensione", + "Register a new hold order and save it.": "Registra un nuovo ordine di sospensione e salvalo.", + "Edit hold order": "Modifica ordine di sospensione", + "Modify Hold Order.": "Modifica ordine di sospensione.", + "Return to Hold Orders": "Torna a mantenere gli ordini", + "Orders List": "Elenco ordini", + "Display all orders.": "Visualizza tutti gli ordini.", + "No orders has been registered": "Nessun ordine \u00e8 stato registrato", + "Add a new order": "Aggiungi un nuovo ordine", + "Create a new order": "Crea un nuovo ordine", + "Register a new order and save it.": "Registra un nuovo ordine e salvalo.", + "Edit order": "Modifica ordine", + "Modify Order.": "Modifica ordine.", + "Return to Orders": "Torna agli ordini", + "Discount Rate": "Tasso di sconto", + "The order and the attached products has been deleted.": "L'ordine e i prodotti allegati sono stati cancellati.", + "Invoice": "Fattura", + "Receipt": "Ricevuta", + "Order Instalments List": "Elenco delle rate dell'ordine", + "Display all Order Instalments.": "Visualizza tutte le rate dell'ordine.", + "No Order Instalment has been registered": "Nessuna rata dell'ordine \u00e8 stata registrata", + "Add a new Order Instalment": "Aggiungi una nuova rata dell'ordine", + "Create a new Order Instalment": "Crea una nuova rata dell'ordine", + "Register a new Order Instalment and save it.": "Registra una nuova rata dell'ordine e salvala.", + "Edit Order Instalment": "Modifica rata ordine", + "Modify Order Instalment.": "Modifica rata ordine.", + "Return to Order Instalment": "Ritorno alla rata dell'ordine", + "Order Id": "ID ordine", + "Payment Types List": "Elenco dei tipi di pagamento", + "Display all payment types.": "Visualizza tutti i tipi di pagamento.", + "No payment types has been registered": "Nessun tipo di pagamento \u00e8 stato registrato", + "Add a new payment type": "Aggiungi un nuovo tipo di pagamento", + "Create a new payment type": "Crea un nuovo tipo di pagamento", + "Register a new payment type and save it.": "Registra un nuovo tipo di pagamento e salvalo.", + "Edit payment type": "Modifica tipo di pagamento", + "Modify Payment Type.": "Modifica tipo di pagamento.", + "Return to Payment Types": "Torna a Tipi di pagamento", + "Label": "Etichetta", + "Provide a label to the resource.": "Fornire un'etichetta alla risorsa.", + "Identifier": "identificatore", + "A payment type having the same identifier already exists.": "Esiste gi\u00e0 un tipo di pagamento con lo stesso identificatore.", + "Unable to delete a read-only payments type.": "Impossibile eliminare un tipo di pagamento di sola lettura.", + "Readonly": "Sola lettura", + "Procurements List": "Elenco acquisti", + "Display all procurements.": "Visualizza tutti gli appalti.", + "No procurements has been registered": "Nessun appalto \u00e8 stato registrato", + "Add a new procurement": "Aggiungi un nuovo acquisto", + "Create a new procurement": "Crea un nuovo approvvigionamento", + "Register a new procurement and save it.": "Registra un nuovo approvvigionamento e salvalo.", + "Edit procurement": "Modifica approvvigionamento", + "Modify Procurement.": "Modifica approvvigionamento.", + "Return to Procurements": "Torna agli acquisti", + "Provider Id": "ID fornitore", + "Total Items": "Articoli totali", + "Provider": "Fornitore", + "Stocked": "rifornito", + "Procurement Products List": "Elenco dei prodotti di approvvigionamento", + "Display all procurement products.": "Visualizza tutti i prodotti di approvvigionamento.", + "No procurement products has been registered": "Nessun prodotto di approvvigionamento \u00e8 stato registrato", + "Add a new procurement product": "Aggiungi un nuovo prodotto di approvvigionamento", + "Create a new procurement product": "Crea un nuovo prodotto di approvvigionamento", + "Register a new procurement product and save it.": "Registra un nuovo prodotto di approvvigionamento e salvalo.", + "Edit procurement product": "Modifica prodotto approvvigionamento", + "Modify Procurement Product.": "Modifica prodotto di appalto.", + "Return to Procurement Products": "Torna all'acquisto di prodotti", + "Define what is the expiration date of the product.": "Definire qual \u00e8 la data di scadenza del prodotto.", + "On": "Su", + "Category Products List": "Categoria Elenco prodotti", + "Display all category products.": "Visualizza tutti i prodotti della categoria.", + "No category products has been registered": "Nessun prodotto di categoria \u00e8 stato registrato", + "Add a new category product": "Aggiungi un nuovo prodotto di categoria", + "Create a new category product": "Crea un nuovo prodotto di categoria", + "Register a new category product and save it.": "Registra un nuovo prodotto di categoria e salvalo.", + "Edit category product": "Modifica categoria prodotto", + "Modify Category Product.": "Modifica categoria prodotto.", + "Return to Category Products": "Torna alla categoria Prodotti", + "No Parent": "Nessun genitore", + "Preview": "Anteprima", + "Provide a preview url to the category.": "Fornisci un URL di anteprima alla categoria.", + "Displays On POS": "Visualizza su POS", + "Parent": "Genitore", + "If this category should be a child category of an existing category": "Se questa categoria deve essere una categoria figlio di una categoria esistente", + "Total Products": "Prodotti totali", + "Products List": "Elenco prodotti", + "Display all products.": "Visualizza tutti i prodotti.", + "No products has been registered": "Nessun prodotto \u00e8 stato registrato", + "Add a new product": "Aggiungi un nuovo prodotto", + "Create a new product": "Crea un nuovo prodotto", + "Register a new product and save it.": "Registra un nuovo prodotto e salvalo.", + "Edit product": "Modifica prodotto", + "Modify Product.": "Modifica prodotto.", + "Return to Products": "Torna ai prodotti", + "Assigned Unit": "Unit\u00e0 assegnata", + "The assigned unit for sale": "L'unit\u00e0 assegnata in vendita", + "Define the regular selling price.": "Definire il prezzo di vendita regolare.", + "Define the wholesale price.": "Definire il prezzo all'ingrosso.", + "Preview Url": "Anteprima URL", + "Provide the preview of the current unit.": "Fornire l'anteprima dell'unit\u00e0 corrente.", + "Identification": "Identificazione", + "Define the barcode value. Focus the cursor here before scanning the product.": "Definire il valore del codice a barre. Metti a fuoco il cursore qui prima di scansionare il prodotto.", + "Define the barcode type scanned.": "Definire il tipo di codice a barre scansionato.", + "EAN 8": "EAN 8", + "EAN 13": "EAN 13", + "Codabar": "Codabar", + "Code 128": "Codice 128", + "Code 39": "Codice 39", + "Code 11": "Codice 11", + "UPC A": "UPC A", + "UPC E": "UPC E", + "Barcode Type": "Tipo di codice a barre", + "Select to which category the item is assigned.": "Seleziona a quale categoria \u00e8 assegnato l'articolo.", + "Materialized Product": "Prodotto materializzato", + "Dematerialized Product": "Prodotto dematerializzato", + "Define the product type. Applies to all variations.": "Definire il tipo di prodotto. Si applica a tutte le varianti.", + "Product Type": "Tipologia di prodotto", + "Define a unique SKU value for the product.": "Definire un valore SKU univoco per il prodotto.", + "On Sale": "In vendita", + "Hidden": "Nascosto", + "Define whether the product is available for sale.": "Definire se il prodotto \u00e8 disponibile per la vendita.", + "Enable the stock management on the product. Will not work for service or uncountable products.": "Abilita la gestione delle scorte sul prodotto. Non funzioner\u00e0 per servizi o prodotti non numerabili.", + "Stock Management Enabled": "Gestione delle scorte abilitata", + "Units": "Unit\u00e0", + "Accurate Tracking": "Monitoraggio accurato", + "What unit group applies to the actual item. This group will apply during the procurement.": "Quale gruppo di unit\u00e0 si applica all'articolo effettivo. Questo gruppo si applicher\u00e0 durante l'appalto.", + "Unit Group": "Gruppo unit\u00e0", + "Determine the unit for sale.": "Determinare l'unit\u00e0 in vendita.", + "Selling Unit": "Unit\u00e0 di vendita", + "Expiry": "Scadenza", + "Product Expires": "Il prodotto scade", + "Set to \"No\" expiration time will be ignored.": "Impostato \"No\" expiration time will be ignored.", + "Prevent Sales": "Prevenire le vendite", + "Allow Sales": "Consenti vendite", + "Determine the action taken while a product has expired.": "Determinare l'azione intrapresa mentre un prodotto \u00e8 scaduto.", + "On Expiration": "Alla scadenza", + "Select the tax group that applies to the product\/variation.": "Seleziona il gruppo fiscale che si applica al prodotto\/variante.", + "Tax Group": "Gruppo fiscale", + "Define what is the type of the tax.": "Definire qual \u00e8 il tipo di tassa.", + "Images": "immagini", + "Image": "Immagine", + "Choose an image to add on the product gallery": "Scegli un'immagine da aggiungere alla galleria dei prodotti", + "Is Primary": "\u00e8 primario?", + "Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.": "Definisci se l'immagine deve essere primaria. Se sono presenti pi\u00f9 immagini principali, ne verr\u00e0 scelta una per te.", + "Sku": "Sku", + "Materialized": "materializzato", + "Dematerialized": "smaterializzato", + "Available": "A disposizione", + "See Quantities": "Vedi quantit\u00e0", + "See History": "Vedi la storia", + "Would you like to delete selected entries ?": "Vuoi eliminare le voci selezionate?", + "Product Histories": "Cronologia dei prodotti", + "Display all product histories.": "Visualizza tutte le cronologie dei prodotti.", + "No product histories has been registered": "Nessuna cronologia dei prodotti \u00e8 stata registrata", + "Add a new product history": "Aggiungi una nuova cronologia del prodotto", + "Create a new product history": "Crea una nuova cronologia del prodotto", + "Register a new product history and save it.": "Registra una nuova cronologia del prodotto e salvala.", + "Edit product history": "Modifica la cronologia del prodotto", + "Modify Product History.": "Modifica la cronologia del prodotto.", + "Return to Product Histories": "Torna alla cronologia dei prodotti Product", + "After Quantity": "Dopo la quantit\u00e0", + "Before Quantity": "Prima della quantit\u00e0", + "Operation Type": "Tipo di operazione", + "Order id": "ID ordine", + "Procurement Id": "ID approvvigionamento", + "Procurement Product Id": "ID prodotto approvvigionamento", + "Product Id": "Numero identificativo del prodotto", + "Unit Id": "ID unit\u00e0", + "P. Quantity": "P. Quantit\u00e0", + "N. Quantity": "N. Quantit\u00e0", + "Defective": "Difettoso", + "Deleted": "Eliminato", + "Removed": "RIMOSSO", + "Returned": "Restituito", + "Sold": "Venduto", + "Lost": "Perso", + "Added": "Aggiunto", + "Incoming Transfer": "Trasferimento in entrata", + "Outgoing Transfer": "Trasferimento in uscita", + "Transfer Rejected": "Trasferimento rifiutato", + "Transfer Canceled": "Trasferimento annullato", + "Void Return": "Ritorno nullo", + "Adjustment Return": "Ritorno di regolazione", + "Adjustment Sale": "Vendita di aggiustamento", + "Product Unit Quantities List": "Elenco quantit\u00e0 unit\u00e0 prodotto", + "Display all product unit quantities.": "Visualizza tutte le quantit\u00e0 di unit\u00e0 di prodotto.", + "No product unit quantities has been registered": "Nessuna quantit\u00e0 di unit\u00e0 di prodotto \u00e8 stata registrata", + "Add a new product unit quantity": "Aggiungi una nuova quantit\u00e0 di unit\u00e0 di prodotto", + "Create a new product unit quantity": "Crea una nuova quantit\u00e0 di unit\u00e0 di prodotto", + "Register a new product unit quantity and save it.": "Registra una nuova quantit\u00e0 di unit\u00e0 di prodotto e salvala.", + "Edit product unit quantity": "Modifica la quantit\u00e0 dell'unit\u00e0 di prodotto", + "Modify Product Unit Quantity.": "Modifica quantit\u00e0 unit\u00e0 prodotto.", + "Return to Product Unit Quantities": "Torna a Quantit\u00e0 unit\u00e0 prodotto", + "Product id": "Numero identificativo del prodotto", + "Providers List": "Elenco dei fornitori", + "Display all providers.": "Visualizza tutti i fornitori.", + "No providers has been registered": "Nessun provider \u00e8 stato registrato", + "Add a new provider": "Aggiungi un nuovo fornitore", + "Create a new provider": "Crea un nuovo fornitore", + "Register a new provider and save it.": "Registra un nuovo provider e salvalo.", + "Edit provider": "Modifica fornitore", + "Modify Provider.": "Modifica fornitore.", + "Return to Providers": "Ritorna ai fornitori", + "Provide the provider email. Might be used to send automated email.": "Fornire l'e-mail del provider. Potrebbe essere utilizzato per inviare e-mail automatizzate.", + "Contact phone number for the provider. Might be used to send automated SMS notifications.": "Contattare il numero di telefono del provider. Potrebbe essere utilizzato per inviare notifiche SMS automatizzate.", + "First address of the provider.": "Primo indirizzo del provider.", + "Second address of the provider.": "Secondo indirizzo del provider.", + "Further details about the provider": "Ulteriori dettagli sul fornitore", + "Amount Due": "Importo dovuto", + "Amount Paid": "Importo pagato", + "See Procurements": "Vedi Appalti", + "Registers List": "Elenco Registri", + "Display all registers.": "Visualizza tutti i registri.", + "No registers has been registered": "Nessun registro \u00e8 stato registrato", + "Add a new register": "Aggiungi un nuovo registro", + "Create a new register": "Crea un nuovo registro", + "Register a new register and save it.": "Registra un nuovo registro e salvalo.", + "Edit register": "Modifica registro", + "Modify Register.": "Modifica registro.", + "Return to Registers": "Torna ai Registri", + "Closed": "Chiuso", + "Define what is the status of the register.": "Definire qual \u00e8 lo stato del registro.", + "Provide mode details about this cash register.": "Fornisci i dettagli della modalit\u00e0 su questo registratore di cassa.", + "Unable to delete a register that is currently in use": "Impossibile eliminare un registro attualmente in uso", + "Used By": "Usato da", + "Register History List": "Registro Cronologia Lista", + "Display all register histories.": "Visualizza tutte le cronologie dei registri.", + "No register histories has been registered": "Nessuna cronologia dei registri \u00e8 stata registrata", + "Add a new register history": "Aggiungi una nuova cronologia del registro", + "Create a new register history": "Crea una nuova cronologia dei registri", + "Register a new register history and save it.": "Registra una nuova cronologia del registro e salvala.", + "Edit register history": "Modifica la cronologia del registro", + "Modify Registerhistory.": "Modifica la cronologia del registro.", + "Return to Register History": "Torna alla cronologia della registrazione", + "Register Id": "ID di registrazione", + "Action": "Azione", + "Register Name": "Registra nome", + "Done At": "Fatto a", + "Reward Systems List": "Elenco dei sistemi di ricompensa", + "Display all reward systems.": "Mostra tutti i sistemi di ricompensa.", + "No reward systems has been registered": "Nessun sistema di ricompensa \u00e8 stato registrato", + "Add a new reward system": "Aggiungi un nuovo sistema di ricompense", + "Create a new reward system": "Crea un nuovo sistema di ricompense", + "Register a new reward system and save it.": "Registra un nuovo sistema di ricompense e salvalo.", + "Edit reward system": "Modifica sistema di ricompense", + "Modify Reward System.": "Modifica il sistema di ricompensa.", + "Return to Reward Systems": "Torna a Sistemi di ricompensa", + "From": "A partire dal", + "The interval start here.": "L'intervallo inizia qui.", + "To": "a", + "The interval ends here.": "L'intervallo finisce qui.", + "Points earned.": "Punti guadagnati.", + "Coupon": "Buono", + "Decide which coupon you would apply to the system.": "Decidi quale coupon applicare al sistema.", + "This is the objective that the user should reach to trigger the reward.": "Questo \u00e8 l'obiettivo che l'utente dovrebbe raggiungere per attivare il premio.", + "A short description about this system": "Una breve descrizione di questo sistema", + "Would you like to delete this reward system ?": "Vuoi eliminare questo sistema di ricompensa?", + "Delete Selected Rewards": "Elimina i premi selezionati", + "Would you like to delete selected rewards?": "Vuoi eliminare i premi selezionati?", + "Roles List": "Elenco dei ruoli", + "Display all roles.": "Visualizza tutti i ruoli.", + "No role has been registered.": "Nessun ruolo \u00e8 stato registrato.", + "Add a new role": "Aggiungi un nuovo ruolo", + "Create a new role": "Crea un nuovo ruolo", + "Create a new role and save it.": "Crea un nuovo ruolo e salvalo.", + "Edit role": "Modifica ruolo", + "Modify Role.": "Modifica ruolo.", + "Return to Roles": "Torna ai ruoli", + "Provide a name to the role.": "Assegna un nome al ruolo.", + "Should be a unique value with no spaces or special character": "Dovrebbe essere un valore univoco senza spazi o caratteri speciali", + "Store Dashboard": "Pannello di controllo del negozio", + "Cashier Dashboard": "Pannello di controllo della cassa", + "Default Dashboard": "Pannello di controllo predefinito", + "Provide more details about what this role is about.": "Fornisci maggiori dettagli sull'argomento di questo ruolo.", + "Unable to delete a system role.": "Impossibile eliminare un ruolo di sistema.", + "You do not have enough permissions to perform this action.": "Non disponi di autorizzazioni sufficienti per eseguire questa azione.", + "Taxes List": "Elenco delle tasse", + "Display all taxes.": "Visualizza tutte le tasse.", + "No taxes has been registered": "Nessuna tassa \u00e8 stata registrata", + "Add a new tax": "Aggiungi una nuova tassa", + "Create a new tax": "Crea una nuova tassa", + "Register a new tax and save it.": "Registra una nuova tassa e salvala.", + "Edit tax": "Modifica imposta", + "Modify Tax.": "Modifica imposta.", + "Return to Taxes": "Torna a Tasse", + "Provide a name to the tax.": "Fornire un nome alla tassa.", + "Assign the tax to a tax group.": "Assegnare l'imposta a un gruppo fiscale.", + "Rate": "Valutare", + "Define the rate value for the tax.": "Definire il valore dell'aliquota per l'imposta.", + "Provide a description to the tax.": "Fornire una descrizione dell'imposta.", + "Taxes Groups List": "Elenco dei gruppi di tasse", + "Display all taxes groups.": "Visualizza tutti i gruppi di tasse.", + "No taxes groups has been registered": "Nessun gruppo fiscale \u00e8 stato registrato", + "Add a new tax group": "Aggiungi un nuovo gruppo fiscale", + "Create a new tax group": "Crea un nuovo gruppo fiscale", + "Register a new tax group and save it.": "Registra un nuovo gruppo fiscale e salvalo.", + "Edit tax group": "Modifica gruppo fiscale", + "Modify Tax Group.": "Modifica gruppo fiscale.", + "Return to Taxes Groups": "Torna a Gruppi fiscali", + "Provide a short description to the tax group.": "Fornire una breve descrizione al gruppo fiscale.", + "Units List": "Elenco unit\u00e0", + "Display all units.": "Visualizza tutte le unit\u00e0.", + "No units has been registered": "Nessuna unit\u00e0 \u00e8 stata registrata", + "Add a new unit": "Aggiungi una nuova unit\u00e0", + "Create a new unit": "Crea una nuova unit\u00e0", + "Register a new unit and save it.": "Registra una nuova unit\u00e0 e salvala.", + "Edit unit": "Modifica unit\u00e0", + "Modify Unit.": "Modifica unit\u00e0.", + "Return to Units": "Torna alle unit\u00e0", + "Preview URL": "URL di anteprima", + "Preview of the unit.": "Anteprima dell'unit\u00e0.", + "Define the value of the unit.": "Definire il valore dell'unit\u00e0.", + "Define to which group the unit should be assigned.": "Definire a quale gruppo deve essere assegnata l'unit\u00e0.", + "Base Unit": "Unit\u00e0 base", + "Determine if the unit is the base unit from the group.": "Determinare se l'unit\u00e0 \u00e8 l'unit\u00e0 di base del gruppo.", + "Provide a short description about the unit.": "Fornire una breve descrizione dell'unit\u00e0.", + "Unit Groups List": "Elenco dei gruppi di unit\u00e0", + "Display all unit groups.": "Visualizza tutti i gruppi di unit\u00e0.", + "No unit groups has been registered": "Nessun gruppo di unit\u00e0 \u00e8 stato registrato", + "Add a new unit group": "Aggiungi un nuovo gruppo di unit\u00e0", + "Create a new unit group": "Crea un nuovo gruppo di unit\u00e0", + "Register a new unit group and save it.": "Registra un nuovo gruppo di unit\u00e0 e salvalo.", + "Edit unit group": "Modifica gruppo unit\u00e0", + "Modify Unit Group.": "Modifica gruppo unit\u00e0.", + "Return to Unit Groups": "Torna ai gruppi di unit\u00e0", + "Users List": "Elenco utenti", + "Display all users.": "Visualizza tutti gli utenti.", + "No users has been registered": "Nessun utente \u00e8 stato registrato", + "Add a new user": "Aggiungi un nuovo utente", + "Create a new user": "Crea un nuovo utente", + "Register a new user and save it.": "Registra un nuovo utente e salvalo.", + "Edit user": "Modifica utente", + "Modify User.": "Modifica utente.", + "Return to Users": "Torna agli utenti", + "Username": "Nome utente", + "Will be used for various purposes such as email recovery.": "Verr\u00e0 utilizzato per vari scopi come il recupero della posta elettronica.", + "Password": "Parola d'ordine", + "Make a unique and secure password.": "Crea una password unica e sicura.", + "Confirm Password": "Conferma password", + "Should be the same as the password.": "Dovrebbe essere uguale alla password.", + "Define whether the user can use the application.": "Definire se l'utente pu\u00f2 utilizzare l'applicazione.", + "The action you tried to perform is not allowed.": "L'azione che hai tentato di eseguire non \u00e8 consentita.", + "Not Enough Permissions": "Autorizzazioni insufficienti", + "The resource of the page you tried to access is not available or might have been deleted.": "La risorsa della pagina a cui hai tentato di accedere non \u00e8 disponibile o potrebbe essere stata eliminata.", + "Not Found Exception": "Eccezione non trovata", + "Provide your username.": "Fornisci il tuo nome utente.", + "Provide your password.": "Fornisci la tua password.", + "Provide your email.": "Fornisci la tua email.", + "Password Confirm": "Conferma la password", + "define the amount of the transaction.": "definire l'importo della transazione.", + "Further observation while proceeding.": "Ulteriori osservazioni mentre si procede.", + "determine what is the transaction type.": "determinare qual \u00e8 il tipo di transazione.", + "Add": "Aggiungere", + "Deduct": "Dedurre", + "Determine the amount of the transaction.": "Determina l'importo della transazione.", + "Further details about the transaction.": "Ulteriori dettagli sulla transazione.", + "Define the installments for the current order.": "Definire le rate per l'ordine corrente.", + "New Password": "nuova password", + "define your new password.": "definisci la tua nuova password.", + "confirm your new password.": "conferma la tua nuova password.", + "choose the payment type.": "scegli il tipo di pagamento.", + "Define the order name.": "Definire il nome dell'ordine.", + "Define the date of creation of the order.": "Definire la data di creazione dell'ordine.", + "Provide the procurement name.": "Fornire il nome dell'appalto.", + "Describe the procurement.": "Descrivi l'appalto.", + "Define the provider.": "Definire il fornitore.", + "Define what is the unit price of the product.": "Definire qual \u00e8 il prezzo unitario del prodotto.", + "Condition": "Condizione", + "Determine in which condition the product is returned.": "Determina in quali condizioni viene restituito il prodotto.", + "Other Observations": "Altre osservazioni", + "Describe in details the condition of the returned product.": "Descrivi in \u200b\u200bdettaglio le condizioni del prodotto restituito.", + "Unit Group Name": "Nome gruppo unit\u00e0", + "Provide a unit name to the unit.": "Fornire un nome di unit\u00e0 all'unit\u00e0.", + "Describe the current unit.": "Descrivi l'unit\u00e0 corrente.", + "assign the current unit to a group.": "assegnare l'unit\u00e0 corrente a un gruppo.", + "define the unit value.": "definire il valore dell'unit\u00e0.", + "Provide a unit name to the units group.": "Fornire un nome di unit\u00e0 al gruppo di unit\u00e0.", + "Describe the current unit group.": "Descrivi il gruppo di unit\u00e0 corrente.", + "POS": "POS", + "Open POS": "Apri POS", + "Create Register": "Crea Registrati", + "Use Customer Billing": "Usa fatturazione cliente", + "Define whether the customer billing information should be used.": "Definire se devono essere utilizzate le informazioni di fatturazione del cliente.", + "General Shipping": "Spedizione generale", + "Define how the shipping is calculated.": "Definisci come viene calcolata la spedizione.", + "Shipping Fees": "Spese di spedizione", + "Define shipping fees.": "Definire le spese di spedizione.", + "Use Customer Shipping": "Usa la spedizione del cliente", + "Define whether the customer shipping information should be used.": "Definire se devono essere utilizzate le informazioni di spedizione del cliente.", + "Invoice Number": "Numero di fattura", + "If the procurement has been issued outside of NexoPOS, please provide a unique reference.": "Se l'appalto \u00e8 stato emesso al di fuori di NexoPOS, fornire un riferimento univoco.", + "Delivery Time": "Tempi di consegna", + "If the procurement has to be delivered at a specific time, define the moment here.": "Se l'approvvigionamento deve essere consegnato in un momento specifico, definire qui il momento.", + "Automatic Approval": "Approvazione automatica", + "Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.": "Determinare se l'approvvigionamento deve essere contrassegnato automaticamente come approvato una volta scaduto il termine di consegna.", + "Determine what is the actual payment status of the procurement.": "Determinare qual \u00e8 l'effettivo stato di pagamento dell'appalto.", + "Determine what is the actual provider of the current procurement.": "Determinare qual \u00e8 il fornitore effettivo dell'attuale appalto.", + "Provide a name that will help to identify the procurement.": "Fornire un nome che aiuti a identificare l'appalto.", + "First Name": "Nome di battesimo", + "Avatar": "Avatar", + "Define the image that should be used as an avatar.": "Definisci l'immagine da utilizzare come avatar.", + "Language": "Lingua", + "Choose the language for the current account.": "Scegli la lingua per il conto corrente.", + "Security": "Sicurezza", + "Old Password": "vecchia password", + "Provide the old password.": "Fornisci la vecchia password.", + "Change your password with a better stronger password.": "Cambia la tua password con una password pi\u00f9 forte.", + "Password Confirmation": "Conferma password", + "The profile has been successfully saved.": "Il profilo \u00e8 stato salvato con successo.", + "The user attribute has been saved.": "L'attributo utente \u00e8 stato salvato.", + "The options has been successfully updated.": "Le opzioni sono state aggiornate con successo.", + "Wrong password provided": "\u00c8 stata fornita una password errata", + "Wrong old password provided": "\u00c8 stata fornita una vecchia password errata", + "Password Successfully updated.": "Password aggiornata con successo.", + "Sign In — NexoPOS": "Accedi — NexoPOS", + "Sign Up — NexoPOS": "Registrati — NexoPOS", + "Password Lost": "Password smarrita", + "Unable to proceed as the token provided is invalid.": "Impossibile procedere poich\u00e9 il token fornito non \u00e8 valido.", + "The token has expired. Please request a new activation token.": "Il token \u00e8 scaduto. Richiedi un nuovo token di attivazione.", + "Set New Password": "Imposta nuova password", + "Database Update": "Aggiornamento del database", + "This account is disabled.": "Questo account \u00e8 disabilitato.", + "Unable to find record having that username.": "Impossibile trovare il record con quel nome utente.", + "Unable to find record having that password.": "Impossibile trovare il record con quella password.", + "Invalid username or password.": "Nome utente o password errati.", + "Unable to login, the provided account is not active.": "Impossibile accedere, l'account fornito non \u00e8 attivo.", + "You have been successfully connected.": "Sei stato connesso con successo.", + "The recovery email has been send to your inbox.": "L'e-mail di recupero \u00e8 stata inviata alla tua casella di posta.", + "Unable to find a record matching your entry.": "Impossibile trovare un record che corrisponda alla tua voce.", + "Your Account has been created but requires email validation.": "Il tuo account \u00e8 stato creato ma richiede la convalida dell'e-mail.", + "Unable to find the requested user.": "Impossibile trovare l'utente richiesto.", + "Unable to proceed, the provided token is not valid.": "Impossibile procedere, il token fornito non \u00e8 valido.", + "Unable to proceed, the token has expired.": "Impossibile procedere, il token \u00e8 scaduto.", + "Your password has been updated.": "La tua password \u00e8 stata aggiornata.", + "Unable to edit a register that is currently in use": "Impossibile modificare un registro attualmente in uso", + "No register has been opened by the logged user.": "Nessun registro \u00e8 stato aperto dall'utente registrato.", + "The register is opened.": "Il registro \u00e8 aperto.", + "Closing": "Chiusura", + "Opening": "Apertura", + "Sale": "Vendita", + "Refund": "Rimborso", + "Unable to find the category using the provided identifier": "Impossibile trovare la categoria utilizzando l'identificatore fornito", + "The category has been deleted.": "La categoria \u00e8 stata eliminata.", + "Unable to find the category using the provided identifier.": "Impossibile trovare la categoria utilizzando l'identificatore fornito.", + "Unable to find the attached category parent": "Impossibile trovare la categoria allegata genitore", + "The category has been correctly saved": "La categoria \u00e8 stata salvata correttamente", + "The category has been updated": "La categoria \u00e8 stata aggiornata", + "The entry has been successfully deleted.": "La voce \u00e8 stata eliminata con successo.", + "A new entry has been successfully created.": "Una nuova voce \u00e8 stata creata con successo.", + "Unhandled crud resource": "Risorsa crud non gestita", + "You need to select at least one item to delete": "Devi selezionare almeno un elemento da eliminare", + "You need to define which action to perform": "Devi definire quale azione eseguire", + "%s has been processed, %s has not been processed.": "%s \u00e8 stato elaborato, %s non \u00e8 stato elaborato.", + "Unable to proceed. No matching CRUD resource has been found.": "Impossibile procedere. Non \u00e8 stata trovata alcuna risorsa CRUD corrispondente.", + "Create Coupon": "Crea coupon", + "helps you creating a coupon.": "ti aiuta a creare un coupon.", + "Edit Coupon": "Modifica coupon", + "Editing an existing coupon.": "Modifica di un coupon esistente.", + "Invalid Request.": "Richiesta non valida.", + "Unable to delete a group to which customers are still assigned.": "Impossibile eliminare un gruppo a cui i clienti sono ancora assegnati.", + "The customer group has been deleted.": "Il gruppo di clienti \u00e8 stato eliminato.", + "Unable to find the requested group.": "Impossibile trovare il gruppo richiesto.", + "The customer group has been successfully created.": "Il gruppo di clienti \u00e8 stato creato con successo.", + "The customer group has been successfully saved.": "Il gruppo di clienti \u00e8 stato salvato con successo.", + "Unable to transfer customers to the same account.": "Impossibile trasferire i clienti sullo stesso account.", + "The categories has been transferred to the group %s.": "Le categorie sono state trasferite al gruppo %s.", + "No customer identifier has been provided to proceed to the transfer.": "Non \u00e8 stato fornito alcun identificativo cliente per procedere al trasferimento.", + "Unable to find the requested group using the provided id.": "Impossibile trovare il gruppo richiesto utilizzando l'ID fornito.", + "\"%s\" is not an instance of \"FieldsService\"": "\"%s\" is not an instance of \"FieldsService\"", + "Manage Medias": "Gestisci media Media", + "Modules List": "Elenco moduli", + "List all available modules.": "Elenca tutti i moduli disponibili.", + "Upload A Module": "Carica un modulo", + "Extends NexoPOS features with some new modules.": "Estende le funzionalit\u00e0 di NexoPOS con alcuni nuovi moduli.", + "The notification has been successfully deleted": "La notifica \u00e8 stata eliminata con successo", + "All the notifications have been cleared.": "Tutte le notifiche sono state cancellate.", + "Order Invoice — %s": "Fattura dell'ordine — %S", + "Order Receipt — %s": "Ricevuta dell'ordine — %S", + "The printing event has been successfully dispatched.": "L'evento di stampa \u00e8 stato inviato con successo.", + "There is a mismatch between the provided order and the order attached to the instalment.": "C'\u00e8 una discrepanza tra l'ordine fornito e l'ordine allegato alla rata.", + "Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.": "Impossibile modificare un approvvigionamento stoccato. Prendere in considerazione l'esecuzione di una rettifica o l'eliminazione dell'approvvigionamento.", + "New Procurement": "Nuovo appalto", + "Edit Procurement": "Modifica approvvigionamento", + "Perform adjustment on existing procurement.": "Eseguire l'adeguamento sugli appalti esistenti.", + "%s - Invoice": "%s - Fattura", + "list of product procured.": "elenco dei prodotti acquistati.", + "The product price has been refreshed.": "Il prezzo del prodotto \u00e8 stato aggiornato.", + "The single variation has been deleted.": "La singola variazione \u00e8 stata eliminata.", + "Edit a product": "Modifica un prodotto", + "Makes modifications to a product": "Apporta modifiche a un prodotto", + "Create a product": "Crea un prodotto", + "Add a new product on the system": "Aggiungi un nuovo prodotto al sistema", + "Stock Adjustment": "Adeguamento delle scorte", + "Adjust stock of existing products.": "Adeguare lo stock di prodotti esistenti.", + "No stock is provided for the requested product.": "Nessuna giacenza \u00e8 prevista per il prodotto richiesto.", + "The product unit quantity has been deleted.": "La quantit\u00e0 dell'unit\u00e0 di prodotto \u00e8 stata eliminata.", + "Unable to proceed as the request is not valid.": "Impossibile procedere perch\u00e9 la richiesta non \u00e8 valida.", + "Unsupported action for the product %s.": "Azione non supportata per il prodotto %s.", + "The stock has been adjustment successfully.": "Lo stock \u00e8 stato aggiustato con successo.", + "Unable to add the product to the cart as it has expired.": "Impossibile aggiungere il prodotto al carrello in quanto scaduto.", + "Unable to add a product that has accurate tracking enabled, using an ordinary barcode.": "Impossibile aggiungere un prodotto per il quale \u00e8 abilitato il monitoraggio accurato, utilizzando un normale codice a barre.", + "There is no products matching the current request.": "Non ci sono prodotti corrispondenti alla richiesta corrente.", + "Print Labels": "Stampa etichette", + "Customize and print products labels.": "Personalizza e stampa le etichette dei prodotti.", + "Sales Report": "Rapporto delle vendite", + "Provides an overview over the sales during a specific period": "Fornisce una panoramica sulle vendite durante un periodo specifico", + "Provides an overview over the best products sold during a specific period.": "Fornisce una panoramica sui migliori prodotti venduti durante un periodo specifico.", + "Sold Stock": "Stock venduto", + "Provides an overview over the sold stock during a specific period.": "Fornisce una panoramica sullo stock venduto durante un periodo specifico.", + "Profit Report": "Rapporto sui profitti", + "Provides an overview of the provide of the products sold.": "Fornisce una panoramica della fornitura dei prodotti venduti.", + "Provides an overview on the activity for a specific period.": "Fornisce una panoramica dell'attivit\u00e0 per un periodo specifico.", + "Annual Report": "Relazione annuale", + "Sales By Payment Types": "Vendite per tipi di pagamento", + "Provide a report of the sales by payment types, for a specific period.": "Fornire un report delle vendite per tipi di pagamento, per un periodo specifico.", + "The report will be computed for the current year.": "Il rendiconto sar\u00e0 calcolato per l'anno in corso.", + "Unknown report to refresh.": "Rapporto sconosciuto da aggiornare.", + "Invalid authorization code provided.": "Codice di autorizzazione fornito non valido.", + "The database has been successfully seeded.": "Il database \u00e8 stato seminato con successo.", + "Settings Page Not Found": "Pagina Impostazioni non trovata", + "Customers Settings": "Impostazioni clienti", + "Configure the customers settings of the application.": "Configurare le impostazioni dei clienti dell'applicazione.", + "General Settings": "impostazioni generali", + "Configure the general settings of the application.": "Configura le impostazioni generali dell'applicazione.", + "Orders Settings": "Impostazioni ordini", + "POS Settings": "Impostazioni POS", + "Configure the pos settings.": "Configura le impostazioni della posizione.", + "Workers Settings": "Impostazioni dei lavoratori", + "%s is not an instance of \"%s\".": "%s non \u00e8 un'istanza di \"%s\".", + "Unable to find the requested product tax using the provided id": "Impossibile trovare l'imposta sul prodotto richiesta utilizzando l'ID fornito", + "Unable to find the requested product tax using the provided identifier.": "Impossibile trovare l'imposta sul prodotto richiesta utilizzando l'identificatore fornito.", + "The product tax has been created.": "L'imposta sul prodotto \u00e8 stata creata.", + "The product tax has been updated": "L'imposta sul prodotto \u00e8 stata aggiornata", + "Unable to retrieve the requested tax group using the provided identifier \"%s\".": "Impossibile recuperare il gruppo fiscale richiesto utilizzando l'identificatore fornito \"%s\".", + "Permission Manager": "Gestore dei permessi", + "Manage all permissions and roles": "Gestisci tutti i permessi e i ruoli", + "My Profile": "Il mio profilo", + "Change your personal settings": "Modifica le tue impostazioni personali", + "The permissions has been updated.": "Le autorizzazioni sono state aggiornate.", + "Sunday": "Domenica", + "Monday": "luned\u00ec", + "Tuesday": "marted\u00ec", + "Wednesday": "Mercoled\u00ec", + "Thursday": "Gioved\u00ec", + "Friday": "venerd\u00ec", + "Saturday": "Sabato", + "The migration has successfully run.": "La migrazione \u00e8 stata eseguita correttamente.", + "Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.": "Impossibile inizializzare la pagina delle impostazioni. Impossibile istanziare l'identificatore \"%s\".", + "Unable to register. The registration is closed.": "Impossibile registrarsi. La registrazione \u00e8 chiusa.", + "Hold Order Cleared": "Mantieni l'ordine cancellato", + "Report Refreshed": "Rapporto aggiornato", + "The yearly report has been successfully refreshed for the year \"%s\".": "Il rapporto annuale \u00e8 stato aggiornato con successo per l'anno \"%s\".", + "[NexoPOS] Activate Your Account": "[NexoPOS] Attiva il tuo account", + "[NexoPOS] A New User Has Registered": "[NexoPOS] Si \u00e8 registrato un nuovo utente", + "[NexoPOS] Your Account Has Been Created": "[NexoPOS] Il tuo account \u00e8 stato creato", + "Unable to find the permission with the namespace \"%s\".": "Impossibile trovare l'autorizzazione con lo spazio dei nomi \"%s\".", + "Voided": "annullato", + "The register has been successfully opened": "Il registro \u00e8 stato aperto con successo", + "The register has been successfully closed": "Il registro \u00e8 stato chiuso con successo", + "The provided amount is not allowed. The amount should be greater than \"0\". ": "L'importo fornito non \u00e8 consentito. L'importo deve essere maggiore di \"0\". ", + "The cash has successfully been stored": "Il denaro \u00e8 stato archiviato con successo", + "Not enough fund to cash out.": "Fondi insufficienti per incassare.", + "The cash has successfully been disbursed.": "Il denaro \u00e8 stato erogato con successo.", + "In Use": "In uso", + "Opened": "Ha aperto", + "Delete Selected entries": "Elimina voci selezionate", + "%s entries has been deleted": "%s voci sono state cancellate", + "%s entries has not been deleted": "%s voci non sono state cancellate", + "Unable to find the customer using the provided id.": "Impossibile trovare il cliente utilizzando l'ID fornito.", + "The customer has been deleted.": "Il cliente \u00e8 stato eliminato.", + "The customer has been created.": "Il cliente \u00e8 stato creato.", + "Unable to find the customer using the provided ID.": "Impossibile trovare il cliente utilizzando l'ID fornito.", + "The customer has been edited.": "Il cliente \u00e8 stato modificato.", + "Unable to find the customer using the provided email.": "Impossibile trovare il cliente utilizzando l'e-mail fornita.", + "The customer account has been updated.": "Il conto cliente \u00e8 stato aggiornato.", + "Issuing Coupon Failed": "Emissione del coupon non riuscita", + "Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.": "Impossibile applicare un coupon allegato al premio \"%s\". Sembra che il coupon non esista pi\u00f9.", + "Unable to find a coupon with the provided code.": "Impossibile trovare un coupon con il codice fornito.", + "The coupon has been updated.": "Il coupon \u00e8 stato aggiornato.", + "The group has been created.": "Il gruppo \u00e8 stato creato.", + "Countable": "numerabile", + "Piece": "Pezzo", + "GST": "GST", + "SGST": "SGST", + "CGST": "CGST", + "Sample Procurement %s": "Acquisto del campione %s", + "generated": "generato", + "The media has been deleted": "Il supporto \u00e8 stato cancellato", + "Unable to find the media.": "Impossibile trovare il supporto.", + "Unable to find the requested file.": "Impossibile trovare il file richiesto.", + "Unable to find the media entry": "Impossibile trovare la voce dei media", + "Payment Types": "Modalit\u00e0 di pagamento", + "Medias": "Media", + "List": "Elenco", + "Customers Groups": "Gruppi di clienti", + "Create Group": "Creare un gruppo", + "Reward Systems": "Sistemi di ricompensa", + "Create Reward": "Crea ricompensa", + "List Coupons": "Elenco coupon", + "Providers": "fornitori", + "Create A Provider": "Crea un fornitore", + "Inventory": "Inventario", + "Create Product": "Crea prodotto", + "Create Category": "Crea categoria", + "Create Unit": "Crea unit\u00e0", + "Unit Groups": "Gruppi di unit\u00e0", + "Create Unit Groups": "Crea gruppi di unit\u00e0", + "Taxes Groups": "Gruppi di tasse", + "Create Tax Groups": "Crea gruppi fiscali", + "Create Tax": "Crea imposta", + "Modules": "Moduli", + "Upload Module": "Modulo di caricamento", + "Users": "Utenti", + "Create User": "Creare un utente", + "Roles": "Ruoli", + "Create Roles": "Crea ruoli", + "Permissions Manager": "Gestore dei permessi", + "Procurements": "Appalti", + "Reports": "Rapporti", + "Sale Report": "Rapporto di vendita", + "Incomes & Loosses": "Redditi e perdite", + "Sales By Payments": "Vendite tramite pagamenti", + "Invoice Settings": "Impostazioni fattura", + "Workers": "Lavoratori", + "Unable to locate the requested module.": "Impossibile individuare il modulo richiesto.", + "The module \"%s\" has been disabled as the dependency \"%s\" is missing. ": "Il modulo \"%s\" has been disabled as the dependency \"%s\" is missing. ", + "The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ": "Il modulo \"%s\" has been disabled as the dependency \"%s\" is not enabled. ", + "Unable to detect the folder from where to perform the installation.": "Impossibile rilevare la cartella da cui eseguire l'installazione.", + "The uploaded file is not a valid module.": "Il file caricato non \u00e8 un modulo valido.", + "The module has been successfully installed.": "Il modulo \u00e8 stato installato con successo.", + "The migration run successfully.": "La migrazione \u00e8 stata eseguita correttamente.", + "The module has correctly been enabled.": "Il modulo \u00e8 stato abilitato correttamente.", + "Unable to enable the module.": "Impossibile abilitare il modulo.", + "The Module has been disabled.": "Il Modulo \u00e8 stato disabilitato.", + "Unable to disable the module.": "Impossibile disabilitare il modulo.", + "Unable to proceed, the modules management is disabled.": "Impossibile procedere, la gestione dei moduli \u00e8 disabilitata.", + "Missing required parameters to create a notification": "Parametri obbligatori mancanti per creare una notifica", + "The order has been placed.": "L'ordine \u00e8 stato effettuato.", + "The percentage discount provided is not valid.": "La percentuale di sconto fornita non \u00e8 valida.", + "A discount cannot exceed the sub total value of an order.": "Uno sconto non pu\u00f2 superare il valore totale parziale di un ordine.", + "No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.": "Al momento non \u00e8 previsto alcun pagamento. Se il cliente desidera pagare in anticipo, valuta la possibilit\u00e0 di modificare la data di pagamento delle rate.", + "The payment has been saved.": "Il pagamento \u00e8 stato salvato.", + "Unable to edit an order that is completely paid.": "Impossibile modificare un ordine completamente pagato.", + "Unable to proceed as one of the previous submitted payment is missing from the order.": "Impossibile procedere poich\u00e9 nell'ordine manca uno dei precedenti pagamenti inviati.", + "The order payment status cannot switch to hold as a payment has already been made on that order.": "Lo stato di pagamento dell'ordine non pu\u00f2 passare in sospeso poich\u00e9 un pagamento \u00e8 gi\u00e0 stato effettuato su tale ordine.", + "Unable to proceed. One of the submitted payment type is not supported.": "Impossibile procedere. Uno dei tipi di pagamento inviati non \u00e8 supportato.", + "Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.": "Impossibile procedere, il prodotto \"%s\" has a unit which cannot be retreived. It might have been deleted.", + "Unable to find the customer using the provided ID. The order creation has failed.": "Impossibile trovare il cliente utilizzando l'ID fornito. La creazione dell'ordine non \u00e8 riuscita.", + "Unable to proceed a refund on an unpaid order.": "Impossibile procedere al rimborso su un ordine non pagato.", + "The current credit has been issued from a refund.": "Il credito corrente \u00e8 stato emesso da un rimborso.", + "The order has been successfully refunded.": "L'ordine \u00e8 stato rimborsato con successo.", + "unable to proceed to a refund as the provided status is not supported.": "impossibile procedere al rimborso poich\u00e9 lo stato fornito non \u00e8 supportato.", + "The product %s has been successfully refunded.": "Il prodotto %s \u00e8 stato rimborsato con successo.", + "Unable to find the order product using the provided id.": "Impossibile trovare il prodotto ordinato utilizzando l'ID fornito.", + "Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier": "Impossibile trovare l'ordine richiesto utilizzando \"%s\" as pivot and \"%s\" as identifier", + "Unable to fetch the order as the provided pivot argument is not supported.": "Impossibile recuperare l'ordine poich\u00e9 l'argomento pivot fornito non \u00e8 supportato.", + "The product has been added to the order \"%s\"": "Il prodotto \u00e8 stato aggiunto all'ordine \"%s\"", + "the order has been successfully computed.": "l'ordine \u00e8 stato calcolato con successo.", + "The order has been deleted.": "L'ordine \u00e8 stato cancellato.", + "The product has been successfully deleted from the order.": "Il prodotto \u00e8 stato eliminato con successo dall'ordine.", + "Unable to find the requested product on the provider order.": "Impossibile trovare il prodotto richiesto nell'ordine del fornitore.", + "Unpaid Orders Turned Due": "Ordini non pagati scaduti", + "No orders to handle for the moment.": "Nessun ordine da gestire per il momento.", + "The order has been correctly voided.": "L'ordine \u00e8 stato correttamente annullato.", + "Unable to edit an already paid instalment.": "Impossibile modificare una rata gi\u00e0 pagata.", + "The instalment has been saved.": "La rata \u00e8 stata salvata.", + "The instalment has been deleted.": "La rata \u00e8 stata cancellata.", + "The defined amount is not valid.": "L'importo definito non \u00e8 valido.", + "No further instalments is allowed for this order. The total instalment already covers the order total.": "Non sono consentite ulteriori rate per questo ordine. La rata totale copre gi\u00e0 il totale dell'ordine.", + "The instalment has been created.": "La rata \u00e8 stata creata.", + "The provided status is not supported.": "Lo stato fornito non \u00e8 supportato.", + "The order has been successfully updated.": "L'ordine \u00e8 stato aggiornato con successo.", + "Unable to find the requested procurement using the provided identifier.": "Impossibile trovare l'appalto richiesto utilizzando l'identificatore fornito.", + "Unable to find the assigned provider.": "Impossibile trovare il provider assegnato.", + "The procurement has been created.": "L'appalto \u00e8 stato creato.", + "Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.": "Impossibile modificare un approvvigionamento che \u00e8 gi\u00e0 stato stoccato. Si prega di considerare l'esecuzione e la regolazione delle scorte.", + "The provider has been edited.": "Il provider \u00e8 stato modificato.", + "Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"": "Impossibile avere un ID gruppo unit\u00e0 per il prodotto utilizzando il riferimento \"%s\" come \"%s\"", + "The operation has completed.": "L'operazione \u00e8 stata completata.", + "The procurement has been refreshed.": "L'approvvigionamento \u00e8 stato aggiornato.", + "The procurement has been reset.": "L'appalto \u00e8 stato ripristinato.", + "The procurement products has been deleted.": "I prodotti di approvvigionamento sono stati eliminati.", + "The procurement product has been updated.": "Il prodotto di approvvigionamento \u00e8 stato aggiornato.", + "Unable to find the procurement product using the provided id.": "Impossibile trovare il prodotto di approvvigionamento utilizzando l'ID fornito.", + "The product %s has been deleted from the procurement %s": "Il prodotto %s \u00e8 stato eliminato dall'approvvigionamento %s", + "The product with the following ID \"%s\" is not initially included on the procurement": "Il prodotto con il seguente ID \"%s\" is not initially included on the procurement", + "The procurement products has been updated.": "I prodotti di approvvigionamento sono stati aggiornati.", + "Procurement Automatically Stocked": "Approvvigionamento immagazzinato automaticamente", + "Draft": "Brutta copia", + "The category has been created": "La categoria \u00e8 stata creata", + "Unable to find the product using the provided id.": "Impossibile trovare il prodotto utilizzando l'ID fornito.", + "Unable to find the requested product using the provided SKU.": "Impossibile trovare il prodotto richiesto utilizzando lo SKU fornito.", + "The variable product has been created.": "Il prodotto variabile \u00e8 stato creato.", + "The provided barcode \"%s\" is already in use.": "Il codice a barre fornito \"%s\" is already in use.", + "The provided SKU \"%s\" is already in use.": "Lo SKU fornito \"%s\" is already in use.", + "The product has been saved.": "Il prodotto \u00e8 stato salvato.", + "The provided barcode is already in use.": "Il codice a barre fornito \u00e8 gi\u00e0 in uso.", + "The provided SKU is already in use.": "Lo SKU fornito \u00e8 gi\u00e0 in uso.", + "The product has been updated": "Il prodotto \u00e8 stato aggiornato", + "The variable product has been updated.": "Il prodotto variabile \u00e8 stato aggiornato.", + "The product variations has been reset": "Le variazioni del prodotto sono state ripristinate", + "The product has been reset.": "Il prodotto \u00e8 stato ripristinato.", + "The product \"%s\" has been successfully deleted": "Il prodotto \"%s\" has been successfully deleted", + "Unable to find the requested variation using the provided ID.": "Impossibile trovare la variazione richiesta utilizzando l'ID fornito.", + "The product stock has been updated.": "Lo stock del prodotto \u00e8 stato aggiornato.", + "The action is not an allowed operation.": "L'azione non \u00e8 un'operazione consentita.", + "The product quantity has been updated.": "La quantit\u00e0 del prodotto \u00e8 stata aggiornata.", + "There is no variations to delete.": "Non ci sono variazioni da eliminare.", + "There is no products to delete.": "Non ci sono prodotti da eliminare.", + "The product variation has been successfully created.": "La variazione del prodotto \u00e8 stata creata con successo.", + "The product variation has been updated.": "La variazione del prodotto \u00e8 stata aggiornata.", + "The provider has been created.": "Il provider \u00e8 stato creato.", + "The provider has been updated.": "Il provider \u00e8 stato aggiornato.", + "Unable to find the provider using the specified id.": "Impossibile trovare il provider utilizzando l'id specificato.", + "The provider has been deleted.": "Il provider \u00e8 stato eliminato.", + "Unable to find the provider using the specified identifier.": "Impossibile trovare il provider utilizzando l'identificatore specificato.", + "The provider account has been updated.": "L'account del provider \u00e8 stato aggiornato.", + "The procurement payment has been deducted.": "Il pagamento dell'appalto \u00e8 stato detratto.", + "The dashboard report has been updated.": "Il report della dashboard \u00e8 stato aggiornato.", + "Untracked Stock Operation": "Operazione di magazzino non tracciata", + "Unsupported action": "Azione non supportata", + "The expense has been correctly saved.": "La spesa \u00e8 stata salvata correttamente.", + "The report has been computed successfully.": "Il rapporto \u00e8 stato calcolato con successo.", + "The table has been truncated.": "La tabella \u00e8 stata troncata.", + "Untitled Settings Page": "Pagina delle impostazioni senza titolo", + "No description provided for this settings page.": "Nessuna descrizione fornita per questa pagina delle impostazioni.", + "The form has been successfully saved.": "Il modulo \u00e8 stato salvato con successo.", + "Unable to reach the host": "Impossibile raggiungere l'host", + "Unable to connect to the database using the credentials provided.": "Impossibile connettersi al database utilizzando le credenziali fornite.", + "Unable to select the database.": "Impossibile selezionare il database.", + "Access denied for this user.": "Accesso negato per questo utente.", + "The connexion with the database was successful": "La connessione con il database \u00e8 andata a buon fine", + "Cash": "Contanti", + "Bank Payment": "Pagamento bancario", + "NexoPOS has been successfully installed.": "NexoPOS \u00e8 stato installato con successo.", + "A tax cannot be his own parent.": "Una tassa non pu\u00f2 essere il suo stesso genitore.", + "The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".": "La gerarchia delle imposte \u00e8 limitata a 1. Una sottoimposta non deve avere il tipo di imposta impostato su \"raggruppata\".", + "Unable to find the requested tax using the provided identifier.": "Impossibile trovare l'imposta richiesta utilizzando l'identificatore fornito.", + "The tax group has been correctly saved.": "Il gruppo fiscale \u00e8 stato salvato correttamente.", + "The tax has been correctly created.": "La tassa \u00e8 stata creata correttamente.", + "The tax has been successfully deleted.": "L'imposta \u00e8 stata eliminata con successo.", + "The Unit Group has been created.": "Il gruppo di unit\u00e0 \u00e8 stato creato.", + "The unit group %s has been updated.": "Il gruppo di unit\u00e0 %s \u00e8 stato aggiornato.", + "Unable to find the unit group to which this unit is attached.": "Impossibile trovare il gruppo di unit\u00e0 a cui \u00e8 collegata questa unit\u00e0.", + "The unit has been saved.": "L'unit\u00e0 \u00e8 stata salvata.", + "Unable to find the Unit using the provided id.": "Impossibile trovare l'unit\u00e0 utilizzando l'ID fornito.", + "The unit has been updated.": "L'unit\u00e0 \u00e8 stata aggiornata.", + "The unit group %s has more than one base unit": "Il gruppo di unit\u00e0 %s ha pi\u00f9 di un'unit\u00e0 di base", + "The unit has been deleted.": "L'unit\u00e0 \u00e8 stata eliminata.", + "unable to find this validation class %s.": "impossibile trovare questa classe di convalida %s.", + "Enable Reward": "Abilita ricompensa", + "Will activate the reward system for the customers.": "Attiver\u00e0 il sistema di ricompensa per i clienti.", + "Default Customer Account": "Account cliente predefinito", + "Default Customer Group": "Gruppo clienti predefinito", + "Select to which group each new created customers are assigned to.": "Seleziona a quale gruppo sono assegnati i nuovi clienti creati.", + "Enable Credit & Account": "Abilita credito e account", + "The customers will be able to make deposit or obtain credit.": "I clienti potranno effettuare depositi o ottenere credito.", + "Store Name": "Nome del negozio", + "This is the store name.": "Questo \u00e8 il nome del negozio.", + "Store Address": "Indirizzo del negozio", + "The actual store address.": "L'effettivo indirizzo del negozio.", + "Store City": "Citt\u00e0 del negozio", + "The actual store city.": "La vera citt\u00e0 del negozio.", + "Store Phone": "Telefono negozio", + "The phone number to reach the store.": "Il numero di telefono per raggiungere il punto vendita.", + "Store Email": "E-mail del negozio", + "The actual store email. Might be used on invoice or for reports.": "L'e-mail del negozio reale. Potrebbe essere utilizzato su fattura o per report.", + "Store PO.Box": "Negozio PO.Box", + "The store mail box number.": "Il numero della casella di posta del negozio.", + "Store Fax": "Negozio fax", + "The store fax number.": "Il numero di fax del negozio.", + "Store Additional Information": "Memorizzare informazioni aggiuntive", + "Store additional information.": "Memorizza ulteriori informazioni.", + "Store Square Logo": "Logo quadrato del negozio", + "Choose what is the square logo of the store.": "Scegli qual \u00e8 il logo quadrato del negozio.", + "Store Rectangle Logo": "Negozio Rettangolo Logo", + "Choose what is the rectangle logo of the store.": "Scegli qual \u00e8 il logo rettangolare del negozio.", + "Define the default fallback language.": "Definire la lingua di fallback predefinita.", + "Currency": "Moneta", + "Currency Symbol": "Simbolo di valuta", + "This is the currency symbol.": "Questo \u00e8 il simbolo della valuta.", + "Currency ISO": "Valuta ISO", + "The international currency ISO format.": "Il formato ISO della valuta internazionale.", + "Currency Position": "Posizione valutaria", + "Before the amount": "Prima dell'importo", + "After the amount": "Dopo l'importo", + "Define where the currency should be located.": "Definisci dove deve essere posizionata la valuta.", + "Preferred Currency": "Valuta preferita", + "ISO Currency": "Valuta ISO", + "Symbol": "Simbolo", + "Determine what is the currency indicator that should be used.": "Determina qual \u00e8 l'indicatore di valuta da utilizzare.", + "Currency Thousand Separator": "Separatore di migliaia di valute", + "Currency Decimal Separator": "Separatore decimale di valuta", + "Define the symbol that indicate decimal number. By default \".\" is used.": "Definire il simbolo che indica il numero decimale. Per impostazione predefinita viene utilizzato \".\".", + "Currency Precision": "Precisione della valuta", + "%s numbers after the decimal": "%s numeri dopo la virgola", + "Date Format": "Formato data", + "This define how the date should be defined. The default format is \"Y-m-d\".": "Questo definisce come deve essere definita la data. Il formato predefinito \u00e8 \"Y-m-d\".", + "Registration": "Registrazione", + "Registration Open": "Iscrizioni aperte", + "Determine if everyone can register.": "Determina se tutti possono registrarsi.", + "Registration Role": "Ruolo di registrazione", + "Select what is the registration role.": "Seleziona qual \u00e8 il ruolo di registrazione.", + "Requires Validation": "Richiede convalida", + "Force account validation after the registration.": "Forza la convalida dell'account dopo la registrazione.", + "Allow Recovery": "Consenti recupero", + "Allow any user to recover his account.": "Consenti a qualsiasi utente di recuperare il suo account.", + "Receipts": "Ricevute", + "Receipt Template": "Modello di ricevuta", + "Default": "Predefinito", + "Choose the template that applies to receipts": "Scegli il modello che si applica alle ricevute", + "Receipt Logo": "Logo della ricevuta", + "Provide a URL to the logo.": "Fornisci un URL al logo.", + "Receipt Footer": "Pi\u00e8 di pagina della ricevuta", + "If you would like to add some disclosure at the bottom of the receipt.": "Se desideri aggiungere qualche informativa in fondo alla ricevuta.", + "Column A": "Colonna A", + "Column B": "Colonna B", + "Order Code Type": "Tipo di codice d'ordine", + "Determine how the system will generate code for each orders.": "Determina come il sistema generer\u00e0 il codice per ogni ordine.", + "Sequential": "Sequenziale", + "Random Code": "Codice casuale", + "Number Sequential": "Numero sequenziale", + "Allow Unpaid Orders": "Consenti ordini non pagati", + "Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".": "Eviter\u00e0 che vengano effettuati ordini incompleti. Se il credito \u00e8 consentito, questa opzione dovrebbe essere impostata su \"yes\".", + "Allow Partial Orders": "Consenti ordini parziali", + "Will prevent partially paid orders to be placed.": "Impedisce l'effettuazione di ordini parzialmente pagati.", + "Quotation Expiration": "Scadenza del preventivo", + "Quotations will get deleted after they defined they has reached.": "Le citazioni verranno eliminate dopo che sono state definite.", + "%s Days": "%s giorni", + "Features": "Caratteristiche", + "Show Quantity": "Mostra quantit\u00e0", + "Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.": "Mostrer\u00e0 il selettore della quantit\u00e0 durante la scelta di un prodotto. In caso contrario, la quantit\u00e0 predefinita \u00e8 impostata su 1.", + "Allow Customer Creation": "Consenti la creazione del cliente", + "Allow customers to be created on the POS.": "Consenti la creazione di clienti sul POS.", + "Quick Product": "Prodotto veloce", + "Allow quick product to be created from the POS.": "Consenti la creazione rapida di prodotti dal POS.", + "Editable Unit Price": "Prezzo unitario modificabile", + "Allow product unit price to be edited.": "Consenti la modifica del prezzo unitario del prodotto.", + "Order Types": "Tipi di ordine", + "Control the order type enabled.": "Controlla il tipo di ordine abilitato.", + "Layout": "Disposizione", + "Retail Layout": "Layout di vendita al dettaglio", + "Clothing Shop": "Negozio di vestiti", + "POS Layout": "Layout POS", + "Change the layout of the POS.": "Modificare il layout del POS.", + "Printing": "Stampa", + "Printed Document": "Documento stampato", + "Choose the document used for printing aster a sale.": "Scegli il documento utilizzato per la stampa dopo una vendita.", + "Printing Enabled For": "Stampa abilitata per", + "All Orders": "Tutti gli ordini", + "From Partially Paid Orders": "Da ordini parzialmente pagati", + "Only Paid Orders": "Solo ordini pagati", + "Determine when the printing should be enabled.": "Determinare quando abilitare la stampa.", + "Printing Gateway": "Gateway di stampa", + "Determine what is the gateway used for printing.": "Determina qual \u00e8 il gateway utilizzato per la stampa.", + "Enable Cash Registers": "Abilita registratori di cassa", + "Determine if the POS will support cash registers.": "Determina se il POS supporter\u00e0 i registratori di cassa.", + "Cashier Idle Counter": "Contatore inattivo del cassiere", + "5 Minutes": "5 minuti", + "10 Minutes": "10 minuti", + "15 Minutes": "15 minuti", + "20 Minutes": "20 minuti", + "30 Minutes": "30 minuti", + "Selected after how many minutes the system will set the cashier as idle.": "Selezionato dopo quanti minuti il \u200b\u200bsistema imposter\u00e0 la cassa come inattiva.", + "Cash Disbursement": "Pagamento in contanti", + "Allow cash disbursement by the cashier.": "Consentire l'esborso in contanti da parte del cassiere.", + "Cash Registers": "Registratori di cassa", + "Keyboard Shortcuts": "Tasti rapidi", + "Cancel Order": "Annulla Ordine", + "Keyboard shortcut to cancel the current order.": "Scorciatoia da tastiera per annullare l'ordine corrente.", + "Keyboard shortcut to hold the current order.": "Scorciatoia da tastiera per mantenere l'ordine corrente.", + "Keyboard shortcut to create a customer.": "Scorciatoia da tastiera per creare un cliente.", + "Proceed Payment": "Procedi al pagamento", + "Keyboard shortcut to proceed to the payment.": "Scorciatoia da tastiera per procedere al pagamento.", + "Open Shipping": "Spedizione aperta", + "Keyboard shortcut to define shipping details.": "Scorciatoia da tastiera per definire i dettagli di spedizione.", + "Open Note": "Apri nota", + "Keyboard shortcut to open the notes.": "Scorciatoia da tastiera per aprire le note.", + "Order Type Selector": "Selettore del tipo di ordine", + "Keyboard shortcut to open the order type selector.": "Scorciatoia da tastiera per aprire il selettore del tipo di ordine.", + "Toggle Fullscreen": "Passare a schermo intero", + "Keyboard shortcut to toggle fullscreen.": "Scorciatoia da tastiera per attivare lo schermo intero.", + "Quick Search": "Ricerca rapida", + "Keyboard shortcut open the quick search popup.": "La scorciatoia da tastiera apre il popup di ricerca rapida.", + "Amount Shortcuts": "Scorciatoie per l'importo", + "VAT Type": "Tipo di IVA", + "Determine the VAT type that should be used.": "Determinare il tipo di IVA da utilizzare.", + "Flat Rate": "Tasso fisso", + "Flexible Rate": "Tariffa Flessibile", + "Products Vat": "Prodotti Iva", + "Products & Flat Rate": "Prodotti e tariffa fissa", + "Products & Flexible Rate": "Prodotti e tariffa flessibile", + "Define the tax group that applies to the sales.": "Definire il gruppo imposte che si applica alle vendite.", + "Define how the tax is computed on sales.": "Definire come viene calcolata l'imposta sulle vendite.", + "VAT Settings": "Impostazioni IVA", + "Enable Email Reporting": "Abilita segnalazione e-mail", + "Determine if the reporting should be enabled globally.": "Determina se i rapporti devono essere abilitati a livello globale.", + "Supplies": "Forniture", + "Public Name": "Nome pubblico", + "Define what is the user public name. If not provided, the username is used instead.": "Definire qual \u00e8 il nome pubblico dell'utente. Se non fornito, viene utilizzato il nome utente.", + "Enable Workers": "Abilita i lavoratori", + "Test": "Test", + "Processing Status": "Stato di elaborazione", + "Refunded Products": "Prodotti rimborsati", + "The delivery status of the order will be changed. Please confirm your action.": "Lo stato di consegna dell'ordine verr\u00e0 modificato. Conferma la tua azione.", + "Order Refunds": "Rimborsi degli ordini", + "Unable to proceed": "Impossibile procedere", + "Partially paid orders are disabled.": "Gli ordini parzialmente pagati sono disabilitati.", + "An order is currently being processed.": "Un ordine \u00e8 attualmente in fase di elaborazione.", + "Refund receipt": "Ricevuta di rimborso", + "Refund Receipt": "Ricevuta di rimborso", + "Order Refund Receipt — %s": "Ricevuta di rimborso dell'ordine — %S", + "Not Available": "Non disponibile", + "Create a customer": "Crea un cliente", + "Credit": "Credito", + "Debit": "Addebito", + "All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.": "Tutte le entit\u00e0 collegate a questa categoria produrranno un \"credito\" o un \"debito\" nella cronologia del flusso di cassa.", + "Account": "Account", + "Provide the accounting number for this category.": "Fornire il numero di contabilit\u00e0 per questa categoria.", + "Accounting": "Contabilit\u00e0", + "Procurement Cash Flow Account": "Conto del flusso di cassa dell'approvvigionamento", + "Sale Cash Flow Account": "Conto flusso di cassa vendita", + "Sales Refunds Account": "Conto Rimborsi Vendite", + "Stock return for spoiled items will be attached to this account": "Il reso in magazzino per gli articoli rovinati sar\u00e0 allegato a questo account", + "The reason has been updated.": "Il motivo \u00e8 stato aggiornato.", + "You must select a customer before applying a coupon.": "Devi selezionare un cliente prima di applicare un coupon.", + "No coupons for the selected customer...": "Nessun coupon per il cliente selezionato...", + "Use Coupon": "Usa coupon", + "Use Customer ?": "Usa cliente?", + "No customer is selected. Would you like to proceed with this customer ?": "Nessun cliente selezionato. Vuoi procedere con questo cliente?", + "Change Customer ?": "Cambia cliente?", + "Would you like to assign this customer to the ongoing order ?": "Vuoi assegnare questo cliente all'ordine in corso?", + "Product \/ Service": "Prodotto \/ Servizio", + "An error has occurred while computing the product.": "Si \u00e8 verificato un errore durante il calcolo del prodotto.", + "Provide a unique name for the product.": "Fornire un nome univoco per il prodotto.", + "Define what is the sale price of the item.": "Definire qual \u00e8 il prezzo di vendita dell'articolo.", + "Set the quantity of the product.": "Imposta la quantit\u00e0 del prodotto.", + "Define what is tax type of the item.": "Definire qual \u00e8 il tipo di imposta dell'articolo.", + "Choose the tax group that should apply to the item.": "Scegli il gruppo imposte da applicare all'articolo.", + "Assign a unit to the product.": "Assegna un'unit\u00e0 al prodotto.", + "Some products has been added to the cart. Would youl ike to discard this order ?": "Alcuni prodotti sono stati aggiunti al carrello. Vuoi eliminare questo ordine?", + "Customer Accounts List": "Elenco dei conti dei clienti", + "Display all customer accounts.": "Visualizza tutti gli account cliente.", + "No customer accounts has been registered": "Nessun account cliente \u00e8 stato registrato", + "Add a new customer account": "Aggiungi un nuovo account cliente", + "Create a new customer account": "Crea un nuovo account cliente", + "Register a new customer account and save it.": "Registra un nuovo account cliente e salvalo.", + "Edit customer account": "Modifica account cliente", + "Modify Customer Account.": "Modifica account cliente.", + "Return to Customer Accounts": "Torna agli account dei clienti", + "This will be ignored.": "Questo verr\u00e0 ignorato.", + "Define the amount of the transaction": "Definire l'importo della transazione", + "Define what operation will occurs on the customer account.": "Definire quale operazione verr\u00e0 eseguita sul conto cliente.", + "Provider Procurements List": "Elenco degli appalti del fornitore", + "Display all provider procurements.": "Visualizza tutti gli appalti del fornitore.", + "No provider procurements has been registered": "Nessun approvvigionamento di fornitori \u00e8 stato registrato", + "Add a new provider procurement": "Aggiungi un nuovo approvvigionamento fornitore", + "Create a new provider procurement": "Crea un nuovo approvvigionamento fornitore", + "Register a new provider procurement and save it.": "Registra un nuovo approvvigionamento fornitore e salvalo.", + "Edit provider procurement": "Modifica approvvigionamento fornitore", + "Modify Provider Procurement.": "Modificare l'approvvigionamento del fornitore.", + "Return to Provider Procurements": "Ritorna agli appalti del fornitore", + "Delivered On": "Consegnato il", + "Items": "Elementi", + "Displays the customer account history for %s": "Visualizza la cronologia dell'account cliente per %s", + "Procurements by \"%s\"": "Appalti di \"%s\"", + "Crediting": "Accredito", + "Deducting": "Detrazione", + "Order Payment": "Pagamento dell'ordine", + "Order Refund": "Rimborso ordine", + "Unknown Operation": "Operazione sconosciuta", + "Unnamed Product": "Prodotto senza nome", + "Bubble": "Bolla", + "Ding": "Ding", + "Pop": "Pop", + "Cash Sound": "Suono di cassa", + "Sale Complete Sound": "Vendita Suono Completo", + "New Item Audio": "Nuovo elemento audio", + "The sound that plays when an item is added to the cart.": "Il suono che viene riprodotto quando un articolo viene aggiunto al carrello.", + "Howdy, {name}": "Howdy, {name}", + "Would you like to perform the selected bulk action on the selected entries ?": "Volete eseguire l'azione sfusa selezionata sulle voci selezionate?", + "The payment to be made today is less than what is expected.": "Il pagamento da apportare oggi \u00e8 inferiore a quanto previsto.", + "Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.": "Impossibile selezionare il cliente predefinito.Sembra che il cliente non esista pi\u00f9.Considera di cambiare il cliente predefinito sulle impostazioni.", + "How to change database configuration": "Come modificare la configurazione del database", + "Common Database Issues": "Problemi di database comuni", + "Setup": "Impostare", + "Query Exception": "Eccezione della query", + "The category products has been refreshed": "La categoria Prodotti \u00e8 stata aggiornata", + "The requested customer cannot be found.": "Il cliente richiesto non pu\u00f2 essere trovato.", + "Filters": "Filtri", + "Has Filters": "Ha filtri", + "N\/D": "NS", + "Range Starts": "Inizio gamma", + "Range Ends": "Fine intervallo", + "Search Filters": "Filtri di ricerca", + "Clear Filters": "Cancella filtri", + "Use Filters": "Usa filtri", + "No rewards available the selected customer...": "Nessun premio disponibile il cliente selezionato...", + "Unable to load the report as the timezone is not set on the settings.": "Impossibile caricare il rapporto poich\u00e9 il fuso orario non \u00e8 impostato nelle impostazioni.", + "There is no product to display...": "Nessun prodotto da visualizzare...", + "Method Not Allowed": "operazione non permessa", + "Documentation": "Documentazione", + "Module Version Mismatch": "Mancata corrispondenza della versione del modulo", + "Define how many time the coupon has been used.": "Definire quante volte \u00e8 stato utilizzato il coupon.", + "Define the maximum usage possible for this coupon.": "Definire l'utilizzo massimo possibile per questo coupon.", + "Restrict the orders by the creation date.": "Limita gli ordini entro la data di creazione.", + "Created Between": "Creato tra", + "Restrict the orders by the payment status.": "Limita gli ordini in base allo stato del pagamento.", + "Due With Payment": "dovuto con pagamento", + "Restrict the orders by the author.": "Limita gli ordini dell'autore.", + "Restrict the orders by the customer.": "Limita gli ordini del cliente.", + "Customer Phone": "Telefono cliente", + "Restrict orders using the customer phone number.": "Limita gli ordini utilizzando il numero di telefono del cliente.", + "Restrict the orders to the cash registers.": "Limita gli ordini ai registratori di cassa.", + "Low Quantity": "Quantit\u00e0 bassa", + "Which quantity should be assumed low.": "Quale quantit\u00e0 dovrebbe essere considerata bassa.", + "Stock Alert": "Avviso di magazzino", + "See Products": "Vedi prodotti", + "Provider Products List": "Elenco dei prodotti del fornitore", + "Display all Provider Products.": "Visualizza tutti i prodotti del fornitore.", + "No Provider Products has been registered": "Nessun prodotto del fornitore \u00e8 stato registrato", + "Add a new Provider Product": "Aggiungi un nuovo prodotto fornitore", + "Create a new Provider Product": "Crea un nuovo prodotto fornitore", + "Register a new Provider Product and save it.": "Registra un nuovo prodotto del fornitore e salvalo.", + "Edit Provider Product": "Modifica prodotto fornitore", + "Modify Provider Product.": "Modifica prodotto fornitore.", + "Return to Provider Products": "Ritorna ai prodotti del fornitore", + "Clone": "Clone", + "Would you like to clone this role ?": "Vuoi clonare questo ruolo?", + "Incompatibility Exception": "Eccezione di incompatibilit\u00e0", + "The requested file cannot be downloaded or has already been downloaded.": "Il file richiesto non pu\u00f2 essere scaricato o \u00e8 gi\u00e0 stato scaricato.", + "Low Stock Report": "Rapporto scorte basse", + "Low Stock Alert": "Avviso scorte in esaurimento", + "The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ": "Il modulo \"%s\" \u00e8 stato disabilitato poich\u00e9 la dipendenza \"%s\" non \u00e8 sulla versione minima richiesta \"%s\".", + "The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ": "Il modulo \"%s\" \u00e8 stato disabilitato poich\u00e9 la dipendenza \"%s\" \u00e8 su una versione oltre quella raccomandata \"%s\".", + "Clone of \"%s\"": "Clona di \"%s\"", + "The role has been cloned.": "Il ruolo \u00e8 stato clonato.", + "Merge Products On Receipt\/Invoice": "Unisci prodotti alla ricevuta\/fattura", + "All similar products will be merged to avoid a paper waste for the receipt\/invoice.": "Tutti i prodotti simili verranno accorpati per evitare spreco di carta per scontrino\/fattura.", + "Define whether the stock alert should be enabled for this unit.": "Definire se l'avviso stock deve essere abilitato per questa unit\u00e0.", + "All Refunds": "Tutti i rimborsi", + "No result match your query.": "Nessun risultato corrisponde alla tua richiesta.", + "Report Type": "Tipo di rapporto", + "Categories Detailed": "Categorie dettagliate", + "Categories Summary": "Riepilogo categorie", + "Allow you to choose the report type.": "Consentono di scegliere il tipo di rapporto.", + "Unknown": "Sconosciuto", + "Not Authorized": "Non autorizzato", + "Creating customers has been explicitly disabled from the settings.": "La creazione di clienti \u00e8 stata esplicitamente disabilitata dalle impostazioni.", + "Sales Discounts": "Sconti sulle vendite", + "Sales Taxes": "Tasse sul commercio", + "Birth Date": "Data di nascita", + "Displays the customer birth date": "Visualizza la data di nascita del cliente", + "Sale Value": "Valore di vendita", + "Purchase Value": "Valore d'acquisto", + "Would you like to refresh this ?": "Vuoi aggiornare questo?", + "You cannot delete your own account.": "Non puoi eliminare il tuo account.", + "Sales Progress": "Progresso delle vendite", + "Procurement Refreshed": "Approvvigionamento aggiornato", + "The procurement \"%s\" has been successfully refreshed.": "L'approvvigionamento \"%s\" \u00e8 stato aggiornato con successo.", + "Partially Due": "Parzialmente dovuto", + "No payment type has been selected on the settings. Please check your POS features and choose the supported order type": "Nessun tipo di pagamento \u00e8 stato selezionato nelle impostazioni. Controlla le caratteristiche del tuo POS e scegli il tipo di ordine supportato", + "Read More": "Per saperne di pi\u00f9", + "Wipe All": "Cancella tutto", + "Wipe Plus Grocery": "Wipe Plus Drogheria", + "Accounts List": "Elenco dei conti", + "Display All Accounts.": "Visualizza tutti gli account.", + "No Account has been registered": "Nessun account \u00e8 stato registrato", + "Add a new Account": "Aggiungi un nuovo account", + "Create a new Account": "Creare un nuovo account", + "Register a new Account and save it.": "Registra un nuovo Account e salvalo.", + "Edit Account": "Modifica account", + "Modify An Account.": "Modifica un account.", + "Return to Accounts": "Torna agli account", + "Accounts": "Conti", + "Create Account": "Crea un account", + "Payment Method": "Metodo di pagamento", + "Before submitting the payment, choose the payment type used for that order.": "Prima di inviare il pagamento, scegli il tipo di pagamento utilizzato per quell'ordine.", + "Select the payment type that must apply to the current order.": "Seleziona il tipo di pagamento che deve essere applicato all'ordine corrente.", + "Payment Type": "Modalit\u00e0 di pagamento", + "Remove Image": "Rimuovi immagine", + "This form is not completely loaded.": "Questo modulo non \u00e8 completamente caricato.", + "Updating": "In aggiornamento", + "Updating Modules": "Moduli di aggiornamento", + "Return": "Ritorno", + "Credit Limit": "Limite di credito", + "The request was canceled": "La richiesta \u00e8 stata annullata", + "Payment Receipt — %s": "Ricevuta di pagamento — %S", + "Payment receipt": "Ricevuta di pagamento", + "Current Payment": "Pagamento corrente", + "Total Paid": "Totale pagato", + "Set what should be the limit of the purchase on credit.": "Imposta quale dovrebbe essere il limite di acquisto a credito.", + "Provide the customer email.": "Fornisci l'e-mail del cliente.", + "Priority": "Priorit\u00e0", + "Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".": "Definire l'ordine per il pagamento. Pi\u00f9 basso \u00e8 il numero, prima verr\u00e0 visualizzato nel popup di pagamento. Deve iniziare da \"0\".", + "Mode": "Modalit\u00e0", + "Choose what mode applies to this demo.": "Scegli quale modalit\u00e0 si applica a questa demo.", + "Set if the sales should be created.": "Imposta se le vendite devono essere create.", + "Create Procurements": "Crea appalti", + "Will create procurements.": "Creer\u00e0 appalti.", + "Sales Account": "Conto vendita", + "Procurements Account": "Conto acquisti", + "Sale Refunds Account": "Conto di rimborsi di vendita", + "Spoiled Goods Account": "Conto merce deteriorata", + "Customer Crediting Account": "Conto di accredito del cliente", + "Customer Debiting Account": "Conto di addebito del cliente", + "Unable to find the requested account type using the provided id.": "Impossibile trovare il tipo di account richiesto utilizzando l'ID fornito.", + "You cannot delete an account type that has transaction bound.": "Non \u00e8 possibile eliminare un tipo di conto con una transazione vincolata.", + "The account type has been deleted.": "Il tipo di account \u00e8 stato eliminato.", + "The account has been created.": "L'account \u00e8 stato creato.", + "Customer Credit Account": "Conto di credito del cliente", + "Customer Debit Account": "Conto di addebito del cliente", + "Register Cash-In Account": "Registra un conto in contanti", + "Register Cash-Out Account": "Registra un conto di prelievo", + "Require Valid Email": "Richiedi un'e-mail valida", + "Will for valid unique email for every customer.": "Will per e-mail univoca valida per ogni cliente.", + "Choose an option": "Scegliere un'opzione", + "Update Instalment Date": "Aggiorna la data della rata", + "Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.": "Vorresti segnare quella rata come dovuta oggi? Se tuu confirm the instalment will be marked as paid.", + "Search for products.": "Cerca prodotti.", + "Toggle merging similar products.": "Attiva\/disattiva l'unione di prodotti simili.", + "Toggle auto focus.": "Attiva\/disattiva la messa a fuoco automatica.", + "Filter User": "Filtra utente", + "All Users": "Tutti gli utenti", + "No user was found for proceeding the filtering.": "Nessun utente trovato per procedere con il filtraggio.", + "available": "a disposizione", + "No coupons applies to the cart.": "Nessun coupon si applica al carrello.", + "Selected": "Selezionato", + "An error occurred while opening the order options": "Si \u00e8 verificato un errore durante l'apertura delle opzioni dell'ordine", + "There is no instalment defined. Please set how many instalments are allowed for this order": "Non c'\u00e8 nessuna rata definita. Si prega di impostare quante rate sono consentited for this order", + "Select Payment Gateway": "Seleziona Gateway di pagamento", + "Gateway": "Gateway", + "No tax is active": "Nessuna tassa \u00e8 attiva", + "Unable to delete a payment attached to the order.": "Impossibile eliminare un pagamento allegato all'ordine.", + "The discount has been set to the cart subtotal.": "Lo sconto \u00e8 stato impostato sul totale parziale del carrello.", + "Order Deletion": "Eliminazione dell'ordine", + "The current order will be deleted as no payment has been made so far.": "L'ordine corrente verr\u00e0 cancellato poich\u00e9 finora non \u00e8 stato effettuato alcun pagamento.", + "Void The Order": "Annulla l'ordine", + "Unable to void an unpaid order.": "Impossibile annullare un ordine non pagato.", + "Environment Details": "Dettagli sull'ambiente", + "Properties": "Propriet\u00e0", + "Extensions": "Estensioni", + "Configurations": "Configurazioni", + "Learn More": "Per saperne di pi\u00f9", + "Search Products...": "Cerca prodotti...", + "No results to show.": "Nessun risultato da mostrare.", + "Start by choosing a range and loading the report.": "Inizia scegliendo un intervallo e caricando il rapporto.", + "Invoice Date": "Data fattura", + "Initial Balance": "Equilibrio iniziale", + "New Balance": "Nuovo equilibrio", + "Transaction Type": "Tipo di transazione", + "Unchanged": "Invariato", + "Define what roles applies to the user": "Definire quali ruoli si applicano all'utente", + "Not Assigned": "Non assegnato", + "This value is already in use on the database.": "Questo valore \u00e8 gi\u00e0 in uso nel database.", + "This field should be checked.": "Questo campo dovrebbe essere controllato.", + "This field must be a valid URL.": "Questo campo deve essere un URL valido.", + "This field is not a valid email.": "Questo campo non \u00e8 un'e-mail valida.", + "If you would like to define a custom invoice date.": "Se desideri definire una data di fattura personalizzata.", + "Theme": "Tema", + "Dark": "Scuro", + "Light": "Leggero", + "Define what is the theme that applies to the dashboard.": "Definisci qual \u00e8 il tema che si applica alla dashboard.", + "Unable to delete this resource as it has %s dependency with %s item.": "Impossibile eliminare questa risorsa poich\u00e9 ha una dipendenza %s con %s elemento.", + "Unable to delete this resource as it has %s dependency with %s items.": "Impossibile eliminare questa risorsa perch\u00e9 ha una dipendenza %s con %s elementi.", + "Make a new procurement.": "Fai un nuovo appalto.", + "About": "Di", + "Details about the environment.": "Dettagli sull'ambiente.", + "Core Version": "Versione principale", + "PHP Version": "Versione PHP", + "Mb String Enabled": "Stringa Mb abilitata", + "Zip Enabled": "Zip abilitato", + "Curl Enabled": "Arricciatura abilitata", + "Math Enabled": "Matematica abilitata", + "XML Enabled": "XML abilitato", + "XDebug Enabled": "XDebug abilitato", + "File Upload Enabled": "Caricamento file abilitato", + "File Upload Size": "Dimensione caricamento file", + "Post Max Size": "Dimensione massima post", + "Max Execution Time": "Tempo massimo di esecuzione", + "Memory Limit": "Limite di memoria", + "Administrator": "Amministratore", + "Store Administrator": "Amministratore del negozio", + "Store Cashier": "Cassa del negozio", + "User": "Utente", + "Incorrect Authentication Plugin Provided.": "Plugin di autenticazione non corretto fornito.", + "Require Unique Phone": "Richiedi un telefono unico", + "Every customer should have a unique phone number.": "Ogni cliente dovrebbe avere un numero di telefono univoco.", + "Define the default theme.": "Definisci il tema predefinito.", + "Merge Similar Items": "Unisci elementi simili", + "Will enforce similar products to be merged from the POS.": "Imporr\u00e0 la fusione di prodotti simili dal POS.", + "Toggle Product Merge": "Attiva\/disattiva Unione prodotti", + "Will enable or disable the product merging.": "Abilita o disabilita l'unione del prodotto.", + "Your system is running in production mode. You probably need to build the assets": "Il sistema \u00e8 in esecuzione in modalit\u00e0 di produzione. Probabilmente hai bisogno di costruire le risorse", + "Your system is in development mode. Make sure to build the assets.": "Il tuo sistema \u00e8 in modalit\u00e0 di sviluppo. Assicurati di costruire le risorse.", + "Unassigned": "Non assegnato", + "Display all product stock flow.": "Visualizza tutto il flusso di stock di prodotti.", + "No products stock flow has been registered": "Non \u00e8 stato registrato alcun flusso di stock di prodotti", + "Add a new products stock flow": "Aggiungi un nuovo flusso di stock di prodotti", + "Create a new products stock flow": "Crea un nuovo flusso di stock di prodotti", + "Register a new products stock flow and save it.": "Registra un flusso di stock di nuovi prodotti e salvalo.", + "Edit products stock flow": "Modifica il flusso di stock dei prodotti", + "Modify Globalproducthistorycrud.": "Modifica Globalproducthistorycrud.", + "Initial Quantity": "Quantit\u00e0 iniziale", + "New Quantity": "Nuova quantit\u00e0", + "No Dashboard": "Nessun dashboard", + "Not Found Assets": "Risorse non trovate", + "Stock Flow Records": "Record di flusso azionario", + "The user attributes has been updated.": "Gli attributi utente sono stati aggiornati.", + "Laravel Version": "Versione Laravel", + "There is a missing dependency issue.": "C'\u00e8 un problema di dipendenza mancante.", + "The Action You Tried To Perform Is Not Allowed.": "L'azione che hai tentato di eseguire non \u00e8 consentita.", + "Unable to locate the assets.": "Impossibile individuare le risorse.", + "All the customers has been transferred to the new group %s.": "Tutti i clienti sono stati trasferiti al nuovo gruppo %s.", + "The request method is not allowed.": "Il metodo di richiesta non \u00e8 consentito.", + "A Database Exception Occurred.": "Si \u00e8 verificata un'eccezione al database.", + "An error occurred while validating the form.": "Si \u00e8 verificato un errore durante la convalida del modulo.", + "Enter": "accedere", + "Search...": "Ricerca...", + "Unable to hold an order which payment status has been updated already.": "Impossibile trattenere un ordine il cui stato di pagamento \u00e8 gi\u00e0 stato aggiornato.", + "Unable to change the price mode. This feature has been disabled.": "Impossibile modificare la modalit\u00e0 prezzo. Questa funzione \u00e8 stata disabilitata.", + "Enable WholeSale Price": "Abilita prezzo all'ingrosso", + "Would you like to switch to wholesale price ?": "Vuoi passare al prezzo all'ingrosso?", + "Enable Normal Price": "Abilita prezzo normale", + "Would you like to switch to normal price ?": "Vuoi passare al prezzo normale?", + "Search products...": "Cerca prodotti...", + "Set Sale Price": "Imposta il prezzo di vendita", + "Remove": "Rimuovere", + "No product are added to this group.": "Nessun prodotto viene aggiunto a questo gruppo.", + "Delete Sub item": "Elimina elemento secondario", + "Would you like to delete this sub item?": "Vuoi eliminare questo elemento secondario?", + "Unable to add a grouped product.": "Impossibile aggiungere un prodotto raggruppato.", + "Choose The Unit": "Scegli L'unit\u00e0", + "Stock Report": "Rapporto sulle scorte", + "Wallet Amount": "Importo del portafoglio", + "Wallet History": "Storia del portafoglio", + "Transaction": "Transazione", + "No History...": "Nessuna storia...", + "Removing": "Rimozione", + "Refunding": "Rimborso", + "Unknow": "Sconosciuto", + "Skip Instalments": "Salta le rate", + "Define the product type.": "Definisci il tipo di prodotto.", + "Dynamic": "Dinamico", + "In case the product is computed based on a percentage, define the rate here.": "Nel caso in cui il prodotto sia calcolato in percentuale, definire qui la tariffa.", + "Before saving this order, a minimum payment of {amount} is required": "Prima di salvare questo ordine, \u00e8 richiesto un pagamento minimo di {amount}", + "Initial Payment": "Pagamento iniziale", + "In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?": "Per procedere, \u00e8 richiesto un pagamento iniziale di {amount} per il tipo di pagamento selezionato \"{paymentType}\". Vuoi continuare ?", + "Search Customer...": "Cerca cliente...", + "Due Amount": "Importo dovuto", + "Wallet Balance": "Saldo del portafoglio", + "Total Orders": "Ordini totali", + "What slug should be used ? [Q] to quit.": "Quale slug dovrebbe essere usato? [Q] per uscire.", + "\"%s\" is a reserved class name": "\"%s\" \u00e8 un nome di classe riservato", + "The migration file has been successfully forgotten for the module %s.": "Il file di migrazione \u00e8 stato dimenticato con successo per il modulo %s.", + "%s products where updated.": "%s prodotti dove aggiornato.", + "Previous Amount": "Importo precedente", + "Next Amount": "Importo successivo", + "Restrict the records by the creation date.": "Limita i record entro la data di creazione.", + "Restrict the records by the author.": "Limitare i record dall'autore.", + "Grouped Product": "Prodotto Raggruppato", + "Groups": "Gruppi", + "Choose Group": "Scegli Gruppo", + "Grouped": "Raggruppato", + "An error has occurred": "C'\u00e8 stato un errore", + "Unable to proceed, the submitted form is not valid.": "Impossibile procedere, il modulo inviato non \u00e8 valido.", + "No activation is needed for this account.": "Non \u00e8 necessaria alcuna attivazione per questo account.", + "Invalid activation token.": "Token di attivazione non valido.", + "The expiration token has expired.": "Il token di scadenza \u00e8 scaduto.", + "Your account is not activated.": "Il tuo account non \u00e8 attivato.", + "Unable to change a password for a non active user.": "Impossibile modificare una password per un utente non attivo.", + "Unable to submit a new password for a non active user.": "Impossibile inviare una nuova password per un utente non attivo.", + "Unable to delete an entry that no longer exists.": "Impossibile eliminare una voce che non esiste pi\u00f9.", + "Provides an overview of the products stock.": "Fornisce una panoramica dello stock di prodotti.", + "Customers Statement": "Dichiarazione dei clienti", + "Display the complete customer statement.": "Visualizza l'estratto conto completo del cliente.", + "The recovery has been explicitly disabled.": "La recovery \u00e8 stata espressamente disabilitata.", + "The registration has been explicitly disabled.": "La registrazione \u00e8 stata espressamente disabilitata.", + "The entry has been successfully updated.": "La voce \u00e8 stata aggiornata correttamente.", + "A similar module has been found": "Un modulo simile \u00e8 stato trovato", + "A grouped product cannot be saved without any sub items.": "Un prodotto raggruppato non pu\u00f2 essere salvato senza alcun elemento secondario.", + "A grouped product cannot contain grouped product.": "Un prodotto raggruppato non pu\u00f2 contenere prodotti raggruppati.", + "The subitem has been saved.": "La voce secondaria \u00e8 stata salvata.", + "The %s is already taken.": "Il %s \u00e8 gi\u00e0 stato preso.", + "Allow Wholesale Price": "Consenti prezzo all'ingrosso", + "Define if the wholesale price can be selected on the POS.": "Definire se il prezzo all'ingrosso pu\u00f2 essere selezionato sul POS.", + "Allow Decimal Quantities": "Consenti quantit\u00e0 decimali", + "Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.": "Cambier\u00e0 la tastiera numerica per consentire il decimale per le quantit\u00e0. Solo per tastierino numerico \"predefinito\".", + "Numpad": "tastierino numerico", + "Advanced": "Avanzate", + "Will set what is the numpad used on the POS screen.": "Imposter\u00e0 qual \u00e8 il tastierino numerico utilizzato sullo schermo del POS.", + "Force Barcode Auto Focus": "Forza la messa a fuoco automatica del codice a barre", + "Will permanently enable barcode autofocus to ease using a barcode reader.": "Abilita permanentemente la messa a fuoco automatica del codice a barre per facilitare l'utilizzo di un lettore di codici a barre.", + "Tax Included": "Tasse incluse", + "Unable to proceed, more than one product is set as featured": "Impossibile procedere, pi\u00f9 di un prodotto \u00e8 impostato come in primo piano", + "The transaction was deleted.": "La transazione \u00e8 stata cancellata.", + "Database connection was successful.": "La connessione al database \u00e8 riuscita.", + "The products taxes were computed successfully.": "Le tasse sui prodotti sono state calcolate correttamente.", + "Tax Excluded": "Tasse escluse", + "Set Paid": "Imposta pagato", + "Would you like to mark this procurement as paid?": "Vorresti contrassegnare questo appalto come pagato?", + "Unidentified Item": "Oggetto non identificato", + "Non-existent Item": "Oggetto inesistente", + "You cannot change the status of an already paid procurement.": "Non \u00e8 possibile modificare lo stato di un appalto gi\u00e0 pagato.", + "The procurement payment status has been changed successfully.": "Lo stato del pagamento dell'approvvigionamento \u00e8 stato modificato correttamente.", + "The procurement has been marked as paid.": "L'appalto \u00e8 stato contrassegnato come pagato.", + "Show Price With Tax": "Mostra il prezzo con tasse", + "Will display price with tax for each products.": "Verr\u00e0 visualizzato il prezzo con le tasse per ogni prodotto.", + "Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".": "Impossibile caricare il componente \"${action.component}\". Assicurati che il componente sia registrato in \"nsExtraComponents\".", + "Tax Inclusive": "Tasse incluse", + "Apply Coupon": "Applicare il coupon", + "Not applicable": "Non applicabile", + "Normal": "Normale", + "Product Taxes": "Tasse sui prodotti", + "The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.": "L'unit\u00e0 collegata a questo prodotto \u00e8 mancante o non assegnata. Si prega di rivedere la scheda \"Unit\u00e0\" per questo prodotto.", + "X Days After Month Starts": "X giorni dopo l'inizio del mese", + "On Specific Day": "In un giorno specifico", + "Unknown Occurance": "Evento sconosciuto", + "Please provide a valid value.": "Fornisci un valore valido.", + "Done": "Fatto", + "Would you like to delete \"%s\"?": "Vuoi eliminare \"%s\"?", + "Unable to find a module having as namespace \"%s\"": "Impossibile trovare un modulo con spazio dei nomi \"%s\"", + "Api File": "File API", + "Migrations": "Migrazioni", + "Determine Until When the coupon is valid.": "Determina fino a quando il coupon è valido.", + "Customer Groups": "Gruppi di clienti", + "Assigned To Customer Group": "Assegnato al gruppo di clienti", + "Only the customers who belongs to the selected groups will be able to use the coupon.": "Solo i clienti appartenenti ai gruppi selezionati potranno utilizzare il coupon.", + "Assigned To Customers": "Assegnato ai clienti", + "Only the customers selected will be ale to use the coupon.": "Solo i clienti selezionati potranno utilizzare il coupon.", + "Unable to save the coupon as one of the selected customer no longer exists.": "Impossibile salvare il coupon perché uno dei clienti selezionati non esiste più.", + "Unable to save the coupon as one of the selected customer group no longer exists.": "Impossibile salvare il coupon poiché uno dei gruppi di clienti selezionati non esiste più.", + "Unable to save the coupon as one of the customers provided no longer exists.": "Impossibile salvare il coupon perché uno dei clienti indicati non esiste più.", + "Unable to save the coupon as one of the provided customer group no longer exists.": "Impossibile salvare il coupon poiché uno dei gruppi di clienti forniti non esiste più.", + "Coupon Order Histories List": "Elenco cronologie ordini coupon", + "Display all coupon order histories.": "Visualizza tutte le cronologie degli ordini di coupon.", + "No coupon order histories has been registered": "Non è stata registrata alcuna cronologia degli ordini di coupon", + "Add a new coupon order history": "Aggiungi una nuova cronologia degli ordini coupon", + "Create a new coupon order history": "Crea una nuova cronologia degli ordini coupon", + "Register a new coupon order history and save it.": "Registra una nuova cronologia degli ordini coupon e salvala.", + "Edit coupon order history": "Modifica la cronologia degli ordini coupon", + "Modify Coupon Order History.": "Modifica la cronologia degli ordini coupon.", + "Return to Coupon Order Histories": "Ritorna alla cronologia degli ordini dei coupon", + "Customer_coupon_id": "ID_coupon_cliente", + "Order_id": "ID ordine", + "Discount_value": "Valore_sconto", + "Minimum_cart_value": "Valore_carrello_minimo", + "Maximum_cart_value": "Valore_carrello_massimo", + "Limit_usage": "Limita_utilizzo", + "Would you like to delete this?": "Vuoi eliminarlo?", + "Usage History": "Cronologia dell'utilizzo", + "Customer Coupon Histories List": "Elenco cronologie coupon clienti", + "Display all customer coupon histories.": "Visualizza tutte le cronologie dei coupon dei clienti.", + "No customer coupon histories has been registered": "Non è stata registrata alcuna cronologia dei coupon dei clienti", + "Add a new customer coupon history": "Aggiungi la cronologia dei coupon di un nuovo cliente", + "Create a new customer coupon history": "Crea una nuova cronologia coupon cliente", + "Register a new customer coupon history and save it.": "Registra la cronologia dei coupon di un nuovo cliente e salvala.", + "Edit customer coupon history": "Modifica la cronologia dei coupon dei clienti", + "Modify Customer Coupon History.": "Modifica la cronologia dei coupon del cliente.", + "Return to Customer Coupon Histories": "Ritorna alle cronologie dei coupon dei clienti", + "Last Name": "Cognome", + "Provide the customer last name": "Fornire il cognome del cliente", + "Provide the customer gender.": "Fornisci il sesso del cliente.", + "Provide the billing first name.": "Fornire il nome di fatturazione.", + "Provide the billing last name.": "Fornire il cognome di fatturazione.", + "Provide the shipping First Name.": "Fornire il nome della spedizione.", + "Provide the shipping Last Name.": "Fornire il cognome di spedizione.", + "Scheduled": "Programmato", + "Set the scheduled date.": "Imposta la data prevista.", + "Account Name": "Nome utente", + "Provider last name if necessary.": "Cognome del fornitore, se necessario.", + "Provide the user first name.": "Fornire il nome dell'utente.", + "Provide the user last name.": "Fornire il cognome dell'utente.", + "Set the user gender.": "Imposta il sesso dell'utente.", + "Set the user phone number.": "Imposta il numero di telefono dell'utente.", + "Set the user PO Box.": "Impostare la casella postale dell'utente.", + "Provide the billing First Name.": "Fornire il nome di fatturazione.", + "Last name": "Cognome", + "Group Name": "Nome del gruppo", + "Delete a user": "Elimina un utente", + "Activated": "Attivato", + "type": "tipo", + "User Group": "Gruppo di utenti", + "Scheduled On": "Programmato il", + "Biling": "Billing", + "API Token": "Gettone API", + "Your Account has been successfully created.": "Il tuo account è stato creato con successo.", + "Unable to export if there is nothing to export.": "Impossibile esportare se non c'è nulla da esportare.", + "%s Coupons": "%s coupon", + "%s Coupon History": "%s Cronologia coupon", + "\"%s\" Record History": "\"%s\" Registra la cronologia", + "The media name was successfully updated.": "Il nome del supporto è stato aggiornato correttamente.", + "The role was successfully assigned.": "Il ruolo è stato assegnato con successo.", + "The role were successfully assigned.": "Il ruolo è stato assegnato con successo.", + "Unable to identifier the provided role.": "Impossibile identificare il ruolo fornito.", + "Good Condition": "Buone condizioni", + "Cron Disabled": "Cron disabilitato", + "Task Scheduling Disabled": "Pianificazione attività disabilitata", + "NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.": "NexoPOS non è in grado di pianificare attività in background. Ciò potrebbe limitare le funzionalità necessarie. Clicca qui per sapere come risolvere il problema.", + "The email \"%s\" is already used for another customer.": "L'e-mail \"%s\" è già utilizzata per un altro cliente.", + "The provided coupon cannot be loaded for that customer.": "Impossibile caricare il coupon fornito per quel cliente.", + "The provided coupon cannot be loaded for the group assigned to the selected customer.": "Il coupon fornito non può essere caricato per il gruppo assegnato al cliente selezionato.", + "Unable to use the coupon %s as it has expired.": "Impossibile utilizzare il coupon %s poiché è scaduto.", + "Unable to use the coupon %s at this moment.": "Impossibile utilizzare il coupon %s in questo momento.", + "Small Box": "Piccola scatola", + "Box": "Scatola", + "%s products were freed": "%s prodotti sono stati liberati", + "Restoring cash flow from paid orders...": "Ripristino del flusso di cassa dagli ordini pagati...", + "Restoring cash flow from refunded orders...": "Ripristino del flusso di cassa dagli ordini rimborsati...", + "%s on %s directories were deleted.": "%s nelle directory %s sono state eliminate.", + "%s on %s files were deleted.": "%s su %s file sono stati eliminati.", + "First Day Of Month": "Primo giorno del mese", + "Last Day Of Month": "Ultimo giorno del mese", + "Month middle Of Month": "Mese di metà mese", + "{day} after month starts": "{day} dopo l'inizio del mese", + "{day} before month ends": "{day} prima della fine del mese", + "Every {day} of the month": "Ogni {day} del mese", + "Days": "Giorni", + "Make sure set a day that is likely to be executed": "Assicurati di impostare un giorno in cui è probabile che venga eseguito", + "Invalid Module provided.": "Modulo fornito non valido.", + "The module was \"%s\" was successfully installed.": "Il modulo \"%s\" è stato installato con successo.", + "The modules \"%s\" was deleted successfully.": "I moduli \"%s\" sono stati eliminati con successo.", + "Unable to locate a module having as identifier \"%s\".": "Impossibile individuare un modulo avente come identificatore \"%s\".", + "All migration were executed.": "Tutte le migrazioni sono state eseguite.", + "Unknown Product Status": "Stato del prodotto sconosciuto", + "Member Since": "Membro da", + "Total Customers": "Clienti totali", + "The widgets was successfully updated.": "I widget sono stati aggiornati con successo.", + "The token was successfully created": "Il token è stato creato con successo", + "The token has been successfully deleted.": "Il token è stato eliminato con successo.", + "Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".": "Abilita i servizi in background per NexoPOS. Aggiorna per verificare se l'opzione è diventata \"Sì\".", + "Will display all cashiers who performs well.": "Verranno visualizzati tutti i cassieri che si comportano bene.", + "Will display all customers with the highest purchases.": "Verranno visualizzati tutti i clienti con gli acquisti più alti.", + "Expense Card Widget": "Widget delle carte di spesa", + "Will display a card of current and overwall expenses.": "Verrà visualizzata una scheda delle spese correnti e generali.", + "Incomplete Sale Card Widget": "Widget della carta di vendita incompleta", + "Will display a card of current and overall incomplete sales.": "Verrà visualizzata una scheda delle vendite attuali e complessivamente incomplete.", + "Orders Chart": "Grafico degli ordini", + "Will display a chart of weekly sales.": "Verrà visualizzato un grafico delle vendite settimanali.", + "Orders Summary": "Riepilogo degli ordini", + "Will display a summary of recent sales.": "Verrà visualizzato un riepilogo delle vendite recenti.", + "Will display a profile widget with user stats.": "Verrà visualizzato un widget del profilo con le statistiche dell'utente.", + "Sale Card Widget": "Widget della carta di vendita", + "Will display current and overall sales.": "Mostrerà le vendite attuali e complessive.", + "Return To Calendar": "Torna al calendario", + "Thr": "Thr", + "The left range will be invalid.": "L'intervallo di sinistra non sarà valido.", + "The right range will be invalid.": "L'intervallo corretto non sarà valido.", + "Click here to add widgets": "Clicca qui per aggiungere widget", + "Choose Widget": "Scegli Widget", + "Select with widget you want to add to the column.": "Seleziona con il widget che desideri aggiungere alla colonna.", + "Unamed Tab": "Scheda senza nome", + "An error unexpected occured while printing.": "Si è verificato un errore imprevisto durante la stampa.", + "and": "E", + "{date} ago": "{data} fa", + "In {date}": "In data}", + "An unexpected error occured.": "Si è verificato un errore imprevisto.", + "Warning": "Avvertimento", + "Change Type": "Cambia tipo", + "Save Expense": "Risparmia sulle spese", + "No configuration were choosen. Unable to proceed.": "Non è stata scelta alcuna configurazione. Impossibile procedere.", + "Conditions": "Condizioni", + "By proceeding the current for and all your entries will be cleared. Would you like to proceed?": "Procedendo il corrente per e tutte le tue voci verranno cancellate. Vuoi continuare?", + "No modules matches your search term.": "Nessun modulo corrisponde al termine di ricerca.", + "Press \"\/\" to search modules": "Premere \"\/\" per cercare i moduli", + "No module has been uploaded yet.": "Nessun modulo è stato ancora caricato.", + "{module}": "{modulo}", + "Would you like to delete \"{module}\"? All data created by the module might also be deleted.": "Vuoi eliminare \"{module}\"? Potrebbero essere eliminati anche tutti i dati creati dal modulo.", + "Search Medias": "Cerca media", + "Bulk Select": "Selezione in blocco", + "Press "\/" to search permissions": "Premi \"\/\" per cercare i permessi", + "SKU, Barcode, Name": "SKU, codice a barre, nome", + "About Token": "A proposito di token", + "Save Token": "Salva gettone", + "Generated Tokens": "Token generati", + "Created": "Creato", + "Last Use": "Ultimo utilizzo", + "Never": "Mai", + "Expires": "Scade", + "Revoke": "Revocare", + "Token Name": "Nome del token", + "This will be used to identifier the token.": "Questo verrà utilizzato per identificare il token.", + "Unable to proceed, the form is not valid.": "Impossibile procedere, il modulo non è valido.", + "An unexpected error occured": "Si è verificato un errore imprevisto", + "An Error Has Occured": "C'è stato un errore", + "Febuary": "Febbraio", + "Configure": "Configura", + "Unable to add the product": "Impossibile aggiungere il prodotto", + "No result to result match the search value provided.": "Nessun risultato corrispondente al valore di ricerca fornito.", + "This QR code is provided to ease authentication on external applications.": "Questo codice QR viene fornito per facilitare l'autenticazione su applicazioni esterne.", + "Copy And Close": "Copia e chiudi", + "An error has occured": "C'è stato un errore", + "Recents Orders": "Ordini recenti", + "Unamed Page": "Pagina senza nome", + "Assignation": "Assegnazione", + "Incoming Conversion": "Conversione in arrivo", + "Outgoing Conversion": "Conversione in uscita", + "Unknown Action": "Azione sconosciuta", + "Direct Transaction": "Transazione diretta", + "Recurring Transaction": "Transazione ricorrente", + "Entity Transaction": "Transazione di entità", + "Scheduled Transaction": "Transazione pianificata", + "Unknown Type (%s)": "Tipo sconosciuto (%s)", + "What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.": "Qual è lo spazio dei nomi della risorsa CRUD. ad esempio: system.users? [Q] per uscire.", + "What is the full model name. eg: App\\Models\\Order ? [Q] to quit.": "Qual è il nome completo del modello. ad esempio: App\\Modelli\\Ordine ? [Q] per uscire.", + "What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.": "Quali sono le colonne compilabili nella tabella: ad esempio: nome utente, email, password? [S] per saltare, [Q] per uscire.", + "Unsupported argument provided: \"%s\"": "Argomento fornito non supportato: \"%s\"", + "The authorization token can\\'t be changed manually.": "Il token di autorizzazione non può essere modificato manualmente.", + "Translation process is complete for the module %s !": "Il processo di traduzione per il modulo %s è completo!", + "%s migration(s) has been deleted.": "%s migrazione(i) è stata eliminata.", + "The command has been created for the module \"%s\"!": "Il comando è stato creato per il modulo \"%s\"!", + "The controller has been created for the module \"%s\"!": "Il controller è stato creato per il modulo \"%s\"!", + "The event has been created at the following path \"%s\"!": "L'evento è stato creato nel seguente percorso \"%s\"!", + "The listener has been created on the path \"%s\"!": "Il listener è stato creato sul percorso \"%s\"!", + "A request with the same name has been found !": "È stata trovata una richiesta con lo stesso nome!", + "Unable to find a module having the identifier \"%s\".": "Impossibile trovare un modulo con l'identificatore \"%s\".", + "Unsupported reset mode.": "Modalità di ripristino non supportata.", + "You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.": "Non hai fornito un nome file valido. Non deve contenere spazi, punti o caratteri speciali.", + "Unable to find a module having \"%s\" as namespace.": "Impossibile trovare un modulo con \"%s\" come spazio dei nomi.", + "A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.": "Esiste già un file simile nel percorso \"%s\". Usa \"--force\" per sovrascriverlo.", + "A new form class was created at the path \"%s\"": "È stata creata una nuova classe di modulo nel percorso \"%s\"", + "Unable to proceed, looks like the database can\\'t be used.": "Impossibile procedere, sembra che il database non possa essere utilizzato.", + "In which language would you like to install NexoPOS ?": "In quale lingua desideri installare NexoPOS?", + "You must define the language of installation.": "È necessario definire la lingua di installazione.", + "The value above which the current coupon can\\'t apply.": "Il valore al di sopra del quale il coupon corrente non può essere applicato.", + "Unable to save the coupon product as this product doens\\'t exists.": "Impossibile salvare il prodotto coupon poiché questo prodotto non esiste.", + "Unable to save the coupon category as this category doens\\'t exists.": "Impossibile salvare la categoria del coupon poiché questa categoria non esiste.", + "Unable to save the coupon as this category doens\\'t exists.": "Impossibile salvare il coupon poiché questa categoria non esiste.", + "You\\re not allowed to do that.": "Non ti è permesso farlo.", + "Crediting (Add)": "Accredito (Aggiungi)", + "Refund (Add)": "Rimborso (Aggiungi)", + "Deducting (Remove)": "Detrazione (Rimuovi)", + "Payment (Remove)": "Pagamento (Rimuovi)", + "The assigned default customer group doesn\\'t exist or is not defined.": "Il gruppo di clienti predefinito assegnato non esiste o non è definito.", + "Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0": "Determinare in percentuale, qual è il primo pagamento di credito minimo effettuato da tutti i clienti del gruppo, in caso di ordine di credito. Se lasciato a \"0", + "You\\'re not allowed to do this operation": "Non sei autorizzato a eseguire questa operazione", + "If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.": "Se si fa clic su No, tutti i prodotti assegnati a questa categoria o a tutte le sottocategorie non verranno visualizzati nel POS.", + "Convert Unit": "Converti unità", + "The unit that is selected for convertion by default.": "L'unità selezionata per la conversione per impostazione predefinita.", + "COGS": "COG", + "Used to define the Cost of Goods Sold.": "Utilizzato per definire il costo delle merci vendute.", + "Visible": "Visibile", + "Define whether the unit is available for sale.": "Definire se l'unità è disponibile per la vendita.", + "Product unique name. If it\\' variation, it should be relevant for that variation": "Nome univoco del prodotto. Se si tratta di una variazione, dovrebbe essere rilevante per quella variazione", + "The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.": "Il prodotto non sarà visibile sulla griglia e verrà prelevato solo utilizzando il lettore di codici a barre o il codice a barre associato.", + "The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.": "Il costo delle merci vendute verrà calcolato automaticamente in base all'approvvigionamento e alla conversione.", + "Auto COGS": "COGS automatico", + "Unknown Type: %s": "Tipo sconosciuto: %s", + "Shortage": "Carenza", + "Overage": "Eccesso", + "Transactions List": "Elenco delle transazioni", + "Display all transactions.": "Visualizza tutte le transazioni.", + "No transactions has been registered": "Nessuna transazione è stata registrata", + "Add a new transaction": "Aggiungi una nuova transazione", + "Create a new transaction": "Crea una nuova transazione", + "Register a new transaction and save it.": "Registra una nuova transazione e salvala.", + "Edit transaction": "Modifica transazione", + "Modify Transaction.": "Modifica transazione.", + "Return to Transactions": "Torna a Transazioni", + "determine if the transaction is effective or not. Work for recurring and not recurring transactions.": "determinare se la transazione è efficace o meno. Lavora per transazioni ricorrenti e non ricorrenti.", + "Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.": "Assegna la transazione al gruppo di utenti. l'Operazione sarà pertanto moltiplicata per il numero dell'entità.", + "Transaction Account": "Conto delle transazioni", + "Assign the transaction to an account430": "Assegnare la transazione a un conto430", + "Is the value or the cost of the transaction.": "È il valore o il costo della transazione.", + "If set to Yes, the transaction will trigger on defined occurrence.": "Se impostato su Sì, la transazione verrà avviata all'occorrenza definita.", + "Define how often this transaction occurs": "Definire la frequenza con cui si verifica questa transazione", + "Define what is the type of the transactions.": "Definire qual è il tipo di transazioni.", + "Trigger": "Grilletto", + "Would you like to trigger this expense now?": "Vorresti attivare questa spesa adesso?", + "Transactions History List": "Elenco cronologia transazioni", + "Display all transaction history.": "Visualizza tutta la cronologia delle transazioni.", + "No transaction history has been registered": "Non è stata registrata alcuna cronologia delle transazioni", + "Add a new transaction history": "Aggiungi una nuova cronologia delle transazioni", + "Create a new transaction history": "Crea una nuova cronologia delle transazioni", + "Register a new transaction history and save it.": "Registra una nuova cronologia delle transazioni e salvala.", + "Edit transaction history": "Modifica la cronologia delle transazioni", + "Modify Transactions history.": "Modifica la cronologia delle transazioni.", + "Return to Transactions History": "Ritorna alla cronologia delle transazioni", + "Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.": "Fornire un valore univoco per questa unità. Potrebbe essere composto da un nome ma non dovrebbe includere spazi o caratteri speciali.", + "Set the limit that can\\'t be exceeded by the user.": "Imposta il limite che non può essere superato dall'utente.", + "Oops, We\\'re Sorry!!!": "Ops, siamo spiacenti!!!", + "Class: %s": "Classe: %s", + "There\\'s is mismatch with the core version.": "C'è una mancata corrispondenza con la versione principale.", + "You\\'re not authenticated.": "Non sei autenticato.", + "An error occured while performing your request.": "Si è verificato un errore durante l'esecuzione della richiesta.", + "A mismatch has occured between a module and it\\'s dependency.": "Si è verificata una mancata corrispondenza tra un modulo e la sua dipendenza.", + "You\\'re not allowed to see that page.": "Non ti è consentito vedere quella pagina.", + "Post Too Large": "Post troppo grande", + "The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini": "La richiesta presentata è più grande del previsto. Considera l'idea di aumentare il tuo \"post_max_size\" sul tuo PHP.ini", + "This field does\\'nt have a valid value.": "Questo campo non ha un valore valido.", + "Describe the direct transaction.": "Descrivi la transazione diretta.", + "If set to yes, the transaction will take effect immediately and be saved on the history.": "Se impostato su sì, la transazione avrà effetto immediato e verrà salvata nella cronologia.", + "Assign the transaction to an account.": "Assegnare la transazione a un conto.", + "set the value of the transaction.": "impostare il valore della transazione.", + "Further details on the transaction.": "Ulteriori dettagli sull'operazione.", + "Describe the direct transactions.": "Descrivere le transazioni dirette.", + "set the value of the transactions.": "impostare il valore delle transazioni.", + "The transactions will be multipled by the number of user having that role.": "Le transazioni verranno moltiplicate per il numero di utenti che hanno quel ruolo.", + "Create Sales (needs Procurements)": "Crea vendite (necessita di approvvigionamenti)", + "Set when the transaction should be executed.": "Imposta quando la transazione deve essere eseguita.", + "The addresses were successfully updated.": "Gli indirizzi sono stati aggiornati con successo.", + "Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.": "Determinare qual è il valore effettivo dell'appalto. Una volta \"Consegnato\" lo stato non potrà essere modificato e lo stock verrà aggiornato.", + "The register doesn\\'t have an history.": "Il registro non ha uno storico.", + "Unable to check a register session history if it\\'s closed.": "Impossibile controllare la cronologia della sessione di registrazione se è chiusa.", + "Register History For : %s": "Registra cronologia per: %s", + "Can\\'t delete a category having sub categories linked to it.": "Impossibile eliminare una categoria a cui sono collegate delle sottocategorie.", + "Unable to proceed. The request doesn\\'t provide enough data which could be handled": "Impossibile procedere. La richiesta non fornisce dati sufficienti che potrebbero essere gestiti", + "Unable to load the CRUD resource : %s.": "Impossibile caricare la risorsa CRUD: %s.", + "Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods": "Impossibile recuperare gli elementi. La risorsa CRUD corrente non implementa i metodi \"getEntries\".", + "The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.": "La classe \"%s\" non è definita. Esiste quella classe grezza? Assicurati di aver registrato l'istanza, se è il caso.", + "The crud columns exceed the maximum column that can be exported (27)": "Le colonne grezze superano la colonna massima esportabile (27)", + "This link has expired.": "Questo collegamento è scaduto.", + "Account History : %s": "Cronologia dell'account: %s", + "Welcome — %s": "Benvenuto: %S", + "Upload and manage medias (photos).": "Carica e gestisci i media (foto).", + "The product which id is %s doesnt\\'t belong to the procurement which id is %s": "Il prodotto con ID %s non appartiene all'appalto con ID %s", + "The refresh process has started. You\\'ll get informed once it\\'s complete.": "Il processo di aggiornamento è iniziato. Verrai informato una volta completato.", + "The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".": "La variazione non è stata eliminata perché potrebbe non esistere o non è assegnata al prodotto principale \"%s\".", + "Stock History For %s": "Cronologia azioni per %s", + "Set": "Impostato", + "The unit is not set for the product \"%s\".": "L'unità non è impostata per il prodotto \"%s\".", + "The operation will cause a negative stock for the product \"%s\" (%s).": "L'operazione causerà uno stock negativo per il prodotto \"%s\" (%s).", + "The adjustment quantity can\\'t be negative for the product \"%s\" (%s)": "La quantità di rettifica non può essere negativa per il prodotto \"%s\" (%s)", + "%s\\'s Products": "I prodotti di %s", + "Transactions Report": "Rapporto sulle transazioni", + "Combined Report": "Rapporto combinato", + "Provides a combined report for every transactions on products.": "Fornisce un report combinato per ogni transazione sui prodotti.", + "Unable to initiallize the settings page. The identifier \"' . $identifier . '": "Impossibile inizializzare la pagina delle impostazioni. L'identificatore \"' . $identificatore . '", + "Shows all histories generated by the transaction.": "Mostra tutte le cronologie generate dalla transazione.", + "Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.": "Impossibile utilizzare le transazioni pianificate, ricorrenti e di entità poiché le code non sono configurate correttamente.", + "Create New Transaction": "Crea nuova transazione", + "Set direct, scheduled transactions.": "Imposta transazioni dirette e pianificate.", + "Update Transaction": "Aggiorna transazione", + "The provided data aren\\'t valid": "I dati forniti non sono validi", + "Welcome — NexoPOS": "Benvenuto: NexoPOS", + "You\\'re not allowed to see this page.": "Non sei autorizzato a vedere questa pagina.", + "Your don\\'t have enough permission to perform this action.": "Non disponi di autorizzazioni sufficienti per eseguire questa azione.", + "You don\\'t have the necessary role to see this page.": "Non hai il ruolo necessario per vedere questa pagina.", + "%s product(s) has low stock. Reorder those product(s) before it get exhausted.": "%s prodotti hanno scorte esaurite. Riordina i prodotti prima che si esauriscano.", + "Scheduled Transactions": "Transazioni pianificate", + "the transaction \"%s\" was executed as scheduled on %s.": "la transazione \"%s\" è stata eseguita come previsto il %s.", + "Workers Aren\\'t Running": "I lavoratori non corrono", + "The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.": "I lavoratori sono stati abilitati, ma sembra che NexoPOS non possa eseguire i lavoratori. Questo di solito accade se il supervisore non è configurato correttamente.", + "Unable to remove the permissions \"%s\". It doesn\\'t exists.": "Impossibile rimuovere i permessi \"%s\". Non esiste.", + "Unable to open \"%s\" *, as it\\'s not closed.": "Impossibile aprire \"%s\" *, poiché non è chiuso.", + "Unable to open \"%s\" *, as it\\'s not opened.": "Impossibile aprire \"%s\" *, poiché non è aperto.", + "Unable to cashing on \"%s\" *, as it\\'s not opened.": "Impossibile incassare \"%s\" *, poiché non è aperto.", + "Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.": "Fondo insufficiente per eliminare una vendita da \"%s\". Se i fondi sono stati incassati o sborsati, valuta la possibilità di aggiungere del contante (%s) al registro.", + "Unable to cashout on \"%s": "Impossibile incassare su \"%s", + "Symbolic Links Missing": "Collegamenti simbolici mancanti", + "The Symbolic Links to the public directory is missing. Your medias might be broken and not display.": "Mancano i collegamenti simbolici alla directory pubblica. I tuoi media potrebbero essere rotti e non essere visualizzati.", + "Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.": "I lavori Cron non sono configurati correttamente su NexoPOS. Ciò potrebbe limitare le funzionalità necessarie. Clicca qui per sapere come risolvere il problema.", + "The requested module %s cannot be found.": "Impossibile trovare il modulo richiesto %s.", + "The manifest.json can\\'t be located inside the module %s on the path: %s": "Il file manifest.json non può essere posizionato all'interno del modulo %s nel percorso: %s", + "the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.": "il file richiesto \"%s\" non può essere posizionato all'interno di manifest.json per il modulo %s.", + "Sorting is explicitely disabled for the column \"%s\".": "L'ordinamento è esplicitamente disabilitato per la colonna \"%s\".", + "Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s": "Impossibile eliminare \"%s\" poiché è una dipendenza per \"%s\"%s", + "Unable to find the customer using the provided id %s.": "Impossibile trovare il cliente utilizzando l'ID fornito %s.", + "Not enough credits on the customer account. Requested : %s, Remaining: %s.": "Crediti insufficienti sul conto cliente. Richiesto: %s, rimanente: %s.", + "The customer account doesn\\'t have enough funds to proceed.": "L'account cliente non dispone di fondi sufficienti per procedere.", + "Unable to find a reference to the attached coupon : %s": "Impossibile trovare un riferimento al coupon allegato: %s", + "You\\'re not allowed to use this coupon as it\\'s no longer active": "Non ti è consentito utilizzare questo coupon poiché non è più attivo", + "You\\'re not allowed to use this coupon it has reached the maximum usage allowed.": "Non ti è consentito utilizzare questo coupon perché ha raggiunto l'utilizzo massimo consentito.", + "Terminal A": "Terminale A", + "Terminal B": "Terminale B", + "%s link were deleted": "%s collegamenti sono stati eliminati", + "Unable to execute the following class callback string : %s": "Impossibile eseguire la seguente stringa di callback della classe: %s", + "%s — %s": "%s — %S", + "Transactions": "Transazioni", + "Create Transaction": "Crea transazione", + "Stock History": "Storia delle azioni", + "Invoices": "Fatture", + "Failed to parse the configuration file on the following path \"%s\"": "Impossibile analizzare il file di configurazione nel seguente percorso \"%s\"", + "No config.xml has been found on the directory : %s. This folder is ignored": "Nessun file config.xml trovato nella directory: %s. Questa cartella viene ignorata", + "The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ": "Il modulo \"%s\" è stato disabilitato in quanto non è compatibile con la versione attuale di NexoPOS %s, ma richiede %s.", + "Unable to upload this module as it\\'s older than the version installed": "Impossibile caricare questo modulo perché è più vecchio della versione installata", + "The migration file doens\\'t have a valid class name. Expected class : %s": "Il file di migrazione non ha un nome di classe valido. Classe prevista: %s", + "Unable to locate the following file : %s": "Impossibile individuare il seguente file: %s", + "The migration file doens\\'t have a valid method name. Expected method : %s": "Il file di migrazione non ha un nome di metodo valido. Metodo previsto: %s", + "The module %s cannot be enabled as his dependency (%s) is missing or not enabled.": "Il modulo %s non può essere abilitato poiché la sua dipendenza (%s) manca o non è abilitata.", + "The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.": "Il modulo %s non può essere abilitato poiché le sue dipendenze (%s) mancano o non sono abilitate.", + "An Error Occurred \"%s\": %s": "Si è verificato un errore \"%s\": %s", + "The order has been updated": "L'ordinanza è stata aggiornata", + "The minimal payment of %s has\\'nt been provided.": "Il pagamento minimo di %s non è stato fornito.", + "Unable to proceed as the order is already paid.": "Impossibile procedere poiché l'ordine è già stato pagato.", + "The customer account funds are\\'nt enough to process the payment.": "I fondi del conto cliente non sono sufficienti per elaborare il pagamento.", + "Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.": "Impossibile procedere. Non sono ammessi ordini parzialmente pagati. Questa opzione potrebbe essere modificata nelle impostazioni.", + "Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.": "Impossibile procedere. Non sono ammessi ordini non pagati. Questa opzione potrebbe essere modificata nelle impostazioni.", + "By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.": "Procedendo con questo ordine il cliente supererà il credito massimo consentito per il suo conto: %s.", + "You\\'re not allowed to make payments.": "Non ti è consentito effettuare pagamenti.", + "Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s": "Impossibile procedere, scorte insufficienti per %s che utilizza l'unità %s. Richiesto: %s, disponibile %s", + "Unknown Status (%s)": "Stato sconosciuto (%s)", + "%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.": "%s ordini non pagati o parzialmente pagati sono scaduti. Ciò si verifica se nessuno è stato completato prima della data di pagamento prevista.", + "Unable to find a reference of the provided coupon : %s": "Impossibile trovare un riferimento del coupon fornito: %s", + "The procurement has been deleted. %s included stock record(s) has been deleted as well.": "L'appalto è stato eliminato. Anche %s record di stock inclusi sono stati eliminati.", + "Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.": "Impossibile eliminare l'approvvigionamento perché non ci sono abbastanza scorte rimanenti per \"%s\" sull'unità \"%s\". Ciò probabilmente significa che il conteggio delle scorte è cambiato con una vendita o con un adeguamento dopo che l'approvvigionamento è stato immagazzinato.", + "Unable to find the product using the provided id \"%s\"": "Impossibile trovare il prodotto utilizzando l'ID fornito \"%s\"", + "Unable to procure the product \"%s\" as the stock management is disabled.": "Impossibile procurarsi il prodotto \"%s\" poiché la gestione delle scorte è disabilitata.", + "Unable to procure the product \"%s\" as it is a grouped product.": "Impossibile procurarsi il prodotto \"%s\" poiché è un prodotto raggruppato.", + "The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item": "L'unità utilizzata per il prodotto %s non appartiene al gruppo di unità assegnato all'articolo", + "%s procurement(s) has recently been automatically procured.": "%s appalti sono stati recentemente aggiudicati automaticamente.", + "The requested category doesn\\'t exists": "La categoria richiesta non esiste", + "The category to which the product is attached doesn\\'t exists or has been deleted": "La categoria a cui è allegato il prodotto non esiste o è stata cancellata", + "Unable to create a product with an unknow type : %s": "Impossibile creare un prodotto con un tipo sconosciuto: %s", + "A variation within the product has a barcode which is already in use : %s.": "Una variazione all'interno del prodotto ha un codice a barre già in uso: %s.", + "A variation within the product has a SKU which is already in use : %s": "Una variazione all'interno del prodotto ha uno SKU già in uso: %s", + "Unable to edit a product with an unknown type : %s": "Impossibile modificare un prodotto con un tipo sconosciuto: %s", + "The requested sub item doesn\\'t exists.": "L'elemento secondario richiesto non esiste.", + "One of the provided product variation doesn\\'t include an identifier.": "Una delle varianti di prodotto fornite non include un identificatore.", + "The product\\'s unit quantity has been updated.": "La quantità unitaria del prodotto è stata aggiornata.", + "Unable to reset this variable product \"%s": "Impossibile reimpostare questo prodotto variabile \"%s", + "Adjusting grouped product inventory must result of a create, update, delete sale operation.": "La regolazione dell'inventario dei prodotti raggruppati deve risultare da un'operazione di creazione, aggiornamento ed eliminazione della vendita.", + "Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).": "Impossibile procedere, questa azione causerà stock negativi (%s). Vecchia quantità: (%s), Quantità: (%s).", + "Unsupported stock action \"%s\"": "Azione azionaria non supportata \"%s\"", + "%s product(s) has been deleted.": "%s prodotto/i è stato eliminato.", + "%s products(s) has been deleted.": "%s prodotti sono stati eliminati.", + "Unable to find the product, as the argument \"%s\" which value is \"%s": "Impossibile trovare il prodotto, come argomento \"%s\" il cui valore è \"%s", + "You cannot convert unit on a product having stock management disabled.": "Non è possibile convertire l'unità su un prodotto con la gestione delle scorte disabilitata.", + "The source and the destination unit can\\'t be the same. What are you trying to do ?": "L'unità di origine e quella di destinazione non possono essere le stesse. Cosa stai cercando di fare ?", + "There is no source unit quantity having the name \"%s\" for the item %s": "Non esiste una quantità di unità di origine con il nome \"%s\" per l'articolo %s", + "There is no destination unit quantity having the name %s for the item %s": "Non esiste alcuna quantità di unità di destinazione con il nome %s per l'articolo %s", + "The source unit and the destination unit doens\\'t belong to the same unit group.": "L'unità di origine e l'unità di destinazione non appartengono allo stesso gruppo di unità.", + "The group %s has no base unit defined": "Per il gruppo %s non è definita alcuna unità di base", + "The conversion of %s(%s) to %s(%s) was successful": "La conversione di %s(%s) in %s(%s) è riuscita", + "The product has been deleted.": "Il prodotto è stato eliminato.", + "An error occurred: %s.": "Si è verificato un errore: %s.", + "A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.": "Recentemente è stata rilevata un'operazione azionaria, tuttavia NexoPOS non è stata in grado di aggiornare il rapporto di conseguenza. Ciò si verifica se il riferimento al dashboard giornaliero non è stato creato.", + "Today\\'s Orders": "Ordini di oggi", + "Today\\'s Sales": "Saldi di oggi", + "Today\\'s Refunds": "Rimborsi di oggi", + "Today\\'s Customers": "I clienti di oggi", + "The report will be generated. Try loading the report within few minutes.": "Il rapporto verrà generato. Prova a caricare il rapporto entro pochi minuti.", + "The database has been wiped out.": "Il database è stato cancellato.", + "No custom handler for the reset \"' . $mode . '\"": "Nessun gestore personalizzato per il ripristino \"' . $mode . '\"", + "Unable to proceed. The parent tax doesn\\'t exists.": "Impossibile procedere. La tassa madre non esiste.", + "A simple tax must not be assigned to a parent tax with the type \"simple": "Un'imposta semplice non deve essere assegnata a un'imposta principale di tipo \"semplice", + "Created via tests": "Creato tramite test", + "The transaction has been successfully saved.": "La transazione è stata salvata con successo.", + "The transaction has been successfully updated.": "La transazione è stata aggiornata con successo.", + "Unable to find the transaction using the provided identifier.": "Impossibile trovare la transazione utilizzando l'identificatore fornito.", + "Unable to find the requested transaction using the provided id.": "Impossibile trovare la transazione richiesta utilizzando l'ID fornito.", + "The transction has been correctly deleted.": "La transazione è stata eliminata correttamente.", + "You cannot delete an account which has transactions bound.": "Non è possibile eliminare un account a cui sono associate transazioni.", + "The transaction account has been deleted.": "Il conto della transazione è stato eliminato.", + "Unable to find the transaction account using the provided ID.": "Impossibile trovare il conto della transazione utilizzando l'ID fornito.", + "The transaction account has been updated.": "Il conto delle transazioni è stato aggiornato.", + "This transaction type can\\'t be triggered.": "Questo tipo di transazione non può essere attivato.", + "The transaction has been successfully triggered.": "La transazione è stata avviata con successo.", + "The transaction \"%s\" has been processed on day \"%s\".": "La transazione \"%s\" è stata elaborata il giorno \"%s\".", + "The transaction \"%s\" has already been processed.": "La transazione \"%s\" è già stata elaborata.", + "The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.": "La transazione \"%s\" non è stata completata poiché non è aggiornata.", + "The process has been correctly executed and all transactions has been processed.": "Il processo è stato eseguito correttamente e tutte le transazioni sono state elaborate.", + "The process has been executed with some failures. %s\/%s process(es) has successed.": "Il processo è stato eseguito con alcuni errori. %s\/%s processo(i) ha avuto successo.", + "Procurement : %s": "Appalti: %s", + "Procurement Liability : %s": "Responsabilità per l'approvvigionamento: %s", + "Refunding : %s": "Rimborso: %s", + "Spoiled Good : %s": "Buono rovinato: %s", + "Sale : %s": "Saldi", + "Liabilities Account": "Conto delle passività", + "Not found account type: %s": "Tipo di account non trovato: %s", + "Refund : %s": "Rimborso: %s", + "Customer Account Crediting : %s": "Accredito sul conto cliente: %s", + "Customer Account Purchase : %s": "Acquisto account cliente: %s", + "Customer Account Deducting : %s": "Detrazione sul conto cliente: %s", + "Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.": "Alcune transazioni sono disabilitate poiché NexoPOS non è in grado di eseguire richieste asincrone<\/a>.", + "The unit group %s doesn\\'t have a base unit": "Il gruppo di unità %s non ha un'unità base", + "The system role \"Users\" can be retrieved.": "Il ruolo di sistema \"Utenti\" può essere recuperato.", + "The default role that must be assigned to new users cannot be retrieved.": "Non è possibile recuperare il ruolo predefinito che deve essere assegnato ai nuovi utenti.", + "%s Second(s)": "%s secondo/i", + "Configure the accounting feature": "Configura la funzionalità di contabilità", + "Define the symbol that indicate thousand. By default ": "Definire il simbolo che indica mille. Per impostazione predefinita", + "Date Time Format": "Formato data e ora", + "This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".": "Ciò definisce come devono essere formattate la data e l'ora. Il formato predefinito è \"Y-m-d H:i\".", + "Date TimeZone": "Data fuso orario", + "Determine the default timezone of the store. Current Time: %s": "Determina il fuso orario predefinito del negozio. Ora corrente: %s", + "Configure how invoice and receipts are used.": "Configura la modalità di utilizzo delle fatture e delle ricevute.", + "configure settings that applies to orders.": "configurare le impostazioni che si applicano agli ordini.", + "Report Settings": "Impostazioni del rapporto", + "Configure the settings": "Configura le impostazioni", + "Wipes and Reset the database.": "Cancella e reimposta il database.", + "Supply Delivery": "Consegna della fornitura", + "Configure the delivery feature.": "Configura la funzione di consegna.", + "Configure how background operations works.": "Configura il funzionamento delle operazioni in background.", + "Every procurement will be added to the selected transaction account": "Ogni acquisto verrà aggiunto al conto transazione selezionato", + "Every sales will be added to the selected transaction account": "Ogni vendita verrà aggiunta al conto transazione selezionato", + "Customer Credit Account (crediting)": "Conto accredito cliente (accredito)", + "Every customer credit will be added to the selected transaction account": "Ogni credito cliente verrà aggiunto al conto transazione selezionato", + "Customer Credit Account (debitting)": "Conto di accredito cliente (addebito)", + "Every customer credit removed will be added to the selected transaction account": "Ogni credito cliente rimosso verrà aggiunto al conto della transazione selezionato", + "Sales refunds will be attached to this transaction account": "I rimborsi delle vendite verranno allegati a questo conto della transazione", + "Stock Return Account (Spoiled Items)": "Conto restituzione stock (Articoli viziati)", + "Disbursement (cash register)": "Erogazione (registratore di cassa)", + "Transaction account for all cash disbursement.": "Conto delle transazioni per tutti gli esborsi in contanti.", + "Liabilities": "Passività", + "Transaction account for all liabilities.": "Conto delle transazioni per tutte le passività.", + "You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.": "È necessario creare un cliente a cui attribuire ogni vendita quando il cliente ambulante non si registra.", + "Show Tax Breakdown": "Mostra la ripartizione fiscale", + "Will display the tax breakdown on the receipt\/invoice.": "Visualizzerà la ripartizione fiscale sulla ricevuta\/fattura.", + "Available tags : ": "Tag disponibili:", + "{store_name}: displays the store name.": "{store_name}: visualizza il nome del negozio.", + "{store_email}: displays the store email.": "{store_email}: visualizza l'e-mail del negozio.", + "{store_phone}: displays the store phone number.": "{store_phone}: visualizza il numero di telefono del negozio.", + "{cashier_name}: displays the cashier name.": "{cashier_name}: visualizza il nome del cassiere.", + "{cashier_id}: displays the cashier id.": "{cashier_id}: mostra l'ID del cassiere.", + "{order_code}: displays the order code.": "{order_code}: visualizza il codice dell'ordine.", + "{order_date}: displays the order date.": "{order_date}: visualizza la data dell'ordine.", + "{order_type}: displays the order type.": "{order_type}: visualizza il tipo di ordine.", + "{customer_email}: displays the customer email.": "{customer_email}: visualizza l'e-mail del cliente.", + "{shipping_first_name}: displays the shipping first name.": "{shipping_first_name}: mostra il nome della spedizione.", + "{shipping_last_name}: displays the shipping last name.": "{shipping_last_name}: visualizza il cognome di spedizione.", + "{shipping_phone}: displays the shipping phone.": "{shipping_phone}: visualizza il telefono per la spedizione.", + "{shipping_address_1}: displays the shipping address_1.": "{shipping_address_1}: visualizza l'indirizzo di spedizione_1.", + "{shipping_address_2}: displays the shipping address_2.": "{shipping_address_2}: visualizza l'indirizzo di spedizione_2.", + "{shipping_country}: displays the shipping country.": "{shipping_country}: mostra il paese di spedizione.", + "{shipping_city}: displays the shipping city.": "{shipping_city}: visualizza la città di spedizione.", + "{shipping_pobox}: displays the shipping pobox.": "{shipping_pobox}: visualizza la casella di spedizione.", + "{shipping_company}: displays the shipping company.": "{shipping_company}: mostra la compagnia di spedizioni.", + "{shipping_email}: displays the shipping email.": "{shipping_email}: visualizza l'email di spedizione.", + "{billing_first_name}: displays the billing first name.": "{billing_first_name}: mostra il nome di fatturazione.", + "{billing_last_name}: displays the billing last name.": "{billing_last_name}: visualizza il cognome di fatturazione.", + "{billing_phone}: displays the billing phone.": "{billing_phone}: visualizza il telefono di fatturazione.", + "{billing_address_1}: displays the billing address_1.": "{billing_address_1}: visualizza l'indirizzo di fatturazione_1.", + "{billing_address_2}: displays the billing address_2.": "{billing_address_2}: visualizza l'indirizzo di fatturazione_2.", + "{billing_country}: displays the billing country.": "{billing_country}: mostra il paese di fatturazione.", + "{billing_city}: displays the billing city.": "{billing_city}: visualizza la città di fatturazione.", + "{billing_pobox}: displays the billing pobox.": "{billing_pobox}: visualizza la casella di fatturazione.", + "{billing_company}: displays the billing company.": "{billing_company}: mostra la società di fatturazione.", + "{billing_email}: displays the billing email.": "{billing_email}: visualizza l'email di fatturazione.", + "Available tags :": "Tag disponibili:", + "Quick Product Default Unit": "Unità predefinita del prodotto rapido", + "Set what unit is assigned by default to all quick product.": "Imposta quale unità viene assegnata per impostazione predefinita a tutti i prodotti rapidi.", + "Hide Exhausted Products": "Nascondi prodotti esauriti", + "Will hide exhausted products from selection on the POS.": "Nasconderà i prodotti esauriti dalla selezione sul POS.", + "Hide Empty Category": "Nascondi categoria vuota", + "Category with no or exhausted products will be hidden from selection.": "La categoria senza prodotti o con prodotti esauriti verrà nascosta dalla selezione.", + "Default Printing (web)": "Stampa predefinita (web)", + "The amount numbers shortcuts separated with a \"|\".": "I tasti di scelta rapida dell'importo sono separati da \"|\".", + "No submit URL was provided": "Non è stato fornito alcun URL di invio", + "Sorting is explicitely disabled on this column": "L'ordinamento è esplicitamente disabilitato su questa colonna", + "An unpexpected error occured while using the widget.": "Si è verificato un errore imprevisto durante l'utilizzo del widget.", + "This field must be similar to \"{other}\"\"": "Questo campo deve essere simile a \"{other}\"\"", + "This field must have at least \"{length}\" characters\"": "Questo campo deve contenere almeno \"{length}\" caratteri\"", + "This field must have at most \"{length}\" characters\"": "Questo campo deve contenere al massimo \"{length}\" caratteri\"", + "This field must be different from \"{other}\"\"": "Questo campo deve essere diverso da \"{other}\"\"", + "Search result": "Risultato della ricerca", + "Choose...": "Scegliere...", + "The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.": "Impossibile caricare il componente ${field.component}. Assicurati che sia iniettato sull'oggetto nsExtraComponents.", + "+{count} other": "+{count} altro", + "The selected print gateway doesn't support this type of printing.": "Il gateway di stampa selezionato non supporta questo tipo di stampa.", + "millisecond| second| minute| hour| day| week| month| year| decade| century| millennium": "millisecondo| secondo| minuto| ora| giorno| settimana| mese| anno| decennio| secolo| millennio", + "milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia": "millisecondi| secondi| minuti| ore| giorni| settimane| mesi| anni| decenni| secoli| millenni", + "An error occured": "Si è verificato un errore", + "You\\'re about to delete selected resources. Would you like to proceed?": "Stai per eliminare le risorse selezionate. Vuoi continuare?", + "See Error": "Vedi Errore", + "Your uploaded files will displays here.": "I file caricati verranno visualizzati qui.", + "Nothing to care about !": "Niente di cui preoccuparsi!", + "Would you like to bulk edit a system role ?": "Desideri modificare in blocco un ruolo di sistema?", + "Total :": "Totale :", + "Remaining :": "Residuo :", + "Instalments:": "Rate:", + "This instalment doesn\\'t have any payment attached.": "Questa rata non ha alcun pagamento allegato.", + "You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?": "Effettui un pagamento per {amount}. Un pagamento non può essere annullato. Vuoi continuare ?", + "An error has occured while seleting the payment gateway.": "Si è verificato un errore durante la selezione del gateway di pagamento.", + "You're not allowed to add a discount on the product.": "Non è consentito aggiungere uno sconto sul prodotto.", + "You're not allowed to add a discount on the cart.": "Non è consentito aggiungere uno sconto al carrello.", + "Cash Register : {register}": "Registratore di cassa: {registro}", + "The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?": "L'ordine corrente verrà cancellato. Ma non eliminato se è persistente. Vuoi continuare ?", + "You don't have the right to edit the purchase price.": "Non hai il diritto di modificare il prezzo di acquisto.", + "Dynamic product can\\'t have their price updated.": "Il prezzo dei prodotti dinamici non può essere aggiornato.", + "You\\'re not allowed to edit the order settings.": "Non sei autorizzato a modificare le impostazioni dell'ordine.", + "Looks like there is either no products and no categories. How about creating those first to get started ?": "Sembra che non ci siano prodotti né categorie. Che ne dici di crearli prima per iniziare?", + "Create Categories": "Crea categorie", + "You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?": "Stai per utilizzare {amount} dall'account cliente per effettuare un pagamento. Vuoi continuare ?", + "An unexpected error has occured while loading the form. Please check the log or contact the support.": "Si è verificato un errore imprevisto durante il caricamento del modulo. Controlla il registro o contatta il supporto.", + "We were not able to load the units. Make sure there are units attached on the unit group selected.": "Non siamo riusciti a caricare le unità. Assicurati che ci siano unità collegate al gruppo di unità selezionato.", + "The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?": "L'unità corrente che stai per eliminare ha un riferimento nel database e potrebbe già avere scorte. L'eliminazione di tale riferimento rimuoverà lo stock procurato. Procederesti?", + "There shoulnd\\'t be more option than there are units.": "Non dovrebbero esserci più opzioni di quante siano le unità.", + "Either Selling or Purchase unit isn\\'t defined. Unable to proceed.": "L'unità di vendita o quella di acquisto non sono definite. Impossibile procedere.", + "Select the procured unit first before selecting the conversion unit.": "Selezionare l'unità acquistata prima di selezionare l'unità di conversione.", + "Convert to unit": "Converti in unità", + "An unexpected error has occured": "Si è verificato un errore imprevisto", + "Unable to add product which doesn\\'t unit quantities defined.": "Impossibile aggiungere un prodotto che non abbia quantità unitarie definite.", + "{product}: Purchase Unit": "{product}: unità di acquisto", + "The product will be procured on that unit.": "Il prodotto verrà acquistato su quell'unità.", + "Unkown Unit": "Unità sconosciuta", + "Choose Tax": "Scegli Tasse", + "The tax will be assigned to the procured product.": "L'imposta verrà assegnata al prodotto acquistato.", + "Show Details": "Mostra dettagli", + "Hide Details": "Nascondere dettagli", + "Important Notes": "Note importanti", + "Stock Management Products.": "Prodotti per la gestione delle scorte.", + "Doesn\\'t work with Grouped Product.": "Non funziona con i prodotti raggruppati.", + "Convert": "Convertire", + "Looks like no valid products matched the searched term.": "Sembra che nessun prodotto valido corrisponda al termine cercato.", + "This product doesn't have any stock to adjust.": "Questo prodotto non ha stock da regolare.", + "Select Unit": "Seleziona Unità", + "Select the unit that you want to adjust the stock with.": "Seleziona l'unità con cui desideri regolare lo stock.", + "A similar product with the same unit already exists.": "Esiste già un prodotto simile con la stessa unità.", + "Select Procurement": "Seleziona Approvvigionamento", + "Select the procurement that you want to adjust the stock with.": "Selezionare l'approvvigionamento con cui si desidera rettificare lo stock.", + "Select Action": "Seleziona Azione", + "Select the action that you want to perform on the stock.": "Seleziona l'azione che desideri eseguire sul titolo.", + "Would you like to remove the selected products from the table ?": "Vuoi rimuovere i prodotti selezionati dalla tabella?", + "Unit:": "Unità:", + "Operation:": "Operazione:", + "Procurement:": "Approvvigionamento:", + "Reason:": "Motivo:", + "Provided": "Fornito", + "Not Provided": "Non fornito", + "Remove Selected": "Rimuovi i selezionati", + "Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.": "I token vengono utilizzati per fornire un accesso sicuro alle risorse NexoPOS senza dover condividere nome utente e password personali.\n Una volta generati, non scadranno finché non li revocherai esplicitamente.", + "You haven\\'t yet generated any token for your account. Create one to get started.": "Non hai ancora generato alcun token per il tuo account. Creane uno per iniziare.", + "You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?": "Stai per eliminare un token che potrebbe essere utilizzato da un'app esterna. L'eliminazione impedirà all'app di accedere all'API. Vuoi continuare ?", + "Date Range : {date1} - {date2}": "Intervallo di date: {date1} - {date2}", + "Document : Best Products": "Documento: migliori prodotti", + "By : {user}": "Da: {utente}", + "Range : {date1} — {date2}": "Intervallo: {date1} — {date2}", + "Document : Sale By Payment": "Documento: Vendita tramite pagamento", + "Document : Customer Statement": "Documento: Dichiarazione del cliente", + "Customer : {selectedCustomerName}": "Cliente: {selectedCustomerName}", + "All Categories": "tutte le categorie", + "All Units": "Tutte le unità", + "Date : {date}": "Data: {date}", + "Document : {reportTypeName}": "Documento: {reportTypeName}", + "Threshold": "Soglia", + "Select Units": "Seleziona Unità", + "An error has occured while loading the units.": "Si è verificato un errore durante il caricamento delle unità.", + "An error has occured while loading the categories.": "Si è verificato un errore durante il caricamento delle categorie.", + "Document : Payment Type": "Documento: tipo di pagamento", + "Document : Profit Report": "Documento: Rapporto sugli utili", + "Filter by Category": "Filtra per categoria", + "Filter by Units": "Filtra per unità", + "An error has occured while loading the categories": "Si è verificato un errore durante il caricamento delle categorie", + "An error has occured while loading the units": "Si è verificato un errore durante il caricamento delle unità", + "By Type": "Per tipo", + "By User": "Per utente", + "By Category": "Per categoria", + "All Category": "Tutte le categorie", + "Document : Sale Report": "Documento: Rapporto di vendita", + "Filter By Category": "Filtra per categoria", + "Allow you to choose the category.": "Permettiti di scegliere la categoria.", + "No category was found for proceeding the filtering.": "Nessuna categoria trovata per procedere al filtraggio.", + "Document : Sold Stock Report": "Documento: Rapporto sulle scorte vendute", + "Filter by Unit": "Filtra per unità", + "Limit Results By Categories": "Limita i risultati per categorie", + "Limit Results By Units": "Limita i risultati per unità", + "Generate Report": "Genera rapporto", + "Document : Combined Products History": "Documento: Storia dei prodotti combinati", + "Ini. Qty": "Ini. Qtà", + "Added Quantity": "Quantità aggiunta", + "Add. Qty": "Aggiungere. Qtà", + "Sold Quantity": "Quantità venduta", + "Sold Qty": "Quantità venduta", + "Defective Quantity": "Quantità difettosa", + "Defec. Qty": "Difetto Qtà", + "Final Quantity": "Quantità finale", + "Final Qty": "Qtà finale", + "No data available": "Nessun dato disponibile", + "Document : Yearly Report": "Documento: Rapporto annuale", + "The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.": "Verrà calcolato il report per l'anno in corso, verrà inviato un lavoro e sarai informato una volta completato.", + "Unable to edit this transaction": "Impossibile modificare questa transazione", + "This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.": "Questa transazione è stata creata con un tipo che non è più disponibile. Questa tipologia non è più disponibile perché NexoPOS non è in grado di eseguire richieste in background.", + "Save Transaction": "Salva transazione", + "While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.": "Durante la selezione della transazione dell'entità, l'importo definito verrà moltiplicato per l'utente totale assegnato al gruppo di utenti selezionato.", + "The transaction is about to be saved. Would you like to confirm your action ?": "La transazione sta per essere salvata. Vuoi confermare la tua azione?", + "Unable to load the transaction": "Impossibile caricare la transazione", + "You cannot edit this transaction if NexoPOS cannot perform background requests.": "Non è possibile modificare questa transazione se NexoPOS non può eseguire richieste in background.", + "MySQL is selected as database driver": "MySQL è selezionato come driver del database", + "Please provide the credentials to ensure NexoPOS can connect to the database.": "Fornisci le credenziali per garantire che NexoPOS possa connettersi al database.", + "Sqlite is selected as database driver": "Sqlite è selezionato come driver del database", + "Make sure Sqlite module is available for PHP. Your database will be located on the database directory.": "Assicurati che il modulo SQLite sia disponibile per PHP. Il tuo database si troverà nella directory del database.", + "Checking database connectivity...": "Verifica della connettività del database in corso...", + "Driver": "Autista", + "Set the database driver": "Imposta il driver del database", + "Hostname": "Nome host", + "Provide the database hostname": "Fornire il nome host del database", + "Username required to connect to the database.": "Nome utente richiesto per connettersi al database.", + "The username password required to connect.": "La password del nome utente richiesta per connettersi.", + "Database Name": "Nome del database", + "Provide the database name. Leave empty to use default file for SQLite Driver.": "Fornire il nome del database. Lascia vuoto per utilizzare il file predefinito per SQLite Driver.", + "Database Prefix": "Prefisso del database", + "Provide the database prefix.": "Fornire il prefisso del database.", + "Port": "Porta", + "Provide the hostname port.": "Fornire la porta del nome host.", + "NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.": "NexoPOS<\/strong> è ora in grado di connettersi al database. Inizia creando l'account amministratore e dando un nome alla tua installazione. Una volta installata, questa pagina non sarà più accessibile.", + "Install": "Installare", + "Application": "Applicazione", + "That is the application name.": "Questo è il nome dell'applicazione.", + "Provide the administrator username.": "Fornire il nome utente dell'amministratore.", + "Provide the administrator email.": "Fornire l'e-mail dell'amministratore.", + "What should be the password required for authentication.": "Quale dovrebbe essere la password richiesta per l'autenticazione.", + "Should be the same as the password above.": "Dovrebbe essere la stessa della password sopra.", + "Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.": "Grazie per aver utilizzato NexoPOS per gestire il tuo negozio. Questa procedura guidata di installazione ti aiuterà a eseguire NexoPOS in pochissimo tempo.", + "Choose your language to get started.": "Scegli la tua lingua per iniziare.", + "Remaining Steps": "Passaggi rimanenti", + "Database Configuration": "Configurazione della banca dati", + "Application Configuration": "Configurazione dell'applicazione", + "Language Selection": "Selezione della lingua", + "Select what will be the default language of NexoPOS.": "Seleziona quale sarà la lingua predefinita di NexoPOS.", + "In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.": "Per mantenere NexoPOS funzionante senza intoppi con gli aggiornamenti, dobbiamo procedere alla migrazione del database. Infatti non devi fare alcuna azione, aspetta solo che il processo sia terminato e verrai reindirizzato.", + "Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.": "Sembra che si sia verificato un errore durante l'aggiornamento. Di solito, dare un'altra dose dovrebbe risolvere il problema. Tuttavia, se ancora non ne hai alcuna possibilità.", + "Please report this message to the support : ": "Si prega di segnalare questo messaggio al supporto:", + "No refunds made so far. Good news right?": "Nessun rimborso effettuato finora. Buone notizie vero?", + "Open Register : %s": "Registro aperto: %s", + "Loading Coupon For : ": "Caricamento coupon per:", + "This coupon requires products that aren\\'t available on the cart at the moment.": "Questo coupon richiede prodotti che al momento non sono disponibili nel carrello.", + "This coupon requires products that belongs to specific categories that aren\\'t included at the moment.": "Questo coupon richiede prodotti che appartengono a categorie specifiche che al momento non sono incluse.", + "Too many results.": "Troppi risultati.", + "New Customer": "Nuovo cliente", + "Purchases": "Acquisti", + "Owed": "Dovuto", + "Usage :": "Utilizzo:", + "Code :": "Codice :", + "Order Reference": "riferenza dell'ordine", + "The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?": "Il prodotto \"{prodotto}\" non può essere aggiunto da un campo di ricerca, poiché è abilitato il \"Tracciamento accurato\". Vorresti saperne di più ?", + "{product} : Units": "{product}: unità", + "This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.": "Questo prodotto non ha alcuna unità definita per la vendita. Assicurati di contrassegnare almeno un'unità come visibile.", + "Previewing :": "Anteprima:", + "Search for options": "Cerca opzioni", + "The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.": "Il token API è stato generato. Assicurati di copiare questo codice in un luogo sicuro poiché verrà visualizzato solo una volta.\n Se perdi questo token, dovrai revocarlo e generarne uno nuovo.", + "The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.": "Al gruppo fiscale selezionato non sono assegnate sottotasse. Ciò potrebbe causare cifre errate.", + "The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.": "Il coupon \"%s\" è stato rimosso dal carrello poiché le condizioni richieste non sono più soddisfatte.", + "The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.": "L'attuale ordinanza sarà nulla. Ciò annullerà la transazione, ma l'ordine non verrà eliminato. Ulteriori dettagli sull'operazione saranno riportati nel rapporto. Valuta la possibilità di fornire il motivo di questa operazione.", + "Invalid Error Message": "Messaggio di errore non valido", + "Unamed Settings Page": "Pagina Impostazioni senza nome", + "Description of unamed setting page": "Descrizione della pagina di impostazione senza nome", + "Text Field": "Campo di testo", + "This is a sample text field.": "Questo è un campo di testo di esempio.", + "No description has been provided.": "Non è stata fornita alcuna descrizione.", + "You\\'re using NexoPOS %s<\/a>": "Stai utilizzando NexoPOS %s<\/a >", + "If you haven\\'t asked this, please get in touch with the administrators.": "Se non l'hai chiesto, contatta gli amministratori.", + "A new user has registered to your store (%s) with the email %s.": "Un nuovo utente si è registrato al tuo negozio (%s) con l'e-mail %s.", + "The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.": "L'account che hai creato per __%s__ è stato creato con successo. Ora puoi accedere all'utente con il tuo nome utente (__%s__) e la password che hai definito.", + "Note: ": "Nota:", + "Inclusive Product Taxes": "Tasse sui prodotti incluse", + "Exclusive Product Taxes": "Tasse sui prodotti esclusive", + "Condition:": "Condizione:", + "Date : %s": "Date", + "NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.": "NexoPOS non è stato in grado di eseguire una richiesta al database. Questo errore potrebbe essere correlato a un'errata configurazione del file .env. La seguente guida potrebbe esserti utile per aiutarti a risolvere questo problema.", + "Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.": "Purtroppo è successo qualcosa di inaspettato. Puoi iniziare dando un'altra possibilità cliccando su \"Riprova\". Se il problema persiste, utilizza l'output seguente per ricevere supporto.", + "Retry": "Riprova", + "If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.": "Se visualizzi questa pagina significa che NexoPOS è installato correttamente sul tuo sistema. Dato che questa pagina è destinata ad essere il frontend, NexoPOS per il momento non ha un frontend. Questa pagina mostra collegamenti utili che ti porteranno alle risorse importanti.", + "Compute Products": "Prodotti informatici", + "Unammed Section": "Sezione senza nome", + "%s order(s) has recently been deleted as they have expired.": "%s ordini sono stati recentemente eliminati perché scaduti.", + "%s products will be updated": "%s prodotti verranno aggiornati", + "Procurement %s": "Approvvigionamento %s", + "You cannot assign the same unit to more than one selling unit.": "Non è possibile assegnare la stessa unità a più di un'unità di vendita.", + "The quantity to convert can\\'t be zero.": "La quantità da convertire non può essere zero.", + "The source unit \"(%s)\" for the product \"%s": "L'unità di origine \"(%s)\" per il prodotto \"%s", + "The conversion from \"%s\" will cause a decimal value less than one count of the destination unit \"%s\".": "La conversione da \"%s\" causerà un valore decimale inferiore a un conteggio dell'unità di destinazione \"%s\".", + "{customer_first_name}: displays the customer first name.": "{customer_first_name}: visualizza il nome del cliente.", + "{customer_last_name}: displays the customer last name.": "{customer_last_name}: visualizza il cognome del cliente.", + "No Unit Selected": "Nessuna unità selezionata", + "Unit Conversion : {product}": "Conversione unità: {prodotto}", + "Convert {quantity} available": "Converti {quantity} disponibile", + "The quantity should be greater than 0": "La quantità deve essere maggiore di 0", + "The provided quantity can\\'t result in any convertion for unit \"{destination}\"": "La quantità fornita non può comportare alcuna conversione per l'unità \"{destinazione}\"", + "Conversion Warning": "Avviso di conversione", + "Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?": "Solo {quantity}({source}) può essere convertito in {destinationCount}({destination}). Vuoi continuare ?", + "Confirm Conversion": "Conferma conversione", + "You\\'re about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?": "Stai per convertire {quantity}({source}) in {destinationCount}({destination}). Vuoi continuare?", + "Conversion Successful": "Conversione riuscita", + "The product {product} has been converted successfully.": "Il prodotto {product} è stato convertito con successo.", + "An error occured while converting the product {product}": "Si è verificato un errore durante la conversione del prodotto {product}", + "The quantity has been set to the maximum available": "La quantità è stata impostata al massimo disponibile", + "The product {product} has no base unit": "Il prodotto {product} non ha un'unità di base", + "Developper Section": "Sezione sviluppatori", + "The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?": "Il database verrà cancellato e tutti i dati cancellati. Vengono mantenuti solo gli utenti e i ruoli. Vuoi continuare ?", + "An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s": "Si è verificato un errore durante la creazione di un codice a barre \"%s\" utilizzando il tipo \"%s\" per il prodotto. Assicurati che il valore del codice a barre sia corretto per il tipo di codice a barre selezionato. Ulteriori informazioni: %s" +} \ No newline at end of file diff --git a/lang/km.json b/lang/km.json index 2fcbf511e..c4ebfb112 100644 --- a/lang/km.json +++ b/lang/km.json @@ -1,2683 +1,2696 @@ { - "Percentage": "ភាគរយ", - "Flat": "ទឹកប្រាក់", - "Unknown Type": "មិនស្គាល់ប្រភេទ", - "Male": "ប្រុស", - "Female": "ស្រី", - "Not Defined": "មិនបានកំណត់", - "Assignation": "ការចាត់តាំង", - "Stocked": "បានស្តុក", - "Defective": "ខូច", - "Deleted": "បានលុប", - "Removed": "បានដកចេញ", - "Returned": "បានយកត្រលប់មកវិញ", - "Sold": "បានលក់", - "Lost": "បានបាត់បង់", - "Added": "បានបន្ថែម", - "Incoming Transfer": "ផ្ទេរចូល", - "Outgoing Transfer": "ផ្ទេរចូល", - "Transfer Rejected": "ការផ្ទេរត្រូវបានបដិសេធ", - "Transfer Canceled": "ការផ្ទេរត្រូវបានលុបចោល", - "Void Return": "ការយកត្រឡប់មកវិញ ទុក​ជា​មោឃៈ", - "Adjustment Return": "កែប្រែការយកត្រឡប់មកវិញ", - "Adjustment Sale": "កែតម្រូវការលក់", - "Incoming Conversion": "បម្លែងចូល", - "Outgoing Conversion": "បម្លែងចេញ", - "Unknown Action": "មិនស្គាល់សកម្មភាព", - "Month Starts": "ដើមខែ", - "Month Middle": "ពាក់កណ្តាលខែ", - "Month Ends": "ចុងខែ", - "X Days After Month Starts": "X ថ្ងៃក្រោយខែចាប់ផ្តើម", - "X Days Before Month Ends": "X ថ្ងៃមុនខែបញ្ចប់", - "On Specific Day": "នៅថ្ងៃជាក់លាក់", - "Unknown Occurance": "ការកើតឡើងមិនស្គាល់", - "Direct Transaction": "ប្រតិបត្តិការផ្ទាល់", - "Recurring Transaction": "ប្រតិបត្តិការដែលកើតឡើងដដែលៗ", - "Entity Transaction": "ប្រតិបត្តិការរបស់អង្គភាព", - "Scheduled Transaction": "ប្រតិបត្តិការដែលបានគ្រោងទុក", - "Unknown Type (%s)": "មិនស្គាល់ប្រភេទ (%s)", - "Yes": "បាទ/ចាស៎", - "No": "ទេ", - "An invalid date were provided. Make sure it a prior date to the actual server date.": "កាលបរិច្ឆេទមិនត្រឹមត្រូវត្រូវបានបំពេញ។ ត្រូវប្រាកដថាវាជាកាលបរិច្ឆេទមុនទៅនឹងកាលបរិច្ឆេទម៉ាស៊ីនមេពិតប្រាកដ។", - "Computing report from %s...": "កំពុងគណនារបាយការណ៍ចេញពី %s...", - "The operation was successful.": "ប្រតិបត្តិការបានជោគជ័យ។", - "Unable to find a module having the identifier/namespace \"%s\"": "មិនអាចស្វែងរក a module ដែលមាន identifier/namespace \"%s\"", - "What is the CRUD single resource name ? [Q] to quit.": "តើអ្វីជាឈ្មោះសម្រាប់ CRUD single resource ? ចុច [Q] ដើម្បីចាកចេញ។", - "Please provide a valid value": "សូមផ្តល់ទិន្នន័យត្រឹមត្រូវ។", - "Which table name should be used ? [Q] to quit.": "តើ table ឈ្មោះអ្វីដែលនឹងត្រូវប្រើប្រាស់ ? ចុច [Q] ដើម្បីចាកចេញ។", - "What slug should be used ? [Q] to quit.": "តើ slug ដែលគួរប្រើប្រាស់ ? ចុច [Q] ដើម្បីចាកចេញ។", - "What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.": "តើអ្វីជា namespace សម្រាប់ CRUD Resource. ឧ: system.users ? ចុច [Q] ដើម្បីចាកចេញ។", - "Please provide a valid value.": "សូមផ្តល់ទិន្នន័យត្រឹមត្រូវ។", - "What is the full model name. eg: App\\Models\\Order ? [Q] to quit.": "តើអ្វីជាឈ្មោះ model ពេញ ឧ: App\\Models\\Order ? [Q] ដើម្បីចាកចេញ។", - "If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "បើសិនជា CRUD resource របស់អ្នកមានទំនាក់ទំនង, សូមបញ្ជាក់ដូចខាងក្រោម \"foreign_table, foreign_key, local_key\" ? ចុច [S] ដើម្បីរម្លង, [Q] ដើម្បីចាកចេញ។", - "Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "ចង់បង្កើត relation ? សូមបញ្ជាក់ដូចខាងក្រោម \"foreign_table, foreign_key, local_key\" ? ចុច [S] ដើម្បីរម្លង, [Q] ដើម្បីចាកចេញ។", - "Not enough parameters provided for the relation.": "មិនមាន parameters គ្រប់គ្រាន់សម្រាប់ផ្តល់ជូនទំនាក់ទំនង។", - "What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.": "តើអ្វីជា fillable column នៅលើ table: ឧ: username, email, password ? ចុច [S] ដើម្បីរម្លង, [Q] ដើម្បីចាកចេញ។", - "The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"": "CRUD resource \"%s\" for the module \"%s\" ត្រូវបានបង្កើតនៅ \"%s\"", - "The CRUD resource \"%s\" has been generated at %s": "CRUD resource \"%s\" ត្រូវបានបង្កើតនៅ %s", - "An unexpected error has occurred.": "កំហុស​ដែល​មិន​រំពឹង​ទុក​បាន​កើត​ឡើង​។", - "File Name": "ឈ្មោះឯកសារ", - "Status": "ស្ថានភាព", - "Unsupported argument provided: \"%s\"": "មិនគាំទ្រ argument ដែលបានផ្តល់: \"%s\"", - "Done": "រួចរាល់", - "The authorization token can\\'t be changed manually.": "The authorization token មិនអាចប្តូរដោយដៃបានទេ។", - "Localization for %s extracted to %s": "ការធ្វើមូលដ្ឋានីយកម្មសម្រាប់ %s extracted to %s", - "Translation process is complete for the module %s !": "ដំណើរការបកប្រែត្រូវបានបញ្ចប់សម្រាប់ module %s !", - "Unable to find the requested module.": "មិនអាចស្វែងរក module ដែលបានស្នើសុំទេ។", - "\"%s\" is a reserved class name": "\"%s\" គឺជាឈ្មោះ reserved class", - "The migration file has been successfully forgotten for the module %s.": "ឯកសារការធ្វើវិវឌ្ឍន៍កម្មត្រូវបានបំភ្លេចដោយជោគជ័យសម្រាប់ module %s.", - "%s migration(s) has been deleted.": "%s migration(s) ត្រូវបានលុប។", - "The command has been created for the module \"%s\"!": "The command ត្រូវបានបង្កើតសម្រាប់ module \"%s\"!", - "The controller has been created for the module \"%s\"!": "The controller ត្រូវបានបង្កើតសម្រាប់ module \"%s\"!", - "Would you like to delete \"%s\"?": "តើអ្នកចង់លុប \"%s\" ទេ?", - "Unable to find a module having as namespace \"%s\"": "មិនអាចស្វែងរក module ដែលមាន namespace \"%s\"", - "Name": "ឈ្មោះ", - "Namespace": "Namespace", - "Version": "កំណែរ", - "Author": "អ្នកបង្កើត", - "Enabled": "បើក", - "Path": "ផ្នែក", - "Index": "សន្ទស្សន៍", - "Entry Class": "Entry Class", - "Routes": "Routes", - "Api": "Api", - "Controllers": "Controllers", - "Views": "Views", - "Api File": "Api File", - "Migrations": "វិវឌ្ឍន៍កម្ម", - "Attribute": "Attribute", - "Value": "តម្លៃ", - "The event has been created at the following path \"%s\"!": "The event ត្រូវបានបង្កើតនៅ path \"%s\"!", - "The listener has been created on the path \"%s\"!": "The listener ត្រូវបានបង្កើតនៅ path \"%s\"!", - "A request with the same name has been found !": "សំណើដែលមានឈ្មោះដូចគ្នាត្រូវបានរកឃើញ!", - "Unable to find a module having the identifier \"%s\".": "មិនអាចស្វែងរក module ដែលមាន identifier \"%s\".", - "There is no migrations to perform for the module \"%s\"": "មិនមានវិវឌ្ឍន៍កម្មសម្រាប់ដំណើរការ module \"%s\"", - "The module migration has successfully been performed for the module \"%s\"": "The module migration ត្រូវបានអនុវត្តដោយជោគជ័យសម្រាប់ module \"%s\"", - "The products taxes were computed successfully.": "ពន្ធផលិតផលត្រូវបានគណនាដោយជោគជ័យ។", - "The product barcodes has been refreshed successfully.": "លេខកូដផលិតផលត្រូវបានកំណត់ឡើងវិញដោយជោគជ័យ។", - "%s products where updated.": "%s ផលិតផលដែលធ្វើបច្ចុប្បន្នភាព។", - "The demo has been enabled.": "ការបង្ហាញសាកល្បងត្រូវបានបើក។", - "Unsupported reset mode.": "របៀបកំណត់ឡើងវិញដែលមិនគាំទ្រ។", - "You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.": "អ្នកមិនបានផ្តល់ឈ្មោះឯកសារត្រឹមត្រូវទេ។ វាមិនគួរមានចន្លោះ ចំណុច ឬតួអក្សរពិសេសណាមួយឡើយ។", - "Unable to find a module having \"%s\" as namespace.": "មិនអាចស្វែងរក module ដែលមាន \"%s\" ដូចនឹង namespace.", - "A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.": "ឯកសារស្រដៀងគ្នាមានរួចហើយនៅ \"%s\". សូមប្រើ \"--force\" ដើម្បីជំនួសវា។", - "A new form class was created at the path \"%s\"": "ទម្រង់បែបបទ class ត្រូវបានបង្កើតនៅ \"%s\"", - "Unable to proceed, looks like the database can\\'t be used.": "មិន​អាច​បន្ត​បាន ហាក់​ដូច​ជា​មិន​អាច​ប្រើ​មូលដ្ឋាន​ទិន្នន័យ​បាន​ទេ។", - "What is the store name ? [Q] to quit.": "តើអ្វីជាឈ្មោះរបស់ហាង? ចុច [Q] ដើម្បីចាកចេញ។", - "Please provide at least 6 characters for store name.": "សូមផ្តល់យ៉ាងហោចណាស់ 6 តួអក្សរសម្រាប់ឈ្មោះហាង។", - "What is the administrator password ? [Q] to quit.": "តើអ្វីទៅជាពាក្យសម្ងាត់អ្នកគ្រប់គ្រង? ចុច [Q] ដើម្បីចាកចេញ។", - "Please provide at least 6 characters for the administrator password.": "សូមផ្តល់យ៉ាងហោចណាស់ 6 តួអក្សរសម្រាប់ពាក្យសម្ងាត់អ្នកគ្រប់គ្រង។", - "In which language would you like to install NexoPOS ?": "តើអ្នកចង់ដំឡើង NexoPOS ជាភាសាមួយណា?", - "You must define the language of installation.": "អ្នកចាំបាច់ត្រូវតែកំណត់ភាសានៃការដំឡើង។", - "What is the administrator email ? [Q] to quit.": "តើអ្វីទៅជាអ៊ីមែលអ្នកគ្រប់គ្រង? សូមចុច [Q] ដើម្បីចាកចេញ។", - "Please provide a valid email for the administrator.": "សូមផ្តល់អ៊ីមែលត្រឹមត្រូវសម្រាប់អ្នកគ្រប់គ្រង។", - "What is the administrator username ? [Q] to quit.": "តើ​ឈ្មោះ​អ្នក​ប្រើ​របស់​អ្នក​គ្រប់គ្រង​គឺ​ជា​អ្វី? ចុច [Q] ដើម្បីចាកចេញ។", - "Please provide at least 5 characters for the administrator username.": "សូមផ្តល់យ៉ាងហោចណាស់ 5 តួអក្សរសម្រាប់ឈ្មោះអ្នកប្រើប្រាស់អ្នកគ្រប់គ្រង។", - "Downloading latest dev build...": "កំពុងទាញយកកំណែរ dev ចុងក្រោយបង្អស់...", - "Reset project to HEAD...": "Reset project to HEAD...", - "Coupons List": "បញ្ជីគូប៉ុង", - "Display all coupons.": "បង្ហាញគូប៉ុងទាំងអស់។", - "No coupons has been registered": "មិនមានគូប៉ុងត្រូវបានកត់ត្រាទេ។", - "Add a new coupon": "បន្ថែមគូប៉ុងថ្មី", - "Create a new coupon": "បង្កើតគូប៉ុងថ្មី", - "Register a new coupon and save it.": "កត់ត្រាគូប៉ុងថ្មីនិងរក្សាវាទុក។", - "Edit coupon": "កែតម្រូវគូប៉ុង", - "Modify Coupon.": "កែតម្រូវគូប៉ុង។", - "Return to Coupons": "ត្រឡប់ទៅគូប៉ុងវិញ", - "Provide a name to the resource.": "សូមផ្តល់ឈ្មោះសម្រាប់ resource.", - "General": "ទូទៅ", - "Coupon Code": "កូដគូប៉ុង", - "Might be used while printing the coupon.": "Might be used while printing the coupon.", - "Percentage Discount": "បញ្ចុះតម្លៃជាភាគរយ", - "Flat Discount": "បញ្ចុះតម្លៃជាទឹកប្រាក់", - "Type": "ប្រភេទ", - "Define which type of discount apply to the current coupon.": "បញ្ជាក់ប្រភេទនៃការបញ្ចុះតម្លៃសម្រាប់គូប៉ុងនេះ។", - "Discount Value": "តម្លៃដែលត្រូវបញ្ចុះ", - "Define the percentage or flat value.": "បញ្ជាក់ចំនួនភាគរយ ឬទឹកប្រាក់។", - "Valid Until": "មាន​សុពលភាព​ដល់", - "Determine Until When the coupon is valid.": "កំណត់រយៈពេលដែលប័ណ្ណមានសុពលភាព។", - "Minimum Cart Value": "ការទិញអតិប្បរមា", - "What is the minimum value of the cart to make this coupon eligible.": "តើអ្វីជាតម្លៃអប្បបរមានៃការទិញដើម្បីធ្វើឱ្យគូប៉ុងមានសុពលភាព។", - "Maximum Cart Value": "តម្លៃទិញអតិបរមា", - "The value above which the current coupon can\\'t apply.": "គូប៉ុងបច្ចុប្បន្នមិនអាចអនុវត្ត សម្រាប់តម្លៃខាងលើបានទេ។", - "Valid Hours Start": "ម៉ោងដែលចាប់ផ្តើមមានសុពលភាព", - "Define form which hour during the day the coupons is valid.": "កំណត់​ទម្រង់បែបបទ​ម៉ោង​ក្នុង​ថ្ងៃ​ដែលគូប៉ុង​មាន​សុពលភាព។", - "Valid Hours End": "ម៉ោងដែលលែងមានសុពលភាព", - "Define to which hour during the day the coupons end stop valid.": "កំណត់​ម៉ោង​ណា​ក្នុង​អំឡុង​ថ្ងៃ​ដែល​គូប៉ុង​ឈប់​មាន​សុពលភាព។", - "Limit Usage": "កំណត់ចំនួនដែលអាចប្រើ", - "Define how many time a coupons can be redeemed.": "កំណត់ចំនួនដងដែលគូប៉ុងអាចត្រូវប្រើប្រាស់បាន។", - "Products": "ផលិតផល", - "Select Products": "ជ្រើសរើសផលិតផល", - "The following products will be required to be present on the cart, in order for this coupon to be valid.": "ផលិតផលខាងក្រោមនឹងត្រូវការចាំបាច់ដាក់ចូលក្នុងតារាងលក់ ដើម្បីអាចអនុវត្តគូប៉ុងបាន។", - "Categories": "ប្រភេទផលិតផល", - "Select Categories": "ជ្រើសរើសប្រភេទផលិតផល", - "The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.": "ផលិតផលស្ថិតក្នុងប្រភេទទាំងនេះនឹងត្រូវការចាំបាច់ដាក់ចូលក្នុងតារាងលក់ ដើម្បីអាចអនុវត្តគូប៉ុងបាន។", - "Customer Groups": "ក្រុមអតិថិជន", - "Assigned To Customer Group": "បានដាក់អតិថិជនចូលក្នុងក្រុម", - "Only the customers who belongs to the selected groups will be able to use the coupon.": "មានតែអតិថិជនដែលស្ថិតក្នុងក្រុមដែលបានជ្រើសរើសនេះទេ ដែលអាចប្រើប្រាស់គូប៉ុងបាន។", - "Customers": "អតិថិជន", - "Assigned To Customers": "ដាក់ចូលអតិថិជន", - "Only the customers selected will be ale to use the coupon.": "មានតែអតិថិជនដែលបានជ្រើសរើសនេះទេ ដែលអាចប្រើប្រាស់គូប៉ុងបាន។", - "Unable to save the coupon product as this product doens\\'t exists.": "មិនអាចរក្សាទុកគូប៉ុងនៃផលិតផលបានទេ ដោយសារផលិតផលនេះមិនមាន។", - "Unable to save the coupon category as this category doens\\'t exists.": "មិនអាចរក្សាទុកគូប៉ុងនៃប្រភេទផលិតផលបានទេ ដោយសារប្រភេទផលិតផលនេះមិនមាន។", - "Unable to save the coupon as one of the selected customer no longer exists.": "មិនអាចរក្សាទុកគូប៉ុងនៃអតិថិជនដែលបានជ្រើសរើសនោះទេ ដោយសារអតិថិជននេះមិនមាន។", - "Unable to save the coupon as one of the selected customer group no longer exists.": "មិនអាចរក្សាទុកគូប៉ុងសម្រាប់អតិថិជនបានទេ ដោយសារអតិថិជនលែងមានទៀតហើយ។", - "Unable to save the coupon as this category doens\\'t exists.": "មិនអាចរក្សាទុកគូប៉ុងបានទេ ដោយសារមិនមានប្រភេទផលិតផល។", - "Unable to save the coupon as one of the customers provided no longer exists.": "មិនអាចរក្សាគូប៉ុងបានទេ ដោយសារអតិថិជននេះលែងមានទៀតហើយ។", - "Unable to save the coupon as one of the provided customer group no longer exists.": "មិនអាចរក្សាទុកគូប៉ុងសម្រាប់ក្រុមអតិថិជនបានទេ ដោយសារក្រុមអតិថិជនលែងមានទៀតហើយ។", - "Valid From": "សុពលភាព​ចាប់ពី", - "Valid Till": "សុពលភាព​រហូតដល់", - "Created At": "បង្កើតនៅ", - "N/A": "ទទេ", - "Undefined": "មិនបានកំណត់", - "Edit": "កែតម្រូវ", - "History": "ប្រវត្តិ", - "Delete": "លុប", - "Would you like to delete this ?": "តើអ្នកចង់លុបវាមែនទេ?", - "Delete a licence": "លុបអជ្ញារប័ណ្ណ", - "Delete Selected Groups": "លុបក្រុមដែលបានជ្រើសរើស", - "Coupon Order Histories List": "ប្រវត្តិការបញ្ជាទិញមានគូប៉ុង", - "Display all coupon order histories.": "បង្ហាញប្រវត្តិនៃការបញ្ជាទិញមានគូប៉ុងទាំងអស់។", - "No coupon order histories has been registered": "មិនមានប្រវត្តិការបញ្ជាទិញមានគូប៉ុងត្រូវបានកត់ត្រា", - "Add a new coupon order history": "បន្ថែមប្រវត្តិការបញ្ជាទិញដោយប្រើគូប៉ុង", - "Create a new coupon order history": "បង្កើតប្រវត្តិការបញ្ជាទិញដោយប្រើគូប៉ុង", - "Register a new coupon order history and save it.": "កត់ត្រាប្រវត្តិការបញ្ជាទិញដោយប្រើគូប៉ុង និងរក្សាទុក។", - "Edit coupon order history": "កែតម្រូវប្រវត្តិនៃការបញ្ជាទិញមានគូប៉ុង", - "Modify Coupon Order History.": "កែតម្រូវប្រវត្តិនៃការបញ្ជាទិញមានគូប៉ុង។", - "Return to Coupon Order Histories": "ត្រឡប់ទៅប្រវត្តិនៃការបញ្ជាទិញមានគូប៉ុង", - "Id": "Id", - "Code": "កូដ", - "Customer_coupon_id": "Customer_coupon_id", - "Order_id": "Order_id", - "Discount_value": "Discount_value", - "Minimum_cart_value": "Minimum_cart_value", - "Maximum_cart_value": "Maximum_cart_value", - "Limit_usage": "Limit_usage", - "Uuid": "Uuid", - "Created_at": "Created_at", - "Updated_at": "Updated_at", - "You\\re not allowed to do that.": "អ្នកមិនអាចធ្វើសកម្មភាពនេះទេ។", - "Customer": "អតិថិជន", - "Order": "ការបញ្ជាទិញ", - "Discount": "បញ្ចុះតម្លៃ", - "Would you like to delete this?": "តើអ្នកចង់លុបមែនទេ?", - "Previous Amount": "ទឹកប្រាក់ពីមុន", - "Amount": "ទឹកប្រាក់", - "Next Amount": "ទឹកប្រាក់បន្ទាប់", - "Operation": "ប្រតិបត្តិការ", - "Description": "ពិពណ៌នា", - "By": "ដោយ", - "Restrict the records by the creation date.": "ដាក់កម្រិតកំណត់ត្រាដោយកាលបរិច្ឆេទបង្កើត។", - "Created Between": "បានបង្កើតនៅចន្លោះ", - "Operation Type": "ប្រភេទប្រតិបត្តិការ", - "Restrict the orders by the payment status.": "ដាក់កម្រិតការបញ្ជាទិញដោយស្ថានភាពនៃការទូទាត់។", - "Crediting (Add)": "ការផ្តល់ឥណទាន (បន្ថែម)", - "Refund (Add)": "សងប្រាក់វិញ (បន្ថែម)", - "Deducting (Remove)": "ដកចេញ (លុប)", - "Payment (Remove)": "បង់ប្រាក់ (លុប)", - "Restrict the records by the author.": "ដាក់កម្រិតកំណត់ត្រាដោយអ្នកបង្កើត។", - "Total": "សរុប", - "Customer Accounts List": "បញ្ជីគណនីអតិថិជន", - "Display all customer accounts.": "បង្ហាញគណនីអតិថិជនទាំងអស់។", - "No customer accounts has been registered": "មិនមានគណនីអតិថិជនត្រូវបានកត់ត្រាទេ។", - "Add a new customer account": "បន្ថែមគណនីអតិថិជនថ្មី", - "Create a new customer account": "បង្កើតគណនីអតិថិជនថ្មី", - "Register a new customer account and save it.": "ចុះឈ្មោះគណនីអតិថិជនថ្មី ហើយរក្សាទុកវា។", - "Edit customer account": "កែតម្រូវគណីអតិថិជន", - "Modify Customer Account.": "កែតម្រូវគណីអតិថិជន", - "Return to Customer Accounts": "ត្រឡប់ទៅគណនីអតិថិជនវិញ។", - "This will be ignored.": "នេះនឹងត្រូវបានមិនអើពើ។", - "Define the amount of the transaction": "កំណត់បរិមាណនៃប្រតិបត្តិការ", - "Deduct": "ដកចេញ", - "Add": "បន្ថែម", - "Define what operation will occurs on the customer account.": "កំណត់ថាតើប្រតិបត្តិការអ្វីនឹងកើតឡើងនៅលើគណនីអតិថិជន។", - "Customer Coupons List": "បញ្ជីគូប៉ុងរបស់អតិថិជន", - "Display all customer coupons.": "បង្ហាញគូប៉ុងរបស់អតិថិជនទាំងអស់។", - "No customer coupons has been registered": "គ្មានគូប៉ុងរបស់អតិថិជនត្រូវបានចុះឈ្មោះទេ", - "Add a new customer coupon": "បន្ថែមគូប៉ុងរបស់អតិថិជនថ្មី", - "Create a new customer coupon": "បង្កើតគូប៉ុងអតិថិជនថ្មី។", - "Register a new customer coupon and save it.": "កត់ត្រាគូប៉ុងសម្រាប់អតិថិជនថ្មី ហើយរក្សាទុកវា។", - "Edit customer coupon": "កែតម្រូវគូប៉ុងសម្រាប់អតិថិជន", - "Modify Customer Coupon.": "កែតម្រូវគូប៉ុងសម្រាប់អតិថិជន។", - "Return to Customer Coupons": "ត្រឡប់ទៅគូប៉ុងសម្រាប់អតិថិជនវិញ", - "Usage": "របៀបប្រើប្រាស់", - "Define how many time the coupon has been used.": "កំណត់ចំនួនដងដែលគូប៉ុងអាចត្រូវប្រើប្រាស់បាន។", - "Limit": "មានកំណត់", - "Define the maximum usage possible for this coupon.": "កំណត់ចំនួួនប្រើប្រាស់អតិប្បរមាដែលអាចទៅរួចសម្រាប់គូប៉ុង។", - "Date": "កាលបរិច្ឆេទ", - "Usage History": "ប្រវត្តិនៃការប្រើប្រាស់", - "Customer Coupon Histories List": "បញ្ជីប្រវត្តិគូប៉ុងសម្រាប់អតិថិជន", - "Display all customer coupon histories.": "បង្ហាញប្រវត្តិគូប៉ុងសម្រាប់អតិថិជនទាំងអស់។", - "No customer coupon histories has been registered": "មិនមានគូប៉ុងសម្រាប់អតិថិជនត្រូវបានកត់ត្រាទេ។", - "Add a new customer coupon history": "បន្ថែមប្រវត្តិគូប៉ុងសម្រាប់អតិថិជន", - "Create a new customer coupon history": "បង្កើតប្រវត្តិគូប៉ុងសម្រាប់អតិថិជន", - "Register a new customer coupon history and save it.": "បង្កើតប្រវត្តិគូប៉ុងសម្រាប់អតិថិជន និងរក្សាទុក។", - "Edit customer coupon history": "កែតម្រូវប្រវត្តិគូប៉ុងសម្រាប់អតិថិជន", - "Modify Customer Coupon History.": "កែតម្រូវប្រវត្តិគូប៉ុងសម្រាប់អតិថិជន។", - "Return to Customer Coupon Histories": "ត្រលប់ទៅប្រវត្តិគូប៉ុងរបស់អតិថិជន", - "Order Code": "កូដបញ្ជារទិញ", - "Coupon Name": "ឈ្មោះគូប៉ុង", - "Customers List": "បញ្ជីអតិថិជន", - "Display all customers.": "បង្ហាញបញ្ជីអតិថិជនទាំងអស់", - "No customers has been registered": "មិនមានការកត់ត្រាអតិថិជន", - "Add a new customer": "បន្ថែមអតិថិជនថ្មី", - "Create a new customer": "បង្កើតអតិថិជនថ្មី", - "Register a new customer and save it.": "ចុះឈ្មោះអតិថិជនថ្មី និងរក្សាវាទុក។", - "Edit customer": "កែតម្រូវអតិថិជន", - "Modify Customer.": "កែតម្រូវអតិថិជន", - "Return to Customers": "ត្រឡប់ទៅអតិថិជនវិញ", - "Customer Name": "ឈ្មោះ​អតិថិជន", - "Provide a unique name for the customer.": "សូមបញ្ជូលឈ្មោះរបស់អតិថិជនដោយមិនជាន់គ្នា។", - "Last Name": "នាមខ្លួន", - "Provide the customer last name": "សូមបញ្ជូលឈ្មោះរបស់អតិថិជន", - "Credit Limit": "កំណត់ឥណទាន", - "Set what should be the limit of the purchase on credit.": "កំណត់អ្វីដែលគួរតែជាដែនកំណត់នៃការទិញនៅលើឥណទាន។", - "Group": "ក្រុម", - "Assign the customer to a group": "ដាក់អតិថិជនទៅក្នុងក្រុមមួយ", - "Birth Date": "ថ្ងៃខែ​ឆ្នាំ​កំណើត", - "Displays the customer birth date": "បង្ហាញថ្ងៃខែឆ្នាំកំណើតរបស់អតិថិជន", - "Email": "អ៊ីមែល", - "Provide the customer email.": "ផ្តល់អ៊ីមែលអតិថិជន។", - "Phone Number": "លេខទូរសព្ទ", - "Provide the customer phone number": "បញ្ចូលលេខទូរស័ព្ទអតិថិជន", - "PO Box": "ប្រអប់ប្រៃសណីយ៍", - "Provide the customer PO.Box": "បញ្ចូលប្រអប់ប្រៃសណីយ៍អតិថិជន", - "Gender": "ភេទ", - "Provide the customer gender.": "បញ្ចូលភេទអតិថិជន។។", - "Billing Address": "អាសយដ្ឋានវិក្កយបត្រ", - "Shipping Address": "អាសយដ្ឋានដឹកជញ្ជូន", - "The assigned default customer group doesn\\'t exist or is not defined.": "មិនមានក្រុមអតិថិជនលំនាំដើមដែលបានកំណត់ ឬមិនត្រូវបានកំណត់។", - "First Name": "នាមត្រកូល", - "Phone": "លេខទូរសព្ទ", - "Account Credit": "គណនីឥណទាន", - "Owed Amount": "គណនីជំពាក់", - "Purchase Amount": "គណនីទិញចូល", - "Orders": "ការបញ្ជាទិញ", - "Rewards": "ប្រព័ន្ធលើកទឹកចិត្ត", - "Coupons": "គូប៉ុង", - "Wallet History": "ប្រវត្តិកាបូប", - "Delete a customers": "លុបអតិថិជន", - "Delete Selected Customers": "លុបអតិថិជនដែលបានជ្រើសរើស", - "Customer Groups List": "បញ្ជីក្រុមអតិថិជន", - "Display all Customers Groups.": "បង្ហាញបញ្ជីក្រុមអតិថិជនទាំងអស់។", - "No Customers Groups has been registered": "មិនមានក្រុមអតិថិជនដែលបានកំណត់", - "Add a new Customers Group": "បន្ថែមក្រុមអតិថិជនថ្មី", - "Create a new Customers Group": "បង្កើតក្រុមអតិថិជនថ្មី", - "Register a new Customers Group and save it.": "បង្កើតក្រុមសម្រាប់អតិថិជន និងរក្សាទុក។", - "Edit Customers Group": "កែតម្រូវក្រុមអតិថិជន", - "Modify Customers group.": "កែតម្រូវក្រុមអតិថិជន។", - "Return to Customers Groups": "ត្រឡប់ទៅក្រុមអតិថិជនវិញ", - "Reward System": "ប្រព័ន្ធលើកទឹកចិត្ត", - "Select which Reward system applies to the group": "ជ្រើសរើសប្រព័ន្ធរង្វាន់ដែលអនុវត្តចំពោះក្រុម", - "Minimum Credit Amount": "ចំនួនទឹកប្រាក់ឥណទានអប្បបរមា", - "Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0": "កំណត់ជាភាគរយ តើអ្វីជាការទូទាត់ឥណទានអប្បបរមាដំបូងដែលធ្វើឡើងដោយអតិថិជនទាំងអស់នៅក្នុងក្រុម ក្នុងករណីការបញ្ជាទិញឥណទាន។ ប្រសិនបើទុកទៅ \"0", - "A brief description about what this group is about": "ការពិពណ៌នាសង្ខេបអំពីអ្វីដែលក្រុមនេះនិយាយអំពី", - "Created On": "បានបង្កើតនៅ", - "You\\'re not allowed to do this operation": "អ្នកមិនត្រូវបានអនុញ្ញាតឱ្យធ្វើប្រតិបត្តិការនេះទេ។", - "Customer Orders List": "បញ្ជីនៃការបញ្ជារទិញរបស់អតិថិជន", - "Display all customer orders.": "បង្ហាញរាល់ការបញ្ជាទិញរបស់អតិថិជនទាំងអស់។", - "No customer orders has been registered": "គ្មានការបញ្ជាទិញរបស់អតិថិជនត្រូវបានកត់ត្រាទេ។", - "Add a new customer order": "បន្ថែមការបញ្ជាទិញរបស់អតិថិជន", - "Create a new customer order": "បង្កើតការបញ្ជាទិញរបស់អតិថិជន", - "Register a new customer order and save it.": "ចុះឈ្មោះការបញ្ជាទិញអតិថិជនថ្មី ហើយរក្សាទុកវា។", - "Edit customer order": "កែតម្រូវការបញ្ជាទិញរបស់អស់អតិថិជន", - "Modify Customer Order.": "កែតម្រូវការបញ្ជាទិញរបស់អស់អតិថិជន", - "Return to Customer Orders": "ត្រឡប់ទៅការបញ្ជាទិញរបស់អតិថិជន", - "Change": "ផ្លាស់ប្តូរ", - "Created at": "បានបង្កើតនៅ", - "Customer Id": "Id អតិថិជន", - "Delivery Status": "ស្ថានភាពការដឹកជញ្ជូន", - "Discount Percentage": "ចុះតម្លៃជាភាគរយ", - "Discount Type": "ប្រភេទនៃការចុះតម្លៃ", - "Final Payment Date": "កាលបរិច្ឆេទបង់ប្រាក់ចុងក្រោយ", - "Tax Excluded": "មិនបញ្ចូលពន្ធ", - "Tax Included": "រូមបញ្ចូលពន្ធ", - "Payment Status": "ស្ថានភាពការបង់ប្រាក់", - "Process Status": "ស្ថានភាពប្រតិបត្តិការ", - "Shipping": "ដឹកជញ្ជូន", - "Shipping Rate": "តម្លៃនៃការដឹកជញ្ជូន", - "Shipping Type": "ប្រភេទនៃការដឹកជញ្ជូន", - "Sub Total": "សរុបរង", - "Tax Value": "តម្លៃពន្ធ", - "Tendered": "ដេញថ្លៃ", - "Title": "ស្លាក", - "Total installments": "សរុបការបង់រំលោះ", - "Updated at": "បានកែរប្រែនៅ", - "Voidance Reason": "ហេតុផល​នៃការលុប", - "Customer Rewards List": "បញ្ជីលើកទឹកអតិថិជន", - "Display all customer rewards.": "បង្ហាញរង្វាន់អតិថិជនទាំងអស់។", - "No customer rewards has been registered": "មិនមានរង្វាន់អតិថិជនត្រូវបានចុះឈ្មោះទេ។", - "Add a new customer reward": "បន្ថែមរង្វាន់អតិថិជនថ្មី", - "Create a new customer reward": "បង្កើតរង្វាន់អតិថិជនថ្មី។", - "Register a new customer reward and save it.": "ចុះឈ្មោះរង្វាន់អតិថិជនថ្មី ហើយរក្សាទុកវា។", - "Edit customer reward": "កែប្រែប្រព័ន្ធលើកទឹកចិត្តរបស់អតិថិជន។", - "Modify Customer Reward.": "កែប្រែប្រព័ន្ធលើកទឹកចិត្តរបស់អតិថិជន។", - "Return to Customer Rewards": "ត្រឡប់ទៅប្រព័ន្ធលើកទឹកចិត្តរបស់អតិថិជន", - "Points": "ពិន្ទុរ", - "Target": "ផ្តោត", - "Reward Name": "ស្មោះប្រព័ន្ធលើកទឹកចិត្ត", - "Last Update": "កែតម្រូវចុងក្រោយ", - "Product Histories": "ប្រវត្តិផលិតផល", - "Display all product stock flow.": "បង្ហាញលំហូរស្តុកផលិតផលទាំងអស់។", - "No products stock flow has been registered": "គ្មានលំហូរស្តុកផលិតផលត្រូវបានចុះបញ្ជីទេ។", - "Add a new products stock flow": "បន្ថែមលំហូរស្តុកផលិតផលថ្មី។", - "Create a new products stock flow": "បង្កើតលំហូរស្តុកផលិតផលថ្មី។", - "Register a new products stock flow and save it.": "ចុះឈ្មោះលំហូរស្តុកផលិតផលថ្មី ហើយរក្សាទុកវា។", - "Edit products stock flow": "កែសម្រួលលំហូរស្តុកផលិតផល", - "Modify Globalproducthistorycrud.": "កែប្រែប្រវត្តិផលិតផលសកល។", - "Return to Product Histories": "ត្រឡប់ទៅ ប្រវត្តិផលិតផល", - "Product": "ផលិតផល", - "Procurement": "ការទិញចូល", - "Unit": "ឯកតា", - "Initial Quantity": "បរិមាណដំបូង", - "Quantity": "បរិមាណ", - "New Quantity": "បរិមាណថ្មី", - "Total Price": "តម្លៃសរុប", - "Hold Orders List": "បញ្ជីបញ្ជាទិញកំពុងរង់ចាំ", - "Display all hold orders.": "បង្ហាញបញ្ជាទិញកំពុងរង់ចាំទាំងអស់។", - "No hold orders has been registered": "គ្មាន​ការ​បញ្ជា​ទិញ​កំពុងរង់ចាំត្រូវ​បានកត់ត្រាទេ", - "Add a new hold order": "បន្ថែមការបញ្ជាទិញកំពុងរង់ចាំ", - "Create a new hold order": "បង្កើតការបញ្ជាទិញកំពុងរង់ចាំ", - "Register a new hold order and save it.": "កត់ត្រាការបញ្ជាទិញកំពុងរង់ចាំ ហើយរក្សាទុក។", - "Edit hold order": "កែតម្រូវការបញ្ជាទិញកំពុងរង់ចាំ", - "Modify Hold Order.": "កែតម្រូវការបញ្ជាទិញកំពុងរង់ចាំ។", - "Return to Hold Orders": "ត្រឡប់ទៅការបញ្ជាទិញកំពុងរង់ចាំវិញ", - "Updated At": "កែតម្រូវនៅ", - "Continue": "បន្ត", - "Restrict the orders by the creation date.": "ដាក់កម្រិតការបញ្ជាទិញដោយកាលបរិច្ឆេទបង្កើត។", - "Paid": "បានបង់", - "Hold": "រង់ចាំ", - "Partially Paid": "បានបង់ជាដំណាក់កាល", - "Partially Refunded": "សងប្រាក់ជាដំណាក់កាល", - "Refunded": "បានទូរទាត់សង", - "Unpaid": "មិនទាន់បង់", - "Voided": "បានលុប", - "Due": "ជំពាក់", - "Due With Payment": "ប្រាក់បង់នៅសល់", - "Restrict the orders by the author.": "ដាក់កម្រិតលើការបញ្ជាទិញដោយអ្នកបង្កើត។", - "Restrict the orders by the customer.": "ដាក់កម្រិតលើការបញ្ជាទិញដោយអតិថិជន។", - "Customer Phone": "លេខទូរសព្ទអតិថិជន", - "Restrict orders using the customer phone number.": "ដាក់កម្រិតលើការបញ្ជាទិញដោយប្រើលេខទូរស័ព្ទរបស់អតិថិជន។", - "Cash Register": "កត់ត្រាទឹកប្រាក់", - "Restrict the orders to the cash registers.": "ដាក់កម្រិតលើការបញ្ជាទិញទៅបញ្ជីសាច់ប្រាក់។", - "Orders List": "បញ្ជីបញ្ជាទិញ", - "Display all orders.": "បង្ហាញការបញ្ជាទិញទាំងអស់។", - "No orders has been registered": "គ្មានការបញ្ជាទិញត្រូវបានចុះឈ្មោះទេ។", - "Add a new order": "បន្ថែមការបញ្ជាទិញថ្មី", - "Create a new order": "បង្កើតការបញ្ជាទិញថ្មី", - "Register a new order and save it.": "កត់ត្រាការបញ្ជាទិញថ្មី ហើយរក្សាទុកវា។", - "Edit order": "កែសម្រួលការបញ្ជាទិញ", - "Modify Order.": "កែសម្រួលការបញ្ជាទិញ។", - "Return to Orders": "ត្រលប់ទៅការបញ្ជាទិញ", - "Discount Rate": "អត្រា​បញ្ចុះតម្លៃ", - "The order and the attached products has been deleted.": "ការបញ្ជាទិញ និងផលិតផលដែលភ្ជាប់មកជាមួយត្រូវបានលុប។", - "Options": "ជម្រើស", - "Refund Receipt": "បង្កាន់ដៃសងប្រាក់វិញ", - "Invoice": "វិក្កយបត្រ", - "Receipt": "បង្កាន់ដៃ", - "Order Instalments List": "បញ្ជាទិញបញ្ជីបង់រំលោះ", - "Display all Order Instalments.": "បង្ហាញរាល់ការបញ្ជាទិញបង់រំលោះ។", - "No Order Instalment has been registered": "គ្មានការបង់រំលោះត្រូវបានកត់ត្រាទេ។", - "Add a new Order Instalment": "បន្ថែមការបង់រំលោះថ្មី", - "Create a new Order Instalment": "បង្កើតការបង់រំលោះថ្មី", - "Register a new Order Instalment and save it.": "កត់ត្រាការបង់រំលោះថ្មី ហើយរក្សាទុកវា។", - "Edit Order Instalment": "កែសម្រួលការបង់រំលោះ", - "Modify Order Instalment.": "កែសម្រួលការបង់រំលោះ។", - "Return to Order Instalment": "ត្រឡប់ទៅការបញ្ជាទិញបង់រំលោះវិញ", - "Order Id": "Id ការបញ្ជាទិញ", - "Payment Types List": "បញ្ជីនៃការទូទាត់", - "Display all payment types.": "បង្ហាញប្រភេទការទូទាត់ទាំងអស់។", - "No payment types has been registered": "មិនមានប្រភេទការទូទាត់ត្រូវបានកត់ត្រាទេ។", - "Add a new payment type": "បន្ថែមប្រភេទការទូទាត់ថ្មី", - "Create a new payment type": "បន្ថែមប្រភេទការទូទាត់ថ្មី។", - "Register a new payment type and save it.": "កត់ត្រាប្រភេទការទូទាត់ថ្មី ហើយរក្សាទុកវា។", - "Edit payment type": "កែសម្រួលប្រភេទការទូទាត់", - "Modify Payment Type.": "កែសម្រួលប្រភេទការទូទាត់។", - "Return to Payment Types": "ត្រឡប់ទៅប្រភេទការទូទាត់វិញ។", - "Label": "ស្លាក", - "Provide a label to the resource.": "សូមផ្តល់ស្លាកសម្រាប់ resource.", - "Active": "សកម្ម", - "Priority": "អាទិភាព", - "Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".": "កំណត់ការបញ្ជាទិញសម្រាប់ការទូទាត់។ លេខទាបជាងនេះ ទីមួយវានឹងបង្ហាញនៅលើផ្ទាំងទូទាត់។ ត្រូវតែចាប់ផ្តើមពី \"0\" ។", - "Identifier": "កំណត់អត្តសញ្ញាណ", - "A payment type having the same identifier already exists.": "ប្រភេទនៃការទូទាត់ដែលមានអត្តសញ្ញាណដូចគ្នាមានរួចហើយ។", - "Unable to delete a read-only payments type.": "មិនអាចលុបប្រភេទការទូទាត់ (បានតែអាន) ទេ។", - "Readonly": "បានតែអានប៉ុណ្ណោះ", - "Procurements List": "បញ្ជីនៃការទិញចូល", - "Display all procurements.": "បង្ហាញការទិញចូលទាំងអស់។", - "No procurements has been registered": "មិនមានការទិញចូលត្រូវបានកត់ត្រាទេ។", - "Add a new procurement": "បន្ថែមការទិញចូលថ្មី", - "Create a new procurement": "បង្កើតការទិញចូលថ្មី", - "Register a new procurement and save it.": "កត់ត្រាការទិញចូលថ្មី ហើយរក្សាទុក។", - "Edit procurement": "កែតម្រូវការទិញចូល", - "Modify Procurement.": "កែតម្រូវការទិញចូល។", - "Return to Procurements": "ត្រឡប់ទៅការទិញចូលវិញ", - "Provider Id": "Id អ្នកផ្គត់ផ្គង់", - "Total Items": "ទំនិញសរុប", - "Provider": "អ្នកផ្គត់ផ្គង់", - "Invoice Date": "កាលបរិច្ឆេទវិក្កយបត្រ", - "Sale Value": "ទំហំការលក់", - "Purchase Value": "ទំហំការទិញចូល", - "Taxes": "ពន្ធ", - "Set Paid": "កំណត់ថាបានបង់", - "Would you like to mark this procurement as paid?": "តើអ្នកចង់កំណត់សម្គាល់ការទិញចូលនេះថាបានបង់ទេ?", - "Refresh": "លោតទំព័រម្តងទៀត", - "Would you like to refresh this ?": "តើអ្នកចង់លោតទំព័រម្តងទៀតទេ?", - "Procurement Products List": "បញ្ជីផលិផលក្នុងការទិញចូល", - "Display all procurement products.": "បង្ហាញផលិតផលក្នុងការទិញចូលទាំងអស់។", - "No procurement products has been registered": "មិនមានផលិតផលក្នុងការទិញចូលត្រូវបានកត់ត្រាទេ", - "Add a new procurement product": "បង្កើតផលិផលថ្មីក្នុងការទិញចូល", - "Create a new procurement product": "បង្កើតផលិផលថ្មីក្នុងការទិញចូល", - "Register a new procurement product and save it.": "កត់ត្រាផលិតផលក្នុងការទិញចូល ហើយរក្សាទុក។", - "Edit procurement product": "កែតម្រូវផលិតផលក្នុងការទិញចូល", - "Modify Procurement Product.": "កែតម្រូវផលិតផលក្នុងការទិញចូល", - "Return to Procurement Products": "ត្រឡប់ទៅកាន់ការបញ្ជាទិញផលិផលចូល", - "Expiration Date": "កាលបរិច្ឆេទហួសកំណត់", - "Define what is the expiration date of the product.": "កំណត់កាលបរិច្ឆេទផុតកំណត់របស់ផលិផល។", - "Barcode": "កូដផលិតផល", - "On": "បើក", - "Category Products List": "បញ្ជីប្រភេទផលិតផល", - "Display all category products.": "បង្ហាញប្រភេទផលិតផលទាំងអស់។", - "No category products has been registered": "មិនមានប្រភេទផលិតផលត្រូវបានកត់ត្រាទេ", - "Add a new category product": "បន្ថែមប្រភេទផលិតផលថ្មី", - "Create a new category product": "បង្កើតប្រភេទផលិផលថ្មី", - "Register a new category product and save it.": "បង្កើតប្រេភេទផលិតផលថ្មី ហើយរក្សាទុក។", - "Edit category product": "កែតម្រូវប្រភេទផលិតផល", - "Modify Category Product.": "កែតម្រូវប្រភេទផលិតផល។", - "Return to Category Products": "ត្រឡប់ទៅប្រភេទផលិតផលវិញ", - "No Parent": "មិនមានមេ", - "Preview": "បង្ហាញ", - "Provide a preview url to the category.": "បញ្ចូល url ដែលអាចបង្ហាញទៅប្រភេទផលិតផល។", - "Displays On POS": "បង្ហាញនៅលើផ្ទាំងលក់", - "If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.": "ប្រសិនបើចុចទៅទេ នោះផលិតផលទាំងអស់ដែលត្រូវបានចាត់ថ្នាក់ក្នុងប្រភេទនេះ ឬប្រភេទរងទាំងអស់ នឹងមិនបង្ហាញនៅម៉ាស៊ីនឆូតកាតទេ។", - "Parent": "មេ", - "If this category should be a child category of an existing category": "ប្រសិនបើប្រភេទផលិតផលគួរជាកូនចៅរបស់ប្រភេទផលិផលដែលមានស្រាប់", - "Total Products": "ផលិតផលសរុប", - "Products List": "បញ្ជីផលិតផលទាំងអស់", - "Display all products.": "បង្ហាញផលិតផលទាំងអស់។", - "No products has been registered": "មិនមានផលិតផលត្រូវបានកត់ត្រានោះទេ", - "Add a new product": "បន្ថែមផលិតផលថ្មី", - "Create a new product": "បង្កើតផលិតផលថ្មី", - "Register a new product and save it.": "កត់ត្រាផលិតផលថ្មី ហើយរក្សាទុក។", - "Edit product": "កែតម្រូវផលិតផល", - "Modify Product.": "កែតម្រូវផលិតផល។", - "Return to Products": "ត្រឡប់ទៅកាន់ផលិតផលវិញ", - "Assigned Unit": "កំណត់ឯកតា", - "The assigned unit for sale": "ឯកតាដែលបានកំណត់សម្រាប់លក់", - "Convert Unit": "បម្លែងឯកតា", - "The unit that is selected for convertion by default.": "ឯកតាដែលត្រូវបានជ្រើសរើសសម្រាប់ការបំប្លែងតាមលំនាំដើម។", - "Sale Price": "តម្លៃលក់", - "Define the regular selling price.": "កំណត់តម្លៃលក់ធម្មតា។", - "Wholesale Price": "តម្លៃ​លក់ដុំ", - "Define the wholesale price.": "កំណត់តម្លៃលក់ដុំ។", - "COGS": "COGS", - "Used to define the Cost of Goods Sold.": "ប្រើដើម្បីកំណត់តម្លៃដើមនៃទំនិញដែលបានលក់។", - "Stock Alert": "ជូនដំណឹងអំពីស្តុក", - "Define whether the stock alert should be enabled for this unit.": "កំណត់ថាតើការជូនដំណឹងអំពីស្តុកគួរតែត្រូវបានបើកសម្រាប់អង្គភាពនេះឬអត់។", - "Low Quantity": "បរិមាណទាប", - "Which quantity should be assumed low.": "តើបរិមាណណាដែលគួរសន្មតថានៅសល់តិច។", - "Visible": "ដែលមើលឃើញ", - "Define whether the unit is available for sale.": "កំណត់ថាតើឯកតានេះមានសម្រាប់លក់ដែរឬទេ។", - "Preview Url": "Url ដែលអាចបង្ហាញ", - "Provide the preview of the current unit.": "ផ្តល់ការមើលជាមុននៃឯកតាបច្ចុប្បន្ន។", - "Identification": "ការកំណត់អត្តសញ្ញាណ", - "Product unique name. If it\\' variation, it should be relevant for that variation": "ឈ្មោះផលិតផលតែមួយគត់។ ប្រសិនបើវាជាបំរែបំរួល វាគួរតែពាក់ព័ន្ធសម្រាប់បំរែបំរួលនោះ។", - "Select to which category the item is assigned.": "ជ្រើសរើសប្រភេទណាដែលធាតុត្រូវបានចាត់តាំង។", - "Category": "ប្រភេទ", - "Define the barcode value. Focus the cursor here before scanning the product.": "កំណត់តម្លៃបាកូដ។ ផ្តោតលើទស្សន៍ទ្រនិចនៅទីនេះ មុនពេលស្កេនផលិតផល។", - "Define a unique SKU value for the product.": "កំណត់តម្លៃ SKU តែមួយគត់សម្រាប់ផលិតផល។", - "SKU": "SKU", - "Define the barcode type scanned.": "កំណត់ប្រភេទបាកូដដែលបានស្កេន។", - "EAN 8": "EAN 8", - "EAN 13": "EAN 13", - "Codabar": "Codabar", - "Code 128": "Code 128", - "Code 39": "Code 39", - "Code 11": "Code 11", - "UPC A": "UPC A", - "UPC E": "UPC E", - "Barcode Type": "ប្រភេទបាកូដ", - "Materialized Product": "ផលិតផលសម្ភារៈ", - "Dematerialized Product": "ផលិតផលខូចគុណភាព", - "Grouped Product": "ផលិតផលជាក្រុម", - "Define the product type. Applies to all variations.": "កំណត់ប្រភេទផលិតផល។ អនុវត្តចំពោះការប្រែប្រួលទាំងអស់។", - "Product Type": "ប្រភេទផលិតផល", - "On Sale": "មានលក់", - "Hidden": "លាក់ទុក", - "Define whether the product is available for sale.": "កំណត់ថាតើផលិតផលមានសម្រាប់លក់ដែរឬទេ។", - "Enable the stock management on the product. Will not work for service or uncountable products.": "បើកការគ្រប់គ្រងស្តុកលើផលិតផល។ នឹងមិនដំណើរការសម្រាប់សេវាកម្ម ឬផលិតផលដែលមិនអាចរាប់បានឡើយ។", - "Stock Management Enabled": "បានបើកការគ្រប់គ្រងស្តុក", - "Groups": "ក្រុម", - "Units": "ឯកតា", - "What unit group applies to the actual item. This group will apply during the procurement.": "តើក្រុមណាដែលអនុវត្តចំពោះធាតុពិត។ ក្រុមនេះនឹងអនុវត្តក្នុងអំឡុងពេលលទ្ធកម្ម។", - "Unit Group": "Unit Group", - "The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.": "ផលិតផលនឹងមិនអាចមើលឃើញនៅលើក្រឡាចត្រង្គ ហើយអាចទាញយកបានតែដោយប្រើកម្មវិធីអានបាកូដ ឬបាកូដដែលពាក់ព័ន្ធប៉ុណ្ណោះ។", - "Accurate Tracking": "ការតាមដានភាពត្រឹមត្រូវ", - "The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.": "តម្លៃនៃទំនិញដែលបានលក់នឹងត្រូវបានគណនាដោយស្វ័យប្រវត្តិដោយផ្អែកលើលទ្ធកម្ម និងការបំប្លែង។", - "Auto COGS": "COGS ស្វ័យប្រវត្តិ", - "Determine the unit for sale.": "កំណត់ឯកតាសម្រាប់លក់។", - "Selling Unit": "ឯកតាលក់", - "Expiry": "ផុតកំណត់", - "Product Expires": "ផលិតផលផុតកំណត់", - "Set to \"No\" expiration time will be ignored.": "កំណត់ដាក់ \"ទេ\" ពេលផុតកំណត់នឹងត្រូវមិនអើពើ។", - "Prevent Sales": "ការលក់មុនៗ", - "Allow Sales": "អនុញ្ញាតឱ្យលក់", - "Determine the action taken while a product has expired.": "កំណត់សកម្មភាពដែលបានធ្វើឡើងខណៈពេលដែលផលិតផលមួយបានផុតកំណត់។", - "On Expiration": "ផុតកំណត់នៅ", - "Choose Group": "ជ្រើសរើសក្រុម", - "Select the tax group that applies to the product/variation.": "ជ្រើសរើសក្រុមពន្ធដែលអនុវត្តចំពោះផលិតផល/បំរែបំរួល។", - "Tax Group": "ក្រុមនៃពន្ធ", - "Inclusive": "រួមបញ្ចូល", - "Exclusive": "មិនរួមបញ្ចូល", - "Define what is the type of the tax.": "កំណត់ប្រភេទពន្ធ។", - "Tax Type": "ប្រភេទពន្ធ", - "Images": "រូបភាព", - "Image": "រូបភាព", - "Choose an image to add on the product gallery": "ជ្រើសរើសរូបភាពដើម្បីបន្ថែមលើវិចិត្រសាលផលិតផល", - "Is Primary": "ជាគោល", - "Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.": "កំណត់ថាតើរូបភាពគួរតែជារូបភាពចម្បង។ ប្រសិនបើមានរូបភាពចម្បងច្រើនជាងមួយ រូបថតមួយនឹងត្រូវបានជ្រើសរើសសម្រាប់អ្នក។", - "Sku": "Sku", - "Materialized": "សម្ភារៈ", - "Dematerialized": "សម្ភារៈដែលអាចខូចគុណភាព", - "Grouped": "ដាក់ជាក្រុម", - "Unknown Type: %s": ":ប្រភេទមិនស្គាល់ %s", - "Disabled": "បិទ", - "Available": "ប្រើបាន", - "Unassigned": "មិនបានជ្រើសតាំង", - "See Quantities": "មើលបរិមាណ", - "See History": "មើលប្រវត្តិ", - "Would you like to delete selected entries ?": "តើអ្នកចង់លុបធាតុដែលបានជ្រើសរើសទេ?", - "Display all product histories.": "បង្ហាញប្រវត្តិផលិតផលទាំងអស់។", - "No product histories has been registered": "មិនមានប្រវត្តិផលិតផលត្រូវបានចុះឈ្មោះទេ។", - "Add a new product history": "បន្ថែមប្រវត្តិផលិតផលថ្មី", - "Create a new product history": "បង្កើតប្រវត្តិផលិតផលថ្មី។", - "Register a new product history and save it.": "កត់ត្រាប្រវត្តិផលិតផលថ្មី ហើយរក្សាទុកវា។", - "Edit product history": "កែសម្រួលប្រវត្តិផលិតផល", - "Modify Product History.": "កែប្រែប្រវត្តិផលិតផល។", - "After Quantity": "បរិមាណក្រោយមក", - "Before Quantity": "បរិមានពីមុន", - "Order id": "id បញ្ជាទិញ", - "Procurement Id": "Id កាតទិញចូល", - "Procurement Product Id": "Id ផលិតផលទិញចូល", - "Product Id": "Id ផលិតផល", - "Unit Id": "Id ឯកតា", - "Unit Price": "តម្លៃ​ឯកតា", - "P. Quantity": "P. បរិមាណ", - "N. Quantity": "N. បរិមាណ", - "Product Unit Quantities List": "បញ្ជីបរិមាណឯកតាផលិតផល", - "Display all product unit quantities.": "បង្ហាញបរិមាណឯកតាផលិតផលទាំងអស់។", - "No product unit quantities has been registered": "មិនមានបរិមាណឯកតាផលិតផលត្រូវបានចុះឈ្មោះទេ", - "Add a new product unit quantity": "បន្ថែមបរិមាណឯកតាផលិតផលថ្មី", - "Create a new product unit quantity": "បង្កើតបរិមាណឯកតាផលិតផលថ្មី។", - "Register a new product unit quantity and save it.": "ចុះឈ្មោះបរិមាណឯកតាផលិតផលថ្មី ហើយរក្សាទុកវា។", - "Edit product unit quantity": "កែសម្រួលបរិមាណឯកតាផលិតផល", - "Modify Product Unit Quantity.": "កែប្រែបរិមាណឯកតាផលិតផល។", - "Return to Product Unit Quantities": "ត្រឡប់ទៅ បរិមាណឯកតាផលិតផលវិញ", - "Product id": "លេខសម្គាល់ផលិតផល", - "Providers List": "បញ្ជីអ្នកផ្តត់ផ្គង់", - "Display all providers.": "បង្ហាញអ្នកផ្តល់សេវាទាំងអស់។", - "No providers has been registered": "គ្មានអ្នកផ្តត់ផ្គង់ត្រូវបានចុះឈ្មោះទេ", - "Add a new provider": "បន្ថែមអ្នកផ្គត់ផ្គង់សេវាថ្មី", - "Create a new provider": "បង្កើតអ្នកផ្គត់ផ្គង់សេវាថ្មី", - "Register a new provider and save it.": "ចុះឈ្មោះអ្នកផ្តត់ផ្គង់ថ្មី ហើយរក្សាទុកវា។", - "Edit provider": "កែតម្រូវអ្នកផ្គត់ផ្គង់", - "Modify Provider.": "កែតម្រូវអ្នកផ្គត់ផ្គង់។", - "Return to Providers": "ត្រឡប់ទៅកាន់អ្នកផ្គត់ផ្គង់", - "Provide the provider email. Might be used to send automated email.": "ផ្តល់អ៊ីមែលអ្នកផ្តត់ផ្គង់។ អាចត្រូវបានប្រើដើម្បីផ្ញើអ៊ីមែលដោយស្វ័យប្រវត្តិ។", - "Provider last name if necessary.": "នាមត្រកូលអ្នកផ្គត់ផ្គង់ប្រសិនបើចាំបាច់។", - "Contact phone number for the provider. Might be used to send automated SMS notifications.": "លេខទូរស័ព្ទទំនាក់ទំនងសម្រាប់អ្នកផ្តត់ផ្គង់។ ប្រហែលជាត្រូវបានប្រើដើម្បីផ្ញើការជូនដំណឹង SMS ដោយស្វ័យប្រវត្តិ។", - "Address 1": "អាសយដ្ឋានទី១", - "First address of the provider.": "អាសយដ្ឋានទី១របស់អ្នកផ្គត់ផ្គង់។", - "Address 2": "អាសយដ្ឋានទី២", - "Second address of the provider.": "អាសយដ្ឋានទីពីររបស់អ្នកផ្គត់ផ្គង់។", - "Further details about the provider": "ព័ត៌មានលម្អិតបន្ថែមអំពីអ្នកផ្តត់ផ្គង់", - "Amount Due": "ចំនួនទឹកប្រាក់ដែលនៅជំពាក់", - "Amount Paid": "ចំនួនទឹកប្រាក់ដែលត្រូវបង់", - "See Procurements": "មើលការទិញចូល", - "See Products": "មើលផលិតផល", - "Provider Procurements List": "បញ្ជីអ្នកផ្គត់ផ្គង់ទំនិញទិញចូល", - "Display all provider procurements.": "បង្ហាញអ្នកផ្គត់ផ្គង់ទំនិញទិញចូល។", - "No provider procurements has been registered": "គ្មានអ្នកផ្គត់ផ្គង់ទំនិញទិញចូលត្រូវបានចុះឈ្មោះទេ។", - "Add a new provider procurement": "បន្ថែមអ្នកផ្គត់ផ្គង់ទំនិញទិញចូល", - "Create a new provider procurement": "បង្កើតអ្នកផ្គត់ផ្គង់ទំនិញទិញចូល", - "Register a new provider procurement and save it.": "កត់ត្រាបន្ថែមអ្នកផ្គត់ផ្គង់ទំនិញទិញចូល និងរក្សាទុក។", - "Edit provider procurement": "កែសម្រួលអ្នកផ្គត់ផ្គង់ទំនិញទិញចូល", - "Modify Provider Procurement.": "កែសម្រួលអ្នកផ្គត់ផ្គង់ទំនិញទិញចូល.", - "Return to Provider Procurements": "ត្រឡប់ទៅអ្នកផ្គត់ផ្គង់ទំនិញទិញចូល", - "Delivered On": "បានដឹកជញ្ចូននៅ", - "Tax": "ពន្ធ", - "Delivery": "ដឹកជញ្ជូន", - "Payment": "ការបង់ប្រាក់", - "Items": "ផលិតផល", - "Provider Products List": "បញ្ជីអ្នកផ្គត់ផ្គង់ផលិតផល", - "Display all Provider Products.": "បង្ហាញអ្នកផ្គត់ផ្គង់ផលិតផលទាំងអស់។", - "No Provider Products has been registered": "គ្មានអ្នកផ្គត់ផ្គង់ផលិតផលត្រូវបានចុះឈ្មោះទេ", - "Add a new Provider Product": "គ្មានអ្នកផ្គត់ផ្គង់ផលិតផលត្រូវបានកត់ត្រាទេ", - "Create a new Provider Product": "បង្កើតអ្នកផ្គត់ផ្គង់ផលិតផលថ្មី", - "Register a new Provider Product and save it.": "កត់ត្រាអ្នកផ្គត់ផ្គង់ផលិតផល ហើយរក្សាទុកវា។", - "Edit Provider Product": "កែសម្រួលអ្នកផ្គត់ផ្គង់ផលិតផល", - "Modify Provider Product.": "កែសម្រួលអ្នកផ្គត់ផ្គង់ផលិតផល។", - "Return to Provider Products": "ត្រឡប់ទៅអ្នកផ្គត់ផ្គង់ផលិតផល", - "Purchase Price": "តម្លៃ​ទិញ", - "Registers List": "បញ្ជីចុះឈ្មោះ", - "Display all registers.": "បង្ហាញការចុះឈ្មោះទាំងអស់។", - "No registers has been registered": "គ្មានការចុះឈ្មោះណាមួយត្រូវបានកត់ត្រាទេ។", - "Add a new register": "បន្ថែមការចុះឈ្មោះ", - "Create a new register": "បង្កើតការចុះឈ្មោះថ្មី", - "Register a new register and save it.": "ចុះឈ្មោះចុះឈ្មោះថ្មី ហើយរក្សាទុកវា។", - "Edit register": "កែតម្រូវការចុះឈ្មោះ", - "Modify Register.": "កែតម្រូវការចុះឈ្មោះ។", - "Return to Registers": "ត្រឡប់ទៅការចុះឈ្មោះ", - "Closed": "បានបិទ", - "Define what is the status of the register.": "កំណត់ថាតើអ្វីជាស្ថានភាពនៃការចុះឈ្មោះ។", - "Provide mode details about this cash register.": "ផ្តល់ព័ត៌មានលម្អិតអំពីទម្រង់អំពីការចុះឈ្មោះសាច់ប្រាក់នេះ។", - "Unable to delete a register that is currently in use": "មិន​អាច​លុប​ការ​ចុះ​ឈ្មោះ​ដែល​កំពុង​ប្រើ​ប្រាស់​បច្ចុប្បន្ន​បាន​ទេ។", - "Used By": "បានប្រើដោយ", - "Balance": "សមតុល្យ", - "Register History": "ចុះឈ្មោះប្រវត្តិ", - "Register History List": "បញ្ជីប្រវិត្តចុះឈ្មោះ", - "Display all register histories.": "បង្ហាញប្រវត្តិចុះឈ្មោះទាំងអស់។", - "No register histories has been registered": "មិនមានប្រវត្តិចុះឈ្មោះត្រូវបានចុះឈ្មោះទេ។", - "Add a new register history": "បន្ថែមប្រវត្តិចុះឈ្មោះថ្មី។", - "Create a new register history": "បង្កើតប្រវត្តិចុះឈ្មោះថ្មី។", - "Register a new register history and save it.": "ចុះឈ្មោះប្រវត្តិចុះឈ្មោះថ្មី ហើយរក្សាទុកវា។", - "Edit register history": "កែសម្រួលប្រវត្តិចុះឈ្មោះ", - "Modify Registerhistory.": "កែសម្រួលប្រវត្តិចុះឈ្មោះ។", - "Return to Register History": "ត្រឡប់ទៅ ប្រវត្តិនៃការចុះឈ្មោះ", - "Register Id": "Id ការចុះឈ្មោះ", - "Action": "សកម្មភាព", - "Register Name": "ចុះឈ្មោះឈ្មោះ", - "Initial Balance": "សមតុល្យដំបូង", - "New Balance": "តុល្យភាពថ្មី", - "Transaction Type": "ប្រភេទប្រតិបត្តិការ", - "Done At": "រួចរាល់នៅ", - "Unchanged": "មិនផ្លាស់ប្តូរ", - "Shortage": "កង្វះខាត", - "Overage": "លើស", - "Reward Systems List": "បញ្ជីប្រព័ន្ធរង្វាន់", - "Display all reward systems.": "បង្ហាញប្រព័ន្ធរង្វាន់ទាំងអស់។", - "No reward systems has been registered": "មិនមានប្រព័ន្ធរង្វាន់ត្រូវបានចុះឈ្មោះទេ។", - "Add a new reward system": "បន្ថែមប្រព័ន្ធរង្វាន់ថ្មី", - "Create a new reward system": "បង្កើតប្រព័ន្ធរង្វាន់ថ្មី", - "Register a new reward system and save it.": "ចុះឈ្មោះប្រព័ន្ធរង្វាន់ថ្មី ហើយរក្សាទុកវា។", - "Edit reward system": "កែសម្រួលប្រព័ន្ធរង្វាន់", - "Modify Reward System.": "កែប្រែប្រព័ន្ធរង្វាន់។", - "Return to Reward Systems": "ត្រឡប់ទៅប្រព័ន្ធរង្វាន់វិញ", - "From": "ចាប់ពី", - "The interval start here.": "ចន្លោះពេលចាប់ផ្តើមនៅពេលនេះ។", - "To": "ដល់", - "The interval ends here.": "ចន្លោះពេលបញ្ចប់នៅពេលនេះ។", - "Points earned.": "ពិន្ទុដែលទទួលបាន។", - "Coupon": "គូប៉ុង", - "Decide which coupon you would apply to the system.": "សម្រេចចិត្តថាតើគូប៉ុងមួយណាដែលអ្នកនឹងអនុវត្តចំពោះប្រព័ន្ធ។", - "This is the objective that the user should reach to trigger the reward.": "នេះគឺជាគោលបំណងដែលអ្នកប្រើប្រាស់គួរតែឈានដល់ដើម្បីទទួលបានរង្វាន់។", - "A short description about this system": "ការពិពណ៌នាខ្លីអំពីប្រព័ន្ធនេះ", - "Would you like to delete this reward system ?": "តើអ្នកចង់លុបប្រព័ន្ធរង្វាន់នេះទេ?", - "Delete Selected Rewards": "លុបរង្វាន់ដែលបានជ្រើសរើស", - "Would you like to delete selected rewards?": "តើអ្នកចង់លុបរង្វាន់ដែលបានជ្រើសរើសទេ?", - "No Dashboard": "គ្មានផ្ទាំងគ្រប់គ្រង", - "Store Dashboard": "ផ្ទាំងគ្រប់គ្រងស្តុក", - "Cashier Dashboard": "ផ្ទាំងគ្រប់គ្រងសម្រាប់អ្នកគិតលុយ", - "Default Dashboard": "ផ្ទាំងគ្រប់គ្រងដើម", - "Roles List": "បញ្ជីតួនាទី", - "Display all roles.": "បង្ហាញតួនាទីទាំងអស់។", - "No role has been registered.": "មិនមានតួនាទីបានកត់ត្រានោះទេ?", - "Add a new role": "បន្ថែមតួនាទីថ្មី", - "Create a new role": "បង្កើតតួនាទីថ្មី", - "Create a new role and save it.": "បង្កើតតួនាទីថ្មី ហើយរក្សាទុក។", - "Edit role": "កែតម្រូវតួនាទី", - "Modify Role.": "កែតម្រូវតួនាទី", - "Return to Roles": "ត្រឡប់ទៅតួនាទីវិញ", - "Provide a name to the role.": "បញ្ចូលឈ្មោះសម្រាប់តួនាទី។", - "Should be a unique value with no spaces or special character": "គួរ​តែ​ជា​តម្លៃ​មិនជាន់គ្នា ហើយ​មិន​មាន​ដកឃ្លា ឬ​តួអក្សរ​ពិសេស", - "Provide more details about what this role is about.": "ផ្តល់ព័ត៌មានលម្អិតបន្ថែមអំពីតួនាទីនេះ។", - "Unable to delete a system role.": "មិនអាចលុបតួនាទីប្រព័ន្ធបានទេ។", - "Clone": "ចម្លង", - "Would you like to clone this role ?": "តើអ្នកចង់ចម្លងតួនាទីនេះទេ?", - "You do not have enough permissions to perform this action.": "អ្នកមិនមានសិទ្ធិគ្រប់គ្រាន់ដើម្បីអនុវត្តសកម្មភាពនេះទេ។", - "Taxes List": "បញ្ជីពន្ធ", - "Display all taxes.": "បង្ហាញពន្ធទាំងអស់។", - "No taxes has been registered": "គ្មានពន្ធត្រូវបានចុះបញ្ជីទេ", - "Add a new tax": "បន្ថែមពន្ធថ្មី", - "Create a new tax": "បង្កើតពន្ធថ្មី", - "Register a new tax and save it.": "ចុះឈ្មោះពន្ធថ្មី ហើយរក្សាទុក។", - "Edit tax": "កែសម្រួលពន្ធ", - "Modify Tax.": "កែប្រែពន្ធ", - "Return to Taxes": "ត្រឡប់ទៅពន្ធវិញ", - "Provide a name to the tax.": "ផ្តល់ឈ្មោះសម្គាល់របស់ពន្ធ។", - "Assign the tax to a tax group.": "ចាត់ចែងពន្ធទៅក្រុមពន្ធ។", - "Rate": "អត្រា", - "Define the rate value for the tax.": "កំណត់តម្លៃអត្រាពន្ធ។", - "Provide a description to the tax.": "ផ្តល់ការពិពណ៌នាអំពីពន្ធ។", - "Taxes Groups List": "បញ្ជីក្រុមពន្ធ", - "Display all taxes groups.": "បង្ហាញក្រុមពន្ធទាំងអស់។", - "No taxes groups has been registered": "មិនមានក្រុមពន្ធត្រូវបានចុះឈ្មោះទេ", - "Add a new tax group": "បន្ថែមក្រុមពន្ធថ្មី", - "Create a new tax group": "បង្កើតក្រុមពន្ធថ្មី", - "Register a new tax group and save it.": "ចុះឈ្មោះក្រុមពន្ធថ្មី ហើយរក្សាទុកវា។", - "Edit tax group": "កែសម្រួលក្រុមពន្ធ", - "Modify Tax Group.": "កែប្រែក្រុមពន្ធ។", - "Return to Taxes Groups": "ត្រឡប់ទៅក្រុមពន្ធវិញ", - "Provide a short description to the tax group.": "ផ្តល់ការពិពណ៌នាខ្លីដល់ក្រុមពន្ធ។", - "Accounts List": "បញ្ជីគណនី", - "Display All Accounts.": "បង្ហាញគណនីទាំងអស់។", - "No Account has been registered": "គ្មានគណនីត្រូវបានចុះឈ្មោះទេ។", - "Add a new Account": "បន្ថែមគណនីថ្មី", - "Create a new Account": "បង្កើតគណនីថ្មី", - "Register a new Account and save it.": "ចុះឈ្មោះគណនីថ្មី ហើយរក្សាទុក។", - "Edit Account": "កែសម្រួលគណនី", - "Modify An Account.": "កែសម្រួលគណនី។", - "Return to Accounts": "ត្រឡប់ទៅគណនីវិញ", - "All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.": "អង្គភាពទាំងអស់ដែលភ្ជាប់ទៅនឹងប្រភេទនេះនឹងបង្កើត \"ឥណទាន\" ឬ \"ឥណពន្ធ\" ទៅកាន់ប្រវត្តិលំហូរសាច់ប្រាក់។", - "Credit": "ឥណទាន", - "Debit": "ឥណពន្ធ", - "Account": "គណនី", - "Provide the accounting number for this category.": "ផ្តល់លេខគណនេយ្យសម្រាប់ប្រភេទនេះ។", - "Transactions List": "បញ្ជីប្រតិបត្តិការ", - "Display all transactions.": "បង្ហាញប្រតិបត្តិការទាំងអស់។", - "No transactions has been registered": "គ្មានប្រតិបត្តិការណាមួយត្រូវបានចុះឈ្មោះទេ", - "Add a new transaction": "បន្ថែមប្រតិបត្តិការថ្មី", - "Create a new transaction": "បង្កើតប្រតិបត្តិការថ្មី", - "Register a new transaction and save it.": "ចុះឈ្មោះប្រតិបត្តិការថ្មី ហើយរក្សាទុកវា។", - "Edit transaction": "កែសម្រួលប្រតិបត្តិការ", - "Modify Transaction.": "កែសម្រួលប្រតិបត្តិការ។", - "Return to Transactions": "ត្រឡប់ទៅប្រតិបត្តិការ", - "determine if the transaction is effective or not. Work for recurring and not recurring transactions.": "កំណត់ថាតើប្រតិបត្តិការមានប្រសិទ្ធភាពឬអត់។ ធ្វើការសម្រាប់ប្រតិបត្តិការដដែលៗ និងមិនកើតឡើងដដែលៗ។", - "Users Group": "ក្រុមអ្នកប្រើប្រាស់", - "Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.": "កំណត់ប្រតិបត្តិការទៅក្រុមអ្នកប្រើប្រាស់។ ដូច្នេះ ប្រតិបត្តិការនឹងត្រូវគុណនឹងចំនួនអង្គភាព។", - "None": "ទេ", - "Transaction Account": "គណនីប្រតិបត្តិការ", - "Assign the transaction to an account430": "ប្រគល់ប្រតិបត្តិការទៅគណនី 430", - "Is the value or the cost of the transaction.": "គឺជាតម្លៃ ឬតម្លៃនៃប្រតិបត្តិការ។", - "If set to Yes, the transaction will trigger on defined occurrence.": "ប្រសិនបើកំណត់ទៅ បាទ/ចាស ប្រតិបត្តិការនឹងចាប់ផ្តើមនៅពេលកើតឡើងដែលបានកំណត់។", - "Recurring": "កើតឡើងដដែរៗ", - "Start of Month": "ដើមខែ", - "Mid of Month": "កណ្តាលខែ", - "End of Month": "ចុងខែ", - "X days Before Month Ends": "X ថ្ងៃមុនខែបញ្ចប់", - "X days After Month Starts": "X ថ្ងៃបន្ទាប់ពីខែចាប់ផ្តើម", - "Occurrence": "ការកើតឡើង", - "Define how often this transaction occurs": "កំណត់ថាតើប្រតិបត្តិការនេះកើតឡើងញឹកញាប់ប៉ុណ្ណា", - "Occurrence Value": "តម្លៃនៃការកើតឡើង", - "Must be used in case of X days after month starts and X days before month ends.": "ត្រូវតែប្រើក្នុងករណី X ថ្ងៃបន្ទាប់ពីការចាប់ផ្តើមខែ និង X ថ្ងៃមុនចុងខែ។", - "Scheduled": "បានកំណត់ពេល", - "Set the scheduled date.": "កំណត់កាលបរិច្ឆេទដែលបានគ្រោងទុក។", - "Define what is the type of the transactions.": "កំណត់ប្រភេទនៃប្រតិបត្តិការ។", - "Account Name": "ឈ្មោះ​គណនី", - "Trigger": "គន្លឹះ", - "Would you like to trigger this expense now?": "តើអ្នកចង់បង្កើតការចំណាយនេះឥឡូវនេះទេ?", - "Transactions History List": "បញ្ជីប្រវត្តិប្រតិបត្តិការ", - "Display all transaction history.": "បង្ហាញប្រវត្តិប្រតិបត្តិការទាំងអស់។", - "No transaction history has been registered": "មិនមានប្រវត្តិប្រតិបត្តិការត្រូវបានចុះឈ្មោះទេ", - "Add a new transaction history": "បន្ថែមប្រវត្តិប្រតិបត្តិការថ្មី", - "Create a new transaction history": "បង្កើតប្រវត្តិប្រតិបត្តិការថ្មី", - "Register a new transaction history and save it.": "ចុះឈ្មោះប្រវត្តិប្រតិបត្តិការថ្មី ហើយរក្សាទុកវា។", - "Edit transaction history": "កែសម្រួលប្រវត្តិប្រតិបត្តិការ", - "Modify Transactions history.": "កែប្រែប្រវត្តិប្រតិបត្តិការ។", - "Return to Transactions History": "ត្រឡប់ទៅប្រវត្តិប្រតិបត្តិការ", - "Units List": "បញ្ជីឯកតា", - "Display all units.": "បង្ហាញឯកតាទាំងអស់។", - "No units has been registered": "មិនមានឯកតាត្រូវបានចុះឈ្មោះទេ", - "Add a new unit": "បន្ថែមឯកតាថ្មី", - "Create a new unit": "បង្កើតឯកតាថ្មី", - "Register a new unit and save it.": "ចុះឈ្មោះឯកតាថ្មី ហើយរក្សាទុកវា។", - "Edit unit": "កែប្រែឯកតា", - "Modify Unit.": "កែប្រែឯកតា។", - "Return to Units": "ត្រឡប់ទៅឯកតាវិញ", - "Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.": "ផ្តល់តម្លៃពិសេសសម្រាប់ឯកតានេះ។ អាចត្រូវបានផ្សំឡើងពីឈ្មោះមួយ ប៉ុន្តែមិនគួររួមបញ្ចូលចន្លោះ ឬតួអក្សរពិសេសនោះទេ។", - "Preview URL": "URL បង្ហាញ", - "Preview of the unit.": "បង្ហាញរូបនៃឯកតា។", - "Define the value of the unit.": "កំណត់តម្លៃនៃឯកតា។", - "Define to which group the unit should be assigned.": "កំណត់ក្រុមណាដែលអង្គភាពគួរតែត្រូវបានចាត់តាំង។", - "Base Unit": "ឯកតាមូលដ្ឋាន", - "Determine if the unit is the base unit from the group.": "កំណត់ថាតើឯកតាគឺជាឯកតាមូលដ្ឋានពីក្រុម។", - "Provide a short description about the unit.": "ផ្តល់ការពិពណ៌នាខ្លីអំពីឯកតា។", - "Unit Groups List": "បញ្ជីក្រុមឯកតា", - "Display all unit groups.": "បង្ហាញក្រុមឯកតាទាំងអស់។", - "No unit groups has been registered": "មិនមានក្រុមឯកតាណាមួយត្រូវបានចុះឈ្មោះទេ។", - "Add a new unit group": "បន្ថែមក្រុមឯកតាថ្មី", - "Create a new unit group": "បង្កើតក្រុមឯកតាថ្មី", - "Register a new unit group and save it.": "ចុះឈ្មោះក្រុមឯកតាថ្មី ហើយរក្សាទុកវា។", - "Edit unit group": "កែសម្រួលក្រុមឯកតា", - "Modify Unit Group.": "កែសម្រួលក្រុមឯកតា។", - "Return to Unit Groups": "ត្រឡប់ទៅក្រុមឯកតាវិញ", - "Users List": "បញ្ជីអ្នកប្រើប្រាស់", - "Display all users.": "បង្ហាញអ្នកប្រើប្រាស់ទាំងអស់។", - "No users has been registered": "គ្មានអ្នកប្រើប្រាស់ត្រូវបានចុះឈ្មោះទេ។", - "Add a new user": "បន្ថែមអ្នកប្រើប្រាស់ថ្មី", - "Create a new user": "បង្កើតអ្នកប្រើប្រាស់ថ្មី", - "Register a new user and save it.": "ចុះឈ្មោះអ្នកប្រើប្រាស់ថ្មី ហើយរក្សាទុកវា។", - "Edit user": "កែសម្រួលអ្នកប្រើប្រាស់", - "Modify User.": "កែប្រែអ្នកប្រើប្រាស់។", - "Return to Users": "ត្រឡប់ទៅអ្នកប្រើប្រាស់", - "Username": "ឈ្មោះអ្នកប្រើប្រាស់", - "Will be used for various purposes such as email recovery.": "នឹង​ត្រូវ​បាន​ប្រើ​ក្នុង​គោល​បំណង​ផ្សេង​ៗ​ដូច​ជា​ការទាញយកអ៊ីមែលដែលអ្នកភ្លេច។", - "Provide the user first name.": "ផ្តល់ឈ្មោះអ្នកប្រើប្រាស់។", - "Provide the user last name.": "ផ្តល់នាមត្រកូលអ្នកប្រើប្រាស់។", - "Password": "កូដសម្ងាត់", - "Make a unique and secure password.": "បង្កើតពាក្យសម្ងាត់តែមួយគត់ និងមានសុវត្ថិភាព។", - "Confirm Password": "បញ្ជាក់ពាក្យសម្ងាត់", - "Should be the same as the password.": "គួរតែដូចគ្នានឹងពាក្យសម្ងាត់។", - "Define whether the user can use the application.": "កំណត់ថាតើអ្នកប្រើប្រាស់អាចប្រើកម្មវិធីឬអត់។", - "Define what roles applies to the user": "កំណត់នូវតួនាទីណាដែលអនុវត្តចំពោះអ្នកប្រើប្រាស់", - "Roles": "តួនាទី", - "Set the limit that can\\'t be exceeded by the user.": "កំណត់ដែនកំណត់ដែលមិនអាចលើសពីអ្នកប្រើប្រាស់។", - "Set the user gender.": "កំណត់ភេទអ្នកប្រើប្រាស់។", - "Set the user phone number.": "កំណត់លេខទូរស័ព្ទអ្នកប្រើប្រាស់។", - "Set the user PO Box.": "កំណត់ប្រអប់សំបុត្ររបស់អ្នកប្រើ។", - "Provide the billing First Name.": "ផ្តល់ឈ្មោះចេញវិក្កយបត្រ។", - "Last name": "នាមត្រកូល", - "Provide the billing last name.": "ផ្តល់នាមត្រកូលក្នុងវិក្កយបត្រ។", - "Billing phone number.": "លេខទូរស័ព្ទចេញវិក្កយបត្រ។", - "Billing First Address.": "អាសយដ្ឋានគោលនៃវិក្កយបត្រ។", - "Billing Second Address.": "អាសយដ្ឋានទី២នៃវិក្កយបត្រ។", - "Country": "ប្រទេស", - "Billing Country.": "វិ​ក័​យ​ប័ត្រ​ប្រទេស។", - "City": "ទីក្រុង", - "PO.Box": "ប្រអប់ប្រៃសណីយ៍", - "Postal Address": "អាសយដ្ឋាន​ប្រៃ​ស​ណី​យ", - "Company": "ក្រុមហ៊ុន", - "Provide the shipping First Name.": "ផ្តល់នាមខ្លួនដឹកជញ្ជូន។", - "Provide the shipping Last Name.": "ផ្តល់នាមត្រកូលដឹកជញ្ជូន។", - "Shipping phone number.": "លេខទូរស័ព្ទដឹកជញ្ជូន។", - "Shipping First Address.": "អាសយដ្ឋានដឹកជញ្ជូនដំបូង។", - "Shipping Second Address.": "អាសយដ្ឋានដឹកជញ្ជូនទីពីរ។", - "Shipping Country.": "ប្រទេសដឹកជញ្ជូន។", - "You cannot delete your own account.": "អ្នកមិនអាចលុបគណនីផ្ទាល់ខ្លួនរបស់អ្នកបានទេ។", - "Group Name": "ឈ្មោះក្រុម", - "Wallet Balance": "ទឹកប្រាក់ក្នុងកាបូប", - "Total Purchases": "ការទិញចូលសរុប", - "Delete a user": "លុបអ្នកប្រើប្រាស់", - "Not Assigned": "មិនត្រូវបានចាត់តាំង", - "Access Denied": "ដំណើរ​ការ​ត្រូវ​បាន​បដិសេធ", - "Oops, We\\'re Sorry!!!": "អូយ... សុំទោស!!!", - "Class: %s": "Class: %s", - "There\\'s is mismatch with the core version.": "មិនត្រូវគ្នាជាមួយកំណែស្នូល។", - "Incompatibility Exception": "ករណីលើកលែងនៃភាពមិនត្រូវគ្នា។", - "You\\'re not authenticated.": "អ្នកមិនទាន់បានចូលគណនីប្រើប្រាស់ទេ។", - "An error occured while performing your request.": "កំហុសមួយបានកើតឡើងនៅពេលអនុវត្តសំណើរបស់អ្នក។", - "The request method is not allowed.": "វិធីសាស្ត្រស្នើសុំមិនត្រូវបានអនុញ្ញាតទេ។", - "Method Not Allowed": "វិធីសាស្រ្តមិនត្រូវបានអនុញ្ញាត", - "There is a missing dependency issue.": "មានបញ្ហានៃភាពអាស្រ័យដែលបាត់។", - "Missing Dependency": "ខ្វះភាពអាស្រ័យ", - "A mismatch has occured between a module and it\\'s dependency.": "ភាពមិនស៊ីគ្នាបានកើតឡើងរវាង module មួយ និងការពឹងផ្អែករបស់វា។", - "Module Version Mismatch": "កំណែរ Module មិនត្រឹមត្រូវ", - "The Action You Tried To Perform Is Not Allowed.": "សកម្មភាពដែលអ្នកបានព្យាយាមធ្វើគឺមិនត្រូវបានអនុញ្ញាតទេ។", - "Not Allowed Action": "សកម្មភាពមិនត្រូវបានអនុញ្ញាត", - "The action you tried to perform is not allowed.": "សកម្មភាពដែលអ្នកព្យាយាមអនុវត្តមិនត្រូវបានអនុញ្ញាតទេ។", - "You\\'re not allowed to see that page.": "អ្នកមិនត្រូវបានអនុញ្ញាតឱ្យមើលទំព័រនោះទេ។", - "Not Enough Permissions": "ការអនុញ្ញាតមិនគ្រប់គ្រាន់", - "Unable to locate the assets.": "មិនអាចកំណត់ទីតាំង assets បានទេ។", - "Not Found Assets": "ស្វែងរកមិនឃើញ Assets", - "The resource of the page you tried to access is not available or might have been deleted.": "Resource នៃទំព័រដែលអ្នកបានព្យាយាមចូលប្រើមិនមានទេ ឬប្រហែលជាត្រូវបានលុប។", - "Not Found Exception": "រកមិនឃើញករណីលើកលែង", - "Post Too Large": "ប៉ុស្តិ៍មានទំហំធំពេក", - "The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini": "សំណើដែលបានដាក់ស្នើមានទំហំធំជាងការរំពឹងទុក។ ពិចារណាបង្កើន \"post_max_size\" របស់អ្នកនៅលើ PHP.ini របស់អ្នក។", - "A Database Exception Occurred.": "ករណីលើកលែងមូលដ្ឋានទិន្នន័យបានកើតឡើង។", - "Query Exception": "សំណើរលើកលែង", - "An error occurred while validating the form.": "កំហុស​មួយ​បាន​កើត​ឡើង​ខណៈ​ពេល​ដែល​ធ្វើ​ឱ្យ​ទម្រង់​មាន​សុពលភាព។", - "An error has occurred": "កំហុសមួយបានកើតឡើង", - "Unable to proceed, the submitted form is not valid.": "មិន​អាច​បន្ត​បាន ទម្រង់​ដែល​បាន​ដាក់​ស្នើ​មិន​ត្រឹមត្រូវ​ទេ។", - "Unable to proceed the form is not valid": "មិន​អាច​បន្ត​ទម្រង់​បែបបទ​មិន​ត្រឹមត្រូវ។", - "This value is already in use on the database.": "តម្លៃនេះត្រូវបានប្រើប្រាស់រួចហើយនៅលើមូលដ្ឋានទិន្នន័យ។", - "This field is required.": "ប្រអប់នេះ​ត្រូវតែ​បំពេញ។", - "This field does\\'nt have a valid value.": "ប្រអប់នេះមិនមានតម្លៃត្រឹមត្រូវទេ។", - "This field should be checked.": "ប្រអប់នេះគួរតែត្រូវបានចុចយក។", - "This field must be a valid URL.": "ប្រអប់ URL នេះត្រូវតែមានសុពលភាព។", - "This field is not a valid email.": "ប្រអប់នេះមិនមែនជាអ៊ីមែលត្រឹមត្រូវទេ។", - "Provide your username.": "សូមផ្តល់ឈ្មោះរបស់អ្នកប្រើប្រាស់។", - "Provide your password.": "ផ្តល់ពាក្យសម្ងាត់របស់អ្នក។", - "Provide your email.": "ផ្តល់អ៊ីមែលរបស់អ្នក។", - "Password Confirm": "បញ្ជាក់ពាក្យសម្ងាត់", - "define the amount of the transaction.": "កំណត់បរិមាណនៃប្រតិបត្តិការ។", - "Further observation while proceeding.": "ការសង្កេតបន្ថែមទៀតនៅពេលដំណើរការ។", - "determine what is the transaction type.": "កំណត់ថាតើប្រភេទប្រតិបត្តិការបែបណា។", - "Determine the amount of the transaction.": "កំណត់បរិមាណនៃប្រតិបត្តិការ។", - "Further details about the transaction.": "ព័ត៌មានលម្អិតបន្ថែមអំពីប្រតិបត្តិការ។", - "Describe the direct transaction.": "ពិពណ៌នាអំពីប្រតិបត្តិការផ្ទាល់។", - "Activated": "បានសកម្ម", - "If set to yes, the transaction will take effect immediately and be saved on the history.": "ប្រសិនបើកំណត់ទៅបាទ/ចាស ប្រតិបត្តិការនឹងមានប្រសិទ្ធភាពភ្លាមៗ ហើយត្រូវបានរក្សាទុកនៅលើប្រវត្តិ។", - "Assign the transaction to an account.": "ចាត់ចែងប្រតិបត្តិការទៅគណនីមួយ។", - "set the value of the transaction.": "កំណត់តម្លៃនៃប្រតិបត្តិការ។", - "Further details on the transaction.": "ព័ត៌មានលម្អិតបន្ថែមអំពីប្រតិបត្តិការ។", - "type": "ប្រភេទ", - "Describe the direct transactions.": "ពិពណ៌នាអំពីប្រតិបត្តិការផ្ទាល់។", - "set the value of the transactions.": "កំណត់តម្លៃនៃប្រតិបត្តិការ។", - "User Group": "ក្រុមអ្នកប្រើប្រាស់", - "The transactions will be multipled by the number of user having that role.": "ប្រតិបត្តិការនឹងត្រូវបានគុណនឹងចំនួនអ្នកប្រើប្រាស់ដែលមានតួនាទីនោះ។", - "Installments": "ការបង់រំលោះ", - "Define the installments for the current order.": "កំណត់ការបង់រំលោះសម្រាប់ការបញ្ជាទិញបច្ចុប្បន្ន។", - "New Password": "ពាក្យសម្ងាត់​ថ្មី", - "define your new password.": "កំណត់ពាក្យសម្ងាត់ថ្មីរបស់អ្នក។", - "confirm your new password.": "បញ្ជាក់ពាក្យសម្ងាត់ថ្មីរបស់អ្នក។", - "Select Payment": "ជ្រើសរើសការទូទាត់", - "choose the payment type.": "ជ្រើសរើសប្រភេទការទូទាត់។", - "Define the order name.": "កំណត់ឈ្មោះលំដាប់។", - "Define the date of creation of the order.": "កំណត់កាលបរិច្ឆេទនៃការបង្កើតការបញ្ជាទិញ។", - "Provide the procurement name.": "ផ្តល់ឈ្មោះលទ្ធកម្ម។", - "Describe the procurement.": "ពិពណ៌នាអំពីលទ្ធកម្ម។", - "Define the provider.": "កំណត់អ្នកផ្តល់សេវា។", - "Define what is the unit price of the product.": "កំណត់តម្លៃឯកតានៃផលិតផល។", - "Condition": "លក្ខខណ្ឌ", - "Determine in which condition the product is returned.": "កំណត់ក្នុងលក្ខខណ្ឌណាមួយដែលផលិតផលត្រូវបានប្រគល់មកវិញ។", - "Damaged": "បានខូចខាត", - "Unspoiled": "មិនខូច", - "Other Observations": "ការសង្កេតផ្សេងទៀត", - "Describe in details the condition of the returned product.": "ពិពណ៌នាលម្អិតអំពីលក្ខខណ្ឌនៃផលិតផលដែលបានត្រឡប់មកវិញ។", - "Mode": "Mode", - "Wipe All": "លុបទាំងអស់", - "Wipe Plus Grocery": "លុបជាមួយគ្រឿងបន្លាស់", - "Choose what mode applies to this demo.": "ជ្រើសរើសរបៀបណាដែលអនុវត្តចំពោះការបង្ហាញនេះ។", - "Create Sales (needs Procurements)": "បង្កើតការលក់ (ត្រូវការទិញចូល)", - "Set if the sales should be created.": "កំណត់ថាតើការលក់គួរតែត្រូវបានបង្កើត។", - "Create Procurements": "បង្កើតការទិញចូល", - "Will create procurements.": "នឹងបង្កើតការទិញចូល។", - "Scheduled On": "បានកំណត់ពេលបើក", - "Set when the transaction should be executed.": "កំណត់នៅពេលដែលប្រតិបត្តិការគួរតែត្រូវបានប្រតិបត្តិ។", - "Unit Group Name": "ឈ្មោះក្រុមឯកតា", - "Provide a unit name to the unit.": "ផ្តល់ឈ្មោះឯកតាទៅធាតុ។", - "Describe the current unit.": "ពិពណ៌នាអំពីឯកតាបច្ចុប្បន្ន។", - "assign the current unit to a group.": "កំណត់ឯកតាបច្ចុប្បន្នទៅក្រុម។", - "define the unit value.": "កំណត់តម្លៃឯកតា។", - "Provide a unit name to the units group.": "ផ្តល់ឈ្មោះឯកតាទៅក្រុមឯកតា។", - "Describe the current unit group.": "ពិពណ៌នាអំពីក្រុមឯកតាបច្ចុប្បន្ន។", - "POS": "កម្មវិធីលក់", - "Open POS": "បើកកម្មវិធីលក់", - "Create Register": "បង្កើតការចុះឈ្មោះ", - "Instalments": "ការបង់រំលោះ", - "Procurement Name": "ឈ្មោះការទិញចូល", - "Provide a name that will help to identify the procurement.": "ផ្តល់ឈ្មោះដែលនឹងជួយកំណត់អត្តសញ្ញាណនៃការទិញចូល។", - "The profile has been successfully saved.": "ប្រវត្តិរូបត្រូវបានរក្សាទុកដោយជោគជ័យ។", - "The user attribute has been saved.": "លក្ខណៈអ្នកប្រើប្រាស់ត្រូវបានរក្សាទុក។", - "The options has been successfully updated.": "ជម្រើសត្រូវបានធ្វើបច្ចុប្បន្នភាពដោយជោគជ័យ។", - "Wrong password provided": "ពាក្យសម្ងាត់ដែលបានផ្តល់មិនត្រឹមត្រូវ", - "Wrong old password provided": "ពាក្យសម្ងាត់ចាយដែលបានផ្តល់មិនត្រឹមត្រូវ", - "Password Successfully updated.": "បានធ្វើបច្ចុប្បន្នភាពពាក្យសម្ងាត់ដោយជោគជ័យ។", - "The addresses were successfully updated.": "អាសយដ្ឋានត្រូវបានធ្វើបច្ចុប្បន្នភាពដោយជោគជ័យ។", - "Use Customer Billing": "ប្រើវិក័យប័ត្រអតិថិជន", - "Define whether the customer billing information should be used.": "កំណត់ថាតើព័ត៌មាននៃការចេញវិក្កយបត្ររបស់អតិថិជនគួរត្រូវបានប្រើប្រាស់ដែរឬទេ។", - "General Shipping": "ការដឹកជញ្ជូនទូទៅ", - "Define how the shipping is calculated.": "កំណត់ពីរបៀបដែលការដឹកជញ្ជូនត្រូវបានគណនា។", - "Shipping Fees": "ថ្លៃដឹកជញ្ជូន", - "Define shipping fees.": "កំណត់ថ្លៃដឹកជញ្ជូន។", - "Use Customer Shipping": "អតិថិជនដែលត្រូវដឹកជញ្ជូន", - "Define whether the customer shipping information should be used.": "កំណត់ថាតើព័ត៌មានដឹកជញ្ជូនរបស់អតិថិជនគួរត្រូវបានប្រើប្រាស់ដែរឬទេ។", - "Invoice Number": "លេខ​វិ​ក័​យ​ប័ត្រ", - "If the procurement has been issued outside of NexoPOS, please provide a unique reference.": "ប្រសិនបើលទ្ធកម្មត្រូវបានចេញក្រៅ NexoPOS សូមផ្តល់ឯកសារយោងតែមួយគត់។", - "Delivery Time": "ពេលវេលាដឹកជញ្ជូន", - "If the procurement has to be delivered at a specific time, define the moment here.": "ប្រសិនបើលទ្ធកម្មត្រូវប្រគល់ជូននៅពេលជាក់លាក់ណាមួយ កំណត់ពេលវេលានៅទីនេះ។", - "If you would like to define a custom invoice date.": "ប្រសិនបើអ្នកចង់កំណត់កាលបរិច្ឆេទវិក្កយបត្រផ្ទាល់ខ្លួន។", - "Automatic Approval": "ការអនុម័តដោយស្វ័យប្រវត្តិ", - "Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.": "កំណត់ថាតើលទ្ធកម្មគួរតែត្រូវបានសម្គាល់ដោយស្វ័យប្រវត្តិថាបានយល់ព្រមនៅពេលការដឹកជញ្ជូនកើតឡើង។", - "Pending": "កំពុងរង់ចាំ", - "Delivered": "បានចែកចាយ", - "Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.": "កំណត់ថាតើអ្វីជាតម្លៃជាក់ស្តែងនៃលទ្ធកម្ម។ នៅពេលដែល \"Delivered\" ស្ថានភាពមិនអាចផ្លាស់ប្តូរបានទេ ហើយស្តុកនឹងត្រូវបានអាប់ដេត។", - "Determine what is the actual payment status of the procurement.": "កំណត់ថាតើអ្វីជាស្ថានភាពទូទាត់ជាក់ស្តែងនៃលទ្ធកម្ម។", - "Determine what is the actual provider of the current procurement.": "កំណត់ថាតើអ្វីជាស្ថានភាពទូទាត់ជាក់ស្តែងនៃលទ្ធកម្ម។", - "Theme": "ស្បែក", - "Dark": "ងងឹត", - "Light": "ភ្លឺ", - "Define what is the theme that applies to the dashboard.": "កំណត់អ្វីដែលជាប្រធានបទដែលអនុវត្តចំពោះផ្ទាំងគ្រប់គ្រង។", - "Avatar": "រូបតំណាង", - "Define the image that should be used as an avatar.": "កំណត់រូបភាពដែលគួរប្រើជារូបតំណាង។", - "Language": "ភាសា", - "Choose the language for the current account.": "ជ្រើសរើសភាសាសម្រាប់គណនីបច្ចុប្បន្ន។", - "Biling": "វិក័យប័ត្រ", - "Security": "សុវត្ថិភាព", - "Old Password": "លេខសំងាត់​ចាស់", - "Provide the old password.": "ផ្តល់ពាក្យសម្ងាត់ចាស់។", - "Change your password with a better stronger password.": "ផ្លាស់ប្តូរពាក្យសម្ងាត់របស់អ្នកជាមួយនឹងពាក្យសម្ងាត់ដែលរឹងមាំជាងមុន។", - "Password Confirmation": "បញ្ជាក់​ពាក្យ​សម្ងាត់", - "API Token": "API Token", - "Sign In — NexoPOS": "ចូលប្រើប្រាស់ — NexoPOS", - "Sign Up — NexoPOS": "ចុះឈ្មោះ — NexoPOS", - "No activation is needed for this account.": "មិនចាំបាច់ធ្វើឱ្យសកម្មសម្រាប់គណនីនេះទេ។", - "Invalid activation token.": "Token សម្ងាត់ធ្វើឱ្យសកម្មមិនត្រឹមត្រូវ។", - "The expiration token has expired.": "និមិត្តសញ្ញាផុតកំណត់បានផុតកំណត់ហើយ។", - "Your account is not activated.": "គណនីរបស់អ្នកមិនដំណើរការទេ។", - "Password Lost": "បាត់លេខសម្ងាត់", - "Unable to change a password for a non active user.": "មិនអាចប្តូរពាក្យសម្ងាត់សម្រាប់អ្នកប្រើប្រាស់ដែលមិនសកម្មបានទេ។", - "Unable to proceed as the token provided is invalid.": "មិន​អាច​បន្ត​បាន​ទេ ដោយសារ token ​សម្ងាត់​ដែល​បាន​ផ្ដល់​មិន​ត្រឹមត្រូវ។", - "The token has expired. Please request a new activation token.": "សញ្ញាសម្ងាត់បានផុតកំណត់ហើយ។ សូមស្នើរ Token ធ្វើឱ្យសកម្មថ្មី។", - "Set New Password": "កំណត់ពាក្យសម្ងាត់ថ្មី", - "Database Update": "ការធ្វើបច្ចុប្បន្នភាពមូលដ្ឋានទិន្នន័យ", - "This account is disabled.": "គណនីនេះត្រូវបានបិទ។", - "Unable to find record having that username.": "មិនអាចរកឃើញកំណត់ត្រាដែលមាន Username នោះទេ។", - "Unable to find record having that password.": "មិនអាចរកឃើញកំណត់ត្រាដែលមានពាក្យសម្ងាត់នោះ។", - "Invalid username or password.": "ឈ្មោះអ្នកប្រើ ឬពាក្យសម្ងាត់មិនត្រឹមត្រូវ។", - "Unable to login, the provided account is not active.": "មិនអាចចូលបានទេ គណនីដែលបានផ្ដល់មិនសកម្ម។", - "You have been successfully connected.": "អ្នកត្រូវបានភ្ជាប់ដោយជោគជ័យ។", - "The recovery email has been send to your inbox.": "អ៊ីមែលសង្គ្រោះត្រូវបានផ្ញើទៅប្រអប់សំបុត្ររបស់អ្នក។", - "Unable to find a record matching your entry.": "មិនអាចស្វែងរកកំណត់ត្រាដែលត្រូវនឹងការចូលរបស់អ្នក។", - "Unable to find the requested user.": "មិនអាចស្វែងរកអ្នកប្រើប្រាស់ដែលបានស្នើសុំបានទេ។", - "Unable to submit a new password for a non active user.": "មិនអាចដាក់ពាក្យសម្ងាត់ថ្មីសម្រាប់អ្នកប្រើប្រាស់ដែលមិនសកម្មបានទេ។", - "Unable to proceed, the provided token is not valid.": "មិន​អាច​បន្ត​បាន សញ្ញា​សម្ងាត់​ដែល​បាន​ផ្ដល់​មិន​ត្រឹមត្រូវ​ទេ។", - "Unable to proceed, the token has expired.": "មិនអាចបន្តបានទេ សញ្ញាសម្ងាត់បានផុតកំណត់ហើយ។", - "Your password has been updated.": "ពាក្យសម្ងាត់របស់អ្នកត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "Unable to edit a register that is currently in use": "មិន​អាច​កែ​សម្រួល​ការ​ចុះ​ឈ្មោះ​ដែល​កំពុង​ប្រើ​បច្ចុប្បន្ន​បាន​ទេ។", - "No register has been opened by the logged user.": "គ្មានការកត់ត្រាទឹកប្រាក់ណាមួយត្រូវបានបើកដោយអ្នកប្រើប្រាស់ដែលបានចូលនោះទេ។", - "The register is opened.": "ការកត់ត្រាប្រាក់ត្រូវបានបើក។", - "Cash In": "ដាក់ប្រាក់ចូល", - "Cash Out": "ដកប្រាក់ចេញ", - "Closing": "កំពុងបិទ", - "Opening": "កំពុងបើក", - "Sale": "លក់", - "Refund": "សងលុយវិញ", - "The register doesn\\'t have an history.": "មិនមានប្រវត្តិនៃការកត់ត្រាប្រាក់ទេ។", - "Unable to check a register session history if it\\'s closed.": "មិនអាចពិនិត្យមើលប្រវត្តិសម័យចុះឈ្មោះបានទេប្រសិនបើវាបិទ។", - "Register History For : %s": "ប្រវត្តិសម្រាប់កត់ត្រាប្រាក់ : %s", - "Unable to find the category using the provided identifier": "មិន​អាច​រក​ឃើញ​ប្រភេទ​ដោយ​ប្រើ​គ្រឿង​សម្គាល់​ដែល​បាន​ផ្តល់​ឱ្យ​ទេ។", - "Can\\'t delete a category having sub categories linked to it.": "មិនអាចលុបប្រភេទដែលមានប្រភេទរងភ្ជាប់ទៅវាបានទេ។", - "The category has been deleted.": "ប្រភេទ​ត្រូវ​បាន​លុប។", - "Unable to find the category using the provided identifier.": "មិន​អាច​រក​ឃើញ​ប្រភេទ​ដោយ​ប្រើ​គ្រឿង​សម្គាល់​ដែល​បាន​ផ្តល់​ឱ្យ​ទេ។", - "Unable to find the attached category parent": "មិនអាចស្វែងរកមេប្រភេទដែលភ្ជាប់មកជាមួយទេ។", - "Unable to proceed. The request doesn\\'t provide enough data which could be handled": "មិនអាចបន្តបានទេ។ សំណើមិនផ្តល់ទិន្នន័យគ្រប់គ្រាន់ដែលអាចដោះស្រាយបាន។", - "The category has been correctly saved": "ប្រភេទត្រូវបានរក្សាទុកយ៉ាងត្រឹមត្រូវ។", - "The category has been updated": "ប្រភេទត្រូវបានធ្វើបច្ចុប្បន្នភាព", - "The category products has been refreshed": "ផលិតផលប្រភេទត្រូវបានធ្វើឱ្យស្រស់", - "Unable to delete an entry that no longer exists.": "មិនអាចលុបធាតុដែលមិនមានទៀតទេ។", - "The entry has been successfully deleted.": "ធាតុត្រូវបានលុបដោយជោគជ័យ។", - "Unable to load the CRUD resource : %s.": "មិនអាចផ្ទុកធនធាន CRUD បានទេ៖ %s ។", - "Unhandled crud resource": "ធនធានឆៅដែលមិនបានគ្រប់គ្រង", - "You need to select at least one item to delete": "អ្នកត្រូវជ្រើសរើសយ៉ាងហោចណាស់ធាតុមួយដើម្បីលុប", - "You need to define which action to perform": "អ្នកត្រូវកំណត់សកម្មភាពណាមួយដែលត្រូវអនុវត្ត", - "%s has been processed, %s has not been processed.": "%s ត្រូវបានដំណើរការ %s មិនត្រូវបានដំណើរការទេ។", - "Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods": "មិនអាចទៅយកធាតុបានទេ។ ធនធាន CRUD បច្ចុប្បន្នមិនអនុវត្តវិធីសាស្ត្រ \"getEntries\" ទេ។", - "Unable to proceed. No matching CRUD resource has been found.": "មិនអាចបន្តបានទេ។ រកមិនឃើញធនធាន CRUD ដែលត្រូវគ្នាទេ។", - "The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.": "ថ្នាក់ \"%s\" មិនត្រូវបានកំណត់ទេ។ តើ​ថ្នាក់​ឆៅ​នោះ​មាន​ទេ? ត្រូវប្រាកដថាអ្នកបានចុះឈ្មោះករណីប្រសិនបើវាជាករណី។", - "The crud columns exceed the maximum column that can be exported (27)": "ជួរ​ឈរ​ឆៅ​លើស​ជួរ​ឈរ​អតិបរមា​ដែល​អាច​នាំចេញ​បាន (27)", - "Unable to export if there is nothing to export.": "មិនអាចនាំចេញបានទេ ប្រសិនបើមិនមានអ្វីត្រូវនាំចេញ។", - "This link has expired.": "តំណនេះផុតកំណត់ហើយ។", - "The requested file cannot be downloaded or has already been downloaded.": "ឯកសារដែលបានស្នើសុំមិនអាចទាញយកបាន ឬត្រូវបានទាញយករួចហើយ។", - "The requested customer cannot be found.": "រកមិនឃើញអតិថិជនដែលបានស្នើសុំទេ។", - "Void": "មោឃៈ", - "Create Coupon": "បង្កើតគូប៉ុង", - "helps you creating a coupon.": "ជួយអ្នកបង្កើតគូប៉ុង។", - "Edit Coupon": "កែសម្រួលគូប៉ុង", - "Editing an existing coupon.": "ការកែសម្រួលគូប៉ុងដែលមានស្រាប់។", - "Invalid Request.": "សំណើមិនត្រឹមត្រូវ។", - "%s Coupons": "%s គូប៉ុង", - "Displays the customer account history for %s": "បង្ហាញប្រវត្តិគណនីអតិថិជនសម្រាប់ %s", - "Account History : %s": "ប្រវត្តិគណនី : %s", - "%s Coupon History": "%s ប្រវត្តិគូប៉ុង", - "Unable to delete a group to which customers are still assigned.": "មិនអាចលុបក្រុមដែលអតិថិជននៅតែត្រូវបានចាត់តាំង។", - "The customer group has been deleted.": "ក្រុមអតិថិជនត្រូវបានលុប។", - "Unable to find the requested group.": "មិនអាចស្វែងរកក្រុមដែលបានស្នើសុំបានទេ។", - "The customer group has been successfully created.": "ក្រុមអតិថិជនត្រូវបានបង្កើតដោយជោគជ័យ។", - "The customer group has been successfully saved.": "ក្រុមអតិថិជនត្រូវបានរក្សាទុកដោយជោគជ័យ។", - "Unable to transfer customers to the same account.": "មិនអាចផ្ទេរអតិថិជនទៅគណនីតែមួយបានទេ។", - "All the customers has been transferred to the new group %s.": "អតិថិជនទាំងអស់ត្រូវបានផ្ទេរទៅក្រុមថ្មី %s ។", - "The categories has been transferred to the group %s.": "ប្រភេទត្រូវបានផ្ទេរទៅក្រុម %s ។", - "No customer identifier has been provided to proceed to the transfer.": "គ្មានអត្តសញ្ញាណអតិថិជនត្រូវបានផ្តល់ជូនដើម្បីបន្តទៅការផ្ទេរ។", - "Unable to find the requested group using the provided id.": "មិនអាចស្វែងរកក្រុមដែលបានស្នើសុំដោយប្រើលេខសម្គាល់ដែលបានផ្តល់។", - "\"%s\" is not an instance of \"FieldsService\"": "\"%s\" មិនមែនជាឧទាហរណ៍នៃ \"FieldsService\" ទេ", - "Welcome — %s": "សូមស្វាគមន៍ — %s", - "Manage Medias": "គ្រប់គ្រងវិចិត្រសាល", - "Upload and manage medias (photos).": "បង្ហោះ និងគ្រប់គ្រងប្រព័ន្ធផ្សព្វផ្សាយ (រូបថត)។", - "The media name was successfully updated.": "ឈ្មោះប្រព័ន្ធផ្សព្វផ្សាយត្រូវបានធ្វើបច្ចុប្បន្នភាពដោយជោគជ័យ។", - "Modules List": "បញ្ជី Modules", - "List all available modules.": "រាយ Modules ដែលមានទាំងអស់។", - "Upload A Module": "ផ្ទុកឡើង Module មួយ។", - "Extends NexoPOS features with some new modules.": "ពង្រីកលក្ខណៈពិសេស NexoPOS ជាមួយនឹងម៉ូឌុលថ្មីមួយចំនួន។", - "The notification has been successfully deleted": "ការជូនដំណឹងត្រូវបានលុបដោយជោគជ័យ", - "All the notifications have been cleared.": "ការជូនដំណឹងទាំងអស់ត្រូវបានសម្អាត។", - "Payment Receipt — %s": "បង្កាន់ដៃបង់ប្រាក់ — %s", - "Order Invoice — %s": "វិក័យប័ត្របញ្ជាទិញ — %s", - "Order Refund Receipt — %s": "បញ្ជាទិញបង្កាន់ដៃសងប្រាក់វិញ — %s", - "Order Receipt — %s": "បង្កាន់ដៃបញ្ជាទិញ — %s", - "The printing event has been successfully dispatched.": "ព្រឹត្តិការណ៍បោះពុម្ពត្រូវបានបញ្ជូនដោយជោគជ័យ។", - "There is a mismatch between the provided order and the order attached to the instalment.": "មានភាពមិនស៊ីសង្វាក់គ្នារវាងការបញ្ជាទិញដែលបានផ្តល់ និងការបញ្ជាទិញដែលភ្ជាប់ជាមួយការដំឡើង។", - "Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.": "មិន​អាច​កែសម្រួល​លទ្ធកម្ម​ដែល​មាន​ស្តុក។ ពិចារណាធ្វើការកែតម្រូវ ឬលុបលទ្ធកម្ម។", - "You cannot change the status of an already paid procurement.": "អ្នកមិនអាចផ្លាស់ប្តូរស្ថានភាពនៃលទ្ធកម្មដែលបានបង់រួចហើយ។", - "The procurement payment status has been changed successfully.": "ស្ថានភាពការទូទាត់លទ្ធកម្មត្រូវបានផ្លាស់ប្តូរដោយជោគជ័យ។", - "The procurement has been marked as paid.": "លទ្ធកម្មត្រូវបានសម្គាល់ថាបានបង់។", - "The product which id is %s doesnt\\'t belong to the procurement which id is %s": "ផលិតផលដែលលេខសម្គាល់គឺ %s មិនមែនជាកម្មសិទ្ធិរបស់លទ្ធកម្មដែលលេខសម្គាល់គឺ %s", - "The refresh process has started. You\\'ll get informed once it\\'s complete.": "ដំណើរការផ្ទុកឡើងវិញបានចាប់ផ្តើមហើយ។ អ្នកនឹងត្រូវបានជូនដំណឹងនៅពេលវាបញ្ចប់។", - "New Procurement": "លទ្ធកម្មថ្មី", - "Make a new procurement.": "ធ្វើលទ្ធកម្មថ្មី", - "Edit Procurement": "កែសម្រួលលទ្ធកម្ម", - "Perform adjustment on existing procurement.": "អនុវត្តការកែតម្រូវលើលទ្ធកម្មដែលមានស្រាប់។", - "%s - Invoice": "%s - វិក្កយបត្រ", - "list of product procured.": "បញ្ជីផលិតផលដែលបានទិញ។", - "The product price has been refreshed.": "តម្លៃផលិតផលត្រូវបានធ្វើឱ្យស្រស់។", - "The single variation has been deleted.": "បំរែបំរួលតែមួយត្រូវបានលុប។", - "The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".": "បំរែបំរួលនេះមិនត្រូវបានលុបទេ ព្រោះវាប្រហែលជាមិនមាន ឬមិនត្រូវបានកំណត់ទៅផលិតផលមេ \"%s\"។", - "Edit a product": "កែសម្រួលផលិតផល", - "Makes modifications to a product": "ធ្វើការកែប្រែទៅលើផលិតផល", - "Create a product": "បង្កើតផលិតផល", - "Add a new product on the system": "បន្ថែមផលិតផលថ្មីនៅលើប្រព័ន្ធ", - "Stock History For %s": "ប្រវត្តិស្តុកសម្រាប់ %s", - "Stock Adjustment": "ការកែតម្រូវស្តុក", - "Adjust stock of existing products.": "កែតម្រូវស្តុកផលិតផលដែលមានស្រាប់។", - "Set": "កំណត់", - "No stock is provided for the requested product.": "មិនមានស្តុកត្រូវបានផ្តល់ជូនសម្រាប់ផលិតផលដែលបានស្នើសុំទេ។", - "The product unit quantity has been deleted.": "បរិមាណឯកតាផលិតផលត្រូវបានលុប។", - "Unable to proceed as the request is not valid.": "មិនអាចបន្តបានទេ ដោយសារសំណើមិនត្រឹមត្រូវ។", - "The unit is not set for the product \"%s\".": "ឯកតាមិនត្រូវបានកំណត់សម្រាប់ផលិតផល \"%s\" ទេ។", - "Unsupported action for the product %s.": "សកម្មភាពមិនគាំទ្រសម្រាប់ផលិតផល %s ។", - "The operation will cause a negative stock for the product \"%s\" (%s).": "ប្រតិបត្តិការនេះនឹងបណ្តាលឱ្យមានស្តុកអវិជ្ជមានសម្រាប់ផលិតផល \"%s\" (%s) ។", - "The adjustment quantity can\\'t be negative for the product \"%s\" (%s)": "បរិមាណនៃការកែតម្រូវមិនអាចអវិជ្ជមានសម្រាប់ផលិតផល \"%s\" (%s)", - "The stock has been adjustment successfully.": "ស្តុកត្រូវបានកែតម្រូវដោយជោគជ័យ។", - "Unable to add the product to the cart as it has expired.": "មិន​អាច​បន្ថែម​ផលិតផល​ទៅ​ក្នុង​រទេះ​បាន​ទេ ដោយសារ​វា​បាន​ផុត​កំណត់។", - "Unable to add a product that has accurate tracking enabled, using an ordinary barcode.": "មិន​អាច​បន្ថែម​ផលិតផល​ដែល​បាន​បើក​ការ​តាមដាន​ត្រឹម​ត្រូវ​ដោយ​ប្រើ​បាកូដ​ធម្មតា។", - "There is no products matching the current request.": "មិនមានផលិតផលដែលត្រូវនឹងសំណើបច្ចុប្បន្នទេ។", - "Print Labels": "បោះពុម្ពស្លាក", - "Customize and print products labels.": "ប្ដូរតាមបំណង និងបោះពុម្ពស្លាកផលិតផល។", - "Procurements by \"%s\"": "លទ្ធកម្មដោយ \"%s\"", - "%s\\'s Products": "ផលិតផលរបស់ %s", - "Sales Report": "របាយការណ៍លក់", - "Provides an overview over the sales during a specific period": "ផ្តល់នូវទិដ្ឋភាពទូទៅនៃការលក់ក្នុងអំឡុងពេលជាក់លាក់មួយ។", - "Sales Progress": "ដំណើរការនៃការលក់", - "Provides an overview over the best products sold during a specific period.": "ផ្តល់នូវទិដ្ឋភាពទូទៅលើផលិតផលល្អបំផុតដែលបានលក់ក្នុងអំឡុងពេលជាក់លាក់មួយ។", - "Sold Stock": "ស្តុកដែលបានលក់", - "Provides an overview over the sold stock during a specific period.": "ផ្តល់នូវទិដ្ឋភាពទូទៅលើស្តុកដែលបានលក់ក្នុងអំឡុងពេលជាក់លាក់មួយ។", - "Stock Report": "របាយការណ៍ស្តុកក", - "Provides an overview of the products stock.": "ផ្តល់នូវទិដ្ឋភាពទូទៅនៃស្តុកផលិតផល។", - "Profit Report": "របាយការណ៍ប្រាក់ចំណេញ", - "Provides an overview of the provide of the products sold.": "ផ្តល់នូវទិដ្ឋភាពទូទៅនៃការផ្តល់ផលិតផលដែលបានលក់។", - "Transactions Report": "របាយការណ៍ប្រតិបត្តិការ", - "Provides an overview on the activity for a specific period.": "ផ្តល់នូវទិដ្ឋភាពទូទៅអំពីសកម្មភាពសម្រាប់រយៈពេលជាក់លាក់មួយ។", - "Combined Report": "របាយការណ៍រួម", - "Provides a combined report for every transactions on products.": "ផ្តល់របាយការណ៍រួមសម្រាប់រាល់ប្រតិបត្តិការលើផលិតផល។", - "Annual Report": "របាយការណ៍​ប្រចាំឆ្នាំ", - "Sales By Payment Types": "ការលក់តាមប្រភេទការទូទាត់", - "Provide a report of the sales by payment types, for a specific period.": "ផ្តល់របាយការណ៍នៃការលក់តាមប្រភេទការទូទាត់សម្រាប់រយៈពេលជាក់លាក់មួយ។", - "The report will be computed for the current year.": "របាយការណ៍នេះនឹងត្រូវបានគណនាសម្រាប់ឆ្នាំបច្ចុប្បន្ន។", - "Unknown report to refresh.": "មិន​ស្គាល់​របាយការណ៍​ដើម្បី​ផ្ទុក​ឡើង​វិញ។", - "Customers Statement": "ពិស្តារពីអតិថិជន", - "Display the complete customer statement.": "បង្ហាញរបាយការណ៍អតិថិជនពេញលេញ។", - "Invalid authorization code provided.": "លេខកូដអនុញ្ញាតមិនត្រឹមត្រូវត្រូវបានផ្តល់ជូន។", - "The database has been successfully seeded.": "មូលដ្ឋានទិន្នន័យត្រូវបានដាក់ទិន្នន័យដោយជោគជ័យ។", - "Settings Page Not Found": "រកមិនឃើញទំព័រការកំណត់", - "Unable to initiallize the settings page. The identifier \"' . $identifier . '": "មិនអាចចាប់ផ្តើមទំព័រការកំណត់បានទេ។ The identifier \"' . $identifier . '", - "%s is not an instance of \"%s\".": "%s មិនមែនជាឧទាហរណ៍នៃ \"%s\".", - "Unable to find the requested product tax using the provided id": "មិនអាចស្វែងរកពន្ធផលិតផលដែលបានស្នើសុំដោយប្រើលេខសម្គាល់ដែលបានផ្តល់", - "Unable to find the requested product tax using the provided identifier.": "មិន​អាច​រក​ឃើញ​ពន្ធ​ផលិតផល​ដែល​បាន​ស្នើ​ដោយ​ប្រើ​គ្រឿង​សម្គាល់​ដែល​បាន​ផ្តល់​ឱ្យ​ទេ។", - "The product tax has been created.": "ពន្ធផលិតផលត្រូវបានបង្កើតឡើង។", - "The product tax has been updated": "ពន្ធផលិតផលត្រូវបានធ្វើបច្ចុប្បន្នភាព", - "Unable to retrieve the requested tax group using the provided identifier \"%s\".": "មិន​អាច​ទៅ​យក​ក្រុម​ពន្ធ​ដែល​បាន​ស្នើ​ដោយ​ប្រើ​គ្រឿង​សម្គាល់​ដែល​បាន​ផ្តល់ \"%s\"។", - "\"%s\" Record History": "\"%s\" ប្រវត្តិកំណត់ត្រា", - "Shows all histories generated by the transaction.": "បង្ហាញប្រវត្តិទាំងអស់ដែលបង្កើតដោយប្រតិបត្តិការ។", - "Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.": "មិន​អាច​ប្រើ​ប្រតិបត្តិការ​ដែល​បាន​កំណត់​ពេល​វេលា កើតឡើង​ដដែលៗ និង​ជា​អង្គភាព​ទេ ដោយសារ​ជួរ​មិន​ត្រូវ​បាន​កំណត់​រចនាសម្ព័ន្ធ​ត្រឹមត្រូវ។", - "Create New Transaction": "បង្កើតប្រតិបត្តិការថ្មី។", - "Set direct, scheduled transactions.": "កំណត់ប្រតិបត្តិការដោយផ្ទាល់ និងតាមកាលវិភាគ។", - "Update Transaction": "ធ្វើបច្ចុប្បន្នភាពប្រតិបត្តិការ", - "Permission Manager": "អ្នកគ្រប់គ្រងការអនុញ្ញាត", - "Manage all permissions and roles": "គ្រប់គ្រងការអនុញ្ញាត និងតួនាទីទាំងអស់", - "My Profile": "គណនីខ្ញុំ", - "Change your personal settings": "ផ្លាស់ប្តូរការកំណត់ផ្ទាល់ខ្លួនរបស់អ្នក", - "The permissions has been updated.": "ការអនុញ្ញាតត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "The provided data aren\\'t valid": "ទិន្នន័យដែលបានផ្តល់គឺមិនត្រឹមត្រូវទេ។", - "Dashboard": "ផ្ទាំងគ្រប់គ្រង", - "Sunday": "អាទិត្យ", - "Monday": "ចន្ទ", - "Tuesday": "អង្គារ", - "Wednesday": "ពុធ", - "Thursday": "ព្រហស្បតិ៍", - "Friday": "សុក្រ", - "Saturday": "សៅរ៍", - "Welcome — NexoPOS": "សូមសា្វគមន៍ — NexoPOS", - "The migration has successfully run.": "ការធ្វើ migration បានដំណើរការដោយជោគជ័យ។", - "You\\'re not allowed to see this page.": "អ្នកមិនត្រូវបានអនុញ្ញាតឱ្យមើលទំព័រនេះទេ។", - "The recovery has been explicitly disabled.": "ការស្តារឡើងវិញត្រូវបានបិទយ៉ាងច្បាស់លាស់។", - "Your don\\'t have enough permission to perform this action.": "អ្នកមិនមានការអនុញ្ញាតគ្រប់គ្រាន់ដើម្បីអនុវត្តសកម្មភាពនេះទេ។", - "You don\\'t have the necessary role to see this page.": "អ្នកមិនមានតួនាទីចាំបាច់ដើម្បីមើលទំព័រនេះទេ។", - "The registration has been explicitly disabled.": "ការចុះឈ្មោះត្រូវបានបិទយ៉ាងច្បាស់លាស់។", - "Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.": "មិនអាចចាប់ផ្តើមទំព័រការកំណត់បានទេ។ ឧបករណ៍កំណត់អត្តសញ្ញាណ \"%s\" មិនអាចធ្វើភ្លាមៗបានទេ។", - "Unable to register. The registration is closed.": "មិនអាចចុះឈ្មោះបានទេ ព្រោះការចុះឈ្មោះត្រូវបានបិទ។", - "Hold Order Cleared": "បានជម្រះការបញ្ជាទិញ", - "%s order(s) has recently been deleted as they has expired.": "%s ការបញ្ជាទិញ ត្រូវបានលុបនាពេលថ្មីៗនេះ ដោយសារពួកគេបានផុតកំណត់។", - "Report Refreshed": "ធ្វើរាយការណ៍ឡើងវិញ", - "The yearly report has been successfully refreshed for the year \"%s\".": "របាយការណ៍ប្រចាំឆ្នាំត្រូវបានធ្វើឡើងវិញដោយជោគជ័យ សម្រាប់ឆ្នាំ \"%s\" ។", - "Low Stock Alert": "ជូនដំណឹងពេលស្តុកនៅតិច", - "%s product(s) has low stock. Reorder those product(s) before it get exhausted.": "%s ផលិតផលមានស្តុកទាប។ បញ្ជាទិញផលិតផលទាំងនោះឡើងវិញ មុនពេលវាអស់។", - "Scheduled Transactions": "ប្រតិបត្តិការដែលបានគ្រោងទុក", - "the transaction \"%s\" was executed as scheduled on %s.": "ប្រតិបត្តិការ \"%s\" ត្រូវបានប្រតិបត្តិតាមការគ្រោងទុកនៅលើ %s ។", - "Procurement Refreshed": "ការទិញចូលត្រូវបានធ្វើឡើងវិញ", - "The procurement \"%s\" has been successfully refreshed.": "ការទិញចូល \"%s\" ត្រូវ​បាន​ធ្វើ​ឡើង​វិញ​ដោយ​ជោគជ័យ។", - "The transaction was deleted.": "ប្រតិបត្តិការត្រូវបានលុប។", - "Workers Aren\\'t Running": "Workers មិនដំណើរការទេ", - "The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.": "កម្មករត្រូវបានបើក ប៉ុន្តែវាមើលទៅដូចជា NexoPOS មិនអាចដំណើរការកម្មករបានទេ។ ជាធម្មតា វាកើតឡើង ប្រសិនបើអ្នកគ្រប់គ្រងមិនត្រូវបានកំណត់ត្រឹមត្រូវ។", - "[NexoPOS] Activate Your Account": "[NexoPOS] បើកដំណើរការគណនីរបស់អ្នក។", - "[NexoPOS] A New User Has Registered": "[NexoPOS] អ្នកប្រើប្រាស់ថ្មីបានចុះឈ្មោះ", - "[NexoPOS] Your Account Has Been Created": "[NexoPOS] គណនី​របស់​អ្នក​ត្រូវ​បាន​បង្កើត", - "Unknown Payment": "ការទូទាត់មិនស្គាល់", - "Unable to find the permission with the namespace \"%s\".": "មិនអាចស្វែងរកការអនុញ្ញាតដោយប្រើ namespace \"%s\" បានទេ។", - "Unable to remove the permissions \"%s\". It doesn\\'t exists.": "មិនអាចលុបការអនុញ្ញាត \"%s\" បានទេ។ វាមិនមានទេ។", - "The role was successfully assigned.": "តួនាទីត្រូវបានចាត់តាំងដោយជោគជ័យ។", - "The role were successfully assigned.": "តួនាទីត្រូវបានចាត់តាំងដោយជោគជ័យ។", - "Unable to identifier the provided role.": "មិនអាចកំណត់អត្តសញ្ញាណតួនាទីដែលបានផ្តល់។", - "Partially Due": "ជំពាក់ដោយផ្នែក", - "Take Away": "មកយកផ្ទាល់", - "Good Condition": "ល​ក្ខ័​ខ​ណ្ឌ័​ល្អ", - "An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N/A": "កំហុស​មួយ​បាន​កើត​ឡើង​ពេល​បង្កើត​បាកូដ \"%s\" ដោយ​ប្រើ​ប្រភេទ \"%s\" សម្រាប់​ផលិតផល។ សូមប្រាកដថាតម្លៃបាកូដគឺត្រឹមត្រូវសម្រាប់ប្រភេទបាកូដដែលបានជ្រើសរើស។ ការយល់ដឹងបន្ថែម៖ '។ ($exception->getMessage() ?: __('N/A", - "Unable to open \"%s\" *, as it\\'s not closed.": "មិនអាចបើក \"%s\" * បានទេ ដោយសារវាមិនបានបិទ។", - "The register has been successfully opened": "ការចុះឈ្មោះត្រូវបានបើកដោយជោគជ័យ", - "Unable to open \"%s\" *, as it\\'s not opened.": "មិនអាចបើក \"%s\" * បានទេ ដោយសារវាមិនបើក។", - "The register has been successfully closed": "ការបិទបញ្ជីត្រូវបានបិទដោយជោគជ័យ", - "Unable to cashing on \"%s\" *, as it\\'s not opened.": "មិនអាចដកប្រាក់លើ \"%s\" * បានទេ ដោយសារវាមិនបានបើក។", - "The provided amount is not allowed. The amount should be greater than \"0\". ": "ចំនួនទឹកប្រាក់ដែលបានផ្តល់មិនត្រូវបានអនុញ្ញាតទេ។ ចំនួនទឹកប្រាក់គួរតែធំជាង \"0\" ។ ", - "The cash has successfully been stored": "សាច់ប្រាក់ត្រូវបានរក្សាទុកដោយជោគជ័យ", - "Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.": "មិនមានទឹកប្រាក់គ្រប់គ្រាន់ដើម្បីលុបការលក់ពី \"%s\" ទេ។ ប្រសិនបើទឹកប្រាក់ត្រូវបានដក ឬបញ្ចេញចេញ សូមពិចារណាបន្ថែមសាច់ប្រាក់មួយចំនួន (%s) ទៅក្នុងបញ្ជី។", - "Unable to cashout on \"%s": "មិនអាចដកប្រាក់បាននៅ \"%s", - "Not enough fund to cash out.": "មិន​មាន​ថវិកា​គ្រប់គ្រាន់​ដើម្បី​ដក​ចេញ។", - "The cash has successfully been disbursed.": "សាច់ប្រាក់ត្រូវបានដកចេញដោយជោគជ័យ។", - "In Use": "កំពុង​ប្រើ", - "Opened": "បានបើក", - "Symbolic Links Missing": "បាត់និមិត្តសញ្ញាតំណភ្ជាប់", - "The Symbolic Links to the public directory is missing. Your medias might be broken and not display.": "តំណនិមិត្តសញ្ញាទៅកាន់ថតសាធារណៈត្រូវបានបាត់។ វិចិត្រសាលរបស់អ្នកអាចខូច និងមិនបង្ហាញ។", - "Cron Disabled": "Cron បានបិទ", - "Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.": "ការងារ Cron មិនត្រូវបានកំណត់ត្រឹមត្រូវនៅលើ NexoPOS ទេ។ នេះអាចដាក់កម្រិតលើមុខងារចាំបាច់។ ចុចទីនេះដើម្បីរៀនពីរបៀបជួសជុលវា។", - "Task Scheduling Disabled": "ការកំណត់កាលវិភាគកិច្ចការត្រូវបានបិទ", - "NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.": "NexoPOS មិនអាចកំណត់ពេលភារកិច្ចផ្ទៃខាងក្រោយបានទេ។ នេះអាចដាក់កម្រិតលើមុខងារចាំបាច់។ ចុចទីនេះដើម្បីរៀនពីរបៀបជួសជុលវា។", - "The requested module %s cannot be found.": "មិនអាចរកឃើញ Module %s ដែលបានស្នើសុំទេ។", - "The manifest.json can\\'t be located inside the module %s on the path: %s": "manifest.json មិនអាចមានទីតាំងនៅខាងក្នុង Module %s នៅលើផ្លូវ៖ %s", - "the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.": "ឯកសារដែលបានស្នើសុំ \"%s\" មិនអាចមានទីតាំងនៅខាងក្នុង manifest.json សម្រាប់ Module %s បានទេ។", - "Delete Selected entries": "លុបធាតុដែលបានជ្រើសរើស", - "%s entries has been deleted": "%s ធាតុត្រូវបានលុប", - "%s entries has not been deleted": "%s ធាតុមិនត្រូវបានលុបទេ។", - "A new entry has been successfully created.": "ធាតុថ្មីត្រូវបានបង្កើតដោយជោគជ័យ។", - "The entry has been successfully updated.": "ធាតុត្រូវបានធ្វើបច្ចុប្បន្នភាពដោយជោគជ័យ។", - "Sorting is explicitely disabled for the column \"%s\".": "ការតម្រៀបត្រូវបានបិទយ៉ាងជាក់លាក់សម្រាប់ជួរឈរ \"%s\" ។", - "Unidentified Item": "ធាតុមិនស្គាល់អត្តសញ្ញាណ", - "Non-existent Item": "ធាតុដែលមិនមាន", - "Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s": "មិនអាចលុប \"%s\" បានទេ ដោយសារវាជាភាពអាស្រ័យសម្រាប់ \"%s\"%s", - "Unable to delete this resource as it has %s dependency with %s item.": "មិនអាចលុបធនធាននេះបានទេ ដោយសារវាមាន %s អាស្រ័យជាមួយធាតុ %s", - "Unable to delete this resource as it has %s dependency with %s items.": "មិនអាចលុប resource នេះបានទេ ដោយសារវាមាន %s អាស្រ័យជាមួយធាតុ %s", - "Unable to find the customer using the provided id %s.": "មិនអាចស្វែងរកអតិថិជនដោយប្រើលេខសម្គាល់ %s ដែលបានផ្ដល់។", - "Unable to find the customer using the provided id.": "មិនអាចស្វែងរកអតិថិជនដោយប្រើលេខសម្គាល់ដែលបានផ្តល់។", - "The customer has been deleted.": "អតិថិជន​ត្រូវ​បាន​លុប។", - "The email \"%s\" is already used for another customer.": "អ៊ីមែល \"%s\" ត្រូវបានប្រើរួចហើយសម្រាប់អតិថិជនផ្សេងទៀត។", - "The customer has been created.": "អតិថិជនត្រូវបានបង្កើតឡើង។", - "Unable to find the customer using the provided ID.": "មិនអាចស្វែងរកអតិថិជនដោយប្រើលេខសម្គាល់ដែលបានផ្តល់។", - "The customer has been edited.": "អតិថិជនត្រូវបានកែសម្រួល។", - "Unable to find the customer using the provided email.": "មិនអាចស្វែងរកអតិថិជនដោយប្រើអ៊ីមែលដែលបានផ្តល់។", - "Not enough credits on the customer account. Requested : %s, Remaining: %s.": "មិនមានក្រេឌីតគ្រប់គ្រាន់នៅលើគណនីអតិថិជនទេ។ បានស្នើ៖ %s នៅសល់៖ %s ។", - "The customer account has been updated.": "គណនីអតិថិជនត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "The customer account doesn\\'t have enough funds to proceed.": "គណនីអតិថិជនមិនមានថវិកាគ្រប់គ្រាន់ដើម្បីបន្ត។", - "Issuing Coupon Failed": "ការចេញគូប៉ុងបានបរាជ័យ", - "Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.": "មិនអាចអនុវត្តគូប៉ុងដែលភ្ជាប់ទៅនឹងរង្វាន់ \"%s\" បានទេ។ វាហាក់ដូចជាគូប៉ុងនេះមិនមានទៀតទេ។", - "The provided coupon cannot be loaded for that customer.": "គូប៉ុងដែលផ្តល់ឲ្យមិនអាចផ្ទុកសម្រាប់អតិថិជននោះបានទេ។", - "The provided coupon cannot be loaded for the group assigned to the selected customer.": "គូប៉ុងដែលបានផ្តល់មិនអាចផ្ទុកសម្រាប់ក្រុមដែលបានផ្តល់ទៅឱ្យអតិថិជនដែលបានជ្រើសរើសទេ។", - "Unable to find a coupon with the provided code.": "មិនអាចស្វែងរកគូប៉ុងដែលមានលេខកូដដែលបានផ្តល់ឱ្យទេ។", - "The coupon has been updated.": "គូប៉ុង​ត្រូវ​បាន​ធ្វើ​បច្ចុប្បន្នភាព។", - "The group has been created.": "ក្រុមត្រូវបានបង្កើតឡើង។", - "Crediting": "ឥណទាន", - "Deducting": "កាត់ប្រាក់", - "Order Payment": "ទូទាត់ការបញ្ជាទិញ", - "Order Refund": "បញ្ជាទិញបង្វិលសងវិញ", - "Unknown Operation": "ប្រតិបត្តិការមិនស្គាល់", - "Unable to find a reference to the attached coupon : %s": "មិន​អាច​ស្វែង​រក​ឯកសារ​យោង​ទៅ​គូប៉ុង​ដែល​បាន​ភ្ជាប់៖ %s", - "Unable to use the coupon %s as it has expired.": "មិនអាចប្រើគូប៉ុង %s បានទេ ដោយសារវាបានផុតកំណត់។", - "Unable to use the coupon %s at this moment.": "មិនអាចប្រើប័ណ្ណ %s នៅពេលនេះបានទេ។", - "You\\'re not allowed to use this coupon as it\\'s no longer active": "អ្នកមិនត្រូវបានអនុញ្ញាតឱ្យប្រើគូប៉ុងនេះទេ ព្រោះវាមិនដំណើរការទៀតទេ", - "You\\'re not allowed to use this coupon it has reached the maximum usage allowed.": "អ្នកមិនត្រូវបានអនុញ្ញាតឱ្យប្រើគូប៉ុងនេះទេ វាបានឈានដល់ការប្រើប្រាស់អតិបរមាដែលបានអនុញ្ញាត។", - "Provide the billing first name.": "ផ្តល់ឈ្មោះដំបូងនៃការចេញវិក្កយបត្រ។", - "Countable": "អាចរាប់បាន។", - "Piece": "បំណែក", - "Small Box": "ប្រអប់តូច", - "Box": "ប្រអប់", - "Terminal A": "ស្ថានីយ ក", - "Terminal B": "ស្ថានីយ ខ", - "Sales Account": "គណនីលក់", - "Procurements Account": "គណនីទិញចូល", - "Sale Refunds Account": "គណនីសងប្រាក់វិញពីការលក់", - "Spoiled Goods Account": "គណនីទំនិញខូច", - "Customer Crediting Account": "គណនីឥណទានអតិថិជន", - "Customer Debiting Account": "គណនីឥណពន្ធរបស់អតិថិជន", - "GST": "GST", - "SGST": "SGST", - "CGST": "CGST", - "Sample Procurement %s": "ការទិញចូលគំរូ %s", - "generated": "បានបង្កើត", - "The user attributes has been updated.": "គុណលក្ខណៈអ្នកប្រើប្រាស់ត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "Administrator": "អ្នកគ្រប់គ្រង", - "Store Administrator": "អ្នកគ្រប់គ្រងហាង", - "Store Cashier": "អ្នកគិតលុយហាង", - "User": "អ្នកប្រើប្រាស់", - "%s products were freed": "%s ផលិតផលត្រូវបានដោះលែង", - "Restoring cash flow from paid orders...": "ស្តារលំហូរសាច់ប្រាក់ពីការបញ្ជាទិញដែលបានបង់...", - "Restoring cash flow from refunded orders...": "ស្តារលំហូរសាច់ប្រាក់ពីការបញ្ជាទិញដែលបានបង្វិលសងវិញ...", - "%s on %s directories were deleted.": "%s នៅលើ %s ថតត្រូវបានលុប។", - "%s on %s files were deleted.": "%s នៅលើ %s ឯកសារត្រូវបានលុប។", - "%s link were deleted": "%s តំណភ្ជាប់ត្រូវបានលុប", - "Unable to execute the following class callback string : %s": "មិន​អាច​ប្រតិបត្តិ​ខ្សែ​អក្សរ​ហៅ​ត្រឡប់​ថ្នាក់​ខាងក្រោម​បាន​ទេ : %s", - "%s — %s": "%s — %s", - "The media has been deleted": "ប្រព័ន្ធផ្សព្វផ្សាយត្រូវបានលុប", - "Unable to find the media.": "មិនអាចស្វែងរកប្រព័ន្ធផ្សព្វផ្សាយបានទេ។", - "Unable to find the requested file.": "មិនអាចស្វែងរកឯកសារដែលបានស្នើសុំបានទេ។", - "Unable to find the media entry": "មិនអាចស្វែងរកធាតុក្នុងវិចិត្រសាលបានទេ។", - "Home": "ទំព័រដើម", - "Payment Types": "ប្រភេទនៃការទូទាត់", - "Medias": "វិចិត្រសាល", - "List": "បញ្ជី", - "Create Customer": "បង្កើតអតិថិជន", - "Customers Groups": "ក្រុមអតិថិជន", - "Create Group": "បង្កើតក្រុម", - "Reward Systems": "ប្រព័ន្ធរង្វាន់", - "Create Reward": "បង្កើតរង្វាន់", - "List Coupons": "បញ្ជីគូប៉ុង", - "Providers": "អ្នកផ្គត់ផ្គង់", - "Create A Provider": "បង្កើតអ្នកផ្គត់ផ្គង់", - "Accounting": "គណនេយ្យ", - "Transactions": "ប្រតិបត្តិការ", - "Create Transaction": "បង្កើតប្រតិបត្តិការ", - "Accounts": "គណនី", - "Create Account": "បង្កើតគណនី", - "Inventory": "សារពើភ័ណ្ឌ", - "Create Product": "បង្កើតផលិតផល", - "Create Category": "បង្កើតប្រភេទ", - "Create Unit": "បង្កើតឯកតា", - "Unit Groups": "ក្រុមឯកតា", - "Create Unit Groups": "បង្កើតក្រុមឯកតា", - "Stock Flow Records": "កំណត់ត្រាលំហូរស្តុ", - "Taxes Groups": "ក្រុមនៃពន្ធ", - "Create Tax Groups": "បង្កើតក្រុមពន្ធថ្មី", - "Create Tax": "បង្កើតពន្ធ", - "Modules": "Modules", - "Upload Module": "អាប់ឡូត Module", - "Users": "អ្នកប្រើប្រាស់", - "Create User": "បង្កើតអ្នកប្រើប្រាស់", - "Create Roles": "បង្កើតតួនាទី", - "Permissions Manager": "អ្នកគ្រប់គ្រងការអនុញ្ញាត", - "Procurements": "កាតទិញចូល", - "Reports": "របាយការណ៍", - "Sale Report": "របាយការណ៍លក់", - "Stock History": "កំណត់ត្រាស្តុក", - "Incomes & Loosses": "ចំនេញ និងខាត", - "Sales By Payments": "ការលក់តាមការបង់ប្រាក់", - "Settings": "ការកំណត់", - "Invoices": "វិក័យប័ត្រ", - "Workers": "Workers", - "Reset": "ធ្វើឲ្យដូចដើម", - "About": "អំពី", - "Unable to locate the requested module.": "មិនអាចកំណត់ទីតាំង module ដែលបានស្នើសុំបានទេ។", - "Failed to parse the configuration file on the following path \"%s\"": "បានបរាជ័យក្នុងការញែកឯកសារកំណត់រចនាសម្ព័ន្ធនៅលើផ្លូវខាងក្រោម \"%s\"", - "No config.xml has been found on the directory : %s. This folder is ignored": "រកមិនឃើញ config.xml នៅលើថតឯកសារទេ។ : %s. ថតឯកសារនេះមិនត្រូវបានអើពើ។", - "The module \"%s\" has been disabled as the dependency \"%s\" is missing. ": "Module \"%s\" ត្រូវបានបិទ ដោយសារភាពអាស្រ័យ \"%s\" បាត់។ ", - "The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ": "Module \"%s\" ត្រូវបានបិទ ដោយសារភាពអាស្រ័យ \"%s\" មិនត្រូវបានបើក។ ", - "The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ": "ម៉ូឌុល \"%s\" ត្រូវបានបិទ ដោយសារភាពអាស្រ័យ \"%s\" មិនមាននៅលើកំណែដែលត្រូវការអប្បបរមា \"%s\" ទេ។ ", - "The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ": "ម៉ូឌុល \"%s\" ត្រូវបានបិទ ដោយសារភាពអាស្រ័យ \"%s\" ស្ថិតនៅលើកំណែលើសពី \"%s\" ដែលបានណែនាំ។ ", - "The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ": "Module \"%s\" ត្រូវបានបិទ ដោយសារវាមិនត្រូវគ្នាជាមួយកំណែបច្ចុប្បន្នរបស់ NexoPOS %s ប៉ុន្តែទាមទារ %s ។ ", - "Unable to detect the folder from where to perform the installation.": "មិនអាចរកឃើញថតពីកន្លែងដែលត្រូវអនុវត្តការដំឡើងនោះទេ។", - "Invalid Module provided.": "ផ្តល់ Module មិនត្រឹមត្រូវ។", - "Unable to upload this module as it\\'s older than the version installed": "មិនអាចផ្ទុកឡើង Module នេះបានទេ ដោយសារវាចាស់ជាងកំណែដែលបានដំឡើង", - "The module was \"%s\" was successfully installed.": "Module គឺ \"%s\" ត្រូវបានដំឡើងដោយជោគជ័យ។", - "The uploaded file is not a valid module.": "ឯកសារដែលបានផ្ទុកឡើងមិនមែនជា Module ត្រឹមត្រូវទេ។", - "The module has been successfully installed.": "Module ត្រូវបានដំឡើងដោយជោគជ័យ។", - "The modules \"%s\" was deleted successfully.": "Module \"%s\" ត្រូវបានលុបដោយជោគជ័យ។", - "Unable to locate a module having as identifier \"%s\".": "មិន​អាច​កំណត់​ទីតាំង Module ​ដែល​មាន​ជា​គ្រឿង​សម្គាល់ \"%s\"។", - "The migration file doens\\'t have a valid class name. Expected class : %s": "ឯកសារផ្ទេរទិន្នន័យមិនមានឈ្មោះថ្នាក់ត្រឹមត្រូវទេ។ ថ្នាក់រំពឹងទុក : %s", - "Unable to locate the following file : %s": "មិនអាចកំណត់ទីតាំងឯកសារខាងក្រោមបានទេ : %s", - "The migration run successfully.": "ការធ្វើចំណាកស្រុកដំណើរការដោយជោគជ័យ។", - "The migration file doens\\'t have a valid method name. Expected method : %s": "ឯកសារផ្ទេរទិន្នន័យមិនមានឈ្មោះវិធីសាស្ត្រត្រឹមត្រូវទេ។ វិធីសាស្រ្តរំពឹងទុក : %s", - "The module %s cannot be enabled as his dependency (%s) is missing or not enabled.": "Module %s មិនអាចបើកបានទេ ដោយសារភាពអាស្រ័យរបស់គាត់ (%s) បាត់ ឬមិនបានបើក។", - "The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.": "Module %s មិនអាចបើកបានទេ ដោយសារភាពអាស្រ័យរបស់គាត់ (%s) បាត់ ឬមិនបានបើក។", - "An Error Occurred \"%s\": %s": "កំហុស​មួយ​បាន​កើត​ឡើង \"%s\": %s", - "The module has correctly been enabled.": "Module ត្រូវបានបើកយ៉ាងត្រឹមត្រូវ។", - "Unable to enable the module.": "មិនអាចបើក Module បានទេ។", - "The Module has been disabled.": "Module ត្រូវបានបិទ។", - "Unable to disable the module.": "មិនអាចបិទ Module បានទេ។", - "All migration were executed.": "ការធ្វើចំណាកស្រុកទាំងអស់ត្រូវបានប្រតិបត្តិ។", - "Unable to proceed, the modules management is disabled.": "មិនអាចបន្តបានទេ Module ការគ្រប់គ្រងត្រូវបានបិទ។", - "A similar module has been found": "Module ស្រដៀងគ្នានេះត្រូវបានរកឃើញ", - "Missing required parameters to create a notification": "បាត់ប៉ារ៉ាម៉ែត្រដែលត្រូវការដើម្បីបង្កើតការជូនដំណឹង", - "The order has been placed.": "ការបញ្ជាទិញត្រូវបានដាក់។", - "The order has been updated": "ការបញ្ជាទិញត្រូវបានធ្វើបច្ចុប្បន្នភាព", - "The minimal payment of %s has\\'nt been provided.": "ការទូទាត់អប្បបរមានៃ %s មិនត្រូវបានផ្តល់ជូនទេ។", - "The percentage discount provided is not valid.": "ការបញ្ចុះតម្លៃជាភាគរយដែលផ្តល់ជូនគឺមិនត្រឹមត្រូវទេ។", - "A discount cannot exceed the sub total value of an order.": "ការបញ្ចុះតម្លៃមិនអាចលើសពីតម្លៃសរុបរងនៃការបញ្ជាទិញបានទេ។", - "Unable to proceed as the order is already paid.": "មិន​អាច​បន្ត​បាន​ទេ ដោយសារ​ការ​បញ្ជា​ទិញ​ត្រូវ​បាន​បង់​រួច​ហើយ។", - "No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.": "មិនមានការទូទាត់ត្រូវបានរំពឹងទុកនៅពេលនេះទេ។ ប្រសិនបើអតិថិជនចង់បង់ប្រាក់មុន សូមពិចារណាកែសម្រួលកាលបរិច្ឆេទនៃការបង់រំលោះ។", - "The payment has been saved.": "ការទូទាត់ត្រូវបានរក្សាទុក។", - "Unable to edit an order that is completely paid.": "មិនអាចកែសម្រួលការបញ្ជាទិញដែលត្រូវបង់ទាំងស្រុងបានទេ។", - "Unable to proceed as one of the previous submitted payment is missing from the order.": "មិន​អាច​បន្ត​បាន​ទេ ដោយសារ​ការ​បង់​ប្រាក់​ដែល​បាន​ដាក់​ស្នើ​មុន​មួយ​បាត់​ពី​ការ​បញ្ជា​ទិញ។", - "The order payment status cannot switch to hold as a payment has already been made on that order.": "ស្ថានភាព​នៃ​ការ​បង់​ប្រាក់​នៃ​ការ​បញ្ជា​ទិញ​មិន​អាច​ប្ដូរ​ទៅ​កាន់​បាន​ទេ ដោយសារ​ការ​ទូទាត់​ត្រូវ​បាន​ធ្វើ​រួច​ហើយ​លើ​ការ​បញ្ជា​ទិញ​នោះ។", - "The customer account funds are\\'nt enough to process the payment.": "មូលនិធិគណនីអតិថិជនមិនគ្រប់គ្រាន់ដើម្បីដំណើរការការទូទាត់នោះទេ។", - "Unable to proceed. One of the submitted payment type is not supported.": "មិនអាចបន្តបានទេ។ ប្រភេទនៃការទូទាត់ដែលបានដាក់ស្នើមិនត្រូវបានគាំទ្រទេ។", - "Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.": "មិនអាចបន្តបានទេ។ ការបញ្ជាទិញដែលបានបង់ដោយផ្នែកមិនត្រូវបានអនុញ្ញាតទេ។ ជម្រើសនេះអាចត្រូវបានផ្លាស់ប្តូរនៅលើការកំណត់។", - "Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.": "មិនអាចបន្តបានទេ។ ការបញ្ជាទិញដែលមិនបង់ប្រាក់មិនត្រូវបានអនុញ្ញាតទេ។ ជម្រើសនេះអាចត្រូវបានផ្លាស់ប្តូរនៅលើការកំណត់។", - "By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.": "តាមរយៈការបញ្ជាទិញនេះ អតិថិជននឹងលើសពីឥណទានអតិបរមាដែលអនុញ្ញាតសម្រាប់គណនីរបស់គាត់។: %s.", - "You\\'re not allowed to make payments.": "អ្នកមិនត្រូវបានអនុញ្ញាតឱ្យបង់ប្រាក់ទេ។", - "Unnamed Product": "ផលិតផលគ្មានឈ្មោះ", - "Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s": "មិនអាចបន្តបានទេ មិនមានស្តុកគ្រប់គ្រាន់សម្រាប់ %s ដោយប្រើឯកតា %s ទេ។ បានស្នើ៖ %s មាន %s", - "Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.": "មិនអាចបន្តបានទេ ផលិតផល \"%s\" មានឯកតាដែលមិនអាចទាញយកមកវិញបានទេ។ វាប្រហែលជាត្រូវបានលុប។", - "Unable to find the customer using the provided ID. The order creation has failed.": "មិនអាចស្វែងរកអតិថិជនដោយប្រើលេខសម្គាល់ដែលបានផ្តល់។ ការបង្កើតការបញ្ជាទិញបានបរាជ័យ។", - "Unable to proceed a refund on an unpaid order.": "មិន​អាច​បន្ត​ការ​សង​ប្រាក់​វិញ​លើ​ការ​បញ្ជា​ទិញ​ដែល​មិន​បាន​បង់​ប្រាក់។", - "The current credit has been issued from a refund.": "ឥណទានបច្ចុប្បន្នត្រូវបានចេញពីការសងប្រាក់វិញ។", - "The order has been successfully refunded.": "ការបញ្ជាទិញត្រូវបានសងប្រាក់វិញដោយជោគជ័យ។", - "unable to proceed to a refund as the provided status is not supported.": "មិនអាចបន្តទៅការបង្វិលសងវិញបានទេ ដោយសារស្ថានភាពដែលបានផ្តល់មិនត្រូវបានគាំទ្រ។", - "The product %s has been successfully refunded.": "ផលិតផល %s ត្រូវបានសងប្រាក់វិញដោយជោគជ័យ។", - "Unable to find the order product using the provided id.": "មិនអាចស្វែងរកផលិតផលបញ្ជាទិញដោយប្រើលេខសម្គាល់ដែលបានផ្តល់។", - "Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier": "មិនអាចស្វែងរកការបញ្ជាទិញដែលបានស្នើសុំដោយប្រើ \"%s\" ជា pivot និង \"%s\" ជាអ្នកកំណត់អត្តសញ្ញាណ", - "Unable to fetch the order as the provided pivot argument is not supported.": "មិន​អាច​ទៅ​យក​លំដាប់​ដោយ​សារ​អាគុយម៉ង់​ជំនួយ​ទិន្នន័យ​ដែល​បាន​ផ្ដល់​មិន​ត្រូវ​បាន​គាំទ្រ។", - "The product has been added to the order \"%s\"": "ផលិតផលត្រូវបានបញ្ចូលទៅក្នុងការបញ្ជាទិញ \"%s\"", - "the order has been successfully computed.": "ការបញ្ជាទិញត្រូវបានគណនាដោយជោគជ័យ។", - "The order has been deleted.": "ការបញ្ជាទិញត្រូវបានលុប។", - "The product has been successfully deleted from the order.": "ផលិតផលត្រូវបានលុបចោលដោយជោគជ័យពីការបញ្ជាទិញ។", - "Unable to find the requested product on the provider order.": "មិនអាចស្វែងរកផលិតផលដែលបានស្នើសុំនៅលើការបញ្ជាទិញរបស់អ្នកផ្តល់សេវាបានទេ។", - "Unknown Status (%s)": "ស្ថានភាពមិនស្គាល់ (%s)", - "Unknown Product Status": "ស្ថានភាពផលិតផលមិនស្គាល់", - "Ongoing": "កំពុងដំណើរការ", - "Ready": "រួចរាល់", - "Not Available": "មិនអាច", - "Failed": "បរាជ័យ", - "Unpaid Orders Turned Due": "ការបញ្ជាទិញដែលមិនបានបង់ប្រាក់ត្រូវផុតកំណត់", - "%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.": "ការបញ្ជាទិញ %s (s) ទាំងមិនទាន់បង់ប្រាក់ ឬបានបង់ដោយផ្នែកបានដល់កំណត់។ វាកើតឡើងប្រសិនបើមិនមានការបញ្ចប់មុនកាលបរិច្ឆេទទូទាត់ដែលរំពឹងទុក។", - "No orders to handle for the moment.": "គ្មាន​ការ​បញ្ជា​ឱ្យ​ដោះស្រាយ​សម្រាប់​ពេល​នេះ​។", - "The order has been correctly voided.": "ការបញ្ជាទិញត្រូវបានចាត់ទុកជាមោឃៈត្រឹមត្រូវ។", - "Unable to find a reference of the provided coupon : %s": "មិនអាចស្វែងរកឯកសារយោងនៃប័ណ្ណដែលបានផ្តល់ : %s", - "Unable to edit an already paid instalment.": "មិនអាចកែសម្រួលការដំឡើងដែលបានបង់រួចហើយ។", - "The instalment has been saved.": "ការដំឡើងត្រូវបានរក្សាទុក។", - "The instalment has been deleted.": "ការដំឡើងត្រូវបានលុប។", - "The defined amount is not valid.": "ចំនួនទឹកប្រាក់ដែលបានកំណត់គឺមិនត្រឹមត្រូវទេ។", - "No further instalments is allowed for this order. The total instalment already covers the order total.": "មិនអនុញ្ញាតឱ្យមានការដំឡើងបន្ថែមទៀតសម្រាប់ការបញ្ជាទិញនេះទេ។ ការដំឡើងសរុបគ្របដណ្តប់លើការបញ្ជាទិញសរុបរួចហើយ។", - "The instalment has been created.": "ការដំឡើងត្រូវបានបង្កើតឡើង។", - "The provided status is not supported.": "ស្ថានភាពដែលបានផ្តល់មិនត្រូវបានគាំទ្រទេ។", - "The order has been successfully updated.": "ការបញ្ជាទិញត្រូវបានធ្វើបច្ចុប្បន្នភាពដោយជោគជ័យ។", - "Unable to find the requested procurement using the provided identifier.": "មិនអាចស្វែងរកលទ្ធកម្មដែលបានស្នើសុំដោយប្រើឧបករណ៍កំណត់អត្តសញ្ញាណដែលបានផ្តល់។", - "Unable to find the assigned provider.": "មិនអាចស្វែងរកអ្នកផ្តល់សេវាដែលបានកំណត់។", - "The procurement has been created.": "លទ្ធកម្មត្រូវបានបង្កើតឡើង។", - "Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.": "មិនអាចកែសម្រួលលទ្ធកម្មដែលបានស្តុកទុករួចហើយ។ សូមពិចារណាលើការអនុវត្ត និងការកែតម្រូវភាគហ៊ុន។", - "The provider has been edited.": "អ្នកផ្តល់សេវាត្រូវបានកែសម្រួល។", - "The procurement has been deleted. %s included stock record(s) has been deleted as well.": "លទ្ធកម្ម​ត្រូវ​បាន​លុប។ %s រួមបញ្ចូលកំណត់ត្រាស្តុកក៏ត្រូវបានលុបផងដែរ។", - "Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.": "មិនអាចលុបលទ្ធកម្មបានទេ ដោយសារមិនមានស្តុកគ្រប់គ្រាន់សម្រាប់ \"%s\" នៅលើឯកតា \"%s\" ។ នេះទំនងជាមានន័យថាចំនួនភាគហ៊ុនបានផ្លាស់ប្តូរជាមួយនឹងការលក់ ការកែតម្រូវបន្ទាប់ពីលទ្ធកម្មត្រូវបានស្តុកទុក។", - "Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"": "មិនអាចមានលេខសម្គាល់ក្រុមសម្រាប់ផលិតផលដោយប្រើឯកសារយោង \"%s\" ជា \"%s\"", - "Unable to find the product using the provided id \"%s\"": "មិនអាចស្វែងរកផលិតផលដោយប្រើលេខសម្គាល់ដែលបានផ្តល់ \"%s\"", - "Unable to procure the product \"%s\" as the stock management is disabled.": "មិនអាចទិញផលិតផល \"%s\" បានទេ ដោយសារការគ្រប់គ្រងស្តុកត្រូវបានបិទ។", - "Unable to procure the product \"%s\" as it is a grouped product.": "មិនអាចទិញផលិតផល \"%s\" បានទេ ដោយសារវាជាផលិតផលដែលដាក់ជាក្រុម។", - "The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item": "ឯកតា​ដែល​ប្រើ​សម្រាប់​ផលិតផល %s មិន​មែន​ជា​របស់​ក្រុម​ឯកតា​ដែល​បាន​ចាត់​ឱ្យ​ទៅ​ធាតុ​នោះ​ទេ។", - "The operation has completed.": "ប្រតិបត្តិការនេះត្រូវបានបញ្ចប់។", - "The procurement has been refreshed.": "លទ្ធកម្មត្រូវបានធ្វើឱ្យស្រស់។", - "The procurement has been reset.": "លទ្ធកម្មត្រូវបានកំណត់ឡើងវិញ។", - "The procurement products has been deleted.": "ផលិតផលលទ្ធកម្មត្រូវបានលុប។", - "The procurement product has been updated.": "ផលិតផលលទ្ធកម្មត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "Unable to find the procurement product using the provided id.": "មិនអាចស្វែងរកផលិតផលលទ្ធកម្មដោយប្រើលេខសម្គាល់ដែលបានផ្តល់។", - "The product %s has been deleted from the procurement %s": "ផលិតផល %s ត្រូវបានលុបចេញពីលទ្ធកម្ម %s", - "The product with the following ID \"%s\" is not initially included on the procurement": "ផលិតផលដែលមានលេខសម្គាល់ \"%s\" ខាងក្រោមមិនត្រូវបានរាប់បញ្ចូលក្នុងលទ្ធកម្មទេ។", - "The procurement products has been updated.": "ផលិតផលលទ្ធកម្មត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "Procurement Automatically Stocked": "លទ្ធកម្មស្តុកទុកដោយស្វ័យប្រវត្តិ", - "%s procurement(s) has recently been automatically procured.": "%s លទ្ធកម្មថ្មីៗនេះត្រូវបានទទួលដោយស្វ័យប្រវត្តិ។", - "Draft": "សេចក្តីព្រាង", - "The category has been created": "ប្រភេទត្រូវបានបង្កើតឡើង", - "The requested category doesn\\'t exists": "ប្រភេទដែលបានស្នើមិនមានទេ។", - "Unable to find the product using the provided id.": "មិនអាចស្វែងរកផលិតផលដោយប្រើលេខសម្គាល់ដែលបានផ្តល់។", - "Unable to find the requested product using the provided SKU.": "មិនអាចស្វែងរកផលិតផលដែលបានស្នើសុំដោយប្រើ SKU ដែលបានផ្តល់ឱ្យនោះទេ។", - "The category to which the product is attached doesn\\'t exists or has been deleted": "ប្រភេទ​ដែល​ផលិតផល​ត្រូវ​បាន​ភ្ជាប់​មិន​មាន ឬ​ត្រូវ​បាន​លុប", - "Unable to create a product with an unknow type : %s": "មិន​អាច​បង្កើត​ផលិតផល​ដែល​មិន​ស្គាល់​ប្រភេទ៖ %s", - "A variation within the product has a barcode which is already in use : %s.": "បំរែបំរួល​ក្នុង​ផលិតផល​មាន​បាកូដ​ដែល​ត្រូវ​បាន​ប្រើ​រួច​ហើយ៖ %s ។", - "A variation within the product has a SKU which is already in use : %s": "បំរែបំរួលនៅក្នុងផលិតផលមាន SKU ដែលកំពុងប្រើប្រាស់រួចហើយ៖ %s", - "The variable product has been created.": "ផលិតផលអថេរត្រូវបានបង្កើតឡើង។", - "The provided barcode \"%s\" is already in use.": "លេខកូដដែលបានផ្តល់ \"%s\" ត្រូវបានប្រើប្រាស់រួចហើយ។", - "The provided SKU \"%s\" is already in use.": "SKU \"%s\" ដែលផ្តល់អោយគឺត្រូវបានប្រើប្រាស់រួចហើយ។", - "The product has been saved.": "ផលិតផលត្រូវបានរក្សាទុក។", - "Unable to edit a product with an unknown type : %s": "មិនអាចកែសម្រួលផលិតផលដែលមានប្រភេទមិនស្គាល់៖ %s", - "A grouped product cannot be saved without any sub items.": "ផលិតផលដែលបានដាក់ជាក្រុមមិនអាចត្រូវបានរក្សាទុកដោយគ្មានធាតុរងណាមួយឡើយ។", - "A grouped product cannot contain grouped product.": "ផលិតផលដែលដាក់ជាក្រុមមិនអាចមានផលិតផលជាក្រុមទេ។", - "The provided barcode is already in use.": "បាកូដដែលបានផ្តល់គឺត្រូវបានប្រើប្រាស់រួចហើយ។", - "The provided SKU is already in use.": "SKU ដែលផ្តល់ឲ្យត្រូវបានប្រើប្រាស់រួចហើយ។", - "The product has been updated": "ផលិតផលត្រូវបានធ្វើបច្ចុប្បន្នភាព", - "The requested sub item doesn\\'t exists.": "ធាតុរងដែលបានស្នើមិនមានទេ។", - "The subitem has been saved.": "ធាតុរងត្រូវបានរក្សាទុក។", - "One of the provided product variation doesn\\'t include an identifier.": "បំរែបំរួលផលិតផលមួយដែលបានផ្តល់មិនរួមបញ្ចូលឧបករណ៍កំណត់អត្តសញ្ញាណទេ។", - "The variable product has been updated.": "ផលិតផលអថេរត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "The product\\'s unit quantity has been updated.": "បរិមាណឯកតានៃផលិតផលត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "Unable to reset this variable product \"%s": "មិនអាចកំណត់ផលិតផលអថេរនេះឡើងវិញ \"%s", - "The product variations has been reset": "ការប្រែប្រួលផលិតផលត្រូវបានកំណត់ឡើងវិញ", - "The product has been reset.": "ផលិតផលត្រូវបានកំណត់ឡើងវិញ។", - "The product \"%s\" has been successfully deleted": "ផលិតផល \"%s\" ត្រូវបានលុបដោយជោគជ័យ", - "Unable to find the requested variation using the provided ID.": "មិនអាចស្វែងរកបំរែបំរួលដែលបានស្នើសុំដោយប្រើលេខសម្គាល់ដែលបានផ្តល់។", - "The product stock has been updated.": "ស្តុកផលិតផលត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "The action is not an allowed operation.": "សកម្មភាពមិនមែនជាប្រតិបត្តិការដែលត្រូវបានអនុញ្ញាតទេ។", - "Adjusting grouped product inventory must result of a create, update, delete sale operation.": "ការកែសម្រួលសារពើភ័ណ្ឌផលិតផលជាក្រុមត្រូវតែជាលទ្ធផលនៃការបង្កើត ធ្វើបច្ចុប្បន្នភាព លុបប្រតិបត្តិការលក់។", - "Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).": "មិន​អាច​បន្ត​បាន សកម្មភាព​នេះ​នឹង​ធ្វើ​ឱ្យ​ស្តុក​អវិជ្ជមាន (%s)។ បរិមាណចាស់ : (%s), បរិមាណ : (%s) ។", - "Unsupported stock action \"%s\"": "សកម្មភាពស្តុកដែលមិនគាំទ្រ \"%s\"", - "The product quantity has been updated.": "បរិមាណផលិតផលត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "There is no variations to delete.": "មិនមានបំរែបំរួលដើម្បីលុបទេ។", - "%s product(s) has been deleted.": "%s ផលិតផលត្រូវបានលុប។", - "There is no products to delete.": "មិនមានផលិតផលដែលត្រូវលុបទេ។", - "%s products(s) has been deleted.": "%s ផលិតផលត្រូវបានលុប។", - "Unable to find the product, as the argument \"%s\" which value is \"%s": "មិនអាចស្វែងរកផលិតផលបានទេ ដោយសារអាគុយម៉ង់ \"%s\" ដែលតម្លៃគឺ \"%s", - "The product variation has been successfully created.": "បំរែបំរួលផលិតផលត្រូវបានបង្កើតដោយជោគជ័យ។", - "The product variation has been updated.": "ការប្រែប្រួលផលិតផលត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "You cannot convert unit on a product having stock management disabled.": "អ្នកមិនអាចបំប្លែងឯកតានៅលើផលិតផលដែលបិទការគ្រប់គ្រងស្តុកបានទេ។", - "The source and the destination unit can\\'t be the same. What are you trying to do ?": "ប្រភព និងអង្គភាពគោលដៅមិនអាចដូចគ្នាទេ។ តើអ្នកកំពុងព្យាយាមធ្វើអ្វី?", - "There is no source unit quantity having the name \"%s\" for the item %s": "មិនមានបរិមាណឯកតាប្រភពដែលមានឈ្មោះ \"%s\" សម្រាប់ធាតុ %s ទេ។", - "There is no destination unit quantity having the name %s for the item %s": "មិនមានបរិមាណឯកតាទិសដៅដែលមានឈ្មោះ %s សម្រាប់ធាតុ %s ទេ។", - "The source unit and the destination unit doens\\'t belong to the same unit group.": "ឯកតាប្រភព និងអង្គភាពគោលដៅមិនមែនជាកម្មសិទ្ធិរបស់ក្រុមឯកតាតែមួយទេ។", - "The group %s has no base unit defined": "ក្រុម %s មិន​បាន​កំណត់​ឯកតា​មូលដ្ឋាន​ទេ។", - "The conversion of %s(%s) to %s(%s) was successful": "ការបំប្លែង %s(%s) ទៅ %s(%s) បានជោគជ័យ", - "The product has been deleted.": "ផលិតផលត្រូវបានលុប។", - "The provider has been created.": "អ្នកផ្តត់ផ្គង់ត្រូវបានបង្កើតឡើង។", - "The provider has been updated.": "អ្នកផ្តត់ផ្គង់ត្រូវបានកែសម្រួល។", - "Unable to find the provider using the specified id.": "មិនអាចស្វែងរកអ្នកផ្តល់សេវាដោយប្រើលេខសម្គាល់ដែលបានបញ្ជាក់។", - "The provider has been deleted.": "អ្នកផ្តល់សេវាត្រូវបានលុប។", - "Unable to find the provider using the specified identifier.": "មិនអាចស្វែងរកអ្នកផ្តល់សេវាដោយប្រើឧបករណ៍កំណត់អត្តសញ្ញាណដែលបានបញ្ជាក់។", - "The provider account has been updated.": "គណនីអ្នកផ្តល់សេវាត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "An error occurred: %s.": "កំហុសបានកើតឡើង៖ %s ។", - "The procurement payment has been deducted.": "ការទូទាត់លទ្ធកម្មត្រូវបានកាត់។", - "The dashboard report has been updated.": "របាយការណ៍ផ្ទាំងគ្រប់គ្រងត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.": "ប្រតិបត្តិការស្តុកត្រូវបានរកឃើញនាពេលថ្មីៗនេះ ប៉ុន្តែ NexoPOS មិនអាចធ្វើបច្ចុប្បន្នភាពរបាយការណ៍នេះបានទេ។ វាកើតឡើងប្រសិនបើសេចក្តីយោងផ្ទាំងគ្រប់គ្រងប្រចាំថ្ងៃមិនត្រូវបានបង្កើត។", - "Untracked Stock Operation": "ប្រតិបត្តិការស្តុកដែលមិនបានតាមដាន", - "Unsupported action": "សកម្មភាពដែលមិនគាំទ្រ", - "The expense has been correctly saved.": "ការចំណាយត្រូវបានរក្សាទុកយ៉ាងត្រឹមត្រូវ។", - "Member Since": "សមាជិកចាប់តាំងពី", - "Total Orders": "ការបញ្ជាទិញសរុប", - "Today\\'s Orders": "ការបញ្ជាទិញថ្ងៃនេះ", - "Total Sales": "ការលក់សរុប", - "Today\\'s Sales": "ការលក់ថ្ងៃនេះ", - "Total Refunds": "ការបង្វិលសងសរុប", - "Today\\'s Refunds": "ការសងប្រាក់វិញនៅថ្ងៃនេះ", - "Total Customers": "អតិថិជនសរុប", - "Today\\'s Customers": "អតិថិជនថ្ងៃនេះ", - "The report has been computed successfully.": "របាយការណ៍ត្រូវបានគណនាដោយជោគជ័យ។", - "The report will be generated. Try loading the report within few minutes.": "របាយការណ៍នឹងត្រូវបានបង្កើត។ សាកល្បងផ្ទុករបាយការណ៍ក្នុងរយៈពេលពីរបីនាទី។", - "The table has been truncated.": "តារាងត្រូវបានកាត់។", - "The database has been wiped out.": "មូលដ្ឋានទិន្នន័យត្រូវបានលុបចោល។", - "No custom handler for the reset \"' . $mode . '\"": "គ្មានឧបករណ៍ដោះស្រាយផ្ទាល់ខ្លួនសម្រាប់ការកំណត់ឡើងវិញ \"' . $mode . '\"", - "Untitled Settings Page": "ទំព័រការកំណត់គ្មានចំណងជើង", - "No description provided for this settings page.": "មិនមានការពិពណ៌នាដែលបានផ្តល់សម្រាប់ទំព័រការកំណត់នេះទេ។", - "The form has been successfully saved.": "ទម្រង់ត្រូវបានរក្សាទុកដោយជោគជ័យ។", - "Unable to reach the host": "មិនអាចទៅដល់ម្ចាស់ផ្ទះបានទេ។", - "Unable to connect to the database using the credentials provided.": "មិន​អាច​តភ្ជាប់​ទៅ​មូលដ្ឋាន​ទិន្នន័យ​ដោយ​ប្រើ​លិខិត​សម្គាល់​ដែល​បាន​ផ្ដល់​ឱ្យ​។", - "Unable to select the database.": "មិនអាចជ្រើសរើសមូលដ្ឋានទិន្នន័យបានទេ។", - "Access denied for this user.": "ការចូលប្រើត្រូវបានបដិសេធសម្រាប់អ្នកប្រើប្រាស់នេះ។", - "Incorrect Authentication Plugin Provided.": "កម្មវិធីជំនួយការផ្ទៀងផ្ទាត់មិនត្រឹមត្រូវត្រូវបានផ្តល់ជូន។", - "The connexion with the database was successful": "ការភ្ជាប់ជាមួយមូលដ្ឋានទិន្នន័យបានជោគជ័យ", - "NexoPOS has been successfully installed.": "NexoPOS ត្រូវបានដំឡើងដោយជោគជ័យ។", - "Cash": "សាច់ប្រាក់", - "Bank Payment": "ការទូទាត់តាមធនាគារ", - "Customer Account": "គណនីអតិថិជន", - "Database connection was successful.": "ការតភ្ជាប់មូលដ្ឋានទិន្នន័យបានជោគជ័យ។", - "Unable to proceed. The parent tax doesn\\'t exists.": "មិនអាចបន្តបានទេ។ ពន្ធមេមិនមានទេ។", - "A simple tax must not be assigned to a parent tax with the type \"simple": "ពន្ធសាមញ្ញមិនត្រូវកំណត់ទៅពន្ធមេដែលមានប្រភេទ \"សាមញ្ញទេ។", - "A tax cannot be his own parent.": "ពន្ធមិនអាចជាមេបានទេ។", - "The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".": "ឋានានុក្រមពន្ធត្រូវបានកំណត់ត្រឹម 1. ពន្ធរងមិនត្រូវមានប្រភេទពន្ធដែលបានកំណត់ទៅជា \"grouped\" ទេ។", - "Unable to find the requested tax using the provided identifier.": "មិន​អាច​រក​ឃើញ​ពន្ធ​ដែល​បាន​ស្នើ​ដោយ​ប្រើ​គ្រឿង​សម្គាល់​ដែល​បាន​ផ្តល់​ឱ្យ​ទេ។", - "The tax group has been correctly saved.": "ក្រុមពន្ធត្រូវបានរក្សាទុកយ៉ាងត្រឹមត្រូវ។", - "The tax has been correctly created.": "ពន្ធត្រូវបានបង្កើតឡើងយ៉ាងត្រឹមត្រូវ។", - "The tax has been successfully deleted.": "ពន្ធត្រូវបានលុបដោយជោគជ័យ។", - "Created via tests": "បង្កើតតាមរយៈការធ្វើតេស្ត", - "The transaction has been successfully saved.": "ប្រតិបត្តិការត្រូវបានរក្សាទុកដោយជោគជ័យ។", - "The transaction has been successfully updated.": "ប្រតិបត្តិការនេះត្រូវបានធ្វើបច្ចុប្បន្នភាពដោយជោគជ័យ។", - "Unable to find the transaction using the provided identifier.": "មិនអាចស្វែងរកប្រតិបត្តិការដោយប្រើឧបករណ៍កំណត់អត្តសញ្ញាណដែលបានផ្តល់។", - "Unable to find the requested transaction using the provided id.": "មិនអាចស្វែងរកប្រតិបត្តិការដែលបានស្នើសុំដោយប្រើលេខសម្គាល់ដែលបានផ្តល់។", - "The transction has been correctly deleted.": "ប្រតិបត្តិការត្រូវបានលុបយ៉ាងត្រឹមត្រូវ។", - "Unable to find the requested account type using the provided id.": "មិនអាចស្វែងរកប្រភេទគណនីដែលបានស្នើសុំដោយប្រើលេខសម្គាល់ដែលបានផ្តល់។", - "You cannot delete an account type that has transaction bound.": "អ្នក​មិន​អាច​លុប​ប្រភេទ​គណនី​ដែល​មាន​កិច្ច​សន្យា​ប្រតិបត្តិការ​ទេ។", - "The account type has been deleted.": "ប្រភេទគណនីត្រូវបានលុប។", - "You cannot delete an account which has transactions bound.": "អ្នកមិនអាចលុបគណនីដែលមានប្រតិបត្តិការជាប់ពាក់ព័ន្ធបានទេ។", - "The transaction account has been deleted.": "គណនីប្រតិបត្តិការត្រូវបានលុប។", - "Unable to find the transaction account using the provided ID.": "មិនអាចស្វែងរកគណនីប្រតិបត្តិការដោយប្រើលេខសម្គាល់ដែលបានផ្តល់។", - "The account has been created.": "គណនីត្រូវបានបង្កើតឡើង។", - "The transaction account has been updated.": "គណនីប្រតិបត្តិការត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "This transaction type can\\'t be triggered.": "ប្រភេទប្រតិបត្តិការនេះមិនអាចចាប់ផ្តើមបានទេ។", - "The transaction has been successfully triggered.": "ប្រតិបត្តិការនេះត្រូវបានបង្កឡើងដោយជោគជ័យ។", - "The transaction \"%s\" has been processed on day \"%s\".": "ប្រតិបត្តិការ \"%s\" ត្រូវបានដំណើរការនៅថ្ងៃ \"%s\" ។", - "The transaction \"%s\" has already been processed.": "ប្រតិបត្តិការ \"%s\" ត្រូវបានដំណើរការរួចហើយ។", - "The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.": "ប្រតិបត្តិការ \"%s\" មិនត្រូវបានដំណើរការទេ ដោយសារវាហួសសម័យហើយ។", - "The process has been correctly executed and all transactions has been processed.": "ដំណើរការនេះត្រូវបានប្រតិបត្តិយ៉ាងត្រឹមត្រូវ ហើយប្រតិបត្តិការទាំងអស់ត្រូវបានដំណើរការ។", - "The process has been executed with some failures. %s/%s process(es) has successed.": "ដំណើរការនេះត្រូវបានប្រតិបត្តិដោយមានការបរាជ័យមួយចំនួន។ ដំណើរការ %s/%s (es) បានជោគជ័យ។", - "Procurement : %s": "ការទិញចូល : %s", - "Procurement Liability : %s": "ទំនួលខុសត្រូវលើលទ្ធកម្ម : %s", - "Refunding : %s": "កាសងប្រាក់វិញ : %s", - "Spoiled Good : %s": "ផលិតផលខូច : %s", - "Sale : %s": "លក់ : %s", - "Customer Credit Account": "គណនីឥណទានអតិថិជន", - "Liabilities Account": "គណនីបំណុល", - "Customer Debit Account": "គណនីឥណពន្ធរបស់អតិថិជន", - "Sales Refunds Account": "គណនីសងប្រាក់ពីការលក់", - "Register Cash-In Account": "ចុះឈ្មោះគណនីសាច់ប្រាក់", - "Register Cash-Out Account": "ចុះឈ្មោះគណនីដកប្រាក់", - "Not found account type: %s": "រកមិនឃើញប្រភេទគណនីទេ: %s", - "Refund : %s": "សងប្រាក់ : %s", - "Customer Account Crediting : %s": "ការផ្តល់ឥណទានគណនីអតិថិជន : %s", - "Customer Account Purchase : %s": "ការទិញគណនីអតិថិជន : %s", - "Customer Account Deducting : %s": "ការកាត់គណនីអតិថិជន : %s", - "Some transactions are disabled as NexoPOS is not able to perform asynchronous requests.": "ប្រតិបត្តិការមួយចំនួនត្រូវបានបិទ ដោយសារ NexoPOS មិនអាចធ្វើបាន អនុវត្តសំណើអសមកាល.", - "First Day Of Month": "ថ្ងៃដំបូងនៃខែ", - "Last Day Of Month": "ថ្ងៃចុងក្រោយនៃខែ", - "Month middle Of Month": "ខែពាក់កណ្តាលខែ", - "{day} after month starts": "{day} បន្ទាប់ពីខែចាប់ផ្តើម", - "{day} before month ends": "{day} មុនខែបញ្ចប់", - "Every {day} of the month": "រៀងរាល់ {day} នៃខែ", - "Days": "ថ្ងៃ", - "Make sure set a day that is likely to be executed": "ត្រូវប្រាកដថាកំណត់ថ្ងៃដែលទំនងជាត្រូវបានប្រតិបត្តិ", - "The Unit Group has been created.": "ក្រុមឯកតាត្រូវបានបង្កើតឡើង។", - "The unit group %s has been updated.": "ក្រុមឯកតា %s ត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "Unable to find the unit group to which this unit is attached.": "មិន​អាច​ស្វែង​រក​ក្រុម​ឯកតា​ដែល​ឯកតា​នេះ​ត្រូវ​បាន​ភ្ជាប់។", - "The unit has been saved.": "ឯកតាត្រូវបានរក្សាទុក។", - "Unable to find the Unit using the provided id.": "មិនអាចស្វែងរកឯកតាដោយប្រើលេខសម្គាល់ដែលបានផ្តល់។", - "The unit has been updated.": "ឯកតាត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "The unit group %s has more than one base unit": "ក្រុមឯកតា %s មានឯកតាមូលដ្ឋានច្រើនជាងមួយ។", - "The unit group %s doesn\\'t have a base unit": "ក្រុមឯកតា %s មិនមានឯកតាមូលដ្ឋានទេ។", - "The unit has been deleted.": "ឯកតា​ត្រូវ​បាន​លុប។", - "The system role \"Users\" can be retrieved.": "តួនាទីប្រព័ន្ធ \"អ្នកប្រើប្រាស់\" អាចទាញយកមកវិញបាន។", - "The default role that must be assigned to new users cannot be retrieved.": "តួនាទីលំនាំដើមដែលត្រូវតែផ្តល់ទៅឱ្យអ្នកប្រើប្រាស់ថ្មី មិនអាចទាញយកមកវិញបានទេ។", - "The %s is already taken.": "%s ត្រូវបានយករួចហើយ។", - "Your Account has been successfully created.": "គណនីរបស់អ្នកត្រូវបានបង្កើតដោយជោគជ័យ។", - "Your Account has been created but requires email validation.": "គណនីរបស់អ្នកត្រូវបានបង្កើត ប៉ុន្តែទាមទារឱ្យមានសុពលភាពអ៊ីមែល។", - "Clone of \"%s\"": "ចម្លងពី \"%s\"", - "The role has been cloned.": "តួនាទីត្រូវបានចម្លង។", - "The widgets was successfully updated.": "ផ្ទាំងវិចិត្រត្រូវបានធ្វើបច្ចុប្បន្នភាពដោយជោគជ័យ។", - "The token was successfully created": "សញ្ញាសម្ងាត់ត្រូវបានបង្កើតដោយជោគជ័យ", - "The token has been successfully deleted.": "សញ្ញាសម្ងាត់ត្រូវបានលុបដោយជោគជ័យ។", - "unable to find this validation class %s.": "មិន​អាច​រក​ឃើញ​ថ្នាក់​ផ្ទៀងផ្ទាត់​នេះ %s ។", - "Details about the environment.": "ព័ត៌មានលម្អិតអំពីបរិស្ថាន។", - "Core Version": "កំណែស្នូល", - "Laravel Version": "ជំនាន់ Laravel", - "PHP Version": "ជំនាន់ PHP", - "Mb String Enabled": "បើក Mb String", - "Zip Enabled": "បើក Zip", - "Curl Enabled": "បើក Curl", - "Math Enabled": "បើក Math", - "XML Enabled": "បើក XML", - "XDebug Enabled": "បើក XDebug", - "File Upload Enabled": "បានបើកដំណើរការផ្ទុកឯកសារ", - "File Upload Size": "ទំហំផ្ទុកឯកសារ", - "Post Max Size": "ទំហំប្រកាសអតិបរមា", - "Max Execution Time": "ពេលវេលាប្រតិបត្តិអតិបរមា", - "%s Second(s)": "%s វិនាទី", - "Memory Limit": "ដែនកំណត់នៃការចងចាំ", - "Configure the accounting feature": "កំណត់រចនាសម្ព័ន្ធមុខងារគណនេយ្យ", - "Customers Settings": "ការកំណត់អតិថិជន", - "Configure the customers settings of the application.": "កំណត់ការកំណត់អតិថិជននៃកម្មវិធី។", - "General Settings": "ការកំណត់​ទូទៅ", - "Configure the general settings of the application.": "កំណត់ការកំណត់ទូទៅនៃកម្មវិធី។", - "Store Name": "ឈ្មោះហាង", - "This is the store name.": "នេះគឺជាឈ្មោះហាង។", - "Store Address": "អាសយដ្ឋានហាង", - "The actual store address.": "អាសយដ្ឋានហាងពិតប្រាកដ។", - "Store City": "ទីក្រុងរបស់ស្តុក", - "The actual store city.": "ទីក្រុងហាងជាក់ស្តែង។", - "Store Phone": "លេខទូរស័ព្ទរបស់ស្តុក", - "The phone number to reach the store.": "លេខទូរស័ព្ទដើម្បីទៅដល់ហាង។", - "Store Email": "អ៊ីមែលរបស់ស្តុក", - "The actual store email. Might be used on invoice or for reports.": "អ៊ីមែលហាងពិតប្រាកដ។ អាចត្រូវបានប្រើប្រាស់នៅលើវិក្កយបត្រ ឬសម្រាប់របាយការណ៍។", - "Store PO.Box": "ប្រអប់ប្រៃសណីយ៍ហាង", - "The store mail box number.": "លេខប្រអប់សំបុត្ររបស់ហាង។", - "Store Fax": "ទូរសារហាង ", - "The store fax number.": "លេខទូរសាររបស់ហាង។", - "Store Additional Information": "រក្សាទុកព័ត៌មានបន្ថែម", - "Store additional information.": "រក្សាទុកព័ត៌មានបន្ថែម។", - "Store Square Logo": "ស្លាកសញ្ញាហាងរាងការ៉េ", - "Choose what is the square logo of the store.": "ជ្រើសរើសអ្វីដែលជាឡូហ្គោការ៉េរបស់ហាង។", - "Store Rectangle Logo": "រក្សាទុកស្លាកសញ្ញាចតុកោណ", - "Choose what is the rectangle logo of the store.": "ជ្រើសរើសអ្វីដែលជាឡូហ្គោចតុកោណរបស់ហាង។", - "Define the default fallback language.": "កំណត់ភាសាជំនួសលំនាំដើម។", - "Define the default theme.": "កំណត់ប្រធានបទលំនាំដើម។", - "Currency": "រូបិយប័ណ្ណ", - "Currency Symbol": "និមិត្តសញ្ញារូបិយប័ណ្ណ", - "This is the currency symbol.": "នេះគឺជានិមិត្តសញ្ញារូបិយប័ណ្ណ។", - "Currency ISO": "រូបិយប័ណ្ណ ISO", - "The international currency ISO format.": "ទម្រង់ ISO រូបិយប័ណ្ណអន្តរជាតិ។", - "Currency Position": "ទីតាំងរូបិយប័ណ្ណ", - "Before the amount": "មុនបរិមាណ", - "After the amount": "បន្ទាប់ពីបរិមាណ", - "Define where the currency should be located.": "កំណត់កន្លែងដែលរូបិយប័ណ្ណគួរស្ថិតនៅ។", - "Preferred Currency": "រូបិយប័ណ្ណដែលពេញចិត្ត", - "ISO Currency": "រូបិយប័ណ្ណ ISO", - "Symbol": "និមិត្តសញ្ញា", - "Determine what is the currency indicator that should be used.": "កំណត់ថាតើអ្វីជាសូចនាកររូបិយប័ណ្ណដែលគួរប្រើ។", - "Currency Thousand Separator": "​បំបែករូបិយប័ណ្ណខ្នាត​មួយ​ពាន់", - "Define the symbol that indicate thousand. By default ": "កំណត់និមិត្តសញ្ញាដែលបង្ហាញពីពាន់។ តាម​លំនាំដើម ", - "Currency Decimal Separator": "សញ្ញាបំបែករូបិយប័ណ្ណ", - "Define the symbol that indicate decimal number. By default \".\" is used.": "កំណត់និមិត្តសញ្ញាដែលបង្ហាញពីលេខទសភាគ។ តាមលំនាំដើម \"\" ត្រូវបានប្រើ។", - "Currency Precision": "ភាពជាក់លាក់នៃរូបិយប័ណ្ណ", - "%s numbers after the decimal": "%s លេខបន្ទាប់ពីទសភាគ", - "Date Format": "ទម្រង់កាលបរិច្ឆេទ", - "This define how the date should be defined. The default format is \"Y-m-d\".": "វាកំណត់ពីរបៀបដែលកាលបរិច្ឆេទគួរតែត្រូវបានកំណត់។ ទម្រង់លំនាំដើមគឺ \"Y-m-d\" ។", - "Date Time Format": "ទម្រង់កាលបរិច្ឆេទ", - "This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".": "វាកំណត់ពីរបៀបដែលកាលបរិច្ឆេទ និងពេលវេលាគួរតែត្រូវបានធ្វើទ្រង់ទ្រាយ។ ទម្រង់លំនាំដើមគឺ \"Y-m-d H:i\" ។", - "Date TimeZone": "កាលបរិច្ឆេទ TimeZone", - "Determine the default timezone of the store. Current Time: %s": "កំណត់តំបន់ពេលវេលាលំនាំដើមរបស់ហាង។ ពេលវេលាបច្ចុប្បន្ន៖ %s", - "Registration": "ការកត់ត្រាទឹកប្រាក់", - "Registration Open": "បើកការកត់ត្រាទឹកប្រាក់", - "Determine if everyone can register.": "កំណត់ថាតើអ្នកគ្រប់គ្នាអាចចុះឈ្មោះបាន។", - "Registration Role": "តួនាទីចុះឈ្មោះ", - "Select what is the registration role.": "ជ្រើសរើសអ្វីដែលជាតួនាទីចុះឈ្មោះ។", - "Requires Validation": "ទាមទារការត្រួតពិនិត្យ", - "Force account validation after the registration.": "បង្ខំឱ្យមានសុពលភាពគណនីបន្ទាប់ពីការចុះឈ្មោះ។", - "Allow Recovery": "អនុញ្ញាតការស្តារឡើងវិញ", - "Allow any user to recover his account.": "អនុញ្ញាត​ឱ្យ​អ្នក​ប្រើ​ណា​ម្នាក់​យក​គណនី​របស់​គាត់​មក​វិញ។", - "Invoice Settings": "ការកំណត់វិក្កយបត្រ", - "Configure how invoice and receipts are used.": "កំណត់រចនាសម្ព័ន្ធរបៀបប្រើវិក្កយបត្រ និងបង្កាន់ដៃ។", - "Orders Settings": "ការកំណត់ការបញ្ជាទិញ", - "configure settings that applies to orders.": "កំណត់រចនាសម្ព័ន្ធដែលអនុវត្តចំពោះការបញ្ជាទិញ។", - "POS Settings": "ការកំណត់ប្រព័ន្ធការលក់", - "Configure the pos settings.": "កំណត់រចនាសម្ព័ន្ធការលក់។", - "Report Settings": "ការកំណត់នៃរបាយការណ៍", - "Configure the settings": "ការកំណត់រចនាសម្ព័ន្ធ", - "Wipes and Reset the database.": "លុប និងកំណត់មូលដ្ឋានទិន្នន័យឡើងវិញ។", - "Supply Delivery": "ការផ្គត់ផ្គង់", - "Configure the delivery feature.": "កំណត់មុខងារចែកចាយ។", - "Workers Settings": "ការកំណត់ Workers", - "Configure how background operations works.": "កំណត់រចនាសម្ព័ន្ធរបៀបដែលប្រតិបត្តិការផ្ទៃខាងក្រោយដំណើរការ។", - "Procurement Cash Flow Account": "គណនីលំហូរសាច់ប្រាក់នៃការទិញចូល", - "Every procurement will be added to the selected transaction account": "រាល់ការទិញទាំងអស់នឹងត្រូវបានបញ្ចូលទៅក្នុងគណនីប្រតិបត្តិការដែលបានជ្រើសរើស", - "Sale Cash Flow Account": "គណនីលំហូរសាច់ប្រាក់នៃការលក់", - "Every sales will be added to the selected transaction account": "រាល់ការលក់នឹងត្រូវបានបញ្ចូលទៅក្នុងគណនីប្រតិបត្តិការដែលបានជ្រើសរើស", - "Customer Credit Account (crediting)": "គណនីឥណទានអតិថិជន (ការផ្តល់ឥណទាន)", - "Every customer credit will be added to the selected transaction account": "រាល់ឥណទានរបស់អតិថិជននឹងត្រូវបានបញ្ចូលទៅក្នុងគណនីប្រតិបត្តិការដែលបានជ្រើសរើស", - "Customer Credit Account (debitting)": "គណនីឥណទានអតិថិជន (បំណុល)", - "Every customer credit removed will be added to the selected transaction account": "រាល់ឥណទានអតិថិជនដែលត្រូវបានដកចេញនឹងត្រូវបានបញ្ចូលទៅក្នុងគណនីប្រតិបត្តិការដែលបានជ្រើសរើស", - "Sales refunds will be attached to this transaction account": "ការសងប្រាក់វិញពីការលក់នឹងត្រូវបានភ្ជាប់ទៅគណនីប្រតិបត្តិការនេះ។", - "Stock Return Account (Spoiled Items)": "គណនីត្រឡប់មកស្តុក (មិនខូចខាត)", - "Stock return for spoiled items will be attached to this account": "ការប្រគល់ស្តុកមកវិញសម្រាប់វត្ថុដែលខូចនឹងត្រូវភ្ជាប់ជាមួយគណនីនេះ។", - "Disbursement (cash register)": "ការទូទាត់ (កត់ត្រាសាច់ប្រាក់)", - "Transaction account for all cash disbursement.": "គណនីប្រតិបត្តិការសម្រាប់ការទូទាត់សាច់ប្រាក់ទាំងអស់។", - "Liabilities": "បំណុល", - "Transaction account for all liabilities.": "គណនីប្រតិបត្តិការសម្រាប់បំណុលទាំងអស់។", - "Enable Reward": "បើករង្វាន់", - "Will activate the reward system for the customers.": "នឹងដំណើរការប្រព័ន្ធរង្វាន់សម្រាប់អតិថិជន។", - "Require Valid Email": "ទាមទារអ៊ីមែលដែលមានសុពលភាព", - "Will for valid unique email for every customer.": "នឹងសម្រាប់អ៊ីមែលតែមួយគត់ដែលមានសុពលភាពសម្រាប់អតិថិជនគ្រប់រូប។", - "Require Unique Phone": "ទាមទារទូរស័ព្ទមិនជាន់គ្នា", - "Every customer should have a unique phone number.": "អតិថិជនគ្រប់រូបគួរតែមានលេខទូរស័ព្ទមិនជាន់គ្នា។", - "Default Customer Account": "គណនីអតិថិជនលំនាំដើម", - "You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.": "អ្នកត្រូវតែបង្កើតអតិថិជនដែលការលក់នីមួយៗត្រូវបានកំណត់គុណលក្ខណៈនៅពេលដែលអតិថិជនដើរមិនចុះឈ្មោះ។", - "Default Customer Group": "ក្រុមអតិថិជនលំនាំដើម", - "Select to which group each new created customers are assigned to.": "ជ្រើសរើសក្រុមណាដែលអតិថិជនបង្កើតថ្មីនីមួយៗត្រូវបានចាត់តាំងទៅ។", - "Enable Credit & Account": "បើកដំណើរការឥណទាន និងគណនី", - "The customers will be able to make deposit or obtain credit.": "អតិថិជននឹងអាចដាក់ប្រាក់ ឬទទួលបានឥណទាន។", - "Receipts": "បង្កាន់ដៃ", - "Receipt Template": "គម្រូបង្កាន់ដៃ", - "Default": "លំនាំដើម", - "Choose the template that applies to receipts": "ជ្រើសរើសគំរូដែលអនុវត្តចំពោះបង្កាន់ដៃ", - "Receipt Logo": "ឡូហ្គោលលើបង្កាន់ដៃ", - "Provide a URL to the logo.": "ផ្តល់ URL របស់ឡូហ្គោល", - "Merge Products On Receipt/Invoice": "បញ្ចូលផលិតផលនៅលើបង្កាន់ដៃ/វិក្កយបត្រ", - "All similar products will be merged to avoid a paper waste for the receipt/invoice.": "ផលិតផលស្រដៀងគ្នាទាំងអស់នឹងត្រូវបានបញ្ចូលគ្នា ដើម្បីជៀសវាងកាកសំណល់ក្រដាសសម្រាប់បង្កាន់ដៃ/វិក្កយបត្រ។", - "Show Tax Breakdown": "បង្ហាញការវិភាគពន្ធ", - "Will display the tax breakdown on the receipt/invoice.": "នឹងបង្ហាញការវិភាគពន្ធលើបង្កាន់ដៃ/វិក្កយបត្រ។", - "Receipt Footer": "ផ្នែកខាងក្រោមបង្កាន់ដៃ", - "If you would like to add some disclosure at the bottom of the receipt.": "ប្រសិនបើអ្នកចង់បន្ថែមការបង្ហាញមួយចំនួននៅផ្នែកខាងក្រោមនៃបង្កាន់ដៃ។", - "Column A": "ជួរឈរ A", - "Available tags : ": "ស្លាកដែលមាន : ", - "{store_name}: displays the store name.": "{store_name}: បង្ហាញឈ្មោះហាង។", - "{store_email}: displays the store email.": "{store_email}: បង្ហាញអ៊ីមែលហាង។", - "{store_phone}: displays the store phone number.": "{store_phone}: បង្ហាញលេខទូរស័ព្ទហាង។", - "{cashier_name}: displays the cashier name.": "{cashier_name}: បង្ហាញឈ្មោះអ្នកគិតលុយ។", - "{cashier_id}: displays the cashier id.": "{cashier_id}: បង្ហាញលេខសម្គាល់អ្នកគិតលុយ។", - "{order_code}: displays the order code.": "{order_code}: បង្ហាញលេខកូដបញ្ជាទិញ។", - "{order_date}: displays the order date.": "{order_date}: បង្ហាញកាលបរិច្ឆេទនៃការបញ្ជាទិញ។", - "{order_type}: displays the order type.": "{order_type}: បង្ហាញប្រភេទការបញ្ជាទិញ។", - "{customer_name}: displays the customer name.": "{customer_name}: បង្ហាញឈ្មោះអតិថិជន។", - "{customer_email}: displays the customer email.": "{customer_email}: បង្ហាញអ៊ីមែលអតិថិជន។", - "{shipping_first_name}: displays the shipping first name.": "{shipping_first_name}: បង្ហាញឈ្មោះដំបូងដឹកជញ្ជូន។", - "{shipping_last_name}: displays the shipping last name.": "{shipping_last_name}: បង្ហាញនាមត្រកូលដឹកជញ្ជូន។", - "{shipping_phone}: displays the shipping phone.": "{shipping_phone}: បង្ហាញទូរស័ព្ទដឹកជញ្ជូន។", - "{shipping_address_1}: displays the shipping address_1.": "{shipping_address_1}: បង្ហាញការដឹកជញ្ជូន address_1.", - "{shipping_address_2}: displays the shipping address_2.": "{shipping_address_2}: បង្ហាញការដឹកជញ្ជូន address_2.", - "{shipping_country}: displays the shipping country.": "{shipping_country}: បង្ហាញប្រទេសដឹកជញ្ជូន។", - "{shipping_city}: displays the shipping city.": "{shipping_city}: បង្ហាញទីក្រុងដឹកជញ្ជូន។", - "{shipping_pobox}: displays the shipping pobox.": "{shipping_pobox}: បង្ហាញប្រអប់ PO ដឹកជញ្ជូន។", - "{shipping_company}: displays the shipping company.": "{shipping_company}: បង្ហាញក្រុមហ៊ុនដឹកជញ្ជូន។", - "{shipping_email}: displays the shipping email.": "{shipping_email}: បង្ហាញអ៊ីមែលដឹកជញ្ជូន។", - "{billing_first_name}: displays the billing first name.": "{billing_first_name}: បង្ហាញឈ្មោះដំបូងនៃការចេញវិក្កយបត្រ។", - "{billing_last_name}: displays the billing last name.": "{billing_last_name}: បង្ហាញនាមត្រកូលចេញវិក្កយបត្រ។", - "{billing_phone}: displays the billing phone.": "{billing_phone}: បង្ហាញទូរស័ព្ទចេញវិក្កយបត្រ។", - "{billing_address_1}: displays the billing address_1.": "{billing_address_1}: បង្ហាញវិក្កយបត្រ address_1.", - "{billing_address_2}: displays the billing address_2.": "{billing_address_2}: បង្ហាញវិក្កយបត្រ address_2.", - "{billing_country}: displays the billing country.": "{billing_country}: បង្ហាញប្រទេសចេញវិក្កយបត្រ។", - "{billing_city}: displays the billing city.": "{billing_city}: បង្ហាញទីក្រុងវិក័យប័ត្រ។", - "{billing_pobox}: displays the billing pobox.": "{billing_pobox}: បង្ហាញប្រអប់ POS ចេញវិក្កយបត្រ។", - "{billing_company}: displays the billing company.": "{billing_company}: បង្ហាញក្រុមហ៊ុនចេញវិក្កយបត្រ។", - "{billing_email}: displays the billing email.": "{billing_email}: បង្ហាញអ៊ីមែលចេញវិក្កយបត្រ។", - "Column B": "ជួរឈរ B", - "Available tags :": "ស្លាកដែលមាន :", - "Order Code Type": "ប្រភេទលេខកូដបញ្ជាទិញ", - "Determine how the system will generate code for each orders.": "កំណត់ពីរបៀបដែលប្រព័ន្ធនឹងបង្កើតកូដសម្រាប់ការបញ្ជាទិញនីមួយៗ។", - "Sequential": "លំដាប់លំដោយ", - "Random Code": "កូដចៃដន្យ", - "Number Sequential": "លេខលំដាប់", - "Allow Unpaid Orders": "អនុញ្ញាតឱ្យការបញ្ជាទិញដែលមិនបានបង់ប្រាក់", - "Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".": "នឹងរារាំងការបញ្ជាទិញមិនពេញលេញដែលត្រូវដាក់។ ប្រសិនបើឥណទានត្រូវបានអនុញ្ញាត ជម្រើសនេះគួរតែត្រូវបានកំណត់ទៅជា \"បាទ\" ។", - "Allow Partial Orders": "អនុញ្ញាតឱ្យការបញ្ជាទិញអាចបង់ដោយផ្នែក", - "Will prevent partially paid orders to be placed.": "នឹងរារាំងការបញ្ជាទិញដែលបានបង់ដោយផ្នែកដែលត្រូវបានដាក់។", - "Quotation Expiration": "តារាងតម្លៃដែលផុតកំណត់", - "Quotations will get deleted after they defined they has reached.": "សម្រង់នឹងត្រូវបានលុបបន្ទាប់ពីពួកគេបានកំណត់ថាពួកគេបានឈានដល់។", - "%s Days": "%s ថ្ងៃ", - "Features": "ពិសេស", - "Show Quantity": "បង្ហាញបរិមាណ", - "Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.": "នឹងបង្ហាញអ្នកជ្រើសរើសបរិមាណ ខណៈពេលជ្រើសរើសផលិតផល។ បើមិនដូច្នោះទេ បរិមាណលំនាំដើមត្រូវបានកំណត់ទៅ 1 ។", - "Merge Similar Items": "បញ្ចូលធាតុស្រដៀងគ្នា", - "Will enforce similar products to be merged from the POS.": "នឹង​បង្ខំ​ឱ្យ​ផលិតផល​ស្រដៀង​គ្នា​ត្រូវ​បាន​ច្របាច់បញ្ចូល​គ្នា​ពី​ម៉ាស៊ីនលក់។", - "Allow Wholesale Price": "អនុញ្ញាតឱ្យតម្លៃលក់ដុំ", - "Define if the wholesale price can be selected on the POS.": "កំណត់ថាតើតម្លៃលក់ដុំអាចត្រូវបានជ្រើសរើសនៅលើម៉ាស៊ីនលក់។", - "Allow Decimal Quantities": "អនុញ្ញាតឱ្យបរិមាណទសភាគ", - "Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.": "នឹងផ្លាស់ប្តូរក្តារចុចលេខសម្រាប់អនុញ្ញាតឱ្យទសភាគសម្រាប់បរិមាណ។ សម្រាប់តែផ្ទាំងលេខ \"លំនាំដើម\" ប៉ុណ្ណោះ។", - "Allow Customer Creation": "អនុញ្ញាតឱ្យបង្កើតអតិថិជន", - "Allow customers to be created on the POS.": "អនុញ្ញាតឱ្យអតិថិជនបង្កើតនៅលើម៉ាស៊ីនលក់។", - "Quick Product": "ផលិតផលរហ័ស", - "Allow quick product to be created from the POS.": "អនុញ្ញាតឱ្យបង្កើតផលិតផលរហ័សពីម៉ាស៊ីនលក់។", - "Quick Product Default Unit": "ឯកតាលំនាំដើមផលិតផលរហ័ស", - "Set what unit is assigned by default to all quick product.": "កំណត់​ឯកតា​ណា​ដែល​ត្រូវ​បាន​កំណត់​តាម​លំនាំដើម​ទៅ​គ្រប់​ផលិតផល​រហ័ស។", - "Editable Unit Price": "តម្លៃឯកតាដែលអាចកែសម្រួលបាន", - "Allow product unit price to be edited.": "អនុញ្ញាតឱ្យកែសម្រួលតម្លៃឯកតាផលិតផល។", - "Show Price With Tax": "បង្ហាផលិតផលជាមួយពន្ធ", - "Will display price with tax for each products.": "នឹងបង្ហាញតម្លៃជាមួយនឹងពន្ធសម្រាប់ផលិតផលនីមួយៗ។", - "Order Types": "ប្រភេទនៃការបញ្ជារទិញ", - "Control the order type enabled.": "គ្រប់គ្រងប្រភេទបញ្ជាដែលបានបើក។", - "Numpad": "ក្តារលេខ", - "Advanced": "កម្រិតខ្ពស់", - "Will set what is the numpad used on the POS screen.": "នឹងកំណត់នូវអ្វីដែលជាបន្ទះលេខដែលប្រើនៅលើអេក្រង់ម៉ាស៊ីនលក់។", - "Force Barcode Auto Focus": "បង្ខំ Barcode Auto Focus", - "Will permanently enable barcode autofocus to ease using a barcode reader.": "នឹង​បើក​ការ​ផ្ដោត​ស្វ័យ​ប្រវត្តិ​បាកូដ​ជា​អចិន្ត្រៃយ៍​ដើម្បី​ងាយស្រួល​ក្នុង​ការ​ប្រើ​កម្មវិធី​អាន​បាកូដ។", - "Hide Exhausted Products": "លាក់ផលិតផលដែលអស់ស្តុក", - "Will hide exhausted products from selection on the POS.": "នឹងលាក់ផលិតផលដែលអស់ស្តុកពីការជ្រើសរើសនៅលើម៉ាស៊ីនលក់។", - "Hide Empty Category": "លាក់​ប្រភេទ​ទទេ", - "Category with no or exhausted products will be hidden from selection.": "ប្រភេទដែលគ្មានផលិតផល ឬផលិតផលដែលអស់ស្តុកនឹងត្រូវបានលាក់ពីការជ្រើសរើស។", - "Bubble": "ពពុះ", - "Ding": "ឌីង", - "Pop": "ប៉ុប", - "Cash Sound": "សម្លេងសាច់ប្រាក់", - "Layout": "ទម្រង់បង្ហាញ", - "Retail Layout": "ទម្រង់លក់រាយ", - "Clothing Shop": "ទម្រង់ហាងសម្លៀកបំពាក់", - "POS Layout": "ទ្រង់ទ្រាយផ្ទាំងលក់", - "Change the layout of the POS.": "ផ្លាស់ប្តូរទ្រង់ទ្រាយប្រព័ន្ធលក់។", - "Sale Complete Sound": "សម្លេងពេលលក់បញ្ចប់", - "New Item Audio": "សម្លេងពេលបង្កើតផលិតផលថ្មី", - "The sound that plays when an item is added to the cart.": "សម្លេងរោរ៍នៅពេលដាក់ផលិតផលចូលទៅកាន់កន្ត្រកនៃការទិញ។", - "Printing": "បោះពុម្ភ", - "Printed Document": "បោះពុម្ភឯកសារ", - "Choose the document used for printing aster a sale.": "ជ្រើសរើសឯកសារដែលប្រើសម្រាប់ការបោះពុម្ពបន្ទាប់ពីការលក់។", - "Printing Enabled For": "ការបោះពុម្ពត្រូវបានបើកសម្រាប់", - "All Orders": "ការបញ្ជាទិញទាំងអស់។", - "From Partially Paid Orders": "ពីការបញ្ជាទិញដែលបានបង់ដោយផ្នែក", - "Only Paid Orders": "មានតែការបញ្ជាទិញដែលបានបង់ប្រាក់ប៉ុណ្ណោះ", - "Determine when the printing should be enabled.": "កំណត់កាបោះពុម្ភគួរបើកនៅពេលណា។", - "Printing Gateway": "មធ្យោបាយបោះពុម្ភ", - "Default Printing (web)": "មធ្យោបាយបោះពុម្ភលំនាំដើម (វេប)", - "Determine what is the gateway used for printing.": "កំណត់ថាតើមធ្យោបាយ", - "Enable Cash Registers": "បើកកត់ត្រាសាច់ប្រាក់", - "Determine if the POS will support cash registers.": "កំណត់ថាតើម៉ាស៊ីនឆូតកាតនឹងគាំទ្រការចុះឈ្មោះសាច់ប្រាក់ដែរឬទេ។", - "Cashier Idle Counter": "បញ្ជរគិតលុយទំនេរ", - "5 Minutes": "៥ នាទី", - "10 Minutes": "១០ នាទី", - "15 Minutes": "១៥ នាទី", - "20 Minutes": "២០ នាទី", - "30 Minutes": "៣០ នាទី", - "Selected after how many minutes the system will set the cashier as idle.": "បានជ្រើសរើសរយៈពេលប៉ុន្មាននាទីបន្ទាប់ ប្រព័ន្ធនឹងកំណត់អ្នកគិតលុយឱ្យនៅទំនេរ។", - "Cash Disbursement": "ការទូទាត់សាច់ប្រាក់", - "Allow cash disbursement by the cashier.": "អនុញ្ញាត​ឱ្យ​មាន​ការ​ទូទាត់​សាច់ប្រាក់​ដោយ​អ្នកគិតលុយ។", - "Cash Registers": "កត់ត្រាទឹកប្រាក់", - "Keyboard Shortcuts": "ក្តាចុចទម្រង់ខ្លី", - "Cancel Order": "បោះបង់ការបញ្ជាទិញ", - "Keyboard shortcut to cancel the current order.": "ក្តារចុចទម្រង់ខ្លី ដើម្បីបោះបង់ការបញ្ជាទិញបច្ចុប្បន្ន។", - "Hold Order": "ផ្អាកការបញ្ជាទិញ", - "Keyboard shortcut to hold the current order.": "ក្តារចុចទម្រង់ខ្លីដើម្បីរក្សាការបញ្ជាទិញបច្ចុប្បន្ន។", - "Keyboard shortcut to create a customer.": "ក្តារចុចទម្រង់ខ្លីដើម្បីបង្កើតអតិថិជន។", - "Proceed Payment": "បន្តការទូទាត់", - "Keyboard shortcut to proceed to the payment.": "ក្តារចុចទម្រង់ខ្លីដើម្បីបន្តទៅការទូទាត់។", - "Open Shipping": "បើកការដឹកជញ្ជូន", - "Keyboard shortcut to define shipping details.": "ក្តារចុចផ្លូវកាត់ដើម្បីកំណត់ព័ត៌មានលម្អិតនៃការដឹកជញ្ជូន។", - "Open Note": "បើកចំណាំ", - "Keyboard shortcut to open the notes.": "ក្តារចុចទម្រង់ខ្លីដើម្បីបើកចំណាំ។", - "Order Type Selector": "អ្នកជ្រើសរើសប្រភេទបញ្ជាទិញ", - "Keyboard shortcut to open the order type selector.": "ក្តារចុចទម្រង់ខ្លីដើម្បីបើកឧបករណ៍ជ្រើសរើសប្រភេទនៃការបញ្ជាទិញ។", - "Toggle Fullscreen": "បិទ/បើកពេញអេក្រង់", - "Keyboard shortcut to toggle fullscreen.": "ក្តារចុចទម្រង់ខ្លីដើម្បីបិទបើកពេញអេក្រង់។", - "Quick Search": "ស្វែងរករហ័ស", - "Keyboard shortcut open the quick search popup.": "ក្តារចុចទម្រង់ខ្លីដើម្បីបើកការស្វែងរករហ័សលេចឡើង។", - "Toggle Product Merge": "បិទ/បើក​​ការដាក់ផលិតផលបញ្ចូលគ្នា", - "Will enable or disable the product merging.": "នឹង បើក/បិទ ការដាក់ផលិតផលបញ្ចូលគ្នា", - "Amount Shortcuts": "ផ្លូវកាត់ចូលទឹកប្រាក់", - "The amount numbers shortcuts separated with a \"|\".": "ផ្លូវកាត់ចូលទៅទឹកប្រាក់ដែលបំបែកដោយ \"|\" ។", - "VAT Type": "ប្រភេទពន្ធ", - "Determine the VAT type that should be used.": "កំណត់ប្រភេទ ពន្ធអាករដែលគួរប្រើ។", - "Flat Rate": "អត្រាថេរ", - "Flexible Rate": "អត្រាបត់បែន", - "Products Vat": "ពន្ធអាករផលិតផល", - "Products & Flat Rate": "ផលិតផល និងអត្រាថេរ", - "Products & Flexible Rate": "ផលិតផល និងអត្រាបត់បែន", - "Define the tax group that applies to the sales.": "កំណត់ក្រុមពន្ធដែលអនុវត្តចំពោះការលក់។", - "Define how the tax is computed on sales.": "កំណត់ពីរបៀបដែលពន្ធត្រូវបានគណនាលើការលក់។", - "VAT Settings": "ការកំណត់ពន្ធ", - "Enable Email Reporting": "បើកការរាយការណ៍តាមអ៊ីមែល", - "Determine if the reporting should be enabled globally.": "កំណត់ថាតើការរាយការណ៍គួរតែត្រូវបានបើកជាសកល។", - "Supplies": "ផ្គត់ផ្គង់", - "Public Name": "ឈ្មោះសាធារណៈ", - "Define what is the user public name. If not provided, the username is used instead.": "កំណត់ឈ្មោះសាធារណៈអ្នកប្រើប្រាស់។ ប្រសិនបើ​មិន​បាន​ផ្តល់​ទេ ឈ្មោះ​អ្នក​ប្រើ​ត្រូវ​បាន​ប្រើ​ជំនួស​វិញ។", - "Enable Workers": "បើក Workers", - "Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".": "បើកដំណើរការសេវាកម្មផ្ទៃខាងក្រោយសម្រាប់ NexoPOS ។ ធ្វើឱ្យស្រស់ដើម្បីពិនិត្យមើលថាតើជម្រើសបានប្រែទៅជា \"បាទ/ចាស\" ដែរឬទេ។", - "Test": "តេស្ត", - "Best Cashiers": "អ្នកគិតលុយល្អបំផុត", - "Will display all cashiers who performs well.": "នឹងបង្ហាញអ្នកគិតលុយទាំងអស់ដែលធ្វើបានល្អ។", - "Best Customers": "អតិថិជនល្អបំផុត", - "Will display all customers with the highest purchases.": "នឹងបង្ហាញអតិថិជនទាំងអស់ជាមួយនឹងការទិញខ្ពស់បំផុត។", - "Expense Card Widget": "ផ្ទាំងវិចិត្រនៃការចំណាយ", - "Will display a card of current and overwall expenses.": "នឹងបង្ហាញកាតនៃការចំណាយបច្ចុប្បន្ន និងលើសជញ្ជាំង។", - "Incomplete Sale Card Widget": "ផ្ទាំងវិចិត្រលក់មិនពេញលេញ", - "Will display a card of current and overall incomplete sales.": "នឹងបង្ហាញកាតនៃការលក់បច្ចុប្បន្ន និងសរុបមិនពេញលេញ។", - "Orders Chart": "តារាងបញ្ជាទិញ", - "Will display a chart of weekly sales.": "នឹងបង្ហាញតារាងនៃការលក់ប្រចាំសប្តាហ៍។", - "Orders Summary": "សង្ខេបការបញ្ជាទិញ", - "Will display a summary of recent sales.": "នឹងបង្ហាញសេចក្តីសង្ខេបនៃការលក់ថ្មីៗ។", - "Profile": "គណនី", - "Will display a profile widget with user stats.": "នឹងបង្ហាញគណនីរបស់អ្នកប្រើប្រាស់។", - "Sale Card Widget": "ផ្ទាំងវិចិត្រនៃការលក់", - "Will display current and overall sales.": "នឹងបង្ហាញការលក់បច្ចុប្បន្ននិងជាទូរទៅ។", - "OK": "យល់ព្រម", - "Howdy, {name}": "សួស្តី, {name}", - "Return To Calendar": "ត្រឡប់ទៅប្រតិទិនវិញ", - "Sun": "អា", - "Mon": "ច", - "Tue": "អ", - "Wed": "ពុ", - "Thr": "ព្រ", - "Fri": "សុ", - "Sat": "ស", - "The left range will be invalid.": "ជួរ​ខាង​ឆ្វេង​នឹង​មិន​ត្រឹមត្រូវ។", - "The right range will be invalid.": "ជួរត្រឹមត្រូវនឹងមិនត្រឹមត្រូវ។", - "Close": "បិទ", - "No submit URL was provided": "មិនមានការស្នើរ URL ត្រូវបានផ្តល់", - "Okay": "យល់ព្រម", - "Go Back": "ត្រឡប់ក្រោយ", - "Save": "រក្សាទុក", - "Filters": "ច្រោះ", - "Has Filters": "មានការច្រោះ", - "{entries} entries selected": "បានជ្រើសរើស {entries}", - "Download": "ទាញយក", - "There is nothing to display...": "មិនមានអ្វីត្រូវបង្ហាញទេ...", - "Bulk Actions": "សកម្មភាពជាចង្កោម", - "Apply": "ដាក់ស្នើ", - "displaying {perPage} on {items} items": "កំពុងបង្ហាញ {perPage} នៃ {items}", - "The document has been generated.": "ឯកសារ​ត្រូវ​បាន​បង្កើត​ឡើង។", - "Unexpected error occurred.": "កំហុសដែលមិនបានរំពឹងទុកបានកើតឡើង។", - "Clear Selected Entries ?": "សម្អាតធាតុដែលបានជ្រើសរើស?", - "Would you like to clear all selected entries ?": "តើអ្នកចង់សម្អាតធាតុដែលបានជ្រើសរើសទាំងអស់ទេ?", - "Sorting is explicitely disabled on this column": "ការតម្រៀបត្រូវបានបិទយ៉ាងច្បាស់លាស់នៅលើជួរឈរនេះ", - "Would you like to perform the selected bulk action on the selected entries ?": "តើអ្នកចង់អនុវត្តសកម្មភាពភាគច្រើនដែលបានជ្រើសរើសនៅលើធាតុដែលបានជ្រើសរើសទេ?", - "No selection has been made.": "មិនមានការជ្រើសរើសត្រូវបានធ្វើឡើងទេ។", - "No action has been selected.": "គ្មានសកម្មភាពណាមួយត្រូវបានជ្រើសរើសទេ។", - "N/D": "N/D", - "Range Starts": "ចន្លោះចាប់ផ្តើម", - "Range Ends": "ចន្លោះបញ្ចប់", - "Click here to add widgets": "ចុចទីនេះដើម្បីបន្ថែមផ្ទាំងវិចិត្រ", - "An unpexpected error occured while using the widget.": "កំហុសដែលមិននឹកស្មានដល់បានកើតឡើង ខណៈពេលកំពុងប្រើផ្ទាំងវិចិត្រ។", - "Choose Widget": "ជ្រើសរើសផ្ទាំងវិចិត្រ", - "Select with widget you want to add to the column.": "ជ្រើសរើសផ្ទាំងវិចិត្រដែលអ្នកចង់បន្ថែមទៅជួរឈរ។", - "This field must contain a valid email address.": "ប្រអប់នេះត្រូវតែមានអាសយដ្ឋានអ៊ីមែលត្រឹមត្រូវ។", - "This field must be similar to \"{other}\"\"": "ប្រអប់នេះត្រូវតែស្រដៀងនឹង \"{other}\"\"", - "This field must have at least \"{length}\" characters\"": "ប្រអប់នេះត្រូវតែមានយ៉ាងហោចណាស់ \"{length}\" តួរ", - "This field must have at most \"{length}\" characters\"": "ប្រអប់នេះត្រូវតែមានច្រើនបំផុត \"{length}\" តួរ", - "This field must be different from \"{other}\"\"": "ប្រអប់នេះត្រូវតែខុសពី \"{other}\"\"", - "Nothing to display": "មិនមានអ្វីត្រូវបង្ហាញទេ", - "Enter": "ចូល", - "Search result": "លទ្ធផលស្វែងរក", - "Choose...": "ជ្រើសរើស...", - "The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.": "Component ${field.component} មិនអាចផ្ទុកបានទេ។ ត្រូវប្រាកដថាវាត្រូវបានចាក់នៅលើវត្ថុ nsExtraComponents ។", - "Search...": "ស្វែងរក...", - "An unexpected error occurred.": "កំហុសដែលមិននឹកស្មានដល់បានកើតឡើង។", - "Choose an option": "ជ្រើសរើសជម្រើសមួយ", - "Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".": "មិនអាចផ្ទុក component \"${action.component}\" ត្រូវប្រាកដថាវាត្រូវបានចាក់នៅលើវត្ថុ nsExtraComponents ។", - "Unamed Tab": "តាបគ្មានឈ្មោះ", - "+{count} other": "+{count} ផ្សេងទៀត", - "Unknown Status": "មិនស្គាល់ស្ថានភាព", - "The selected print gateway doesn't support this type of printing.": "ច្រកចេញចូលបោះពុម្ពដែលបានជ្រើសរើសមិនគាំទ្រប្រភេទនៃការបោះពុម្ពនេះទេ។", - "An error unexpected occured while printing.": "កំហុសដែលមិននឹកស្មានដល់បានកើតឡើង ខណៈពេលកំពុងបោះពុម្ព។", - "millisecond| second| minute| hour| day| week| month| year| decade| century| millennium": "មីលីវិនាទី| វិនាទី| នាទី| ម៉ោង | ថ្ងៃ| សប្តាហ៍ | ខែ | ឆ្នាំ | ទសវត្សរ៍| សតវត្ស| សហស្សវត្សរ៍", - "milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia": "មីលីវិនាទី| វិនាទី| នាទី| ម៉ោង | ថ្ងៃ| សប្តាហ៍ | ខែ | ឆ្នាំ | ទសវត្សរ៍| សតវត្ស| សហស្សវត្សរ៍", - "and": "និង", - "{date} ago": "{date} មុន", - "In {date}": "នៅ {date}", - "Password Forgotten ?": "ភ្លេចលេខសំងាត់មែនទេ?", - "Sign In": "ចូលប្រើប្រាស់", - "Register": "ចុះឈ្មោះ", - "Unable to proceed the form is not valid.": "មិន​អាច​បន្ត​ ដោយសារទម្រង់​បែបបទ​មិន​ត្រឹមត្រូវ។", - "An unexpected error occured.": "កំហុសដែលមិនបានរំពឹងទុកបានកើតឡើង។", - "Save Password": "រក្សាទុកលេខសម្ងាត់", - "Remember Your Password ?": "ចងចាំលេខសម្ងាត់របស់អ្នក?", - "Submit": "ដាក់ស្នើ", - "Already registered ?": "បានចុះឈ្មោះរួចហើយ?", - "Return": "ត្រឡប់ក្រោយ", - "Today": "ថ្ងៃនេះ", - "Clients Registered": "បានកត់ត្រាអតិថិជន", - "Commissions": "កម្រៃជើងសារ", - "Upload": "ផ្ទុកឡើង", - "No modules matches your search term.": "គ្មាន module ដែលត្រូវនឹងពាក្យស្វែងរករបស់អ្នកទេ។", - "Read More": "អាន​បន្ថែម", - "Enable": "បើក", - "Disable": "បិទ", - "Press \"/\" to search modules": "ចុច \"/\" ដើម្បីស្វែងរក modules", - "No module has been uploaded yet.": "មិន​ទាន់​មាន module ​ត្រូវ​បាន​ផ្ទុក​ឡើង​នៅ​ឡើយ​ទេ។", - "{module}": "{module}", - "Would you like to delete \"{module}\"? All data created by the module might also be deleted.": "តើអ្នកពិតជាចង់លុប \"{module}\"? ទិន្នន័យទាំងអស់ដែលបង្កើតឡើងដោយ module ក៏អាចត្រូវបានលុបផងដែរ។", - "Gallery": "វិចិត្រសាល", - "An error occured": "កំហុស​មួយ​បាន​កើត​ឡើង", - "Confirm Your Action": "បញ្ជាក់សកម្មភាពរបស់អ្នក", - "You\\'re about to delete selected resources. Would you like to proceed?": "អ្នកហៀបនឹងលុប resources ដែលបានជ្រើសរើស។ តើអ្នកចង់បន្តទេ?", - "Medias Manager": "គ្រប់គ្រងវិចិត្រសាល", - "Click Here Or Drop Your File To Upload": "ចុចទីនេះ ឬទម្លាក់ឯកសាររបស់អ្នកដើម្បីអាប់ឡូត", - "See Error": "មើលកំហុសឆ្គង", - "Your uploaded files will displays here.": "ឯកសារដែលបានអាប់ឡូតរបស់អ្នកនឹងបង្ហាញនៅទីនេះ។", - "Search Medias": "ស្វែងរកវិចិត្រសាល", - "Cancel": "បដិសេធ", - "Nothing has already been uploaded": "គ្មាន​អ្វី​ត្រូវ​បានអាប់ឡូតទេ​", - "Uploaded At": "អាប់ឡូតនៅ", - "Bulk Select": "ជ្រើសរើសជាចង្កោម", - "Previous": "ពីមុន", - "Next": "បន្ទាប់", - "Use Selected": "បើការជ្រើសរើស", - "Nothing to care about !": "គ្មានអ្វីត្រូវខ្វល់ទេ!", - "Clear All": "សម្អាតទាំងអស់", - "Would you like to clear all the notifications ?": "តើអ្នកចង់សម្អាតការជូនដំណឹងទាំងអស់ទេ?", - "Press "/" to search permissions": "ចុច "/" ដើម្បីស្វែងរកសិទ្ធប្រើប្រាស់", - "Permissions": "សិទ្ធិប្រើប្រាស់", - "Would you like to bulk edit a system role ?": "តើអ្នកចង់កែតម្រូវតួនាទីរបស់ប្រព័ន្ធជាចង្កោមទេ?", - "Save Settings": "រក្សារទុកការកំណត់", - "Payment Summary": "សង្ខេបបង់ប្រាក់", - "Order Status": "ស្ថានភាពការបញ្ជាទិញ", - "Processing Status": "ស្ថានភាពដំណើរការ", - "Refunded Products": "ផលិតផលដែលសងប្រាក់វិញ", - "All Refunds": "ការសងប្រាក់វិញទាំងអស់", - "Would you proceed ?": "តើអ្នកនឹងបន្តទេ?", - "The processing status of the order will be changed. Please confirm your action.": "ស្ថានភាពដំណើរការនៃការបញ្ជាទិញនឹងត្រូវបានផ្លាស់ប្តូរ។ សូមបញ្ជាក់សកម្មភាពរបស់អ្នក។", - "The delivery status of the order will be changed. Please confirm your action.": "ស្ថានភាពដឹកជញ្ជូននៃការបញ្ជាទិញនឹងត្រូវបានផ្លាស់ប្តូរ។ សូមបញ្ជាក់សកម្មភាពរបស់អ្នក។", - "Payment Method": "មធ្យោបាយបង់ប្រាក់", - "Before submitting the payment, choose the payment type used for that order.": "មុនពេលដាក់ស្នើការទូទាត់ សូមជ្រើសរើសប្រភេទការទូទាត់ដែលបានប្រើសម្រាប់ការបញ្ជាទិញនោះ។", - "Submit Payment": "ដាក់ស្នើការទូទាត់", - "Select the payment type that must apply to the current order.": "ជ្រើសរើសប្រភេទការទូទាត់ដែលត្រូវអនុវត្តចំពោះការបញ្ជាទិញបច្ចុប្បន្ន។", - "Payment Type": "ប្រភេទការបង់ប្រាក់", - "An unexpected error has occurred": "កំហុស​ដែល​មិន​រំពឹង​ទុក​បាន​កើត​ឡើង​", - "The form is not valid.": "ទម្រង់បែបបទមិនត្រឹមត្រូវ។", - "Update Instalment Date": "កែតម្រូវកាលបរិច្ឆេទបង់រំលោះ", - "Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.": "តើ​អ្នក​ចង់​សម្គាល់​ការ​ដំឡើង​នោះ​ថា​ដល់​កំណត់​ថ្ងៃ​នេះ​ទេ? ប្រសិនបើអ្នកបញ្ជាក់ការបង់រំលស់នឹងត្រូវបានសម្គាល់ថាបានបង់។", - "Create": "បង្កើត", - "Total :": "សរុប :", - "Remaining :": "នៅសល់ :", - "Instalments:": "បង់រំលោះ:", - "Add Instalment": "បន្ថែមការរំលោះ", - "This instalment doesn\\'t have any payment attached.": "ការបង់រំលស់នេះមិនមានភ្ជាប់ជាមួយការទូទាត់ទេ។", - "Would you like to create this instalment ?": "តើអ្នកចង់បង្កើតការបង់រំលោះនេះទេ?", - "Would you like to delete this instalment ?": "តើអ្នកចង់លុបការបង់រំលោះនេះទេ", - "Would you like to update that instalment ?": "តើអ្នកចង់កែតម្រូវការបង់រំលោះនេះទេ", - "Print": "បោះពុម្ភ", - "Store Details": "លម្អិតពីហាង", - "Cashier": "អ្នកគិតលុយ", - "Billing Details": "ព័ត៌មានលម្អិតអំពីការចេញវិក្កយបត្រ", - "Shipping Details": "ព័ត៌មានលម្អិតអំពីការដឹកជញ្ជូន", - "No payment possible for paid order.": "មិន​អាច​បង់​ប្រាក់​បាន​សម្រាប់​ការ​បញ្ជា​ទិញ​ដែល​បាន​បង់​ប្រាក់។", - "Payment History": "ប្រវត្តិការទូទាត់", - "Unknown": "មិនស្គាល់", - "You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?": "អ្នកទូទាត់ប្រាក់ចំនួន {amount} ការទូទាត់មិនអាចលុបចោលបានទេ។ តើអ្នកចង់បន្តទេ?", - "Refund With Products": "សងប្រាក់វិញជាមួយផលិតផល", - "Refund Shipping": "ការបង្វិលសងថ្លៃដឹកជញ្ជូន", - "Add Product": "បន្ថែមផលិតផល", - "Summary": "សង្ខេប", - "Payment Gateway": "ច្រកទូទាត់ប្រាក់", - "Screen": "ផ្ទាំងបង្ហាញ", - "Select the product to perform a refund.": "ជ្រើសរើសផលិតផលដើម្បីធ្វើការសងប្រាក់វិញ។", - "Please select a payment gateway before proceeding.": "សូមជ្រើសរើសច្រកបង់ប្រាក់មុនពេលបន្ត។", - "There is nothing to refund.": "មិនមានអ្វីត្រូវសងប្រាក់វិញទេ។", - "Please provide a valid payment amount.": "សូមផ្តល់ចំនួនទឹកប្រាក់ទូទាត់ត្រឹមត្រូវ។", - "The refund will be made on the current order.": "ការសងប្រាក់វិញនឹងត្រូវបានធ្វើឡើងតាមការបញ្ជាទិញបច្ចុប្បន្ន។", - "Please select a product before proceeding.": "សូមជ្រើសរើសផលិតផលមុនពេលបន្ត។", - "Not enough quantity to proceed.": "មិនមានបរិមាណគ្រប់គ្រាន់ដើម្បីបន្ត។", - "An error has occured while seleting the payment gateway.": "កំហុសបានកើតឡើងនៅពេលជ្រើសរើសច្រកផ្លូវបង់ប្រាក់។", - "Would you like to delete this product ?": "តើអ្នកចង់លុបផលិតផលនេះទេ?", - "You're not allowed to add a discount on the product.": "អ្នកមិនត្រូវបានអនុញ្ញាតឱ្យបន្ថែមការបញ្ចុះតម្លៃលើផលិតផលនោះទេ។", - "You're not allowed to add a discount on the cart.": "អ្នកមិនត្រូវបានអនុញ្ញាតឱ្យបន្ថែមការបញ្ចុះតម្លៃលើការលក់នោះទេ។", - "Unable to hold an order which payment status has been updated already.": "មិន​អាច​កាន់​ការ​បញ្ជា​ទិញ​ដែល​ស្ថានភាព​នៃ​ការ​ទូទាត់​ត្រូវ​បាន​ធ្វើ​បច្ចុប្បន្នភាព​រួច​ហើយ។", - "Pay": "បង់ប្រាក់", - "Order Type": "ប្រភេទបញ្ជាទិញ", - "Cash Register : {register}": "កត់ត្រាប្រាក់ : {register}", - "The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?": "ការបញ្ជាទិញបច្ចុប្បន្ននឹងត្រូវបានសម្អាត។ ប៉ុន្តែ​មិន​ត្រូវ​បាន​លុប​ទេ ប្រសិន​បើ​វា​នៅ​តែ​បន្ត។ តើអ្នកចង់បន្ត?", - "Cart": "កន្ត្រកទំនិញ", - "Comments": "មតិ", - "No products added...": "មិនមានផលិតផលត្រូវបានបន្ថែមទេ...", - "Price": "តម្លៃ", - "Tax Inclusive": "រួមបញ្ចូលពន្ធ", - "Apply Coupon": "អនុវត្តគូប៉ុង", - "You don't have the right to edit the purchase price.": "អ្នក​មិន​មាន​សិទ្ធិ​កែ​សម្រួល​តម្លៃ​ទិញ​ទេ។", - "Dynamic product can\\'t have their price updated.": "ផលិតផលប្រែលប្រួល មិនអាចធ្វើបច្ចុប្បន្នភាពតម្លៃរបស់ពួកគេបានទេ។", - "The product price has been updated.": "តម្លៃផលិតផលត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "The editable price feature is disabled.": "មុខងារតម្លៃដែលអាចកែសម្រួលបានត្រូវបានបិទ។", - "You\\'re not allowed to edit the order settings.": "អ្នកមិនត្រូវបានអនុញ្ញាតឱ្យកែសម្រួលការកំណត់ការបញ្ជាទិញទេ។", - "Unable to change the price mode. This feature has been disabled.": "មិនអាចផ្លាស់ប្តូរ mode តម្លៃបានទេ។ មុខងារនេះត្រូវបានបិទ។", - "Enable WholeSale Price": "បើកដំណើរការតម្លៃលក់ដុំ", - "Would you like to switch to wholesale price ?": "តើអ្នកចង់ប្តូរទៅលក់ដុំទេ?", - "Enable Normal Price": "បើកតម្លៃធម្មតា", - "Would you like to switch to normal price ?": "តើអ្នកចង់ប្តូរទៅតម្លៃធម្មតាទេ?", - "Search for products.": "ស្វែងរកផលិតផល។", - "Toggle merging similar products.": "បិទ/បើកការបញ្ចូលគ្នានូវផលិតផលស្រដៀងគ្នា។", - "Toggle auto focus.": "បិទ/បើក​ការ​ផ្ដោត​ស្វ័យ​ប្រវត្តិ។", - "Looks like there is either no products and no categories. How about creating those first to get started ?": "មើលទៅហាក់ដូចជាគ្មានផលិតផល និងគ្មានប្រភេទ។ តើធ្វើដូចម្តេចអំពីការបង្កើតវាដំបូងដើម្បីចាប់ផ្តើម?", - "Create Categories": "បង្កើតប្រភេទ", - "Current Balance": "តុល្យភាព​បច្ចុប្បន្ន", - "Full Payment": "ការទូទាត់ពេញលេញ", - "The customer account can only be used once per order. Consider deleting the previously used payment.": "គណនីអតិថិជនអាចប្រើបានតែម្តងគត់ក្នុងមួយការបញ្ជាទិញ។ ពិចារណាលុបការទូទាត់ដែលបានប្រើពីមុន។", - "Not enough funds to add {amount} as a payment. Available balance {balance}.": "មិនមានថវិកាគ្រប់គ្រាន់ដើម្បីបន្ថែមទេ {amount}ត្រូវប្រើប្រាស់ដើម្បីទូទាត់ សមតុល្យដែលមានគឺ{balance}.", - "Confirm Full Payment": "បញ្ជាក់ការទូទាត់ពេញលេញ", - "You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?": "អ្នកហៀបនឹងប្រើ {amount} ពីគណនីអតិថិជនដើម្បីធ្វើការទូទាត់។ តើអ្នកចង់បន្តទេ?", - "A full payment will be made using {paymentType} for {total}": "ការទូទាត់ពេញលេញនឹងត្រូវបានធ្វើឡើងដោយប្រើ {paymentType} សម្រាប់ {total}", - "You need to provide some products before proceeding.": "អ្នកត្រូវផ្តល់ផលិតផលមួយចំនួនមុនពេលដំណើរការ។", - "Unable to add the product, there is not enough stock. Remaining %s": "មិនអាចបន្ថែមផលិតផលបានទេ មិនមានស្តុកគ្រប់គ្រាន់ទេ។ នៅសល់ %s", - "An Error Has Occured": "កំហុសមួយបានកើតឡើង", - "An unexpected error has occured while loading the form. Please check the log or contact the support.": "កំហុសដែលមិននឹកស្មានដល់បានកើតឡើង ខណៈពេលកំពុងផ្ទុកទម្រង់។ សូមពិនិត្យមើលកំណត់ហេតុ ឬទាក់ទងផ្នែកជំនួយ។", - "Add Images": "បន្ថែមរូបភាព", - "Remove Image": "លុបរូបភាព", - "New Group": "ក្រុមថ្មី", - "Available Quantity": "បរិមាណដែលអាចប្រើបាន", - "We were not able to load the units. Make sure there are units attached on the unit group selected.": "យើងមិនអាចទាញយកឯកតាបានទេ។ ត្រូវប្រាកដថាមានឯកតាភ្ជាប់នៅលើក្រុមឯកតាដែលបានជ្រើសរើស។", - "Would you like to delete this group ?": "តើអ្នកចង់លុបក្រុមនេះទេ?", - "Your Attention Is Required": "សូមមេត្តាយកចិត្តទុកដាក់", - "The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?": "ឯកតាបច្ចុប្បន្នដែលអ្នកហៀបនឹងលុបមានឯកសារយោងលើមូលដ្ឋានទិន្នន័យ ហើយវាអាចនឹងទិញស្តុករួចហើយ។ ការលុបឯកសារយោងនោះនឹងលុបស្តុកដែលបានទិញចេញ។ តើអ្នកនឹងបន្តទេ?", - "Please select at least one unit group before you proceed.": "សូមជ្រើសរើសក្រុមឯកតាយ៉ាងហោចណាស់មួយ មុនពេលអ្នកបន្ត។", - "There shoulnd\\'t be more option than there are units.": "វាមិនគួរមានជម្រើសច្រើនជាងមានឯកតាទេ។", - "Unable to proceed, more than one product is set as featured": "មិនអាចបន្តបានទេ ផលិតផលច្រើនជាងមួយត្រូវបានកំណត់ជាផលិតផលពិសេស", - "Either Selling or Purchase unit isn\\'t defined. Unable to proceed.": "ទាំងផ្នែកលក់ ឬទិញមិនត្រូវបានកំណត់ទេ។ មិនអាចបន្តបានទេ។", - "Unable to proceed as one of the unit group field is invalid": "មិន​អាច​បន្ត​បាន​ទេ ដោយសារ​ប្រអប់ក្រុម​មួយ​ក្នុង​ចំណោម​ក្រុម​មិន​ត្រឹមត្រូវ។", - "Would you like to delete this variation ?": "តើអ្នកចង់លុបបំរែបំរួលនេះទេ?", - "Details": "លម្អិត", - "An error has occured": "កំហុសមួយបានកើតឡើង", - "Select the procured unit first before selecting the conversion unit.": "ជ្រើសរើសឯកតាដែលបានទិញជាមុនសិន មុននឹងជ្រើសរើសឯកតាបំប្លែង។", - "Learn More": "ស្វែង​យល់​បន្ថែម", - "Convert to unit": "បម្លែងឯកតា", - "An unexpected error has occured": "កំហុសដែលមិនបានរំពឹងទុកបានកើតឡើង", - "No result match your query.": "គ្មានលទ្ធផលត្រូវនឹងការចង់បានរបស់អ្នកទេ។", - "Unable to add product which doesn\\'t unit quantities defined.": "មិនអាចបន្ថែមផលិតផលដែលមិនកំណត់បរិមាណឯកតាបានទេ។", - "Unable to proceed, no product were provided.": "មិនអាចបន្តបានទេ គ្មានផលិតផលណាមួយត្រូវបានផ្តល់ជូនទេ។", - "Unable to proceed, one or more product has incorrect values.": "មិនអាចបន្តបានទេ ព្រោះផលិតផលមួយ ឬច្រើនមានតម្លៃមិនត្រឹមត្រូវ។", - "Unable to proceed, the procurement form is not valid.": "មិនអាចបន្តបានទេ ទម្រង់បែបបទទិញចូលមិនមានសុពលភាពទេ។", - "Unable to submit, no valid submit URL were provided.": "មិន​អាច​ដាក់​បញ្ជូន​បាន​ទេ គ្មាន URL ដាក់​ស្នើ​ត្រឹមត្រូវ​ ត្រូវ​បាន​ផ្តល់​ឱ្យ​ទេ។", - "{product}: Purchase Unit": "{product}: ចំនួនទិញចូល", - "The product will be procured on that unit.": "ផលិតផលនឹងត្រូវបានទិញនៅលើឯកតានោះ។", - "Unkown Unit": "ឯកតាមិនស្គាល់", - "Choose Tax": "ជ្រើសរើសពន្ធ", - "The tax will be assigned to the procured product.": "ពន្ធនឹងត្រូវបានកំណត់ទៅផលិតផលដែលបានទិញ។", - "No title is provided": "មិនមានចំណងជើងត្រូវបានផ្តល់ឱ្យទេ។", - "Show Details": "បង្ហាញព័ត៌មានលម្អិត", - "Hide Details": "លាក់ព័ត៌មានលម្អិត", - "Important Notes": "កំណត់ចំណាំសំខាន់ៗ", - "Stock Management Products.": "គ្រប់គ្រងស្តុកផលិតផល។", - "Doesn\\'t work with Grouped Product.": "មិនដំណើរការជាមួយផលិតផលជាក្រុមទេ។", - "SKU, Barcode, Name": "SKU, បាកូដ, ឈ្មោះ", - "Convert": "បម្លែង", - "Search products...": "ស្វែងរកផលិតផល...", - "Set Sale Price": "កំណត់តម្លៃលក់", - "Remove": "ដកចេញ", - "No product are added to this group.": "គ្មានផលិតផលត្រូវបានបញ្ចូលទៅក្នុងក្រុមនេះទេ។", - "Delete Sub item": "លុបធាតុរង", - "Would you like to delete this sub item?": "តើអ្នកចង់លុបធាតុរងនេះទេ?", - "Unable to add a grouped product.": "មិន​អាច​បន្ថែម​ផលិតផល​ដែល​បាន​ដាក់​ជា​ក្រុម។", - "Choose The Unit": "ជ្រើសរើសឯកតា", - "An unexpected error occurred": "កំហុសដែលមិនបានរំពឹងទុកបានកើតឡើង", - "Ok": "យល់ព្រម", - "Looks like no valid products matched the searched term.": "មើលទៅហាក់ដូចជាមិនមានផលិតផលត្រឹមត្រូវដែលត្រូវនឹងពាក្យដែលបានស្វែងរកនោះទេ។", - "The product already exists on the table.": "ផលិតផលមាននៅក្នុងបញ្ជីររួចហើយ។", - "This product doesn't have any stock to adjust.": "ផលិតផលនេះមិនមានស្តុកសម្រាប់កែតម្រូវទេ។", - "The specified quantity exceed the available quantity.": "បរិមាណដែលបានបញ្ជាក់លើសពីបរិមាណដែលមាន។", - "Unable to proceed as the table is empty.": "មិនអាចបន្តបានទេ ដោយសារតារាងទទេ។", - "The stock adjustment is about to be made. Would you like to confirm ?": "ការ​កែ​តម្រូវ​ស្តុក​នឹង​ត្រូវ​ធ្វើ​ឡើង តើអ្នកចង់បញ្ជាក់ទេ?", - "More Details": "លម្អិតបន្ថែម", - "Useful to describe better what are the reasons that leaded to this adjustment.": "ការពិពណ៌នាដែលជួយឱ្យកាន់តែងាយយល់ច្បាស់អំពីមូលហេតុដែលនាំទៅដល់ការកែតម្រូវនេះ។", - "The reason has been updated.": "ហេតុផលត្រូវបានធ្វើបច្ចុប្បន្នភាព។", - "Select Unit": "ជ្រើសរើសឯកតា", - "Select the unit that you want to adjust the stock with.": "ជ្រើសរើសឯកតាដែលអ្នកចង់កែតម្រូវស្តុកជាមួយ។", - "A similar product with the same unit already exists.": "ផលិតផលស្រដៀងគ្នាដែលមានឯកតាដូចគ្នាមានរួចហើយ។", - "Select Procurement": "ជ្រើសរើសការទិញចូល", - "Select the procurement that you want to adjust the stock with.": "ជ្រើសរើសការទិញចូលដែលអ្នកចង់កែតម្រូវស្តុកជាមួយ។", - "Select Action": "ជ្រើសរើសសកម្មភាព", - "Select the action that you want to perform on the stock.": "ជ្រើសរើសសកម្មភាពដែលអ្នកចង់អនុវត្តនៅលើស្តុក។", - "Would you like to remove this product from the table ?": "តើអ្នកចង់លុបផលិតផលនេះចេញពីបញ្ជីរទេ?", - "Would you like to remove the selected products from the table ?": "តើអ្នកចង់លុបផលិតផលដែលបានជ្រើសរើសចេញពីបញ្ជីរទេ?", - "Search": "ស្វែងរក", - "Search and add some products": "ស្វែងរក និងបន្ថែមផលិតផលមួយចំនួន", - "Unit:": "ឯកតា:", - "Operation:": "ប្រតិបត្តិការ:", - "Procurement:": "ការទិញចូល:", - "Reason:": "មូលហេតុ:", - "Provided": "បានផ្តល់", - "Not Provided": "មិនបានផ្តល់", - "Remove Selected": "លុបធាតុដែលបានជ្រើសរើស", - "Proceed": "ដំណើរការ", - "About Token": "អំពី Token", - "Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.": "Token ត្រូវបានប្រើដើម្បីផ្តល់នូវការចូលប្រើប្រាស់ប្រកបដោយសុវត្ថិភាពទៅកាន់ធនធាន NexoPOS ដោយមិនចាំបាច់ចែករំលែកឈ្មោះអ្នកប្រើប្រាស់ និងពាក្យសម្ងាត់ផ្ទាល់ខ្លួនរបស់អ្នក។\n នៅពេលដែលបានបង្កើត ពួកវានឹងមិនផុតកំណត់រហូតដល់អ្នកលុបចោលវាយ៉ាងជាក់លាក់។", - "Save Token": "រក្សាទុក Token", - "Generated Tokens": "បង្កើត Tokens", - "Created": "បានបង្កើត", - "Last Use": "ប្រើប្រាស់ចុងក្រោយ", - "Never": "មិនដែល", - "Expires": "ផុតកំណត់", - "Revoke": "ដកហូត", - "You haven\\'t yet generated any token for your account. Create one to get started.": "អ្នកមិនទាន់បានបង្កើតនិមិត្តសញ្ញាណាមួយសម្រាប់គណនីរបស់អ្នក។ សូមបង្កើតមួយដើម្បីចាប់ផ្តើម។", - "Token Name": "ឈ្មោះ Token", - "This will be used to identifier the token.": "វានឹងត្រូវបានប្រើដើម្បីកំណត់អត្តសញ្ញាណ Token", - "Unable to proceed, the form is not valid.": "មិនអាចបន្តបានទេ ដោយសារទម្រង់បែបបទ​មិន​ត្រឹមត្រូវ។", - "You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?": "អ្នក​ហៀប​នឹង​លុប​សញ្ញា​សម្ងាត់​ដែល​អាច​នឹង​កំពុង​ប្រើ​ដោយ​កម្មវិធី​ខាងក្រៅ។ ការលុបនឹងរារាំងកម្មវិធីនោះពីការចូលប្រើ API ។ តើអ្នកចង់បន្តទេ?", - "Load": "ទាញយក", - "Date Range : {date1} - {date2}": "ចន្លោះពេល : {date1} - {date2}", - "Document : Best Products": "ឯកសារ : ផលិតផលល្អបំផុត", - "By : {user}": "ដោយ : {user}", - "Progress": "វឌ្ឍនភាព", - "No results to show.": "មិនមានលទ្ធផលបង្ហាញ។", - "Start by choosing a range and loading the report.": "ចាប់ផ្តើមដោយជ្រើសរើសចន្លោះមួយ និងមើលរបាយការណ៍។", - "Sort Results": "តម្រៀបលទ្ធផល", - "Using Quantity Ascending": "តម្រៀបបរិមាណតាមលំដាប់", - "Using Quantity Descending": "តម្រៀបបរិមាណបញ្ជ្រាស", - "Using Sales Ascending": "តម្រៀបការលក់តាមលំដាប់", - "Using Sales Descending": "តម្រៀបការលក់បញ្ជ្រាស", - "Using Name Ascending": "តម្រៀបឈ្មោះតាមលំដាប់ (ក-អ)", - "Using Name Descending": "តម្រៀបឈ្មោះបញ្ជ្រាស (អ-ក)", - "Range : {date1} — {date2}": "ចន្លោះ : {date1} — {date2}", - "Document : Sale By Payment": "ឯកសារ : ការលក់តាមការបង់ប្រាក់", - "Search Customer...": "ស្វែងរកអតិថិជន...", - "Document : Customer Statement": "ឯកតា : អំពីអតិថិជន", - "Customer : {selectedCustomerName}": "អតិថិជន : {selectedCustomerName}", - "Due Amount": "ទឹកប្រាក់មិនទាន់ទូរទាត់", - "An unexpected error occured": "បញ្ហាមិនបានព្រៀងទុក បានកើតឡើង", - "Report Type": "ប្រភេទរបាយការណ៍", - "All Categories": "ប្រភេទទាំងអស់", - "All Units": "ឯកតាទាំងអស់", - "Date : {date}": "កាលបរិច្ឆេទ : {date}", - "Document : {reportTypeName}": "ឯកសារ : {reportTypeName}", - "Threshold": "កម្រិតចាប់ផ្ដើម", - "There is no product to display...": "មិនមានផលិតផលសម្រាប់បង្ហាញទេ...", - "Low Stock Report": "របាយការណ៍ស្តុកដែលសល់តិច", - "Select Units": "ជ្រើសរើសឯកតា", - "An error has occured while loading the units.": "កំហុសបានកើតឡើងខណៈពេលកំពុងផ្ទុកឯកតា។", - "An error has occured while loading the categories.": "កំហុសមួយបានកើតឡើងខណៈពេលកំពុងផ្ទុកប្រភេទ។", - "Document : Payment Type": "ឯកសារ :ប្រភេទការបង់ប្រាក់", - "Unable to proceed. Select a correct time range.": "មិនអាចបន្តបានទេ ដោយសារជ្រើសរើសចន្លោះពេលត្រឹមត្រូវ។", - "Unable to proceed. The current time range is not valid.": "មិនអាចបន្តបានទេ ដោយសារចន្លោះពេលបច្ចុប្បន្នមិនត្រឹមត្រូវ។", - "Document : Profit Report": "ឯកសារ : របាយការណ៍ចំនេញ", - "Profit": "គណនី", - "Filter by Category": "ច្រោះទិន្ន័យតាមប្រភេទ", - "Filter by Units": "ច្រោះទិន្ន័យតាមឯកតា", - "An error has occured while loading the categories": "កំហុសមួយបានកើតឡើងខណៈពេលកំពុងផ្ទុកប្រភេទ", - "An error has occured while loading the units": "កំហុសបានកើតឡើងខណៈពេលកំពុងទាញយកឯកតា", - "By Type": "តាមប្រភេទ", - "By User": "ដោយអ្នកប្រើប្រាស់", - "All Users": "អ្នកប្រើប្រាស់ទាំងអស់", - "By Category": "តាមប្រភេទ", - "All Category": "ប្រភេទទាំងអស់", - "Document : Sale Report": "ឯកសារ : របាយការណ៍លក់", - "Sales Discounts": "ការលក់បញ្ចុះតម្លៃ", - "Sales Taxes": "ពន្ធលើការលក់", - "Product Taxes": "ពន្ធផលិតផល", - "Discounts": "ការបញ្ចុះតម្លៃ", - "Categories Detailed": "ប្រភេទលម្អិត", - "Categories Summary": "សង្ខេបអំពីប្រភេទ", - "Allow you to choose the report type.": "អនុញ្ញាតឱ្យអ្នកជ្រើសរើសប្រភេទរបាយការណ៍។", - "Filter User": "ច្រោះទិន្ន័យអ្នកប្រើប្រាស់", - "Filter By Category": "ច្រោះទិន្ន័យតាមប្រភេទ", - "Allow you to choose the category.": "អនុញ្ញាតឱ្យអ្នកជ្រើសរើសប្រភេទ។", - "No user was found for proceeding the filtering.": "រកមិនឃើញអ្នកប្រើប្រាស់សម្រាប់បន្តការច្រោះទិន្នន័យ។", - "No category was found for proceeding the filtering.": "រកមិនឃើញប្រភេទសម្រាប់បន្តការច្រោះទិន្នន័យ។", - "Document : Sold Stock Report": "ឯកសារ : របាយការណ៍ស្តុកដែលបានលក់", - "Filter by Unit": "ច្រោះទិន្ន័យតាមឯកតា", - "Limit Results By Categories": "កំណត់លទ្ធផលតាមប្រភេទ", - "Limit Results By Units": "កំណត់លទ្ធផលដោយឯកតា", - "Generate Report": "បង្កើតរបាយការណ៍", - "Document : Combined Products History": "ឯកសារ : ប្រវត្តិផលិតផលរួមបញ្ចូលគ្នា", - "Ini. Qty": "Qty ដំបូង", - "Added Quantity": "បរិមាណដែលបានបន្ថែម", - "Add. Qty": "Qty ដែលបានបន្ថែម", - "Sold Quantity": "បរិមាណដែលបានលក់", - "Sold Qty": "Qty បានលក់", - "Defective Quantity": "បរិមាណដែលខូច", - "Defec. Qty": "បរិមាណដែលខូច", - "Final Quantity": "បរិមាណចុងក្រោយ", - "Final Qty": "Qty ចុងក្រោយ", - "No data available": "មិនមានទិន្នន័យទេ", - "Unable to load the report as the timezone is not set on the settings.": "មិនអាចទាញយករបាយការណ៍បានទេ ដោយសារតំបន់ពេលវេលាមិនត្រូវបានកំណត់នៅលើការកំណត់។", - "Year": "ឆ្នាំ", - "Recompute": "គណនាសាថ្មី", - "Document : Yearly Report": "ឯកសារ : របាយការណ៍ប្រចាំឆ្នាំ", - "Sales": "ការលក់", - "Expenses": "ចំណាយ", - "Income": "ចំណូល", - "January": "មករា", - "Febuary": "កុម្ភៈ", - "March": "មីនា", - "April": "មេសា", - "May": "ឧសភា", - "June": "មិនថុនា", - "July": "កក្កដា", - "August": "សីហា", - "September": "កញ្ញា", - "October": "តុលា", - "November": "វិច្ឆិកា", - "December": "ធ្នូ", - "Would you like to proceed ?": "តើអ្នកចង់បន្តទេ?", - "The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.": "របាយការណ៍នឹងត្រូវបានគណនាសម្រាប់ឆ្នាំបច្ចុប្បន្ន ការងារនឹងត្រូវបានបញ្ជូន ហើយអ្នកនឹងត្រូវបានជូនដំណឹងនៅពេលដែលវាត្រូវបានបញ្ចប់។", - "This form is not completely loaded.": "ទម្រង់បែបបទនេះមិនត្រូវបានទាញយកទាំងស្រុងទេ។", - "No rules has been provided.": "គ្មានច្បាប់ណាមួយត្រូវបានផ្តល់ជូនទេ។", - "No valid run were provided.": "គ្មានការរត់ត្រឹមត្រូវត្រូវបានផ្តល់ជូនទេ។", - "Unable to proceed, the form is invalid.": "មិនអាចបន្តបានទេ ទម្រង់បែបបទមិនត្រឹមត្រូវ។", - "Unable to proceed, no valid submit URL is defined.": "មិន​អាច​បន្ត​បាន​ទេ គ្មាន URL ដាក់​ស្នើ​ត្រឹមត្រូវ​ ត្រូវ​បាន​កំណត់។", - "No title Provided": "មិនបានផ្តល់ចំណងជើងទេ", - "Add Rule": "បន្ថែមលក្ខខណ្ឌ", - "Warning": "ការព្រមាន", - "Change Type": "ផ្លាស់ប្តូរប្រភេទ", - "Unable to edit this transaction": "មិនអាចកែសម្រួលប្រតិបត្តិការនេះបានទេ", - "This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.": "ប្រតិបត្តិការនេះត្រូវបានបង្កើតជាមួយនឹងប្រភេទដែលលែងមានទៀតហើយ។ ប្រភេទនេះលែងមានទៀតហើយ ដោយសារ NexoPOS មិនអាចអនុវត្តសំណើផ្ទៃខាងក្រោយបានទេ។", - "Save Transaction": "រក្សាទុកប្រតិបត្តិការ", - "While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.": "នៅពេលជ្រើសរើសប្រតិបត្តិការអង្គភាព ចំនួនទឹកប្រាក់ដែលបានកំណត់នឹងត្រូវបានគុណដោយអ្នកប្រើប្រាស់សរុបដែលបានកំណត់ទៅក្រុមអ្នកប្រើប្រាស់ដែលបានជ្រើសរើស។", - "Save Expense": "រក្សារទុកការចំណាយ", - "The transaction is about to be saved. Would you like to confirm your action ?": "ប្រតិបត្តិការនេះហៀបនឹងត្រូវបានរក្សាទុក។ តើអ្នកចង់បញ្ជាក់សកម្មភាពរបស់អ្នកទេ?", - "No configuration were choosen. Unable to proceed.": "មិនអាចបន្តបានទេ ដោយសារមិនមានការកំណត់រចនាសម្ព័ន្ធត្រូវបានជ្រើសរើស។", - "Conditions": "លក្ខខណ្ឌ", - "Unable to load the transaction": "មិនអាចទាញយកប្រតិបត្តិការបានទេ", - "You cannot edit this transaction if NexoPOS cannot perform background requests.": "អ្នកមិនអាចកែសម្រួលប្រតិបត្តិការនេះបានទេ ប្រសិនបើ NexoPOS មិនអាចអនុវត្តសំណើផ្ទៃខាងក្រោយបានទេ។", - "By proceeding the current for and all your entries will be cleared. Would you like to proceed?": "ដោយបន្តដំណើរការបច្ចុប្បន្ន និងធាតុទាំងអស់របស់អ្នកនឹងត្រូវបានសម្អាត។ តើអ្នកចង់បន្តទេ?", - "MySQL is selected as database driver": "MySQL ត្រូវបានជ្រើសរើសជា database driver", - "Please provide the credentials to ensure NexoPOS can connect to the database.": "សូមផ្តល់ព័ត៌មានបញ្ជាក់អត្តសញ្ញាណ ដើម្បីធានាថា NexoPOS អាចភ្ជាប់ទៅមូលដ្ឋានទិន្នន័យ។", - "Sqlite is selected as database driver": "Sqlite ត្រូវបានជ្រើសរើសជា as database driver", - "Make sure Sqlite module is available for PHP. Your database will be located on the database directory.": "ត្រូវប្រាកដថាម៉ូឌុល Sqlite មានសម្រាប់ PHP ។ មូលដ្ឋានទិន្នន័យរបស់អ្នកនឹងមានទីតាំងនៅលើថតទិន្នន័យ។", - "Checking database connectivity...": "កំពុងពិនិត្យមើលការតភ្ជាប់មូលដ្ឋានទិន្នន័យ...", - "OKAY": "យល់ព្រម", - "Driver": "Driver", - "Set the database driver": "សូមជ្រើសរើស database driver", - "Hostname": "Hostname", - "Provide the database hostname": "សូមផ្តល់ database hostname", - "Username required to connect to the database.": "Username គឺត្រូវការចាំបាច់ដើម្បីភ្ជាប់ទៅមូលដ្ឋានទិន្នន័យ។", - "The username password required to connect.": "username និងលេខសម្ងាត់ គឺត្រូវការចាំបាច់ដើម្បីភ្ជាប់។", - "Database Name": "ឈ្មោះ Database", - "Provide the database name. Leave empty to use default file for SQLite Driver.": "ផ្តល់ឈ្មោះមូលដ្ឋានទិន្នន័យ។ ទុកទទេដើម្បីប្រើឯកសារលំនាំដើមសម្រាប់កម្មវិធីបញ្ជា SQLite ។", - "Database Prefix": "បុព្វបទ Database", - "Provide the database prefix.": "សូមផ្តល់បុព្វបទ database.", - "Port": "Port", - "Provide the hostname port.": "សូមផ្តល់ hostname port.", - "NexoPOS is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.": "NexoPOS ឥឡូវ​នេះ​គឺ​អាច​តភ្ជាប់​ទៅ​មូលដ្ឋាន​ទិន្នន័យ​។ ចាប់ផ្តើមដោយបង្កើតគណនីអ្នកគ្រប់គ្រង និងផ្តល់ឈ្មោះទៅការដំឡើងរបស់អ្នក។ នៅពេលដំឡើងរួច ទំព័រនេះនឹងមិនអាចចូលប្រើបានទៀតទេ។", - "Install": "ដំឡើង", - "Application": "កម្មវិធី", - "That is the application name.": "នោះគឺជាឈ្មោះកម្មវិធី។", - "Provide the administrator username.": "សូមផ្តល់ username សម្រាប់អ្នកគ្រប់គ្រង។", - "Provide the administrator email.": "សូមផ្តល់អ៊ីមែលរបស់អ្នកគ្រប់គ្រង។", - "What should be the password required for authentication.": "អ្វីដែលគួរជាពាក្យសម្ងាត់ដែលត្រូវការសម្រាប់ការផ្ទៀងផ្ទាត់។", - "Should be the same as the password above.": "គួរតែដូចគ្នានឹងពាក្យសម្ងាត់ខាងលើ។", - "Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.": "សូមអរគុណចំពោះការប្រើប្រាស់ NexoPOS ដើម្បីគ្រប់គ្រងហាងរបស់អ្នក។ ផ្ទាំងជំនួយការដំឡើងនេះនឹងជួយអ្នកឱ្យដំណើរការ NexoPOS ក្នុងពេលឆាប់ៗនេះ។", - "Choose your language to get started.": "ជ្រើសរើសភាសារបស់អ្នកដើម្បីចាប់ផ្តើម។", - "Remaining Steps": "ជំហានដែលនៅសល់", - "Database Configuration": "កំណត់រចនាសម្ព័ន្ធមូលដ្ឋានទិន្នន័យ", - "Application Configuration": "កំណត់រចនាសម្ព័ន្ធកម្មវិធី", - "Language Selection": "ជ្រើសរើសភាសា", - "Select what will be the default language of NexoPOS.": "ជ្រើសរើសភាសាលំនាំដើមសម្រាប់កម្មវិធី NexoPOS", - "In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.": "ដើម្បីរក្សា NexoPOS ដំណើរការដោយរលូនជាមួយនឹងការអាប់ដេត យើងត្រូវបន្តទៅការផ្ទេរទិន្នន័យ។ តាមពិតអ្នកមិនចាំបាច់ធ្វើសកម្មភាពអ្វីទេ គ្រាន់តែរង់ចាំរហូតដល់ដំណើរការរួចរាល់ ហើយអ្នកនឹងត្រូវបានបញ្ជូនបន្ត។", - "Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.": "មើលទៅហាក់ដូចជាមានកំហុសមួយបានកើតឡើងកំឡុងពេលអាប់ដេត។ សូមធ្វើវាម្តងទៀតដើម្បីឲ្យកម្មវិធីអាចកែនូវកំហុស។", - "Please report this message to the support : ": "សូមរាយការណ៍សារនេះទៅកាន់ផ្នែកគាំទ្រ : ", - "Try Again": "ព្យាយាមម្តងទៀត", - "Updating": "កំពុងធ្វើបច្ចុប្បន្នភាព", - "Updating Modules": "កំពុងធ្វើបច្ចុប្បន្នភាព Modules", - "New Transaction": "ប្រតិបត្តិការថ្មី", - "Search Filters": "ស្វែងរកតាមការច្រោះ", - "Clear Filters": "បញ្ឈប់ការច្រោះ", - "Use Filters": "ប្រើការច្រោះ", - "Would you like to delete this order": "តើអ្នកចង់លុបការបញ្ជាទិញនេះទេ", - "The current order will be void. This action will be recorded. Consider providing a reason for this operation": "ការបញ្ជាទិញបច្ចុប្បន្ននឹងត្រូវទុកជាមោឃៈ។ សកម្មភាពនេះនឹងត្រូវបានកត់ត្រា។ ពិចារណាផ្តល់ហេតុផលសម្រាប់ប្រតិបត្តិការនេះ។", - "Order Options": "ជម្រើសបញ្ជាទិញ", - "Payments": "ការទូទាត់", - "Refund & Return": "សងប្រាក់ & ការដូរវិញ", - "available": "មាន", - "Order Refunds": "ការបញ្ជាទិញដែលសងប្រាក់វិញ", - "No refunds made so far. Good news right?": "មិន​មាន​ការ​សង​ប្រាក់​វិញ​ទេ​មក​ទល់​ពេល​នេះ។ មានដំណឹងល្អមែនទេ?", - "Input": "បញ្ចូល", - "Close Register": "បិទបញ្ជី", - "Register Options": "ជម្រើសការបើកបញ្ជី", - "Unable to open this register. Only closed register can be opened.": "មិនអាចបើកបញ្ជីបានទេ សូមបិទបញ្ជីជាមុនសិន។", - "Open Register : %s": "បើកបញ្ជី : %s", - "Open The Register": "បើកបញ្ជី", - "Exit To Orders": "ចាកចេញពីការបញ្ជារទិញ", - "Looks like there is no registers. At least one register is required to proceed.": "មើលទៅមិនមានការបើកបញ្ជីទេ។ យ៉ាងហោចណាស់គួរមានបើកបញ្ជីរមួយដើម្បីបន្ត។", - "Create Cash Register": "បង្កើតការបើកបញ្ជី", - "Load Coupon": "ទាញយកគូប៉ុង", - "Apply A Coupon": "អនុវត្តគូប៉ុង", - "Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.": "បញ្ចូលលេខកូដគូប៉ុងដែលគួរអនុវត្តទៅលើកម្មវិធីលក់។ ប្រសិនបើគូប៉ុងត្រូវបានចេញសម្រាប់អតិថិជន អតិថិជននោះត្រូវតែត្រូវបានជ្រើសរើសជាមុន។", - "Click here to choose a customer.": "ចុចទីនេះដើម្បីជ្រើសរើសអតិថិជន។", - "Loading Coupon For : ": "ទាញយកគូប៉ុងសម្រាប់ : ", - "Unlimited": "គ្មានដែនកំណត់", - "Not applicable": "មិនអាចអនុវត្តបាន", - "Active Coupons": "គូប៉ុងសកម្ម", - "No coupons applies to the cart.": "គ្មានគូប៉ុងអនុវត្តចំពោះការលក់នោះទេ។", - "The coupon is out from validity date range.": "គូប៉ុងមិនស្ថិតនៅក្នុងកាលបរិច្ឆេទដែលមានសុពលភាព។", - "This coupon requires products that aren\\'t available on the cart at the moment.": "គូប៉ុងនេះទាមទារផលិតផលដែលជាកម្មសិទ្ធិរបស់ប្រភេទជាក់លាក់ដែលមិនត្រូវបានរួមបញ្ចូលនៅពេលនេះ។", - "This coupon requires products that belongs to specific categories that aren\\'t included at the moment.": "គូប៉ុងនេះទាមទារផលិតផលដែលជាកម្មសិទ្ធិរបស់ប្រភេទជាក់លាក់ដែលមិនត្រូវបានរួមបញ្ចូលនៅពេលនេះ។", - "The coupon has applied to the cart.": "គូប៉ុងនេះត្រូវបានអនុវត្តទៅការលក់។", - "You must select a customer before applying a coupon.": "អ្នកត្រូវតែជ្រើសរើសអតិថិជនមុនពេលអនុវត្តគូប៉ុង។", - "The coupon has been loaded.": "គូប៉ុង​ត្រូវ​បាន​ទាញយក។", - "Use": "ប្រើប្រាស់", - "No coupon available for this customer": "មិនមានគូប៉ុងសម្រាប់អតិថិជននេះទេ", - "Select Customer": "ជ្រើសរើសអតិថិជន", - "Selected": "បានជ្រើសរើស", - "No customer match your query...": "គ្មានអតិថិជនណាដែលត្រូវនឹងការស្នើររបស់អ្នកទេ...", - "Create a customer": "បង្កើតអតិថិជន", - "Too many results.": "លទ្ធផលបង្ហាញច្រើនពេក។", - "New Customer": "អតិថិជន​ថ្មី", - "Save Customer": "រក្សាទុកអតិថិជន", - "Not Authorized": "មិនត្រូវបានអនុញ្ញាត", - "Creating customers has been explicitly disabled from the settings.": "ការបង្កើតអតិថិជនត្រូវបានបិទពីការកំណត់។", - "No Customer Selected": "មិនមានអតិថិជនជ្រើសរើសទេ", - "In order to see a customer account, you need to select one customer.": "ដើម្បីមើលគណនីអតិថិជន អ្នកត្រូវជ្រើសរើសអតិថិជនម្នាក់។", - "Summary For": "សង្ខេបសម្រាប់", - "Purchases": "ការទិញ", - "Owed": "ជំពាក់", - "Wallet Amount": "ទឹកប្រាក់ក្នុងកាបូប", - "Last Purchases": "ការទិញចុងក្រោយ", - "No orders...": "មិនមានការបញ្ជាទិញទេ...", - "Transaction": "ប្រតិបត្តិការ", - "No History...": "គ្មានប្រវត្តិ...", - "No coupons for the selected customer...": "គ្មានគូប៉ុងសម្រាប់អតិថិជនដែលបានជ្រើសរើសទេ...", - "Usage :": "របៀបប្រើប្រាស់ :", - "Code :": "កូដ :", - "Use Coupon": "ប្រើគូប៉ុង", - "No rewards available the selected customer...": "No rewards available the selected customer...", - "Account Transaction": "Account Transaction", - "Removing": "Removing", - "Refunding": "Refunding", - "Unknow": "Unknow", - "An error occurred while opening the order options": "កំហុសបានកើតឡើងនៅពេលបើកជម្រើសនៃការបញ្ជាទិញ", - "Use Customer ?": "កំណត់អតិថិជន?", - "No customer is selected. Would you like to proceed with this customer ?": "គ្មានអតិថិជនត្រូវបានជ្រើសរើសទេ។ តើអ្នកចង់បន្តជាមួយអតិថិជននេះទេ?", - "Change Customer ?": "ផ្លាស់ប្តូរអតិថិជន?", - "Would you like to assign this customer to the ongoing order ?": "តើ​អ្នក​ចង់​កំណត់​អតិថិជន​នេះ​ទៅ​នឹង​ការ​បញ្ជា​ទិញ​ដែល​កំពុង​បន្ត​ដែរ​ឬ​ទេ?", - "Product Discount": "បញ្ចុះលើតម្លៃផលិតផល", - "Cart Discount": "បញ្ចុះតម្លៃការលក់", - "Order Reference": "សេចក្តីយោងការបញ្ជាទិញ", - "The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.": "ការបញ្ជាទិញបច្ចុប្បន្ននឹងត្រូវផ្អាក។ អ្នកអាចទាញយកការបញ្ជាទិញនេះពីប៊ូតុងបញ្ជាទិញដែលមិនទាន់សម្រេច។ ការផ្តល់ឯកសារយោងទៅវាអាចជួយអ្នកក្នុងការកំណត់អត្តសញ្ញាណការបញ្ជាទិញកាន់តែលឿន។", - "Confirm": "បញ្ជាក់", - "Layaway Parameters": "ប៉ារ៉ាមែត្រនៃការកាត់ស្តុក", - "Minimum Payment": "ការទូទាត់អប្បបរមា", - "Instalments & Payments": "ការបង់រំលោះ និងការទូទាត់", - "The final payment date must be the last within the instalments.": "កាលបរិច្ឆេទទូទាត់ចុងក្រោយត្រូវតែជាកាលបរិច្ឆេទចុងក្រោយក្នុងការបង់រំលោះ។", - "There is no instalment defined. Please set how many instalments are allowed for this order": "មិន​មាន​ការបង់រំលោះត្រូវបាន​កំណត់។ សូមកំណត់ចំនួនការបង់រំលោះដែលត្រូវបានអនុញ្ញាតសម្រាប់ការបញ្ជាទិញនេះ។", - "Skip Instalments": "រំលងការបង់រំលោះ", - "You must define layaway settings before proceeding.": "អ្នក​ត្រូវ​តែ​កំណត់​ការ​កាត់ស្តុក មុន​នឹងអាច​បន្ត។", - "Please provide instalments before proceeding.": "សូមផ្តល់ការបង់រំលស់មុននឹងអាចបន្ត។", - "Unable to process, the form is not valid": "មិន​អាច​ដំណើរការ​បាន ព្រោះទម្រង់បែបបទ​នេះ​មិន​ត្រឹមត្រូវ។", - "One or more instalments has an invalid date.": "ការបង់រំលោះមួយ ឬច្រើនមានកាលបរិច្ឆេទមិនត្រឹមត្រូវ។", - "One or more instalments has an invalid amount.": "ការបង់រំលោះមួយ ឬច្រើនមានទឹកប្រាក់មិនត្រឹមត្រូវ។", - "One or more instalments has a date prior to the current date.": "ការបង់រំលោះមួយ ឬច្រើនបានបង់មុនកាលបរិច្ឆេទជាក់លាក់ដែលបានកំណត់។", - "The payment to be made today is less than what is expected.": "ការទូទាត់ដែលត្រូវធ្វើឡើងនៅថ្ងៃនេះគឺតិចជាងអ្វីដែលរំពឹងទុក។", - "Total instalments must be equal to the order total.": "ការបង់រំលោះសរុបត្រូវតែស្មើនឹងចំនួនសរុបនៃការបញ្ជាទិញ។", - "Order Note": "កំណត់ចំណាំនៃការបញ្ជាទិញ", - "Note": "សម្គាល់", - "More details about this order": "ព័ត៌មានលម្អិតបន្ថែមអំពីការបញ្ជាទិញនេះ។", - "Display On Receipt": "បង្ហាញនៅលើបង្កាន់ដៃ", - "Will display the note on the receipt": "នឹងបង្ហាញកំណត់ចំណាំនៅលើបង្កាន់ដៃ", - "Open": "បើក", - "Order Settings": "កំណត់ការបញ្ជាទិញ", - "Define The Order Type": "កំណត់ប្រភេទនៃការបញ្ជាទិញ", - "No payment type has been selected on the settings. Please check your POS features and choose the supported order type": "មិនមានប្រភេទការទូទាត់ត្រូវបានជ្រើសរើសនៅលើការកំណត់ទេ។ សូមពិនិត្យមើលមុខងារ POS របស់អ្នក ហើយជ្រើសរើសប្រភេទការបញ្ជាទិញដែលគាំទ្រ", - "Configure": "កំណត់រចនាសម្ព័ន្ធ", - "Select Payment Gateway": "ជ្រើសរើសច្រកទូទាត់", - "Gateway": "ច្រកមធ្យោបាយ", - "Payment List": "បញ្ជីបង់ប្រាក់", - "List Of Payments": "បញ្ជីនៃការទូទាត់", - "No Payment added.": "គ្មានការបង់ប្រាក់បន្ថែមទេ។", - "Layaway": "កាត់ស្តុក", - "On Hold": "រង់ចាំ", - "Nothing to display...": "គ្មានអ្វីត្រូវបង្ហាញទេ...", - "Product Price": "តម្លៃផលិតផល", - "Define Quantity": "កំណត់បរិមាណ", - "Please provide a quantity": "សូមបញ្ចូលបរិមាណ", - "Product / Service": "ផលិតផល/សេវាកម្ម", - "Unable to proceed. The form is not valid.": "មិនអាចបន្តបានទេ ដោយសារទម្រង់បែបបទ​មិន​ត្រឹមត្រូវ។", - "Provide a unique name for the product.": "ផ្តល់ឈ្មោះសម្រាប់ផលិតផលដោយមិនជាន់គ្នា។", - "Define the product type.": "កំណត់ប្រភេទផលិតផល។", - "Normal": "ធម្មតា", - "Dynamic": "មិនទៀងទាត់", - "In case the product is computed based on a percentage, define the rate here.": "ក្នុងករណីដែលផលិតផលត្រូវបានគណនាដោយផ្អែកលើភាគរយ សូមកំណត់អត្រានៅទីនេះ។", - "Define what is the sale price of the item.": "កំណត់តម្លៃលក់របស់ទំនិញ។", - "Set the quantity of the product.": "កំណត់បរិមាណផលិតផល។", - "Assign a unit to the product.": "កំណត់ឯកតាសម្រាប់ផលិតផល។", - "Define what is tax type of the item.": "កំណត់អ្វីដែលជាប្រភេទពន្ធនៃទំនិញ។", - "Choose the tax group that should apply to the item.": "ជ្រើសរើសក្រុមពន្ធដែលគួរអនុវត្តចំពោះមុខទំនិញ។", - "Search Product": "ស្វែងរកផលិតផល", - "There is nothing to display. Have you started the search ?": "មិនមានអ្វីត្រូវបង្ហាញទេ។ តើអ្នកបានចាប់ផ្តើមស្វែងរកហើយឬនៅ?", - "Unable to add the product": "មិនអាចបន្ថែមផលិតផលបានទេ។", - "The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?": "ផលិតផល \"{product}\" មិនអាចត្រូវបានបន្ថែមពីកន្លែងស្វែងរកទេ ដោយសារ \"ការតាមដានត្រឹមត្រូវ\" ត្រូវបានបើក។ តើអ្នកចង់ស្វែងយល់បន្ថែមទេ?", - "No result to result match the search value provided.": "គ្មានលទ្ធផលដែលត្រូវនឹងអ្វីដែលអ្នកចង់ស្វែងរក។", - "Shipping & Billing": "ការដឹកជញ្ជូន និងវិក័យប័ត្រ", - "Tax & Summary": "ពន្ធ និងសង្ខេប", - "No tax is active": "មិនមានពន្ធសកម្មទេ", - "Select Tax": "ជ្រើសរើសពន្ធ", - "Define the tax that apply to the sale.": "កំណត់ពន្ធដែលអនុវត្តចំពោះការលក់។", - "Define how the tax is computed": "កំណត់ពីរបៀបដែលពន្ធត្រូវបានគណនា", - "{product} : Units": "{product} : ឯកតា", - "This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.": "ផលិតផលនេះមិនមានឯកតាកំណត់សម្រាប់លក់ទេ។ ត្រូវប្រាកដថាវាមានហោចណាស់មួយឯកតា។", - "The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.": "ឯកតាដែលភ្ជាប់ជាមួយផលិតផលនេះបាត់ ឬមិនបានកត់ត្រា។ សូមពិនិត្យមើលផ្ទាំង \"ឯកតា\" សម្រាប់ផលិតផលនេះ។", - "Define when that specific product should expire.": "កំណត់ពេលវេលាជាក់លាក់ដែលផលិតផលនោះផុតកំណត់។", - "Renders the automatically generated barcode.": "បង្ហាញលេខកូដដែលបានបង្កើតដោយស្វ័យប្រវត្តិ។", - "Adjust how tax is calculated on the item.": "កែតម្រូវរបៀបដែលពន្ធត្រូវបានគណនាលើទំនិញ។", - "Previewing :": "កំពុងបង្ហាញ :", - "Units & Quantities": "ឯកតានិងបរិមាណ", - "Select": "ជ្រើសរើស", - "Search for options": "ស្វែងរកជម្រើស", - "This QR code is provided to ease authentication on external applications.": "កូដ QR នេះត្រូវបានផ្តល់ជូនដើម្បីសម្រួលការផ្ទៀងផ្ទាត់លើកម្មវិធីពីខាងក្រៅ។", - "The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.": "និមិត្តសញ្ញា API ត្រូវបានបង្កើត។ ត្រូវប្រាកដថាចម្លងកូដនេះនៅកន្លែងដែលមានសុវត្ថិភាព ព្រោះវានឹងត្រូវបានបង្ហាញតែម្តងប៉ុណ្ណោះ។\n ប្រសិនបើអ្នកស្រាយសញ្ញាសម្ងាត់នេះ អ្នកនឹងត្រូវដកហូតវា ហើយបង្កើតលេខកូដថ្មី។", - "Copy And Close": "ចម្លងនិងបិទ", - "The customer has been loaded": "អតិថិជនត្រូវបានទាញយក", - "Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.": "មិនអាចជ្រើសរើសអតិថិជនលំនាំដើមបានទេ។ មើលទៅអតិថិជនលែងមានទៀតហើយ។ ពិចារណាផ្លាស់ប្តូរអតិថិជនលំនាំដើមនៅលើការកំណត់។", - "Some products has been added to the cart. Would youl ike to discard this order ?": "ផលិតផលមួយចំនួនត្រូវបានបញ្ចូលទៅក្នុងការលក់។ តើអ្នកចង់បោះបង់ការលក់នេះទេ?", - "This coupon is already added to the cart": "ប័ណ្ណនេះត្រូវបានបញ្ចូលទៅក្នុងការលក់រួចហើយ", - "Unable to delete a payment attached to the order.": "មិនអាចលុបការទូទាត់ដែលភ្ជាប់ជាមួយការបញ្ជាទិញបានទេ។", - "No tax group assigned to the order": "មិន​មាន​ក្រុម​ពន្ធ​ត្រូវ​បានត្រូវដាក់​ទៅ​ក្នុង​ការ​បញ្ជា​ទិញទេ​", - "The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.": "The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.", - "Before saving this order, a minimum payment of {amount} is required": "មុនពេលរក្សាទុកការបញ្ជាទិញនេះ គឺត្រូវបានទាមទារការទូទាត់អប្បបរមាចំនួន {amount}", - "Unable to proceed": "មិនអាចបន្តបានទេ", - "Layaway defined": "កាត់ស្តុកផលិតផលត្រូវបានកំណត់", - "Initial Payment": "ការទូទាត់ដំបូង", - "In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?": "ដើម្បីបន្ត ការបង់ប្រាក់ដំបូងចំនួន {amount} ត្រូវបានទាមទារសម្រាប់ប្រភេទការទូទាត់ដែលបានជ្រើសរើស \"{paymentType}\" ។ តើអ្នកចង់បន្តទេ?", - "The request was canceled": "សំណើត្រូវបានលុបចោល", - "Partially paid orders are disabled.": "ការបញ្ជាទិញដែលបានបង់ដោយផ្នែកត្រូវបានបិទ។", - "An order is currently being processed.": "ការបញ្ជាទិញកំពុងត្រូវបានដំណើរការ។", - "An error has occurred while computing the product.": "កំហុសបានកើតឡើងខណៈពេលកំពុងគណនាផលិតផល។", - "The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.": "គូប៉ុង \"%s\" ត្រូវ​បាន​យក​ចេញ​ពី​ការលក់ ព្រោះ​លក្ខខណ្ឌ​តម្រូវ​របស់​វា​មិន​ត្រូវ​បាន​បំពេញ​ ឬអស់សុពលភាព។", - "The discount has been set to the cart subtotal.": "ការបញ្ចុះតម្លៃត្រូវបានកំណត់ទៅជាសរុបរងនៃផលិតផលដែលត្រូវលក់។", - "An unexpected error has occurred while fecthing taxes.": "កំហុសដែលមិននឹកស្មានដល់បានកើតឡើង ខណៈពេលកំពុងគណនាពន្ធ។", - "Order Deletion": "ការលុបការបញ្ជាទិញ", - "The current order will be deleted as no payment has been made so far.": "ការ​បញ្ជា​ទិញ​បច្ចុប្បន្ន​នឹង​ត្រូវ​បាន​លុប ព្រោះ​មិន​ទាន់​មាន​ការ​ទូទាត់​ប្រាក់​មក​ដល់​ពេល​នេះ​ទេ។", - "Void The Order": "លុបចោលការបញ្ជាទិញ", - "The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.": "ការបញ្ជាទិញបច្ចុប្បន្ននឹងត្រូវទុកជាមោឃៈ។ វានឹងលុបចោលប្រតិបត្តិការ ប៉ុន្តែការបញ្ជាទិញនឹងមិនត្រូវបានលុបទេ។ ព័ត៌មានលម្អិតបន្ថែមអំពីប្រតិបត្តិការនេះនឹងត្រូវបានតាមដាននៅលើរបាយការណ៍។ ពិចារណាផ្តល់ហេតុផលនៃប្រតិបត្តិការនេះ។", - "Unable to void an unpaid order.": "មិនអាចលុបចោលការបញ្ជាទិញដែលមិនបានបង់ប្រាក់។", - "No result to display.": "គ្មានលទ្ធផលដែលត្រូវបង្ហាញ។", - "Well.. nothing to show for the meantime.": "អញ្ចឹង.. គ្មានអ្វីត្រូវបង្ហាញសម្រាប់ពេលនេះទេ។", - "Well.. nothing to show for the meantime": "អញ្ចឹង.. គ្មានអ្វីត្រូវបង្ហាញសម្រាប់ពេលនេះទេ។", - "Incomplete Orders": "ការបញ្ជាទិញមិនពេញលេញ", - "Recents Orders": "ការបញ្ជាទិញថ្មីៗ", - "Weekly Sales": "ការលក់ប្រចាំសប្តាហ៍", - "Week Taxes": "ពន្ធជាសប្តាហ៍", - "Net Income": "ប្រាក់ចំណូលសុទ្ធ", - "Week Expenses": "ចំនាយជាសប្តាហ៍", - "Current Week": "សប្តាហ៍នេះ", - "Previous Week": "សប្តាហ៍មុន", - "Loading...": "កំពុងដំណើរការ...", - "Logout": "ចាកចេញ", - "Unnamed Page": "ទំព័រគ្មានឈ្មោះ", - "No description": "មិន​មាន​ការ​ពិពណ៌នា​", - "Invalid Error Message": "សារដំណឹងនៃកំហុសឆ្គងមិនត្រឹមត្រូវ", - "{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List": "បញ្ជី {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}", - "Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.": "បង្ហាញ {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} ទាំងអស់។", - "No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered": "គ្មាន {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} ត្រូវបានកត់ត្រា។", - "Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}": "បន្ថែម {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} ថ្មី", - "Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}": "បង្កើត {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} ថ្មី", - "Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.": "កត់ត្រា {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} និងរក្សាទុក។", - "Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}": "កែតម្រូវ {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}", - "Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.": "កែតម្រូវ {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.", - "Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}": "ត្រឡប់ទៅ {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}", - "{{ ucwords( $column ) }}": "{{ ucwords( $column ) }}", - "Delete Selected Entries": "លុបធាតុដែលបានជ្រើសរើស", - "Unamed Settings Page": "ទំព័រការកំណត់គ្មានឈ្មោះ", - "Description of unamed setting page": "ពិពណ៌នាអំពីទំព័រការកំណត់គ្មានឈ្មោះ", - "Text Field": "ប្រអប់វាយអក្សរ", - "This is a sample text field.": "នេះគឺជាប្រអប់វាយអត្ថបទធម្មតា", - "No description has been provided.": "មិន​មាន​ការ​ពិពណ៌នា​ត្រូវ​បានបញ្ចូល​។", - "Unamed Page": "ទំព័រដើមគ្មានឈ្មោះ", - "You\\'re using NexoPOS %s": "លោកអ្នកកំពុងប្រើប្រាស់ NexoPOS %s", - "Activate Your Account": "ធ្វើឱ្យគណនីរបស់អ្នកសកម្ម", - "The account you have created for __%s__, require an activation. In order to proceed, please click on the following link": "គណនីដែលអ្នកបានបង្កើតសម្រាប់ __%s__ ទាមទារការធ្វើឱ្យសកម្ម។ ដើម្បីបន្ត សូមចុចលើតំណភ្ជាប់ខាងក្រោម", - "Password Recovered": "ពាក្យសម្ងាត់ត្រូវបានទាញយក", - "Your password has been successfully updated on __%s__. You can now login with your new password.": "ពាក្យសម្ងាត់របស់អ្នកត្រូវបានធ្វើបច្ចុប្បន្នភាពដោយជោគជ័យនៅលើ __%s__។ ឥឡូវនេះ អ្នកអាចចូលដោយប្រើពាក្យសម្ងាត់ថ្មីរបស់អ្នកបាន។", - "If you haven\\'t asked this, please get in touch with the administrators.": "ប្រសិនបើអ្នកមិនបានសួររឿងនេះទេ សូមទាក់ទងអ្នកគ្រប់គ្រង។", - "Password Recovery": "ទាញយកពាក្យសម្ងាត់", - "Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ": "មាននរណាម្នាក់បានស្នើសុំឱ្យកំណត់ពាក្យសម្ងាត់របស់អ្នកឡើងវិញនៅលើ __\"%s\"__. ប្រសិនបើអ្នកចាំថាបានធ្វើសំណើនោះ សូមបន្តដោយចុចប៊ូតុងខាងក្រោម។", - "Reset Password": "កំណត់ពាក្យសម្ងាត់ឡើងវិញ", - "New User Registration": "ចុះឈ្មោះអ្នកប្រើប្រាស់ថ្មី", - "A new user has registered to your store (%s) with the email %s.": "អ្នកប្រើប្រាស់ថ្មីបានចុះឈ្មោះទៅកាន់ហាងរបស់អ្នក (%s) ជាមួយអ៊ីមែល %s ។", - "Your Account Has Been Created": "គណនី​របស់​អ្នក​ត្រូវ​បាន​បង្កើត", - "The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.": "គណនីដែលអ្នកបានបង្កើតសម្រាប់ __%s__, ត្រូវបានបង្កើតដោយជោគជ័យ។ ឥឡូវនេះ អ្នកអាចចូលប្រើប្រាស់ឈ្មោះអ្នកប្រើប្រាស់ (__%s__) និងពាក្យសម្ងាត់ដែលអ្នកបានកំណត់។", - "Login": "ចូលប្រើប្រាស់", - "Environment Details": "Environment លម្អិត", - "Properties": "លក្ខណៈសម្បត្តិ", - "Extensions": "ផ្នែកបន្ថែម", - "Configurations": "ការកំណត់រចនាសម្ព័ន្ធ", - "Save Coupon": "រក្សាទុកគូប៉ុង", - "This field is required": "ប្រអប់​នេះ​ចាំបាច់ត្រូវតែ​បំពេញ", - "The form is not valid. Please check it and try again": "ទម្រង់បែបបទ​មិន​ត្រឹមត្រូវ សូមពិនិត្យមើលវា ហើយព្យាយាមម្តងទៀត។", - "mainFieldLabel not defined": "mainFieldLabel មិន​ត្រូវ​បាន​កំណត់", - "Create Customer Group": "បង្កើតក្រុមអតិថិជន", - "Save a new customer group": "រក្សាទុកក្រុមអតិថិជនថ្មី", - "Update Group": "ធ្វើបច្ចុប្បន្នភាពក្រុម", - "Modify an existing customer group": "កែប្រែក្រុមអតិថិជនដែលមានស្រាប់", - "Managing Customers Groups": "គ្រប់គ្រងក្រុមអតិថិជន", - "Create groups to assign customers": "បង្កើតក្រុមសម្រាប់អតិថិជន", - "Managing Customers": "គ្រប់គ្រងអតិថិជន", - "List of registered customers": "បញ្ជីអតិថិជនដែលបានចុះឈ្មោះ", - "Your Module": "Module របស់អ្នក", - "Choose the zip file you would like to upload": "ជ្រើសរើសឯកសារ zip ដែលអ្នកចង់បង្ហោះ", - "Managing Orders": "ការគ្រប់គ្រងការបញ្ជាទិញ", - "Manage all registered orders.": "គ្រប់គ្រងការបញ្ជាទិញដែលបានកត់ត្រាទាំងអស់។", - "Payment receipt": "បង្កាន់ដៃបង់ប្រាក់", - "Hide Dashboard": "លាក់ផ្ទាំងគ្រប់គ្រង", - "Receipt — %s": "បង្កាន់ដៃ — %s", - "Order receipt": "បង្កាន់ដៃបញ្ជាទិញ", - "Refund receipt": "បង្កាន់ដៃសងប្រាក់វិញ", - "Current Payment": "ការទូទាត់បច្ចុប្បន្ន", - "Total Paid": "សរុបដែលបានបង់", - "Note: ": "ចំណាំ: ", - "Inclusive Product Taxes": "រួមបញ្ចូលពន្ធផលិតផល", - "Exclusive Product Taxes": "មិនរួមបញ្ចូលពន្ធផលិតផល", - "Condition:": "លក្ខខណ្ឌ:", - "Unable to proceed no products has been provided.": "មិន​អាច​បន្ត​ដំណើរការបាន ដោយយសារគ្មាន​ផលិតផល​។", - "Unable to proceed, one or more products is not valid.": "មិនអាចដំណើរការបាន ដោយសារផលិតផលមួយ ឬច្រើនជាងនេះមិនត្រឹមត្រូវ។", - "Unable to proceed the procurement form is not valid.": "មិនអាចដំណើរការទិញចូលដោយសារទម្រង់បែបបទមិនត្រឹមត្រូវ។", - "Unable to proceed, no submit url has been provided.": "មិន​អាច​បន្ត​បាន​ ដោយសារមិន​មាន​ url ត្រូវ​បាន​ផ្តល់​ឱ្យ​។", - "SKU, Barcode, Product name.": "SKU, បាកូដ, ឈ្មោះផលិតផល។", - "Date : %s": "កាលបរិច្ឆេទ : %s", - "First Address": "អាសយដ្ឋានគោល", - "Second Address": "អាសយដ្ឋានទីពីរ", - "Address": "អាសយដ្ឋាន", - "Search Products...": "ស្វែងរកផលិតផល...", - "Included Products": "រួមបញ្ចូលទាំងផលិតផល", - "Apply Settings": "អនុវត្តការកំណត់", - "Basic Settings": "ការកំណត់មូលដ្ឋាន", - "Visibility Settings": "ការកំណត់ភាពមើលឃើញ", - "Reward System Name": "ឈ្មោះប្រព័ន្ធលើកទឹកចិត្ត", - "The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?": "មូលដ្ឋានទិន្នន័យនឹងត្រូវបានសម្អាត។ អ្នកនឹងបាត់បង់ទិន្នន័យដែលមានស្រាប់។ មានតែអ្នកប្រើប្រាស់ និងតួនាទីប៉ុណ្ណោះដែលត្រូវបានរក្សាទុក។ តើអ្នកចង់បន្តទេ?", - "Your system is running in production mode. You probably need to build the assets": "ប្រព័ន្ធរបស់អ្នកស្ថិតនៅក្នុងលក្ខខណ្ឌអភិវឌ្ឍន៍រួចសព្វគ្រប់។ ត្រូវប្រាកដថាវាបាន build the assets រួចរាល់។", - "Your system is in development mode. Make sure to build the assets.": "ប្រព័ន្ធរបស់អ្នកស្ថិតនៅក្នុងលក្ខខណ្ឌកំពុងអភិវឌ្ឍន៍។ ត្រូវប្រាកដថាវាបាន build the assets រួចរាល់។", - "How to change database configuration": "របៀបផ្លាស់ប្តូរការកំណត់រចនាសម្ព័ន្ធមូលដ្ឋានទិន្នន័យ", - "Setup": "ដំឡើង", - "NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.": "NexoPOS បរាជ័យក្នុងការភ្ជាប់ទៅកាន់មូលដ្ឋានទិន្នន័យ។ កំហុសនេះអាចទាក់ទងនឹងការកំណត់មិនត្រឹមត្រូវនៅលើអញ្ញត្តិដែលមានក្នុង .env របស់អ្នក។ ការណែនាំខាងក្រោមអាចមានប្រយោជន៍ក្នុងការជួយអ្នកក្នុងការដោះស្រាយបញ្ហានេះ។", - "Common Database Issues": "បញ្ហាទូរទៅ ទាក់ទងនឹងមូលដ្ឋានទិន្នន័យ", - "Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.": "សូមអភ័យទោស កំហុសដែលមិនបានព្រៀងទុកបានកើតឡើង សូមចាប់ផ្តើមម្តងទៀតដោយចុចលើ \"ព្យាយាម​ម្តង​ទៀត\"។ ប្រសិនបើបញ្ហានៅតែកើតមាន សូមប្រើលទ្ធផលខាងក្រោមដើម្បីទទួលបានជំនួយ។", - "Documentation": "ឯកសារ", - "Log out": "ចាកចេញ", - "Retry": "ព្យាយាមម្តងទៀត", - "If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.": "ប្រសិនបើអ្នកឃើញទំព័រនេះ នេះមានន័យថា NexoPOS ត្រូវបានដំឡើងយ៉ាងត្រឹមត្រូវនៅលើប្រព័ន្ធរបស់អ្នក។ ដោយសារទំព័រនេះមានន័យថាជា frontend ដូច្នេះ NexoPOS មិនមាន frontend នៅឡើយទេពេលនេះ។ ទំព័រនេះបង្ហាញតំណមានប្រយោជន៍ដែលនឹងនាំអ្នកទៅកាន់មុខងារសំខាន់ៗ។", - "Sign Up": "ចុះឈ្មោះ" -} + "Percentage": "\u1797\u17b6\u1782\u179a\u1799", + "Flat": "\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Unknown Type": "\u1798\u17b7\u1793\u179f\u17d2\u1782\u17b6\u179b\u17cb\u1794\u17d2\u179a\u1797\u17c1\u1791", + "Male": "\u1794\u17d2\u179a\u17bb\u179f", + "Female": "\u179f\u17d2\u179a\u17b8", + "Not Defined": "\u1798\u17b7\u1793\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb", + "Assignation": "\u1780\u17b6\u179a\u1785\u17b6\u178f\u17cb\u178f\u17b6\u17c6\u1784", + "Stocked": "\u1794\u17b6\u1793\u179f\u17d2\u178f\u17bb\u1780", + "Defective": "\u1781\u17bc\u1785", + "Deleted": "\u1794\u17b6\u1793\u179b\u17bb\u1794", + "Removed": "\u1794\u17b6\u1793\u178a\u1780\u1785\u17c1\u1789", + "Returned": "\u1794\u17b6\u1793\u1799\u1780\u178f\u17d2\u179a\u179b\u1794\u17cb\u1798\u1780\u179c\u17b7\u1789", + "Sold": "\u1794\u17b6\u1793\u179b\u1780\u17cb", + "Lost": "\u1794\u17b6\u1793\u1794\u17b6\u178f\u17cb\u1794\u1784\u17cb", + "Added": "\u1794\u17b6\u1793\u1794\u1793\u17d2\u1790\u17c2\u1798", + "Incoming Transfer": "\u1795\u17d2\u1791\u17c1\u179a\u1785\u17bc\u179b", + "Outgoing Transfer": "\u1795\u17d2\u1791\u17c1\u179a\u1785\u17bc\u179b", + "Transfer Rejected": "\u1780\u17b6\u179a\u1795\u17d2\u1791\u17c1\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u178a\u17b7\u179f\u17c1\u1792", + "Transfer Canceled": "\u1780\u17b6\u179a\u1795\u17d2\u1791\u17c1\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u1785\u17c4\u179b", + "Void Return": "\u1780\u17b6\u179a\u1799\u1780\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1798\u1780\u179c\u17b7\u1789 \u1791\u17bb\u1780\u200b\u1787\u17b6\u200b\u1798\u17c4\u1783\u17c8", + "Adjustment Return": "\u1780\u17c2\u1794\u17d2\u179a\u17c2\u1780\u17b6\u179a\u1799\u1780\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1798\u1780\u179c\u17b7\u1789", + "Adjustment Sale": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u179b\u1780\u17cb", + "Incoming Conversion": "\u1794\u1798\u17d2\u179b\u17c2\u1784\u1785\u17bc\u179b", + "Outgoing Conversion": "\u1794\u1798\u17d2\u179b\u17c2\u1784\u1785\u17c1\u1789", + "Unknown Action": "\u1798\u17b7\u1793\u179f\u17d2\u1782\u17b6\u179b\u17cb\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796", + "Month Starts": "\u178a\u17be\u1798\u1781\u17c2", + "Month Middle": "\u1796\u17b6\u1780\u17cb\u1780\u178e\u17d2\u178f\u17b6\u179b\u1781\u17c2", + "Month Ends": "\u1785\u17bb\u1784\u1781\u17c2", + "X Days After Month Starts": "X \u1790\u17d2\u1784\u17c3\u1780\u17d2\u179a\u17c4\u1799\u1781\u17c2\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798", + "X Days Before Month Ends": "X \u1790\u17d2\u1784\u17c3\u1798\u17bb\u1793\u1781\u17c2\u1794\u1789\u17d2\u1785\u1794\u17cb", + "On Specific Day": "\u1793\u17c5\u1790\u17d2\u1784\u17c3\u1787\u17b6\u1780\u17cb\u179b\u17b6\u1780\u17cb", + "Unknown Occurance": "\u1780\u17b6\u179a\u1780\u17be\u178f\u17a1\u17be\u1784\u1798\u17b7\u1793\u179f\u17d2\u1782\u17b6\u179b\u17cb", + "Direct Transaction": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1795\u17d2\u1791\u17b6\u179b\u17cb", + "Recurring Transaction": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178a\u17c2\u179b\u1780\u17be\u178f\u17a1\u17be\u1784\u178a\u178a\u17c2\u179b\u17d7", + "Entity Transaction": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u179a\u1794\u179f\u17cb\u17a2\u1784\u17d2\u1782\u1797\u17b6\u1796", + "Scheduled Transaction": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178a\u17c2\u179b\u1794\u17b6\u1793\u1782\u17d2\u179a\u17c4\u1784\u1791\u17bb\u1780", + "Unknown Type (%s)": "\u1798\u17b7\u1793\u179f\u17d2\u1782\u17b6\u179b\u17cb\u1794\u17d2\u179a\u1797\u17c1\u1791 (%s)", + "Yes": "\u1794\u17b6\u1791\/\u1785\u17b6\u179f\u17ce", + "No": "\u1791\u17c1", + "An invalid date were provided. Make sure it a prior date to the actual server date.": "\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17c6\u1796\u17c1\u1789\u17d4 \u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u17b6\u1780\u178a\u1790\u17b6\u179c\u17b6\u1787\u17b6\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1798\u17bb\u1793\u1791\u17c5\u1793\u17b9\u1784\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1798\u17c9\u17b6\u179f\u17ca\u17b8\u1793\u1798\u17c1\u1796\u17b7\u178f\u1794\u17d2\u179a\u17b6\u1780\u178a\u17d4", + "Computing report from %s...": "\u1780\u17c6\u1796\u17bb\u1784\u1782\u178e\u1793\u17b6\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u1785\u17c1\u1789\u1796\u17b8 %s...", + "The operation was successful.": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1794\u17b6\u1793\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Unable to find a module having the identifier\/namespace \"%s\"": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780 a module \u178a\u17c2\u179b\u1798\u17b6\u1793 identifier\/namespace \"%s\"", + "What is the CRUD single resource name ? [Q] to quit.": "\u178f\u17be\u17a2\u17d2\u179c\u17b8\u1787\u17b6\u1788\u17d2\u1798\u17c4\u17c7\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb CRUD single resource ? \u1785\u17bb\u1785 [Q] \u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u1780\u1785\u17c1\u1789\u17d4", + "Please provide a valid value": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Which table name should be used ? [Q] to quit.": "\u178f\u17be table \u1788\u17d2\u1798\u17c4\u17c7\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb ? \u1785\u17bb\u1785 [Q] \u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u1780\u1785\u17c1\u1789\u17d4", + "What slug should be used ? [Q] to quit.": "\u178f\u17be slug \u178a\u17c2\u179b\u1782\u17bd\u179a\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb ? \u1785\u17bb\u1785 [Q] \u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u1780\u1785\u17c1\u1789\u17d4", + "What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.": "\u178f\u17be\u17a2\u17d2\u179c\u17b8\u1787\u17b6 namespace \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb CRUD Resource. \u17a7: system.users ? \u1785\u17bb\u1785 [Q] \u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u1780\u1785\u17c1\u1789\u17d4", + "Please provide a valid value.": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "What is the full model name. eg: App\\Models\\Order ? [Q] to quit.": "\u178f\u17be\u17a2\u17d2\u179c\u17b8\u1787\u17b6\u1788\u17d2\u1798\u17c4\u17c7 model \u1796\u17c1\u1789 \u17a7: App\\Models\\Order ? [Q] \u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u1780\u1785\u17c1\u1789\u17d4", + "If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "\u1794\u17be\u179f\u17b7\u1793\u1787\u17b6 CRUD resource \u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1798\u17b6\u1793\u1791\u17c6\u1793\u17b6\u1780\u17cb\u1791\u17c6\u1793\u1784, \u179f\u17bc\u1798\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u178a\u17bc\u1785\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1798 \"foreign_table, foreign_key, local_key\" ? \u1785\u17bb\u1785 [S] \u178a\u17be\u1798\u17d2\u1794\u17b8\u179a\u1798\u17d2\u179b\u1784, [Q] \u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u1780\u1785\u17c1\u1789\u17d4", + "Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "\u1785\u1784\u17cb\u1794\u1784\u17d2\u1780\u17be\u178f relation ? \u179f\u17bc\u1798\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u178a\u17bc\u1785\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1798 \"foreign_table, foreign_key, local_key\" ? \u1785\u17bb\u1785 [S] \u178a\u17be\u1798\u17d2\u1794\u17b8\u179a\u1798\u17d2\u179b\u1784, [Q] \u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u1780\u1785\u17c1\u1789\u17d4", + "Not enough parameters provided for the relation.": "\u1798\u17b7\u1793\u1798\u17b6\u1793 parameters \u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u17b6\u1793\u17cb\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1795\u17d2\u178f\u179b\u17cb\u1787\u17bc\u1793\u1791\u17c6\u1793\u17b6\u1780\u17cb\u1791\u17c6\u1793\u1784\u17d4", + "What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.": "\u178f\u17be\u17a2\u17d2\u179c\u17b8\u1787\u17b6 fillable column \u1793\u17c5\u179b\u17be table: \u17a7: username, email, password ? \u1785\u17bb\u1785 [S] \u178a\u17be\u1798\u17d2\u1794\u17b8\u179a\u1798\u17d2\u179b\u1784, [Q] \u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u1780\u1785\u17c1\u1789\u17d4", + "The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"": "CRUD resource \"%s\" for the module \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u1793\u17c5 \"%s\"", + "The CRUD resource \"%s\" has been generated at %s": "CRUD resource \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u1793\u17c5 %s", + "An unexpected error has occurred.": "\u1780\u17c6\u17a0\u17bb\u179f\u200b\u178a\u17c2\u179b\u200b\u1798\u17b7\u1793\u200b\u179a\u17c6\u1796\u17b9\u1784\u200b\u1791\u17bb\u1780\u200b\u1794\u17b6\u1793\u200b\u1780\u17be\u178f\u200b\u17a1\u17be\u1784\u200b\u17d4", + "File Name": "\u1788\u17d2\u1798\u17c4\u17c7\u17af\u1780\u179f\u17b6\u179a", + "Status": "\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796", + "Unsupported argument provided: \"%s\"": "\u1798\u17b7\u1793\u1782\u17b6\u17c6\u1791\u17d2\u179a argument \u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb: \"%s\"", + "Done": "\u179a\u17bd\u1785\u179a\u17b6\u179b\u17cb", + "The authorization token can\\'t be changed manually.": "The authorization token \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u17d2\u178f\u17bc\u179a\u178a\u17c4\u1799\u178a\u17c3\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Localization for %s extracted to %s": "\u1780\u17b6\u179a\u1792\u17d2\u179c\u17be\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u17b8\u1799\u1780\u1798\u17d2\u1798\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb %s extracted to %s", + "Translation process is complete for the module %s !": "\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1794\u1780\u1794\u17d2\u179a\u17c2\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u1794\u17cb\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb module %s !", + "Unable to find the requested module.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780 module \u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u1791\u17c1\u17d4", + "\"%s\" is a reserved class name": "\"%s\" \u1782\u17ba\u1787\u17b6\u1788\u17d2\u1798\u17c4\u17c7 reserved class", + "The migration file has been successfully forgotten for the module %s.": "\u17af\u1780\u179f\u17b6\u179a\u1780\u17b6\u179a\u1792\u17d2\u179c\u17be\u179c\u17b7\u179c\u178c\u17d2\u178d\u1793\u17cd\u1780\u1798\u17d2\u1798\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17c6\u1797\u17d2\u179b\u17c1\u1785\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb module %s.", + "%s migration(s) has been deleted.": "%s migration(s) \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "The command has been created for the module \"%s\"!": "The command \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb module \"%s\"!", + "The controller has been created for the module \"%s\"!": "The controller \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb module \"%s\"!", + "Would you like to delete \"%s\"?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179b\u17bb\u1794 \"%s\" \u1791\u17c1?", + "Unable to find a module having as namespace \"%s\"": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780 module \u178a\u17c2\u179b\u1798\u17b6\u1793 namespace \"%s\"", + "Name": "\u1788\u17d2\u1798\u17c4\u17c7", + "Namespace": "Namespace", + "Version": "\u1780\u17c6\u178e\u17c2\u179a", + "Author": "\u17a2\u17d2\u1793\u1780\u1794\u1784\u17d2\u1780\u17be\u178f", + "Enabled": "\u1794\u17be\u1780", + "Path": "\u1795\u17d2\u1793\u17c2\u1780", + "Index": "\u179f\u1793\u17d2\u1791\u179f\u17d2\u179f\u1793\u17cd", + "Entry Class": "Entry Class", + "Routes": "Routes", + "Api": "Api", + "Controllers": "Controllers", + "Views": "Views", + "Api File": "Api File", + "Migrations": "\u179c\u17b7\u179c\u178c\u17d2\u178d\u1793\u17cd\u1780\u1798\u17d2\u1798", + "Attribute": "Attribute", + "Value": "\u178f\u1798\u17d2\u179b\u17c3", + "The event has been created at the following path \"%s\"!": "The event \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u1793\u17c5 path \"%s\"!", + "The listener has been created on the path \"%s\"!": "The listener \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u1793\u17c5 path \"%s\"!", + "A request with the same name has been found !": "\u179f\u17c6\u178e\u17be\u178a\u17c2\u179b\u1798\u17b6\u1793\u1788\u17d2\u1798\u17c4\u17c7\u178a\u17bc\u1785\u1782\u17d2\u1793\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u1783\u17be\u1789!", + "Unable to find a module having the identifier \"%s\".": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780 module \u178a\u17c2\u179b\u1798\u17b6\u1793 identifier \"%s\".", + "There is no migrations to perform for the module \"%s\"": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u179c\u17b7\u179c\u178c\u17d2\u178d\u1793\u17cd\u1780\u1798\u17d2\u1798\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a module \"%s\"", + "The module migration has successfully been performed for the module \"%s\"": "The module migration \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb module \"%s\"", + "The products taxes were computed successfully.": "\u1796\u1793\u17d2\u1792\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u178e\u1793\u17b6\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The product barcodes has been refreshed successfully.": "\u179b\u17c1\u1781\u1780\u17bc\u178a\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u17a1\u17be\u1784\u179c\u17b7\u1789\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "%s products where updated.": "%s \u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "The demo has been enabled.": "\u1780\u17b6\u179a\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179f\u17b6\u1780\u179b\u17d2\u1794\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17be\u1780\u17d4", + "Unsupported reset mode.": "\u179a\u1794\u17c0\u1794\u1780\u17c6\u178e\u178f\u17cb\u17a1\u17be\u1784\u179c\u17b7\u1789\u178a\u17c2\u179b\u1798\u17b7\u1793\u1782\u17b6\u17c6\u1791\u17d2\u179a\u17d4", + "You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u17af\u1780\u179f\u17b6\u179a\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u1791\u17c1\u17d4 \u179c\u17b6\u1798\u17b7\u1793\u1782\u17bd\u179a\u1798\u17b6\u1793\u1785\u1793\u17d2\u179b\u17c4\u17c7 \u1785\u17c6\u178e\u17bb\u1785 \u17ac\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u1796\u17b7\u179f\u17c1\u179f\u178e\u17b6\u1798\u17bd\u1799\u17a1\u17be\u1799\u17d4", + "Unable to find a module having \"%s\" as namespace.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780 module \u178a\u17c2\u179b\u1798\u17b6\u1793 \"%s\" \u178a\u17bc\u1785\u1793\u17b9\u1784 namespace.", + "A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.": "\u17af\u1780\u179f\u17b6\u179a\u179f\u17d2\u179a\u178a\u17c0\u1784\u1782\u17d2\u1793\u17b6\u1798\u17b6\u1793\u179a\u17bd\u1785\u17a0\u17be\u1799\u1793\u17c5 \"%s\". \u179f\u17bc\u1798\u1794\u17d2\u179a\u17be \"--force\" \u178a\u17be\u1798\u17d2\u1794\u17b8\u1787\u17c6\u1793\u17bd\u179f\u179c\u17b6\u17d4", + "A new form class was created at the path \"%s\"": "\u1791\u1798\u17d2\u179a\u1784\u17cb\u1794\u17c2\u1794\u1794\u1791 class \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u1793\u17c5 \"%s\"", + "Unable to proceed, looks like the database can\\'t be used.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u178f\u200b\u1794\u17b6\u1793 \u17a0\u17b6\u1780\u17cb\u200b\u178a\u17bc\u1785\u200b\u1787\u17b6\u200b\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u17d2\u179a\u17be\u200b\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u200b\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u200b\u1794\u17b6\u1793\u200b\u1791\u17c1\u17d4", + "What is the store name ? [Q] to quit.": "\u178f\u17be\u17a2\u17d2\u179c\u17b8\u1787\u17b6\u1788\u17d2\u1798\u17c4\u17c7\u179a\u1794\u179f\u17cb\u17a0\u17b6\u1784? \u1785\u17bb\u1785 [Q] \u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u1780\u1785\u17c1\u1789\u17d4", + "Please provide at least 6 characters for store name.": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb\u1799\u17c9\u17b6\u1784\u17a0\u17c4\u1785\u178e\u17b6\u179f\u17cb 6 \u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u17a0\u17b6\u1784\u17d4", + "What is the administrator password ? [Q] to quit.": "\u178f\u17be\u17a2\u17d2\u179c\u17b8\u1791\u17c5\u1787\u17b6\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u17a2\u17d2\u1793\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784? \u1785\u17bb\u1785 [Q] \u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u1780\u1785\u17c1\u1789\u17d4", + "Please provide at least 6 characters for the administrator password.": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb\u1799\u17c9\u17b6\u1784\u17a0\u17c4\u1785\u178e\u17b6\u179f\u17cb 6 \u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u17a2\u17d2\u1793\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u17d4", + "In which language would you like to install NexoPOS ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u178a\u17c6\u17a1\u17be\u1784 NexoPOS \u1787\u17b6\u1797\u17b6\u179f\u17b6\u1798\u17bd\u1799\u178e\u17b6?", + "You must define the language of installation.": "\u17a2\u17d2\u1793\u1780\u1785\u17b6\u17c6\u1794\u17b6\u1785\u17cb\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1780\u17c6\u178e\u178f\u17cb\u1797\u17b6\u179f\u17b6\u1793\u17c3\u1780\u17b6\u179a\u178a\u17c6\u17a1\u17be\u1784\u17d4", + "What is the administrator email ? [Q] to quit.": "\u178f\u17be\u17a2\u17d2\u179c\u17b8\u1791\u17c5\u1787\u17b6\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784? \u179f\u17bc\u1798\u1785\u17bb\u1785 [Q] \u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u1780\u1785\u17c1\u1789\u17d4", + "Please provide a valid email for the administrator.": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u17d2\u1793\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u17d4", + "What is the administrator username ? [Q] to quit.": "\u178f\u17be\u200b\u1788\u17d2\u1798\u17c4\u17c7\u200b\u17a2\u17d2\u1793\u1780\u200b\u1794\u17d2\u179a\u17be\u200b\u179a\u1794\u179f\u17cb\u200b\u17a2\u17d2\u1793\u1780\u200b\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u200b\u1782\u17ba\u200b\u1787\u17b6\u200b\u17a2\u17d2\u179c\u17b8? \u1785\u17bb\u1785 [Q] \u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u1780\u1785\u17c1\u1789\u17d4", + "Please provide at least 5 characters for the administrator username.": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb\u1799\u17c9\u17b6\u1784\u17a0\u17c4\u1785\u178e\u17b6\u179f\u17cb 5 \u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u17d4", + "Downloading latest dev build...": "\u1780\u17c6\u1796\u17bb\u1784\u1791\u17b6\u1789\u1799\u1780\u1780\u17c6\u178e\u17c2\u179a dev \u1785\u17bb\u1784\u1780\u17d2\u179a\u17c4\u1799\u1794\u1784\u17d2\u17a2\u179f\u17cb...", + "Reset project to HEAD...": "Reset project to HEAD...", + "Coupons List": "\u1794\u1789\u17d2\u1787\u17b8\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Display all coupons.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No coupons has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1782\u17bc\u1794\u17c9\u17bb\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17c1\u17d4", + "Add a new coupon": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1790\u17d2\u1798\u17b8", + "Create a new coupon": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1790\u17d2\u1798\u17b8", + "Register a new coupon and save it.": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1790\u17d2\u1798\u17b8\u1793\u17b7\u1784\u179a\u1780\u17d2\u179f\u17b6\u179c\u17b6\u1791\u17bb\u1780\u17d4", + "Edit coupon": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Modify Coupon.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1782\u17bc\u1794\u17c9\u17bb\u1784\u17d4", + "Return to Coupons": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179c\u17b7\u1789", + "Provide a name to the resource.": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb resource.", + "General": "\u1791\u17bc\u1791\u17c5", + "Coupon Code": "\u1780\u17bc\u178a\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Might be used while printing the coupon.": "Might be used while printing the coupon.", + "Percentage Discount": "\u1794\u1789\u17d2\u1785\u17bb\u17c7\u178f\u1798\u17d2\u179b\u17c3\u1787\u17b6\u1797\u17b6\u1782\u179a\u1799", + "Flat Discount": "\u1794\u1789\u17d2\u1785\u17bb\u17c7\u178f\u1798\u17d2\u179b\u17c3\u1787\u17b6\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Type": "\u1794\u17d2\u179a\u1797\u17c1\u1791", + "Define which type of discount apply to the current coupon.": "\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u1794\u17d2\u179a\u1797\u17c1\u1791\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1785\u17bb\u17c7\u178f\u1798\u17d2\u179b\u17c3\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1793\u17c1\u17c7\u17d4", + "Discount Value": "\u178f\u1798\u17d2\u179b\u17c3\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u1789\u17d2\u1785\u17bb\u17c7", + "Define the percentage or flat value.": "\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u1785\u17c6\u1793\u17bd\u1793\u1797\u17b6\u1782\u179a\u1799 \u17ac\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u17d4", + "Valid Until": "\u1798\u17b6\u1793\u200b\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796\u200b\u178a\u179b\u17cb", + "Determine Until When the coupon is valid.": "\u1780\u17c6\u178e\u178f\u17cb\u179a\u1799\u17c8\u1796\u17c1\u179b\u178a\u17c2\u179b\u1794\u17d0\u178e\u17d2\u178e\u1798\u17b6\u1793\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796\u17d4", + "Minimum Cart Value": "\u1780\u17b6\u179a\u1791\u17b7\u1789\u17a2\u178f\u17b7\u1794\u17d2\u1794\u179a\u1798\u17b6", + "What is the minimum value of the cart to make this coupon eligible.": "\u178f\u17be\u17a2\u17d2\u179c\u17b8\u1787\u17b6\u178f\u1798\u17d2\u179b\u17c3\u17a2\u1794\u17d2\u1794\u1794\u179a\u1798\u17b6\u1793\u17c3\u1780\u17b6\u179a\u1791\u17b7\u1789\u178a\u17be\u1798\u17d2\u1794\u17b8\u1792\u17d2\u179c\u17be\u17b1\u17d2\u1799\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1798\u17b6\u1793\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796\u17d4", + "Maximum Cart Value": "\u178f\u1798\u17d2\u179b\u17c3\u1791\u17b7\u1789\u17a2\u178f\u17b7\u1794\u179a\u1798\u17b6", + "The value above which the current coupon can\\'t apply.": "\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1798\u17b7\u1793\u17a2\u17b6\u1785\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u178f\u1798\u17d2\u179b\u17c3\u1781\u17b6\u1784\u179b\u17be\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Valid Hours Start": "\u1798\u17c9\u17c4\u1784\u178a\u17c2\u179b\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798\u1798\u17b6\u1793\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796", + "Define form which hour during the day the coupons is valid.": "\u1780\u17c6\u178e\u178f\u17cb\u200b\u1791\u1798\u17d2\u179a\u1784\u17cb\u1794\u17c2\u1794\u1794\u1791\u200b\u1798\u17c9\u17c4\u1784\u200b\u1780\u17d2\u1793\u17bb\u1784\u200b\u1790\u17d2\u1784\u17c3\u200b\u178a\u17c2\u179b\u1782\u17bc\u1794\u17c9\u17bb\u1784\u200b\u1798\u17b6\u1793\u200b\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796\u17d4", + "Valid Hours End": "\u1798\u17c9\u17c4\u1784\u178a\u17c2\u179b\u179b\u17c2\u1784\u1798\u17b6\u1793\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796", + "Define to which hour during the day the coupons end stop valid.": "\u1780\u17c6\u178e\u178f\u17cb\u200b\u1798\u17c9\u17c4\u1784\u200b\u178e\u17b6\u200b\u1780\u17d2\u1793\u17bb\u1784\u200b\u17a2\u17c6\u17a1\u17bb\u1784\u200b\u1790\u17d2\u1784\u17c3\u200b\u178a\u17c2\u179b\u200b\u1782\u17bc\u1794\u17c9\u17bb\u1784\u200b\u1788\u1794\u17cb\u200b\u1798\u17b6\u1793\u200b\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796\u17d4", + "Limit Usage": "\u1780\u17c6\u178e\u178f\u17cb\u1785\u17c6\u1793\u17bd\u1793\u178a\u17c2\u179b\u17a2\u17b6\u1785\u1794\u17d2\u179a\u17be", + "Define how many time a coupons can be redeemed.": "\u1780\u17c6\u178e\u178f\u17cb\u1785\u17c6\u1793\u17bd\u1793\u178a\u1784\u178a\u17c2\u179b\u1782\u17bc\u1794\u17c9\u17bb\u1784\u17a2\u17b6\u1785\u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1794\u17b6\u1793\u17d4", + "Products": "\u1795\u179b\u17b7\u178f\u1795\u179b", + "Select Products": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1795\u179b\u17b7\u178f\u1795\u179b", + "The following products will be required to be present on the cart, in order for this coupon to be valid.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1798\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1785\u17b6\u17c6\u1794\u17b6\u1785\u17cb\u178a\u17b6\u1780\u17cb\u1785\u17bc\u179b\u1780\u17d2\u1793\u17bb\u1784\u178f\u17b6\u179a\u17b6\u1784\u179b\u1780\u17cb \u178a\u17be\u1798\u17d2\u1794\u17b8\u17a2\u17b6\u1785\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1794\u17b6\u1793\u17d4", + "Categories": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b", + "Select Categories": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b", + "The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u179f\u17d2\u1790\u17b7\u178f\u1780\u17d2\u1793\u17bb\u1784\u1794\u17d2\u179a\u1797\u17c1\u1791\u1791\u17b6\u17c6\u1784\u1793\u17c1\u17c7\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1785\u17b6\u17c6\u1794\u17b6\u1785\u17cb\u178a\u17b6\u1780\u17cb\u1785\u17bc\u179b\u1780\u17d2\u1793\u17bb\u1784\u178f\u17b6\u179a\u17b6\u1784\u179b\u1780\u17cb \u178a\u17be\u1798\u17d2\u1794\u17b8\u17a2\u17b6\u1785\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1794\u17b6\u1793\u17d4", + "Customer Groups": "\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Assigned To Customer Group": "\u1794\u17b6\u1793\u178a\u17b6\u1780\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1785\u17bc\u179b\u1780\u17d2\u1793\u17bb\u1784\u1780\u17d2\u179a\u17bb\u1798", + "Only the customers who belongs to the selected groups will be able to use the coupon.": "\u1798\u17b6\u1793\u178f\u17c2\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c2\u179b\u179f\u17d2\u1790\u17b7\u178f\u1780\u17d2\u1793\u17bb\u1784\u1780\u17d2\u179a\u17bb\u1798\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1793\u17c1\u17c7\u1791\u17c1 \u178a\u17c2\u179b\u17a2\u17b6\u1785\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1794\u17b6\u1793\u17d4", + "Customers": "\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Assigned To Customers": "\u178a\u17b6\u1780\u17cb\u1785\u17bc\u179b\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Only the customers selected will be ale to use the coupon.": "\u1798\u17b6\u1793\u178f\u17c2\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1793\u17c1\u17c7\u1791\u17c1 \u178a\u17c2\u179b\u17a2\u17b6\u1785\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1794\u17b6\u1793\u17d4", + "Unable to save the coupon product as this product doens\\'t exists.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1793\u17c3\u1795\u179b\u17b7\u178f\u1795\u179b\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1795\u179b\u17b7\u178f\u1795\u179b\u1793\u17c1\u17c7\u1798\u17b7\u1793\u1798\u17b6\u1793\u17d4", + "Unable to save the coupon category as this category doens\\'t exists.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1793\u17c3\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b\u1793\u17c1\u17c7\u1798\u17b7\u1793\u1798\u17b6\u1793\u17d4", + "Unable to save the coupon as one of the selected customer no longer exists.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1793\u17c3\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1793\u17c4\u17c7\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1793\u17c1\u17c7\u1798\u17b7\u1793\u1798\u17b6\u1793\u17d4", + "Unable to save the coupon as one of the selected customer group no longer exists.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u179b\u17c2\u1784\u1798\u17b6\u1793\u1791\u17c0\u178f\u17a0\u17be\u1799\u17d4", + "Unable to save the coupon as this category doens\\'t exists.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1798\u17b7\u1793\u1798\u17b6\u1793\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Unable to save the coupon as one of the customers provided no longer exists.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179a\u1780\u17d2\u179f\u17b6\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1793\u17c1\u17c7\u179b\u17c2\u1784\u1798\u17b6\u1793\u1791\u17c0\u178f\u17a0\u17be\u1799\u17d4", + "Unable to save the coupon as one of the provided customer group no longer exists.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u179b\u17c2\u1784\u1798\u17b6\u1793\u1791\u17c0\u178f\u17a0\u17be\u1799\u17d4", + "Valid From": "\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796\u200b\u1785\u17b6\u1794\u17cb\u1796\u17b8", + "Valid Till": "\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796\u200b\u179a\u17a0\u17bc\u178f\u178a\u179b\u17cb", + "Created At": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1793\u17c5", + "N\/A": "\u1791\u1791\u17c1", + "Undefined": "\u1798\u17b7\u1793\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb", + "Edit": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c", + "History": "\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7", + "Delete": "\u179b\u17bb\u1794", + "Would you like to delete this ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179b\u17bb\u1794\u179c\u17b6\u1798\u17c2\u1793\u1791\u17c1?", + "Delete a licence": "\u179b\u17bb\u1794\u17a2\u1787\u17d2\u1789\u17b6\u179a\u1794\u17d0\u178e\u17d2\u178e", + "Delete Selected Groups": "\u179b\u17bb\u1794\u1780\u17d2\u179a\u17bb\u1798\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f", + "Coupon Order Histories List": "\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1798\u17b6\u1793\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Display all coupon order histories.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1798\u17b6\u1793\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No coupon order histories has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1798\u17b6\u1793\u1782\u17bc\u1794\u17c9\u17bb\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6", + "Add a new coupon order history": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Create a new coupon order history": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Register a new coupon order history and save it.": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u1782\u17bc\u1794\u17c9\u17bb\u1784 \u1793\u17b7\u1784\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "Edit coupon order history": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1798\u17b6\u1793\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Modify Coupon Order History.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1798\u17b6\u1793\u1782\u17bc\u1794\u17c9\u17bb\u1784\u17d4", + "Return to Coupon Order Histories": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1798\u17b6\u1793\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Id": "Id", + "Code": "\u1780\u17bc\u178a", + "Customer_coupon_id": "Customer_coupon_id", + "Order_id": "Order_id", + "Discount_value": "Discount_value", + "Minimum_cart_value": "Minimum_cart_value", + "Maximum_cart_value": "Maximum_cart_value", + "Limit_usage": "Limit_usage", + "Uuid": "Uuid", + "Created_at": "Created_at", + "Updated_at": "Updated_at", + "You\\re not allowed to do that.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1792\u17d2\u179c\u17be\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u1793\u17c1\u17c7\u1791\u17c1\u17d4", + "Customer": "\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Order": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Discount": "\u1794\u1789\u17d2\u1785\u17bb\u17c7\u178f\u1798\u17d2\u179b\u17c3", + "Would you like to delete this?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179b\u17bb\u1794\u1798\u17c2\u1793\u1791\u17c1?", + "Previous Amount": "\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1796\u17b8\u1798\u17bb\u1793", + "Amount": "\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Next Amount": "\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb", + "Operation": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "Description": "\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6", + "By": "\u178a\u17c4\u1799", + "Restrict the records by the creation date.": "\u178a\u17b6\u1780\u17cb\u1780\u1798\u17d2\u179a\u17b7\u178f\u1780\u17c6\u178e\u178f\u17cb\u178f\u17d2\u179a\u17b6\u178a\u17c4\u1799\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1794\u1784\u17d2\u1780\u17be\u178f\u17d4", + "Created Between": "\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u1793\u17c5\u1785\u1793\u17d2\u179b\u17c4\u17c7", + "Operation Type": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "Restrict the orders by the payment status.": "\u178a\u17b6\u1780\u17cb\u1780\u1798\u17d2\u179a\u17b7\u178f\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c4\u1799\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u1793\u17c3\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u17d4", + "Crediting (Add)": "\u1780\u17b6\u179a\u1795\u17d2\u178f\u179b\u17cb\u17a5\u178e\u1791\u17b6\u1793 (\u1794\u1793\u17d2\u1790\u17c2\u1798)", + "Refund (Add)": "\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789 (\u1794\u1793\u17d2\u1790\u17c2\u1798)", + "Deducting (Remove)": "\u178a\u1780\u1785\u17c1\u1789 (\u179b\u17bb\u1794)", + "Payment (Remove)": "\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb (\u179b\u17bb\u1794)", + "Restrict the records by the author.": "\u178a\u17b6\u1780\u17cb\u1780\u1798\u17d2\u179a\u17b7\u178f\u1780\u17c6\u178e\u178f\u17cb\u178f\u17d2\u179a\u17b6\u178a\u17c4\u1799\u17a2\u17d2\u1793\u1780\u1794\u1784\u17d2\u1780\u17be\u178f\u17d4", + "Total": "\u179f\u179a\u17bb\u1794", + "Customer Accounts List": "\u1794\u1789\u17d2\u1787\u17b8\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Display all customer accounts.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No customer accounts has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17c1\u17d4", + "Add a new customer account": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8", + "Create a new customer account": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8", + "Register a new customer account and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit customer account": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1782\u178e\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Modify Customer Account.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1782\u178e\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Return to Customer Accounts": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u179c\u17b7\u1789\u17d4", + "This will be ignored.": "\u1793\u17c1\u17c7\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1798\u17b7\u1793\u17a2\u17be\u1796\u17be\u17d4", + "Define the amount of the transaction": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u179a\u17b7\u1798\u17b6\u178e\u1793\u17c3\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "Deduct": "\u178a\u1780\u1785\u17c1\u1789", + "Add": "\u1794\u1793\u17d2\u1790\u17c2\u1798", + "Define what operation will occurs on the customer account.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u17a2\u17d2\u179c\u17b8\u1793\u17b9\u1784\u1780\u17be\u178f\u17a1\u17be\u1784\u1793\u17c5\u179b\u17be\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u17d4", + "Customer Coupons List": "\u1794\u1789\u17d2\u1787\u17b8\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Display all customer coupons.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No customer coupons has been registered": "\u1782\u17d2\u1798\u17b6\u1793\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1", + "Add a new customer coupon": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8", + "Create a new customer coupon": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1782\u17bc\u1794\u17c9\u17bb\u1784\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8\u17d4", + "Register a new customer coupon and save it.": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit customer coupon": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Modify Customer Coupon.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u17d4", + "Return to Customer Coupons": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u179c\u17b7\u1789", + "Usage": "\u179a\u1794\u17c0\u1794\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Define how many time the coupon has been used.": "\u1780\u17c6\u178e\u178f\u17cb\u1785\u17c6\u1793\u17bd\u1793\u178a\u1784\u178a\u17c2\u179b\u1782\u17bc\u1794\u17c9\u17bb\u1784\u17a2\u17b6\u1785\u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1794\u17b6\u1793\u17d4", + "Limit": "\u1798\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb", + "Define the maximum usage possible for this coupon.": "\u1780\u17c6\u178e\u178f\u17cb\u1785\u17c6\u1793\u17bd\u17bd\u1793\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17a2\u178f\u17b7\u1794\u17d2\u1794\u179a\u1798\u17b6\u178a\u17c2\u179b\u17a2\u17b6\u1785\u1791\u17c5\u179a\u17bd\u1785\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1782\u17bc\u1794\u17c9\u17bb\u1784\u17d4", + "Date": "\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791", + "Usage History": "\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1793\u17c3\u1780\u17b6\u179a\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Customer Coupon Histories List": "\u1794\u1789\u17d2\u1787\u17b8\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Display all customer coupon histories.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No customer coupon histories has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17c1\u17d4", + "Add a new customer coupon history": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Create a new customer coupon history": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Register a new customer coupon history and save it.": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793 \u1793\u17b7\u1784\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "Edit customer coupon history": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Modify Customer Coupon History.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u17d4", + "Return to Customer Coupon Histories": "\u178f\u17d2\u179a\u179b\u1794\u17cb\u1791\u17c5\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Order Code": "\u1780\u17bc\u178a\u1794\u1789\u17d2\u1787\u17b6\u179a\u1791\u17b7\u1789", + "Coupon Name": "\u1788\u17d2\u1798\u17c4\u17c7\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Customers List": "\u1794\u1789\u17d2\u1787\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Display all customers.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u1789\u17d2\u1787\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb", + "No customers has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17b6\u179a\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Add a new customer": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8", + "Create a new customer": "\u1794\u1784\u17d2\u1780\u17be\u178f\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8", + "Register a new customer and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8 \u1793\u17b7\u1784\u179a\u1780\u17d2\u179f\u17b6\u179c\u17b6\u1791\u17bb\u1780\u17d4", + "Edit customer": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Modify Customer.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Return to Customers": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u179c\u17b7\u1789", + "Customer Name": "\u1788\u17d2\u1798\u17c4\u17c7\u200b\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Provide a unique name for the customer.": "\u179f\u17bc\u1798\u1794\u1789\u17d2\u1787\u17bc\u179b\u1788\u17d2\u1798\u17c4\u17c7\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c4\u1799\u1798\u17b7\u1793\u1787\u17b6\u1793\u17cb\u1782\u17d2\u1793\u17b6\u17d4", + "Last Name": "\u1793\u17b6\u1798\u1781\u17d2\u179b\u17bd\u1793", + "Provide the customer last name": "\u179f\u17bc\u1798\u1794\u1789\u17d2\u1787\u17bc\u179b\u1788\u17d2\u1798\u17c4\u17c7\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Credit Limit": "\u1780\u17c6\u178e\u178f\u17cb\u17a5\u178e\u1791\u17b6\u1793", + "Set what should be the limit of the purchase on credit.": "\u1780\u17c6\u178e\u178f\u17cb\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u1782\u17bd\u179a\u178f\u17c2\u1787\u17b6\u178a\u17c2\u1793\u1780\u17c6\u178e\u178f\u17cb\u1793\u17c3\u1780\u17b6\u179a\u1791\u17b7\u1789\u1793\u17c5\u179b\u17be\u17a5\u178e\u1791\u17b6\u1793\u17d4", + "Group": "\u1780\u17d2\u179a\u17bb\u1798", + "Assign the customer to a group": "\u178a\u17b6\u1780\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1791\u17c5\u1780\u17d2\u1793\u17bb\u1784\u1780\u17d2\u179a\u17bb\u1798\u1798\u17bd\u1799", + "Birth Date": "\u1790\u17d2\u1784\u17c3\u1781\u17c2\u200b\u1786\u17d2\u1793\u17b6\u17c6\u200b\u1780\u17c6\u178e\u17be\u178f", + "Displays the customer birth date": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1790\u17d2\u1784\u17c3\u1781\u17c2\u1786\u17d2\u1793\u17b6\u17c6\u1780\u17c6\u178e\u17be\u178f\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Email": "\u17a2\u17ca\u17b8\u1798\u17c2\u179b", + "Provide the customer email.": "\u1795\u17d2\u178f\u179b\u17cb\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u17d4", + "Phone Number": "\u179b\u17c1\u1781\u1791\u17bc\u179a\u179f\u1796\u17d2\u1791", + "Provide the customer phone number": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u179b\u17c1\u1781\u1791\u17bc\u179a\u179f\u17d0\u1796\u17d2\u1791\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "PO Box": "\u1794\u17d2\u179a\u17a2\u1794\u17cb\u1794\u17d2\u179a\u17c3\u179f\u178e\u17b8\u1799\u17cd", + "Provide the customer PO.Box": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u1794\u17d2\u179a\u17a2\u1794\u17cb\u1794\u17d2\u179a\u17c3\u179f\u178e\u17b8\u1799\u17cd\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Gender": "\u1797\u17c1\u1791", + "Provide the customer gender.": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u1797\u17c1\u1791\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u17d4\u17d4", + "Billing Address": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a", + "Shipping Address": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793", + "The assigned default customer group doesn\\'t exist or is not defined.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\u178a\u17c2\u179b\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb \u17ac\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u17d4", + "First Name": "\u1793\u17b6\u1798\u178f\u17d2\u179a\u1780\u17bc\u179b", + "Phone": "\u179b\u17c1\u1781\u1791\u17bc\u179a\u179f\u1796\u17d2\u1791", + "Account Credit": "\u1782\u178e\u1793\u17b8\u17a5\u178e\u1791\u17b6\u1793", + "Owed Amount": "\u1782\u178e\u1793\u17b8\u1787\u17c6\u1796\u17b6\u1780\u17cb", + "Purchase Amount": "\u1782\u178e\u1793\u17b8\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Orders": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Rewards": "\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179b\u17be\u1780\u1791\u17b9\u1780\u1785\u17b7\u178f\u17d2\u178f", + "Coupons": "\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Wallet History": "\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1780\u17b6\u1794\u17bc\u1794", + "Delete a customers": "\u179b\u17bb\u1794\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Delete Selected Customers": "\u179b\u17bb\u1794\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f", + "Customer Groups List": "\u1794\u1789\u17d2\u1787\u17b8\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Display all Customers Groups.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u1789\u17d2\u1787\u17b8\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No Customers Groups has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c2\u179b\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb", + "Add a new Customers Group": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8", + "Create a new Customers Group": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8", + "Register a new Customers Group and save it.": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17d2\u179a\u17bb\u1798\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793 \u1793\u17b7\u1784\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "Edit Customers Group": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Modify Customers group.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u17d4", + "Return to Customers Groups": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u179c\u17b7\u1789", + "Reward System": "\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179b\u17be\u1780\u1791\u17b9\u1780\u1785\u17b7\u178f\u17d2\u178f", + "Select which Reward system applies to the group": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u178a\u17c2\u179b\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1785\u17c6\u1796\u17c4\u17c7\u1780\u17d2\u179a\u17bb\u1798", + "Minimum Credit Amount": "\u1785\u17c6\u1793\u17bd\u1793\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u17a5\u178e\u1791\u17b6\u1793\u17a2\u1794\u17d2\u1794\u1794\u179a\u1798\u17b6", + "Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0": "\u1780\u17c6\u178e\u178f\u17cb\u1787\u17b6\u1797\u17b6\u1782\u179a\u1799 \u178f\u17be\u17a2\u17d2\u179c\u17b8\u1787\u17b6\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u17a5\u178e\u1791\u17b6\u1793\u17a2\u1794\u17d2\u1794\u1794\u179a\u1798\u17b6\u178a\u17c6\u1794\u17bc\u1784\u178a\u17c2\u179b\u1792\u17d2\u179c\u17be\u17a1\u17be\u1784\u178a\u17c4\u1799\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u1793\u17c5\u1780\u17d2\u1793\u17bb\u1784\u1780\u17d2\u179a\u17bb\u1798 \u1780\u17d2\u1793\u17bb\u1784\u1780\u179a\u178e\u17b8\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u17a5\u178e\u1791\u17b6\u1793\u17d4 \u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u1791\u17bb\u1780\u1791\u17c5 \"0", + "A brief description about what this group is about": "\u1780\u17b6\u179a\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u179f\u1784\u17d2\u1781\u17c1\u1794\u17a2\u17c6\u1796\u17b8\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u1780\u17d2\u179a\u17bb\u1798\u1793\u17c1\u17c7\u1793\u17b7\u1799\u17b6\u1799\u17a2\u17c6\u1796\u17b8", + "Created On": "\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u1793\u17c5", + "You\\'re not allowed to do this operation": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1792\u17d2\u179c\u17be\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17c1\u17c7\u1791\u17c1\u17d4", + "Customer Orders List": "\u1794\u1789\u17d2\u1787\u17b8\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u179a\u1791\u17b7\u1789\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Display all customer orders.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179a\u17b6\u179b\u17cb\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No customer orders has been registered": "\u1782\u17d2\u1798\u17b6\u1793\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17c1\u17d4", + "Add a new customer order": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Create a new customer order": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Register a new customer order and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit customer order": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u179a\u1794\u179f\u17cb\u17a2\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Modify Customer Order.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u179a\u1794\u179f\u17cb\u17a2\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Return to Customer Orders": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Change": "\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a", + "Created at": "\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u1793\u17c5", + "Customer Id": "Id \u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Delivery Status": "\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u1780\u17b6\u179a\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793", + "Discount Percentage": "\u1785\u17bb\u17c7\u178f\u1798\u17d2\u179b\u17c3\u1787\u17b6\u1797\u17b6\u1782\u179a\u1799", + "Discount Type": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1793\u17c3\u1780\u17b6\u179a\u1785\u17bb\u17c7\u178f\u1798\u17d2\u179b\u17c3", + "Final Payment Date": "\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1785\u17bb\u1784\u1780\u17d2\u179a\u17c4\u1799", + "Tax Excluded": "\u1798\u17b7\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1796\u1793\u17d2\u1792", + "Tax Included": "\u179a\u17bc\u1798\u1794\u1789\u17d2\u1785\u17bc\u179b\u1796\u1793\u17d2\u1792", + "Payment Status": "\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u1780\u17b6\u179a\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Process Status": "\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "Shipping": "\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793", + "Shipping Rate": "\u178f\u1798\u17d2\u179b\u17c3\u1793\u17c3\u1780\u17b6\u179a\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793", + "Shipping Type": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1793\u17c3\u1780\u17b6\u179a\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793", + "Sub Total": "\u179f\u179a\u17bb\u1794\u179a\u1784", + "Tax Value": "\u178f\u1798\u17d2\u179b\u17c3\u1796\u1793\u17d2\u1792", + "Tendered": "\u178a\u17c1\u1789\u1790\u17d2\u179b\u17c3", + "Title": "\u179f\u17d2\u179b\u17b6\u1780", + "Total installments": "\u179f\u179a\u17bb\u1794\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7", + "Updated at": "\u1794\u17b6\u1793\u1780\u17c2\u179a\u1794\u17d2\u179a\u17c2\u1793\u17c5", + "Voidance Reason": "\u17a0\u17c1\u178f\u17bb\u1795\u179b\u200b\u1793\u17c3\u1780\u17b6\u179a\u179b\u17bb\u1794", + "Customer Rewards List": "\u1794\u1789\u17d2\u1787\u17b8\u179b\u17be\u1780\u1791\u17b9\u1780\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Display all customer rewards.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No customer rewards has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1\u17d4", + "Add a new customer reward": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8", + "Create a new customer reward": "\u1794\u1784\u17d2\u1780\u17be\u178f\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8\u17d4", + "Register a new customer reward and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit customer reward": "\u1780\u17c2\u1794\u17d2\u179a\u17c2\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179b\u17be\u1780\u1791\u17b9\u1780\u1785\u17b7\u178f\u17d2\u178f\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u17d4", + "Modify Customer Reward.": "\u1780\u17c2\u1794\u17d2\u179a\u17c2\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179b\u17be\u1780\u1791\u17b9\u1780\u1785\u17b7\u178f\u17d2\u178f\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u17d4", + "Return to Customer Rewards": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179b\u17be\u1780\u1791\u17b9\u1780\u1785\u17b7\u178f\u17d2\u178f\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Points": "\u1796\u17b7\u1793\u17d2\u1791\u17bb\u179a", + "Target": "\u1795\u17d2\u178f\u17c4\u178f", + "Reward Name": "\u179f\u17d2\u1798\u17c4\u17c7\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179b\u17be\u1780\u1791\u17b9\u1780\u1785\u17b7\u178f\u17d2\u178f", + "Last Update": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1785\u17bb\u1784\u1780\u17d2\u179a\u17c4\u1799", + "Product Histories": "\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1795\u179b\u17b7\u178f\u1795\u179b", + "Display all product stock flow.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179b\u17c6\u17a0\u17bc\u179a\u179f\u17d2\u178f\u17bb\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No products stock flow has been registered": "\u1782\u17d2\u1798\u17b6\u1793\u179b\u17c6\u17a0\u17bc\u179a\u179f\u17d2\u178f\u17bb\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1794\u1789\u17d2\u1787\u17b8\u1791\u17c1\u17d4", + "Add a new products stock flow": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u179b\u17c6\u17a0\u17bc\u179a\u179f\u17d2\u178f\u17bb\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8\u17d4", + "Create a new products stock flow": "\u1794\u1784\u17d2\u1780\u17be\u178f\u179b\u17c6\u17a0\u17bc\u179a\u179f\u17d2\u178f\u17bb\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8\u17d4", + "Register a new products stock flow and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u179b\u17c6\u17a0\u17bc\u179a\u179f\u17d2\u178f\u17bb\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit products stock flow": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179b\u17c6\u17a0\u17bc\u179a\u179f\u17d2\u178f\u17bb\u1780\u1795\u179b\u17b7\u178f\u1795\u179b", + "Modify Globalproducthistorycrud.": "\u1780\u17c2\u1794\u17d2\u179a\u17c2\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1795\u179b\u17b7\u178f\u1795\u179b\u179f\u1780\u179b\u17d4", + "Return to Product Histories": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5 \u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1795\u179b\u17b7\u178f\u1795\u179b", + "Product": "\u1795\u179b\u17b7\u178f\u1795\u179b", + "Procurement": "\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Unit": "\u17af\u1780\u178f\u17b6", + "Initial Quantity": "\u1794\u179a\u17b7\u1798\u17b6\u178e\u178a\u17c6\u1794\u17bc\u1784", + "Quantity": "\u1794\u179a\u17b7\u1798\u17b6\u178e", + "New Quantity": "\u1794\u179a\u17b7\u1798\u17b6\u178e\u1790\u17d2\u1798\u17b8", + "Total Price": "\u178f\u1798\u17d2\u179b\u17c3\u179f\u179a\u17bb\u1794", + "Hold Orders List": "\u1794\u1789\u17d2\u1787\u17b8\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1780\u17c6\u1796\u17bb\u1784\u179a\u1784\u17cb\u1785\u17b6\u17c6", + "Display all hold orders.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1780\u17c6\u1796\u17bb\u1784\u179a\u1784\u17cb\u1785\u17b6\u17c6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No hold orders has been registered": "\u1782\u17d2\u1798\u17b6\u1793\u200b\u1780\u17b6\u179a\u200b\u1794\u1789\u17d2\u1787\u17b6\u200b\u1791\u17b7\u1789\u200b\u1780\u17c6\u1796\u17bb\u1784\u179a\u1784\u17cb\u1785\u17b6\u17c6\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17c1", + "Add a new hold order": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1780\u17c6\u1796\u17bb\u1784\u179a\u1784\u17cb\u1785\u17b6\u17c6", + "Create a new hold order": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1780\u17c6\u1796\u17bb\u1784\u179a\u1784\u17cb\u1785\u17b6\u17c6", + "Register a new hold order and save it.": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1780\u17c6\u1796\u17bb\u1784\u179a\u1784\u17cb\u1785\u17b6\u17c6 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "Edit hold order": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1780\u17c6\u1796\u17bb\u1784\u179a\u1784\u17cb\u1785\u17b6\u17c6", + "Modify Hold Order.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1780\u17c6\u1796\u17bb\u1784\u179a\u1784\u17cb\u1785\u17b6\u17c6\u17d4", + "Return to Hold Orders": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1780\u17c6\u1796\u17bb\u1784\u179a\u1784\u17cb\u1785\u17b6\u17c6\u179c\u17b7\u1789", + "Updated At": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1793\u17c5", + "Continue": "\u1794\u1793\u17d2\u178f", + "Restrict the orders by the creation date.": "\u178a\u17b6\u1780\u17cb\u1780\u1798\u17d2\u179a\u17b7\u178f\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c4\u1799\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1794\u1784\u17d2\u1780\u17be\u178f\u17d4", + "Paid": "\u1794\u17b6\u1793\u1794\u1784\u17cb", + "Hold": "\u179a\u1784\u17cb\u1785\u17b6\u17c6", + "Partially Paid": "\u1794\u17b6\u1793\u1794\u1784\u17cb\u1787\u17b6\u178a\u17c6\u178e\u17b6\u1780\u17cb\u1780\u17b6\u179b", + "Partially Refunded": "\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1787\u17b6\u178a\u17c6\u178e\u17b6\u1780\u17cb\u1780\u17b6\u179b", + "Refunded": "\u1794\u17b6\u1793\u1791\u17bc\u179a\u1791\u17b6\u178f\u17cb\u179f\u1784", + "Unpaid": "\u1798\u17b7\u1793\u1791\u17b6\u1793\u17cb\u1794\u1784\u17cb", + "Voided": "\u1794\u17b6\u1793\u179b\u17bb\u1794", + "Due": "\u1787\u17c6\u1796\u17b6\u1780\u17cb", + "Due With Payment": "\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1794\u1784\u17cb\u1793\u17c5\u179f\u179b\u17cb", + "Restrict the orders by the author.": "\u178a\u17b6\u1780\u17cb\u1780\u1798\u17d2\u179a\u17b7\u178f\u179b\u17be\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c4\u1799\u17a2\u17d2\u1793\u1780\u1794\u1784\u17d2\u1780\u17be\u178f\u17d4", + "Restrict the orders by the customer.": "\u178a\u17b6\u1780\u17cb\u1780\u1798\u17d2\u179a\u17b7\u178f\u179b\u17be\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c4\u1799\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u17d4", + "Customer Phone": "\u179b\u17c1\u1781\u1791\u17bc\u179a\u179f\u1796\u17d2\u1791\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Restrict orders using the customer phone number.": "\u178a\u17b6\u1780\u17cb\u1780\u1798\u17d2\u179a\u17b7\u178f\u179b\u17be\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u1791\u17bc\u179a\u179f\u17d0\u1796\u17d2\u1791\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u17d4", + "Cash Register": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Restrict the orders to the cash registers.": "\u178a\u17b6\u1780\u17cb\u1780\u1798\u17d2\u179a\u17b7\u178f\u179b\u17be\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1791\u17c5\u1794\u1789\u17d2\u1787\u17b8\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u17d4", + "Orders List": "\u1794\u1789\u17d2\u1787\u17b8\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Display all orders.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No orders has been registered": "\u1782\u17d2\u1798\u17b6\u1793\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1\u17d4", + "Add a new order": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1790\u17d2\u1798\u17b8", + "Create a new order": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1790\u17d2\u1798\u17b8", + "Register a new order and save it.": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit order": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Modify Order.": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u17d4", + "Return to Orders": "\u178f\u17d2\u179a\u179b\u1794\u17cb\u1791\u17c5\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Discount Rate": "\u17a2\u178f\u17d2\u179a\u17b6\u200b\u1794\u1789\u17d2\u1785\u17bb\u17c7\u178f\u1798\u17d2\u179b\u17c3", + "The order and the attached products has been deleted.": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789 \u1793\u17b7\u1784\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1798\u1780\u1787\u17b6\u1798\u17bd\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "Options": "\u1787\u1798\u17d2\u179a\u17be\u179f", + "Refund Receipt": "\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789", + "Invoice": "\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a", + "Receipt": "\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3", + "Order Instalments List": "\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u1789\u17d2\u1787\u17b8\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7", + "Display all Order Instalments.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179a\u17b6\u179b\u17cb\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u17d4", + "No Order Instalment has been registered": "\u1782\u17d2\u1798\u17b6\u1793\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17c1\u17d4", + "Add a new Order Instalment": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u1790\u17d2\u1798\u17b8", + "Create a new Order Instalment": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u1790\u17d2\u1798\u17b8", + "Register a new Order Instalment and save it.": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit Order Instalment": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7", + "Modify Order Instalment.": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u17d4", + "Return to Order Instalment": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u179c\u17b7\u1789", + "Order Id": "Id \u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Payment Types List": "\u1794\u1789\u17d2\u1787\u17b8\u1793\u17c3\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb", + "Display all payment types.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No payment types has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17c1\u17d4", + "Add a new payment type": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1790\u17d2\u1798\u17b8", + "Create a new payment type": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1790\u17d2\u1798\u17b8\u17d4", + "Register a new payment type and save it.": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit payment type": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb", + "Modify Payment Type.": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u17d4", + "Return to Payment Types": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u179c\u17b7\u1789\u17d4", + "Label": "\u179f\u17d2\u179b\u17b6\u1780", + "Provide a label to the resource.": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb\u179f\u17d2\u179b\u17b6\u1780\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb resource.", + "Active": "\u179f\u1780\u1798\u17d2\u1798", + "Priority": "\u17a2\u17b6\u1791\u17b7\u1797\u17b6\u1796", + "Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".": "\u1780\u17c6\u178e\u178f\u17cb\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u17d4 \u179b\u17c1\u1781\u1791\u17b6\u1794\u1787\u17b6\u1784\u1793\u17c1\u17c7 \u1791\u17b8\u1798\u17bd\u1799\u179c\u17b6\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1793\u17c5\u179b\u17be\u1795\u17d2\u1791\u17b6\u17c6\u1784\u1791\u17bc\u1791\u17b6\u178f\u17cb\u17d4 \u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798\u1796\u17b8 \"0\" \u17d4", + "Identifier": "\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e", + "A payment type having the same identifier already exists.": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1793\u17c3\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178a\u17c2\u179b\u1798\u17b6\u1793\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e\u178a\u17bc\u1785\u1782\u17d2\u1793\u17b6\u1798\u17b6\u1793\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d4", + "Unable to delete a read-only payments type.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17bb\u1794\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb (\u1794\u17b6\u1793\u178f\u17c2\u17a2\u17b6\u1793) \u1791\u17c1\u17d4", + "Readonly": "\u1794\u17b6\u1793\u178f\u17c2\u17a2\u17b6\u1793\u1794\u17c9\u17bb\u178e\u17d2\u178e\u17c4\u17c7", + "Procurements List": "\u1794\u1789\u17d2\u1787\u17b8\u1793\u17c3\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Display all procurements.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No procurements has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17c1\u17d4", + "Add a new procurement": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u1790\u17d2\u1798\u17b8", + "Create a new procurement": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u1790\u17d2\u1798\u17b8", + "Register a new procurement and save it.": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "Edit procurement": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Modify Procurement.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u17d4", + "Return to Procurements": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u179c\u17b7\u1789", + "Provider Id": "Id \u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb", + "Total Items": "\u1791\u17c6\u1793\u17b7\u1789\u179f\u179a\u17bb\u1794", + "Provider": "\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb", + "Invoice Date": "\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a", + "Sale Value": "\u1791\u17c6\u17a0\u17c6\u1780\u17b6\u179a\u179b\u1780\u17cb", + "Purchase Value": "\u1791\u17c6\u17a0\u17c6\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Taxes": "\u1796\u1793\u17d2\u1792", + "Set Paid": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u1794\u17b6\u1793\u1794\u1784\u17cb", + "Would you like to mark this procurement as paid?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1780\u17c6\u178e\u178f\u17cb\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u1793\u17c1\u17c7\u1790\u17b6\u1794\u17b6\u1793\u1794\u1784\u17cb\u1791\u17c1?", + "Refresh": "\u179b\u17c4\u178f\u1791\u17c6\u1796\u17d0\u179a\u1798\u17d2\u178f\u1784\u1791\u17c0\u178f", + "Would you like to refresh this ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179b\u17c4\u178f\u1791\u17c6\u1796\u17d0\u179a\u1798\u17d2\u178f\u1784\u1791\u17c0\u178f\u1791\u17c1?", + "Procurement Products List": "\u1794\u1789\u17d2\u1787\u17b8\u1795\u179b\u17b7\u1795\u179b\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Display all procurement products.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1795\u179b\u17b7\u178f\u1795\u179b\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No procurement products has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1795\u179b\u17b7\u178f\u1795\u179b\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17c1", + "Add a new procurement product": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1795\u179b\u17b7\u1795\u179b\u1790\u17d2\u1798\u17b8\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Create a new procurement product": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1795\u179b\u17b7\u1795\u179b\u1790\u17d2\u1798\u17b8\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Register a new procurement product and save it.": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "Edit procurement product": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1795\u179b\u17b7\u178f\u1795\u179b\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Modify Procurement Product.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1795\u179b\u17b7\u178f\u1795\u179b\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Return to Procurement Products": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1780\u17b6\u1793\u17cb\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1795\u179b\u17b7\u1795\u179b\u1785\u17bc\u179b", + "Expiration Date": "\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u17a0\u17bd\u179f\u1780\u17c6\u178e\u178f\u17cb", + "Define what is the expiration date of the product.": "\u1780\u17c6\u178e\u178f\u17cb\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb\u179a\u1794\u179f\u17cb\u1795\u179b\u17b7\u1795\u179b\u17d4", + "Barcode": "\u1780\u17bc\u178a\u1795\u179b\u17b7\u178f\u1795\u179b", + "On": "\u1794\u17be\u1780", + "Category Products List": "\u1794\u1789\u17d2\u1787\u17b8\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b", + "Display all category products.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No category products has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17c1", + "Add a new category product": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8", + "Create a new category product": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u1795\u179b\u1790\u17d2\u1798\u17b8", + "Register a new category product and save it.": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1794\u17d2\u179a\u17c1\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "Edit category product": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b", + "Modify Category Product.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Return to Category Products": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b\u179c\u17b7\u1789", + "No Parent": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1798\u17c1", + "Preview": "\u1794\u1784\u17d2\u17a0\u17b6\u1789", + "Provide a preview url to the category.": "\u1794\u1789\u17d2\u1785\u17bc\u179b url \u178a\u17c2\u179b\u17a2\u17b6\u1785\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1791\u17c5\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Displays On POS": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1793\u17c5\u179b\u17be\u1795\u17d2\u1791\u17b6\u17c6\u1784\u179b\u1780\u17cb", + "If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.": "\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u1785\u17bb\u1785\u1791\u17c5\u1791\u17c1 \u1793\u17c4\u17c7\u1795\u179b\u17b7\u178f\u1795\u179b\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17b6\u178f\u17cb\u1790\u17d2\u1793\u17b6\u1780\u17cb\u1780\u17d2\u1793\u17bb\u1784\u1794\u17d2\u179a\u1797\u17c1\u1791\u1793\u17c1\u17c7 \u17ac\u1794\u17d2\u179a\u1797\u17c1\u1791\u179a\u1784\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb \u1793\u17b9\u1784\u1798\u17b7\u1793\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1793\u17c5\u1798\u17c9\u17b6\u179f\u17ca\u17b8\u1793\u1786\u17bc\u178f\u1780\u17b6\u178f\u1791\u17c1\u17d4", + "Parent": "\u1798\u17c1", + "If this category should be a child category of an existing category": "\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b\u1782\u17bd\u179a\u1787\u17b6\u1780\u17bc\u1793\u1785\u17c5\u179a\u1794\u179f\u17cb\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u1795\u179b\u178a\u17c2\u179b\u1798\u17b6\u1793\u179f\u17d2\u179a\u17b6\u1794\u17cb", + "Total Products": "\u1795\u179b\u17b7\u178f\u1795\u179b\u179f\u179a\u17bb\u1794", + "Products List": "\u1794\u1789\u17d2\u1787\u17b8\u1795\u179b\u17b7\u178f\u1795\u179b\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb", + "Display all products.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1795\u179b\u17b7\u178f\u1795\u179b\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No products has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1793\u17c4\u17c7\u1791\u17c1", + "Add a new product": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8", + "Create a new product": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8", + "Register a new product and save it.": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "Edit product": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1795\u179b\u17b7\u178f\u1795\u179b", + "Modify Product.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Return to Products": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1780\u17b6\u1793\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u179c\u17b7\u1789", + "Assigned Unit": "\u1780\u17c6\u178e\u178f\u17cb\u17af\u1780\u178f\u17b6", + "The assigned unit for sale": "\u17af\u1780\u178f\u17b6\u178a\u17c2\u179b\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u179b\u1780\u17cb", + "Convert Unit": "\u1794\u1798\u17d2\u179b\u17c2\u1784\u17af\u1780\u178f\u17b6", + "The unit that is selected for convertion by default.": "\u17af\u1780\u178f\u17b6\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17b6\u179a\u1794\u17c6\u1794\u17d2\u179b\u17c2\u1784\u178f\u17b6\u1798\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\u17d4", + "Sale Price": "\u178f\u1798\u17d2\u179b\u17c3\u179b\u1780\u17cb", + "Define the regular selling price.": "\u1780\u17c6\u178e\u178f\u17cb\u178f\u1798\u17d2\u179b\u17c3\u179b\u1780\u17cb\u1792\u1798\u17d2\u1798\u178f\u17b6\u17d4", + "Wholesale Price": "\u178f\u1798\u17d2\u179b\u17c3\u200b\u179b\u1780\u17cb\u178a\u17bb\u17c6", + "Define the wholesale price.": "\u1780\u17c6\u178e\u178f\u17cb\u178f\u1798\u17d2\u179b\u17c3\u179b\u1780\u17cb\u178a\u17bb\u17c6\u17d4", + "COGS": "COGS", + "Used to define the Cost of Goods Sold.": "\u1794\u17d2\u179a\u17be\u178a\u17be\u1798\u17d2\u1794\u17b8\u1780\u17c6\u178e\u178f\u17cb\u178f\u1798\u17d2\u179b\u17c3\u178a\u17be\u1798\u1793\u17c3\u1791\u17c6\u1793\u17b7\u1789\u178a\u17c2\u179b\u1794\u17b6\u1793\u179b\u1780\u17cb\u17d4", + "Stock Alert": "\u1787\u17bc\u1793\u178a\u17c6\u178e\u17b9\u1784\u17a2\u17c6\u1796\u17b8\u179f\u17d2\u178f\u17bb\u1780", + "Define whether the stock alert should be enabled for this unit.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u1780\u17b6\u179a\u1787\u17bc\u1793\u178a\u17c6\u178e\u17b9\u1784\u17a2\u17c6\u1796\u17b8\u179f\u17d2\u178f\u17bb\u1780\u1782\u17bd\u179a\u178f\u17c2\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17be\u1780\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u1784\u17d2\u1782\u1797\u17b6\u1796\u1793\u17c1\u17c7\u17ac\u17a2\u178f\u17cb\u17d4", + "Low Quantity": "\u1794\u179a\u17b7\u1798\u17b6\u178e\u1791\u17b6\u1794", + "Which quantity should be assumed low.": "\u178f\u17be\u1794\u179a\u17b7\u1798\u17b6\u178e\u178e\u17b6\u178a\u17c2\u179b\u1782\u17bd\u179a\u179f\u1793\u17d2\u1798\u178f\u1790\u17b6\u1793\u17c5\u179f\u179b\u17cb\u178f\u17b7\u1785\u17d4", + "Visible": "\u178a\u17c2\u179b\u1798\u17be\u179b\u1783\u17be\u1789", + "Define whether the unit is available for sale.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u17af\u1780\u178f\u17b6\u1793\u17c1\u17c7\u1798\u17b6\u1793\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u179b\u1780\u17cb\u178a\u17c2\u179a\u17ac\u1791\u17c1\u17d4", + "Preview Url": "Url \u178a\u17c2\u179b\u17a2\u17b6\u1785\u1794\u1784\u17d2\u17a0\u17b6\u1789", + "Provide the preview of the current unit.": "\u1795\u17d2\u178f\u179b\u17cb\u1780\u17b6\u179a\u1798\u17be\u179b\u1787\u17b6\u1798\u17bb\u1793\u1793\u17c3\u17af\u1780\u178f\u17b6\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u17d4", + "Identification": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e", + "Product unique name. If it\\' variation, it should be relevant for that variation": "\u1788\u17d2\u1798\u17c4\u17c7\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17c2\u1798\u17bd\u1799\u1782\u178f\u17cb\u17d4 \u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u179c\u17b6\u1787\u17b6\u1794\u17c6\u179a\u17c2\u1794\u17c6\u179a\u17bd\u179b \u179c\u17b6\u1782\u17bd\u179a\u178f\u17c2\u1796\u17b6\u1780\u17cb\u1796\u17d0\u1793\u17d2\u1792\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1794\u17c6\u179a\u17c2\u1794\u17c6\u179a\u17bd\u179b\u1793\u17c4\u17c7\u17d4", + "Select to which category the item is assigned.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1794\u17d2\u179a\u1797\u17c1\u1791\u178e\u17b6\u178a\u17c2\u179b\u1792\u17b6\u178f\u17bb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17b6\u178f\u17cb\u178f\u17b6\u17c6\u1784\u17d4", + "Category": "\u1794\u17d2\u179a\u1797\u17c1\u1791", + "Define the barcode value. Focus the cursor here before scanning the product.": "\u1780\u17c6\u178e\u178f\u17cb\u178f\u1798\u17d2\u179b\u17c3\u1794\u17b6\u1780\u17bc\u178a\u17d4 \u1795\u17d2\u178f\u17c4\u178f\u179b\u17be\u1791\u179f\u17d2\u179f\u1793\u17cd\u1791\u17d2\u179a\u1793\u17b7\u1785\u1793\u17c5\u1791\u17b8\u1793\u17c1\u17c7 \u1798\u17bb\u1793\u1796\u17c1\u179b\u179f\u17d2\u1780\u17c1\u1793\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Define a unique SKU value for the product.": "\u1780\u17c6\u178e\u178f\u17cb\u178f\u1798\u17d2\u179b\u17c3 SKU \u178f\u17c2\u1798\u17bd\u1799\u1782\u178f\u17cb\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "SKU": "SKU", + "Define the barcode type scanned.": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u17d2\u179a\u1797\u17c1\u1791\u1794\u17b6\u1780\u17bc\u178a\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1780\u17c1\u1793\u17d4", + "EAN 8": "EAN 8", + "EAN 13": "EAN 13", + "Codabar": "Codabar", + "Code 128": "Code 128", + "Code 39": "Code 39", + "Code 11": "Code 11", + "UPC A": "UPC A", + "UPC E": "UPC E", + "Barcode Type": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1794\u17b6\u1780\u17bc\u178a", + "Materialized Product": "\u1795\u179b\u17b7\u178f\u1795\u179b\u179f\u1798\u17d2\u1797\u17b6\u179a\u17c8", + "Dematerialized Product": "\u1795\u179b\u17b7\u178f\u1795\u179b\u1781\u17bc\u1785\u1782\u17bb\u178e\u1797\u17b6\u1796", + "Grouped Product": "\u1795\u179b\u17b7\u178f\u1795\u179b\u1787\u17b6\u1780\u17d2\u179a\u17bb\u1798", + "Define the product type. Applies to all variations.": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4 \u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1785\u17c6\u1796\u17c4\u17c7\u1780\u17b6\u179a\u1794\u17d2\u179a\u17c2\u1794\u17d2\u179a\u17bd\u179b\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "Product Type": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b", + "On Sale": "\u1798\u17b6\u1793\u179b\u1780\u17cb", + "Hidden": "\u179b\u17b6\u1780\u17cb\u1791\u17bb\u1780", + "Define whether the product is available for sale.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u1795\u179b\u17b7\u178f\u1795\u179b\u1798\u17b6\u1793\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u179b\u1780\u17cb\u178a\u17c2\u179a\u17ac\u1791\u17c1\u17d4", + "Enable the stock management on the product. Will not work for service or uncountable products.": "\u1794\u17be\u1780\u1780\u17b6\u179a\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u179f\u17d2\u178f\u17bb\u1780\u179b\u17be\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4 \u1793\u17b9\u1784\u1798\u17b7\u1793\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u179f\u17c1\u179c\u17b6\u1780\u1798\u17d2\u1798 \u17ac\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179a\u17b6\u1794\u17cb\u1794\u17b6\u1793\u17a1\u17be\u1799\u17d4", + "Stock Management Enabled": "\u1794\u17b6\u1793\u1794\u17be\u1780\u1780\u17b6\u179a\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u179f\u17d2\u178f\u17bb\u1780", + "Groups": "\u1780\u17d2\u179a\u17bb\u1798", + "Units": "\u17af\u1780\u178f\u17b6", + "What unit group applies to the actual item. This group will apply during the procurement.": "\u178f\u17be\u1780\u17d2\u179a\u17bb\u1798\u178e\u17b6\u178a\u17c2\u179b\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1785\u17c6\u1796\u17c4\u17c7\u1792\u17b6\u178f\u17bb\u1796\u17b7\u178f\u17d4 \u1780\u17d2\u179a\u17bb\u1798\u1793\u17c1\u17c7\u1793\u17b9\u1784\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1780\u17d2\u1793\u17bb\u1784\u17a2\u17c6\u17a1\u17bb\u1784\u1796\u17c1\u179b\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u17d4", + "Unit Group": "Unit Group", + "The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u1793\u17b9\u1784\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1798\u17be\u179b\u1783\u17be\u1789\u1793\u17c5\u179b\u17be\u1780\u17d2\u179a\u17a1\u17b6\u1785\u178f\u17d2\u179a\u1784\u17d2\u1782 \u17a0\u17be\u1799\u17a2\u17b6\u1785\u1791\u17b6\u1789\u1799\u1780\u1794\u17b6\u1793\u178f\u17c2\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u17a2\u17b6\u1793\u1794\u17b6\u1780\u17bc\u178a \u17ac\u1794\u17b6\u1780\u17bc\u178a\u178a\u17c2\u179b\u1796\u17b6\u1780\u17cb\u1796\u17d0\u1793\u17d2\u1792\u1794\u17c9\u17bb\u178e\u17d2\u178e\u17c4\u17c7\u17d4", + "Accurate Tracking": "\u1780\u17b6\u179a\u178f\u17b6\u1798\u178a\u17b6\u1793\u1797\u17b6\u1796\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c", + "The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.": "\u178f\u1798\u17d2\u179b\u17c3\u1793\u17c3\u1791\u17c6\u1793\u17b7\u1789\u178a\u17c2\u179b\u1794\u17b6\u1793\u179b\u1780\u17cb\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u178e\u1793\u17b6\u178a\u17c4\u1799\u179f\u17d2\u179c\u17d0\u1799\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u178a\u17c4\u1799\u1795\u17d2\u17a2\u17c2\u1780\u179b\u17be\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798 \u1793\u17b7\u1784\u1780\u17b6\u179a\u1794\u17c6\u1794\u17d2\u179b\u17c2\u1784\u17d4", + "Auto COGS": "COGS \u179f\u17d2\u179c\u17d0\u1799\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7", + "Determine the unit for sale.": "\u1780\u17c6\u178e\u178f\u17cb\u17af\u1780\u178f\u17b6\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u179b\u1780\u17cb\u17d4", + "Selling Unit": "\u17af\u1780\u178f\u17b6\u179b\u1780\u17cb", + "Expiry": "\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb", + "Product Expires": "\u1795\u179b\u17b7\u178f\u1795\u179b\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb", + "Set to \"No\" expiration time will be ignored.": "\u1780\u17c6\u178e\u178f\u17cb\u178a\u17b6\u1780\u17cb \"\u1791\u17c1\" \u1796\u17c1\u179b\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1798\u17b7\u1793\u17a2\u17be\u1796\u17be\u17d4", + "Prevent Sales": "\u1780\u17b6\u179a\u179b\u1780\u17cb\u1798\u17bb\u1793\u17d7", + "Allow Sales": "\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u179b\u1780\u17cb", + "Determine the action taken while a product has expired.": "\u1780\u17c6\u178e\u178f\u17cb\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u178a\u17c2\u179b\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u17a1\u17be\u1784\u1781\u178e\u17c8\u1796\u17c1\u179b\u178a\u17c2\u179b\u1795\u179b\u17b7\u178f\u1795\u179b\u1798\u17bd\u1799\u1794\u17b6\u1793\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb\u17d4", + "On Expiration": "\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb\u1793\u17c5", + "Choose Group": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1780\u17d2\u179a\u17bb\u1798", + "Select the tax group that applies to the product\/variation.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792\u178a\u17c2\u179b\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1785\u17c6\u1796\u17c4\u17c7\u1795\u179b\u17b7\u178f\u1795\u179b\/\u1794\u17c6\u179a\u17c2\u1794\u17c6\u179a\u17bd\u179b\u17d4", + "Tax Group": "\u1780\u17d2\u179a\u17bb\u1798\u1793\u17c3\u1796\u1793\u17d2\u1792", + "Inclusive": "\u179a\u17bd\u1798\u1794\u1789\u17d2\u1785\u17bc\u179b", + "Exclusive": "\u1798\u17b7\u1793\u179a\u17bd\u1798\u1794\u1789\u17d2\u1785\u17bc\u179b", + "Define what is the type of the tax.": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u17d2\u179a\u1797\u17c1\u1791\u1796\u1793\u17d2\u1792\u17d4", + "Tax Type": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1796\u1793\u17d2\u1792", + "Images": "\u179a\u17bc\u1794\u1797\u17b6\u1796", + "Image": "\u179a\u17bc\u1794\u1797\u17b6\u1796", + "Choose an image to add on the product gallery": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u179a\u17bc\u1794\u1797\u17b6\u1796\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u1793\u17d2\u1790\u17c2\u1798\u179b\u17be\u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a\u179f\u17b6\u179b\u1795\u179b\u17b7\u178f\u1795\u179b", + "Is Primary": "\u1787\u17b6\u1782\u17c4\u179b", + "Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u179a\u17bc\u1794\u1797\u17b6\u1796\u1782\u17bd\u179a\u178f\u17c2\u1787\u17b6\u179a\u17bc\u1794\u1797\u17b6\u1796\u1785\u1798\u17d2\u1794\u1784\u17d4 \u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u1798\u17b6\u1793\u179a\u17bc\u1794\u1797\u17b6\u1796\u1785\u1798\u17d2\u1794\u1784\u1785\u17d2\u179a\u17be\u1793\u1787\u17b6\u1784\u1798\u17bd\u1799 \u179a\u17bc\u1794\u1790\u178f\u1798\u17bd\u1799\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u17d2\u1793\u1780\u17d4", + "Sku": "Sku", + "Materialized": "\u179f\u1798\u17d2\u1797\u17b6\u179a\u17c8", + "Dematerialized": "\u179f\u1798\u17d2\u1797\u17b6\u179a\u17c8\u178a\u17c2\u179b\u17a2\u17b6\u1785\u1781\u17bc\u1785\u1782\u17bb\u178e\u1797\u17b6\u1796", + "Grouped": "\u178a\u17b6\u1780\u17cb\u1787\u17b6\u1780\u17d2\u179a\u17bb\u1798", + "Unknown Type: %s": ":\u1794\u17d2\u179a\u1797\u17c1\u1791\u1798\u17b7\u1793\u179f\u17d2\u1782\u17b6\u179b\u17cb %s", + "Disabled": "\u1794\u17b7\u1791", + "Available": "\u1794\u17d2\u179a\u17be\u1794\u17b6\u1793", + "Unassigned": "\u1798\u17b7\u1793\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u178f\u17b6\u17c6\u1784", + "See Quantities": "\u1798\u17be\u179b\u1794\u179a\u17b7\u1798\u17b6\u178e", + "See History": "\u1798\u17be\u179b\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7", + "Would you like to delete selected entries ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179b\u17bb\u1794\u1792\u17b6\u178f\u17bb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1791\u17c1?", + "Display all product histories.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1795\u179b\u17b7\u178f\u1795\u179b\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No product histories has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1\u17d4", + "Add a new product history": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8", + "Create a new product history": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8\u17d4", + "Register a new product history and save it.": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit product history": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1795\u179b\u17b7\u178f\u1795\u179b", + "Modify Product History.": "\u1780\u17c2\u1794\u17d2\u179a\u17c2\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "After Quantity": "\u1794\u179a\u17b7\u1798\u17b6\u178e\u1780\u17d2\u179a\u17c4\u1799\u1798\u1780", + "Before Quantity": "\u1794\u179a\u17b7\u1798\u17b6\u1793\u1796\u17b8\u1798\u17bb\u1793", + "Order id": "id \u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Procurement Id": "Id \u1780\u17b6\u178f\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Procurement Product Id": "Id \u1795\u179b\u17b7\u178f\u1795\u179b\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Product Id": "Id \u1795\u179b\u17b7\u178f\u1795\u179b", + "Unit Id": "Id \u17af\u1780\u178f\u17b6", + "Unit Price": "\u178f\u1798\u17d2\u179b\u17c3\u200b\u17af\u1780\u178f\u17b6", + "P. Quantity": "P. \u1794\u179a\u17b7\u1798\u17b6\u178e", + "N. Quantity": "N. \u1794\u179a\u17b7\u1798\u17b6\u178e", + "Product Unit Quantities List": "\u1794\u1789\u17d2\u1787\u17b8\u1794\u179a\u17b7\u1798\u17b6\u178e\u17af\u1780\u178f\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b", + "Display all product unit quantities.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u179a\u17b7\u1798\u17b6\u178e\u17af\u1780\u178f\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No product unit quantities has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1794\u179a\u17b7\u1798\u17b6\u178e\u17af\u1780\u178f\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1", + "Add a new product unit quantity": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1794\u179a\u17b7\u1798\u17b6\u178e\u17af\u1780\u178f\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8", + "Create a new product unit quantity": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1794\u179a\u17b7\u1798\u17b6\u178e\u17af\u1780\u178f\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8\u17d4", + "Register a new product unit quantity and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1794\u179a\u17b7\u1798\u17b6\u178e\u17af\u1780\u178f\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit product unit quantity": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u179a\u17b7\u1798\u17b6\u178e\u17af\u1780\u178f\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b", + "Modify Product Unit Quantity.": "\u1780\u17c2\u1794\u17d2\u179a\u17c2\u1794\u179a\u17b7\u1798\u17b6\u178e\u17af\u1780\u178f\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Return to Product Unit Quantities": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5 \u1794\u179a\u17b7\u1798\u17b6\u178e\u17af\u1780\u178f\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b\u179c\u17b7\u1789", + "Product id": "\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b", + "Providers List": "\u1794\u1789\u17d2\u1787\u17b8\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb", + "Display all providers.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u179b\u17cb\u179f\u17c1\u179c\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No providers has been registered": "\u1782\u17d2\u1798\u17b6\u1793\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1", + "Add a new provider": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u179f\u17c1\u179c\u17b6\u1790\u17d2\u1798\u17b8", + "Create a new provider": "\u1794\u1784\u17d2\u1780\u17be\u178f\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u179f\u17c1\u179c\u17b6\u1790\u17d2\u1798\u17b8", + "Register a new provider and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit provider": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb", + "Modify Provider.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u17d4", + "Return to Providers": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1780\u17b6\u1793\u17cb\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb", + "Provide the provider email. Might be used to send automated email.": "\u1795\u17d2\u178f\u179b\u17cb\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u17d4 \u17a2\u17b6\u1785\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u178a\u17be\u1798\u17d2\u1794\u17b8\u1795\u17d2\u1789\u17be\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u178a\u17c4\u1799\u179f\u17d2\u179c\u17d0\u1799\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u17d4", + "Provider last name if necessary.": "\u1793\u17b6\u1798\u178f\u17d2\u179a\u1780\u17bc\u179b\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u1785\u17b6\u17c6\u1794\u17b6\u1785\u17cb\u17d4", + "Contact phone number for the provider. Might be used to send automated SMS notifications.": "\u179b\u17c1\u1781\u1791\u17bc\u179a\u179f\u17d0\u1796\u17d2\u1791\u1791\u17c6\u1793\u17b6\u1780\u17cb\u1791\u17c6\u1793\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u17d4 \u1794\u17d2\u179a\u17a0\u17c2\u179b\u1787\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u178a\u17be\u1798\u17d2\u1794\u17b8\u1795\u17d2\u1789\u17be\u1780\u17b6\u179a\u1787\u17bc\u1793\u178a\u17c6\u178e\u17b9\u1784 SMS \u178a\u17c4\u1799\u179f\u17d2\u179c\u17d0\u1799\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u17d4", + "Address 1": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b8\u17e1", + "First address of the provider.": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b8\u17e1\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u17d4", + "Address 2": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b8\u17e2", + "Second address of the provider.": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b8\u1796\u17b8\u179a\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u17d4", + "Further details about the provider": "\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u179b\u1798\u17d2\u17a2\u17b7\u178f\u1794\u1793\u17d2\u1790\u17c2\u1798\u17a2\u17c6\u1796\u17b8\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb", + "Amount Due": "\u1785\u17c6\u1793\u17bd\u1793\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u178a\u17c2\u179b\u1793\u17c5\u1787\u17c6\u1796\u17b6\u1780\u17cb", + "Amount Paid": "\u1785\u17c6\u1793\u17bd\u1793\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u1784\u17cb", + "See Procurements": "\u1798\u17be\u179b\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b", + "See Products": "\u1798\u17be\u179b\u1795\u179b\u17b7\u178f\u1795\u179b", + "Provider Procurements List": "\u1794\u1789\u17d2\u1787\u17b8\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1791\u17c6\u1793\u17b7\u1789\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Display all provider procurements.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1791\u17c6\u1793\u17b7\u1789\u1791\u17b7\u1789\u1785\u17bc\u179b\u17d4", + "No provider procurements has been registered": "\u1782\u17d2\u1798\u17b6\u1793\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1791\u17c6\u1793\u17b7\u1789\u1791\u17b7\u1789\u1785\u17bc\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1\u17d4", + "Add a new provider procurement": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1791\u17c6\u1793\u17b7\u1789\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Create a new provider procurement": "\u1794\u1784\u17d2\u1780\u17be\u178f\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1791\u17c6\u1793\u17b7\u1789\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Register a new provider procurement and save it.": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1794\u1793\u17d2\u1790\u17c2\u1798\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1791\u17c6\u1793\u17b7\u1789\u1791\u17b7\u1789\u1785\u17bc\u179b \u1793\u17b7\u1784\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "Edit provider procurement": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1791\u17c6\u1793\u17b7\u1789\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Modify Provider Procurement.": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1791\u17c6\u1793\u17b7\u1789\u1791\u17b7\u1789\u1785\u17bc\u179b.", + "Return to Provider Procurements": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1791\u17c6\u1793\u17b7\u1789\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Delivered On": "\u1794\u17b6\u1793\u178a\u17b9\u1780\u1787\u1789\u17d2\u1785\u17bc\u1793\u1793\u17c5", + "Tax": "\u1796\u1793\u17d2\u1792", + "Delivery": "\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793", + "Payment": "\u1780\u17b6\u179a\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Items": "\u1795\u179b\u17b7\u178f\u1795\u179b", + "Provider Products List": "\u1794\u1789\u17d2\u1787\u17b8\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b", + "Display all Provider Products.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No Provider Products has been registered": "\u1782\u17d2\u1798\u17b6\u1793\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1", + "Add a new Provider Product": "\u1782\u17d2\u1798\u17b6\u1793\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17c1", + "Create a new Provider Product": "\u1794\u1784\u17d2\u1780\u17be\u178f\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8", + "Register a new Provider Product and save it.": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit Provider Product": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b", + "Modify Provider Product.": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Return to Provider Products": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b", + "Purchase Price": "\u178f\u1798\u17d2\u179b\u17c3\u200b\u1791\u17b7\u1789", + "Registers List": "\u1794\u1789\u17d2\u1787\u17b8\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7", + "Display all registers.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No registers has been registered": "\u1782\u17d2\u1798\u17b6\u1793\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u178e\u17b6\u1798\u17bd\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17c1\u17d4", + "Add a new register": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7", + "Create a new register": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1790\u17d2\u1798\u17b8", + "Register a new register and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit register": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7", + "Modify Register.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u17d4", + "Return to Registers": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7", + "Closed": "\u1794\u17b6\u1793\u1794\u17b7\u1791", + "Define what is the status of the register.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u17a2\u17d2\u179c\u17b8\u1787\u17b6\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u1793\u17c3\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u17d4", + "Provide mode details about this cash register.": "\u1795\u17d2\u178f\u179b\u17cb\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u179b\u1798\u17d2\u17a2\u17b7\u178f\u17a2\u17c6\u1796\u17b8\u1791\u1798\u17d2\u179a\u1784\u17cb\u17a2\u17c6\u1796\u17b8\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1793\u17c1\u17c7\u17d4", + "Unable to delete a register that is currently in use": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u179b\u17bb\u1794\u200b\u1780\u17b6\u179a\u200b\u1785\u17bb\u17c7\u200b\u1788\u17d2\u1798\u17c4\u17c7\u200b\u178a\u17c2\u179b\u200b\u1780\u17c6\u1796\u17bb\u1784\u200b\u1794\u17d2\u179a\u17be\u200b\u1794\u17d2\u179a\u17b6\u179f\u17cb\u200b\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u200b\u1794\u17b6\u1793\u200b\u1791\u17c1\u17d4", + "Used By": "\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u178a\u17c4\u1799", + "Balance": "\u179f\u1798\u178f\u17bb\u179b\u17d2\u1799", + "Register History": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7", + "Register History List": "\u1794\u1789\u17d2\u1787\u17b8\u1794\u17d2\u179a\u179c\u17b7\u178f\u17d2\u178f\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7", + "Display all register histories.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No register histories has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1\u17d4", + "Add a new register history": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1790\u17d2\u1798\u17b8\u17d4", + "Create a new register history": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1790\u17d2\u1798\u17b8\u17d4", + "Register a new register history and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit register history": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7", + "Modify Registerhistory.": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u17d4", + "Return to Register History": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5 \u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1793\u17c3\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7", + "Register Id": "Id \u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7", + "Action": "\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796", + "Register Name": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1788\u17d2\u1798\u17c4\u17c7", + "Initial Balance": "\u179f\u1798\u178f\u17bb\u179b\u17d2\u1799\u178a\u17c6\u1794\u17bc\u1784", + "New Balance": "\u178f\u17bb\u179b\u17d2\u1799\u1797\u17b6\u1796\u1790\u17d2\u1798\u17b8", + "Transaction Type": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "Done At": "\u179a\u17bd\u1785\u179a\u17b6\u179b\u17cb\u1793\u17c5", + "Unchanged": "\u1798\u17b7\u1793\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a", + "Shortage": "\u1780\u1784\u17d2\u179c\u17c7\u1781\u17b6\u178f", + "Overage": "\u179b\u17be\u179f", + "Reward Systems List": "\u1794\u1789\u17d2\u1787\u17b8\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb", + "Display all reward systems.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No reward systems has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1\u17d4", + "Add a new reward system": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u1790\u17d2\u1798\u17b8", + "Create a new reward system": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u1790\u17d2\u1798\u17b8", + "Register a new reward system and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit reward system": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb", + "Modify Reward System.": "\u1780\u17c2\u1794\u17d2\u179a\u17c2\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u17d4", + "Return to Reward Systems": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u179c\u17b7\u1789", + "From": "\u1785\u17b6\u1794\u17cb\u1796\u17b8", + "The interval start here.": "\u1785\u1793\u17d2\u179b\u17c4\u17c7\u1796\u17c1\u179b\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798\u1793\u17c5\u1796\u17c1\u179b\u1793\u17c1\u17c7\u17d4", + "To": "\u178a\u179b\u17cb", + "The interval ends here.": "\u1785\u1793\u17d2\u179b\u17c4\u17c7\u1796\u17c1\u179b\u1794\u1789\u17d2\u1785\u1794\u17cb\u1793\u17c5\u1796\u17c1\u179b\u1793\u17c1\u17c7\u17d4", + "Points earned.": "\u1796\u17b7\u1793\u17d2\u1791\u17bb\u178a\u17c2\u179b\u1791\u1791\u17bd\u179b\u1794\u17b6\u1793\u17d4", + "Coupon": "\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Decide which coupon you would apply to the system.": "\u179f\u1798\u17d2\u179a\u17c1\u1785\u1785\u17b7\u178f\u17d2\u178f\u1790\u17b6\u178f\u17be\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1798\u17bd\u1799\u178e\u17b6\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1793\u17b9\u1784\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1785\u17c6\u1796\u17c4\u17c7\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u17d4", + "This is the objective that the user should reach to trigger the reward.": "\u1793\u17c1\u17c7\u1782\u17ba\u1787\u17b6\u1782\u17c4\u179b\u1794\u17c6\u178e\u1784\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1782\u17bd\u179a\u178f\u17c2\u1788\u17b6\u1793\u178a\u179b\u17cb\u178a\u17be\u1798\u17d2\u1794\u17b8\u1791\u1791\u17bd\u179b\u1794\u17b6\u1793\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u17d4", + "A short description about this system": "\u1780\u17b6\u179a\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u1781\u17d2\u179b\u17b8\u17a2\u17c6\u1796\u17b8\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u1793\u17c1\u17c7", + "Would you like to delete this reward system ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179b\u17bb\u1794\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u1793\u17c1\u17c7\u1791\u17c1?", + "Delete Selected Rewards": "\u179b\u17bb\u1794\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f", + "Would you like to delete selected rewards?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179b\u17bb\u1794\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1791\u17c1?", + "No Dashboard": "\u1782\u17d2\u1798\u17b6\u1793\u1795\u17d2\u1791\u17b6\u17c6\u1784\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784", + "Store Dashboard": "\u1795\u17d2\u1791\u17b6\u17c6\u1784\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u179f\u17d2\u178f\u17bb\u1780", + "Cashier Dashboard": "\u1795\u17d2\u1791\u17b6\u17c6\u1784\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u17d2\u1793\u1780\u1782\u17b7\u178f\u179b\u17bb\u1799", + "Default Dashboard": "\u1795\u17d2\u1791\u17b6\u17c6\u1784\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u178a\u17be\u1798", + "Roles List": "\u1794\u1789\u17d2\u1787\u17b8\u178f\u17bd\u1793\u17b6\u1791\u17b8", + "Display all roles.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u178f\u17bd\u1793\u17b6\u1791\u17b8\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No role has been registered.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u178f\u17bd\u1793\u17b6\u1791\u17b8\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1793\u17c4\u17c7\u1791\u17c1?", + "Add a new role": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u178f\u17bd\u1793\u17b6\u1791\u17b8\u1790\u17d2\u1798\u17b8", + "Create a new role": "\u1794\u1784\u17d2\u1780\u17be\u178f\u178f\u17bd\u1793\u17b6\u1791\u17b8\u1790\u17d2\u1798\u17b8", + "Create a new role and save it.": "\u1794\u1784\u17d2\u1780\u17be\u178f\u178f\u17bd\u1793\u17b6\u1791\u17b8\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "Edit role": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u178f\u17bd\u1793\u17b6\u1791\u17b8", + "Modify Role.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u178f\u17bd\u1793\u17b6\u1791\u17b8", + "Return to Roles": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u178f\u17bd\u1793\u17b6\u1791\u17b8\u179c\u17b7\u1789", + "Provide a name to the role.": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u1788\u17d2\u1798\u17c4\u17c7\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u178f\u17bd\u1793\u17b6\u1791\u17b8\u17d4", + "Should be a unique value with no spaces or special character": "\u1782\u17bd\u179a\u200b\u178f\u17c2\u200b\u1787\u17b6\u200b\u178f\u1798\u17d2\u179b\u17c3\u200b\u1798\u17b7\u1793\u1787\u17b6\u1793\u17cb\u1782\u17d2\u1793\u17b6 \u17a0\u17be\u1799\u200b\u1798\u17b7\u1793\u200b\u1798\u17b6\u1793\u200b\u178a\u1780\u1783\u17d2\u179b\u17b6 \u17ac\u200b\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u200b\u1796\u17b7\u179f\u17c1\u179f", + "Provide more details about what this role is about.": "\u1795\u17d2\u178f\u179b\u17cb\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u179b\u1798\u17d2\u17a2\u17b7\u178f\u1794\u1793\u17d2\u1790\u17c2\u1798\u17a2\u17c6\u1796\u17b8\u178f\u17bd\u1793\u17b6\u1791\u17b8\u1793\u17c1\u17c7\u17d4", + "Unable to delete a system role.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17bb\u1794\u178f\u17bd\u1793\u17b6\u1791\u17b8\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Clone": "\u1785\u1798\u17d2\u179b\u1784", + "Would you like to clone this role ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1785\u1798\u17d2\u179b\u1784\u178f\u17bd\u1793\u17b6\u1791\u17b8\u1793\u17c1\u17c7\u1791\u17c1?", + "You do not have enough permissions to perform this action.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u1798\u17b6\u1793\u179f\u17b7\u1791\u17d2\u1792\u17b7\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u17b6\u1793\u17cb\u178a\u17be\u1798\u17d2\u1794\u17b8\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u1793\u17c1\u17c7\u1791\u17c1\u17d4", + "Taxes List": "\u1794\u1789\u17d2\u1787\u17b8\u1796\u1793\u17d2\u1792", + "Display all taxes.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1796\u1793\u17d2\u1792\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No taxes has been registered": "\u1782\u17d2\u1798\u17b6\u1793\u1796\u1793\u17d2\u1792\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1794\u1789\u17d2\u1787\u17b8\u1791\u17c1", + "Add a new tax": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1796\u1793\u17d2\u1792\u1790\u17d2\u1798\u17b8", + "Create a new tax": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1796\u1793\u17d2\u1792\u1790\u17d2\u1798\u17b8", + "Register a new tax and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1796\u1793\u17d2\u1792\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "Edit tax": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1796\u1793\u17d2\u1792", + "Modify Tax.": "\u1780\u17c2\u1794\u17d2\u179a\u17c2\u1796\u1793\u17d2\u1792", + "Return to Taxes": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1796\u1793\u17d2\u1792\u179c\u17b7\u1789", + "Provide a name to the tax.": "\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u179a\u1794\u179f\u17cb\u1796\u1793\u17d2\u1792\u17d4", + "Assign the tax to a tax group.": "\u1785\u17b6\u178f\u17cb\u1785\u17c2\u1784\u1796\u1793\u17d2\u1792\u1791\u17c5\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792\u17d4", + "Rate": "\u17a2\u178f\u17d2\u179a\u17b6", + "Define the rate value for the tax.": "\u1780\u17c6\u178e\u178f\u17cb\u178f\u1798\u17d2\u179b\u17c3\u17a2\u178f\u17d2\u179a\u17b6\u1796\u1793\u17d2\u1792\u17d4", + "Provide a description to the tax.": "\u1795\u17d2\u178f\u179b\u17cb\u1780\u17b6\u179a\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u17a2\u17c6\u1796\u17b8\u1796\u1793\u17d2\u1792\u17d4", + "Taxes Groups List": "\u1794\u1789\u17d2\u1787\u17b8\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792", + "Display all taxes groups.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No taxes groups has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1", + "Add a new tax group": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792\u1790\u17d2\u1798\u17b8", + "Create a new tax group": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792\u1790\u17d2\u1798\u17b8", + "Register a new tax group and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit tax group": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792", + "Modify Tax Group.": "\u1780\u17c2\u1794\u17d2\u179a\u17c2\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792\u17d4", + "Return to Taxes Groups": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792\u179c\u17b7\u1789", + "Provide a short description to the tax group.": "\u1795\u17d2\u178f\u179b\u17cb\u1780\u17b6\u179a\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u1781\u17d2\u179b\u17b8\u178a\u179b\u17cb\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792\u17d4", + "Accounts List": "\u1794\u1789\u17d2\u1787\u17b8\u1782\u178e\u1793\u17b8", + "Display All Accounts.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1782\u178e\u1793\u17b8\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No Account has been registered": "\u1782\u17d2\u1798\u17b6\u1793\u1782\u178e\u1793\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1\u17d4", + "Add a new Account": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1782\u178e\u1793\u17b8\u1790\u17d2\u1798\u17b8", + "Create a new Account": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1782\u178e\u1793\u17b8\u1790\u17d2\u1798\u17b8", + "Register a new Account and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1782\u178e\u1793\u17b8\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "Edit Account": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1782\u178e\u1793\u17b8", + "Modify An Account.": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1782\u178e\u1793\u17b8\u17d4", + "Return to Accounts": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1782\u178e\u1793\u17b8\u179c\u17b7\u1789", + "All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.": "\u17a2\u1784\u17d2\u1782\u1797\u17b6\u1796\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u178a\u17c2\u179b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1791\u17c5\u1793\u17b9\u1784\u1794\u17d2\u179a\u1797\u17c1\u1791\u1793\u17c1\u17c7\u1793\u17b9\u1784\u1794\u1784\u17d2\u1780\u17be\u178f \"\u17a5\u178e\u1791\u17b6\u1793\" \u17ac \"\u17a5\u178e\u1796\u1793\u17d2\u1792\" \u1791\u17c5\u1780\u17b6\u1793\u17cb\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u179b\u17c6\u17a0\u17bc\u179a\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u17d4", + "Credit": "\u17a5\u178e\u1791\u17b6\u1793", + "Debit": "\u17a5\u178e\u1796\u1793\u17d2\u1792", + "Account": "\u1782\u178e\u1793\u17b8", + "Provide the accounting number for this category.": "\u1795\u17d2\u178f\u179b\u17cb\u179b\u17c1\u1781\u1782\u178e\u1793\u17c1\u1799\u17d2\u1799\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1794\u17d2\u179a\u1797\u17c1\u1791\u1793\u17c1\u17c7\u17d4", + "Transactions List": "\u1794\u1789\u17d2\u1787\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "Display all transactions.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No transactions has been registered": "\u1782\u17d2\u1798\u17b6\u1793\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178e\u17b6\u1798\u17bd\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1", + "Add a new transaction": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1790\u17d2\u1798\u17b8", + "Create a new transaction": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1790\u17d2\u1798\u17b8", + "Register a new transaction and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit transaction": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "Modify Transaction.": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u17d4", + "Return to Transactions": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "determine if the transaction is effective or not. Work for recurring and not recurring transactions.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1798\u17b6\u1793\u1794\u17d2\u179a\u179f\u17b7\u1791\u17d2\u1792\u1797\u17b6\u1796\u17ac\u17a2\u178f\u17cb\u17d4 \u1792\u17d2\u179c\u17be\u1780\u17b6\u179a\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178a\u178a\u17c2\u179b\u17d7 \u1793\u17b7\u1784\u1798\u17b7\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u178a\u178a\u17c2\u179b\u17d7\u17d4", + "Users Group": "\u1780\u17d2\u179a\u17bb\u1798\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1791\u17c5\u1780\u17d2\u179a\u17bb\u1798\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17d4 \u178a\u17bc\u1785\u17d2\u1793\u17c1\u17c7 \u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1782\u17bb\u178e\u1793\u17b9\u1784\u1785\u17c6\u1793\u17bd\u1793\u17a2\u1784\u17d2\u1782\u1797\u17b6\u1796\u17d4", + "None": "\u1791\u17c1", + "Transaction Account": "\u1782\u178e\u1793\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "Assign the transaction to an account430": "\u1794\u17d2\u179a\u1782\u179b\u17cb\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1791\u17c5\u1782\u178e\u1793\u17b8 430", + "Is the value or the cost of the transaction.": "\u1782\u17ba\u1787\u17b6\u178f\u1798\u17d2\u179b\u17c3 \u17ac\u178f\u1798\u17d2\u179b\u17c3\u1793\u17c3\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u17d4", + "If set to Yes, the transaction will trigger on defined occurrence.": "\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u1780\u17c6\u178e\u178f\u17cb\u1791\u17c5 \u1794\u17b6\u1791\/\u1785\u17b6\u179f \u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17b9\u1784\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798\u1793\u17c5\u1796\u17c1\u179b\u1780\u17be\u178f\u17a1\u17be\u1784\u178a\u17c2\u179b\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u17d4", + "Recurring": "\u1780\u17be\u178f\u17a1\u17be\u1784\u178a\u178a\u17c2\u179a\u17d7", + "Start of Month": "\u178a\u17be\u1798\u1781\u17c2", + "Mid of Month": "\u1780\u178e\u17d2\u178f\u17b6\u179b\u1781\u17c2", + "End of Month": "\u1785\u17bb\u1784\u1781\u17c2", + "X days Before Month Ends": "X \u1790\u17d2\u1784\u17c3\u1798\u17bb\u1793\u1781\u17c2\u1794\u1789\u17d2\u1785\u1794\u17cb", + "X days After Month Starts": "X \u1790\u17d2\u1784\u17c3\u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb\u1796\u17b8\u1781\u17c2\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798", + "Occurrence": "\u1780\u17b6\u179a\u1780\u17be\u178f\u17a1\u17be\u1784", + "Define how often this transaction occurs": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17c1\u17c7\u1780\u17be\u178f\u17a1\u17be\u1784\u1789\u17b9\u1780\u1789\u17b6\u1794\u17cb\u1794\u17c9\u17bb\u178e\u17d2\u178e\u17b6", + "Occurrence Value": "\u178f\u1798\u17d2\u179b\u17c3\u1793\u17c3\u1780\u17b6\u179a\u1780\u17be\u178f\u17a1\u17be\u1784", + "Must be used in case of X days after month starts and X days before month ends.": "\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1794\u17d2\u179a\u17be\u1780\u17d2\u1793\u17bb\u1784\u1780\u179a\u178e\u17b8 X \u1790\u17d2\u1784\u17c3\u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb\u1796\u17b8\u1780\u17b6\u179a\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798\u1781\u17c2 \u1793\u17b7\u1784 X \u1790\u17d2\u1784\u17c3\u1798\u17bb\u1793\u1785\u17bb\u1784\u1781\u17c2\u17d4", + "Scheduled": "\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1796\u17c1\u179b", + "Set the scheduled date.": "\u1780\u17c6\u178e\u178f\u17cb\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u178a\u17c2\u179b\u1794\u17b6\u1793\u1782\u17d2\u179a\u17c4\u1784\u1791\u17bb\u1780\u17d4", + "Define what is the type of the transactions.": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u17d2\u179a\u1797\u17c1\u1791\u1793\u17c3\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u17d4", + "Account Name": "\u1788\u17d2\u1798\u17c4\u17c7\u200b\u1782\u178e\u1793\u17b8", + "Trigger": "\u1782\u1793\u17d2\u179b\u17b9\u17c7", + "Would you like to trigger this expense now?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u1785\u17c6\u178e\u17b6\u1799\u1793\u17c1\u17c7\u17a5\u17a1\u17bc\u179c\u1793\u17c1\u17c7\u1791\u17c1?", + "Transactions History List": "\u1794\u1789\u17d2\u1787\u17b8\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "Display all transaction history.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No transaction history has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1", + "Add a new transaction history": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1790\u17d2\u1798\u17b8", + "Create a new transaction history": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1790\u17d2\u1798\u17b8", + "Register a new transaction history and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit transaction history": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "Modify Transactions history.": "\u1780\u17c2\u1794\u17d2\u179a\u17c2\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u17d4", + "Return to Transactions History": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "Units List": "\u1794\u1789\u17d2\u1787\u17b8\u17af\u1780\u178f\u17b6", + "Display all units.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u17af\u1780\u178f\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No units has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u17af\u1780\u178f\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1", + "Add a new unit": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u17af\u1780\u178f\u17b6\u1790\u17d2\u1798\u17b8", + "Create a new unit": "\u1794\u1784\u17d2\u1780\u17be\u178f\u17af\u1780\u178f\u17b6\u1790\u17d2\u1798\u17b8", + "Register a new unit and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u17af\u1780\u178f\u17b6\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit unit": "\u1780\u17c2\u1794\u17d2\u179a\u17c2\u17af\u1780\u178f\u17b6", + "Modify Unit.": "\u1780\u17c2\u1794\u17d2\u179a\u17c2\u17af\u1780\u178f\u17b6\u17d4", + "Return to Units": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u17af\u1780\u178f\u17b6\u179c\u17b7\u1789", + "Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.": "\u1795\u17d2\u178f\u179b\u17cb\u178f\u1798\u17d2\u179b\u17c3\u1796\u17b7\u179f\u17c1\u179f\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17af\u1780\u178f\u17b6\u1793\u17c1\u17c7\u17d4 \u17a2\u17b6\u1785\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u179f\u17c6\u17a1\u17be\u1784\u1796\u17b8\u1788\u17d2\u1798\u17c4\u17c7\u1798\u17bd\u1799 \u1794\u17c9\u17bb\u1793\u17d2\u178f\u17c2\u1798\u17b7\u1793\u1782\u17bd\u179a\u179a\u17bd\u1798\u1794\u1789\u17d2\u1785\u17bc\u179b\u1785\u1793\u17d2\u179b\u17c4\u17c7 \u17ac\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u1796\u17b7\u179f\u17c1\u179f\u1793\u17c4\u17c7\u1791\u17c1\u17d4", + "Preview URL": "URL \u1794\u1784\u17d2\u17a0\u17b6\u1789", + "Preview of the unit.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179a\u17bc\u1794\u1793\u17c3\u17af\u1780\u178f\u17b6\u17d4", + "Define the value of the unit.": "\u1780\u17c6\u178e\u178f\u17cb\u178f\u1798\u17d2\u179b\u17c3\u1793\u17c3\u17af\u1780\u178f\u17b6\u17d4", + "Define to which group the unit should be assigned.": "\u1780\u17c6\u178e\u178f\u17cb\u1780\u17d2\u179a\u17bb\u1798\u178e\u17b6\u178a\u17c2\u179b\u17a2\u1784\u17d2\u1782\u1797\u17b6\u1796\u1782\u17bd\u179a\u178f\u17c2\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17b6\u178f\u17cb\u178f\u17b6\u17c6\u1784\u17d4", + "Base Unit": "\u17af\u1780\u178f\u17b6\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793", + "Determine if the unit is the base unit from the group.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u17af\u1780\u178f\u17b6\u1782\u17ba\u1787\u17b6\u17af\u1780\u178f\u17b6\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1796\u17b8\u1780\u17d2\u179a\u17bb\u1798\u17d4", + "Provide a short description about the unit.": "\u1795\u17d2\u178f\u179b\u17cb\u1780\u17b6\u179a\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u1781\u17d2\u179b\u17b8\u17a2\u17c6\u1796\u17b8\u17af\u1780\u178f\u17b6\u17d4", + "Unit Groups List": "\u1794\u1789\u17d2\u1787\u17b8\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6", + "Display all unit groups.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No unit groups has been registered": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6\u178e\u17b6\u1798\u17bd\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1\u17d4", + "Add a new unit group": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6\u1790\u17d2\u1798\u17b8", + "Create a new unit group": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6\u1790\u17d2\u1798\u17b8", + "Register a new unit group and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit unit group": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6", + "Modify Unit Group.": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6\u17d4", + "Return to Unit Groups": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6\u179c\u17b7\u1789", + "Users List": "\u1794\u1789\u17d2\u1787\u17b8\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Display all users.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "No users has been registered": "\u1782\u17d2\u1798\u17b6\u1793\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c1\u17d4", + "Add a new user": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1790\u17d2\u1798\u17b8", + "Create a new user": "\u1794\u1784\u17d2\u1780\u17be\u178f\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1790\u17d2\u1798\u17b8", + "Register a new user and save it.": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1790\u17d2\u1798\u17b8 \u17a0\u17be\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179c\u17b6\u17d4", + "Edit user": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Modify User.": "\u1780\u17c2\u1794\u17d2\u179a\u17c2\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17d4", + "Return to Users": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Username": "\u1788\u17d2\u1798\u17c4\u17c7\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Will be used for various purposes such as email recovery.": "\u1793\u17b9\u1784\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1794\u17d2\u179a\u17be\u200b\u1780\u17d2\u1793\u17bb\u1784\u200b\u1782\u17c4\u179b\u200b\u1794\u17c6\u178e\u1784\u200b\u1795\u17d2\u179f\u17c1\u1784\u200b\u17d7\u200b\u178a\u17bc\u1785\u200b\u1787\u17b6\u200b\u1780\u17b6\u179a\u1791\u17b6\u1789\u1799\u1780\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1797\u17d2\u179b\u17c1\u1785\u17d4", + "Provide the user first name.": "\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17d4", + "Provide the user last name.": "\u1795\u17d2\u178f\u179b\u17cb\u1793\u17b6\u1798\u178f\u17d2\u179a\u1780\u17bc\u179b\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17d4", + "Password": "\u1780\u17bc\u178a\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb", + "Make a unique and secure password.": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u178f\u17c2\u1798\u17bd\u1799\u1782\u178f\u17cb \u1793\u17b7\u1784\u1798\u17b6\u1793\u179f\u17bb\u179c\u178f\u17d2\u1790\u17b7\u1797\u17b6\u1796\u17d4", + "Confirm Password": "\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb", + "Should be the same as the password.": "\u1782\u17bd\u179a\u178f\u17c2\u178a\u17bc\u1785\u1782\u17d2\u1793\u17b6\u1793\u17b9\u1784\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u17d4", + "Define whether the user can use the application.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17a2\u17b6\u1785\u1794\u17d2\u179a\u17be\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u17ac\u17a2\u178f\u17cb\u17d4", + "Define what roles applies to the user": "\u1780\u17c6\u178e\u178f\u17cb\u1793\u17bc\u179c\u178f\u17bd\u1793\u17b6\u1791\u17b8\u178e\u17b6\u178a\u17c2\u179b\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1785\u17c6\u1796\u17c4\u17c7\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Roles": "\u178f\u17bd\u1793\u17b6\u1791\u17b8", + "Set the limit that can\\'t be exceeded by the user.": "\u1780\u17c6\u178e\u178f\u17cb\u178a\u17c2\u1793\u1780\u17c6\u178e\u178f\u17cb\u178a\u17c2\u179b\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17be\u179f\u1796\u17b8\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17d4", + "Set the user gender.": "\u1780\u17c6\u178e\u178f\u17cb\u1797\u17c1\u1791\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17d4", + "Set the user phone number.": "\u1780\u17c6\u178e\u178f\u17cb\u179b\u17c1\u1781\u1791\u17bc\u179a\u179f\u17d0\u1796\u17d2\u1791\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17d4", + "Set the user PO Box.": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u17d2\u179a\u17a2\u1794\u17cb\u179f\u17c6\u1794\u17bb\u178f\u17d2\u179a\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u17d4", + "Provide the billing First Name.": "\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u1785\u17c1\u1789\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u17d4", + "Last name": "\u1793\u17b6\u1798\u178f\u17d2\u179a\u1780\u17bc\u179b", + "Provide the billing last name.": "\u1795\u17d2\u178f\u179b\u17cb\u1793\u17b6\u1798\u178f\u17d2\u179a\u1780\u17bc\u179b\u1780\u17d2\u1793\u17bb\u1784\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u17d4", + "Billing phone number.": "\u179b\u17c1\u1781\u1791\u17bc\u179a\u179f\u17d0\u1796\u17d2\u1791\u1785\u17c1\u1789\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u17d4", + "Billing First Address.": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1782\u17c4\u179b\u1793\u17c3\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u17d4", + "Billing Second Address.": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b8\u17e2\u1793\u17c3\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u17d4", + "Country": "\u1794\u17d2\u179a\u1791\u17c1\u179f", + "Billing Country.": "\u179c\u17b7\u200b\u1780\u17d0\u200b\u1799\u200b\u1794\u17d0\u178f\u17d2\u179a\u200b\u1794\u17d2\u179a\u1791\u17c1\u179f\u17d4", + "City": "\u1791\u17b8\u1780\u17d2\u179a\u17bb\u1784", + "PO.Box": "\u1794\u17d2\u179a\u17a2\u1794\u17cb\u1794\u17d2\u179a\u17c3\u179f\u178e\u17b8\u1799\u17cd", + "Postal Address": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u200b\u1794\u17d2\u179a\u17c3\u200b\u179f\u200b\u178e\u17b8\u200b\u1799", + "Company": "\u1780\u17d2\u179a\u17bb\u1798\u17a0\u17ca\u17bb\u1793", + "Provide the shipping First Name.": "\u1795\u17d2\u178f\u179b\u17cb\u1793\u17b6\u1798\u1781\u17d2\u179b\u17bd\u1793\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u17d4", + "Provide the shipping Last Name.": "\u1795\u17d2\u178f\u179b\u17cb\u1793\u17b6\u1798\u178f\u17d2\u179a\u1780\u17bc\u179b\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u17d4", + "Shipping phone number.": "\u179b\u17c1\u1781\u1791\u17bc\u179a\u179f\u17d0\u1796\u17d2\u1791\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u17d4", + "Shipping First Address.": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u178a\u17c6\u1794\u17bc\u1784\u17d4", + "Shipping Second Address.": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u1791\u17b8\u1796\u17b8\u179a\u17d4", + "Shipping Country.": "\u1794\u17d2\u179a\u1791\u17c1\u179f\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u17d4", + "You cannot delete your own account.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17bb\u1794\u1782\u178e\u1793\u17b8\u1795\u17d2\u1791\u17b6\u179b\u17cb\u1781\u17d2\u179b\u17bd\u1793\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Group Name": "\u1788\u17d2\u1798\u17c4\u17c7\u1780\u17d2\u179a\u17bb\u1798", + "Wallet Balance": "\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u1794\u17bc\u1794", + "Total Purchases": "\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u179f\u179a\u17bb\u1794", + "Delete a user": "\u179b\u17bb\u1794\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Not Assigned": "\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17b6\u178f\u17cb\u178f\u17b6\u17c6\u1784", + "Access Denied": "\u178a\u17c6\u178e\u17be\u179a\u200b\u1780\u17b6\u179a\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1794\u178a\u17b7\u179f\u17c1\u1792", + "Oops, We\\'re Sorry!!!": "\u17a2\u17bc\u1799... \u179f\u17bb\u17c6\u1791\u17c4\u179f!!!", + "Class: %s": "Class: %s", + "There\\'s is mismatch with the core version.": "\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1782\u17d2\u1793\u17b6\u1787\u17b6\u1798\u17bd\u1799\u1780\u17c6\u178e\u17c2\u179f\u17d2\u1793\u17bc\u179b\u17d4", + "Incompatibility Exception": "\u1780\u179a\u178e\u17b8\u179b\u17be\u1780\u179b\u17c2\u1784\u1793\u17c3\u1797\u17b6\u1796\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1782\u17d2\u1793\u17b6\u17d4", + "You\\'re not authenticated.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u1791\u17b6\u1793\u17cb\u1794\u17b6\u1793\u1785\u17bc\u179b\u1782\u178e\u1793\u17b8\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1791\u17c1\u17d4", + "An error occured while performing your request.": "\u1780\u17c6\u17a0\u17bb\u179f\u1798\u17bd\u1799\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u1793\u17c5\u1796\u17c1\u179b\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u179f\u17c6\u178e\u17be\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4", + "The request method is not allowed.": "\u179c\u17b7\u1792\u17b8\u179f\u17b6\u179f\u17d2\u178f\u17d2\u179a\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u1791\u17c1\u17d4", + "Method Not Allowed": "\u179c\u17b7\u1792\u17b8\u179f\u17b6\u179f\u17d2\u179a\u17d2\u178f\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f", + "There is a missing dependency issue.": "\u1798\u17b6\u1793\u1794\u1789\u17d2\u17a0\u17b6\u1793\u17c3\u1797\u17b6\u1796\u17a2\u17b6\u179f\u17d2\u179a\u17d0\u1799\u178a\u17c2\u179b\u1794\u17b6\u178f\u17cb\u17d4", + "Missing Dependency": "\u1781\u17d2\u179c\u17c7\u1797\u17b6\u1796\u17a2\u17b6\u179f\u17d2\u179a\u17d0\u1799", + "A mismatch has occured between a module and it\\'s dependency.": "\u1797\u17b6\u1796\u1798\u17b7\u1793\u179f\u17ca\u17b8\u1782\u17d2\u1793\u17b6\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u179a\u179c\u17b6\u1784 module \u1798\u17bd\u1799 \u1793\u17b7\u1784\u1780\u17b6\u179a\u1796\u17b9\u1784\u1795\u17d2\u17a2\u17c2\u1780\u179a\u1794\u179f\u17cb\u179c\u17b6\u17d4", + "Module Version Mismatch": "\u1780\u17c6\u178e\u17c2\u179a Module \u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c", + "The Action You Tried To Perform Is Not Allowed.": "\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1796\u17d2\u1799\u17b6\u1799\u17b6\u1798\u1792\u17d2\u179c\u17be\u1782\u17ba\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u1791\u17c1\u17d4", + "Not Allowed Action": "\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f", + "The action you tried to perform is not allowed.": "\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1796\u17d2\u1799\u17b6\u1799\u17b6\u1798\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u1791\u17c1\u17d4", + "You\\'re not allowed to see that page.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1798\u17be\u179b\u1791\u17c6\u1796\u17d0\u179a\u1793\u17c4\u17c7\u1791\u17c1\u17d4", + "Not Enough Permissions": "\u1780\u17b6\u179a\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u1798\u17b7\u1793\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u17b6\u1793\u17cb", + "Unable to locate the assets.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1780\u17c6\u178e\u178f\u17cb\u1791\u17b8\u178f\u17b6\u17c6\u1784 assets \u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Not Found Assets": "\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1798\u17b7\u1793\u1783\u17be\u1789 Assets", + "The resource of the page you tried to access is not available or might have been deleted.": "Resource \u1793\u17c3\u1791\u17c6\u1796\u17d0\u179a\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1796\u17d2\u1799\u17b6\u1799\u17b6\u1798\u1785\u17bc\u179b\u1794\u17d2\u179a\u17be\u1798\u17b7\u1793\u1798\u17b6\u1793\u1791\u17c1 \u17ac\u1794\u17d2\u179a\u17a0\u17c2\u179b\u1787\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "Not Found Exception": "\u179a\u1780\u1798\u17b7\u1793\u1783\u17be\u1789\u1780\u179a\u178e\u17b8\u179b\u17be\u1780\u179b\u17c2\u1784", + "Post Too Large": "\u1794\u17c9\u17bb\u179f\u17d2\u178f\u17b7\u17cd\u1798\u17b6\u1793\u1791\u17c6\u17a0\u17c6\u1792\u17c6\u1796\u17c1\u1780", + "The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini": "\u179f\u17c6\u178e\u17be\u178a\u17c2\u179b\u1794\u17b6\u1793\u178a\u17b6\u1780\u17cb\u179f\u17d2\u1793\u17be\u1798\u17b6\u1793\u1791\u17c6\u17a0\u17c6\u1792\u17c6\u1787\u17b6\u1784\u1780\u17b6\u179a\u179a\u17c6\u1796\u17b9\u1784\u1791\u17bb\u1780\u17d4 \u1796\u17b7\u1785\u17b6\u179a\u178e\u17b6\u1794\u1784\u17d2\u1780\u17be\u1793 \"post_max_size\" \u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1793\u17c5\u179b\u17be PHP.ini \u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4", + "A Database Exception Occurred.": "\u1780\u179a\u178e\u17b8\u179b\u17be\u1780\u179b\u17c2\u1784\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u17d4", + "Query Exception": "\u179f\u17c6\u178e\u17be\u179a\u179b\u17be\u1780\u179b\u17c2\u1784", + "An error occurred while validating the form.": "\u1780\u17c6\u17a0\u17bb\u179f\u200b\u1798\u17bd\u1799\u200b\u1794\u17b6\u1793\u200b\u1780\u17be\u178f\u200b\u17a1\u17be\u1784\u200b\u1781\u178e\u17c8\u200b\u1796\u17c1\u179b\u200b\u178a\u17c2\u179b\u200b\u1792\u17d2\u179c\u17be\u200b\u17b1\u17d2\u1799\u200b\u1791\u1798\u17d2\u179a\u1784\u17cb\u200b\u1798\u17b6\u1793\u200b\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796\u17d4", + "An error has occurred": "\u1780\u17c6\u17a0\u17bb\u179f\u1798\u17bd\u1799\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784", + "Unable to proceed, the submitted form is not valid.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u178f\u200b\u1794\u17b6\u1793 \u1791\u1798\u17d2\u179a\u1784\u17cb\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u178a\u17b6\u1780\u17cb\u200b\u179f\u17d2\u1793\u17be\u200b\u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u200b\u1791\u17c1\u17d4", + "Unable to proceed the form is not valid": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u178f\u200b\u1791\u1798\u17d2\u179a\u1784\u17cb\u200b\u1794\u17c2\u1794\u1794\u1791\u200b\u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "This value is already in use on the database.": "\u178f\u1798\u17d2\u179b\u17c3\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u179a\u17bd\u1785\u17a0\u17be\u1799\u1793\u17c5\u179b\u17be\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u17d4", + "This field is required.": "\u1794\u17d2\u179a\u17a2\u1794\u17cb\u1793\u17c1\u17c7\u200b\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u200b\u1794\u17c6\u1796\u17c1\u1789\u17d4", + "This field does\\'nt have a valid value.": "\u1794\u17d2\u179a\u17a2\u1794\u17cb\u1793\u17c1\u17c7\u1798\u17b7\u1793\u1798\u17b6\u1793\u178f\u1798\u17d2\u179b\u17c3\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u1791\u17c1\u17d4", + "This field should be checked.": "\u1794\u17d2\u179a\u17a2\u1794\u17cb\u1793\u17c1\u17c7\u1782\u17bd\u179a\u178f\u17c2\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17bb\u1785\u1799\u1780\u17d4", + "This field must be a valid URL.": "\u1794\u17d2\u179a\u17a2\u1794\u17cb URL \u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1798\u17b6\u1793\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796\u17d4", + "This field is not a valid email.": "\u1794\u17d2\u179a\u17a2\u1794\u17cb\u1793\u17c1\u17c7\u1798\u17b7\u1793\u1798\u17c2\u1793\u1787\u17b6\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u1791\u17c1\u17d4", + "Provide your username.": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17d4", + "Provide your password.": "\u1795\u17d2\u178f\u179b\u17cb\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4", + "Provide your email.": "\u1795\u17d2\u178f\u179b\u17cb\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4", + "Password Confirm": "\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb", + "define the amount of the transaction.": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u179a\u17b7\u1798\u17b6\u178e\u1793\u17c3\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u17d4", + "Further observation while proceeding.": "\u1780\u17b6\u179a\u179f\u1784\u17d2\u1780\u17c1\u178f\u1794\u1793\u17d2\u1790\u17c2\u1798\u1791\u17c0\u178f\u1793\u17c5\u1796\u17c1\u179b\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u17d4", + "determine what is the transaction type.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u1794\u17d2\u179a\u1797\u17c1\u1791\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1794\u17c2\u1794\u178e\u17b6\u17d4", + "Determine the amount of the transaction.": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u179a\u17b7\u1798\u17b6\u178e\u1793\u17c3\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u17d4", + "Further details about the transaction.": "\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u179b\u1798\u17d2\u17a2\u17b7\u178f\u1794\u1793\u17d2\u1790\u17c2\u1798\u17a2\u17c6\u1796\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u17d4", + "Describe the direct transaction.": "\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u17a2\u17c6\u1796\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1795\u17d2\u1791\u17b6\u179b\u17cb\u17d4", + "Activated": "\u1794\u17b6\u1793\u179f\u1780\u1798\u17d2\u1798", + "If set to yes, the transaction will take effect immediately and be saved on the history.": "\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u1780\u17c6\u178e\u178f\u17cb\u1791\u17c5\u1794\u17b6\u1791\/\u1785\u17b6\u179f \u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17b9\u1784\u1798\u17b6\u1793\u1794\u17d2\u179a\u179f\u17b7\u1791\u17d2\u1792\u1797\u17b6\u1796\u1797\u17d2\u179b\u17b6\u1798\u17d7 \u17a0\u17be\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1793\u17c5\u179b\u17be\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u17d4", + "Assign the transaction to an account.": "\u1785\u17b6\u178f\u17cb\u1785\u17c2\u1784\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1791\u17c5\u1782\u178e\u1793\u17b8\u1798\u17bd\u1799\u17d4", + "set the value of the transaction.": "\u1780\u17c6\u178e\u178f\u17cb\u178f\u1798\u17d2\u179b\u17c3\u1793\u17c3\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u17d4", + "Further details on the transaction.": "\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u179b\u1798\u17d2\u17a2\u17b7\u178f\u1794\u1793\u17d2\u1790\u17c2\u1798\u17a2\u17c6\u1796\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u17d4", + "type": "\u1794\u17d2\u179a\u1797\u17c1\u1791", + "Describe the direct transactions.": "\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u17a2\u17c6\u1796\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1795\u17d2\u1791\u17b6\u179b\u17cb\u17d4", + "set the value of the transactions.": "\u1780\u17c6\u178e\u178f\u17cb\u178f\u1798\u17d2\u179b\u17c3\u1793\u17c3\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u17d4", + "User Group": "\u1780\u17d2\u179a\u17bb\u1798\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "The transactions will be multipled by the number of user having that role.": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u17bb\u178e\u1793\u17b9\u1784\u1785\u17c6\u1793\u17bd\u1793\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u178a\u17c2\u179b\u1798\u17b6\u1793\u178f\u17bd\u1793\u17b6\u1791\u17b8\u1793\u17c4\u17c7\u17d4", + "Installments": "\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7", + "Define the installments for the current order.": "\u1780\u17c6\u178e\u178f\u17cb\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u17d4", + "New Password": "\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u200b\u1790\u17d2\u1798\u17b8", + "define your new password.": "\u1780\u17c6\u178e\u178f\u17cb\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1790\u17d2\u1798\u17b8\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4", + "confirm your new password.": "\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1790\u17d2\u1798\u17b8\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4", + "Select Payment": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb", + "choose the payment type.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u17d4", + "Define the order name.": "\u1780\u17c6\u178e\u178f\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u179b\u17c6\u178a\u17b6\u1794\u17cb\u17d4", + "Define the date of creation of the order.": "\u1780\u17c6\u178e\u178f\u17cb\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1793\u17c3\u1780\u17b6\u179a\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u17d4", + "Provide the procurement name.": "\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u17d4", + "Describe the procurement.": "\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u17a2\u17c6\u1796\u17b8\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u17d4", + "Define the provider.": "\u1780\u17c6\u178e\u178f\u17cb\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u179b\u17cb\u179f\u17c1\u179c\u17b6\u17d4", + "Define what is the unit price of the product.": "\u1780\u17c6\u178e\u178f\u17cb\u178f\u1798\u17d2\u179b\u17c3\u17af\u1780\u178f\u17b6\u1793\u17c3\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Condition": "\u179b\u1780\u17d2\u1781\u1781\u178e\u17d2\u178c", + "Determine in which condition the product is returned.": "\u1780\u17c6\u178e\u178f\u17cb\u1780\u17d2\u1793\u17bb\u1784\u179b\u1780\u17d2\u1781\u1781\u178e\u17d2\u178c\u178e\u17b6\u1798\u17bd\u1799\u178a\u17c2\u179b\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u1782\u179b\u17cb\u1798\u1780\u179c\u17b7\u1789\u17d4", + "Damaged": "\u1794\u17b6\u1793\u1781\u17bc\u1785\u1781\u17b6\u178f", + "Unspoiled": "\u1798\u17b7\u1793\u1781\u17bc\u1785", + "Other Observations": "\u1780\u17b6\u179a\u179f\u1784\u17d2\u1780\u17c1\u178f\u1795\u17d2\u179f\u17c1\u1784\u1791\u17c0\u178f", + "Describe in details the condition of the returned product.": "\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u179b\u1798\u17d2\u17a2\u17b7\u178f\u17a2\u17c6\u1796\u17b8\u179b\u1780\u17d2\u1781\u1781\u178e\u17d2\u178c\u1793\u17c3\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1794\u17b6\u1793\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1798\u1780\u179c\u17b7\u1789\u17d4", + "Mode": "Mode", + "Wipe All": "\u179b\u17bb\u1794\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb", + "Wipe Plus Grocery": "\u179b\u17bb\u1794\u1787\u17b6\u1798\u17bd\u1799\u1782\u17d2\u179a\u17bf\u1784\u1794\u1793\u17d2\u179b\u17b6\u179f\u17cb", + "Choose what mode applies to this demo.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u179a\u1794\u17c0\u1794\u178e\u17b6\u178a\u17c2\u179b\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1785\u17c6\u1796\u17c4\u17c7\u1780\u17b6\u179a\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1793\u17c1\u17c7\u17d4", + "Create Sales (needs Procurements)": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u179b\u1780\u17cb (\u178f\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b)", + "Set if the sales should be created.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u1780\u17b6\u179a\u179b\u1780\u17cb\u1782\u17bd\u179a\u178f\u17c2\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u17d4", + "Create Procurements": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Will create procurements.": "\u1793\u17b9\u1784\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u17d4", + "Scheduled On": "\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1796\u17c1\u179b\u1794\u17be\u1780", + "Set when the transaction should be executed.": "\u1780\u17c6\u178e\u178f\u17cb\u1793\u17c5\u1796\u17c1\u179b\u178a\u17c2\u179b\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1782\u17bd\u179a\u178f\u17c2\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u17d4", + "Unit Group Name": "\u1788\u17d2\u1798\u17c4\u17c7\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6", + "Provide a unit name to the unit.": "\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u17af\u1780\u178f\u17b6\u1791\u17c5\u1792\u17b6\u178f\u17bb\u17d4", + "Describe the current unit.": "\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u17a2\u17c6\u1796\u17b8\u17af\u1780\u178f\u17b6\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u17d4", + "assign the current unit to a group.": "\u1780\u17c6\u178e\u178f\u17cb\u17af\u1780\u178f\u17b6\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1791\u17c5\u1780\u17d2\u179a\u17bb\u1798\u17d4", + "define the unit value.": "\u1780\u17c6\u178e\u178f\u17cb\u178f\u1798\u17d2\u179b\u17c3\u17af\u1780\u178f\u17b6\u17d4", + "Provide a unit name to the units group.": "\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u17af\u1780\u178f\u17b6\u1791\u17c5\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6\u17d4", + "Describe the current unit group.": "\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u17a2\u17c6\u1796\u17b8\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u17d4", + "POS": "\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u179b\u1780\u17cb", + "Open POS": "\u1794\u17be\u1780\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u179b\u1780\u17cb", + "Create Register": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7", + "Instalments": "\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7", + "Procurement Name": "\u1788\u17d2\u1798\u17c4\u17c7\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Provide a name that will help to identify the procurement.": "\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u178a\u17c2\u179b\u1793\u17b9\u1784\u1787\u17bd\u1799\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e\u1793\u17c3\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u17d4", + "The profile has been successfully saved.": "\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u179a\u17bc\u1794\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The user attribute has been saved.": "\u179b\u1780\u17d2\u1781\u178e\u17c8\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "The options has been successfully updated.": "\u1787\u1798\u17d2\u179a\u17be\u179f\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Wrong password provided": "\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c", + "Wrong old password provided": "\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1785\u17b6\u1799\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c", + "Password Successfully updated.": "\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The addresses were successfully updated.": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Use Customer Billing": "\u1794\u17d2\u179a\u17be\u179c\u17b7\u1780\u17d0\u1799\u1794\u17d0\u178f\u17d2\u179a\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Define whether the customer billing information should be used.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u1793\u17c3\u1780\u17b6\u179a\u1785\u17c1\u1789\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1782\u17bd\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u178a\u17c2\u179a\u17ac\u1791\u17c1\u17d4", + "General Shipping": "\u1780\u17b6\u179a\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u1791\u17bc\u1791\u17c5", + "Define how the shipping is calculated.": "\u1780\u17c6\u178e\u178f\u17cb\u1796\u17b8\u179a\u1794\u17c0\u1794\u178a\u17c2\u179b\u1780\u17b6\u179a\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u178e\u1793\u17b6\u17d4", + "Shipping Fees": "\u1790\u17d2\u179b\u17c3\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793", + "Define shipping fees.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17d2\u179b\u17c3\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u17d4", + "Use Customer Shipping": "\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793", + "Define whether the customer shipping information should be used.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1782\u17bd\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u178a\u17c2\u179a\u17ac\u1791\u17c1\u17d4", + "Invoice Number": "\u179b\u17c1\u1781\u200b\u179c\u17b7\u200b\u1780\u17d0\u200b\u1799\u200b\u1794\u17d0\u178f\u17d2\u179a", + "If the procurement has been issued outside of NexoPOS, please provide a unique reference.": "\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17c1\u1789\u1780\u17d2\u179a\u17c5 NexoPOS \u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb\u17af\u1780\u179f\u17b6\u179a\u1799\u17c4\u1784\u178f\u17c2\u1798\u17bd\u1799\u1782\u178f\u17cb\u17d4", + "Delivery Time": "\u1796\u17c1\u179b\u179c\u17c1\u179b\u17b6\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793", + "If the procurement has to be delivered at a specific time, define the moment here.": "\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u1782\u179b\u17cb\u1787\u17bc\u1793\u1793\u17c5\u1796\u17c1\u179b\u1787\u17b6\u1780\u17cb\u179b\u17b6\u1780\u17cb\u178e\u17b6\u1798\u17bd\u1799 \u1780\u17c6\u178e\u178f\u17cb\u1796\u17c1\u179b\u179c\u17c1\u179b\u17b6\u1793\u17c5\u1791\u17b8\u1793\u17c1\u17c7\u17d4", + "If you would like to define a custom invoice date.": "\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1780\u17c6\u178e\u178f\u17cb\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u1795\u17d2\u1791\u17b6\u179b\u17cb\u1781\u17d2\u179b\u17bd\u1793\u17d4", + "Automatic Approval": "\u1780\u17b6\u179a\u17a2\u1793\u17bb\u1798\u17d0\u178f\u178a\u17c4\u1799\u179f\u17d2\u179c\u17d0\u1799\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7", + "Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u1782\u17bd\u179a\u178f\u17c2\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c4\u1799\u179f\u17d2\u179c\u17d0\u1799\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1790\u17b6\u1794\u17b6\u1793\u1799\u179b\u17cb\u1796\u17d2\u179a\u1798\u1793\u17c5\u1796\u17c1\u179b\u1780\u17b6\u179a\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u17d4", + "Pending": "\u1780\u17c6\u1796\u17bb\u1784\u179a\u1784\u17cb\u1785\u17b6\u17c6", + "Delivered": "\u1794\u17b6\u1793\u1785\u17c2\u1780\u1785\u17b6\u1799", + "Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u17a2\u17d2\u179c\u17b8\u1787\u17b6\u178f\u1798\u17d2\u179b\u17c3\u1787\u17b6\u1780\u17cb\u179f\u17d2\u178f\u17c2\u1784\u1793\u17c3\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u17d4 \u1793\u17c5\u1796\u17c1\u179b\u178a\u17c2\u179b \"Delivered\" \u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u1794\u17b6\u1793\u1791\u17c1 \u17a0\u17be\u1799\u179f\u17d2\u178f\u17bb\u1780\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u17b6\u1794\u17cb\u178a\u17c1\u178f\u17d4", + "Determine what is the actual payment status of the procurement.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u17a2\u17d2\u179c\u17b8\u1787\u17b6\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1787\u17b6\u1780\u17cb\u179f\u17d2\u178f\u17c2\u1784\u1793\u17c3\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u17d4", + "Determine what is the actual provider of the current procurement.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u17a2\u17d2\u179c\u17b8\u1787\u17b6\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1787\u17b6\u1780\u17cb\u179f\u17d2\u178f\u17c2\u1784\u1793\u17c3\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u17d4", + "Theme": "\u179f\u17d2\u1794\u17c2\u1780", + "Dark": "\u1784\u1784\u17b9\u178f", + "Light": "\u1797\u17d2\u179b\u17ba", + "Define what is the theme that applies to the dashboard.": "\u1780\u17c6\u178e\u178f\u17cb\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u1787\u17b6\u1794\u17d2\u179a\u1792\u17b6\u1793\u1794\u1791\u178a\u17c2\u179b\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1785\u17c6\u1796\u17c4\u17c7\u1795\u17d2\u1791\u17b6\u17c6\u1784\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u17d4", + "Avatar": "\u179a\u17bc\u1794\u178f\u17c6\u178e\u17b6\u1784", + "Define the image that should be used as an avatar.": "\u1780\u17c6\u178e\u178f\u17cb\u179a\u17bc\u1794\u1797\u17b6\u1796\u178a\u17c2\u179b\u1782\u17bd\u179a\u1794\u17d2\u179a\u17be\u1787\u17b6\u179a\u17bc\u1794\u178f\u17c6\u178e\u17b6\u1784\u17d4", + "Language": "\u1797\u17b6\u179f\u17b6", + "Choose the language for the current account.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1797\u17b6\u179f\u17b6\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1782\u178e\u1793\u17b8\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u17d4", + "Biling": "\u179c\u17b7\u1780\u17d0\u1799\u1794\u17d0\u178f\u17d2\u179a", + "Security": "\u179f\u17bb\u179c\u178f\u17d2\u1790\u17b7\u1797\u17b6\u1796", + "Old Password": "\u179b\u17c1\u1781\u179f\u17c6\u1784\u17b6\u178f\u17cb\u200b\u1785\u17b6\u179f\u17cb", + "Provide the old password.": "\u1795\u17d2\u178f\u179b\u17cb\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1785\u17b6\u179f\u17cb\u17d4", + "Change your password with a better stronger password.": "\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1787\u17b6\u1798\u17bd\u1799\u1793\u17b9\u1784\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u178a\u17c2\u179b\u179a\u17b9\u1784\u1798\u17b6\u17c6\u1787\u17b6\u1784\u1798\u17bb\u1793\u17d4", + "Password Confirmation": "\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u200b\u1796\u17b6\u1780\u17d2\u1799\u200b\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb", + "API Token": "API Token", + "Sign In — NexoPOS": "\u1785\u17bc\u179b\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb — NexoPOS", + "Sign Up — NexoPOS": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7 — NexoPOS", + "No activation is needed for this account.": "\u1798\u17b7\u1793\u1785\u17b6\u17c6\u1794\u17b6\u1785\u17cb\u1792\u17d2\u179c\u17be\u17b1\u17d2\u1799\u179f\u1780\u1798\u17d2\u1798\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1782\u178e\u1793\u17b8\u1793\u17c1\u17c7\u1791\u17c1\u17d4", + "Invalid activation token.": "Token \u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1792\u17d2\u179c\u17be\u17b1\u17d2\u1799\u179f\u1780\u1798\u17d2\u1798\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "The expiration token has expired.": "\u1793\u17b7\u1798\u17b7\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb\u1794\u17b6\u1793\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb\u17a0\u17be\u1799\u17d4", + "Your account is not activated.": "\u1782\u178e\u1793\u17b8\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1791\u17c1\u17d4", + "Password Lost": "\u1794\u17b6\u178f\u17cb\u179b\u17c1\u1781\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb", + "Unable to change a password for a non active user.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u17d2\u178f\u17bc\u179a\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u178a\u17c2\u179b\u1798\u17b7\u1793\u179f\u1780\u1798\u17d2\u1798\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Unable to proceed as the token provided is invalid.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u178f\u200b\u1794\u17b6\u1793\u200b\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a token \u200b\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u1795\u17d2\u178a\u179b\u17cb\u200b\u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "The token has expired. Please request a new activation token.": "\u179f\u1789\u17d2\u1789\u17b6\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1794\u17b6\u1793\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb\u17a0\u17be\u1799\u17d4 \u179f\u17bc\u1798\u179f\u17d2\u1793\u17be\u179a Token \u1792\u17d2\u179c\u17be\u17b1\u17d2\u1799\u179f\u1780\u1798\u17d2\u1798\u1790\u17d2\u1798\u17b8\u17d4", + "Set New Password": "\u1780\u17c6\u178e\u178f\u17cb\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1790\u17d2\u1798\u17b8", + "Database Update": "\u1780\u17b6\u179a\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799", + "This account is disabled.": "\u1782\u178e\u1793\u17b8\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791\u17d4", + "Unable to find record having that username.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179a\u1780\u1783\u17be\u1789\u1780\u17c6\u178e\u178f\u17cb\u178f\u17d2\u179a\u17b6\u178a\u17c2\u179b\u1798\u17b6\u1793 Username \u1793\u17c4\u17c7\u1791\u17c1\u17d4", + "Unable to find record having that password.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179a\u1780\u1783\u17be\u1789\u1780\u17c6\u178e\u178f\u17cb\u178f\u17d2\u179a\u17b6\u178a\u17c2\u179b\u1798\u17b6\u1793\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1793\u17c4\u17c7\u17d4", + "Invalid username or password.": "\u1788\u17d2\u1798\u17c4\u17c7\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be \u17ac\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Unable to login, the provided account is not active.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1785\u17bc\u179b\u1794\u17b6\u1793\u1791\u17c1 \u1782\u178e\u1793\u17b8\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178a\u179b\u17cb\u1798\u17b7\u1793\u179f\u1780\u1798\u17d2\u1798\u17d4", + "You have been successfully connected.": "\u17a2\u17d2\u1793\u1780\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1797\u17d2\u1787\u17b6\u1794\u17cb\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The recovery email has been send to your inbox.": "\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u179f\u1784\u17d2\u1782\u17d2\u179a\u17c4\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u1789\u17be\u1791\u17c5\u1794\u17d2\u179a\u17a2\u1794\u17cb\u179f\u17c6\u1794\u17bb\u178f\u17d2\u179a\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4", + "Unable to find a record matching your entry.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1780\u17c6\u178e\u178f\u17cb\u178f\u17d2\u179a\u17b6\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1793\u17b9\u1784\u1780\u17b6\u179a\u1785\u17bc\u179b\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4", + "Unable to find the requested user.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Unable to submit a new password for a non active user.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u178a\u17b6\u1780\u17cb\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1790\u17d2\u1798\u17b8\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u178a\u17c2\u179b\u1798\u17b7\u1793\u179f\u1780\u1798\u17d2\u1798\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Unable to proceed, the provided token is not valid.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u178f\u200b\u1794\u17b6\u1793 \u179f\u1789\u17d2\u1789\u17b6\u200b\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u1795\u17d2\u178a\u179b\u17cb\u200b\u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u200b\u1791\u17c1\u17d4", + "Unable to proceed, the token has expired.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 \u179f\u1789\u17d2\u1789\u17b6\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1794\u17b6\u1793\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb\u17a0\u17be\u1799\u17d4", + "Your password has been updated.": "\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "Unable to edit a register that is currently in use": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1780\u17c2\u200b\u179f\u1798\u17d2\u179a\u17bd\u179b\u200b\u1780\u17b6\u179a\u200b\u1785\u17bb\u17c7\u200b\u1788\u17d2\u1798\u17c4\u17c7\u200b\u178a\u17c2\u179b\u200b\u1780\u17c6\u1796\u17bb\u1784\u200b\u1794\u17d2\u179a\u17be\u200b\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u200b\u1794\u17b6\u1793\u200b\u1791\u17c1\u17d4", + "No register has been opened by the logged user.": "\u1782\u17d2\u1798\u17b6\u1793\u1780\u17b6\u179a\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u178e\u17b6\u1798\u17bd\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17be\u1780\u178a\u17c4\u1799\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1785\u17bc\u179b\u1793\u17c4\u17c7\u1791\u17c1\u17d4", + "The register is opened.": "\u1780\u17b6\u179a\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1794\u17d2\u179a\u17b6\u1780\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17be\u1780\u17d4", + "Cash In": "\u178a\u17b6\u1780\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1785\u17bc\u179b", + "Cash Out": "\u178a\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1785\u17c1\u1789", + "Closing": "\u1780\u17c6\u1796\u17bb\u1784\u1794\u17b7\u1791", + "Opening": "\u1780\u17c6\u1796\u17bb\u1784\u1794\u17be\u1780", + "Sale": "\u179b\u1780\u17cb", + "Refund": "\u179f\u1784\u179b\u17bb\u1799\u179c\u17b7\u1789", + "The register doesn\\'t have an history.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1793\u17c3\u1780\u17b6\u179a\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1791\u17c1\u17d4", + "Unable to check a register session history if it\\'s closed.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1796\u17b7\u1793\u17b7\u178f\u17d2\u1799\u1798\u17be\u179b\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u179f\u1798\u17d0\u1799\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1794\u17b6\u1793\u1791\u17c1\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u179c\u17b6\u1794\u17b7\u1791\u17d4", + "Register History For : %s": "\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1794\u17d2\u179a\u17b6\u1780\u17cb : %s", + "Unable to find the category using the provided identifier": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u179a\u1780\u200b\u1783\u17be\u1789\u200b\u1794\u17d2\u179a\u1797\u17c1\u1791\u200b\u178a\u17c4\u1799\u200b\u1794\u17d2\u179a\u17be\u200b\u1782\u17d2\u179a\u17bf\u1784\u200b\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u1795\u17d2\u178f\u179b\u17cb\u200b\u17b1\u17d2\u1799\u200b\u1791\u17c1\u17d4", + "Can\\'t delete a category having sub categories linked to it.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17bb\u1794\u1794\u17d2\u179a\u1797\u17c1\u1791\u178a\u17c2\u179b\u1798\u17b6\u1793\u1794\u17d2\u179a\u1797\u17c1\u1791\u179a\u1784\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1791\u17c5\u179c\u17b6\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "The category has been deleted.": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u179b\u17bb\u1794\u17d4", + "Unable to find the category using the provided identifier.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u179a\u1780\u200b\u1783\u17be\u1789\u200b\u1794\u17d2\u179a\u1797\u17c1\u1791\u200b\u178a\u17c4\u1799\u200b\u1794\u17d2\u179a\u17be\u200b\u1782\u17d2\u179a\u17bf\u1784\u200b\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u1795\u17d2\u178f\u179b\u17cb\u200b\u17b1\u17d2\u1799\u200b\u1791\u17c1\u17d4", + "Unable to find the attached category parent": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1798\u17c1\u1794\u17d2\u179a\u1797\u17c1\u1791\u178a\u17c2\u179b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1798\u1780\u1787\u17b6\u1798\u17bd\u1799\u1791\u17c1\u17d4", + "Unable to proceed. The request doesn\\'t provide enough data which could be handled": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u179f\u17c6\u178e\u17be\u1798\u17b7\u1793\u1795\u17d2\u178f\u179b\u17cb\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u17b6\u1793\u17cb\u178a\u17c2\u179b\u17a2\u17b6\u1785\u178a\u17c4\u17c7\u179f\u17d2\u179a\u17b6\u1799\u1794\u17b6\u1793\u17d4", + "The category has been correctly saved": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1799\u17c9\u17b6\u1784\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "The category has been updated": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796", + "The category products has been refreshed": "\u1795\u179b\u17b7\u178f\u1795\u179b\u1794\u17d2\u179a\u1797\u17c1\u1791\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u17b1\u17d2\u1799\u179f\u17d2\u179a\u179f\u17cb", + "Unable to delete an entry that no longer exists.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17bb\u1794\u1792\u17b6\u178f\u17bb\u178a\u17c2\u179b\u1798\u17b7\u1793\u1798\u17b6\u1793\u1791\u17c0\u178f\u1791\u17c1\u17d4", + "The entry has been successfully deleted.": "\u1792\u17b6\u178f\u17bb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Unable to load the CRUD resource : %s.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1795\u17d2\u1791\u17bb\u1780\u1792\u1793\u1792\u17b6\u1793 CRUD \u1794\u17b6\u1793\u1791\u17c1\u17d6 %s \u17d4", + "Unhandled crud resource": "\u1792\u1793\u1792\u17b6\u1793\u1786\u17c5\u178a\u17c2\u179b\u1798\u17b7\u1793\u1794\u17b6\u1793\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784", + "You need to select at least one item to delete": "\u17a2\u17d2\u1793\u1780\u178f\u17d2\u179a\u17bc\u179c\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1799\u17c9\u17b6\u1784\u17a0\u17c4\u1785\u178e\u17b6\u179f\u17cb\u1792\u17b6\u178f\u17bb\u1798\u17bd\u1799\u178a\u17be\u1798\u17d2\u1794\u17b8\u179b\u17bb\u1794", + "You need to define which action to perform": "\u17a2\u17d2\u1793\u1780\u178f\u17d2\u179a\u17bc\u179c\u1780\u17c6\u178e\u178f\u17cb\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u178e\u17b6\u1798\u17bd\u1799\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f", + "%s has been processed, %s has not been processed.": "%s \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a %s \u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1791\u17c1\u17d4", + "Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1791\u17c5\u1799\u1780\u1792\u17b6\u178f\u17bb\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u1792\u1793\u1792\u17b6\u1793 CRUD \u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1798\u17b7\u1793\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u179c\u17b7\u1792\u17b8\u179f\u17b6\u179f\u17d2\u178f\u17d2\u179a \"getEntries\" \u1791\u17c1\u17d4", + "Unable to proceed. No matching CRUD resource has been found.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u179a\u1780\u1798\u17b7\u1793\u1783\u17be\u1789\u1792\u1793\u1792\u17b6\u1793 CRUD \u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1782\u17d2\u1793\u17b6\u1791\u17c1\u17d4", + "The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.": "\u1790\u17d2\u1793\u17b6\u1780\u17cb \"%s\" \u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1791\u17c1\u17d4 \u178f\u17be\u200b\u1790\u17d2\u1793\u17b6\u1780\u17cb\u200b\u1786\u17c5\u200b\u1793\u17c4\u17c7\u200b\u1798\u17b6\u1793\u200b\u1791\u17c1? \u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u17b6\u1780\u178a\u1790\u17b6\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1780\u179a\u178e\u17b8\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u179c\u17b6\u1787\u17b6\u1780\u179a\u178e\u17b8\u17d4", + "The crud columns exceed the maximum column that can be exported (27)": "\u1787\u17bd\u179a\u200b\u1788\u179a\u200b\u1786\u17c5\u200b\u179b\u17be\u179f\u200b\u1787\u17bd\u179a\u200b\u1788\u179a\u200b\u17a2\u178f\u17b7\u1794\u179a\u1798\u17b6\u200b\u178a\u17c2\u179b\u200b\u17a2\u17b6\u1785\u200b\u1793\u17b6\u17c6\u1785\u17c1\u1789\u200b\u1794\u17b6\u1793 (27)", + "Unable to export if there is nothing to export.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1793\u17b6\u17c6\u1785\u17c1\u1789\u1794\u17b6\u1793\u1791\u17c1 \u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u1798\u17b7\u1793\u1798\u17b6\u1793\u17a2\u17d2\u179c\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1793\u17b6\u17c6\u1785\u17c1\u1789\u17d4", + "This link has expired.": "\u178f\u17c6\u178e\u1793\u17c1\u17c7\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb\u17a0\u17be\u1799\u17d4", + "The requested file cannot be downloaded or has already been downloaded.": "\u17af\u1780\u179f\u17b6\u179a\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1791\u17b6\u1789\u1799\u1780\u1794\u17b6\u1793 \u17ac\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1791\u17b6\u1789\u1799\u1780\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d4", + "The requested customer cannot be found.": "\u179a\u1780\u1798\u17b7\u1793\u1783\u17be\u1789\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u1791\u17c1\u17d4", + "Void": "\u1798\u17c4\u1783\u17c8", + "Create Coupon": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "helps you creating a coupon.": "\u1787\u17bd\u1799\u17a2\u17d2\u1793\u1780\u1794\u1784\u17d2\u1780\u17be\u178f\u1782\u17bc\u1794\u17c9\u17bb\u1784\u17d4", + "Edit Coupon": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Editing an existing coupon.": "\u1780\u17b6\u179a\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1782\u17bc\u1794\u17c9\u17bb\u1784\u178a\u17c2\u179b\u1798\u17b6\u1793\u179f\u17d2\u179a\u17b6\u1794\u17cb\u17d4", + "Invalid Request.": "\u179f\u17c6\u178e\u17be\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "%s Coupons": "%s \u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Displays the customer account history for %s": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb %s", + "Account History : %s": "\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1782\u178e\u1793\u17b8 : %s", + "%s Coupon History": "%s \u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Unable to delete a group to which customers are still assigned.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17bb\u1794\u1780\u17d2\u179a\u17bb\u1798\u178a\u17c2\u179b\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1793\u17c5\u178f\u17c2\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17b6\u178f\u17cb\u178f\u17b6\u17c6\u1784\u17d4", + "The customer group has been deleted.": "\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "Unable to find the requested group.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1780\u17d2\u179a\u17bb\u1798\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "The customer group has been successfully created.": "\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The customer group has been successfully saved.": "\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Unable to transfer customers to the same account.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1795\u17d2\u1791\u17c1\u179a\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1791\u17c5\u1782\u178e\u1793\u17b8\u178f\u17c2\u1798\u17bd\u1799\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "All the customers has been transferred to the new group %s.": "\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u1791\u17c1\u179a\u1791\u17c5\u1780\u17d2\u179a\u17bb\u1798\u1790\u17d2\u1798\u17b8 %s \u17d4", + "The categories has been transferred to the group %s.": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u1791\u17c1\u179a\u1791\u17c5\u1780\u17d2\u179a\u17bb\u1798 %s \u17d4", + "No customer identifier has been provided to proceed to the transfer.": "\u1782\u17d2\u1798\u17b6\u1793\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1787\u17bc\u1793\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u1793\u17d2\u178f\u1791\u17c5\u1780\u17b6\u179a\u1795\u17d2\u1791\u17c1\u179a\u17d4", + "Unable to find the requested group using the provided id.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1780\u17d2\u179a\u17bb\u1798\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4", + "\"%s\" is not an instance of \"FieldsService\"": "\"%s\" \u1798\u17b7\u1793\u1798\u17c2\u1793\u1787\u17b6\u17a7\u1791\u17b6\u17a0\u179a\u178e\u17cd\u1793\u17c3 \"FieldsService\" \u1791\u17c1", + "Welcome — %s": "\u179f\u17bc\u1798\u179f\u17d2\u179c\u17b6\u1782\u1798\u1793\u17cd — %s", + "Manage Medias": "\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a\u179f\u17b6\u179b", + "Upload and manage medias (photos).": "\u1794\u1784\u17d2\u17a0\u17c4\u17c7 \u1793\u17b7\u1784\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u1795\u17d2\u179f\u1796\u17d2\u179c\u1795\u17d2\u179f\u17b6\u1799 (\u179a\u17bc\u1794\u1790\u178f)\u17d4", + "The media name was successfully updated.": "\u1788\u17d2\u1798\u17c4\u17c7\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u1795\u17d2\u179f\u1796\u17d2\u179c\u1795\u17d2\u179f\u17b6\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Modules List": "\u1794\u1789\u17d2\u1787\u17b8 Modules", + "List all available modules.": "\u179a\u17b6\u1799 Modules \u178a\u17c2\u179b\u1798\u17b6\u1793\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "Upload A Module": "\u1795\u17d2\u1791\u17bb\u1780\u17a1\u17be\u1784 Module \u1798\u17bd\u1799\u17d4", + "Extends NexoPOS features with some new modules.": "\u1796\u1784\u17d2\u179a\u17b8\u1780\u179b\u1780\u17d2\u1781\u178e\u17c8\u1796\u17b7\u179f\u17c1\u179f NexoPOS \u1787\u17b6\u1798\u17bd\u1799\u1793\u17b9\u1784\u1798\u17c9\u17bc\u178c\u17bb\u179b\u1790\u17d2\u1798\u17b8\u1798\u17bd\u1799\u1785\u17c6\u1793\u17bd\u1793\u17d4", + "The notification has been successfully deleted": "\u1780\u17b6\u179a\u1787\u17bc\u1793\u178a\u17c6\u178e\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799", + "All the notifications have been cleared.": "\u1780\u17b6\u179a\u1787\u17bc\u1793\u178a\u17c6\u178e\u17b9\u1784\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179f\u1798\u17d2\u17a2\u17b6\u178f\u17d4", + "Payment Receipt — %s": "\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb — %s", + "Order Invoice — %s": "\u179c\u17b7\u1780\u17d0\u1799\u1794\u17d0\u178f\u17d2\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789 — %s", + "Order Refund Receipt — %s": "\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789 — %s", + "Order Receipt — %s": "\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789 — %s", + "The printing event has been successfully dispatched.": "\u1796\u17d2\u179a\u17b9\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178e\u17cd\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1796\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1789\u17d2\u1787\u17bc\u1793\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "There is a mismatch between the provided order and the order attached to the instalment.": "\u1798\u17b6\u1793\u1797\u17b6\u1796\u1798\u17b7\u1793\u179f\u17ca\u17b8\u179f\u1784\u17d2\u179c\u17b6\u1780\u17cb\u1782\u17d2\u1793\u17b6\u179a\u179c\u17b6\u1784\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb \u1793\u17b7\u1784\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1787\u17b6\u1798\u17bd\u1799\u1780\u17b6\u179a\u178a\u17c6\u17a1\u17be\u1784\u17d4", + "Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u200b\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u200b\u178a\u17c2\u179b\u200b\u1798\u17b6\u1793\u200b\u179f\u17d2\u178f\u17bb\u1780\u17d4 \u1796\u17b7\u1785\u17b6\u179a\u178e\u17b6\u1792\u17d2\u179c\u17be\u1780\u17b6\u179a\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c \u17ac\u179b\u17bb\u1794\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u17d4", + "You cannot change the status of an already paid procurement.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u1793\u17c3\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1784\u17cb\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d4", + "The procurement payment status has been changed successfully.": "\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The procurement has been marked as paid.": "\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u1790\u17b6\u1794\u17b6\u1793\u1794\u1784\u17cb\u17d4", + "The product which id is %s doesnt\\'t belong to the procurement which id is %s": "\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u1782\u17ba %s \u1798\u17b7\u1793\u1798\u17c2\u1793\u1787\u17b6\u1780\u1798\u17d2\u1798\u179f\u17b7\u1791\u17d2\u1792\u17b7\u179a\u1794\u179f\u17cb\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178a\u17c2\u179b\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u1782\u17ba %s", + "The refresh process has started. You\\'ll get informed once it\\'s complete.": "\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1795\u17d2\u1791\u17bb\u1780\u17a1\u17be\u1784\u179c\u17b7\u1789\u1794\u17b6\u1793\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798\u17a0\u17be\u1799\u17d4 \u17a2\u17d2\u1793\u1780\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1787\u17bc\u1793\u178a\u17c6\u178e\u17b9\u1784\u1793\u17c5\u1796\u17c1\u179b\u179c\u17b6\u1794\u1789\u17d2\u1785\u1794\u17cb\u17d4", + "New Procurement": "\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u1790\u17d2\u1798\u17b8", + "Make a new procurement.": "\u1792\u17d2\u179c\u17be\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u1790\u17d2\u1798\u17b8", + "Edit Procurement": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798", + "Perform adjustment on existing procurement.": "\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1780\u17b6\u179a\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u179b\u17be\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178a\u17c2\u179b\u1798\u17b6\u1793\u179f\u17d2\u179a\u17b6\u1794\u17cb\u17d4", + "%s - Invoice": "%s - \u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a", + "list of product procured.": "\u1794\u1789\u17d2\u1787\u17b8\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1794\u17b6\u1793\u1791\u17b7\u1789\u17d4", + "The product price has been refreshed.": "\u178f\u1798\u17d2\u179b\u17c3\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u17b1\u17d2\u1799\u179f\u17d2\u179a\u179f\u17cb\u17d4", + "The single variation has been deleted.": "\u1794\u17c6\u179a\u17c2\u1794\u17c6\u179a\u17bd\u179b\u178f\u17c2\u1798\u17bd\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".": "\u1794\u17c6\u179a\u17c2\u1794\u17c6\u179a\u17bd\u179b\u1793\u17c1\u17c7\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u1791\u17c1 \u1796\u17d2\u179a\u17c4\u17c7\u179c\u17b6\u1794\u17d2\u179a\u17a0\u17c2\u179b\u1787\u17b6\u1798\u17b7\u1793\u1798\u17b6\u1793 \u17ac\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1791\u17c5\u1795\u179b\u17b7\u178f\u1795\u179b\u1798\u17c1 \"%s\"\u17d4", + "Edit a product": "\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1795\u179b\u17b7\u178f\u1795\u179b", + "Makes modifications to a product": "\u1792\u17d2\u179c\u17be\u1780\u17b6\u179a\u1780\u17c2\u1794\u17d2\u179a\u17c2\u1791\u17c5\u179b\u17be\u1795\u179b\u17b7\u178f\u1795\u179b", + "Create a product": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1795\u179b\u17b7\u178f\u1795\u179b", + "Add a new product on the system": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8\u1793\u17c5\u179b\u17be\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792", + "Stock History For %s": "\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u179f\u17d2\u178f\u17bb\u1780\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb %s", + "Stock Adjustment": "\u1780\u17b6\u179a\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u179f\u17d2\u178f\u17bb\u1780", + "Adjust stock of existing products.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u179f\u17d2\u178f\u17bb\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1798\u17b6\u1793\u179f\u17d2\u179a\u17b6\u1794\u17cb\u17d4", + "Set": "\u1780\u17c6\u178e\u178f\u17cb", + "No stock is provided for the requested product.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u179f\u17d2\u178f\u17bb\u1780\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1787\u17bc\u1793\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u1791\u17c1\u17d4", + "The product unit quantity has been deleted.": "\u1794\u179a\u17b7\u1798\u17b6\u178e\u17af\u1780\u178f\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "Unable to proceed as the request is not valid.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u179f\u17c6\u178e\u17be\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "The unit is not set for the product \"%s\".": "\u17af\u1780\u178f\u17b6\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b \"%s\" \u1791\u17c1\u17d4", + "Unsupported action for the product %s.": "\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u1798\u17b7\u1793\u1782\u17b6\u17c6\u1791\u17d2\u179a\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b %s \u17d4", + "The operation will cause a negative stock for the product \"%s\" (%s).": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17c1\u17c7\u1793\u17b9\u1784\u1794\u178e\u17d2\u178f\u17b6\u179b\u17b1\u17d2\u1799\u1798\u17b6\u1793\u179f\u17d2\u178f\u17bb\u1780\u17a2\u179c\u17b7\u1787\u17d2\u1787\u1798\u17b6\u1793\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b \"%s\" (%s) \u17d4", + "The adjustment quantity can\\'t be negative for the product \"%s\" (%s)": "\u1794\u179a\u17b7\u1798\u17b6\u178e\u1793\u17c3\u1780\u17b6\u179a\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1798\u17b7\u1793\u17a2\u17b6\u1785\u17a2\u179c\u17b7\u1787\u17d2\u1787\u1798\u17b6\u1793\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b \"%s\" (%s)", + "The stock has been adjustment successfully.": "\u179f\u17d2\u178f\u17bb\u1780\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Unable to add the product to the cart as it has expired.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u1790\u17c2\u1798\u200b\u1795\u179b\u17b7\u178f\u1795\u179b\u200b\u1791\u17c5\u200b\u1780\u17d2\u1793\u17bb\u1784\u200b\u179a\u1791\u17c1\u17c7\u200b\u1794\u17b6\u1793\u200b\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u200b\u179c\u17b6\u200b\u1794\u17b6\u1793\u200b\u1795\u17bb\u178f\u200b\u1780\u17c6\u178e\u178f\u17cb\u17d4", + "Unable to add a product that has accurate tracking enabled, using an ordinary barcode.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u1790\u17c2\u1798\u200b\u1795\u179b\u17b7\u178f\u1795\u179b\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u1794\u17be\u1780\u200b\u1780\u17b6\u179a\u200b\u178f\u17b6\u1798\u178a\u17b6\u1793\u200b\u178f\u17d2\u179a\u17b9\u1798\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u178a\u17c4\u1799\u200b\u1794\u17d2\u179a\u17be\u200b\u1794\u17b6\u1780\u17bc\u178a\u200b\u1792\u1798\u17d2\u1798\u178f\u17b6\u17d4", + "There is no products matching the current request.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1793\u17b9\u1784\u179f\u17c6\u178e\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1791\u17c1\u17d4", + "Print Labels": "\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1796\u179f\u17d2\u179b\u17b6\u1780", + "Customize and print products labels.": "\u1794\u17d2\u178a\u17bc\u179a\u178f\u17b6\u1798\u1794\u17c6\u178e\u1784 \u1793\u17b7\u1784\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1796\u179f\u17d2\u179b\u17b6\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Procurements by \"%s\"": "\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178a\u17c4\u1799 \"%s\"", + "%s\\'s Products": "\u1795\u179b\u17b7\u178f\u1795\u179b\u179a\u1794\u179f\u17cb %s", + "Sales Report": "\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u179b\u1780\u17cb", + "Provides an overview over the sales during a specific period": "\u1795\u17d2\u178f\u179b\u17cb\u1793\u17bc\u179c\u1791\u17b7\u178a\u17d2\u178b\u1797\u17b6\u1796\u1791\u17bc\u1791\u17c5\u1793\u17c3\u1780\u17b6\u179a\u179b\u1780\u17cb\u1780\u17d2\u1793\u17bb\u1784\u17a2\u17c6\u17a1\u17bb\u1784\u1796\u17c1\u179b\u1787\u17b6\u1780\u17cb\u179b\u17b6\u1780\u17cb\u1798\u17bd\u1799\u17d4", + "Sales Progress": "\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1793\u17c3\u1780\u17b6\u179a\u179b\u1780\u17cb", + "Provides an overview over the best products sold during a specific period.": "\u1795\u17d2\u178f\u179b\u17cb\u1793\u17bc\u179c\u1791\u17b7\u178a\u17d2\u178b\u1797\u17b6\u1796\u1791\u17bc\u1791\u17c5\u179b\u17be\u1795\u179b\u17b7\u178f\u1795\u179b\u179b\u17d2\u17a2\u1794\u17c6\u1795\u17bb\u178f\u178a\u17c2\u179b\u1794\u17b6\u1793\u179b\u1780\u17cb\u1780\u17d2\u1793\u17bb\u1784\u17a2\u17c6\u17a1\u17bb\u1784\u1796\u17c1\u179b\u1787\u17b6\u1780\u17cb\u179b\u17b6\u1780\u17cb\u1798\u17bd\u1799\u17d4", + "Sold Stock": "\u179f\u17d2\u178f\u17bb\u1780\u178a\u17c2\u179b\u1794\u17b6\u1793\u179b\u1780\u17cb", + "Provides an overview over the sold stock during a specific period.": "\u1795\u17d2\u178f\u179b\u17cb\u1793\u17bc\u179c\u1791\u17b7\u178a\u17d2\u178b\u1797\u17b6\u1796\u1791\u17bc\u1791\u17c5\u179b\u17be\u179f\u17d2\u178f\u17bb\u1780\u178a\u17c2\u179b\u1794\u17b6\u1793\u179b\u1780\u17cb\u1780\u17d2\u1793\u17bb\u1784\u17a2\u17c6\u17a1\u17bb\u1784\u1796\u17c1\u179b\u1787\u17b6\u1780\u17cb\u179b\u17b6\u1780\u17cb\u1798\u17bd\u1799\u17d4", + "Stock Report": "\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u179f\u17d2\u178f\u17bb\u1780\u1780", + "Provides an overview of the products stock.": "\u1795\u17d2\u178f\u179b\u17cb\u1793\u17bc\u179c\u1791\u17b7\u178a\u17d2\u178b\u1797\u17b6\u1796\u1791\u17bc\u1791\u17c5\u1793\u17c3\u179f\u17d2\u178f\u17bb\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Profit Report": "\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1785\u17c6\u178e\u17c1\u1789", + "Provides an overview of the provide of the products sold.": "\u1795\u17d2\u178f\u179b\u17cb\u1793\u17bc\u179c\u1791\u17b7\u178a\u17d2\u178b\u1797\u17b6\u1796\u1791\u17bc\u1791\u17c5\u1793\u17c3\u1780\u17b6\u179a\u1795\u17d2\u178f\u179b\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1794\u17b6\u1793\u179b\u1780\u17cb\u17d4", + "Transactions Report": "\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "Provides an overview on the activity for a specific period.": "\u1795\u17d2\u178f\u179b\u17cb\u1793\u17bc\u179c\u1791\u17b7\u178a\u17d2\u178b\u1797\u17b6\u1796\u1791\u17bc\u1791\u17c5\u17a2\u17c6\u1796\u17b8\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u179a\u1799\u17c8\u1796\u17c1\u179b\u1787\u17b6\u1780\u17cb\u179b\u17b6\u1780\u17cb\u1798\u17bd\u1799\u17d4", + "Combined Report": "\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u179a\u17bd\u1798", + "Provides a combined report for every transactions on products.": "\u1795\u17d2\u178f\u179b\u17cb\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u179a\u17bd\u1798\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u179a\u17b6\u179b\u17cb\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u179b\u17be\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Annual Report": "\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u200b\u1794\u17d2\u179a\u1785\u17b6\u17c6\u1786\u17d2\u1793\u17b6\u17c6", + "Sales By Payment Types": "\u1780\u17b6\u179a\u179b\u1780\u17cb\u178f\u17b6\u1798\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb", + "Provide a report of the sales by payment types, for a specific period.": "\u1795\u17d2\u178f\u179b\u17cb\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u1793\u17c3\u1780\u17b6\u179a\u179b\u1780\u17cb\u178f\u17b6\u1798\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u179a\u1799\u17c8\u1796\u17c1\u179b\u1787\u17b6\u1780\u17cb\u179b\u17b6\u1780\u17cb\u1798\u17bd\u1799\u17d4", + "The report will be computed for the current year.": "\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u1793\u17c1\u17c7\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u178e\u1793\u17b6\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1786\u17d2\u1793\u17b6\u17c6\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u17d4", + "Unknown report to refresh.": "\u1798\u17b7\u1793\u200b\u179f\u17d2\u1782\u17b6\u179b\u17cb\u200b\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u200b\u178a\u17be\u1798\u17d2\u1794\u17b8\u200b\u1795\u17d2\u1791\u17bb\u1780\u200b\u17a1\u17be\u1784\u200b\u179c\u17b7\u1789\u17d4", + "Customers Statement": "\u1796\u17b7\u179f\u17d2\u178f\u17b6\u179a\u1796\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Display the complete customer statement.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1796\u17c1\u1789\u179b\u17c1\u1789\u17d4", + "Invalid authorization code provided.": "\u179b\u17c1\u1781\u1780\u17bc\u178a\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1787\u17bc\u1793\u17d4", + "The database has been successfully seeded.": "\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17b6\u1780\u17cb\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Settings Page Not Found": "\u179a\u1780\u1798\u17b7\u1793\u1783\u17be\u1789\u1791\u17c6\u1796\u17d0\u179a\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb", + "Unable to initiallize the settings page. The identifier \"' . $identifier . '": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798\u1791\u17c6\u1796\u17d0\u179a\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1794\u17b6\u1793\u1791\u17c1\u17d4 The identifier \"' . $identifier . '", + "%s is not an instance of \"%s\".": "%s \u1798\u17b7\u1793\u1798\u17c2\u1793\u1787\u17b6\u17a7\u1791\u17b6\u17a0\u179a\u178e\u17cd\u1793\u17c3 \"%s\".", + "Unable to find the requested product tax using the provided id": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1796\u1793\u17d2\u1792\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb", + "Unable to find the requested product tax using the provided identifier.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u179a\u1780\u200b\u1783\u17be\u1789\u200b\u1796\u1793\u17d2\u1792\u200b\u1795\u179b\u17b7\u178f\u1795\u179b\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u179f\u17d2\u1793\u17be\u200b\u178a\u17c4\u1799\u200b\u1794\u17d2\u179a\u17be\u200b\u1782\u17d2\u179a\u17bf\u1784\u200b\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u1795\u17d2\u178f\u179b\u17cb\u200b\u17b1\u17d2\u1799\u200b\u1791\u17c1\u17d4", + "The product tax has been created.": "\u1796\u1793\u17d2\u1792\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u17a1\u17be\u1784\u17d4", + "The product tax has been updated": "\u1796\u1793\u17d2\u1792\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796", + "Unable to retrieve the requested tax group using the provided identifier \"%s\".": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1791\u17c5\u200b\u1799\u1780\u200b\u1780\u17d2\u179a\u17bb\u1798\u200b\u1796\u1793\u17d2\u1792\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u179f\u17d2\u1793\u17be\u200b\u178a\u17c4\u1799\u200b\u1794\u17d2\u179a\u17be\u200b\u1782\u17d2\u179a\u17bf\u1784\u200b\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u1795\u17d2\u178f\u179b\u17cb \"%s\"\u17d4", + "\"%s\" Record History": "\"%s\" \u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1780\u17c6\u178e\u178f\u17cb\u178f\u17d2\u179a\u17b6", + "Shows all histories generated by the transaction.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u178a\u17c2\u179b\u1794\u1784\u17d2\u1780\u17be\u178f\u178a\u17c4\u1799\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u17d4", + "Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u17d2\u179a\u17be\u200b\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u1780\u17c6\u178e\u178f\u17cb\u200b\u1796\u17c1\u179b\u200b\u179c\u17c1\u179b\u17b6 \u1780\u17be\u178f\u17a1\u17be\u1784\u200b\u178a\u178a\u17c2\u179b\u17d7 \u1793\u17b7\u1784\u200b\u1787\u17b6\u200b\u17a2\u1784\u17d2\u1782\u1797\u17b6\u1796\u200b\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u200b\u1787\u17bd\u179a\u200b\u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1780\u17c6\u178e\u178f\u17cb\u200b\u179a\u1785\u1793\u17b6\u179f\u1798\u17d2\u1796\u17d0\u1793\u17d2\u1792\u200b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Create New Transaction": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1790\u17d2\u1798\u17b8\u17d4", + "Set direct, scheduled transactions.": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178a\u17c4\u1799\u1795\u17d2\u1791\u17b6\u179b\u17cb \u1793\u17b7\u1784\u178f\u17b6\u1798\u1780\u17b6\u179b\u179c\u17b7\u1797\u17b6\u1782\u17d4", + "Update Transaction": "\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "Permission Manager": "\u17a2\u17d2\u1793\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u1780\u17b6\u179a\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f", + "Manage all permissions and roles": "\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u1780\u17b6\u179a\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f \u1793\u17b7\u1784\u178f\u17bd\u1793\u17b6\u1791\u17b8\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb", + "My Profile": "\u1782\u178e\u1793\u17b8\u1781\u17d2\u1789\u17bb\u17c6", + "Change your personal settings": "\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1795\u17d2\u1791\u17b6\u179b\u17cb\u1781\u17d2\u179b\u17bd\u1793\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780", + "The permissions has been updated.": "\u1780\u17b6\u179a\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "The provided data aren\\'t valid": "\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1782\u17ba\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u1791\u17c1\u17d4", + "Dashboard": "\u1795\u17d2\u1791\u17b6\u17c6\u1784\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784", + "Sunday": "\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799", + "Monday": "\u1785\u1793\u17d2\u1791", + "Tuesday": "\u17a2\u1784\u17d2\u1782\u17b6\u179a", + "Wednesday": "\u1796\u17bb\u1792", + "Thursday": "\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd", + "Friday": "\u179f\u17bb\u1780\u17d2\u179a", + "Saturday": "\u179f\u17c5\u179a\u17cd", + "Welcome — NexoPOS": "\u179f\u17bc\u1798\u179f\u17b6\u17d2\u179c\u1782\u1798\u1793\u17cd — NexoPOS", + "The migration has successfully run.": "\u1780\u17b6\u179a\u1792\u17d2\u179c\u17be migration \u1794\u17b6\u1793\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "You\\'re not allowed to see this page.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1798\u17be\u179b\u1791\u17c6\u1796\u17d0\u179a\u1793\u17c1\u17c7\u1791\u17c1\u17d4", + "The recovery has been explicitly disabled.": "\u1780\u17b6\u179a\u179f\u17d2\u178f\u17b6\u179a\u17a1\u17be\u1784\u179c\u17b7\u1789\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791\u1799\u17c9\u17b6\u1784\u1785\u17d2\u1794\u17b6\u179f\u17cb\u179b\u17b6\u179f\u17cb\u17d4", + "Your don\\'t have enough permission to perform this action.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17b6\u179a\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u17b6\u1793\u17cb\u178a\u17be\u1798\u17d2\u1794\u17b8\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u1793\u17c1\u17c7\u1791\u17c1\u17d4", + "You don\\'t have the necessary role to see this page.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u1798\u17b6\u1793\u178f\u17bd\u1793\u17b6\u1791\u17b8\u1785\u17b6\u17c6\u1794\u17b6\u1785\u17cb\u178a\u17be\u1798\u17d2\u1794\u17b8\u1798\u17be\u179b\u1791\u17c6\u1796\u17d0\u179a\u1793\u17c1\u17c7\u1791\u17c1\u17d4", + "The registration has been explicitly disabled.": "\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791\u1799\u17c9\u17b6\u1784\u1785\u17d2\u1794\u17b6\u179f\u17cb\u179b\u17b6\u179f\u17cb\u17d4", + "Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798\u1791\u17c6\u1796\u17d0\u179a\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u17a7\u1794\u1780\u179a\u178e\u17cd\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e \"%s\" \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1792\u17d2\u179c\u17be\u1797\u17d2\u179b\u17b6\u1798\u17d7\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Unable to register. The registration is closed.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1794\u17b6\u1793\u1791\u17c1 \u1796\u17d2\u179a\u17c4\u17c7\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791\u17d4", + "Hold Order Cleared": "\u1794\u17b6\u1793\u1787\u1798\u17d2\u179a\u17c7\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Report Refreshed": "\u1792\u17d2\u179c\u17be\u179a\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u17a1\u17be\u1784\u179c\u17b7\u1789", + "The yearly report has been successfully refreshed for the year \"%s\".": "\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u1794\u17d2\u179a\u1785\u17b6\u17c6\u1786\u17d2\u1793\u17b6\u17c6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u17a1\u17be\u1784\u179c\u17b7\u1789\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799 \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1786\u17d2\u1793\u17b6\u17c6 \"%s\" \u17d4", + "Low Stock Alert": "\u1787\u17bc\u1793\u178a\u17c6\u178e\u17b9\u1784\u1796\u17c1\u179b\u179f\u17d2\u178f\u17bb\u1780\u1793\u17c5\u178f\u17b7\u1785", + "%s product(s) has low stock. Reorder those product(s) before it get exhausted.": "%s \u1795\u179b\u17b7\u178f\u1795\u179b\u1798\u17b6\u1793\u179f\u17d2\u178f\u17bb\u1780\u1791\u17b6\u1794\u17d4 \u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1795\u179b\u17b7\u178f\u1795\u179b\u1791\u17b6\u17c6\u1784\u1793\u17c4\u17c7\u17a1\u17be\u1784\u179c\u17b7\u1789 \u1798\u17bb\u1793\u1796\u17c1\u179b\u179c\u17b6\u17a2\u179f\u17cb\u17d4", + "Scheduled Transactions": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178a\u17c2\u179b\u1794\u17b6\u1793\u1782\u17d2\u179a\u17c4\u1784\u1791\u17bb\u1780", + "the transaction \"%s\" was executed as scheduled on %s.": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u178f\u17b6\u1798\u1780\u17b6\u179a\u1782\u17d2\u179a\u17c4\u1784\u1791\u17bb\u1780\u1793\u17c5\u179b\u17be %s \u17d4", + "Procurement Refreshed": "\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u17a1\u17be\u1784\u179c\u17b7\u1789", + "The procurement \"%s\" has been successfully refreshed.": "\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1792\u17d2\u179c\u17be\u200b\u17a1\u17be\u1784\u200b\u179c\u17b7\u1789\u200b\u178a\u17c4\u1799\u200b\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The transaction was deleted.": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "Workers Aren\\'t Running": "Workers \u1798\u17b7\u1793\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1791\u17c1", + "The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.": "\u1780\u1798\u17d2\u1798\u1780\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17be\u1780 \u1794\u17c9\u17bb\u1793\u17d2\u178f\u17c2\u179c\u17b6\u1798\u17be\u179b\u1791\u17c5\u178a\u17bc\u1785\u1787\u17b6 NexoPOS \u1798\u17b7\u1793\u17a2\u17b6\u1785\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1780\u1798\u17d2\u1798\u1780\u179a\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u1787\u17b6\u1792\u1798\u17d2\u1798\u178f\u17b6 \u179c\u17b6\u1780\u17be\u178f\u17a1\u17be\u1784 \u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u17a2\u17d2\u1793\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "[NexoPOS] Activate Your Account": "[NexoPOS] \u1794\u17be\u1780\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1782\u178e\u1793\u17b8\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4", + "[NexoPOS] A New User Has Registered": "[NexoPOS] \u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1790\u17d2\u1798\u17b8\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7", + "[NexoPOS] Your Account Has Been Created": "[NexoPOS] \u1782\u178e\u1793\u17b8\u200b\u179a\u1794\u179f\u17cb\u200b\u17a2\u17d2\u1793\u1780\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1794\u1784\u17d2\u1780\u17be\u178f", + "Unknown Payment": "\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1798\u17b7\u1793\u179f\u17d2\u1782\u17b6\u179b\u17cb", + "Unable to find the permission with the namespace \"%s\".": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1780\u17b6\u179a\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be namespace \"%s\" \u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Unable to remove the permissions \"%s\". It doesn\\'t exists.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17bb\u1794\u1780\u17b6\u179a\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f \"%s\" \u1794\u17b6\u1793\u1791\u17c1\u17d4 \u179c\u17b6\u1798\u17b7\u1793\u1798\u17b6\u1793\u1791\u17c1\u17d4", + "The role was successfully assigned.": "\u178f\u17bd\u1793\u17b6\u1791\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17b6\u178f\u17cb\u178f\u17b6\u17c6\u1784\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The role were successfully assigned.": "\u178f\u17bd\u1793\u17b6\u1791\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17b6\u178f\u17cb\u178f\u17b6\u17c6\u1784\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Unable to identifier the provided role.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e\u178f\u17bd\u1793\u17b6\u1791\u17b8\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4", + "Partially Due": "\u1787\u17c6\u1796\u17b6\u1780\u17cb\u178a\u17c4\u1799\u1795\u17d2\u1793\u17c2\u1780", + "Take Away": "\u1798\u1780\u1799\u1780\u1795\u17d2\u1791\u17b6\u179b\u17cb", + "Good Condition": "\u179b\u200b\u1780\u17d2\u1781\u17d0\u200b\u1781\u200b\u178e\u17d2\u178c\u17d0\u200b\u179b\u17d2\u17a2", + "Unable to open \"%s\" *, as it\\'s not closed.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u17be\u1780 \"%s\" * \u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u179c\u17b6\u1798\u17b7\u1793\u1794\u17b6\u1793\u1794\u17b7\u1791\u17d4", + "The register has been successfully opened": "\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17be\u1780\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799", + "Unable to open \"%s\" *, as it\\'s not opened.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u17be\u1780 \"%s\" * \u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u179c\u17b6\u1798\u17b7\u1793\u1794\u17be\u1780\u17d4", + "The register has been successfully closed": "\u1780\u17b6\u179a\u1794\u17b7\u1791\u1794\u1789\u17d2\u1787\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799", + "Unable to cashing on \"%s\" *, as it\\'s not opened.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u178a\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179b\u17be \"%s\" * \u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u179c\u17b6\u1798\u17b7\u1793\u1794\u17b6\u1793\u1794\u17be\u1780\u17d4", + "The provided amount is not allowed. The amount should be greater than \"0\". ": "\u1785\u17c6\u1793\u17bd\u1793\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u1791\u17c1\u17d4 \u1785\u17c6\u1793\u17bd\u1793\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1782\u17bd\u179a\u178f\u17c2\u1792\u17c6\u1787\u17b6\u1784 \"0\" \u17d4 ", + "The cash has successfully been stored": "\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799", + "Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u17b6\u1793\u17cb\u178a\u17be\u1798\u17d2\u1794\u17b8\u179b\u17bb\u1794\u1780\u17b6\u179a\u179b\u1780\u17cb\u1796\u17b8 \"%s\" \u1791\u17c1\u17d4 \u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u1780 \u17ac\u1794\u1789\u17d2\u1785\u17c1\u1789\u1785\u17c1\u1789 \u179f\u17bc\u1798\u1796\u17b7\u1785\u17b6\u179a\u178e\u17b6\u1794\u1793\u17d2\u1790\u17c2\u1798\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1798\u17bd\u1799\u1785\u17c6\u1793\u17bd\u1793 (%s) \u1791\u17c5\u1780\u17d2\u1793\u17bb\u1784\u1794\u1789\u17d2\u1787\u17b8\u17d4", + "Unable to cashout on \"%s": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u178a\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1794\u17b6\u1793\u1793\u17c5 \"%s", + "Not enough fund to cash out.": "\u1798\u17b7\u1793\u200b\u1798\u17b6\u1793\u200b\u1790\u179c\u17b7\u1780\u17b6\u200b\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u17b6\u1793\u17cb\u200b\u178a\u17be\u1798\u17d2\u1794\u17b8\u200b\u178a\u1780\u200b\u1785\u17c1\u1789\u17d4", + "The cash has successfully been disbursed.": "\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u1780\u1785\u17c1\u1789\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "In Use": "\u1780\u17c6\u1796\u17bb\u1784\u200b\u1794\u17d2\u179a\u17be", + "Opened": "\u1794\u17b6\u1793\u1794\u17be\u1780", + "Symbolic Links Missing": "\u1794\u17b6\u178f\u17cb\u1793\u17b7\u1798\u17b7\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178f\u17c6\u178e\u1797\u17d2\u1787\u17b6\u1794\u17cb", + "The Symbolic Links to the public directory is missing. Your medias might be broken and not display.": "\u178f\u17c6\u178e\u1793\u17b7\u1798\u17b7\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u1791\u17c5\u1780\u17b6\u1793\u17cb\u1790\u178f\u179f\u17b6\u1792\u17b6\u179a\u178e\u17c8\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b6\u178f\u17cb\u17d4 \u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a\u179f\u17b6\u179b\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17a2\u17b6\u1785\u1781\u17bc\u1785 \u1793\u17b7\u1784\u1798\u17b7\u1793\u1794\u1784\u17d2\u17a0\u17b6\u1789\u17d4", + "Cron Disabled": "Cron \u1794\u17b6\u1793\u1794\u17b7\u1791", + "Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.": "\u1780\u17b6\u179a\u1784\u17b6\u179a Cron \u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u1793\u17c5\u179b\u17be NexoPOS \u1791\u17c1\u17d4 \u1793\u17c1\u17c7\u17a2\u17b6\u1785\u178a\u17b6\u1780\u17cb\u1780\u1798\u17d2\u179a\u17b7\u178f\u179b\u17be\u1798\u17bb\u1781\u1784\u17b6\u179a\u1785\u17b6\u17c6\u1794\u17b6\u1785\u17cb\u17d4 \u1785\u17bb\u1785\u1791\u17b8\u1793\u17c1\u17c7\u178a\u17be\u1798\u17d2\u1794\u17b8\u179a\u17c0\u1793\u1796\u17b8\u179a\u1794\u17c0\u1794\u1787\u17bd\u179f\u1787\u17bb\u179b\u179c\u17b6\u17d4", + "Task Scheduling Disabled": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1780\u17b6\u179b\u179c\u17b7\u1797\u17b6\u1782\u1780\u17b7\u1785\u17d2\u1785\u1780\u17b6\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791", + "NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.": "NexoPOS \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1780\u17c6\u178e\u178f\u17cb\u1796\u17c1\u179b\u1797\u17b6\u179a\u1780\u17b7\u1785\u17d2\u1785\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u1793\u17c1\u17c7\u17a2\u17b6\u1785\u178a\u17b6\u1780\u17cb\u1780\u1798\u17d2\u179a\u17b7\u178f\u179b\u17be\u1798\u17bb\u1781\u1784\u17b6\u179a\u1785\u17b6\u17c6\u1794\u17b6\u1785\u17cb\u17d4 \u1785\u17bb\u1785\u1791\u17b8\u1793\u17c1\u17c7\u178a\u17be\u1798\u17d2\u1794\u17b8\u179a\u17c0\u1793\u1796\u17b8\u179a\u1794\u17c0\u1794\u1787\u17bd\u179f\u1787\u17bb\u179b\u179c\u17b6\u17d4", + "The requested module %s cannot be found.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179a\u1780\u1783\u17be\u1789 Module %s \u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u1791\u17c1\u17d4", + "The manifest.json can\\'t be located inside the module %s on the path: %s": "manifest.json \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1798\u17b6\u1793\u1791\u17b8\u178f\u17b6\u17c6\u1784\u1793\u17c5\u1781\u17b6\u1784\u1780\u17d2\u1793\u17bb\u1784 Module %s \u1793\u17c5\u179b\u17be\u1795\u17d2\u179b\u17bc\u179c\u17d6 %s", + "the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.": "\u17af\u1780\u179f\u17b6\u179a\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6 \"%s\" \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1798\u17b6\u1793\u1791\u17b8\u178f\u17b6\u17c6\u1784\u1793\u17c5\u1781\u17b6\u1784\u1780\u17d2\u1793\u17bb\u1784 manifest.json \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb Module %s \u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Delete Selected entries": "\u179b\u17bb\u1794\u1792\u17b6\u178f\u17bb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f", + "%s entries has been deleted": "%s \u1792\u17b6\u178f\u17bb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794", + "%s entries has not been deleted": "%s \u1792\u17b6\u178f\u17bb\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u1791\u17c1\u17d4", + "A new entry has been successfully created.": "\u1792\u17b6\u178f\u17bb\u1790\u17d2\u1798\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The entry has been successfully updated.": "\u1792\u17b6\u178f\u17bb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Sorting is explicitely disabled for the column \"%s\".": "\u1780\u17b6\u179a\u178f\u1798\u17d2\u179a\u17c0\u1794\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791\u1799\u17c9\u17b6\u1784\u1787\u17b6\u1780\u17cb\u179b\u17b6\u1780\u17cb\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1787\u17bd\u179a\u1788\u179a \"%s\" \u17d4", + "Unidentified Item": "\u1792\u17b6\u178f\u17bb\u1798\u17b7\u1793\u179f\u17d2\u1782\u17b6\u179b\u17cb\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e", + "Non-existent Item": "\u1792\u17b6\u178f\u17bb\u178a\u17c2\u179b\u1798\u17b7\u1793\u1798\u17b6\u1793", + "Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17bb\u1794 \"%s\" \u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u179c\u17b6\u1787\u17b6\u1797\u17b6\u1796\u17a2\u17b6\u179f\u17d2\u179a\u17d0\u1799\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb \"%s\"%s", + "Unable to delete this resource as it has %s dependency with %s item.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17bb\u1794\u1792\u1793\u1792\u17b6\u1793\u1793\u17c1\u17c7\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u179c\u17b6\u1798\u17b6\u1793 %s \u17a2\u17b6\u179f\u17d2\u179a\u17d0\u1799\u1787\u17b6\u1798\u17bd\u1799\u1792\u17b6\u178f\u17bb %s", + "Unable to delete this resource as it has %s dependency with %s items.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17bb\u1794 resource \u1793\u17c1\u17c7\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u179c\u17b6\u1798\u17b6\u1793 %s \u17a2\u17b6\u179f\u17d2\u179a\u17d0\u1799\u1787\u17b6\u1798\u17bd\u1799\u1792\u17b6\u178f\u17bb %s", + "Unable to find the customer using the provided id %s.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb %s \u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178a\u179b\u17cb\u17d4", + "Unable to find the customer using the provided id.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4", + "The customer has been deleted.": "\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u179b\u17bb\u1794\u17d4", + "The email \"%s\" is already used for another customer.": "\u17a2\u17ca\u17b8\u1798\u17c2\u179b \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u179a\u17bd\u1785\u17a0\u17be\u1799\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1795\u17d2\u179f\u17c1\u1784\u1791\u17c0\u178f\u17d4", + "The customer has been created.": "\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u17a1\u17be\u1784\u17d4", + "Unable to find the customer using the provided ID.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4", + "The customer has been edited.": "\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u17d4", + "Unable to find the customer using the provided email.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4", + "Not enough credits on the customer account. Requested : %s, Remaining: %s.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17d2\u179a\u17c1\u178c\u17b8\u178f\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u17b6\u1793\u17cb\u1793\u17c5\u179b\u17be\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1791\u17c1\u17d4 \u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u17d6 %s \u1793\u17c5\u179f\u179b\u17cb\u17d6 %s \u17d4", + "The customer account has been updated.": "\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "The customer account doesn\\'t have enough funds to proceed.": "\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1798\u17b7\u1793\u1798\u17b6\u1793\u1790\u179c\u17b7\u1780\u17b6\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u17b6\u1793\u17cb\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u1793\u17d2\u178f\u17d4", + "Issuing Coupon Failed": "\u1780\u17b6\u179a\u1785\u17c1\u1789\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1794\u17b6\u1793\u1794\u179a\u17b6\u1787\u17d0\u1799", + "Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1782\u17bc\u1794\u17c9\u17bb\u1784\u178a\u17c2\u179b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1791\u17c5\u1793\u17b9\u1784\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb \"%s\" \u1794\u17b6\u1793\u1791\u17c1\u17d4 \u179c\u17b6\u17a0\u17b6\u1780\u17cb\u178a\u17bc\u1785\u1787\u17b6\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1793\u17c1\u17c7\u1798\u17b7\u1793\u1798\u17b6\u1793\u1791\u17c0\u178f\u1791\u17c1\u17d4", + "The provided coupon cannot be loaded for that customer.": "\u1782\u17bc\u1794\u17c9\u17bb\u1784\u178a\u17c2\u179b\u1795\u17d2\u178f\u179b\u17cb\u17b2\u17d2\u1799\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1795\u17d2\u1791\u17bb\u1780\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1793\u17c4\u17c7\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "The provided coupon cannot be loaded for the group assigned to the selected customer.": "\u1782\u17bc\u1794\u17c9\u17bb\u1784\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1795\u17d2\u1791\u17bb\u1780\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17d2\u179a\u17bb\u1798\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1791\u17c5\u17b1\u17d2\u1799\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1791\u17c1\u17d4", + "Unable to find a coupon with the provided code.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1782\u17bc\u1794\u17c9\u17bb\u1784\u178a\u17c2\u179b\u1798\u17b6\u1793\u179b\u17c1\u1781\u1780\u17bc\u178a\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17b1\u17d2\u1799\u1791\u17c1\u17d4", + "The coupon has been updated.": "\u1782\u17bc\u1794\u17c9\u17bb\u1784\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1792\u17d2\u179c\u17be\u200b\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "The group has been created.": "\u1780\u17d2\u179a\u17bb\u1798\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u17a1\u17be\u1784\u17d4", + "Crediting": "\u17a5\u178e\u1791\u17b6\u1793", + "Deducting": "\u1780\u17b6\u178f\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Order Payment": "\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Order Refund": "\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u1784\u17d2\u179c\u17b7\u179b\u179f\u1784\u179c\u17b7\u1789", + "Unknown Operation": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1798\u17b7\u1793\u179f\u17d2\u1782\u17b6\u179b\u17cb", + "Unable to find a reference to the attached coupon : %s": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u179f\u17d2\u179c\u17c2\u1784\u200b\u179a\u1780\u200b\u17af\u1780\u179f\u17b6\u179a\u200b\u1799\u17c4\u1784\u200b\u1791\u17c5\u200b\u1782\u17bc\u1794\u17c9\u17bb\u1784\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17d6 %s", + "Unable to use the coupon %s as it has expired.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u17d2\u179a\u17be\u1782\u17bc\u1794\u17c9\u17bb\u1784 %s \u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u179c\u17b6\u1794\u17b6\u1793\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb\u17d4", + "Unable to use the coupon %s at this moment.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u17d2\u179a\u17be\u1794\u17d0\u178e\u17d2\u178e %s \u1793\u17c5\u1796\u17c1\u179b\u1793\u17c1\u17c7\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "You\\'re not allowed to use this coupon as it\\'s no longer active": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1794\u17d2\u179a\u17be\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1793\u17c1\u17c7\u1791\u17c1 \u1796\u17d2\u179a\u17c4\u17c7\u179c\u17b6\u1798\u17b7\u1793\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1791\u17c0\u178f\u1791\u17c1", + "You\\'re not allowed to use this coupon it has reached the maximum usage allowed.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1794\u17d2\u179a\u17be\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1793\u17c1\u17c7\u1791\u17c1 \u179c\u17b6\u1794\u17b6\u1793\u1788\u17b6\u1793\u178a\u179b\u17cb\u1780\u17b6\u179a\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17a2\u178f\u17b7\u1794\u179a\u1798\u17b6\u178a\u17c2\u179b\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17d4", + "Provide the billing first name.": "\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u178a\u17c6\u1794\u17bc\u1784\u1793\u17c3\u1780\u17b6\u179a\u1785\u17c1\u1789\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u17d4", + "Countable": "\u17a2\u17b6\u1785\u179a\u17b6\u1794\u17cb\u1794\u17b6\u1793\u17d4", + "Piece": "\u1794\u17c6\u178e\u17c2\u1780", + "Small Box": "\u1794\u17d2\u179a\u17a2\u1794\u17cb\u178f\u17bc\u1785", + "Box": "\u1794\u17d2\u179a\u17a2\u1794\u17cb", + "Terminal A": "\u179f\u17d2\u1790\u17b6\u1793\u17b8\u1799 \u1780", + "Terminal B": "\u179f\u17d2\u1790\u17b6\u1793\u17b8\u1799 \u1781", + "Sales Account": "\u1782\u178e\u1793\u17b8\u179b\u1780\u17cb", + "Procurements Account": "\u1782\u178e\u1793\u17b8\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Sale Refunds Account": "\u1782\u178e\u1793\u17b8\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789\u1796\u17b8\u1780\u17b6\u179a\u179b\u1780\u17cb", + "Spoiled Goods Account": "\u1782\u178e\u1793\u17b8\u1791\u17c6\u1793\u17b7\u1789\u1781\u17bc\u1785", + "Customer Crediting Account": "\u1782\u178e\u1793\u17b8\u17a5\u178e\u1791\u17b6\u1793\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Customer Debiting Account": "\u1782\u178e\u1793\u17b8\u17a5\u178e\u1796\u1793\u17d2\u1792\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "GST": "GST", + "SGST": "SGST", + "CGST": "CGST", + "Sample Procurement %s": "\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u1782\u17c6\u179a\u17bc %s", + "generated": "\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f", + "The user attributes has been updated.": "\u1782\u17bb\u178e\u179b\u1780\u17d2\u1781\u178e\u17c8\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "Administrator": "\u17a2\u17d2\u1793\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784", + "Store Administrator": "\u17a2\u17d2\u1793\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u17a0\u17b6\u1784", + "Store Cashier": "\u17a2\u17d2\u1793\u1780\u1782\u17b7\u178f\u179b\u17bb\u1799\u17a0\u17b6\u1784", + "User": "\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "%s products were freed": "%s \u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17c4\u17c7\u179b\u17c2\u1784", + "Restoring cash flow from paid orders...": "\u179f\u17d2\u178f\u17b6\u179a\u179b\u17c6\u17a0\u17bc\u179a\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1796\u17b8\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1784\u17cb...", + "Restoring cash flow from refunded orders...": "\u179f\u17d2\u178f\u17b6\u179a\u179b\u17c6\u17a0\u17bc\u179a\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1796\u17b8\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1784\u17d2\u179c\u17b7\u179b\u179f\u1784\u179c\u17b7\u1789...", + "%s on %s directories were deleted.": "%s \u1793\u17c5\u179b\u17be %s \u1790\u178f\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "%s on %s files were deleted.": "%s \u1793\u17c5\u179b\u17be %s \u17af\u1780\u179f\u17b6\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "%s link were deleted": "%s \u178f\u17c6\u178e\u1797\u17d2\u1787\u17b6\u1794\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794", + "Unable to execute the following class callback string : %s": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u200b\u1781\u17d2\u179f\u17c2\u200b\u17a2\u1780\u17d2\u179f\u179a\u200b\u17a0\u17c5\u200b\u178f\u17d2\u179a\u17a1\u1794\u17cb\u200b\u1790\u17d2\u1793\u17b6\u1780\u17cb\u200b\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1798\u200b\u1794\u17b6\u1793\u200b\u1791\u17c1 : %s", + "%s — %s": "%s — %s", + "The media has been deleted": "\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u1795\u17d2\u179f\u1796\u17d2\u179c\u1795\u17d2\u179f\u17b6\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794", + "Unable to find the media.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u1795\u17d2\u179f\u1796\u17d2\u179c\u1795\u17d2\u179f\u17b6\u1799\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Unable to find the requested file.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17af\u1780\u179f\u17b6\u179a\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Unable to find the media entry": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1792\u17b6\u178f\u17bb\u1780\u17d2\u1793\u17bb\u1784\u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a\u179f\u17b6\u179b\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Home": "\u1791\u17c6\u1796\u17d0\u179a\u178a\u17be\u1798", + "Payment Types": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1793\u17c3\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb", + "Medias": "\u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a\u179f\u17b6\u179b", + "List": "\u1794\u1789\u17d2\u1787\u17b8", + "Create Customer": "\u1794\u1784\u17d2\u1780\u17be\u178f\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Customers Groups": "\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Create Group": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17d2\u179a\u17bb\u1798", + "Reward Systems": "\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb", + "Create Reward": "\u1794\u1784\u17d2\u1780\u17be\u178f\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb", + "List Coupons": "\u1794\u1789\u17d2\u1787\u17b8\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Providers": "\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb", + "Create A Provider": "\u1794\u1784\u17d2\u1780\u17be\u178f\u17a2\u17d2\u1793\u1780\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb", + "Accounting": "\u1782\u178e\u1793\u17c1\u1799\u17d2\u1799", + "Transactions": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "Create Transaction": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "Accounts": "\u1782\u178e\u1793\u17b8", + "Create Account": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1782\u178e\u1793\u17b8", + "Inventory": "\u179f\u17b6\u179a\u1796\u17be\u1797\u17d0\u178e\u17d2\u178c", + "Create Product": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1795\u179b\u17b7\u178f\u1795\u179b", + "Create Category": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1794\u17d2\u179a\u1797\u17c1\u1791", + "Create Unit": "\u1794\u1784\u17d2\u1780\u17be\u178f\u17af\u1780\u178f\u17b6", + "Unit Groups": "\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6", + "Create Unit Groups": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6", + "Stock Flow Records": "\u1780\u17c6\u178e\u178f\u17cb\u178f\u17d2\u179a\u17b6\u179b\u17c6\u17a0\u17bc\u179a\u179f\u17d2\u178f\u17bb", + "Taxes Groups": "\u1780\u17d2\u179a\u17bb\u1798\u1793\u17c3\u1796\u1793\u17d2\u1792", + "Create Tax Groups": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792\u1790\u17d2\u1798\u17b8", + "Create Tax": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1796\u1793\u17d2\u1792", + "Modules": "Modules", + "Upload Module": "\u17a2\u17b6\u1794\u17cb\u17a1\u17bc\u178f Module", + "Users": "\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Create User": "\u1794\u1784\u17d2\u1780\u17be\u178f\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Create Roles": "\u1794\u1784\u17d2\u1780\u17be\u178f\u178f\u17bd\u1793\u17b6\u1791\u17b8", + "Permissions Manager": "\u17a2\u17d2\u1793\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u1780\u17b6\u179a\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f", + "Procurements": "\u1780\u17b6\u178f\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Reports": "\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd", + "Sale Report": "\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u179b\u1780\u17cb", + "Stock History": "\u1780\u17c6\u178e\u178f\u17cb\u178f\u17d2\u179a\u17b6\u179f\u17d2\u178f\u17bb\u1780", + "Incomes & Loosses": "\u1785\u17c6\u1793\u17c1\u1789 \u1793\u17b7\u1784\u1781\u17b6\u178f", + "Sales By Payments": "\u1780\u17b6\u179a\u179b\u1780\u17cb\u178f\u17b6\u1798\u1780\u17b6\u179a\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Settings": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb", + "Invoices": "\u179c\u17b7\u1780\u17d0\u1799\u1794\u17d0\u178f\u17d2\u179a", + "Workers": "Workers", + "Reset": "\u1792\u17d2\u179c\u17be\u17b2\u17d2\u1799\u178a\u17bc\u1785\u178a\u17be\u1798", + "About": "\u17a2\u17c6\u1796\u17b8", + "Unable to locate the requested module.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1780\u17c6\u178e\u178f\u17cb\u1791\u17b8\u178f\u17b6\u17c6\u1784 module \u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Failed to parse the configuration file on the following path \"%s\"": "\u1794\u17b6\u1793\u1794\u179a\u17b6\u1787\u17d0\u1799\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1789\u17c2\u1780\u17af\u1780\u179f\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u179a\u1785\u1793\u17b6\u179f\u1798\u17d2\u1796\u17d0\u1793\u17d2\u1792\u1793\u17c5\u179b\u17be\u1795\u17d2\u179b\u17bc\u179c\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1798 \"%s\"", + "No config.xml has been found on the directory : %s. This folder is ignored": "\u179a\u1780\u1798\u17b7\u1793\u1783\u17be\u1789 config.xml \u1793\u17c5\u179b\u17be\u1790\u178f\u17af\u1780\u179f\u17b6\u179a\u1791\u17c1\u17d4 : %s. \u1790\u178f\u17af\u1780\u179f\u17b6\u179a\u1793\u17c1\u17c7\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u17be\u1796\u17be\u17d4", + "The module \"%s\" has been disabled as the dependency \"%s\" is missing. ": "Module \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1797\u17b6\u1796\u17a2\u17b6\u179f\u17d2\u179a\u17d0\u1799 \"%s\" \u1794\u17b6\u178f\u17cb\u17d4 ", + "The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ": "Module \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1797\u17b6\u1796\u17a2\u17b6\u179f\u17d2\u179a\u17d0\u1799 \"%s\" \u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17be\u1780\u17d4 ", + "The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ": "\u1798\u17c9\u17bc\u178c\u17bb\u179b \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1797\u17b6\u1796\u17a2\u17b6\u179f\u17d2\u179a\u17d0\u1799 \"%s\" \u1798\u17b7\u1793\u1798\u17b6\u1793\u1793\u17c5\u179b\u17be\u1780\u17c6\u178e\u17c2\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u17a2\u1794\u17d2\u1794\u1794\u179a\u1798\u17b6 \"%s\" \u1791\u17c1\u17d4 ", + "The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ": "\u1798\u17c9\u17bc\u178c\u17bb\u179b \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1797\u17b6\u1796\u17a2\u17b6\u179f\u17d2\u179a\u17d0\u1799 \"%s\" \u179f\u17d2\u1790\u17b7\u178f\u1793\u17c5\u179b\u17be\u1780\u17c6\u178e\u17c2\u179b\u17be\u179f\u1796\u17b8 \"%s\" \u178a\u17c2\u179b\u1794\u17b6\u1793\u178e\u17c2\u1793\u17b6\u17c6\u17d4 ", + "The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ": "Module \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791 \u178a\u17c4\u1799\u179f\u17b6\u179a\u179c\u17b6\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1782\u17d2\u1793\u17b6\u1787\u17b6\u1798\u17bd\u1799\u1780\u17c6\u178e\u17c2\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u179a\u1794\u179f\u17cb NexoPOS %s \u1794\u17c9\u17bb\u1793\u17d2\u178f\u17c2\u1791\u17b6\u1798\u1791\u17b6\u179a %s \u17d4 ", + "Unable to detect the folder from where to perform the installation.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179a\u1780\u1783\u17be\u1789\u1790\u178f\u1796\u17b8\u1780\u1793\u17d2\u179b\u17c2\u1784\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1780\u17b6\u179a\u178a\u17c6\u17a1\u17be\u1784\u1793\u17c4\u17c7\u1791\u17c1\u17d4", + "Invalid Module provided.": "\u1795\u17d2\u178f\u179b\u17cb Module \u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Unable to upload this module as it\\'s older than the version installed": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1795\u17d2\u1791\u17bb\u1780\u17a1\u17be\u1784 Module \u1793\u17c1\u17c7\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u179c\u17b6\u1785\u17b6\u179f\u17cb\u1787\u17b6\u1784\u1780\u17c6\u178e\u17c2\u178a\u17c2\u179b\u1794\u17b6\u1793\u178a\u17c6\u17a1\u17be\u1784", + "The module was \"%s\" was successfully installed.": "Module \u1782\u17ba \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17c6\u17a1\u17be\u1784\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The uploaded file is not a valid module.": "\u17af\u1780\u179f\u17b6\u179a\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u1791\u17bb\u1780\u17a1\u17be\u1784\u1798\u17b7\u1793\u1798\u17c2\u1793\u1787\u17b6 Module \u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u1791\u17c1\u17d4", + "The module has been successfully installed.": "Module \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17c6\u17a1\u17be\u1784\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The modules \"%s\" was deleted successfully.": "Module \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Unable to locate a module having as identifier \"%s\".": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1780\u17c6\u178e\u178f\u17cb\u200b\u1791\u17b8\u178f\u17b6\u17c6\u1784 Module \u200b\u178a\u17c2\u179b\u200b\u1798\u17b6\u1793\u200b\u1787\u17b6\u200b\u1782\u17d2\u179a\u17bf\u1784\u200b\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb \"%s\"\u17d4", + "The migration file doens\\'t have a valid class name. Expected class : %s": "\u17af\u1780\u179f\u17b6\u179a\u1795\u17d2\u1791\u17c1\u179a\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u1798\u17b7\u1793\u1798\u17b6\u1793\u1788\u17d2\u1798\u17c4\u17c7\u1790\u17d2\u1793\u17b6\u1780\u17cb\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u1791\u17c1\u17d4 \u1790\u17d2\u1793\u17b6\u1780\u17cb\u179a\u17c6\u1796\u17b9\u1784\u1791\u17bb\u1780 : %s", + "Unable to locate the following file : %s": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1780\u17c6\u178e\u178f\u17cb\u1791\u17b8\u178f\u17b6\u17c6\u1784\u17af\u1780\u179f\u17b6\u179a\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1798\u1794\u17b6\u1793\u1791\u17c1 : %s", + "The migration run successfully.": "\u1780\u17b6\u179a\u1792\u17d2\u179c\u17be\u1785\u17c6\u178e\u17b6\u1780\u179f\u17d2\u179a\u17bb\u1780\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The migration file doens\\'t have a valid method name. Expected method : %s": "\u17af\u1780\u179f\u17b6\u179a\u1795\u17d2\u1791\u17c1\u179a\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u1798\u17b7\u1793\u1798\u17b6\u1793\u1788\u17d2\u1798\u17c4\u17c7\u179c\u17b7\u1792\u17b8\u179f\u17b6\u179f\u17d2\u178f\u17d2\u179a\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u1791\u17c1\u17d4 \u179c\u17b7\u1792\u17b8\u179f\u17b6\u179f\u17d2\u179a\u17d2\u178f\u179a\u17c6\u1796\u17b9\u1784\u1791\u17bb\u1780 : %s", + "The module %s cannot be enabled as his dependency (%s) is missing or not enabled.": "Module %s \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u17be\u1780\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1797\u17b6\u1796\u17a2\u17b6\u179f\u17d2\u179a\u17d0\u1799\u179a\u1794\u179f\u17cb\u1782\u17b6\u178f\u17cb (%s) \u1794\u17b6\u178f\u17cb \u17ac\u1798\u17b7\u1793\u1794\u17b6\u1793\u1794\u17be\u1780\u17d4", + "The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.": "Module %s \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u17be\u1780\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1797\u17b6\u1796\u17a2\u17b6\u179f\u17d2\u179a\u17d0\u1799\u179a\u1794\u179f\u17cb\u1782\u17b6\u178f\u17cb (%s) \u1794\u17b6\u178f\u17cb \u17ac\u1798\u17b7\u1793\u1794\u17b6\u1793\u1794\u17be\u1780\u17d4", + "An Error Occurred \"%s\": %s": "\u1780\u17c6\u17a0\u17bb\u179f\u200b\u1798\u17bd\u1799\u200b\u1794\u17b6\u1793\u200b\u1780\u17be\u178f\u200b\u17a1\u17be\u1784 \"%s\": %s", + "The module has correctly been enabled.": "Module \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17be\u1780\u1799\u17c9\u17b6\u1784\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Unable to enable the module.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u17be\u1780 Module \u1794\u17b6\u1793\u1791\u17c1\u17d4", + "The Module has been disabled.": "Module \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791\u17d4", + "Unable to disable the module.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u17b7\u1791 Module \u1794\u17b6\u1793\u1791\u17c1\u17d4", + "All migration were executed.": "\u1780\u17b6\u179a\u1792\u17d2\u179c\u17be\u1785\u17c6\u178e\u17b6\u1780\u179f\u17d2\u179a\u17bb\u1780\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u17d4", + "Unable to proceed, the modules management is disabled.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 Module \u1780\u17b6\u179a\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791\u17d4", + "A similar module has been found": "Module \u179f\u17d2\u179a\u178a\u17c0\u1784\u1782\u17d2\u1793\u17b6\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u1783\u17be\u1789", + "Missing required parameters to create a notification": "\u1794\u17b6\u178f\u17cb\u1794\u17c9\u17b6\u179a\u17c9\u17b6\u1798\u17c9\u17c2\u178f\u17d2\u179a\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u1787\u17bc\u1793\u178a\u17c6\u178e\u17b9\u1784", + "The order has been placed.": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17b6\u1780\u17cb\u17d4", + "The order has been updated": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796", + "The minimal payment of %s has\\'nt been provided.": "\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u17a2\u1794\u17d2\u1794\u1794\u179a\u1798\u17b6\u1793\u17c3 %s \u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1787\u17bc\u1793\u1791\u17c1\u17d4", + "The percentage discount provided is not valid.": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1785\u17bb\u17c7\u178f\u1798\u17d2\u179b\u17c3\u1787\u17b6\u1797\u17b6\u1782\u179a\u1799\u178a\u17c2\u179b\u1795\u17d2\u178f\u179b\u17cb\u1787\u17bc\u1793\u1782\u17ba\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u1791\u17c1\u17d4", + "A discount cannot exceed the sub total value of an order.": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1785\u17bb\u17c7\u178f\u1798\u17d2\u179b\u17c3\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17be\u179f\u1796\u17b8\u178f\u1798\u17d2\u179b\u17c3\u179f\u179a\u17bb\u1794\u179a\u1784\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Unable to proceed as the order is already paid.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u178f\u200b\u1794\u17b6\u1793\u200b\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u200b\u1780\u17b6\u179a\u200b\u1794\u1789\u17d2\u1787\u17b6\u200b\u1791\u17b7\u1789\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1794\u1784\u17cb\u200b\u179a\u17bd\u1785\u200b\u17a0\u17be\u1799\u17d4", + "No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u17c6\u1796\u17b9\u1784\u1791\u17bb\u1780\u1793\u17c5\u1796\u17c1\u179b\u1793\u17c1\u17c7\u1791\u17c1\u17d4 \u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1785\u1784\u17cb\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1798\u17bb\u1793 \u179f\u17bc\u1798\u1796\u17b7\u1785\u17b6\u179a\u178e\u17b6\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1793\u17c3\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u17d4", + "The payment has been saved.": "\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "Unable to edit an order that is completely paid.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u1784\u17cb\u1791\u17b6\u17c6\u1784\u179f\u17d2\u179a\u17bb\u1784\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Unable to proceed as one of the previous submitted payment is missing from the order.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u178f\u200b\u1794\u17b6\u1793\u200b\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u200b\u1780\u17b6\u179a\u200b\u1794\u1784\u17cb\u200b\u1794\u17d2\u179a\u17b6\u1780\u17cb\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u178a\u17b6\u1780\u17cb\u200b\u179f\u17d2\u1793\u17be\u200b\u1798\u17bb\u1793\u200b\u1798\u17bd\u1799\u200b\u1794\u17b6\u178f\u17cb\u200b\u1796\u17b8\u200b\u1780\u17b6\u179a\u200b\u1794\u1789\u17d2\u1787\u17b6\u200b\u1791\u17b7\u1789\u17d4", + "The order payment status cannot switch to hold as a payment has already been made on that order.": "\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u200b\u1793\u17c3\u200b\u1780\u17b6\u179a\u200b\u1794\u1784\u17cb\u200b\u1794\u17d2\u179a\u17b6\u1780\u17cb\u200b\u1793\u17c3\u200b\u1780\u17b6\u179a\u200b\u1794\u1789\u17d2\u1787\u17b6\u200b\u1791\u17b7\u1789\u200b\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u17d2\u178a\u17bc\u179a\u200b\u1791\u17c5\u200b\u1780\u17b6\u1793\u17cb\u200b\u1794\u17b6\u1793\u200b\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u200b\u1780\u17b6\u179a\u200b\u1791\u17bc\u1791\u17b6\u178f\u17cb\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1792\u17d2\u179c\u17be\u200b\u179a\u17bd\u1785\u200b\u17a0\u17be\u1799\u200b\u179b\u17be\u200b\u1780\u17b6\u179a\u200b\u1794\u1789\u17d2\u1787\u17b6\u200b\u1791\u17b7\u1789\u200b\u1793\u17c4\u17c7\u17d4", + "The customer account funds are\\'nt enough to process the payment.": "\u1798\u17bc\u179b\u1793\u17b7\u1792\u17b7\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1798\u17b7\u1793\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u17b6\u1793\u17cb\u178a\u17be\u1798\u17d2\u1794\u17b8\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1793\u17c4\u17c7\u1791\u17c1\u17d4", + "Unable to proceed. One of the submitted payment type is not supported.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u1794\u17d2\u179a\u1797\u17c1\u1791\u1793\u17c3\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u178a\u17b6\u1780\u17cb\u179f\u17d2\u1793\u17be\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u17b6\u17c6\u1791\u17d2\u179a\u1791\u17c1\u17d4", + "Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1784\u17cb\u178a\u17c4\u1799\u1795\u17d2\u1793\u17c2\u1780\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u1791\u17c1\u17d4 \u1787\u1798\u17d2\u179a\u17be\u179f\u1793\u17c1\u17c7\u17a2\u17b6\u1785\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u1793\u17c5\u179b\u17be\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u17d4", + "Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1798\u17b7\u1793\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u1791\u17c1\u17d4 \u1787\u1798\u17d2\u179a\u17be\u179f\u1793\u17c1\u17c7\u17a2\u17b6\u1785\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u1793\u17c5\u179b\u17be\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u17d4", + "By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.": "\u178f\u17b6\u1798\u179a\u1799\u17c8\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1793\u17c1\u17c7 \u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1793\u17b9\u1784\u179b\u17be\u179f\u1796\u17b8\u17a5\u178e\u1791\u17b6\u1793\u17a2\u178f\u17b7\u1794\u179a\u1798\u17b6\u178a\u17c2\u179b\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1782\u178e\u1793\u17b8\u179a\u1794\u179f\u17cb\u1782\u17b6\u178f\u17cb\u17d4: %s.", + "You\\'re not allowed to make payments.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1791\u17c1\u17d4", + "Unnamed Product": "\u1795\u179b\u17b7\u178f\u1795\u179b\u1782\u17d2\u1798\u17b6\u1793\u1788\u17d2\u1798\u17c4\u17c7", + "Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 \u1798\u17b7\u1793\u1798\u17b6\u1793\u179f\u17d2\u178f\u17bb\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u17b6\u1793\u17cb\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb %s \u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u17af\u1780\u178f\u17b6 %s \u1791\u17c1\u17d4 \u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u17d6 %s \u1798\u17b6\u1793 %s", + "Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 \u1795\u179b\u17b7\u178f\u1795\u179b \"%s\" \u1798\u17b6\u1793\u17af\u1780\u178f\u17b6\u178a\u17c2\u179b\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1791\u17b6\u1789\u1799\u1780\u1798\u1780\u179c\u17b7\u1789\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u179c\u17b6\u1794\u17d2\u179a\u17a0\u17c2\u179b\u1787\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "Unable to find the customer using the provided ID. The order creation has failed.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4 \u1780\u17b6\u179a\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u17b6\u1793\u1794\u179a\u17b6\u1787\u17d0\u1799\u17d4", + "Unable to proceed a refund on an unpaid order.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u178f\u200b\u1780\u17b6\u179a\u200b\u179f\u1784\u200b\u1794\u17d2\u179a\u17b6\u1780\u17cb\u200b\u179c\u17b7\u1789\u200b\u179b\u17be\u200b\u1780\u17b6\u179a\u200b\u1794\u1789\u17d2\u1787\u17b6\u200b\u1791\u17b7\u1789\u200b\u178a\u17c2\u179b\u200b\u1798\u17b7\u1793\u200b\u1794\u17b6\u1793\u200b\u1794\u1784\u17cb\u200b\u1794\u17d2\u179a\u17b6\u1780\u17cb\u17d4", + "The current credit has been issued from a refund.": "\u17a5\u178e\u1791\u17b6\u1793\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17c1\u1789\u1796\u17b8\u1780\u17b6\u179a\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789\u17d4", + "The order has been successfully refunded.": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "unable to proceed to a refund as the provided status is not supported.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1791\u17c5\u1780\u17b6\u179a\u1794\u1784\u17d2\u179c\u17b7\u179b\u179f\u1784\u179c\u17b7\u1789\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u17b6\u17c6\u1791\u17d2\u179a\u17d4", + "The product %s has been successfully refunded.": "\u1795\u179b\u17b7\u178f\u1795\u179b %s \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Unable to find the order product using the provided id.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4", + "Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be \"%s\" \u1787\u17b6 pivot \u1793\u17b7\u1784 \"%s\" \u1787\u17b6\u17a2\u17d2\u1793\u1780\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e", + "Unable to fetch the order as the provided pivot argument is not supported.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1791\u17c5\u200b\u1799\u1780\u200b\u179b\u17c6\u178a\u17b6\u1794\u17cb\u200b\u178a\u17c4\u1799\u200b\u179f\u17b6\u179a\u200b\u17a2\u17b6\u1782\u17bb\u1799\u1798\u17c9\u1784\u17cb\u200b\u1787\u17c6\u1793\u17bd\u1799\u200b\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u1795\u17d2\u178a\u179b\u17cb\u200b\u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1782\u17b6\u17c6\u1791\u17d2\u179a\u17d4", + "The product has been added to the order \"%s\"": "\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c5\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789 \"%s\"", + "the order has been successfully computed.": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u178e\u1793\u17b6\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The order has been deleted.": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "The product has been successfully deleted from the order.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u1785\u17c4\u179b\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u1796\u17b8\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u17d4", + "Unable to find the requested product on the provider order.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u1793\u17c5\u179b\u17be\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u179b\u17cb\u179f\u17c1\u179c\u17b6\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Unknown Status (%s)": "\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u1798\u17b7\u1793\u179f\u17d2\u1782\u17b6\u179b\u17cb (%s)", + "Unknown Product Status": "\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u1795\u179b\u17b7\u178f\u1795\u179b\u1798\u17b7\u1793\u179f\u17d2\u1782\u17b6\u179b\u17cb", + "Ongoing": "\u1780\u17c6\u1796\u17bb\u1784\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a", + "Ready": "\u179a\u17bd\u1785\u179a\u17b6\u179b\u17cb", + "Not Available": "\u1798\u17b7\u1793\u17a2\u17b6\u1785", + "Failed": "\u1794\u179a\u17b6\u1787\u17d0\u1799", + "Unpaid Orders Turned Due": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1798\u17b7\u1793\u1794\u17b6\u1793\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb", + "%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789 %s (s) \u1791\u17b6\u17c6\u1784\u1798\u17b7\u1793\u1791\u17b6\u1793\u17cb\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb \u17ac\u1794\u17b6\u1793\u1794\u1784\u17cb\u178a\u17c4\u1799\u1795\u17d2\u1793\u17c2\u1780\u1794\u17b6\u1793\u178a\u179b\u17cb\u1780\u17c6\u178e\u178f\u17cb\u17d4 \u179c\u17b6\u1780\u17be\u178f\u17a1\u17be\u1784\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17b6\u179a\u1794\u1789\u17d2\u1785\u1794\u17cb\u1798\u17bb\u1793\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178a\u17c2\u179b\u179a\u17c6\u1796\u17b9\u1784\u1791\u17bb\u1780\u17d4", + "No orders to handle for the moment.": "\u1782\u17d2\u1798\u17b6\u1793\u200b\u1780\u17b6\u179a\u200b\u1794\u1789\u17d2\u1787\u17b6\u200b\u17b1\u17d2\u1799\u200b\u178a\u17c4\u17c7\u179f\u17d2\u179a\u17b6\u1799\u200b\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u200b\u1796\u17c1\u179b\u200b\u1793\u17c1\u17c7\u200b\u17d4", + "The order has been correctly voided.": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17b6\u178f\u17cb\u1791\u17bb\u1780\u1787\u17b6\u1798\u17c4\u1783\u17c8\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Unable to find a reference of the provided coupon : %s": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17af\u1780\u179f\u17b6\u179a\u1799\u17c4\u1784\u1793\u17c3\u1794\u17d0\u178e\u17d2\u178e\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb : %s", + "Unable to edit an already paid instalment.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1780\u17b6\u179a\u178a\u17c6\u17a1\u17be\u1784\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1784\u17cb\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d4", + "The instalment has been saved.": "\u1780\u17b6\u179a\u178a\u17c6\u17a1\u17be\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "The instalment has been deleted.": "\u1780\u17b6\u179a\u178a\u17c6\u17a1\u17be\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "The defined amount is not valid.": "\u1785\u17c6\u1793\u17bd\u1793\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1782\u17ba\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u1791\u17c1\u17d4", + "No further instalments is allowed for this order. The total instalment already covers the order total.": "\u1798\u17b7\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1798\u17b6\u1793\u1780\u17b6\u179a\u178a\u17c6\u17a1\u17be\u1784\u1794\u1793\u17d2\u1790\u17c2\u1798\u1791\u17c0\u178f\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1793\u17c1\u17c7\u1791\u17c1\u17d4 \u1780\u17b6\u179a\u178a\u17c6\u17a1\u17be\u1784\u179f\u179a\u17bb\u1794\u1782\u17d2\u179a\u1794\u178a\u178e\u17d2\u178f\u1794\u17cb\u179b\u17be\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u179f\u179a\u17bb\u1794\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d4", + "The instalment has been created.": "\u1780\u17b6\u179a\u178a\u17c6\u17a1\u17be\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u17a1\u17be\u1784\u17d4", + "The provided status is not supported.": "\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u17b6\u17c6\u1791\u17d2\u179a\u1791\u17c1\u17d4", + "The order has been successfully updated.": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Unable to find the requested procurement using the provided identifier.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u17a7\u1794\u1780\u179a\u178e\u17cd\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4", + "Unable to find the assigned provider.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u179b\u17cb\u179f\u17c1\u179c\u17b6\u178a\u17c2\u179b\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u17d4", + "The procurement has been created.": "\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u17a1\u17be\u1784\u17d4", + "Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u178f\u17bb\u1780\u1791\u17bb\u1780\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d4 \u179f\u17bc\u1798\u1796\u17b7\u1785\u17b6\u179a\u178e\u17b6\u179b\u17be\u1780\u17b6\u179a\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f \u1793\u17b7\u1784\u1780\u17b6\u179a\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1797\u17b6\u1782\u17a0\u17ca\u17bb\u1793\u17d4", + "The provider has been edited.": "\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u179b\u17cb\u179f\u17c1\u179c\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u17d4", + "The procurement has been deleted. %s included stock record(s) has been deleted as well.": "\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u179b\u17bb\u1794\u17d4 %s \u179a\u17bd\u1798\u1794\u1789\u17d2\u1785\u17bc\u179b\u1780\u17c6\u178e\u178f\u17cb\u178f\u17d2\u179a\u17b6\u179f\u17d2\u178f\u17bb\u1780\u1780\u17cf\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u1795\u1784\u178a\u17c2\u179a\u17d4", + "Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17bb\u1794\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1798\u17b7\u1793\u1798\u17b6\u1793\u179f\u17d2\u178f\u17bb\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u17b6\u1793\u17cb\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb \"%s\" \u1793\u17c5\u179b\u17be\u17af\u1780\u178f\u17b6 \"%s\" \u17d4 \u1793\u17c1\u17c7\u1791\u17c6\u1793\u1784\u1787\u17b6\u1798\u17b6\u1793\u1793\u17d0\u1799\u1790\u17b6\u1785\u17c6\u1793\u17bd\u1793\u1797\u17b6\u1782\u17a0\u17ca\u17bb\u1793\u1794\u17b6\u1793\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u1787\u17b6\u1798\u17bd\u1799\u1793\u17b9\u1784\u1780\u17b6\u179a\u179b\u1780\u17cb \u1780\u17b6\u179a\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb\u1796\u17b8\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179f\u17d2\u178f\u17bb\u1780\u1791\u17bb\u1780\u17d4", + "Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1798\u17b6\u1793\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u1780\u17d2\u179a\u17bb\u1798\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u17af\u1780\u179f\u17b6\u179a\u1799\u17c4\u1784 \"%s\" \u1787\u17b6 \"%s\"", + "Unable to find the product using the provided id \"%s\"": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb \"%s\"", + "Unable to procure the product \"%s\" as the stock management is disabled.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1791\u17b7\u1789\u1795\u179b\u17b7\u178f\u1795\u179b \"%s\" \u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1780\u17b6\u179a\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u179f\u17d2\u178f\u17bb\u1780\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791\u17d4", + "Unable to procure the product \"%s\" as it is a grouped product.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1791\u17b7\u1789\u1795\u179b\u17b7\u178f\u1795\u179b \"%s\" \u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u179c\u17b6\u1787\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u178a\u17b6\u1780\u17cb\u1787\u17b6\u1780\u17d2\u179a\u17bb\u1798\u17d4", + "The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item": "\u17af\u1780\u178f\u17b6\u200b\u178a\u17c2\u179b\u200b\u1794\u17d2\u179a\u17be\u200b\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u200b\u1795\u179b\u17b7\u178f\u1795\u179b %s \u1798\u17b7\u1793\u200b\u1798\u17c2\u1793\u200b\u1787\u17b6\u200b\u179a\u1794\u179f\u17cb\u200b\u1780\u17d2\u179a\u17bb\u1798\u200b\u17af\u1780\u178f\u17b6\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u1785\u17b6\u178f\u17cb\u200b\u17b1\u17d2\u1799\u200b\u1791\u17c5\u200b\u1792\u17b6\u178f\u17bb\u200b\u1793\u17c4\u17c7\u200b\u1791\u17c1\u17d4", + "The operation has completed.": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u1794\u17cb\u17d4", + "The procurement has been refreshed.": "\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u17b1\u17d2\u1799\u179f\u17d2\u179a\u179f\u17cb\u17d4", + "The procurement has been reset.": "\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u17a1\u17be\u1784\u179c\u17b7\u1789\u17d4", + "The procurement products has been deleted.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "The procurement product has been updated.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "Unable to find the procurement product using the provided id.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4", + "The product %s has been deleted from the procurement %s": "\u1795\u179b\u17b7\u178f\u1795\u179b %s \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u1785\u17c1\u1789\u1796\u17b8\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798 %s", + "The product with the following ID \"%s\" is not initially included on the procurement": "\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1798\u17b6\u1793\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb \"%s\" \u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1798\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u17b6\u1794\u17cb\u1794\u1789\u17d2\u1785\u17bc\u179b\u1780\u17d2\u1793\u17bb\u1784\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u1791\u17c1\u17d4", + "The procurement products has been updated.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "Procurement Automatically Stocked": "\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u179f\u17d2\u178f\u17bb\u1780\u1791\u17bb\u1780\u178a\u17c4\u1799\u179f\u17d2\u179c\u17d0\u1799\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7", + "%s procurement(s) has recently been automatically procured.": "%s \u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u1790\u17d2\u1798\u17b8\u17d7\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1791\u1791\u17bd\u179b\u178a\u17c4\u1799\u179f\u17d2\u179c\u17d0\u1799\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u17d4", + "Draft": "\u179f\u17c1\u1785\u1780\u17d2\u178f\u17b8\u1796\u17d2\u179a\u17b6\u1784", + "The category has been created": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u17a1\u17be\u1784", + "The requested category doesn\\'t exists": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u1798\u17b7\u1793\u1798\u17b6\u1793\u1791\u17c1\u17d4", + "Unable to find the product using the provided id.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4", + "Unable to find the requested product using the provided SKU.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be SKU \u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17b1\u17d2\u1799\u1793\u17c4\u17c7\u1791\u17c1\u17d4", + "The category to which the product is attached doesn\\'t exists or has been deleted": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u200b\u178a\u17c2\u179b\u200b\u1795\u179b\u17b7\u178f\u1795\u179b\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u200b\u1798\u17b7\u1793\u200b\u1798\u17b6\u1793 \u17ac\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u179b\u17bb\u1794", + "Unable to create a product with an unknow type : %s": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1784\u17d2\u1780\u17be\u178f\u200b\u1795\u179b\u17b7\u178f\u1795\u179b\u200b\u178a\u17c2\u179b\u200b\u1798\u17b7\u1793\u200b\u179f\u17d2\u1782\u17b6\u179b\u17cb\u200b\u1794\u17d2\u179a\u1797\u17c1\u1791\u17d6 %s", + "A variation within the product has a barcode which is already in use : %s.": "\u1794\u17c6\u179a\u17c2\u1794\u17c6\u179a\u17bd\u179b\u200b\u1780\u17d2\u1793\u17bb\u1784\u200b\u1795\u179b\u17b7\u178f\u1795\u179b\u200b\u1798\u17b6\u1793\u200b\u1794\u17b6\u1780\u17bc\u178a\u200b\u178a\u17c2\u179b\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1794\u17d2\u179a\u17be\u200b\u179a\u17bd\u1785\u200b\u17a0\u17be\u1799\u17d6 %s \u17d4", + "A variation within the product has a SKU which is already in use : %s": "\u1794\u17c6\u179a\u17c2\u1794\u17c6\u179a\u17bd\u179b\u1793\u17c5\u1780\u17d2\u1793\u17bb\u1784\u1795\u179b\u17b7\u178f\u1795\u179b\u1798\u17b6\u1793 SKU \u178a\u17c2\u179b\u1780\u17c6\u1796\u17bb\u1784\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d6 %s", + "The variable product has been created.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u17a2\u1790\u17c1\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u17a1\u17be\u1784\u17d4", + "The provided barcode \"%s\" is already in use.": "\u179b\u17c1\u1781\u1780\u17bc\u178a\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d4", + "The provided SKU \"%s\" is already in use.": "SKU \"%s\" \u178a\u17c2\u179b\u1795\u17d2\u178f\u179b\u17cb\u17a2\u17c4\u1799\u1782\u17ba\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d4", + "The product has been saved.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "Unable to edit a product with an unknown type : %s": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1798\u17b6\u1793\u1794\u17d2\u179a\u1797\u17c1\u1791\u1798\u17b7\u1793\u179f\u17d2\u1782\u17b6\u179b\u17cb\u17d6 %s", + "A grouped product cannot be saved without any sub items.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1794\u17b6\u1793\u178a\u17b6\u1780\u17cb\u1787\u17b6\u1780\u17d2\u179a\u17bb\u1798\u1798\u17b7\u1793\u17a2\u17b6\u1785\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u178a\u17c4\u1799\u1782\u17d2\u1798\u17b6\u1793\u1792\u17b6\u178f\u17bb\u179a\u1784\u178e\u17b6\u1798\u17bd\u1799\u17a1\u17be\u1799\u17d4", + "A grouped product cannot contain grouped product.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u178a\u17b6\u1780\u17cb\u1787\u17b6\u1780\u17d2\u179a\u17bb\u1798\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1798\u17b6\u1793\u1795\u179b\u17b7\u178f\u1795\u179b\u1787\u17b6\u1780\u17d2\u179a\u17bb\u1798\u1791\u17c1\u17d4", + "The provided barcode is already in use.": "\u1794\u17b6\u1780\u17bc\u178a\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1782\u17ba\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d4", + "The provided SKU is already in use.": "SKU \u178a\u17c2\u179b\u1795\u17d2\u178f\u179b\u17cb\u17b2\u17d2\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d4", + "The product has been updated": "\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796", + "The requested sub item doesn\\'t exists.": "\u1792\u17b6\u178f\u17bb\u179a\u1784\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u1798\u17b7\u1793\u1798\u17b6\u1793\u1791\u17c1\u17d4", + "The subitem has been saved.": "\u1792\u17b6\u178f\u17bb\u179a\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "One of the provided product variation doesn\\'t include an identifier.": "\u1794\u17c6\u179a\u17c2\u1794\u17c6\u179a\u17bd\u179b\u1795\u179b\u17b7\u178f\u1795\u179b\u1798\u17bd\u1799\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1798\u17b7\u1793\u179a\u17bd\u1798\u1794\u1789\u17d2\u1785\u17bc\u179b\u17a7\u1794\u1780\u179a\u178e\u17cd\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e\u1791\u17c1\u17d4", + "The variable product has been updated.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u17a2\u1790\u17c1\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "The product\\'s unit quantity has been updated.": "\u1794\u179a\u17b7\u1798\u17b6\u178e\u17af\u1780\u178f\u17b6\u1793\u17c3\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "Unable to reset this variable product \"%s": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1780\u17c6\u178e\u178f\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u17a2\u1790\u17c1\u179a\u1793\u17c1\u17c7\u17a1\u17be\u1784\u179c\u17b7\u1789 \"%s", + "The product variations has been reset": "\u1780\u17b6\u179a\u1794\u17d2\u179a\u17c2\u1794\u17d2\u179a\u17bd\u179b\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u17a1\u17be\u1784\u179c\u17b7\u1789", + "The product has been reset.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u17a1\u17be\u1784\u179c\u17b7\u1789\u17d4", + "The product \"%s\" has been successfully deleted": "\u1795\u179b\u17b7\u178f\u1795\u179b \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799", + "Unable to find the requested variation using the provided ID.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1794\u17c6\u179a\u17c2\u1794\u17c6\u179a\u17bd\u179b\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4", + "The product stock has been updated.": "\u179f\u17d2\u178f\u17bb\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "The action is not an allowed operation.": "\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u1798\u17b7\u1793\u1798\u17c2\u1793\u1787\u17b6\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u1791\u17c1\u17d4", + "Adjusting grouped product inventory must result of a create, update, delete sale operation.": "\u1780\u17b6\u179a\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179f\u17b6\u179a\u1796\u17be\u1797\u17d0\u178e\u17d2\u178c\u1795\u179b\u17b7\u178f\u1795\u179b\u1787\u17b6\u1780\u17d2\u179a\u17bb\u1798\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1787\u17b6\u179b\u1791\u17d2\u1792\u1795\u179b\u1793\u17c3\u1780\u17b6\u179a\u1794\u1784\u17d2\u1780\u17be\u178f \u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796 \u179b\u17bb\u1794\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u179b\u1780\u17cb\u17d4", + "Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u178f\u200b\u1794\u17b6\u1793 \u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u200b\u1793\u17c1\u17c7\u200b\u1793\u17b9\u1784\u200b\u1792\u17d2\u179c\u17be\u200b\u17b1\u17d2\u1799\u200b\u179f\u17d2\u178f\u17bb\u1780\u200b\u17a2\u179c\u17b7\u1787\u17d2\u1787\u1798\u17b6\u1793 (%s)\u17d4 \u1794\u179a\u17b7\u1798\u17b6\u178e\u1785\u17b6\u179f\u17cb : (%s), \u1794\u179a\u17b7\u1798\u17b6\u178e : (%s) \u17d4", + "Unsupported stock action \"%s\"": "\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u179f\u17d2\u178f\u17bb\u1780\u178a\u17c2\u179b\u1798\u17b7\u1793\u1782\u17b6\u17c6\u1791\u17d2\u179a \"%s\"", + "The product quantity has been updated.": "\u1794\u179a\u17b7\u1798\u17b6\u178e\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "There is no variations to delete.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1794\u17c6\u179a\u17c2\u1794\u17c6\u179a\u17bd\u179b\u178a\u17be\u1798\u17d2\u1794\u17b8\u179b\u17bb\u1794\u1791\u17c1\u17d4", + "%s product(s) has been deleted.": "%s \u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "There is no products to delete.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u179b\u17bb\u1794\u1791\u17c1\u17d4", + "%s products(s) has been deleted.": "%s \u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "Unable to find the product, as the argument \"%s\" which value is \"%s": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u17a2\u17b6\u1782\u17bb\u1799\u1798\u17c9\u1784\u17cb \"%s\" \u178a\u17c2\u179b\u178f\u1798\u17d2\u179b\u17c3\u1782\u17ba \"%s", + "The product variation has been successfully created.": "\u1794\u17c6\u179a\u17c2\u1794\u17c6\u179a\u17bd\u179b\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The product variation has been updated.": "\u1780\u17b6\u179a\u1794\u17d2\u179a\u17c2\u1794\u17d2\u179a\u17bd\u179b\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "You cannot convert unit on a product having stock management disabled.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u17c6\u1794\u17d2\u179b\u17c2\u1784\u17af\u1780\u178f\u17b6\u1793\u17c5\u179b\u17be\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1794\u17b7\u1791\u1780\u17b6\u179a\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u179f\u17d2\u178f\u17bb\u1780\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "The source and the destination unit can\\'t be the same. What are you trying to do ?": "\u1794\u17d2\u179a\u1797\u1796 \u1793\u17b7\u1784\u17a2\u1784\u17d2\u1782\u1797\u17b6\u1796\u1782\u17c4\u179b\u178a\u17c5\u1798\u17b7\u1793\u17a2\u17b6\u1785\u178a\u17bc\u1785\u1782\u17d2\u1793\u17b6\u1791\u17c1\u17d4 \u178f\u17be\u17a2\u17d2\u1793\u1780\u1780\u17c6\u1796\u17bb\u1784\u1796\u17d2\u1799\u17b6\u1799\u17b6\u1798\u1792\u17d2\u179c\u17be\u17a2\u17d2\u179c\u17b8?", + "There is no source unit quantity having the name \"%s\" for the item %s": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1794\u179a\u17b7\u1798\u17b6\u178e\u17af\u1780\u178f\u17b6\u1794\u17d2\u179a\u1797\u1796\u178a\u17c2\u179b\u1798\u17b6\u1793\u1788\u17d2\u1798\u17c4\u17c7 \"%s\" \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1792\u17b6\u178f\u17bb %s \u1791\u17c1\u17d4", + "There is no destination unit quantity having the name %s for the item %s": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1794\u179a\u17b7\u1798\u17b6\u178e\u17af\u1780\u178f\u17b6\u1791\u17b7\u179f\u178a\u17c5\u178a\u17c2\u179b\u1798\u17b6\u1793\u1788\u17d2\u1798\u17c4\u17c7 %s \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1792\u17b6\u178f\u17bb %s \u1791\u17c1\u17d4", + "The source unit and the destination unit doens\\'t belong to the same unit group.": "\u17af\u1780\u178f\u17b6\u1794\u17d2\u179a\u1797\u1796 \u1793\u17b7\u1784\u17a2\u1784\u17d2\u1782\u1797\u17b6\u1796\u1782\u17c4\u179b\u178a\u17c5\u1798\u17b7\u1793\u1798\u17c2\u1793\u1787\u17b6\u1780\u1798\u17d2\u1798\u179f\u17b7\u1791\u17d2\u1792\u17b7\u179a\u1794\u179f\u17cb\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6\u178f\u17c2\u1798\u17bd\u1799\u1791\u17c1\u17d4", + "The group %s has no base unit defined": "\u1780\u17d2\u179a\u17bb\u1798 %s \u1798\u17b7\u1793\u200b\u1794\u17b6\u1793\u200b\u1780\u17c6\u178e\u178f\u17cb\u200b\u17af\u1780\u178f\u17b6\u200b\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u200b\u1791\u17c1\u17d4", + "The conversion of %s(%s) to %s(%s) was successful": "\u1780\u17b6\u179a\u1794\u17c6\u1794\u17d2\u179b\u17c2\u1784 %s(%s) \u1791\u17c5 %s(%s) \u1794\u17b6\u1793\u1787\u17c4\u1782\u1787\u17d0\u1799", + "The product has been deleted.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "The provider has been created.": "\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u17a1\u17be\u1784\u17d4", + "The provider has been updated.": "\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u17d4", + "Unable to find the provider using the specified id.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u179b\u17cb\u179f\u17c1\u179c\u17b6\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u17d4", + "The provider has been deleted.": "\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u179b\u17cb\u179f\u17c1\u179c\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "Unable to find the provider using the specified identifier.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u179b\u17cb\u179f\u17c1\u179c\u17b6\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u17a7\u1794\u1780\u179a\u178e\u17cd\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u17d4", + "The provider account has been updated.": "\u1782\u178e\u1793\u17b8\u17a2\u17d2\u1793\u1780\u1795\u17d2\u178f\u179b\u17cb\u179f\u17c1\u179c\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "An error occurred: %s.": "\u1780\u17c6\u17a0\u17bb\u179f\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u17d6 %s \u17d4", + "The procurement payment has been deducted.": "\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17b6\u178f\u17cb\u17d4", + "The dashboard report has been updated.": "\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u1795\u17d2\u1791\u17b6\u17c6\u1784\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u179f\u17d2\u178f\u17bb\u1780\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u1783\u17be\u1789\u1793\u17b6\u1796\u17c1\u179b\u1790\u17d2\u1798\u17b8\u17d7\u1793\u17c1\u17c7 \u1794\u17c9\u17bb\u1793\u17d2\u178f\u17c2 NexoPOS \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u1793\u17c1\u17c7\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u179c\u17b6\u1780\u17be\u178f\u17a1\u17be\u1784\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u179f\u17c1\u1785\u1780\u17d2\u178f\u17b8\u1799\u17c4\u1784\u1795\u17d2\u1791\u17b6\u17c6\u1784\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u1794\u17d2\u179a\u1785\u17b6\u17c6\u1790\u17d2\u1784\u17c3\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u17d4", + "Untracked Stock Operation": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u179f\u17d2\u178f\u17bb\u1780\u178a\u17c2\u179b\u1798\u17b7\u1793\u1794\u17b6\u1793\u178f\u17b6\u1798\u178a\u17b6\u1793", + "Unsupported action": "\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u178a\u17c2\u179b\u1798\u17b7\u1793\u1782\u17b6\u17c6\u1791\u17d2\u179a", + "The expense has been correctly saved.": "\u1780\u17b6\u179a\u1785\u17c6\u178e\u17b6\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1799\u17c9\u17b6\u1784\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Member Since": "\u179f\u1798\u17b6\u1787\u17b7\u1780\u1785\u17b6\u1794\u17cb\u178f\u17b6\u17c6\u1784\u1796\u17b8", + "Total Orders": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u179f\u179a\u17bb\u1794", + "Today\\'s Orders": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7", + "Total Sales": "\u1780\u17b6\u179a\u179b\u1780\u17cb\u179f\u179a\u17bb\u1794", + "Today\\'s Sales": "\u1780\u17b6\u179a\u179b\u1780\u17cb\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7", + "Total Refunds": "\u1780\u17b6\u179a\u1794\u1784\u17d2\u179c\u17b7\u179b\u179f\u1784\u179f\u179a\u17bb\u1794", + "Today\\'s Refunds": "\u1780\u17b6\u179a\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789\u1793\u17c5\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7", + "Total Customers": "\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u179f\u179a\u17bb\u1794", + "Today\\'s Customers": "\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7", + "The report has been computed successfully.": "\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u178e\u1793\u17b6\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The report will be generated. Try loading the report within few minutes.": "\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u17d4 \u179f\u17b6\u1780\u179b\u17d2\u1794\u1784\u1795\u17d2\u1791\u17bb\u1780\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u1780\u17d2\u1793\u17bb\u1784\u179a\u1799\u17c8\u1796\u17c1\u179b\u1796\u17b8\u179a\u1794\u17b8\u1793\u17b6\u1791\u17b8\u17d4", + "The table has been truncated.": "\u178f\u17b6\u179a\u17b6\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17b6\u178f\u17cb\u17d4", + "The database has been wiped out.": "\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u1785\u17c4\u179b\u17d4", + "No custom handler for the reset \"' . $mode . '\"": "\u1782\u17d2\u1798\u17b6\u1793\u17a7\u1794\u1780\u179a\u178e\u17cd\u178a\u17c4\u17c7\u179f\u17d2\u179a\u17b6\u1799\u1795\u17d2\u1791\u17b6\u179b\u17cb\u1781\u17d2\u179b\u17bd\u1793\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u17a1\u17be\u1784\u179c\u17b7\u1789 \"' . $mode . '\"", + "Untitled Settings Page": "\u1791\u17c6\u1796\u17d0\u179a\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1782\u17d2\u1798\u17b6\u1793\u1785\u17c6\u178e\u1784\u1787\u17be\u1784", + "No description provided for this settings page.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17b6\u179a\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1791\u17c6\u1796\u17d0\u179a\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1793\u17c1\u17c7\u1791\u17c1\u17d4", + "The form has been successfully saved.": "\u1791\u1798\u17d2\u179a\u1784\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Unable to reach the host": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1791\u17c5\u178a\u179b\u17cb\u1798\u17d2\u1785\u17b6\u179f\u17cb\u1795\u17d2\u1791\u17c7\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Unable to connect to the database using the credentials provided.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u178f\u1797\u17d2\u1787\u17b6\u1794\u17cb\u200b\u1791\u17c5\u200b\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u200b\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u200b\u178a\u17c4\u1799\u200b\u1794\u17d2\u179a\u17be\u200b\u179b\u17b7\u1781\u17b7\u178f\u200b\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u1795\u17d2\u178a\u179b\u17cb\u200b\u17b1\u17d2\u1799\u200b\u17d4", + "Unable to select the database.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Access denied for this user.": "\u1780\u17b6\u179a\u1785\u17bc\u179b\u1794\u17d2\u179a\u17be\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u178a\u17b7\u179f\u17c1\u1792\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1793\u17c1\u17c7\u17d4", + "Incorrect Authentication Plugin Provided.": "\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1787\u17c6\u1793\u17bd\u1799\u1780\u17b6\u179a\u1795\u17d2\u1791\u17c0\u1784\u1795\u17d2\u1791\u17b6\u178f\u17cb\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1787\u17bc\u1793\u17d4", + "The connexion with the database was successful": "\u1780\u17b6\u179a\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1787\u17b6\u1798\u17bd\u1799\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u1794\u17b6\u1793\u1787\u17c4\u1782\u1787\u17d0\u1799", + "NexoPOS has been successfully installed.": "NexoPOS \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17c6\u17a1\u17be\u1784\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Cash": "\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Bank Payment": "\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178f\u17b6\u1798\u1792\u1793\u17b6\u1782\u17b6\u179a", + "Customer Account": "\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Database connection was successful.": "\u1780\u17b6\u179a\u178f\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u1794\u17b6\u1793\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Unable to proceed. The parent tax doesn\\'t exists.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u1796\u1793\u17d2\u1792\u1798\u17c1\u1798\u17b7\u1793\u1798\u17b6\u1793\u1791\u17c1\u17d4", + "A simple tax must not be assigned to a parent tax with the type \"simple": "\u1796\u1793\u17d2\u1792\u179f\u17b6\u1798\u1789\u17d2\u1789\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1780\u17c6\u178e\u178f\u17cb\u1791\u17c5\u1796\u1793\u17d2\u1792\u1798\u17c1\u178a\u17c2\u179b\u1798\u17b6\u1793\u1794\u17d2\u179a\u1797\u17c1\u1791 \"\u179f\u17b6\u1798\u1789\u17d2\u1789\u1791\u17c1\u17d4", + "A tax cannot be his own parent.": "\u1796\u1793\u17d2\u1792\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1787\u17b6\u1798\u17c1\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".": "\u178b\u17b6\u1793\u17b6\u1793\u17bb\u1780\u17d2\u179a\u1798\u1796\u1793\u17d2\u1792\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u178f\u17d2\u179a\u17b9\u1798 1. \u1796\u1793\u17d2\u1792\u179a\u1784\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1798\u17b6\u1793\u1794\u17d2\u179a\u1797\u17c1\u1791\u1796\u1793\u17d2\u1792\u178a\u17c2\u179b\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1791\u17c5\u1787\u17b6 \"grouped\" \u1791\u17c1\u17d4", + "Unable to find the requested tax using the provided identifier.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u179a\u1780\u200b\u1783\u17be\u1789\u200b\u1796\u1793\u17d2\u1792\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u179f\u17d2\u1793\u17be\u200b\u178a\u17c4\u1799\u200b\u1794\u17d2\u179a\u17be\u200b\u1782\u17d2\u179a\u17bf\u1784\u200b\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u1795\u17d2\u178f\u179b\u17cb\u200b\u17b1\u17d2\u1799\u200b\u1791\u17c1\u17d4", + "The tax group has been correctly saved.": "\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1799\u17c9\u17b6\u1784\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "The tax has been correctly created.": "\u1796\u1793\u17d2\u1792\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u17a1\u17be\u1784\u1799\u17c9\u17b6\u1784\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "The tax has been successfully deleted.": "\u1796\u1793\u17d2\u1792\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Created via tests": "\u1794\u1784\u17d2\u1780\u17be\u178f\u178f\u17b6\u1798\u179a\u1799\u17c8\u1780\u17b6\u179a\u1792\u17d2\u179c\u17be\u178f\u17c1\u179f\u17d2\u178f", + "The transaction has been successfully saved.": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The transaction has been successfully updated.": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Unable to find the transaction using the provided identifier.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u17a7\u1794\u1780\u179a\u178e\u17cd\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4", + "Unable to find the requested transaction using the provided id.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4", + "The transction has been correctly deleted.": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u1799\u17c9\u17b6\u1784\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Unable to find the requested account type using the provided id.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1794\u17d2\u179a\u1797\u17c1\u1791\u1782\u178e\u1793\u17b8\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4", + "You cannot delete an account type that has transaction bound.": "\u17a2\u17d2\u1793\u1780\u200b\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u179b\u17bb\u1794\u200b\u1794\u17d2\u179a\u1797\u17c1\u1791\u200b\u1782\u178e\u1793\u17b8\u200b\u178a\u17c2\u179b\u200b\u1798\u17b6\u1793\u200b\u1780\u17b7\u1785\u17d2\u1785\u200b\u179f\u1793\u17d2\u1799\u17b6\u200b\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u200b\u1791\u17c1\u17d4", + "The account type has been deleted.": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1782\u178e\u1793\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "You cannot delete an account which has transactions bound.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17bb\u1794\u1782\u178e\u1793\u17b8\u178a\u17c2\u179b\u1798\u17b6\u1793\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1787\u17b6\u1794\u17cb\u1796\u17b6\u1780\u17cb\u1796\u17d0\u1793\u17d2\u1792\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "The transaction account has been deleted.": "\u1782\u178e\u1793\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u17d4", + "Unable to find the transaction account using the provided ID.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1782\u178e\u1793\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4", + "The account has been created.": "\u1782\u178e\u1793\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u17a1\u17be\u1784\u17d4", + "The transaction account has been updated.": "\u1782\u178e\u1793\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "This transaction type can\\'t be triggered.": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17c1\u17c7\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "The transaction has been successfully triggered.": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17a1\u17be\u1784\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The transaction \"%s\" has been processed on day \"%s\".": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1793\u17c5\u1790\u17d2\u1784\u17c3 \"%s\" \u17d4", + "The transaction \"%s\" has already been processed.": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d4", + "The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a \"%s\" \u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u179c\u17b6\u17a0\u17bd\u179f\u179f\u1798\u17d0\u1799\u17a0\u17be\u1799\u17d4", + "The process has been correctly executed and all transactions has been processed.": "\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1799\u17c9\u17b6\u1784\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c \u17a0\u17be\u1799\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u17d4", + "The process has been executed with some failures. %s\/%s process(es) has successed.": "\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u178a\u17c4\u1799\u1798\u17b6\u1793\u1780\u17b6\u179a\u1794\u179a\u17b6\u1787\u17d0\u1799\u1798\u17bd\u1799\u1785\u17c6\u1793\u17bd\u1793\u17d4 \u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a %s\/%s (es) \u1794\u17b6\u1793\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Procurement : %s": "\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b : %s", + "Procurement Liability : %s": "\u1791\u17c6\u1793\u17bd\u179b\u1781\u17bb\u179f\u178f\u17d2\u179a\u17bc\u179c\u179b\u17be\u179b\u1791\u17d2\u1792\u1780\u1798\u17d2\u1798 : %s", + "Refunding : %s": "\u1780\u17b6\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789 : %s", + "Spoiled Good : %s": "\u1795\u179b\u17b7\u178f\u1795\u179b\u1781\u17bc\u1785 : %s", + "Sale : %s": "\u179b\u1780\u17cb : %s", + "Customer Credit Account": "\u1782\u178e\u1793\u17b8\u17a5\u178e\u1791\u17b6\u1793\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Liabilities Account": "\u1782\u178e\u1793\u17b8\u1794\u17c6\u178e\u17bb\u179b", + "Customer Debit Account": "\u1782\u178e\u1793\u17b8\u17a5\u178e\u1796\u1793\u17d2\u1792\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Sales Refunds Account": "\u1782\u178e\u1793\u17b8\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1796\u17b8\u1780\u17b6\u179a\u179b\u1780\u17cb", + "Register Cash-In Account": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1782\u178e\u1793\u17b8\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Register Cash-Out Account": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1782\u178e\u1793\u17b8\u178a\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Not found account type: %s": "\u179a\u1780\u1798\u17b7\u1793\u1783\u17be\u1789\u1794\u17d2\u179a\u1797\u17c1\u1791\u1782\u178e\u1793\u17b8\u1791\u17c1: %s", + "Refund : %s": "\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb : %s", + "Customer Account Crediting : %s": "\u1780\u17b6\u179a\u1795\u17d2\u178f\u179b\u17cb\u17a5\u178e\u1791\u17b6\u1793\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793 : %s", + "Customer Account Purchase : %s": "\u1780\u17b6\u179a\u1791\u17b7\u1789\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793 : %s", + "Customer Account Deducting : %s": "\u1780\u17b6\u179a\u1780\u17b6\u178f\u17cb\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793 : %s", + "Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1798\u17bd\u1799\u1785\u17c6\u1793\u17bd\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791 \u178a\u17c4\u1799\u179f\u17b6\u179a NexoPOS \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1792\u17d2\u179c\u17be\u1794\u17b6\u1793 \u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u179f\u17c6\u178e\u17be\u17a2\u179f\u1798\u1780\u17b6\u179b<\/a>.", + "First Day Of Month": "\u1790\u17d2\u1784\u17c3\u178a\u17c6\u1794\u17bc\u1784\u1793\u17c3\u1781\u17c2", + "Last Day Of Month": "\u1790\u17d2\u1784\u17c3\u1785\u17bb\u1784\u1780\u17d2\u179a\u17c4\u1799\u1793\u17c3\u1781\u17c2", + "Month middle Of Month": "\u1781\u17c2\u1796\u17b6\u1780\u17cb\u1780\u178e\u17d2\u178f\u17b6\u179b\u1781\u17c2", + "{day} after month starts": "{day} \u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb\u1796\u17b8\u1781\u17c2\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798", + "{day} before month ends": "{day} \u1798\u17bb\u1793\u1781\u17c2\u1794\u1789\u17d2\u1785\u1794\u17cb", + "Every {day} of the month": "\u179a\u17c0\u1784\u179a\u17b6\u179b\u17cb {day} \u1793\u17c3\u1781\u17c2", + "Days": "\u1790\u17d2\u1784\u17c3", + "Make sure set a day that is likely to be executed": "\u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u17b6\u1780\u178a\u1790\u17b6\u1780\u17c6\u178e\u178f\u17cb\u1790\u17d2\u1784\u17c3\u178a\u17c2\u179b\u1791\u17c6\u1793\u1784\u1787\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7", + "The Unit Group has been created.": "\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u17a1\u17be\u1784\u17d4", + "The unit group %s has been updated.": "\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6 %s \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "Unable to find the unit group to which this unit is attached.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u179f\u17d2\u179c\u17c2\u1784\u200b\u179a\u1780\u200b\u1780\u17d2\u179a\u17bb\u1798\u200b\u17af\u1780\u178f\u17b6\u200b\u178a\u17c2\u179b\u200b\u17af\u1780\u178f\u17b6\u200b\u1793\u17c1\u17c7\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17d4", + "The unit has been saved.": "\u17af\u1780\u178f\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4", + "Unable to find the Unit using the provided id.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17af\u1780\u178f\u17b6\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17d4", + "The unit has been updated.": "\u17af\u1780\u178f\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "The unit group %s has more than one base unit": "\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6 %s \u1798\u17b6\u1793\u17af\u1780\u178f\u17b6\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1785\u17d2\u179a\u17be\u1793\u1787\u17b6\u1784\u1798\u17bd\u1799\u17d4", + "The unit group %s doesn\\'t have a base unit": "\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6 %s \u1798\u17b7\u1793\u1798\u17b6\u1793\u17af\u1780\u178f\u17b6\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17c1\u17d4", + "The unit has been deleted.": "\u17af\u1780\u178f\u17b6\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u179b\u17bb\u1794\u17d4", + "The system role \"Users\" can be retrieved.": "\u178f\u17bd\u1793\u17b6\u1791\u17b8\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792 \"\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\" \u17a2\u17b6\u1785\u1791\u17b6\u1789\u1799\u1780\u1798\u1780\u179c\u17b7\u1789\u1794\u17b6\u1793\u17d4", + "The default role that must be assigned to new users cannot be retrieved.": "\u178f\u17bd\u1793\u17b6\u1791\u17b8\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1795\u17d2\u178f\u179b\u17cb\u1791\u17c5\u17b1\u17d2\u1799\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1790\u17d2\u1798\u17b8 \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1791\u17b6\u1789\u1799\u1780\u1798\u1780\u179c\u17b7\u1789\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "The %s is already taken.": "%s \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1799\u1780\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d4", + "Your Account has been successfully created.": "\u1782\u178e\u1793\u17b8\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "Your Account has been created but requires email validation.": "\u1782\u178e\u1793\u17b8\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f \u1794\u17c9\u17bb\u1793\u17d2\u178f\u17c2\u1791\u17b6\u1798\u1791\u17b6\u179a\u17b1\u17d2\u1799\u1798\u17b6\u1793\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u17d4", + "Clone of \"%s\"": "\u1785\u1798\u17d2\u179b\u1784\u1796\u17b8 \"%s\"", + "The role has been cloned.": "\u178f\u17bd\u1793\u17b6\u1791\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u1798\u17d2\u179b\u1784\u17d4", + "The widgets was successfully updated.": "\u1795\u17d2\u1791\u17b6\u17c6\u1784\u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "The token was successfully created": "\u179f\u1789\u17d2\u1789\u17b6\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799", + "The token has been successfully deleted.": "\u179f\u1789\u17d2\u1789\u17b6\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4", + "unable to find this validation class %s.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u179a\u1780\u200b\u1783\u17be\u1789\u200b\u1790\u17d2\u1793\u17b6\u1780\u17cb\u200b\u1795\u17d2\u1791\u17c0\u1784\u1795\u17d2\u1791\u17b6\u178f\u17cb\u200b\u1793\u17c1\u17c7 %s \u17d4", + "Details about the environment.": "\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u179b\u1798\u17d2\u17a2\u17b7\u178f\u17a2\u17c6\u1796\u17b8\u1794\u179a\u17b7\u179f\u17d2\u1790\u17b6\u1793\u17d4", + "Core Version": "\u1780\u17c6\u178e\u17c2\u179f\u17d2\u1793\u17bc\u179b", + "Laravel Version": "\u1787\u17c6\u1793\u17b6\u1793\u17cb Laravel", + "PHP Version": "\u1787\u17c6\u1793\u17b6\u1793\u17cb PHP", + "Mb String Enabled": "\u1794\u17be\u1780 Mb String", + "Zip Enabled": "\u1794\u17be\u1780 Zip", + "Curl Enabled": "\u1794\u17be\u1780 Curl", + "Math Enabled": "\u1794\u17be\u1780 Math", + "XML Enabled": "\u1794\u17be\u1780 XML", + "XDebug Enabled": "\u1794\u17be\u1780 XDebug", + "File Upload Enabled": "\u1794\u17b6\u1793\u1794\u17be\u1780\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1795\u17d2\u1791\u17bb\u1780\u17af\u1780\u179f\u17b6\u179a", + "File Upload Size": "\u1791\u17c6\u17a0\u17c6\u1795\u17d2\u1791\u17bb\u1780\u17af\u1780\u179f\u17b6\u179a", + "Post Max Size": "\u1791\u17c6\u17a0\u17c6\u1794\u17d2\u179a\u1780\u17b6\u179f\u17a2\u178f\u17b7\u1794\u179a\u1798\u17b6", + "Max Execution Time": "\u1796\u17c1\u179b\u179c\u17c1\u179b\u17b6\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u17a2\u178f\u17b7\u1794\u179a\u1798\u17b6", + "%s Second(s)": "%s \u179c\u17b7\u1793\u17b6\u1791\u17b8", + "Memory Limit": "\u178a\u17c2\u1793\u1780\u17c6\u178e\u178f\u17cb\u1793\u17c3\u1780\u17b6\u179a\u1785\u1784\u1785\u17b6\u17c6", + "Configure the accounting feature": "\u1780\u17c6\u178e\u178f\u17cb\u179a\u1785\u1793\u17b6\u179f\u1798\u17d2\u1796\u17d0\u1793\u17d2\u1792\u1798\u17bb\u1781\u1784\u17b6\u179a\u1782\u178e\u1793\u17c1\u1799\u17d2\u1799", + "Customers Settings": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Configure the customers settings of the application.": "\u1780\u17c6\u178e\u178f\u17cb\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1793\u17c3\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u17d4", + "General Settings": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u200b\u1791\u17bc\u1791\u17c5", + "Configure the general settings of the application.": "\u1780\u17c6\u178e\u178f\u17cb\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1791\u17bc\u1791\u17c5\u1793\u17c3\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u17d4", + "Store Name": "\u1788\u17d2\u1798\u17c4\u17c7\u17a0\u17b6\u1784", + "This is the store name.": "\u1793\u17c1\u17c7\u1782\u17ba\u1787\u17b6\u1788\u17d2\u1798\u17c4\u17c7\u17a0\u17b6\u1784\u17d4", + "Store Address": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u17a0\u17b6\u1784", + "The actual store address.": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u17a0\u17b6\u1784\u1796\u17b7\u178f\u1794\u17d2\u179a\u17b6\u1780\u178a\u17d4", + "Store City": "\u1791\u17b8\u1780\u17d2\u179a\u17bb\u1784\u179a\u1794\u179f\u17cb\u179f\u17d2\u178f\u17bb\u1780", + "The actual store city.": "\u1791\u17b8\u1780\u17d2\u179a\u17bb\u1784\u17a0\u17b6\u1784\u1787\u17b6\u1780\u17cb\u179f\u17d2\u178f\u17c2\u1784\u17d4", + "Store Phone": "\u179b\u17c1\u1781\u1791\u17bc\u179a\u179f\u17d0\u1796\u17d2\u1791\u179a\u1794\u179f\u17cb\u179f\u17d2\u178f\u17bb\u1780", + "The phone number to reach the store.": "\u179b\u17c1\u1781\u1791\u17bc\u179a\u179f\u17d0\u1796\u17d2\u1791\u178a\u17be\u1798\u17d2\u1794\u17b8\u1791\u17c5\u178a\u179b\u17cb\u17a0\u17b6\u1784\u17d4", + "Store Email": "\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u179a\u1794\u179f\u17cb\u179f\u17d2\u178f\u17bb\u1780", + "The actual store email. Might be used on invoice or for reports.": "\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u17a0\u17b6\u1784\u1796\u17b7\u178f\u1794\u17d2\u179a\u17b6\u1780\u178a\u17d4 \u17a2\u17b6\u1785\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1793\u17c5\u179b\u17be\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a \u17ac\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u17d4", + "Store PO.Box": "\u1794\u17d2\u179a\u17a2\u1794\u17cb\u1794\u17d2\u179a\u17c3\u179f\u178e\u17b8\u1799\u17cd\u17a0\u17b6\u1784", + "The store mail box number.": "\u179b\u17c1\u1781\u1794\u17d2\u179a\u17a2\u1794\u17cb\u179f\u17c6\u1794\u17bb\u178f\u17d2\u179a\u179a\u1794\u179f\u17cb\u17a0\u17b6\u1784\u17d4", + "Store Fax": "\u1791\u17bc\u179a\u179f\u17b6\u179a\u17a0\u17b6\u1784 ", + "The store fax number.": "\u179b\u17c1\u1781\u1791\u17bc\u179a\u179f\u17b6\u179a\u179a\u1794\u179f\u17cb\u17a0\u17b6\u1784\u17d4", + "Store Additional Information": "\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u1794\u1793\u17d2\u1790\u17c2\u1798", + "Store additional information.": "\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u1794\u1793\u17d2\u1790\u17c2\u1798\u17d4", + "Store Square Logo": "\u179f\u17d2\u179b\u17b6\u1780\u179f\u1789\u17d2\u1789\u17b6\u17a0\u17b6\u1784\u179a\u17b6\u1784\u1780\u17b6\u179a\u17c9\u17c1", + "Choose what is the square logo of the store.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u1787\u17b6\u17a1\u17bc\u17a0\u17d2\u1782\u17c4\u1780\u17b6\u179a\u17c9\u17c1\u179a\u1794\u179f\u17cb\u17a0\u17b6\u1784\u17d4", + "Store Rectangle Logo": "\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179f\u17d2\u179b\u17b6\u1780\u179f\u1789\u17d2\u1789\u17b6\u1785\u178f\u17bb\u1780\u17c4\u178e", + "Choose what is the rectangle logo of the store.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u1787\u17b6\u17a1\u17bc\u17a0\u17d2\u1782\u17c4\u1785\u178f\u17bb\u1780\u17c4\u178e\u179a\u1794\u179f\u17cb\u17a0\u17b6\u1784\u17d4", + "Define the default fallback language.": "\u1780\u17c6\u178e\u178f\u17cb\u1797\u17b6\u179f\u17b6\u1787\u17c6\u1793\u17bd\u179f\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\u17d4", + "Define the default theme.": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u17d2\u179a\u1792\u17b6\u1793\u1794\u1791\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\u17d4", + "Currency": "\u179a\u17bc\u1794\u17b7\u1799\u1794\u17d0\u178e\u17d2\u178e", + "Currency Symbol": "\u1793\u17b7\u1798\u17b7\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u179a\u17bc\u1794\u17b7\u1799\u1794\u17d0\u178e\u17d2\u178e", + "This is the currency symbol.": "\u1793\u17c1\u17c7\u1782\u17ba\u1787\u17b6\u1793\u17b7\u1798\u17b7\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u179a\u17bc\u1794\u17b7\u1799\u1794\u17d0\u178e\u17d2\u178e\u17d4", + "Currency ISO": "\u179a\u17bc\u1794\u17b7\u1799\u1794\u17d0\u178e\u17d2\u178e ISO", + "The international currency ISO format.": "\u1791\u1798\u17d2\u179a\u1784\u17cb ISO \u179a\u17bc\u1794\u17b7\u1799\u1794\u17d0\u178e\u17d2\u178e\u17a2\u1793\u17d2\u178f\u179a\u1787\u17b6\u178f\u17b7\u17d4", + "Currency Position": "\u1791\u17b8\u178f\u17b6\u17c6\u1784\u179a\u17bc\u1794\u17b7\u1799\u1794\u17d0\u178e\u17d2\u178e", + "Before the amount": "\u1798\u17bb\u1793\u1794\u179a\u17b7\u1798\u17b6\u178e", + "After the amount": "\u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb\u1796\u17b8\u1794\u179a\u17b7\u1798\u17b6\u178e", + "Define where the currency should be located.": "\u1780\u17c6\u178e\u178f\u17cb\u1780\u1793\u17d2\u179b\u17c2\u1784\u178a\u17c2\u179b\u179a\u17bc\u1794\u17b7\u1799\u1794\u17d0\u178e\u17d2\u178e\u1782\u17bd\u179a\u179f\u17d2\u1790\u17b7\u178f\u1793\u17c5\u17d4", + "Preferred Currency": "\u179a\u17bc\u1794\u17b7\u1799\u1794\u17d0\u178e\u17d2\u178e\u178a\u17c2\u179b\u1796\u17c1\u1789\u1785\u17b7\u178f\u17d2\u178f", + "ISO Currency": "\u179a\u17bc\u1794\u17b7\u1799\u1794\u17d0\u178e\u17d2\u178e ISO", + "Symbol": "\u1793\u17b7\u1798\u17b7\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6", + "Determine what is the currency indicator that should be used.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u17a2\u17d2\u179c\u17b8\u1787\u17b6\u179f\u17bc\u1785\u1793\u17b6\u1780\u179a\u179a\u17bc\u1794\u17b7\u1799\u1794\u17d0\u178e\u17d2\u178e\u178a\u17c2\u179b\u1782\u17bd\u179a\u1794\u17d2\u179a\u17be\u17d4", + "Currency Thousand Separator": "\u200b\u1794\u17c6\u1794\u17c2\u1780\u179a\u17bc\u1794\u17b7\u1799\u1794\u17d0\u178e\u17d2\u178e\u1781\u17d2\u1793\u17b6\u178f\u200b\u1798\u17bd\u1799\u200b\u1796\u17b6\u1793\u17cb", + "Define the symbol that indicate thousand. By default ": "\u1780\u17c6\u178e\u178f\u17cb\u1793\u17b7\u1798\u17b7\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178a\u17c2\u179b\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1796\u17b8\u1796\u17b6\u1793\u17cb\u17d4 \u178f\u17b6\u1798\u200b\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798 ", + "Currency Decimal Separator": "\u179f\u1789\u17d2\u1789\u17b6\u1794\u17c6\u1794\u17c2\u1780\u179a\u17bc\u1794\u17b7\u1799\u1794\u17d0\u178e\u17d2\u178e", + "Define the symbol that indicate decimal number. By default \".\" is used.": "\u1780\u17c6\u178e\u178f\u17cb\u1793\u17b7\u1798\u17b7\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178a\u17c2\u179b\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1796\u17b8\u179b\u17c1\u1781\u1791\u179f\u1797\u17b6\u1782\u17d4 \u178f\u17b6\u1798\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798 \"\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u17d4", + "Currency Precision": "\u1797\u17b6\u1796\u1787\u17b6\u1780\u17cb\u179b\u17b6\u1780\u17cb\u1793\u17c3\u179a\u17bc\u1794\u17b7\u1799\u1794\u17d0\u178e\u17d2\u178e", + "%s numbers after the decimal": "%s \u179b\u17c1\u1781\u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb\u1796\u17b8\u1791\u179f\u1797\u17b6\u1782", + "Date Format": "\u1791\u1798\u17d2\u179a\u1784\u17cb\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791", + "This define how the date should be defined. The default format is \"Y-m-d\".": "\u179c\u17b6\u1780\u17c6\u178e\u178f\u17cb\u1796\u17b8\u179a\u1794\u17c0\u1794\u178a\u17c2\u179b\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1782\u17bd\u179a\u178f\u17c2\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u17d4 \u1791\u1798\u17d2\u179a\u1784\u17cb\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\u1782\u17ba \"Y-m-d\" \u17d4", + "Date Time Format": "\u1791\u1798\u17d2\u179a\u1784\u17cb\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791", + "This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".": "\u179c\u17b6\u1780\u17c6\u178e\u178f\u17cb\u1796\u17b8\u179a\u1794\u17c0\u1794\u178a\u17c2\u179b\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791 \u1793\u17b7\u1784\u1796\u17c1\u179b\u179c\u17c1\u179b\u17b6\u1782\u17bd\u179a\u178f\u17c2\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1791\u17d2\u179a\u1784\u17cb\u1791\u17d2\u179a\u17b6\u1799\u17d4 \u1791\u1798\u17d2\u179a\u1784\u17cb\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\u1782\u17ba \"Y-m-d H:i\" \u17d4", + "Date TimeZone": "\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791 TimeZone", + "Determine the default timezone of the store. Current Time: %s": "\u1780\u17c6\u178e\u178f\u17cb\u178f\u17c6\u1794\u1793\u17cb\u1796\u17c1\u179b\u179c\u17c1\u179b\u17b6\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\u179a\u1794\u179f\u17cb\u17a0\u17b6\u1784\u17d4 \u1796\u17c1\u179b\u179c\u17c1\u179b\u17b6\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u17d6 %s", + "Registration": "\u1780\u17b6\u179a\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Registration Open": "\u1794\u17be\u1780\u1780\u17b6\u179a\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Determine if everyone can register.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u17a2\u17d2\u1793\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u1793\u17b6\u17a2\u17b6\u1785\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1794\u17b6\u1793\u17d4", + "Registration Role": "\u178f\u17bd\u1793\u17b6\u1791\u17b8\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7", + "Select what is the registration role.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u1787\u17b6\u178f\u17bd\u1793\u17b6\u1791\u17b8\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u17d4", + "Requires Validation": "\u1791\u17b6\u1798\u1791\u17b6\u179a\u1780\u17b6\u179a\u178f\u17d2\u179a\u17bd\u178f\u1796\u17b7\u1793\u17b7\u178f\u17d2\u1799", + "Force account validation after the registration.": "\u1794\u1784\u17d2\u1781\u17c6\u17b1\u17d2\u1799\u1798\u17b6\u1793\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796\u1782\u178e\u1793\u17b8\u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb\u1796\u17b8\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u17d4", + "Allow Recovery": "\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u1780\u17b6\u179a\u179f\u17d2\u178f\u17b6\u179a\u17a1\u17be\u1784\u179c\u17b7\u1789", + "Allow any user to recover his account.": "\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u200b\u17b1\u17d2\u1799\u200b\u17a2\u17d2\u1793\u1780\u200b\u1794\u17d2\u179a\u17be\u200b\u178e\u17b6\u200b\u1798\u17d2\u1793\u17b6\u1780\u17cb\u200b\u1799\u1780\u200b\u1782\u178e\u1793\u17b8\u200b\u179a\u1794\u179f\u17cb\u200b\u1782\u17b6\u178f\u17cb\u200b\u1798\u1780\u200b\u179c\u17b7\u1789\u17d4", + "Invoice Settings": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a", + "Configure how invoice and receipts are used.": "\u1780\u17c6\u178e\u178f\u17cb\u179a\u1785\u1793\u17b6\u179f\u1798\u17d2\u1796\u17d0\u1793\u17d2\u1792\u179a\u1794\u17c0\u1794\u1794\u17d2\u179a\u17be\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a \u1793\u17b7\u1784\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3\u17d4", + "Orders Settings": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "configure settings that applies to orders.": "\u1780\u17c6\u178e\u178f\u17cb\u179a\u1785\u1793\u17b6\u179f\u1798\u17d2\u1796\u17d0\u1793\u17d2\u1792\u178a\u17c2\u179b\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1785\u17c6\u1796\u17c4\u17c7\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u17d4", + "POS Settings": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u1780\u17b6\u179a\u179b\u1780\u17cb", + "Configure the pos settings.": "\u1780\u17c6\u178e\u178f\u17cb\u179a\u1785\u1793\u17b6\u179f\u1798\u17d2\u1796\u17d0\u1793\u17d2\u1792\u1780\u17b6\u179a\u179b\u1780\u17cb\u17d4", + "Report Settings": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1793\u17c3\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd", + "Configure the settings": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u179a\u1785\u1793\u17b6\u179f\u1798\u17d2\u1796\u17d0\u1793\u17d2\u1792", + "Wipes and Reset the database.": "\u179b\u17bb\u1794 \u1793\u17b7\u1784\u1780\u17c6\u178e\u178f\u17cb\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u17a1\u17be\u1784\u179c\u17b7\u1789\u17d4", + "Supply Delivery": "\u1780\u17b6\u179a\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb", + "Configure the delivery feature.": "\u1780\u17c6\u178e\u178f\u17cb\u1798\u17bb\u1781\u1784\u17b6\u179a\u1785\u17c2\u1780\u1785\u17b6\u1799\u17d4", + "Workers Settings": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb Workers", + "Configure how background operations works.": "\u1780\u17c6\u178e\u178f\u17cb\u179a\u1785\u1793\u17b6\u179f\u1798\u17d2\u1796\u17d0\u1793\u17d2\u1792\u179a\u1794\u17c0\u1794\u178a\u17c2\u179b\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u17d4", + "Procurement Cash Flow Account": "\u1782\u178e\u1793\u17b8\u179b\u17c6\u17a0\u17bc\u179a\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1793\u17c3\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Every procurement will be added to the selected transaction account": "\u179a\u17b6\u179b\u17cb\u1780\u17b6\u179a\u1791\u17b7\u1789\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c5\u1780\u17d2\u1793\u17bb\u1784\u1782\u178e\u1793\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f", + "Sale Cash Flow Account": "\u1782\u178e\u1793\u17b8\u179b\u17c6\u17a0\u17bc\u179a\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1793\u17c3\u1780\u17b6\u179a\u179b\u1780\u17cb", + "Every sales will be added to the selected transaction account": "\u179a\u17b6\u179b\u17cb\u1780\u17b6\u179a\u179b\u1780\u17cb\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c5\u1780\u17d2\u1793\u17bb\u1784\u1782\u178e\u1793\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f", + "Customer Credit Account (crediting)": "\u1782\u178e\u1793\u17b8\u17a5\u178e\u1791\u17b6\u1793\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793 (\u1780\u17b6\u179a\u1795\u17d2\u178f\u179b\u17cb\u17a5\u178e\u1791\u17b6\u1793)", + "Every customer credit will be added to the selected transaction account": "\u179a\u17b6\u179b\u17cb\u17a5\u178e\u1791\u17b6\u1793\u179a\u1794\u179f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c5\u1780\u17d2\u1793\u17bb\u1784\u1782\u178e\u1793\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f", + "Customer Credit Account (debitting)": "\u1782\u178e\u1793\u17b8\u17a5\u178e\u1791\u17b6\u1793\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793 (\u1794\u17c6\u178e\u17bb\u179b)", + "Every customer credit removed will be added to the selected transaction account": "\u179a\u17b6\u179b\u17cb\u17a5\u178e\u1791\u17b6\u1793\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u1780\u1785\u17c1\u1789\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c5\u1780\u17d2\u1793\u17bb\u1784\u1782\u178e\u1793\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f", + "Sales refunds will be attached to this transaction account": "\u1780\u17b6\u179a\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789\u1796\u17b8\u1780\u17b6\u179a\u179b\u1780\u17cb\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1791\u17c5\u1782\u178e\u1793\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17c1\u17c7\u17d4", + "Stock Return Account (Spoiled Items)": "\u1782\u178e\u1793\u17b8\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1798\u1780\u179f\u17d2\u178f\u17bb\u1780 (\u1798\u17b7\u1793\u1781\u17bc\u1785\u1781\u17b6\u178f)", + "Stock return for spoiled items will be attached to this account": "\u1780\u17b6\u179a\u1794\u17d2\u179a\u1782\u179b\u17cb\u179f\u17d2\u178f\u17bb\u1780\u1798\u1780\u179c\u17b7\u1789\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u179c\u178f\u17d2\u1790\u17bb\u178a\u17c2\u179b\u1781\u17bc\u1785\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1787\u17b6\u1798\u17bd\u1799\u1782\u178e\u1793\u17b8\u1793\u17c1\u17c7\u17d4", + "Disbursement (cash register)": "\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb (\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb)", + "Transaction account for all cash disbursement.": "\u1782\u178e\u1793\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "Liabilities": "\u1794\u17c6\u178e\u17bb\u179b", + "Transaction account for all liabilities.": "\u1782\u178e\u1793\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1794\u17c6\u178e\u17bb\u179b\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "Enable Reward": "\u1794\u17be\u1780\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb", + "Will activate the reward system for the customers.": "\u1793\u17b9\u1784\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1784\u17d2\u179c\u17b6\u1793\u17cb\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u17d4", + "Require Valid Email": "\u1791\u17b6\u1798\u1791\u17b6\u179a\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u178a\u17c2\u179b\u1798\u17b6\u1793\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796", + "Will for valid unique email for every customer.": "\u1793\u17b9\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u178f\u17c2\u1798\u17bd\u1799\u1782\u178f\u17cb\u178a\u17c2\u179b\u1798\u17b6\u1793\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1782\u17d2\u179a\u1794\u17cb\u179a\u17bc\u1794\u17d4", + "Require Unique Phone": "\u1791\u17b6\u1798\u1791\u17b6\u179a\u1791\u17bc\u179a\u179f\u17d0\u1796\u17d2\u1791\u1798\u17b7\u1793\u1787\u17b6\u1793\u17cb\u1782\u17d2\u1793\u17b6", + "Every customer should have a unique phone number.": "\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1782\u17d2\u179a\u1794\u17cb\u179a\u17bc\u1794\u1782\u17bd\u179a\u178f\u17c2\u1798\u17b6\u1793\u179b\u17c1\u1781\u1791\u17bc\u179a\u179f\u17d0\u1796\u17d2\u1791\u1798\u17b7\u1793\u1787\u17b6\u1793\u17cb\u1782\u17d2\u1793\u17b6\u17d4", + "Default Customer Account": "\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798", + "You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.": "\u17a2\u17d2\u1793\u1780\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1794\u1784\u17d2\u1780\u17be\u178f\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c2\u179b\u1780\u17b6\u179a\u179b\u1780\u17cb\u1793\u17b8\u1798\u17bd\u1799\u17d7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1782\u17bb\u178e\u179b\u1780\u17d2\u1781\u178e\u17c8\u1793\u17c5\u1796\u17c1\u179b\u178a\u17c2\u179b\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17be\u179a\u1798\u17b7\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u17d4", + "Default Customer Group": "\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798", + "Select to which group each new created customers are assigned to.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1780\u17d2\u179a\u17bb\u1798\u178e\u17b6\u178a\u17c2\u179b\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u1790\u17d2\u1798\u17b8\u1793\u17b8\u1798\u17bd\u1799\u17d7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17b6\u178f\u17cb\u178f\u17b6\u17c6\u1784\u1791\u17c5\u17d4", + "Enable Credit & Account": "\u1794\u17be\u1780\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u17a5\u178e\u1791\u17b6\u1793 \u1793\u17b7\u1784\u1782\u178e\u1793\u17b8", + "The customers will be able to make deposit or obtain credit.": "\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1793\u17b9\u1784\u17a2\u17b6\u1785\u178a\u17b6\u1780\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb \u17ac\u1791\u1791\u17bd\u179b\u1794\u17b6\u1793\u17a5\u178e\u1791\u17b6\u1793\u17d4", + "Receipts": "\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3", + "Receipt Template": "\u1782\u1798\u17d2\u179a\u17bc\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3", + "Default": "\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798", + "Choose the template that applies to receipts": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1782\u17c6\u179a\u17bc\u178a\u17c2\u179b\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1785\u17c6\u1796\u17c4\u17c7\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3", + "Receipt Logo": "\u17a1\u17bc\u17a0\u17d2\u1782\u17c4\u179b\u179b\u17be\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3", + "Provide a URL to the logo.": "\u1795\u17d2\u178f\u179b\u17cb URL \u179a\u1794\u179f\u17cb\u17a1\u17bc\u17a0\u17d2\u1782\u17c4\u179b", + "Merge Products On Receipt\/Invoice": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u1795\u179b\u17b7\u178f\u1795\u179b\u1793\u17c5\u179b\u17be\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3\/\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a", + "All similar products will be merged to avoid a paper waste for the receipt\/invoice.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u179f\u17d2\u179a\u178a\u17c0\u1784\u1782\u17d2\u1793\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1782\u17d2\u1793\u17b6 \u178a\u17be\u1798\u17d2\u1794\u17b8\u1787\u17c0\u179f\u179c\u17b6\u1784\u1780\u17b6\u1780\u179f\u17c6\u178e\u179b\u17cb\u1780\u17d2\u179a\u178a\u17b6\u179f\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3\/\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u17d4", + "Show Tax Breakdown": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17b6\u179a\u179c\u17b7\u1797\u17b6\u1782\u1796\u1793\u17d2\u1792", + "Will display the tax breakdown on the receipt\/invoice.": "\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17b6\u179a\u179c\u17b7\u1797\u17b6\u1782\u1796\u1793\u17d2\u1792\u179b\u17be\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3\/\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u17d4", + "Receipt Footer": "\u1795\u17d2\u1793\u17c2\u1780\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1798\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3", + "If you would like to add some disclosure at the bottom of the receipt.": "\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1793\u17d2\u1790\u17c2\u1798\u1780\u17b6\u179a\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1798\u17bd\u1799\u1785\u17c6\u1793\u17bd\u1793\u1793\u17c5\u1795\u17d2\u1793\u17c2\u1780\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1798\u1793\u17c3\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3\u17d4", + "Column A": "\u1787\u17bd\u179a\u1788\u179a A", + "Available tags : ": "\u179f\u17d2\u179b\u17b6\u1780\u178a\u17c2\u179b\u1798\u17b6\u1793 : ", + "{store_name}: displays the store name.": "{store_name}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1788\u17d2\u1798\u17c4\u17c7\u17a0\u17b6\u1784\u17d4", + "{store_email}: displays the store email.": "{store_email}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u17a0\u17b6\u1784\u17d4", + "{store_phone}: displays the store phone number.": "{store_phone}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u179b\u17c1\u1781\u1791\u17bc\u179a\u179f\u17d0\u1796\u17d2\u1791\u17a0\u17b6\u1784\u17d4", + "{cashier_name}: displays the cashier name.": "{cashier_name}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1788\u17d2\u1798\u17c4\u17c7\u17a2\u17d2\u1793\u1780\u1782\u17b7\u178f\u179b\u17bb\u1799\u17d4", + "{cashier_id}: displays the cashier id.": "{cashier_id}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u179b\u17c1\u1781\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u17a2\u17d2\u1793\u1780\u1782\u17b7\u178f\u179b\u17bb\u1799\u17d4", + "{order_code}: displays the order code.": "{order_code}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u179b\u17c1\u1781\u1780\u17bc\u178a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u17d4", + "{order_date}: displays the order date.": "{order_date}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u17d4", + "{order_type}: displays the order type.": "{order_type}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u17d4", + "{customer_email}: displays the customer email.": "{customer_email}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u17d4", + "{shipping_first_name}: displays the shipping first name.": "{shipping_first_name}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1788\u17d2\u1798\u17c4\u17c7\u178a\u17c6\u1794\u17bc\u1784\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u17d4", + "{shipping_last_name}: displays the shipping last name.": "{shipping_last_name}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1793\u17b6\u1798\u178f\u17d2\u179a\u1780\u17bc\u179b\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u17d4", + "{shipping_phone}: displays the shipping phone.": "{shipping_phone}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1791\u17bc\u179a\u179f\u17d0\u1796\u17d2\u1791\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u17d4", + "{shipping_address_1}: displays the shipping address_1.": "{shipping_address_1}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17b6\u179a\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793 address_1.", + "{shipping_address_2}: displays the shipping address_2.": "{shipping_address_2}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17b6\u179a\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793 address_2.", + "{shipping_country}: displays the shipping country.": "{shipping_country}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u1791\u17c1\u179f\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u17d4", + "{shipping_city}: displays the shipping city.": "{shipping_city}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1791\u17b8\u1780\u17d2\u179a\u17bb\u1784\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u17d4", + "{shipping_pobox}: displays the shipping pobox.": "{shipping_pobox}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u17a2\u1794\u17cb PO \u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u17d4", + "{shipping_company}: displays the shipping company.": "{shipping_company}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17d2\u179a\u17bb\u1798\u17a0\u17ca\u17bb\u1793\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u17d4", + "{shipping_email}: displays the shipping email.": "{shipping_email}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u17d4", + "{billing_first_name}: displays the billing first name.": "{billing_first_name}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1788\u17d2\u1798\u17c4\u17c7\u178a\u17c6\u1794\u17bc\u1784\u1793\u17c3\u1780\u17b6\u179a\u1785\u17c1\u1789\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u17d4", + "{billing_last_name}: displays the billing last name.": "{billing_last_name}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1793\u17b6\u1798\u178f\u17d2\u179a\u1780\u17bc\u179b\u1785\u17c1\u1789\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u17d4", + "{billing_phone}: displays the billing phone.": "{billing_phone}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1791\u17bc\u179a\u179f\u17d0\u1796\u17d2\u1791\u1785\u17c1\u1789\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u17d4", + "{billing_address_1}: displays the billing address_1.": "{billing_address_1}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a address_1.", + "{billing_address_2}: displays the billing address_2.": "{billing_address_2}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a address_2.", + "{billing_country}: displays the billing country.": "{billing_country}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u1791\u17c1\u179f\u1785\u17c1\u1789\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u17d4", + "{billing_city}: displays the billing city.": "{billing_city}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1791\u17b8\u1780\u17d2\u179a\u17bb\u1784\u179c\u17b7\u1780\u17d0\u1799\u1794\u17d0\u178f\u17d2\u179a\u17d4", + "{billing_pobox}: displays the billing pobox.": "{billing_pobox}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u17d2\u179a\u17a2\u1794\u17cb POS \u1785\u17c1\u1789\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u17d4", + "{billing_company}: displays the billing company.": "{billing_company}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17d2\u179a\u17bb\u1798\u17a0\u17ca\u17bb\u1793\u1785\u17c1\u1789\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u17d4", + "{billing_email}: displays the billing email.": "{billing_email}: \u1794\u1784\u17d2\u17a0\u17b6\u1789\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u1785\u17c1\u1789\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a\u17d4", + "Column B": "\u1787\u17bd\u179a\u1788\u179a B", + "Available tags :": "\u179f\u17d2\u179b\u17b6\u1780\u178a\u17c2\u179b\u1798\u17b6\u1793 :", + "Order Code Type": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u179b\u17c1\u1781\u1780\u17bc\u178a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Determine how the system will generate code for each orders.": "\u1780\u17c6\u178e\u178f\u17cb\u1796\u17b8\u179a\u1794\u17c0\u1794\u178a\u17c2\u179b\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u1793\u17b9\u1784\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17bc\u178a\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1793\u17b8\u1798\u17bd\u1799\u17d7\u17d4", + "Sequential": "\u179b\u17c6\u178a\u17b6\u1794\u17cb\u179b\u17c6\u178a\u17c4\u1799", + "Random Code": "\u1780\u17bc\u178a\u1785\u17c3\u178a\u1793\u17d2\u1799", + "Number Sequential": "\u179b\u17c1\u1781\u179b\u17c6\u178a\u17b6\u1794\u17cb", + "Allow Unpaid Orders": "\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1798\u17b7\u1793\u1794\u17b6\u1793\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".": "\u1793\u17b9\u1784\u179a\u17b6\u179a\u17b6\u17c6\u1784\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1798\u17b7\u1793\u1796\u17c1\u1789\u179b\u17c1\u1789\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u178a\u17b6\u1780\u17cb\u17d4 \u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u17a5\u178e\u1791\u17b6\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f \u1787\u1798\u17d2\u179a\u17be\u179f\u1793\u17c1\u17c7\u1782\u17bd\u179a\u178f\u17c2\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1791\u17c5\u1787\u17b6 \"\u1794\u17b6\u1791\" \u17d4", + "Allow Partial Orders": "\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u17a2\u17b6\u1785\u1794\u1784\u17cb\u178a\u17c4\u1799\u1795\u17d2\u1793\u17c2\u1780", + "Will prevent partially paid orders to be placed.": "\u1793\u17b9\u1784\u179a\u17b6\u179a\u17b6\u17c6\u1784\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1784\u17cb\u178a\u17c4\u1799\u1795\u17d2\u1793\u17c2\u1780\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17b6\u1780\u17cb\u17d4", + "Quotation Expiration": "\u178f\u17b6\u179a\u17b6\u1784\u178f\u1798\u17d2\u179b\u17c3\u178a\u17c2\u179b\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb", + "Quotations will get deleted after they defined they has reached.": "\u179f\u1798\u17d2\u179a\u1784\u17cb\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb\u1796\u17b8\u1796\u17bd\u1780\u1782\u17c1\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u1796\u17bd\u1780\u1782\u17c1\u1794\u17b6\u1793\u1788\u17b6\u1793\u178a\u179b\u17cb\u17d4", + "%s Days": "%s \u1790\u17d2\u1784\u17c3", + "Features": "\u1796\u17b7\u179f\u17c1\u179f", + "Show Quantity": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1794\u179a\u17b7\u1798\u17b6\u178e", + "Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.": "\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789\u17a2\u17d2\u1793\u1780\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1794\u179a\u17b7\u1798\u17b6\u178e \u1781\u178e\u17c8\u1796\u17c1\u179b\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4 \u1794\u17be\u1798\u17b7\u1793\u178a\u17bc\u1785\u17d2\u1793\u17c4\u17c7\u1791\u17c1 \u1794\u179a\u17b7\u1798\u17b6\u178e\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1791\u17c5 1 \u17d4", + "Merge Similar Items": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u1792\u17b6\u178f\u17bb\u179f\u17d2\u179a\u178a\u17c0\u1784\u1782\u17d2\u1793\u17b6", + "Will enforce similar products to be merged from the POS.": "\u1793\u17b9\u1784\u200b\u1794\u1784\u17d2\u1781\u17c6\u200b\u17b1\u17d2\u1799\u200b\u1795\u179b\u17b7\u178f\u1795\u179b\u200b\u179f\u17d2\u179a\u178a\u17c0\u1784\u200b\u1782\u17d2\u1793\u17b6\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1785\u17d2\u179a\u1794\u17b6\u1785\u17cb\u1794\u1789\u17d2\u1785\u17bc\u179b\u200b\u1782\u17d2\u1793\u17b6\u200b\u1796\u17b8\u200b\u1798\u17c9\u17b6\u179f\u17ca\u17b8\u1793\u179b\u1780\u17cb\u17d4", + "Allow Wholesale Price": "\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u178f\u1798\u17d2\u179b\u17c3\u179b\u1780\u17cb\u178a\u17bb\u17c6", + "Define if the wholesale price can be selected on the POS.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u178f\u1798\u17d2\u179b\u17c3\u179b\u1780\u17cb\u178a\u17bb\u17c6\u17a2\u17b6\u1785\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1793\u17c5\u179b\u17be\u1798\u17c9\u17b6\u179f\u17ca\u17b8\u1793\u179b\u1780\u17cb\u17d4", + "Allow Decimal Quantities": "\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1794\u179a\u17b7\u1798\u17b6\u178e\u1791\u179f\u1797\u17b6\u1782", + "Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.": "\u1793\u17b9\u1784\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u1780\u17d2\u178f\u17b6\u179a\u1785\u17bb\u1785\u179b\u17c1\u1781\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1791\u179f\u1797\u17b6\u1782\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1794\u179a\u17b7\u1798\u17b6\u178e\u17d4 \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u178f\u17c2\u1795\u17d2\u1791\u17b6\u17c6\u1784\u179b\u17c1\u1781 \"\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\" \u1794\u17c9\u17bb\u178e\u17d2\u178e\u17c4\u17c7\u17d4", + "Allow Customer Creation": "\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1794\u1784\u17d2\u1780\u17be\u178f\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Allow customers to be created on the POS.": "\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u1793\u17c5\u179b\u17be\u1798\u17c9\u17b6\u179f\u17ca\u17b8\u1793\u179b\u1780\u17cb\u17d4", + "Quick Product": "\u1795\u179b\u17b7\u178f\u1795\u179b\u179a\u17a0\u17d0\u179f", + "Allow quick product to be created from the POS.": "\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1794\u1784\u17d2\u1780\u17be\u178f\u1795\u179b\u17b7\u178f\u1795\u179b\u179a\u17a0\u17d0\u179f\u1796\u17b8\u1798\u17c9\u17b6\u179f\u17ca\u17b8\u1793\u179b\u1780\u17cb\u17d4", + "Quick Product Default Unit": "\u17af\u1780\u178f\u17b6\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\u1795\u179b\u17b7\u178f\u1795\u179b\u179a\u17a0\u17d0\u179f", + "Set what unit is assigned by default to all quick product.": "\u1780\u17c6\u178e\u178f\u17cb\u200b\u17af\u1780\u178f\u17b6\u200b\u178e\u17b6\u200b\u178a\u17c2\u179b\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1780\u17c6\u178e\u178f\u17cb\u200b\u178f\u17b6\u1798\u200b\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\u200b\u1791\u17c5\u200b\u1782\u17d2\u179a\u1794\u17cb\u200b\u1795\u179b\u17b7\u178f\u1795\u179b\u200b\u179a\u17a0\u17d0\u179f\u17d4", + "Editable Unit Price": "\u178f\u1798\u17d2\u179b\u17c3\u17af\u1780\u178f\u17b6\u178a\u17c2\u179b\u17a2\u17b6\u1785\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u17b6\u1793", + "Allow product unit price to be edited.": "\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u178f\u1798\u17d2\u179b\u17c3\u17af\u1780\u178f\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Show Price With Tax": "\u1794\u1784\u17d2\u17a0\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b\u1787\u17b6\u1798\u17bd\u1799\u1796\u1793\u17d2\u1792", + "Will display price with tax for each products.": "\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789\u178f\u1798\u17d2\u179b\u17c3\u1787\u17b6\u1798\u17bd\u1799\u1793\u17b9\u1784\u1796\u1793\u17d2\u1792\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u1793\u17b8\u1798\u17bd\u1799\u17d7\u17d4", + "Order Types": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u179a\u1791\u17b7\u1789", + "Control the order type enabled.": "\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u1794\u17d2\u179a\u1797\u17c1\u1791\u1794\u1789\u17d2\u1787\u17b6\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u17be\u1780\u17d4", + "Numpad": "\u1780\u17d2\u178f\u17b6\u179a\u179b\u17c1\u1781", + "Advanced": "\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb", + "Will set what is the numpad used on the POS screen.": "\u1793\u17b9\u1784\u1780\u17c6\u178e\u178f\u17cb\u1793\u17bc\u179c\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u1787\u17b6\u1794\u1793\u17d2\u1791\u17c7\u179b\u17c1\u1781\u178a\u17c2\u179b\u1794\u17d2\u179a\u17be\u1793\u17c5\u179b\u17be\u17a2\u17c1\u1780\u17d2\u179a\u1784\u17cb\u1798\u17c9\u17b6\u179f\u17ca\u17b8\u1793\u179b\u1780\u17cb\u17d4", + "Force Barcode Auto Focus": "\u1794\u1784\u17d2\u1781\u17c6 Barcode Auto Focus", + "Will permanently enable barcode autofocus to ease using a barcode reader.": "\u1793\u17b9\u1784\u200b\u1794\u17be\u1780\u200b\u1780\u17b6\u179a\u200b\u1795\u17d2\u178a\u17c4\u178f\u200b\u179f\u17d2\u179c\u17d0\u1799\u200b\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u200b\u1794\u17b6\u1780\u17bc\u178a\u200b\u1787\u17b6\u200b\u17a2\u1785\u17b7\u1793\u17d2\u178f\u17d2\u179a\u17c3\u1799\u17cd\u200b\u178a\u17be\u1798\u17d2\u1794\u17b8\u200b\u1784\u17b6\u1799\u179f\u17d2\u179a\u17bd\u179b\u200b\u1780\u17d2\u1793\u17bb\u1784\u200b\u1780\u17b6\u179a\u200b\u1794\u17d2\u179a\u17be\u200b\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u200b\u17a2\u17b6\u1793\u200b\u1794\u17b6\u1780\u17bc\u178a\u17d4", + "Hide Exhausted Products": "\u179b\u17b6\u1780\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u17a2\u179f\u17cb\u179f\u17d2\u178f\u17bb\u1780", + "Will hide exhausted products from selection on the POS.": "\u1793\u17b9\u1784\u179b\u17b6\u1780\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u17a2\u179f\u17cb\u179f\u17d2\u178f\u17bb\u1780\u1796\u17b8\u1780\u17b6\u179a\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1793\u17c5\u179b\u17be\u1798\u17c9\u17b6\u179f\u17ca\u17b8\u1793\u179b\u1780\u17cb\u17d4", + "Hide Empty Category": "\u179b\u17b6\u1780\u17cb\u200b\u1794\u17d2\u179a\u1797\u17c1\u1791\u200b\u1791\u1791\u17c1", + "Category with no or exhausted products will be hidden from selection.": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u178a\u17c2\u179b\u1782\u17d2\u1798\u17b6\u1793\u1795\u179b\u17b7\u178f\u1795\u179b \u17ac\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u17a2\u179f\u17cb\u179f\u17d2\u178f\u17bb\u1780\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17b6\u1780\u17cb\u1796\u17b8\u1780\u17b6\u179a\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17d4", + "Bubble": "\u1796\u1796\u17bb\u17c7", + "Ding": "\u178c\u17b8\u1784", + "Pop": "\u1794\u17c9\u17bb\u1794", + "Cash Sound": "\u179f\u1798\u17d2\u179b\u17c1\u1784\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Layout": "\u1791\u1798\u17d2\u179a\u1784\u17cb\u1794\u1784\u17d2\u17a0\u17b6\u1789", + "Retail Layout": "\u1791\u1798\u17d2\u179a\u1784\u17cb\u179b\u1780\u17cb\u179a\u17b6\u1799", + "Clothing Shop": "\u1791\u1798\u17d2\u179a\u1784\u17cb\u17a0\u17b6\u1784\u179f\u1798\u17d2\u179b\u17c0\u1780\u1794\u17c6\u1796\u17b6\u1780\u17cb", + "POS Layout": "\u1791\u17d2\u179a\u1784\u17cb\u1791\u17d2\u179a\u17b6\u1799\u1795\u17d2\u1791\u17b6\u17c6\u1784\u179b\u1780\u17cb", + "Change the layout of the POS.": "\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u1791\u17d2\u179a\u1784\u17cb\u1791\u17d2\u179a\u17b6\u1799\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179b\u1780\u17cb\u17d4", + "Sale Complete Sound": "\u179f\u1798\u17d2\u179b\u17c1\u1784\u1796\u17c1\u179b\u179b\u1780\u17cb\u1794\u1789\u17d2\u1785\u1794\u17cb", + "New Item Audio": "\u179f\u1798\u17d2\u179b\u17c1\u1784\u1796\u17c1\u179b\u1794\u1784\u17d2\u1780\u17be\u178f\u1795\u179b\u17b7\u178f\u1795\u179b\u1790\u17d2\u1798\u17b8", + "The sound that plays when an item is added to the cart.": "\u179f\u1798\u17d2\u179b\u17c1\u1784\u179a\u17c4\u179a\u17cd\u1793\u17c5\u1796\u17c1\u179b\u178a\u17b6\u1780\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u1785\u17bc\u179b\u1791\u17c5\u1780\u17b6\u1793\u17cb\u1780\u1793\u17d2\u178f\u17d2\u179a\u1780\u1793\u17c3\u1780\u17b6\u179a\u1791\u17b7\u1789\u17d4", + "Printing": "\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1797", + "Printed Document": "\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1797\u17af\u1780\u179f\u17b6\u179a", + "Choose the document used for printing aster a sale.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17af\u1780\u179f\u17b6\u179a\u178a\u17c2\u179b\u1794\u17d2\u179a\u17be\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17b6\u179a\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1796\u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb\u1796\u17b8\u1780\u17b6\u179a\u179b\u1780\u17cb\u17d4", + "Printing Enabled For": "\u1780\u17b6\u179a\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1796\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17be\u1780\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb", + "All Orders": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "From Partially Paid Orders": "\u1796\u17b8\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1784\u17cb\u178a\u17c4\u1799\u1795\u17d2\u1793\u17c2\u1780", + "Only Paid Orders": "\u1798\u17b6\u1793\u178f\u17c2\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1794\u17c9\u17bb\u178e\u17d2\u178e\u17c4\u17c7", + "Determine when the printing should be enabled.": "\u1780\u17c6\u178e\u178f\u17cb\u1780\u17b6\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1797\u1782\u17bd\u179a\u1794\u17be\u1780\u1793\u17c5\u1796\u17c1\u179b\u178e\u17b6\u17d4", + "Printing Gateway": "\u1798\u1792\u17d2\u1799\u17c4\u1794\u17b6\u1799\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1797", + "Default Printing (web)": "\u1798\u1792\u17d2\u1799\u17c4\u1794\u17b6\u1799\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1797\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798 (\u179c\u17c1\u1794)", + "Determine what is the gateway used for printing.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u1798\u1792\u17d2\u1799\u17c4\u1794\u17b6\u1799", + "Enable Cash Registers": "\u1794\u17be\u1780\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Determine if the POS will support cash registers.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u1798\u17c9\u17b6\u179f\u17ca\u17b8\u1793\u1786\u17bc\u178f\u1780\u17b6\u178f\u1793\u17b9\u1784\u1782\u17b6\u17c6\u1791\u17d2\u179a\u1780\u17b6\u179a\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u178a\u17c2\u179a\u17ac\u1791\u17c1\u17d4", + "Cashier Idle Counter": "\u1794\u1789\u17d2\u1787\u179a\u1782\u17b7\u178f\u179b\u17bb\u1799\u1791\u17c6\u1793\u17c1\u179a", + "5 Minutes": "\u17e5 \u1793\u17b6\u1791\u17b8", + "10 Minutes": "\u17e1\u17e0 \u1793\u17b6\u1791\u17b8", + "15 Minutes": "\u17e1\u17e5 \u1793\u17b6\u1791\u17b8", + "20 Minutes": "\u17e2\u17e0 \u1793\u17b6\u1791\u17b8", + "30 Minutes": "\u17e3\u17e0 \u1793\u17b6\u1791\u17b8", + "Selected after how many minutes the system will set the cashier as idle.": "\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u179a\u1799\u17c8\u1796\u17c1\u179b\u1794\u17c9\u17bb\u1793\u17d2\u1798\u17b6\u1793\u1793\u17b6\u1791\u17b8\u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb \u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u1793\u17b9\u1784\u1780\u17c6\u178e\u178f\u17cb\u17a2\u17d2\u1793\u1780\u1782\u17b7\u178f\u179b\u17bb\u1799\u17b1\u17d2\u1799\u1793\u17c5\u1791\u17c6\u1793\u17c1\u179a\u17d4", + "Cash Disbursement": "\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Allow cash disbursement by the cashier.": "\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u200b\u17b1\u17d2\u1799\u200b\u1798\u17b6\u1793\u200b\u1780\u17b6\u179a\u200b\u1791\u17bc\u1791\u17b6\u178f\u17cb\u200b\u179f\u17b6\u1785\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u200b\u178a\u17c4\u1799\u200b\u17a2\u17d2\u1793\u1780\u1782\u17b7\u178f\u179b\u17bb\u1799\u17d4", + "Cash Registers": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Keyboard Shortcuts": "\u1780\u17d2\u178f\u17b6\u1785\u17bb\u1785\u1791\u1798\u17d2\u179a\u1784\u17cb\u1781\u17d2\u179b\u17b8", + "Cancel Order": "\u1794\u17c4\u17c7\u1794\u1784\u17cb\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Keyboard shortcut to cancel the current order.": "\u1780\u17d2\u178f\u17b6\u179a\u1785\u17bb\u1785\u1791\u1798\u17d2\u179a\u1784\u17cb\u1781\u17d2\u179b\u17b8 \u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17c4\u17c7\u1794\u1784\u17cb\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u17d4", + "Hold Order": "\u1795\u17d2\u17a2\u17b6\u1780\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Keyboard shortcut to hold the current order.": "\u1780\u17d2\u178f\u17b6\u179a\u1785\u17bb\u1785\u1791\u1798\u17d2\u179a\u1784\u17cb\u1781\u17d2\u179b\u17b8\u178a\u17be\u1798\u17d2\u1794\u17b8\u179a\u1780\u17d2\u179f\u17b6\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u17d4", + "Keyboard shortcut to create a customer.": "\u1780\u17d2\u178f\u17b6\u179a\u1785\u17bb\u1785\u1791\u1798\u17d2\u179a\u1784\u17cb\u1781\u17d2\u179b\u17b8\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u1784\u17d2\u1780\u17be\u178f\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u17d4", + "Proceed Payment": "\u1794\u1793\u17d2\u178f\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb", + "Keyboard shortcut to proceed to the payment.": "\u1780\u17d2\u178f\u17b6\u179a\u1785\u17bb\u1785\u1791\u1798\u17d2\u179a\u1784\u17cb\u1781\u17d2\u179b\u17b8\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u1793\u17d2\u178f\u1791\u17c5\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u17d4", + "Open Shipping": "\u1794\u17be\u1780\u1780\u17b6\u179a\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793", + "Keyboard shortcut to define shipping details.": "\u1780\u17d2\u178f\u17b6\u179a\u1785\u17bb\u1785\u1795\u17d2\u179b\u17bc\u179c\u1780\u17b6\u178f\u17cb\u178a\u17be\u1798\u17d2\u1794\u17b8\u1780\u17c6\u178e\u178f\u17cb\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u179b\u1798\u17d2\u17a2\u17b7\u178f\u1793\u17c3\u1780\u17b6\u179a\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u17d4", + "Open Note": "\u1794\u17be\u1780\u1785\u17c6\u178e\u17b6\u17c6", + "Keyboard shortcut to open the notes.": "\u1780\u17d2\u178f\u17b6\u179a\u1785\u17bb\u1785\u1791\u1798\u17d2\u179a\u1784\u17cb\u1781\u17d2\u179b\u17b8\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17be\u1780\u1785\u17c6\u178e\u17b6\u17c6\u17d4", + "Order Type Selector": "\u17a2\u17d2\u1793\u1780\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1794\u17d2\u179a\u1797\u17c1\u1791\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Keyboard shortcut to open the order type selector.": "\u1780\u17d2\u178f\u17b6\u179a\u1785\u17bb\u1785\u1791\u1798\u17d2\u179a\u1784\u17cb\u1781\u17d2\u179b\u17b8\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17be\u1780\u17a7\u1794\u1780\u179a\u178e\u17cd\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1794\u17d2\u179a\u1797\u17c1\u1791\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u17d4", + "Toggle Fullscreen": "\u1794\u17b7\u1791\/\u1794\u17be\u1780\u1796\u17c1\u1789\u17a2\u17c1\u1780\u17d2\u179a\u1784\u17cb", + "Keyboard shortcut to toggle fullscreen.": "\u1780\u17d2\u178f\u17b6\u179a\u1785\u17bb\u1785\u1791\u1798\u17d2\u179a\u1784\u17cb\u1781\u17d2\u179b\u17b8\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17b7\u1791\u1794\u17be\u1780\u1796\u17c1\u1789\u17a2\u17c1\u1780\u17d2\u179a\u1784\u17cb\u17d4", + "Quick Search": "\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u179a\u17a0\u17d0\u179f", + "Keyboard shortcut open the quick search popup.": "\u1780\u17d2\u178f\u17b6\u179a\u1785\u17bb\u1785\u1791\u1798\u17d2\u179a\u1784\u17cb\u1781\u17d2\u179b\u17b8\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17be\u1780\u1780\u17b6\u179a\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u179a\u17a0\u17d0\u179f\u179b\u17c1\u1785\u17a1\u17be\u1784\u17d4", + "Toggle Product Merge": "\u1794\u17b7\u1791\/\u1794\u17be\u1780\u200b\u200b\u1780\u17b6\u179a\u178a\u17b6\u1780\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u1794\u1789\u17d2\u1785\u17bc\u179b\u1782\u17d2\u1793\u17b6", + "Will enable or disable the product merging.": "\u1793\u17b9\u1784 \u1794\u17be\u1780\/\u1794\u17b7\u1791 \u1780\u17b6\u179a\u178a\u17b6\u1780\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u1794\u1789\u17d2\u1785\u17bc\u179b\u1782\u17d2\u1793\u17b6", + "Amount Shortcuts": "\u1795\u17d2\u179b\u17bc\u179c\u1780\u17b6\u178f\u17cb\u1785\u17bc\u179b\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "The amount numbers shortcuts separated with a \"|\".": "\u1795\u17d2\u179b\u17bc\u179c\u1780\u17b6\u178f\u17cb\u1785\u17bc\u179b\u1791\u17c5\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u178a\u17c2\u179b\u1794\u17c6\u1794\u17c2\u1780\u178a\u17c4\u1799 \"|\" \u17d4", + "VAT Type": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1796\u1793\u17d2\u1792", + "Determine the VAT type that should be used.": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u17d2\u179a\u1797\u17c1\u1791 \u1796\u1793\u17d2\u1792\u17a2\u17b6\u1780\u179a\u178a\u17c2\u179b\u1782\u17bd\u179a\u1794\u17d2\u179a\u17be\u17d4", + "Flat Rate": "\u17a2\u178f\u17d2\u179a\u17b6\u1790\u17c1\u179a", + "Flexible Rate": "\u17a2\u178f\u17d2\u179a\u17b6\u1794\u178f\u17cb\u1794\u17c2\u1793", + "Products Vat": "\u1796\u1793\u17d2\u1792\u17a2\u17b6\u1780\u179a\u1795\u179b\u17b7\u178f\u1795\u179b", + "Products & Flat Rate": "\u1795\u179b\u17b7\u178f\u1795\u179b \u1793\u17b7\u1784\u17a2\u178f\u17d2\u179a\u17b6\u1790\u17c1\u179a", + "Products & Flexible Rate": "\u1795\u179b\u17b7\u178f\u1795\u179b \u1793\u17b7\u1784\u17a2\u178f\u17d2\u179a\u17b6\u1794\u178f\u17cb\u1794\u17c2\u1793", + "Define the tax group that applies to the sales.": "\u1780\u17c6\u178e\u178f\u17cb\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792\u178a\u17c2\u179b\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1785\u17c6\u1796\u17c4\u17c7\u1780\u17b6\u179a\u179b\u1780\u17cb\u17d4", + "Define how the tax is computed on sales.": "\u1780\u17c6\u178e\u178f\u17cb\u1796\u17b8\u179a\u1794\u17c0\u1794\u178a\u17c2\u179b\u1796\u1793\u17d2\u1792\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u178e\u1793\u17b6\u179b\u17be\u1780\u17b6\u179a\u179b\u1780\u17cb\u17d4", + "VAT Settings": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1796\u1793\u17d2\u1792", + "Enable Email Reporting": "\u1794\u17be\u1780\u1780\u17b6\u179a\u179a\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u178f\u17b6\u1798\u17a2\u17ca\u17b8\u1798\u17c2\u179b", + "Determine if the reporting should be enabled globally.": "\u1780\u17c6\u178e\u178f\u17cb\u1790\u17b6\u178f\u17be\u1780\u17b6\u179a\u179a\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u1782\u17bd\u179a\u178f\u17c2\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17be\u1780\u1787\u17b6\u179f\u1780\u179b\u17d4", + "Supplies": "\u1795\u17d2\u1782\u178f\u17cb\u1795\u17d2\u1782\u1784\u17cb", + "Public Name": "\u1788\u17d2\u1798\u17c4\u17c7\u179f\u17b6\u1792\u17b6\u179a\u178e\u17c8", + "Define what is the user public name. If not provided, the username is used instead.": "\u1780\u17c6\u178e\u178f\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u179f\u17b6\u1792\u17b6\u179a\u178e\u17c8\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17d4 \u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u200b\u1798\u17b7\u1793\u200b\u1794\u17b6\u1793\u200b\u1795\u17d2\u178f\u179b\u17cb\u200b\u1791\u17c1 \u1788\u17d2\u1798\u17c4\u17c7\u200b\u17a2\u17d2\u1793\u1780\u200b\u1794\u17d2\u179a\u17be\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1794\u17d2\u179a\u17be\u200b\u1787\u17c6\u1793\u17bd\u179f\u200b\u179c\u17b7\u1789\u17d4", + "Enable Workers": "\u1794\u17be\u1780 Workers", + "Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".": "\u1794\u17be\u1780\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u179f\u17c1\u179c\u17b6\u1780\u1798\u17d2\u1798\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb NexoPOS \u17d4 \u1792\u17d2\u179c\u17be\u17b1\u17d2\u1799\u179f\u17d2\u179a\u179f\u17cb\u178a\u17be\u1798\u17d2\u1794\u17b8\u1796\u17b7\u1793\u17b7\u178f\u17d2\u1799\u1798\u17be\u179b\u1790\u17b6\u178f\u17be\u1787\u1798\u17d2\u179a\u17be\u179f\u1794\u17b6\u1793\u1794\u17d2\u179a\u17c2\u1791\u17c5\u1787\u17b6 \"\u1794\u17b6\u1791\/\u1785\u17b6\u179f\" \u178a\u17c2\u179a\u17ac\u1791\u17c1\u17d4", + "Test": "\u178f\u17c1\u179f\u17d2\u178f", + "Best Cashiers": "\u17a2\u17d2\u1793\u1780\u1782\u17b7\u178f\u179b\u17bb\u1799\u179b\u17d2\u17a2\u1794\u17c6\u1795\u17bb\u178f", + "Will display all cashiers who performs well.": "\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789\u17a2\u17d2\u1793\u1780\u1782\u17b7\u178f\u179b\u17bb\u1799\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u178a\u17c2\u179b\u1792\u17d2\u179c\u17be\u1794\u17b6\u1793\u179b\u17d2\u17a2\u17d4", + "Best Customers": "\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u179b\u17d2\u17a2\u1794\u17c6\u1795\u17bb\u178f", + "Will display all customers with the highest purchases.": "\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u1787\u17b6\u1798\u17bd\u1799\u1793\u17b9\u1784\u1780\u17b6\u179a\u1791\u17b7\u1789\u1781\u17d2\u1796\u179f\u17cb\u1794\u17c6\u1795\u17bb\u178f\u17d4", + "Expense Card Widget": "\u1795\u17d2\u1791\u17b6\u17c6\u1784\u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a\u1793\u17c3\u1780\u17b6\u179a\u1785\u17c6\u178e\u17b6\u1799", + "Will display a card of current and overwall expenses.": "\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17b6\u178f\u1793\u17c3\u1780\u17b6\u179a\u1785\u17c6\u178e\u17b6\u1799\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793 \u1793\u17b7\u1784\u179b\u17be\u179f\u1787\u1789\u17d2\u1787\u17b6\u17c6\u1784\u17d4", + "Incomplete Sale Card Widget": "\u1795\u17d2\u1791\u17b6\u17c6\u1784\u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a\u179b\u1780\u17cb\u1798\u17b7\u1793\u1796\u17c1\u1789\u179b\u17c1\u1789", + "Will display a card of current and overall incomplete sales.": "\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17b6\u178f\u1793\u17c3\u1780\u17b6\u179a\u179b\u1780\u17cb\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793 \u1793\u17b7\u1784\u179f\u179a\u17bb\u1794\u1798\u17b7\u1793\u1796\u17c1\u1789\u179b\u17c1\u1789\u17d4", + "Orders Chart": "\u178f\u17b6\u179a\u17b6\u1784\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Will display a chart of weekly sales.": "\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789\u178f\u17b6\u179a\u17b6\u1784\u1793\u17c3\u1780\u17b6\u179a\u179b\u1780\u17cb\u1794\u17d2\u179a\u1785\u17b6\u17c6\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd\u17d4", + "Orders Summary": "\u179f\u1784\u17d2\u1781\u17c1\u1794\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Will display a summary of recent sales.": "\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179f\u17c1\u1785\u1780\u17d2\u178f\u17b8\u179f\u1784\u17d2\u1781\u17c1\u1794\u1793\u17c3\u1780\u17b6\u179a\u179b\u1780\u17cb\u1790\u17d2\u1798\u17b8\u17d7\u17d4", + "Profile": "\u1782\u178e\u1793\u17b8", + "Will display a profile widget with user stats.": "\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1782\u178e\u1793\u17b8\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17d4", + "Sale Card Widget": "\u1795\u17d2\u1791\u17b6\u17c6\u1784\u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a\u1793\u17c3\u1780\u17b6\u179a\u179b\u1780\u17cb", + "Will display current and overall sales.": "\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17b6\u179a\u179b\u1780\u17cb\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1793\u17b7\u1784\u1787\u17b6\u1791\u17bc\u179a\u1791\u17c5\u17d4", + "OK": "\u1799\u179b\u17cb\u1796\u17d2\u179a\u1798", + "Howdy, {name}": "\u179f\u17bd\u179f\u17d2\u178f\u17b8, {name}", + "Return To Calendar": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1794\u17d2\u179a\u178f\u17b7\u1791\u17b7\u1793\u179c\u17b7\u1789", + "Sun": "\u17a2\u17b6", + "Mon": "\u1785", + "Tue": "\u17a2", + "Wed": "\u1796\u17bb", + "Thr": "\u1796\u17d2\u179a", + "Fri": "\u179f\u17bb", + "Sat": "\u179f", + "The left range will be invalid.": "\u1787\u17bd\u179a\u200b\u1781\u17b6\u1784\u200b\u1786\u17d2\u179c\u17c1\u1784\u200b\u1793\u17b9\u1784\u200b\u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "The right range will be invalid.": "\u1787\u17bd\u179a\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u1793\u17b9\u1784\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Close": "\u1794\u17b7\u1791", + "No submit URL was provided": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17b6\u179a\u179f\u17d2\u1793\u17be\u179a URL \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb", + "Okay": "\u1799\u179b\u17cb\u1796\u17d2\u179a\u1798", + "Go Back": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1780\u17d2\u179a\u17c4\u1799", + "Save": "\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780", + "Filters": "\u1785\u17d2\u179a\u17c4\u17c7", + "Has Filters": "\u1798\u17b6\u1793\u1780\u17b6\u179a\u1785\u17d2\u179a\u17c4\u17c7", + "{entries} entries selected": "\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f {entries}", + "Download": "\u1791\u17b6\u1789\u1799\u1780", + "There is nothing to display...": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u17a2\u17d2\u179c\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1791\u17c1...", + "Bulk Actions": "\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u1787\u17b6\u1785\u1784\u17d2\u1780\u17c4\u1798", + "Apply": "\u178a\u17b6\u1780\u17cb\u179f\u17d2\u1793\u17be", + "displaying {perPage} on {items} items": "\u1780\u17c6\u1796\u17bb\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789 {perPage} \u1793\u17c3 {items}", + "The document has been generated.": "\u17af\u1780\u179f\u17b6\u179a\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1794\u1784\u17d2\u1780\u17be\u178f\u200b\u17a1\u17be\u1784\u17d4", + "Unexpected error occurred.": "\u1780\u17c6\u17a0\u17bb\u179f\u178a\u17c2\u179b\u1798\u17b7\u1793\u1794\u17b6\u1793\u179a\u17c6\u1796\u17b9\u1784\u1791\u17bb\u1780\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u17d4", + "Clear Selected Entries ?": "\u179f\u1798\u17d2\u17a2\u17b6\u178f\u1792\u17b6\u178f\u17bb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f?", + "Would you like to clear all selected entries ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179f\u1798\u17d2\u17a2\u17b6\u178f\u1792\u17b6\u178f\u17bb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u1791\u17c1?", + "Sorting is explicitely disabled on this column": "\u1780\u17b6\u179a\u178f\u1798\u17d2\u179a\u17c0\u1794\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791\u1799\u17c9\u17b6\u1784\u1785\u17d2\u1794\u17b6\u179f\u17cb\u179b\u17b6\u179f\u17cb\u1793\u17c5\u179b\u17be\u1787\u17bd\u179a\u1788\u179a\u1793\u17c1\u17c7", + "Would you like to perform the selected bulk action on the selected entries ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u1797\u17b6\u1782\u1785\u17d2\u179a\u17be\u1793\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1793\u17c5\u179b\u17be\u1792\u17b6\u178f\u17bb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1791\u17c1?", + "No selection has been made.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17b6\u179a\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u17a1\u17be\u1784\u1791\u17c1\u17d4", + "No action has been selected.": "\u1782\u17d2\u1798\u17b6\u1793\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u178e\u17b6\u1798\u17bd\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1791\u17c1\u17d4", + "N\/D": "N\/D", + "Range Starts": "\u1785\u1793\u17d2\u179b\u17c4\u17c7\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798", + "Range Ends": "\u1785\u1793\u17d2\u179b\u17c4\u17c7\u1794\u1789\u17d2\u1785\u1794\u17cb", + "Click here to add widgets": "\u1785\u17bb\u1785\u1791\u17b8\u1793\u17c1\u17c7\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u1793\u17d2\u1790\u17c2\u1798\u1795\u17d2\u1791\u17b6\u17c6\u1784\u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a", + "An unpexpected error occured while using the widget.": "\u1780\u17c6\u17a0\u17bb\u179f\u178a\u17c2\u179b\u1798\u17b7\u1793\u1793\u17b9\u1780\u179f\u17d2\u1798\u17b6\u1793\u178a\u179b\u17cb\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784 \u1781\u178e\u17c8\u1796\u17c1\u179b\u1780\u17c6\u1796\u17bb\u1784\u1794\u17d2\u179a\u17be\u1795\u17d2\u1791\u17b6\u17c6\u1784\u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a\u17d4", + "Choose Widget": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1795\u17d2\u1791\u17b6\u17c6\u1784\u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a", + "Select with widget you want to add to the column.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1795\u17d2\u1791\u17b6\u17c6\u1784\u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1793\u17d2\u1790\u17c2\u1798\u1791\u17c5\u1787\u17bd\u179a\u1788\u179a\u17d4", + "This field must contain a valid email address.": "\u1794\u17d2\u179a\u17a2\u1794\u17cb\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1798\u17b6\u1793\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "This field must be similar to \"{other}\"\"": "\u1794\u17d2\u179a\u17a2\u1794\u17cb\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u179f\u17d2\u179a\u178a\u17c0\u1784\u1793\u17b9\u1784 \"{other}\"\"", + "This field must have at least \"{length}\" characters\"": "\u1794\u17d2\u179a\u17a2\u1794\u17cb\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1798\u17b6\u1793\u1799\u17c9\u17b6\u1784\u17a0\u17c4\u1785\u178e\u17b6\u179f\u17cb \"{length}\" \u178f\u17bd\u179a", + "This field must have at most \"{length}\" characters\"": "\u1794\u17d2\u179a\u17a2\u1794\u17cb\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1798\u17b6\u1793\u1785\u17d2\u179a\u17be\u1793\u1794\u17c6\u1795\u17bb\u178f \"{length}\" \u178f\u17bd\u179a", + "This field must be different from \"{other}\"\"": "\u1794\u17d2\u179a\u17a2\u1794\u17cb\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1781\u17bb\u179f\u1796\u17b8 \"{other}\"\"", + "Nothing to display": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u17a2\u17d2\u179c\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1791\u17c1", + "Enter": "\u1785\u17bc\u179b", + "Search result": "\u179b\u1791\u17d2\u1792\u1795\u179b\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780", + "Choose...": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f...", + "The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.": "Component ${field.component} \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1795\u17d2\u1791\u17bb\u1780\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u17b6\u1780\u178a\u1790\u17b6\u179c\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17b6\u1780\u17cb\u1793\u17c5\u179b\u17be\u179c\u178f\u17d2\u1790\u17bb nsExtraComponents \u17d4", + "Search...": "\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780...", + "An unexpected error occurred.": "\u1780\u17c6\u17a0\u17bb\u179f\u178a\u17c2\u179b\u1798\u17b7\u1793\u1793\u17b9\u1780\u179f\u17d2\u1798\u17b6\u1793\u178a\u179b\u17cb\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u17d4", + "Choose an option": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1787\u1798\u17d2\u179a\u17be\u179f\u1798\u17bd\u1799", + "Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1795\u17d2\u1791\u17bb\u1780 component \"${action.component}\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u17b6\u1780\u178a\u1790\u17b6\u179c\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17b6\u1780\u17cb\u1793\u17c5\u179b\u17be\u179c\u178f\u17d2\u1790\u17bb nsExtraComponents \u17d4", + "Unamed Tab": "\u178f\u17b6\u1794\u1782\u17d2\u1798\u17b6\u1793\u1788\u17d2\u1798\u17c4\u17c7", + "+{count} other": "+{count} \u1795\u17d2\u179f\u17c1\u1784\u1791\u17c0\u178f", + "Unknown Status": "\u1798\u17b7\u1793\u179f\u17d2\u1782\u17b6\u179b\u17cb\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796", + "The selected print gateway doesn't support this type of printing.": "\u1785\u17d2\u179a\u1780\u1785\u17c1\u1789\u1785\u17bc\u179b\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1796\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1798\u17b7\u1793\u1782\u17b6\u17c6\u1791\u17d2\u179a\u1794\u17d2\u179a\u1797\u17c1\u1791\u1793\u17c3\u1780\u17b6\u179a\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1796\u1793\u17c1\u17c7\u1791\u17c1\u17d4", + "An error unexpected occured while printing.": "\u1780\u17c6\u17a0\u17bb\u179f\u178a\u17c2\u179b\u1798\u17b7\u1793\u1793\u17b9\u1780\u179f\u17d2\u1798\u17b6\u1793\u178a\u179b\u17cb\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784 \u1781\u178e\u17c8\u1796\u17c1\u179b\u1780\u17c6\u1796\u17bb\u1784\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1796\u17d4", + "millisecond| second| minute| hour| day| week| month| year| decade| century| millennium": "\u1798\u17b8\u179b\u17b8\u179c\u17b7\u1793\u17b6\u1791\u17b8| \u179c\u17b7\u1793\u17b6\u1791\u17b8| \u1793\u17b6\u1791\u17b8| \u1798\u17c9\u17c4\u1784 | \u1790\u17d2\u1784\u17c3| \u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd | \u1781\u17c2 | \u1786\u17d2\u1793\u17b6\u17c6 | \u1791\u179f\u179c\u178f\u17d2\u179f\u179a\u17cd| \u179f\u178f\u179c\u178f\u17d2\u179f| \u179f\u17a0\u179f\u17d2\u179f\u179c\u178f\u17d2\u179f\u179a\u17cd", + "milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia": "\u1798\u17b8\u179b\u17b8\u179c\u17b7\u1793\u17b6\u1791\u17b8| \u179c\u17b7\u1793\u17b6\u1791\u17b8| \u1793\u17b6\u1791\u17b8| \u1798\u17c9\u17c4\u1784 | \u1790\u17d2\u1784\u17c3| \u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd | \u1781\u17c2 | \u1786\u17d2\u1793\u17b6\u17c6 | \u1791\u179f\u179c\u178f\u17d2\u179f\u179a\u17cd| \u179f\u178f\u179c\u178f\u17d2\u179f| \u179f\u17a0\u179f\u17d2\u179f\u179c\u178f\u17d2\u179f\u179a\u17cd", + "and": "\u1793\u17b7\u1784", + "{date} ago": "{date} \u1798\u17bb\u1793", + "In {date}": "\u1793\u17c5 {date}", + "Password Forgotten ?": "\u1797\u17d2\u179b\u17c1\u1785\u179b\u17c1\u1781\u179f\u17c6\u1784\u17b6\u178f\u17cb\u1798\u17c2\u1793\u1791\u17c1?", + "Sign In": "\u1785\u17bc\u179b\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Register": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7", + "Unable to proceed the form is not valid.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u178f\u200b \u178a\u17c4\u1799\u179f\u17b6\u179a\u1791\u1798\u17d2\u179a\u1784\u17cb\u200b\u1794\u17c2\u1794\u1794\u1791\u200b\u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "An unexpected error occured.": "\u1780\u17c6\u17a0\u17bb\u179f\u178a\u17c2\u179b\u1798\u17b7\u1793\u1794\u17b6\u1793\u179a\u17c6\u1796\u17b9\u1784\u1791\u17bb\u1780\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u17d4", + "Save Password": "\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u179b\u17c1\u1781\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb", + "Remember Your Password ?": "\u1785\u1784\u1785\u17b6\u17c6\u179b\u17c1\u1781\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780?", + "Submit": "\u178a\u17b6\u1780\u17cb\u179f\u17d2\u1793\u17be", + "Already registered ?": "\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u179a\u17bd\u1785\u17a0\u17be\u1799?", + "Return": "\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1780\u17d2\u179a\u17c4\u1799", + "Today": "\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7", + "Clients Registered": "\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Commissions": "\u1780\u1798\u17d2\u179a\u17c3\u1787\u17be\u1784\u179f\u17b6\u179a", + "Upload": "\u1795\u17d2\u1791\u17bb\u1780\u17a1\u17be\u1784", + "No modules matches your search term.": "\u1782\u17d2\u1798\u17b6\u1793 module \u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1793\u17b9\u1784\u1796\u17b6\u1780\u17d2\u1799\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1791\u17c1\u17d4", + "Read More": "\u17a2\u17b6\u1793\u200b\u1794\u1793\u17d2\u1790\u17c2\u1798", + "Enable": "\u1794\u17be\u1780", + "Disable": "\u1794\u17b7\u1791", + "Press \"\/\" to search modules": "\u1785\u17bb\u1785 \"\/\" \u178a\u17be\u1798\u17d2\u1794\u17b8\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780 modules", + "No module has been uploaded yet.": "\u1798\u17b7\u1793\u200b\u1791\u17b6\u1793\u17cb\u200b\u1798\u17b6\u1793 module \u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1795\u17d2\u1791\u17bb\u1780\u200b\u17a1\u17be\u1784\u200b\u1793\u17c5\u200b\u17a1\u17be\u1799\u200b\u1791\u17c1\u17d4", + "{module}": "{module}", + "Would you like to delete \"{module}\"? All data created by the module might also be deleted.": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1796\u17b7\u178f\u1787\u17b6\u1785\u1784\u17cb\u179b\u17bb\u1794 \"{module}\"? \u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u178a\u17c2\u179b\u1794\u1784\u17d2\u1780\u17be\u178f\u17a1\u17be\u1784\u178a\u17c4\u1799 module \u1780\u17cf\u17a2\u17b6\u1785\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u1795\u1784\u178a\u17c2\u179a\u17d4", + "Gallery": "\u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a\u179f\u17b6\u179b", + "An error occured": "\u1780\u17c6\u17a0\u17bb\u179f\u200b\u1798\u17bd\u1799\u200b\u1794\u17b6\u1793\u200b\u1780\u17be\u178f\u200b\u17a1\u17be\u1784", + "Confirm Your Action": "\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780", + "You\\'re about to delete selected resources. Would you like to proceed?": "\u17a2\u17d2\u1793\u1780\u17a0\u17c0\u1794\u1793\u17b9\u1784\u179b\u17bb\u1794 resources \u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17d4 \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1793\u17d2\u178f\u1791\u17c1?", + "Medias Manager": "\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a\u179f\u17b6\u179b", + "Click Here Or Drop Your File To Upload": "\u1785\u17bb\u1785\u1791\u17b8\u1793\u17c1\u17c7 \u17ac\u1791\u1798\u17d2\u179b\u17b6\u1780\u17cb\u17af\u1780\u179f\u17b6\u179a\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u178a\u17be\u1798\u17d2\u1794\u17b8\u17a2\u17b6\u1794\u17cb\u17a1\u17bc\u178f", + "See Error": "\u1798\u17be\u179b\u1780\u17c6\u17a0\u17bb\u179f\u1786\u17d2\u1782\u1784", + "Your uploaded files will displays here.": "\u17af\u1780\u179f\u17b6\u179a\u178a\u17c2\u179b\u1794\u17b6\u1793\u17a2\u17b6\u1794\u17cb\u17a1\u17bc\u178f\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1793\u17c5\u1791\u17b8\u1793\u17c1\u17c7\u17d4", + "Search Medias": "\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u179c\u17b7\u1785\u17b7\u178f\u17d2\u179a\u179f\u17b6\u179b", + "Cancel": "\u1794\u178a\u17b7\u179f\u17c1\u1792", + "Nothing has already been uploaded": "\u1782\u17d2\u1798\u17b6\u1793\u200b\u17a2\u17d2\u179c\u17b8\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u17a2\u17b6\u1794\u17cb\u17a1\u17bc\u178f\u1791\u17c1\u200b", + "Uploaded At": "\u17a2\u17b6\u1794\u17cb\u17a1\u17bc\u178f\u1793\u17c5", + "Bulk Select": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1787\u17b6\u1785\u1784\u17d2\u1780\u17c4\u1798", + "Previous": "\u1796\u17b8\u1798\u17bb\u1793", + "Next": "\u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb", + "Use Selected": "\u1794\u17be\u1780\u17b6\u179a\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f", + "Nothing to care about !": "\u1782\u17d2\u1798\u17b6\u1793\u17a2\u17d2\u179c\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1781\u17d2\u179c\u179b\u17cb\u1791\u17c1!", + "Clear All": "\u179f\u1798\u17d2\u17a2\u17b6\u178f\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb", + "Would you like to clear all the notifications ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179f\u1798\u17d2\u17a2\u17b6\u178f\u1780\u17b6\u179a\u1787\u17bc\u1793\u178a\u17c6\u178e\u17b9\u1784\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u1791\u17c1?", + "Press "\/" to search permissions": "\u1785\u17bb\u1785 "\/" \u178a\u17be\u1798\u17d2\u1794\u17b8\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u179f\u17b7\u1791\u17d2\u1792\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Permissions": "\u179f\u17b7\u1791\u17d2\u1792\u17b7\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Would you like to bulk edit a system role ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u178f\u17bd\u1793\u17b6\u1791\u17b8\u179a\u1794\u179f\u17cb\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u1787\u17b6\u1785\u1784\u17d2\u1780\u17c4\u1798\u1791\u17c1?", + "Save Settings": "\u179a\u1780\u17d2\u179f\u17b6\u179a\u1791\u17bb\u1780\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb", + "Payment Summary": "\u179f\u1784\u17d2\u1781\u17c1\u1794\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Order Status": "\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Processing Status": "\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a", + "Refunded Products": "\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789", + "All Refunds": "\u1780\u17b6\u179a\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb", + "Would you proceed ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1793\u17b9\u1784\u1794\u1793\u17d2\u178f\u1791\u17c1?", + "The processing status of the order will be changed. Please confirm your action.": "\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u17d4 \u179f\u17bc\u1798\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4", + "The delivery status of the order will be changed. Please confirm your action.": "\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u17d4 \u179f\u17bc\u1798\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4", + "Payment Method": "\u1798\u1792\u17d2\u1799\u17c4\u1794\u17b6\u1799\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Before submitting the payment, choose the payment type used for that order.": "\u1798\u17bb\u1793\u1796\u17c1\u179b\u178a\u17b6\u1780\u17cb\u179f\u17d2\u1793\u17be\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb \u179f\u17bc\u1798\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1793\u17c4\u17c7\u17d4", + "Submit Payment": "\u178a\u17b6\u1780\u17cb\u179f\u17d2\u1793\u17be\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb", + "Select the payment type that must apply to the current order.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1785\u17c6\u1796\u17c4\u17c7\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u17d4", + "Payment Type": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "An unexpected error has occurred": "\u1780\u17c6\u17a0\u17bb\u179f\u200b\u178a\u17c2\u179b\u200b\u1798\u17b7\u1793\u200b\u179a\u17c6\u1796\u17b9\u1784\u200b\u1791\u17bb\u1780\u200b\u1794\u17b6\u1793\u200b\u1780\u17be\u178f\u200b\u17a1\u17be\u1784\u200b", + "The form is not valid.": "\u1791\u1798\u17d2\u179a\u1784\u17cb\u1794\u17c2\u1794\u1794\u1791\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Update Instalment Date": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7", + "Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.": "\u178f\u17be\u200b\u17a2\u17d2\u1793\u1780\u200b\u1785\u1784\u17cb\u200b\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u200b\u1780\u17b6\u179a\u200b\u178a\u17c6\u17a1\u17be\u1784\u200b\u1793\u17c4\u17c7\u200b\u1790\u17b6\u200b\u178a\u179b\u17cb\u200b\u1780\u17c6\u178e\u178f\u17cb\u200b\u1790\u17d2\u1784\u17c3\u200b\u1793\u17c1\u17c7\u200b\u1791\u17c1? \u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u17a2\u17d2\u1793\u1780\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u179f\u17cb\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb\u1790\u17b6\u1794\u17b6\u1793\u1794\u1784\u17cb\u17d4", + "Create": "\u1794\u1784\u17d2\u1780\u17be\u178f", + "Total :": "\u179f\u179a\u17bb\u1794 :", + "Remaining :": "\u1793\u17c5\u179f\u179b\u17cb :", + "Instalments:": "\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7:", + "Add Instalment": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1780\u17b6\u179a\u179a\u17c6\u179b\u17c4\u17c7", + "This instalment doesn\\'t have any payment attached.": "\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u179f\u17cb\u1793\u17c1\u17c7\u1798\u17b7\u1793\u1798\u17b6\u1793\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1787\u17b6\u1798\u17bd\u1799\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1791\u17c1\u17d4", + "Would you like to create this instalment ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u1793\u17c1\u17c7\u1791\u17c1?", + "Would you like to delete this instalment ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179b\u17bb\u1794\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u1793\u17c1\u17c7\u1791\u17c1", + "Would you like to update that instalment ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u1793\u17c1\u17c7\u1791\u17c1", + "Print": "\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1797", + "Store Details": "\u179b\u1798\u17d2\u17a2\u17b7\u178f\u1796\u17b8\u17a0\u17b6\u1784", + "Cashier": "\u17a2\u17d2\u1793\u1780\u1782\u17b7\u178f\u179b\u17bb\u1799", + "Billing Details": "\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u179b\u1798\u17d2\u17a2\u17b7\u178f\u17a2\u17c6\u1796\u17b8\u1780\u17b6\u179a\u1785\u17c1\u1789\u179c\u17b7\u1780\u17d2\u1780\u1799\u1794\u178f\u17d2\u179a", + "Shipping Details": "\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u179b\u1798\u17d2\u17a2\u17b7\u178f\u17a2\u17c6\u1796\u17b8\u1780\u17b6\u179a\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793", + "No payment possible for paid order.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1784\u17cb\u200b\u1794\u17d2\u179a\u17b6\u1780\u17cb\u200b\u1794\u17b6\u1793\u200b\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u200b\u1780\u17b6\u179a\u200b\u1794\u1789\u17d2\u1787\u17b6\u200b\u1791\u17b7\u1789\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u1794\u1784\u17cb\u200b\u1794\u17d2\u179a\u17b6\u1780\u17cb\u17d4", + "Payment History": "\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb", + "Unknown": "\u1798\u17b7\u1793\u179f\u17d2\u1782\u17b6\u179b\u17cb", + "You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?": "\u17a2\u17d2\u1793\u1780\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1785\u17c6\u1793\u17bd\u1793 {amount} \u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17bb\u1794\u1785\u17c4\u179b\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1793\u17d2\u178f\u1791\u17c1?", + "Refund With Products": "\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789\u1787\u17b6\u1798\u17bd\u1799\u1795\u179b\u17b7\u178f\u1795\u179b", + "Refund Shipping": "\u1780\u17b6\u179a\u1794\u1784\u17d2\u179c\u17b7\u179b\u179f\u1784\u1790\u17d2\u179b\u17c3\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793", + "Add Product": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u1795\u179b\u17b7\u178f\u1795\u179b", + "Summary": "\u179f\u1784\u17d2\u1781\u17c1\u1794", + "Payment Gateway": "\u1785\u17d2\u179a\u1780\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Screen": "\u1795\u17d2\u1791\u17b6\u17c6\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789", + "Select the product to perform a refund.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17be\u1798\u17d2\u1794\u17b8\u1792\u17d2\u179c\u17be\u1780\u17b6\u179a\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789\u17d4", + "Please select a payment gateway before proceeding.": "\u179f\u17bc\u1798\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1785\u17d2\u179a\u1780\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1798\u17bb\u1793\u1796\u17c1\u179b\u1794\u1793\u17d2\u178f\u17d4", + "There is nothing to refund.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u17a2\u17d2\u179c\u17b8\u178f\u17d2\u179a\u17bc\u179c\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789\u1791\u17c1\u17d4", + "Please provide a valid payment amount.": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb\u1785\u17c6\u1793\u17bd\u1793\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "The refund will be made on the current order.": "\u1780\u17b6\u179a\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u17a1\u17be\u1784\u178f\u17b6\u1798\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u17d4", + "Please select a product before proceeding.": "\u179f\u17bc\u1798\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1795\u179b\u17b7\u178f\u1795\u179b\u1798\u17bb\u1793\u1796\u17c1\u179b\u1794\u1793\u17d2\u178f\u17d4", + "Not enough quantity to proceed.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1794\u179a\u17b7\u1798\u17b6\u178e\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u17b6\u1793\u17cb\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u1793\u17d2\u178f\u17d4", + "An error has occured while seleting the payment gateway.": "\u1780\u17c6\u17a0\u17bb\u179f\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u1793\u17c5\u1796\u17c1\u179b\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1785\u17d2\u179a\u1780\u1795\u17d2\u179b\u17bc\u179c\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u17d4", + "Would you like to delete this product ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179b\u17bb\u1794\u1795\u179b\u17b7\u178f\u1795\u179b\u1793\u17c1\u17c7\u1791\u17c1?", + "You're not allowed to add a discount on the product.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1794\u1793\u17d2\u1790\u17c2\u1798\u1780\u17b6\u179a\u1794\u1789\u17d2\u1785\u17bb\u17c7\u178f\u1798\u17d2\u179b\u17c3\u179b\u17be\u1795\u179b\u17b7\u178f\u1795\u179b\u1793\u17c4\u17c7\u1791\u17c1\u17d4", + "You're not allowed to add a discount on the cart.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1794\u1793\u17d2\u1790\u17c2\u1798\u1780\u17b6\u179a\u1794\u1789\u17d2\u1785\u17bb\u17c7\u178f\u1798\u17d2\u179b\u17c3\u179b\u17be\u1780\u17b6\u179a\u179b\u1780\u17cb\u1793\u17c4\u17c7\u1791\u17c1\u17d4", + "Unable to hold an order which payment status has been updated already.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1780\u17b6\u1793\u17cb\u200b\u1780\u17b6\u179a\u200b\u1794\u1789\u17d2\u1787\u17b6\u200b\u1791\u17b7\u1789\u200b\u178a\u17c2\u179b\u200b\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u200b\u1793\u17c3\u200b\u1780\u17b6\u179a\u200b\u1791\u17bc\u1791\u17b6\u178f\u17cb\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1792\u17d2\u179c\u17be\u200b\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u200b\u179a\u17bd\u1785\u200b\u17a0\u17be\u1799\u17d4", + "Pay": "\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Order Type": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Cash Register : {register}": "\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1794\u17d2\u179a\u17b6\u1780\u17cb : {register}", + "The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179f\u1798\u17d2\u17a2\u17b6\u178f\u17d4 \u1794\u17c9\u17bb\u1793\u17d2\u178f\u17c2\u200b\u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u179b\u17bb\u1794\u200b\u1791\u17c1 \u1794\u17d2\u179a\u179f\u17b7\u1793\u200b\u1794\u17be\u200b\u179c\u17b6\u200b\u1793\u17c5\u200b\u178f\u17c2\u200b\u1794\u1793\u17d2\u178f\u17d4 \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1793\u17d2\u178f?", + "Cart": "\u1780\u1793\u17d2\u178f\u17d2\u179a\u1780\u1791\u17c6\u1793\u17b7\u1789", + "Comments": "\u1798\u178f\u17b7", + "No products added...": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1793\u17d2\u1790\u17c2\u1798\u1791\u17c1...", + "Price": "\u178f\u1798\u17d2\u179b\u17c3", + "Tax Inclusive": "\u179a\u17bd\u1798\u1794\u1789\u17d2\u1785\u17bc\u179b\u1796\u1793\u17d2\u1792", + "Apply Coupon": "\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "You don't have the right to edit the purchase price.": "\u17a2\u17d2\u1793\u1780\u200b\u1798\u17b7\u1793\u200b\u1798\u17b6\u1793\u200b\u179f\u17b7\u1791\u17d2\u1792\u17b7\u200b\u1780\u17c2\u200b\u179f\u1798\u17d2\u179a\u17bd\u179b\u200b\u178f\u1798\u17d2\u179b\u17c3\u200b\u1791\u17b7\u1789\u200b\u1791\u17c1\u17d4", + "Dynamic product can\\'t have their price updated.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u1794\u17d2\u179a\u17c2\u179b\u1794\u17d2\u179a\u17bd\u179b \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u178f\u1798\u17d2\u179b\u17c3\u179a\u1794\u179f\u17cb\u1796\u17bd\u1780\u1782\u17c1\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "The product price has been updated.": "\u178f\u1798\u17d2\u179b\u17c3\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "The editable price feature is disabled.": "\u1798\u17bb\u1781\u1784\u17b6\u179a\u178f\u1798\u17d2\u179b\u17c3\u178a\u17c2\u179b\u17a2\u17b6\u1785\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u17b6\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791\u17d4", + "You\\'re not allowed to edit the order settings.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1791\u17c1\u17d4", + "Unable to change the price mode. This feature has been disabled.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a mode \u178f\u1798\u17d2\u179b\u17c3\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u1798\u17bb\u1781\u1784\u17b6\u179a\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791\u17d4", + "Enable WholeSale Price": "\u1794\u17be\u1780\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u178f\u1798\u17d2\u179b\u17c3\u179b\u1780\u17cb\u178a\u17bb\u17c6", + "Would you like to switch to wholesale price ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u17d2\u178f\u17bc\u179a\u1791\u17c5\u179b\u1780\u17cb\u178a\u17bb\u17c6\u1791\u17c1?", + "Enable Normal Price": "\u1794\u17be\u1780\u178f\u1798\u17d2\u179b\u17c3\u1792\u1798\u17d2\u1798\u178f\u17b6", + "Would you like to switch to normal price ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u17d2\u178f\u17bc\u179a\u1791\u17c5\u178f\u1798\u17d2\u179b\u17c3\u1792\u1798\u17d2\u1798\u178f\u17b6\u1791\u17c1?", + "Search for products.": "\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Toggle merging similar products.": "\u1794\u17b7\u1791\/\u1794\u17be\u1780\u1780\u17b6\u179a\u1794\u1789\u17d2\u1785\u17bc\u179b\u1782\u17d2\u1793\u17b6\u1793\u17bc\u179c\u1795\u179b\u17b7\u178f\u1795\u179b\u179f\u17d2\u179a\u178a\u17c0\u1784\u1782\u17d2\u1793\u17b6\u17d4", + "Toggle auto focus.": "\u1794\u17b7\u1791\/\u1794\u17be\u1780\u200b\u1780\u17b6\u179a\u200b\u1795\u17d2\u178a\u17c4\u178f\u200b\u179f\u17d2\u179c\u17d0\u1799\u200b\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u17d4", + "Looks like there is either no products and no categories. How about creating those first to get started ?": "\u1798\u17be\u179b\u1791\u17c5\u17a0\u17b6\u1780\u17cb\u178a\u17bc\u1785\u1787\u17b6\u1782\u17d2\u1798\u17b6\u1793\u1795\u179b\u17b7\u178f\u1795\u179b \u1793\u17b7\u1784\u1782\u17d2\u1798\u17b6\u1793\u1794\u17d2\u179a\u1797\u17c1\u1791\u17d4 \u178f\u17be\u1792\u17d2\u179c\u17be\u178a\u17bc\u1785\u1798\u17d2\u178f\u17c1\u1785\u17a2\u17c6\u1796\u17b8\u1780\u17b6\u179a\u1794\u1784\u17d2\u1780\u17be\u178f\u179c\u17b6\u178a\u17c6\u1794\u17bc\u1784\u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798?", + "Create Categories": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1794\u17d2\u179a\u1797\u17c1\u1791", + "Current Balance": "\u178f\u17bb\u179b\u17d2\u1799\u1797\u17b6\u1796\u200b\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793", + "Full Payment": "\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1796\u17c1\u1789\u179b\u17c1\u1789", + "The customer account can only be used once per order. Consider deleting the previously used payment.": "\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u17a2\u17b6\u1785\u1794\u17d2\u179a\u17be\u1794\u17b6\u1793\u178f\u17c2\u1798\u17d2\u178f\u1784\u1782\u178f\u17cb\u1780\u17d2\u1793\u17bb\u1784\u1798\u17bd\u1799\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u17d4 \u1796\u17b7\u1785\u17b6\u179a\u178e\u17b6\u179b\u17bb\u1794\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u1796\u17b8\u1798\u17bb\u1793\u17d4", + "Not enough funds to add {amount} as a payment. Available balance {balance}.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1790\u179c\u17b7\u1780\u17b6\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u17b6\u1793\u17cb\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u1793\u17d2\u1790\u17c2\u1798\u1791\u17c1 {amount}\u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u178a\u17be\u1798\u17d2\u1794\u17b8\u1791\u17bc\u1791\u17b6\u178f\u17cb \u179f\u1798\u178f\u17bb\u179b\u17d2\u1799\u178a\u17c2\u179b\u1798\u17b6\u1793\u1782\u17ba{balance}.", + "Confirm Full Payment": "\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1796\u17c1\u1789\u179b\u17c1\u1789", + "You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?": "\u17a2\u17d2\u1793\u1780\u17a0\u17c0\u1794\u1793\u17b9\u1784\u1794\u17d2\u179a\u17be {amount} \u1796\u17b8\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17be\u1798\u17d2\u1794\u17b8\u1792\u17d2\u179c\u17be\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u17d4 \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1793\u17d2\u178f\u1791\u17c1?", + "A full payment will be made using {paymentType} for {total}": "\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1796\u17c1\u1789\u179b\u17c1\u1789\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u17a1\u17be\u1784\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be {paymentType} \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb {total}", + "You need to provide some products before proceeding.": "\u17a2\u17d2\u1793\u1780\u178f\u17d2\u179a\u17bc\u179c\u1795\u17d2\u178f\u179b\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u1798\u17bd\u1799\u1785\u17c6\u1793\u17bd\u1793\u1798\u17bb\u1793\u1796\u17c1\u179b\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u17d4", + "Unable to add the product, there is not enough stock. Remaining %s": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u1790\u17c2\u1798\u1795\u179b\u17b7\u178f\u1795\u179b\u1794\u17b6\u1793\u1791\u17c1 \u1798\u17b7\u1793\u1798\u17b6\u1793\u179f\u17d2\u178f\u17bb\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u17b6\u1793\u17cb\u1791\u17c1\u17d4 \u1793\u17c5\u179f\u179b\u17cb %s", + "An Error Has Occured": "\u1780\u17c6\u17a0\u17bb\u179f\u1798\u17bd\u1799\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784", + "An unexpected error has occured while loading the form. Please check the log or contact the support.": "\u1780\u17c6\u17a0\u17bb\u179f\u178a\u17c2\u179b\u1798\u17b7\u1793\u1793\u17b9\u1780\u179f\u17d2\u1798\u17b6\u1793\u178a\u179b\u17cb\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784 \u1781\u178e\u17c8\u1796\u17c1\u179b\u1780\u17c6\u1796\u17bb\u1784\u1795\u17d2\u1791\u17bb\u1780\u1791\u1798\u17d2\u179a\u1784\u17cb\u17d4 \u179f\u17bc\u1798\u1796\u17b7\u1793\u17b7\u178f\u17d2\u1799\u1798\u17be\u179b\u1780\u17c6\u178e\u178f\u17cb\u17a0\u17c1\u178f\u17bb \u17ac\u1791\u17b6\u1780\u17cb\u1791\u1784\u1795\u17d2\u1793\u17c2\u1780\u1787\u17c6\u1793\u17bd\u1799\u17d4", + "Add Images": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u179a\u17bc\u1794\u1797\u17b6\u1796", + "Remove Image": "\u179b\u17bb\u1794\u179a\u17bc\u1794\u1797\u17b6\u1796", + "New Group": "\u1780\u17d2\u179a\u17bb\u1798\u1790\u17d2\u1798\u17b8", + "Available Quantity": "\u1794\u179a\u17b7\u1798\u17b6\u178e\u178a\u17c2\u179b\u17a2\u17b6\u1785\u1794\u17d2\u179a\u17be\u1794\u17b6\u1793", + "We were not able to load the units. Make sure there are units attached on the unit group selected.": "\u1799\u17be\u1784\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1791\u17b6\u1789\u1799\u1780\u17af\u1780\u178f\u17b6\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u17b6\u1780\u178a\u1790\u17b6\u1798\u17b6\u1793\u17af\u1780\u178f\u17b6\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1793\u17c5\u179b\u17be\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17d4", + "Would you like to delete this group ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179b\u17bb\u1794\u1780\u17d2\u179a\u17bb\u1798\u1793\u17c1\u17c7\u1791\u17c1?", + "Your Attention Is Required": "\u179f\u17bc\u1798\u1798\u17c1\u178f\u17d2\u178f\u17b6\u1799\u1780\u1785\u17b7\u178f\u17d2\u178f\u1791\u17bb\u1780\u178a\u17b6\u1780\u17cb", + "The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?": "\u17af\u1780\u178f\u17b6\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u17a0\u17c0\u1794\u1793\u17b9\u1784\u179b\u17bb\u1794\u1798\u17b6\u1793\u17af\u1780\u179f\u17b6\u179a\u1799\u17c4\u1784\u179b\u17be\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799 \u17a0\u17be\u1799\u179c\u17b6\u17a2\u17b6\u1785\u1793\u17b9\u1784\u1791\u17b7\u1789\u179f\u17d2\u178f\u17bb\u1780\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d4 \u1780\u17b6\u179a\u179b\u17bb\u1794\u17af\u1780\u179f\u17b6\u179a\u1799\u17c4\u1784\u1793\u17c4\u17c7\u1793\u17b9\u1784\u179b\u17bb\u1794\u179f\u17d2\u178f\u17bb\u1780\u178a\u17c2\u179b\u1794\u17b6\u1793\u1791\u17b7\u1789\u1785\u17c1\u1789\u17d4 \u178f\u17be\u17a2\u17d2\u1793\u1780\u1793\u17b9\u1784\u1794\u1793\u17d2\u178f\u1791\u17c1?", + "Please select at least one unit group before you proceed.": "\u179f\u17bc\u1798\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1780\u17d2\u179a\u17bb\u1798\u17af\u1780\u178f\u17b6\u1799\u17c9\u17b6\u1784\u17a0\u17c4\u1785\u178e\u17b6\u179f\u17cb\u1798\u17bd\u1799 \u1798\u17bb\u1793\u1796\u17c1\u179b\u17a2\u17d2\u1793\u1780\u1794\u1793\u17d2\u178f\u17d4", + "There shoulnd\\'t be more option than there are units.": "\u179c\u17b6\u1798\u17b7\u1793\u1782\u17bd\u179a\u1798\u17b6\u1793\u1787\u1798\u17d2\u179a\u17be\u179f\u1785\u17d2\u179a\u17be\u1793\u1787\u17b6\u1784\u1798\u17b6\u1793\u17af\u1780\u178f\u17b6\u1791\u17c1\u17d4", + "Unable to proceed, more than one product is set as featured": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 \u1795\u179b\u17b7\u178f\u1795\u179b\u1785\u17d2\u179a\u17be\u1793\u1787\u17b6\u1784\u1798\u17bd\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1787\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b\u1796\u17b7\u179f\u17c1\u179f", + "Either Selling or Purchase unit isn\\'t defined. Unable to proceed.": "\u1791\u17b6\u17c6\u1784\u1795\u17d2\u1793\u17c2\u1780\u179b\u1780\u17cb \u17ac\u1791\u17b7\u1789\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1791\u17c1\u17d4 \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Unable to proceed as one of the unit group field is invalid": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u178f\u200b\u1794\u17b6\u1793\u200b\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u200b\u1794\u17d2\u179a\u17a2\u1794\u17cb\u1780\u17d2\u179a\u17bb\u1798\u200b\u1798\u17bd\u1799\u200b\u1780\u17d2\u1793\u17bb\u1784\u200b\u1785\u17c6\u178e\u17c4\u1798\u200b\u1780\u17d2\u179a\u17bb\u1798\u200b\u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Would you like to delete this variation ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179b\u17bb\u1794\u1794\u17c6\u179a\u17c2\u1794\u17c6\u179a\u17bd\u179b\u1793\u17c1\u17c7\u1791\u17c1?", + "Details": "\u179b\u1798\u17d2\u17a2\u17b7\u178f", + "An error has occured": "\u1780\u17c6\u17a0\u17bb\u179f\u1798\u17bd\u1799\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784", + "Select the procured unit first before selecting the conversion unit.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17af\u1780\u178f\u17b6\u178a\u17c2\u179b\u1794\u17b6\u1793\u1791\u17b7\u1789\u1787\u17b6\u1798\u17bb\u1793\u179f\u17b7\u1793 \u1798\u17bb\u1793\u1793\u17b9\u1784\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17af\u1780\u178f\u17b6\u1794\u17c6\u1794\u17d2\u179b\u17c2\u1784\u17d4", + "Learn More": "\u179f\u17d2\u179c\u17c2\u1784\u200b\u1799\u179b\u17cb\u200b\u1794\u1793\u17d2\u1790\u17c2\u1798", + "Convert to unit": "\u1794\u1798\u17d2\u179b\u17c2\u1784\u17af\u1780\u178f\u17b6", + "An unexpected error has occured": "\u1780\u17c6\u17a0\u17bb\u179f\u178a\u17c2\u179b\u1798\u17b7\u1793\u1794\u17b6\u1793\u179a\u17c6\u1796\u17b9\u1784\u1791\u17bb\u1780\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784", + "No result match your query.": "\u1782\u17d2\u1798\u17b6\u1793\u179b\u1791\u17d2\u1792\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1793\u17b9\u1784\u1780\u17b6\u179a\u1785\u1784\u17cb\u1794\u17b6\u1793\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1791\u17c1\u17d4", + "Unable to add product which doesn\\'t unit quantities defined.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u1790\u17c2\u1798\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1798\u17b7\u1793\u1780\u17c6\u178e\u178f\u17cb\u1794\u179a\u17b7\u1798\u17b6\u178e\u17af\u1780\u178f\u17b6\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Unable to proceed, no product were provided.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 \u1782\u17d2\u1798\u17b6\u1793\u1795\u179b\u17b7\u178f\u1795\u179b\u178e\u17b6\u1798\u17bd\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1787\u17bc\u1793\u1791\u17c1\u17d4", + "Unable to proceed, one or more product has incorrect values.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 \u1796\u17d2\u179a\u17c4\u17c7\u1795\u179b\u17b7\u178f\u1795\u179b\u1798\u17bd\u1799 \u17ac\u1785\u17d2\u179a\u17be\u1793\u1798\u17b6\u1793\u178f\u1798\u17d2\u179b\u17c3\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Unable to proceed, the procurement form is not valid.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 \u1791\u1798\u17d2\u179a\u1784\u17cb\u1794\u17c2\u1794\u1794\u1791\u1791\u17b7\u1789\u1785\u17bc\u179b\u1798\u17b7\u1793\u1798\u17b6\u1793\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796\u1791\u17c1\u17d4", + "Unable to submit, no valid submit URL were provided.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u178a\u17b6\u1780\u17cb\u200b\u1794\u1789\u17d2\u1787\u17bc\u1793\u200b\u1794\u17b6\u1793\u200b\u1791\u17c1 \u1782\u17d2\u1798\u17b6\u1793 URL \u178a\u17b6\u1780\u17cb\u200b\u179f\u17d2\u1793\u17be\u200b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u200b \u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1795\u17d2\u178f\u179b\u17cb\u200b\u17b1\u17d2\u1799\u200b\u1791\u17c1\u17d4", + "{product}: Purchase Unit": "{product}: \u1785\u17c6\u1793\u17bd\u1793\u1791\u17b7\u1789\u1785\u17bc\u179b", + "The product will be procured on that unit.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1791\u17b7\u1789\u1793\u17c5\u179b\u17be\u17af\u1780\u178f\u17b6\u1793\u17c4\u17c7\u17d4", + "Unkown Unit": "\u17af\u1780\u178f\u17b6\u1798\u17b7\u1793\u179f\u17d2\u1782\u17b6\u179b\u17cb", + "Choose Tax": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1796\u1793\u17d2\u1792", + "The tax will be assigned to the procured product.": "\u1796\u1793\u17d2\u1792\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1791\u17c5\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1794\u17b6\u1793\u1791\u17b7\u1789\u17d4", + "No title is provided": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u17b1\u17d2\u1799\u1791\u17c1\u17d4", + "Show Details": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u179b\u1798\u17d2\u17a2\u17b7\u178f", + "Hide Details": "\u179b\u17b6\u1780\u17cb\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u179b\u1798\u17d2\u17a2\u17b7\u178f", + "Important Notes": "\u1780\u17c6\u178e\u178f\u17cb\u1785\u17c6\u178e\u17b6\u17c6\u179f\u17c6\u1781\u17b6\u1793\u17cb\u17d7", + "Stock Management Products.": "\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u179f\u17d2\u178f\u17bb\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Doesn\\'t work with Grouped Product.": "\u1798\u17b7\u1793\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1787\u17b6\u1798\u17bd\u1799\u1795\u179b\u17b7\u178f\u1795\u179b\u1787\u17b6\u1780\u17d2\u179a\u17bb\u1798\u1791\u17c1\u17d4", + "SKU, Barcode, Name": "SKU, \u1794\u17b6\u1780\u17bc\u178a, \u1788\u17d2\u1798\u17c4\u17c7", + "Convert": "\u1794\u1798\u17d2\u179b\u17c2\u1784", + "Search products...": "\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1795\u179b\u17b7\u178f\u1795\u179b...", + "Set Sale Price": "\u1780\u17c6\u178e\u178f\u17cb\u178f\u1798\u17d2\u179b\u17c3\u179b\u1780\u17cb", + "Remove": "\u178a\u1780\u1785\u17c1\u1789", + "No product are added to this group.": "\u1782\u17d2\u1798\u17b6\u1793\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c5\u1780\u17d2\u1793\u17bb\u1784\u1780\u17d2\u179a\u17bb\u1798\u1793\u17c1\u17c7\u1791\u17c1\u17d4", + "Delete Sub item": "\u179b\u17bb\u1794\u1792\u17b6\u178f\u17bb\u179a\u1784", + "Would you like to delete this sub item?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179b\u17bb\u1794\u1792\u17b6\u178f\u17bb\u179a\u1784\u1793\u17c1\u17c7\u1791\u17c1?", + "Unable to add a grouped product.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u1790\u17c2\u1798\u200b\u1795\u179b\u17b7\u178f\u1795\u179b\u200b\u178a\u17c2\u179b\u200b\u1794\u17b6\u1793\u200b\u178a\u17b6\u1780\u17cb\u200b\u1787\u17b6\u200b\u1780\u17d2\u179a\u17bb\u1798\u17d4", + "Choose The Unit": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17af\u1780\u178f\u17b6", + "An unexpected error occurred": "\u1780\u17c6\u17a0\u17bb\u179f\u178a\u17c2\u179b\u1798\u17b7\u1793\u1794\u17b6\u1793\u179a\u17c6\u1796\u17b9\u1784\u1791\u17bb\u1780\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784", + "Ok": "\u1799\u179b\u17cb\u1796\u17d2\u179a\u1798", + "Looks like no valid products matched the searched term.": "\u1798\u17be\u179b\u1791\u17c5\u17a0\u17b6\u1780\u17cb\u178a\u17bc\u1785\u1787\u17b6\u1798\u17b7\u1793\u1798\u17b6\u1793\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1793\u17b9\u1784\u1796\u17b6\u1780\u17d2\u1799\u178a\u17c2\u179b\u1794\u17b6\u1793\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1793\u17c4\u17c7\u1791\u17c1\u17d4", + "The product already exists on the table.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u1798\u17b6\u1793\u1793\u17c5\u1780\u17d2\u1793\u17bb\u1784\u1794\u1789\u17d2\u1787\u17b8\u179a\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d4", + "This product doesn't have any stock to adjust.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u1793\u17c1\u17c7\u1798\u17b7\u1793\u1798\u17b6\u1793\u179f\u17d2\u178f\u17bb\u1780\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1791\u17c1\u17d4", + "The specified quantity exceed the available quantity.": "\u1794\u179a\u17b7\u1798\u17b6\u178e\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u179b\u17be\u179f\u1796\u17b8\u1794\u179a\u17b7\u1798\u17b6\u178e\u178a\u17c2\u179b\u1798\u17b6\u1793\u17d4", + "Unable to proceed as the table is empty.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u178f\u17b6\u179a\u17b6\u1784\u1791\u1791\u17c1\u17d4", + "The stock adjustment is about to be made. Would you like to confirm ?": "\u1780\u17b6\u179a\u200b\u1780\u17c2\u200b\u178f\u1798\u17d2\u179a\u17bc\u179c\u200b\u179f\u17d2\u178f\u17bb\u1780\u200b\u1793\u17b9\u1784\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1792\u17d2\u179c\u17be\u200b\u17a1\u17be\u1784 \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u1791\u17c1?", + "More Details": "\u179b\u1798\u17d2\u17a2\u17b7\u178f\u1794\u1793\u17d2\u1790\u17c2\u1798", + "Useful to describe better what are the reasons that leaded to this adjustment.": "\u1780\u17b6\u179a\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u178a\u17c2\u179b\u1787\u17bd\u1799\u17b1\u17d2\u1799\u1780\u17b6\u1793\u17cb\u178f\u17c2\u1784\u17b6\u1799\u1799\u179b\u17cb\u1785\u17d2\u1794\u17b6\u179f\u17cb\u17a2\u17c6\u1796\u17b8\u1798\u17bc\u179b\u17a0\u17c1\u178f\u17bb\u178a\u17c2\u179b\u1793\u17b6\u17c6\u1791\u17c5\u178a\u179b\u17cb\u1780\u17b6\u179a\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u1793\u17c1\u17c7\u17d4", + "The reason has been updated.": "\u17a0\u17c1\u178f\u17bb\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u17d4", + "Select Unit": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17af\u1780\u178f\u17b6", + "Select the unit that you want to adjust the stock with.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17af\u1780\u178f\u17b6\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u179f\u17d2\u178f\u17bb\u1780\u1787\u17b6\u1798\u17bd\u1799\u17d4", + "A similar product with the same unit already exists.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u179f\u17d2\u179a\u178a\u17c0\u1784\u1782\u17d2\u1793\u17b6\u178a\u17c2\u179b\u1798\u17b6\u1793\u17af\u1780\u178f\u17b6\u178a\u17bc\u1785\u1782\u17d2\u1793\u17b6\u1798\u17b6\u1793\u179a\u17bd\u1785\u17a0\u17be\u1799\u17d4", + "Select Procurement": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b", + "Select the procurement that you want to adjust the stock with.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u179f\u17d2\u178f\u17bb\u1780\u1787\u17b6\u1798\u17bd\u1799\u17d4", + "Select Action": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796", + "Select the action that you want to perform on the stock.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1793\u17c5\u179b\u17be\u179f\u17d2\u178f\u17bb\u1780\u17d4", + "Would you like to remove this product from the table ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179b\u17bb\u1794\u1795\u179b\u17b7\u178f\u1795\u179b\u1793\u17c1\u17c7\u1785\u17c1\u1789\u1796\u17b8\u1794\u1789\u17d2\u1787\u17b8\u179a\u1791\u17c1?", + "Would you like to remove the selected products from the table ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179b\u17bb\u1794\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1785\u17c1\u1789\u1796\u17b8\u1794\u1789\u17d2\u1787\u17b8\u179a\u1791\u17c1?", + "Search": "\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780", + "Search and add some products": "\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780 \u1793\u17b7\u1784\u1794\u1793\u17d2\u1790\u17c2\u1798\u1795\u179b\u17b7\u178f\u1795\u179b\u1798\u17bd\u1799\u1785\u17c6\u1793\u17bd\u1793", + "Unit:": "\u17af\u1780\u178f\u17b6:", + "Operation:": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a:", + "Procurement:": "\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b:", + "Reason:": "\u1798\u17bc\u179b\u17a0\u17c1\u178f\u17bb:", + "Provided": "\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb", + "Not Provided": "\u1798\u17b7\u1793\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb", + "Remove Selected": "\u179b\u17bb\u1794\u1792\u17b6\u178f\u17bb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f", + "Proceed": "\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a", + "About Token": "\u17a2\u17c6\u1796\u17b8 Token", + "Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.": "Token \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u178a\u17be\u1798\u17d2\u1794\u17b8\u1795\u17d2\u178f\u179b\u17cb\u1793\u17bc\u179c\u1780\u17b6\u179a\u1785\u17bc\u179b\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1794\u17d2\u179a\u1780\u1794\u178a\u17c4\u1799\u179f\u17bb\u179c\u178f\u17d2\u1790\u17b7\u1797\u17b6\u1796\u1791\u17c5\u1780\u17b6\u1793\u17cb\u1792\u1793\u1792\u17b6\u1793 NexoPOS \u178a\u17c4\u1799\u1798\u17b7\u1793\u1785\u17b6\u17c6\u1794\u17b6\u1785\u17cb\u1785\u17c2\u1780\u179a\u17c6\u179b\u17c2\u1780\u1788\u17d2\u1798\u17c4\u17c7\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb \u1793\u17b7\u1784\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1795\u17d2\u1791\u17b6\u179b\u17cb\u1781\u17d2\u179b\u17bd\u1793\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4\n \u1793\u17c5\u1796\u17c1\u179b\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f \u1796\u17bd\u1780\u179c\u17b6\u1793\u17b9\u1784\u1798\u17b7\u1793\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb\u179a\u17a0\u17bc\u178f\u178a\u179b\u17cb\u17a2\u17d2\u1793\u1780\u179b\u17bb\u1794\u1785\u17c4\u179b\u179c\u17b6\u1799\u17c9\u17b6\u1784\u1787\u17b6\u1780\u17cb\u179b\u17b6\u1780\u17cb\u17d4", + "Save Token": "\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780 Token", + "Generated Tokens": "\u1794\u1784\u17d2\u1780\u17be\u178f Tokens", + "Created": "\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f", + "Last Use": "\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1785\u17bb\u1784\u1780\u17d2\u179a\u17c4\u1799", + "Never": "\u1798\u17b7\u1793\u178a\u17c2\u179b", + "Expires": "\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb", + "Revoke": "\u178a\u1780\u17a0\u17bc\u178f", + "You haven\\'t yet generated any token for your account. Create one to get started.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u1791\u17b6\u1793\u17cb\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u1793\u17b7\u1798\u17b7\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e\u17b6\u1798\u17bd\u1799\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1782\u178e\u1793\u17b8\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4 \u179f\u17bc\u1798\u1794\u1784\u17d2\u1780\u17be\u178f\u1798\u17bd\u1799\u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798\u17d4", + "Token Name": "\u1788\u17d2\u1798\u17c4\u17c7 Token", + "This will be used to identifier the token.": "\u179c\u17b6\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17d2\u179a\u17be\u178a\u17be\u1798\u17d2\u1794\u17b8\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e Token", + "Unable to proceed, the form is not valid.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1791\u1798\u17d2\u179a\u1784\u17cb\u1794\u17c2\u1794\u1794\u1791\u200b\u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?": "\u17a2\u17d2\u1793\u1780\u200b\u17a0\u17c0\u1794\u200b\u1793\u17b9\u1784\u200b\u179b\u17bb\u1794\u200b\u179f\u1789\u17d2\u1789\u17b6\u200b\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u200b\u178a\u17c2\u179b\u200b\u17a2\u17b6\u1785\u200b\u1793\u17b9\u1784\u200b\u1780\u17c6\u1796\u17bb\u1784\u200b\u1794\u17d2\u179a\u17be\u200b\u178a\u17c4\u1799\u200b\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u200b\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c5\u17d4 \u1780\u17b6\u179a\u179b\u17bb\u1794\u1793\u17b9\u1784\u179a\u17b6\u179a\u17b6\u17c6\u1784\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1793\u17c4\u17c7\u1796\u17b8\u1780\u17b6\u179a\u1785\u17bc\u179b\u1794\u17d2\u179a\u17be API \u17d4 \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1793\u17d2\u178f\u1791\u17c1?", + "Load": "\u1791\u17b6\u1789\u1799\u1780", + "Date Range : {date1} - {date2}": "\u1785\u1793\u17d2\u179b\u17c4\u17c7\u1796\u17c1\u179b : {date1} - {date2}", + "Document : Best Products": "\u17af\u1780\u179f\u17b6\u179a : \u1795\u179b\u17b7\u178f\u1795\u179b\u179b\u17d2\u17a2\u1794\u17c6\u1795\u17bb\u178f", + "By : {user}": "\u178a\u17c4\u1799 : {user}", + "Progress": "\u179c\u178c\u17d2\u178d\u1793\u1797\u17b6\u1796", + "No results to show.": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u179b\u1791\u17d2\u1792\u1795\u179b\u1794\u1784\u17d2\u17a0\u17b6\u1789\u17d4", + "Start by choosing a range and loading the report.": "\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798\u178a\u17c4\u1799\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1785\u1793\u17d2\u179b\u17c4\u17c7\u1798\u17bd\u1799 \u1793\u17b7\u1784\u1798\u17be\u179b\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u17d4", + "Sort Results": "\u178f\u1798\u17d2\u179a\u17c0\u1794\u179b\u1791\u17d2\u1792\u1795\u179b", + "Using Quantity Ascending": "\u178f\u1798\u17d2\u179a\u17c0\u1794\u1794\u179a\u17b7\u1798\u17b6\u178e\u178f\u17b6\u1798\u179b\u17c6\u178a\u17b6\u1794\u17cb", + "Using Quantity Descending": "\u178f\u1798\u17d2\u179a\u17c0\u1794\u1794\u179a\u17b7\u1798\u17b6\u178e\u1794\u1789\u17d2\u1787\u17d2\u179a\u17b6\u179f", + "Using Sales Ascending": "\u178f\u1798\u17d2\u179a\u17c0\u1794\u1780\u17b6\u179a\u179b\u1780\u17cb\u178f\u17b6\u1798\u179b\u17c6\u178a\u17b6\u1794\u17cb", + "Using Sales Descending": "\u178f\u1798\u17d2\u179a\u17c0\u1794\u1780\u17b6\u179a\u179b\u1780\u17cb\u1794\u1789\u17d2\u1787\u17d2\u179a\u17b6\u179f", + "Using Name Ascending": "\u178f\u1798\u17d2\u179a\u17c0\u1794\u1788\u17d2\u1798\u17c4\u17c7\u178f\u17b6\u1798\u179b\u17c6\u178a\u17b6\u1794\u17cb (\u1780-\u17a2)", + "Using Name Descending": "\u178f\u1798\u17d2\u179a\u17c0\u1794\u1788\u17d2\u1798\u17c4\u17c7\u1794\u1789\u17d2\u1787\u17d2\u179a\u17b6\u179f (\u17a2-\u1780)", + "Range : {date1} — {date2}": "\u1785\u1793\u17d2\u179b\u17c4\u17c7 : {date1} — {date2}", + "Document : Sale By Payment": "\u17af\u1780\u179f\u17b6\u179a : \u1780\u17b6\u179a\u179b\u1780\u17cb\u178f\u17b6\u1798\u1780\u17b6\u179a\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Search Customer...": "\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793...", + "Document : Customer Statement": "\u17af\u1780\u178f\u17b6 : \u17a2\u17c6\u1796\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Customer : {selectedCustomerName}": "\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793 : {selectedCustomerName}", + "Due Amount": "\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1798\u17b7\u1793\u1791\u17b6\u1793\u17cb\u1791\u17bc\u179a\u1791\u17b6\u178f\u17cb", + "An unexpected error occured": "\u1794\u1789\u17d2\u17a0\u17b6\u1798\u17b7\u1793\u1794\u17b6\u1793\u1796\u17d2\u179a\u17c0\u1784\u1791\u17bb\u1780 \u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784", + "Report Type": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd", + "All Categories": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb", + "All Units": "\u17af\u1780\u178f\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb", + "Date : {date}": "\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791 : {date}", + "Document : {reportTypeName}": "\u17af\u1780\u179f\u17b6\u179a : {reportTypeName}", + "Threshold": "\u1780\u1798\u17d2\u179a\u17b7\u178f\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178a\u17be\u1798", + "There is no product to display...": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1795\u179b\u17b7\u178f\u1795\u179b\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1791\u17c1...", + "Low Stock Report": "\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u179f\u17d2\u178f\u17bb\u1780\u178a\u17c2\u179b\u179f\u179b\u17cb\u178f\u17b7\u1785", + "Select Units": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17af\u1780\u178f\u17b6", + "An error has occured while loading the units.": "\u1780\u17c6\u17a0\u17bb\u179f\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u1781\u178e\u17c8\u1796\u17c1\u179b\u1780\u17c6\u1796\u17bb\u1784\u1795\u17d2\u1791\u17bb\u1780\u17af\u1780\u178f\u17b6\u17d4", + "An error has occured while loading the categories.": "\u1780\u17c6\u17a0\u17bb\u179f\u1798\u17bd\u1799\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u1781\u178e\u17c8\u1796\u17c1\u179b\u1780\u17c6\u1796\u17bb\u1784\u1795\u17d2\u1791\u17bb\u1780\u1794\u17d2\u179a\u1797\u17c1\u1791\u17d4", + "Document : Payment Type": "\u17af\u1780\u179f\u17b6\u179a :\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Unable to proceed. Select a correct time range.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1785\u1793\u17d2\u179b\u17c4\u17c7\u1796\u17c1\u179b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Unable to proceed. The current time range is not valid.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1785\u1793\u17d2\u179b\u17c4\u17c7\u1796\u17c1\u179b\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Document : Profit Report": "\u17af\u1780\u179f\u17b6\u179a : \u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u1785\u17c6\u1793\u17c1\u1789", + "Profit": "\u1782\u178e\u1793\u17b8", + "Filter by Category": "\u1785\u17d2\u179a\u17c4\u17c7\u1791\u17b7\u1793\u17d2\u1793\u17d0\u1799\u178f\u17b6\u1798\u1794\u17d2\u179a\u1797\u17c1\u1791", + "Filter by Units": "\u1785\u17d2\u179a\u17c4\u17c7\u1791\u17b7\u1793\u17d2\u1793\u17d0\u1799\u178f\u17b6\u1798\u17af\u1780\u178f\u17b6", + "An error has occured while loading the categories": "\u1780\u17c6\u17a0\u17bb\u179f\u1798\u17bd\u1799\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u1781\u178e\u17c8\u1796\u17c1\u179b\u1780\u17c6\u1796\u17bb\u1784\u1795\u17d2\u1791\u17bb\u1780\u1794\u17d2\u179a\u1797\u17c1\u1791", + "An error has occured while loading the units": "\u1780\u17c6\u17a0\u17bb\u179f\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u1781\u178e\u17c8\u1796\u17c1\u179b\u1780\u17c6\u1796\u17bb\u1784\u1791\u17b6\u1789\u1799\u1780\u17af\u1780\u178f\u17b6", + "By Type": "\u178f\u17b6\u1798\u1794\u17d2\u179a\u1797\u17c1\u1791", + "By User": "\u178a\u17c4\u1799\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "All Users": "\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb", + "By Category": "\u178f\u17b6\u1798\u1794\u17d2\u179a\u1797\u17c1\u1791", + "All Category": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb", + "Document : Sale Report": "\u17af\u1780\u179f\u17b6\u179a : \u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u179b\u1780\u17cb", + "Sales Discounts": "\u1780\u17b6\u179a\u179b\u1780\u17cb\u1794\u1789\u17d2\u1785\u17bb\u17c7\u178f\u1798\u17d2\u179b\u17c3", + "Sales Taxes": "\u1796\u1793\u17d2\u1792\u179b\u17be\u1780\u17b6\u179a\u179b\u1780\u17cb", + "Product Taxes": "\u1796\u1793\u17d2\u1792\u1795\u179b\u17b7\u178f\u1795\u179b", + "Discounts": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1785\u17bb\u17c7\u178f\u1798\u17d2\u179b\u17c3", + "Categories Detailed": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u179b\u1798\u17d2\u17a2\u17b7\u178f", + "Categories Summary": "\u179f\u1784\u17d2\u1781\u17c1\u1794\u17a2\u17c6\u1796\u17b8\u1794\u17d2\u179a\u1797\u17c1\u1791", + "Allow you to choose the report type.": "\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u17a2\u17d2\u1793\u1780\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1794\u17d2\u179a\u1797\u17c1\u1791\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u17d4", + "Filter User": "\u1785\u17d2\u179a\u17c4\u17c7\u1791\u17b7\u1793\u17d2\u1793\u17d0\u1799\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Filter By Category": "\u1785\u17d2\u179a\u17c4\u17c7\u1791\u17b7\u1793\u17d2\u1793\u17d0\u1799\u178f\u17b6\u1798\u1794\u17d2\u179a\u1797\u17c1\u1791", + "Allow you to choose the category.": "\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u17b1\u17d2\u1799\u17a2\u17d2\u1793\u1780\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1794\u17d2\u179a\u1797\u17c1\u1791\u17d4", + "No user was found for proceeding the filtering.": "\u179a\u1780\u1798\u17b7\u1793\u1783\u17be\u1789\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1794\u1793\u17d2\u178f\u1780\u17b6\u179a\u1785\u17d2\u179a\u17c4\u17c7\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u17d4", + "No category was found for proceeding the filtering.": "\u179a\u1780\u1798\u17b7\u1793\u1783\u17be\u1789\u1794\u17d2\u179a\u1797\u17c1\u1791\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1794\u1793\u17d2\u178f\u1780\u17b6\u179a\u1785\u17d2\u179a\u17c4\u17c7\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u17d4", + "Document : Sold Stock Report": "\u17af\u1780\u179f\u17b6\u179a : \u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u179f\u17d2\u178f\u17bb\u1780\u178a\u17c2\u179b\u1794\u17b6\u1793\u179b\u1780\u17cb", + "Filter by Unit": "\u1785\u17d2\u179a\u17c4\u17c7\u1791\u17b7\u1793\u17d2\u1793\u17d0\u1799\u178f\u17b6\u1798\u17af\u1780\u178f\u17b6", + "Limit Results By Categories": "\u1780\u17c6\u178e\u178f\u17cb\u179b\u1791\u17d2\u1792\u1795\u179b\u178f\u17b6\u1798\u1794\u17d2\u179a\u1797\u17c1\u1791", + "Limit Results By Units": "\u1780\u17c6\u178e\u178f\u17cb\u179b\u1791\u17d2\u1792\u1795\u179b\u178a\u17c4\u1799\u17af\u1780\u178f\u17b6", + "Generate Report": "\u1794\u1784\u17d2\u1780\u17be\u178f\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd", + "Document : Combined Products History": "\u17af\u1780\u179f\u17b6\u179a : \u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u1795\u179b\u17b7\u178f\u1795\u179b\u179a\u17bd\u1798\u1794\u1789\u17d2\u1785\u17bc\u179b\u1782\u17d2\u1793\u17b6", + "Ini. Qty": "Qty \u178a\u17c6\u1794\u17bc\u1784", + "Added Quantity": "\u1794\u179a\u17b7\u1798\u17b6\u178e\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1793\u17d2\u1790\u17c2\u1798", + "Add. Qty": "Qty \u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1793\u17d2\u1790\u17c2\u1798", + "Sold Quantity": "\u1794\u179a\u17b7\u1798\u17b6\u178e\u178a\u17c2\u179b\u1794\u17b6\u1793\u179b\u1780\u17cb", + "Sold Qty": "Qty \u1794\u17b6\u1793\u179b\u1780\u17cb", + "Defective Quantity": "\u1794\u179a\u17b7\u1798\u17b6\u178e\u178a\u17c2\u179b\u1781\u17bc\u1785", + "Defec. Qty": "\u1794\u179a\u17b7\u1798\u17b6\u178e\u178a\u17c2\u179b\u1781\u17bc\u1785", + "Final Quantity": "\u1794\u179a\u17b7\u1798\u17b6\u178e\u1785\u17bb\u1784\u1780\u17d2\u179a\u17c4\u1799", + "Final Qty": "Qty \u1785\u17bb\u1784\u1780\u17d2\u179a\u17c4\u1799", + "No data available": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u1791\u17c1", + "Unable to load the report as the timezone is not set on the settings.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1791\u17b6\u1789\u1799\u1780\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u178f\u17c6\u1794\u1793\u17cb\u1796\u17c1\u179b\u179c\u17c1\u179b\u17b6\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1793\u17c5\u179b\u17be\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u17d4", + "Year": "\u1786\u17d2\u1793\u17b6\u17c6", + "Recompute": "\u1782\u178e\u1793\u17b6\u179f\u17b6\u1790\u17d2\u1798\u17b8", + "Document : Yearly Report": "\u17af\u1780\u179f\u17b6\u179a : \u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u1794\u17d2\u179a\u1785\u17b6\u17c6\u1786\u17d2\u1793\u17b6\u17c6", + "Sales": "\u1780\u17b6\u179a\u179b\u1780\u17cb", + "Expenses": "\u1785\u17c6\u178e\u17b6\u1799", + "Income": "\u1785\u17c6\u178e\u17bc\u179b", + "January": "\u1798\u1780\u179a\u17b6", + "Febuary": "\u1780\u17bb\u1798\u17d2\u1797\u17c8", + "March": "\u1798\u17b8\u1793\u17b6", + "April": "\u1798\u17c1\u179f\u17b6", + "May": "\u17a7\u179f\u1797\u17b6", + "June": "\u1798\u17b7\u1793\u1790\u17bb\u1793\u17b6", + "July": "\u1780\u1780\u17d2\u1780\u178a\u17b6", + "August": "\u179f\u17b8\u17a0\u17b6", + "September": "\u1780\u1789\u17d2\u1789\u17b6", + "October": "\u178f\u17bb\u179b\u17b6", + "November": "\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6", + "December": "\u1792\u17d2\u1793\u17bc", + "Would you like to proceed ?": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1793\u17d2\u178f\u1791\u17c1?", + "The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.": "\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u178e\u1793\u17b6\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1786\u17d2\u1793\u17b6\u17c6\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793 \u1780\u17b6\u179a\u1784\u17b6\u179a\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1789\u17d2\u1787\u17bc\u1793 \u17a0\u17be\u1799\u17a2\u17d2\u1793\u1780\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1787\u17bc\u1793\u178a\u17c6\u178e\u17b9\u1784\u1793\u17c5\u1796\u17c1\u179b\u178a\u17c2\u179b\u179c\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u1794\u17cb\u17d4", + "This form is not completely loaded.": "\u1791\u1798\u17d2\u179a\u1784\u17cb\u1794\u17c2\u1794\u1794\u1791\u1793\u17c1\u17c7\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1791\u17b6\u1789\u1799\u1780\u1791\u17b6\u17c6\u1784\u179f\u17d2\u179a\u17bb\u1784\u1791\u17c1\u17d4", + "No rules has been provided.": "\u1782\u17d2\u1798\u17b6\u1793\u1785\u17d2\u1794\u17b6\u1794\u17cb\u178e\u17b6\u1798\u17bd\u1799\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1787\u17bc\u1793\u1791\u17c1\u17d4", + "No valid run were provided.": "\u1782\u17d2\u1798\u17b6\u1793\u1780\u17b6\u179a\u179a\u178f\u17cb\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1787\u17bc\u1793\u1791\u17c1\u17d4", + "Unable to proceed, the form is invalid.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 \u1791\u1798\u17d2\u179a\u1784\u17cb\u1794\u17c2\u1794\u1794\u1791\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Unable to proceed, no valid submit URL is defined.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u178f\u200b\u1794\u17b6\u1793\u200b\u1791\u17c1 \u1782\u17d2\u1798\u17b6\u1793 URL \u178a\u17b6\u1780\u17cb\u200b\u179f\u17d2\u1793\u17be\u200b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u200b \u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1780\u17c6\u178e\u178f\u17cb\u17d4", + "No title Provided": "\u1798\u17b7\u1793\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u1791\u17c1", + "Add Rule": "\u1794\u1793\u17d2\u1790\u17c2\u1798\u179b\u1780\u17d2\u1781\u1781\u178e\u17d2\u178c", + "Warning": "\u1780\u17b6\u179a\u1796\u17d2\u179a\u1798\u17b6\u1793", + "Change Type": "\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u1794\u17d2\u179a\u1797\u17c1\u1791", + "Unable to edit this transaction": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17c1\u17c7\u1794\u17b6\u1793\u1791\u17c1", + "This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u1787\u17b6\u1798\u17bd\u1799\u1793\u17b9\u1784\u1794\u17d2\u179a\u1797\u17c1\u1791\u178a\u17c2\u179b\u179b\u17c2\u1784\u1798\u17b6\u1793\u1791\u17c0\u178f\u17a0\u17be\u1799\u17d4 \u1794\u17d2\u179a\u1797\u17c1\u1791\u1793\u17c1\u17c7\u179b\u17c2\u1784\u1798\u17b6\u1793\u1791\u17c0\u178f\u17a0\u17be\u1799 \u178a\u17c4\u1799\u179f\u17b6\u179a NexoPOS \u1798\u17b7\u1793\u17a2\u17b6\u1785\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u179f\u17c6\u178e\u17be\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "Save Transaction": "\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.": "\u1793\u17c5\u1796\u17c1\u179b\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u17a2\u1784\u17d2\u1782\u1797\u17b6\u1796 \u1785\u17c6\u1793\u17bd\u1793\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u17bb\u178e\u178a\u17c4\u1799\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u179f\u179a\u17bb\u1794\u178a\u17c2\u179b\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1791\u17c5\u1780\u17d2\u179a\u17bb\u1798\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17d4", + "Save Expense": "\u179a\u1780\u17d2\u179f\u17b6\u179a\u1791\u17bb\u1780\u1780\u17b6\u179a\u1785\u17c6\u178e\u17b6\u1799", + "The transaction is about to be saved. Would you like to confirm your action ?": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17c1\u17c7\u17a0\u17c0\u1794\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17d4 \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1791\u17c1?", + "No configuration were choosen. Unable to proceed.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u179a\u1785\u1793\u17b6\u179f\u1798\u17d2\u1796\u17d0\u1793\u17d2\u1792\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17d4", + "Conditions": "\u179b\u1780\u17d2\u1781\u1781\u178e\u17d2\u178c", + "Unable to load the transaction": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1791\u17b6\u1789\u1799\u1780\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1794\u17b6\u1793\u1791\u17c1", + "You cannot edit this transaction if NexoPOS cannot perform background requests.": "\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17c1\u17c7\u1794\u17b6\u1793\u1791\u17c1 \u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be NexoPOS \u1798\u17b7\u1793\u17a2\u17b6\u1785\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u179f\u17c6\u178e\u17be\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "By proceeding the current for and all your entries will be cleared. Would you like to proceed?": "\u178a\u17c4\u1799\u1794\u1793\u17d2\u178f\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793 \u1793\u17b7\u1784\u1792\u17b6\u178f\u17bb\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179f\u1798\u17d2\u17a2\u17b6\u178f\u17d4 \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1793\u17d2\u178f\u1791\u17c1?", + "MySQL is selected as database driver": "MySQL \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1787\u17b6 database driver", + "Please provide the credentials to ensure NexoPOS can connect to the database.": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e \u178a\u17be\u1798\u17d2\u1794\u17b8\u1792\u17b6\u1793\u17b6\u1790\u17b6 NexoPOS \u17a2\u17b6\u1785\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1791\u17c5\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u17d4", + "Sqlite is selected as database driver": "Sqlite \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1787\u17b6 as database driver", + "Make sure Sqlite module is available for PHP. Your database will be located on the database directory.": "\u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u17b6\u1780\u178a\u1790\u17b6\u1798\u17c9\u17bc\u178c\u17bb\u179b Sqlite \u1798\u17b6\u1793\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb PHP \u17d4 \u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1793\u17b9\u1784\u1798\u17b6\u1793\u1791\u17b8\u178f\u17b6\u17c6\u1784\u1793\u17c5\u179b\u17be\u1790\u178f\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u17d4", + "Checking database connectivity...": "\u1780\u17c6\u1796\u17bb\u1784\u1796\u17b7\u1793\u17b7\u178f\u17d2\u1799\u1798\u17be\u179b\u1780\u17b6\u179a\u178f\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799...", + "OKAY": "\u1799\u179b\u17cb\u1796\u17d2\u179a\u1798", + "Driver": "Driver", + "Set the database driver": "\u179f\u17bc\u1798\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f database driver", + "Hostname": "Hostname", + "Provide the database hostname": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb database hostname", + "Username required to connect to the database.": "Username \u1782\u17ba\u178f\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1785\u17b6\u17c6\u1794\u17b6\u1785\u17cb\u178a\u17be\u1798\u17d2\u1794\u17b8\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1791\u17c5\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u17d4", + "The username password required to connect.": "username \u1793\u17b7\u1784\u179b\u17c1\u1781\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb \u1782\u17ba\u178f\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1785\u17b6\u17c6\u1794\u17b6\u1785\u17cb\u178a\u17be\u1798\u17d2\u1794\u17b8\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17d4", + "Database Name": "\u1788\u17d2\u1798\u17c4\u17c7 Database", + "Provide the database name. Leave empty to use default file for SQLite Driver.": "\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u17d4 \u1791\u17bb\u1780\u1791\u1791\u17c1\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17d2\u179a\u17be\u17af\u1780\u179f\u17b6\u179a\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1794\u1789\u17d2\u1787\u17b6 SQLite \u17d4", + "Database Prefix": "\u1794\u17bb\u1796\u17d2\u179c\u1794\u1791 Database", + "Provide the database prefix.": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb\u1794\u17bb\u1796\u17d2\u179c\u1794\u1791 database.", + "Port": "Port", + "Provide the hostname port.": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb hostname port.", + "NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.": "NexoPOS<\/strong> \u17a5\u17a1\u17bc\u179c\u200b\u1793\u17c1\u17c7\u200b\u1782\u17ba\u200b\u17a2\u17b6\u1785\u200b\u178f\u1797\u17d2\u1787\u17b6\u1794\u17cb\u200b\u1791\u17c5\u200b\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u200b\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u200b\u17d4 \u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798\u178a\u17c4\u1799\u1794\u1784\u17d2\u1780\u17be\u178f\u1782\u178e\u1793\u17b8\u17a2\u17d2\u1793\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784 \u1793\u17b7\u1784\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c5\u1780\u17b6\u179a\u178a\u17c6\u17a1\u17be\u1784\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4 \u1793\u17c5\u1796\u17c1\u179b\u178a\u17c6\u17a1\u17be\u1784\u179a\u17bd\u1785 \u1791\u17c6\u1796\u17d0\u179a\u1793\u17c1\u17c7\u1793\u17b9\u1784\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1785\u17bc\u179b\u1794\u17d2\u179a\u17be\u1794\u17b6\u1793\u1791\u17c0\u178f\u1791\u17c1\u17d4", + "Install": "\u178a\u17c6\u17a1\u17be\u1784", + "Application": "\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8", + "That is the application name.": "\u1793\u17c4\u17c7\u1782\u17ba\u1787\u17b6\u1788\u17d2\u1798\u17c4\u17c7\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u17d4", + "Provide the administrator username.": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb username \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u17d2\u1793\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u17d4", + "Provide the administrator email.": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb\u17a2\u17ca\u17b8\u1798\u17c2\u179b\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u17d4", + "What should be the password required for authentication.": "\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u1782\u17bd\u179a\u1787\u17b6\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17b6\u179a\u1795\u17d2\u1791\u17c0\u1784\u1795\u17d2\u1791\u17b6\u178f\u17cb\u17d4", + "Should be the same as the password above.": "\u1782\u17bd\u179a\u178f\u17c2\u178a\u17bc\u1785\u1782\u17d2\u1793\u17b6\u1793\u17b9\u1784\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1781\u17b6\u1784\u179b\u17be\u17d4", + "Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.": "\u179f\u17bc\u1798\u17a2\u179a\u1782\u17bb\u178e\u1785\u17c6\u1796\u17c4\u17c7\u1780\u17b6\u179a\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb NexoPOS \u178a\u17be\u1798\u17d2\u1794\u17b8\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u17a0\u17b6\u1784\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4 \u1795\u17d2\u1791\u17b6\u17c6\u1784\u1787\u17c6\u1793\u17bd\u1799\u1780\u17b6\u179a\u178a\u17c6\u17a1\u17be\u1784\u1793\u17c1\u17c7\u1793\u17b9\u1784\u1787\u17bd\u1799\u17a2\u17d2\u1793\u1780\u17b1\u17d2\u1799\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a NexoPOS \u1780\u17d2\u1793\u17bb\u1784\u1796\u17c1\u179b\u1786\u17b6\u1794\u17cb\u17d7\u1793\u17c1\u17c7\u17d4", + "Choose your language to get started.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1797\u17b6\u179f\u17b6\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798\u17d4", + "Remaining Steps": "\u1787\u17c6\u17a0\u17b6\u1793\u178a\u17c2\u179b\u1793\u17c5\u179f\u179b\u17cb", + "Database Configuration": "\u1780\u17c6\u178e\u178f\u17cb\u179a\u1785\u1793\u17b6\u179f\u1798\u17d2\u1796\u17d0\u1793\u17d2\u1792\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799", + "Application Configuration": "\u1780\u17c6\u178e\u178f\u17cb\u179a\u1785\u1793\u17b6\u179f\u1798\u17d2\u1796\u17d0\u1793\u17d2\u1792\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8", + "Language Selection": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1797\u17b6\u179f\u17b6", + "Select what will be the default language of NexoPOS.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1797\u17b6\u179f\u17b6\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8 NexoPOS", + "In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.": "\u178a\u17be\u1798\u17d2\u1794\u17b8\u179a\u1780\u17d2\u179f\u17b6 NexoPOS \u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u178a\u17c4\u1799\u179a\u179b\u17bc\u1793\u1787\u17b6\u1798\u17bd\u1799\u1793\u17b9\u1784\u1780\u17b6\u179a\u17a2\u17b6\u1794\u17cb\u178a\u17c1\u178f \u1799\u17be\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u1793\u17d2\u178f\u1791\u17c5\u1780\u17b6\u179a\u1795\u17d2\u1791\u17c1\u179a\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u17d4 \u178f\u17b6\u1798\u1796\u17b7\u178f\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u1785\u17b6\u17c6\u1794\u17b6\u1785\u17cb\u1792\u17d2\u179c\u17be\u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u17a2\u17d2\u179c\u17b8\u1791\u17c1 \u1782\u17d2\u179a\u17b6\u1793\u17cb\u178f\u17c2\u179a\u1784\u17cb\u1785\u17b6\u17c6\u179a\u17a0\u17bc\u178f\u178a\u179b\u17cb\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u179a\u17bd\u1785\u179a\u17b6\u179b\u17cb \u17a0\u17be\u1799\u17a2\u17d2\u1793\u1780\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1789\u17d2\u1787\u17bc\u1793\u1794\u1793\u17d2\u178f\u17d4", + "Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.": "\u1798\u17be\u179b\u1791\u17c5\u17a0\u17b6\u1780\u17cb\u178a\u17bc\u1785\u1787\u17b6\u1798\u17b6\u1793\u1780\u17c6\u17a0\u17bb\u179f\u1798\u17bd\u1799\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u1780\u17c6\u17a1\u17bb\u1784\u1796\u17c1\u179b\u17a2\u17b6\u1794\u17cb\u178a\u17c1\u178f\u17d4 \u179f\u17bc\u1798\u1792\u17d2\u179c\u17be\u179c\u17b6\u1798\u17d2\u178f\u1784\u1791\u17c0\u178f\u178a\u17be\u1798\u17d2\u1794\u17b8\u17b2\u17d2\u1799\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u17a2\u17b6\u1785\u1780\u17c2\u1793\u17bc\u179c\u1780\u17c6\u17a0\u17bb\u179f\u17d4", + "Please report this message to the support : ": "\u179f\u17bc\u1798\u179a\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u179f\u17b6\u179a\u1793\u17c1\u17c7\u1791\u17c5\u1780\u17b6\u1793\u17cb\u1795\u17d2\u1793\u17c2\u1780\u1782\u17b6\u17c6\u1791\u17d2\u179a : ", + "Try Again": "\u1796\u17d2\u1799\u17b6\u1799\u17b6\u1798\u1798\u17d2\u178f\u1784\u1791\u17c0\u178f", + "Updating": "\u1780\u17c6\u1796\u17bb\u1784\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796", + "Updating Modules": "\u1780\u17c6\u1796\u17bb\u1784\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796 Modules", + "New Transaction": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1790\u17d2\u1798\u17b8", + "Search Filters": "\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u178f\u17b6\u1798\u1780\u17b6\u179a\u1785\u17d2\u179a\u17c4\u17c7", + "Clear Filters": "\u1794\u1789\u17d2\u1788\u1794\u17cb\u1780\u17b6\u179a\u1785\u17d2\u179a\u17c4\u17c7", + "Use Filters": "\u1794\u17d2\u179a\u17be\u1780\u17b6\u179a\u1785\u17d2\u179a\u17c4\u17c7", + "Would you like to delete this order": "\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179b\u17bb\u1794\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1793\u17c1\u17c7\u1791\u17c1", + "The current order will be void. This action will be recorded. Consider providing a reason for this operation": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1791\u17bb\u1780\u1787\u17b6\u1798\u17c4\u1783\u17c8\u17d4 \u179f\u1780\u1798\u17d2\u1798\u1797\u17b6\u1796\u1793\u17c1\u17c7\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u17d4 \u1796\u17b7\u1785\u17b6\u179a\u178e\u17b6\u1795\u17d2\u178f\u179b\u17cb\u17a0\u17c1\u178f\u17bb\u1795\u179b\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17c1\u17c7\u17d4", + "Order Options": "\u1787\u1798\u17d2\u179a\u17be\u179f\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Payments": "\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb", + "Refund & Return": "\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb & \u1780\u17b6\u179a\u178a\u17bc\u179a\u179c\u17b7\u1789", + "available": "\u1798\u17b6\u1793", + "Order Refunds": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789", + "No refunds made so far. Good news right?": "\u1798\u17b7\u1793\u200b\u1798\u17b6\u1793\u200b\u1780\u17b6\u179a\u200b\u179f\u1784\u200b\u1794\u17d2\u179a\u17b6\u1780\u17cb\u200b\u179c\u17b7\u1789\u200b\u1791\u17c1\u200b\u1798\u1780\u200b\u1791\u179b\u17cb\u200b\u1796\u17c1\u179b\u200b\u1793\u17c1\u17c7\u17d4 \u1798\u17b6\u1793\u178a\u17c6\u178e\u17b9\u1784\u179b\u17d2\u17a2\u1798\u17c2\u1793\u1791\u17c1?", + "Input": "\u1794\u1789\u17d2\u1785\u17bc\u179b", + "Close Register": "\u1794\u17b7\u1791\u1794\u1789\u17d2\u1787\u17b8", + "Register Options": "\u1787\u1798\u17d2\u179a\u17be\u179f\u1780\u17b6\u179a\u1794\u17be\u1780\u1794\u1789\u17d2\u1787\u17b8", + "Unable to open this register. Only closed register can be opened.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u17be\u1780\u1794\u1789\u17d2\u1787\u17b8\u1794\u17b6\u1793\u1791\u17c1 \u179f\u17bc\u1798\u1794\u17b7\u1791\u1794\u1789\u17d2\u1787\u17b8\u1787\u17b6\u1798\u17bb\u1793\u179f\u17b7\u1793\u17d4", + "Open Register : %s": "\u1794\u17be\u1780\u1794\u1789\u17d2\u1787\u17b8 : %s", + "Open The Register": "\u1794\u17be\u1780\u1794\u1789\u17d2\u1787\u17b8", + "Exit To Orders": "\u1785\u17b6\u1780\u1785\u17c1\u1789\u1796\u17b8\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u179a\u1791\u17b7\u1789", + "Looks like there is no registers. At least one register is required to proceed.": "\u1798\u17be\u179b\u1791\u17c5\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17b6\u179a\u1794\u17be\u1780\u1794\u1789\u17d2\u1787\u17b8\u1791\u17c1\u17d4 \u1799\u17c9\u17b6\u1784\u17a0\u17c4\u1785\u178e\u17b6\u179f\u17cb\u1782\u17bd\u179a\u1798\u17b6\u1793\u1794\u17be\u1780\u1794\u1789\u17d2\u1787\u17b8\u179a\u1798\u17bd\u1799\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u1793\u17d2\u178f\u17d4", + "Create Cash Register": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17b6\u179a\u1794\u17be\u1780\u1794\u1789\u17d2\u1787\u17b8", + "Load Coupon": "\u1791\u17b6\u1789\u1799\u1780\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Apply A Coupon": "\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.": "\u1794\u1789\u17d2\u1785\u17bc\u179b\u179b\u17c1\u1781\u1780\u17bc\u178a\u1782\u17bc\u1794\u17c9\u17bb\u1784\u178a\u17c2\u179b\u1782\u17bd\u179a\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1791\u17c5\u179b\u17be\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u179b\u1780\u17cb\u17d4 \u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u1782\u17bc\u1794\u17c9\u17bb\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1785\u17c1\u1789\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793 \u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1793\u17c4\u17c7\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1787\u17b6\u1798\u17bb\u1793\u17d4", + "Click here to choose a customer.": "\u1785\u17bb\u1785\u1791\u17b8\u1793\u17c1\u17c7\u178a\u17be\u1798\u17d2\u1794\u17b8\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u17d4", + "Loading Coupon For : ": "\u1791\u17b6\u1789\u1799\u1780\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb : ", + "Unlimited": "\u1782\u17d2\u1798\u17b6\u1793\u178a\u17c2\u1793\u1780\u17c6\u178e\u178f\u17cb", + "Not applicable": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1794\u17b6\u1793", + "Active Coupons": "\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1780\u1798\u17d2\u1798", + "No coupons applies to the cart.": "\u1782\u17d2\u1798\u17b6\u1793\u1782\u17bc\u1794\u17c9\u17bb\u1784\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1785\u17c6\u1796\u17c4\u17c7\u1780\u17b6\u179a\u179b\u1780\u17cb\u1793\u17c4\u17c7\u1791\u17c1\u17d4", + "The coupon is out from validity date range.": "\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1798\u17b7\u1793\u179f\u17d2\u1790\u17b7\u178f\u1793\u17c5\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u178a\u17c2\u179b\u1798\u17b6\u1793\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796\u17d4", + "This coupon requires products that aren\\'t available on the cart at the moment.": "\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1793\u17c1\u17c7\u1791\u17b6\u1798\u1791\u17b6\u179a\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1787\u17b6\u1780\u1798\u17d2\u1798\u179f\u17b7\u1791\u17d2\u1792\u17b7\u179a\u1794\u179f\u17cb\u1794\u17d2\u179a\u1797\u17c1\u1791\u1787\u17b6\u1780\u17cb\u179b\u17b6\u1780\u17cb\u178a\u17c2\u179b\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u17bd\u1798\u1794\u1789\u17d2\u1785\u17bc\u179b\u1793\u17c5\u1796\u17c1\u179b\u1793\u17c1\u17c7\u17d4", + "This coupon requires products that belongs to specific categories that aren\\'t included at the moment.": "\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1793\u17c1\u17c7\u1791\u17b6\u1798\u1791\u17b6\u179a\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u1787\u17b6\u1780\u1798\u17d2\u1798\u179f\u17b7\u1791\u17d2\u1792\u17b7\u179a\u1794\u179f\u17cb\u1794\u17d2\u179a\u1797\u17c1\u1791\u1787\u17b6\u1780\u17cb\u179b\u17b6\u1780\u17cb\u178a\u17c2\u179b\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179a\u17bd\u1798\u1794\u1789\u17d2\u1785\u17bc\u179b\u1793\u17c5\u1796\u17c1\u179b\u1793\u17c1\u17c7\u17d4", + "The coupon has applied to the cart.": "\u1782\u17bc\u1794\u17c9\u17bb\u1784\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1791\u17c5\u1780\u17b6\u179a\u179b\u1780\u17cb\u17d4", + "You must select a customer before applying a coupon.": "\u17a2\u17d2\u1793\u1780\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1798\u17bb\u1793\u1796\u17c1\u179b\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1782\u17bc\u1794\u17c9\u17bb\u1784\u17d4", + "The coupon has been loaded.": "\u1782\u17bc\u1794\u17c9\u17bb\u1784\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1791\u17b6\u1789\u1799\u1780\u17d4", + "Use": "\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "No coupon available for this customer": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1793\u17c1\u17c7\u1791\u17c1", + "Select Customer": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Selected": "\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f", + "No customer match your query...": "\u1782\u17d2\u1798\u17b6\u1793\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178e\u17b6\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1793\u17b9\u1784\u1780\u17b6\u179a\u179f\u17d2\u1793\u17be\u179a\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1791\u17c1...", + "Create a customer": "\u1794\u1784\u17d2\u1780\u17be\u178f\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Too many results.": "\u179b\u1791\u17d2\u1792\u1795\u179b\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1785\u17d2\u179a\u17be\u1793\u1796\u17c1\u1780\u17d4", + "New Customer": "\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u200b\u1790\u17d2\u1798\u17b8", + "Save Customer": "\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Not Authorized": "\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f", + "Creating customers has been explicitly disabled from the settings.": "\u1780\u17b6\u179a\u1794\u1784\u17d2\u1780\u17be\u178f\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791\u1796\u17b8\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u17d4", + "No Customer Selected": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1791\u17c1", + "In order to see a customer account, you need to select one customer.": "\u178a\u17be\u1798\u17d2\u1794\u17b8\u1798\u17be\u179b\u1782\u178e\u1793\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793 \u17a2\u17d2\u1793\u1780\u178f\u17d2\u179a\u17bc\u179c\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1798\u17d2\u1793\u17b6\u1780\u17cb\u17d4", + "Summary For": "\u179f\u1784\u17d2\u1781\u17c1\u1794\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb", + "Purchases": "\u1780\u17b6\u179a\u1791\u17b7\u1789", + "Owed": "\u1787\u17c6\u1796\u17b6\u1780\u17cb", + "Wallet Amount": "\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u1794\u17bc\u1794", + "Last Purchases": "\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bb\u1784\u1780\u17d2\u179a\u17c4\u1799", + "No orders...": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1791\u17c1...", + "Transaction": "\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a", + "No History...": "\u1782\u17d2\u1798\u17b6\u1793\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7...", + "No coupons for the selected customer...": "\u1782\u17d2\u1798\u17b6\u1793\u1782\u17bc\u1794\u17c9\u17bb\u1784\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1791\u17c1...", + "Usage :": "\u179a\u1794\u17c0\u1794\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb :", + "Code :": "\u1780\u17bc\u178a :", + "Use Coupon": "\u1794\u17d2\u179a\u17be\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "No rewards available the selected customer...": "No rewards available the selected customer...", + "Account Transaction": "Account Transaction", + "Removing": "Removing", + "Refunding": "Refunding", + "Unknow": "Unknow", + "An error occurred while opening the order options": "\u1780\u17c6\u17a0\u17bb\u179f\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u1793\u17c5\u1796\u17c1\u179b\u1794\u17be\u1780\u1787\u1798\u17d2\u179a\u17be\u179f\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Use Customer ?": "\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793?", + "No customer is selected. Would you like to proceed with this customer ?": "\u1782\u17d2\u1798\u17b6\u1793\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1791\u17c1\u17d4 \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1793\u17d2\u178f\u1787\u17b6\u1798\u17bd\u1799\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1793\u17c1\u17c7\u1791\u17c1?", + "Change Customer ?": "\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793?", + "Would you like to assign this customer to the ongoing order ?": "\u178f\u17be\u200b\u17a2\u17d2\u1793\u1780\u200b\u1785\u1784\u17cb\u200b\u1780\u17c6\u178e\u178f\u17cb\u200b\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u200b\u1793\u17c1\u17c7\u200b\u1791\u17c5\u200b\u1793\u17b9\u1784\u200b\u1780\u17b6\u179a\u200b\u1794\u1789\u17d2\u1787\u17b6\u200b\u1791\u17b7\u1789\u200b\u178a\u17c2\u179b\u200b\u1780\u17c6\u1796\u17bb\u1784\u200b\u1794\u1793\u17d2\u178f\u200b\u178a\u17c2\u179a\u200b\u17ac\u200b\u1791\u17c1?", + "Product Discount": "\u1794\u1789\u17d2\u1785\u17bb\u17c7\u179b\u17be\u178f\u1798\u17d2\u179b\u17c3\u1795\u179b\u17b7\u178f\u1795\u179b", + "Cart Discount": "\u1794\u1789\u17d2\u1785\u17bb\u17c7\u178f\u1798\u17d2\u179b\u17c3\u1780\u17b6\u179a\u179b\u1780\u17cb", + "Order Reference": "\u179f\u17c1\u1785\u1780\u17d2\u178f\u17b8\u1799\u17c4\u1784\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1795\u17d2\u17a2\u17b6\u1780\u17d4 \u17a2\u17d2\u1793\u1780\u17a2\u17b6\u1785\u1791\u17b6\u1789\u1799\u1780\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1793\u17c1\u17c7\u1796\u17b8\u1794\u17ca\u17bc\u178f\u17bb\u1784\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1798\u17b7\u1793\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d2\u179a\u17c1\u1785\u17d4 \u1780\u17b6\u179a\u1795\u17d2\u178f\u179b\u17cb\u17af\u1780\u179f\u17b6\u179a\u1799\u17c4\u1784\u1791\u17c5\u179c\u17b6\u17a2\u17b6\u1785\u1787\u17bd\u1799\u17a2\u17d2\u1793\u1780\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6\u178e\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1780\u17b6\u1793\u17cb\u178f\u17c2\u179b\u17bf\u1793\u17d4", + "Confirm": "\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb", + "Layaway Parameters": "\u1794\u17c9\u17b6\u179a\u17c9\u17b6\u1798\u17c2\u178f\u17d2\u179a\u1793\u17c3\u1780\u17b6\u179a\u1780\u17b6\u178f\u17cb\u179f\u17d2\u178f\u17bb\u1780", + "Minimum Payment": "\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u17a2\u1794\u17d2\u1794\u1794\u179a\u1798\u17b6", + "Instalments & Payments": "\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7 \u1793\u17b7\u1784\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb", + "The final payment date must be the last within the instalments.": "\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1785\u17bb\u1784\u1780\u17d2\u179a\u17c4\u1799\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1787\u17b6\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1785\u17bb\u1784\u1780\u17d2\u179a\u17c4\u1799\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u17d4", + "There is no instalment defined. Please set how many instalments are allowed for this order": "\u1798\u17b7\u1793\u200b\u1798\u17b6\u1793\u200b\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u200b\u1780\u17c6\u178e\u178f\u17cb\u17d4 \u179f\u17bc\u1798\u1780\u17c6\u178e\u178f\u17cb\u1785\u17c6\u1793\u17bd\u1793\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1793\u17c1\u17c7\u17d4", + "Skip Instalments": "\u179a\u17c6\u179b\u1784\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7", + "You must define layaway settings before proceeding.": "\u17a2\u17d2\u1793\u1780\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u178f\u17c2\u200b\u1780\u17c6\u178e\u178f\u17cb\u200b\u1780\u17b6\u179a\u200b\u1780\u17b6\u178f\u17cb\u179f\u17d2\u178f\u17bb\u1780 \u1798\u17bb\u1793\u200b\u1793\u17b9\u1784\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u178f\u17d4", + "Please provide instalments before proceeding.": "\u179f\u17bc\u1798\u1795\u17d2\u178f\u179b\u17cb\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u179f\u17cb\u1798\u17bb\u1793\u1793\u17b9\u1784\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u17d4", + "Unable to process, the form is not valid": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u200b\u1794\u17b6\u1793 \u1796\u17d2\u179a\u17c4\u17c7\u1791\u1798\u17d2\u179a\u1784\u17cb\u1794\u17c2\u1794\u1794\u1791\u200b\u1793\u17c1\u17c7\u200b\u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "One or more instalments has an invalid date.": "\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u1798\u17bd\u1799 \u17ac\u1785\u17d2\u179a\u17be\u1793\u1798\u17b6\u1793\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "One or more instalments has an invalid amount.": "\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u1798\u17bd\u1799 \u17ac\u1785\u17d2\u179a\u17be\u1793\u1798\u17b6\u1793\u1791\u17b9\u1780\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "One or more instalments has a date prior to the current date.": "\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u1798\u17bd\u1799 \u17ac\u1785\u17d2\u179a\u17be\u1793\u1794\u17b6\u1793\u1794\u1784\u17cb\u1798\u17bb\u1793\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791\u1787\u17b6\u1780\u17cb\u179b\u17b6\u1780\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u17d4", + "The payment to be made today is less than what is expected.": "\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1792\u17d2\u179c\u17be\u17a1\u17be\u1784\u1793\u17c5\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7\u1782\u17ba\u178f\u17b7\u1785\u1787\u17b6\u1784\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u179a\u17c6\u1796\u17b9\u1784\u1791\u17bb\u1780\u17d4", + "Total instalments must be equal to the order total.": "\u1780\u17b6\u179a\u1794\u1784\u17cb\u179a\u17c6\u179b\u17c4\u17c7\u179f\u179a\u17bb\u1794\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u179f\u17d2\u1798\u17be\u1793\u17b9\u1784\u1785\u17c6\u1793\u17bd\u1793\u179f\u179a\u17bb\u1794\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u17d4", + "Order Note": "\u1780\u17c6\u178e\u178f\u17cb\u1785\u17c6\u178e\u17b6\u17c6\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Note": "\u179f\u1798\u17d2\u1782\u17b6\u179b\u17cb", + "More details about this order": "\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u179b\u1798\u17d2\u17a2\u17b7\u178f\u1794\u1793\u17d2\u1790\u17c2\u1798\u17a2\u17c6\u1796\u17b8\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1793\u17c1\u17c7\u17d4", + "Display On Receipt": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1793\u17c5\u179b\u17be\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3", + "Will display the note on the receipt": "\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17c6\u178e\u178f\u17cb\u1785\u17c6\u178e\u17b6\u17c6\u1793\u17c5\u179b\u17be\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3", + "Open": "\u1794\u17be\u1780", + "Order Settings": "\u1780\u17c6\u178e\u178f\u17cb\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Define The Order Type": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u17d2\u179a\u1797\u17c1\u1791\u1793\u17c3\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "No payment type has been selected on the settings. Please check your POS features and choose the supported order type": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1793\u17c5\u179b\u17be\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1791\u17c1\u17d4 \u179f\u17bc\u1798\u1796\u17b7\u1793\u17b7\u178f\u17d2\u1799\u1798\u17be\u179b\u1798\u17bb\u1781\u1784\u17b6\u179a POS \u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780 \u17a0\u17be\u1799\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1782\u17b6\u17c6\u1791\u17d2\u179a", + "Configure": "\u1780\u17c6\u178e\u178f\u17cb\u179a\u1785\u1793\u17b6\u179f\u1798\u17d2\u1796\u17d0\u1793\u17d2\u1792", + "Select Payment Gateway": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1785\u17d2\u179a\u1780\u1791\u17bc\u1791\u17b6\u178f\u17cb", + "Gateway": "\u1785\u17d2\u179a\u1780\u1798\u1792\u17d2\u1799\u17c4\u1794\u17b6\u1799", + "Payment List": "\u1794\u1789\u17d2\u1787\u17b8\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "List Of Payments": "\u1794\u1789\u17d2\u1787\u17b8\u1793\u17c3\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb", + "No Payment added.": "\u1782\u17d2\u1798\u17b6\u1793\u1780\u17b6\u179a\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1794\u1793\u17d2\u1790\u17c2\u1798\u1791\u17c1\u17d4", + "Layaway": "\u1780\u17b6\u178f\u17cb\u179f\u17d2\u178f\u17bb\u1780", + "On Hold": "\u179a\u1784\u17cb\u1785\u17b6\u17c6", + "Nothing to display...": "\u1782\u17d2\u1798\u17b6\u1793\u17a2\u17d2\u179c\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1791\u17c1...", + "Product Price": "\u178f\u1798\u17d2\u179b\u17c3\u1795\u179b\u17b7\u178f\u1795\u179b", + "Define Quantity": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u179a\u17b7\u1798\u17b6\u178e", + "Please provide a quantity": "\u179f\u17bc\u1798\u1794\u1789\u17d2\u1785\u17bc\u179b\u1794\u179a\u17b7\u1798\u17b6\u178e", + "Product \/ Service": "\u1795\u179b\u17b7\u178f\u1795\u179b\/\u179f\u17c1\u179c\u17b6\u1780\u1798\u17d2\u1798", + "Unable to proceed. The form is not valid.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1791\u1798\u17d2\u179a\u1784\u17cb\u1794\u17c2\u1794\u1794\u1791\u200b\u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Provide a unique name for the product.": "\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c4\u1799\u1798\u17b7\u1793\u1787\u17b6\u1793\u17cb\u1782\u17d2\u1793\u17b6\u17d4", + "Define the product type.": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u17d2\u179a\u1797\u17c1\u1791\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Normal": "\u1792\u1798\u17d2\u1798\u178f\u17b6", + "Dynamic": "\u1798\u17b7\u1793\u1791\u17c0\u1784\u1791\u17b6\u178f\u17cb", + "In case the product is computed based on a percentage, define the rate here.": "\u1780\u17d2\u1793\u17bb\u1784\u1780\u179a\u178e\u17b8\u178a\u17c2\u179b\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u178e\u1793\u17b6\u178a\u17c4\u1799\u1795\u17d2\u17a2\u17c2\u1780\u179b\u17be\u1797\u17b6\u1782\u179a\u1799 \u179f\u17bc\u1798\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17d2\u179a\u17b6\u1793\u17c5\u1791\u17b8\u1793\u17c1\u17c7\u17d4", + "Define what is the sale price of the item.": "\u1780\u17c6\u178e\u178f\u17cb\u178f\u1798\u17d2\u179b\u17c3\u179b\u1780\u17cb\u179a\u1794\u179f\u17cb\u1791\u17c6\u1793\u17b7\u1789\u17d4", + "Set the quantity of the product.": "\u1780\u17c6\u178e\u178f\u17cb\u1794\u179a\u17b7\u1798\u17b6\u178e\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Assign a unit to the product.": "\u1780\u17c6\u178e\u178f\u17cb\u17af\u1780\u178f\u17b6\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Define what is tax type of the item.": "\u1780\u17c6\u178e\u178f\u17cb\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u1787\u17b6\u1794\u17d2\u179a\u1797\u17c1\u1791\u1796\u1793\u17d2\u1792\u1793\u17c3\u1791\u17c6\u1793\u17b7\u1789\u17d4", + "Choose the tax group that should apply to the item.": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1780\u17d2\u179a\u17bb\u1798\u1796\u1793\u17d2\u1792\u178a\u17c2\u179b\u1782\u17bd\u179a\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1785\u17c6\u1796\u17c4\u17c7\u1798\u17bb\u1781\u1791\u17c6\u1793\u17b7\u1789\u17d4", + "Search Product": "\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1795\u179b\u17b7\u178f\u1795\u179b", + "There is nothing to display. Have you started the search ?": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u17a2\u17d2\u179c\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1791\u17c1\u17d4 \u178f\u17be\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17a0\u17be\u1799\u17ac\u1793\u17c5?", + "Unable to add the product": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u1790\u17c2\u1798\u1795\u179b\u17b7\u178f\u1795\u179b\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?": "\u1795\u179b\u17b7\u178f\u1795\u179b \"{product}\" \u1798\u17b7\u1793\u17a2\u17b6\u1785\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1793\u17d2\u1790\u17c2\u1798\u1796\u17b8\u1780\u1793\u17d2\u179b\u17c2\u1784\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1791\u17c1 \u178a\u17c4\u1799\u179f\u17b6\u179a \"\u1780\u17b6\u179a\u178f\u17b6\u1798\u178a\u17b6\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\" \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17be\u1780\u17d4 \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179f\u17d2\u179c\u17c2\u1784\u1799\u179b\u17cb\u1794\u1793\u17d2\u1790\u17c2\u1798\u1791\u17c1?", + "No result to result match the search value provided.": "\u1782\u17d2\u1798\u17b6\u1793\u179b\u1791\u17d2\u1792\u1795\u179b\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1793\u17b9\u1784\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17d4", + "Shipping & Billing": "\u1780\u17b6\u179a\u178a\u17b9\u1780\u1787\u1789\u17d2\u1787\u17bc\u1793 \u1793\u17b7\u1784\u179c\u17b7\u1780\u17d0\u1799\u1794\u17d0\u178f\u17d2\u179a", + "Tax & Summary": "\u1796\u1793\u17d2\u1792 \u1793\u17b7\u1784\u179f\u1784\u17d2\u1781\u17c1\u1794", + "No tax is active": "\u1798\u17b7\u1793\u1798\u17b6\u1793\u1796\u1793\u17d2\u1792\u179f\u1780\u1798\u17d2\u1798\u1791\u17c1", + "Select Tax": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u1796\u1793\u17d2\u1792", + "Define the tax that apply to the sale.": "\u1780\u17c6\u178e\u178f\u17cb\u1796\u1793\u17d2\u1792\u178a\u17c2\u179b\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1785\u17c6\u1796\u17c4\u17c7\u1780\u17b6\u179a\u179b\u1780\u17cb\u17d4", + "Define how the tax is computed": "\u1780\u17c6\u178e\u178f\u17cb\u1796\u17b8\u179a\u1794\u17c0\u1794\u178a\u17c2\u179b\u1796\u1793\u17d2\u1792\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u178e\u1793\u17b6", + "{product} : Units": "{product} : \u17af\u1780\u178f\u17b6", + "This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.": "\u1795\u179b\u17b7\u178f\u1795\u179b\u1793\u17c1\u17c7\u1798\u17b7\u1793\u1798\u17b6\u1793\u17af\u1780\u178f\u17b6\u1780\u17c6\u178e\u178f\u17cb\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u179b\u1780\u17cb\u1791\u17c1\u17d4 \u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u17b6\u1780\u178a\u1790\u17b6\u179c\u17b6\u1798\u17b6\u1793\u17a0\u17c4\u1785\u178e\u17b6\u179f\u17cb\u1798\u17bd\u1799\u17af\u1780\u178f\u17b6\u17d4", + "The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.": "\u17af\u1780\u178f\u17b6\u178a\u17c2\u179b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1787\u17b6\u1798\u17bd\u1799\u1795\u179b\u17b7\u178f\u1795\u179b\u1793\u17c1\u17c7\u1794\u17b6\u178f\u17cb \u17ac\u1798\u17b7\u1793\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u17d4 \u179f\u17bc\u1798\u1796\u17b7\u1793\u17b7\u178f\u17d2\u1799\u1798\u17be\u179b\u1795\u17d2\u1791\u17b6\u17c6\u1784 \"\u17af\u1780\u178f\u17b6\" \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1795\u179b\u17b7\u178f\u1795\u179b\u1793\u17c1\u17c7\u17d4", + "Define when that specific product should expire.": "\u1780\u17c6\u178e\u178f\u17cb\u1796\u17c1\u179b\u179c\u17c1\u179b\u17b6\u1787\u17b6\u1780\u17cb\u179b\u17b6\u1780\u17cb\u178a\u17c2\u179b\u1795\u179b\u17b7\u178f\u1795\u179b\u1793\u17c4\u17c7\u1795\u17bb\u178f\u1780\u17c6\u178e\u178f\u17cb\u17d4", + "Renders the automatically generated barcode.": "\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179b\u17c1\u1781\u1780\u17bc\u178a\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u178a\u17c4\u1799\u179f\u17d2\u179c\u17d0\u1799\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7\u17d4", + "Adjust how tax is calculated on the item.": "\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c\u179a\u1794\u17c0\u1794\u178a\u17c2\u179b\u1796\u1793\u17d2\u1792\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1782\u178e\u1793\u17b6\u179b\u17be\u1791\u17c6\u1793\u17b7\u1789\u17d4", + "Previewing :": "\u1780\u17c6\u1796\u17bb\u1784\u1794\u1784\u17d2\u17a0\u17b6\u1789 :", + "Units & Quantities": "\u17af\u1780\u178f\u17b6\u1793\u17b7\u1784\u1794\u179a\u17b7\u1798\u17b6\u178e", + "Select": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f", + "Search for options": "\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1787\u1798\u17d2\u179a\u17be\u179f", + "This QR code is provided to ease authentication on external applications.": "\u1780\u17bc\u178a QR \u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1787\u17bc\u1793\u178a\u17be\u1798\u17d2\u1794\u17b8\u179f\u1798\u17d2\u179a\u17bd\u179b\u1780\u17b6\u179a\u1795\u17d2\u1791\u17c0\u1784\u1795\u17d2\u1791\u17b6\u178f\u17cb\u179b\u17be\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1796\u17b8\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c5\u17d4", + "The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.": "\u1793\u17b7\u1798\u17b7\u178f\u17d2\u178f\u179f\u1789\u17d2\u1789\u17b6 API \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u17d4 \u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u17b6\u1780\u178a\u1790\u17b6\u1785\u1798\u17d2\u179b\u1784\u1780\u17bc\u178a\u1793\u17c1\u17c7\u1793\u17c5\u1780\u1793\u17d2\u179b\u17c2\u1784\u178a\u17c2\u179b\u1798\u17b6\u1793\u179f\u17bb\u179c\u178f\u17d2\u1790\u17b7\u1797\u17b6\u1796 \u1796\u17d2\u179a\u17c4\u17c7\u179c\u17b6\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u17a0\u17b6\u1789\u178f\u17c2\u1798\u17d2\u178f\u1784\u1794\u17c9\u17bb\u178e\u17d2\u178e\u17c4\u17c7\u17d4\n \u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u17a2\u17d2\u1793\u1780\u179f\u17d2\u179a\u17b6\u1799\u179f\u1789\u17d2\u1789\u17b6\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1793\u17c1\u17c7 \u17a2\u17d2\u1793\u1780\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u178a\u1780\u17a0\u17bc\u178f\u179c\u17b6 \u17a0\u17be\u1799\u1794\u1784\u17d2\u1780\u17be\u178f\u179b\u17c1\u1781\u1780\u17bc\u178a\u1790\u17d2\u1798\u17b8\u17d4", + "Copy And Close": "\u1785\u1798\u17d2\u179b\u1784\u1793\u17b7\u1784\u1794\u17b7\u1791", + "The customer has been loaded": "\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1791\u17b6\u1789\u1799\u1780", + "Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\u1794\u17b6\u1793\u1791\u17c1\u17d4 \u1798\u17be\u179b\u1791\u17c5\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u179b\u17c2\u1784\u1798\u17b6\u1793\u1791\u17c0\u178f\u17a0\u17be\u1799\u17d4 \u1796\u17b7\u1785\u17b6\u179a\u178e\u17b6\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798\u1793\u17c5\u179b\u17be\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u17d4", + "Some products has been added to the cart. Would youl ike to discard this order ?": "\u1795\u179b\u17b7\u178f\u1795\u179b\u1798\u17bd\u1799\u1785\u17c6\u1793\u17bd\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c5\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u179b\u1780\u17cb\u17d4 \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u17c4\u17c7\u1794\u1784\u17cb\u1780\u17b6\u179a\u179b\u1780\u17cb\u1793\u17c1\u17c7\u1791\u17c1?", + "This coupon is already added to the cart": "\u1794\u17d0\u178e\u17d2\u178e\u1793\u17c1\u17c7\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c5\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u179b\u1780\u17cb\u179a\u17bd\u1785\u17a0\u17be\u1799", + "Unable to delete a payment attached to the order.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17bb\u1794\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178a\u17c2\u179b\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1787\u17b6\u1798\u17bd\u1799\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u17b6\u1793\u1791\u17c1\u17d4", + "No tax group assigned to the order": "\u1798\u17b7\u1793\u200b\u1798\u17b6\u1793\u200b\u1780\u17d2\u179a\u17bb\u1798\u200b\u1796\u1793\u17d2\u1792\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u178f\u17d2\u179a\u17bc\u179c\u178a\u17b6\u1780\u17cb\u200b\u1791\u17c5\u200b\u1780\u17d2\u1793\u17bb\u1784\u200b\u1780\u17b6\u179a\u200b\u1794\u1789\u17d2\u1787\u17b6\u200b\u1791\u17b7\u1789\u1791\u17c1\u200b", + "The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.": "The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.", + "Before saving this order, a minimum payment of {amount} is required": "\u1798\u17bb\u1793\u1796\u17c1\u179b\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1793\u17c1\u17c7 \u1782\u17ba\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1791\u17b6\u1798\u1791\u17b6\u179a\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u17a2\u1794\u17d2\u1794\u1794\u179a\u1798\u17b6\u1785\u17c6\u1793\u17bd\u1793 {amount}", + "Unable to proceed": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1794\u1793\u17d2\u178f\u1794\u17b6\u1793\u1791\u17c1", + "Layaway defined": "\u1780\u17b6\u178f\u17cb\u179f\u17d2\u178f\u17bb\u1780\u1795\u179b\u17b7\u178f\u1795\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb", + "Initial Payment": "\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178a\u17c6\u1794\u17bc\u1784", + "In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?": "\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u1793\u17d2\u178f \u1780\u17b6\u179a\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u178a\u17c6\u1794\u17bc\u1784\u1785\u17c6\u1793\u17bd\u1793 {amount} \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1791\u17b6\u1798\u1791\u17b6\u179a\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f \"{paymentType}\" \u17d4 \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1793\u17d2\u178f\u1791\u17c1?", + "The request was canceled": "\u179f\u17c6\u178e\u17be\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u1785\u17c4\u179b", + "Partially paid orders are disabled.": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1784\u17cb\u178a\u17c4\u1799\u1795\u17d2\u1793\u17c2\u1780\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u17b7\u1791\u17d4", + "An order is currently being processed.": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1780\u17c6\u1796\u17bb\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u17d4", + "An error has occurred while computing the product.": "\u1780\u17c6\u17a0\u17bb\u179f\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784\u1781\u178e\u17c8\u1796\u17c1\u179b\u1780\u17c6\u1796\u17bb\u1784\u1782\u178e\u1793\u17b6\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.": "\u1782\u17bc\u1794\u17c9\u17bb\u1784 \"%s\" \u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1799\u1780\u200b\u1785\u17c1\u1789\u200b\u1796\u17b8\u200b\u1780\u17b6\u179a\u179b\u1780\u17cb \u1796\u17d2\u179a\u17c4\u17c7\u200b\u179b\u1780\u17d2\u1781\u1781\u178e\u17d2\u178c\u200b\u178f\u1798\u17d2\u179a\u17bc\u179c\u200b\u179a\u1794\u179f\u17cb\u200b\u179c\u17b6\u200b\u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1794\u17c6\u1796\u17c1\u1789\u200b \u17ac\u17a2\u179f\u17cb\u179f\u17bb\u1796\u179b\u1797\u17b6\u1796\u17d4", + "The discount has been set to the cart subtotal.": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1785\u17bb\u17c7\u178f\u1798\u17d2\u179b\u17c3\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1791\u17c5\u1787\u17b6\u179f\u179a\u17bb\u1794\u179a\u1784\u1793\u17c3\u1795\u179b\u17b7\u178f\u1795\u179b\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u179b\u1780\u17cb\u17d4", + "An unexpected error has occurred while fecthing taxes.": "\u1780\u17c6\u17a0\u17bb\u179f\u178a\u17c2\u179b\u1798\u17b7\u1793\u1793\u17b9\u1780\u179f\u17d2\u1798\u17b6\u1793\u178a\u179b\u17cb\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784 \u1781\u178e\u17c8\u1796\u17c1\u179b\u1780\u17c6\u1796\u17bb\u1784\u1782\u178e\u1793\u17b6\u1796\u1793\u17d2\u1792\u17d4", + "Order Deletion": "\u1780\u17b6\u179a\u179b\u17bb\u1794\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "The current order will be deleted as no payment has been made so far.": "\u1780\u17b6\u179a\u200b\u1794\u1789\u17d2\u1787\u17b6\u200b\u1791\u17b7\u1789\u200b\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u200b\u1793\u17b9\u1784\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u179b\u17bb\u1794 \u1796\u17d2\u179a\u17c4\u17c7\u200b\u1798\u17b7\u1793\u200b\u1791\u17b6\u1793\u17cb\u200b\u1798\u17b6\u1793\u200b\u1780\u17b6\u179a\u200b\u1791\u17bc\u1791\u17b6\u178f\u17cb\u200b\u1794\u17d2\u179a\u17b6\u1780\u17cb\u200b\u1798\u1780\u200b\u178a\u179b\u17cb\u200b\u1796\u17c1\u179b\u200b\u1793\u17c1\u17c7\u200b\u1791\u17c1\u17d4", + "Void The Order": "\u179b\u17bb\u1794\u1785\u17c4\u179b\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1791\u17bb\u1780\u1787\u17b6\u1798\u17c4\u1783\u17c8\u17d4 \u179c\u17b6\u1793\u17b9\u1784\u179b\u17bb\u1794\u1785\u17c4\u179b\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a \u1794\u17c9\u17bb\u1793\u17d2\u178f\u17c2\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1793\u17b9\u1784\u1798\u17b7\u1793\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u179b\u17bb\u1794\u1791\u17c1\u17d4 \u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u179b\u1798\u17d2\u17a2\u17b7\u178f\u1794\u1793\u17d2\u1790\u17c2\u1798\u17a2\u17c6\u1796\u17b8\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17c1\u17c7\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178f\u17b6\u1798\u178a\u17b6\u1793\u1793\u17c5\u179b\u17be\u179a\u1794\u17b6\u1799\u1780\u17b6\u179a\u178e\u17cd\u17d4 \u1796\u17b7\u1785\u17b6\u179a\u178e\u17b6\u1795\u17d2\u178f\u179b\u17cb\u17a0\u17c1\u178f\u17bb\u1795\u179b\u1793\u17c3\u1794\u17d2\u179a\u178f\u17b7\u1794\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u1793\u17c1\u17c7\u17d4", + "Unable to void an unpaid order.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179b\u17bb\u1794\u1785\u17c4\u179b\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1798\u17b7\u1793\u1794\u17b6\u1793\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb\u17d4", + "No result to display.": "\u1782\u17d2\u1798\u17b6\u1793\u179b\u1791\u17d2\u1792\u1795\u179b\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u1784\u17d2\u17a0\u17b6\u1789\u17d4", + "Well.. nothing to show for the meantime.": "\u17a2\u1789\u17d2\u1785\u17b9\u1784.. \u1782\u17d2\u1798\u17b6\u1793\u17a2\u17d2\u179c\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1796\u17c1\u179b\u1793\u17c1\u17c7\u1791\u17c1\u17d4", + "Well.. nothing to show for the meantime": "\u17a2\u1789\u17d2\u1785\u17b9\u1784.. \u1782\u17d2\u1798\u17b6\u1793\u17a2\u17d2\u179c\u17b8\u178f\u17d2\u179a\u17bc\u179c\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1796\u17c1\u179b\u1793\u17c1\u17c7\u1791\u17c1\u17d4", + "Incomplete Orders": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1798\u17b7\u1793\u1796\u17c1\u1789\u179b\u17c1\u1789", + "Recents Orders": "\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u1790\u17d2\u1798\u17b8\u17d7", + "Weekly Sales": "\u1780\u17b6\u179a\u179b\u1780\u17cb\u1794\u17d2\u179a\u1785\u17b6\u17c6\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd", + "Week Taxes": "\u1796\u1793\u17d2\u1792\u1787\u17b6\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd", + "Net Income": "\u1794\u17d2\u179a\u17b6\u1780\u17cb\u1785\u17c6\u178e\u17bc\u179b\u179f\u17bb\u1791\u17d2\u1792", + "Week Expenses": "\u1785\u17c6\u1793\u17b6\u1799\u1787\u17b6\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd", + "Current Week": "\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd\u1793\u17c1\u17c7", + "Previous Week": "\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd\u1798\u17bb\u1793", + "Loading...": "\u1780\u17c6\u1796\u17bb\u1784\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a...", + "Logout": "\u1785\u17b6\u1780\u1785\u17c1\u1789", + "Unnamed Page": "\u1791\u17c6\u1796\u17d0\u179a\u1782\u17d2\u1798\u17b6\u1793\u1788\u17d2\u1798\u17c4\u17c7", + "No description": "\u1798\u17b7\u1793\u200b\u1798\u17b6\u1793\u200b\u1780\u17b6\u179a\u200b\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u200b", + "Invalid Error Message": "\u179f\u17b6\u179a\u178a\u17c6\u178e\u17b9\u1784\u1793\u17c3\u1780\u17c6\u17a0\u17bb\u179f\u1786\u17d2\u1782\u1784\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c", + "Unamed Settings Page": "\u1791\u17c6\u1796\u17d0\u179a\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1782\u17d2\u1798\u17b6\u1793\u1788\u17d2\u1798\u17c4\u17c7", + "Description of unamed setting page": "\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u17a2\u17c6\u1796\u17b8\u1791\u17c6\u1796\u17d0\u179a\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1782\u17d2\u1798\u17b6\u1793\u1788\u17d2\u1798\u17c4\u17c7", + "Text Field": "\u1794\u17d2\u179a\u17a2\u1794\u17cb\u179c\u17b6\u1799\u17a2\u1780\u17d2\u179f\u179a", + "This is a sample text field.": "\u1793\u17c1\u17c7\u1782\u17ba\u1787\u17b6\u1794\u17d2\u179a\u17a2\u1794\u17cb\u179c\u17b6\u1799\u17a2\u178f\u17d2\u1790\u1794\u1791\u1792\u1798\u17d2\u1798\u178f\u17b6", + "No description has been provided.": "\u1798\u17b7\u1793\u200b\u1798\u17b6\u1793\u200b\u1780\u17b6\u179a\u200b\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u200b\u17d4", + "Unamed Page": "\u1791\u17c6\u1796\u17d0\u179a\u178a\u17be\u1798\u1782\u17d2\u1798\u17b6\u1793\u1788\u17d2\u1798\u17c4\u17c7", + "You\\'re using NexoPOS %s<\/a>": "\u179b\u17c4\u1780\u17a2\u17d2\u1793\u1780\u1780\u17c6\u1796\u17bb\u1784\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb NexoPOS %s<\/a>", + "Activate Your Account": "\u1792\u17d2\u179c\u17be\u17b1\u17d2\u1799\u1782\u178e\u1793\u17b8\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u179f\u1780\u1798\u17d2\u1798", + "The account you have created for __%s__, require an activation. In order to proceed, please click on the following link": "\u1782\u178e\u1793\u17b8\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb __%s__ \u1791\u17b6\u1798\u1791\u17b6\u179a\u1780\u17b6\u179a\u1792\u17d2\u179c\u17be\u17b1\u17d2\u1799\u179f\u1780\u1798\u17d2\u1798\u17d4 \u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u1793\u17d2\u178f \u179f\u17bc\u1798\u1785\u17bb\u1785\u179b\u17be\u178f\u17c6\u178e\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1798", + "Password Recovered": "\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1791\u17b6\u1789\u1799\u1780", + "Your password has been successfully updated on __%s__. You can now login with your new password.": "\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u1793\u17c5\u179b\u17be __%s__\u17d4 \u17a5\u17a1\u17bc\u179c\u1793\u17c1\u17c7 \u17a2\u17d2\u1793\u1780\u17a2\u17b6\u1785\u1785\u17bc\u179b\u178a\u17c4\u1799\u1794\u17d2\u179a\u17be\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1790\u17d2\u1798\u17b8\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u17d4", + "If you haven\\'t asked this, please get in touch with the administrators.": "\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u1794\u17b6\u1793\u179f\u17bd\u179a\u179a\u17bf\u1784\u1793\u17c1\u17c7\u1791\u17c1 \u179f\u17bc\u1798\u1791\u17b6\u1780\u17cb\u1791\u1784\u17a2\u17d2\u1793\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u17d4", + "Password Recovery": "\u1791\u17b6\u1789\u1799\u1780\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb", + "Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ": "\u1798\u17b6\u1793\u1793\u179a\u178e\u17b6\u1798\u17d2\u1793\u17b6\u1780\u17cb\u1794\u17b6\u1793\u179f\u17d2\u1793\u17be\u179f\u17bb\u17c6\u17b1\u17d2\u1799\u1780\u17c6\u178e\u178f\u17cb\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17a1\u17be\u1784\u179c\u17b7\u1789\u1793\u17c5\u179b\u17be __\"%s\"__. \u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u17a2\u17d2\u1793\u1780\u1785\u17b6\u17c6\u1790\u17b6\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u179f\u17c6\u178e\u17be\u1793\u17c4\u17c7 \u179f\u17bc\u1798\u1794\u1793\u17d2\u178f\u178a\u17c4\u1799\u1785\u17bb\u1785\u1794\u17ca\u17bc\u178f\u17bb\u1784\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1798\u17d4", + "Reset Password": "\u1780\u17c6\u178e\u178f\u17cb\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u17a1\u17be\u1784\u179c\u17b7\u1789", + "New User Registration": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1790\u17d2\u1798\u17b8", + "A new user has registered to your store (%s) with the email %s.": "\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1790\u17d2\u1798\u17b8\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7\u1791\u17c5\u1780\u17b6\u1793\u17cb\u17a0\u17b6\u1784\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780 (%s) \u1787\u17b6\u1798\u17bd\u1799\u17a2\u17ca\u17b8\u1798\u17c2\u179b %s \u17d4", + "Your Account Has Been Created": "\u1782\u178e\u1793\u17b8\u200b\u179a\u1794\u179f\u17cb\u200b\u17a2\u17d2\u1793\u1780\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1794\u1784\u17d2\u1780\u17be\u178f", + "The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.": "\u1782\u178e\u1793\u17b8\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb __%s__, \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1794\u1784\u17d2\u1780\u17be\u178f\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799\u17d4 \u17a5\u17a1\u17bc\u179c\u1793\u17c1\u17c7 \u17a2\u17d2\u1793\u1780\u17a2\u17b6\u1785\u1785\u17bc\u179b\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb (__%s__) \u1793\u17b7\u1784\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u17d4", + "Login": "\u1785\u17bc\u179b\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb", + "Environment Details": "Environment \u179b\u1798\u17d2\u17a2\u17b7\u178f", + "Properties": "\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7", + "Extensions": "\u1795\u17d2\u1793\u17c2\u1780\u1794\u1793\u17d2\u1790\u17c2\u1798", + "Configurations": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u179a\u1785\u1793\u17b6\u179f\u1798\u17d2\u1796\u17d0\u1793\u17d2\u1792", + "Save Coupon": "\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1782\u17bc\u1794\u17c9\u17bb\u1784", + "This field is required": "\u1794\u17d2\u179a\u17a2\u1794\u17cb\u200b\u1793\u17c1\u17c7\u200b\u1785\u17b6\u17c6\u1794\u17b6\u1785\u17cb\u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u200b\u1794\u17c6\u1796\u17c1\u1789", + "The form is not valid. Please check it and try again": "\u1791\u1798\u17d2\u179a\u1784\u17cb\u1794\u17c2\u1794\u1794\u1791\u200b\u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c \u179f\u17bc\u1798\u1796\u17b7\u1793\u17b7\u178f\u17d2\u1799\u1798\u17be\u179b\u179c\u17b6 \u17a0\u17be\u1799\u1796\u17d2\u1799\u17b6\u1799\u17b6\u1798\u1798\u17d2\u178f\u1784\u1791\u17c0\u178f\u17d4", + "mainFieldLabel not defined": "mainFieldLabel \u1798\u17b7\u1793\u200b\u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1780\u17c6\u178e\u178f\u17cb", + "Create Customer Group": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Save a new customer group": "\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u1790\u17d2\u1798\u17b8", + "Update Group": "\u1792\u17d2\u179c\u17be\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1797\u17b6\u1796\u1780\u17d2\u179a\u17bb\u1798", + "Modify an existing customer group": "\u1780\u17c2\u1794\u17d2\u179a\u17c2\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c2\u179b\u1798\u17b6\u1793\u179f\u17d2\u179a\u17b6\u1794\u17cb", + "Managing Customers Groups": "\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u1780\u17d2\u179a\u17bb\u1798\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Create groups to assign customers": "\u1794\u1784\u17d2\u1780\u17be\u178f\u1780\u17d2\u179a\u17bb\u1798\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "Managing Customers": "\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793", + "List of registered customers": "\u1794\u1789\u17d2\u1787\u17b8\u17a2\u178f\u17b7\u1790\u17b7\u1787\u1793\u178a\u17c2\u179b\u1794\u17b6\u1793\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7", + "Your Module": "Module \u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780", + "Choose the zip file you would like to upload": "\u1787\u17d2\u179a\u17be\u179f\u179a\u17be\u179f\u17af\u1780\u179f\u17b6\u179a zip \u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u1784\u17d2\u17a0\u17c4\u17c7", + "Managing Orders": "\u1780\u17b6\u179a\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Manage all registered orders.": "\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u1780\u17b6\u179a\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789\u178a\u17c2\u179b\u1794\u17b6\u1793\u1780\u178f\u17cb\u178f\u17d2\u179a\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17d4", + "Payment receipt": "\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3\u1794\u1784\u17cb\u1794\u17d2\u179a\u17b6\u1780\u17cb", + "Hide Dashboard": "\u179b\u17b6\u1780\u17cb\u1795\u17d2\u1791\u17b6\u17c6\u1784\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784", + "Receipt — %s": "\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3 — %s", + "Order receipt": "\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3\u1794\u1789\u17d2\u1787\u17b6\u1791\u17b7\u1789", + "Refund receipt": "\u1794\u1784\u17d2\u1780\u17b6\u1793\u17cb\u178a\u17c3\u179f\u1784\u1794\u17d2\u179a\u17b6\u1780\u17cb\u179c\u17b7\u1789", + "Current Payment": "\u1780\u17b6\u179a\u1791\u17bc\u1791\u17b6\u178f\u17cb\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793", + "Total Paid": "\u179f\u179a\u17bb\u1794\u178a\u17c2\u179b\u1794\u17b6\u1793\u1794\u1784\u17cb", + "Note: ": "\u1785\u17c6\u178e\u17b6\u17c6: ", + "Inclusive Product Taxes": "\u179a\u17bd\u1798\u1794\u1789\u17d2\u1785\u17bc\u179b\u1796\u1793\u17d2\u1792\u1795\u179b\u17b7\u178f\u1795\u179b", + "Exclusive Product Taxes": "\u1798\u17b7\u1793\u179a\u17bd\u1798\u1794\u1789\u17d2\u1785\u17bc\u179b\u1796\u1793\u17d2\u1792\u1795\u179b\u17b7\u178f\u1795\u179b", + "Condition:": "\u179b\u1780\u17d2\u1781\u1781\u178e\u17d2\u178c:", + "Unable to proceed no products has been provided.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u178f\u200b\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1794\u17b6\u1793 \u178a\u17c4\u1799\u1799\u179f\u17b6\u179a\u1782\u17d2\u1798\u17b6\u1793\u200b\u1795\u179b\u17b7\u178f\u1795\u179b\u200b\u17d4", + "Unable to proceed, one or more products is not valid.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1794\u17b6\u1793 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1795\u179b\u17b7\u178f\u1795\u179b\u1798\u17bd\u1799 \u17ac\u1785\u17d2\u179a\u17be\u1793\u1787\u17b6\u1784\u1793\u17c1\u17c7\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Unable to proceed the procurement form is not valid.": "\u1798\u17b7\u1793\u17a2\u17b6\u1785\u178a\u17c6\u178e\u17be\u179a\u1780\u17b6\u179a\u1791\u17b7\u1789\u1785\u17bc\u179b\u178a\u17c4\u1799\u179f\u17b6\u179a\u1791\u1798\u17d2\u179a\u1784\u17cb\u1794\u17c2\u1794\u1794\u1791\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u17d4", + "Unable to proceed, no submit url has been provided.": "\u1798\u17b7\u1793\u200b\u17a2\u17b6\u1785\u200b\u1794\u1793\u17d2\u178f\u200b\u1794\u17b6\u1793\u200b \u178a\u17c4\u1799\u179f\u17b6\u179a\u1798\u17b7\u1793\u200b\u1798\u17b6\u1793\u200b url \u178f\u17d2\u179a\u17bc\u179c\u200b\u1794\u17b6\u1793\u200b\u1795\u17d2\u178f\u179b\u17cb\u200b\u17b1\u17d2\u1799\u200b\u17d4", + "SKU, Barcode, Product name.": "SKU, \u1794\u17b6\u1780\u17bc\u178a, \u1788\u17d2\u1798\u17c4\u17c7\u1795\u179b\u17b7\u178f\u1795\u179b\u17d4", + "Date : %s": "\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791 : %s", + "First Address": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1782\u17c4\u179b", + "Second Address": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b8\u1796\u17b8\u179a", + "Address": "\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793", + "Search Products...": "\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1795\u179b\u17b7\u178f\u1795\u179b...", + "Included Products": "\u179a\u17bd\u1798\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17b6\u17c6\u1784\u1795\u179b\u17b7\u178f\u1795\u179b", + "Apply Settings": "\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb", + "Basic Settings": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793", + "Visibility Settings": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1797\u17b6\u1796\u1798\u17be\u179b\u1783\u17be\u1789", + "Reward System Name": "\u1788\u17d2\u1798\u17c4\u17c7\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179b\u17be\u1780\u1791\u17b9\u1780\u1785\u17b7\u178f\u17d2\u178f", + "Your system is running in production mode. You probably need to build the assets": "\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u179f\u17d2\u1790\u17b7\u178f\u1793\u17c5\u1780\u17d2\u1793\u17bb\u1784\u179b\u1780\u17d2\u1781\u1781\u178e\u17d2\u178c\u17a2\u1797\u17b7\u179c\u178c\u17d2\u178d\u1793\u17cd\u179a\u17bd\u1785\u179f\u1796\u17d2\u179c\u1782\u17d2\u179a\u1794\u17cb\u17d4 \u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u17b6\u1780\u178a\u1790\u17b6\u179c\u17b6\u1794\u17b6\u1793 build the assets \u179a\u17bd\u1785\u179a\u17b6\u179b\u17cb\u17d4", + "Your system is in development mode. Make sure to build the assets.": "\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u179f\u17d2\u1790\u17b7\u178f\u1793\u17c5\u1780\u17d2\u1793\u17bb\u1784\u179b\u1780\u17d2\u1781\u1781\u178e\u17d2\u178c\u1780\u17c6\u1796\u17bb\u1784\u17a2\u1797\u17b7\u179c\u178c\u17d2\u178d\u1793\u17cd\u17d4 \u178f\u17d2\u179a\u17bc\u179c\u1794\u17d2\u179a\u17b6\u1780\u178a\u1790\u17b6\u179c\u17b6\u1794\u17b6\u1793 build the assets \u179a\u17bd\u1785\u179a\u17b6\u179b\u17cb\u17d4", + "How to change database configuration": "\u179a\u1794\u17c0\u1794\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u179a\u1785\u1793\u17b6\u179f\u1798\u17d2\u1796\u17d0\u1793\u17d2\u1792\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799", + "Setup": "\u178a\u17c6\u17a1\u17be\u1784", + "NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.": "NexoPOS \u1794\u179a\u17b6\u1787\u17d0\u1799\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1791\u17c5\u1780\u17b6\u1793\u17cb\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u17d4 \u1780\u17c6\u17a0\u17bb\u179f\u1793\u17c1\u17c7\u17a2\u17b6\u1785\u1791\u17b6\u1780\u17cb\u1791\u1784\u1793\u17b9\u1784\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u1793\u17c5\u179b\u17be\u17a2\u1789\u17d2\u1789\u178f\u17d2\u178f\u17b7\u178a\u17c2\u179b\u1798\u17b6\u1793\u1780\u17d2\u1793\u17bb\u1784 .env \u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4 \u1780\u17b6\u179a\u178e\u17c2\u1793\u17b6\u17c6\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1798\u17a2\u17b6\u1785\u1798\u17b6\u1793\u1794\u17d2\u179a\u1799\u17c4\u1787\u1793\u17cd\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1787\u17bd\u1799\u17a2\u17d2\u1793\u1780\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u178a\u17c4\u17c7\u179f\u17d2\u179a\u17b6\u1799\u1794\u1789\u17d2\u17a0\u17b6\u1793\u17c1\u17c7\u17d4", + "Common Database Issues": "\u1794\u1789\u17d2\u17a0\u17b6\u1791\u17bc\u179a\u1791\u17c5 \u1791\u17b6\u1780\u17cb\u1791\u1784\u1793\u17b9\u1784\u1798\u17bc\u179b\u178a\u17d2\u178b\u17b6\u1793\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799", + "Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.": "\u179f\u17bc\u1798\u17a2\u1797\u17d0\u1799\u1791\u17c4\u179f \u1780\u17c6\u17a0\u17bb\u179f\u178a\u17c2\u179b\u1798\u17b7\u1793\u1794\u17b6\u1793\u1796\u17d2\u179a\u17c0\u1784\u1791\u17bb\u1780\u1794\u17b6\u1793\u1780\u17be\u178f\u17a1\u17be\u1784 \u179f\u17bc\u1798\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178f\u17be\u1798\u1798\u17d2\u178f\u1784\u1791\u17c0\u178f\u178a\u17c4\u1799\u1785\u17bb\u1785\u179b\u17be \"\u1796\u17d2\u1799\u17b6\u1799\u17b6\u1798\u200b\u1798\u17d2\u178f\u1784\u200b\u1791\u17c0\u178f\"\u17d4 \u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u1794\u1789\u17d2\u17a0\u17b6\u1793\u17c5\u178f\u17c2\u1780\u17be\u178f\u1798\u17b6\u1793 \u179f\u17bc\u1798\u1794\u17d2\u179a\u17be\u179b\u1791\u17d2\u1792\u1795\u179b\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1798\u178a\u17be\u1798\u17d2\u1794\u17b8\u1791\u1791\u17bd\u179b\u1794\u17b6\u1793\u1787\u17c6\u1793\u17bd\u1799\u17d4", + "Documentation": "\u17af\u1780\u179f\u17b6\u179a", + "Log out": "\u1785\u17b6\u1780\u1785\u17c1\u1789", + "Retry": "\u1796\u17d2\u1799\u17b6\u1799\u17b6\u1798\u1798\u17d2\u178f\u1784\u1791\u17c0\u178f", + "If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.": "\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u17a2\u17d2\u1793\u1780\u1783\u17be\u1789\u1791\u17c6\u1796\u17d0\u179a\u1793\u17c1\u17c7 \u1793\u17c1\u17c7\u1798\u17b6\u1793\u1793\u17d0\u1799\u1790\u17b6 NexoPOS \u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17c6\u17a1\u17be\u1784\u1799\u17c9\u17b6\u1784\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u1793\u17c5\u179b\u17be\u1794\u17d2\u179a\u1796\u17d0\u1793\u17d2\u1792\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u17d4 \u178a\u17c4\u1799\u179f\u17b6\u179a\u1791\u17c6\u1796\u17d0\u179a\u1793\u17c1\u17c7\u1798\u17b6\u1793\u1793\u17d0\u1799\u1790\u17b6\u1787\u17b6 frontend \u178a\u17bc\u1785\u17d2\u1793\u17c1\u17c7 NexoPOS \u1798\u17b7\u1793\u1798\u17b6\u1793 frontend \u1793\u17c5\u17a1\u17be\u1799\u1791\u17c1\u1796\u17c1\u179b\u1793\u17c1\u17c7\u17d4 \u1791\u17c6\u1796\u17d0\u179a\u1793\u17c1\u17c7\u1794\u1784\u17d2\u17a0\u17b6\u1789\u178f\u17c6\u178e\u1798\u17b6\u1793\u1794\u17d2\u179a\u1799\u17c4\u1787\u1793\u17cd\u178a\u17c2\u179b\u1793\u17b9\u1784\u1793\u17b6\u17c6\u17a2\u17d2\u1793\u1780\u1791\u17c5\u1780\u17b6\u1793\u17cb\u1798\u17bb\u1781\u1784\u17b6\u179a\u179f\u17c6\u1781\u17b6\u1793\u17cb\u17d7\u17d4", + "Sign Up": "\u1785\u17bb\u17c7\u1788\u17d2\u1798\u17c4\u17c7", + "Compute Products": "ផលិតផលគណនា", + "Unammed Section": "ផ្នែកគ្មានឈ្មោះ", + "%s order(s) has recently been deleted as they have expired.": "ការបញ្ជាទិញ %s ថ្មីៗនេះត្រូវបានលុប ដោយសារវាបានផុតកំណត់ហើយ។", + "%s products will be updated": "ផលិតផល %s នឹងត្រូវបានអាប់ដេត", + "Procurement %s": "លទ្ធកម្ម %s", + "You cannot assign the same unit to more than one selling unit.": "អ្នក​មិន​អាច​កំណត់​ឯកតា​ដូចគ្នា​ទៅ​ឱ្យ​ឯកតា​លក់​ច្រើន​ជាង​មួយ​ទេ។", + "The quantity to convert can\\'t be zero.": "បរិមាណដែលត្រូវបំប្លែងមិនអាចជាសូន្យទេ។", + "The source unit \"(%s)\" for the product \"%s": "ឯកតាប្រភព \"(%s)\" សម្រាប់ផលិតផល \"%s", + "The conversion from \"%s\" will cause a decimal value less than one count of the destination unit \"%s\".": "ការបម្លែងពី \"%s\" នឹងបណ្តាលឱ្យតម្លៃទសភាគតិចជាងចំនួនមួយនៃឯកតាទិសដៅ \"%s\" ។", + "{customer_first_name}: displays the customer first name.": "{customer_first_name}៖ បង្ហាញឈ្មោះអតិថិជន។", + "{customer_last_name}: displays the customer last name.": "{customer_last_name}៖ បង្ហាញនាមត្រកូលរបស់អតិថិជន។", + "No Unit Selected": "មិនបានជ្រើសរើសឯកតាទេ។", + "Unit Conversion : {product}": "ការបំប្លែងឯកតា៖ {ផលិតផល}", + "Convert {quantity} available": "បំប្លែង {quantity} មាន", + "The quantity should be greater than 0": "បរិមាណគួរតែធំជាង 0", + "The provided quantity can\\'t result in any convertion for unit \"{destination}\"": "បរិមាណដែលបានផ្តល់មិនអាចបណ្តាលឱ្យមានការបំប្លែងណាមួយសម្រាប់ឯកតា \"{ទិសដៅ}\"", + "Conversion Warning": "ការព្រមានអំពីការបំប្លែង", + "Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?": "មានតែ {quantity}({source}) ប៉ុណ្ណោះដែលអាចបំប្លែងទៅជា {destinationCount}({destination})។ តើអ្នកចង់បន្តទេ?", + "Confirm Conversion": "បញ្ជាក់ការបំប្លែង", + "You\\'re about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?": "អ្នករៀបនឹងបំប្លែង {quantity}({source}) ទៅជា {destinationCount}({destination})។ តើអ្នកចង់បន្តទេ?", + "Conversion Successful": "ការបំប្លែងបានជោគជ័យ", + "The product {product} has been converted successfully.": "ផលិតផល {product} ត្រូវបានបំប្លែងដោយជោគជ័យ។", + "An error occured while converting the product {product}": "កំហុស​មួយ​បាន​កើត​ឡើង​ពេល​បំប្លែង​ផលិតផល {product}", + "The quantity has been set to the maximum available": "បរិមាណត្រូវបានកំណត់ទៅអតិបរមាដែលមាន", + "The product {product} has no base unit": "ផលិតផល {product} មិនមានឯកតាមូលដ្ឋានទេ។", + "Developper Section": "ផ្នែកអ្នកអភិវឌ្ឍន៍", + "The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?": "មូលដ្ឋានទិន្នន័យនឹងត្រូវបានសម្អាត ហើយទិន្នន័យទាំងអស់នឹងត្រូវបានលុប។ មានតែអ្នកប្រើប្រាស់ និងតួនាទីប៉ុណ្ណោះដែលត្រូវបានរក្សាទុក។ តើអ្នកចង់បន្តទេ?", + "An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s": "កំហុស​មួយ​បាន​កើត​ឡើង​ពេល​បង្កើត​បាកូដ \"%s\" ដោយ​ប្រើ​ប្រភេទ \"%s\" សម្រាប់​ផលិតផល។ សូមប្រាកដថាតម្លៃបាកូដគឺត្រឹមត្រូវសម្រាប់ប្រភេទបាកូដដែលបានជ្រើសរើស។ ការយល់ដឹងបន្ថែម៖ %s" +} \ No newline at end of file diff --git a/lang/pt.json b/lang/pt.json index b1a74314f..0e9e8dacd 100644 --- a/lang/pt.json +++ b/lang/pt.json @@ -1 +1,2696 @@ -{"OK":"OK","Howdy, {name}":"Ol\u00e1, {nome}","This field is required.":"Este campo \u00e9 obrigat\u00f3rio.","This field must contain a valid email address.":"Este campo deve conter um endere\u00e7o de e-mail v\u00e1lido.","Filters":"Filtros","Has Filters":"Tem filtros","{entries} entries selected":"{entries} entradas selecionadas","Download":"Download","There is nothing to display...":"N\u00e3o h\u00e1 nada para mostrar...","Bulk Actions":"A\u00e7\u00f5es em massa","displaying {perPage} on {items} items":"exibindo {perPage} em {items} itens","The document has been generated.":"O documento foi gerado.","Unexpected error occurred.":"Ocorreu um erro inesperado.","Clear Selected Entries ?":"Limpar entradas selecionadas?","Would you like to clear all selected entries ?":"Deseja limpar todas as entradas selecionadas?","Would you like to perform the selected bulk action on the selected entries ?":"Deseja executar a a\u00e7\u00e3o em massa selecionada nas entradas selecionadas?","No selection has been made.":"Nenhuma sele\u00e7\u00e3o foi feita.","No action has been selected.":"Nenhuma a\u00e7\u00e3o foi selecionada.","N\/D":"N\/D","Range Starts":"In\u00edcio do intervalo","Range Ends":"Fim do intervalo","Sun":"sol","Mon":"seg","Tue":"ter","Wed":"Casar","Fri":"Sex","Sat":"Sentado","Date":"Encontro","N\/A":"N \/ D","Nothing to display":"Nada para exibir","Unknown Status":"Status desconhecido","Password Forgotten ?":"Senha esquecida ?","Sign In":"Entrar","Register":"Registro","An unexpected error occurred.":"Ocorreu um erro inesperado.","Unable to proceed the form is not valid.":"N\u00e3o \u00e9 poss\u00edvel continuar o formul\u00e1rio n\u00e3o \u00e9 v\u00e1lido.","Save Password":"Salvar senha","Remember Your Password ?":"Lembrar sua senha?","Submit":"Enviar","Already registered ?":"J\u00e1 registrado ?","Best Cashiers":"Melhores caixas","No result to display.":"Nenhum resultado para exibir.","Well.. nothing to show for the meantime.":"Bem .. nada para mostrar por enquanto.","Best Customers":"Melhores clientes","Well.. nothing to show for the meantime":"Bem .. nada para mostrar por enquanto","Total Sales":"Vendas totais","Today":"Hoje","Total Refunds":"Reembolsos totais","Clients Registered":"Clientes cadastrados","Commissions":"Comiss\u00f5es","Total":"Total","Discount":"Desconto","Status":"Status","Paid":"Pago","Partially Paid":"Parcialmente pago","Unpaid":"N\u00e3o pago","Hold":"Segure","Void":"Vazio","Refunded":"Devolveu","Partially Refunded":"Parcialmente ressarcido","Incomplete Orders":"Pedidos incompletos","Expenses":"Despesas","Weekly Sales":"Vendas semanais","Week Taxes":"Impostos semanais","Net Income":"Resultado l\u00edquido","Week Expenses":"Despesas semanais","Current Week":"Semana atual","Previous Week":"Semana anterior","Order":"Pedido","Refresh":"Atualizar","Upload":"Envio","Enabled":"Habilitado","Disabled":"Desativado","Enable":"Habilitar","Disable":"Desativar","Gallery":"Galeria","Medias Manager":"Gerenciador de M\u00eddias","Click Here Or Drop Your File To Upload":"Clique aqui ou solte seu arquivo para fazer upload","Nothing has already been uploaded":"Nada j\u00e1 foi carregado","File Name":"Nome do arquivo","Uploaded At":"Carregado em","By":"Por","Previous":"Anterior","Next":"Pr\u00f3ximo","Use Selected":"Usar selecionado","Clear All":"Limpar tudo","Confirm Your Action":"Confirme sua a\u00e7\u00e3o","Would you like to clear all the notifications ?":"Deseja limpar todas as notifica\u00e7\u00f5es?","Permissions":"Permiss\u00f5es","Payment Summary":"Resumo do pagamento","Sub Total":"Subtotal","Shipping":"Envio","Coupons":"Cupons","Taxes":"Impostos","Change":"Mudar","Order Status":"Status do pedido","Customer":"Cliente","Type":"Modelo","Delivery Status":"Status de entrega","Save":"Salve \ue051","Processing Status":"Status de processamento","Payment Status":"Status do pagamento","Products":"Produtos","Refunded Products":"Produtos reembolsados","Would you proceed ?":"Voc\u00ea prosseguiria?","The processing status of the order will be changed. Please confirm your action.":"O status de processamento do pedido ser\u00e1 alterado. Por favor, confirme sua a\u00e7\u00e3o.","The delivery status of the order will be changed. Please confirm your action.":"O status de entrega do pedido ser\u00e1 alterado. Por favor, confirme sua a\u00e7\u00e3o.","Instalments":"Parcelas","Create":"Crio","Add Instalment":"Adicionar Parcela","Would you like to create this instalment ?":"Deseja criar esta parcela?","An unexpected error has occurred":"Ocorreu um erro inesperado","Would you like to delete this instalment ?":"Deseja excluir esta parcela?","Would you like to update that instalment ?":"Voc\u00ea gostaria de atualizar essa parcela?","Print":"Imprimir","Store Details":"Detalhes da loja","Order Code":"C\u00f3digo de encomenda","Cashier":"Caixa","Billing Details":"Detalhes de faturamento","Shipping Details":"Detalhes de envio","Product":"produtos","Unit Price":"Pre\u00e7o unit\u00e1rio","Quantity":"Quantidade","Tax":"Imposto","Total Price":"Pre\u00e7o total","Expiration Date":"Data de validade","Due":"Vencimento","Customer Account":"Conta de cliente","Payment":"Pagamento","No payment possible for paid order.":"Nenhum pagamento poss\u00edvel para pedido pago.","Payment History":"Hist\u00f3rico de pagamento","Unable to proceed the form is not valid":"N\u00e3o \u00e9 poss\u00edvel continuar o formul\u00e1rio n\u00e3o \u00e9 v\u00e1lido","Please provide a valid value":"Forne\u00e7a um valor v\u00e1lido","Refund With Products":"Reembolso com produtos","Refund Shipping":"Reembolso de envio","Add Product":"Adicionar produto","Damaged":"Danificado","Unspoiled":"Intacto","Summary":"Resumo","Payment Gateway":"Gateway de pagamento","Screen":"Tela","Select the product to perform a refund.":"Selecione o produto para realizar um reembolso.","Please select a payment gateway before proceeding.":"Selecione um gateway de pagamento antes de continuar.","There is nothing to refund.":"N\u00e3o h\u00e1 nada para reembolsar.","Please provide a valid payment amount.":"Forne\u00e7a um valor de pagamento v\u00e1lido.","The refund will be made on the current order.":"O reembolso ser\u00e1 feito no pedido atual.","Please select a product before proceeding.":"Selecione um produto antes de continuar.","Not enough quantity to proceed.":"Quantidade insuficiente para prosseguir.","Would you like to delete this product ?":"Deseja excluir este produto?","Customers":"Clientes","Dashboard":"Painel","Order Type":"Tipo de pedido","Orders":"Pedidos","Cash Register":"Caixa registradora","Reset":"Redefinir","Cart":"Carrinho","Comments":"Coment\u00e1rios","Settings":"Configura\u00e7\u00f5es","No products added...":"Nenhum produto adicionado...","Price":"Pre\u00e7o","Flat":"Plano","Pay":"Pagar","The product price has been updated.":"O pre\u00e7o do produto foi atualizado.","The editable price feature is disabled.":"O recurso de pre\u00e7o edit\u00e1vel est\u00e1 desativado.","Current Balance":"Saldo atual","Full Payment":"Pagamento integral","The customer account can only be used once per order. Consider deleting the previously used payment.":"A conta do cliente s\u00f3 pode ser usada uma vez por pedido. Considere excluir o pagamento usado anteriormente.","Not enough funds to add {amount} as a payment. Available balance {balance}.":"N\u00e3o h\u00e1 fundos suficientes para adicionar {amount} como pagamento. Saldo dispon\u00edvel {saldo}.","Confirm Full Payment":"Confirmar pagamento integral","A full payment will be made using {paymentType} for {total}":"Um pagamento integral ser\u00e1 feito usando {paymentType} para {total}","You need to provide some products before proceeding.":"Voc\u00ea precisa fornecer alguns produtos antes de prosseguir.","Unable to add the product, there is not enough stock. Remaining %s":"N\u00e3o foi poss\u00edvel adicionar o produto, n\u00e3o h\u00e1 estoque suficiente. Restos","Add Images":"Adicione imagens","New Group":"Novo grupo","Available Quantity":"Quantidade dispon\u00edvel","Delete":"Excluir","Would you like to delete this group ?":"Deseja excluir este grupo?","Your Attention Is Required":"Sua aten\u00e7\u00e3o \u00e9 necess\u00e1ria","Please select at least one unit group before you proceed.":"Selecione pelo menos um grupo de unidades antes de prosseguir.","Unable to proceed as one of the unit group field is invalid":"N\u00e3o \u00e9 poss\u00edvel continuar porque um dos campos do grupo de unidades \u00e9 inv\u00e1lido","Would you like to delete this variation ?":"Deseja excluir esta varia\u00e7\u00e3o?","Details":"Detalhes","Unable to proceed, no product were provided.":"N\u00e3o foi poss\u00edvel continuar, nenhum produto foi fornecido.","Unable to proceed, one or more product has incorrect values.":"N\u00e3o foi poss\u00edvel continuar, um ou mais produtos t\u00eam valores incorretos.","Unable to proceed, the procurement form is not valid.":"N\u00e3o \u00e9 poss\u00edvel prosseguir, o formul\u00e1rio de aquisi\u00e7\u00e3o n\u00e3o \u00e9 v\u00e1lido.","Unable to submit, no valid submit URL were provided.":"N\u00e3o foi poss\u00edvel enviar, nenhum URL de envio v\u00e1lido foi fornecido.","No title is provided":"Nenhum t\u00edtulo \u00e9 fornecido","Return":"Retornar","SKU":"SKU","Barcode":"C\u00f3digo de barras","Options":"Op\u00e7\u00f5es","The product already exists on the table.":"O produto j\u00e1 existe na mesa.","The specified quantity exceed the available quantity.":"A quantidade especificada excede a quantidade dispon\u00edvel.","Unable to proceed as the table is empty.":"N\u00e3o foi poss\u00edvel continuar porque a tabela est\u00e1 vazia.","The stock adjustment is about to be made. Would you like to confirm ?":"O ajuste de estoque est\u00e1 prestes a ser feito. Gostaria de confirmar?","More Details":"Mais detalhes","Useful to describe better what are the reasons that leaded to this adjustment.":"\u00datil para descrever melhor quais s\u00e3o os motivos que levaram a esse ajuste.","The reason has been updated.":"O motivo foi atualizado.","Would you like to remove this product from the table ?":"Deseja remover este produto da mesa?","Search":"Procurar","Unit":"Unidade","Operation":"Opera\u00e7\u00e3o","Procurement":"Compras","Value":"Valor","Search and add some products":"Pesquise e adicione alguns produtos","Proceed":"Continuar","Unable to proceed. Select a correct time range.":"N\u00e3o foi poss\u00edvel prosseguir. Selecione um intervalo de tempo correto.","Unable to proceed. The current time range is not valid.":"N\u00e3o foi poss\u00edvel prosseguir. O intervalo de tempo atual n\u00e3o \u00e9 v\u00e1lido.","Would you like to proceed ?":"Gostaria de continuar ?","An unexpected error has occurred.":"Ocorreu um erro inesperado.","No rules has been provided.":"Nenhuma regra foi fornecida.","No valid run were provided.":"Nenhuma execu\u00e7\u00e3o v\u00e1lida foi fornecida.","Unable to proceed, the form is invalid.":"N\u00e3o foi poss\u00edvel continuar, o formul\u00e1rio \u00e9 inv\u00e1lido.","Unable to proceed, no valid submit URL is defined.":"N\u00e3o foi poss\u00edvel continuar, nenhum URL de envio v\u00e1lido foi definido.","No title Provided":"Nenhum t\u00edtulo fornecido","General":"Em geral","Add Rule":"Adicionar regra","Save Settings":"Salvar configura\u00e7\u00f5es","An unexpected error occurred":"Ocorreu um erro inesperado","Ok":"OK","New Transaction":"Nova transa\u00e7\u00e3o","Close":"Fechar","Search Filters":"Filtros de pesquisa","Clear Filters":"Limpar filtros","Use Filters":"Usar filtros","Would you like to delete this order":"Deseja excluir este pedido","The current order will be void. This action will be recorded. Consider providing a reason for this operation":"O pedido atual ser\u00e1 anulado. Esta a\u00e7\u00e3o ser\u00e1 registrada. Considere fornecer um motivo para esta opera\u00e7\u00e3o","Order Options":"Op\u00e7\u00f5es de pedido","Payments":"Pagamentos","Refund & Return":"Reembolso e devolu\u00e7\u00e3o","Installments":"Parcelas","Order Refunds":"Reembolsos de pedidos","Condition":"Doen\u00e7a","The form is not valid.":"O formul\u00e1rio n\u00e3o \u00e9 v\u00e1lido.","Balance":"Equil\u00edbrio","Input":"Entrada","Register History":"Registre o hist\u00f3rico","Close Register":"Fechar registro","Cash In":"Dinheiro em caixa","Cash Out":"Saque","Register Options":"Op\u00e7\u00f5es de registro","Sales":"Vendas","History":"Hist\u00f3ria","Unable to open this register. Only closed register can be opened.":"N\u00e3o foi poss\u00edvel abrir este registro. Somente registro fechado pode ser aberto.","Open The Register":"Abra o registro","Exit To Orders":"Sair para pedidos","Looks like there is no registers. At least one register is required to proceed.":"Parece que n\u00e3o h\u00e1 registros. Pelo menos um registro \u00e9 necess\u00e1rio para prosseguir.","Create Cash Register":"Criar caixa registradora","Yes":"sim","No":"N\u00e3o","Load Coupon":"Carregar cupom","Apply A Coupon":"Aplicar um cupom","Load":"Carga","Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.":"Insira o c\u00f3digo do cupom que deve ser aplicado ao PDV. Se um cupom for emitido para um cliente, esse cliente deve ser selecionado previamente.","Click here to choose a customer.":"Clique aqui para escolher um cliente.","Coupon Name":"Nome do cupom","Usage":"Uso","Unlimited":"Ilimitado","Valid From":"V\u00e1lido de","Valid Till":"V\u00e1lida at\u00e9","Categories":"Categorias","Active Coupons":"Cupons ativos","Apply":"Aplicar","Cancel":"Cancelar","Coupon Code":"C\u00f3digo do cupom","The coupon is out from validity date range.":"O cupom est\u00e1 fora do intervalo de datas de validade.","The coupon has applied to the cart.":"O cupom foi aplicado ao carrinho.","Percentage":"Percentagem","Unknown Type":"Tipo desconhecido","You must select a customer before applying a coupon.":"Voc\u00ea deve selecionar um cliente antes de aplicar um cupom.","The coupon has been loaded.":"O cupom foi carregado.","Use":"Usar","No coupon available for this customer":"Nenhum cupom dispon\u00edvel para este cliente","Select Customer":"Selecionar cliente","No customer match your query...":"Nenhum cliente corresponde \u00e0 sua consulta...","Create a customer":"Crie um cliente","Customer Name":"nome do cliente","Save Customer":"Salvar cliente","No Customer Selected":"Nenhum cliente selecionado","In order to see a customer account, you need to select one customer.":"Para ver uma conta de cliente, voc\u00ea precisa selecionar um cliente.","Summary For":"Resumo para","Total Purchases":"Total de Compras","Last Purchases":"\u00daltimas compras","No orders...":"Sem encomendas...","Name":"Nome","No coupons for the selected customer...":"Nenhum cupom para o cliente selecionado...","Use Coupon":"Usar cupom","Rewards":"Recompensas","Points":"Pontos","Target":"Alvo","No rewards available the selected customer...":"Nenhuma recompensa dispon\u00edvel para o cliente selecionado...","Account Transaction":"Transa\u00e7\u00e3o da conta","Percentage Discount":"Desconto percentual","Flat Discount":"Desconto fixo","Use Customer ?":"Usar Cliente?","No customer is selected. Would you like to proceed with this customer ?":"Nenhum cliente est\u00e1 selecionado. Deseja continuar com este cliente?","Change Customer ?":"Mudar cliente?","Would you like to assign this customer to the ongoing order ?":"Deseja atribuir este cliente ao pedido em andamento?","Product Discount":"Desconto de produto","Cart Discount":"Desconto no carrinho","Hold Order":"Reter pedido","The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.":"A ordem atual ser\u00e1 colocada em espera. Voc\u00ea pode recuperar este pedido no bot\u00e3o de pedido pendente. Fornecer uma refer\u00eancia a ele pode ajud\u00e1-lo a identificar o pedido mais rapidamente.","Confirm":"confirme","Layaway Parameters":"Par\u00e2metros de Layaway","Minimum Payment":"Pagamento minimo","Instalments & Payments":"Parcelas e pagamentos","The final payment date must be the last within the instalments.":"A data final de pagamento deve ser a \u00faltima dentro das parcelas.","Amount":"Montante","You must define layaway settings before proceeding.":"Voc\u00ea deve definir as configura\u00e7\u00f5es de layaway antes de continuar.","Please provide instalments before proceeding.":"Por favor, forne\u00e7a as parcelas antes de prosseguir.","Unable to process, the form is not valid":"N\u00e3o foi poss\u00edvel continuar o formul\u00e1rio n\u00e3o \u00e9 v\u00e1lido","One or more instalments has an invalid date.":"Uma ou mais parcelas tem data inv\u00e1lida.","One or more instalments has an invalid amount.":"Uma ou mais parcelas tem valor inv\u00e1lido.","One or more instalments has a date prior to the current date.":"Uma ou mais parcelas tem data anterior \u00e0 data atual.","The payment to be made today is less than what is expected.":"O pagamento a ser feito hoje \u00e9 menor do que o esperado.","Total instalments must be equal to the order total.":"O total das parcelas deve ser igual ao total do pedido.","Order Note":"Nota de pedido","Note":"Observa\u00e7\u00e3o","More details about this order":"Mais detalhes sobre este pedido","Display On Receipt":"Exibir no recibo","Will display the note on the receipt":"Ir\u00e1 exibir a nota no recibo","Open":"Aberto","Order Settings":"Configura\u00e7\u00f5es do pedido","Define The Order Type":"Defina o tipo de pedido","Payment List":"Lista de pagamentos","List Of Payments":"Lista de pagamentos","No Payment added.":"Nenhum pagamento adicionado.","Select Payment":"Selecionar pagamento","Submit Payment":"Enviar pagamento","Layaway":"Guardado","On Hold":"Em espera","Tendered":"Licitado","Nothing to display...":"Nada para mostrar...","Product Price":"Pre\u00e7o do produto","Define Quantity":"Definir quantidade","Please provide a quantity":"Por favor, forne\u00e7a uma quantidade","Product \/ Service":"Produto \/ Servi\u00e7o","Unable to proceed. The form is not valid.":"N\u00e3o foi poss\u00edvel prosseguir. O formul\u00e1rio n\u00e3o \u00e9 v\u00e1lido.","An error has occurred while computing the product.":"Ocorreu um erro ao calcular o produto.","Provide a unique name for the product.":"Forne\u00e7a um nome exclusivo para o produto.","Define what is the sale price of the item.":"Defina qual \u00e9 o pre\u00e7o de venda do item.","Set the quantity of the product.":"Defina a quantidade do produto.","Assign a unit to the product.":"Atribua uma unidade ao produto.","Tax Type":"Tipo de imposto","Inclusive":"Inclusivo","Exclusive":"Exclusivo","Define what is tax type of the item.":"Defina qual \u00e9 o tipo de imposto do item.","Tax Group":"Grupo Fiscal","Choose the tax group that should apply to the item.":"Escolha o grupo de impostos que deve ser aplicado ao item.","Search Product":"Pesquisar produto","There is nothing to display. Have you started the search ?":"N\u00e3o h\u00e1 nada para exibir. J\u00e1 come\u00e7ou a pesquisa?","Shipping & Billing":"Envio e cobran\u00e7a","Tax & Summary":"Imposto e Resumo","Select Tax":"Selecionar imposto","Define the tax that apply to the sale.":"Defina o imposto que se aplica \u00e0 venda.","Define how the tax is computed":"Defina como o imposto \u00e9 calculado","Define when that specific product should expire.":"Defina quando esse produto espec\u00edfico deve expirar.","Renders the automatically generated barcode.":"Renderiza o c\u00f3digo de barras gerado automaticamente.","Adjust how tax is calculated on the item.":"Ajuste como o imposto \u00e9 calculado sobre o item.","Units & Quantities":"Unidades e quantidades","Sale Price":"Pre\u00e7o de venda","Wholesale Price":"Pre\u00e7o por atacado","Select":"Selecionar","The customer has been loaded":"O cliente foi carregado","Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.":"N\u00e3o \u00e9 poss\u00edvel selecionar o cliente padr\u00e3o. Parece que o cliente n\u00e3o existe mais. Considere alterar o cliente padr\u00e3o nas configura\u00e7\u00f5es.","OKAY":"OK","Some products has been added to the cart. Would youl ike to discard this order ?":"Alguns produtos foram adicionados ao carrinho. Voc\u00ea gostaria de descartar este pedido?","This coupon is already added to the cart":"Este cupom j\u00e1 foi adicionado ao carrinho","No tax group assigned to the order":"Nenhum grupo de impostos atribu\u00eddo ao pedido","Unable to proceed":"N\u00e3o foi poss\u00edvel continuar","Layaway defined":"Layaway definido","Partially paid orders are disabled.":"Pedidos parcialmente pagos est\u00e3o desabilitados.","An order is currently being processed.":"Um pedido est\u00e1 sendo processado.","Okay":"OK","An unexpected error has occurred while fecthing taxes.":"Ocorreu um erro inesperado durante a coleta de impostos.","Loading...":"Carregando...","Profile":"Perfil","Logout":"Sair","Unnamed Page":"P\u00e1gina sem nome","No description":"Sem descri\u00e7\u00e3o","Provide a name to the resource.":"Forne\u00e7a um nome para o recurso.","Edit":"Editar","Would you like to delete this ?":"Deseja excluir isso?","Delete Selected Groups":"Excluir grupos selecionados","Activate Your Account":"Ative sua conta","The account you have created for __%s__, require an activation. In order to proceed, please click on the following link":"A conta que voc\u00ea criou para __%s__ requer uma ativa\u00e7\u00e3o. Para prosseguir, clique no link a seguir","Password Recovered":"Senha recuperada","Your password has been successfully updated on __%s__. You can now login with your new password.":"Sua senha foi atualizada com sucesso em __%s__. Agora voc\u00ea pode fazer login com sua nova senha.","Password Recovery":"Recupera\u00e7\u00e3o de senha","Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ":"Algu\u00e9m solicitou a redefini\u00e7\u00e3o de sua senha em __\"%s\"__. Se voc\u00ea se lembrar de ter feito essa solicita\u00e7\u00e3o, prossiga clicando no bot\u00e3o abaixo.","Reset Password":"Redefinir senha","New User Registration":"Registo de novo utilizador","Your Account Has Been Created":"Sua conta foi criada","Login":"Conecte-se","Save Coupon":"Salvar cupom","This field is required":"Este campo \u00e9 obrigat\u00f3rio","The form is not valid. Please check it and try again":"O formul\u00e1rio n\u00e3o \u00e9 v\u00e1lido. Por favor verifique e tente novamente","mainFieldLabel not defined":"mainFieldLabel n\u00e3o definido","Create Customer Group":"Criar grupo de clientes","Save a new customer group":"Salvar um novo grupo de clientes","Update Group":"Atualizar grupo","Modify an existing customer group":"Modificar um grupo de clientes existente","Managing Customers Groups":"Gerenciando Grupos de Clientes","Create groups to assign customers":"Crie grupos para atribuir clientes","Create Customer":"Criar cliente","Managing Customers":"Gerenciando clientes","List of registered customers":"Lista de clientes cadastrados","Log out":"Sair","Your Module":"Seu M\u00f3dulo","Choose the zip file you would like to upload":"Escolha o arquivo zip que voc\u00ea gostaria de enviar","Managing Orders":"Gerenciando Pedidos","Manage all registered orders.":"Gerencie todos os pedidos registrados.","Receipt — %s":"Recibo — %s","Order receipt":"Recibo de ordem","Hide Dashboard":"Ocultar painel","Refund receipt":"Recibo de reembolso","Unknown Payment":"Pagamento desconhecido","Procurement Name":"Nome da aquisi\u00e7\u00e3o","Unable to proceed no products has been provided.":"N\u00e3o foi poss\u00edvel continuar nenhum produto foi fornecido.","Unable to proceed, one or more products is not valid.":"N\u00e3o foi poss\u00edvel continuar, um ou mais produtos n\u00e3o s\u00e3o v\u00e1lidos.","Unable to proceed the procurement form is not valid.":"N\u00e3o \u00e9 poss\u00edvel prosseguir o formul\u00e1rio de aquisi\u00e7\u00e3o n\u00e3o \u00e9 v\u00e1lido.","Unable to proceed, no submit url has been provided.":"N\u00e3o foi poss\u00edvel continuar, nenhum URL de envio foi fornecido.","SKU, Barcode, Product name.":"SKU, c\u00f3digo de barras, nome do produto.","Email":"E-mail","Phone":"Telefone","First Address":"Primeiro endere\u00e7o","Second Address":"Segundo endere\u00e7o","Address":"Endere\u00e7o","City":"Cidade","PO.Box":"Caixa postal","Description":"Descri\u00e7\u00e3o","Included Products":"Produtos inclu\u00eddos","Apply Settings":"Aplicar configura\u00e7\u00f5es","Basic Settings":"Configura\u00e7\u00f5es b\u00e1sicas","Visibility Settings":"Configura\u00e7\u00f5es de visibilidade","Unable to load the report as the timezone is not set on the settings.":"N\u00e3o foi poss\u00edvel carregar o relat\u00f3rio porque o fuso hor\u00e1rio n\u00e3o est\u00e1 definido nas configura\u00e7\u00f5es.","Year":"Ano","Recompute":"Recalcular","Income":"Renda","January":"Janeiro","March":"marchar","April":"abril","May":"Poderia","June":"junho","July":"Julho","August":"agosto","September":"setembro","October":"Outubro","November":"novembro","December":"dezembro","Sort Results":"Classificar resultados","Using Quantity Ascending":"Usando quantidade crescente","Using Quantity Descending":"Usando Quantidade Decrescente","Using Sales Ascending":"Usando o aumento de vendas","Using Sales Descending":"Usando vendas descendentes","Using Name Ascending":"Usando Nome Crescente","Using Name Descending":"Usando nome decrescente","Progress":"Progresso","Purchase Price":"Pre\u00e7o de compra","Profit":"Lucro","Discounts":"Descontos","Tax Value":"Valor do imposto","Reward System Name":"Nome do sistema de recompensa","Go Back":"Volte","Try Again":"Tente novamente","Home":"Casa","Not Allowed Action":"A\u00e7\u00e3o n\u00e3o permitida","How to change database configuration":"Como alterar a configura\u00e7\u00e3o do banco de dados","Common Database Issues":"Problemas comuns de banco de dados","Setup":"Configurar","Method Not Allowed":"M\u00e9todo n\u00e3o permitido","Documentation":"Documenta\u00e7\u00e3o","Missing Dependency":"Depend\u00eancia ausente","Continue":"Continuar","Module Version Mismatch":"Incompatibilidade de vers\u00e3o do m\u00f3dulo","Access Denied":"Acesso negado","Sign Up":"Inscrever-se","An invalid date were provided. Make sure it a prior date to the actual server date.":"Uma data inv\u00e1lida foi fornecida. Certifique-se de uma data anterior \u00e0 data real do servidor.","Computing report from %s...":"Calculando relat\u00f3rio de %s...","The operation was successful.":"A opera\u00e7\u00e3o foi bem sucedida.","Unable to find a module having the identifier\/namespace \"%s\"":"N\u00e3o foi poss\u00edvel encontrar um m\u00f3dulo com o identificador\/namespace \"%s\"","What is the CRUD single resource name ? [Q] to quit.":"Qual \u00e9 o nome do recurso \u00fanico CRUD? [Q] para sair.","Which table name should be used ? [Q] to quit.":"Qual nome de tabela deve ser usado? [Q] para sair.","If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Se o seu recurso CRUD tiver uma rela\u00e7\u00e3o, mencione-a como segue \"foreign_table, estrangeira_key, local_key\" ? [S] para pular, [Q] para sair.","Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Adicionar uma nova rela\u00e7\u00e3o? Mencione-o como segue \"tabela_estrangeira, chave_estrangeira, chave_local\" ? [S] para pular, [Q] para sair.","Not enough parameters provided for the relation.":"N\u00e3o h\u00e1 par\u00e2metros suficientes fornecidos para a rela\u00e7\u00e3o.","The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"":"O recurso CRUD \"%s\" para o m\u00f3dulo \"%s\" foi gerado em \"%s\"","The CRUD resource \"%s\" has been generated at %s":"O recurso CRUD \"%s\" foi gerado em %s","Localization for %s extracted to %s":"Localiza\u00e7\u00e3o para %s extra\u00edda para %s","Unable to find the requested module.":"N\u00e3o foi poss\u00edvel encontrar o m\u00f3dulo solicitado.","Version":"Vers\u00e3o","Path":"Caminho","Index":"\u00cdndice","Entry Class":"Classe de entrada","Routes":"Rotas","Api":"API","Controllers":"Controladores","Views":"Visualiza\u00e7\u00f5es","Attribute":"Atributo","Namespace":"Namespace","Author":"Autor","There is no migrations to perform for the module \"%s\"":"N\u00e3o h\u00e1 migra\u00e7\u00f5es a serem executadas para o m\u00f3dulo \"%s\"","The module migration has successfully been performed for the module \"%s\"":"A migra\u00e7\u00e3o do m\u00f3dulo foi realizada com sucesso para o m\u00f3dulo \"%s\"","The product barcodes has been refreshed successfully.":"Os c\u00f3digos de barras do produto foram atualizados com sucesso.","The demo has been enabled.":"A demonstra\u00e7\u00e3o foi habilitada.","What is the store name ? [Q] to quit.":"Qual \u00e9 o nome da loja? [Q] para sair.","Please provide at least 6 characters for store name.":"Forne\u00e7a pelo menos 6 caracteres para o nome da loja.","What is the administrator password ? [Q] to quit.":"Qual \u00e9 a senha do administrador? [Q] para sair.","Please provide at least 6 characters for the administrator password.":"Forne\u00e7a pelo menos 6 caracteres para a senha do administrador.","What is the administrator email ? [Q] to quit.":"Qual \u00e9 o e-mail do administrador? [Q] para sair.","Please provide a valid email for the administrator.":"Forne\u00e7a um e-mail v\u00e1lido para o administrador.","What is the administrator username ? [Q] to quit.":"Qual \u00e9 o nome de usu\u00e1rio do administrador? [Q] para sair.","Please provide at least 5 characters for the administrator username.":"Forne\u00e7a pelo menos 5 caracteres para o nome de usu\u00e1rio do administrador.","Downloading latest dev build...":"Baixando a vers\u00e3o de desenvolvimento mais recente...","Reset project to HEAD...":"Redefinir projeto para HEAD...","Credit":"Cr\u00e9dito","Debit":"D\u00e9bito","Coupons List":"Lista de cupons","Display all coupons.":"Exibir todos os cupons.","No coupons has been registered":"Nenhum cupom foi registrado","Add a new coupon":"Adicionar um novo cupom","Create a new coupon":"Criar um novo cupom","Register a new coupon and save it.":"Registre um novo cupom e salve-o.","Edit coupon":"Editar cupom","Modify Coupon.":"Modificar cupom.","Return to Coupons":"Voltar para cupons","Might be used while printing the coupon.":"Pode ser usado durante a impress\u00e3o do cupom.","Define which type of discount apply to the current coupon.":"Defina que tipo de desconto se aplica ao cupom atual.","Discount Value":"Valor do desconto","Define the percentage or flat value.":"Defina a porcentagem ou valor fixo.","Valid Until":"V\u00e1lido at\u00e9","Minimum Cart Value":"Valor m\u00ednimo do carrinho","What is the minimum value of the cart to make this coupon eligible.":"Qual \u00e9 o valor m\u00ednimo do carrinho para qualificar este cupom.","Maximum Cart Value":"Valor m\u00e1ximo do carrinho","Valid Hours Start":"Hor\u00e1rios v\u00e1lidos de in\u00edcio","Define form which hour during the day the coupons is valid.":"Defina em qual hor\u00e1rio do dia os cupons s\u00e3o v\u00e1lidos.","Valid Hours End":"Fim do Hor\u00e1rio V\u00e1lido","Define to which hour during the day the coupons end stop valid.":"Defina a que horas durante o dia os cupons terminam em validade.","Limit Usage":"Limitar uso","Define how many time a coupons can be redeemed.":"Defina quantas vezes um cupom pode ser resgatado.","Select Products":"Selecionar produtos","The following products will be required to be present on the cart, in order for this coupon to be valid.":"Os seguintes produtos dever\u00e3o estar presentes no carrinho para que este cupom seja v\u00e1lido.","Select Categories":"Selecionar categorias","The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.":"Os produtos atribu\u00eddos a uma dessas categorias devem estar no carrinho, para que este cupom seja v\u00e1lido.","Created At":"Criado em","Undefined":"Indefinido","Delete a licence":"Excluir uma licen\u00e7a","Customer Accounts List":"Lista de contas de clientes","Display all customer accounts.":"Exibir todas as contas de clientes.","No customer accounts has been registered":"Nenhuma conta de cliente foi registrada","Add a new customer account":"Adicionar uma nova conta de cliente","Create a new customer account":"Criar uma nova conta de cliente","Register a new customer account and save it.":"Registre uma nova conta de cliente e salve-a.","Edit customer account":"Editar conta do cliente","Modify Customer Account.":"Modificar conta do cliente.","Return to Customer Accounts":"Retornar \u00e0s contas do cliente","This will be ignored.":"Isso ser\u00e1 ignorado.","Define the amount of the transaction":"Defina o valor da transa\u00e7\u00e3o","Deduct":"Deduzir","Add":"Adicionar","Define what operation will occurs on the customer account.":"Defina qual opera\u00e7\u00e3o ocorrer\u00e1 na conta do cliente.","Customer Coupons List":"Lista de cupons do cliente","Display all customer coupons.":"Exibir todos os cupons de clientes.","No customer coupons has been registered":"Nenhum cupom de cliente foi registrado","Add a new customer coupon":"Adicionar um novo cupom de cliente","Create a new customer coupon":"Criar um novo cupom de cliente","Register a new customer coupon and save it.":"Registre um novo cupom de cliente e salve-o.","Edit customer coupon":"Editar cupom do cliente","Modify Customer Coupon.":"Modificar cupom do cliente.","Return to Customer Coupons":"Retorno aos cupons do cliente","Define how many time the coupon has been used.":"Defina quantas vezes o cupom foi usado.","Limit":"Limite","Define the maximum usage possible for this coupon.":"Defina o uso m\u00e1ximo poss\u00edvel para este cupom.","Code":"C\u00f3digo","Customers List":"Lista de clientes","Display all customers.":"Exibir todos os clientes.","No customers has been registered":"Nenhum cliente foi cadastrado","Add a new customer":"Adicionar um novo cliente","Create a new customer":"Criar um novo cliente","Register a new customer and save it.":"Registre um novo cliente e salve-o.","Edit customer":"Editar cliente","Modify Customer.":"Modificar Cliente.","Return to Customers":"Devolu\u00e7\u00e3o aos clientes","Provide a unique name for the customer.":"Forne\u00e7a um nome exclusivo para o cliente.","Group":"Grupo","Assign the customer to a group":"Atribuir o cliente a um grupo","Phone Number":"N\u00famero de telefone","Provide the customer phone number":"Informe o telefone do cliente","PO Box":"Caixa postal","Provide the customer PO.Box":"Forne\u00e7a a caixa postal do cliente","Not Defined":"N\u00e3o definido","Male":"Macho","Female":"F\u00eamea","Gender":"G\u00eanero","Billing Address":"endere\u00e7o de cobran\u00e7a","Billing phone number.":"N\u00famero de telefone de cobran\u00e7a.","Address 1":"Endere\u00e7o 1","Billing First Address.":"Primeiro endere\u00e7o de cobran\u00e7a.","Address 2":"Endere\u00e7o 2","Billing Second Address.":"Segundo endere\u00e7o de cobran\u00e7a.","Country":"Pa\u00eds","Billing Country.":"Pa\u00eds de faturamento.","Postal Address":"Endere\u00e7o postal","Company":"Companhia","Shipping Address":"Endere\u00e7o para envio","Shipping phone number.":"Telefone de envio.","Shipping First Address.":"Primeiro endere\u00e7o de envio.","Shipping Second Address.":"Segundo endere\u00e7o de envio.","Shipping Country.":"Pa\u00eds de envio.","Account Credit":"Cr\u00e9dito da conta","Owed Amount":"Valor devido","Purchase Amount":"Valor da compra","Delete a customers":"Excluir um cliente","Delete Selected Customers":"Excluir clientes selecionados","Customer Groups List":"Lista de grupos de clientes","Display all Customers Groups.":"Exibir todos os grupos de clientes.","No Customers Groups has been registered":"Nenhum Grupo de Clientes foi cadastrado","Add a new Customers Group":"Adicionar um novo grupo de clientes","Create a new Customers Group":"Criar um novo grupo de clientes","Register a new Customers Group and save it.":"Registre um novo Grupo de Clientes e salve-o.","Edit Customers Group":"Editar grupo de clientes","Modify Customers group.":"Modificar grupo de clientes.","Return to Customers Groups":"Retornar aos grupos de clientes","Reward System":"Sistema de recompensa","Select which Reward system applies to the group":"Selecione qual sistema de recompensa se aplica ao grupo","Minimum Credit Amount":"Valor m\u00ednimo de cr\u00e9dito","A brief description about what this group is about":"Uma breve descri\u00e7\u00e3o sobre o que \u00e9 este grupo","Created On":"Criado em","Customer Orders List":"Lista de pedidos do cliente","Display all customer orders.":"Exibir todos os pedidos dos clientes.","No customer orders has been registered":"Nenhum pedido de cliente foi registrado","Add a new customer order":"Adicionar um novo pedido de cliente","Create a new customer order":"Criar um novo pedido de cliente","Register a new customer order and save it.":"Registre um novo pedido de cliente e salve-o.","Edit customer order":"Editar pedido do cliente","Modify Customer Order.":"Modificar Pedido do Cliente.","Return to Customer Orders":"Retorno aos pedidos do cliente","Created at":"Criado em","Customer Id":"Identifica\u00e7\u00e3o do Cliente","Discount Percentage":"Porcentagem de desconto","Discount Type":"Tipo de desconto","Final Payment Date":"Data de Pagamento Final","Id":"Eu ia","Process Status":"Status do processo","Shipping Rate":"Taxa de envio","Shipping Type":"Tipo de envio","Title":"T\u00edtulo","Total installments":"Parcelas totais","Updated at":"Atualizado em","Uuid":"Uuid","Voidance Reason":"Motivo de anula\u00e7\u00e3o","Customer Rewards List":"Lista de recompensas do cliente","Display all customer rewards.":"Exiba todas as recompensas do cliente.","No customer rewards has been registered":"Nenhuma recompensa de cliente foi registrada","Add a new customer reward":"Adicionar uma nova recompensa ao cliente","Create a new customer reward":"Criar uma nova recompensa para o cliente","Register a new customer reward and save it.":"Registre uma nova recompensa de cliente e salve-a.","Edit customer reward":"Editar recompensa do cliente","Modify Customer Reward.":"Modificar a recompensa do cliente.","Return to Customer Rewards":"Retornar \u00e0s recompensas do cliente","Reward Name":"Nome da recompensa","Last Update":"\u00daltima atualiza\u00e7\u00e3o","All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.":"Todas as entidades vinculadas a esta categoria produzir\u00e3o um \"cr\u00e9dito\" ou \"d\u00e9bito\" no hist\u00f3rico do fluxo de caixa.","Account":"Conta","Provide the accounting number for this category.":"Forne\u00e7a o n\u00famero cont\u00e1bil para esta categoria.","Active":"Ativo","Users Group":"Grupo de usu\u00e1rios","None":"Nenhum","Recurring":"Recorrente","Start of Month":"In\u00edcio do m\u00eas","Mid of Month":"Meio do m\u00eas","End of Month":"Fim do m\u00eas","X days Before Month Ends":"X dias antes do fim do m\u00eas","X days After Month Starts":"X dias ap\u00f3s o in\u00edcio do m\u00eas","Occurrence":"Ocorr\u00eancia","Occurrence Value":"Valor de ocorr\u00eancia","Must be used in case of X days after month starts and X days before month ends.":"Deve ser usado no caso de X dias ap\u00f3s o in\u00edcio do m\u00eas e X dias antes do t\u00e9rmino do m\u00eas.","Category":"Categoria","Month Starts":"In\u00edcio do m\u00eas","Month Middle":"M\u00eas M\u00e9dio","Month Ends":"Fim do m\u00eas","X Days Before Month Ends":"X dias antes do fim do m\u00eas","Hold Orders List":"Lista de pedidos em espera","Display all hold orders.":"Exibir todos os pedidos de espera.","No hold orders has been registered":"Nenhuma ordem de espera foi registrada","Add a new hold order":"Adicionar um novo pedido de reten\u00e7\u00e3o","Create a new hold order":"Criar um novo pedido de reten\u00e7\u00e3o","Register a new hold order and save it.":"Registre uma nova ordem de espera e salve-a.","Edit hold order":"Editar pedido de espera","Modify Hold Order.":"Modificar ordem de espera.","Return to Hold Orders":"Retornar para reter pedidos","Updated At":"Atualizado em","Restrict the orders by the creation date.":"Restrinja os pedidos pela data de cria\u00e7\u00e3o.","Created Between":"Criado entre","Restrict the orders by the payment status.":"Restrinja os pedidos pelo status do pagamento.","Voided":"Anulado","Restrict the orders by the author.":"Restringir as ordens do autor.","Restrict the orders by the customer.":"Restringir os pedidos pelo cliente.","Restrict the orders to the cash registers.":"Restrinja os pedidos \u00e0s caixas registradoras.","Orders List":"Lista de pedidos","Display all orders.":"Exibir todos os pedidos.","No orders has been registered":"Nenhum pedido foi registrado","Add a new order":"Adicionar um novo pedido","Create a new order":"Criar um novo pedido","Register a new order and save it.":"Registre um novo pedido e salve-o.","Edit order":"Editar pedido","Modify Order.":"Ordem modificada.","Return to Orders":"Retornar aos pedidos","Discount Rate":"Taxa de desconto","The order and the attached products has been deleted.":"O pedido e os produtos anexados foram exclu\u00eddos.","Invoice":"Fatura","Receipt":"Recibo","Refund Receipt":"Recibo de reembolso","Order Instalments List":"Lista de Parcelas de Pedidos","Display all Order Instalments.":"Exibir todas as parcelas do pedido.","No Order Instalment has been registered":"Nenhuma Parcela de Pedido foi registrada","Add a new Order Instalment":"Adicionar uma nova parcela do pedido","Create a new Order Instalment":"Criar uma nova parcela do pedido","Register a new Order Instalment and save it.":"Registre uma nova Parcela de Pedido e salve-a.","Edit Order Instalment":"Editar parcela do pedido","Modify Order Instalment.":"Modificar Parcela do Pedido.","Return to Order Instalment":"Retorno \u00e0 Parcela do Pedido","Order Id":"C\u00f3digo do pedido","Payment Types List":"Lista de Tipos de Pagamento","Display all payment types.":"Exibir todos os tipos de pagamento.","No payment types has been registered":"Nenhum tipo de pagamento foi registrado","Add a new payment type":"Adicionar um novo tipo de pagamento","Create a new payment type":"Criar um novo tipo de pagamento","Register a new payment type and save it.":"Registre um novo tipo de pagamento e salve-o.","Edit payment type":"Editar tipo de pagamento","Modify Payment Type.":"Modificar Tipo de Pagamento.","Return to Payment Types":"Voltar aos Tipos de Pagamento","Label":"Etiqueta","Provide a label to the resource.":"Forne\u00e7a um r\u00f3tulo para o recurso.","Identifier":"Identificador","A payment type having the same identifier already exists.":"J\u00e1 existe um tipo de pagamento com o mesmo identificador.","Unable to delete a read-only payments type.":"N\u00e3o foi poss\u00edvel excluir um tipo de pagamento somente leitura.","Readonly":"Somente leitura","Procurements List":"Lista de aquisi\u00e7\u00f5es","Display all procurements.":"Exibir todas as aquisi\u00e7\u00f5es.","No procurements has been registered":"Nenhuma compra foi registrada","Add a new procurement":"Adicionar uma nova aquisi\u00e7\u00e3o","Create a new procurement":"Criar uma nova aquisi\u00e7\u00e3o","Register a new procurement and save it.":"Registre uma nova aquisi\u00e7\u00e3o e salve-a.","Edit procurement":"Editar aquisi\u00e7\u00e3o","Modify Procurement.":"Modificar Aquisi\u00e7\u00e3o.","Return to Procurements":"Voltar para Compras","Provider Id":"ID do provedor","Total Items":"Total de Itens","Provider":"Fornecedor","Procurement Products List":"Lista de Produtos de Aquisi\u00e7\u00e3o","Display all procurement products.":"Exibir todos os produtos de aquisi\u00e7\u00e3o.","No procurement products has been registered":"Nenhum produto de aquisi\u00e7\u00e3o foi registrado","Add a new procurement product":"Adicionar um novo produto de compras","Create a new procurement product":"Criar um novo produto de compras","Register a new procurement product and save it.":"Registre um novo produto de aquisi\u00e7\u00e3o e salve-o.","Edit procurement product":"Editar produto de aquisi\u00e7\u00e3o","Modify Procurement Product.":"Modificar Produto de Aquisi\u00e7\u00e3o.","Return to Procurement Products":"Devolu\u00e7\u00e3o para Produtos de Aquisi\u00e7\u00e3o","Define what is the expiration date of the product.":"Defina qual \u00e9 a data de validade do produto.","On":"Sobre","Category Products List":"Lista de produtos da categoria","Display all category products.":"Exibir todos os produtos da categoria.","No category products has been registered":"Nenhum produto da categoria foi registrado","Add a new category product":"Adicionar um novo produto de categoria","Create a new category product":"Criar um novo produto de categoria","Register a new category product and save it.":"Registre um novo produto de categoria e salve-o.","Edit category product":"Editar produto de categoria","Modify Category Product.":"Modifique o produto da categoria.","Return to Category Products":"Voltar para a categoria Produtos","No Parent":"Nenhum pai","Preview":"Visualizar","Provide a preview url to the category.":"Forne\u00e7a um URL de visualiza\u00e7\u00e3o para a categoria.","Displays On POS":"Exibe no PDV","Parent":"Pai","If this category should be a child category of an existing category":"Se esta categoria deve ser uma categoria filha de uma categoria existente","Total Products":"Produtos totais","Products List":"Lista de produtos","Display all products.":"Exibir todos os produtos.","No products has been registered":"Nenhum produto foi cadastrado","Add a new product":"Adicionar um novo produto","Create a new product":"Criar um novo produto","Register a new product and save it.":"Registre um novo produto e salve-o.","Edit product":"Editar produto","Modify Product.":"Modificar Produto.","Return to Products":"Retornar aos produtos","Assigned Unit":"Unidade Atribu\u00edda","The assigned unit for sale":"A unidade atribu\u00edda \u00e0 venda","Define the regular selling price.":"Defina o pre\u00e7o de venda normal.","Define the wholesale price.":"Defina o pre\u00e7o de atacado.","Preview Url":"URL de visualiza\u00e7\u00e3o","Provide the preview of the current unit.":"Forne\u00e7a a visualiza\u00e7\u00e3o da unidade atual.","Identification":"Identifica\u00e7\u00e3o","Define the barcode value. Focus the cursor here before scanning the product.":"Defina o valor do c\u00f3digo de barras. Foque o cursor aqui antes de digitalizar o produto.","Define the barcode type scanned.":"Defina o tipo de c\u00f3digo de barras lido.","EAN 8":"EAN 8","EAN 13":"EAN 13","Codabar":"Codabar","Code 128":"C\u00f3digo 128","Code 39":"C\u00f3digo 39","Code 11":"C\u00f3digo 11","UPC A":"UPC A","UPC E":"UPC E","Barcode Type":"Tipo de c\u00f3digo de barras","Select to which category the item is assigned.":"Selecione a qual categoria o item est\u00e1 atribu\u00eddo.","Materialized Product":"Produto materializado","Dematerialized Product":"Produto Desmaterializado","Define the product type. Applies to all variations.":"Defina o tipo de produto. Aplica-se a todas as varia\u00e7\u00f5es.","Product Type":"Tipo de Produto","Define a unique SKU value for the product.":"Defina um valor de SKU exclusivo para o produto.","On Sale":"\u00c0 venda","Hidden":"Escondido","Define whether the product is available for sale.":"Defina se o produto est\u00e1 dispon\u00edvel para venda.","Enable the stock management on the product. Will not work for service or uncountable products.":"Habilite o gerenciamento de estoque no produto. N\u00e3o funcionar\u00e1 para servi\u00e7os ou produtos incont\u00e1veis.","Stock Management Enabled":"Gerenciamento de estoque ativado","Units":"Unidades","Accurate Tracking":"Rastreamento preciso","What unit group applies to the actual item. This group will apply during the procurement.":"Qual grupo de unidades se aplica ao item real. Este grupo ser\u00e1 aplicado durante a aquisi\u00e7\u00e3o.","Unit Group":"Grupo de unidades","Determine the unit for sale.":"Determine a unidade \u00e0 venda.","Selling Unit":"Unidade de venda","Expiry":"Termo","Product Expires":"O produto expira","Set to \"No\" expiration time will be ignored.":"O tempo de expira\u00e7\u00e3o definido como \"N\u00e3o\" ser\u00e1 ignorado.","Prevent Sales":"Impedir vendas","Allow Sales":"Permitir vendas","Determine the action taken while a product has expired.":"Determine a a\u00e7\u00e3o tomada enquanto um produto expirou.","On Expiration":"Na expira\u00e7\u00e3o","Select the tax group that applies to the product\/variation.":"Selecione o grupo de impostos que se aplica ao produto\/varia\u00e7\u00e3o.","Define what is the type of the tax.":"Defina qual \u00e9 o tipo de imposto.","Images":"Imagens","Image":"Imagem","Choose an image to add on the product gallery":"Escolha uma imagem para adicionar na galeria de produtos","Is Primary":"\u00c9 prim\u00e1rio","Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.":"Defina se a imagem deve ser prim\u00e1ria. Se houver mais de uma imagem prim\u00e1ria, uma ser\u00e1 escolhida para voc\u00ea.","Sku":"Sku","Materialized":"Materializado","Dematerialized":"Desmaterializado","Available":"Dispon\u00edvel","See Quantities":"Ver Quantidades","See History":"Ver hist\u00f3rico","Would you like to delete selected entries ?":"Deseja excluir as entradas selecionadas?","Product Histories":"Hist\u00f3ricos de produtos","Display all product histories.":"Exibir todos os hist\u00f3ricos de produtos.","No product histories has been registered":"Nenhum hist\u00f3rico de produto foi registrado","Add a new product history":"Adicionar um novo hist\u00f3rico de produtos","Create a new product history":"Criar um novo hist\u00f3rico de produtos","Register a new product history and save it.":"Registre um novo hist\u00f3rico de produtos e salve-o.","Edit product history":"Editar hist\u00f3rico do produto","Modify Product History.":"Modifique o hist\u00f3rico do produto.","Return to Product Histories":"Voltar aos hist\u00f3ricos de produtos","After Quantity":"Ap\u00f3s a quantidade","Before Quantity":"Antes da quantidade","Operation Type":"Tipo de opera\u00e7\u00e3o","Order id":"C\u00f3digo do pedido","Procurement Id":"ID de aquisi\u00e7\u00e3o","Procurement Product Id":"ID do produto de aquisi\u00e7\u00e3o","Product Id":"ID do produto","Unit Id":"ID da unidade","P. Quantity":"P. Quantidade","N. Quantity":"N. Quantidade","Stocked":"Abastecido","Defective":"Defeituoso","Deleted":"Exclu\u00eddo","Removed":"Removido","Returned":"Devolvida","Sold":"Vendido","Lost":"Perdido","Added":"Adicionado","Incoming Transfer":"Transfer\u00eancia de entrada","Outgoing Transfer":"Transfer\u00eancia de sa\u00edda","Transfer Rejected":"Transfer\u00eancia rejeitada","Transfer Canceled":"Transfer\u00eancia cancelada","Void Return":"Devolu\u00e7\u00e3o nula","Adjustment Return":"Retorno de Ajuste","Adjustment Sale":"Venda de ajuste","Product Unit Quantities List":"Lista de Quantidades de Unidades de Produto","Display all product unit quantities.":"Exibe todas as quantidades de unidades do produto.","No product unit quantities has been registered":"Nenhuma quantidade de unidade de produto foi registrada","Add a new product unit quantity":"Adicionar uma nova quantidade de unidade de produto","Create a new product unit quantity":"Criar uma nova quantidade de unidade de produto","Register a new product unit quantity and save it.":"Registre uma nova quantidade de unidade de produto e salve-a.","Edit product unit quantity":"Editar quantidade da unidade do produto","Modify Product Unit Quantity.":"Modifique a quantidade da unidade do produto.","Return to Product Unit Quantities":"Devolu\u00e7\u00e3o para Quantidades de Unidades de Produto","Created_at":"Criado em","Product id":"ID do produto","Updated_at":"Updated_at","Providers List":"Lista de provedores","Display all providers.":"Exibir todos os provedores.","No providers has been registered":"Nenhum provedor foi cadastrado","Add a new provider":"Adicionar um novo provedor","Create a new provider":"Criar um novo provedor","Register a new provider and save it.":"Registre um novo provedor e salve-o.","Edit provider":"Editar provedor","Modify Provider.":"Modificar provedor.","Return to Providers":"Devolver aos fornecedores","Provide the provider email. Might be used to send automated email.":"Informe o e-mail do provedor. Pode ser usado para enviar e-mail automatizado.","Contact phone number for the provider. Might be used to send automated SMS notifications.":"Telefone de contato do provedor. Pode ser usado para enviar notifica\u00e7\u00f5es SMS automatizadas.","First address of the provider.":"Primeiro endere\u00e7o do provedor.","Second address of the provider.":"Segundo endere\u00e7o do provedor.","Further details about the provider":"Mais detalhes sobre o provedor","Amount Due":"Valor devido","Amount Paid":"Quantia paga","See Procurements":"Veja Aquisi\u00e7\u00f5es","Provider Procurements List":"Lista de aquisi\u00e7\u00f5es de fornecedores","Display all provider procurements.":"Exibir todas as aquisi\u00e7\u00f5es do fornecedor.","No provider procurements has been registered":"Nenhuma aquisi\u00e7\u00e3o de fornecedor foi registrada","Add a new provider procurement":"Adicionar uma nova aquisi\u00e7\u00e3o de fornecedor","Create a new provider procurement":"Criar uma nova aquisi\u00e7\u00e3o de fornecedor","Register a new provider procurement and save it.":"Registre uma nova aquisi\u00e7\u00e3o de provedor e salve-a.","Edit provider procurement":"Editar aquisi\u00e7\u00e3o do fornecedor","Modify Provider Procurement.":"Modificar a aquisi\u00e7\u00e3o do provedor.","Return to Provider Procurements":"Devolu\u00e7\u00e3o para Compras do Provedor","Delivered On":"Entregue em","Delivery":"Entrega","Items":"Itens","Registers List":"Lista de Registros","Display all registers.":"Exibe todos os registradores.","No registers has been registered":"Nenhum registro foi registrado","Add a new register":"Adicionar um novo registro","Create a new register":"Criar um novo registro","Register a new register and save it.":"Registre um novo registro e salve-o.","Edit register":"Editar registro","Modify Register.":"Modificar Cadastro.","Return to Registers":"Voltar aos Registros","Closed":"Fechadas","Define what is the status of the register.":"Defina qual \u00e9 o status do registro.","Provide mode details about this cash register.":"Forne\u00e7a detalhes do modo sobre esta caixa registradora.","Unable to delete a register that is currently in use":"N\u00e3o \u00e9 poss\u00edvel excluir um registro que est\u00e1 em uso no momento","Used By":"Usado por","Register History List":"Lista de hist\u00f3rico de registro","Display all register histories.":"Exibe todos os hist\u00f3ricos de registro.","No register histories has been registered":"Nenhum hist\u00f3rico de registro foi registrado","Add a new register history":"Adicionar um novo hist\u00f3rico de registro","Create a new register history":"Criar um novo hist\u00f3rico de registro","Register a new register history and save it.":"Registre um novo hist\u00f3rico de registro e salve-o.","Edit register history":"Editar hist\u00f3rico de registro","Modify Registerhistory.":"Modificar hist\u00f3rico de registro.","Return to Register History":"Voltar ao hist\u00f3rico de registros","Register Id":"ID de registro","Action":"A\u00e7ao","Register Name":"Nome do Registro","Done At":"Pronto \u00e0","Reward Systems List":"Lista de Sistemas de Recompensa","Display all reward systems.":"Exiba todos os sistemas de recompensa.","No reward systems has been registered":"Nenhum sistema de recompensa foi registrado","Add a new reward system":"Adicionar um novo sistema de recompensa","Create a new reward system":"Crie um novo sistema de recompensas","Register a new reward system and save it.":"Registre um novo sistema de recompensa e salve-o.","Edit reward system":"Editar sistema de recompensa","Modify Reward System.":"Modifique o sistema de recompensas.","Return to Reward Systems":"Retorne aos sistemas de recompensa","From":"A partir de","The interval start here.":"O intervalo come\u00e7a aqui.","To":"Para","The interval ends here.":"O intervalo termina aqui.","Points earned.":"Pontos ganhos.","Coupon":"Cupom","Decide which coupon you would apply to the system.":"Decida qual cupom voc\u00ea aplicaria ao sistema.","This is the objective that the user should reach to trigger the reward.":"Esse \u00e9 o objetivo que o usu\u00e1rio deve atingir para acionar a recompensa.","A short description about this system":"Uma breve descri\u00e7\u00e3o sobre este sistema","Would you like to delete this reward system ?":"Deseja excluir este sistema de recompensa?","Delete Selected Rewards":"Excluir recompensas selecionadas","Would you like to delete selected rewards?":"Deseja excluir recompensas selecionadas?","Roles List":"Lista de Fun\u00e7\u00f5es","Display all roles.":"Exiba todos os pap\u00e9is.","No role has been registered.":"Nenhuma fun\u00e7\u00e3o foi registrada.","Add a new role":"Adicionar uma nova fun\u00e7\u00e3o","Create a new role":"Criar uma nova fun\u00e7\u00e3o","Create a new role and save it.":"Crie uma nova fun\u00e7\u00e3o e salve-a.","Edit role":"Editar fun\u00e7\u00e3o","Modify Role.":"Modificar fun\u00e7\u00e3o.","Return to Roles":"Voltar para Fun\u00e7\u00f5es","Provide a name to the role.":"Forne\u00e7a um nome para a fun\u00e7\u00e3o.","Should be a unique value with no spaces or special character":"Deve ser um valor \u00fanico sem espa\u00e7os ou caracteres especiais","Store Dashboard":"Painel da loja","Cashier Dashboard":"Painel do caixa","Default Dashboard":"Painel padr\u00e3o","Provide more details about what this role is about.":"Forne\u00e7a mais detalhes sobre o que \u00e9 essa fun\u00e7\u00e3o.","Unable to delete a system role.":"N\u00e3o \u00e9 poss\u00edvel excluir uma fun\u00e7\u00e3o do sistema.","You do not have enough permissions to perform this action.":"Voc\u00ea n\u00e3o tem permiss\u00f5es suficientes para executar esta a\u00e7\u00e3o.","Taxes List":"Lista de impostos","Display all taxes.":"Exibir todos os impostos.","No taxes has been registered":"Nenhum imposto foi registrado","Add a new tax":"Adicionar um novo imposto","Create a new tax":"Criar um novo imposto","Register a new tax and save it.":"Registre um novo imposto e salve-o.","Edit tax":"Editar imposto","Modify Tax.":"Modificar Imposto.","Return to Taxes":"Retorno aos impostos","Provide a name to the tax.":"Forne\u00e7a um nome para o imposto.","Assign the tax to a tax group.":"Atribua o imposto a um grupo de impostos.","Rate":"Avaliar","Define the rate value for the tax.":"Defina o valor da taxa para o imposto.","Provide a description to the tax.":"Forne\u00e7a uma descri\u00e7\u00e3o para o imposto.","Taxes Groups List":"Lista de grupos de impostos","Display all taxes groups.":"Exibir todos os grupos de impostos.","No taxes groups has been registered":"Nenhum grupo de impostos foi registrado","Add a new tax group":"Adicionar um novo grupo de impostos","Create a new tax group":"Criar um novo grupo de impostos","Register a new tax group and save it.":"Registre um novo grupo de impostos e salve-o.","Edit tax group":"Editar grupo de impostos","Modify Tax Group.":"Modificar Grupo Fiscal.","Return to Taxes Groups":"Retornar aos grupos de impostos","Provide a short description to the tax group.":"Forne\u00e7a uma breve descri\u00e7\u00e3o para o grupo de impostos.","Units List":"Lista de unidades","Display all units.":"Exibir todas as unidades.","No units has been registered":"Nenhuma unidade foi registrada","Add a new unit":"Adicionar uma nova unidade","Create a new unit":"Criar uma nova unidade","Register a new unit and save it.":"Registre uma nova unidade e salve-a.","Edit unit":"Editar unidade","Modify Unit.":"Modificar Unidade.","Return to Units":"Voltar para Unidades","Preview URL":"URL de visualiza\u00e7\u00e3o","Preview of the unit.":"Pr\u00e9via da unidade.","Define the value of the unit.":"Defina o valor da unidade.","Define to which group the unit should be assigned.":"Defina a qual grupo a unidade deve ser atribu\u00edda.","Base Unit":"Unidade base","Determine if the unit is the base unit from the group.":"Determine se a unidade \u00e9 a unidade base do grupo.","Provide a short description about the unit.":"Forne\u00e7a uma breve descri\u00e7\u00e3o sobre a unidade.","Unit Groups List":"Lista de Grupos de Unidades","Display all unit groups.":"Exibe todos os grupos de unidades.","No unit groups has been registered":"Nenhum grupo de unidades foi registrado","Add a new unit group":"Adicionar um novo grupo de unidades","Create a new unit group":"Criar um novo grupo de unidades","Register a new unit group and save it.":"Registre um novo grupo de unidades e salve-o.","Edit unit group":"Editar grupo de unidades","Modify Unit Group.":"Modificar Grupo de Unidades.","Return to Unit Groups":"Retornar aos Grupos de Unidades","Users List":"Lista de usu\u00e1rios","Display all users.":"Exibir todos os usu\u00e1rios.","No users has been registered":"Nenhum usu\u00e1rio foi registrado","Add a new user":"Adicionar um novo usu\u00e1rio","Create a new user":"Criar um novo usu\u00e1rio","Register a new user and save it.":"Registre um novo usu\u00e1rio e salve-o.","Edit user":"Editar usu\u00e1rio","Modify User.":"Modificar usu\u00e1rio.","Return to Users":"Retornar aos usu\u00e1rios","Username":"Nome do usu\u00e1rio","Will be used for various purposes such as email recovery.":"Ser\u00e1 usado para diversos fins, como recupera\u00e7\u00e3o de e-mail.","Password":"Senha","Make a unique and secure password.":"Crie uma senha \u00fanica e segura.","Confirm Password":"Confirme a Senha","Should be the same as the password.":"Deve ser igual \u00e0 senha.","Define whether the user can use the application.":"Defina se o usu\u00e1rio pode usar o aplicativo.","Incompatibility Exception":"Exce\u00e7\u00e3o de incompatibilidade","The action you tried to perform is not allowed.":"A a\u00e7\u00e3o que voc\u00ea tentou realizar n\u00e3o \u00e9 permitida.","Not Enough Permissions":"Permiss\u00f5es insuficientes","The resource of the page you tried to access is not available or might have been deleted.":"O recurso da p\u00e1gina que voc\u00ea tentou acessar n\u00e3o est\u00e1 dispon\u00edvel ou pode ter sido exclu\u00eddo.","Not Found Exception":"Exce\u00e7\u00e3o n\u00e3o encontrada","Query Exception":"Exce\u00e7\u00e3o de consulta","Provide your username.":"Forne\u00e7a seu nome de usu\u00e1rio.","Provide your password.":"Forne\u00e7a sua senha.","Provide your email.":"Informe seu e-mail.","Password Confirm":"Confirma\u00e7\u00e3o de senha","define the amount of the transaction.":"definir o valor da transa\u00e7\u00e3o.","Further observation while proceeding.":"Observa\u00e7\u00e3o adicional durante o processo.","determine what is the transaction type.":"determinar qual \u00e9 o tipo de transa\u00e7\u00e3o.","Determine the amount of the transaction.":"Determine o valor da transa\u00e7\u00e3o.","Further details about the transaction.":"Mais detalhes sobre a transa\u00e7\u00e3o.","Define the installments for the current order.":"Defina as parcelas para o pedido atual.","New Password":"Nova Senha","define your new password.":"defina sua nova senha.","confirm your new password.":"confirme sua nova senha.","choose the payment type.":"escolha o tipo de pagamento.","Define the order name.":"Defina o nome do pedido.","Define the date of creation of the order.":"Defina a data de cria\u00e7\u00e3o do pedido.","Provide the procurement name.":"Forne\u00e7a o nome da aquisi\u00e7\u00e3o.","Describe the procurement.":"Descreva a aquisi\u00e7\u00e3o.","Define the provider.":"Defina o provedor.","Define what is the unit price of the product.":"Defina qual \u00e9 o pre\u00e7o unit\u00e1rio do produto.","Determine in which condition the product is returned.":"Determine em que condi\u00e7\u00f5es o produto \u00e9 devolvido.","Other Observations":"Outras observa\u00e7\u00f5es","Describe in details the condition of the returned product.":"Descreva detalhadamente o estado do produto devolvido.","Unit Group Name":"Nome do Grupo da Unidade","Provide a unit name to the unit.":"Forne\u00e7a um nome de unidade para a unidade.","Describe the current unit.":"Descreva a unidade atual.","assign the current unit to a group.":"atribuir a unidade atual a um grupo.","define the unit value.":"definir o valor unit\u00e1rio.","Provide a unit name to the units group.":"Forne\u00e7a um nome de unidade para o grupo de unidades.","Describe the current unit group.":"Descreva o grupo de unidades atual.","POS":"PDV","Open POS":"Abrir PDV","Create Register":"Criar registro","Use Customer Billing":"Usar faturamento do cliente","Define whether the customer billing information should be used.":"Defina se as informa\u00e7\u00f5es de faturamento do cliente devem ser usadas.","General Shipping":"Envio geral","Define how the shipping is calculated.":"Defina como o frete \u00e9 calculado.","Shipping Fees":"Taxas de envio","Define shipping fees.":"Defina as taxas de envio.","Use Customer Shipping":"Usar o envio do cliente","Define whether the customer shipping information should be used.":"Defina se as informa\u00e7\u00f5es de envio do cliente devem ser usadas.","Invoice Number":"N\u00famero da fatura","If the procurement has been issued outside of NexoPOS, please provide a unique reference.":"Se a aquisi\u00e7\u00e3o foi emitida fora do NexoPOS, forne\u00e7a uma refer\u00eancia exclusiva.","Delivery Time":"Prazo de entrega","If the procurement has to be delivered at a specific time, define the moment here.":"Se a aquisi\u00e7\u00e3o tiver que ser entregue em um hor\u00e1rio espec\u00edfico, defina o momento aqui.","Automatic Approval":"Aprova\u00e7\u00e3o autom\u00e1tica","Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.":"Determine se a aquisi\u00e7\u00e3o deve ser marcada automaticamente como aprovada assim que o prazo de entrega ocorrer.","Pending":"Pendente","Delivered":"Entregue","Determine what is the actual payment status of the procurement.":"Determine qual \u00e9 o status real de pagamento da aquisi\u00e7\u00e3o.","Determine what is the actual provider of the current procurement.":"Determine qual \u00e9 o fornecedor real da aquisi\u00e7\u00e3o atual.","Provide a name that will help to identify the procurement.":"Forne\u00e7a um nome que ajude a identificar a aquisi\u00e7\u00e3o.","First Name":"Primeiro nome","Avatar":"Avatar","Define the image that should be used as an avatar.":"Defina a imagem que deve ser usada como avatar.","Language":"L\u00edngua","Choose the language for the current account.":"Escolha o idioma da conta atual.","Security":"Seguran\u00e7a","Old Password":"Senha Antiga","Provide the old password.":"Forne\u00e7a a senha antiga.","Change your password with a better stronger password.":"Altere sua senha com uma senha melhor e mais forte.","Password Confirmation":"Confirma\u00c7\u00e3o Da Senha","The profile has been successfully saved.":"O perfil foi salvo com sucesso.","The user attribute has been saved.":"O atributo de usu\u00e1rio foi salvo.","The options has been successfully updated.":"As op\u00e7\u00f5es foram atualizadas com sucesso.","Wrong password provided":"Senha incorreta fornecida","Wrong old password provided":"Senha antiga incorreta fornecida","Password Successfully updated.":"Senha atualizada com sucesso.","Sign In — NexoPOS":"Entrar — NexoPOS","Sign Up — NexoPOS":"Inscreva-se — NexoPOS","Password Lost":"Senha perdida","Unable to proceed as the token provided is invalid.":"N\u00e3o foi poss\u00edvel continuar porque o token fornecido \u00e9 inv\u00e1lido.","The token has expired. Please request a new activation token.":"O token expirou. Solicite um novo token de ativa\u00e7\u00e3o.","Set New Password":"Definir nova senha","Database Update":"Atualiza\u00e7\u00e3o do banco de dados","This account is disabled.":"Esta conta est\u00e1 desativada.","Unable to find record having that username.":"N\u00e3o foi poss\u00edvel encontrar um registro com esse nome de usu\u00e1rio.","Unable to find record having that password.":"N\u00e3o foi poss\u00edvel encontrar registro com essa senha.","Invalid username or password.":"Nome de usu\u00e1rio ou senha inv\u00e1lidos.","Unable to login, the provided account is not active.":"N\u00e3o \u00e9 poss\u00edvel fazer login, a conta fornecida n\u00e3o est\u00e1 ativa.","You have been successfully connected.":"Voc\u00ea foi conectado com sucesso.","The recovery email has been send to your inbox.":"O e-mail de recupera\u00e7\u00e3o foi enviado para sua caixa de entrada.","Unable to find a record matching your entry.":"N\u00e3o foi poss\u00edvel encontrar um registro que corresponda \u00e0 sua entrada.","Your Account has been created but requires email validation.":"Sua conta foi criada, mas requer valida\u00e7\u00e3o de e-mail.","Unable to find the requested user.":"N\u00e3o foi poss\u00edvel encontrar o usu\u00e1rio solicitado.","Unable to proceed, the provided token is not valid.":"N\u00e3o \u00e9 poss\u00edvel continuar, o token fornecido n\u00e3o \u00e9 v\u00e1lido.","Unable to proceed, the token has expired.":"N\u00e3o foi poss\u00edvel continuar, o token expirou.","Your password has been updated.":"Sua senha foi atualizada.","Unable to edit a register that is currently in use":"N\u00e3o \u00e9 poss\u00edvel editar um registro que est\u00e1 em uso no momento","No register has been opened by the logged user.":"Nenhum registro foi aberto pelo usu\u00e1rio logado.","The register is opened.":"O registro \u00e9 aberto.","Closing":"Fechamento","Opening":"Abertura","Sale":"Oferta","Refund":"Reembolso","Unable to find the category using the provided identifier":"N\u00e3o foi poss\u00edvel encontrar a categoria usando o identificador fornecido","The category has been deleted.":"A categoria foi exclu\u00edda.","Unable to find the category using the provided identifier.":"N\u00e3o foi poss\u00edvel encontrar a categoria usando o identificador fornecido.","Unable to find the attached category parent":"N\u00e3o foi poss\u00edvel encontrar o pai da categoria anexada","The category has been correctly saved":"A categoria foi salva corretamente","The category has been updated":"A categoria foi atualizada","The category products has been refreshed":"A categoria produtos foi atualizada","The entry has been successfully deleted.":"A entrada foi exclu\u00edda com sucesso.","A new entry has been successfully created.":"Uma nova entrada foi criada com sucesso.","Unhandled crud resource":"Recurso bruto n\u00e3o tratado","You need to select at least one item to delete":"Voc\u00ea precisa selecionar pelo menos um item para excluir","You need to define which action to perform":"Voc\u00ea precisa definir qual a\u00e7\u00e3o executar","%s has been processed, %s has not been processed.":"%s foi processado, %s n\u00e3o foi processado.","Unable to proceed. No matching CRUD resource has been found.":"N\u00e3o foi poss\u00edvel prosseguir. Nenhum recurso CRUD correspondente foi encontrado.","The requested file cannot be downloaded or has already been downloaded.":"O arquivo solicitado n\u00e3o pode ser baixado ou j\u00e1 foi baixado.","The requested customer cannot be found.":"O cliente solicitado n\u00e3o pode ser found.","Create Coupon":"Criar cupom","helps you creating a coupon.":"ajuda voc\u00ea a criar um cupom.","Edit Coupon":"Editar cupom","Editing an existing coupon.":"Editando um cupom existente.","Invalid Request.":"Pedido inv\u00e1lido.","Displays the customer account history for %s":"Exibe o hist\u00f3rico da conta do cliente para %s","Unable to delete a group to which customers are still assigned.":"N\u00e3o \u00e9 poss\u00edvel excluir um grupo ao qual os clientes ainda est\u00e3o atribu\u00eddos.","The customer group has been deleted.":"O grupo de clientes foi exclu\u00eddo.","Unable to find the requested group.":"N\u00e3o foi poss\u00edvel encontrar o grupo solicitado.","The customer group has been successfully created.":"O grupo de clientes foi criado com sucesso.","The customer group has been successfully saved.":"O grupo de clientes foi salvo com sucesso.","Unable to transfer customers to the same account.":"N\u00e3o foi poss\u00edvel transferir clientes para a mesma conta.","The categories has been transferred to the group %s.":"As categorias foram transferidas para o grupo %s.","No customer identifier has been provided to proceed to the transfer.":"Nenhum identificador de cliente foi fornecido para prosseguir com a transfer\u00eancia.","Unable to find the requested group using the provided id.":"N\u00e3o foi poss\u00edvel encontrar o grupo solicitado usando o ID fornecido.","\"%s\" is not an instance of \"FieldsService\"":"\"%s\" n\u00e3o \u00e9 uma inst\u00e2ncia de \"FieldsService\"","Manage Medias":"Gerenciar m\u00eddias","Modules List":"Lista de M\u00f3dulos","List all available modules.":"Liste todos os m\u00f3dulos dispon\u00edveis.","Upload A Module":"Carregar um m\u00f3dulo","Extends NexoPOS features with some new modules.":"Estende os recursos do NexoPOS com alguns novos m\u00f3dulos.","The notification has been successfully deleted":"A notifica\u00e7\u00e3o foi exclu\u00edda com sucesso","All the notifications have been cleared.":"Todas as notifica\u00e7\u00f5es foram apagadas.","Order Invoice — %s":"Fatura do pedido — %s","Order Refund Receipt — %s":"Recibo de reembolso do pedido — %s","Order Receipt — %s":"Recibo do pedido — %s","The printing event has been successfully dispatched.":"O evento de impress\u00e3o foi despachado com sucesso.","There is a mismatch between the provided order and the order attached to the instalment.":"H\u00e1 uma incompatibilidade entre o pedido fornecido e o pedido anexado \u00e0 parcela.","Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.":"N\u00e3o \u00e9 poss\u00edvel editar uma aquisi\u00e7\u00e3o que est\u00e1 estocada. Considere realizar um ajuste ou excluir a aquisi\u00e7\u00e3o.","New Procurement":"Nova aquisi\u00e7\u00e3o","Edit Procurement":"Editar aquisi\u00e7\u00e3o","Perform adjustment on existing procurement.":"Realizar ajustes em compras existentes.","%s - Invoice":"%s - Fatura","list of product procured.":"lista de produtos adquiridos.","The product price has been refreshed.":"O pre\u00e7o do produto foi atualizado.","The single variation has been deleted.":"A \u00fanica varia\u00e7\u00e3o foi exclu\u00edda.","Edit a product":"Editar um produto","Makes modifications to a product":"Faz modifica\u00e7\u00f5es em um produto","Create a product":"Criar um produto","Add a new product on the system":"Adicionar um novo produto no sistema","Stock Adjustment":"Ajuste de estoque","Adjust stock of existing products.":"Ajustar o estoque de produtos existentes.","No stock is provided for the requested product.":"Nenhum estoque \u00e9 fornecido para o produto solicitado.","The product unit quantity has been deleted.":"A quantidade da unidade do produto foi exclu\u00edda.","Unable to proceed as the request is not valid.":"N\u00e3o foi poss\u00edvel prosseguir porque a solicita\u00e7\u00e3o n\u00e3o \u00e9 v\u00e1lida.","Unsupported action for the product %s.":"A\u00e7\u00e3o n\u00e3o suportada para o produto %s.","The stock has been adjustment successfully.":"O estoque foi ajustado com sucesso.","Unable to add the product to the cart as it has expired.":"N\u00e3o foi poss\u00edvel adicionar o produto ao carrinho, pois ele expirou.","Unable to add a product that has accurate tracking enabled, using an ordinary barcode.":"N\u00e3o \u00e9 poss\u00edvel adicionar um produto com rastreamento preciso ativado, usando um c\u00f3digo de barras comum.","There is no products matching the current request.":"N\u00e3o h\u00e1 produtos que correspondam \u00e0 solicita\u00e7\u00e3o atual.","Print Labels":"Imprimir etiquetas","Customize and print products labels.":"Personalize e imprima etiquetas de produtos.","Procurements by \"%s\"":"Compras por \"%s\"","Sales Report":"Relat\u00f3rio de vendas","Provides an overview over the sales during a specific period":"Fornece uma vis\u00e3o geral sobre as vendas durante um per\u00edodo espec\u00edfico","Provides an overview over the best products sold during a specific period.":"Fornece uma vis\u00e3o geral sobre os melhores produtos vendidos durante um per\u00edodo espec\u00edfico.","Sold Stock":"Estoque Vendido","Provides an overview over the sold stock during a specific period.":"Fornece uma vis\u00e3o geral sobre o estoque vendido durante um per\u00edodo espec\u00edfico.","Profit Report":"Relat\u00f3rio de lucro","Provides an overview of the provide of the products sold.":"Fornece uma vis\u00e3o geral do fornecimento dos produtos vendidos.","Provides an overview on the activity for a specific period.":"Fornece uma vis\u00e3o geral da atividade para um per\u00edodo espec\u00edfico.","Annual Report":"Relat\u00f3rio anual","Sales By Payment Types":"Vendas por tipos de pagamento","Provide a report of the sales by payment types, for a specific period.":"Forne\u00e7a um relat\u00f3rio das vendas por tipos de pagamento, para um per\u00edodo espec\u00edfico.","The report will be computed for the current year.":"O relat\u00f3rio ser\u00e1 computado para o ano corrente.","Unknown report to refresh.":"Relat\u00f3rio desconhecido para atualizar.","Invalid authorization code provided.":"C\u00f3digo de autoriza\u00e7\u00e3o inv\u00e1lido fornecido.","The database has been successfully seeded.":"O banco de dados foi propagado com sucesso.","Settings Page Not Found":"P\u00e1gina de configura\u00e7\u00f5es n\u00e3o encontrada","Customers Settings":"Configura\u00e7\u00f5es de clientes","Configure the customers settings of the application.":"Defina as configura\u00e7\u00f5es de clientes do aplicativo.","General Settings":"Configura\u00e7\u00f5es Gerais","Configure the general settings of the application.":"Defina as configura\u00e7\u00f5es gerais do aplicativo.","Orders Settings":"Configura\u00e7\u00f5es de pedidos","POS Settings":"Configura\u00e7\u00f5es de PDV","Configure the pos settings.":"Defina as configura\u00e7\u00f5es de pos.","Workers Settings":"Configura\u00e7\u00f5es de trabalhadores","%s is not an instance of \"%s\".":"%s n\u00e3o \u00e9 uma inst\u00e2ncia de \"%s\".","Unable to find the requested product tax using the provided id":"N\u00e3o foi poss\u00edvel encontrar o imposto do produto solicitado usando o ID fornecido","Unable to find the requested product tax using the provided identifier.":"N\u00e3o foi poss\u00edvel encontrar o imposto do produto solicitado usando o identificador fornecido.","The product tax has been created.":"O imposto sobre o produto foi criado.","The product tax has been updated":"O imposto do produto foi atualizado","Unable to retrieve the requested tax group using the provided identifier \"%s\".":"N\u00e3o foi poss\u00edvel recuperar o grupo de impostos solicitado usando o identificador fornecido \"%s\".","Permission Manager":"Gerenciador de permiss\u00f5es","Manage all permissions and roles":"Gerencie todas as permiss\u00f5es e fun\u00e7\u00f5es","My Profile":"Meu perfil","Change your personal settings":"Altere suas configura\u00e7\u00f5es pessoais","The permissions has been updated.":"As permiss\u00f5es foram atualizadas.","Sunday":"Domingo","Monday":"segunda-feira","Tuesday":"ter\u00e7a-feira","Wednesday":"quarta-feira","Thursday":"quinta-feira","Friday":"Sexta-feira","Saturday":"s\u00e1bado","The migration has successfully run.":"A migra\u00e7\u00e3o foi executada com sucesso.","Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.":"N\u00e3o foi poss\u00edvel inicializar a p\u00e1gina de configura\u00e7\u00f5es. O identificador \"%s\" n\u00e3o pode ser instanciado.","Unable to register. The registration is closed.":"N\u00e3o foi poss\u00edvel registrar. A inscri\u00e7\u00e3o est\u00e1 encerrada.","Hold Order Cleared":"Reter pedido cancelado","Report Refreshed":"Relat\u00f3rio atualizado","The yearly report has been successfully refreshed for the year \"%s\".":"O relat\u00f3rio anual foi atualizado com sucesso para o ano \"%s\".","[NexoPOS] Activate Your Account":"[NexoPOS] Ative sua conta","[NexoPOS] A New User Has Registered":"[NexoPOS] Um novo usu\u00e1rio se registrou","[NexoPOS] Your Account Has Been Created":"[NexoPOS] Sua conta foi criada","Unable to find the permission with the namespace \"%s\".":"N\u00e3o foi poss\u00edvel encontrar a permiss\u00e3o com o namespace \"%s\".","Take Away":"Remover","The register has been successfully opened":"O cadastro foi aberto com sucesso","The register has been successfully closed":"O cadastro foi fechado com sucesso","The provided amount is not allowed. The amount should be greater than \"0\". ":"O valor fornecido n\u00e3o \u00e9 permitido. O valor deve ser maior que \"0\".","The cash has successfully been stored":"O dinheiro foi armazenado com sucesso","Not enough fund to cash out.":"N\u00e3o h\u00e1 fundos suficientes para sacar.","The cash has successfully been disbursed.":"O dinheiro foi desembolsado com sucesso.","In Use":"Em uso","Opened":"Aberto","Delete Selected entries":"Excluir entradas selecionadas","%s entries has been deleted":"%s entradas foram deletadas","%s entries has not been deleted":"%s entradas n\u00e3o foram deletadas","Unable to find the customer using the provided id.":"N\u00e3o foi poss\u00edvel encontrar o cliente usando o ID fornecido.","The customer has been deleted.":"O cliente foi exclu\u00eddo.","The customer has been created.":"O cliente foi criado.","Unable to find the customer using the provided ID.":"N\u00e3o foi poss\u00edvel encontrar o cliente usando o ID fornecido.","The customer has been edited.":"O cliente foi editado.","Unable to find the customer using the provided email.":"N\u00e3o foi poss\u00edvel encontrar o cliente usando o e-mail fornecido.","The customer account has been updated.":"A conta do cliente foi atualizada.","Issuing Coupon Failed":"Falha na emiss\u00e3o do cupom","Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.":"N\u00e3o foi poss\u00edvel aplicar um cupom anexado \u00e0 recompensa \"%s\". Parece que o cupom n\u00e3o existe mais.","Unable to find a coupon with the provided code.":"N\u00e3o foi poss\u00edvel encontrar um cupom com o c\u00f3digo fornecido.","The coupon has been updated.":"O cupom foi atualizado.","The group has been created.":"O grupo foi criado.","Crediting":"Cr\u00e9dito","Deducting":"Dedu\u00e7\u00e3o","Order Payment":"Ordem de pagamento","Order Refund":"Reembolso do pedido","Unknown Operation":"Opera\u00e7\u00e3o desconhecida","Countable":"Cont\u00e1vel","Piece":"Pe\u00e7a","GST":"GST","SGST":"SGST","CGST":"CGST","Sample Procurement %s":"Amostra de Aquisi\u00e7\u00e3o %s","generated":"gerado","The media has been deleted":"A m\u00eddia foi exclu\u00edda","Unable to find the media.":"N\u00e3o foi poss\u00edvel encontrar a m\u00eddia.","Unable to find the requested file.":"N\u00e3o foi poss\u00edvel encontrar o arquivo solicitado.","Unable to find the media entry":"N\u00e3o foi poss\u00edvel encontrar a entrada de m\u00eddia","Payment Types":"Tipos de pagamento","Medias":"M\u00eddias","List":"Lista","Customers Groups":"Grupos de clientes","Create Group":"Criar grupo","Reward Systems":"Sistemas de recompensa","Create Reward":"Criar recompensa","List Coupons":"Listar cupons","Providers":"Provedores","Create A Provider":"Criar um provedor","Accounting":"Contabilidade","Inventory":"Invent\u00e1rio","Create Product":"Criar produto","Create Category":"Criar categoria","Create Unit":"Criar unidade","Unit Groups":"Grupos de unidades","Create Unit Groups":"Criar grupos de unidades","Taxes Groups":"Grupos de impostos","Create Tax Groups":"Criar grupos fiscais","Create Tax":"Criar imposto","Modules":"M\u00f3dulos","Upload Module":"M\u00f3dulo de upload","Users":"Comercial","Create User":"Criar usu\u00e1rio","Roles":"Fun\u00e7\u00f5es","Create Roles":"Criar fun\u00e7\u00f5es","Permissions Manager":"Gerenciador de permiss\u00f5es","Procurements":"Aquisi\u00e7\u00f5es","Reports":"Relat\u00f3rios","Sale Report":"Relat\u00f3rio de vendas","Incomes & Loosses":"Rendas e Perdas","Sales By Payments":"Vendas por pagamentos","Invoice Settings":"Configura\u00e7\u00f5es de fatura","Workers":"Trabalhadores","Unable to locate the requested module.":"N\u00e3o foi poss\u00edvel localizar o m\u00f3dulo solicitado.","The module \"%s\" has been disabled as the dependency \"%s\" is missing. ":"O m\u00f3dulo \"%s\" foi desabilitado porque a depend\u00eancia \"%s\" est\u00e1 ausente.","The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ":"O m\u00f3dulo \"%s\" foi desabilitado pois a depend\u00eancia \"%s\" n\u00e3o est\u00e1 habilitada.","The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ":"O m\u00f3dulo \"%s\" foi desabilitado pois a depend\u00eancia \"%s\" n\u00e3o est\u00e1 na vers\u00e3o m\u00ednima exigida \"%s\".","The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ":"O m\u00f3dulo \"%s\" foi desabilitado pois a depend\u00eancia \"%s\" est\u00e1 em uma vers\u00e3o al\u00e9m da recomendada \"%s\".","Unable to detect the folder from where to perform the installation.":"N\u00e3o foi poss\u00edvel detectar a pasta de onde realizar a instala\u00e7\u00e3o.","The uploaded file is not a valid module.":"O arquivo carregado n\u00e3o \u00e9 um m\u00f3dulo v\u00e1lido.","The module has been successfully installed.":"O m\u00f3dulo foi instalado com sucesso.","The migration run successfully.":"A migra\u00e7\u00e3o foi executada com sucesso.","The module has correctly been enabled.":"O m\u00f3dulo foi habilitado corretamente.","Unable to enable the module.":"N\u00e3o foi poss\u00edvel habilitar o m\u00f3dulo.","The Module has been disabled.":"O M\u00f3dulo foi desabilitado.","Unable to disable the module.":"N\u00e3o foi poss\u00edvel desativar o m\u00f3dulo.","Unable to proceed, the modules management is disabled.":"N\u00e3o \u00e9 poss\u00edvel continuar, o gerenciamento de m\u00f3dulos est\u00e1 desabilitado.","Missing required parameters to create a notification":"Par\u00e2metros necess\u00e1rios ausentes para criar uma notifica\u00e7\u00e3o","The order has been placed.":"O pedido foi feito.","The percentage discount provided is not valid.":"O desconto percentual fornecido n\u00e3o \u00e9 v\u00e1lido.","A discount cannot exceed the sub total value of an order.":"Um desconto n\u00e3o pode exceder o subvalor total de um pedido.","No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.":"Nenhum pagamento \u00e9 esperado no momento. Caso o cliente queira pagar antecipadamente, considere ajustar a data de pagamento das parcelas.","The payment has been saved.":"O pagamento foi salvo.","Unable to edit an order that is completely paid.":"N\u00e3o \u00e9 poss\u00edvel editar um pedido totalmente pago.","Unable to proceed as one of the previous submitted payment is missing from the order.":"N\u00e3o foi poss\u00edvel prosseguir porque um dos pagamentos enviados anteriormente est\u00e1 faltando no pedido.","The order payment status cannot switch to hold as a payment has already been made on that order.":"O status de pagamento do pedido n\u00e3o pode mudar para retido, pois um pagamento j\u00e1 foi feito nesse pedido.","Unable to proceed. One of the submitted payment type is not supported.":"N\u00e3o foi poss\u00edvel prosseguir. Um dos tipos de pagamento enviados n\u00e3o \u00e9 suportado.","Unnamed Product":"Produto sem nome","Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.":"N\u00e3o foi poss\u00edvel continuar, o produto \"%s\" possui uma unidade que n\u00e3o pode ser recuperada. Pode ter sido deletado.","Unable to find the customer using the provided ID. The order creation has failed.":"N\u00e3o foi poss\u00edvel encontrar o cliente usando o ID fornecido. A cria\u00e7\u00e3o do pedido falhou.","Unable to proceed a refund on an unpaid order.":"N\u00e3o foi poss\u00edvel efetuar o reembolso de um pedido n\u00e3o pago.","The current credit has been issued from a refund.":"O cr\u00e9dito atual foi emitido a partir de um reembolso.","The order has been successfully refunded.":"O pedido foi reembolsado com sucesso.","unable to proceed to a refund as the provided status is not supported.":"incapaz de proceder a um reembolso, pois o status fornecido n\u00e3o \u00e9 suportado.","The product %s has been successfully refunded.":"O produto %s foi reembolsado com sucesso.","Unable to find the order product using the provided id.":"N\u00e3o foi poss\u00edvel encontrar o produto do pedido usando o ID fornecido.","Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier":"N\u00e3o foi poss\u00edvel encontrar o pedido solicitado usando \"%s\" como piv\u00f4 e \"%s\" como identificador","Unable to fetch the order as the provided pivot argument is not supported.":"N\u00e3o \u00e9 poss\u00edvel buscar o pedido porque o argumento de piv\u00f4 fornecido n\u00e3o \u00e9 compat\u00edvel.","The product has been added to the order \"%s\"":"O produto foi adicionado ao pedido \"%s\"","the order has been successfully computed.":"a ordem foi computada com sucesso.","The order has been deleted.":"O pedido foi exclu\u00eddo.","The product has been successfully deleted from the order.":"O produto foi exclu\u00eddo com sucesso do pedido.","Unable to find the requested product on the provider order.":"N\u00e3o foi poss\u00edvel encontrar o produto solicitado no pedido do fornecedor.","Ongoing":"Em andamento","Ready":"Preparar","Not Available":"N\u00e3o dispon\u00edvel","Failed":"Fracassado","Unpaid Orders Turned Due":"Pedidos n\u00e3o pagos vencidos","No orders to handle for the moment.":"N\u00e3o h\u00e1 ordens para lidar no momento.","The order has been correctly voided.":"O pedido foi anulado corretamente.","Unable to edit an already paid instalment.":"N\u00e3o foi poss\u00edvel editar uma parcela j\u00e1 paga.","The instalment has been saved.":"A parcela foi salva.","The instalment has been deleted.":"A parcela foi exclu\u00edda.","The defined amount is not valid.":"O valor definido n\u00e3o \u00e9 v\u00e1lido.","No further instalments is allowed for this order. The total instalment already covers the order total.":"Nenhuma parcela adicional \u00e9 permitida para este pedido. A parcela total j\u00e1 cobre o total do pedido.","The instalment has been created.":"A parcela foi criada.","The provided status is not supported.":"O status fornecido n\u00e3o \u00e9 suportado.","The order has been successfully updated.":"O pedido foi atualizado com sucesso.","Unable to find the requested procurement using the provided identifier.":"N\u00e3o foi poss\u00edvel encontrar a aquisi\u00e7\u00e3o solicitada usando o identificador fornecido.","Unable to find the assigned provider.":"N\u00e3o foi poss\u00edvel encontrar o provedor atribu\u00eddo.","The procurement has been created.":"A aquisi\u00e7\u00e3o foi criada.","Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.":"N\u00e3o \u00e9 poss\u00edvel editar uma aquisi\u00e7\u00e3o que j\u00e1 foi estocada. Por favor, considere a realiza\u00e7\u00e3o e ajuste de estoque.","The provider has been edited.":"O provedor foi editado.","Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"":"N\u00e3o \u00e9 poss\u00edvel ter um ID de grupo de unidades para o produto usando a refer\u00eancia \"%s\" como \"%s\"","The operation has completed.":"A opera\u00e7\u00e3o foi conclu\u00edda.","The procurement has been refreshed.":"A aquisi\u00e7\u00e3o foi atualizada.","The procurement has been reset.":"A aquisi\u00e7\u00e3o foi redefinida.","The procurement products has been deleted.":"Os produtos de aquisi\u00e7\u00e3o foram exclu\u00eddos.","The procurement product has been updated.":"O produto de aquisi\u00e7\u00e3o foi atualizado.","Unable to find the procurement product using the provided id.":"N\u00e3o foi poss\u00edvel encontrar o produto de aquisi\u00e7\u00e3o usando o ID fornecido.","The product %s has been deleted from the procurement %s":"O produto %s foi exclu\u00eddo da aquisi\u00e7\u00e3o %s","The product with the following ID \"%s\" is not initially included on the procurement":"O produto com o seguinte ID \"%s\" n\u00e3o est\u00e1 inicialmente inclu\u00eddo na compra","The procurement products has been updated.":"Os produtos de aquisi\u00e7\u00e3o foram atualizados.","Procurement Automatically Stocked":"Compras Estocadas Automaticamente","Draft":"Rascunho","The category has been created":"A categoria foi criada","Unable to find the product using the provided id.":"N\u00e3o foi poss\u00edvel encontrar o produto usando o ID fornecido.","Unable to find the requested product using the provided SKU.":"N\u00e3o foi poss\u00edvel encontrar o produto solicitado usando o SKU fornecido.","The variable product has been created.":"A vari\u00e1vel produto foi criada.","The provided barcode \"%s\" is already in use.":"O c\u00f3digo de barras fornecido \"%s\" j\u00e1 est\u00e1 em uso.","The provided SKU \"%s\" is already in use.":"O SKU fornecido \"%s\" j\u00e1 est\u00e1 em uso.","The product has been saved.":"O produto foi salvo.","The provided barcode is already in use.":"O c\u00f3digo de barras fornecido j\u00e1 est\u00e1 em uso.","The provided SKU is already in use.":"O SKU fornecido j\u00e1 est\u00e1 em uso.","The product has been updated":"O produto foi atualizado","The variable product has been updated.":"A vari\u00e1vel produto foi atualizada.","The product variations has been reset":"As varia\u00e7\u00f5es do produto foram redefinidas","The product has been reset.":"O produto foi redefinido.","The product \"%s\" has been successfully deleted":"O produto \"%s\" foi exclu\u00eddo com sucesso","Unable to find the requested variation using the provided ID.":"N\u00e3o foi poss\u00edvel encontrar a varia\u00e7\u00e3o solicitada usando o ID fornecido.","The product stock has been updated.":"O estoque de produtos foi atualizado.","The action is not an allowed operation.":"A a\u00e7\u00e3o n\u00e3o \u00e9 uma opera\u00e7\u00e3o permitida.","The product quantity has been updated.":"A quantidade do produto foi atualizada.","There is no variations to delete.":"N\u00e3o h\u00e1 varia\u00e7\u00f5es para excluir.","There is no products to delete.":"N\u00e3o h\u00e1 produtos para excluir.","The product variation has been successfully created.":"A varia\u00e7\u00e3o do produto foi criada com sucesso.","The product variation has been updated.":"A varia\u00e7\u00e3o do produto foi atualizada.","The provider has been created.":"O provedor foi criado.","The provider has been updated.":"O provedor foi atualizado.","Unable to find the provider using the specified id.":"N\u00e3o foi poss\u00edvel encontrar o provedor usando o ID especificado.","The provider has been deleted.":"O provedor foi exclu\u00eddo.","Unable to find the provider using the specified identifier.":"N\u00e3o foi poss\u00edvel encontrar o provedor usando o identificador especificado.","The provider account has been updated.":"A conta do provedor foi atualizada.","The procurement payment has been deducted.":"O pagamento da aquisi\u00e7\u00e3o foi deduzido.","The dashboard report has been updated.":"O relat\u00f3rio do painel foi atualizado.","Untracked Stock Operation":"Opera\u00e7\u00e3o de estoque n\u00e3o rastreada","Unsupported action":"A\u00e7\u00e3o sem suporte","The expense has been correctly saved.":"A despesa foi salva corretamente.","The report has been computed successfully.":"O relat\u00f3rio foi calculado com sucesso.","The table has been truncated.":"A tabela foi truncada.","Untitled Settings Page":"P\u00e1gina de configura\u00e7\u00f5es sem t\u00edtulo","No description provided for this settings page.":"Nenhuma descri\u00e7\u00e3o fornecida para esta p\u00e1gina de configura\u00e7\u00f5es.","The form has been successfully saved.":"O formul\u00e1rio foi salvo com sucesso.","Unable to reach the host":"N\u00e3o foi poss\u00edvel alcan\u00e7ar o host","Unable to connect to the database using the credentials provided.":"N\u00e3o \u00e9 poss\u00edvel conectar-se ao banco de dados usando as credenciais fornecidas.","Unable to select the database.":"N\u00e3o foi poss\u00edvel selecionar o banco de dados.","Access denied for this user.":"Acesso negado para este usu\u00e1rio.","The connexion with the database was successful":"A conex\u00e3o com o banco de dados foi bem sucedida","Cash":"Dinheiro","Bank Payment":"Pagamento banc\u00e1rio","NexoPOS has been successfully installed.":"NexoPOS foi instalado com sucesso.","A tax cannot be his own parent.":"Um imposto n\u00e3o pode ser seu pr\u00f3prio pai.","The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".":"A hierarquia de impostos \u00e9 limitada a 1. Um subimposto n\u00e3o deve ter o tipo de imposto definido como \"agrupado\".","Unable to find the requested tax using the provided identifier.":"N\u00e3o foi poss\u00edvel encontrar o imposto solicitado usando o identificador fornecido.","The tax group has been correctly saved.":"O grupo de impostos foi salvo corretamente.","The tax has been correctly created.":"O imposto foi criado corretamente.","The tax has been successfully deleted.":"O imposto foi exclu\u00eddo com sucesso.","The Unit Group has been created.":"O Grupo de Unidades foi criado.","The unit group %s has been updated.":"O grupo de unidades %s foi atualizado.","Unable to find the unit group to which this unit is attached.":"N\u00e3o foi poss\u00edvel encontrar o grupo de unidades ao qual esta unidade est\u00e1 conectada.","The unit has been saved.":"A unidade foi salva.","Unable to find the Unit using the provided id.":"N\u00e3o foi poss\u00edvel encontrar a Unidade usando o ID fornecido.","The unit has been updated.":"A unidade foi atualizada.","The unit group %s has more than one base unit":"O grupo de unidades %s tem mais de uma unidade base","The unit has been deleted.":"A unidade foi exclu\u00edda.","unable to find this validation class %s.":"n\u00e3o foi poss\u00edvel encontrar esta classe de valida\u00e7\u00e3o %s.","Procurement Cash Flow Account":"Conta de fluxo de caixa de aquisi\u00e7\u00e3o","Sale Cash Flow Account":"Conta de fluxo de caixa de venda","Sales Refunds Account":"Conta de reembolso de vendas","Stock return for spoiled items will be attached to this account":"O retorno de estoque para itens estragados ser\u00e1 anexado a esta conta","Enable Reward":"Ativar recompensa","Will activate the reward system for the customers.":"Ativar\u00e1 o sistema de recompensa para os clientes.","Default Customer Account":"Conta de cliente padr\u00e3o","Default Customer Group":"Grupo de clientes padr\u00e3o","Select to which group each new created customers are assigned to.":"Selecione a qual grupo cada novo cliente criado \u00e9 atribu\u00eddo.","Enable Credit & Account":"Ativar cr\u00e9dito e conta","The customers will be able to make deposit or obtain credit.":"Os clientes poder\u00e3o fazer dep\u00f3sito ou obter cr\u00e9dito.","Store Name":"Nome da loja","This is the store name.":"Este \u00e9 o nome da loja.","Store Address":"Endere\u00e7o da loja","The actual store address.":"O endere\u00e7o real da loja.","Store City":"Cidade da loja","The actual store city.":"A cidade da loja real.","Store Phone":"Telefone da loja","The phone number to reach the store.":"O n\u00famero de telefone para entrar em contato com a loja.","Store Email":"E-mail da loja","The actual store email. Might be used on invoice or for reports.":"O e-mail real da loja. Pode ser usado na fatura ou para relat\u00f3rios.","Store PO.Box":"Armazenar caixa postal","The store mail box number.":"O n\u00famero da caixa de correio da loja.","Store Fax":"Armazenar fax","The store fax number.":"O n\u00famero de fax da loja.","Store Additional Information":"Armazenar informa\u00e7\u00f5es adicionais","Store additional information.":"Armazenar informa\u00e7\u00f5es adicionais.","Store Square Logo":"Log\u00f3tipo da Pra\u00e7a da Loja","Choose what is the square logo of the store.":"Escolha qual \u00e9 o logotipo quadrado da loja.","Store Rectangle Logo":"Armazenar logotipo retangular","Choose what is the rectangle logo of the store.":"Escolha qual \u00e9 o logotipo retangular da loja.","Define the default fallback language.":"Defina o idioma de fallback padr\u00e3o.","Currency":"Moeda","Currency Symbol":"S\u00edmbolo de moeda","This is the currency symbol.":"Este \u00e9 o s\u00edmbolo da moeda.","Currency ISO":"ISO da moeda","The international currency ISO format.":"O formato ISO da moeda internacional.","Currency Position":"Posi\u00e7\u00e3o da moeda","Before the amount":"Antes do montante","After the amount":"Ap\u00f3s a quantidade","Define where the currency should be located.":"Defina onde a moeda deve estar localizada.","Preferred Currency":"Moeda preferida","ISO Currency":"Moeda ISO","Symbol":"S\u00edmbolo","Determine what is the currency indicator that should be used.":"Determine qual \u00e9 o indicador de moeda que deve ser usado.","Currency Thousand Separator":"Separador de milhar de moeda","Currency Decimal Separator":"Separador Decimal de Moeda","Define the symbol that indicate decimal number. By default \".\" is used.":"Defina o s\u00edmbolo que indica o n\u00famero decimal. Por padr\u00e3o, \".\" \u00e9 usado.","Currency Precision":"Precis\u00e3o da moeda","%s numbers after the decimal":"%s n\u00fameros ap\u00f3s o decimal","Date Format":"Formato de data","This define how the date should be defined. The default format is \"Y-m-d\".":"Isso define como a data deve ser definida. O formato padr\u00e3o \u00e9 \"Y-m-d\".","Registration":"Cadastro","Registration Open":"Inscri\u00e7\u00f5es abertas","Determine if everyone can register.":"Determine se todos podem se registrar.","Registration Role":"Fun\u00e7\u00e3o de registro","Select what is the registration role.":"Selecione qual \u00e9 a fun\u00e7\u00e3o de registro.","Requires Validation":"Requer valida\u00e7\u00e3o","Force account validation after the registration.":"For\u00e7a a valida\u00e7\u00e3o da conta ap\u00f3s o registro.","Allow Recovery":"Permitir recupera\u00e7\u00e3o","Allow any user to recover his account.":"Permitir que qualquer usu\u00e1rio recupere sua conta.","Receipts":"Recibos","Receipt Template":"Modelo de recibo","Default":"Padr\u00e3o","Choose the template that applies to receipts":"Escolha o modelo que se aplica aos recibos","Receipt Logo":"Logotipo do recibo","Provide a URL to the logo.":"Forne\u00e7a um URL para o logotipo.","Merge Products On Receipt\/Invoice":"Mesclar produtos no recibo\/fatura","All similar products will be merged to avoid a paper waste for the receipt\/invoice.":"Todos os produtos similares ser\u00e3o mesclados para evitar desperd\u00edcio de papel no recibo\/fatura.","Receipt Footer":"Rodap\u00e9 de recibo","If you would like to add some disclosure at the bottom of the receipt.":"Se voc\u00ea gostaria de adicionar alguma divulga\u00e7\u00e3o na parte inferior do recibo.","Column A":"Coluna A","Column B":"Coluna B","Order Code Type":"Tipo de c\u00f3digo de pedido","Determine how the system will generate code for each orders.":"Determine como o sistema ir\u00e1 gerar c\u00f3digo para cada pedido.","Sequential":"Sequencial","Random Code":"C\u00f3digo aleat\u00f3rio","Number Sequential":"N\u00famero Sequencial","Allow Unpaid Orders":"Permitir pedidos n\u00e3o pagos","Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".":"Ir\u00e1 evitar que pedidos incompletos sejam feitos. Se o cr\u00e9dito for permitido, esta op\u00e7\u00e3o deve ser definida como \"sim\".","Allow Partial Orders":"Permitir pedidos parciais","Will prevent partially paid orders to be placed.":"Impedir\u00e1 que sejam feitos pedidos parcialmente pagos.","Quotation Expiration":"Vencimento da cota\u00e7\u00e3o","Quotations will get deleted after they defined they has reached.":"As cota\u00e7\u00f5es ser\u00e3o exclu\u00eddas depois que definirem que foram alcan\u00e7adas.","%s Days":"%s dias","Features":"Recursos","Show Quantity":"Mostrar quantidade","Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.":"Mostrar\u00e1 o seletor de quantidade ao escolher um produto. Caso contr\u00e1rio, a quantidade padr\u00e3o \u00e9 definida como 1.","Allow Customer Creation":"Permitir a cria\u00e7\u00e3o do cliente","Allow customers to be created on the POS.":"Permitir que clientes sejam criados no PDV.","Quick Product":"Produto r\u00e1pido","Allow quick product to be created from the POS.":"Permitir que o produto r\u00e1pido seja criado a partir do PDV.","Editable Unit Price":"Pre\u00e7o unit\u00e1rio edit\u00e1vel","Allow product unit price to be edited.":"Permitir que o pre\u00e7o unit\u00e1rio do produto seja editado.","Order Types":"Tipos de pedido","Control the order type enabled.":"Controle o tipo de pedido habilitado.","Bubble":"Bolha","Ding":"Ding","Pop":"Pop","Cash Sound":"Som do dinheiro","Layout":"Esquema","Retail Layout":"Layout de varejo","Clothing Shop":"Loja de roupas","POS Layout":"Layout de PDV","Change the layout of the POS.":"Altere o layout do PDV.","Sale Complete Sound":"Venda Som Completo","New Item Audio":"Novo item de \u00e1udio","The sound that plays when an item is added to the cart.":"O som que toca quando um item \u00e9 adicionado ao carrinho.","Printing":"Impress\u00e3o","Printed Document":"Documento Impresso","Choose the document used for printing aster a sale.":"Escolha o documento usado para imprimir ap\u00f3s uma venda.","Printing Enabled For":"Impress\u00e3o habilitada para","All Orders":"Todos os pedidos","From Partially Paid Orders":"De pedidos parcialmente pagos","Only Paid Orders":"Apenas pedidos pagos","Determine when the printing should be enabled.":"Determine quando a impress\u00e3o deve ser ativada.","Printing Gateway":"Gateway de impress\u00e3o","Determine what is the gateway used for printing.":"Determine qual \u00e9 o gateway usado para impress\u00e3o.","Enable Cash Registers":"Ativar caixas registradoras","Determine if the POS will support cash registers.":"Determine se o POS suportar\u00e1 caixas registradoras.","Cashier Idle Counter":"Contador ocioso do caixa","5 Minutes":"5 minutos","10 Minutes":"10 minutos","15 Minutes":"15 minutos","20 Minutes":"20 minutos","30 Minutes":"30 minutos","Selected after how many minutes the system will set the cashier as idle.":"Selecionado ap\u00f3s quantos minutos o sistema definir\u00e1 o caixa como ocioso.","Cash Disbursement":"Desembolso de caixa","Allow cash disbursement by the cashier.":"Permitir o desembolso de dinheiro pelo caixa.","Cash Registers":"Caixa registradora","Keyboard Shortcuts":"Atalhos do teclado","Cancel Order":"Cancelar pedido","Keyboard shortcut to cancel the current order.":"Atalho de teclado para cancelar o pedido atual.","Keyboard shortcut to hold the current order.":"Atalho de teclado para manter a ordem atual.","Keyboard shortcut to create a customer.":"Atalho de teclado para criar um cliente.","Proceed Payment":"Continuar pagamento","Keyboard shortcut to proceed to the payment.":"Atalho de teclado para proceder ao pagamento.","Open Shipping":"Envio aberto","Keyboard shortcut to define shipping details.":"Atalho de teclado para definir detalhes de envio.","Open Note":"Abrir nota","Keyboard shortcut to open the notes.":"Atalho de teclado para abrir as notas.","Order Type Selector":"Seletor de tipo de pedido","Keyboard shortcut to open the order type selector.":"Atalho de teclado para abrir o seletor de tipo de pedido.","Toggle Fullscreen":"Alternar para o modo tela cheia","Keyboard shortcut to toggle fullscreen.":"Atalho de teclado para alternar para tela cheia.","Quick Search":"Pesquisa r\u00e1pida","Keyboard shortcut open the quick search popup.":"Atalho de teclado abre o pop-up de pesquisa r\u00e1pida.","Amount Shortcuts":"Atalhos de Quantidade","VAT Type":"Tipo de IVA","Determine the VAT type that should be used.":"Determine o tipo de IVA que deve ser usado.","Flat Rate":"Taxa fixa","Flexible Rate":"Taxa flex\u00edvel","Products Vat":"IVA de produtos","Products & Flat Rate":"Produtos e taxa fixa","Products & Flexible Rate":"Produtos e taxa flex\u00edvel","Define the tax group that applies to the sales.":"Defina o grupo de impostos que se aplica \u00e0s vendas.","Define how the tax is computed on sales.":"Defina como o imposto \u00e9 calculado sobre as vendas.","VAT Settings":"Configura\u00e7\u00f5es de IVA","Enable Email Reporting":"Ativar relat\u00f3rios de e-mail","Determine if the reporting should be enabled globally.":"Determine se o relat\u00f3rio deve ser habilitado globalmente.","Supplies":"Suprimentos","Public Name":"Nome p\u00fablico","Define what is the user public name. If not provided, the username is used instead.":"Defina qual \u00e9 o nome p\u00fablico do usu\u00e1rio. Se n\u00e3o for fornecido, o nome de usu\u00e1rio ser\u00e1 usado.","Enable Workers":"Ativar trabalhadores","Test":"Teste","Choose an option":"Escolha uma op\u00e7\u00e3o","All Refunds":"Todos os reembolsos","Payment Method":"Forma de pagamento","Before submitting the payment, choose the payment type used for that order.":"Antes de enviar o pagamento, escolha o tipo de pagamento usado para esse pedido.","Select the payment type that must apply to the current order.":"Selecione o tipo de pagamento que deve ser aplicado ao pedido atual.","Payment Type":"Tipo de pagamento","Update Instalment Date":"Atualizar data de parcelamento","Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.":"Voc\u00ea gostaria de marcar essa parcela como vencida hoje? Se voc\u00eau confirm the instalment will be marked as paid.","Unknown":"Desconhecido","Search for products.":"Pesquise produtos.","Toggle merging similar products.":"Alterne a mesclagem de produtos semelhantes.","Toggle auto focus.":"Alterne o foco autom\u00e1tico.","Remove Image":"Remover imagem","No result match your query.":"Nenhum resultado corresponde \u00e0 sua consulta.","Report Type":"Tipo de relat\u00f3rio","Categories Detailed":"Categorias detalhadas","Categories Summary":"Resumo das categorias","Allow you to choose the report type.":"Permite que voc\u00ea escolha o tipo de relat\u00f3rio.","Filter User":"Filtrar usu\u00e1rio","All Users":"Todos os usu\u00e1rios","No user was found for proceeding the filtering.":"Nenhum usu\u00e1rio foi encontrado para prosseguir com a filtragem.","This form is not completely loaded.":"Este formul\u00e1rio n\u00e3o est\u00e1 completamente carregado.","Updating":"Atualizando","Updating Modules":"Atualizando M\u00f3dulos","available":"acess\u00edvel","No coupons applies to the cart.":"Nenhum cupom se aplica ao carrinho.","Selected":"Selecionado","Not Authorized":"N\u00e3o autorizado","Creating customers has been explicitly disabled from the settings.":"A cria\u00e7\u00e3o de clientes foi explicitamente desativada nas configura\u00e7\u00f5es.","Credit Limit":"Limite de cr\u00e9dito","An error occurred while opening the order options":"Ocorreu um erro ao abrir as op\u00e7\u00f5es de pedido","There is no instalment defined. Please set how many instalments are allowed for this order":"N\u00e3o h\u00e1 parcela definida. Por favor, defina quantas parcelas s\u00e3o permitidasd for this order","No payment type has been selected on the settings. Please check your POS features and choose the supported order type":"Nenhum tipo de pagamento foi selecionado nas configura\u00e7\u00f5es. Please check your POS features and choose the supported order type","Read More":"consulte Mais informa\u00e7\u00e3o","Select Payment Gateway":"Selecione o gateway de pagamento","Gateway":"Porta de entrada","No tax is active":"Nenhum imposto est\u00e1 ativo","Unable to delete a payment attached to the order.":"N\u00e3o foi poss\u00edvel excluir um pagamento anexado ao pedido.","The request was canceled":"O pedido foi cancelado","The discount has been set to the cart subtotal.":"O desconto foi definido para o subtotal do carrinho.","Order Deletion":"Exclus\u00e3o de pedido","The current order will be deleted as no payment has been made so far.":"O pedido atual ser\u00e1 exclu\u00eddo, pois nenhum pagamento foi feito at\u00e9 o momento.","Void The Order":"Anular o pedido","Unable to void an unpaid order.":"N\u00e3o \u00e9 poss\u00edvel anular um pedido n\u00e3o pago.","Environment Details":"Detalhes do ambiente","Properties":"Propriedades","Extensions":"Extens\u00f5es","Configurations":"Configura\u00e7\u00f5es","Learn More":"Saber mais","Payment Receipt — %s":"Recibo de pagamento — %s","Payment receipt":"Recibo de pagamento","Current Payment":"Pagamento atual","Total Paid":"Total pago","Search Products...":"Procurar produtos...","No results to show.":"Nenhum resultado para mostrar.","Start by choosing a range and loading the report.":"Comece escolhendo um intervalo e carregando o relat\u00f3rio.","There is no product to display...":"N\u00e3o h\u00e1 nenhum produto para exibir...","Sales Discounts":"Descontos de vendas","Sales Taxes":"Impostos sobre vendas","Wipe All":"Limpar tudo","Wipe Plus Grocery":"Limpa mais mercearia","Set what should be the limit of the purchase on credit.":"Defina qual deve ser o limite da compra a cr\u00e9dito.","Birth Date":"Data de nascimento","Displays the customer birth date":"Exibe a data de nascimento do cliente","Provide the customer email.":"Informe o e-mail do cliente.","Accounts List":"Lista de contas","Display All Accounts.":"Exibir todas as contas.","No Account has been registered":"Nenhuma conta foi registrada","Add a new Account":"Adicionar uma nova conta","Create a new Account":"Criar uma nova conta","Register a new Account and save it.":"Registre uma nova conta e salve-a.","Edit Account":"Editar conta","Modify An Account.":"Modificar uma conta.","Return to Accounts":"Voltar para contas","Due With Payment":"Vencimento com pagamento","Customer Phone":"Telefone do cliente","Restrict orders using the customer phone number.":"Restrinja os pedidos usando o n\u00famero de telefone do cliente.","Priority":"Prioridade","Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".":"Defina a ordem de pagamento. \u00bae lower the number is, the first it will display on the payment popup. Must start from \"0\".","Invoice Date":"Data da fatura","Sale Value":"Valor de venda","Purchase Value":"Valor de compra","Would you like to refresh this ?":"Voc\u00ea gostaria de atualizar isso?","Low Quantity":"Quantidade Baixa","Which quantity should be assumed low.":"Qual quantidade deve ser considerada baixa.","Stock Alert":"Alerta de estoque","Define whether the stock alert should be enabled for this unit.":"Defina se o alerta de estoque deve ser ativado para esta unidade.","See Products":"Ver produtos","Provider Products List":"Lista de produtos do provedor","Display all Provider Products.":"Exibir todos os produtos do provedor.","No Provider Products has been registered":"Nenhum produto do provedor foi registrado","Add a new Provider Product":"Adicionar um novo produto do provedor","Create a new Provider Product":"Criar um novo produto do provedor","Register a new Provider Product and save it.":"Registre um novo Produto do Provedor e salve-o.","Edit Provider Product":"Editar produto do provedor","Modify Provider Product.":"Modificar o produto do provedor.","Return to Provider Products":"Devolu\u00e7\u00e3o para produtos do fornecedor","Initial Balance":"Balan\u00e7o inicial","New Balance":"Novo balan\u00e7o","Transaction Type":"Tipo de transa\u00e7\u00e3o","Unchanged":"Inalterado","Clone":"Clone","Would you like to clone this role ?":"Voc\u00ea gostaria de clonar este papel?","Define what roles applies to the user":"Defina quais fun\u00e7\u00f5es se aplicam ao usu\u00e1rio","You cannot delete your own account.":"Voc\u00ea n\u00e3o pode excluir sua pr\u00f3pria conta.","Not Assigned":"N\u00e3o atribu\u00eddo","This value is already in use on the database.":"Este valor j\u00e1 est\u00e1 em uso no banco de dados.","This field should be checked.":"Este campo deve ser verificado.","This field must be a valid URL.":"Este campo deve ser um URL v\u00e1lido.","This field is not a valid email.":"Este campo n\u00e3o \u00e9 um e-mail v\u00e1lido.","Mode":"Modo","Choose what mode applies to this demo.":"Escolha qual modo se aplica a esta demonstra\u00e7\u00e3o.","Set if the sales should be created.":"Defina se as vendas devem ser criadas.","Create Procurements":"Criar aquisi\u00e7\u00f5es","Will create procurements.":"Criar\u00e1 aquisi\u00e7\u00f5es.","If you would like to define a custom invoice date.":"Se voc\u00ea quiser definir uma data de fatura personalizada.","Theme":"Tema","Dark":"Escuro","Light":"Luz","Define what is the theme that applies to the dashboard.":"Defina qual \u00e9 o tema que se aplica ao painel.","Unable to delete this resource as it has %s dependency with %s item.":"N\u00e3o foi poss\u00edvel excluir este recurso, pois ele tem %s depend\u00eancia com o item %s.","Unable to delete this resource as it has %s dependency with %s items.":"N\u00e3o \u00e9 poss\u00edvel excluir este recurso porque ele tem %s depend\u00eancia com %s itens.","Make a new procurement.":"Fa\u00e7a uma nova aquisi\u00e7\u00e3o.","Sales Progress":"Progresso de vendas","Low Stock Report":"Relat\u00f3rio de estoque baixo","About":"Sobre","Details about the environment.":"Detalhes sobre o ambiente.","Core Version":"Vers\u00e3o principal","PHP Version":"Vers\u00e3o do PHP","Mb String Enabled":"String Mb Ativada","Zip Enabled":"Zip ativado","Curl Enabled":"Curl Ativado","Math Enabled":"Matem\u00e1tica ativada","XML Enabled":"XML ativado","XDebug Enabled":"XDebug habilitado","File Upload Enabled":"Upload de arquivo ativado","File Upload Size":"Tamanho do upload do arquivo","Post Max Size":"Tamanho m\u00e1ximo da postagem","Max Execution Time":"Tempo m\u00e1ximo de execu\u00e7\u00e3o","Memory Limit":"Limite de mem\u00f3ria","Low Stock Alert":"Alerta de estoque baixo","Procurement Refreshed":"Aquisi\u00e7\u00e3o atualizada","The procurement \"%s\" has been successfully refreshed.":"A aquisi\u00e7\u00e3o \"%s\" foi atualizada com sucesso.","Partially Due":"Parcialmente devido","Sales Account":"Conta de vendas","Procurements Account":"Conta de compras","Sale Refunds Account":"Conta de reembolso de vendas","Spoiled Goods Account":"Conta de mercadorias estragadas","Customer Crediting Account":"Conta de cr\u00e9dito do cliente","Customer Debiting Account":"Conta de d\u00e9bito do cliente","Administrator":"Administrador","Store Administrator":"Administrador da loja","Store Cashier":"Caixa da loja","User":"Do utilizador","Unable to find the requested account type using the provided id.":"N\u00e3o foi poss\u00edvel encontrar o tipo de conta solicitado usando o ID fornecido.","You cannot delete an account type that has transaction bound.":"Voc\u00ea n\u00e3o pode excluir um tipo de conta que tenha uma transa\u00e7\u00e3o vinculada.","The account type has been deleted.":"O tipo de conta foi exclu\u00eddo.","The account has been created.":"A conta foi criada.","Customer Credit Account":"Conta de cr\u00e9dito do cliente","Customer Debit Account":"Conta de d\u00e9bito do cliente","Register Cash-In Account":"Registrar conta de saque","Register Cash-Out Account":"Registrar conta de saque","Accounts":"Contas","Create Account":"Criar uma conta","Incorrect Authentication Plugin Provided.":"Plugin de autentica\u00e7\u00e3o incorreto fornecido.","Clone of \"%s\"":"Clone de \"%s\"","The role has been cloned.":"O papel foi clonado.","Require Valid Email":"Exigir e-mail v\u00e1lido","Will for valid unique email for every customer.":"Ser\u00e1 v\u00e1lido um e-mail exclusivo para cada cliente.","Require Unique Phone":"Exigir telefone exclusivo","Every customer should have a unique phone number.":"Cada cliente deve ter um n\u00famero de telefone exclusivo.","Define the default theme.":"Defina o tema padr\u00e3o.","Merge Similar Items":"Mesclar itens semelhantes","Will enforce similar products to be merged from the POS.":"Ir\u00e1 impor a mesclagem de produtos semelhantes a partir do PDV.","Toggle Product Merge":"Alternar mesclagem de produtos","Will enable or disable the product merging.":"Habilitar\u00e1 ou desabilitar\u00e1 a mesclagem de produtos.","Your system is running in production mode. You probably need to build the assets":"Seu sistema est\u00e1 sendo executado em modo de produ\u00e7\u00e3o. Voc\u00ea provavelmente precisa construir os ativos","Your system is in development mode. Make sure to build the assets.":"Seu sistema est\u00e1 em modo de desenvolvimento. Certifique-se de construir os ativos.","Unassigned":"N\u00e3o atribu\u00eddo","Display all product stock flow.":"Exibir todo o fluxo de estoque do produto.","No products stock flow has been registered":"Nenhum fluxo de estoque de produtos foi registrado","Add a new products stock flow":"Adicionar um novo fluxo de estoque de produtos","Create a new products stock flow":"Criar um novo fluxo de estoque de produtos","Register a new products stock flow and save it.":"Cadastre um novo fluxo de estoque de produtos e salve-o.","Edit products stock flow":"Editar fluxo de estoque de produtos","Modify Globalproducthistorycrud.":"Modifique Globalproducthistorycrud.","Initial Quantity":"Quantidade inicial","New Quantity":"Nova quantidade","No Dashboard":"Sem painel","Not Found Assets":"Recursos n\u00e3o encontrados","Stock Flow Records":"Registros de fluxo de estoque","The user attributes has been updated.":"Os atributos do usu\u00e1rio foram atualizados.","Laravel Version":"Vers\u00e3o Laravel","There is a missing dependency issue.":"H\u00e1 um problema de depend\u00eancia ausente.","The Action You Tried To Perform Is Not Allowed.":"A a\u00e7\u00e3o que voc\u00ea tentou executar n\u00e3o \u00e9 permitida.","Unable to locate the assets.":"N\u00e3o foi poss\u00edvel localizar os ativos.","All the customers has been transferred to the new group %s.":"Todos os clientes foram transferidos para o novo grupo %s.","The request method is not allowed.":"O m\u00e9todo de solicita\u00e7\u00e3o n\u00e3o \u00e9 permitido.","A Database Exception Occurred.":"Ocorreu uma exce\u00e7\u00e3o de banco de dados.","An error occurred while validating the form.":"Ocorreu um erro ao validar o formul\u00e1rio.","Enter":"Digitar","Search...":"Procurar...","Unable to hold an order which payment status has been updated already.":"N\u00e3o foi poss\u00edvel reter um pedido cujo status de pagamento j\u00e1 foi atualizado.","Unable to change the price mode. This feature has been disabled.":"N\u00e3o foi poss\u00edvel alterar o modo de pre\u00e7o. Este recurso foi desativado.","Enable WholeSale Price":"Ativar pre\u00e7o de atacado","Would you like to switch to wholesale price ?":"Gostaria de mudar para o pre\u00e7o de atacado?","Enable Normal Price":"Ativar pre\u00e7o normal","Would you like to switch to normal price ?":"Deseja mudar para o pre\u00e7o normal?","Search products...":"Procurar produtos...","Set Sale Price":"Definir pre\u00e7o de venda","Remove":"Remover","No product are added to this group.":"Nenhum produto foi adicionado a este grupo.","Delete Sub item":"Excluir subitem","Would you like to delete this sub item?":"Deseja excluir este subitem?","Unable to add a grouped product.":"N\u00e3o foi poss\u00edvel adicionar um produto agrupado.","Choose The Unit":"Escolha a unidade","Stock Report":"Relat\u00f3rio de Estoque","Wallet Amount":"Valor da carteira","Wallet History":"Hist\u00f3rico da carteira","Transaction":"Transa\u00e7\u00e3o","No History...":"Sem hist\u00f3rico...","Removing":"Removendo","Refunding":"Reembolso","Unknow":"Desconhecido","Skip Instalments":"Pular Parcelas","Define the product type.":"Defina o tipo de produto.","Dynamic":"Din\u00e2mico","In case the product is computed based on a percentage, define the rate here.":"Caso o produto seja calculado com base em porcentagem, defina a taxa aqui.","Before saving this order, a minimum payment of {amount} is required":"Antes de salvar este pedido, \u00e9 necess\u00e1rio um pagamento m\u00ednimo de {amount}","Initial Payment":"Pagamento inicial","In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?":"Para prosseguir, \u00e9 necess\u00e1rio um pagamento inicial de {amount} para o tipo de pagamento selecionado \"{paymentType}\". Gostaria de continuar ?","Search Customer...":"Pesquisar cliente...","Due Amount":"Valor devido","Wallet Balance":"Saldo da carteira","Total Orders":"Total de pedidos","What slug should be used ? [Q] to quit.":"Que slug deve ser usado? [Q] para sair.","\"%s\" is a reserved class name":"\"%s\" \u00e9 um nome de classe reservado","The migration file has been successfully forgotten for the module %s.":"O arquivo de migra\u00e7\u00e3o foi esquecido com sucesso para o m\u00f3dulo %s.","%s products where updated.":"%s produtos foram atualizados.","Previous Amount":"Valor anterior","Next Amount":"Pr\u00f3ximo Valor","Restrict the records by the creation date.":"Restrinja os registros pela data de cria\u00e7\u00e3o.","Restrict the records by the author.":"Restringir os registros pelo autor.","Grouped Product":"Produto agrupado","Groups":"Grupos","Choose Group":"Escolher Grupo","Grouped":"Agrupado","An error has occurred":"Ocorreu um erro","Unable to proceed, the submitted form is not valid.":"N\u00e3o foi poss\u00edvel continuar, o formul\u00e1rio enviado n\u00e3o \u00e9 v\u00e1lido.","No activation is needed for this account.":"Nenhuma ativa\u00e7\u00e3o \u00e9 necess\u00e1ria para esta conta.","Invalid activation token.":"Token de ativa\u00e7\u00e3o inv\u00e1lido.","The expiration token has expired.":"O token de expira\u00e7\u00e3o expirou.","Your account is not activated.":"Sua conta n\u00e3o est\u00e1 ativada.","Unable to change a password for a non active user.":"N\u00e3o \u00e9 poss\u00edvel alterar a senha de um usu\u00e1rio n\u00e3o ativo.","Unable to submit a new password for a non active user.":"N\u00e3o \u00e9 poss\u00edvel enviar uma nova senha para um usu\u00e1rio n\u00e3o ativo.","Unable to delete an entry that no longer exists.":"N\u00e3o \u00e9 poss\u00edvel excluir uma entrada que n\u00e3o existe mais.","Provides an overview of the products stock.":"Fornece uma vis\u00e3o geral do estoque de produtos.","Customers Statement":"Declara\u00e7\u00e3o de clientes","Display the complete customer statement.":"Exiba o extrato completo do cliente.","The recovery has been explicitly disabled.":"A recupera\u00e7\u00e3o foi explicitamente desativada.","The registration has been explicitly disabled.":"O registro foi explicitamente desabilitado.","The entry has been successfully updated.":"A entrada foi atualizada com sucesso.","A similar module has been found":"Um m\u00f3dulo semelhante foi encontrado","A grouped product cannot be saved without any sub items.":"Um produto agrupado n\u00e3o pode ser salvo sem subitens.","A grouped product cannot contain grouped product.":"Um produto agrupado n\u00e3o pode conter produtos agrupados.","The subitem has been saved.":"O subitem foi salvo.","The %s is already taken.":"O %s j\u00e1 foi usado.","Allow Wholesale Price":"Permitir pre\u00e7o de atacado","Define if the wholesale price can be selected on the POS.":"Defina se o pre\u00e7o de atacado pode ser selecionado no PDV.","Allow Decimal Quantities":"Permitir quantidades decimais","Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.":"Mudar\u00e1 o teclado num\u00e9rico para permitir decimal para quantidades. Apenas para teclado num\u00e9rico \"padr\u00e3o\".","Numpad":"Teclado num\u00e9rico","Advanced":"Avan\u00e7ado","Will set what is the numpad used on the POS screen.":"Ir\u00e1 definir qual \u00e9 o teclado num\u00e9rico usado na tela do PDV.","Force Barcode Auto Focus":"For\u00e7ar foco autom\u00e1tico de c\u00f3digo de barras","Will permanently enable barcode autofocus to ease using a barcode reader.":"Habilitar\u00e1 permanentemente o foco autom\u00e1tico de c\u00f3digo de barras para facilitar o uso de um leitor de c\u00f3digo de barras.","Tax Included":"Taxas inclu\u00eddas","Unable to proceed, more than one product is set as featured":"N\u00e3o foi poss\u00edvel continuar, mais de um produto est\u00e1 definido como destaque","The transaction was deleted.":"A transa\u00e7\u00e3o foi exclu\u00edda.","Database connection was successful.":"A conex\u00e3o do banco de dados foi bem-sucedida.","The products taxes were computed successfully.":"Os impostos dos produtos foram calculados com sucesso.","Tax Excluded":"Imposto Exclu\u00eddo","Set Paid":"Definir pago","Would you like to mark this procurement as paid?":"Gostaria de marcar esta aquisi\u00e7\u00e3o como paga?","Unidentified Item":"Item n\u00e3o identificado","Non-existent Item":"Item inexistente","You cannot change the status of an already paid procurement.":"Voc\u00ea n\u00e3o pode alterar o status de uma aquisi\u00e7\u00e3o j\u00e1 paga.","The procurement payment status has been changed successfully.":"O status de pagamento de compras foi alterado com sucesso.","The procurement has been marked as paid.":"A aquisi\u00e7\u00e3o foi marcada como paga.","Show Price With Tax":"Mostrar pre\u00e7o com impostos","Will display price with tax for each products.":"Mostrar\u00e1 o pre\u00e7o com impostos para cada produto.","Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".":"N\u00e3o foi poss\u00edvel carregar o componente \"${action.component}\". Certifique-se de que o componente esteja registrado em \"nsExtraComponents\".","Tax Inclusive":"Impostos Inclusos","Apply Coupon":"Aplicar cupom","Not applicable":"N\u00e3o aplic\u00e1vel","Normal":"Normal","Product Taxes":"Impostos sobre produtos","The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.":"A unidade anexada a este produto est\u00e1 ausente ou n\u00e3o atribu\u00edda. Revise a guia \"Unidade\" para este produto.","X Days After Month Starts":"X Days After Month Starts","On Specific Day":"On Specific Day","Unknown Occurance":"Unknown Occurance","Please provide a valid value.":"Please provide a valid value.","Done":"Done","Would you like to delete \"%s\"?":"Would you like to delete \"%s\"?","Unable to find a module having as namespace \"%s\"":"Unable to find a module having as namespace \"%s\"","Api File":"Api File","Migrations":"Migrations","Determine Until When the coupon is valid.":"Determine Until When the coupon is valid.","Customer Groups":"Customer Groups","Assigned To Customer Group":"Assigned To Customer Group","Only the customers who belongs to the selected groups will be able to use the coupon.":"Only the customers who belongs to the selected groups will be able to use the coupon.","Assigned To Customers":"Assigned To Customers","Only the customers selected will be ale to use the coupon.":"Only the customers selected will be ale to use the coupon.","Unable to save the coupon as one of the selected customer no longer exists.":"Unable to save the coupon as one of the selected customer no longer exists.","Unable to save the coupon as one of the selected customer group no longer exists.":"Unable to save the coupon as one of the selected customer group no longer exists.","Unable to save the coupon as one of the customers provided no longer exists.":"Unable to save the coupon as one of the customers provided no longer exists.","Unable to save the coupon as one of the provided customer group no longer exists.":"Unable to save the coupon as one of the provided customer group no longer exists.","Coupon Order Histories List":"Coupon Order Histories List","Display all coupon order histories.":"Display all coupon order histories.","No coupon order histories has been registered":"No coupon order histories has been registered","Add a new coupon order history":"Add a new coupon order history","Create a new coupon order history":"Create a new coupon order history","Register a new coupon order history and save it.":"Register a new coupon order history and save it.","Edit coupon order history":"Edit coupon order history","Modify Coupon Order History.":"Modify Coupon Order History.","Return to Coupon Order Histories":"Return to Coupon Order Histories","Customer_coupon_id":"Customer_coupon_id","Order_id":"Order_id","Discount_value":"Discount_value","Minimum_cart_value":"Minimum_cart_value","Maximum_cart_value":"Maximum_cart_value","Limit_usage":"Limit_usage","Would you like to delete this?":"Would you like to delete this?","Usage History":"Usage History","Customer Coupon Histories List":"Customer Coupon Histories List","Display all customer coupon histories.":"Display all customer coupon histories.","No customer coupon histories has been registered":"No customer coupon histories has been registered","Add a new customer coupon history":"Add a new customer coupon history","Create a new customer coupon history":"Create a new customer coupon history","Register a new customer coupon history and save it.":"Register a new customer coupon history and save it.","Edit customer coupon history":"Edit customer coupon history","Modify Customer Coupon History.":"Modify Customer Coupon History.","Return to Customer Coupon Histories":"Return to Customer Coupon Histories","Last Name":"Last Name","Provide the customer last name":"Provide the customer last name","Provide the customer gender.":"Provide the customer gender.","Provide the billing first name.":"Provide the billing first name.","Provide the billing last name.":"Provide the billing last name.","Provide the shipping First Name.":"Provide the shipping First Name.","Provide the shipping Last Name.":"Provide the shipping Last Name.","Scheduled":"Scheduled","Set the scheduled date.":"Set the scheduled date.","Account Name":"Account Name","Provider last name if necessary.":"Provider last name if necessary.","Provide the user first name.":"Provide the user first name.","Provide the user last name.":"Provide the user last name.","Set the user gender.":"Set the user gender.","Set the user phone number.":"Set the user phone number.","Set the user PO Box.":"Set the user PO Box.","Provide the billing First Name.":"Provide the billing First Name.","Last name":"Last name","Group Name":"Group Name","Delete a user":"Delete a user","Activated":"Activated","type":"type","User Group":"User Group","Scheduled On":"Scheduled On","Biling":"Biling","API Token":"API Token","Your Account has been successfully created.":"Your Account has been successfully created.","Unable to export if there is nothing to export.":"Unable to export if there is nothing to export.","%s Coupons":"%s Coupons","%s Coupon History":"%s Coupon History","\"%s\" Record History":"\"%s\" Record History","The media name was successfully updated.":"The media name was successfully updated.","The role was successfully assigned.":"The role was successfully assigned.","The role were successfully assigned.":"The role were successfully assigned.","Unable to identifier the provided role.":"Unable to identifier the provided role.","Good Condition":"Good Condition","Cron Disabled":"Cron Disabled","Task Scheduling Disabled":"Task Scheduling Disabled","NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.":"NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.","The email \"%s\" is already used for another customer.":"The email \"%s\" is already used for another customer.","The provided coupon cannot be loaded for that customer.":"The provided coupon cannot be loaded for that customer.","The provided coupon cannot be loaded for the group assigned to the selected customer.":"The provided coupon cannot be loaded for the group assigned to the selected customer.","Unable to use the coupon %s as it has expired.":"Unable to use the coupon %s as it has expired.","Unable to use the coupon %s at this moment.":"Unable to use the coupon %s at this moment.","Small Box":"Small Box","Box":"Box","%s products were freed":"%s products were freed","Restoring cash flow from paid orders...":"Restoring cash flow from paid orders...","Restoring cash flow from refunded orders...":"Restoring cash flow from refunded orders...","%s on %s directories were deleted.":"%s on %s directories were deleted.","%s on %s files were deleted.":"%s on %s files were deleted.","First Day Of Month":"First Day Of Month","Last Day Of Month":"Last Day Of Month","Month middle Of Month":"Month middle Of Month","{day} after month starts":"{day} after month starts","{day} before month ends":"{day} before month ends","Every {day} of the month":"Every {day} of the month","Days":"Days","Make sure set a day that is likely to be executed":"Make sure set a day that is likely to be executed","Invalid Module provided.":"Invalid Module provided.","The module was \"%s\" was successfully installed.":"The module was \"%s\" was successfully installed.","The modules \"%s\" was deleted successfully.":"The modules \"%s\" was deleted successfully.","Unable to locate a module having as identifier \"%s\".":"Unable to locate a module having as identifier \"%s\".","All migration were executed.":"All migration were executed.","Unknown Product Status":"Unknown Product Status","Member Since":"Member Since","Total Customers":"Total Customers","The widgets was successfully updated.":"The widgets was successfully updated.","The token was successfully created":"The token was successfully created","The token has been successfully deleted.":"The token has been successfully deleted.","Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".":"Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".","Will display all cashiers who performs well.":"Will display all cashiers who performs well.","Will display all customers with the highest purchases.":"Will display all customers with the highest purchases.","Expense Card Widget":"Expense Card Widget","Will display a card of current and overwall expenses.":"Will display a card of current and overwall expenses.","Incomplete Sale Card Widget":"Incomplete Sale Card Widget","Will display a card of current and overall incomplete sales.":"Will display a card of current and overall incomplete sales.","Orders Chart":"Orders Chart","Will display a chart of weekly sales.":"Will display a chart of weekly sales.","Orders Summary":"Orders Summary","Will display a summary of recent sales.":"Will display a summary of recent sales.","Will display a profile widget with user stats.":"Will display a profile widget with user stats.","Sale Card Widget":"Sale Card Widget","Will display current and overall sales.":"Will display current and overall sales.","Return To Calendar":"Return To Calendar","Thr":"Thr","The left range will be invalid.":"The left range will be invalid.","The right range will be invalid.":"The right range will be invalid.","Click here to add widgets":"Click here to add widgets","Choose Widget":"Choose Widget","Select with widget you want to add to the column.":"Select with widget you want to add to the column.","Unamed Tab":"Unamed Tab","An error unexpected occured while printing.":"An error unexpected occured while printing.","and":"and","{date} ago":"{date} ago","In {date}":"In {date}","An unexpected error occured.":"An unexpected error occured.","Warning":"Warning","Change Type":"Change Type","Save Expense":"Save Expense","No configuration were choosen. Unable to proceed.":"No configuration were choosen. Unable to proceed.","Conditions":"Conditions","By proceeding the current for and all your entries will be cleared. Would you like to proceed?":"By proceeding the current for and all your entries will be cleared. Would you like to proceed?","No modules matches your search term.":"No modules matches your search term.","Press \"\/\" to search modules":"Press \"\/\" to search modules","No module has been uploaded yet.":"No module has been uploaded yet.","{module}":"{module}","Would you like to delete \"{module}\"? All data created by the module might also be deleted.":"Would you like to delete \"{module}\"? All data created by the module might also be deleted.","Search Medias":"Search Medias","Bulk Select":"Bulk Select","Press "\/" to search permissions":"Press "\/" to search permissions","SKU, Barcode, Name":"SKU, Barcode, Name","About Token":"About Token","Save Token":"Save Token","Generated Tokens":"Generated Tokens","Created":"Created","Last Use":"Last Use","Never":"Never","Expires":"Expires","Revoke":"Revoke","Token Name":"Token Name","This will be used to identifier the token.":"This will be used to identifier the token.","Unable to proceed, the form is not valid.":"Unable to proceed, the form is not valid.","An unexpected error occured":"An unexpected error occured","An Error Has Occured":"An Error Has Occured","Febuary":"Febuary","Configure":"Configure","Unable to add the product":"Unable to add the product","No result to result match the search value provided.":"No result to result match the search value provided.","This QR code is provided to ease authentication on external applications.":"This QR code is provided to ease authentication on external applications.","Copy And Close":"Copy And Close","An error has occured":"An error has occured","Recents Orders":"Recents Orders","Unamed Page":"Unamed Page","Assignation":"Assignation","Incoming Conversion":"Incoming Conversion","Outgoing Conversion":"Outgoing Conversion","Unknown Action":"Unknown Action","Direct Transaction":"Direct Transaction","Recurring Transaction":"Recurring Transaction","Entity Transaction":"Entity Transaction","Scheduled Transaction":"Scheduled Transaction","Unknown Type (%s)":"Unknown Type (%s)","What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.":"What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.","What is the full model name. eg: App\\Models\\Order ? [Q] to quit.":"What is the full model name. eg: App\\Models\\Order ? [Q] to quit.","What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.":"What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.","Unsupported argument provided: \"%s\"":"Unsupported argument provided: \"%s\"","The authorization token can\\'t be changed manually.":"The authorization token can\\'t be changed manually.","Translation process is complete for the module %s !":"Translation process is complete for the module %s !","%s migration(s) has been deleted.":"%s migration(s) has been deleted.","The command has been created for the module \"%s\"!":"The command has been created for the module \"%s\"!","The controller has been created for the module \"%s\"!":"The controller has been created for the module \"%s\"!","The event has been created at the following path \"%s\"!":"The event has been created at the following path \"%s\"!","The listener has been created on the path \"%s\"!":"The listener has been created on the path \"%s\"!","A request with the same name has been found !":"A request with the same name has been found !","Unable to find a module having the identifier \"%s\".":"Unable to find a module having the identifier \"%s\".","Unsupported reset mode.":"Unsupported reset mode.","You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.":"You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.","Unable to find a module having \"%s\" as namespace.":"Unable to find a module having \"%s\" as namespace.","A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.":"A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.","A new form class was created at the path \"%s\"":"A new form class was created at the path \"%s\"","Unable to proceed, looks like the database can\\'t be used.":"Unable to proceed, looks like the database can\\'t be used.","In which language would you like to install NexoPOS ?":"In which language would you like to install NexoPOS ?","You must define the language of installation.":"You must define the language of installation.","The value above which the current coupon can\\'t apply.":"The value above which the current coupon can\\'t apply.","Unable to save the coupon product as this product doens\\'t exists.":"Unable to save the coupon product as this product doens\\'t exists.","Unable to save the coupon category as this category doens\\'t exists.":"Unable to save the coupon category as this category doens\\'t exists.","Unable to save the coupon as this category doens\\'t exists.":"Unable to save the coupon as this category doens\\'t exists.","You\\re not allowed to do that.":"You\\re not allowed to do that.","Crediting (Add)":"Crediting (Add)","Refund (Add)":"Refund (Add)","Deducting (Remove)":"Deducting (Remove)","Payment (Remove)":"Payment (Remove)","The assigned default customer group doesn\\'t exist or is not defined.":"The assigned default customer group doesn\\'t exist or is not defined.","Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0":"Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0","You\\'re not allowed to do this operation":"You\\'re not allowed to do this operation","If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.":"If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.","Convert Unit":"Convert Unit","The unit that is selected for convertion by default.":"The unit that is selected for convertion by default.","COGS":"COGS","Used to define the Cost of Goods Sold.":"Used to define the Cost of Goods Sold.","Visible":"Visible","Define whether the unit is available for sale.":"Define whether the unit is available for sale.","Product unique name. If it\\' variation, it should be relevant for that variation":"Product unique name. If it\\' variation, it should be relevant for that variation","The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.":"The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.","The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.":"The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.","Auto COGS":"Auto COGS","Unknown Type: %s":"Unknown Type: %s","Shortage":"Shortage","Overage":"Overage","Transactions List":"Transactions List","Display all transactions.":"Display all transactions.","No transactions has been registered":"No transactions has been registered","Add a new transaction":"Add a new transaction","Create a new transaction":"Create a new transaction","Register a new transaction and save it.":"Register a new transaction and save it.","Edit transaction":"Edit transaction","Modify Transaction.":"Modify Transaction.","Return to Transactions":"Return to Transactions","determine if the transaction is effective or not. Work for recurring and not recurring transactions.":"determine if the transaction is effective or not. Work for recurring and not recurring transactions.","Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.":"Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.","Transaction Account":"Transaction Account","Assign the transaction to an account430":"Assign the transaction to an account430","Is the value or the cost of the transaction.":"Is the value or the cost of the transaction.","If set to Yes, the transaction will trigger on defined occurrence.":"If set to Yes, the transaction will trigger on defined occurrence.","Define how often this transaction occurs":"Define how often this transaction occurs","Define what is the type of the transactions.":"Define what is the type of the transactions.","Trigger":"Trigger","Would you like to trigger this expense now?":"Would you like to trigger this expense now?","Transactions History List":"Transactions History List","Display all transaction history.":"Display all transaction history.","No transaction history has been registered":"No transaction history has been registered","Add a new transaction history":"Add a new transaction history","Create a new transaction history":"Create a new transaction history","Register a new transaction history and save it.":"Register a new transaction history and save it.","Edit transaction history":"Edit transaction history","Modify Transactions history.":"Modify Transactions history.","Return to Transactions History":"Return to Transactions History","Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.":"Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.","Set the limit that can\\'t be exceeded by the user.":"Set the limit that can\\'t be exceeded by the user.","Oops, We\\'re Sorry!!!":"Oops, We\\'re Sorry!!!","Class: %s":"Class: %s","There\\'s is mismatch with the core version.":"There\\'s is mismatch with the core version.","You\\'re not authenticated.":"You\\'re not authenticated.","An error occured while performing your request.":"An error occured while performing your request.","A mismatch has occured between a module and it\\'s dependency.":"A mismatch has occured between a module and it\\'s dependency.","You\\'re not allowed to see that page.":"You\\'re not allowed to see that page.","Post Too Large":"Post Too Large","The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini":"The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini","This field does\\'nt have a valid value.":"This field does\\'nt have a valid value.","Describe the direct transaction.":"Describe the direct transaction.","If set to yes, the transaction will take effect immediately and be saved on the history.":"If set to yes, the transaction will take effect immediately and be saved on the history.","Assign the transaction to an account.":"Assign the transaction to an account.","set the value of the transaction.":"set the value of the transaction.","Further details on the transaction.":"Further details on the transaction.","Describe the direct transactions.":"Describe the direct transactions.","set the value of the transactions.":"set the value of the transactions.","The transactions will be multipled by the number of user having that role.":"The transactions will be multipled by the number of user having that role.","Create Sales (needs Procurements)":"Create Sales (needs Procurements)","Set when the transaction should be executed.":"Set when the transaction should be executed.","The addresses were successfully updated.":"The addresses were successfully updated.","Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.":"Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.","The register doesn\\'t have an history.":"The register doesn\\'t have an history.","Unable to check a register session history if it\\'s closed.":"Unable to check a register session history if it\\'s closed.","Register History For : %s":"Register History For : %s","Can\\'t delete a category having sub categories linked to it.":"Can\\'t delete a category having sub categories linked to it.","Unable to proceed. The request doesn\\'t provide enough data which could be handled":"Unable to proceed. The request doesn\\'t provide enough data which could be handled","Unable to load the CRUD resource : %s.":"Unable to load the CRUD resource : %s.","Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods":"Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods","The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.":"The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.","The crud columns exceed the maximum column that can be exported (27)":"The crud columns exceed the maximum column that can be exported (27)","This link has expired.":"This link has expired.","Account History : %s":"Account History : %s","Welcome — %s":"Welcome — %s","Upload and manage medias (photos).":"Upload and manage medias (photos).","The product which id is %s doesnt\\'t belong to the procurement which id is %s":"The product which id is %s doesnt\\'t belong to the procurement which id is %s","The refresh process has started. You\\'ll get informed once it\\'s complete.":"The refresh process has started. You\\'ll get informed once it\\'s complete.","The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".":"The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".","Stock History For %s":"Stock History For %s","Set":"Set","The unit is not set for the product \"%s\".":"The unit is not set for the product \"%s\".","The operation will cause a negative stock for the product \"%s\" (%s).":"The operation will cause a negative stock for the product \"%s\" (%s).","The adjustment quantity can\\'t be negative for the product \"%s\" (%s)":"The adjustment quantity can\\'t be negative for the product \"%s\" (%s)","%s\\'s Products":"%s\\'s Products","Transactions Report":"Transactions Report","Combined Report":"Combined Report","Provides a combined report for every transactions on products.":"Provides a combined report for every transactions on products.","Unable to initiallize the settings page. The identifier \"' . $identifier . '":"Unable to initiallize the settings page. The identifier \"' . $identifier . '","Shows all histories generated by the transaction.":"Shows all histories generated by the transaction.","Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.":"Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.","Create New Transaction":"Create New Transaction","Set direct, scheduled transactions.":"Set direct, scheduled transactions.","Update Transaction":"Update Transaction","The provided data aren\\'t valid":"The provided data aren\\'t valid","Welcome — NexoPOS":"Welcome — NexoPOS","You\\'re not allowed to see this page.":"You\\'re not allowed to see this page.","Your don\\'t have enough permission to perform this action.":"Your don\\'t have enough permission to perform this action.","You don\\'t have the necessary role to see this page.":"You don\\'t have the necessary role to see this page.","%s order(s) has recently been deleted as they has expired.":"%s order(s) has recently been deleted as they has expired.","%s product(s) has low stock. Reorder those product(s) before it get exhausted.":"%s product(s) has low stock. Reorder those product(s) before it get exhausted.","Scheduled Transactions":"Scheduled Transactions","the transaction \"%s\" was executed as scheduled on %s.":"the transaction \"%s\" was executed as scheduled on %s.","Workers Aren\\'t Running":"Workers Aren\\'t Running","The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.":"The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.","Unable to remove the permissions \"%s\". It doesn\\'t exists.":"Unable to remove the permissions \"%s\". It doesn\\'t exists.","An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A":"An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A","Unable to open \"%s\" *, as it\\'s not closed.":"Unable to open \"%s\" *, as it\\'s not closed.","Unable to open \"%s\" *, as it\\'s not opened.":"Unable to open \"%s\" *, as it\\'s not opened.","Unable to cashing on \"%s\" *, as it\\'s not opened.":"Unable to cashing on \"%s\" *, as it\\'s not opened.","Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.":"Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.","Unable to cashout on \"%s":"Unable to cashout on \"%s","Symbolic Links Missing":"Symbolic Links Missing","The Symbolic Links to the public directory is missing. Your medias might be broken and not display.":"The Symbolic Links to the public directory is missing. Your medias might be broken and not display.","Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.":"Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.","The requested module %s cannot be found.":"The requested module %s cannot be found.","The manifest.json can\\'t be located inside the module %s on the path: %s":"The manifest.json can\\'t be located inside the module %s on the path: %s","the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.":"the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.","Sorting is explicitely disabled for the column \"%s\".":"Sorting is explicitely disabled for the column \"%s\".","Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s":"Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s","Unable to find the customer using the provided id %s.":"Unable to find the customer using the provided id %s.","Not enough credits on the customer account. Requested : %s, Remaining: %s.":"Not enough credits on the customer account. Requested : %s, Remaining: %s.","The customer account doesn\\'t have enough funds to proceed.":"The customer account doesn\\'t have enough funds to proceed.","Unable to find a reference to the attached coupon : %s":"Unable to find a reference to the attached coupon : %s","You\\'re not allowed to use this coupon as it\\'s no longer active":"You\\'re not allowed to use this coupon as it\\'s no longer active","You\\'re not allowed to use this coupon it has reached the maximum usage allowed.":"You\\'re not allowed to use this coupon it has reached the maximum usage allowed.","Terminal A":"Terminal A","Terminal B":"Terminal B","%s link were deleted":"%s link were deleted","Unable to execute the following class callback string : %s":"Unable to execute the following class callback string : %s","%s — %s":"%s — %s","Transactions":"Transactions","Create Transaction":"Create Transaction","Stock History":"Stock History","Invoices":"Invoices","Failed to parse the configuration file on the following path \"%s\"":"Failed to parse the configuration file on the following path \"%s\"","No config.xml has been found on the directory : %s. This folder is ignored":"No config.xml has been found on the directory : %s. This folder is ignored","The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ":"The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ","Unable to upload this module as it\\'s older than the version installed":"Unable to upload this module as it\\'s older than the version installed","The migration file doens\\'t have a valid class name. Expected class : %s":"The migration file doens\\'t have a valid class name. Expected class : %s","Unable to locate the following file : %s":"Unable to locate the following file : %s","The migration file doens\\'t have a valid method name. Expected method : %s":"The migration file doens\\'t have a valid method name. Expected method : %s","The module %s cannot be enabled as his dependency (%s) is missing or not enabled.":"The module %s cannot be enabled as his dependency (%s) is missing or not enabled.","The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.":"The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.","An Error Occurred \"%s\": %s":"An Error Occurred \"%s\": %s","The order has been updated":"The order has been updated","The minimal payment of %s has\\'nt been provided.":"The minimal payment of %s has\\'nt been provided.","Unable to proceed as the order is already paid.":"Unable to proceed as the order is already paid.","The customer account funds are\\'nt enough to process the payment.":"The customer account funds are\\'nt enough to process the payment.","Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.","Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.","By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.":"By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.","You\\'re not allowed to make payments.":"You\\'re not allowed to make payments.","Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s":"Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s","Unknown Status (%s)":"Unknown Status (%s)","%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.":"%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.","Unable to find a reference of the provided coupon : %s":"Unable to find a reference of the provided coupon : %s","The procurement has been deleted. %s included stock record(s) has been deleted as well.":"The procurement has been deleted. %s included stock record(s) has been deleted as well.","Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.":"Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.","Unable to find the product using the provided id \"%s\"":"Unable to find the product using the provided id \"%s\"","Unable to procure the product \"%s\" as the stock management is disabled.":"Unable to procure the product \"%s\" as the stock management is disabled.","Unable to procure the product \"%s\" as it is a grouped product.":"Unable to procure the product \"%s\" as it is a grouped product.","The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item":"The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item","%s procurement(s) has recently been automatically procured.":"%s procurement(s) has recently been automatically procured.","The requested category doesn\\'t exists":"The requested category doesn\\'t exists","The category to which the product is attached doesn\\'t exists or has been deleted":"The category to which the product is attached doesn\\'t exists or has been deleted","Unable to create a product with an unknow type : %s":"Unable to create a product with an unknow type : %s","A variation within the product has a barcode which is already in use : %s.":"A variation within the product has a barcode which is already in use : %s.","A variation within the product has a SKU which is already in use : %s":"A variation within the product has a SKU which is already in use : %s","Unable to edit a product with an unknown type : %s":"Unable to edit a product with an unknown type : %s","The requested sub item doesn\\'t exists.":"The requested sub item doesn\\'t exists.","One of the provided product variation doesn\\'t include an identifier.":"One of the provided product variation doesn\\'t include an identifier.","The product\\'s unit quantity has been updated.":"The product\\'s unit quantity has been updated.","Unable to reset this variable product \"%s":"Unable to reset this variable product \"%s","Adjusting grouped product inventory must result of a create, update, delete sale operation.":"Adjusting grouped product inventory must result of a create, update, delete sale operation.","Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).":"Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).","Unsupported stock action \"%s\"":"Unsupported stock action \"%s\"","%s product(s) has been deleted.":"%s product(s) has been deleted.","%s products(s) has been deleted.":"%s products(s) has been deleted.","Unable to find the product, as the argument \"%s\" which value is \"%s":"Unable to find the product, as the argument \"%s\" which value is \"%s","You cannot convert unit on a product having stock management disabled.":"You cannot convert unit on a product having stock management disabled.","The source and the destination unit can\\'t be the same. What are you trying to do ?":"The source and the destination unit can\\'t be the same. What are you trying to do ?","There is no source unit quantity having the name \"%s\" for the item %s":"There is no source unit quantity having the name \"%s\" for the item %s","There is no destination unit quantity having the name %s for the item %s":"There is no destination unit quantity having the name %s for the item %s","The source unit and the destination unit doens\\'t belong to the same unit group.":"The source unit and the destination unit doens\\'t belong to the same unit group.","The group %s has no base unit defined":"The group %s has no base unit defined","The conversion of %s(%s) to %s(%s) was successful":"The conversion of %s(%s) to %s(%s) was successful","The product has been deleted.":"The product has been deleted.","An error occurred: %s.":"An error occurred: %s.","A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.":"A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.","Today\\'s Orders":"Today\\'s Orders","Today\\'s Sales":"Today\\'s Sales","Today\\'s Refunds":"Today\\'s Refunds","Today\\'s Customers":"Today\\'s Customers","The report will be generated. Try loading the report within few minutes.":"The report will be generated. Try loading the report within few minutes.","The database has been wiped out.":"The database has been wiped out.","No custom handler for the reset \"' . $mode . '\"":"No custom handler for the reset \"' . $mode . '\"","Unable to proceed. The parent tax doesn\\'t exists.":"Unable to proceed. The parent tax doesn\\'t exists.","A simple tax must not be assigned to a parent tax with the type \"simple":"A simple tax must not be assigned to a parent tax with the type \"simple","Created via tests":"Created via tests","The transaction has been successfully saved.":"The transaction has been successfully saved.","The transaction has been successfully updated.":"The transaction has been successfully updated.","Unable to find the transaction using the provided identifier.":"Unable to find the transaction using the provided identifier.","Unable to find the requested transaction using the provided id.":"Unable to find the requested transaction using the provided id.","The transction has been correctly deleted.":"The transction has been correctly deleted.","You cannot delete an account which has transactions bound.":"You cannot delete an account which has transactions bound.","The transaction account has been deleted.":"The transaction account has been deleted.","Unable to find the transaction account using the provided ID.":"Unable to find the transaction account using the provided ID.","The transaction account has been updated.":"The transaction account has been updated.","This transaction type can\\'t be triggered.":"This transaction type can\\'t be triggered.","The transaction has been successfully triggered.":"The transaction has been successfully triggered.","The transaction \"%s\" has been processed on day \"%s\".":"The transaction \"%s\" has been processed on day \"%s\".","The transaction \"%s\" has already been processed.":"The transaction \"%s\" has already been processed.","The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.":"The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.","The process has been correctly executed and all transactions has been processed.":"The process has been correctly executed and all transactions has been processed.","The process has been executed with some failures. %s\/%s process(es) has successed.":"The process has been executed with some failures. %s\/%s process(es) has successed.","Procurement : %s":"Procurement : %s","Procurement Liability : %s":"Procurement Liability : %s","Refunding : %s":"Refunding : %s","Spoiled Good : %s":"Spoiled Good : %s","Sale : %s":"Sale : %s","Liabilities Account":"Liabilities Account","Not found account type: %s":"Not found account type: %s","Refund : %s":"Refund : %s","Customer Account Crediting : %s":"Customer Account Crediting : %s","Customer Account Purchase : %s":"Customer Account Purchase : %s","Customer Account Deducting : %s":"Customer Account Deducting : %s","Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.":"Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.","The unit group %s doesn\\'t have a base unit":"The unit group %s doesn\\'t have a base unit","The system role \"Users\" can be retrieved.":"The system role \"Users\" can be retrieved.","The default role that must be assigned to new users cannot be retrieved.":"The default role that must be assigned to new users cannot be retrieved.","%s Second(s)":"%s Second(s)","Configure the accounting feature":"Configure the accounting feature","Define the symbol that indicate thousand. By default ":"Define the symbol that indicate thousand. By default ","Date Time Format":"Date Time Format","This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".":"This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".","Date TimeZone":"Date TimeZone","Determine the default timezone of the store. Current Time: %s":"Determine the default timezone of the store. Current Time: %s","Configure how invoice and receipts are used.":"Configure how invoice and receipts are used.","configure settings that applies to orders.":"configure settings that applies to orders.","Report Settings":"Report Settings","Configure the settings":"Configure the settings","Wipes and Reset the database.":"Wipes and Reset the database.","Supply Delivery":"Supply Delivery","Configure the delivery feature.":"Configure the delivery feature.","Configure how background operations works.":"Configure how background operations works.","Every procurement will be added to the selected transaction account":"Every procurement will be added to the selected transaction account","Every sales will be added to the selected transaction account":"Every sales will be added to the selected transaction account","Customer Credit Account (crediting)":"Customer Credit Account (crediting)","Every customer credit will be added to the selected transaction account":"Every customer credit will be added to the selected transaction account","Customer Credit Account (debitting)":"Customer Credit Account (debitting)","Every customer credit removed will be added to the selected transaction account":"Every customer credit removed will be added to the selected transaction account","Sales refunds will be attached to this transaction account":"Sales refunds will be attached to this transaction account","Stock Return Account (Spoiled Items)":"Stock Return Account (Spoiled Items)","Disbursement (cash register)":"Disbursement (cash register)","Transaction account for all cash disbursement.":"Transaction account for all cash disbursement.","Liabilities":"Liabilities","Transaction account for all liabilities.":"Transaction account for all liabilities.","You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.":"You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.","Show Tax Breakdown":"Show Tax Breakdown","Will display the tax breakdown on the receipt\/invoice.":"Will display the tax breakdown on the receipt\/invoice.","Available tags : ":"Available tags : ","{store_name}: displays the store name.":"{store_name}: displays the store name.","{store_email}: displays the store email.":"{store_email}: displays the store email.","{store_phone}: displays the store phone number.":"{store_phone}: displays the store phone number.","{cashier_name}: displays the cashier name.":"{cashier_name}: displays the cashier name.","{cashier_id}: displays the cashier id.":"{cashier_id}: displays the cashier id.","{order_code}: displays the order code.":"{order_code}: displays the order code.","{order_date}: displays the order date.":"{order_date}: displays the order date.","{order_type}: displays the order type.":"{order_type}: displays the order type.","{customer_name}: displays the customer name.":"{customer_name}: displays the customer name.","{customer_email}: displays the customer email.":"{customer_email}: displays the customer email.","{shipping_first_name}: displays the shipping first name.":"{shipping_first_name}: displays the shipping first name.","{shipping_last_name}: displays the shipping last name.":"{shipping_last_name}: displays the shipping last name.","{shipping_phone}: displays the shipping phone.":"{shipping_phone}: displays the shipping phone.","{shipping_address_1}: displays the shipping address_1.":"{shipping_address_1}: displays the shipping address_1.","{shipping_address_2}: displays the shipping address_2.":"{shipping_address_2}: displays the shipping address_2.","{shipping_country}: displays the shipping country.":"{shipping_country}: displays the shipping country.","{shipping_city}: displays the shipping city.":"{shipping_city}: displays the shipping city.","{shipping_pobox}: displays the shipping pobox.":"{shipping_pobox}: displays the shipping pobox.","{shipping_company}: displays the shipping company.":"{shipping_company}: displays the shipping company.","{shipping_email}: displays the shipping email.":"{shipping_email}: displays the shipping email.","{billing_first_name}: displays the billing first name.":"{billing_first_name}: displays the billing first name.","{billing_last_name}: displays the billing last name.":"{billing_last_name}: displays the billing last name.","{billing_phone}: displays the billing phone.":"{billing_phone}: displays the billing phone.","{billing_address_1}: displays the billing address_1.":"{billing_address_1}: displays the billing address_1.","{billing_address_2}: displays the billing address_2.":"{billing_address_2}: displays the billing address_2.","{billing_country}: displays the billing country.":"{billing_country}: displays the billing country.","{billing_city}: displays the billing city.":"{billing_city}: displays the billing city.","{billing_pobox}: displays the billing pobox.":"{billing_pobox}: displays the billing pobox.","{billing_company}: displays the billing company.":"{billing_company}: displays the billing company.","{billing_email}: displays the billing email.":"{billing_email}: displays the billing email.","Available tags :":"Available tags :","Quick Product Default Unit":"Quick Product Default Unit","Set what unit is assigned by default to all quick product.":"Set what unit is assigned by default to all quick product.","Hide Exhausted Products":"Hide Exhausted Products","Will hide exhausted products from selection on the POS.":"Will hide exhausted products from selection on the POS.","Hide Empty Category":"Hide Empty Category","Category with no or exhausted products will be hidden from selection.":"Category with no or exhausted products will be hidden from selection.","Default Printing (web)":"Default Printing (web)","The amount numbers shortcuts separated with a \"|\".":"The amount numbers shortcuts separated with a \"|\".","No submit URL was provided":"No submit URL was provided","Sorting is explicitely disabled on this column":"Sorting is explicitely disabled on this column","An unpexpected error occured while using the widget.":"An unpexpected error occured while using the widget.","This field must be similar to \"{other}\"\"":"This field must be similar to \"{other}\"\"","This field must have at least \"{length}\" characters\"":"This field must have at least \"{length}\" characters\"","This field must have at most \"{length}\" characters\"":"This field must have at most \"{length}\" characters\"","This field must be different from \"{other}\"\"":"This field must be different from \"{other}\"\"","Search result":"Search result","Choose...":"Choose...","The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.":"The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.","+{count} other":"+{count} other","The selected print gateway doesn't support this type of printing.":"The selected print gateway doesn't support this type of printing.","millisecond| second| minute| hour| day| week| month| year| decade| century| millennium":"millisecond| second| minute| hour| day| week| month| year| decade| century| millennium","milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia":"milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia","An error occured":"An error occured","You\\'re about to delete selected resources. Would you like to proceed?":"You\\'re about to delete selected resources. Would you like to proceed?","See Error":"See Error","Your uploaded files will displays here.":"Your uploaded files will displays here.","Nothing to care about !":"Nothing to care about !","Would you like to bulk edit a system role ?":"Would you like to bulk edit a system role ?","Total :":"Total :","Remaining :":"Remaining :","Instalments:":"Instalments:","This instalment doesn\\'t have any payment attached.":"This instalment doesn\\'t have any payment attached.","You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?":"You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?","An error has occured while seleting the payment gateway.":"An error has occured while seleting the payment gateway.","You're not allowed to add a discount on the product.":"You're not allowed to add a discount on the product.","You're not allowed to add a discount on the cart.":"You're not allowed to add a discount on the cart.","Cash Register : {register}":"Cash Register : {register}","The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?":"The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?","You don't have the right to edit the purchase price.":"You don't have the right to edit the purchase price.","Dynamic product can\\'t have their price updated.":"Dynamic product can\\'t have their price updated.","You\\'re not allowed to edit the order settings.":"You\\'re not allowed to edit the order settings.","Looks like there is either no products and no categories. How about creating those first to get started ?":"Looks like there is either no products and no categories. How about creating those first to get started ?","Create Categories":"Create Categories","You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?":"You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?","An unexpected error has occured while loading the form. Please check the log or contact the support.":"An unexpected error has occured while loading the form. Please check the log or contact the support.","We were not able to load the units. Make sure there are units attached on the unit group selected.":"We were not able to load the units. Make sure there are units attached on the unit group selected.","The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?":"The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?","There shoulnd\\'t be more option than there are units.":"There shoulnd\\'t be more option than there are units.","Either Selling or Purchase unit isn\\'t defined. Unable to proceed.":"Either Selling or Purchase unit isn\\'t defined. Unable to proceed.","Select the procured unit first before selecting the conversion unit.":"Select the procured unit first before selecting the conversion unit.","Convert to unit":"Convert to unit","An unexpected error has occured":"An unexpected error has occured","Unable to add product which doesn\\'t unit quantities defined.":"Unable to add product which doesn\\'t unit quantities defined.","{product}: Purchase Unit":"{product}: Purchase Unit","The product will be procured on that unit.":"The product will be procured on that unit.","Unkown Unit":"Unkown Unit","Choose Tax":"Choose Tax","The tax will be assigned to the procured product.":"The tax will be assigned to the procured product.","Show Details":"Show Details","Hide Details":"Hide Details","Important Notes":"Important Notes","Stock Management Products.":"Stock Management Products.","Doesn\\'t work with Grouped Product.":"Doesn\\'t work with Grouped Product.","Convert":"Convert","Looks like no valid products matched the searched term.":"Looks like no valid products matched the searched term.","This product doesn't have any stock to adjust.":"This product doesn't have any stock to adjust.","Select Unit":"Select Unit","Select the unit that you want to adjust the stock with.":"Select the unit that you want to adjust the stock with.","A similar product with the same unit already exists.":"A similar product with the same unit already exists.","Select Procurement":"Select Procurement","Select the procurement that you want to adjust the stock with.":"Select the procurement that you want to adjust the stock with.","Select Action":"Select Action","Select the action that you want to perform on the stock.":"Select the action that you want to perform on the stock.","Would you like to remove the selected products from the table ?":"Would you like to remove the selected products from the table ?","Unit:":"Unit:","Operation:":"Operation:","Procurement:":"Procurement:","Reason:":"Reason:","Provided":"Provided","Not Provided":"Not Provided","Remove Selected":"Remove Selected","Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.":"Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.","You haven\\'t yet generated any token for your account. Create one to get started.":"You haven\\'t yet generated any token for your account. Create one to get started.","You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?":"You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?","Date Range : {date1} - {date2}":"Date Range : {date1} - {date2}","Document : Best Products":"Document : Best Products","By : {user}":"By : {user}","Range : {date1} — {date2}":"Range : {date1} — {date2}","Document : Sale By Payment":"Document : Sale By Payment","Document : Customer Statement":"Document : Customer Statement","Customer : {selectedCustomerName}":"Customer : {selectedCustomerName}","All Categories":"All Categories","All Units":"All Units","Date : {date}":"Date : {date}","Document : {reportTypeName}":"Document : {reportTypeName}","Threshold":"Threshold","Select Units":"Select Units","An error has occured while loading the units.":"An error has occured while loading the units.","An error has occured while loading the categories.":"An error has occured while loading the categories.","Document : Payment Type":"Document : Payment Type","Document : Profit Report":"Document : Profit Report","Filter by Category":"Filter by Category","Filter by Units":"Filter by Units","An error has occured while loading the categories":"An error has occured while loading the categories","An error has occured while loading the units":"An error has occured while loading the units","By Type":"By Type","By User":"By User","By Category":"By Category","All Category":"All Category","Document : Sale Report":"Document : Sale Report","Filter By Category":"Filter By Category","Allow you to choose the category.":"Allow you to choose the category.","No category was found for proceeding the filtering.":"No category was found for proceeding the filtering.","Document : Sold Stock Report":"Document : Sold Stock Report","Filter by Unit":"Filter by Unit","Limit Results By Categories":"Limit Results By Categories","Limit Results By Units":"Limit Results By Units","Generate Report":"Generate Report","Document : Combined Products History":"Document : Combined Products History","Ini. Qty":"Ini. Qty","Added Quantity":"Added Quantity","Add. Qty":"Add. Qty","Sold Quantity":"Sold Quantity","Sold Qty":"Sold Qty","Defective Quantity":"Defective Quantity","Defec. Qty":"Defec. Qty","Final Quantity":"Final Quantity","Final Qty":"Final Qty","No data available":"No data available","Document : Yearly Report":"Document : Yearly Report","The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.":"The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.","Unable to edit this transaction":"Unable to edit this transaction","This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.":"This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.","Save Transaction":"Save Transaction","While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.":"While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.","The transaction is about to be saved. Would you like to confirm your action ?":"The transaction is about to be saved. Would you like to confirm your action ?","Unable to load the transaction":"Unable to load the transaction","You cannot edit this transaction if NexoPOS cannot perform background requests.":"You cannot edit this transaction if NexoPOS cannot perform background requests.","MySQL is selected as database driver":"MySQL is selected as database driver","Please provide the credentials to ensure NexoPOS can connect to the database.":"Please provide the credentials to ensure NexoPOS can connect to the database.","Sqlite is selected as database driver":"Sqlite is selected as database driver","Make sure Sqlite module is available for PHP. Your database will be located on the database directory.":"Make sure Sqlite module is available for PHP. Your database will be located on the database directory.","Checking database connectivity...":"Checking database connectivity...","Driver":"Driver","Set the database driver":"Set the database driver","Hostname":"Hostname","Provide the database hostname":"Provide the database hostname","Username required to connect to the database.":"Username required to connect to the database.","The username password required to connect.":"The username password required to connect.","Database Name":"Database Name","Provide the database name. Leave empty to use default file for SQLite Driver.":"Provide the database name. Leave empty to use default file for SQLite Driver.","Database Prefix":"Database Prefix","Provide the database prefix.":"Provide the database prefix.","Port":"Port","Provide the hostname port.":"Provide the hostname port.","NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.":"NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.","Install":"Install","Application":"Application","That is the application name.":"That is the application name.","Provide the administrator username.":"Provide the administrator username.","Provide the administrator email.":"Provide the administrator email.","What should be the password required for authentication.":"What should be the password required for authentication.","Should be the same as the password above.":"Should be the same as the password above.","Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.":"Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.","Choose your language to get started.":"Choose your language to get started.","Remaining Steps":"Remaining Steps","Database Configuration":"Database Configuration","Application Configuration":"Application Configuration","Language Selection":"Language Selection","Select what will be the default language of NexoPOS.":"Select what will be the default language of NexoPOS.","In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.":"In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.","Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.":"Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.","Please report this message to the support : ":"Please report this message to the support : ","No refunds made so far. Good news right?":"No refunds made so far. Good news right?","Open Register : %s":"Open Register : %s","Loading Coupon For : ":"Loading Coupon For : ","This coupon requires products that aren\\'t available on the cart at the moment.":"This coupon requires products that aren\\'t available on the cart at the moment.","This coupon requires products that belongs to specific categories that aren\\'t included at the moment.":"This coupon requires products that belongs to specific categories that aren\\'t included at the moment.","Too many results.":"Too many results.","New Customer":"New Customer","Purchases":"Purchases","Owed":"Owed","Usage :":"Usage :","Code :":"Code :","Order Reference":"Order Reference","The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?":"The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?","{product} : Units":"{product} : Units","This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.":"This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.","Previewing :":"Previewing :","Search for options":"Search for options","The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.":"The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.","The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.":"The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.","The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.":"The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.","The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.":"The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.","Invalid Error Message":"Invalid Error Message","{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List":"{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List","Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.":"Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.","No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered":"No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered","Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.":"Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.","Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.":"Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.","Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}":"Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}","{{ ucwords( $column ) }}":"{{ ucwords( $column ) }}","Delete Selected Entries":"Delete Selected Entries","Unamed Settings Page":"Unamed Settings Page","Description of unamed setting page":"Description of unamed setting page","Text Field":"Text Field","This is a sample text field.":"This is a sample text field.","No description has been provided.":"No description has been provided.","You\\'re using NexoPOS %s<\/a>":"You\\'re using NexoPOS %s<\/a>","If you haven\\'t asked this, please get in touch with the administrators.":"If you haven\\'t asked this, please get in touch with the administrators.","A new user has registered to your store (%s) with the email %s.":"A new user has registered to your store (%s) with the email %s.","The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.":"The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.","Note: ":"Note: ","Inclusive Product Taxes":"Inclusive Product Taxes","Exclusive Product Taxes":"Exclusive Product Taxes","Condition:":"Condition:","Date : %s":"Date : %s","The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?":"The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?","NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.":"NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.","Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.":"Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.","Retry":"Retry","If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.":"If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources."} \ No newline at end of file +{ + "OK": "OK", + "Howdy, {name}": "Ol\u00e1, {nome}", + "This field is required.": "Este campo \u00e9 obrigat\u00f3rio.", + "This field must contain a valid email address.": "Este campo deve conter um endere\u00e7o de e-mail v\u00e1lido.", + "Filters": "Filtros", + "Has Filters": "Tem filtros", + "{entries} entries selected": "{entries} entradas selecionadas", + "Download": "Download", + "There is nothing to display...": "N\u00e3o h\u00e1 nada para mostrar...", + "Bulk Actions": "A\u00e7\u00f5es em massa", + "displaying {perPage} on {items} items": "exibindo {perPage} em {items} itens", + "The document has been generated.": "O documento foi gerado.", + "Unexpected error occurred.": "Ocorreu um erro inesperado.", + "Clear Selected Entries ?": "Limpar entradas selecionadas?", + "Would you like to clear all selected entries ?": "Deseja limpar todas as entradas selecionadas?", + "Would you like to perform the selected bulk action on the selected entries ?": "Deseja executar a a\u00e7\u00e3o em massa selecionada nas entradas selecionadas?", + "No selection has been made.": "Nenhuma sele\u00e7\u00e3o foi feita.", + "No action has been selected.": "Nenhuma a\u00e7\u00e3o foi selecionada.", + "N\/D": "N\/D", + "Range Starts": "In\u00edcio do intervalo", + "Range Ends": "Fim do intervalo", + "Sun": "sol", + "Mon": "seg", + "Tue": "ter", + "Wed": "Casar", + "Fri": "Sex", + "Sat": "Sentado", + "Date": "Encontro", + "N\/A": "N \/ D", + "Nothing to display": "Nada para exibir", + "Unknown Status": "Status desconhecido", + "Password Forgotten ?": "Senha esquecida ?", + "Sign In": "Entrar", + "Register": "Registro", + "An unexpected error occurred.": "Ocorreu um erro inesperado.", + "Unable to proceed the form is not valid.": "N\u00e3o \u00e9 poss\u00edvel continuar o formul\u00e1rio n\u00e3o \u00e9 v\u00e1lido.", + "Save Password": "Salvar senha", + "Remember Your Password ?": "Lembrar sua senha?", + "Submit": "Enviar", + "Already registered ?": "J\u00e1 registrado ?", + "Best Cashiers": "Melhores caixas", + "No result to display.": "Nenhum resultado para exibir.", + "Well.. nothing to show for the meantime.": "Bem .. nada para mostrar por enquanto.", + "Best Customers": "Melhores clientes", + "Well.. nothing to show for the meantime": "Bem .. nada para mostrar por enquanto", + "Total Sales": "Vendas totais", + "Today": "Hoje", + "Total Refunds": "Reembolsos totais", + "Clients Registered": "Clientes cadastrados", + "Commissions": "Comiss\u00f5es", + "Total": "Total", + "Discount": "Desconto", + "Status": "Status", + "Paid": "Pago", + "Partially Paid": "Parcialmente pago", + "Unpaid": "N\u00e3o pago", + "Hold": "Segure", + "Void": "Vazio", + "Refunded": "Devolveu", + "Partially Refunded": "Parcialmente ressarcido", + "Incomplete Orders": "Pedidos incompletos", + "Expenses": "Despesas", + "Weekly Sales": "Vendas semanais", + "Week Taxes": "Impostos semanais", + "Net Income": "Resultado l\u00edquido", + "Week Expenses": "Despesas semanais", + "Current Week": "Semana atual", + "Previous Week": "Semana anterior", + "Order": "Pedido", + "Refresh": "Atualizar", + "Upload": "Envio", + "Enabled": "Habilitado", + "Disabled": "Desativado", + "Enable": "Habilitar", + "Disable": "Desativar", + "Gallery": "Galeria", + "Medias Manager": "Gerenciador de M\u00eddias", + "Click Here Or Drop Your File To Upload": "Clique aqui ou solte seu arquivo para fazer upload", + "Nothing has already been uploaded": "Nada j\u00e1 foi carregado", + "File Name": "Nome do arquivo", + "Uploaded At": "Carregado em", + "By": "Por", + "Previous": "Anterior", + "Next": "Pr\u00f3ximo", + "Use Selected": "Usar selecionado", + "Clear All": "Limpar tudo", + "Confirm Your Action": "Confirme sua a\u00e7\u00e3o", + "Would you like to clear all the notifications ?": "Deseja limpar todas as notifica\u00e7\u00f5es?", + "Permissions": "Permiss\u00f5es", + "Payment Summary": "Resumo do pagamento", + "Sub Total": "Subtotal", + "Shipping": "Envio", + "Coupons": "Cupons", + "Taxes": "Impostos", + "Change": "Mudar", + "Order Status": "Status do pedido", + "Customer": "Cliente", + "Type": "Modelo", + "Delivery Status": "Status de entrega", + "Save": "Salve \ue051", + "Processing Status": "Status de processamento", + "Payment Status": "Status do pagamento", + "Products": "Produtos", + "Refunded Products": "Produtos reembolsados", + "Would you proceed ?": "Voc\u00ea prosseguiria?", + "The processing status of the order will be changed. Please confirm your action.": "O status de processamento do pedido ser\u00e1 alterado. Por favor, confirme sua a\u00e7\u00e3o.", + "The delivery status of the order will be changed. Please confirm your action.": "O status de entrega do pedido ser\u00e1 alterado. Por favor, confirme sua a\u00e7\u00e3o.", + "Instalments": "Parcelas", + "Create": "Crio", + "Add Instalment": "Adicionar Parcela", + "Would you like to create this instalment ?": "Deseja criar esta parcela?", + "An unexpected error has occurred": "Ocorreu um erro inesperado", + "Would you like to delete this instalment ?": "Deseja excluir esta parcela?", + "Would you like to update that instalment ?": "Voc\u00ea gostaria de atualizar essa parcela?", + "Print": "Imprimir", + "Store Details": "Detalhes da loja", + "Order Code": "C\u00f3digo de encomenda", + "Cashier": "Caixa", + "Billing Details": "Detalhes de faturamento", + "Shipping Details": "Detalhes de envio", + "Product": "produtos", + "Unit Price": "Pre\u00e7o unit\u00e1rio", + "Quantity": "Quantidade", + "Tax": "Imposto", + "Total Price": "Pre\u00e7o total", + "Expiration Date": "Data de validade", + "Due": "Vencimento", + "Customer Account": "Conta de cliente", + "Payment": "Pagamento", + "No payment possible for paid order.": "Nenhum pagamento poss\u00edvel para pedido pago.", + "Payment History": "Hist\u00f3rico de pagamento", + "Unable to proceed the form is not valid": "N\u00e3o \u00e9 poss\u00edvel continuar o formul\u00e1rio n\u00e3o \u00e9 v\u00e1lido", + "Please provide a valid value": "Forne\u00e7a um valor v\u00e1lido", + "Refund With Products": "Reembolso com produtos", + "Refund Shipping": "Reembolso de envio", + "Add Product": "Adicionar produto", + "Damaged": "Danificado", + "Unspoiled": "Intacto", + "Summary": "Resumo", + "Payment Gateway": "Gateway de pagamento", + "Screen": "Tela", + "Select the product to perform a refund.": "Selecione o produto para realizar um reembolso.", + "Please select a payment gateway before proceeding.": "Selecione um gateway de pagamento antes de continuar.", + "There is nothing to refund.": "N\u00e3o h\u00e1 nada para reembolsar.", + "Please provide a valid payment amount.": "Forne\u00e7a um valor de pagamento v\u00e1lido.", + "The refund will be made on the current order.": "O reembolso ser\u00e1 feito no pedido atual.", + "Please select a product before proceeding.": "Selecione um produto antes de continuar.", + "Not enough quantity to proceed.": "Quantidade insuficiente para prosseguir.", + "Would you like to delete this product ?": "Deseja excluir este produto?", + "Customers": "Clientes", + "Dashboard": "Painel", + "Order Type": "Tipo de pedido", + "Orders": "Pedidos", + "Cash Register": "Caixa registradora", + "Reset": "Redefinir", + "Cart": "Carrinho", + "Comments": "Coment\u00e1rios", + "Settings": "Configura\u00e7\u00f5es", + "No products added...": "Nenhum produto adicionado...", + "Price": "Pre\u00e7o", + "Flat": "Plano", + "Pay": "Pagar", + "The product price has been updated.": "O pre\u00e7o do produto foi atualizado.", + "The editable price feature is disabled.": "O recurso de pre\u00e7o edit\u00e1vel est\u00e1 desativado.", + "Current Balance": "Saldo atual", + "Full Payment": "Pagamento integral", + "The customer account can only be used once per order. Consider deleting the previously used payment.": "A conta do cliente s\u00f3 pode ser usada uma vez por pedido. Considere excluir o pagamento usado anteriormente.", + "Not enough funds to add {amount} as a payment. Available balance {balance}.": "N\u00e3o h\u00e1 fundos suficientes para adicionar {amount} como pagamento. Saldo dispon\u00edvel {saldo}.", + "Confirm Full Payment": "Confirmar pagamento integral", + "A full payment will be made using {paymentType} for {total}": "Um pagamento integral ser\u00e1 feito usando {paymentType} para {total}", + "You need to provide some products before proceeding.": "Voc\u00ea precisa fornecer alguns produtos antes de prosseguir.", + "Unable to add the product, there is not enough stock. Remaining %s": "N\u00e3o foi poss\u00edvel adicionar o produto, n\u00e3o h\u00e1 estoque suficiente. Restos", + "Add Images": "Adicione imagens", + "New Group": "Novo grupo", + "Available Quantity": "Quantidade dispon\u00edvel", + "Delete": "Excluir", + "Would you like to delete this group ?": "Deseja excluir este grupo?", + "Your Attention Is Required": "Sua aten\u00e7\u00e3o \u00e9 necess\u00e1ria", + "Please select at least one unit group before you proceed.": "Selecione pelo menos um grupo de unidades antes de prosseguir.", + "Unable to proceed as one of the unit group field is invalid": "N\u00e3o \u00e9 poss\u00edvel continuar porque um dos campos do grupo de unidades \u00e9 inv\u00e1lido", + "Would you like to delete this variation ?": "Deseja excluir esta varia\u00e7\u00e3o?", + "Details": "Detalhes", + "Unable to proceed, no product were provided.": "N\u00e3o foi poss\u00edvel continuar, nenhum produto foi fornecido.", + "Unable to proceed, one or more product has incorrect values.": "N\u00e3o foi poss\u00edvel continuar, um ou mais produtos t\u00eam valores incorretos.", + "Unable to proceed, the procurement form is not valid.": "N\u00e3o \u00e9 poss\u00edvel prosseguir, o formul\u00e1rio de aquisi\u00e7\u00e3o n\u00e3o \u00e9 v\u00e1lido.", + "Unable to submit, no valid submit URL were provided.": "N\u00e3o foi poss\u00edvel enviar, nenhum URL de envio v\u00e1lido foi fornecido.", + "No title is provided": "Nenhum t\u00edtulo \u00e9 fornecido", + "Return": "Retornar", + "SKU": "SKU", + "Barcode": "C\u00f3digo de barras", + "Options": "Op\u00e7\u00f5es", + "The product already exists on the table.": "O produto j\u00e1 existe na mesa.", + "The specified quantity exceed the available quantity.": "A quantidade especificada excede a quantidade dispon\u00edvel.", + "Unable to proceed as the table is empty.": "N\u00e3o foi poss\u00edvel continuar porque a tabela est\u00e1 vazia.", + "The stock adjustment is about to be made. Would you like to confirm ?": "O ajuste de estoque est\u00e1 prestes a ser feito. Gostaria de confirmar?", + "More Details": "Mais detalhes", + "Useful to describe better what are the reasons that leaded to this adjustment.": "\u00datil para descrever melhor quais s\u00e3o os motivos que levaram a esse ajuste.", + "The reason has been updated.": "O motivo foi atualizado.", + "Would you like to remove this product from the table ?": "Deseja remover este produto da mesa?", + "Search": "Procurar", + "Unit": "Unidade", + "Operation": "Opera\u00e7\u00e3o", + "Procurement": "Compras", + "Value": "Valor", + "Search and add some products": "Pesquise e adicione alguns produtos", + "Proceed": "Continuar", + "Unable to proceed. Select a correct time range.": "N\u00e3o foi poss\u00edvel prosseguir. Selecione um intervalo de tempo correto.", + "Unable to proceed. The current time range is not valid.": "N\u00e3o foi poss\u00edvel prosseguir. O intervalo de tempo atual n\u00e3o \u00e9 v\u00e1lido.", + "Would you like to proceed ?": "Gostaria de continuar ?", + "An unexpected error has occurred.": "Ocorreu um erro inesperado.", + "No rules has been provided.": "Nenhuma regra foi fornecida.", + "No valid run were provided.": "Nenhuma execu\u00e7\u00e3o v\u00e1lida foi fornecida.", + "Unable to proceed, the form is invalid.": "N\u00e3o foi poss\u00edvel continuar, o formul\u00e1rio \u00e9 inv\u00e1lido.", + "Unable to proceed, no valid submit URL is defined.": "N\u00e3o foi poss\u00edvel continuar, nenhum URL de envio v\u00e1lido foi definido.", + "No title Provided": "Nenhum t\u00edtulo fornecido", + "General": "Em geral", + "Add Rule": "Adicionar regra", + "Save Settings": "Salvar configura\u00e7\u00f5es", + "An unexpected error occurred": "Ocorreu um erro inesperado", + "Ok": "OK", + "New Transaction": "Nova transa\u00e7\u00e3o", + "Close": "Fechar", + "Search Filters": "Filtros de pesquisa", + "Clear Filters": "Limpar filtros", + "Use Filters": "Usar filtros", + "Would you like to delete this order": "Deseja excluir este pedido", + "The current order will be void. This action will be recorded. Consider providing a reason for this operation": "O pedido atual ser\u00e1 anulado. Esta a\u00e7\u00e3o ser\u00e1 registrada. Considere fornecer um motivo para esta opera\u00e7\u00e3o", + "Order Options": "Op\u00e7\u00f5es de pedido", + "Payments": "Pagamentos", + "Refund & Return": "Reembolso e devolu\u00e7\u00e3o", + "Installments": "Parcelas", + "Order Refunds": "Reembolsos de pedidos", + "Condition": "Doen\u00e7a", + "The form is not valid.": "O formul\u00e1rio n\u00e3o \u00e9 v\u00e1lido.", + "Balance": "Equil\u00edbrio", + "Input": "Entrada", + "Register History": "Registre o hist\u00f3rico", + "Close Register": "Fechar registro", + "Cash In": "Dinheiro em caixa", + "Cash Out": "Saque", + "Register Options": "Op\u00e7\u00f5es de registro", + "Sales": "Vendas", + "History": "Hist\u00f3ria", + "Unable to open this register. Only closed register can be opened.": "N\u00e3o foi poss\u00edvel abrir este registro. Somente registro fechado pode ser aberto.", + "Open The Register": "Abra o registro", + "Exit To Orders": "Sair para pedidos", + "Looks like there is no registers. At least one register is required to proceed.": "Parece que n\u00e3o h\u00e1 registros. Pelo menos um registro \u00e9 necess\u00e1rio para prosseguir.", + "Create Cash Register": "Criar caixa registradora", + "Yes": "sim", + "No": "N\u00e3o", + "Load Coupon": "Carregar cupom", + "Apply A Coupon": "Aplicar um cupom", + "Load": "Carga", + "Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.": "Insira o c\u00f3digo do cupom que deve ser aplicado ao PDV. Se um cupom for emitido para um cliente, esse cliente deve ser selecionado previamente.", + "Click here to choose a customer.": "Clique aqui para escolher um cliente.", + "Coupon Name": "Nome do cupom", + "Usage": "Uso", + "Unlimited": "Ilimitado", + "Valid From": "V\u00e1lido de", + "Valid Till": "V\u00e1lida at\u00e9", + "Categories": "Categorias", + "Active Coupons": "Cupons ativos", + "Apply": "Aplicar", + "Cancel": "Cancelar", + "Coupon Code": "C\u00f3digo do cupom", + "The coupon is out from validity date range.": "O cupom est\u00e1 fora do intervalo de datas de validade.", + "The coupon has applied to the cart.": "O cupom foi aplicado ao carrinho.", + "Percentage": "Percentagem", + "Unknown Type": "Tipo desconhecido", + "You must select a customer before applying a coupon.": "Voc\u00ea deve selecionar um cliente antes de aplicar um cupom.", + "The coupon has been loaded.": "O cupom foi carregado.", + "Use": "Usar", + "No coupon available for this customer": "Nenhum cupom dispon\u00edvel para este cliente", + "Select Customer": "Selecionar cliente", + "No customer match your query...": "Nenhum cliente corresponde \u00e0 sua consulta...", + "Create a customer": "Crie um cliente", + "Customer Name": "nome do cliente", + "Save Customer": "Salvar cliente", + "No Customer Selected": "Nenhum cliente selecionado", + "In order to see a customer account, you need to select one customer.": "Para ver uma conta de cliente, voc\u00ea precisa selecionar um cliente.", + "Summary For": "Resumo para", + "Total Purchases": "Total de Compras", + "Last Purchases": "\u00daltimas compras", + "No orders...": "Sem encomendas...", + "Name": "Nome", + "No coupons for the selected customer...": "Nenhum cupom para o cliente selecionado...", + "Use Coupon": "Usar cupom", + "Rewards": "Recompensas", + "Points": "Pontos", + "Target": "Alvo", + "No rewards available the selected customer...": "Nenhuma recompensa dispon\u00edvel para o cliente selecionado...", + "Account Transaction": "Transa\u00e7\u00e3o da conta", + "Percentage Discount": "Desconto percentual", + "Flat Discount": "Desconto fixo", + "Use Customer ?": "Usar Cliente?", + "No customer is selected. Would you like to proceed with this customer ?": "Nenhum cliente est\u00e1 selecionado. Deseja continuar com este cliente?", + "Change Customer ?": "Mudar cliente?", + "Would you like to assign this customer to the ongoing order ?": "Deseja atribuir este cliente ao pedido em andamento?", + "Product Discount": "Desconto de produto", + "Cart Discount": "Desconto no carrinho", + "Hold Order": "Reter pedido", + "The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.": "A ordem atual ser\u00e1 colocada em espera. Voc\u00ea pode recuperar este pedido no bot\u00e3o de pedido pendente. Fornecer uma refer\u00eancia a ele pode ajud\u00e1-lo a identificar o pedido mais rapidamente.", + "Confirm": "confirme", + "Layaway Parameters": "Par\u00e2metros de Layaway", + "Minimum Payment": "Pagamento minimo", + "Instalments & Payments": "Parcelas e pagamentos", + "The final payment date must be the last within the instalments.": "A data final de pagamento deve ser a \u00faltima dentro das parcelas.", + "Amount": "Montante", + "You must define layaway settings before proceeding.": "Voc\u00ea deve definir as configura\u00e7\u00f5es de layaway antes de continuar.", + "Please provide instalments before proceeding.": "Por favor, forne\u00e7a as parcelas antes de prosseguir.", + "Unable to process, the form is not valid": "N\u00e3o foi poss\u00edvel continuar o formul\u00e1rio n\u00e3o \u00e9 v\u00e1lido", + "One or more instalments has an invalid date.": "Uma ou mais parcelas tem data inv\u00e1lida.", + "One or more instalments has an invalid amount.": "Uma ou mais parcelas tem valor inv\u00e1lido.", + "One or more instalments has a date prior to the current date.": "Uma ou mais parcelas tem data anterior \u00e0 data atual.", + "The payment to be made today is less than what is expected.": "O pagamento a ser feito hoje \u00e9 menor do que o esperado.", + "Total instalments must be equal to the order total.": "O total das parcelas deve ser igual ao total do pedido.", + "Order Note": "Nota de pedido", + "Note": "Observa\u00e7\u00e3o", + "More details about this order": "Mais detalhes sobre este pedido", + "Display On Receipt": "Exibir no recibo", + "Will display the note on the receipt": "Ir\u00e1 exibir a nota no recibo", + "Open": "Aberto", + "Order Settings": "Configura\u00e7\u00f5es do pedido", + "Define The Order Type": "Defina o tipo de pedido", + "Payment List": "Lista de pagamentos", + "List Of Payments": "Lista de pagamentos", + "No Payment added.": "Nenhum pagamento adicionado.", + "Select Payment": "Selecionar pagamento", + "Submit Payment": "Enviar pagamento", + "Layaway": "Guardado", + "On Hold": "Em espera", + "Tendered": "Licitado", + "Nothing to display...": "Nada para mostrar...", + "Product Price": "Pre\u00e7o do produto", + "Define Quantity": "Definir quantidade", + "Please provide a quantity": "Por favor, forne\u00e7a uma quantidade", + "Product \/ Service": "Produto \/ Servi\u00e7o", + "Unable to proceed. The form is not valid.": "N\u00e3o foi poss\u00edvel prosseguir. O formul\u00e1rio n\u00e3o \u00e9 v\u00e1lido.", + "An error has occurred while computing the product.": "Ocorreu um erro ao calcular o produto.", + "Provide a unique name for the product.": "Forne\u00e7a um nome exclusivo para o produto.", + "Define what is the sale price of the item.": "Defina qual \u00e9 o pre\u00e7o de venda do item.", + "Set the quantity of the product.": "Defina a quantidade do produto.", + "Assign a unit to the product.": "Atribua uma unidade ao produto.", + "Tax Type": "Tipo de imposto", + "Inclusive": "Inclusivo", + "Exclusive": "Exclusivo", + "Define what is tax type of the item.": "Defina qual \u00e9 o tipo de imposto do item.", + "Tax Group": "Grupo Fiscal", + "Choose the tax group that should apply to the item.": "Escolha o grupo de impostos que deve ser aplicado ao item.", + "Search Product": "Pesquisar produto", + "There is nothing to display. Have you started the search ?": "N\u00e3o h\u00e1 nada para exibir. J\u00e1 come\u00e7ou a pesquisa?", + "Shipping & Billing": "Envio e cobran\u00e7a", + "Tax & Summary": "Imposto e Resumo", + "Select Tax": "Selecionar imposto", + "Define the tax that apply to the sale.": "Defina o imposto que se aplica \u00e0 venda.", + "Define how the tax is computed": "Defina como o imposto \u00e9 calculado", + "Define when that specific product should expire.": "Defina quando esse produto espec\u00edfico deve expirar.", + "Renders the automatically generated barcode.": "Renderiza o c\u00f3digo de barras gerado automaticamente.", + "Adjust how tax is calculated on the item.": "Ajuste como o imposto \u00e9 calculado sobre o item.", + "Units & Quantities": "Unidades e quantidades", + "Sale Price": "Pre\u00e7o de venda", + "Wholesale Price": "Pre\u00e7o por atacado", + "Select": "Selecionar", + "The customer has been loaded": "O cliente foi carregado", + "Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.": "N\u00e3o \u00e9 poss\u00edvel selecionar o cliente padr\u00e3o. Parece que o cliente n\u00e3o existe mais. Considere alterar o cliente padr\u00e3o nas configura\u00e7\u00f5es.", + "OKAY": "OK", + "Some products has been added to the cart. Would youl ike to discard this order ?": "Alguns produtos foram adicionados ao carrinho. Voc\u00ea gostaria de descartar este pedido?", + "This coupon is already added to the cart": "Este cupom j\u00e1 foi adicionado ao carrinho", + "No tax group assigned to the order": "Nenhum grupo de impostos atribu\u00eddo ao pedido", + "Unable to proceed": "N\u00e3o foi poss\u00edvel continuar", + "Layaway defined": "Layaway definido", + "Partially paid orders are disabled.": "Pedidos parcialmente pagos est\u00e3o desabilitados.", + "An order is currently being processed.": "Um pedido est\u00e1 sendo processado.", + "Okay": "OK", + "An unexpected error has occurred while fecthing taxes.": "Ocorreu um erro inesperado durante a coleta de impostos.", + "Loading...": "Carregando...", + "Profile": "Perfil", + "Logout": "Sair", + "Unnamed Page": "P\u00e1gina sem nome", + "No description": "Sem descri\u00e7\u00e3o", + "Provide a name to the resource.": "Forne\u00e7a um nome para o recurso.", + "Edit": "Editar", + "Would you like to delete this ?": "Deseja excluir isso?", + "Delete Selected Groups": "Excluir grupos selecionados", + "Activate Your Account": "Ative sua conta", + "The account you have created for __%s__, require an activation. In order to proceed, please click on the following link": "A conta que voc\u00ea criou para __%s__ requer uma ativa\u00e7\u00e3o. Para prosseguir, clique no link a seguir", + "Password Recovered": "Senha recuperada", + "Your password has been successfully updated on __%s__. You can now login with your new password.": "Sua senha foi atualizada com sucesso em __%s__. Agora voc\u00ea pode fazer login com sua nova senha.", + "Password Recovery": "Recupera\u00e7\u00e3o de senha", + "Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ": "Algu\u00e9m solicitou a redefini\u00e7\u00e3o de sua senha em __\"%s\"__. Se voc\u00ea se lembrar de ter feito essa solicita\u00e7\u00e3o, prossiga clicando no bot\u00e3o abaixo.", + "Reset Password": "Redefinir senha", + "New User Registration": "Registo de novo utilizador", + "Your Account Has Been Created": "Sua conta foi criada", + "Login": "Conecte-se", + "Save Coupon": "Salvar cupom", + "This field is required": "Este campo \u00e9 obrigat\u00f3rio", + "The form is not valid. Please check it and try again": "O formul\u00e1rio n\u00e3o \u00e9 v\u00e1lido. Por favor verifique e tente novamente", + "mainFieldLabel not defined": "mainFieldLabel n\u00e3o definido", + "Create Customer Group": "Criar grupo de clientes", + "Save a new customer group": "Salvar um novo grupo de clientes", + "Update Group": "Atualizar grupo", + "Modify an existing customer group": "Modificar um grupo de clientes existente", + "Managing Customers Groups": "Gerenciando Grupos de Clientes", + "Create groups to assign customers": "Crie grupos para atribuir clientes", + "Create Customer": "Criar cliente", + "Managing Customers": "Gerenciando clientes", + "List of registered customers": "Lista de clientes cadastrados", + "Log out": "Sair", + "Your Module": "Seu M\u00f3dulo", + "Choose the zip file you would like to upload": "Escolha o arquivo zip que voc\u00ea gostaria de enviar", + "Managing Orders": "Gerenciando Pedidos", + "Manage all registered orders.": "Gerencie todos os pedidos registrados.", + "Receipt — %s": "Recibo — %s", + "Order receipt": "Recibo de ordem", + "Hide Dashboard": "Ocultar painel", + "Refund receipt": "Recibo de reembolso", + "Unknown Payment": "Pagamento desconhecido", + "Procurement Name": "Nome da aquisi\u00e7\u00e3o", + "Unable to proceed no products has been provided.": "N\u00e3o foi poss\u00edvel continuar nenhum produto foi fornecido.", + "Unable to proceed, one or more products is not valid.": "N\u00e3o foi poss\u00edvel continuar, um ou mais produtos n\u00e3o s\u00e3o v\u00e1lidos.", + "Unable to proceed the procurement form is not valid.": "N\u00e3o \u00e9 poss\u00edvel prosseguir o formul\u00e1rio de aquisi\u00e7\u00e3o n\u00e3o \u00e9 v\u00e1lido.", + "Unable to proceed, no submit url has been provided.": "N\u00e3o foi poss\u00edvel continuar, nenhum URL de envio foi fornecido.", + "SKU, Barcode, Product name.": "SKU, c\u00f3digo de barras, nome do produto.", + "Email": "E-mail", + "Phone": "Telefone", + "First Address": "Primeiro endere\u00e7o", + "Second Address": "Segundo endere\u00e7o", + "Address": "Endere\u00e7o", + "City": "Cidade", + "PO.Box": "Caixa postal", + "Description": "Descri\u00e7\u00e3o", + "Included Products": "Produtos inclu\u00eddos", + "Apply Settings": "Aplicar configura\u00e7\u00f5es", + "Basic Settings": "Configura\u00e7\u00f5es b\u00e1sicas", + "Visibility Settings": "Configura\u00e7\u00f5es de visibilidade", + "Unable to load the report as the timezone is not set on the settings.": "N\u00e3o foi poss\u00edvel carregar o relat\u00f3rio porque o fuso hor\u00e1rio n\u00e3o est\u00e1 definido nas configura\u00e7\u00f5es.", + "Year": "Ano", + "Recompute": "Recalcular", + "Income": "Renda", + "January": "Janeiro", + "March": "marchar", + "April": "abril", + "May": "Poderia", + "June": "junho", + "July": "Julho", + "August": "agosto", + "September": "setembro", + "October": "Outubro", + "November": "novembro", + "December": "dezembro", + "Sort Results": "Classificar resultados", + "Using Quantity Ascending": "Usando quantidade crescente", + "Using Quantity Descending": "Usando Quantidade Decrescente", + "Using Sales Ascending": "Usando o aumento de vendas", + "Using Sales Descending": "Usando vendas descendentes", + "Using Name Ascending": "Usando Nome Crescente", + "Using Name Descending": "Usando nome decrescente", + "Progress": "Progresso", + "Purchase Price": "Pre\u00e7o de compra", + "Profit": "Lucro", + "Discounts": "Descontos", + "Tax Value": "Valor do imposto", + "Reward System Name": "Nome do sistema de recompensa", + "Go Back": "Volte", + "Try Again": "Tente novamente", + "Home": "Casa", + "Not Allowed Action": "A\u00e7\u00e3o n\u00e3o permitida", + "How to change database configuration": "Como alterar a configura\u00e7\u00e3o do banco de dados", + "Common Database Issues": "Problemas comuns de banco de dados", + "Setup": "Configurar", + "Method Not Allowed": "M\u00e9todo n\u00e3o permitido", + "Documentation": "Documenta\u00e7\u00e3o", + "Missing Dependency": "Depend\u00eancia ausente", + "Continue": "Continuar", + "Module Version Mismatch": "Incompatibilidade de vers\u00e3o do m\u00f3dulo", + "Access Denied": "Acesso negado", + "Sign Up": "Inscrever-se", + "An invalid date were provided. Make sure it a prior date to the actual server date.": "Uma data inv\u00e1lida foi fornecida. Certifique-se de uma data anterior \u00e0 data real do servidor.", + "Computing report from %s...": "Calculando relat\u00f3rio de %s...", + "The operation was successful.": "A opera\u00e7\u00e3o foi bem sucedida.", + "Unable to find a module having the identifier\/namespace \"%s\"": "N\u00e3o foi poss\u00edvel encontrar um m\u00f3dulo com o identificador\/namespace \"%s\"", + "What is the CRUD single resource name ? [Q] to quit.": "Qual \u00e9 o nome do recurso \u00fanico CRUD? [Q] para sair.", + "Which table name should be used ? [Q] to quit.": "Qual nome de tabela deve ser usado? [Q] para sair.", + "If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "Se o seu recurso CRUD tiver uma rela\u00e7\u00e3o, mencione-a como segue \"foreign_table, estrangeira_key, local_key\" ? [S] para pular, [Q] para sair.", + "Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "Adicionar uma nova rela\u00e7\u00e3o? Mencione-o como segue \"tabela_estrangeira, chave_estrangeira, chave_local\" ? [S] para pular, [Q] para sair.", + "Not enough parameters provided for the relation.": "N\u00e3o h\u00e1 par\u00e2metros suficientes fornecidos para a rela\u00e7\u00e3o.", + "The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"": "O recurso CRUD \"%s\" para o m\u00f3dulo \"%s\" foi gerado em \"%s\"", + "The CRUD resource \"%s\" has been generated at %s": "O recurso CRUD \"%s\" foi gerado em %s", + "Localization for %s extracted to %s": "Localiza\u00e7\u00e3o para %s extra\u00edda para %s", + "Unable to find the requested module.": "N\u00e3o foi poss\u00edvel encontrar o m\u00f3dulo solicitado.", + "Version": "Vers\u00e3o", + "Path": "Caminho", + "Index": "\u00cdndice", + "Entry Class": "Classe de entrada", + "Routes": "Rotas", + "Api": "API", + "Controllers": "Controladores", + "Views": "Visualiza\u00e7\u00f5es", + "Attribute": "Atributo", + "Namespace": "Namespace", + "Author": "Autor", + "There is no migrations to perform for the module \"%s\"": "N\u00e3o h\u00e1 migra\u00e7\u00f5es a serem executadas para o m\u00f3dulo \"%s\"", + "The module migration has successfully been performed for the module \"%s\"": "A migra\u00e7\u00e3o do m\u00f3dulo foi realizada com sucesso para o m\u00f3dulo \"%s\"", + "The product barcodes has been refreshed successfully.": "Os c\u00f3digos de barras do produto foram atualizados com sucesso.", + "The demo has been enabled.": "A demonstra\u00e7\u00e3o foi habilitada.", + "What is the store name ? [Q] to quit.": "Qual \u00e9 o nome da loja? [Q] para sair.", + "Please provide at least 6 characters for store name.": "Forne\u00e7a pelo menos 6 caracteres para o nome da loja.", + "What is the administrator password ? [Q] to quit.": "Qual \u00e9 a senha do administrador? [Q] para sair.", + "Please provide at least 6 characters for the administrator password.": "Forne\u00e7a pelo menos 6 caracteres para a senha do administrador.", + "What is the administrator email ? [Q] to quit.": "Qual \u00e9 o e-mail do administrador? [Q] para sair.", + "Please provide a valid email for the administrator.": "Forne\u00e7a um e-mail v\u00e1lido para o administrador.", + "What is the administrator username ? [Q] to quit.": "Qual \u00e9 o nome de usu\u00e1rio do administrador? [Q] para sair.", + "Please provide at least 5 characters for the administrator username.": "Forne\u00e7a pelo menos 5 caracteres para o nome de usu\u00e1rio do administrador.", + "Downloading latest dev build...": "Baixando a vers\u00e3o de desenvolvimento mais recente...", + "Reset project to HEAD...": "Redefinir projeto para HEAD...", + "Credit": "Cr\u00e9dito", + "Debit": "D\u00e9bito", + "Coupons List": "Lista de cupons", + "Display all coupons.": "Exibir todos os cupons.", + "No coupons has been registered": "Nenhum cupom foi registrado", + "Add a new coupon": "Adicionar um novo cupom", + "Create a new coupon": "Criar um novo cupom", + "Register a new coupon and save it.": "Registre um novo cupom e salve-o.", + "Edit coupon": "Editar cupom", + "Modify Coupon.": "Modificar cupom.", + "Return to Coupons": "Voltar para cupons", + "Might be used while printing the coupon.": "Pode ser usado durante a impress\u00e3o do cupom.", + "Define which type of discount apply to the current coupon.": "Defina que tipo de desconto se aplica ao cupom atual.", + "Discount Value": "Valor do desconto", + "Define the percentage or flat value.": "Defina a porcentagem ou valor fixo.", + "Valid Until": "V\u00e1lido at\u00e9", + "Minimum Cart Value": "Valor m\u00ednimo do carrinho", + "What is the minimum value of the cart to make this coupon eligible.": "Qual \u00e9 o valor m\u00ednimo do carrinho para qualificar este cupom.", + "Maximum Cart Value": "Valor m\u00e1ximo do carrinho", + "Valid Hours Start": "Hor\u00e1rios v\u00e1lidos de in\u00edcio", + "Define form which hour during the day the coupons is valid.": "Defina em qual hor\u00e1rio do dia os cupons s\u00e3o v\u00e1lidos.", + "Valid Hours End": "Fim do Hor\u00e1rio V\u00e1lido", + "Define to which hour during the day the coupons end stop valid.": "Defina a que horas durante o dia os cupons terminam em validade.", + "Limit Usage": "Limitar uso", + "Define how many time a coupons can be redeemed.": "Defina quantas vezes um cupom pode ser resgatado.", + "Select Products": "Selecionar produtos", + "The following products will be required to be present on the cart, in order for this coupon to be valid.": "Os seguintes produtos dever\u00e3o estar presentes no carrinho para que este cupom seja v\u00e1lido.", + "Select Categories": "Selecionar categorias", + "The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.": "Os produtos atribu\u00eddos a uma dessas categorias devem estar no carrinho, para que este cupom seja v\u00e1lido.", + "Created At": "Criado em", + "Undefined": "Indefinido", + "Delete a licence": "Excluir uma licen\u00e7a", + "Customer Accounts List": "Lista de contas de clientes", + "Display all customer accounts.": "Exibir todas as contas de clientes.", + "No customer accounts has been registered": "Nenhuma conta de cliente foi registrada", + "Add a new customer account": "Adicionar uma nova conta de cliente", + "Create a new customer account": "Criar uma nova conta de cliente", + "Register a new customer account and save it.": "Registre uma nova conta de cliente e salve-a.", + "Edit customer account": "Editar conta do cliente", + "Modify Customer Account.": "Modificar conta do cliente.", + "Return to Customer Accounts": "Retornar \u00e0s contas do cliente", + "This will be ignored.": "Isso ser\u00e1 ignorado.", + "Define the amount of the transaction": "Defina o valor da transa\u00e7\u00e3o", + "Deduct": "Deduzir", + "Add": "Adicionar", + "Define what operation will occurs on the customer account.": "Defina qual opera\u00e7\u00e3o ocorrer\u00e1 na conta do cliente.", + "Customer Coupons List": "Lista de cupons do cliente", + "Display all customer coupons.": "Exibir todos os cupons de clientes.", + "No customer coupons has been registered": "Nenhum cupom de cliente foi registrado", + "Add a new customer coupon": "Adicionar um novo cupom de cliente", + "Create a new customer coupon": "Criar um novo cupom de cliente", + "Register a new customer coupon and save it.": "Registre um novo cupom de cliente e salve-o.", + "Edit customer coupon": "Editar cupom do cliente", + "Modify Customer Coupon.": "Modificar cupom do cliente.", + "Return to Customer Coupons": "Retorno aos cupons do cliente", + "Define how many time the coupon has been used.": "Defina quantas vezes o cupom foi usado.", + "Limit": "Limite", + "Define the maximum usage possible for this coupon.": "Defina o uso m\u00e1ximo poss\u00edvel para este cupom.", + "Code": "C\u00f3digo", + "Customers List": "Lista de clientes", + "Display all customers.": "Exibir todos os clientes.", + "No customers has been registered": "Nenhum cliente foi cadastrado", + "Add a new customer": "Adicionar um novo cliente", + "Create a new customer": "Criar um novo cliente", + "Register a new customer and save it.": "Registre um novo cliente e salve-o.", + "Edit customer": "Editar cliente", + "Modify Customer.": "Modificar Cliente.", + "Return to Customers": "Devolu\u00e7\u00e3o aos clientes", + "Provide a unique name for the customer.": "Forne\u00e7a um nome exclusivo para o cliente.", + "Group": "Grupo", + "Assign the customer to a group": "Atribuir o cliente a um grupo", + "Phone Number": "N\u00famero de telefone", + "Provide the customer phone number": "Informe o telefone do cliente", + "PO Box": "Caixa postal", + "Provide the customer PO.Box": "Forne\u00e7a a caixa postal do cliente", + "Not Defined": "N\u00e3o definido", + "Male": "Macho", + "Female": "F\u00eamea", + "Gender": "G\u00eanero", + "Billing Address": "endere\u00e7o de cobran\u00e7a", + "Billing phone number.": "N\u00famero de telefone de cobran\u00e7a.", + "Address 1": "Endere\u00e7o 1", + "Billing First Address.": "Primeiro endere\u00e7o de cobran\u00e7a.", + "Address 2": "Endere\u00e7o 2", + "Billing Second Address.": "Segundo endere\u00e7o de cobran\u00e7a.", + "Country": "Pa\u00eds", + "Billing Country.": "Pa\u00eds de faturamento.", + "Postal Address": "Endere\u00e7o postal", + "Company": "Companhia", + "Shipping Address": "Endere\u00e7o para envio", + "Shipping phone number.": "Telefone de envio.", + "Shipping First Address.": "Primeiro endere\u00e7o de envio.", + "Shipping Second Address.": "Segundo endere\u00e7o de envio.", + "Shipping Country.": "Pa\u00eds de envio.", + "Account Credit": "Cr\u00e9dito da conta", + "Owed Amount": "Valor devido", + "Purchase Amount": "Valor da compra", + "Delete a customers": "Excluir um cliente", + "Delete Selected Customers": "Excluir clientes selecionados", + "Customer Groups List": "Lista de grupos de clientes", + "Display all Customers Groups.": "Exibir todos os grupos de clientes.", + "No Customers Groups has been registered": "Nenhum Grupo de Clientes foi cadastrado", + "Add a new Customers Group": "Adicionar um novo grupo de clientes", + "Create a new Customers Group": "Criar um novo grupo de clientes", + "Register a new Customers Group and save it.": "Registre um novo Grupo de Clientes e salve-o.", + "Edit Customers Group": "Editar grupo de clientes", + "Modify Customers group.": "Modificar grupo de clientes.", + "Return to Customers Groups": "Retornar aos grupos de clientes", + "Reward System": "Sistema de recompensa", + "Select which Reward system applies to the group": "Selecione qual sistema de recompensa se aplica ao grupo", + "Minimum Credit Amount": "Valor m\u00ednimo de cr\u00e9dito", + "A brief description about what this group is about": "Uma breve descri\u00e7\u00e3o sobre o que \u00e9 este grupo", + "Created On": "Criado em", + "Customer Orders List": "Lista de pedidos do cliente", + "Display all customer orders.": "Exibir todos os pedidos dos clientes.", + "No customer orders has been registered": "Nenhum pedido de cliente foi registrado", + "Add a new customer order": "Adicionar um novo pedido de cliente", + "Create a new customer order": "Criar um novo pedido de cliente", + "Register a new customer order and save it.": "Registre um novo pedido de cliente e salve-o.", + "Edit customer order": "Editar pedido do cliente", + "Modify Customer Order.": "Modificar Pedido do Cliente.", + "Return to Customer Orders": "Retorno aos pedidos do cliente", + "Created at": "Criado em", + "Customer Id": "Identifica\u00e7\u00e3o do Cliente", + "Discount Percentage": "Porcentagem de desconto", + "Discount Type": "Tipo de desconto", + "Final Payment Date": "Data de Pagamento Final", + "Id": "Eu ia", + "Process Status": "Status do processo", + "Shipping Rate": "Taxa de envio", + "Shipping Type": "Tipo de envio", + "Title": "T\u00edtulo", + "Total installments": "Parcelas totais", + "Updated at": "Atualizado em", + "Uuid": "Uuid", + "Voidance Reason": "Motivo de anula\u00e7\u00e3o", + "Customer Rewards List": "Lista de recompensas do cliente", + "Display all customer rewards.": "Exiba todas as recompensas do cliente.", + "No customer rewards has been registered": "Nenhuma recompensa de cliente foi registrada", + "Add a new customer reward": "Adicionar uma nova recompensa ao cliente", + "Create a new customer reward": "Criar uma nova recompensa para o cliente", + "Register a new customer reward and save it.": "Registre uma nova recompensa de cliente e salve-a.", + "Edit customer reward": "Editar recompensa do cliente", + "Modify Customer Reward.": "Modificar a recompensa do cliente.", + "Return to Customer Rewards": "Retornar \u00e0s recompensas do cliente", + "Reward Name": "Nome da recompensa", + "Last Update": "\u00daltima atualiza\u00e7\u00e3o", + "All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.": "Todas as entidades vinculadas a esta categoria produzir\u00e3o um \"cr\u00e9dito\" ou \"d\u00e9bito\" no hist\u00f3rico do fluxo de caixa.", + "Account": "Conta", + "Provide the accounting number for this category.": "Forne\u00e7a o n\u00famero cont\u00e1bil para esta categoria.", + "Active": "Ativo", + "Users Group": "Grupo de usu\u00e1rios", + "None": "Nenhum", + "Recurring": "Recorrente", + "Start of Month": "In\u00edcio do m\u00eas", + "Mid of Month": "Meio do m\u00eas", + "End of Month": "Fim do m\u00eas", + "X days Before Month Ends": "X dias antes do fim do m\u00eas", + "X days After Month Starts": "X dias ap\u00f3s o in\u00edcio do m\u00eas", + "Occurrence": "Ocorr\u00eancia", + "Occurrence Value": "Valor de ocorr\u00eancia", + "Must be used in case of X days after month starts and X days before month ends.": "Deve ser usado no caso de X dias ap\u00f3s o in\u00edcio do m\u00eas e X dias antes do t\u00e9rmino do m\u00eas.", + "Category": "Categoria", + "Month Starts": "In\u00edcio do m\u00eas", + "Month Middle": "M\u00eas M\u00e9dio", + "Month Ends": "Fim do m\u00eas", + "X Days Before Month Ends": "X dias antes do fim do m\u00eas", + "Hold Orders List": "Lista de pedidos em espera", + "Display all hold orders.": "Exibir todos os pedidos de espera.", + "No hold orders has been registered": "Nenhuma ordem de espera foi registrada", + "Add a new hold order": "Adicionar um novo pedido de reten\u00e7\u00e3o", + "Create a new hold order": "Criar um novo pedido de reten\u00e7\u00e3o", + "Register a new hold order and save it.": "Registre uma nova ordem de espera e salve-a.", + "Edit hold order": "Editar pedido de espera", + "Modify Hold Order.": "Modificar ordem de espera.", + "Return to Hold Orders": "Retornar para reter pedidos", + "Updated At": "Atualizado em", + "Restrict the orders by the creation date.": "Restrinja os pedidos pela data de cria\u00e7\u00e3o.", + "Created Between": "Criado entre", + "Restrict the orders by the payment status.": "Restrinja os pedidos pelo status do pagamento.", + "Voided": "Anulado", + "Restrict the orders by the author.": "Restringir as ordens do autor.", + "Restrict the orders by the customer.": "Restringir os pedidos pelo cliente.", + "Restrict the orders to the cash registers.": "Restrinja os pedidos \u00e0s caixas registradoras.", + "Orders List": "Lista de pedidos", + "Display all orders.": "Exibir todos os pedidos.", + "No orders has been registered": "Nenhum pedido foi registrado", + "Add a new order": "Adicionar um novo pedido", + "Create a new order": "Criar um novo pedido", + "Register a new order and save it.": "Registre um novo pedido e salve-o.", + "Edit order": "Editar pedido", + "Modify Order.": "Ordem modificada.", + "Return to Orders": "Retornar aos pedidos", + "Discount Rate": "Taxa de desconto", + "The order and the attached products has been deleted.": "O pedido e os produtos anexados foram exclu\u00eddos.", + "Invoice": "Fatura", + "Receipt": "Recibo", + "Refund Receipt": "Recibo de reembolso", + "Order Instalments List": "Lista de Parcelas de Pedidos", + "Display all Order Instalments.": "Exibir todas as parcelas do pedido.", + "No Order Instalment has been registered": "Nenhuma Parcela de Pedido foi registrada", + "Add a new Order Instalment": "Adicionar uma nova parcela do pedido", + "Create a new Order Instalment": "Criar uma nova parcela do pedido", + "Register a new Order Instalment and save it.": "Registre uma nova Parcela de Pedido e salve-a.", + "Edit Order Instalment": "Editar parcela do pedido", + "Modify Order Instalment.": "Modificar Parcela do Pedido.", + "Return to Order Instalment": "Retorno \u00e0 Parcela do Pedido", + "Order Id": "C\u00f3digo do pedido", + "Payment Types List": "Lista de Tipos de Pagamento", + "Display all payment types.": "Exibir todos os tipos de pagamento.", + "No payment types has been registered": "Nenhum tipo de pagamento foi registrado", + "Add a new payment type": "Adicionar um novo tipo de pagamento", + "Create a new payment type": "Criar um novo tipo de pagamento", + "Register a new payment type and save it.": "Registre um novo tipo de pagamento e salve-o.", + "Edit payment type": "Editar tipo de pagamento", + "Modify Payment Type.": "Modificar Tipo de Pagamento.", + "Return to Payment Types": "Voltar aos Tipos de Pagamento", + "Label": "Etiqueta", + "Provide a label to the resource.": "Forne\u00e7a um r\u00f3tulo para o recurso.", + "Identifier": "Identificador", + "A payment type having the same identifier already exists.": "J\u00e1 existe um tipo de pagamento com o mesmo identificador.", + "Unable to delete a read-only payments type.": "N\u00e3o foi poss\u00edvel excluir um tipo de pagamento somente leitura.", + "Readonly": "Somente leitura", + "Procurements List": "Lista de aquisi\u00e7\u00f5es", + "Display all procurements.": "Exibir todas as aquisi\u00e7\u00f5es.", + "No procurements has been registered": "Nenhuma compra foi registrada", + "Add a new procurement": "Adicionar uma nova aquisi\u00e7\u00e3o", + "Create a new procurement": "Criar uma nova aquisi\u00e7\u00e3o", + "Register a new procurement and save it.": "Registre uma nova aquisi\u00e7\u00e3o e salve-a.", + "Edit procurement": "Editar aquisi\u00e7\u00e3o", + "Modify Procurement.": "Modificar Aquisi\u00e7\u00e3o.", + "Return to Procurements": "Voltar para Compras", + "Provider Id": "ID do provedor", + "Total Items": "Total de Itens", + "Provider": "Fornecedor", + "Procurement Products List": "Lista de Produtos de Aquisi\u00e7\u00e3o", + "Display all procurement products.": "Exibir todos os produtos de aquisi\u00e7\u00e3o.", + "No procurement products has been registered": "Nenhum produto de aquisi\u00e7\u00e3o foi registrado", + "Add a new procurement product": "Adicionar um novo produto de compras", + "Create a new procurement product": "Criar um novo produto de compras", + "Register a new procurement product and save it.": "Registre um novo produto de aquisi\u00e7\u00e3o e salve-o.", + "Edit procurement product": "Editar produto de aquisi\u00e7\u00e3o", + "Modify Procurement Product.": "Modificar Produto de Aquisi\u00e7\u00e3o.", + "Return to Procurement Products": "Devolu\u00e7\u00e3o para Produtos de Aquisi\u00e7\u00e3o", + "Define what is the expiration date of the product.": "Defina qual \u00e9 a data de validade do produto.", + "On": "Sobre", + "Category Products List": "Lista de produtos da categoria", + "Display all category products.": "Exibir todos os produtos da categoria.", + "No category products has been registered": "Nenhum produto da categoria foi registrado", + "Add a new category product": "Adicionar um novo produto de categoria", + "Create a new category product": "Criar um novo produto de categoria", + "Register a new category product and save it.": "Registre um novo produto de categoria e salve-o.", + "Edit category product": "Editar produto de categoria", + "Modify Category Product.": "Modifique o produto da categoria.", + "Return to Category Products": "Voltar para a categoria Produtos", + "No Parent": "Nenhum pai", + "Preview": "Visualizar", + "Provide a preview url to the category.": "Forne\u00e7a um URL de visualiza\u00e7\u00e3o para a categoria.", + "Displays On POS": "Exibe no PDV", + "Parent": "Pai", + "If this category should be a child category of an existing category": "Se esta categoria deve ser uma categoria filha de uma categoria existente", + "Total Products": "Produtos totais", + "Products List": "Lista de produtos", + "Display all products.": "Exibir todos os produtos.", + "No products has been registered": "Nenhum produto foi cadastrado", + "Add a new product": "Adicionar um novo produto", + "Create a new product": "Criar um novo produto", + "Register a new product and save it.": "Registre um novo produto e salve-o.", + "Edit product": "Editar produto", + "Modify Product.": "Modificar Produto.", + "Return to Products": "Retornar aos produtos", + "Assigned Unit": "Unidade Atribu\u00edda", + "The assigned unit for sale": "A unidade atribu\u00edda \u00e0 venda", + "Define the regular selling price.": "Defina o pre\u00e7o de venda normal.", + "Define the wholesale price.": "Defina o pre\u00e7o de atacado.", + "Preview Url": "URL de visualiza\u00e7\u00e3o", + "Provide the preview of the current unit.": "Forne\u00e7a a visualiza\u00e7\u00e3o da unidade atual.", + "Identification": "Identifica\u00e7\u00e3o", + "Define the barcode value. Focus the cursor here before scanning the product.": "Defina o valor do c\u00f3digo de barras. Foque o cursor aqui antes de digitalizar o produto.", + "Define the barcode type scanned.": "Defina o tipo de c\u00f3digo de barras lido.", + "EAN 8": "EAN 8", + "EAN 13": "EAN 13", + "Codabar": "Codabar", + "Code 128": "C\u00f3digo 128", + "Code 39": "C\u00f3digo 39", + "Code 11": "C\u00f3digo 11", + "UPC A": "UPC A", + "UPC E": "UPC E", + "Barcode Type": "Tipo de c\u00f3digo de barras", + "Select to which category the item is assigned.": "Selecione a qual categoria o item est\u00e1 atribu\u00eddo.", + "Materialized Product": "Produto materializado", + "Dematerialized Product": "Produto Desmaterializado", + "Define the product type. Applies to all variations.": "Defina o tipo de produto. Aplica-se a todas as varia\u00e7\u00f5es.", + "Product Type": "Tipo de Produto", + "Define a unique SKU value for the product.": "Defina um valor de SKU exclusivo para o produto.", + "On Sale": "\u00c0 venda", + "Hidden": "Escondido", + "Define whether the product is available for sale.": "Defina se o produto est\u00e1 dispon\u00edvel para venda.", + "Enable the stock management on the product. Will not work for service or uncountable products.": "Habilite o gerenciamento de estoque no produto. N\u00e3o funcionar\u00e1 para servi\u00e7os ou produtos incont\u00e1veis.", + "Stock Management Enabled": "Gerenciamento de estoque ativado", + "Units": "Unidades", + "Accurate Tracking": "Rastreamento preciso", + "What unit group applies to the actual item. This group will apply during the procurement.": "Qual grupo de unidades se aplica ao item real. Este grupo ser\u00e1 aplicado durante a aquisi\u00e7\u00e3o.", + "Unit Group": "Grupo de unidades", + "Determine the unit for sale.": "Determine a unidade \u00e0 venda.", + "Selling Unit": "Unidade de venda", + "Expiry": "Termo", + "Product Expires": "O produto expira", + "Set to \"No\" expiration time will be ignored.": "O tempo de expira\u00e7\u00e3o definido como \"N\u00e3o\" ser\u00e1 ignorado.", + "Prevent Sales": "Impedir vendas", + "Allow Sales": "Permitir vendas", + "Determine the action taken while a product has expired.": "Determine a a\u00e7\u00e3o tomada enquanto um produto expirou.", + "On Expiration": "Na expira\u00e7\u00e3o", + "Select the tax group that applies to the product\/variation.": "Selecione o grupo de impostos que se aplica ao produto\/varia\u00e7\u00e3o.", + "Define what is the type of the tax.": "Defina qual \u00e9 o tipo de imposto.", + "Images": "Imagens", + "Image": "Imagem", + "Choose an image to add on the product gallery": "Escolha uma imagem para adicionar na galeria de produtos", + "Is Primary": "\u00c9 prim\u00e1rio", + "Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.": "Defina se a imagem deve ser prim\u00e1ria. Se houver mais de uma imagem prim\u00e1ria, uma ser\u00e1 escolhida para voc\u00ea.", + "Sku": "Sku", + "Materialized": "Materializado", + "Dematerialized": "Desmaterializado", + "Available": "Dispon\u00edvel", + "See Quantities": "Ver Quantidades", + "See History": "Ver hist\u00f3rico", + "Would you like to delete selected entries ?": "Deseja excluir as entradas selecionadas?", + "Product Histories": "Hist\u00f3ricos de produtos", + "Display all product histories.": "Exibir todos os hist\u00f3ricos de produtos.", + "No product histories has been registered": "Nenhum hist\u00f3rico de produto foi registrado", + "Add a new product history": "Adicionar um novo hist\u00f3rico de produtos", + "Create a new product history": "Criar um novo hist\u00f3rico de produtos", + "Register a new product history and save it.": "Registre um novo hist\u00f3rico de produtos e salve-o.", + "Edit product history": "Editar hist\u00f3rico do produto", + "Modify Product History.": "Modifique o hist\u00f3rico do produto.", + "Return to Product Histories": "Voltar aos hist\u00f3ricos de produtos", + "After Quantity": "Ap\u00f3s a quantidade", + "Before Quantity": "Antes da quantidade", + "Operation Type": "Tipo de opera\u00e7\u00e3o", + "Order id": "C\u00f3digo do pedido", + "Procurement Id": "ID de aquisi\u00e7\u00e3o", + "Procurement Product Id": "ID do produto de aquisi\u00e7\u00e3o", + "Product Id": "ID do produto", + "Unit Id": "ID da unidade", + "P. Quantity": "P. Quantidade", + "N. Quantity": "N. Quantidade", + "Stocked": "Abastecido", + "Defective": "Defeituoso", + "Deleted": "Exclu\u00eddo", + "Removed": "Removido", + "Returned": "Devolvida", + "Sold": "Vendido", + "Lost": "Perdido", + "Added": "Adicionado", + "Incoming Transfer": "Transfer\u00eancia de entrada", + "Outgoing Transfer": "Transfer\u00eancia de sa\u00edda", + "Transfer Rejected": "Transfer\u00eancia rejeitada", + "Transfer Canceled": "Transfer\u00eancia cancelada", + "Void Return": "Devolu\u00e7\u00e3o nula", + "Adjustment Return": "Retorno de Ajuste", + "Adjustment Sale": "Venda de ajuste", + "Product Unit Quantities List": "Lista de Quantidades de Unidades de Produto", + "Display all product unit quantities.": "Exibe todas as quantidades de unidades do produto.", + "No product unit quantities has been registered": "Nenhuma quantidade de unidade de produto foi registrada", + "Add a new product unit quantity": "Adicionar uma nova quantidade de unidade de produto", + "Create a new product unit quantity": "Criar uma nova quantidade de unidade de produto", + "Register a new product unit quantity and save it.": "Registre uma nova quantidade de unidade de produto e salve-a.", + "Edit product unit quantity": "Editar quantidade da unidade do produto", + "Modify Product Unit Quantity.": "Modifique a quantidade da unidade do produto.", + "Return to Product Unit Quantities": "Devolu\u00e7\u00e3o para Quantidades de Unidades de Produto", + "Created_at": "Criado em", + "Product id": "ID do produto", + "Updated_at": "Updated_at", + "Providers List": "Lista de provedores", + "Display all providers.": "Exibir todos os provedores.", + "No providers has been registered": "Nenhum provedor foi cadastrado", + "Add a new provider": "Adicionar um novo provedor", + "Create a new provider": "Criar um novo provedor", + "Register a new provider and save it.": "Registre um novo provedor e salve-o.", + "Edit provider": "Editar provedor", + "Modify Provider.": "Modificar provedor.", + "Return to Providers": "Devolver aos fornecedores", + "Provide the provider email. Might be used to send automated email.": "Informe o e-mail do provedor. Pode ser usado para enviar e-mail automatizado.", + "Contact phone number for the provider. Might be used to send automated SMS notifications.": "Telefone de contato do provedor. Pode ser usado para enviar notifica\u00e7\u00f5es SMS automatizadas.", + "First address of the provider.": "Primeiro endere\u00e7o do provedor.", + "Second address of the provider.": "Segundo endere\u00e7o do provedor.", + "Further details about the provider": "Mais detalhes sobre o provedor", + "Amount Due": "Valor devido", + "Amount Paid": "Quantia paga", + "See Procurements": "Veja Aquisi\u00e7\u00f5es", + "Provider Procurements List": "Lista de aquisi\u00e7\u00f5es de fornecedores", + "Display all provider procurements.": "Exibir todas as aquisi\u00e7\u00f5es do fornecedor.", + "No provider procurements has been registered": "Nenhuma aquisi\u00e7\u00e3o de fornecedor foi registrada", + "Add a new provider procurement": "Adicionar uma nova aquisi\u00e7\u00e3o de fornecedor", + "Create a new provider procurement": "Criar uma nova aquisi\u00e7\u00e3o de fornecedor", + "Register a new provider procurement and save it.": "Registre uma nova aquisi\u00e7\u00e3o de provedor e salve-a.", + "Edit provider procurement": "Editar aquisi\u00e7\u00e3o do fornecedor", + "Modify Provider Procurement.": "Modificar a aquisi\u00e7\u00e3o do provedor.", + "Return to Provider Procurements": "Devolu\u00e7\u00e3o para Compras do Provedor", + "Delivered On": "Entregue em", + "Delivery": "Entrega", + "Items": "Itens", + "Registers List": "Lista de Registros", + "Display all registers.": "Exibe todos os registradores.", + "No registers has been registered": "Nenhum registro foi registrado", + "Add a new register": "Adicionar um novo registro", + "Create a new register": "Criar um novo registro", + "Register a new register and save it.": "Registre um novo registro e salve-o.", + "Edit register": "Editar registro", + "Modify Register.": "Modificar Cadastro.", + "Return to Registers": "Voltar aos Registros", + "Closed": "Fechadas", + "Define what is the status of the register.": "Defina qual \u00e9 o status do registro.", + "Provide mode details about this cash register.": "Forne\u00e7a detalhes do modo sobre esta caixa registradora.", + "Unable to delete a register that is currently in use": "N\u00e3o \u00e9 poss\u00edvel excluir um registro que est\u00e1 em uso no momento", + "Used By": "Usado por", + "Register History List": "Lista de hist\u00f3rico de registro", + "Display all register histories.": "Exibe todos os hist\u00f3ricos de registro.", + "No register histories has been registered": "Nenhum hist\u00f3rico de registro foi registrado", + "Add a new register history": "Adicionar um novo hist\u00f3rico de registro", + "Create a new register history": "Criar um novo hist\u00f3rico de registro", + "Register a new register history and save it.": "Registre um novo hist\u00f3rico de registro e salve-o.", + "Edit register history": "Editar hist\u00f3rico de registro", + "Modify Registerhistory.": "Modificar hist\u00f3rico de registro.", + "Return to Register History": "Voltar ao hist\u00f3rico de registros", + "Register Id": "ID de registro", + "Action": "A\u00e7ao", + "Register Name": "Nome do Registro", + "Done At": "Pronto \u00e0", + "Reward Systems List": "Lista de Sistemas de Recompensa", + "Display all reward systems.": "Exiba todos os sistemas de recompensa.", + "No reward systems has been registered": "Nenhum sistema de recompensa foi registrado", + "Add a new reward system": "Adicionar um novo sistema de recompensa", + "Create a new reward system": "Crie um novo sistema de recompensas", + "Register a new reward system and save it.": "Registre um novo sistema de recompensa e salve-o.", + "Edit reward system": "Editar sistema de recompensa", + "Modify Reward System.": "Modifique o sistema de recompensas.", + "Return to Reward Systems": "Retorne aos sistemas de recompensa", + "From": "A partir de", + "The interval start here.": "O intervalo come\u00e7a aqui.", + "To": "Para", + "The interval ends here.": "O intervalo termina aqui.", + "Points earned.": "Pontos ganhos.", + "Coupon": "Cupom", + "Decide which coupon you would apply to the system.": "Decida qual cupom voc\u00ea aplicaria ao sistema.", + "This is the objective that the user should reach to trigger the reward.": "Esse \u00e9 o objetivo que o usu\u00e1rio deve atingir para acionar a recompensa.", + "A short description about this system": "Uma breve descri\u00e7\u00e3o sobre este sistema", + "Would you like to delete this reward system ?": "Deseja excluir este sistema de recompensa?", + "Delete Selected Rewards": "Excluir recompensas selecionadas", + "Would you like to delete selected rewards?": "Deseja excluir recompensas selecionadas?", + "Roles List": "Lista de Fun\u00e7\u00f5es", + "Display all roles.": "Exiba todos os pap\u00e9is.", + "No role has been registered.": "Nenhuma fun\u00e7\u00e3o foi registrada.", + "Add a new role": "Adicionar uma nova fun\u00e7\u00e3o", + "Create a new role": "Criar uma nova fun\u00e7\u00e3o", + "Create a new role and save it.": "Crie uma nova fun\u00e7\u00e3o e salve-a.", + "Edit role": "Editar fun\u00e7\u00e3o", + "Modify Role.": "Modificar fun\u00e7\u00e3o.", + "Return to Roles": "Voltar para Fun\u00e7\u00f5es", + "Provide a name to the role.": "Forne\u00e7a um nome para a fun\u00e7\u00e3o.", + "Should be a unique value with no spaces or special character": "Deve ser um valor \u00fanico sem espa\u00e7os ou caracteres especiais", + "Store Dashboard": "Painel da loja", + "Cashier Dashboard": "Painel do caixa", + "Default Dashboard": "Painel padr\u00e3o", + "Provide more details about what this role is about.": "Forne\u00e7a mais detalhes sobre o que \u00e9 essa fun\u00e7\u00e3o.", + "Unable to delete a system role.": "N\u00e3o \u00e9 poss\u00edvel excluir uma fun\u00e7\u00e3o do sistema.", + "You do not have enough permissions to perform this action.": "Voc\u00ea n\u00e3o tem permiss\u00f5es suficientes para executar esta a\u00e7\u00e3o.", + "Taxes List": "Lista de impostos", + "Display all taxes.": "Exibir todos os impostos.", + "No taxes has been registered": "Nenhum imposto foi registrado", + "Add a new tax": "Adicionar um novo imposto", + "Create a new tax": "Criar um novo imposto", + "Register a new tax and save it.": "Registre um novo imposto e salve-o.", + "Edit tax": "Editar imposto", + "Modify Tax.": "Modificar Imposto.", + "Return to Taxes": "Retorno aos impostos", + "Provide a name to the tax.": "Forne\u00e7a um nome para o imposto.", + "Assign the tax to a tax group.": "Atribua o imposto a um grupo de impostos.", + "Rate": "Avaliar", + "Define the rate value for the tax.": "Defina o valor da taxa para o imposto.", + "Provide a description to the tax.": "Forne\u00e7a uma descri\u00e7\u00e3o para o imposto.", + "Taxes Groups List": "Lista de grupos de impostos", + "Display all taxes groups.": "Exibir todos os grupos de impostos.", + "No taxes groups has been registered": "Nenhum grupo de impostos foi registrado", + "Add a new tax group": "Adicionar um novo grupo de impostos", + "Create a new tax group": "Criar um novo grupo de impostos", + "Register a new tax group and save it.": "Registre um novo grupo de impostos e salve-o.", + "Edit tax group": "Editar grupo de impostos", + "Modify Tax Group.": "Modificar Grupo Fiscal.", + "Return to Taxes Groups": "Retornar aos grupos de impostos", + "Provide a short description to the tax group.": "Forne\u00e7a uma breve descri\u00e7\u00e3o para o grupo de impostos.", + "Units List": "Lista de unidades", + "Display all units.": "Exibir todas as unidades.", + "No units has been registered": "Nenhuma unidade foi registrada", + "Add a new unit": "Adicionar uma nova unidade", + "Create a new unit": "Criar uma nova unidade", + "Register a new unit and save it.": "Registre uma nova unidade e salve-a.", + "Edit unit": "Editar unidade", + "Modify Unit.": "Modificar Unidade.", + "Return to Units": "Voltar para Unidades", + "Preview URL": "URL de visualiza\u00e7\u00e3o", + "Preview of the unit.": "Pr\u00e9via da unidade.", + "Define the value of the unit.": "Defina o valor da unidade.", + "Define to which group the unit should be assigned.": "Defina a qual grupo a unidade deve ser atribu\u00edda.", + "Base Unit": "Unidade base", + "Determine if the unit is the base unit from the group.": "Determine se a unidade \u00e9 a unidade base do grupo.", + "Provide a short description about the unit.": "Forne\u00e7a uma breve descri\u00e7\u00e3o sobre a unidade.", + "Unit Groups List": "Lista de Grupos de Unidades", + "Display all unit groups.": "Exibe todos os grupos de unidades.", + "No unit groups has been registered": "Nenhum grupo de unidades foi registrado", + "Add a new unit group": "Adicionar um novo grupo de unidades", + "Create a new unit group": "Criar um novo grupo de unidades", + "Register a new unit group and save it.": "Registre um novo grupo de unidades e salve-o.", + "Edit unit group": "Editar grupo de unidades", + "Modify Unit Group.": "Modificar Grupo de Unidades.", + "Return to Unit Groups": "Retornar aos Grupos de Unidades", + "Users List": "Lista de usu\u00e1rios", + "Display all users.": "Exibir todos os usu\u00e1rios.", + "No users has been registered": "Nenhum usu\u00e1rio foi registrado", + "Add a new user": "Adicionar um novo usu\u00e1rio", + "Create a new user": "Criar um novo usu\u00e1rio", + "Register a new user and save it.": "Registre um novo usu\u00e1rio e salve-o.", + "Edit user": "Editar usu\u00e1rio", + "Modify User.": "Modificar usu\u00e1rio.", + "Return to Users": "Retornar aos usu\u00e1rios", + "Username": "Nome do usu\u00e1rio", + "Will be used for various purposes such as email recovery.": "Ser\u00e1 usado para diversos fins, como recupera\u00e7\u00e3o de e-mail.", + "Password": "Senha", + "Make a unique and secure password.": "Crie uma senha \u00fanica e segura.", + "Confirm Password": "Confirme a Senha", + "Should be the same as the password.": "Deve ser igual \u00e0 senha.", + "Define whether the user can use the application.": "Defina se o usu\u00e1rio pode usar o aplicativo.", + "Incompatibility Exception": "Exce\u00e7\u00e3o de incompatibilidade", + "The action you tried to perform is not allowed.": "A a\u00e7\u00e3o que voc\u00ea tentou realizar n\u00e3o \u00e9 permitida.", + "Not Enough Permissions": "Permiss\u00f5es insuficientes", + "The resource of the page you tried to access is not available or might have been deleted.": "O recurso da p\u00e1gina que voc\u00ea tentou acessar n\u00e3o est\u00e1 dispon\u00edvel ou pode ter sido exclu\u00eddo.", + "Not Found Exception": "Exce\u00e7\u00e3o n\u00e3o encontrada", + "Query Exception": "Exce\u00e7\u00e3o de consulta", + "Provide your username.": "Forne\u00e7a seu nome de usu\u00e1rio.", + "Provide your password.": "Forne\u00e7a sua senha.", + "Provide your email.": "Informe seu e-mail.", + "Password Confirm": "Confirma\u00e7\u00e3o de senha", + "define the amount of the transaction.": "definir o valor da transa\u00e7\u00e3o.", + "Further observation while proceeding.": "Observa\u00e7\u00e3o adicional durante o processo.", + "determine what is the transaction type.": "determinar qual \u00e9 o tipo de transa\u00e7\u00e3o.", + "Determine the amount of the transaction.": "Determine o valor da transa\u00e7\u00e3o.", + "Further details about the transaction.": "Mais detalhes sobre a transa\u00e7\u00e3o.", + "Define the installments for the current order.": "Defina as parcelas para o pedido atual.", + "New Password": "Nova Senha", + "define your new password.": "defina sua nova senha.", + "confirm your new password.": "confirme sua nova senha.", + "choose the payment type.": "escolha o tipo de pagamento.", + "Define the order name.": "Defina o nome do pedido.", + "Define the date of creation of the order.": "Defina a data de cria\u00e7\u00e3o do pedido.", + "Provide the procurement name.": "Forne\u00e7a o nome da aquisi\u00e7\u00e3o.", + "Describe the procurement.": "Descreva a aquisi\u00e7\u00e3o.", + "Define the provider.": "Defina o provedor.", + "Define what is the unit price of the product.": "Defina qual \u00e9 o pre\u00e7o unit\u00e1rio do produto.", + "Determine in which condition the product is returned.": "Determine em que condi\u00e7\u00f5es o produto \u00e9 devolvido.", + "Other Observations": "Outras observa\u00e7\u00f5es", + "Describe in details the condition of the returned product.": "Descreva detalhadamente o estado do produto devolvido.", + "Unit Group Name": "Nome do Grupo da Unidade", + "Provide a unit name to the unit.": "Forne\u00e7a um nome de unidade para a unidade.", + "Describe the current unit.": "Descreva a unidade atual.", + "assign the current unit to a group.": "atribuir a unidade atual a um grupo.", + "define the unit value.": "definir o valor unit\u00e1rio.", + "Provide a unit name to the units group.": "Forne\u00e7a um nome de unidade para o grupo de unidades.", + "Describe the current unit group.": "Descreva o grupo de unidades atual.", + "POS": "PDV", + "Open POS": "Abrir PDV", + "Create Register": "Criar registro", + "Use Customer Billing": "Usar faturamento do cliente", + "Define whether the customer billing information should be used.": "Defina se as informa\u00e7\u00f5es de faturamento do cliente devem ser usadas.", + "General Shipping": "Envio geral", + "Define how the shipping is calculated.": "Defina como o frete \u00e9 calculado.", + "Shipping Fees": "Taxas de envio", + "Define shipping fees.": "Defina as taxas de envio.", + "Use Customer Shipping": "Usar o envio do cliente", + "Define whether the customer shipping information should be used.": "Defina se as informa\u00e7\u00f5es de envio do cliente devem ser usadas.", + "Invoice Number": "N\u00famero da fatura", + "If the procurement has been issued outside of NexoPOS, please provide a unique reference.": "Se a aquisi\u00e7\u00e3o foi emitida fora do NexoPOS, forne\u00e7a uma refer\u00eancia exclusiva.", + "Delivery Time": "Prazo de entrega", + "If the procurement has to be delivered at a specific time, define the moment here.": "Se a aquisi\u00e7\u00e3o tiver que ser entregue em um hor\u00e1rio espec\u00edfico, defina o momento aqui.", + "Automatic Approval": "Aprova\u00e7\u00e3o autom\u00e1tica", + "Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.": "Determine se a aquisi\u00e7\u00e3o deve ser marcada automaticamente como aprovada assim que o prazo de entrega ocorrer.", + "Pending": "Pendente", + "Delivered": "Entregue", + "Determine what is the actual payment status of the procurement.": "Determine qual \u00e9 o status real de pagamento da aquisi\u00e7\u00e3o.", + "Determine what is the actual provider of the current procurement.": "Determine qual \u00e9 o fornecedor real da aquisi\u00e7\u00e3o atual.", + "Provide a name that will help to identify the procurement.": "Forne\u00e7a um nome que ajude a identificar a aquisi\u00e7\u00e3o.", + "First Name": "Primeiro nome", + "Avatar": "Avatar", + "Define the image that should be used as an avatar.": "Defina a imagem que deve ser usada como avatar.", + "Language": "L\u00edngua", + "Choose the language for the current account.": "Escolha o idioma da conta atual.", + "Security": "Seguran\u00e7a", + "Old Password": "Senha Antiga", + "Provide the old password.": "Forne\u00e7a a senha antiga.", + "Change your password with a better stronger password.": "Altere sua senha com uma senha melhor e mais forte.", + "Password Confirmation": "Confirma\u00c7\u00e3o Da Senha", + "The profile has been successfully saved.": "O perfil foi salvo com sucesso.", + "The user attribute has been saved.": "O atributo de usu\u00e1rio foi salvo.", + "The options has been successfully updated.": "As op\u00e7\u00f5es foram atualizadas com sucesso.", + "Wrong password provided": "Senha incorreta fornecida", + "Wrong old password provided": "Senha antiga incorreta fornecida", + "Password Successfully updated.": "Senha atualizada com sucesso.", + "Sign In — NexoPOS": "Entrar — NexoPOS", + "Sign Up — NexoPOS": "Inscreva-se — NexoPOS", + "Password Lost": "Senha perdida", + "Unable to proceed as the token provided is invalid.": "N\u00e3o foi poss\u00edvel continuar porque o token fornecido \u00e9 inv\u00e1lido.", + "The token has expired. Please request a new activation token.": "O token expirou. Solicite um novo token de ativa\u00e7\u00e3o.", + "Set New Password": "Definir nova senha", + "Database Update": "Atualiza\u00e7\u00e3o do banco de dados", + "This account is disabled.": "Esta conta est\u00e1 desativada.", + "Unable to find record having that username.": "N\u00e3o foi poss\u00edvel encontrar um registro com esse nome de usu\u00e1rio.", + "Unable to find record having that password.": "N\u00e3o foi poss\u00edvel encontrar registro com essa senha.", + "Invalid username or password.": "Nome de usu\u00e1rio ou senha inv\u00e1lidos.", + "Unable to login, the provided account is not active.": "N\u00e3o \u00e9 poss\u00edvel fazer login, a conta fornecida n\u00e3o est\u00e1 ativa.", + "You have been successfully connected.": "Voc\u00ea foi conectado com sucesso.", + "The recovery email has been send to your inbox.": "O e-mail de recupera\u00e7\u00e3o foi enviado para sua caixa de entrada.", + "Unable to find a record matching your entry.": "N\u00e3o foi poss\u00edvel encontrar um registro que corresponda \u00e0 sua entrada.", + "Your Account has been created but requires email validation.": "Sua conta foi criada, mas requer valida\u00e7\u00e3o de e-mail.", + "Unable to find the requested user.": "N\u00e3o foi poss\u00edvel encontrar o usu\u00e1rio solicitado.", + "Unable to proceed, the provided token is not valid.": "N\u00e3o \u00e9 poss\u00edvel continuar, o token fornecido n\u00e3o \u00e9 v\u00e1lido.", + "Unable to proceed, the token has expired.": "N\u00e3o foi poss\u00edvel continuar, o token expirou.", + "Your password has been updated.": "Sua senha foi atualizada.", + "Unable to edit a register that is currently in use": "N\u00e3o \u00e9 poss\u00edvel editar um registro que est\u00e1 em uso no momento", + "No register has been opened by the logged user.": "Nenhum registro foi aberto pelo usu\u00e1rio logado.", + "The register is opened.": "O registro \u00e9 aberto.", + "Closing": "Fechamento", + "Opening": "Abertura", + "Sale": "Oferta", + "Refund": "Reembolso", + "Unable to find the category using the provided identifier": "N\u00e3o foi poss\u00edvel encontrar a categoria usando o identificador fornecido", + "The category has been deleted.": "A categoria foi exclu\u00edda.", + "Unable to find the category using the provided identifier.": "N\u00e3o foi poss\u00edvel encontrar a categoria usando o identificador fornecido.", + "Unable to find the attached category parent": "N\u00e3o foi poss\u00edvel encontrar o pai da categoria anexada", + "The category has been correctly saved": "A categoria foi salva corretamente", + "The category has been updated": "A categoria foi atualizada", + "The category products has been refreshed": "A categoria produtos foi atualizada", + "The entry has been successfully deleted.": "A entrada foi exclu\u00edda com sucesso.", + "A new entry has been successfully created.": "Uma nova entrada foi criada com sucesso.", + "Unhandled crud resource": "Recurso bruto n\u00e3o tratado", + "You need to select at least one item to delete": "Voc\u00ea precisa selecionar pelo menos um item para excluir", + "You need to define which action to perform": "Voc\u00ea precisa definir qual a\u00e7\u00e3o executar", + "%s has been processed, %s has not been processed.": "%s foi processado, %s n\u00e3o foi processado.", + "Unable to proceed. No matching CRUD resource has been found.": "N\u00e3o foi poss\u00edvel prosseguir. Nenhum recurso CRUD correspondente foi encontrado.", + "The requested file cannot be downloaded or has already been downloaded.": "O arquivo solicitado n\u00e3o pode ser baixado ou j\u00e1 foi baixado.", + "The requested customer cannot be found.": "O cliente solicitado n\u00e3o pode ser found.", + "Create Coupon": "Criar cupom", + "helps you creating a coupon.": "ajuda voc\u00ea a criar um cupom.", + "Edit Coupon": "Editar cupom", + "Editing an existing coupon.": "Editando um cupom existente.", + "Invalid Request.": "Pedido inv\u00e1lido.", + "Displays the customer account history for %s": "Exibe o hist\u00f3rico da conta do cliente para %s", + "Unable to delete a group to which customers are still assigned.": "N\u00e3o \u00e9 poss\u00edvel excluir um grupo ao qual os clientes ainda est\u00e3o atribu\u00eddos.", + "The customer group has been deleted.": "O grupo de clientes foi exclu\u00eddo.", + "Unable to find the requested group.": "N\u00e3o foi poss\u00edvel encontrar o grupo solicitado.", + "The customer group has been successfully created.": "O grupo de clientes foi criado com sucesso.", + "The customer group has been successfully saved.": "O grupo de clientes foi salvo com sucesso.", + "Unable to transfer customers to the same account.": "N\u00e3o foi poss\u00edvel transferir clientes para a mesma conta.", + "The categories has been transferred to the group %s.": "As categorias foram transferidas para o grupo %s.", + "No customer identifier has been provided to proceed to the transfer.": "Nenhum identificador de cliente foi fornecido para prosseguir com a transfer\u00eancia.", + "Unable to find the requested group using the provided id.": "N\u00e3o foi poss\u00edvel encontrar o grupo solicitado usando o ID fornecido.", + "\"%s\" is not an instance of \"FieldsService\"": "\"%s\" n\u00e3o \u00e9 uma inst\u00e2ncia de \"FieldsService\"", + "Manage Medias": "Gerenciar m\u00eddias", + "Modules List": "Lista de M\u00f3dulos", + "List all available modules.": "Liste todos os m\u00f3dulos dispon\u00edveis.", + "Upload A Module": "Carregar um m\u00f3dulo", + "Extends NexoPOS features with some new modules.": "Estende os recursos do NexoPOS com alguns novos m\u00f3dulos.", + "The notification has been successfully deleted": "A notifica\u00e7\u00e3o foi exclu\u00edda com sucesso", + "All the notifications have been cleared.": "Todas as notifica\u00e7\u00f5es foram apagadas.", + "Order Invoice — %s": "Fatura do pedido — %s", + "Order Refund Receipt — %s": "Recibo de reembolso do pedido — %s", + "Order Receipt — %s": "Recibo do pedido — %s", + "The printing event has been successfully dispatched.": "O evento de impress\u00e3o foi despachado com sucesso.", + "There is a mismatch between the provided order and the order attached to the instalment.": "H\u00e1 uma incompatibilidade entre o pedido fornecido e o pedido anexado \u00e0 parcela.", + "Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.": "N\u00e3o \u00e9 poss\u00edvel editar uma aquisi\u00e7\u00e3o que est\u00e1 estocada. Considere realizar um ajuste ou excluir a aquisi\u00e7\u00e3o.", + "New Procurement": "Nova aquisi\u00e7\u00e3o", + "Edit Procurement": "Editar aquisi\u00e7\u00e3o", + "Perform adjustment on existing procurement.": "Realizar ajustes em compras existentes.", + "%s - Invoice": "%s - Fatura", + "list of product procured.": "lista de produtos adquiridos.", + "The product price has been refreshed.": "O pre\u00e7o do produto foi atualizado.", + "The single variation has been deleted.": "A \u00fanica varia\u00e7\u00e3o foi exclu\u00edda.", + "Edit a product": "Editar um produto", + "Makes modifications to a product": "Faz modifica\u00e7\u00f5es em um produto", + "Create a product": "Criar um produto", + "Add a new product on the system": "Adicionar um novo produto no sistema", + "Stock Adjustment": "Ajuste de estoque", + "Adjust stock of existing products.": "Ajustar o estoque de produtos existentes.", + "No stock is provided for the requested product.": "Nenhum estoque \u00e9 fornecido para o produto solicitado.", + "The product unit quantity has been deleted.": "A quantidade da unidade do produto foi exclu\u00edda.", + "Unable to proceed as the request is not valid.": "N\u00e3o foi poss\u00edvel prosseguir porque a solicita\u00e7\u00e3o n\u00e3o \u00e9 v\u00e1lida.", + "Unsupported action for the product %s.": "A\u00e7\u00e3o n\u00e3o suportada para o produto %s.", + "The stock has been adjustment successfully.": "O estoque foi ajustado com sucesso.", + "Unable to add the product to the cart as it has expired.": "N\u00e3o foi poss\u00edvel adicionar o produto ao carrinho, pois ele expirou.", + "Unable to add a product that has accurate tracking enabled, using an ordinary barcode.": "N\u00e3o \u00e9 poss\u00edvel adicionar um produto com rastreamento preciso ativado, usando um c\u00f3digo de barras comum.", + "There is no products matching the current request.": "N\u00e3o h\u00e1 produtos que correspondam \u00e0 solicita\u00e7\u00e3o atual.", + "Print Labels": "Imprimir etiquetas", + "Customize and print products labels.": "Personalize e imprima etiquetas de produtos.", + "Procurements by \"%s\"": "Compras por \"%s\"", + "Sales Report": "Relat\u00f3rio de vendas", + "Provides an overview over the sales during a specific period": "Fornece uma vis\u00e3o geral sobre as vendas durante um per\u00edodo espec\u00edfico", + "Provides an overview over the best products sold during a specific period.": "Fornece uma vis\u00e3o geral sobre os melhores produtos vendidos durante um per\u00edodo espec\u00edfico.", + "Sold Stock": "Estoque Vendido", + "Provides an overview over the sold stock during a specific period.": "Fornece uma vis\u00e3o geral sobre o estoque vendido durante um per\u00edodo espec\u00edfico.", + "Profit Report": "Relat\u00f3rio de lucro", + "Provides an overview of the provide of the products sold.": "Fornece uma vis\u00e3o geral do fornecimento dos produtos vendidos.", + "Provides an overview on the activity for a specific period.": "Fornece uma vis\u00e3o geral da atividade para um per\u00edodo espec\u00edfico.", + "Annual Report": "Relat\u00f3rio anual", + "Sales By Payment Types": "Vendas por tipos de pagamento", + "Provide a report of the sales by payment types, for a specific period.": "Forne\u00e7a um relat\u00f3rio das vendas por tipos de pagamento, para um per\u00edodo espec\u00edfico.", + "The report will be computed for the current year.": "O relat\u00f3rio ser\u00e1 computado para o ano corrente.", + "Unknown report to refresh.": "Relat\u00f3rio desconhecido para atualizar.", + "Invalid authorization code provided.": "C\u00f3digo de autoriza\u00e7\u00e3o inv\u00e1lido fornecido.", + "The database has been successfully seeded.": "O banco de dados foi propagado com sucesso.", + "Settings Page Not Found": "P\u00e1gina de configura\u00e7\u00f5es n\u00e3o encontrada", + "Customers Settings": "Configura\u00e7\u00f5es de clientes", + "Configure the customers settings of the application.": "Defina as configura\u00e7\u00f5es de clientes do aplicativo.", + "General Settings": "Configura\u00e7\u00f5es Gerais", + "Configure the general settings of the application.": "Defina as configura\u00e7\u00f5es gerais do aplicativo.", + "Orders Settings": "Configura\u00e7\u00f5es de pedidos", + "POS Settings": "Configura\u00e7\u00f5es de PDV", + "Configure the pos settings.": "Defina as configura\u00e7\u00f5es de pos.", + "Workers Settings": "Configura\u00e7\u00f5es de trabalhadores", + "%s is not an instance of \"%s\".": "%s n\u00e3o \u00e9 uma inst\u00e2ncia de \"%s\".", + "Unable to find the requested product tax using the provided id": "N\u00e3o foi poss\u00edvel encontrar o imposto do produto solicitado usando o ID fornecido", + "Unable to find the requested product tax using the provided identifier.": "N\u00e3o foi poss\u00edvel encontrar o imposto do produto solicitado usando o identificador fornecido.", + "The product tax has been created.": "O imposto sobre o produto foi criado.", + "The product tax has been updated": "O imposto do produto foi atualizado", + "Unable to retrieve the requested tax group using the provided identifier \"%s\".": "N\u00e3o foi poss\u00edvel recuperar o grupo de impostos solicitado usando o identificador fornecido \"%s\".", + "Permission Manager": "Gerenciador de permiss\u00f5es", + "Manage all permissions and roles": "Gerencie todas as permiss\u00f5es e fun\u00e7\u00f5es", + "My Profile": "Meu perfil", + "Change your personal settings": "Altere suas configura\u00e7\u00f5es pessoais", + "The permissions has been updated.": "As permiss\u00f5es foram atualizadas.", + "Sunday": "Domingo", + "Monday": "segunda-feira", + "Tuesday": "ter\u00e7a-feira", + "Wednesday": "quarta-feira", + "Thursday": "quinta-feira", + "Friday": "Sexta-feira", + "Saturday": "s\u00e1bado", + "The migration has successfully run.": "A migra\u00e7\u00e3o foi executada com sucesso.", + "Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.": "N\u00e3o foi poss\u00edvel inicializar a p\u00e1gina de configura\u00e7\u00f5es. O identificador \"%s\" n\u00e3o pode ser instanciado.", + "Unable to register. The registration is closed.": "N\u00e3o foi poss\u00edvel registrar. A inscri\u00e7\u00e3o est\u00e1 encerrada.", + "Hold Order Cleared": "Reter pedido cancelado", + "Report Refreshed": "Relat\u00f3rio atualizado", + "The yearly report has been successfully refreshed for the year \"%s\".": "O relat\u00f3rio anual foi atualizado com sucesso para o ano \"%s\".", + "[NexoPOS] Activate Your Account": "[NexoPOS] Ative sua conta", + "[NexoPOS] A New User Has Registered": "[NexoPOS] Um novo usu\u00e1rio se registrou", + "[NexoPOS] Your Account Has Been Created": "[NexoPOS] Sua conta foi criada", + "Unable to find the permission with the namespace \"%s\".": "N\u00e3o foi poss\u00edvel encontrar a permiss\u00e3o com o namespace \"%s\".", + "Take Away": "Remover", + "The register has been successfully opened": "O cadastro foi aberto com sucesso", + "The register has been successfully closed": "O cadastro foi fechado com sucesso", + "The provided amount is not allowed. The amount should be greater than \"0\". ": "O valor fornecido n\u00e3o \u00e9 permitido. O valor deve ser maior que \"0\".", + "The cash has successfully been stored": "O dinheiro foi armazenado com sucesso", + "Not enough fund to cash out.": "N\u00e3o h\u00e1 fundos suficientes para sacar.", + "The cash has successfully been disbursed.": "O dinheiro foi desembolsado com sucesso.", + "In Use": "Em uso", + "Opened": "Aberto", + "Delete Selected entries": "Excluir entradas selecionadas", + "%s entries has been deleted": "%s entradas foram deletadas", + "%s entries has not been deleted": "%s entradas n\u00e3o foram deletadas", + "Unable to find the customer using the provided id.": "N\u00e3o foi poss\u00edvel encontrar o cliente usando o ID fornecido.", + "The customer has been deleted.": "O cliente foi exclu\u00eddo.", + "The customer has been created.": "O cliente foi criado.", + "Unable to find the customer using the provided ID.": "N\u00e3o foi poss\u00edvel encontrar o cliente usando o ID fornecido.", + "The customer has been edited.": "O cliente foi editado.", + "Unable to find the customer using the provided email.": "N\u00e3o foi poss\u00edvel encontrar o cliente usando o e-mail fornecido.", + "The customer account has been updated.": "A conta do cliente foi atualizada.", + "Issuing Coupon Failed": "Falha na emiss\u00e3o do cupom", + "Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.": "N\u00e3o foi poss\u00edvel aplicar um cupom anexado \u00e0 recompensa \"%s\". Parece que o cupom n\u00e3o existe mais.", + "Unable to find a coupon with the provided code.": "N\u00e3o foi poss\u00edvel encontrar um cupom com o c\u00f3digo fornecido.", + "The coupon has been updated.": "O cupom foi atualizado.", + "The group has been created.": "O grupo foi criado.", + "Crediting": "Cr\u00e9dito", + "Deducting": "Dedu\u00e7\u00e3o", + "Order Payment": "Ordem de pagamento", + "Order Refund": "Reembolso do pedido", + "Unknown Operation": "Opera\u00e7\u00e3o desconhecida", + "Countable": "Cont\u00e1vel", + "Piece": "Pe\u00e7a", + "GST": "GST", + "SGST": "SGST", + "CGST": "CGST", + "Sample Procurement %s": "Amostra de Aquisi\u00e7\u00e3o %s", + "generated": "gerado", + "The media has been deleted": "A m\u00eddia foi exclu\u00edda", + "Unable to find the media.": "N\u00e3o foi poss\u00edvel encontrar a m\u00eddia.", + "Unable to find the requested file.": "N\u00e3o foi poss\u00edvel encontrar o arquivo solicitado.", + "Unable to find the media entry": "N\u00e3o foi poss\u00edvel encontrar a entrada de m\u00eddia", + "Payment Types": "Tipos de pagamento", + "Medias": "M\u00eddias", + "List": "Lista", + "Customers Groups": "Grupos de clientes", + "Create Group": "Criar grupo", + "Reward Systems": "Sistemas de recompensa", + "Create Reward": "Criar recompensa", + "List Coupons": "Listar cupons", + "Providers": "Provedores", + "Create A Provider": "Criar um provedor", + "Accounting": "Contabilidade", + "Inventory": "Invent\u00e1rio", + "Create Product": "Criar produto", + "Create Category": "Criar categoria", + "Create Unit": "Criar unidade", + "Unit Groups": "Grupos de unidades", + "Create Unit Groups": "Criar grupos de unidades", + "Taxes Groups": "Grupos de impostos", + "Create Tax Groups": "Criar grupos fiscais", + "Create Tax": "Criar imposto", + "Modules": "M\u00f3dulos", + "Upload Module": "M\u00f3dulo de upload", + "Users": "Comercial", + "Create User": "Criar usu\u00e1rio", + "Roles": "Fun\u00e7\u00f5es", + "Create Roles": "Criar fun\u00e7\u00f5es", + "Permissions Manager": "Gerenciador de permiss\u00f5es", + "Procurements": "Aquisi\u00e7\u00f5es", + "Reports": "Relat\u00f3rios", + "Sale Report": "Relat\u00f3rio de vendas", + "Incomes & Loosses": "Rendas e Perdas", + "Sales By Payments": "Vendas por pagamentos", + "Invoice Settings": "Configura\u00e7\u00f5es de fatura", + "Workers": "Trabalhadores", + "Unable to locate the requested module.": "N\u00e3o foi poss\u00edvel localizar o m\u00f3dulo solicitado.", + "The module \"%s\" has been disabled as the dependency \"%s\" is missing. ": "O m\u00f3dulo \"%s\" foi desabilitado porque a depend\u00eancia \"%s\" est\u00e1 ausente.", + "The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ": "O m\u00f3dulo \"%s\" foi desabilitado pois a depend\u00eancia \"%s\" n\u00e3o est\u00e1 habilitada.", + "The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ": "O m\u00f3dulo \"%s\" foi desabilitado pois a depend\u00eancia \"%s\" n\u00e3o est\u00e1 na vers\u00e3o m\u00ednima exigida \"%s\".", + "The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ": "O m\u00f3dulo \"%s\" foi desabilitado pois a depend\u00eancia \"%s\" est\u00e1 em uma vers\u00e3o al\u00e9m da recomendada \"%s\".", + "Unable to detect the folder from where to perform the installation.": "N\u00e3o foi poss\u00edvel detectar a pasta de onde realizar a instala\u00e7\u00e3o.", + "The uploaded file is not a valid module.": "O arquivo carregado n\u00e3o \u00e9 um m\u00f3dulo v\u00e1lido.", + "The module has been successfully installed.": "O m\u00f3dulo foi instalado com sucesso.", + "The migration run successfully.": "A migra\u00e7\u00e3o foi executada com sucesso.", + "The module has correctly been enabled.": "O m\u00f3dulo foi habilitado corretamente.", + "Unable to enable the module.": "N\u00e3o foi poss\u00edvel habilitar o m\u00f3dulo.", + "The Module has been disabled.": "O M\u00f3dulo foi desabilitado.", + "Unable to disable the module.": "N\u00e3o foi poss\u00edvel desativar o m\u00f3dulo.", + "Unable to proceed, the modules management is disabled.": "N\u00e3o \u00e9 poss\u00edvel continuar, o gerenciamento de m\u00f3dulos est\u00e1 desabilitado.", + "Missing required parameters to create a notification": "Par\u00e2metros necess\u00e1rios ausentes para criar uma notifica\u00e7\u00e3o", + "The order has been placed.": "O pedido foi feito.", + "The percentage discount provided is not valid.": "O desconto percentual fornecido n\u00e3o \u00e9 v\u00e1lido.", + "A discount cannot exceed the sub total value of an order.": "Um desconto n\u00e3o pode exceder o subvalor total de um pedido.", + "No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.": "Nenhum pagamento \u00e9 esperado no momento. Caso o cliente queira pagar antecipadamente, considere ajustar a data de pagamento das parcelas.", + "The payment has been saved.": "O pagamento foi salvo.", + "Unable to edit an order that is completely paid.": "N\u00e3o \u00e9 poss\u00edvel editar um pedido totalmente pago.", + "Unable to proceed as one of the previous submitted payment is missing from the order.": "N\u00e3o foi poss\u00edvel prosseguir porque um dos pagamentos enviados anteriormente est\u00e1 faltando no pedido.", + "The order payment status cannot switch to hold as a payment has already been made on that order.": "O status de pagamento do pedido n\u00e3o pode mudar para retido, pois um pagamento j\u00e1 foi feito nesse pedido.", + "Unable to proceed. One of the submitted payment type is not supported.": "N\u00e3o foi poss\u00edvel prosseguir. Um dos tipos de pagamento enviados n\u00e3o \u00e9 suportado.", + "Unnamed Product": "Produto sem nome", + "Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.": "N\u00e3o foi poss\u00edvel continuar, o produto \"%s\" possui uma unidade que n\u00e3o pode ser recuperada. Pode ter sido deletado.", + "Unable to find the customer using the provided ID. The order creation has failed.": "N\u00e3o foi poss\u00edvel encontrar o cliente usando o ID fornecido. A cria\u00e7\u00e3o do pedido falhou.", + "Unable to proceed a refund on an unpaid order.": "N\u00e3o foi poss\u00edvel efetuar o reembolso de um pedido n\u00e3o pago.", + "The current credit has been issued from a refund.": "O cr\u00e9dito atual foi emitido a partir de um reembolso.", + "The order has been successfully refunded.": "O pedido foi reembolsado com sucesso.", + "unable to proceed to a refund as the provided status is not supported.": "incapaz de proceder a um reembolso, pois o status fornecido n\u00e3o \u00e9 suportado.", + "The product %s has been successfully refunded.": "O produto %s foi reembolsado com sucesso.", + "Unable to find the order product using the provided id.": "N\u00e3o foi poss\u00edvel encontrar o produto do pedido usando o ID fornecido.", + "Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier": "N\u00e3o foi poss\u00edvel encontrar o pedido solicitado usando \"%s\" como piv\u00f4 e \"%s\" como identificador", + "Unable to fetch the order as the provided pivot argument is not supported.": "N\u00e3o \u00e9 poss\u00edvel buscar o pedido porque o argumento de piv\u00f4 fornecido n\u00e3o \u00e9 compat\u00edvel.", + "The product has been added to the order \"%s\"": "O produto foi adicionado ao pedido \"%s\"", + "the order has been successfully computed.": "a ordem foi computada com sucesso.", + "The order has been deleted.": "O pedido foi exclu\u00eddo.", + "The product has been successfully deleted from the order.": "O produto foi exclu\u00eddo com sucesso do pedido.", + "Unable to find the requested product on the provider order.": "N\u00e3o foi poss\u00edvel encontrar o produto solicitado no pedido do fornecedor.", + "Ongoing": "Em andamento", + "Ready": "Preparar", + "Not Available": "N\u00e3o dispon\u00edvel", + "Failed": "Fracassado", + "Unpaid Orders Turned Due": "Pedidos n\u00e3o pagos vencidos", + "No orders to handle for the moment.": "N\u00e3o h\u00e1 ordens para lidar no momento.", + "The order has been correctly voided.": "O pedido foi anulado corretamente.", + "Unable to edit an already paid instalment.": "N\u00e3o foi poss\u00edvel editar uma parcela j\u00e1 paga.", + "The instalment has been saved.": "A parcela foi salva.", + "The instalment has been deleted.": "A parcela foi exclu\u00edda.", + "The defined amount is not valid.": "O valor definido n\u00e3o \u00e9 v\u00e1lido.", + "No further instalments is allowed for this order. The total instalment already covers the order total.": "Nenhuma parcela adicional \u00e9 permitida para este pedido. A parcela total j\u00e1 cobre o total do pedido.", + "The instalment has been created.": "A parcela foi criada.", + "The provided status is not supported.": "O status fornecido n\u00e3o \u00e9 suportado.", + "The order has been successfully updated.": "O pedido foi atualizado com sucesso.", + "Unable to find the requested procurement using the provided identifier.": "N\u00e3o foi poss\u00edvel encontrar a aquisi\u00e7\u00e3o solicitada usando o identificador fornecido.", + "Unable to find the assigned provider.": "N\u00e3o foi poss\u00edvel encontrar o provedor atribu\u00eddo.", + "The procurement has been created.": "A aquisi\u00e7\u00e3o foi criada.", + "Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.": "N\u00e3o \u00e9 poss\u00edvel editar uma aquisi\u00e7\u00e3o que j\u00e1 foi estocada. Por favor, considere a realiza\u00e7\u00e3o e ajuste de estoque.", + "The provider has been edited.": "O provedor foi editado.", + "Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"": "N\u00e3o \u00e9 poss\u00edvel ter um ID de grupo de unidades para o produto usando a refer\u00eancia \"%s\" como \"%s\"", + "The operation has completed.": "A opera\u00e7\u00e3o foi conclu\u00edda.", + "The procurement has been refreshed.": "A aquisi\u00e7\u00e3o foi atualizada.", + "The procurement has been reset.": "A aquisi\u00e7\u00e3o foi redefinida.", + "The procurement products has been deleted.": "Os produtos de aquisi\u00e7\u00e3o foram exclu\u00eddos.", + "The procurement product has been updated.": "O produto de aquisi\u00e7\u00e3o foi atualizado.", + "Unable to find the procurement product using the provided id.": "N\u00e3o foi poss\u00edvel encontrar o produto de aquisi\u00e7\u00e3o usando o ID fornecido.", + "The product %s has been deleted from the procurement %s": "O produto %s foi exclu\u00eddo da aquisi\u00e7\u00e3o %s", + "The product with the following ID \"%s\" is not initially included on the procurement": "O produto com o seguinte ID \"%s\" n\u00e3o est\u00e1 inicialmente inclu\u00eddo na compra", + "The procurement products has been updated.": "Os produtos de aquisi\u00e7\u00e3o foram atualizados.", + "Procurement Automatically Stocked": "Compras Estocadas Automaticamente", + "Draft": "Rascunho", + "The category has been created": "A categoria foi criada", + "Unable to find the product using the provided id.": "N\u00e3o foi poss\u00edvel encontrar o produto usando o ID fornecido.", + "Unable to find the requested product using the provided SKU.": "N\u00e3o foi poss\u00edvel encontrar o produto solicitado usando o SKU fornecido.", + "The variable product has been created.": "A vari\u00e1vel produto foi criada.", + "The provided barcode \"%s\" is already in use.": "O c\u00f3digo de barras fornecido \"%s\" j\u00e1 est\u00e1 em uso.", + "The provided SKU \"%s\" is already in use.": "O SKU fornecido \"%s\" j\u00e1 est\u00e1 em uso.", + "The product has been saved.": "O produto foi salvo.", + "The provided barcode is already in use.": "O c\u00f3digo de barras fornecido j\u00e1 est\u00e1 em uso.", + "The provided SKU is already in use.": "O SKU fornecido j\u00e1 est\u00e1 em uso.", + "The product has been updated": "O produto foi atualizado", + "The variable product has been updated.": "A vari\u00e1vel produto foi atualizada.", + "The product variations has been reset": "As varia\u00e7\u00f5es do produto foram redefinidas", + "The product has been reset.": "O produto foi redefinido.", + "The product \"%s\" has been successfully deleted": "O produto \"%s\" foi exclu\u00eddo com sucesso", + "Unable to find the requested variation using the provided ID.": "N\u00e3o foi poss\u00edvel encontrar a varia\u00e7\u00e3o solicitada usando o ID fornecido.", + "The product stock has been updated.": "O estoque de produtos foi atualizado.", + "The action is not an allowed operation.": "A a\u00e7\u00e3o n\u00e3o \u00e9 uma opera\u00e7\u00e3o permitida.", + "The product quantity has been updated.": "A quantidade do produto foi atualizada.", + "There is no variations to delete.": "N\u00e3o h\u00e1 varia\u00e7\u00f5es para excluir.", + "There is no products to delete.": "N\u00e3o h\u00e1 produtos para excluir.", + "The product variation has been successfully created.": "A varia\u00e7\u00e3o do produto foi criada com sucesso.", + "The product variation has been updated.": "A varia\u00e7\u00e3o do produto foi atualizada.", + "The provider has been created.": "O provedor foi criado.", + "The provider has been updated.": "O provedor foi atualizado.", + "Unable to find the provider using the specified id.": "N\u00e3o foi poss\u00edvel encontrar o provedor usando o ID especificado.", + "The provider has been deleted.": "O provedor foi exclu\u00eddo.", + "Unable to find the provider using the specified identifier.": "N\u00e3o foi poss\u00edvel encontrar o provedor usando o identificador especificado.", + "The provider account has been updated.": "A conta do provedor foi atualizada.", + "The procurement payment has been deducted.": "O pagamento da aquisi\u00e7\u00e3o foi deduzido.", + "The dashboard report has been updated.": "O relat\u00f3rio do painel foi atualizado.", + "Untracked Stock Operation": "Opera\u00e7\u00e3o de estoque n\u00e3o rastreada", + "Unsupported action": "A\u00e7\u00e3o sem suporte", + "The expense has been correctly saved.": "A despesa foi salva corretamente.", + "The report has been computed successfully.": "O relat\u00f3rio foi calculado com sucesso.", + "The table has been truncated.": "A tabela foi truncada.", + "Untitled Settings Page": "P\u00e1gina de configura\u00e7\u00f5es sem t\u00edtulo", + "No description provided for this settings page.": "Nenhuma descri\u00e7\u00e3o fornecida para esta p\u00e1gina de configura\u00e7\u00f5es.", + "The form has been successfully saved.": "O formul\u00e1rio foi salvo com sucesso.", + "Unable to reach the host": "N\u00e3o foi poss\u00edvel alcan\u00e7ar o host", + "Unable to connect to the database using the credentials provided.": "N\u00e3o \u00e9 poss\u00edvel conectar-se ao banco de dados usando as credenciais fornecidas.", + "Unable to select the database.": "N\u00e3o foi poss\u00edvel selecionar o banco de dados.", + "Access denied for this user.": "Acesso negado para este usu\u00e1rio.", + "The connexion with the database was successful": "A conex\u00e3o com o banco de dados foi bem sucedida", + "Cash": "Dinheiro", + "Bank Payment": "Pagamento banc\u00e1rio", + "NexoPOS has been successfully installed.": "NexoPOS foi instalado com sucesso.", + "A tax cannot be his own parent.": "Um imposto n\u00e3o pode ser seu pr\u00f3prio pai.", + "The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".": "A hierarquia de impostos \u00e9 limitada a 1. Um subimposto n\u00e3o deve ter o tipo de imposto definido como \"agrupado\".", + "Unable to find the requested tax using the provided identifier.": "N\u00e3o foi poss\u00edvel encontrar o imposto solicitado usando o identificador fornecido.", + "The tax group has been correctly saved.": "O grupo de impostos foi salvo corretamente.", + "The tax has been correctly created.": "O imposto foi criado corretamente.", + "The tax has been successfully deleted.": "O imposto foi exclu\u00eddo com sucesso.", + "The Unit Group has been created.": "O Grupo de Unidades foi criado.", + "The unit group %s has been updated.": "O grupo de unidades %s foi atualizado.", + "Unable to find the unit group to which this unit is attached.": "N\u00e3o foi poss\u00edvel encontrar o grupo de unidades ao qual esta unidade est\u00e1 conectada.", + "The unit has been saved.": "A unidade foi salva.", + "Unable to find the Unit using the provided id.": "N\u00e3o foi poss\u00edvel encontrar a Unidade usando o ID fornecido.", + "The unit has been updated.": "A unidade foi atualizada.", + "The unit group %s has more than one base unit": "O grupo de unidades %s tem mais de uma unidade base", + "The unit has been deleted.": "A unidade foi exclu\u00edda.", + "unable to find this validation class %s.": "n\u00e3o foi poss\u00edvel encontrar esta classe de valida\u00e7\u00e3o %s.", + "Procurement Cash Flow Account": "Conta de fluxo de caixa de aquisi\u00e7\u00e3o", + "Sale Cash Flow Account": "Conta de fluxo de caixa de venda", + "Sales Refunds Account": "Conta de reembolso de vendas", + "Stock return for spoiled items will be attached to this account": "O retorno de estoque para itens estragados ser\u00e1 anexado a esta conta", + "Enable Reward": "Ativar recompensa", + "Will activate the reward system for the customers.": "Ativar\u00e1 o sistema de recompensa para os clientes.", + "Default Customer Account": "Conta de cliente padr\u00e3o", + "Default Customer Group": "Grupo de clientes padr\u00e3o", + "Select to which group each new created customers are assigned to.": "Selecione a qual grupo cada novo cliente criado \u00e9 atribu\u00eddo.", + "Enable Credit & Account": "Ativar cr\u00e9dito e conta", + "The customers will be able to make deposit or obtain credit.": "Os clientes poder\u00e3o fazer dep\u00f3sito ou obter cr\u00e9dito.", + "Store Name": "Nome da loja", + "This is the store name.": "Este \u00e9 o nome da loja.", + "Store Address": "Endere\u00e7o da loja", + "The actual store address.": "O endere\u00e7o real da loja.", + "Store City": "Cidade da loja", + "The actual store city.": "A cidade da loja real.", + "Store Phone": "Telefone da loja", + "The phone number to reach the store.": "O n\u00famero de telefone para entrar em contato com a loja.", + "Store Email": "E-mail da loja", + "The actual store email. Might be used on invoice or for reports.": "O e-mail real da loja. Pode ser usado na fatura ou para relat\u00f3rios.", + "Store PO.Box": "Armazenar caixa postal", + "The store mail box number.": "O n\u00famero da caixa de correio da loja.", + "Store Fax": "Armazenar fax", + "The store fax number.": "O n\u00famero de fax da loja.", + "Store Additional Information": "Armazenar informa\u00e7\u00f5es adicionais", + "Store additional information.": "Armazenar informa\u00e7\u00f5es adicionais.", + "Store Square Logo": "Log\u00f3tipo da Pra\u00e7a da Loja", + "Choose what is the square logo of the store.": "Escolha qual \u00e9 o logotipo quadrado da loja.", + "Store Rectangle Logo": "Armazenar logotipo retangular", + "Choose what is the rectangle logo of the store.": "Escolha qual \u00e9 o logotipo retangular da loja.", + "Define the default fallback language.": "Defina o idioma de fallback padr\u00e3o.", + "Currency": "Moeda", + "Currency Symbol": "S\u00edmbolo de moeda", + "This is the currency symbol.": "Este \u00e9 o s\u00edmbolo da moeda.", + "Currency ISO": "ISO da moeda", + "The international currency ISO format.": "O formato ISO da moeda internacional.", + "Currency Position": "Posi\u00e7\u00e3o da moeda", + "Before the amount": "Antes do montante", + "After the amount": "Ap\u00f3s a quantidade", + "Define where the currency should be located.": "Defina onde a moeda deve estar localizada.", + "Preferred Currency": "Moeda preferida", + "ISO Currency": "Moeda ISO", + "Symbol": "S\u00edmbolo", + "Determine what is the currency indicator that should be used.": "Determine qual \u00e9 o indicador de moeda que deve ser usado.", + "Currency Thousand Separator": "Separador de milhar de moeda", + "Currency Decimal Separator": "Separador Decimal de Moeda", + "Define the symbol that indicate decimal number. By default \".\" is used.": "Defina o s\u00edmbolo que indica o n\u00famero decimal. Por padr\u00e3o, \".\" \u00e9 usado.", + "Currency Precision": "Precis\u00e3o da moeda", + "%s numbers after the decimal": "%s n\u00fameros ap\u00f3s o decimal", + "Date Format": "Formato de data", + "This define how the date should be defined. The default format is \"Y-m-d\".": "Isso define como a data deve ser definida. O formato padr\u00e3o \u00e9 \"Y-m-d\".", + "Registration": "Cadastro", + "Registration Open": "Inscri\u00e7\u00f5es abertas", + "Determine if everyone can register.": "Determine se todos podem se registrar.", + "Registration Role": "Fun\u00e7\u00e3o de registro", + "Select what is the registration role.": "Selecione qual \u00e9 a fun\u00e7\u00e3o de registro.", + "Requires Validation": "Requer valida\u00e7\u00e3o", + "Force account validation after the registration.": "For\u00e7a a valida\u00e7\u00e3o da conta ap\u00f3s o registro.", + "Allow Recovery": "Permitir recupera\u00e7\u00e3o", + "Allow any user to recover his account.": "Permitir que qualquer usu\u00e1rio recupere sua conta.", + "Receipts": "Recibos", + "Receipt Template": "Modelo de recibo", + "Default": "Padr\u00e3o", + "Choose the template that applies to receipts": "Escolha o modelo que se aplica aos recibos", + "Receipt Logo": "Logotipo do recibo", + "Provide a URL to the logo.": "Forne\u00e7a um URL para o logotipo.", + "Merge Products On Receipt\/Invoice": "Mesclar produtos no recibo\/fatura", + "All similar products will be merged to avoid a paper waste for the receipt\/invoice.": "Todos os produtos similares ser\u00e3o mesclados para evitar desperd\u00edcio de papel no recibo\/fatura.", + "Receipt Footer": "Rodap\u00e9 de recibo", + "If you would like to add some disclosure at the bottom of the receipt.": "Se voc\u00ea gostaria de adicionar alguma divulga\u00e7\u00e3o na parte inferior do recibo.", + "Column A": "Coluna A", + "Column B": "Coluna B", + "Order Code Type": "Tipo de c\u00f3digo de pedido", + "Determine how the system will generate code for each orders.": "Determine como o sistema ir\u00e1 gerar c\u00f3digo para cada pedido.", + "Sequential": "Sequencial", + "Random Code": "C\u00f3digo aleat\u00f3rio", + "Number Sequential": "N\u00famero Sequencial", + "Allow Unpaid Orders": "Permitir pedidos n\u00e3o pagos", + "Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".": "Ir\u00e1 evitar que pedidos incompletos sejam feitos. Se o cr\u00e9dito for permitido, esta op\u00e7\u00e3o deve ser definida como \"sim\".", + "Allow Partial Orders": "Permitir pedidos parciais", + "Will prevent partially paid orders to be placed.": "Impedir\u00e1 que sejam feitos pedidos parcialmente pagos.", + "Quotation Expiration": "Vencimento da cota\u00e7\u00e3o", + "Quotations will get deleted after they defined they has reached.": "As cota\u00e7\u00f5es ser\u00e3o exclu\u00eddas depois que definirem que foram alcan\u00e7adas.", + "%s Days": "%s dias", + "Features": "Recursos", + "Show Quantity": "Mostrar quantidade", + "Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.": "Mostrar\u00e1 o seletor de quantidade ao escolher um produto. Caso contr\u00e1rio, a quantidade padr\u00e3o \u00e9 definida como 1.", + "Allow Customer Creation": "Permitir a cria\u00e7\u00e3o do cliente", + "Allow customers to be created on the POS.": "Permitir que clientes sejam criados no PDV.", + "Quick Product": "Produto r\u00e1pido", + "Allow quick product to be created from the POS.": "Permitir que o produto r\u00e1pido seja criado a partir do PDV.", + "Editable Unit Price": "Pre\u00e7o unit\u00e1rio edit\u00e1vel", + "Allow product unit price to be edited.": "Permitir que o pre\u00e7o unit\u00e1rio do produto seja editado.", + "Order Types": "Tipos de pedido", + "Control the order type enabled.": "Controle o tipo de pedido habilitado.", + "Bubble": "Bolha", + "Ding": "Ding", + "Pop": "Pop", + "Cash Sound": "Som do dinheiro", + "Layout": "Esquema", + "Retail Layout": "Layout de varejo", + "Clothing Shop": "Loja de roupas", + "POS Layout": "Layout de PDV", + "Change the layout of the POS.": "Altere o layout do PDV.", + "Sale Complete Sound": "Venda Som Completo", + "New Item Audio": "Novo item de \u00e1udio", + "The sound that plays when an item is added to the cart.": "O som que toca quando um item \u00e9 adicionado ao carrinho.", + "Printing": "Impress\u00e3o", + "Printed Document": "Documento Impresso", + "Choose the document used for printing aster a sale.": "Escolha o documento usado para imprimir ap\u00f3s uma venda.", + "Printing Enabled For": "Impress\u00e3o habilitada para", + "All Orders": "Todos os pedidos", + "From Partially Paid Orders": "De pedidos parcialmente pagos", + "Only Paid Orders": "Apenas pedidos pagos", + "Determine when the printing should be enabled.": "Determine quando a impress\u00e3o deve ser ativada.", + "Printing Gateway": "Gateway de impress\u00e3o", + "Determine what is the gateway used for printing.": "Determine qual \u00e9 o gateway usado para impress\u00e3o.", + "Enable Cash Registers": "Ativar caixas registradoras", + "Determine if the POS will support cash registers.": "Determine se o POS suportar\u00e1 caixas registradoras.", + "Cashier Idle Counter": "Contador ocioso do caixa", + "5 Minutes": "5 minutos", + "10 Minutes": "10 minutos", + "15 Minutes": "15 minutos", + "20 Minutes": "20 minutos", + "30 Minutes": "30 minutos", + "Selected after how many minutes the system will set the cashier as idle.": "Selecionado ap\u00f3s quantos minutos o sistema definir\u00e1 o caixa como ocioso.", + "Cash Disbursement": "Desembolso de caixa", + "Allow cash disbursement by the cashier.": "Permitir o desembolso de dinheiro pelo caixa.", + "Cash Registers": "Caixa registradora", + "Keyboard Shortcuts": "Atalhos do teclado", + "Cancel Order": "Cancelar pedido", + "Keyboard shortcut to cancel the current order.": "Atalho de teclado para cancelar o pedido atual.", + "Keyboard shortcut to hold the current order.": "Atalho de teclado para manter a ordem atual.", + "Keyboard shortcut to create a customer.": "Atalho de teclado para criar um cliente.", + "Proceed Payment": "Continuar pagamento", + "Keyboard shortcut to proceed to the payment.": "Atalho de teclado para proceder ao pagamento.", + "Open Shipping": "Envio aberto", + "Keyboard shortcut to define shipping details.": "Atalho de teclado para definir detalhes de envio.", + "Open Note": "Abrir nota", + "Keyboard shortcut to open the notes.": "Atalho de teclado para abrir as notas.", + "Order Type Selector": "Seletor de tipo de pedido", + "Keyboard shortcut to open the order type selector.": "Atalho de teclado para abrir o seletor de tipo de pedido.", + "Toggle Fullscreen": "Alternar para o modo tela cheia", + "Keyboard shortcut to toggle fullscreen.": "Atalho de teclado para alternar para tela cheia.", + "Quick Search": "Pesquisa r\u00e1pida", + "Keyboard shortcut open the quick search popup.": "Atalho de teclado abre o pop-up de pesquisa r\u00e1pida.", + "Amount Shortcuts": "Atalhos de Quantidade", + "VAT Type": "Tipo de IVA", + "Determine the VAT type that should be used.": "Determine o tipo de IVA que deve ser usado.", + "Flat Rate": "Taxa fixa", + "Flexible Rate": "Taxa flex\u00edvel", + "Products Vat": "IVA de produtos", + "Products & Flat Rate": "Produtos e taxa fixa", + "Products & Flexible Rate": "Produtos e taxa flex\u00edvel", + "Define the tax group that applies to the sales.": "Defina o grupo de impostos que se aplica \u00e0s vendas.", + "Define how the tax is computed on sales.": "Defina como o imposto \u00e9 calculado sobre as vendas.", + "VAT Settings": "Configura\u00e7\u00f5es de IVA", + "Enable Email Reporting": "Ativar relat\u00f3rios de e-mail", + "Determine if the reporting should be enabled globally.": "Determine se o relat\u00f3rio deve ser habilitado globalmente.", + "Supplies": "Suprimentos", + "Public Name": "Nome p\u00fablico", + "Define what is the user public name. If not provided, the username is used instead.": "Defina qual \u00e9 o nome p\u00fablico do usu\u00e1rio. Se n\u00e3o for fornecido, o nome de usu\u00e1rio ser\u00e1 usado.", + "Enable Workers": "Ativar trabalhadores", + "Test": "Teste", + "Choose an option": "Escolha uma op\u00e7\u00e3o", + "All Refunds": "Todos os reembolsos", + "Payment Method": "Forma de pagamento", + "Before submitting the payment, choose the payment type used for that order.": "Antes de enviar o pagamento, escolha o tipo de pagamento usado para esse pedido.", + "Select the payment type that must apply to the current order.": "Selecione o tipo de pagamento que deve ser aplicado ao pedido atual.", + "Payment Type": "Tipo de pagamento", + "Update Instalment Date": "Atualizar data de parcelamento", + "Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.": "Voc\u00ea gostaria de marcar essa parcela como vencida hoje? Se voc\u00eau confirm the instalment will be marked as paid.", + "Unknown": "Desconhecido", + "Search for products.": "Pesquise produtos.", + "Toggle merging similar products.": "Alterne a mesclagem de produtos semelhantes.", + "Toggle auto focus.": "Alterne o foco autom\u00e1tico.", + "Remove Image": "Remover imagem", + "No result match your query.": "Nenhum resultado corresponde \u00e0 sua consulta.", + "Report Type": "Tipo de relat\u00f3rio", + "Categories Detailed": "Categorias detalhadas", + "Categories Summary": "Resumo das categorias", + "Allow you to choose the report type.": "Permite que voc\u00ea escolha o tipo de relat\u00f3rio.", + "Filter User": "Filtrar usu\u00e1rio", + "All Users": "Todos os usu\u00e1rios", + "No user was found for proceeding the filtering.": "Nenhum usu\u00e1rio foi encontrado para prosseguir com a filtragem.", + "This form is not completely loaded.": "Este formul\u00e1rio n\u00e3o est\u00e1 completamente carregado.", + "Updating": "Atualizando", + "Updating Modules": "Atualizando M\u00f3dulos", + "available": "acess\u00edvel", + "No coupons applies to the cart.": "Nenhum cupom se aplica ao carrinho.", + "Selected": "Selecionado", + "Not Authorized": "N\u00e3o autorizado", + "Creating customers has been explicitly disabled from the settings.": "A cria\u00e7\u00e3o de clientes foi explicitamente desativada nas configura\u00e7\u00f5es.", + "Credit Limit": "Limite de cr\u00e9dito", + "An error occurred while opening the order options": "Ocorreu um erro ao abrir as op\u00e7\u00f5es de pedido", + "There is no instalment defined. Please set how many instalments are allowed for this order": "N\u00e3o h\u00e1 parcela definida. Por favor, defina quantas parcelas s\u00e3o permitidasd for this order", + "No payment type has been selected on the settings. Please check your POS features and choose the supported order type": "Nenhum tipo de pagamento foi selecionado nas configura\u00e7\u00f5es. Please check your POS features and choose the supported order type", + "Read More": "consulte Mais informa\u00e7\u00e3o", + "Select Payment Gateway": "Selecione o gateway de pagamento", + "Gateway": "Porta de entrada", + "No tax is active": "Nenhum imposto est\u00e1 ativo", + "Unable to delete a payment attached to the order.": "N\u00e3o foi poss\u00edvel excluir um pagamento anexado ao pedido.", + "The request was canceled": "O pedido foi cancelado", + "The discount has been set to the cart subtotal.": "O desconto foi definido para o subtotal do carrinho.", + "Order Deletion": "Exclus\u00e3o de pedido", + "The current order will be deleted as no payment has been made so far.": "O pedido atual ser\u00e1 exclu\u00eddo, pois nenhum pagamento foi feito at\u00e9 o momento.", + "Void The Order": "Anular o pedido", + "Unable to void an unpaid order.": "N\u00e3o \u00e9 poss\u00edvel anular um pedido n\u00e3o pago.", + "Environment Details": "Detalhes do ambiente", + "Properties": "Propriedades", + "Extensions": "Extens\u00f5es", + "Configurations": "Configura\u00e7\u00f5es", + "Learn More": "Saber mais", + "Payment Receipt — %s": "Recibo de pagamento — %s", + "Payment receipt": "Recibo de pagamento", + "Current Payment": "Pagamento atual", + "Total Paid": "Total pago", + "Search Products...": "Procurar produtos...", + "No results to show.": "Nenhum resultado para mostrar.", + "Start by choosing a range and loading the report.": "Comece escolhendo um intervalo e carregando o relat\u00f3rio.", + "There is no product to display...": "N\u00e3o h\u00e1 nenhum produto para exibir...", + "Sales Discounts": "Descontos de vendas", + "Sales Taxes": "Impostos sobre vendas", + "Wipe All": "Limpar tudo", + "Wipe Plus Grocery": "Limpa mais mercearia", + "Set what should be the limit of the purchase on credit.": "Defina qual deve ser o limite da compra a cr\u00e9dito.", + "Birth Date": "Data de nascimento", + "Displays the customer birth date": "Exibe a data de nascimento do cliente", + "Provide the customer email.": "Informe o e-mail do cliente.", + "Accounts List": "Lista de contas", + "Display All Accounts.": "Exibir todas as contas.", + "No Account has been registered": "Nenhuma conta foi registrada", + "Add a new Account": "Adicionar uma nova conta", + "Create a new Account": "Criar uma nova conta", + "Register a new Account and save it.": "Registre uma nova conta e salve-a.", + "Edit Account": "Editar conta", + "Modify An Account.": "Modificar uma conta.", + "Return to Accounts": "Voltar para contas", + "Due With Payment": "Vencimento com pagamento", + "Customer Phone": "Telefone do cliente", + "Restrict orders using the customer phone number.": "Restrinja os pedidos usando o n\u00famero de telefone do cliente.", + "Priority": "Prioridade", + "Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".": "Defina a ordem de pagamento. \u00bae lower the number is, the first it will display on the payment popup. Must start from \"0\".", + "Invoice Date": "Data da fatura", + "Sale Value": "Valor de venda", + "Purchase Value": "Valor de compra", + "Would you like to refresh this ?": "Voc\u00ea gostaria de atualizar isso?", + "Low Quantity": "Quantidade Baixa", + "Which quantity should be assumed low.": "Qual quantidade deve ser considerada baixa.", + "Stock Alert": "Alerta de estoque", + "Define whether the stock alert should be enabled for this unit.": "Defina se o alerta de estoque deve ser ativado para esta unidade.", + "See Products": "Ver produtos", + "Provider Products List": "Lista de produtos do provedor", + "Display all Provider Products.": "Exibir todos os produtos do provedor.", + "No Provider Products has been registered": "Nenhum produto do provedor foi registrado", + "Add a new Provider Product": "Adicionar um novo produto do provedor", + "Create a new Provider Product": "Criar um novo produto do provedor", + "Register a new Provider Product and save it.": "Registre um novo Produto do Provedor e salve-o.", + "Edit Provider Product": "Editar produto do provedor", + "Modify Provider Product.": "Modificar o produto do provedor.", + "Return to Provider Products": "Devolu\u00e7\u00e3o para produtos do fornecedor", + "Initial Balance": "Balan\u00e7o inicial", + "New Balance": "Novo balan\u00e7o", + "Transaction Type": "Tipo de transa\u00e7\u00e3o", + "Unchanged": "Inalterado", + "Clone": "Clone", + "Would you like to clone this role ?": "Voc\u00ea gostaria de clonar este papel?", + "Define what roles applies to the user": "Defina quais fun\u00e7\u00f5es se aplicam ao usu\u00e1rio", + "You cannot delete your own account.": "Voc\u00ea n\u00e3o pode excluir sua pr\u00f3pria conta.", + "Not Assigned": "N\u00e3o atribu\u00eddo", + "This value is already in use on the database.": "Este valor j\u00e1 est\u00e1 em uso no banco de dados.", + "This field should be checked.": "Este campo deve ser verificado.", + "This field must be a valid URL.": "Este campo deve ser um URL v\u00e1lido.", + "This field is not a valid email.": "Este campo n\u00e3o \u00e9 um e-mail v\u00e1lido.", + "Mode": "Modo", + "Choose what mode applies to this demo.": "Escolha qual modo se aplica a esta demonstra\u00e7\u00e3o.", + "Set if the sales should be created.": "Defina se as vendas devem ser criadas.", + "Create Procurements": "Criar aquisi\u00e7\u00f5es", + "Will create procurements.": "Criar\u00e1 aquisi\u00e7\u00f5es.", + "If you would like to define a custom invoice date.": "Se voc\u00ea quiser definir uma data de fatura personalizada.", + "Theme": "Tema", + "Dark": "Escuro", + "Light": "Luz", + "Define what is the theme that applies to the dashboard.": "Defina qual \u00e9 o tema que se aplica ao painel.", + "Unable to delete this resource as it has %s dependency with %s item.": "N\u00e3o foi poss\u00edvel excluir este recurso, pois ele tem %s depend\u00eancia com o item %s.", + "Unable to delete this resource as it has %s dependency with %s items.": "N\u00e3o \u00e9 poss\u00edvel excluir este recurso porque ele tem %s depend\u00eancia com %s itens.", + "Make a new procurement.": "Fa\u00e7a uma nova aquisi\u00e7\u00e3o.", + "Sales Progress": "Progresso de vendas", + "Low Stock Report": "Relat\u00f3rio de estoque baixo", + "About": "Sobre", + "Details about the environment.": "Detalhes sobre o ambiente.", + "Core Version": "Vers\u00e3o principal", + "PHP Version": "Vers\u00e3o do PHP", + "Mb String Enabled": "String Mb Ativada", + "Zip Enabled": "Zip ativado", + "Curl Enabled": "Curl Ativado", + "Math Enabled": "Matem\u00e1tica ativada", + "XML Enabled": "XML ativado", + "XDebug Enabled": "XDebug habilitado", + "File Upload Enabled": "Upload de arquivo ativado", + "File Upload Size": "Tamanho do upload do arquivo", + "Post Max Size": "Tamanho m\u00e1ximo da postagem", + "Max Execution Time": "Tempo m\u00e1ximo de execu\u00e7\u00e3o", + "Memory Limit": "Limite de mem\u00f3ria", + "Low Stock Alert": "Alerta de estoque baixo", + "Procurement Refreshed": "Aquisi\u00e7\u00e3o atualizada", + "The procurement \"%s\" has been successfully refreshed.": "A aquisi\u00e7\u00e3o \"%s\" foi atualizada com sucesso.", + "Partially Due": "Parcialmente devido", + "Sales Account": "Conta de vendas", + "Procurements Account": "Conta de compras", + "Sale Refunds Account": "Conta de reembolso de vendas", + "Spoiled Goods Account": "Conta de mercadorias estragadas", + "Customer Crediting Account": "Conta de cr\u00e9dito do cliente", + "Customer Debiting Account": "Conta de d\u00e9bito do cliente", + "Administrator": "Administrador", + "Store Administrator": "Administrador da loja", + "Store Cashier": "Caixa da loja", + "User": "Do utilizador", + "Unable to find the requested account type using the provided id.": "N\u00e3o foi poss\u00edvel encontrar o tipo de conta solicitado usando o ID fornecido.", + "You cannot delete an account type that has transaction bound.": "Voc\u00ea n\u00e3o pode excluir um tipo de conta que tenha uma transa\u00e7\u00e3o vinculada.", + "The account type has been deleted.": "O tipo de conta foi exclu\u00eddo.", + "The account has been created.": "A conta foi criada.", + "Customer Credit Account": "Conta de cr\u00e9dito do cliente", + "Customer Debit Account": "Conta de d\u00e9bito do cliente", + "Register Cash-In Account": "Registrar conta de saque", + "Register Cash-Out Account": "Registrar conta de saque", + "Accounts": "Contas", + "Create Account": "Criar uma conta", + "Incorrect Authentication Plugin Provided.": "Plugin de autentica\u00e7\u00e3o incorreto fornecido.", + "Clone of \"%s\"": "Clone de \"%s\"", + "The role has been cloned.": "O papel foi clonado.", + "Require Valid Email": "Exigir e-mail v\u00e1lido", + "Will for valid unique email for every customer.": "Ser\u00e1 v\u00e1lido um e-mail exclusivo para cada cliente.", + "Require Unique Phone": "Exigir telefone exclusivo", + "Every customer should have a unique phone number.": "Cada cliente deve ter um n\u00famero de telefone exclusivo.", + "Define the default theme.": "Defina o tema padr\u00e3o.", + "Merge Similar Items": "Mesclar itens semelhantes", + "Will enforce similar products to be merged from the POS.": "Ir\u00e1 impor a mesclagem de produtos semelhantes a partir do PDV.", + "Toggle Product Merge": "Alternar mesclagem de produtos", + "Will enable or disable the product merging.": "Habilitar\u00e1 ou desabilitar\u00e1 a mesclagem de produtos.", + "Your system is running in production mode. You probably need to build the assets": "Seu sistema est\u00e1 sendo executado em modo de produ\u00e7\u00e3o. Voc\u00ea provavelmente precisa construir os ativos", + "Your system is in development mode. Make sure to build the assets.": "Seu sistema est\u00e1 em modo de desenvolvimento. Certifique-se de construir os ativos.", + "Unassigned": "N\u00e3o atribu\u00eddo", + "Display all product stock flow.": "Exibir todo o fluxo de estoque do produto.", + "No products stock flow has been registered": "Nenhum fluxo de estoque de produtos foi registrado", + "Add a new products stock flow": "Adicionar um novo fluxo de estoque de produtos", + "Create a new products stock flow": "Criar um novo fluxo de estoque de produtos", + "Register a new products stock flow and save it.": "Cadastre um novo fluxo de estoque de produtos e salve-o.", + "Edit products stock flow": "Editar fluxo de estoque de produtos", + "Modify Globalproducthistorycrud.": "Modifique Globalproducthistorycrud.", + "Initial Quantity": "Quantidade inicial", + "New Quantity": "Nova quantidade", + "No Dashboard": "Sem painel", + "Not Found Assets": "Recursos n\u00e3o encontrados", + "Stock Flow Records": "Registros de fluxo de estoque", + "The user attributes has been updated.": "Os atributos do usu\u00e1rio foram atualizados.", + "Laravel Version": "Vers\u00e3o Laravel", + "There is a missing dependency issue.": "H\u00e1 um problema de depend\u00eancia ausente.", + "The Action You Tried To Perform Is Not Allowed.": "A a\u00e7\u00e3o que voc\u00ea tentou executar n\u00e3o \u00e9 permitida.", + "Unable to locate the assets.": "N\u00e3o foi poss\u00edvel localizar os ativos.", + "All the customers has been transferred to the new group %s.": "Todos os clientes foram transferidos para o novo grupo %s.", + "The request method is not allowed.": "O m\u00e9todo de solicita\u00e7\u00e3o n\u00e3o \u00e9 permitido.", + "A Database Exception Occurred.": "Ocorreu uma exce\u00e7\u00e3o de banco de dados.", + "An error occurred while validating the form.": "Ocorreu um erro ao validar o formul\u00e1rio.", + "Enter": "Digitar", + "Search...": "Procurar...", + "Unable to hold an order which payment status has been updated already.": "N\u00e3o foi poss\u00edvel reter um pedido cujo status de pagamento j\u00e1 foi atualizado.", + "Unable to change the price mode. This feature has been disabled.": "N\u00e3o foi poss\u00edvel alterar o modo de pre\u00e7o. Este recurso foi desativado.", + "Enable WholeSale Price": "Ativar pre\u00e7o de atacado", + "Would you like to switch to wholesale price ?": "Gostaria de mudar para o pre\u00e7o de atacado?", + "Enable Normal Price": "Ativar pre\u00e7o normal", + "Would you like to switch to normal price ?": "Deseja mudar para o pre\u00e7o normal?", + "Search products...": "Procurar produtos...", + "Set Sale Price": "Definir pre\u00e7o de venda", + "Remove": "Remover", + "No product are added to this group.": "Nenhum produto foi adicionado a este grupo.", + "Delete Sub item": "Excluir subitem", + "Would you like to delete this sub item?": "Deseja excluir este subitem?", + "Unable to add a grouped product.": "N\u00e3o foi poss\u00edvel adicionar um produto agrupado.", + "Choose The Unit": "Escolha a unidade", + "Stock Report": "Relat\u00f3rio de Estoque", + "Wallet Amount": "Valor da carteira", + "Wallet History": "Hist\u00f3rico da carteira", + "Transaction": "Transa\u00e7\u00e3o", + "No History...": "Sem hist\u00f3rico...", + "Removing": "Removendo", + "Refunding": "Reembolso", + "Unknow": "Desconhecido", + "Skip Instalments": "Pular Parcelas", + "Define the product type.": "Defina o tipo de produto.", + "Dynamic": "Din\u00e2mico", + "In case the product is computed based on a percentage, define the rate here.": "Caso o produto seja calculado com base em porcentagem, defina a taxa aqui.", + "Before saving this order, a minimum payment of {amount} is required": "Antes de salvar este pedido, \u00e9 necess\u00e1rio um pagamento m\u00ednimo de {amount}", + "Initial Payment": "Pagamento inicial", + "In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?": "Para prosseguir, \u00e9 necess\u00e1rio um pagamento inicial de {amount} para o tipo de pagamento selecionado \"{paymentType}\". Gostaria de continuar ?", + "Search Customer...": "Pesquisar cliente...", + "Due Amount": "Valor devido", + "Wallet Balance": "Saldo da carteira", + "Total Orders": "Total de pedidos", + "What slug should be used ? [Q] to quit.": "Que slug deve ser usado? [Q] para sair.", + "\"%s\" is a reserved class name": "\"%s\" \u00e9 um nome de classe reservado", + "The migration file has been successfully forgotten for the module %s.": "O arquivo de migra\u00e7\u00e3o foi esquecido com sucesso para o m\u00f3dulo %s.", + "%s products where updated.": "%s produtos foram atualizados.", + "Previous Amount": "Valor anterior", + "Next Amount": "Pr\u00f3ximo Valor", + "Restrict the records by the creation date.": "Restrinja os registros pela data de cria\u00e7\u00e3o.", + "Restrict the records by the author.": "Restringir os registros pelo autor.", + "Grouped Product": "Produto agrupado", + "Groups": "Grupos", + "Choose Group": "Escolher Grupo", + "Grouped": "Agrupado", + "An error has occurred": "Ocorreu um erro", + "Unable to proceed, the submitted form is not valid.": "N\u00e3o foi poss\u00edvel continuar, o formul\u00e1rio enviado n\u00e3o \u00e9 v\u00e1lido.", + "No activation is needed for this account.": "Nenhuma ativa\u00e7\u00e3o \u00e9 necess\u00e1ria para esta conta.", + "Invalid activation token.": "Token de ativa\u00e7\u00e3o inv\u00e1lido.", + "The expiration token has expired.": "O token de expira\u00e7\u00e3o expirou.", + "Your account is not activated.": "Sua conta n\u00e3o est\u00e1 ativada.", + "Unable to change a password for a non active user.": "N\u00e3o \u00e9 poss\u00edvel alterar a senha de um usu\u00e1rio n\u00e3o ativo.", + "Unable to submit a new password for a non active user.": "N\u00e3o \u00e9 poss\u00edvel enviar uma nova senha para um usu\u00e1rio n\u00e3o ativo.", + "Unable to delete an entry that no longer exists.": "N\u00e3o \u00e9 poss\u00edvel excluir uma entrada que n\u00e3o existe mais.", + "Provides an overview of the products stock.": "Fornece uma vis\u00e3o geral do estoque de produtos.", + "Customers Statement": "Declara\u00e7\u00e3o de clientes", + "Display the complete customer statement.": "Exiba o extrato completo do cliente.", + "The recovery has been explicitly disabled.": "A recupera\u00e7\u00e3o foi explicitamente desativada.", + "The registration has been explicitly disabled.": "O registro foi explicitamente desabilitado.", + "The entry has been successfully updated.": "A entrada foi atualizada com sucesso.", + "A similar module has been found": "Um m\u00f3dulo semelhante foi encontrado", + "A grouped product cannot be saved without any sub items.": "Um produto agrupado n\u00e3o pode ser salvo sem subitens.", + "A grouped product cannot contain grouped product.": "Um produto agrupado n\u00e3o pode conter produtos agrupados.", + "The subitem has been saved.": "O subitem foi salvo.", + "The %s is already taken.": "O %s j\u00e1 foi usado.", + "Allow Wholesale Price": "Permitir pre\u00e7o de atacado", + "Define if the wholesale price can be selected on the POS.": "Defina se o pre\u00e7o de atacado pode ser selecionado no PDV.", + "Allow Decimal Quantities": "Permitir quantidades decimais", + "Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.": "Mudar\u00e1 o teclado num\u00e9rico para permitir decimal para quantidades. Apenas para teclado num\u00e9rico \"padr\u00e3o\".", + "Numpad": "Teclado num\u00e9rico", + "Advanced": "Avan\u00e7ado", + "Will set what is the numpad used on the POS screen.": "Ir\u00e1 definir qual \u00e9 o teclado num\u00e9rico usado na tela do PDV.", + "Force Barcode Auto Focus": "For\u00e7ar foco autom\u00e1tico de c\u00f3digo de barras", + "Will permanently enable barcode autofocus to ease using a barcode reader.": "Habilitar\u00e1 permanentemente o foco autom\u00e1tico de c\u00f3digo de barras para facilitar o uso de um leitor de c\u00f3digo de barras.", + "Tax Included": "Taxas inclu\u00eddas", + "Unable to proceed, more than one product is set as featured": "N\u00e3o foi poss\u00edvel continuar, mais de um produto est\u00e1 definido como destaque", + "The transaction was deleted.": "A transa\u00e7\u00e3o foi exclu\u00edda.", + "Database connection was successful.": "A conex\u00e3o do banco de dados foi bem-sucedida.", + "The products taxes were computed successfully.": "Os impostos dos produtos foram calculados com sucesso.", + "Tax Excluded": "Imposto Exclu\u00eddo", + "Set Paid": "Definir pago", + "Would you like to mark this procurement as paid?": "Gostaria de marcar esta aquisi\u00e7\u00e3o como paga?", + "Unidentified Item": "Item n\u00e3o identificado", + "Non-existent Item": "Item inexistente", + "You cannot change the status of an already paid procurement.": "Voc\u00ea n\u00e3o pode alterar o status de uma aquisi\u00e7\u00e3o j\u00e1 paga.", + "The procurement payment status has been changed successfully.": "O status de pagamento de compras foi alterado com sucesso.", + "The procurement has been marked as paid.": "A aquisi\u00e7\u00e3o foi marcada como paga.", + "Show Price With Tax": "Mostrar pre\u00e7o com impostos", + "Will display price with tax for each products.": "Mostrar\u00e1 o pre\u00e7o com impostos para cada produto.", + "Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".": "N\u00e3o foi poss\u00edvel carregar o componente \"${action.component}\". Certifique-se de que o componente esteja registrado em \"nsExtraComponents\".", + "Tax Inclusive": "Impostos Inclusos", + "Apply Coupon": "Aplicar cupom", + "Not applicable": "N\u00e3o aplic\u00e1vel", + "Normal": "Normal", + "Product Taxes": "Impostos sobre produtos", + "The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.": "A unidade anexada a este produto está\u00e1 ausente ou n\u00e3o atributo\u00edda. Revise a guia \"Unidade\" para este produto.", + "X Days After Month Starts": "X dias após o início do mês", + "On Specific Day": "Em dia específico", + "Unknown Occurance": "Ocorrência desconhecida", + "Please provide a valid value.": "Forneça um valor válido.", + "Done": "Feito", + "Would you like to delete \"%s\"?": "Deseja excluir \"%s\"?", + "Unable to find a module having as namespace \"%s\"": "Não foi possível encontrar um módulo tendo como namespace \"%s\"", + "Api File": "Arquivo API", + "Migrations": "Migrações", + "Determine Until When the coupon is valid.": "Determine até quando o cupom será válido.", + "Customer Groups": "Grupos de clientes", + "Assigned To Customer Group": "Atribuído ao grupo de clientes", + "Only the customers who belongs to the selected groups will be able to use the coupon.": "Somente os clientes pertencentes aos grupos selecionados poderão utilizar o cupom.", + "Assigned To Customers": "Atribuído aos clientes", + "Only the customers selected will be ale to use the coupon.": "Somente os clientes selecionados poderão utilizar o cupom.", + "Unable to save the coupon as one of the selected customer no longer exists.": "Não foi possível salvar o cupom porque um dos clientes selecionados não existe mais.", + "Unable to save the coupon as one of the selected customer group no longer exists.": "Não foi possível salvar o cupom porque um dos grupos de clientes selecionados não existe mais.", + "Unable to save the coupon as one of the customers provided no longer exists.": "Não foi possível salvar o cupom porque um dos clientes fornecidos não existe mais.", + "Unable to save the coupon as one of the provided customer group no longer exists.": "Não foi possível salvar o cupom porque um dos grupos de clientes fornecidos não existe mais.", + "Coupon Order Histories List": "Lista de históricos de pedidos de cupons", + "Display all coupon order histories.": "Exiba todos os históricos de pedidos de cupons.", + "No coupon order histories has been registered": "Nenhum histórico de pedidos de cupons foi registrado", + "Add a new coupon order history": "Adicione um novo histórico de pedidos de cupom", + "Create a new coupon order history": "Crie um novo histórico de pedidos de cupons", + "Register a new coupon order history and save it.": "Registre um novo histórico de pedidos de cupons e salve-o.", + "Edit coupon order history": "Editar histórico de pedidos de cupons", + "Modify Coupon Order History.": "Modifique o histórico de pedidos de cupom.", + "Return to Coupon Order Histories": "Retornar aos históricos de pedidos de cupons", + "Customer_coupon_id": "ID_cupom_do_cliente", + "Order_id": "ID_pedido", + "Discount_value": "Valor_desconto", + "Minimum_cart_value": "Valor_mínimo_carrinho", + "Maximum_cart_value": "Valor máximo_carrinho", + "Limit_usage": "Limite_uso", + "Would you like to delete this?": "Deseja excluir isso?", + "Usage History": "Histórico de uso", + "Customer Coupon Histories List": "Lista de históricos de cupons de clientes", + "Display all customer coupon histories.": "Exiba todos os históricos de cupons de clientes.", + "No customer coupon histories has been registered": "Nenhum histórico de cupons de clientes foi registrado", + "Add a new customer coupon history": "Adicione um novo histórico de cupons de cliente", + "Create a new customer coupon history": "Crie um novo histórico de cupons de cliente", + "Register a new customer coupon history and save it.": "Registre um novo histórico de cupons de clientes e salve-o.", + "Edit customer coupon history": "Editar histórico de cupons do cliente", + "Modify Customer Coupon History.": "Modifique o histórico de cupons do cliente.", + "Return to Customer Coupon Histories": "Retornar aos históricos de cupons do cliente", + "Last Name": "Sobrenome", + "Provide the customer last name": "Forneça o sobrenome do cliente", + "Provide the customer gender.": "Forneça o sexo do cliente.", + "Provide the billing first name.": "Forneça o primeiro nome de cobrança.", + "Provide the billing last name.": "Forneça o sobrenome de cobrança.", + "Provide the shipping First Name.": "Forneça o nome de envio.", + "Provide the shipping Last Name.": "Forneça o sobrenome de envio.", + "Scheduled": "Agendado", + "Set the scheduled date.": "Defina a data agendada.", + "Account Name": "Nome da conta", + "Provider last name if necessary.": "Sobrenome do provedor, se necessário.", + "Provide the user first name.": "Forneça o primeiro nome do usuário.", + "Provide the user last name.": "Forneça o sobrenome do usuário.", + "Set the user gender.": "Defina o sexo do usuário.", + "Set the user phone number.": "Defina o número de telefone do usuário.", + "Set the user PO Box.": "Defina a caixa postal do usuário.", + "Provide the billing First Name.": "Forneça o nome de cobrança.", + "Last name": "Sobrenome", + "Group Name": "Nome do grupo", + "Delete a user": "Excluir um usuário", + "Activated": "ativado", + "type": "tipo", + "User Group": "Grupo de usuários", + "Scheduled On": "Agendado para", + "Biling": "Bilhar", + "API Token": "Token de API", + "Your Account has been successfully created.": "Sua conta foi criada com sucesso.", + "Unable to export if there is nothing to export.": "Não é possível exportar se não houver nada para exportar.", + "%s Coupons": "%s cupons", + "%s Coupon History": "%s Histórico de Cupons", + "\"%s\" Record History": "\"%s\" Histórico de registros", + "The media name was successfully updated.": "O nome da mídia foi atualizado com sucesso.", + "The role was successfully assigned.": "A função foi atribuída com sucesso.", + "The role were successfully assigned.": "A função foi atribuída com sucesso.", + "Unable to identifier the provided role.": "Não foi possível identificar a função fornecida.", + "Good Condition": "Boa condição", + "Cron Disabled": "Cron desativado", + "Task Scheduling Disabled": "Agendamento de tarefas desativado", + "NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.": "O NexoPOS não consegue agendar tarefas em segundo plano. Isso pode restringir os recursos necessários. Clique aqui para aprender como resolver isso.", + "The email \"%s\" is already used for another customer.": "O e-mail \"%s\" já está sendo usado por outro cliente.", + "The provided coupon cannot be loaded for that customer.": "O cupom fornecido não pode ser carregado para esse cliente.", + "The provided coupon cannot be loaded for the group assigned to the selected customer.": "O cupom fornecido não pode ser carregado para o grupo atribuído ao cliente selecionado.", + "Unable to use the coupon %s as it has expired.": "Não foi possível usar o cupom %s porque ele expirou.", + "Unable to use the coupon %s at this moment.": "Não é possível usar o cupom %s neste momento.", + "Small Box": "Caixa pequena", + "Box": "Caixa", + "%s products were freed": "%s produtos foram liberados", + "Restoring cash flow from paid orders...": "Restaurando o fluxo de caixa de pedidos pagos...", + "Restoring cash flow from refunded orders...": "Restaurando o fluxo de caixa de pedidos reembolsados...", + "%s on %s directories were deleted.": "%s em %s diretórios foram excluídos.", + "%s on %s files were deleted.": "%s em %s arquivos foram excluídos.", + "First Day Of Month": "Primeiro dia do mês", + "Last Day Of Month": "Último dia do mês", + "Month middle Of Month": "Mês no meio do mês", + "{day} after month starts": "{dia} após o início do mês", + "{day} before month ends": "{dia} antes do final do mês", + "Every {day} of the month": "Todo {dia} do mês", + "Days": "Dias", + "Make sure set a day that is likely to be executed": "Certifique-se de definir um dia que provavelmente será executado", + "Invalid Module provided.": "Módulo inválido fornecido.", + "The module was \"%s\" was successfully installed.": "O módulo \"%s\" foi instalado com sucesso.", + "The modules \"%s\" was deleted successfully.": "Os módulos \"%s\" foram excluídos com sucesso.", + "Unable to locate a module having as identifier \"%s\".": "Não foi possível localizar um módulo tendo como identificador \"%s\".", + "All migration were executed.": "Todas as migrações foram executadas.", + "Unknown Product Status": "Status do produto desconhecido", + "Member Since": "Membro desde", + "Total Customers": "Total de clientes", + "The widgets was successfully updated.": "Os widgets foram atualizados com sucesso.", + "The token was successfully created": "O token foi criado com sucesso", + "The token has been successfully deleted.": "O token foi excluído com sucesso.", + "Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".": "Habilite serviços em segundo plano para NexoPOS. Atualize para verificar se a opção mudou para \"Sim\".", + "Will display all cashiers who performs well.": "Irá exibir todos os caixas com bom desempenho.", + "Will display all customers with the highest purchases.": "Irá exibir todos os clientes com o maior número de compras.", + "Expense Card Widget": "Widget de cartão de despesas", + "Will display a card of current and overwall expenses.": "Será exibido um cartão de despesas correntes e excedentes.", + "Incomplete Sale Card Widget": "Widget de cartão de venda incompleto", + "Will display a card of current and overall incomplete sales.": "Exibirá um cartão de vendas incompletas atuais e gerais.", + "Orders Chart": "Gráfico de pedidos", + "Will display a chart of weekly sales.": "Irá exibir um gráfico de vendas semanais.", + "Orders Summary": "Resumo de pedidos", + "Will display a summary of recent sales.": "Irá exibir um resumo das vendas recentes.", + "Will display a profile widget with user stats.": "Irá exibir um widget de perfil com estatísticas do usuário.", + "Sale Card Widget": "Widget de cartão de venda", + "Will display current and overall sales.": "Exibirá as vendas atuais e gerais.", + "Return To Calendar": "Retornar ao calendário", + "Thr": "Thr", + "The left range will be invalid.": "O intervalo esquerdo será inválido.", + "The right range will be invalid.": "O intervalo correto será inválido.", + "Click here to add widgets": "Clique aqui para adicionar widgets", + "Choose Widget": "Escolha o widget", + "Select with widget you want to add to the column.": "Selecione o widget que deseja adicionar à coluna.", + "Unamed Tab": "Guia sem nome", + "An error unexpected occured while printing.": "Ocorreu um erro inesperado durante a impressão.", + "and": "e", + "{date} ago": "{data} atrás", + "In {date}": "Na data}", + "An unexpected error occured.": "Ocorreu um erro inesperado.", + "Warning": "Aviso", + "Change Type": "Tipo de alteração", + "Save Expense": "Economizar despesas", + "No configuration were choosen. Unable to proceed.": "Nenhuma configuração foi escolhida. Não é possível prosseguir.", + "Conditions": "Condições", + "By proceeding the current for and all your entries will be cleared. Would you like to proceed?": "Ao prosseguir o for atual e todas as suas entradas serão apagadas. Gostaria de continuar?", + "No modules matches your search term.": "Nenhum módulo corresponde ao seu termo de pesquisa.", + "Press \"\/\" to search modules": "Pressione \"\/\" para pesquisar módulos", + "No module has been uploaded yet.": "Nenhum módulo foi carregado ainda.", + "{module}": "{módulo}", + "Would you like to delete \"{module}\"? All data created by the module might also be deleted.": "Deseja excluir \"{module}\"? Todos os dados criados pelo módulo também podem ser excluídos.", + "Search Medias": "Pesquisar mídias", + "Bulk Select": "Seleção em massa", + "Press "\/" to search permissions": "Pressione "\/" para pesquisar permissões", + "SKU, Barcode, Name": "SKU, código de barras, nome", + "About Token": "Sobre token", + "Save Token": "Salvar token", + "Generated Tokens": "Tokens gerados", + "Created": "Criada", + "Last Use": "Último uso", + "Never": "Nunca", + "Expires": "Expira", + "Revoke": "Revogar", + "Token Name": "Nome do token", + "This will be used to identifier the token.": "Isso será usado para identificar o token.", + "Unable to proceed, the form is not valid.": "Não é possível prosseguir, o formulário não é válido.", + "An unexpected error occured": "Ocorreu um erro inesperado", + "An Error Has Occured": "Ocorreu um erro", + "Febuary": "Fevereiro", + "Configure": "Configurar", + "Unable to add the product": "Não foi possível adicionar o produto", + "No result to result match the search value provided.": "Nenhum resultado corresponde ao valor de pesquisa fornecido.", + "This QR code is provided to ease authentication on external applications.": "Este código QR é fornecido para facilitar a autenticação em aplicativos externos.", + "Copy And Close": "Copiar e fechar", + "An error has occured": "Ocorreu um erro", + "Recents Orders": "Pedidos recentes", + "Unamed Page": "Página sem nome", + "Assignation": "Atribuição", + "Incoming Conversion": "Conversão recebida", + "Outgoing Conversion": "Conversão de saída", + "Unknown Action": "Ação desconhecida", + "Direct Transaction": "Transação Direta", + "Recurring Transaction": "Transação recorrente", + "Entity Transaction": "Transação de Entidade", + "Scheduled Transaction": "Transação agendada", + "Unknown Type (%s)": "Tipo desconhecido (%s)", + "What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.": "Qual é o namespace do recurso CRUD. por exemplo: system.users? [Q] para sair.", + "What is the full model name. eg: App\\Models\\Order ? [Q] to quit.": "Qual é o nome completo do modelo. por exemplo: App\\Modelos\\Ordem ? [Q] para sair.", + "What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.": "Quais são as colunas preenchíveis da tabela: por exemplo: nome de usuário, email, senha? [S] para pular, [Q] para sair.", + "Unsupported argument provided: \"%s\"": "Argumento não suportado fornecido: \"%s\"", + "The authorization token can\\'t be changed manually.": "O token de autorização não pode ser alterado manualmente.", + "Translation process is complete for the module %s !": "O processo de tradução do módulo %s foi concluído!", + "%s migration(s) has been deleted.": "%s migrações foram excluídas.", + "The command has been created for the module \"%s\"!": "O comando foi criado para o módulo \"%s\"!", + "The controller has been created for the module \"%s\"!": "O controlador foi criado para o módulo \"%s\"!", + "The event has been created at the following path \"%s\"!": "O evento foi criado no seguinte caminho \"%s\"!", + "The listener has been created on the path \"%s\"!": "O listener foi criado no caminho \"%s\"!", + "A request with the same name has been found !": "Uma solicitação com o mesmo nome foi encontrada!", + "Unable to find a module having the identifier \"%s\".": "Não foi possível encontrar um módulo com o identificador \"%s\".", + "Unsupported reset mode.": "Modo de redefinição não suportado.", + "You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.": "Você não forneceu um nome de arquivo válido. Não deve conter espaços, pontos ou caracteres especiais.", + "Unable to find a module having \"%s\" as namespace.": "Não foi possível encontrar um módulo com \"%s\" como namespace.", + "A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.": "Já existe um arquivo semelhante no caminho \"%s\". Use \"--force\" para substituí-lo.", + "A new form class was created at the path \"%s\"": "Uma nova classe de formulário foi criada no caminho \"%s\"", + "Unable to proceed, looks like the database can\\'t be used.": "Não é possível continuar, parece que o banco de dados não pode ser usado.", + "In which language would you like to install NexoPOS ?": "Em qual idioma você gostaria de instalar o NexoPOS?", + "You must define the language of installation.": "Você deve definir o idioma de instalação.", + "The value above which the current coupon can\\'t apply.": "O valor acima do qual o cupom atual não pode ser aplicado.", + "Unable to save the coupon product as this product doens\\'t exists.": "Não foi possível salvar o produto com cupom porque este produto não existe.", + "Unable to save the coupon category as this category doens\\'t exists.": "Não foi possível salvar a categoria do cupom porque esta categoria não existe.", + "Unable to save the coupon as this category doens\\'t exists.": "Não foi possível salvar o cupom porque esta categoria não existe.", + "You\\re not allowed to do that.": "Você não tem permissão para fazer isso.", + "Crediting (Add)": "Crédito (Adicionar)", + "Refund (Add)": "Reembolso (Adicionar)", + "Deducting (Remove)": "Deduzindo (Remover)", + "Payment (Remove)": "Pagamento (Remover)", + "The assigned default customer group doesn\\'t exist or is not defined.": "O grupo de clientes padrão atribuído não existe ou não está definido.", + "Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0": "Determine em percentual qual o primeiro pagamento mínimo de crédito realizado por todos os clientes do grupo, em caso de ordem de crédito. Se deixado em \"0", + "You\\'re not allowed to do this operation": "Você não tem permissão para fazer esta operação", + "If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.": "Se clicar em não, todos os produtos atribuídos a esta categoria ou todas as subcategorias não aparecerão no PDV.", + "Convert Unit": "Converter unidade", + "The unit that is selected for convertion by default.": "A unidade selecionada para conversão por padrão.", + "COGS": "CPV", + "Used to define the Cost of Goods Sold.": "Utilizado para definir o Custo dos Produtos Vendidos.", + "Visible": "Visível", + "Define whether the unit is available for sale.": "Defina se a unidade está disponível para venda.", + "Product unique name. If it\\' variation, it should be relevant for that variation": "Nome exclusivo do produto. Se for uma variação, deve ser relevante para essa variação", + "The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.": "O produto não ficará visível na grade e será buscado apenas pelo leitor de código de barras ou código de barras associado.", + "The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.": "O Custo dos Produtos Vendidos será calculado automaticamente com base na aquisição e conversão.", + "Auto COGS": "CPV automotivo", + "Unknown Type: %s": "Tipo desconhecido: %s", + "Shortage": "Falta", + "Overage": "Excedente", + "Transactions List": "Lista de transações", + "Display all transactions.": "Exibir todas as transações.", + "No transactions has been registered": "Nenhuma transação foi registrada", + "Add a new transaction": "Adicionar uma nova transação", + "Create a new transaction": "Crie uma nova transação", + "Register a new transaction and save it.": "Registre uma nova transação e salve-a.", + "Edit transaction": "Editar transação", + "Modify Transaction.": "Modificar transação.", + "Return to Transactions": "Voltar para transações", + "determine if the transaction is effective or not. Work for recurring and not recurring transactions.": "determinar se a transação é efetiva ou não. Trabalhe para transações recorrentes e não recorrentes.", + "Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.": "Atribuir transação ao grupo de usuários. a Transação será, portanto, multiplicada pelo número da entidade.", + "Transaction Account": "Conta de transação", + "Assign the transaction to an account430": "Atribuir a transação a uma conta 430", + "Is the value or the cost of the transaction.": "É o valor ou o custo da transação.", + "If set to Yes, the transaction will trigger on defined occurrence.": "Se definido como Sim, a transação será acionada na ocorrência definida.", + "Define how often this transaction occurs": "Defina com que frequência esta transação ocorre", + "Define what is the type of the transactions.": "Defina qual é o tipo de transações.", + "Trigger": "Acionar", + "Would you like to trigger this expense now?": "Gostaria de acionar essa despesa agora?", + "Transactions History List": "Lista de histórico de transações", + "Display all transaction history.": "Exibir todo o histórico de transações.", + "No transaction history has been registered": "Nenhum histórico de transações foi registrado", + "Add a new transaction history": "Adicione um novo histórico de transações", + "Create a new transaction history": "Crie um novo histórico de transações", + "Register a new transaction history and save it.": "Registre um novo histórico de transações e salve-o.", + "Edit transaction history": "Editar histórico de transações", + "Modify Transactions history.": "Modifique o histórico de transações.", + "Return to Transactions History": "Retornar ao histórico de transações", + "Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.": "Forneça um valor exclusivo para esta unidade. Pode ser composto por um nome, mas não deve incluir espaços ou caracteres especiais.", + "Set the limit that can\\'t be exceeded by the user.": "Defina o limite que não pode ser excedido pelo usuário.", + "Oops, We\\'re Sorry!!!": "Ops, sentimos muito!!!", + "Class: %s": "Turma: %s", + "There\\'s is mismatch with the core version.": "Há incompatibilidade com a versão principal.", + "You\\'re not authenticated.": "Você não está autenticado.", + "An error occured while performing your request.": "Ocorreu um erro ao executar sua solicitação.", + "A mismatch has occured between a module and it\\'s dependency.": "Ocorreu uma incompatibilidade entre um módulo e sua dependência.", + "You\\'re not allowed to see that page.": "Você não tem permissão para ver essa página.", + "Post Too Large": "Postagem muito grande", + "The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini": "A solicitação enviada é maior que o esperado. Considere aumentar seu \"post_max_size\" no seu PHP.ini", + "This field does\\'nt have a valid value.": "Este campo não possui um valor válido.", + "Describe the direct transaction.": "Descreva a transação direta.", + "If set to yes, the transaction will take effect immediately and be saved on the history.": "Se definido como sim, a transação terá efeito imediato e será salva no histórico.", + "Assign the transaction to an account.": "Atribua a transação a uma conta.", + "set the value of the transaction.": "definir o valor da transação.", + "Further details on the transaction.": "Mais detalhes sobre a transação.", + "Describe the direct transactions.": "Descreva as transações diretas.", + "set the value of the transactions.": "definir o valor das transações.", + "The transactions will be multipled by the number of user having that role.": "As transações serão multiplicadas pelo número de usuários com essa função.", + "Create Sales (needs Procurements)": "Criar vendas (precisa de compras)", + "Set when the transaction should be executed.": "Defina quando a transação deve ser executada.", + "The addresses were successfully updated.": "Os endereços foram atualizados com sucesso.", + "Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.": "Determine qual é o valor real da aquisição. Uma vez \"Entregue\" o status não poderá ser alterado e o estoque será atualizado.", + "The register doesn\\'t have an history.": "O registro não tem histórico.", + "Unable to check a register session history if it\\'s closed.": "Não é possível verificar o histórico de uma sessão de registro se ela estiver fechada.", + "Register History For : %s": "Registrar histórico para: %s", + "Can\\'t delete a category having sub categories linked to it.": "Não é possível excluir uma categoria que tenha subcategorias vinculadas a ela.", + "Unable to proceed. The request doesn\\'t provide enough data which could be handled": "Não é possível prosseguir. A solicitação não fornece dados suficientes que possam ser tratados", + "Unable to load the CRUD resource : %s.": "Não foi possível carregar o recurso CRUD: %s.", + "Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods": "Não foi possível recuperar itens. O recurso CRUD atual não implementa métodos \"getEntries\"", + "The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.": "A classe \"%s\" não está definida. Essa classe crua existe? Certifique-se de registrar a instância, se for o caso.", + "The crud columns exceed the maximum column that can be exported (27)": "As colunas crud excedem a coluna máxima que pode ser exportada (27)", + "This link has expired.": "Este link expirou.", + "Account History : %s": "Histórico da conta: %s", + "Welcome — %s": "Bem-vindo - bem-vindo! %s", + "Upload and manage medias (photos).": "Carregar e gerenciar mídias (fotos).", + "The product which id is %s doesnt\\'t belong to the procurement which id is %s": "O produto cujo id é %s não pertence à aquisição cujo id é %s", + "The refresh process has started. You\\'ll get informed once it\\'s complete.": "O processo de atualização foi iniciado. Você será informado assim que estiver concluído.", + "The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".": "A variação não foi excluída porque pode não existir ou não estar atribuída ao produto pai \"%s\".", + "Stock History For %s": "Histórico de estoque de %s", + "Set": "Definir", + "The unit is not set for the product \"%s\".": "A unidade não está configurada para o produto \"%s\".", + "The operation will cause a negative stock for the product \"%s\" (%s).": "A operação causará estoque negativo para o produto \"%s\" (%s).", + "The adjustment quantity can\\'t be negative for the product \"%s\" (%s)": "A quantidade de ajuste não pode ser negativa para o produto \"%s\" (%s)", + "%s\\'s Products": "Produtos de %s", + "Transactions Report": "Relatório de transações", + "Combined Report": "Relatório Combinado", + "Provides a combined report for every transactions on products.": "Fornece um relatório combinado para todas as transações de produtos.", + "Unable to initiallize the settings page. The identifier \"' . $identifier . '": "Não foi possível inicializar a página de configurações. O identificador \"' . $identifier . '", + "Shows all histories generated by the transaction.": "Mostra todos os históricos gerados pela transação.", + "Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.": "Não é possível usar transações agendadas, recorrentes e de entidade porque as filas não estão configuradas corretamente.", + "Create New Transaction": "Criar nova transação", + "Set direct, scheduled transactions.": "Defina transações diretas e programadas.", + "Update Transaction": "Atualizar transação", + "The provided data aren\\'t valid": "Os dados fornecidos não são válidos", + "Welcome — NexoPOS": "Bem-vindo - bem-vindo! NexoPOS", + "You\\'re not allowed to see this page.": "Você não tem permissão para ver esta página.", + "Your don\\'t have enough permission to perform this action.": "Você não tem permissão suficiente para realizar esta ação.", + "You don\\'t have the necessary role to see this page.": "Você não tem a função necessária para ver esta página.", + "%s product(s) has low stock. Reorder those product(s) before it get exhausted.": "%s produtos estão com estoque baixo. Reordene esses produtos antes que eles se esgotem.", + "Scheduled Transactions": "Transações agendadas", + "the transaction \"%s\" was executed as scheduled on %s.": "a transação \"%s\" foi executada conforme programado em %s.", + "Workers Aren\\'t Running": "Os trabalhadores não estão correndo", + "The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.": "Os trabalhadores foram habilitados, mas parece que o NexoPOS não pode executar trabalhadores. Isso geralmente acontece se o supervisor não estiver configurado corretamente.", + "Unable to remove the permissions \"%s\". It doesn\\'t exists.": "Não foi possível remover as permissões \"%s\". Isso não existe.", + "Unable to open \"%s\" *, as it\\'s not closed.": "Não foi possível abrir \"%s\" *, pois não está fechado.", + "Unable to open \"%s\" *, as it\\'s not opened.": "Não foi possível abrir \"%s\" *, pois não está aberto.", + "Unable to cashing on \"%s\" *, as it\\'s not opened.": "Não é possível descontar em \"%s\" *, pois não está aberto.", + "Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.": "Não há fundos suficientes para excluir uma venda de \"%s\". Se os fundos foram sacados ou desembolsados, considere adicionar algum dinheiro (%s) à caixa registradora.", + "Unable to cashout on \"%s": "Não foi possível sacar em \"%s", + "Symbolic Links Missing": "Links simbólicos ausentes", + "The Symbolic Links to the public directory is missing. Your medias might be broken and not display.": "Os links simbólicos para o diretório público estão faltando. Suas mídias podem estar quebradas e não serem exibidas.", + "Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.": "Os cron jobs não estão configurados corretamente no NexoPOS. Isso pode restringir os recursos necessários. Clique aqui para aprender como resolver isso.", + "The requested module %s cannot be found.": "O módulo solicitado %s não pode ser encontrado.", + "The manifest.json can\\'t be located inside the module %s on the path: %s": "O manifest.json não pode estar localizado dentro do módulo %s no caminho: %s", + "the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.": "o arquivo solicitado \"%s\" não pode ser localizado dentro do manifest.json para o módulo %s.", + "Sorting is explicitely disabled for the column \"%s\".": "A classificação está explicitamente desativada para a coluna \"%s\".", + "Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s": "Não foi possível excluir \"%s\" pois é uma dependência de \"%s\"%s", + "Unable to find the customer using the provided id %s.": "Não foi possível encontrar o cliente usando o ID fornecido %s.", + "Not enough credits on the customer account. Requested : %s, Remaining: %s.": "Não há créditos suficientes na conta do cliente. Solicitado: %s, Restante: %s.", + "The customer account doesn\\'t have enough funds to proceed.": "A conta do cliente não tem fundos suficientes para prosseguir.", + "Unable to find a reference to the attached coupon : %s": "Não foi possível encontrar uma referência ao cupom anexado: %s", + "You\\'re not allowed to use this coupon as it\\'s no longer active": "Você não tem permissão para usar este cupom porque ele não está mais ativo", + "You\\'re not allowed to use this coupon it has reached the maximum usage allowed.": "Você não tem permissão para usar este cupom, ele atingiu o uso máximo permitido.", + "Terminal A": "Terminal A", + "Terminal B": "Terminal B", + "%s link were deleted": "%s links foram excluídos", + "Unable to execute the following class callback string : %s": "Não foi possível executar a seguinte string de retorno de chamada de classe: %s", + "%s — %s": "%s — %s", + "Transactions": "Transações", + "Create Transaction": "Criar transação", + "Stock History": "Histórico de ações", + "Invoices": "Faturas", + "Failed to parse the configuration file on the following path \"%s\"": "Falha ao analisar o arquivo de configuração no seguinte caminho \"%s\"", + "No config.xml has been found on the directory : %s. This folder is ignored": "Nenhum config.xml foi encontrado no diretório: %s. Esta pasta é ignorada", + "The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ": "O módulo \"%s\" foi desabilitado porque não é compatível com a versão atual do NexoPOS %s, mas requer %s.", + "Unable to upload this module as it\\'s older than the version installed": "Não foi possível fazer upload deste módulo porque ele é mais antigo que a versão instalada", + "The migration file doens\\'t have a valid class name. Expected class : %s": "O arquivo de migração não possui um nome de classe válido. Aula esperada: %s", + "Unable to locate the following file : %s": "Não foi possível localizar o seguinte arquivo: %s", + "The migration file doens\\'t have a valid method name. Expected method : %s": "O arquivo de migração não possui um nome de método válido. Método esperado: %s", + "The module %s cannot be enabled as his dependency (%s) is missing or not enabled.": "O módulo %s não pode ser habilitado porque sua dependência (%s) está faltando ou não está habilitada.", + "The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.": "O módulo %s não pode ser habilitado porque suas dependências (%s) estão faltando ou não estão habilitadas.", + "An Error Occurred \"%s\": %s": "Ocorreu um erro \"%s\": %s", + "The order has been updated": "O pedido foi atualizado", + "The minimal payment of %s has\\'nt been provided.": "O pagamento mínimo de %s não foi fornecido.", + "Unable to proceed as the order is already paid.": "Não foi possível prosseguir porque o pedido já foi pago.", + "The customer account funds are\\'nt enough to process the payment.": "Os fundos da conta do cliente não são suficientes para processar o pagamento.", + "Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.": "Não é possível prosseguir. Pedidos parcialmente pagos não são permitidos. Esta opção pode ser alterada nas configurações.", + "Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.": "Não é possível prosseguir. Pedidos não pagos não são permitidos. Esta opção pode ser alterada nas configurações.", + "By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.": "Ao prosseguir com este pedido, o cliente ultrapassará o crédito máximo permitido para sua conta: %s.", + "You\\'re not allowed to make payments.": "Você não tem permissão para fazer pagamentos.", + "Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s": "Não foi possível prosseguir, não há estoque suficiente para %s usando a unidade %s. Solicitado: %s, disponível %s", + "Unknown Status (%s)": "Status desconhecido (%s)", + "%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.": "%s pedidos não pagos ou parcialmente pagos venceram. Isso ocorre se nada tiver sido concluído antes da data prevista de pagamento.", + "Unable to find a reference of the provided coupon : %s": "Não foi possível encontrar uma referência do cupom fornecido: %s", + "The procurement has been deleted. %s included stock record(s) has been deleted as well.": "A aquisição foi excluída. %s registros de estoque incluídos também foram excluídos.", + "Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.": "Não foi possível excluir a compra porque não há estoque suficiente para \"%s\" na unidade \"%s\". Isso provavelmente significa que a contagem de estoque mudou com uma venda ou ajuste após a aquisição ter sido estocada.", + "Unable to find the product using the provided id \"%s\"": "Não foi possível encontrar o produto usando o ID fornecido \"%s\"", + "Unable to procure the product \"%s\" as the stock management is disabled.": "Não foi possível adquirir o produto \"%s\" pois o gerenciamento de estoque está desabilitado.", + "Unable to procure the product \"%s\" as it is a grouped product.": "Não foi possível adquirir o produto \"%s\", pois é um produto agrupado.", + "The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item": "A unidade utilizada para o produto %s não pertence ao Grupo de Unidades atribuído ao item", + "%s procurement(s) has recently been automatically procured.": "%s compras foram recentemente adquiridas automaticamente.", + "The requested category doesn\\'t exists": "A categoria solicitada não existe", + "The category to which the product is attached doesn\\'t exists or has been deleted": "A categoria à qual o produto está anexado não existe ou foi excluída", + "Unable to create a product with an unknow type : %s": "Não foi possível criar um produto com um tipo desconhecido: %s", + "A variation within the product has a barcode which is already in use : %s.": "Uma variação do produto possui um código de barras que já está em uso: %s.", + "A variation within the product has a SKU which is already in use : %s": "Uma variação do produto tem um SKU que já está em uso: %s", + "Unable to edit a product with an unknown type : %s": "Não foi possível editar um produto de tipo desconhecido: %s", + "The requested sub item doesn\\'t exists.": "O subitem solicitado não existe.", + "One of the provided product variation doesn\\'t include an identifier.": "Uma das variações do produto fornecidas não inclui um identificador.", + "The product\\'s unit quantity has been updated.": "A quantidade unitária do produto foi atualizada.", + "Unable to reset this variable product \"%s": "Não foi possível redefinir esta variável product \"%s", + "Adjusting grouped product inventory must result of a create, update, delete sale operation.": "O ajuste do estoque de produtos agrupados deve resultar de uma operação de criação, atualização e exclusão de venda.", + "Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).": "Não é possível prosseguir, esta ação causará estoque negativo (%s). Quantidade antiga: (%s), Quantidade: (%s).", + "Unsupported stock action \"%s\"": "Ação de ações não suportada \"%s\"", + "%s product(s) has been deleted.": "%s produtos foram excluídos.", + "%s products(s) has been deleted.": "%s produtos foram excluídos.", + "Unable to find the product, as the argument \"%s\" which value is \"%s": "Não foi possível encontrar o produto, pois o argumento \"%s\" cujo valor é \"%s", + "You cannot convert unit on a product having stock management disabled.": "Não é possível converter unidades num produto com a gestão de stocks desativada.", + "The source and the destination unit can\\'t be the same. What are you trying to do ?": "A unidade de origem e de destino não podem ser iguais. O que você está tentando fazer ?", + "There is no source unit quantity having the name \"%s\" for the item %s": "Não há quantidade de unidade de origem com o nome \"%s\" para o item %s", + "There is no destination unit quantity having the name %s for the item %s": "Não há quantidade unitária de destino com o nome %s para o item %s", + "The source unit and the destination unit doens\\'t belong to the same unit group.": "A unidade de origem e a unidade de destino não pertencem ao mesmo grupo de unidades.", + "The group %s has no base unit defined": "O grupo %s não tem nenhuma unidade base definida", + "The conversion of %s(%s) to %s(%s) was successful": "A conversão de %s(%s) para %s(%s) foi bem sucedida", + "The product has been deleted.": "O produto foi excluído.", + "An error occurred: %s.": "Ocorreu um erro: %s.", + "A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.": "Uma operação de estoque foi detectada recentemente, mas o NexoPOS não conseguiu atualizar o relatório adequadamente. Isso ocorre se a referência diária do painel não tiver sido criada.", + "Today\\'s Orders": "Pedidos de hoje", + "Today\\'s Sales": "Vendas de hoje", + "Today\\'s Refunds": "Reembolsos de hoje", + "Today\\'s Customers": "Clientes de hoje", + "The report will be generated. Try loading the report within few minutes.": "O relatório será gerado. Tente carregar o relatório em alguns minutos.", + "The database has been wiped out.": "O banco de dados foi eliminado.", + "No custom handler for the reset \"' . $mode . '\"": "Nenhum manipulador personalizado para a redefinição \"' . $mode . '\"", + "Unable to proceed. The parent tax doesn\\'t exists.": "Não é possível prosseguir. O imposto pai não existe.", + "A simple tax must not be assigned to a parent tax with the type \"simple": "Um imposto simples não deve ser atribuído a um imposto pai do tipo \"simples", + "Created via tests": "Criado por meio de testes", + "The transaction has been successfully saved.": "A transação foi salva com sucesso.", + "The transaction has been successfully updated.": "A transação foi atualizada com sucesso.", + "Unable to find the transaction using the provided identifier.": "Não foi possível encontrar a transação usando o identificador fornecido.", + "Unable to find the requested transaction using the provided id.": "Não foi possível encontrar a transação solicitada usando o ID fornecido.", + "The transction has been correctly deleted.": "A transação foi excluída corretamente.", + "You cannot delete an account which has transactions bound.": "Você não pode excluir uma conta que tenha transações vinculadas.", + "The transaction account has been deleted.": "A conta de transação foi excluída.", + "Unable to find the transaction account using the provided ID.": "Não foi possível encontrar a conta de transação usando o ID fornecido.", + "The transaction account has been updated.": "A conta de transação foi atualizada.", + "This transaction type can\\'t be triggered.": "Este tipo de transação não pode ser acionado.", + "The transaction has been successfully triggered.": "A transação foi acionada com sucesso.", + "The transaction \"%s\" has been processed on day \"%s\".": "A transação \"%s\" foi processada no dia \"%s\".", + "The transaction \"%s\" has already been processed.": "A transação \"%s\" já foi processada.", + "The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.": "As transações \"%s\" não foram processadas, pois estão desatualizadas.", + "The process has been correctly executed and all transactions has been processed.": "O processo foi executado corretamente e todas as transações foram processadas.", + "The process has been executed with some failures. %s\/%s process(es) has successed.": "O processo foi executado com algumas falhas. %s\/%s processos foram bem-sucedidos.", + "Procurement : %s": "Aquisição: %s", + "Procurement Liability : %s": "Responsabilidade de aquisição: %s", + "Refunding : %s": "Reembolso: %s", + "Spoiled Good : %s": "Bem estragado: %s", + "Sale : %s": "Vendas", + "Liabilities Account": "Conta de Passivos", + "Not found account type: %s": "Tipo de conta não encontrado: %s", + "Refund : %s": "Reembolso: %s", + "Customer Account Crediting : %s": "Crédito na conta do cliente: %s", + "Customer Account Purchase : %s": "Compra na conta do cliente: %s", + "Customer Account Deducting : %s": "Dedução da conta do cliente: %s", + "Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.": "Algumas transações estão desativadas porque o NexoPOS não é capaz de realizar solicitações assíncronas<\/a>.", + "The unit group %s doesn\\'t have a base unit": "O grupo de unidades %s não possui uma unidade base", + "The system role \"Users\" can be retrieved.": "A função do sistema \"Usuários\" pode ser recuperada.", + "The default role that must be assigned to new users cannot be retrieved.": "A função padrão que deve ser atribuída a novos usuários não pode ser recuperada.", + "%s Second(s)": "%s Segundo(s)", + "Configure the accounting feature": "Configurar o recurso de contabilidade", + "Define the symbol that indicate thousand. By default ": "Defina o símbolo que indica mil. Por padrão", + "Date Time Format": "Formato de data e hora", + "This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".": "Isso define como a data e as horas devem ser formatadas. O formato padrão é \"Y-m-d H:i\".", + "Date TimeZone": "Data Fuso horário", + "Determine the default timezone of the store. Current Time: %s": "Determine o fuso horário padrão da loja. Hora atual: %s", + "Configure how invoice and receipts are used.": "Configure como faturas e recibos são usados.", + "configure settings that applies to orders.": "definir configurações que se aplicam aos pedidos.", + "Report Settings": "Configurações de relatório", + "Configure the settings": "Definir as configurações", + "Wipes and Reset the database.": "Limpa e reinicia o banco de dados.", + "Supply Delivery": "Entrega de suprimentos", + "Configure the delivery feature.": "Configure o recurso de entrega.", + "Configure how background operations works.": "Configure como funcionam as operações em segundo plano.", + "Every procurement will be added to the selected transaction account": "Cada aquisição será adicionada à conta de transação selecionada", + "Every sales will be added to the selected transaction account": "Todas as vendas serão adicionadas à conta de transação selecionada", + "Customer Credit Account (crediting)": "Conta de crédito do cliente (crédito)", + "Every customer credit will be added to the selected transaction account": "Cada crédito do cliente será adicionado à conta de transação selecionada", + "Customer Credit Account (debitting)": "Conta de crédito do cliente (débito)", + "Every customer credit removed will be added to the selected transaction account": "Cada crédito de cliente removido será adicionado à conta de transação selecionada", + "Sales refunds will be attached to this transaction account": "Os reembolsos de vendas serão anexados a esta conta de transação", + "Stock Return Account (Spoiled Items)": "Conta de devolução de estoque (itens estragados)", + "Disbursement (cash register)": "Desembolso (caixa registradora)", + "Transaction account for all cash disbursement.": "Conta de transação para todos os desembolsos de dinheiro.", + "Liabilities": "Passivos", + "Transaction account for all liabilities.": "Conta de transação para todos os passivos.", + "You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.": "Você deve criar um cliente ao qual cada venda será atribuída quando o cliente ambulante não se cadastrar.", + "Show Tax Breakdown": "Mostrar detalhamento de impostos", + "Will display the tax breakdown on the receipt\/invoice.": "Irá exibir o detalhamento do imposto no recibo/fatura.", + "Available tags : ": "Etiquetas disponíveis:", + "{store_name}: displays the store name.": "{store_name}: exibe o nome da loja.", + "{store_email}: displays the store email.": "{store_email}: exibe o e-mail da loja.", + "{store_phone}: displays the store phone number.": "{store_phone}: exibe o número de telefone da loja.", + "{cashier_name}: displays the cashier name.": "{cashier_name}: exibe o nome do caixa.", + "{cashier_id}: displays the cashier id.": "{cashier_id}: exibe o id do caixa.", + "{order_code}: displays the order code.": "{order_code}: exibe o código do pedido.", + "{order_date}: displays the order date.": "{order_date}: exibe a data do pedido.", + "{order_type}: displays the order type.": "{order_type}: exibe o tipo de pedido.", + "{customer_email}: displays the customer email.": "{customer_email}: exibe o e-mail do cliente.", + "{shipping_first_name}: displays the shipping first name.": "{shipping_first_name}: exibe o nome de envio.", + "{shipping_last_name}: displays the shipping last name.": "{shipping_last_name}: exibe o sobrenome de envio.", + "{shipping_phone}: displays the shipping phone.": "{shipping_phone}: exibe o telefone de envio.", + "{shipping_address_1}: displays the shipping address_1.": "{shipping_address_1}: exibe o endereço de entrega_1.", + "{shipping_address_2}: displays the shipping address_2.": "{shipping_address_2}: exibe o endereço de entrega_2.", + "{shipping_country}: displays the shipping country.": "{shipping_country}: exibe o país de envio.", + "{shipping_city}: displays the shipping city.": "{shipping_city}: exibe a cidade de envio.", + "{shipping_pobox}: displays the shipping pobox.": "{shipping_pobox}: exibe o pobox de envio.", + "{shipping_company}: displays the shipping company.": "{shipping_company}: exibe a empresa de transporte.", + "{shipping_email}: displays the shipping email.": "{shipping_email}: exibe o e-mail de envio.", + "{billing_first_name}: displays the billing first name.": "{billing_first_name}: exibe o nome de cobrança.", + "{billing_last_name}: displays the billing last name.": "{billing_last_name}: exibe o sobrenome de cobrança.", + "{billing_phone}: displays the billing phone.": "{billing_phone}: exibe o telefone de cobrança.", + "{billing_address_1}: displays the billing address_1.": "{billing_address_1}: exibe o endereço de cobrança_1.", + "{billing_address_2}: displays the billing address_2.": "{billing_address_2}: exibe o endereço de cobrança_2.", + "{billing_country}: displays the billing country.": "{billing_country}: exibe o país de cobrança.", + "{billing_city}: displays the billing city.": "{billing_city}: exibe a cidade de cobrança.", + "{billing_pobox}: displays the billing pobox.": "{billing_pobox}: exibe o pobox de cobrança.", + "{billing_company}: displays the billing company.": "{billing_company}: exibe a empresa de cobrança.", + "{billing_email}: displays the billing email.": "{billing_email}: exibe o e-mail de cobrança.", + "Available tags :": "Etiquetas disponíveis:", + "Quick Product Default Unit": "Unidade padrão do produto rápido", + "Set what unit is assigned by default to all quick product.": "Defina qual unidade é atribuída por padrão a todos os produtos rápidos.", + "Hide Exhausted Products": "Ocultar produtos esgotados", + "Will hide exhausted products from selection on the POS.": "Ocultará produtos esgotados da seleção no PDV.", + "Hide Empty Category": "Ocultar categoria vazia", + "Category with no or exhausted products will be hidden from selection.": "A categoria sem produtos ou com produtos esgotados ficará oculta da seleção.", + "Default Printing (web)": "Impressão padrão (web)", + "The amount numbers shortcuts separated with a \"|\".": "A quantidade de atalhos de números separados por \"|\".", + "No submit URL was provided": "Nenhum URL de envio foi fornecido", + "Sorting is explicitely disabled on this column": "A classificação está explicitamente desativada nesta coluna", + "An unpexpected error occured while using the widget.": "Ocorreu um erro inesperado ao usar o widget.", + "This field must be similar to \"{other}\"\"": "Este campo deve ser semelhante a \"{other}\"\"", + "This field must have at least \"{length}\" characters\"": "Este campo deve ter pelo menos \"{length}\" caracteres\"", + "This field must have at most \"{length}\" characters\"": "Este campo deve ter no máximo \"{length}\" caracteres\"", + "This field must be different from \"{other}\"\"": "Este campo deve ser diferente de \"{other}\"\"", + "Search result": "Resultado da pesquisa", + "Choose...": "Escolher...", + "The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.": "O componente ${field.component} não pode ser carregado. Certifique-se de que esteja injetado no objeto nsExtraComponents.", + "+{count} other": "+{contar} outro", + "The selected print gateway doesn't support this type of printing.": "O gateway de impressão selecionado não oferece suporte a esse tipo de impressão.", + "millisecond| second| minute| hour| day| week| month| year| decade| century| millennium": "milissegundo | segundo| minuto | hora | dia | semana | mês | ano | década | século| milênio", + "milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia": "milissegundos | segundos | minutos | horas| dias| semanas | meses | anos | décadas | séculos | milênios", + "An error occured": "Um erro ocorreu", + "You\\'re about to delete selected resources. Would you like to proceed?": "Você está prestes a excluir os recursos selecionados. Gostaria de continuar?", + "See Error": "Ver erro", + "Your uploaded files will displays here.": "Seus arquivos enviados serão exibidos aqui.", + "Nothing to care about !": "Nada com que se preocupar!", + "Would you like to bulk edit a system role ?": "Gostaria de editar em massa uma função do sistema?", + "Total :": "Total:", + "Remaining :": "Restante :", + "Instalments:": "Parcelas:", + "This instalment doesn\\'t have any payment attached.": "Esta parcela não possui nenhum pagamento anexado.", + "You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?": "Você efetua um pagamento de {amount}. Um pagamento não pode ser cancelado. Gostaria de continuar ?", + "An error has occured while seleting the payment gateway.": "Ocorreu um erro ao selecionar o gateway de pagamento.", + "You're not allowed to add a discount on the product.": "Não é permitido adicionar desconto no produto.", + "You're not allowed to add a discount on the cart.": "Não é permitido adicionar desconto no carrinho.", + "Cash Register : {register}": "Caixa registradora: {registrar}", + "The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?": "O pedido atual será apagado. Mas não excluído se for persistente. Gostaria de continuar ?", + "You don't have the right to edit the purchase price.": "Você não tem o direito de editar o preço de compra.", + "Dynamic product can\\'t have their price updated.": "Produto dinâmico não pode ter seu preço atualizado.", + "You\\'re not allowed to edit the order settings.": "Você não tem permissão para editar as configurações do pedido.", + "Looks like there is either no products and no categories. How about creating those first to get started ?": "Parece que não há produtos nem categorias. Que tal criá-los primeiro para começar?", + "Create Categories": "Criar categorias", + "You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?": "Você está prestes a usar {amount} da conta do cliente para efetuar um pagamento. Gostaria de continuar ?", + "An unexpected error has occured while loading the form. Please check the log or contact the support.": "Ocorreu um erro inesperado ao carregar o formulário. Por favor, verifique o log ou entre em contato com o suporte.", + "We were not able to load the units. Make sure there are units attached on the unit group selected.": "Não conseguimos carregar as unidades. Certifique-se de que haja unidades anexadas ao grupo de unidades selecionado.", + "The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?": "A unidade atual que você está prestes a excluir tem uma referência no banco de dados e pode já ter adquirido estoque. A exclusão dessa referência removerá o estoque adquirido. Você prosseguiria?", + "There shoulnd\\'t be more option than there are units.": "Não deveria haver mais opções do que unidades.", + "Either Selling or Purchase unit isn\\'t defined. Unable to proceed.": "A unidade de venda ou compra não está definida. Não é possível prosseguir.", + "Select the procured unit first before selecting the conversion unit.": "Selecione primeiro a unidade adquirida antes de selecionar a unidade de conversão.", + "Convert to unit": "Converter para unidade", + "An unexpected error has occured": "Ocorreu um erro inesperado", + "Unable to add product which doesn\\'t unit quantities defined.": "Não foi possível adicionar produto que não tenha quantidades unitárias definidas.", + "{product}: Purchase Unit": "{produto}: unidade de compra", + "The product will be procured on that unit.": "O produto será adquirido nessa unidade.", + "Unkown Unit": "Unidade Desconhecida", + "Choose Tax": "Escolha Imposto", + "The tax will be assigned to the procured product.": "O imposto será atribuído ao produto adquirido.", + "Show Details": "Mostrar detalhes", + "Hide Details": "Detalhes ocultos", + "Important Notes": "Anotações importantes", + "Stock Management Products.": "Produtos de gerenciamento de estoque.", + "Doesn\\'t work with Grouped Product.": "Não funciona com produtos agrupados.", + "Convert": "Converter", + "Looks like no valid products matched the searched term.": "Parece que nenhum produto válido corresponde ao termo pesquisado.", + "This product doesn't have any stock to adjust.": "Este produto não possui estoque para ajuste.", + "Select Unit": "Selecione a unidade", + "Select the unit that you want to adjust the stock with.": "Selecione a unidade com a qual deseja ajustar o estoque.", + "A similar product with the same unit already exists.": "Já existe um produto semelhante com a mesma unidade.", + "Select Procurement": "Selecione Aquisição", + "Select the procurement that you want to adjust the stock with.": "Selecione a aquisição com a qual deseja ajustar o estoque.", + "Select Action": "Selecionar ação", + "Select the action that you want to perform on the stock.": "Selecione a ação que deseja executar no estoque.", + "Would you like to remove the selected products from the table ?": "Gostaria de remover os produtos selecionados da tabela?", + "Unit:": "Unidade:", + "Operation:": "Operação:", + "Procurement:": "Compras:", + "Reason:": "Razão:", + "Provided": "Oferecido", + "Not Provided": "Não fornecido", + "Remove Selected": "Remover selecionado", + "Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.": "Os tokens são usados para fornecer acesso seguro aos recursos do NexoPOS sem a necessidade de compartilhar seu nome de usuário e senha pessoais.\n Uma vez gerados, eles não expirarão até que você os revogue explicitamente.", + "You haven\\'t yet generated any token for your account. Create one to get started.": "Você ainda não gerou nenhum token para sua conta. Crie um para começar.", + "You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?": "Você está prestes a excluir um token que pode estar em uso por um aplicativo externo. A exclusão impedirá que o aplicativo acesse a API. Gostaria de continuar ?", + "Date Range : {date1} - {date2}": "Período: {data1} - {data2}", + "Document : Best Products": "Documento: Melhores Produtos", + "By : {user}": "Por: {usuário}", + "Range : {date1} — {date2}": "Intervalo: {data1} — {data2}", + "Document : Sale By Payment": "Documento: Venda por Pagamento", + "Document : Customer Statement": "Documento: Declaração do Cliente", + "Customer : {selectedCustomerName}": "Cliente: {selectedCustomerName}", + "All Categories": "todas as categorias", + "All Units": "Todas as unidades", + "Date : {date}": "Data: {data}", + "Document : {reportTypeName}": "Documento: {reportTypeName}", + "Threshold": "Limite", + "Select Units": "Selecione Unidades", + "An error has occured while loading the units.": "Ocorreu um erro ao carregar as unidades.", + "An error has occured while loading the categories.": "Ocorreu um erro ao carregar as categorias.", + "Document : Payment Type": "Documento: Tipo de Pagamento", + "Document : Profit Report": "Documento: Relatório de Lucro", + "Filter by Category": "Filtrar por categoria", + "Filter by Units": "Filtrar por unidades", + "An error has occured while loading the categories": "Ocorreu um erro ao carregar as categorias", + "An error has occured while loading the units": "Ocorreu um erro ao carregar as unidades", + "By Type": "Por tipo", + "By User": "Por usuário", + "By Category": "Por categoria", + "All Category": "Todas as categorias", + "Document : Sale Report": "Documento: Relatório de Venda", + "Filter By Category": "Filtrar por categoria", + "Allow you to choose the category.": "Permite que você escolha a categoria.", + "No category was found for proceeding the filtering.": "Nenhuma categoria foi encontrada para proceder à filtragem.", + "Document : Sold Stock Report": "Documento: Relatório de Estoque Vendido", + "Filter by Unit": "Filtrar por unidade", + "Limit Results By Categories": "Limitar resultados por categorias", + "Limit Results By Units": "Limitar resultados por unidades", + "Generate Report": "Gerar relatório", + "Document : Combined Products History": "Documento: História dos Produtos Combinados", + "Ini. Qty": "Ini. Quantidade", + "Added Quantity": "Quantidade Adicionada", + "Add. Qty": "Adicionar. Quantidade", + "Sold Quantity": "Quantidade Vendida", + "Sold Qty": "Quantidade vendida", + "Defective Quantity": "Quantidade defeituosa", + "Defec. Qty": "Defec. Quantidade", + "Final Quantity": "Quantidade Final", + "Final Qty": "Quantidade final", + "No data available": "Não há dados disponíveis", + "Document : Yearly Report": "Documento: Relatório Anual", + "The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.": "O relatório será computado para o ano em curso, um trabalho será enviado e você será informado assim que for concluído.", + "Unable to edit this transaction": "Não foi possível editar esta transação", + "This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.": "Esta transação foi criada com um tipo que não está mais disponível. Este tipo não está mais disponível porque o NexoPOS não consegue realizar solicitações em segundo plano.", + "Save Transaction": "Salvar transação", + "While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.": "Ao selecionar a transação da entidade, o valor definido será multiplicado pelo total de usuários atribuídos ao grupo de usuários selecionado.", + "The transaction is about to be saved. Would you like to confirm your action ?": "A transação está prestes a ser salva. Gostaria de confirmar sua ação?", + "Unable to load the transaction": "Não foi possível carregar a transação", + "You cannot edit this transaction if NexoPOS cannot perform background requests.": "Você não pode editar esta transação se o NexoPOS não puder realizar solicitações em segundo plano.", + "MySQL is selected as database driver": "MySQL é selecionado como driver de banco de dados", + "Please provide the credentials to ensure NexoPOS can connect to the database.": "Forneça as credenciais para garantir que o NexoPOS possa se conectar ao banco de dados.", + "Sqlite is selected as database driver": "Sqlite é selecionado como driver de banco de dados", + "Make sure Sqlite module is available for PHP. Your database will be located on the database directory.": "Certifique-se de que o módulo SQLite esteja disponível para PHP. Seu banco de dados estará localizado no diretório do banco de dados.", + "Checking database connectivity...": "Verificando a conectividade do banco de dados...", + "Driver": "Motorista", + "Set the database driver": "Defina o driver do banco de dados", + "Hostname": "nome de anfitrião", + "Provide the database hostname": "Forneça o nome do host do banco de dados", + "Username required to connect to the database.": "Nome de usuário necessário para conectar-se ao banco de dados.", + "The username password required to connect.": "A senha do nome de usuário necessária para conectar.", + "Database Name": "Nome do banco de dados", + "Provide the database name. Leave empty to use default file for SQLite Driver.": "Forneça o nome do banco de dados. Deixe em branco para usar o arquivo padrão do driver SQLite.", + "Database Prefix": "Prefixo do banco de dados", + "Provide the database prefix.": "Forneça o prefixo do banco de dados.", + "Port": "Porta", + "Provide the hostname port.": "Forneça a porta do nome do host.", + "NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.": "NexoPOS<\/strong> agora pode se conectar ao banco de dados. Comece criando a conta de administrador e dando um nome à sua instalação. Depois de instalada, esta página não estará mais acessível.", + "Install": "Instalar", + "Application": "Aplicativo", + "That is the application name.": "Esse é o nome do aplicativo.", + "Provide the administrator username.": "Forneça o nome de usuário do administrador.", + "Provide the administrator email.": "Forneça o e-mail do administrador.", + "What should be the password required for authentication.": "Qual deve ser a senha necessária para autenticação.", + "Should be the same as the password above.": "Deve ser igual à senha acima.", + "Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.": "Obrigado por usar o NexoPOS para gerenciar sua loja. Este assistente de instalação irá ajudá-lo a executar o NexoPOS rapidamente.", + "Choose your language to get started.": "Escolha seu idioma para começar.", + "Remaining Steps": "Etapas restantes", + "Database Configuration": "Configuração do banco de dados", + "Application Configuration": "Configuração do aplicativo", + "Language Selection": "Seleção de idioma", + "Select what will be the default language of NexoPOS.": "Selecione qual será o idioma padrão do NexoPOS.", + "In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.": "Para manter o NexoPOS funcionando perfeitamente com as atualizações, precisamos prosseguir com a migração do banco de dados. Na verdade você não precisa fazer nenhuma ação, apenas espere até que o processo seja concluído e você será redirecionado.", + "Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.": "Parece que ocorreu um erro durante a atualização. Normalmente, dar outra chance deve resolver isso. No entanto, se você ainda não tiver nenhuma chance.", + "Please report this message to the support : ": "Por favor, reporte esta mensagem ao suporte:", + "No refunds made so far. Good news right?": "Nenhum reembolso feito até agora. Boas notícias, certo?", + "Open Register : %s": "Registro aberto: %s", + "Loading Coupon For : ": "Carregando cupom para:", + "This coupon requires products that aren\\'t available on the cart at the moment.": "Este cupom requer produtos que não estão disponíveis no carrinho no momento.", + "This coupon requires products that belongs to specific categories that aren\\'t included at the moment.": "Este cupom requer produtos pertencentes a categorias específicas que não estão incluídas no momento.", + "Too many results.": "Muitos resultados.", + "New Customer": "Novo cliente", + "Purchases": "Compras", + "Owed": "Devida", + "Usage :": "Uso:", + "Code :": "Código:", + "Order Reference": "Referência do pedido", + "The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?": "O produto \"{product}\" não pode ser adicionado a partir de um campo de pesquisa, pois o \"Rastreamento Preciso\" está ativado. Você gostaria de saber mais?", + "{product} : Units": "{produto}: Unidades", + "This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.": "Este produto não possui nenhuma unidade definida para venda. Certifique-se de marcar pelo menos uma unidade como visível.", + "Previewing :": "Pré-visualização:", + "Search for options": "Procure opções", + "The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.": "O token da API foi gerado. Certifique-se de copiar este código em um local seguro, pois ele só será exibido uma vez.\n Se você perder este token, precisará revogá-lo e gerar um novo.", + "The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.": "O grupo de impostos selecionado não possui subimpostos atribuídos. Isso pode causar números errados.", + "The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.": "Os cupons \"%s\" foram removidos do carrinho, pois as condições exigidas não são mais atendidas.", + "The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.": "O pedido atual será anulado. Isso cancelará a transação, mas o pedido não será excluído. Mais detalhes sobre a operação serão acompanhados no relatório. Considere fornecer o motivo desta operação.", + "Invalid Error Message": "Mensagem de erro inválida", + "Unamed Settings Page": "Página de configurações sem nome", + "Description of unamed setting page": "Descrição da página de configuração sem nome", + "Text Field": "Campo de texto", + "This is a sample text field.": "Este é um campo de texto de exemplo.", + "No description has been provided.": "Nenhuma descrição foi fornecida.", + "You\\'re using NexoPOS %s<\/a>": "Você está usando NexoPOS %s<\/a >", + "If you haven\\'t asked this, please get in touch with the administrators.": "Se você ainda não perguntou isso, entre em contato com os administradores.", + "A new user has registered to your store (%s) with the email %s.": "Um novo usuário se registrou em sua loja (%s) com o e-mail %s.", + "The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.": "A conta que você criou para __%s__ foi criada com sucesso. Agora você pode fazer o login do usuário com seu nome de usuário (__%s__) e a senha que você definiu.", + "Note: ": "Observação:", + "Inclusive Product Taxes": "Impostos sobre produtos inclusivos", + "Exclusive Product Taxes": "Impostos exclusivos sobre produtos", + "Condition:": "Doença:", + "Date : %s": "Datas", + "NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.": "O NexoPOS não conseguiu realizar uma solicitação de banco de dados. Este erro pode estar relacionado a uma configuração incorreta em seu arquivo .env. O guia a seguir pode ser útil para ajudá-lo a resolver esse problema.", + "Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.": "Infelizmente, algo inesperado aconteceu. Você pode começar dando outra chance clicando em \"Tentar novamente\". Se o problema persistir, use a saída abaixo para receber suporte.", + "Retry": "Tentar novamente", + "If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.": "Se você vir esta página, significa que o NexoPOS está instalado corretamente em seu sistema. Como esta página pretende ser o frontend, o NexoPOS não possui frontend por enquanto. Esta página mostra links úteis que o levarão a recursos importantes.", + "Compute Products": "Produtos de computação", + "Unammed Section": "Seção não identificada", + "%s order(s) has recently been deleted as they have expired.": "%s pedidos foram excluídos recentemente porque expiraram.", + "%s products will be updated": "%s produtos serão atualizados", + "Procurement %s": "Aquisição %s", + "You cannot assign the same unit to more than one selling unit.": "Não é possível atribuir a mesma unidade a mais de uma unidade de venda.", + "The quantity to convert can\\'t be zero.": "A quantidade a ser convertida não pode ser zero.", + "The source unit \"(%s)\" for the product \"%s": "A unidade de origem \"(%s)\" do produto \"%s", + "The conversion from \"%s\" will cause a decimal value less than one count of the destination unit \"%s\".": "A conversão de \"%s\" causará um valor decimal menor que uma contagem da unidade de destino \"%s\".", + "{customer_first_name}: displays the customer first name.": "{customer_first_name}: exibe o nome do cliente.", + "{customer_last_name}: displays the customer last name.": "{customer_last_name}: exibe o sobrenome do cliente.", + "No Unit Selected": "Nenhuma unidade selecionada", + "Unit Conversion : {product}": "Conversão de Unidade: {produto}", + "Convert {quantity} available": "Converter {quantidade} disponível", + "The quantity should be greater than 0": "A quantidade deve ser maior que 0", + "The provided quantity can\\'t result in any convertion for unit \"{destination}\"": "A quantidade fornecida não pode resultar em nenhuma conversão para a unidade \"{destination}\"", + "Conversion Warning": "Aviso de conversão", + "Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?": "Somente {quantity}({source}) pode ser convertido em {destinationCount}({destination}). Gostaria de continuar ?", + "Confirm Conversion": "Confirmar conversão", + "You\\'re about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?": "Você está prestes a converter {quantity}({source}) em {destinationCount}({destination}). Gostaria de continuar?", + "Conversion Successful": "Conversão bem-sucedida", + "The product {product} has been converted successfully.": "O produto {product} foi convertido com sucesso.", + "An error occured while converting the product {product}": "Ocorreu um erro ao converter o produto {product}", + "The quantity has been set to the maximum available": "A quantidade foi definida para o máximo disponível", + "The product {product} has no base unit": "O produto {produto} não possui unidade base", + "Developper Section": "Seção do desenvolvedor", + "The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?": "O banco de dados será limpo e todos os dados apagados. Somente usuários e funções são mantidos. Gostaria de continuar ?", + "An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s": "Ocorreu um erro ao criar um código de barras \"%s\" usando o tipo \"%s\" para o produto. Certifique-se de que o valor do código de barras esteja correto para o tipo de código de barras selecionado. Informações adicionais: %s" +} \ No newline at end of file diff --git a/lang/sq.json b/lang/sq.json index 478749f5c..2597d32b4 100644 --- a/lang/sq.json +++ b/lang/sq.json @@ -1 +1,2696 @@ -{"An invalid date were provided. Make sure it a prior date to the actual server date.":"An invalid date were provided. Make sure it a prior date to the actual server date.","Computing report from %s...":"Computing report from %s...","The operation was successful.":"The operation was successful.","Unable to find a module having the identifier\/namespace \"%s\"":"Unable to find a module having the identifier\/namespace \"%s\"","What is the CRUD single resource name ? [Q] to quit.":"What is the CRUD single resource name ? [Q] to quit.","Please provide a valid value":"Please provide a valid value","Which table name should be used ? [Q] to quit.":"Which table name should be used ? [Q] to quit.","What slug should be used ? [Q] to quit.":"What slug should be used ? [Q] to quit.","Please provide a valid value.":"Ju lutem vendosni nje vlere te sakte.","If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.","Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.","The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"":"The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"","The CRUD resource \"%s\" has been generated at %s":"The CRUD resource \"%s\" has been generated at %s","An unexpected error has occurred.":"An unexpected error has occurred.","Localization for %s extracted to %s":"Localization for %s extracted to %s","Unable to find the requested module.":"Unable to find the requested module.","\"%s\" is a reserved class name":"\"%s\" is a reserved class name","The migration file has been successfully forgotten for the module %s.":"The migration file has been successfully forgotten for the module %s.","Name":"Emri","Namespace":"Namespace","Version":"Versioni","Author":"Autor","Enabled":"Aktiv","Yes":"Po","No":"Jo","Path":"Path","Index":"Index","Entry Class":"Entry Class","Routes":"Routes","Api":"Api","Controllers":"Controllers","Views":"Views","Dashboard":"Dashboard","Attribute":"Attribute","Value":"Value","There is no migrations to perform for the module \"%s\"":"There is no migrations to perform for the module \"%s\"","The module migration has successfully been performed for the module \"%s\"":"The module migration has successfully been performed for the module \"%s\"","The products taxes were computed successfully.":"Taksat e Produkteve u kalkuluan me sukses.","The product barcodes has been refreshed successfully.":"Barkodet e Produkteve u rifreskuan me Sukses.","The demo has been enabled.":"DEMO u aktivizua.","What is the store name ? [Q] to quit.":"Si eshte Emri i Dyqanit ? [Q] per te mbyllur.","Please provide at least 6 characters for store name.":"Please provide at least 6 characters for store name.","What is the administrator password ? [Q] to quit.":"What is the administrator password ? [Q] to quit.","Please provide at least 6 characters for the administrator password.":"Please provide at least 6 characters for the administrator password.","What is the administrator email ? [Q] to quit.":"What is the administrator email ? [Q] to quit.","Please provide a valid email for the administrator.":"Please provide a valid email for the administrator.","What is the administrator username ? [Q] to quit.":"What is the administrator username ? [Q] to quit.","Please provide at least 5 characters for the administrator username.":"Please provide at least 5 characters for the administrator username.","Downloading latest dev build...":"Downloading latest dev build...","Reset project to HEAD...":"Reset project to HEAD...","Provide a name to the resource.":"Caktoni nje emer per ta identifikuar.","General":"Te Pergjithshme","Operation":"Operation","By":"Nga","Date":"Data","Credit":"Credit","Debit":"Debit","Delete":"Fshi","Would you like to delete this ?":"Deshironi ta fshini kete ?","Delete Selected Groups":"Fshi Grupet e Zgjedhura","Coupons List":"Lista e Kuponave","Display all coupons.":"Shfaq te gjithe Kuponat.","No coupons has been registered":"Nuk ka Kupona te Regjistruar","Add a new coupon":"Shto nje Kupon te ri","Create a new coupon":"Krijo Kupon te ri","Register a new coupon and save it.":"Krijo dhe Ruaj Kupon te ri.","Edit coupon":"Edito Kupon","Modify Coupon.":"Modifiko Kupon.","Return to Coupons":"Kthehu tek Kuponat","Coupon Code":"Vendos Kod Kuponi","Might be used while printing the coupon.":"Mund te perdoret nese printoni kupona me kod zbritje.","Percentage Discount":"Zbritje me %","Flat Discount":"Zbritje Fikse","Type":"Tip Porosie","Define which type of discount apply to the current coupon.":"Zgjidh llojin e Zbritjes per kete Kupon.","Discount Value":"Vlera e Zbritjes","Define the percentage or flat value.":"Define the percentage or flat value.","Valid Until":"Valid Until","Minimum Cart Value":"Minimum Cart Value","What is the minimum value of the cart to make this coupon eligible.":"What is the minimum value of the cart to make this coupon eligible.","Maximum Cart Value":"Maximum Cart Value","Valid Hours Start":"Valid Hours Start","Define form which hour during the day the coupons is valid.":"Define form which hour during the day the coupons is valid.","Valid Hours End":"Valid Hours End","Define to which hour during the day the coupons end stop valid.":"Define to which hour during the day the coupons end stop valid.","Limit Usage":"Limit Usage","Define how many time a coupons can be redeemed.":"Define how many time a coupons can be redeemed.","Products":"Produkte","Select Products":"Zgjidh Produkte","The following products will be required to be present on the cart, in order for this coupon to be valid.":"The following products will be required to be present on the cart, in order for this coupon to be valid.","Categories":"Kategorite","Select Categories":"Zgjidh Kategorite","The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.":"The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.","Valid From":"E Vlefshme prej","Valid Till":"E Vlefshme deri me","Created At":"Krijuar me","N\/A":"N\/A","Undefined":"Undefined","Edit":"Edito","Delete a licence":"Delete a licence","Previous Amount":"Previous Amount","Amount":"Shuma","Next Amount":"Next Amount","Description":"Pershkrimi","Order":"Order","Restrict the records by the creation date.":"Restrict the records by the creation date.","Created Between":"Created Between","Operation Type":"Operation Type","Restrict the orders by the payment status.":"Restrict the orders by the payment status.","Restrict the records by the author.":"Restrict the records by the author.","Total":"Total","Customer Accounts List":"Customer Accounts List","Display all customer accounts.":"Display all customer accounts.","No customer accounts has been registered":"No customer accounts has been registered","Add a new customer account":"Add a new customer account","Create a new customer account":"Create a new customer account","Register a new customer account and save it.":"Register a new customer account and save it.","Edit customer account":"Edit customer account","Modify Customer Account.":"Modify Customer Account.","Return to Customer Accounts":"Return to Customer Accounts","This will be ignored.":"This will be ignored.","Define the amount of the transaction":"Define the amount of the transaction","Deduct":"Redukto","Add":"Shto","Define what operation will occurs on the customer account.":"Define what operation will occurs on the customer account.","Customer Coupons List":"Lista e Kuponave per Klientet","Display all customer coupons.":"Display all customer coupons.","No customer coupons has been registered":"No customer coupons has been registered","Add a new customer coupon":"Add a new customer coupon","Create a new customer coupon":"Create a new customer coupon","Register a new customer coupon and save it.":"Register a new customer coupon and save it.","Edit customer coupon":"Edit customer coupon","Modify Customer Coupon.":"Modify Customer Coupon.","Return to Customer Coupons":"Return to Customer Coupons","Usage":"Usage","Define how many time the coupon has been used.":"Define how many time the coupon has been used.","Limit":"Limit","Define the maximum usage possible for this coupon.":"Define the maximum usage possible for this coupon.","Customer":"Klienti","Code":"Code","Percentage":"Perqindje","Flat":"Vlere Monetare","Customers List":"Lista e Klienteve","Display all customers.":"Shfaq te gjithe Klientet.","No customers has been registered":"No customers has been registered","Add a new customer":"Shto nje Klient te Ri","Create a new customer":"Krijo nje Klient te Ri","Register a new customer and save it.":"Register a new customer and save it.","Edit customer":"Edito Klientin","Modify Customer.":"Modifiko Klientin.","Return to Customers":"Kthehu tek Klientet","Customer Name":"Emri i Klientit","Provide a unique name for the customer.":"Ploteso me nje Emer unik Klientim.","Credit Limit":"Credit Limit","Set what should be the limit of the purchase on credit.":"Set what should be the limit of the purchase on credit.","Group":"Grupi","Assign the customer to a group":"Assign the customer to a group","Birth Date":"Datelindja","Displays the customer birth date":"Displays the customer birth date","Email":"Email","Provide the customer email.":"Provide the customer email.","Phone Number":"Numri i Telefonit","Provide the customer phone number":"Provide the customer phone number","PO Box":"PO Box","Provide the customer PO.Box":"Provide the customer PO.Box","Not Defined":"Not Defined","Male":"Burre","Female":"Grua","Gender":"Gjinia","Billing Address":"Billing Address","Phone":"Phone","Billing phone number.":"Billing phone number.","Address 1":"Address 1","Billing First Address.":"Billing First Address.","Address 2":"Address 2","Billing Second Address.":"Billing Second Address.","Country":"Country","Billing Country.":"Billing Country.","City":"City","PO.Box":"PO.Box","Postal Address":"Postal Address","Company":"Company","Shipping Address":"Shipping Address","Shipping phone number.":"Shipping phone number.","Shipping First Address.":"Shipping First Address.","Shipping Second Address.":"Shipping Second Address.","Shipping Country.":"Shipping Country.","Account Credit":"Account Credit","Owed Amount":"Owed Amount","Purchase Amount":"Purchase Amount","Orders":"Porosi","Rewards":"Rewards","Coupons":"Kupona","Wallet History":"Wallet History","Delete a customers":"Delete a customers","Delete Selected Customers":"Delete Selected Customers","Customer Groups List":"Customer Groups List","Display all Customers Groups.":"Display all Customers Groups.","No Customers Groups has been registered":"No Customers Groups has been registered","Add a new Customers Group":"Add a new Customers Group","Create a new Customers Group":"Create a new Customers Group","Register a new Customers Group and save it.":"Register a new Customers Group and save it.","Edit Customers Group":"Edit Customers Group","Modify Customers group.":"Modify Customers group.","Return to Customers Groups":"Return to Customers Groups","Reward System":"Reward System","Select which Reward system applies to the group":"Select which Reward system applies to the group","Minimum Credit Amount":"Minimum Credit Amount","A brief description about what this group is about":"A brief description about what this group is about","Created On":"Created On","Customer Orders List":"Customer Orders List","Display all customer orders.":"Display all customer orders.","No customer orders has been registered":"No customer orders has been registered","Add a new customer order":"Add a new customer order","Create a new customer order":"Create a new customer order","Register a new customer order and save it.":"Register a new customer order and save it.","Edit customer order":"Edit customer order","Modify Customer Order.":"Modify Customer Order.","Return to Customer Orders":"Return to Customer Orders","Change":"Change","Created at":"Created at","Customer Id":"Customer Id","Delivery Status":"Delivery Status","Discount":"Zbritje","Discount Percentage":"Discount Percentage","Discount Type":"Discount Type","Final Payment Date":"Final Payment Date","Tax Excluded":"Tax Excluded","Id":"Id","Tax Included":"Tax Included","Payment Status":"Payment Status","Process Status":"Process Status","Shipping":"Shipping","Shipping Rate":"Shipping Rate","Shipping Type":"Shipping Type","Sub Total":"Sub Total","Tax Value":"Tax Value","Tendered":"Tendered","Title":"Title","Total installments":"Total installments","Updated at":"Updated at","Uuid":"Uuid","Voidance Reason":"Voidance Reason","Customer Rewards List":"Customer Rewards List","Display all customer rewards.":"Display all customer rewards.","No customer rewards has been registered":"No customer rewards has been registered","Add a new customer reward":"Add a new customer reward","Create a new customer reward":"Create a new customer reward","Register a new customer reward and save it.":"Register a new customer reward and save it.","Edit customer reward":"Edit customer reward","Modify Customer Reward.":"Modify Customer Reward.","Return to Customer Rewards":"Return to Customer Rewards","Points":"Points","Target":"Target","Reward Name":"Reward Name","Last Update":"Last Update","Accounts List":"Accounts List","Display All Accounts.":"Display All Accounts.","No Account has been registered":"No Account has been registered","Add a new Account":"Add a new Account","Create a new Account":"Create a new Account","Register a new Account and save it.":"Register a new Account and save it.","Edit Account":"Edit Account","Modify An Account.":"Modify An Account.","Return to Accounts":"Return to Accounts","All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.":"All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.","Account":"Account","Provide the accounting number for this category.":"Provide the accounting number for this category.","Active":"Active","Users Group":"Users Group","None":"None","Recurring":"Recurring","Start of Month":"Start of Month","Mid of Month":"Mid of Month","End of Month":"End of Month","X days Before Month Ends":"X days Before Month Ends","X days After Month Starts":"X days After Month Starts","Must be used in case of X days after month starts and X days before month ends.":"Must be used in case of X days after month starts and X days before month ends.","Category":"Category","Month Starts":"Month Starts","Month Middle":"Month Middle","Month Ends":"Month Ends","X Days Before Month Ends":"X Days Before Month Ends","Unknown Occurance":"Unknown Occurance","Product Histories":"Product Histories","Display all product stock flow.":"Display all product stock flow.","No products stock flow has been registered":"No products stock flow has been registered","Add a new products stock flow":"Add a new products stock flow","Create a new products stock flow":"Create a new products stock flow","Register a new products stock flow and save it.":"Register a new products stock flow and save it.","Edit products stock flow":"Edit products stock flow","Modify Globalproducthistorycrud.":"Modify Globalproducthistorycrud.","Return to Product Histories":"Return to Product Histories","Product":"Product","Procurement":"Procurement","Unit":"Unit","Initial Quantity":"Initial Quantity","Quantity":"Quantity","New Quantity":"New Quantity","Total Price":"Total Price","Added":"Added","Defective":"Defective","Deleted":"Deleted","Lost":"Lost","Removed":"Removed","Sold":"Sold","Stocked":"Stocked","Transfer Canceled":"Transfer Canceled","Incoming Transfer":"Incoming Transfer","Outgoing Transfer":"Outgoing Transfer","Void Return":"Void Return","Hold Orders List":"Hold Orders List","Display all hold orders.":"Display all hold orders.","No hold orders has been registered":"No hold orders has been registered","Add a new hold order":"Add a new hold order","Create a new hold order":"Create a new hold order","Register a new hold order and save it.":"Register a new hold order and save it.","Edit hold order":"Edit hold order","Modify Hold Order.":"Modify Hold Order.","Return to Hold Orders":"Return to Hold Orders","Updated At":"Updated At","Continue":"Continue","Restrict the orders by the creation date.":"Restrict the orders by the creation date.","Paid":"Paguar","Hold":"Ruaj","Partially Paid":"Paguar Pjeserisht","Partially Refunded":"Partially Refunded","Refunded":"Refunded","Unpaid":"Pa Paguar","Voided":"Voided","Due":"Due","Due With Payment":"Due With Payment","Restrict the orders by the author.":"Restrict the orders by the author.","Restrict the orders by the customer.":"Restrict the orders by the customer.","Customer Phone":"Customer Phone","Restrict orders using the customer phone number.":"Restrict orders using the customer phone number.","Cash Register":"Arka","Restrict the orders to the cash registers.":"Restrict the orders to the cash registers.","Orders List":"Orders List","Display all orders.":"Display all orders.","No orders has been registered":"No orders has been registered","Add a new order":"Add a new order","Create a new order":"Create a new order","Register a new order and save it.":"Register a new order and save it.","Edit order":"Edit order","Modify Order.":"Modify Order.","Return to Orders":"Return to Orders","Discount Rate":"Discount Rate","The order and the attached products has been deleted.":"The order and the attached products has been deleted.","Options":"Options","Refund Receipt":"Refund Receipt","Invoice":"Invoice","Receipt":"Receipt","Order Instalments List":"Order Instalments List","Display all Order Instalments.":"Display all Order Instalments.","No Order Instalment has been registered":"No Order Instalment has been registered","Add a new Order Instalment":"Add a new Order Instalment","Create a new Order Instalment":"Create a new Order Instalment","Register a new Order Instalment and save it.":"Register a new Order Instalment and save it.","Edit Order Instalment":"Edit Order Instalment","Modify Order Instalment.":"Modify Order Instalment.","Return to Order Instalment":"Return to Order Instalment","Order Id":"Order Id","Payment Types List":"Payment Types List","Display all payment types.":"Display all payment types.","No payment types has been registered":"No payment types has been registered","Add a new payment type":"Add a new payment type","Create a new payment type":"Create a new payment type","Register a new payment type and save it.":"Register a new payment type and save it.","Edit payment type":"Edit payment type","Modify Payment Type.":"Modify Payment Type.","Return to Payment Types":"Return to Payment Types","Label":"Label","Provide a label to the resource.":"Provide a label to the resource.","Priority":"Priority","Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".":"Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".","Identifier":"Identifier","A payment type having the same identifier already exists.":"A payment type having the same identifier already exists.","Unable to delete a read-only payments type.":"Unable to delete a read-only payments type.","Readonly":"Readonly","Procurements List":"Lista e Prokurimeve","Display all procurements.":"Shfaq te gjitha Prokurimet.","No procurements has been registered":"Nuk eshte regjistruar asnje Prokurim","Add a new procurement":"Shto nje Prokurim","Create a new procurement":"Krijo Prokurim te Ri","Register a new procurement and save it.":"Regjistro dhe Ruaj nje Prokurim.","Edit procurement":"Edito prokurimin","Modify Procurement.":"Modifiko Prokurimin.","Return to Procurements":"Return to Procurements","Provider Id":"Provider Id","Status":"Statusi","Total Items":"Total Items","Provider":"Provider","Invoice Date":"Invoice Date","Sale Value":"Sale Value","Purchase Value":"Purchase Value","Taxes":"Taksa","Set Paid":"Set Paid","Would you like to mark this procurement as paid?":"Would you like to mark this procurement as paid?","Refresh":"Rifresko","Would you like to refresh this ?":"Would you like to refresh this ?","Procurement Products List":"Procurement Products List","Display all procurement products.":"Display all procurement products.","No procurement products has been registered":"No procurement products has been registered","Add a new procurement product":"Add a new procurement product","Create a new procurement product":"Create a new procurement product","Register a new procurement product and save it.":"Register a new procurement product and save it.","Edit procurement product":"Edit procurement product","Modify Procurement Product.":"Modify Procurement Product.","Return to Procurement Products":"Return to Procurement Products","Expiration Date":"Expiration Date","Define what is the expiration date of the product.":"Define what is the expiration date of the product.","Barcode":"Barkodi","On":"On","Category Products List":"Category Products List","Display all category products.":"Display all category products.","No category products has been registered":"No category products has been registered","Add a new category product":"Add a new category product","Create a new category product":"Create a new category product","Register a new category product and save it.":"Register a new category product and save it.","Edit category product":"Edit category product","Modify Category Product.":"Modify Category Product.","Return to Category Products":"Return to Category Products","No Parent":"Pa Prind","Preview":"Preview","Provide a preview url to the category.":"Provide a preview url to the category.","Displays On POS":"Shfaqet ne POS","Parent":"Prindi","If this category should be a child category of an existing category":"If this category should be a child category of an existing category","Total Products":"Total Products","Products List":"Products List","Display all products.":"Display all products.","No products has been registered":"No products has been registered","Add a new product":"Add a new product","Create a new product":"Create a new product","Register a new product and save it.":"Register a new product and save it.","Edit product":"Edit product","Modify Product.":"Modify Product.","Return to Products":"Return to Products","Assigned Unit":"Assigned Unit","The assigned unit for sale":"The assigned unit for sale","Sale Price":"Sale Price","Define the regular selling price.":"Define the regular selling price.","Wholesale Price":"Wholesale Price","Define the wholesale price.":"Define the wholesale price.","Stock Alert":"Stock Alert","Define whether the stock alert should be enabled for this unit.":"Define whether the stock alert should be enabled for this unit.","Low Quantity":"Low Quantity","Which quantity should be assumed low.":"Which quantity should be assumed low.","Preview Url":"Preview Url","Provide the preview of the current unit.":"Provide the preview of the current unit.","Identification":"Identification","Select to which category the item is assigned.":"Select to which category the item is assigned.","Define the barcode value. Focus the cursor here before scanning the product.":"Define the barcode value. Focus the cursor here before scanning the product.","Define a unique SKU value for the product.":"Define a unique SKU value for the product.","SKU":"SKU","Define the barcode type scanned.":"Define the barcode type scanned.","EAN 8":"EAN 8","EAN 13":"EAN 13","Codabar":"Codabar","Code 128":"Code 128","Code 39":"Code 39","Code 11":"Code 11","UPC A":"UPC A","UPC E":"UPC E","Barcode Type":"Barcode Type","Materialized Product":"Materialized Product","Dematerialized Product":"Dematerialized Product","Grouped Product":"Grouped Product","Define the product type. Applies to all variations.":"Define the product type. Applies to all variations.","Product Type":"Product Type","On Sale":"On Sale","Hidden":"Hidden","Enable the stock management on the product. Will not work for service or uncountable products.":"Enable the stock management on the product. Will not work for service or uncountable products.","Stock Management Enabled":"Stock Management Enabled","Groups":"Groups","Units":"Units","Accurate Tracking":"Accurate Tracking","What unit group applies to the actual item. This group will apply during the procurement.":"What unit group applies to the actual item. This group will apply during the procurement.","Unit Group":"Unit Group","Determine the unit for sale.":"Determine the unit for sale.","Selling Unit":"Selling Unit","Expiry":"Expiry","Product Expires":"Product Expires","Set to \"No\" expiration time will be ignored.":"Set to \"No\" expiration time will be ignored.","Prevent Sales":"Prevent Sales","Allow Sales":"Allow Sales","Determine the action taken while a product has expired.":"Determine the action taken while a product has expired.","On Expiration":"On Expiration","Choose Group":"Choose Group","Select the tax group that applies to the product\/variation.":"Select the tax group that applies to the product\/variation.","Tax Group":"Tax Group","Inclusive":"Inclusive","Exclusive":"Exclusive","Define what is the type of the tax.":"Define what is the type of the tax.","Tax Type":"Tax Type","Images":"Images","Image":"Image","Choose an image to add on the product gallery":"Choose an image to add on the product gallery","Is Primary":"Is Primary","Sku":"Sku","Materialized":"Materialized","Dematerialized":"Dematerialized","Grouped":"Grouped","Disabled":"Disabled","Available":"Available","Unassigned":"Unassigned","See Quantities":"See Quantities","See History":"See History","Would you like to delete selected entries ?":"Would you like to delete selected entries ?","Display all product histories.":"Display all product histories.","No product histories has been registered":"No product histories has been registered","Add a new product history":"Add a new product history","Create a new product history":"Create a new product history","Register a new product history and save it.":"Register a new product history and save it.","Edit product history":"Edit product history","Modify Product History.":"Modify Product History.","After Quantity":"After Quantity","Before Quantity":"Before Quantity","Order id":"Order id","Procurement Id":"Procurement Id","Procurement Product Id":"Procurement Product Id","Product Id":"Product Id","Unit Id":"Unit Id","Unit Price":"Unit Price","P. Quantity":"P. Quantity","N. Quantity":"N. Quantity","Returned":"Returned","Transfer Rejected":"Transfer Rejected","Adjustment Return":"Adjustment Return","Adjustment Sale":"Adjustment Sale","Product Unit Quantities List":"Product Unit Quantities List","Display all product unit quantities.":"Display all product unit quantities.","No product unit quantities has been registered":"No product unit quantities has been registered","Add a new product unit quantity":"Add a new product unit quantity","Create a new product unit quantity":"Create a new product unit quantity","Register a new product unit quantity and save it.":"Register a new product unit quantity and save it.","Edit product unit quantity":"Edit product unit quantity","Modify Product Unit Quantity.":"Modify Product Unit Quantity.","Return to Product Unit Quantities":"Return to Product Unit Quantities","Created_at":"Created_at","Product id":"Product id","Updated_at":"Updated_at","Providers List":"Lista e Furnitoreve","Display all providers.":"Shfaq te gjithe Furnitoret.","No providers has been registered":"Nuk keni Regjistruar asnje Furnitor","Add a new provider":"Shto nje Furnitor te Ri","Create a new provider":"Krijo nje Furnitor","Register a new provider and save it.":"Regjistro dhe Ruaj nje Furnitor.","Edit provider":"Edito Furnitorin","Modify Provider.":"Modifiko Furnitorin.","Return to Providers":"Kthehu tek Furnitoret","First address of the provider.":"Adresa primare e Furnitorit.","Second address of the provider.":"Adresa sekondare e Furnitorit.","Further details about the provider":"Further details about the provider","Amount Due":"Amount Due","Amount Paid":"Amount Paid","See Procurements":"See Procurements","See Products":"Shiko Produktet","Provider Procurements List":"Provider Procurements List","Display all provider procurements.":"Display all provider procurements.","No provider procurements has been registered":"No provider procurements has been registered","Add a new provider procurement":"Add a new provider procurement","Create a new provider procurement":"Create a new provider procurement","Register a new provider procurement and save it.":"Register a new provider procurement and save it.","Edit provider procurement":"Edit provider procurement","Modify Provider Procurement.":"Modify Provider Procurement.","Return to Provider Procurements":"Return to Provider Procurements","Delivered On":"Delivered On","Tax":"Tax","Delivery":"Delivery","Payment":"Payment","Items":"Artikujt","Provider Products List":"Provider Products List","Display all Provider Products.":"Display all Provider Products.","No Provider Products has been registered":"No Provider Products has been registered","Add a new Provider Product":"Add a new Provider Product","Create a new Provider Product":"Create a new Provider Product","Register a new Provider Product and save it.":"Register a new Provider Product and save it.","Edit Provider Product":"Edit Provider Product","Modify Provider Product.":"Modify Provider Product.","Return to Provider Products":"Return to Provider Products","Purchase Price":"Purchase Price","Registers List":"Registers List","Display all registers.":"Display all registers.","No registers has been registered":"No registers has been registered","Add a new register":"Add a new register","Create a new register":"Create a new register","Register a new register and save it.":"Register a new register and save it.","Edit register":"Edit register","Modify Register.":"Modify Register.","Return to Registers":"Return to Registers","Closed":"Mbyllur","Define what is the status of the register.":"Define what is the status of the register.","Provide mode details about this cash register.":"Provide mode details about this cash register.","Unable to delete a register that is currently in use":"Unable to delete a register that is currently in use","Used By":"Perdorur nga","Balance":"Balance","Register History":"Historiku Arkes","Register History List":"Lista Historike e Arkes","Display all register histories.":"Display all register histories.","No register histories has been registered":"No register histories has been registered","Add a new register history":"Add a new register history","Create a new register history":"Create a new register history","Register a new register history and save it.":"Register a new register history and save it.","Edit register history":"Edit register history","Modify Registerhistory.":"Modify Registerhistory.","Return to Register History":"Return to Register History","Register Id":"Register Id","Action":"Action","Register Name":"Register Name","Initial Balance":"Initial Balance","New Balance":"New Balance","Transaction Type":"Transaction Type","Done At":"Done At","Unchanged":"Unchanged","Reward Systems List":"Reward Systems List","Display all reward systems.":"Display all reward systems.","No reward systems has been registered":"No reward systems has been registered","Add a new reward system":"Add a new reward system","Create a new reward system":"Create a new reward system","Register a new reward system and save it.":"Register a new reward system and save it.","Edit reward system":"Edit reward system","Modify Reward System.":"Modify Reward System.","Return to Reward Systems":"Return to Reward Systems","From":"Nga","The interval start here.":"The interval start here.","To":"Ne","The interval ends here.":"The interval ends here.","Points earned.":"Points earned.","Coupon":"Coupon","Decide which coupon you would apply to the system.":"Decide which coupon you would apply to the system.","This is the objective that the user should reach to trigger the reward.":"This is the objective that the user should reach to trigger the reward.","A short description about this system":"A short description about this system","Would you like to delete this reward system ?":"Would you like to delete this reward system ?","Delete Selected Rewards":"Delete Selected Rewards","Would you like to delete selected rewards?":"Would you like to delete selected rewards?","No Dashboard":"No Dashboard","Store Dashboard":"Store Dashboard","Cashier Dashboard":"Cashier Dashboard","Default Dashboard":"Default Dashboard","Roles List":"Roles List","Display all roles.":"Display all roles.","No role has been registered.":"No role has been registered.","Add a new role":"Add a new role","Create a new role":"Create a new role","Create a new role and save it.":"Create a new role and save it.","Edit role":"Edit role","Modify Role.":"Modify Role.","Return to Roles":"Return to Roles","Provide a name to the role.":"Provide a name to the role.","Should be a unique value with no spaces or special character":"Should be a unique value with no spaces or special character","Provide more details about what this role is about.":"Provide more details about what this role is about.","Unable to delete a system role.":"Unable to delete a system role.","Clone":"Clone","Would you like to clone this role ?":"Would you like to clone this role ?","You do not have enough permissions to perform this action.":"You do not have enough permissions to perform this action.","Taxes List":"Taxes List","Display all taxes.":"Display all taxes.","No taxes has been registered":"No taxes has been registered","Add a new tax":"Add a new tax","Create a new tax":"Create a new tax","Register a new tax and save it.":"Register a new tax and save it.","Edit tax":"Edit tax","Modify Tax.":"Modify Tax.","Return to Taxes":"Return to Taxes","Provide a name to the tax.":"Provide a name to the tax.","Assign the tax to a tax group.":"Assign the tax to a tax group.","Rate":"Rate","Define the rate value for the tax.":"Define the rate value for the tax.","Provide a description to the tax.":"Provide a description to the tax.","Taxes Groups List":"Lista e Grupeve te Taksave","Display all taxes groups.":"Display all taxes groups.","No taxes groups has been registered":"No taxes groups has been registered","Add a new tax group":"Add a new tax group","Create a new tax group":"Create a new tax group","Register a new tax group and save it.":"Register a new tax group and save it.","Edit tax group":"Edit tax group","Modify Tax Group.":"Modify Tax Group.","Return to Taxes Groups":"Return to Taxes Groups","Provide a short description to the tax group.":"Provide a short description to the tax group.","Units List":"Units List","Display all units.":"Display all units.","No units has been registered":"No units has been registered","Add a new unit":"Add a new unit","Create a new unit":"Create a new unit","Register a new unit and save it.":"Register a new unit and save it.","Edit unit":"Edit unit","Modify Unit.":"Modify Unit.","Return to Units":"Return to Units","Preview URL":"Preview URL","Preview of the unit.":"Preview of the unit.","Define the value of the unit.":"Define the value of the unit.","Define to which group the unit should be assigned.":"Define to which group the unit should be assigned.","Base Unit":"Base Unit","Determine if the unit is the base unit from the group.":"Determine if the unit is the base unit from the group.","Provide a short description about the unit.":"Provide a short description about the unit.","Unit Groups List":"Unit Groups List","Display all unit groups.":"Display all unit groups.","No unit groups has been registered":"No unit groups has been registered","Add a new unit group":"Add a new unit group","Create a new unit group":"Create a new unit group","Register a new unit group and save it.":"Register a new unit group and save it.","Edit unit group":"Edit unit group","Modify Unit Group.":"Modify Unit Group.","Return to Unit Groups":"Return to Unit Groups","Users List":"Users List","Display all users.":"Display all users.","No users has been registered":"No users has been registered","Add a new user":"Add a new user","Create a new user":"Create a new user","Register a new user and save it.":"Register a new user and save it.","Edit user":"Edit user","Modify User.":"Modify User.","Return to Users":"Return to Users","Username":"Username","Will be used for various purposes such as email recovery.":"Will be used for various purposes such as email recovery.","Password":"Password","Make a unique and secure password.":"Make a unique and secure password.","Confirm Password":"Confirm Password","Should be the same as the password.":"Should be the same as the password.","Define what roles applies to the user":"Define what roles applies to the user","Roles":"Roles","You cannot delete your own account.":"You cannot delete your own account.","Not Assigned":"Not Assigned","Access Denied":"Access Denied","Incompatibility Exception":"Incompatibility Exception","The request method is not allowed.":"The request method is not allowed.","Method Not Allowed":"Method Not Allowed","There is a missing dependency issue.":"There is a missing dependency issue.","Missing Dependency":"Missing Dependency","Module Version Mismatch":"Module Version Mismatch","The Action You Tried To Perform Is Not Allowed.":"The Action You Tried To Perform Is Not Allowed.","Not Allowed Action":"Not Allowed Action","The action you tried to perform is not allowed.":"The action you tried to perform is not allowed.","A Database Exception Occurred.":"A Database Exception Occurred.","Not Enough Permissions":"Not Enough Permissions","Unable to locate the assets.":"Unable to locate the assets.","Not Found Assets":"Not Found Assets","The resource of the page you tried to access is not available or might have been deleted.":"The resource of the page you tried to access is not available or might have been deleted.","Not Found Exception":"Not Found Exception","Query Exception":"Query Exception","An error occurred while validating the form.":"An error occurred while validating the form.","An error has occured":"An error has occured","Unable to proceed, the submitted form is not valid.":"Unable to proceed, the submitted form is not valid.","Unable to proceed the form is not valid":"Unable to proceed the form is not valid","This value is already in use on the database.":"This value is already in use on the database.","This field is required.":"This field is required.","This field should be checked.":"This field should be checked.","This field must be a valid URL.":"This field must be a valid URL.","This field is not a valid email.":"This field is not a valid email.","Provide your username.":"Provide your username.","Provide your password.":"Provide your password.","Provide your email.":"Provide your email.","Password Confirm":"Password Confirm","define the amount of the transaction.":"define the amount of the transaction.","Further observation while proceeding.":"Further observation while proceeding.","determine what is the transaction type.":"determine what is the transaction type.","Determine the amount of the transaction.":"Determine the amount of the transaction.","Further details about the transaction.":"Further details about the transaction.","Installments":"Installments","Define the installments for the current order.":"Define the installments for the current order.","New Password":"New Password","define your new password.":"define your new password.","confirm your new password.":"confirm your new password.","Select Payment":"Select Payment","choose the payment type.":"choose the payment type.","Define the order name.":"Define the order name.","Define the date of creation of the order.":"Define the date of creation of the order.","Provide the procurement name.":"Provide the procurement name.","Describe the procurement.":"Describe the procurement.","Define the provider.":"Define the provider.","Define what is the unit price of the product.":"Define what is the unit price of the product.","Condition":"Condition","Determine in which condition the product is returned.":"Determine in which condition the product is returned.","Damaged":"Damaged","Unspoiled":"Unspoiled","Other Observations":"Other Observations","Describe in details the condition of the returned product.":"Describe in details the condition of the returned product.","Mode":"Mode","Wipe All":"Wipe All","Wipe Plus Grocery":"Wipe Plus Grocery","Choose what mode applies to this demo.":"Choose what mode applies to this demo.","Set if the sales should be created.":"Set if the sales should be created.","Create Procurements":"Create Procurements","Will create procurements.":"Will create procurements.","Unit Group Name":"Unit Group Name","Provide a unit name to the unit.":"Provide a unit name to the unit.","Describe the current unit.":"Describe the current unit.","assign the current unit to a group.":"assign the current unit to a group.","define the unit value.":"define the unit value.","Provide a unit name to the units group.":"Provide a unit name to the units group.","Describe the current unit group.":"Describe the current unit group.","POS":"POS","Open POS":"Hap POS","Create Register":"Krijo Arke","Instalments":"Instalments","Procurement Name":"Emri i Prokurimit","Provide a name that will help to identify the procurement.":"Provide a name that will help to identify the procurement.","The profile has been successfully saved.":"The profile has been successfully saved.","The user attribute has been saved.":"The user attribute has been saved.","The options has been successfully updated.":"The options has been successfully updated.","Wrong password provided":"Wrong password provided","Wrong old password provided":"Wrong old password provided","Password Successfully updated.":"Password Successfully updated.","Use Customer Billing":"Use Customer Billing","General Shipping":"General Shipping","Define how the shipping is calculated.":"Define how the shipping is calculated.","Shipping Fees":"Shipping Fees","Define shipping fees.":"Define shipping fees.","Use Customer Shipping":"Use Customer Shipping","Invoice Number":"Invoice Number","If the procurement has been issued outside of NexoPOS, please provide a unique reference.":"If the procurement has been issued outside of NexoPOS, please provide a unique reference.","Delivery Time":"Delivery Time","If the procurement has to be delivered at a specific time, define the moment here.":"If the procurement has to be delivered at a specific time, define the moment here.","If you would like to define a custom invoice date.":"If you would like to define a custom invoice date.","Automatic Approval":"Automatic Approval","Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.":"Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.","Pending":"Pending","Delivered":"Delivered","Determine what is the actual payment status of the procurement.":"Determine what is the actual payment status of the procurement.","Determine what is the actual provider of the current procurement.":"Determine what is the actual provider of the current procurement.","First Name":"First Name","Theme":"Theme","Dark":"Dark","Light":"Light","Define what is the theme that applies to the dashboard.":"Define what is the theme that applies to the dashboard.","Avatar":"Avatar","Define the image that should be used as an avatar.":"Define the image that should be used as an avatar.","Language":"Language","Choose the language for the current account.":"Choose the language for the current account.","Security":"Security","Old Password":"Old Password","Provide the old password.":"Provide the old password.","Change your password with a better stronger password.":"Change your password with a better stronger password.","Password Confirmation":"Password Confirmation","Sign In — NexoPOS":"Sign In — NexoPOS","Sign Up — NexoPOS":"Sign Up — NexoPOS","No activation is needed for this account.":"No activation is needed for this account.","Invalid activation token.":"Invalid activation token.","The expiration token has expired.":"The expiration token has expired.","Your account is not activated.":"Your account is not activated.","Password Lost":"Password Lost","Unable to change a password for a non active user.":"Unable to change a password for a non active user.","Unable to proceed as the token provided is invalid.":"Unable to proceed as the token provided is invalid.","The token has expired. Please request a new activation token.":"The token has expired. Please request a new activation token.","Set New Password":"Set New Password","Database Update":"Database Update","This account is disabled.":"This account is disabled.","Unable to find record having that username.":"Unable to find record having that username.","Unable to find record having that password.":"Unable to find record having that password.","Invalid username or password.":"Invalid username or password.","Unable to login, the provided account is not active.":"Unable to login, the provided account is not active.","You have been successfully connected.":"You have been successfully connected.","The recovery email has been send to your inbox.":"The recovery email has been send to your inbox.","Unable to find a record matching your entry.":"Unable to find a record matching your entry.","Your Account has been successfully created.":"Your Account has been successfully created.","Your Account has been created but requires email validation.":"Your Account has been created but requires email validation.","Unable to find the requested user.":"Unable to find the requested user.","Unable to submit a new password for a non active user.":"Unable to submit a new password for a non active user.","Unable to proceed, the provided token is not valid.":"Unable to proceed, the provided token is not valid.","Unable to proceed, the token has expired.":"Unable to proceed, the token has expired.","Your password has been updated.":"Your password has been updated.","Unable to edit a register that is currently in use":"Unable to edit a register that is currently in use","No register has been opened by the logged user.":"No register has been opened by the logged user.","The register is opened.":"The register is opened.","Cash In":"Cash In","Cash Out":"Cash Out","Closing":"Closing","Opening":"Opening","Sale":"Sale","Refund":"Refund","Unable to find the category using the provided identifier":"Unable to find the category using the provided identifier","The category has been deleted.":"The category has been deleted.","Unable to find the category using the provided identifier.":"Unable to find the category using the provided identifier.","Unable to find the attached category parent":"Unable to find the attached category parent","The category has been correctly saved":"The category has been correctly saved","The category has been updated":"The category has been updated","The category products has been refreshed":"The category products has been refreshed","Unable to delete an entry that no longer exists.":"Unable to delete an entry that no longer exists.","The entry has been successfully deleted.":"The entry has been successfully deleted.","Unhandled crud resource":"Unhandled crud resource","You need to select at least one item to delete":"You need to select at least one item to delete","You need to define which action to perform":"You need to define which action to perform","%s has been processed, %s has not been processed.":"%s has been processed, %s has not been processed.","Unable to proceed. No matching CRUD resource has been found.":"Unable to proceed. No matching CRUD resource has been found.","The requested file cannot be downloaded or has already been downloaded.":"The requested file cannot be downloaded or has already been downloaded.","Void":"Anulo","Create Coupon":"Krijo Kupon","helps you creating a coupon.":"Plotesoni te dhenat e meposhtme.","Edit Coupon":"Edit Coupon","Editing an existing coupon.":"Editing an existing coupon.","Invalid Request.":"Invalid Request.","Displays the customer account history for %s":"Displays the customer account history for %s","Unable to delete a group to which customers are still assigned.":"Unable to delete a group to which customers are still assigned.","The customer group has been deleted.":"The customer group has been deleted.","Unable to find the requested group.":"Unable to find the requested group.","The customer group has been successfully created.":"The customer group has been successfully created.","The customer group has been successfully saved.":"The customer group has been successfully saved.","Unable to transfer customers to the same account.":"Unable to transfer customers to the same account.","No customer identifier has been provided to proceed to the transfer.":"No customer identifier has been provided to proceed to the transfer.","Unable to find the requested group using the provided id.":"Unable to find the requested group using the provided id.","Expenses":"Shpenzimet","\"%s\" is not an instance of \"FieldsService\"":"\"%s\" is not an instance of \"FieldsService\"","Manage Medias":"Manage Medias","Modules List":"Modules List","List all available modules.":"List all available modules.","Upload A Module":"Upload A Module","Extends NexoPOS features with some new modules.":"Extends NexoPOS features with some new modules.","The notification has been successfully deleted":"The notification has been successfully deleted","Payment Receipt — %s":"Payment Receipt — %s","Order Invoice — %s":"Order Invoice — %s","Order Refund Receipt — %s":"Order Refund Receipt — %s","Order Receipt — %s":"Order Receipt — %s","The printing event has been successfully dispatched.":"The printing event has been successfully dispatched.","There is a mismatch between the provided order and the order attached to the instalment.":"There is a mismatch between the provided order and the order attached to the instalment.","Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.":"Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.","You cannot change the status of an already paid procurement.":"You cannot change the status of an already paid procurement.","The procurement payment status has been changed successfully.":"The procurement payment status has been changed successfully.","The procurement has been marked as paid.":"The procurement has been marked as paid.","New Procurement":"Prokurim i Ri","Make a new procurement.":"Prokurim i Ri.","Edit Procurement":"Edito Prokurim","Perform adjustment on existing procurement.":"Perform adjustment on existing procurement.","%s - Invoice":"%s - Invoice","list of product procured.":"lista e produkteve te prokuruar.","The product price has been refreshed.":"The product price has been refreshed.","The single variation has been deleted.":"The single variation has been deleted.","Edit a product":"Edito produkt","Makes modifications to a product":"Makes modifications to a product","Create a product":"Create a product","Add a new product on the system":"Add a new product on the system","Stock Adjustment":"Stock Adjustment","Adjust stock of existing products.":"Adjust stock of existing products.","No stock is provided for the requested product.":"No stock is provided for the requested product.","The product unit quantity has been deleted.":"The product unit quantity has been deleted.","Unable to proceed as the request is not valid.":"Unable to proceed as the request is not valid.","Unsupported action for the product %s.":"Unsupported action for the product %s.","The stock has been adjustment successfully.":"The stock has been adjustment successfully.","Unable to add the product to the cart as it has expired.":"Unable to add the product to the cart as it has expired.","Unable to add a product that has accurate tracking enabled, using an ordinary barcode.":"Unable to add a product that has accurate tracking enabled, using an ordinary barcode.","There is no products matching the current request.":"There is no products matching the current request.","Print Labels":"Print Labels","Customize and print products labels.":"Customize and print products labels.","Procurements by \"%s\"":"Procurements by \"%s\"","Sales Report":"Sales Report","Provides an overview over the sales during a specific period":"Provides an overview over the sales during a specific period","Sales Progress":"Progesi Shitjeve","Provides an overview over the best products sold during a specific period.":"Provides an overview over the best products sold during a specific period.","Sold Stock":"Sold Stock","Provides an overview over the sold stock during a specific period.":"Provides an overview over the sold stock during a specific period.","Stock Report":"Stock Report","Provides an overview of the products stock.":"Provides an overview of the products stock.","Profit Report":"Profit Report","Provides an overview of the provide of the products sold.":"Provides an overview of the provide of the products sold.","Provides an overview on the activity for a specific period.":"Provides an overview on the activity for a specific period.","Annual Report":"Raport Vjetor","Sales By Payment Types":"Sales By Payment Types","Provide a report of the sales by payment types, for a specific period.":"Provide a report of the sales by payment types, for a specific period.","The report will be computed for the current year.":"The report will be computed for the current year.","Unknown report to refresh.":"Unknown report to refresh.","Customers Statement":"Gjendje e Klienteve","Display the complete customer statement.":"Display the complete customer statement.","Invalid authorization code provided.":"Invalid authorization code provided.","The database has been successfully seeded.":"The database has been successfully seeded.","About":"About","Details about the environment.":"Details about the environment.","Core Version":"Core Version","Laravel Version":"Laravel Version","PHP Version":"PHP Version","Mb String Enabled":"Mb String Enabled","Zip Enabled":"Zip Enabled","Curl Enabled":"Curl Enabled","Math Enabled":"Math Enabled","XML Enabled":"XML Enabled","XDebug Enabled":"XDebug Enabled","File Upload Enabled":"File Upload Enabled","File Upload Size":"File Upload Size","Post Max Size":"Post Max Size","Max Execution Time":"Max Execution Time","Memory Limit":"Memory Limit","Settings Page Not Found":"Settings Page Not Found","Customers Settings":"Customers Settings","Configure the customers settings of the application.":"Configure the customers settings of the application.","General Settings":"Cilesimet Kryesore","Configure the general settings of the application.":"Konfiguroni cilesimet Kryesore te Programit.","Orders Settings":"Cilesimet e Porosive","POS Settings":"Cilesimet e POS","Configure the pos settings.":"Konfiguroni Cilesimet e POS.","Workers Settings":"Workers Settings","%s is not an instance of \"%s\".":"%s is not an instance of \"%s\".","Unable to find the requested product tax using the provided identifier.":"Unable to find the requested product tax using the provided identifier.","The product tax has been created.":"The product tax has been created.","The product tax has been updated":"The product tax has been updated","Permission Manager":"Permission Manager","Manage all permissions and roles":"Manage all permissions and roles","My Profile":"My Profile","Change your personal settings":"Change your personal settings","The permissions has been updated.":"The permissions has been updated.","Sunday":"E Diele","Monday":"E Hene","Tuesday":"E Marte","Wednesday":"E Merkure","Thursday":"E Enjte","Friday":"E Premte","Saturday":"E Shtune","The migration has successfully run.":"The migration has successfully run.","Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.":"Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.","Unable to register. The registration is closed.":"Unable to register. The registration is closed.","Hold Order Cleared":"Hold Order Cleared","Report Refreshed":"Report Refreshed","The yearly report has been successfully refreshed for the year \"%s\".":"The yearly report has been successfully refreshed for the year \"%s\".","Low Stock Alert":"Low Stock Alert","Procurement Refreshed":"Procurement Refreshed","The procurement \"%s\" has been successfully refreshed.":"The procurement \"%s\" has been successfully refreshed.","The transaction was deleted.":"The transaction was deleted.","[NexoPOS] Activate Your Account":"[NexoPOS] Activate Your Account","[NexoPOS] A New User Has Registered":"[NexoPOS] A New User Has Registered","[NexoPOS] Your Account Has Been Created":"[NexoPOS] Your Account Has Been Created","Unknown Payment":"Unknown Payment","Unable to find the permission with the namespace \"%s\".":"Unable to find the permission with the namespace \"%s\".","Partially Due":"Partially Due","Take Away":"Take Away","The register has been successfully opened":"The register has been successfully opened","The register has been successfully closed":"The register has been successfully closed","The provided amount is not allowed. The amount should be greater than \"0\". ":"The provided amount is not allowed. The amount should be greater than \"0\". ","The cash has successfully been stored":"The cash has successfully been stored","Not enough fund to cash out.":"Not enough fund to cash out.","The cash has successfully been disbursed.":"The cash has successfully been disbursed.","In Use":"In Use","Opened":"Opened","Delete Selected entries":"Delete Selected entries","%s entries has been deleted":"%s entries has been deleted","%s entries has not been deleted":"%s entries has not been deleted","A new entry has been successfully created.":"A new entry has been successfully created.","The entry has been successfully updated.":"Ndryshimet u ruajten me Sukses.","Unidentified Item":"Unidentified Item","Unable to delete this resource as it has %s dependency with %s item.":"Unable to delete this resource as it has %s dependency with %s item.","Unable to delete this resource as it has %s dependency with %s items.":"Unable to delete this resource as it has %s dependency with %s items.","Unable to find the customer using the provided id.":"Unable to find the customer using the provided id.","The customer has been deleted.":"The customer has been deleted.","The customer has been created.":"The customer has been created.","Unable to find the customer using the provided ID.":"Unable to find the customer using the provided ID.","The customer has been edited.":"The customer has been edited.","Unable to find the customer using the provided email.":"Unable to find the customer using the provided email.","The customer account has been updated.":"The customer account has been updated.","Issuing Coupon Failed":"Issuing Coupon Failed","Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.":"Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.","Unable to find a coupon with the provided code.":"Unable to find a coupon with the provided code.","The coupon has been updated.":"The coupon has been updated.","The group has been created.":"The group has been created.","Crediting":"Crediting","Deducting":"Deducting","Order Payment":"Order Payment","Order Refund":"Order Refund","Unknown Operation":"Unknown Operation","Countable":"Countable","Piece":"Piece","Sales Account":"Sales Account","Procurements Account":"Procurements Account","Sale Refunds Account":"Sale Refunds Account","Spoiled Goods Account":"Spoiled Goods Account","Customer Crediting Account":"Customer Crediting Account","Customer Debiting Account":"Customer Debiting Account","GST":"GST","SGST":"SGST","CGST":"CGST","Sample Procurement %s":"Sample Procurement %s","generated":"generated","The user attributes has been updated.":"The user attributes has been updated.","Administrator":"Administrator","Store Administrator":"Store Administrator","Store Cashier":"Store Cashier","User":"User","%s products were freed":"%s products were freed","Restoring cash flow from paid orders...":"Restoring cash flow from paid orders...","Restoring cash flow from refunded orders...":"Restoring cash flow from refunded orders...","Unable to find the requested account type using the provided id.":"Unable to find the requested account type using the provided id.","You cannot delete an account type that has transaction bound.":"You cannot delete an account type that has transaction bound.","The account type has been deleted.":"The account type has been deleted.","The account has been created.":"The account has been created.","Customer Credit Account":"Customer Credit Account","Customer Debit Account":"Customer Debit Account","Sales Refunds Account":"Sales Refunds Account","Register Cash-In Account":"Register Cash-In Account","Register Cash-Out Account":"Register Cash-Out Account","The media has been deleted":"The media has been deleted","Unable to find the media.":"Unable to find the media.","Unable to find the requested file.":"Unable to find the requested file.","Unable to find the media entry":"Unable to find the media entry","Home":"Home","Payment Types":"Payment Types","Medias":"Media","Customers":"Klientet","List":"Listo","Create Customer":"Krijo Klient","Customers Groups":"Customers Groups","Create Group":"Create Group","Reward Systems":"Reward Systems","Create Reward":"Create Reward","List Coupons":"Listo Kupona","Providers":"Furnitoret","Create A Provider":"Krijo Furnitor","Accounting":"Accounting","Accounts":"Accounts","Create Account":"Create Account","Inventory":"Inventari","Create Product":"Krijo Produkt","Create Category":"Krijo Kategori","Create Unit":"Krijo Njesi","Unit Groups":"Grupet e Njesive","Create Unit Groups":"Krijo Grup Njesish","Stock Flow Records":"Stock Flow Records","Taxes Groups":"Grupet e Taksave","Create Tax Groups":"Krijo Grup Taksash","Create Tax":"Krijo Takse","Modules":"Module","Upload Module":"Upload Module","Users":"Perdoruesit","Create User":"Krijo Perdorues","Create Roles":"Krijo Role","Permissions Manager":"Permissions Manager","Profile":"Profili","Procurements":"Prokurimet","Reports":"Raporte","Sale Report":"Raport Shitjesh","Incomes & Loosses":"Fitimi & Humbjet","Sales By Payments":"Shitjet sipas Pagesave","Settings":"Settings","Invoice Settings":"Invoice Settings","Workers":"Workers","Reset":"Reset","Unable to locate the requested module.":"Unable to locate the requested module.","The module \"%s\" has been disabled as the dependency \"%s\" is missing. ":"The module \"%s\" has been disabled as the dependency \"%s\" is missing. ","The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ":"The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ","The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ":"The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ","The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ":"The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ","Unable to detect the folder from where to perform the installation.":"Unable to detect the folder from where to perform the installation.","The uploaded file is not a valid module.":"The uploaded file is not a valid module.","The module has been successfully installed.":"The module has been successfully installed.","The migration run successfully.":"The migration run successfully.","The module has correctly been enabled.":"The module has correctly been enabled.","Unable to enable the module.":"Unable to enable the module.","The Module has been disabled.":"The Module has been disabled.","Unable to disable the module.":"Unable to disable the module.","Unable to proceed, the modules management is disabled.":"Unable to proceed, the modules management is disabled.","A similar module has been found":"A similar module has been found","Missing required parameters to create a notification":"Missing required parameters to create a notification","The order has been placed.":"The order has been placed.","The percentage discount provided is not valid.":"The percentage discount provided is not valid.","A discount cannot exceed the sub total value of an order.":"A discount cannot exceed the sub total value of an order.","No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.":"No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.","The payment has been saved.":"The payment has been saved.","Unable to edit an order that is completely paid.":"Unable to edit an order that is completely paid.","Unable to proceed as one of the previous submitted payment is missing from the order.":"Unable to proceed as one of the previous submitted payment is missing from the order.","The order payment status cannot switch to hold as a payment has already been made on that order.":"The order payment status cannot switch to hold as a payment has already been made on that order.","Unable to proceed. One of the submitted payment type is not supported.":"Unable to proceed. One of the submitted payment type is not supported.","Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.":"Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.","Unable to find the customer using the provided ID. The order creation has failed.":"Unable to find the customer using the provided ID. The order creation has failed.","Unable to proceed a refund on an unpaid order.":"Unable to proceed a refund on an unpaid order.","The current credit has been issued from a refund.":"The current credit has been issued from a refund.","The order has been successfully refunded.":"The order has been successfully refunded.","unable to proceed to a refund as the provided status is not supported.":"unable to proceed to a refund as the provided status is not supported.","The product %s has been successfully refunded.":"The product %s has been successfully refunded.","Unable to find the order product using the provided id.":"Unable to find the order product using the provided id.","Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier":"Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier","Unable to fetch the order as the provided pivot argument is not supported.":"Unable to fetch the order as the provided pivot argument is not supported.","The product has been added to the order \"%s\"":"The product has been added to the order \"%s\"","The order has been deleted.":"The order has been deleted.","The product has been successfully deleted from the order.":"The product has been successfully deleted from the order.","Unable to find the requested product on the provider order.":"Unable to find the requested product on the provider order.","Ongoing":"Ongoing","Ready":"Gati","Not Available":"Not Available","Failed":"Failed","Unpaid Orders Turned Due":"Unpaid Orders Turned Due","No orders to handle for the moment.":"No orders to handle for the moment.","The order has been correctly voided.":"The order has been correctly voided.","Unable to edit an already paid instalment.":"Unable to edit an already paid instalment.","The instalment has been saved.":"The instalment has been saved.","The instalment has been deleted.":"The instalment has been deleted.","The defined amount is not valid.":"The defined amount is not valid.","No further instalments is allowed for this order. The total instalment already covers the order total.":"No further instalments is allowed for this order. The total instalment already covers the order total.","The instalment has been created.":"The instalment has been created.","The provided status is not supported.":"The provided status is not supported.","The order has been successfully updated.":"The order has been successfully updated.","Unable to find the requested procurement using the provided identifier.":"Unable to find the requested procurement using the provided identifier.","Unable to find the assigned provider.":"Unable to find the assigned provider.","The procurement has been created.":"The procurement has been created.","Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.":"Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.","The provider has been edited.":"The provider has been edited.","Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"":"Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"","The operation has completed.":"The operation has completed.","The procurement has been refreshed.":"The procurement has been refreshed.","The procurement has been reset.":"The procurement has been reset.","The procurement products has been deleted.":"The procurement products has been deleted.","The procurement product has been updated.":"The procurement product has been updated.","Unable to find the procurement product using the provided id.":"Unable to find the procurement product using the provided id.","The product %s has been deleted from the procurement %s":"The product %s has been deleted from the procurement %s","The product with the following ID \"%s\" is not initially included on the procurement":"The product with the following ID \"%s\" is not initially included on the procurement","The procurement products has been updated.":"The procurement products has been updated.","Procurement Automatically Stocked":"Procurement Automatically Stocked","Draft":"Draft","The category has been created":"The category has been created","Unable to find the product using the provided id.":"Unable to find the product using the provided id.","Unable to find the requested product using the provided SKU.":"Unable to find the requested product using the provided SKU.","The variable product has been created.":"The variable product has been created.","The provided barcode \"%s\" is already in use.":"The provided barcode \"%s\" is already in use.","The provided SKU \"%s\" is already in use.":"The provided SKU \"%s\" is already in use.","The product has been saved.":"The product has been saved.","A grouped product cannot be saved without any sub items.":"A grouped product cannot be saved without any sub items.","A grouped product cannot contain grouped product.":"A grouped product cannot contain grouped product.","The provided barcode is already in use.":"The provided barcode is already in use.","The provided SKU is already in use.":"The provided SKU is already in use.","The subitem has been saved.":"The subitem has been saved.","The variable product has been updated.":"The variable product has been updated.","The product variations has been reset":"The product variations has been reset","The product \"%s\" has been successfully deleted":"The product \"%s\" has been successfully deleted","Unable to find the requested variation using the provided ID.":"Unable to find the requested variation using the provided ID.","The product stock has been updated.":"The product stock has been updated.","The action is not an allowed operation.":"The action is not an allowed operation.","The product quantity has been updated.":"The product quantity has been updated.","There is no variations to delete.":"There is no variations to delete.","There is no products to delete.":"There is no products to delete.","The product variation has been updated.":"The product variation has been updated.","The provider has been created.":"The provider has been created.","The provider has been updated.":"The provider has been updated.","Unable to find the provider using the specified id.":"Unable to find the provider using the specified id.","The provider has been deleted.":"The provider has been deleted.","Unable to find the provider using the specified identifier.":"Unable to find the provider using the specified identifier.","The provider account has been updated.":"The provider account has been updated.","The procurement payment has been deducted.":"The procurement payment has been deducted.","The dashboard report has been updated.":"The dashboard report has been updated.","Untracked Stock Operation":"Untracked Stock Operation","Unsupported action":"Unsupported action","The expense has been correctly saved.":"The expense has been correctly saved.","The report has been computed successfully.":"The report has been computed successfully.","The table has been truncated.":"The table has been truncated.","Untitled Settings Page":"Untitled Settings Page","No description provided for this settings page.":"No description provided for this settings page.","The form has been successfully saved.":"The form has been successfully saved.","Unable to reach the host":"Unable to reach the host","Unable to connect to the database using the credentials provided.":"Unable to connect to the database using the credentials provided.","Unable to select the database.":"Unable to select the database.","Access denied for this user.":"Access denied for this user.","Incorrect Authentication Plugin Provided.":"Incorrect Authentication Plugin Provided.","The connexion with the database was successful":"The connexion with the database was successful","Cash":"Kesh","Bank Payment":"Pagese me Banke","Customer Account":"Llogaria e Klientit","Database connection was successful.":"Database connection was successful.","A tax cannot be his own parent.":"A tax cannot be his own parent.","The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".":"The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".","Unable to find the requested tax using the provided identifier.":"Unable to find the requested tax using the provided identifier.","The tax group has been correctly saved.":"The tax group has been correctly saved.","The tax has been correctly created.":"The tax has been correctly created.","The tax has been successfully deleted.":"The tax has been successfully deleted.","The Unit Group has been created.":"The Unit Group has been created.","The unit group %s has been updated.":"The unit group %s has been updated.","Unable to find the unit group to which this unit is attached.":"Unable to find the unit group to which this unit is attached.","The unit has been saved.":"The unit has been saved.","Unable to find the Unit using the provided id.":"Unable to find the Unit using the provided id.","The unit has been updated.":"The unit has been updated.","The unit group %s has more than one base unit":"The unit group %s has more than one base unit","The unit has been deleted.":"The unit has been deleted.","The %s is already taken.":"The %s is already taken.","Clone of \"%s\"":"Clone of \"%s\"","The role has been cloned.":"The role has been cloned.","unable to find this validation class %s.":"unable to find this validation class %s.","Store Name":"Emri Kompanise","This is the store name.":"Plotesoni Emrin e Kompanise.","Store Address":"Adresa e Kompanise","The actual store address.":"Adresa Aktuale.","Store City":"Qyteti Kompanise","The actual store city.":"Qyteti Aktual.","Store Phone":"Telefoni","The phone number to reach the store.":"The phone number to reach the store.","Store Email":"Store Email","The actual store email. Might be used on invoice or for reports.":"The actual store email. Might be used on invoice or for reports.","Store PO.Box":"Store PO.Box","The store mail box number.":"The store mail box number.","Store Fax":"Store Fax","The store fax number.":"The store fax number.","Store Additional Information":"Store Additional Information","Store Square Logo":"Store Square Logo","Choose what is the square logo of the store.":"Choose what is the square logo of the store.","Store Rectangle Logo":"Store Rectangle Logo","Choose what is the rectangle logo of the store.":"Choose what is the rectangle logo of the store.","Define the default fallback language.":"Define the default fallback language.","Define the default theme.":"Define the default theme.","Currency":"Currency","Currency Symbol":"Currency Symbol","This is the currency symbol.":"This is the currency symbol.","Currency ISO":"Currency ISO","The international currency ISO format.":"The international currency ISO format.","Currency Position":"Currency Position","Before the amount":"Before the amount","After the amount":"After the amount","Define where the currency should be located.":"Define where the currency should be located.","ISO Currency":"ISO Currency","Symbol":"Symbol","Determine what is the currency indicator that should be used.":"Determine what is the currency indicator that should be used.","Currency Thousand Separator":"Currency Thousand Separator","Currency Decimal Separator":"Currency Decimal Separator","Define the symbol that indicate decimal number. By default \".\" is used.":"Define the symbol that indicate decimal number. By default \".\" is used.","Currency Precision":"Currency Precision","%s numbers after the decimal":"%s numbers after the decimal","Date Format":"Date Format","This define how the date should be defined. The default format is \"Y-m-d\".":"This define how the date should be defined. The default format is \"Y-m-d\".","Registration":"Registration","Registration Open":"Registration Open","Determine if everyone can register.":"Determine if everyone can register.","Registration Role":"Registration Role","Select what is the registration role.":"Select what is the registration role.","Requires Validation":"Requires Validation","Force account validation after the registration.":"Force account validation after the registration.","Allow Recovery":"Allow Recovery","Allow any user to recover his account.":"Allow any user to recover his account.","Procurement Cash Flow Account":"Procurement Cash Flow Account","Sale Cash Flow Account":"Sale Cash Flow Account","Stock return for spoiled items will be attached to this account":"Stock return for spoiled items will be attached to this account","Enable Reward":"Enable Reward","Will activate the reward system for the customers.":"Will activate the reward system for the customers.","Require Valid Email":"Require Valid Email","Will for valid unique email for every customer.":"Will for valid unique email for every customer.","Require Unique Phone":"Require Unique Phone","Every customer should have a unique phone number.":"Every customer should have a unique phone number.","Default Customer Account":"Default Customer Account","Default Customer Group":"Default Customer Group","Select to which group each new created customers are assigned to.":"Select to which group each new created customers are assigned to.","Enable Credit & Account":"Enable Credit & Account","The customers will be able to make deposit or obtain credit.":"The customers will be able to make deposit or obtain credit.","Receipts":"Receipts","Receipt Template":"Receipt Template","Default":"Default","Choose the template that applies to receipts":"Choose the template that applies to receipts","Receipt Logo":"Receipt Logo","Provide a URL to the logo.":"Provide a URL to the logo.","Merge Products On Receipt\/Invoice":"Merge Products On Receipt\/Invoice","All similar products will be merged to avoid a paper waste for the receipt\/invoice.":"All similar products will be merged to avoid a paper waste for the receipt\/invoice.","Receipt Footer":"Receipt Footer","If you would like to add some disclosure at the bottom of the receipt.":"If you would like to add some disclosure at the bottom of the receipt.","Column A":"Column A","Column B":"Column B","Order Code Type":"Tipi i Kodit te Porosive","Determine how the system will generate code for each orders.":"Caktoni menyren si do te gjenerohet kodi i porosive.","Sequential":"Sekuencial","Random Code":"Kod i rastesishem","Number Sequential":"Numer Sekuencial","Allow Unpaid Orders":"Lejo porosi Papaguar","Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".":"Do te lejoje porosi ne pritje pa kryer Pagese. Nese Krediti eshte i lejuar, ky Opsion duhet te jete \"Po\".","Allow Partial Orders":"Lejo porosi me pagesa te pjesshme","Will prevent partially paid orders to be placed.":"Do te lejoje porosi te ruajtura me pagese jo te plote.","Quotation Expiration":"Quotation Expiration","Quotations will get deleted after they defined they has reached.":"Quotations will get deleted after they defined they has reached.","%s Days":"%s Dite","Features":"Features","Show Quantity":"Shiko Sasine","Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.":"Zgjedhja e sasise se Produktit ne fature, perndryshe sasia vendoset automatikisht 1.","Merge Similar Items":"Bashko Artikuj te ngjashem","Will enforce similar products to be merged from the POS.":"Do te bashkoje te njejtet produkte ne nje ze fature.","Allow Wholesale Price":"Lejo Cmim Shumice","Define if the wholesale price can be selected on the POS.":"Lejo nese cmimet e shumices mund te zgjidhen ne POS.","Allow Decimal Quantities":"Lejo sasi me presje dhjetore","Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.":"Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.","Allow Customer Creation":"Lejo krijimin e Klienteve","Allow customers to be created on the POS.":"Lejo krijimin e Klienteve ne POS.","Quick Product":"Produkt i Ri","Allow quick product to be created from the POS.":"Caktoni nese Produktet e reja mund te krijohen ne POS.","Editable Unit Price":"Lejo ndryshimin e Cmimit ne Shitje","Allow product unit price to be edited.":"Lejo ndryshimin e cmimit te Produktit ne Panel Shitje.","Show Price With Tax":"Shfaq Cmimin me Taksa te Perfshira","Will display price with tax for each products.":"Do te shfaqe Cmimet me taksa te perfshira per sejcilin produkt.","Order Types":"Tipi Porosise","Control the order type enabled.":"Control the order type enabled.","Numpad":"Numpad","Advanced":"Advanced","Will set what is the numpad used on the POS screen.":"Will set what is the numpad used on the POS screen.","Force Barcode Auto Focus":"Auto Focus ne Barkod Produkti","Will permanently enable barcode autofocus to ease using a barcode reader.":"Do te vendos Primar kerkimin e produkteve me Barkod.","Bubble":"Flluske","Ding":"Ding","Pop":"Pop","Cash Sound":"Cash Sound","Layout":"Pamja","Retail Layout":"Retail Layout","Clothing Shop":"Clothing Shop","POS Layout":"Pamja e POS","Change the layout of the POS.":"Ndrysho pamjen e POS.","Sale Complete Sound":"Sale Complete Sound","New Item Audio":"Audio per artikull te ri te shtuar","The sound that plays when an item is added to the cart.":"The sound that plays when an item is added to the cart.","Printing":"Printing","Printed Document":"Printed Document","Choose the document used for printing aster a sale.":"Choose the document used for printing aster a sale.","Printing Enabled For":"Printing Enabled For","All Orders":"All Orders","From Partially Paid Orders":"From Partially Paid Orders","Only Paid Orders":"Only Paid Orders","Determine when the printing should be enabled.":"Determine when the printing should be enabled.","Printing Gateway":"Printing Gateway","Determine what is the gateway used for printing.":"Determine what is the gateway used for printing.","Enable Cash Registers":"Enable Cash Registers","Determine if the POS will support cash registers.":"Determine if the POS will support cash registers.","Cashier Idle Counter":"Cashier Idle Counter","5 Minutes":"5 Minutes","10 Minutes":"10 Minutes","15 Minutes":"15 Minutes","20 Minutes":"20 Minutes","30 Minutes":"30 Minutes","Selected after how many minutes the system will set the cashier as idle.":"Selected after how many minutes the system will set the cashier as idle.","Cash Disbursement":"Cash Disbursement","Allow cash disbursement by the cashier.":"Allow cash disbursement by the cashier.","Cash Registers":"Cash Registers","Keyboard Shortcuts":"Keyboard Shortcuts","Cancel Order":"Cancel Order","Keyboard shortcut to cancel the current order.":"Keyboard shortcut to cancel the current order.","Hold Order":"Hold Order","Keyboard shortcut to hold the current order.":"Keyboard shortcut to hold the current order.","Keyboard shortcut to create a customer.":"Keyboard shortcut to create a customer.","Proceed Payment":"Proceed Payment","Keyboard shortcut to proceed to the payment.":"Keyboard shortcut to proceed to the payment.","Open Shipping":"Open Shipping","Keyboard shortcut to define shipping details.":"Keyboard shortcut to define shipping details.","Open Note":"Open Note","Keyboard shortcut to open the notes.":"Keyboard shortcut to open the notes.","Order Type Selector":"Order Type Selector","Keyboard shortcut to open the order type selector.":"Keyboard shortcut to open the order type selector.","Toggle Fullscreen":"Toggle Fullscreen","Keyboard shortcut to toggle fullscreen.":"Keyboard shortcut to toggle fullscreen.","Quick Search":"Quick Search","Keyboard shortcut open the quick search popup.":"Keyboard shortcut open the quick search popup.","Toggle Product Merge":"Toggle Product Merge","Will enable or disable the product merging.":"Will enable or disable the product merging.","Amount Shortcuts":"Amount Shortcuts","VAT Type":"VAT Type","Determine the VAT type that should be used.":"Determine the VAT type that should be used.","Flat Rate":"Flat Rate","Flexible Rate":"Flexible Rate","Products Vat":"Products Vat","Products & Flat Rate":"Products & Flat Rate","Products & Flexible Rate":"Products & Flexible Rate","Define the tax group that applies to the sales.":"Define the tax group that applies to the sales.","Define how the tax is computed on sales.":"Define how the tax is computed on sales.","VAT Settings":"VAT Settings","Enable Email Reporting":"Enable Email Reporting","Determine if the reporting should be enabled globally.":"Determine if the reporting should be enabled globally.","Supplies":"Supplies","Public Name":"Public Name","Define what is the user public name. If not provided, the username is used instead.":"Define what is the user public name. If not provided, the username is used instead.","Enable Workers":"Enable Workers","Test":"Test","OK":"OK","Howdy, {name}":"Howdy, {name}","This field must contain a valid email address.":"This field must contain a valid email address.","Okay":"Okay","Go Back":"Go Back","Save":"Ruaj","Filters":"Filters","Has Filters":"Has Filters","{entries} entries selected":"{entries} entries selected","Download":"Download","There is nothing to display...":"Ketu nuk ka asnje informacion...","Bulk Actions":"Veprime","Apply":"Apliko","displaying {perPage} on {items} items":"shfaqur {perPage} nga {items} rekorde","The document has been generated.":"The document has been generated.","Clear Selected Entries ?":"Clear Selected Entries ?","Would you like to clear all selected entries ?":"Would you like to clear all selected entries ?","Would you like to perform the selected bulk action on the selected entries ?":"Would you like to perform the selected bulk action on the selected entries ?","No selection has been made.":"Nuk eshte bere asnje Selektim.","No action has been selected.":"Nuk eshte zgjedhur asnje Veprim per tu aplikuar.","N\/D":"N\/D","Range Starts":"Range Starts","Range Ends":"Range Ends","Sun":"Die","Mon":"Hen","Tue":"Mar","Wed":"Mer","Thr":"Enj","Fri":"Pre","Sat":"Sht","Nothing to display":"Nothing to display","Enter":"Enter","Search...":"Kerko...","An unexpected error occured.":"Ndodhi nje gabim.","Choose an option":"Zgjidh","Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".":"Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".","Unknown Status":"Unknown Status","Password Forgotten ?":"Password Forgotten ?","Sign In":"Hyr","Register":"Regjistrohu","Unable to proceed the form is not valid.":"Unable to proceed the form is not valid.","Save Password":"Ruaj Fjalekalimin","Remember Your Password ?":"Rikojto Fjalekalimin ?","Submit":"Dergo","Already registered ?":"Already registered ?","Return":"Return","Best Cashiers":"Best Cashiers","No result to display.":"No result to display.","Well.. nothing to show for the meantime.":"Well.. nothing to show for the meantime.","Best Customers":"TOP Klientet","Well.. nothing to show for the meantime":"Well.. nothing to show for the meantime","Total Sales":"Total Shitje","Today":"Today","Total Refunds":"Total Refunds","Clients Registered":"Clients Registered","Commissions":"Commissions","Incomplete Orders":"Pa Perfunduar","Weekly Sales":"Shitje Javore","Week Taxes":"Taksa Javore","Net Income":"Te ardhura NETO","Week Expenses":"Shpenzime Javore","Current Week":"Java Aktuale","Previous Week":"Java e Meparshme","Recents Orders":"Porosite e Meparshme","Upload":"Upload","Enable":"Aktivizo","Disable":"Caktivizo","Gallery":"Galeria","Confirm Your Action":"Konfirmoni Veprimin","Medias Manager":"Menaxhimi Media","Click Here Or Drop Your File To Upload":"Klikoni ketu per te ngarkuar dokumentat tuaja","Nothing has already been uploaded":"Nuk u ngarkua asnje dokument","File Name":"Emri Dokumentit","Uploaded At":"Ngarkuar me","Previous":"Previous","Next":"Next","Use Selected":"Perdor te zgjedhuren","Clear All":"Pastro te gjitha","Would you like to clear all the notifications ?":"Doni ti pastroni te gjitha njoftimet ?","Permissions":"Te Drejtat","Payment Summary":"Payment Summary","Order Status":"Order Status","Processing Status":"Processing Status","Refunded Products":"Refunded Products","All Refunds":"All Refunds","Would you proceed ?":"Would you proceed ?","The processing status of the order will be changed. Please confirm your action.":"The processing status of the order will be changed. Please confirm your action.","The delivery status of the order will be changed. Please confirm your action.":"The delivery status of the order will be changed. Please confirm your action.","Payment Method":"Metoda e Pageses","Before submitting the payment, choose the payment type used for that order.":"Before submitting the payment, choose the payment type used for that order.","Submit Payment":"Submit Payment","Select the payment type that must apply to the current order.":"Select the payment type that must apply to the current order.","Payment Type":"Tipi i Pageses","The form is not valid.":"Forma nuk eshte e sakte.","Update Instalment Date":"Update Instalment Date","Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.":"Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.","Create":"Krijo","Add Instalment":"Add Instalment","Would you like to create this instalment ?":"Would you like to create this instalment ?","Would you like to delete this instalment ?":"Would you like to delete this instalment ?","Would you like to update that instalment ?":"Would you like to update that instalment ?","Print":"Printo","Store Details":"Detajet e Dyqanit","Order Code":"Order Code","Cashier":"Cashier","Billing Details":"Billing Details","Shipping Details":"Adresa per Dorezim","No payment possible for paid order.":"No payment possible for paid order.","Payment History":"Payment History","Unknown":"Unknown","Refund With Products":"Refund With Products","Refund Shipping":"Refund Shipping","Add Product":"Add Product","Summary":"Summary","Payment Gateway":"Payment Gateway","Screen":"Screen","Select the product to perform a refund.":"Select the product to perform a refund.","Please select a payment gateway before proceeding.":"Please select a payment gateway before proceeding.","There is nothing to refund.":"There is nothing to refund.","Please provide a valid payment amount.":"Please provide a valid payment amount.","The refund will be made on the current order.":"The refund will be made on the current order.","Please select a product before proceeding.":"Please select a product before proceeding.","Not enough quantity to proceed.":"Not enough quantity to proceed.","Would you like to delete this product ?":"Would you like to delete this product ?","Order Type":"Tipi Porosise","Cart":"Cart","Comments":"Komente","No products added...":"Shto produkt ne fature...","Price":"Price","Tax Inclusive":"Tax Inclusive","Pay":"Paguaj","Apply Coupon":"Apliko Kupon","The product price has been updated.":"The product price has been updated.","The editable price feature is disabled.":"The editable price feature is disabled.","Unable to hold an order which payment status has been updated already.":"Unable to hold an order which payment status has been updated already.","Unable to change the price mode. This feature has been disabled.":"Unable to change the price mode. This feature has been disabled.","Enable WholeSale Price":"Enable WholeSale Price","Would you like to switch to wholesale price ?":"Would you like to switch to wholesale price ?","Enable Normal Price":"Enable Normal Price","Would you like to switch to normal price ?":"Would you like to switch to normal price ?","Search for products.":"Kerko per Produkte.","Toggle merging similar products.":"Toggle merging similar products.","Toggle auto focus.":"Toggle auto focus.","Current Balance":"Gjendje Aktuale","Full Payment":"Pagese e Plote","The customer account can only be used once per order. Consider deleting the previously used payment.":"The customer account can only be used once per order. Consider deleting the previously used payment.","Not enough funds to add {amount} as a payment. Available balance {balance}.":"Not enough funds to add {amount} as a payment. Available balance {balance}.","Confirm Full Payment":"Konfirmoni Pagesen e Plote","A full payment will be made using {paymentType} for {total}":"A full payment will be made using {paymentType} for {total}","You need to provide some products before proceeding.":"You need to provide some products before proceeding.","Unable to add the product, there is not enough stock. Remaining %s":"Unable to add the product, there is not enough stock. Remaining %s","Add Images":"Shto Imazhe","Remove Image":"Hiq Imazhin","New Group":"Grup i Ri","Available Quantity":"Available Quantity","Would you like to delete this group ?":"Would you like to delete this group ?","Your Attention Is Required":"Your Attention Is Required","Please select at least one unit group before you proceed.":"Please select at least one unit group before you proceed.","Unable to proceed, more than one product is set as featured":"Unable to proceed, more than one product is set as featured","Unable to proceed as one of the unit group field is invalid":"Unable to proceed as one of the unit group field is invalid","Would you like to delete this variation ?":"Would you like to delete this variation ?","Details":"Detaje","No result match your query.":"No result match your query.","Unable to proceed, no product were provided.":"Unable to proceed, no product were provided.","Unable to proceed, one or more product has incorrect values.":"Unable to proceed, one or more product has incorrect values.","Unable to proceed, the procurement form is not valid.":"Unable to proceed, the procurement form is not valid.","Unable to submit, no valid submit URL were provided.":"Unable to submit, no valid submit URL were provided.","No title is provided":"Nuk eshte vendosur Titull","Search products...":"Kerko produktet...","Set Sale Price":"Set Sale Price","Remove":"Hiq","No product are added to this group.":"No product are added to this group.","Delete Sub item":"Delete Sub item","Would you like to delete this sub item?":"Would you like to delete this sub item?","Unable to add a grouped product.":"Unable to add a grouped product.","Choose The Unit":"Zgjidh Njesine","An unexpected error occured":"An unexpected error occured","Ok":"Ok","The product already exists on the table.":"The product already exists on the table.","The specified quantity exceed the available quantity.":"The specified quantity exceed the available quantity.","Unable to proceed as the table is empty.":"Unable to proceed as the table is empty.","The stock adjustment is about to be made. Would you like to confirm ?":"The stock adjustment is about to be made. Would you like to confirm ?","More Details":"Me shume Detaje","Useful to describe better what are the reasons that leaded to this adjustment.":"Useful to describe better what are the reasons that leaded to this adjustment.","The reason has been updated.":"The reason has been updated.","Would you like to remove this product from the table ?":"Would you like to remove this product from the table ?","Search":"Kerko","Search and add some products":"Kerko dhe shto Produkte","Proceed":"Procedo","Low Stock Report":"Raport Gjendje Ulet","Report Type":"Tipi Raportit","Unable to proceed. Select a correct time range.":"Unable to proceed. Select a correct time range.","Unable to proceed. The current time range is not valid.":"Unable to proceed. The current time range is not valid.","Categories Detailed":"Categories Detailed","Categories Summary":"Categories Summary","Allow you to choose the report type.":"Allow you to choose the report type.","Filter User":"Filter User","All Users":"Te gjithe Perdoruesit","No user was found for proceeding the filtering.":"No user was found for proceeding the filtering.","Would you like to proceed ?":"Would you like to proceed ?","This form is not completely loaded.":"This form is not completely loaded.","No rules has been provided.":"No rules has been provided.","No valid run were provided.":"No valid run were provided.","Unable to proceed, the form is invalid.":"Unable to proceed, the form is invalid.","Unable to proceed, no valid submit URL is defined.":"Unable to proceed, no valid submit URL is defined.","No title Provided":"No title Provided","Add Rule":"Add Rule","Save Settings":"Ruaj Ndryshimet","Try Again":"Provo Perseri","Updating":"Duke bere Update","Updating Modules":"Duke Azhornuar Modulet","New Transaction":"Transaksion i Ri","Close":"Mbyll","Search Filters":"Filtra Kerkimi","Clear Filters":"Pastro Filtrat","Use Filters":"Perdor Filtrat","Would you like to delete this order":"Would you like to delete this order","The current order will be void. This action will be recorded. Consider providing a reason for this operation":"The current order will be void. This action will be recorded. Consider providing a reason for this operation","Order Options":"Order Options","Payments":"Payments","Refund & Return":"Refund & Return","available":"available","Order Refunds":"Order Refunds","Input":"Input","Close Register":"Close Register","Register Options":"Register Options","Sales":"Sales","History":"History","Unable to open this register. Only closed register can be opened.":"Unable to open this register. Only closed register can be opened.","Open The Register":"Open The Register","Exit To Orders":"Exit To Orders","Looks like there is no registers. At least one register is required to proceed.":"Looks like there is no registers. At least one register is required to proceed.","Create Cash Register":"Create Cash Register","Load Coupon":"Apliko Kod Kuponi Zbritje","Apply A Coupon":"Kuponi","Load":"Apliko","Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.":"Vendosni Kodin e Kuponit qe do te aplikohet ne Fature. Nese Kuponi eshte per nje klient te caktuar, atehere me pare ju duhet zgjidhni Klientin.","Click here to choose a customer.":"Kliko ketu per te zgjedhur Klientin.","Coupon Name":"Emri i Kuponit","Unlimited":"Unlimited","Not applicable":"Not applicable","Active Coupons":"Kupona Aktive","No coupons applies to the cart.":"No coupons applies to the cart.","Cancel":"Cancel","The coupon is out from validity date range.":"The coupon is out from validity date range.","The coupon has applied to the cart.":"The coupon has applied to the cart.","Unknown Type":"Unknown Type","You must select a customer before applying a coupon.":"You must select a customer before applying a coupon.","The coupon has been loaded.":"The coupon has been loaded.","Use":"Perdor","No coupon available for this customer":"No coupon available for this customer","Select Customer":"Zgjidhni Klientin","Selected":"Selected","No customer match your query...":"No customer match your query...","Create a customer":"Krijo Klient","Save Customer":"Ruaj","Not Authorized":"Ju nuk jeni i Autorizuar","Creating customers has been explicitly disabled from the settings.":"Krijimi i Klienteve eshte inaktiv nga menu Cilesimet.","No Customer Selected":"Nuk keni zgjedhur klient","In order to see a customer account, you need to select one customer.":"In order to see a customer account, you need to select one customer.","Summary For":"Summary For","Total Purchases":"Total Purchases","Wallet Amount":"Wallet Amount","Last Purchases":"Last Purchases","No orders...":"No orders...","Transaction":"Transaction","No History...":"No History...","No coupons for the selected customer...":"No coupons for the selected customer...","Use Coupon":"Use Coupon","No rewards available the selected customer...":"No rewards available the selected customer...","Account Transaction":"Account Transaction","Removing":"Removing","Refunding":"Refunding","Unknow":"Unknow","Use Customer ?":"Perdor Klientin ?","No customer is selected. Would you like to proceed with this customer ?":"Nuk eshte Zgjedhur Klient. Doni te procedoni me kete Klient ?","Change Customer ?":"Ndrysho Klient ?","Would you like to assign this customer to the ongoing order ?":"Would you like to assign this customer to the ongoing order ?","Product Discount":"Zbritje ne Produkt","Cart Discount":"Zbritje ne Fature","Confirm":"Konfirmo","Layaway Parameters":"Layaway Parameters","Minimum Payment":"Minimum Payment","Instalments & Payments":"Instalments & Payments","The final payment date must be the last within the instalments.":"The final payment date must be the last within the instalments.","There is no instalment defined. Please set how many instalments are allowed for this order":"There is no instalment defined. Please set how many instalments are allowed for this order","Skip Instalments":"Skip Instalments","You must define layaway settings before proceeding.":"You must define layaway settings before proceeding.","Please provide instalments before proceeding.":"Please provide instalments before proceeding.","One or more instalments has an invalid date.":"One or more instalments has an invalid date.","One or more instalments has an invalid amount.":"One or more instalments has an invalid amount.","One or more instalments has a date prior to the current date.":"One or more instalments has a date prior to the current date.","The payment to be made today is less than what is expected.":"The payment to be made today is less than what is expected.","Total instalments must be equal to the order total.":"Total instalments must be equal to the order total.","Order Note":"Shenime ne Fature","Note":"Shenimet","More details about this order":"Me shume detaje per kete Fature","Display On Receipt":"Shfaqi shenimet ne Fature?","Will display the note on the receipt":"","Open":"Open","Order Settings":"Cilesime Porosie","Define The Order Type":"Zgjidh Tipin e Porosise","No payment type has been selected on the settings. Please check your POS features and choose the supported order type":"No payment type has been selected on the settings. Please check your POS features and choose the supported order type","Read More":"Lexo te plote","Select Payment Gateway":"Select Payment Gateway","Gateway":"Gateway","Payment List":"Payment List","List Of Payments":"List Of Payments","No Payment added.":"No Payment added.","Layaway":"Layaway","On Hold":"Ne Pritje","Nothing to display...":"Nothing to display...","Product Price":"Cmimi Produktit","Define Quantity":"Plotesoni Sasine","Please provide a quantity":"Ju lutem plotesoni Sasine","Product \/ Service":"Product \/ Service","Unable to proceed. The form is not valid.":"Unable to proceed. The form is not valid.","Provide a unique name for the product.":"Provide a unique name for the product.","Define the product type.":"Define the product type.","Normal":"Normal","Dynamic":"Dinamik","In case the product is computed based on a percentage, define the rate here.":"In case the product is computed based on a percentage, define the rate here.","Define what is the sale price of the item.":"Define what is the sale price of the item.","Set the quantity of the product.":"Set the quantity of the product.","Assign a unit to the product.":"Assign a unit to the product.","Define what is tax type of the item.":"Define what is tax type of the item.","Choose the tax group that should apply to the item.":"Choose the tax group that should apply to the item.","Search Product":"Kerko Produkt","There is nothing to display. Have you started the search ?":"There is nothing to display. Have you started the search ?","Unable to add the product":"Unable to add the product","No result to result match the search value provided.":"No result to result match the search value provided.","Shipping & Billing":"Shipping & Billing","Tax & Summary":"Tax & Summary","No tax is active":"Nuk ka Taksa Aktive","Product Taxes":"Taksat e Produkteve","Select Tax":"Zgjidh Takse","Define the tax that apply to the sale.":"Zgjidhni Taksen qe aplikohet ne shitje.","Define how the tax is computed":"Caktoni llogaritjen e Takses","The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.":"The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.","Define when that specific product should expire.":"Define when that specific product should expire.","Renders the automatically generated barcode.":"Gjenero Barkod Automatik.","Adjust how tax is calculated on the item.":"Zgjidhni si do te llogariten Taksat per kete Produkt.","Units & Quantities":"Njesite & Sasite","Select":"Zgjidh","The customer has been loaded":"The customer has been loaded","Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.":"Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.","OKAY":"OKAY","Some products has been added to the cart. Would youl ike to discard this order ?":"Some products has been added to the cart. Would youl ike to discard this order ?","This coupon is already added to the cart":"This coupon is already added to the cart","Unable to delete a payment attached to the order.":"Unable to delete a payment attached to the order.","No tax group assigned to the order":"No tax group assigned to the order","Before saving this order, a minimum payment of {amount} is required":"Before saving this order, a minimum payment of {amount} is required","Unable to proceed":"E pamundur te Procedoj","Layaway defined":"Layaway defined","Initial Payment":"Initial Payment","In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?":"In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?","The request was canceled":"The request was canceled","Partially paid orders are disabled.":"Partially paid orders are disabled.","An order is currently being processed.":"An order is currently being processed.","The discount has been set to the cart subtotal.":"The discount has been set to the cart subtotal.","Order Deletion":"Order Deletion","The current order will be deleted as no payment has been made so far.":"The current order will be deleted as no payment has been made so far.","Void The Order":"Void The Order","Unable to void an unpaid order.":"Unable to void an unpaid order.","Loading...":"Duke u ngarkuar...","Logout":"Dil","Unamed Page":"Unamed Page","No description":"Pa pershkrim","Activate Your Account":"Aktivizoni Llogarine tuaj","The account you have created for __%s__, require an activation. In order to proceed, please click on the following link":"The account you have created for __%s__, require an activation. In order to proceed, please click on the following link","Password Recovered":"Password Recovered","Your password has been successfully updated on __%s__. You can now login with your new password.":"Your password has been successfully updated on __%s__. You can now login with your new password.","Password Recovery":"Password Recovery","Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ":"Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ","Reset Password":"Rivendos Fjalekalimin","New User Registration":"Regjistrimi Perdoruesit te ri","Your Account Has Been Created":"Llogaria juaj u krijua me sukses","Login":"Hyr","Properties":"Properties","Extensions":"Extensions","Configurations":"Konfigurimet","Learn More":"Learn More","Save Coupon":"Ruaj Kuponin","This field is required":"Kjo fushe eshte e Detyrueshme","The form is not valid. Please check it and try again":"The form is not valid. Please check it and try again","mainFieldLabel not defined":"mainFieldLabel not defined","Create Customer Group":"Krijo Grup Klientesh","Save a new customer group":"Ruaj Grupin e Klienteve","Update Group":"Azhorno Grupin","Modify an existing customer group":"Modifiko Grupin e Klienteve","Managing Customers Groups":"Menaxhimi Grupeve te Klienteve","Create groups to assign customers":"Krijo Grup Klientesh","Managing Customers":"Menaxhimi Klienteve","List of registered customers":"Lista e Klienteve te Regjistruar","Log out":"Dil","Your Module":"Moduli Juaj","Choose the zip file you would like to upload":"Zgjidhni file .Zip per upload","Managing Orders":"Managing Orders","Manage all registered orders.":"Manage all registered orders.","Payment receipt":"Payment receipt","Hide Dashboard":"Fsheh Dashboard","Receipt — %s":"Receipt — %s","Order receipt":"Order receipt","Refund receipt":"Refund receipt","Current Payment":"Current Payment","Total Paid":"Paguar Total","Unable to proceed no products has been provided.":"Unable to proceed no products has been provided.","Unable to proceed, one or more products is not valid.":"Unable to proceed, one or more products is not valid.","Unable to proceed the procurement form is not valid.":"Unable to proceed the procurement form is not valid.","Unable to proceed, no submit url has been provided.":"Unable to proceed, no submit url has been provided.","SKU, Barcode, Product name.":"SKU, Barkodi, Emri i Produktit.","First Address":"Adresa Primare","Second Address":"Adresa Sekondare","Address":"Address","Search Products...":"Kerko Produkte...","Included Products":"Included Products","Apply Settings":"Apply Settings","Basic Settings":"Basic Settings","Visibility Settings":"Visibility Settings","An Error Has Occured":"An Error Has Occured","Unable to load the report as the timezone is not set on the settings.":"Raporti nuk u ngarkua pasi nuk keni zgjedhur Timezone tek Cilesimet.","Year":"Vit","Recompute":"Recompute","Income":"Income","January":"Janar","Febuary":"Shkurt","March":"Mars","April":"Prill","May":"Maj","June":"Qershor","July":"Korrik","August":"Gusht","September":"Shtator","October":"Tetor","November":"Nentor","December":"Dhjetor","Sort Results":"Rendit Rezultatet","Using Quantity Ascending":"Using Quantity Ascending","Using Quantity Descending":"Using Quantity Descending","Using Sales Ascending":"Using Sales Ascending","Using Sales Descending":"Using Sales Descending","Using Name Ascending":"Using Name Ascending","Using Name Descending":"Using Name Descending","Progress":"Progress","No results to show.":"Nuk ka rezultate.","Start by choosing a range and loading the report.":"Start by choosing a range and loading the report.","Search Customer...":"Kerko Klientin...","Due Amount":"Due Amount","Wallet Balance":"Wallet Balance","Total Orders":"Total Orders","There is no product to display...":"There is no product to display...","Profit":"Profit","Sales Discounts":"Sales Discounts","Sales Taxes":"Sales Taxes","Discounts":"Zbritje","Reward System Name":"Reward System Name","Your system is running in production mode. You probably need to build the assets":"Your system is running in production mode. You probably need to build the assets","Your system is in development mode. Make sure to build the assets.":"Your system is in development mode. Make sure to build the assets.","How to change database configuration":"Si te ndryshoni Konfigurimin e Databazes","Setup":"Setup","Common Database Issues":"Common Database Issues","Documentation":"Documentation","Sign Up":"Regjistrohu","X Days After Month Starts":"X Days After Month Starts","On Specific Day":"On Specific Day","Not enough parameters provided for the relation.":"Not enough parameters provided for the relation.","Done":"Done","Would you like to delete \"%s\"?":"Would you like to delete \"%s\"?","Unable to find a module having as namespace \"%s\"":"Unable to find a module having as namespace \"%s\"","Api File":"Api File","Migrations":"Migrations","%s products where updated.":"%s products where updated.","Determine Until When the coupon is valid.":"Determine Until When the coupon is valid.","Customer Groups":"Customer Groups","Assigned To Customer Group":"Assigned To Customer Group","Only the customers who belongs to the selected groups will be able to use the coupon.":"Only the customers who belongs to the selected groups will be able to use the coupon.","Assigned To Customers":"Assigned To Customers","Only the customers selected will be ale to use the coupon.":"Only the customers selected will be ale to use the coupon.","Unable to save the coupon as one of the selected customer no longer exists.":"Unable to save the coupon as one of the selected customer no longer exists.","Unable to save the coupon as one of the selected customer group no longer exists.":"Unable to save the coupon as one of the selected customer group no longer exists.","Unable to save the coupon as one of the customers provided no longer exists.":"Unable to save the coupon as one of the customers provided no longer exists.","Unable to save the coupon as one of the provided customer group no longer exists.":"Unable to save the coupon as one of the provided customer group no longer exists.","Coupon Order Histories List":"Coupon Order Histories List","Display all coupon order histories.":"Display all coupon order histories.","No coupon order histories has been registered":"No coupon order histories has been registered","Add a new coupon order history":"Add a new coupon order history","Create a new coupon order history":"Create a new coupon order history","Register a new coupon order history and save it.":"Register a new coupon order history and save it.","Edit coupon order history":"Edit coupon order history","Modify Coupon Order History.":"Modify Coupon Order History.","Return to Coupon Order Histories":"Return to Coupon Order Histories","Customer_coupon_id":"Customer_coupon_id","Order_id":"Order_id","Discount_value":"Discount_value","Minimum_cart_value":"Minimum_cart_value","Maximum_cart_value":"Maximum_cart_value","Limit_usage":"Limit_usage","Would you like to delete this?":"Would you like to delete this?","Usage History":"Usage History","Customer Coupon Histories List":"Customer Coupon Histories List","Display all customer coupon histories.":"Display all customer coupon histories.","No customer coupon histories has been registered":"No customer coupon histories has been registered","Add a new customer coupon history":"Add a new customer coupon history","Create a new customer coupon history":"Create a new customer coupon history","Register a new customer coupon history and save it.":"Register a new customer coupon history and save it.","Edit customer coupon history":"Edit customer coupon history","Modify Customer Coupon History.":"Modify Customer Coupon History.","Return to Customer Coupon Histories":"Return to Customer Coupon Histories","Last Name":"Last Name","Provide the customer last name":"Provide the customer last name","Provide the customer gender.":"Provide the customer gender.","Provide the billing first name.":"Provide the billing first name.","Provide the billing last name.":"Provide the billing last name.","Provide the shipping First Name.":"Provide the shipping First Name.","Provide the shipping Last Name.":"Provide the shipping Last Name.","Occurrence":"Occurrence","Occurrence Value":"Occurrence Value","Scheduled":"Scheduled","Set the scheduled date.":"Set the scheduled date.","Account Name":"Account Name","Define whether the product is available for sale.":"Define whether the product is available for sale.","Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.":"Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.","Provide the provider email. Might be used to send automated email.":"Provide the provider email. Might be used to send automated email.","Provider last name if necessary.":"Provider last name if necessary.","Contact phone number for the provider. Might be used to send automated SMS notifications.":"Contact phone number for the provider. Might be used to send automated SMS notifications.","Provide the user first name.":"Provide the user first name.","Provide the user last name.":"Provide the user last name.","Define whether the user can use the application.":"Define whether the user can use the application.","Set the user gender.":"Set the user gender.","Set the user phone number.":"Set the user phone number.","Set the user PO Box.":"Set the user PO Box.","Provide the billing First Name.":"Provide the billing First Name.","Last name":"Last name","Group Name":"Group Name","Delete a user":"Delete a user","An error has occurred":"An error has occurred","Activated":"Activated","type":"type","User Group":"User Group","Scheduled On":"Scheduled On","Define whether the customer billing information should be used.":"Define whether the customer billing information should be used.","Define whether the customer shipping information should be used.":"Define whether the customer shipping information should be used.","Biling":"Biling","API Token":"API Token","Unable to export if there is nothing to export.":"Unable to export if there is nothing to export.","The requested customer cannot be found.":"The requested customer cannot be found.","%s Coupons":"%s Coupons","%s Coupon History":"%s Coupon History","All the customers has been transferred to the new group %s.":"All the customers has been transferred to the new group %s.","The categories has been transferred to the group %s.":"The categories has been transferred to the group %s.","\"%s\" Record History":"\"%s\" Record History","The media name was successfully updated.":"The media name was successfully updated.","All the notifications have been cleared.":"All the notifications have been cleared.","Unable to find the requested product tax using the provided id":"Unable to find the requested product tax using the provided id","Unable to retrieve the requested tax group using the provided identifier \"%s\".":"Unable to retrieve the requested tax group using the provided identifier \"%s\".","The recovery has been explicitly disabled.":"The recovery has been explicitly disabled.","The registration has been explicitly disabled.":"The registration has been explicitly disabled.","The role was successfully assigned.":"The role was successfully assigned.","The role were successfully assigned.":"The role were successfully assigned.","Unable to identifier the provided role.":"Unable to identifier the provided role.","Good Condition":"Good Condition","Cron Disabled":"Cron Disabled","Task Scheduling Disabled":"Task Scheduling Disabled","NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.":"NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.","Non-existent Item":"Non-existent Item","The email \"%s\" is already used for another customer.":"The email \"%s\" is already used for another customer.","The provided coupon cannot be loaded for that customer.":"The provided coupon cannot be loaded for that customer.","The provided coupon cannot be loaded for the group assigned to the selected customer.":"The provided coupon cannot be loaded for the group assigned to the selected customer.","Unable to use the coupon %s as it has expired.":"Unable to use the coupon %s as it has expired.","Unable to use the coupon %s at this moment.":"Unable to use the coupon %s at this moment.","Small Box":"Small Box","Box":"Box","%s on %s directories were deleted.":"%s on %s directories were deleted.","%s on %s files were deleted.":"%s on %s files were deleted.","First Day Of Month":"First Day Of Month","Last Day Of Month":"Last Day Of Month","Month middle Of Month":"Month middle Of Month","{day} after month starts":"{day} after month starts","{day} before month ends":"{day} before month ends","Every {day} of the month":"Every {day} of the month","Days":"Days","Make sure set a day that is likely to be executed":"Make sure set a day that is likely to be executed","Invalid Module provided.":"Invalid Module provided.","The module was \"%s\" was successfully installed.":"The module was \"%s\" was successfully installed.","The modules \"%s\" was deleted successfully.":"The modules \"%s\" was deleted successfully.","Unable to locate a module having as identifier \"%s\".":"Unable to locate a module having as identifier \"%s\".","All migration were executed.":"All migration were executed.","Unnamed Product":"Unnamed Product","the order has been successfully computed.":"the order has been successfully computed.","Unknown Product Status":"Unknown Product Status","The product has been updated":"The product has been updated","The product has been reset.":"The product has been reset.","The product variation has been successfully created.":"The product variation has been successfully created.","Member Since":"Member Since","Total Customers":"Total Customers","NexoPOS has been successfully installed.":"NexoPOS has been successfully installed.","The widgets was successfully updated.":"The widgets was successfully updated.","The token was successfully created":"The token was successfully created","The token has been successfully deleted.":"The token has been successfully deleted.","Store additional information.":"Store additional information.","Preferred Currency":"Preferred Currency","Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".":"Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".","Will display all cashiers who performs well.":"Will display all cashiers who performs well.","Will display all customers with the highest purchases.":"Will display all customers with the highest purchases.","Expense Card Widget":"Expense Card Widget","Will display a card of current and overwall expenses.":"Will display a card of current and overwall expenses.","Incomplete Sale Card Widget":"Incomplete Sale Card Widget","Will display a card of current and overall incomplete sales.":"Will display a card of current and overall incomplete sales.","Orders Chart":"Orders Chart","Will display a chart of weekly sales.":"Will display a chart of weekly sales.","Orders Summary":"Orders Summary","Will display a summary of recent sales.":"Will display a summary of recent sales.","Will display a profile widget with user stats.":"Will display a profile widget with user stats.","Sale Card Widget":"Sale Card Widget","Will display current and overall sales.":"Will display current and overall sales.","Return To Calendar":"Return To Calendar","The left range will be invalid.":"The left range will be invalid.","The right range will be invalid.":"The right range will be invalid.","Unexpected error occurred.":"Unexpected error occurred.","Click here to add widgets":"Click here to add widgets","Choose Widget":"Choose Widget","Select with widget you want to add to the column.":"Select with widget you want to add to the column.","An unexpected error occurred.":"An unexpected error occurred.","Unamed Tab":"Unamed Tab","An error unexpected occured while printing.":"An error unexpected occured while printing.","and":"and","{date} ago":"{date} ago","In {date}":"In {date}","Warning":"Warning","Change Type":"Change Type","Save Expense":"Save Expense","No configuration were choosen. Unable to proceed.":"No configuration were choosen. Unable to proceed.","Conditions":"Conditions","By proceeding the current for and all your entries will be cleared. Would you like to proceed?":"By proceeding the current for and all your entries will be cleared. Would you like to proceed?","No modules matches your search term.":"No modules matches your search term.","Press \"\/\" to search modules":"Press \"\/\" to search modules","No module has been uploaded yet.":"No module has been uploaded yet.","{module}":"{module}","Would you like to delete \"{module}\"? All data created by the module might also be deleted.":"Would you like to delete \"{module}\"? All data created by the module might also be deleted.","Search Medias":"Search Medias","Bulk Select":"Bulk Select","Press "\/" to search permissions":"Press "\/" to search permissions","An unexpected error has occurred":"An unexpected error has occurred","SKU, Barcode, Name":"SKU, Barcode, Name","An unexpected error occurred":"An unexpected error occurred","About Token":"About Token","Save Token":"Save Token","Generated Tokens":"Generated Tokens","Created":"Created","Last Use":"Last Use","Never":"Never","Expires":"Expires","Revoke":"Revoke","Token Name":"Token Name","This will be used to identifier the token.":"This will be used to identifier the token.","Unable to proceed, the form is not valid.":"Unable to proceed, the form is not valid.","An error occurred while opening the order options":"An error occurred while opening the order options","The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.":"The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.","Unable to process, the form is not valid":"Unable to process, the form is not valid","Configure":"Configure","This QR code is provided to ease authentication on external applications.":"This QR code is provided to ease authentication on external applications.","Copy And Close":"Copy And Close","An error has occurred while computing the product.":"An error has occurred while computing the product.","An unexpected error has occurred while fecthing taxes.":"An unexpected error has occurred while fecthing taxes.","Unnamed Page":"Unnamed Page","Environment Details":"Environment Details","Assignation":"Assignation","Incoming Conversion":"Incoming Conversion","Outgoing Conversion":"Outgoing Conversion","Unknown Action":"Unknown Action","Direct Transaction":"Direct Transaction","Recurring Transaction":"Recurring Transaction","Entity Transaction":"Entity Transaction","Scheduled Transaction":"Scheduled Transaction","Unknown Type (%s)":"Unknown Type (%s)","What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.":"What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.","What is the full model name. eg: App\\Models\\Order ? [Q] to quit.":"What is the full model name. eg: App\\Models\\Order ? [Q] to quit.","What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.":"What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.","Unsupported argument provided: \"%s\"":"Unsupported argument provided: \"%s\"","The authorization token can\\'t be changed manually.":"The authorization token can\\'t be changed manually.","Translation process is complete for the module %s !":"Translation process is complete for the module %s !","%s migration(s) has been deleted.":"%s migration(s) has been deleted.","The command has been created for the module \"%s\"!":"The command has been created for the module \"%s\"!","The controller has been created for the module \"%s\"!":"The controller has been created for the module \"%s\"!","The event has been created at the following path \"%s\"!":"The event has been created at the following path \"%s\"!","The listener has been created on the path \"%s\"!":"The listener has been created on the path \"%s\"!","A request with the same name has been found !":"A request with the same name has been found !","Unable to find a module having the identifier \"%s\".":"Unable to find a module having the identifier \"%s\".","Unsupported reset mode.":"Unsupported reset mode.","You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.":"You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.","Unable to find a module having \"%s\" as namespace.":"Unable to find a module having \"%s\" as namespace.","A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.":"A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.","A new form class was created at the path \"%s\"":"A new form class was created at the path \"%s\"","Unable to proceed, looks like the database can\\'t be used.":"Unable to proceed, looks like the database can\\'t be used.","In which language would you like to install NexoPOS ?":"In which language would you like to install NexoPOS ?","You must define the language of installation.":"You must define the language of installation.","The value above which the current coupon can\\'t apply.":"The value above which the current coupon can\\'t apply.","Unable to save the coupon product as this product doens\\'t exists.":"Unable to save the coupon product as this product doens\\'t exists.","Unable to save the coupon category as this category doens\\'t exists.":"Unable to save the coupon category as this category doens\\'t exists.","Unable to save the coupon as this category doens\\'t exists.":"Unable to save the coupon as this category doens\\'t exists.","You\\re not allowed to do that.":"You\\re not allowed to do that.","Crediting (Add)":"Crediting (Add)","Refund (Add)":"Refund (Add)","Deducting (Remove)":"Deducting (Remove)","Payment (Remove)":"Payment (Remove)","The assigned default customer group doesn\\'t exist or is not defined.":"The assigned default customer group doesn\\'t exist or is not defined.","Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0":"Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0","You\\'re not allowed to do this operation":"You\\'re not allowed to do this operation","If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.":"If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.","Convert Unit":"Convert Unit","The unit that is selected for convertion by default.":"The unit that is selected for convertion by default.","COGS":"COGS","Used to define the Cost of Goods Sold.":"Used to define the Cost of Goods Sold.","Visible":"Visible","Define whether the unit is available for sale.":"Define whether the unit is available for sale.","Product unique name. If it\\' variation, it should be relevant for that variation":"Product unique name. If it\\' variation, it should be relevant for that variation","The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.":"The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.","The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.":"The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.","Auto COGS":"Auto COGS","Unknown Type: %s":"Unknown Type: %s","Shortage":"Shortage","Overage":"Overage","Transactions List":"Transactions List","Display all transactions.":"Display all transactions.","No transactions has been registered":"No transactions has been registered","Add a new transaction":"Add a new transaction","Create a new transaction":"Create a new transaction","Register a new transaction and save it.":"Register a new transaction and save it.","Edit transaction":"Edit transaction","Modify Transaction.":"Modify Transaction.","Return to Transactions":"Return to Transactions","determine if the transaction is effective or not. Work for recurring and not recurring transactions.":"determine if the transaction is effective or not. Work for recurring and not recurring transactions.","Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.":"Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.","Transaction Account":"Transaction Account","Assign the transaction to an account430":"Assign the transaction to an account430","Is the value or the cost of the transaction.":"Is the value or the cost of the transaction.","If set to Yes, the transaction will trigger on defined occurrence.":"If set to Yes, the transaction will trigger on defined occurrence.","Define how often this transaction occurs":"Define how often this transaction occurs","Define what is the type of the transactions.":"Define what is the type of the transactions.","Trigger":"Trigger","Would you like to trigger this expense now?":"Would you like to trigger this expense now?","Transactions History List":"Transactions History List","Display all transaction history.":"Display all transaction history.","No transaction history has been registered":"No transaction history has been registered","Add a new transaction history":"Add a new transaction history","Create a new transaction history":"Create a new transaction history","Register a new transaction history and save it.":"Register a new transaction history and save it.","Edit transaction history":"Edit transaction history","Modify Transactions history.":"Modify Transactions history.","Return to Transactions History":"Return to Transactions History","Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.":"Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.","Set the limit that can\\'t be exceeded by the user.":"Set the limit that can\\'t be exceeded by the user.","Oops, We\\'re Sorry!!!":"Oops, We\\'re Sorry!!!","Class: %s":"Class: %s","There\\'s is mismatch with the core version.":"There\\'s is mismatch with the core version.","You\\'re not authenticated.":"You\\'re not authenticated.","An error occured while performing your request.":"An error occured while performing your request.","A mismatch has occured between a module and it\\'s dependency.":"A mismatch has occured between a module and it\\'s dependency.","You\\'re not allowed to see that page.":"You\\'re not allowed to see that page.","Post Too Large":"Post Too Large","The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini":"The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini","This field does\\'nt have a valid value.":"This field does\\'nt have a valid value.","Describe the direct transaction.":"Describe the direct transaction.","If set to yes, the transaction will take effect immediately and be saved on the history.":"If set to yes, the transaction will take effect immediately and be saved on the history.","Assign the transaction to an account.":"Assign the transaction to an account.","set the value of the transaction.":"set the value of the transaction.","Further details on the transaction.":"Further details on the transaction.","Describe the direct transactions.":"Describe the direct transactions.","set the value of the transactions.":"set the value of the transactions.","The transactions will be multipled by the number of user having that role.":"The transactions will be multipled by the number of user having that role.","Create Sales (needs Procurements)":"Create Sales (needs Procurements)","Set when the transaction should be executed.":"Set when the transaction should be executed.","The addresses were successfully updated.":"The addresses were successfully updated.","Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.":"Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.","The register doesn\\'t have an history.":"The register doesn\\'t have an history.","Unable to check a register session history if it\\'s closed.":"Unable to check a register session history if it\\'s closed.","Register History For : %s":"Register History For : %s","Can\\'t delete a category having sub categories linked to it.":"Can\\'t delete a category having sub categories linked to it.","Unable to proceed. The request doesn\\'t provide enough data which could be handled":"Unable to proceed. The request doesn\\'t provide enough data which could be handled","Unable to load the CRUD resource : %s.":"Unable to load the CRUD resource : %s.","Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods":"Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods","The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.":"The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.","The crud columns exceed the maximum column that can be exported (27)":"The crud columns exceed the maximum column that can be exported (27)","This link has expired.":"This link has expired.","Account History : %s":"Account History : %s","Welcome — %s":"Welcome — %s","Upload and manage medias (photos).":"Upload and manage medias (photos).","The product which id is %s doesnt\\'t belong to the procurement which id is %s":"The product which id is %s doesnt\\'t belong to the procurement which id is %s","The refresh process has started. You\\'ll get informed once it\\'s complete.":"The refresh process has started. You\\'ll get informed once it\\'s complete.","The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".":"The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".","Stock History For %s":"Stock History For %s","Set":"Set","The unit is not set for the product \"%s\".":"The unit is not set for the product \"%s\".","The operation will cause a negative stock for the product \"%s\" (%s).":"The operation will cause a negative stock for the product \"%s\" (%s).","The adjustment quantity can\\'t be negative for the product \"%s\" (%s)":"The adjustment quantity can\\'t be negative for the product \"%s\" (%s)","%s\\'s Products":"%s\\'s Products","Transactions Report":"Transactions Report","Combined Report":"Combined Report","Provides a combined report for every transactions on products.":"Provides a combined report for every transactions on products.","Unable to initiallize the settings page. The identifier \"' . $identifier . '":"Unable to initiallize the settings page. The identifier \"' . $identifier . '","Shows all histories generated by the transaction.":"Shows all histories generated by the transaction.","Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.":"Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.","Create New Transaction":"Create New Transaction","Set direct, scheduled transactions.":"Set direct, scheduled transactions.","Update Transaction":"Update Transaction","The provided data aren\\'t valid":"The provided data aren\\'t valid","Welcome — NexoPOS":"Welcome — NexoPOS","You\\'re not allowed to see this page.":"You\\'re not allowed to see this page.","Your don\\'t have enough permission to perform this action.":"Your don\\'t have enough permission to perform this action.","You don\\'t have the necessary role to see this page.":"You don\\'t have the necessary role to see this page.","%s order(s) has recently been deleted as they has expired.":"%s order(s) has recently been deleted as they has expired.","%s product(s) has low stock. Reorder those product(s) before it get exhausted.":"%s product(s) has low stock. Reorder those product(s) before it get exhausted.","Scheduled Transactions":"Scheduled Transactions","the transaction \"%s\" was executed as scheduled on %s.":"the transaction \"%s\" was executed as scheduled on %s.","Workers Aren\\'t Running":"Workers Aren\\'t Running","The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.":"The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.","Unable to remove the permissions \"%s\". It doesn\\'t exists.":"Unable to remove the permissions \"%s\". It doesn\\'t exists.","An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A":"An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A","Unable to open \"%s\" *, as it\\'s not closed.":"Unable to open \"%s\" *, as it\\'s not closed.","Unable to open \"%s\" *, as it\\'s not opened.":"Unable to open \"%s\" *, as it\\'s not opened.","Unable to cashing on \"%s\" *, as it\\'s not opened.":"Unable to cashing on \"%s\" *, as it\\'s not opened.","Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.":"Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.","Unable to cashout on \"%s":"Unable to cashout on \"%s","Symbolic Links Missing":"Symbolic Links Missing","The Symbolic Links to the public directory is missing. Your medias might be broken and not display.":"The Symbolic Links to the public directory is missing. Your medias might be broken and not display.","Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.":"Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.","The requested module %s cannot be found.":"The requested module %s cannot be found.","The manifest.json can\\'t be located inside the module %s on the path: %s":"The manifest.json can\\'t be located inside the module %s on the path: %s","the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.":"the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.","Sorting is explicitely disabled for the column \"%s\".":"Sorting is explicitely disabled for the column \"%s\".","Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s":"Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s","Unable to find the customer using the provided id %s.":"Unable to find the customer using the provided id %s.","Not enough credits on the customer account. Requested : %s, Remaining: %s.":"Not enough credits on the customer account. Requested : %s, Remaining: %s.","The customer account doesn\\'t have enough funds to proceed.":"The customer account doesn\\'t have enough funds to proceed.","Unable to find a reference to the attached coupon : %s":"Unable to find a reference to the attached coupon : %s","You\\'re not allowed to use this coupon as it\\'s no longer active":"You\\'re not allowed to use this coupon as it\\'s no longer active","You\\'re not allowed to use this coupon it has reached the maximum usage allowed.":"You\\'re not allowed to use this coupon it has reached the maximum usage allowed.","Terminal A":"Terminal A","Terminal B":"Terminal B","%s link were deleted":"%s link were deleted","Unable to execute the following class callback string : %s":"Unable to execute the following class callback string : %s","%s — %s":"%s — %s","Transactions":"Transactions","Create Transaction":"Create Transaction","Stock History":"Stock History","Invoices":"Invoices","Failed to parse the configuration file on the following path \"%s\"":"Failed to parse the configuration file on the following path \"%s\"","No config.xml has been found on the directory : %s. This folder is ignored":"No config.xml has been found on the directory : %s. This folder is ignored","The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ":"The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ","Unable to upload this module as it\\'s older than the version installed":"Unable to upload this module as it\\'s older than the version installed","The migration file doens\\'t have a valid class name. Expected class : %s":"The migration file doens\\'t have a valid class name. Expected class : %s","Unable to locate the following file : %s":"Unable to locate the following file : %s","The migration file doens\\'t have a valid method name. Expected method : %s":"The migration file doens\\'t have a valid method name. Expected method : %s","The module %s cannot be enabled as his dependency (%s) is missing or not enabled.":"The module %s cannot be enabled as his dependency (%s) is missing or not enabled.","The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.":"The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.","An Error Occurred \"%s\": %s":"An Error Occurred \"%s\": %s","The order has been updated":"The order has been updated","The minimal payment of %s has\\'nt been provided.":"The minimal payment of %s has\\'nt been provided.","Unable to proceed as the order is already paid.":"Unable to proceed as the order is already paid.","The customer account funds are\\'nt enough to process the payment.":"The customer account funds are\\'nt enough to process the payment.","Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.","Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.","By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.":"By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.","You\\'re not allowed to make payments.":"You\\'re not allowed to make payments.","Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s":"Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s","Unknown Status (%s)":"Unknown Status (%s)","%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.":"%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.","Unable to find a reference of the provided coupon : %s":"Unable to find a reference of the provided coupon : %s","The procurement has been deleted. %s included stock record(s) has been deleted as well.":"The procurement has been deleted. %s included stock record(s) has been deleted as well.","Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.":"Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.","Unable to find the product using the provided id \"%s\"":"Unable to find the product using the provided id \"%s\"","Unable to procure the product \"%s\" as the stock management is disabled.":"Unable to procure the product \"%s\" as the stock management is disabled.","Unable to procure the product \"%s\" as it is a grouped product.":"Unable to procure the product \"%s\" as it is a grouped product.","The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item":"The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item","%s procurement(s) has recently been automatically procured.":"%s procurement(s) has recently been automatically procured.","The requested category doesn\\'t exists":"The requested category doesn\\'t exists","The category to which the product is attached doesn\\'t exists or has been deleted":"The category to which the product is attached doesn\\'t exists or has been deleted","Unable to create a product with an unknow type : %s":"Unable to create a product with an unknow type : %s","A variation within the product has a barcode which is already in use : %s.":"A variation within the product has a barcode which is already in use : %s.","A variation within the product has a SKU which is already in use : %s":"A variation within the product has a SKU which is already in use : %s","Unable to edit a product with an unknown type : %s":"Unable to edit a product with an unknown type : %s","The requested sub item doesn\\'t exists.":"The requested sub item doesn\\'t exists.","One of the provided product variation doesn\\'t include an identifier.":"One of the provided product variation doesn\\'t include an identifier.","The product\\'s unit quantity has been updated.":"The product\\'s unit quantity has been updated.","Unable to reset this variable product \"%s":"Unable to reset this variable product \"%s","Adjusting grouped product inventory must result of a create, update, delete sale operation.":"Adjusting grouped product inventory must result of a create, update, delete sale operation.","Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).":"Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).","Unsupported stock action \"%s\"":"Unsupported stock action \"%s\"","%s product(s) has been deleted.":"%s product(s) has been deleted.","%s products(s) has been deleted.":"%s products(s) has been deleted.","Unable to find the product, as the argument \"%s\" which value is \"%s":"Unable to find the product, as the argument \"%s\" which value is \"%s","You cannot convert unit on a product having stock management disabled.":"You cannot convert unit on a product having stock management disabled.","The source and the destination unit can\\'t be the same. What are you trying to do ?":"The source and the destination unit can\\'t be the same. What are you trying to do ?","There is no source unit quantity having the name \"%s\" for the item %s":"There is no source unit quantity having the name \"%s\" for the item %s","There is no destination unit quantity having the name %s for the item %s":"There is no destination unit quantity having the name %s for the item %s","The source unit and the destination unit doens\\'t belong to the same unit group.":"The source unit and the destination unit doens\\'t belong to the same unit group.","The group %s has no base unit defined":"The group %s has no base unit defined","The conversion of %s(%s) to %s(%s) was successful":"The conversion of %s(%s) to %s(%s) was successful","The product has been deleted.":"The product has been deleted.","An error occurred: %s.":"An error occurred: %s.","A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.":"A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.","Today\\'s Orders":"Today\\'s Orders","Today\\'s Sales":"Today\\'s Sales","Today\\'s Refunds":"Today\\'s Refunds","Today\\'s Customers":"Today\\'s Customers","The report will be generated. Try loading the report within few minutes.":"The report will be generated. Try loading the report within few minutes.","The database has been wiped out.":"The database has been wiped out.","No custom handler for the reset \"' . $mode . '\"":"No custom handler for the reset \"' . $mode . '\"","Unable to proceed. The parent tax doesn\\'t exists.":"Unable to proceed. The parent tax doesn\\'t exists.","A simple tax must not be assigned to a parent tax with the type \"simple":"A simple tax must not be assigned to a parent tax with the type \"simple","Created via tests":"Created via tests","The transaction has been successfully saved.":"The transaction has been successfully saved.","The transaction has been successfully updated.":"The transaction has been successfully updated.","Unable to find the transaction using the provided identifier.":"Unable to find the transaction using the provided identifier.","Unable to find the requested transaction using the provided id.":"Unable to find the requested transaction using the provided id.","The transction has been correctly deleted.":"The transction has been correctly deleted.","You cannot delete an account which has transactions bound.":"You cannot delete an account which has transactions bound.","The transaction account has been deleted.":"The transaction account has been deleted.","Unable to find the transaction account using the provided ID.":"Unable to find the transaction account using the provided ID.","The transaction account has been updated.":"The transaction account has been updated.","This transaction type can\\'t be triggered.":"This transaction type can\\'t be triggered.","The transaction has been successfully triggered.":"The transaction has been successfully triggered.","The transaction \"%s\" has been processed on day \"%s\".":"The transaction \"%s\" has been processed on day \"%s\".","The transaction \"%s\" has already been processed.":"The transaction \"%s\" has already been processed.","The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.":"The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.","The process has been correctly executed and all transactions has been processed.":"The process has been correctly executed and all transactions has been processed.","The process has been executed with some failures. %s\/%s process(es) has successed.":"The process has been executed with some failures. %s\/%s process(es) has successed.","Procurement : %s":"Procurement : %s","Procurement Liability : %s":"Procurement Liability : %s","Refunding : %s":"Refunding : %s","Spoiled Good : %s":"Spoiled Good : %s","Sale : %s":"Sale : %s","Liabilities Account":"Liabilities Account","Not found account type: %s":"Not found account type: %s","Refund : %s":"Refund : %s","Customer Account Crediting : %s":"Customer Account Crediting : %s","Customer Account Purchase : %s":"Customer Account Purchase : %s","Customer Account Deducting : %s":"Customer Account Deducting : %s","Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.":"Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.","The unit group %s doesn\\'t have a base unit":"The unit group %s doesn\\'t have a base unit","The system role \"Users\" can be retrieved.":"The system role \"Users\" can be retrieved.","The default role that must be assigned to new users cannot be retrieved.":"The default role that must be assigned to new users cannot be retrieved.","%s Second(s)":"%s Second(s)","Configure the accounting feature":"Configure the accounting feature","Define the symbol that indicate thousand. By default ":"Define the symbol that indicate thousand. By default ","Date Time Format":"Date Time Format","This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".":"This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".","Date TimeZone":"Date TimeZone","Determine the default timezone of the store. Current Time: %s":"Determine the default timezone of the store. Current Time: %s","Configure how invoice and receipts are used.":"Configure how invoice and receipts are used.","configure settings that applies to orders.":"configure settings that applies to orders.","Report Settings":"Report Settings","Configure the settings":"Configure the settings","Wipes and Reset the database.":"Wipes and Reset the database.","Supply Delivery":"Supply Delivery","Configure the delivery feature.":"Configure the delivery feature.","Configure how background operations works.":"Configure how background operations works.","Every procurement will be added to the selected transaction account":"Every procurement will be added to the selected transaction account","Every sales will be added to the selected transaction account":"Every sales will be added to the selected transaction account","Customer Credit Account (crediting)":"Customer Credit Account (crediting)","Every customer credit will be added to the selected transaction account":"Every customer credit will be added to the selected transaction account","Customer Credit Account (debitting)":"Customer Credit Account (debitting)","Every customer credit removed will be added to the selected transaction account":"Every customer credit removed will be added to the selected transaction account","Sales refunds will be attached to this transaction account":"Sales refunds will be attached to this transaction account","Stock Return Account (Spoiled Items)":"Stock Return Account (Spoiled Items)","Disbursement (cash register)":"Disbursement (cash register)","Transaction account for all cash disbursement.":"Transaction account for all cash disbursement.","Liabilities":"Liabilities","Transaction account for all liabilities.":"Transaction account for all liabilities.","You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.":"You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.","Show Tax Breakdown":"Show Tax Breakdown","Will display the tax breakdown on the receipt\/invoice.":"Will display the tax breakdown on the receipt\/invoice.","Available tags : ":"Available tags : ","{store_name}: displays the store name.":"{store_name}: displays the store name.","{store_email}: displays the store email.":"{store_email}: displays the store email.","{store_phone}: displays the store phone number.":"{store_phone}: displays the store phone number.","{cashier_name}: displays the cashier name.":"{cashier_name}: displays the cashier name.","{cashier_id}: displays the cashier id.":"{cashier_id}: displays the cashier id.","{order_code}: displays the order code.":"{order_code}: displays the order code.","{order_date}: displays the order date.":"{order_date}: displays the order date.","{order_type}: displays the order type.":"{order_type}: displays the order type.","{customer_name}: displays the customer name.":"{customer_name}: displays the customer name.","{customer_email}: displays the customer email.":"{customer_email}: displays the customer email.","{shipping_first_name}: displays the shipping first name.":"{shipping_first_name}: displays the shipping first name.","{shipping_last_name}: displays the shipping last name.":"{shipping_last_name}: displays the shipping last name.","{shipping_phone}: displays the shipping phone.":"{shipping_phone}: displays the shipping phone.","{shipping_address_1}: displays the shipping address_1.":"{shipping_address_1}: displays the shipping address_1.","{shipping_address_2}: displays the shipping address_2.":"{shipping_address_2}: displays the shipping address_2.","{shipping_country}: displays the shipping country.":"{shipping_country}: displays the shipping country.","{shipping_city}: displays the shipping city.":"{shipping_city}: displays the shipping city.","{shipping_pobox}: displays the shipping pobox.":"{shipping_pobox}: displays the shipping pobox.","{shipping_company}: displays the shipping company.":"{shipping_company}: displays the shipping company.","{shipping_email}: displays the shipping email.":"{shipping_email}: displays the shipping email.","{billing_first_name}: displays the billing first name.":"{billing_first_name}: displays the billing first name.","{billing_last_name}: displays the billing last name.":"{billing_last_name}: displays the billing last name.","{billing_phone}: displays the billing phone.":"{billing_phone}: displays the billing phone.","{billing_address_1}: displays the billing address_1.":"{billing_address_1}: displays the billing address_1.","{billing_address_2}: displays the billing address_2.":"{billing_address_2}: displays the billing address_2.","{billing_country}: displays the billing country.":"{billing_country}: displays the billing country.","{billing_city}: displays the billing city.":"{billing_city}: displays the billing city.","{billing_pobox}: displays the billing pobox.":"{billing_pobox}: displays the billing pobox.","{billing_company}: displays the billing company.":"{billing_company}: displays the billing company.","{billing_email}: displays the billing email.":"{billing_email}: displays the billing email.","Available tags :":"Available tags :","Quick Product Default Unit":"Quick Product Default Unit","Set what unit is assigned by default to all quick product.":"Set what unit is assigned by default to all quick product.","Hide Exhausted Products":"Hide Exhausted Products","Will hide exhausted products from selection on the POS.":"Will hide exhausted products from selection on the POS.","Hide Empty Category":"Hide Empty Category","Category with no or exhausted products will be hidden from selection.":"Category with no or exhausted products will be hidden from selection.","Default Printing (web)":"Default Printing (web)","The amount numbers shortcuts separated with a \"|\".":"The amount numbers shortcuts separated with a \"|\".","No submit URL was provided":"No submit URL was provided","Sorting is explicitely disabled on this column":"Sorting is explicitely disabled on this column","An unpexpected error occured while using the widget.":"An unpexpected error occured while using the widget.","This field must be similar to \"{other}\"\"":"This field must be similar to \"{other}\"\"","This field must have at least \"{length}\" characters\"":"This field must have at least \"{length}\" characters\"","This field must have at most \"{length}\" characters\"":"This field must have at most \"{length}\" characters\"","This field must be different from \"{other}\"\"":"This field must be different from \"{other}\"\"","Search result":"Search result","Choose...":"Choose...","The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.":"The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.","+{count} other":"+{count} other","The selected print gateway doesn't support this type of printing.":"The selected print gateway doesn't support this type of printing.","millisecond| second| minute| hour| day| week| month| year| decade| century| millennium":"millisecond| second| minute| hour| day| week| month| year| decade| century| millennium","milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia":"milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia","An error occured":"An error occured","You\\'re about to delete selected resources. Would you like to proceed?":"You\\'re about to delete selected resources. Would you like to proceed?","See Error":"See Error","Your uploaded files will displays here.":"Your uploaded files will displays here.","Nothing to care about !":"Nothing to care about !","Would you like to bulk edit a system role ?":"Would you like to bulk edit a system role ?","Total :":"Total :","Remaining :":"Remaining :","Instalments:":"Instalments:","This instalment doesn\\'t have any payment attached.":"This instalment doesn\\'t have any payment attached.","You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?":"You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?","An error has occured while seleting the payment gateway.":"An error has occured while seleting the payment gateway.","You're not allowed to add a discount on the product.":"You're not allowed to add a discount on the product.","You're not allowed to add a discount on the cart.":"You're not allowed to add a discount on the cart.","Cash Register : {register}":"Cash Register : {register}","The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?":"The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?","You don't have the right to edit the purchase price.":"You don't have the right to edit the purchase price.","Dynamic product can\\'t have their price updated.":"Dynamic product can\\'t have their price updated.","You\\'re not allowed to edit the order settings.":"You\\'re not allowed to edit the order settings.","Looks like there is either no products and no categories. How about creating those first to get started ?":"Looks like there is either no products and no categories. How about creating those first to get started ?","Create Categories":"Create Categories","You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?":"You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?","An unexpected error has occured while loading the form. Please check the log or contact the support.":"An unexpected error has occured while loading the form. Please check the log or contact the support.","We were not able to load the units. Make sure there are units attached on the unit group selected.":"We were not able to load the units. Make sure there are units attached on the unit group selected.","The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?":"The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?","There shoulnd\\'t be more option than there are units.":"There shoulnd\\'t be more option than there are units.","Either Selling or Purchase unit isn\\'t defined. Unable to proceed.":"Either Selling or Purchase unit isn\\'t defined. Unable to proceed.","Select the procured unit first before selecting the conversion unit.":"Select the procured unit first before selecting the conversion unit.","Convert to unit":"Convert to unit","An unexpected error has occured":"An unexpected error has occured","Unable to add product which doesn\\'t unit quantities defined.":"Unable to add product which doesn\\'t unit quantities defined.","{product}: Purchase Unit":"{product}: Purchase Unit","The product will be procured on that unit.":"The product will be procured on that unit.","Unkown Unit":"Unkown Unit","Choose Tax":"Choose Tax","The tax will be assigned to the procured product.":"The tax will be assigned to the procured product.","Show Details":"Show Details","Hide Details":"Hide Details","Important Notes":"Important Notes","Stock Management Products.":"Stock Management Products.","Doesn\\'t work with Grouped Product.":"Doesn\\'t work with Grouped Product.","Convert":"Convert","Looks like no valid products matched the searched term.":"Looks like no valid products matched the searched term.","This product doesn't have any stock to adjust.":"This product doesn't have any stock to adjust.","Select Unit":"Select Unit","Select the unit that you want to adjust the stock with.":"Select the unit that you want to adjust the stock with.","A similar product with the same unit already exists.":"A similar product with the same unit already exists.","Select Procurement":"Select Procurement","Select the procurement that you want to adjust the stock with.":"Select the procurement that you want to adjust the stock with.","Select Action":"Select Action","Select the action that you want to perform on the stock.":"Select the action that you want to perform on the stock.","Would you like to remove the selected products from the table ?":"Would you like to remove the selected products from the table ?","Unit:":"Unit:","Operation:":"Operation:","Procurement:":"Procurement:","Reason:":"Reason:","Provided":"Provided","Not Provided":"Not Provided","Remove Selected":"Remove Selected","Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.":"Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.","You haven\\'t yet generated any token for your account. Create one to get started.":"You haven\\'t yet generated any token for your account. Create one to get started.","You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?":"You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?","Date Range : {date1} - {date2}":"Date Range : {date1} - {date2}","Document : Best Products":"Document : Best Products","By : {user}":"By : {user}","Range : {date1} — {date2}":"Range : {date1} — {date2}","Document : Sale By Payment":"Document : Sale By Payment","Document : Customer Statement":"Document : Customer Statement","Customer : {selectedCustomerName}":"Customer : {selectedCustomerName}","All Categories":"All Categories","All Units":"All Units","Date : {date}":"Date : {date}","Document : {reportTypeName}":"Document : {reportTypeName}","Threshold":"Threshold","Select Units":"Select Units","An error has occured while loading the units.":"An error has occured while loading the units.","An error has occured while loading the categories.":"An error has occured while loading the categories.","Document : Payment Type":"Document : Payment Type","Document : Profit Report":"Document : Profit Report","Filter by Category":"Filter by Category","Filter by Units":"Filter by Units","An error has occured while loading the categories":"An error has occured while loading the categories","An error has occured while loading the units":"An error has occured while loading the units","By Type":"By Type","By User":"By User","By Category":"By Category","All Category":"All Category","Document : Sale Report":"Document : Sale Report","Filter By Category":"Filter By Category","Allow you to choose the category.":"Allow you to choose the category.","No category was found for proceeding the filtering.":"No category was found for proceeding the filtering.","Document : Sold Stock Report":"Document : Sold Stock Report","Filter by Unit":"Filter by Unit","Limit Results By Categories":"Limit Results By Categories","Limit Results By Units":"Limit Results By Units","Generate Report":"Generate Report","Document : Combined Products History":"Document : Combined Products History","Ini. Qty":"Ini. Qty","Added Quantity":"Added Quantity","Add. Qty":"Add. Qty","Sold Quantity":"Sold Quantity","Sold Qty":"Sold Qty","Defective Quantity":"Defective Quantity","Defec. Qty":"Defec. Qty","Final Quantity":"Final Quantity","Final Qty":"Final Qty","No data available":"No data available","Document : Yearly Report":"Document : Yearly Report","The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.":"The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.","Unable to edit this transaction":"Unable to edit this transaction","This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.":"This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.","Save Transaction":"Save Transaction","While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.":"While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.","The transaction is about to be saved. Would you like to confirm your action ?":"The transaction is about to be saved. Would you like to confirm your action ?","Unable to load the transaction":"Unable to load the transaction","You cannot edit this transaction if NexoPOS cannot perform background requests.":"You cannot edit this transaction if NexoPOS cannot perform background requests.","MySQL is selected as database driver":"MySQL is selected as database driver","Please provide the credentials to ensure NexoPOS can connect to the database.":"Please provide the credentials to ensure NexoPOS can connect to the database.","Sqlite is selected as database driver":"Sqlite is selected as database driver","Make sure Sqlite module is available for PHP. Your database will be located on the database directory.":"Make sure Sqlite module is available for PHP. Your database will be located on the database directory.","Checking database connectivity...":"Checking database connectivity...","Driver":"Driver","Set the database driver":"Set the database driver","Hostname":"Hostname","Provide the database hostname":"Provide the database hostname","Username required to connect to the database.":"Username required to connect to the database.","The username password required to connect.":"The username password required to connect.","Database Name":"Database Name","Provide the database name. Leave empty to use default file for SQLite Driver.":"Provide the database name. Leave empty to use default file for SQLite Driver.","Database Prefix":"Database Prefix","Provide the database prefix.":"Provide the database prefix.","Port":"Port","Provide the hostname port.":"Provide the hostname port.","NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.":"NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.","Install":"Install","Application":"Application","That is the application name.":"That is the application name.","Provide the administrator username.":"Provide the administrator username.","Provide the administrator email.":"Provide the administrator email.","What should be the password required for authentication.":"What should be the password required for authentication.","Should be the same as the password above.":"Should be the same as the password above.","Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.":"Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.","Choose your language to get started.":"Choose your language to get started.","Remaining Steps":"Remaining Steps","Database Configuration":"Database Configuration","Application Configuration":"Application Configuration","Language Selection":"Language Selection","Select what will be the default language of NexoPOS.":"Select what will be the default language of NexoPOS.","In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.":"In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.","Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.":"Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.","Please report this message to the support : ":"Please report this message to the support : ","No refunds made so far. Good news right?":"No refunds made so far. Good news right?","Open Register : %s":"Open Register : %s","Loading Coupon For : ":"Loading Coupon For : ","This coupon requires products that aren\\'t available on the cart at the moment.":"This coupon requires products that aren\\'t available on the cart at the moment.","This coupon requires products that belongs to specific categories that aren\\'t included at the moment.":"This coupon requires products that belongs to specific categories that aren\\'t included at the moment.","Too many results.":"Too many results.","New Customer":"New Customer","Purchases":"Purchases","Owed":"Owed","Usage :":"Usage :","Code :":"Code :","Order Reference":"Order Reference","The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?":"The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?","{product} : Units":"{product} : Units","This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.":"This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.","Previewing :":"Previewing :","Search for options":"Search for options","The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.":"The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.","The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.":"The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.","The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.":"The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.","The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.":"The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.","Invalid Error Message":"Invalid Error Message","{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List":"{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List","Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.":"Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.","No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered":"No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered","Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.":"Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.","Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.":"Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.","Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}":"Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}","{{ ucwords( $column ) }}":"{{ ucwords( $column ) }}","Delete Selected Entries":"Delete Selected Entries","Unamed Settings Page":"Unamed Settings Page","Description of unamed setting page":"Description of unamed setting page","Text Field":"Text Field","This is a sample text field.":"This is a sample text field.","No description has been provided.":"No description has been provided.","You\\'re using NexoPOS %s<\/a>":"You\\'re using NexoPOS %s<\/a>","If you haven\\'t asked this, please get in touch with the administrators.":"If you haven\\'t asked this, please get in touch with the administrators.","A new user has registered to your store (%s) with the email %s.":"A new user has registered to your store (%s) with the email %s.","The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.":"The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.","Note: ":"Note: ","Inclusive Product Taxes":"Inclusive Product Taxes","Exclusive Product Taxes":"Exclusive Product Taxes","Condition:":"Condition:","Date : %s":"Date : %s","The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?":"The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?","NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.":"NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.","Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.":"Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.","Retry":"Retry","If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.":"If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources."} \ No newline at end of file +{ + "An invalid date were provided. Make sure it a prior date to the actual server date.": "An invalid date were provided. Make sure it a prior date to the actual server date.", + "Computing report from %s...": "Computing report from %s...", + "The operation was successful.": "The operation was successful.", + "Unable to find a module having the identifier\/namespace \"%s\"": "Unable to find a module having the identifier\/namespace \"%s\"", + "What is the CRUD single resource name ? [Q] to quit.": "What is the CRUD single resource name ? [Q] to quit.", + "Please provide a valid value": "Please provide a valid value", + "Which table name should be used ? [Q] to quit.": "Which table name should be used ? [Q] to quit.", + "What slug should be used ? [Q] to quit.": "What slug should be used ? [Q] to quit.", + "Please provide a valid value.": "Ju lutem vendosni nje vlere te sakte.", + "If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.", + "Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.": "Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.", + "The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"": "The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"", + "The CRUD resource \"%s\" has been generated at %s": "The CRUD resource \"%s\" has been generated at %s", + "An unexpected error has occurred.": "An unexpected error has occurred.", + "Localization for %s extracted to %s": "Localization for %s extracted to %s", + "Unable to find the requested module.": "Unable to find the requested module.", + "\"%s\" is a reserved class name": "\"%s\" is a reserved class name", + "The migration file has been successfully forgotten for the module %s.": "The migration file has been successfully forgotten for the module %s.", + "Name": "Emri", + "Namespace": "Namespace", + "Version": "Versioni", + "Author": "Autor", + "Enabled": "Aktiv", + "Yes": "Po", + "No": "Jo", + "Path": "Path", + "Index": "Index", + "Entry Class": "Entry Class", + "Routes": "Routes", + "Api": "Api", + "Controllers": "Controllers", + "Views": "Views", + "Dashboard": "Dashboard", + "Attribute": "Attribute", + "Value": "Value", + "There is no migrations to perform for the module \"%s\"": "There is no migrations to perform for the module \"%s\"", + "The module migration has successfully been performed for the module \"%s\"": "The module migration has successfully been performed for the module \"%s\"", + "The products taxes were computed successfully.": "Taksat e Produkteve u kalkuluan me sukses.", + "The product barcodes has been refreshed successfully.": "Barkodet e Produkteve u rifreskuan me Sukses.", + "The demo has been enabled.": "DEMO u aktivizua.", + "What is the store name ? [Q] to quit.": "Si eshte Emri i Dyqanit ? [Q] per te mbyllur.", + "Please provide at least 6 characters for store name.": "Please provide at least 6 characters for store name.", + "What is the administrator password ? [Q] to quit.": "What is the administrator password ? [Q] to quit.", + "Please provide at least 6 characters for the administrator password.": "Please provide at least 6 characters for the administrator password.", + "What is the administrator email ? [Q] to quit.": "What is the administrator email ? [Q] to quit.", + "Please provide a valid email for the administrator.": "Please provide a valid email for the administrator.", + "What is the administrator username ? [Q] to quit.": "What is the administrator username ? [Q] to quit.", + "Please provide at least 5 characters for the administrator username.": "Please provide at least 5 characters for the administrator username.", + "Downloading latest dev build...": "Downloading latest dev build...", + "Reset project to HEAD...": "Reset project to HEAD...", + "Provide a name to the resource.": "Caktoni nje emer per ta identifikuar.", + "General": "Te Pergjithshme", + "Operation": "Operation", + "By": "Nga", + "Date": "Data", + "Credit": "Credit", + "Debit": "Debit", + "Delete": "Fshi", + "Would you like to delete this ?": "Deshironi ta fshini kete ?", + "Delete Selected Groups": "Fshi Grupet e Zgjedhura", + "Coupons List": "Lista e Kuponave", + "Display all coupons.": "Shfaq te gjithe Kuponat.", + "No coupons has been registered": "Nuk ka Kupona te Regjistruar", + "Add a new coupon": "Shto nje Kupon te ri", + "Create a new coupon": "Krijo Kupon te ri", + "Register a new coupon and save it.": "Krijo dhe Ruaj Kupon te ri.", + "Edit coupon": "Edito Kupon", + "Modify Coupon.": "Modifiko Kupon.", + "Return to Coupons": "Kthehu tek Kuponat", + "Coupon Code": "Vendos Kod Kuponi", + "Might be used while printing the coupon.": "Mund te perdoret nese printoni kupona me kod zbritje.", + "Percentage Discount": "Zbritje me %", + "Flat Discount": "Zbritje Fikse", + "Type": "Tip Porosie", + "Define which type of discount apply to the current coupon.": "Zgjidh llojin e Zbritjes per kete Kupon.", + "Discount Value": "Vlera e Zbritjes", + "Define the percentage or flat value.": "Define the percentage or flat value.", + "Valid Until": "Valid Until", + "Minimum Cart Value": "Minimum Cart Value", + "What is the minimum value of the cart to make this coupon eligible.": "What is the minimum value of the cart to make this coupon eligible.", + "Maximum Cart Value": "Maximum Cart Value", + "Valid Hours Start": "Valid Hours Start", + "Define form which hour during the day the coupons is valid.": "Define form which hour during the day the coupons is valid.", + "Valid Hours End": "Valid Hours End", + "Define to which hour during the day the coupons end stop valid.": "Define to which hour during the day the coupons end stop valid.", + "Limit Usage": "Limit Usage", + "Define how many time a coupons can be redeemed.": "Define how many time a coupons can be redeemed.", + "Products": "Produkte", + "Select Products": "Zgjidh Produkte", + "The following products will be required to be present on the cart, in order for this coupon to be valid.": "The following products will be required to be present on the cart, in order for this coupon to be valid.", + "Categories": "Kategorite", + "Select Categories": "Zgjidh Kategorite", + "The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.": "The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.", + "Valid From": "E Vlefshme prej", + "Valid Till": "E Vlefshme deri me", + "Created At": "Krijuar me", + "N\/A": "N\/A", + "Undefined": "Undefined", + "Edit": "Edito", + "Delete a licence": "Delete a licence", + "Previous Amount": "Previous Amount", + "Amount": "Shuma", + "Next Amount": "Next Amount", + "Description": "Pershkrimi", + "Order": "Order", + "Restrict the records by the creation date.": "Restrict the records by the creation date.", + "Created Between": "Created Between", + "Operation Type": "Operation Type", + "Restrict the orders by the payment status.": "Restrict the orders by the payment status.", + "Restrict the records by the author.": "Restrict the records by the author.", + "Total": "Total", + "Customer Accounts List": "Customer Accounts List", + "Display all customer accounts.": "Display all customer accounts.", + "No customer accounts has been registered": "No customer accounts has been registered", + "Add a new customer account": "Add a new customer account", + "Create a new customer account": "Create a new customer account", + "Register a new customer account and save it.": "Register a new customer account and save it.", + "Edit customer account": "Edit customer account", + "Modify Customer Account.": "Modify Customer Account.", + "Return to Customer Accounts": "Return to Customer Accounts", + "This will be ignored.": "This will be ignored.", + "Define the amount of the transaction": "Define the amount of the transaction", + "Deduct": "Redukto", + "Add": "Shto", + "Define what operation will occurs on the customer account.": "Define what operation will occurs on the customer account.", + "Customer Coupons List": "Lista e Kuponave per Klientet", + "Display all customer coupons.": "Display all customer coupons.", + "No customer coupons has been registered": "No customer coupons has been registered", + "Add a new customer coupon": "Add a new customer coupon", + "Create a new customer coupon": "Create a new customer coupon", + "Register a new customer coupon and save it.": "Register a new customer coupon and save it.", + "Edit customer coupon": "Edit customer coupon", + "Modify Customer Coupon.": "Modify Customer Coupon.", + "Return to Customer Coupons": "Return to Customer Coupons", + "Usage": "Usage", + "Define how many time the coupon has been used.": "Define how many time the coupon has been used.", + "Limit": "Limit", + "Define the maximum usage possible for this coupon.": "Define the maximum usage possible for this coupon.", + "Customer": "Klienti", + "Code": "Code", + "Percentage": "Perqindje", + "Flat": "Vlere Monetare", + "Customers List": "Lista e Klienteve", + "Display all customers.": "Shfaq te gjithe Klientet.", + "No customers has been registered": "No customers has been registered", + "Add a new customer": "Shto nje Klient te Ri", + "Create a new customer": "Krijo nje Klient te Ri", + "Register a new customer and save it.": "Register a new customer and save it.", + "Edit customer": "Edito Klientin", + "Modify Customer.": "Modifiko Klientin.", + "Return to Customers": "Kthehu tek Klientet", + "Customer Name": "Emri i Klientit", + "Provide a unique name for the customer.": "Ploteso me nje Emer unik Klientim.", + "Credit Limit": "Credit Limit", + "Set what should be the limit of the purchase on credit.": "Set what should be the limit of the purchase on credit.", + "Group": "Grupi", + "Assign the customer to a group": "Assign the customer to a group", + "Birth Date": "Datelindja", + "Displays the customer birth date": "Displays the customer birth date", + "Email": "Email", + "Provide the customer email.": "Provide the customer email.", + "Phone Number": "Numri i Telefonit", + "Provide the customer phone number": "Provide the customer phone number", + "PO Box": "PO Box", + "Provide the customer PO.Box": "Provide the customer PO.Box", + "Not Defined": "Not Defined", + "Male": "Burre", + "Female": "Grua", + "Gender": "Gjinia", + "Billing Address": "Billing Address", + "Phone": "Phone", + "Billing phone number.": "Billing phone number.", + "Address 1": "Address 1", + "Billing First Address.": "Billing First Address.", + "Address 2": "Address 2", + "Billing Second Address.": "Billing Second Address.", + "Country": "Country", + "Billing Country.": "Billing Country.", + "City": "City", + "PO.Box": "PO.Box", + "Postal Address": "Postal Address", + "Company": "Company", + "Shipping Address": "Shipping Address", + "Shipping phone number.": "Shipping phone number.", + "Shipping First Address.": "Shipping First Address.", + "Shipping Second Address.": "Shipping Second Address.", + "Shipping Country.": "Shipping Country.", + "Account Credit": "Account Credit", + "Owed Amount": "Owed Amount", + "Purchase Amount": "Purchase Amount", + "Orders": "Porosi", + "Rewards": "Rewards", + "Coupons": "Kupona", + "Wallet History": "Wallet History", + "Delete a customers": "Delete a customers", + "Delete Selected Customers": "Delete Selected Customers", + "Customer Groups List": "Customer Groups List", + "Display all Customers Groups.": "Display all Customers Groups.", + "No Customers Groups has been registered": "No Customers Groups has been registered", + "Add a new Customers Group": "Add a new Customers Group", + "Create a new Customers Group": "Create a new Customers Group", + "Register a new Customers Group and save it.": "Register a new Customers Group and save it.", + "Edit Customers Group": "Edit Customers Group", + "Modify Customers group.": "Modify Customers group.", + "Return to Customers Groups": "Return to Customers Groups", + "Reward System": "Reward System", + "Select which Reward system applies to the group": "Select which Reward system applies to the group", + "Minimum Credit Amount": "Minimum Credit Amount", + "A brief description about what this group is about": "A brief description about what this group is about", + "Created On": "Created On", + "Customer Orders List": "Customer Orders List", + "Display all customer orders.": "Display all customer orders.", + "No customer orders has been registered": "No customer orders has been registered", + "Add a new customer order": "Add a new customer order", + "Create a new customer order": "Create a new customer order", + "Register a new customer order and save it.": "Register a new customer order and save it.", + "Edit customer order": "Edit customer order", + "Modify Customer Order.": "Modify Customer Order.", + "Return to Customer Orders": "Return to Customer Orders", + "Change": "Change", + "Created at": "Created at", + "Customer Id": "Customer Id", + "Delivery Status": "Delivery Status", + "Discount": "Zbritje", + "Discount Percentage": "Discount Percentage", + "Discount Type": "Discount Type", + "Final Payment Date": "Final Payment Date", + "Tax Excluded": "Tax Excluded", + "Id": "Id", + "Tax Included": "Tax Included", + "Payment Status": "Payment Status", + "Process Status": "Process Status", + "Shipping": "Shipping", + "Shipping Rate": "Shipping Rate", + "Shipping Type": "Shipping Type", + "Sub Total": "Sub Total", + "Tax Value": "Tax Value", + "Tendered": "Tendered", + "Title": "Title", + "Total installments": "Total installments", + "Updated at": "Updated at", + "Uuid": "Uuid", + "Voidance Reason": "Voidance Reason", + "Customer Rewards List": "Customer Rewards List", + "Display all customer rewards.": "Display all customer rewards.", + "No customer rewards has been registered": "No customer rewards has been registered", + "Add a new customer reward": "Add a new customer reward", + "Create a new customer reward": "Create a new customer reward", + "Register a new customer reward and save it.": "Register a new customer reward and save it.", + "Edit customer reward": "Edit customer reward", + "Modify Customer Reward.": "Modify Customer Reward.", + "Return to Customer Rewards": "Return to Customer Rewards", + "Points": "Points", + "Target": "Target", + "Reward Name": "Reward Name", + "Last Update": "Last Update", + "Accounts List": "Accounts List", + "Display All Accounts.": "Display All Accounts.", + "No Account has been registered": "No Account has been registered", + "Add a new Account": "Add a new Account", + "Create a new Account": "Create a new Account", + "Register a new Account and save it.": "Register a new Account and save it.", + "Edit Account": "Edit Account", + "Modify An Account.": "Modify An Account.", + "Return to Accounts": "Return to Accounts", + "All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.": "All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.", + "Account": "Account", + "Provide the accounting number for this category.": "Provide the accounting number for this category.", + "Active": "Active", + "Users Group": "Users Group", + "None": "None", + "Recurring": "Recurring", + "Start of Month": "Start of Month", + "Mid of Month": "Mid of Month", + "End of Month": "End of Month", + "X days Before Month Ends": "X days Before Month Ends", + "X days After Month Starts": "X days After Month Starts", + "Must be used in case of X days after month starts and X days before month ends.": "Must be used in case of X days after month starts and X days before month ends.", + "Category": "Category", + "Month Starts": "Month Starts", + "Month Middle": "Month Middle", + "Month Ends": "Month Ends", + "X Days Before Month Ends": "X Days Before Month Ends", + "Unknown Occurance": "Unknown Occurance", + "Product Histories": "Product Histories", + "Display all product stock flow.": "Display all product stock flow.", + "No products stock flow has been registered": "No products stock flow has been registered", + "Add a new products stock flow": "Add a new products stock flow", + "Create a new products stock flow": "Create a new products stock flow", + "Register a new products stock flow and save it.": "Register a new products stock flow and save it.", + "Edit products stock flow": "Edit products stock flow", + "Modify Globalproducthistorycrud.": "Modify Globalproducthistorycrud.", + "Return to Product Histories": "Return to Product Histories", + "Product": "Product", + "Procurement": "Procurement", + "Unit": "Unit", + "Initial Quantity": "Initial Quantity", + "Quantity": "Quantity", + "New Quantity": "New Quantity", + "Total Price": "Total Price", + "Added": "Added", + "Defective": "Defective", + "Deleted": "Deleted", + "Lost": "Lost", + "Removed": "Removed", + "Sold": "Sold", + "Stocked": "Stocked", + "Transfer Canceled": "Transfer Canceled", + "Incoming Transfer": "Incoming Transfer", + "Outgoing Transfer": "Outgoing Transfer", + "Void Return": "Void Return", + "Hold Orders List": "Hold Orders List", + "Display all hold orders.": "Display all hold orders.", + "No hold orders has been registered": "No hold orders has been registered", + "Add a new hold order": "Add a new hold order", + "Create a new hold order": "Create a new hold order", + "Register a new hold order and save it.": "Register a new hold order and save it.", + "Edit hold order": "Edit hold order", + "Modify Hold Order.": "Modify Hold Order.", + "Return to Hold Orders": "Return to Hold Orders", + "Updated At": "Updated At", + "Continue": "Continue", + "Restrict the orders by the creation date.": "Restrict the orders by the creation date.", + "Paid": "Paguar", + "Hold": "Ruaj", + "Partially Paid": "Paguar Pjeserisht", + "Partially Refunded": "Partially Refunded", + "Refunded": "Refunded", + "Unpaid": "Pa Paguar", + "Voided": "Voided", + "Due": "Due", + "Due With Payment": "Due With Payment", + "Restrict the orders by the author.": "Restrict the orders by the author.", + "Restrict the orders by the customer.": "Restrict the orders by the customer.", + "Customer Phone": "Customer Phone", + "Restrict orders using the customer phone number.": "Restrict orders using the customer phone number.", + "Cash Register": "Arka", + "Restrict the orders to the cash registers.": "Restrict the orders to the cash registers.", + "Orders List": "Orders List", + "Display all orders.": "Display all orders.", + "No orders has been registered": "No orders has been registered", + "Add a new order": "Add a new order", + "Create a new order": "Create a new order", + "Register a new order and save it.": "Register a new order and save it.", + "Edit order": "Edit order", + "Modify Order.": "Modify Order.", + "Return to Orders": "Return to Orders", + "Discount Rate": "Discount Rate", + "The order and the attached products has been deleted.": "The order and the attached products has been deleted.", + "Options": "Options", + "Refund Receipt": "Refund Receipt", + "Invoice": "Invoice", + "Receipt": "Receipt", + "Order Instalments List": "Order Instalments List", + "Display all Order Instalments.": "Display all Order Instalments.", + "No Order Instalment has been registered": "No Order Instalment has been registered", + "Add a new Order Instalment": "Add a new Order Instalment", + "Create a new Order Instalment": "Create a new Order Instalment", + "Register a new Order Instalment and save it.": "Register a new Order Instalment and save it.", + "Edit Order Instalment": "Edit Order Instalment", + "Modify Order Instalment.": "Modify Order Instalment.", + "Return to Order Instalment": "Return to Order Instalment", + "Order Id": "Order Id", + "Payment Types List": "Payment Types List", + "Display all payment types.": "Display all payment types.", + "No payment types has been registered": "No payment types has been registered", + "Add a new payment type": "Add a new payment type", + "Create a new payment type": "Create a new payment type", + "Register a new payment type and save it.": "Register a new payment type and save it.", + "Edit payment type": "Edit payment type", + "Modify Payment Type.": "Modify Payment Type.", + "Return to Payment Types": "Return to Payment Types", + "Label": "Label", + "Provide a label to the resource.": "Provide a label to the resource.", + "Priority": "Priority", + "Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".": "Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".", + "Identifier": "Identifier", + "A payment type having the same identifier already exists.": "A payment type having the same identifier already exists.", + "Unable to delete a read-only payments type.": "Unable to delete a read-only payments type.", + "Readonly": "Readonly", + "Procurements List": "Lista e Prokurimeve", + "Display all procurements.": "Shfaq te gjitha Prokurimet.", + "No procurements has been registered": "Nuk eshte regjistruar asnje Prokurim", + "Add a new procurement": "Shto nje Prokurim", + "Create a new procurement": "Krijo Prokurim te Ri", + "Register a new procurement and save it.": "Regjistro dhe Ruaj nje Prokurim.", + "Edit procurement": "Edito prokurimin", + "Modify Procurement.": "Modifiko Prokurimin.", + "Return to Procurements": "Return to Procurements", + "Provider Id": "Provider Id", + "Status": "Statusi", + "Total Items": "Total Items", + "Provider": "Provider", + "Invoice Date": "Invoice Date", + "Sale Value": "Sale Value", + "Purchase Value": "Purchase Value", + "Taxes": "Taksa", + "Set Paid": "Set Paid", + "Would you like to mark this procurement as paid?": "Would you like to mark this procurement as paid?", + "Refresh": "Rifresko", + "Would you like to refresh this ?": "Would you like to refresh this ?", + "Procurement Products List": "Procurement Products List", + "Display all procurement products.": "Display all procurement products.", + "No procurement products has been registered": "No procurement products has been registered", + "Add a new procurement product": "Add a new procurement product", + "Create a new procurement product": "Create a new procurement product", + "Register a new procurement product and save it.": "Register a new procurement product and save it.", + "Edit procurement product": "Edit procurement product", + "Modify Procurement Product.": "Modify Procurement Product.", + "Return to Procurement Products": "Return to Procurement Products", + "Expiration Date": "Expiration Date", + "Define what is the expiration date of the product.": "Define what is the expiration date of the product.", + "Barcode": "Barkodi", + "On": "On", + "Category Products List": "Category Products List", + "Display all category products.": "Display all category products.", + "No category products has been registered": "No category products has been registered", + "Add a new category product": "Add a new category product", + "Create a new category product": "Create a new category product", + "Register a new category product and save it.": "Register a new category product and save it.", + "Edit category product": "Edit category product", + "Modify Category Product.": "Modify Category Product.", + "Return to Category Products": "Return to Category Products", + "No Parent": "Pa Prind", + "Preview": "Preview", + "Provide a preview url to the category.": "Provide a preview url to the category.", + "Displays On POS": "Shfaqet ne POS", + "Parent": "Prindi", + "If this category should be a child category of an existing category": "If this category should be a child category of an existing category", + "Total Products": "Total Products", + "Products List": "Products List", + "Display all products.": "Display all products.", + "No products has been registered": "No products has been registered", + "Add a new product": "Add a new product", + "Create a new product": "Create a new product", + "Register a new product and save it.": "Register a new product and save it.", + "Edit product": "Edit product", + "Modify Product.": "Modify Product.", + "Return to Products": "Return to Products", + "Assigned Unit": "Assigned Unit", + "The assigned unit for sale": "The assigned unit for sale", + "Sale Price": "Sale Price", + "Define the regular selling price.": "Define the regular selling price.", + "Wholesale Price": "Wholesale Price", + "Define the wholesale price.": "Define the wholesale price.", + "Stock Alert": "Stock Alert", + "Define whether the stock alert should be enabled for this unit.": "Define whether the stock alert should be enabled for this unit.", + "Low Quantity": "Low Quantity", + "Which quantity should be assumed low.": "Which quantity should be assumed low.", + "Preview Url": "Preview Url", + "Provide the preview of the current unit.": "Provide the preview of the current unit.", + "Identification": "Identification", + "Select to which category the item is assigned.": "Select to which category the item is assigned.", + "Define the barcode value. Focus the cursor here before scanning the product.": "Define the barcode value. Focus the cursor here before scanning the product.", + "Define a unique SKU value for the product.": "Define a unique SKU value for the product.", + "SKU": "SKU", + "Define the barcode type scanned.": "Define the barcode type scanned.", + "EAN 8": "EAN 8", + "EAN 13": "EAN 13", + "Codabar": "Codabar", + "Code 128": "Code 128", + "Code 39": "Code 39", + "Code 11": "Code 11", + "UPC A": "UPC A", + "UPC E": "UPC E", + "Barcode Type": "Barcode Type", + "Materialized Product": "Materialized Product", + "Dematerialized Product": "Dematerialized Product", + "Grouped Product": "Grouped Product", + "Define the product type. Applies to all variations.": "Define the product type. Applies to all variations.", + "Product Type": "Product Type", + "On Sale": "On Sale", + "Hidden": "Hidden", + "Enable the stock management on the product. Will not work for service or uncountable products.": "Enable the stock management on the product. Will not work for service or uncountable products.", + "Stock Management Enabled": "Stock Management Enabled", + "Groups": "Groups", + "Units": "Units", + "Accurate Tracking": "Accurate Tracking", + "What unit group applies to the actual item. This group will apply during the procurement.": "What unit group applies to the actual item. This group will apply during the procurement.", + "Unit Group": "Unit Group", + "Determine the unit for sale.": "Determine the unit for sale.", + "Selling Unit": "Selling Unit", + "Expiry": "Expiry", + "Product Expires": "Product Expires", + "Set to \"No\" expiration time will be ignored.": "Set to \"No\" expiration time will be ignored.", + "Prevent Sales": "Prevent Sales", + "Allow Sales": "Allow Sales", + "Determine the action taken while a product has expired.": "Determine the action taken while a product has expired.", + "On Expiration": "On Expiration", + "Choose Group": "Choose Group", + "Select the tax group that applies to the product\/variation.": "Select the tax group that applies to the product\/variation.", + "Tax Group": "Tax Group", + "Inclusive": "Inclusive", + "Exclusive": "Exclusive", + "Define what is the type of the tax.": "Define what is the type of the tax.", + "Tax Type": "Tax Type", + "Images": "Images", + "Image": "Image", + "Choose an image to add on the product gallery": "Choose an image to add on the product gallery", + "Is Primary": "Is Primary", + "Sku": "Sku", + "Materialized": "Materialized", + "Dematerialized": "Dematerialized", + "Grouped": "Grouped", + "Disabled": "Disabled", + "Available": "Available", + "Unassigned": "Unassigned", + "See Quantities": "See Quantities", + "See History": "See History", + "Would you like to delete selected entries ?": "Would you like to delete selected entries ?", + "Display all product histories.": "Display all product histories.", + "No product histories has been registered": "No product histories has been registered", + "Add a new product history": "Add a new product history", + "Create a new product history": "Create a new product history", + "Register a new product history and save it.": "Register a new product history and save it.", + "Edit product history": "Edit product history", + "Modify Product History.": "Modify Product History.", + "After Quantity": "After Quantity", + "Before Quantity": "Before Quantity", + "Order id": "Order id", + "Procurement Id": "Procurement Id", + "Procurement Product Id": "Procurement Product Id", + "Product Id": "Product Id", + "Unit Id": "Unit Id", + "Unit Price": "Unit Price", + "P. Quantity": "P. Quantity", + "N. Quantity": "N. Quantity", + "Returned": "Returned", + "Transfer Rejected": "Transfer Rejected", + "Adjustment Return": "Adjustment Return", + "Adjustment Sale": "Adjustment Sale", + "Product Unit Quantities List": "Product Unit Quantities List", + "Display all product unit quantities.": "Display all product unit quantities.", + "No product unit quantities has been registered": "No product unit quantities has been registered", + "Add a new product unit quantity": "Add a new product unit quantity", + "Create a new product unit quantity": "Create a new product unit quantity", + "Register a new product unit quantity and save it.": "Register a new product unit quantity and save it.", + "Edit product unit quantity": "Edit product unit quantity", + "Modify Product Unit Quantity.": "Modify Product Unit Quantity.", + "Return to Product Unit Quantities": "Return to Product Unit Quantities", + "Created_at": "Created_at", + "Product id": "Product id", + "Updated_at": "Updated_at", + "Providers List": "Lista e Furnitoreve", + "Display all providers.": "Shfaq te gjithe Furnitoret.", + "No providers has been registered": "Nuk keni Regjistruar asnje Furnitor", + "Add a new provider": "Shto nje Furnitor te Ri", + "Create a new provider": "Krijo nje Furnitor", + "Register a new provider and save it.": "Regjistro dhe Ruaj nje Furnitor.", + "Edit provider": "Edito Furnitorin", + "Modify Provider.": "Modifiko Furnitorin.", + "Return to Providers": "Kthehu tek Furnitoret", + "First address of the provider.": "Adresa primare e Furnitorit.", + "Second address of the provider.": "Adresa sekondare e Furnitorit.", + "Further details about the provider": "Further details about the provider", + "Amount Due": "Amount Due", + "Amount Paid": "Amount Paid", + "See Procurements": "See Procurements", + "See Products": "Shiko Produktet", + "Provider Procurements List": "Provider Procurements List", + "Display all provider procurements.": "Display all provider procurements.", + "No provider procurements has been registered": "No provider procurements has been registered", + "Add a new provider procurement": "Add a new provider procurement", + "Create a new provider procurement": "Create a new provider procurement", + "Register a new provider procurement and save it.": "Register a new provider procurement and save it.", + "Edit provider procurement": "Edit provider procurement", + "Modify Provider Procurement.": "Modify Provider Procurement.", + "Return to Provider Procurements": "Return to Provider Procurements", + "Delivered On": "Delivered On", + "Tax": "Tax", + "Delivery": "Delivery", + "Payment": "Payment", + "Items": "Artikujt", + "Provider Products List": "Provider Products List", + "Display all Provider Products.": "Display all Provider Products.", + "No Provider Products has been registered": "No Provider Products has been registered", + "Add a new Provider Product": "Add a new Provider Product", + "Create a new Provider Product": "Create a new Provider Product", + "Register a new Provider Product and save it.": "Register a new Provider Product and save it.", + "Edit Provider Product": "Edit Provider Product", + "Modify Provider Product.": "Modify Provider Product.", + "Return to Provider Products": "Return to Provider Products", + "Purchase Price": "Purchase Price", + "Registers List": "Registers List", + "Display all registers.": "Display all registers.", + "No registers has been registered": "No registers has been registered", + "Add a new register": "Add a new register", + "Create a new register": "Create a new register", + "Register a new register and save it.": "Register a new register and save it.", + "Edit register": "Edit register", + "Modify Register.": "Modify Register.", + "Return to Registers": "Return to Registers", + "Closed": "Mbyllur", + "Define what is the status of the register.": "Define what is the status of the register.", + "Provide mode details about this cash register.": "Provide mode details about this cash register.", + "Unable to delete a register that is currently in use": "Unable to delete a register that is currently in use", + "Used By": "Perdorur nga", + "Balance": "Balance", + "Register History": "Historiku Arkes", + "Register History List": "Lista Historike e Arkes", + "Display all register histories.": "Display all register histories.", + "No register histories has been registered": "No register histories has been registered", + "Add a new register history": "Add a new register history", + "Create a new register history": "Create a new register history", + "Register a new register history and save it.": "Register a new register history and save it.", + "Edit register history": "Edit register history", + "Modify Registerhistory.": "Modify Registerhistory.", + "Return to Register History": "Return to Register History", + "Register Id": "Register Id", + "Action": "Action", + "Register Name": "Register Name", + "Initial Balance": "Initial Balance", + "New Balance": "New Balance", + "Transaction Type": "Transaction Type", + "Done At": "Done At", + "Unchanged": "Unchanged", + "Reward Systems List": "Reward Systems List", + "Display all reward systems.": "Display all reward systems.", + "No reward systems has been registered": "No reward systems has been registered", + "Add a new reward system": "Add a new reward system", + "Create a new reward system": "Create a new reward system", + "Register a new reward system and save it.": "Register a new reward system and save it.", + "Edit reward system": "Edit reward system", + "Modify Reward System.": "Modify Reward System.", + "Return to Reward Systems": "Return to Reward Systems", + "From": "Nga", + "The interval start here.": "The interval start here.", + "To": "Ne", + "The interval ends here.": "The interval ends here.", + "Points earned.": "Points earned.", + "Coupon": "Coupon", + "Decide which coupon you would apply to the system.": "Decide which coupon you would apply to the system.", + "This is the objective that the user should reach to trigger the reward.": "This is the objective that the user should reach to trigger the reward.", + "A short description about this system": "A short description about this system", + "Would you like to delete this reward system ?": "Would you like to delete this reward system ?", + "Delete Selected Rewards": "Delete Selected Rewards", + "Would you like to delete selected rewards?": "Would you like to delete selected rewards?", + "No Dashboard": "No Dashboard", + "Store Dashboard": "Store Dashboard", + "Cashier Dashboard": "Cashier Dashboard", + "Default Dashboard": "Default Dashboard", + "Roles List": "Roles List", + "Display all roles.": "Display all roles.", + "No role has been registered.": "No role has been registered.", + "Add a new role": "Add a new role", + "Create a new role": "Create a new role", + "Create a new role and save it.": "Create a new role and save it.", + "Edit role": "Edit role", + "Modify Role.": "Modify Role.", + "Return to Roles": "Return to Roles", + "Provide a name to the role.": "Provide a name to the role.", + "Should be a unique value with no spaces or special character": "Should be a unique value with no spaces or special character", + "Provide more details about what this role is about.": "Provide more details about what this role is about.", + "Unable to delete a system role.": "Unable to delete a system role.", + "Clone": "Clone", + "Would you like to clone this role ?": "Would you like to clone this role ?", + "You do not have enough permissions to perform this action.": "You do not have enough permissions to perform this action.", + "Taxes List": "Taxes List", + "Display all taxes.": "Display all taxes.", + "No taxes has been registered": "No taxes has been registered", + "Add a new tax": "Add a new tax", + "Create a new tax": "Create a new tax", + "Register a new tax and save it.": "Register a new tax and save it.", + "Edit tax": "Edit tax", + "Modify Tax.": "Modify Tax.", + "Return to Taxes": "Return to Taxes", + "Provide a name to the tax.": "Provide a name to the tax.", + "Assign the tax to a tax group.": "Assign the tax to a tax group.", + "Rate": "Rate", + "Define the rate value for the tax.": "Define the rate value for the tax.", + "Provide a description to the tax.": "Provide a description to the tax.", + "Taxes Groups List": "Lista e Grupeve te Taksave", + "Display all taxes groups.": "Display all taxes groups.", + "No taxes groups has been registered": "No taxes groups has been registered", + "Add a new tax group": "Add a new tax group", + "Create a new tax group": "Create a new tax group", + "Register a new tax group and save it.": "Register a new tax group and save it.", + "Edit tax group": "Edit tax group", + "Modify Tax Group.": "Modify Tax Group.", + "Return to Taxes Groups": "Return to Taxes Groups", + "Provide a short description to the tax group.": "Provide a short description to the tax group.", + "Units List": "Units List", + "Display all units.": "Display all units.", + "No units has been registered": "No units has been registered", + "Add a new unit": "Add a new unit", + "Create a new unit": "Create a new unit", + "Register a new unit and save it.": "Register a new unit and save it.", + "Edit unit": "Edit unit", + "Modify Unit.": "Modify Unit.", + "Return to Units": "Return to Units", + "Preview URL": "Preview URL", + "Preview of the unit.": "Preview of the unit.", + "Define the value of the unit.": "Define the value of the unit.", + "Define to which group the unit should be assigned.": "Define to which group the unit should be assigned.", + "Base Unit": "Base Unit", + "Determine if the unit is the base unit from the group.": "Determine if the unit is the base unit from the group.", + "Provide a short description about the unit.": "Provide a short description about the unit.", + "Unit Groups List": "Unit Groups List", + "Display all unit groups.": "Display all unit groups.", + "No unit groups has been registered": "No unit groups has been registered", + "Add a new unit group": "Add a new unit group", + "Create a new unit group": "Create a new unit group", + "Register a new unit group and save it.": "Register a new unit group and save it.", + "Edit unit group": "Edit unit group", + "Modify Unit Group.": "Modify Unit Group.", + "Return to Unit Groups": "Return to Unit Groups", + "Users List": "Users List", + "Display all users.": "Display all users.", + "No users has been registered": "No users has been registered", + "Add a new user": "Add a new user", + "Create a new user": "Create a new user", + "Register a new user and save it.": "Register a new user and save it.", + "Edit user": "Edit user", + "Modify User.": "Modify User.", + "Return to Users": "Return to Users", + "Username": "Username", + "Will be used for various purposes such as email recovery.": "Will be used for various purposes such as email recovery.", + "Password": "Password", + "Make a unique and secure password.": "Make a unique and secure password.", + "Confirm Password": "Confirm Password", + "Should be the same as the password.": "Should be the same as the password.", + "Define what roles applies to the user": "Define what roles applies to the user", + "Roles": "Roles", + "You cannot delete your own account.": "You cannot delete your own account.", + "Not Assigned": "Not Assigned", + "Access Denied": "Access Denied", + "Incompatibility Exception": "Incompatibility Exception", + "The request method is not allowed.": "The request method is not allowed.", + "Method Not Allowed": "Method Not Allowed", + "There is a missing dependency issue.": "There is a missing dependency issue.", + "Missing Dependency": "Missing Dependency", + "Module Version Mismatch": "Module Version Mismatch", + "The Action You Tried To Perform Is Not Allowed.": "The Action You Tried To Perform Is Not Allowed.", + "Not Allowed Action": "Not Allowed Action", + "The action you tried to perform is not allowed.": "The action you tried to perform is not allowed.", + "A Database Exception Occurred.": "A Database Exception Occurred.", + "Not Enough Permissions": "Not Enough Permissions", + "Unable to locate the assets.": "Unable to locate the assets.", + "Not Found Assets": "Not Found Assets", + "The resource of the page you tried to access is not available or might have been deleted.": "The resource of the page you tried to access is not available or might have been deleted.", + "Not Found Exception": "Not Found Exception", + "Query Exception": "Query Exception", + "An error occurred while validating the form.": "An error occurred while validating the form.", + "An error has occured": "An error has occured", + "Unable to proceed, the submitted form is not valid.": "Unable to proceed, the submitted form is not valid.", + "Unable to proceed the form is not valid": "Unable to proceed the form is not valid", + "This value is already in use on the database.": "This value is already in use on the database.", + "This field is required.": "This field is required.", + "This field should be checked.": "This field should be checked.", + "This field must be a valid URL.": "This field must be a valid URL.", + "This field is not a valid email.": "This field is not a valid email.", + "Provide your username.": "Provide your username.", + "Provide your password.": "Provide your password.", + "Provide your email.": "Provide your email.", + "Password Confirm": "Password Confirm", + "define the amount of the transaction.": "define the amount of the transaction.", + "Further observation while proceeding.": "Further observation while proceeding.", + "determine what is the transaction type.": "determine what is the transaction type.", + "Determine the amount of the transaction.": "Determine the amount of the transaction.", + "Further details about the transaction.": "Further details about the transaction.", + "Installments": "Installments", + "Define the installments for the current order.": "Define the installments for the current order.", + "New Password": "New Password", + "define your new password.": "define your new password.", + "confirm your new password.": "confirm your new password.", + "Select Payment": "Select Payment", + "choose the payment type.": "choose the payment type.", + "Define the order name.": "Define the order name.", + "Define the date of creation of the order.": "Define the date of creation of the order.", + "Provide the procurement name.": "Provide the procurement name.", + "Describe the procurement.": "Describe the procurement.", + "Define the provider.": "Define the provider.", + "Define what is the unit price of the product.": "Define what is the unit price of the product.", + "Condition": "Condition", + "Determine in which condition the product is returned.": "Determine in which condition the product is returned.", + "Damaged": "Damaged", + "Unspoiled": "Unspoiled", + "Other Observations": "Other Observations", + "Describe in details the condition of the returned product.": "Describe in details the condition of the returned product.", + "Mode": "Mode", + "Wipe All": "Wipe All", + "Wipe Plus Grocery": "Wipe Plus Grocery", + "Choose what mode applies to this demo.": "Choose what mode applies to this demo.", + "Set if the sales should be created.": "Set if the sales should be created.", + "Create Procurements": "Create Procurements", + "Will create procurements.": "Will create procurements.", + "Unit Group Name": "Unit Group Name", + "Provide a unit name to the unit.": "Provide a unit name to the unit.", + "Describe the current unit.": "Describe the current unit.", + "assign the current unit to a group.": "assign the current unit to a group.", + "define the unit value.": "define the unit value.", + "Provide a unit name to the units group.": "Provide a unit name to the units group.", + "Describe the current unit group.": "Describe the current unit group.", + "POS": "POS", + "Open POS": "Hap POS", + "Create Register": "Krijo Arke", + "Instalments": "Instalments", + "Procurement Name": "Emri i Prokurimit", + "Provide a name that will help to identify the procurement.": "Provide a name that will help to identify the procurement.", + "The profile has been successfully saved.": "The profile has been successfully saved.", + "The user attribute has been saved.": "The user attribute has been saved.", + "The options has been successfully updated.": "The options has been successfully updated.", + "Wrong password provided": "Wrong password provided", + "Wrong old password provided": "Wrong old password provided", + "Password Successfully updated.": "Password Successfully updated.", + "Use Customer Billing": "Use Customer Billing", + "General Shipping": "General Shipping", + "Define how the shipping is calculated.": "Define how the shipping is calculated.", + "Shipping Fees": "Shipping Fees", + "Define shipping fees.": "Define shipping fees.", + "Use Customer Shipping": "Use Customer Shipping", + "Invoice Number": "Invoice Number", + "If the procurement has been issued outside of NexoPOS, please provide a unique reference.": "If the procurement has been issued outside of NexoPOS, please provide a unique reference.", + "Delivery Time": "Delivery Time", + "If the procurement has to be delivered at a specific time, define the moment here.": "If the procurement has to be delivered at a specific time, define the moment here.", + "If you would like to define a custom invoice date.": "If you would like to define a custom invoice date.", + "Automatic Approval": "Automatic Approval", + "Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.": "Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.", + "Pending": "Pending", + "Delivered": "Delivered", + "Determine what is the actual payment status of the procurement.": "Determine what is the actual payment status of the procurement.", + "Determine what is the actual provider of the current procurement.": "Determine what is the actual provider of the current procurement.", + "First Name": "First Name", + "Theme": "Theme", + "Dark": "Dark", + "Light": "Light", + "Define what is the theme that applies to the dashboard.": "Define what is the theme that applies to the dashboard.", + "Avatar": "Avatar", + "Define the image that should be used as an avatar.": "Define the image that should be used as an avatar.", + "Language": "Language", + "Choose the language for the current account.": "Choose the language for the current account.", + "Security": "Security", + "Old Password": "Old Password", + "Provide the old password.": "Provide the old password.", + "Change your password with a better stronger password.": "Change your password with a better stronger password.", + "Password Confirmation": "Password Confirmation", + "Sign In — NexoPOS": "Sign In — NexoPOS", + "Sign Up — NexoPOS": "Sign Up — NexoPOS", + "No activation is needed for this account.": "No activation is needed for this account.", + "Invalid activation token.": "Invalid activation token.", + "The expiration token has expired.": "The expiration token has expired.", + "Your account is not activated.": "Your account is not activated.", + "Password Lost": "Password Lost", + "Unable to change a password for a non active user.": "Unable to change a password for a non active user.", + "Unable to proceed as the token provided is invalid.": "Unable to proceed as the token provided is invalid.", + "The token has expired. Please request a new activation token.": "The token has expired. Please request a new activation token.", + "Set New Password": "Set New Password", + "Database Update": "Database Update", + "This account is disabled.": "This account is disabled.", + "Unable to find record having that username.": "Unable to find record having that username.", + "Unable to find record having that password.": "Unable to find record having that password.", + "Invalid username or password.": "Invalid username or password.", + "Unable to login, the provided account is not active.": "Unable to login, the provided account is not active.", + "You have been successfully connected.": "You have been successfully connected.", + "The recovery email has been send to your inbox.": "The recovery email has been send to your inbox.", + "Unable to find a record matching your entry.": "Unable to find a record matching your entry.", + "Your Account has been successfully created.": "Your Account has been successfully created.", + "Your Account has been created but requires email validation.": "Your Account has been created but requires email validation.", + "Unable to find the requested user.": "Unable to find the requested user.", + "Unable to submit a new password for a non active user.": "Unable to submit a new password for a non active user.", + "Unable to proceed, the provided token is not valid.": "Unable to proceed, the provided token is not valid.", + "Unable to proceed, the token has expired.": "Unable to proceed, the token has expired.", + "Your password has been updated.": "Your password has been updated.", + "Unable to edit a register that is currently in use": "Unable to edit a register that is currently in use", + "No register has been opened by the logged user.": "No register has been opened by the logged user.", + "The register is opened.": "The register is opened.", + "Cash In": "Cash In", + "Cash Out": "Cash Out", + "Closing": "Closing", + "Opening": "Opening", + "Sale": "Sale", + "Refund": "Refund", + "Unable to find the category using the provided identifier": "Unable to find the category using the provided identifier", + "The category has been deleted.": "The category has been deleted.", + "Unable to find the category using the provided identifier.": "Unable to find the category using the provided identifier.", + "Unable to find the attached category parent": "Unable to find the attached category parent", + "The category has been correctly saved": "The category has been correctly saved", + "The category has been updated": "The category has been updated", + "The category products has been refreshed": "The category products has been refreshed", + "Unable to delete an entry that no longer exists.": "Unable to delete an entry that no longer exists.", + "The entry has been successfully deleted.": "The entry has been successfully deleted.", + "Unhandled crud resource": "Unhandled crud resource", + "You need to select at least one item to delete": "You need to select at least one item to delete", + "You need to define which action to perform": "You need to define which action to perform", + "%s has been processed, %s has not been processed.": "%s has been processed, %s has not been processed.", + "Unable to proceed. No matching CRUD resource has been found.": "Unable to proceed. No matching CRUD resource has been found.", + "The requested file cannot be downloaded or has already been downloaded.": "The requested file cannot be downloaded or has already been downloaded.", + "Void": "Anulo", + "Create Coupon": "Krijo Kupon", + "helps you creating a coupon.": "Plotesoni te dhenat e meposhtme.", + "Edit Coupon": "Edit Coupon", + "Editing an existing coupon.": "Editing an existing coupon.", + "Invalid Request.": "Invalid Request.", + "Displays the customer account history for %s": "Displays the customer account history for %s", + "Unable to delete a group to which customers are still assigned.": "Unable to delete a group to which customers are still assigned.", + "The customer group has been deleted.": "The customer group has been deleted.", + "Unable to find the requested group.": "Unable to find the requested group.", + "The customer group has been successfully created.": "The customer group has been successfully created.", + "The customer group has been successfully saved.": "The customer group has been successfully saved.", + "Unable to transfer customers to the same account.": "Unable to transfer customers to the same account.", + "No customer identifier has been provided to proceed to the transfer.": "No customer identifier has been provided to proceed to the transfer.", + "Unable to find the requested group using the provided id.": "Unable to find the requested group using the provided id.", + "Expenses": "Shpenzimet", + "\"%s\" is not an instance of \"FieldsService\"": "\"%s\" is not an instance of \"FieldsService\"", + "Manage Medias": "Manage Medias", + "Modules List": "Modules List", + "List all available modules.": "List all available modules.", + "Upload A Module": "Upload A Module", + "Extends NexoPOS features with some new modules.": "Extends NexoPOS features with some new modules.", + "The notification has been successfully deleted": "The notification has been successfully deleted", + "Payment Receipt — %s": "Payment Receipt — %s", + "Order Invoice — %s": "Order Invoice — %s", + "Order Refund Receipt — %s": "Order Refund Receipt — %s", + "Order Receipt — %s": "Order Receipt — %s", + "The printing event has been successfully dispatched.": "The printing event has been successfully dispatched.", + "There is a mismatch between the provided order and the order attached to the instalment.": "There is a mismatch between the provided order and the order attached to the instalment.", + "Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.": "Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.", + "You cannot change the status of an already paid procurement.": "You cannot change the status of an already paid procurement.", + "The procurement payment status has been changed successfully.": "The procurement payment status has been changed successfully.", + "The procurement has been marked as paid.": "The procurement has been marked as paid.", + "New Procurement": "Prokurim i Ri", + "Make a new procurement.": "Prokurim i Ri.", + "Edit Procurement": "Edito Prokurim", + "Perform adjustment on existing procurement.": "Perform adjustment on existing procurement.", + "%s - Invoice": "%s - Invoice", + "list of product procured.": "lista e produkteve te prokuruar.", + "The product price has been refreshed.": "The product price has been refreshed.", + "The single variation has been deleted.": "The single variation has been deleted.", + "Edit a product": "Edito produkt", + "Makes modifications to a product": "Makes modifications to a product", + "Create a product": "Create a product", + "Add a new product on the system": "Add a new product on the system", + "Stock Adjustment": "Stock Adjustment", + "Adjust stock of existing products.": "Adjust stock of existing products.", + "No stock is provided for the requested product.": "No stock is provided for the requested product.", + "The product unit quantity has been deleted.": "The product unit quantity has been deleted.", + "Unable to proceed as the request is not valid.": "Unable to proceed as the request is not valid.", + "Unsupported action for the product %s.": "Unsupported action for the product %s.", + "The stock has been adjustment successfully.": "The stock has been adjustment successfully.", + "Unable to add the product to the cart as it has expired.": "Unable to add the product to the cart as it has expired.", + "Unable to add a product that has accurate tracking enabled, using an ordinary barcode.": "Unable to add a product that has accurate tracking enabled, using an ordinary barcode.", + "There is no products matching the current request.": "There is no products matching the current request.", + "Print Labels": "Print Labels", + "Customize and print products labels.": "Customize and print products labels.", + "Procurements by \"%s\"": "Procurements by \"%s\"", + "Sales Report": "Sales Report", + "Provides an overview over the sales during a specific period": "Provides an overview over the sales during a specific period", + "Sales Progress": "Progesi Shitjeve", + "Provides an overview over the best products sold during a specific period.": "Provides an overview over the best products sold during a specific period.", + "Sold Stock": "Sold Stock", + "Provides an overview over the sold stock during a specific period.": "Provides an overview over the sold stock during a specific period.", + "Stock Report": "Stock Report", + "Provides an overview of the products stock.": "Provides an overview of the products stock.", + "Profit Report": "Profit Report", + "Provides an overview of the provide of the products sold.": "Provides an overview of the provide of the products sold.", + "Provides an overview on the activity for a specific period.": "Provides an overview on the activity for a specific period.", + "Annual Report": "Raport Vjetor", + "Sales By Payment Types": "Sales By Payment Types", + "Provide a report of the sales by payment types, for a specific period.": "Provide a report of the sales by payment types, for a specific period.", + "The report will be computed for the current year.": "The report will be computed for the current year.", + "Unknown report to refresh.": "Unknown report to refresh.", + "Customers Statement": "Gjendje e Klienteve", + "Display the complete customer statement.": "Display the complete customer statement.", + "Invalid authorization code provided.": "Invalid authorization code provided.", + "The database has been successfully seeded.": "The database has been successfully seeded.", + "About": "About", + "Details about the environment.": "Details about the environment.", + "Core Version": "Core Version", + "Laravel Version": "Laravel Version", + "PHP Version": "PHP Version", + "Mb String Enabled": "Mb String Enabled", + "Zip Enabled": "Zip Enabled", + "Curl Enabled": "Curl Enabled", + "Math Enabled": "Math Enabled", + "XML Enabled": "XML Enabled", + "XDebug Enabled": "XDebug Enabled", + "File Upload Enabled": "File Upload Enabled", + "File Upload Size": "File Upload Size", + "Post Max Size": "Post Max Size", + "Max Execution Time": "Max Execution Time", + "Memory Limit": "Memory Limit", + "Settings Page Not Found": "Settings Page Not Found", + "Customers Settings": "Customers Settings", + "Configure the customers settings of the application.": "Configure the customers settings of the application.", + "General Settings": "Cilesimet Kryesore", + "Configure the general settings of the application.": "Konfiguroni cilesimet Kryesore te Programit.", + "Orders Settings": "Cilesimet e Porosive", + "POS Settings": "Cilesimet e POS", + "Configure the pos settings.": "Konfiguroni Cilesimet e POS.", + "Workers Settings": "Workers Settings", + "%s is not an instance of \"%s\".": "%s is not an instance of \"%s\".", + "Unable to find the requested product tax using the provided identifier.": "Unable to find the requested product tax using the provided identifier.", + "The product tax has been created.": "The product tax has been created.", + "The product tax has been updated": "The product tax has been updated", + "Permission Manager": "Permission Manager", + "Manage all permissions and roles": "Manage all permissions and roles", + "My Profile": "My Profile", + "Change your personal settings": "Change your personal settings", + "The permissions has been updated.": "The permissions has been updated.", + "Sunday": "E Diele", + "Monday": "E Hene", + "Tuesday": "E Marte", + "Wednesday": "E Merkure", + "Thursday": "E Enjte", + "Friday": "E Premte", + "Saturday": "E Shtune", + "The migration has successfully run.": "The migration has successfully run.", + "Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.": "Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.", + "Unable to register. The registration is closed.": "Unable to register. The registration is closed.", + "Hold Order Cleared": "Hold Order Cleared", + "Report Refreshed": "Report Refreshed", + "The yearly report has been successfully refreshed for the year \"%s\".": "The yearly report has been successfully refreshed for the year \"%s\".", + "Low Stock Alert": "Low Stock Alert", + "Procurement Refreshed": "Procurement Refreshed", + "The procurement \"%s\" has been successfully refreshed.": "The procurement \"%s\" has been successfully refreshed.", + "The transaction was deleted.": "The transaction was deleted.", + "[NexoPOS] Activate Your Account": "[NexoPOS] Activate Your Account", + "[NexoPOS] A New User Has Registered": "[NexoPOS] A New User Has Registered", + "[NexoPOS] Your Account Has Been Created": "[NexoPOS] Your Account Has Been Created", + "Unknown Payment": "Unknown Payment", + "Unable to find the permission with the namespace \"%s\".": "Unable to find the permission with the namespace \"%s\".", + "Partially Due": "Partially Due", + "Take Away": "Take Away", + "The register has been successfully opened": "The register has been successfully opened", + "The register has been successfully closed": "The register has been successfully closed", + "The provided amount is not allowed. The amount should be greater than \"0\". ": "The provided amount is not allowed. The amount should be greater than \"0\". ", + "The cash has successfully been stored": "The cash has successfully been stored", + "Not enough fund to cash out.": "Not enough fund to cash out.", + "The cash has successfully been disbursed.": "The cash has successfully been disbursed.", + "In Use": "In Use", + "Opened": "Opened", + "Delete Selected entries": "Delete Selected entries", + "%s entries has been deleted": "%s entries has been deleted", + "%s entries has not been deleted": "%s entries has not been deleted", + "A new entry has been successfully created.": "A new entry has been successfully created.", + "The entry has been successfully updated.": "Ndryshimet u ruajten me Sukses.", + "Unidentified Item": "Unidentified Item", + "Unable to delete this resource as it has %s dependency with %s item.": "Unable to delete this resource as it has %s dependency with %s item.", + "Unable to delete this resource as it has %s dependency with %s items.": "Unable to delete this resource as it has %s dependency with %s items.", + "Unable to find the customer using the provided id.": "Unable to find the customer using the provided id.", + "The customer has been deleted.": "The customer has been deleted.", + "The customer has been created.": "The customer has been created.", + "Unable to find the customer using the provided ID.": "Unable to find the customer using the provided ID.", + "The customer has been edited.": "The customer has been edited.", + "Unable to find the customer using the provided email.": "Unable to find the customer using the provided email.", + "The customer account has been updated.": "The customer account has been updated.", + "Issuing Coupon Failed": "Issuing Coupon Failed", + "Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.": "Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.", + "Unable to find a coupon with the provided code.": "Unable to find a coupon with the provided code.", + "The coupon has been updated.": "The coupon has been updated.", + "The group has been created.": "The group has been created.", + "Crediting": "Crediting", + "Deducting": "Deducting", + "Order Payment": "Order Payment", + "Order Refund": "Order Refund", + "Unknown Operation": "Unknown Operation", + "Countable": "Countable", + "Piece": "Piece", + "Sales Account": "Sales Account", + "Procurements Account": "Procurements Account", + "Sale Refunds Account": "Sale Refunds Account", + "Spoiled Goods Account": "Spoiled Goods Account", + "Customer Crediting Account": "Customer Crediting Account", + "Customer Debiting Account": "Customer Debiting Account", + "GST": "GST", + "SGST": "SGST", + "CGST": "CGST", + "Sample Procurement %s": "Sample Procurement %s", + "generated": "generated", + "The user attributes has been updated.": "The user attributes has been updated.", + "Administrator": "Administrator", + "Store Administrator": "Store Administrator", + "Store Cashier": "Store Cashier", + "User": "User", + "%s products were freed": "%s products were freed", + "Restoring cash flow from paid orders...": "Restoring cash flow from paid orders...", + "Restoring cash flow from refunded orders...": "Restoring cash flow from refunded orders...", + "Unable to find the requested account type using the provided id.": "Unable to find the requested account type using the provided id.", + "You cannot delete an account type that has transaction bound.": "You cannot delete an account type that has transaction bound.", + "The account type has been deleted.": "The account type has been deleted.", + "The account has been created.": "The account has been created.", + "Customer Credit Account": "Customer Credit Account", + "Customer Debit Account": "Customer Debit Account", + "Sales Refunds Account": "Sales Refunds Account", + "Register Cash-In Account": "Register Cash-In Account", + "Register Cash-Out Account": "Register Cash-Out Account", + "The media has been deleted": "The media has been deleted", + "Unable to find the media.": "Unable to find the media.", + "Unable to find the requested file.": "Unable to find the requested file.", + "Unable to find the media entry": "Unable to find the media entry", + "Home": "Home", + "Payment Types": "Payment Types", + "Medias": "Media", + "Customers": "Klientet", + "List": "Listo", + "Create Customer": "Krijo Klient", + "Customers Groups": "Customers Groups", + "Create Group": "Create Group", + "Reward Systems": "Reward Systems", + "Create Reward": "Create Reward", + "List Coupons": "Listo Kupona", + "Providers": "Furnitoret", + "Create A Provider": "Krijo Furnitor", + "Accounting": "Accounting", + "Accounts": "Accounts", + "Create Account": "Create Account", + "Inventory": "Inventari", + "Create Product": "Krijo Produkt", + "Create Category": "Krijo Kategori", + "Create Unit": "Krijo Njesi", + "Unit Groups": "Grupet e Njesive", + "Create Unit Groups": "Krijo Grup Njesish", + "Stock Flow Records": "Stock Flow Records", + "Taxes Groups": "Grupet e Taksave", + "Create Tax Groups": "Krijo Grup Taksash", + "Create Tax": "Krijo Takse", + "Modules": "Module", + "Upload Module": "Upload Module", + "Users": "Perdoruesit", + "Create User": "Krijo Perdorues", + "Create Roles": "Krijo Role", + "Permissions Manager": "Permissions Manager", + "Profile": "Profili", + "Procurements": "Prokurimet", + "Reports": "Raporte", + "Sale Report": "Raport Shitjesh", + "Incomes & Loosses": "Fitimi & Humbjet", + "Sales By Payments": "Shitjet sipas Pagesave", + "Settings": "Settings", + "Invoice Settings": "Invoice Settings", + "Workers": "Workers", + "Reset": "Reset", + "Unable to locate the requested module.": "Unable to locate the requested module.", + "The module \"%s\" has been disabled as the dependency \"%s\" is missing. ": "The module \"%s\" has been disabled as the dependency \"%s\" is missing. ", + "The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ": "The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ", + "The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ": "The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ", + "The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ": "The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ", + "Unable to detect the folder from where to perform the installation.": "Unable to detect the folder from where to perform the installation.", + "The uploaded file is not a valid module.": "The uploaded file is not a valid module.", + "The module has been successfully installed.": "The module has been successfully installed.", + "The migration run successfully.": "The migration run successfully.", + "The module has correctly been enabled.": "The module has correctly been enabled.", + "Unable to enable the module.": "Unable to enable the module.", + "The Module has been disabled.": "The Module has been disabled.", + "Unable to disable the module.": "Unable to disable the module.", + "Unable to proceed, the modules management is disabled.": "Unable to proceed, the modules management is disabled.", + "A similar module has been found": "A similar module has been found", + "Missing required parameters to create a notification": "Missing required parameters to create a notification", + "The order has been placed.": "The order has been placed.", + "The percentage discount provided is not valid.": "The percentage discount provided is not valid.", + "A discount cannot exceed the sub total value of an order.": "A discount cannot exceed the sub total value of an order.", + "No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.": "No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.", + "The payment has been saved.": "The payment has been saved.", + "Unable to edit an order that is completely paid.": "Unable to edit an order that is completely paid.", + "Unable to proceed as one of the previous submitted payment is missing from the order.": "Unable to proceed as one of the previous submitted payment is missing from the order.", + "The order payment status cannot switch to hold as a payment has already been made on that order.": "The order payment status cannot switch to hold as a payment has already been made on that order.", + "Unable to proceed. One of the submitted payment type is not supported.": "Unable to proceed. One of the submitted payment type is not supported.", + "Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.": "Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.", + "Unable to find the customer using the provided ID. The order creation has failed.": "Unable to find the customer using the provided ID. The order creation has failed.", + "Unable to proceed a refund on an unpaid order.": "Unable to proceed a refund on an unpaid order.", + "The current credit has been issued from a refund.": "The current credit has been issued from a refund.", + "The order has been successfully refunded.": "The order has been successfully refunded.", + "unable to proceed to a refund as the provided status is not supported.": "unable to proceed to a refund as the provided status is not supported.", + "The product %s has been successfully refunded.": "The product %s has been successfully refunded.", + "Unable to find the order product using the provided id.": "Unable to find the order product using the provided id.", + "Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier": "Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier", + "Unable to fetch the order as the provided pivot argument is not supported.": "Unable to fetch the order as the provided pivot argument is not supported.", + "The product has been added to the order \"%s\"": "The product has been added to the order \"%s\"", + "The order has been deleted.": "The order has been deleted.", + "The product has been successfully deleted from the order.": "The product has been successfully deleted from the order.", + "Unable to find the requested product on the provider order.": "Unable to find the requested product on the provider order.", + "Ongoing": "Ongoing", + "Ready": "Gati", + "Not Available": "Not Available", + "Failed": "Failed", + "Unpaid Orders Turned Due": "Unpaid Orders Turned Due", + "No orders to handle for the moment.": "No orders to handle for the moment.", + "The order has been correctly voided.": "The order has been correctly voided.", + "Unable to edit an already paid instalment.": "Unable to edit an already paid instalment.", + "The instalment has been saved.": "The instalment has been saved.", + "The instalment has been deleted.": "The instalment has been deleted.", + "The defined amount is not valid.": "The defined amount is not valid.", + "No further instalments is allowed for this order. The total instalment already covers the order total.": "No further instalments is allowed for this order. The total instalment already covers the order total.", + "The instalment has been created.": "The instalment has been created.", + "The provided status is not supported.": "The provided status is not supported.", + "The order has been successfully updated.": "The order has been successfully updated.", + "Unable to find the requested procurement using the provided identifier.": "Unable to find the requested procurement using the provided identifier.", + "Unable to find the assigned provider.": "Unable to find the assigned provider.", + "The procurement has been created.": "The procurement has been created.", + "Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.": "Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.", + "The provider has been edited.": "The provider has been edited.", + "Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"": "Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"", + "The operation has completed.": "The operation has completed.", + "The procurement has been refreshed.": "The procurement has been refreshed.", + "The procurement has been reset.": "The procurement has been reset.", + "The procurement products has been deleted.": "The procurement products has been deleted.", + "The procurement product has been updated.": "The procurement product has been updated.", + "Unable to find the procurement product using the provided id.": "Unable to find the procurement product using the provided id.", + "The product %s has been deleted from the procurement %s": "The product %s has been deleted from the procurement %s", + "The product with the following ID \"%s\" is not initially included on the procurement": "The product with the following ID \"%s\" is not initially included on the procurement", + "The procurement products has been updated.": "The procurement products has been updated.", + "Procurement Automatically Stocked": "Procurement Automatically Stocked", + "Draft": "Draft", + "The category has been created": "The category has been created", + "Unable to find the product using the provided id.": "Unable to find the product using the provided id.", + "Unable to find the requested product using the provided SKU.": "Unable to find the requested product using the provided SKU.", + "The variable product has been created.": "The variable product has been created.", + "The provided barcode \"%s\" is already in use.": "The provided barcode \"%s\" is already in use.", + "The provided SKU \"%s\" is already in use.": "The provided SKU \"%s\" is already in use.", + "The product has been saved.": "The product has been saved.", + "A grouped product cannot be saved without any sub items.": "A grouped product cannot be saved without any sub items.", + "A grouped product cannot contain grouped product.": "A grouped product cannot contain grouped product.", + "The provided barcode is already in use.": "The provided barcode is already in use.", + "The provided SKU is already in use.": "The provided SKU is already in use.", + "The subitem has been saved.": "The subitem has been saved.", + "The variable product has been updated.": "The variable product has been updated.", + "The product variations has been reset": "The product variations has been reset", + "The product \"%s\" has been successfully deleted": "The product \"%s\" has been successfully deleted", + "Unable to find the requested variation using the provided ID.": "Unable to find the requested variation using the provided ID.", + "The product stock has been updated.": "The product stock has been updated.", + "The action is not an allowed operation.": "The action is not an allowed operation.", + "The product quantity has been updated.": "The product quantity has been updated.", + "There is no variations to delete.": "There is no variations to delete.", + "There is no products to delete.": "There is no products to delete.", + "The product variation has been updated.": "The product variation has been updated.", + "The provider has been created.": "The provider has been created.", + "The provider has been updated.": "The provider has been updated.", + "Unable to find the provider using the specified id.": "Unable to find the provider using the specified id.", + "The provider has been deleted.": "The provider has been deleted.", + "Unable to find the provider using the specified identifier.": "Unable to find the provider using the specified identifier.", + "The provider account has been updated.": "The provider account has been updated.", + "The procurement payment has been deducted.": "The procurement payment has been deducted.", + "The dashboard report has been updated.": "The dashboard report has been updated.", + "Untracked Stock Operation": "Untracked Stock Operation", + "Unsupported action": "Unsupported action", + "The expense has been correctly saved.": "The expense has been correctly saved.", + "The report has been computed successfully.": "The report has been computed successfully.", + "The table has been truncated.": "The table has been truncated.", + "Untitled Settings Page": "Untitled Settings Page", + "No description provided for this settings page.": "No description provided for this settings page.", + "The form has been successfully saved.": "The form has been successfully saved.", + "Unable to reach the host": "Unable to reach the host", + "Unable to connect to the database using the credentials provided.": "Unable to connect to the database using the credentials provided.", + "Unable to select the database.": "Unable to select the database.", + "Access denied for this user.": "Access denied for this user.", + "Incorrect Authentication Plugin Provided.": "Incorrect Authentication Plugin Provided.", + "The connexion with the database was successful": "The connexion with the database was successful", + "Cash": "Kesh", + "Bank Payment": "Pagese me Banke", + "Customer Account": "Llogaria e Klientit", + "Database connection was successful.": "Database connection was successful.", + "A tax cannot be his own parent.": "A tax cannot be his own parent.", + "The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".": "The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".", + "Unable to find the requested tax using the provided identifier.": "Unable to find the requested tax using the provided identifier.", + "The tax group has been correctly saved.": "The tax group has been correctly saved.", + "The tax has been correctly created.": "The tax has been correctly created.", + "The tax has been successfully deleted.": "The tax has been successfully deleted.", + "The Unit Group has been created.": "The Unit Group has been created.", + "The unit group %s has been updated.": "The unit group %s has been updated.", + "Unable to find the unit group to which this unit is attached.": "Unable to find the unit group to which this unit is attached.", + "The unit has been saved.": "The unit has been saved.", + "Unable to find the Unit using the provided id.": "Unable to find the Unit using the provided id.", + "The unit has been updated.": "The unit has been updated.", + "The unit group %s has more than one base unit": "The unit group %s has more than one base unit", + "The unit has been deleted.": "The unit has been deleted.", + "The %s is already taken.": "The %s is already taken.", + "Clone of \"%s\"": "Clone of \"%s\"", + "The role has been cloned.": "The role has been cloned.", + "unable to find this validation class %s.": "unable to find this validation class %s.", + "Store Name": "Emri Kompanise", + "This is the store name.": "Plotesoni Emrin e Kompanise.", + "Store Address": "Adresa e Kompanise", + "The actual store address.": "Adresa Aktuale.", + "Store City": "Qyteti Kompanise", + "The actual store city.": "Qyteti Aktual.", + "Store Phone": "Telefoni", + "The phone number to reach the store.": "The phone number to reach the store.", + "Store Email": "Store Email", + "The actual store email. Might be used on invoice or for reports.": "The actual store email. Might be used on invoice or for reports.", + "Store PO.Box": "Store PO.Box", + "The store mail box number.": "The store mail box number.", + "Store Fax": "Store Fax", + "The store fax number.": "The store fax number.", + "Store Additional Information": "Store Additional Information", + "Store Square Logo": "Store Square Logo", + "Choose what is the square logo of the store.": "Choose what is the square logo of the store.", + "Store Rectangle Logo": "Store Rectangle Logo", + "Choose what is the rectangle logo of the store.": "Choose what is the rectangle logo of the store.", + "Define the default fallback language.": "Define the default fallback language.", + "Define the default theme.": "Define the default theme.", + "Currency": "Currency", + "Currency Symbol": "Currency Symbol", + "This is the currency symbol.": "This is the currency symbol.", + "Currency ISO": "Currency ISO", + "The international currency ISO format.": "The international currency ISO format.", + "Currency Position": "Currency Position", + "Before the amount": "Before the amount", + "After the amount": "After the amount", + "Define where the currency should be located.": "Define where the currency should be located.", + "ISO Currency": "ISO Currency", + "Symbol": "Symbol", + "Determine what is the currency indicator that should be used.": "Determine what is the currency indicator that should be used.", + "Currency Thousand Separator": "Currency Thousand Separator", + "Currency Decimal Separator": "Currency Decimal Separator", + "Define the symbol that indicate decimal number. By default \".\" is used.": "Define the symbol that indicate decimal number. By default \".\" is used.", + "Currency Precision": "Currency Precision", + "%s numbers after the decimal": "%s numbers after the decimal", + "Date Format": "Date Format", + "This define how the date should be defined. The default format is \"Y-m-d\".": "This define how the date should be defined. The default format is \"Y-m-d\".", + "Registration": "Registration", + "Registration Open": "Registration Open", + "Determine if everyone can register.": "Determine if everyone can register.", + "Registration Role": "Registration Role", + "Select what is the registration role.": "Select what is the registration role.", + "Requires Validation": "Requires Validation", + "Force account validation after the registration.": "Force account validation after the registration.", + "Allow Recovery": "Allow Recovery", + "Allow any user to recover his account.": "Allow any user to recover his account.", + "Procurement Cash Flow Account": "Procurement Cash Flow Account", + "Sale Cash Flow Account": "Sale Cash Flow Account", + "Stock return for spoiled items will be attached to this account": "Stock return for spoiled items will be attached to this account", + "Enable Reward": "Enable Reward", + "Will activate the reward system for the customers.": "Will activate the reward system for the customers.", + "Require Valid Email": "Require Valid Email", + "Will for valid unique email for every customer.": "Will for valid unique email for every customer.", + "Require Unique Phone": "Require Unique Phone", + "Every customer should have a unique phone number.": "Every customer should have a unique phone number.", + "Default Customer Account": "Default Customer Account", + "Default Customer Group": "Default Customer Group", + "Select to which group each new created customers are assigned to.": "Select to which group each new created customers are assigned to.", + "Enable Credit & Account": "Enable Credit & Account", + "The customers will be able to make deposit or obtain credit.": "The customers will be able to make deposit or obtain credit.", + "Receipts": "Receipts", + "Receipt Template": "Receipt Template", + "Default": "Default", + "Choose the template that applies to receipts": "Choose the template that applies to receipts", + "Receipt Logo": "Receipt Logo", + "Provide a URL to the logo.": "Provide a URL to the logo.", + "Merge Products On Receipt\/Invoice": "Merge Products On Receipt\/Invoice", + "All similar products will be merged to avoid a paper waste for the receipt\/invoice.": "All similar products will be merged to avoid a paper waste for the receipt\/invoice.", + "Receipt Footer": "Receipt Footer", + "If you would like to add some disclosure at the bottom of the receipt.": "If you would like to add some disclosure at the bottom of the receipt.", + "Column A": "Column A", + "Column B": "Column B", + "Order Code Type": "Tipi i Kodit te Porosive", + "Determine how the system will generate code for each orders.": "Caktoni menyren si do te gjenerohet kodi i porosive.", + "Sequential": "Sekuencial", + "Random Code": "Kod i rastesishem", + "Number Sequential": "Numer Sekuencial", + "Allow Unpaid Orders": "Lejo porosi Papaguar", + "Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".": "Do te lejoje porosi ne pritje pa kryer Pagese. Nese Krediti eshte i lejuar, ky Opsion duhet te jete \"Po\".", + "Allow Partial Orders": "Lejo porosi me pagesa te pjesshme", + "Will prevent partially paid orders to be placed.": "Do te lejoje porosi te ruajtura me pagese jo te plote.", + "Quotation Expiration": "Quotation Expiration", + "Quotations will get deleted after they defined they has reached.": "Quotations will get deleted after they defined they has reached.", + "%s Days": "%s Dite", + "Features": "Features", + "Show Quantity": "Shiko Sasine", + "Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.": "Zgjedhja e sasise se Produktit ne fature, perndryshe sasia vendoset automatikisht 1.", + "Merge Similar Items": "Bashko Artikuj te ngjashem", + "Will enforce similar products to be merged from the POS.": "Do te bashkoje te njejtet produkte ne nje ze fature.", + "Allow Wholesale Price": "Lejo Cmim Shumice", + "Define if the wholesale price can be selected on the POS.": "Lejo nese cmimet e shumices mund te zgjidhen ne POS.", + "Allow Decimal Quantities": "Lejo sasi me presje dhjetore", + "Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.": "Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.", + "Allow Customer Creation": "Lejo krijimin e Klienteve", + "Allow customers to be created on the POS.": "Lejo krijimin e Klienteve ne POS.", + "Quick Product": "Produkt i Ri", + "Allow quick product to be created from the POS.": "Caktoni nese Produktet e reja mund te krijohen ne POS.", + "Editable Unit Price": "Lejo ndryshimin e Cmimit ne Shitje", + "Allow product unit price to be edited.": "Lejo ndryshimin e cmimit te Produktit ne Panel Shitje.", + "Show Price With Tax": "Shfaq Cmimin me Taksa te Perfshira", + "Will display price with tax for each products.": "Do te shfaqe Cmimet me taksa te perfshira per sejcilin produkt.", + "Order Types": "Tipi Porosise", + "Control the order type enabled.": "Control the order type enabled.", + "Numpad": "Numpad", + "Advanced": "Advanced", + "Will set what is the numpad used on the POS screen.": "Will set what is the numpad used on the POS screen.", + "Force Barcode Auto Focus": "Auto Focus ne Barkod Produkti", + "Will permanently enable barcode autofocus to ease using a barcode reader.": "Do te vendos Primar kerkimin e produkteve me Barkod.", + "Bubble": "Flluske", + "Ding": "Ding", + "Pop": "Pop", + "Cash Sound": "Cash Sound", + "Layout": "Pamja", + "Retail Layout": "Retail Layout", + "Clothing Shop": "Clothing Shop", + "POS Layout": "Pamja e POS", + "Change the layout of the POS.": "Ndrysho pamjen e POS.", + "Sale Complete Sound": "Sale Complete Sound", + "New Item Audio": "Audio per artikull te ri te shtuar", + "The sound that plays when an item is added to the cart.": "The sound that plays when an item is added to the cart.", + "Printing": "Printing", + "Printed Document": "Printed Document", + "Choose the document used for printing aster a sale.": "Choose the document used for printing aster a sale.", + "Printing Enabled For": "Printing Enabled For", + "All Orders": "All Orders", + "From Partially Paid Orders": "From Partially Paid Orders", + "Only Paid Orders": "Only Paid Orders", + "Determine when the printing should be enabled.": "Determine when the printing should be enabled.", + "Printing Gateway": "Printing Gateway", + "Determine what is the gateway used for printing.": "Determine what is the gateway used for printing.", + "Enable Cash Registers": "Enable Cash Registers", + "Determine if the POS will support cash registers.": "Determine if the POS will support cash registers.", + "Cashier Idle Counter": "Cashier Idle Counter", + "5 Minutes": "5 Minutes", + "10 Minutes": "10 Minutes", + "15 Minutes": "15 Minutes", + "20 Minutes": "20 Minutes", + "30 Minutes": "30 Minutes", + "Selected after how many minutes the system will set the cashier as idle.": "Selected after how many minutes the system will set the cashier as idle.", + "Cash Disbursement": "Cash Disbursement", + "Allow cash disbursement by the cashier.": "Allow cash disbursement by the cashier.", + "Cash Registers": "Cash Registers", + "Keyboard Shortcuts": "Keyboard Shortcuts", + "Cancel Order": "Cancel Order", + "Keyboard shortcut to cancel the current order.": "Keyboard shortcut to cancel the current order.", + "Hold Order": "Hold Order", + "Keyboard shortcut to hold the current order.": "Keyboard shortcut to hold the current order.", + "Keyboard shortcut to create a customer.": "Keyboard shortcut to create a customer.", + "Proceed Payment": "Proceed Payment", + "Keyboard shortcut to proceed to the payment.": "Keyboard shortcut to proceed to the payment.", + "Open Shipping": "Open Shipping", + "Keyboard shortcut to define shipping details.": "Keyboard shortcut to define shipping details.", + "Open Note": "Open Note", + "Keyboard shortcut to open the notes.": "Keyboard shortcut to open the notes.", + "Order Type Selector": "Order Type Selector", + "Keyboard shortcut to open the order type selector.": "Keyboard shortcut to open the order type selector.", + "Toggle Fullscreen": "Toggle Fullscreen", + "Keyboard shortcut to toggle fullscreen.": "Keyboard shortcut to toggle fullscreen.", + "Quick Search": "Quick Search", + "Keyboard shortcut open the quick search popup.": "Keyboard shortcut open the quick search popup.", + "Toggle Product Merge": "Toggle Product Merge", + "Will enable or disable the product merging.": "Will enable or disable the product merging.", + "Amount Shortcuts": "Amount Shortcuts", + "VAT Type": "VAT Type", + "Determine the VAT type that should be used.": "Determine the VAT type that should be used.", + "Flat Rate": "Flat Rate", + "Flexible Rate": "Flexible Rate", + "Products Vat": "Products Vat", + "Products & Flat Rate": "Products & Flat Rate", + "Products & Flexible Rate": "Products & Flexible Rate", + "Define the tax group that applies to the sales.": "Define the tax group that applies to the sales.", + "Define how the tax is computed on sales.": "Define how the tax is computed on sales.", + "VAT Settings": "VAT Settings", + "Enable Email Reporting": "Enable Email Reporting", + "Determine if the reporting should be enabled globally.": "Determine if the reporting should be enabled globally.", + "Supplies": "Supplies", + "Public Name": "Public Name", + "Define what is the user public name. If not provided, the username is used instead.": "Define what is the user public name. If not provided, the username is used instead.", + "Enable Workers": "Enable Workers", + "Test": "Test", + "OK": "OK", + "Howdy, {name}": "Howdy, {name}", + "This field must contain a valid email address.": "This field must contain a valid email address.", + "Okay": "Okay", + "Go Back": "Go Back", + "Save": "Ruaj", + "Filters": "Filters", + "Has Filters": "Has Filters", + "{entries} entries selected": "{entries} entries selected", + "Download": "Download", + "There is nothing to display...": "Ketu nuk ka asnje informacion...", + "Bulk Actions": "Veprime", + "Apply": "Apliko", + "displaying {perPage} on {items} items": "shfaqur {perPage} nga {items} rekorde", + "The document has been generated.": "The document has been generated.", + "Clear Selected Entries ?": "Clear Selected Entries ?", + "Would you like to clear all selected entries ?": "Would you like to clear all selected entries ?", + "Would you like to perform the selected bulk action on the selected entries ?": "Would you like to perform the selected bulk action on the selected entries ?", + "No selection has been made.": "Nuk eshte bere asnje Selektim.", + "No action has been selected.": "Nuk eshte zgjedhur asnje Veprim per tu aplikuar.", + "N\/D": "N\/D", + "Range Starts": "Range Starts", + "Range Ends": "Range Ends", + "Sun": "Die", + "Mon": "Hen", + "Tue": "Mar", + "Wed": "Mer", + "Thr": "Enj", + "Fri": "Pre", + "Sat": "Sht", + "Nothing to display": "Nothing to display", + "Enter": "Enter", + "Search...": "Kerko...", + "An unexpected error occured.": "Ndodhi nje gabim.", + "Choose an option": "Zgjidh", + "Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".": "Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".", + "Unknown Status": "Unknown Status", + "Password Forgotten ?": "Password Forgotten ?", + "Sign In": "Hyr", + "Register": "Regjistrohu", + "Unable to proceed the form is not valid.": "Unable to proceed the form is not valid.", + "Save Password": "Ruaj Fjalekalimin", + "Remember Your Password ?": "Rikojto Fjalekalimin ?", + "Submit": "Dergo", + "Already registered ?": "Already registered ?", + "Return": "Return", + "Best Cashiers": "Best Cashiers", + "No result to display.": "No result to display.", + "Well.. nothing to show for the meantime.": "Well.. nothing to show for the meantime.", + "Best Customers": "TOP Klientet", + "Well.. nothing to show for the meantime": "Well.. nothing to show for the meantime", + "Total Sales": "Total Shitje", + "Today": "Today", + "Total Refunds": "Total Refunds", + "Clients Registered": "Clients Registered", + "Commissions": "Commissions", + "Incomplete Orders": "Pa Perfunduar", + "Weekly Sales": "Shitje Javore", + "Week Taxes": "Taksa Javore", + "Net Income": "Te ardhura NETO", + "Week Expenses": "Shpenzime Javore", + "Current Week": "Java Aktuale", + "Previous Week": "Java e Meparshme", + "Recents Orders": "Porosite e Meparshme", + "Upload": "Upload", + "Enable": "Aktivizo", + "Disable": "Caktivizo", + "Gallery": "Galeria", + "Confirm Your Action": "Konfirmoni Veprimin", + "Medias Manager": "Menaxhimi Media", + "Click Here Or Drop Your File To Upload": "Klikoni ketu per te ngarkuar dokumentat tuaja", + "Nothing has already been uploaded": "Nuk u ngarkua asnje dokument", + "File Name": "Emri Dokumentit", + "Uploaded At": "Ngarkuar me", + "Previous": "Previous", + "Next": "Next", + "Use Selected": "Perdor te zgjedhuren", + "Clear All": "Pastro te gjitha", + "Would you like to clear all the notifications ?": "Doni ti pastroni te gjitha njoftimet ?", + "Permissions": "Te Drejtat", + "Payment Summary": "Payment Summary", + "Order Status": "Order Status", + "Processing Status": "Processing Status", + "Refunded Products": "Refunded Products", + "All Refunds": "All Refunds", + "Would you proceed ?": "Would you proceed ?", + "The processing status of the order will be changed. Please confirm your action.": "The processing status of the order will be changed. Please confirm your action.", + "The delivery status of the order will be changed. Please confirm your action.": "The delivery status of the order will be changed. Please confirm your action.", + "Payment Method": "Metoda e Pageses", + "Before submitting the payment, choose the payment type used for that order.": "Before submitting the payment, choose the payment type used for that order.", + "Submit Payment": "Submit Payment", + "Select the payment type that must apply to the current order.": "Select the payment type that must apply to the current order.", + "Payment Type": "Tipi i Pageses", + "The form is not valid.": "Forma nuk eshte e sakte.", + "Update Instalment Date": "Update Instalment Date", + "Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.": "Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.", + "Create": "Krijo", + "Add Instalment": "Add Instalment", + "Would you like to create this instalment ?": "Would you like to create this instalment ?", + "Would you like to delete this instalment ?": "Would you like to delete this instalment ?", + "Would you like to update that instalment ?": "Would you like to update that instalment ?", + "Print": "Printo", + "Store Details": "Detajet e Dyqanit", + "Order Code": "Order Code", + "Cashier": "Cashier", + "Billing Details": "Billing Details", + "Shipping Details": "Adresa per Dorezim", + "No payment possible for paid order.": "No payment possible for paid order.", + "Payment History": "Payment History", + "Unknown": "Unknown", + "Refund With Products": "Refund With Products", + "Refund Shipping": "Refund Shipping", + "Add Product": "Add Product", + "Summary": "Summary", + "Payment Gateway": "Payment Gateway", + "Screen": "Screen", + "Select the product to perform a refund.": "Select the product to perform a refund.", + "Please select a payment gateway before proceeding.": "Please select a payment gateway before proceeding.", + "There is nothing to refund.": "There is nothing to refund.", + "Please provide a valid payment amount.": "Please provide a valid payment amount.", + "The refund will be made on the current order.": "The refund will be made on the current order.", + "Please select a product before proceeding.": "Please select a product before proceeding.", + "Not enough quantity to proceed.": "Not enough quantity to proceed.", + "Would you like to delete this product ?": "Would you like to delete this product ?", + "Order Type": "Tipi Porosise", + "Cart": "Cart", + "Comments": "Komente", + "No products added...": "Shto produkt ne fature...", + "Price": "Price", + "Tax Inclusive": "Tax Inclusive", + "Pay": "Paguaj", + "Apply Coupon": "Apliko Kupon", + "The product price has been updated.": "The product price has been updated.", + "The editable price feature is disabled.": "The editable price feature is disabled.", + "Unable to hold an order which payment status has been updated already.": "Unable to hold an order which payment status has been updated already.", + "Unable to change the price mode. This feature has been disabled.": "Unable to change the price mode. This feature has been disabled.", + "Enable WholeSale Price": "Enable WholeSale Price", + "Would you like to switch to wholesale price ?": "Would you like to switch to wholesale price ?", + "Enable Normal Price": "Enable Normal Price", + "Would you like to switch to normal price ?": "Would you like to switch to normal price ?", + "Search for products.": "Kerko per Produkte.", + "Toggle merging similar products.": "Toggle merging similar products.", + "Toggle auto focus.": "Toggle auto focus.", + "Current Balance": "Gjendje Aktuale", + "Full Payment": "Pagese e Plote", + "The customer account can only be used once per order. Consider deleting the previously used payment.": "The customer account can only be used once per order. Consider deleting the previously used payment.", + "Not enough funds to add {amount} as a payment. Available balance {balance}.": "Not enough funds to add {amount} as a payment. Available balance {balance}.", + "Confirm Full Payment": "Konfirmoni Pagesen e Plote", + "A full payment will be made using {paymentType} for {total}": "A full payment will be made using {paymentType} for {total}", + "You need to provide some products before proceeding.": "You need to provide some products before proceeding.", + "Unable to add the product, there is not enough stock. Remaining %s": "Unable to add the product, there is not enough stock. Remaining %s", + "Add Images": "Shto Imazhe", + "Remove Image": "Hiq Imazhin", + "New Group": "Grup i Ri", + "Available Quantity": "Available Quantity", + "Would you like to delete this group ?": "Would you like to delete this group ?", + "Your Attention Is Required": "Your Attention Is Required", + "Please select at least one unit group before you proceed.": "Please select at least one unit group before you proceed.", + "Unable to proceed, more than one product is set as featured": "Unable to proceed, more than one product is set as featured", + "Unable to proceed as one of the unit group field is invalid": "Unable to proceed as one of the unit group field is invalid", + "Would you like to delete this variation ?": "Would you like to delete this variation ?", + "Details": "Detaje", + "No result match your query.": "No result match your query.", + "Unable to proceed, no product were provided.": "Unable to proceed, no product were provided.", + "Unable to proceed, one or more product has incorrect values.": "Unable to proceed, one or more product has incorrect values.", + "Unable to proceed, the procurement form is not valid.": "Unable to proceed, the procurement form is not valid.", + "Unable to submit, no valid submit URL were provided.": "Unable to submit, no valid submit URL were provided.", + "No title is provided": "Nuk eshte vendosur Titull", + "Search products...": "Kerko produktet...", + "Set Sale Price": "Set Sale Price", + "Remove": "Hiq", + "No product are added to this group.": "No product are added to this group.", + "Delete Sub item": "Delete Sub item", + "Would you like to delete this sub item?": "Would you like to delete this sub item?", + "Unable to add a grouped product.": "Unable to add a grouped product.", + "Choose The Unit": "Zgjidh Njesine", + "An unexpected error occured": "An unexpected error occured", + "Ok": "Ok", + "The product already exists on the table.": "The product already exists on the table.", + "The specified quantity exceed the available quantity.": "The specified quantity exceed the available quantity.", + "Unable to proceed as the table is empty.": "Unable to proceed as the table is empty.", + "The stock adjustment is about to be made. Would you like to confirm ?": "The stock adjustment is about to be made. Would you like to confirm ?", + "More Details": "Me shume Detaje", + "Useful to describe better what are the reasons that leaded to this adjustment.": "Useful to describe better what are the reasons that leaded to this adjustment.", + "The reason has been updated.": "The reason has been updated.", + "Would you like to remove this product from the table ?": "Would you like to remove this product from the table ?", + "Search": "Kerko", + "Search and add some products": "Kerko dhe shto Produkte", + "Proceed": "Procedo", + "Low Stock Report": "Raport Gjendje Ulet", + "Report Type": "Tipi Raportit", + "Unable to proceed. Select a correct time range.": "Unable to proceed. Select a correct time range.", + "Unable to proceed. The current time range is not valid.": "Unable to proceed. The current time range is not valid.", + "Categories Detailed": "Categories Detailed", + "Categories Summary": "Categories Summary", + "Allow you to choose the report type.": "Allow you to choose the report type.", + "Filter User": "Filter User", + "All Users": "Te gjithe Perdoruesit", + "No user was found for proceeding the filtering.": "No user was found for proceeding the filtering.", + "Would you like to proceed ?": "Would you like to proceed ?", + "This form is not completely loaded.": "This form is not completely loaded.", + "No rules has been provided.": "No rules has been provided.", + "No valid run were provided.": "No valid run were provided.", + "Unable to proceed, the form is invalid.": "Unable to proceed, the form is invalid.", + "Unable to proceed, no valid submit URL is defined.": "Unable to proceed, no valid submit URL is defined.", + "No title Provided": "No title Provided", + "Add Rule": "Add Rule", + "Save Settings": "Ruaj Ndryshimet", + "Try Again": "Provo Perseri", + "Updating": "Duke bere Update", + "Updating Modules": "Duke Azhornuar Modulet", + "New Transaction": "Transaksion i Ri", + "Close": "Mbyll", + "Search Filters": "Filtra Kerkimi", + "Clear Filters": "Pastro Filtrat", + "Use Filters": "Perdor Filtrat", + "Would you like to delete this order": "Would you like to delete this order", + "The current order will be void. This action will be recorded. Consider providing a reason for this operation": "The current order will be void. This action will be recorded. Consider providing a reason for this operation", + "Order Options": "Order Options", + "Payments": "Payments", + "Refund & Return": "Refund & Return", + "available": "available", + "Order Refunds": "Order Refunds", + "Input": "Input", + "Close Register": "Close Register", + "Register Options": "Register Options", + "Sales": "Sales", + "History": "History", + "Unable to open this register. Only closed register can be opened.": "Unable to open this register. Only closed register can be opened.", + "Open The Register": "Open The Register", + "Exit To Orders": "Exit To Orders", + "Looks like there is no registers. At least one register is required to proceed.": "Looks like there is no registers. At least one register is required to proceed.", + "Create Cash Register": "Create Cash Register", + "Load Coupon": "Apliko Kod Kuponi Zbritje", + "Apply A Coupon": "Kuponi", + "Load": "Apliko", + "Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.": "Vendosni Kodin e Kuponit qe do te aplikohet ne Fature. Nese Kuponi eshte per nje klient te caktuar, atehere me pare ju duhet zgjidhni Klientin.", + "Click here to choose a customer.": "Kliko ketu per te zgjedhur Klientin.", + "Coupon Name": "Emri i Kuponit", + "Unlimited": "Unlimited", + "Not applicable": "Not applicable", + "Active Coupons": "Kupona Aktive", + "No coupons applies to the cart.": "No coupons applies to the cart.", + "Cancel": "Cancel", + "The coupon is out from validity date range.": "The coupon is out from validity date range.", + "The coupon has applied to the cart.": "The coupon has applied to the cart.", + "Unknown Type": "Unknown Type", + "You must select a customer before applying a coupon.": "You must select a customer before applying a coupon.", + "The coupon has been loaded.": "The coupon has been loaded.", + "Use": "Perdor", + "No coupon available for this customer": "No coupon available for this customer", + "Select Customer": "Zgjidhni Klientin", + "Selected": "Selected", + "No customer match your query...": "No customer match your query...", + "Create a customer": "Krijo Klient", + "Save Customer": "Ruaj", + "Not Authorized": "Ju nuk jeni i Autorizuar", + "Creating customers has been explicitly disabled from the settings.": "Krijimi i Klienteve eshte inaktiv nga menu Cilesimet.", + "No Customer Selected": "Nuk keni zgjedhur klient", + "In order to see a customer account, you need to select one customer.": "In order to see a customer account, you need to select one customer.", + "Summary For": "Summary For", + "Total Purchases": "Total Purchases", + "Wallet Amount": "Wallet Amount", + "Last Purchases": "Last Purchases", + "No orders...": "No orders...", + "Transaction": "Transaction", + "No History...": "No History...", + "No coupons for the selected customer...": "No coupons for the selected customer...", + "Use Coupon": "Use Coupon", + "No rewards available the selected customer...": "No rewards available the selected customer...", + "Account Transaction": "Account Transaction", + "Removing": "Removing", + "Refunding": "Refunding", + "Unknow": "Unknow", + "Use Customer ?": "Perdor Klientin ?", + "No customer is selected. Would you like to proceed with this customer ?": "Nuk eshte Zgjedhur Klient. Doni te procedoni me kete Klient ?", + "Change Customer ?": "Ndrysho Klient ?", + "Would you like to assign this customer to the ongoing order ?": "Would you like to assign this customer to the ongoing order ?", + "Product Discount": "Zbritje ne Produkt", + "Cart Discount": "Zbritje ne Fature", + "Confirm": "Konfirmo", + "Layaway Parameters": "Layaway Parameters", + "Minimum Payment": "Minimum Payment", + "Instalments & Payments": "Instalments & Payments", + "The final payment date must be the last within the instalments.": "The final payment date must be the last within the instalments.", + "There is no instalment defined. Please set how many instalments are allowed for this order": "There is no instalment defined. Please set how many instalments are allowed for this order", + "Skip Instalments": "Skip Instalments", + "You must define layaway settings before proceeding.": "You must define layaway settings before proceeding.", + "Please provide instalments before proceeding.": "Please provide instalments before proceeding.", + "One or more instalments has an invalid date.": "One or more instalments has an invalid date.", + "One or more instalments has an invalid amount.": "One or more instalments has an invalid amount.", + "One or more instalments has a date prior to the current date.": "One or more instalments has a date prior to the current date.", + "The payment to be made today is less than what is expected.": "The payment to be made today is less than what is expected.", + "Total instalments must be equal to the order total.": "Total instalments must be equal to the order total.", + "Order Note": "Shenime ne Fature", + "Note": "Shenimet", + "More details about this order": "Me shume detaje per kete Fature", + "Display On Receipt": "Shfaqi shenimet ne Fature?", + "Will display the note on the receipt": "", + "Open": "Open", + "Order Settings": "Cilesime Porosie", + "Define The Order Type": "Zgjidh Tipin e Porosise", + "No payment type has been selected on the settings. Please check your POS features and choose the supported order type": "No payment type has been selected on the settings. Please check your POS features and choose the supported order type", + "Read More": "Lexo te plote", + "Select Payment Gateway": "Select Payment Gateway", + "Gateway": "Gateway", + "Payment List": "Payment List", + "List Of Payments": "List Of Payments", + "No Payment added.": "No Payment added.", + "Layaway": "Layaway", + "On Hold": "Ne Pritje", + "Nothing to display...": "Nothing to display...", + "Product Price": "Cmimi Produktit", + "Define Quantity": "Plotesoni Sasine", + "Please provide a quantity": "Ju lutem plotesoni Sasine", + "Product \/ Service": "Product \/ Service", + "Unable to proceed. The form is not valid.": "Unable to proceed. The form is not valid.", + "Provide a unique name for the product.": "Provide a unique name for the product.", + "Define the product type.": "Define the product type.", + "Normal": "Normal", + "Dynamic": "Dinamik", + "In case the product is computed based on a percentage, define the rate here.": "In case the product is computed based on a percentage, define the rate here.", + "Define what is the sale price of the item.": "Define what is the sale price of the item.", + "Set the quantity of the product.": "Set the quantity of the product.", + "Assign a unit to the product.": "Assign a unit to the product.", + "Define what is tax type of the item.": "Define what is tax type of the item.", + "Choose the tax group that should apply to the item.": "Choose the tax group that should apply to the item.", + "Search Product": "Kerko Produkt", + "There is nothing to display. Have you started the search ?": "There is nothing to display. Have you started the search ?", + "Unable to add the product": "Unable to add the product", + "No result to result match the search value provided.": "No result to result match the search value provided.", + "Shipping & Billing": "Shipping & Billing", + "Tax & Summary": "Tax & Summary", + "No tax is active": "Nuk ka Taksa Aktive", + "Product Taxes": "Taksat e Produkteve", + "Select Tax": "Zgjidh Takse", + "Define the tax that apply to the sale.": "Zgjidhni Taksen qe aplikohet ne shitje.", + "Define how the tax is computed": "Caktoni llogaritjen e Takses", + "The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.": "The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.", + "Define when that specific product should expire.": "Define when that specific product should expire.", + "Renders the automatically generated barcode.": "Gjenero Barkod Automatik.", + "Adjust how tax is calculated on the item.": "Zgjidhni si do te llogariten Taksat per kete Produkt.", + "Units & Quantities": "Njesite & Sasite", + "Select": "Zgjidh", + "The customer has been loaded": "The customer has been loaded", + "Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.": "Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.", + "OKAY": "OKAY", + "Some products has been added to the cart. Would youl ike to discard this order ?": "Some products has been added to the cart. Would youl ike to discard this order ?", + "This coupon is already added to the cart": "This coupon is already added to the cart", + "Unable to delete a payment attached to the order.": "Unable to delete a payment attached to the order.", + "No tax group assigned to the order": "No tax group assigned to the order", + "Before saving this order, a minimum payment of {amount} is required": "Before saving this order, a minimum payment of {amount} is required", + "Unable to proceed": "E pamundur te Procedoj", + "Layaway defined": "Layaway defined", + "Initial Payment": "Initial Payment", + "In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?": "In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?", + "The request was canceled": "The request was canceled", + "Partially paid orders are disabled.": "Partially paid orders are disabled.", + "An order is currently being processed.": "An order is currently being processed.", + "The discount has been set to the cart subtotal.": "The discount has been set to the cart subtotal.", + "Order Deletion": "Order Deletion", + "The current order will be deleted as no payment has been made so far.": "The current order will be deleted as no payment has been made so far.", + "Void The Order": "Void The Order", + "Unable to void an unpaid order.": "Unable to void an unpaid order.", + "Loading...": "Duke u ngarkuar...", + "Logout": "Dil", + "Unamed Page": "Unamed Page", + "No description": "Pa pershkrim", + "Activate Your Account": "Aktivizoni Llogarine tuaj", + "The account you have created for __%s__, require an activation. In order to proceed, please click on the following link": "The account you have created for __%s__, require an activation. In order to proceed, please click on the following link", + "Password Recovered": "Password Recovered", + "Your password has been successfully updated on __%s__. You can now login with your new password.": "Your password has been successfully updated on __%s__. You can now login with your new password.", + "Password Recovery": "Password Recovery", + "Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ": "Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ", + "Reset Password": "Rivendos Fjalekalimin", + "New User Registration": "Regjistrimi Perdoruesit te ri", + "Your Account Has Been Created": "Llogaria juaj u krijua me sukses", + "Login": "Hyr", + "Properties": "Properties", + "Extensions": "Extensions", + "Configurations": "Konfigurimet", + "Learn More": "Learn More", + "Save Coupon": "Ruaj Kuponin", + "This field is required": "Kjo fushe eshte e Detyrueshme", + "The form is not valid. Please check it and try again": "The form is not valid. Please check it and try again", + "mainFieldLabel not defined": "mainFieldLabel not defined", + "Create Customer Group": "Krijo Grup Klientesh", + "Save a new customer group": "Ruaj Grupin e Klienteve", + "Update Group": "Azhorno Grupin", + "Modify an existing customer group": "Modifiko Grupin e Klienteve", + "Managing Customers Groups": "Menaxhimi Grupeve te Klienteve", + "Create groups to assign customers": "Krijo Grup Klientesh", + "Managing Customers": "Menaxhimi Klienteve", + "List of registered customers": "Lista e Klienteve te Regjistruar", + "Log out": "Dil", + "Your Module": "Moduli Juaj", + "Choose the zip file you would like to upload": "Zgjidhni file .Zip per upload", + "Managing Orders": "Managing Orders", + "Manage all registered orders.": "Manage all registered orders.", + "Payment receipt": "Payment receipt", + "Hide Dashboard": "Fsheh Dashboard", + "Receipt — %s": "Receipt — %s", + "Order receipt": "Order receipt", + "Refund receipt": "Refund receipt", + "Current Payment": "Current Payment", + "Total Paid": "Paguar Total", + "Unable to proceed no products has been provided.": "Unable to proceed no products has been provided.", + "Unable to proceed, one or more products is not valid.": "Unable to proceed, one or more products is not valid.", + "Unable to proceed the procurement form is not valid.": "Unable to proceed the procurement form is not valid.", + "Unable to proceed, no submit url has been provided.": "Unable to proceed, no submit url has been provided.", + "SKU, Barcode, Product name.": "SKU, Barkodi, Emri i Produktit.", + "First Address": "Adresa Primare", + "Second Address": "Adresa Sekondare", + "Address": "Address", + "Search Products...": "Kerko Produkte...", + "Included Products": "Included Products", + "Apply Settings": "Apply Settings", + "Basic Settings": "Basic Settings", + "Visibility Settings": "Visibility Settings", + "An Error Has Occured": "An Error Has Occured", + "Unable to load the report as the timezone is not set on the settings.": "Raporti nuk u ngarkua pasi nuk keni zgjedhur Timezone tek Cilesimet.", + "Year": "Vit", + "Recompute": "Recompute", + "Income": "Income", + "January": "Janar", + "Febuary": "Shkurt", + "March": "Mars", + "April": "Prill", + "May": "Maj", + "June": "Qershor", + "July": "Korrik", + "August": "Gusht", + "September": "Shtator", + "October": "Tetor", + "November": "Nentor", + "December": "Dhjetor", + "Sort Results": "Rendit Rezultatet", + "Using Quantity Ascending": "Using Quantity Ascending", + "Using Quantity Descending": "Using Quantity Descending", + "Using Sales Ascending": "Using Sales Ascending", + "Using Sales Descending": "Using Sales Descending", + "Using Name Ascending": "Using Name Ascending", + "Using Name Descending": "Using Name Descending", + "Progress": "Progress", + "No results to show.": "Nuk ka rezultate.", + "Start by choosing a range and loading the report.": "Start by choosing a range and loading the report.", + "Search Customer...": "Kerko Klientin...", + "Due Amount": "Due Amount", + "Wallet Balance": "Wallet Balance", + "Total Orders": "Total Orders", + "There is no product to display...": "There is no product to display...", + "Profit": "Profit", + "Sales Discounts": "Sales Discounts", + "Sales Taxes": "Sales Taxes", + "Discounts": "Zbritje", + "Reward System Name": "Reward System Name", + "Your system is running in production mode. You probably need to build the assets": "Your system is running in production mode. You probably need to build the assets", + "Your system is in development mode. Make sure to build the assets.": "Your system is in development mode. Make sure to build the assets.", + "How to change database configuration": "Si te ndryshoni Konfigurimin e Databazes", + "Setup": "Setup", + "Common Database Issues": "Common Database Issues", + "Documentation": "Documentation", + "Sign Up": "Regjistrohu", + "X Days After Month Starts": "X Days After Month Starts", + "On Specific Day": "On Specific Day", + "Not enough parameters provided for the relation.": "Not enough parameters provided for the relation.", + "Done": "Done", + "Would you like to delete \"%s\"?": "Would you like to delete \"%s\"?", + "Unable to find a module having as namespace \"%s\"": "Unable to find a module having as namespace \"%s\"", + "Api File": "Api File", + "Migrations": "Migrations", + "%s products where updated.": "%s products where updated.", + "Determine Until When the coupon is valid.": "Determine Until When the coupon is valid.", + "Customer Groups": "Customer Groups", + "Assigned To Customer Group": "Assigned To Customer Group", + "Only the customers who belongs to the selected groups will be able to use the coupon.": "Only the customers who belongs to the selected groups will be able to use the coupon.", + "Assigned To Customers": "Assigned To Customers", + "Only the customers selected will be ale to use the coupon.": "Only the customers selected will be ale to use the coupon.", + "Unable to save the coupon as one of the selected customer no longer exists.": "Unable to save the coupon as one of the selected customer no longer exists.", + "Unable to save the coupon as one of the selected customer group no longer exists.": "Unable to save the coupon as one of the selected customer group no longer exists.", + "Unable to save the coupon as one of the customers provided no longer exists.": "Unable to save the coupon as one of the customers provided no longer exists.", + "Unable to save the coupon as one of the provided customer group no longer exists.": "Unable to save the coupon as one of the provided customer group no longer exists.", + "Coupon Order Histories List": "Coupon Order Histories List", + "Display all coupon order histories.": "Display all coupon order histories.", + "No coupon order histories has been registered": "No coupon order histories has been registered", + "Add a new coupon order history": "Add a new coupon order history", + "Create a new coupon order history": "Create a new coupon order history", + "Register a new coupon order history and save it.": "Register a new coupon order history and save it.", + "Edit coupon order history": "Edit coupon order history", + "Modify Coupon Order History.": "Modify Coupon Order History.", + "Return to Coupon Order Histories": "Return to Coupon Order Histories", + "Customer_coupon_id": "Customer_coupon_id", + "Order_id": "Order_id", + "Discount_value": "Discount_value", + "Minimum_cart_value": "Minimum_cart_value", + "Maximum_cart_value": "Maximum_cart_value", + "Limit_usage": "Limit_usage", + "Would you like to delete this?": "Would you like to delete this?", + "Usage History": "Usage History", + "Customer Coupon Histories List": "Customer Coupon Histories List", + "Display all customer coupon histories.": "Display all customer coupon histories.", + "No customer coupon histories has been registered": "No customer coupon histories has been registered", + "Add a new customer coupon history": "Add a new customer coupon history", + "Create a new customer coupon history": "Create a new customer coupon history", + "Register a new customer coupon history and save it.": "Register a new customer coupon history and save it.", + "Edit customer coupon history": "Edit customer coupon history", + "Modify Customer Coupon History.": "Modify Customer Coupon History.", + "Return to Customer Coupon Histories": "Return to Customer Coupon Histories", + "Last Name": "Last Name", + "Provide the customer last name": "Provide the customer last name", + "Provide the customer gender.": "Provide the customer gender.", + "Provide the billing first name.": "Provide the billing first name.", + "Provide the billing last name.": "Provide the billing last name.", + "Provide the shipping First Name.": "Provide the shipping First Name.", + "Provide the shipping Last Name.": "Provide the shipping Last Name.", + "Occurrence": "Occurrence", + "Occurrence Value": "Occurrence Value", + "Scheduled": "Scheduled", + "Set the scheduled date.": "Set the scheduled date.", + "Account Name": "Account Name", + "Define whether the product is available for sale.": "Define whether the product is available for sale.", + "Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.": "Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.", + "Provide the provider email. Might be used to send automated email.": "Provide the provider email. Might be used to send automated email.", + "Provider last name if necessary.": "Provider last name if necessary.", + "Contact phone number for the provider. Might be used to send automated SMS notifications.": "Contact phone number for the provider. Might be used to send automated SMS notifications.", + "Provide the user first name.": "Provide the user first name.", + "Provide the user last name.": "Provide the user last name.", + "Define whether the user can use the application.": "Define whether the user can use the application.", + "Set the user gender.": "Set the user gender.", + "Set the user phone number.": "Set the user phone number.", + "Set the user PO Box.": "Set the user PO Box.", + "Provide the billing First Name.": "Provide the billing First Name.", + "Last name": "Last name", + "Group Name": "Group Name", + "Delete a user": "Delete a user", + "An error has occurred": "An error has occurred", + "Activated": "Activated", + "type": "type", + "User Group": "User Group", + "Scheduled On": "Scheduled On", + "Define whether the customer billing information should be used.": "Define whether the customer billing information should be used.", + "Define whether the customer shipping information should be used.": "Define whether the customer shipping information should be used.", + "Biling": "Biling", + "API Token": "API Token", + "Unable to export if there is nothing to export.": "Unable to export if there is nothing to export.", + "The requested customer cannot be found.": "The requested customer cannot be found.", + "%s Coupons": "%s Coupons", + "%s Coupon History": "%s Coupon History", + "All the customers has been transferred to the new group %s.": "All the customers has been transferred to the new group %s.", + "The categories has been transferred to the group %s.": "The categories has been transferred to the group %s.", + "\"%s\" Record History": "\"%s\" Record History", + "The media name was successfully updated.": "The media name was successfully updated.", + "All the notifications have been cleared.": "All the notifications have been cleared.", + "Unable to find the requested product tax using the provided id": "Unable to find the requested product tax using the provided id", + "Unable to retrieve the requested tax group using the provided identifier \"%s\".": "Unable to retrieve the requested tax group using the provided identifier \"%s\".", + "The recovery has been explicitly disabled.": "The recovery has been explicitly disabled.", + "The registration has been explicitly disabled.": "The registration has been explicitly disabled.", + "The role was successfully assigned.": "The role was successfully assigned.", + "The role were successfully assigned.": "The role were successfully assigned.", + "Unable to identifier the provided role.": "Unable to identifier the provided role.", + "Good Condition": "Good Condition", + "Cron Disabled": "Cron Disabled", + "Task Scheduling Disabled": "Task Scheduling Disabled", + "NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.": "NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.", + "Non-existent Item": "Non-existent Item", + "The email \"%s\" is already used for another customer.": "The email \"%s\" is already used for another customer.", + "The provided coupon cannot be loaded for that customer.": "The provided coupon cannot be loaded for that customer.", + "The provided coupon cannot be loaded for the group assigned to the selected customer.": "The provided coupon cannot be loaded for the group assigned to the selected customer.", + "Unable to use the coupon %s as it has expired.": "Unable to use the coupon %s as it has expired.", + "Unable to use the coupon %s at this moment.": "Unable to use the coupon %s at this moment.", + "Small Box": "Small Box", + "Box": "Box", + "%s on %s directories were deleted.": "%s on %s directories were deleted.", + "%s on %s files were deleted.": "%s on %s files were deleted.", + "First Day Of Month": "First Day Of Month", + "Last Day Of Month": "Last Day Of Month", + "Month middle Of Month": "Month middle Of Month", + "{day} after month starts": "{day} after month starts", + "{day} before month ends": "{day} before month ends", + "Every {day} of the month": "Every {day} of the month", + "Days": "Days", + "Make sure set a day that is likely to be executed": "Make sure set a day that is likely to be executed", + "Invalid Module provided.": "Invalid Module provided.", + "The module was \"%s\" was successfully installed.": "The module was \"%s\" was successfully installed.", + "The modules \"%s\" was deleted successfully.": "The modules \"%s\" was deleted successfully.", + "Unable to locate a module having as identifier \"%s\".": "Unable to locate a module having as identifier \"%s\".", + "All migration were executed.": "All migration were executed.", + "Unnamed Product": "Unnamed Product", + "the order has been successfully computed.": "the order has been successfully computed.", + "Unknown Product Status": "Unknown Product Status", + "The product has been updated": "The product has been updated", + "The product has been reset.": "The product has been reset.", + "The product variation has been successfully created.": "The product variation has been successfully created.", + "Member Since": "Member Since", + "Total Customers": "Total Customers", + "NexoPOS has been successfully installed.": "NexoPOS has been successfully installed.", + "The widgets was successfully updated.": "The widgets was successfully updated.", + "The token was successfully created": "The token was successfully created", + "The token has been successfully deleted.": "The token has been successfully deleted.", + "Store additional information.": "Store additional information.", + "Preferred Currency": "Preferred Currency", + "Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".": "Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".", + "Will display all cashiers who performs well.": "Will display all cashiers who performs well.", + "Will display all customers with the highest purchases.": "Will display all customers with the highest purchases.", + "Expense Card Widget": "Expense Card Widget", + "Will display a card of current and overwall expenses.": "Will display a card of current and overwall expenses.", + "Incomplete Sale Card Widget": "Incomplete Sale Card Widget", + "Will display a card of current and overall incomplete sales.": "Will display a card of current and overall incomplete sales.", + "Orders Chart": "Orders Chart", + "Will display a chart of weekly sales.": "Will display a chart of weekly sales.", + "Orders Summary": "Orders Summary", + "Will display a summary of recent sales.": "Will display a summary of recent sales.", + "Will display a profile widget with user stats.": "Will display a profile widget with user stats.", + "Sale Card Widget": "Sale Card Widget", + "Will display current and overall sales.": "Will display current and overall sales.", + "Return To Calendar": "Return To Calendar", + "The left range will be invalid.": "The left range will be invalid.", + "The right range will be invalid.": "The right range will be invalid.", + "Unexpected error occurred.": "Unexpected error occurred.", + "Click here to add widgets": "Click here to add widgets", + "Choose Widget": "Choose Widget", + "Select with widget you want to add to the column.": "Select with widget you want to add to the column.", + "An unexpected error occurred.": "An unexpected error occurred.", + "Unamed Tab": "Unamed Tab", + "An error unexpected occured while printing.": "An error unexpected occured while printing.", + "and": "and", + "{date} ago": "{date} ago", + "In {date}": "In {date}", + "Warning": "Warning", + "Change Type": "Change Type", + "Save Expense": "Save Expense", + "No configuration were choosen. Unable to proceed.": "No configuration were choosen. Unable to proceed.", + "Conditions": "Conditions", + "By proceeding the current for and all your entries will be cleared. Would you like to proceed?": "By proceeding the current for and all your entries will be cleared. Would you like to proceed?", + "No modules matches your search term.": "No modules matches your search term.", + "Press \"\/\" to search modules": "Press \"\/\" to search modules", + "No module has been uploaded yet.": "No module has been uploaded yet.", + "{module}": "{module}", + "Would you like to delete \"{module}\"? All data created by the module might also be deleted.": "Would you like to delete \"{module}\"? All data created by the module might also be deleted.", + "Search Medias": "Search Medias", + "Bulk Select": "Bulk Select", + "Press "\/" to search permissions": "Press "\/" to search permissions", + "An unexpected error has occurred": "An unexpected error has occurred", + "SKU, Barcode, Name": "SKU, Barcode, Name", + "An unexpected error occurred": "An unexpected error occurred", + "About Token": "About Token", + "Save Token": "Save Token", + "Generated Tokens": "Generated Tokens", + "Created": "Created", + "Last Use": "Last Use", + "Never": "Never", + "Expires": "Expires", + "Revoke": "Revoke", + "Token Name": "Token Name", + "This will be used to identifier the token.": "This will be used to identifier the token.", + "Unable to proceed, the form is not valid.": "Unable to proceed, the form is not valid.", + "An error occurred while opening the order options": "An error occurred while opening the order options", + "The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.": "The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.", + "Unable to process, the form is not valid": "Unable to process, the form is not valid", + "Configure": "Configure", + "This QR code is provided to ease authentication on external applications.": "This QR code is provided to ease authentication on external applications.", + "Copy And Close": "Copy And Close", + "An error has occurred while computing the product.": "An error has occurred while computing the product.", + "An unexpected error has occurred while fecthing taxes.": "An unexpected error has occurred while fecthing taxes.", + "Unnamed Page": "Unnamed Page", + "Environment Details": "Environment Details", + "Assignation": "Assignation", + "Incoming Conversion": "Incoming Conversion", + "Outgoing Conversion": "Outgoing Conversion", + "Unknown Action": "Unknown Action", + "Direct Transaction": "Direct Transaction", + "Recurring Transaction": "Recurring Transaction", + "Entity Transaction": "Entity Transaction", + "Scheduled Transaction": "Scheduled Transaction", + "Unknown Type (%s)": "Unknown Type (%s)", + "What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.": "What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.", + "What is the full model name. eg: App\\Models\\Order ? [Q] to quit.": "What is the full model name. eg: App\\Models\\Order ? [Q] to quit.", + "What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.": "What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.", + "Unsupported argument provided: \"%s\"": "Unsupported argument provided: \"%s\"", + "The authorization token can\\'t be changed manually.": "The authorization token can\\'t be changed manually.", + "Translation process is complete for the module %s !": "Translation process is complete for the module %s !", + "%s migration(s) has been deleted.": "%s migration(s) has been deleted.", + "The command has been created for the module \"%s\"!": "The command has been created for the module \"%s\"!", + "The controller has been created for the module \"%s\"!": "The controller has been created for the module \"%s\"!", + "The event has been created at the following path \"%s\"!": "The event has been created at the following path \"%s\"!", + "The listener has been created on the path \"%s\"!": "The listener has been created on the path \"%s\"!", + "A request with the same name has been found !": "A request with the same name has been found !", + "Unable to find a module having the identifier \"%s\".": "Unable to find a module having the identifier \"%s\".", + "Unsupported reset mode.": "Unsupported reset mode.", + "You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.": "You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.", + "Unable to find a module having \"%s\" as namespace.": "Unable to find a module having \"%s\" as namespace.", + "A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.": "A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.", + "A new form class was created at the path \"%s\"": "A new form class was created at the path \"%s\"", + "Unable to proceed, looks like the database can\\'t be used.": "Unable to proceed, looks like the database can\\'t be used.", + "In which language would you like to install NexoPOS ?": "In which language would you like to install NexoPOS ?", + "You must define the language of installation.": "You must define the language of installation.", + "The value above which the current coupon can\\'t apply.": "The value above which the current coupon can\\'t apply.", + "Unable to save the coupon product as this product doens\\'t exists.": "Unable to save the coupon product as this product doens\\'t exists.", + "Unable to save the coupon category as this category doens\\'t exists.": "Unable to save the coupon category as this category doens\\'t exists.", + "Unable to save the coupon as this category doens\\'t exists.": "Unable to save the coupon as this category doens\\'t exists.", + "You\\re not allowed to do that.": "You\\re not allowed to do that.", + "Crediting (Add)": "Crediting (Add)", + "Refund (Add)": "Refund (Add)", + "Deducting (Remove)": "Deducting (Remove)", + "Payment (Remove)": "Payment (Remove)", + "The assigned default customer group doesn\\'t exist or is not defined.": "The assigned default customer group doesn\\'t exist or is not defined.", + "Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0": "Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0", + "You\\'re not allowed to do this operation": "You\\'re not allowed to do this operation", + "If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.": "If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.", + "Convert Unit": "Convert Unit", + "The unit that is selected for convertion by default.": "The unit that is selected for convertion by default.", + "COGS": "COGS", + "Used to define the Cost of Goods Sold.": "Used to define the Cost of Goods Sold.", + "Visible": "Visible", + "Define whether the unit is available for sale.": "Define whether the unit is available for sale.", + "Product unique name. If it\\' variation, it should be relevant for that variation": "Product unique name. If it\\' variation, it should be relevant for that variation", + "The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.": "The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.", + "The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.": "The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.", + "Auto COGS": "Auto COGS", + "Unknown Type: %s": "Unknown Type: %s", + "Shortage": "Shortage", + "Overage": "Overage", + "Transactions List": "Transactions List", + "Display all transactions.": "Display all transactions.", + "No transactions has been registered": "No transactions has been registered", + "Add a new transaction": "Add a new transaction", + "Create a new transaction": "Create a new transaction", + "Register a new transaction and save it.": "Register a new transaction and save it.", + "Edit transaction": "Edit transaction", + "Modify Transaction.": "Modify Transaction.", + "Return to Transactions": "Return to Transactions", + "determine if the transaction is effective or not. Work for recurring and not recurring transactions.": "determine if the transaction is effective or not. Work for recurring and not recurring transactions.", + "Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.": "Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.", + "Transaction Account": "Transaction Account", + "Assign the transaction to an account430": "Assign the transaction to an account430", + "Is the value or the cost of the transaction.": "Is the value or the cost of the transaction.", + "If set to Yes, the transaction will trigger on defined occurrence.": "If set to Yes, the transaction will trigger on defined occurrence.", + "Define how often this transaction occurs": "Define how often this transaction occurs", + "Define what is the type of the transactions.": "Define what is the type of the transactions.", + "Trigger": "Trigger", + "Would you like to trigger this expense now?": "Would you like to trigger this expense now?", + "Transactions History List": "Transactions History List", + "Display all transaction history.": "Display all transaction history.", + "No transaction history has been registered": "No transaction history has been registered", + "Add a new transaction history": "Add a new transaction history", + "Create a new transaction history": "Create a new transaction history", + "Register a new transaction history and save it.": "Register a new transaction history and save it.", + "Edit transaction history": "Edit transaction history", + "Modify Transactions history.": "Modify Transactions history.", + "Return to Transactions History": "Return to Transactions History", + "Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.": "Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.", + "Set the limit that can\\'t be exceeded by the user.": "Set the limit that can\\'t be exceeded by the user.", + "Oops, We\\'re Sorry!!!": "Oops, We\\'re Sorry!!!", + "Class: %s": "Class: %s", + "There\\'s is mismatch with the core version.": "There\\'s is mismatch with the core version.", + "You\\'re not authenticated.": "You\\'re not authenticated.", + "An error occured while performing your request.": "An error occured while performing your request.", + "A mismatch has occured between a module and it\\'s dependency.": "A mismatch has occured between a module and it\\'s dependency.", + "You\\'re not allowed to see that page.": "You\\'re not allowed to see that page.", + "Post Too Large": "Post Too Large", + "The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini": "The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini", + "This field does\\'nt have a valid value.": "This field does\\'nt have a valid value.", + "Describe the direct transaction.": "Describe the direct transaction.", + "If set to yes, the transaction will take effect immediately and be saved on the history.": "If set to yes, the transaction will take effect immediately and be saved on the history.", + "Assign the transaction to an account.": "Assign the transaction to an account.", + "set the value of the transaction.": "set the value of the transaction.", + "Further details on the transaction.": "Further details on the transaction.", + "Describe the direct transactions.": "Describe the direct transactions.", + "set the value of the transactions.": "set the value of the transactions.", + "The transactions will be multipled by the number of user having that role.": "The transactions will be multipled by the number of user having that role.", + "Create Sales (needs Procurements)": "Create Sales (needs Procurements)", + "Set when the transaction should be executed.": "Set when the transaction should be executed.", + "The addresses were successfully updated.": "The addresses were successfully updated.", + "Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.": "Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.", + "The register doesn\\'t have an history.": "The register doesn\\'t have an history.", + "Unable to check a register session history if it\\'s closed.": "Unable to check a register session history if it\\'s closed.", + "Register History For : %s": "Register History For : %s", + "Can\\'t delete a category having sub categories linked to it.": "Can\\'t delete a category having sub categories linked to it.", + "Unable to proceed. The request doesn\\'t provide enough data which could be handled": "Unable to proceed. The request doesn\\'t provide enough data which could be handled", + "Unable to load the CRUD resource : %s.": "Unable to load the CRUD resource : %s.", + "Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods": "Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods", + "The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.": "The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.", + "The crud columns exceed the maximum column that can be exported (27)": "The crud columns exceed the maximum column that can be exported (27)", + "This link has expired.": "This link has expired.", + "Account History : %s": "Account History : %s", + "Welcome — %s": "Welcome — %s", + "Upload and manage medias (photos).": "Upload and manage medias (photos).", + "The product which id is %s doesnt\\'t belong to the procurement which id is %s": "The product which id is %s doesnt\\'t belong to the procurement which id is %s", + "The refresh process has started. You\\'ll get informed once it\\'s complete.": "The refresh process has started. You\\'ll get informed once it\\'s complete.", + "The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".": "The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".", + "Stock History For %s": "Stock History For %s", + "Set": "Set", + "The unit is not set for the product \"%s\".": "The unit is not set for the product \"%s\".", + "The operation will cause a negative stock for the product \"%s\" (%s).": "The operation will cause a negative stock for the product \"%s\" (%s).", + "The adjustment quantity can\\'t be negative for the product \"%s\" (%s)": "The adjustment quantity can\\'t be negative for the product \"%s\" (%s)", + "%s\\'s Products": "%s\\'s Products", + "Transactions Report": "Transactions Report", + "Combined Report": "Combined Report", + "Provides a combined report for every transactions on products.": "Provides a combined report for every transactions on products.", + "Unable to initiallize the settings page. The identifier \"' . $identifier . '": "Unable to initiallize the settings page. The identifier \"' . $identifier . '", + "Shows all histories generated by the transaction.": "Shows all histories generated by the transaction.", + "Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.": "Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.", + "Create New Transaction": "Create New Transaction", + "Set direct, scheduled transactions.": "Set direct, scheduled transactions.", + "Update Transaction": "Update Transaction", + "The provided data aren\\'t valid": "The provided data aren\\'t valid", + "Welcome — NexoPOS": "Welcome — NexoPOS", + "You\\'re not allowed to see this page.": "You\\'re not allowed to see this page.", + "Your don\\'t have enough permission to perform this action.": "Your don\\'t have enough permission to perform this action.", + "You don\\'t have the necessary role to see this page.": "You don\\'t have the necessary role to see this page.", + "%s product(s) has low stock. Reorder those product(s) before it get exhausted.": "%s product(s) has low stock. Reorder those product(s) before it get exhausted.", + "Scheduled Transactions": "Scheduled Transactions", + "the transaction \"%s\" was executed as scheduled on %s.": "the transaction \"%s\" was executed as scheduled on %s.", + "Workers Aren\\'t Running": "Workers Aren\\'t Running", + "The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.": "The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.", + "Unable to remove the permissions \"%s\". It doesn\\'t exists.": "Unable to remove the permissions \"%s\". It doesn\\'t exists.", + "Unable to open \"%s\" *, as it\\'s not closed.": "Unable to open \"%s\" *, as it\\'s not closed.", + "Unable to open \"%s\" *, as it\\'s not opened.": "Unable to open \"%s\" *, as it\\'s not opened.", + "Unable to cashing on \"%s\" *, as it\\'s not opened.": "Unable to cashing on \"%s\" *, as it\\'s not opened.", + "Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.": "Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.", + "Unable to cashout on \"%s": "Unable to cashout on \"%s", + "Symbolic Links Missing": "Symbolic Links Missing", + "The Symbolic Links to the public directory is missing. Your medias might be broken and not display.": "The Symbolic Links to the public directory is missing. Your medias might be broken and not display.", + "Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.": "Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.", + "The requested module %s cannot be found.": "The requested module %s cannot be found.", + "The manifest.json can\\'t be located inside the module %s on the path: %s": "The manifest.json can\\'t be located inside the module %s on the path: %s", + "the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.": "the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.", + "Sorting is explicitely disabled for the column \"%s\".": "Sorting is explicitely disabled for the column \"%s\".", + "Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s": "Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s", + "Unable to find the customer using the provided id %s.": "Unable to find the customer using the provided id %s.", + "Not enough credits on the customer account. Requested : %s, Remaining: %s.": "Not enough credits on the customer account. Requested : %s, Remaining: %s.", + "The customer account doesn\\'t have enough funds to proceed.": "The customer account doesn\\'t have enough funds to proceed.", + "Unable to find a reference to the attached coupon : %s": "Unable to find a reference to the attached coupon : %s", + "You\\'re not allowed to use this coupon as it\\'s no longer active": "You\\'re not allowed to use this coupon as it\\'s no longer active", + "You\\'re not allowed to use this coupon it has reached the maximum usage allowed.": "You\\'re not allowed to use this coupon it has reached the maximum usage allowed.", + "Terminal A": "Terminal A", + "Terminal B": "Terminal B", + "%s link were deleted": "%s link were deleted", + "Unable to execute the following class callback string : %s": "Unable to execute the following class callback string : %s", + "%s — %s": "%s — %s", + "Transactions": "Transactions", + "Create Transaction": "Create Transaction", + "Stock History": "Stock History", + "Invoices": "Invoices", + "Failed to parse the configuration file on the following path \"%s\"": "Failed to parse the configuration file on the following path \"%s\"", + "No config.xml has been found on the directory : %s. This folder is ignored": "No config.xml has been found on the directory : %s. This folder is ignored", + "The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ": "The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ", + "Unable to upload this module as it\\'s older than the version installed": "Unable to upload this module as it\\'s older than the version installed", + "The migration file doens\\'t have a valid class name. Expected class : %s": "The migration file doens\\'t have a valid class name. Expected class : %s", + "Unable to locate the following file : %s": "Unable to locate the following file : %s", + "The migration file doens\\'t have a valid method name. Expected method : %s": "The migration file doens\\'t have a valid method name. Expected method : %s", + "The module %s cannot be enabled as his dependency (%s) is missing or not enabled.": "The module %s cannot be enabled as his dependency (%s) is missing or not enabled.", + "The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.": "The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.", + "An Error Occurred \"%s\": %s": "An Error Occurred \"%s\": %s", + "The order has been updated": "The order has been updated", + "The minimal payment of %s has\\'nt been provided.": "The minimal payment of %s has\\'nt been provided.", + "Unable to proceed as the order is already paid.": "Unable to proceed as the order is already paid.", + "The customer account funds are\\'nt enough to process the payment.": "The customer account funds are\\'nt enough to process the payment.", + "Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.": "Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.", + "Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.": "Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.", + "By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.": "By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.", + "You\\'re not allowed to make payments.": "You\\'re not allowed to make payments.", + "Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s": "Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s", + "Unknown Status (%s)": "Unknown Status (%s)", + "%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.": "%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.", + "Unable to find a reference of the provided coupon : %s": "Unable to find a reference of the provided coupon : %s", + "The procurement has been deleted. %s included stock record(s) has been deleted as well.": "The procurement has been deleted. %s included stock record(s) has been deleted as well.", + "Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.": "Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.", + "Unable to find the product using the provided id \"%s\"": "Unable to find the product using the provided id \"%s\"", + "Unable to procure the product \"%s\" as the stock management is disabled.": "Unable to procure the product \"%s\" as the stock management is disabled.", + "Unable to procure the product \"%s\" as it is a grouped product.": "Unable to procure the product \"%s\" as it is a grouped product.", + "The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item": "The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item", + "%s procurement(s) has recently been automatically procured.": "%s procurement(s) has recently been automatically procured.", + "The requested category doesn\\'t exists": "The requested category doesn\\'t exists", + "The category to which the product is attached doesn\\'t exists or has been deleted": "The category to which the product is attached doesn\\'t exists or has been deleted", + "Unable to create a product with an unknow type : %s": "Unable to create a product with an unknow type : %s", + "A variation within the product has a barcode which is already in use : %s.": "A variation within the product has a barcode which is already in use : %s.", + "A variation within the product has a SKU which is already in use : %s": "A variation within the product has a SKU which is already in use : %s", + "Unable to edit a product with an unknown type : %s": "Unable to edit a product with an unknown type : %s", + "The requested sub item doesn\\'t exists.": "The requested sub item doesn\\'t exists.", + "One of the provided product variation doesn\\'t include an identifier.": "One of the provided product variation doesn\\'t include an identifier.", + "The product\\'s unit quantity has been updated.": "The product\\'s unit quantity has been updated.", + "Unable to reset this variable product \"%s": "Unable to reset this variable product \"%s", + "Adjusting grouped product inventory must result of a create, update, delete sale operation.": "Adjusting grouped product inventory must result of a create, update, delete sale operation.", + "Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).": "Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).", + "Unsupported stock action \"%s\"": "Unsupported stock action \"%s\"", + "%s product(s) has been deleted.": "%s product(s) has been deleted.", + "%s products(s) has been deleted.": "%s products(s) has been deleted.", + "Unable to find the product, as the argument \"%s\" which value is \"%s": "Unable to find the product, as the argument \"%s\" which value is \"%s", + "You cannot convert unit on a product having stock management disabled.": "You cannot convert unit on a product having stock management disabled.", + "The source and the destination unit can\\'t be the same. What are you trying to do ?": "The source and the destination unit can\\'t be the same. What are you trying to do ?", + "There is no source unit quantity having the name \"%s\" for the item %s": "There is no source unit quantity having the name \"%s\" for the item %s", + "There is no destination unit quantity having the name %s for the item %s": "There is no destination unit quantity having the name %s for the item %s", + "The source unit and the destination unit doens\\'t belong to the same unit group.": "The source unit and the destination unit doens\\'t belong to the same unit group.", + "The group %s has no base unit defined": "The group %s has no base unit defined", + "The conversion of %s(%s) to %s(%s) was successful": "The conversion of %s(%s) to %s(%s) was successful", + "The product has been deleted.": "The product has been deleted.", + "An error occurred: %s.": "An error occurred: %s.", + "A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.": "A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.", + "Today\\'s Orders": "Today\\'s Orders", + "Today\\'s Sales": "Today\\'s Sales", + "Today\\'s Refunds": "Today\\'s Refunds", + "Today\\'s Customers": "Today\\'s Customers", + "The report will be generated. Try loading the report within few minutes.": "The report will be generated. Try loading the report within few minutes.", + "The database has been wiped out.": "The database has been wiped out.", + "No custom handler for the reset \"' . $mode . '\"": "No custom handler for the reset \"' . $mode . '\"", + "Unable to proceed. The parent tax doesn\\'t exists.": "Unable to proceed. The parent tax doesn\\'t exists.", + "A simple tax must not be assigned to a parent tax with the type \"simple": "A simple tax must not be assigned to a parent tax with the type \"simple", + "Created via tests": "Created via tests", + "The transaction has been successfully saved.": "The transaction has been successfully saved.", + "The transaction has been successfully updated.": "The transaction has been successfully updated.", + "Unable to find the transaction using the provided identifier.": "Unable to find the transaction using the provided identifier.", + "Unable to find the requested transaction using the provided id.": "Unable to find the requested transaction using the provided id.", + "The transction has been correctly deleted.": "The transction has been correctly deleted.", + "You cannot delete an account which has transactions bound.": "You cannot delete an account which has transactions bound.", + "The transaction account has been deleted.": "The transaction account has been deleted.", + "Unable to find the transaction account using the provided ID.": "Unable to find the transaction account using the provided ID.", + "The transaction account has been updated.": "The transaction account has been updated.", + "This transaction type can\\'t be triggered.": "This transaction type can\\'t be triggered.", + "The transaction has been successfully triggered.": "The transaction has been successfully triggered.", + "The transaction \"%s\" has been processed on day \"%s\".": "The transaction \"%s\" has been processed on day \"%s\".", + "The transaction \"%s\" has already been processed.": "The transaction \"%s\" has already been processed.", + "The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.": "The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.", + "The process has been correctly executed and all transactions has been processed.": "The process has been correctly executed and all transactions has been processed.", + "The process has been executed with some failures. %s\/%s process(es) has successed.": "The process has been executed with some failures. %s\/%s process(es) has successed.", + "Procurement : %s": "Procurement : %s", + "Procurement Liability : %s": "Procurement Liability : %s", + "Refunding : %s": "Refunding : %s", + "Spoiled Good : %s": "Spoiled Good : %s", + "Sale : %s": "Sale : %s", + "Liabilities Account": "Liabilities Account", + "Not found account type: %s": "Not found account type: %s", + "Refund : %s": "Refund : %s", + "Customer Account Crediting : %s": "Customer Account Crediting : %s", + "Customer Account Purchase : %s": "Customer Account Purchase : %s", + "Customer Account Deducting : %s": "Customer Account Deducting : %s", + "Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.": "Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.", + "The unit group %s doesn\\'t have a base unit": "The unit group %s doesn\\'t have a base unit", + "The system role \"Users\" can be retrieved.": "The system role \"Users\" can be retrieved.", + "The default role that must be assigned to new users cannot be retrieved.": "The default role that must be assigned to new users cannot be retrieved.", + "%s Second(s)": "%s Second(s)", + "Configure the accounting feature": "Configure the accounting feature", + "Define the symbol that indicate thousand. By default ": "Define the symbol that indicate thousand. By default ", + "Date Time Format": "Date Time Format", + "This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".": "This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".", + "Date TimeZone": "Date TimeZone", + "Determine the default timezone of the store. Current Time: %s": "Determine the default timezone of the store. Current Time: %s", + "Configure how invoice and receipts are used.": "Configure how invoice and receipts are used.", + "configure settings that applies to orders.": "configure settings that applies to orders.", + "Report Settings": "Report Settings", + "Configure the settings": "Configure the settings", + "Wipes and Reset the database.": "Wipes and Reset the database.", + "Supply Delivery": "Supply Delivery", + "Configure the delivery feature.": "Configure the delivery feature.", + "Configure how background operations works.": "Configure how background operations works.", + "Every procurement will be added to the selected transaction account": "Every procurement will be added to the selected transaction account", + "Every sales will be added to the selected transaction account": "Every sales will be added to the selected transaction account", + "Customer Credit Account (crediting)": "Customer Credit Account (crediting)", + "Every customer credit will be added to the selected transaction account": "Every customer credit will be added to the selected transaction account", + "Customer Credit Account (debitting)": "Customer Credit Account (debitting)", + "Every customer credit removed will be added to the selected transaction account": "Every customer credit removed will be added to the selected transaction account", + "Sales refunds will be attached to this transaction account": "Sales refunds will be attached to this transaction account", + "Stock Return Account (Spoiled Items)": "Stock Return Account (Spoiled Items)", + "Disbursement (cash register)": "Disbursement (cash register)", + "Transaction account for all cash disbursement.": "Transaction account for all cash disbursement.", + "Liabilities": "Liabilities", + "Transaction account for all liabilities.": "Transaction account for all liabilities.", + "You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.": "You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.", + "Show Tax Breakdown": "Show Tax Breakdown", + "Will display the tax breakdown on the receipt\/invoice.": "Will display the tax breakdown on the receipt\/invoice.", + "Available tags : ": "Available tags : ", + "{store_name}: displays the store name.": "{store_name}: displays the store name.", + "{store_email}: displays the store email.": "{store_email}: displays the store email.", + "{store_phone}: displays the store phone number.": "{store_phone}: displays the store phone number.", + "{cashier_name}: displays the cashier name.": "{cashier_name}: displays the cashier name.", + "{cashier_id}: displays the cashier id.": "{cashier_id}: displays the cashier id.", + "{order_code}: displays the order code.": "{order_code}: displays the order code.", + "{order_date}: displays the order date.": "{order_date}: displays the order date.", + "{order_type}: displays the order type.": "{order_type}: displays the order type.", + "{customer_email}: displays the customer email.": "{customer_email}: displays the customer email.", + "{shipping_first_name}: displays the shipping first name.": "{shipping_first_name}: displays the shipping first name.", + "{shipping_last_name}: displays the shipping last name.": "{shipping_last_name}: displays the shipping last name.", + "{shipping_phone}: displays the shipping phone.": "{shipping_phone}: displays the shipping phone.", + "{shipping_address_1}: displays the shipping address_1.": "{shipping_address_1}: displays the shipping address_1.", + "{shipping_address_2}: displays the shipping address_2.": "{shipping_address_2}: displays the shipping address_2.", + "{shipping_country}: displays the shipping country.": "{shipping_country}: displays the shipping country.", + "{shipping_city}: displays the shipping city.": "{shipping_city}: displays the shipping city.", + "{shipping_pobox}: displays the shipping pobox.": "{shipping_pobox}: displays the shipping pobox.", + "{shipping_company}: displays the shipping company.": "{shipping_company}: displays the shipping company.", + "{shipping_email}: displays the shipping email.": "{shipping_email}: displays the shipping email.", + "{billing_first_name}: displays the billing first name.": "{billing_first_name}: displays the billing first name.", + "{billing_last_name}: displays the billing last name.": "{billing_last_name}: displays the billing last name.", + "{billing_phone}: displays the billing phone.": "{billing_phone}: displays the billing phone.", + "{billing_address_1}: displays the billing address_1.": "{billing_address_1}: displays the billing address_1.", + "{billing_address_2}: displays the billing address_2.": "{billing_address_2}: displays the billing address_2.", + "{billing_country}: displays the billing country.": "{billing_country}: displays the billing country.", + "{billing_city}: displays the billing city.": "{billing_city}: displays the billing city.", + "{billing_pobox}: displays the billing pobox.": "{billing_pobox}: displays the billing pobox.", + "{billing_company}: displays the billing company.": "{billing_company}: displays the billing company.", + "{billing_email}: displays the billing email.": "{billing_email}: displays the billing email.", + "Available tags :": "Available tags :", + "Quick Product Default Unit": "Quick Product Default Unit", + "Set what unit is assigned by default to all quick product.": "Set what unit is assigned by default to all quick product.", + "Hide Exhausted Products": "Hide Exhausted Products", + "Will hide exhausted products from selection on the POS.": "Will hide exhausted products from selection on the POS.", + "Hide Empty Category": "Hide Empty Category", + "Category with no or exhausted products will be hidden from selection.": "Category with no or exhausted products will be hidden from selection.", + "Default Printing (web)": "Default Printing (web)", + "The amount numbers shortcuts separated with a \"|\".": "The amount numbers shortcuts separated with a \"|\".", + "No submit URL was provided": "No submit URL was provided", + "Sorting is explicitely disabled on this column": "Sorting is explicitely disabled on this column", + "An unpexpected error occured while using the widget.": "An unpexpected error occured while using the widget.", + "This field must be similar to \"{other}\"\"": "This field must be similar to \"{other}\"\"", + "This field must have at least \"{length}\" characters\"": "This field must have at least \"{length}\" characters\"", + "This field must have at most \"{length}\" characters\"": "This field must have at most \"{length}\" characters\"", + "This field must be different from \"{other}\"\"": "This field must be different from \"{other}\"\"", + "Search result": "Search result", + "Choose...": "Choose...", + "The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.": "The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.", + "+{count} other": "+{count} other", + "The selected print gateway doesn't support this type of printing.": "The selected print gateway doesn't support this type of printing.", + "millisecond| second| minute| hour| day| week| month| year| decade| century| millennium": "millisecond| second| minute| hour| day| week| month| year| decade| century| millennium", + "milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia": "milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia", + "An error occured": "An error occured", + "You\\'re about to delete selected resources. Would you like to proceed?": "You\\'re about to delete selected resources. Would you like to proceed?", + "See Error": "See Error", + "Your uploaded files will displays here.": "Your uploaded files will displays here.", + "Nothing to care about !": "Nothing to care about !", + "Would you like to bulk edit a system role ?": "Would you like to bulk edit a system role ?", + "Total :": "Total :", + "Remaining :": "Remaining :", + "Instalments:": "Instalments:", + "This instalment doesn\\'t have any payment attached.": "This instalment doesn\\'t have any payment attached.", + "You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?": "You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?", + "An error has occured while seleting the payment gateway.": "An error has occured while seleting the payment gateway.", + "You're not allowed to add a discount on the product.": "You're not allowed to add a discount on the product.", + "You're not allowed to add a discount on the cart.": "You're not allowed to add a discount on the cart.", + "Cash Register : {register}": "Cash Register : {register}", + "The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?": "The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?", + "You don't have the right to edit the purchase price.": "You don't have the right to edit the purchase price.", + "Dynamic product can\\'t have their price updated.": "Dynamic product can\\'t have their price updated.", + "You\\'re not allowed to edit the order settings.": "You\\'re not allowed to edit the order settings.", + "Looks like there is either no products and no categories. How about creating those first to get started ?": "Looks like there is either no products and no categories. How about creating those first to get started ?", + "Create Categories": "Create Categories", + "You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?": "You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?", + "An unexpected error has occured while loading the form. Please check the log or contact the support.": "An unexpected error has occured while loading the form. Please check the log or contact the support.", + "We were not able to load the units. Make sure there are units attached on the unit group selected.": "We were not able to load the units. Make sure there are units attached on the unit group selected.", + "The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?": "The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?", + "There shoulnd\\'t be more option than there are units.": "There shoulnd\\'t be more option than there are units.", + "Either Selling or Purchase unit isn\\'t defined. Unable to proceed.": "Either Selling or Purchase unit isn\\'t defined. Unable to proceed.", + "Select the procured unit first before selecting the conversion unit.": "Select the procured unit first before selecting the conversion unit.", + "Convert to unit": "Convert to unit", + "An unexpected error has occured": "An unexpected error has occured", + "Unable to add product which doesn\\'t unit quantities defined.": "Unable to add product which doesn\\'t unit quantities defined.", + "{product}: Purchase Unit": "{product}: Purchase Unit", + "The product will be procured on that unit.": "The product will be procured on that unit.", + "Unkown Unit": "Unkown Unit", + "Choose Tax": "Choose Tax", + "The tax will be assigned to the procured product.": "The tax will be assigned to the procured product.", + "Show Details": "Show Details", + "Hide Details": "Hide Details", + "Important Notes": "Important Notes", + "Stock Management Products.": "Stock Management Products.", + "Doesn\\'t work with Grouped Product.": "Doesn\\'t work with Grouped Product.", + "Convert": "Convert", + "Looks like no valid products matched the searched term.": "Looks like no valid products matched the searched term.", + "This product doesn't have any stock to adjust.": "This product doesn't have any stock to adjust.", + "Select Unit": "Select Unit", + "Select the unit that you want to adjust the stock with.": "Select the unit that you want to adjust the stock with.", + "A similar product with the same unit already exists.": "A similar product with the same unit already exists.", + "Select Procurement": "Select Procurement", + "Select the procurement that you want to adjust the stock with.": "Select the procurement that you want to adjust the stock with.", + "Select Action": "Select Action", + "Select the action that you want to perform on the stock.": "Select the action that you want to perform on the stock.", + "Would you like to remove the selected products from the table ?": "Would you like to remove the selected products from the table ?", + "Unit:": "Unit:", + "Operation:": "Operation:", + "Procurement:": "Procurement:", + "Reason:": "Reason:", + "Provided": "Provided", + "Not Provided": "Not Provided", + "Remove Selected": "Remove Selected", + "Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.": "Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.", + "You haven\\'t yet generated any token for your account. Create one to get started.": "You haven\\'t yet generated any token for your account. Create one to get started.", + "You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?": "You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?", + "Date Range : {date1} - {date2}": "Date Range : {date1} - {date2}", + "Document : Best Products": "Document : Best Products", + "By : {user}": "By : {user}", + "Range : {date1} — {date2}": "Range : {date1} — {date2}", + "Document : Sale By Payment": "Document : Sale By Payment", + "Document : Customer Statement": "Document : Customer Statement", + "Customer : {selectedCustomerName}": "Customer : {selectedCustomerName}", + "All Categories": "All Categories", + "All Units": "All Units", + "Date : {date}": "Date : {date}", + "Document : {reportTypeName}": "Document : {reportTypeName}", + "Threshold": "Threshold", + "Select Units": "Select Units", + "An error has occured while loading the units.": "An error has occured while loading the units.", + "An error has occured while loading the categories.": "An error has occured while loading the categories.", + "Document : Payment Type": "Document : Payment Type", + "Document : Profit Report": "Document : Profit Report", + "Filter by Category": "Filter by Category", + "Filter by Units": "Filter by Units", + "An error has occured while loading the categories": "An error has occured while loading the categories", + "An error has occured while loading the units": "An error has occured while loading the units", + "By Type": "By Type", + "By User": "By User", + "By Category": "By Category", + "All Category": "All Category", + "Document : Sale Report": "Document : Sale Report", + "Filter By Category": "Filter By Category", + "Allow you to choose the category.": "Allow you to choose the category.", + "No category was found for proceeding the filtering.": "No category was found for proceeding the filtering.", + "Document : Sold Stock Report": "Document : Sold Stock Report", + "Filter by Unit": "Filter by Unit", + "Limit Results By Categories": "Limit Results By Categories", + "Limit Results By Units": "Limit Results By Units", + "Generate Report": "Generate Report", + "Document : Combined Products History": "Document : Combined Products History", + "Ini. Qty": "Ini. Qty", + "Added Quantity": "Added Quantity", + "Add. Qty": "Add. Qty", + "Sold Quantity": "Sold Quantity", + "Sold Qty": "Sold Qty", + "Defective Quantity": "Defective Quantity", + "Defec. Qty": "Defec. Qty", + "Final Quantity": "Final Quantity", + "Final Qty": "Final Qty", + "No data available": "No data available", + "Document : Yearly Report": "Document : Yearly Report", + "The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.": "The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.", + "Unable to edit this transaction": "Unable to edit this transaction", + "This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.": "This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.", + "Save Transaction": "Save Transaction", + "While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.": "While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.", + "The transaction is about to be saved. Would you like to confirm your action ?": "The transaction is about to be saved. Would you like to confirm your action ?", + "Unable to load the transaction": "Unable to load the transaction", + "You cannot edit this transaction if NexoPOS cannot perform background requests.": "You cannot edit this transaction if NexoPOS cannot perform background requests.", + "MySQL is selected as database driver": "MySQL is selected as database driver", + "Please provide the credentials to ensure NexoPOS can connect to the database.": "Please provide the credentials to ensure NexoPOS can connect to the database.", + "Sqlite is selected as database driver": "Sqlite is selected as database driver", + "Make sure Sqlite module is available for PHP. Your database will be located on the database directory.": "Make sure Sqlite module is available for PHP. Your database will be located on the database directory.", + "Checking database connectivity...": "Checking database connectivity...", + "Driver": "Driver", + "Set the database driver": "Set the database driver", + "Hostname": "Hostname", + "Provide the database hostname": "Provide the database hostname", + "Username required to connect to the database.": "Username required to connect to the database.", + "The username password required to connect.": "The username password required to connect.", + "Database Name": "Database Name", + "Provide the database name. Leave empty to use default file for SQLite Driver.": "Provide the database name. Leave empty to use default file for SQLite Driver.", + "Database Prefix": "Database Prefix", + "Provide the database prefix.": "Provide the database prefix.", + "Port": "Port", + "Provide the hostname port.": "Provide the hostname port.", + "NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.": "NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.", + "Install": "Install", + "Application": "Application", + "That is the application name.": "That is the application name.", + "Provide the administrator username.": "Provide the administrator username.", + "Provide the administrator email.": "Provide the administrator email.", + "What should be the password required for authentication.": "What should be the password required for authentication.", + "Should be the same as the password above.": "Should be the same as the password above.", + "Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.": "Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.", + "Choose your language to get started.": "Choose your language to get started.", + "Remaining Steps": "Remaining Steps", + "Database Configuration": "Database Configuration", + "Application Configuration": "Application Configuration", + "Language Selection": "Language Selection", + "Select what will be the default language of NexoPOS.": "Select what will be the default language of NexoPOS.", + "In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.": "In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.", + "Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.": "Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.", + "Please report this message to the support : ": "Please report this message to the support : ", + "No refunds made so far. Good news right?": "No refunds made so far. Good news right?", + "Open Register : %s": "Open Register : %s", + "Loading Coupon For : ": "Loading Coupon For : ", + "This coupon requires products that aren\\'t available on the cart at the moment.": "This coupon requires products that aren\\'t available on the cart at the moment.", + "This coupon requires products that belongs to specific categories that aren\\'t included at the moment.": "This coupon requires products that belongs to specific categories that aren\\'t included at the moment.", + "Too many results.": "Too many results.", + "New Customer": "New Customer", + "Purchases": "Purchases", + "Owed": "Owed", + "Usage :": "Usage :", + "Code :": "Code :", + "Order Reference": "Order Reference", + "The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?": "The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?", + "{product} : Units": "{product} : Units", + "This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.": "This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.", + "Previewing :": "Previewing :", + "Search for options": "Search for options", + "The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.": "The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.", + "The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.": "The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.", + "The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.": "The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.", + "The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.": "The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.", + "Invalid Error Message": "Invalid Error Message", + "Unamed Settings Page": "Unamed Settings Page", + "Description of unamed setting page": "Description of unamed setting page", + "Text Field": "Text Field", + "This is a sample text field.": "This is a sample text field.", + "No description has been provided.": "No description has been provided.", + "You\\'re using NexoPOS %s<\/a>": "You\\'re using NexoPOS %s<\/a>", + "If you haven\\'t asked this, please get in touch with the administrators.": "If you haven\\'t asked this, please get in touch with the administrators.", + "A new user has registered to your store (%s) with the email %s.": "A new user has registered to your store (%s) with the email %s.", + "The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.": "The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.", + "Note: ": "Note: ", + "Inclusive Product Taxes": "Inclusive Product Taxes", + "Exclusive Product Taxes": "Exclusive Product Taxes", + "Condition:": "Condition:", + "Date : %s": "Date : %s", + "NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.": "NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.", + "Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.": "Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.", + "Retry": "Retry", + "If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.": "If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.", + "Compute Products": "Compute Products", + "Unammed Section": "Unammed Section", + "%s order(s) has recently been deleted as they have expired.": "%s order(s) has recently been deleted as they have expired.", + "%s products will be updated": "%s products will be updated", + "Procurement %s": "Procurement %s", + "You cannot assign the same unit to more than one selling unit.": "You cannot assign the same unit to more than one selling unit.", + "The quantity to convert can\\'t be zero.": "The quantity to convert can\\'t be zero.", + "The source unit \"(%s)\" for the product \"%s": "The source unit \"(%s)\" for the product \"%s", + "The conversion from \"%s\" will cause a decimal value less than one count of the destination unit \"%s\".": "The conversion from \"%s\" will cause a decimal value less than one count of the destination unit \"%s\".", + "{customer_first_name}: displays the customer first name.": "{customer_first_name}: displays the customer first name.", + "{customer_last_name}: displays the customer last name.": "{customer_last_name}: displays the customer last name.", + "No Unit Selected": "No Unit Selected", + "Unit Conversion : {product}": "Unit Conversion : {product}", + "Convert {quantity} available": "Convert {quantity} available", + "The quantity should be greater than 0": "The quantity should be greater than 0", + "The provided quantity can\\'t result in any convertion for unit \"{destination}\"": "The provided quantity can\\'t result in any convertion for unit \"{destination}\"", + "Conversion Warning": "Conversion Warning", + "Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?": "Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?", + "Confirm Conversion": "Confirm Conversion", + "You\\'re about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?": "You\\'re about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?", + "Conversion Successful": "Conversion Successful", + "The product {product} has been converted successfully.": "The product {product} has been converted successfully.", + "An error occured while converting the product {product}": "An error occured while converting the product {product}", + "The quantity has been set to the maximum available": "The quantity has been set to the maximum available", + "The product {product} has no base unit": "The product {product} has no base unit", + "Developper Section": "Developper Section", + "The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?": "The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?", + "An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s": "An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s" +} \ No newline at end of file diff --git a/lang/tr.json b/lang/tr.json index 6be116e4a..50d3af3e9 100644 --- a/lang/tr.json +++ b/lang/tr.json @@ -1 +1 @@ -{"displaying {perPage} on {items} items":"{items} \u00f6\u011fede {perPage} g\u00f6steriliyor","The document has been generated.":"Belge olu\u015fturuldu.","Unexpected error occurred.":"Beklenmeyen bir hata olu\u015ftu.","{entries} entries selected":"{entries} giri\u015f se\u00e7ildi","Download":"\u0130ndir","Bulk Actions":"Toplu eylemler","Delivery":"PAKET","Take Away":"GELAL","Unknown Type":"S\u0130PAR\u0130\u015e","Pending":"\u0130\u015flem Bekliyor","Ongoing":"Devam Ediyor","Delivered":"Teslim edilmi\u015f","Unknown Status":"Bilinmeyen Durum","Ready":"Haz\u0131r","Paid":"\u00d6dendi","Hold":"Beklemede","Unpaid":"\u00d6denmedii","Partially Paid":"Taksitli \u00d6denmi\u015f","Save Password":"\u015eifreyi kaydet","Unable to proceed the form is not valid.":"Devam edilemiyor form ge\u00e7erli de\u011fil.","Submit":"G\u00f6nder","Register":"Kay\u0131t Ol","An unexpected error occurred.":"Beklenmeyen bir hata olu\u015ftu.","Best Cashiers":"En \u0130yi Kasiyerler","No result to display.":"G\u00f6r\u00fcnt\u00fclenecek sonu\u00e7 yok.","Well.. nothing to show for the meantime.":"Veri Bulunamad\u0131.","Best Customers":"En \u0130yi M\u00fc\u015fteriler","Well.. nothing to show for the meantime":"Veri Bulunamad\u0131.","Total Sales":"Toplam Sat\u0131\u015f","Today":"Bug\u00fcn","Incomplete Orders":"Eksik Sipari\u015fler","Expenses":"Giderler","Weekly Sales":"Haftal\u0131k Sat\u0131\u015flar","Week Taxes":"Haftal\u0131k Vergiler","Net Income":"Net gelir","Week Expenses":"Haftal\u0131k Giderler","Order":"Sipari\u015f","Clear All":"Hepsini temizle","Save":"Kaydet","Instalments":"Taksitler","Create":"Olu\u015ftur","Add Instalment":"Taksit Ekle","An unexpected error has occurred":"Beklenmeyen bir hata olu\u015ftu","Store Details":"Ma\u011faza Detaylar\u0131","Order Code":"Sipari\u015f Kodu","Cashier":"Kasiyer","Date":"Tarih","Customer":"M\u00fc\u015fteri","Type":"Sipari\u015f T\u00fcr\u00fc","Payment Status":"\u00d6deme Durumu","Delivery Status":"Teslim durumu","Billing Details":"Fatura Detaylar\u0131","Shipping Details":"Nakliye ayr\u0131nt\u0131lar\u0131","Product":"\u00dcr\u00fcn:","Unit Price":"Birim fiyat","Quantity":"Miktar","Discount":"\u0130ndirim","Tax":"Vergi","Total Price":"Toplam fiyat","Expiration Date":"Son kullanma tarihi","Sub Total":"Ara toplam","Coupons":"Kuponlar","Shipping":"Nakliye","Total":"Toplam","Due":"Bor\u00e7","Change":"De\u011fi\u015fiklik","No title is provided":"Ba\u015fl\u0131k verilmedi","SKU":"SKU(Bo\u015f B\u0131rak\u0131labilir)","Barcode":"Barkod (Bo\u015f B\u0131rak\u0131labilir)","The product already exists on the table.":"\u00dcr\u00fcn masada zaten var.","The specified quantity exceed the available quantity.":"Belirtilen miktar mevcut miktar\u0131 a\u015f\u0131yor.","Unable to proceed as the table is empty.":"Masa bo\u015f oldu\u011fu i\u00e7in devam edilemiyor.","More Details":"Daha fazla detay","Useful to describe better what are the reasons that leaded to this adjustment.":"Bu ayarlamaya neden olan sebeplerin neler oldu\u011funu daha iyi anlatmakta fayda var.","Search":"Arama","Unit":"Birim","Operation":"Operasyon","Procurement":"Tedarik","Value":"De\u011fer","Search and add some products":"Baz\u0131 \u00fcr\u00fcnleri aray\u0131n ve ekleyin","Proceed":"Devam et","An unexpected error occurred":"Beklenmeyen bir hata olu\u015ftu","Load Coupon":"Kupon Y\u00fckle","Apply A Coupon":"Kupon Uygula","Load":"Y\u00fckle","Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.":"Sat\u0131\u015f i\u00e7in ge\u00e7erli olmas\u0131 gereken kupon kodunu girin. Bir m\u00fc\u015fteriye kupon verilirse, o m\u00fc\u015fteri \u00f6nceden se\u00e7ilmelidir.","Click here to choose a customer.":"M\u00fc\u015fteri se\u00e7mek i\u00e7in buraya t\u0131klay\u0131n.","Coupon Name":"Kupon Ad\u0131","Usage":"Kullan\u0131m","Unlimited":"S\u0131n\u0131rs\u0131z","Valid From":"Ge\u00e7erli Forum","Valid Till":"Kadar ge\u00e7erli","Categories":"Kategoriler","Products":"\u00dcr\u00fcnler","Active Coupons":"Aktif Kuponlar","Apply":"Uygula","Cancel":"\u0130ptal Et","Coupon Code":"Kupon Kodu","The coupon is out from validity date range.":"Kupon ge\u00e7erlilik tarih aral\u0131\u011f\u0131n\u0131n d\u0131\u015f\u0131nda.","The coupon has applied to the cart.":"Kupon sepete uyguland\u0131.","Percentage":"Y\u00fczde","Flat":"D\u00fcz","The coupon has been loaded.":"Kupon y\u00fcklendi.","Layaway Parameters":"Taksit Parametreleri","Minimum Payment":"Minimum \u00f6deme","Instalments & Payments":"Taksitler ve \u00d6demeler","The final payment date must be the last within the instalments.":"Son \u00f6deme tarihi, taksitler i\u00e7indeki son \u00f6deme tarihi olmal\u0131d\u0131r.","Amount":"Miktar","You must define layaway settings before proceeding.":"Devam etmeden \u00f6nce taksit ayarlar\u0131n\u0131 tan\u0131mlaman\u0131z gerekir.","Please provide instalments before proceeding.":"L\u00fctfen devam etmeden \u00f6nce taksitleri belirtin.","Unable to process, the form is not valid":"Form i\u015flenemiyor ge\u00e7erli de\u011fil","One or more instalments has an invalid date.":"Bir veya daha fazla taksitin tarihi ge\u00e7ersiz.","One or more instalments has an invalid amount.":"Bir veya daha fazla taksitin tutar\u0131 ge\u00e7ersiz.","One or more instalments has a date prior to the current date.":"Bir veya daha fazla taksitin ge\u00e7erli tarihten \u00f6nce bir tarihi var.","Total instalments must be equal to the order total.":"Toplam taksitler sipari\u015f toplam\u0131na e\u015fit olmal\u0131d\u0131r.","The customer has been loaded":"M\u00fc\u015fteri Y\u00fcklendi","This coupon is already added to the cart":"Bu kupon zaten sepete eklendi","No tax group assigned to the order":"Sipari\u015fe atanan vergi grubu yok","Layaway defined":"Taksit Tan\u0131ml\u0131","Okay":"Tamam","An unexpected error has occurred while fecthing taxes.":"An unexpected error has occurred while fecthing taxes.","OKAY":"TAMAM","Loading...":"Y\u00fckleniyor...","Profile":"Profil","Logout":"\u00c7\u0131k\u0131\u015f Yap","Unnamed Page":"Ads\u0131z Sayfa","No description":"A\u00e7\u0131klama yok","Name":"\u0130sim","Provide a name to the resource.":"Kayna\u011fa bir ad verin.","General":"Genel","Edit":"D\u00fczenle","Delete":"Sil","Delete Selected Groups":"Se\u00e7ili Gruplar\u0131 Sil","Activate Your Account":"Hesab\u0131n\u0131z\u0131 Etkinle\u015ftirin","Password Recovered":"\u015eifre Kurtar\u0131ld\u0131","Password Recovery":"\u015eifre kurtarma","Reset Password":"\u015eifreyi yenile","New User Registration":"yeni kullan\u0131c\u0131 kayd\u0131","Your Account Has Been Created":"Hesab\u0131n\u0131z olu\u015fturuldu","Login":"Giri\u015f Yap","Save Coupon":"Kuponu Kaydet","This field is required":"Bu alan gereklidir","The form is not valid. Please check it and try again":"Form ge\u00e7erli de\u011fil. L\u00fctfen kontrol edip tekrar deneyin","mainFieldLabel not defined":"Ana Alan Etiketi Tan\u0131mlanmad\u0131","Create Customer Group":"M\u00fc\u015fteri Grubu Olu\u015ftur","Save a new customer group":"Yeni bir m\u00fc\u015fteri grubu kaydedin","Update Group":"Grubu G\u00fcncelle","Modify an existing customer group":"Mevcut bir m\u00fc\u015fteri grubunu de\u011fi\u015ftirin","Managing Customers Groups":"M\u00fc\u015fteri Gruplar\u0131n\u0131 Y\u00f6netme","Create groups to assign customers":"M\u00fc\u015fterileri atamak i\u00e7in gruplar olu\u015fturun","Create Customer":"M\u00fc\u015fteri Olu\u015ftur","Managing Customers":"M\u00fc\u015fterileri Y\u00f6net","List of registered customers":"Kay\u0131tl\u0131 m\u00fc\u015fterilerin listesi","Your Module":"Mod\u00fcl\u00fcn\u00fcz","Choose the zip file you would like to upload":"Y\u00fcklemek istedi\u011finiz zip dosyas\u0131n\u0131 se\u00e7in","Upload":"Y\u00fckle","Managing Orders":"Sipari\u015fleri Y\u00f6net","Manage all registered orders.":"T\u00fcm kay\u0131tl\u0131 sipari\u015fleri y\u00f6netin.","Failed":"Ar\u0131zal\u0131","Order receipt":"Sipari\u015f makbuzu","Hide Dashboard":"G\u00f6sterge paneli gizle","Taxes":"Vergiler","Unknown Payment":"Bilinmeyen \u00d6deme","Procurement Name":"Tedarik Ad\u0131","Unable to proceed no products has been provided.":"Devam edilemiyor hi\u00e7bir \u00fcr\u00fcn sa\u011flanmad\u0131.","Unable to proceed, one or more products is not valid.":"Devam edilemiyor, bir veya daha fazla \u00fcr\u00fcn ge\u00e7erli de\u011fil.","Unable to proceed the procurement form is not valid.":"Devam edilemiyor tedarik formu ge\u00e7erli de\u011fil.","Unable to proceed, no submit url has been provided.":"Devam edilemiyor, g\u00f6nderim URL'si sa\u011flanmad\u0131.","SKU, Barcode, Product name.":"SKU, Barkod, \u00dcr\u00fcn ad\u0131.","N\/A":"Bo\u015f","Email":"E-posta","Phone":"Telefon","First Address":"\u0130lk Adres","Second Address":"\u0130kinci Adres","Address":"Adres","City":"\u015eehir","PO.Box":"Posta Kodu","Price":"Fiyat","Print":"Yazd\u0131r","Description":"Tan\u0131m","Included Products":"Dahil olan \u00dcr\u00fcnler","Apply Settings":"Ayarlar\u0131 uygula","Basic Settings":"Temel Ayarlar","Visibility Settings":"G\u00f6r\u00fcn\u00fcrl\u00fck Ayarlar\u0131","Year":"Y\u0131l","Sales":"Sat\u0131\u015f","Income":"Gelir","January":"Ocak","March":"Mart","April":"Nisan","May":"May\u0131s","July":"Temmuz","August":"A\u011fustos","September":"Eyl\u00fcl","October":"Ekim","November":"Kas\u0131m","December":"Aral\u0131k","Purchase Price":"Al\u0131\u015f fiyat\u0131","Sale Price":"Sat\u0131\u015f Fiyat\u0131","Profit":"K\u00e2r","Tax Value":"Vergi De\u011feri","Reward System Name":"\u00d6d\u00fcl Sistemi Ad\u0131","Missing Dependency":"Eksik Ba\u011f\u0131ml\u0131l\u0131k","Go Back":"Geri D\u00f6n","Continue":"Devam Et","Home":"Anasayfa","Not Allowed Action":"\u0130zin Verilmeyen \u0130\u015flem","Try Again":"Tekrar deneyin","Access Denied":"Eri\u015fim reddedildi","Dashboard":"G\u00f6sterge Paneli","Sign In":"Giri\u015f Yap","Sign Up":"\u00dcye ol","This field is required.":"Bu alan gereklidir.","This field must contain a valid email address.":"Bu alan ge\u00e7erli bir e-posta adresi i\u00e7ermelidir.","Clear Selected Entries ?":"Se\u00e7ili Giri\u015fleri Temizle ?","Would you like to clear all selected entries ?":"Se\u00e7ilen t\u00fcm giri\u015fleri silmek ister misiniz?","No selection has been made.":"Se\u00e7im yap\u0131lmad\u0131.","No action has been selected.":"Hi\u00e7bir i\u015flem se\u00e7ilmedi.","There is nothing to display...":"g\u00f6r\u00fcnt\u00fclenecek bir \u015fey yok...","Sun":"Paz","Mon":"Pzt","Tue":"Sal","Wed":"\u00c7ar","Fri":"Cum","Sat":"Cmt","Nothing to display":"G\u00f6r\u00fcnt\u00fclenecek bir \u015fey yok","Password Forgotten ?":"\u015eifrenizimi Unuttunuz ?","OK":"TAMAM","Remember Your Password ?":"\u015eifrenizimi Unuttunuz ?","Already registered ?":"Zaten kay\u0131tl\u0131?","Refresh":"Yenile","Enabled":"Etkinle\u015ftirilmi\u015f","Disabled":"Engelli","Enable":"A\u00e7\u0131k","Disable":"Kapal\u0131","Gallery":"Galeri","Medias Manager":"Medya Y\u00f6neticisi","Click Here Or Drop Your File To Upload":"Y\u00fcklemek \u0130\u00e7in Buraya T\u0131klay\u0131n Veya Dosyan\u0131z\u0131 B\u0131rak\u0131n","Nothing has already been uploaded":"Hi\u00e7bir \u015fey zaten y\u00fcklenmedi","File Name":"Dosya ad\u0131","Uploaded At":"Y\u00fcklenme Tarihi","By":"Taraf\u0131ndan","Previous":"\u00d6nceki","Next":"Sonraki","Use Selected":"Se\u00e7ileni Kullan","Would you like to clear all the notifications ?":"T\u00fcm bildirimleri silmek ister misiniz ?","Permissions":"izinler","Payment Summary":"\u00d6deme \u00f6zeti","Order Status":"Sipari\u015f durumu","Would you proceed ?":"Devam Etmek \u0130stermisin ?","Would you like to create this instalment ?":"Bu taksiti olu\u015fturmak ister misiniz ?","Would you like to delete this instalment ?":"Bu taksiti silmek ister misiniz ?","Would you like to update that instalment ?":"Bu taksiti g\u00fcncellemek ister misiniz ?","Customer Account":"M\u00fc\u015fteri hesab\u0131","Payment":"\u00d6deme","No payment possible for paid order.":"\u00d6denmi\u015f sipari\u015f i\u00e7in \u00f6deme yap\u0131lamaz.","Payment History":"\u00d6deme ge\u00e7mi\u015fi","Unable to proceed the form is not valid":"Devam edilemiyor form ge\u00e7erli de\u011fil","Please provide a valid value":"L\u00fctfen ge\u00e7erli bir de\u011fer girin","Refund With Products":"Geri \u00d6deme","Refund Shipping":"\u0130ade Kargo","Add Product":"\u00fcr\u00fcn ekle","Damaged":"Hasarl\u0131","Unspoiled":"Bozulmu\u015f","Summary":"\u00d6zet","Payment Gateway":"\u00d6deme Sa\u011flay\u0131c\u0131","Screen":"Ekran","Select the product to perform a refund.":"Geri \u00f6deme yapmak i\u00e7in \u00fcr\u00fcn\u00fc se\u00e7in.","Please select a payment gateway before proceeding.":"L\u00fctfen devam etmeden \u00f6nce bir \u00f6deme a\u011f ge\u00e7idi se\u00e7in.","There is nothing to refund.":"\u0130ade edilecek bir \u015fey yok.","Please provide a valid payment amount.":"L\u00fctfen ge\u00e7erli bir \u00f6deme tutar\u0131 girin.","The refund will be made on the current order.":"Geri \u00f6deme mevcut sipari\u015fte yap\u0131lacakt\u0131r.","Please select a product before proceeding.":"L\u00fctfen devam etmeden \u00f6nce bir \u00fcr\u00fcn se\u00e7in.","Not enough quantity to proceed.":"Devam etmek i\u00e7in yeterli miktar yok.","Customers":"M\u00fc\u015fteriler","Order Type":"Sipari\u015f t\u00fcr\u00fc","Orders":"Sipari\u015fler","Cash Register":"Yazar kasa","Reset":"S\u0131f\u0131rla","Cart":"Sepet","Comments":"NOT","No products added...":"\u00dcr\u00fcn eklenmedi...","Pay":"\u00d6deme","Void":"\u0130ptal","Current Balance":"Cari Bakiye","Full Payment":"Tam \u00f6deme","The customer account can only be used once per order. Consider deleting the previously used payment.":"M\u00fc\u015fteri hesab\u0131, sipari\u015f ba\u015f\u0131na yaln\u0131zca bir kez kullan\u0131labilir. Daha \u00f6nce kullan\u0131lan \u00f6demeyi silmeyi d\u00fc\u015f\u00fcn\u00fcn.","Not enough funds to add {amount} as a payment. Available balance {balance}.":"\u00d6deme olarak {amount} eklemek i\u00e7in yeterli para yok. Kullan\u0131labilir bakiye {balance}.","Confirm Full Payment":"Tam \u00d6demeyi Onaylay\u0131n","A full payment will be made using {paymentType} for {total}":"{total} i\u00e7in {paymentType} kullan\u0131larak tam \u00f6deme yap\u0131lacakt\u0131r.","You need to provide some products before proceeding.":"Devam etmeden \u00f6nce baz\u0131 \u00fcr\u00fcnler sa\u011flaman\u0131z gerekiyor.","Unable to add the product, there is not enough stock. Remaining %s":"\u00dcr\u00fcn eklenemiyor, yeterli stok yok. Geriye kalan %s","Add Images":"Resim ekle","New Group":"Yeni Grup","Available Quantity":"Mevcut Miktar\u0131","Would you like to delete this group ?":"Bu grubu silmek ister misiniz ?","Your Attention Is Required":"Dikkatiniz Gerekli","Please select at least one unit group before you proceed.":"Devam etmeden \u00f6nce l\u00fctfen en az bir birim grubu se\u00e7in.","Unable to proceed as one of the unit group field is invalid":"Unable to proceed as one of the unit group field is invalid","Would you like to delete this variation ?":"Bu varyasyonu silmek ister misiniz ?","Details":"Detaylar","Unable to proceed, no product were provided.":"Devam edilemedi, \u00fcr\u00fcn sa\u011flanmad\u0131.","Unable to proceed, one or more product has incorrect values.":"Devam edilemiyor, bir veya daha fazla \u00fcr\u00fcn yanl\u0131\u015f de\u011ferlere sahip.","Unable to proceed, the procurement form is not valid.":"Devam edilemiyor, tedarik formu ge\u00e7erli de\u011fil.","Unable to submit, no valid submit URL were provided.":"G\u00f6nderilemiyor, ge\u00e7erli bir g\u00f6nderme URL'si sa\u011flanmad\u0131.","Options":"Se\u00e7enekler","The stock adjustment is about to be made. Would you like to confirm ?":"Stok ayarlamas\u0131 yap\u0131lmak \u00fczere. onaylamak ister misin ?","Would you like to remove this product from the table ?":"Bu \u00fcr\u00fcn\u00fc masadan kald\u0131rmak ister misiniz ?","Unable to proceed. Select a correct time range.":"Devam edilemiyor. Do\u011fru bir zaman aral\u0131\u011f\u0131 se\u00e7in.","Unable to proceed. The current time range is not valid.":"Devam edilemiyor. Ge\u00e7erli zaman aral\u0131\u011f\u0131 ge\u00e7erli de\u011fil.","Would you like to proceed ?":"devam etmek ister misin ?","No rules has been provided.":"Hi\u00e7bir kural sa\u011flanmad\u0131.","No valid run were provided.":"Ge\u00e7erli bir \u00e7al\u0131\u015ft\u0131rma sa\u011flanmad\u0131.","Unable to proceed, the form is invalid.":"Devam edilemiyor, form ge\u00e7ersiz.","Unable to proceed, no valid submit URL is defined.":"Devam edilemiyor, ge\u00e7erli bir g\u00f6nderme URL'si tan\u0131mlanmad\u0131.","No title Provided":"Ba\u015fl\u0131k Sa\u011flanmad\u0131","Add Rule":"Kural Ekle","Save Settings":"Ayarlar\u0131 kaydet","Ok":"TAMAM","New Transaction":"Yeni \u0130\u015flem","Close":"\u00c7\u0131k\u0131\u015f","Would you like to delete this order":"Bu sipari\u015fi silmek ister misiniz?","The current order will be void. This action will be recorded. Consider providing a reason for this operation":"Mevcut sipari\u015f ge\u00e7ersiz olacakt\u0131r. Bu i\u015flem kaydedilecektir. Bu i\u015flem i\u00e7in bir neden sa\u011flamay\u0131 d\u00fc\u015f\u00fcn\u00fcn","Order Options":"Sipari\u015f Se\u00e7enekleri","Payments":"\u00d6demeler","Refund & Return":"Geri \u00d6deme ve \u0130ade","Installments":"Taksitler","The form is not valid.":"Form ge\u00e7erli de\u011fil.","Balance":"Kalan","Input":"Giri\u015f","Register History":"Kay\u0131t Ge\u00e7mi\u015fi","Close Register":"Kapat Kay\u0131t Ol","Cash In":"Nakit","Cash Out":"Nakit \u00c7\u0131k\u0131\u015f\u0131","Register Options":"Kay\u0131t Se\u00e7enekleri","History":"Tarih","Unable to open this register. Only closed register can be opened.":"Bu kay\u0131t a\u00e7\u0131lam\u0131yor. Sadece kapal\u0131 kay\u0131t a\u00e7\u0131labilir.","Open The Register":"Kayd\u0131 A\u00e7","Exit To Orders":"Sipari\u015flere Git","Looks like there is no registers. At least one register is required to proceed.":"Kay\u0131t yok gibi g\u00f6r\u00fcn\u00fcyor. Devam etmek i\u00e7in en az bir kay\u0131t gereklidir.","Create Cash Register":"Yazar Kasa Olu\u015ftur","Yes":"Evet","No":"Hay\u0131r","Use":"Kullan","No coupon available for this customer":"Bu m\u00fc\u015fteri i\u00e7in kupon yok","Select Customer":"M\u00fc\u015fteri Se\u00e7","No customer match your query...":"Sorgunuzla e\u015fle\u015fen m\u00fc\u015fteri yok.","Customer Name":"M\u00fc\u015fteri Ad\u0131","Save Customer":"M\u00fc\u015fteriyi Kaydet","No Customer Selected":"M\u00fc\u015fteri Se\u00e7ilmedi","In order to see a customer account, you need to select one customer.":"Bir m\u00fc\u015fteri hesab\u0131n\u0131 g\u00f6rmek i\u00e7in bir m\u00fc\u015fteri se\u00e7meniz gerekir.","Summary For":"\u00d6zet","Total Purchases":"Toplam Sat\u0131n Alma","Last Purchases":"Son Sat\u0131n Alma \u0130\u015flemleri","Status":"Durum","No orders...":"Sipari\u015f Yok...","Account Transaction":"Hesap Hareketi","Product Discount":"\u00dcr\u00fcn \u0130ndirimi","Cart Discount":"Sepet indirimi","Hold Order":"Sipari\u015fi Beklemeye Al","The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.":"Mevcut sipari\u015f beklemeye al\u0131nacakt\u0131r. Bu sipari\u015fi bekleyen sipari\u015f butonundan alabilirsiniz. Buna bir referans sa\u011flamak, sipari\u015fi daha h\u0131zl\u0131 tan\u0131mlaman\u0131za yard\u0131mc\u0131 olabilir.","Confirm":"Onayla","Order Note":"Sipari\u015f Notu","Note":"Not","More details about this order":"Bu sipari\u015fle ilgili daha fazla ayr\u0131nt\u0131","Display On Receipt":"Fi\u015fte G\u00f6r\u00fcnt\u00fcle","Will display the note on the receipt":"Makbuzdaki notu g\u00f6sterecek","Open":"A\u00e7\u0131k","Define The Order Type":"Sipari\u015f T\u00fcr\u00fcn\u00fc Tan\u0131mlay\u0131n","Payment List":"\u00d6deme listesi","List Of Payments":"\u00d6deme Listesi","No Payment added.":"\u00d6deme eklenmedi.","Select Payment":"\u00d6deme Se\u00e7","Submit Payment":"\u00d6demeyi G\u00f6nder","Layaway":"Taksit","On Hold":"Beklemede","Tendered":"ihale","Nothing to display...":"G\u00f6r\u00fcnt\u00fclenecek bir \u015fey yok..","Define Quantity":"Miktar\u0131 Tan\u0131mla","Please provide a quantity":"L\u00fctfen bir miktar belirtin","Search Product":"\u00dcr\u00fcn Ara","There is nothing to display. Have you started the search ?":"G\u00f6sterilecek bir \u015fey yok. aramaya ba\u015flad\u0131n m\u0131 ?","Shipping & Billing":"Kargo \u00fccreti","Tax & Summary":"Vergi ve \u00d6zet","Settings":"Ayarlar","Select Tax":"Vergi se\u00e7in","Define the tax that apply to the sale.":"Sat\u0131\u015f i\u00e7in ge\u00e7erli olan vergiyi tan\u0131mlay\u0131n.","Define how the tax is computed":"Verginin nas\u0131l hesapland\u0131\u011f\u0131n\u0131 tan\u0131mlay\u0131n","Exclusive":"\u00d6zel","Inclusive":"Dahil","Define when that specific product should expire.":"Belirli bir \u00fcr\u00fcn\u00fcn ne zaman sona erece\u011fini tan\u0131mlay\u0131n.","Renders the automatically generated barcode.":"Otomatik olarak olu\u015fturulan barkodu i\u015fler.","Tax Type":"Vergi T\u00fcr\u00fc","Adjust how tax is calculated on the item.":"\u00d6\u011fede verginin nas\u0131l hesaplanaca\u011f\u0131n\u0131 ayarlay\u0131n.","Unable to proceed. The form is not valid.":"Devam edilemiyor. Form ge\u00e7erli de\u011fil.","Units & Quantities":"Birimler ve Miktarlar","Wholesale Price":"Toptan Sat\u0131\u015f Fiyat\u0131","Select":"Se\u00e7","Would you like to delete this ?":"Bunu silmek ister misin ?","The account you have created for __%s__, require an activation. In order to proceed, please click on the following link":"__%s__ i\u00e7in olu\u015fturdu\u011funuz hesap aktivasyon gerektiriyor. Devam etmek i\u00e7in l\u00fctfen a\u015fa\u011f\u0131daki ba\u011flant\u0131ya t\u0131klay\u0131n","Your password has been successfully updated on __%s__. You can now login with your new password.":"Parolan\u0131z __%s__ tarihinde ba\u015far\u0131yla g\u00fcncellendi. Art\u0131k yeni \u015fifrenizle giri\u015f yapabilirsiniz.","Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ":"Birisi __\"%s\"__ \u00fczerinde \u015fifrenizi s\u0131f\u0131rlamak istedi. Bu iste\u011fi yapt\u0131\u011f\u0131n\u0131z\u0131 hat\u0131rl\u0131yorsan\u0131z, l\u00fctfen a\u015fa\u011f\u0131daki d\u00fc\u011fmeyi t\u0131klayarak devam edin. ","Receipt — %s":"Fi\u015f — %s","Unable to find a module having the identifier\/namespace \"%s\"":"Tan\u0131mlay\u0131c\u0131\/ad alan\u0131na sahip bir mod\u00fcl bulunamad\u0131 \"%s\"","What is the CRUD single resource name ? [Q] to quit.":"CRUD tek kaynak ad\u0131 nedir ? [Q] Kullan\u0131n.","Which table name should be used ? [Q] to quit.":"Hangi Masa ad\u0131 kullan\u0131lmal\u0131d\u0131r ? [Q] Kullan\u0131n.","If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"CRUD kayna\u011f\u0131n\u0131z\u0131n bir ili\u015fkisi varsa, bunu \"yabanc\u0131 tablo, yabanc\u0131 anahtar, yerel_anahtar\" \u015feklinde belirtin mi? [S] atlamak i\u00e7in, [Q] \u00e7\u0131kmak i\u00e7in.","Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Yeni bir ili\u015fki ekle? Bunu \"yabanc\u0131 tablo, yabanc\u0131 anahtar, yerel_anahtar\" \u015feklinde mi belirtin? [S] atlamak i\u00e7in, [Q] \u00e7\u0131kmak i\u00e7in.","Not enough parameters provided for the relation.":"\u0130li\u015fki i\u00e7in yeterli parametre sa\u011flanmad\u0131.","The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"":"CRUD kayna\u011f\u0131 \"%s\" mod\u00fcl i\u00e7in \"%s\" de olu\u015fturuldu \"%s\"","The CRUD resource \"%s\" has been generated at %s":"CRUD kayna\u011f\u0131 \"%s\" de olu\u015fturuldu %s","An unexpected error has occurred.":"Beklenmeyen bir hata olu\u015ftu.","Localization for %s extracted to %s":"%s i\u00e7in yerelle\u015ftirme \u015furaya \u00e7\u0131kar\u0131ld\u0131 %s","Unable to find the requested module.":"\u0130stenen mod\u00fcl bulunamad\u0131.","Version":"S\u00fcr\u00fcm","Path":"Yol","Index":"Dizin","Entry Class":"Giri\u015f S\u0131n\u0131f\u0131","Routes":"Rotalar","Api":"Api","Controllers":"Kontroller","Views":"G\u00f6r\u00fcnt\u00fcleme","Attribute":"Ba\u011fla","Namespace":"ad alan\u0131","Author":"Yazar","The product barcodes has been refreshed successfully.":"\u00dcr\u00fcn barkodlar\u0131 ba\u015far\u0131yla yenilendi.","What is the store name ? [Q] to quit.":"Ma\u011faza ad\u0131 nedir? [Q] \u00e7\u0131kmak i\u00e7in.","Please provide at least 6 characters for store name.":"L\u00fctfen ma\u011faza ad\u0131 i\u00e7in en az 6 karakter girin.","What is the administrator password ? [Q] to quit.":"Y\u00f6netici \u015fifresi nedir? [Q] \u00e7\u0131kmak i\u00e7in.","Please provide at least 6 characters for the administrator password.":"L\u00fctfen y\u00f6netici \u015fifresi i\u00e7in en az 6 karakter girin.","What is the administrator email ? [Q] to quit.":"Y\u00f6netici e-postas\u0131 nedir? [Q] \u00e7\u0131kmak i\u00e7in.","Please provide a valid email for the administrator.":"L\u00fctfen y\u00f6netici i\u00e7in ge\u00e7erli bir e-posta girin.","What is the administrator username ? [Q] to quit.":"Y\u00f6netici kullan\u0131c\u0131 ad\u0131 nedir? [Q] \u00e7\u0131kmak i\u00e7in.","Please provide at least 5 characters for the administrator username.":"L\u00fctfen y\u00f6netici kullan\u0131c\u0131 ad\u0131 i\u00e7in en az 5 karakter girin.","Downloading latest dev build...":"En son geli\u015ftirme derlemesini indirme...","Reset project to HEAD...":"Projeyi HEAD olarak s\u0131f\u0131rlay\u0131n...","Coupons List":"Kupon Listesi","Display all coupons.":"T\u00fcm kuponlar\u0131 g\u00f6ster.","No coupons has been registered":"Hi\u00e7bir kupon kaydedilmedi","Add a new coupon":"Yeni bir kupon ekle","Create a new coupon":"Yeni bir kupon olu\u015ftur","Register a new coupon and save it.":"Yeni bir kupon kaydedin ve kaydedin.","Edit coupon":"Kuponu d\u00fczenle","Modify Coupon.":"Kuponu De\u011fi\u015ftir.","Return to Coupons":"Kuponlara D\u00f6n","Might be used while printing the coupon.":"Kupon yazd\u0131r\u0131l\u0131rken kullan\u0131labilir.","Percentage Discount":"Y\u00fczde \u0130ndirimi","Flat Discount":"Daire \u0130ndirimi","Define which type of discount apply to the current coupon.":"Mevcut kupona hangi indirimin uygulanaca\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","Discount Value":"\u0130ndirim tutar\u0131","Define the percentage or flat value.":"Y\u00fczde veya d\u00fcz de\u011feri tan\u0131mlay\u0131n.","Valid Until":"Ge\u00e7erlilik Tarihi","Minimum Cart Value":"Minimum Sepet De\u011feri","What is the minimum value of the cart to make this coupon eligible.":"Bu kuponu uygun hale getirmek i\u00e7in al\u0131\u015fveri\u015f sepetinin minimum de\u011feri nedir?.","Maximum Cart Value":"Maksimum Sepet De\u011feri","Valid Hours Start":"Ge\u00e7erli Saat Ba\u015flang\u0131c\u0131","Define form which hour during the day the coupons is valid.":"Kuponlar\u0131n g\u00fcn\u00fcn hangi saatinde ge\u00e7erli oldu\u011funu tan\u0131mlay\u0131n.","Valid Hours End":"Ge\u00e7erli Saat Biti\u015fi","Define to which hour during the day the coupons end stop valid.":"Kuponlar\u0131n g\u00fcn i\u00e7inde hangi saate kadar ge\u00e7erli oldu\u011funu tan\u0131mlay\u0131n.","Limit Usage":"Kullan\u0131m\u0131 S\u0131n\u0131rla","Define how many time a coupons can be redeemed.":"Bir kuponun ka\u00e7 kez kullan\u0131labilece\u011fini tan\u0131mlay\u0131n.","Select Products":"\u00dcr\u00fcnleri Se\u00e7in","The following products will be required to be present on the cart, in order for this coupon to be valid.":"Bu kuponun ge\u00e7erli olabilmesi i\u00e7in sepette a\u015fa\u011f\u0131daki \u00fcr\u00fcnlerin bulunmas\u0131 gerekecektir.","Select Categories":"Kategorileri Se\u00e7in","The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.":"Bu kuponun ge\u00e7erli olabilmesi i\u00e7in bu kategorilerden birine atanan \u00fcr\u00fcnlerin sepette olmas\u0131 gerekmektedir.","Created At":"Olu\u015fturulma Tarihi","Undefined":"Tan\u0131ms\u0131z","Delete a licence":"Bir lisans\u0131 sil","Customer Coupons List":"M\u00fc\u015fteri Kuponlar\u0131 Listesi","Display all customer coupons.":"T\u00fcm m\u00fc\u015fteri kuponlar\u0131n\u0131 g\u00f6ster.","No customer coupons has been registered":"Hi\u00e7bir m\u00fc\u015fteri kuponu kaydedilmedi","Add a new customer coupon":"Yeni bir m\u00fc\u015fteri kuponu ekleyin","Create a new customer coupon":"Yeni bir m\u00fc\u015fteri kuponu olu\u015fturun","Register a new customer coupon and save it.":"Yeni bir m\u00fc\u015fteri kuponu kaydedin ve kaydedin.","Edit customer coupon":"M\u00fc\u015fteri kuponunu d\u00fczenle","Modify Customer Coupon.":"M\u00fc\u015fteri Kuponunu De\u011fi\u015ftir.","Return to Customer Coupons":"M\u00fc\u015fteri Kuponlar\u0131na D\u00f6n","Id":"Id","Limit":"S\u0131n\u0131r","Created_at":"Created_at","Updated_at":"Updated_at","Code":"Kod","Customers List":"M\u00fc\u015fteri Listesi","Display all customers.":"T\u00fcm m\u00fc\u015fterileri g\u00f6ster.","No customers has been registered":"Kay\u0131tl\u0131 m\u00fc\u015fteri yok","Add a new customer":"Yeni m\u00fc\u015fteri ekle","Create a new customer":"Yeni M\u00fc\u015fteri Kaydet","Register a new customer and save it.":"Yeni bir m\u00fc\u015fteri kaydedin ve kaydedin.","Edit customer":"M\u00fc\u015fteri D\u00fczenle","Modify Customer.":"M\u00fc\u015fteriyi De\u011fi\u015ftir.","Return to Customers":"M\u00fc\u015fterilere Geri D\u00f6n","Provide a unique name for the customer.":"M\u00fc\u015fteri i\u00e7in benzersiz bir ad sa\u011flay\u0131n.","Group":"Grup","Assign the customer to a group":"M\u00fc\u015fteriyi bir gruba atama","Phone Number":"Telefon numaras\u0131","Provide the customer phone number":"M\u00fc\u015fteri telefon numaras\u0131n\u0131 sa\u011flay\u0131n","PO Box":"Posta Kodu","Provide the customer PO.Box":"M\u00fc\u015fteriye Posta Kutusu sa\u011flay\u0131n","Not Defined":"Tan\u0131mlanmam\u0131\u015f","Male":"Erkek","Female":"Bayan","Gender":"Belirsiz","Billing Address":"Fatura Adresi","Billing phone number.":"Fatura telefon numaras\u0131.","Address 1":"Adres 1","Billing First Address.":"Fatura \u0130lk Adresi.","Address 2":"Adres 2","Billing Second Address.":"Faturaland\u0131rma \u0130kinci Adresi.","Country":"\u00dclke","Billing Country.":"Faturaland\u0131rma \u00dclkesi.","Postal Address":"Posta adresi","Company":"\u015eirket","Shipping Address":"G\u00f6nderi Adresi","Shipping phone number.":"Nakliye telefon numaras\u0131.","Shipping First Address.":"G\u00f6nderim \u0130lk Adresi.","Shipping Second Address.":"G\u00f6nderim \u0130kinci Adresi.","Shipping Country.":"Nakliye \u00fclkesi.","Account Credit":"Hesap Kredisi","Owed Amount":"Bor\u00e7lu Tutar","Purchase Amount":"Sat\u0131n alma miktar\u0131","Rewards":"\u00d6d\u00fcller","Delete a customers":"Bir m\u00fc\u015fteriyi silin","Delete Selected Customers":"Se\u00e7ili M\u00fc\u015fterileri Sil","Customer Groups List":"M\u00fc\u015fteri Gruplar\u0131 Listesi","Display all Customers Groups.":"T\u00fcm M\u00fc\u015fteri Gruplar\u0131n\u0131 G\u00f6r\u00fcnt\u00fcle.","No Customers Groups has been registered":"Hi\u00e7bir M\u00fc\u015fteri Grubu kay\u0131tl\u0131 de\u011fil","Add a new Customers Group":"Yeni bir M\u00fc\u015fteriler Grubu ekleyin","Create a new Customers Group":"Yeni bir M\u00fc\u015fteriler Grubu olu\u015fturun","Register a new Customers Group and save it.":"Yeni bir M\u00fc\u015fteri Grubu kaydedin ve kaydedin.","Edit Customers Group":"M\u00fc\u015fteriler Grubunu D\u00fczenle","Modify Customers group.":"M\u00fc\u015fteriler grubunu de\u011fi\u015ftir.","Return to Customers Groups":"M\u00fc\u015fteri Gruplar\u0131na D\u00f6n","Reward System":"\u00d6d\u00fcl sistemi","Select which Reward system applies to the group":"Grup i\u00e7in hangi \u00d6d\u00fcl sisteminin uygulanaca\u011f\u0131n\u0131 se\u00e7in","Minimum Credit Amount":"Minimum Kredi Tutar\u0131","A brief description about what this group is about":"Bu grubun ne hakk\u0131nda oldu\u011fu hakk\u0131nda k\u0131sa bir a\u00e7\u0131klama","Created On":"Olu\u015fturma Tarihi","Customer Orders List":"M\u00fc\u015fteri Sipari\u015fleri Listesi","Display all customer orders.":"T\u00fcm m\u00fc\u015fteri sipari\u015flerini g\u00f6ster.","No customer orders has been registered":"Kay\u0131tl\u0131 m\u00fc\u015fteri sipari\u015fi yok","Add a new customer order":"Yeni bir m\u00fc\u015fteri sipari\u015fi ekle","Create a new customer order":"Yeni bir m\u00fc\u015fteri sipari\u015fi olu\u015fturun","Register a new customer order and save it.":"Yeni bir m\u00fc\u015fteri sipari\u015fi kaydedin ve kaydedin.","Edit customer order":"M\u00fc\u015fteri sipari\u015fini d\u00fczenle","Modify Customer Order.":"M\u00fc\u015fteri Sipari\u015fini De\u011fi\u015ftir.","Return to Customer Orders":"M\u00fc\u015fteri Sipari\u015flerine D\u00f6n","Created at":"\u015eu saatte olu\u015fturuldu","Customer Id":"M\u00fc\u015fteri Kimli\u011fi","Discount Percentage":"\u0130ndirim Y\u00fczdesi","Discount Type":"\u0130ndirim T\u00fcr\u00fc","Final Payment Date":"Son \u00d6deme Tarihi","Process Status":"\u0130\u015flem durumu","Shipping Rate":"Nakliye Oran\u0131","Shipping Type":"Nakliye T\u00fcr\u00fc","Title":"Yaz\u0131","Total installments":"Toplam taksit","Updated at":"\u015eu saatte g\u00fcncellendi","Uuid":"Uuid","Voidance Reason":"Ge\u00e7ersizlik Nedeni","Customer Rewards List":"M\u00fc\u015fteri \u00d6d\u00fcl Listesi","Display all customer rewards.":"T\u00fcm m\u00fc\u015fteri \u00f6d\u00fcllerini g\u00f6ster.","No customer rewards has been registered":"Hi\u00e7bir m\u00fc\u015fteri \u00f6d\u00fcl\u00fc kaydedilmedi","Add a new customer reward":"Yeni bir m\u00fc\u015fteri \u00f6d\u00fcl\u00fc ekle","Create a new customer reward":"Yeni bir m\u00fc\u015fteri \u00f6d\u00fcl\u00fc olu\u015fturun","Register a new customer reward and save it.":"Yeni bir m\u00fc\u015fteri \u00f6d\u00fcl\u00fc kaydedin ve kaydedin.","Edit customer reward":"M\u00fc\u015fteri \u00f6d\u00fcl\u00fcn\u00fc d\u00fczenle","Modify Customer Reward.":"M\u00fc\u015fteri \u00d6d\u00fcl\u00fcn\u00fc De\u011fi\u015ftir.","Return to Customer Rewards":"M\u00fc\u015fteri \u00d6d\u00fcllerine D\u00f6n","Points":"Puan","Target":"Hedef","Reward Name":"\u00d6d\u00fcl Ad\u0131","Last Update":"Son G\u00fcncelleme","Active":"Aktif","Users Group":"Users Group","None":"Hi\u00e7biri","Recurring":"Yinelenen","Start of Month":"Ay\u0131n Ba\u015flang\u0131c\u0131","Mid of Month":"Ay\u0131n Ortas\u0131","End of Month":"Ay\u0131n sonu","X days Before Month Ends":"Ay Bitmeden X g\u00fcn \u00f6nce","X days After Month Starts":"Ay Ba\u015flad\u0131ktan X G\u00fcn Sonra","Occurrence":"Olu\u015ftur","Occurrence Value":"Olu\u015fum De\u011feri","Must be used in case of X days after month starts and X days before month ends.":"Ay ba\u015flad\u0131ktan X g\u00fcn sonra ve ay bitmeden X g\u00fcn \u00f6nce kullan\u0131lmal\u0131d\u0131r.","Category":"Kategori Se\u00e7iniz","Month Starts":"Ay Ba\u015flang\u0131c\u0131","Month Middle":"Ay Ortas\u0131","Month Ends":"Ay Biti\u015fi","X Days Before Month Ends":"Ay Bitmeden X G\u00fcn \u00d6nce","Updated At":"G\u00fcncellenme Tarihi","Hold Orders List":"Sipari\u015f Listesini Beklet","Display all hold orders.":"T\u00fcm bekletme sipari\u015flerini g\u00f6ster.","No hold orders has been registered":"Hi\u00e7bir bekletme emri kaydedilmedi","Add a new hold order":"Yeni bir bekletme emri ekle","Create a new hold order":"Yeni bir bekletme emri olu\u015ftur","Register a new hold order and save it.":"Yeni bir bekletme emri kaydedin ve kaydedin.","Edit hold order":"Bekletme s\u0131ras\u0131n\u0131 d\u00fczenle","Modify Hold Order.":"Bekletme S\u0131ras\u0131n\u0131 De\u011fi\u015ftir.","Return to Hold Orders":"Bekletme Emirlerine D\u00f6n","Orders List":"Sipari\u015f Listesi","Display all orders.":"T\u00fcm sipari\u015fleri g\u00f6ster.","No orders has been registered":"Kay\u0131tl\u0131 sipari\u015f yok","Add a new order":"Yeni sipari\u015f ekle","Create a new order":"Yeni bir sipari\u015f olu\u015ftur","Register a new order and save it.":"Yeni bir sipari\u015f kaydedin ve kaydedin.","Edit order":"Sipari\u015f d\u00fczenle","Modify Order.":"Sipari\u015f d\u00fczenle.","Return to Orders":"Sipari\u015flere D\u00f6n","Discount Rate":"\u0130ndirim oran\u0131","The order and the attached products has been deleted.":"Sipari\u015f ve ekli \u00fcr\u00fcnler silindi.","Invoice":"Fatura","Receipt":"Fi\u015f","Order Instalments List":"Sipari\u015f Taksit Listesi","Display all Order Instalments.":"T\u00fcm Sipari\u015f Taksitlerini G\u00f6r\u00fcnt\u00fcle.","No Order Instalment has been registered":"Sipari\u015f Taksit kayd\u0131 yap\u0131lmad\u0131","Add a new Order Instalment":"Yeni bir Sipari\u015f Taksit Ekle","Create a new Order Instalment":"Yeni bir Sipari\u015f Taksit Olu\u015ftur","Register a new Order Instalment and save it.":"Yeni bir Sipari\u015f Taksiti kaydedin ve kaydedin.","Edit Order Instalment":"Sipari\u015f Taksitini D\u00fczenle","Modify Order Instalment.":"Sipari\u015f Taksitini De\u011fi\u015ftir.","Return to Order Instalment":"Taksitli Sipari\u015fe D\u00f6n","Order Id":"Sipari\u015f Kimli\u011fi","Payment Types List":"\u00d6deme T\u00fcrleri Listesi","Display all payment types.":"T\u00fcm \u00f6deme t\u00fcrlerini g\u00f6ster.","No payment types has been registered":"Hi\u00e7bir \u00f6deme t\u00fcr\u00fc kaydedilmedi","Add a new payment type":"Yeni bir \u00f6deme t\u00fcr\u00fc ekleyin","Create a new payment type":"Yeni bir \u00f6deme t\u00fcr\u00fc olu\u015fturun","Register a new payment type and save it.":"Yeni bir \u00f6deme t\u00fcr\u00fc kaydedin ve kaydedin.","Edit payment type":"\u00d6deme t\u00fcr\u00fcn\u00fc d\u00fczenle","Modify Payment Type.":"\u00d6deme T\u00fcr\u00fcn\u00fc De\u011fi\u015ftir.","Return to Payment Types":"\u00d6deme T\u00fcrlerine D\u00f6n","Label":"Etiket","Provide a label to the resource.":"Kayna\u011fa bir etiket sa\u011flay\u0131n.","Identifier":"Tan\u0131mlay\u0131c\u0131","A payment type having the same identifier already exists.":"Ayn\u0131 tan\u0131mlay\u0131c\u0131ya sahip bir \u00f6deme t\u00fcr\u00fc zaten mevcut.","Unable to delete a read-only payments type.":"Salt okunur bir \u00f6deme t\u00fcr\u00fc silinemiyor.","Readonly":"Sadece oku","Procurements List":"Tedarik Listesi","Display all procurements.":"T\u00fcm tedarikleri g\u00f6ster.","No procurements has been registered":"Kay\u0131tl\u0131 al\u0131m yok","Add a new procurement":"Yeni bir tedarik ekle","Create a new procurement":"Yeni bir tedarik olu\u015ftur","Register a new procurement and save it.":"Yeni bir tedarik kaydedin ve kaydedin.","Edit procurement":"Tedarik d\u00fczenle","Modify Procurement.":"Tedarik De\u011fi\u015ftir.","Return to Procurements":"Tedariklere D\u00f6n","Provider Id":"Sa\u011flay\u0131c\u0131 Kimli\u011fi","Total Items":"T\u00fcm nesneler","Provider":"Sa\u011flay\u0131c\u0131","Stocked":"Stoklu","Procurement Products List":"Tedarik \u00dcr\u00fcnleri Listesi","Display all procurement products.":"T\u00fcm tedarik \u00fcr\u00fcnlerini g\u00f6ster.","No procurement products has been registered":"Tedarik \u00fcr\u00fcn\u00fc kay\u0131tl\u0131 de\u011fil","Add a new procurement product":"Yeni bir tedarik \u00fcr\u00fcn\u00fc ekle","Create a new procurement product":"Yeni bir tedarik \u00fcr\u00fcn\u00fc olu\u015fturun","Register a new procurement product and save it.":"Yeni bir tedarik \u00fcr\u00fcn\u00fc kaydedin ve kaydedin.","Edit procurement product":"Tedarik \u00fcr\u00fcn\u00fcn\u00fc d\u00fczenle","Modify Procurement Product.":"Tedarik \u00dcr\u00fcn\u00fcn\u00fc De\u011fi\u015ftir.","Return to Procurement Products":"Tedarik \u00dcr\u00fcnlerine D\u00f6n","Define what is the expiration date of the product.":"\u00dcr\u00fcn\u00fcn son kullanma tarihinin ne oldu\u011funu tan\u0131mlay\u0131n.","On":"A\u00e7\u0131k","Category Products List":"Kategori \u00dcr\u00fcn Listesi","Display all category products.":"T\u00fcm kategori \u00fcr\u00fcnlerini g\u00f6ster.","No category products has been registered":"Hi\u00e7bir kategori \u00fcr\u00fcn\u00fc kay\u0131tl\u0131 de\u011fil","Add a new category product":"Yeni bir kategori \u00fcr\u00fcn\u00fc ekle","Create a new category product":"Yeni bir kategori \u00fcr\u00fcn\u00fc olu\u015fturun","Register a new category product and save it.":"Yeni bir kategori \u00fcr\u00fcn\u00fc kaydedin ve kaydedin.","Edit category product":"Kategori \u00fcr\u00fcn\u00fcn\u00fc d\u00fczenle","Modify Category Product.":"Kategori \u00dcr\u00fcn\u00fcn\u00fc De\u011fi\u015ftir.","Return to Category Products":"Kategori \u00dcr\u00fcnlere D\u00f6n","No Parent":"Ebeveyn Yok","Preview":"\u00d6n izleme","Provide a preview url to the category.":"Kategoriye bir \u00f6nizleme URL'si sa\u011flay\u0131n.","Displays On POS":"POS'ta g\u00f6r\u00fcnt\u00fcler","Parent":"Alt","If this category should be a child category of an existing category":"Bu kategorinin mevcut bir kategorinin alt kategorisi olmas\u0131 gerekiyorsa","Total Products":"Toplam \u00dcr\u00fcnler","Products List":"\u00dcr\u00fcn listesi","Display all products.":"T\u00fcm \u00fcr\u00fcnleri g\u00f6ster.","No products has been registered":"Hi\u00e7bir \u00fcr\u00fcn kay\u0131tl\u0131 de\u011fil","Add a new product":"Yeni bir \u00fcr\u00fcn ekle","Create a new product":"Yeni bir \u00fcr\u00fcn olu\u015ftur","Register a new product and save it.":"Yeni bir \u00fcr\u00fcn kaydedin ve kaydedin.","Edit product":"\u00dcr\u00fcn\u00fc d\u00fczenle","Modify Product.":"\u00dcr\u00fcn\u00fc De\u011fi\u015ftir.","Return to Products":"\u00dcr\u00fcnlere D\u00f6n","Assigned Unit":"Atanan Birim","The assigned unit for sale":"Sat\u0131l\u0131k atanan birim","Define the regular selling price.":"Normal sat\u0131\u015f fiyat\u0131n\u0131 tan\u0131mlay\u0131n.","Define the wholesale price.":"Toptan sat\u0131\u015f fiyat\u0131n\u0131 tan\u0131mlay\u0131n.","Preview Url":"\u00d6nizleme URL'si","Provide the preview of the current unit.":"Ge\u00e7erli birimin \u00f6nizlemesini sa\u011flay\u0131n.","Identification":"Kimlik","Define the barcode value. Focus the cursor here before scanning the product.":"Barkod de\u011ferini tan\u0131mlay\u0131n. \u00dcr\u00fcn\u00fc taramadan \u00f6nce imleci buraya odaklay\u0131n.","Define the barcode type scanned.":"Taranan barkod t\u00fcr\u00fcn\u00fc tan\u0131mlay\u0131n.","EAN 8":"EAN 8","EAN 13":"EAN 13","Barcode Type":"Barkod T\u00fcr\u00fc(cod 128 de kals\u0131n )","Select to which category the item is assigned.":"\u00d6\u011fenin hangi kategoriye atand\u0131\u011f\u0131n\u0131 se\u00e7in.","Materialized Product":"Ger\u00e7ekle\u015ftirilmi\u015f \u00dcr\u00fcn","Dematerialized Product":"Kaydi \u00dcr\u00fcn","Define the product type. Applies to all variations.":"\u00dcr\u00fcn t\u00fcr\u00fcn\u00fc tan\u0131mlay\u0131n. T\u00fcm varyasyonlar i\u00e7in ge\u00e7erlidir.","Product Type":"\u00dcr\u00fcn tipi","Define a unique SKU value for the product.":"\u00dcr\u00fcn i\u00e7in benzersiz bir SKU de\u011feri tan\u0131mlay\u0131n.","On Sale":"Sat\u0131l\u0131k","Hidden":"Gizlenmi\u015f","Define whether the product is available for sale.":"\u00dcr\u00fcn\u00fcn sat\u0131\u015fa sunulup sunulmad\u0131\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","Enable the stock management on the product. Will not work for service or uncountable products.":"\u00dcr\u00fcn \u00fczerinde stok y\u00f6netimini etkinle\u015ftirin. Servis veya say\u0131lamayan \u00fcr\u00fcnler i\u00e7in \u00e7al\u0131\u015fmaz.","Stock Management Enabled":"Stok Y\u00f6netimi Etkin","Units":"Birimler","Accurate Tracking":"Sat\u0131\u015f Ekran\u0131nda G\u00f6sterme","What unit group applies to the actual item. This group will apply during the procurement.":"Ger\u00e7ek \u00f6\u011fe i\u00e7in hangi birim grubu ge\u00e7erlidir. Bu grup, sat\u0131n alma s\u0131ras\u0131nda ge\u00e7erli olacakt\u0131r. .","Unit Group":"Birim Grubu","Determine the unit for sale.":"Sat\u0131\u015f birimini belirleyin.","Selling Unit":"Sat\u0131\u015f Birimi","Expiry":"Sona Erme","Product Expires":"\u00dcr\u00fcn S\u00fcresi Bitiyor","Set to \"No\" expiration time will be ignored.":"\"Hay\u0131r\" olarak ayarlanan sona erme s\u00fcresi yok say\u0131l\u0131r.","Prevent Sales":"Sat\u0131\u015flar\u0131 Engelle","Allow Sales":"Sat\u0131\u015fa \u0130zin Ver","Determine the action taken while a product has expired.":"Bir \u00fcr\u00fcn\u00fcn s\u00fcresi doldu\u011funda ger\u00e7ekle\u015ftirilen eylemi belirleyin.","On Expiration":"Son kullanma tarihi","Select the tax group that applies to the product\/variation.":"\u00dcr\u00fcn i\u00e7in ge\u00e7erli olan vergi grubunu se\u00e7in\/varyasyon.","Tax Group":"Vergi Grubu","Define what is the type of the tax.":"Verginin t\u00fcr\u00fcn\u00fc tan\u0131mlay\u0131n.","Images":"G\u00f6r\u00fcnt\u00fcler","Image":"Resim","Choose an image to add on the product gallery":"\u00dcr\u00fcn galerisine eklemek i\u00e7in bir resim se\u00e7in","Is Primary":"Birincil","Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.":"Resmin birincil olup olmayaca\u011f\u0131n\u0131 tan\u0131mlay\u0131n. Birden fazla birincil resim varsa, sizin i\u00e7in bir tanesi se\u00e7ilecektir.","Sku":"Sku","Materialized":"Ger\u00e7ekle\u015ftirilmi\u015f","Dematerialized":"Kaydile\u015ftirilmi\u015f","Available":"Mevcut","See Quantities":"Miktarlar\u0131 G\u00f6r","See History":"Ge\u00e7mi\u015fe Bak\u0131n","Would you like to delete selected entries ?":"Se\u00e7ili giri\u015fleri silmek ister misiniz ?","Product Histories":"\u00dcr\u00fcn Ge\u00e7mi\u015fleri","Display all product histories.":"T\u00fcm \u00fcr\u00fcn ge\u00e7mi\u015flerini g\u00f6ster.","No product histories has been registered":"Hi\u00e7bir \u00fcr\u00fcn ge\u00e7mi\u015fi kaydedilmedi","Add a new product history":"Yeni bir \u00fcr\u00fcn ge\u00e7mi\u015fi ekleyin","Create a new product history":"Yeni bir \u00fcr\u00fcn ge\u00e7mi\u015fi olu\u015fturun","Register a new product history and save it.":"Yeni bir \u00fcr\u00fcn ge\u00e7mi\u015fi kaydedin ve kaydedin.","Edit product history":"\u00dcr\u00fcn ge\u00e7mi\u015fini d\u00fczenle","Modify Product History.":"\u00dcr\u00fcn Ge\u00e7mi\u015fini De\u011fi\u015ftir.","Return to Product Histories":"\u00dcr\u00fcn Ge\u00e7mi\u015flerine D\u00f6n","After Quantity":"Miktardan Sonra","Before Quantity":"Miktardan \u00d6nce","Operation Type":"Operasyon t\u00fcr\u00fc","Order id":"Sipari\u015f Kimli\u011fi","Procurement Id":"Tedarik Kimli\u011fi","Procurement Product Id":"Tedarik \u00dcr\u00fcn Kimli\u011fi","Product Id":"\u00dcr\u00fcn kimli\u011fi","Unit Id":"Birim Kimli\u011fi","P. Quantity":"P. Miktar","N. Quantity":"N. Miktar","Defective":"Ar\u0131zal\u0131","Deleted":"Silindi","Removed":"Kald\u0131r\u0131ld\u0131","Returned":"\u0130ade","Sold":"Sat\u0131lm\u0131\u015f","Added":"Katma","Incoming Transfer":"Gelen havale","Outgoing Transfer":"Giden Transfer","Transfer Rejected":"Aktar\u0131m Reddedildi","Transfer Canceled":"Aktar\u0131m \u0130ptal Edildi","Void Return":"Ge\u00e7ersiz \u0130ade","Adjustment Return":"Ayar D\u00f6n\u00fc\u015f\u00fc","Adjustment Sale":"Ayar Sat\u0131\u015f","Product Unit Quantities List":"\u00dcr\u00fcn Birim Miktar Listesi","Display all product unit quantities.":"T\u00fcm \u00fcr\u00fcn birim miktarlar\u0131n\u0131 g\u00f6ster.","No product unit quantities has been registered":"Hi\u00e7bir \u00fcr\u00fcn birimi miktar\u0131 kaydedilmedi","Add a new product unit quantity":"Yeni bir \u00fcr\u00fcn birimi miktar\u0131 ekleyin","Create a new product unit quantity":"Yeni bir \u00fcr\u00fcn birimi miktar\u0131 olu\u015fturun","Register a new product unit quantity and save it.":"Yeni bir \u00fcr\u00fcn birimi miktar\u0131n\u0131 kaydedin ve kaydedin.","Edit product unit quantity":"\u00dcr\u00fcn birimi miktar\u0131n\u0131 d\u00fczenle","Modify Product Unit Quantity.":"\u00dcr\u00fcn Birimi Miktar\u0131n\u0131 De\u011fi\u015ftirin.","Return to Product Unit Quantities":"\u00dcr\u00fcn Birim Miktarlar\u0131na D\u00f6n","Product id":"\u00dcr\u00fcn kimli\u011fi","Providers List":"Sa\u011flay\u0131c\u0131 Listesi","Display all providers.":"T\u00fcm sa\u011flay\u0131c\u0131lar\u0131 g\u00f6ster.","No providers has been registered":"Hi\u00e7bir sa\u011flay\u0131c\u0131 kay\u0131tl\u0131 de\u011fil","Add a new provider":"Yeni bir sa\u011flay\u0131c\u0131 ekle","Create a new provider":"Yeni bir sa\u011flay\u0131c\u0131 olu\u015ftur","Register a new provider and save it.":"Yeni bir sa\u011flay\u0131c\u0131 kaydedin ve kaydedin.","Edit provider":"Sa\u011flay\u0131c\u0131y\u0131 d\u00fczenle","Modify Provider.":"Sa\u011flay\u0131c\u0131y\u0131 De\u011fi\u015ftir.","Return to Providers":"Sa\u011flay\u0131c\u0131lara D\u00f6n","Provide the provider email. Might be used to send automated email.":"Sa\u011flay\u0131c\u0131 e-postas\u0131n\u0131 sa\u011flay\u0131n. Otomatik e-posta g\u00f6ndermek i\u00e7in kullan\u0131labilir.","Contact phone number for the provider. Might be used to send automated SMS notifications.":"Sa\u011flay\u0131c\u0131 i\u00e7in ileti\u015fim telefon numaras\u0131. Otomatik SMS bildirimleri g\u00f6ndermek i\u00e7in kullan\u0131labilir.","First address of the provider.":"Sa\u011flay\u0131c\u0131n\u0131n ilk adresi.","Second address of the provider.":"Sa\u011flay\u0131c\u0131n\u0131n ikinci adresi.","Further details about the provider":"Sa\u011flay\u0131c\u0131 hakk\u0131nda daha fazla ayr\u0131nt\u0131","Amount Due":"Alacak miktar\u0131","Amount Paid":"\u00d6denen miktar","See Procurements":"Tedariklere Bak\u0131n","Registers List":"Kay\u0131t Listesi","Display all registers.":"T\u00fcm kay\u0131tlar\u0131 g\u00f6ster.","No registers has been registered":"Hi\u00e7bir kay\u0131t kay\u0131tl\u0131 de\u011fil","Add a new register":"Yeni bir kay\u0131t ekle","Create a new register":"Yeni bir kay\u0131t olu\u015ftur","Register a new register and save it.":"Yeni bir kay\u0131t yap\u0131n ve kaydedin.","Edit register":"Kayd\u0131 d\u00fczenle","Modify Register.":"Kay\u0131t De\u011fi\u015ftir.","Return to Registers":"Kay\u0131tlara D\u00f6n","Closed":"Kapal\u0131","Define what is the status of the register.":"Kay\u0131t durumunun ne oldu\u011funu tan\u0131mlay\u0131n.","Provide mode details about this cash register.":"Bu yazar kasa hakk\u0131nda mod ayr\u0131nt\u0131lar\u0131n\u0131 sa\u011flay\u0131n.","Unable to delete a register that is currently in use":"\u015eu anda kullan\u0131mda olan bir kay\u0131t silinemiyor","Used By":"Taraf\u0131ndan kullan\u0131lan","Register History List":"Kay\u0131t Ge\u00e7mi\u015fi Listesi","Display all register histories.":"T\u00fcm kay\u0131t ge\u00e7mi\u015flerini g\u00f6ster.","No register histories has been registered":"Hi\u00e7bir kay\u0131t ge\u00e7mi\u015fi kaydedilmedi","Add a new register history":"Yeni bir kay\u0131t ge\u00e7mi\u015fi ekle","Create a new register history":"Yeni bir kay\u0131t ge\u00e7mi\u015fi olu\u015fturun","Register a new register history and save it.":"Yeni bir kay\u0131t ge\u00e7mi\u015fi kaydedin ve kaydedin.","Edit register history":"Kay\u0131t ge\u00e7mi\u015fini d\u00fczenle","Modify Registerhistory.":"Kay\u0131t Ge\u00e7mi\u015fini De\u011fi\u015ftir.","Return to Register History":"Kay\u0131t Ge\u00e7mi\u015fine D\u00f6n","Register Id":"Kay\u0131t Kimli\u011fi","Action":"Action","Register Name":"Kay\u0131t Ad\u0131","Done At":"Biti\u015f Tarihi","Reward Systems List":"\u00d6d\u00fcl Sistemleri Listesi","Display all reward systems.":"T\u00fcm \u00f6d\u00fcl sistemlerini g\u00f6ster.","No reward systems has been registered":"Hi\u00e7bir \u00f6d\u00fcl sistemi kaydedilmedi","Add a new reward system":"Yeni bir \u00f6d\u00fcl sistemi ekle","Create a new reward system":"Yeni bir \u00f6d\u00fcl sistemi olu\u015fturun","Register a new reward system and save it.":"Yeni bir \u00f6d\u00fcl sistemi kaydedin ve kaydedin.","Edit reward system":"\u00d6d\u00fcl sistemini d\u00fczenle","Modify Reward System.":"\u00d6d\u00fcl Sistemini De\u011fi\u015ftir.","Return to Reward Systems":"\u00d6d\u00fcl Sistemlerine D\u00f6n","From":"\u0130tibaren","The interval start here.":"Aral\u0131k burada ba\u015fl\u0131yor.","To":"\u0130le","The interval ends here.":"Aral\u0131k burada biter.","Points earned.":"Kazan\u0131lan puanlar.","Coupon":"Kupon","Decide which coupon you would apply to the system.":"Hangi kuponu sisteme uygulayaca\u011f\u0131n\u0131za karar verin.","This is the objective that the user should reach to trigger the reward.":"Bu, kullan\u0131c\u0131n\u0131n \u00f6d\u00fcl\u00fc tetiklemek i\u00e7in ula\u015fmas\u0131 gereken hedeftir.","A short description about this system":"Bu sistem hakk\u0131nda k\u0131sa bir a\u00e7\u0131klama","Would you like to delete this reward system ?":"Bu \u00f6d\u00fcl sistemini silmek ister misiniz? ?","Delete Selected Rewards":"Se\u00e7ili \u00d6d\u00fclleri Sil","Would you like to delete selected rewards?":"Se\u00e7ilen \u00f6d\u00fclleri silmek ister misiniz?","Roles List":"Roller Listesi","Display all roles.":"T\u00fcm rolleri g\u00f6ster.","No role has been registered.":"Hi\u00e7bir rol kaydedilmedi.","Add a new role":"Yeni bir rol ekle","Create a new role":"Yeni bir rol olu\u015ftur","Create a new role and save it.":"Yeni bir rol olu\u015fturun ve kaydedin.","Edit role":"Rol\u00fc d\u00fczenle","Modify Role.":"Rol\u00fc De\u011fi\u015ftir.","Return to Roles":"Rollere D\u00f6n","Provide a name to the role.":"Role bir ad verin.","Should be a unique value with no spaces or special character":"Bo\u015fluk veya \u00f6zel karakter i\u00e7ermeyen benzersiz bir de\u011fer olmal\u0131d\u0131r","Provide more details about what this role is about.":"Bu rol\u00fcn ne hakk\u0131nda oldu\u011fu hakk\u0131nda daha fazla ayr\u0131nt\u0131 sa\u011flay\u0131n.","Unable to delete a system role.":"Bir sistem rol\u00fc silinemiyor.","You do not have enough permissions to perform this action.":"Bu eylemi ger\u00e7ekle\u015ftirmek i\u00e7in yeterli izniniz yok.","Taxes List":"Vergi Listesi","Display all taxes.":"T\u00fcm vergileri g\u00f6ster.","No taxes has been registered":"Hi\u00e7bir vergi kay\u0131tl\u0131 de\u011fil","Add a new tax":"Yeni bir vergi ekle","Create a new tax":"Yeni bir vergi olu\u015ftur","Register a new tax and save it.":"Yeni bir vergi kaydedin ve kaydedin.","Edit tax":"Vergiyi d\u00fczenle","Modify Tax.":"Vergiyi De\u011fi\u015ftir.","Return to Taxes":"Vergilere D\u00f6n\u00fc\u015f","Provide a name to the tax.":"Vergiye bir ad verin.","Assign the tax to a tax group.":"Vergiyi bir vergi grubuna atama.","Rate":"Oran","Define the rate value for the tax.":"Vergi i\u00e7in oran de\u011ferini tan\u0131mlay\u0131n.","Provide a description to the tax.":"Vergi i\u00e7in bir a\u00e7\u0131klama sa\u011flay\u0131n.","Taxes Groups List":"Vergi Gruplar\u0131 Listesi","Display all taxes groups.":"T\u00fcm vergi gruplar\u0131n\u0131 g\u00f6ster.","No taxes groups has been registered":"Hi\u00e7bir vergi grubu kaydedilmedi","Add a new tax group":"Yeni bir vergi grubu ekle","Create a new tax group":"Yeni bir vergi grubu olu\u015fturun","Register a new tax group and save it.":"Yeni bir vergi grubu kaydedin ve kaydedin.","Edit tax group":"Vergi grubunu d\u00fczenle","Modify Tax Group.":"Vergi Grubunu De\u011fi\u015ftir.","Return to Taxes Groups":"Vergi Gruplar\u0131na D\u00f6n","Provide a short description to the tax group.":"Vergi grubuna k\u0131sa bir a\u00e7\u0131klama sa\u011flay\u0131n.","Units List":"Birim Listesi","Display all units.":"T\u00fcm birimleri g\u00f6ster.","No units has been registered":"Hi\u00e7bir birim kay\u0131tl\u0131 de\u011fil","Add a new unit":"Yeni bir birim ekle","Create a new unit":"Yeni bir birim olu\u015ftur","Register a new unit and save it.":"Yeni bir birim kaydedin ve kaydedin.","Edit unit":"Birimi d\u00fczenle","Modify Unit.":"Birimi De\u011fi\u015ftir.","Return to Units":"Birimlere D\u00f6n","Preview URL":"\u00d6nizleme URL'si","Preview of the unit.":"\u00dcnitenin \u00f6nizlemesi.","Define the value of the unit.":"Birimin de\u011ferini tan\u0131mlay\u0131n.","Define to which group the unit should be assigned.":"\u00dcnitenin hangi gruba atanaca\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","Base Unit":"Ana \u00fcnite","Determine if the unit is the base unit from the group.":"Birimin gruptan temel birim olup olmad\u0131\u011f\u0131n\u0131 belirleyin.","Provide a short description about the unit.":"\u00dcnite hakk\u0131nda k\u0131sa bir a\u00e7\u0131klama sa\u011flay\u0131n.","Unit Groups List":"Birim Gruplar\u0131 Listesi","Display all unit groups.":"T\u00fcm birim gruplar\u0131n\u0131 g\u00f6ster.","No unit groups has been registered":"Hi\u00e7bir birim grubu kaydedilmedi","Add a new unit group":"Yeni bir birim grubu ekle","Create a new unit group":"Yeni bir birim grubu olu\u015ftur","Register a new unit group and save it.":"Yeni bir birim grubu kaydedin ve kaydedin.","Edit unit group":"Birim grubunu d\u00fczenle","Modify Unit Group.":"Birim Grubunu De\u011fi\u015ftir.","Return to Unit Groups":"Birim Gruplar\u0131na D\u00f6n","Users List":"Kullan\u0131c\u0131 Listesi","Display all users.":"T\u00fcm kullan\u0131c\u0131lar\u0131 g\u00f6ster.","No users has been registered":"Kay\u0131tl\u0131 kullan\u0131c\u0131 yok","Add a new user":"Yeni bir kullan\u0131c\u0131 ekle","Create a new user":"Yeni bir kullan\u0131c\u0131 olu\u015ftur","Register a new user and save it.":"Yeni bir kullan\u0131c\u0131 kaydedin ve kaydedin.","Edit user":"Kullan\u0131c\u0131y\u0131 d\u00fczenle","Modify User.":"Kullan\u0131c\u0131y\u0131 De\u011fi\u015ftir.","Return to Users":"Kullan\u0131c\u0131lara D\u00f6n","Username":"Kullan\u0131c\u0131 ad\u0131","Will be used for various purposes such as email recovery.":"E-posta kurtarma gibi \u00e7e\u015fitli ama\u00e7lar i\u00e7in kullan\u0131lacakt\u0131r.","Password":"Parola","Make a unique and secure password.":"Benzersiz ve g\u00fcvenli bir \u015fifre olu\u015fturun.","Confirm Password":"\u015eifreyi Onayla","Should be the same as the password.":"\u015eifre ile ayn\u0131 olmal\u0131.","Define whether the user can use the application.":"Kullan\u0131c\u0131n\u0131n uygulamay\u0131 kullan\u0131p kullanamayaca\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","The action you tried to perform is not allowed.":"Yapmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z i\u015fleme izin verilmiyor.","Not Enough Permissions":"Yetersiz \u0130zinler","The resource of the page you tried to access is not available or might have been deleted.":"Eri\u015fmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z sayfan\u0131n kayna\u011f\u0131 mevcut de\u011fil veya silinmi\u015f olabilir.","Not Found Exception":"\u0130stisna Bulunamad\u0131","Provide your username.":"Kullan\u0131c\u0131 ad\u0131n\u0131z\u0131 girin.","Provide your password.":"\u015eifrenizi girin.","Provide your email.":"E-postan\u0131z\u0131 sa\u011flay\u0131n.","Password Confirm":"\u015eifre onaylama","define the amount of the transaction.":"i\u015flem tutar\u0131n\u0131 tan\u0131mlay\u0131n.","Further observation while proceeding.":"Devam ederken daha fazla g\u00f6zlem.","determine what is the transaction type.":"\u0130\u015flem t\u00fcr\u00fcn\u00fcn ne oldu\u011funu belirleyin.","Add":"Ekle","Deduct":"Kesinti","Determine the amount of the transaction.":"\u0130\u015flem tutar\u0131n\u0131 belirleyin.","Further details about the transaction.":"\u0130\u015flemle ilgili di\u011fer ayr\u0131nt\u0131lar.","Define the installments for the current order.":"Mevcut sipari\u015f i\u00e7in taksit tan\u0131mlay\u0131n.","New Password":"Yeni \u015eifre","define your new password.":"yeni \u015fifrenizi tan\u0131mlay\u0131n.","confirm your new password.":"yeni \u015fifrenizi onaylay\u0131n.","choose the payment type.":"\u00f6deme t\u00fcr\u00fcn\u00fc se\u00e7in.","Provide the procurement name.":"Tedarik ad\u0131n\u0131 sa\u011flay\u0131n.","Describe the procurement.":"Tedarik i\u015flemini tan\u0131mlay\u0131n.","Define the provider.":"Sa\u011flay\u0131c\u0131y\u0131 tan\u0131mlay\u0131n.","Define what is the unit price of the product.":"\u00dcr\u00fcn\u00fcn birim fiyat\u0131n\u0131n ne oldu\u011funu tan\u0131mlay\u0131n.","Condition":"Ko\u015ful","Determine in which condition the product is returned.":"\u00dcr\u00fcn\u00fcn hangi ko\u015fulda iade edildi\u011fini belirleyin.","Other Observations":"Di\u011fer G\u00f6zlemler","Describe in details the condition of the returned product.":"\u0130ade edilen \u00fcr\u00fcn\u00fcn durumunu ayr\u0131nt\u0131l\u0131 olarak a\u00e7\u0131klay\u0131n.","Unit Group Name":"Birim Grubu Ad\u0131","Provide a unit name to the unit.":"\u00dcniteye bir \u00fcnite ad\u0131 sa\u011flay\u0131n.","Describe the current unit.":"Ge\u00e7erli birimi tan\u0131mlay\u0131n.","assign the current unit to a group.":"Ge\u00e7erli birimi bir gruba atay\u0131n.","define the unit value.":"Birim de\u011ferini tan\u0131mla.","Provide a unit name to the units group.":"Birimler grubuna bir birim ad\u0131 sa\u011flay\u0131n.","Describe the current unit group.":"Ge\u00e7erli birim grubunu tan\u0131mlay\u0131n.","POS":"SATI\u015e","Open POS":"SATI\u015eA BA\u015eLA","Create Register":"Kay\u0131t Olu\u015ftur","Use Customer Billing":"M\u00fc\u015fteri Faturaland\u0131rmas\u0131n\u0131 Kullan","Define whether the customer billing information should be used.":"M\u00fc\u015fteri fatura bilgilerinin kullan\u0131l\u0131p kullan\u0131lmayaca\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","General Shipping":"Genel Nakliye","Define how the shipping is calculated.":"G\u00f6nderinin nas\u0131l hesapland\u0131\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","Shipping Fees":"Nakliye \u00fccretleri","Define shipping fees.":"Nakliye \u00fccretlerini tan\u0131mlay\u0131n.","Use Customer Shipping":"M\u00fc\u015fteri G\u00f6nderimini Kullan","Define whether the customer shipping information should be used.":"M\u00fc\u015fteri g\u00f6nderi bilgilerinin kullan\u0131l\u0131p kullan\u0131lmayaca\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","Invoice Number":"Fatura numaras\u0131","If the procurement has been issued outside of NexoPOS, please provide a unique reference.":"Tedarik LimonPOS d\u0131\u015f\u0131nda verilmi\u015fse, l\u00fctfen benzersiz bir referans sa\u011flay\u0131n.","Delivery Time":"Teslimat s\u00fcresi","If the procurement has to be delivered at a specific time, define the moment here.":"Sat\u0131n alman\u0131n belirli bir zamanda teslim edilmesi gerekiyorsa, an\u0131 burada tan\u0131mlay\u0131n.","Automatic Approval":"Otomatik Onay","Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.":"Teslimat S\u00fcresi ger\u00e7ekle\u015fti\u011finde tedarikin otomatik olarak onayland\u0131 olarak i\u015faretlenip i\u015faretlenmeyece\u011fine karar verin.","Determine what is the actual payment status of the procurement.":"Tedarikin ger\u00e7ek \u00f6deme durumunun ne oldu\u011funu belirleyin.","Determine what is the actual provider of the current procurement.":"Mevcut tedarikin ger\u00e7ek sa\u011flay\u0131c\u0131s\u0131n\u0131n ne oldu\u011funu belirleyin.","Provide a name that will help to identify the procurement.":"Tedarikin tan\u0131mlanmas\u0131na yard\u0131mc\u0131 olacak bir ad sa\u011flay\u0131n.","First Name":"\u0130lk ad\u0131","Avatar":"Avatar","Define the image that should be used as an avatar.":"Avatar olarak kullan\u0131lmas\u0131 gereken resmi tan\u0131mlay\u0131n.","Language":"Dil","Choose the language for the current account.":"Cari hesap i\u00e7in dil se\u00e7in.","Security":"G\u00fcvenlik","Old Password":"Eski \u015eifre","Provide the old password.":"Eski \u015fifreyi sa\u011flay\u0131n.","Change your password with a better stronger password.":"Parolan\u0131z\u0131 daha g\u00fc\u00e7l\u00fc bir parolayla de\u011fi\u015ftirin.","Password Confirmation":"\u015eifre onay\u0131","The profile has been successfully saved.":"Profil ba\u015far\u0131yla kaydedildi.","The user attribute has been saved.":"Kullan\u0131c\u0131 \u00f6zelli\u011fi kaydedildi.","The options has been successfully updated.":"Se\u00e7enekler ba\u015far\u0131yla g\u00fcncellendi.","Wrong password provided":"Yanl\u0131\u015f \u015fifre sa\u011fland\u0131","Wrong old password provided":"Yanl\u0131\u015f eski \u015fifre sa\u011fland\u0131","Password Successfully updated.":"\u015eifre Ba\u015far\u0131yla g\u00fcncellendi.","Sign In — NexoPOS":"Giri\u015f Yap — LimonPOS","Sign Up — NexoPOS":"Kay\u0131t Ol — LimonPOS","Password Lost":"\u015eifremi Unuttum","Unable to proceed as the token provided is invalid.":"Sa\u011flanan jeton ge\u00e7ersiz oldu\u011fundan devam edilemiyor.","The token has expired. Please request a new activation token.":"Simgenin s\u00fcresi doldu. L\u00fctfen yeni bir etkinle\u015ftirme jetonu isteyin.","Set New Password":"Yeni \u015eifre Belirle","Database Update":"Veritaban\u0131 G\u00fcncellemesi","This account is disabled.":"Bu hesap devre d\u0131\u015f\u0131.","Unable to find record having that username.":"Bu kullan\u0131c\u0131 ad\u0131na sahip kay\u0131t bulunamad\u0131.","Unable to find record having that password.":"Bu \u015fifreye sahip kay\u0131t bulunamad\u0131.","Invalid username or password.":"Ge\u00e7ersiz kullan\u0131c\u0131 ad\u0131 veya \u015fifre.","Unable to login, the provided account is not active.":"Giri\u015f yap\u0131lam\u0131yor, sa\u011flanan hesap aktif de\u011fil.","You have been successfully connected.":"Ba\u015far\u0131yla ba\u011fland\u0131n\u0131z.","The recovery email has been send to your inbox.":"Kurtarma e-postas\u0131 gelen kutunuza g\u00f6nderildi.","Unable to find a record matching your entry.":"Giri\u015finizle e\u015fle\u015fen bir kay\u0131t bulunamad\u0131.","Your Account has been created but requires email validation.":"Hesab\u0131n\u0131z olu\u015fturuldu ancak e-posta do\u011frulamas\u0131 gerektiriyor.","Unable to find the requested user.":"\u0130stenen kullan\u0131c\u0131 bulunamad\u0131.","Unable to proceed, the provided token is not valid.":"Devam edilemiyor, sa\u011flanan jeton ge\u00e7erli de\u011fil.","Unable to proceed, the token has expired.":"Devam edilemiyor, jetonun s\u00fcresi doldu.","Your password has been updated.":"\u015fifreniz g\u00fcncellenmi\u015ftir.","Unable to edit a register that is currently in use":"\u015eu anda kullan\u0131mda olan bir kay\u0131t d\u00fczenlenemiyor","No register has been opened by the logged user.":"Oturum a\u00e7an kullan\u0131c\u0131 taraf\u0131ndan hi\u00e7bir kay\u0131t a\u00e7\u0131lmad\u0131.","The register is opened.":"Kay\u0131t a\u00e7\u0131ld\u0131.","Closing":"Kapan\u0131\u015f","Opening":"A\u00e7\u0131l\u0131\u015f","Sale":"Sat\u0131\u015f","Refund":"Geri \u00f6deme","Unable to find the category using the provided identifier":"Sa\u011flanan tan\u0131mlay\u0131c\u0131y\u0131 kullanarak kategori bulunamad\u0131","The category has been deleted.":"Kategori silindi.","Unable to find the category using the provided identifier.":"Sa\u011flanan tan\u0131mlay\u0131c\u0131y\u0131 kullanarak kategori bulunamad\u0131.","Unable to find the attached category parent":"Ekli kategori \u00fcst \u00f6\u011fesi bulunamad\u0131","The category has been correctly saved":"Kategori do\u011fru bir \u015fekilde kaydedildi","The category has been updated":"Kategori g\u00fcncellendi","The entry has been successfully deleted.":"Giri\u015f ba\u015far\u0131yla silindi.","A new entry has been successfully created.":"Yeni bir giri\u015f ba\u015far\u0131yla olu\u015fturuldu.","Unhandled crud resource":"\u0130\u015flenmemi\u015f kaba kaynak","You need to select at least one item to delete":"Silmek i\u00e7in en az bir \u00f6\u011fe se\u00e7melisiniz","You need to define which action to perform":"Hangi i\u015flemin ger\u00e7ekle\u015ftirilece\u011fini tan\u0131mlaman\u0131z gerekir","Unable to proceed. No matching CRUD resource has been found.":"Devam edilemiyor. E\u015fle\u015fen CRUD kayna\u011f\u0131 bulunamad\u0131.","Create Coupon":"Kupon Olu\u015ftur","helps you creating a coupon.":"kupon olu\u015fturman\u0131za yard\u0131mc\u0131 olur.","Edit Coupon":"Kuponu D\u00fczenle","Editing an existing coupon.":"Mevcut bir kuponu d\u00fczenleme.","Invalid Request.":"Ge\u00e7ersiz istek.","Unable to delete a group to which customers are still assigned.":"M\u00fc\u015fterilerin h\u00e2l\u00e2 atand\u0131\u011f\u0131 bir grup silinemiyor.","The customer group has been deleted.":"M\u00fc\u015fteri grubu silindi.","Unable to find the requested group.":"\u0130stenen grup bulunamad\u0131.","The customer group has been successfully created.":"M\u00fc\u015fteri grubu ba\u015far\u0131yla olu\u015fturuldu.","The customer group has been successfully saved.":"M\u00fc\u015fteri grubu ba\u015far\u0131yla kaydedildi.","Unable to transfer customers to the same account.":"M\u00fc\u015fteriler ayn\u0131 hesaba aktar\u0131lam\u0131yor.","The categories has been transferred to the group %s.":"Kategoriler gruba aktar\u0131ld\u0131 %s.","No customer identifier has been provided to proceed to the transfer.":"Aktarma i\u015flemine devam etmek i\u00e7in hi\u00e7bir m\u00fc\u015fteri tan\u0131mlay\u0131c\u0131s\u0131 sa\u011flanmad\u0131.","Unable to find the requested group using the provided id.":"Sa\u011flanan kimli\u011fi kullanarak istenen grup bulunamad\u0131.","\"%s\" is not an instance of \"FieldsService\"":"\"%s\" \u00f6rne\u011fi de\u011fil \"Alan hizmeti\"","Manage Medias":"Medyalar\u0131 Y\u00f6net","The operation was successful.":"operasyon ba\u015far\u0131l\u0131 oldu.","Modules List":"Mod\u00fcl Listesi","List all available modules.":"Mevcut t\u00fcm mod\u00fclleri listele.","Upload A Module":"Bir Mod\u00fcl Y\u00fckle","Extends NexoPOS features with some new modules.":"LimonPOS \u00f6zelliklerini baz\u0131 yeni mod\u00fcllerle geni\u015fletiyor.","The notification has been successfully deleted":"Bildirim ba\u015far\u0131yla silindi","All the notifications have been cleared.":"T\u00fcm bildirimler temizlendi.","Order Invoice — %s":"Sipari\u015f faturas\u0131 — %s","Order Receipt — %s":"Sipari\u015f makbuzu — %s","The printing event has been successfully dispatched.":"Yazd\u0131rma olay\u0131 ba\u015far\u0131yla g\u00f6nderildi.","There is a mismatch between the provided order and the order attached to the instalment.":"Verilen sipari\u015f ile taksite eklenen sipari\u015f aras\u0131nda uyumsuzluk var.","Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.":"Stoklanm\u0131\u015f bir tedarik d\u00fczenlenemiyor. Bir ayarlama yapmay\u0131 d\u00fc\u015f\u00fcn\u00fcn veya tedariki silin.","New Procurement":"Yeni Tedarik","Edit Procurement":"Tedarik D\u00fczenle","Perform adjustment on existing procurement.":"Mevcut sat\u0131n alma \u00fczerinde ayarlama yap\u0131n.","%s - Invoice":"%s - Fatura","list of product procured.":"Tedarik edilen \u00fcr\u00fcn listesi.","The product price has been refreshed.":"\u00dcr\u00fcn fiyat\u0131 yenilenmi\u015ftir..","The single variation has been deleted.":"Tek varyasyon silindi.","Edit a product":"Bir \u00fcr\u00fcn\u00fc d\u00fczenleyin","Makes modifications to a product":"Bir \u00fcr\u00fcnde de\u011fi\u015fiklik yapar","Create a product":"Bir \u00fcr\u00fcn olu\u015fturun","Add a new product on the system":"Sisteme yeni bir \u00fcr\u00fcn ekleyin","Stock Adjustment":"Stok Ayar\u0131","Adjust stock of existing products.":"Mevcut \u00fcr\u00fcnlerin stokunu ayarlay\u0131n.","Lost":"Kay\u0131p","No stock is provided for the requested product.":"Talep edilen \u00fcr\u00fcn i\u00e7in stok sa\u011flanmamaktad\u0131r..","The product unit quantity has been deleted.":"\u00dcr\u00fcn birim miktar\u0131 silindi.","Unable to proceed as the request is not valid.":"\u0130stek ge\u00e7erli olmad\u0131\u011f\u0131 i\u00e7in devam edilemiyor.","Unsupported action for the product %s.":"\u00dcr\u00fcn i\u00e7in desteklenmeyen i\u015flem %s.","The stock has been adjustment successfully.":"Stok ba\u015far\u0131yla ayarland\u0131.","Unable to add the product to the cart as it has expired.":"\u00dcr\u00fcn son kullanma tarihi ge\u00e7ti\u011fi i\u00e7in sepete eklenemiyor.","Unable to add a product that has accurate tracking enabled, using an ordinary barcode.":"S\u0131radan bir barkod kullanarak do\u011fru izlemenin etkinle\u015ftirildi\u011fi bir \u00fcr\u00fcn eklenemiyor.","There is no products matching the current request.":"Mevcut istekle e\u015fle\u015fen \u00fcr\u00fcn yok.","Print Labels":"Etiketleri Yazd\u0131r","Customize and print products labels.":"\u00dcr\u00fcn etiketlerini \u00f6zelle\u015ftirin ve yazd\u0131r\u0131n.","Sales Report":"Sat\u0131\u015f raporu","Provides an overview over the sales during a specific period":"Belirli bir d\u00f6nemdeki sat\u0131\u015flara genel bir bak\u0131\u015f sa\u011flar","Sold Stock":"Sat\u0131lan Stok","Provides an overview over the sold stock during a specific period.":"Belirli bir d\u00f6nemde sat\u0131lan stok hakk\u0131nda bir genel bak\u0131\u015f sa\u011flar.","Profit Report":"Kar Raporu","Provides an overview of the provide of the products sold.":"Sat\u0131lan \u00fcr\u00fcnlerin sa\u011flanmas\u0131na ili\u015fkin bir genel bak\u0131\u015f sa\u011flar.","Provides an overview on the activity for a specific period.":"Belirli bir d\u00f6nem i\u00e7in aktiviteye genel bir bak\u0131\u015f sa\u011flar.","Annual Report":"Y\u0131ll\u0131k Rapor","Invalid authorization code provided.":"Ge\u00e7ersiz yetkilendirme kodu sa\u011fland\u0131.","The database has been successfully seeded.":"Veritaban\u0131 ba\u015far\u0131yla tohumland\u0131.","Settings Page Not Found":"Ayarlar Sayfas\u0131 Bulunamad\u0131","Customers Settings":"M\u00fc\u015fteri Ayarlar\u0131","Configure the customers settings of the application.":"Uygulaman\u0131n m\u00fc\u015fteri ayarlar\u0131n\u0131 yap\u0131land\u0131r\u0131n.","General Settings":"Genel Ayarlar","Configure the general settings of the application.":"Uygulaman\u0131n genel ayarlar\u0131n\u0131 yap\u0131land\u0131r\u0131n.","Orders Settings":"Sipari\u015f Ayarlar\u0131","POS Settings":"Sat\u0131\u015f Ayarlar\u0131","Configure the pos settings.":"Sat\u0131\u015f ayarlar\u0131n\u0131 yap\u0131land\u0131r\u0131n.","Workers Settings":"\u00c7al\u0131\u015fan Ayarlar\u0131","%s is not an instance of \"%s\".":"%s \u00f6rne\u011fi de\u011fil \"%s\".","Unable to find the requested product tax using the provided id":"Sa\u011flanan kimlik kullan\u0131larak istenen \u00fcr\u00fcn vergisi bulunamad\u0131","Unable to find the requested product tax using the provided identifier.":"Verilen tan\u0131mlay\u0131c\u0131 kullan\u0131larak istenen \u00fcr\u00fcn vergisi bulunamad\u0131.","The product tax has been created.":"\u00dcr\u00fcn vergisi olu\u015fturuldu.","The product tax has been updated":"\u00dcr\u00fcn vergisi g\u00fcncellendi","Unable to retrieve the requested tax group using the provided identifier \"%s\".":"Sa\u011flanan tan\u0131mlay\u0131c\u0131 kullan\u0131larak istenen vergi grubu al\u0131nam\u0131yor \"%s\".","Permission Manager":"\u0130zin Y\u00f6neticisi","Manage all permissions and roles":"T\u00fcm izinleri ve rolleri y\u00f6netin","My Profile":"Profilim","Change your personal settings":"Ki\u015fisel ayarlar\u0131n\u0131z\u0131 de\u011fi\u015ftirin","The permissions has been updated.":"\u0130zinler g\u00fcncellendi.","Sunday":"Pazar","Monday":"Pazartesi","Tuesday":"Sal\u0131","Wednesday":"\u00c7ar\u015famba","Thursday":"Per\u015fembe","Friday":"Cuma","Saturday":"Cumartesi","The migration has successfully run.":"Ta\u015f\u0131ma ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131.","Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.":"Ayarlar sayfas\u0131 ba\u015flat\u0131lam\u0131yor. \"%s\" tan\u0131mlay\u0131c\u0131s\u0131 somutla\u015ft\u0131r\u0131lamaz.","Unable to register. The registration is closed.":"Kay\u0131t yap\u0131lam\u0131yor. Kay\u0131t kapand\u0131.","Hold Order Cleared":"Bekletme Emri Temizlendi","[NexoPOS] Activate Your Account":"[LimonPOS] Hesab\u0131n\u0131z\u0131 Etkinle\u015ftirin","[NexoPOS] A New User Has Registered":"[LimonPOS] Yeni Bir Kullan\u0131c\u0131 Kaydoldu","[NexoPOS] Your Account Has Been Created":"[LimonPOS] Hesab\u0131n\u0131z olu\u015fturuldu","Unable to find the permission with the namespace \"%s\".":"Ad alan\u0131 ile izin bulunam\u0131yor \"%s\".","Voided":"Ge\u00e7ersiz","Refunded":"Geri \u00f6dendi","Partially Refunded":"K\u0131smen Geri \u00d6deme Yap\u0131ld\u0131","The register has been successfully opened":"Kay\u0131t ba\u015far\u0131yla a\u00e7\u0131ld\u0131","The register has been successfully closed":"Kay\u0131t ba\u015far\u0131yla kapat\u0131ld\u0131","The provided amount is not allowed. The amount should be greater than \"0\". ":"Sa\u011flanan miktara izin verilmiyor. Miktar \u015fundan b\u00fcy\u00fck olmal\u0131d\u0131r: \"0\". ","The cash has successfully been stored":"Nakit ba\u015far\u0131yla sakland\u0131","Not enough fund to cash out.":"Para \u00e7ekmek i\u00e7in yeterli fon yok.","The cash has successfully been disbursed.":"Nakit ba\u015far\u0131yla da\u011f\u0131t\u0131ld\u0131.","In Use":"Kullan\u0131mda","Opened":"A\u00e7\u0131ld\u0131","Delete Selected entries":"Se\u00e7ili giri\u015fleri sil","%s entries has been deleted":"%s Giri\u015fler silindi","%s entries has not been deleted":"%s Giri\u015fler silinmedi","Unable to find the customer using the provided id.":"Sa\u011flanan kimli\u011fi kullanarak m\u00fc\u015fteri bulunamad\u0131.","The customer has been deleted.":"M\u00fc\u015fteri silindi.","The customer has been created.":"M\u00fc\u015fteri olu\u015fturuldu.","Unable to find the customer using the provided ID.":"Sa\u011flanan kimli\u011fi kullanarak m\u00fc\u015fteri bulunamad\u0131.","The customer has been edited.":"M\u00fc\u015fteri d\u00fczenlendi.","Unable to find the customer using the provided email.":"Sa\u011flanan e-postay\u0131 kullanarak m\u00fc\u015fteri bulunamad\u0131.","The customer account has been updated.":"M\u00fc\u015fteri hesab\u0131 g\u00fcncellendi.","Issuing Coupon Failed":"Kupon Verilemedi","Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.":"\"%s\" \u00f6d\u00fcl\u00fcne eklenmi\u015f bir kupon uygulanam\u0131yor. Kupon art\u0131k yok gibi g\u00f6r\u00fcn\u00fcyor.","Unable to find a coupon with the provided code.":"Sa\u011flanan kodla bir kupon bulunam\u0131yor.","The coupon has been updated.":"Kupon g\u00fcncellendi.","The group has been created.":"Grup olu\u015fturuldu.","The media has been deleted":"Medya silindi","Unable to find the media.":"Medya bulunamad\u0131.","Unable to find the requested file.":"\u0130stenen dosya bulunamad\u0131.","Unable to find the media entry":"Medya giri\u015fi bulunamad\u0131","Payment Types":"\u00d6deme Tipleri","Medias":"Medyalar","List":"Liste","Customers Groups":"M\u00fc\u015fteri Gruplar\u0131","Create Group":"Grup olu\u015ftur","Reward Systems":"\u00d6d\u00fcl Sistemleri","Create Reward":"\u00d6d\u00fcl Olu\u015ftur","List Coupons":"Kuponlar\u0131 Listele","Providers":"Sa\u011flay\u0131c\u0131lar","Create A Provider":"Sa\u011flay\u0131c\u0131 Olu\u015ftur","Inventory":"Envanter","Create Product":"\u00dcr\u00fcn Olu\u015ftur","Create Category":"Kategori Olu\u015ftur","Create Unit":"Birim Olu\u015ftur","Unit Groups":"Birim Gruplar\u0131","Create Unit Groups":"Birim Gruplar\u0131 Olu\u015fturun","Taxes Groups":"Vergi Gruplar\u0131","Create Tax Groups":"Vergi Gruplar\u0131 Olu\u015fturun","Create Tax":"Vergi Olu\u015ftur","Modules":"Mod\u00fcller","Upload Module":"Mod\u00fcl Y\u00fckle","Users":"Kullan\u0131c\u0131lar","Create User":"Kullan\u0131c\u0131 olu\u015ftur","Roles":"Roller","Create Roles":"Rol Olu\u015ftur","Permissions Manager":"\u0130zin Y\u00f6neticisi","Procurements":"Tedarikler","Reports":"Raporlar","Sale Report":"Sat\u0131\u015f Raporu","Incomes & Loosses":"Gelirler ve Zararlar","Invoice Settings":"Fatura Ayarlar\u0131","Workers":"i\u015f\u00e7iler","Unable to locate the requested module.":"\u0130stenen mod\u00fcl bulunamad\u0131.","The module \"%s\" has been disabled as the dependency \"%s\" is missing. ":"\"%s\" mod\u00fcl\u00fc, \"%s\" ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 olmad\u0131\u011f\u0131 i\u00e7in devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131. ","The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ":"\"%s\" mod\u00fcl\u00fc, \"%s\" ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 etkinle\u015ftirilmedi\u011finden devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131. ","Unable to detect the folder from where to perform the installation.":"Kurulumun ger\u00e7ekle\u015ftirilece\u011fi klas\u00f6r alg\u0131lanam\u0131yor.","The uploaded file is not a valid module.":"Y\u00fcklenen dosya ge\u00e7erli bir mod\u00fcl de\u011fil.","The module has been successfully installed.":"Mod\u00fcl ba\u015far\u0131yla kuruldu.","The migration run successfully.":"Ta\u015f\u0131ma ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131.","The module has correctly been enabled.":"Mod\u00fcl do\u011fru \u015fekilde etkinle\u015ftirildi.","Unable to enable the module.":"Mod\u00fcl etkinle\u015ftirilemiyor.","The Module has been disabled.":"Mod\u00fcl devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","Unable to disable the module.":"Mod\u00fcl devre d\u0131\u015f\u0131 b\u0131rak\u0131lam\u0131yor.","Unable to proceed, the modules management is disabled.":"Devam edilemiyor, mod\u00fcl y\u00f6netimi devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","Missing required parameters to create a notification":"Bildirim olu\u015fturmak i\u00e7in gerekli parametreler eksik","The order has been placed.":"sipari\u015f verildi.","The percentage discount provided is not valid.":"Sa\u011flanan y\u00fczde indirim ge\u00e7erli de\u011fil.","A discount cannot exceed the sub total value of an order.":"\u0130ndirim, sipari\u015fin alt toplam de\u011ferini a\u015famaz.","No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.":"\u015eu anda herhangi bir \u00f6deme beklenmiyor. M\u00fc\u015fteri erken \u00f6demek istiyorsa, taksit \u00f6deme tarihini ayarlamay\u0131 d\u00fc\u015f\u00fcn\u00fcn.","The payment has been saved.":"\u00f6deme kaydedildi.","Unable to edit an order that is completely paid.":"Tamam\u0131 \u00f6denmi\u015f bir sipari\u015f d\u00fczenlenemiyor.","Unable to proceed as one of the previous submitted payment is missing from the order.":"\u00d6nceki g\u00f6nderilen \u00f6demelerden biri sipari\u015fte eksik oldu\u011fundan devam edilemiyor.","The order payment status cannot switch to hold as a payment has already been made on that order.":"S\u00f6z konusu sipari\u015fte zaten bir \u00f6deme yap\u0131ld\u0131\u011f\u0131ndan sipari\u015f \u00f6deme durumu beklemeye ge\u00e7emez.","Unable to proceed. One of the submitted payment type is not supported.":"Devam edilemiyor. G\u00f6nderilen \u00f6deme t\u00fcrlerinden biri desteklenmiyor.","Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.":"Devam edilemiyor, \"%s\" \u00fcr\u00fcn\u00fcnde geri al\u0131namayan bir birim var. Silinmi\u015f olabilir.","Unable to find the customer using the provided ID. The order creation has failed.":"Sa\u011flanan kimli\u011fi kullanarak m\u00fc\u015fteri bulunamad\u0131. Sipari\u015f olu\u015fturma ba\u015far\u0131s\u0131z oldu.","Unable to proceed a refund on an unpaid order.":"\u00d6denmemi\u015f bir sipari\u015f i\u00e7in geri \u00f6deme yap\u0131lam\u0131yor.","The current credit has been issued from a refund.":"Mevcut kredi bir geri \u00f6demeden \u00e7\u0131kar\u0131ld\u0131.","The order has been successfully refunded.":"Sipari\u015f ba\u015far\u0131yla geri \u00f6dendi.","unable to proceed to a refund as the provided status is not supported.":"sa\u011flanan durum desteklenmedi\u011fi i\u00e7in geri \u00f6demeye devam edilemiyor.","The product %s has been successfully refunded.":"%s \u00fcr\u00fcn\u00fc ba\u015far\u0131yla iade edildi.","Unable to find the order product using the provided id.":"Sa\u011flanan kimli\u011fi kullanarak sipari\u015f \u00fcr\u00fcn\u00fc bulunamad\u0131.","Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier":"Pivot olarak \"%s\" ve tan\u0131mlay\u0131c\u0131 olarak \"%s\" kullan\u0131larak istenen sipari\u015f bulunamad\u0131","Unable to fetch the order as the provided pivot argument is not supported.":"Sa\u011flanan pivot ba\u011f\u0131ms\u0131z de\u011fi\u015fkeni desteklenmedi\u011finden sipari\u015f getirilemiyor.","The product has been added to the order \"%s\"":"\u00dcr\u00fcn sipari\u015fe eklendi \"%s\"","the order has been successfully computed.":"sipari\u015f ba\u015far\u0131yla tamamland\u0131.","The order has been deleted.":"sipari\u015f silindi.","The product has been successfully deleted from the order.":"\u00dcr\u00fcn sipari\u015ften ba\u015far\u0131yla silindi.","Unable to find the requested product on the provider order.":"Sa\u011flay\u0131c\u0131 sipari\u015finde istenen \u00fcr\u00fcn bulunamad\u0131.","Unpaid Orders Turned Due":"\u00d6denmemi\u015f Sipari\u015flerin S\u00fcresi Doldu","No orders to handle for the moment.":"\u015eu an i\u00e7in i\u015fleme al\u0131nacak emir yok.","The order has been correctly voided.":"Sipari\u015f do\u011fru bir \u015fekilde iptal edildi.","Unable to edit an already paid instalment.":"Zaten \u00f6denmi\u015f bir taksit d\u00fczenlenemiyor.","The instalment has been saved.":"Taksit kaydedildi.","The instalment has been deleted.":"taksit silindi.","The defined amount is not valid.":"Tan\u0131mlanan miktar ge\u00e7erli de\u011fil.","No further instalments is allowed for this order. The total instalment already covers the order total.":"Bu sipari\u015f i\u00e7in ba\u015fka taksitlere izin verilmez. Toplam taksit zaten sipari\u015f toplam\u0131n\u0131 kaps\u0131yor.","The instalment has been created.":"Taksit olu\u015fturuldu.","The provided status is not supported.":"Sa\u011flanan durum desteklenmiyor.","The order has been successfully updated.":"Sipari\u015f ba\u015far\u0131yla g\u00fcncellendi.","Unable to find the requested procurement using the provided identifier.":"Sa\u011flanan tan\u0131mlay\u0131c\u0131 kullan\u0131larak istenen tedarik bulunamad\u0131.","Unable to find the assigned provider.":"Atanan sa\u011flay\u0131c\u0131 bulunamad\u0131.","The procurement has been created.":"Tedarik olu\u015fturuldu.","Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.":"Halihaz\u0131rda stoklanm\u0131\u015f bir tedarik d\u00fczenlenemiyor. L\u00fctfen ger\u00e7ekle\u015ftirmeyi ve stok ayarlamas\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcn.","The provider has been edited.":"Sa\u011flay\u0131c\u0131 d\u00fczenlendi.","Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"":"\"%s\" referans\u0131n\u0131 \"%s\" olarak kullanan \u00fcr\u00fcn i\u00e7in birim grup kimli\u011fine sahip olunam\u0131yor","The operation has completed.":"operasyon tamamland\u0131.","The procurement has been refreshed.":"\u0130hale yenilendi.","The procurement has been reset.":"Tedarik s\u0131f\u0131rland\u0131.","The procurement products has been deleted.":"Tedarik \u00fcr\u00fcnleri silindi.","The procurement product has been updated.":"Tedarik \u00fcr\u00fcn\u00fc g\u00fcncellendi.","Unable to find the procurement product using the provided id.":"Sa\u011flanan kimli\u011fi kullanarak tedarik \u00fcr\u00fcn\u00fc bulunamad\u0131.","The product %s has been deleted from the procurement %s":"%s \u00fcr\u00fcn\u00fc %s tedarikinden silindi","The product with the following ID \"%s\" is not initially included on the procurement":"A\u015fa\u011f\u0131daki \"%s\" kimli\u011fine sahip \u00fcr\u00fcn, ba\u015flang\u0131\u00e7ta tedarike dahil edilmedi","The procurement products has been updated.":"Tedarik \u00fcr\u00fcnleri g\u00fcncellendi.","Procurement Automatically Stocked":"Tedarik Otomatik Olarak Stoklan\u0131r","Draft":"Taslak","The category has been created":"Kategori olu\u015fturuldu","Unable to find the product using the provided id.":"Sa\u011flanan kimli\u011fi kullanarak \u00fcr\u00fcn bulunamad\u0131.","Unable to find the requested product using the provided SKU.":"Sa\u011flanan SKU kullan\u0131larak istenen \u00fcr\u00fcn bulunamad\u0131.","The variable product has been created.":"De\u011fi\u015fken \u00fcr\u00fcn olu\u015fturuldu.","The provided barcode \"%s\" is already in use.":"Sa\u011flanan barkod \"%s\" zaten kullan\u0131mda.","The provided SKU \"%s\" is already in use.":"Sa\u011flanan SKU \"%s\" zaten kullan\u0131mda.","The product has been saved.":"\u00dcr\u00fcn kaydedildi.","The provided barcode is already in use.":"Sa\u011flanan barkod zaten kullan\u0131mda.","The provided SKU is already in use.":"Sa\u011flanan SKU zaten kullan\u0131mda.","The product has been updated":"\u00dcr\u00fcn g\u00fcncellendi","The variable product has been updated.":"De\u011fi\u015fken \u00fcr\u00fcn g\u00fcncellendi.","The product variations has been reset":"\u00dcr\u00fcn varyasyonlar\u0131 s\u0131f\u0131rland\u0131","The product has been reset.":"\u00dcr\u00fcn s\u0131f\u0131rland\u0131.","The product \"%s\" has been successfully deleted":"\"%s\" \u00fcr\u00fcn\u00fc ba\u015far\u0131yla silindi","Unable to find the requested variation using the provided ID.":"Sa\u011flanan kimlik kullan\u0131larak istenen varyasyon bulunamad\u0131.","The product stock has been updated.":"\u00dcr\u00fcn sto\u011fu g\u00fcncellendi.","The action is not an allowed operation.":"Eylem izin verilen bir i\u015flem de\u011fil.","The product quantity has been updated.":"\u00dcr\u00fcn miktar\u0131 g\u00fcncellendi.","There is no variations to delete.":"Silinecek bir varyasyon yok.","There is no products to delete.":"Silinecek \u00fcr\u00fcn yok.","The product variation has been successfully created.":"\u00dcr\u00fcn varyasyonu ba\u015far\u0131yla olu\u015fturuldu.","The product variation has been updated.":"\u00dcr\u00fcn varyasyonu g\u00fcncellendi.","The provider has been created.":"Sa\u011flay\u0131c\u0131 olu\u015fturuldu.","The provider has been updated.":"Sa\u011flay\u0131c\u0131 g\u00fcncellendi.","Unable to find the provider using the specified id.":"Belirtilen kimli\u011fi kullanarak sa\u011flay\u0131c\u0131 bulunamad\u0131.","The provider has been deleted.":"Sa\u011flay\u0131c\u0131 silindi.","Unable to find the provider using the specified identifier.":"Belirtilen tan\u0131mlay\u0131c\u0131y\u0131 kullanarak sa\u011flay\u0131c\u0131 bulunamad\u0131.","The provider account has been updated.":"Sa\u011flay\u0131c\u0131 hesab\u0131 g\u00fcncellendi.","The procurement payment has been deducted.":"Tedarik \u00f6demesi kesildi.","The dashboard report has been updated.":"Kontrol paneli raporu g\u00fcncellendi.","Untracked Stock Operation":"Takipsiz Stok \u0130\u015flemi","Unsupported action":"Desteklenmeyen i\u015flem","The expense has been correctly saved.":"Masraf do\u011fru bir \u015fekilde kaydedildi.","The table has been truncated.":"Tablo k\u0131salt\u0131ld\u0131.","Untitled Settings Page":"Ads\u0131z Ayarlar Sayfas\u0131","No description provided for this settings page.":"Bu ayarlar sayfas\u0131 i\u00e7in a\u00e7\u0131klama sa\u011flanmad\u0131.","The form has been successfully saved.":"Form ba\u015far\u0131yla kaydedildi.","Unable to reach the host":"Ana bilgisayara ula\u015f\u0131lam\u0131yor","Unable to connect to the database using the credentials provided.":"Sa\u011flanan kimlik bilgileri kullan\u0131larak veritaban\u0131na ba\u011flan\u0131lam\u0131yor.","Unable to select the database.":"Veritaban\u0131 se\u00e7ilemiyor.","Access denied for this user.":"Bu kullan\u0131c\u0131 i\u00e7in eri\u015fim reddedildi.","The connexion with the database was successful":"Veritaban\u0131yla ba\u011flant\u0131 ba\u015far\u0131l\u0131 oldu","Cash":"Nakit \u00d6deme","Bank Payment":"Kartla \u00d6deme","NexoPOS has been successfully installed.":"LimonPOS ba\u015far\u0131yla kuruldu.","A tax cannot be his own parent.":"Bir vergi kendi ebeveyni olamaz.","The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".":"Vergi hiyerar\u015fisi 1 ile s\u0131n\u0131rl\u0131d\u0131r. Bir alt verginin vergi t\u00fcr\u00fc \"grupland\u0131r\u0131lm\u0131\u015f\" olarak ayarlanmamal\u0131d\u0131r.","Unable to find the requested tax using the provided identifier.":"Sa\u011flanan tan\u0131mlay\u0131c\u0131 kullan\u0131larak istenen vergi bulunamad\u0131.","The tax group has been correctly saved.":"Vergi grubu do\u011fru bir \u015fekilde kaydedildi.","The tax has been correctly created.":"Vergi do\u011fru bir \u015fekilde olu\u015fturuldu.","The tax has been successfully deleted.":"Vergi ba\u015far\u0131yla silindi.","The Unit Group has been created.":"Birim Grubu olu\u015fturuldu.","The unit group %s has been updated.":"%s birim grubu g\u00fcncellendi.","Unable to find the unit group to which this unit is attached.":"Bu birimin ba\u011fl\u0131 oldu\u011fu birim grubu bulunamad\u0131.","The unit has been saved.":"\u00dcnite kaydedildi.","Unable to find the Unit using the provided id.":"Sa\u011flanan kimli\u011fi kullanarak Birim bulunamad\u0131.","The unit has been updated.":"Birim g\u00fcncellendi.","The unit group %s has more than one base unit":"%s birim grubu birden fazla temel birime sahip","The unit has been deleted.":"Birim silindi.","unable to find this validation class %s.":"bu do\u011frulama s\u0131n\u0131f\u0131 %s bulunamad\u0131.","Enable Reward":"\u00d6d\u00fcl\u00fc Etkinle\u015ftir","Will activate the reward system for the customers.":"M\u00fc\u015fteriler i\u00e7in \u00f6d\u00fcl sistemini etkinle\u015ftirecek.","Default Customer Account":"Varsay\u0131lan M\u00fc\u015fteri Hesab\u0131","Default Customer Group":"Varsay\u0131lan M\u00fc\u015fteri Grubu","Select to which group each new created customers are assigned to.":"Her yeni olu\u015fturulan m\u00fc\u015fterinin hangi gruba atanaca\u011f\u0131n\u0131 se\u00e7in.","Enable Credit & Account":"Kredi ve Hesab\u0131 Etkinle\u015ftir","The customers will be able to make deposit or obtain credit.":"M\u00fc\u015fteriler para yat\u0131rabilecek veya kredi alabilecek.","Store Name":"D\u00fckkan ad\u0131","This is the store name.":"Bu ma\u011faza ad\u0131d\u0131r.","Store Address":"Ma\u011faza Adresi","The actual store address.":"Ger\u00e7ek ma\u011faza adresi.","Store City":"Ma\u011faza \u015eehri","The actual store city.":"Ger\u00e7ek ma\u011faza \u015fehri.","Store Phone":"Ma\u011faza Telefonu","The phone number to reach the store.":"Ma\u011fazaya ula\u015fmak i\u00e7in telefon numaras\u0131.","Store Email":"E-postay\u0131 Sakla","The actual store email. Might be used on invoice or for reports.":"Ger\u00e7ek ma\u011faza e-postas\u0131. Fatura veya raporlar i\u00e7in kullan\u0131labilir.","Store PO.Box":"Posta Kodunu Sakla","The store mail box number.":"Ma\u011faza posta kutusu numaras\u0131.","Store Fax":"Faks\u0131 Sakla","The store fax number.":"Ma\u011faza faks numaras\u0131.","Store Additional Information":"Ek Bilgileri Saklay\u0131n","Store additional information.":"Ek bilgileri saklay\u0131n.","Store Square Logo":"Ma\u011faza Meydan\u0131 Logosu","Choose what is the square logo of the store.":"Ma\u011fazan\u0131n kare logosunun ne oldu\u011funu se\u00e7in.","Store Rectangle Logo":"Dikd\u00f6rtgen Logo Ma\u011fazas\u0131","Choose what is the rectangle logo of the store.":"Ma\u011fazan\u0131n dikd\u00f6rtgen logosunun ne oldu\u011funu se\u00e7in.","Define the default fallback language.":"Varsay\u0131lan yedek dili tan\u0131mlay\u0131n.","Currency":"Para birimi","Currency Symbol":"Para Birimi Sembol\u00fc","This is the currency symbol.":"Bu para birimi sembol\u00fcd\u00fcr.","Currency ISO":"Para birimi ISO","The international currency ISO format.":"Uluslararas\u0131 para birimi ISO format\u0131.","Currency Position":"Para Birimi Pozisyonu","Before the amount":"Miktardan \u00f6nce","After the amount":"Miktardan sonra","Define where the currency should be located.":"Para biriminin nerede bulunmas\u0131 gerekti\u011fini tan\u0131mlay\u0131n.","Preferred Currency":"Tercih Edilen Para Birimi","ISO Currency":"ISO Para Birimi","Symbol":"Sembol","Determine what is the currency indicator that should be used.":"Kullan\u0131lmas\u0131 gereken para birimi g\u00f6stergesinin ne oldu\u011funu belirleyin.","Currency Thousand Separator":"D\u00f6viz Bin Ay\u0131r\u0131c\u0131","Currency Decimal Separator":"Para Birimi Ondal\u0131k Ay\u0131r\u0131c\u0131","Define the symbol that indicate decimal number. By default \".\" is used.":"Ondal\u0131k say\u0131y\u0131 g\u00f6steren sembol\u00fc tan\u0131mlay\u0131n. Varsay\u0131lan olarak \".\" kullan\u0131l\u0131r.","Currency Precision":"Para Birimi Hassasiyeti","%s numbers after the decimal":"Ondal\u0131ktan sonraki %s say\u0131lar","Date Format":"Tarih format\u0131","This define how the date should be defined. The default format is \"Y-m-d\".":"Bu, tarihin nas\u0131l tan\u0131mlanmas\u0131 gerekti\u011fini tan\u0131mlar. Varsay\u0131lan bi\u00e7im \"Y-m-d\" \u015feklindedir.","Registration":"kay\u0131t","Registration Open":"Kay\u0131t A\u00e7\u0131k","Determine if everyone can register.":"Herkesin kay\u0131t olup olamayaca\u011f\u0131n\u0131 belirleyin.","Registration Role":"Kay\u0131t Rol\u00fc","Select what is the registration role.":"Kay\u0131t rol\u00fcn\u00fcn ne oldu\u011funu se\u00e7in.","Requires Validation":"Do\u011frulama Gerektirir","Force account validation after the registration.":"Kay\u0131ttan sonra hesap do\u011frulamas\u0131n\u0131 zorla.","Allow Recovery":"Kurtarmaya \u0130zin Ver","Allow any user to recover his account.":"Herhangi bir kullan\u0131c\u0131n\u0131n hesab\u0131n\u0131 kurtarmas\u0131na izin verin.","Receipts":"Gelirler","Receipt Template":"Makbuz \u015eablonu","Default":"Varsay\u0131lan","Choose the template that applies to receipts":"Makbuzlar i\u00e7in ge\u00e7erli olan \u015fablonu se\u00e7in","Receipt Logo":"Makbuz logosu","Provide a URL to the logo.":"Logoya bir URL sa\u011flay\u0131n.","Receipt Footer":"Makbuz Altbilgisi","If you would like to add some disclosure at the bottom of the receipt.":"Makbuzun alt\u0131na bir a\u00e7\u0131klama eklemek isterseniz.","Column A":"A s\u00fctunu","Column B":"B s\u00fctunu","Order Code Type":"Sipari\u015f Kodu T\u00fcr\u00fc","Determine how the system will generate code for each orders.":"Sistemin her sipari\u015f i\u00e7in nas\u0131l kod \u00fcretece\u011fini belirleyin.","Sequential":"Ard\u0131\u015f\u0131k","Random Code":"Rastgele Kod","Number Sequential":"Say\u0131 S\u0131ral\u0131","Allow Unpaid Orders":"\u00d6denmemi\u015f Sipari\u015flere \u0130zin Ver","Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".":"Eksik sipari\u015flerin verilmesini \u00f6nleyecektir. Krediye izin veriliyorsa, bu se\u00e7enek \"evet\" olarak ayarlanmal\u0131d\u0131r.","Allow Partial Orders":"K\u0131smi Sipari\u015flere \u0130zin Ver","Will prevent partially paid orders to be placed.":"K\u0131smen \u00f6denen sipari\u015flerin verilmesini \u00f6nleyecektir.","Quotation Expiration":"Teklif S\u00fcresi Sonu","Quotations will get deleted after they defined they has reached.":"Teklifler ula\u015ft\u0131klar\u0131n\u0131 tan\u0131mlad\u0131ktan sonra silinecektir.","%s Days":"%s G\u00fcn","Features":"\u00d6zellikler","Show Quantity":"Miktar\u0131 G\u00f6ster","Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.":"Bir \u00fcr\u00fcn se\u00e7erken miktar se\u00e7iciyi g\u00f6sterecektir. Aksi takdirde varsay\u0131lan miktar 1 olarak ayarlan\u0131r.","Allow Customer Creation":"M\u00fc\u015fteri Olu\u015fturmaya \u0130zin Ver","Allow customers to be created on the POS.":"M\u00fc\u015fterilerin SATI\u015e'ta olu\u015fturulmas\u0131na izin verin.","Quick Product":"H\u0131zl\u0131 \u00dcr\u00fcn","Allow quick product to be created from the POS.":"SATI\u015e'tan h\u0131zl\u0131 \u00fcr\u00fcn olu\u015fturulmas\u0131na izin verin.","Editable Unit Price":"D\u00fczenlenebilir Birim Fiyat\u0131","Allow product unit price to be edited.":"\u00dcr\u00fcn birim fiyat\u0131n\u0131n d\u00fczenlenmesine izin ver.","Order Types":"Sipari\u015f T\u00fcrleri","Control the order type enabled.":"Etkinle\u015ftirilen sipari\u015f t\u00fcr\u00fcn\u00fc kontrol edin.","Layout":"D\u00fczen","Retail Layout":"Perakende D\u00fczeni","Clothing Shop":"Giysi d\u00fckkan\u0131","POS Layout":"SATI\u015e D\u00fczeni","Change the layout of the POS.":"SATI\u015e d\u00fczenini de\u011fi\u015ftirin.","Printing":"Bask\u0131","Printed Document":"Bas\u0131l\u0131 Belge","Choose the document used for printing aster a sale.":"Aster bir sat\u0131\u015f yazd\u0131rmak i\u00e7in kullan\u0131lan belgeyi se\u00e7in.","Printing Enabled For":"Yazd\u0131rma Etkinle\u015ftirildi","All Orders":"T\u00fcm sipari\u015fler","From Partially Paid Orders":"K\u0131smi \u00d6denen Sipari\u015flerden","Only Paid Orders":"Sadece \u00dccretli Sipari\u015fler","Determine when the printing should be enabled.":"Yazd\u0131rman\u0131n ne zaman etkinle\u015ftirilmesi gerekti\u011fini belirleyin.","Printing Gateway":"Yazd\u0131rma A\u011f Ge\u00e7idi","Determine what is the gateway used for printing.":"Yazd\u0131rma i\u00e7in kullan\u0131lan a\u011f ge\u00e7idinin ne oldu\u011funu belirleyin.","Enable Cash Registers":"Yazar Kasalar\u0131 Etkinle\u015ftir","Determine if the POS will support cash registers.":"SATI\u015e'un yazar kasalar\u0131 destekleyip desteklemeyece\u011fini belirleyin.","Cashier Idle Counter":"Kasiyer Bo\u015fta Kalma Sayac\u0131","5 Minutes":"5 dakika","10 Minutes":"10 dakika","15 Minutes":"15 dakika","20 Minutes":"20 dakika","30 Minutes":"30 dakika","Selected after how many minutes the system will set the cashier as idle.":"Sistemin kasiyeri ka\u00e7 dakika sonra bo\u015fta tutaca\u011f\u0131 se\u00e7ilir.","Cash Disbursement":"Nakit \u00f6deme","Allow cash disbursement by the cashier.":"Kasiyer taraf\u0131ndan nakit \u00f6demeye izin ver.","Cash Registers":"Yazarkasalar","Keyboard Shortcuts":"Klavye k\u0131sayollar\u0131","Cancel Order":"Sipari\u015fi iptal et","Keyboard shortcut to cancel the current order.":"Mevcut sipari\u015fi iptal etmek i\u00e7in klavye k\u0131sayolu.","Keyboard shortcut to hold the current order.":"Mevcut sipari\u015fi tutmak i\u00e7in klavye k\u0131sayolu.","Keyboard shortcut to create a customer.":"M\u00fc\u015fteri olu\u015fturmak i\u00e7in klavye k\u0131sayolu.","Proceed Payment":"\u00d6demeye Devam Et","Keyboard shortcut to proceed to the payment.":"\u00d6demeye devam etmek i\u00e7in klavye k\u0131sayolu.","Open Shipping":"A\u00e7\u0131k Nakliye","Keyboard shortcut to define shipping details.":"Keyboard shortcut to define shipping details.","Open Note":"Notu A\u00e7","Keyboard shortcut to open the notes.":"Notlar\u0131 a\u00e7mak i\u00e7in klavye k\u0131sayolu.","Order Type Selector":"Sipari\u015f T\u00fcr\u00fc Se\u00e7ici","Keyboard shortcut to open the order type selector.":"Sipari\u015f t\u00fcr\u00fc se\u00e7iciyi a\u00e7mak i\u00e7in klavye k\u0131sayolu.","Toggle Fullscreen":"Tam ekrana ge\u00e7","Quick Search":"H\u0131zl\u0131 arama","Keyboard shortcut open the quick search popup.":"Klavye k\u0131sayolu, h\u0131zl\u0131 arama a\u00e7\u0131l\u0131r penceresini a\u00e7ar.","Amount Shortcuts":"Tutar K\u0131sayollar\u0131","VAT Type":"KDV T\u00fcr\u00fc","Determine the VAT type that should be used.":"Kullan\u0131lmas\u0131 gereken KDV t\u00fcr\u00fcn\u00fc belirleyin.","Flat Rate":"Sabit fiyat","Flexible Rate":"Esnek Oran","Products Vat":"\u00dcr\u00fcnler KDV","Products & Flat Rate":"\u00dcr\u00fcnler ve Sabit Fiyat","Products & Flexible Rate":"\u00dcr\u00fcnler ve Esnek Fiyat","Define the tax group that applies to the sales.":"Sat\u0131\u015flar i\u00e7in ge\u00e7erli olan vergi grubunu tan\u0131mlay\u0131n.","Define how the tax is computed on sales.":"Verginin sat\u0131\u015flarda nas\u0131l hesapland\u0131\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","VAT Settings":"KDV Ayarlar\u0131","Enable Email Reporting":"E-posta Raporlamas\u0131n\u0131 Etkinle\u015ftir","Determine if the reporting should be enabled globally.":"Raporlaman\u0131n global olarak etkinle\u015ftirilip etkinle\u015ftirilmeyece\u011fini belirleyin.","Supplies":"Gere\u00e7ler","Public Name":"Genel Ad","Define what is the user public name. If not provided, the username is used instead.":"Define what is the user public name. If not provided, the username is used instead.","Enable Workers":"\u00c7al\u0131\u015fanlar\u0131 Etkinle\u015ftir","Test":"\u00d6l\u00e7ek","Current Week":"Bu hafta","Previous Week":"\u00d6nceki hafta","There is no migrations to perform for the module \"%s\"":"Mod\u00fcl i\u00e7in ger\u00e7ekle\u015ftirilecek ge\u00e7i\u015f yok \"%s\"","The module migration has successfully been performed for the module \"%s\"":"Mod\u00fcl ge\u00e7i\u015fi, mod\u00fcl i\u00e7in ba\u015far\u0131yla ger\u00e7ekle\u015ftirildi \"%s\"","Sales By Payment Types":"\u00d6deme T\u00fcrlerine G\u00f6re Sat\u0131\u015flar","Provide a report of the sales by payment types, for a specific period.":"Belirli bir d\u00f6nem i\u00e7in \u00f6deme t\u00fcrlerine g\u00f6re sat\u0131\u015flar\u0131n bir raporunu sa\u011flay\u0131n.","Sales By Payments":"\u00d6deme T\u00fcrlerine G\u00f6re Sat\u0131\u015flar","Order Settings":"Sipari\u015f Ayarlar\u0131","Define the order name.":"Sipari\u015f ad\u0131n\u0131 tan\u0131mlay\u0131n.","Define the date of creation of the order.":"Sipari\u015fin olu\u015fturulma tarihini tan\u0131mlay\u0131n.","Total Refunds":"Toplam Geri \u00d6deme","Clients Registered":"M\u00fc\u015fteriler Kay\u0131tl\u0131","Commissions":"Komisyonlar","Processing Status":"\u0130\u015fleme Durumu","Refunded Products":"\u0130ade Edilen \u00dcr\u00fcnler","The product price has been updated.":"\u00dcr\u00fcn fiyat\u0131 g\u00fcncellenmi\u015ftir.","The editable price feature is disabled.":"D\u00fczenlenebilir fiyat \u00f6zelli\u011fi devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","Order Refunds":"Sipari\u015f \u0130adeleri","Product Price":"\u00dcr\u00fcn fiyat\u0131","Unable to proceed":"Devam edilemiyor","Partially paid orders are disabled.":"K\u0131smen \u00f6denen sipari\u015fler devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","An order is currently being processed.":"\u015eu anda bir sipari\u015f i\u015fleniyor.","Log out":"\u00c7\u0131k\u0131\u015f Yap","Refund receipt":"Geri \u00f6deme makbuzu","Recompute":"yeniden hesapla","Sort Results":"Sonu\u00e7lar\u0131 S\u0131rala","Using Quantity Ascending":"Artan Miktar Kullan\u0131m\u0131","Using Quantity Descending":"Azalan Miktar Kullan\u0131m\u0131","Using Sales Ascending":"Artan Sat\u0131\u015flar\u0131 Kullanma","Using Sales Descending":"Azalan Sat\u0131\u015f\u0131 Kullanma","Using Name Ascending":"Artan Ad Kullan\u0131m\u0131","Using Name Descending":"Azalan Ad Kullan\u0131m\u0131","Progress":"\u0130leri","Discounts":"indirimler","An invalid date were provided. Make sure it a prior date to the actual server date.":"Ge\u00e7ersiz bir tarih sa\u011fland\u0131. Ger\u00e7ek sunucu tarihinden \u00f6nceki bir tarih oldu\u011fundan emin olun.","Computing report from %s...":"Hesaplama raporu %s...","The demo has been enabled.":"Demo etkinle\u015ftirildi.","Refund Receipt":"Geri \u00d6deme Makbuzu","Codabar":"Codabar","Code 128":"Code 128","Code 39":"Code 39","Code 11":"Code 11","UPC A":"UPC A","UPC E":"UPC E","Store Dashboard":"Ma\u011faza Panosu","Cashier Dashboard":"Kasiyer Panosu","Default Dashboard":"Varsay\u0131lan G\u00f6sterge Tablosu","%s has been processed, %s has not been processed.":"%s \u0130\u015flendi, %s \u0130\u015flenmedi.","Order Refund Receipt — %s":"Sipari\u015f \u0130ade Makbuzu — %s","Provides an overview over the best products sold during a specific period.":"Belirli bir d\u00f6nemde sat\u0131lan en iyi \u00fcr\u00fcnler hakk\u0131nda genel bir bak\u0131\u015f sa\u011flar.","The report will be computed for the current year.":"Rapor cari y\u0131l i\u00e7in hesaplanacak.","Unknown report to refresh.":"Yenilenecek bilinmeyen rapor.","Report Refreshed":"Rapor Yenilendi","The yearly report has been successfully refreshed for the year \"%s\".":"Y\u0131ll\u0131k rapor, y\u0131l i\u00e7in ba\u015far\u0131yla yenilendi \"%s\".","Countable":"Say\u0131labilir","Piece":"Piece","GST":"GST","SGST":"SGST","CGST":"CGST","Sample Procurement %s":"\u00d6rnek Tedarik %s","generated":"olu\u015fturulan","Not Available":"M\u00fcsait de\u011fil","The report has been computed successfully.":"Rapor ba\u015far\u0131yla hesapland\u0131.","Create a customer":"M\u00fc\u015fteri olu\u015ftur","Credit":"Kredi","Debit":"Bor\u00e7","All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.":"Bu kategoriye ba\u011fl\u0131 t\u00fcm varl\u0131klar ya bir \"credit\" or \"debit\" nakit ak\u0131\u015f\u0131 ge\u00e7mi\u015fine.","Account":"Hesap","Provide the accounting number for this category.":"Bu kategori i\u00e7in muhasebe numaras\u0131n\u0131 sa\u011flay\u0131n.","Accounting":"Muhasebe","Procurement Cash Flow Account":"Sat\u0131nalma Nakit Ak\u0131\u015f Hesab\u0131","Sale Cash Flow Account":"Sat\u0131\u015f Nakit Ak\u0131\u015f Hesab\u0131","Sales Refunds Account":"Sat\u0131\u015f \u0130ade Hesab\u0131","Stock return for spoiled items will be attached to this account":"Bozulan \u00fcr\u00fcnlerin stok iadesi bu hesaba eklenecektir.","The reason has been updated.":"Nedeni g\u00fcncellendi.","You must select a customer before applying a coupon.":"Kupon uygulamadan \u00f6nce bir m\u00fc\u015fteri se\u00e7melisiniz.","No coupons for the selected customer...":"Se\u00e7ilen m\u00fc\u015fteri i\u00e7in kupon yok...","Use Coupon":"Kupon Kullan","Use Customer ?":"M\u00fc\u015fteriyi Kullan ?","No customer is selected. Would you like to proceed with this customer ?":"Hi\u00e7bir m\u00fc\u015fteri se\u00e7ilmedi. Bu m\u00fc\u015fteriyle devam etmek ister misiniz ?","Change Customer ?":"M\u00fc\u015fteriyi De\u011fi\u015ftir ?","Would you like to assign this customer to the ongoing order ?":"Bu m\u00fc\u015fteriyi devam eden sipari\u015fe atamak ister misiniz ?","Product \/ Service":"\u00dcr\u00fcn \/ Hizmet","An error has occurred while computing the product.":"\u00dcr\u00fcn hesaplan\u0131rken bir hata olu\u015ftu.","Provide a unique name for the product.":"\u00dcr\u00fcn i\u00e7in benzersiz bir ad sa\u011flay\u0131n.","Define what is the sale price of the item.":"\u00d6\u011fenin sat\u0131\u015f fiyat\u0131n\u0131n ne oldu\u011funu tan\u0131mlay\u0131n.","Set the quantity of the product.":"\u00dcr\u00fcn\u00fcn miktar\u0131n\u0131 ayarlay\u0131n.","Define what is tax type of the item.":"\u00d6\u011fenin vergi t\u00fcr\u00fcn\u00fcn ne oldu\u011funu tan\u0131mlay\u0131n.","Choose the tax group that should apply to the item.":"Kaleme uygulanmas\u0131 gereken vergi grubunu se\u00e7in.","Assign a unit to the product.":"\u00dcr\u00fcne bir birim atama.","Some products has been added to the cart. Would youl ike to discard this order ?":"Sepete baz\u0131 \u00fcr\u00fcnler eklendi. Bu sipari\u015fi iptal etmek istiyor musunuz ?","Customer Accounts List":"M\u00fc\u015fteri Hesaplar\u0131 Listesi","Display all customer accounts.":"T\u00fcm m\u00fc\u015fteri hesaplar\u0131n\u0131 g\u00f6r\u00fcnt\u00fcleyin.","No customer accounts has been registered":"Kay\u0131tl\u0131 m\u00fc\u015fteri hesab\u0131 yok","Add a new customer account":"Yeni bir m\u00fc\u015fteri hesab\u0131 ekleyin","Create a new customer account":"Yeni bir m\u00fc\u015fteri hesab\u0131 olu\u015fturun","Register a new customer account and save it.":"Yeni bir m\u00fc\u015fteri hesab\u0131 kaydedin ve kaydedin.","Edit customer account":"M\u00fc\u015fteri hesab\u0131n\u0131 d\u00fczenle","Modify Customer Account.":"M\u00fc\u015fteri Hesab\u0131n\u0131 De\u011fi\u015ftir.","Return to Customer Accounts":"M\u00fc\u015fteri Hesaplar\u0131na Geri D\u00f6n","This will be ignored.":"Bu g\u00f6z ard\u0131 edilecek.","Define the amount of the transaction":"\u0130\u015flem tutar\u0131n\u0131 tan\u0131mlay\u0131n","Define what operation will occurs on the customer account.":"M\u00fc\u015fteri hesab\u0131nda hangi i\u015flemin ger\u00e7ekle\u015fece\u011fini tan\u0131mlay\u0131n.","Provider Procurements List":"Sa\u011flay\u0131c\u0131 Tedarik Listesi","Display all provider procurements.":"T\u00fcm sa\u011flay\u0131c\u0131 tedariklerini g\u00f6ster.","No provider procurements has been registered":"Hi\u00e7bir sa\u011flay\u0131c\u0131 al\u0131m\u0131 kaydedilmedi","Add a new provider procurement":"Yeni bir sa\u011flay\u0131c\u0131 tedariki ekle","Create a new provider procurement":"Yeni bir sa\u011flay\u0131c\u0131 tedari\u011fi olu\u015fturun","Register a new provider procurement and save it.":"Yeni bir sa\u011flay\u0131c\u0131 tedariki kaydedin ve kaydedin.","Edit provider procurement":"Sa\u011flay\u0131c\u0131 tedarikini d\u00fczenle","Modify Provider Procurement.":"Sa\u011flay\u0131c\u0131 Tedarikini De\u011fi\u015ftir.","Return to Provider Procurements":"Sa\u011flay\u0131c\u0131 Tedariklerine D\u00f6n","Delivered On":"Zaman\u0131nda teslim edildi","Items":"\u00dcr\u00fcnler","Displays the customer account history for %s":"i\u00e7in m\u00fc\u015fteri hesab\u0131 ge\u00e7mi\u015fini g\u00f6r\u00fcnt\u00fcler. %s","Procurements by \"%s\"":"Tedarikler taraf\u0131ndan\"%s\"","Crediting":"Kredi","Deducting":"Kesinti","Order Payment":"Sipari\u015f \u00f6deme","Order Refund":"Sipari\u015f \u0130adesi","Unknown Operation":"Bilinmeyen \u0130\u015flem","Unnamed Product":"\u0130simsiz \u00dcr\u00fcn","Bubble":"Kabarc\u0131k","Ding":"Ding","Pop":"Pop","Cash Sound":"Nakit Ses","Sale Complete Sound":"Sat\u0131\u015f Komple Ses","New Item Audio":"Yeni \u00d6\u011fe Ses","The sound that plays when an item is added to the cart.":"Sepete bir \u00fcr\u00fcn eklendi\u011finde \u00e7\u0131kan ses.","Howdy, {name}":"Merhaba, {name}","Would you like to perform the selected bulk action on the selected entries ?":"Se\u00e7ilen giri\u015flerde se\u00e7ilen toplu i\u015flemi ger\u00e7ekle\u015ftirmek ister misiniz ?","The payment to be made today is less than what is expected.":"Bug\u00fcn yap\u0131lacak \u00f6deme beklenenden az.","Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.":"Varsay\u0131lan m\u00fc\u015fteri se\u00e7ilemiyor. G\u00f6r\u00fcn\u00fc\u015fe g\u00f6re m\u00fc\u015fteri art\u0131k yok. Ayarlarda varsay\u0131lan m\u00fc\u015fteriyi de\u011fi\u015ftirmeyi d\u00fc\u015f\u00fcn\u00fcn.","How to change database configuration":"Veritaban\u0131 yap\u0131land\u0131rmas\u0131 nas\u0131l de\u011fi\u015ftirilir","Common Database Issues":"Ortak Veritaban\u0131 Sorunlar\u0131","Setup":"Kur","Query Exception":"Sorgu \u0130stisnas\u0131","The category products has been refreshed":"Kategori \u00fcr\u00fcnleri yenilendi","The requested customer cannot be found.":"\u0130stenen m\u00fc\u015fteri bulunamad\u0131.","Filters":"filtreler","Has Filters":"Filtreleri Var","N\/D":"N\/D","Range Starts":"Aral\u0131k Ba\u015flang\u0131c\u0131","Range Ends":"Aral\u0131k Biti\u015fi","Search Filters":"Arama Filtreleri","Clear Filters":"Filtreleri Temizle","Use Filters":"Filtreleri Kullan","No rewards available the selected customer...":"Se\u00e7ilen m\u00fc\u015fteri i\u00e7in \u00f6d\u00fcl yok...","Unable to load the report as the timezone is not set on the settings.":"Ayarlarda saat dilimi ayarlanmad\u0131\u011f\u0131ndan rapor y\u00fcklenemiyor.","There is no product to display...":"G\u00f6sterilecek \u00fcr\u00fcn yok...","Method Not Allowed":"izinsiz metod","Documentation":"belgeler","Module Version Mismatch":"Mod\u00fcl S\u00fcr\u00fcm\u00fc Uyu\u015fmazl\u0131\u011f\u0131","Define how many time the coupon has been used.":"Kuponun ka\u00e7 kez kullan\u0131ld\u0131\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","Define the maximum usage possible for this coupon.":"Bu kupon i\u00e7in m\u00fcmk\u00fcn olan maksimum kullan\u0131m\u0131 tan\u0131mlay\u0131n.","Restrict the orders by the creation date.":"Sipari\u015fleri olu\u015fturma tarihine g\u00f6re s\u0131n\u0131rlay\u0131n.","Created Between":"Aras\u0131nda Olu\u015fturuldu","Restrict the orders by the payment status.":"Sipari\u015fleri \u00f6deme durumuna g\u00f6re s\u0131n\u0131rlay\u0131n.","Due With Payment":"Vadeli \u00d6deme","Restrict the orders by the author.":"Yazar\u0131n sipari\u015flerini k\u0131s\u0131tla.","Restrict the orders by the customer.":"M\u00fc\u015fteri taraf\u0131ndan sipari\u015fleri k\u0131s\u0131tlay\u0131n.","Customer Phone":"M\u00fc\u015fteri Telefonu","Restrict orders using the customer phone number.":"M\u00fc\u015fteri telefon numaras\u0131n\u0131 kullanarak sipari\u015fleri k\u0131s\u0131tlay\u0131n.","Restrict the orders to the cash registers.":"Sipari\u015fleri yazar kasalarla s\u0131n\u0131rland\u0131r\u0131n.","Low Quantity":"D\u00fc\u015f\u00fck Miktar","Which quantity should be assumed low.":"Hangi miktar d\u00fc\u015f\u00fck kabul edilmelidir?.","Stock Alert":"Stok Uyar\u0131s\u0131","See Products":"\u00dcr\u00fcnleri G\u00f6r","Provider Products List":"Sa\u011flay\u0131c\u0131 \u00dcr\u00fcnler Listesi","Display all Provider Products.":"T\u00fcm Sa\u011flay\u0131c\u0131 \u00dcr\u00fcnlerini g\u00f6r\u00fcnt\u00fcleyin.","No Provider Products has been registered":"Hi\u00e7bir Sa\u011flay\u0131c\u0131 \u00dcr\u00fcn\u00fc kaydedilmedi","Add a new Provider Product":"Yeni bir Sa\u011flay\u0131c\u0131 \u00dcr\u00fcn Ekle","Create a new Provider Product":"Yeni bir Sa\u011flay\u0131c\u0131 \u00dcr\u00fcn olu\u015fturun","Register a new Provider Product and save it.":"Yeni bir Sa\u011flay\u0131c\u0131 \u00dcr\u00fcn kaydedin ve kaydedin.","Edit Provider Product":"Sa\u011flay\u0131c\u0131 \u00dcr\u00fcn\u00fcn\u00fc D\u00fczenle","Modify Provider Product.":"Sa\u011flay\u0131c\u0131 \u00dcr\u00fcn\u00fcn\u00fc De\u011fi\u015ftir.","Return to Provider Products":"Sa\u011flay\u0131c\u0131 \u00dcr\u00fcnlere D\u00f6n","Clone":"Klon","Would you like to clone this role ?":"Bu rol\u00fc klonlamak ister misiniz? ?","Incompatibility Exception":"Uyumsuzluk \u0130stisnas\u0131","The requested file cannot be downloaded or has already been downloaded.":"\u0130stenen dosya indirilemiyor veya zaten indirilmi\u015f.","Low Stock Report":"D\u00fc\u015f\u00fck Stok Raporu","Low Stock Alert":"D\u00fc\u015f\u00fck Stok Uyar\u0131s\u0131","The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ":"\"%s\" mod\u00fcl\u00fc, \"%s\" ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 gereken minimum s\u00fcr\u00fcmde olmad\u0131\u011f\u0131 i\u00e7in devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131 \"%s\". ","The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ":"\"%s\" mod\u00fcl\u00fc, \"%s\" ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 \u00f6nerilen \"%s\" d\u0131\u015f\u0131ndaki bir s\u00fcr\u00fcmde oldu\u011fundan devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","Clone of \"%s\"":"Klonu \"%s\"","The role has been cloned.":"Rol klonland\u0131.","Merge Products On Receipt\/Invoice":"Fi\u015fteki\/Faturadaki \u00dcr\u00fcnleri Birle\u015ftir","All similar products will be merged to avoid a paper waste for the receipt\/invoice.":"Makbuz\/fatura i\u00e7in ka\u011f\u0131t israf\u0131n\u0131 \u00f6nlemek i\u00e7in t\u00fcm benzer \u00fcr\u00fcnler birle\u015ftirilecektir..","Define whether the stock alert should be enabled for this unit.":"Bu birim i\u00e7in stok uyar\u0131s\u0131n\u0131n etkinle\u015ftirilip etkinle\u015ftirilmeyece\u011fini tan\u0131mlay\u0131n.","All Refunds":"T\u00fcm Geri \u00d6demeler","No result match your query.":"Sorgunuzla e\u015fle\u015fen sonu\u00e7 yok.","Report Type":"Rapor t\u00fcr\u00fc","Categories Detailed":"Kategoriler Ayr\u0131nt\u0131l\u0131","Categories Summary":"Kategori \u00d6zeti","Allow you to choose the report type.":"Rapor t\u00fcr\u00fcn\u00fc se\u00e7menize izin verin.","Unknown":"Bilinmeyen","Not Authorized":"Yetkili de\u011fil","Creating customers has been explicitly disabled from the settings.":"M\u00fc\u015fteri olu\u015fturma, ayarlardan a\u00e7\u0131k\u00e7a devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","Sales Discounts":"Sat\u0131\u015f \u0130ndirimleri","Sales Taxes":"Sat\u0131\u015f vergileri","Birth Date":"do\u011fum tarihleri","Displays the customer birth date":"M\u00fc\u015fterinin do\u011fum tarihini g\u00f6r\u00fcnt\u00fcler","Sale Value":"Sat\u0131\u015f de\u011feri","Purchase Value":"Al\u0131m de\u011feri","Would you like to refresh this ?":"Bunu yenilemek ister misin ?","You cannot delete your own account.":"Kendi hesab\u0131n\u0131 silemezsin.","Sales Progress":"Sat\u0131\u015f \u0130lerlemesi","Procurement Refreshed":"Sat\u0131n Alma Yenilendi","The procurement \"%s\" has been successfully refreshed.":"Sat\u0131n alma \"%s\" ba\u015far\u0131yla yenilendi.","Partially Due":"K\u0131smen Vadeli","No payment type has been selected on the settings. Please check your POS features and choose the supported order type":"Ayarlarda herhangi bir \u00f6deme t\u00fcr\u00fc se\u00e7ilmedi. L\u00fctfen SATI\u015e \u00f6zelliklerinizi kontrol edin ve desteklenen sipari\u015f t\u00fcr\u00fcn\u00fc se\u00e7in","Read More":"Daha fazla oku","Wipe All":"T\u00fcm\u00fcn\u00fc Sil","Wipe Plus Grocery":"Wipe Plus Bakkal","Accounts List":"Hesap Listesi","Display All Accounts.":"T\u00fcm Hesaplar\u0131 G\u00f6r\u00fcnt\u00fcle.","No Account has been registered":"Hi\u00e7bir Hesap kay\u0131tl\u0131 de\u011fil","Add a new Account":"Yeni Hesap Ekle","Create a new Account":"Yeni bir hesap olu\u015ftur","Register a new Account and save it.":"Yeni bir Hesap a\u00e7\u0131n ve kaydedin.","Edit Account":"Hesab\u0131 d\u00fczenlemek","Modify An Account.":"Bir Hesab\u0131 De\u011fi\u015ftir.","Return to Accounts":"Hesaplara D\u00f6n","Accounts":"Hesaplar","Create Account":"Hesap Olu\u015ftur","Payment Method":"\u00d6deme \u015fekli","Before submitting the payment, choose the payment type used for that order.":"\u00d6demeyi g\u00f6ndermeden \u00f6nce, o sipari\u015f i\u00e7in kullan\u0131lan \u00f6deme t\u00fcr\u00fcn\u00fc se\u00e7in.","Select the payment type that must apply to the current order.":"Mevcut sipari\u015fe uygulanmas\u0131 gereken \u00f6deme t\u00fcr\u00fcn\u00fc se\u00e7in.","Payment Type":"\u00d6deme t\u00fcr\u00fc","Remove Image":"Resmi Kald\u0131r","This form is not completely loaded.":"Bu form tamamen y\u00fcklenmedi.","Updating":"G\u00fcncelleniyor","Updating Modules":"Mod\u00fcllerin G\u00fcncellenmesi","Return":"Geri","Credit Limit":"Kredi limiti","The request was canceled":"\u0130stek iptal edildi","Payment Receipt — %s":"\u00d6deme makbuzu — %s","Payment receipt":"\u00d6deme makbuzu","Current Payment":"Mevcut \u00d6deme","Total Paid":"Toplam \u00d6denen","Set what should be the limit of the purchase on credit.":"Kredili sat\u0131n alma limitinin ne olmas\u0131 gerekti\u011fini belirleyin.","Provide the customer email.":"M\u00fc\u015fteri e-postas\u0131n\u0131 sa\u011flay\u0131n.","Priority":"\u00d6ncelik","Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".":"\u00d6deme emrini tan\u0131mlay\u0131n. Say\u0131 ne kadar d\u00fc\u015f\u00fckse, \u00f6deme a\u00e7\u0131l\u0131r penceresinde ilk o g\u00f6r\u00fcnt\u00fclenecektir. ba\u015flamal\u0131\"0\".","Mode":"Mod","Choose what mode applies to this demo.":"Bu demo i\u00e7in hangi modun uygulanaca\u011f\u0131n\u0131 se\u00e7in.","Set if the sales should be created.":"Sat\u0131\u015flar\u0131n olu\u015fturulup olu\u015fturulmayaca\u011f\u0131n\u0131 ayarlay\u0131n.","Create Procurements":"Tedarik Olu\u015ftur","Will create procurements.":"Sat\u0131n alma olu\u015ftur.","Sales Account":"Sat\u0131\u015f hesab\u0131","Procurements Account":"Tedarik Hesab\u0131","Sale Refunds Account":"Sat\u0131\u015f \u0130ade Hesab\u0131t","Spoiled Goods Account":"Bozulmu\u015f Mal Hesab\u0131","Customer Crediting Account":"M\u00fc\u015fteri Kredi Hesab\u0131","Customer Debiting Account":"M\u00fc\u015fteri Bor\u00e7land\u0131rma Hesab\u0131","Unable to find the requested account type using the provided id.":"Sa\u011flanan kimlik kullan\u0131larak istenen hesap t\u00fcr\u00fc bulunamad\u0131.","You cannot delete an account type that has transaction bound.":"\u0130\u015flem s\u0131n\u0131r\u0131 olan bir hesap t\u00fcr\u00fcn\u00fc silemezsiniz.","The account type has been deleted.":"Hesap t\u00fcr\u00fc silindi.","The account has been created.":"Hesap olu\u015fturuldu.","Customer Credit Account":"M\u00fc\u015fteri Kredi Hesab\u0131","Customer Debit Account":"M\u00fc\u015fteri Bor\u00e7 Hesab\u0131","Register Cash-In Account":"Nakit Hesab\u0131 Kaydolun","Register Cash-Out Account":"Nakit \u00c7\u0131k\u0131\u015f Hesab\u0131 Kaydolun","Require Valid Email":"Ge\u00e7erli E-posta \u0130ste","Will for valid unique email for every customer.":"Her m\u00fc\u015fteri i\u00e7in ge\u00e7erli benzersiz e-posta i\u00e7in Will.","Choose an option":"Bir se\u00e7enek belirleyin","Update Instalment Date":"Taksit Tarihini G\u00fcncelle","Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.":"Bu taksiti bug\u00fcn vadesi olarak i\u015faretlemek ister misiniz? Onaylarsan\u0131z taksit \u00f6dendi olarak i\u015faretlenecektir.","Search for products.":"\u00dcr\u00fcnleri ara.","Toggle merging similar products.":"Benzer \u00fcr\u00fcnleri birle\u015ftirmeyi a\u00e7\/kapat.","Toggle auto focus.":"Otomatik odaklamay\u0131 a\u00e7\/kapat.","Filter User":"Kullan\u0131c\u0131y\u0131 Filtrele","All Users":"T\u00fcm kullan\u0131c\u0131lar","No user was found for proceeding the filtering.":"Filtrelemeye devam edecek kullan\u0131c\u0131 bulunamad\u0131.","available":"Mevcut","No coupons applies to the cart.":"Sepete kupon uygulanmaz.","Selected":"Se\u00e7ildi","An error occurred while opening the order options":"Sipari\u015f se\u00e7enekleri a\u00e7\u0131l\u0131rken bir hata olu\u015ftu","There is no instalment defined. Please set how many instalments are allowed for this order":"Tan\u0131mlanm\u0131\u015f bir taksit yoktur. L\u00fctfen bu sipari\u015f i\u00e7in ka\u00e7 taksite izin verilece\u011fini ayarlay\u0131n","Select Payment Gateway":"\u00d6deme A\u011f Ge\u00e7idini Se\u00e7in","Gateway":"\u00d6deme Y\u00f6ntemi","No tax is active":"Hi\u00e7bir vergi etkin de\u011fil","Unable to delete a payment attached to the order.":"Sipari\u015fe eklenmi\u015f bir \u00f6deme silinemiyor.","The discount has been set to the cart subtotal.":"\u0130ndirim, al\u0131\u015fveri\u015f sepeti ara toplam\u0131na ayarland\u0131.","Order Deletion":"Sipari\u015f Silme","The current order will be deleted as no payment has been made so far.":"\u015eu ana kadar herhangi bir \u00f6deme yap\u0131lmad\u0131\u011f\u0131 i\u00e7in mevcut sipari\u015f silinecek.","Void The Order":"Sipari\u015fi \u0130ptal Et","Unable to void an unpaid order.":"\u00d6denmemi\u015f bir sipari\u015f iptal edilemiyor.","Environment Details":"\u00c7evre Ayr\u0131nt\u0131lar\u0131","Properties":"\u00d6zellikler","Extensions":"Uzant\u0131lar","Configurations":"Konfig\u00fcrasyonlar","Learn More":"Daha fazla bilgi edin","Search Products...":"\u00fcr\u00fcnleri ara...","No results to show.":"G\u00f6sterilecek sonu\u00e7 yok.","Start by choosing a range and loading the report.":"Bir aral\u0131k se\u00e7ip raporu y\u00fckleyerek ba\u015flay\u0131n.","Invoice Date":"Fatura tarihi","Initial Balance":"Ba\u015flang\u0131\u00e7 Bakiyesi","New Balance":"Kalan Bakiye","Transaction Type":"\u0130\u015flem tipi","Unchanged":"De\u011fi\u015fmemi\u015f","Define what roles applies to the user":"Kullan\u0131c\u0131 i\u00e7in hangi rollerin ge\u00e7erli oldu\u011funu tan\u0131mlay\u0131n","Not Assigned":"Atanmad\u0131","This value is already in use on the database.":"Bu de\u011fer veritaban\u0131nda zaten kullan\u0131l\u0131yor.","This field should be checked.":"Bu alan kontrol edilmelidir.","This field must be a valid URL.":"Bu alan ge\u00e7erli bir URL olmal\u0131d\u0131r.","This field is not a valid email.":"Bu alan ge\u00e7erli bir e-posta de\u011fil.","If you would like to define a custom invoice date.":"\u00d6zel bir fatura tarihi tan\u0131mlamak istiyorsan\u0131z.","Theme":"Tema","Dark":"Karanl\u0131k","Light":"Ayd\u0131nl\u0131k","Define what is the theme that applies to the dashboard.":"G\u00f6sterge tablosu i\u00e7in ge\u00e7erli olan teman\u0131n ne oldu\u011funu tan\u0131mlay\u0131n.","Unable to delete this resource as it has %s dependency with %s item.":"%s \u00f6\u011fesiyle %s ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 oldu\u011fu i\u00e7in bu kaynak silinemiyor.","Unable to delete this resource as it has %s dependency with %s items.":"%s \u00f6\u011feyle %s ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 oldu\u011fu i\u00e7in bu kaynak silinemiyor.","Make a new procurement.":"Yeni bir sat\u0131n alma yapmak.","About":"Hakk\u0131nda","Details about the environment.":"\u00c7evreyle ilgili ayr\u0131nt\u0131lar.","Core Version":"\u00c7ekirdek S\u00fcr\u00fcm","PHP Version":"PHP S\u00fcr\u00fcm\u00fc","Mb String Enabled":"Mb Dizisi Etkin","Zip Enabled":"Zip Etkin","Curl Enabled":"K\u0131vr\u0131lma Etkin","Math Enabled":"Matematik Etkin","XML Enabled":"XML Etkin","XDebug Enabled":"XDebug Etkin","File Upload Enabled":"Dosya Y\u00fckleme Etkinle\u015ftirildi","File Upload Size":"Dosya Y\u00fckleme Boyutu","Post Max Size":"G\u00f6nderi Maks Boyutu","Max Execution Time":"Maksimum Y\u00fcr\u00fctme S\u00fcresi","Memory Limit":"Bellek S\u0131n\u0131r\u0131","Administrator":"Y\u00f6netici","Store Administrator":"Ma\u011faza Y\u00f6neticisi","Store Cashier":"Ma\u011faza kasiyer","User":"Kullan\u0131c\u0131","Incorrect Authentication Plugin Provided.":"Yanl\u0131\u015f Kimlik Do\u011frulama Eklentisi Sa\u011fland\u0131.","Require Unique Phone":"Benzersiz Telefon Gerektir","Every customer should have a unique phone number.":"Her m\u00fc\u015fterinin benzersiz bir telefon numaras\u0131 olmal\u0131d\u0131r.","Define the default theme.":"Varsay\u0131lan temay\u0131 tan\u0131mlay\u0131n.","Merge Similar Items":"Benzer \u00d6\u011feleri Birle\u015ftir","Will enforce similar products to be merged from the POS.":"Benzer \u00fcr\u00fcnlerin SATI\u015e'tan birle\u015ftirilmesini zorunlu k\u0131lacak.","Toggle Product Merge":"\u00dcr\u00fcn Birle\u015ftirmeyi A\u00e7\/Kapat","Will enable or disable the product merging.":"\u00dcr\u00fcn birle\u015ftirmeyi etkinle\u015ftirecek veya devre d\u0131\u015f\u0131 b\u0131rakacak.","Your system is running in production mode. You probably need to build the assets":"Sisteminiz \u00fcretim modunda \u00e7al\u0131\u015f\u0131yor. Muhtemelen varl\u0131klar\u0131 olu\u015fturman\u0131z gerekir","Your system is in development mode. Make sure to build the assets.":"Sisteminiz geli\u015ftirme modunda. Varl\u0131klar\u0131 olu\u015fturdu\u011funuzdan emin olun.","Unassigned":"Atanmam\u0131\u015f","Display all product stock flow.":"T\u00fcm \u00fcr\u00fcn stok ak\u0131\u015f\u0131n\u0131 g\u00f6ster.","No products stock flow has been registered":"Hi\u00e7bir \u00fcr\u00fcn stok ak\u0131\u015f\u0131 kaydedilmedi","Add a new products stock flow":"Yeni \u00fcr\u00fcn stok ak\u0131\u015f\u0131 ekleyin","Create a new products stock flow":"Yeni bir \u00fcr\u00fcn stok ak\u0131\u015f\u0131 olu\u015fturun","Register a new products stock flow and save it.":"Yeni bir \u00fcr\u00fcn stok ak\u0131\u015f\u0131 kaydedin ve kaydedin.","Edit products stock flow":"\u00dcr\u00fcn stok ak\u0131\u015f\u0131n\u0131 d\u00fczenle","Modify Globalproducthistorycrud.":"Globalproducthistorycrud'u de\u011fi\u015ftirin.","Initial Quantity":"\u0130lk Miktar","New Quantity":"Yeni Miktar","No Dashboard":"G\u00f6sterge Tablosu Yok","Not Found Assets":"Bulunamayan Varl\u0131klar","Stock Flow Records":"Stok Ak\u0131\u015f Kay\u0131tlar\u0131","The user attributes has been updated.":"Kullan\u0131c\u0131 \u00f6zellikleri g\u00fcncellendi.","Laravel Version":"Laravel S\u00fcr\u00fcm\u00fc","There is a missing dependency issue.":"Eksik bir ba\u011f\u0131ml\u0131l\u0131k sorunu var.","The Action You Tried To Perform Is Not Allowed.":"Yapmaya \u00c7al\u0131\u015ft\u0131\u011f\u0131n\u0131z Eyleme \u0130zin Verilmiyor.","Unable to locate the assets.":"Varl\u0131klar bulunam\u0131yor.","All the customers has been transferred to the new group %s.":"T\u00fcm m\u00fc\u015fteriler yeni gruba transfer edildi %s.","The request method is not allowed.":"\u0130stek y\u00f6ntemine izin verilmiyor.","A Database Exception Occurred.":"Bir Veritaban\u0131 \u0130stisnas\u0131 Olu\u015ftu.","An error occurred while validating the form.":"Form do\u011frulan\u0131rken bir hata olu\u015ftu.","Enter":"Girmek","Search...":"Arama...","Confirm Your Action":"\u0130\u015fleminizi Onaylay\u0131n","The processing status of the order will be changed. Please confirm your action.":"Sipari\u015fin i\u015fleme durumu de\u011fi\u015ftirilecektir. L\u00fctfen i\u015fleminizi onaylay\u0131n.","The delivery status of the order will be changed. Please confirm your action.":"Sipari\u015fin teslimat durumu de\u011fi\u015ftirilecektir. L\u00fctfen i\u015fleminizi onaylay\u0131n.","Would you like to delete this product ?":"Bu \u00fcr\u00fcn\u00fc silmek istiyor musunuz?","Unable to hold an order which payment status has been updated already.":"\u00d6deme durumu zaten g\u00fcncellenmi\u015f bir sipari\u015f bekletilemez.","Unable to change the price mode. This feature has been disabled.":"Fiyat modu de\u011fi\u015ftirilemiyor. Bu \u00f6zellik devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","Enable WholeSale Price":"Toptan Sat\u0131\u015f Fiyat\u0131n\u0131 Etkinle\u015ftir","Would you like to switch to wholesale price ?":"Toptan fiyata ge\u00e7mek ister misiniz?","Enable Normal Price":"Normal Fiyat\u0131 Etkinle\u015ftir","Would you like to switch to normal price ?":"Normal fiyata ge\u00e7mek ister misiniz?","Search products...":"\u00dcr\u00fcnleri ara...","Set Sale Price":"Sat\u0131\u015f Fiyat\u0131n\u0131 Belirle","Remove":"Kald\u0131rmak","No product are added to this group.":"Bu gruba \u00fcr\u00fcn eklenmedi.","Delete Sub item":"Alt \u00f6\u011feyi sil","Would you like to delete this sub item?":"Bu alt \u00f6\u011feyi silmek ister misiniz?","Unable to add a grouped product.":"Grupland\u0131r\u0131lm\u0131\u015f bir \u00fcr\u00fcn eklenemiyor.","Choose The Unit":"Birimi Se\u00e7in","Stock Report":"Stok Raporu","Wallet Amount":"C\u00fczdan Tutar\u0131","Wallet History":"C\u00fczdan Ge\u00e7mi\u015fi","Transaction":"\u0130\u015flem","No History...":"Tarih Yok...","Removing":"Kald\u0131rma","Refunding":"geri \u00f6deme","Unknow":"bilinmiyor","Skip Instalments":"Taksitleri Atla","Define the product type.":"\u00dcr\u00fcn t\u00fcr\u00fcn\u00fc tan\u0131mlay\u0131n.","Dynamic":"Dinamik","In case the product is computed based on a percentage, define the rate here.":"\u00dcr\u00fcn\u00fcn bir y\u00fczdeye g\u00f6re hesaplanmas\u0131 durumunda oran\u0131 burada tan\u0131mlay\u0131n.","Before saving this order, a minimum payment of {amount} is required":"Bu sipari\u015fi kaydetmeden \u00f6nce minimum {amount} \u00f6demeniz gerekiyor","Initial Payment":"\u0130lk \u00f6deme","In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?":"Devam edebilmek i\u00e7in, se\u00e7ilen \u00f6deme t\u00fcr\u00fc \"{paymentType}\" i\u00e7in {amount} tutar\u0131nda bir ilk \u00f6deme yap\u0131lmas\u0131 gerekiyor. Devam etmek ister misiniz?","June":"Haziran","Search Customer...":"M\u00fc\u015fteri Ara...","Due Amount":"\u00d6denecek mebla\u011f","Wallet Balance":"C\u00fczdan Bakiyesi","Total Orders":"Toplam Sipari\u015fler","What slug should be used ? [Q] to quit.":"Hangi s\u00fcm\u00fckl\u00fc b\u00f6cek kullan\u0131lmal\u0131d\u0131r? [Q] \u00e7\u0131kmak i\u00e7in.","\"%s\" is a reserved class name":"\"%s\" ayr\u0131lm\u0131\u015f bir s\u0131n\u0131f ad\u0131d\u0131r","The migration file has been successfully forgotten for the module %s.":"%s mod\u00fcl\u00fc i\u00e7in ta\u015f\u0131ma dosyas\u0131 ba\u015far\u0131yla unutuldu.","%s products where updated.":"%s \u00fcr\u00fcnleri g\u00fcncellendi.","Previous Amount":"\u00d6nceki Tutar","Next Amount":"Sonraki Tutar","Restrict the records by the creation date.":"Kay\u0131tlar\u0131 olu\u015fturma tarihine g\u00f6re s\u0131n\u0131rlay\u0131n.","Restrict the records by the author.":"Kay\u0131tlar\u0131 yazar taraf\u0131ndan k\u0131s\u0131tlay\u0131n.","Grouped Product":"Grupland\u0131r\u0131lm\u0131\u015f \u00dcr\u00fcn","Groups":"Gruplar","Choose Group":"Grup Se\u00e7","Grouped":"grupland\u0131r\u0131lm\u0131\u015f","An error has occurred":"Bir hata olu\u015ftu","Unable to proceed, the submitted form is not valid.":"Devam edilemiyor, g\u00f6nderilen form ge\u00e7erli de\u011fil.","No activation is needed for this account.":"Bu hesap i\u00e7in aktivasyon gerekli de\u011fildir.","Invalid activation token.":"Ge\u00e7ersiz etkinle\u015ftirme jetonu.","The expiration token has expired.":"Sona erme jetonunun s\u00fcresi doldu.","Your account is not activated.":"Hesab\u0131n\u0131z aktif de\u011fil.","Unable to change a password for a non active user.":"Etkin olmayan bir kullan\u0131c\u0131 i\u00e7in parola de\u011fi\u015ftirilemiyor.","Unable to submit a new password for a non active user.":"Aktif olmayan bir kullan\u0131c\u0131 i\u00e7in yeni bir \u015fifre g\u00f6nderilemiyor.","Unable to delete an entry that no longer exists.":"Art\u0131k var olmayan bir giri\u015f silinemiyor.","Provides an overview of the products stock.":"\u00dcr\u00fcn sto\u011funa genel bir bak\u0131\u015f sa\u011flar.","Customers Statement":"M\u00fc\u015fteri Bildirimi","Display the complete customer statement.":"Tam m\u00fc\u015fteri beyan\u0131n\u0131 g\u00f6r\u00fcnt\u00fcleyin.","The recovery has been explicitly disabled.":"Kurtarma a\u00e7\u0131k\u00e7a devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","The registration has been explicitly disabled.":"Kay\u0131t a\u00e7\u0131k\u00e7a devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","The entry has been successfully updated.":"Giri\u015f ba\u015far\u0131yla g\u00fcncellendi.","A similar module has been found":"Benzer bir mod\u00fcl bulundu","A grouped product cannot be saved without any sub items.":"Grupland\u0131r\u0131lm\u0131\u015f bir \u00fcr\u00fcn, herhangi bir alt \u00f6\u011fe olmadan kaydedilemez.","A grouped product cannot contain grouped product.":"Grupland\u0131r\u0131lm\u0131\u015f bir \u00fcr\u00fcn, grupland\u0131r\u0131lm\u0131\u015f \u00fcr\u00fcn i\u00e7eremez.","The subitem has been saved.":"Alt \u00f6\u011fe kaydedildi.","The %s is already taken.":"%s zaten al\u0131nm\u0131\u015f.","Allow Wholesale Price":"Toptan Sat\u0131\u015f Fiyat\u0131na \u0130zin Ver","Define if the wholesale price can be selected on the POS.":"POS'ta toptan sat\u0131\u015f fiyat\u0131n\u0131n se\u00e7ilip se\u00e7ilemeyece\u011fini tan\u0131mlay\u0131n.","Allow Decimal Quantities":"Ondal\u0131k Miktarlara \u0130zin Ver","Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.":"Miktarlar i\u00e7in ondal\u0131k basama\u011fa izin vermek i\u00e7in say\u0131sal klavyeyi de\u011fi\u015ftirir. Yaln\u0131zca \"varsay\u0131lan\" say\u0131sal tu\u015f tak\u0131m\u0131 i\u00e7in.","Numpad":"say\u0131sal tu\u015f tak\u0131m\u0131","Advanced":"Geli\u015fmi\u015f","Will set what is the numpad used on the POS screen.":"POS ekran\u0131nda kullan\u0131lan say\u0131sal tu\u015f tak\u0131m\u0131n\u0131n ne oldu\u011funu ayarlayacakt\u0131r.","Force Barcode Auto Focus":"Barkod Otomatik Odaklamay\u0131 Zorla","Will permanently enable barcode autofocus to ease using a barcode reader.":"Barkod okuyucu kullanmay\u0131 kolayla\u015ft\u0131rmak i\u00e7in barkod otomatik odaklamay\u0131 kal\u0131c\u0131 olarak etkinle\u015ftirir.","Keyboard shortcut to toggle fullscreen.":"Tam ekran aras\u0131nda ge\u00e7i\u015f yapmak i\u00e7in klavye k\u0131sayolu.","Tax Included":"Vergi dahil","Unable to proceed, more than one product is set as featured":"Devam edilemiyor, birden fazla \u00fcr\u00fcn \u00f6ne \u00e7\u0131kan olarak ayarland\u0131","The transaction was deleted.":"\u0130\u015flem silindi.","Database connection was successful.":"Veritaban\u0131 ba\u011flant\u0131s\u0131 ba\u015far\u0131l\u0131 oldu.","The products taxes were computed successfully.":"\u00dcr\u00fcn vergileri ba\u015far\u0131yla hesapland\u0131.","Tax Excluded":"Vergi Hari\u00e7","Set Paid":"\u00dccretli olarak ayarla","Would you like to mark this procurement as paid?":"Bu sat\u0131n alma i\u015flemini \u00f6dendi olarak i\u015faretlemek ister misiniz?","Unidentified Item":"Tan\u0131mlanamayan \u00d6\u011fe","Non-existent Item":"Varolmayan \u00d6\u011fe","You cannot change the status of an already paid procurement.":"Halihaz\u0131rda \u00f6denmi\u015f bir tedarikin durumunu de\u011fi\u015ftiremezsiniz.","The procurement payment status has been changed successfully.":"Tedarik \u00f6deme durumu ba\u015far\u0131yla de\u011fi\u015ftirildi.","The procurement has been marked as paid.":"Sat\u0131n alma \u00f6dendi olarak i\u015faretlendi.","Show Price With Tax":"Vergili Fiyat\u0131 G\u00f6ster","Will display price with tax for each products.":"Her \u00fcr\u00fcn i\u00e7in vergili fiyat\u0131 g\u00f6sterecektir.","Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".":"\"${action.component}\" bile\u015feni y\u00fcklenemiyor. Bile\u015fenin \"nsExtraComponents\" i\u00e7in kay\u0131tl\u0131 oldu\u011fundan emin olun.","Tax Inclusive":"Vergi Dahil","Apply Coupon":"kuponu onayla","Not applicable":"Uygulanamaz","Normal":"Normal","Product Taxes":"\u00dcr\u00fcn Vergileri","The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.":"Bu \u00fcr\u00fcne ba\u011fl\u0131 birim eksik veya atanmam\u0131\u015f. L\u00fctfen bu \u00fcr\u00fcn i\u00e7in \"Birim\" sekmesini inceleyin.","X Days After Month Starts":"X Days After Month Starts","On Specific Day":"On Specific Day","Unknown Occurance":"Unknown Occurance","Please provide a valid value.":"Please provide a valid value.","Done":"Done","Would you like to delete \"%s\"?":"Would you like to delete \"%s\"?","Unable to find a module having as namespace \"%s\"":"Unable to find a module having as namespace \"%s\"","Api File":"Api File","Migrations":"Migrations","Determine Until When the coupon is valid.":"Determine Until When the coupon is valid.","Customer Groups":"Customer Groups","Assigned To Customer Group":"Assigned To Customer Group","Only the customers who belongs to the selected groups will be able to use the coupon.":"Only the customers who belongs to the selected groups will be able to use the coupon.","Assigned To Customers":"Assigned To Customers","Only the customers selected will be ale to use the coupon.":"Only the customers selected will be ale to use the coupon.","Unable to save the coupon as one of the selected customer no longer exists.":"Unable to save the coupon as one of the selected customer no longer exists.","Unable to save the coupon as one of the selected customer group no longer exists.":"Unable to save the coupon as one of the selected customer group no longer exists.","Unable to save the coupon as one of the customers provided no longer exists.":"Unable to save the coupon as one of the customers provided no longer exists.","Unable to save the coupon as one of the provided customer group no longer exists.":"Unable to save the coupon as one of the provided customer group no longer exists.","Coupon Order Histories List":"Coupon Order Histories List","Display all coupon order histories.":"Display all coupon order histories.","No coupon order histories has been registered":"No coupon order histories has been registered","Add a new coupon order history":"Add a new coupon order history","Create a new coupon order history":"Create a new coupon order history","Register a new coupon order history and save it.":"Register a new coupon order history and save it.","Edit coupon order history":"Edit coupon order history","Modify Coupon Order History.":"Modify Coupon Order History.","Return to Coupon Order Histories":"Return to Coupon Order Histories","Customer_coupon_id":"Customer_coupon_id","Order_id":"Order_id","Discount_value":"Discount_value","Minimum_cart_value":"Minimum_cart_value","Maximum_cart_value":"Maximum_cart_value","Limit_usage":"Limit_usage","Would you like to delete this?":"Would you like to delete this?","Usage History":"Usage History","Customer Coupon Histories List":"Customer Coupon Histories List","Display all customer coupon histories.":"Display all customer coupon histories.","No customer coupon histories has been registered":"No customer coupon histories has been registered","Add a new customer coupon history":"Add a new customer coupon history","Create a new customer coupon history":"Create a new customer coupon history","Register a new customer coupon history and save it.":"Register a new customer coupon history and save it.","Edit customer coupon history":"Edit customer coupon history","Modify Customer Coupon History.":"Modify Customer Coupon History.","Return to Customer Coupon Histories":"Return to Customer Coupon Histories","Last Name":"Last Name","Provide the customer last name":"Provide the customer last name","Provide the customer gender.":"Provide the customer gender.","Provide the billing first name.":"Provide the billing first name.","Provide the billing last name.":"Provide the billing last name.","Provide the shipping First Name.":"Provide the shipping First Name.","Provide the shipping Last Name.":"Provide the shipping Last Name.","Scheduled":"Scheduled","Set the scheduled date.":"Set the scheduled date.","Account Name":"Account Name","Provider last name if necessary.":"Provider last name if necessary.","Provide the user first name.":"Provide the user first name.","Provide the user last name.":"Provide the user last name.","Set the user gender.":"Set the user gender.","Set the user phone number.":"Set the user phone number.","Set the user PO Box.":"Set the user PO Box.","Provide the billing First Name.":"Provide the billing First Name.","Last name":"Last name","Group Name":"Group Name","Delete a user":"Delete a user","Activated":"Activated","type":"type","User Group":"User Group","Scheduled On":"Scheduled On","Biling":"Biling","API Token":"API Token","Your Account has been successfully created.":"Your Account has been successfully created.","Unable to export if there is nothing to export.":"Unable to export if there is nothing to export.","%s Coupons":"%s Coupons","%s Coupon History":"%s Coupon History","\"%s\" Record History":"\"%s\" Record History","The media name was successfully updated.":"The media name was successfully updated.","The role was successfully assigned.":"The role was successfully assigned.","The role were successfully assigned.":"The role were successfully assigned.","Unable to identifier the provided role.":"Unable to identifier the provided role.","Good Condition":"Good Condition","Cron Disabled":"Cron Disabled","Task Scheduling Disabled":"Task Scheduling Disabled","NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.":"NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.","The email \"%s\" is already used for another customer.":"The email \"%s\" is already used for another customer.","The provided coupon cannot be loaded for that customer.":"The provided coupon cannot be loaded for that customer.","The provided coupon cannot be loaded for the group assigned to the selected customer.":"The provided coupon cannot be loaded for the group assigned to the selected customer.","Unable to use the coupon %s as it has expired.":"Unable to use the coupon %s as it has expired.","Unable to use the coupon %s at this moment.":"Unable to use the coupon %s at this moment.","Small Box":"Small Box","Box":"Box","%s products were freed":"%s products were freed","Restoring cash flow from paid orders...":"Restoring cash flow from paid orders...","Restoring cash flow from refunded orders...":"Restoring cash flow from refunded orders...","%s on %s directories were deleted.":"%s on %s directories were deleted.","%s on %s files were deleted.":"%s on %s files were deleted.","First Day Of Month":"First Day Of Month","Last Day Of Month":"Last Day Of Month","Month middle Of Month":"Month middle Of Month","{day} after month starts":"{day} after month starts","{day} before month ends":"{day} before month ends","Every {day} of the month":"Every {day} of the month","Days":"Days","Make sure set a day that is likely to be executed":"Make sure set a day that is likely to be executed","Invalid Module provided.":"Invalid Module provided.","The module was \"%s\" was successfully installed.":"The module was \"%s\" was successfully installed.","The modules \"%s\" was deleted successfully.":"The modules \"%s\" was deleted successfully.","Unable to locate a module having as identifier \"%s\".":"Unable to locate a module having as identifier \"%s\".","All migration were executed.":"All migration were executed.","Unknown Product Status":"Unknown Product Status","Member Since":"Member Since","Total Customers":"Total Customers","The widgets was successfully updated.":"The widgets was successfully updated.","The token was successfully created":"The token was successfully created","The token has been successfully deleted.":"The token has been successfully deleted.","Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".":"Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".","Will display all cashiers who performs well.":"Will display all cashiers who performs well.","Will display all customers with the highest purchases.":"Will display all customers with the highest purchases.","Expense Card Widget":"Expense Card Widget","Will display a card of current and overwall expenses.":"Will display a card of current and overwall expenses.","Incomplete Sale Card Widget":"Incomplete Sale Card Widget","Will display a card of current and overall incomplete sales.":"Will display a card of current and overall incomplete sales.","Orders Chart":"Orders Chart","Will display a chart of weekly sales.":"Will display a chart of weekly sales.","Orders Summary":"Orders Summary","Will display a summary of recent sales.":"Will display a summary of recent sales.","Will display a profile widget with user stats.":"Will display a profile widget with user stats.","Sale Card Widget":"Sale Card Widget","Will display current and overall sales.":"Will display current and overall sales.","Return To Calendar":"Return To Calendar","Thr":"Thr","The left range will be invalid.":"The left range will be invalid.","The right range will be invalid.":"The right range will be invalid.","Click here to add widgets":"Click here to add widgets","Choose Widget":"Choose Widget","Select with widget you want to add to the column.":"Select with widget you want to add to the column.","Unamed Tab":"Unamed Tab","An error unexpected occured while printing.":"An error unexpected occured while printing.","and":"and","{date} ago":"{date} ago","In {date}":"In {date}","An unexpected error occured.":"An unexpected error occured.","Warning":"Warning","Change Type":"Change Type","Save Expense":"Save Expense","No configuration were choosen. Unable to proceed.":"No configuration were choosen. Unable to proceed.","Conditions":"Conditions","By proceeding the current for and all your entries will be cleared. Would you like to proceed?":"By proceeding the current for and all your entries will be cleared. Would you like to proceed?","No modules matches your search term.":"No modules matches your search term.","Press \"\/\" to search modules":"Press \"\/\" to search modules","No module has been uploaded yet.":"No module has been uploaded yet.","{module}":"{module}","Would you like to delete \"{module}\"? All data created by the module might also be deleted.":"Would you like to delete \"{module}\"? All data created by the module might also be deleted.","Search Medias":"Search Medias","Bulk Select":"Bulk Select","Press "\/" to search permissions":"Press "\/" to search permissions","SKU, Barcode, Name":"SKU, Barcode, Name","About Token":"About Token","Save Token":"Save Token","Generated Tokens":"Generated Tokens","Created":"Created","Last Use":"Last Use","Never":"Never","Expires":"Expires","Revoke":"Revoke","Token Name":"Token Name","This will be used to identifier the token.":"This will be used to identifier the token.","Unable to proceed, the form is not valid.":"Unable to proceed, the form is not valid.","An unexpected error occured":"An unexpected error occured","An Error Has Occured":"An Error Has Occured","Febuary":"Febuary","Configure":"Configure","Unable to add the product":"Unable to add the product","No result to result match the search value provided.":"No result to result match the search value provided.","This QR code is provided to ease authentication on external applications.":"This QR code is provided to ease authentication on external applications.","Copy And Close":"Copy And Close","An error has occured":"An error has occured","Recents Orders":"Recents Orders","Unamed Page":"Unamed Page","Assignation":"Assignation","Incoming Conversion":"Incoming Conversion","Outgoing Conversion":"Outgoing Conversion","Unknown Action":"Unknown Action","Direct Transaction":"Direct Transaction","Recurring Transaction":"Recurring Transaction","Entity Transaction":"Entity Transaction","Scheduled Transaction":"Scheduled Transaction","Unknown Type (%s)":"Unknown Type (%s)","What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.":"What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.","What is the full model name. eg: App\\Models\\Order ? [Q] to quit.":"What is the full model name. eg: App\\Models\\Order ? [Q] to quit.","What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.":"What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.","Unsupported argument provided: \"%s\"":"Unsupported argument provided: \"%s\"","The authorization token can\\'t be changed manually.":"The authorization token can\\'t be changed manually.","Translation process is complete for the module %s !":"Translation process is complete for the module %s !","%s migration(s) has been deleted.":"%s migration(s) has been deleted.","The command has been created for the module \"%s\"!":"The command has been created for the module \"%s\"!","The controller has been created for the module \"%s\"!":"The controller has been created for the module \"%s\"!","The event has been created at the following path \"%s\"!":"The event has been created at the following path \"%s\"!","The listener has been created on the path \"%s\"!":"The listener has been created on the path \"%s\"!","A request with the same name has been found !":"A request with the same name has been found !","Unable to find a module having the identifier \"%s\".":"Unable to find a module having the identifier \"%s\".","Unsupported reset mode.":"Unsupported reset mode.","You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.":"You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.","Unable to find a module having \"%s\" as namespace.":"Unable to find a module having \"%s\" as namespace.","A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.":"A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.","A new form class was created at the path \"%s\"":"A new form class was created at the path \"%s\"","Unable to proceed, looks like the database can\\'t be used.":"Unable to proceed, looks like the database can\\'t be used.","In which language would you like to install NexoPOS ?":"In which language would you like to install NexoPOS ?","You must define the language of installation.":"You must define the language of installation.","The value above which the current coupon can\\'t apply.":"The value above which the current coupon can\\'t apply.","Unable to save the coupon product as this product doens\\'t exists.":"Unable to save the coupon product as this product doens\\'t exists.","Unable to save the coupon category as this category doens\\'t exists.":"Unable to save the coupon category as this category doens\\'t exists.","Unable to save the coupon as this category doens\\'t exists.":"Unable to save the coupon as this category doens\\'t exists.","You\\re not allowed to do that.":"You\\re not allowed to do that.","Crediting (Add)":"Crediting (Add)","Refund (Add)":"Refund (Add)","Deducting (Remove)":"Deducting (Remove)","Payment (Remove)":"Payment (Remove)","The assigned default customer group doesn\\'t exist or is not defined.":"The assigned default customer group doesn\\'t exist or is not defined.","Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0":"Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0","You\\'re not allowed to do this operation":"You\\'re not allowed to do this operation","If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.":"If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.","Convert Unit":"Convert Unit","The unit that is selected for convertion by default.":"The unit that is selected for convertion by default.","COGS":"COGS","Used to define the Cost of Goods Sold.":"Used to define the Cost of Goods Sold.","Visible":"Visible","Define whether the unit is available for sale.":"Define whether the unit is available for sale.","Product unique name. If it\\' variation, it should be relevant for that variation":"Product unique name. If it\\' variation, it should be relevant for that variation","The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.":"The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.","The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.":"The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.","Auto COGS":"Auto COGS","Unknown Type: %s":"Unknown Type: %s","Shortage":"Shortage","Overage":"Overage","Transactions List":"Transactions List","Display all transactions.":"Display all transactions.","No transactions has been registered":"No transactions has been registered","Add a new transaction":"Add a new transaction","Create a new transaction":"Create a new transaction","Register a new transaction and save it.":"Register a new transaction and save it.","Edit transaction":"Edit transaction","Modify Transaction.":"Modify Transaction.","Return to Transactions":"Return to Transactions","determine if the transaction is effective or not. Work for recurring and not recurring transactions.":"determine if the transaction is effective or not. Work for recurring and not recurring transactions.","Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.":"Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.","Transaction Account":"Transaction Account","Assign the transaction to an account430":"Assign the transaction to an account430","Is the value or the cost of the transaction.":"Is the value or the cost of the transaction.","If set to Yes, the transaction will trigger on defined occurrence.":"If set to Yes, the transaction will trigger on defined occurrence.","Define how often this transaction occurs":"Define how often this transaction occurs","Define what is the type of the transactions.":"Define what is the type of the transactions.","Trigger":"Trigger","Would you like to trigger this expense now?":"Would you like to trigger this expense now?","Transactions History List":"Transactions History List","Display all transaction history.":"Display all transaction history.","No transaction history has been registered":"No transaction history has been registered","Add a new transaction history":"Add a new transaction history","Create a new transaction history":"Create a new transaction history","Register a new transaction history and save it.":"Register a new transaction history and save it.","Edit transaction history":"Edit transaction history","Modify Transactions history.":"Modify Transactions history.","Return to Transactions History":"Return to Transactions History","Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.":"Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.","Set the limit that can\\'t be exceeded by the user.":"Set the limit that can\\'t be exceeded by the user.","Oops, We\\'re Sorry!!!":"Oops, We\\'re Sorry!!!","Class: %s":"Class: %s","There\\'s is mismatch with the core version.":"There\\'s is mismatch with the core version.","You\\'re not authenticated.":"You\\'re not authenticated.","An error occured while performing your request.":"An error occured while performing your request.","A mismatch has occured between a module and it\\'s dependency.":"A mismatch has occured between a module and it\\'s dependency.","You\\'re not allowed to see that page.":"You\\'re not allowed to see that page.","Post Too Large":"Post Too Large","The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini":"The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini","This field does\\'nt have a valid value.":"This field does\\'nt have a valid value.","Describe the direct transaction.":"Describe the direct transaction.","If set to yes, the transaction will take effect immediately and be saved on the history.":"If set to yes, the transaction will take effect immediately and be saved on the history.","Assign the transaction to an account.":"Assign the transaction to an account.","set the value of the transaction.":"set the value of the transaction.","Further details on the transaction.":"Further details on the transaction.","Describe the direct transactions.":"Describe the direct transactions.","set the value of the transactions.":"set the value of the transactions.","The transactions will be multipled by the number of user having that role.":"The transactions will be multipled by the number of user having that role.","Create Sales (needs Procurements)":"Create Sales (needs Procurements)","Set when the transaction should be executed.":"Set when the transaction should be executed.","The addresses were successfully updated.":"The addresses were successfully updated.","Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.":"Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.","The register doesn\\'t have an history.":"The register doesn\\'t have an history.","Unable to check a register session history if it\\'s closed.":"Unable to check a register session history if it\\'s closed.","Register History For : %s":"Register History For : %s","Can\\'t delete a category having sub categories linked to it.":"Can\\'t delete a category having sub categories linked to it.","Unable to proceed. The request doesn\\'t provide enough data which could be handled":"Unable to proceed. The request doesn\\'t provide enough data which could be handled","Unable to load the CRUD resource : %s.":"Unable to load the CRUD resource : %s.","Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods":"Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods","The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.":"The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.","The crud columns exceed the maximum column that can be exported (27)":"The crud columns exceed the maximum column that can be exported (27)","This link has expired.":"This link has expired.","Account History : %s":"Account History : %s","Welcome — %s":"Welcome — %s","Upload and manage medias (photos).":"Upload and manage medias (photos).","The product which id is %s doesnt\\'t belong to the procurement which id is %s":"The product which id is %s doesnt\\'t belong to the procurement which id is %s","The refresh process has started. You\\'ll get informed once it\\'s complete.":"The refresh process has started. You\\'ll get informed once it\\'s complete.","The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".":"The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".","Stock History For %s":"Stock History For %s","Set":"Set","The unit is not set for the product \"%s\".":"The unit is not set for the product \"%s\".","The operation will cause a negative stock for the product \"%s\" (%s).":"The operation will cause a negative stock for the product \"%s\" (%s).","The adjustment quantity can\\'t be negative for the product \"%s\" (%s)":"The adjustment quantity can\\'t be negative for the product \"%s\" (%s)","%s\\'s Products":"%s\\'s Products","Transactions Report":"Transactions Report","Combined Report":"Combined Report","Provides a combined report for every transactions on products.":"Provides a combined report for every transactions on products.","Unable to initiallize the settings page. The identifier \"' . $identifier . '":"Unable to initiallize the settings page. The identifier \"' . $identifier . '","Shows all histories generated by the transaction.":"Shows all histories generated by the transaction.","Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.":"Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.","Create New Transaction":"Create New Transaction","Set direct, scheduled transactions.":"Set direct, scheduled transactions.","Update Transaction":"Update Transaction","The provided data aren\\'t valid":"The provided data aren\\'t valid","Welcome — NexoPOS":"Welcome — NexoPOS","You\\'re not allowed to see this page.":"You\\'re not allowed to see this page.","Your don\\'t have enough permission to perform this action.":"Your don\\'t have enough permission to perform this action.","You don\\'t have the necessary role to see this page.":"You don\\'t have the necessary role to see this page.","%s order(s) has recently been deleted as they has expired.":"%s order(s) has recently been deleted as they has expired.","%s product(s) has low stock. Reorder those product(s) before it get exhausted.":"%s product(s) has low stock. Reorder those product(s) before it get exhausted.","Scheduled Transactions":"Scheduled Transactions","the transaction \"%s\" was executed as scheduled on %s.":"the transaction \"%s\" was executed as scheduled on %s.","Workers Aren\\'t Running":"Workers Aren\\'t Running","The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.":"The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.","Unable to remove the permissions \"%s\". It doesn\\'t exists.":"Unable to remove the permissions \"%s\". It doesn\\'t exists.","An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A":"An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A","Unable to open \"%s\" *, as it\\'s not closed.":"Unable to open \"%s\" *, as it\\'s not closed.","Unable to open \"%s\" *, as it\\'s not opened.":"Unable to open \"%s\" *, as it\\'s not opened.","Unable to cashing on \"%s\" *, as it\\'s not opened.":"Unable to cashing on \"%s\" *, as it\\'s not opened.","Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.":"Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.","Unable to cashout on \"%s":"Unable to cashout on \"%s","Symbolic Links Missing":"Symbolic Links Missing","The Symbolic Links to the public directory is missing. Your medias might be broken and not display.":"The Symbolic Links to the public directory is missing. Your medias might be broken and not display.","Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.":"Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.","The requested module %s cannot be found.":"The requested module %s cannot be found.","The manifest.json can\\'t be located inside the module %s on the path: %s":"The manifest.json can\\'t be located inside the module %s on the path: %s","the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.":"the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.","Sorting is explicitely disabled for the column \"%s\".":"Sorting is explicitely disabled for the column \"%s\".","Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s":"Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s","Unable to find the customer using the provided id %s.":"Unable to find the customer using the provided id %s.","Not enough credits on the customer account. Requested : %s, Remaining: %s.":"Not enough credits on the customer account. Requested : %s, Remaining: %s.","The customer account doesn\\'t have enough funds to proceed.":"The customer account doesn\\'t have enough funds to proceed.","Unable to find a reference to the attached coupon : %s":"Unable to find a reference to the attached coupon : %s","You\\'re not allowed to use this coupon as it\\'s no longer active":"You\\'re not allowed to use this coupon as it\\'s no longer active","You\\'re not allowed to use this coupon it has reached the maximum usage allowed.":"You\\'re not allowed to use this coupon it has reached the maximum usage allowed.","Terminal A":"Terminal A","Terminal B":"Terminal B","%s link were deleted":"%s link were deleted","Unable to execute the following class callback string : %s":"Unable to execute the following class callback string : %s","%s — %s":"%s — %s","Transactions":"Transactions","Create Transaction":"Create Transaction","Stock History":"Stock History","Invoices":"Invoices","Failed to parse the configuration file on the following path \"%s\"":"Failed to parse the configuration file on the following path \"%s\"","No config.xml has been found on the directory : %s. This folder is ignored":"No config.xml has been found on the directory : %s. This folder is ignored","The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ":"The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ","Unable to upload this module as it\\'s older than the version installed":"Unable to upload this module as it\\'s older than the version installed","The migration file doens\\'t have a valid class name. Expected class : %s":"The migration file doens\\'t have a valid class name. Expected class : %s","Unable to locate the following file : %s":"Unable to locate the following file : %s","The migration file doens\\'t have a valid method name. Expected method : %s":"The migration file doens\\'t have a valid method name. Expected method : %s","The module %s cannot be enabled as his dependency (%s) is missing or not enabled.":"The module %s cannot be enabled as his dependency (%s) is missing or not enabled.","The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.":"The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.","An Error Occurred \"%s\": %s":"An Error Occurred \"%s\": %s","The order has been updated":"The order has been updated","The minimal payment of %s has\\'nt been provided.":"The minimal payment of %s has\\'nt been provided.","Unable to proceed as the order is already paid.":"Unable to proceed as the order is already paid.","The customer account funds are\\'nt enough to process the payment.":"The customer account funds are\\'nt enough to process the payment.","Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.","Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.","By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.":"By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.","You\\'re not allowed to make payments.":"You\\'re not allowed to make payments.","Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s":"Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s","Unknown Status (%s)":"Unknown Status (%s)","%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.":"%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.","Unable to find a reference of the provided coupon : %s":"Unable to find a reference of the provided coupon : %s","The procurement has been deleted. %s included stock record(s) has been deleted as well.":"The procurement has been deleted. %s included stock record(s) has been deleted as well.","Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.":"Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.","Unable to find the product using the provided id \"%s\"":"Unable to find the product using the provided id \"%s\"","Unable to procure the product \"%s\" as the stock management is disabled.":"Unable to procure the product \"%s\" as the stock management is disabled.","Unable to procure the product \"%s\" as it is a grouped product.":"Unable to procure the product \"%s\" as it is a grouped product.","The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item":"The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item","%s procurement(s) has recently been automatically procured.":"%s procurement(s) has recently been automatically procured.","The requested category doesn\\'t exists":"The requested category doesn\\'t exists","The category to which the product is attached doesn\\'t exists or has been deleted":"The category to which the product is attached doesn\\'t exists or has been deleted","Unable to create a product with an unknow type : %s":"Unable to create a product with an unknow type : %s","A variation within the product has a barcode which is already in use : %s.":"A variation within the product has a barcode which is already in use : %s.","A variation within the product has a SKU which is already in use : %s":"A variation within the product has a SKU which is already in use : %s","Unable to edit a product with an unknown type : %s":"Unable to edit a product with an unknown type : %s","The requested sub item doesn\\'t exists.":"The requested sub item doesn\\'t exists.","One of the provided product variation doesn\\'t include an identifier.":"One of the provided product variation doesn\\'t include an identifier.","The product\\'s unit quantity has been updated.":"The product\\'s unit quantity has been updated.","Unable to reset this variable product \"%s":"Unable to reset this variable product \"%s","Adjusting grouped product inventory must result of a create, update, delete sale operation.":"Adjusting grouped product inventory must result of a create, update, delete sale operation.","Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).":"Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).","Unsupported stock action \"%s\"":"Unsupported stock action \"%s\"","%s product(s) has been deleted.":"%s product(s) has been deleted.","%s products(s) has been deleted.":"%s products(s) has been deleted.","Unable to find the product, as the argument \"%s\" which value is \"%s":"Unable to find the product, as the argument \"%s\" which value is \"%s","You cannot convert unit on a product having stock management disabled.":"You cannot convert unit on a product having stock management disabled.","The source and the destination unit can\\'t be the same. What are you trying to do ?":"The source and the destination unit can\\'t be the same. What are you trying to do ?","There is no source unit quantity having the name \"%s\" for the item %s":"There is no source unit quantity having the name \"%s\" for the item %s","There is no destination unit quantity having the name %s for the item %s":"There is no destination unit quantity having the name %s for the item %s","The source unit and the destination unit doens\\'t belong to the same unit group.":"The source unit and the destination unit doens\\'t belong to the same unit group.","The group %s has no base unit defined":"The group %s has no base unit defined","The conversion of %s(%s) to %s(%s) was successful":"The conversion of %s(%s) to %s(%s) was successful","The product has been deleted.":"The product has been deleted.","An error occurred: %s.":"An error occurred: %s.","A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.":"A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.","Today\\'s Orders":"Today\\'s Orders","Today\\'s Sales":"Today\\'s Sales","Today\\'s Refunds":"Today\\'s Refunds","Today\\'s Customers":"Today\\'s Customers","The report will be generated. Try loading the report within few minutes.":"The report will be generated. Try loading the report within few minutes.","The database has been wiped out.":"The database has been wiped out.","No custom handler for the reset \"' . $mode . '\"":"No custom handler for the reset \"' . $mode . '\"","Unable to proceed. The parent tax doesn\\'t exists.":"Unable to proceed. The parent tax doesn\\'t exists.","A simple tax must not be assigned to a parent tax with the type \"simple":"A simple tax must not be assigned to a parent tax with the type \"simple","Created via tests":"Created via tests","The transaction has been successfully saved.":"The transaction has been successfully saved.","The transaction has been successfully updated.":"The transaction has been successfully updated.","Unable to find the transaction using the provided identifier.":"Unable to find the transaction using the provided identifier.","Unable to find the requested transaction using the provided id.":"Unable to find the requested transaction using the provided id.","The transction has been correctly deleted.":"The transction has been correctly deleted.","You cannot delete an account which has transactions bound.":"You cannot delete an account which has transactions bound.","The transaction account has been deleted.":"The transaction account has been deleted.","Unable to find the transaction account using the provided ID.":"Unable to find the transaction account using the provided ID.","The transaction account has been updated.":"The transaction account has been updated.","This transaction type can\\'t be triggered.":"This transaction type can\\'t be triggered.","The transaction has been successfully triggered.":"The transaction has been successfully triggered.","The transaction \"%s\" has been processed on day \"%s\".":"The transaction \"%s\" has been processed on day \"%s\".","The transaction \"%s\" has already been processed.":"The transaction \"%s\" has already been processed.","The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.":"The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.","The process has been correctly executed and all transactions has been processed.":"The process has been correctly executed and all transactions has been processed.","The process has been executed with some failures. %s\/%s process(es) has successed.":"The process has been executed with some failures. %s\/%s process(es) has successed.","Procurement : %s":"Procurement : %s","Procurement Liability : %s":"Procurement Liability : %s","Refunding : %s":"Refunding : %s","Spoiled Good : %s":"Spoiled Good : %s","Sale : %s":"Sale : %s","Liabilities Account":"Liabilities Account","Not found account type: %s":"Not found account type: %s","Refund : %s":"Refund : %s","Customer Account Crediting : %s":"Customer Account Crediting : %s","Customer Account Purchase : %s":"Customer Account Purchase : %s","Customer Account Deducting : %s":"Customer Account Deducting : %s","Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.":"Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.","The unit group %s doesn\\'t have a base unit":"The unit group %s doesn\\'t have a base unit","The system role \"Users\" can be retrieved.":"The system role \"Users\" can be retrieved.","The default role that must be assigned to new users cannot be retrieved.":"The default role that must be assigned to new users cannot be retrieved.","%s Second(s)":"%s Second(s)","Configure the accounting feature":"Configure the accounting feature","Define the symbol that indicate thousand. By default ":"Define the symbol that indicate thousand. By default ","Date Time Format":"Date Time Format","This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".":"This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".","Date TimeZone":"Date TimeZone","Determine the default timezone of the store. Current Time: %s":"Determine the default timezone of the store. Current Time: %s","Configure how invoice and receipts are used.":"Configure how invoice and receipts are used.","configure settings that applies to orders.":"configure settings that applies to orders.","Report Settings":"Report Settings","Configure the settings":"Configure the settings","Wipes and Reset the database.":"Wipes and Reset the database.","Supply Delivery":"Supply Delivery","Configure the delivery feature.":"Configure the delivery feature.","Configure how background operations works.":"Configure how background operations works.","Every procurement will be added to the selected transaction account":"Every procurement will be added to the selected transaction account","Every sales will be added to the selected transaction account":"Every sales will be added to the selected transaction account","Customer Credit Account (crediting)":"Customer Credit Account (crediting)","Every customer credit will be added to the selected transaction account":"Every customer credit will be added to the selected transaction account","Customer Credit Account (debitting)":"Customer Credit Account (debitting)","Every customer credit removed will be added to the selected transaction account":"Every customer credit removed will be added to the selected transaction account","Sales refunds will be attached to this transaction account":"Sales refunds will be attached to this transaction account","Stock Return Account (Spoiled Items)":"Stock Return Account (Spoiled Items)","Disbursement (cash register)":"Disbursement (cash register)","Transaction account for all cash disbursement.":"Transaction account for all cash disbursement.","Liabilities":"Liabilities","Transaction account for all liabilities.":"Transaction account for all liabilities.","You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.":"You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.","Show Tax Breakdown":"Show Tax Breakdown","Will display the tax breakdown on the receipt\/invoice.":"Will display the tax breakdown on the receipt\/invoice.","Available tags : ":"Available tags : ","{store_name}: displays the store name.":"{store_name}: displays the store name.","{store_email}: displays the store email.":"{store_email}: displays the store email.","{store_phone}: displays the store phone number.":"{store_phone}: displays the store phone number.","{cashier_name}: displays the cashier name.":"{cashier_name}: displays the cashier name.","{cashier_id}: displays the cashier id.":"{cashier_id}: displays the cashier id.","{order_code}: displays the order code.":"{order_code}: displays the order code.","{order_date}: displays the order date.":"{order_date}: displays the order date.","{order_type}: displays the order type.":"{order_type}: displays the order type.","{customer_name}: displays the customer name.":"{customer_name}: displays the customer name.","{customer_email}: displays the customer email.":"{customer_email}: displays the customer email.","{shipping_first_name}: displays the shipping first name.":"{shipping_first_name}: displays the shipping first name.","{shipping_last_name}: displays the shipping last name.":"{shipping_last_name}: displays the shipping last name.","{shipping_phone}: displays the shipping phone.":"{shipping_phone}: displays the shipping phone.","{shipping_address_1}: displays the shipping address_1.":"{shipping_address_1}: displays the shipping address_1.","{shipping_address_2}: displays the shipping address_2.":"{shipping_address_2}: displays the shipping address_2.","{shipping_country}: displays the shipping country.":"{shipping_country}: displays the shipping country.","{shipping_city}: displays the shipping city.":"{shipping_city}: displays the shipping city.","{shipping_pobox}: displays the shipping pobox.":"{shipping_pobox}: displays the shipping pobox.","{shipping_company}: displays the shipping company.":"{shipping_company}: displays the shipping company.","{shipping_email}: displays the shipping email.":"{shipping_email}: displays the shipping email.","{billing_first_name}: displays the billing first name.":"{billing_first_name}: displays the billing first name.","{billing_last_name}: displays the billing last name.":"{billing_last_name}: displays the billing last name.","{billing_phone}: displays the billing phone.":"{billing_phone}: displays the billing phone.","{billing_address_1}: displays the billing address_1.":"{billing_address_1}: displays the billing address_1.","{billing_address_2}: displays the billing address_2.":"{billing_address_2}: displays the billing address_2.","{billing_country}: displays the billing country.":"{billing_country}: displays the billing country.","{billing_city}: displays the billing city.":"{billing_city}: displays the billing city.","{billing_pobox}: displays the billing pobox.":"{billing_pobox}: displays the billing pobox.","{billing_company}: displays the billing company.":"{billing_company}: displays the billing company.","{billing_email}: displays the billing email.":"{billing_email}: displays the billing email.","Available tags :":"Available tags :","Quick Product Default Unit":"Quick Product Default Unit","Set what unit is assigned by default to all quick product.":"Set what unit is assigned by default to all quick product.","Hide Exhausted Products":"Hide Exhausted Products","Will hide exhausted products from selection on the POS.":"Will hide exhausted products from selection on the POS.","Hide Empty Category":"Hide Empty Category","Category with no or exhausted products will be hidden from selection.":"Category with no or exhausted products will be hidden from selection.","Default Printing (web)":"Default Printing (web)","The amount numbers shortcuts separated with a \"|\".":"The amount numbers shortcuts separated with a \"|\".","No submit URL was provided":"No submit URL was provided","Sorting is explicitely disabled on this column":"Sorting is explicitely disabled on this column","An unpexpected error occured while using the widget.":"An unpexpected error occured while using the widget.","This field must be similar to \"{other}\"\"":"This field must be similar to \"{other}\"\"","This field must have at least \"{length}\" characters\"":"This field must have at least \"{length}\" characters\"","This field must have at most \"{length}\" characters\"":"This field must have at most \"{length}\" characters\"","This field must be different from \"{other}\"\"":"This field must be different from \"{other}\"\"","Search result":"Search result","Choose...":"Choose...","The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.":"The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.","+{count} other":"+{count} other","The selected print gateway doesn't support this type of printing.":"The selected print gateway doesn't support this type of printing.","millisecond| second| minute| hour| day| week| month| year| decade| century| millennium":"millisecond| second| minute| hour| day| week| month| year| decade| century| millennium","milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia":"milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia","An error occured":"An error occured","You\\'re about to delete selected resources. Would you like to proceed?":"You\\'re about to delete selected resources. Would you like to proceed?","See Error":"See Error","Your uploaded files will displays here.":"Your uploaded files will displays here.","Nothing to care about !":"Nothing to care about !","Would you like to bulk edit a system role ?":"Would you like to bulk edit a system role ?","Total :":"Total :","Remaining :":"Remaining :","Instalments:":"Instalments:","This instalment doesn\\'t have any payment attached.":"This instalment doesn\\'t have any payment attached.","You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?":"You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?","An error has occured while seleting the payment gateway.":"An error has occured while seleting the payment gateway.","You're not allowed to add a discount on the product.":"You're not allowed to add a discount on the product.","You're not allowed to add a discount on the cart.":"You're not allowed to add a discount on the cart.","Cash Register : {register}":"Cash Register : {register}","The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?":"The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?","You don't have the right to edit the purchase price.":"You don't have the right to edit the purchase price.","Dynamic product can\\'t have their price updated.":"Dynamic product can\\'t have their price updated.","You\\'re not allowed to edit the order settings.":"You\\'re not allowed to edit the order settings.","Looks like there is either no products and no categories. How about creating those first to get started ?":"Looks like there is either no products and no categories. How about creating those first to get started ?","Create Categories":"Create Categories","You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?":"You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?","An unexpected error has occured while loading the form. Please check the log or contact the support.":"An unexpected error has occured while loading the form. Please check the log or contact the support.","We were not able to load the units. Make sure there are units attached on the unit group selected.":"We were not able to load the units. Make sure there are units attached on the unit group selected.","The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?":"The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?","There shoulnd\\'t be more option than there are units.":"There shoulnd\\'t be more option than there are units.","Either Selling or Purchase unit isn\\'t defined. Unable to proceed.":"Either Selling or Purchase unit isn\\'t defined. Unable to proceed.","Select the procured unit first before selecting the conversion unit.":"Select the procured unit first before selecting the conversion unit.","Convert to unit":"Convert to unit","An unexpected error has occured":"An unexpected error has occured","Unable to add product which doesn\\'t unit quantities defined.":"Unable to add product which doesn\\'t unit quantities defined.","{product}: Purchase Unit":"{product}: Purchase Unit","The product will be procured on that unit.":"The product will be procured on that unit.","Unkown Unit":"Unkown Unit","Choose Tax":"Choose Tax","The tax will be assigned to the procured product.":"The tax will be assigned to the procured product.","Show Details":"Show Details","Hide Details":"Hide Details","Important Notes":"Important Notes","Stock Management Products.":"Stock Management Products.","Doesn\\'t work with Grouped Product.":"Doesn\\'t work with Grouped Product.","Convert":"Convert","Looks like no valid products matched the searched term.":"Looks like no valid products matched the searched term.","This product doesn't have any stock to adjust.":"This product doesn't have any stock to adjust.","Select Unit":"Select Unit","Select the unit that you want to adjust the stock with.":"Select the unit that you want to adjust the stock with.","A similar product with the same unit already exists.":"A similar product with the same unit already exists.","Select Procurement":"Select Procurement","Select the procurement that you want to adjust the stock with.":"Select the procurement that you want to adjust the stock with.","Select Action":"Select Action","Select the action that you want to perform on the stock.":"Select the action that you want to perform on the stock.","Would you like to remove the selected products from the table ?":"Would you like to remove the selected products from the table ?","Unit:":"Unit:","Operation:":"Operation:","Procurement:":"Procurement:","Reason:":"Reason:","Provided":"Provided","Not Provided":"Not Provided","Remove Selected":"Remove Selected","Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.":"Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.","You haven\\'t yet generated any token for your account. Create one to get started.":"You haven\\'t yet generated any token for your account. Create one to get started.","You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?":"You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?","Date Range : {date1} - {date2}":"Date Range : {date1} - {date2}","Document : Best Products":"Document : Best Products","By : {user}":"By : {user}","Range : {date1} — {date2}":"Range : {date1} — {date2}","Document : Sale By Payment":"Document : Sale By Payment","Document : Customer Statement":"Document : Customer Statement","Customer : {selectedCustomerName}":"Customer : {selectedCustomerName}","All Categories":"All Categories","All Units":"All Units","Date : {date}":"Date : {date}","Document : {reportTypeName}":"Document : {reportTypeName}","Threshold":"Threshold","Select Units":"Select Units","An error has occured while loading the units.":"An error has occured while loading the units.","An error has occured while loading the categories.":"An error has occured while loading the categories.","Document : Payment Type":"Document : Payment Type","Document : Profit Report":"Document : Profit Report","Filter by Category":"Filter by Category","Filter by Units":"Filter by Units","An error has occured while loading the categories":"An error has occured while loading the categories","An error has occured while loading the units":"An error has occured while loading the units","By Type":"By Type","By User":"By User","By Category":"By Category","All Category":"All Category","Document : Sale Report":"Document : Sale Report","Filter By Category":"Filter By Category","Allow you to choose the category.":"Allow you to choose the category.","No category was found for proceeding the filtering.":"No category was found for proceeding the filtering.","Document : Sold Stock Report":"Document : Sold Stock Report","Filter by Unit":"Filter by Unit","Limit Results By Categories":"Limit Results By Categories","Limit Results By Units":"Limit Results By Units","Generate Report":"Generate Report","Document : Combined Products History":"Document : Combined Products History","Ini. Qty":"Ini. Qty","Added Quantity":"Added Quantity","Add. Qty":"Add. Qty","Sold Quantity":"Sold Quantity","Sold Qty":"Sold Qty","Defective Quantity":"Defective Quantity","Defec. Qty":"Defec. Qty","Final Quantity":"Final Quantity","Final Qty":"Final Qty","No data available":"No data available","Document : Yearly Report":"Document : Yearly Report","The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.":"The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.","Unable to edit this transaction":"Unable to edit this transaction","This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.":"This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.","Save Transaction":"Save Transaction","While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.":"While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.","The transaction is about to be saved. Would you like to confirm your action ?":"The transaction is about to be saved. Would you like to confirm your action ?","Unable to load the transaction":"Unable to load the transaction","You cannot edit this transaction if NexoPOS cannot perform background requests.":"You cannot edit this transaction if NexoPOS cannot perform background requests.","MySQL is selected as database driver":"MySQL is selected as database driver","Please provide the credentials to ensure NexoPOS can connect to the database.":"Please provide the credentials to ensure NexoPOS can connect to the database.","Sqlite is selected as database driver":"Sqlite is selected as database driver","Make sure Sqlite module is available for PHP. Your database will be located on the database directory.":"Make sure Sqlite module is available for PHP. Your database will be located on the database directory.","Checking database connectivity...":"Checking database connectivity...","Driver":"Driver","Set the database driver":"Set the database driver","Hostname":"Hostname","Provide the database hostname":"Provide the database hostname","Username required to connect to the database.":"Username required to connect to the database.","The username password required to connect.":"The username password required to connect.","Database Name":"Database Name","Provide the database name. Leave empty to use default file for SQLite Driver.":"Provide the database name. Leave empty to use default file for SQLite Driver.","Database Prefix":"Database Prefix","Provide the database prefix.":"Provide the database prefix.","Port":"Port","Provide the hostname port.":"Provide the hostname port.","NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.":"NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.","Install":"Install","Application":"Application","That is the application name.":"That is the application name.","Provide the administrator username.":"Provide the administrator username.","Provide the administrator email.":"Provide the administrator email.","What should be the password required for authentication.":"What should be the password required for authentication.","Should be the same as the password above.":"Should be the same as the password above.","Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.":"Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.","Choose your language to get started.":"Choose your language to get started.","Remaining Steps":"Remaining Steps","Database Configuration":"Database Configuration","Application Configuration":"Application Configuration","Language Selection":"Language Selection","Select what will be the default language of NexoPOS.":"Select what will be the default language of NexoPOS.","In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.":"In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.","Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.":"Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.","Please report this message to the support : ":"Please report this message to the support : ","No refunds made so far. Good news right?":"No refunds made so far. Good news right?","Open Register : %s":"Open Register : %s","Loading Coupon For : ":"Loading Coupon For : ","This coupon requires products that aren\\'t available on the cart at the moment.":"This coupon requires products that aren\\'t available on the cart at the moment.","This coupon requires products that belongs to specific categories that aren\\'t included at the moment.":"This coupon requires products that belongs to specific categories that aren\\'t included at the moment.","Too many results.":"Too many results.","New Customer":"New Customer","Purchases":"Purchases","Owed":"Owed","Usage :":"Usage :","Code :":"Code :","Order Reference":"Order Reference","The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?":"The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?","{product} : Units":"{product} : Units","This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.":"This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.","Previewing :":"Previewing :","Search for options":"Search for options","The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.":"The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.","The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.":"The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.","The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.":"The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.","The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.":"The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.","Invalid Error Message":"Invalid Error Message","{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List":"{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List","Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.":"Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.","No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered":"No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered","Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.":"Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.","Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.":"Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.","Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}":"Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}","{{ ucwords( $column ) }}":"{{ ucwords( $column ) }}","Delete Selected Entries":"Delete Selected Entries","Unamed Settings Page":"Unamed Settings Page","Description of unamed setting page":"Description of unamed setting page","Text Field":"Text Field","This is a sample text field.":"This is a sample text field.","No description has been provided.":"No description has been provided.","You\\'re using NexoPOS %s<\/a>":"You\\'re using NexoPOS %s<\/a>","If you haven\\'t asked this, please get in touch with the administrators.":"If you haven\\'t asked this, please get in touch with the administrators.","A new user has registered to your store (%s) with the email %s.":"A new user has registered to your store (%s) with the email %s.","The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.":"The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.","Note: ":"Note: ","Inclusive Product Taxes":"Inclusive Product Taxes","Exclusive Product Taxes":"Exclusive Product Taxes","Condition:":"Condition:","Date : %s":"Date : %s","The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?":"The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?","NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.":"NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.","Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.":"Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.","Retry":"Retry","If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.":"If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources."} \ No newline at end of file +{"displaying {perPage} on {items} items":"{items} \u00f6\u011fede {perPage} g\u00f6steriliyor","The document has been generated.":"Belge olu\u015fturuldu.","Unexpected error occurred.":"Beklenmeyen bir hata olu\u015ftu.","{entries} entries selected":"{entries} giri\u015f se\u00e7ildi","Download":"\u0130ndir","Bulk Actions":"Toplu eylemler","Delivery":"PAKET","Take Away":"GELAL","Unknown Type":"S\u0130PAR\u0130\u015e","Pending":"\u0130\u015flem Bekliyor","Ongoing":"Devam Ediyor","Delivered":"Teslim edilmi\u015f","Unknown Status":"Bilinmeyen Durum","Ready":"Haz\u0131r","Paid":"\u00d6dendi","Hold":"Beklemede","Unpaid":"\u00d6denmedii","Partially Paid":"Taksitli \u00d6denmi\u015f","Save Password":"\u015eifreyi kaydet","Unable to proceed the form is not valid.":"Devam edilemiyor form ge\u00e7erli de\u011fil.","Submit":"G\u00f6nder","Register":"Kay\u0131t Ol","An unexpected error occurred.":"Beklenmeyen bir hata olu\u015ftu.","Best Cashiers":"En \u0130yi Kasiyerler","No result to display.":"G\u00f6r\u00fcnt\u00fclenecek sonu\u00e7 yok.","Well.. nothing to show for the meantime.":"Veri Bulunamad\u0131.","Best Customers":"En \u0130yi M\u00fc\u015fteriler","Well.. nothing to show for the meantime":"Veri Bulunamad\u0131.","Total Sales":"Toplam Sat\u0131\u015f","Today":"Bug\u00fcn","Incomplete Orders":"Eksik Sipari\u015fler","Expenses":"Giderler","Weekly Sales":"Haftal\u0131k Sat\u0131\u015flar","Week Taxes":"Haftal\u0131k Vergiler","Net Income":"Net gelir","Week Expenses":"Haftal\u0131k Giderler","Order":"Sipari\u015f","Clear All":"Hepsini temizle","Save":"Kaydet","Instalments":"Taksitler","Create":"Olu\u015ftur","Add Instalment":"Taksit Ekle","An unexpected error has occurred":"Beklenmeyen bir hata olu\u015ftu","Store Details":"Ma\u011faza Detaylar\u0131","Order Code":"Sipari\u015f Kodu","Cashier":"Kasiyer","Date":"Tarih","Customer":"M\u00fc\u015fteri","Type":"Sipari\u015f T\u00fcr\u00fc","Payment Status":"\u00d6deme Durumu","Delivery Status":"Teslim durumu","Billing Details":"Fatura Detaylar\u0131","Shipping Details":"Nakliye ayr\u0131nt\u0131lar\u0131","Product":"\u00dcr\u00fcn:","Unit Price":"Birim fiyat","Quantity":"Miktar","Discount":"\u0130ndirim","Tax":"Vergi","Total Price":"Toplam fiyat","Expiration Date":"Son kullanma tarihi","Sub Total":"Ara toplam","Coupons":"Kuponlar","Shipping":"Nakliye","Total":"Toplam","Due":"Bor\u00e7","Change":"De\u011fi\u015fiklik","No title is provided":"Ba\u015fl\u0131k verilmedi","SKU":"SKU(Bo\u015f B\u0131rak\u0131labilir)","Barcode":"Barkod (Bo\u015f B\u0131rak\u0131labilir)","The product already exists on the table.":"\u00dcr\u00fcn masada zaten var.","The specified quantity exceed the available quantity.":"Belirtilen miktar mevcut miktar\u0131 a\u015f\u0131yor.","Unable to proceed as the table is empty.":"Masa bo\u015f oldu\u011fu i\u00e7in devam edilemiyor.","More Details":"Daha fazla detay","Useful to describe better what are the reasons that leaded to this adjustment.":"Bu ayarlamaya neden olan sebeplerin neler oldu\u011funu daha iyi anlatmakta fayda var.","Search":"Arama","Unit":"Birim","Operation":"Operasyon","Procurement":"Tedarik","Value":"De\u011fer","Search and add some products":"Baz\u0131 \u00fcr\u00fcnleri aray\u0131n ve ekleyin","Proceed":"Devam et","An unexpected error occurred":"Beklenmeyen bir hata olu\u015ftu","Load Coupon":"Kupon Y\u00fckle","Apply A Coupon":"Kupon Uygula","Load":"Y\u00fckle","Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.":"Sat\u0131\u015f i\u00e7in ge\u00e7erli olmas\u0131 gereken kupon kodunu girin. Bir m\u00fc\u015fteriye kupon verilirse, o m\u00fc\u015fteri \u00f6nceden se\u00e7ilmelidir.","Click here to choose a customer.":"M\u00fc\u015fteri se\u00e7mek i\u00e7in buraya t\u0131klay\u0131n.","Coupon Name":"Kupon Ad\u0131","Usage":"Kullan\u0131m","Unlimited":"S\u0131n\u0131rs\u0131z","Valid From":"Ge\u00e7erli Forum","Valid Till":"Kadar ge\u00e7erli","Categories":"Kategoriler","Products":"\u00dcr\u00fcnler","Active Coupons":"Aktif Kuponlar","Apply":"Uygula","Cancel":"\u0130ptal Et","Coupon Code":"Kupon Kodu","The coupon is out from validity date range.":"Kupon ge\u00e7erlilik tarih aral\u0131\u011f\u0131n\u0131n d\u0131\u015f\u0131nda.","The coupon has applied to the cart.":"Kupon sepete uyguland\u0131.","Percentage":"Y\u00fczde","Flat":"D\u00fcz","The coupon has been loaded.":"Kupon y\u00fcklendi.","Layaway Parameters":"Taksit Parametreleri","Minimum Payment":"Minimum \u00f6deme","Instalments & Payments":"Taksitler ve \u00d6demeler","The final payment date must be the last within the instalments.":"Son \u00f6deme tarihi, taksitler i\u00e7indeki son \u00f6deme tarihi olmal\u0131d\u0131r.","Amount":"Miktar","You must define layaway settings before proceeding.":"Devam etmeden \u00f6nce taksit ayarlar\u0131n\u0131 tan\u0131mlaman\u0131z gerekir.","Please provide instalments before proceeding.":"L\u00fctfen devam etmeden \u00f6nce taksitleri belirtin.","Unable to process, the form is not valid":"Form i\u015flenemiyor ge\u00e7erli de\u011fil","One or more instalments has an invalid date.":"Bir veya daha fazla taksitin tarihi ge\u00e7ersiz.","One or more instalments has an invalid amount.":"Bir veya daha fazla taksitin tutar\u0131 ge\u00e7ersiz.","One or more instalments has a date prior to the current date.":"Bir veya daha fazla taksitin ge\u00e7erli tarihten \u00f6nce bir tarihi var.","Total instalments must be equal to the order total.":"Toplam taksitler sipari\u015f toplam\u0131na e\u015fit olmal\u0131d\u0131r.","The customer has been loaded":"M\u00fc\u015fteri Y\u00fcklendi","This coupon is already added to the cart":"Bu kupon zaten sepete eklendi","No tax group assigned to the order":"Sipari\u015fe atanan vergi grubu yok","Layaway defined":"Taksit Tan\u0131ml\u0131","Okay":"Tamam","An unexpected error has occurred while fecthing taxes.":"An unexpected error has occurred while fecthing taxes.","OKAY":"TAMAM","Loading...":"Y\u00fckleniyor...","Profile":"Profil","Logout":"\u00c7\u0131k\u0131\u015f Yap","Unnamed Page":"Ads\u0131z Sayfa","No description":"A\u00e7\u0131klama yok","Name":"\u0130sim","Provide a name to the resource.":"Kayna\u011fa bir ad verin.","General":"Genel","Edit":"D\u00fczenle","Delete":"Sil","Delete Selected Groups":"Se\u00e7ili Gruplar\u0131 Sil","Activate Your Account":"Hesab\u0131n\u0131z\u0131 Etkinle\u015ftirin","Password Recovered":"\u015eifre Kurtar\u0131ld\u0131","Password Recovery":"\u015eifre kurtarma","Reset Password":"\u015eifreyi yenile","New User Registration":"yeni kullan\u0131c\u0131 kayd\u0131","Your Account Has Been Created":"Hesab\u0131n\u0131z olu\u015fturuldu","Login":"Giri\u015f Yap","Save Coupon":"Kuponu Kaydet","This field is required":"Bu alan gereklidir","The form is not valid. Please check it and try again":"Form ge\u00e7erli de\u011fil. L\u00fctfen kontrol edip tekrar deneyin","mainFieldLabel not defined":"Ana Alan Etiketi Tan\u0131mlanmad\u0131","Create Customer Group":"M\u00fc\u015fteri Grubu Olu\u015ftur","Save a new customer group":"Yeni bir m\u00fc\u015fteri grubu kaydedin","Update Group":"Grubu G\u00fcncelle","Modify an existing customer group":"Mevcut bir m\u00fc\u015fteri grubunu de\u011fi\u015ftirin","Managing Customers Groups":"M\u00fc\u015fteri Gruplar\u0131n\u0131 Y\u00f6netme","Create groups to assign customers":"M\u00fc\u015fterileri atamak i\u00e7in gruplar olu\u015fturun","Create Customer":"M\u00fc\u015fteri Olu\u015ftur","Managing Customers":"M\u00fc\u015fterileri Y\u00f6net","List of registered customers":"Kay\u0131tl\u0131 m\u00fc\u015fterilerin listesi","Your Module":"Mod\u00fcl\u00fcn\u00fcz","Choose the zip file you would like to upload":"Y\u00fcklemek istedi\u011finiz zip dosyas\u0131n\u0131 se\u00e7in","Upload":"Y\u00fckle","Managing Orders":"Sipari\u015fleri Y\u00f6net","Manage all registered orders.":"T\u00fcm kay\u0131tl\u0131 sipari\u015fleri y\u00f6netin.","Failed":"Ar\u0131zal\u0131","Order receipt":"Sipari\u015f makbuzu","Hide Dashboard":"G\u00f6sterge paneli gizle","Taxes":"Vergiler","Unknown Payment":"Bilinmeyen \u00d6deme","Procurement Name":"Tedarik Ad\u0131","Unable to proceed no products has been provided.":"Devam edilemiyor hi\u00e7bir \u00fcr\u00fcn sa\u011flanmad\u0131.","Unable to proceed, one or more products is not valid.":"Devam edilemiyor, bir veya daha fazla \u00fcr\u00fcn ge\u00e7erli de\u011fil.","Unable to proceed the procurement form is not valid.":"Devam edilemiyor tedarik formu ge\u00e7erli de\u011fil.","Unable to proceed, no submit url has been provided.":"Devam edilemiyor, g\u00f6nderim URL'si sa\u011flanmad\u0131.","SKU, Barcode, Product name.":"SKU, Barkod, \u00dcr\u00fcn ad\u0131.","N\/A":"Bo\u015f","Email":"E-posta","Phone":"Telefon","First Address":"\u0130lk Adres","Second Address":"\u0130kinci Adres","Address":"Adres","City":"\u015eehir","PO.Box":"Posta Kodu","Price":"Fiyat","Print":"Yazd\u0131r","Description":"Tan\u0131m","Included Products":"Dahil olan \u00dcr\u00fcnler","Apply Settings":"Ayarlar\u0131 uygula","Basic Settings":"Temel Ayarlar","Visibility Settings":"G\u00f6r\u00fcn\u00fcrl\u00fck Ayarlar\u0131","Year":"Y\u0131l","Sales":"Sat\u0131\u015f","Income":"Gelir","January":"Ocak","March":"Mart","April":"Nisan","May":"May\u0131s","July":"Temmuz","August":"A\u011fustos","September":"Eyl\u00fcl","October":"Ekim","November":"Kas\u0131m","December":"Aral\u0131k","Purchase Price":"Al\u0131\u015f fiyat\u0131","Sale Price":"Sat\u0131\u015f Fiyat\u0131","Profit":"K\u00e2r","Tax Value":"Vergi De\u011feri","Reward System Name":"\u00d6d\u00fcl Sistemi Ad\u0131","Missing Dependency":"Eksik Ba\u011f\u0131ml\u0131l\u0131k","Go Back":"Geri D\u00f6n","Continue":"Devam Et","Home":"Anasayfa","Not Allowed Action":"\u0130zin Verilmeyen \u0130\u015flem","Try Again":"Tekrar deneyin","Access Denied":"Eri\u015fim reddedildi","Dashboard":"G\u00f6sterge Paneli","Sign In":"Giri\u015f Yap","Sign Up":"\u00dcye ol","This field is required.":"Bu alan gereklidir.","This field must contain a valid email address.":"Bu alan ge\u00e7erli bir e-posta adresi i\u00e7ermelidir.","Clear Selected Entries ?":"Se\u00e7ili Giri\u015fleri Temizle ?","Would you like to clear all selected entries ?":"Se\u00e7ilen t\u00fcm giri\u015fleri silmek ister misiniz?","No selection has been made.":"Se\u00e7im yap\u0131lmad\u0131.","No action has been selected.":"Hi\u00e7bir i\u015flem se\u00e7ilmedi.","There is nothing to display...":"g\u00f6r\u00fcnt\u00fclenecek bir \u015fey yok...","Sun":"Paz","Mon":"Pzt","Tue":"Sal","Wed":"\u00c7ar","Fri":"Cum","Sat":"Cmt","Nothing to display":"G\u00f6r\u00fcnt\u00fclenecek bir \u015fey yok","Password Forgotten ?":"\u015eifrenizimi Unuttunuz ?","OK":"TAMAM","Remember Your Password ?":"\u015eifrenizimi Unuttunuz ?","Already registered ?":"Zaten kay\u0131tl\u0131?","Refresh":"Yenile","Enabled":"Etkinle\u015ftirilmi\u015f","Disabled":"Engelli","Enable":"A\u00e7\u0131k","Disable":"Kapal\u0131","Gallery":"Galeri","Medias Manager":"Medya Y\u00f6neticisi","Click Here Or Drop Your File To Upload":"Y\u00fcklemek \u0130\u00e7in Buraya T\u0131klay\u0131n Veya Dosyan\u0131z\u0131 B\u0131rak\u0131n","Nothing has already been uploaded":"Hi\u00e7bir \u015fey zaten y\u00fcklenmedi","File Name":"Dosya ad\u0131","Uploaded At":"Y\u00fcklenme Tarihi","By":"Taraf\u0131ndan","Previous":"\u00d6nceki","Next":"Sonraki","Use Selected":"Se\u00e7ileni Kullan","Would you like to clear all the notifications ?":"T\u00fcm bildirimleri silmek ister misiniz ?","Permissions":"izinler","Payment Summary":"\u00d6deme \u00f6zeti","Order Status":"Sipari\u015f durumu","Would you proceed ?":"Devam Etmek \u0130stermisin ?","Would you like to create this instalment ?":"Bu taksiti olu\u015fturmak ister misiniz ?","Would you like to delete this instalment ?":"Bu taksiti silmek ister misiniz ?","Would you like to update that instalment ?":"Bu taksiti g\u00fcncellemek ister misiniz ?","Customer Account":"M\u00fc\u015fteri hesab\u0131","Payment":"\u00d6deme","No payment possible for paid order.":"\u00d6denmi\u015f sipari\u015f i\u00e7in \u00f6deme yap\u0131lamaz.","Payment History":"\u00d6deme ge\u00e7mi\u015fi","Unable to proceed the form is not valid":"Devam edilemiyor form ge\u00e7erli de\u011fil","Please provide a valid value":"L\u00fctfen ge\u00e7erli bir de\u011fer girin","Refund With Products":"Geri \u00d6deme","Refund Shipping":"\u0130ade Kargo","Add Product":"\u00fcr\u00fcn ekle","Damaged":"Hasarl\u0131","Unspoiled":"Bozulmu\u015f","Summary":"\u00d6zet","Payment Gateway":"\u00d6deme Sa\u011flay\u0131c\u0131","Screen":"Ekran","Select the product to perform a refund.":"Geri \u00f6deme yapmak i\u00e7in \u00fcr\u00fcn\u00fc se\u00e7in.","Please select a payment gateway before proceeding.":"L\u00fctfen devam etmeden \u00f6nce bir \u00f6deme a\u011f ge\u00e7idi se\u00e7in.","There is nothing to refund.":"\u0130ade edilecek bir \u015fey yok.","Please provide a valid payment amount.":"L\u00fctfen ge\u00e7erli bir \u00f6deme tutar\u0131 girin.","The refund will be made on the current order.":"Geri \u00f6deme mevcut sipari\u015fte yap\u0131lacakt\u0131r.","Please select a product before proceeding.":"L\u00fctfen devam etmeden \u00f6nce bir \u00fcr\u00fcn se\u00e7in.","Not enough quantity to proceed.":"Devam etmek i\u00e7in yeterli miktar yok.","Customers":"M\u00fc\u015fteriler","Order Type":"Sipari\u015f t\u00fcr\u00fc","Orders":"Sipari\u015fler","Cash Register":"Yazar kasa","Reset":"S\u0131f\u0131rla","Cart":"Sepet","Comments":"NOT","No products added...":"\u00dcr\u00fcn eklenmedi...","Pay":"\u00d6deme","Void":"\u0130ptal","Current Balance":"Cari Bakiye","Full Payment":"Tam \u00f6deme","The customer account can only be used once per order. Consider deleting the previously used payment.":"M\u00fc\u015fteri hesab\u0131, sipari\u015f ba\u015f\u0131na yaln\u0131zca bir kez kullan\u0131labilir. Daha \u00f6nce kullan\u0131lan \u00f6demeyi silmeyi d\u00fc\u015f\u00fcn\u00fcn.","Not enough funds to add {amount} as a payment. Available balance {balance}.":"\u00d6deme olarak {amount} eklemek i\u00e7in yeterli para yok. Kullan\u0131labilir bakiye {balance}.","Confirm Full Payment":"Tam \u00d6demeyi Onaylay\u0131n","A full payment will be made using {paymentType} for {total}":"{total} i\u00e7in {paymentType} kullan\u0131larak tam \u00f6deme yap\u0131lacakt\u0131r.","You need to provide some products before proceeding.":"Devam etmeden \u00f6nce baz\u0131 \u00fcr\u00fcnler sa\u011flaman\u0131z gerekiyor.","Unable to add the product, there is not enough stock. Remaining %s":"\u00dcr\u00fcn eklenemiyor, yeterli stok yok. Geriye kalan %s","Add Images":"Resim ekle","New Group":"Yeni Grup","Available Quantity":"Mevcut Miktar\u0131","Would you like to delete this group ?":"Bu grubu silmek ister misiniz ?","Your Attention Is Required":"Dikkatiniz Gerekli","Please select at least one unit group before you proceed.":"Devam etmeden \u00f6nce l\u00fctfen en az bir birim grubu se\u00e7in.","Unable to proceed as one of the unit group field is invalid":"Unable to proceed as one of the unit group field is invalid","Would you like to delete this variation ?":"Bu varyasyonu silmek ister misiniz ?","Details":"Detaylar","Unable to proceed, no product were provided.":"Devam edilemedi, \u00fcr\u00fcn sa\u011flanmad\u0131.","Unable to proceed, one or more product has incorrect values.":"Devam edilemiyor, bir veya daha fazla \u00fcr\u00fcn yanl\u0131\u015f de\u011ferlere sahip.","Unable to proceed, the procurement form is not valid.":"Devam edilemiyor, tedarik formu ge\u00e7erli de\u011fil.","Unable to submit, no valid submit URL were provided.":"G\u00f6nderilemiyor, ge\u00e7erli bir g\u00f6nderme URL'si sa\u011flanmad\u0131.","Options":"Se\u00e7enekler","The stock adjustment is about to be made. Would you like to confirm ?":"Stok ayarlamas\u0131 yap\u0131lmak \u00fczere. onaylamak ister misin ?","Would you like to remove this product from the table ?":"Bu \u00fcr\u00fcn\u00fc masadan kald\u0131rmak ister misiniz ?","Unable to proceed. Select a correct time range.":"Devam edilemiyor. Do\u011fru bir zaman aral\u0131\u011f\u0131 se\u00e7in.","Unable to proceed. The current time range is not valid.":"Devam edilemiyor. Ge\u00e7erli zaman aral\u0131\u011f\u0131 ge\u00e7erli de\u011fil.","Would you like to proceed ?":"devam etmek ister misin ?","No rules has been provided.":"Hi\u00e7bir kural sa\u011flanmad\u0131.","No valid run were provided.":"Ge\u00e7erli bir \u00e7al\u0131\u015ft\u0131rma sa\u011flanmad\u0131.","Unable to proceed, the form is invalid.":"Devam edilemiyor, form ge\u00e7ersiz.","Unable to proceed, no valid submit URL is defined.":"Devam edilemiyor, ge\u00e7erli bir g\u00f6nderme URL'si tan\u0131mlanmad\u0131.","No title Provided":"Ba\u015fl\u0131k Sa\u011flanmad\u0131","Add Rule":"Kural Ekle","Save Settings":"Ayarlar\u0131 kaydet","Ok":"TAMAM","New Transaction":"Yeni \u0130\u015flem","Close":"\u00c7\u0131k\u0131\u015f","Would you like to delete this order":"Bu sipari\u015fi silmek ister misiniz?","The current order will be void. This action will be recorded. Consider providing a reason for this operation":"Mevcut sipari\u015f ge\u00e7ersiz olacakt\u0131r. Bu i\u015flem kaydedilecektir. Bu i\u015flem i\u00e7in bir neden sa\u011flamay\u0131 d\u00fc\u015f\u00fcn\u00fcn","Order Options":"Sipari\u015f Se\u00e7enekleri","Payments":"\u00d6demeler","Refund & Return":"Geri \u00d6deme ve \u0130ade","Installments":"Taksitler","The form is not valid.":"Form ge\u00e7erli de\u011fil.","Balance":"Kalan","Input":"Giri\u015f","Register History":"Kay\u0131t Ge\u00e7mi\u015fi","Close Register":"Kapat Kay\u0131t Ol","Cash In":"Nakit","Cash Out":"Nakit \u00c7\u0131k\u0131\u015f\u0131","Register Options":"Kay\u0131t Se\u00e7enekleri","History":"Tarih","Unable to open this register. Only closed register can be opened.":"Bu kay\u0131t a\u00e7\u0131lam\u0131yor. Sadece kapal\u0131 kay\u0131t a\u00e7\u0131labilir.","Open The Register":"Kayd\u0131 A\u00e7","Exit To Orders":"Sipari\u015flere Git","Looks like there is no registers. At least one register is required to proceed.":"Kay\u0131t yok gibi g\u00f6r\u00fcn\u00fcyor. Devam etmek i\u00e7in en az bir kay\u0131t gereklidir.","Create Cash Register":"Yazar Kasa Olu\u015ftur","Yes":"Evet","No":"Hay\u0131r","Use":"Kullan","No coupon available for this customer":"Bu m\u00fc\u015fteri i\u00e7in kupon yok","Select Customer":"M\u00fc\u015fteri Se\u00e7","No customer match your query...":"Sorgunuzla e\u015fle\u015fen m\u00fc\u015fteri yok.","Customer Name":"M\u00fc\u015fteri Ad\u0131","Save Customer":"M\u00fc\u015fteriyi Kaydet","No Customer Selected":"M\u00fc\u015fteri Se\u00e7ilmedi","In order to see a customer account, you need to select one customer.":"Bir m\u00fc\u015fteri hesab\u0131n\u0131 g\u00f6rmek i\u00e7in bir m\u00fc\u015fteri se\u00e7meniz gerekir.","Summary For":"\u00d6zet","Total Purchases":"Toplam Sat\u0131n Alma","Last Purchases":"Son Sat\u0131n Alma \u0130\u015flemleri","Status":"Durum","No orders...":"Sipari\u015f Yok...","Account Transaction":"Hesap Hareketi","Product Discount":"\u00dcr\u00fcn \u0130ndirimi","Cart Discount":"Sepet indirimi","Hold Order":"Sipari\u015fi Beklemeye Al","The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.":"Mevcut sipari\u015f beklemeye al\u0131nacakt\u0131r. Bu sipari\u015fi bekleyen sipari\u015f butonundan alabilirsiniz. Buna bir referans sa\u011flamak, sipari\u015fi daha h\u0131zl\u0131 tan\u0131mlaman\u0131za yard\u0131mc\u0131 olabilir.","Confirm":"Onayla","Order Note":"Sipari\u015f Notu","Note":"Not","More details about this order":"Bu sipari\u015fle ilgili daha fazla ayr\u0131nt\u0131","Display On Receipt":"Fi\u015fte G\u00f6r\u00fcnt\u00fcle","Will display the note on the receipt":"Makbuzdaki notu g\u00f6sterecek","Open":"A\u00e7\u0131k","Define The Order Type":"Sipari\u015f T\u00fcr\u00fcn\u00fc Tan\u0131mlay\u0131n","Payment List":"\u00d6deme listesi","List Of Payments":"\u00d6deme Listesi","No Payment added.":"\u00d6deme eklenmedi.","Select Payment":"\u00d6deme Se\u00e7","Submit Payment":"\u00d6demeyi G\u00f6nder","Layaway":"Taksit","On Hold":"Beklemede","Tendered":"ihale","Nothing to display...":"G\u00f6r\u00fcnt\u00fclenecek bir \u015fey yok..","Define Quantity":"Miktar\u0131 Tan\u0131mla","Please provide a quantity":"L\u00fctfen bir miktar belirtin","Search Product":"\u00dcr\u00fcn Ara","There is nothing to display. Have you started the search ?":"G\u00f6sterilecek bir \u015fey yok. aramaya ba\u015flad\u0131n m\u0131 ?","Shipping & Billing":"Kargo \u00fccreti","Tax & Summary":"Vergi ve \u00d6zet","Settings":"Ayarlar","Select Tax":"Vergi se\u00e7in","Define the tax that apply to the sale.":"Sat\u0131\u015f i\u00e7in ge\u00e7erli olan vergiyi tan\u0131mlay\u0131n.","Define how the tax is computed":"Verginin nas\u0131l hesapland\u0131\u011f\u0131n\u0131 tan\u0131mlay\u0131n","Exclusive":"\u00d6zel","Inclusive":"Dahil","Define when that specific product should expire.":"Belirli bir \u00fcr\u00fcn\u00fcn ne zaman sona erece\u011fini tan\u0131mlay\u0131n.","Renders the automatically generated barcode.":"Otomatik olarak olu\u015fturulan barkodu i\u015fler.","Tax Type":"Vergi T\u00fcr\u00fc","Adjust how tax is calculated on the item.":"\u00d6\u011fede verginin nas\u0131l hesaplanaca\u011f\u0131n\u0131 ayarlay\u0131n.","Unable to proceed. The form is not valid.":"Devam edilemiyor. Form ge\u00e7erli de\u011fil.","Units & Quantities":"Birimler ve Miktarlar","Wholesale Price":"Toptan Sat\u0131\u015f Fiyat\u0131","Select":"Se\u00e7","Would you like to delete this ?":"Bunu silmek ister misin ?","The account you have created for __%s__, require an activation. In order to proceed, please click on the following link":"__%s__ i\u00e7in olu\u015fturdu\u011funuz hesap aktivasyon gerektiriyor. Devam etmek i\u00e7in l\u00fctfen a\u015fa\u011f\u0131daki ba\u011flant\u0131ya t\u0131klay\u0131n","Your password has been successfully updated on __%s__. You can now login with your new password.":"Parolan\u0131z __%s__ tarihinde ba\u015far\u0131yla g\u00fcncellendi. Art\u0131k yeni \u015fifrenizle giri\u015f yapabilirsiniz.","Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ":"Birisi __\"%s\"__ \u00fczerinde \u015fifrenizi s\u0131f\u0131rlamak istedi. Bu iste\u011fi yapt\u0131\u011f\u0131n\u0131z\u0131 hat\u0131rl\u0131yorsan\u0131z, l\u00fctfen a\u015fa\u011f\u0131daki d\u00fc\u011fmeyi t\u0131klayarak devam edin. ","Receipt — %s":"Fi\u015f — %s","Unable to find a module having the identifier\/namespace \"%s\"":"Tan\u0131mlay\u0131c\u0131\/ad alan\u0131na sahip bir mod\u00fcl bulunamad\u0131 \"%s\"","What is the CRUD single resource name ? [Q] to quit.":"CRUD tek kaynak ad\u0131 nedir ? [Q] Kullan\u0131n.","Which table name should be used ? [Q] to quit.":"Hangi Masa ad\u0131 kullan\u0131lmal\u0131d\u0131r ? [Q] Kullan\u0131n.","If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"CRUD kayna\u011f\u0131n\u0131z\u0131n bir ili\u015fkisi varsa, bunu \"yabanc\u0131 tablo, yabanc\u0131 anahtar, yerel_anahtar\" \u015feklinde belirtin mi? [S] atlamak i\u00e7in, [Q] \u00e7\u0131kmak i\u00e7in.","Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Yeni bir ili\u015fki ekle? Bunu \"yabanc\u0131 tablo, yabanc\u0131 anahtar, yerel_anahtar\" \u015feklinde mi belirtin? [S] atlamak i\u00e7in, [Q] \u00e7\u0131kmak i\u00e7in.","Not enough parameters provided for the relation.":"\u0130li\u015fki i\u00e7in yeterli parametre sa\u011flanmad\u0131.","The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"":"CRUD kayna\u011f\u0131 \"%s\" mod\u00fcl i\u00e7in \"%s\" de olu\u015fturuldu \"%s\"","The CRUD resource \"%s\" has been generated at %s":"CRUD kayna\u011f\u0131 \"%s\" de olu\u015fturuldu %s","An unexpected error has occurred.":"Beklenmeyen bir hata olu\u015ftu.","Localization for %s extracted to %s":"%s i\u00e7in yerelle\u015ftirme \u015furaya \u00e7\u0131kar\u0131ld\u0131 %s","Unable to find the requested module.":"\u0130stenen mod\u00fcl bulunamad\u0131.","Version":"S\u00fcr\u00fcm","Path":"Yol","Index":"Dizin","Entry Class":"Giri\u015f S\u0131n\u0131f\u0131","Routes":"Rotalar","Api":"Api","Controllers":"Kontroller","Views":"G\u00f6r\u00fcnt\u00fcleme","Attribute":"Ba\u011fla","Namespace":"ad alan\u0131","Author":"Yazar","The product barcodes has been refreshed successfully.":"\u00dcr\u00fcn barkodlar\u0131 ba\u015far\u0131yla yenilendi.","What is the store name ? [Q] to quit.":"Ma\u011faza ad\u0131 nedir? [Q] \u00e7\u0131kmak i\u00e7in.","Please provide at least 6 characters for store name.":"L\u00fctfen ma\u011faza ad\u0131 i\u00e7in en az 6 karakter girin.","What is the administrator password ? [Q] to quit.":"Y\u00f6netici \u015fifresi nedir? [Q] \u00e7\u0131kmak i\u00e7in.","Please provide at least 6 characters for the administrator password.":"L\u00fctfen y\u00f6netici \u015fifresi i\u00e7in en az 6 karakter girin.","What is the administrator email ? [Q] to quit.":"Y\u00f6netici e-postas\u0131 nedir? [Q] \u00e7\u0131kmak i\u00e7in.","Please provide a valid email for the administrator.":"L\u00fctfen y\u00f6netici i\u00e7in ge\u00e7erli bir e-posta girin.","What is the administrator username ? [Q] to quit.":"Y\u00f6netici kullan\u0131c\u0131 ad\u0131 nedir? [Q] \u00e7\u0131kmak i\u00e7in.","Please provide at least 5 characters for the administrator username.":"L\u00fctfen y\u00f6netici kullan\u0131c\u0131 ad\u0131 i\u00e7in en az 5 karakter girin.","Downloading latest dev build...":"En son geli\u015ftirme derlemesini indirme...","Reset project to HEAD...":"Projeyi HEAD olarak s\u0131f\u0131rlay\u0131n...","Coupons List":"Kupon Listesi","Display all coupons.":"T\u00fcm kuponlar\u0131 g\u00f6ster.","No coupons has been registered":"Hi\u00e7bir kupon kaydedilmedi","Add a new coupon":"Yeni bir kupon ekle","Create a new coupon":"Yeni bir kupon olu\u015ftur","Register a new coupon and save it.":"Yeni bir kupon kaydedin ve kaydedin.","Edit coupon":"Kuponu d\u00fczenle","Modify Coupon.":"Kuponu De\u011fi\u015ftir.","Return to Coupons":"Kuponlara D\u00f6n","Might be used while printing the coupon.":"Kupon yazd\u0131r\u0131l\u0131rken kullan\u0131labilir.","Percentage Discount":"Y\u00fczde \u0130ndirimi","Flat Discount":"Daire \u0130ndirimi","Define which type of discount apply to the current coupon.":"Mevcut kupona hangi indirimin uygulanaca\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","Discount Value":"\u0130ndirim tutar\u0131","Define the percentage or flat value.":"Y\u00fczde veya d\u00fcz de\u011feri tan\u0131mlay\u0131n.","Valid Until":"Ge\u00e7erlilik Tarihi","Minimum Cart Value":"Minimum Sepet De\u011feri","What is the minimum value of the cart to make this coupon eligible.":"Bu kuponu uygun hale getirmek i\u00e7in al\u0131\u015fveri\u015f sepetinin minimum de\u011feri nedir?.","Maximum Cart Value":"Maksimum Sepet De\u011feri","Valid Hours Start":"Ge\u00e7erli Saat Ba\u015flang\u0131c\u0131","Define form which hour during the day the coupons is valid.":"Kuponlar\u0131n g\u00fcn\u00fcn hangi saatinde ge\u00e7erli oldu\u011funu tan\u0131mlay\u0131n.","Valid Hours End":"Ge\u00e7erli Saat Biti\u015fi","Define to which hour during the day the coupons end stop valid.":"Kuponlar\u0131n g\u00fcn i\u00e7inde hangi saate kadar ge\u00e7erli oldu\u011funu tan\u0131mlay\u0131n.","Limit Usage":"Kullan\u0131m\u0131 S\u0131n\u0131rla","Define how many time a coupons can be redeemed.":"Bir kuponun ka\u00e7 kez kullan\u0131labilece\u011fini tan\u0131mlay\u0131n.","Select Products":"\u00dcr\u00fcnleri Se\u00e7in","The following products will be required to be present on the cart, in order for this coupon to be valid.":"Bu kuponun ge\u00e7erli olabilmesi i\u00e7in sepette a\u015fa\u011f\u0131daki \u00fcr\u00fcnlerin bulunmas\u0131 gerekecektir.","Select Categories":"Kategorileri Se\u00e7in","The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.":"Bu kuponun ge\u00e7erli olabilmesi i\u00e7in bu kategorilerden birine atanan \u00fcr\u00fcnlerin sepette olmas\u0131 gerekmektedir.","Created At":"Olu\u015fturulma Tarihi","Undefined":"Tan\u0131ms\u0131z","Delete a licence":"Bir lisans\u0131 sil","Customer Coupons List":"M\u00fc\u015fteri Kuponlar\u0131 Listesi","Display all customer coupons.":"T\u00fcm m\u00fc\u015fteri kuponlar\u0131n\u0131 g\u00f6ster.","No customer coupons has been registered":"Hi\u00e7bir m\u00fc\u015fteri kuponu kaydedilmedi","Add a new customer coupon":"Yeni bir m\u00fc\u015fteri kuponu ekleyin","Create a new customer coupon":"Yeni bir m\u00fc\u015fteri kuponu olu\u015fturun","Register a new customer coupon and save it.":"Yeni bir m\u00fc\u015fteri kuponu kaydedin ve kaydedin.","Edit customer coupon":"M\u00fc\u015fteri kuponunu d\u00fczenle","Modify Customer Coupon.":"M\u00fc\u015fteri Kuponunu De\u011fi\u015ftir.","Return to Customer Coupons":"M\u00fc\u015fteri Kuponlar\u0131na D\u00f6n","Id":"Id","Limit":"S\u0131n\u0131r","Created_at":"Created_at","Updated_at":"Updated_at","Code":"Kod","Customers List":"M\u00fc\u015fteri Listesi","Display all customers.":"T\u00fcm m\u00fc\u015fterileri g\u00f6ster.","No customers has been registered":"Kay\u0131tl\u0131 m\u00fc\u015fteri yok","Add a new customer":"Yeni m\u00fc\u015fteri ekle","Create a new customer":"Yeni M\u00fc\u015fteri Kaydet","Register a new customer and save it.":"Yeni bir m\u00fc\u015fteri kaydedin ve kaydedin.","Edit customer":"M\u00fc\u015fteri D\u00fczenle","Modify Customer.":"M\u00fc\u015fteriyi De\u011fi\u015ftir.","Return to Customers":"M\u00fc\u015fterilere Geri D\u00f6n","Provide a unique name for the customer.":"M\u00fc\u015fteri i\u00e7in benzersiz bir ad sa\u011flay\u0131n.","Group":"Grup","Assign the customer to a group":"M\u00fc\u015fteriyi bir gruba atama","Phone Number":"Telefon numaras\u0131","Provide the customer phone number":"M\u00fc\u015fteri telefon numaras\u0131n\u0131 sa\u011flay\u0131n","PO Box":"Posta Kodu","Provide the customer PO.Box":"M\u00fc\u015fteriye Posta Kutusu sa\u011flay\u0131n","Not Defined":"Tan\u0131mlanmam\u0131\u015f","Male":"Erkek","Female":"Bayan","Gender":"Belirsiz","Billing Address":"Fatura Adresi","Billing phone number.":"Fatura telefon numaras\u0131.","Address 1":"Adres 1","Billing First Address.":"Fatura \u0130lk Adresi.","Address 2":"Adres 2","Billing Second Address.":"Faturaland\u0131rma \u0130kinci Adresi.","Country":"\u00dclke","Billing Country.":"Faturaland\u0131rma \u00dclkesi.","Postal Address":"Posta adresi","Company":"\u015eirket","Shipping Address":"G\u00f6nderi Adresi","Shipping phone number.":"Nakliye telefon numaras\u0131.","Shipping First Address.":"G\u00f6nderim \u0130lk Adresi.","Shipping Second Address.":"G\u00f6nderim \u0130kinci Adresi.","Shipping Country.":"Nakliye \u00fclkesi.","Account Credit":"Hesap Kredisi","Owed Amount":"Bor\u00e7lu Tutar","Purchase Amount":"Sat\u0131n alma miktar\u0131","Rewards":"\u00d6d\u00fcller","Delete a customers":"Bir m\u00fc\u015fteriyi silin","Delete Selected Customers":"Se\u00e7ili M\u00fc\u015fterileri Sil","Customer Groups List":"M\u00fc\u015fteri Gruplar\u0131 Listesi","Display all Customers Groups.":"T\u00fcm M\u00fc\u015fteri Gruplar\u0131n\u0131 G\u00f6r\u00fcnt\u00fcle.","No Customers Groups has been registered":"Hi\u00e7bir M\u00fc\u015fteri Grubu kay\u0131tl\u0131 de\u011fil","Add a new Customers Group":"Yeni bir M\u00fc\u015fteriler Grubu ekleyin","Create a new Customers Group":"Yeni bir M\u00fc\u015fteriler Grubu olu\u015fturun","Register a new Customers Group and save it.":"Yeni bir M\u00fc\u015fteri Grubu kaydedin ve kaydedin.","Edit Customers Group":"M\u00fc\u015fteriler Grubunu D\u00fczenle","Modify Customers group.":"M\u00fc\u015fteriler grubunu de\u011fi\u015ftir.","Return to Customers Groups":"M\u00fc\u015fteri Gruplar\u0131na D\u00f6n","Reward System":"\u00d6d\u00fcl sistemi","Select which Reward system applies to the group":"Grup i\u00e7in hangi \u00d6d\u00fcl sisteminin uygulanaca\u011f\u0131n\u0131 se\u00e7in","Minimum Credit Amount":"Minimum Kredi Tutar\u0131","A brief description about what this group is about":"Bu grubun ne hakk\u0131nda oldu\u011fu hakk\u0131nda k\u0131sa bir a\u00e7\u0131klama","Created On":"Olu\u015fturma Tarihi","Customer Orders List":"M\u00fc\u015fteri Sipari\u015fleri Listesi","Display all customer orders.":"T\u00fcm m\u00fc\u015fteri sipari\u015flerini g\u00f6ster.","No customer orders has been registered":"Kay\u0131tl\u0131 m\u00fc\u015fteri sipari\u015fi yok","Add a new customer order":"Yeni bir m\u00fc\u015fteri sipari\u015fi ekle","Create a new customer order":"Yeni bir m\u00fc\u015fteri sipari\u015fi olu\u015fturun","Register a new customer order and save it.":"Yeni bir m\u00fc\u015fteri sipari\u015fi kaydedin ve kaydedin.","Edit customer order":"M\u00fc\u015fteri sipari\u015fini d\u00fczenle","Modify Customer Order.":"M\u00fc\u015fteri Sipari\u015fini De\u011fi\u015ftir.","Return to Customer Orders":"M\u00fc\u015fteri Sipari\u015flerine D\u00f6n","Created at":"\u015eu saatte olu\u015fturuldu","Customer Id":"M\u00fc\u015fteri Kimli\u011fi","Discount Percentage":"\u0130ndirim Y\u00fczdesi","Discount Type":"\u0130ndirim T\u00fcr\u00fc","Final Payment Date":"Son \u00d6deme Tarihi","Process Status":"\u0130\u015flem durumu","Shipping Rate":"Nakliye Oran\u0131","Shipping Type":"Nakliye T\u00fcr\u00fc","Title":"Yaz\u0131","Total installments":"Toplam taksit","Updated at":"\u015eu saatte g\u00fcncellendi","Uuid":"Uuid","Voidance Reason":"Ge\u00e7ersizlik Nedeni","Customer Rewards List":"M\u00fc\u015fteri \u00d6d\u00fcl Listesi","Display all customer rewards.":"T\u00fcm m\u00fc\u015fteri \u00f6d\u00fcllerini g\u00f6ster.","No customer rewards has been registered":"Hi\u00e7bir m\u00fc\u015fteri \u00f6d\u00fcl\u00fc kaydedilmedi","Add a new customer reward":"Yeni bir m\u00fc\u015fteri \u00f6d\u00fcl\u00fc ekle","Create a new customer reward":"Yeni bir m\u00fc\u015fteri \u00f6d\u00fcl\u00fc olu\u015fturun","Register a new customer reward and save it.":"Yeni bir m\u00fc\u015fteri \u00f6d\u00fcl\u00fc kaydedin ve kaydedin.","Edit customer reward":"M\u00fc\u015fteri \u00f6d\u00fcl\u00fcn\u00fc d\u00fczenle","Modify Customer Reward.":"M\u00fc\u015fteri \u00d6d\u00fcl\u00fcn\u00fc De\u011fi\u015ftir.","Return to Customer Rewards":"M\u00fc\u015fteri \u00d6d\u00fcllerine D\u00f6n","Points":"Puan","Target":"Hedef","Reward Name":"\u00d6d\u00fcl Ad\u0131","Last Update":"Son G\u00fcncelleme","Active":"Aktif","Users Group":"Users Group","None":"Hi\u00e7biri","Recurring":"Yinelenen","Start of Month":"Ay\u0131n Ba\u015flang\u0131c\u0131","Mid of Month":"Ay\u0131n Ortas\u0131","End of Month":"Ay\u0131n sonu","X days Before Month Ends":"Ay Bitmeden X g\u00fcn \u00f6nce","X days After Month Starts":"Ay Ba\u015flad\u0131ktan X G\u00fcn Sonra","Occurrence":"Olu\u015ftur","Occurrence Value":"Olu\u015fum De\u011feri","Must be used in case of X days after month starts and X days before month ends.":"Ay ba\u015flad\u0131ktan X g\u00fcn sonra ve ay bitmeden X g\u00fcn \u00f6nce kullan\u0131lmal\u0131d\u0131r.","Category":"Kategori Se\u00e7iniz","Month Starts":"Ay Ba\u015flang\u0131c\u0131","Month Middle":"Ay Ortas\u0131","Month Ends":"Ay Biti\u015fi","X Days Before Month Ends":"Ay Bitmeden X G\u00fcn \u00d6nce","Updated At":"G\u00fcncellenme Tarihi","Hold Orders List":"Sipari\u015f Listesini Beklet","Display all hold orders.":"T\u00fcm bekletme sipari\u015flerini g\u00f6ster.","No hold orders has been registered":"Hi\u00e7bir bekletme emri kaydedilmedi","Add a new hold order":"Yeni bir bekletme emri ekle","Create a new hold order":"Yeni bir bekletme emri olu\u015ftur","Register a new hold order and save it.":"Yeni bir bekletme emri kaydedin ve kaydedin.","Edit hold order":"Bekletme s\u0131ras\u0131n\u0131 d\u00fczenle","Modify Hold Order.":"Bekletme S\u0131ras\u0131n\u0131 De\u011fi\u015ftir.","Return to Hold Orders":"Bekletme Emirlerine D\u00f6n","Orders List":"Sipari\u015f Listesi","Display all orders.":"T\u00fcm sipari\u015fleri g\u00f6ster.","No orders has been registered":"Kay\u0131tl\u0131 sipari\u015f yok","Add a new order":"Yeni sipari\u015f ekle","Create a new order":"Yeni bir sipari\u015f olu\u015ftur","Register a new order and save it.":"Yeni bir sipari\u015f kaydedin ve kaydedin.","Edit order":"Sipari\u015f d\u00fczenle","Modify Order.":"Sipari\u015f d\u00fczenle.","Return to Orders":"Sipari\u015flere D\u00f6n","Discount Rate":"\u0130ndirim oran\u0131","The order and the attached products has been deleted.":"Sipari\u015f ve ekli \u00fcr\u00fcnler silindi.","Invoice":"Fatura","Receipt":"Fi\u015f","Order Instalments List":"Sipari\u015f Taksit Listesi","Display all Order Instalments.":"T\u00fcm Sipari\u015f Taksitlerini G\u00f6r\u00fcnt\u00fcle.","No Order Instalment has been registered":"Sipari\u015f Taksit kayd\u0131 yap\u0131lmad\u0131","Add a new Order Instalment":"Yeni bir Sipari\u015f Taksit Ekle","Create a new Order Instalment":"Yeni bir Sipari\u015f Taksit Olu\u015ftur","Register a new Order Instalment and save it.":"Yeni bir Sipari\u015f Taksiti kaydedin ve kaydedin.","Edit Order Instalment":"Sipari\u015f Taksitini D\u00fczenle","Modify Order Instalment.":"Sipari\u015f Taksitini De\u011fi\u015ftir.","Return to Order Instalment":"Taksitli Sipari\u015fe D\u00f6n","Order Id":"Sipari\u015f Kimli\u011fi","Payment Types List":"\u00d6deme T\u00fcrleri Listesi","Display all payment types.":"T\u00fcm \u00f6deme t\u00fcrlerini g\u00f6ster.","No payment types has been registered":"Hi\u00e7bir \u00f6deme t\u00fcr\u00fc kaydedilmedi","Add a new payment type":"Yeni bir \u00f6deme t\u00fcr\u00fc ekleyin","Create a new payment type":"Yeni bir \u00f6deme t\u00fcr\u00fc olu\u015fturun","Register a new payment type and save it.":"Yeni bir \u00f6deme t\u00fcr\u00fc kaydedin ve kaydedin.","Edit payment type":"\u00d6deme t\u00fcr\u00fcn\u00fc d\u00fczenle","Modify Payment Type.":"\u00d6deme T\u00fcr\u00fcn\u00fc De\u011fi\u015ftir.","Return to Payment Types":"\u00d6deme T\u00fcrlerine D\u00f6n","Label":"Etiket","Provide a label to the resource.":"Kayna\u011fa bir etiket sa\u011flay\u0131n.","Identifier":"Tan\u0131mlay\u0131c\u0131","A payment type having the same identifier already exists.":"Ayn\u0131 tan\u0131mlay\u0131c\u0131ya sahip bir \u00f6deme t\u00fcr\u00fc zaten mevcut.","Unable to delete a read-only payments type.":"Salt okunur bir \u00f6deme t\u00fcr\u00fc silinemiyor.","Readonly":"Sadece oku","Procurements List":"Tedarik Listesi","Display all procurements.":"T\u00fcm tedarikleri g\u00f6ster.","No procurements has been registered":"Kay\u0131tl\u0131 al\u0131m yok","Add a new procurement":"Yeni bir tedarik ekle","Create a new procurement":"Yeni bir tedarik olu\u015ftur","Register a new procurement and save it.":"Yeni bir tedarik kaydedin ve kaydedin.","Edit procurement":"Tedarik d\u00fczenle","Modify Procurement.":"Tedarik De\u011fi\u015ftir.","Return to Procurements":"Tedariklere D\u00f6n","Provider Id":"Sa\u011flay\u0131c\u0131 Kimli\u011fi","Total Items":"T\u00fcm nesneler","Provider":"Sa\u011flay\u0131c\u0131","Stocked":"Stoklu","Procurement Products List":"Tedarik \u00dcr\u00fcnleri Listesi","Display all procurement products.":"T\u00fcm tedarik \u00fcr\u00fcnlerini g\u00f6ster.","No procurement products has been registered":"Tedarik \u00fcr\u00fcn\u00fc kay\u0131tl\u0131 de\u011fil","Add a new procurement product":"Yeni bir tedarik \u00fcr\u00fcn\u00fc ekle","Create a new procurement product":"Yeni bir tedarik \u00fcr\u00fcn\u00fc olu\u015fturun","Register a new procurement product and save it.":"Yeni bir tedarik \u00fcr\u00fcn\u00fc kaydedin ve kaydedin.","Edit procurement product":"Tedarik \u00fcr\u00fcn\u00fcn\u00fc d\u00fczenle","Modify Procurement Product.":"Tedarik \u00dcr\u00fcn\u00fcn\u00fc De\u011fi\u015ftir.","Return to Procurement Products":"Tedarik \u00dcr\u00fcnlerine D\u00f6n","Define what is the expiration date of the product.":"\u00dcr\u00fcn\u00fcn son kullanma tarihinin ne oldu\u011funu tan\u0131mlay\u0131n.","On":"A\u00e7\u0131k","Category Products List":"Kategori \u00dcr\u00fcn Listesi","Display all category products.":"T\u00fcm kategori \u00fcr\u00fcnlerini g\u00f6ster.","No category products has been registered":"Hi\u00e7bir kategori \u00fcr\u00fcn\u00fc kay\u0131tl\u0131 de\u011fil","Add a new category product":"Yeni bir kategori \u00fcr\u00fcn\u00fc ekle","Create a new category product":"Yeni bir kategori \u00fcr\u00fcn\u00fc olu\u015fturun","Register a new category product and save it.":"Yeni bir kategori \u00fcr\u00fcn\u00fc kaydedin ve kaydedin.","Edit category product":"Kategori \u00fcr\u00fcn\u00fcn\u00fc d\u00fczenle","Modify Category Product.":"Kategori \u00dcr\u00fcn\u00fcn\u00fc De\u011fi\u015ftir.","Return to Category Products":"Kategori \u00dcr\u00fcnlere D\u00f6n","No Parent":"Ebeveyn Yok","Preview":"\u00d6n izleme","Provide a preview url to the category.":"Kategoriye bir \u00f6nizleme URL'si sa\u011flay\u0131n.","Displays On POS":"POS'ta g\u00f6r\u00fcnt\u00fcler","Parent":"Alt","If this category should be a child category of an existing category":"Bu kategorinin mevcut bir kategorinin alt kategorisi olmas\u0131 gerekiyorsa","Total Products":"Toplam \u00dcr\u00fcnler","Products List":"\u00dcr\u00fcn listesi","Display all products.":"T\u00fcm \u00fcr\u00fcnleri g\u00f6ster.","No products has been registered":"Hi\u00e7bir \u00fcr\u00fcn kay\u0131tl\u0131 de\u011fil","Add a new product":"Yeni bir \u00fcr\u00fcn ekle","Create a new product":"Yeni bir \u00fcr\u00fcn olu\u015ftur","Register a new product and save it.":"Yeni bir \u00fcr\u00fcn kaydedin ve kaydedin.","Edit product":"\u00dcr\u00fcn\u00fc d\u00fczenle","Modify Product.":"\u00dcr\u00fcn\u00fc De\u011fi\u015ftir.","Return to Products":"\u00dcr\u00fcnlere D\u00f6n","Assigned Unit":"Atanan Birim","The assigned unit for sale":"Sat\u0131l\u0131k atanan birim","Define the regular selling price.":"Normal sat\u0131\u015f fiyat\u0131n\u0131 tan\u0131mlay\u0131n.","Define the wholesale price.":"Toptan sat\u0131\u015f fiyat\u0131n\u0131 tan\u0131mlay\u0131n.","Preview Url":"\u00d6nizleme URL'si","Provide the preview of the current unit.":"Ge\u00e7erli birimin \u00f6nizlemesini sa\u011flay\u0131n.","Identification":"Kimlik","Define the barcode value. Focus the cursor here before scanning the product.":"Barkod de\u011ferini tan\u0131mlay\u0131n. \u00dcr\u00fcn\u00fc taramadan \u00f6nce imleci buraya odaklay\u0131n.","Define the barcode type scanned.":"Taranan barkod t\u00fcr\u00fcn\u00fc tan\u0131mlay\u0131n.","EAN 8":"EAN 8","EAN 13":"EAN 13","Barcode Type":"Barkod T\u00fcr\u00fc(cod 128 de kals\u0131n )","Select to which category the item is assigned.":"\u00d6\u011fenin hangi kategoriye atand\u0131\u011f\u0131n\u0131 se\u00e7in.","Materialized Product":"Ger\u00e7ekle\u015ftirilmi\u015f \u00dcr\u00fcn","Dematerialized Product":"Kaydi \u00dcr\u00fcn","Define the product type. Applies to all variations.":"\u00dcr\u00fcn t\u00fcr\u00fcn\u00fc tan\u0131mlay\u0131n. T\u00fcm varyasyonlar i\u00e7in ge\u00e7erlidir.","Product Type":"\u00dcr\u00fcn tipi","Define a unique SKU value for the product.":"\u00dcr\u00fcn i\u00e7in benzersiz bir SKU de\u011feri tan\u0131mlay\u0131n.","On Sale":"Sat\u0131l\u0131k","Hidden":"Gizlenmi\u015f","Define whether the product is available for sale.":"\u00dcr\u00fcn\u00fcn sat\u0131\u015fa sunulup sunulmad\u0131\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","Enable the stock management on the product. Will not work for service or uncountable products.":"\u00dcr\u00fcn \u00fczerinde stok y\u00f6netimini etkinle\u015ftirin. Servis veya say\u0131lamayan \u00fcr\u00fcnler i\u00e7in \u00e7al\u0131\u015fmaz.","Stock Management Enabled":"Stok Y\u00f6netimi Etkin","Units":"Birimler","Accurate Tracking":"Sat\u0131\u015f Ekran\u0131nda G\u00f6sterme","What unit group applies to the actual item. This group will apply during the procurement.":"Ger\u00e7ek \u00f6\u011fe i\u00e7in hangi birim grubu ge\u00e7erlidir. Bu grup, sat\u0131n alma s\u0131ras\u0131nda ge\u00e7erli olacakt\u0131r. .","Unit Group":"Birim Grubu","Determine the unit for sale.":"Sat\u0131\u015f birimini belirleyin.","Selling Unit":"Sat\u0131\u015f Birimi","Expiry":"Sona Erme","Product Expires":"\u00dcr\u00fcn S\u00fcresi Bitiyor","Set to \"No\" expiration time will be ignored.":"\"Hay\u0131r\" olarak ayarlanan sona erme s\u00fcresi yok say\u0131l\u0131r.","Prevent Sales":"Sat\u0131\u015flar\u0131 Engelle","Allow Sales":"Sat\u0131\u015fa \u0130zin Ver","Determine the action taken while a product has expired.":"Bir \u00fcr\u00fcn\u00fcn s\u00fcresi doldu\u011funda ger\u00e7ekle\u015ftirilen eylemi belirleyin.","On Expiration":"Son kullanma tarihi","Select the tax group that applies to the product\/variation.":"\u00dcr\u00fcn i\u00e7in ge\u00e7erli olan vergi grubunu se\u00e7in\/varyasyon.","Tax Group":"Vergi Grubu","Define what is the type of the tax.":"Verginin t\u00fcr\u00fcn\u00fc tan\u0131mlay\u0131n.","Images":"G\u00f6r\u00fcnt\u00fcler","Image":"Resim","Choose an image to add on the product gallery":"\u00dcr\u00fcn galerisine eklemek i\u00e7in bir resim se\u00e7in","Is Primary":"Birincil","Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.":"Resmin birincil olup olmayaca\u011f\u0131n\u0131 tan\u0131mlay\u0131n. Birden fazla birincil resim varsa, sizin i\u00e7in bir tanesi se\u00e7ilecektir.","Sku":"Sku","Materialized":"Ger\u00e7ekle\u015ftirilmi\u015f","Dematerialized":"Kaydile\u015ftirilmi\u015f","Available":"Mevcut","See Quantities":"Miktarlar\u0131 G\u00f6r","See History":"Ge\u00e7mi\u015fe Bak\u0131n","Would you like to delete selected entries ?":"Se\u00e7ili giri\u015fleri silmek ister misiniz ?","Product Histories":"\u00dcr\u00fcn Ge\u00e7mi\u015fleri","Display all product histories.":"T\u00fcm \u00fcr\u00fcn ge\u00e7mi\u015flerini g\u00f6ster.","No product histories has been registered":"Hi\u00e7bir \u00fcr\u00fcn ge\u00e7mi\u015fi kaydedilmedi","Add a new product history":"Yeni bir \u00fcr\u00fcn ge\u00e7mi\u015fi ekleyin","Create a new product history":"Yeni bir \u00fcr\u00fcn ge\u00e7mi\u015fi olu\u015fturun","Register a new product history and save it.":"Yeni bir \u00fcr\u00fcn ge\u00e7mi\u015fi kaydedin ve kaydedin.","Edit product history":"\u00dcr\u00fcn ge\u00e7mi\u015fini d\u00fczenle","Modify Product History.":"\u00dcr\u00fcn Ge\u00e7mi\u015fini De\u011fi\u015ftir.","Return to Product Histories":"\u00dcr\u00fcn Ge\u00e7mi\u015flerine D\u00f6n","After Quantity":"Miktardan Sonra","Before Quantity":"Miktardan \u00d6nce","Operation Type":"Operasyon t\u00fcr\u00fc","Order id":"Sipari\u015f Kimli\u011fi","Procurement Id":"Tedarik Kimli\u011fi","Procurement Product Id":"Tedarik \u00dcr\u00fcn Kimli\u011fi","Product Id":"\u00dcr\u00fcn kimli\u011fi","Unit Id":"Birim Kimli\u011fi","P. Quantity":"P. Miktar","N. Quantity":"N. Miktar","Defective":"Ar\u0131zal\u0131","Deleted":"Silindi","Removed":"Kald\u0131r\u0131ld\u0131","Returned":"\u0130ade","Sold":"Sat\u0131lm\u0131\u015f","Added":"Katma","Incoming Transfer":"Gelen havale","Outgoing Transfer":"Giden Transfer","Transfer Rejected":"Aktar\u0131m Reddedildi","Transfer Canceled":"Aktar\u0131m \u0130ptal Edildi","Void Return":"Ge\u00e7ersiz \u0130ade","Adjustment Return":"Ayar D\u00f6n\u00fc\u015f\u00fc","Adjustment Sale":"Ayar Sat\u0131\u015f","Product Unit Quantities List":"\u00dcr\u00fcn Birim Miktar Listesi","Display all product unit quantities.":"T\u00fcm \u00fcr\u00fcn birim miktarlar\u0131n\u0131 g\u00f6ster.","No product unit quantities has been registered":"Hi\u00e7bir \u00fcr\u00fcn birimi miktar\u0131 kaydedilmedi","Add a new product unit quantity":"Yeni bir \u00fcr\u00fcn birimi miktar\u0131 ekleyin","Create a new product unit quantity":"Yeni bir \u00fcr\u00fcn birimi miktar\u0131 olu\u015fturun","Register a new product unit quantity and save it.":"Yeni bir \u00fcr\u00fcn birimi miktar\u0131n\u0131 kaydedin ve kaydedin.","Edit product unit quantity":"\u00dcr\u00fcn birimi miktar\u0131n\u0131 d\u00fczenle","Modify Product Unit Quantity.":"\u00dcr\u00fcn Birimi Miktar\u0131n\u0131 De\u011fi\u015ftirin.","Return to Product Unit Quantities":"\u00dcr\u00fcn Birim Miktarlar\u0131na D\u00f6n","Product id":"\u00dcr\u00fcn kimli\u011fi","Providers List":"Sa\u011flay\u0131c\u0131 Listesi","Display all providers.":"T\u00fcm sa\u011flay\u0131c\u0131lar\u0131 g\u00f6ster.","No providers has been registered":"Hi\u00e7bir sa\u011flay\u0131c\u0131 kay\u0131tl\u0131 de\u011fil","Add a new provider":"Yeni bir sa\u011flay\u0131c\u0131 ekle","Create a new provider":"Yeni bir sa\u011flay\u0131c\u0131 olu\u015ftur","Register a new provider and save it.":"Yeni bir sa\u011flay\u0131c\u0131 kaydedin ve kaydedin.","Edit provider":"Sa\u011flay\u0131c\u0131y\u0131 d\u00fczenle","Modify Provider.":"Sa\u011flay\u0131c\u0131y\u0131 De\u011fi\u015ftir.","Return to Providers":"Sa\u011flay\u0131c\u0131lara D\u00f6n","Provide the provider email. Might be used to send automated email.":"Sa\u011flay\u0131c\u0131 e-postas\u0131n\u0131 sa\u011flay\u0131n. Otomatik e-posta g\u00f6ndermek i\u00e7in kullan\u0131labilir.","Contact phone number for the provider. Might be used to send automated SMS notifications.":"Sa\u011flay\u0131c\u0131 i\u00e7in ileti\u015fim telefon numaras\u0131. Otomatik SMS bildirimleri g\u00f6ndermek i\u00e7in kullan\u0131labilir.","First address of the provider.":"Sa\u011flay\u0131c\u0131n\u0131n ilk adresi.","Second address of the provider.":"Sa\u011flay\u0131c\u0131n\u0131n ikinci adresi.","Further details about the provider":"Sa\u011flay\u0131c\u0131 hakk\u0131nda daha fazla ayr\u0131nt\u0131","Amount Due":"Alacak miktar\u0131","Amount Paid":"\u00d6denen miktar","See Procurements":"Tedariklere Bak\u0131n","Registers List":"Kay\u0131t Listesi","Display all registers.":"T\u00fcm kay\u0131tlar\u0131 g\u00f6ster.","No registers has been registered":"Hi\u00e7bir kay\u0131t kay\u0131tl\u0131 de\u011fil","Add a new register":"Yeni bir kay\u0131t ekle","Create a new register":"Yeni bir kay\u0131t olu\u015ftur","Register a new register and save it.":"Yeni bir kay\u0131t yap\u0131n ve kaydedin.","Edit register":"Kayd\u0131 d\u00fczenle","Modify Register.":"Kay\u0131t De\u011fi\u015ftir.","Return to Registers":"Kay\u0131tlara D\u00f6n","Closed":"Kapal\u0131","Define what is the status of the register.":"Kay\u0131t durumunun ne oldu\u011funu tan\u0131mlay\u0131n.","Provide mode details about this cash register.":"Bu yazar kasa hakk\u0131nda mod ayr\u0131nt\u0131lar\u0131n\u0131 sa\u011flay\u0131n.","Unable to delete a register that is currently in use":"\u015eu anda kullan\u0131mda olan bir kay\u0131t silinemiyor","Used By":"Taraf\u0131ndan kullan\u0131lan","Register History List":"Kay\u0131t Ge\u00e7mi\u015fi Listesi","Display all register histories.":"T\u00fcm kay\u0131t ge\u00e7mi\u015flerini g\u00f6ster.","No register histories has been registered":"Hi\u00e7bir kay\u0131t ge\u00e7mi\u015fi kaydedilmedi","Add a new register history":"Yeni bir kay\u0131t ge\u00e7mi\u015fi ekle","Create a new register history":"Yeni bir kay\u0131t ge\u00e7mi\u015fi olu\u015fturun","Register a new register history and save it.":"Yeni bir kay\u0131t ge\u00e7mi\u015fi kaydedin ve kaydedin.","Edit register history":"Kay\u0131t ge\u00e7mi\u015fini d\u00fczenle","Modify Registerhistory.":"Kay\u0131t Ge\u00e7mi\u015fini De\u011fi\u015ftir.","Return to Register History":"Kay\u0131t Ge\u00e7mi\u015fine D\u00f6n","Register Id":"Kay\u0131t Kimli\u011fi","Action":"Action","Register Name":"Kay\u0131t Ad\u0131","Done At":"Biti\u015f Tarihi","Reward Systems List":"\u00d6d\u00fcl Sistemleri Listesi","Display all reward systems.":"T\u00fcm \u00f6d\u00fcl sistemlerini g\u00f6ster.","No reward systems has been registered":"Hi\u00e7bir \u00f6d\u00fcl sistemi kaydedilmedi","Add a new reward system":"Yeni bir \u00f6d\u00fcl sistemi ekle","Create a new reward system":"Yeni bir \u00f6d\u00fcl sistemi olu\u015fturun","Register a new reward system and save it.":"Yeni bir \u00f6d\u00fcl sistemi kaydedin ve kaydedin.","Edit reward system":"\u00d6d\u00fcl sistemini d\u00fczenle","Modify Reward System.":"\u00d6d\u00fcl Sistemini De\u011fi\u015ftir.","Return to Reward Systems":"\u00d6d\u00fcl Sistemlerine D\u00f6n","From":"\u0130tibaren","The interval start here.":"Aral\u0131k burada ba\u015fl\u0131yor.","To":"\u0130le","The interval ends here.":"Aral\u0131k burada biter.","Points earned.":"Kazan\u0131lan puanlar.","Coupon":"Kupon","Decide which coupon you would apply to the system.":"Hangi kuponu sisteme uygulayaca\u011f\u0131n\u0131za karar verin.","This is the objective that the user should reach to trigger the reward.":"Bu, kullan\u0131c\u0131n\u0131n \u00f6d\u00fcl\u00fc tetiklemek i\u00e7in ula\u015fmas\u0131 gereken hedeftir.","A short description about this system":"Bu sistem hakk\u0131nda k\u0131sa bir a\u00e7\u0131klama","Would you like to delete this reward system ?":"Bu \u00f6d\u00fcl sistemini silmek ister misiniz? ?","Delete Selected Rewards":"Se\u00e7ili \u00d6d\u00fclleri Sil","Would you like to delete selected rewards?":"Se\u00e7ilen \u00f6d\u00fclleri silmek ister misiniz?","Roles List":"Roller Listesi","Display all roles.":"T\u00fcm rolleri g\u00f6ster.","No role has been registered.":"Hi\u00e7bir rol kaydedilmedi.","Add a new role":"Yeni bir rol ekle","Create a new role":"Yeni bir rol olu\u015ftur","Create a new role and save it.":"Yeni bir rol olu\u015fturun ve kaydedin.","Edit role":"Rol\u00fc d\u00fczenle","Modify Role.":"Rol\u00fc De\u011fi\u015ftir.","Return to Roles":"Rollere D\u00f6n","Provide a name to the role.":"Role bir ad verin.","Should be a unique value with no spaces or special character":"Bo\u015fluk veya \u00f6zel karakter i\u00e7ermeyen benzersiz bir de\u011fer olmal\u0131d\u0131r","Provide more details about what this role is about.":"Bu rol\u00fcn ne hakk\u0131nda oldu\u011fu hakk\u0131nda daha fazla ayr\u0131nt\u0131 sa\u011flay\u0131n.","Unable to delete a system role.":"Bir sistem rol\u00fc silinemiyor.","You do not have enough permissions to perform this action.":"Bu eylemi ger\u00e7ekle\u015ftirmek i\u00e7in yeterli izniniz yok.","Taxes List":"Vergi Listesi","Display all taxes.":"T\u00fcm vergileri g\u00f6ster.","No taxes has been registered":"Hi\u00e7bir vergi kay\u0131tl\u0131 de\u011fil","Add a new tax":"Yeni bir vergi ekle","Create a new tax":"Yeni bir vergi olu\u015ftur","Register a new tax and save it.":"Yeni bir vergi kaydedin ve kaydedin.","Edit tax":"Vergiyi d\u00fczenle","Modify Tax.":"Vergiyi De\u011fi\u015ftir.","Return to Taxes":"Vergilere D\u00f6n\u00fc\u015f","Provide a name to the tax.":"Vergiye bir ad verin.","Assign the tax to a tax group.":"Vergiyi bir vergi grubuna atama.","Rate":"Oran","Define the rate value for the tax.":"Vergi i\u00e7in oran de\u011ferini tan\u0131mlay\u0131n.","Provide a description to the tax.":"Vergi i\u00e7in bir a\u00e7\u0131klama sa\u011flay\u0131n.","Taxes Groups List":"Vergi Gruplar\u0131 Listesi","Display all taxes groups.":"T\u00fcm vergi gruplar\u0131n\u0131 g\u00f6ster.","No taxes groups has been registered":"Hi\u00e7bir vergi grubu kaydedilmedi","Add a new tax group":"Yeni bir vergi grubu ekle","Create a new tax group":"Yeni bir vergi grubu olu\u015fturun","Register a new tax group and save it.":"Yeni bir vergi grubu kaydedin ve kaydedin.","Edit tax group":"Vergi grubunu d\u00fczenle","Modify Tax Group.":"Vergi Grubunu De\u011fi\u015ftir.","Return to Taxes Groups":"Vergi Gruplar\u0131na D\u00f6n","Provide a short description to the tax group.":"Vergi grubuna k\u0131sa bir a\u00e7\u0131klama sa\u011flay\u0131n.","Units List":"Birim Listesi","Display all units.":"T\u00fcm birimleri g\u00f6ster.","No units has been registered":"Hi\u00e7bir birim kay\u0131tl\u0131 de\u011fil","Add a new unit":"Yeni bir birim ekle","Create a new unit":"Yeni bir birim olu\u015ftur","Register a new unit and save it.":"Yeni bir birim kaydedin ve kaydedin.","Edit unit":"Birimi d\u00fczenle","Modify Unit.":"Birimi De\u011fi\u015ftir.","Return to Units":"Birimlere D\u00f6n","Preview URL":"\u00d6nizleme URL'si","Preview of the unit.":"\u00dcnitenin \u00f6nizlemesi.","Define the value of the unit.":"Birimin de\u011ferini tan\u0131mlay\u0131n.","Define to which group the unit should be assigned.":"\u00dcnitenin hangi gruba atanaca\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","Base Unit":"Ana \u00fcnite","Determine if the unit is the base unit from the group.":"Birimin gruptan temel birim olup olmad\u0131\u011f\u0131n\u0131 belirleyin.","Provide a short description about the unit.":"\u00dcnite hakk\u0131nda k\u0131sa bir a\u00e7\u0131klama sa\u011flay\u0131n.","Unit Groups List":"Birim Gruplar\u0131 Listesi","Display all unit groups.":"T\u00fcm birim gruplar\u0131n\u0131 g\u00f6ster.","No unit groups has been registered":"Hi\u00e7bir birim grubu kaydedilmedi","Add a new unit group":"Yeni bir birim grubu ekle","Create a new unit group":"Yeni bir birim grubu olu\u015ftur","Register a new unit group and save it.":"Yeni bir birim grubu kaydedin ve kaydedin.","Edit unit group":"Birim grubunu d\u00fczenle","Modify Unit Group.":"Birim Grubunu De\u011fi\u015ftir.","Return to Unit Groups":"Birim Gruplar\u0131na D\u00f6n","Users List":"Kullan\u0131c\u0131 Listesi","Display all users.":"T\u00fcm kullan\u0131c\u0131lar\u0131 g\u00f6ster.","No users has been registered":"Kay\u0131tl\u0131 kullan\u0131c\u0131 yok","Add a new user":"Yeni bir kullan\u0131c\u0131 ekle","Create a new user":"Yeni bir kullan\u0131c\u0131 olu\u015ftur","Register a new user and save it.":"Yeni bir kullan\u0131c\u0131 kaydedin ve kaydedin.","Edit user":"Kullan\u0131c\u0131y\u0131 d\u00fczenle","Modify User.":"Kullan\u0131c\u0131y\u0131 De\u011fi\u015ftir.","Return to Users":"Kullan\u0131c\u0131lara D\u00f6n","Username":"Kullan\u0131c\u0131 ad\u0131","Will be used for various purposes such as email recovery.":"E-posta kurtarma gibi \u00e7e\u015fitli ama\u00e7lar i\u00e7in kullan\u0131lacakt\u0131r.","Password":"Parola","Make a unique and secure password.":"Benzersiz ve g\u00fcvenli bir \u015fifre olu\u015fturun.","Confirm Password":"\u015eifreyi Onayla","Should be the same as the password.":"\u015eifre ile ayn\u0131 olmal\u0131.","Define whether the user can use the application.":"Kullan\u0131c\u0131n\u0131n uygulamay\u0131 kullan\u0131p kullanamayaca\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","The action you tried to perform is not allowed.":"Yapmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z i\u015fleme izin verilmiyor.","Not Enough Permissions":"Yetersiz \u0130zinler","The resource of the page you tried to access is not available or might have been deleted.":"Eri\u015fmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z sayfan\u0131n kayna\u011f\u0131 mevcut de\u011fil veya silinmi\u015f olabilir.","Not Found Exception":"\u0130stisna Bulunamad\u0131","Provide your username.":"Kullan\u0131c\u0131 ad\u0131n\u0131z\u0131 girin.","Provide your password.":"\u015eifrenizi girin.","Provide your email.":"E-postan\u0131z\u0131 sa\u011flay\u0131n.","Password Confirm":"\u015eifre onaylama","define the amount of the transaction.":"i\u015flem tutar\u0131n\u0131 tan\u0131mlay\u0131n.","Further observation while proceeding.":"Devam ederken daha fazla g\u00f6zlem.","determine what is the transaction type.":"\u0130\u015flem t\u00fcr\u00fcn\u00fcn ne oldu\u011funu belirleyin.","Add":"Ekle","Deduct":"Kesinti","Determine the amount of the transaction.":"\u0130\u015flem tutar\u0131n\u0131 belirleyin.","Further details about the transaction.":"\u0130\u015flemle ilgili di\u011fer ayr\u0131nt\u0131lar.","Define the installments for the current order.":"Mevcut sipari\u015f i\u00e7in taksit tan\u0131mlay\u0131n.","New Password":"Yeni \u015eifre","define your new password.":"yeni \u015fifrenizi tan\u0131mlay\u0131n.","confirm your new password.":"yeni \u015fifrenizi onaylay\u0131n.","choose the payment type.":"\u00f6deme t\u00fcr\u00fcn\u00fc se\u00e7in.","Provide the procurement name.":"Tedarik ad\u0131n\u0131 sa\u011flay\u0131n.","Describe the procurement.":"Tedarik i\u015flemini tan\u0131mlay\u0131n.","Define the provider.":"Sa\u011flay\u0131c\u0131y\u0131 tan\u0131mlay\u0131n.","Define what is the unit price of the product.":"\u00dcr\u00fcn\u00fcn birim fiyat\u0131n\u0131n ne oldu\u011funu tan\u0131mlay\u0131n.","Condition":"Ko\u015ful","Determine in which condition the product is returned.":"\u00dcr\u00fcn\u00fcn hangi ko\u015fulda iade edildi\u011fini belirleyin.","Other Observations":"Di\u011fer G\u00f6zlemler","Describe in details the condition of the returned product.":"\u0130ade edilen \u00fcr\u00fcn\u00fcn durumunu ayr\u0131nt\u0131l\u0131 olarak a\u00e7\u0131klay\u0131n.","Unit Group Name":"Birim Grubu Ad\u0131","Provide a unit name to the unit.":"\u00dcniteye bir \u00fcnite ad\u0131 sa\u011flay\u0131n.","Describe the current unit.":"Ge\u00e7erli birimi tan\u0131mlay\u0131n.","assign the current unit to a group.":"Ge\u00e7erli birimi bir gruba atay\u0131n.","define the unit value.":"Birim de\u011ferini tan\u0131mla.","Provide a unit name to the units group.":"Birimler grubuna bir birim ad\u0131 sa\u011flay\u0131n.","Describe the current unit group.":"Ge\u00e7erli birim grubunu tan\u0131mlay\u0131n.","POS":"SATI\u015e","Open POS":"SATI\u015eA BA\u015eLA","Create Register":"Kay\u0131t Olu\u015ftur","Use Customer Billing":"M\u00fc\u015fteri Faturaland\u0131rmas\u0131n\u0131 Kullan","Define whether the customer billing information should be used.":"M\u00fc\u015fteri fatura bilgilerinin kullan\u0131l\u0131p kullan\u0131lmayaca\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","General Shipping":"Genel Nakliye","Define how the shipping is calculated.":"G\u00f6nderinin nas\u0131l hesapland\u0131\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","Shipping Fees":"Nakliye \u00fccretleri","Define shipping fees.":"Nakliye \u00fccretlerini tan\u0131mlay\u0131n.","Use Customer Shipping":"M\u00fc\u015fteri G\u00f6nderimini Kullan","Define whether the customer shipping information should be used.":"M\u00fc\u015fteri g\u00f6nderi bilgilerinin kullan\u0131l\u0131p kullan\u0131lmayaca\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","Invoice Number":"Fatura numaras\u0131","If the procurement has been issued outside of NexoPOS, please provide a unique reference.":"Tedarik LimonPOS d\u0131\u015f\u0131nda verilmi\u015fse, l\u00fctfen benzersiz bir referans sa\u011flay\u0131n.","Delivery Time":"Teslimat s\u00fcresi","If the procurement has to be delivered at a specific time, define the moment here.":"Sat\u0131n alman\u0131n belirli bir zamanda teslim edilmesi gerekiyorsa, an\u0131 burada tan\u0131mlay\u0131n.","Automatic Approval":"Otomatik Onay","Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.":"Teslimat S\u00fcresi ger\u00e7ekle\u015fti\u011finde tedarikin otomatik olarak onayland\u0131 olarak i\u015faretlenip i\u015faretlenmeyece\u011fine karar verin.","Determine what is the actual payment status of the procurement.":"Tedarikin ger\u00e7ek \u00f6deme durumunun ne oldu\u011funu belirleyin.","Determine what is the actual provider of the current procurement.":"Mevcut tedarikin ger\u00e7ek sa\u011flay\u0131c\u0131s\u0131n\u0131n ne oldu\u011funu belirleyin.","Provide a name that will help to identify the procurement.":"Tedarikin tan\u0131mlanmas\u0131na yard\u0131mc\u0131 olacak bir ad sa\u011flay\u0131n.","First Name":"\u0130lk ad\u0131","Avatar":"Avatar","Define the image that should be used as an avatar.":"Avatar olarak kullan\u0131lmas\u0131 gereken resmi tan\u0131mlay\u0131n.","Language":"Dil","Choose the language for the current account.":"Cari hesap i\u00e7in dil se\u00e7in.","Security":"G\u00fcvenlik","Old Password":"Eski \u015eifre","Provide the old password.":"Eski \u015fifreyi sa\u011flay\u0131n.","Change your password with a better stronger password.":"Parolan\u0131z\u0131 daha g\u00fc\u00e7l\u00fc bir parolayla de\u011fi\u015ftirin.","Password Confirmation":"\u015eifre onay\u0131","The profile has been successfully saved.":"Profil ba\u015far\u0131yla kaydedildi.","The user attribute has been saved.":"Kullan\u0131c\u0131 \u00f6zelli\u011fi kaydedildi.","The options has been successfully updated.":"Se\u00e7enekler ba\u015far\u0131yla g\u00fcncellendi.","Wrong password provided":"Yanl\u0131\u015f \u015fifre sa\u011fland\u0131","Wrong old password provided":"Yanl\u0131\u015f eski \u015fifre sa\u011fland\u0131","Password Successfully updated.":"\u015eifre Ba\u015far\u0131yla g\u00fcncellendi.","Sign In — NexoPOS":"Giri\u015f Yap — LimonPOS","Sign Up — NexoPOS":"Kay\u0131t Ol — LimonPOS","Password Lost":"\u015eifremi Unuttum","Unable to proceed as the token provided is invalid.":"Sa\u011flanan jeton ge\u00e7ersiz oldu\u011fundan devam edilemiyor.","The token has expired. Please request a new activation token.":"Simgenin s\u00fcresi doldu. L\u00fctfen yeni bir etkinle\u015ftirme jetonu isteyin.","Set New Password":"Yeni \u015eifre Belirle","Database Update":"Veritaban\u0131 G\u00fcncellemesi","This account is disabled.":"Bu hesap devre d\u0131\u015f\u0131.","Unable to find record having that username.":"Bu kullan\u0131c\u0131 ad\u0131na sahip kay\u0131t bulunamad\u0131.","Unable to find record having that password.":"Bu \u015fifreye sahip kay\u0131t bulunamad\u0131.","Invalid username or password.":"Ge\u00e7ersiz kullan\u0131c\u0131 ad\u0131 veya \u015fifre.","Unable to login, the provided account is not active.":"Giri\u015f yap\u0131lam\u0131yor, sa\u011flanan hesap aktif de\u011fil.","You have been successfully connected.":"Ba\u015far\u0131yla ba\u011fland\u0131n\u0131z.","The recovery email has been send to your inbox.":"Kurtarma e-postas\u0131 gelen kutunuza g\u00f6nderildi.","Unable to find a record matching your entry.":"Giri\u015finizle e\u015fle\u015fen bir kay\u0131t bulunamad\u0131.","Your Account has been created but requires email validation.":"Hesab\u0131n\u0131z olu\u015fturuldu ancak e-posta do\u011frulamas\u0131 gerektiriyor.","Unable to find the requested user.":"\u0130stenen kullan\u0131c\u0131 bulunamad\u0131.","Unable to proceed, the provided token is not valid.":"Devam edilemiyor, sa\u011flanan jeton ge\u00e7erli de\u011fil.","Unable to proceed, the token has expired.":"Devam edilemiyor, jetonun s\u00fcresi doldu.","Your password has been updated.":"\u015fifreniz g\u00fcncellenmi\u015ftir.","Unable to edit a register that is currently in use":"\u015eu anda kullan\u0131mda olan bir kay\u0131t d\u00fczenlenemiyor","No register has been opened by the logged user.":"Oturum a\u00e7an kullan\u0131c\u0131 taraf\u0131ndan hi\u00e7bir kay\u0131t a\u00e7\u0131lmad\u0131.","The register is opened.":"Kay\u0131t a\u00e7\u0131ld\u0131.","Closing":"Kapan\u0131\u015f","Opening":"A\u00e7\u0131l\u0131\u015f","Sale":"Sat\u0131\u015f","Refund":"Geri \u00f6deme","Unable to find the category using the provided identifier":"Sa\u011flanan tan\u0131mlay\u0131c\u0131y\u0131 kullanarak kategori bulunamad\u0131","The category has been deleted.":"Kategori silindi.","Unable to find the category using the provided identifier.":"Sa\u011flanan tan\u0131mlay\u0131c\u0131y\u0131 kullanarak kategori bulunamad\u0131.","Unable to find the attached category parent":"Ekli kategori \u00fcst \u00f6\u011fesi bulunamad\u0131","The category has been correctly saved":"Kategori do\u011fru bir \u015fekilde kaydedildi","The category has been updated":"Kategori g\u00fcncellendi","The entry has been successfully deleted.":"Giri\u015f ba\u015far\u0131yla silindi.","A new entry has been successfully created.":"Yeni bir giri\u015f ba\u015far\u0131yla olu\u015fturuldu.","Unhandled crud resource":"\u0130\u015flenmemi\u015f kaba kaynak","You need to select at least one item to delete":"Silmek i\u00e7in en az bir \u00f6\u011fe se\u00e7melisiniz","You need to define which action to perform":"Hangi i\u015flemin ger\u00e7ekle\u015ftirilece\u011fini tan\u0131mlaman\u0131z gerekir","Unable to proceed. No matching CRUD resource has been found.":"Devam edilemiyor. E\u015fle\u015fen CRUD kayna\u011f\u0131 bulunamad\u0131.","Create Coupon":"Kupon Olu\u015ftur","helps you creating a coupon.":"kupon olu\u015fturman\u0131za yard\u0131mc\u0131 olur.","Edit Coupon":"Kuponu D\u00fczenle","Editing an existing coupon.":"Mevcut bir kuponu d\u00fczenleme.","Invalid Request.":"Ge\u00e7ersiz istek.","Unable to delete a group to which customers are still assigned.":"M\u00fc\u015fterilerin h\u00e2l\u00e2 atand\u0131\u011f\u0131 bir grup silinemiyor.","The customer group has been deleted.":"M\u00fc\u015fteri grubu silindi.","Unable to find the requested group.":"\u0130stenen grup bulunamad\u0131.","The customer group has been successfully created.":"M\u00fc\u015fteri grubu ba\u015far\u0131yla olu\u015fturuldu.","The customer group has been successfully saved.":"M\u00fc\u015fteri grubu ba\u015far\u0131yla kaydedildi.","Unable to transfer customers to the same account.":"M\u00fc\u015fteriler ayn\u0131 hesaba aktar\u0131lam\u0131yor.","The categories has been transferred to the group %s.":"Kategoriler gruba aktar\u0131ld\u0131 %s.","No customer identifier has been provided to proceed to the transfer.":"Aktarma i\u015flemine devam etmek i\u00e7in hi\u00e7bir m\u00fc\u015fteri tan\u0131mlay\u0131c\u0131s\u0131 sa\u011flanmad\u0131.","Unable to find the requested group using the provided id.":"Sa\u011flanan kimli\u011fi kullanarak istenen grup bulunamad\u0131.","\"%s\" is not an instance of \"FieldsService\"":"\"%s\" \u00f6rne\u011fi de\u011fil \"Alan hizmeti\"","Manage Medias":"Medyalar\u0131 Y\u00f6net","The operation was successful.":"operasyon ba\u015far\u0131l\u0131 oldu.","Modules List":"Mod\u00fcl Listesi","List all available modules.":"Mevcut t\u00fcm mod\u00fclleri listele.","Upload A Module":"Bir Mod\u00fcl Y\u00fckle","Extends NexoPOS features with some new modules.":"LimonPOS \u00f6zelliklerini baz\u0131 yeni mod\u00fcllerle geni\u015fletiyor.","The notification has been successfully deleted":"Bildirim ba\u015far\u0131yla silindi","All the notifications have been cleared.":"T\u00fcm bildirimler temizlendi.","Order Invoice — %s":"Sipari\u015f faturas\u0131 — %s","Order Receipt — %s":"Sipari\u015f makbuzu — %s","The printing event has been successfully dispatched.":"Yazd\u0131rma olay\u0131 ba\u015far\u0131yla g\u00f6nderildi.","There is a mismatch between the provided order and the order attached to the instalment.":"Verilen sipari\u015f ile taksite eklenen sipari\u015f aras\u0131nda uyumsuzluk var.","Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.":"Stoklanm\u0131\u015f bir tedarik d\u00fczenlenemiyor. Bir ayarlama yapmay\u0131 d\u00fc\u015f\u00fcn\u00fcn veya tedariki silin.","New Procurement":"Yeni Tedarik","Edit Procurement":"Tedarik D\u00fczenle","Perform adjustment on existing procurement.":"Mevcut sat\u0131n alma \u00fczerinde ayarlama yap\u0131n.","%s - Invoice":"%s - Fatura","list of product procured.":"Tedarik edilen \u00fcr\u00fcn listesi.","The product price has been refreshed.":"\u00dcr\u00fcn fiyat\u0131 yenilenmi\u015ftir..","The single variation has been deleted.":"Tek varyasyon silindi.","Edit a product":"Bir \u00fcr\u00fcn\u00fc d\u00fczenleyin","Makes modifications to a product":"Bir \u00fcr\u00fcnde de\u011fi\u015fiklik yapar","Create a product":"Bir \u00fcr\u00fcn olu\u015fturun","Add a new product on the system":"Sisteme yeni bir \u00fcr\u00fcn ekleyin","Stock Adjustment":"Stok Ayar\u0131","Adjust stock of existing products.":"Mevcut \u00fcr\u00fcnlerin stokunu ayarlay\u0131n.","Lost":"Kay\u0131p","No stock is provided for the requested product.":"Talep edilen \u00fcr\u00fcn i\u00e7in stok sa\u011flanmamaktad\u0131r..","The product unit quantity has been deleted.":"\u00dcr\u00fcn birim miktar\u0131 silindi.","Unable to proceed as the request is not valid.":"\u0130stek ge\u00e7erli olmad\u0131\u011f\u0131 i\u00e7in devam edilemiyor.","Unsupported action for the product %s.":"\u00dcr\u00fcn i\u00e7in desteklenmeyen i\u015flem %s.","The stock has been adjustment successfully.":"Stok ba\u015far\u0131yla ayarland\u0131.","Unable to add the product to the cart as it has expired.":"\u00dcr\u00fcn son kullanma tarihi ge\u00e7ti\u011fi i\u00e7in sepete eklenemiyor.","Unable to add a product that has accurate tracking enabled, using an ordinary barcode.":"S\u0131radan bir barkod kullanarak do\u011fru izlemenin etkinle\u015ftirildi\u011fi bir \u00fcr\u00fcn eklenemiyor.","There is no products matching the current request.":"Mevcut istekle e\u015fle\u015fen \u00fcr\u00fcn yok.","Print Labels":"Etiketleri Yazd\u0131r","Customize and print products labels.":"\u00dcr\u00fcn etiketlerini \u00f6zelle\u015ftirin ve yazd\u0131r\u0131n.","Sales Report":"Sat\u0131\u015f raporu","Provides an overview over the sales during a specific period":"Belirli bir d\u00f6nemdeki sat\u0131\u015flara genel bir bak\u0131\u015f sa\u011flar","Sold Stock":"Sat\u0131lan Stok","Provides an overview over the sold stock during a specific period.":"Belirli bir d\u00f6nemde sat\u0131lan stok hakk\u0131nda bir genel bak\u0131\u015f sa\u011flar.","Profit Report":"Kar Raporu","Provides an overview of the provide of the products sold.":"Sat\u0131lan \u00fcr\u00fcnlerin sa\u011flanmas\u0131na ili\u015fkin bir genel bak\u0131\u015f sa\u011flar.","Provides an overview on the activity for a specific period.":"Belirli bir d\u00f6nem i\u00e7in aktiviteye genel bir bak\u0131\u015f sa\u011flar.","Annual Report":"Y\u0131ll\u0131k Rapor","Invalid authorization code provided.":"Ge\u00e7ersiz yetkilendirme kodu sa\u011fland\u0131.","The database has been successfully seeded.":"Veritaban\u0131 ba\u015far\u0131yla tohumland\u0131.","Settings Page Not Found":"Ayarlar Sayfas\u0131 Bulunamad\u0131","Customers Settings":"M\u00fc\u015fteri Ayarlar\u0131","Configure the customers settings of the application.":"Uygulaman\u0131n m\u00fc\u015fteri ayarlar\u0131n\u0131 yap\u0131land\u0131r\u0131n.","General Settings":"Genel Ayarlar","Configure the general settings of the application.":"Uygulaman\u0131n genel ayarlar\u0131n\u0131 yap\u0131land\u0131r\u0131n.","Orders Settings":"Sipari\u015f Ayarlar\u0131","POS Settings":"Sat\u0131\u015f Ayarlar\u0131","Configure the pos settings.":"Sat\u0131\u015f ayarlar\u0131n\u0131 yap\u0131land\u0131r\u0131n.","Workers Settings":"\u00c7al\u0131\u015fan Ayarlar\u0131","%s is not an instance of \"%s\".":"%s \u00f6rne\u011fi de\u011fil \"%s\".","Unable to find the requested product tax using the provided id":"Sa\u011flanan kimlik kullan\u0131larak istenen \u00fcr\u00fcn vergisi bulunamad\u0131","Unable to find the requested product tax using the provided identifier.":"Verilen tan\u0131mlay\u0131c\u0131 kullan\u0131larak istenen \u00fcr\u00fcn vergisi bulunamad\u0131.","The product tax has been created.":"\u00dcr\u00fcn vergisi olu\u015fturuldu.","The product tax has been updated":"\u00dcr\u00fcn vergisi g\u00fcncellendi","Unable to retrieve the requested tax group using the provided identifier \"%s\".":"Sa\u011flanan tan\u0131mlay\u0131c\u0131 kullan\u0131larak istenen vergi grubu al\u0131nam\u0131yor \"%s\".","Permission Manager":"\u0130zin Y\u00f6neticisi","Manage all permissions and roles":"T\u00fcm izinleri ve rolleri y\u00f6netin","My Profile":"Profilim","Change your personal settings":"Ki\u015fisel ayarlar\u0131n\u0131z\u0131 de\u011fi\u015ftirin","The permissions has been updated.":"\u0130zinler g\u00fcncellendi.","Sunday":"Pazar","Monday":"Pazartesi","Tuesday":"Sal\u0131","Wednesday":"\u00c7ar\u015famba","Thursday":"Per\u015fembe","Friday":"Cuma","Saturday":"Cumartesi","The migration has successfully run.":"Ta\u015f\u0131ma ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131.","Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.":"Ayarlar sayfas\u0131 ba\u015flat\u0131lam\u0131yor. \"%s\" tan\u0131mlay\u0131c\u0131s\u0131 somutla\u015ft\u0131r\u0131lamaz.","Unable to register. The registration is closed.":"Kay\u0131t yap\u0131lam\u0131yor. Kay\u0131t kapand\u0131.","Hold Order Cleared":"Bekletme Emri Temizlendi","[NexoPOS] Activate Your Account":"[LimonPOS] Hesab\u0131n\u0131z\u0131 Etkinle\u015ftirin","[NexoPOS] A New User Has Registered":"[LimonPOS] Yeni Bir Kullan\u0131c\u0131 Kaydoldu","[NexoPOS] Your Account Has Been Created":"[LimonPOS] Hesab\u0131n\u0131z olu\u015fturuldu","Unable to find the permission with the namespace \"%s\".":"Ad alan\u0131 ile izin bulunam\u0131yor \"%s\".","Voided":"Ge\u00e7ersiz","Refunded":"Geri \u00f6dendi","Partially Refunded":"K\u0131smen Geri \u00d6deme Yap\u0131ld\u0131","The register has been successfully opened":"Kay\u0131t ba\u015far\u0131yla a\u00e7\u0131ld\u0131","The register has been successfully closed":"Kay\u0131t ba\u015far\u0131yla kapat\u0131ld\u0131","The provided amount is not allowed. The amount should be greater than \"0\". ":"Sa\u011flanan miktara izin verilmiyor. Miktar \u015fundan b\u00fcy\u00fck olmal\u0131d\u0131r: \"0\". ","The cash has successfully been stored":"Nakit ba\u015far\u0131yla sakland\u0131","Not enough fund to cash out.":"Para \u00e7ekmek i\u00e7in yeterli fon yok.","The cash has successfully been disbursed.":"Nakit ba\u015far\u0131yla da\u011f\u0131t\u0131ld\u0131.","In Use":"Kullan\u0131mda","Opened":"A\u00e7\u0131ld\u0131","Delete Selected entries":"Se\u00e7ili giri\u015fleri sil","%s entries has been deleted":"%s Giri\u015fler silindi","%s entries has not been deleted":"%s Giri\u015fler silinmedi","Unable to find the customer using the provided id.":"Sa\u011flanan kimli\u011fi kullanarak m\u00fc\u015fteri bulunamad\u0131.","The customer has been deleted.":"M\u00fc\u015fteri silindi.","The customer has been created.":"M\u00fc\u015fteri olu\u015fturuldu.","Unable to find the customer using the provided ID.":"Sa\u011flanan kimli\u011fi kullanarak m\u00fc\u015fteri bulunamad\u0131.","The customer has been edited.":"M\u00fc\u015fteri d\u00fczenlendi.","Unable to find the customer using the provided email.":"Sa\u011flanan e-postay\u0131 kullanarak m\u00fc\u015fteri bulunamad\u0131.","The customer account has been updated.":"M\u00fc\u015fteri hesab\u0131 g\u00fcncellendi.","Issuing Coupon Failed":"Kupon Verilemedi","Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.":"\"%s\" \u00f6d\u00fcl\u00fcne eklenmi\u015f bir kupon uygulanam\u0131yor. Kupon art\u0131k yok gibi g\u00f6r\u00fcn\u00fcyor.","Unable to find a coupon with the provided code.":"Sa\u011flanan kodla bir kupon bulunam\u0131yor.","The coupon has been updated.":"Kupon g\u00fcncellendi.","The group has been created.":"Grup olu\u015fturuldu.","The media has been deleted":"Medya silindi","Unable to find the media.":"Medya bulunamad\u0131.","Unable to find the requested file.":"\u0130stenen dosya bulunamad\u0131.","Unable to find the media entry":"Medya giri\u015fi bulunamad\u0131","Payment Types":"\u00d6deme Tipleri","Medias":"Medyalar","List":"Liste","Customers Groups":"M\u00fc\u015fteri Gruplar\u0131","Create Group":"Grup olu\u015ftur","Reward Systems":"\u00d6d\u00fcl Sistemleri","Create Reward":"\u00d6d\u00fcl Olu\u015ftur","List Coupons":"Kuponlar\u0131 Listele","Providers":"Sa\u011flay\u0131c\u0131lar","Create A Provider":"Sa\u011flay\u0131c\u0131 Olu\u015ftur","Inventory":"Envanter","Create Product":"\u00dcr\u00fcn Olu\u015ftur","Create Category":"Kategori Olu\u015ftur","Create Unit":"Birim Olu\u015ftur","Unit Groups":"Birim Gruplar\u0131","Create Unit Groups":"Birim Gruplar\u0131 Olu\u015fturun","Taxes Groups":"Vergi Gruplar\u0131","Create Tax Groups":"Vergi Gruplar\u0131 Olu\u015fturun","Create Tax":"Vergi Olu\u015ftur","Modules":"Mod\u00fcller","Upload Module":"Mod\u00fcl Y\u00fckle","Users":"Kullan\u0131c\u0131lar","Create User":"Kullan\u0131c\u0131 olu\u015ftur","Roles":"Roller","Create Roles":"Rol Olu\u015ftur","Permissions Manager":"\u0130zin Y\u00f6neticisi","Procurements":"Tedarikler","Reports":"Raporlar","Sale Report":"Sat\u0131\u015f Raporu","Incomes & Loosses":"Gelirler ve Zararlar","Invoice Settings":"Fatura Ayarlar\u0131","Workers":"i\u015f\u00e7iler","Unable to locate the requested module.":"\u0130stenen mod\u00fcl bulunamad\u0131.","The module \"%s\" has been disabled as the dependency \"%s\" is missing. ":"\"%s\" mod\u00fcl\u00fc, \"%s\" ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 olmad\u0131\u011f\u0131 i\u00e7in devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131. ","The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ":"\"%s\" mod\u00fcl\u00fc, \"%s\" ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 etkinle\u015ftirilmedi\u011finden devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131. ","Unable to detect the folder from where to perform the installation.":"Kurulumun ger\u00e7ekle\u015ftirilece\u011fi klas\u00f6r alg\u0131lanam\u0131yor.","The uploaded file is not a valid module.":"Y\u00fcklenen dosya ge\u00e7erli bir mod\u00fcl de\u011fil.","The module has been successfully installed.":"Mod\u00fcl ba\u015far\u0131yla kuruldu.","The migration run successfully.":"Ta\u015f\u0131ma ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131.","The module has correctly been enabled.":"Mod\u00fcl do\u011fru \u015fekilde etkinle\u015ftirildi.","Unable to enable the module.":"Mod\u00fcl etkinle\u015ftirilemiyor.","The Module has been disabled.":"Mod\u00fcl devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","Unable to disable the module.":"Mod\u00fcl devre d\u0131\u015f\u0131 b\u0131rak\u0131lam\u0131yor.","Unable to proceed, the modules management is disabled.":"Devam edilemiyor, mod\u00fcl y\u00f6netimi devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","Missing required parameters to create a notification":"Bildirim olu\u015fturmak i\u00e7in gerekli parametreler eksik","The order has been placed.":"sipari\u015f verildi.","The percentage discount provided is not valid.":"Sa\u011flanan y\u00fczde indirim ge\u00e7erli de\u011fil.","A discount cannot exceed the sub total value of an order.":"\u0130ndirim, sipari\u015fin alt toplam de\u011ferini a\u015famaz.","No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.":"\u015eu anda herhangi bir \u00f6deme beklenmiyor. M\u00fc\u015fteri erken \u00f6demek istiyorsa, taksit \u00f6deme tarihini ayarlamay\u0131 d\u00fc\u015f\u00fcn\u00fcn.","The payment has been saved.":"\u00f6deme kaydedildi.","Unable to edit an order that is completely paid.":"Tamam\u0131 \u00f6denmi\u015f bir sipari\u015f d\u00fczenlenemiyor.","Unable to proceed as one of the previous submitted payment is missing from the order.":"\u00d6nceki g\u00f6nderilen \u00f6demelerden biri sipari\u015fte eksik oldu\u011fundan devam edilemiyor.","The order payment status cannot switch to hold as a payment has already been made on that order.":"S\u00f6z konusu sipari\u015fte zaten bir \u00f6deme yap\u0131ld\u0131\u011f\u0131ndan sipari\u015f \u00f6deme durumu beklemeye ge\u00e7emez.","Unable to proceed. One of the submitted payment type is not supported.":"Devam edilemiyor. G\u00f6nderilen \u00f6deme t\u00fcrlerinden biri desteklenmiyor.","Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.":"Devam edilemiyor, \"%s\" \u00fcr\u00fcn\u00fcnde geri al\u0131namayan bir birim var. Silinmi\u015f olabilir.","Unable to find the customer using the provided ID. The order creation has failed.":"Sa\u011flanan kimli\u011fi kullanarak m\u00fc\u015fteri bulunamad\u0131. Sipari\u015f olu\u015fturma ba\u015far\u0131s\u0131z oldu.","Unable to proceed a refund on an unpaid order.":"\u00d6denmemi\u015f bir sipari\u015f i\u00e7in geri \u00f6deme yap\u0131lam\u0131yor.","The current credit has been issued from a refund.":"Mevcut kredi bir geri \u00f6demeden \u00e7\u0131kar\u0131ld\u0131.","The order has been successfully refunded.":"Sipari\u015f ba\u015far\u0131yla geri \u00f6dendi.","unable to proceed to a refund as the provided status is not supported.":"sa\u011flanan durum desteklenmedi\u011fi i\u00e7in geri \u00f6demeye devam edilemiyor.","The product %s has been successfully refunded.":"%s \u00fcr\u00fcn\u00fc ba\u015far\u0131yla iade edildi.","Unable to find the order product using the provided id.":"Sa\u011flanan kimli\u011fi kullanarak sipari\u015f \u00fcr\u00fcn\u00fc bulunamad\u0131.","Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier":"Pivot olarak \"%s\" ve tan\u0131mlay\u0131c\u0131 olarak \"%s\" kullan\u0131larak istenen sipari\u015f bulunamad\u0131","Unable to fetch the order as the provided pivot argument is not supported.":"Sa\u011flanan pivot ba\u011f\u0131ms\u0131z de\u011fi\u015fkeni desteklenmedi\u011finden sipari\u015f getirilemiyor.","The product has been added to the order \"%s\"":"\u00dcr\u00fcn sipari\u015fe eklendi \"%s\"","the order has been successfully computed.":"sipari\u015f ba\u015far\u0131yla tamamland\u0131.","The order has been deleted.":"sipari\u015f silindi.","The product has been successfully deleted from the order.":"\u00dcr\u00fcn sipari\u015ften ba\u015far\u0131yla silindi.","Unable to find the requested product on the provider order.":"Sa\u011flay\u0131c\u0131 sipari\u015finde istenen \u00fcr\u00fcn bulunamad\u0131.","Unpaid Orders Turned Due":"\u00d6denmemi\u015f Sipari\u015flerin S\u00fcresi Doldu","No orders to handle for the moment.":"\u015eu an i\u00e7in i\u015fleme al\u0131nacak emir yok.","The order has been correctly voided.":"Sipari\u015f do\u011fru bir \u015fekilde iptal edildi.","Unable to edit an already paid instalment.":"Zaten \u00f6denmi\u015f bir taksit d\u00fczenlenemiyor.","The instalment has been saved.":"Taksit kaydedildi.","The instalment has been deleted.":"taksit silindi.","The defined amount is not valid.":"Tan\u0131mlanan miktar ge\u00e7erli de\u011fil.","No further instalments is allowed for this order. The total instalment already covers the order total.":"Bu sipari\u015f i\u00e7in ba\u015fka taksitlere izin verilmez. Toplam taksit zaten sipari\u015f toplam\u0131n\u0131 kaps\u0131yor.","The instalment has been created.":"Taksit olu\u015fturuldu.","The provided status is not supported.":"Sa\u011flanan durum desteklenmiyor.","The order has been successfully updated.":"Sipari\u015f ba\u015far\u0131yla g\u00fcncellendi.","Unable to find the requested procurement using the provided identifier.":"Sa\u011flanan tan\u0131mlay\u0131c\u0131 kullan\u0131larak istenen tedarik bulunamad\u0131.","Unable to find the assigned provider.":"Atanan sa\u011flay\u0131c\u0131 bulunamad\u0131.","The procurement has been created.":"Tedarik olu\u015fturuldu.","Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.":"Halihaz\u0131rda stoklanm\u0131\u015f bir tedarik d\u00fczenlenemiyor. L\u00fctfen ger\u00e7ekle\u015ftirmeyi ve stok ayarlamas\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcn.","The provider has been edited.":"Sa\u011flay\u0131c\u0131 d\u00fczenlendi.","Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"":"\"%s\" referans\u0131n\u0131 \"%s\" olarak kullanan \u00fcr\u00fcn i\u00e7in birim grup kimli\u011fine sahip olunam\u0131yor","The operation has completed.":"operasyon tamamland\u0131.","The procurement has been refreshed.":"\u0130hale yenilendi.","The procurement has been reset.":"Tedarik s\u0131f\u0131rland\u0131.","The procurement products has been deleted.":"Tedarik \u00fcr\u00fcnleri silindi.","The procurement product has been updated.":"Tedarik \u00fcr\u00fcn\u00fc g\u00fcncellendi.","Unable to find the procurement product using the provided id.":"Sa\u011flanan kimli\u011fi kullanarak tedarik \u00fcr\u00fcn\u00fc bulunamad\u0131.","The product %s has been deleted from the procurement %s":"%s \u00fcr\u00fcn\u00fc %s tedarikinden silindi","The product with the following ID \"%s\" is not initially included on the procurement":"A\u015fa\u011f\u0131daki \"%s\" kimli\u011fine sahip \u00fcr\u00fcn, ba\u015flang\u0131\u00e7ta tedarike dahil edilmedi","The procurement products has been updated.":"Tedarik \u00fcr\u00fcnleri g\u00fcncellendi.","Procurement Automatically Stocked":"Tedarik Otomatik Olarak Stoklan\u0131r","Draft":"Taslak","The category has been created":"Kategori olu\u015fturuldu","Unable to find the product using the provided id.":"Sa\u011flanan kimli\u011fi kullanarak \u00fcr\u00fcn bulunamad\u0131.","Unable to find the requested product using the provided SKU.":"Sa\u011flanan SKU kullan\u0131larak istenen \u00fcr\u00fcn bulunamad\u0131.","The variable product has been created.":"De\u011fi\u015fken \u00fcr\u00fcn olu\u015fturuldu.","The provided barcode \"%s\" is already in use.":"Sa\u011flanan barkod \"%s\" zaten kullan\u0131mda.","The provided SKU \"%s\" is already in use.":"Sa\u011flanan SKU \"%s\" zaten kullan\u0131mda.","The product has been saved.":"\u00dcr\u00fcn kaydedildi.","The provided barcode is already in use.":"Sa\u011flanan barkod zaten kullan\u0131mda.","The provided SKU is already in use.":"Sa\u011flanan SKU zaten kullan\u0131mda.","The product has been updated":"\u00dcr\u00fcn g\u00fcncellendi","The variable product has been updated.":"De\u011fi\u015fken \u00fcr\u00fcn g\u00fcncellendi.","The product variations has been reset":"\u00dcr\u00fcn varyasyonlar\u0131 s\u0131f\u0131rland\u0131","The product has been reset.":"\u00dcr\u00fcn s\u0131f\u0131rland\u0131.","The product \"%s\" has been successfully deleted":"\"%s\" \u00fcr\u00fcn\u00fc ba\u015far\u0131yla silindi","Unable to find the requested variation using the provided ID.":"Sa\u011flanan kimlik kullan\u0131larak istenen varyasyon bulunamad\u0131.","The product stock has been updated.":"\u00dcr\u00fcn sto\u011fu g\u00fcncellendi.","The action is not an allowed operation.":"Eylem izin verilen bir i\u015flem de\u011fil.","The product quantity has been updated.":"\u00dcr\u00fcn miktar\u0131 g\u00fcncellendi.","There is no variations to delete.":"Silinecek bir varyasyon yok.","There is no products to delete.":"Silinecek \u00fcr\u00fcn yok.","The product variation has been successfully created.":"\u00dcr\u00fcn varyasyonu ba\u015far\u0131yla olu\u015fturuldu.","The product variation has been updated.":"\u00dcr\u00fcn varyasyonu g\u00fcncellendi.","The provider has been created.":"Sa\u011flay\u0131c\u0131 olu\u015fturuldu.","The provider has been updated.":"Sa\u011flay\u0131c\u0131 g\u00fcncellendi.","Unable to find the provider using the specified id.":"Belirtilen kimli\u011fi kullanarak sa\u011flay\u0131c\u0131 bulunamad\u0131.","The provider has been deleted.":"Sa\u011flay\u0131c\u0131 silindi.","Unable to find the provider using the specified identifier.":"Belirtilen tan\u0131mlay\u0131c\u0131y\u0131 kullanarak sa\u011flay\u0131c\u0131 bulunamad\u0131.","The provider account has been updated.":"Sa\u011flay\u0131c\u0131 hesab\u0131 g\u00fcncellendi.","The procurement payment has been deducted.":"Tedarik \u00f6demesi kesildi.","The dashboard report has been updated.":"Kontrol paneli raporu g\u00fcncellendi.","Untracked Stock Operation":"Takipsiz Stok \u0130\u015flemi","Unsupported action":"Desteklenmeyen i\u015flem","The expense has been correctly saved.":"Masraf do\u011fru bir \u015fekilde kaydedildi.","The table has been truncated.":"Tablo k\u0131salt\u0131ld\u0131.","Untitled Settings Page":"Ads\u0131z Ayarlar Sayfas\u0131","No description provided for this settings page.":"Bu ayarlar sayfas\u0131 i\u00e7in a\u00e7\u0131klama sa\u011flanmad\u0131.","The form has been successfully saved.":"Form ba\u015far\u0131yla kaydedildi.","Unable to reach the host":"Ana bilgisayara ula\u015f\u0131lam\u0131yor","Unable to connect to the database using the credentials provided.":"Sa\u011flanan kimlik bilgileri kullan\u0131larak veritaban\u0131na ba\u011flan\u0131lam\u0131yor.","Unable to select the database.":"Veritaban\u0131 se\u00e7ilemiyor.","Access denied for this user.":"Bu kullan\u0131c\u0131 i\u00e7in eri\u015fim reddedildi.","The connexion with the database was successful":"Veritaban\u0131yla ba\u011flant\u0131 ba\u015far\u0131l\u0131 oldu","Cash":"Nakit \u00d6deme","Bank Payment":"Kartla \u00d6deme","NexoPOS has been successfully installed.":"LimonPOS ba\u015far\u0131yla kuruldu.","A tax cannot be his own parent.":"Bir vergi kendi ebeveyni olamaz.","The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".":"Vergi hiyerar\u015fisi 1 ile s\u0131n\u0131rl\u0131d\u0131r. Bir alt verginin vergi t\u00fcr\u00fc \"grupland\u0131r\u0131lm\u0131\u015f\" olarak ayarlanmamal\u0131d\u0131r.","Unable to find the requested tax using the provided identifier.":"Sa\u011flanan tan\u0131mlay\u0131c\u0131 kullan\u0131larak istenen vergi bulunamad\u0131.","The tax group has been correctly saved.":"Vergi grubu do\u011fru bir \u015fekilde kaydedildi.","The tax has been correctly created.":"Vergi do\u011fru bir \u015fekilde olu\u015fturuldu.","The tax has been successfully deleted.":"Vergi ba\u015far\u0131yla silindi.","The Unit Group has been created.":"Birim Grubu olu\u015fturuldu.","The unit group %s has been updated.":"%s birim grubu g\u00fcncellendi.","Unable to find the unit group to which this unit is attached.":"Bu birimin ba\u011fl\u0131 oldu\u011fu birim grubu bulunamad\u0131.","The unit has been saved.":"\u00dcnite kaydedildi.","Unable to find the Unit using the provided id.":"Sa\u011flanan kimli\u011fi kullanarak Birim bulunamad\u0131.","The unit has been updated.":"Birim g\u00fcncellendi.","The unit group %s has more than one base unit":"%s birim grubu birden fazla temel birime sahip","The unit has been deleted.":"Birim silindi.","unable to find this validation class %s.":"bu do\u011frulama s\u0131n\u0131f\u0131 %s bulunamad\u0131.","Enable Reward":"\u00d6d\u00fcl\u00fc Etkinle\u015ftir","Will activate the reward system for the customers.":"M\u00fc\u015fteriler i\u00e7in \u00f6d\u00fcl sistemini etkinle\u015ftirecek.","Default Customer Account":"Varsay\u0131lan M\u00fc\u015fteri Hesab\u0131","Default Customer Group":"Varsay\u0131lan M\u00fc\u015fteri Grubu","Select to which group each new created customers are assigned to.":"Her yeni olu\u015fturulan m\u00fc\u015fterinin hangi gruba atanaca\u011f\u0131n\u0131 se\u00e7in.","Enable Credit & Account":"Kredi ve Hesab\u0131 Etkinle\u015ftir","The customers will be able to make deposit or obtain credit.":"M\u00fc\u015fteriler para yat\u0131rabilecek veya kredi alabilecek.","Store Name":"D\u00fckkan ad\u0131","This is the store name.":"Bu ma\u011faza ad\u0131d\u0131r.","Store Address":"Ma\u011faza Adresi","The actual store address.":"Ger\u00e7ek ma\u011faza adresi.","Store City":"Ma\u011faza \u015eehri","The actual store city.":"Ger\u00e7ek ma\u011faza \u015fehri.","Store Phone":"Ma\u011faza Telefonu","The phone number to reach the store.":"Ma\u011fazaya ula\u015fmak i\u00e7in telefon numaras\u0131.","Store Email":"E-postay\u0131 Sakla","The actual store email. Might be used on invoice or for reports.":"Ger\u00e7ek ma\u011faza e-postas\u0131. Fatura veya raporlar i\u00e7in kullan\u0131labilir.","Store PO.Box":"Posta Kodunu Sakla","The store mail box number.":"Ma\u011faza posta kutusu numaras\u0131.","Store Fax":"Faks\u0131 Sakla","The store fax number.":"Ma\u011faza faks numaras\u0131.","Store Additional Information":"Ek Bilgileri Saklay\u0131n","Store additional information.":"Ek bilgileri saklay\u0131n.","Store Square Logo":"Ma\u011faza Meydan\u0131 Logosu","Choose what is the square logo of the store.":"Ma\u011fazan\u0131n kare logosunun ne oldu\u011funu se\u00e7in.","Store Rectangle Logo":"Dikd\u00f6rtgen Logo Ma\u011fazas\u0131","Choose what is the rectangle logo of the store.":"Ma\u011fazan\u0131n dikd\u00f6rtgen logosunun ne oldu\u011funu se\u00e7in.","Define the default fallback language.":"Varsay\u0131lan yedek dili tan\u0131mlay\u0131n.","Currency":"Para birimi","Currency Symbol":"Para Birimi Sembol\u00fc","This is the currency symbol.":"Bu para birimi sembol\u00fcd\u00fcr.","Currency ISO":"Para birimi ISO","The international currency ISO format.":"Uluslararas\u0131 para birimi ISO format\u0131.","Currency Position":"Para Birimi Pozisyonu","Before the amount":"Miktardan \u00f6nce","After the amount":"Miktardan sonra","Define where the currency should be located.":"Para biriminin nerede bulunmas\u0131 gerekti\u011fini tan\u0131mlay\u0131n.","Preferred Currency":"Tercih Edilen Para Birimi","ISO Currency":"ISO Para Birimi","Symbol":"Sembol","Determine what is the currency indicator that should be used.":"Kullan\u0131lmas\u0131 gereken para birimi g\u00f6stergesinin ne oldu\u011funu belirleyin.","Currency Thousand Separator":"D\u00f6viz Bin Ay\u0131r\u0131c\u0131","Currency Decimal Separator":"Para Birimi Ondal\u0131k Ay\u0131r\u0131c\u0131","Define the symbol that indicate decimal number. By default \".\" is used.":"Ondal\u0131k say\u0131y\u0131 g\u00f6steren sembol\u00fc tan\u0131mlay\u0131n. Varsay\u0131lan olarak \".\" kullan\u0131l\u0131r.","Currency Precision":"Para Birimi Hassasiyeti","%s numbers after the decimal":"Ondal\u0131ktan sonraki %s say\u0131lar","Date Format":"Tarih format\u0131","This define how the date should be defined. The default format is \"Y-m-d\".":"Bu, tarihin nas\u0131l tan\u0131mlanmas\u0131 gerekti\u011fini tan\u0131mlar. Varsay\u0131lan bi\u00e7im \"Y-m-d\" \u015feklindedir.","Registration":"kay\u0131t","Registration Open":"Kay\u0131t A\u00e7\u0131k","Determine if everyone can register.":"Herkesin kay\u0131t olup olamayaca\u011f\u0131n\u0131 belirleyin.","Registration Role":"Kay\u0131t Rol\u00fc","Select what is the registration role.":"Kay\u0131t rol\u00fcn\u00fcn ne oldu\u011funu se\u00e7in.","Requires Validation":"Do\u011frulama Gerektirir","Force account validation after the registration.":"Kay\u0131ttan sonra hesap do\u011frulamas\u0131n\u0131 zorla.","Allow Recovery":"Kurtarmaya \u0130zin Ver","Allow any user to recover his account.":"Herhangi bir kullan\u0131c\u0131n\u0131n hesab\u0131n\u0131 kurtarmas\u0131na izin verin.","Receipts":"Gelirler","Receipt Template":"Makbuz \u015eablonu","Default":"Varsay\u0131lan","Choose the template that applies to receipts":"Makbuzlar i\u00e7in ge\u00e7erli olan \u015fablonu se\u00e7in","Receipt Logo":"Makbuz logosu","Provide a URL to the logo.":"Logoya bir URL sa\u011flay\u0131n.","Receipt Footer":"Makbuz Altbilgisi","If you would like to add some disclosure at the bottom of the receipt.":"Makbuzun alt\u0131na bir a\u00e7\u0131klama eklemek isterseniz.","Column A":"A s\u00fctunu","Column B":"B s\u00fctunu","Order Code Type":"Sipari\u015f Kodu T\u00fcr\u00fc","Determine how the system will generate code for each orders.":"Sistemin her sipari\u015f i\u00e7in nas\u0131l kod \u00fcretece\u011fini belirleyin.","Sequential":"Ard\u0131\u015f\u0131k","Random Code":"Rastgele Kod","Number Sequential":"Say\u0131 S\u0131ral\u0131","Allow Unpaid Orders":"\u00d6denmemi\u015f Sipari\u015flere \u0130zin Ver","Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".":"Eksik sipari\u015flerin verilmesini \u00f6nleyecektir. Krediye izin veriliyorsa, bu se\u00e7enek \"evet\" olarak ayarlanmal\u0131d\u0131r.","Allow Partial Orders":"K\u0131smi Sipari\u015flere \u0130zin Ver","Will prevent partially paid orders to be placed.":"K\u0131smen \u00f6denen sipari\u015flerin verilmesini \u00f6nleyecektir.","Quotation Expiration":"Teklif S\u00fcresi Sonu","Quotations will get deleted after they defined they has reached.":"Teklifler ula\u015ft\u0131klar\u0131n\u0131 tan\u0131mlad\u0131ktan sonra silinecektir.","%s Days":"%s G\u00fcn","Features":"\u00d6zellikler","Show Quantity":"Miktar\u0131 G\u00f6ster","Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.":"Bir \u00fcr\u00fcn se\u00e7erken miktar se\u00e7iciyi g\u00f6sterecektir. Aksi takdirde varsay\u0131lan miktar 1 olarak ayarlan\u0131r.","Allow Customer Creation":"M\u00fc\u015fteri Olu\u015fturmaya \u0130zin Ver","Allow customers to be created on the POS.":"M\u00fc\u015fterilerin SATI\u015e'ta olu\u015fturulmas\u0131na izin verin.","Quick Product":"H\u0131zl\u0131 \u00dcr\u00fcn","Allow quick product to be created from the POS.":"SATI\u015e'tan h\u0131zl\u0131 \u00fcr\u00fcn olu\u015fturulmas\u0131na izin verin.","Editable Unit Price":"D\u00fczenlenebilir Birim Fiyat\u0131","Allow product unit price to be edited.":"\u00dcr\u00fcn birim fiyat\u0131n\u0131n d\u00fczenlenmesine izin ver.","Order Types":"Sipari\u015f T\u00fcrleri","Control the order type enabled.":"Etkinle\u015ftirilen sipari\u015f t\u00fcr\u00fcn\u00fc kontrol edin.","Layout":"D\u00fczen","Retail Layout":"Perakende D\u00fczeni","Clothing Shop":"Giysi d\u00fckkan\u0131","POS Layout":"SATI\u015e D\u00fczeni","Change the layout of the POS.":"SATI\u015e d\u00fczenini de\u011fi\u015ftirin.","Printing":"Bask\u0131","Printed Document":"Bas\u0131l\u0131 Belge","Choose the document used for printing aster a sale.":"Aster bir sat\u0131\u015f yazd\u0131rmak i\u00e7in kullan\u0131lan belgeyi se\u00e7in.","Printing Enabled For":"Yazd\u0131rma Etkinle\u015ftirildi","All Orders":"T\u00fcm sipari\u015fler","From Partially Paid Orders":"K\u0131smi \u00d6denen Sipari\u015flerden","Only Paid Orders":"Sadece \u00dccretli Sipari\u015fler","Determine when the printing should be enabled.":"Yazd\u0131rman\u0131n ne zaman etkinle\u015ftirilmesi gerekti\u011fini belirleyin.","Printing Gateway":"Yazd\u0131rma A\u011f Ge\u00e7idi","Determine what is the gateway used for printing.":"Yazd\u0131rma i\u00e7in kullan\u0131lan a\u011f ge\u00e7idinin ne oldu\u011funu belirleyin.","Enable Cash Registers":"Yazar Kasalar\u0131 Etkinle\u015ftir","Determine if the POS will support cash registers.":"SATI\u015e'un yazar kasalar\u0131 destekleyip desteklemeyece\u011fini belirleyin.","Cashier Idle Counter":"Kasiyer Bo\u015fta Kalma Sayac\u0131","5 Minutes":"5 dakika","10 Minutes":"10 dakika","15 Minutes":"15 dakika","20 Minutes":"20 dakika","30 Minutes":"30 dakika","Selected after how many minutes the system will set the cashier as idle.":"Sistemin kasiyeri ka\u00e7 dakika sonra bo\u015fta tutaca\u011f\u0131 se\u00e7ilir.","Cash Disbursement":"Nakit \u00f6deme","Allow cash disbursement by the cashier.":"Kasiyer taraf\u0131ndan nakit \u00f6demeye izin ver.","Cash Registers":"Yazarkasalar","Keyboard Shortcuts":"Klavye k\u0131sayollar\u0131","Cancel Order":"Sipari\u015fi iptal et","Keyboard shortcut to cancel the current order.":"Mevcut sipari\u015fi iptal etmek i\u00e7in klavye k\u0131sayolu.","Keyboard shortcut to hold the current order.":"Mevcut sipari\u015fi tutmak i\u00e7in klavye k\u0131sayolu.","Keyboard shortcut to create a customer.":"M\u00fc\u015fteri olu\u015fturmak i\u00e7in klavye k\u0131sayolu.","Proceed Payment":"\u00d6demeye Devam Et","Keyboard shortcut to proceed to the payment.":"\u00d6demeye devam etmek i\u00e7in klavye k\u0131sayolu.","Open Shipping":"A\u00e7\u0131k Nakliye","Keyboard shortcut to define shipping details.":"Keyboard shortcut to define shipping details.","Open Note":"Notu A\u00e7","Keyboard shortcut to open the notes.":"Notlar\u0131 a\u00e7mak i\u00e7in klavye k\u0131sayolu.","Order Type Selector":"Sipari\u015f T\u00fcr\u00fc Se\u00e7ici","Keyboard shortcut to open the order type selector.":"Sipari\u015f t\u00fcr\u00fc se\u00e7iciyi a\u00e7mak i\u00e7in klavye k\u0131sayolu.","Toggle Fullscreen":"Tam ekrana ge\u00e7","Quick Search":"H\u0131zl\u0131 arama","Keyboard shortcut open the quick search popup.":"Klavye k\u0131sayolu, h\u0131zl\u0131 arama a\u00e7\u0131l\u0131r penceresini a\u00e7ar.","Amount Shortcuts":"Tutar K\u0131sayollar\u0131","VAT Type":"KDV T\u00fcr\u00fc","Determine the VAT type that should be used.":"Kullan\u0131lmas\u0131 gereken KDV t\u00fcr\u00fcn\u00fc belirleyin.","Flat Rate":"Sabit fiyat","Flexible Rate":"Esnek Oran","Products Vat":"\u00dcr\u00fcnler KDV","Products & Flat Rate":"\u00dcr\u00fcnler ve Sabit Fiyat","Products & Flexible Rate":"\u00dcr\u00fcnler ve Esnek Fiyat","Define the tax group that applies to the sales.":"Sat\u0131\u015flar i\u00e7in ge\u00e7erli olan vergi grubunu tan\u0131mlay\u0131n.","Define how the tax is computed on sales.":"Verginin sat\u0131\u015flarda nas\u0131l hesapland\u0131\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","VAT Settings":"KDV Ayarlar\u0131","Enable Email Reporting":"E-posta Raporlamas\u0131n\u0131 Etkinle\u015ftir","Determine if the reporting should be enabled globally.":"Raporlaman\u0131n global olarak etkinle\u015ftirilip etkinle\u015ftirilmeyece\u011fini belirleyin.","Supplies":"Gere\u00e7ler","Public Name":"Genel Ad","Define what is the user public name. If not provided, the username is used instead.":"Define what is the user public name. If not provided, the username is used instead.","Enable Workers":"\u00c7al\u0131\u015fanlar\u0131 Etkinle\u015ftir","Test":"\u00d6l\u00e7ek","Current Week":"Bu hafta","Previous Week":"\u00d6nceki hafta","There is no migrations to perform for the module \"%s\"":"Mod\u00fcl i\u00e7in ger\u00e7ekle\u015ftirilecek ge\u00e7i\u015f yok \"%s\"","The module migration has successfully been performed for the module \"%s\"":"Mod\u00fcl ge\u00e7i\u015fi, mod\u00fcl i\u00e7in ba\u015far\u0131yla ger\u00e7ekle\u015ftirildi \"%s\"","Sales By Payment Types":"\u00d6deme T\u00fcrlerine G\u00f6re Sat\u0131\u015flar","Provide a report of the sales by payment types, for a specific period.":"Belirli bir d\u00f6nem i\u00e7in \u00f6deme t\u00fcrlerine g\u00f6re sat\u0131\u015flar\u0131n bir raporunu sa\u011flay\u0131n.","Sales By Payments":"\u00d6deme T\u00fcrlerine G\u00f6re Sat\u0131\u015flar","Order Settings":"Sipari\u015f Ayarlar\u0131","Define the order name.":"Sipari\u015f ad\u0131n\u0131 tan\u0131mlay\u0131n.","Define the date of creation of the order.":"Sipari\u015fin olu\u015fturulma tarihini tan\u0131mlay\u0131n.","Total Refunds":"Toplam Geri \u00d6deme","Clients Registered":"M\u00fc\u015fteriler Kay\u0131tl\u0131","Commissions":"Komisyonlar","Processing Status":"\u0130\u015fleme Durumu","Refunded Products":"\u0130ade Edilen \u00dcr\u00fcnler","The product price has been updated.":"\u00dcr\u00fcn fiyat\u0131 g\u00fcncellenmi\u015ftir.","The editable price feature is disabled.":"D\u00fczenlenebilir fiyat \u00f6zelli\u011fi devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","Order Refunds":"Sipari\u015f \u0130adeleri","Product Price":"\u00dcr\u00fcn fiyat\u0131","Unable to proceed":"Devam edilemiyor","Partially paid orders are disabled.":"K\u0131smen \u00f6denen sipari\u015fler devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","An order is currently being processed.":"\u015eu anda bir sipari\u015f i\u015fleniyor.","Log out":"\u00c7\u0131k\u0131\u015f Yap","Refund receipt":"Geri \u00f6deme makbuzu","Recompute":"yeniden hesapla","Sort Results":"Sonu\u00e7lar\u0131 S\u0131rala","Using Quantity Ascending":"Artan Miktar Kullan\u0131m\u0131","Using Quantity Descending":"Azalan Miktar Kullan\u0131m\u0131","Using Sales Ascending":"Artan Sat\u0131\u015flar\u0131 Kullanma","Using Sales Descending":"Azalan Sat\u0131\u015f\u0131 Kullanma","Using Name Ascending":"Artan Ad Kullan\u0131m\u0131","Using Name Descending":"Azalan Ad Kullan\u0131m\u0131","Progress":"\u0130leri","Discounts":"indirimler","An invalid date were provided. Make sure it a prior date to the actual server date.":"Ge\u00e7ersiz bir tarih sa\u011fland\u0131. Ger\u00e7ek sunucu tarihinden \u00f6nceki bir tarih oldu\u011fundan emin olun.","Computing report from %s...":"Hesaplama raporu %s...","The demo has been enabled.":"Demo etkinle\u015ftirildi.","Refund Receipt":"Geri \u00d6deme Makbuzu","Codabar":"Codabar","Code 128":"Code 128","Code 39":"Code 39","Code 11":"Code 11","UPC A":"UPC A","UPC E":"UPC E","Store Dashboard":"Ma\u011faza Panosu","Cashier Dashboard":"Kasiyer Panosu","Default Dashboard":"Varsay\u0131lan G\u00f6sterge Tablosu","%s has been processed, %s has not been processed.":"%s \u0130\u015flendi, %s \u0130\u015flenmedi.","Order Refund Receipt — %s":"Sipari\u015f \u0130ade Makbuzu — %s","Provides an overview over the best products sold during a specific period.":"Belirli bir d\u00f6nemde sat\u0131lan en iyi \u00fcr\u00fcnler hakk\u0131nda genel bir bak\u0131\u015f sa\u011flar.","The report will be computed for the current year.":"Rapor cari y\u0131l i\u00e7in hesaplanacak.","Unknown report to refresh.":"Yenilenecek bilinmeyen rapor.","Report Refreshed":"Rapor Yenilendi","The yearly report has been successfully refreshed for the year \"%s\".":"Y\u0131ll\u0131k rapor, y\u0131l i\u00e7in ba\u015far\u0131yla yenilendi \"%s\".","Countable":"Say\u0131labilir","Piece":"Piece","GST":"GST","SGST":"SGST","CGST":"CGST","Sample Procurement %s":"\u00d6rnek Tedarik %s","generated":"olu\u015fturulan","Not Available":"M\u00fcsait de\u011fil","The report has been computed successfully.":"Rapor ba\u015far\u0131yla hesapland\u0131.","Create a customer":"M\u00fc\u015fteri olu\u015ftur","Credit":"Kredi","Debit":"Bor\u00e7","All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.":"Bu kategoriye ba\u011fl\u0131 t\u00fcm varl\u0131klar ya bir \"credit\" or \"debit\" nakit ak\u0131\u015f\u0131 ge\u00e7mi\u015fine.","Account":"Hesap","Provide the accounting number for this category.":"Bu kategori i\u00e7in muhasebe numaras\u0131n\u0131 sa\u011flay\u0131n.","Accounting":"Muhasebe","Procurement Cash Flow Account":"Sat\u0131nalma Nakit Ak\u0131\u015f Hesab\u0131","Sale Cash Flow Account":"Sat\u0131\u015f Nakit Ak\u0131\u015f Hesab\u0131","Sales Refunds Account":"Sat\u0131\u015f \u0130ade Hesab\u0131","Stock return for spoiled items will be attached to this account":"Bozulan \u00fcr\u00fcnlerin stok iadesi bu hesaba eklenecektir.","The reason has been updated.":"Nedeni g\u00fcncellendi.","You must select a customer before applying a coupon.":"Kupon uygulamadan \u00f6nce bir m\u00fc\u015fteri se\u00e7melisiniz.","No coupons for the selected customer...":"Se\u00e7ilen m\u00fc\u015fteri i\u00e7in kupon yok...","Use Coupon":"Kupon Kullan","Use Customer ?":"M\u00fc\u015fteriyi Kullan ?","No customer is selected. Would you like to proceed with this customer ?":"Hi\u00e7bir m\u00fc\u015fteri se\u00e7ilmedi. Bu m\u00fc\u015fteriyle devam etmek ister misiniz ?","Change Customer ?":"M\u00fc\u015fteriyi De\u011fi\u015ftir ?","Would you like to assign this customer to the ongoing order ?":"Bu m\u00fc\u015fteriyi devam eden sipari\u015fe atamak ister misiniz ?","Product \/ Service":"\u00dcr\u00fcn \/ Hizmet","An error has occurred while computing the product.":"\u00dcr\u00fcn hesaplan\u0131rken bir hata olu\u015ftu.","Provide a unique name for the product.":"\u00dcr\u00fcn i\u00e7in benzersiz bir ad sa\u011flay\u0131n.","Define what is the sale price of the item.":"\u00d6\u011fenin sat\u0131\u015f fiyat\u0131n\u0131n ne oldu\u011funu tan\u0131mlay\u0131n.","Set the quantity of the product.":"\u00dcr\u00fcn\u00fcn miktar\u0131n\u0131 ayarlay\u0131n.","Define what is tax type of the item.":"\u00d6\u011fenin vergi t\u00fcr\u00fcn\u00fcn ne oldu\u011funu tan\u0131mlay\u0131n.","Choose the tax group that should apply to the item.":"Kaleme uygulanmas\u0131 gereken vergi grubunu se\u00e7in.","Assign a unit to the product.":"\u00dcr\u00fcne bir birim atama.","Some products has been added to the cart. Would youl ike to discard this order ?":"Sepete baz\u0131 \u00fcr\u00fcnler eklendi. Bu sipari\u015fi iptal etmek istiyor musunuz ?","Customer Accounts List":"M\u00fc\u015fteri Hesaplar\u0131 Listesi","Display all customer accounts.":"T\u00fcm m\u00fc\u015fteri hesaplar\u0131n\u0131 g\u00f6r\u00fcnt\u00fcleyin.","No customer accounts has been registered":"Kay\u0131tl\u0131 m\u00fc\u015fteri hesab\u0131 yok","Add a new customer account":"Yeni bir m\u00fc\u015fteri hesab\u0131 ekleyin","Create a new customer account":"Yeni bir m\u00fc\u015fteri hesab\u0131 olu\u015fturun","Register a new customer account and save it.":"Yeni bir m\u00fc\u015fteri hesab\u0131 kaydedin ve kaydedin.","Edit customer account":"M\u00fc\u015fteri hesab\u0131n\u0131 d\u00fczenle","Modify Customer Account.":"M\u00fc\u015fteri Hesab\u0131n\u0131 De\u011fi\u015ftir.","Return to Customer Accounts":"M\u00fc\u015fteri Hesaplar\u0131na Geri D\u00f6n","This will be ignored.":"Bu g\u00f6z ard\u0131 edilecek.","Define the amount of the transaction":"\u0130\u015flem tutar\u0131n\u0131 tan\u0131mlay\u0131n","Define what operation will occurs on the customer account.":"M\u00fc\u015fteri hesab\u0131nda hangi i\u015flemin ger\u00e7ekle\u015fece\u011fini tan\u0131mlay\u0131n.","Provider Procurements List":"Sa\u011flay\u0131c\u0131 Tedarik Listesi","Display all provider procurements.":"T\u00fcm sa\u011flay\u0131c\u0131 tedariklerini g\u00f6ster.","No provider procurements has been registered":"Hi\u00e7bir sa\u011flay\u0131c\u0131 al\u0131m\u0131 kaydedilmedi","Add a new provider procurement":"Yeni bir sa\u011flay\u0131c\u0131 tedariki ekle","Create a new provider procurement":"Yeni bir sa\u011flay\u0131c\u0131 tedari\u011fi olu\u015fturun","Register a new provider procurement and save it.":"Yeni bir sa\u011flay\u0131c\u0131 tedariki kaydedin ve kaydedin.","Edit provider procurement":"Sa\u011flay\u0131c\u0131 tedarikini d\u00fczenle","Modify Provider Procurement.":"Sa\u011flay\u0131c\u0131 Tedarikini De\u011fi\u015ftir.","Return to Provider Procurements":"Sa\u011flay\u0131c\u0131 Tedariklerine D\u00f6n","Delivered On":"Zaman\u0131nda teslim edildi","Items":"\u00dcr\u00fcnler","Displays the customer account history for %s":"i\u00e7in m\u00fc\u015fteri hesab\u0131 ge\u00e7mi\u015fini g\u00f6r\u00fcnt\u00fcler. %s","Procurements by \"%s\"":"Tedarikler taraf\u0131ndan\"%s\"","Crediting":"Kredi","Deducting":"Kesinti","Order Payment":"Sipari\u015f \u00f6deme","Order Refund":"Sipari\u015f \u0130adesi","Unknown Operation":"Bilinmeyen \u0130\u015flem","Unnamed Product":"\u0130simsiz \u00dcr\u00fcn","Bubble":"Kabarc\u0131k","Ding":"Ding","Pop":"Pop","Cash Sound":"Nakit Ses","Sale Complete Sound":"Sat\u0131\u015f Komple Ses","New Item Audio":"Yeni \u00d6\u011fe Ses","The sound that plays when an item is added to the cart.":"Sepete bir \u00fcr\u00fcn eklendi\u011finde \u00e7\u0131kan ses.","Howdy, {name}":"Merhaba, {name}","Would you like to perform the selected bulk action on the selected entries ?":"Se\u00e7ilen giri\u015flerde se\u00e7ilen toplu i\u015flemi ger\u00e7ekle\u015ftirmek ister misiniz ?","The payment to be made today is less than what is expected.":"Bug\u00fcn yap\u0131lacak \u00f6deme beklenenden az.","Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.":"Varsay\u0131lan m\u00fc\u015fteri se\u00e7ilemiyor. G\u00f6r\u00fcn\u00fc\u015fe g\u00f6re m\u00fc\u015fteri art\u0131k yok. Ayarlarda varsay\u0131lan m\u00fc\u015fteriyi de\u011fi\u015ftirmeyi d\u00fc\u015f\u00fcn\u00fcn.","How to change database configuration":"Veritaban\u0131 yap\u0131land\u0131rmas\u0131 nas\u0131l de\u011fi\u015ftirilir","Common Database Issues":"Ortak Veritaban\u0131 Sorunlar\u0131","Setup":"Kur","Query Exception":"Sorgu \u0130stisnas\u0131","The category products has been refreshed":"Kategori \u00fcr\u00fcnleri yenilendi","The requested customer cannot be found.":"\u0130stenen m\u00fc\u015fteri bulunamad\u0131.","Filters":"filtreler","Has Filters":"Filtreleri Var","N\/D":"N\/D","Range Starts":"Aral\u0131k Ba\u015flang\u0131c\u0131","Range Ends":"Aral\u0131k Biti\u015fi","Search Filters":"Arama Filtreleri","Clear Filters":"Filtreleri Temizle","Use Filters":"Filtreleri Kullan","No rewards available the selected customer...":"Se\u00e7ilen m\u00fc\u015fteri i\u00e7in \u00f6d\u00fcl yok...","Unable to load the report as the timezone is not set on the settings.":"Ayarlarda saat dilimi ayarlanmad\u0131\u011f\u0131ndan rapor y\u00fcklenemiyor.","There is no product to display...":"G\u00f6sterilecek \u00fcr\u00fcn yok...","Method Not Allowed":"izinsiz metod","Documentation":"belgeler","Module Version Mismatch":"Mod\u00fcl S\u00fcr\u00fcm\u00fc Uyu\u015fmazl\u0131\u011f\u0131","Define how many time the coupon has been used.":"Kuponun ka\u00e7 kez kullan\u0131ld\u0131\u011f\u0131n\u0131 tan\u0131mlay\u0131n.","Define the maximum usage possible for this coupon.":"Bu kupon i\u00e7in m\u00fcmk\u00fcn olan maksimum kullan\u0131m\u0131 tan\u0131mlay\u0131n.","Restrict the orders by the creation date.":"Sipari\u015fleri olu\u015fturma tarihine g\u00f6re s\u0131n\u0131rlay\u0131n.","Created Between":"Aras\u0131nda Olu\u015fturuldu","Restrict the orders by the payment status.":"Sipari\u015fleri \u00f6deme durumuna g\u00f6re s\u0131n\u0131rlay\u0131n.","Due With Payment":"Vadeli \u00d6deme","Restrict the orders by the author.":"Yazar\u0131n sipari\u015flerini k\u0131s\u0131tla.","Restrict the orders by the customer.":"M\u00fc\u015fteri taraf\u0131ndan sipari\u015fleri k\u0131s\u0131tlay\u0131n.","Customer Phone":"M\u00fc\u015fteri Telefonu","Restrict orders using the customer phone number.":"M\u00fc\u015fteri telefon numaras\u0131n\u0131 kullanarak sipari\u015fleri k\u0131s\u0131tlay\u0131n.","Restrict the orders to the cash registers.":"Sipari\u015fleri yazar kasalarla s\u0131n\u0131rland\u0131r\u0131n.","Low Quantity":"D\u00fc\u015f\u00fck Miktar","Which quantity should be assumed low.":"Hangi miktar d\u00fc\u015f\u00fck kabul edilmelidir?.","Stock Alert":"Stok Uyar\u0131s\u0131","See Products":"\u00dcr\u00fcnleri G\u00f6r","Provider Products List":"Sa\u011flay\u0131c\u0131 \u00dcr\u00fcnler Listesi","Display all Provider Products.":"T\u00fcm Sa\u011flay\u0131c\u0131 \u00dcr\u00fcnlerini g\u00f6r\u00fcnt\u00fcleyin.","No Provider Products has been registered":"Hi\u00e7bir Sa\u011flay\u0131c\u0131 \u00dcr\u00fcn\u00fc kaydedilmedi","Add a new Provider Product":"Yeni bir Sa\u011flay\u0131c\u0131 \u00dcr\u00fcn Ekle","Create a new Provider Product":"Yeni bir Sa\u011flay\u0131c\u0131 \u00dcr\u00fcn olu\u015fturun","Register a new Provider Product and save it.":"Yeni bir Sa\u011flay\u0131c\u0131 \u00dcr\u00fcn kaydedin ve kaydedin.","Edit Provider Product":"Sa\u011flay\u0131c\u0131 \u00dcr\u00fcn\u00fcn\u00fc D\u00fczenle","Modify Provider Product.":"Sa\u011flay\u0131c\u0131 \u00dcr\u00fcn\u00fcn\u00fc De\u011fi\u015ftir.","Return to Provider Products":"Sa\u011flay\u0131c\u0131 \u00dcr\u00fcnlere D\u00f6n","Clone":"Klon","Would you like to clone this role ?":"Bu rol\u00fc klonlamak ister misiniz? ?","Incompatibility Exception":"Uyumsuzluk \u0130stisnas\u0131","The requested file cannot be downloaded or has already been downloaded.":"\u0130stenen dosya indirilemiyor veya zaten indirilmi\u015f.","Low Stock Report":"D\u00fc\u015f\u00fck Stok Raporu","Low Stock Alert":"D\u00fc\u015f\u00fck Stok Uyar\u0131s\u0131","The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ":"\"%s\" mod\u00fcl\u00fc, \"%s\" ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 gereken minimum s\u00fcr\u00fcmde olmad\u0131\u011f\u0131 i\u00e7in devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131 \"%s\". ","The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ":"\"%s\" mod\u00fcl\u00fc, \"%s\" ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 \u00f6nerilen \"%s\" d\u0131\u015f\u0131ndaki bir s\u00fcr\u00fcmde oldu\u011fundan devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","Clone of \"%s\"":"Klonu \"%s\"","The role has been cloned.":"Rol klonland\u0131.","Merge Products On Receipt\/Invoice":"Fi\u015fteki\/Faturadaki \u00dcr\u00fcnleri Birle\u015ftir","All similar products will be merged to avoid a paper waste for the receipt\/invoice.":"Makbuz\/fatura i\u00e7in ka\u011f\u0131t israf\u0131n\u0131 \u00f6nlemek i\u00e7in t\u00fcm benzer \u00fcr\u00fcnler birle\u015ftirilecektir..","Define whether the stock alert should be enabled for this unit.":"Bu birim i\u00e7in stok uyar\u0131s\u0131n\u0131n etkinle\u015ftirilip etkinle\u015ftirilmeyece\u011fini tan\u0131mlay\u0131n.","All Refunds":"T\u00fcm Geri \u00d6demeler","No result match your query.":"Sorgunuzla e\u015fle\u015fen sonu\u00e7 yok.","Report Type":"Rapor t\u00fcr\u00fc","Categories Detailed":"Kategoriler Ayr\u0131nt\u0131l\u0131","Categories Summary":"Kategori \u00d6zeti","Allow you to choose the report type.":"Rapor t\u00fcr\u00fcn\u00fc se\u00e7menize izin verin.","Unknown":"Bilinmeyen","Not Authorized":"Yetkili de\u011fil","Creating customers has been explicitly disabled from the settings.":"M\u00fc\u015fteri olu\u015fturma, ayarlardan a\u00e7\u0131k\u00e7a devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","Sales Discounts":"Sat\u0131\u015f \u0130ndirimleri","Sales Taxes":"Sat\u0131\u015f vergileri","Birth Date":"do\u011fum tarihleri","Displays the customer birth date":"M\u00fc\u015fterinin do\u011fum tarihini g\u00f6r\u00fcnt\u00fcler","Sale Value":"Sat\u0131\u015f de\u011feri","Purchase Value":"Al\u0131m de\u011feri","Would you like to refresh this ?":"Bunu yenilemek ister misin ?","You cannot delete your own account.":"Kendi hesab\u0131n\u0131 silemezsin.","Sales Progress":"Sat\u0131\u015f \u0130lerlemesi","Procurement Refreshed":"Sat\u0131n Alma Yenilendi","The procurement \"%s\" has been successfully refreshed.":"Sat\u0131n alma \"%s\" ba\u015far\u0131yla yenilendi.","Partially Due":"K\u0131smen Vadeli","No payment type has been selected on the settings. Please check your POS features and choose the supported order type":"Ayarlarda herhangi bir \u00f6deme t\u00fcr\u00fc se\u00e7ilmedi. L\u00fctfen SATI\u015e \u00f6zelliklerinizi kontrol edin ve desteklenen sipari\u015f t\u00fcr\u00fcn\u00fc se\u00e7in","Read More":"Daha fazla oku","Wipe All":"T\u00fcm\u00fcn\u00fc Sil","Wipe Plus Grocery":"Wipe Plus Bakkal","Accounts List":"Hesap Listesi","Display All Accounts.":"T\u00fcm Hesaplar\u0131 G\u00f6r\u00fcnt\u00fcle.","No Account has been registered":"Hi\u00e7bir Hesap kay\u0131tl\u0131 de\u011fil","Add a new Account":"Yeni Hesap Ekle","Create a new Account":"Yeni bir hesap olu\u015ftur","Register a new Account and save it.":"Yeni bir Hesap a\u00e7\u0131n ve kaydedin.","Edit Account":"Hesab\u0131 d\u00fczenlemek","Modify An Account.":"Bir Hesab\u0131 De\u011fi\u015ftir.","Return to Accounts":"Hesaplara D\u00f6n","Accounts":"Hesaplar","Create Account":"Hesap Olu\u015ftur","Payment Method":"\u00d6deme \u015fekli","Before submitting the payment, choose the payment type used for that order.":"\u00d6demeyi g\u00f6ndermeden \u00f6nce, o sipari\u015f i\u00e7in kullan\u0131lan \u00f6deme t\u00fcr\u00fcn\u00fc se\u00e7in.","Select the payment type that must apply to the current order.":"Mevcut sipari\u015fe uygulanmas\u0131 gereken \u00f6deme t\u00fcr\u00fcn\u00fc se\u00e7in.","Payment Type":"\u00d6deme t\u00fcr\u00fc","Remove Image":"Resmi Kald\u0131r","This form is not completely loaded.":"Bu form tamamen y\u00fcklenmedi.","Updating":"G\u00fcncelleniyor","Updating Modules":"Mod\u00fcllerin G\u00fcncellenmesi","Return":"Geri","Credit Limit":"Kredi limiti","The request was canceled":"\u0130stek iptal edildi","Payment Receipt — %s":"\u00d6deme makbuzu — %s","Payment receipt":"\u00d6deme makbuzu","Current Payment":"Mevcut \u00d6deme","Total Paid":"Toplam \u00d6denen","Set what should be the limit of the purchase on credit.":"Kredili sat\u0131n alma limitinin ne olmas\u0131 gerekti\u011fini belirleyin.","Provide the customer email.":"M\u00fc\u015fteri e-postas\u0131n\u0131 sa\u011flay\u0131n.","Priority":"\u00d6ncelik","Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".":"\u00d6deme emrini tan\u0131mlay\u0131n. Say\u0131 ne kadar d\u00fc\u015f\u00fckse, \u00f6deme a\u00e7\u0131l\u0131r penceresinde ilk o g\u00f6r\u00fcnt\u00fclenecektir. ba\u015flamal\u0131\"0\".","Mode":"Mod","Choose what mode applies to this demo.":"Bu demo i\u00e7in hangi modun uygulanaca\u011f\u0131n\u0131 se\u00e7in.","Set if the sales should be created.":"Sat\u0131\u015flar\u0131n olu\u015fturulup olu\u015fturulmayaca\u011f\u0131n\u0131 ayarlay\u0131n.","Create Procurements":"Tedarik Olu\u015ftur","Will create procurements.":"Sat\u0131n alma olu\u015ftur.","Sales Account":"Sat\u0131\u015f hesab\u0131","Procurements Account":"Tedarik Hesab\u0131","Sale Refunds Account":"Sat\u0131\u015f \u0130ade Hesab\u0131t","Spoiled Goods Account":"Bozulmu\u015f Mal Hesab\u0131","Customer Crediting Account":"M\u00fc\u015fteri Kredi Hesab\u0131","Customer Debiting Account":"M\u00fc\u015fteri Bor\u00e7land\u0131rma Hesab\u0131","Unable to find the requested account type using the provided id.":"Sa\u011flanan kimlik kullan\u0131larak istenen hesap t\u00fcr\u00fc bulunamad\u0131.","You cannot delete an account type that has transaction bound.":"\u0130\u015flem s\u0131n\u0131r\u0131 olan bir hesap t\u00fcr\u00fcn\u00fc silemezsiniz.","The account type has been deleted.":"Hesap t\u00fcr\u00fc silindi.","The account has been created.":"Hesap olu\u015fturuldu.","Customer Credit Account":"M\u00fc\u015fteri Kredi Hesab\u0131","Customer Debit Account":"M\u00fc\u015fteri Bor\u00e7 Hesab\u0131","Register Cash-In Account":"Nakit Hesab\u0131 Kaydolun","Register Cash-Out Account":"Nakit \u00c7\u0131k\u0131\u015f Hesab\u0131 Kaydolun","Require Valid Email":"Ge\u00e7erli E-posta \u0130ste","Will for valid unique email for every customer.":"Her m\u00fc\u015fteri i\u00e7in ge\u00e7erli benzersiz e-posta i\u00e7in Will.","Choose an option":"Bir se\u00e7enek belirleyin","Update Instalment Date":"Taksit Tarihini G\u00fcncelle","Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.":"Bu taksiti bug\u00fcn vadesi olarak i\u015faretlemek ister misiniz? Onaylarsan\u0131z taksit \u00f6dendi olarak i\u015faretlenecektir.","Search for products.":"\u00dcr\u00fcnleri ara.","Toggle merging similar products.":"Benzer \u00fcr\u00fcnleri birle\u015ftirmeyi a\u00e7\/kapat.","Toggle auto focus.":"Otomatik odaklamay\u0131 a\u00e7\/kapat.","Filter User":"Kullan\u0131c\u0131y\u0131 Filtrele","All Users":"T\u00fcm kullan\u0131c\u0131lar","No user was found for proceeding the filtering.":"Filtrelemeye devam edecek kullan\u0131c\u0131 bulunamad\u0131.","available":"Mevcut","No coupons applies to the cart.":"Sepete kupon uygulanmaz.","Selected":"Se\u00e7ildi","An error occurred while opening the order options":"Sipari\u015f se\u00e7enekleri a\u00e7\u0131l\u0131rken bir hata olu\u015ftu","There is no instalment defined. Please set how many instalments are allowed for this order":"Tan\u0131mlanm\u0131\u015f bir taksit yoktur. L\u00fctfen bu sipari\u015f i\u00e7in ka\u00e7 taksite izin verilece\u011fini ayarlay\u0131n","Select Payment Gateway":"\u00d6deme A\u011f Ge\u00e7idini Se\u00e7in","Gateway":"\u00d6deme Y\u00f6ntemi","No tax is active":"Hi\u00e7bir vergi etkin de\u011fil","Unable to delete a payment attached to the order.":"Sipari\u015fe eklenmi\u015f bir \u00f6deme silinemiyor.","The discount has been set to the cart subtotal.":"\u0130ndirim, al\u0131\u015fveri\u015f sepeti ara toplam\u0131na ayarland\u0131.","Order Deletion":"Sipari\u015f Silme","The current order will be deleted as no payment has been made so far.":"\u015eu ana kadar herhangi bir \u00f6deme yap\u0131lmad\u0131\u011f\u0131 i\u00e7in mevcut sipari\u015f silinecek.","Void The Order":"Sipari\u015fi \u0130ptal Et","Unable to void an unpaid order.":"\u00d6denmemi\u015f bir sipari\u015f iptal edilemiyor.","Environment Details":"\u00c7evre Ayr\u0131nt\u0131lar\u0131","Properties":"\u00d6zellikler","Extensions":"Uzant\u0131lar","Configurations":"Konfig\u00fcrasyonlar","Learn More":"Daha fazla bilgi edin","Search Products...":"\u00fcr\u00fcnleri ara...","No results to show.":"G\u00f6sterilecek sonu\u00e7 yok.","Start by choosing a range and loading the report.":"Bir aral\u0131k se\u00e7ip raporu y\u00fckleyerek ba\u015flay\u0131n.","Invoice Date":"Fatura tarihi","Initial Balance":"Ba\u015flang\u0131\u00e7 Bakiyesi","New Balance":"Kalan Bakiye","Transaction Type":"\u0130\u015flem tipi","Unchanged":"De\u011fi\u015fmemi\u015f","Define what roles applies to the user":"Kullan\u0131c\u0131 i\u00e7in hangi rollerin ge\u00e7erli oldu\u011funu tan\u0131mlay\u0131n","Not Assigned":"Atanmad\u0131","This value is already in use on the database.":"Bu de\u011fer veritaban\u0131nda zaten kullan\u0131l\u0131yor.","This field should be checked.":"Bu alan kontrol edilmelidir.","This field must be a valid URL.":"Bu alan ge\u00e7erli bir URL olmal\u0131d\u0131r.","This field is not a valid email.":"Bu alan ge\u00e7erli bir e-posta de\u011fil.","If you would like to define a custom invoice date.":"\u00d6zel bir fatura tarihi tan\u0131mlamak istiyorsan\u0131z.","Theme":"Tema","Dark":"Karanl\u0131k","Light":"Ayd\u0131nl\u0131k","Define what is the theme that applies to the dashboard.":"G\u00f6sterge tablosu i\u00e7in ge\u00e7erli olan teman\u0131n ne oldu\u011funu tan\u0131mlay\u0131n.","Unable to delete this resource as it has %s dependency with %s item.":"%s \u00f6\u011fesiyle %s ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 oldu\u011fu i\u00e7in bu kaynak silinemiyor.","Unable to delete this resource as it has %s dependency with %s items.":"%s \u00f6\u011feyle %s ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 oldu\u011fu i\u00e7in bu kaynak silinemiyor.","Make a new procurement.":"Yeni bir sat\u0131n alma yapmak.","About":"Hakk\u0131nda","Details about the environment.":"\u00c7evreyle ilgili ayr\u0131nt\u0131lar.","Core Version":"\u00c7ekirdek S\u00fcr\u00fcm","PHP Version":"PHP S\u00fcr\u00fcm\u00fc","Mb String Enabled":"Mb Dizisi Etkin","Zip Enabled":"Zip Etkin","Curl Enabled":"K\u0131vr\u0131lma Etkin","Math Enabled":"Matematik Etkin","XML Enabled":"XML Etkin","XDebug Enabled":"XDebug Etkin","File Upload Enabled":"Dosya Y\u00fckleme Etkinle\u015ftirildi","File Upload Size":"Dosya Y\u00fckleme Boyutu","Post Max Size":"G\u00f6nderi Maks Boyutu","Max Execution Time":"Maksimum Y\u00fcr\u00fctme S\u00fcresi","Memory Limit":"Bellek S\u0131n\u0131r\u0131","Administrator":"Y\u00f6netici","Store Administrator":"Ma\u011faza Y\u00f6neticisi","Store Cashier":"Ma\u011faza kasiyer","User":"Kullan\u0131c\u0131","Incorrect Authentication Plugin Provided.":"Yanl\u0131\u015f Kimlik Do\u011frulama Eklentisi Sa\u011fland\u0131.","Require Unique Phone":"Benzersiz Telefon Gerektir","Every customer should have a unique phone number.":"Her m\u00fc\u015fterinin benzersiz bir telefon numaras\u0131 olmal\u0131d\u0131r.","Define the default theme.":"Varsay\u0131lan temay\u0131 tan\u0131mlay\u0131n.","Merge Similar Items":"Benzer \u00d6\u011feleri Birle\u015ftir","Will enforce similar products to be merged from the POS.":"Benzer \u00fcr\u00fcnlerin SATI\u015e'tan birle\u015ftirilmesini zorunlu k\u0131lacak.","Toggle Product Merge":"\u00dcr\u00fcn Birle\u015ftirmeyi A\u00e7\/Kapat","Will enable or disable the product merging.":"\u00dcr\u00fcn birle\u015ftirmeyi etkinle\u015ftirecek veya devre d\u0131\u015f\u0131 b\u0131rakacak.","Your system is running in production mode. You probably need to build the assets":"Sisteminiz \u00fcretim modunda \u00e7al\u0131\u015f\u0131yor. Muhtemelen varl\u0131klar\u0131 olu\u015fturman\u0131z gerekir","Your system is in development mode. Make sure to build the assets.":"Sisteminiz geli\u015ftirme modunda. Varl\u0131klar\u0131 olu\u015fturdu\u011funuzdan emin olun.","Unassigned":"Atanmam\u0131\u015f","Display all product stock flow.":"T\u00fcm \u00fcr\u00fcn stok ak\u0131\u015f\u0131n\u0131 g\u00f6ster.","No products stock flow has been registered":"Hi\u00e7bir \u00fcr\u00fcn stok ak\u0131\u015f\u0131 kaydedilmedi","Add a new products stock flow":"Yeni \u00fcr\u00fcn stok ak\u0131\u015f\u0131 ekleyin","Create a new products stock flow":"Yeni bir \u00fcr\u00fcn stok ak\u0131\u015f\u0131 olu\u015fturun","Register a new products stock flow and save it.":"Yeni bir \u00fcr\u00fcn stok ak\u0131\u015f\u0131 kaydedin ve kaydedin.","Edit products stock flow":"\u00dcr\u00fcn stok ak\u0131\u015f\u0131n\u0131 d\u00fczenle","Modify Globalproducthistorycrud.":"Globalproducthistorycrud'u de\u011fi\u015ftirin.","Initial Quantity":"\u0130lk Miktar","New Quantity":"Yeni Miktar","No Dashboard":"G\u00f6sterge Tablosu Yok","Not Found Assets":"Bulunamayan Varl\u0131klar","Stock Flow Records":"Stok Ak\u0131\u015f Kay\u0131tlar\u0131","The user attributes has been updated.":"Kullan\u0131c\u0131 \u00f6zellikleri g\u00fcncellendi.","Laravel Version":"Laravel S\u00fcr\u00fcm\u00fc","There is a missing dependency issue.":"Eksik bir ba\u011f\u0131ml\u0131l\u0131k sorunu var.","The Action You Tried To Perform Is Not Allowed.":"Yapmaya \u00c7al\u0131\u015ft\u0131\u011f\u0131n\u0131z Eyleme \u0130zin Verilmiyor.","Unable to locate the assets.":"Varl\u0131klar bulunam\u0131yor.","All the customers has been transferred to the new group %s.":"T\u00fcm m\u00fc\u015fteriler yeni gruba transfer edildi %s.","The request method is not allowed.":"\u0130stek y\u00f6ntemine izin verilmiyor.","A Database Exception Occurred.":"Bir Veritaban\u0131 \u0130stisnas\u0131 Olu\u015ftu.","An error occurred while validating the form.":"Form do\u011frulan\u0131rken bir hata olu\u015ftu.","Enter":"Girmek","Search...":"Arama...","Confirm Your Action":"\u0130\u015fleminizi Onaylay\u0131n","The processing status of the order will be changed. Please confirm your action.":"Sipari\u015fin i\u015fleme durumu de\u011fi\u015ftirilecektir. L\u00fctfen i\u015fleminizi onaylay\u0131n.","The delivery status of the order will be changed. Please confirm your action.":"Sipari\u015fin teslimat durumu de\u011fi\u015ftirilecektir. L\u00fctfen i\u015fleminizi onaylay\u0131n.","Would you like to delete this product ?":"Bu \u00fcr\u00fcn\u00fc silmek istiyor musunuz?","Unable to hold an order which payment status has been updated already.":"\u00d6deme durumu zaten g\u00fcncellenmi\u015f bir sipari\u015f bekletilemez.","Unable to change the price mode. This feature has been disabled.":"Fiyat modu de\u011fi\u015ftirilemiyor. Bu \u00f6zellik devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","Enable WholeSale Price":"Toptan Sat\u0131\u015f Fiyat\u0131n\u0131 Etkinle\u015ftir","Would you like to switch to wholesale price ?":"Toptan fiyata ge\u00e7mek ister misiniz?","Enable Normal Price":"Normal Fiyat\u0131 Etkinle\u015ftir","Would you like to switch to normal price ?":"Normal fiyata ge\u00e7mek ister misiniz?","Search products...":"\u00dcr\u00fcnleri ara...","Set Sale Price":"Sat\u0131\u015f Fiyat\u0131n\u0131 Belirle","Remove":"Kald\u0131rmak","No product are added to this group.":"Bu gruba \u00fcr\u00fcn eklenmedi.","Delete Sub item":"Alt \u00f6\u011feyi sil","Would you like to delete this sub item?":"Bu alt \u00f6\u011feyi silmek ister misiniz?","Unable to add a grouped product.":"Grupland\u0131r\u0131lm\u0131\u015f bir \u00fcr\u00fcn eklenemiyor.","Choose The Unit":"Birimi Se\u00e7in","Stock Report":"Stok Raporu","Wallet Amount":"C\u00fczdan Tutar\u0131","Wallet History":"C\u00fczdan Ge\u00e7mi\u015fi","Transaction":"\u0130\u015flem","No History...":"Tarih Yok...","Removing":"Kald\u0131rma","Refunding":"geri \u00f6deme","Unknow":"bilinmiyor","Skip Instalments":"Taksitleri Atla","Define the product type.":"\u00dcr\u00fcn t\u00fcr\u00fcn\u00fc tan\u0131mlay\u0131n.","Dynamic":"Dinamik","In case the product is computed based on a percentage, define the rate here.":"\u00dcr\u00fcn\u00fcn bir y\u00fczdeye g\u00f6re hesaplanmas\u0131 durumunda oran\u0131 burada tan\u0131mlay\u0131n.","Before saving this order, a minimum payment of {amount} is required":"Bu sipari\u015fi kaydetmeden \u00f6nce minimum {amount} \u00f6demeniz gerekiyor","Initial Payment":"\u0130lk \u00f6deme","In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?":"Devam edebilmek i\u00e7in, se\u00e7ilen \u00f6deme t\u00fcr\u00fc \"{paymentType}\" i\u00e7in {amount} tutar\u0131nda bir ilk \u00f6deme yap\u0131lmas\u0131 gerekiyor. Devam etmek ister misiniz?","June":"Haziran","Search Customer...":"M\u00fc\u015fteri Ara...","Due Amount":"\u00d6denecek mebla\u011f","Wallet Balance":"C\u00fczdan Bakiyesi","Total Orders":"Toplam Sipari\u015fler","What slug should be used ? [Q] to quit.":"Hangi s\u00fcm\u00fckl\u00fc b\u00f6cek kullan\u0131lmal\u0131d\u0131r? [Q] \u00e7\u0131kmak i\u00e7in.","\"%s\" is a reserved class name":"\"%s\" ayr\u0131lm\u0131\u015f bir s\u0131n\u0131f ad\u0131d\u0131r","The migration file has been successfully forgotten for the module %s.":"%s mod\u00fcl\u00fc i\u00e7in ta\u015f\u0131ma dosyas\u0131 ba\u015far\u0131yla unutuldu.","%s products where updated.":"%s \u00fcr\u00fcnleri g\u00fcncellendi.","Previous Amount":"\u00d6nceki Tutar","Next Amount":"Sonraki Tutar","Restrict the records by the creation date.":"Kay\u0131tlar\u0131 olu\u015fturma tarihine g\u00f6re s\u0131n\u0131rlay\u0131n.","Restrict the records by the author.":"Kay\u0131tlar\u0131 yazar taraf\u0131ndan k\u0131s\u0131tlay\u0131n.","Grouped Product":"Grupland\u0131r\u0131lm\u0131\u015f \u00dcr\u00fcn","Groups":"Gruplar","Choose Group":"Grup Se\u00e7","Grouped":"grupland\u0131r\u0131lm\u0131\u015f","An error has occurred":"Bir hata olu\u015ftu","Unable to proceed, the submitted form is not valid.":"Devam edilemiyor, g\u00f6nderilen form ge\u00e7erli de\u011fil.","No activation is needed for this account.":"Bu hesap i\u00e7in aktivasyon gerekli de\u011fildir.","Invalid activation token.":"Ge\u00e7ersiz etkinle\u015ftirme jetonu.","The expiration token has expired.":"Sona erme jetonunun s\u00fcresi doldu.","Your account is not activated.":"Hesab\u0131n\u0131z aktif de\u011fil.","Unable to change a password for a non active user.":"Etkin olmayan bir kullan\u0131c\u0131 i\u00e7in parola de\u011fi\u015ftirilemiyor.","Unable to submit a new password for a non active user.":"Aktif olmayan bir kullan\u0131c\u0131 i\u00e7in yeni bir \u015fifre g\u00f6nderilemiyor.","Unable to delete an entry that no longer exists.":"Art\u0131k var olmayan bir giri\u015f silinemiyor.","Provides an overview of the products stock.":"\u00dcr\u00fcn sto\u011funa genel bir bak\u0131\u015f sa\u011flar.","Customers Statement":"M\u00fc\u015fteri Bildirimi","Display the complete customer statement.":"Tam m\u00fc\u015fteri beyan\u0131n\u0131 g\u00f6r\u00fcnt\u00fcleyin.","The recovery has been explicitly disabled.":"Kurtarma a\u00e7\u0131k\u00e7a devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","The registration has been explicitly disabled.":"Kay\u0131t a\u00e7\u0131k\u00e7a devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","The entry has been successfully updated.":"Giri\u015f ba\u015far\u0131yla g\u00fcncellendi.","A similar module has been found":"Benzer bir mod\u00fcl bulundu","A grouped product cannot be saved without any sub items.":"Grupland\u0131r\u0131lm\u0131\u015f bir \u00fcr\u00fcn, herhangi bir alt \u00f6\u011fe olmadan kaydedilemez.","A grouped product cannot contain grouped product.":"Grupland\u0131r\u0131lm\u0131\u015f bir \u00fcr\u00fcn, grupland\u0131r\u0131lm\u0131\u015f \u00fcr\u00fcn i\u00e7eremez.","The subitem has been saved.":"Alt \u00f6\u011fe kaydedildi.","The %s is already taken.":"%s zaten al\u0131nm\u0131\u015f.","Allow Wholesale Price":"Toptan Sat\u0131\u015f Fiyat\u0131na \u0130zin Ver","Define if the wholesale price can be selected on the POS.":"POS'ta toptan sat\u0131\u015f fiyat\u0131n\u0131n se\u00e7ilip se\u00e7ilemeyece\u011fini tan\u0131mlay\u0131n.","Allow Decimal Quantities":"Ondal\u0131k Miktarlara \u0130zin Ver","Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.":"Miktarlar i\u00e7in ondal\u0131k basama\u011fa izin vermek i\u00e7in say\u0131sal klavyeyi de\u011fi\u015ftirir. Yaln\u0131zca \"varsay\u0131lan\" say\u0131sal tu\u015f tak\u0131m\u0131 i\u00e7in.","Numpad":"say\u0131sal tu\u015f tak\u0131m\u0131","Advanced":"Geli\u015fmi\u015f","Will set what is the numpad used on the POS screen.":"POS ekran\u0131nda kullan\u0131lan say\u0131sal tu\u015f tak\u0131m\u0131n\u0131n ne oldu\u011funu ayarlayacakt\u0131r.","Force Barcode Auto Focus":"Barkod Otomatik Odaklamay\u0131 Zorla","Will permanently enable barcode autofocus to ease using a barcode reader.":"Barkod okuyucu kullanmay\u0131 kolayla\u015ft\u0131rmak i\u00e7in barkod otomatik odaklamay\u0131 kal\u0131c\u0131 olarak etkinle\u015ftirir.","Keyboard shortcut to toggle fullscreen.":"Tam ekran aras\u0131nda ge\u00e7i\u015f yapmak i\u00e7in klavye k\u0131sayolu.","Tax Included":"Vergi dahil","Unable to proceed, more than one product is set as featured":"Devam edilemiyor, birden fazla \u00fcr\u00fcn \u00f6ne \u00e7\u0131kan olarak ayarland\u0131","The transaction was deleted.":"\u0130\u015flem silindi.","Database connection was successful.":"Veritaban\u0131 ba\u011flant\u0131s\u0131 ba\u015far\u0131l\u0131 oldu.","The products taxes were computed successfully.":"\u00dcr\u00fcn vergileri ba\u015far\u0131yla hesapland\u0131.","Tax Excluded":"Vergi Hari\u00e7","Set Paid":"\u00dccretli olarak ayarla","Would you like to mark this procurement as paid?":"Bu sat\u0131n alma i\u015flemini \u00f6dendi olarak i\u015faretlemek ister misiniz?","Unidentified Item":"Tan\u0131mlanamayan \u00d6\u011fe","Non-existent Item":"Varolmayan \u00d6\u011fe","You cannot change the status of an already paid procurement.":"Halihaz\u0131rda \u00f6denmi\u015f bir tedarikin durumunu de\u011fi\u015ftiremezsiniz.","The procurement payment status has been changed successfully.":"Tedarik \u00f6deme durumu ba\u015far\u0131yla de\u011fi\u015ftirildi.","The procurement has been marked as paid.":"Sat\u0131n alma \u00f6dendi olarak i\u015faretlendi.","Show Price With Tax":"Vergili Fiyat\u0131 G\u00f6ster","Will display price with tax for each products.":"Her \u00fcr\u00fcn i\u00e7in vergili fiyat\u0131 g\u00f6sterecektir.","Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".":"\"${action.component}\" bile\u015feni y\u00fcklenemiyor. Bile\u015fenin \"nsExtraComponents\" i\u00e7in kay\u0131tl\u0131 oldu\u011fundan emin olun.","Tax Inclusive":"Vergi Dahil","Apply Coupon":"kuponu onayla","Not applicable":"Uygulanamaz","Normal":"Normal","Product Taxes":"\u00dcr\u00fcn Vergileri","The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.":"Bu \u00fcr\u00fcne ba\u011fl\u0131 birim eksik veya atanmam\u0131\u015f. L\u00fctfen bu \u00fcr\u00fcn i\u00e7in \"Birim\" sekmesini inceleyin.","X Days After Month Starts":"X Days After Month Starts","On Specific Day":"On Specific Day","Unknown Occurance":"Unknown Occurance","Please provide a valid value.":"Please provide a valid value.","Done":"Done","Would you like to delete \"%s\"?":"Would you like to delete \"%s\"?","Unable to find a module having as namespace \"%s\"":"Unable to find a module having as namespace \"%s\"","Api File":"Api File","Migrations":"Migrations","Determine Until When the coupon is valid.":"Determine Until When the coupon is valid.","Customer Groups":"Customer Groups","Assigned To Customer Group":"Assigned To Customer Group","Only the customers who belongs to the selected groups will be able to use the coupon.":"Only the customers who belongs to the selected groups will be able to use the coupon.","Assigned To Customers":"Assigned To Customers","Only the customers selected will be ale to use the coupon.":"Only the customers selected will be ale to use the coupon.","Unable to save the coupon as one of the selected customer no longer exists.":"Unable to save the coupon as one of the selected customer no longer exists.","Unable to save the coupon as one of the selected customer group no longer exists.":"Unable to save the coupon as one of the selected customer group no longer exists.","Unable to save the coupon as one of the customers provided no longer exists.":"Unable to save the coupon as one of the customers provided no longer exists.","Unable to save the coupon as one of the provided customer group no longer exists.":"Unable to save the coupon as one of the provided customer group no longer exists.","Coupon Order Histories List":"Coupon Order Histories List","Display all coupon order histories.":"Display all coupon order histories.","No coupon order histories has been registered":"No coupon order histories has been registered","Add a new coupon order history":"Add a new coupon order history","Create a new coupon order history":"Create a new coupon order history","Register a new coupon order history and save it.":"Register a new coupon order history and save it.","Edit coupon order history":"Edit coupon order history","Modify Coupon Order History.":"Modify Coupon Order History.","Return to Coupon Order Histories":"Return to Coupon Order Histories","Customer_coupon_id":"Customer_coupon_id","Order_id":"Order_id","Discount_value":"Discount_value","Minimum_cart_value":"Minimum_cart_value","Maximum_cart_value":"Maximum_cart_value","Limit_usage":"Limit_usage","Would you like to delete this?":"Would you like to delete this?","Usage History":"Usage History","Customer Coupon Histories List":"Customer Coupon Histories List","Display all customer coupon histories.":"Display all customer coupon histories.","No customer coupon histories has been registered":"No customer coupon histories has been registered","Add a new customer coupon history":"Add a new customer coupon history","Create a new customer coupon history":"Create a new customer coupon history","Register a new customer coupon history and save it.":"Register a new customer coupon history and save it.","Edit customer coupon history":"Edit customer coupon history","Modify Customer Coupon History.":"Modify Customer Coupon History.","Return to Customer Coupon Histories":"Return to Customer Coupon Histories","Last Name":"Last Name","Provide the customer last name":"Provide the customer last name","Provide the customer gender.":"Provide the customer gender.","Provide the billing first name.":"Provide the billing first name.","Provide the billing last name.":"Provide the billing last name.","Provide the shipping First Name.":"Provide the shipping First Name.","Provide the shipping Last Name.":"Provide the shipping Last Name.","Scheduled":"Scheduled","Set the scheduled date.":"Set the scheduled date.","Account Name":"Account Name","Provider last name if necessary.":"Provider last name if necessary.","Provide the user first name.":"Provide the user first name.","Provide the user last name.":"Provide the user last name.","Set the user gender.":"Set the user gender.","Set the user phone number.":"Set the user phone number.","Set the user PO Box.":"Set the user PO Box.","Provide the billing First Name.":"Provide the billing First Name.","Last name":"Last name","Group Name":"Group Name","Delete a user":"Delete a user","Activated":"Activated","type":"type","User Group":"User Group","Scheduled On":"Scheduled On","Biling":"Biling","API Token":"API Token","Your Account has been successfully created.":"Your Account has been successfully created.","Unable to export if there is nothing to export.":"Unable to export if there is nothing to export.","%s Coupons":"%s Coupons","%s Coupon History":"%s Coupon History","\"%s\" Record History":"\"%s\" Record History","The media name was successfully updated.":"The media name was successfully updated.","The role was successfully assigned.":"The role was successfully assigned.","The role were successfully assigned.":"The role were successfully assigned.","Unable to identifier the provided role.":"Unable to identifier the provided role.","Good Condition":"Good Condition","Cron Disabled":"Cron Disabled","Task Scheduling Disabled":"Task Scheduling Disabled","NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.":"NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.","The email \"%s\" is already used for another customer.":"The email \"%s\" is already used for another customer.","The provided coupon cannot be loaded for that customer.":"The provided coupon cannot be loaded for that customer.","The provided coupon cannot be loaded for the group assigned to the selected customer.":"The provided coupon cannot be loaded for the group assigned to the selected customer.","Unable to use the coupon %s as it has expired.":"Unable to use the coupon %s as it has expired.","Unable to use the coupon %s at this moment.":"Unable to use the coupon %s at this moment.","Small Box":"Small Box","Box":"Box","%s products were freed":"%s products were freed","Restoring cash flow from paid orders...":"Restoring cash flow from paid orders...","Restoring cash flow from refunded orders...":"Restoring cash flow from refunded orders...","%s on %s directories were deleted.":"%s on %s directories were deleted.","%s on %s files were deleted.":"%s on %s files were deleted.","First Day Of Month":"First Day Of Month","Last Day Of Month":"Last Day Of Month","Month middle Of Month":"Month middle Of Month","{day} after month starts":"{day} after month starts","{day} before month ends":"{day} before month ends","Every {day} of the month":"Every {day} of the month","Days":"Days","Make sure set a day that is likely to be executed":"Make sure set a day that is likely to be executed","Invalid Module provided.":"Invalid Module provided.","The module was \"%s\" was successfully installed.":"The module was \"%s\" was successfully installed.","The modules \"%s\" was deleted successfully.":"The modules \"%s\" was deleted successfully.","Unable to locate a module having as identifier \"%s\".":"Unable to locate a module having as identifier \"%s\".","All migration were executed.":"All migration were executed.","Unknown Product Status":"Unknown Product Status","Member Since":"Member Since","Total Customers":"Total Customers","The widgets was successfully updated.":"The widgets was successfully updated.","The token was successfully created":"The token was successfully created","The token has been successfully deleted.":"The token has been successfully deleted.","Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".":"Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".","Will display all cashiers who performs well.":"Will display all cashiers who performs well.","Will display all customers with the highest purchases.":"Will display all customers with the highest purchases.","Expense Card Widget":"Expense Card Widget","Will display a card of current and overwall expenses.":"Will display a card of current and overwall expenses.","Incomplete Sale Card Widget":"Incomplete Sale Card Widget","Will display a card of current and overall incomplete sales.":"Will display a card of current and overall incomplete sales.","Orders Chart":"Orders Chart","Will display a chart of weekly sales.":"Will display a chart of weekly sales.","Orders Summary":"Orders Summary","Will display a summary of recent sales.":"Will display a summary of recent sales.","Will display a profile widget with user stats.":"Will display a profile widget with user stats.","Sale Card Widget":"Sale Card Widget","Will display current and overall sales.":"Will display current and overall sales.","Return To Calendar":"Return To Calendar","Thr":"Thr","The left range will be invalid.":"The left range will be invalid.","The right range will be invalid.":"The right range will be invalid.","Click here to add widgets":"Click here to add widgets","Choose Widget":"Choose Widget","Select with widget you want to add to the column.":"Select with widget you want to add to the column.","Unamed Tab":"Unamed Tab","An error unexpected occured while printing.":"An error unexpected occured while printing.","and":"and","{date} ago":"{date} ago","In {date}":"In {date}","An unexpected error occured.":"An unexpected error occured.","Warning":"Warning","Change Type":"Change Type","Save Expense":"Save Expense","No configuration were choosen. Unable to proceed.":"No configuration were choosen. Unable to proceed.","Conditions":"Conditions","By proceeding the current for and all your entries will be cleared. Would you like to proceed?":"By proceeding the current for and all your entries will be cleared. Would you like to proceed?","No modules matches your search term.":"No modules matches your search term.","Press \"\/\" to search modules":"Press \"\/\" to search modules","No module has been uploaded yet.":"No module has been uploaded yet.","{module}":"{module}","Would you like to delete \"{module}\"? All data created by the module might also be deleted.":"Would you like to delete \"{module}\"? All data created by the module might also be deleted.","Search Medias":"Search Medias","Bulk Select":"Bulk Select","Press "\/" to search permissions":"Press "\/" to search permissions","SKU, Barcode, Name":"SKU, Barcode, Name","About Token":"About Token","Save Token":"Save Token","Generated Tokens":"Generated Tokens","Created":"Created","Last Use":"Last Use","Never":"Never","Expires":"Expires","Revoke":"Revoke","Token Name":"Token Name","This will be used to identifier the token.":"This will be used to identifier the token.","Unable to proceed, the form is not valid.":"Unable to proceed, the form is not valid.","An unexpected error occured":"An unexpected error occured","An Error Has Occured":"An Error Has Occured","Febuary":"Febuary","Configure":"Configure","Unable to add the product":"Unable to add the product","No result to result match the search value provided.":"No result to result match the search value provided.","This QR code is provided to ease authentication on external applications.":"This QR code is provided to ease authentication on external applications.","Copy And Close":"Copy And Close","An error has occured":"An error has occured","Recents Orders":"Recents Orders","Unamed Page":"Unamed Page","Assignation":"Assignation","Incoming Conversion":"Incoming Conversion","Outgoing Conversion":"Outgoing Conversion","Unknown Action":"Unknown Action","Direct Transaction":"Direct Transaction","Recurring Transaction":"Recurring Transaction","Entity Transaction":"Entity Transaction","Scheduled Transaction":"Scheduled Transaction","Unknown Type (%s)":"Unknown Type (%s)","What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.":"What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.","What is the full model name. eg: App\\Models\\Order ? [Q] to quit.":"What is the full model name. eg: App\\Models\\Order ? [Q] to quit.","What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.":"What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.","Unsupported argument provided: \"%s\"":"Unsupported argument provided: \"%s\"","The authorization token can\\'t be changed manually.":"The authorization token can\\'t be changed manually.","Translation process is complete for the module %s !":"Translation process is complete for the module %s !","%s migration(s) has been deleted.":"%s migration(s) has been deleted.","The command has been created for the module \"%s\"!":"The command has been created for the module \"%s\"!","The controller has been created for the module \"%s\"!":"The controller has been created for the module \"%s\"!","The event has been created at the following path \"%s\"!":"The event has been created at the following path \"%s\"!","The listener has been created on the path \"%s\"!":"The listener has been created on the path \"%s\"!","A request with the same name has been found !":"A request with the same name has been found !","Unable to find a module having the identifier \"%s\".":"Unable to find a module having the identifier \"%s\".","Unsupported reset mode.":"Unsupported reset mode.","You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.":"You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.","Unable to find a module having \"%s\" as namespace.":"Unable to find a module having \"%s\" as namespace.","A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.":"A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.","A new form class was created at the path \"%s\"":"A new form class was created at the path \"%s\"","Unable to proceed, looks like the database can\\'t be used.":"Unable to proceed, looks like the database can\\'t be used.","In which language would you like to install NexoPOS ?":"In which language would you like to install NexoPOS ?","You must define the language of installation.":"You must define the language of installation.","The value above which the current coupon can\\'t apply.":"The value above which the current coupon can\\'t apply.","Unable to save the coupon product as this product doens\\'t exists.":"Unable to save the coupon product as this product doens\\'t exists.","Unable to save the coupon category as this category doens\\'t exists.":"Unable to save the coupon category as this category doens\\'t exists.","Unable to save the coupon as this category doens\\'t exists.":"Unable to save the coupon as this category doens\\'t exists.","You\\re not allowed to do that.":"You\\re not allowed to do that.","Crediting (Add)":"Crediting (Add)","Refund (Add)":"Refund (Add)","Deducting (Remove)":"Deducting (Remove)","Payment (Remove)":"Payment (Remove)","The assigned default customer group doesn\\'t exist or is not defined.":"The assigned default customer group doesn\\'t exist or is not defined.","Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0":"Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0","You\\'re not allowed to do this operation":"You\\'re not allowed to do this operation","If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.":"If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.","Convert Unit":"Convert Unit","The unit that is selected for convertion by default.":"The unit that is selected for convertion by default.","COGS":"COGS","Used to define the Cost of Goods Sold.":"Used to define the Cost of Goods Sold.","Visible":"Visible","Define whether the unit is available for sale.":"Define whether the unit is available for sale.","Product unique name. If it\\' variation, it should be relevant for that variation":"Product unique name. If it\\' variation, it should be relevant for that variation","The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.":"The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.","The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.":"The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.","Auto COGS":"Auto COGS","Unknown Type: %s":"Unknown Type: %s","Shortage":"Shortage","Overage":"Overage","Transactions List":"Transactions List","Display all transactions.":"Display all transactions.","No transactions has been registered":"No transactions has been registered","Add a new transaction":"Add a new transaction","Create a new transaction":"Create a new transaction","Register a new transaction and save it.":"Register a new transaction and save it.","Edit transaction":"Edit transaction","Modify Transaction.":"Modify Transaction.","Return to Transactions":"Return to Transactions","determine if the transaction is effective or not. Work for recurring and not recurring transactions.":"determine if the transaction is effective or not. Work for recurring and not recurring transactions.","Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.":"Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.","Transaction Account":"Transaction Account","Assign the transaction to an account430":"Assign the transaction to an account430","Is the value or the cost of the transaction.":"Is the value or the cost of the transaction.","If set to Yes, the transaction will trigger on defined occurrence.":"If set to Yes, the transaction will trigger on defined occurrence.","Define how often this transaction occurs":"Define how often this transaction occurs","Define what is the type of the transactions.":"Define what is the type of the transactions.","Trigger":"Trigger","Would you like to trigger this expense now?":"Would you like to trigger this expense now?","Transactions History List":"Transactions History List","Display all transaction history.":"Display all transaction history.","No transaction history has been registered":"No transaction history has been registered","Add a new transaction history":"Add a new transaction history","Create a new transaction history":"Create a new transaction history","Register a new transaction history and save it.":"Register a new transaction history and save it.","Edit transaction history":"Edit transaction history","Modify Transactions history.":"Modify Transactions history.","Return to Transactions History":"Return to Transactions History","Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.":"Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.","Set the limit that can\\'t be exceeded by the user.":"Set the limit that can\\'t be exceeded by the user.","Oops, We\\'re Sorry!!!":"Oops, We\\'re Sorry!!!","Class: %s":"Class: %s","There\\'s is mismatch with the core version.":"There\\'s is mismatch with the core version.","You\\'re not authenticated.":"You\\'re not authenticated.","An error occured while performing your request.":"An error occured while performing your request.","A mismatch has occured between a module and it\\'s dependency.":"A mismatch has occured between a module and it\\'s dependency.","You\\'re not allowed to see that page.":"You\\'re not allowed to see that page.","Post Too Large":"Post Too Large","The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini":"The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini","This field does\\'nt have a valid value.":"This field does\\'nt have a valid value.","Describe the direct transaction.":"Describe the direct transaction.","If set to yes, the transaction will take effect immediately and be saved on the history.":"If set to yes, the transaction will take effect immediately and be saved on the history.","Assign the transaction to an account.":"Assign the transaction to an account.","set the value of the transaction.":"set the value of the transaction.","Further details on the transaction.":"Further details on the transaction.","Describe the direct transactions.":"Describe the direct transactions.","set the value of the transactions.":"set the value of the transactions.","The transactions will be multipled by the number of user having that role.":"The transactions will be multipled by the number of user having that role.","Create Sales (needs Procurements)":"Create Sales (needs Procurements)","Set when the transaction should be executed.":"Set when the transaction should be executed.","The addresses were successfully updated.":"The addresses were successfully updated.","Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.":"Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.","The register doesn\\'t have an history.":"The register doesn\\'t have an history.","Unable to check a register session history if it\\'s closed.":"Unable to check a register session history if it\\'s closed.","Register History For : %s":"Register History For : %s","Can\\'t delete a category having sub categories linked to it.":"Can\\'t delete a category having sub categories linked to it.","Unable to proceed. The request doesn\\'t provide enough data which could be handled":"Unable to proceed. The request doesn\\'t provide enough data which could be handled","Unable to load the CRUD resource : %s.":"Unable to load the CRUD resource : %s.","Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods":"Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods","The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.":"The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.","The crud columns exceed the maximum column that can be exported (27)":"The crud columns exceed the maximum column that can be exported (27)","This link has expired.":"This link has expired.","Account History : %s":"Account History : %s","Welcome — %s":"Welcome — %s","Upload and manage medias (photos).":"Upload and manage medias (photos).","The product which id is %s doesnt\\'t belong to the procurement which id is %s":"The product which id is %s doesnt\\'t belong to the procurement which id is %s","The refresh process has started. You\\'ll get informed once it\\'s complete.":"The refresh process has started. You\\'ll get informed once it\\'s complete.","The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".":"The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".","Stock History For %s":"Stock History For %s","Set":"Set","The unit is not set for the product \"%s\".":"The unit is not set for the product \"%s\".","The operation will cause a negative stock for the product \"%s\" (%s).":"The operation will cause a negative stock for the product \"%s\" (%s).","The adjustment quantity can\\'t be negative for the product \"%s\" (%s)":"The adjustment quantity can\\'t be negative for the product \"%s\" (%s)","%s\\'s Products":"%s\\'s Products","Transactions Report":"Transactions Report","Combined Report":"Combined Report","Provides a combined report for every transactions on products.":"Provides a combined report for every transactions on products.","Unable to initiallize the settings page. The identifier \"' . $identifier . '":"Unable to initiallize the settings page. The identifier \"' . $identifier . '","Shows all histories generated by the transaction.":"Shows all histories generated by the transaction.","Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.":"Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.","Create New Transaction":"Create New Transaction","Set direct, scheduled transactions.":"Set direct, scheduled transactions.","Update Transaction":"Update Transaction","The provided data aren\\'t valid":"The provided data aren\\'t valid","Welcome — NexoPOS":"Welcome — NexoPOS","You\\'re not allowed to see this page.":"You\\'re not allowed to see this page.","Your don\\'t have enough permission to perform this action.":"Your don\\'t have enough permission to perform this action.","You don\\'t have the necessary role to see this page.":"You don\\'t have the necessary role to see this page.","%s product(s) has low stock. Reorder those product(s) before it get exhausted.":"%s product(s) has low stock. Reorder those product(s) before it get exhausted.","Scheduled Transactions":"Scheduled Transactions","the transaction \"%s\" was executed as scheduled on %s.":"the transaction \"%s\" was executed as scheduled on %s.","Workers Aren\\'t Running":"Workers Aren\\'t Running","The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.":"The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.","Unable to remove the permissions \"%s\". It doesn\\'t exists.":"Unable to remove the permissions \"%s\". It doesn\\'t exists.","Unable to open \"%s\" *, as it\\'s not closed.":"Unable to open \"%s\" *, as it\\'s not closed.","Unable to open \"%s\" *, as it\\'s not opened.":"Unable to open \"%s\" *, as it\\'s not opened.","Unable to cashing on \"%s\" *, as it\\'s not opened.":"Unable to cashing on \"%s\" *, as it\\'s not opened.","Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.":"Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.","Unable to cashout on \"%s":"Unable to cashout on \"%s","Symbolic Links Missing":"Symbolic Links Missing","The Symbolic Links to the public directory is missing. Your medias might be broken and not display.":"The Symbolic Links to the public directory is missing. Your medias might be broken and not display.","Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.":"Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.","The requested module %s cannot be found.":"The requested module %s cannot be found.","The manifest.json can\\'t be located inside the module %s on the path: %s":"The manifest.json can\\'t be located inside the module %s on the path: %s","the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.":"the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.","Sorting is explicitely disabled for the column \"%s\".":"Sorting is explicitely disabled for the column \"%s\".","Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s":"Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s","Unable to find the customer using the provided id %s.":"Unable to find the customer using the provided id %s.","Not enough credits on the customer account. Requested : %s, Remaining: %s.":"Not enough credits on the customer account. Requested : %s, Remaining: %s.","The customer account doesn\\'t have enough funds to proceed.":"The customer account doesn\\'t have enough funds to proceed.","Unable to find a reference to the attached coupon : %s":"Unable to find a reference to the attached coupon : %s","You\\'re not allowed to use this coupon as it\\'s no longer active":"You\\'re not allowed to use this coupon as it\\'s no longer active","You\\'re not allowed to use this coupon it has reached the maximum usage allowed.":"You\\'re not allowed to use this coupon it has reached the maximum usage allowed.","Terminal A":"Terminal A","Terminal B":"Terminal B","%s link were deleted":"%s link were deleted","Unable to execute the following class callback string : %s":"Unable to execute the following class callback string : %s","%s — %s":"%s — %s","Transactions":"Transactions","Create Transaction":"Create Transaction","Stock History":"Stock History","Invoices":"Invoices","Failed to parse the configuration file on the following path \"%s\"":"Failed to parse the configuration file on the following path \"%s\"","No config.xml has been found on the directory : %s. This folder is ignored":"No config.xml has been found on the directory : %s. This folder is ignored","The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ":"The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ","Unable to upload this module as it\\'s older than the version installed":"Unable to upload this module as it\\'s older than the version installed","The migration file doens\\'t have a valid class name. Expected class : %s":"The migration file doens\\'t have a valid class name. Expected class : %s","Unable to locate the following file : %s":"Unable to locate the following file : %s","The migration file doens\\'t have a valid method name. Expected method : %s":"The migration file doens\\'t have a valid method name. Expected method : %s","The module %s cannot be enabled as his dependency (%s) is missing or not enabled.":"The module %s cannot be enabled as his dependency (%s) is missing or not enabled.","The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.":"The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.","An Error Occurred \"%s\": %s":"An Error Occurred \"%s\": %s","The order has been updated":"The order has been updated","The minimal payment of %s has\\'nt been provided.":"The minimal payment of %s has\\'nt been provided.","Unable to proceed as the order is already paid.":"Unable to proceed as the order is already paid.","The customer account funds are\\'nt enough to process the payment.":"The customer account funds are\\'nt enough to process the payment.","Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.","Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.","By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.":"By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.","You\\'re not allowed to make payments.":"You\\'re not allowed to make payments.","Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s":"Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s","Unknown Status (%s)":"Unknown Status (%s)","%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.":"%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.","Unable to find a reference of the provided coupon : %s":"Unable to find a reference of the provided coupon : %s","The procurement has been deleted. %s included stock record(s) has been deleted as well.":"The procurement has been deleted. %s included stock record(s) has been deleted as well.","Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.":"Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.","Unable to find the product using the provided id \"%s\"":"Unable to find the product using the provided id \"%s\"","Unable to procure the product \"%s\" as the stock management is disabled.":"Unable to procure the product \"%s\" as the stock management is disabled.","Unable to procure the product \"%s\" as it is a grouped product.":"Unable to procure the product \"%s\" as it is a grouped product.","The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item":"The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item","%s procurement(s) has recently been automatically procured.":"%s procurement(s) has recently been automatically procured.","The requested category doesn\\'t exists":"The requested category doesn\\'t exists","The category to which the product is attached doesn\\'t exists or has been deleted":"The category to which the product is attached doesn\\'t exists or has been deleted","Unable to create a product with an unknow type : %s":"Unable to create a product with an unknow type : %s","A variation within the product has a barcode which is already in use : %s.":"A variation within the product has a barcode which is already in use : %s.","A variation within the product has a SKU which is already in use : %s":"A variation within the product has a SKU which is already in use : %s","Unable to edit a product with an unknown type : %s":"Unable to edit a product with an unknown type : %s","The requested sub item doesn\\'t exists.":"The requested sub item doesn\\'t exists.","One of the provided product variation doesn\\'t include an identifier.":"One of the provided product variation doesn\\'t include an identifier.","The product\\'s unit quantity has been updated.":"The product\\'s unit quantity has been updated.","Unable to reset this variable product \"%s":"Unable to reset this variable product \"%s","Adjusting grouped product inventory must result of a create, update, delete sale operation.":"Adjusting grouped product inventory must result of a create, update, delete sale operation.","Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).":"Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).","Unsupported stock action \"%s\"":"Unsupported stock action \"%s\"","%s product(s) has been deleted.":"%s product(s) has been deleted.","%s products(s) has been deleted.":"%s products(s) has been deleted.","Unable to find the product, as the argument \"%s\" which value is \"%s":"Unable to find the product, as the argument \"%s\" which value is \"%s","You cannot convert unit on a product having stock management disabled.":"You cannot convert unit on a product having stock management disabled.","The source and the destination unit can\\'t be the same. What are you trying to do ?":"The source and the destination unit can\\'t be the same. What are you trying to do ?","There is no source unit quantity having the name \"%s\" for the item %s":"There is no source unit quantity having the name \"%s\" for the item %s","There is no destination unit quantity having the name %s for the item %s":"There is no destination unit quantity having the name %s for the item %s","The source unit and the destination unit doens\\'t belong to the same unit group.":"The source unit and the destination unit doens\\'t belong to the same unit group.","The group %s has no base unit defined":"The group %s has no base unit defined","The conversion of %s(%s) to %s(%s) was successful":"The conversion of %s(%s) to %s(%s) was successful","The product has been deleted.":"The product has been deleted.","An error occurred: %s.":"An error occurred: %s.","A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.":"A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.","Today\\'s Orders":"Today\\'s Orders","Today\\'s Sales":"Today\\'s Sales","Today\\'s Refunds":"Today\\'s Refunds","Today\\'s Customers":"Today\\'s Customers","The report will be generated. Try loading the report within few minutes.":"The report will be generated. Try loading the report within few minutes.","The database has been wiped out.":"The database has been wiped out.","No custom handler for the reset \"' . $mode . '\"":"No custom handler for the reset \"' . $mode . '\"","Unable to proceed. The parent tax doesn\\'t exists.":"Unable to proceed. The parent tax doesn\\'t exists.","A simple tax must not be assigned to a parent tax with the type \"simple":"A simple tax must not be assigned to a parent tax with the type \"simple","Created via tests":"Created via tests","The transaction has been successfully saved.":"The transaction has been successfully saved.","The transaction has been successfully updated.":"The transaction has been successfully updated.","Unable to find the transaction using the provided identifier.":"Unable to find the transaction using the provided identifier.","Unable to find the requested transaction using the provided id.":"Unable to find the requested transaction using the provided id.","The transction has been correctly deleted.":"The transction has been correctly deleted.","You cannot delete an account which has transactions bound.":"You cannot delete an account which has transactions bound.","The transaction account has been deleted.":"The transaction account has been deleted.","Unable to find the transaction account using the provided ID.":"Unable to find the transaction account using the provided ID.","The transaction account has been updated.":"The transaction account has been updated.","This transaction type can\\'t be triggered.":"This transaction type can\\'t be triggered.","The transaction has been successfully triggered.":"The transaction has been successfully triggered.","The transaction \"%s\" has been processed on day \"%s\".":"The transaction \"%s\" has been processed on day \"%s\".","The transaction \"%s\" has already been processed.":"The transaction \"%s\" has already been processed.","The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.":"The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.","The process has been correctly executed and all transactions has been processed.":"The process has been correctly executed and all transactions has been processed.","The process has been executed with some failures. %s\/%s process(es) has successed.":"The process has been executed with some failures. %s\/%s process(es) has successed.","Procurement : %s":"Procurement : %s","Procurement Liability : %s":"Procurement Liability : %s","Refunding : %s":"Refunding : %s","Spoiled Good : %s":"Spoiled Good : %s","Sale : %s":"Sale : %s","Liabilities Account":"Liabilities Account","Not found account type: %s":"Not found account type: %s","Refund : %s":"Refund : %s","Customer Account Crediting : %s":"Customer Account Crediting : %s","Customer Account Purchase : %s":"Customer Account Purchase : %s","Customer Account Deducting : %s":"Customer Account Deducting : %s","Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.":"Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.","The unit group %s doesn\\'t have a base unit":"The unit group %s doesn\\'t have a base unit","The system role \"Users\" can be retrieved.":"The system role \"Users\" can be retrieved.","The default role that must be assigned to new users cannot be retrieved.":"The default role that must be assigned to new users cannot be retrieved.","%s Second(s)":"%s Second(s)","Configure the accounting feature":"Configure the accounting feature","Define the symbol that indicate thousand. By default ":"Define the symbol that indicate thousand. By default ","Date Time Format":"Date Time Format","This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".":"This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".","Date TimeZone":"Date TimeZone","Determine the default timezone of the store. Current Time: %s":"Determine the default timezone of the store. Current Time: %s","Configure how invoice and receipts are used.":"Configure how invoice and receipts are used.","configure settings that applies to orders.":"configure settings that applies to orders.","Report Settings":"Report Settings","Configure the settings":"Configure the settings","Wipes and Reset the database.":"Wipes and Reset the database.","Supply Delivery":"Supply Delivery","Configure the delivery feature.":"Configure the delivery feature.","Configure how background operations works.":"Configure how background operations works.","Every procurement will be added to the selected transaction account":"Every procurement will be added to the selected transaction account","Every sales will be added to the selected transaction account":"Every sales will be added to the selected transaction account","Customer Credit Account (crediting)":"Customer Credit Account (crediting)","Every customer credit will be added to the selected transaction account":"Every customer credit will be added to the selected transaction account","Customer Credit Account (debitting)":"Customer Credit Account (debitting)","Every customer credit removed will be added to the selected transaction account":"Every customer credit removed will be added to the selected transaction account","Sales refunds will be attached to this transaction account":"Sales refunds will be attached to this transaction account","Stock Return Account (Spoiled Items)":"Stock Return Account (Spoiled Items)","Disbursement (cash register)":"Disbursement (cash register)","Transaction account for all cash disbursement.":"Transaction account for all cash disbursement.","Liabilities":"Liabilities","Transaction account for all liabilities.":"Transaction account for all liabilities.","You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.":"You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.","Show Tax Breakdown":"Show Tax Breakdown","Will display the tax breakdown on the receipt\/invoice.":"Will display the tax breakdown on the receipt\/invoice.","Available tags : ":"Available tags : ","{store_name}: displays the store name.":"{store_name}: displays the store name.","{store_email}: displays the store email.":"{store_email}: displays the store email.","{store_phone}: displays the store phone number.":"{store_phone}: displays the store phone number.","{cashier_name}: displays the cashier name.":"{cashier_name}: displays the cashier name.","{cashier_id}: displays the cashier id.":"{cashier_id}: displays the cashier id.","{order_code}: displays the order code.":"{order_code}: displays the order code.","{order_date}: displays the order date.":"{order_date}: displays the order date.","{order_type}: displays the order type.":"{order_type}: displays the order type.","{customer_email}: displays the customer email.":"{customer_email}: displays the customer email.","{shipping_first_name}: displays the shipping first name.":"{shipping_first_name}: displays the shipping first name.","{shipping_last_name}: displays the shipping last name.":"{shipping_last_name}: displays the shipping last name.","{shipping_phone}: displays the shipping phone.":"{shipping_phone}: displays the shipping phone.","{shipping_address_1}: displays the shipping address_1.":"{shipping_address_1}: displays the shipping address_1.","{shipping_address_2}: displays the shipping address_2.":"{shipping_address_2}: displays the shipping address_2.","{shipping_country}: displays the shipping country.":"{shipping_country}: displays the shipping country.","{shipping_city}: displays the shipping city.":"{shipping_city}: displays the shipping city.","{shipping_pobox}: displays the shipping pobox.":"{shipping_pobox}: displays the shipping pobox.","{shipping_company}: displays the shipping company.":"{shipping_company}: displays the shipping company.","{shipping_email}: displays the shipping email.":"{shipping_email}: displays the shipping email.","{billing_first_name}: displays the billing first name.":"{billing_first_name}: displays the billing first name.","{billing_last_name}: displays the billing last name.":"{billing_last_name}: displays the billing last name.","{billing_phone}: displays the billing phone.":"{billing_phone}: displays the billing phone.","{billing_address_1}: displays the billing address_1.":"{billing_address_1}: displays the billing address_1.","{billing_address_2}: displays the billing address_2.":"{billing_address_2}: displays the billing address_2.","{billing_country}: displays the billing country.":"{billing_country}: displays the billing country.","{billing_city}: displays the billing city.":"{billing_city}: displays the billing city.","{billing_pobox}: displays the billing pobox.":"{billing_pobox}: displays the billing pobox.","{billing_company}: displays the billing company.":"{billing_company}: displays the billing company.","{billing_email}: displays the billing email.":"{billing_email}: displays the billing email.","Available tags :":"Available tags :","Quick Product Default Unit":"Quick Product Default Unit","Set what unit is assigned by default to all quick product.":"Set what unit is assigned by default to all quick product.","Hide Exhausted Products":"Hide Exhausted Products","Will hide exhausted products from selection on the POS.":"Will hide exhausted products from selection on the POS.","Hide Empty Category":"Hide Empty Category","Category with no or exhausted products will be hidden from selection.":"Category with no or exhausted products will be hidden from selection.","Default Printing (web)":"Default Printing (web)","The amount numbers shortcuts separated with a \"|\".":"The amount numbers shortcuts separated with a \"|\".","No submit URL was provided":"No submit URL was provided","Sorting is explicitely disabled on this column":"Sorting is explicitely disabled on this column","An unpexpected error occured while using the widget.":"An unpexpected error occured while using the widget.","This field must be similar to \"{other}\"\"":"This field must be similar to \"{other}\"\"","This field must have at least \"{length}\" characters\"":"This field must have at least \"{length}\" characters\"","This field must have at most \"{length}\" characters\"":"This field must have at most \"{length}\" characters\"","This field must be different from \"{other}\"\"":"This field must be different from \"{other}\"\"","Search result":"Search result","Choose...":"Choose...","The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.":"The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.","+{count} other":"+{count} other","The selected print gateway doesn't support this type of printing.":"The selected print gateway doesn't support this type of printing.","millisecond| second| minute| hour| day| week| month| year| decade| century| millennium":"millisecond| second| minute| hour| day| week| month| year| decade| century| millennium","milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia":"milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia","An error occured":"An error occured","You\\'re about to delete selected resources. Would you like to proceed?":"You\\'re about to delete selected resources. Would you like to proceed?","See Error":"See Error","Your uploaded files will displays here.":"Your uploaded files will displays here.","Nothing to care about !":"Nothing to care about !","Would you like to bulk edit a system role ?":"Would you like to bulk edit a system role ?","Total :":"Total :","Remaining :":"Remaining :","Instalments:":"Instalments:","This instalment doesn\\'t have any payment attached.":"This instalment doesn\\'t have any payment attached.","You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?":"You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?","An error has occured while seleting the payment gateway.":"An error has occured while seleting the payment gateway.","You're not allowed to add a discount on the product.":"You're not allowed to add a discount on the product.","You're not allowed to add a discount on the cart.":"You're not allowed to add a discount on the cart.","Cash Register : {register}":"Cash Register : {register}","The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?":"The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?","You don't have the right to edit the purchase price.":"You don't have the right to edit the purchase price.","Dynamic product can\\'t have their price updated.":"Dynamic product can\\'t have their price updated.","You\\'re not allowed to edit the order settings.":"You\\'re not allowed to edit the order settings.","Looks like there is either no products and no categories. How about creating those first to get started ?":"Looks like there is either no products and no categories. How about creating those first to get started ?","Create Categories":"Create Categories","You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?":"You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?","An unexpected error has occured while loading the form. Please check the log or contact the support.":"An unexpected error has occured while loading the form. Please check the log or contact the support.","We were not able to load the units. Make sure there are units attached on the unit group selected.":"We were not able to load the units. Make sure there are units attached on the unit group selected.","The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?":"The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?","There shoulnd\\'t be more option than there are units.":"There shoulnd\\'t be more option than there are units.","Either Selling or Purchase unit isn\\'t defined. Unable to proceed.":"Either Selling or Purchase unit isn\\'t defined. Unable to proceed.","Select the procured unit first before selecting the conversion unit.":"Select the procured unit first before selecting the conversion unit.","Convert to unit":"Convert to unit","An unexpected error has occured":"An unexpected error has occured","Unable to add product which doesn\\'t unit quantities defined.":"Unable to add product which doesn\\'t unit quantities defined.","{product}: Purchase Unit":"{product}: Purchase Unit","The product will be procured on that unit.":"The product will be procured on that unit.","Unkown Unit":"Unkown Unit","Choose Tax":"Choose Tax","The tax will be assigned to the procured product.":"The tax will be assigned to the procured product.","Show Details":"Show Details","Hide Details":"Hide Details","Important Notes":"Important Notes","Stock Management Products.":"Stock Management Products.","Doesn\\'t work with Grouped Product.":"Doesn\\'t work with Grouped Product.","Convert":"Convert","Looks like no valid products matched the searched term.":"Looks like no valid products matched the searched term.","This product doesn't have any stock to adjust.":"This product doesn't have any stock to adjust.","Select Unit":"Select Unit","Select the unit that you want to adjust the stock with.":"Select the unit that you want to adjust the stock with.","A similar product with the same unit already exists.":"A similar product with the same unit already exists.","Select Procurement":"Select Procurement","Select the procurement that you want to adjust the stock with.":"Select the procurement that you want to adjust the stock with.","Select Action":"Select Action","Select the action that you want to perform on the stock.":"Select the action that you want to perform on the stock.","Would you like to remove the selected products from the table ?":"Would you like to remove the selected products from the table ?","Unit:":"Unit:","Operation:":"Operation:","Procurement:":"Procurement:","Reason:":"Reason:","Provided":"Provided","Not Provided":"Not Provided","Remove Selected":"Remove Selected","Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.":"Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.","You haven\\'t yet generated any token for your account. Create one to get started.":"You haven\\'t yet generated any token for your account. Create one to get started.","You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?":"You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?","Date Range : {date1} - {date2}":"Date Range : {date1} - {date2}","Document : Best Products":"Document : Best Products","By : {user}":"By : {user}","Range : {date1} — {date2}":"Range : {date1} — {date2}","Document : Sale By Payment":"Document : Sale By Payment","Document : Customer Statement":"Document : Customer Statement","Customer : {selectedCustomerName}":"Customer : {selectedCustomerName}","All Categories":"All Categories","All Units":"All Units","Date : {date}":"Date : {date}","Document : {reportTypeName}":"Document : {reportTypeName}","Threshold":"Threshold","Select Units":"Select Units","An error has occured while loading the units.":"An error has occured while loading the units.","An error has occured while loading the categories.":"An error has occured while loading the categories.","Document : Payment Type":"Document : Payment Type","Document : Profit Report":"Document : Profit Report","Filter by Category":"Filter by Category","Filter by Units":"Filter by Units","An error has occured while loading the categories":"An error has occured while loading the categories","An error has occured while loading the units":"An error has occured while loading the units","By Type":"By Type","By User":"By User","By Category":"By Category","All Category":"All Category","Document : Sale Report":"Document : Sale Report","Filter By Category":"Filter By Category","Allow you to choose the category.":"Allow you to choose the category.","No category was found for proceeding the filtering.":"No category was found for proceeding the filtering.","Document : Sold Stock Report":"Document : Sold Stock Report","Filter by Unit":"Filter by Unit","Limit Results By Categories":"Limit Results By Categories","Limit Results By Units":"Limit Results By Units","Generate Report":"Generate Report","Document : Combined Products History":"Document : Combined Products History","Ini. Qty":"Ini. Qty","Added Quantity":"Added Quantity","Add. Qty":"Add. Qty","Sold Quantity":"Sold Quantity","Sold Qty":"Sold Qty","Defective Quantity":"Defective Quantity","Defec. Qty":"Defec. Qty","Final Quantity":"Final Quantity","Final Qty":"Final Qty","No data available":"No data available","Document : Yearly Report":"Document : Yearly Report","The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.":"The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.","Unable to edit this transaction":"Unable to edit this transaction","This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.":"This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.","Save Transaction":"Save Transaction","While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.":"While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.","The transaction is about to be saved. Would you like to confirm your action ?":"The transaction is about to be saved. Would you like to confirm your action ?","Unable to load the transaction":"Unable to load the transaction","You cannot edit this transaction if NexoPOS cannot perform background requests.":"You cannot edit this transaction if NexoPOS cannot perform background requests.","MySQL is selected as database driver":"MySQL is selected as database driver","Please provide the credentials to ensure NexoPOS can connect to the database.":"Please provide the credentials to ensure NexoPOS can connect to the database.","Sqlite is selected as database driver":"Sqlite is selected as database driver","Make sure Sqlite module is available for PHP. Your database will be located on the database directory.":"Make sure Sqlite module is available for PHP. Your database will be located on the database directory.","Checking database connectivity...":"Checking database connectivity...","Driver":"Driver","Set the database driver":"Set the database driver","Hostname":"Hostname","Provide the database hostname":"Provide the database hostname","Username required to connect to the database.":"Username required to connect to the database.","The username password required to connect.":"The username password required to connect.","Database Name":"Database Name","Provide the database name. Leave empty to use default file for SQLite Driver.":"Provide the database name. Leave empty to use default file for SQLite Driver.","Database Prefix":"Database Prefix","Provide the database prefix.":"Provide the database prefix.","Port":"Port","Provide the hostname port.":"Provide the hostname port.","NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.":"NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.","Install":"Install","Application":"Application","That is the application name.":"That is the application name.","Provide the administrator username.":"Provide the administrator username.","Provide the administrator email.":"Provide the administrator email.","What should be the password required for authentication.":"What should be the password required for authentication.","Should be the same as the password above.":"Should be the same as the password above.","Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.":"Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.","Choose your language to get started.":"Choose your language to get started.","Remaining Steps":"Remaining Steps","Database Configuration":"Database Configuration","Application Configuration":"Application Configuration","Language Selection":"Language Selection","Select what will be the default language of NexoPOS.":"Select what will be the default language of NexoPOS.","In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.":"In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.","Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.":"Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.","Please report this message to the support : ":"Please report this message to the support : ","No refunds made so far. Good news right?":"No refunds made so far. Good news right?","Open Register : %s":"Open Register : %s","Loading Coupon For : ":"Loading Coupon For : ","This coupon requires products that aren\\'t available on the cart at the moment.":"This coupon requires products that aren\\'t available on the cart at the moment.","This coupon requires products that belongs to specific categories that aren\\'t included at the moment.":"This coupon requires products that belongs to specific categories that aren\\'t included at the moment.","Too many results.":"Too many results.","New Customer":"New Customer","Purchases":"Purchases","Owed":"Owed","Usage :":"Usage :","Code :":"Code :","Order Reference":"Order Reference","The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?":"The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?","{product} : Units":"{product} : Units","This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.":"This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.","Previewing :":"Previewing :","Search for options":"Search for options","The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.":"The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.","The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.":"The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.","The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.":"The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.","The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.":"The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.","Invalid Error Message":"Invalid Error Message","Unamed Settings Page":"Unamed Settings Page","Description of unamed setting page":"Description of unamed setting page","Text Field":"Text Field","This is a sample text field.":"This is a sample text field.","No description has been provided.":"No description has been provided.","You\\'re using NexoPOS %s<\/a>":"You\\'re using NexoPOS %s<\/a>","If you haven\\'t asked this, please get in touch with the administrators.":"If you haven\\'t asked this, please get in touch with the administrators.","A new user has registered to your store (%s) with the email %s.":"A new user has registered to your store (%s) with the email %s.","The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.":"The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.","Note: ":"Note: ","Inclusive Product Taxes":"Inclusive Product Taxes","Exclusive Product Taxes":"Exclusive Product Taxes","Condition:":"Condition:","Date : %s":"Date : %s","NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.":"NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.","Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.":"Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.","Retry":"Retry","If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.":"If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.","Compute Products":"Compute Products","Unammed Section":"Unammed Section","%s order(s) has recently been deleted as they have expired.":"%s order(s) has recently been deleted as they have expired.","%s products will be updated":"%s products will be updated","Procurement %s":"Procurement %s","You cannot assign the same unit to more than one selling unit.":"You cannot assign the same unit to more than one selling unit.","The quantity to convert can\\'t be zero.":"The quantity to convert can\\'t be zero.","The source unit \"(%s)\" for the product \"%s":"The source unit \"(%s)\" for the product \"%s","The conversion from \"%s\" will cause a decimal value less than one count of the destination unit \"%s\".":"The conversion from \"%s\" will cause a decimal value less than one count of the destination unit \"%s\".","{customer_first_name}: displays the customer first name.":"{customer_first_name}: displays the customer first name.","{customer_last_name}: displays the customer last name.":"{customer_last_name}: displays the customer last name.","No Unit Selected":"No Unit Selected","Unit Conversion : {product}":"Unit Conversion : {product}","Convert {quantity} available":"Convert {quantity} available","The quantity should be greater than 0":"The quantity should be greater than 0","The provided quantity can\\'t result in any convertion for unit \"{destination}\"":"The provided quantity can\\'t result in any convertion for unit \"{destination}\"","Conversion Warning":"Conversion Warning","Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?":"Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?","Confirm Conversion":"Confirm Conversion","You\\'re about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?":"You\\'re about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?","Conversion Successful":"Conversion Successful","The product {product} has been converted successfully.":"The product {product} has been converted successfully.","An error occured while converting the product {product}":"An error occured while converting the product {product}","The quantity has been set to the maximum available":"The quantity has been set to the maximum available","The product {product} has no base unit":"The product {product} has no base unit","Developper Section":"Developper Section","The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?":"The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?","An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s":"An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s"} \ No newline at end of file diff --git a/lang/vi.json b/lang/vi.json index 59d192475..ca7ef99c3 100644 --- a/lang/vi.json +++ b/lang/vi.json @@ -1 +1 @@ -{"displaying {perPage} on {items} items":"Hi\u1ec3n th\u1ecb {perPage} tr\u00ean {items} m\u1ee5c","The document has been generated.":"T\u00e0i li\u1ec7u \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","Unexpected error occurred.":"X\u1ea3y ra l\u1ed7i.","{entries} entries selected":"{entries} M\u1ee5c nh\u1eadp \u0111\u01b0\u1ee3c ch\u1ecdn","Download":"T\u1ea3i xu\u1ed1ng","Bulk Actions":"Th\u1ef1c hi\u1ec7n theo l\u00f4","Delivery":"Giao h\u00e0ng","Take Away":"Mang \u0111i","Unknown Type":"Ki\u1ec3u kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Pending":"Ch\u1edd","Ongoing":"Li\u00ean t\u1ee5c","Delivered":"G\u1eedi","Unknown Status":"Tr\u1ea1ng th\u00e1i kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Ready":"S\u1eb5n s\u00e0ng","Paid":"\u0110\u00e3 thanh to\u00e1n","Hold":"Gi\u1eef \u0111\u01a1n","Unpaid":"C\u00f4ng n\u1ee3","Partially Paid":"Thanh to\u00e1n m\u1ed9t ph\u1ea7n","Save Password":"L\u01b0u m\u1eadt kh\u1ea9u","Unable to proceed the form is not valid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh.","Submit":"X\u00e1c nh\u1eadn","Register":"\u0110\u0103ng k\u00fd","An unexpected error occurred.":"L\u1ed7i kh\u00f4ng x\u00e1c \u0111\u1ecbnh.","Best Cashiers":"Thu ng\u00e2n c\u00f3 doanh thu cao nh\u1ea5t","No result to display.":"Kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u \u0111\u1ec3 hi\u1ec3n th\u1ecb.","Well.. nothing to show for the meantime.":"Kh\u00f4ng c\u00f3 g\u00ec \u0111\u1ec3 hi\u1ec3n th\u1ecb.","Best Customers":"Kh\u00e1ch h\u00e0ng mua h\u00e0ng nhi\u1ec1u nh\u1ea5t","Well.. nothing to show for the meantime":"Kh\u00f4ng c\u00f3 g\u00ec \u0111\u1ec3 hi\u1ec3n th\u1ecb","Total Sales":"T\u1ed5ng doanh s\u1ed1","Today":"H\u00f4m nay","Incomplete Orders":"C\u00e1c \u0111\u01a1n ch\u01b0a ho\u00e0n th\u00e0nh","Expenses":"Chi ph\u00ed","Weekly Sales":"Doanh s\u1ed1 h\u00e0ng tu\u1ea7n","Week Taxes":"Ti\u1ec1n thu\u1ebf h\u00e0ng tu\u1ea7n","Net Income":"L\u1ee3i nhu\u1eadn","Week Expenses":"Chi ph\u00ed h\u00e0ng tu\u1ea7n","Order":"\u0110\u01a1n h\u00e0ng","Clear All":"X\u00f3a h\u1ebft","Confirm Your Action":"X\u00e1c nh\u1eadn thao t\u00e1c","Save":"L\u01b0u l\u1ea1i","The processing status of the order will be changed. Please confirm your action.":"Tr\u1ea1ng th\u00e1i c\u1ee7a \u0111\u01a1n \u0111\u1eb7t h\u00e0ng s\u1ebd \u0111\u01b0\u1ee3c thay \u0111\u1ed5i. Vui l\u00f2ng x\u00e1c nh\u1eadn.","Instalments":"Tr\u1ea3 g\u00f3p","Create":"T\u1ea1o","Add Instalment":"Th\u00eam ph\u01b0\u01a1ng th\u1ee9c tr\u1ea3 g\u00f3p","An unexpected error has occurred":"C\u00f3 l\u1ed7i x\u1ea3y ra","Store Details":"Chi ti\u1ebft c\u1eeda h\u00e0ng","Order Code":"M\u00e3 \u0111\u01a1n","Cashier":"Thu ng\u00e2n","Date":"Date","Customer":"Kh\u00e1ch h\u00e0ng","Type":"Lo\u1ea1i","Payment Status":"T\u00ecnh tr\u1ea1ng thanh to\u00e1n","Delivery Status":"T\u00ecnh tr\u1ea1ng giao h\u00e0ng","Billing Details":"Chi ti\u1ebft h\u00f3a \u0111\u01a1n","Shipping Details":"Chi ti\u1ebft giao h\u00e0ng","Product":"S\u1ea3n ph\u1ea9m","Unit Price":"\u0110\u01a1n gi\u00e1","Quantity":"S\u1ed1 l\u01b0\u1ee3ng","Discount":"Gi\u1ea3m gi\u00e1","Tax":"Thu\u1ebf","Total Price":"Gi\u00e1 t\u1ed5ng","Expiration Date":"Ng\u00e0y h\u1ebft h\u1ea1n","Sub Total":"T\u1ed5ng","Coupons":"Coupons","Shipping":"Giao h\u00e0ng","Total":"T\u1ed5ng ti\u1ec1n","Due":"Due","Change":"Tr\u1ea3 l\u1ea1i","No title is provided":"Kh\u00f4ng c\u00f3 ti\u00eau \u0111\u1ec1","SKU":"M\u00e3 v\u1eadt t\u01b0","Barcode":"M\u00e3 v\u1ea1ch","The product already exists on the table.":"S\u1ea3n ph\u1ea9m \u0111\u00e3 c\u00f3 tr\u00ean b\u00e0n.","The specified quantity exceed the available quantity.":"V\u01b0\u1ee3t qu\u00e1 s\u1ed1 l\u01b0\u1ee3ng c\u00f3 s\u1eb5n.","Unable to proceed as the table is empty.":"B\u00e0n tr\u1ed1ng.","More Details":"Th\u00f4ng tin chi ti\u1ebft","Useful to describe better what are the reasons that leaded to this adjustment.":"N\u00eau l\u00fd do \u0111i\u1ec1u ch\u1ec9nh.","Search":"T\u00ecm ki\u1ebfm","Unit":"\u0110\u01a1n v\u1ecb","Operation":"Ho\u1ea1t \u0111\u1ed9ng","Procurement":"Mua h\u00e0ng","Value":"Gi\u00e1 tr\u1ecb","Search and add some products":"T\u00ecm ki\u1ebfm v\u00e0 th\u00eam s\u1ea3n ph\u1ea9m","Proceed":"Ti\u1ebfn h\u00e0nh","An unexpected error occurred":"X\u1ea3y ra l\u1ed7i","Load Coupon":"N\u1ea1p phi\u1ebfu gi\u1ea3m gi\u00e1","Apply A Coupon":"\u00c1p d\u1ee5ng phi\u1ebfu gi\u1ea3m gi\u00e1","Load":"T\u1ea3i","Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.":"Nh\u1eadp m\u00e3 phi\u1ebfu gi\u1ea3m gi\u00e1.","Click here to choose a customer.":"Ch\u1ecdn kh\u00e1ch h\u00e0ng.","Coupon Name":"T\u00ean phi\u1ebfu gi\u1ea3m gi\u00e1","Usage":"S\u1eed d\u1ee5ng","Unlimited":"Kh\u00f4ng gi\u1edbi h\u1ea1n","Valid From":"Gi\u00e1 tr\u1ecb t\u1eeb","Valid Till":"Gi\u00e1 tr\u1ecb \u0111\u1ebfn","Categories":"Nh\u00f3m h\u00e0ng","Products":"S\u1ea3n ph\u1ea9m","Active Coupons":"K\u00edch ho\u1ea1t phi\u1ebfu gi\u1ea3m gi\u00e1","Apply":"Ch\u1ea5p nh\u1eadn","Cancel":"H\u1ee7y","Coupon Code":"M\u00e3 phi\u1ebfu gi\u1ea3m gi\u00e1","The coupon is out from validity date range.":"Phi\u1ebfu gi\u1ea3m gi\u00e1 h\u1ebft hi\u1ec7u l\u1ef1c.","The coupon has applied to the cart.":"Phi\u1ebfu gi\u1ea3m gi\u00e1 \u0111\u00e3 \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng.","Percentage":"Ph\u1ea7n tr\u0103m","Flat":"B\u1eb1ng","The coupon has been loaded.":"Phi\u1ebfu gi\u1ea3m gi\u00e1 \u0111\u00e3 \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng.","Layaway Parameters":"\u0110\u1eb7t c\u00e1c tham s\u1ed1","Minimum Payment":"S\u1ed1 ti\u1ec1n t\u1ed1i thi\u1ec3u c\u1ea7n thanh to\u00e1n","Instalments & Payments":"Tr\u1ea3 g\u00f3p & Thanh to\u00e1n","The final payment date must be the last within the instalments.":"Ng\u00e0y thanh to\u00e1n cu\u1ed1i c\u00f9ng ph\u1ea3i l\u00e0 ng\u00e0y cu\u1ed1i c\u00f9ng trong \u0111\u1ee3t tr\u1ea3 g\u00f3p.","Amount":"Th\u00e0nh ti\u1ec1n","You must define layaway settings before proceeding.":"B\u1ea1n ph\u1ea3i c\u00e0i \u0111\u1eb7t tham s\u1ed1 tr\u01b0\u1edbc khi ti\u1ebfn h\u00e0nh.","Please provide instalments before proceeding.":"Vui l\u00f2ng tr\u1ea3 g\u00f3p tr\u01b0\u1edbc khi ti\u1ebfn h\u00e0nh.","Unable to process, the form is not valid":"Bi\u1ec3u m\u1eabu kh\u00f4ng h\u1ee3p l\u1ec7","One or more instalments has an invalid date.":"M\u1ed9t ho\u1eb7c nhi\u1ec1u \u0111\u1ee3t c\u00f3 ng\u00e0y kh\u00f4ng h\u1ee3p l\u1ec7.","One or more instalments has an invalid amount.":"M\u1ed9t ho\u1eb7c nhi\u1ec1u \u0111\u1ee3t c\u00f3 s\u1ed1 ti\u1ec1n kh\u00f4ng h\u1ee3p l\u1ec7.","One or more instalments has a date prior to the current date.":"M\u1ed9t ho\u1eb7c nhi\u1ec1u \u0111\u1ee3t c\u00f3 ng\u00e0y tr\u01b0\u1edbc ng\u00e0y hi\u1ec7n t\u1ea1i.","Total instalments must be equal to the order total.":"T\u1ed5ng s\u1ed1 \u0111\u1ee3t ph\u1ea3i b\u1eb1ng t\u1ed5ng s\u1ed1 \u0111\u01a1n \u0111\u1eb7t h\u00e0ng.","The customer has been loaded":"Kh\u00e1ch h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c n\u1ea1p","This coupon is already added to the cart":"Phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c th\u00eam v\u00e0o gi\u1ecf h\u00e0ng","No tax group assigned to the order":"Kh\u00f4ng c\u00f3 nh\u00f3m thu\u1ebf n\u00e0o \u0111\u01b0\u1ee3c giao cho \u0111\u01a1n \u0111\u1eb7t h\u00e0ng","Layaway defined":"\u0110\u1ecbnh ngh\u0129a tham s\u1ed1","Okay":"\u0110\u1ed3ng \u00fd","An unexpected error has occurred while fecthing taxes.":"C\u00f3 l\u1ed7i x\u1ea3y ra.","OKAY":"\u0110\u1ed3ng \u00fd","Loading...":"\u0110ang x\u1eed l\u00fd...","Profile":"H\u1ed3 s\u01a1","Logout":"Tho\u00e1t","Unnamed Page":"Trang ch\u01b0a \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh","No description":"Kh\u00f4ng c\u00f3 di\u1ec5n gi\u1ea3i","Name":"T\u00ean","Provide a name to the resource.":"Cung c\u1ea5p t\u00ean.","General":"T\u1ed5ng qu\u00e1t","Edit":"S\u1eeda","Delete":"X\u00f3a","Delete Selected Groups":"X\u00f3a nh\u00f3m \u0111\u01b0\u1ee3c ch\u1ecdn","Activate Your Account":"K\u00edch ho\u1ea1t t\u00e0i kho\u1ea3n","Password Recovered":"M\u1eadt kh\u1ea9u \u0111\u00e3 \u0111\u01b0\u1ee3c kh\u00f4i ph\u1ee5c","Password Recovery":"Kh\u00f4i ph\u1ee5c m\u1eadt kh\u1ea9u","Reset Password":"\u0110\u1eb7t l\u1ea1i m\u1eadt kh\u1ea9u","New User Registration":"\u0110\u0103ng k\u00fd ng\u01b0\u1eddi d\u00f9ng m\u1edbi","Your Account Has Been Created":"T\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o","Login":"\u0110\u0103ng nh\u1eadp","Save Coupon":"L\u01b0u phi\u1ebfu gi\u1ea3m gi\u00e1","This field is required":"Tr\u01b0\u1eddng b\u1eaft bu\u1ed9c","The form is not valid. Please check it and try again":"Bi\u1ec3u m\u1eabu kh\u00f4ng h\u1ee3p l\u1ec7. Vui l\u00f2ng ki\u1ec3m tra v\u00e0 th\u1eed l\u1ea1i","mainFieldLabel not defined":"Nh\u00e3n ch\u00ednh ch\u01b0a \u0111\u01b0\u1ee3c t\u1ea1o","Create Customer Group":"T\u1ea1o nh\u00f3m kh\u00e1ch h\u00e0ng","Save a new customer group":"L\u01b0u nh\u00f3m kh\u00e1ch h\u00e0ng","Update Group":"C\u1eadp nh\u1eadt nh\u00f3m","Modify an existing customer group":"Ch\u1ec9nh s\u1eeda nh\u00f3m","Managing Customers Groups":"Qu\u1ea3n l\u00fd nh\u00f3m kh\u00e1ch h\u00e0ng","Create groups to assign customers":"T\u1ea1o nh\u00f3m \u0111\u1ec3 g\u00e1n cho kh\u00e1ch h\u00e0ng","Create Customer":"T\u1ea1o kh\u00e1ch h\u00e0ng","Managing Customers":"Qu\u1ea3n l\u00fd kh\u00e1ch h\u00e0ng","List of registered customers":"Danh s\u00e1ch kh\u00e1ch h\u00e0ng \u0111\u00e3 \u0111\u0103ng k\u00fd","Your Module":"Ph\u00e2n h\u1ec7 c\u1ee7a b\u1ea1n","Choose the zip file you would like to upload":"Ch\u1ecdn file n\u00e9n b\u1ea1n mu\u1ed1n t\u1ea3i l\u00ean","Upload":"T\u1ea3i l\u00ean","Managing Orders":"Qu\u1ea3n l\u00fd \u0111\u01a1n h\u00e0ng","Manage all registered orders.":"Qu\u1ea3n l\u00fd t\u1ea5t c\u1ea3 c\u00e1c \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 \u0111\u0103ng k\u00fd.","Failed":"Th\u1ea5t b\u1ea1i","Order receipt":"Bi\u00ean nh\u1eadn \u0111\u01a1n h\u00e0ng","Hide Dashboard":"\u1ea8n b\u1ea3ng \u0111i\u1ec1u khi\u1ec3n","Taxes":"Thu\u1ebf","Unknown Payment":"Thanh to\u00e1n kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Procurement Name":"T\u00ean nh\u00e0 cung c\u1ea5p","Unable to proceed no products has been provided.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh kh\u00f4ng c\u00f3 s\u1ea3n ph\u1ea9m n\u00e0o \u0111\u01b0\u1ee3c cung c\u1ea5p.","Unable to proceed, one or more products is not valid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh, m\u1ed9t ho\u1eb7c nhi\u1ec1u s\u1ea3n ph\u1ea9m kh\u00f4ng h\u1ee3p l\u1ec7.","Unable to proceed the procurement form is not valid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh bi\u1ec3u m\u1eabu mua s\u1eafm l\u00e0 kh\u00f4ng h\u1ee3p l\u1ec7.","Unable to proceed, no submit url has been provided.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh, kh\u00f4ng c\u00f3 url g\u1eedi \u0111\u00e3 \u0111\u01b0\u1ee3c cung c\u1ea5p.","SKU, Barcode, Product name.":"M\u00e3 h\u00e0ng, M\u00e3 v\u1ea1ch, T\u00ean h\u00e0ng.","N\/A":"N\/A","Email":"Th\u01b0 \u0111i\u1ec7n t\u1eed","Phone":"\u0110i\u1ec7n tho\u1ea1i","First Address":"\u0110\u1ecba ch\u1ec9 1","Second Address":"\u0110\u1ecba ch\u1ec9 2","Address":"\u0110\u1ecba ch\u1ec9","City":"T\u1ec9nh\/Th\u00e0nh ph\u1ed1","PO.Box":"H\u1ed9p th\u01b0","Price":"Gi\u00e1","Print":"In","Description":"Di\u1ec5n gi\u1ea3i","Included Products":"S\u1ea3n ph\u1ea9m g\u1ed3m","Apply Settings":"\u00c1p d\u1ee5ng c\u00e0i \u0111\u1eb7t","Basic Settings":"C\u00e0i \u0111\u1eb7t ch\u00ednh","Visibility Settings":"C\u00e0i \u0111\u1eb7t hi\u1ec3n th\u1ecb","Year":"N\u0103m","Sales":"B\u00e1n","Income":"L\u00e3i","January":"Th\u00e1ng 1","March":"Th\u00e1ng 3","April":"Th\u00e1ng 4","May":"Th\u00e1ng 5","June":"Th\u00e1ng 6","July":"Th\u00e1ng 7","August":"Th\u00e1ng 8","September":"Th\u00e1ng 9","October":"Th\u00e1ng 10","November":"Th\u00e1ng 11","December":"Th\u00e1ng 12","Purchase Price":"Gi\u00e1 mua","Sale Price":"Gi\u00e1 b\u00e1n","Profit":"L\u1ee3i nhu\u1eadn","Tax Value":"Ti\u1ec1n thu\u1ebf","Reward System Name":"T\u00ean h\u1ec7 th\u1ed1ng ph\u1ea7n th\u01b0\u1edfng","Missing Dependency":"Thi\u1ebfu s\u1ef1 ph\u1ee5 thu\u1ed9c","Go Back":"Quay l\u1ea1i","Continue":"Ti\u1ebfp t\u1ee5c","Home":"Trang ch\u1ee7","Not Allowed Action":"H\u00e0nh \u0111\u1ed9ng kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p","Try Again":"Th\u1eed l\u1ea1i","Access Denied":"T\u1eeb ch\u1ed1i truy c\u1eadp","Dashboard":"B\u1ea3ng \u0111i\u1ec1u khi\u1ec3n","Sign In":"\u0110\u0103ng nh\u1eadp","Sign Up":"Sign Up","This field is required.":"Tr\u01b0\u1eddng b\u1eaft bu\u1ed9c.","This field must contain a valid email address.":"B\u1eaft bu\u1ed9c email h\u1ee3p l\u1ec7.","Clear Selected Entries ?":"X\u00f3a m\u1ee5c \u0111\u00e3 ch\u1ecdn ?","Would you like to clear all selected entries ?":"B\u1ea1n c\u00f3 mu\u1ed1n x\u00f3a t\u1ea5t c\u1ea3 c\u00e1c m\u1ee5c \u0111\u00e3 ch\u1ecdn kh\u00f4ng?","No selection has been made.":"Kh\u00f4ng c\u00f3 l\u1ef1a ch\u1ecdn n\u00e0o \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n","No action has been selected.":"Kh\u00f4ng c\u00f3 h\u00e0nh \u0111\u1ed9ng n\u00e0o \u0111\u01b0\u1ee3c ch\u1ecdn.","There is nothing to display...":"Kh\u00f4ng c\u00f3 g\u00ec \u0111\u1ec3 hi\u1ec3n th\u1ecb ...","Sun":"Ch\u1ee7 nh\u1eadt","Mon":"Th\u1ee9 hai","Tue":"Th\u1ee9 ba","Wed":"Th\u1ee9 t\u01b0","Fri":"Th\u1ee9 s\u00e1u","Sat":"Th\u1ee9 b\u1ea3y","Nothing to display":"Kh\u00f4ng c\u00f3 g\u00ec \u0111\u1ec3 hi\u1ec3n th\u1ecb","Password Forgotten ?":"B\u1ea1n \u0111\u00e3 qu\u00ean m\u1eadt kh\u1ea9u","OK":"\u0110\u1ed3ng \u00fd","Remember Your Password ?":"Nh\u1edb m\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n?","Already registered ?":"\u0110\u00e3 \u0111\u0103ng k\u00fd?","Refresh":"l\u00e0m m\u1edbi","Enabled":"\u0111\u00e3 b\u1eadt","Disabled":"\u0111\u00e3 t\u1eaft","Enable":"b\u1eadt","Disable":"t\u1eaft","Gallery":"Th\u01b0 vi\u1ec7n","Medias Manager":"Tr\u00ecnh qu\u1ea3n l\u00ed medias","Click Here Or Drop Your File To Upload":"Nh\u1ea5p v\u00e0o \u0111\u00e2y ho\u1eb7c th\u1ea3 t\u1ec7p c\u1ee7a b\u1ea1n \u0111\u1ec3 t\u1ea3i l\u00ean","Nothing has already been uploaded":"Ch\u01b0a c\u00f3 g\u00ec \u0111\u01b0\u1ee3c t\u1ea3i l\u00ean","File Name":"t\u00ean t\u1ec7p","Uploaded At":"\u0111\u00e3 t\u1ea3i l\u00ean l\u00fac","By":"B\u1edfi","Previous":"tr\u01b0\u1edbc \u0111\u00f3","Next":"ti\u1ebfp theo","Use Selected":"s\u1eed d\u1ee5ng \u0111\u00e3 ch\u1ecdn","Would you like to clear all the notifications ?":"B\u1ea1n c\u00f3 mu\u1ed1n x\u00f3a t\u1ea5t c\u1ea3 c\u00e1c th\u00f4ng b\u00e1o kh\u00f4ng?","Permissions":"Quy\u1ec1n","Payment Summary":"T\u00f3m t\u1eaft Thanh to\u00e1n","Order Status":"Tr\u1ea1ng th\u00e1i \u0110\u01a1n h\u00e0ng","Would you proceed ?":"Would you proceed ?","Would you like to create this instalment ?":"B\u1ea1n c\u00f3 mu\u1ed1n t\u1ea1o ph\u1ea7n n\u00e0y kh\u00f4ng?","Would you like to delete this instalment ?":"B\u1ea1n c\u00f3 mu\u1ed1n x\u00f3a ph\u1ea7n n\u00e0y kh\u00f4ng?","Would you like to update that instalment ?":"B\u1ea1n c\u00f3 mu\u1ed1n c\u1eadp nh\u1eadt ph\u1ea7n \u0111\u00f3 kh\u00f4ng?","Customer Account":"T\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng","Payment":"Thanh to\u00e1n","No payment possible for paid order.":"Kh\u00f4ng th\u1ec3 thanh to\u00e1n cho \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 thanh to\u00e1n.","Payment History":"L\u1ecbch s\u1eed Thanh to\u00e1n","Unable to proceed the form is not valid":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c, bi\u1ec3u m\u1eabu kh\u00f4ng h\u1ee3p l\u1ec7","Please provide a valid value":"Vui l\u00f2ng cung c\u1ea5p m\u1ed9t gi\u00e1 tr\u1ecb h\u1ee3p l\u1ec7","Refund With Products":"Ho\u00e0n l\u1ea1i ti\u1ec1n v\u1edbi s\u1ea3n ph\u1ea9m","Refund Shipping":"Ho\u00e0n l\u1ea1i ti\u1ec1n giao h\u00e0ng","Add Product":"Th\u00eam s\u1ea3n ph\u1ea9m","Damaged":"B\u1ecb h\u01b0 h\u1ecfng","Unspoiled":"C\u00f2n nguy\u00ean s\u01a1","Summary":"T\u00f3m t\u1eaft","Payment Gateway":"C\u1ed5ng thanh to\u00e1n","Screen":"Kh\u00e1ch tr\u1ea3","Select the product to perform a refund.":"Ch\u1ecdn s\u1ea3n ph\u1ea9m \u0111\u1ec3 th\u1ef1c hi\u1ec7n ho\u00e0n ti\u1ec1n.","Please select a payment gateway before proceeding.":"Vui l\u00f2ng ch\u1ecdn m\u1ed9t c\u1ed5ng thanh to\u00e1n tr\u01b0\u1edbc khi ti\u1ebfp t\u1ee5c.","There is nothing to refund.":"Kh\u00f4ng c\u00f3 g\u00ec \u0111\u1ec3 ho\u00e0n l\u1ea1i.","Please provide a valid payment amount.":"Vui l\u00f2ng cung c\u1ea5p s\u1ed1 ti\u1ec1n thanh to\u00e1n h\u1ee3p l\u1ec7.","The refund will be made on the current order.":"Vi\u1ec7c ho\u00e0n l\u1ea1i s\u1ebd \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n tr\u00ean \u0111\u01a1n \u0111\u1eb7t h\u00e0ng hi\u1ec7n t\u1ea1i.","Please select a product before proceeding.":"Vui l\u00f2ng ch\u1ecdn m\u1ed9t s\u1ea3n ph\u1ea9m tr\u01b0\u1edbc khi ti\u1ebfp t\u1ee5c.","Not enough quantity to proceed.":"Kh\u00f4ng \u0111\u1ee7 s\u1ed1 l\u01b0\u1ee3ng \u0111\u1ec3 ti\u1ebfp t\u1ee5c.","Would you like to delete this product ?":"B\u1ea1n c\u00f3 mu\u1ed1n x\u00f3a s\u1ea3n ph\u1ea9m n\u00e0y kh\u00f4ng?","Customers":"Kh\u00e1ch h\u00e0ng","Order Type":"Lo\u1ea1i \u0111\u01a1n","Orders":"\u0110\u01a1n h\u00e0ng","Cash Register":"\u0110\u0103ng k\u00fd ti\u1ec1n m\u1eb7t","Reset":"H\u1ee7y \u0111\u01a1n","Cart":"\u0110\u01a1n h\u00e0ng","Comments":"Ghi ch\u00fa","No products added...":"Ch\u01b0a th\u00eam s\u1ea3n ph\u1ea9m n\u00e0o...","Pay":"Thanh to\u00e1n","Void":"H\u1ee7y","Current Balance":"S\u1ed1 d\u01b0 Hi\u1ec7n t\u1ea1i","Full Payment":"Thanh to\u00e1n","The customer account can only be used once per order. Consider deleting the previously used payment.":"T\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng ch\u1ec9 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng m\u1ed9t l\u1ea7n cho m\u1ed7i \u0111\u01a1n h\u00e0ng. H\u00e3y xem x\u00e9t x\u00f3a kho\u1ea3n thanh to\u00e1n \u0111\u00e3 s\u1eed d\u1ee5ng tr\u01b0\u1edbc \u0111\u00f3.","Not enough funds to add {amount} as a payment. Available balance {balance}.":"Kh\u00f4ng \u0111\u1ee7 ti\u1ec1n \u0111\u1ec3 th\u00eam {money} l\u00e0m thanh to\u00e1n. S\u1ed1 d\u01b0 kh\u1ea3 d\u1ee5ng {balance}.","Confirm Full Payment":"X\u00e1c nh\u1eadn thanh to\u00e1n","A full payment will be made using {paymentType} for {total}":"\u0110\u1ed3ng \u00fd thanh to\u00e1n b\u1eb1ng ph\u01b0\u01a1ng th\u1ee9c {paymentType} cho s\u1ed1 ti\u1ec1n {total}","You need to provide some products before proceeding.":"B\u1ea1n c\u1ea7n cung c\u1ea5p m\u1ed9t s\u1ed1 s\u1ea3n ph\u1ea9m tr\u01b0\u1edbc khi ti\u1ebfp t\u1ee5c.","Unable to add the product, there is not enough stock. Remaining %s":"Kh\u00f4ng th\u1ec3 th\u00eam s\u1ea3n ph\u1ea9m, kh\u00f4ng c\u00f2n \u0111\u1ee7 t\u1ed3n kho. C\u00f2n l\u1ea1i %s","Add Images":"Th\u00eam \u1ea3nh","New Group":"Nh\u00f3m m\u1edbi","Available Quantity":"S\u1eb5n s\u1ed1 l\u01b0\u1ee3ng","Would you like to delete this group ?":"B\u1ea1n mu\u1ed1n x\u00f3a nh\u00f3m ?","Your Attention Is Required":"B\u1eaft bu\u1ed9c ghi ch\u00fa","Please select at least one unit group before you proceed.":"Vui l\u00f2ng ch\u1ecdn \u00edt nh\u1ea5t m\u1ed9t nh\u00f3m \u0111\u01a1n v\u1ecb t\u00ednh.","Unable to proceed as one of the unit group field is invalid":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh v\u00ec m\u1ed9t trong c\u00e1c tr\u01b0\u1eddng nh\u00f3m \u0111\u01a1n v\u1ecb kh\u00f4ng h\u1ee3p l\u1ec7","Would you like to delete this variation ?":"B\u1ea1n c\u00f3 mu\u1ed1n x\u00f3a bi\u1ebfn th\u1ec3 n\u00e0y kh\u00f4ng? ?","Details":"Chi ti\u1ebft","Unable to proceed, no product were provided.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh, kh\u00f4ng c\u00f3 s\u1ea3n ph\u1ea9m n\u00e0o \u0111\u01b0\u1ee3c cung c\u1ea5p.","Unable to proceed, one or more product has incorrect values.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh, m\u1ed9t ho\u1eb7c nhi\u1ec1u s\u1ea3n ph\u1ea9m c\u00f3 gi\u00e1 tr\u1ecb kh\u00f4ng ch\u00ednh x\u00e1c.","Unable to proceed, the procurement form is not valid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh, m\u1eabu mua s\u1eafm kh\u00f4ng h\u1ee3p l\u1ec7.","Unable to submit, no valid submit URL were provided.":"Kh\u00f4ng th\u1ec3 g\u1eedi, kh\u00f4ng c\u00f3 URL g\u1eedi h\u1ee3p l\u1ec7 n\u00e0o \u0111\u01b0\u1ee3c cung c\u1ea5p.","Options":"T\u00f9y ch\u1ecdn","The stock adjustment is about to be made. Would you like to confirm ?":"Vi\u1ec7c \u0111i\u1ec1u ch\u1ec9nh c\u1ed5 phi\u1ebfu s\u1eafp \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n. B\u1ea1n c\u00f3 mu\u1ed1n x\u00e1c nh\u1eadn ?","Would you like to remove this product from the table ?":"B\u1ea1n c\u00f3 mu\u1ed1n lo\u1ea1i b\u1ecf s\u1ea3n ph\u1ea9m n\u00e0y kh\u1ecfi b\u00e0n ?","Unable to proceed. Select a correct time range.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh. Ch\u1ecdn m\u1ed9t kho\u1ea3ng th\u1eddi gian ch\u00ednh x\u00e1c.","Unable to proceed. The current time range is not valid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh. Kho\u1ea3ng th\u1eddi gian hi\u1ec7n t\u1ea1i kh\u00f4ng h\u1ee3p l\u1ec7.","Would you like to proceed ?":"B\u1ea1n c\u00f3 mu\u1ed1n ti\u1ebfp t\u1ee5c ?","No rules has been provided.":"Kh\u00f4ng c\u00f3 quy t\u1eafc n\u00e0o \u0111\u01b0\u1ee3c cung c\u1ea5p.","No valid run were provided.":"Kh\u00f4ng c\u00f3 ho\u1ea1t \u0111\u1ed9ng h\u1ee3p l\u1ec7 n\u00e0o \u0111\u01b0\u1ee3c cung c\u1ea5p.","Unable to proceed, the form is invalid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh, bi\u1ec3u m\u1eabu kh\u00f4ng h\u1ee3p l\u1ec7.","Unable to proceed, no valid submit URL is defined.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh, kh\u00f4ng c\u00f3 URL g\u1eedi h\u1ee3p l\u1ec7 n\u00e0o \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh.","No title Provided":"Kh\u00f4ng cung c\u1ea5p ti\u00eau \u0111\u1ec1","Add Rule":"Th\u00eam quy t\u1eafc","Save Settings":"L\u01b0u c\u00e0i \u0111\u1eb7t","Ok":"Nh\u1eadn","New Transaction":"Giao d\u1ecbch m\u1edbi","Close":"\u0110\u00f3ng","Would you like to delete this order":"B\u1ea1n mu\u1ed1n x\u00f3a \u0111\u01a1n h\u00e0ng n\u00e0y?","The current order will be void. This action will be recorded. Consider providing a reason for this operation":"Tr\u1eadt t\u1ef1 hi\u1ec7n t\u1ea1i s\u1ebd b\u1ecb v\u00f4 hi\u1ec7u. H\u00e0nh \u0111\u1ed9ng n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c ghi l\u1ea1i. Xem x\u00e9t cung c\u1ea5p m\u1ed9t l\u00fd do cho ho\u1ea1t \u0111\u1ed9ng n\u00e0y","Order Options":"T\u00f9y ch\u1ecdn \u0111\u01a1n h\u00e0ng","Payments":"Thanh to\u00e1n","Refund & Return":"Ho\u00e0n & Tr\u1ea3 l\u1ea1i","Installments":"\u0110\u1ee3t","The form is not valid.":"Bi\u1ec3u m\u1eabu kh\u00f4ng h\u1ee3p l\u1ec7.","Balance":"C\u00e2n b\u1eb1ng","Input":"Nh\u1eadp","Register History":"L\u1ecbch s\u1eed \u0111\u0103ng k\u00fd","Close Register":"Tho\u00e1t \u0111\u0103ng k\u00fd","Cash In":"Ti\u1ec1n v\u00e0o","Cash Out":"Ti\u1ec1n ra","Register Options":"T\u00f9y ch\u1ecdn \u0111\u0103ng k\u00fd","History":"L\u1ecbch s\u1eed","Unable to open this register. Only closed register can be opened.":"Kh\u00f4ng th\u1ec3 m\u1edf s\u1ed5 \u0111\u0103ng k\u00fd n\u00e0y. Ch\u1ec9 c\u00f3 th\u1ec3 m\u1edf s\u1ed5 \u0111\u0103ng k\u00fd \u0111\u00f3ng.","Open The Register":"M\u1edf \u0111\u0103ng k\u00fd","Exit To Orders":"Tho\u00e1t \u0111\u01a1n","Looks like there is no registers. At least one register is required to proceed.":"C\u00f3 v\u1ebb nh\u01b0 kh\u00f4ng c\u00f3 s\u1ed5 \u0111\u0103ng k\u00fd. \u00cdt nh\u1ea5t m\u1ed9t \u0111\u0103ng k\u00fd \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u \u0111\u1ec3 ti\u1ebfn h\u00e0nh.","Create Cash Register":"T\u1ea1o M\u00e1y t\u00ednh ti\u1ec1n","Yes":"C\u00f3","No":"Kh\u00f4ng","Use":"S\u1eed d\u1ee5ng","No coupon available for this customer":"Kh\u00f4ng c\u00f3 \u0111\u01a1n gi\u1ea3m gi\u00e1 \u0111\u1ed1i v\u1edbi kh\u00e1ch h\u00e0ng n\u00e0y","Select Customer":"Ch\u1ecdn kh\u00e1ch h\u00e0ng","No customer match your query...":"Kh\u00f4ng t\u00ecm th\u1ea5y kh\u00e1ch h\u00e0ng...","Customer Name":"T\u00ean kh\u00e1ch h\u00e0ng","Save Customer":"L\u01b0u kh\u00e1ch h\u00e0ng","No Customer Selected":"Ch\u01b0a ch\u1ecdn kh\u00e1ch h\u00e0ng n\u00e0o.","In order to see a customer account, you need to select one customer.":"B\u1ea1n c\u1ea7n ch\u1ecdn m\u1ed9t kh\u00e1ch h\u00e0ng \u0111\u1ec3 xem th\u00f4ng tin v\u1ec1 kh\u00e1ch h\u00e0ng \u0111\u00f3","Summary For":"T\u1ed5ng c\u1ee7a","Total Purchases":"T\u1ed5ng ti\u1ec1n mua h\u00e0ng","Last Purchases":"L\u1ea7n mua cu\u1ed1i","Status":"T\u00ecnh tr\u1ea1ng","No orders...":"Kh\u00f4ng c\u00f3 \u0111\u01a1n n\u00e0o...","Account Transaction":"T\u00e0i kho\u1ea3n giao d\u1ecbch","Product Discount":"Chi\u1ebft kh\u1ea5u h\u00e0ng h\u00f3a","Cart Discount":"Gi\u1ea3m gi\u00e1 \u0111\u01a1n h\u00e0ng","Hold Order":"Gi\u1eef \u0111\u01a1n","The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.":"L\u1ec7nh hi\u1ec7n t\u1ea1i s\u1ebd \u0111\u01b0\u1ee3c gi\u1eef nguy\u00ean. B\u1ea1n c\u00f3 th\u1ec3 \u0111i\u1ec1u ch\u1ec9nh l\u1ea1i \u0111\u01a1n \u0111\u1eb7t h\u00e0ng n\u00e0y t\u1eeb n\u00fat l\u1ec7nh \u0111ang ch\u1edd x\u1eed l\u00fd. Cung c\u1ea5p m\u1ed9t t\u00e0i li\u1ec7u tham kh\u1ea3o cho n\u00f3 c\u00f3 th\u1ec3 gi\u00fap b\u1ea1n x\u00e1c \u0111\u1ecbnh \u0111\u01a1n \u0111\u1eb7t h\u00e0ng nhanh h\u01a1n.","Confirm":"X\u00e1c nh\u1eadn","Order Note":"Ghi ch\u00fa \u0111\u01a1n h\u00e0ng","Note":"Th\u00f4ng tin ghi ch\u00fa","More details about this order":"Th\u00f4ng tin chi ti\u1ebft v\u1ec1 \u0111\u01a1n h\u00e0ng n\u00e0y","Display On Receipt":"Hi\u1ec3n th\u1ecb tr\u00ean h\u00f3a \u0111\u01a1n","Will display the note on the receipt":"S\u1ebd hi\u1ec3n th\u1ecb ghi ch\u00fa tr\u00ean h\u00f3a \u0111\u01a1n","Open":"M\u1edf","Define The Order Type":"X\u00e1c nh\u1eadn lo\u1ea1i \u0111\u1eb7t h\u00e0ng","Payment List":"Danh s\u00e1ch thanh to\u00e1n","List Of Payments":"Danh s\u00e1ch \u0111\u01a1n thanh to\u00e1n","No Payment added.":"Ch\u01b0a c\u00f3 thanh to\u00e1n n\u00e0o \u0111\u01b0\u1ee3c th\u00eam v\u00e0o.","Select Payment":"Ch\u1ecdn thanh to\u00e1n","Submit Payment":"\u0110\u1ed3ng \u00fd thanh to\u00e1n","Layaway":"In h\u00f3a \u0111\u01a1n","On Hold":"\u0110ang gi\u1eef","Tendered":"\u0110\u1ea5u th\u1ea7u","Nothing to display...":"Kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u hi\u1ec3n th\u1ecb...","Define Quantity":"\u0110\u1eb7t s\u1ed1 l\u01b0\u1ee3ng","Please provide a quantity":"Xin vui l\u00f2ng nh\u1eadn s\u1ed1 l\u01b0\u1ee3ng","Search Product":"T\u00ecm ki\u1ebfm s\u1ea3n ph\u1ea9m","There is nothing to display. Have you started the search ?":"Kh\u00f4ng c\u00f3 g\u00ec \u0111\u1ec3 hi\u1ec3n th\u1ecb. B\u1ea1n \u0111\u00e3 b\u1eaft \u0111\u1ea7u t\u00ecm ki\u1ebfm ch\u01b0a ?","Shipping & Billing":"V\u1eadn chuy\u1ec3n & Thu ti\u1ec1n","Tax & Summary":"Thu\u1ebf & T\u1ed5ng","Settings":"C\u00e0i \u0111\u1eb7t","Select Tax":"Ch\u1ecdn thu\u1ebf","Define the tax that apply to the sale.":"X\u00e1c \u0111\u1ecbnh thu\u1ebf \u00e1p d\u1ee5ng cho vi\u1ec7c b\u00e1n h\u00e0ng.","Define how the tax is computed":"X\u00e1c \u0111\u1ecbnh c\u00e1ch t\u00ednh thu\u1ebf","Exclusive":"Kh\u00f4ng bao g\u1ed3m","Inclusive":"C\u00f3 bao g\u1ed3m","Define when that specific product should expire.":"X\u00e1c \u0111\u1ecbnh khi n\u00e0o s\u1ea3n ph\u1ea9m c\u1ee5 th\u1ec3 \u0111\u00f3 h\u1ebft h\u1ea1n.","Renders the automatically generated barcode.":"Hi\u1ec3n th\u1ecb m\u00e3 v\u1ea1ch \u0111\u01b0\u1ee3c t\u1ea1o t\u1ef1 \u0111\u1ed9ng.","Tax Type":"Lo\u1ea1i Thu\u1ebf","Adjust how tax is calculated on the item.":"\u0110i\u1ec1u ch\u1ec9nh c\u00e1ch t\u00ednh thu\u1ebf tr\u00ean m\u1eb7t h\u00e0ng.","Unable to proceed. The form is not valid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh. Bi\u1ec3u m\u1eabu kh\u00f4ng h\u1ee3p l\u1ec7.","Units & Quantities":"\u0110\u01a1n v\u1ecb & S\u1ed1 l\u01b0\u1ee3ng","Wholesale Price":"Gi\u00e1 b\u00e1n s\u1ec9","Select":"Ch\u1ecdn","Would you like to delete this ?":"B\u1ea1n mu\u1ed1n x\u00f3a ?","The account you have created for __%s__, require an activation. In order to proceed, please click on the following link":"T\u00e0i kho\u1ea3n b\u1ea1n \u0111\u00e3 t\u1ea1o cho __%s__, c\u1ea7n \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t. \u0110\u1ec3 ti\u1ebfn h\u00e0nh, vui l\u00f2ng b\u1ea5m v\u00e0o \u0111\u01b0\u1eddng d\u1eabn sau","Your password has been successfully updated on __%s__. You can now login with your new password.":"M\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng tr\u00ean __%s__. B\u1ea1n c\u00f3 th\u1ec3 \u0111\u0103ng nh\u1eadp v\u1edbi m\u1eadt kh\u1ea9u m\u1edbi n\u00e0y.","Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ":"Ai \u0111\u00f3 \u0111\u00e3 y\u00eau c\u1ea7u \u0111\u1eb7t l\u1ea1i m\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n tr\u00ean __\"%s\"__. N\u1ebfu b\u1ea1n nh\u1edb \u0111\u00e3 th\u1ef1c hi\u1ec7n y\u00eau c\u1ea7u \u0111\u00f3, vui l\u00f2ng ti\u1ebfn h\u00e0nh b\u1eb1ng c\u00e1ch nh\u1ea5p v\u00e0o n\u00fat b\u00ean d\u01b0\u1edbi. ","Receipt — %s":"Bi\u00ean lai — %s","Unable to find a module having the identifier\/namespace \"%s\"":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y m\u1ed9t m\u00f4-\u0111un c\u00f3 m\u00e3 \u0111\u1ecbnh danh\/t\u00ean mi\u1ec1n \"%s\"","What is the CRUD single resource name ? [Q] to quit.":"T\u00ean t\u00e0i nguy\u00ean \u0111\u01a1n CRUD l\u00e0 g\u00ec ? [Q] \u0111\u1ec3 tho\u00e1t.","Which table name should be used ? [Q] to quit.":"S\u1eed d\u1ee5ng b\u00e0n n\u00e0o ? [Q] \u0111\u1ec3 tho\u00e1t.","If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"N\u1ebfu t\u00e0i nguy\u00ean CRUD c\u1ee7a b\u1ea1n c\u00f3 m\u1ed1i quan h\u1ec7, h\u00e3y \u0111\u1ec1 c\u1eadp \u0111\u1ebfn n\u00f3 nh\u01b0 sau \"foreign_table, foreign_key, local_key\" ? [S] b\u1ecf qua, [Q] tho\u00e1t.","Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Th\u00eam m\u1ed9t m\u1ed1i quan h\u1ec7 m\u1edbi? \u0110\u1ec1 c\u1eadp \u0111\u1ebfn n\u00f3 nh\u01b0 sau \"foreign_table, foreign_key, local_key\" ? [S] b\u1ecf qua, [Q] tho\u00e1t.","Not enough parameters provided for the relation.":"Kh\u00f4ng c\u00f3 tham s\u1ed1 cung c\u1ea5p cho quan h\u1ec7 n\u00e0y.","The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"":"T\u00e0i nguy\u00ean CRUD \"%s\" cho ph\u00e2n h\u1ec7 \"%s\" \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o ra t\u1ea1i \"%s\"","The CRUD resource \"%s\" has been generated at %s":"T\u00e0i nguy\u00ean CRUD \"%s\" \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o ra t\u1ea1i %s","An unexpected error has occurred.":"L\u1ed7i x\u1ea3y ra.","Localization for %s extracted to %s":"N\u1ed9i \u0111\u1ecba h\u00f3a cho %s tr\u00edch xu\u1ea5t \u0111\u1ebfn %s","Unable to find the requested module.":"Kh\u00f4ng t\u00ecm th\u1ea5y ph\u00e2n h\u1ec7.","Version":"Phi\u00ean b\u1ea3n","Path":"\u0110\u01b0\u1eddng d\u1eabn","Index":"Ch\u1ec9 s\u1ed1","Entry Class":"M\u1ee5c l\u1edbp","Routes":"Routes","Api":"Api","Controllers":"Controllers","Views":"Views","Attribute":"Tr\u01b0\u1eddng m\u1edf r\u1ed9ng","Namespace":"Namespace","Author":"T\u00e1c gi\u1ea3","The product barcodes has been refreshed successfully.":"M\u00e3 v\u1ea1ch s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c l\u00e0m m\u1edbi th\u00e0nh c\u00f4ng.","What is the store name ? [Q] to quit.":"T\u00ean c\u1eeda h\u00e0ng l\u00e0 g\u00ec ? [Q] tho\u00e1t.","Please provide at least 6 characters for store name.":"T\u00ean c\u1eeda h\u00e0ng \u00edt nh\u1ea5t 6 k\u00fd t\u1ef1.","What is the administrator password ? [Q] to quit.":"M\u1eadt kh\u1ea9u administrator ? [Q] tho\u00e1t.","Please provide at least 6 characters for the administrator password.":"M\u1eadt kh\u1ea9u administrator ch\u1ee9a \u00edt nh\u1ea5t 6 k\u00fd t\u1ef1.","What is the administrator email ? [Q] to quit.":"\u0110i\u1ec1n email administrator ? [Q] tho\u00e1t.","Please provide a valid email for the administrator.":"\u0110i\u1ec1n email h\u1ee3p l\u1ec7 cho administrator.","What is the administrator username ? [Q] to quit.":"T\u00ean administrator ? [Q] tho\u00e1t.","Please provide at least 5 characters for the administrator username.":"T\u00ean administrator c\u00f3 \u00edt nh\u1ea5t 5 k\u00fd t\u1ef1.","Downloading latest dev build...":"Downloading latest dev build...","Reset project to HEAD...":"Reset project to HEAD...","Coupons List":"Danh s\u00e1ch phi\u1ebfu gi\u1ea3m gi\u00e1","Display all coupons.":"Hi\u1ec7n t\u1ea5t c\u1ea3 phi\u1ebfu gi\u1ea3m gi\u00e1.","No coupons has been registered":"Kh\u00f4ng c\u00f3 phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new coupon":"Th\u00eam m\u1edbi phi\u1ebfu gi\u1ea3m gi\u00e1","Create a new coupon":"T\u1ea1o m\u1edbi phi\u1ebfu gi\u1ea3m gi\u00e1","Register a new coupon and save it.":"\u0110\u0103ng k\u00fd m\u1edbi phi\u1ebfu gi\u1ea3m gi\u00e1.","Edit coupon":"S\u1eeda phi\u1ebfu gi\u1ea3m gi\u00e1","Modify Coupon.":"C\u1eadp nh\u1eadt phi\u1ebfu gi\u1ea3m gi\u00e1.","Return to Coupons":"Quay l\u1ea1i phi\u1ebfu gi\u1ea3m gi\u00e1","Might be used while printing the coupon.":"C\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong khi in phi\u1ebfu gi\u1ea3m gi\u00e1.","Percentage Discount":"Ph\u1ea7n tr\u0103m chi\u1ebft kh\u1ea5u","Flat Discount":"S\u1ed1 ti\u1ec1n chi\u1ebft kh\u1ea5u","Define which type of discount apply to the current coupon.":"X\u00e1c \u0111\u1ecbnh lo\u1ea1i chi\u1ebft kh\u1ea5u cho phi\u1ebfu gi\u1ea3m gi\u00e1.","Discount Value":"Ti\u1ec1n chi\u1ebft kh\u1ea5u","Define the percentage or flat value.":"X\u00e1c \u0111\u1ecbnh ph\u1ea7n tr\u0103m ho\u1eb7c s\u1ed1 ti\u1ec1n.","Valid Until":"C\u00f3 gi\u00e1 tr\u1ecb \u0111\u1ebfn","Minimum Cart Value":"Gi\u00e1 tr\u1ecb gi\u1ecf h\u00e0ng t\u1ed1i thi\u1ec3u","What is the minimum value of the cart to make this coupon eligible.":"Gi\u00e1 tr\u1ecb t\u1ed1i thi\u1ec3u c\u1ee7a gi\u1ecf h\u00e0ng l\u00e0 g\u00ec \u0111\u1ec3 l\u00e0m cho phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0y \u0111\u1ee7 \u0111i\u1ec1u ki\u1ec7n.","Maximum Cart Value":"Gi\u00e1 tr\u1ecb gi\u1ecf h\u00e0ng t\u1ed1i \u0111a","Valid Hours Start":"Gi\u1edd h\u1ee3p l\u1ec7 t\u1eeb","Define form which hour during the day the coupons is valid.":"Quy \u0111\u1ecbnh bi\u1ec3u m\u1eabu n\u00e0o trong ng\u00e0y phi\u1ebfu gi\u1ea3m gi\u00e1 h\u1ee3p l\u1ec7.","Valid Hours End":"Gi\u1edd k\u1ebft th\u00fac","Define to which hour during the day the coupons end stop valid.":"Quy \u0111\u1ecbnh gi\u1edd n\u00e0o trong ng\u00e0y phi\u1ebfu gi\u1ea3m gi\u00e1 k\u1ebft th\u00fac.","Limit Usage":"Gi\u1edbi h\u1ea1n s\u1eed d\u1ee5ng","Define how many time a coupons can be redeemed.":"Quy \u0111\u1ecbnh s\u1ed1 l\u1ea7n phi\u1ebfu gi\u1ea3m gi\u00e1 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c \u0111\u1ed5i.","Select Products":"Ch\u1ecdn s\u1ea3n ph\u1ea9m","The following products will be required to be present on the cart, in order for this coupon to be valid.":"C\u00e1c s\u1ea3n ph\u1ea9m sau \u0111\u00e2y s\u1ebd \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u ph\u1ea3i c\u00f3 m\u1eb7t tr\u00ean gi\u1ecf h\u00e0ng, \u0111\u1ec3 phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0y c\u00f3 gi\u00e1 tr\u1ecb.","Select Categories":"Ch\u1ecdn nh\u00f3m","The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.":"C\u00e1c s\u1ea3n ph\u1ea9m \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh cho m\u1ed9t trong c\u00e1c danh m\u1ee5c n\u00e0y ph\u1ea3i c\u00f3 tr\u00ean gi\u1ecf h\u00e0ng, \u0111\u1ec3 phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0y c\u00f3 gi\u00e1 tr\u1ecb.","Created At":"\u0110\u01b0\u1ee3c t\u1ea1o b\u1edfi","Undefined":"Kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Delete a licence":"X\u00f3a gi\u1ea5y ph\u00e9p","Customer Coupons List":"Danh s\u00e1ch phi\u1ebfu gi\u1ea3m gi\u00e1 c\u1ee7a kh\u00e1ch h\u00e0ng","Display all customer coupons.":"Hi\u1ec7n to\u00e0n b\u1ed9 phi\u1ebfu gi\u1ea3m gi\u00e1 c\u1ee7a kh\u00e1ch h\u00e0ng.","No customer coupons has been registered":"Kh\u00f4ng c\u00f3 phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0o c\u1ee7a kh\u00e1ch h\u00e0ng \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new customer coupon":"Th\u00eam m\u1edbi phi\u1ebfu gi\u1ea3m gi\u00e1 cho kh\u00e1ch h\u00e0ng","Create a new customer coupon":"T\u1ea1o m\u1edbi phi\u1ebfu gi\u1ea3m gi\u00e1 cho kh\u00e1ch h\u00e0ng","Register a new customer coupon and save it.":"\u0110\u0103ng k\u00fd phi\u1ebfu gi\u1ea3m gi\u00e1 cho kh\u00e1ch h\u00e0ng.","Edit customer coupon":"S\u1eeda phi\u1ebfu gi\u1ea3m gi\u00e1","Modify Customer Coupon.":"C\u1eadp nh\u1eadt phi\u1ebfu gi\u1ea3m gi\u00e1.","Return to Customer Coupons":"Quay l\u1ea1i phi\u1ebfu gi\u1ea3m gi\u00e1","Id":"Id","Limit":"Gi\u1edbi h\u1ea1n","Created_at":"T\u1ea1o b\u1edfi","Updated_at":"S\u1eeda b\u1edfi","Code":"Code","Customers List":"Danh s\u00e1ch kh\u00e1ch h\u00e0ng","Display all customers.":"Hi\u1ec7n t\u1ea5t c\u1ea3 kh\u00e1ch h\u00e0ng.","No customers has been registered":"Ch\u01b0a c\u00f3 kh\u00e1ch h\u00e0ng n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new customer":"Th\u00eam kh\u00e1ch h\u00e0ng","Create a new customer":"T\u1ea1o m\u1edbi kh\u00e1ch h\u00e0ng","Register a new customer and save it.":"\u0110\u0103ng k\u00fd m\u1edbi kh\u00e1ch h\u00e0ng.","Edit customer":"S\u1eeda kh\u00e1ch h\u00e0ng","Modify Customer.":"C\u1eadp nh\u1eadt kh\u00e1ch h\u00e0ng.","Return to Customers":"Quay l\u1ea1i kh\u00e1ch h\u00e0ng","Provide a unique name for the customer.":"T\u00ean kh\u00e1ch h\u00e0ng.","Group":"Nh\u00f3m","Assign the customer to a group":"G\u00e1n kh\u00e1ch h\u00e0ng v\u00e0o nh\u00f3m","Phone Number":"\u0110i\u1ec7n tho\u1ea1i","Provide the customer phone number":"Nh\u1eadp \u0111i\u1ec7n tho\u1ea1i kh\u00e1ch h\u00e0ng","PO Box":"H\u00f2m th\u01b0","Provide the customer PO.Box":"Nh\u1eadp \u0111\u1ecba ch\u1ec9 h\u00f2m th\u01b0","Not Defined":"Kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Male":"\u0110\u00e0n \u00f4ng","Female":"\u0110\u00e0n b\u00e0","Gender":"Gi\u1edbi t\u00ednh","Billing Address":"\u0110\u1ecba ch\u1ec9 thanh to\u00e1n","Billing phone number.":"S\u1ed1 \u0111i\u1ec7n tho\u1ea1i.","Address 1":"\u0110\u1ecba ch\u1ec9 1","Billing First Address.":"\u0110\u1ecba ch\u1ec9 thanh to\u00e1n 1.","Address 2":"\u0110\u1ecba ch\u1ec9 thanh to\u00e1n 2","Billing Second Address.":".","Country":"Qu\u1ed1c gia","Billing Country.":"Qu\u1ed1c gia.","Postal Address":"\u0110\u1ecba ch\u1ec9 h\u00f2m th\u01b0","Company":"C\u00f4ng ty","Shipping Address":"\u0110\u1ecba ch\u1ec9 ng\u01b0\u1eddi chuy\u1ec3n h\u00e0ng","Shipping phone number.":"\u0110i\u1ec7n tho\u1ea1i ng\u01b0\u1eddi chuy\u1ec3n h\u00e0ng.","Shipping First Address.":"\u0110\u1ecba ch\u1ec9 1 ng\u01b0\u1eddi chuy\u1ec3n h\u00e0ng.","Shipping Second Address.":".","Shipping Country.":"Qu\u1ed1c gia ng\u01b0\u1eddi chuy\u1ec3n h\u00e0ng.","Account Credit":"T\u00edn d\u1ee5ng","Owed Amount":"S\u1ed1 ti\u1ec1n n\u1ee3","Purchase Amount":"Ti\u1ec1n mua h\u00e0ng","Rewards":"Th\u01b0\u1edfng","Delete a customers":"X\u00f3a kh\u00e1ch h\u00e0ng","Delete Selected Customers":"X\u00f3a kh\u00e1ch h\u00e0ng \u0111\u00e3 ch\u1ecdn","Customer Groups List":"Danh s\u00e1ch nh\u00f3m kh\u00e1ch h\u00e0ng","Display all Customers Groups.":"Hi\u1ec7n t\u1ea5t c\u1ea3 nh\u00f3m kh\u00e1ch.","No Customers Groups has been registered":"Ch\u01b0a c\u00f3 nh\u00f3m kh\u00e1ch n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new Customers Group":"Th\u00eam m\u1edbi nh\u00f3m kh\u00e1ch","Create a new Customers Group":"T\u1ea1o m\u1edbi nh\u00f3m kh\u00e1ch","Register a new Customers Group and save it.":"\u0110\u0103ng k\u00fd m\u1edbi nh\u00f3m kh\u00e1ch.","Edit Customers Group":"S\u1eeda nh\u00f3m kh\u00e1ch","Modify Customers group.":"C\u1eadp nh\u1eadt nh\u00f3m kh\u00e1ch.","Return to Customers Groups":"Quay l\u1ea1i nh\u00f3m kh\u00e1ch","Reward System":"H\u1ec7 th\u1ed1ng th\u01b0\u1edfng","Select which Reward system applies to the group":"Ch\u1ecdn h\u1ec7 th\u1ed1ng Ph\u1ea7n th\u01b0\u1edfng n\u00e0o \u00e1p d\u1ee5ng cho nh\u00f3m","Minimum Credit Amount":"S\u1ed1 ti\u1ec1n t\u00edn d\u1ee5ng t\u1ed1i thi\u1ec3u","A brief description about what this group is about":"M\u1ed9t m\u00f4 t\u1ea3 ng\u1eafn g\u1ecdn v\u1ec1 nh\u00f3m n\u00e0y","Created On":"T\u1ea1o tr\u00ean","Customer Orders List":"Danh s\u00e1ch \u0111\u01a1n \u0111\u1eb7t h\u00e0ng c\u1ee7a kh\u00e1ch h\u00e0ng","Display all customer orders.":"Hi\u1ec7n t\u1ea5t c\u1ea3 \u0111\u01a1n c\u1ee7a kh\u00e1ch.","No customer orders has been registered":"Kh\u00f4ng c\u00f3 kh\u00e1ch n\u00e0o \u0111\u0103ng k\u00fd","Add a new customer order":"Th\u00eam m\u1edbi \u0111\u01a1n cho kh\u00e1ch","Create a new customer order":"T\u1ea1o m\u1edbi \u0111\u01a1n cho kh\u00e1ch","Register a new customer order and save it.":"\u0110\u0103ng k\u00fd \u0111\u01a1n cho kh\u00e1ch.","Edit customer order":"S\u1eeda \u0111\u01a1n","Modify Customer Order.":"C\u1eadp nh\u1eadt \u0111\u01a1n.","Return to Customer Orders":"Tr\u1ea3 \u0111\u01a1n","Created at":"T\u1ea1o b\u1edfi","Customer Id":"M\u00e3 kh\u00e1ch","Discount Percentage":"T\u1ef7 l\u1ec7 chi\u1ebft kh\u1ea5u(%)","Discount Type":"Lo\u1ea1i chi\u1ebft kh\u1ea5u","Final Payment Date":"Ng\u00e0y cu\u1ed1i c\u00f9ng thanh to\u00e1n","Process Status":"Tr\u1ea1ng th\u00e1i","Shipping Rate":"Gi\u00e1 c\u01b0\u1edbc v\u1eadn chuy\u1ec3n","Shipping Type":"Lo\u1ea1i v\u1eadn chuy\u1ec3n","Title":"Ti\u00eau \u0111\u1ec1","Total installments":"T\u1ed5ng s\u1ed1 \u0111\u1ee3t","Updated at":"C\u1eadp nh\u1eadt b\u1edfi","Uuid":"Uuid","Voidance Reason":"L\u00fd do","Customer Rewards List":"Danh s\u00e1ch ph\u1ea7n th\u01b0\u1edfng c\u1ee7a kh\u00e1ch","Display all customer rewards.":"Hi\u1ec7n t\u1ea5t c\u1ea3 ph\u1ea7n th\u01b0\u1edfng.","No customer rewards has been registered":"Ch\u01b0a c\u00f3 ph\u1ea7n th\u01b0\u1edfng n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new customer reward":"Th\u00eam m\u1edbi ph\u1ea7n th\u01b0\u1edfng","Create a new customer reward":"T\u1ea1o m\u1edbi ph\u1ea7n th\u01b0\u1edfng","Register a new customer reward and save it.":"\u0110\u0103ng k\u00fd ph\u1ea7n th\u01b0\u1edfng.","Edit customer reward":"S\u1eeda ph\u1ea7n th\u01b0\u1edfng","Modify Customer Reward.":"C\u1eadp nh\u1eadt ph\u1ea7n th\u01b0\u1edfng.","Return to Customer Rewards":"Tr\u1ea3 th\u01b0\u1edfng cho kh\u00e1ch","Points":"\u0110i\u1ec3m s\u1ed1","Target":"M\u1ee5c ti\u00eau","Reward Name":"T\u00ean ph\u1ea7n th\u01b0\u1edfng","Last Update":"C\u1eadp nh\u1eadt cu\u1ed1i","Active":"K\u00edch ho\u1ea1t","Users Group":"Nh\u00f3m ng\u01b0\u1eddi d\u00f9ng","None":"Kh\u00f4ng","Recurring":"L\u1eb7p l\u1ea1i","Start of Month":"\u0110\u1ea7u th\u00e1ng","Mid of Month":"Gi\u1eefa th\u00e1ng","End of Month":"Cu\u1ed1i th\u00e1ng","X days Before Month Ends":"S\u1ed1 ng\u00e0y tr\u01b0\u1edbc khi k\u1ebft th\u00fac th\u00e1ng","X days After Month Starts":"S\u1ed1 ng\u00e0y \u0111\u1ebfn \u0111\u1ea7u th\u00e1ng kh\u00e1c","Occurrence":"X\u1ea3y ra","Occurrence Value":"Gi\u00e1 tr\u1ecb chi ph\u00ed x\u1ea3y ra","Must be used in case of X days after month starts and X days before month ends.":"Ph\u1ea3i \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong tr\u01b0\u1eddng h\u1ee3p s\u1ed1 ng\u00e0y t\u00ednh t\u1eeb \u0111\u1ea7u th\u00e1ng v\u00e0 s\u1ed1 ng\u00e0y \u0111\u1ebfn cu\u1ed1i th\u00e1ng.","Category":"Nh\u00f3m h\u00e0ng","Month Starts":"Th\u00e1ng b\u1eaft \u0111\u1ea7u","Month Middle":"Gi\u1eefa th\u00e1ng","Month Ends":"Th\u00e1ng k\u1ebft th\u00fac","X Days Before Month Ends":"S\u1ed1 ng\u00e0y sau khi th\u00e1ng k\u1ebft th\u00fac","Updated At":"C\u1eadp nh\u1eadt b\u1edfi","Hold Orders List":"Danh s\u00e1ch \u0111\u01a1n c\u1ea5t gi\u1eef","Display all hold orders.":"Hi\u1ec7n t\u1ea5t c\u1ea3 c\u00e1c \u0111\u01a1n c\u1ea5t gi\u1eef.","No hold orders has been registered":"Kh\u00f4ng c\u00f3 \u0111\u01a1n n\u00e0o \u0111\u01b0\u1ee3c c\u1ea5t gi\u1eef","Add a new hold order":"Th\u00eam \u0111\u01a1n c\u1ea5t gi\u1eef","Create a new hold order":"T\u1ea1o m\u1edbi \u0111\u01a1n c\u1ea5t gi\u1eef","Register a new hold order and save it.":"\u0110\u0103ng k\u00fd \u0111\u01a1n c\u1ea5t gi\u1eef.","Edit hold order":"S\u1eeda \u0111\u01a1n c\u1ea5t gi\u1eef","Modify Hold Order.":"C\u1eadp nh\u1eadt \u0111\u01a1n c\u1ea5t gi\u1eef.","Return to Hold Orders":"Quay l\u1ea1i \u0111\u01a1n c\u1ea5t gi\u1eef","Orders List":"Danh s\u00e1ch \u0111\u01a1n","Display all orders.":"Hi\u1ec7n t\u1ea5t c\u1ea3 c\u00e1c \u0111\u01a1n.","No orders has been registered":"Kh\u00f4ng c\u00f3 \u0111\u01a1n n\u00e0o","Add a new order":"Th\u00eam m\u1edbi \u0111\u01a1n","Create a new order":"T\u1ea1o m\u1edbi \u0111\u01a1n","Register a new order and save it.":"\u0110\u0103ng k\u00fd \u0111\u01a1n.","Edit order":"S\u1eeda \u0111\u01a1n","Modify Order.":"C\u1eadp nh\u1eadt \u0111\u01a1n.","Return to Orders":"Quay l\u1ea1i \u0111\u01a1n","Discount Rate":"T\u1ec9 l\u1ec7 chi\u1ebft kh\u1ea5u","The order and the attached products has been deleted.":"\u0110\u01a1n \u0111\u1eb7t h\u00e0ng v\u00e0 c\u00e1c s\u1ea3n ph\u1ea9m \u0111\u00ednh k\u00e8m \u0111\u00e3 b\u1ecb x\u00f3a.","Invoice":"H\u00f3a \u0111\u01a1n","Receipt":"Bi\u00ean lai","Order Instalments List":"Danh s\u00e1ch \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p","Display all Order Instalments.":"Hi\u1ec7n t\u1ea5t c\u1ea3 c\u00e1c \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p.","No Order Instalment has been registered":"Kh\u00f4ng c\u00f3 \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new Order Instalment":"Th\u00eam \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p","Create a new Order Instalment":"T\u1ea1o m\u1edbi \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p","Register a new Order Instalment and save it.":"\u0110\u0103ng k\u00fd \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p.","Edit Order Instalment":"S\u1eeda \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p","Modify Order Instalment.":"C\u1eadp nh\u1eadt \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p.","Return to Order Instalment":"Quay l\u1ea1i \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p","Order Id":"M\u00e3 \u0111\u01a1n","Payment Types List":"Danh s\u00e1ch ki\u1ec3u thanh to\u00e1n","Display all payment types.":"Hi\u1ec7n t\u1ea5t c\u1ea3 c\u00e1c ki\u1ec3u thanh to\u00e1n.","No payment types has been registered":"Kh\u00f4ng c\u00f3 ki\u1ec3u thanh to\u00e1n n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new payment type":"Th\u00eam m\u1edbi ki\u1ec3u thanh to\u00e1n","Create a new payment type":"T\u1ea1o m\u1edbi ki\u1ec3u thanh to\u00e1n","Register a new payment type and save it.":"\u0110\u0103ng k\u00fd ki\u1ec3u thanh to\u00e1n.","Edit payment type":"S\u1eeda ki\u1ec3u thanh to\u00e1n","Modify Payment Type.":"C\u1eadp nh\u1eadt ki\u1ec3u thanh to\u00e1n.","Return to Payment Types":"Quay l\u1ea1i ki\u1ec3u thanh to\u00e1n","Label":"Nh\u00e3n","Provide a label to the resource.":"Cung c\u1ea5p nh\u00e3n.","Identifier":"\u0110\u1ecbnh danh","A payment type having the same identifier already exists.":"M\u1ed9t ki\u1ec3u thanh to\u00e1n c\u00f3 c\u00f9ng \u0111\u1ecbnh danh \u0111\u00e3 t\u1ed3n t\u1ea1i.","Unable to delete a read-only payments type.":"Kh\u00f4ng th\u1ec3 x\u00f3a ki\u1ec3u thanh to\u00e1n \u0111ang \u1edf ch\u1ebf \u0111\u1ed9 ch\u1ec9 \u0111\u1ecdc.","Readonly":"Ch\u1ec9 \u0111\u1ecdc","Procurements List":"Danh s\u00e1ch mua h\u00e0ng","Display all procurements.":"Hi\u1ec7n t\u1ea5t c\u1ea3 danh s\u00e1ch mua h\u00e0ng.","No procurements has been registered":"Kh\u00f4ng c\u00f3 danh s\u00e1ch mua h\u00e0ng \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new procurement":"Th\u00eam m\u1edbi mua h\u00e0ng","Create a new procurement":"T\u1ea1o m\u1edbi mua h\u00e0ng","Register a new procurement and save it.":"\u0110\u0103ng k\u00fd mua h\u00e0ng.","Edit procurement":"S\u1eeda mua h\u00e0ng","Modify Procurement.":"C\u1eadp nh\u1eadt mua h\u00e0ng.","Return to Procurements":"Quay l\u1ea1i mua h\u00e0ng","Provider Id":"M\u00e3 nh\u00e0 cung c\u1ea5p","Total Items":"S\u1ed1 m\u1ee5c","Provider":"Nh\u00e0 cung c\u1ea5p","Stocked":"Th\u1ea3","Procurement Products List":"Danh s\u00e1ch h\u00e0ng mua","Display all procurement products.":"Hi\u1ec7n t\u1ea5t c\u1ea3 h\u00e0ng mua.","No procurement products has been registered":"Ch\u01b0a c\u00f3 h\u00e0ng mua n\u00e0o","Add a new procurement product":"Th\u00eam m\u1edbi h\u00e0ng mua","Create a new procurement product":"T\u1ea1o m\u1edbi h\u00e0ng mua","Register a new procurement product and save it.":"\u0110\u0103ng k\u00fd m\u1edbi h\u00e0ng mua.","Edit procurement product":"S\u1eeda h\u00e0ng mua","Modify Procurement Product.":"C\u1eadp nh\u1eadt h\u00e0ng mua.","Return to Procurement Products":"Quay l\u1ea1i h\u00e0ng mua","Define what is the expiration date of the product.":"Ng\u00e0y h\u1ebft h\u1ea1n.","On":"Tr\u00ean","Category Products List":"Nh\u00f3m s\u1ea3n ph\u1ea9m","Display all category products.":"Hi\u1ec7n t\u1ea5t c\u1ea3 nh\u00f3m s\u1ea3n ph\u1ea9m.","No category products has been registered":"Ch\u01b0a c\u00f3 nh\u00f3m s\u1ea3n ph\u1ea9m n\u00e0o \u0111\u0103ng k\u00fd","Add a new category product":"Th\u00eam nh\u00f3m s\u1ea3n ph\u1ea9m","Create a new category product":"T\u1ea1o m\u1edbi nh\u00f3m s\u1ea3n ph\u1ea9m","Register a new category product and save it.":"\u0110\u0103ng k\u00fd nh\u00f3m s\u1ea3n ph\u1ea9m.","Edit category product":"S\u1eeda nh\u00f3m s\u1ea3n ph\u1ea9m","Modify Category Product.":"C\u1eadp nh\u1eadt nh\u00f3m s\u1ea3n ph\u1ea9m.","Return to Category Products":"Quay l\u1ea1i nh\u00f3m s\u1ea3n ph\u1ea9m","No Parent":"Kh\u00f4ng c\u00f3 nh\u00f3m cha","Preview":"Xem","Provide a preview url to the category.":"\u0110\u01b0\u1eddng d\u1eabn \u0111\u1ec3 xem nh\u00f3m.","Displays On POS":"Hi\u1ec7n tr\u00ean m\u00e0n h\u00ecnh b\u00e1n h\u00e0ng","Parent":"Cha","If this category should be a child category of an existing category":"N\u1ebfu nh\u00f3m n\u00e0y ph\u1ea3i l\u00e0 nh\u00f3m con c\u1ee7a nh\u00f3m hi\u1ec7n c\u00f3","Total Products":"T\u1ed5ng s\u1ed1 s\u1ea3n ph\u1ea9m","Products List":"Danh s\u00e1ch s\u1ea3n ph\u1ea9m","Display all products.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 s\u1ea3n ph\u1ea9m.","No products has been registered":"Ch\u01b0a c\u00f3 s\u1ea3n ph\u1ea9m n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new product":"Th\u00eam m\u1edbi s\u1ea3n ph\u1ea9m","Create a new product":"T\u1ea1o m\u1edbi s\u1ea3n ph\u1ea9m","Register a new product and save it.":"\u0110\u0103ng k\u00fd m\u1edbi s\u1ea3n ph\u1ea9m.","Edit product":"S\u1eeda s\u1ea3n ph\u1ea9m","Modify Product.":"C\u1eadp nh\u1eadt s\u1ea3n ph\u1ea9m.","Return to Products":"Quay l\u1ea1i s\u1ea3n ph\u1ea9m","Assigned Unit":"G\u00e1n \u0111\u01a1n v\u1ecb t\u00ednh","The assigned unit for sale":"\u0110\u01a1n v\u1ecb t\u00ednh \u0111\u01b0\u1ee3c ph\u00e9p b\u00e1n","Define the regular selling price.":"Gi\u00e1 b\u00e1n.","Define the wholesale price.":"Gi\u00e1 b\u00e1n s\u1ec9.","Preview Url":"\u0110\u01b0\u1eddng d\u1eabn \u0111\u1ec3 xem","Provide the preview of the current unit.":"Cung c\u1ea5p b\u1ea3n xem tr\u01b0\u1edbc c\u1ee7a \u0111\u01a1n v\u1ecb hi\u1ec7n t\u1ea1i.","Identification":"X\u00e1c \u0111\u1ecbnh","Define the barcode value. Focus the cursor here before scanning the product.":"X\u00e1c \u0111\u1ecbnh m\u00e3 v\u1ea1ch, k\u00edch con tr\u1ecf \u0111\u1ec3 quy\u00e9t s\u1ea3n ph\u1ea9m.","Define the barcode type scanned.":"X\u00e1c \u0111\u1ecbnh lo\u1ea1i m\u00e3 v\u1ea1ch.","EAN 8":"EAN 8","EAN 13":"EAN 13","Barcode Type":"Lo\u1ea1i m\u00e3 v\u1ea1ch","Select to which category the item is assigned.":"Ch\u1ecdn nh\u00f3m m\u00e0 h\u00e0ng h\u00f3a \u0111\u01b0\u1ee3c g\u00e1n.","Materialized Product":"H\u00e0ng h\u00f3a","Dematerialized Product":"D\u1ecbch v\u1ee5","Define the product type. Applies to all variations.":"X\u00e1c \u0111\u1ecbnh lo\u1ea1i s\u1ea3n ph\u1ea9m.","Product Type":"Lo\u1ea1i s\u1ea3n ph\u1ea9m","Define a unique SKU value for the product.":"Quy \u0111\u1ecbnh m\u00e3 s\u1ea3n ph\u1ea9m.","On Sale":"\u0110\u1ec3 b\u00e1n","Hidden":"\u1ea8n","Define whether the product is available for sale.":"Quy \u0111\u1ecbnh s\u1ea3n ph\u1ea9m c\u00f3 s\u1eb5n \u0111\u1ec3 b\u00e1n hay kh\u00f4ng.","Enable the stock management on the product. Will not work for service or uncountable products.":"Cho ph\u00e9p qu\u1ea3n l\u00fd c\u1ed5 phi\u1ebfu tr\u00ean s\u1ea3n ph\u1ea9m. S\u1ebd kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng cho d\u1ecbch v\u1ee5 ho\u1eb7c c\u00e1c s\u1ea3n ph\u1ea9m kh\u00f4ng th\u1ec3 \u0111\u1ebfm \u0111\u01b0\u1ee3c.","Stock Management Enabled":"\u0110\u01b0\u1ee3c k\u00edch ho\u1ea1t qu\u1ea3n l\u00fd kho","Units":"\u0110\u01a1n v\u1ecb t\u00ednh","Accurate Tracking":"Theo d\u00f5i ch\u00ednh x\u00e1c","What unit group applies to the actual item. This group will apply during the procurement.":"Nh\u00f3m \u0111\u01a1n v\u1ecb n\u00e0o \u00e1p d\u1ee5ng cho b\u00e1n h\u00e0ng th\u1ef1c t\u1ebf. Nh\u00f3m n\u00e0y s\u1ebd \u00e1p d\u1ee5ng trong qu\u00e1 tr\u00ecnh mua s\u1eafm.","Unit Group":"Nh\u00f3m \u0111\u01a1n v\u1ecb","Determine the unit for sale.":"Quy \u0111\u1ecbnh b\u00e1n h\u00e0ng b\u1eb1ng \u0111\u01a1n v\u1ecb t\u00ednh n\u00e0o.","Selling Unit":"\u0110\u01a1n v\u1ecb t\u00ednh b\u00e1n h\u00e0ng","Expiry":"H\u1ebft h\u1ea1n","Product Expires":"S\u1ea3n ph\u1ea9m h\u1ebft h\u1ea1n","Set to \"No\" expiration time will be ignored.":"C\u00e0i \u0111\u1eb7t \"No\" s\u1ea3n ph\u1ea9m kh\u00f4ng theo d\u00f5i th\u1eddi gian h\u1ebft h\u1ea1n.","Prevent Sales":"Kh\u00f4ng \u0111\u01b0\u1ee3c b\u00e1n","Allow Sales":"\u0110\u01b0\u1ee3c ph\u00e9p b\u00e1n","Determine the action taken while a product has expired.":"Quy \u0111\u1ecbnh c\u00e1ch th\u1ef1c hi\u1ec7n cho s\u1ea3n ph\u1ea9m h\u1ebft h\u1ea1n.","On Expiration":"Khi h\u1ebft h\u1ea1n","Select the tax group that applies to the product\/variation.":"Ch\u1ecdn nh\u00f3m thu\u1ebf \u00e1p d\u1ee5ng cho s\u1ea3n ph\u1ea9m\/bi\u1ebfn th\u1ec3(\u0111vt kh\u00e1c).","Tax Group":"Nh\u00f3m thu\u1ebf","Define what is the type of the tax.":"Quy \u0111\u1ecbnh lo\u1ea1i thu\u1ebf.","Images":"B\u1ed9 s\u01b0u t\u1eadp \u1ea3nh","Image":"\u1ea2nh","Choose an image to add on the product gallery":"Ch\u1ecdn \u1ea3nh \u0111\u1ec3 th\u00eam v\u00e0o b\u1ed9 s\u01b0u t\u1eadp \u1ea3nh c\u1ee7a s\u1ea3n ph\u1ea9m","Is Primary":"L\u00e0m \u1ea3nh ch\u00ednh","Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.":"X\u00e1c \u0111\u1ecbnh \u0111\u00e2u l\u00e0 h\u00ecnh \u1ea3nh ch\u00ednh. N\u1ebfu c\u00f3 nhi\u1ec1u h\u01a1n m\u1ed9t h\u00ecnh \u1ea3nh ch\u00ednh, m\u1ed9t h\u00ecnh \u1ea3nh s\u1ebd \u0111\u01b0\u1ee3c ch\u1ecdn cho b\u1ea1n.","Sku":"M\u00e3 h\u00e0ng h\u00f3a","Materialized":"H\u00e0ng h\u00f3a","Dematerialized":"D\u1ecbch v\u1ee5","Available":"C\u00f3 s\u1eb5n","See Quantities":"Xem s\u1ed1 l\u01b0\u1ee3ng","See History":"Xem l\u1ecbch s\u1eed","Would you like to delete selected entries ?":"B\u1ea1n mu\u1ed1n x\u00f3a m\u1ee5c \u0111\u00e3 ch\u1ecdn ?","Product Histories":"L\u1ecbch s\u1eed h\u00e0ng h\u00f3a","Display all product histories.":"Hi\u1ec7n to\u00e0n b\u1ed9 l\u1ecbch s\u1eed h\u00e0ng h\u00f3a.","No product histories has been registered":"Kh\u00f4ng c\u00f3 h\u00e0ng h\u00f3a n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new product history":"Th\u00eam l\u1ecbch s\u1eed h\u00e0ng h\u00f3a","Create a new product history":"T\u1ea1o m\u1edbi l\u1ecbch s\u1eed h\u00e0ng h\u00f3a","Register a new product history and save it.":"\u0110\u0103ng k\u00fd l\u1ecbch s\u1eed h\u00e0ng h\u00f3a.","Edit product history":"S\u1eeda l\u1ecbch s\u1eed h\u00e0ng h\u00f3a","Modify Product History.":"C\u1eadp nh\u1eadt l\u1ecbch s\u1eed h\u00e0ng h\u00f3a.","Return to Product Histories":"Quay l\u1ea1i l\u1ecbch s\u1eed h\u00e0ng h\u00f3a","After Quantity":"Sau s\u1ed1 l\u01b0\u1ee3ng","Before Quantity":"Tr\u01b0\u1edbc s\u1ed1 l\u01b0\u1ee3ng","Operation Type":"Ki\u1ec3u ho\u1ea1t \u0111\u1ed9ng","Order id":"M\u00e3 \u0111\u01a1n","Procurement Id":"M\u00e3 mua h\u00e0ng","Procurement Product Id":"M\u00e3 h\u00e0ng mua","Product Id":"M\u00e3 h\u00e0ng h\u00f3a","Unit Id":"M\u00e3 \u0111vt","P. Quantity":"P. S\u1ed1 l\u01b0\u1ee3ng","N. Quantity":"N. S\u1ed1 l\u01b0\u1ee3ng","Defective":"L\u1ed7i","Deleted":"X\u00f3a","Removed":"G\u1ee1 b\u1ecf","Returned":"Tr\u1ea3 l\u1ea1i","Sold":"B\u00e1n","Added":"Th\u00eam","Incoming Transfer":"Chuy\u1ec3n \u0111\u1ebfn","Outgoing Transfer":"Chuy\u1ec3n \u0111i","Transfer Rejected":"T\u1eeb ch\u1ed1i chuy\u1ec3n","Transfer Canceled":"H\u1ee7y chuy\u1ec3n","Void Return":"Quay l\u1ea1i","Adjustment Return":"\u0110i\u1ec1u ch\u1ec9nh l\u1ea1i","Adjustment Sale":"\u0110i\u1ec1u ch\u1ec9nh b\u00e1n","Product Unit Quantities List":"Danh s\u00e1ch s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m","Display all product unit quantities.":"Hi\u1ec7n to\u00e0n b\u1ed9 s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m.","No product unit quantities has been registered":"Kh\u00f4ng c\u00f3 s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new product unit quantity":"Th\u00eam s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m","Create a new product unit quantity":"T\u1ea1o m\u1edbi s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m","Register a new product unit quantity and save it.":"\u0110\u0103ng k\u00fd s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m.","Edit product unit quantity":"S\u1eeda s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m","Modify Product Unit Quantity.":"C\u1eadp nh\u1eadt s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m.","Return to Product Unit Quantities":"Quay l\u1ea1i s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m","Product id":"M\u00e3 s\u1ea3n ph\u1ea9m","Providers List":"Danh s\u00e1ch nh\u00e0 cung c\u1ea5p","Display all providers.":"Hi\u1ec3n th\u1ecb to\u00e0n b\u1ed9 nh\u00e0 cung c\u1ea5p.","No providers has been registered":"Kh\u00f4ng c\u00f3 nh\u00e0 cung c\u1ea5p n\u00e0o \u0111\u01b0\u1ee3c t\u1ea1o","Add a new provider":"Th\u00eam nh\u00e0 cung c\u1ea5p","Create a new provider":"T\u1ea1o m\u1edbi nh\u00e0 cung c\u1ea5p","Register a new provider and save it.":"\u0110\u0103ng k\u00fd nh\u00e0 cung c\u1ea5p.","Edit provider":"S\u1eeda nh\u00e0 cung c\u1ea5p","Modify Provider.":"C\u1eadp nh\u1eadt nh\u00e0 cung c\u1ea5p.","Return to Providers":"Tr\u1ea3 l\u1ea1i nh\u00e0 cung c\u1ea5p","Provide the provider email. Might be used to send automated email.":"Cung c\u1ea5p email c\u1ee7a nh\u00e0 cung c\u1ea5p. C\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 g\u1eedi email t\u1ef1 \u0111\u1ed9ng h\u00f3a.","Contact phone number for the provider. Might be used to send automated SMS notifications.":"S\u1ed1 \u0111i\u1ec7n tho\u1ea1i li\u00ean h\u1ec7 c\u1ee7a nh\u00e0 cung c\u1ea5p. C\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 g\u1eedi th\u00f4ng b\u00e1o SMS t\u1ef1 \u0111\u1ed9ng.","First address of the provider.":"\u0110\u1ecba ch\u1ec9 1 nh\u00e0 cung c\u1ea5p.","Second address of the provider.":"\u0110\u1ecba ch\u1ec9 2 nh\u00e0 cung c\u1ea5p.","Further details about the provider":"Th\u00f4ng tin chi ti\u1ebft v\u1ec1 nh\u00e0 cung c\u1ea5p","Amount Due":"S\u1ed1 ti\u1ec1n \u0111\u1ebfn h\u1ea1n","Amount Paid":"S\u1ed1 ti\u1ec1n \u0111\u00e3 tr\u1ea3","See Procurements":"Xem mua s\u1eafm","Registers List":"Danh s\u00e1ch \u0111\u0103ng k\u00fd","Display all registers.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 danh s\u00e1ch \u0111\u0103ng k\u00fd.","No registers has been registered":"Kh\u00f4ng danh s\u00e1ch n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new register":"Th\u00eam s\u1ed5 \u0111\u0103ng k\u00fd m\u1edbi","Create a new register":"T\u1ea1o m\u1edbi s\u1ed5 \u0111\u0103ng k\u00fd","Register a new register and save it.":"\u0110\u0103ng k\u00fd s\u1ed5 \u0111\u0103ng k\u00fd m\u1edbi.","Edit register":"S\u1eeda \u0111\u0103ng k\u00fd","Modify Register.":"C\u1eadp nh\u1eadt \u0111\u0103ng k\u00fd.","Return to Registers":"Quay l\u1ea1i \u0111\u0103ng k\u00fd","Closed":"\u0110\u00f3ng","Define what is the status of the register.":"Quy \u0111\u1ecbnh tr\u1ea1ng th\u00e1i c\u1ee7a s\u1ed5 \u0111\u0103ng k\u00fd l\u00e0 g\u00ec.","Provide mode details about this cash register.":"Cung c\u1ea5p chi ti\u1ebft ch\u1ebf \u0111\u1ed9 v\u1ec1 m\u00e1y t\u00ednh ti\u1ec1n n\u00e0y.","Unable to delete a register that is currently in use":"Kh\u00f4ng th\u1ec3 x\u00f3a s\u1ed5 \u0111\u0103ng k\u00fd hi\u1ec7n \u0111ang \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng","Used By":"D\u00f9ng b\u1edfi","Register History List":"\u0110\u0103ng k\u00fd danh s\u00e1ch l\u1ecbch s\u1eed","Display all register histories.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 danh s\u00e1ch l\u1ecbch s\u1eed.","No register histories has been registered":"Kh\u00f4ng c\u00f3 danh s\u00e1ch l\u1ecbch s\u1eed n\u00e0o","Add a new register history":"Th\u00eam m\u1edbi danh s\u00e1ch l\u1ecbch s\u1eed","Create a new register history":"T\u1ea1o m\u1edbi danh s\u00e1ch l\u1ecbch s\u1eed","Register a new register history and save it.":"\u0110\u0103ng k\u00fd m\u1edbi ds l\u1ecbch s\u1eed.","Edit register history":"S\u1eeda ds l\u1ecbch s\u1eed","Modify Registerhistory.":"C\u1eadp nh\u1eadt ds l\u1ecbch s\u1eed.","Return to Register History":"Quay l\u1ea1i ds l\u1ecbch s\u1eed","Register Id":"M\u00e3 \u0111\u0103ng k\u00fd","Action":"H\u00e0nh \u0111\u1ed9ng","Register Name":"T\u00ean \u0111\u0103ng k\u00fd","Done At":"Th\u1ef1c hi\u1ec7n t\u1ea1i","Reward Systems List":"Danh s\u00e1ch ch\u01b0\u01a1ng tr\u00ecnh ph\u1ea7n th\u01b0\u1edfng","Display all reward systems.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 danh s\u00e1ch ch\u01b0\u01a1ng tr\u00ecnh ph\u1ea7n th\u01b0\u1edfng.","No reward systems has been registered":"Kh\u00f4ng ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new reward system":"Th\u00eam m\u1edbi ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng","Create a new reward system":"T\u1ea1o m\u1edbi ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng","Register a new reward system and save it.":"\u0110\u0103ng k\u00fd m\u1edbi ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng.","Edit reward system":"S\u1eeda ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng","Modify Reward System.":"C\u1eadp nh\u1eadt ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng.","Return to Reward Systems":"Quay l\u1ea1i ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng","From":"T\u1eeb","The interval start here.":"Th\u1eddi gian b\u1eaft \u0111\u1ea7u \u1edf \u0111\u00e2y.","To":"\u0110\u1ebfn","The interval ends here.":"Th\u1eddi gian k\u1ebft th\u00fac \u1edf \u0111\u00e2y.","Points earned.":"\u0110i\u1ec3m s\u1ed1 \u0111\u1ea1t \u0111\u01b0\u1ee3c.","Coupon":"Phi\u1ebfu gi\u1ea3m gi\u00e1","Decide which coupon you would apply to the system.":"Quy\u1ebft \u0111\u1ecbnh phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0o b\u1ea1n s\u1ebd \u00e1p d\u1ee5ng cho ch\u01b0\u01a1ng tr\u00ecnh.","This is the objective that the user should reach to trigger the reward.":"\u0110\u00e2y l\u00e0 m\u1ee5c ti\u00eau m\u00e0 ng\u01b0\u1eddi d\u00f9ng c\u1ea7n \u0111\u1ea1t \u0111\u01b0\u1ee3c \u0111\u1ec3 c\u00f3 \u0111\u01b0\u1ee3c ph\u1ea7n th\u01b0\u1edfng.","A short description about this system":"M\u00f4 t\u1ea3 ng\u1eafn v\u1ec1 ch\u01b0\u01a1ng tr\u00ecnh ph\u1ea7n th\u01b0\u1edfng","Would you like to delete this reward system ?":"B\u1ea1n mu\u1ed1n x\u00f3a ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng n\u00e0y ?","Delete Selected Rewards":"X\u00f3a ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 ch\u1ecdn","Would you like to delete selected rewards?":"B\u1ea1n mu\u1ed1n x\u00f3a ch\u01b0\u01a1ng tr\u00ecnh \u0111ang ch\u1ecdn?","Roles List":"Danh s\u00e1ch nh\u00f3m quy\u1ec1n","Display all roles.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 c\u00e1c nh\u00f3m quy\u1ec1n.","No role has been registered.":"Kh\u00f4ng nh\u00f3m quy\u1ec1n n\u00e0o \u0111\u01b0\u1ee3c t\u1ea1o.","Add a new role":"Th\u00eam nh\u00f3m quy\u1ec1n","Create a new role":"T\u1ea1o m\u1edbi nh\u00f3m quy\u1ec1n","Create a new role and save it.":"T\u1ea1o m\u1edbi v\u00e0 l\u01b0u nh\u00f3m quy\u1ec1n.","Edit role":"S\u1eeda nh\u00f3m quy\u1ec1n","Modify Role.":"C\u1eadp nh\u1eadt nh\u00f3m quy\u1ec1n.","Return to Roles":"Quay l\u1ea1i nh\u00f3m quy\u1ec1n","Provide a name to the role.":"T\u00ean nh\u00f3m quy\u1ec1n.","Should be a unique value with no spaces or special character":"Kh\u00f4ng d\u1ea5u, kh\u00f4ng kho\u1ea3ng c\u00e1ch, kh\u00f4ng k\u00fd t\u1ef1 \u0111\u1eb7c bi\u1ec7t","Provide more details about what this role is about.":"M\u00f4 t\u1ea3 chi ti\u1ebft nh\u00f3m quy\u1ec1n.","Unable to delete a system role.":"Kh\u00f4ng th\u1ec3 x\u00f3a nh\u00f3m quy\u1ec1n h\u1ec7 th\u1ed1ng.","You do not have enough permissions to perform this action.":"B\u1ea1n kh\u00f4ng c\u00f3 \u0111\u1ee7 quy\u1ec1n \u0111\u1ec3 th\u1ef1c hi\u1ec7n h\u00e0nh \u0111\u1ed9ng n\u00e0y.","Taxes List":"Danh s\u00e1ch thu\u1ebf","Display all taxes.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 m\u1ee9c thu\u1ebf.","No taxes has been registered":"Kh\u00f4ng c\u00f3 m\u1ee9c thu\u1ebf n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new tax":"Th\u00eam m\u1ee9c thu\u1ebf","Create a new tax":"T\u1ea1o m\u1edbi m\u1ee9c thu\u1ebf","Register a new tax and save it.":"\u0110\u0103ng k\u00fd m\u1ee9c thu\u1ebf.","Edit tax":"S\u1eeda thu\u1ebf","Modify Tax.":"C\u1eadp nh\u1eadt thu\u1ebf.","Return to Taxes":"Quay l\u1ea1i thu\u1ebf","Provide a name to the tax.":"T\u00ean m\u1ee9c thu\u1ebf.","Assign the tax to a tax group.":"G\u00e1n m\u1ee9c thu\u1ebf cho nh\u00f3m h\u00e0ng.","Rate":"T\u1ef7 l\u1ec7","Define the rate value for the tax.":"Quy \u0111\u1ecbnh t\u1ef7 l\u1ec7 thu\u1ebf.","Provide a description to the tax.":"Di\u1ec5n gi\u1ea3i thu\u1ebf.","Taxes Groups List":"Nh\u00f3m thu\u1ebf","Display all taxes groups.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 nh\u00f3m thu\u1ebf.","No taxes groups has been registered":"Kh\u00f4ng c\u00f3 nh\u00f3m thu\u1ebf n\u00e0o \u0111\u0103ng k\u00fd","Add a new tax group":"Th\u00eam m\u1edbi nh\u00f3m thu\u1ebf","Create a new tax group":"T\u1ea1o m\u1edbi nh\u00f3m thu\u1ebf","Register a new tax group and save it.":"\u0110\u0103ng k\u00fd m\u1edbi nh\u00f3m thu\u1ebf.","Edit tax group":"S\u1eeda nh\u00f3m thu\u1ebf","Modify Tax Group.":"C\u1eadp nh\u1eadt nh\u00f3m thu\u1ebf.","Return to Taxes Groups":"Quay l\u1ea1i nh\u00f3m thu\u1ebf","Provide a short description to the tax group.":"Di\u1ec5n gi\u1ea3i nh\u00f3m thu\u1ebf.","Units List":"Danh s\u00e1ch \u0111\u01a1n v\u1ecb t\u00ednh","Display all units.":"Hi\u1ec7n t\u1ea5t c\u1ea3 \u0111\u01a1n v\u1ecb t\u00ednh.","No units has been registered":"Kh\u00f4ng c\u00f3 \u0111\u01a1n v\u1ecb t\u00ednh n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new unit":"Th\u00eam m\u1edbi \u0111\u01a1n v\u1ecb t\u00ednh","Create a new unit":"T\u1ea1o m\u1edbi \u0111\u01a1n v\u1ecb t\u00ednh","Register a new unit and save it.":"\u0110\u0103ng k\u00fd \u0111\u01a1n v\u1ecb t\u00ednh.","Edit unit":"S\u1eeda \u0111\u01a1n v\u1ecb t\u00ednh","Modify Unit.":"C\u1eadp nh\u1eadt \u0111\u01a1n v\u1ecb t\u00ednh.","Return to Units":"Quay l\u1ea1i \u0111\u01a1n v\u1ecb t\u00ednh","Preview URL":"\u0110\u01b0\u1eddng d\u1eabn \u0111\u1ec3 xem","Preview of the unit.":"Xem tr\u01b0\u1edbc \u0111\u01a1n v\u1ecb t\u00ednh.","Define the value of the unit.":"Quy \u0111\u1ecbnh gi\u00e1 tr\u1ecb cho \u0111\u01a1n v\u1ecb t\u00ednh.","Define to which group the unit should be assigned.":"Quy \u0111\u1ecbnh nh\u00f3m n\u00e0o \u0111\u1ec3 g\u00e1n \u0111\u01a1n v\u1ecb t\u00ednh.","Base Unit":"\u0110\u01a1n v\u1ecb t\u00ednh c\u01a1 s\u1edf","Determine if the unit is the base unit from the group.":"X\u00e1c \u0111\u1ecbnh xem \u0111\u01a1n v\u1ecb c\u00f3 ph\u1ea3i l\u00e0 \u0111\u01a1n v\u1ecb c\u01a1 s\u1edf t\u1eeb nh\u00f3m hay kh\u00f4ng.","Provide a short description about the unit.":"M\u00f4 t\u1ea3 \u0111\u01a1n v\u1ecb t\u00ednh.","Unit Groups List":"Nh\u00f3m \u0111\u01a1n v\u1ecb t\u00ednh","Display all unit groups.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 c\u00e1c nh\u00f3m \u0111\u01a1n v\u1ecb t\u00ednh.","No unit groups has been registered":"Kh\u00f4ng c\u00f3 nh\u00f3m \u0111vt n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new unit group":"Th\u00eam m\u1edbi nh\u00f3m \u0111vt","Create a new unit group":"T\u1ea1o m\u1edbi nh\u00f3m \u0111vt","Register a new unit group and save it.":"\u0110\u0103ng k\u00fd m\u1edbi nh\u00f3m \u0111vt.","Edit unit group":"S\u1eeda nh\u00f3m \u0111vt","Modify Unit Group.":"C\u1eadp nh\u1eadt nh\u00f3m \u0111vt.","Return to Unit Groups":"Quay l\u1ea1i nh\u00f3m \u0111vt","Users List":"Danh s\u00e1ch ng\u01b0\u1eddi d\u00f9ng","Display all users.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 ng\u01b0\u1eddi d\u00f9ng.","No users has been registered":"Kh\u00f4ng c\u00f3 ng\u01b0\u1eddi d\u00f9ng n\u00e0o \u0111\u0103ng k\u00fd","Add a new user":"Th\u00eam m\u1edbi ng\u01b0\u1eddi d\u00f9ng","Create a new user":"T\u1ea1o m\u1edbi ng\u01b0\u1eddi d\u00f9ng","Register a new user and save it.":"\u0110\u0103ng k\u00fd m\u1edbi ng\u01b0\u1eddi d\u00f9ng.","Edit user":"S\u1eeda ng\u01b0\u1eddi d\u00f9ng","Modify User.":"C\u1eadp nh\u1eadt ng\u01b0\u1eddi d\u00f9ng.","Return to Users":"Quay l\u1ea1i ng\u01b0\u1eddi d\u00f9ng","Username":"T\u00ean \u0111\u0103ng nh\u1eadp","Will be used for various purposes such as email recovery.":"S\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho c\u00e1c m\u1ee5c \u0111\u00edch kh\u00e1c nhau nh\u01b0 kh\u00f4i ph\u1ee5c email.","Password":"M\u1eadt kh\u1ea9u","Make a unique and secure password.":"T\u1ea1o m\u1eadt kh\u1ea9u duy nh\u1ea5t v\u00e0 an to\u00e0n.","Confirm Password":"Nh\u1eadp l\u1ea1i m\u1eadt kh\u1ea9u","Should be the same as the password.":"Gi\u1ed1ng m\u1eadt kh\u1ea9u \u0111\u00e3 nh\u1eadp.","Define whether the user can use the application.":"Quy \u0111\u1ecbnh khi n\u00e0o ng\u01b0\u1eddi d\u00f9ng c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng.","The action you tried to perform is not allowed.":"B\u1ea1n kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p th\u1ef1c hi\u1ec7n thao t\u00e1c n\u00e0y.","Not Enough Permissions":"Ch\u01b0a \u0111\u1ee7 b\u1ea3o m\u1eadt","The resource of the page you tried to access is not available or might have been deleted.":"T\u00e0i nguy\u00ean c\u1ee7a trang b\u1ea1n \u0111\u00e3 c\u1ed1 g\u1eafng truy c\u1eadp kh\u00f4ng s\u1eb5n d\u00f9ng ho\u1eb7c c\u00f3 th\u1ec3 \u0111\u00e3 b\u1ecb x\u00f3a.","Not Found Exception":"Kh\u00f4ng t\u00ecm th\u1ea5y","Provide your username.":"T\u00ean c\u1ee7a b\u1ea1n.","Provide your password.":"M\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n.","Provide your email.":"Email c\u1ee7a b\u1ea1n.","Password Confirm":"Nh\u1eadp l\u1ea1i m\u1eadt kh\u1ea9u","define the amount of the transaction.":"X\u00e1c \u0111\u1ecbnh s\u1ed1 ti\u1ec1n giao d\u1ecbch.","Further observation while proceeding.":"Quan s\u00e1t th\u00eam trong khi ti\u1ebfn h\u00e0nh.","determine what is the transaction type.":"Quy \u0111\u1ecbnh lo\u1ea1i giao d\u1ecbch.","Add":"Th\u00eam","Deduct":"Kh\u1ea5u tr\u1eeb","Determine the amount of the transaction.":"Qua \u0111\u1ecbnh gi\u00e1 tr\u1ecb c\u1ee7a giao d\u1ecbch.","Further details about the transaction.":"Th\u00f4ng tin chi ti\u1ebft v\u1ec1 giao d\u1ecbch.","Define the installments for the current order.":"X\u00e1c \u0111\u1ecbnh c\u00e1c kho\u1ea3n tr\u1ea3 g\u00f3p cho \u0111\u01a1n \u0111\u1eb7t h\u00e0ng hi\u1ec7n t\u1ea1i.","New Password":"M\u1eadt kh\u1ea9u m\u1edbi","define your new password.":"Nh\u1eadp m\u1eadt kh\u1ea9u m\u1edbi.","confirm your new password.":"Nh\u1eadp l\u1ea1i m\u1eadt kh\u1ea9u m\u1edbi.","choose the payment type.":"Ch\u1ecdn ki\u1ec3u thanh to\u00e1n.","Provide the procurement name.":"T\u00ean g\u00f3i th\u1ea7u.","Describe the procurement.":"M\u00f4 t\u1ea3 g\u00f3i th\u1ea7u.","Define the provider.":"Quy \u0111\u1ecbnh nh\u00e0 cung c\u1ea5p.","Define what is the unit price of the product.":"X\u00e1c \u0111\u1ecbnh gi\u00e1 \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m.","Condition":"\u0110i\u1ec1u ki\u1ec7n","Determine in which condition the product is returned.":"X\u00e1c \u0111\u1ecbnh s\u1ea3n ph\u1ea9m \u0111\u01b0\u1ee3c tr\u1ea3 l\u1ea1i trong \u0111i\u1ec1u ki\u1ec7n n\u00e0o.","Other Observations":"C\u00e1c quan s\u00e1t kh\u00e1c","Describe in details the condition of the returned product.":"M\u00f4 t\u1ea3 chi ti\u1ebft t\u00ecnh tr\u1ea1ng c\u1ee7a s\u1ea3n ph\u1ea9m tr\u1ea3 l\u1ea1i.","Unit Group Name":"T\u00ean nh\u00f3m \u0111vt","Provide a unit name to the unit.":"Cung c\u1ea5p t\u00ean \u0111\u01a1n v\u1ecb cho \u0111\u01a1n v\u1ecb.","Describe the current unit.":"M\u00f4 t\u1ea3 \u0111vt hi\u1ec7n t\u1ea1i.","assign the current unit to a group.":"G\u00e1n \u0111vt hi\u1ec7n t\u1ea1i cho nh\u00f3m.","define the unit value.":"X\u00e1c \u0111\u1ecbnh gi\u00e1 tr\u1ecb \u0111vt.","Provide a unit name to the units group.":"Cung c\u1ea5p t\u00ean \u0111\u01a1n v\u1ecb cho nh\u00f3m \u0111\u01a1n v\u1ecb.","Describe the current unit group.":"M\u00f4 t\u1ea3 nh\u00f3m \u0111\u01a1n v\u1ecb hi\u1ec7n t\u1ea1i.","POS":"C\u1eeda h\u00e0ng","Open POS":"M\u1edf c\u1eeda h\u00e0ng","Create Register":"T\u1ea1o \u0111\u0103ng k\u00fd","Use Customer Billing":"S\u1eed d\u1ee5ng thanh to\u00e1n cho kh\u00e1ch h\u00e0ng","Define whether the customer billing information should be used.":"X\u00e1c \u0111\u1ecbnh r\u00f5 h\u01a1n th\u00f4ng tin thanh to\u00e1n c\u1ee7a kh\u00e1ch h\u00e0ng n\u00ean \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng.","General Shipping":"V\u1eadn chuy\u1ec3n chung","Define how the shipping is calculated.":"X\u00e1c \u0111\u1ecbnh c\u00e1ch t\u00ednh ph\u00ed v\u1eadn chuy\u1ec3n.","Shipping Fees":"Ph\u00ed v\u1eadn chuy\u1ec3n","Define shipping fees.":"X\u00e1c \u0111\u1ecbnh ph\u00ed v\u1eadn chuy\u1ec3n.","Use Customer Shipping":"S\u1eed d\u1ee5ng v\u1eadn chuy\u1ec3n c\u1ee7a kh\u00e1ch h\u00e0ng","Define whether the customer shipping information should be used.":"X\u00e1c \u0111\u1ecbnh th\u00f4ng tin v\u1eadn chuy\u1ec3n c\u1ee7a kh\u00e1ch h\u00e0ng n\u00ean \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng.","Invoice Number":"S\u1ed1 h\u00f3a \u0111\u01a1n","If the procurement has been issued outside of NexoPOS, please provide a unique reference.":"N\u1ebfu mua s\u1eafm \u0111\u01b0\u1ee3c ph\u00e1t h\u00e0nh b\u00ean ngo\u00e0i VasPOS, vui l\u00f2ng cung c\u1ea5p m\u1ed9t t\u00e0i li\u1ec7u tham kh\u1ea3o duy nh\u1ea5t.","Delivery Time":"Th\u1eddi gian giao h\u00e0ng","If the procurement has to be delivered at a specific time, define the moment here.":"N\u1ebfu vi\u1ec7c mua s\u1eafm ph\u1ea3i \u0111\u01b0\u1ee3c giao v\u00e0o m\u1ed9t th\u1eddi \u0111i\u1ec3m c\u1ee5 th\u1ec3, h\u00e3y x\u00e1c \u0111\u1ecbnh th\u1eddi \u0111i\u1ec3m t\u1ea1i \u0111\u00e2y.","Automatic Approval":"T\u1ef1 \u0111\u1ed9ng ph\u00ea duy\u1ec7t","Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.":"X\u00e1c \u0111\u1ecbnh xem vi\u1ec7c mua s\u1eafm c\u00f3 n\u00ean \u0111\u01b0\u1ee3c t\u1ef1 \u0111\u1ed9ng \u0111\u00e1nh d\u1ea5u l\u00e0 \u0111\u00e3 \u0111\u01b0\u1ee3c ph\u00ea duy\u1ec7t sau khi Th\u1eddi gian giao h\u00e0ng x\u1ea3y ra hay kh\u00f4ng.","Determine what is the actual payment status of the procurement.":"X\u00e1c \u0111\u1ecbnh t\u00ecnh tr\u1ea1ng thanh to\u00e1n th\u1ef1c t\u1ebf c\u1ee7a mua s\u1eafm l\u00e0 g\u00ec.","Determine what is the actual provider of the current procurement.":"X\u00e1c \u0111\u1ecbnh \u0111\u00e2u l\u00e0 nh\u00e0 cung c\u1ea5p th\u1ef1c t\u1ebf c\u1ee7a vi\u1ec7c mua s\u1eafm hi\u1ec7n t\u1ea1i.","Provide a name that will help to identify the procurement.":"Cung c\u1ea5p m\u1ed9t c\u00e1i t\u00ean s\u1ebd gi\u00fap x\u00e1c \u0111\u1ecbnh vi\u1ec7c mua s\u1eafm.","First Name":"T\u00ean","Avatar":"H\u00ecnh \u0111\u1ea1i di\u1ec7n","Define the image that should be used as an avatar.":"X\u00e1c \u0111\u1ecbnh h\u00ecnh \u1ea3nh s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0m h\u00ecnh \u0111\u1ea1i di\u1ec7n.","Language":"Ng\u00f4n ng\u1eef","Choose the language for the current account.":"Ch\u1ecdn ng\u00f4n ng\u1eef cho t\u00e0i kho\u1ea3n hi\u1ec7n t\u1ea1i.","Security":"B\u1ea3o m\u1eadt","Old Password":"M\u1eadt kh\u1ea9u c\u0169","Provide the old password.":"Nh\u1eadp m\u1eadt kh\u1ea9u c\u0169.","Change your password with a better stronger password.":"Thay \u0111\u1ed5i m\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n b\u1eb1ng m\u1ed9t m\u1eadt kh\u1ea9u t\u1ed1t h\u01a1n, m\u1ea1nh h\u01a1n.","Password Confirmation":"Nh\u1eadp l\u1ea1i m\u1eadt kh\u1ea9u","The profile has been successfully saved.":"H\u1ed3 s\u01a1 \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u th\u00e0nh c\u00f4ng.","The user attribute has been saved.":"Thu\u1ed9c t\u00ednh ng\u01b0\u1eddi d\u00f9ng \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u.","The options has been successfully updated.":"C\u00e1c t\u00f9y ch\u1ecdn \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng.","Wrong password provided":"Sai m\u1eadt kh\u1ea9u","Wrong old password provided":"Sai m\u1eadt kh\u1ea9u c\u0169","Password Successfully updated.":"M\u1eadt kh\u1ea9u \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng.","Sign In — NexoPOS":"\u0110\u0103ng nh\u1eadp — VasPOS","Sign Up — NexoPOS":"\u0110\u0103ng k\u00fd — VasPOS","Password Lost":"M\u1eadt kh\u1ea9u b\u1ecb m\u1ea5t","Unable to proceed as the token provided is invalid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c v\u00ec m\u00e3 th\u00f4ng b\u00e1o \u0111\u00e3 cung c\u1ea5p kh\u00f4ng h\u1ee3p l\u1ec7.","The token has expired. Please request a new activation token.":"M\u00e3 th\u00f4ng b\u00e1o \u0111\u00e3 h\u1ebft h\u1ea1n. Vui l\u00f2ng y\u00eau c\u1ea7u m\u00e3 th\u00f4ng b\u00e1o k\u00edch ho\u1ea1t m\u1edbi.","Set New Password":"\u0110\u1eb7t m\u1eadt kh\u1ea9u m\u1edbi","Database Update":"C\u1eadp nh\u1eadt c\u01a1 s\u1edf d\u1eef li\u1ec7u","This account is disabled.":"T\u00e0i kho\u1ea3n n\u00e0y \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a.","Unable to find record having that username.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y b\u1ea3n ghi c\u00f3 t\u00ean ng\u01b0\u1eddi d\u00f9ng \u0111\u00f3.","Unable to find record having that password.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y b\u1ea3n ghi c\u00f3 m\u1eadt kh\u1ea9u \u0111\u00f3.","Invalid username or password.":"Sai t\u00ean \u0111\u0103ng nh\u1eadp ho\u1eb7c m\u1eadt kh\u1ea9u.","Unable to login, the provided account is not active.":"Kh\u00f4ng th\u1ec3 \u0111\u0103ng nh\u1eadp, t\u00e0i kho\u1ea3n \u0111\u01b0\u1ee3c cung c\u1ea5p kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng.","You have been successfully connected.":"B\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c k\u1ebft n\u1ed1i th\u00e0nh c\u00f4ng.","The recovery email has been send to your inbox.":"Email kh\u00f4i ph\u1ee5c \u0111\u00e3 \u0111\u01b0\u1ee3c g\u1eedi \u0111\u1ebfn h\u1ed9p th\u01b0 c\u1ee7a b\u1ea1n.","Unable to find a record matching your entry.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y b\u1ea3n ghi ph\u00f9 h\u1ee3p v\u1edbi m\u1ee5c nh\u1eadp c\u1ee7a b\u1ea1n.","Your Account has been created but requires email validation.":"T\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o nh\u01b0ng y\u00eau c\u1ea7u x\u00e1c th\u1ef1c email.","Unable to find the requested user.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y ng\u01b0\u1eddi d\u00f9ng \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u.","Unable to proceed, the provided token is not valid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c, m\u00e3 th\u00f4ng b\u00e1o \u0111\u00e3 cung c\u1ea5p kh\u00f4ng h\u1ee3p l\u1ec7.","Unable to proceed, the token has expired.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c, m\u00e3 th\u00f4ng b\u00e1o \u0111\u00e3 h\u1ebft h\u1ea1n.","Your password has been updated.":"M\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Unable to edit a register that is currently in use":"Kh\u00f4ng th\u1ec3 ch\u1ec9nh s\u1eeda s\u1ed5 \u0111\u0103ng k\u00fd hi\u1ec7n \u0111ang \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng","No register has been opened by the logged user.":"Kh\u00f4ng c\u00f3 s\u1ed5 \u0111\u0103ng k\u00fd n\u00e0o \u0111\u01b0\u1ee3c m\u1edf b\u1edfi ng\u01b0\u1eddi d\u00f9ng \u0111\u00e3 \u0111\u0103ng nh\u1eadp.","The register is opened.":"S\u1ed5 \u0111\u0103ng k\u00fd \u0111\u01b0\u1ee3c m\u1edf.","Closing":"\u0110\u00f3ng","Opening":"M\u1edf","Sale":"B\u00e1n","Refund":"Tr\u1ea3 l\u1ea1i","Unable to find the category using the provided identifier":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y danh m\u1ee5c b\u1eb1ng s\u1ed1 nh\u1eadn d\u1ea1ng \u0111\u00e3 cung c\u1ea5p","The category has been deleted.":"Nh\u00f3m \u0111\u00e3 b\u1ecb x\u00f3a.","Unable to find the category using the provided identifier.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y nh\u00f3m.","Unable to find the attached category parent":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y danh m\u1ee5c g\u1ed1c \u0111\u01b0\u1ee3c \u0111\u00ednh k\u00e8m","The category has been correctly saved":"Nh\u00f3m \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u","The category has been updated":"Nh\u00f3m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt","The entry has been successfully deleted.":"\u0110\u00e3 \u0111\u01b0\u1ee3c x\u00f3a th\u00e0nh c\u00f4ng.","A new entry has been successfully created.":"M\u1ed9t m\u1ee5c m\u1edbi \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o th\u00e0nh c\u00f4ng.","Unhandled crud resource":"T\u00e0i nguy\u00ean th\u00f4 ch\u01b0a x\u1eed l\u00fd","You need to select at least one item to delete":"B\u1ea1n c\u1ea7n ch\u1ecdn \u00edt nh\u1ea5t m\u1ed9t m\u1ee5c \u0111\u1ec3 x\u00f3a","You need to define which action to perform":"B\u1ea1n c\u1ea7n x\u00e1c \u0111\u1ecbnh h\u00e0nh \u0111\u1ed9ng n\u00e0o \u0111\u1ec3 th\u1ef1c hi\u1ec7n","Unable to proceed. No matching CRUD resource has been found.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c. Kh\u00f4ng t\u00ecm th\u1ea5y t\u00e0i nguy\u00ean CRUD ph\u00f9 h\u1ee3p n\u00e0o.","Create Coupon":"T\u1ea1o phi\u1ebfu gi\u1ea3m gi\u00e1","helps you creating a coupon.":"gi\u00fap b\u1ea1n t\u1ea1o phi\u1ebfu gi\u1ea3m gi\u00e1.","Edit Coupon":"S\u1eeda phi\u1ebfu gi\u1ea3m gi\u00e1","Editing an existing coupon.":"Ch\u1ec9nh s\u1eeda phi\u1ebfu gi\u1ea3m gi\u00e1 hi\u1ec7n c\u00f3.","Invalid Request.":"Y\u00eau c\u1ea7u kh\u00f4ng h\u1ee3p l\u1ec7.","Unable to delete a group to which customers are still assigned.":"Kh\u00f4ng th\u1ec3 x\u00f3a nh\u00f3m m\u00e0 kh\u00e1ch h\u00e0ng \u0111ang \u0111\u01b0\u1ee3c g\u00e1n.","The customer group has been deleted.":"Nh\u00f3m kh\u00e1ch h\u00e0ng \u0111\u00e3 b\u1ecb x\u00f3a.","Unable to find the requested group.":"Kh\u00f4ng t\u00ecm th\u1ea5y nh\u00f3m.","The customer group has been successfully created.":"Nh\u00f3m kh\u00e1ch \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The customer group has been successfully saved.":"The customer group has been successfully saved.","Unable to transfer customers to the same account.":"Kh\u00f4ng th\u1ec3 chuy\u1ec3n kh\u00e1ch h\u00e0ng sang c\u00f9ng m\u1ed9t t\u00e0i kho\u1ea3n.","The categories has been transferred to the group %s.":"C\u00e1c danh m\u1ee5c \u0111\u00e3 \u0111\u01b0\u1ee3c chuy\u1ec3n cho nh\u00f3m %s.","No customer identifier has been provided to proceed to the transfer.":"Kh\u00f4ng c\u00f3 m\u00e3 nh\u1eadn d\u1ea1ng kh\u00e1ch h\u00e0ng n\u00e0o \u0111\u01b0\u1ee3c cung c\u1ea5p \u0111\u1ec3 ti\u1ebfn h\u00e0nh chuy\u1ec3n kho\u1ea3n.","Unable to find the requested group using the provided id.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y nh\u00f3m \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u b\u1eb1ng m\u00e3 nh\u00e0 cung c\u1ea5p.","\"%s\" is not an instance of \"FieldsService\"":"\"%s\" kh\u00f4ng ph\u1ea3i l\u00e0 tr\u01b0\u1eddng h\u1ee3p c\u1ee7a \"FieldsService\"","Manage Medias":"Qu\u1ea3n l\u00fd trung gian","The operation was successful.":"Ho\u1ea1t \u0111\u1ed9ng th\u00e0nh c\u00f4ng.","Modules List":"Danh s\u00e1ch ph\u00e2n h\u1ec7","List all available modules.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 c\u00e1c ph\u00e2n h\u1ec7.","Upload A Module":"T\u1ea3i l\u00ean ph\u00e2n h\u1ec7","Extends NexoPOS features with some new modules.":"M\u1edf r\u1ed9ng c\u00e1c t\u00ednh n\u0103ng c\u1ee7a VasPOS v\u1edbi m\u1ed9t s\u1ed1 ph\u00e2n h\u1ec7 m\u1edbi.","The notification has been successfully deleted":"Th\u00f4ng b\u00e1o \u0111\u00e3 \u0111\u01b0\u1ee3c x\u00f3a th\u00e0nh c\u00f4ng","All the notifications have been cleared.":"T\u1ea5t c\u1ea3 c\u00e1c th\u00f4ng b\u00e1o \u0111\u00e3 \u0111\u01b0\u1ee3c x\u00f3a.","Order Invoice — %s":"\u0110\u01a1n h\u00e0ng — %s","Order Receipt — %s":"Bi\u00ean nh\u1eadn \u0111\u01a1n h\u00e0ng — %s","The printing event has been successfully dispatched.":"\u0110\u00e3 g\u1eedi \u0111\u1ebfn m\u00e1y in.","There is a mismatch between the provided order and the order attached to the instalment.":"C\u00f3 s\u1ef1 kh\u00f4ng kh\u1edbp gi\u1eefa \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 cung c\u1ea5p v\u00e0 \u0111\u01a1n \u0111\u1eb7t h\u00e0ng k\u00e8m theo \u0111\u1ee3t tr\u1ea3 g\u00f3p.","Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.":"Kh\u00f4ng th\u1ec3 ch\u1ec9nh s\u1eeda mua s\u1eafm \u0111\u01b0\u1ee3c d\u1ef1 tr\u1eef. Xem x\u00e9t th\u1ef1c hi\u1ec7n \u0111i\u1ec1u ch\u1ec9nh ho\u1eb7c x\u00f3a mua s\u1eafm.","New Procurement":"Mua h\u00e0ng m\u1edbi","Edit Procurement":"S\u1eeda mua h\u00e0ng","Perform adjustment on existing procurement.":"\u0110i\u1ec1u ch\u1ec9nh h\u00e0ng mua.","%s - Invoice":"%s - H\u00f3a \u0111\u01a1n","list of product procured.":"Danh s\u00e1ch h\u00e0ng mua.","The product price has been refreshed.":"Gi\u00e1 s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c l\u00e0m m\u1edbi.","The single variation has been deleted.":"M\u1ed9t bi\u1ebfn th\u1ec3 \u0111\u00e3 b\u1ecb x\u00f3a.","Edit a product":"S\u1eeda s\u1ea3n ph\u1ea9m","Makes modifications to a product":"Th\u1ef1c hi\u1ec7n s\u1eeda \u0111\u1ed5i \u0111\u1ed1i v\u1edbi s\u1ea3n ph\u1ea9m","Create a product":"T\u1ea1o m\u1edbi s\u1ea3n ph\u1ea9m","Add a new product on the system":"Th\u00eam m\u1edbi s\u1ea3n ph\u1ea9m v\u00e0o h\u1ec7 th\u1ed1ng","Stock Adjustment":"\u0110i\u1ec1u ch\u1ec9nh kho","Adjust stock of existing products.":"\u0110i\u1ec1u ch\u1ec9nh s\u1ea3n ph\u1ea9m hi\u1ec7n c\u00f3 trong kho.","Lost":"M\u1ea5t","No stock is provided for the requested product.":"Kh\u00f4ng t\u00ecm th\u1ea5y s\u1ea3n ph\u1ea9m trong kho.","The product unit quantity has been deleted.":"\u0110\u01a1n v\u1ecb t\u00ednh \u0111\u00e3 b\u1ecb x\u00f3a.","Unable to proceed as the request is not valid.":"Y\u00eau c\u1ea7u kh\u00f4ng h\u1ee3p l\u1ec7.","Unsupported action for the product %s.":"H\u00e0nh \u0111\u1ed9ng kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3 cho s\u1ea3n ph\u1ea9m %s.","The stock has been adjustment successfully.":"\u0110i\u1ec1u ch\u1ec9nh kho th\u00e0nh c\u00f4ng.","Unable to add the product to the cart as it has expired.":"Kh\u00f4ng th\u00eam \u0111\u01b0\u1ee3c, s\u1ea3n ph\u1ea9m \u0111\u00e3 qu\u00e1 h\u1ea1n.","Unable to add a product that has accurate tracking enabled, using an ordinary barcode.":"Kh\u00f4ng th\u1ec3 th\u00eam s\u1ea3n ph\u1ea9m \u0111\u00e3 b\u1eadt t\u00ednh n\u0103ng theo d\u00f5i ch\u00ednh x\u00e1c, s\u1eed d\u1ee5ng m\u00e3 v\u1ea1ch th\u00f4ng th\u01b0\u1eddng.","There is no products matching the current request.":"Kh\u00f4ng t\u00ecm th\u1ea5y s\u1ea3n ph\u1ea9m.","Print Labels":"In nh\u00e3n","Customize and print products labels.":"T\u00f9y ch\u1ec9nh v\u00e0 in nh\u00e3n s\u1ea3n ph\u1ea9m.","Sales Report":"B\u00e1o c\u00e1o b\u00e1n h\u00e0ng","Provides an overview over the sales during a specific period":"Cung c\u1ea5p c\u00e1i nh\u00ecn t\u1ed5ng quan v\u1ec1 doanh s\u1ed1 b\u00e1n h\u00e0ng trong m\u1ed9t kho\u1ea3ng th\u1eddi gian c\u1ee5 th\u1ec3","Sold Stock":"H\u00e0ng \u0111\u00e3 b\u00e1n","Provides an overview over the sold stock during a specific period.":"Cung c\u1ea5p c\u00e1i nh\u00ecn t\u1ed5ng quan v\u1ec1 l\u01b0\u1ee3ng h\u00e0ng \u0111\u00e3 b\u00e1n trong m\u1ed9t kho\u1ea3ng th\u1eddi gian c\u1ee5 th\u1ec3.","Profit Report":"B\u00e1o c\u00e1o l\u1ee3i nhu\u1eadn","Provides an overview of the provide of the products sold.":"Cung c\u1ea5p m\u1ed9t c\u00e1i nh\u00ecn t\u1ed5ng quan v\u1ec1 vi\u1ec7c cung c\u1ea5p c\u00e1c s\u1ea3n ph\u1ea9m \u0111\u00e3 b\u00e1n.","Provides an overview on the activity for a specific period.":"Cung c\u1ea5p th\u00f4ng tin t\u1ed5ng quan v\u1ec1 ho\u1ea1t \u0111\u1ed9ng trong m\u1ed9t kho\u1ea3ng th\u1eddi gian c\u1ee5 th\u1ec3.","Annual Report":"B\u00e1o c\u00e1o qu\u00fd\/n\u0103m","Invalid authorization code provided.":"\u0110\u00e3 cung c\u1ea5p m\u00e3 \u1ee7y quy\u1ec1n kh\u00f4ng h\u1ee3p l\u1ec7.","The database has been successfully seeded.":"C\u01a1 s\u1edf d\u1eef li\u1ec7u \u0111\u00e3 \u0111\u01b0\u1ee3c c\u00e0i th\u00e0nh c\u00f4ng.","Settings Page Not Found":"Kh\u00f4ng t\u00ecm th\u1ea5y trang c\u00e0i \u0111\u1eb7t","Customers Settings":"C\u00e0i \u0111\u1eb7t kh\u00e1ch h\u00e0ng","Configure the customers settings of the application.":"C\u1ea5u h\u00ecnh c\u00e0i \u0111\u1eb7t kh\u00e1ch h\u00e0ng.","General Settings":"C\u00e0i \u0111\u1eb7t chung","Configure the general settings of the application.":"C\u1ea5u h\u00ecnh c\u00e0i \u0111\u1eb7t chung.","Orders Settings":"C\u00e0i \u0111\u1eb7t \u0111\u01a1n h\u00e0ng","POS Settings":"C\u00e0i \u0111\u1eb7t c\u1eeda h\u00e0ng","Configure the pos settings.":"C\u1ea5u h\u00ecnh c\u00e0i \u0111\u1eb7t c\u1eeda h\u00e0ng.","Workers Settings":"C\u00e0i \u0111\u1eb7t nh\u00e2n vi\u00ean","%s is not an instance of \"%s\".":"%s kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t tr\u01b0\u1eddng h\u1ee3p c\u1ee7a \"%s\".","Unable to find the requested product tax using the provided id":"Kh\u00f4ng t\u00ecm th\u1ea5y thu\u1ebf nh\u00e0 cung c\u1ea5p khi t\u00ecm b\u1eb1ng m\u00e3 nh\u00e0 cung c\u1ea5p","Unable to find the requested product tax using the provided identifier.":"Kh\u00f4ng t\u00ecm th\u1ea5y thu\u1ebf nh\u00e0 cung c\u1ea5p khi t\u00ecm ki\u1ebfm b\u1eb1ng m\u00e3 \u0111\u1ecbnh danh.","The product tax has been created.":"Thu\u1ebf c\u1ee7a s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The product tax has been updated":"Thu\u1ebf c\u1ee7a s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt","Unable to retrieve the requested tax group using the provided identifier \"%s\".":"Kh\u00f4ng t\u00ecm th\u1ea5y nh\u00f3m thu\u1ebf b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng m\u00e3 \u0111\u1ecbnh danh \"%s\".","Permission Manager":"Qu\u1ea3n l\u00fd quy\u1ec1n","Manage all permissions and roles":"Qu\u1ea3n l\u00fd t\u1ea5t c\u1ea3 quy\u1ec1n v\u00e0 nh\u00f3m quy\u1ec1n","My Profile":"H\u1ed3 s\u01a1","Change your personal settings":"Thay \u0111\u1ed5i th\u00f4ng tin c\u00e1 nh\u00e2n","The permissions has been updated.":"C\u00e1c quy\u1ec1n \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Sunday":"Ch\u1ee7 nh\u1eadt","Monday":"Th\u1ee9 hai","Tuesday":"Th\u1ee9 ba","Wednesday":"Th\u1ee9 t\u01b0","Thursday":"Th\u1ee9 n\u0103m","Friday":"Th\u1ee9 s\u00e1u","Saturday":"Th\u1ee9 b\u1ea3y","The migration has successfully run.":"Qu\u00e1 tr\u00ecnh c\u00e0i \u0111\u1eb7t \u0111\u00e3 th\u00e0nh c\u00f4ng.","Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.":"Kh\u00f4ng th\u1ec3 kh\u1edfi t\u1ea1o trang c\u00e0i \u0111\u1eb7t. \u0110\u1ecbnh danh \"%s\" kh\u00f4ng th\u1ec3 \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o.","Unable to register. The registration is closed.":"Kh\u00f4ng th\u1ec3 \u0111\u0103ng k\u00fd. \u0110\u0103ng k\u00fd \u0111\u00e3 \u0111\u00f3ng.","Hold Order Cleared":"Gi\u1eef \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c x\u00f3a","[NexoPOS] Activate Your Account":"[VasPOS] K\u00edch ho\u1ea1t t\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n","[NexoPOS] A New User Has Registered":"[VasPOS] Ng\u01b0\u1eddi d\u00f9ng m\u1edbi \u0111\u00e3 \u0111\u0103ng k\u00fd","[NexoPOS] Your Account Has Been Created":"[VasPOS] T\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o","Unable to find the permission with the namespace \"%s\".":"Kh\u00f4ng t\u00ecm th\u1ea5y quy\u1ec1n \"%s\".","Voided":"V\u00f4 hi\u1ec7u","Refunded":"Tr\u1ea3 l\u1ea1i","Partially Refunded":"Tr\u1ea3 tr\u01b0\u1edbc","The register has been successfully opened":"S\u1ed5 \u0111\u0103ng k\u00fd \u0111\u00e3 \u0111\u01b0\u1ee3c m\u1edf th\u00e0nh c\u00f4ng","The register has been successfully closed":"S\u1ed5 \u0111\u0103ng k\u00fd \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u00f3ng th\u00e0nh c\u00f4ng","The provided amount is not allowed. The amount should be greater than \"0\". ":"S\u1ed1 ti\u1ec1n \u0111\u00e3 cung c\u1ea5p kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p. S\u1ed1 ti\u1ec1n ph\u1ea3i l\u1edbn h\u01a1n \"0\". ","The cash has successfully been stored":"Ti\u1ec1n m\u1eb7t \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1ea5t gi\u1eef th\u00e0nh c\u00f4ng","Not enough fund to cash out.":"Kh\u00f4ng \u0111\u1ee7 qu\u1ef9 \u0111\u1ec3 r\u00fat ti\u1ec1n.","The cash has successfully been disbursed.":"Ti\u1ec1n m\u1eb7t \u0111\u00e3 \u0111\u01b0\u1ee3c gi\u1ea3i ng\u00e2n th\u00e0nh c\u00f4ng.","In Use":"\u0110ang d\u00f9ng","Opened":"M\u1edf","Delete Selected entries":"X\u00f3a c\u00e1c m\u1ee5c \u0111\u00e3 ch\u1ecdn","%s entries has been deleted":"%s c\u00e1c m\u1ee5c \u0111\u00e3 \u0111\u01b0\u1ee3c x\u00f3a","%s entries has not been deleted":"%s c\u00e1c m\u1ee5c ch\u01b0a b\u1ecb x\u00f3a","Unable to find the customer using the provided id.":"Kh\u00f4ng t\u00ecm th\u1ea5y kh\u00e1ch h\u00e0ng","The customer has been deleted.":"Kh\u00e1ch h\u00e0ng \u0111\u00e3 b\u1ecb x\u00f3a.","The customer has been created.":"Kh\u00e1ch h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","Unable to find the customer using the provided ID.":"Kh\u00f4ng t\u00ecm th\u1ea5y kh\u00e1ch h\u00e0ng.","The customer has been edited.":"S\u1eeda kh\u00e1ch h\u00e0ng th\u00e0nh c\u00f4ng.","Unable to find the customer using the provided email.":"Kh\u00f4ng t\u00ecm th\u1ea5y kh\u00e1ch h\u00e0ng.","The customer account has been updated.":"C\u1eadp nh\u1eadt kh\u00e1ch h\u00e0ng th\u00e0nh c\u00f4ng.","Issuing Coupon Failed":"Ph\u00e1t h\u00e0nh phi\u1ebfu th\u01b0\u1edfng kh\u00f4ng th\u00e0nh c\u00f4ng","Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.":"Kh\u00f4ng th\u1ec3 \u00e1p d\u1ee5ng phi\u1ebfu gi\u1ea3m gi\u00e1 \u0111\u00ednh k\u00e8m v\u1edbi ph\u1ea7n th\u01b0\u1edfng \"%s\". C\u00f3 v\u1ebb nh\u01b0 phi\u1ebfu gi\u1ea3m gi\u00e1 kh\u00f4ng c\u00f2n t\u1ed3n t\u1ea1i n\u1eefa.","Unable to find a coupon with the provided code.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y phi\u1ebfu gi\u1ea3m gi\u00e1 c\u00f3 m\u00e3 \u0111\u00e3 cung c\u1ea5p.","The coupon has been updated.":"Phi\u1ebfu gi\u1ea3m gi\u00e1 \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","The group has been created.":"Nh\u00f3m \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The media has been deleted":"\u1ea2nh \u0111\u00e3 b\u1ecb x\u00f3a","Unable to find the media.":"Kh\u00f4ng t\u00ecm th\u1ea5y \u1ea3nh.","Unable to find the requested file.":"Kh\u00f4ng t\u00ecm th\u1ea5y file.","Unable to find the media entry":"Kh\u00f4ng t\u00ecm th\u1ea5y m\u1ee5c nh\u1eadp \u1ea3nh","Payment Types":"Lo\u1ea1i thanh to\u00e1n","Medias":"\u1ea2nh","List":"Danh s\u00e1ch","Customers Groups":"Nh\u00f3m kh\u00e1ch h\u00e0ng","Create Group":"T\u1ea1o nh\u00f3m kh\u00e1ch","Reward Systems":"H\u1ec7 th\u1ed1ng gi\u1ea3i th\u01b0\u1edfng","Create Reward":"T\u1ea1o gi\u1ea3i th\u01b0\u1edfng","List Coupons":"Danh s\u00e1ch phi\u1ebfu gi\u1ea3m gi\u00e1","Providers":"Nh\u00e0 cung c\u1ea5p","Create A Provider":"T\u1ea1o nh\u00e0 cung c\u1ea5p","Inventory":"Qu\u1ea3n l\u00fd kho","Create Product":"T\u1ea1o s\u1ea3n ph\u1ea9m","Create Category":"T\u1ea1o nh\u00f3m h\u00e0ng","Create Unit":"T\u1ea1o \u0111\u01a1n v\u1ecb","Unit Groups":"Nh\u00f3m \u0111\u01a1n v\u1ecb","Create Unit Groups":"T\u1ea1o nh\u00f3m \u0111\u01a1n v\u1ecb","Taxes Groups":"Nh\u00f3m thu\u1ebf","Create Tax Groups":"T\u1ea1o nh\u00f3m thu\u1ebf","Create Tax":"T\u1ea1o lo\u1ea1i thu\u1ebf","Modules":"Ph\u00e2n h\u1ec7","Upload Module":"T\u1ea3i l\u00ean ph\u00e2n h\u1ec7","Users":"Ng\u01b0\u1eddi d\u00f9ng","Create User":"T\u1ea1o ng\u01b0\u1eddi d\u00f9ng","Roles":"Quy\u1ec1n h\u1ea1n","Create Roles":"T\u1ea1o quy\u1ec1n h\u1ea1n","Permissions Manager":"Quy\u1ec1n truy c\u1eadp","Procurements":"Mua h\u00e0ng","Reports":"B\u00e1o c\u00e1o","Sale Report":"B\u00e1o c\u00e1o b\u00e1n h\u00e0ng","Incomes & Loosses":"L\u00e3i & L\u1ed7","Invoice Settings":"C\u00e0i \u0111\u1eb7t h\u00f3a \u0111\u01a1n","Workers":"Nh\u00e2n vi\u00ean","Unable to locate the requested module.":"Kh\u00f4ng truy c\u1eadp \u0111\u01b0\u1ee3c ph\u00e2n h\u1ec7.","The module \"%s\" has been disabled as the dependency \"%s\" is missing. ":"Ph\u00e2n h\u1ec7 \"%s\" \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a v\u00ec ph\u1ee5 thu\u1ed9c \"%s\" kh\u00f4ng t\u1ed3n t\u1ea1i. ","The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ":"Ph\u00e2n h\u1ec7 \"%s\" \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a v\u00ec ph\u1ee5 thu\u1ed9c \"%s\" kh\u00f4ng \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t. ","Unable to detect the folder from where to perform the installation.":"Kh\u00f4ng t\u00ecm th\u1ea5y th\u01b0 m\u1ee5c \u0111\u1ec3 c\u00e0i \u0111\u1eb7t.","The uploaded file is not a valid module.":"T\u1ec7p t\u1ea3i l\u00ean kh\u00f4ng h\u1ee3p l\u1ec7.","The module has been successfully installed.":"C\u00e0i \u0111\u1eb7t ph\u00e2n h\u1ec7 th\u00e0nh c\u00f4ng.","The migration run successfully.":"Di chuy\u1ec3n th\u00e0nh c\u00f4ng.","The module has correctly been enabled.":"Ph\u00e2n h\u1ec7 \u0111\u00e3 \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t ch\u00ednh x\u00e1c.","Unable to enable the module.":"Kh\u00f4ng th\u1ec3 k\u00edch ho\u1ea1t ph\u00e2n h\u1ec7(module).","The Module has been disabled.":"Ph\u00e2n h\u1ec7 \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a.","Unable to disable the module.":"Kh\u00f4ng th\u1ec3 v\u00f4 hi\u1ec7u h\u00f3a ph\u00e2n h\u1ec7(module).","Unable to proceed, the modules management is disabled.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c, qu\u1ea3n l\u00fd ph\u00e2n h\u1ec7 \u0111\u00e3 b\u1ecb t\u1eaft.","Missing required parameters to create a notification":"Thi\u1ebfu c\u00e1c th\u00f4ng s\u1ed1 b\u1eaft bu\u1ed9c \u0111\u1ec3 t\u1ea1o th\u00f4ng b\u00e1o","The order has been placed.":"\u0110\u01a1n h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1eb7t.","The percentage discount provided is not valid.":"Ph\u1ea7n tr\u0103m chi\u1ebft kh\u1ea5u kh\u00f4ng h\u1ee3p l\u1ec7.","A discount cannot exceed the sub total value of an order.":"Gi\u1ea3m gi\u00e1 kh\u00f4ng \u0111\u01b0\u1ee3c v\u01b0\u1ee3t qu\u00e1 t\u1ed5ng gi\u00e1 tr\u1ecb ph\u1ee5 c\u1ee7a m\u1ed9t \u0111\u01a1n \u0111\u1eb7t h\u00e0ng.","No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.":"Kh\u00f4ng c\u00f3 kho\u1ea3n thanh to\u00e1n n\u00e0o \u0111\u01b0\u1ee3c mong \u0111\u1ee3i v\u00e0o l\u00fac n\u00e0y. N\u1ebfu kh\u00e1ch h\u00e0ng mu\u1ed1n tr\u1ea3 s\u1edbm, h\u00e3y c\u00e2n nh\u1eafc \u0111i\u1ec1u ch\u1ec9nh ng\u00e0y tr\u1ea3 g\u00f3p.","The payment has been saved.":"Thanh to\u00e1n \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u.","Unable to edit an order that is completely paid.":"Kh\u00f4ng th\u1ec3 ch\u1ec9nh s\u1eeda \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n ho\u00e0n to\u00e0n.","Unable to proceed as one of the previous submitted payment is missing from the order.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c v\u00ec m\u1ed9t trong c\u00e1c kho\u1ea3n thanh to\u00e1n \u0111\u00e3 g\u1eedi tr\u01b0\u1edbc \u0111\u00f3 b\u1ecb thi\u1ebfu trong \u0111\u01a1n \u0111\u1eb7t h\u00e0ng.","The order payment status cannot switch to hold as a payment has already been made on that order.":"Tr\u1ea1ng th\u00e1i thanh to\u00e1n \u0111\u01a1n \u0111\u1eb7t h\u00e0ng kh\u00f4ng th\u1ec3 chuy\u1ec3n sang gi\u1eef v\u00ec m\u1ed9t kho\u1ea3n thanh to\u00e1n \u0111\u00e3 \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n tr\u00ean \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00f3.","Unable to proceed. One of the submitted payment type is not supported.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c. M\u1ed9t trong nh\u1eefng h\u00ecnh th\u1ee9c thanh to\u00e1n \u0111\u00e3 g\u1eedi kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3.","Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c, s\u1ea3n ph\u1ea9m \"%s\" c\u00f3 m\u1ed9t \u0111\u01a1n v\u1ecb kh\u00f4ng th\u1ec3 \u0111\u01b0\u1ee3c truy xu\u1ea5t. N\u00f3 c\u00f3 th\u1ec3 \u0111\u00e3 b\u1ecb x\u00f3a.","Unable to find the customer using the provided ID. The order creation has failed.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y kh\u00e1ch h\u00e0ng. Vi\u1ec7c t\u1ea1o \u0111\u01a1n h\u00e0ng kh\u00f4ng th\u00e0nh c\u00f4ng.","Unable to proceed a refund on an unpaid order.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c ho\u00e0n l\u1ea1i ti\u1ec1n cho m\u1ed9t \u0111\u01a1n \u0111\u1eb7t h\u00e0ng ch\u01b0a thanh to\u00e1n.","The current credit has been issued from a refund.":"T\u00edn d\u1ee5ng hi\u1ec7n t\u1ea1i \u0111\u00e3 \u0111\u01b0\u1ee3c ph\u00e1t h\u00e0nh t\u1eeb kho\u1ea3n ti\u1ec1n ho\u00e0n l\u1ea1i.","The order has been successfully refunded.":"\u0110\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c ho\u00e0n ti\u1ec1n th\u00e0nh c\u00f4ng.","unable to proceed to a refund as the provided status is not supported.":"kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c ho\u00e0n l\u1ea1i ti\u1ec1n v\u00ec tr\u1ea1ng th\u00e1i \u0111\u00e3 cung c\u1ea5p kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3.","The product %s has been successfully refunded.":"S\u1ea3n ph\u1ea9m %s \u0111\u00e3 \u0111\u01b0\u1ee3c ho\u00e0n tr\u1ea3 th\u00e0nh c\u00f4ng.","Unable to find the order product using the provided id.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y s\u1ea3n ph\u1ea9m \u0111\u1eb7t h\u00e0ng b\u1eb1ng m\u00e3 nh\u00e0 cung c\u1ea5p.","Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng \"%s\" nh\u01b0 tr\u1ee5c v\u00e0 \"%s\" l\u00e0m \u0111\u1ecbnh danh","Unable to fetch the order as the provided pivot argument is not supported.":"Kh\u00f4ng th\u1ec3 t\u00ecm n\u1ea1p \u0111\u01a1n \u0111\u1eb7t h\u00e0ng v\u00ec \u0111\u1ed1i s\u1ed1 t\u1ed5ng h\u1ee3p \u0111\u00e3 cung c\u1ea5p kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3.","The product has been added to the order \"%s\"":"S\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c th\u00eam v\u00e0o \u0111\u01a1n h\u00e0ng \"%s\"","the order has been successfully computed.":"\u0110\u01a1n h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c t\u00ednh to\u00e1n.","The order has been deleted.":"\u0110\u01a1n h\u00e0ng \u0111\u00e3 b\u1ecb x\u00f3a.","The product has been successfully deleted from the order.":"S\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c x\u00f3a th\u00e0nh c\u00f4ng kh\u1ecfi \u0111\u01a1n \u0111\u1eb7t h\u00e0ng.","Unable to find the requested product on the provider order.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y s\u1ea3n ph\u1ea9m \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u trong \u0111\u01a1n \u0111\u1eb7t h\u00e0ng c\u1ee7a nh\u00e0 cung c\u1ea5p.","Unpaid Orders Turned Due":"C\u00e1c \u0111\u01a1n h\u00e0ng ch\u01b0a thanh to\u00e1n \u0111\u00e3 \u0111\u1ebfn h\u1ea1n","No orders to handle for the moment.":"Kh\u00f4ng c\u00f3 \u0111\u01a1n \u0111\u1eb7t h\u00e0ng n\u00e0o \u0111\u1ec3 x\u1eed l\u00fd v\u00e0o l\u00fac n\u00e0y.","The order has been correctly voided.":"\u0110\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c h\u1ee7y b\u1ecf m\u1ed9t c\u00e1ch ch\u00ednh x\u00e1c.","Unable to edit an already paid instalment.":"Kh\u00f4ng th\u1ec3 ch\u1ec9nh s\u1eeda m\u1ed9t kho\u1ea3n tr\u1ea3 g\u00f3p \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n.","The instalment has been saved.":"Ph\u1ea7n tr\u1ea3 g\u00f3p \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u.","The instalment has been deleted.":"Ph\u1ea7n tr\u1ea3 g\u00f3p \u0111\u00e3 b\u1ecb x\u00f3a.","The defined amount is not valid.":"S\u1ed1 ti\u1ec1n \u0111\u00e3 quy \u0111\u1ecbnh kh\u00f4ng h\u1ee3p l\u1ec7.","No further instalments is allowed for this order. The total instalment already covers the order total.":"Kh\u00f4ng cho ph\u00e9p tr\u1ea3 g\u00f3p th\u00eam cho \u0111\u01a1n \u0111\u1eb7t h\u00e0ng n\u00e0y. T\u1ed5ng s\u1ed1 l\u1ea7n tr\u1ea3 g\u00f3p \u0111\u00e3 bao g\u1ed3m t\u1ed5ng s\u1ed1 \u0111\u01a1n \u0111\u1eb7t h\u00e0ng.","The instalment has been created.":"Ph\u1ea7n c\u00e0i \u0111\u1eb7t \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The provided status is not supported.":"Tr\u1ea1ng th\u00e1i kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3.","The order has been successfully updated.":"\u0110\u01a1n h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng.","Unable to find the requested procurement using the provided identifier.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y y\u00eau c\u1ea7u mua s\u1eafm b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng m\u00e3 s\u1ed1 \u0111\u1ecbnh danh n\u00e0y.","Unable to find the assigned provider.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y nh\u00e0 cung c\u1ea5p \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh.","The procurement has been created.":"Vi\u1ec7c mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o ra.","Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.":"Kh\u00f4ng th\u1ec3 ch\u1ec9nh s\u1eeda mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u. Vui l\u00f2ng xem x\u00e9t vi\u1ec7c th\u1ef1c hi\u1ec7n v\u00e0 \u0111i\u1ec1u ch\u1ec9nh kho.","The provider has been edited.":"Nh\u00e0 cung c\u1ea5p \u0111\u00e3 \u0111\u01b0\u1ee3c ch\u1ec9nh s\u1eeda.","Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"":"Kh\u00f4ng th\u1ec3 c\u00f3 nh\u00f3m \u0111\u01a1n v\u1ecb cho s\u1ea3n ph\u1ea9m b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng tham chi\u1ebfu \"%s\" nh\u01b0 \"%s\"","The operation has completed.":"Ho\u1ea1t \u0111\u1ed9ng \u0111\u00e3 ho\u00e0n th\u00e0nh.","The procurement has been refreshed.":"Vi\u1ec7c mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c l\u00e0m m\u1edbi.","The procurement has been reset.":"Vi\u1ec7c mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1eb7t l\u1ea1i.","The procurement products has been deleted.":"C\u00e1c s\u1ea3n ph\u1ea9m mua s\u1eafm \u0111\u00e3 b\u1ecb x\u00f3a.","The procurement product has been updated.":"S\u1ea3n ph\u1ea9m mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Unable to find the procurement product using the provided id.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y s\u1ea3n ph\u1ea9m mua s\u1eafm b\u1eb1ng m\u00e3 nh\u00e0 cung c\u1ea5p n\u00e0y.","The product %s has been deleted from the procurement %s":"S\u1ea3n ph\u1ea9m %s \u0111\u00e3 b\u1ecb x\u00f3a kh\u1ecfi mua s\u1eafm %s","The product with the following ID \"%s\" is not initially included on the procurement":"M\u00e3 s\u1ea3n ph\u1ea9m \"%s\" ch\u01b0a \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t khi mua h\u00e0ng","The procurement products has been updated.":"C\u00e1c s\u1ea3n ph\u1ea9m mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Procurement Automatically Stocked":"Mua s\u1eafm t\u1ef1 \u0111\u1ed9ng d\u1ef1 tr\u1eef","Draft":"B\u1ea3n th\u1ea3o","The category has been created":"Nh\u00f3m \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o","Unable to find the product using the provided id.":"Kh\u00f4ng t\u00ecm th\u1ea5y s\u1ea3n ph\u1ea9m.","Unable to find the requested product using the provided SKU.":"Kh\u00f4ng t\u00ecm th\u1ea5y s\u1ea3n ph\u1ea9m.","The variable product has been created.":"S\u1ea3n ph\u1ea9m bi\u1ebfn th\u1ec3(\u0111vt kh\u00e1c) \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The provided barcode \"%s\" is already in use.":"M\u00e3 v\u1ea1ch \"%s\" \u0111\u00e3 t\u1ed3n t\u1ea1i.","The provided SKU \"%s\" is already in use.":"M\u00e3 s\u1ea3n ph\u1ea9m \"%s\" \u0111\u00e3 t\u1ed3n t\u1ea1i.","The product has been saved.":"S\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u.","The provided barcode is already in use.":"M\u00e3 v\u1ea1ch \u0111\u00e3 t\u1ed3n t\u1ea1i.","The provided SKU is already in use.":"M\u00e3 s\u1ea3n ph\u1ea9m \u0111\u00e3 t\u1ed3n t\u1ea1i.","The product has been updated":"S\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt","The variable product has been updated.":"Bi\u1ebfn th\u1ec3 s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","The product variations has been reset":"Bi\u1ebfn th\u1ec3 s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1eb7t l\u1ea1i","The product has been reset.":"S\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1eb7t l\u1ea1i.","The product \"%s\" has been successfully deleted":"S\u1ea3n ph\u1ea9m \"%s\" \u0111\u00e3 \u0111\u01b0\u1ee3c x\u00f3a th\u00e0nh c\u00f4ng","Unable to find the requested variation using the provided ID.":"Kh\u00f4ng t\u00ecm th\u1ea5y bi\u1ebfn th\u1ec3.","The product stock has been updated.":"Kho s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","The action is not an allowed operation.":"H\u00e0nh \u0111\u1ed9ng kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t ho\u1ea1t \u0111\u1ed9ng \u0111\u01b0\u1ee3c ph\u00e9p.","The product quantity has been updated.":"S\u1ed1 l\u01b0\u1ee3ng s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","There is no variations to delete.":"Kh\u00f4ng c\u00f3 bi\u1ebfn th\u1ec3 n\u00e0o \u0111\u1ec3 x\u00f3a.","There is no products to delete.":"Kh\u00f4ng c\u00f3 s\u1ea3n ph\u1ea9m n\u00e0o \u0111\u1ec3 x\u00f3a.","The product variation has been successfully created.":"Bi\u1ebfn th\u1ec3 s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o th\u00e0nh c\u00f4ng.","The product variation has been updated.":"Bi\u1ebfn th\u1ec3 s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng.","The provider has been created.":"Nh\u00e0 cung c\u1ea5p \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The provider has been updated.":"Nh\u00e0 cung c\u1ea5p \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Unable to find the provider using the specified id.":"Kh\u00f4ng t\u00ecm th\u1ea5y nh\u00e0 cung c\u1ea5p.","The provider has been deleted.":"Nh\u00e0 cung c\u1ea5p \u0111\u00e3 b\u1ecb x\u00f3a.","Unable to find the provider using the specified identifier.":"Kh\u00f4ng t\u00ecm th\u1ea5y nh\u00e0 cung c\u1ea5p.","The provider account has been updated.":"T\u00e0i kho\u1ea3n nh\u00e0 cung c\u1ea5p \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","The procurement payment has been deducted.":"Kho\u1ea3n thanh to\u00e1n mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c kh\u1ea5u tr\u1eeb.","The dashboard report has been updated.":"B\u00e1o c\u00e1o trang t\u1ed5ng quan \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Untracked Stock Operation":"Ho\u1ea1t \u0111\u1ed9ng h\u00e0ng t\u1ed3n kho kh\u00f4ng theo d\u00f5i","Unsupported action":"H\u00e0nh \u0111\u1ed9ng kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3","The expense has been correctly saved.":"Chi ph\u00ed \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u.","The table has been truncated.":"B\u1ea3ng \u0111\u00e3 b\u1ecb c\u1eaft b\u1edbt.","Untitled Settings Page":"Trang c\u00e0i \u0111\u1eb7t kh\u00f4ng c\u00f3 ti\u00eau \u0111\u1ec1","No description provided for this settings page.":"Kh\u00f4ng c\u00f3 m\u00f4 t\u1ea3 n\u00e0o \u0111\u01b0\u1ee3c cung c\u1ea5p cho trang c\u00e0i \u0111\u1eb7t n\u00e0y.","The form has been successfully saved.":"Bi\u1ec3u m\u1eabu \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u th\u00e0nh c\u00f4ng.","Unable to reach the host":"Kh\u00f4ng th\u1ec3 k\u1ebft n\u1ed1i v\u1edbi m\u00e1y ch\u1ee7","Unable to connect to the database using the credentials provided.":"Kh\u00f4ng th\u1ec3 k\u1ebft n\u1ed1i v\u1edbi c\u01a1 s\u1edf d\u1eef li\u1ec7u b\u1eb1ng th\u00f4ng tin \u0111\u0103ng nh\u1eadp \u0111\u01b0\u1ee3c cung c\u1ea5p.","Unable to select the database.":"Kh\u00f4ng th\u1ec3 ch\u1ecdn c\u01a1 s\u1edf d\u1eef li\u1ec7u.","Access denied for this user.":"Quy\u1ec1n truy c\u1eadp b\u1ecb t\u1eeb ch\u1ed1i \u0111\u1ed1i v\u1edbi ng\u01b0\u1eddi d\u00f9ng n\u00e0y.","The connexion with the database was successful":"K\u1ebft n\u1ed1i v\u1edbi c\u01a1 s\u1edf d\u1eef li\u1ec7u \u0111\u00e3 th\u00e0nh c\u00f4ng","Cash":"Ti\u1ec1n m\u1eb7t","Bank Payment":"Chuy\u1ec3n kho\u1ea3n","NexoPOS has been successfully installed.":"VasPOS \u0111\u00e3 \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t th\u00e0nh c\u00f4ng.","A tax cannot be his own parent.":"M\u1ed9t m\u1ee5c thu\u1ebf kh\u00f4ng th\u1ec3 l\u00e0 cha c\u1ee7a ch\u00ednh m\u1ee5c \u0111\u00f3.","The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".":"H\u1ec7 th\u1ed1ng ph\u00e2n c\u1ea5p thu\u1ebf \u0111\u01b0\u1ee3c gi\u1edbi h\u1ea1n \u1edf 1. M\u1ed9t lo\u1ea1i thu\u1ebf ph\u1ee5 kh\u00f4ng \u0111\u01b0\u1ee3c \u0111\u1eb7t lo\u1ea1i thu\u1ebf th\u00e0nh \"grouped\".","Unable to find the requested tax using the provided identifier.":"Kh\u00f4ng t\u00ecm th\u1ea5y kho\u1ea3n thu\u1ebf \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng m\u00e3 s\u1ed1 \u0111\u1ecbnh danh \u0111\u00e3 cung c\u1ea5p.","The tax group has been correctly saved.":"Nh\u00f3m thu\u1ebf \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u.","The tax has been correctly created.":"M\u1ee9c thu\u1ebf \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The tax has been successfully deleted.":"M\u1ee9c thu\u1ebf \u0111\u00e3 b\u1ecb x\u00f3a.","The Unit Group has been created.":"Nh\u00f3m \u0111vt \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The unit group %s has been updated.":"Nh\u00f3m \u0111vt %s \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Unable to find the unit group to which this unit is attached.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y nh\u00f3m \u0111\u01a1n v\u1ecb m\u00e0 \u0111\u01a1n v\u1ecb n\u00e0y \u0111\u01b0\u1ee3c \u0111\u00ednh k\u00e8m.","The unit has been saved.":"\u0110vt \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u.","Unable to find the Unit using the provided id.":"Kh\u00f4ng t\u00ecm th\u1ea5y \u0111vt b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng m\u00e3 nh\u00e0 cung c\u1ea5p","The unit has been updated.":"\u0110vt \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","The unit group %s has more than one base unit":"Nh\u00f3m \u0111vt %s c\u00f3 nhi\u1ec1u h\u01a1n m\u1ed9t \u0111\u01a1n v\u1ecb c\u01a1 s\u1edf","The unit has been deleted.":"\u0110vt \u0111\u00e3 b\u1ecb x\u00f3a.","unable to find this validation class %s.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y l\u1edbp x\u00e1c th\u1ef1c n\u00e0y %s.","Enable Reward":"B\u1eadt ph\u1ea7n th\u01b0\u1edfng","Will activate the reward system for the customers.":"S\u1ebd k\u00edch ho\u1ea1t h\u1ec7 th\u1ed1ng ph\u1ea7n th\u01b0\u1edfng cho kh\u00e1ch h\u00e0ng.","Default Customer Account":"T\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng m\u1eb7c \u0111\u1ecbnh","Default Customer Group":"Nh\u00f3m kh\u00e1ch h\u00e0ng m\u1eb7c \u0111\u1ecbnh","Select to which group each new created customers are assigned to.":"Ch\u1ecdn nh\u00f3m m\u00e0 m\u1ed7i kh\u00e1ch h\u00e0ng \u0111\u01b0\u1ee3c t\u1ea1o m\u1edbi s\u1ebd \u0111\u01b0\u1ee3c g\u00e1n cho.","Enable Credit & Account":"B\u1eadt t\u00edn d\u1ee5ng & T\u00e0i kho\u1ea3n","The customers will be able to make deposit or obtain credit.":"Kh\u00e1ch h\u00e0ng s\u1ebd c\u00f3 th\u1ec3 g\u1eedi ti\u1ec1n ho\u1eb7c nh\u1eadn t\u00edn d\u1ee5ng.","Store Name":"T\u00ean c\u1eeda h\u00e0ng","This is the store name.":"Nh\u1eadp t\u00ean c\u1eeda h\u00e0ng.","Store Address":"\u0110\u1ecba ch\u1ec9 c\u1eeda h\u00e0ng","The actual store address.":"\u0110\u1ecba ch\u1ec9 th\u1ef1c t\u1ebf c\u1eeda h\u00e0ng.","Store City":"Th\u00e0nh ph\u1ed1","The actual store city.":"Nh\u1eadp th\u00e0nh ph\u1ed1.","Store Phone":"\u0110i\u1ec7n tho\u1ea1i","The phone number to reach the store.":"\u0110i\u1ec7n tho\u1ea1i c\u1ee7a c\u1eeda h\u00e0ng.","Store Email":"Email","The actual store email. Might be used on invoice or for reports.":"Email th\u1ef1c t\u1ebf c\u1ee7a c\u1eeda h\u00e0ng. C\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng tr\u00ean h\u00f3a \u0111\u01a1n ho\u1eb7c b\u00e1o c\u00e1o.","Store PO.Box":"H\u00f2m th\u01b0","The store mail box number.":"H\u00f2m th\u01b0 c\u1ee7a c\u1eeda h\u00e0ng.","Store Fax":"Fax","The store fax number.":"S\u1ed1 fax c\u1ee7a c\u1eeda h\u00e0ng.","Store Additional Information":"L\u01b0u tr\u1eef th\u00f4ng tin b\u1ed5 sung","Store additional information.":"L\u01b0u tr\u1eef th\u00f4ng tin b\u1ed5 sung.","Store Square Logo":"Logo c\u1ee7a c\u1eeda h\u00e0ng","Choose what is the square logo of the store.":"Ch\u1ecdn h\u00ecnh logo cho c\u1eeda h\u00e0ng.","Store Rectangle Logo":"Logo c\u1ee7a c\u1eeda h\u00e0ng","Choose what is the rectangle logo of the store.":"Ch\u1ecdn logo cho c\u1eeda h\u00e0ng.","Define the default fallback language.":"X\u00e1c \u0111\u1ecbnh ng\u00f4n ng\u1eef d\u1ef1 ph\u00f2ng m\u1eb7c \u0111\u1ecbnh.","Currency":"Ti\u1ec1n t\u1ec7","Currency Symbol":"K\u00fd hi\u1ec7u ti\u1ec1n t\u1ec7","This is the currency symbol.":"\u0110\u00e2y l\u00e0 k\u00fd hi\u1ec7u ti\u1ec1n t\u1ec7.","Currency ISO":"Ti\u1ec1n ngo\u1ea1i t\u1ec7","The international currency ISO format.":"\u0110\u1ecbnh d\u1ea1ng ti\u1ec1n ngo\u1ea1i t\u1ec7.","Currency Position":"V\u1ecb tr\u00ed ti\u1ec1n t\u1ec7","Before the amount":"Tr\u01b0\u1edbc s\u1ed1 ti\u1ec1n","After the amount":"Sau s\u1ed1 ti\u1ec1n","Define where the currency should be located.":"X\u00e1c \u0111\u1ecbnh v\u1ecb tr\u00ed c\u1ee7a \u0111\u1ed3ng ti\u1ec1n.","Preferred Currency":"Ti\u1ec1n t\u1ec7 \u01b0a th\u00edch","ISO Currency":"Ngo\u1ea1i t\u1ec7","Symbol":"Bi\u1ec3u t\u01b0\u1ee3ng","Determine what is the currency indicator that should be used.":"X\u00e1c \u0111\u1ecbnh ch\u1ec9 s\u1ed1 ti\u1ec1n t\u1ec7 n\u00ean \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0 g\u00ec.","Currency Thousand Separator":"D\u1ea5u ph\u00e2n c\u00e1ch nh\u00f3m s\u1ed1","Currency Decimal Separator":"D\u1ea5u th\u1eadp ph\u00e2n","Define the symbol that indicate decimal number. By default \".\" is used.":"D\u1ea5u th\u1eadp ph\u00e2n l\u00e0 d\u1ea5u ch\u1ea5m hay d\u1ea5u ph\u1ea9y.","Currency Precision":"\u0110\u1ed9 ch\u00ednh x\u00e1c ti\u1ec1n t\u1ec7","%s numbers after the decimal":"%s s\u1ed1 ch\u1eef s\u1ed1 sau d\u1ea5u th\u1eadp ph\u00e2n","Date Format":"\u0110\u1ecbnh d\u1ea1ng ng\u00e0y","This define how the date should be defined. The default format is \"Y-m-d\".":"\u0110\u1ecbnh d\u1ea1ng ng\u00e0y \"dd-mm-yyyy\".","Registration":"C\u00e0i \u0111\u1eb7t","Registration Open":"M\u1edf c\u00e0i \u0111\u1eb7t","Determine if everyone can register.":"X\u00e1c \u0111\u1ecbnh xem m\u1ecdi ng\u01b0\u1eddi c\u00f3 th\u1ec3 c\u00e0i \u0111\u1eb7t hay kh\u00f4ng.","Registration Role":"C\u00e0i \u0111\u1eb7t nh\u00f3m quy\u1ec1n","Select what is the registration role.":"Ch\u1ecdn c\u00e0i \u0111\u1eb7t nh\u00f3m quy\u1ec1n g\u00ec.","Requires Validation":"Y\u00eau c\u1ea7u x\u00e1c th\u1ef1c","Force account validation after the registration.":"Bu\u1ed9c x\u00e1c th\u1ef1c t\u00e0i kho\u1ea3n sau khi \u0111\u0103ng k\u00fd.","Allow Recovery":"Cho ph\u00e9p kh\u00f4i ph\u1ee5c","Allow any user to recover his account.":"Cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng kh\u00f4i ph\u1ee5c t\u00e0i kho\u1ea3n c\u1ee7a h\u1ecd.","Receipts":"Thu ti\u1ec1n","Receipt Template":"M\u1eabu phi\u1ebfu thu","Default":"M\u1eb7c \u0111\u1ecbnh","Choose the template that applies to receipts":"Ch\u1ecdn m\u1eabu phi\u1ebfu thu","Receipt Logo":"Logo phi\u1ebfu thu","Provide a URL to the logo.":"Ch\u1ecdn \u0111\u01b0\u1eddng d\u1eabn cho logo.","Receipt Footer":"Ch\u00e2n trang phi\u1ebfu thu","If you would like to add some disclosure at the bottom of the receipt.":"N\u1ebfu b\u1ea1n mu\u1ed1n th\u00eam m\u1ed9t s\u1ed1 th\u00f4ng tin \u1edf cu\u1ed1i phi\u1ebfu thu.","Column A":"C\u1ed9t A","Column B":"C\u1ed9t B","Order Code Type":"Lo\u1ea1i m\u00e3 \u0111\u01a1n h\u00e0ng","Determine how the system will generate code for each orders.":"X\u00e1c \u0111\u1ecbnh c\u00e1ch h\u1ec7 th\u1ed1ng s\u1ebd t\u1ea1o m\u00e3 cho m\u1ed7i \u0111\u01a1n \u0111\u1eb7t h\u00e0ng.","Sequential":"Tu\u1ea7n t\u1ef1","Random Code":"M\u00e3 ng\u1eabu nhi\u00ean","Number Sequential":"S\u1ed1 t\u0103ng d\u1ea7n","Allow Unpaid Orders":"Cho ph\u00e9p b\u00e1n n\u1ee3","Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".":"S\u1ebd ng\u0103n ch\u1eb7n c\u00e1c \u0111\u01a1n h\u00e0ng ch\u01b0a ho\u00e0n th\u00e0nh \u0111\u01b0\u1ee3c \u0111\u1eb7t. N\u1ebfu t\u00edn d\u1ee5ng \u0111\u01b0\u1ee3c cho ph\u00e9p, t\u00f9y ch\u1ecdn n\u00e0y n\u00ean \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh \"yes\".","Allow Partial Orders":"Cho ph\u00e9p tr\u1ea3 tr\u01b0\u1edbc, tr\u1ea3 t\u1eebng ph\u1ea7n","Will prevent partially paid orders to be placed.":"S\u1ebd ng\u0103n kh\u00f4ng cho c\u00e1c \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u01b0\u1ee3c thanh to\u00e1n m\u1ed9t ph\u1ea7n \u0111\u01b0\u1ee3c \u0111\u1eb7t.","Quotation Expiration":"H\u1ebft h\u1ea1n b\u00e1o gi\u00e1","Quotations will get deleted after they defined they has reached.":"Tr\u00edch d\u1eabn s\u1ebd b\u1ecb x\u00f3a sau khi h\u1ecd x\u00e1c \u0111\u1ecbnh r\u1eb1ng h\u1ecd \u0111\u00e3 \u0111\u1ea1t \u0111\u1ebfn.","%s Days":"%s ng\u00e0y","Features":"\u0110\u1eb7c tr\u01b0ng","Show Quantity":"Hi\u1ec3n th\u1ecb s\u1ed1 l\u01b0\u1ee3ng","Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.":"S\u1ebd hi\u1ec3n th\u1ecb b\u1ed9 ch\u1ecdn s\u1ed1 l\u01b0\u1ee3ng trong khi ch\u1ecdn m\u1ed9t s\u1ea3n ph\u1ea9m. N\u1ebfu kh\u00f4ng, s\u1ed1 l\u01b0\u1ee3ng m\u1eb7c \u0111\u1ecbnh \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh 1.","Allow Customer Creation":"Cho ph\u00e9p kh\u00e1ch h\u00e0ng t\u1ea1o","Allow customers to be created on the POS.":"Cho ph\u00e9p t\u1ea1o kh\u00e1ch h\u00e0ng tr\u00ean m\u00e0n h\u00ecnh b\u00e1n h\u00e0ng.","Quick Product":"T\u1ea1o nhanh s\u1ea3n ph\u1ea9m","Allow quick product to be created from the POS.":"Cho ph\u00e9p t\u1ea1o s\u1ea3n ph\u1ea9m tr\u00ean m\u00e0n h\u00ecnh b\u00e1n h\u00e0ng.","Editable Unit Price":"C\u00f3 th\u1ec3 s\u1eeda gi\u00e1","Allow product unit price to be edited.":"Cho ph\u00e9p ch\u1ec9nh s\u1eeda \u0111\u01a1n gi\u00e1 s\u1ea3n ph\u1ea9m.","Order Types":"Lo\u1ea1i \u0111\u01a1n h\u00e0ng","Control the order type enabled.":"Ki\u1ec3m so\u00e1t lo\u1ea1i \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u01b0\u1ee3c b\u1eadt.","Layout":"Tr\u00ecnh b\u00e0y","Retail Layout":"B\u1ed1 c\u1ee5c b\u00e1n l\u1ebb","Clothing Shop":"C\u1eeda h\u00e0ng qu\u1ea7n \u00e1o","POS Layout":"B\u1ed1 tr\u00ed c\u1eeda h\u00e0ng","Change the layout of the POS.":"Thay \u0111\u1ed5i b\u1ed1 c\u1ee5c c\u1ee7a c\u1eeda h\u00e0ng.","Printing":"In \u1ea5n","Printed Document":"In t\u00e0i li\u1ec7u","Choose the document used for printing aster a sale.":"Ch\u1ecdn t\u00e0i li\u1ec7u \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 in sau khi b\u00e1n h\u00e0ng.","Printing Enabled For":"In \u0111\u01b0\u1ee3c K\u00edch ho\u1ea1t cho","All Orders":"T\u1ea5t c\u1ea3 \u0111\u01a1n h\u00e0ng","From Partially Paid Orders":"\u0110\u01a1n h\u00e0ng n\u1ee3","Only Paid Orders":"Ch\u1ec9 nh\u1eefng \u0111\u01a1n \u0111\u00e3 thanh to\u00e1n \u0111\u1ee7 ti\u1ec1n","Determine when the printing should be enabled.":"X\u00e1c \u0111\u1ecbnh khi n\u00e0o m\u00e1y in s\u1ebd in.","Printing Gateway":"C\u1ed5ng m\u00e1y in","Determine what is the gateway used for printing.":"X\u00e1c \u0111\u1ecbnh xem in m\u00e1y in n\u00e0o.","Enable Cash Registers":"B\u1eadt m\u00e1y t\u00ednh c\u00e1 nh\u00e2n","Determine if the POS will support cash registers.":"X\u00e1c \u0111\u1ecbnh xem m\u00e1y POS c\u00f3 h\u1ed7 tr\u1ee3 m\u00e1y t\u00ednh c\u00e1 nh\u00e2n hay kh\u00f4ng.","Cashier Idle Counter":"M\u00e0n h\u00ecnh ch\u1edd","5 Minutes":"5 ph\u00fat","10 Minutes":"10 ph\u00fat","15 Minutes":"15 ph\u00fat","20 Minutes":"20 ph\u00fat","30 Minutes":"30 ph\u00fat","Selected after how many minutes the system will set the cashier as idle.":"\u0110\u01b0\u1ee3c ch\u1ecdn sau bao nhi\u00eau ph\u00fat h\u1ec7 th\u1ed1ng s\u1ebd t\u1ef1 \u0111\u1ed9ng b\u1eadt ch\u1ebf \u0111\u1ed9 m\u00e0n h\u00ecnh ch\u1edd.","Cash Disbursement":"Tr\u1ea3 ti\u1ec1n m\u1eb7t","Allow cash disbursement by the cashier.":"Cho ph\u00e9p thu ng\u00e2n thanh to\u00e1n b\u1eb1ng ti\u1ec1n m\u1eb7t.","Cash Registers":"M\u00e1y t\u00ednh ti\u1ec1n","Keyboard Shortcuts":"C\u00e1c ph\u00edm t\u1eaft","Cancel Order":"H\u1ee7y \u0111\u01a1n h\u00e0ng","Keyboard shortcut to cancel the current order.":"Ph\u00edm t\u1eaft \u0111\u1ec3 h\u1ee7y \u0111\u01a1n h\u00e0ng hi\u1ec7n t\u1ea1i.","Keyboard shortcut to hold the current order.":"Ph\u00edm t\u1eaft \u0111\u1ec3 c\u1ea5t(gi\u1eef) \u0111\u01a1n hi\u1ec7n t\u1ea1i.","Keyboard shortcut to create a customer.":"Ph\u00edm t\u1eaft \u0111\u1ec3 t\u1ea1o m\u1edbi kh\u00e1ch h\u00e0ng.","Proceed Payment":"Ti\u1ebfn h\u00e0nh thanh to\u00e1n","Keyboard shortcut to proceed to the payment.":"Ph\u00edm t\u1eaft \u0111\u1ec3 thanh to\u00e1n.","Open Shipping":"M\u1edf v\u1eadn chuy\u1ec3n","Keyboard shortcut to define shipping details.":"Ph\u00edm t\u1eaft \u0111\u1ec3 x\u00e1c \u0111\u1ecbnh chi ti\u1ebft v\u1eadn chuy\u1ec3n.","Open Note":"Ghi ch\u00fa","Keyboard shortcut to open the notes.":"Ph\u00edm t\u1eaft \u0111\u1ec3 m\u1edf ghi ch\u00fa.","Order Type Selector":"Ch\u1ecdn lo\u1ea1i \u0111\u01a1n h\u00e0ng","Keyboard shortcut to open the order type selector.":"Ph\u00edm t\u1eaft \u0111\u1ec3 ch\u1ecdn lo\u1ea1i \u0111\u01a1n.","Toggle Fullscreen":"Ch\u1ebf \u0111\u1ed9 to\u00e0n m\u00e0n h\u00ecnh","Keyboard shortcut to toggle fullscreen.":"Ph\u00edm t\u1eaft \u0111\u1ec3 b\u1eadt ch\u1ebf \u0111\u1ed9 to\u00e0n m\u00e0n h\u00ecnh.","Quick Search":"T\u00ecm nhanh","Keyboard shortcut open the quick search popup.":"Ph\u00edm t\u1eaft \u0111\u1ec3 t\u00ecm nhanh.","Amount Shortcuts":"Ph\u00edm t\u1eaft s\u1ed1 ti\u1ec1n","VAT Type":"Ki\u1ec3u thu\u1ebf","Determine the VAT type that should be used.":"X\u00e1c \u0111\u1ecbnh ki\u1ec3u thu\u1ebf.","Flat Rate":"T\u1ef7 l\u1ec7 c\u1ed1 \u0111\u1ecbnh","Flexible Rate":"T\u1ef7 l\u1ec7 linh ho\u1ea1t","Products Vat":"Thu\u1ebf s\u1ea3n ph\u1ea9m","Products & Flat Rate":"S\u1ea3n ph\u1ea9m & T\u1ef7 l\u1ec7 c\u1ed1 \u0111\u1ecbnh","Products & Flexible Rate":"S\u1ea3n ph\u1ea9m & T\u1ef7 l\u1ec7 linh ho\u1ea1t","Define the tax group that applies to the sales.":"X\u00e1c \u0111\u1ecbnh nh\u00f3m thu\u1ebf \u00e1p d\u1ee5ng cho vi\u1ec7c b\u00e1n h\u00e0ng.","Define how the tax is computed on sales.":"X\u00e1c \u0111\u1ecbnh c\u00e1ch t\u00ednh thu\u1ebf khi b\u00e1n h\u00e0ng.","VAT Settings":"C\u00e0i \u0111\u1eb7t thu\u1ebf GTGT","Enable Email Reporting":"B\u1eadt b\u00e1o c\u00e1o qua email","Determine if the reporting should be enabled globally.":"X\u00e1c \u0111\u1ecbnh xem c\u00f3 n\u00ean b\u1eadt b\u00e1o c\u00e1o tr\u00ean to\u00e0n c\u1ea7u hay kh\u00f4ng.","Supplies":"Cung c\u1ea5p","Public Name":"T\u00ean c\u00f4ng khai","Define what is the user public name. If not provided, the username is used instead.":"X\u00e1c \u0111\u1ecbnh t\u00ean c\u00f4ng khai c\u1ee7a ng\u01b0\u1eddi d\u00f9ng l\u00e0 g\u00ec. N\u1ebfu kh\u00f4ng \u0111\u01b0\u1ee3c cung c\u1ea5p, t\u00ean ng\u01b0\u1eddi d\u00f9ng s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng thay th\u1ebf.","Enable Workers":"Cho ph\u00e9p nh\u00e2n vi\u00ean","Test":"Ki\u1ec3m tra","Current Week":"Tu\u1ea7n n\u00e0y","Previous Week":"Tu\u1ea7n tr\u01b0\u1edbc","There is no migrations to perform for the module \"%s\"":"Kh\u00f4ng c\u00f3 chuy\u1ec3n \u0111\u1ed5i n\u00e0o \u0111\u1ec3 th\u1ef1c hi\u1ec7n cho module \"%s\"","The module migration has successfully been performed for the module \"%s\"":"Qu\u00e1 tr\u00ecnh di chuy\u1ec3n module \u0111\u00e3 \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n th\u00e0nh c\u00f4ng cho module \"%s\"","Sales By Payment Types":"B\u00e1n h\u00e0ng theo c\u00e1c h\u00ecnh th\u1ee9c thanh to\u00e1n","Provide a report of the sales by payment types, for a specific period.":"Cung c\u1ea5p b\u00e1o c\u00e1o doanh s\u1ed1 b\u00e1n h\u00e0ng theo c\u00e1c h\u00ecnh th\u1ee9c thanh to\u00e1n, trong m\u1ed9t kho\u1ea3ng th\u1eddi gian c\u1ee5 th\u1ec3.","Sales By Payments":"B\u00e1n h\u00e0ng theo phi\u1ebfu thu","Order Settings":"C\u00e0i \u0111\u1eb7t \u0111\u01a1n h\u00e0ng","Define the order name.":"Nh\u1eadp t\u00ean c\u1ee7a \u0111\u01a1n h\u00e0ng","Define the date of creation of the order.":"Nh\u1eadp ng\u00e0y t\u1ea1o \u0111\u01a1n","Total Refunds":"T\u1ed5ng s\u1ed1 ti\u1ec1n ho\u00e0n l\u1ea1i","Clients Registered":"Kh\u00e1ch h\u00e0ng \u0111\u00e3 \u0111\u0103ng k\u00fd","Commissions":"Ti\u1ec1n hoa h\u1ed3ng","Processing Status":"Tr\u1ea1ng th\u00e1i","Refunded Products":"S\u1ea3n ph\u1ea9m \u0111\u01b0\u1ee3c ho\u00e0n ti\u1ec1n","The delivery status of the order will be changed. Please confirm your action.":"Tr\u1ea1ng th\u00e1i giao h\u00e0ng c\u1ee7a \u0111\u01a1n h\u00e0ng s\u1ebd \u0111\u01b0\u1ee3c thay \u0111\u1ed5i. Vui l\u00f2ng x\u00e1c nh\u1eadn.","The product price has been updated.":"Gi\u00e1 s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","The editable price feature is disabled.":"Ch\u1ee9c n\u0103ng c\u00f3 th\u1ec3 s\u1eeda gi\u00e1 b\u1ecb t\u1eaft.","Order Refunds":"Ho\u00e0n l\u1ea1i ti\u1ec1n cho \u0111\u01a1n h\u00e0ng","Product Price":"Gi\u00e1 s\u1ea3n ph\u1ea9m","Unable to proceed":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c","Partially paid orders are disabled.":"\u0110\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 thanh to\u00e1n m\u1ed9t ph\u1ea7n b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a.","An order is currently being processed.":"M\u1ed9t \u0111\u01a1n \u0111\u1eb7t h\u00e0ng hi\u1ec7n \u0111ang \u0111\u01b0\u1ee3c x\u1eed l\u00fd.","Log out":"Tho\u00e1t","Refund receipt":"Bi\u00ean lai ho\u00e0n ti\u1ec1n","Recompute":"T\u00ednh l\u1ea1i","Sort Results":"S\u1eafp x\u1ebfp k\u1ebft qu\u1ea3","Using Quantity Ascending":"S\u1eed d\u1ee5ng s\u1ed1 l\u01b0\u1ee3ng t\u0103ng d\u1ea7n","Using Quantity Descending":"S\u1eed d\u1ee5ng s\u1ed1 l\u01b0\u1ee3ng gi\u1ea3m d\u1ea7n","Using Sales Ascending":"S\u1eed d\u1ee5ng B\u00e1n h\u00e0ng t\u0103ng d\u1ea7n","Using Sales Descending":"S\u1eed d\u1ee5ng B\u00e1n h\u00e0ng gi\u1ea3m d\u1ea7n","Using Name Ascending":"S\u1eed d\u1ee5ng t\u00ean t\u0103ng d\u1ea7n","Using Name Descending":"S\u1eed d\u1ee5ng t\u00ean gi\u1ea3m d\u1ea7n","Progress":"Ti\u1ebfn h\u00e0nh","Discounts":"Chi\u1ebft kh\u1ea5u","An invalid date were provided. Make sure it a prior date to the actual server date.":"M\u1ed9t ng\u00e0y kh\u00f4ng h\u1ee3p l\u1ec7 \u0111\u00e3 \u0111\u01b0\u1ee3c nh\u1eadp. H\u00e3y ch\u1eafc ch\u1eafn r\u1eb1ng \u0111\u00f3 l\u00e0 m\u1ed9t ng\u00e0y tr\u01b0\u1edbc ng\u00e0y hi\u1ec7n t\u1ea1i.","Computing report from %s...":"T\u00ednh t\u1eeb %s...","The demo has been enabled.":"Ch\u1ebf \u0111\u1ed9 demo \u0111\u00e3 \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t.","Refund Receipt":"Bi\u00ean lai ho\u00e0n l\u1ea1i ti\u1ec1n","Codabar":"Codabar","Code 128":"Code 128","Code 39":"Code 39","Code 11":"Code 11","UPC A":"UPC A","UPC E":"UPC E","Store Dashboard":"Trang t\u1ed5ng quan c\u1eeda h\u00e0ng","Cashier Dashboard":"B\u1ea3ng \u0111i\u1ec1u khi\u1ec3n thu ng\u00e2n","Default Dashboard":"B\u1ea3ng \u0111i\u1ec1u khi\u1ec3n m\u1eb7c \u0111\u1ecbnh","%s has been processed, %s has not been processed.":"%s \u0111ang \u0111\u01b0\u1ee3c ti\u1ebfn h\u00e0nh, %s kh\u00f4ng \u0111\u01b0\u1ee3c ti\u1ebfn h\u00e0nh.","Order Refund Receipt — %s":"Bi\u00ean lai ho\u00e0n l\u1ea1i ti\u1ec1n cho \u0111\u01a1n \u0111\u1eb7t h\u00e0ng — %s","Provides an overview over the best products sold during a specific period.":"Cung c\u1ea5p th\u00f4ng tin t\u1ed5ng quan v\u1ec1 c\u00e1c s\u1ea3n ph\u1ea9m t\u1ed1t nh\u1ea5t \u0111\u01b0\u1ee3c b\u00e1n trong m\u1ed9t kho\u1ea3ng th\u1eddi gian c\u1ee5 th\u1ec3.","The report will be computed for the current year.":"B\u00e1o c\u00e1o s\u1ebd \u0111\u01b0\u1ee3c t\u00ednh cho n\u0103m hi\u1ec7n t\u1ea1i.","Unknown report to refresh.":"B\u00e1o c\u00e1o kh\u00f4ng x\u00e1c \u0111\u1ecbnh c\u1ea7n l\u00e0m m\u1edbi.","Report Refreshed":"L\u00e0m m\u1edbi b\u00e1o c\u00e1o","The yearly report has been successfully refreshed for the year \"%s\".":"B\u00e1o c\u00e1o h\u00e0ng n\u0103m \u0111\u00e3 \u0111\u01b0\u1ee3c l\u00e0m m\u1edbi th\u00e0nh c\u00f4ng cho n\u0103m \"%s\".","Countable":"\u0110\u1ebfm \u0111\u01b0\u1ee3c","Piece":"M\u1ea3nh","GST":"GST","SGST":"SGST","CGST":"CGST","Sample Procurement %s":"Mua s\u1eafm m\u1eabu %s","generated":"\u0111\u01b0\u1ee3c t\u1ea1o ra","Not Available":"Kh\u00f4ng c\u00f3 s\u1eb5n","The report has been computed successfully.":"B\u00e1o c\u00e1o \u0111\u00e3 \u0111\u01b0\u1ee3c t\u00ednh th\u00e0nh c\u00f4ng.","Create a customer":"T\u1ea1o kh\u00e1ch h\u00e0ng","Credit":"T\u00edn d\u1ee5ng","Debit":"Ghi n\u1ee3","All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.":"T\u1ea5t c\u1ea3 c\u00e1c th\u1ef1c th\u1ec3 \u0111\u01b0\u1ee3c \u0111\u00ednh k\u00e8m v\u1edbi danh m\u1ee5c n\u00e0y s\u1ebd t\u1ea1o ra m\u1ed9t \"ghi n\u1ee3\" hay \"ghi c\u00f3\" v\u00e0o l\u1ecbch s\u1eed d\u00f2ng ti\u1ec1n.","Account":"T\u00e0i kho\u1ea3n","Provide the accounting number for this category.":"Cung c\u1ea5p t\u00e0i kho\u1ea3n k\u1ebf to\u00e1n cho nh\u00f3m n\u00e0y.","Accounting":"K\u1ebf to\u00e1n","Procurement Cash Flow Account":"Nh\u1eadt k\u00fd mua h\u00e0ng","Sale Cash Flow Account":"Nh\u1eadt k\u00fd b\u00e1n h\u00e0ng","Sales Refunds Account":"H\u00e0ng b\u00e1n b\u1ecb tr\u1ea3 l\u1ea1i","Stock return for spoiled items will be attached to this account":"Tr\u1ea3 l\u1ea1i h\u00e0ng cho c\u00e1c m\u1eb7t h\u00e0ng h\u01b0 h\u1ecfng s\u1ebd \u0111\u01b0\u1ee3c \u0111\u00ednh k\u00e8m v\u00e0o t\u00e0i kho\u1ea3n n\u00e0y","The reason has been updated.":"L\u00fd do \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","You must select a customer before applying a coupon.":"B\u1ea1n ph\u1ea3i ch\u1ecdn m\u1ed9t kh\u00e1ch h\u00e0ng tr\u01b0\u1edbc khi \u00e1p d\u1ee5ng phi\u1ebfu gi\u1ea3m gi\u00e1.","No coupons for the selected customer...":"Kh\u00f4ng c\u00f3 phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0o cho kh\u00e1ch h\u00e0ng \u0111\u00e3 ch\u1ecdn...","Use Coupon":"S\u1eed d\u1ee5ng phi\u1ebfu gi\u1ea3m gi\u00e1","Use Customer ?":"S\u1eed d\u1ee5ng kh\u00e1ch h\u00e0ng ?","No customer is selected. Would you like to proceed with this customer ?":"Kh\u00f4ng c\u00f3 kh\u00e1ch h\u00e0ng n\u00e0o \u0111\u01b0\u1ee3c ch\u1ecdn. B\u1ea1n c\u00f3 mu\u1ed1n ti\u1ebfp t\u1ee5c v\u1edbi kh\u00e1ch h\u00e0ng n\u00e0y kh\u00f4ng ?","Change Customer ?":"Thay \u0111\u1ed5i kh\u00e1ch h\u00e0ng ?","Would you like to assign this customer to the ongoing order ?":"B\u1ea1n c\u00f3 mu\u1ed1n ch\u1ec9 \u0111\u1ecbnh kh\u00e1ch h\u00e0ng n\u00e0y cho \u0111\u01a1n h\u00e0ng \u0111ang di\u1ec5n ra kh\u00f4ng ?","Product \/ Service":"H\u00e0ng h\u00f3a \/ D\u1ecbch v\u1ee5","An error has occurred while computing the product.":"\u0110\u00e3 x\u1ea3y ra l\u1ed7i khi t\u00ednh to\u00e1n s\u1ea3n ph\u1ea9m.","Provide a unique name for the product.":"Cung c\u1ea5p m\u1ed9t t\u00ean duy nh\u1ea5t cho s\u1ea3n ph\u1ea9m.","Define what is the sale price of the item.":"X\u00e1c \u0111\u1ecbnh gi\u00e1 b\u00e1n c\u1ee7a m\u1eb7t h\u00e0ng l\u00e0 bao nhi\u00eau.","Set the quantity of the product.":"\u0110\u1eb7t s\u1ed1 l\u01b0\u1ee3ng s\u1ea3n ph\u1ea9m.","Define what is tax type of the item.":"X\u00e1c \u0111\u1ecbnh lo\u1ea1i thu\u1ebf c\u1ee7a m\u1eb7t h\u00e0ng l\u00e0 g\u00ec.","Choose the tax group that should apply to the item.":"Ch\u1ecdn nh\u00f3m thu\u1ebf s\u1ebd \u00e1p d\u1ee5ng cho m\u1eb7t h\u00e0ng.","Assign a unit to the product.":"G\u00e1n \u0111vt cho s\u1ea3n ph\u1ea9m.","Some products has been added to the cart. Would youl ike to discard this order ?":"M\u1ed9t s\u1ed1 s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c th\u00eam v\u00e0o gi\u1ecf h\u00e0ng. B\u1ea1n c\u00f3 mu\u1ed1n h\u1ee7y \u0111\u01a1n \u0111\u1eb7t h\u00e0ng n\u00e0y kh\u00f4ng ?","Customer Accounts List":"Danh s\u00e1ch t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng","Display all customer accounts.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 c\u00e1c t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng.","No customer accounts has been registered":"Kh\u00f4ng c\u00f3 t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new customer account":"Th\u00eam t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng m\u1edbi","Create a new customer account":"T\u1ea1o t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng m\u1edbi","Register a new customer account and save it.":"\u0110\u0103ng k\u00fd t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng m\u1edbi v\u00e0 l\u01b0u n\u00f3.","Edit customer account":"S\u1eeda t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng","Modify Customer Account.":"C\u1eadp nh\u1eadt t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng.","Return to Customer Accounts":"Tr\u1edf l\u1ea1i t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng","This will be ignored.":"\u0110i\u1ec1u n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c b\u1ecf qua.","Define the amount of the transaction":"X\u00e1c \u0111\u1ecbnh s\u1ed1 ti\u1ec1n c\u1ee7a giao d\u1ecbch","Define what operation will occurs on the customer account.":"X\u00e1c \u0111\u1ecbnh thao t\u00e1c n\u00e0o s\u1ebd x\u1ea3y ra tr\u00ean t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng.","Provider Procurements List":"Danh s\u00e1ch Mua h\u00e0ng c\u1ee7a Nh\u00e0 cung c\u1ea5p","Display all provider procurements.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 c\u00e1c mua h\u00e0ng c\u1ee7a nh\u00e0 cung c\u1ea5p.","No provider procurements has been registered":"Kh\u00f4ng c\u00f3 mua s\u1eafm nh\u00e0 cung c\u1ea5p n\u00e0o \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new provider procurement":"Th\u00eam mua s\u1eafm nh\u00e0 cung c\u1ea5p m\u1edbi","Create a new provider procurement":"T\u1ea1o mua s\u1eafm nh\u00e0 cung c\u1ea5p m\u1edbi","Register a new provider procurement and save it.":"\u0110\u0103ng k\u00fd mua s\u1eafm nh\u00e0 cung c\u1ea5p m\u1edbi v\u00e0 l\u01b0u n\u00f3.","Edit provider procurement":"Ch\u1ec9nh s\u1eeda mua h\u00e0ng c\u1ee7a nh\u00e0 cung c\u1ea5p","Modify Provider Procurement.":"C\u1eadp nh\u1eadt mua h\u00e0ng c\u1ee7a nh\u00e0 cung c\u1ea5p.","Return to Provider Procurements":"Tr\u1edf l\u1ea1i Mua s\u1eafm c\u1ee7a Nh\u00e0 cung c\u1ea5p","Delivered On":"\u0110\u00e3 giao v\u00e0o","Items":"M\u1eb7t h\u00e0ng","Displays the customer account history for %s":"Hi\u1ec3n th\u1ecb l\u1ecbch s\u1eed t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng cho %s","Procurements by \"%s\"":"Cung c\u1ea5p b\u1edfi \"%s\"","Crediting":"T\u00edn d\u1ee5ng","Deducting":"Kh\u1ea5u tr\u1eeb","Order Payment":"Thanh to\u00e1n \u0111\u01a1n \u0111\u1eb7t h\u00e0ng","Order Refund":"\u0110\u01a1n h\u00e0ng tr\u1ea3 l\u1ea1i","Unknown Operation":"Ho\u1ea1t \u0111\u1ed9ng kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Unnamed Product":"S\u1ea3n ph\u1ea9m ch\u01b0a \u0111\u01b0\u1ee3c \u0111\u1eb7t t\u00ean","Bubble":"Bubble","Ding":"Ding","Pop":"Pop","Cash Sound":"Cash Sound","Sale Complete Sound":"\u00c2m thanh ho\u00e0n th\u00e0nh vi\u1ec7c b\u00e1n h\u00e0ng","New Item Audio":"\u00c2m thanh th\u00eam m\u1ee5c m\u1edbi","The sound that plays when an item is added to the cart.":"\u00c2m thanh ph\u00e1t khi m\u1ed9t m\u1eb7t h\u00e0ng \u0111\u01b0\u1ee3c th\u00eam v\u00e0o gi\u1ecf h\u00e0ng.","Howdy, {name}":"Ch\u00e0o, {name}","Would you like to perform the selected bulk action on the selected entries ?":"B\u1ea1n c\u00f3 mu\u1ed1n th\u1ef1c hi\u1ec7n h\u00e0nh \u0111\u1ed9ng h\u00e0ng lo\u1ea1t \u0111\u00e3 ch\u1ecdn tr\u00ean c\u00e1c m\u1ee5c \u0111\u00e3 ch\u1ecdn kh\u00f4ng ?","The payment to be made today is less than what is expected.":"Kho\u1ea3n thanh to\u00e1n s\u1ebd \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n ng\u00e0y h\u00f4m nay \u00edt h\u01a1n nh\u1eefng g\u00ec d\u1ef1 ki\u1ebfn.","Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.":"Kh\u00f4ng th\u1ec3 ch\u1ecdn kh\u00e1ch h\u00e0ng m\u1eb7c \u0111\u1ecbnh. C\u00f3 v\u1ebb nh\u01b0 kh\u00e1ch h\u00e0ng kh\u00f4ng c\u00f2n t\u1ed3n t\u1ea1i. Xem x\u00e9t thay \u0111\u1ed5i kh\u00e1ch h\u00e0ng m\u1eb7c \u0111\u1ecbnh tr\u00ean c\u00e0i \u0111\u1eb7t.","How to change database configuration":"C\u00e1ch thay \u0111\u1ed5i c\u1ea5u h\u00ecnh c\u01a1 s\u1edf d\u1eef li\u1ec7u","Common Database Issues":"C\u00e1c v\u1ea5n \u0111\u1ec1 chung v\u1ec1 c\u01a1 s\u1edf d\u1eef li\u1ec7u","Setup":"C\u00e0i \u0111\u1eb7t","Query Exception":"Truy v\u1ea5n","The category products has been refreshed":"Nh\u00f3m s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c l\u00e0m m\u1edbi","The requested customer cannot be found.":"Kh\u00f4ng t\u00ecm th\u1ea5y kh\u00e1ch h\u00e0ng.","Filters":"L\u1ecdc","Has Filters":"B\u1ed9 l\u1ecdc","N\/D":"N\/D","Range Starts":"Ph\u1ea1m vi b\u1eaft \u0111\u1ea7u","Range Ends":"Ph\u1ea1m vi k\u1ebft th\u00fac","Search Filters":"B\u1ed9 l\u1ecdc t\u00ecm ki\u1ebfm","Clear Filters":"X\u00f3a b\u1ed9 l\u1ecdc","Use Filters":"S\u1eed d\u1ee5ng b\u1ed9 l\u1ecdc","No rewards available the selected customer...":"Kh\u00f4ng c\u00f3 ph\u1ea7n th\u01b0\u1edfng n\u00e0o cho kh\u00e1ch h\u00e0ng \u0111\u00e3 ch\u1ecdn...","Unable to load the report as the timezone is not set on the settings.":"Kh\u00f4ng th\u1ec3 t\u1ea3i b\u00e1o c\u00e1o v\u00ec m\u00fai gi\u1edd kh\u00f4ng \u0111\u01b0\u1ee3c \u0111\u1eb7t trong c\u00e0i \u0111\u1eb7t.","There is no product to display...":"Kh\u00f4ng c\u00f3 s\u1ea3n ph\u1ea9m \u0111\u1ec3 hi\u1ec3n th\u1ecb...","Method Not Allowed":"Ph\u01b0\u01a1ng ph\u00e1p kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p","Documentation":"T\u00e0i li\u1ec7u","Module Version Mismatch":"Phi\u00ean b\u1ea3n m\u00f4-\u0111un kh\u00f4ng kh\u1edbp","Define how many time the coupon has been used.":"X\u00e1c \u0111\u1ecbnh s\u1ed1 l\u1ea7n phi\u1ebfu th\u01b0\u1edfng \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng.","Define the maximum usage possible for this coupon.":"X\u00e1c \u0111\u1ecbnh m\u1ee9c s\u1eed d\u1ee5ng t\u1ed1i \u0111a c\u00f3 th\u1ec3 cho phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0y.","Restrict the orders by the creation date.":"H\u1ea1n ch\u1ebf c\u00e1c \u0111\u01a1n \u0111\u1eb7t h\u00e0ng tr\u01b0\u1edbc ng\u00e0y t\u1ea1o.","Created Between":"\u0110\u01b0\u1ee3c t\u1ea1o ra gi\u1eefa","Restrict the orders by the payment status.":"H\u1ea1n ch\u1ebf c\u00e1c \u0111\u01a1n \u0111\u1eb7t h\u00e0ng theo tr\u1ea1ng th\u00e1i thanh to\u00e1n.","Due With Payment":"\u0110\u1ebfn h\u1ea1n thanh to\u00e1n","Restrict the orders by the author.":"H\u1ea1n ch\u1ebf c\u00e1c \u0111\u01a1n \u0111\u1eb7t h\u00e0ng c\u1ee7a ng\u01b0\u1eddi d\u00f9ng.","Restrict the orders by the customer.":"H\u1ea1n ch\u1ebf c\u00e1c \u0111\u01a1n \u0111\u1eb7t h\u00e0ng c\u1ee7a kh\u00e1ch h\u00e0ng.","Customer Phone":"\u0110i\u1ec7n tho\u1ea1i c\u1ee7a kh\u00e1ch h\u00e0ng","Restrict orders using the customer phone number.":"H\u1ea1n ch\u1ebf \u0111\u1eb7t h\u00e0ng s\u1eed d\u1ee5ng s\u1ed1 \u0111i\u1ec7n tho\u1ea1i c\u1ee7a kh\u00e1ch h\u00e0ng.","Restrict the orders to the cash registers.":"H\u1ea1n ch\u1ebf c\u00e1c \u0111\u01a1n \u0111\u1eb7t h\u00e0ng cho m\u00e1y t\u00ednh ti\u1ec1n.","Low Quantity":"S\u1ed1 l\u01b0\u1ee3ng t\u1ed1i thi\u1ec3u","Which quantity should be assumed low.":"S\u1ed1 l\u01b0\u1ee3ng n\u00e0o n\u00ean \u0111\u01b0\u1ee3c gi\u1ea3 \u0111\u1ecbnh l\u00e0 th\u1ea5p.","Stock Alert":"C\u1ea3nh b\u00e1o h\u00e0ng t\u1ed3n kho","See Products":"Xem S\u1ea3n ph\u1ea9m","Provider Products List":"Provider Products List","Display all Provider Products.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 c\u00e1c S\u1ea3n ph\u1ea9m c\u1ee7a Nh\u00e0 cung c\u1ea5p.","No Provider Products has been registered":"Kh\u00f4ng c\u00f3 S\u1ea3n ph\u1ea9m c\u1ee7a Nh\u00e0 cung c\u1ea5p n\u00e0o \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new Provider Product":"Th\u00eam m\u1edbi s\u1ea3n ph\u1ea9m","Create a new Provider Product":"T\u1ea1o m\u1edbi s\u1ea3n ph\u1ea9m","Register a new Provider Product and save it.":"\u0110\u0103ng k\u00fd m\u1edbi s\u1ea3n ph\u1ea9m.","Edit Provider Product":"S\u1eeda s\u1ea3n ph\u1ea9m","Modify Provider Product.":"C\u1eadp nh\u1eadt s\u1ea3n ph\u1ea9m.","Return to Provider Products":"Quay l\u1ea1i s\u1ea3n ph\u1ea9m","Clone":"Sao ch\u00e9p","Would you like to clone this role ?":"B\u1ea1n c\u00f3 mu\u1ed1n sao ch\u00e9p quy\u1ec1n n\u00e0y kh\u00f4ng ?","Incompatibility Exception":"Ngo\u1ea1i l\u1ec7 kh\u00f4ng t\u01b0\u01a1ng th\u00edch","The requested file cannot be downloaded or has already been downloaded.":"Kh\u00f4ng th\u1ec3 t\u1ea3i xu\u1ed1ng t\u1ec7p \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u ho\u1eb7c \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea3i xu\u1ed1ng.","Low Stock Report":"B\u00e1o c\u00e1o h\u00e0ng t\u1ed3n kho t\u1ed1i thi\u1ec3u","Low Stock Alert":"C\u1ea3nh b\u00e1o h\u00e0ng t\u1ed3n kho th\u1ea5p","The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ":"M\u00f4 \u0111un \"%s\" \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a v\u00ec ph\u1ee5 thu\u1ed9c \"%s\" kh\u00f4ng ph\u1ea3i l\u00e0 phi\u00ean b\u1ea3n y\u00eau c\u1ea7u t\u1ed1i thi\u1ec3u \"%s\". ","The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ":"M\u00f4 \u0111un \"%s\" \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a v\u00ec ph\u1ee5 thu\u1ed9c \"%s\" l\u00e0 tr\u00ean m\u1ed9t phi\u00ean b\u1ea3n ngo\u00e0i khuy\u1ebfn ngh\u1ecb \"%s\". ","Clone of \"%s\"":"B\u1ea3n sao c\u1ee7a \"%s\"","The role has been cloned.":"Quy\u1ec1n \u0111\u00e3 \u0111\u01b0\u1ee3c sao ch\u00e9p.","Merge Products On Receipt\/Invoice":"G\u1ed9p s\u1ea3n ph\u1ea9m c\u00f9ng m\u00e3, t\u00ean tr\u00ean phi\u1ebfu thu\/H\u00f3a \u0111\u01a1n","All similar products will be merged to avoid a paper waste for the receipt\/invoice.":"T\u1ea5t c\u1ea3 c\u00e1c s\u1ea3n ph\u1ea9m t\u01b0\u01a1ng t\u1ef1 s\u1ebd \u0111\u01b0\u1ee3c h\u1ee3p nh\u1ea5t \u0111\u1ec3 tr\u00e1nh l\u00e3ng ph\u00ed gi\u1ea5y cho phi\u1ebfu thu\/h\u00f3a \u0111\u01a1n.","Define whether the stock alert should be enabled for this unit.":"X\u00e1c \u0111\u1ecbnh xem c\u00f3 n\u00ean b\u1eadt c\u1ea3nh b\u00e1o c\u00f2n h\u00e0ng cho \u0111\u01a1n v\u1ecb t\u00ednh n\u00e0y hay kh\u00f4ng.","All Refunds":"T\u1ea5t c\u1ea3 c\u00e1c kho\u1ea3n tr\u1ea3 l\u1ea1i","No result match your query.":"Kh\u00f4ng c\u00f3 k\u1ebft qu\u1ea3 n\u00e0o ph\u00f9 h\u1ee3p v\u1edbi t\u00ecm ki\u1ebfm c\u1ee7a b\u1ea1n.","Report Type":"Lo\u1ea1i b\u00e1o c\u00e1o","Categories Detailed":"Chi ti\u1ebft nh\u00f3m","Categories Summary":"T\u1ed5ng nh\u00f3m","Allow you to choose the report type.":"Cho ph\u00e9p b\u1ea1n ch\u1ecdn lo\u1ea1i b\u00e1o c\u00e1o.","Unknown":"kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Not Authorized":"Kh\u00f4ng c\u00f3 quy\u1ec1n","Creating customers has been explicitly disabled from the settings.":"Vi\u1ec7c t\u1ea1o m\u1edbi kh\u00e1ch h\u00e0ng \u0111\u01b0\u1ee3c v\u00f4 hi\u1ec7u h\u00f3a trong khi c\u00e0i \u0111\u1eb7t h\u1ec7 th\u1ed1ng.","Sales Discounts":"Chi\u1ebft kh\u1ea5u","Sales Taxes":"Thu\u1ebf","Birth Date":"Ng\u00e0y sinh","Displays the customer birth date":"Hi\u1ec7n ng\u00e0y sinh kh\u00e1ch h\u00e0ng","Sale Value":"Ti\u1ec1n b\u00e1n","Purchase Value":"Ti\u1ec1n mua","Would you like to refresh this ?":"B\u1ea1n c\u00f3 mu\u1ed1n l\u00e0m m\u1edbi c\u00e1i n\u00e0y kh\u00f4ng ?","You cannot delete your own account.":"B\u1ea1n kh\u00f4ng th\u1ec3 x\u00f3a t\u00e0i kho\u1ea3n c\u1ee7a m\u00ecnh.","Sales Progress":"Ti\u1ebfn \u0111\u1ed9 b\u00e1n h\u00e0ng","Procurement Refreshed":"Mua s\u1eafm \u0111\u01b0\u1ee3c l\u00e0m m\u1edbi","The procurement \"%s\" has been successfully refreshed.":"Mua h\u00e0ng \"%s\" \u0111\u00e3 \u0111\u01b0\u1ee3c l\u00e0m m\u1edbi th\u00e0nh c\u00f4ng.","Partially Due":"\u0110\u1ebfn h\u1ea1n","No payment type has been selected on the settings. Please check your POS features and choose the supported order type":"Kh\u00f4ng c\u00f3 h\u00ecnh th\u1ee9c thanh to\u00e1n n\u00e0o \u0111\u01b0\u1ee3c ch\u1ecdn trong c\u00e0i \u0111\u1eb7t. Vui l\u00f2ng ki\u1ec3m tra c\u00e1c t\u00ednh n\u0103ng POS c\u1ee7a b\u1ea1n v\u00e0 ch\u1ecdn lo\u1ea1i \u0111\u01a1n h\u00e0ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3","Read More":"Chi ti\u1ebft","Wipe All":"L\u00e0m t\u01b0\u01a1i t\u1ea5t c\u1ea3","Wipe Plus Grocery":"L\u00e0m t\u01b0\u01a1i c\u1eeda h\u00e0ng","Accounts List":"Danh s\u00e1ch t\u00e0i kho\u1ea3n","Display All Accounts.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 t\u00e0i kho\u1ea3n.","No Account has been registered":"Ch\u01b0a c\u00f3 t\u00e0i kho\u1ea3n n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new Account":"Th\u00eam m\u1edbi t\u00e0i kho\u1ea3n","Create a new Account":"T\u1ea1o m\u1edbi t\u00e0i kho\u1ea3n","Register a new Account and save it.":"\u0110\u0103ng k\u00fd m\u1edbi t\u00e0i kho\u1ea3n v\u00e0 l\u01b0u l\u1ea1i.","Edit Account":"S\u1eeda t\u00e0i kho\u1ea3n","Modify An Account.":"C\u1eadp nh\u1eadt t\u00e0i kho\u1ea3n.","Return to Accounts":"Tr\u1edf l\u1ea1i t\u00e0i kho\u1ea3n","Accounts":"T\u00e0i kho\u1ea3n","Create Account":"T\u1ea1o t\u00e0i kho\u1ea3n","Payment Method":"Ph\u01b0\u01a1ng th\u1ee9c thanh to\u00e1n","Before submitting the payment, choose the payment type used for that order.":"Tr\u01b0\u1edbc khi g\u1eedi thanh to\u00e1n, h\u00e3y ch\u1ecdn h\u00ecnh th\u1ee9c thanh to\u00e1n \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00f3.","Select the payment type that must apply to the current order.":"Select the payment type that must apply to the current order.","Payment Type":"H\u00ecnh th\u1ee9c thanh to\u00e1n","Remove Image":"X\u00f3a \u1ea3nh","This form is not completely loaded.":"Bi\u1ec3u m\u1eabu n\u00e0y ch\u01b0a \u0111\u01b0\u1ee3c t\u1ea3i ho\u00e0n to\u00e0n.","Updating":"\u0110ang c\u1eadp nh\u1eadt","Updating Modules":"C\u1eadp nh\u1eadt module","Return":"Quay l\u1ea1i","Credit Limit":"Gi\u1edbi h\u1ea1n t\u00edn d\u1ee5ng","The request was canceled":"Y\u00eau c\u1ea7u \u0111\u00e3 b\u1ecb h\u1ee7y b\u1ecf","Payment Receipt — %s":"Thanh to\u00e1n — %s","Payment receipt":"Thanh to\u00e1n","Current Payment":"Phi\u1ebfu thu hi\u1ec7n t\u1ea1i","Total Paid":"T\u1ed5ng ti\u1ec1n thanh to\u00e1n","Set what should be the limit of the purchase on credit.":"\u0110\u1eb7t gi\u1edbi h\u1ea1n mua h\u00e0ng b\u1eb1ng t\u00edn d\u1ee5ng.","Provide the customer email.":"Cung c\u1ea5p email c\u1ee7a kh\u00e1ch h\u00e0ng.","Priority":"QUy\u1ec1n \u01b0u ti\u00ean","Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".":"X\u00e1c \u0111\u1ecbnh th\u1ee9 t\u1ef1 thanh to\u00e1n. Con s\u1ed1 c\u00e0ng th\u1ea5p, con s\u1ed1 \u0111\u1ea7u ti\u00ean s\u1ebd hi\u1ec3n th\u1ecb tr\u00ean c\u1eeda s\u1ed5 b\u1eadt l\u00ean thanh to\u00e1n. Ph\u1ea3i b\u1eaft \u0111\u1ea7u t\u1eeb \"0\".","Mode":"C\u00e1ch th\u1ee9c","Choose what mode applies to this demo.":"Ch\u1ecdn c\u00e1ch th\u1ee9c \u00e1p d\u1ee5ng.","Set if the sales should be created.":"\u0110\u1eb7t n\u1ebfu doanh s\u1ed1 b\u00e1n h\u00e0ng n\u00ean \u0111\u01b0\u1ee3c t\u1ea1o.","Create Procurements":"T\u1ea1o Mua s\u1eafm","Will create procurements.":"S\u1ebd t\u1ea1o ra c\u00e1c mua s\u1eafm.","Sales Account":"T\u00e0i kho\u1ea3n b\u00e1n h\u00e0ng","Procurements Account":"T\u00e0i kho\u1ea3n mua h\u00e0ng","Sale Refunds Account":"T\u00e0i kho\u1ea3n tr\u1ea3 l\u1ea1i","Spoiled Goods Account":"T\u00e0i kho\u1ea3n h\u00e0ng h\u00f3a h\u01b0 h\u1ecfng","Customer Crediting Account":"T\u00e0i kho\u1ea3n ghi c\u00f3 c\u1ee7a kh\u00e1ch h\u00e0ng","Customer Debiting Account":"T\u00e0i kho\u1ea3n ghi n\u1ee3 c\u1ee7a kh\u00e1ch h\u00e0ng","Unable to find the requested account type using the provided id.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y lo\u1ea1i t\u00e0i kho\u1ea3n \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u b\u1eb1ng m\u00e3 kh\u00e1ch \u0111\u00e3 cung c\u1ea5p.","You cannot delete an account type that has transaction bound.":"B\u1ea1n kh\u00f4ng th\u1ec3 x\u00f3a lo\u1ea1i t\u00e0i kho\u1ea3n c\u00f3 r\u00e0ng bu\u1ed9c giao d\u1ecbch.","The account type has been deleted.":"Lo\u1ea1i t\u00e0i kho\u1ea3n \u0111\u00e3 b\u1ecb x\u00f3a.","The account has been created.":"T\u00e0i kho\u1ea3n \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","Customer Credit Account":"T\u00e0i kho\u1ea3n ghi c\u00f3 Kh\u00e1ch h\u00e0ng","Customer Debit Account":"T\u00e0i kho\u1ea3n ghi n\u1ee3 c\u1ee7a kh\u00e1ch h\u00e0ng","Register Cash-In Account":"\u0110\u0103ng k\u00fd t\u00e0i kho\u1ea3n thu ti\u1ec1n m\u1eb7t","Register Cash-Out Account":"\u0110\u0103ng k\u00fd t\u00e0i kho\u1ea3n chi ti\u1ec1n m\u1eb7t","Require Valid Email":"B\u1eaft bu\u1ed9c Email h\u1ee3p l\u1ec7","Will for valid unique email for every customer.":"S\u1ebd cho email duy nh\u1ea5t h\u1ee3p l\u1ec7 cho m\u1ecdi kh\u00e1ch h\u00e0ng.","Choose an option":"L\u1ef1a ch\u1ecdn","Update Instalment Date":"C\u1eadp nh\u1eadt ng\u00e0y tr\u1ea3 g\u00f3p","Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.":"B\u1ea1n c\u00f3 mu\u1ed1n \u0111\u00e1nh d\u1ea5u kho\u1ea3n tr\u1ea3 g\u00f3p \u0111\u00f3 l\u00e0 \u0111\u1ebfn h\u1ea1n h\u00f4m nay kh\u00f4ng? N\u1ebfu b\u1ea1n x\u00e1c nh\u1eadn, kho\u1ea3n tr\u1ea3 g\u00f3p s\u1ebd \u0111\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u l\u00e0 \u0111\u00e3 thanh to\u00e1n.","Search for products.":"T\u00ecm ki\u1ebfm s\u1ea3n ph\u1ea9m.","Toggle merging similar products.":"Chuy\u1ec3n \u0111\u1ed5i h\u1ee3p nh\u1ea5t c\u00e1c s\u1ea3n ph\u1ea9m t\u01b0\u01a1ng t\u1ef1.","Toggle auto focus.":"Chuy\u1ec3n \u0111\u1ed5i ti\u00eau \u0111i\u1ec3m t\u1ef1 \u0111\u1ed9ng.","Filter User":"L\u1ecdc ng\u01b0\u1eddi d\u00f9ng","All Users":"T\u1ea5t c\u1ea3 ng\u01b0\u1eddi d\u00f9ng","No user was found for proceeding the filtering.":"Kh\u00f4ng t\u00ecm th\u1ea5y ng\u01b0\u1eddi d\u00f9ng n\u00e0o \u0111\u1ec3 ti\u1ebfp t\u1ee5c l\u1ecdc.","available":"c\u00f3 s\u1eb5n","No coupons applies to the cart.":"Kh\u00f4ng c\u00f3 phi\u1ebfu gi\u1ea3m gi\u00e1 \u00e1p d\u1ee5ng cho gi\u1ecf h\u00e0ng.","Selected":"\u0110\u00e3 ch\u1ecdn","An error occurred while opening the order options":"\u0110\u00e3 x\u1ea3y ra l\u1ed7i khi m\u1edf c\u00e1c t\u00f9y ch\u1ecdn \u0111\u01a1n h\u00e0ng","There is no instalment defined. Please set how many instalments are allowed for this order":"Kh\u00f4ng c\u00f3 ph\u1ea7n n\u00e0o \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh. Vui l\u00f2ng \u0111\u1eb7t s\u1ed1 l\u1ea7n tr\u1ea3 g\u00f3p \u0111\u01b0\u1ee3c ph\u00e9p cho \u0111\u01a1n h\u00e0ng n\u00e0y","Select Payment Gateway":"Ch\u1ecdn c\u1ed5ng thanh to\u00e1n","Gateway":"C\u1ed5ng thanh to\u00e1n","No tax is active":"Kh\u00f4ng thu\u1ebf","Unable to delete a payment attached to the order.":"kh\u00f4ng th\u1ec3 x\u00f3a m\u1ed9t kho\u1ea3n thanh to\u00e1n \u0111\u01b0\u1ee3c \u0111\u00ednh k\u00e8m v\u1edbi \u0111\u01a1n h\u00e0ng.","The discount has been set to the cart subtotal.":"Chi\u1ebft kh\u1ea5u t\u1ed5ng c\u1ee7a \u0111\u01a1n.","Order Deletion":"X\u00f3a \u0111\u01a1n h\u00e0ng","The current order will be deleted as no payment has been made so far.":"\u0110\u01a1n \u0111\u1eb7t h\u00e0ng hi\u1ec7n t\u1ea1i s\u1ebd b\u1ecb x\u00f3a v\u00ec kh\u00f4ng c\u00f3 kho\u1ea3n thanh to\u00e1n n\u00e0o \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n cho \u0111\u1ebfn nay.","Void The Order":"\u0110\u01a1n h\u00e0ng tr\u1ed1ng","Unable to void an unpaid order.":"Kh\u00f4ng th\u1ec3 h\u1ee7y \u0111\u01a1n \u0111\u1eb7t h\u00e0ng ch\u01b0a thanh to\u00e1n.","Environment Details":"Chi ti\u1ebft m\u00f4i tr\u01b0\u1eddng","Properties":"\u0110\u1eb7c t\u00ednh","Extensions":"Ti\u1ec7n \u00edch m\u1edf r\u1ed9ng","Configurations":"C\u1ea5u h\u00ecnh","Learn More":"T\u00ecm hi\u1ec3u th\u00eam","Search Products...":"T\u00ecm s\u1ea3n ph\u1ea9m...","No results to show.":"Kh\u00f4ng c\u00f3 k\u1ebft qu\u1ea3 n\u00e0o \u0111\u1ec3 hi\u1ec3n th\u1ecb.","Start by choosing a range and loading the report.":"B\u1eaft \u0111\u1ea7u b\u1eb1ng c\u00e1ch ch\u1ecdn m\u1ed9t ph\u1ea1m vi v\u00e0 t\u1ea3i b\u00e1o c\u00e1o.","Invoice Date":"Ng\u00e0y h\u00f3a \u0111\u01a1n","Initial Balance":"S\u1ed1 d\u01b0 ban \u0111\u1ea7u","New Balance":"C\u00e2n \u0111\u1ed1i","Transaction Type":"Lo\u1ea1i giao d\u1ecbch","Unchanged":"Kh\u00f4ng thay \u0111\u1ed5i","Define what roles applies to the user":"X\u00e1c \u0111\u1ecbnh nh\u1eefng quy\u1ec1n n\u00e0o g\u00e1n cho ng\u01b0\u1eddi d\u00f9ng","Not Assigned":"Kh\u00f4ng g\u00e1n","This value is already in use on the database.":"This value is already in use on the database.","This field should be checked.":"Tr\u01b0\u1eddng n\u00e0y n\u00ean \u0111\u01b0\u1ee3c ki\u1ec3m tra.","This field must be a valid URL.":"Tr\u01b0\u1eddng n\u00e0y ph\u1ea3i l\u00e0 tr\u01b0\u1eddng URL h\u1ee3p l\u1ec7.","This field is not a valid email.":"Tr\u01b0\u1eddng n\u00e0y kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t email h\u1ee3p l\u1ec7.","If you would like to define a custom invoice date.":"If you would like to define a custom invoice date.","Theme":"Theme","Dark":"Dark","Light":"Light","Define what is the theme that applies to the dashboard.":"X\u00e1c \u0111\u1ecbnh ch\u1ee7 \u0111\u1ec1 \u00e1p d\u1ee5ng cho trang t\u1ed5ng quan l\u00e0 g\u00ec.","Unable to delete this resource as it has %s dependency with %s item.":"Kh\u00f4ng th\u1ec3 x\u00f3a t\u00e0i nguy\u00ean n\u00e0y v\u00ec n\u00f3 c\u00f3 %s ph\u1ee5 thu\u1ed9c v\u1edbi %s item.","Unable to delete this resource as it has %s dependency with %s items.":"Kh\u00f4ng th\u1ec3 x\u00f3a t\u00e0i nguy\u00ean n\u00e0y v\u00ec n\u00f3 c\u00f3 %s ph\u1ee5 thu\u1ed9c v\u1edbi %s m\u1ee5c.","Make a new procurement.":"Th\u1ef1c hi\u1ec7n mua h\u00e0ng.","About":"V\u1ec1 ch\u00fang t\u00f4i","Details about the environment.":"Th\u00f4ng tin chi ti\u1ebft.","Core Version":"Core Version","PHP Version":"PHP Version","Mb String Enabled":"Mb String Enabled","Zip Enabled":"Zip Enabled","Curl Enabled":"Curl Enabled","Math Enabled":"Math Enabled","XML Enabled":"XML Enabled","XDebug Enabled":"XDebug Enabled","File Upload Enabled":"File Upload Enabled","File Upload Size":"File Upload Size","Post Max Size":"Post Max Size","Max Execution Time":"Max Execution Time","Memory Limit":"Memory Limit","Administrator":"Administrator","Store Administrator":"Store Administrator","Store Cashier":"Thu ng\u00e2n","User":"Ng\u01b0\u1eddi d\u00f9ng","Incorrect Authentication Plugin Provided.":"\u0110\u00e3 cung c\u1ea5p plugin x\u00e1c th\u1ef1c kh\u00f4ng ch\u00ednh x\u00e1c.","Require Unique Phone":"Y\u00eau c\u1ea7u \u0111i\u1ec7n tho\u1ea1i duy nh\u1ea5t","Every customer should have a unique phone number.":"M\u1ed7i kh\u00e1ch h\u00e0ng n\u00ean c\u00f3 m\u1ed9t s\u1ed1 \u0111i\u1ec7n tho\u1ea1i duy nh\u1ea5t.","Define the default theme.":"X\u00e1c \u0111\u1ecbnh ch\u1ee7 \u0111\u1ec1 m\u1eb7c \u0111\u1ecbnh.","Merge Similar Items":"G\u1ed9p s\u1ea3n ph\u1ea9m","Will enforce similar products to be merged from the POS.":"S\u1ebd bu\u1ed9c c\u00e1c s\u1ea3n ph\u1ea9m t\u01b0\u01a1ng t\u1ef1 \u0111\u01b0\u1ee3c h\u1ee3p nh\u1ea5t t\u1eeb POS.","Toggle Product Merge":"G\u1ed9p c\u00e1c s\u1ea3n ph\u1ea9m chuy\u1ec3n \u0111\u1ed5i \u0111vt","Will enable or disable the product merging.":"S\u1ebd b\u1eadt ho\u1eb7c t\u1eaft vi\u1ec7c h\u1ee3p nh\u1ea5t s\u1ea3n ph\u1ea9m.","Your system is running in production mode. You probably need to build the assets":"H\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n \u0111ang ch\u1ea1y \u1edf ch\u1ebf \u0111\u1ed9 s\u1ea3n xu\u1ea5t. B\u1ea1n c\u00f3 th\u1ec3 c\u1ea7n x\u00e2y d\u1ef1ng c\u00e1c t\u00e0i s\u1ea3n","Your system is in development mode. Make sure to build the assets.":"H\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n \u0111ang \u1edf ch\u1ebf \u0111\u1ed9 ph\u00e1t tri\u1ec3n. \u0110\u1ea3m b\u1ea3o x\u00e2y d\u1ef1ng t\u00e0i s\u1ea3n.","Unassigned":"Ch\u01b0a giao","Display all product stock flow.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 d\u00f2ng s\u1ea3n ph\u1ea9m.","No products stock flow has been registered":"Kh\u00f4ng c\u00f3 d\u00f2ng s\u1ea3n ph\u1ea9m n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new products stock flow":"Th\u00eam d\u00f2ng s\u1ea3n ph\u1ea9m m\u1edbi","Create a new products stock flow":"T\u1ea1o d\u00f2ng s\u1ea3n ph\u1ea9m m\u1edbi","Register a new products stock flow and save it.":"\u0110\u0103ng k\u00fd d\u00f2ng s\u1ea3n ph\u1ea9m m\u1edbi v\u00e0 l\u01b0u n\u00f3.","Edit products stock flow":"Ch\u1ec9nh s\u1eeda d\u00f2ng s\u1ea3n ph\u1ea9m","Modify Globalproducthistorycrud.":"Modify Global produc this torycrud.","Initial Quantity":"S\u1ed1 l\u01b0\u1ee3ng ban \u0111\u1ea7u","New Quantity":"S\u1ed1 l\u01b0\u1ee3ng m\u1edbi","No Dashboard":"Kh\u00f4ng c\u00f3 trang t\u1ed5ng quan","Not Found Assets":"Kh\u00f4ng t\u00ecm th\u1ea5y t\u00e0i s\u1ea3n","Stock Flow Records":"B\u1ea3n ghi l\u01b0u l\u01b0\u1ee3ng kho","The user attributes has been updated.":"C\u00e1c thu\u1ed9c t\u00ednh ng\u01b0\u1eddi d\u00f9ng \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Laravel Version":"Laravel Version","There is a missing dependency issue.":"C\u00f3 m\u1ed9t v\u1ea5n \u0111\u1ec1 ph\u1ee5 thu\u1ed9c b\u1ecb thi\u1ebfu.","The Action You Tried To Perform Is Not Allowed.":"H\u00e0nh \u0111\u1ed9ng b\u1ea1n \u0111\u00e3 c\u1ed1 g\u1eafng th\u1ef1c hi\u1ec7n kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p.","Unable to locate the assets.":"Kh\u00f4ng th\u1ec3 \u0111\u1ecbnh v\u1ecb n\u1ed9i dung.","All the customers has been transferred to the new group %s.":"T\u1ea5t c\u1ea3 kh\u00e1ch h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c chuy\u1ec3n sang nh\u00f3m m\u1edbi %s.","The request method is not allowed.":"Ph\u01b0\u01a1ng th\u1ee9c y\u00eau c\u1ea7u kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p.","A Database Exception Occurred.":"\u0110\u00e3 x\u1ea3y ra ngo\u1ea1i l\u1ec7 c\u01a1 s\u1edf d\u1eef li\u1ec7u.","An error occurred while validating the form.":"\u0110\u00e3 x\u1ea3y ra l\u1ed7i khi x\u00e1c th\u1ef1c bi\u1ec3u m\u1eabu.","Enter":"Girmek","Search...":"Arama...","Unable to hold an order which payment status has been updated already.":"\u00d6deme durumu zaten g\u00fcncellenmi\u015f bir sipari\u015f bekletilemez.","Unable to change the price mode. This feature has been disabled.":"Fiyat modu de\u011fi\u015ftirilemiyor. Bu \u00f6zellik devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","Enable WholeSale Price":"Toptan Sat\u0131\u015f Fiyat\u0131n\u0131 Etkinle\u015ftir","Would you like to switch to wholesale price ?":"Toptan fiyata ge\u00e7mek ister misiniz?","Enable Normal Price":"Normal Fiyat\u0131 Etkinle\u015ftir","Would you like to switch to normal price ?":"Normal fiyata ge\u00e7mek ister misiniz?","Search products...":"\u00dcr\u00fcnleri ara...","Set Sale Price":"Sat\u0131\u015f Fiyat\u0131n\u0131 Belirle","Remove":"Kald\u0131rmak","No product are added to this group.":"Bu gruba \u00fcr\u00fcn eklenmedi.","Delete Sub item":"Alt \u00f6\u011feyi sil","Would you like to delete this sub item?":"Bu alt \u00f6\u011feyi silmek ister misiniz?","Unable to add a grouped product.":"Grupland\u0131r\u0131lm\u0131\u015f bir \u00fcr\u00fcn eklenemiyor.","Choose The Unit":"Birimi Se\u00e7in","Stock Report":"Stok Raporu","Wallet Amount":"C\u00fczdan Tutar\u0131","Wallet History":"C\u00fczdan Ge\u00e7mi\u015fi","Transaction":"\u0130\u015flem","No History...":"Tarih Yok...","Removing":"Kald\u0131rma","Refunding":"geri \u00f6deme","Unknow":"bilinmiyor","Skip Instalments":"Taksitleri Atla","Define the product type.":"\u00dcr\u00fcn t\u00fcr\u00fcn\u00fc tan\u0131mlay\u0131n.","Dynamic":"Dinamik","In case the product is computed based on a percentage, define the rate here.":"\u00dcr\u00fcn\u00fcn bir y\u00fczdeye g\u00f6re hesaplanmas\u0131 durumunda oran\u0131 burada tan\u0131mlay\u0131n.","Before saving this order, a minimum payment of {amount} is required":"Bu sipari\u015fi kaydetmeden \u00f6nce minimum {amount} \u00f6demeniz gerekiyor","Initial Payment":"\u0130lk \u00f6deme","In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?":"Devam edebilmek i\u00e7in, se\u00e7ilen \u00f6deme t\u00fcr\u00fc \"{paymentType}\" i\u00e7in {amount} tutar\u0131nda bir ilk \u00f6deme yap\u0131lmas\u0131 gerekiyor. Devam etmek ister misiniz?","Search Customer...":"M\u00fc\u015fteri Ara...","Due Amount":"\u00d6denecek mebla\u011f","Wallet Balance":"C\u00fczdan Bakiyesi","Total Orders":"Toplam Sipari\u015fler","What slug should be used ? [Q] to quit.":"Hangi s\u00fcm\u00fckl\u00fc b\u00f6cek kullan\u0131lmal\u0131d\u0131r? [Q] \u00e7\u0131kmak i\u00e7in.","\"%s\" is a reserved class name":"\"%s\" ayr\u0131lm\u0131\u015f bir s\u0131n\u0131f ad\u0131d\u0131r","The migration file has been successfully forgotten for the module %s.":"%s mod\u00fcl\u00fc i\u00e7in ta\u015f\u0131ma dosyas\u0131 ba\u015far\u0131yla unutuldu.","%s products where updated.":"%s \u00fcr\u00fcnleri g\u00fcncellendi.","Previous Amount":"\u00d6nceki Tutar","Next Amount":"Sonraki Tutar","Restrict the records by the creation date.":"Kay\u0131tlar\u0131 olu\u015fturma tarihine g\u00f6re s\u0131n\u0131rlay\u0131n.","Restrict the records by the author.":"Kay\u0131tlar\u0131 yazar taraf\u0131ndan k\u0131s\u0131tlay\u0131n.","Grouped Product":"Grupland\u0131r\u0131lm\u0131\u015f \u00dcr\u00fcn","Groups":"Gruplar","Choose Group":"Grup Se\u00e7","Grouped":"grupland\u0131r\u0131lm\u0131\u015f","An error has occurred":"Bir hata olu\u015ftu","Unable to proceed, the submitted form is not valid.":"Devam edilemiyor, g\u00f6nderilen form ge\u00e7erli de\u011fil.","No activation is needed for this account.":"Bu hesap i\u00e7in aktivasyon gerekli de\u011fildir.","Invalid activation token.":"Ge\u00e7ersiz etkinle\u015ftirme jetonu.","The expiration token has expired.":"Sona erme jetonunun s\u00fcresi doldu.","Your account is not activated.":"Hesab\u0131n\u0131z aktif de\u011fil.","Unable to change a password for a non active user.":"Etkin olmayan bir kullan\u0131c\u0131 i\u00e7in parola de\u011fi\u015ftirilemiyor.","Unable to submit a new password for a non active user.":"Aktif olmayan bir kullan\u0131c\u0131 i\u00e7in yeni bir \u015fifre g\u00f6nderilemiyor.","Unable to delete an entry that no longer exists.":"Art\u0131k var olmayan bir giri\u015f silinemiyor.","Provides an overview of the products stock.":"\u00dcr\u00fcn sto\u011funa genel bir bak\u0131\u015f sa\u011flar.","Customers Statement":"M\u00fc\u015fteri Bildirimi","Display the complete customer statement.":"Tam m\u00fc\u015fteri beyan\u0131n\u0131 g\u00f6r\u00fcnt\u00fcleyin.","The recovery has been explicitly disabled.":"Kurtarma a\u00e7\u0131k\u00e7a devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","The registration has been explicitly disabled.":"Kay\u0131t a\u00e7\u0131k\u00e7a devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","The entry has been successfully updated.":"Giri\u015f ba\u015far\u0131yla g\u00fcncellendi.","A similar module has been found":"Benzer bir mod\u00fcl bulundu","A grouped product cannot be saved without any sub items.":"Grupland\u0131r\u0131lm\u0131\u015f bir \u00fcr\u00fcn, herhangi bir alt \u00f6\u011fe olmadan kaydedilemez.","A grouped product cannot contain grouped product.":"Grupland\u0131r\u0131lm\u0131\u015f bir \u00fcr\u00fcn, grupland\u0131r\u0131lm\u0131\u015f \u00fcr\u00fcn i\u00e7eremez.","The subitem has been saved.":"Alt \u00f6\u011fe kaydedildi.","The %s is already taken.":"%s zaten al\u0131nm\u0131\u015f.","Allow Wholesale Price":"Toptan Sat\u0131\u015f Fiyat\u0131na \u0130zin Ver","Define if the wholesale price can be selected on the POS.":"POS'ta toptan sat\u0131\u015f fiyat\u0131n\u0131n se\u00e7ilip se\u00e7ilemeyece\u011fini tan\u0131mlay\u0131n.","Allow Decimal Quantities":"Ondal\u0131k Miktarlara \u0130zin Ver","Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.":"Miktarlar i\u00e7in ondal\u0131k basama\u011fa izin vermek i\u00e7in say\u0131sal klavyeyi de\u011fi\u015ftirir. Yaln\u0131zca \"varsay\u0131lan\" say\u0131sal tu\u015f tak\u0131m\u0131 i\u00e7in.","Numpad":"say\u0131sal tu\u015f tak\u0131m\u0131","Advanced":"Geli\u015fmi\u015f","Will set what is the numpad used on the POS screen.":"POS ekran\u0131nda kullan\u0131lan say\u0131sal tu\u015f tak\u0131m\u0131n\u0131n ne oldu\u011funu ayarlayacakt\u0131r.","Force Barcode Auto Focus":"Barkod Otomatik Odaklamay\u0131 Zorla","Will permanently enable barcode autofocus to ease using a barcode reader.":"Barkod okuyucu kullanmay\u0131 kolayla\u015ft\u0131rmak i\u00e7in barkod otomatik odaklamay\u0131 kal\u0131c\u0131 olarak etkinle\u015ftirir.","Tax Included":"\u0110\u00e3 bao g\u1ed3m thu\u1ebf","Unable to proceed, more than one product is set as featured":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c, nhi\u1ec1u s\u1ea3n ph\u1ea9m \u0111\u01b0\u1ee3c \u0111\u1eb7t l\u00e0 n\u1ed5i b\u1eadt","The transaction was deleted.":"Giao d\u1ecbch \u0111\u00e3 b\u1ecb x\u00f3a.","Database connection was successful.":"K\u1ebft n\u1ed1i c\u01a1 s\u1edf d\u1eef li\u1ec7u th\u00e0nh c\u00f4ng.","The products taxes were computed successfully.":"Thu\u1ebf s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c t\u00ednh th\u00e0nh c\u00f4ng.","Tax Excluded":"Kh\u00f4ng bao g\u1ed3m thu\u1ebf","Set Paid":"\u0110\u1eb7t tr\u1ea3 ti\u1ec1n","Would you like to mark this procurement as paid?":"B\u1ea1n c\u00f3 mu\u1ed1n \u0111\u00e1nh d\u1ea5u vi\u1ec7c mua s\u1eafm n\u00e0y l\u00e0 \u0111\u00e3 tr\u1ea3 ti\u1ec1n kh\u00f4ng?","Unidentified Item":"M\u1eb7t h\u00e0ng kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Non-existent Item":"M\u1eb7t h\u00e0ng kh\u00f4ng t\u1ed3n t\u1ea1i","You cannot change the status of an already paid procurement.":"B\u1ea1n kh\u00f4ng th\u1ec3 thay \u0111\u1ed5i tr\u1ea1ng th\u00e1i c\u1ee7a mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n.","The procurement payment status has been changed successfully.":"Tr\u1ea1ng th\u00e1i thanh to\u00e1n mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c thay \u0111\u1ed5i th\u00e0nh c\u00f4ng.","The procurement has been marked as paid.":"Vi\u1ec7c mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u l\u00e0 \u0111\u00e3 thanh to\u00e1n.","Show Price With Tax":"Hi\u1ec3n th\u1ecb gi\u00e1 c\u00f3 thu\u1ebf","Will display price with tax for each products.":"S\u1ebd hi\u1ec3n th\u1ecb gi\u00e1 c\u00f3 thu\u1ebf cho t\u1eebng s\u1ea3n ph\u1ea9m.","Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".":"Kh\u00f4ng th\u1ec3 t\u1ea3i th\u00e0nh ph\u1ea7n \"${action.component}\". \u0110\u1ea3m b\u1ea3o r\u1eb1ng th\u00e0nh ph\u1ea7n \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd v\u1edbi \"nsExtraComponents\".","Tax Inclusive":"Bao g\u1ed3m thu\u1ebf","Apply Coupon":"\u00c1p d\u1ee5ng phi\u1ebfu gi\u1ea3m gi\u00e1","Not applicable":"Kh\u00f4ng \u00e1p d\u1ee5ng","Normal":"B\u00ecnh th\u01b0\u1eddng","Product Taxes":"Thu\u1ebf s\u1ea3n ph\u1ea9m","The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.":"\u0110\u01a1n v\u1ecb \u0111\u01b0\u1ee3c \u0111\u00ednh k\u00e8m v\u1edbi s\u1ea3n ph\u1ea9m n\u00e0y b\u1ecb thi\u1ebfu ho\u1eb7c kh\u00f4ng \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh. Vui l\u00f2ng xem l\u1ea1i tab \"\u0110\u01a1n v\u1ecb\" cho s\u1ea3n ph\u1ea9m n\u00e0y.","X Days After Month Starts":"X Days After Month Starts","On Specific Day":"On Specific Day","Unknown Occurance":"Unknown Occurance","Please provide a valid value.":"Please provide a valid value.","Done":"Done","Would you like to delete \"%s\"?":"Would you like to delete \"%s\"?","Unable to find a module having as namespace \"%s\"":"Unable to find a module having as namespace \"%s\"","Api File":"Api File","Migrations":"Migrations","Determine Until When the coupon is valid.":"Determine Until When the coupon is valid.","Customer Groups":"Customer Groups","Assigned To Customer Group":"Assigned To Customer Group","Only the customers who belongs to the selected groups will be able to use the coupon.":"Only the customers who belongs to the selected groups will be able to use the coupon.","Assigned To Customers":"Assigned To Customers","Only the customers selected will be ale to use the coupon.":"Only the customers selected will be ale to use the coupon.","Unable to save the coupon as one of the selected customer no longer exists.":"Unable to save the coupon as one of the selected customer no longer exists.","Unable to save the coupon as one of the selected customer group no longer exists.":"Unable to save the coupon as one of the selected customer group no longer exists.","Unable to save the coupon as one of the customers provided no longer exists.":"Unable to save the coupon as one of the customers provided no longer exists.","Unable to save the coupon as one of the provided customer group no longer exists.":"Unable to save the coupon as one of the provided customer group no longer exists.","Coupon Order Histories List":"Coupon Order Histories List","Display all coupon order histories.":"Display all coupon order histories.","No coupon order histories has been registered":"No coupon order histories has been registered","Add a new coupon order history":"Add a new coupon order history","Create a new coupon order history":"Create a new coupon order history","Register a new coupon order history and save it.":"Register a new coupon order history and save it.","Edit coupon order history":"Edit coupon order history","Modify Coupon Order History.":"Modify Coupon Order History.","Return to Coupon Order Histories":"Return to Coupon Order Histories","Customer_coupon_id":"Customer_coupon_id","Order_id":"Order_id","Discount_value":"Discount_value","Minimum_cart_value":"Minimum_cart_value","Maximum_cart_value":"Maximum_cart_value","Limit_usage":"Limit_usage","Would you like to delete this?":"Would you like to delete this?","Usage History":"Usage History","Customer Coupon Histories List":"Customer Coupon Histories List","Display all customer coupon histories.":"Display all customer coupon histories.","No customer coupon histories has been registered":"No customer coupon histories has been registered","Add a new customer coupon history":"Add a new customer coupon history","Create a new customer coupon history":"Create a new customer coupon history","Register a new customer coupon history and save it.":"Register a new customer coupon history and save it.","Edit customer coupon history":"Edit customer coupon history","Modify Customer Coupon History.":"Modify Customer Coupon History.","Return to Customer Coupon Histories":"Return to Customer Coupon Histories","Last Name":"Last Name","Provide the customer last name":"Provide the customer last name","Provide the customer gender.":"Provide the customer gender.","Provide the billing first name.":"Provide the billing first name.","Provide the billing last name.":"Provide the billing last name.","Provide the shipping First Name.":"Provide the shipping First Name.","Provide the shipping Last Name.":"Provide the shipping Last Name.","Scheduled":"Scheduled","Set the scheduled date.":"Set the scheduled date.","Account Name":"Account Name","Provider last name if necessary.":"Provider last name if necessary.","Provide the user first name.":"Provide the user first name.","Provide the user last name.":"Provide the user last name.","Set the user gender.":"Set the user gender.","Set the user phone number.":"Set the user phone number.","Set the user PO Box.":"Set the user PO Box.","Provide the billing First Name.":"Provide the billing First Name.","Last name":"Last name","Group Name":"Group Name","Delete a user":"Delete a user","Activated":"Activated","type":"type","User Group":"User Group","Scheduled On":"Scheduled On","Biling":"Biling","API Token":"API Token","Your Account has been successfully created.":"Your Account has been successfully created.","Unable to export if there is nothing to export.":"Unable to export if there is nothing to export.","%s Coupons":"%s Coupons","%s Coupon History":"%s Coupon History","\"%s\" Record History":"\"%s\" Record History","The media name was successfully updated.":"The media name was successfully updated.","The role was successfully assigned.":"The role was successfully assigned.","The role were successfully assigned.":"The role were successfully assigned.","Unable to identifier the provided role.":"Unable to identifier the provided role.","Good Condition":"Good Condition","Cron Disabled":"Cron Disabled","Task Scheduling Disabled":"Task Scheduling Disabled","NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.":"NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.","The email \"%s\" is already used for another customer.":"The email \"%s\" is already used for another customer.","The provided coupon cannot be loaded for that customer.":"The provided coupon cannot be loaded for that customer.","The provided coupon cannot be loaded for the group assigned to the selected customer.":"The provided coupon cannot be loaded for the group assigned to the selected customer.","Unable to use the coupon %s as it has expired.":"Unable to use the coupon %s as it has expired.","Unable to use the coupon %s at this moment.":"Unable to use the coupon %s at this moment.","Small Box":"Small Box","Box":"Box","%s products were freed":"%s products were freed","Restoring cash flow from paid orders...":"Restoring cash flow from paid orders...","Restoring cash flow from refunded orders...":"Restoring cash flow from refunded orders...","%s on %s directories were deleted.":"%s on %s directories were deleted.","%s on %s files were deleted.":"%s on %s files were deleted.","First Day Of Month":"First Day Of Month","Last Day Of Month":"Last Day Of Month","Month middle Of Month":"Month middle Of Month","{day} after month starts":"{day} after month starts","{day} before month ends":"{day} before month ends","Every {day} of the month":"Every {day} of the month","Days":"Days","Make sure set a day that is likely to be executed":"Make sure set a day that is likely to be executed","Invalid Module provided.":"Invalid Module provided.","The module was \"%s\" was successfully installed.":"The module was \"%s\" was successfully installed.","The modules \"%s\" was deleted successfully.":"The modules \"%s\" was deleted successfully.","Unable to locate a module having as identifier \"%s\".":"Unable to locate a module having as identifier \"%s\".","All migration were executed.":"All migration were executed.","Unknown Product Status":"Unknown Product Status","Member Since":"Member Since","Total Customers":"Total Customers","The widgets was successfully updated.":"The widgets was successfully updated.","The token was successfully created":"The token was successfully created","The token has been successfully deleted.":"The token has been successfully deleted.","Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".":"Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".","Will display all cashiers who performs well.":"Will display all cashiers who performs well.","Will display all customers with the highest purchases.":"Will display all customers with the highest purchases.","Expense Card Widget":"Expense Card Widget","Will display a card of current and overwall expenses.":"Will display a card of current and overwall expenses.","Incomplete Sale Card Widget":"Incomplete Sale Card Widget","Will display a card of current and overall incomplete sales.":"Will display a card of current and overall incomplete sales.","Orders Chart":"Orders Chart","Will display a chart of weekly sales.":"Will display a chart of weekly sales.","Orders Summary":"Orders Summary","Will display a summary of recent sales.":"Will display a summary of recent sales.","Will display a profile widget with user stats.":"Will display a profile widget with user stats.","Sale Card Widget":"Sale Card Widget","Will display current and overall sales.":"Will display current and overall sales.","Return To Calendar":"Return To Calendar","Thr":"Thr","The left range will be invalid.":"The left range will be invalid.","The right range will be invalid.":"The right range will be invalid.","Click here to add widgets":"Click here to add widgets","Choose Widget":"Choose Widget","Select with widget you want to add to the column.":"Select with widget you want to add to the column.","Unamed Tab":"Unamed Tab","An error unexpected occured while printing.":"An error unexpected occured while printing.","and":"and","{date} ago":"{date} ago","In {date}":"In {date}","An unexpected error occured.":"An unexpected error occured.","Warning":"Warning","Change Type":"Change Type","Save Expense":"Save Expense","No configuration were choosen. Unable to proceed.":"No configuration were choosen. Unable to proceed.","Conditions":"Conditions","By proceeding the current for and all your entries will be cleared. Would you like to proceed?":"By proceeding the current for and all your entries will be cleared. Would you like to proceed?","No modules matches your search term.":"No modules matches your search term.","Press \"\/\" to search modules":"Press \"\/\" to search modules","No module has been uploaded yet.":"No module has been uploaded yet.","{module}":"{module}","Would you like to delete \"{module}\"? All data created by the module might also be deleted.":"Would you like to delete \"{module}\"? All data created by the module might also be deleted.","Search Medias":"Search Medias","Bulk Select":"Bulk Select","Press "\/" to search permissions":"Press "\/" to search permissions","SKU, Barcode, Name":"SKU, Barcode, Name","About Token":"About Token","Save Token":"Save Token","Generated Tokens":"Generated Tokens","Created":"Created","Last Use":"Last Use","Never":"Never","Expires":"Expires","Revoke":"Revoke","Token Name":"Token Name","This will be used to identifier the token.":"This will be used to identifier the token.","Unable to proceed, the form is not valid.":"Unable to proceed, the form is not valid.","An unexpected error occured":"An unexpected error occured","An Error Has Occured":"An Error Has Occured","Febuary":"Febuary","Configure":"Configure","Unable to add the product":"Unable to add the product","No result to result match the search value provided.":"No result to result match the search value provided.","This QR code is provided to ease authentication on external applications.":"This QR code is provided to ease authentication on external applications.","Copy And Close":"Copy And Close","An error has occured":"An error has occured","Recents Orders":"Recents Orders","Unamed Page":"Unamed Page","Assignation":"Assignation","Incoming Conversion":"Incoming Conversion","Outgoing Conversion":"Outgoing Conversion","Unknown Action":"Unknown Action","Direct Transaction":"Direct Transaction","Recurring Transaction":"Recurring Transaction","Entity Transaction":"Entity Transaction","Scheduled Transaction":"Scheduled Transaction","Unknown Type (%s)":"Unknown Type (%s)","What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.":"What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.","What is the full model name. eg: App\\Models\\Order ? [Q] to quit.":"What is the full model name. eg: App\\Models\\Order ? [Q] to quit.","What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.":"What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.","Unsupported argument provided: \"%s\"":"Unsupported argument provided: \"%s\"","The authorization token can\\'t be changed manually.":"The authorization token can\\'t be changed manually.","Translation process is complete for the module %s !":"Translation process is complete for the module %s !","%s migration(s) has been deleted.":"%s migration(s) has been deleted.","The command has been created for the module \"%s\"!":"The command has been created for the module \"%s\"!","The controller has been created for the module \"%s\"!":"The controller has been created for the module \"%s\"!","The event has been created at the following path \"%s\"!":"The event has been created at the following path \"%s\"!","The listener has been created on the path \"%s\"!":"The listener has been created on the path \"%s\"!","A request with the same name has been found !":"A request with the same name has been found !","Unable to find a module having the identifier \"%s\".":"Unable to find a module having the identifier \"%s\".","Unsupported reset mode.":"Unsupported reset mode.","You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.":"You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.","Unable to find a module having \"%s\" as namespace.":"Unable to find a module having \"%s\" as namespace.","A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.":"A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.","A new form class was created at the path \"%s\"":"A new form class was created at the path \"%s\"","Unable to proceed, looks like the database can\\'t be used.":"Unable to proceed, looks like the database can\\'t be used.","In which language would you like to install NexoPOS ?":"In which language would you like to install NexoPOS ?","You must define the language of installation.":"You must define the language of installation.","The value above which the current coupon can\\'t apply.":"The value above which the current coupon can\\'t apply.","Unable to save the coupon product as this product doens\\'t exists.":"Unable to save the coupon product as this product doens\\'t exists.","Unable to save the coupon category as this category doens\\'t exists.":"Unable to save the coupon category as this category doens\\'t exists.","Unable to save the coupon as this category doens\\'t exists.":"Unable to save the coupon as this category doens\\'t exists.","You\\re not allowed to do that.":"You\\re not allowed to do that.","Crediting (Add)":"Crediting (Add)","Refund (Add)":"Refund (Add)","Deducting (Remove)":"Deducting (Remove)","Payment (Remove)":"Payment (Remove)","The assigned default customer group doesn\\'t exist or is not defined.":"The assigned default customer group doesn\\'t exist or is not defined.","Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0":"Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0","You\\'re not allowed to do this operation":"You\\'re not allowed to do this operation","If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.":"If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.","Convert Unit":"Convert Unit","The unit that is selected for convertion by default.":"The unit that is selected for convertion by default.","COGS":"COGS","Used to define the Cost of Goods Sold.":"Used to define the Cost of Goods Sold.","Visible":"Visible","Define whether the unit is available for sale.":"Define whether the unit is available for sale.","Product unique name. If it\\' variation, it should be relevant for that variation":"Product unique name. If it\\' variation, it should be relevant for that variation","The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.":"The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.","The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.":"The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.","Auto COGS":"Auto COGS","Unknown Type: %s":"Unknown Type: %s","Shortage":"Shortage","Overage":"Overage","Transactions List":"Transactions List","Display all transactions.":"Display all transactions.","No transactions has been registered":"No transactions has been registered","Add a new transaction":"Add a new transaction","Create a new transaction":"Create a new transaction","Register a new transaction and save it.":"Register a new transaction and save it.","Edit transaction":"Edit transaction","Modify Transaction.":"Modify Transaction.","Return to Transactions":"Return to Transactions","determine if the transaction is effective or not. Work for recurring and not recurring transactions.":"determine if the transaction is effective or not. Work for recurring and not recurring transactions.","Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.":"Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.","Transaction Account":"Transaction Account","Assign the transaction to an account430":"Assign the transaction to an account430","Is the value or the cost of the transaction.":"Is the value or the cost of the transaction.","If set to Yes, the transaction will trigger on defined occurrence.":"If set to Yes, the transaction will trigger on defined occurrence.","Define how often this transaction occurs":"Define how often this transaction occurs","Define what is the type of the transactions.":"Define what is the type of the transactions.","Trigger":"Trigger","Would you like to trigger this expense now?":"Would you like to trigger this expense now?","Transactions History List":"Transactions History List","Display all transaction history.":"Display all transaction history.","No transaction history has been registered":"No transaction history has been registered","Add a new transaction history":"Add a new transaction history","Create a new transaction history":"Create a new transaction history","Register a new transaction history and save it.":"Register a new transaction history and save it.","Edit transaction history":"Edit transaction history","Modify Transactions history.":"Modify Transactions history.","Return to Transactions History":"Return to Transactions History","Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.":"Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.","Set the limit that can\\'t be exceeded by the user.":"Set the limit that can\\'t be exceeded by the user.","Oops, We\\'re Sorry!!!":"Oops, We\\'re Sorry!!!","Class: %s":"Class: %s","There\\'s is mismatch with the core version.":"There\\'s is mismatch with the core version.","You\\'re not authenticated.":"You\\'re not authenticated.","An error occured while performing your request.":"An error occured while performing your request.","A mismatch has occured between a module and it\\'s dependency.":"A mismatch has occured between a module and it\\'s dependency.","You\\'re not allowed to see that page.":"You\\'re not allowed to see that page.","Post Too Large":"Post Too Large","The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini":"The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini","This field does\\'nt have a valid value.":"This field does\\'nt have a valid value.","Describe the direct transaction.":"Describe the direct transaction.","If set to yes, the transaction will take effect immediately and be saved on the history.":"If set to yes, the transaction will take effect immediately and be saved on the history.","Assign the transaction to an account.":"Assign the transaction to an account.","set the value of the transaction.":"set the value of the transaction.","Further details on the transaction.":"Further details on the transaction.","Describe the direct transactions.":"Describe the direct transactions.","set the value of the transactions.":"set the value of the transactions.","The transactions will be multipled by the number of user having that role.":"The transactions will be multipled by the number of user having that role.","Create Sales (needs Procurements)":"Create Sales (needs Procurements)","Set when the transaction should be executed.":"Set when the transaction should be executed.","The addresses were successfully updated.":"The addresses were successfully updated.","Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.":"Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.","The register doesn\\'t have an history.":"The register doesn\\'t have an history.","Unable to check a register session history if it\\'s closed.":"Unable to check a register session history if it\\'s closed.","Register History For : %s":"Register History For : %s","Can\\'t delete a category having sub categories linked to it.":"Can\\'t delete a category having sub categories linked to it.","Unable to proceed. The request doesn\\'t provide enough data which could be handled":"Unable to proceed. The request doesn\\'t provide enough data which could be handled","Unable to load the CRUD resource : %s.":"Unable to load the CRUD resource : %s.","Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods":"Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods","The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.":"The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.","The crud columns exceed the maximum column that can be exported (27)":"The crud columns exceed the maximum column that can be exported (27)","This link has expired.":"This link has expired.","Account History : %s":"Account History : %s","Welcome — %s":"Welcome — %s","Upload and manage medias (photos).":"Upload and manage medias (photos).","The product which id is %s doesnt\\'t belong to the procurement which id is %s":"The product which id is %s doesnt\\'t belong to the procurement which id is %s","The refresh process has started. You\\'ll get informed once it\\'s complete.":"The refresh process has started. You\\'ll get informed once it\\'s complete.","The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".":"The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".","Stock History For %s":"Stock History For %s","Set":"Set","The unit is not set for the product \"%s\".":"The unit is not set for the product \"%s\".","The operation will cause a negative stock for the product \"%s\" (%s).":"The operation will cause a negative stock for the product \"%s\" (%s).","The adjustment quantity can\\'t be negative for the product \"%s\" (%s)":"The adjustment quantity can\\'t be negative for the product \"%s\" (%s)","%s\\'s Products":"%s\\'s Products","Transactions Report":"Transactions Report","Combined Report":"Combined Report","Provides a combined report for every transactions on products.":"Provides a combined report for every transactions on products.","Unable to initiallize the settings page. The identifier \"' . $identifier . '":"Unable to initiallize the settings page. The identifier \"' . $identifier . '","Shows all histories generated by the transaction.":"Shows all histories generated by the transaction.","Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.":"Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.","Create New Transaction":"Create New Transaction","Set direct, scheduled transactions.":"Set direct, scheduled transactions.","Update Transaction":"Update Transaction","The provided data aren\\'t valid":"The provided data aren\\'t valid","Welcome — NexoPOS":"Welcome — NexoPOS","You\\'re not allowed to see this page.":"You\\'re not allowed to see this page.","Your don\\'t have enough permission to perform this action.":"Your don\\'t have enough permission to perform this action.","You don\\'t have the necessary role to see this page.":"You don\\'t have the necessary role to see this page.","%s order(s) has recently been deleted as they has expired.":"%s order(s) has recently been deleted as they has expired.","%s product(s) has low stock. Reorder those product(s) before it get exhausted.":"%s product(s) has low stock. Reorder those product(s) before it get exhausted.","Scheduled Transactions":"Scheduled Transactions","the transaction \"%s\" was executed as scheduled on %s.":"the transaction \"%s\" was executed as scheduled on %s.","Workers Aren\\'t Running":"Workers Aren\\'t Running","The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.":"The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.","Unable to remove the permissions \"%s\". It doesn\\'t exists.":"Unable to remove the permissions \"%s\". It doesn\\'t exists.","An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A":"An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : ' . ($exception->getMessage() ?: __('N\/A","Unable to open \"%s\" *, as it\\'s not closed.":"Unable to open \"%s\" *, as it\\'s not closed.","Unable to open \"%s\" *, as it\\'s not opened.":"Unable to open \"%s\" *, as it\\'s not opened.","Unable to cashing on \"%s\" *, as it\\'s not opened.":"Unable to cashing on \"%s\" *, as it\\'s not opened.","Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.":"Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.","Unable to cashout on \"%s":"Unable to cashout on \"%s","Symbolic Links Missing":"Symbolic Links Missing","The Symbolic Links to the public directory is missing. Your medias might be broken and not display.":"The Symbolic Links to the public directory is missing. Your medias might be broken and not display.","Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.":"Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.","The requested module %s cannot be found.":"The requested module %s cannot be found.","The manifest.json can\\'t be located inside the module %s on the path: %s":"The manifest.json can\\'t be located inside the module %s on the path: %s","the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.":"the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.","Sorting is explicitely disabled for the column \"%s\".":"Sorting is explicitely disabled for the column \"%s\".","Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s":"Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s","Unable to find the customer using the provided id %s.":"Unable to find the customer using the provided id %s.","Not enough credits on the customer account. Requested : %s, Remaining: %s.":"Not enough credits on the customer account. Requested : %s, Remaining: %s.","The customer account doesn\\'t have enough funds to proceed.":"The customer account doesn\\'t have enough funds to proceed.","Unable to find a reference to the attached coupon : %s":"Unable to find a reference to the attached coupon : %s","You\\'re not allowed to use this coupon as it\\'s no longer active":"You\\'re not allowed to use this coupon as it\\'s no longer active","You\\'re not allowed to use this coupon it has reached the maximum usage allowed.":"You\\'re not allowed to use this coupon it has reached the maximum usage allowed.","Terminal A":"Terminal A","Terminal B":"Terminal B","%s link were deleted":"%s link were deleted","Unable to execute the following class callback string : %s":"Unable to execute the following class callback string : %s","%s — %s":"%s — %s","Transactions":"Transactions","Create Transaction":"Create Transaction","Stock History":"Stock History","Invoices":"Invoices","Failed to parse the configuration file on the following path \"%s\"":"Failed to parse the configuration file on the following path \"%s\"","No config.xml has been found on the directory : %s. This folder is ignored":"No config.xml has been found on the directory : %s. This folder is ignored","The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ":"The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ","Unable to upload this module as it\\'s older than the version installed":"Unable to upload this module as it\\'s older than the version installed","The migration file doens\\'t have a valid class name. Expected class : %s":"The migration file doens\\'t have a valid class name. Expected class : %s","Unable to locate the following file : %s":"Unable to locate the following file : %s","The migration file doens\\'t have a valid method name. Expected method : %s":"The migration file doens\\'t have a valid method name. Expected method : %s","The module %s cannot be enabled as his dependency (%s) is missing or not enabled.":"The module %s cannot be enabled as his dependency (%s) is missing or not enabled.","The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.":"The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.","An Error Occurred \"%s\": %s":"An Error Occurred \"%s\": %s","The order has been updated":"The order has been updated","The minimal payment of %s has\\'nt been provided.":"The minimal payment of %s has\\'nt been provided.","Unable to proceed as the order is already paid.":"Unable to proceed as the order is already paid.","The customer account funds are\\'nt enough to process the payment.":"The customer account funds are\\'nt enough to process the payment.","Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.","Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.","By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.":"By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.","You\\'re not allowed to make payments.":"You\\'re not allowed to make payments.","Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s":"Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s","Unknown Status (%s)":"Unknown Status (%s)","%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.":"%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.","Unable to find a reference of the provided coupon : %s":"Unable to find a reference of the provided coupon : %s","The procurement has been deleted. %s included stock record(s) has been deleted as well.":"The procurement has been deleted. %s included stock record(s) has been deleted as well.","Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.":"Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.","Unable to find the product using the provided id \"%s\"":"Unable to find the product using the provided id \"%s\"","Unable to procure the product \"%s\" as the stock management is disabled.":"Unable to procure the product \"%s\" as the stock management is disabled.","Unable to procure the product \"%s\" as it is a grouped product.":"Unable to procure the product \"%s\" as it is a grouped product.","The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item":"The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item","%s procurement(s) has recently been automatically procured.":"%s procurement(s) has recently been automatically procured.","The requested category doesn\\'t exists":"The requested category doesn\\'t exists","The category to which the product is attached doesn\\'t exists or has been deleted":"The category to which the product is attached doesn\\'t exists or has been deleted","Unable to create a product with an unknow type : %s":"Unable to create a product with an unknow type : %s","A variation within the product has a barcode which is already in use : %s.":"A variation within the product has a barcode which is already in use : %s.","A variation within the product has a SKU which is already in use : %s":"A variation within the product has a SKU which is already in use : %s","Unable to edit a product with an unknown type : %s":"Unable to edit a product with an unknown type : %s","The requested sub item doesn\\'t exists.":"The requested sub item doesn\\'t exists.","One of the provided product variation doesn\\'t include an identifier.":"One of the provided product variation doesn\\'t include an identifier.","The product\\'s unit quantity has been updated.":"The product\\'s unit quantity has been updated.","Unable to reset this variable product \"%s":"Unable to reset this variable product \"%s","Adjusting grouped product inventory must result of a create, update, delete sale operation.":"Adjusting grouped product inventory must result of a create, update, delete sale operation.","Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).":"Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).","Unsupported stock action \"%s\"":"Unsupported stock action \"%s\"","%s product(s) has been deleted.":"%s product(s) has been deleted.","%s products(s) has been deleted.":"%s products(s) has been deleted.","Unable to find the product, as the argument \"%s\" which value is \"%s":"Unable to find the product, as the argument \"%s\" which value is \"%s","You cannot convert unit on a product having stock management disabled.":"You cannot convert unit on a product having stock management disabled.","The source and the destination unit can\\'t be the same. What are you trying to do ?":"The source and the destination unit can\\'t be the same. What are you trying to do ?","There is no source unit quantity having the name \"%s\" for the item %s":"There is no source unit quantity having the name \"%s\" for the item %s","There is no destination unit quantity having the name %s for the item %s":"There is no destination unit quantity having the name %s for the item %s","The source unit and the destination unit doens\\'t belong to the same unit group.":"The source unit and the destination unit doens\\'t belong to the same unit group.","The group %s has no base unit defined":"The group %s has no base unit defined","The conversion of %s(%s) to %s(%s) was successful":"The conversion of %s(%s) to %s(%s) was successful","The product has been deleted.":"The product has been deleted.","An error occurred: %s.":"An error occurred: %s.","A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.":"A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.","Today\\'s Orders":"Today\\'s Orders","Today\\'s Sales":"Today\\'s Sales","Today\\'s Refunds":"Today\\'s Refunds","Today\\'s Customers":"Today\\'s Customers","The report will be generated. Try loading the report within few minutes.":"The report will be generated. Try loading the report within few minutes.","The database has been wiped out.":"The database has been wiped out.","No custom handler for the reset \"' . $mode . '\"":"No custom handler for the reset \"' . $mode . '\"","Unable to proceed. The parent tax doesn\\'t exists.":"Unable to proceed. The parent tax doesn\\'t exists.","A simple tax must not be assigned to a parent tax with the type \"simple":"A simple tax must not be assigned to a parent tax with the type \"simple","Created via tests":"Created via tests","The transaction has been successfully saved.":"The transaction has been successfully saved.","The transaction has been successfully updated.":"The transaction has been successfully updated.","Unable to find the transaction using the provided identifier.":"Unable to find the transaction using the provided identifier.","Unable to find the requested transaction using the provided id.":"Unable to find the requested transaction using the provided id.","The transction has been correctly deleted.":"The transction has been correctly deleted.","You cannot delete an account which has transactions bound.":"You cannot delete an account which has transactions bound.","The transaction account has been deleted.":"The transaction account has been deleted.","Unable to find the transaction account using the provided ID.":"Unable to find the transaction account using the provided ID.","The transaction account has been updated.":"The transaction account has been updated.","This transaction type can\\'t be triggered.":"This transaction type can\\'t be triggered.","The transaction has been successfully triggered.":"The transaction has been successfully triggered.","The transaction \"%s\" has been processed on day \"%s\".":"The transaction \"%s\" has been processed on day \"%s\".","The transaction \"%s\" has already been processed.":"The transaction \"%s\" has already been processed.","The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.":"The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.","The process has been correctly executed and all transactions has been processed.":"The process has been correctly executed and all transactions has been processed.","The process has been executed with some failures. %s\/%s process(es) has successed.":"The process has been executed with some failures. %s\/%s process(es) has successed.","Procurement : %s":"Procurement : %s","Procurement Liability : %s":"Procurement Liability : %s","Refunding : %s":"Refunding : %s","Spoiled Good : %s":"Spoiled Good : %s","Sale : %s":"Sale : %s","Liabilities Account":"Liabilities Account","Not found account type: %s":"Not found account type: %s","Refund : %s":"Refund : %s","Customer Account Crediting : %s":"Customer Account Crediting : %s","Customer Account Purchase : %s":"Customer Account Purchase : %s","Customer Account Deducting : %s":"Customer Account Deducting : %s","Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.":"Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.","The unit group %s doesn\\'t have a base unit":"The unit group %s doesn\\'t have a base unit","The system role \"Users\" can be retrieved.":"The system role \"Users\" can be retrieved.","The default role that must be assigned to new users cannot be retrieved.":"The default role that must be assigned to new users cannot be retrieved.","%s Second(s)":"%s Second(s)","Configure the accounting feature":"Configure the accounting feature","Define the symbol that indicate thousand. By default ":"Define the symbol that indicate thousand. By default ","Date Time Format":"Date Time Format","This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".":"This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".","Date TimeZone":"Date TimeZone","Determine the default timezone of the store. Current Time: %s":"Determine the default timezone of the store. Current Time: %s","Configure how invoice and receipts are used.":"Configure how invoice and receipts are used.","configure settings that applies to orders.":"configure settings that applies to orders.","Report Settings":"Report Settings","Configure the settings":"Configure the settings","Wipes and Reset the database.":"Wipes and Reset the database.","Supply Delivery":"Supply Delivery","Configure the delivery feature.":"Configure the delivery feature.","Configure how background operations works.":"Configure how background operations works.","Every procurement will be added to the selected transaction account":"Every procurement will be added to the selected transaction account","Every sales will be added to the selected transaction account":"Every sales will be added to the selected transaction account","Customer Credit Account (crediting)":"Customer Credit Account (crediting)","Every customer credit will be added to the selected transaction account":"Every customer credit will be added to the selected transaction account","Customer Credit Account (debitting)":"Customer Credit Account (debitting)","Every customer credit removed will be added to the selected transaction account":"Every customer credit removed will be added to the selected transaction account","Sales refunds will be attached to this transaction account":"Sales refunds will be attached to this transaction account","Stock Return Account (Spoiled Items)":"Stock Return Account (Spoiled Items)","Disbursement (cash register)":"Disbursement (cash register)","Transaction account for all cash disbursement.":"Transaction account for all cash disbursement.","Liabilities":"Liabilities","Transaction account for all liabilities.":"Transaction account for all liabilities.","You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.":"You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.","Show Tax Breakdown":"Show Tax Breakdown","Will display the tax breakdown on the receipt\/invoice.":"Will display the tax breakdown on the receipt\/invoice.","Available tags : ":"Available tags : ","{store_name}: displays the store name.":"{store_name}: displays the store name.","{store_email}: displays the store email.":"{store_email}: displays the store email.","{store_phone}: displays the store phone number.":"{store_phone}: displays the store phone number.","{cashier_name}: displays the cashier name.":"{cashier_name}: displays the cashier name.","{cashier_id}: displays the cashier id.":"{cashier_id}: displays the cashier id.","{order_code}: displays the order code.":"{order_code}: displays the order code.","{order_date}: displays the order date.":"{order_date}: displays the order date.","{order_type}: displays the order type.":"{order_type}: displays the order type.","{customer_name}: displays the customer name.":"{customer_name}: displays the customer name.","{customer_email}: displays the customer email.":"{customer_email}: displays the customer email.","{shipping_first_name}: displays the shipping first name.":"{shipping_first_name}: displays the shipping first name.","{shipping_last_name}: displays the shipping last name.":"{shipping_last_name}: displays the shipping last name.","{shipping_phone}: displays the shipping phone.":"{shipping_phone}: displays the shipping phone.","{shipping_address_1}: displays the shipping address_1.":"{shipping_address_1}: displays the shipping address_1.","{shipping_address_2}: displays the shipping address_2.":"{shipping_address_2}: displays the shipping address_2.","{shipping_country}: displays the shipping country.":"{shipping_country}: displays the shipping country.","{shipping_city}: displays the shipping city.":"{shipping_city}: displays the shipping city.","{shipping_pobox}: displays the shipping pobox.":"{shipping_pobox}: displays the shipping pobox.","{shipping_company}: displays the shipping company.":"{shipping_company}: displays the shipping company.","{shipping_email}: displays the shipping email.":"{shipping_email}: displays the shipping email.","{billing_first_name}: displays the billing first name.":"{billing_first_name}: displays the billing first name.","{billing_last_name}: displays the billing last name.":"{billing_last_name}: displays the billing last name.","{billing_phone}: displays the billing phone.":"{billing_phone}: displays the billing phone.","{billing_address_1}: displays the billing address_1.":"{billing_address_1}: displays the billing address_1.","{billing_address_2}: displays the billing address_2.":"{billing_address_2}: displays the billing address_2.","{billing_country}: displays the billing country.":"{billing_country}: displays the billing country.","{billing_city}: displays the billing city.":"{billing_city}: displays the billing city.","{billing_pobox}: displays the billing pobox.":"{billing_pobox}: displays the billing pobox.","{billing_company}: displays the billing company.":"{billing_company}: displays the billing company.","{billing_email}: displays the billing email.":"{billing_email}: displays the billing email.","Available tags :":"Available tags :","Quick Product Default Unit":"Quick Product Default Unit","Set what unit is assigned by default to all quick product.":"Set what unit is assigned by default to all quick product.","Hide Exhausted Products":"Hide Exhausted Products","Will hide exhausted products from selection on the POS.":"Will hide exhausted products from selection on the POS.","Hide Empty Category":"Hide Empty Category","Category with no or exhausted products will be hidden from selection.":"Category with no or exhausted products will be hidden from selection.","Default Printing (web)":"Default Printing (web)","The amount numbers shortcuts separated with a \"|\".":"The amount numbers shortcuts separated with a \"|\".","No submit URL was provided":"No submit URL was provided","Sorting is explicitely disabled on this column":"Sorting is explicitely disabled on this column","An unpexpected error occured while using the widget.":"An unpexpected error occured while using the widget.","This field must be similar to \"{other}\"\"":"This field must be similar to \"{other}\"\"","This field must have at least \"{length}\" characters\"":"This field must have at least \"{length}\" characters\"","This field must have at most \"{length}\" characters\"":"This field must have at most \"{length}\" characters\"","This field must be different from \"{other}\"\"":"This field must be different from \"{other}\"\"","Search result":"Search result","Choose...":"Choose...","The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.":"The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.","+{count} other":"+{count} other","The selected print gateway doesn't support this type of printing.":"The selected print gateway doesn't support this type of printing.","millisecond| second| minute| hour| day| week| month| year| decade| century| millennium":"millisecond| second| minute| hour| day| week| month| year| decade| century| millennium","milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia":"milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia","An error occured":"An error occured","You\\'re about to delete selected resources. Would you like to proceed?":"You\\'re about to delete selected resources. Would you like to proceed?","See Error":"See Error","Your uploaded files will displays here.":"Your uploaded files will displays here.","Nothing to care about !":"Nothing to care about !","Would you like to bulk edit a system role ?":"Would you like to bulk edit a system role ?","Total :":"Total :","Remaining :":"Remaining :","Instalments:":"Instalments:","This instalment doesn\\'t have any payment attached.":"This instalment doesn\\'t have any payment attached.","You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?":"You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?","An error has occured while seleting the payment gateway.":"An error has occured while seleting the payment gateway.","You're not allowed to add a discount on the product.":"You're not allowed to add a discount on the product.","You're not allowed to add a discount on the cart.":"You're not allowed to add a discount on the cart.","Cash Register : {register}":"Cash Register : {register}","The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?":"The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?","You don't have the right to edit the purchase price.":"You don't have the right to edit the purchase price.","Dynamic product can\\'t have their price updated.":"Dynamic product can\\'t have their price updated.","You\\'re not allowed to edit the order settings.":"You\\'re not allowed to edit the order settings.","Looks like there is either no products and no categories. How about creating those first to get started ?":"Looks like there is either no products and no categories. How about creating those first to get started ?","Create Categories":"Create Categories","You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?":"You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?","An unexpected error has occured while loading the form. Please check the log or contact the support.":"An unexpected error has occured while loading the form. Please check the log or contact the support.","We were not able to load the units. Make sure there are units attached on the unit group selected.":"We were not able to load the units. Make sure there are units attached on the unit group selected.","The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?":"The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?","There shoulnd\\'t be more option than there are units.":"There shoulnd\\'t be more option than there are units.","Either Selling or Purchase unit isn\\'t defined. Unable to proceed.":"Either Selling or Purchase unit isn\\'t defined. Unable to proceed.","Select the procured unit first before selecting the conversion unit.":"Select the procured unit first before selecting the conversion unit.","Convert to unit":"Convert to unit","An unexpected error has occured":"An unexpected error has occured","Unable to add product which doesn\\'t unit quantities defined.":"Unable to add product which doesn\\'t unit quantities defined.","{product}: Purchase Unit":"{product}: Purchase Unit","The product will be procured on that unit.":"The product will be procured on that unit.","Unkown Unit":"Unkown Unit","Choose Tax":"Choose Tax","The tax will be assigned to the procured product.":"The tax will be assigned to the procured product.","Show Details":"Show Details","Hide Details":"Hide Details","Important Notes":"Important Notes","Stock Management Products.":"Stock Management Products.","Doesn\\'t work with Grouped Product.":"Doesn\\'t work with Grouped Product.","Convert":"Convert","Looks like no valid products matched the searched term.":"Looks like no valid products matched the searched term.","This product doesn't have any stock to adjust.":"This product doesn't have any stock to adjust.","Select Unit":"Select Unit","Select the unit that you want to adjust the stock with.":"Select the unit that you want to adjust the stock with.","A similar product with the same unit already exists.":"A similar product with the same unit already exists.","Select Procurement":"Select Procurement","Select the procurement that you want to adjust the stock with.":"Select the procurement that you want to adjust the stock with.","Select Action":"Select Action","Select the action that you want to perform on the stock.":"Select the action that you want to perform on the stock.","Would you like to remove the selected products from the table ?":"Would you like to remove the selected products from the table ?","Unit:":"Unit:","Operation:":"Operation:","Procurement:":"Procurement:","Reason:":"Reason:","Provided":"Provided","Not Provided":"Not Provided","Remove Selected":"Remove Selected","Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.":"Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.","You haven\\'t yet generated any token for your account. Create one to get started.":"You haven\\'t yet generated any token for your account. Create one to get started.","You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?":"You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?","Date Range : {date1} - {date2}":"Date Range : {date1} - {date2}","Document : Best Products":"Document : Best Products","By : {user}":"By : {user}","Range : {date1} — {date2}":"Range : {date1} — {date2}","Document : Sale By Payment":"Document : Sale By Payment","Document : Customer Statement":"Document : Customer Statement","Customer : {selectedCustomerName}":"Customer : {selectedCustomerName}","All Categories":"All Categories","All Units":"All Units","Date : {date}":"Date : {date}","Document : {reportTypeName}":"Document : {reportTypeName}","Threshold":"Threshold","Select Units":"Select Units","An error has occured while loading the units.":"An error has occured while loading the units.","An error has occured while loading the categories.":"An error has occured while loading the categories.","Document : Payment Type":"Document : Payment Type","Document : Profit Report":"Document : Profit Report","Filter by Category":"Filter by Category","Filter by Units":"Filter by Units","An error has occured while loading the categories":"An error has occured while loading the categories","An error has occured while loading the units":"An error has occured while loading the units","By Type":"By Type","By User":"By User","By Category":"By Category","All Category":"All Category","Document : Sale Report":"Document : Sale Report","Filter By Category":"Filter By Category","Allow you to choose the category.":"Allow you to choose the category.","No category was found for proceeding the filtering.":"No category was found for proceeding the filtering.","Document : Sold Stock Report":"Document : Sold Stock Report","Filter by Unit":"Filter by Unit","Limit Results By Categories":"Limit Results By Categories","Limit Results By Units":"Limit Results By Units","Generate Report":"Generate Report","Document : Combined Products History":"Document : Combined Products History","Ini. Qty":"Ini. Qty","Added Quantity":"Added Quantity","Add. Qty":"Add. Qty","Sold Quantity":"Sold Quantity","Sold Qty":"Sold Qty","Defective Quantity":"Defective Quantity","Defec. Qty":"Defec. Qty","Final Quantity":"Final Quantity","Final Qty":"Final Qty","No data available":"No data available","Document : Yearly Report":"Document : Yearly Report","The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.":"The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.","Unable to edit this transaction":"Unable to edit this transaction","This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.":"This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.","Save Transaction":"Save Transaction","While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.":"While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.","The transaction is about to be saved. Would you like to confirm your action ?":"The transaction is about to be saved. Would you like to confirm your action ?","Unable to load the transaction":"Unable to load the transaction","You cannot edit this transaction if NexoPOS cannot perform background requests.":"You cannot edit this transaction if NexoPOS cannot perform background requests.","MySQL is selected as database driver":"MySQL is selected as database driver","Please provide the credentials to ensure NexoPOS can connect to the database.":"Please provide the credentials to ensure NexoPOS can connect to the database.","Sqlite is selected as database driver":"Sqlite is selected as database driver","Make sure Sqlite module is available for PHP. Your database will be located on the database directory.":"Make sure Sqlite module is available for PHP. Your database will be located on the database directory.","Checking database connectivity...":"Checking database connectivity...","Driver":"Driver","Set the database driver":"Set the database driver","Hostname":"Hostname","Provide the database hostname":"Provide the database hostname","Username required to connect to the database.":"Username required to connect to the database.","The username password required to connect.":"The username password required to connect.","Database Name":"Database Name","Provide the database name. Leave empty to use default file for SQLite Driver.":"Provide the database name. Leave empty to use default file for SQLite Driver.","Database Prefix":"Database Prefix","Provide the database prefix.":"Provide the database prefix.","Port":"Port","Provide the hostname port.":"Provide the hostname port.","NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.":"NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.","Install":"Install","Application":"Application","That is the application name.":"That is the application name.","Provide the administrator username.":"Provide the administrator username.","Provide the administrator email.":"Provide the administrator email.","What should be the password required for authentication.":"What should be the password required for authentication.","Should be the same as the password above.":"Should be the same as the password above.","Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.":"Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.","Choose your language to get started.":"Choose your language to get started.","Remaining Steps":"Remaining Steps","Database Configuration":"Database Configuration","Application Configuration":"Application Configuration","Language Selection":"Language Selection","Select what will be the default language of NexoPOS.":"Select what will be the default language of NexoPOS.","In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.":"In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.","Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.":"Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.","Please report this message to the support : ":"Please report this message to the support : ","No refunds made so far. Good news right?":"No refunds made so far. Good news right?","Open Register : %s":"Open Register : %s","Loading Coupon For : ":"Loading Coupon For : ","This coupon requires products that aren\\'t available on the cart at the moment.":"This coupon requires products that aren\\'t available on the cart at the moment.","This coupon requires products that belongs to specific categories that aren\\'t included at the moment.":"This coupon requires products that belongs to specific categories that aren\\'t included at the moment.","Too many results.":"Too many results.","New Customer":"New Customer","Purchases":"Purchases","Owed":"Owed","Usage :":"Usage :","Code :":"Code :","Order Reference":"Order Reference","The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?":"The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?","{product} : Units":"{product} : Units","This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.":"This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.","Previewing :":"Previewing :","Search for options":"Search for options","The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.":"The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.","The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.":"The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.","The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.":"The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.","The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.":"The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.","Invalid Error Message":"Invalid Error Message","{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List":"{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List","Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.":"Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.","No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered":"No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered","Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.":"Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.","Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}":"Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}","Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.":"Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.","Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}":"Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}","{{ ucwords( $column ) }}":"{{ ucwords( $column ) }}","Delete Selected Entries":"Delete Selected Entries","Unamed Settings Page":"Unamed Settings Page","Description of unamed setting page":"Description of unamed setting page","Text Field":"Text Field","This is a sample text field.":"This is a sample text field.","No description has been provided.":"No description has been provided.","You\\'re using NexoPOS %s<\/a>":"You\\'re using NexoPOS %s<\/a>","If you haven\\'t asked this, please get in touch with the administrators.":"If you haven\\'t asked this, please get in touch with the administrators.","A new user has registered to your store (%s) with the email %s.":"A new user has registered to your store (%s) with the email %s.","The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.":"The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.","Note: ":"Note: ","Inclusive Product Taxes":"Inclusive Product Taxes","Exclusive Product Taxes":"Exclusive Product Taxes","Condition:":"Condition:","Date : %s":"Date : %s","The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?":"The database will be cleared. You\\'ll loose existing datas. Only users and roles are kept. Would you like to proceed ?","NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.":"NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.","Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.":"Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.","Retry":"Retry","If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.":"If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources."} \ No newline at end of file +{"displaying {perPage} on {items} items":"Hi\u1ec3n th\u1ecb {perPage} tr\u00ean {items} m\u1ee5c","The document has been generated.":"T\u00e0i li\u1ec7u \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","Unexpected error occurred.":"X\u1ea3y ra l\u1ed7i.","{entries} entries selected":"{entries} M\u1ee5c nh\u1eadp \u0111\u01b0\u1ee3c ch\u1ecdn","Download":"T\u1ea3i xu\u1ed1ng","Bulk Actions":"Th\u1ef1c hi\u1ec7n theo l\u00f4","Delivery":"Giao h\u00e0ng","Take Away":"Mang \u0111i","Unknown Type":"Ki\u1ec3u kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Pending":"Ch\u1edd","Ongoing":"Li\u00ean t\u1ee5c","Delivered":"G\u1eedi","Unknown Status":"Tr\u1ea1ng th\u00e1i kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Ready":"S\u1eb5n s\u00e0ng","Paid":"\u0110\u00e3 thanh to\u00e1n","Hold":"Gi\u1eef \u0111\u01a1n","Unpaid":"C\u00f4ng n\u1ee3","Partially Paid":"Thanh to\u00e1n m\u1ed9t ph\u1ea7n","Save Password":"L\u01b0u m\u1eadt kh\u1ea9u","Unable to proceed the form is not valid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh.","Submit":"X\u00e1c nh\u1eadn","Register":"\u0110\u0103ng k\u00fd","An unexpected error occurred.":"L\u1ed7i kh\u00f4ng x\u00e1c \u0111\u1ecbnh.","Best Cashiers":"Thu ng\u00e2n c\u00f3 doanh thu cao nh\u1ea5t","No result to display.":"Kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u \u0111\u1ec3 hi\u1ec3n th\u1ecb.","Well.. nothing to show for the meantime.":"Kh\u00f4ng c\u00f3 g\u00ec \u0111\u1ec3 hi\u1ec3n th\u1ecb.","Best Customers":"Kh\u00e1ch h\u00e0ng mua h\u00e0ng nhi\u1ec1u nh\u1ea5t","Well.. nothing to show for the meantime":"Kh\u00f4ng c\u00f3 g\u00ec \u0111\u1ec3 hi\u1ec3n th\u1ecb","Total Sales":"T\u1ed5ng doanh s\u1ed1","Today":"H\u00f4m nay","Incomplete Orders":"C\u00e1c \u0111\u01a1n ch\u01b0a ho\u00e0n th\u00e0nh","Expenses":"Chi ph\u00ed","Weekly Sales":"Doanh s\u1ed1 h\u00e0ng tu\u1ea7n","Week Taxes":"Ti\u1ec1n thu\u1ebf h\u00e0ng tu\u1ea7n","Net Income":"L\u1ee3i nhu\u1eadn","Week Expenses":"Chi ph\u00ed h\u00e0ng tu\u1ea7n","Order":"\u0110\u01a1n h\u00e0ng","Clear All":"X\u00f3a h\u1ebft","Confirm Your Action":"X\u00e1c nh\u1eadn thao t\u00e1c","Save":"L\u01b0u l\u1ea1i","The processing status of the order will be changed. Please confirm your action.":"Tr\u1ea1ng th\u00e1i c\u1ee7a \u0111\u01a1n \u0111\u1eb7t h\u00e0ng s\u1ebd \u0111\u01b0\u1ee3c thay \u0111\u1ed5i. Vui l\u00f2ng x\u00e1c nh\u1eadn.","Instalments":"Tr\u1ea3 g\u00f3p","Create":"T\u1ea1o","Add Instalment":"Th\u00eam ph\u01b0\u01a1ng th\u1ee9c tr\u1ea3 g\u00f3p","An unexpected error has occurred":"C\u00f3 l\u1ed7i x\u1ea3y ra","Store Details":"Chi ti\u1ebft c\u1eeda h\u00e0ng","Order Code":"M\u00e3 \u0111\u01a1n","Cashier":"Thu ng\u00e2n","Date":"Date","Customer":"Kh\u00e1ch h\u00e0ng","Type":"Lo\u1ea1i","Payment Status":"T\u00ecnh tr\u1ea1ng thanh to\u00e1n","Delivery Status":"T\u00ecnh tr\u1ea1ng giao h\u00e0ng","Billing Details":"Chi ti\u1ebft h\u00f3a \u0111\u01a1n","Shipping Details":"Chi ti\u1ebft giao h\u00e0ng","Product":"S\u1ea3n ph\u1ea9m","Unit Price":"\u0110\u01a1n gi\u00e1","Quantity":"S\u1ed1 l\u01b0\u1ee3ng","Discount":"Gi\u1ea3m gi\u00e1","Tax":"Thu\u1ebf","Total Price":"Gi\u00e1 t\u1ed5ng","Expiration Date":"Ng\u00e0y h\u1ebft h\u1ea1n","Sub Total":"T\u1ed5ng","Coupons":"Coupons","Shipping":"Giao h\u00e0ng","Total":"T\u1ed5ng ti\u1ec1n","Due":"Due","Change":"Tr\u1ea3 l\u1ea1i","No title is provided":"Kh\u00f4ng c\u00f3 ti\u00eau \u0111\u1ec1","SKU":"M\u00e3 v\u1eadt t\u01b0","Barcode":"M\u00e3 v\u1ea1ch","The product already exists on the table.":"S\u1ea3n ph\u1ea9m \u0111\u00e3 c\u00f3 tr\u00ean b\u00e0n.","The specified quantity exceed the available quantity.":"V\u01b0\u1ee3t qu\u00e1 s\u1ed1 l\u01b0\u1ee3ng c\u00f3 s\u1eb5n.","Unable to proceed as the table is empty.":"B\u00e0n tr\u1ed1ng.","More Details":"Th\u00f4ng tin chi ti\u1ebft","Useful to describe better what are the reasons that leaded to this adjustment.":"N\u00eau l\u00fd do \u0111i\u1ec1u ch\u1ec9nh.","Search":"T\u00ecm ki\u1ebfm","Unit":"\u0110\u01a1n v\u1ecb","Operation":"Ho\u1ea1t \u0111\u1ed9ng","Procurement":"Mua h\u00e0ng","Value":"Gi\u00e1 tr\u1ecb","Search and add some products":"T\u00ecm ki\u1ebfm v\u00e0 th\u00eam s\u1ea3n ph\u1ea9m","Proceed":"Ti\u1ebfn h\u00e0nh","An unexpected error occurred":"X\u1ea3y ra l\u1ed7i","Load Coupon":"N\u1ea1p phi\u1ebfu gi\u1ea3m gi\u00e1","Apply A Coupon":"\u00c1p d\u1ee5ng phi\u1ebfu gi\u1ea3m gi\u00e1","Load":"T\u1ea3i","Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.":"Nh\u1eadp m\u00e3 phi\u1ebfu gi\u1ea3m gi\u00e1.","Click here to choose a customer.":"Ch\u1ecdn kh\u00e1ch h\u00e0ng.","Coupon Name":"T\u00ean phi\u1ebfu gi\u1ea3m gi\u00e1","Usage":"S\u1eed d\u1ee5ng","Unlimited":"Kh\u00f4ng gi\u1edbi h\u1ea1n","Valid From":"Gi\u00e1 tr\u1ecb t\u1eeb","Valid Till":"Gi\u00e1 tr\u1ecb \u0111\u1ebfn","Categories":"Nh\u00f3m h\u00e0ng","Products":"S\u1ea3n ph\u1ea9m","Active Coupons":"K\u00edch ho\u1ea1t phi\u1ebfu gi\u1ea3m gi\u00e1","Apply":"Ch\u1ea5p nh\u1eadn","Cancel":"H\u1ee7y","Coupon Code":"M\u00e3 phi\u1ebfu gi\u1ea3m gi\u00e1","The coupon is out from validity date range.":"Phi\u1ebfu gi\u1ea3m gi\u00e1 h\u1ebft hi\u1ec7u l\u1ef1c.","The coupon has applied to the cart.":"Phi\u1ebfu gi\u1ea3m gi\u00e1 \u0111\u00e3 \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng.","Percentage":"Ph\u1ea7n tr\u0103m","Flat":"B\u1eb1ng","The coupon has been loaded.":"Phi\u1ebfu gi\u1ea3m gi\u00e1 \u0111\u00e3 \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng.","Layaway Parameters":"\u0110\u1eb7t c\u00e1c tham s\u1ed1","Minimum Payment":"S\u1ed1 ti\u1ec1n t\u1ed1i thi\u1ec3u c\u1ea7n thanh to\u00e1n","Instalments & Payments":"Tr\u1ea3 g\u00f3p & Thanh to\u00e1n","The final payment date must be the last within the instalments.":"Ng\u00e0y thanh to\u00e1n cu\u1ed1i c\u00f9ng ph\u1ea3i l\u00e0 ng\u00e0y cu\u1ed1i c\u00f9ng trong \u0111\u1ee3t tr\u1ea3 g\u00f3p.","Amount":"Th\u00e0nh ti\u1ec1n","You must define layaway settings before proceeding.":"B\u1ea1n ph\u1ea3i c\u00e0i \u0111\u1eb7t tham s\u1ed1 tr\u01b0\u1edbc khi ti\u1ebfn h\u00e0nh.","Please provide instalments before proceeding.":"Vui l\u00f2ng tr\u1ea3 g\u00f3p tr\u01b0\u1edbc khi ti\u1ebfn h\u00e0nh.","Unable to process, the form is not valid":"Bi\u1ec3u m\u1eabu kh\u00f4ng h\u1ee3p l\u1ec7","One or more instalments has an invalid date.":"M\u1ed9t ho\u1eb7c nhi\u1ec1u \u0111\u1ee3t c\u00f3 ng\u00e0y kh\u00f4ng h\u1ee3p l\u1ec7.","One or more instalments has an invalid amount.":"M\u1ed9t ho\u1eb7c nhi\u1ec1u \u0111\u1ee3t c\u00f3 s\u1ed1 ti\u1ec1n kh\u00f4ng h\u1ee3p l\u1ec7.","One or more instalments has a date prior to the current date.":"M\u1ed9t ho\u1eb7c nhi\u1ec1u \u0111\u1ee3t c\u00f3 ng\u00e0y tr\u01b0\u1edbc ng\u00e0y hi\u1ec7n t\u1ea1i.","Total instalments must be equal to the order total.":"T\u1ed5ng s\u1ed1 \u0111\u1ee3t ph\u1ea3i b\u1eb1ng t\u1ed5ng s\u1ed1 \u0111\u01a1n \u0111\u1eb7t h\u00e0ng.","The customer has been loaded":"Kh\u00e1ch h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c n\u1ea1p","This coupon is already added to the cart":"Phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c th\u00eam v\u00e0o gi\u1ecf h\u00e0ng","No tax group assigned to the order":"Kh\u00f4ng c\u00f3 nh\u00f3m thu\u1ebf n\u00e0o \u0111\u01b0\u1ee3c giao cho \u0111\u01a1n \u0111\u1eb7t h\u00e0ng","Layaway defined":"\u0110\u1ecbnh ngh\u0129a tham s\u1ed1","Okay":"\u0110\u1ed3ng \u00fd","An unexpected error has occurred while fecthing taxes.":"C\u00f3 l\u1ed7i x\u1ea3y ra.","OKAY":"\u0110\u1ed3ng \u00fd","Loading...":"\u0110ang x\u1eed l\u00fd...","Profile":"H\u1ed3 s\u01a1","Logout":"Tho\u00e1t","Unnamed Page":"Trang ch\u01b0a \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh","No description":"Kh\u00f4ng c\u00f3 di\u1ec5n gi\u1ea3i","Name":"T\u00ean","Provide a name to the resource.":"Cung c\u1ea5p t\u00ean.","General":"T\u1ed5ng qu\u00e1t","Edit":"S\u1eeda","Delete":"X\u00f3a","Delete Selected Groups":"X\u00f3a nh\u00f3m \u0111\u01b0\u1ee3c ch\u1ecdn","Activate Your Account":"K\u00edch ho\u1ea1t t\u00e0i kho\u1ea3n","Password Recovered":"M\u1eadt kh\u1ea9u \u0111\u00e3 \u0111\u01b0\u1ee3c kh\u00f4i ph\u1ee5c","Password Recovery":"Kh\u00f4i ph\u1ee5c m\u1eadt kh\u1ea9u","Reset Password":"\u0110\u1eb7t l\u1ea1i m\u1eadt kh\u1ea9u","New User Registration":"\u0110\u0103ng k\u00fd ng\u01b0\u1eddi d\u00f9ng m\u1edbi","Your Account Has Been Created":"T\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o","Login":"\u0110\u0103ng nh\u1eadp","Save Coupon":"L\u01b0u phi\u1ebfu gi\u1ea3m gi\u00e1","This field is required":"Tr\u01b0\u1eddng b\u1eaft bu\u1ed9c","The form is not valid. Please check it and try again":"Bi\u1ec3u m\u1eabu kh\u00f4ng h\u1ee3p l\u1ec7. Vui l\u00f2ng ki\u1ec3m tra v\u00e0 th\u1eed l\u1ea1i","mainFieldLabel not defined":"Nh\u00e3n ch\u00ednh ch\u01b0a \u0111\u01b0\u1ee3c t\u1ea1o","Create Customer Group":"T\u1ea1o nh\u00f3m kh\u00e1ch h\u00e0ng","Save a new customer group":"L\u01b0u nh\u00f3m kh\u00e1ch h\u00e0ng","Update Group":"C\u1eadp nh\u1eadt nh\u00f3m","Modify an existing customer group":"Ch\u1ec9nh s\u1eeda nh\u00f3m","Managing Customers Groups":"Qu\u1ea3n l\u00fd nh\u00f3m kh\u00e1ch h\u00e0ng","Create groups to assign customers":"T\u1ea1o nh\u00f3m \u0111\u1ec3 g\u00e1n cho kh\u00e1ch h\u00e0ng","Create Customer":"T\u1ea1o kh\u00e1ch h\u00e0ng","Managing Customers":"Qu\u1ea3n l\u00fd kh\u00e1ch h\u00e0ng","List of registered customers":"Danh s\u00e1ch kh\u00e1ch h\u00e0ng \u0111\u00e3 \u0111\u0103ng k\u00fd","Your Module":"Ph\u00e2n h\u1ec7 c\u1ee7a b\u1ea1n","Choose the zip file you would like to upload":"Ch\u1ecdn file n\u00e9n b\u1ea1n mu\u1ed1n t\u1ea3i l\u00ean","Upload":"T\u1ea3i l\u00ean","Managing Orders":"Qu\u1ea3n l\u00fd \u0111\u01a1n h\u00e0ng","Manage all registered orders.":"Qu\u1ea3n l\u00fd t\u1ea5t c\u1ea3 c\u00e1c \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 \u0111\u0103ng k\u00fd.","Failed":"Th\u1ea5t b\u1ea1i","Order receipt":"Bi\u00ean nh\u1eadn \u0111\u01a1n h\u00e0ng","Hide Dashboard":"\u1ea8n b\u1ea3ng \u0111i\u1ec1u khi\u1ec3n","Taxes":"Thu\u1ebf","Unknown Payment":"Thanh to\u00e1n kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Procurement Name":"T\u00ean nh\u00e0 cung c\u1ea5p","Unable to proceed no products has been provided.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh kh\u00f4ng c\u00f3 s\u1ea3n ph\u1ea9m n\u00e0o \u0111\u01b0\u1ee3c cung c\u1ea5p.","Unable to proceed, one or more products is not valid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh, m\u1ed9t ho\u1eb7c nhi\u1ec1u s\u1ea3n ph\u1ea9m kh\u00f4ng h\u1ee3p l\u1ec7.","Unable to proceed the procurement form is not valid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh bi\u1ec3u m\u1eabu mua s\u1eafm l\u00e0 kh\u00f4ng h\u1ee3p l\u1ec7.","Unable to proceed, no submit url has been provided.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh, kh\u00f4ng c\u00f3 url g\u1eedi \u0111\u00e3 \u0111\u01b0\u1ee3c cung c\u1ea5p.","SKU, Barcode, Product name.":"M\u00e3 h\u00e0ng, M\u00e3 v\u1ea1ch, T\u00ean h\u00e0ng.","N\/A":"N\/A","Email":"Th\u01b0 \u0111i\u1ec7n t\u1eed","Phone":"\u0110i\u1ec7n tho\u1ea1i","First Address":"\u0110\u1ecba ch\u1ec9 1","Second Address":"\u0110\u1ecba ch\u1ec9 2","Address":"\u0110\u1ecba ch\u1ec9","City":"T\u1ec9nh\/Th\u00e0nh ph\u1ed1","PO.Box":"H\u1ed9p th\u01b0","Price":"Gi\u00e1","Print":"In","Description":"Di\u1ec5n gi\u1ea3i","Included Products":"S\u1ea3n ph\u1ea9m g\u1ed3m","Apply Settings":"\u00c1p d\u1ee5ng c\u00e0i \u0111\u1eb7t","Basic Settings":"C\u00e0i \u0111\u1eb7t ch\u00ednh","Visibility Settings":"C\u00e0i \u0111\u1eb7t hi\u1ec3n th\u1ecb","Year":"N\u0103m","Sales":"B\u00e1n","Income":"L\u00e3i","January":"Th\u00e1ng 1","March":"Th\u00e1ng 3","April":"Th\u00e1ng 4","May":"Th\u00e1ng 5","June":"Th\u00e1ng 6","July":"Th\u00e1ng 7","August":"Th\u00e1ng 8","September":"Th\u00e1ng 9","October":"Th\u00e1ng 10","November":"Th\u00e1ng 11","December":"Th\u00e1ng 12","Purchase Price":"Gi\u00e1 mua","Sale Price":"Gi\u00e1 b\u00e1n","Profit":"L\u1ee3i nhu\u1eadn","Tax Value":"Ti\u1ec1n thu\u1ebf","Reward System Name":"T\u00ean h\u1ec7 th\u1ed1ng ph\u1ea7n th\u01b0\u1edfng","Missing Dependency":"Thi\u1ebfu s\u1ef1 ph\u1ee5 thu\u1ed9c","Go Back":"Quay l\u1ea1i","Continue":"Ti\u1ebfp t\u1ee5c","Home":"Trang ch\u1ee7","Not Allowed Action":"H\u00e0nh \u0111\u1ed9ng kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p","Try Again":"Th\u1eed l\u1ea1i","Access Denied":"T\u1eeb ch\u1ed1i truy c\u1eadp","Dashboard":"B\u1ea3ng \u0111i\u1ec1u khi\u1ec3n","Sign In":"\u0110\u0103ng nh\u1eadp","Sign Up":"Sign Up","This field is required.":"Tr\u01b0\u1eddng b\u1eaft bu\u1ed9c.","This field must contain a valid email address.":"B\u1eaft bu\u1ed9c email h\u1ee3p l\u1ec7.","Clear Selected Entries ?":"X\u00f3a m\u1ee5c \u0111\u00e3 ch\u1ecdn ?","Would you like to clear all selected entries ?":"B\u1ea1n c\u00f3 mu\u1ed1n x\u00f3a t\u1ea5t c\u1ea3 c\u00e1c m\u1ee5c \u0111\u00e3 ch\u1ecdn kh\u00f4ng?","No selection has been made.":"Kh\u00f4ng c\u00f3 l\u1ef1a ch\u1ecdn n\u00e0o \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n","No action has been selected.":"Kh\u00f4ng c\u00f3 h\u00e0nh \u0111\u1ed9ng n\u00e0o \u0111\u01b0\u1ee3c ch\u1ecdn.","There is nothing to display...":"Kh\u00f4ng c\u00f3 g\u00ec \u0111\u1ec3 hi\u1ec3n th\u1ecb ...","Sun":"Ch\u1ee7 nh\u1eadt","Mon":"Th\u1ee9 hai","Tue":"Th\u1ee9 ba","Wed":"Th\u1ee9 t\u01b0","Fri":"Th\u1ee9 s\u00e1u","Sat":"Th\u1ee9 b\u1ea3y","Nothing to display":"Kh\u00f4ng c\u00f3 g\u00ec \u0111\u1ec3 hi\u1ec3n th\u1ecb","Password Forgotten ?":"B\u1ea1n \u0111\u00e3 qu\u00ean m\u1eadt kh\u1ea9u","OK":"\u0110\u1ed3ng \u00fd","Remember Your Password ?":"Nh\u1edb m\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n?","Already registered ?":"\u0110\u00e3 \u0111\u0103ng k\u00fd?","Refresh":"l\u00e0m m\u1edbi","Enabled":"\u0111\u00e3 b\u1eadt","Disabled":"\u0111\u00e3 t\u1eaft","Enable":"b\u1eadt","Disable":"t\u1eaft","Gallery":"Th\u01b0 vi\u1ec7n","Medias Manager":"Tr\u00ecnh qu\u1ea3n l\u00ed medias","Click Here Or Drop Your File To Upload":"Nh\u1ea5p v\u00e0o \u0111\u00e2y ho\u1eb7c th\u1ea3 t\u1ec7p c\u1ee7a b\u1ea1n \u0111\u1ec3 t\u1ea3i l\u00ean","Nothing has already been uploaded":"Ch\u01b0a c\u00f3 g\u00ec \u0111\u01b0\u1ee3c t\u1ea3i l\u00ean","File Name":"t\u00ean t\u1ec7p","Uploaded At":"\u0111\u00e3 t\u1ea3i l\u00ean l\u00fac","By":"B\u1edfi","Previous":"tr\u01b0\u1edbc \u0111\u00f3","Next":"ti\u1ebfp theo","Use Selected":"s\u1eed d\u1ee5ng \u0111\u00e3 ch\u1ecdn","Would you like to clear all the notifications ?":"B\u1ea1n c\u00f3 mu\u1ed1n x\u00f3a t\u1ea5t c\u1ea3 c\u00e1c th\u00f4ng b\u00e1o kh\u00f4ng?","Permissions":"Quy\u1ec1n","Payment Summary":"T\u00f3m t\u1eaft Thanh to\u00e1n","Order Status":"Tr\u1ea1ng th\u00e1i \u0110\u01a1n h\u00e0ng","Would you proceed ?":"Would you proceed ?","Would you like to create this instalment ?":"B\u1ea1n c\u00f3 mu\u1ed1n t\u1ea1o ph\u1ea7n n\u00e0y kh\u00f4ng?","Would you like to delete this instalment ?":"B\u1ea1n c\u00f3 mu\u1ed1n x\u00f3a ph\u1ea7n n\u00e0y kh\u00f4ng?","Would you like to update that instalment ?":"B\u1ea1n c\u00f3 mu\u1ed1n c\u1eadp nh\u1eadt ph\u1ea7n \u0111\u00f3 kh\u00f4ng?","Customer Account":"T\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng","Payment":"Thanh to\u00e1n","No payment possible for paid order.":"Kh\u00f4ng th\u1ec3 thanh to\u00e1n cho \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 thanh to\u00e1n.","Payment History":"L\u1ecbch s\u1eed Thanh to\u00e1n","Unable to proceed the form is not valid":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c, bi\u1ec3u m\u1eabu kh\u00f4ng h\u1ee3p l\u1ec7","Please provide a valid value":"Vui l\u00f2ng cung c\u1ea5p m\u1ed9t gi\u00e1 tr\u1ecb h\u1ee3p l\u1ec7","Refund With Products":"Ho\u00e0n l\u1ea1i ti\u1ec1n v\u1edbi s\u1ea3n ph\u1ea9m","Refund Shipping":"Ho\u00e0n l\u1ea1i ti\u1ec1n giao h\u00e0ng","Add Product":"Th\u00eam s\u1ea3n ph\u1ea9m","Damaged":"B\u1ecb h\u01b0 h\u1ecfng","Unspoiled":"C\u00f2n nguy\u00ean s\u01a1","Summary":"T\u00f3m t\u1eaft","Payment Gateway":"C\u1ed5ng thanh to\u00e1n","Screen":"Kh\u00e1ch tr\u1ea3","Select the product to perform a refund.":"Ch\u1ecdn s\u1ea3n ph\u1ea9m \u0111\u1ec3 th\u1ef1c hi\u1ec7n ho\u00e0n ti\u1ec1n.","Please select a payment gateway before proceeding.":"Vui l\u00f2ng ch\u1ecdn m\u1ed9t c\u1ed5ng thanh to\u00e1n tr\u01b0\u1edbc khi ti\u1ebfp t\u1ee5c.","There is nothing to refund.":"Kh\u00f4ng c\u00f3 g\u00ec \u0111\u1ec3 ho\u00e0n l\u1ea1i.","Please provide a valid payment amount.":"Vui l\u00f2ng cung c\u1ea5p s\u1ed1 ti\u1ec1n thanh to\u00e1n h\u1ee3p l\u1ec7.","The refund will be made on the current order.":"Vi\u1ec7c ho\u00e0n l\u1ea1i s\u1ebd \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n tr\u00ean \u0111\u01a1n \u0111\u1eb7t h\u00e0ng hi\u1ec7n t\u1ea1i.","Please select a product before proceeding.":"Vui l\u00f2ng ch\u1ecdn m\u1ed9t s\u1ea3n ph\u1ea9m tr\u01b0\u1edbc khi ti\u1ebfp t\u1ee5c.","Not enough quantity to proceed.":"Kh\u00f4ng \u0111\u1ee7 s\u1ed1 l\u01b0\u1ee3ng \u0111\u1ec3 ti\u1ebfp t\u1ee5c.","Would you like to delete this product ?":"B\u1ea1n c\u00f3 mu\u1ed1n x\u00f3a s\u1ea3n ph\u1ea9m n\u00e0y kh\u00f4ng?","Customers":"Kh\u00e1ch h\u00e0ng","Order Type":"Lo\u1ea1i \u0111\u01a1n","Orders":"\u0110\u01a1n h\u00e0ng","Cash Register":"\u0110\u0103ng k\u00fd ti\u1ec1n m\u1eb7t","Reset":"H\u1ee7y \u0111\u01a1n","Cart":"\u0110\u01a1n h\u00e0ng","Comments":"Ghi ch\u00fa","No products added...":"Ch\u01b0a th\u00eam s\u1ea3n ph\u1ea9m n\u00e0o...","Pay":"Thanh to\u00e1n","Void":"H\u1ee7y","Current Balance":"S\u1ed1 d\u01b0 Hi\u1ec7n t\u1ea1i","Full Payment":"Thanh to\u00e1n","The customer account can only be used once per order. Consider deleting the previously used payment.":"T\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng ch\u1ec9 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng m\u1ed9t l\u1ea7n cho m\u1ed7i \u0111\u01a1n h\u00e0ng. H\u00e3y xem x\u00e9t x\u00f3a kho\u1ea3n thanh to\u00e1n \u0111\u00e3 s\u1eed d\u1ee5ng tr\u01b0\u1edbc \u0111\u00f3.","Not enough funds to add {amount} as a payment. Available balance {balance}.":"Kh\u00f4ng \u0111\u1ee7 ti\u1ec1n \u0111\u1ec3 th\u00eam {money} l\u00e0m thanh to\u00e1n. S\u1ed1 d\u01b0 kh\u1ea3 d\u1ee5ng {balance}.","Confirm Full Payment":"X\u00e1c nh\u1eadn thanh to\u00e1n","A full payment will be made using {paymentType} for {total}":"\u0110\u1ed3ng \u00fd thanh to\u00e1n b\u1eb1ng ph\u01b0\u01a1ng th\u1ee9c {paymentType} cho s\u1ed1 ti\u1ec1n {total}","You need to provide some products before proceeding.":"B\u1ea1n c\u1ea7n cung c\u1ea5p m\u1ed9t s\u1ed1 s\u1ea3n ph\u1ea9m tr\u01b0\u1edbc khi ti\u1ebfp t\u1ee5c.","Unable to add the product, there is not enough stock. Remaining %s":"Kh\u00f4ng th\u1ec3 th\u00eam s\u1ea3n ph\u1ea9m, kh\u00f4ng c\u00f2n \u0111\u1ee7 t\u1ed3n kho. C\u00f2n l\u1ea1i %s","Add Images":"Th\u00eam \u1ea3nh","New Group":"Nh\u00f3m m\u1edbi","Available Quantity":"S\u1eb5n s\u1ed1 l\u01b0\u1ee3ng","Would you like to delete this group ?":"B\u1ea1n mu\u1ed1n x\u00f3a nh\u00f3m ?","Your Attention Is Required":"B\u1eaft bu\u1ed9c ghi ch\u00fa","Please select at least one unit group before you proceed.":"Vui l\u00f2ng ch\u1ecdn \u00edt nh\u1ea5t m\u1ed9t nh\u00f3m \u0111\u01a1n v\u1ecb t\u00ednh.","Unable to proceed as one of the unit group field is invalid":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh v\u00ec m\u1ed9t trong c\u00e1c tr\u01b0\u1eddng nh\u00f3m \u0111\u01a1n v\u1ecb kh\u00f4ng h\u1ee3p l\u1ec7","Would you like to delete this variation ?":"B\u1ea1n c\u00f3 mu\u1ed1n x\u00f3a bi\u1ebfn th\u1ec3 n\u00e0y kh\u00f4ng? ?","Details":"Chi ti\u1ebft","Unable to proceed, no product were provided.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh, kh\u00f4ng c\u00f3 s\u1ea3n ph\u1ea9m n\u00e0o \u0111\u01b0\u1ee3c cung c\u1ea5p.","Unable to proceed, one or more product has incorrect values.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh, m\u1ed9t ho\u1eb7c nhi\u1ec1u s\u1ea3n ph\u1ea9m c\u00f3 gi\u00e1 tr\u1ecb kh\u00f4ng ch\u00ednh x\u00e1c.","Unable to proceed, the procurement form is not valid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh, m\u1eabu mua s\u1eafm kh\u00f4ng h\u1ee3p l\u1ec7.","Unable to submit, no valid submit URL were provided.":"Kh\u00f4ng th\u1ec3 g\u1eedi, kh\u00f4ng c\u00f3 URL g\u1eedi h\u1ee3p l\u1ec7 n\u00e0o \u0111\u01b0\u1ee3c cung c\u1ea5p.","Options":"T\u00f9y ch\u1ecdn","The stock adjustment is about to be made. Would you like to confirm ?":"Vi\u1ec7c \u0111i\u1ec1u ch\u1ec9nh c\u1ed5 phi\u1ebfu s\u1eafp \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n. B\u1ea1n c\u00f3 mu\u1ed1n x\u00e1c nh\u1eadn ?","Would you like to remove this product from the table ?":"B\u1ea1n c\u00f3 mu\u1ed1n lo\u1ea1i b\u1ecf s\u1ea3n ph\u1ea9m n\u00e0y kh\u1ecfi b\u00e0n ?","Unable to proceed. Select a correct time range.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh. Ch\u1ecdn m\u1ed9t kho\u1ea3ng th\u1eddi gian ch\u00ednh x\u00e1c.","Unable to proceed. The current time range is not valid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh. Kho\u1ea3ng th\u1eddi gian hi\u1ec7n t\u1ea1i kh\u00f4ng h\u1ee3p l\u1ec7.","Would you like to proceed ?":"B\u1ea1n c\u00f3 mu\u1ed1n ti\u1ebfp t\u1ee5c ?","No rules has been provided.":"Kh\u00f4ng c\u00f3 quy t\u1eafc n\u00e0o \u0111\u01b0\u1ee3c cung c\u1ea5p.","No valid run were provided.":"Kh\u00f4ng c\u00f3 ho\u1ea1t \u0111\u1ed9ng h\u1ee3p l\u1ec7 n\u00e0o \u0111\u01b0\u1ee3c cung c\u1ea5p.","Unable to proceed, the form is invalid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh, bi\u1ec3u m\u1eabu kh\u00f4ng h\u1ee3p l\u1ec7.","Unable to proceed, no valid submit URL is defined.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh, kh\u00f4ng c\u00f3 URL g\u1eedi h\u1ee3p l\u1ec7 n\u00e0o \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh.","No title Provided":"Kh\u00f4ng cung c\u1ea5p ti\u00eau \u0111\u1ec1","Add Rule":"Th\u00eam quy t\u1eafc","Save Settings":"L\u01b0u c\u00e0i \u0111\u1eb7t","Ok":"Nh\u1eadn","New Transaction":"Giao d\u1ecbch m\u1edbi","Close":"\u0110\u00f3ng","Would you like to delete this order":"B\u1ea1n mu\u1ed1n x\u00f3a \u0111\u01a1n h\u00e0ng n\u00e0y?","The current order will be void. This action will be recorded. Consider providing a reason for this operation":"Tr\u1eadt t\u1ef1 hi\u1ec7n t\u1ea1i s\u1ebd b\u1ecb v\u00f4 hi\u1ec7u. H\u00e0nh \u0111\u1ed9ng n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c ghi l\u1ea1i. Xem x\u00e9t cung c\u1ea5p m\u1ed9t l\u00fd do cho ho\u1ea1t \u0111\u1ed9ng n\u00e0y","Order Options":"T\u00f9y ch\u1ecdn \u0111\u01a1n h\u00e0ng","Payments":"Thanh to\u00e1n","Refund & Return":"Ho\u00e0n & Tr\u1ea3 l\u1ea1i","Installments":"\u0110\u1ee3t","The form is not valid.":"Bi\u1ec3u m\u1eabu kh\u00f4ng h\u1ee3p l\u1ec7.","Balance":"C\u00e2n b\u1eb1ng","Input":"Nh\u1eadp","Register History":"L\u1ecbch s\u1eed \u0111\u0103ng k\u00fd","Close Register":"Tho\u00e1t \u0111\u0103ng k\u00fd","Cash In":"Ti\u1ec1n v\u00e0o","Cash Out":"Ti\u1ec1n ra","Register Options":"T\u00f9y ch\u1ecdn \u0111\u0103ng k\u00fd","History":"L\u1ecbch s\u1eed","Unable to open this register. Only closed register can be opened.":"Kh\u00f4ng th\u1ec3 m\u1edf s\u1ed5 \u0111\u0103ng k\u00fd n\u00e0y. Ch\u1ec9 c\u00f3 th\u1ec3 m\u1edf s\u1ed5 \u0111\u0103ng k\u00fd \u0111\u00f3ng.","Open The Register":"M\u1edf \u0111\u0103ng k\u00fd","Exit To Orders":"Tho\u00e1t \u0111\u01a1n","Looks like there is no registers. At least one register is required to proceed.":"C\u00f3 v\u1ebb nh\u01b0 kh\u00f4ng c\u00f3 s\u1ed5 \u0111\u0103ng k\u00fd. \u00cdt nh\u1ea5t m\u1ed9t \u0111\u0103ng k\u00fd \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u \u0111\u1ec3 ti\u1ebfn h\u00e0nh.","Create Cash Register":"T\u1ea1o M\u00e1y t\u00ednh ti\u1ec1n","Yes":"C\u00f3","No":"Kh\u00f4ng","Use":"S\u1eed d\u1ee5ng","No coupon available for this customer":"Kh\u00f4ng c\u00f3 \u0111\u01a1n gi\u1ea3m gi\u00e1 \u0111\u1ed1i v\u1edbi kh\u00e1ch h\u00e0ng n\u00e0y","Select Customer":"Ch\u1ecdn kh\u00e1ch h\u00e0ng","No customer match your query...":"Kh\u00f4ng t\u00ecm th\u1ea5y kh\u00e1ch h\u00e0ng...","Customer Name":"T\u00ean kh\u00e1ch h\u00e0ng","Save Customer":"L\u01b0u kh\u00e1ch h\u00e0ng","No Customer Selected":"Ch\u01b0a ch\u1ecdn kh\u00e1ch h\u00e0ng n\u00e0o.","In order to see a customer account, you need to select one customer.":"B\u1ea1n c\u1ea7n ch\u1ecdn m\u1ed9t kh\u00e1ch h\u00e0ng \u0111\u1ec3 xem th\u00f4ng tin v\u1ec1 kh\u00e1ch h\u00e0ng \u0111\u00f3","Summary For":"T\u1ed5ng c\u1ee7a","Total Purchases":"T\u1ed5ng ti\u1ec1n mua h\u00e0ng","Last Purchases":"L\u1ea7n mua cu\u1ed1i","Status":"T\u00ecnh tr\u1ea1ng","No orders...":"Kh\u00f4ng c\u00f3 \u0111\u01a1n n\u00e0o...","Account Transaction":"T\u00e0i kho\u1ea3n giao d\u1ecbch","Product Discount":"Chi\u1ebft kh\u1ea5u h\u00e0ng h\u00f3a","Cart Discount":"Gi\u1ea3m gi\u00e1 \u0111\u01a1n h\u00e0ng","Hold Order":"Gi\u1eef \u0111\u01a1n","The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.":"L\u1ec7nh hi\u1ec7n t\u1ea1i s\u1ebd \u0111\u01b0\u1ee3c gi\u1eef nguy\u00ean. B\u1ea1n c\u00f3 th\u1ec3 \u0111i\u1ec1u ch\u1ec9nh l\u1ea1i \u0111\u01a1n \u0111\u1eb7t h\u00e0ng n\u00e0y t\u1eeb n\u00fat l\u1ec7nh \u0111ang ch\u1edd x\u1eed l\u00fd. Cung c\u1ea5p m\u1ed9t t\u00e0i li\u1ec7u tham kh\u1ea3o cho n\u00f3 c\u00f3 th\u1ec3 gi\u00fap b\u1ea1n x\u00e1c \u0111\u1ecbnh \u0111\u01a1n \u0111\u1eb7t h\u00e0ng nhanh h\u01a1n.","Confirm":"X\u00e1c nh\u1eadn","Order Note":"Ghi ch\u00fa \u0111\u01a1n h\u00e0ng","Note":"Th\u00f4ng tin ghi ch\u00fa","More details about this order":"Th\u00f4ng tin chi ti\u1ebft v\u1ec1 \u0111\u01a1n h\u00e0ng n\u00e0y","Display On Receipt":"Hi\u1ec3n th\u1ecb tr\u00ean h\u00f3a \u0111\u01a1n","Will display the note on the receipt":"S\u1ebd hi\u1ec3n th\u1ecb ghi ch\u00fa tr\u00ean h\u00f3a \u0111\u01a1n","Open":"M\u1edf","Define The Order Type":"X\u00e1c nh\u1eadn lo\u1ea1i \u0111\u1eb7t h\u00e0ng","Payment List":"Danh s\u00e1ch thanh to\u00e1n","List Of Payments":"Danh s\u00e1ch \u0111\u01a1n thanh to\u00e1n","No Payment added.":"Ch\u01b0a c\u00f3 thanh to\u00e1n n\u00e0o \u0111\u01b0\u1ee3c th\u00eam v\u00e0o.","Select Payment":"Ch\u1ecdn thanh to\u00e1n","Submit Payment":"\u0110\u1ed3ng \u00fd thanh to\u00e1n","Layaway":"In h\u00f3a \u0111\u01a1n","On Hold":"\u0110ang gi\u1eef","Tendered":"\u0110\u1ea5u th\u1ea7u","Nothing to display...":"Kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u hi\u1ec3n th\u1ecb...","Define Quantity":"\u0110\u1eb7t s\u1ed1 l\u01b0\u1ee3ng","Please provide a quantity":"Xin vui l\u00f2ng nh\u1eadn s\u1ed1 l\u01b0\u1ee3ng","Search Product":"T\u00ecm ki\u1ebfm s\u1ea3n ph\u1ea9m","There is nothing to display. Have you started the search ?":"Kh\u00f4ng c\u00f3 g\u00ec \u0111\u1ec3 hi\u1ec3n th\u1ecb. B\u1ea1n \u0111\u00e3 b\u1eaft \u0111\u1ea7u t\u00ecm ki\u1ebfm ch\u01b0a ?","Shipping & Billing":"V\u1eadn chuy\u1ec3n & Thu ti\u1ec1n","Tax & Summary":"Thu\u1ebf & T\u1ed5ng","Settings":"C\u00e0i \u0111\u1eb7t","Select Tax":"Ch\u1ecdn thu\u1ebf","Define the tax that apply to the sale.":"X\u00e1c \u0111\u1ecbnh thu\u1ebf \u00e1p d\u1ee5ng cho vi\u1ec7c b\u00e1n h\u00e0ng.","Define how the tax is computed":"X\u00e1c \u0111\u1ecbnh c\u00e1ch t\u00ednh thu\u1ebf","Exclusive":"Kh\u00f4ng bao g\u1ed3m","Inclusive":"C\u00f3 bao g\u1ed3m","Define when that specific product should expire.":"X\u00e1c \u0111\u1ecbnh khi n\u00e0o s\u1ea3n ph\u1ea9m c\u1ee5 th\u1ec3 \u0111\u00f3 h\u1ebft h\u1ea1n.","Renders the automatically generated barcode.":"Hi\u1ec3n th\u1ecb m\u00e3 v\u1ea1ch \u0111\u01b0\u1ee3c t\u1ea1o t\u1ef1 \u0111\u1ed9ng.","Tax Type":"Lo\u1ea1i Thu\u1ebf","Adjust how tax is calculated on the item.":"\u0110i\u1ec1u ch\u1ec9nh c\u00e1ch t\u00ednh thu\u1ebf tr\u00ean m\u1eb7t h\u00e0ng.","Unable to proceed. The form is not valid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfn h\u00e0nh. Bi\u1ec3u m\u1eabu kh\u00f4ng h\u1ee3p l\u1ec7.","Units & Quantities":"\u0110\u01a1n v\u1ecb & S\u1ed1 l\u01b0\u1ee3ng","Wholesale Price":"Gi\u00e1 b\u00e1n s\u1ec9","Select":"Ch\u1ecdn","Would you like to delete this ?":"B\u1ea1n mu\u1ed1n x\u00f3a ?","The account you have created for __%s__, require an activation. In order to proceed, please click on the following link":"T\u00e0i kho\u1ea3n b\u1ea1n \u0111\u00e3 t\u1ea1o cho __%s__, c\u1ea7n \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t. \u0110\u1ec3 ti\u1ebfn h\u00e0nh, vui l\u00f2ng b\u1ea5m v\u00e0o \u0111\u01b0\u1eddng d\u1eabn sau","Your password has been successfully updated on __%s__. You can now login with your new password.":"M\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng tr\u00ean __%s__. B\u1ea1n c\u00f3 th\u1ec3 \u0111\u0103ng nh\u1eadp v\u1edbi m\u1eadt kh\u1ea9u m\u1edbi n\u00e0y.","Someone has requested to reset your password on __\"%s\"__. If you remember having done that request, please proceed by clicking the button below. ":"Ai \u0111\u00f3 \u0111\u00e3 y\u00eau c\u1ea7u \u0111\u1eb7t l\u1ea1i m\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n tr\u00ean __\"%s\"__. N\u1ebfu b\u1ea1n nh\u1edb \u0111\u00e3 th\u1ef1c hi\u1ec7n y\u00eau c\u1ea7u \u0111\u00f3, vui l\u00f2ng ti\u1ebfn h\u00e0nh b\u1eb1ng c\u00e1ch nh\u1ea5p v\u00e0o n\u00fat b\u00ean d\u01b0\u1edbi. ","Receipt — %s":"Bi\u00ean lai — %s","Unable to find a module having the identifier\/namespace \"%s\"":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y m\u1ed9t m\u00f4-\u0111un c\u00f3 m\u00e3 \u0111\u1ecbnh danh\/t\u00ean mi\u1ec1n \"%s\"","What is the CRUD single resource name ? [Q] to quit.":"T\u00ean t\u00e0i nguy\u00ean \u0111\u01a1n CRUD l\u00e0 g\u00ec ? [Q] \u0111\u1ec3 tho\u00e1t.","Which table name should be used ? [Q] to quit.":"S\u1eed d\u1ee5ng b\u00e0n n\u00e0o ? [Q] \u0111\u1ec3 tho\u00e1t.","If your CRUD resource has a relation, mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"N\u1ebfu t\u00e0i nguy\u00ean CRUD c\u1ee7a b\u1ea1n c\u00f3 m\u1ed1i quan h\u1ec7, h\u00e3y \u0111\u1ec1 c\u1eadp \u0111\u1ebfn n\u00f3 nh\u01b0 sau \"foreign_table, foreign_key, local_key\" ? [S] b\u1ecf qua, [Q] tho\u00e1t.","Add a new relation ? Mention it as follow \"foreign_table, foreign_key, local_key\" ? [S] to skip, [Q] to quit.":"Th\u00eam m\u1ed9t m\u1ed1i quan h\u1ec7 m\u1edbi? \u0110\u1ec1 c\u1eadp \u0111\u1ebfn n\u00f3 nh\u01b0 sau \"foreign_table, foreign_key, local_key\" ? [S] b\u1ecf qua, [Q] tho\u00e1t.","Not enough parameters provided for the relation.":"Kh\u00f4ng c\u00f3 tham s\u1ed1 cung c\u1ea5p cho quan h\u1ec7 n\u00e0y.","The CRUD resource \"%s\" for the module \"%s\" has been generated at \"%s\"":"T\u00e0i nguy\u00ean CRUD \"%s\" cho ph\u00e2n h\u1ec7 \"%s\" \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o ra t\u1ea1i \"%s\"","The CRUD resource \"%s\" has been generated at %s":"T\u00e0i nguy\u00ean CRUD \"%s\" \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o ra t\u1ea1i %s","An unexpected error has occurred.":"L\u1ed7i x\u1ea3y ra.","Localization for %s extracted to %s":"N\u1ed9i \u0111\u1ecba h\u00f3a cho %s tr\u00edch xu\u1ea5t \u0111\u1ebfn %s","Unable to find the requested module.":"Kh\u00f4ng t\u00ecm th\u1ea5y ph\u00e2n h\u1ec7.","Version":"Phi\u00ean b\u1ea3n","Path":"\u0110\u01b0\u1eddng d\u1eabn","Index":"Ch\u1ec9 s\u1ed1","Entry Class":"M\u1ee5c l\u1edbp","Routes":"Routes","Api":"Api","Controllers":"Controllers","Views":"Views","Attribute":"Tr\u01b0\u1eddng m\u1edf r\u1ed9ng","Namespace":"Namespace","Author":"T\u00e1c gi\u1ea3","The product barcodes has been refreshed successfully.":"M\u00e3 v\u1ea1ch s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c l\u00e0m m\u1edbi th\u00e0nh c\u00f4ng.","What is the store name ? [Q] to quit.":"T\u00ean c\u1eeda h\u00e0ng l\u00e0 g\u00ec ? [Q] tho\u00e1t.","Please provide at least 6 characters for store name.":"T\u00ean c\u1eeda h\u00e0ng \u00edt nh\u1ea5t 6 k\u00fd t\u1ef1.","What is the administrator password ? [Q] to quit.":"M\u1eadt kh\u1ea9u administrator ? [Q] tho\u00e1t.","Please provide at least 6 characters for the administrator password.":"M\u1eadt kh\u1ea9u administrator ch\u1ee9a \u00edt nh\u1ea5t 6 k\u00fd t\u1ef1.","What is the administrator email ? [Q] to quit.":"\u0110i\u1ec1n email administrator ? [Q] tho\u00e1t.","Please provide a valid email for the administrator.":"\u0110i\u1ec1n email h\u1ee3p l\u1ec7 cho administrator.","What is the administrator username ? [Q] to quit.":"T\u00ean administrator ? [Q] tho\u00e1t.","Please provide at least 5 characters for the administrator username.":"T\u00ean administrator c\u00f3 \u00edt nh\u1ea5t 5 k\u00fd t\u1ef1.","Downloading latest dev build...":"Downloading latest dev build...","Reset project to HEAD...":"Reset project to HEAD...","Coupons List":"Danh s\u00e1ch phi\u1ebfu gi\u1ea3m gi\u00e1","Display all coupons.":"Hi\u1ec7n t\u1ea5t c\u1ea3 phi\u1ebfu gi\u1ea3m gi\u00e1.","No coupons has been registered":"Kh\u00f4ng c\u00f3 phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new coupon":"Th\u00eam m\u1edbi phi\u1ebfu gi\u1ea3m gi\u00e1","Create a new coupon":"T\u1ea1o m\u1edbi phi\u1ebfu gi\u1ea3m gi\u00e1","Register a new coupon and save it.":"\u0110\u0103ng k\u00fd m\u1edbi phi\u1ebfu gi\u1ea3m gi\u00e1.","Edit coupon":"S\u1eeda phi\u1ebfu gi\u1ea3m gi\u00e1","Modify Coupon.":"C\u1eadp nh\u1eadt phi\u1ebfu gi\u1ea3m gi\u00e1.","Return to Coupons":"Quay l\u1ea1i phi\u1ebfu gi\u1ea3m gi\u00e1","Might be used while printing the coupon.":"C\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong khi in phi\u1ebfu gi\u1ea3m gi\u00e1.","Percentage Discount":"Ph\u1ea7n tr\u0103m chi\u1ebft kh\u1ea5u","Flat Discount":"S\u1ed1 ti\u1ec1n chi\u1ebft kh\u1ea5u","Define which type of discount apply to the current coupon.":"X\u00e1c \u0111\u1ecbnh lo\u1ea1i chi\u1ebft kh\u1ea5u cho phi\u1ebfu gi\u1ea3m gi\u00e1.","Discount Value":"Ti\u1ec1n chi\u1ebft kh\u1ea5u","Define the percentage or flat value.":"X\u00e1c \u0111\u1ecbnh ph\u1ea7n tr\u0103m ho\u1eb7c s\u1ed1 ti\u1ec1n.","Valid Until":"C\u00f3 gi\u00e1 tr\u1ecb \u0111\u1ebfn","Minimum Cart Value":"Gi\u00e1 tr\u1ecb gi\u1ecf h\u00e0ng t\u1ed1i thi\u1ec3u","What is the minimum value of the cart to make this coupon eligible.":"Gi\u00e1 tr\u1ecb t\u1ed1i thi\u1ec3u c\u1ee7a gi\u1ecf h\u00e0ng l\u00e0 g\u00ec \u0111\u1ec3 l\u00e0m cho phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0y \u0111\u1ee7 \u0111i\u1ec1u ki\u1ec7n.","Maximum Cart Value":"Gi\u00e1 tr\u1ecb gi\u1ecf h\u00e0ng t\u1ed1i \u0111a","Valid Hours Start":"Gi\u1edd h\u1ee3p l\u1ec7 t\u1eeb","Define form which hour during the day the coupons is valid.":"Quy \u0111\u1ecbnh bi\u1ec3u m\u1eabu n\u00e0o trong ng\u00e0y phi\u1ebfu gi\u1ea3m gi\u00e1 h\u1ee3p l\u1ec7.","Valid Hours End":"Gi\u1edd k\u1ebft th\u00fac","Define to which hour during the day the coupons end stop valid.":"Quy \u0111\u1ecbnh gi\u1edd n\u00e0o trong ng\u00e0y phi\u1ebfu gi\u1ea3m gi\u00e1 k\u1ebft th\u00fac.","Limit Usage":"Gi\u1edbi h\u1ea1n s\u1eed d\u1ee5ng","Define how many time a coupons can be redeemed.":"Quy \u0111\u1ecbnh s\u1ed1 l\u1ea7n phi\u1ebfu gi\u1ea3m gi\u00e1 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c \u0111\u1ed5i.","Select Products":"Ch\u1ecdn s\u1ea3n ph\u1ea9m","The following products will be required to be present on the cart, in order for this coupon to be valid.":"C\u00e1c s\u1ea3n ph\u1ea9m sau \u0111\u00e2y s\u1ebd \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u ph\u1ea3i c\u00f3 m\u1eb7t tr\u00ean gi\u1ecf h\u00e0ng, \u0111\u1ec3 phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0y c\u00f3 gi\u00e1 tr\u1ecb.","Select Categories":"Ch\u1ecdn nh\u00f3m","The products assigned to one of these categories should be on the cart, in order for this coupon to be valid.":"C\u00e1c s\u1ea3n ph\u1ea9m \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh cho m\u1ed9t trong c\u00e1c danh m\u1ee5c n\u00e0y ph\u1ea3i c\u00f3 tr\u00ean gi\u1ecf h\u00e0ng, \u0111\u1ec3 phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0y c\u00f3 gi\u00e1 tr\u1ecb.","Created At":"\u0110\u01b0\u1ee3c t\u1ea1o b\u1edfi","Undefined":"Kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Delete a licence":"X\u00f3a gi\u1ea5y ph\u00e9p","Customer Coupons List":"Danh s\u00e1ch phi\u1ebfu gi\u1ea3m gi\u00e1 c\u1ee7a kh\u00e1ch h\u00e0ng","Display all customer coupons.":"Hi\u1ec7n to\u00e0n b\u1ed9 phi\u1ebfu gi\u1ea3m gi\u00e1 c\u1ee7a kh\u00e1ch h\u00e0ng.","No customer coupons has been registered":"Kh\u00f4ng c\u00f3 phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0o c\u1ee7a kh\u00e1ch h\u00e0ng \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new customer coupon":"Th\u00eam m\u1edbi phi\u1ebfu gi\u1ea3m gi\u00e1 cho kh\u00e1ch h\u00e0ng","Create a new customer coupon":"T\u1ea1o m\u1edbi phi\u1ebfu gi\u1ea3m gi\u00e1 cho kh\u00e1ch h\u00e0ng","Register a new customer coupon and save it.":"\u0110\u0103ng k\u00fd phi\u1ebfu gi\u1ea3m gi\u00e1 cho kh\u00e1ch h\u00e0ng.","Edit customer coupon":"S\u1eeda phi\u1ebfu gi\u1ea3m gi\u00e1","Modify Customer Coupon.":"C\u1eadp nh\u1eadt phi\u1ebfu gi\u1ea3m gi\u00e1.","Return to Customer Coupons":"Quay l\u1ea1i phi\u1ebfu gi\u1ea3m gi\u00e1","Id":"Id","Limit":"Gi\u1edbi h\u1ea1n","Created_at":"T\u1ea1o b\u1edfi","Updated_at":"S\u1eeda b\u1edfi","Code":"Code","Customers List":"Danh s\u00e1ch kh\u00e1ch h\u00e0ng","Display all customers.":"Hi\u1ec7n t\u1ea5t c\u1ea3 kh\u00e1ch h\u00e0ng.","No customers has been registered":"Ch\u01b0a c\u00f3 kh\u00e1ch h\u00e0ng n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new customer":"Th\u00eam kh\u00e1ch h\u00e0ng","Create a new customer":"T\u1ea1o m\u1edbi kh\u00e1ch h\u00e0ng","Register a new customer and save it.":"\u0110\u0103ng k\u00fd m\u1edbi kh\u00e1ch h\u00e0ng.","Edit customer":"S\u1eeda kh\u00e1ch h\u00e0ng","Modify Customer.":"C\u1eadp nh\u1eadt kh\u00e1ch h\u00e0ng.","Return to Customers":"Quay l\u1ea1i kh\u00e1ch h\u00e0ng","Provide a unique name for the customer.":"T\u00ean kh\u00e1ch h\u00e0ng.","Group":"Nh\u00f3m","Assign the customer to a group":"G\u00e1n kh\u00e1ch h\u00e0ng v\u00e0o nh\u00f3m","Phone Number":"\u0110i\u1ec7n tho\u1ea1i","Provide the customer phone number":"Nh\u1eadp \u0111i\u1ec7n tho\u1ea1i kh\u00e1ch h\u00e0ng","PO Box":"H\u00f2m th\u01b0","Provide the customer PO.Box":"Nh\u1eadp \u0111\u1ecba ch\u1ec9 h\u00f2m th\u01b0","Not Defined":"Kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Male":"\u0110\u00e0n \u00f4ng","Female":"\u0110\u00e0n b\u00e0","Gender":"Gi\u1edbi t\u00ednh","Billing Address":"\u0110\u1ecba ch\u1ec9 thanh to\u00e1n","Billing phone number.":"S\u1ed1 \u0111i\u1ec7n tho\u1ea1i.","Address 1":"\u0110\u1ecba ch\u1ec9 1","Billing First Address.":"\u0110\u1ecba ch\u1ec9 thanh to\u00e1n 1.","Address 2":"\u0110\u1ecba ch\u1ec9 thanh to\u00e1n 2","Billing Second Address.":".","Country":"Qu\u1ed1c gia","Billing Country.":"Qu\u1ed1c gia.","Postal Address":"\u0110\u1ecba ch\u1ec9 h\u00f2m th\u01b0","Company":"C\u00f4ng ty","Shipping Address":"\u0110\u1ecba ch\u1ec9 ng\u01b0\u1eddi chuy\u1ec3n h\u00e0ng","Shipping phone number.":"\u0110i\u1ec7n tho\u1ea1i ng\u01b0\u1eddi chuy\u1ec3n h\u00e0ng.","Shipping First Address.":"\u0110\u1ecba ch\u1ec9 1 ng\u01b0\u1eddi chuy\u1ec3n h\u00e0ng.","Shipping Second Address.":".","Shipping Country.":"Qu\u1ed1c gia ng\u01b0\u1eddi chuy\u1ec3n h\u00e0ng.","Account Credit":"T\u00edn d\u1ee5ng","Owed Amount":"S\u1ed1 ti\u1ec1n n\u1ee3","Purchase Amount":"Ti\u1ec1n mua h\u00e0ng","Rewards":"Th\u01b0\u1edfng","Delete a customers":"X\u00f3a kh\u00e1ch h\u00e0ng","Delete Selected Customers":"X\u00f3a kh\u00e1ch h\u00e0ng \u0111\u00e3 ch\u1ecdn","Customer Groups List":"Danh s\u00e1ch nh\u00f3m kh\u00e1ch h\u00e0ng","Display all Customers Groups.":"Hi\u1ec7n t\u1ea5t c\u1ea3 nh\u00f3m kh\u00e1ch.","No Customers Groups has been registered":"Ch\u01b0a c\u00f3 nh\u00f3m kh\u00e1ch n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new Customers Group":"Th\u00eam m\u1edbi nh\u00f3m kh\u00e1ch","Create a new Customers Group":"T\u1ea1o m\u1edbi nh\u00f3m kh\u00e1ch","Register a new Customers Group and save it.":"\u0110\u0103ng k\u00fd m\u1edbi nh\u00f3m kh\u00e1ch.","Edit Customers Group":"S\u1eeda nh\u00f3m kh\u00e1ch","Modify Customers group.":"C\u1eadp nh\u1eadt nh\u00f3m kh\u00e1ch.","Return to Customers Groups":"Quay l\u1ea1i nh\u00f3m kh\u00e1ch","Reward System":"H\u1ec7 th\u1ed1ng th\u01b0\u1edfng","Select which Reward system applies to the group":"Ch\u1ecdn h\u1ec7 th\u1ed1ng Ph\u1ea7n th\u01b0\u1edfng n\u00e0o \u00e1p d\u1ee5ng cho nh\u00f3m","Minimum Credit Amount":"S\u1ed1 ti\u1ec1n t\u00edn d\u1ee5ng t\u1ed1i thi\u1ec3u","A brief description about what this group is about":"M\u1ed9t m\u00f4 t\u1ea3 ng\u1eafn g\u1ecdn v\u1ec1 nh\u00f3m n\u00e0y","Created On":"T\u1ea1o tr\u00ean","Customer Orders List":"Danh s\u00e1ch \u0111\u01a1n \u0111\u1eb7t h\u00e0ng c\u1ee7a kh\u00e1ch h\u00e0ng","Display all customer orders.":"Hi\u1ec7n t\u1ea5t c\u1ea3 \u0111\u01a1n c\u1ee7a kh\u00e1ch.","No customer orders has been registered":"Kh\u00f4ng c\u00f3 kh\u00e1ch n\u00e0o \u0111\u0103ng k\u00fd","Add a new customer order":"Th\u00eam m\u1edbi \u0111\u01a1n cho kh\u00e1ch","Create a new customer order":"T\u1ea1o m\u1edbi \u0111\u01a1n cho kh\u00e1ch","Register a new customer order and save it.":"\u0110\u0103ng k\u00fd \u0111\u01a1n cho kh\u00e1ch.","Edit customer order":"S\u1eeda \u0111\u01a1n","Modify Customer Order.":"C\u1eadp nh\u1eadt \u0111\u01a1n.","Return to Customer Orders":"Tr\u1ea3 \u0111\u01a1n","Created at":"T\u1ea1o b\u1edfi","Customer Id":"M\u00e3 kh\u00e1ch","Discount Percentage":"T\u1ef7 l\u1ec7 chi\u1ebft kh\u1ea5u(%)","Discount Type":"Lo\u1ea1i chi\u1ebft kh\u1ea5u","Final Payment Date":"Ng\u00e0y cu\u1ed1i c\u00f9ng thanh to\u00e1n","Process Status":"Tr\u1ea1ng th\u00e1i","Shipping Rate":"Gi\u00e1 c\u01b0\u1edbc v\u1eadn chuy\u1ec3n","Shipping Type":"Lo\u1ea1i v\u1eadn chuy\u1ec3n","Title":"Ti\u00eau \u0111\u1ec1","Total installments":"T\u1ed5ng s\u1ed1 \u0111\u1ee3t","Updated at":"C\u1eadp nh\u1eadt b\u1edfi","Uuid":"Uuid","Voidance Reason":"L\u00fd do","Customer Rewards List":"Danh s\u00e1ch ph\u1ea7n th\u01b0\u1edfng c\u1ee7a kh\u00e1ch","Display all customer rewards.":"Hi\u1ec7n t\u1ea5t c\u1ea3 ph\u1ea7n th\u01b0\u1edfng.","No customer rewards has been registered":"Ch\u01b0a c\u00f3 ph\u1ea7n th\u01b0\u1edfng n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new customer reward":"Th\u00eam m\u1edbi ph\u1ea7n th\u01b0\u1edfng","Create a new customer reward":"T\u1ea1o m\u1edbi ph\u1ea7n th\u01b0\u1edfng","Register a new customer reward and save it.":"\u0110\u0103ng k\u00fd ph\u1ea7n th\u01b0\u1edfng.","Edit customer reward":"S\u1eeda ph\u1ea7n th\u01b0\u1edfng","Modify Customer Reward.":"C\u1eadp nh\u1eadt ph\u1ea7n th\u01b0\u1edfng.","Return to Customer Rewards":"Tr\u1ea3 th\u01b0\u1edfng cho kh\u00e1ch","Points":"\u0110i\u1ec3m s\u1ed1","Target":"M\u1ee5c ti\u00eau","Reward Name":"T\u00ean ph\u1ea7n th\u01b0\u1edfng","Last Update":"C\u1eadp nh\u1eadt cu\u1ed1i","Active":"K\u00edch ho\u1ea1t","Users Group":"Nh\u00f3m ng\u01b0\u1eddi d\u00f9ng","None":"Kh\u00f4ng","Recurring":"L\u1eb7p l\u1ea1i","Start of Month":"\u0110\u1ea7u th\u00e1ng","Mid of Month":"Gi\u1eefa th\u00e1ng","End of Month":"Cu\u1ed1i th\u00e1ng","X days Before Month Ends":"S\u1ed1 ng\u00e0y tr\u01b0\u1edbc khi k\u1ebft th\u00fac th\u00e1ng","X days After Month Starts":"S\u1ed1 ng\u00e0y \u0111\u1ebfn \u0111\u1ea7u th\u00e1ng kh\u00e1c","Occurrence":"X\u1ea3y ra","Occurrence Value":"Gi\u00e1 tr\u1ecb chi ph\u00ed x\u1ea3y ra","Must be used in case of X days after month starts and X days before month ends.":"Ph\u1ea3i \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong tr\u01b0\u1eddng h\u1ee3p s\u1ed1 ng\u00e0y t\u00ednh t\u1eeb \u0111\u1ea7u th\u00e1ng v\u00e0 s\u1ed1 ng\u00e0y \u0111\u1ebfn cu\u1ed1i th\u00e1ng.","Category":"Nh\u00f3m h\u00e0ng","Month Starts":"Th\u00e1ng b\u1eaft \u0111\u1ea7u","Month Middle":"Gi\u1eefa th\u00e1ng","Month Ends":"Th\u00e1ng k\u1ebft th\u00fac","X Days Before Month Ends":"S\u1ed1 ng\u00e0y sau khi th\u00e1ng k\u1ebft th\u00fac","Updated At":"C\u1eadp nh\u1eadt b\u1edfi","Hold Orders List":"Danh s\u00e1ch \u0111\u01a1n c\u1ea5t gi\u1eef","Display all hold orders.":"Hi\u1ec7n t\u1ea5t c\u1ea3 c\u00e1c \u0111\u01a1n c\u1ea5t gi\u1eef.","No hold orders has been registered":"Kh\u00f4ng c\u00f3 \u0111\u01a1n n\u00e0o \u0111\u01b0\u1ee3c c\u1ea5t gi\u1eef","Add a new hold order":"Th\u00eam \u0111\u01a1n c\u1ea5t gi\u1eef","Create a new hold order":"T\u1ea1o m\u1edbi \u0111\u01a1n c\u1ea5t gi\u1eef","Register a new hold order and save it.":"\u0110\u0103ng k\u00fd \u0111\u01a1n c\u1ea5t gi\u1eef.","Edit hold order":"S\u1eeda \u0111\u01a1n c\u1ea5t gi\u1eef","Modify Hold Order.":"C\u1eadp nh\u1eadt \u0111\u01a1n c\u1ea5t gi\u1eef.","Return to Hold Orders":"Quay l\u1ea1i \u0111\u01a1n c\u1ea5t gi\u1eef","Orders List":"Danh s\u00e1ch \u0111\u01a1n","Display all orders.":"Hi\u1ec7n t\u1ea5t c\u1ea3 c\u00e1c \u0111\u01a1n.","No orders has been registered":"Kh\u00f4ng c\u00f3 \u0111\u01a1n n\u00e0o","Add a new order":"Th\u00eam m\u1edbi \u0111\u01a1n","Create a new order":"T\u1ea1o m\u1edbi \u0111\u01a1n","Register a new order and save it.":"\u0110\u0103ng k\u00fd \u0111\u01a1n.","Edit order":"S\u1eeda \u0111\u01a1n","Modify Order.":"C\u1eadp nh\u1eadt \u0111\u01a1n.","Return to Orders":"Quay l\u1ea1i \u0111\u01a1n","Discount Rate":"T\u1ec9 l\u1ec7 chi\u1ebft kh\u1ea5u","The order and the attached products has been deleted.":"\u0110\u01a1n \u0111\u1eb7t h\u00e0ng v\u00e0 c\u00e1c s\u1ea3n ph\u1ea9m \u0111\u00ednh k\u00e8m \u0111\u00e3 b\u1ecb x\u00f3a.","Invoice":"H\u00f3a \u0111\u01a1n","Receipt":"Bi\u00ean lai","Order Instalments List":"Danh s\u00e1ch \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p","Display all Order Instalments.":"Hi\u1ec7n t\u1ea5t c\u1ea3 c\u00e1c \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p.","No Order Instalment has been registered":"Kh\u00f4ng c\u00f3 \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new Order Instalment":"Th\u00eam \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p","Create a new Order Instalment":"T\u1ea1o m\u1edbi \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p","Register a new Order Instalment and save it.":"\u0110\u0103ng k\u00fd \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p.","Edit Order Instalment":"S\u1eeda \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p","Modify Order Instalment.":"C\u1eadp nh\u1eadt \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p.","Return to Order Instalment":"Quay l\u1ea1i \u0111\u01a1n h\u00e0ng tr\u1ea3 g\u00f3p","Order Id":"M\u00e3 \u0111\u01a1n","Payment Types List":"Danh s\u00e1ch ki\u1ec3u thanh to\u00e1n","Display all payment types.":"Hi\u1ec7n t\u1ea5t c\u1ea3 c\u00e1c ki\u1ec3u thanh to\u00e1n.","No payment types has been registered":"Kh\u00f4ng c\u00f3 ki\u1ec3u thanh to\u00e1n n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new payment type":"Th\u00eam m\u1edbi ki\u1ec3u thanh to\u00e1n","Create a new payment type":"T\u1ea1o m\u1edbi ki\u1ec3u thanh to\u00e1n","Register a new payment type and save it.":"\u0110\u0103ng k\u00fd ki\u1ec3u thanh to\u00e1n.","Edit payment type":"S\u1eeda ki\u1ec3u thanh to\u00e1n","Modify Payment Type.":"C\u1eadp nh\u1eadt ki\u1ec3u thanh to\u00e1n.","Return to Payment Types":"Quay l\u1ea1i ki\u1ec3u thanh to\u00e1n","Label":"Nh\u00e3n","Provide a label to the resource.":"Cung c\u1ea5p nh\u00e3n.","Identifier":"\u0110\u1ecbnh danh","A payment type having the same identifier already exists.":"M\u1ed9t ki\u1ec3u thanh to\u00e1n c\u00f3 c\u00f9ng \u0111\u1ecbnh danh \u0111\u00e3 t\u1ed3n t\u1ea1i.","Unable to delete a read-only payments type.":"Kh\u00f4ng th\u1ec3 x\u00f3a ki\u1ec3u thanh to\u00e1n \u0111ang \u1edf ch\u1ebf \u0111\u1ed9 ch\u1ec9 \u0111\u1ecdc.","Readonly":"Ch\u1ec9 \u0111\u1ecdc","Procurements List":"Danh s\u00e1ch mua h\u00e0ng","Display all procurements.":"Hi\u1ec7n t\u1ea5t c\u1ea3 danh s\u00e1ch mua h\u00e0ng.","No procurements has been registered":"Kh\u00f4ng c\u00f3 danh s\u00e1ch mua h\u00e0ng \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new procurement":"Th\u00eam m\u1edbi mua h\u00e0ng","Create a new procurement":"T\u1ea1o m\u1edbi mua h\u00e0ng","Register a new procurement and save it.":"\u0110\u0103ng k\u00fd mua h\u00e0ng.","Edit procurement":"S\u1eeda mua h\u00e0ng","Modify Procurement.":"C\u1eadp nh\u1eadt mua h\u00e0ng.","Return to Procurements":"Quay l\u1ea1i mua h\u00e0ng","Provider Id":"M\u00e3 nh\u00e0 cung c\u1ea5p","Total Items":"S\u1ed1 m\u1ee5c","Provider":"Nh\u00e0 cung c\u1ea5p","Stocked":"Th\u1ea3","Procurement Products List":"Danh s\u00e1ch h\u00e0ng mua","Display all procurement products.":"Hi\u1ec7n t\u1ea5t c\u1ea3 h\u00e0ng mua.","No procurement products has been registered":"Ch\u01b0a c\u00f3 h\u00e0ng mua n\u00e0o","Add a new procurement product":"Th\u00eam m\u1edbi h\u00e0ng mua","Create a new procurement product":"T\u1ea1o m\u1edbi h\u00e0ng mua","Register a new procurement product and save it.":"\u0110\u0103ng k\u00fd m\u1edbi h\u00e0ng mua.","Edit procurement product":"S\u1eeda h\u00e0ng mua","Modify Procurement Product.":"C\u1eadp nh\u1eadt h\u00e0ng mua.","Return to Procurement Products":"Quay l\u1ea1i h\u00e0ng mua","Define what is the expiration date of the product.":"Ng\u00e0y h\u1ebft h\u1ea1n.","On":"Tr\u00ean","Category Products List":"Nh\u00f3m s\u1ea3n ph\u1ea9m","Display all category products.":"Hi\u1ec7n t\u1ea5t c\u1ea3 nh\u00f3m s\u1ea3n ph\u1ea9m.","No category products has been registered":"Ch\u01b0a c\u00f3 nh\u00f3m s\u1ea3n ph\u1ea9m n\u00e0o \u0111\u0103ng k\u00fd","Add a new category product":"Th\u00eam nh\u00f3m s\u1ea3n ph\u1ea9m","Create a new category product":"T\u1ea1o m\u1edbi nh\u00f3m s\u1ea3n ph\u1ea9m","Register a new category product and save it.":"\u0110\u0103ng k\u00fd nh\u00f3m s\u1ea3n ph\u1ea9m.","Edit category product":"S\u1eeda nh\u00f3m s\u1ea3n ph\u1ea9m","Modify Category Product.":"C\u1eadp nh\u1eadt nh\u00f3m s\u1ea3n ph\u1ea9m.","Return to Category Products":"Quay l\u1ea1i nh\u00f3m s\u1ea3n ph\u1ea9m","No Parent":"Kh\u00f4ng c\u00f3 nh\u00f3m cha","Preview":"Xem","Provide a preview url to the category.":"\u0110\u01b0\u1eddng d\u1eabn \u0111\u1ec3 xem nh\u00f3m.","Displays On POS":"Hi\u1ec7n tr\u00ean m\u00e0n h\u00ecnh b\u00e1n h\u00e0ng","Parent":"Cha","If this category should be a child category of an existing category":"N\u1ebfu nh\u00f3m n\u00e0y ph\u1ea3i l\u00e0 nh\u00f3m con c\u1ee7a nh\u00f3m hi\u1ec7n c\u00f3","Total Products":"T\u1ed5ng s\u1ed1 s\u1ea3n ph\u1ea9m","Products List":"Danh s\u00e1ch s\u1ea3n ph\u1ea9m","Display all products.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 s\u1ea3n ph\u1ea9m.","No products has been registered":"Ch\u01b0a c\u00f3 s\u1ea3n ph\u1ea9m n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new product":"Th\u00eam m\u1edbi s\u1ea3n ph\u1ea9m","Create a new product":"T\u1ea1o m\u1edbi s\u1ea3n ph\u1ea9m","Register a new product and save it.":"\u0110\u0103ng k\u00fd m\u1edbi s\u1ea3n ph\u1ea9m.","Edit product":"S\u1eeda s\u1ea3n ph\u1ea9m","Modify Product.":"C\u1eadp nh\u1eadt s\u1ea3n ph\u1ea9m.","Return to Products":"Quay l\u1ea1i s\u1ea3n ph\u1ea9m","Assigned Unit":"G\u00e1n \u0111\u01a1n v\u1ecb t\u00ednh","The assigned unit for sale":"\u0110\u01a1n v\u1ecb t\u00ednh \u0111\u01b0\u1ee3c ph\u00e9p b\u00e1n","Define the regular selling price.":"Gi\u00e1 b\u00e1n.","Define the wholesale price.":"Gi\u00e1 b\u00e1n s\u1ec9.","Preview Url":"\u0110\u01b0\u1eddng d\u1eabn \u0111\u1ec3 xem","Provide the preview of the current unit.":"Cung c\u1ea5p b\u1ea3n xem tr\u01b0\u1edbc c\u1ee7a \u0111\u01a1n v\u1ecb hi\u1ec7n t\u1ea1i.","Identification":"X\u00e1c \u0111\u1ecbnh","Define the barcode value. Focus the cursor here before scanning the product.":"X\u00e1c \u0111\u1ecbnh m\u00e3 v\u1ea1ch, k\u00edch con tr\u1ecf \u0111\u1ec3 quy\u00e9t s\u1ea3n ph\u1ea9m.","Define the barcode type scanned.":"X\u00e1c \u0111\u1ecbnh lo\u1ea1i m\u00e3 v\u1ea1ch.","EAN 8":"EAN 8","EAN 13":"EAN 13","Barcode Type":"Lo\u1ea1i m\u00e3 v\u1ea1ch","Select to which category the item is assigned.":"Ch\u1ecdn nh\u00f3m m\u00e0 h\u00e0ng h\u00f3a \u0111\u01b0\u1ee3c g\u00e1n.","Materialized Product":"H\u00e0ng h\u00f3a","Dematerialized Product":"D\u1ecbch v\u1ee5","Define the product type. Applies to all variations.":"X\u00e1c \u0111\u1ecbnh lo\u1ea1i s\u1ea3n ph\u1ea9m.","Product Type":"Lo\u1ea1i s\u1ea3n ph\u1ea9m","Define a unique SKU value for the product.":"Quy \u0111\u1ecbnh m\u00e3 s\u1ea3n ph\u1ea9m.","On Sale":"\u0110\u1ec3 b\u00e1n","Hidden":"\u1ea8n","Define whether the product is available for sale.":"Quy \u0111\u1ecbnh s\u1ea3n ph\u1ea9m c\u00f3 s\u1eb5n \u0111\u1ec3 b\u00e1n hay kh\u00f4ng.","Enable the stock management on the product. Will not work for service or uncountable products.":"Cho ph\u00e9p qu\u1ea3n l\u00fd c\u1ed5 phi\u1ebfu tr\u00ean s\u1ea3n ph\u1ea9m. S\u1ebd kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng cho d\u1ecbch v\u1ee5 ho\u1eb7c c\u00e1c s\u1ea3n ph\u1ea9m kh\u00f4ng th\u1ec3 \u0111\u1ebfm \u0111\u01b0\u1ee3c.","Stock Management Enabled":"\u0110\u01b0\u1ee3c k\u00edch ho\u1ea1t qu\u1ea3n l\u00fd kho","Units":"\u0110\u01a1n v\u1ecb t\u00ednh","Accurate Tracking":"Theo d\u00f5i ch\u00ednh x\u00e1c","What unit group applies to the actual item. This group will apply during the procurement.":"Nh\u00f3m \u0111\u01a1n v\u1ecb n\u00e0o \u00e1p d\u1ee5ng cho b\u00e1n h\u00e0ng th\u1ef1c t\u1ebf. Nh\u00f3m n\u00e0y s\u1ebd \u00e1p d\u1ee5ng trong qu\u00e1 tr\u00ecnh mua s\u1eafm.","Unit Group":"Nh\u00f3m \u0111\u01a1n v\u1ecb","Determine the unit for sale.":"Quy \u0111\u1ecbnh b\u00e1n h\u00e0ng b\u1eb1ng \u0111\u01a1n v\u1ecb t\u00ednh n\u00e0o.","Selling Unit":"\u0110\u01a1n v\u1ecb t\u00ednh b\u00e1n h\u00e0ng","Expiry":"H\u1ebft h\u1ea1n","Product Expires":"S\u1ea3n ph\u1ea9m h\u1ebft h\u1ea1n","Set to \"No\" expiration time will be ignored.":"C\u00e0i \u0111\u1eb7t \"No\" s\u1ea3n ph\u1ea9m kh\u00f4ng theo d\u00f5i th\u1eddi gian h\u1ebft h\u1ea1n.","Prevent Sales":"Kh\u00f4ng \u0111\u01b0\u1ee3c b\u00e1n","Allow Sales":"\u0110\u01b0\u1ee3c ph\u00e9p b\u00e1n","Determine the action taken while a product has expired.":"Quy \u0111\u1ecbnh c\u00e1ch th\u1ef1c hi\u1ec7n cho s\u1ea3n ph\u1ea9m h\u1ebft h\u1ea1n.","On Expiration":"Khi h\u1ebft h\u1ea1n","Select the tax group that applies to the product\/variation.":"Ch\u1ecdn nh\u00f3m thu\u1ebf \u00e1p d\u1ee5ng cho s\u1ea3n ph\u1ea9m\/bi\u1ebfn th\u1ec3(\u0111vt kh\u00e1c).","Tax Group":"Nh\u00f3m thu\u1ebf","Define what is the type of the tax.":"Quy \u0111\u1ecbnh lo\u1ea1i thu\u1ebf.","Images":"B\u1ed9 s\u01b0u t\u1eadp \u1ea3nh","Image":"\u1ea2nh","Choose an image to add on the product gallery":"Ch\u1ecdn \u1ea3nh \u0111\u1ec3 th\u00eam v\u00e0o b\u1ed9 s\u01b0u t\u1eadp \u1ea3nh c\u1ee7a s\u1ea3n ph\u1ea9m","Is Primary":"L\u00e0m \u1ea3nh ch\u00ednh","Define whether the image should be primary. If there are more than one primary image, one will be chosen for you.":"X\u00e1c \u0111\u1ecbnh \u0111\u00e2u l\u00e0 h\u00ecnh \u1ea3nh ch\u00ednh. N\u1ebfu c\u00f3 nhi\u1ec1u h\u01a1n m\u1ed9t h\u00ecnh \u1ea3nh ch\u00ednh, m\u1ed9t h\u00ecnh \u1ea3nh s\u1ebd \u0111\u01b0\u1ee3c ch\u1ecdn cho b\u1ea1n.","Sku":"M\u00e3 h\u00e0ng h\u00f3a","Materialized":"H\u00e0ng h\u00f3a","Dematerialized":"D\u1ecbch v\u1ee5","Available":"C\u00f3 s\u1eb5n","See Quantities":"Xem s\u1ed1 l\u01b0\u1ee3ng","See History":"Xem l\u1ecbch s\u1eed","Would you like to delete selected entries ?":"B\u1ea1n mu\u1ed1n x\u00f3a m\u1ee5c \u0111\u00e3 ch\u1ecdn ?","Product Histories":"L\u1ecbch s\u1eed h\u00e0ng h\u00f3a","Display all product histories.":"Hi\u1ec7n to\u00e0n b\u1ed9 l\u1ecbch s\u1eed h\u00e0ng h\u00f3a.","No product histories has been registered":"Kh\u00f4ng c\u00f3 h\u00e0ng h\u00f3a n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new product history":"Th\u00eam l\u1ecbch s\u1eed h\u00e0ng h\u00f3a","Create a new product history":"T\u1ea1o m\u1edbi l\u1ecbch s\u1eed h\u00e0ng h\u00f3a","Register a new product history and save it.":"\u0110\u0103ng k\u00fd l\u1ecbch s\u1eed h\u00e0ng h\u00f3a.","Edit product history":"S\u1eeda l\u1ecbch s\u1eed h\u00e0ng h\u00f3a","Modify Product History.":"C\u1eadp nh\u1eadt l\u1ecbch s\u1eed h\u00e0ng h\u00f3a.","Return to Product Histories":"Quay l\u1ea1i l\u1ecbch s\u1eed h\u00e0ng h\u00f3a","After Quantity":"Sau s\u1ed1 l\u01b0\u1ee3ng","Before Quantity":"Tr\u01b0\u1edbc s\u1ed1 l\u01b0\u1ee3ng","Operation Type":"Ki\u1ec3u ho\u1ea1t \u0111\u1ed9ng","Order id":"M\u00e3 \u0111\u01a1n","Procurement Id":"M\u00e3 mua h\u00e0ng","Procurement Product Id":"M\u00e3 h\u00e0ng mua","Product Id":"M\u00e3 h\u00e0ng h\u00f3a","Unit Id":"M\u00e3 \u0111vt","P. Quantity":"P. S\u1ed1 l\u01b0\u1ee3ng","N. Quantity":"N. S\u1ed1 l\u01b0\u1ee3ng","Defective":"L\u1ed7i","Deleted":"X\u00f3a","Removed":"G\u1ee1 b\u1ecf","Returned":"Tr\u1ea3 l\u1ea1i","Sold":"B\u00e1n","Added":"Th\u00eam","Incoming Transfer":"Chuy\u1ec3n \u0111\u1ebfn","Outgoing Transfer":"Chuy\u1ec3n \u0111i","Transfer Rejected":"T\u1eeb ch\u1ed1i chuy\u1ec3n","Transfer Canceled":"H\u1ee7y chuy\u1ec3n","Void Return":"Quay l\u1ea1i","Adjustment Return":"\u0110i\u1ec1u ch\u1ec9nh l\u1ea1i","Adjustment Sale":"\u0110i\u1ec1u ch\u1ec9nh b\u00e1n","Product Unit Quantities List":"Danh s\u00e1ch s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m","Display all product unit quantities.":"Hi\u1ec7n to\u00e0n b\u1ed9 s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m.","No product unit quantities has been registered":"Kh\u00f4ng c\u00f3 s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new product unit quantity":"Th\u00eam s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m","Create a new product unit quantity":"T\u1ea1o m\u1edbi s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m","Register a new product unit quantity and save it.":"\u0110\u0103ng k\u00fd s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m.","Edit product unit quantity":"S\u1eeda s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m","Modify Product Unit Quantity.":"C\u1eadp nh\u1eadt s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m.","Return to Product Unit Quantities":"Quay l\u1ea1i s\u1ed1 l\u01b0\u1ee3ng \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m","Product id":"M\u00e3 s\u1ea3n ph\u1ea9m","Providers List":"Danh s\u00e1ch nh\u00e0 cung c\u1ea5p","Display all providers.":"Hi\u1ec3n th\u1ecb to\u00e0n b\u1ed9 nh\u00e0 cung c\u1ea5p.","No providers has been registered":"Kh\u00f4ng c\u00f3 nh\u00e0 cung c\u1ea5p n\u00e0o \u0111\u01b0\u1ee3c t\u1ea1o","Add a new provider":"Th\u00eam nh\u00e0 cung c\u1ea5p","Create a new provider":"T\u1ea1o m\u1edbi nh\u00e0 cung c\u1ea5p","Register a new provider and save it.":"\u0110\u0103ng k\u00fd nh\u00e0 cung c\u1ea5p.","Edit provider":"S\u1eeda nh\u00e0 cung c\u1ea5p","Modify Provider.":"C\u1eadp nh\u1eadt nh\u00e0 cung c\u1ea5p.","Return to Providers":"Tr\u1ea3 l\u1ea1i nh\u00e0 cung c\u1ea5p","Provide the provider email. Might be used to send automated email.":"Cung c\u1ea5p email c\u1ee7a nh\u00e0 cung c\u1ea5p. C\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 g\u1eedi email t\u1ef1 \u0111\u1ed9ng h\u00f3a.","Contact phone number for the provider. Might be used to send automated SMS notifications.":"S\u1ed1 \u0111i\u1ec7n tho\u1ea1i li\u00ean h\u1ec7 c\u1ee7a nh\u00e0 cung c\u1ea5p. C\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 g\u1eedi th\u00f4ng b\u00e1o SMS t\u1ef1 \u0111\u1ed9ng.","First address of the provider.":"\u0110\u1ecba ch\u1ec9 1 nh\u00e0 cung c\u1ea5p.","Second address of the provider.":"\u0110\u1ecba ch\u1ec9 2 nh\u00e0 cung c\u1ea5p.","Further details about the provider":"Th\u00f4ng tin chi ti\u1ebft v\u1ec1 nh\u00e0 cung c\u1ea5p","Amount Due":"S\u1ed1 ti\u1ec1n \u0111\u1ebfn h\u1ea1n","Amount Paid":"S\u1ed1 ti\u1ec1n \u0111\u00e3 tr\u1ea3","See Procurements":"Xem mua s\u1eafm","Registers List":"Danh s\u00e1ch \u0111\u0103ng k\u00fd","Display all registers.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 danh s\u00e1ch \u0111\u0103ng k\u00fd.","No registers has been registered":"Kh\u00f4ng danh s\u00e1ch n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new register":"Th\u00eam s\u1ed5 \u0111\u0103ng k\u00fd m\u1edbi","Create a new register":"T\u1ea1o m\u1edbi s\u1ed5 \u0111\u0103ng k\u00fd","Register a new register and save it.":"\u0110\u0103ng k\u00fd s\u1ed5 \u0111\u0103ng k\u00fd m\u1edbi.","Edit register":"S\u1eeda \u0111\u0103ng k\u00fd","Modify Register.":"C\u1eadp nh\u1eadt \u0111\u0103ng k\u00fd.","Return to Registers":"Quay l\u1ea1i \u0111\u0103ng k\u00fd","Closed":"\u0110\u00f3ng","Define what is the status of the register.":"Quy \u0111\u1ecbnh tr\u1ea1ng th\u00e1i c\u1ee7a s\u1ed5 \u0111\u0103ng k\u00fd l\u00e0 g\u00ec.","Provide mode details about this cash register.":"Cung c\u1ea5p chi ti\u1ebft ch\u1ebf \u0111\u1ed9 v\u1ec1 m\u00e1y t\u00ednh ti\u1ec1n n\u00e0y.","Unable to delete a register that is currently in use":"Kh\u00f4ng th\u1ec3 x\u00f3a s\u1ed5 \u0111\u0103ng k\u00fd hi\u1ec7n \u0111ang \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng","Used By":"D\u00f9ng b\u1edfi","Register History List":"\u0110\u0103ng k\u00fd danh s\u00e1ch l\u1ecbch s\u1eed","Display all register histories.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 danh s\u00e1ch l\u1ecbch s\u1eed.","No register histories has been registered":"Kh\u00f4ng c\u00f3 danh s\u00e1ch l\u1ecbch s\u1eed n\u00e0o","Add a new register history":"Th\u00eam m\u1edbi danh s\u00e1ch l\u1ecbch s\u1eed","Create a new register history":"T\u1ea1o m\u1edbi danh s\u00e1ch l\u1ecbch s\u1eed","Register a new register history and save it.":"\u0110\u0103ng k\u00fd m\u1edbi ds l\u1ecbch s\u1eed.","Edit register history":"S\u1eeda ds l\u1ecbch s\u1eed","Modify Registerhistory.":"C\u1eadp nh\u1eadt ds l\u1ecbch s\u1eed.","Return to Register History":"Quay l\u1ea1i ds l\u1ecbch s\u1eed","Register Id":"M\u00e3 \u0111\u0103ng k\u00fd","Action":"H\u00e0nh \u0111\u1ed9ng","Register Name":"T\u00ean \u0111\u0103ng k\u00fd","Done At":"Th\u1ef1c hi\u1ec7n t\u1ea1i","Reward Systems List":"Danh s\u00e1ch ch\u01b0\u01a1ng tr\u00ecnh ph\u1ea7n th\u01b0\u1edfng","Display all reward systems.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 danh s\u00e1ch ch\u01b0\u01a1ng tr\u00ecnh ph\u1ea7n th\u01b0\u1edfng.","No reward systems has been registered":"Kh\u00f4ng ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new reward system":"Th\u00eam m\u1edbi ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng","Create a new reward system":"T\u1ea1o m\u1edbi ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng","Register a new reward system and save it.":"\u0110\u0103ng k\u00fd m\u1edbi ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng.","Edit reward system":"S\u1eeda ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng","Modify Reward System.":"C\u1eadp nh\u1eadt ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng.","Return to Reward Systems":"Quay l\u1ea1i ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng","From":"T\u1eeb","The interval start here.":"Th\u1eddi gian b\u1eaft \u0111\u1ea7u \u1edf \u0111\u00e2y.","To":"\u0110\u1ebfn","The interval ends here.":"Th\u1eddi gian k\u1ebft th\u00fac \u1edf \u0111\u00e2y.","Points earned.":"\u0110i\u1ec3m s\u1ed1 \u0111\u1ea1t \u0111\u01b0\u1ee3c.","Coupon":"Phi\u1ebfu gi\u1ea3m gi\u00e1","Decide which coupon you would apply to the system.":"Quy\u1ebft \u0111\u1ecbnh phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0o b\u1ea1n s\u1ebd \u00e1p d\u1ee5ng cho ch\u01b0\u01a1ng tr\u00ecnh.","This is the objective that the user should reach to trigger the reward.":"\u0110\u00e2y l\u00e0 m\u1ee5c ti\u00eau m\u00e0 ng\u01b0\u1eddi d\u00f9ng c\u1ea7n \u0111\u1ea1t \u0111\u01b0\u1ee3c \u0111\u1ec3 c\u00f3 \u0111\u01b0\u1ee3c ph\u1ea7n th\u01b0\u1edfng.","A short description about this system":"M\u00f4 t\u1ea3 ng\u1eafn v\u1ec1 ch\u01b0\u01a1ng tr\u00ecnh ph\u1ea7n th\u01b0\u1edfng","Would you like to delete this reward system ?":"B\u1ea1n mu\u1ed1n x\u00f3a ch\u01b0\u01a1ng tr\u00ecnh th\u01b0\u1edfng n\u00e0y ?","Delete Selected Rewards":"X\u00f3a ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 ch\u1ecdn","Would you like to delete selected rewards?":"B\u1ea1n mu\u1ed1n x\u00f3a ch\u01b0\u01a1ng tr\u00ecnh \u0111ang ch\u1ecdn?","Roles List":"Danh s\u00e1ch nh\u00f3m quy\u1ec1n","Display all roles.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 c\u00e1c nh\u00f3m quy\u1ec1n.","No role has been registered.":"Kh\u00f4ng nh\u00f3m quy\u1ec1n n\u00e0o \u0111\u01b0\u1ee3c t\u1ea1o.","Add a new role":"Th\u00eam nh\u00f3m quy\u1ec1n","Create a new role":"T\u1ea1o m\u1edbi nh\u00f3m quy\u1ec1n","Create a new role and save it.":"T\u1ea1o m\u1edbi v\u00e0 l\u01b0u nh\u00f3m quy\u1ec1n.","Edit role":"S\u1eeda nh\u00f3m quy\u1ec1n","Modify Role.":"C\u1eadp nh\u1eadt nh\u00f3m quy\u1ec1n.","Return to Roles":"Quay l\u1ea1i nh\u00f3m quy\u1ec1n","Provide a name to the role.":"T\u00ean nh\u00f3m quy\u1ec1n.","Should be a unique value with no spaces or special character":"Kh\u00f4ng d\u1ea5u, kh\u00f4ng kho\u1ea3ng c\u00e1ch, kh\u00f4ng k\u00fd t\u1ef1 \u0111\u1eb7c bi\u1ec7t","Provide more details about what this role is about.":"M\u00f4 t\u1ea3 chi ti\u1ebft nh\u00f3m quy\u1ec1n.","Unable to delete a system role.":"Kh\u00f4ng th\u1ec3 x\u00f3a nh\u00f3m quy\u1ec1n h\u1ec7 th\u1ed1ng.","You do not have enough permissions to perform this action.":"B\u1ea1n kh\u00f4ng c\u00f3 \u0111\u1ee7 quy\u1ec1n \u0111\u1ec3 th\u1ef1c hi\u1ec7n h\u00e0nh \u0111\u1ed9ng n\u00e0y.","Taxes List":"Danh s\u00e1ch thu\u1ebf","Display all taxes.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 m\u1ee9c thu\u1ebf.","No taxes has been registered":"Kh\u00f4ng c\u00f3 m\u1ee9c thu\u1ebf n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new tax":"Th\u00eam m\u1ee9c thu\u1ebf","Create a new tax":"T\u1ea1o m\u1edbi m\u1ee9c thu\u1ebf","Register a new tax and save it.":"\u0110\u0103ng k\u00fd m\u1ee9c thu\u1ebf.","Edit tax":"S\u1eeda thu\u1ebf","Modify Tax.":"C\u1eadp nh\u1eadt thu\u1ebf.","Return to Taxes":"Quay l\u1ea1i thu\u1ebf","Provide a name to the tax.":"T\u00ean m\u1ee9c thu\u1ebf.","Assign the tax to a tax group.":"G\u00e1n m\u1ee9c thu\u1ebf cho nh\u00f3m h\u00e0ng.","Rate":"T\u1ef7 l\u1ec7","Define the rate value for the tax.":"Quy \u0111\u1ecbnh t\u1ef7 l\u1ec7 thu\u1ebf.","Provide a description to the tax.":"Di\u1ec5n gi\u1ea3i thu\u1ebf.","Taxes Groups List":"Nh\u00f3m thu\u1ebf","Display all taxes groups.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 nh\u00f3m thu\u1ebf.","No taxes groups has been registered":"Kh\u00f4ng c\u00f3 nh\u00f3m thu\u1ebf n\u00e0o \u0111\u0103ng k\u00fd","Add a new tax group":"Th\u00eam m\u1edbi nh\u00f3m thu\u1ebf","Create a new tax group":"T\u1ea1o m\u1edbi nh\u00f3m thu\u1ebf","Register a new tax group and save it.":"\u0110\u0103ng k\u00fd m\u1edbi nh\u00f3m thu\u1ebf.","Edit tax group":"S\u1eeda nh\u00f3m thu\u1ebf","Modify Tax Group.":"C\u1eadp nh\u1eadt nh\u00f3m thu\u1ebf.","Return to Taxes Groups":"Quay l\u1ea1i nh\u00f3m thu\u1ebf","Provide a short description to the tax group.":"Di\u1ec5n gi\u1ea3i nh\u00f3m thu\u1ebf.","Units List":"Danh s\u00e1ch \u0111\u01a1n v\u1ecb t\u00ednh","Display all units.":"Hi\u1ec7n t\u1ea5t c\u1ea3 \u0111\u01a1n v\u1ecb t\u00ednh.","No units has been registered":"Kh\u00f4ng c\u00f3 \u0111\u01a1n v\u1ecb t\u00ednh n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new unit":"Th\u00eam m\u1edbi \u0111\u01a1n v\u1ecb t\u00ednh","Create a new unit":"T\u1ea1o m\u1edbi \u0111\u01a1n v\u1ecb t\u00ednh","Register a new unit and save it.":"\u0110\u0103ng k\u00fd \u0111\u01a1n v\u1ecb t\u00ednh.","Edit unit":"S\u1eeda \u0111\u01a1n v\u1ecb t\u00ednh","Modify Unit.":"C\u1eadp nh\u1eadt \u0111\u01a1n v\u1ecb t\u00ednh.","Return to Units":"Quay l\u1ea1i \u0111\u01a1n v\u1ecb t\u00ednh","Preview URL":"\u0110\u01b0\u1eddng d\u1eabn \u0111\u1ec3 xem","Preview of the unit.":"Xem tr\u01b0\u1edbc \u0111\u01a1n v\u1ecb t\u00ednh.","Define the value of the unit.":"Quy \u0111\u1ecbnh gi\u00e1 tr\u1ecb cho \u0111\u01a1n v\u1ecb t\u00ednh.","Define to which group the unit should be assigned.":"Quy \u0111\u1ecbnh nh\u00f3m n\u00e0o \u0111\u1ec3 g\u00e1n \u0111\u01a1n v\u1ecb t\u00ednh.","Base Unit":"\u0110\u01a1n v\u1ecb t\u00ednh c\u01a1 s\u1edf","Determine if the unit is the base unit from the group.":"X\u00e1c \u0111\u1ecbnh xem \u0111\u01a1n v\u1ecb c\u00f3 ph\u1ea3i l\u00e0 \u0111\u01a1n v\u1ecb c\u01a1 s\u1edf t\u1eeb nh\u00f3m hay kh\u00f4ng.","Provide a short description about the unit.":"M\u00f4 t\u1ea3 \u0111\u01a1n v\u1ecb t\u00ednh.","Unit Groups List":"Nh\u00f3m \u0111\u01a1n v\u1ecb t\u00ednh","Display all unit groups.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 c\u00e1c nh\u00f3m \u0111\u01a1n v\u1ecb t\u00ednh.","No unit groups has been registered":"Kh\u00f4ng c\u00f3 nh\u00f3m \u0111vt n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new unit group":"Th\u00eam m\u1edbi nh\u00f3m \u0111vt","Create a new unit group":"T\u1ea1o m\u1edbi nh\u00f3m \u0111vt","Register a new unit group and save it.":"\u0110\u0103ng k\u00fd m\u1edbi nh\u00f3m \u0111vt.","Edit unit group":"S\u1eeda nh\u00f3m \u0111vt","Modify Unit Group.":"C\u1eadp nh\u1eadt nh\u00f3m \u0111vt.","Return to Unit Groups":"Quay l\u1ea1i nh\u00f3m \u0111vt","Users List":"Danh s\u00e1ch ng\u01b0\u1eddi d\u00f9ng","Display all users.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 ng\u01b0\u1eddi d\u00f9ng.","No users has been registered":"Kh\u00f4ng c\u00f3 ng\u01b0\u1eddi d\u00f9ng n\u00e0o \u0111\u0103ng k\u00fd","Add a new user":"Th\u00eam m\u1edbi ng\u01b0\u1eddi d\u00f9ng","Create a new user":"T\u1ea1o m\u1edbi ng\u01b0\u1eddi d\u00f9ng","Register a new user and save it.":"\u0110\u0103ng k\u00fd m\u1edbi ng\u01b0\u1eddi d\u00f9ng.","Edit user":"S\u1eeda ng\u01b0\u1eddi d\u00f9ng","Modify User.":"C\u1eadp nh\u1eadt ng\u01b0\u1eddi d\u00f9ng.","Return to Users":"Quay l\u1ea1i ng\u01b0\u1eddi d\u00f9ng","Username":"T\u00ean \u0111\u0103ng nh\u1eadp","Will be used for various purposes such as email recovery.":"S\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho c\u00e1c m\u1ee5c \u0111\u00edch kh\u00e1c nhau nh\u01b0 kh\u00f4i ph\u1ee5c email.","Password":"M\u1eadt kh\u1ea9u","Make a unique and secure password.":"T\u1ea1o m\u1eadt kh\u1ea9u duy nh\u1ea5t v\u00e0 an to\u00e0n.","Confirm Password":"Nh\u1eadp l\u1ea1i m\u1eadt kh\u1ea9u","Should be the same as the password.":"Gi\u1ed1ng m\u1eadt kh\u1ea9u \u0111\u00e3 nh\u1eadp.","Define whether the user can use the application.":"Quy \u0111\u1ecbnh khi n\u00e0o ng\u01b0\u1eddi d\u00f9ng c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng.","The action you tried to perform is not allowed.":"B\u1ea1n kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p th\u1ef1c hi\u1ec7n thao t\u00e1c n\u00e0y.","Not Enough Permissions":"Ch\u01b0a \u0111\u1ee7 b\u1ea3o m\u1eadt","The resource of the page you tried to access is not available or might have been deleted.":"T\u00e0i nguy\u00ean c\u1ee7a trang b\u1ea1n \u0111\u00e3 c\u1ed1 g\u1eafng truy c\u1eadp kh\u00f4ng s\u1eb5n d\u00f9ng ho\u1eb7c c\u00f3 th\u1ec3 \u0111\u00e3 b\u1ecb x\u00f3a.","Not Found Exception":"Kh\u00f4ng t\u00ecm th\u1ea5y","Provide your username.":"T\u00ean c\u1ee7a b\u1ea1n.","Provide your password.":"M\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n.","Provide your email.":"Email c\u1ee7a b\u1ea1n.","Password Confirm":"Nh\u1eadp l\u1ea1i m\u1eadt kh\u1ea9u","define the amount of the transaction.":"X\u00e1c \u0111\u1ecbnh s\u1ed1 ti\u1ec1n giao d\u1ecbch.","Further observation while proceeding.":"Quan s\u00e1t th\u00eam trong khi ti\u1ebfn h\u00e0nh.","determine what is the transaction type.":"Quy \u0111\u1ecbnh lo\u1ea1i giao d\u1ecbch.","Add":"Th\u00eam","Deduct":"Kh\u1ea5u tr\u1eeb","Determine the amount of the transaction.":"Qua \u0111\u1ecbnh gi\u00e1 tr\u1ecb c\u1ee7a giao d\u1ecbch.","Further details about the transaction.":"Th\u00f4ng tin chi ti\u1ebft v\u1ec1 giao d\u1ecbch.","Define the installments for the current order.":"X\u00e1c \u0111\u1ecbnh c\u00e1c kho\u1ea3n tr\u1ea3 g\u00f3p cho \u0111\u01a1n \u0111\u1eb7t h\u00e0ng hi\u1ec7n t\u1ea1i.","New Password":"M\u1eadt kh\u1ea9u m\u1edbi","define your new password.":"Nh\u1eadp m\u1eadt kh\u1ea9u m\u1edbi.","confirm your new password.":"Nh\u1eadp l\u1ea1i m\u1eadt kh\u1ea9u m\u1edbi.","choose the payment type.":"Ch\u1ecdn ki\u1ec3u thanh to\u00e1n.","Provide the procurement name.":"T\u00ean g\u00f3i th\u1ea7u.","Describe the procurement.":"M\u00f4 t\u1ea3 g\u00f3i th\u1ea7u.","Define the provider.":"Quy \u0111\u1ecbnh nh\u00e0 cung c\u1ea5p.","Define what is the unit price of the product.":"X\u00e1c \u0111\u1ecbnh gi\u00e1 \u0111\u01a1n v\u1ecb s\u1ea3n ph\u1ea9m.","Condition":"\u0110i\u1ec1u ki\u1ec7n","Determine in which condition the product is returned.":"X\u00e1c \u0111\u1ecbnh s\u1ea3n ph\u1ea9m \u0111\u01b0\u1ee3c tr\u1ea3 l\u1ea1i trong \u0111i\u1ec1u ki\u1ec7n n\u00e0o.","Other Observations":"C\u00e1c quan s\u00e1t kh\u00e1c","Describe in details the condition of the returned product.":"M\u00f4 t\u1ea3 chi ti\u1ebft t\u00ecnh tr\u1ea1ng c\u1ee7a s\u1ea3n ph\u1ea9m tr\u1ea3 l\u1ea1i.","Unit Group Name":"T\u00ean nh\u00f3m \u0111vt","Provide a unit name to the unit.":"Cung c\u1ea5p t\u00ean \u0111\u01a1n v\u1ecb cho \u0111\u01a1n v\u1ecb.","Describe the current unit.":"M\u00f4 t\u1ea3 \u0111vt hi\u1ec7n t\u1ea1i.","assign the current unit to a group.":"G\u00e1n \u0111vt hi\u1ec7n t\u1ea1i cho nh\u00f3m.","define the unit value.":"X\u00e1c \u0111\u1ecbnh gi\u00e1 tr\u1ecb \u0111vt.","Provide a unit name to the units group.":"Cung c\u1ea5p t\u00ean \u0111\u01a1n v\u1ecb cho nh\u00f3m \u0111\u01a1n v\u1ecb.","Describe the current unit group.":"M\u00f4 t\u1ea3 nh\u00f3m \u0111\u01a1n v\u1ecb hi\u1ec7n t\u1ea1i.","POS":"C\u1eeda h\u00e0ng","Open POS":"M\u1edf c\u1eeda h\u00e0ng","Create Register":"T\u1ea1o \u0111\u0103ng k\u00fd","Use Customer Billing":"S\u1eed d\u1ee5ng thanh to\u00e1n cho kh\u00e1ch h\u00e0ng","Define whether the customer billing information should be used.":"X\u00e1c \u0111\u1ecbnh r\u00f5 h\u01a1n th\u00f4ng tin thanh to\u00e1n c\u1ee7a kh\u00e1ch h\u00e0ng n\u00ean \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng.","General Shipping":"V\u1eadn chuy\u1ec3n chung","Define how the shipping is calculated.":"X\u00e1c \u0111\u1ecbnh c\u00e1ch t\u00ednh ph\u00ed v\u1eadn chuy\u1ec3n.","Shipping Fees":"Ph\u00ed v\u1eadn chuy\u1ec3n","Define shipping fees.":"X\u00e1c \u0111\u1ecbnh ph\u00ed v\u1eadn chuy\u1ec3n.","Use Customer Shipping":"S\u1eed d\u1ee5ng v\u1eadn chuy\u1ec3n c\u1ee7a kh\u00e1ch h\u00e0ng","Define whether the customer shipping information should be used.":"X\u00e1c \u0111\u1ecbnh th\u00f4ng tin v\u1eadn chuy\u1ec3n c\u1ee7a kh\u00e1ch h\u00e0ng n\u00ean \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng.","Invoice Number":"S\u1ed1 h\u00f3a \u0111\u01a1n","If the procurement has been issued outside of NexoPOS, please provide a unique reference.":"N\u1ebfu mua s\u1eafm \u0111\u01b0\u1ee3c ph\u00e1t h\u00e0nh b\u00ean ngo\u00e0i VasPOS, vui l\u00f2ng cung c\u1ea5p m\u1ed9t t\u00e0i li\u1ec7u tham kh\u1ea3o duy nh\u1ea5t.","Delivery Time":"Th\u1eddi gian giao h\u00e0ng","If the procurement has to be delivered at a specific time, define the moment here.":"N\u1ebfu vi\u1ec7c mua s\u1eafm ph\u1ea3i \u0111\u01b0\u1ee3c giao v\u00e0o m\u1ed9t th\u1eddi \u0111i\u1ec3m c\u1ee5 th\u1ec3, h\u00e3y x\u00e1c \u0111\u1ecbnh th\u1eddi \u0111i\u1ec3m t\u1ea1i \u0111\u00e2y.","Automatic Approval":"T\u1ef1 \u0111\u1ed9ng ph\u00ea duy\u1ec7t","Determine if the procurement should be marked automatically as approved once the Delivery Time occurs.":"X\u00e1c \u0111\u1ecbnh xem vi\u1ec7c mua s\u1eafm c\u00f3 n\u00ean \u0111\u01b0\u1ee3c t\u1ef1 \u0111\u1ed9ng \u0111\u00e1nh d\u1ea5u l\u00e0 \u0111\u00e3 \u0111\u01b0\u1ee3c ph\u00ea duy\u1ec7t sau khi Th\u1eddi gian giao h\u00e0ng x\u1ea3y ra hay kh\u00f4ng.","Determine what is the actual payment status of the procurement.":"X\u00e1c \u0111\u1ecbnh t\u00ecnh tr\u1ea1ng thanh to\u00e1n th\u1ef1c t\u1ebf c\u1ee7a mua s\u1eafm l\u00e0 g\u00ec.","Determine what is the actual provider of the current procurement.":"X\u00e1c \u0111\u1ecbnh \u0111\u00e2u l\u00e0 nh\u00e0 cung c\u1ea5p th\u1ef1c t\u1ebf c\u1ee7a vi\u1ec7c mua s\u1eafm hi\u1ec7n t\u1ea1i.","Provide a name that will help to identify the procurement.":"Cung c\u1ea5p m\u1ed9t c\u00e1i t\u00ean s\u1ebd gi\u00fap x\u00e1c \u0111\u1ecbnh vi\u1ec7c mua s\u1eafm.","First Name":"T\u00ean","Avatar":"H\u00ecnh \u0111\u1ea1i di\u1ec7n","Define the image that should be used as an avatar.":"X\u00e1c \u0111\u1ecbnh h\u00ecnh \u1ea3nh s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0m h\u00ecnh \u0111\u1ea1i di\u1ec7n.","Language":"Ng\u00f4n ng\u1eef","Choose the language for the current account.":"Ch\u1ecdn ng\u00f4n ng\u1eef cho t\u00e0i kho\u1ea3n hi\u1ec7n t\u1ea1i.","Security":"B\u1ea3o m\u1eadt","Old Password":"M\u1eadt kh\u1ea9u c\u0169","Provide the old password.":"Nh\u1eadp m\u1eadt kh\u1ea9u c\u0169.","Change your password with a better stronger password.":"Thay \u0111\u1ed5i m\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n b\u1eb1ng m\u1ed9t m\u1eadt kh\u1ea9u t\u1ed1t h\u01a1n, m\u1ea1nh h\u01a1n.","Password Confirmation":"Nh\u1eadp l\u1ea1i m\u1eadt kh\u1ea9u","The profile has been successfully saved.":"H\u1ed3 s\u01a1 \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u th\u00e0nh c\u00f4ng.","The user attribute has been saved.":"Thu\u1ed9c t\u00ednh ng\u01b0\u1eddi d\u00f9ng \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u.","The options has been successfully updated.":"C\u00e1c t\u00f9y ch\u1ecdn \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng.","Wrong password provided":"Sai m\u1eadt kh\u1ea9u","Wrong old password provided":"Sai m\u1eadt kh\u1ea9u c\u0169","Password Successfully updated.":"M\u1eadt kh\u1ea9u \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng.","Sign In — NexoPOS":"\u0110\u0103ng nh\u1eadp — VasPOS","Sign Up — NexoPOS":"\u0110\u0103ng k\u00fd — VasPOS","Password Lost":"M\u1eadt kh\u1ea9u b\u1ecb m\u1ea5t","Unable to proceed as the token provided is invalid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c v\u00ec m\u00e3 th\u00f4ng b\u00e1o \u0111\u00e3 cung c\u1ea5p kh\u00f4ng h\u1ee3p l\u1ec7.","The token has expired. Please request a new activation token.":"M\u00e3 th\u00f4ng b\u00e1o \u0111\u00e3 h\u1ebft h\u1ea1n. Vui l\u00f2ng y\u00eau c\u1ea7u m\u00e3 th\u00f4ng b\u00e1o k\u00edch ho\u1ea1t m\u1edbi.","Set New Password":"\u0110\u1eb7t m\u1eadt kh\u1ea9u m\u1edbi","Database Update":"C\u1eadp nh\u1eadt c\u01a1 s\u1edf d\u1eef li\u1ec7u","This account is disabled.":"T\u00e0i kho\u1ea3n n\u00e0y \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a.","Unable to find record having that username.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y b\u1ea3n ghi c\u00f3 t\u00ean ng\u01b0\u1eddi d\u00f9ng \u0111\u00f3.","Unable to find record having that password.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y b\u1ea3n ghi c\u00f3 m\u1eadt kh\u1ea9u \u0111\u00f3.","Invalid username or password.":"Sai t\u00ean \u0111\u0103ng nh\u1eadp ho\u1eb7c m\u1eadt kh\u1ea9u.","Unable to login, the provided account is not active.":"Kh\u00f4ng th\u1ec3 \u0111\u0103ng nh\u1eadp, t\u00e0i kho\u1ea3n \u0111\u01b0\u1ee3c cung c\u1ea5p kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng.","You have been successfully connected.":"B\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c k\u1ebft n\u1ed1i th\u00e0nh c\u00f4ng.","The recovery email has been send to your inbox.":"Email kh\u00f4i ph\u1ee5c \u0111\u00e3 \u0111\u01b0\u1ee3c g\u1eedi \u0111\u1ebfn h\u1ed9p th\u01b0 c\u1ee7a b\u1ea1n.","Unable to find a record matching your entry.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y b\u1ea3n ghi ph\u00f9 h\u1ee3p v\u1edbi m\u1ee5c nh\u1eadp c\u1ee7a b\u1ea1n.","Your Account has been created but requires email validation.":"T\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o nh\u01b0ng y\u00eau c\u1ea7u x\u00e1c th\u1ef1c email.","Unable to find the requested user.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y ng\u01b0\u1eddi d\u00f9ng \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u.","Unable to proceed, the provided token is not valid.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c, m\u00e3 th\u00f4ng b\u00e1o \u0111\u00e3 cung c\u1ea5p kh\u00f4ng h\u1ee3p l\u1ec7.","Unable to proceed, the token has expired.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c, m\u00e3 th\u00f4ng b\u00e1o \u0111\u00e3 h\u1ebft h\u1ea1n.","Your password has been updated.":"M\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Unable to edit a register that is currently in use":"Kh\u00f4ng th\u1ec3 ch\u1ec9nh s\u1eeda s\u1ed5 \u0111\u0103ng k\u00fd hi\u1ec7n \u0111ang \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng","No register has been opened by the logged user.":"Kh\u00f4ng c\u00f3 s\u1ed5 \u0111\u0103ng k\u00fd n\u00e0o \u0111\u01b0\u1ee3c m\u1edf b\u1edfi ng\u01b0\u1eddi d\u00f9ng \u0111\u00e3 \u0111\u0103ng nh\u1eadp.","The register is opened.":"S\u1ed5 \u0111\u0103ng k\u00fd \u0111\u01b0\u1ee3c m\u1edf.","Closing":"\u0110\u00f3ng","Opening":"M\u1edf","Sale":"B\u00e1n","Refund":"Tr\u1ea3 l\u1ea1i","Unable to find the category using the provided identifier":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y danh m\u1ee5c b\u1eb1ng s\u1ed1 nh\u1eadn d\u1ea1ng \u0111\u00e3 cung c\u1ea5p","The category has been deleted.":"Nh\u00f3m \u0111\u00e3 b\u1ecb x\u00f3a.","Unable to find the category using the provided identifier.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y nh\u00f3m.","Unable to find the attached category parent":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y danh m\u1ee5c g\u1ed1c \u0111\u01b0\u1ee3c \u0111\u00ednh k\u00e8m","The category has been correctly saved":"Nh\u00f3m \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u","The category has been updated":"Nh\u00f3m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt","The entry has been successfully deleted.":"\u0110\u00e3 \u0111\u01b0\u1ee3c x\u00f3a th\u00e0nh c\u00f4ng.","A new entry has been successfully created.":"M\u1ed9t m\u1ee5c m\u1edbi \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o th\u00e0nh c\u00f4ng.","Unhandled crud resource":"T\u00e0i nguy\u00ean th\u00f4 ch\u01b0a x\u1eed l\u00fd","You need to select at least one item to delete":"B\u1ea1n c\u1ea7n ch\u1ecdn \u00edt nh\u1ea5t m\u1ed9t m\u1ee5c \u0111\u1ec3 x\u00f3a","You need to define which action to perform":"B\u1ea1n c\u1ea7n x\u00e1c \u0111\u1ecbnh h\u00e0nh \u0111\u1ed9ng n\u00e0o \u0111\u1ec3 th\u1ef1c hi\u1ec7n","Unable to proceed. No matching CRUD resource has been found.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c. Kh\u00f4ng t\u00ecm th\u1ea5y t\u00e0i nguy\u00ean CRUD ph\u00f9 h\u1ee3p n\u00e0o.","Create Coupon":"T\u1ea1o phi\u1ebfu gi\u1ea3m gi\u00e1","helps you creating a coupon.":"gi\u00fap b\u1ea1n t\u1ea1o phi\u1ebfu gi\u1ea3m gi\u00e1.","Edit Coupon":"S\u1eeda phi\u1ebfu gi\u1ea3m gi\u00e1","Editing an existing coupon.":"Ch\u1ec9nh s\u1eeda phi\u1ebfu gi\u1ea3m gi\u00e1 hi\u1ec7n c\u00f3.","Invalid Request.":"Y\u00eau c\u1ea7u kh\u00f4ng h\u1ee3p l\u1ec7.","Unable to delete a group to which customers are still assigned.":"Kh\u00f4ng th\u1ec3 x\u00f3a nh\u00f3m m\u00e0 kh\u00e1ch h\u00e0ng \u0111ang \u0111\u01b0\u1ee3c g\u00e1n.","The customer group has been deleted.":"Nh\u00f3m kh\u00e1ch h\u00e0ng \u0111\u00e3 b\u1ecb x\u00f3a.","Unable to find the requested group.":"Kh\u00f4ng t\u00ecm th\u1ea5y nh\u00f3m.","The customer group has been successfully created.":"Nh\u00f3m kh\u00e1ch \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The customer group has been successfully saved.":"The customer group has been successfully saved.","Unable to transfer customers to the same account.":"Kh\u00f4ng th\u1ec3 chuy\u1ec3n kh\u00e1ch h\u00e0ng sang c\u00f9ng m\u1ed9t t\u00e0i kho\u1ea3n.","The categories has been transferred to the group %s.":"C\u00e1c danh m\u1ee5c \u0111\u00e3 \u0111\u01b0\u1ee3c chuy\u1ec3n cho nh\u00f3m %s.","No customer identifier has been provided to proceed to the transfer.":"Kh\u00f4ng c\u00f3 m\u00e3 nh\u1eadn d\u1ea1ng kh\u00e1ch h\u00e0ng n\u00e0o \u0111\u01b0\u1ee3c cung c\u1ea5p \u0111\u1ec3 ti\u1ebfn h\u00e0nh chuy\u1ec3n kho\u1ea3n.","Unable to find the requested group using the provided id.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y nh\u00f3m \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u b\u1eb1ng m\u00e3 nh\u00e0 cung c\u1ea5p.","\"%s\" is not an instance of \"FieldsService\"":"\"%s\" kh\u00f4ng ph\u1ea3i l\u00e0 tr\u01b0\u1eddng h\u1ee3p c\u1ee7a \"FieldsService\"","Manage Medias":"Qu\u1ea3n l\u00fd trung gian","The operation was successful.":"Ho\u1ea1t \u0111\u1ed9ng th\u00e0nh c\u00f4ng.","Modules List":"Danh s\u00e1ch ph\u00e2n h\u1ec7","List all available modules.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 c\u00e1c ph\u00e2n h\u1ec7.","Upload A Module":"T\u1ea3i l\u00ean ph\u00e2n h\u1ec7","Extends NexoPOS features with some new modules.":"M\u1edf r\u1ed9ng c\u00e1c t\u00ednh n\u0103ng c\u1ee7a VasPOS v\u1edbi m\u1ed9t s\u1ed1 ph\u00e2n h\u1ec7 m\u1edbi.","The notification has been successfully deleted":"Th\u00f4ng b\u00e1o \u0111\u00e3 \u0111\u01b0\u1ee3c x\u00f3a th\u00e0nh c\u00f4ng","All the notifications have been cleared.":"T\u1ea5t c\u1ea3 c\u00e1c th\u00f4ng b\u00e1o \u0111\u00e3 \u0111\u01b0\u1ee3c x\u00f3a.","Order Invoice — %s":"\u0110\u01a1n h\u00e0ng — %s","Order Receipt — %s":"Bi\u00ean nh\u1eadn \u0111\u01a1n h\u00e0ng — %s","The printing event has been successfully dispatched.":"\u0110\u00e3 g\u1eedi \u0111\u1ebfn m\u00e1y in.","There is a mismatch between the provided order and the order attached to the instalment.":"C\u00f3 s\u1ef1 kh\u00f4ng kh\u1edbp gi\u1eefa \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 cung c\u1ea5p v\u00e0 \u0111\u01a1n \u0111\u1eb7t h\u00e0ng k\u00e8m theo \u0111\u1ee3t tr\u1ea3 g\u00f3p.","Unable to edit a procurement that is stocked. Consider performing an adjustment or either delete the procurement.":"Kh\u00f4ng th\u1ec3 ch\u1ec9nh s\u1eeda mua s\u1eafm \u0111\u01b0\u1ee3c d\u1ef1 tr\u1eef. Xem x\u00e9t th\u1ef1c hi\u1ec7n \u0111i\u1ec1u ch\u1ec9nh ho\u1eb7c x\u00f3a mua s\u1eafm.","New Procurement":"Mua h\u00e0ng m\u1edbi","Edit Procurement":"S\u1eeda mua h\u00e0ng","Perform adjustment on existing procurement.":"\u0110i\u1ec1u ch\u1ec9nh h\u00e0ng mua.","%s - Invoice":"%s - H\u00f3a \u0111\u01a1n","list of product procured.":"Danh s\u00e1ch h\u00e0ng mua.","The product price has been refreshed.":"Gi\u00e1 s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c l\u00e0m m\u1edbi.","The single variation has been deleted.":"M\u1ed9t bi\u1ebfn th\u1ec3 \u0111\u00e3 b\u1ecb x\u00f3a.","Edit a product":"S\u1eeda s\u1ea3n ph\u1ea9m","Makes modifications to a product":"Th\u1ef1c hi\u1ec7n s\u1eeda \u0111\u1ed5i \u0111\u1ed1i v\u1edbi s\u1ea3n ph\u1ea9m","Create a product":"T\u1ea1o m\u1edbi s\u1ea3n ph\u1ea9m","Add a new product on the system":"Th\u00eam m\u1edbi s\u1ea3n ph\u1ea9m v\u00e0o h\u1ec7 th\u1ed1ng","Stock Adjustment":"\u0110i\u1ec1u ch\u1ec9nh kho","Adjust stock of existing products.":"\u0110i\u1ec1u ch\u1ec9nh s\u1ea3n ph\u1ea9m hi\u1ec7n c\u00f3 trong kho.","Lost":"M\u1ea5t","No stock is provided for the requested product.":"Kh\u00f4ng t\u00ecm th\u1ea5y s\u1ea3n ph\u1ea9m trong kho.","The product unit quantity has been deleted.":"\u0110\u01a1n v\u1ecb t\u00ednh \u0111\u00e3 b\u1ecb x\u00f3a.","Unable to proceed as the request is not valid.":"Y\u00eau c\u1ea7u kh\u00f4ng h\u1ee3p l\u1ec7.","Unsupported action for the product %s.":"H\u00e0nh \u0111\u1ed9ng kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3 cho s\u1ea3n ph\u1ea9m %s.","The stock has been adjustment successfully.":"\u0110i\u1ec1u ch\u1ec9nh kho th\u00e0nh c\u00f4ng.","Unable to add the product to the cart as it has expired.":"Kh\u00f4ng th\u00eam \u0111\u01b0\u1ee3c, s\u1ea3n ph\u1ea9m \u0111\u00e3 qu\u00e1 h\u1ea1n.","Unable to add a product that has accurate tracking enabled, using an ordinary barcode.":"Kh\u00f4ng th\u1ec3 th\u00eam s\u1ea3n ph\u1ea9m \u0111\u00e3 b\u1eadt t\u00ednh n\u0103ng theo d\u00f5i ch\u00ednh x\u00e1c, s\u1eed d\u1ee5ng m\u00e3 v\u1ea1ch th\u00f4ng th\u01b0\u1eddng.","There is no products matching the current request.":"Kh\u00f4ng t\u00ecm th\u1ea5y s\u1ea3n ph\u1ea9m.","Print Labels":"In nh\u00e3n","Customize and print products labels.":"T\u00f9y ch\u1ec9nh v\u00e0 in nh\u00e3n s\u1ea3n ph\u1ea9m.","Sales Report":"B\u00e1o c\u00e1o b\u00e1n h\u00e0ng","Provides an overview over the sales during a specific period":"Cung c\u1ea5p c\u00e1i nh\u00ecn t\u1ed5ng quan v\u1ec1 doanh s\u1ed1 b\u00e1n h\u00e0ng trong m\u1ed9t kho\u1ea3ng th\u1eddi gian c\u1ee5 th\u1ec3","Sold Stock":"H\u00e0ng \u0111\u00e3 b\u00e1n","Provides an overview over the sold stock during a specific period.":"Cung c\u1ea5p c\u00e1i nh\u00ecn t\u1ed5ng quan v\u1ec1 l\u01b0\u1ee3ng h\u00e0ng \u0111\u00e3 b\u00e1n trong m\u1ed9t kho\u1ea3ng th\u1eddi gian c\u1ee5 th\u1ec3.","Profit Report":"B\u00e1o c\u00e1o l\u1ee3i nhu\u1eadn","Provides an overview of the provide of the products sold.":"Cung c\u1ea5p m\u1ed9t c\u00e1i nh\u00ecn t\u1ed5ng quan v\u1ec1 vi\u1ec7c cung c\u1ea5p c\u00e1c s\u1ea3n ph\u1ea9m \u0111\u00e3 b\u00e1n.","Provides an overview on the activity for a specific period.":"Cung c\u1ea5p th\u00f4ng tin t\u1ed5ng quan v\u1ec1 ho\u1ea1t \u0111\u1ed9ng trong m\u1ed9t kho\u1ea3ng th\u1eddi gian c\u1ee5 th\u1ec3.","Annual Report":"B\u00e1o c\u00e1o qu\u00fd\/n\u0103m","Invalid authorization code provided.":"\u0110\u00e3 cung c\u1ea5p m\u00e3 \u1ee7y quy\u1ec1n kh\u00f4ng h\u1ee3p l\u1ec7.","The database has been successfully seeded.":"C\u01a1 s\u1edf d\u1eef li\u1ec7u \u0111\u00e3 \u0111\u01b0\u1ee3c c\u00e0i th\u00e0nh c\u00f4ng.","Settings Page Not Found":"Kh\u00f4ng t\u00ecm th\u1ea5y trang c\u00e0i \u0111\u1eb7t","Customers Settings":"C\u00e0i \u0111\u1eb7t kh\u00e1ch h\u00e0ng","Configure the customers settings of the application.":"C\u1ea5u h\u00ecnh c\u00e0i \u0111\u1eb7t kh\u00e1ch h\u00e0ng.","General Settings":"C\u00e0i \u0111\u1eb7t chung","Configure the general settings of the application.":"C\u1ea5u h\u00ecnh c\u00e0i \u0111\u1eb7t chung.","Orders Settings":"C\u00e0i \u0111\u1eb7t \u0111\u01a1n h\u00e0ng","POS Settings":"C\u00e0i \u0111\u1eb7t c\u1eeda h\u00e0ng","Configure the pos settings.":"C\u1ea5u h\u00ecnh c\u00e0i \u0111\u1eb7t c\u1eeda h\u00e0ng.","Workers Settings":"C\u00e0i \u0111\u1eb7t nh\u00e2n vi\u00ean","%s is not an instance of \"%s\".":"%s kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t tr\u01b0\u1eddng h\u1ee3p c\u1ee7a \"%s\".","Unable to find the requested product tax using the provided id":"Kh\u00f4ng t\u00ecm th\u1ea5y thu\u1ebf nh\u00e0 cung c\u1ea5p khi t\u00ecm b\u1eb1ng m\u00e3 nh\u00e0 cung c\u1ea5p","Unable to find the requested product tax using the provided identifier.":"Kh\u00f4ng t\u00ecm th\u1ea5y thu\u1ebf nh\u00e0 cung c\u1ea5p khi t\u00ecm ki\u1ebfm b\u1eb1ng m\u00e3 \u0111\u1ecbnh danh.","The product tax has been created.":"Thu\u1ebf c\u1ee7a s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The product tax has been updated":"Thu\u1ebf c\u1ee7a s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt","Unable to retrieve the requested tax group using the provided identifier \"%s\".":"Kh\u00f4ng t\u00ecm th\u1ea5y nh\u00f3m thu\u1ebf b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng m\u00e3 \u0111\u1ecbnh danh \"%s\".","Permission Manager":"Qu\u1ea3n l\u00fd quy\u1ec1n","Manage all permissions and roles":"Qu\u1ea3n l\u00fd t\u1ea5t c\u1ea3 quy\u1ec1n v\u00e0 nh\u00f3m quy\u1ec1n","My Profile":"H\u1ed3 s\u01a1","Change your personal settings":"Thay \u0111\u1ed5i th\u00f4ng tin c\u00e1 nh\u00e2n","The permissions has been updated.":"C\u00e1c quy\u1ec1n \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Sunday":"Ch\u1ee7 nh\u1eadt","Monday":"Th\u1ee9 hai","Tuesday":"Th\u1ee9 ba","Wednesday":"Th\u1ee9 t\u01b0","Thursday":"Th\u1ee9 n\u0103m","Friday":"Th\u1ee9 s\u00e1u","Saturday":"Th\u1ee9 b\u1ea3y","The migration has successfully run.":"Qu\u00e1 tr\u00ecnh c\u00e0i \u0111\u1eb7t \u0111\u00e3 th\u00e0nh c\u00f4ng.","Unable to initialize the settings page. The identifier \"%s\" cannot be instantiated.":"Kh\u00f4ng th\u1ec3 kh\u1edfi t\u1ea1o trang c\u00e0i \u0111\u1eb7t. \u0110\u1ecbnh danh \"%s\" kh\u00f4ng th\u1ec3 \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o.","Unable to register. The registration is closed.":"Kh\u00f4ng th\u1ec3 \u0111\u0103ng k\u00fd. \u0110\u0103ng k\u00fd \u0111\u00e3 \u0111\u00f3ng.","Hold Order Cleared":"Gi\u1eef \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c x\u00f3a","[NexoPOS] Activate Your Account":"[VasPOS] K\u00edch ho\u1ea1t t\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n","[NexoPOS] A New User Has Registered":"[VasPOS] Ng\u01b0\u1eddi d\u00f9ng m\u1edbi \u0111\u00e3 \u0111\u0103ng k\u00fd","[NexoPOS] Your Account Has Been Created":"[VasPOS] T\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o","Unable to find the permission with the namespace \"%s\".":"Kh\u00f4ng t\u00ecm th\u1ea5y quy\u1ec1n \"%s\".","Voided":"V\u00f4 hi\u1ec7u","Refunded":"Tr\u1ea3 l\u1ea1i","Partially Refunded":"Tr\u1ea3 tr\u01b0\u1edbc","The register has been successfully opened":"S\u1ed5 \u0111\u0103ng k\u00fd \u0111\u00e3 \u0111\u01b0\u1ee3c m\u1edf th\u00e0nh c\u00f4ng","The register has been successfully closed":"S\u1ed5 \u0111\u0103ng k\u00fd \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u00f3ng th\u00e0nh c\u00f4ng","The provided amount is not allowed. The amount should be greater than \"0\". ":"S\u1ed1 ti\u1ec1n \u0111\u00e3 cung c\u1ea5p kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p. S\u1ed1 ti\u1ec1n ph\u1ea3i l\u1edbn h\u01a1n \"0\". ","The cash has successfully been stored":"Ti\u1ec1n m\u1eb7t \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1ea5t gi\u1eef th\u00e0nh c\u00f4ng","Not enough fund to cash out.":"Kh\u00f4ng \u0111\u1ee7 qu\u1ef9 \u0111\u1ec3 r\u00fat ti\u1ec1n.","The cash has successfully been disbursed.":"Ti\u1ec1n m\u1eb7t \u0111\u00e3 \u0111\u01b0\u1ee3c gi\u1ea3i ng\u00e2n th\u00e0nh c\u00f4ng.","In Use":"\u0110ang d\u00f9ng","Opened":"M\u1edf","Delete Selected entries":"X\u00f3a c\u00e1c m\u1ee5c \u0111\u00e3 ch\u1ecdn","%s entries has been deleted":"%s c\u00e1c m\u1ee5c \u0111\u00e3 \u0111\u01b0\u1ee3c x\u00f3a","%s entries has not been deleted":"%s c\u00e1c m\u1ee5c ch\u01b0a b\u1ecb x\u00f3a","Unable to find the customer using the provided id.":"Kh\u00f4ng t\u00ecm th\u1ea5y kh\u00e1ch h\u00e0ng","The customer has been deleted.":"Kh\u00e1ch h\u00e0ng \u0111\u00e3 b\u1ecb x\u00f3a.","The customer has been created.":"Kh\u00e1ch h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","Unable to find the customer using the provided ID.":"Kh\u00f4ng t\u00ecm th\u1ea5y kh\u00e1ch h\u00e0ng.","The customer has been edited.":"S\u1eeda kh\u00e1ch h\u00e0ng th\u00e0nh c\u00f4ng.","Unable to find the customer using the provided email.":"Kh\u00f4ng t\u00ecm th\u1ea5y kh\u00e1ch h\u00e0ng.","The customer account has been updated.":"C\u1eadp nh\u1eadt kh\u00e1ch h\u00e0ng th\u00e0nh c\u00f4ng.","Issuing Coupon Failed":"Ph\u00e1t h\u00e0nh phi\u1ebfu th\u01b0\u1edfng kh\u00f4ng th\u00e0nh c\u00f4ng","Unable to apply a coupon attached to the reward \"%s\". It looks like the coupon no more exists.":"Kh\u00f4ng th\u1ec3 \u00e1p d\u1ee5ng phi\u1ebfu gi\u1ea3m gi\u00e1 \u0111\u00ednh k\u00e8m v\u1edbi ph\u1ea7n th\u01b0\u1edfng \"%s\". C\u00f3 v\u1ebb nh\u01b0 phi\u1ebfu gi\u1ea3m gi\u00e1 kh\u00f4ng c\u00f2n t\u1ed3n t\u1ea1i n\u1eefa.","Unable to find a coupon with the provided code.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y phi\u1ebfu gi\u1ea3m gi\u00e1 c\u00f3 m\u00e3 \u0111\u00e3 cung c\u1ea5p.","The coupon has been updated.":"Phi\u1ebfu gi\u1ea3m gi\u00e1 \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","The group has been created.":"Nh\u00f3m \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The media has been deleted":"\u1ea2nh \u0111\u00e3 b\u1ecb x\u00f3a","Unable to find the media.":"Kh\u00f4ng t\u00ecm th\u1ea5y \u1ea3nh.","Unable to find the requested file.":"Kh\u00f4ng t\u00ecm th\u1ea5y file.","Unable to find the media entry":"Kh\u00f4ng t\u00ecm th\u1ea5y m\u1ee5c nh\u1eadp \u1ea3nh","Payment Types":"Lo\u1ea1i thanh to\u00e1n","Medias":"\u1ea2nh","List":"Danh s\u00e1ch","Customers Groups":"Nh\u00f3m kh\u00e1ch h\u00e0ng","Create Group":"T\u1ea1o nh\u00f3m kh\u00e1ch","Reward Systems":"H\u1ec7 th\u1ed1ng gi\u1ea3i th\u01b0\u1edfng","Create Reward":"T\u1ea1o gi\u1ea3i th\u01b0\u1edfng","List Coupons":"Danh s\u00e1ch phi\u1ebfu gi\u1ea3m gi\u00e1","Providers":"Nh\u00e0 cung c\u1ea5p","Create A Provider":"T\u1ea1o nh\u00e0 cung c\u1ea5p","Inventory":"Qu\u1ea3n l\u00fd kho","Create Product":"T\u1ea1o s\u1ea3n ph\u1ea9m","Create Category":"T\u1ea1o nh\u00f3m h\u00e0ng","Create Unit":"T\u1ea1o \u0111\u01a1n v\u1ecb","Unit Groups":"Nh\u00f3m \u0111\u01a1n v\u1ecb","Create Unit Groups":"T\u1ea1o nh\u00f3m \u0111\u01a1n v\u1ecb","Taxes Groups":"Nh\u00f3m thu\u1ebf","Create Tax Groups":"T\u1ea1o nh\u00f3m thu\u1ebf","Create Tax":"T\u1ea1o lo\u1ea1i thu\u1ebf","Modules":"Ph\u00e2n h\u1ec7","Upload Module":"T\u1ea3i l\u00ean ph\u00e2n h\u1ec7","Users":"Ng\u01b0\u1eddi d\u00f9ng","Create User":"T\u1ea1o ng\u01b0\u1eddi d\u00f9ng","Roles":"Quy\u1ec1n h\u1ea1n","Create Roles":"T\u1ea1o quy\u1ec1n h\u1ea1n","Permissions Manager":"Quy\u1ec1n truy c\u1eadp","Procurements":"Mua h\u00e0ng","Reports":"B\u00e1o c\u00e1o","Sale Report":"B\u00e1o c\u00e1o b\u00e1n h\u00e0ng","Incomes & Loosses":"L\u00e3i & L\u1ed7","Invoice Settings":"C\u00e0i \u0111\u1eb7t h\u00f3a \u0111\u01a1n","Workers":"Nh\u00e2n vi\u00ean","Unable to locate the requested module.":"Kh\u00f4ng truy c\u1eadp \u0111\u01b0\u1ee3c ph\u00e2n h\u1ec7.","The module \"%s\" has been disabled as the dependency \"%s\" is missing. ":"Ph\u00e2n h\u1ec7 \"%s\" \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a v\u00ec ph\u1ee5 thu\u1ed9c \"%s\" kh\u00f4ng t\u1ed3n t\u1ea1i. ","The module \"%s\" has been disabled as the dependency \"%s\" is not enabled. ":"Ph\u00e2n h\u1ec7 \"%s\" \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a v\u00ec ph\u1ee5 thu\u1ed9c \"%s\" kh\u00f4ng \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t. ","Unable to detect the folder from where to perform the installation.":"Kh\u00f4ng t\u00ecm th\u1ea5y th\u01b0 m\u1ee5c \u0111\u1ec3 c\u00e0i \u0111\u1eb7t.","The uploaded file is not a valid module.":"T\u1ec7p t\u1ea3i l\u00ean kh\u00f4ng h\u1ee3p l\u1ec7.","The module has been successfully installed.":"C\u00e0i \u0111\u1eb7t ph\u00e2n h\u1ec7 th\u00e0nh c\u00f4ng.","The migration run successfully.":"Di chuy\u1ec3n th\u00e0nh c\u00f4ng.","The module has correctly been enabled.":"Ph\u00e2n h\u1ec7 \u0111\u00e3 \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t ch\u00ednh x\u00e1c.","Unable to enable the module.":"Kh\u00f4ng th\u1ec3 k\u00edch ho\u1ea1t ph\u00e2n h\u1ec7(module).","The Module has been disabled.":"Ph\u00e2n h\u1ec7 \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a.","Unable to disable the module.":"Kh\u00f4ng th\u1ec3 v\u00f4 hi\u1ec7u h\u00f3a ph\u00e2n h\u1ec7(module).","Unable to proceed, the modules management is disabled.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c, qu\u1ea3n l\u00fd ph\u00e2n h\u1ec7 \u0111\u00e3 b\u1ecb t\u1eaft.","Missing required parameters to create a notification":"Thi\u1ebfu c\u00e1c th\u00f4ng s\u1ed1 b\u1eaft bu\u1ed9c \u0111\u1ec3 t\u1ea1o th\u00f4ng b\u00e1o","The order has been placed.":"\u0110\u01a1n h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1eb7t.","The percentage discount provided is not valid.":"Ph\u1ea7n tr\u0103m chi\u1ebft kh\u1ea5u kh\u00f4ng h\u1ee3p l\u1ec7.","A discount cannot exceed the sub total value of an order.":"Gi\u1ea3m gi\u00e1 kh\u00f4ng \u0111\u01b0\u1ee3c v\u01b0\u1ee3t qu\u00e1 t\u1ed5ng gi\u00e1 tr\u1ecb ph\u1ee5 c\u1ee7a m\u1ed9t \u0111\u01a1n \u0111\u1eb7t h\u00e0ng.","No payment is expected at the moment. If the customer want to pay early, consider adjusting instalment payments date.":"Kh\u00f4ng c\u00f3 kho\u1ea3n thanh to\u00e1n n\u00e0o \u0111\u01b0\u1ee3c mong \u0111\u1ee3i v\u00e0o l\u00fac n\u00e0y. N\u1ebfu kh\u00e1ch h\u00e0ng mu\u1ed1n tr\u1ea3 s\u1edbm, h\u00e3y c\u00e2n nh\u1eafc \u0111i\u1ec1u ch\u1ec9nh ng\u00e0y tr\u1ea3 g\u00f3p.","The payment has been saved.":"Thanh to\u00e1n \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u.","Unable to edit an order that is completely paid.":"Kh\u00f4ng th\u1ec3 ch\u1ec9nh s\u1eeda \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n ho\u00e0n to\u00e0n.","Unable to proceed as one of the previous submitted payment is missing from the order.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c v\u00ec m\u1ed9t trong c\u00e1c kho\u1ea3n thanh to\u00e1n \u0111\u00e3 g\u1eedi tr\u01b0\u1edbc \u0111\u00f3 b\u1ecb thi\u1ebfu trong \u0111\u01a1n \u0111\u1eb7t h\u00e0ng.","The order payment status cannot switch to hold as a payment has already been made on that order.":"Tr\u1ea1ng th\u00e1i thanh to\u00e1n \u0111\u01a1n \u0111\u1eb7t h\u00e0ng kh\u00f4ng th\u1ec3 chuy\u1ec3n sang gi\u1eef v\u00ec m\u1ed9t kho\u1ea3n thanh to\u00e1n \u0111\u00e3 \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n tr\u00ean \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00f3.","Unable to proceed. One of the submitted payment type is not supported.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c. M\u1ed9t trong nh\u1eefng h\u00ecnh th\u1ee9c thanh to\u00e1n \u0111\u00e3 g\u1eedi kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3.","Unable to proceed, the product \"%s\" has a unit which cannot be retreived. It might have been deleted.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c, s\u1ea3n ph\u1ea9m \"%s\" c\u00f3 m\u1ed9t \u0111\u01a1n v\u1ecb kh\u00f4ng th\u1ec3 \u0111\u01b0\u1ee3c truy xu\u1ea5t. N\u00f3 c\u00f3 th\u1ec3 \u0111\u00e3 b\u1ecb x\u00f3a.","Unable to find the customer using the provided ID. The order creation has failed.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y kh\u00e1ch h\u00e0ng. Vi\u1ec7c t\u1ea1o \u0111\u01a1n h\u00e0ng kh\u00f4ng th\u00e0nh c\u00f4ng.","Unable to proceed a refund on an unpaid order.":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c ho\u00e0n l\u1ea1i ti\u1ec1n cho m\u1ed9t \u0111\u01a1n \u0111\u1eb7t h\u00e0ng ch\u01b0a thanh to\u00e1n.","The current credit has been issued from a refund.":"T\u00edn d\u1ee5ng hi\u1ec7n t\u1ea1i \u0111\u00e3 \u0111\u01b0\u1ee3c ph\u00e1t h\u00e0nh t\u1eeb kho\u1ea3n ti\u1ec1n ho\u00e0n l\u1ea1i.","The order has been successfully refunded.":"\u0110\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c ho\u00e0n ti\u1ec1n th\u00e0nh c\u00f4ng.","unable to proceed to a refund as the provided status is not supported.":"kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c ho\u00e0n l\u1ea1i ti\u1ec1n v\u00ec tr\u1ea1ng th\u00e1i \u0111\u00e3 cung c\u1ea5p kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3.","The product %s has been successfully refunded.":"S\u1ea3n ph\u1ea9m %s \u0111\u00e3 \u0111\u01b0\u1ee3c ho\u00e0n tr\u1ea3 th\u00e0nh c\u00f4ng.","Unable to find the order product using the provided id.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y s\u1ea3n ph\u1ea9m \u0111\u1eb7t h\u00e0ng b\u1eb1ng m\u00e3 nh\u00e0 cung c\u1ea5p.","Unable to find the requested order using \"%s\" as pivot and \"%s\" as identifier":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng \"%s\" nh\u01b0 tr\u1ee5c v\u00e0 \"%s\" l\u00e0m \u0111\u1ecbnh danh","Unable to fetch the order as the provided pivot argument is not supported.":"Kh\u00f4ng th\u1ec3 t\u00ecm n\u1ea1p \u0111\u01a1n \u0111\u1eb7t h\u00e0ng v\u00ec \u0111\u1ed1i s\u1ed1 t\u1ed5ng h\u1ee3p \u0111\u00e3 cung c\u1ea5p kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3.","The product has been added to the order \"%s\"":"S\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c th\u00eam v\u00e0o \u0111\u01a1n h\u00e0ng \"%s\"","the order has been successfully computed.":"\u0110\u01a1n h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c t\u00ednh to\u00e1n.","The order has been deleted.":"\u0110\u01a1n h\u00e0ng \u0111\u00e3 b\u1ecb x\u00f3a.","The product has been successfully deleted from the order.":"S\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c x\u00f3a th\u00e0nh c\u00f4ng kh\u1ecfi \u0111\u01a1n \u0111\u1eb7t h\u00e0ng.","Unable to find the requested product on the provider order.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y s\u1ea3n ph\u1ea9m \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u trong \u0111\u01a1n \u0111\u1eb7t h\u00e0ng c\u1ee7a nh\u00e0 cung c\u1ea5p.","Unpaid Orders Turned Due":"C\u00e1c \u0111\u01a1n h\u00e0ng ch\u01b0a thanh to\u00e1n \u0111\u00e3 \u0111\u1ebfn h\u1ea1n","No orders to handle for the moment.":"Kh\u00f4ng c\u00f3 \u0111\u01a1n \u0111\u1eb7t h\u00e0ng n\u00e0o \u0111\u1ec3 x\u1eed l\u00fd v\u00e0o l\u00fac n\u00e0y.","The order has been correctly voided.":"\u0110\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c h\u1ee7y b\u1ecf m\u1ed9t c\u00e1ch ch\u00ednh x\u00e1c.","Unable to edit an already paid instalment.":"Kh\u00f4ng th\u1ec3 ch\u1ec9nh s\u1eeda m\u1ed9t kho\u1ea3n tr\u1ea3 g\u00f3p \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n.","The instalment has been saved.":"Ph\u1ea7n tr\u1ea3 g\u00f3p \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u.","The instalment has been deleted.":"Ph\u1ea7n tr\u1ea3 g\u00f3p \u0111\u00e3 b\u1ecb x\u00f3a.","The defined amount is not valid.":"S\u1ed1 ti\u1ec1n \u0111\u00e3 quy \u0111\u1ecbnh kh\u00f4ng h\u1ee3p l\u1ec7.","No further instalments is allowed for this order. The total instalment already covers the order total.":"Kh\u00f4ng cho ph\u00e9p tr\u1ea3 g\u00f3p th\u00eam cho \u0111\u01a1n \u0111\u1eb7t h\u00e0ng n\u00e0y. T\u1ed5ng s\u1ed1 l\u1ea7n tr\u1ea3 g\u00f3p \u0111\u00e3 bao g\u1ed3m t\u1ed5ng s\u1ed1 \u0111\u01a1n \u0111\u1eb7t h\u00e0ng.","The instalment has been created.":"Ph\u1ea7n c\u00e0i \u0111\u1eb7t \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The provided status is not supported.":"Tr\u1ea1ng th\u00e1i kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3.","The order has been successfully updated.":"\u0110\u01a1n h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng.","Unable to find the requested procurement using the provided identifier.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y y\u00eau c\u1ea7u mua s\u1eafm b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng m\u00e3 s\u1ed1 \u0111\u1ecbnh danh n\u00e0y.","Unable to find the assigned provider.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y nh\u00e0 cung c\u1ea5p \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh.","The procurement has been created.":"Vi\u1ec7c mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o ra.","Unable to edit a procurement that has already been stocked. Please consider performing and stock adjustment.":"Kh\u00f4ng th\u1ec3 ch\u1ec9nh s\u1eeda mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u. Vui l\u00f2ng xem x\u00e9t vi\u1ec7c th\u1ef1c hi\u1ec7n v\u00e0 \u0111i\u1ec1u ch\u1ec9nh kho.","The provider has been edited.":"Nh\u00e0 cung c\u1ea5p \u0111\u00e3 \u0111\u01b0\u1ee3c ch\u1ec9nh s\u1eeda.","Unable to have a unit group id for the product using the reference \"%s\" as \"%s\"":"Kh\u00f4ng th\u1ec3 c\u00f3 nh\u00f3m \u0111\u01a1n v\u1ecb cho s\u1ea3n ph\u1ea9m b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng tham chi\u1ebfu \"%s\" nh\u01b0 \"%s\"","The operation has completed.":"Ho\u1ea1t \u0111\u1ed9ng \u0111\u00e3 ho\u00e0n th\u00e0nh.","The procurement has been refreshed.":"Vi\u1ec7c mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c l\u00e0m m\u1edbi.","The procurement has been reset.":"Vi\u1ec7c mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1eb7t l\u1ea1i.","The procurement products has been deleted.":"C\u00e1c s\u1ea3n ph\u1ea9m mua s\u1eafm \u0111\u00e3 b\u1ecb x\u00f3a.","The procurement product has been updated.":"S\u1ea3n ph\u1ea9m mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Unable to find the procurement product using the provided id.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y s\u1ea3n ph\u1ea9m mua s\u1eafm b\u1eb1ng m\u00e3 nh\u00e0 cung c\u1ea5p n\u00e0y.","The product %s has been deleted from the procurement %s":"S\u1ea3n ph\u1ea9m %s \u0111\u00e3 b\u1ecb x\u00f3a kh\u1ecfi mua s\u1eafm %s","The product with the following ID \"%s\" is not initially included on the procurement":"M\u00e3 s\u1ea3n ph\u1ea9m \"%s\" ch\u01b0a \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t khi mua h\u00e0ng","The procurement products has been updated.":"C\u00e1c s\u1ea3n ph\u1ea9m mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Procurement Automatically Stocked":"Mua s\u1eafm t\u1ef1 \u0111\u1ed9ng d\u1ef1 tr\u1eef","Draft":"B\u1ea3n th\u1ea3o","The category has been created":"Nh\u00f3m \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o","Unable to find the product using the provided id.":"Kh\u00f4ng t\u00ecm th\u1ea5y s\u1ea3n ph\u1ea9m.","Unable to find the requested product using the provided SKU.":"Kh\u00f4ng t\u00ecm th\u1ea5y s\u1ea3n ph\u1ea9m.","The variable product has been created.":"S\u1ea3n ph\u1ea9m bi\u1ebfn th\u1ec3(\u0111vt kh\u00e1c) \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The provided barcode \"%s\" is already in use.":"M\u00e3 v\u1ea1ch \"%s\" \u0111\u00e3 t\u1ed3n t\u1ea1i.","The provided SKU \"%s\" is already in use.":"M\u00e3 s\u1ea3n ph\u1ea9m \"%s\" \u0111\u00e3 t\u1ed3n t\u1ea1i.","The product has been saved.":"S\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u.","The provided barcode is already in use.":"M\u00e3 v\u1ea1ch \u0111\u00e3 t\u1ed3n t\u1ea1i.","The provided SKU is already in use.":"M\u00e3 s\u1ea3n ph\u1ea9m \u0111\u00e3 t\u1ed3n t\u1ea1i.","The product has been updated":"S\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt","The variable product has been updated.":"Bi\u1ebfn th\u1ec3 s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","The product variations has been reset":"Bi\u1ebfn th\u1ec3 s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1eb7t l\u1ea1i","The product has been reset.":"S\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1eb7t l\u1ea1i.","The product \"%s\" has been successfully deleted":"S\u1ea3n ph\u1ea9m \"%s\" \u0111\u00e3 \u0111\u01b0\u1ee3c x\u00f3a th\u00e0nh c\u00f4ng","Unable to find the requested variation using the provided ID.":"Kh\u00f4ng t\u00ecm th\u1ea5y bi\u1ebfn th\u1ec3.","The product stock has been updated.":"Kho s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","The action is not an allowed operation.":"H\u00e0nh \u0111\u1ed9ng kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t ho\u1ea1t \u0111\u1ed9ng \u0111\u01b0\u1ee3c ph\u00e9p.","The product quantity has been updated.":"S\u1ed1 l\u01b0\u1ee3ng s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","There is no variations to delete.":"Kh\u00f4ng c\u00f3 bi\u1ebfn th\u1ec3 n\u00e0o \u0111\u1ec3 x\u00f3a.","There is no products to delete.":"Kh\u00f4ng c\u00f3 s\u1ea3n ph\u1ea9m n\u00e0o \u0111\u1ec3 x\u00f3a.","The product variation has been successfully created.":"Bi\u1ebfn th\u1ec3 s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o th\u00e0nh c\u00f4ng.","The product variation has been updated.":"Bi\u1ebfn th\u1ec3 s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng.","The provider has been created.":"Nh\u00e0 cung c\u1ea5p \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The provider has been updated.":"Nh\u00e0 cung c\u1ea5p \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Unable to find the provider using the specified id.":"Kh\u00f4ng t\u00ecm th\u1ea5y nh\u00e0 cung c\u1ea5p.","The provider has been deleted.":"Nh\u00e0 cung c\u1ea5p \u0111\u00e3 b\u1ecb x\u00f3a.","Unable to find the provider using the specified identifier.":"Kh\u00f4ng t\u00ecm th\u1ea5y nh\u00e0 cung c\u1ea5p.","The provider account has been updated.":"T\u00e0i kho\u1ea3n nh\u00e0 cung c\u1ea5p \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","The procurement payment has been deducted.":"Kho\u1ea3n thanh to\u00e1n mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c kh\u1ea5u tr\u1eeb.","The dashboard report has been updated.":"B\u00e1o c\u00e1o trang t\u1ed5ng quan \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Untracked Stock Operation":"Ho\u1ea1t \u0111\u1ed9ng h\u00e0ng t\u1ed3n kho kh\u00f4ng theo d\u00f5i","Unsupported action":"H\u00e0nh \u0111\u1ed9ng kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3","The expense has been correctly saved.":"Chi ph\u00ed \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u.","The table has been truncated.":"B\u1ea3ng \u0111\u00e3 b\u1ecb c\u1eaft b\u1edbt.","Untitled Settings Page":"Trang c\u00e0i \u0111\u1eb7t kh\u00f4ng c\u00f3 ti\u00eau \u0111\u1ec1","No description provided for this settings page.":"Kh\u00f4ng c\u00f3 m\u00f4 t\u1ea3 n\u00e0o \u0111\u01b0\u1ee3c cung c\u1ea5p cho trang c\u00e0i \u0111\u1eb7t n\u00e0y.","The form has been successfully saved.":"Bi\u1ec3u m\u1eabu \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u th\u00e0nh c\u00f4ng.","Unable to reach the host":"Kh\u00f4ng th\u1ec3 k\u1ebft n\u1ed1i v\u1edbi m\u00e1y ch\u1ee7","Unable to connect to the database using the credentials provided.":"Kh\u00f4ng th\u1ec3 k\u1ebft n\u1ed1i v\u1edbi c\u01a1 s\u1edf d\u1eef li\u1ec7u b\u1eb1ng th\u00f4ng tin \u0111\u0103ng nh\u1eadp \u0111\u01b0\u1ee3c cung c\u1ea5p.","Unable to select the database.":"Kh\u00f4ng th\u1ec3 ch\u1ecdn c\u01a1 s\u1edf d\u1eef li\u1ec7u.","Access denied for this user.":"Quy\u1ec1n truy c\u1eadp b\u1ecb t\u1eeb ch\u1ed1i \u0111\u1ed1i v\u1edbi ng\u01b0\u1eddi d\u00f9ng n\u00e0y.","The connexion with the database was successful":"K\u1ebft n\u1ed1i v\u1edbi c\u01a1 s\u1edf d\u1eef li\u1ec7u \u0111\u00e3 th\u00e0nh c\u00f4ng","Cash":"Ti\u1ec1n m\u1eb7t","Bank Payment":"Chuy\u1ec3n kho\u1ea3n","NexoPOS has been successfully installed.":"VasPOS \u0111\u00e3 \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t th\u00e0nh c\u00f4ng.","A tax cannot be his own parent.":"M\u1ed9t m\u1ee5c thu\u1ebf kh\u00f4ng th\u1ec3 l\u00e0 cha c\u1ee7a ch\u00ednh m\u1ee5c \u0111\u00f3.","The tax hierarchy is limited to 1. A sub tax must not have the tax type set to \"grouped\".":"H\u1ec7 th\u1ed1ng ph\u00e2n c\u1ea5p thu\u1ebf \u0111\u01b0\u1ee3c gi\u1edbi h\u1ea1n \u1edf 1. M\u1ed9t lo\u1ea1i thu\u1ebf ph\u1ee5 kh\u00f4ng \u0111\u01b0\u1ee3c \u0111\u1eb7t lo\u1ea1i thu\u1ebf th\u00e0nh \"grouped\".","Unable to find the requested tax using the provided identifier.":"Kh\u00f4ng t\u00ecm th\u1ea5y kho\u1ea3n thu\u1ebf \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng m\u00e3 s\u1ed1 \u0111\u1ecbnh danh \u0111\u00e3 cung c\u1ea5p.","The tax group has been correctly saved.":"Nh\u00f3m thu\u1ebf \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u.","The tax has been correctly created.":"M\u1ee9c thu\u1ebf \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The tax has been successfully deleted.":"M\u1ee9c thu\u1ebf \u0111\u00e3 b\u1ecb x\u00f3a.","The Unit Group has been created.":"Nh\u00f3m \u0111vt \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","The unit group %s has been updated.":"Nh\u00f3m \u0111vt %s \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Unable to find the unit group to which this unit is attached.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y nh\u00f3m \u0111\u01a1n v\u1ecb m\u00e0 \u0111\u01a1n v\u1ecb n\u00e0y \u0111\u01b0\u1ee3c \u0111\u00ednh k\u00e8m.","The unit has been saved.":"\u0110vt \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u.","Unable to find the Unit using the provided id.":"Kh\u00f4ng t\u00ecm th\u1ea5y \u0111vt b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng m\u00e3 nh\u00e0 cung c\u1ea5p","The unit has been updated.":"\u0110vt \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","The unit group %s has more than one base unit":"Nh\u00f3m \u0111vt %s c\u00f3 nhi\u1ec1u h\u01a1n m\u1ed9t \u0111\u01a1n v\u1ecb c\u01a1 s\u1edf","The unit has been deleted.":"\u0110vt \u0111\u00e3 b\u1ecb x\u00f3a.","unable to find this validation class %s.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y l\u1edbp x\u00e1c th\u1ef1c n\u00e0y %s.","Enable Reward":"B\u1eadt ph\u1ea7n th\u01b0\u1edfng","Will activate the reward system for the customers.":"S\u1ebd k\u00edch ho\u1ea1t h\u1ec7 th\u1ed1ng ph\u1ea7n th\u01b0\u1edfng cho kh\u00e1ch h\u00e0ng.","Default Customer Account":"T\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng m\u1eb7c \u0111\u1ecbnh","Default Customer Group":"Nh\u00f3m kh\u00e1ch h\u00e0ng m\u1eb7c \u0111\u1ecbnh","Select to which group each new created customers are assigned to.":"Ch\u1ecdn nh\u00f3m m\u00e0 m\u1ed7i kh\u00e1ch h\u00e0ng \u0111\u01b0\u1ee3c t\u1ea1o m\u1edbi s\u1ebd \u0111\u01b0\u1ee3c g\u00e1n cho.","Enable Credit & Account":"B\u1eadt t\u00edn d\u1ee5ng & T\u00e0i kho\u1ea3n","The customers will be able to make deposit or obtain credit.":"Kh\u00e1ch h\u00e0ng s\u1ebd c\u00f3 th\u1ec3 g\u1eedi ti\u1ec1n ho\u1eb7c nh\u1eadn t\u00edn d\u1ee5ng.","Store Name":"T\u00ean c\u1eeda h\u00e0ng","This is the store name.":"Nh\u1eadp t\u00ean c\u1eeda h\u00e0ng.","Store Address":"\u0110\u1ecba ch\u1ec9 c\u1eeda h\u00e0ng","The actual store address.":"\u0110\u1ecba ch\u1ec9 th\u1ef1c t\u1ebf c\u1eeda h\u00e0ng.","Store City":"Th\u00e0nh ph\u1ed1","The actual store city.":"Nh\u1eadp th\u00e0nh ph\u1ed1.","Store Phone":"\u0110i\u1ec7n tho\u1ea1i","The phone number to reach the store.":"\u0110i\u1ec7n tho\u1ea1i c\u1ee7a c\u1eeda h\u00e0ng.","Store Email":"Email","The actual store email. Might be used on invoice or for reports.":"Email th\u1ef1c t\u1ebf c\u1ee7a c\u1eeda h\u00e0ng. C\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng tr\u00ean h\u00f3a \u0111\u01a1n ho\u1eb7c b\u00e1o c\u00e1o.","Store PO.Box":"H\u00f2m th\u01b0","The store mail box number.":"H\u00f2m th\u01b0 c\u1ee7a c\u1eeda h\u00e0ng.","Store Fax":"Fax","The store fax number.":"S\u1ed1 fax c\u1ee7a c\u1eeda h\u00e0ng.","Store Additional Information":"L\u01b0u tr\u1eef th\u00f4ng tin b\u1ed5 sung","Store additional information.":"L\u01b0u tr\u1eef th\u00f4ng tin b\u1ed5 sung.","Store Square Logo":"Logo c\u1ee7a c\u1eeda h\u00e0ng","Choose what is the square logo of the store.":"Ch\u1ecdn h\u00ecnh logo cho c\u1eeda h\u00e0ng.","Store Rectangle Logo":"Logo c\u1ee7a c\u1eeda h\u00e0ng","Choose what is the rectangle logo of the store.":"Ch\u1ecdn logo cho c\u1eeda h\u00e0ng.","Define the default fallback language.":"X\u00e1c \u0111\u1ecbnh ng\u00f4n ng\u1eef d\u1ef1 ph\u00f2ng m\u1eb7c \u0111\u1ecbnh.","Currency":"Ti\u1ec1n t\u1ec7","Currency Symbol":"K\u00fd hi\u1ec7u ti\u1ec1n t\u1ec7","This is the currency symbol.":"\u0110\u00e2y l\u00e0 k\u00fd hi\u1ec7u ti\u1ec1n t\u1ec7.","Currency ISO":"Ti\u1ec1n ngo\u1ea1i t\u1ec7","The international currency ISO format.":"\u0110\u1ecbnh d\u1ea1ng ti\u1ec1n ngo\u1ea1i t\u1ec7.","Currency Position":"V\u1ecb tr\u00ed ti\u1ec1n t\u1ec7","Before the amount":"Tr\u01b0\u1edbc s\u1ed1 ti\u1ec1n","After the amount":"Sau s\u1ed1 ti\u1ec1n","Define where the currency should be located.":"X\u00e1c \u0111\u1ecbnh v\u1ecb tr\u00ed c\u1ee7a \u0111\u1ed3ng ti\u1ec1n.","Preferred Currency":"Ti\u1ec1n t\u1ec7 \u01b0a th\u00edch","ISO Currency":"Ngo\u1ea1i t\u1ec7","Symbol":"Bi\u1ec3u t\u01b0\u1ee3ng","Determine what is the currency indicator that should be used.":"X\u00e1c \u0111\u1ecbnh ch\u1ec9 s\u1ed1 ti\u1ec1n t\u1ec7 n\u00ean \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0 g\u00ec.","Currency Thousand Separator":"D\u1ea5u ph\u00e2n c\u00e1ch nh\u00f3m s\u1ed1","Currency Decimal Separator":"D\u1ea5u th\u1eadp ph\u00e2n","Define the symbol that indicate decimal number. By default \".\" is used.":"D\u1ea5u th\u1eadp ph\u00e2n l\u00e0 d\u1ea5u ch\u1ea5m hay d\u1ea5u ph\u1ea9y.","Currency Precision":"\u0110\u1ed9 ch\u00ednh x\u00e1c ti\u1ec1n t\u1ec7","%s numbers after the decimal":"%s s\u1ed1 ch\u1eef s\u1ed1 sau d\u1ea5u th\u1eadp ph\u00e2n","Date Format":"\u0110\u1ecbnh d\u1ea1ng ng\u00e0y","This define how the date should be defined. The default format is \"Y-m-d\".":"\u0110\u1ecbnh d\u1ea1ng ng\u00e0y \"dd-mm-yyyy\".","Registration":"C\u00e0i \u0111\u1eb7t","Registration Open":"M\u1edf c\u00e0i \u0111\u1eb7t","Determine if everyone can register.":"X\u00e1c \u0111\u1ecbnh xem m\u1ecdi ng\u01b0\u1eddi c\u00f3 th\u1ec3 c\u00e0i \u0111\u1eb7t hay kh\u00f4ng.","Registration Role":"C\u00e0i \u0111\u1eb7t nh\u00f3m quy\u1ec1n","Select what is the registration role.":"Ch\u1ecdn c\u00e0i \u0111\u1eb7t nh\u00f3m quy\u1ec1n g\u00ec.","Requires Validation":"Y\u00eau c\u1ea7u x\u00e1c th\u1ef1c","Force account validation after the registration.":"Bu\u1ed9c x\u00e1c th\u1ef1c t\u00e0i kho\u1ea3n sau khi \u0111\u0103ng k\u00fd.","Allow Recovery":"Cho ph\u00e9p kh\u00f4i ph\u1ee5c","Allow any user to recover his account.":"Cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng kh\u00f4i ph\u1ee5c t\u00e0i kho\u1ea3n c\u1ee7a h\u1ecd.","Receipts":"Thu ti\u1ec1n","Receipt Template":"M\u1eabu phi\u1ebfu thu","Default":"M\u1eb7c \u0111\u1ecbnh","Choose the template that applies to receipts":"Ch\u1ecdn m\u1eabu phi\u1ebfu thu","Receipt Logo":"Logo phi\u1ebfu thu","Provide a URL to the logo.":"Ch\u1ecdn \u0111\u01b0\u1eddng d\u1eabn cho logo.","Receipt Footer":"Ch\u00e2n trang phi\u1ebfu thu","If you would like to add some disclosure at the bottom of the receipt.":"N\u1ebfu b\u1ea1n mu\u1ed1n th\u00eam m\u1ed9t s\u1ed1 th\u00f4ng tin \u1edf cu\u1ed1i phi\u1ebfu thu.","Column A":"C\u1ed9t A","Column B":"C\u1ed9t B","Order Code Type":"Lo\u1ea1i m\u00e3 \u0111\u01a1n h\u00e0ng","Determine how the system will generate code for each orders.":"X\u00e1c \u0111\u1ecbnh c\u00e1ch h\u1ec7 th\u1ed1ng s\u1ebd t\u1ea1o m\u00e3 cho m\u1ed7i \u0111\u01a1n \u0111\u1eb7t h\u00e0ng.","Sequential":"Tu\u1ea7n t\u1ef1","Random Code":"M\u00e3 ng\u1eabu nhi\u00ean","Number Sequential":"S\u1ed1 t\u0103ng d\u1ea7n","Allow Unpaid Orders":"Cho ph\u00e9p b\u00e1n n\u1ee3","Will prevent incomplete orders to be placed. If credit is allowed, this option should be set to \"yes\".":"S\u1ebd ng\u0103n ch\u1eb7n c\u00e1c \u0111\u01a1n h\u00e0ng ch\u01b0a ho\u00e0n th\u00e0nh \u0111\u01b0\u1ee3c \u0111\u1eb7t. N\u1ebfu t\u00edn d\u1ee5ng \u0111\u01b0\u1ee3c cho ph\u00e9p, t\u00f9y ch\u1ecdn n\u00e0y n\u00ean \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh \"yes\".","Allow Partial Orders":"Cho ph\u00e9p tr\u1ea3 tr\u01b0\u1edbc, tr\u1ea3 t\u1eebng ph\u1ea7n","Will prevent partially paid orders to be placed.":"S\u1ebd ng\u0103n kh\u00f4ng cho c\u00e1c \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u01b0\u1ee3c thanh to\u00e1n m\u1ed9t ph\u1ea7n \u0111\u01b0\u1ee3c \u0111\u1eb7t.","Quotation Expiration":"H\u1ebft h\u1ea1n b\u00e1o gi\u00e1","Quotations will get deleted after they defined they has reached.":"Tr\u00edch d\u1eabn s\u1ebd b\u1ecb x\u00f3a sau khi h\u1ecd x\u00e1c \u0111\u1ecbnh r\u1eb1ng h\u1ecd \u0111\u00e3 \u0111\u1ea1t \u0111\u1ebfn.","%s Days":"%s ng\u00e0y","Features":"\u0110\u1eb7c tr\u01b0ng","Show Quantity":"Hi\u1ec3n th\u1ecb s\u1ed1 l\u01b0\u1ee3ng","Will show the quantity selector while choosing a product. Otherwise the default quantity is set to 1.":"S\u1ebd hi\u1ec3n th\u1ecb b\u1ed9 ch\u1ecdn s\u1ed1 l\u01b0\u1ee3ng trong khi ch\u1ecdn m\u1ed9t s\u1ea3n ph\u1ea9m. N\u1ebfu kh\u00f4ng, s\u1ed1 l\u01b0\u1ee3ng m\u1eb7c \u0111\u1ecbnh \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh 1.","Allow Customer Creation":"Cho ph\u00e9p kh\u00e1ch h\u00e0ng t\u1ea1o","Allow customers to be created on the POS.":"Cho ph\u00e9p t\u1ea1o kh\u00e1ch h\u00e0ng tr\u00ean m\u00e0n h\u00ecnh b\u00e1n h\u00e0ng.","Quick Product":"T\u1ea1o nhanh s\u1ea3n ph\u1ea9m","Allow quick product to be created from the POS.":"Cho ph\u00e9p t\u1ea1o s\u1ea3n ph\u1ea9m tr\u00ean m\u00e0n h\u00ecnh b\u00e1n h\u00e0ng.","Editable Unit Price":"C\u00f3 th\u1ec3 s\u1eeda gi\u00e1","Allow product unit price to be edited.":"Cho ph\u00e9p ch\u1ec9nh s\u1eeda \u0111\u01a1n gi\u00e1 s\u1ea3n ph\u1ea9m.","Order Types":"Lo\u1ea1i \u0111\u01a1n h\u00e0ng","Control the order type enabled.":"Ki\u1ec3m so\u00e1t lo\u1ea1i \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u01b0\u1ee3c b\u1eadt.","Layout":"Tr\u00ecnh b\u00e0y","Retail Layout":"B\u1ed1 c\u1ee5c b\u00e1n l\u1ebb","Clothing Shop":"C\u1eeda h\u00e0ng qu\u1ea7n \u00e1o","POS Layout":"B\u1ed1 tr\u00ed c\u1eeda h\u00e0ng","Change the layout of the POS.":"Thay \u0111\u1ed5i b\u1ed1 c\u1ee5c c\u1ee7a c\u1eeda h\u00e0ng.","Printing":"In \u1ea5n","Printed Document":"In t\u00e0i li\u1ec7u","Choose the document used for printing aster a sale.":"Ch\u1ecdn t\u00e0i li\u1ec7u \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 in sau khi b\u00e1n h\u00e0ng.","Printing Enabled For":"In \u0111\u01b0\u1ee3c K\u00edch ho\u1ea1t cho","All Orders":"T\u1ea5t c\u1ea3 \u0111\u01a1n h\u00e0ng","From Partially Paid Orders":"\u0110\u01a1n h\u00e0ng n\u1ee3","Only Paid Orders":"Ch\u1ec9 nh\u1eefng \u0111\u01a1n \u0111\u00e3 thanh to\u00e1n \u0111\u1ee7 ti\u1ec1n","Determine when the printing should be enabled.":"X\u00e1c \u0111\u1ecbnh khi n\u00e0o m\u00e1y in s\u1ebd in.","Printing Gateway":"C\u1ed5ng m\u00e1y in","Determine what is the gateway used for printing.":"X\u00e1c \u0111\u1ecbnh xem in m\u00e1y in n\u00e0o.","Enable Cash Registers":"B\u1eadt m\u00e1y t\u00ednh c\u00e1 nh\u00e2n","Determine if the POS will support cash registers.":"X\u00e1c \u0111\u1ecbnh xem m\u00e1y POS c\u00f3 h\u1ed7 tr\u1ee3 m\u00e1y t\u00ednh c\u00e1 nh\u00e2n hay kh\u00f4ng.","Cashier Idle Counter":"M\u00e0n h\u00ecnh ch\u1edd","5 Minutes":"5 ph\u00fat","10 Minutes":"10 ph\u00fat","15 Minutes":"15 ph\u00fat","20 Minutes":"20 ph\u00fat","30 Minutes":"30 ph\u00fat","Selected after how many minutes the system will set the cashier as idle.":"\u0110\u01b0\u1ee3c ch\u1ecdn sau bao nhi\u00eau ph\u00fat h\u1ec7 th\u1ed1ng s\u1ebd t\u1ef1 \u0111\u1ed9ng b\u1eadt ch\u1ebf \u0111\u1ed9 m\u00e0n h\u00ecnh ch\u1edd.","Cash Disbursement":"Tr\u1ea3 ti\u1ec1n m\u1eb7t","Allow cash disbursement by the cashier.":"Cho ph\u00e9p thu ng\u00e2n thanh to\u00e1n b\u1eb1ng ti\u1ec1n m\u1eb7t.","Cash Registers":"M\u00e1y t\u00ednh ti\u1ec1n","Keyboard Shortcuts":"C\u00e1c ph\u00edm t\u1eaft","Cancel Order":"H\u1ee7y \u0111\u01a1n h\u00e0ng","Keyboard shortcut to cancel the current order.":"Ph\u00edm t\u1eaft \u0111\u1ec3 h\u1ee7y \u0111\u01a1n h\u00e0ng hi\u1ec7n t\u1ea1i.","Keyboard shortcut to hold the current order.":"Ph\u00edm t\u1eaft \u0111\u1ec3 c\u1ea5t(gi\u1eef) \u0111\u01a1n hi\u1ec7n t\u1ea1i.","Keyboard shortcut to create a customer.":"Ph\u00edm t\u1eaft \u0111\u1ec3 t\u1ea1o m\u1edbi kh\u00e1ch h\u00e0ng.","Proceed Payment":"Ti\u1ebfn h\u00e0nh thanh to\u00e1n","Keyboard shortcut to proceed to the payment.":"Ph\u00edm t\u1eaft \u0111\u1ec3 thanh to\u00e1n.","Open Shipping":"M\u1edf v\u1eadn chuy\u1ec3n","Keyboard shortcut to define shipping details.":"Ph\u00edm t\u1eaft \u0111\u1ec3 x\u00e1c \u0111\u1ecbnh chi ti\u1ebft v\u1eadn chuy\u1ec3n.","Open Note":"Ghi ch\u00fa","Keyboard shortcut to open the notes.":"Ph\u00edm t\u1eaft \u0111\u1ec3 m\u1edf ghi ch\u00fa.","Order Type Selector":"Ch\u1ecdn lo\u1ea1i \u0111\u01a1n h\u00e0ng","Keyboard shortcut to open the order type selector.":"Ph\u00edm t\u1eaft \u0111\u1ec3 ch\u1ecdn lo\u1ea1i \u0111\u01a1n.","Toggle Fullscreen":"Ch\u1ebf \u0111\u1ed9 to\u00e0n m\u00e0n h\u00ecnh","Keyboard shortcut to toggle fullscreen.":"Ph\u00edm t\u1eaft \u0111\u1ec3 b\u1eadt ch\u1ebf \u0111\u1ed9 to\u00e0n m\u00e0n h\u00ecnh.","Quick Search":"T\u00ecm nhanh","Keyboard shortcut open the quick search popup.":"Ph\u00edm t\u1eaft \u0111\u1ec3 t\u00ecm nhanh.","Amount Shortcuts":"Ph\u00edm t\u1eaft s\u1ed1 ti\u1ec1n","VAT Type":"Ki\u1ec3u thu\u1ebf","Determine the VAT type that should be used.":"X\u00e1c \u0111\u1ecbnh ki\u1ec3u thu\u1ebf.","Flat Rate":"T\u1ef7 l\u1ec7 c\u1ed1 \u0111\u1ecbnh","Flexible Rate":"T\u1ef7 l\u1ec7 linh ho\u1ea1t","Products Vat":"Thu\u1ebf s\u1ea3n ph\u1ea9m","Products & Flat Rate":"S\u1ea3n ph\u1ea9m & T\u1ef7 l\u1ec7 c\u1ed1 \u0111\u1ecbnh","Products & Flexible Rate":"S\u1ea3n ph\u1ea9m & T\u1ef7 l\u1ec7 linh ho\u1ea1t","Define the tax group that applies to the sales.":"X\u00e1c \u0111\u1ecbnh nh\u00f3m thu\u1ebf \u00e1p d\u1ee5ng cho vi\u1ec7c b\u00e1n h\u00e0ng.","Define how the tax is computed on sales.":"X\u00e1c \u0111\u1ecbnh c\u00e1ch t\u00ednh thu\u1ebf khi b\u00e1n h\u00e0ng.","VAT Settings":"C\u00e0i \u0111\u1eb7t thu\u1ebf GTGT","Enable Email Reporting":"B\u1eadt b\u00e1o c\u00e1o qua email","Determine if the reporting should be enabled globally.":"X\u00e1c \u0111\u1ecbnh xem c\u00f3 n\u00ean b\u1eadt b\u00e1o c\u00e1o tr\u00ean to\u00e0n c\u1ea7u hay kh\u00f4ng.","Supplies":"Cung c\u1ea5p","Public Name":"T\u00ean c\u00f4ng khai","Define what is the user public name. If not provided, the username is used instead.":"X\u00e1c \u0111\u1ecbnh t\u00ean c\u00f4ng khai c\u1ee7a ng\u01b0\u1eddi d\u00f9ng l\u00e0 g\u00ec. N\u1ebfu kh\u00f4ng \u0111\u01b0\u1ee3c cung c\u1ea5p, t\u00ean ng\u01b0\u1eddi d\u00f9ng s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng thay th\u1ebf.","Enable Workers":"Cho ph\u00e9p nh\u00e2n vi\u00ean","Test":"Ki\u1ec3m tra","Current Week":"Tu\u1ea7n n\u00e0y","Previous Week":"Tu\u1ea7n tr\u01b0\u1edbc","There is no migrations to perform for the module \"%s\"":"Kh\u00f4ng c\u00f3 chuy\u1ec3n \u0111\u1ed5i n\u00e0o \u0111\u1ec3 th\u1ef1c hi\u1ec7n cho module \"%s\"","The module migration has successfully been performed for the module \"%s\"":"Qu\u00e1 tr\u00ecnh di chuy\u1ec3n module \u0111\u00e3 \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n th\u00e0nh c\u00f4ng cho module \"%s\"","Sales By Payment Types":"B\u00e1n h\u00e0ng theo c\u00e1c h\u00ecnh th\u1ee9c thanh to\u00e1n","Provide a report of the sales by payment types, for a specific period.":"Cung c\u1ea5p b\u00e1o c\u00e1o doanh s\u1ed1 b\u00e1n h\u00e0ng theo c\u00e1c h\u00ecnh th\u1ee9c thanh to\u00e1n, trong m\u1ed9t kho\u1ea3ng th\u1eddi gian c\u1ee5 th\u1ec3.","Sales By Payments":"B\u00e1n h\u00e0ng theo phi\u1ebfu thu","Order Settings":"C\u00e0i \u0111\u1eb7t \u0111\u01a1n h\u00e0ng","Define the order name.":"Nh\u1eadp t\u00ean c\u1ee7a \u0111\u01a1n h\u00e0ng","Define the date of creation of the order.":"Nh\u1eadp ng\u00e0y t\u1ea1o \u0111\u01a1n","Total Refunds":"T\u1ed5ng s\u1ed1 ti\u1ec1n ho\u00e0n l\u1ea1i","Clients Registered":"Kh\u00e1ch h\u00e0ng \u0111\u00e3 \u0111\u0103ng k\u00fd","Commissions":"Ti\u1ec1n hoa h\u1ed3ng","Processing Status":"Tr\u1ea1ng th\u00e1i","Refunded Products":"S\u1ea3n ph\u1ea9m \u0111\u01b0\u1ee3c ho\u00e0n ti\u1ec1n","The delivery status of the order will be changed. Please confirm your action.":"Tr\u1ea1ng th\u00e1i giao h\u00e0ng c\u1ee7a \u0111\u01a1n h\u00e0ng s\u1ebd \u0111\u01b0\u1ee3c thay \u0111\u1ed5i. Vui l\u00f2ng x\u00e1c nh\u1eadn.","The product price has been updated.":"Gi\u00e1 s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","The editable price feature is disabled.":"Ch\u1ee9c n\u0103ng c\u00f3 th\u1ec3 s\u1eeda gi\u00e1 b\u1ecb t\u1eaft.","Order Refunds":"Ho\u00e0n l\u1ea1i ti\u1ec1n cho \u0111\u01a1n h\u00e0ng","Product Price":"Gi\u00e1 s\u1ea3n ph\u1ea9m","Unable to proceed":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c","Partially paid orders are disabled.":"\u0110\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00e3 thanh to\u00e1n m\u1ed9t ph\u1ea7n b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a.","An order is currently being processed.":"M\u1ed9t \u0111\u01a1n \u0111\u1eb7t h\u00e0ng hi\u1ec7n \u0111ang \u0111\u01b0\u1ee3c x\u1eed l\u00fd.","Log out":"Tho\u00e1t","Refund receipt":"Bi\u00ean lai ho\u00e0n ti\u1ec1n","Recompute":"T\u00ednh l\u1ea1i","Sort Results":"S\u1eafp x\u1ebfp k\u1ebft qu\u1ea3","Using Quantity Ascending":"S\u1eed d\u1ee5ng s\u1ed1 l\u01b0\u1ee3ng t\u0103ng d\u1ea7n","Using Quantity Descending":"S\u1eed d\u1ee5ng s\u1ed1 l\u01b0\u1ee3ng gi\u1ea3m d\u1ea7n","Using Sales Ascending":"S\u1eed d\u1ee5ng B\u00e1n h\u00e0ng t\u0103ng d\u1ea7n","Using Sales Descending":"S\u1eed d\u1ee5ng B\u00e1n h\u00e0ng gi\u1ea3m d\u1ea7n","Using Name Ascending":"S\u1eed d\u1ee5ng t\u00ean t\u0103ng d\u1ea7n","Using Name Descending":"S\u1eed d\u1ee5ng t\u00ean gi\u1ea3m d\u1ea7n","Progress":"Ti\u1ebfn h\u00e0nh","Discounts":"Chi\u1ebft kh\u1ea5u","An invalid date were provided. Make sure it a prior date to the actual server date.":"M\u1ed9t ng\u00e0y kh\u00f4ng h\u1ee3p l\u1ec7 \u0111\u00e3 \u0111\u01b0\u1ee3c nh\u1eadp. H\u00e3y ch\u1eafc ch\u1eafn r\u1eb1ng \u0111\u00f3 l\u00e0 m\u1ed9t ng\u00e0y tr\u01b0\u1edbc ng\u00e0y hi\u1ec7n t\u1ea1i.","Computing report from %s...":"T\u00ednh t\u1eeb %s...","The demo has been enabled.":"Ch\u1ebf \u0111\u1ed9 demo \u0111\u00e3 \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t.","Refund Receipt":"Bi\u00ean lai ho\u00e0n l\u1ea1i ti\u1ec1n","Codabar":"Codabar","Code 128":"Code 128","Code 39":"Code 39","Code 11":"Code 11","UPC A":"UPC A","UPC E":"UPC E","Store Dashboard":"Trang t\u1ed5ng quan c\u1eeda h\u00e0ng","Cashier Dashboard":"B\u1ea3ng \u0111i\u1ec1u khi\u1ec3n thu ng\u00e2n","Default Dashboard":"B\u1ea3ng \u0111i\u1ec1u khi\u1ec3n m\u1eb7c \u0111\u1ecbnh","%s has been processed, %s has not been processed.":"%s \u0111ang \u0111\u01b0\u1ee3c ti\u1ebfn h\u00e0nh, %s kh\u00f4ng \u0111\u01b0\u1ee3c ti\u1ebfn h\u00e0nh.","Order Refund Receipt — %s":"Bi\u00ean lai ho\u00e0n l\u1ea1i ti\u1ec1n cho \u0111\u01a1n \u0111\u1eb7t h\u00e0ng — %s","Provides an overview over the best products sold during a specific period.":"Cung c\u1ea5p th\u00f4ng tin t\u1ed5ng quan v\u1ec1 c\u00e1c s\u1ea3n ph\u1ea9m t\u1ed1t nh\u1ea5t \u0111\u01b0\u1ee3c b\u00e1n trong m\u1ed9t kho\u1ea3ng th\u1eddi gian c\u1ee5 th\u1ec3.","The report will be computed for the current year.":"B\u00e1o c\u00e1o s\u1ebd \u0111\u01b0\u1ee3c t\u00ednh cho n\u0103m hi\u1ec7n t\u1ea1i.","Unknown report to refresh.":"B\u00e1o c\u00e1o kh\u00f4ng x\u00e1c \u0111\u1ecbnh c\u1ea7n l\u00e0m m\u1edbi.","Report Refreshed":"L\u00e0m m\u1edbi b\u00e1o c\u00e1o","The yearly report has been successfully refreshed for the year \"%s\".":"B\u00e1o c\u00e1o h\u00e0ng n\u0103m \u0111\u00e3 \u0111\u01b0\u1ee3c l\u00e0m m\u1edbi th\u00e0nh c\u00f4ng cho n\u0103m \"%s\".","Countable":"\u0110\u1ebfm \u0111\u01b0\u1ee3c","Piece":"M\u1ea3nh","GST":"GST","SGST":"SGST","CGST":"CGST","Sample Procurement %s":"Mua s\u1eafm m\u1eabu %s","generated":"\u0111\u01b0\u1ee3c t\u1ea1o ra","Not Available":"Kh\u00f4ng c\u00f3 s\u1eb5n","The report has been computed successfully.":"B\u00e1o c\u00e1o \u0111\u00e3 \u0111\u01b0\u1ee3c t\u00ednh th\u00e0nh c\u00f4ng.","Create a customer":"T\u1ea1o kh\u00e1ch h\u00e0ng","Credit":"T\u00edn d\u1ee5ng","Debit":"Ghi n\u1ee3","All entities attached to this category will either produce a \"credit\" or \"debit\" to the cash flow history.":"T\u1ea5t c\u1ea3 c\u00e1c th\u1ef1c th\u1ec3 \u0111\u01b0\u1ee3c \u0111\u00ednh k\u00e8m v\u1edbi danh m\u1ee5c n\u00e0y s\u1ebd t\u1ea1o ra m\u1ed9t \"ghi n\u1ee3\" hay \"ghi c\u00f3\" v\u00e0o l\u1ecbch s\u1eed d\u00f2ng ti\u1ec1n.","Account":"T\u00e0i kho\u1ea3n","Provide the accounting number for this category.":"Cung c\u1ea5p t\u00e0i kho\u1ea3n k\u1ebf to\u00e1n cho nh\u00f3m n\u00e0y.","Accounting":"K\u1ebf to\u00e1n","Procurement Cash Flow Account":"Nh\u1eadt k\u00fd mua h\u00e0ng","Sale Cash Flow Account":"Nh\u1eadt k\u00fd b\u00e1n h\u00e0ng","Sales Refunds Account":"H\u00e0ng b\u00e1n b\u1ecb tr\u1ea3 l\u1ea1i","Stock return for spoiled items will be attached to this account":"Tr\u1ea3 l\u1ea1i h\u00e0ng cho c\u00e1c m\u1eb7t h\u00e0ng h\u01b0 h\u1ecfng s\u1ebd \u0111\u01b0\u1ee3c \u0111\u00ednh k\u00e8m v\u00e0o t\u00e0i kho\u1ea3n n\u00e0y","The reason has been updated.":"L\u00fd do \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","You must select a customer before applying a coupon.":"B\u1ea1n ph\u1ea3i ch\u1ecdn m\u1ed9t kh\u00e1ch h\u00e0ng tr\u01b0\u1edbc khi \u00e1p d\u1ee5ng phi\u1ebfu gi\u1ea3m gi\u00e1.","No coupons for the selected customer...":"Kh\u00f4ng c\u00f3 phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0o cho kh\u00e1ch h\u00e0ng \u0111\u00e3 ch\u1ecdn...","Use Coupon":"S\u1eed d\u1ee5ng phi\u1ebfu gi\u1ea3m gi\u00e1","Use Customer ?":"S\u1eed d\u1ee5ng kh\u00e1ch h\u00e0ng ?","No customer is selected. Would you like to proceed with this customer ?":"Kh\u00f4ng c\u00f3 kh\u00e1ch h\u00e0ng n\u00e0o \u0111\u01b0\u1ee3c ch\u1ecdn. B\u1ea1n c\u00f3 mu\u1ed1n ti\u1ebfp t\u1ee5c v\u1edbi kh\u00e1ch h\u00e0ng n\u00e0y kh\u00f4ng ?","Change Customer ?":"Thay \u0111\u1ed5i kh\u00e1ch h\u00e0ng ?","Would you like to assign this customer to the ongoing order ?":"B\u1ea1n c\u00f3 mu\u1ed1n ch\u1ec9 \u0111\u1ecbnh kh\u00e1ch h\u00e0ng n\u00e0y cho \u0111\u01a1n h\u00e0ng \u0111ang di\u1ec5n ra kh\u00f4ng ?","Product \/ Service":"H\u00e0ng h\u00f3a \/ D\u1ecbch v\u1ee5","An error has occurred while computing the product.":"\u0110\u00e3 x\u1ea3y ra l\u1ed7i khi t\u00ednh to\u00e1n s\u1ea3n ph\u1ea9m.","Provide a unique name for the product.":"Cung c\u1ea5p m\u1ed9t t\u00ean duy nh\u1ea5t cho s\u1ea3n ph\u1ea9m.","Define what is the sale price of the item.":"X\u00e1c \u0111\u1ecbnh gi\u00e1 b\u00e1n c\u1ee7a m\u1eb7t h\u00e0ng l\u00e0 bao nhi\u00eau.","Set the quantity of the product.":"\u0110\u1eb7t s\u1ed1 l\u01b0\u1ee3ng s\u1ea3n ph\u1ea9m.","Define what is tax type of the item.":"X\u00e1c \u0111\u1ecbnh lo\u1ea1i thu\u1ebf c\u1ee7a m\u1eb7t h\u00e0ng l\u00e0 g\u00ec.","Choose the tax group that should apply to the item.":"Ch\u1ecdn nh\u00f3m thu\u1ebf s\u1ebd \u00e1p d\u1ee5ng cho m\u1eb7t h\u00e0ng.","Assign a unit to the product.":"G\u00e1n \u0111vt cho s\u1ea3n ph\u1ea9m.","Some products has been added to the cart. Would youl ike to discard this order ?":"M\u1ed9t s\u1ed1 s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c th\u00eam v\u00e0o gi\u1ecf h\u00e0ng. B\u1ea1n c\u00f3 mu\u1ed1n h\u1ee7y \u0111\u01a1n \u0111\u1eb7t h\u00e0ng n\u00e0y kh\u00f4ng ?","Customer Accounts List":"Danh s\u00e1ch t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng","Display all customer accounts.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 c\u00e1c t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng.","No customer accounts has been registered":"Kh\u00f4ng c\u00f3 t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new customer account":"Th\u00eam t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng m\u1edbi","Create a new customer account":"T\u1ea1o t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng m\u1edbi","Register a new customer account and save it.":"\u0110\u0103ng k\u00fd t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng m\u1edbi v\u00e0 l\u01b0u n\u00f3.","Edit customer account":"S\u1eeda t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng","Modify Customer Account.":"C\u1eadp nh\u1eadt t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng.","Return to Customer Accounts":"Tr\u1edf l\u1ea1i t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng","This will be ignored.":"\u0110i\u1ec1u n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c b\u1ecf qua.","Define the amount of the transaction":"X\u00e1c \u0111\u1ecbnh s\u1ed1 ti\u1ec1n c\u1ee7a giao d\u1ecbch","Define what operation will occurs on the customer account.":"X\u00e1c \u0111\u1ecbnh thao t\u00e1c n\u00e0o s\u1ebd x\u1ea3y ra tr\u00ean t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng.","Provider Procurements List":"Danh s\u00e1ch Mua h\u00e0ng c\u1ee7a Nh\u00e0 cung c\u1ea5p","Display all provider procurements.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 c\u00e1c mua h\u00e0ng c\u1ee7a nh\u00e0 cung c\u1ea5p.","No provider procurements has been registered":"Kh\u00f4ng c\u00f3 mua s\u1eafm nh\u00e0 cung c\u1ea5p n\u00e0o \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new provider procurement":"Th\u00eam mua s\u1eafm nh\u00e0 cung c\u1ea5p m\u1edbi","Create a new provider procurement":"T\u1ea1o mua s\u1eafm nh\u00e0 cung c\u1ea5p m\u1edbi","Register a new provider procurement and save it.":"\u0110\u0103ng k\u00fd mua s\u1eafm nh\u00e0 cung c\u1ea5p m\u1edbi v\u00e0 l\u01b0u n\u00f3.","Edit provider procurement":"Ch\u1ec9nh s\u1eeda mua h\u00e0ng c\u1ee7a nh\u00e0 cung c\u1ea5p","Modify Provider Procurement.":"C\u1eadp nh\u1eadt mua h\u00e0ng c\u1ee7a nh\u00e0 cung c\u1ea5p.","Return to Provider Procurements":"Tr\u1edf l\u1ea1i Mua s\u1eafm c\u1ee7a Nh\u00e0 cung c\u1ea5p","Delivered On":"\u0110\u00e3 giao v\u00e0o","Items":"M\u1eb7t h\u00e0ng","Displays the customer account history for %s":"Hi\u1ec3n th\u1ecb l\u1ecbch s\u1eed t\u00e0i kho\u1ea3n kh\u00e1ch h\u00e0ng cho %s","Procurements by \"%s\"":"Cung c\u1ea5p b\u1edfi \"%s\"","Crediting":"T\u00edn d\u1ee5ng","Deducting":"Kh\u1ea5u tr\u1eeb","Order Payment":"Thanh to\u00e1n \u0111\u01a1n \u0111\u1eb7t h\u00e0ng","Order Refund":"\u0110\u01a1n h\u00e0ng tr\u1ea3 l\u1ea1i","Unknown Operation":"Ho\u1ea1t \u0111\u1ed9ng kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Unnamed Product":"S\u1ea3n ph\u1ea9m ch\u01b0a \u0111\u01b0\u1ee3c \u0111\u1eb7t t\u00ean","Bubble":"Bubble","Ding":"Ding","Pop":"Pop","Cash Sound":"Cash Sound","Sale Complete Sound":"\u00c2m thanh ho\u00e0n th\u00e0nh vi\u1ec7c b\u00e1n h\u00e0ng","New Item Audio":"\u00c2m thanh th\u00eam m\u1ee5c m\u1edbi","The sound that plays when an item is added to the cart.":"\u00c2m thanh ph\u00e1t khi m\u1ed9t m\u1eb7t h\u00e0ng \u0111\u01b0\u1ee3c th\u00eam v\u00e0o gi\u1ecf h\u00e0ng.","Howdy, {name}":"Ch\u00e0o, {name}","Would you like to perform the selected bulk action on the selected entries ?":"B\u1ea1n c\u00f3 mu\u1ed1n th\u1ef1c hi\u1ec7n h\u00e0nh \u0111\u1ed9ng h\u00e0ng lo\u1ea1t \u0111\u00e3 ch\u1ecdn tr\u00ean c\u00e1c m\u1ee5c \u0111\u00e3 ch\u1ecdn kh\u00f4ng ?","The payment to be made today is less than what is expected.":"Kho\u1ea3n thanh to\u00e1n s\u1ebd \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n ng\u00e0y h\u00f4m nay \u00edt h\u01a1n nh\u1eefng g\u00ec d\u1ef1 ki\u1ebfn.","Unable to select the default customer. Looks like the customer no longer exists. Consider changing the default customer on the settings.":"Kh\u00f4ng th\u1ec3 ch\u1ecdn kh\u00e1ch h\u00e0ng m\u1eb7c \u0111\u1ecbnh. C\u00f3 v\u1ebb nh\u01b0 kh\u00e1ch h\u00e0ng kh\u00f4ng c\u00f2n t\u1ed3n t\u1ea1i. Xem x\u00e9t thay \u0111\u1ed5i kh\u00e1ch h\u00e0ng m\u1eb7c \u0111\u1ecbnh tr\u00ean c\u00e0i \u0111\u1eb7t.","How to change database configuration":"C\u00e1ch thay \u0111\u1ed5i c\u1ea5u h\u00ecnh c\u01a1 s\u1edf d\u1eef li\u1ec7u","Common Database Issues":"C\u00e1c v\u1ea5n \u0111\u1ec1 chung v\u1ec1 c\u01a1 s\u1edf d\u1eef li\u1ec7u","Setup":"C\u00e0i \u0111\u1eb7t","Query Exception":"Truy v\u1ea5n","The category products has been refreshed":"Nh\u00f3m s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c l\u00e0m m\u1edbi","The requested customer cannot be found.":"Kh\u00f4ng t\u00ecm th\u1ea5y kh\u00e1ch h\u00e0ng.","Filters":"L\u1ecdc","Has Filters":"B\u1ed9 l\u1ecdc","N\/D":"N\/D","Range Starts":"Ph\u1ea1m vi b\u1eaft \u0111\u1ea7u","Range Ends":"Ph\u1ea1m vi k\u1ebft th\u00fac","Search Filters":"B\u1ed9 l\u1ecdc t\u00ecm ki\u1ebfm","Clear Filters":"X\u00f3a b\u1ed9 l\u1ecdc","Use Filters":"S\u1eed d\u1ee5ng b\u1ed9 l\u1ecdc","No rewards available the selected customer...":"Kh\u00f4ng c\u00f3 ph\u1ea7n th\u01b0\u1edfng n\u00e0o cho kh\u00e1ch h\u00e0ng \u0111\u00e3 ch\u1ecdn...","Unable to load the report as the timezone is not set on the settings.":"Kh\u00f4ng th\u1ec3 t\u1ea3i b\u00e1o c\u00e1o v\u00ec m\u00fai gi\u1edd kh\u00f4ng \u0111\u01b0\u1ee3c \u0111\u1eb7t trong c\u00e0i \u0111\u1eb7t.","There is no product to display...":"Kh\u00f4ng c\u00f3 s\u1ea3n ph\u1ea9m \u0111\u1ec3 hi\u1ec3n th\u1ecb...","Method Not Allowed":"Ph\u01b0\u01a1ng ph\u00e1p kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p","Documentation":"T\u00e0i li\u1ec7u","Module Version Mismatch":"Phi\u00ean b\u1ea3n m\u00f4-\u0111un kh\u00f4ng kh\u1edbp","Define how many time the coupon has been used.":"X\u00e1c \u0111\u1ecbnh s\u1ed1 l\u1ea7n phi\u1ebfu th\u01b0\u1edfng \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng.","Define the maximum usage possible for this coupon.":"X\u00e1c \u0111\u1ecbnh m\u1ee9c s\u1eed d\u1ee5ng t\u1ed1i \u0111a c\u00f3 th\u1ec3 cho phi\u1ebfu gi\u1ea3m gi\u00e1 n\u00e0y.","Restrict the orders by the creation date.":"H\u1ea1n ch\u1ebf c\u00e1c \u0111\u01a1n \u0111\u1eb7t h\u00e0ng tr\u01b0\u1edbc ng\u00e0y t\u1ea1o.","Created Between":"\u0110\u01b0\u1ee3c t\u1ea1o ra gi\u1eefa","Restrict the orders by the payment status.":"H\u1ea1n ch\u1ebf c\u00e1c \u0111\u01a1n \u0111\u1eb7t h\u00e0ng theo tr\u1ea1ng th\u00e1i thanh to\u00e1n.","Due With Payment":"\u0110\u1ebfn h\u1ea1n thanh to\u00e1n","Restrict the orders by the author.":"H\u1ea1n ch\u1ebf c\u00e1c \u0111\u01a1n \u0111\u1eb7t h\u00e0ng c\u1ee7a ng\u01b0\u1eddi d\u00f9ng.","Restrict the orders by the customer.":"H\u1ea1n ch\u1ebf c\u00e1c \u0111\u01a1n \u0111\u1eb7t h\u00e0ng c\u1ee7a kh\u00e1ch h\u00e0ng.","Customer Phone":"\u0110i\u1ec7n tho\u1ea1i c\u1ee7a kh\u00e1ch h\u00e0ng","Restrict orders using the customer phone number.":"H\u1ea1n ch\u1ebf \u0111\u1eb7t h\u00e0ng s\u1eed d\u1ee5ng s\u1ed1 \u0111i\u1ec7n tho\u1ea1i c\u1ee7a kh\u00e1ch h\u00e0ng.","Restrict the orders to the cash registers.":"H\u1ea1n ch\u1ebf c\u00e1c \u0111\u01a1n \u0111\u1eb7t h\u00e0ng cho m\u00e1y t\u00ednh ti\u1ec1n.","Low Quantity":"S\u1ed1 l\u01b0\u1ee3ng t\u1ed1i thi\u1ec3u","Which quantity should be assumed low.":"S\u1ed1 l\u01b0\u1ee3ng n\u00e0o n\u00ean \u0111\u01b0\u1ee3c gi\u1ea3 \u0111\u1ecbnh l\u00e0 th\u1ea5p.","Stock Alert":"C\u1ea3nh b\u00e1o h\u00e0ng t\u1ed3n kho","See Products":"Xem S\u1ea3n ph\u1ea9m","Provider Products List":"Provider Products List","Display all Provider Products.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 c\u00e1c S\u1ea3n ph\u1ea9m c\u1ee7a Nh\u00e0 cung c\u1ea5p.","No Provider Products has been registered":"Kh\u00f4ng c\u00f3 S\u1ea3n ph\u1ea9m c\u1ee7a Nh\u00e0 cung c\u1ea5p n\u00e0o \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new Provider Product":"Th\u00eam m\u1edbi s\u1ea3n ph\u1ea9m","Create a new Provider Product":"T\u1ea1o m\u1edbi s\u1ea3n ph\u1ea9m","Register a new Provider Product and save it.":"\u0110\u0103ng k\u00fd m\u1edbi s\u1ea3n ph\u1ea9m.","Edit Provider Product":"S\u1eeda s\u1ea3n ph\u1ea9m","Modify Provider Product.":"C\u1eadp nh\u1eadt s\u1ea3n ph\u1ea9m.","Return to Provider Products":"Quay l\u1ea1i s\u1ea3n ph\u1ea9m","Clone":"Sao ch\u00e9p","Would you like to clone this role ?":"B\u1ea1n c\u00f3 mu\u1ed1n sao ch\u00e9p quy\u1ec1n n\u00e0y kh\u00f4ng ?","Incompatibility Exception":"Ngo\u1ea1i l\u1ec7 kh\u00f4ng t\u01b0\u01a1ng th\u00edch","The requested file cannot be downloaded or has already been downloaded.":"Kh\u00f4ng th\u1ec3 t\u1ea3i xu\u1ed1ng t\u1ec7p \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u ho\u1eb7c \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea3i xu\u1ed1ng.","Low Stock Report":"B\u00e1o c\u00e1o h\u00e0ng t\u1ed3n kho t\u1ed1i thi\u1ec3u","Low Stock Alert":"C\u1ea3nh b\u00e1o h\u00e0ng t\u1ed3n kho th\u1ea5p","The module \"%s\" has been disabled as the dependency \"%s\" is not on the minimum required version \"%s\". ":"M\u00f4 \u0111un \"%s\" \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a v\u00ec ph\u1ee5 thu\u1ed9c \"%s\" kh\u00f4ng ph\u1ea3i l\u00e0 phi\u00ean b\u1ea3n y\u00eau c\u1ea7u t\u1ed1i thi\u1ec3u \"%s\". ","The module \"%s\" has been disabled as the dependency \"%s\" is on a version beyond the recommended \"%s\". ":"M\u00f4 \u0111un \"%s\" \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a v\u00ec ph\u1ee5 thu\u1ed9c \"%s\" l\u00e0 tr\u00ean m\u1ed9t phi\u00ean b\u1ea3n ngo\u00e0i khuy\u1ebfn ngh\u1ecb \"%s\". ","Clone of \"%s\"":"B\u1ea3n sao c\u1ee7a \"%s\"","The role has been cloned.":"Quy\u1ec1n \u0111\u00e3 \u0111\u01b0\u1ee3c sao ch\u00e9p.","Merge Products On Receipt\/Invoice":"G\u1ed9p s\u1ea3n ph\u1ea9m c\u00f9ng m\u00e3, t\u00ean tr\u00ean phi\u1ebfu thu\/H\u00f3a \u0111\u01a1n","All similar products will be merged to avoid a paper waste for the receipt\/invoice.":"T\u1ea5t c\u1ea3 c\u00e1c s\u1ea3n ph\u1ea9m t\u01b0\u01a1ng t\u1ef1 s\u1ebd \u0111\u01b0\u1ee3c h\u1ee3p nh\u1ea5t \u0111\u1ec3 tr\u00e1nh l\u00e3ng ph\u00ed gi\u1ea5y cho phi\u1ebfu thu\/h\u00f3a \u0111\u01a1n.","Define whether the stock alert should be enabled for this unit.":"X\u00e1c \u0111\u1ecbnh xem c\u00f3 n\u00ean b\u1eadt c\u1ea3nh b\u00e1o c\u00f2n h\u00e0ng cho \u0111\u01a1n v\u1ecb t\u00ednh n\u00e0y hay kh\u00f4ng.","All Refunds":"T\u1ea5t c\u1ea3 c\u00e1c kho\u1ea3n tr\u1ea3 l\u1ea1i","No result match your query.":"Kh\u00f4ng c\u00f3 k\u1ebft qu\u1ea3 n\u00e0o ph\u00f9 h\u1ee3p v\u1edbi t\u00ecm ki\u1ebfm c\u1ee7a b\u1ea1n.","Report Type":"Lo\u1ea1i b\u00e1o c\u00e1o","Categories Detailed":"Chi ti\u1ebft nh\u00f3m","Categories Summary":"T\u1ed5ng nh\u00f3m","Allow you to choose the report type.":"Cho ph\u00e9p b\u1ea1n ch\u1ecdn lo\u1ea1i b\u00e1o c\u00e1o.","Unknown":"kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Not Authorized":"Kh\u00f4ng c\u00f3 quy\u1ec1n","Creating customers has been explicitly disabled from the settings.":"Vi\u1ec7c t\u1ea1o m\u1edbi kh\u00e1ch h\u00e0ng \u0111\u01b0\u1ee3c v\u00f4 hi\u1ec7u h\u00f3a trong khi c\u00e0i \u0111\u1eb7t h\u1ec7 th\u1ed1ng.","Sales Discounts":"Chi\u1ebft kh\u1ea5u","Sales Taxes":"Thu\u1ebf","Birth Date":"Ng\u00e0y sinh","Displays the customer birth date":"Hi\u1ec7n ng\u00e0y sinh kh\u00e1ch h\u00e0ng","Sale Value":"Ti\u1ec1n b\u00e1n","Purchase Value":"Ti\u1ec1n mua","Would you like to refresh this ?":"B\u1ea1n c\u00f3 mu\u1ed1n l\u00e0m m\u1edbi c\u00e1i n\u00e0y kh\u00f4ng ?","You cannot delete your own account.":"B\u1ea1n kh\u00f4ng th\u1ec3 x\u00f3a t\u00e0i kho\u1ea3n c\u1ee7a m\u00ecnh.","Sales Progress":"Ti\u1ebfn \u0111\u1ed9 b\u00e1n h\u00e0ng","Procurement Refreshed":"Mua s\u1eafm \u0111\u01b0\u1ee3c l\u00e0m m\u1edbi","The procurement \"%s\" has been successfully refreshed.":"Mua h\u00e0ng \"%s\" \u0111\u00e3 \u0111\u01b0\u1ee3c l\u00e0m m\u1edbi th\u00e0nh c\u00f4ng.","Partially Due":"\u0110\u1ebfn h\u1ea1n","No payment type has been selected on the settings. Please check your POS features and choose the supported order type":"Kh\u00f4ng c\u00f3 h\u00ecnh th\u1ee9c thanh to\u00e1n n\u00e0o \u0111\u01b0\u1ee3c ch\u1ecdn trong c\u00e0i \u0111\u1eb7t. Vui l\u00f2ng ki\u1ec3m tra c\u00e1c t\u00ednh n\u0103ng POS c\u1ee7a b\u1ea1n v\u00e0 ch\u1ecdn lo\u1ea1i \u0111\u01a1n h\u00e0ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3","Read More":"Chi ti\u1ebft","Wipe All":"L\u00e0m t\u01b0\u01a1i t\u1ea5t c\u1ea3","Wipe Plus Grocery":"L\u00e0m t\u01b0\u01a1i c\u1eeda h\u00e0ng","Accounts List":"Danh s\u00e1ch t\u00e0i kho\u1ea3n","Display All Accounts.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 t\u00e0i kho\u1ea3n.","No Account has been registered":"Ch\u01b0a c\u00f3 t\u00e0i kho\u1ea3n n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new Account":"Th\u00eam m\u1edbi t\u00e0i kho\u1ea3n","Create a new Account":"T\u1ea1o m\u1edbi t\u00e0i kho\u1ea3n","Register a new Account and save it.":"\u0110\u0103ng k\u00fd m\u1edbi t\u00e0i kho\u1ea3n v\u00e0 l\u01b0u l\u1ea1i.","Edit Account":"S\u1eeda t\u00e0i kho\u1ea3n","Modify An Account.":"C\u1eadp nh\u1eadt t\u00e0i kho\u1ea3n.","Return to Accounts":"Tr\u1edf l\u1ea1i t\u00e0i kho\u1ea3n","Accounts":"T\u00e0i kho\u1ea3n","Create Account":"T\u1ea1o t\u00e0i kho\u1ea3n","Payment Method":"Ph\u01b0\u01a1ng th\u1ee9c thanh to\u00e1n","Before submitting the payment, choose the payment type used for that order.":"Tr\u01b0\u1edbc khi g\u1eedi thanh to\u00e1n, h\u00e3y ch\u1ecdn h\u00ecnh th\u1ee9c thanh to\u00e1n \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u00f3.","Select the payment type that must apply to the current order.":"Select the payment type that must apply to the current order.","Payment Type":"H\u00ecnh th\u1ee9c thanh to\u00e1n","Remove Image":"X\u00f3a \u1ea3nh","This form is not completely loaded.":"Bi\u1ec3u m\u1eabu n\u00e0y ch\u01b0a \u0111\u01b0\u1ee3c t\u1ea3i ho\u00e0n to\u00e0n.","Updating":"\u0110ang c\u1eadp nh\u1eadt","Updating Modules":"C\u1eadp nh\u1eadt module","Return":"Quay l\u1ea1i","Credit Limit":"Gi\u1edbi h\u1ea1n t\u00edn d\u1ee5ng","The request was canceled":"Y\u00eau c\u1ea7u \u0111\u00e3 b\u1ecb h\u1ee7y b\u1ecf","Payment Receipt — %s":"Thanh to\u00e1n — %s","Payment receipt":"Thanh to\u00e1n","Current Payment":"Phi\u1ebfu thu hi\u1ec7n t\u1ea1i","Total Paid":"T\u1ed5ng ti\u1ec1n thanh to\u00e1n","Set what should be the limit of the purchase on credit.":"\u0110\u1eb7t gi\u1edbi h\u1ea1n mua h\u00e0ng b\u1eb1ng t\u00edn d\u1ee5ng.","Provide the customer email.":"Cung c\u1ea5p email c\u1ee7a kh\u00e1ch h\u00e0ng.","Priority":"QUy\u1ec1n \u01b0u ti\u00ean","Define the order for the payment. The lower the number is, the first it will display on the payment popup. Must start from \"0\".":"X\u00e1c \u0111\u1ecbnh th\u1ee9 t\u1ef1 thanh to\u00e1n. Con s\u1ed1 c\u00e0ng th\u1ea5p, con s\u1ed1 \u0111\u1ea7u ti\u00ean s\u1ebd hi\u1ec3n th\u1ecb tr\u00ean c\u1eeda s\u1ed5 b\u1eadt l\u00ean thanh to\u00e1n. Ph\u1ea3i b\u1eaft \u0111\u1ea7u t\u1eeb \"0\".","Mode":"C\u00e1ch th\u1ee9c","Choose what mode applies to this demo.":"Ch\u1ecdn c\u00e1ch th\u1ee9c \u00e1p d\u1ee5ng.","Set if the sales should be created.":"\u0110\u1eb7t n\u1ebfu doanh s\u1ed1 b\u00e1n h\u00e0ng n\u00ean \u0111\u01b0\u1ee3c t\u1ea1o.","Create Procurements":"T\u1ea1o Mua s\u1eafm","Will create procurements.":"S\u1ebd t\u1ea1o ra c\u00e1c mua s\u1eafm.","Sales Account":"T\u00e0i kho\u1ea3n b\u00e1n h\u00e0ng","Procurements Account":"T\u00e0i kho\u1ea3n mua h\u00e0ng","Sale Refunds Account":"T\u00e0i kho\u1ea3n tr\u1ea3 l\u1ea1i","Spoiled Goods Account":"T\u00e0i kho\u1ea3n h\u00e0ng h\u00f3a h\u01b0 h\u1ecfng","Customer Crediting Account":"T\u00e0i kho\u1ea3n ghi c\u00f3 c\u1ee7a kh\u00e1ch h\u00e0ng","Customer Debiting Account":"T\u00e0i kho\u1ea3n ghi n\u1ee3 c\u1ee7a kh\u00e1ch h\u00e0ng","Unable to find the requested account type using the provided id.":"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y lo\u1ea1i t\u00e0i kho\u1ea3n \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u b\u1eb1ng m\u00e3 kh\u00e1ch \u0111\u00e3 cung c\u1ea5p.","You cannot delete an account type that has transaction bound.":"B\u1ea1n kh\u00f4ng th\u1ec3 x\u00f3a lo\u1ea1i t\u00e0i kho\u1ea3n c\u00f3 r\u00e0ng bu\u1ed9c giao d\u1ecbch.","The account type has been deleted.":"Lo\u1ea1i t\u00e0i kho\u1ea3n \u0111\u00e3 b\u1ecb x\u00f3a.","The account has been created.":"T\u00e0i kho\u1ea3n \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o.","Customer Credit Account":"T\u00e0i kho\u1ea3n ghi c\u00f3 Kh\u00e1ch h\u00e0ng","Customer Debit Account":"T\u00e0i kho\u1ea3n ghi n\u1ee3 c\u1ee7a kh\u00e1ch h\u00e0ng","Register Cash-In Account":"\u0110\u0103ng k\u00fd t\u00e0i kho\u1ea3n thu ti\u1ec1n m\u1eb7t","Register Cash-Out Account":"\u0110\u0103ng k\u00fd t\u00e0i kho\u1ea3n chi ti\u1ec1n m\u1eb7t","Require Valid Email":"B\u1eaft bu\u1ed9c Email h\u1ee3p l\u1ec7","Will for valid unique email for every customer.":"S\u1ebd cho email duy nh\u1ea5t h\u1ee3p l\u1ec7 cho m\u1ecdi kh\u00e1ch h\u00e0ng.","Choose an option":"L\u1ef1a ch\u1ecdn","Update Instalment Date":"C\u1eadp nh\u1eadt ng\u00e0y tr\u1ea3 g\u00f3p","Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid.":"B\u1ea1n c\u00f3 mu\u1ed1n \u0111\u00e1nh d\u1ea5u kho\u1ea3n tr\u1ea3 g\u00f3p \u0111\u00f3 l\u00e0 \u0111\u1ebfn h\u1ea1n h\u00f4m nay kh\u00f4ng? N\u1ebfu b\u1ea1n x\u00e1c nh\u1eadn, kho\u1ea3n tr\u1ea3 g\u00f3p s\u1ebd \u0111\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u l\u00e0 \u0111\u00e3 thanh to\u00e1n.","Search for products.":"T\u00ecm ki\u1ebfm s\u1ea3n ph\u1ea9m.","Toggle merging similar products.":"Chuy\u1ec3n \u0111\u1ed5i h\u1ee3p nh\u1ea5t c\u00e1c s\u1ea3n ph\u1ea9m t\u01b0\u01a1ng t\u1ef1.","Toggle auto focus.":"Chuy\u1ec3n \u0111\u1ed5i ti\u00eau \u0111i\u1ec3m t\u1ef1 \u0111\u1ed9ng.","Filter User":"L\u1ecdc ng\u01b0\u1eddi d\u00f9ng","All Users":"T\u1ea5t c\u1ea3 ng\u01b0\u1eddi d\u00f9ng","No user was found for proceeding the filtering.":"Kh\u00f4ng t\u00ecm th\u1ea5y ng\u01b0\u1eddi d\u00f9ng n\u00e0o \u0111\u1ec3 ti\u1ebfp t\u1ee5c l\u1ecdc.","available":"c\u00f3 s\u1eb5n","No coupons applies to the cart.":"Kh\u00f4ng c\u00f3 phi\u1ebfu gi\u1ea3m gi\u00e1 \u00e1p d\u1ee5ng cho gi\u1ecf h\u00e0ng.","Selected":"\u0110\u00e3 ch\u1ecdn","An error occurred while opening the order options":"\u0110\u00e3 x\u1ea3y ra l\u1ed7i khi m\u1edf c\u00e1c t\u00f9y ch\u1ecdn \u0111\u01a1n h\u00e0ng","There is no instalment defined. Please set how many instalments are allowed for this order":"Kh\u00f4ng c\u00f3 ph\u1ea7n n\u00e0o \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh. Vui l\u00f2ng \u0111\u1eb7t s\u1ed1 l\u1ea7n tr\u1ea3 g\u00f3p \u0111\u01b0\u1ee3c ph\u00e9p cho \u0111\u01a1n h\u00e0ng n\u00e0y","Select Payment Gateway":"Ch\u1ecdn c\u1ed5ng thanh to\u00e1n","Gateway":"C\u1ed5ng thanh to\u00e1n","No tax is active":"Kh\u00f4ng thu\u1ebf","Unable to delete a payment attached to the order.":"kh\u00f4ng th\u1ec3 x\u00f3a m\u1ed9t kho\u1ea3n thanh to\u00e1n \u0111\u01b0\u1ee3c \u0111\u00ednh k\u00e8m v\u1edbi \u0111\u01a1n h\u00e0ng.","The discount has been set to the cart subtotal.":"Chi\u1ebft kh\u1ea5u t\u1ed5ng c\u1ee7a \u0111\u01a1n.","Order Deletion":"X\u00f3a \u0111\u01a1n h\u00e0ng","The current order will be deleted as no payment has been made so far.":"\u0110\u01a1n \u0111\u1eb7t h\u00e0ng hi\u1ec7n t\u1ea1i s\u1ebd b\u1ecb x\u00f3a v\u00ec kh\u00f4ng c\u00f3 kho\u1ea3n thanh to\u00e1n n\u00e0o \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n cho \u0111\u1ebfn nay.","Void The Order":"\u0110\u01a1n h\u00e0ng tr\u1ed1ng","Unable to void an unpaid order.":"Kh\u00f4ng th\u1ec3 h\u1ee7y \u0111\u01a1n \u0111\u1eb7t h\u00e0ng ch\u01b0a thanh to\u00e1n.","Environment Details":"Chi ti\u1ebft m\u00f4i tr\u01b0\u1eddng","Properties":"\u0110\u1eb7c t\u00ednh","Extensions":"Ti\u1ec7n \u00edch m\u1edf r\u1ed9ng","Configurations":"C\u1ea5u h\u00ecnh","Learn More":"T\u00ecm hi\u1ec3u th\u00eam","Search Products...":"T\u00ecm s\u1ea3n ph\u1ea9m...","No results to show.":"Kh\u00f4ng c\u00f3 k\u1ebft qu\u1ea3 n\u00e0o \u0111\u1ec3 hi\u1ec3n th\u1ecb.","Start by choosing a range and loading the report.":"B\u1eaft \u0111\u1ea7u b\u1eb1ng c\u00e1ch ch\u1ecdn m\u1ed9t ph\u1ea1m vi v\u00e0 t\u1ea3i b\u00e1o c\u00e1o.","Invoice Date":"Ng\u00e0y h\u00f3a \u0111\u01a1n","Initial Balance":"S\u1ed1 d\u01b0 ban \u0111\u1ea7u","New Balance":"C\u00e2n \u0111\u1ed1i","Transaction Type":"Lo\u1ea1i giao d\u1ecbch","Unchanged":"Kh\u00f4ng thay \u0111\u1ed5i","Define what roles applies to the user":"X\u00e1c \u0111\u1ecbnh nh\u1eefng quy\u1ec1n n\u00e0o g\u00e1n cho ng\u01b0\u1eddi d\u00f9ng","Not Assigned":"Kh\u00f4ng g\u00e1n","This value is already in use on the database.":"This value is already in use on the database.","This field should be checked.":"Tr\u01b0\u1eddng n\u00e0y n\u00ean \u0111\u01b0\u1ee3c ki\u1ec3m tra.","This field must be a valid URL.":"Tr\u01b0\u1eddng n\u00e0y ph\u1ea3i l\u00e0 tr\u01b0\u1eddng URL h\u1ee3p l\u1ec7.","This field is not a valid email.":"Tr\u01b0\u1eddng n\u00e0y kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t email h\u1ee3p l\u1ec7.","If you would like to define a custom invoice date.":"If you would like to define a custom invoice date.","Theme":"Theme","Dark":"Dark","Light":"Light","Define what is the theme that applies to the dashboard.":"X\u00e1c \u0111\u1ecbnh ch\u1ee7 \u0111\u1ec1 \u00e1p d\u1ee5ng cho trang t\u1ed5ng quan l\u00e0 g\u00ec.","Unable to delete this resource as it has %s dependency with %s item.":"Kh\u00f4ng th\u1ec3 x\u00f3a t\u00e0i nguy\u00ean n\u00e0y v\u00ec n\u00f3 c\u00f3 %s ph\u1ee5 thu\u1ed9c v\u1edbi %s item.","Unable to delete this resource as it has %s dependency with %s items.":"Kh\u00f4ng th\u1ec3 x\u00f3a t\u00e0i nguy\u00ean n\u00e0y v\u00ec n\u00f3 c\u00f3 %s ph\u1ee5 thu\u1ed9c v\u1edbi %s m\u1ee5c.","Make a new procurement.":"Th\u1ef1c hi\u1ec7n mua h\u00e0ng.","About":"V\u1ec1 ch\u00fang t\u00f4i","Details about the environment.":"Th\u00f4ng tin chi ti\u1ebft.","Core Version":"Core Version","PHP Version":"PHP Version","Mb String Enabled":"Mb String Enabled","Zip Enabled":"Zip Enabled","Curl Enabled":"Curl Enabled","Math Enabled":"Math Enabled","XML Enabled":"XML Enabled","XDebug Enabled":"XDebug Enabled","File Upload Enabled":"File Upload Enabled","File Upload Size":"File Upload Size","Post Max Size":"Post Max Size","Max Execution Time":"Max Execution Time","Memory Limit":"Memory Limit","Administrator":"Administrator","Store Administrator":"Store Administrator","Store Cashier":"Thu ng\u00e2n","User":"Ng\u01b0\u1eddi d\u00f9ng","Incorrect Authentication Plugin Provided.":"\u0110\u00e3 cung c\u1ea5p plugin x\u00e1c th\u1ef1c kh\u00f4ng ch\u00ednh x\u00e1c.","Require Unique Phone":"Y\u00eau c\u1ea7u \u0111i\u1ec7n tho\u1ea1i duy nh\u1ea5t","Every customer should have a unique phone number.":"M\u1ed7i kh\u00e1ch h\u00e0ng n\u00ean c\u00f3 m\u1ed9t s\u1ed1 \u0111i\u1ec7n tho\u1ea1i duy nh\u1ea5t.","Define the default theme.":"X\u00e1c \u0111\u1ecbnh ch\u1ee7 \u0111\u1ec1 m\u1eb7c \u0111\u1ecbnh.","Merge Similar Items":"G\u1ed9p s\u1ea3n ph\u1ea9m","Will enforce similar products to be merged from the POS.":"S\u1ebd bu\u1ed9c c\u00e1c s\u1ea3n ph\u1ea9m t\u01b0\u01a1ng t\u1ef1 \u0111\u01b0\u1ee3c h\u1ee3p nh\u1ea5t t\u1eeb POS.","Toggle Product Merge":"G\u1ed9p c\u00e1c s\u1ea3n ph\u1ea9m chuy\u1ec3n \u0111\u1ed5i \u0111vt","Will enable or disable the product merging.":"S\u1ebd b\u1eadt ho\u1eb7c t\u1eaft vi\u1ec7c h\u1ee3p nh\u1ea5t s\u1ea3n ph\u1ea9m.","Your system is running in production mode. You probably need to build the assets":"H\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n \u0111ang ch\u1ea1y \u1edf ch\u1ebf \u0111\u1ed9 s\u1ea3n xu\u1ea5t. B\u1ea1n c\u00f3 th\u1ec3 c\u1ea7n x\u00e2y d\u1ef1ng c\u00e1c t\u00e0i s\u1ea3n","Your system is in development mode. Make sure to build the assets.":"H\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n \u0111ang \u1edf ch\u1ebf \u0111\u1ed9 ph\u00e1t tri\u1ec3n. \u0110\u1ea3m b\u1ea3o x\u00e2y d\u1ef1ng t\u00e0i s\u1ea3n.","Unassigned":"Ch\u01b0a giao","Display all product stock flow.":"Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 d\u00f2ng s\u1ea3n ph\u1ea9m.","No products stock flow has been registered":"Kh\u00f4ng c\u00f3 d\u00f2ng s\u1ea3n ph\u1ea9m n\u00e0o \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd","Add a new products stock flow":"Th\u00eam d\u00f2ng s\u1ea3n ph\u1ea9m m\u1edbi","Create a new products stock flow":"T\u1ea1o d\u00f2ng s\u1ea3n ph\u1ea9m m\u1edbi","Register a new products stock flow and save it.":"\u0110\u0103ng k\u00fd d\u00f2ng s\u1ea3n ph\u1ea9m m\u1edbi v\u00e0 l\u01b0u n\u00f3.","Edit products stock flow":"Ch\u1ec9nh s\u1eeda d\u00f2ng s\u1ea3n ph\u1ea9m","Modify Globalproducthistorycrud.":"Modify Global produc this torycrud.","Initial Quantity":"S\u1ed1 l\u01b0\u1ee3ng ban \u0111\u1ea7u","New Quantity":"S\u1ed1 l\u01b0\u1ee3ng m\u1edbi","No Dashboard":"Kh\u00f4ng c\u00f3 trang t\u1ed5ng quan","Not Found Assets":"Kh\u00f4ng t\u00ecm th\u1ea5y t\u00e0i s\u1ea3n","Stock Flow Records":"B\u1ea3n ghi l\u01b0u l\u01b0\u1ee3ng kho","The user attributes has been updated.":"C\u00e1c thu\u1ed9c t\u00ednh ng\u01b0\u1eddi d\u00f9ng \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.","Laravel Version":"Laravel Version","There is a missing dependency issue.":"C\u00f3 m\u1ed9t v\u1ea5n \u0111\u1ec1 ph\u1ee5 thu\u1ed9c b\u1ecb thi\u1ebfu.","The Action You Tried To Perform Is Not Allowed.":"H\u00e0nh \u0111\u1ed9ng b\u1ea1n \u0111\u00e3 c\u1ed1 g\u1eafng th\u1ef1c hi\u1ec7n kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p.","Unable to locate the assets.":"Kh\u00f4ng th\u1ec3 \u0111\u1ecbnh v\u1ecb n\u1ed9i dung.","All the customers has been transferred to the new group %s.":"T\u1ea5t c\u1ea3 kh\u00e1ch h\u00e0ng \u0111\u00e3 \u0111\u01b0\u1ee3c chuy\u1ec3n sang nh\u00f3m m\u1edbi %s.","The request method is not allowed.":"Ph\u01b0\u01a1ng th\u1ee9c y\u00eau c\u1ea7u kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p.","A Database Exception Occurred.":"\u0110\u00e3 x\u1ea3y ra ngo\u1ea1i l\u1ec7 c\u01a1 s\u1edf d\u1eef li\u1ec7u.","An error occurred while validating the form.":"\u0110\u00e3 x\u1ea3y ra l\u1ed7i khi x\u00e1c th\u1ef1c bi\u1ec3u m\u1eabu.","Enter":"Girmek","Search...":"Arama...","Unable to hold an order which payment status has been updated already.":"\u00d6deme durumu zaten g\u00fcncellenmi\u015f bir sipari\u015f bekletilemez.","Unable to change the price mode. This feature has been disabled.":"Fiyat modu de\u011fi\u015ftirilemiyor. Bu \u00f6zellik devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","Enable WholeSale Price":"Toptan Sat\u0131\u015f Fiyat\u0131n\u0131 Etkinle\u015ftir","Would you like to switch to wholesale price ?":"Toptan fiyata ge\u00e7mek ister misiniz?","Enable Normal Price":"Normal Fiyat\u0131 Etkinle\u015ftir","Would you like to switch to normal price ?":"Normal fiyata ge\u00e7mek ister misiniz?","Search products...":"\u00dcr\u00fcnleri ara...","Set Sale Price":"Sat\u0131\u015f Fiyat\u0131n\u0131 Belirle","Remove":"Kald\u0131rmak","No product are added to this group.":"Bu gruba \u00fcr\u00fcn eklenmedi.","Delete Sub item":"Alt \u00f6\u011feyi sil","Would you like to delete this sub item?":"Bu alt \u00f6\u011feyi silmek ister misiniz?","Unable to add a grouped product.":"Grupland\u0131r\u0131lm\u0131\u015f bir \u00fcr\u00fcn eklenemiyor.","Choose The Unit":"Birimi Se\u00e7in","Stock Report":"Stok Raporu","Wallet Amount":"C\u00fczdan Tutar\u0131","Wallet History":"C\u00fczdan Ge\u00e7mi\u015fi","Transaction":"\u0130\u015flem","No History...":"Tarih Yok...","Removing":"Kald\u0131rma","Refunding":"geri \u00f6deme","Unknow":"bilinmiyor","Skip Instalments":"Taksitleri Atla","Define the product type.":"\u00dcr\u00fcn t\u00fcr\u00fcn\u00fc tan\u0131mlay\u0131n.","Dynamic":"Dinamik","In case the product is computed based on a percentage, define the rate here.":"\u00dcr\u00fcn\u00fcn bir y\u00fczdeye g\u00f6re hesaplanmas\u0131 durumunda oran\u0131 burada tan\u0131mlay\u0131n.","Before saving this order, a minimum payment of {amount} is required":"Bu sipari\u015fi kaydetmeden \u00f6nce minimum {amount} \u00f6demeniz gerekiyor","Initial Payment":"\u0130lk \u00f6deme","In order to proceed, an initial payment of {amount} is required for the selected payment type \"{paymentType}\". Would you like to proceed ?":"Devam edebilmek i\u00e7in, se\u00e7ilen \u00f6deme t\u00fcr\u00fc \"{paymentType}\" i\u00e7in {amount} tutar\u0131nda bir ilk \u00f6deme yap\u0131lmas\u0131 gerekiyor. Devam etmek ister misiniz?","Search Customer...":"M\u00fc\u015fteri Ara...","Due Amount":"\u00d6denecek mebla\u011f","Wallet Balance":"C\u00fczdan Bakiyesi","Total Orders":"Toplam Sipari\u015fler","What slug should be used ? [Q] to quit.":"Hangi s\u00fcm\u00fckl\u00fc b\u00f6cek kullan\u0131lmal\u0131d\u0131r? [Q] \u00e7\u0131kmak i\u00e7in.","\"%s\" is a reserved class name":"\"%s\" ayr\u0131lm\u0131\u015f bir s\u0131n\u0131f ad\u0131d\u0131r","The migration file has been successfully forgotten for the module %s.":"%s mod\u00fcl\u00fc i\u00e7in ta\u015f\u0131ma dosyas\u0131 ba\u015far\u0131yla unutuldu.","%s products where updated.":"%s \u00fcr\u00fcnleri g\u00fcncellendi.","Previous Amount":"\u00d6nceki Tutar","Next Amount":"Sonraki Tutar","Restrict the records by the creation date.":"Kay\u0131tlar\u0131 olu\u015fturma tarihine g\u00f6re s\u0131n\u0131rlay\u0131n.","Restrict the records by the author.":"Kay\u0131tlar\u0131 yazar taraf\u0131ndan k\u0131s\u0131tlay\u0131n.","Grouped Product":"Grupland\u0131r\u0131lm\u0131\u015f \u00dcr\u00fcn","Groups":"Gruplar","Choose Group":"Grup Se\u00e7","Grouped":"grupland\u0131r\u0131lm\u0131\u015f","An error has occurred":"Bir hata olu\u015ftu","Unable to proceed, the submitted form is not valid.":"Devam edilemiyor, g\u00f6nderilen form ge\u00e7erli de\u011fil.","No activation is needed for this account.":"Bu hesap i\u00e7in aktivasyon gerekli de\u011fildir.","Invalid activation token.":"Ge\u00e7ersiz etkinle\u015ftirme jetonu.","The expiration token has expired.":"Sona erme jetonunun s\u00fcresi doldu.","Your account is not activated.":"Hesab\u0131n\u0131z aktif de\u011fil.","Unable to change a password for a non active user.":"Etkin olmayan bir kullan\u0131c\u0131 i\u00e7in parola de\u011fi\u015ftirilemiyor.","Unable to submit a new password for a non active user.":"Aktif olmayan bir kullan\u0131c\u0131 i\u00e7in yeni bir \u015fifre g\u00f6nderilemiyor.","Unable to delete an entry that no longer exists.":"Art\u0131k var olmayan bir giri\u015f silinemiyor.","Provides an overview of the products stock.":"\u00dcr\u00fcn sto\u011funa genel bir bak\u0131\u015f sa\u011flar.","Customers Statement":"M\u00fc\u015fteri Bildirimi","Display the complete customer statement.":"Tam m\u00fc\u015fteri beyan\u0131n\u0131 g\u00f6r\u00fcnt\u00fcleyin.","The recovery has been explicitly disabled.":"Kurtarma a\u00e7\u0131k\u00e7a devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","The registration has been explicitly disabled.":"Kay\u0131t a\u00e7\u0131k\u00e7a devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.","The entry has been successfully updated.":"Giri\u015f ba\u015far\u0131yla g\u00fcncellendi.","A similar module has been found":"Benzer bir mod\u00fcl bulundu","A grouped product cannot be saved without any sub items.":"Grupland\u0131r\u0131lm\u0131\u015f bir \u00fcr\u00fcn, herhangi bir alt \u00f6\u011fe olmadan kaydedilemez.","A grouped product cannot contain grouped product.":"Grupland\u0131r\u0131lm\u0131\u015f bir \u00fcr\u00fcn, grupland\u0131r\u0131lm\u0131\u015f \u00fcr\u00fcn i\u00e7eremez.","The subitem has been saved.":"Alt \u00f6\u011fe kaydedildi.","The %s is already taken.":"%s zaten al\u0131nm\u0131\u015f.","Allow Wholesale Price":"Toptan Sat\u0131\u015f Fiyat\u0131na \u0130zin Ver","Define if the wholesale price can be selected on the POS.":"POS'ta toptan sat\u0131\u015f fiyat\u0131n\u0131n se\u00e7ilip se\u00e7ilemeyece\u011fini tan\u0131mlay\u0131n.","Allow Decimal Quantities":"Ondal\u0131k Miktarlara \u0130zin Ver","Will change the numeric keyboard for allowing decimal for quantities. Only for \"default\" numpad.":"Miktarlar i\u00e7in ondal\u0131k basama\u011fa izin vermek i\u00e7in say\u0131sal klavyeyi de\u011fi\u015ftirir. Yaln\u0131zca \"varsay\u0131lan\" say\u0131sal tu\u015f tak\u0131m\u0131 i\u00e7in.","Numpad":"say\u0131sal tu\u015f tak\u0131m\u0131","Advanced":"Geli\u015fmi\u015f","Will set what is the numpad used on the POS screen.":"POS ekran\u0131nda kullan\u0131lan say\u0131sal tu\u015f tak\u0131m\u0131n\u0131n ne oldu\u011funu ayarlayacakt\u0131r.","Force Barcode Auto Focus":"Barkod Otomatik Odaklamay\u0131 Zorla","Will permanently enable barcode autofocus to ease using a barcode reader.":"Barkod okuyucu kullanmay\u0131 kolayla\u015ft\u0131rmak i\u00e7in barkod otomatik odaklamay\u0131 kal\u0131c\u0131 olarak etkinle\u015ftirir.","Tax Included":"\u0110\u00e3 bao g\u1ed3m thu\u1ebf","Unable to proceed, more than one product is set as featured":"Kh\u00f4ng th\u1ec3 ti\u1ebfp t\u1ee5c, nhi\u1ec1u s\u1ea3n ph\u1ea9m \u0111\u01b0\u1ee3c \u0111\u1eb7t l\u00e0 n\u1ed5i b\u1eadt","The transaction was deleted.":"Giao d\u1ecbch \u0111\u00e3 b\u1ecb x\u00f3a.","Database connection was successful.":"K\u1ebft n\u1ed1i c\u01a1 s\u1edf d\u1eef li\u1ec7u th\u00e0nh c\u00f4ng.","The products taxes were computed successfully.":"Thu\u1ebf s\u1ea3n ph\u1ea9m \u0111\u00e3 \u0111\u01b0\u1ee3c t\u00ednh th\u00e0nh c\u00f4ng.","Tax Excluded":"Kh\u00f4ng bao g\u1ed3m thu\u1ebf","Set Paid":"\u0110\u1eb7t tr\u1ea3 ti\u1ec1n","Would you like to mark this procurement as paid?":"B\u1ea1n c\u00f3 mu\u1ed1n \u0111\u00e1nh d\u1ea5u vi\u1ec7c mua s\u1eafm n\u00e0y l\u00e0 \u0111\u00e3 tr\u1ea3 ti\u1ec1n kh\u00f4ng?","Unidentified Item":"M\u1eb7t h\u00e0ng kh\u00f4ng x\u00e1c \u0111\u1ecbnh","Non-existent Item":"M\u1eb7t h\u00e0ng kh\u00f4ng t\u1ed3n t\u1ea1i","You cannot change the status of an already paid procurement.":"B\u1ea1n kh\u00f4ng th\u1ec3 thay \u0111\u1ed5i tr\u1ea1ng th\u00e1i c\u1ee7a mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n.","The procurement payment status has been changed successfully.":"Tr\u1ea1ng th\u00e1i thanh to\u00e1n mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c thay \u0111\u1ed5i th\u00e0nh c\u00f4ng.","The procurement has been marked as paid.":"Vi\u1ec7c mua s\u1eafm \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u l\u00e0 \u0111\u00e3 thanh to\u00e1n.","Show Price With Tax":"Hi\u1ec3n th\u1ecb gi\u00e1 c\u00f3 thu\u1ebf","Will display price with tax for each products.":"S\u1ebd hi\u1ec3n th\u1ecb gi\u00e1 c\u00f3 thu\u1ebf cho t\u1eebng s\u1ea3n ph\u1ea9m.","Unable to load the component \"${action.component}\". Make sure the component is registered to \"nsExtraComponents\".":"Kh\u00f4ng th\u1ec3 t\u1ea3i th\u00e0nh ph\u1ea7n \"${action.component}\". \u0110\u1ea3m b\u1ea3o r\u1eb1ng th\u00e0nh ph\u1ea7n \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd v\u1edbi \"nsExtraComponents\".","Tax Inclusive":"Bao g\u1ed3m thu\u1ebf","Apply Coupon":"\u00c1p d\u1ee5ng phi\u1ebfu gi\u1ea3m gi\u00e1","Not applicable":"Kh\u00f4ng \u00e1p d\u1ee5ng","Normal":"B\u00ecnh th\u01b0\u1eddng","Product Taxes":"Thu\u1ebf s\u1ea3n ph\u1ea9m","The unit attached to this product is missing or not assigned. Please review the \"Unit\" tab for this product.":"\u0110\u01a1n v\u1ecb \u0111\u01b0\u1ee3c \u0111\u00ednh k\u00e8m v\u1edbi s\u1ea3n ph\u1ea9m n\u00e0y b\u1ecb thi\u1ebfu ho\u1eb7c kh\u00f4ng \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh. Vui l\u00f2ng xem l\u1ea1i tab \"\u0110\u01a1n v\u1ecb\" cho s\u1ea3n ph\u1ea9m n\u00e0y.","X Days After Month Starts":"X Days After Month Starts","On Specific Day":"On Specific Day","Unknown Occurance":"Unknown Occurance","Please provide a valid value.":"Please provide a valid value.","Done":"Done","Would you like to delete \"%s\"?":"Would you like to delete \"%s\"?","Unable to find a module having as namespace \"%s\"":"Unable to find a module having as namespace \"%s\"","Api File":"Api File","Migrations":"Migrations","Determine Until When the coupon is valid.":"Determine Until When the coupon is valid.","Customer Groups":"Customer Groups","Assigned To Customer Group":"Assigned To Customer Group","Only the customers who belongs to the selected groups will be able to use the coupon.":"Only the customers who belongs to the selected groups will be able to use the coupon.","Assigned To Customers":"Assigned To Customers","Only the customers selected will be ale to use the coupon.":"Only the customers selected will be ale to use the coupon.","Unable to save the coupon as one of the selected customer no longer exists.":"Unable to save the coupon as one of the selected customer no longer exists.","Unable to save the coupon as one of the selected customer group no longer exists.":"Unable to save the coupon as one of the selected customer group no longer exists.","Unable to save the coupon as one of the customers provided no longer exists.":"Unable to save the coupon as one of the customers provided no longer exists.","Unable to save the coupon as one of the provided customer group no longer exists.":"Unable to save the coupon as one of the provided customer group no longer exists.","Coupon Order Histories List":"Coupon Order Histories List","Display all coupon order histories.":"Display all coupon order histories.","No coupon order histories has been registered":"No coupon order histories has been registered","Add a new coupon order history":"Add a new coupon order history","Create a new coupon order history":"Create a new coupon order history","Register a new coupon order history and save it.":"Register a new coupon order history and save it.","Edit coupon order history":"Edit coupon order history","Modify Coupon Order History.":"Modify Coupon Order History.","Return to Coupon Order Histories":"Return to Coupon Order Histories","Customer_coupon_id":"Customer_coupon_id","Order_id":"Order_id","Discount_value":"Discount_value","Minimum_cart_value":"Minimum_cart_value","Maximum_cart_value":"Maximum_cart_value","Limit_usage":"Limit_usage","Would you like to delete this?":"Would you like to delete this?","Usage History":"Usage History","Customer Coupon Histories List":"Customer Coupon Histories List","Display all customer coupon histories.":"Display all customer coupon histories.","No customer coupon histories has been registered":"No customer coupon histories has been registered","Add a new customer coupon history":"Add a new customer coupon history","Create a new customer coupon history":"Create a new customer coupon history","Register a new customer coupon history and save it.":"Register a new customer coupon history and save it.","Edit customer coupon history":"Edit customer coupon history","Modify Customer Coupon History.":"Modify Customer Coupon History.","Return to Customer Coupon Histories":"Return to Customer Coupon Histories","Last Name":"Last Name","Provide the customer last name":"Provide the customer last name","Provide the customer gender.":"Provide the customer gender.","Provide the billing first name.":"Provide the billing first name.","Provide the billing last name.":"Provide the billing last name.","Provide the shipping First Name.":"Provide the shipping First Name.","Provide the shipping Last Name.":"Provide the shipping Last Name.","Scheduled":"Scheduled","Set the scheduled date.":"Set the scheduled date.","Account Name":"Account Name","Provider last name if necessary.":"Provider last name if necessary.","Provide the user first name.":"Provide the user first name.","Provide the user last name.":"Provide the user last name.","Set the user gender.":"Set the user gender.","Set the user phone number.":"Set the user phone number.","Set the user PO Box.":"Set the user PO Box.","Provide the billing First Name.":"Provide the billing First Name.","Last name":"Last name","Group Name":"Group Name","Delete a user":"Delete a user","Activated":"Activated","type":"type","User Group":"User Group","Scheduled On":"Scheduled On","Biling":"Biling","API Token":"API Token","Your Account has been successfully created.":"Your Account has been successfully created.","Unable to export if there is nothing to export.":"Unable to export if there is nothing to export.","%s Coupons":"%s Coupons","%s Coupon History":"%s Coupon History","\"%s\" Record History":"\"%s\" Record History","The media name was successfully updated.":"The media name was successfully updated.","The role was successfully assigned.":"The role was successfully assigned.","The role were successfully assigned.":"The role were successfully assigned.","Unable to identifier the provided role.":"Unable to identifier the provided role.","Good Condition":"Good Condition","Cron Disabled":"Cron Disabled","Task Scheduling Disabled":"Task Scheduling Disabled","NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.":"NexoPOS is unable to schedule background tasks. This might restrict necessary features. Click here to learn how to fix it.","The email \"%s\" is already used for another customer.":"The email \"%s\" is already used for another customer.","The provided coupon cannot be loaded for that customer.":"The provided coupon cannot be loaded for that customer.","The provided coupon cannot be loaded for the group assigned to the selected customer.":"The provided coupon cannot be loaded for the group assigned to the selected customer.","Unable to use the coupon %s as it has expired.":"Unable to use the coupon %s as it has expired.","Unable to use the coupon %s at this moment.":"Unable to use the coupon %s at this moment.","Small Box":"Small Box","Box":"Box","%s products were freed":"%s products were freed","Restoring cash flow from paid orders...":"Restoring cash flow from paid orders...","Restoring cash flow from refunded orders...":"Restoring cash flow from refunded orders...","%s on %s directories were deleted.":"%s on %s directories were deleted.","%s on %s files were deleted.":"%s on %s files were deleted.","First Day Of Month":"First Day Of Month","Last Day Of Month":"Last Day Of Month","Month middle Of Month":"Month middle Of Month","{day} after month starts":"{day} after month starts","{day} before month ends":"{day} before month ends","Every {day} of the month":"Every {day} of the month","Days":"Days","Make sure set a day that is likely to be executed":"Make sure set a day that is likely to be executed","Invalid Module provided.":"Invalid Module provided.","The module was \"%s\" was successfully installed.":"The module was \"%s\" was successfully installed.","The modules \"%s\" was deleted successfully.":"The modules \"%s\" was deleted successfully.","Unable to locate a module having as identifier \"%s\".":"Unable to locate a module having as identifier \"%s\".","All migration were executed.":"All migration were executed.","Unknown Product Status":"Unknown Product Status","Member Since":"Member Since","Total Customers":"Total Customers","The widgets was successfully updated.":"The widgets was successfully updated.","The token was successfully created":"The token was successfully created","The token has been successfully deleted.":"The token has been successfully deleted.","Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".":"Enable background services for NexoPOS. Refresh to check whether the option has turned to \"Yes\".","Will display all cashiers who performs well.":"Will display all cashiers who performs well.","Will display all customers with the highest purchases.":"Will display all customers with the highest purchases.","Expense Card Widget":"Expense Card Widget","Will display a card of current and overwall expenses.":"Will display a card of current and overwall expenses.","Incomplete Sale Card Widget":"Incomplete Sale Card Widget","Will display a card of current and overall incomplete sales.":"Will display a card of current and overall incomplete sales.","Orders Chart":"Orders Chart","Will display a chart of weekly sales.":"Will display a chart of weekly sales.","Orders Summary":"Orders Summary","Will display a summary of recent sales.":"Will display a summary of recent sales.","Will display a profile widget with user stats.":"Will display a profile widget with user stats.","Sale Card Widget":"Sale Card Widget","Will display current and overall sales.":"Will display current and overall sales.","Return To Calendar":"Return To Calendar","Thr":"Thr","The left range will be invalid.":"The left range will be invalid.","The right range will be invalid.":"The right range will be invalid.","Click here to add widgets":"Click here to add widgets","Choose Widget":"Choose Widget","Select with widget you want to add to the column.":"Select with widget you want to add to the column.","Unamed Tab":"Unamed Tab","An error unexpected occured while printing.":"An error unexpected occured while printing.","and":"and","{date} ago":"{date} ago","In {date}":"In {date}","An unexpected error occured.":"An unexpected error occured.","Warning":"Warning","Change Type":"Change Type","Save Expense":"Save Expense","No configuration were choosen. Unable to proceed.":"No configuration were choosen. Unable to proceed.","Conditions":"Conditions","By proceeding the current for and all your entries will be cleared. Would you like to proceed?":"By proceeding the current for and all your entries will be cleared. Would you like to proceed?","No modules matches your search term.":"No modules matches your search term.","Press \"\/\" to search modules":"Press \"\/\" to search modules","No module has been uploaded yet.":"No module has been uploaded yet.","{module}":"{module}","Would you like to delete \"{module}\"? All data created by the module might also be deleted.":"Would you like to delete \"{module}\"? All data created by the module might also be deleted.","Search Medias":"Search Medias","Bulk Select":"Bulk Select","Press "\/" to search permissions":"Press "\/" to search permissions","SKU, Barcode, Name":"SKU, Barcode, Name","About Token":"About Token","Save Token":"Save Token","Generated Tokens":"Generated Tokens","Created":"Created","Last Use":"Last Use","Never":"Never","Expires":"Expires","Revoke":"Revoke","Token Name":"Token Name","This will be used to identifier the token.":"This will be used to identifier the token.","Unable to proceed, the form is not valid.":"Unable to proceed, the form is not valid.","An unexpected error occured":"An unexpected error occured","An Error Has Occured":"An Error Has Occured","Febuary":"Febuary","Configure":"Configure","Unable to add the product":"Unable to add the product","No result to result match the search value provided.":"No result to result match the search value provided.","This QR code is provided to ease authentication on external applications.":"This QR code is provided to ease authentication on external applications.","Copy And Close":"Copy And Close","An error has occured":"An error has occured","Recents Orders":"Recents Orders","Unamed Page":"Unamed Page","Assignation":"Assignation","Incoming Conversion":"Incoming Conversion","Outgoing Conversion":"Outgoing Conversion","Unknown Action":"Unknown Action","Direct Transaction":"Direct Transaction","Recurring Transaction":"Recurring Transaction","Entity Transaction":"Entity Transaction","Scheduled Transaction":"Scheduled Transaction","Unknown Type (%s)":"Unknown Type (%s)","What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.":"What is the namespace of the CRUD Resource. eg: system.users ? [Q] to quit.","What is the full model name. eg: App\\Models\\Order ? [Q] to quit.":"What is the full model name. eg: App\\Models\\Order ? [Q] to quit.","What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.":"What are the fillable column on the table: eg: username, email, password ? [S] to skip, [Q] to quit.","Unsupported argument provided: \"%s\"":"Unsupported argument provided: \"%s\"","The authorization token can\\'t be changed manually.":"The authorization token can\\'t be changed manually.","Translation process is complete for the module %s !":"Translation process is complete for the module %s !","%s migration(s) has been deleted.":"%s migration(s) has been deleted.","The command has been created for the module \"%s\"!":"The command has been created for the module \"%s\"!","The controller has been created for the module \"%s\"!":"The controller has been created for the module \"%s\"!","The event has been created at the following path \"%s\"!":"The event has been created at the following path \"%s\"!","The listener has been created on the path \"%s\"!":"The listener has been created on the path \"%s\"!","A request with the same name has been found !":"A request with the same name has been found !","Unable to find a module having the identifier \"%s\".":"Unable to find a module having the identifier \"%s\".","Unsupported reset mode.":"Unsupported reset mode.","You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.":"You\\'ve not provided a valid file name. It shouldn\\'t contains any space, dot or special characters.","Unable to find a module having \"%s\" as namespace.":"Unable to find a module having \"%s\" as namespace.","A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.":"A similar file already exists at the path \"%s\". Use \"--force\" to overwrite it.","A new form class was created at the path \"%s\"":"A new form class was created at the path \"%s\"","Unable to proceed, looks like the database can\\'t be used.":"Unable to proceed, looks like the database can\\'t be used.","In which language would you like to install NexoPOS ?":"In which language would you like to install NexoPOS ?","You must define the language of installation.":"You must define the language of installation.","The value above which the current coupon can\\'t apply.":"The value above which the current coupon can\\'t apply.","Unable to save the coupon product as this product doens\\'t exists.":"Unable to save the coupon product as this product doens\\'t exists.","Unable to save the coupon category as this category doens\\'t exists.":"Unable to save the coupon category as this category doens\\'t exists.","Unable to save the coupon as this category doens\\'t exists.":"Unable to save the coupon as this category doens\\'t exists.","You\\re not allowed to do that.":"You\\re not allowed to do that.","Crediting (Add)":"Crediting (Add)","Refund (Add)":"Refund (Add)","Deducting (Remove)":"Deducting (Remove)","Payment (Remove)":"Payment (Remove)","The assigned default customer group doesn\\'t exist or is not defined.":"The assigned default customer group doesn\\'t exist or is not defined.","Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0":"Determine in percentage, what is the first minimum credit payment made by all customers on the group, in case of credit order. If left to \"0","You\\'re not allowed to do this operation":"You\\'re not allowed to do this operation","If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.":"If clicked to no, all products assigned to this category or all sub categories, won\\'t appear at the POS.","Convert Unit":"Convert Unit","The unit that is selected for convertion by default.":"The unit that is selected for convertion by default.","COGS":"COGS","Used to define the Cost of Goods Sold.":"Used to define the Cost of Goods Sold.","Visible":"Visible","Define whether the unit is available for sale.":"Define whether the unit is available for sale.","Product unique name. If it\\' variation, it should be relevant for that variation":"Product unique name. If it\\' variation, it should be relevant for that variation","The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.":"The product won\\'t be visible on the grid and fetched only using the barcode reader or associated barcode.","The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.":"The Cost Of Goods Sold will be automatically be computed based on procurement and conversion.","Auto COGS":"Auto COGS","Unknown Type: %s":"Unknown Type: %s","Shortage":"Shortage","Overage":"Overage","Transactions List":"Transactions List","Display all transactions.":"Display all transactions.","No transactions has been registered":"No transactions has been registered","Add a new transaction":"Add a new transaction","Create a new transaction":"Create a new transaction","Register a new transaction and save it.":"Register a new transaction and save it.","Edit transaction":"Edit transaction","Modify Transaction.":"Modify Transaction.","Return to Transactions":"Return to Transactions","determine if the transaction is effective or not. Work for recurring and not recurring transactions.":"determine if the transaction is effective or not. Work for recurring and not recurring transactions.","Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.":"Assign transaction to users group. the Transaction will therefore be multiplied by the number of entity.","Transaction Account":"Transaction Account","Assign the transaction to an account430":"Assign the transaction to an account430","Is the value or the cost of the transaction.":"Is the value or the cost of the transaction.","If set to Yes, the transaction will trigger on defined occurrence.":"If set to Yes, the transaction will trigger on defined occurrence.","Define how often this transaction occurs":"Define how often this transaction occurs","Define what is the type of the transactions.":"Define what is the type of the transactions.","Trigger":"Trigger","Would you like to trigger this expense now?":"Would you like to trigger this expense now?","Transactions History List":"Transactions History List","Display all transaction history.":"Display all transaction history.","No transaction history has been registered":"No transaction history has been registered","Add a new transaction history":"Add a new transaction history","Create a new transaction history":"Create a new transaction history","Register a new transaction history and save it.":"Register a new transaction history and save it.","Edit transaction history":"Edit transaction history","Modify Transactions history.":"Modify Transactions history.","Return to Transactions History":"Return to Transactions History","Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.":"Provide a unique value for this unit. Might be composed from a name but shouldn\\'t include space or special characters.","Set the limit that can\\'t be exceeded by the user.":"Set the limit that can\\'t be exceeded by the user.","Oops, We\\'re Sorry!!!":"Oops, We\\'re Sorry!!!","Class: %s":"Class: %s","There\\'s is mismatch with the core version.":"There\\'s is mismatch with the core version.","You\\'re not authenticated.":"You\\'re not authenticated.","An error occured while performing your request.":"An error occured while performing your request.","A mismatch has occured between a module and it\\'s dependency.":"A mismatch has occured between a module and it\\'s dependency.","You\\'re not allowed to see that page.":"You\\'re not allowed to see that page.","Post Too Large":"Post Too Large","The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini":"The submitted request is more large than expected. Consider increasing your \"post_max_size\" on your PHP.ini","This field does\\'nt have a valid value.":"This field does\\'nt have a valid value.","Describe the direct transaction.":"Describe the direct transaction.","If set to yes, the transaction will take effect immediately and be saved on the history.":"If set to yes, the transaction will take effect immediately and be saved on the history.","Assign the transaction to an account.":"Assign the transaction to an account.","set the value of the transaction.":"set the value of the transaction.","Further details on the transaction.":"Further details on the transaction.","Describe the direct transactions.":"Describe the direct transactions.","set the value of the transactions.":"set the value of the transactions.","The transactions will be multipled by the number of user having that role.":"The transactions will be multipled by the number of user having that role.","Create Sales (needs Procurements)":"Create Sales (needs Procurements)","Set when the transaction should be executed.":"Set when the transaction should be executed.","The addresses were successfully updated.":"The addresses were successfully updated.","Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.":"Determine what is the actual value of the procurement. Once \"Delivered\" the status can\\'t be changed, and the stock will be updated.","The register doesn\\'t have an history.":"The register doesn\\'t have an history.","Unable to check a register session history if it\\'s closed.":"Unable to check a register session history if it\\'s closed.","Register History For : %s":"Register History For : %s","Can\\'t delete a category having sub categories linked to it.":"Can\\'t delete a category having sub categories linked to it.","Unable to proceed. The request doesn\\'t provide enough data which could be handled":"Unable to proceed. The request doesn\\'t provide enough data which could be handled","Unable to load the CRUD resource : %s.":"Unable to load the CRUD resource : %s.","Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods":"Unable to retrieve items. The current CRUD resource doesn\\'t implement \"getEntries\" methods","The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.":"The class \"%s\" is not defined. Does that crud class exists ? Make sure you\\'ve registered the instance if it\\'s the case.","The crud columns exceed the maximum column that can be exported (27)":"The crud columns exceed the maximum column that can be exported (27)","This link has expired.":"This link has expired.","Account History : %s":"Account History : %s","Welcome — %s":"Welcome — %s","Upload and manage medias (photos).":"Upload and manage medias (photos).","The product which id is %s doesnt\\'t belong to the procurement which id is %s":"The product which id is %s doesnt\\'t belong to the procurement which id is %s","The refresh process has started. You\\'ll get informed once it\\'s complete.":"The refresh process has started. You\\'ll get informed once it\\'s complete.","The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".":"The the variation hasn\\'t been deleted because it might not exist or is not assigned to the parent product \"%s\".","Stock History For %s":"Stock History For %s","Set":"Set","The unit is not set for the product \"%s\".":"The unit is not set for the product \"%s\".","The operation will cause a negative stock for the product \"%s\" (%s).":"The operation will cause a negative stock for the product \"%s\" (%s).","The adjustment quantity can\\'t be negative for the product \"%s\" (%s)":"The adjustment quantity can\\'t be negative for the product \"%s\" (%s)","%s\\'s Products":"%s\\'s Products","Transactions Report":"Transactions Report","Combined Report":"Combined Report","Provides a combined report for every transactions on products.":"Provides a combined report for every transactions on products.","Unable to initiallize the settings page. The identifier \"' . $identifier . '":"Unable to initiallize the settings page. The identifier \"' . $identifier . '","Shows all histories generated by the transaction.":"Shows all histories generated by the transaction.","Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.":"Unable to use Scheduled, Recurring and Entity Transactions as Queues aren\\'t configured correctly.","Create New Transaction":"Create New Transaction","Set direct, scheduled transactions.":"Set direct, scheduled transactions.","Update Transaction":"Update Transaction","The provided data aren\\'t valid":"The provided data aren\\'t valid","Welcome — NexoPOS":"Welcome — NexoPOS","You\\'re not allowed to see this page.":"You\\'re not allowed to see this page.","Your don\\'t have enough permission to perform this action.":"Your don\\'t have enough permission to perform this action.","You don\\'t have the necessary role to see this page.":"You don\\'t have the necessary role to see this page.","%s product(s) has low stock. Reorder those product(s) before it get exhausted.":"%s product(s) has low stock. Reorder those product(s) before it get exhausted.","Scheduled Transactions":"Scheduled Transactions","the transaction \"%s\" was executed as scheduled on %s.":"the transaction \"%s\" was executed as scheduled on %s.","Workers Aren\\'t Running":"Workers Aren\\'t Running","The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.":"The workers has been enabled, but it looks like NexoPOS can\\'t run workers. This usually happen if supervisor is not configured correctly.","Unable to remove the permissions \"%s\". It doesn\\'t exists.":"Unable to remove the permissions \"%s\". It doesn\\'t exists.","Unable to open \"%s\" *, as it\\'s not closed.":"Unable to open \"%s\" *, as it\\'s not closed.","Unable to open \"%s\" *, as it\\'s not opened.":"Unable to open \"%s\" *, as it\\'s not opened.","Unable to cashing on \"%s\" *, as it\\'s not opened.":"Unable to cashing on \"%s\" *, as it\\'s not opened.","Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.":"Not enough fund to delete a sale from \"%s\". If funds were cashed-out or disbursed, consider adding some cash (%s) to the register.","Unable to cashout on \"%s":"Unable to cashout on \"%s","Symbolic Links Missing":"Symbolic Links Missing","The Symbolic Links to the public directory is missing. Your medias might be broken and not display.":"The Symbolic Links to the public directory is missing. Your medias might be broken and not display.","Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.":"Cron jobs aren't configured correctly on NexoPOS. This might restrict necessary features. Click here to learn how to fix it.","The requested module %s cannot be found.":"The requested module %s cannot be found.","The manifest.json can\\'t be located inside the module %s on the path: %s":"The manifest.json can\\'t be located inside the module %s on the path: %s","the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.":"the requested file \"%s\" can\\'t be located inside the manifest.json for the module %s.","Sorting is explicitely disabled for the column \"%s\".":"Sorting is explicitely disabled for the column \"%s\".","Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s":"Unable to delete \"%s\" as it\\'s a dependency for \"%s\"%s","Unable to find the customer using the provided id %s.":"Unable to find the customer using the provided id %s.","Not enough credits on the customer account. Requested : %s, Remaining: %s.":"Not enough credits on the customer account. Requested : %s, Remaining: %s.","The customer account doesn\\'t have enough funds to proceed.":"The customer account doesn\\'t have enough funds to proceed.","Unable to find a reference to the attached coupon : %s":"Unable to find a reference to the attached coupon : %s","You\\'re not allowed to use this coupon as it\\'s no longer active":"You\\'re not allowed to use this coupon as it\\'s no longer active","You\\'re not allowed to use this coupon it has reached the maximum usage allowed.":"You\\'re not allowed to use this coupon it has reached the maximum usage allowed.","Terminal A":"Terminal A","Terminal B":"Terminal B","%s link were deleted":"%s link were deleted","Unable to execute the following class callback string : %s":"Unable to execute the following class callback string : %s","%s — %s":"%s — %s","Transactions":"Transactions","Create Transaction":"Create Transaction","Stock History":"Stock History","Invoices":"Invoices","Failed to parse the configuration file on the following path \"%s\"":"Failed to parse the configuration file on the following path \"%s\"","No config.xml has been found on the directory : %s. This folder is ignored":"No config.xml has been found on the directory : %s. This folder is ignored","The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ":"The module \"%s\" has been disabled as it\\'s not compatible with the current version of NexoPOS %s, but requires %s. ","Unable to upload this module as it\\'s older than the version installed":"Unable to upload this module as it\\'s older than the version installed","The migration file doens\\'t have a valid class name. Expected class : %s":"The migration file doens\\'t have a valid class name. Expected class : %s","Unable to locate the following file : %s":"Unable to locate the following file : %s","The migration file doens\\'t have a valid method name. Expected method : %s":"The migration file doens\\'t have a valid method name. Expected method : %s","The module %s cannot be enabled as his dependency (%s) is missing or not enabled.":"The module %s cannot be enabled as his dependency (%s) is missing or not enabled.","The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.":"The module %s cannot be enabled as his dependencies (%s) are missing or not enabled.","An Error Occurred \"%s\": %s":"An Error Occurred \"%s\": %s","The order has been updated":"The order has been updated","The minimal payment of %s has\\'nt been provided.":"The minimal payment of %s has\\'nt been provided.","Unable to proceed as the order is already paid.":"Unable to proceed as the order is already paid.","The customer account funds are\\'nt enough to process the payment.":"The customer account funds are\\'nt enough to process the payment.","Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Partially paid orders aren\\'t allowed. This option could be changed on the settings.","Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.":"Unable to proceed. Unpaid orders aren\\'t allowed. This option could be changed on the settings.","By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.":"By proceeding this order, the customer will exceed the maximum credit allowed for his account: %s.","You\\'re not allowed to make payments.":"You\\'re not allowed to make payments.","Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s":"Unable to proceed, there is not enough stock for %s using the unit %s. Requested : %s, available %s","Unknown Status (%s)":"Unknown Status (%s)","%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.":"%s order(s) either unpaid or partially paid has turned due. This occurs if none has been completed before the expected payment date.","Unable to find a reference of the provided coupon : %s":"Unable to find a reference of the provided coupon : %s","The procurement has been deleted. %s included stock record(s) has been deleted as well.":"The procurement has been deleted. %s included stock record(s) has been deleted as well.","Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.":"Unable to delete the procurement as there is not enough stock remaining for \"%s\" on unit \"%s\". This likely means the stock count has changed either with a sale, adjustment after the procurement has been stocked.","Unable to find the product using the provided id \"%s\"":"Unable to find the product using the provided id \"%s\"","Unable to procure the product \"%s\" as the stock management is disabled.":"Unable to procure the product \"%s\" as the stock management is disabled.","Unable to procure the product \"%s\" as it is a grouped product.":"Unable to procure the product \"%s\" as it is a grouped product.","The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item":"The unit used for the product %s doesn\\'t belongs to the Unit Group assigned to the item","%s procurement(s) has recently been automatically procured.":"%s procurement(s) has recently been automatically procured.","The requested category doesn\\'t exists":"The requested category doesn\\'t exists","The category to which the product is attached doesn\\'t exists or has been deleted":"The category to which the product is attached doesn\\'t exists or has been deleted","Unable to create a product with an unknow type : %s":"Unable to create a product with an unknow type : %s","A variation within the product has a barcode which is already in use : %s.":"A variation within the product has a barcode which is already in use : %s.","A variation within the product has a SKU which is already in use : %s":"A variation within the product has a SKU which is already in use : %s","Unable to edit a product with an unknown type : %s":"Unable to edit a product with an unknown type : %s","The requested sub item doesn\\'t exists.":"The requested sub item doesn\\'t exists.","One of the provided product variation doesn\\'t include an identifier.":"One of the provided product variation doesn\\'t include an identifier.","The product\\'s unit quantity has been updated.":"The product\\'s unit quantity has been updated.","Unable to reset this variable product \"%s":"Unable to reset this variable product \"%s","Adjusting grouped product inventory must result of a create, update, delete sale operation.":"Adjusting grouped product inventory must result of a create, update, delete sale operation.","Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).":"Unable to proceed, this action will cause negative stock (%s). Old Quantity : (%s), Quantity : (%s).","Unsupported stock action \"%s\"":"Unsupported stock action \"%s\"","%s product(s) has been deleted.":"%s product(s) has been deleted.","%s products(s) has been deleted.":"%s products(s) has been deleted.","Unable to find the product, as the argument \"%s\" which value is \"%s":"Unable to find the product, as the argument \"%s\" which value is \"%s","You cannot convert unit on a product having stock management disabled.":"You cannot convert unit on a product having stock management disabled.","The source and the destination unit can\\'t be the same. What are you trying to do ?":"The source and the destination unit can\\'t be the same. What are you trying to do ?","There is no source unit quantity having the name \"%s\" for the item %s":"There is no source unit quantity having the name \"%s\" for the item %s","There is no destination unit quantity having the name %s for the item %s":"There is no destination unit quantity having the name %s for the item %s","The source unit and the destination unit doens\\'t belong to the same unit group.":"The source unit and the destination unit doens\\'t belong to the same unit group.","The group %s has no base unit defined":"The group %s has no base unit defined","The conversion of %s(%s) to %s(%s) was successful":"The conversion of %s(%s) to %s(%s) was successful","The product has been deleted.":"The product has been deleted.","An error occurred: %s.":"An error occurred: %s.","A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.":"A stock operation has recently been detected, however NexoPOS was\\'nt able to update the report accordingly. This occurs if the daily dashboard reference has\\'nt been created.","Today\\'s Orders":"Today\\'s Orders","Today\\'s Sales":"Today\\'s Sales","Today\\'s Refunds":"Today\\'s Refunds","Today\\'s Customers":"Today\\'s Customers","The report will be generated. Try loading the report within few minutes.":"The report will be generated. Try loading the report within few minutes.","The database has been wiped out.":"The database has been wiped out.","No custom handler for the reset \"' . $mode . '\"":"No custom handler for the reset \"' . $mode . '\"","Unable to proceed. The parent tax doesn\\'t exists.":"Unable to proceed. The parent tax doesn\\'t exists.","A simple tax must not be assigned to a parent tax with the type \"simple":"A simple tax must not be assigned to a parent tax with the type \"simple","Created via tests":"Created via tests","The transaction has been successfully saved.":"The transaction has been successfully saved.","The transaction has been successfully updated.":"The transaction has been successfully updated.","Unable to find the transaction using the provided identifier.":"Unable to find the transaction using the provided identifier.","Unable to find the requested transaction using the provided id.":"Unable to find the requested transaction using the provided id.","The transction has been correctly deleted.":"The transction has been correctly deleted.","You cannot delete an account which has transactions bound.":"You cannot delete an account which has transactions bound.","The transaction account has been deleted.":"The transaction account has been deleted.","Unable to find the transaction account using the provided ID.":"Unable to find the transaction account using the provided ID.","The transaction account has been updated.":"The transaction account has been updated.","This transaction type can\\'t be triggered.":"This transaction type can\\'t be triggered.","The transaction has been successfully triggered.":"The transaction has been successfully triggered.","The transaction \"%s\" has been processed on day \"%s\".":"The transaction \"%s\" has been processed on day \"%s\".","The transaction \"%s\" has already been processed.":"The transaction \"%s\" has already been processed.","The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.":"The transactions \"%s\" hasn\\'t been proceesed, as it\\'s out of date.","The process has been correctly executed and all transactions has been processed.":"The process has been correctly executed and all transactions has been processed.","The process has been executed with some failures. %s\/%s process(es) has successed.":"The process has been executed with some failures. %s\/%s process(es) has successed.","Procurement : %s":"Procurement : %s","Procurement Liability : %s":"Procurement Liability : %s","Refunding : %s":"Refunding : %s","Spoiled Good : %s":"Spoiled Good : %s","Sale : %s":"Sale : %s","Liabilities Account":"Liabilities Account","Not found account type: %s":"Not found account type: %s","Refund : %s":"Refund : %s","Customer Account Crediting : %s":"Customer Account Crediting : %s","Customer Account Purchase : %s":"Customer Account Purchase : %s","Customer Account Deducting : %s":"Customer Account Deducting : %s","Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.":"Some transactions are disabled as NexoPOS is not able to perform asynchronous requests<\/a>.","The unit group %s doesn\\'t have a base unit":"The unit group %s doesn\\'t have a base unit","The system role \"Users\" can be retrieved.":"The system role \"Users\" can be retrieved.","The default role that must be assigned to new users cannot be retrieved.":"The default role that must be assigned to new users cannot be retrieved.","%s Second(s)":"%s Second(s)","Configure the accounting feature":"Configure the accounting feature","Define the symbol that indicate thousand. By default ":"Define the symbol that indicate thousand. By default ","Date Time Format":"Date Time Format","This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".":"This define how the date and times hould be formated. The default format is \"Y-m-d H:i\".","Date TimeZone":"Date TimeZone","Determine the default timezone of the store. Current Time: %s":"Determine the default timezone of the store. Current Time: %s","Configure how invoice and receipts are used.":"Configure how invoice and receipts are used.","configure settings that applies to orders.":"configure settings that applies to orders.","Report Settings":"Report Settings","Configure the settings":"Configure the settings","Wipes and Reset the database.":"Wipes and Reset the database.","Supply Delivery":"Supply Delivery","Configure the delivery feature.":"Configure the delivery feature.","Configure how background operations works.":"Configure how background operations works.","Every procurement will be added to the selected transaction account":"Every procurement will be added to the selected transaction account","Every sales will be added to the selected transaction account":"Every sales will be added to the selected transaction account","Customer Credit Account (crediting)":"Customer Credit Account (crediting)","Every customer credit will be added to the selected transaction account":"Every customer credit will be added to the selected transaction account","Customer Credit Account (debitting)":"Customer Credit Account (debitting)","Every customer credit removed will be added to the selected transaction account":"Every customer credit removed will be added to the selected transaction account","Sales refunds will be attached to this transaction account":"Sales refunds will be attached to this transaction account","Stock Return Account (Spoiled Items)":"Stock Return Account (Spoiled Items)","Disbursement (cash register)":"Disbursement (cash register)","Transaction account for all cash disbursement.":"Transaction account for all cash disbursement.","Liabilities":"Liabilities","Transaction account for all liabilities.":"Transaction account for all liabilities.","You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.":"You must create a customer to which each sales are attributed when the walking customer doesn\\'t register.","Show Tax Breakdown":"Show Tax Breakdown","Will display the tax breakdown on the receipt\/invoice.":"Will display the tax breakdown on the receipt\/invoice.","Available tags : ":"Available tags : ","{store_name}: displays the store name.":"{store_name}: displays the store name.","{store_email}: displays the store email.":"{store_email}: displays the store email.","{store_phone}: displays the store phone number.":"{store_phone}: displays the store phone number.","{cashier_name}: displays the cashier name.":"{cashier_name}: displays the cashier name.","{cashier_id}: displays the cashier id.":"{cashier_id}: displays the cashier id.","{order_code}: displays the order code.":"{order_code}: displays the order code.","{order_date}: displays the order date.":"{order_date}: displays the order date.","{order_type}: displays the order type.":"{order_type}: displays the order type.","{customer_email}: displays the customer email.":"{customer_email}: displays the customer email.","{shipping_first_name}: displays the shipping first name.":"{shipping_first_name}: displays the shipping first name.","{shipping_last_name}: displays the shipping last name.":"{shipping_last_name}: displays the shipping last name.","{shipping_phone}: displays the shipping phone.":"{shipping_phone}: displays the shipping phone.","{shipping_address_1}: displays the shipping address_1.":"{shipping_address_1}: displays the shipping address_1.","{shipping_address_2}: displays the shipping address_2.":"{shipping_address_2}: displays the shipping address_2.","{shipping_country}: displays the shipping country.":"{shipping_country}: displays the shipping country.","{shipping_city}: displays the shipping city.":"{shipping_city}: displays the shipping city.","{shipping_pobox}: displays the shipping pobox.":"{shipping_pobox}: displays the shipping pobox.","{shipping_company}: displays the shipping company.":"{shipping_company}: displays the shipping company.","{shipping_email}: displays the shipping email.":"{shipping_email}: displays the shipping email.","{billing_first_name}: displays the billing first name.":"{billing_first_name}: displays the billing first name.","{billing_last_name}: displays the billing last name.":"{billing_last_name}: displays the billing last name.","{billing_phone}: displays the billing phone.":"{billing_phone}: displays the billing phone.","{billing_address_1}: displays the billing address_1.":"{billing_address_1}: displays the billing address_1.","{billing_address_2}: displays the billing address_2.":"{billing_address_2}: displays the billing address_2.","{billing_country}: displays the billing country.":"{billing_country}: displays the billing country.","{billing_city}: displays the billing city.":"{billing_city}: displays the billing city.","{billing_pobox}: displays the billing pobox.":"{billing_pobox}: displays the billing pobox.","{billing_company}: displays the billing company.":"{billing_company}: displays the billing company.","{billing_email}: displays the billing email.":"{billing_email}: displays the billing email.","Available tags :":"Available tags :","Quick Product Default Unit":"Quick Product Default Unit","Set what unit is assigned by default to all quick product.":"Set what unit is assigned by default to all quick product.","Hide Exhausted Products":"Hide Exhausted Products","Will hide exhausted products from selection on the POS.":"Will hide exhausted products from selection on the POS.","Hide Empty Category":"Hide Empty Category","Category with no or exhausted products will be hidden from selection.":"Category with no or exhausted products will be hidden from selection.","Default Printing (web)":"Default Printing (web)","The amount numbers shortcuts separated with a \"|\".":"The amount numbers shortcuts separated with a \"|\".","No submit URL was provided":"No submit URL was provided","Sorting is explicitely disabled on this column":"Sorting is explicitely disabled on this column","An unpexpected error occured while using the widget.":"An unpexpected error occured while using the widget.","This field must be similar to \"{other}\"\"":"This field must be similar to \"{other}\"\"","This field must have at least \"{length}\" characters\"":"This field must have at least \"{length}\" characters\"","This field must have at most \"{length}\" characters\"":"This field must have at most \"{length}\" characters\"","This field must be different from \"{other}\"\"":"This field must be different from \"{other}\"\"","Search result":"Search result","Choose...":"Choose...","The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.":"The component ${field.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.","+{count} other":"+{count} other","The selected print gateway doesn't support this type of printing.":"The selected print gateway doesn't support this type of printing.","millisecond| second| minute| hour| day| week| month| year| decade| century| millennium":"millisecond| second| minute| hour| day| week| month| year| decade| century| millennium","milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia":"milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia","An error occured":"An error occured","You\\'re about to delete selected resources. Would you like to proceed?":"You\\'re about to delete selected resources. Would you like to proceed?","See Error":"See Error","Your uploaded files will displays here.":"Your uploaded files will displays here.","Nothing to care about !":"Nothing to care about !","Would you like to bulk edit a system role ?":"Would you like to bulk edit a system role ?","Total :":"Total :","Remaining :":"Remaining :","Instalments:":"Instalments:","This instalment doesn\\'t have any payment attached.":"This instalment doesn\\'t have any payment attached.","You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?":"You make a payment for {amount}. A payment can\\'t be canceled. Would you like to proceed ?","An error has occured while seleting the payment gateway.":"An error has occured while seleting the payment gateway.","You're not allowed to add a discount on the product.":"You're not allowed to add a discount on the product.","You're not allowed to add a discount on the cart.":"You're not allowed to add a discount on the cart.","Cash Register : {register}":"Cash Register : {register}","The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?":"The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?","You don't have the right to edit the purchase price.":"You don't have the right to edit the purchase price.","Dynamic product can\\'t have their price updated.":"Dynamic product can\\'t have their price updated.","You\\'re not allowed to edit the order settings.":"You\\'re not allowed to edit the order settings.","Looks like there is either no products and no categories. How about creating those first to get started ?":"Looks like there is either no products and no categories. How about creating those first to get started ?","Create Categories":"Create Categories","You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?":"You\\'re about to use {amount} from the customer account to make a payment. Would you like to proceed ?","An unexpected error has occured while loading the form. Please check the log or contact the support.":"An unexpected error has occured while loading the form. Please check the log or contact the support.","We were not able to load the units. Make sure there are units attached on the unit group selected.":"We were not able to load the units. Make sure there are units attached on the unit group selected.","The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?":"The current unit you\\'re about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?","There shoulnd\\'t be more option than there are units.":"There shoulnd\\'t be more option than there are units.","Either Selling or Purchase unit isn\\'t defined. Unable to proceed.":"Either Selling or Purchase unit isn\\'t defined. Unable to proceed.","Select the procured unit first before selecting the conversion unit.":"Select the procured unit first before selecting the conversion unit.","Convert to unit":"Convert to unit","An unexpected error has occured":"An unexpected error has occured","Unable to add product which doesn\\'t unit quantities defined.":"Unable to add product which doesn\\'t unit quantities defined.","{product}: Purchase Unit":"{product}: Purchase Unit","The product will be procured on that unit.":"The product will be procured on that unit.","Unkown Unit":"Unkown Unit","Choose Tax":"Choose Tax","The tax will be assigned to the procured product.":"The tax will be assigned to the procured product.","Show Details":"Show Details","Hide Details":"Hide Details","Important Notes":"Important Notes","Stock Management Products.":"Stock Management Products.","Doesn\\'t work with Grouped Product.":"Doesn\\'t work with Grouped Product.","Convert":"Convert","Looks like no valid products matched the searched term.":"Looks like no valid products matched the searched term.","This product doesn't have any stock to adjust.":"This product doesn't have any stock to adjust.","Select Unit":"Select Unit","Select the unit that you want to adjust the stock with.":"Select the unit that you want to adjust the stock with.","A similar product with the same unit already exists.":"A similar product with the same unit already exists.","Select Procurement":"Select Procurement","Select the procurement that you want to adjust the stock with.":"Select the procurement that you want to adjust the stock with.","Select Action":"Select Action","Select the action that you want to perform on the stock.":"Select the action that you want to perform on the stock.","Would you like to remove the selected products from the table ?":"Would you like to remove the selected products from the table ?","Unit:":"Unit:","Operation:":"Operation:","Procurement:":"Procurement:","Reason:":"Reason:","Provided":"Provided","Not Provided":"Not Provided","Remove Selected":"Remove Selected","Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.":"Token are used to provide a secure access to NexoPOS resources without having to share your personal username and password.\n Once generated, they won\\'t expires until you explicitely revoke it.","You haven\\'t yet generated any token for your account. Create one to get started.":"You haven\\'t yet generated any token for your account. Create one to get started.","You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?":"You're about to delete a token that might be in use by an external app. Deleting will prevent that app from accessing the API. Would you like to proceed ?","Date Range : {date1} - {date2}":"Date Range : {date1} - {date2}","Document : Best Products":"Document : Best Products","By : {user}":"By : {user}","Range : {date1} — {date2}":"Range : {date1} — {date2}","Document : Sale By Payment":"Document : Sale By Payment","Document : Customer Statement":"Document : Customer Statement","Customer : {selectedCustomerName}":"Customer : {selectedCustomerName}","All Categories":"All Categories","All Units":"All Units","Date : {date}":"Date : {date}","Document : {reportTypeName}":"Document : {reportTypeName}","Threshold":"Threshold","Select Units":"Select Units","An error has occured while loading the units.":"An error has occured while loading the units.","An error has occured while loading the categories.":"An error has occured while loading the categories.","Document : Payment Type":"Document : Payment Type","Document : Profit Report":"Document : Profit Report","Filter by Category":"Filter by Category","Filter by Units":"Filter by Units","An error has occured while loading the categories":"An error has occured while loading the categories","An error has occured while loading the units":"An error has occured while loading the units","By Type":"By Type","By User":"By User","By Category":"By Category","All Category":"All Category","Document : Sale Report":"Document : Sale Report","Filter By Category":"Filter By Category","Allow you to choose the category.":"Allow you to choose the category.","No category was found for proceeding the filtering.":"No category was found for proceeding the filtering.","Document : Sold Stock Report":"Document : Sold Stock Report","Filter by Unit":"Filter by Unit","Limit Results By Categories":"Limit Results By Categories","Limit Results By Units":"Limit Results By Units","Generate Report":"Generate Report","Document : Combined Products History":"Document : Combined Products History","Ini. Qty":"Ini. Qty","Added Quantity":"Added Quantity","Add. Qty":"Add. Qty","Sold Quantity":"Sold Quantity","Sold Qty":"Sold Qty","Defective Quantity":"Defective Quantity","Defec. Qty":"Defec. Qty","Final Quantity":"Final Quantity","Final Qty":"Final Qty","No data available":"No data available","Document : Yearly Report":"Document : Yearly Report","The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.":"The report will be computed for the current year, a job will be dispatched and you'll be informed once it's completed.","Unable to edit this transaction":"Unable to edit this transaction","This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.":"This transaction was created with a type that is no longer available. This type is no longer available because NexoPOS is unable to perform background requests.","Save Transaction":"Save Transaction","While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.":"While selecting entity transaction, the amount defined will be multiplied by the total user assigned to the User group selected.","The transaction is about to be saved. Would you like to confirm your action ?":"The transaction is about to be saved. Would you like to confirm your action ?","Unable to load the transaction":"Unable to load the transaction","You cannot edit this transaction if NexoPOS cannot perform background requests.":"You cannot edit this transaction if NexoPOS cannot perform background requests.","MySQL is selected as database driver":"MySQL is selected as database driver","Please provide the credentials to ensure NexoPOS can connect to the database.":"Please provide the credentials to ensure NexoPOS can connect to the database.","Sqlite is selected as database driver":"Sqlite is selected as database driver","Make sure Sqlite module is available for PHP. Your database will be located on the database directory.":"Make sure Sqlite module is available for PHP. Your database will be located on the database directory.","Checking database connectivity...":"Checking database connectivity...","Driver":"Driver","Set the database driver":"Set the database driver","Hostname":"Hostname","Provide the database hostname":"Provide the database hostname","Username required to connect to the database.":"Username required to connect to the database.","The username password required to connect.":"The username password required to connect.","Database Name":"Database Name","Provide the database name. Leave empty to use default file for SQLite Driver.":"Provide the database name. Leave empty to use default file for SQLite Driver.","Database Prefix":"Database Prefix","Provide the database prefix.":"Provide the database prefix.","Port":"Port","Provide the hostname port.":"Provide the hostname port.","NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.":"NexoPOS<\/strong> is now able to connect to the database. Start by creating the administrator account and giving a name to your installation. Once installed, this page will no longer be accessible.","Install":"Install","Application":"Application","That is the application name.":"That is the application name.","Provide the administrator username.":"Provide the administrator username.","Provide the administrator email.":"Provide the administrator email.","What should be the password required for authentication.":"What should be the password required for authentication.","Should be the same as the password above.":"Should be the same as the password above.","Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.":"Thank you for using NexoPOS to manage your store. This installation wizard will help you running NexoPOS in no time.","Choose your language to get started.":"Choose your language to get started.","Remaining Steps":"Remaining Steps","Database Configuration":"Database Configuration","Application Configuration":"Application Configuration","Language Selection":"Language Selection","Select what will be the default language of NexoPOS.":"Select what will be the default language of NexoPOS.","In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.":"In order to keep NexoPOS running smoothly with updates, we need to proceed to the database migration. In fact you don\\'t need to do any action, just wait until the process is done and you\\'ll be redirected.","Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.":"Looks like an error has occurred during the update. Usually, giving another shot should fix that. However, if you still don\\'t get any chance.","Please report this message to the support : ":"Please report this message to the support : ","No refunds made so far. Good news right?":"No refunds made so far. Good news right?","Open Register : %s":"Open Register : %s","Loading Coupon For : ":"Loading Coupon For : ","This coupon requires products that aren\\'t available on the cart at the moment.":"This coupon requires products that aren\\'t available on the cart at the moment.","This coupon requires products that belongs to specific categories that aren\\'t included at the moment.":"This coupon requires products that belongs to specific categories that aren\\'t included at the moment.","Too many results.":"Too many results.","New Customer":"New Customer","Purchases":"Purchases","Owed":"Owed","Usage :":"Usage :","Code :":"Code :","Order Reference":"Order Reference","The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?":"The product \"{product}\" can\\'t be added from a search field, as \"Accurate Tracking\" is enabled. Would you like to learn more ?","{product} : Units":"{product} : Units","This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.":"This product doesn\\'t have any unit defined for selling. Make sure to mark at least one unit as visible.","Previewing :":"Previewing :","Search for options":"Search for options","The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.":"The API token has been generated. Make sure to copy this code on a safe place as it will only be displayed once.\n If you loose this token, you\\'ll need to revoke it and generate a new one.","The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.":"The selected tax group doesn\\'t have any assigned sub taxes. This might cause wrong figures.","The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.":"The coupons \"%s\" has been removed from the cart, as it\\'s required conditions are no more meet.","The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.":"The current order will be void. This will cancel the transaction, but the order won\\'t be deleted. Further details about the operation will be tracked on the report. Consider providing the reason of this operation.","Invalid Error Message":"Invalid Error Message","Unamed Settings Page":"Unamed Settings Page","Description of unamed setting page":"Description of unamed setting page","Text Field":"Text Field","This is a sample text field.":"This is a sample text field.","No description has been provided.":"No description has been provided.","You\\'re using NexoPOS %s<\/a>":"You\\'re using NexoPOS %s<\/a>","If you haven\\'t asked this, please get in touch with the administrators.":"If you haven\\'t asked this, please get in touch with the administrators.","A new user has registered to your store (%s) with the email %s.":"A new user has registered to your store (%s) with the email %s.","The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.":"The account you have created for __%s__, has been successfully created. You can now login user your username (__%s__) and the password you have defined.","Note: ":"Note: ","Inclusive Product Taxes":"Inclusive Product Taxes","Exclusive Product Taxes":"Exclusive Product Taxes","Condition:":"Condition:","Date : %s":"Date : %s","NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.":"NexoPOS wasn\\'t able to perform a database request. This error might be related to a misconfiguration on your .env file. The following guide might be useful to help you solving this issue.","Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.":"Unfortunately, something unexpected happened. You can start by giving another shot clicking on \"Try Again\". If the issue persist, uses the bellow output to receive support.","Retry":"Retry","If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.":"If you see this page, this means NexoPOS is correctly installed on your system. As this page is meant to be the frontend, NexoPOS doesn't have a frontend for the meantime. This page shows useful links that will take you to the important resources.","Compute Products":"Compute Products","Unammed Section":"Unammed Section","%s order(s) has recently been deleted as they have expired.":"%s order(s) has recently been deleted as they have expired.","%s products will be updated":"%s products will be updated","Procurement %s":"Procurement %s","You cannot assign the same unit to more than one selling unit.":"You cannot assign the same unit to more than one selling unit.","The quantity to convert can\\'t be zero.":"The quantity to convert can\\'t be zero.","The source unit \"(%s)\" for the product \"%s":"The source unit \"(%s)\" for the product \"%s","The conversion from \"%s\" will cause a decimal value less than one count of the destination unit \"%s\".":"The conversion from \"%s\" will cause a decimal value less than one count of the destination unit \"%s\".","{customer_first_name}: displays the customer first name.":"{customer_first_name}: displays the customer first name.","{customer_last_name}: displays the customer last name.":"{customer_last_name}: displays the customer last name.","No Unit Selected":"No Unit Selected","Unit Conversion : {product}":"Unit Conversion : {product}","Convert {quantity} available":"Convert {quantity} available","The quantity should be greater than 0":"The quantity should be greater than 0","The provided quantity can\\'t result in any convertion for unit \"{destination}\"":"The provided quantity can\\'t result in any convertion for unit \"{destination}\"","Conversion Warning":"Conversion Warning","Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?":"Only {quantity}({source}) can be converted to {destinationCount}({destination}). Would you like to proceed ?","Confirm Conversion":"Confirm Conversion","You\\'re about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?":"You\\'re about to convert {quantity}({source}) to {destinationCount}({destination}). Would you like to proceed?","Conversion Successful":"Conversion Successful","The product {product} has been converted successfully.":"The product {product} has been converted successfully.","An error occured while converting the product {product}":"An error occured while converting the product {product}","The quantity has been set to the maximum available":"The quantity has been set to the maximum available","The product {product} has no base unit":"The product {product} has no base unit","Developper Section":"Developper Section","The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?":"The database will be cleared and all data erased. Only users and roles are kept. Would you like to proceed ?","An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s":"An error has occurred while creating a barcode \"%s\" using the type \"%s\" for the product. Make sure the barcode value is correct for the barcode type selected. Additional insight : %s"} \ No newline at end of file diff --git a/pint.json b/pint.json index cb9fa30c0..f3bd28d1a 100644 --- a/pint.json +++ b/pint.json @@ -5,7 +5,12 @@ ], "rules": { "no_spaces_inside_parenthesis": false, - "Laravel/laravel_phpdoc_alignment": false, + "phpdoc_align": { + "align" : "vertical" + }, + "spaces_inside_parentheses": { + "space": "single" + }, "function_declaration": false, "trim_array_spaces": false, "no_spaces_around_offset": { diff --git a/public/build/assets/app-B8lxg4Au.css b/public/build/assets/app-B8lxg4Au.css new file mode 100644 index 000000000..96aebca12 --- /dev/null +++ b/public/build/assets/app-B8lxg4Au.css @@ -0,0 +1 @@ +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none!important}.\!visible,.visible{visibility:visible!important}.static{position:static!important}.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.inset-y-0{top:0!important;bottom:0!important}.-bottom-10{bottom:-5em!important}.-top-10{top:-5em!important}.-top-\[8px\]{top:-8px!important}.bottom-0{bottom:0!important}.left-0{left:0!important}.right-0{right:0!important}.top-0{top:0!important}.z-10{z-index:10!important}.z-30{z-index:30!important}.z-40{z-index:40!important}.z-50{z-index:50!important}.col-span-2{grid-column:span 2 / span 2!important}.col-span-3{grid-column:span 3 / span 3!important}.-m-2{margin:-.5rem!important}.-m-3{margin:-.75rem!important}.-m-4{margin:-1rem!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-4{margin:1rem!important}.-mx-1{margin-left:-.25rem!important;margin-right:-.25rem!important}.-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}.-mx-3{margin-left:-.75rem!important;margin-right:-.75rem!important}.-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}.-my-1{margin-top:-.25rem!important;margin-bottom:-.25rem!important}.-my-2{margin-top:-.5rem!important;margin-bottom:-.5rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.my-5{margin-top:1.25rem!important;margin-bottom:1.25rem!important}.-mb-2{margin-bottom:-.5rem!important}.-ml-28{margin-left:-7rem!important}.-ml-6{margin-left:-1.5rem!important}.-mt-4{margin-top:-1rem!important}.-mt-8{margin-top:-2rem!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:.75rem!important}.mb-4{margin-bottom:1rem!important}.mb-6{margin-bottom:1.5rem!important}.mb-8{margin-bottom:2rem!important}.ml-1{margin-left:.25rem!important}.ml-2{margin-left:.5rem!important}.ml-3{margin-left:.75rem!important}.ml-4{margin-left:1rem!important}.mr-1{margin-right:.25rem!important}.mr-2{margin-right:.5rem!important}.mr-4{margin-right:1rem!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-4{margin-top:1rem!important}.mt-5{margin-top:1.25rem!important}.mt-8{margin-top:2rem!important}.box-border{box-sizing:border-box!important}.block{display:block!important}.inline-block{display:inline-block!important}.flex{display:flex!important}.table{display:table!important}.table-cell{display:table-cell!important}.grid{display:grid!important}.hidden{display:none!important}.aspect-square{aspect-ratio:1 / 1!important}.h-0{height:0px!important}.h-10{height:2.5rem!important}.h-12{height:3rem!important}.h-120{height:30rem!important}.h-16{height:4rem!important}.h-2{height:.5rem!important}.h-2\/5-screen{height:40vh!important}.h-20{height:5rem!important}.h-24{height:6rem!important}.h-3\/5-screen{height:60vh!important}.h-32{height:8rem!important}.h-36{height:9rem!important}.h-40{height:10rem!important}.h-5{height:1.25rem!important}.h-5\/7-screen{height:71.42vh!important}.h-56{height:14rem!important}.h-6{height:1.5rem!important}.h-6\/7-screen{height:85.71vh!important}.h-60{height:15rem!important}.h-64{height:16rem!important}.h-8{height:2rem!important}.h-95vh{height:95vh!important}.h-96{height:24rem!important}.h-full{height:100%!important}.h-half{height:50vh!important}.h-screen{height:100vh!important}.max-h-5\/6-screen{max-height:83.33vh!important}.max-h-80{max-height:20rem!important}.min-h-2\/5-screen{min-height:40vh!important}.w-0{width:0px!important}.w-1\/2{width:50%!important}.w-1\/3{width:33.333333%!important}.w-1\/4{width:25%!important}.w-1\/6{width:16.666667%!important}.w-10{width:2.5rem!important}.w-11\/12{width:91.666667%!important}.w-12{width:3rem!important}.w-16{width:4rem!important}.w-20{width:5rem!important}.w-24{width:6rem!important}.w-3\/4-screen{width:75vw!important}.w-32{width:8rem!important}.w-36{width:9rem!important}.w-4\/5-screen{width:80vw!important}.w-48{width:12rem!important}.w-5{width:1.25rem!important}.w-5\/7-screen{width:71.42vw!important}.w-52{width:13rem!important}.w-56{width:14rem!important}.w-6{width:1.5rem!important}.w-6\/7-screen{width:85.71vw!important}.w-60{width:15rem!important}.w-64{width:16rem!important}.w-72{width:18rem!important}.w-8{width:2rem!important}.w-95vw{width:95vw!important}.w-\[225px\]{width:225px!important}.w-auto{width:auto!important}.w-full{width:100%!important}.w-screen{width:100vw!important}.min-w-\[2rem\]{min-width:2rem!important}.min-w-fit{min-width:fit-content!important}.flex-auto{flex:1 1 auto!important}.flex-shrink-0{flex-shrink:0!important}.grow-0{flex-grow:0!important}.table-auto{table-layout:auto!important}.origin-bottom-right{transform-origin:bottom right!important}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite!important}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite!important}.cursor-default{cursor:default!important}.cursor-not-allowed{cursor:not-allowed!important}.cursor-pointer{cursor:pointer!important}.select-none{-webkit-user-select:none!important;user-select:none!important}.resize{resize:both!important}.appearance-none{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}.grid-flow-row{grid-auto-flow:row!important}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))!important}.grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))!important}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))!important}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))!important}.flex-row{flex-direction:row!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-col{flex-direction:column!important}.flex-wrap{flex-wrap:wrap!important}.items-start{align-items:flex-start!important}.items-end{align-items:flex-end!important}.items-center{align-items:center!important}.justify-start{justify-content:flex-start!important}.justify-end{justify-content:flex-end!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.justify-around{justify-content:space-around!important}.gap-0{gap:0px!important}.gap-2{gap:.5rem!important}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0 !important;border-right-width:calc(1px * var(--tw-divide-x-reverse))!important;border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))!important}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0 !important;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))!important;border-bottom-width:calc(1px * var(--tw-divide-y-reverse))!important}.divide-y-4>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0 !important;border-top-width:calc(4px * calc(1 - var(--tw-divide-y-reverse)))!important;border-bottom-width:calc(4px * var(--tw-divide-y-reverse))!important}.self-center{align-self:center!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-x-auto{overflow-x:auto!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-scroll{overflow-y:scroll!important}.truncate{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}.whitespace-pre-wrap{white-space:pre-wrap!important}.rounded{border-radius:.25rem!important}.rounded-full{border-radius:9999px!important}.rounded-lg{border-radius:.5rem!important}.rounded-md{border-radius:.375rem!important}.rounded-none{border-radius:0!important}.rounded-b-md{border-bottom-right-radius:.375rem!important;border-bottom-left-radius:.375rem!important}.rounded-t-lg{border-top-left-radius:.5rem!important;border-top-right-radius:.5rem!important}.rounded-bl{border-bottom-left-radius:.25rem!important}.rounded-bl-lg{border-bottom-left-radius:.5rem!important}.rounded-br{border-bottom-right-radius:.25rem!important}.rounded-br-lg{border-bottom-right-radius:.5rem!important}.rounded-tl{border-top-left-radius:.25rem!important}.rounded-tl-lg{border-top-left-radius:.5rem!important}.rounded-tr{border-top-right-radius:.25rem!important}.rounded-tr-lg{border-top-right-radius:.5rem!important}.border{border-width:1px!important}.border-0{border-width:0px!important}.border-2{border-width:2px!important}.border-4{border-width:4px!important}.border-b{border-bottom-width:1px!important}.border-b-0{border-bottom-width:0px!important}.border-b-2{border-bottom-width:2px!important}.border-b-4{border-bottom-width:4px!important}.border-l{border-left-width:1px!important}.border-l-0{border-left-width:0px!important}.border-l-2{border-left-width:2px!important}.border-l-4{border-left-width:4px!important}.border-l-8{border-left-width:8px!important}.border-r{border-right-width:1px!important}.border-r-0{border-right-width:0px!important}.border-r-2{border-right-width:2px!important}.border-t{border-top-width:1px!important}.border-t-0{border-top-width:0px!important}.border-t-4{border-top-width:4px!important}.border-dashed{border-style:dashed!important}.border-black{--tw-border-opacity: 1 !important;border-color:rgb(0 0 0 / var(--tw-border-opacity))!important}.border-blue-200{--tw-border-opacity: 1 !important;border-color:rgb(191 219 254 / var(--tw-border-opacity))!important}.border-blue-400{--tw-border-opacity: 1 !important;border-color:rgb(96 165 250 / var(--tw-border-opacity))!important}.border-blue-600{--tw-border-opacity: 1 !important;border-color:rgb(37 99 235 / var(--tw-border-opacity))!important}.border-box-background{--tw-border-opacity: 1 !important;border-color:rgb(var(--box-background) / var(--tw-border-opacity))!important}.border-box-edge{--tw-border-opacity: 1 !important;border-color:rgb(var(--box-edge) / var(--tw-border-opacity))!important}.border-box-elevation-edge{--tw-border-opacity: 1 !important;border-color:rgb(var(--box-elevation-edge) / var(--tw-border-opacity))!important}.border-danger-secondary{--tw-border-opacity: 1 !important;border-color:rgb(var(--danger-secondary) / var(--tw-border-opacity))!important}.border-error-primary{--tw-border-opacity: 1 !important;border-color:rgb(var(--error-primary) / var(--tw-border-opacity))!important}.border-error-secondary{--tw-border-opacity: 1 !important;border-color:rgb(var(--error-secondary) / var(--tw-border-opacity))!important}.border-error-tertiary{--tw-border-opacity: 1 !important;border-color:rgb(var(--error-tertiary) / var(--tw-border-opacity))!important}.border-floating-menu-edge{--tw-border-opacity: 1 !important;border-color:rgb(var(--floating-menu-edge) / var(--tw-border-opacity))!important}.border-gray-200{--tw-border-opacity: 1 !important;border-color:rgb(229 231 235 / var(--tw-border-opacity))!important}.border-gray-300{--tw-border-opacity: 1 !important;border-color:rgb(209 213 219 / var(--tw-border-opacity))!important}.border-gray-400{--tw-border-opacity: 1 !important;border-color:rgb(156 163 175 / var(--tw-border-opacity))!important}.border-gray-500{--tw-border-opacity: 1 !important;border-color:rgb(107 114 128 / var(--tw-border-opacity))!important}.border-gray-700{--tw-border-opacity: 1 !important;border-color:rgb(55 65 81 / var(--tw-border-opacity))!important}.border-gray-800{--tw-border-opacity: 1 !important;border-color:rgb(31 41 55 / var(--tw-border-opacity))!important}.border-green-200{--tw-border-opacity: 1 !important;border-color:rgb(187 247 208 / var(--tw-border-opacity))!important}.border-green-600{--tw-border-opacity: 1 !important;border-color:rgb(22 163 74 / var(--tw-border-opacity))!important}.border-info-primary{--tw-border-opacity: 1 !important;border-color:rgb(var(--info-primary) / var(--tw-border-opacity))!important}.border-info-secondary{--tw-border-opacity: 1 !important;border-color:rgb(var(--info-secondary) / var(--tw-border-opacity))!important}.border-info-tertiary{--tw-border-opacity: 1 !important;border-color:rgb(var(--info-tertiary) / var(--tw-border-opacity))!important}.border-input-edge{--tw-border-opacity: 1 !important;border-color:rgb(var(--input-edge) / var(--tw-border-opacity))!important}.border-input-option-hover{--tw-border-opacity: 1 !important;border-color:rgb(var(--input-option-hover) / var(--tw-border-opacity))!important}.border-numpad-edge{--tw-border-opacity: 1 !important;border-color:rgb(var(--numpad-edge) / var(--tw-border-opacity))!important}.border-red-200{--tw-border-opacity: 1 !important;border-color:rgb(254 202 202 / var(--tw-border-opacity))!important}.border-slate-400{--tw-border-opacity: 1 !important;border-color:rgb(148 163 184 / var(--tw-border-opacity))!important}.border-slate-600{--tw-border-opacity: 1 !important;border-color:rgb(71 85 105 / var(--tw-border-opacity))!important}.border-success-primary{--tw-border-opacity: 1 !important;border-color:rgb(var(--success-primary) / var(--tw-border-opacity))!important}.border-success-secondary{--tw-border-opacity: 1 !important;border-color:rgb(var(--success-secondary) / var(--tw-border-opacity))!important}.border-success-tertiary{--tw-border-opacity: 1 !important;border-color:rgb(var(--success-tertiary) / var(--tw-border-opacity))!important}.border-tab-table-th{--tw-border-opacity: 1 !important;border-color:rgb(var(--tab-table-th) / var(--tw-border-opacity))!important}.border-tab-table-th-edge{--tw-border-opacity: 1 !important;border-color:rgb(var(--tab-table-th-edge) / var(--tw-border-opacity))!important}.border-table-th-edge{--tw-border-opacity: 1 !important;border-color:rgb(var(--table-th-edge) / var(--tw-border-opacity))!important}.border-tertiary{--tw-border-opacity: 1 !important;border-color:rgb(var(--tertiary) / var(--tw-border-opacity))!important}.border-transparent{border-color:transparent!important}.border-yellow-200{--tw-border-opacity: 1 !important;border-color:rgb(254 240 138 / var(--tw-border-opacity))!important}.border-b-transparent{border-bottom-color:transparent!important}.bg-blue-100{--tw-bg-opacity: 1 !important;background-color:rgb(219 234 254 / var(--tw-bg-opacity))!important}.bg-blue-400{--tw-bg-opacity: 1 !important;background-color:rgb(96 165 250 / var(--tw-bg-opacity))!important}.bg-blue-500{--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.bg-box-background{--tw-bg-opacity: 1 !important;background-color:rgb(var(--box-background) / var(--tw-bg-opacity))!important}.bg-box-elevation-background{--tw-bg-opacity: 1 !important;background-color:rgb(var(--box-elevation-background) / var(--tw-bg-opacity))!important}.bg-box-elevation-hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--box-elevation-hover) / var(--tw-bg-opacity))!important}.bg-error-primary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--error-primary) / var(--tw-bg-opacity))!important}.bg-error-secondary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--error-secondary) / var(--tw-bg-opacity))!important}.bg-error-tertiary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--error-tertiary) / var(--tw-bg-opacity))!important}.bg-floating-menu{--tw-bg-opacity: 1 !important;background-color:rgb(var(--floating-menu) / var(--tw-bg-opacity))!important}.bg-gray-200{--tw-bg-opacity: 1 !important;background-color:rgb(229 231 235 / var(--tw-bg-opacity))!important}.bg-gray-300{--tw-bg-opacity: 1 !important;background-color:rgb(209 213 219 / var(--tw-bg-opacity))!important}.bg-gray-400{--tw-bg-opacity: 1 !important;background-color:rgb(156 163 175 / var(--tw-bg-opacity))!important}.bg-gray-500{--tw-bg-opacity: 1 !important;background-color:rgb(107 114 128 / var(--tw-bg-opacity))!important}.bg-gray-600{--tw-bg-opacity: 1 !important;background-color:rgb(75 85 99 / var(--tw-bg-opacity))!important}.bg-gray-700{--tw-bg-opacity: 1 !important;background-color:rgb(55 65 81 / var(--tw-bg-opacity))!important}.bg-gray-800{--tw-bg-opacity: 1 !important;background-color:rgb(31 41 55 / var(--tw-bg-opacity))!important}.bg-gray-900{--tw-bg-opacity: 1 !important;background-color:rgb(17 24 39 / var(--tw-bg-opacity))!important}.bg-green-100{--tw-bg-opacity: 1 !important;background-color:rgb(220 252 231 / var(--tw-bg-opacity))!important}.bg-green-200{--tw-bg-opacity: 1 !important;background-color:rgb(187 247 208 / var(--tw-bg-opacity))!important}.bg-green-400{--tw-bg-opacity: 1 !important;background-color:rgb(74 222 128 / var(--tw-bg-opacity))!important}.bg-green-500{--tw-bg-opacity: 1 !important;background-color:rgb(34 197 94 / var(--tw-bg-opacity))!important}.bg-info-primary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--info-primary) / var(--tw-bg-opacity))!important}.bg-info-secondary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--info-secondary) / var(--tw-bg-opacity))!important}.bg-info-tertiary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--info-tertiary) / var(--tw-bg-opacity))!important}.bg-input-background{--tw-bg-opacity: 1 !important;background-color:rgb(var(--input-background) / var(--tw-bg-opacity))!important}.bg-input-button{--tw-bg-opacity: 1 !important;background-color:rgb(var(--input-button) / var(--tw-bg-opacity))!important}.bg-input-disabled{--tw-bg-opacity: 1 !important;background-color:rgb(var(--input-disabled) / var(--tw-bg-opacity))!important}.bg-input-edge{--tw-bg-opacity: 1 !important;background-color:rgb(var(--input-edge) / var(--tw-bg-opacity))!important}.bg-orange-400{--tw-bg-opacity: 1 !important;background-color:rgb(251 146 60 / var(--tw-bg-opacity))!important}.bg-popup-surface{--tw-bg-opacity: 1 !important;background-color:rgb(var(--popup-surface) / var(--tw-bg-opacity))!important}.bg-red-100{--tw-bg-opacity: 1 !important;background-color:rgb(254 226 226 / var(--tw-bg-opacity))!important}.bg-red-400{--tw-bg-opacity: 1 !important;background-color:rgb(248 113 113 / var(--tw-bg-opacity))!important}.bg-red-500{--tw-bg-opacity: 1 !important;background-color:rgb(239 68 68 / var(--tw-bg-opacity))!important}.bg-slate-200{--tw-bg-opacity: 1 !important;background-color:rgb(226 232 240 / var(--tw-bg-opacity))!important}.bg-slate-300{--tw-bg-opacity: 1 !important;background-color:rgb(203 213 225 / var(--tw-bg-opacity))!important}.bg-success-primary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--success-primary) / var(--tw-bg-opacity))!important}.bg-success-secondary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--success-secondary) / var(--tw-bg-opacity))!important}.bg-success-tertiary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--success-tertiary) / var(--tw-bg-opacity))!important}.bg-surface{--tw-bg-opacity: 1 !important;background-color:rgb(var(--surface) / var(--tw-bg-opacity))!important}.bg-tab-active{--tw-bg-opacity: 1 !important;background-color:rgb(var(--tab-active) / var(--tw-bg-opacity))!important}.bg-tab-inactive{--tw-bg-opacity: 1 !important;background-color:rgb(var(--tab-inactive) / var(--tw-bg-opacity))!important}.bg-tab-table-th{--tw-bg-opacity: 1 !important;background-color:rgb(var(--tab-table-th) / var(--tw-bg-opacity))!important}.bg-transparent{background-color:transparent!important}.bg-warning-secondary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--warning-secondary) / var(--tw-bg-opacity))!important}.bg-white{--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important}.bg-yellow-100{--tw-bg-opacity: 1 !important;background-color:rgb(254 249 195 / var(--tw-bg-opacity))!important}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))!important}.bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--tw-gradient-stops))!important}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))!important}.from-blue-200{--tw-gradient-from: #bfdbfe var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(191 219 254 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-blue-400{--tw-gradient-from: #60a5fa var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(96 165 250 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-blue-500{--tw-gradient-from: #3b82f6 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-error-secondary{--tw-gradient-from: rgb(var(--error-secondary)) var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(var(--error-secondary) / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-green-400{--tw-gradient-from: #4ade80 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(74 222 128 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-indigo-400{--tw-gradient-from: #818cf8 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(129 140 248 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-info-secondary{--tw-gradient-from: rgb(var(--info-secondary)) var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(var(--info-secondary) / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-orange-500{--tw-gradient-from: #f97316 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(249 115 22 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-pink-400{--tw-gradient-from: #f472b6 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(244 114 182 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-purple-400{--tw-gradient-from: #c084fc var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(192 132 252 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-purple-500{--tw-gradient-from: #a855f7 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-red-400{--tw-gradient-from: #f87171 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(248 113 113 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-red-500{--tw-gradient-from: #ef4444 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(239 68 68 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-success-secondary{--tw-gradient-from: rgb(var(--success-secondary)) var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(var(--success-secondary) / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-teal-500{--tw-gradient-from: #14b8a6 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(20 184 166 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.to-blue-400{--tw-gradient-to: #60a5fa var(--tw-gradient-to-position) !important}.to-blue-500{--tw-gradient-to: #3b82f6 var(--tw-gradient-to-position) !important}.to-blue-600{--tw-gradient-to: #2563eb var(--tw-gradient-to-position) !important}.to-blue-700{--tw-gradient-to: #1d4ed8 var(--tw-gradient-to-position) !important}.to-green-600{--tw-gradient-to: #16a34a var(--tw-gradient-to-position) !important}.to-green-700{--tw-gradient-to: #15803d var(--tw-gradient-to-position) !important}.to-indigo-400{--tw-gradient-to: #818cf8 var(--tw-gradient-to-position) !important}.to-indigo-600{--tw-gradient-to: #4f46e5 var(--tw-gradient-to-position) !important}.to-info-tertiary{--tw-gradient-to: rgb(var(--info-tertiary)) var(--tw-gradient-to-position) !important}.to-pink-500{--tw-gradient-to: #ec4899 var(--tw-gradient-to-position) !important}.to-purple-600{--tw-gradient-to: #9333ea var(--tw-gradient-to-position) !important}.to-red-500{--tw-gradient-to: #ef4444 var(--tw-gradient-to-position) !important}.to-red-600{--tw-gradient-to: #dc2626 var(--tw-gradient-to-position) !important}.to-red-700{--tw-gradient-to: #b91c1c var(--tw-gradient-to-position) !important}.to-teal-700{--tw-gradient-to: #0f766e var(--tw-gradient-to-position) !important}.bg-clip-text{-webkit-background-clip:text!important;background-clip:text!important}.object-cover{object-fit:cover!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-10{padding:2.5rem!important}.p-2{padding:.5rem!important}.p-3{padding:.75rem!important}.p-4{padding:1rem!important}.p-8{padding:2rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-10{padding-top:2.5rem!important;padding-bottom:2.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.py-5{padding-top:1.25rem!important;padding-bottom:1.25rem!important}.py-6{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-8{padding-top:2rem!important;padding-bottom:2rem!important}.pb-1{padding-bottom:.25rem!important}.pb-10{padding-bottom:2.5rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:.75rem!important}.pb-4{padding-bottom:1rem!important}.pl-0{padding-left:0!important}.pl-1{padding-left:.25rem!important}.pl-2{padding-left:.5rem!important}.pl-3{padding-left:.75rem!important}.pl-7{padding-left:1.75rem!important}.pl-8{padding-left:2rem!important}.pr-1{padding-right:.25rem!important}.pr-12{padding-right:3rem!important}.pr-2{padding-right:.5rem!important}.pr-8{padding-right:2rem!important}.pt-2{padding-top:.5rem!important}.pt-6{padding-top:1.5rem!important}.text-left{text-align:left!important}.text-center{text-align:center!important}.text-right{text-align:right!important}.font-body{font-family:Graphik,sans-serif!important}.text-2xl{font-size:1.5rem!important;line-height:2rem!important}.text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.text-4xl{font-size:2.25rem!important;line-height:2.5rem!important}.text-5xl{font-size:3rem!important;line-height:1!important}.text-6xl{font-size:3.75rem!important;line-height:1!important}.text-7xl{font-size:4.5rem!important;line-height:1!important}.text-8xl{font-size:6rem!important;line-height:1!important}.text-lg{font-size:1.125rem!important;line-height:1.75rem!important}.text-sm{font-size:.875rem!important;line-height:1.25rem!important}.text-xl{font-size:1.25rem!important;line-height:1.75rem!important}.text-xs{font-size:.75rem!important;line-height:1rem!important}.font-black{font-weight:900!important}.font-bold{font-weight:700!important}.font-medium{font-weight:500!important}.font-semibold{font-weight:600!important}.uppercase{text-transform:uppercase!important}.leading-5{line-height:1.25rem!important}.text-black{--tw-text-opacity: 1 !important;color:rgb(0 0 0 / var(--tw-text-opacity))!important}.text-blue-500{--tw-text-opacity: 1 !important;color:rgb(59 130 246 / var(--tw-text-opacity))!important}.text-blue-600{--tw-text-opacity: 1 !important;color:rgb(37 99 235 / var(--tw-text-opacity))!important}.text-danger-light-tertiary{--tw-text-opacity: 1 !important;color:rgb(var(--danger-light-tertiary) / var(--tw-text-opacity))!important}.text-error-light-tertiary{--tw-text-opacity: 1 !important;color:rgb(var(--error-light-tertiary) / var(--tw-text-opacity))!important}.text-error-primary{--tw-text-opacity: 1 !important;color:rgb(var(--error-primary) / var(--tw-text-opacity))!important}.text-error-secondary{--tw-text-opacity: 1 !important;color:rgb(var(--error-secondary) / var(--tw-text-opacity))!important}.text-error-tertiary{--tw-text-opacity: 1 !important;color:rgb(var(--error-tertiary) / var(--tw-text-opacity))!important}.text-gray-100{--tw-text-opacity: 1 !important;color:rgb(243 244 246 / var(--tw-text-opacity))!important}.text-gray-500{--tw-text-opacity: 1 !important;color:rgb(107 114 128 / var(--tw-text-opacity))!important}.text-gray-600{--tw-text-opacity: 1 !important;color:rgb(75 85 99 / var(--tw-text-opacity))!important}.text-gray-700{--tw-text-opacity: 1 !important;color:rgb(55 65 81 / var(--tw-text-opacity))!important}.text-gray-800{--tw-text-opacity: 1 !important;color:rgb(31 41 55 / var(--tw-text-opacity))!important}.text-green-700{--tw-text-opacity: 1 !important;color:rgb(21 128 61 / var(--tw-text-opacity))!important}.text-info-secondary{--tw-text-opacity: 1 !important;color:rgb(var(--info-secondary) / var(--tw-text-opacity))!important}.text-info-tertiary{--tw-text-opacity: 1 !important;color:rgb(var(--info-tertiary) / var(--tw-text-opacity))!important}.text-primary{--tw-text-opacity: 1 !important;color:rgb(var(--primary) / var(--tw-text-opacity))!important}.text-red-500{--tw-text-opacity: 1 !important;color:rgb(239 68 68 / var(--tw-text-opacity))!important}.text-secondary{--tw-text-opacity: 1 !important;color:rgb(var(--secondary) / var(--tw-text-opacity))!important}.text-soft-secondary{--tw-text-opacity: 1 !important;color:rgb(var(--soft-secondary) / var(--tw-text-opacity))!important}.text-soft-tertiary{--tw-text-opacity: 1 !important;color:rgb(var(--soft-tertiary) / var(--tw-text-opacity))!important}.text-success-secondary{--tw-text-opacity: 1 !important;color:rgb(var(--success-secondary) / var(--tw-text-opacity))!important}.text-success-tertiary{--tw-text-opacity: 1 !important;color:rgb(var(--success-tertiary) / var(--tw-text-opacity))!important}.text-tertiary{--tw-text-opacity: 1 !important;color:rgb(var(--tertiary) / var(--tw-text-opacity))!important}.text-transparent{color:transparent!important}.text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.underline{text-decoration-line:underline!important}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.outline-none{outline:2px solid transparent!important;outline-offset:2px!important}.ring-4{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.blur{--tw-blur: blur(8px) !important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.transition-all{transition-property:all!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important}.duration-100{transition-duration:.1s!important}.ease-linear{transition-timing-function:linear!important}.\[key\:string\]{key:string}html,body{height:100%;font-family:Jost;width:100%}.bg-overlay{background:#33333342}[v-cloak]>*{display:none}.loader{border-top-color:#3498db!important}.loader.slow{-webkit-animation:spinner 1.5s linear infinite;animation:spinner 1.5s linear infinite}.loader.fast{-webkit-animation:spinner .7s linear infinite;animation:spinner .7s linear infinite}@-webkit-keyframes spinner{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}button{border-radius:0}#editor h1{font-size:3rem;line-height:1;font-weight:700}#editor h2{font-size:2.25rem;line-height:2.5rem;font-weight:700}#editor h3{font-size:1.875rem;line-height:2.25rem;font-weight:700}#editor h4{font-size:1.5rem;line-height:2rem;font-weight:700}#editor h5{font-size:1.25rem;line-height:1.75rem;font-weight:700}#grid-items .vue-recycle-scroller__item-wrapper{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0px;overflow-y:auto}@media (min-width: 768px){#grid-items .vue-recycle-scroller__item-wrapper{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1024px){#grid-items .vue-recycle-scroller__item-wrapper{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width: 1280px){#grid-items .vue-recycle-scroller__item-wrapper{grid-template-columns:repeat(5,minmax(0,1fr))}}#grid-items .vue-recycle-scroller__item-view{display:flex;height:8rem;cursor:pointer;flex-direction:column;align-items:center;justify-content:center;overflow:hidden;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}@media (min-width: 1024px){#grid-items .vue-recycle-scroller__item-view{height:10rem}}#grid-items .vue-recycle-scroller__item-view:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.popup-heading{display:flex;align-items:center;justify-content:space-between;padding:.5rem}.popup-heading h3{font-weight:600}.hover\:cursor-pointer:hover{cursor:pointer!important}.hover\:border-info-primary:hover{--tw-border-opacity: 1 !important;border-color:rgb(var(--info-primary) / var(--tw-border-opacity))!important}.hover\:border-transparent:hover{border-color:transparent!important}.hover\:border-opacity-0:hover{--tw-border-opacity: 0 !important}.hover\:bg-blue-600:hover{--tw-bg-opacity: 1 !important;background-color:rgb(37 99 235 / var(--tw-bg-opacity))!important}.hover\:bg-box-elevation-hover:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--box-elevation-hover) / var(--tw-bg-opacity))!important}.hover\:bg-error-primary:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--error-primary) / var(--tw-bg-opacity))!important}.hover\:bg-error-secondary:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--error-secondary) / var(--tw-bg-opacity))!important}.hover\:bg-error-tertiary:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--error-tertiary) / var(--tw-bg-opacity))!important}.hover\:bg-floating-menu-hover:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--floating-menu-hover) / var(--tw-bg-opacity))!important}.hover\:bg-gray-500:hover{--tw-bg-opacity: 1 !important;background-color:rgb(107 114 128 / var(--tw-bg-opacity))!important}.hover\:bg-green-500:hover{--tw-bg-opacity: 1 !important;background-color:rgb(34 197 94 / var(--tw-bg-opacity))!important}.hover\:bg-green-600:hover{--tw-bg-opacity: 1 !important;background-color:rgb(22 163 74 / var(--tw-bg-opacity))!important}.hover\:bg-info-primary:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--info-primary) / var(--tw-bg-opacity))!important}.hover\:bg-info-secondary:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--info-secondary) / var(--tw-bg-opacity))!important}.hover\:bg-info-tertiary:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--info-tertiary) / var(--tw-bg-opacity))!important}.hover\:bg-input-button-hover:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--input-button-hover) / var(--tw-bg-opacity))!important}.hover\:bg-numpad-hover:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--numpad-hover) / var(--tw-bg-opacity))!important}.hover\:bg-red-600:hover{--tw-bg-opacity: 1 !important;background-color:rgb(220 38 38 / var(--tw-bg-opacity))!important}.hover\:bg-success-tertiary:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--success-tertiary) / var(--tw-bg-opacity))!important}.hover\:bg-white:hover{--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important}.hover\:text-blue-400:hover{--tw-text-opacity: 1 !important;color:rgb(96 165 250 / var(--tw-text-opacity))!important}.hover\:text-error-secondary:hover{--tw-text-opacity: 1 !important;color:rgb(var(--error-secondary) / var(--tw-text-opacity))!important}.hover\:text-gray-700:hover{--tw-text-opacity: 1 !important;color:rgb(55 65 81 / var(--tw-text-opacity))!important}.hover\:text-info-primary:hover{--tw-text-opacity: 1 !important;color:rgb(var(--info-primary) / var(--tw-text-opacity))!important}.hover\:text-success-secondary:hover{--tw-text-opacity: 1 !important;color:rgb(var(--success-secondary) / var(--tw-text-opacity))!important}.hover\:text-white:hover{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.hover\:underline:hover{text-decoration-line:underline!important}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.focus\:border-blue-400:focus{--tw-border-opacity: 1 !important;border-color:rgb(96 165 250 / var(--tw-border-opacity))!important}.focus\:shadow-sm:focus{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.active\:border-numpad-edge:active{--tw-border-opacity: 1 !important;border-color:rgb(var(--numpad-edge) / var(--tw-border-opacity))!important}:is(.dark .dark\:border-blue-700){--tw-border-opacity: 1 !important;border-color:rgb(29 78 216 / var(--tw-border-opacity))!important}:is(.dark .dark\:border-green-800){--tw-border-opacity: 1 !important;border-color:rgb(22 101 52 / var(--tw-border-opacity))!important}:is(.dark .dark\:border-red-700){--tw-border-opacity: 1 !important;border-color:rgb(185 28 28 / var(--tw-border-opacity))!important}:is(.dark .dark\:border-yellow-700){--tw-border-opacity: 1 !important;border-color:rgb(161 98 7 / var(--tw-border-opacity))!important}:is(.dark .dark\:bg-blue-600){--tw-bg-opacity: 1 !important;background-color:rgb(37 99 235 / var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-green-700){--tw-bg-opacity: 1 !important;background-color:rgb(21 128 61 / var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-red-600){--tw-bg-opacity: 1 !important;background-color:rgb(220 38 38 / var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-yellow-600){--tw-bg-opacity: 1 !important;background-color:rgb(202 138 4 / var(--tw-bg-opacity))!important}:is(.dark .dark\:text-slate-300){--tw-text-opacity: 1 !important;color:rgb(203 213 225 / var(--tw-text-opacity))!important}@media (min-width: 640px){.sm\:relative{position:relative!important}.sm\:mx-auto{margin-left:auto!important;margin-right:auto!important}.sm\:hidden{display:none!important}.sm\:h-108{height:27rem!important}.sm\:w-64{width:16rem!important}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.sm\:flex-row{flex-direction:row!important}.sm\:rounded-lg{border-radius:.5rem!important}.sm\:text-sm{font-size:.875rem!important;line-height:1.25rem!important}.sm\:leading-5{line-height:1.25rem!important}}@media (min-width: 768px){.md\:visible{visibility:visible!important}.md\:static{position:static!important}.md\:-mx-1{margin-left:-.25rem!important;margin-right:-.25rem!important}.md\:-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}.md\:-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}.md\:mx-auto{margin-left:auto!important;margin-right:auto!important}.md\:my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.md\:mb-0{margin-bottom:0!important}.md\:mt-0{margin-top:0!important}.md\:mt-2{margin-top:.5rem!important}.md\:block{display:block!important}.md\:inline-block{display:inline-block!important}.md\:inline{display:inline!important}.md\:flex{display:flex!important}.md\:table-cell{display:table-cell!important}.md\:hidden{display:none!important}.md\:h-10{height:2.5rem!important}.md\:h-3\/5-screen{height:60vh!important}.md\:h-4\/5-screen{height:80vh!important}.md\:h-5\/6-screen{height:83.33vh!important}.md\:h-5\/7-screen{height:71.42vh!important}.md\:h-6\/7-screen{height:85.71vh!important}.md\:h-full{height:100%!important}.md\:w-1\/2{width:50%!important}.md\:w-1\/3{width:33.333333%!important}.md\:w-1\/4{width:25%!important}.md\:w-10{width:2.5rem!important}.md\:w-16{width:4rem!important}.md\:w-2\/3{width:66.666667%!important}.md\:w-2\/3-screen{width:66.66vw!important}.md\:w-2\/4-screen{width:50vw!important}.md\:w-2\/5{width:40%!important}.md\:w-2\/5-screen{width:40vw!important}.md\:w-24{width:6rem!important}.md\:w-28{width:7rem!important}.md\:w-3\/4{width:75%!important}.md\:w-3\/5{width:60%!important}.md\:w-3\/5-screen{width:60vw!important}.md\:w-3\/6-screen{width:50vw!important}.md\:w-3\/7-screen{width:42.85vw!important}.md\:w-4\/5{width:80%!important}.md\:w-4\/5-screen{width:80vw!important}.md\:w-4\/6-screen{width:66.66vw!important}.md\:w-4\/7-screen{width:57.14vw!important}.md\:w-5\/7-screen{width:71.42vw!important}.md\:w-56{width:14rem!important}.md\:w-6\/7-screen{width:85.71vw!important}.md\:w-60{width:15rem!important}.md\:w-72{width:18rem!important}.md\:w-80{width:20rem!important}.md\:w-96{width:24rem!important}.md\:w-\[550px\]{width:550px!important}.md\:w-auto{width:auto!important}.md\:w-full{width:100%!important}.md\:flex-auto{flex:1 1 auto!important}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.md\:flex-row{flex-direction:row!important}.md\:flex-col{flex-direction:column!important}.md\:items-start{align-items:flex-start!important}.md\:items-center{align-items:center!important}.md\:justify-center{justify-content:center!important}.md\:justify-between{justify-content:space-between!important}.md\:rounded{border-radius:.25rem!important}.md\:border-l{border-left-width:1px!important}.md\:p-0{padding:0!important}.md\:px-1{padding-left:.25rem!important;padding-right:.25rem!important}.md\:px-2{padding-left:.5rem!important;padding-right:.5rem!important}.md\:px-4{padding-left:1rem!important;padding-right:1rem!important}.md\:text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.md\:text-base{font-size:1rem!important;line-height:1.5rem!important}.md\:text-xl{font-size:1.25rem!important;line-height:1.75rem!important}}@media (min-width: 1024px){.lg\:my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.lg\:my-8{margin-top:2rem!important;margin-bottom:2rem!important}.lg\:block{display:block!important}.lg\:flex{display:flex!important}.lg\:hidden{display:none!important}.lg\:h-3\/7-screen{height:42.85vh!important}.lg\:h-4\/5-screen{height:80vh!important}.lg\:h-5\/6-screen{height:83.33vh!important}.lg\:h-5\/7-screen{height:71.42vh!important}.lg\:h-full{height:100%!important}.lg\:w-1\/2{width:50%!important}.lg\:w-1\/3{width:33.333333%!important}.lg\:w-1\/3-screen{width:33.33vw!important}.lg\:w-1\/4{width:25%!important}.lg\:w-1\/6{width:16.666667%!important}.lg\:w-2\/3{width:66.666667%!important}.lg\:w-2\/4{width:50%!important}.lg\:w-2\/4-screen{width:50vw!important}.lg\:w-2\/5{width:40%!important}.lg\:w-2\/5-screen{width:40vw!important}.lg\:w-2\/6-screen{width:33.33vw!important}.lg\:w-2\/7-screen{width:28.57vw!important}.lg\:w-3\/5{width:60%!important}.lg\:w-3\/5-screen{width:60vw!important}.lg\:w-3\/6-screen{width:50vw!important}.lg\:w-3\/7-screen{width:42.85vw!important}.lg\:w-4\/6{width:66.666667%!important}.lg\:w-4\/7-screen{width:57.14vw!important}.lg\:w-56{width:14rem!important}.lg\:w-auto{width:auto!important}.lg\:w-full{width:100%!important}.lg\:w-half{width:50vw!important}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}.lg\:flex-row{flex-direction:row!important}.lg\:items-start{align-items:flex-start!important}.lg\:border-t{border-top-width:1px!important}.lg\:px-0{padding-left:0!important;padding-right:0!important}.lg\:py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.lg\:text-2xl{font-size:1.5rem!important;line-height:2rem!important}.lg\:text-5xl{font-size:3rem!important;line-height:1!important}.lg\:text-lg{font-size:1.125rem!important;line-height:1.75rem!important}.lg\:text-xl{font-size:1.25rem!important;line-height:1.75rem!important}}@media (min-width: 1280px){.xl\:h-2\/5-screen{height:40vh!important}.xl\:w-1\/4{width:25%!important}.xl\:w-108{width:27rem!important}.xl\:w-2\/5-screen{width:40vw!important}.xl\:w-2\/6-screen{width:33.33vw!important}.xl\:w-84{width:21rem!important}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))!important}.xl\:text-xl{font-size:1.25rem!important;line-height:1.75rem!important}}@media print{.print\:w-1\/2{width:50%!important}.print\:w-1\/3{width:33.333333%!important}.print\:text-black{--tw-text-opacity: 1 !important;color:rgb(0 0 0 / var(--tw-text-opacity))!important}} diff --git a/public/build/assets/app-C4B1VHNA.js b/public/build/assets/app-C4B1VHNA.js deleted file mode 100644 index 5462a5d3b..000000000 --- a/public/build/assets/app-C4B1VHNA.js +++ /dev/null @@ -1,16 +0,0 @@ -import{_ as e}from"./preload-helper-BQ24v_F8.js";import{N as T}from"./ns-hotpress-Cxzadt2h.js";import{b as w,n as y,a as I}from"./components-CSb5I62o.js";import{c as m}from"./tax-BACo6kIE.js";import{n as L}from"./bootstrap-B7E2wy_a.js";import{a as t}from"./runtime-core.esm-bundler-DCfIpxDt.js";import"./ns-alert-popup-DDoxXsJC.js";import"./currency-ZXKMLAC0.js";import"./_plugin-vue_export-helper-DlAUqK2U.js";import"./ns-avatar-image-C_oqdj76.js";import"./index.es-BED_8l8F.js";import"./ns-prompt-popup-BbWKrSku.js";function V(o,_){_.forEach(a=>{let r=o.document.createElement("link");r.setAttribute("rel","stylesheet"),r.setAttribute("type","text/css"),r.setAttribute("href",a),o.document.getElementsByTagName("head")[0].appendChild(r)})}const O={install(o,_={}){o.config.globalProperties.$htmlToPaper=(a,r,D=()=>!0)=>{let v="_blank",P=["fullscreen=yes","titlebar=yes","scrollbars=yes"],R=!0,f=[],{name:u=v,specs:i=P,replace:A=R,styles:l=f}=_;r&&(r.name&&(u=r.name),r.specs&&(i=r.specs),r.replace&&(A=r.replace),r.styles&&(l=r.styles)),i=i.length?i.join(","):"";const p=window.document.getElementById(a);if(!p){alert(`Element to print #${a} not found!`);return}const s=window.open("",u,i);return s.document.write(` - - - ${window.document.title} - - - ${p.innerHTML} - - - `),V(s,l),setTimeout(()=>{s.document.close(),s.focus(),s.print(),s.close(),D()},1e3),!0}}},S=t(()=>e(()=>import("./rewards-system-BzwcU-Mx.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),g=t(()=>e(()=>import("./create-coupons-DIVPnAb6.js"),__vite__mapDeps([6,1,2,3,4,5]),import.meta.url)),C=t(()=>e(()=>import("./ns-settings-B3-S4mgL.js"),__vite__mapDeps([7,2,1,3,8,9,5,10,11,4,12,13]),import.meta.url)),k=t(()=>e(()=>import("./reset-BJhdbLXM.js"),__vite__mapDeps([14,2,4,1,3,5]),import.meta.url)),H=t(()=>e(()=>import("./modules-D2_E4Iuo.js"),__vite__mapDeps([15,4,1,2,3,9,5,11,12,13]),import.meta.url)),M=t(()=>e(()=>import("./ns-permissions-C2Rq9WaF.js"),__vite__mapDeps([16,1,2,3,4,5]),import.meta.url)),j=t(()=>e(()=>import("./ns-procurement-D40oV-Zs.js"),__vite__mapDeps([17,1,2,3,4,18,12,5,13,19,20,11]),import.meta.url)),N=t(()=>e(()=>import("./manage-products-VWv48bsW.js"),__vite__mapDeps([18,1,2,3,4,12,5,13]),import.meta.url)),q=t(()=>e(()=>import("./ns-procurement-invoice-DSSNRCNz.js"),__vite__mapDeps([]),import.meta.url)),x=t(()=>e(()=>import("./ns-notifications-DqqN-z9s.js"),__vite__mapDeps([21,4,1,2,3,12,5,13,8,9,10,11]),import.meta.url)),$=t(()=>e(()=>import("./components-CSb5I62o.js").then(o=>o.i),__vite__mapDeps([8,9,2,5,3,10,11,1,4,12,13]),import.meta.url)),B=t(()=>e(()=>import("./ns-transaction-DkaUYIWs.js"),__vite__mapDeps([22,4,1,2,3,9,5,11,12,13]),import.meta.url)),F=t(()=>e(()=>import("./ns-dashboard-BTTHL_jJ.js"),__vite__mapDeps([23,4,1,2,3,5]),import.meta.url)),Y=t(()=>e(()=>import("./ns-low-stock-report-CxRf9a2j.js"),__vite__mapDeps([24,1,2,3,8,9,5,10,11,4,12,13,20]),import.meta.url)),z=t(()=>e(()=>import("./ns-sale-report-DFOocwqM.js"),__vite__mapDeps([25,1,2,3,8,9,5,10,11,4,12,13,20]),import.meta.url)),G=t(()=>e(()=>import("./ns-sold-stock-report-BLrcFbJg.js"),__vite__mapDeps([26,1,2,3,8,9,5,10,11,4,12,13,19,20]),import.meta.url)),J=t(()=>e(()=>import("./ns-profit-report-BJ-1mLfa.js"),__vite__mapDeps([27,1,2,3,8,9,5,10,11,4,12,13,19,20]),import.meta.url)),K=t(()=>e(()=>import("./ns-stock-combined-report-ZpyD3LKX.js"),__vite__mapDeps([28,1,2,3,19,12,5,13,20]),import.meta.url)),Q=t(()=>e(()=>import("./ns-cash-flow-report-C-CJC0Mf.js"),__vite__mapDeps([29,1,2,3,8,9,5,10,11,4,12,13]),import.meta.url)),U=t(()=>e(()=>import("./ns-yearly-report-BLxiFGpe.js"),__vite__mapDeps([30,1,2,3,8,9,5,10,11,4,12,13]),import.meta.url)),W=t(()=>e(()=>import("./ns-best-products-report-HuKIIDSD.js"),__vite__mapDeps([31,1,2,3,8,9,5,10,11,4,12,13]),import.meta.url)),X=t(()=>e(()=>import("./ns-payment-types-report-ClnhmaQ5.js"),__vite__mapDeps([32,1,2,3,8,9,5,10,11,4,12,13]),import.meta.url)),Z=t(()=>e(()=>import("./ns-customers-statement-report-D2SxgR7B.js"),__vite__mapDeps([33,2,5,3]),import.meta.url)),ee=t(()=>e(()=>import("./ns-stock-adjustment-DOWMsmun.js"),__vite__mapDeps([34,4,1,2,3,35,5,12,13]),import.meta.url)),te=t(()=>e(()=>import("./ns-order-invoice-7jYsfiOi.js"),__vite__mapDeps([36,2,5,3]),import.meta.url)),n=window.nsState,oe=window.nsScreen;nsExtraComponents.nsToken=t(()=>e(()=>import("./ns-token-fnvvV9GO.js"),__vite__mapDeps([37,4,1,2,3,5,11,12,13]),import.meta.url));window.nsHotPress=new T;const d=Object.assign({nsModules:H,nsRewardsSystem:S,nsCreateCoupons:g,nsManageProducts:N,nsSettings:C,nsReset:k,nsPermissions:M,nsProcurement:j,nsProcurementInvoice:q,nsMedia:$,nsTransaction:B,nsDashboard:F,nsNotifications:x,nsSaleReport:z,nsSoldStockReport:G,nsProfitReport:J,nsStockCombinedReport:K,nsCashFlowReport:Q,nsYearlyReport:U,nsPaymentTypesReport:X,nsBestProductsReport:W,nsLowStockReport:Y,nsCustomersStatementReport:Z,nsStockAdjustment:ee,nsOrderInvoice:te,...w},nsExtraComponents);window.nsDashboardAside=m({data(){return{sidebar:"visible",popups:[]}},components:{nsMenu:y,nsSubmenu:I},mounted(){n.subscribe(o=>{o.sidebar&&(this.sidebar=o.sidebar)})}});window.nsDashboardOverlay=m({data(){return{sidebar:null,popups:[]}},components:d,mounted(){n.subscribe(o=>{o.sidebar&&(this.sidebar=o.sidebar)})},methods:{closeMenu(){n.setState({sidebar:this.sidebar==="hidden"?"visible":"hidden"})}}});window.nsDashboardHeader=m({data(){return{menuToggled:!1,sidebar:null}},components:d,methods:{toggleMenu(){this.menuToggled=!this.menuToggled},toggleSideMenu(){["lg","xl"].includes(oe.breakpoint)?n.setState({sidebar:this.sidebar==="hidden"?"visible":"hidden"}):n.setState({sidebar:this.sidebar==="hidden"?"visible":"hidden"})}},mounted(){n.subscribe(o=>{o.sidebar&&(this.sidebar=o.sidebar)})}});window.nsDashboardContent=m({});for(let o in d)window.nsDashboardContent.component(o,d[o]);window.nsDashboardContent.use(O,{styles:Object.values(window.ns.cssFiles)});window.nsComponents=Object.assign(d,w);L.doAction("ns-before-mount");console.log("ns-before-mount");const c=document.querySelector("#dashboard-aside");window.nsDashboardAside&&c&&window.nsDashboardAside.mount(c);const b=document.querySelector("#dashboard-overlay");window.nsDashboardOverlay&&b&&window.nsDashboardOverlay.mount(b);const E=document.querySelector("#dashboard-header");window.nsDashboardHeader&&E&&window.nsDashboardHeader.mount(E);const h=document.querySelector("#dashboard-content");window.nsDashboardContent&&h&&window.nsDashboardContent.mount(h); -function __vite__mapDeps(indexes) { - if (!__vite__mapDeps.viteFileDeps) { - __vite__mapDeps.viteFileDeps = ["./rewards-system-BzwcU-Mx.js","./tax-BACo6kIE.js","./currency-ZXKMLAC0.js","./runtime-core.esm-bundler-DCfIpxDt.js","./bootstrap-B7E2wy_a.js","./_plugin-vue_export-helper-DlAUqK2U.js","./create-coupons-DIVPnAb6.js","./ns-settings-B3-S4mgL.js","./components-CSb5I62o.js","./ns-alert-popup-DDoxXsJC.js","./ns-avatar-image-C_oqdj76.js","./index.es-BED_8l8F.js","./ns-prompt-popup-BbWKrSku.js","./ns-prompt-popup-BgqpcPKN.css","./reset-BJhdbLXM.js","./modules-D2_E4Iuo.js","./ns-permissions-C2Rq9WaF.js","./ns-procurement-D40oV-Zs.js","./manage-products-VWv48bsW.js","./select-api-entities--r5dUSHC.js","./join-array-DchOF3Wi.js","./ns-notifications-DqqN-z9s.js","./ns-transaction-DkaUYIWs.js","./ns-dashboard-BTTHL_jJ.js","./ns-low-stock-report-CxRf9a2j.js","./ns-sale-report-DFOocwqM.js","./ns-sold-stock-report-BLrcFbJg.js","./ns-profit-report-BJ-1mLfa.js","./ns-stock-combined-report-ZpyD3LKX.js","./ns-cash-flow-report-C-CJC0Mf.js","./ns-yearly-report-BLxiFGpe.js","./ns-best-products-report-HuKIIDSD.js","./ns-payment-types-report-ClnhmaQ5.js","./ns-customers-statement-report-D2SxgR7B.js","./ns-stock-adjustment-DOWMsmun.js","./ns-procurement-quantity-DpioiyPI.js","./ns-order-invoice-7jYsfiOi.js","./ns-token-fnvvV9GO.js"] - } - return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) -} diff --git a/public/build/assets/app-DHPwVle-.css b/public/build/assets/app-DHPwVle-.css deleted file mode 100644 index 287a3ba83..000000000 --- a/public/build/assets/app-DHPwVle-.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none!important}.\!visible,.visible{visibility:visible!important}.static{position:static!important}.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.inset-y-0{top:0!important;bottom:0!important}.-bottom-10{bottom:-5em!important}.-top-10{top:-5em!important}.-top-\[8px\]{top:-8px!important}.bottom-0{bottom:0!important}.left-0{left:0!important}.right-0{right:0!important}.top-0{top:0!important}.z-10{z-index:10!important}.z-30{z-index:30!important}.z-40{z-index:40!important}.z-50{z-index:50!important}.col-span-2{grid-column:span 2 / span 2!important}.col-span-3{grid-column:span 3 / span 3!important}.-m-2{margin:-.5rem!important}.-m-3{margin:-.75rem!important}.-m-4{margin:-1rem!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-4{margin:1rem!important}.-mx-1{margin-left:-.25rem!important;margin-right:-.25rem!important}.-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}.-mx-3{margin-left:-.75rem!important;margin-right:-.75rem!important}.-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}.-my-1{margin-top:-.25rem!important;margin-bottom:-.25rem!important}.-my-2{margin-top:-.5rem!important;margin-bottom:-.5rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.my-5{margin-top:1.25rem!important;margin-bottom:1.25rem!important}.-mb-2{margin-bottom:-.5rem!important}.-ml-28{margin-left:-7rem!important}.-ml-6{margin-left:-1.5rem!important}.-mt-4{margin-top:-1rem!important}.-mt-8{margin-top:-2rem!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:.75rem!important}.mb-4{margin-bottom:1rem!important}.mb-6{margin-bottom:1.5rem!important}.mb-8{margin-bottom:2rem!important}.ml-1{margin-left:.25rem!important}.ml-2{margin-left:.5rem!important}.ml-3{margin-left:.75rem!important}.ml-4{margin-left:1rem!important}.mr-1{margin-right:.25rem!important}.mr-2{margin-right:.5rem!important}.mr-4{margin-right:1rem!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-4{margin-top:1rem!important}.mt-5{margin-top:1.25rem!important}.mt-8{margin-top:2rem!important}.box-border{box-sizing:border-box!important}.block{display:block!important}.inline-block{display:inline-block!important}.flex{display:flex!important}.table{display:table!important}.table-cell{display:table-cell!important}.grid{display:grid!important}.hidden{display:none!important}.aspect-square{aspect-ratio:1 / 1!important}.h-0{height:0px!important}.h-10{height:2.5rem!important}.h-12{height:3rem!important}.h-120{height:30rem!important}.h-16{height:4rem!important}.h-2{height:.5rem!important}.h-2\/5-screen{height:40vh!important}.h-20{height:5rem!important}.h-24{height:6rem!important}.h-3\/5-screen{height:60vh!important}.h-32{height:8rem!important}.h-36{height:9rem!important}.h-40{height:10rem!important}.h-5{height:1.25rem!important}.h-5\/7-screen{height:71.42vh!important}.h-56{height:14rem!important}.h-6{height:1.5rem!important}.h-6\/7-screen{height:85.71vh!important}.h-60{height:15rem!important}.h-64{height:16rem!important}.h-8{height:2rem!important}.h-95vh{height:95vh!important}.h-96{height:24rem!important}.h-full{height:100%!important}.h-half{height:50vh!important}.h-screen{height:100vh!important}.max-h-5\/6-screen{max-height:83.33vh!important}.max-h-80{max-height:20rem!important}.min-h-2\/5-screen{min-height:40vh!important}.w-0{width:0px!important}.w-1\/2{width:50%!important}.w-1\/3{width:33.333333%!important}.w-1\/4{width:25%!important}.w-1\/6{width:16.666667%!important}.w-10{width:2.5rem!important}.w-11\/12{width:91.666667%!important}.w-12{width:3rem!important}.w-16{width:4rem!important}.w-20{width:5rem!important}.w-24{width:6rem!important}.w-3\/4-screen{width:75vw!important}.w-32{width:8rem!important}.w-36{width:9rem!important}.w-4\/5-screen{width:80vw!important}.w-48{width:12rem!important}.w-5{width:1.25rem!important}.w-5\/7-screen{width:71.42vw!important}.w-52{width:13rem!important}.w-56{width:14rem!important}.w-6{width:1.5rem!important}.w-6\/7-screen{width:85.71vw!important}.w-60{width:15rem!important}.w-64{width:16rem!important}.w-72{width:18rem!important}.w-8{width:2rem!important}.w-95vw{width:95vw!important}.w-\[225px\]{width:225px!important}.w-auto{width:auto!important}.w-full{width:100%!important}.w-screen{width:100vw!important}.min-w-\[2rem\]{min-width:2rem!important}.min-w-fit{min-width:fit-content!important}.flex-auto{flex:1 1 auto!important}.flex-shrink-0{flex-shrink:0!important}.grow-0{flex-grow:0!important}.table-auto{table-layout:auto!important}.origin-bottom-right{transform-origin:bottom right!important}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite!important}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite!important}.cursor-default{cursor:default!important}.cursor-not-allowed{cursor:not-allowed!important}.cursor-pointer{cursor:pointer!important}.select-none{-webkit-user-select:none!important;user-select:none!important}.resize{resize:both!important}.appearance-none{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}.grid-flow-row{grid-auto-flow:row!important}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))!important}.grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))!important}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))!important}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))!important}.flex-row{flex-direction:row!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-col{flex-direction:column!important}.flex-wrap{flex-wrap:wrap!important}.items-start{align-items:flex-start!important}.items-end{align-items:flex-end!important}.items-center{align-items:center!important}.justify-start{justify-content:flex-start!important}.justify-end{justify-content:flex-end!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.justify-around{justify-content:space-around!important}.gap-0{gap:0px!important}.gap-2{gap:.5rem!important}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0 !important;border-right-width:calc(1px * var(--tw-divide-x-reverse))!important;border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))!important}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0 !important;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))!important;border-bottom-width:calc(1px * var(--tw-divide-y-reverse))!important}.divide-y-4>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0 !important;border-top-width:calc(4px * calc(1 - var(--tw-divide-y-reverse)))!important;border-bottom-width:calc(4px * var(--tw-divide-y-reverse))!important}.self-center{align-self:center!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-x-auto{overflow-x:auto!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-scroll{overflow-y:scroll!important}.truncate{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}.whitespace-pre-wrap{white-space:pre-wrap!important}.rounded{border-radius:.25rem!important}.rounded-full{border-radius:9999px!important}.rounded-lg{border-radius:.5rem!important}.rounded-md{border-radius:.375rem!important}.rounded-none{border-radius:0!important}.rounded-b-md{border-bottom-right-radius:.375rem!important;border-bottom-left-radius:.375rem!important}.rounded-t-lg{border-top-left-radius:.5rem!important;border-top-right-radius:.5rem!important}.rounded-bl{border-bottom-left-radius:.25rem!important}.rounded-bl-lg{border-bottom-left-radius:.5rem!important}.rounded-br{border-bottom-right-radius:.25rem!important}.rounded-br-lg{border-bottom-right-radius:.5rem!important}.rounded-tl{border-top-left-radius:.25rem!important}.rounded-tl-lg{border-top-left-radius:.5rem!important}.rounded-tr{border-top-right-radius:.25rem!important}.rounded-tr-lg{border-top-right-radius:.5rem!important}.border{border-width:1px!important}.border-0{border-width:0px!important}.border-2{border-width:2px!important}.border-4{border-width:4px!important}.border-b{border-bottom-width:1px!important}.border-b-0{border-bottom-width:0px!important}.border-b-2{border-bottom-width:2px!important}.border-b-4{border-bottom-width:4px!important}.border-l{border-left-width:1px!important}.border-l-0{border-left-width:0px!important}.border-l-2{border-left-width:2px!important}.border-l-4{border-left-width:4px!important}.border-l-8{border-left-width:8px!important}.border-r{border-right-width:1px!important}.border-r-0{border-right-width:0px!important}.border-r-2{border-right-width:2px!important}.border-t{border-top-width:1px!important}.border-t-0{border-top-width:0px!important}.border-t-4{border-top-width:4px!important}.border-dashed{border-style:dashed!important}.border-black{--tw-border-opacity: 1 !important;border-color:rgb(0 0 0 / var(--tw-border-opacity))!important}.border-blue-200{--tw-border-opacity: 1 !important;border-color:rgb(191 219 254 / var(--tw-border-opacity))!important}.border-blue-400{--tw-border-opacity: 1 !important;border-color:rgb(96 165 250 / var(--tw-border-opacity))!important}.border-blue-600{--tw-border-opacity: 1 !important;border-color:rgb(37 99 235 / var(--tw-border-opacity))!important}.border-box-background{--tw-border-opacity: 1 !important;border-color:rgb(var(--box-background) / var(--tw-border-opacity))!important}.border-box-edge{--tw-border-opacity: 1 !important;border-color:rgb(var(--box-edge) / var(--tw-border-opacity))!important}.border-box-elevation-edge{--tw-border-opacity: 1 !important;border-color:rgb(var(--box-elevation-edge) / var(--tw-border-opacity))!important}.border-danger-secondary{--tw-border-opacity: 1 !important;border-color:rgb(var(--danger-secondary) / var(--tw-border-opacity))!important}.border-error-primary{--tw-border-opacity: 1 !important;border-color:rgb(var(--error-primary) / var(--tw-border-opacity))!important}.border-error-secondary{--tw-border-opacity: 1 !important;border-color:rgb(var(--error-secondary) / var(--tw-border-opacity))!important}.border-error-tertiary{--tw-border-opacity: 1 !important;border-color:rgb(var(--error-tertiary) / var(--tw-border-opacity))!important}.border-floating-menu-edge{--tw-border-opacity: 1 !important;border-color:rgb(var(--floating-menu-edge) / var(--tw-border-opacity))!important}.border-gray-200{--tw-border-opacity: 1 !important;border-color:rgb(229 231 235 / var(--tw-border-opacity))!important}.border-gray-300{--tw-border-opacity: 1 !important;border-color:rgb(209 213 219 / var(--tw-border-opacity))!important}.border-gray-400{--tw-border-opacity: 1 !important;border-color:rgb(156 163 175 / var(--tw-border-opacity))!important}.border-gray-500{--tw-border-opacity: 1 !important;border-color:rgb(107 114 128 / var(--tw-border-opacity))!important}.border-gray-700{--tw-border-opacity: 1 !important;border-color:rgb(55 65 81 / var(--tw-border-opacity))!important}.border-gray-800{--tw-border-opacity: 1 !important;border-color:rgb(31 41 55 / var(--tw-border-opacity))!important}.border-green-200{--tw-border-opacity: 1 !important;border-color:rgb(187 247 208 / var(--tw-border-opacity))!important}.border-green-600{--tw-border-opacity: 1 !important;border-color:rgb(22 163 74 / var(--tw-border-opacity))!important}.border-info-primary{--tw-border-opacity: 1 !important;border-color:rgb(var(--info-primary) / var(--tw-border-opacity))!important}.border-info-secondary{--tw-border-opacity: 1 !important;border-color:rgb(var(--info-secondary) / var(--tw-border-opacity))!important}.border-info-tertiary{--tw-border-opacity: 1 !important;border-color:rgb(var(--info-tertiary) / var(--tw-border-opacity))!important}.border-input-edge{--tw-border-opacity: 1 !important;border-color:rgb(var(--input-edge) / var(--tw-border-opacity))!important}.border-input-option-hover{--tw-border-opacity: 1 !important;border-color:rgb(var(--input-option-hover) / var(--tw-border-opacity))!important}.border-numpad-edge{--tw-border-opacity: 1 !important;border-color:rgb(var(--numpad-edge) / var(--tw-border-opacity))!important}.border-red-200{--tw-border-opacity: 1 !important;border-color:rgb(254 202 202 / var(--tw-border-opacity))!important}.border-success-primary{--tw-border-opacity: 1 !important;border-color:rgb(var(--success-primary) / var(--tw-border-opacity))!important}.border-success-secondary{--tw-border-opacity: 1 !important;border-color:rgb(var(--success-secondary) / var(--tw-border-opacity))!important}.border-success-tertiary{--tw-border-opacity: 1 !important;border-color:rgb(var(--success-tertiary) / var(--tw-border-opacity))!important}.border-tab-table-th{--tw-border-opacity: 1 !important;border-color:rgb(var(--tab-table-th) / var(--tw-border-opacity))!important}.border-tab-table-th-edge{--tw-border-opacity: 1 !important;border-color:rgb(var(--tab-table-th-edge) / var(--tw-border-opacity))!important}.border-table-th-edge{--tw-border-opacity: 1 !important;border-color:rgb(var(--table-th-edge) / var(--tw-border-opacity))!important}.border-tertiary{--tw-border-opacity: 1 !important;border-color:rgb(var(--tertiary) / var(--tw-border-opacity))!important}.border-transparent{border-color:transparent!important}.border-yellow-200{--tw-border-opacity: 1 !important;border-color:rgb(254 240 138 / var(--tw-border-opacity))!important}.border-b-transparent{border-bottom-color:transparent!important}.bg-blue-100{--tw-bg-opacity: 1 !important;background-color:rgb(219 234 254 / var(--tw-bg-opacity))!important}.bg-blue-400{--tw-bg-opacity: 1 !important;background-color:rgb(96 165 250 / var(--tw-bg-opacity))!important}.bg-blue-500{--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.bg-box-background{--tw-bg-opacity: 1 !important;background-color:rgb(var(--box-background) / var(--tw-bg-opacity))!important}.bg-box-elevation-background{--tw-bg-opacity: 1 !important;background-color:rgb(var(--box-elevation-background) / var(--tw-bg-opacity))!important}.bg-box-elevation-hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--box-elevation-hover) / var(--tw-bg-opacity))!important}.bg-error-primary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--error-primary) / var(--tw-bg-opacity))!important}.bg-error-secondary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--error-secondary) / var(--tw-bg-opacity))!important}.bg-error-tertiary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--error-tertiary) / var(--tw-bg-opacity))!important}.bg-floating-menu{--tw-bg-opacity: 1 !important;background-color:rgb(var(--floating-menu) / var(--tw-bg-opacity))!important}.bg-gray-200{--tw-bg-opacity: 1 !important;background-color:rgb(229 231 235 / var(--tw-bg-opacity))!important}.bg-gray-300{--tw-bg-opacity: 1 !important;background-color:rgb(209 213 219 / var(--tw-bg-opacity))!important}.bg-gray-400{--tw-bg-opacity: 1 !important;background-color:rgb(156 163 175 / var(--tw-bg-opacity))!important}.bg-gray-500{--tw-bg-opacity: 1 !important;background-color:rgb(107 114 128 / var(--tw-bg-opacity))!important}.bg-gray-600{--tw-bg-opacity: 1 !important;background-color:rgb(75 85 99 / var(--tw-bg-opacity))!important}.bg-gray-700{--tw-bg-opacity: 1 !important;background-color:rgb(55 65 81 / var(--tw-bg-opacity))!important}.bg-gray-800{--tw-bg-opacity: 1 !important;background-color:rgb(31 41 55 / var(--tw-bg-opacity))!important}.bg-gray-900{--tw-bg-opacity: 1 !important;background-color:rgb(17 24 39 / var(--tw-bg-opacity))!important}.bg-green-100{--tw-bg-opacity: 1 !important;background-color:rgb(220 252 231 / var(--tw-bg-opacity))!important}.bg-green-200{--tw-bg-opacity: 1 !important;background-color:rgb(187 247 208 / var(--tw-bg-opacity))!important}.bg-green-400{--tw-bg-opacity: 1 !important;background-color:rgb(74 222 128 / var(--tw-bg-opacity))!important}.bg-green-500{--tw-bg-opacity: 1 !important;background-color:rgb(34 197 94 / var(--tw-bg-opacity))!important}.bg-info-primary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--info-primary) / var(--tw-bg-opacity))!important}.bg-info-secondary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--info-secondary) / var(--tw-bg-opacity))!important}.bg-info-tertiary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--info-tertiary) / var(--tw-bg-opacity))!important}.bg-input-background{--tw-bg-opacity: 1 !important;background-color:rgb(var(--input-background) / var(--tw-bg-opacity))!important}.bg-input-button{--tw-bg-opacity: 1 !important;background-color:rgb(var(--input-button) / var(--tw-bg-opacity))!important}.bg-input-disabled{--tw-bg-opacity: 1 !important;background-color:rgb(var(--input-disabled) / var(--tw-bg-opacity))!important}.bg-input-edge{--tw-bg-opacity: 1 !important;background-color:rgb(var(--input-edge) / var(--tw-bg-opacity))!important}.bg-orange-400{--tw-bg-opacity: 1 !important;background-color:rgb(251 146 60 / var(--tw-bg-opacity))!important}.bg-popup-surface{--tw-bg-opacity: 1 !important;background-color:rgb(var(--popup-surface) / var(--tw-bg-opacity))!important}.bg-red-100{--tw-bg-opacity: 1 !important;background-color:rgb(254 226 226 / var(--tw-bg-opacity))!important}.bg-red-400{--tw-bg-opacity: 1 !important;background-color:rgb(248 113 113 / var(--tw-bg-opacity))!important}.bg-red-500{--tw-bg-opacity: 1 !important;background-color:rgb(239 68 68 / var(--tw-bg-opacity))!important}.bg-slate-200{--tw-bg-opacity: 1 !important;background-color:rgb(226 232 240 / var(--tw-bg-opacity))!important}.bg-slate-300{--tw-bg-opacity: 1 !important;background-color:rgb(203 213 225 / var(--tw-bg-opacity))!important}.bg-success-primary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--success-primary) / var(--tw-bg-opacity))!important}.bg-success-secondary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--success-secondary) / var(--tw-bg-opacity))!important}.bg-success-tertiary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--success-tertiary) / var(--tw-bg-opacity))!important}.bg-surface{--tw-bg-opacity: 1 !important;background-color:rgb(var(--surface) / var(--tw-bg-opacity))!important}.bg-tab-active{--tw-bg-opacity: 1 !important;background-color:rgb(var(--tab-active) / var(--tw-bg-opacity))!important}.bg-tab-inactive{--tw-bg-opacity: 1 !important;background-color:rgb(var(--tab-inactive) / var(--tw-bg-opacity))!important}.bg-tab-table-th{--tw-bg-opacity: 1 !important;background-color:rgb(var(--tab-table-th) / var(--tw-bg-opacity))!important}.bg-transparent{background-color:transparent!important}.bg-warning-secondary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--warning-secondary) / var(--tw-bg-opacity))!important}.bg-white{--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important}.bg-yellow-100{--tw-bg-opacity: 1 !important;background-color:rgb(254 249 195 / var(--tw-bg-opacity))!important}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))!important}.bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--tw-gradient-stops))!important}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))!important}.from-blue-200{--tw-gradient-from: #bfdbfe var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(191 219 254 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-blue-400{--tw-gradient-from: #60a5fa var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(96 165 250 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-blue-500{--tw-gradient-from: #3b82f6 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-error-secondary{--tw-gradient-from: rgb(var(--error-secondary)) var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(var(--error-secondary) / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-green-400{--tw-gradient-from: #4ade80 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(74 222 128 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-indigo-400{--tw-gradient-from: #818cf8 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(129 140 248 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-info-secondary{--tw-gradient-from: rgb(var(--info-secondary)) var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(var(--info-secondary) / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-orange-500{--tw-gradient-from: #f97316 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(249 115 22 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-pink-400{--tw-gradient-from: #f472b6 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(244 114 182 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-purple-400{--tw-gradient-from: #c084fc var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(192 132 252 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-purple-500{--tw-gradient-from: #a855f7 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-red-400{--tw-gradient-from: #f87171 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(248 113 113 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-red-500{--tw-gradient-from: #ef4444 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(239 68 68 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-success-secondary{--tw-gradient-from: rgb(var(--success-secondary)) var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(var(--success-secondary) / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.from-teal-500{--tw-gradient-from: #14b8a6 var(--tw-gradient-from-position) !important;--tw-gradient-to: rgb(20 184 166 / 0) var(--tw-gradient-to-position) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.to-blue-400{--tw-gradient-to: #60a5fa var(--tw-gradient-to-position) !important}.to-blue-500{--tw-gradient-to: #3b82f6 var(--tw-gradient-to-position) !important}.to-blue-600{--tw-gradient-to: #2563eb var(--tw-gradient-to-position) !important}.to-blue-700{--tw-gradient-to: #1d4ed8 var(--tw-gradient-to-position) !important}.to-green-600{--tw-gradient-to: #16a34a var(--tw-gradient-to-position) !important}.to-green-700{--tw-gradient-to: #15803d var(--tw-gradient-to-position) !important}.to-indigo-400{--tw-gradient-to: #818cf8 var(--tw-gradient-to-position) !important}.to-indigo-600{--tw-gradient-to: #4f46e5 var(--tw-gradient-to-position) !important}.to-info-tertiary{--tw-gradient-to: rgb(var(--info-tertiary)) var(--tw-gradient-to-position) !important}.to-pink-500{--tw-gradient-to: #ec4899 var(--tw-gradient-to-position) !important}.to-purple-600{--tw-gradient-to: #9333ea var(--tw-gradient-to-position) !important}.to-red-500{--tw-gradient-to: #ef4444 var(--tw-gradient-to-position) !important}.to-red-600{--tw-gradient-to: #dc2626 var(--tw-gradient-to-position) !important}.to-red-700{--tw-gradient-to: #b91c1c var(--tw-gradient-to-position) !important}.to-teal-700{--tw-gradient-to: #0f766e var(--tw-gradient-to-position) !important}.bg-clip-text{-webkit-background-clip:text!important;background-clip:text!important}.object-cover{object-fit:cover!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-10{padding:2.5rem!important}.p-2{padding:.5rem!important}.p-3{padding:.75rem!important}.p-4{padding:1rem!important}.p-8{padding:2rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-10{padding-top:2.5rem!important;padding-bottom:2.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.py-5{padding-top:1.25rem!important;padding-bottom:1.25rem!important}.py-6{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-8{padding-top:2rem!important;padding-bottom:2rem!important}.pb-1{padding-bottom:.25rem!important}.pb-10{padding-bottom:2.5rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:.75rem!important}.pb-4{padding-bottom:1rem!important}.pl-0{padding-left:0!important}.pl-1{padding-left:.25rem!important}.pl-2{padding-left:.5rem!important}.pl-3{padding-left:.75rem!important}.pl-7{padding-left:1.75rem!important}.pl-8{padding-left:2rem!important}.pr-1{padding-right:.25rem!important}.pr-12{padding-right:3rem!important}.pr-2{padding-right:.5rem!important}.pr-8{padding-right:2rem!important}.pt-2{padding-top:.5rem!important}.pt-6{padding-top:1.5rem!important}.text-left{text-align:left!important}.text-center{text-align:center!important}.text-right{text-align:right!important}.font-body{font-family:Graphik,sans-serif!important}.text-2xl{font-size:1.5rem!important;line-height:2rem!important}.text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.text-4xl{font-size:2.25rem!important;line-height:2.5rem!important}.text-5xl{font-size:3rem!important;line-height:1!important}.text-6xl{font-size:3.75rem!important;line-height:1!important}.text-7xl{font-size:4.5rem!important;line-height:1!important}.text-8xl{font-size:6rem!important;line-height:1!important}.text-lg{font-size:1.125rem!important;line-height:1.75rem!important}.text-sm{font-size:.875rem!important;line-height:1.25rem!important}.text-xl{font-size:1.25rem!important;line-height:1.75rem!important}.text-xs{font-size:.75rem!important;line-height:1rem!important}.font-black{font-weight:900!important}.font-bold{font-weight:700!important}.font-medium{font-weight:500!important}.font-semibold{font-weight:600!important}.uppercase{text-transform:uppercase!important}.leading-5{line-height:1.25rem!important}.text-black{--tw-text-opacity: 1 !important;color:rgb(0 0 0 / var(--tw-text-opacity))!important}.text-blue-500{--tw-text-opacity: 1 !important;color:rgb(59 130 246 / var(--tw-text-opacity))!important}.text-blue-600{--tw-text-opacity: 1 !important;color:rgb(37 99 235 / var(--tw-text-opacity))!important}.text-danger-light-tertiary{--tw-text-opacity: 1 !important;color:rgb(var(--danger-light-tertiary) / var(--tw-text-opacity))!important}.text-error-light-tertiary{--tw-text-opacity: 1 !important;color:rgb(var(--error-light-tertiary) / var(--tw-text-opacity))!important}.text-error-primary{--tw-text-opacity: 1 !important;color:rgb(var(--error-primary) / var(--tw-text-opacity))!important}.text-error-secondary{--tw-text-opacity: 1 !important;color:rgb(var(--error-secondary) / var(--tw-text-opacity))!important}.text-error-tertiary{--tw-text-opacity: 1 !important;color:rgb(var(--error-tertiary) / var(--tw-text-opacity))!important}.text-gray-100{--tw-text-opacity: 1 !important;color:rgb(243 244 246 / var(--tw-text-opacity))!important}.text-gray-500{--tw-text-opacity: 1 !important;color:rgb(107 114 128 / var(--tw-text-opacity))!important}.text-gray-600{--tw-text-opacity: 1 !important;color:rgb(75 85 99 / var(--tw-text-opacity))!important}.text-gray-700{--tw-text-opacity: 1 !important;color:rgb(55 65 81 / var(--tw-text-opacity))!important}.text-gray-800{--tw-text-opacity: 1 !important;color:rgb(31 41 55 / var(--tw-text-opacity))!important}.text-green-700{--tw-text-opacity: 1 !important;color:rgb(21 128 61 / var(--tw-text-opacity))!important}.text-info-secondary{--tw-text-opacity: 1 !important;color:rgb(var(--info-secondary) / var(--tw-text-opacity))!important}.text-info-tertiary{--tw-text-opacity: 1 !important;color:rgb(var(--info-tertiary) / var(--tw-text-opacity))!important}.text-primary{--tw-text-opacity: 1 !important;color:rgb(var(--primary) / var(--tw-text-opacity))!important}.text-red-500{--tw-text-opacity: 1 !important;color:rgb(239 68 68 / var(--tw-text-opacity))!important}.text-secondary{--tw-text-opacity: 1 !important;color:rgb(var(--secondary) / var(--tw-text-opacity))!important}.text-soft-primary{--tw-text-opacity: 1 !important;color:rgb(var(--soft-primary) / var(--tw-text-opacity))!important}.text-soft-secondary{--tw-text-opacity: 1 !important;color:rgb(var(--soft-secondary) / var(--tw-text-opacity))!important}.text-soft-tertiary{--tw-text-opacity: 1 !important;color:rgb(var(--soft-tertiary) / var(--tw-text-opacity))!important}.text-success-secondary{--tw-text-opacity: 1 !important;color:rgb(var(--success-secondary) / var(--tw-text-opacity))!important}.text-success-tertiary{--tw-text-opacity: 1 !important;color:rgb(var(--success-tertiary) / var(--tw-text-opacity))!important}.text-tertiary{--tw-text-opacity: 1 !important;color:rgb(var(--tertiary) / var(--tw-text-opacity))!important}.text-transparent{color:transparent!important}.text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.underline{text-decoration-line:underline!important}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.outline-none{outline:2px solid transparent!important;outline-offset:2px!important}.ring-4{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.blur{--tw-blur: blur(8px) !important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.transition-all{transition-property:all!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important}.duration-100{transition-duration:.1s!important}.ease-linear{transition-timing-function:linear!important}.\[key\:string\]{key:string}html,body{height:100%;font-family:Jost;width:100%}.bg-overlay{background:#33333342}[v-cloak]>*{display:none}.loader{border-top-color:#3498db!important}.loader.slow{-webkit-animation:spinner 1.5s linear infinite;animation:spinner 1.5s linear infinite}.loader.fast{-webkit-animation:spinner .7s linear infinite;animation:spinner .7s linear infinite}@-webkit-keyframes spinner{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}button{border-radius:0}#editor h1{font-size:3rem;line-height:1;font-weight:700}#editor h2{font-size:2.25rem;line-height:2.5rem;font-weight:700}#editor h3{font-size:1.875rem;line-height:2.25rem;font-weight:700}#editor h4{font-size:1.5rem;line-height:2rem;font-weight:700}#editor h5{font-size:1.25rem;line-height:1.75rem;font-weight:700}#grid-items .vue-recycle-scroller__item-wrapper{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0px;overflow-y:auto}@media (min-width: 768px){#grid-items .vue-recycle-scroller__item-wrapper{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1024px){#grid-items .vue-recycle-scroller__item-wrapper{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width: 1280px){#grid-items .vue-recycle-scroller__item-wrapper{grid-template-columns:repeat(5,minmax(0,1fr))}}#grid-items .vue-recycle-scroller__item-view{display:flex;height:8rem;cursor:pointer;flex-direction:column;align-items:center;justify-content:center;overflow:hidden;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}@media (min-width: 1024px){#grid-items .vue-recycle-scroller__item-view{height:10rem}}#grid-items .vue-recycle-scroller__item-view:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.popup-heading{display:flex;align-items:center;justify-content:space-between;padding:.5rem}.popup-heading h3{font-weight:600}.hover\:cursor-pointer:hover{cursor:pointer!important}.hover\:border-info-primary:hover{--tw-border-opacity: 1 !important;border-color:rgb(var(--info-primary) / var(--tw-border-opacity))!important}.hover\:border-transparent:hover{border-color:transparent!important}.hover\:border-opacity-0:hover{--tw-border-opacity: 0 !important}.hover\:bg-blue-600:hover{--tw-bg-opacity: 1 !important;background-color:rgb(37 99 235 / var(--tw-bg-opacity))!important}.hover\:bg-box-elevation-hover:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--box-elevation-hover) / var(--tw-bg-opacity))!important}.hover\:bg-error-primary:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--error-primary) / var(--tw-bg-opacity))!important}.hover\:bg-error-secondary:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--error-secondary) / var(--tw-bg-opacity))!important}.hover\:bg-error-tertiary:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--error-tertiary) / var(--tw-bg-opacity))!important}.hover\:bg-floating-menu-hover:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--floating-menu-hover) / var(--tw-bg-opacity))!important}.hover\:bg-gray-500:hover{--tw-bg-opacity: 1 !important;background-color:rgb(107 114 128 / var(--tw-bg-opacity))!important}.hover\:bg-green-500:hover{--tw-bg-opacity: 1 !important;background-color:rgb(34 197 94 / var(--tw-bg-opacity))!important}.hover\:bg-green-600:hover{--tw-bg-opacity: 1 !important;background-color:rgb(22 163 74 / var(--tw-bg-opacity))!important}.hover\:bg-info-primary:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--info-primary) / var(--tw-bg-opacity))!important}.hover\:bg-info-secondary:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--info-secondary) / var(--tw-bg-opacity))!important}.hover\:bg-info-tertiary:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--info-tertiary) / var(--tw-bg-opacity))!important}.hover\:bg-input-button-hover:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--input-button-hover) / var(--tw-bg-opacity))!important}.hover\:bg-numpad-hover:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--numpad-hover) / var(--tw-bg-opacity))!important}.hover\:bg-red-600:hover{--tw-bg-opacity: 1 !important;background-color:rgb(220 38 38 / var(--tw-bg-opacity))!important}.hover\:bg-success-tertiary:hover{--tw-bg-opacity: 1 !important;background-color:rgb(var(--success-tertiary) / var(--tw-bg-opacity))!important}.hover\:bg-white:hover{--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important}.hover\:text-blue-400:hover{--tw-text-opacity: 1 !important;color:rgb(96 165 250 / var(--tw-text-opacity))!important}.hover\:text-error-secondary:hover{--tw-text-opacity: 1 !important;color:rgb(var(--error-secondary) / var(--tw-text-opacity))!important}.hover\:text-gray-700:hover{--tw-text-opacity: 1 !important;color:rgb(55 65 81 / var(--tw-text-opacity))!important}.hover\:text-info-primary:hover{--tw-text-opacity: 1 !important;color:rgb(var(--info-primary) / var(--tw-text-opacity))!important}.hover\:text-success-secondary:hover{--tw-text-opacity: 1 !important;color:rgb(var(--success-secondary) / var(--tw-text-opacity))!important}.hover\:text-white:hover{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.hover\:underline:hover{text-decoration-line:underline!important}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.focus\:border-blue-400:focus{--tw-border-opacity: 1 !important;border-color:rgb(96 165 250 / var(--tw-border-opacity))!important}.focus\:shadow-sm:focus{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.active\:border-numpad-edge:active{--tw-border-opacity: 1 !important;border-color:rgb(var(--numpad-edge) / var(--tw-border-opacity))!important}:is(.dark .dark\:border-blue-700){--tw-border-opacity: 1 !important;border-color:rgb(29 78 216 / var(--tw-border-opacity))!important}:is(.dark .dark\:border-green-800){--tw-border-opacity: 1 !important;border-color:rgb(22 101 52 / var(--tw-border-opacity))!important}:is(.dark .dark\:border-red-700){--tw-border-opacity: 1 !important;border-color:rgb(185 28 28 / var(--tw-border-opacity))!important}:is(.dark .dark\:border-yellow-700){--tw-border-opacity: 1 !important;border-color:rgb(161 98 7 / var(--tw-border-opacity))!important}:is(.dark .dark\:bg-blue-600){--tw-bg-opacity: 1 !important;background-color:rgb(37 99 235 / var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-green-700){--tw-bg-opacity: 1 !important;background-color:rgb(21 128 61 / var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-red-600){--tw-bg-opacity: 1 !important;background-color:rgb(220 38 38 / var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-yellow-600){--tw-bg-opacity: 1 !important;background-color:rgb(202 138 4 / var(--tw-bg-opacity))!important}:is(.dark .dark\:text-slate-300){--tw-text-opacity: 1 !important;color:rgb(203 213 225 / var(--tw-text-opacity))!important}@media (min-width: 640px){.sm\:relative{position:relative!important}.sm\:mx-auto{margin-left:auto!important;margin-right:auto!important}.sm\:hidden{display:none!important}.sm\:h-108{height:27rem!important}.sm\:w-64{width:16rem!important}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.sm\:flex-row{flex-direction:row!important}.sm\:rounded-lg{border-radius:.5rem!important}.sm\:text-sm{font-size:.875rem!important;line-height:1.25rem!important}.sm\:leading-5{line-height:1.25rem!important}}@media (min-width: 768px){.md\:visible{visibility:visible!important}.md\:static{position:static!important}.md\:-mx-1{margin-left:-.25rem!important;margin-right:-.25rem!important}.md\:-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}.md\:-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}.md\:mx-auto{margin-left:auto!important;margin-right:auto!important}.md\:my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.md\:mb-0{margin-bottom:0!important}.md\:mt-0{margin-top:0!important}.md\:mt-2{margin-top:.5rem!important}.md\:block{display:block!important}.md\:inline-block{display:inline-block!important}.md\:inline{display:inline!important}.md\:flex{display:flex!important}.md\:table-cell{display:table-cell!important}.md\:hidden{display:none!important}.md\:h-10{height:2.5rem!important}.md\:h-3\/5-screen{height:60vh!important}.md\:h-4\/5-screen{height:80vh!important}.md\:h-5\/6-screen{height:83.33vh!important}.md\:h-5\/7-screen{height:71.42vh!important}.md\:h-6\/7-screen{height:85.71vh!important}.md\:h-full{height:100%!important}.md\:w-1\/2{width:50%!important}.md\:w-1\/3{width:33.333333%!important}.md\:w-1\/4{width:25%!important}.md\:w-10{width:2.5rem!important}.md\:w-16{width:4rem!important}.md\:w-2\/3{width:66.666667%!important}.md\:w-2\/3-screen{width:66.66vw!important}.md\:w-2\/4-screen{width:50vw!important}.md\:w-2\/5{width:40%!important}.md\:w-2\/5-screen{width:40vw!important}.md\:w-24{width:6rem!important}.md\:w-28{width:7rem!important}.md\:w-3\/4{width:75%!important}.md\:w-3\/5{width:60%!important}.md\:w-3\/5-screen{width:60vw!important}.md\:w-3\/6-screen{width:50vw!important}.md\:w-3\/7-screen{width:42.85vw!important}.md\:w-4\/5{width:80%!important}.md\:w-4\/5-screen{width:80vw!important}.md\:w-4\/6-screen{width:66.66vw!important}.md\:w-4\/7-screen{width:57.14vw!important}.md\:w-5\/7-screen{width:71.42vw!important}.md\:w-56{width:14rem!important}.md\:w-6\/7-screen{width:85.71vw!important}.md\:w-60{width:15rem!important}.md\:w-72{width:18rem!important}.md\:w-96{width:24rem!important}.md\:w-\[550px\]{width:550px!important}.md\:w-auto{width:auto!important}.md\:w-full{width:100%!important}.md\:flex-auto{flex:1 1 auto!important}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.md\:flex-row{flex-direction:row!important}.md\:flex-col{flex-direction:column!important}.md\:items-start{align-items:flex-start!important}.md\:items-center{align-items:center!important}.md\:justify-center{justify-content:center!important}.md\:justify-between{justify-content:space-between!important}.md\:rounded{border-radius:.25rem!important}.md\:border-l{border-left-width:1px!important}.md\:p-0{padding:0!important}.md\:px-1{padding-left:.25rem!important;padding-right:.25rem!important}.md\:px-2{padding-left:.5rem!important;padding-right:.5rem!important}.md\:px-4{padding-left:1rem!important;padding-right:1rem!important}.md\:text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.md\:text-base{font-size:1rem!important;line-height:1.5rem!important}.md\:text-xl{font-size:1.25rem!important;line-height:1.75rem!important}}@media (min-width: 1024px){.lg\:my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.lg\:my-8{margin-top:2rem!important;margin-bottom:2rem!important}.lg\:block{display:block!important}.lg\:flex{display:flex!important}.lg\:hidden{display:none!important}.lg\:h-3\/7-screen{height:42.85vh!important}.lg\:h-4\/5-screen{height:80vh!important}.lg\:h-5\/6-screen{height:83.33vh!important}.lg\:h-5\/7-screen{height:71.42vh!important}.lg\:h-full{height:100%!important}.lg\:w-1\/2{width:50%!important}.lg\:w-1\/3{width:33.333333%!important}.lg\:w-1\/3-screen{width:33.33vw!important}.lg\:w-1\/4{width:25%!important}.lg\:w-1\/6{width:16.666667%!important}.lg\:w-2\/3{width:66.666667%!important}.lg\:w-2\/4{width:50%!important}.lg\:w-2\/4-screen{width:50vw!important}.lg\:w-2\/5{width:40%!important}.lg\:w-2\/5-screen{width:40vw!important}.lg\:w-2\/6-screen{width:33.33vw!important}.lg\:w-2\/7-screen{width:28.57vw!important}.lg\:w-3\/5{width:60%!important}.lg\:w-3\/5-screen{width:60vw!important}.lg\:w-3\/6-screen{width:50vw!important}.lg\:w-3\/7-screen{width:42.85vw!important}.lg\:w-4\/6{width:66.666667%!important}.lg\:w-4\/7-screen{width:57.14vw!important}.lg\:w-56{width:14rem!important}.lg\:w-auto{width:auto!important}.lg\:w-full{width:100%!important}.lg\:w-half{width:50vw!important}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}.lg\:flex-row{flex-direction:row!important}.lg\:items-start{align-items:flex-start!important}.lg\:border-t{border-top-width:1px!important}.lg\:px-0{padding-left:0!important;padding-right:0!important}.lg\:py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.lg\:text-2xl{font-size:1.5rem!important;line-height:2rem!important}.lg\:text-5xl{font-size:3rem!important;line-height:1!important}.lg\:text-lg{font-size:1.125rem!important;line-height:1.75rem!important}.lg\:text-xl{font-size:1.25rem!important;line-height:1.75rem!important}}@media (min-width: 1280px){.xl\:h-2\/5-screen{height:40vh!important}.xl\:w-1\/4{width:25%!important}.xl\:w-108{width:27rem!important}.xl\:w-2\/5-screen{width:40vw!important}.xl\:w-2\/6-screen{width:33.33vw!important}.xl\:w-84{width:21rem!important}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))!important}.xl\:text-xl{font-size:1.25rem!important;line-height:1.75rem!important}}@media print{.print\:w-1\/2{width:50%!important}.print\:w-1\/3{width:33.333333%!important}.print\:text-black{--tw-text-opacity: 1 !important;color:rgb(0 0 0 / var(--tw-text-opacity))!important}} diff --git a/public/build/assets/app-DJ5e57v3.js b/public/build/assets/app-DJ5e57v3.js new file mode 100644 index 000000000..26dae8f77 --- /dev/null +++ b/public/build/assets/app-DJ5e57v3.js @@ -0,0 +1,16 @@ +import{_ as e}from"./preload-helper-BQ24v_F8.js";import{N as T}from"./ns-hotpress-MZ-MjBha.js";import{b as w,n as y,a as I}from"./components-RJC2qWGQ.js";import{c as m,n as L}from"./bootstrap-Bpe5LRJd.js";import{d as t}from"./runtime-core.esm-bundler-RT2b-_3S.js";import"./ns-alert-popup-SVrn5Xft.js";import"./currency-lOMYG1Wf.js";import"./_plugin-vue_export-helper-DlAUqK2U.js";import"./ns-avatar-image-CAD6xUGA.js";import"./index.es-Br67aBEV.js";import"./ns-prompt-popup-C2dK5WQb.js";function V(o,_){_.forEach(a=>{let r=o.document.createElement("link");r.setAttribute("rel","stylesheet"),r.setAttribute("type","text/css"),r.setAttribute("href",a),o.document.getElementsByTagName("head")[0].appendChild(r)})}const O={install(o,_={}){o.config.globalProperties.$htmlToPaper=(a,r,D=()=>!0)=>{let v="_blank",P=["fullscreen=yes","titlebar=yes","scrollbars=yes"],R=!0,f=[],{name:u=v,specs:i=P,replace:A=R,styles:l=f}=_;r&&(r.name&&(u=r.name),r.specs&&(i=r.specs),r.replace&&(A=r.replace),r.styles&&(l=r.styles)),i=i.length?i.join(","):"";const p=window.document.getElementById(a);if(!p){alert(`Element to print #${a} not found!`);return}const s=window.open("",u,i);return s.document.write(` + + + ${window.document.title} + + + ${p.innerHTML} + + + `),V(s,l),setTimeout(()=>{s.document.close(),s.focus(),s.print(),s.close(),D()},1e3),!0}}},S=t(()=>e(()=>import("./rewards-system-DvVqe8hs.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url)),g=t(()=>e(()=>import("./create-coupons-36Lc70gf.js"),__vite__mapDeps([5,1,2,3,4]),import.meta.url)),C=t(()=>e(()=>import("./ns-settings-CNFAQw1A.js"),__vite__mapDeps([6,2,1,3,7,8,4,9,10,11,12]),import.meta.url)),k=t(()=>e(()=>import("./reset-B2Mow6TO.js"),__vite__mapDeps([13,2,1,3,4]),import.meta.url)),H=t(()=>e(()=>import("./modules-Dh6mHHY_.js"),__vite__mapDeps([14,1,2,3,8,4,10,11,12]),import.meta.url)),M=t(()=>e(()=>import("./ns-permissions-BHdLclhZ.js"),__vite__mapDeps([15,1,2,3,4]),import.meta.url)),j=t(()=>e(()=>import("./ns-procurement-BSr0IvRo.js"),__vite__mapDeps([16,1,2,3,17,11,4,12,18,19,10]),import.meta.url)),N=t(()=>e(()=>import("./manage-products-Cuo5kQ-p.js"),__vite__mapDeps([17,1,2,3,11,4,12]),import.meta.url)),q=t(()=>e(()=>import("./ns-procurement-invoice-DSSNRCNz.js"),__vite__mapDeps([]),import.meta.url)),x=t(()=>e(()=>import("./ns-notifications-q9UGQ4HE.js"),__vite__mapDeps([20,1,2,3,11,4,12,7,8,9,10]),import.meta.url)),$=t(()=>e(()=>import("./components-RJC2qWGQ.js").then(o=>o.i),__vite__mapDeps([7,8,2,4,3,9,10,1,11,12]),import.meta.url)),B=t(()=>e(()=>import("./ns-transaction-BN-m7yci.js"),__vite__mapDeps([21,1,2,3,8,4,10,11,12]),import.meta.url)),F=t(()=>e(()=>import("./ns-dashboard-DK_nj8-O.js"),__vite__mapDeps([22,1,2,3,4]),import.meta.url)),Y=t(()=>e(()=>import("./ns-low-stock-report-D5tJitwG.js"),__vite__mapDeps([23,1,2,3,7,8,4,9,10,11,12,19]),import.meta.url)),z=t(()=>e(()=>import("./ns-sale-report-D9hf2SSc.js"),__vite__mapDeps([24,1,2,3,7,8,4,9,10,11,12,19]),import.meta.url)),G=t(()=>e(()=>import("./ns-sold-stock-report-BbVXjoD-.js"),__vite__mapDeps([25,1,2,3,7,8,4,9,10,11,12,18,19]),import.meta.url)),J=t(()=>e(()=>import("./ns-profit-report-CzVSFQQq.js"),__vite__mapDeps([26,1,2,3,7,8,4,9,10,11,12,18,19]),import.meta.url)),K=t(()=>e(()=>import("./ns-stock-combined-report-RSZoYjgP.js"),__vite__mapDeps([27,1,2,3,18,11,4,12,19]),import.meta.url)),Q=t(()=>e(()=>import("./ns-cash-flow-report-De-1JZEk.js"),__vite__mapDeps([28,1,2,3,7,8,4,9,10,11,12]),import.meta.url)),U=t(()=>e(()=>import("./ns-yearly-report-kf-I1rer.js"),__vite__mapDeps([29,1,2,3,7,8,4,9,10,11,12]),import.meta.url)),W=t(()=>e(()=>import("./ns-best-products-report-DaNRMHuU.js"),__vite__mapDeps([30,1,2,3,7,8,4,9,10,11,12]),import.meta.url)),X=t(()=>e(()=>import("./ns-payment-types-report-B2xnC6aK.js"),__vite__mapDeps([31,1,2,3,7,8,4,9,10,11,12]),import.meta.url)),Z=t(()=>e(()=>import("./ns-customers-statement-report-DWzLJEA5.js"),__vite__mapDeps([32,2,4,3]),import.meta.url)),ee=t(()=>e(()=>import("./ns-stock-adjustment-DZ6clkKl.js"),__vite__mapDeps([33,1,2,3,34,4,11,12]),import.meta.url)),te=t(()=>e(()=>import("./ns-order-invoice-DoMLCmH7.js"),__vite__mapDeps([35,2,4,3]),import.meta.url)),n=window.nsState,oe=window.nsScreen;nsExtraComponents.nsToken=t(()=>e(()=>import("./ns-token-QwD-Et2W.js"),__vite__mapDeps([36,1,2,3,4,10,11,12]),import.meta.url));window.nsHotPress=new T;const d=Object.assign({nsModules:H,nsRewardsSystem:S,nsCreateCoupons:g,nsManageProducts:N,nsSettings:C,nsReset:k,nsPermissions:M,nsProcurement:j,nsProcurementInvoice:q,nsMedia:$,nsTransaction:B,nsDashboard:F,nsNotifications:x,nsSaleReport:z,nsSoldStockReport:G,nsProfitReport:J,nsStockCombinedReport:K,nsCashFlowReport:Q,nsYearlyReport:U,nsPaymentTypesReport:X,nsBestProductsReport:W,nsLowStockReport:Y,nsCustomersStatementReport:Z,nsStockAdjustment:ee,nsOrderInvoice:te,...w},nsExtraComponents);window.nsDashboardAside=m({data(){return{sidebar:"visible",popups:[]}},components:{nsMenu:y,nsSubmenu:I},mounted(){n.subscribe(o=>{o.sidebar&&(this.sidebar=o.sidebar)})}});window.nsDashboardOverlay=m({data(){return{sidebar:null,popups:[]}},components:d,mounted(){n.subscribe(o=>{o.sidebar&&(this.sidebar=o.sidebar)})},methods:{closeMenu(){n.setState({sidebar:this.sidebar==="hidden"?"visible":"hidden"})}}});window.nsDashboardHeader=m({data(){return{menuToggled:!1,sidebar:null}},components:d,methods:{toggleMenu(){this.menuToggled=!this.menuToggled},toggleSideMenu(){["lg","xl"].includes(oe.breakpoint)?n.setState({sidebar:this.sidebar==="hidden"?"visible":"hidden"}):n.setState({sidebar:this.sidebar==="hidden"?"visible":"hidden"})}},mounted(){n.subscribe(o=>{o.sidebar&&(this.sidebar=o.sidebar)})}});window.nsDashboardContent=m({});for(let o in d)window.nsDashboardContent.component(o,d[o]);window.nsDashboardContent.use(O,{styles:Object.values(window.ns.cssFiles)});window.nsComponents=Object.assign(d,w);L.doAction("ns-before-mount");console.log("ns-before-mount");const c=document.querySelector("#dashboard-aside");window.nsDashboardAside&&c&&window.nsDashboardAside.mount(c);const b=document.querySelector("#dashboard-overlay");window.nsDashboardOverlay&&b&&window.nsDashboardOverlay.mount(b);const E=document.querySelector("#dashboard-header");window.nsDashboardHeader&&E&&window.nsDashboardHeader.mount(E);const h=document.querySelector("#dashboard-content");window.nsDashboardContent&&h&&window.nsDashboardContent.mount(h); +function __vite__mapDeps(indexes) { + if (!__vite__mapDeps.viteFileDeps) { + __vite__mapDeps.viteFileDeps = ["./rewards-system-DvVqe8hs.js","./bootstrap-Bpe5LRJd.js","./currency-lOMYG1Wf.js","./runtime-core.esm-bundler-RT2b-_3S.js","./_plugin-vue_export-helper-DlAUqK2U.js","./create-coupons-36Lc70gf.js","./ns-settings-CNFAQw1A.js","./components-RJC2qWGQ.js","./ns-alert-popup-SVrn5Xft.js","./ns-avatar-image-CAD6xUGA.js","./index.es-Br67aBEV.js","./ns-prompt-popup-C2dK5WQb.js","./ns-prompt-popup-CVxzoclS.css","./reset-B2Mow6TO.js","./modules-Dh6mHHY_.js","./ns-permissions-BHdLclhZ.js","./ns-procurement-BSr0IvRo.js","./manage-products-Cuo5kQ-p.js","./select-api-entities-COgjiGM-.js","./join-array-DPKtuOQJ.js","./ns-notifications-q9UGQ4HE.js","./ns-transaction-BN-m7yci.js","./ns-dashboard-DK_nj8-O.js","./ns-low-stock-report-D5tJitwG.js","./ns-sale-report-D9hf2SSc.js","./ns-sold-stock-report-BbVXjoD-.js","./ns-profit-report-CzVSFQQq.js","./ns-stock-combined-report-RSZoYjgP.js","./ns-cash-flow-report-De-1JZEk.js","./ns-yearly-report-kf-I1rer.js","./ns-best-products-report-DaNRMHuU.js","./ns-payment-types-report-B2xnC6aK.js","./ns-customers-statement-report-DWzLJEA5.js","./ns-stock-adjustment-DZ6clkKl.js","./ns-procurement-quantity-TtYuVe2j.js","./ns-order-invoice-DoMLCmH7.js","./ns-token-QwD-Et2W.js"] + } + return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) +} diff --git a/public/build/assets/auth-Bq-OoVDH.js b/public/build/assets/auth-Bq-OoVDH.js new file mode 100644 index 000000000..a230fe1fd --- /dev/null +++ b/public/build/assets/auth-Bq-OoVDH.js @@ -0,0 +1,7 @@ +import{_ as o}from"./preload-helper-BQ24v_F8.js";import{c as m}from"./bootstrap-Bpe5LRJd.js";import{b as n}from"./components-RJC2qWGQ.js";import{d as t}from"./runtime-core.esm-bundler-RT2b-_3S.js";import"./currency-lOMYG1Wf.js";import"./ns-alert-popup-SVrn5Xft.js";import"./_plugin-vue_export-helper-DlAUqK2U.js";import"./ns-avatar-image-CAD6xUGA.js";import"./index.es-Br67aBEV.js";import"./ns-prompt-popup-C2dK5WQb.js";nsExtraComponents.nsRegister=t(()=>o(()=>import("./ns-register-PYoR7hdn.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url));nsExtraComponents.nsLogin=t(()=>o(()=>import("./ns-login-CdLJnkR_.js"),__vite__mapDeps([5,1,2,3,4]),import.meta.url));nsExtraComponents.nsPasswordLost=t(()=>o(()=>import("./ns-password-lost-CgyMPToF.js"),__vite__mapDeps([6,2,1,3,4]),import.meta.url));nsExtraComponents.nsNewPassword=t(()=>o(()=>import("./ns-new-password-B-X7fgtm.js"),__vite__mapDeps([7,2,1,3,4]),import.meta.url));window.nsHttpClient=nsHttpClient;window.authVueComponent=m({components:{...nsExtraComponents,...n}});for(let r in n)window.authVueComponent.component(r,n[r]);window.authVueComponent.mount("#page-container"); +function __vite__mapDeps(indexes) { + if (!__vite__mapDeps.viteFileDeps) { + __vite__mapDeps.viteFileDeps = ["./ns-register-PYoR7hdn.js","./bootstrap-Bpe5LRJd.js","./currency-lOMYG1Wf.js","./runtime-core.esm-bundler-RT2b-_3S.js","./_plugin-vue_export-helper-DlAUqK2U.js","./ns-login-CdLJnkR_.js","./ns-password-lost-CgyMPToF.js","./ns-new-password-B-X7fgtm.js"] + } + return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) +} diff --git a/public/build/assets/auth-oCR7mUnk.js b/public/build/assets/auth-oCR7mUnk.js deleted file mode 100644 index 970e93f99..000000000 --- a/public/build/assets/auth-oCR7mUnk.js +++ /dev/null @@ -1,7 +0,0 @@ -import{_ as o}from"./preload-helper-BQ24v_F8.js";import{c as m}from"./tax-BACo6kIE.js";import{b as n}from"./components-CSb5I62o.js";import{a as t}from"./runtime-core.esm-bundler-DCfIpxDt.js";import"./currency-ZXKMLAC0.js";import"./ns-alert-popup-DDoxXsJC.js";import"./_plugin-vue_export-helper-DlAUqK2U.js";import"./ns-avatar-image-C_oqdj76.js";import"./index.es-BED_8l8F.js";import"./bootstrap-B7E2wy_a.js";import"./ns-prompt-popup-BbWKrSku.js";nsExtraComponents.nsRegister=t(()=>o(()=>import("./ns-register-ujVjOoVd.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url));nsExtraComponents.nsLogin=t(()=>o(()=>import("./ns-login-BDtgzyc_.js"),__vite__mapDeps([6,1,2,3,4,5]),import.meta.url));nsExtraComponents.nsPasswordLost=t(()=>o(()=>import("./ns-password-lost-j2odHvH0.js"),__vite__mapDeps([7,2,1,3,4,5]),import.meta.url));nsExtraComponents.nsNewPassword=t(()=>o(()=>import("./ns-new-password-D4rAUp2J.js"),__vite__mapDeps([8,2,1,3,4,5]),import.meta.url));window.nsHttpClient=nsHttpClient;window.authVueComponent=m({components:{...nsExtraComponents,...n}});for(let r in n)window.authVueComponent.component(r,n[r]);window.authVueComponent.mount("#page-container"); -function __vite__mapDeps(indexes) { - if (!__vite__mapDeps.viteFileDeps) { - __vite__mapDeps.viteFileDeps = ["./ns-register-ujVjOoVd.js","./tax-BACo6kIE.js","./currency-ZXKMLAC0.js","./runtime-core.esm-bundler-DCfIpxDt.js","./bootstrap-B7E2wy_a.js","./_plugin-vue_export-helper-DlAUqK2U.js","./ns-login-BDtgzyc_.js","./ns-password-lost-j2odHvH0.js","./ns-new-password-D4rAUp2J.js"] - } - return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) -} diff --git a/public/build/assets/bootstrap-B7E2wy_a.js b/public/build/assets/bootstrap-B7E2wy_a.js deleted file mode 100644 index f8976e473..000000000 --- a/public/build/assets/bootstrap-B7E2wy_a.js +++ /dev/null @@ -1 +0,0 @@ -var u=Object.defineProperty;var b=(n,e,s)=>e in n?u(n,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):n[e]=s;var o=(n,e,s)=>(b(n,typeof e!="symbol"?e+"":e,s),s);import{L as l,C as t,P as h,c as w,h as k,a as i,S as a,F as r,b as m,p as S,d as C,e as f,t as x,E as y,f as d,H,U as A,g as R,i as _,j as v,R as E,k as W,l as T,m as g,n as P,o as B,T as F,q as J}from"./tax-BACo6kIE.js";import{_ as z,a as K,n as L,b as N}from"./currency-ZXKMLAC0.js";import{d as U,a as q,m as j,s as V}from"./runtime-core.esm-bundler-DCfIpxDt.js";window._=l;window.ChartJS=t;window.Pusher=h;window.createApp=w;window.moment=k;window.Axios=i;window.__=z;window.__m=K;window.SnackBar=a;window.FloatingNotice=r;window.nsHooks=m();window.popupResolver=S,window.popupCloser=C,window.countdown=f;window.timespan=x;window.Axios.defaults.headers.common["x-requested-with"]="XMLHttpRequest";window.Axios.defaults.withCredentials=!0;ns.websocket.enabled&&(window.Echo=new y({broadcaster:"pusher",key:ns.websocket.key,wsHost:ns.websocket.host,wsPort:ns.websocket.port,wssPort:ns.websocket.port,namespace:"",forceTLS:ns.websocket.secured,disableStats:!0,encrypted:ns.websocket.secured,enabledTransports:ns.websocket.secured?["ws","wss"]:["ws"],disabledTransports:ns.websocket.secured?["sockjs","xhr_polling","xhr_streaming"]:[]}));const M=new d,c=new H,X=new a,D=new r,G=new A,I=new J,ee=window.nsHooks,p=new class{constructor(){o(this,"breakpoint");this.breakpoint="",this.detectScreenSizes(),R(window,"resize").subscribe(n=>this.detectScreenSizes())}detectScreenSizes(){switch(!0){case(window.outerWidth>0&&window.outerWidth<=480):this.breakpoint="xs";break;case(window.outerWidth>480&&window.outerWidth<=640):this.breakpoint="sm";break;case(window.outerWidth>640&&window.outerWidth<=1024):this.breakpoint="md";break;case(window.outerWidth>1024&&window.outerWidth<=1280):this.breakpoint="lg";break;case window.outerWidth>1280:this.breakpoint="xl";break}}},O=new _({sidebar:["xs","sm","md"].includes(p.breakpoint)?"hidden":"visible"});c.defineClient(i);window.nsEvent=M;window.nsHttpClient=c;window.nsSnackBar=X;window.nsNotice=D;window.nsState=O;window.nsUrl=G;window.nsScreen=p;window.ChartJS=t;window.EventEmitter=d;window.Popup=v;window.RxJS=E;window.FormValidation=W;window.nsCrudHandler=I;window.defineComponent=U;window.defineAsyncComponent=q;window.markRaw=j;window.shallowRef=V;window.createApp=w;window.ns.insertAfterKey=T;window.ns.insertBeforeKey=g;window.nsCurrency=L;window.nsAbbreviate=P;window.nsRawCurrency=N;window.nsTruncate=B;window.nsTax=F;console.log("bootstrap");export{c as a,X as b,D as c,M as d,ee as n}; diff --git a/public/build/assets/tax-BACo6kIE.js b/public/build/assets/bootstrap-Bpe5LRJd.js similarity index 57% rename from public/build/assets/tax-BACo6kIE.js rename to public/build/assets/bootstrap-Bpe5LRJd.js index 6f8287c86..7ea05a4f0 100644 --- a/public/build/assets/tax-BACo6kIE.js +++ b/public/build/assets/bootstrap-Bpe5LRJd.js @@ -1,14 +1,14 @@ -var x$=Object.defineProperty;var w$=(t,e,r)=>e in t?x$(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var je=(t,e,r)=>(w$(t,typeof e!="symbol"?e+"":e,r),r);import{c as Qi,d as Vu,_ as nh,g as S$}from"./currency-ZXKMLAC0.js";import{bk as jM,bl as jr,y as GM,N as XM,bm as yi,O as ZM,bn as KM,bo as eb,be as JM,K as QM,L as eT,p as d1,a2 as Fi,bp as Co,g as p1,bq as jl,br as km,bs as Vn,bt as qv,bu as jh,bv as bh,a8 as tT,al as Uv,F as m1,V as rT,d as nT,ba as iT,aM as aT,b0 as sT,an as oT,aV as tb,aS as rb,bw as _$,a6 as uT,bx as v1,by as A$,a3 as Hv,bz as D$,bA as lT,a0 as cT,P as N$,Q as E$,R as C$,S as M$,T as T$,M as O$,U as F$,W as P$,X as R$,Y as I$,Z as B$,_ as k$,$ as L$,a1 as $$,a4 as z$,a5 as q$,x as U$,h as H$,f as W$,c as V$,b as Y$,a7 as j$,a9 as G$,aa as X$,j as Z$,ab as K$,a as J$,ac as Q$,ad as ez,ae as tz,af as rz,ag as nz,ah as iz,ai as az,aj as sz,ak as oz,am as uz,J as lz,ao as cz,ap as fz,aq as hz,v as dz,ar as pz,as as mz,at as vz,au as gz,av as yz,aw as bz,ax as xz,ay as wz,m as Sz,az as _z,aA as Az,aB as Dz,n as Nz,I as Ez,D as Cz,aC as Mz,aD as Tz,aE as Oz,aF as Fz,aG as Pz,aH as Rz,aI as Iz,aJ as Bz,aK as kz,aL as Lz,o as $z,G as zz,z as qz,aN as Uz,E as Hz,aO as Wz,q as Vz,aP as Yz,i as jz,aQ as fT,e as Gz,B as Xz,r as Zz,H as Kz,k as Jz,aR as Qz,aT as e9,aU as t9,l as r9,aW as n9,s as g1,aX as i9,aY as a9,aZ as s9,t as o9,a_ as hT,a$ as u9,b1 as l9,b2 as c9,b3 as f9,b4 as h9,b5 as d9,u as p9,b6 as m9,b7 as v9,b8 as g9,b9 as y9,bb as b9,bc as x9,A as w9,bd as S9,bf as _9,bg as A9,w as D9,bh as N9,C as E9,bi as C9,bj as M9,bB as y1,bC as py,bD as ih,bE as T9,bF as B_,bG as O9,bH as F9,bI as P9,bJ as R9,bK as I9,bL as Wv}from"./runtime-core.esm-bundler-DCfIpxDt.js";function B9(t,e){for(var r=0;rn[i]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}var Lm={exports:{}};/** +var O$=Object.defineProperty;var F$=(t,e,r)=>e in t?O$(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var je=(t,e,r)=>(F$(t,typeof e!="symbol"?e+"":e,r),r);import{c as ea,b as Vu,_ as Gl,g as R$,e as P$,n as k$,a as B$}from"./currency-lOMYG1Wf.js";import{bk as ZM,bl as jr,x as KM,M as JM,bm as yi,N as QM,bn as eT,bo as rb,be as tT,J as rT,K as nT,l as p1,a1 as Fi,bp as Co,f as m1,bq as Xl,br as Im,bs as Vn,bt as Uv,bu as jh,bv as bh,a7 as iT,ak as Hv,F as v1,U as aT,m as g1,ba as sT,aM as oT,b0 as uT,am as lT,aV as nb,aS as ib,bw as I$,a5 as cT,bx as y1,by as L$,a2 as Wv,bz as $$,bA as fT,$ as hT,O as z$,P as q$,Q as U$,R as H$,S as W$,L as V$,T as Y$,V as j$,W as G$,X as X$,Y as Z$,Z as K$,_ as J$,a0 as Q$,a3 as ez,a4 as tz,v as rz,g as nz,e as iz,c as az,a as sz,a6 as oz,a8 as uz,a9 as lz,i as cz,aa as fz,d as dT,ab as hz,ac as dz,ad as pz,ae as mz,af as vz,ag as gz,ah as yz,ai as bz,aj as xz,al as wz,I as Sz,an as _z,ao as Az,ap as Dz,q as Ez,aq as Nz,ar as Cz,as as Mz,at as Tz,au as Oz,av as Fz,aw as Rz,ax as Pz,ay as pT,az as kz,aA as Bz,aB as Iz,n as Lz,H as $z,C as zz,aC as qz,aD as Uz,aE as Hz,aF as Wz,aG as Vz,aH as Yz,aI as jz,aJ as Gz,aK as Xz,aL as Zz,o as Kz,E as Jz,y as Qz,aN as e9,D as t9,aO as r9,p as n9,aP as i9,h as a9,aQ as mT,b as s9,A as o9,r as u9,G as l9,j as c9,aR as f9,aT as h9,aU as d9,k as p9,aW as m9,s as Vv,aX as v9,aY as g9,aZ as y9,t as b9,a_ as vT,a$ as x9,b1 as w9,b2 as S9,b3 as _9,b4 as A9,b5 as D9,u as E9,b6 as N9,b7 as C9,b8 as M9,b9 as T9,bb as O9,bc as F9,z as R9,bd as P9,bf as k9,bg as B9,w as I9,bh as L9,B as $9,bi as z9,bj as q9,bB as b1,bC as vy,bD as ih,bE as U9,bF as $_,bG as H9,bH as W9,bI as V9,bJ as Y9,bK as j9,bL as Yv}from"./runtime-core.esm-bundler-RT2b-_3S.js";function G9(t,e){for(var r=0;rn[i]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}var Lm={exports:{}};/** * @license * Lodash * Copyright OpenJS Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */Lm.exports;(function(t,e){(function(){var r,n="4.17.21",i=200,a="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",s="Expected a function",o="Invalid `variable` option passed into `_.template`",u="__lodash_hash_undefined__",l=500,c="__lodash_placeholder__",f=1,h=2,p=4,g=1,m=2,b=1,y=2,S=4,x=8,_=16,A=32,w=64,C=128,E=256,N=512,M=30,O="...",F=800,q=16,V=1,H=2,B=3,I=1/0,K=9007199254740991,$=17976931348623157e292,se=NaN,he=4294967295,ne=he-1,X=he>>>1,de=[["ary",C],["bind",b],["bindKey",y],["curry",x],["curryRight",_],["flip",N],["partial",A],["partialRight",w],["rearg",E]],Se="[object Arguments]",ce="[object Array]",xe="[object AsyncFunction]",_e="[object Boolean]",me="[object Date]",we="[object DOMException]",Ne="[object Error]",Ce="[object Function]",He="[object GeneratorFunction]",Ue="[object Map]",J="[object Number]",te="[object Null]",ye="[object Object]",ee="[object Promise]",ue="[object Proxy]",le="[object RegExp]",Ee="[object Set]",Me="[object String]",P="[object Symbol]",U="[object Undefined]",Y="[object WeakMap]",pe="[object WeakSet]",ge="[object ArrayBuffer]",De="[object DataView]",Re="[object Float32Array]",Ie="[object Float64Array]",Ve="[object Int8Array]",ze="[object Int16Array]",vt="[object Int32Array]",St="[object Uint8Array]",at="[object Uint8ClampedArray]",mr="[object Uint16Array]",k="[object Uint32Array]",oe=/\b__p \+= '';/g,Ae=/\b(__p \+=) '' \+/g,$e=/(__e\(.*?\)|\b__t\)) \+\n'';/g,ct=/&(?:amp|lt|gt|quot|#39);/g,ht=/[&<>"']/g,Dn=RegExp(ct.source),ro=RegExp(ht.source),ll=/<%-([\s\S]+?)%>/g,cl=/<%([\s\S]+?)%>/g,nu=/<%=([\s\S]+?)%>/g,Wc=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Vc=/^\w*$/,Yc=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,La=/[\\^$.*+?()[\]{}|]/g,jc=RegExp(La.source),no=/^\s+/,Gc=/\s/,Xc=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Zc=/\{\n\/\* \[wrapped with (.+)\] \*/,Kc=/,? & /,Jc=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Qc=/[()=,{}\[\]\/\s]/,fl=/\\(\\)?/g,da=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,hl=/\w*$/,ef=/^[-+]0x[0-9a-f]+$/i,tf=/^0b[01]+$/i,iu=/^\[object .+?Constructor\]$/,au=/^0o[0-7]+$/i,rf=/^(?:0|[1-9]\d*)$/,nf=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ao=/($^)/,ls=/['\n\r\u2028\u2029\\]/g,Wt="\\ud800-\\udfff",bn="\\u0300-\\u036f",af="\\ufe20-\\ufe2f",so="\\u20d0-\\u20ff",$a=bn+af+so,dl="\\u2700-\\u27bf",qi="a-z\\xdf-\\xf6\\xf8-\\xff",Sd="\\xac\\xb1\\xd7\\xf7",cs="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",sf="\\u2000-\\u206f",Qg=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",_d="A-Z\\xc0-\\xd6\\xd8-\\xde",Ad="\\ufe0e\\ufe0f",Dd=Sd+cs+sf+Qg,su="['’]",e0="["+Wt+"]",Nd="["+Dd+"]",ou="["+$a+"]",uu="\\d+",lu="["+dl+"]",Ed="["+qi+"]",oo="[^"+Wt+Dd+uu+dl+qi+_d+"]",of="\\ud83c[\\udffb-\\udfff]",t0="(?:"+ou+"|"+of+")",Cd="[^"+Wt+"]",uf="(?:\\ud83c[\\udde6-\\uddff]){2}",lf="[\\ud800-\\udbff][\\udc00-\\udfff]",uo="["+_d+"]",Md="\\u200d",pl="(?:"+Ed+"|"+oo+")",fs="(?:"+uo+"|"+oo+")",Td="(?:"+su+"(?:d|ll|m|re|s|t|ve))?",Od="(?:"+su+"(?:D|LL|M|RE|S|T|VE))?",Fd=t0+"?",Pd="["+Ad+"]?",Rd="(?:"+Md+"(?:"+[Cd,uf,lf].join("|")+")"+Pd+Fd+")*",r0="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Id="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Bd=Pd+Fd+Rd,n0="(?:"+[lu,uf,lf].join("|")+")"+Bd,i0="(?:"+[Cd+ou+"?",ou,uf,lf,e0].join("|")+")",a0=RegExp(su,"g"),s0=RegExp(ou,"g"),cf=RegExp(of+"(?="+of+")|"+i0+Bd,"g"),o0=RegExp([uo+"?"+Ed+"+"+Td+"(?="+[Nd,uo,"$"].join("|")+")",fs+"+"+Od+"(?="+[Nd,uo+pl,"$"].join("|")+")",uo+"?"+pl+"+"+Td,uo+"+"+Od,Id,r0,uu,n0].join("|"),"g"),u0=RegExp("["+Md+Wt+$a+Ad+"]"),l0=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,kd=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],c0=-1,Ar={};Ar[Re]=Ar[Ie]=Ar[Ve]=Ar[ze]=Ar[vt]=Ar[St]=Ar[at]=Ar[mr]=Ar[k]=!0,Ar[Se]=Ar[ce]=Ar[ge]=Ar[_e]=Ar[De]=Ar[me]=Ar[Ne]=Ar[Ce]=Ar[Ue]=Ar[J]=Ar[ye]=Ar[le]=Ar[Ee]=Ar[Me]=Ar[Y]=!1;var et={};et[Se]=et[ce]=et[ge]=et[De]=et[_e]=et[me]=et[Re]=et[Ie]=et[Ve]=et[ze]=et[vt]=et[Ue]=et[J]=et[ye]=et[le]=et[Ee]=et[Me]=et[P]=et[St]=et[at]=et[mr]=et[k]=!0,et[Ne]=et[Ce]=et[Y]=!1;var ff={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},ml={"&":"&","<":"<",">":">",'"':""","'":"'"},f0={"&":"&","<":"<",">":">",""":'"',"'":"'"},h0={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ld=parseFloat,d0=parseInt,$d=typeof Qi=="object"&&Qi&&Qi.Object===Object&&Qi,p0=typeof self=="object"&&self&&self.Object===Object&&self,on=$d||p0||Function("return this")(),hf=e&&!e.nodeType&&e,lo=hf&&!0&&t&&!t.nodeType&&t,zd=lo&&lo.exports===hf,df=zd&&$d.process,Ai=function(){try{var ve=lo&&lo.require&&lo.require("util").types;return ve||df&&df.binding&&df.binding("util")}catch{}}(),qd=Ai&&Ai.isArrayBuffer,Ud=Ai&&Ai.isDate,pf=Ai&&Ai.isMap,Hd=Ai&&Ai.isRegExp,Wd=Ai&&Ai.isSet,Vd=Ai&&Ai.isTypedArray;function Zn(ve,Fe,Te){switch(Te.length){case 0:return ve.call(Fe);case 1:return ve.call(Fe,Te[0]);case 2:return ve.call(Fe,Te[0],Te[1]);case 3:return ve.call(Fe,Te[0],Te[1],Te[2])}return ve.apply(Fe,Te)}function m0(ve,Fe,Te,rt){for(var Et=-1,fr=ve==null?0:ve.length;++Et-1}function mf(ve,Fe,Te){for(var rt=-1,Et=ve==null?0:ve.length;++rt-1;);return Te}function xf(ve,Fe){for(var Te=ve.length;Te--&&Oe(Fe,ve[Te],0)>-1;);return Te}function Gd(ve,Fe){for(var Te=ve.length,rt=0;Te--;)ve[Te]===Fe&&++rt;return rt}var Xd=ar(ff),wf=ar(ml);function Sf(ve){return"\\"+h0[ve]}function Zd(ve,Fe){return ve==null?r:ve[Fe]}function co(ve){return u0.test(ve)}function y0(ve){return l0.test(ve)}function b0(ve){for(var Fe,Te=[];!(Fe=ve.next()).done;)Te.push(Fe.value);return Te}function _f(ve){var Fe=-1,Te=Array(ve.size);return ve.forEach(function(rt,Et){Te[++Fe]=[Et,rt]}),Te}function Af(ve,Fe){return function(Te){return ve(Fe(Te))}}function fo(ve,Fe){for(var Te=-1,rt=ve.length,Et=0,fr=[];++Te-1}function Vk(d,v){var D=this.__data__,R=hp(D,d);return R<0?(++this.size,D.push([d,v])):D[R][1]=v,this}hs.prototype.clear=qk,hs.prototype.delete=Uk,hs.prototype.get=Hk,hs.prototype.has=Wk,hs.prototype.set=Vk;function ds(d){var v=-1,D=d==null?0:d.length;for(this.clear();++v=v?d:v)),d}function Wi(d,v,D,R,W,Z){var ae,fe=v&f,be=v&h,Be=v&p;if(D&&(ae=W?D(d,R,W,Z):D(d)),ae!==r)return ae;if(!zr(d))return d;var ke=Ot(d);if(ke){if(ae=X4(d),!fe)return li(d,ae)}else{var We=kn(d),Je=We==Ce||We==He;if(yo(d))return ES(d,fe);if(We==ye||We==Se||Je&&!W){if(ae=be||Je?{}:YS(d),!fe)return be?L4(d,o4(ae,d)):k4(d,nS(ae,d))}else{if(!et[We])return W?d:{};ae=Z4(d,We,fe)}}Z||(Z=new ma);var ut=Z.get(d);if(ut)return ut;Z.set(d,ae),w_(d)?d.forEach(function(yt){ae.add(Wi(yt,v,D,yt,d,Z))}):b_(d)&&d.forEach(function(yt,Vt){ae.set(Vt,Wi(yt,v,D,Vt,d,Z))});var gt=Be?be?V0:W0:be?fi:xn,qt=ke?r:gt(d);return Kn(qt||d,function(yt,Vt){qt&&(Vt=yt,yt=d[Vt]),Tf(ae,Vt,Wi(yt,v,D,Vt,d,Z))}),ae}function u4(d){var v=xn(d);return function(D){return iS(D,d,v)}}function iS(d,v,D){var R=D.length;if(d==null)return!R;for(d=Dr(d);R--;){var W=D[R],Z=v[W],ae=d[W];if(ae===r&&!(W in d)||!Z(ae))return!1}return!0}function aS(d,v,D){if(typeof d!="function")throw new Ui(s);return kf(function(){d.apply(r,D)},v)}function Of(d,v,D,R){var W=-1,Z=vl,ae=!0,fe=d.length,be=[],Be=v.length;if(!fe)return be;D&&(v=Er(v,Jn(D))),R?(Z=mf,ae=!1):v.length>=i&&(Z=cu,ae=!1,v=new du(v));e:for(;++WW?0:W+D),R=R===r||R>W?W:kt(R),R<0&&(R+=W),R=D>R?0:__(R);D0&&D(fe)?v>1?Nn(fe,v-1,D,R,W):qa(W,fe):R||(W[W.length]=fe)}return W}var N0=PS(),uS=PS(!0);function Ua(d,v){return d&&N0(d,v,xn)}function E0(d,v){return d&&uS(d,v,xn)}function pp(d,v){return za(v,function(D){return ys(d[D])})}function mu(d,v){v=vo(v,d);for(var D=0,R=v.length;d!=null&&Dv}function f4(d,v){return d!=null&&vr.call(d,v)}function h4(d,v){return d!=null&&v in Dr(d)}function d4(d,v,D){return d>=Bn(v,D)&&d=120&&ke.length>=120)?new du(ae&&ke):r}ke=d[0];var We=-1,Je=fe[0];e:for(;++We-1;)fe!==d&&ap.call(fe,be,1),ap.call(d,be,1);return d}function bS(d,v){for(var D=d?v.length:0,R=D-1;D--;){var W=v[D];if(D==R||W!==Z){var Z=W;gs(W)?ap.call(d,W,1):k0(d,W)}}return d}function R0(d,v){return d+up(Qw()*(v-d+1))}function N4(d,v,D,R){for(var W=-1,Z=ln(op((v-d)/(D||1)),0),ae=Te(Z);Z--;)ae[R?Z:++W]=d,d+=D;return ae}function I0(d,v){var D="";if(!d||v<1||v>K)return D;do v%2&&(D+=d),v=up(v/2),v&&(d+=d);while(v);return D}function Ut(d,v){return J0(XS(d,v,hi),d+"")}function E4(d){return rS(Tl(d))}function C4(d,v){var D=Tl(d);return Dp(D,pu(v,0,D.length))}function Rf(d,v,D,R){if(!zr(d))return d;v=vo(v,d);for(var W=-1,Z=v.length,ae=Z-1,fe=d;fe!=null&&++WW?0:W+v),D=D>W?W:D,D<0&&(D+=W),W=v>D?0:D-v>>>0,v>>>=0;for(var Z=Te(W);++R>>1,ae=d[Z];ae!==null&&!Ni(ae)&&(D?ae<=v:ae=i){var Be=v?null:U4(d);if(Be)return Kd(Be);ae=!1,W=cu,be=new du}else be=v?[]:fe;e:for(;++R=R?d:Vi(d,v,D)}var NS=bk||function(d){return on.clearTimeout(d)};function ES(d,v){if(v)return d.slice();var D=d.length,R=Gw?Gw(D):new d.constructor(D);return d.copy(R),R}function q0(d){var v=new d.constructor(d.byteLength);return new np(v).set(new np(d)),v}function P4(d,v){var D=v?q0(d.buffer):d.buffer;return new d.constructor(D,d.byteOffset,d.byteLength)}function R4(d){var v=new d.constructor(d.source,hl.exec(d));return v.lastIndex=d.lastIndex,v}function I4(d){return Mf?Dr(Mf.call(d)):{}}function CS(d,v){var D=v?q0(d.buffer):d.buffer;return new d.constructor(D,d.byteOffset,d.length)}function MS(d,v){if(d!==v){var D=d!==r,R=d===null,W=d===d,Z=Ni(d),ae=v!==r,fe=v===null,be=v===v,Be=Ni(v);if(!fe&&!Be&&!Z&&d>v||Z&&ae&&be&&!fe&&!Be||R&&ae&&be||!D&&be||!W)return 1;if(!R&&!Z&&!Be&&d=fe)return be;var Be=D[R];return be*(Be=="desc"?-1:1)}}return d.index-v.index}function TS(d,v,D,R){for(var W=-1,Z=d.length,ae=D.length,fe=-1,be=v.length,Be=ln(Z-ae,0),ke=Te(be+Be),We=!R;++fe1?D[W-1]:r,ae=W>2?D[2]:r;for(Z=d.length>3&&typeof Z=="function"?(W--,Z):r,ae&&ei(D[0],D[1],ae)&&(Z=W<3?r:Z,W=1),v=Dr(v);++R-1?W[Z?v[ae]:ae]:r}}function BS(d){return vs(function(v){var D=v.length,R=D,W=Hi.prototype.thru;for(d&&v.reverse();R--;){var Z=v[R];if(typeof Z!="function")throw new Ui(s);if(W&&!ae&&_p(Z)=="wrapper")var ae=new Hi([],!0)}for(R=ae?R:D;++R1&&Jt.reverse(),ke&&befe))return!1;var Be=Z.get(d),ke=Z.get(v);if(Be&&ke)return Be==v&&ke==d;var We=-1,Je=!0,ut=D&m?new du:r;for(Z.set(d,v),Z.set(v,d);++We1?"& ":"")+v[R],v=v.join(D>2?", ":" "),d.replace(Xc,`{ + */Lm.exports;(function(t,e){(function(){var r,n="4.17.21",i=200,a="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",s="Expected a function",o="Invalid `variable` option passed into `_.template`",u="__lodash_hash_undefined__",l=500,c="__lodash_placeholder__",f=1,h=2,p=4,g=1,m=2,b=1,y=2,S=4,x=8,_=16,A=32,w=64,C=128,N=256,E=512,M=30,O="...",F=800,q=16,V=1,H=2,B=3,k=1/0,K=9007199254740991,$=17976931348623157e292,se=NaN,he=4294967295,ne=he-1,X=he>>>1,de=[["ary",C],["bind",b],["bindKey",y],["curry",x],["curryRight",_],["flip",E],["partial",A],["partialRight",w],["rearg",N]],Se="[object Arguments]",ce="[object Array]",xe="[object AsyncFunction]",_e="[object Boolean]",me="[object Date]",we="[object DOMException]",Ee="[object Error]",Ce="[object Function]",He="[object GeneratorFunction]",Ue="[object Map]",J="[object Number]",te="[object Null]",ye="[object Object]",ee="[object Promise]",ue="[object Proxy]",le="[object RegExp]",Ne="[object Set]",Me="[object String]",R="[object Symbol]",U="[object Undefined]",Y="[object WeakMap]",pe="[object WeakSet]",ge="[object ArrayBuffer]",De="[object DataView]",Pe="[object Float32Array]",ke="[object Float64Array]",Ve="[object Int8Array]",ze="[object Int16Array]",vt="[object Int32Array]",St="[object Uint8Array]",at="[object Uint8ClampedArray]",mr="[object Uint16Array]",I="[object Uint32Array]",oe=/\b__p \+= '';/g,Ae=/\b(__p \+=) '' \+/g,$e=/(__e\(.*?\)|\b__t\)) \+\n'';/g,ct=/&(?:amp|lt|gt|quot|#39);/g,ht=/[&<>"']/g,Dn=RegExp(ct.source),ro=RegExp(ht.source),ll=/<%-([\s\S]+?)%>/g,cl=/<%([\s\S]+?)%>/g,nu=/<%=([\s\S]+?)%>/g,Yc=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,jc=/^\w*$/,Gc=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,La=/[\\^$.*+?()[\]{}|]/g,Xc=RegExp(La.source),no=/^\s+/,Zc=/\s/,Kc=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Jc=/\{\n\/\* \[wrapped with (.+)\] \*/,Qc=/,? & /,ef=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,tf=/[()=,{}\[\]\/\s]/,fl=/\\(\\)?/g,pa=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,hl=/\w*$/,rf=/^[-+]0x[0-9a-f]+$/i,nf=/^0b[01]+$/i,iu=/^\[object .+?Constructor\]$/,au=/^0o[0-7]+$/i,af=/^(?:0|[1-9]\d*)$/,sf=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ao=/($^)/,ls=/['\n\r\u2028\u2029\\]/g,Wt="\\ud800-\\udfff",bn="\\u0300-\\u036f",of="\\ufe20-\\ufe2f",so="\\u20d0-\\u20ff",$a=bn+of+so,dl="\\u2700-\\u27bf",qi="a-z\\xdf-\\xf6\\xf8-\\xff",Sd="\\xac\\xb1\\xd7\\xf7",cs="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",uf="\\u2000-\\u206f",t0=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",_d="A-Z\\xc0-\\xd6\\xd8-\\xde",Ad="\\ufe0e\\ufe0f",Dd=Sd+cs+uf+t0,su="['’]",r0="["+Wt+"]",Ed="["+Dd+"]",ou="["+$a+"]",uu="\\d+",lu="["+dl+"]",Nd="["+qi+"]",oo="[^"+Wt+Dd+uu+dl+qi+_d+"]",lf="\\ud83c[\\udffb-\\udfff]",n0="(?:"+ou+"|"+lf+")",Cd="[^"+Wt+"]",cf="(?:\\ud83c[\\udde6-\\uddff]){2}",ff="[\\ud800-\\udbff][\\udc00-\\udfff]",uo="["+_d+"]",Md="\\u200d",pl="(?:"+Nd+"|"+oo+")",fs="(?:"+uo+"|"+oo+")",Td="(?:"+su+"(?:d|ll|m|re|s|t|ve))?",Od="(?:"+su+"(?:D|LL|M|RE|S|T|VE))?",Fd=n0+"?",Rd="["+Ad+"]?",Pd="(?:"+Md+"(?:"+[Cd,cf,ff].join("|")+")"+Rd+Fd+")*",i0="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",kd="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Bd=Rd+Fd+Pd,a0="(?:"+[lu,cf,ff].join("|")+")"+Bd,s0="(?:"+[Cd+ou+"?",ou,cf,ff,r0].join("|")+")",o0=RegExp(su,"g"),u0=RegExp(ou,"g"),hf=RegExp(lf+"(?="+lf+")|"+s0+Bd,"g"),l0=RegExp([uo+"?"+Nd+"+"+Td+"(?="+[Ed,uo,"$"].join("|")+")",fs+"+"+Od+"(?="+[Ed,uo+pl,"$"].join("|")+")",uo+"?"+pl+"+"+Td,uo+"+"+Od,kd,i0,uu,a0].join("|"),"g"),c0=RegExp("["+Md+Wt+$a+Ad+"]"),f0=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Id=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],h0=-1,Ar={};Ar[Pe]=Ar[ke]=Ar[Ve]=Ar[ze]=Ar[vt]=Ar[St]=Ar[at]=Ar[mr]=Ar[I]=!0,Ar[Se]=Ar[ce]=Ar[ge]=Ar[_e]=Ar[De]=Ar[me]=Ar[Ee]=Ar[Ce]=Ar[Ue]=Ar[J]=Ar[ye]=Ar[le]=Ar[Ne]=Ar[Me]=Ar[Y]=!1;var et={};et[Se]=et[ce]=et[ge]=et[De]=et[_e]=et[me]=et[Pe]=et[ke]=et[Ve]=et[ze]=et[vt]=et[Ue]=et[J]=et[ye]=et[le]=et[Ne]=et[Me]=et[R]=et[St]=et[at]=et[mr]=et[I]=!0,et[Ee]=et[Ce]=et[Y]=!1;var df={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},ml={"&":"&","<":"<",">":">",'"':""","'":"'"},d0={"&":"&","<":"<",">":">",""":'"',"'":"'"},p0={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ld=parseFloat,m0=parseInt,$d=typeof ea=="object"&&ea&&ea.Object===Object&&ea,v0=typeof self=="object"&&self&&self.Object===Object&&self,on=$d||v0||Function("return this")(),pf=e&&!e.nodeType&&e,lo=pf&&!0&&t&&!t.nodeType&&t,zd=lo&&lo.exports===pf,mf=zd&&$d.process,Ai=function(){try{var ve=lo&&lo.require&&lo.require("util").types;return ve||mf&&mf.binding&&mf.binding("util")}catch{}}(),qd=Ai&&Ai.isArrayBuffer,Ud=Ai&&Ai.isDate,vf=Ai&&Ai.isMap,Hd=Ai&&Ai.isRegExp,Wd=Ai&&Ai.isSet,Vd=Ai&&Ai.isTypedArray;function Zn(ve,Fe,Te){switch(Te.length){case 0:return ve.call(Fe);case 1:return ve.call(Fe,Te[0]);case 2:return ve.call(Fe,Te[0],Te[1]);case 3:return ve.call(Fe,Te[0],Te[1],Te[2])}return ve.apply(Fe,Te)}function g0(ve,Fe,Te,rt){for(var Nt=-1,fr=ve==null?0:ve.length;++Nt-1}function gf(ve,Fe,Te){for(var rt=-1,Nt=ve==null?0:ve.length;++rt-1;);return Te}function Sf(ve,Fe){for(var Te=ve.length;Te--&&Oe(Fe,ve[Te],0)>-1;);return Te}function Gd(ve,Fe){for(var Te=ve.length,rt=0;Te--;)ve[Te]===Fe&&++rt;return rt}var Xd=ar(df),_f=ar(ml);function Af(ve){return"\\"+p0[ve]}function Zd(ve,Fe){return ve==null?r:ve[Fe]}function co(ve){return c0.test(ve)}function x0(ve){return f0.test(ve)}function w0(ve){for(var Fe,Te=[];!(Fe=ve.next()).done;)Te.push(Fe.value);return Te}function Df(ve){var Fe=-1,Te=Array(ve.size);return ve.forEach(function(rt,Nt){Te[++Fe]=[Nt,rt]}),Te}function Ef(ve,Fe){return function(Te){return ve(Fe(Te))}}function fo(ve,Fe){for(var Te=-1,rt=ve.length,Nt=0,fr=[];++Te-1}function r4(d,v){var D=this.__data__,P=hp(D,d);return P<0?(++this.size,D.push([d,v])):D[P][1]=v,this}hs.prototype.clear=JI,hs.prototype.delete=QI,hs.prototype.get=e4,hs.prototype.has=t4,hs.prototype.set=r4;function ds(d){var v=-1,D=d==null?0:d.length;for(this.clear();++v=v?d:v)),d}function Wi(d,v,D,P,W,Z){var ae,fe=v&f,be=v&h,Be=v&p;if(D&&(ae=W?D(d,P,W,Z):D(d)),ae!==r)return ae;if(!zr(d))return d;var Ie=Ot(d);if(Ie){if(ae=sL(d),!fe)return li(d,ae)}else{var We=In(d),Je=We==Ce||We==He;if(yo(d))return TS(d,fe);if(We==ye||We==Se||Je&&!W){if(ae=be||Je?{}:XS(d),!fe)return be?X4(d,y4(ae,d)):G4(d,sS(ae,d))}else{if(!et[We])return W?d:{};ae=oL(d,We,fe)}}Z||(Z=new va);var ut=Z.get(d);if(ut)return ut;Z.set(d,ae),A_(d)?d.forEach(function(yt){ae.add(Wi(yt,v,D,yt,d,Z))}):S_(d)&&d.forEach(function(yt,Vt){ae.set(Vt,Wi(yt,v,D,Vt,d,Z))});var gt=Be?be?j0:Y0:be?fi:xn,qt=Ie?r:gt(d);return Kn(qt||d,function(yt,Vt){qt&&(Vt=yt,yt=d[Vt]),Ff(ae,Vt,Wi(yt,v,D,Vt,d,Z))}),ae}function b4(d){var v=xn(d);return function(D){return oS(D,d,v)}}function oS(d,v,D){var P=D.length;if(d==null)return!P;for(d=Dr(d);P--;){var W=D[P],Z=v[W],ae=d[W];if(ae===r&&!(W in d)||!Z(ae))return!1}return!0}function uS(d,v,D){if(typeof d!="function")throw new Ui(s);return $f(function(){d.apply(r,D)},v)}function Rf(d,v,D,P){var W=-1,Z=vl,ae=!0,fe=d.length,be=[],Be=v.length;if(!fe)return be;D&&(v=Nr(v,Jn(D))),P?(Z=gf,ae=!1):v.length>=i&&(Z=cu,ae=!1,v=new du(v));e:for(;++WW?0:W+D),P=P===r||P>W?W:It(P),P<0&&(P+=W),P=D>P?0:E_(P);D0&&D(fe)?v>1?En(fe,v-1,D,P,W):qa(W,fe):P||(W[W.length]=fe)}return W}var C0=BS(),fS=BS(!0);function Ua(d,v){return d&&C0(d,v,xn)}function M0(d,v){return d&&fS(d,v,xn)}function pp(d,v){return za(v,function(D){return ys(d[D])})}function mu(d,v){v=vo(v,d);for(var D=0,P=v.length;d!=null&&Dv}function S4(d,v){return d!=null&&vr.call(d,v)}function _4(d,v){return d!=null&&v in Dr(d)}function A4(d,v,D){return d>=Bn(v,D)&&d=120&&Ie.length>=120)?new du(ae&&Ie):r}Ie=d[0];var We=-1,Je=fe[0];e:for(;++We-1;)fe!==d&&ap.call(fe,be,1),ap.call(d,be,1);return d}function SS(d,v){for(var D=d?v.length:0,P=D-1;D--;){var W=v[D];if(D==P||W!==Z){var Z=W;gs(W)?ap.call(d,W,1):$0(d,W)}}return d}function B0(d,v){return d+up(rS()*(v-d+1))}function I4(d,v,D,P){for(var W=-1,Z=ln(op((v-d)/(D||1)),0),ae=Te(Z);Z--;)ae[P?Z:++W]=d,d+=D;return ae}function I0(d,v){var D="";if(!d||v<1||v>K)return D;do v%2&&(D+=d),v=up(v/2),v&&(d+=d);while(v);return D}function Ut(d,v){return ey(JS(d,v,hi),d+"")}function L4(d){return aS(Tl(d))}function $4(d,v){var D=Tl(d);return Dp(D,pu(v,0,D.length))}function Bf(d,v,D,P){if(!zr(d))return d;v=vo(v,d);for(var W=-1,Z=v.length,ae=Z-1,fe=d;fe!=null&&++WW?0:W+v),D=D>W?W:D,D<0&&(D+=W),W=v>D?0:D-v>>>0,v>>>=0;for(var Z=Te(W);++P>>1,ae=d[Z];ae!==null&&!Ei(ae)&&(D?ae<=v:ae=i){var Be=v?null:Q4(d);if(Be)return Kd(Be);ae=!1,W=cu,be=new du}else be=v?[]:fe;e:for(;++P=P?d:Vi(d,v,D)}var MS=TI||function(d){return on.clearTimeout(d)};function TS(d,v){if(v)return d.slice();var D=d.length,P=Kw?Kw(D):new d.constructor(D);return d.copy(P),P}function H0(d){var v=new d.constructor(d.byteLength);return new np(v).set(new np(d)),v}function W4(d,v){var D=v?H0(d.buffer):d.buffer;return new d.constructor(D,d.byteOffset,d.byteLength)}function V4(d){var v=new d.constructor(d.source,hl.exec(d));return v.lastIndex=d.lastIndex,v}function Y4(d){return Of?Dr(Of.call(d)):{}}function OS(d,v){var D=v?H0(d.buffer):d.buffer;return new d.constructor(D,d.byteOffset,d.length)}function FS(d,v){if(d!==v){var D=d!==r,P=d===null,W=d===d,Z=Ei(d),ae=v!==r,fe=v===null,be=v===v,Be=Ei(v);if(!fe&&!Be&&!Z&&d>v||Z&&ae&&be&&!fe&&!Be||P&&ae&&be||!D&&be||!W)return 1;if(!P&&!Z&&!Be&&d=fe)return be;var Be=D[P];return be*(Be=="desc"?-1:1)}}return d.index-v.index}function RS(d,v,D,P){for(var W=-1,Z=d.length,ae=D.length,fe=-1,be=v.length,Be=ln(Z-ae,0),Ie=Te(be+Be),We=!P;++fe1?D[W-1]:r,ae=W>2?D[2]:r;for(Z=d.length>3&&typeof Z=="function"?(W--,Z):r,ae&&ei(D[0],D[1],ae)&&(Z=W<3?r:Z,W=1),v=Dr(v);++P-1?W[Z?v[ae]:ae]:r}}function $S(d){return vs(function(v){var D=v.length,P=D,W=Hi.prototype.thru;for(d&&v.reverse();P--;){var Z=v[P];if(typeof Z!="function")throw new Ui(s);if(W&&!ae&&_p(Z)=="wrapper")var ae=new Hi([],!0)}for(P=ae?P:D;++P1&&Jt.reverse(),Ie&&befe))return!1;var Be=Z.get(d),Ie=Z.get(v);if(Be&&Ie)return Be==v&&Ie==d;var We=-1,Je=!0,ut=D&m?new du:r;for(Z.set(d,v),Z.set(v,d);++We1?"& ":"")+v[P],v=v.join(D>2?", ":" "),d.replace(Kc,`{ /* [wrapped with `+v+`] */ -`)}function J4(d){return Ot(d)||yu(d)||!!(Kw&&d&&d[Kw])}function gs(d,v){var D=typeof d;return v=v??K,!!v&&(D=="number"||D!="symbol"&&rf.test(d))&&d>-1&&d%1==0&&d0){if(++v>=F)return arguments[0]}else v=0;return d.apply(r,arguments)}}function Dp(d,v){var D=-1,R=d.length,W=R-1;for(v=v===r?R:v;++D1?d[v-1]:r;return D=typeof D=="function"?(d.pop(),D):r,o_(d,D)});function u_(d){var v=j(d);return v.__chain__=!0,v}function l5(d,v){return v(d),d}function Np(d,v){return v(d)}var c5=vs(function(d){var v=d.length,D=v?d[0]:0,R=this.__wrapped__,W=function(Z){return D0(Z,d)};return v>1||this.__actions__.length||!(R instanceof jt)||!gs(D)?this.thru(W):(R=R.slice(D,+D+(v?1:0)),R.__actions__.push({func:Np,args:[W],thisArg:r}),new Hi(R,this.__chain__).thru(function(Z){return v&&!Z.length&&Z.push(r),Z}))});function f5(){return u_(this)}function h5(){return new Hi(this.value(),this.__chain__)}function d5(){this.__values__===r&&(this.__values__=S_(this.value()));var d=this.__index__>=this.__values__.length,v=d?r:this.__values__[this.__index__++];return{done:d,value:v}}function p5(){return this}function m5(d){for(var v,D=this;D instanceof fp;){var R=t_(D);R.__index__=0,R.__values__=r,v?W.__wrapped__=R:v=R;var W=R;D=D.__wrapped__}return W.__wrapped__=d,v}function v5(){var d=this.__wrapped__;if(d instanceof jt){var v=d;return this.__actions__.length&&(v=new jt(this)),v=v.reverse(),v.__actions__.push({func:Np,args:[Q0],thisArg:r}),new Hi(v,this.__chain__)}return this.thru(Q0)}function g5(){return AS(this.__wrapped__,this.__actions__)}var y5=yp(function(d,v,D){vr.call(d,D)?++d[D]:ps(d,D,1)});function b5(d,v,D){var R=Ot(d)?Yd:l4;return D&&ei(d,v,D)&&(v=r),R(d,pt(v,3))}function x5(d,v){var D=Ot(d)?za:oS;return D(d,pt(v,3))}var w5=IS(r_),S5=IS(n_);function _5(d,v){return Nn(Ep(d,v),1)}function A5(d,v){return Nn(Ep(d,v),I)}function D5(d,v,D){return D=D===r?1:kt(D),Nn(Ep(d,v),D)}function l_(d,v){var D=Ot(d)?Kn:po;return D(d,pt(v,3))}function c_(d,v){var D=Ot(d)?v0:sS;return D(d,pt(v,3))}var N5=yp(function(d,v,D){vr.call(d,D)?d[D].push(v):ps(d,D,[v])});function E5(d,v,D,R){d=ci(d)?d:Tl(d),D=D&&!R?kt(D):0;var W=d.length;return D<0&&(D=ln(W+D,0)),Fp(d)?D<=W&&d.indexOf(v,D)>-1:!!W&&Oe(d,v,D)>-1}var C5=Ut(function(d,v,D){var R=-1,W=typeof v=="function",Z=ci(d)?Te(d.length):[];return po(d,function(ae){Z[++R]=W?Zn(v,ae,D):Ff(ae,v,D)}),Z}),M5=yp(function(d,v,D){ps(d,D,v)});function Ep(d,v){var D=Ot(d)?Er:dS;return D(d,pt(v,3))}function T5(d,v,D,R){return d==null?[]:(Ot(v)||(v=v==null?[]:[v]),D=R?r:D,Ot(D)||(D=D==null?[]:[D]),gS(d,v,D))}var O5=yp(function(d,v,D){d[D?0:1].push(v)},function(){return[[],[]]});function F5(d,v,D){var R=Ot(d)?Zr:$r,W=arguments.length<3;return R(d,pt(v,4),D,W,po)}function P5(d,v,D){var R=Ot(d)?vf:$r,W=arguments.length<3;return R(d,pt(v,4),D,W,sS)}function R5(d,v){var D=Ot(d)?za:oS;return D(d,Tp(pt(v,3)))}function I5(d){var v=Ot(d)?rS:E4;return v(d)}function B5(d,v,D){(D?ei(d,v,D):v===r)?v=1:v=kt(v);var R=Ot(d)?i4:C4;return R(d,v)}function k5(d){var v=Ot(d)?a4:T4;return v(d)}function L5(d){if(d==null)return 0;if(ci(d))return Fp(d)?xl(d):d.length;var v=kn(d);return v==Ue||v==Ee?d.size:O0(d).length}function $5(d,v,D){var R=Ot(d)?gf:O4;return D&&ei(d,v,D)&&(v=r),R(d,pt(v,3))}var z5=Ut(function(d,v){if(d==null)return[];var D=v.length;return D>1&&ei(d,v[0],v[1])?v=[]:D>2&&ei(v[0],v[1],v[2])&&(v=[v[0]]),gS(d,Nn(v,1),[])}),Cp=xk||function(){return on.Date.now()};function q5(d,v){if(typeof v!="function")throw new Ui(s);return d=kt(d),function(){if(--d<1)return v.apply(this,arguments)}}function f_(d,v,D){return v=D?r:v,v=d&&v==null?d.length:v,ms(d,C,r,r,r,r,v)}function h_(d,v){var D;if(typeof v!="function")throw new Ui(s);return d=kt(d),function(){return--d>0&&(D=v.apply(this,arguments)),d<=1&&(v=r),D}}var ty=Ut(function(d,v,D){var R=b;if(D.length){var W=fo(D,Cl(ty));R|=A}return ms(d,R,v,D,W)}),d_=Ut(function(d,v,D){var R=b|y;if(D.length){var W=fo(D,Cl(d_));R|=A}return ms(v,R,d,D,W)});function p_(d,v,D){v=D?r:v;var R=ms(d,x,r,r,r,r,r,v);return R.placeholder=p_.placeholder,R}function m_(d,v,D){v=D?r:v;var R=ms(d,_,r,r,r,r,r,v);return R.placeholder=m_.placeholder,R}function v_(d,v,D){var R,W,Z,ae,fe,be,Be=0,ke=!1,We=!1,Je=!0;if(typeof d!="function")throw new Ui(s);v=ji(v)||0,zr(D)&&(ke=!!D.leading,We="maxWait"in D,Z=We?ln(ji(D.maxWait)||0,v):Z,Je="trailing"in D?!!D.trailing:Je);function ut(Jr){var ga=R,xs=W;return R=W=r,Be=Jr,ae=d.apply(xs,ga),ae}function gt(Jr){return Be=Jr,fe=kf(Vt,v),ke?ut(Jr):ae}function qt(Jr){var ga=Jr-be,xs=Jr-Be,I_=v-ga;return We?Bn(I_,Z-xs):I_}function yt(Jr){var ga=Jr-be,xs=Jr-Be;return be===r||ga>=v||ga<0||We&&xs>=Z}function Vt(){var Jr=Cp();if(yt(Jr))return Jt(Jr);fe=kf(Vt,qt(Jr))}function Jt(Jr){return fe=r,Je&&R?ut(Jr):(R=W=r,ae)}function Ei(){fe!==r&&NS(fe),Be=0,R=be=W=fe=r}function ti(){return fe===r?ae:Jt(Cp())}function Ci(){var Jr=Cp(),ga=yt(Jr);if(R=arguments,W=this,be=Jr,ga){if(fe===r)return gt(be);if(We)return NS(fe),fe=kf(Vt,v),ut(be)}return fe===r&&(fe=kf(Vt,v)),ae}return Ci.cancel=Ei,Ci.flush=ti,Ci}var U5=Ut(function(d,v){return aS(d,1,v)}),H5=Ut(function(d,v,D){return aS(d,ji(v)||0,D)});function W5(d){return ms(d,N)}function Mp(d,v){if(typeof d!="function"||v!=null&&typeof v!="function")throw new Ui(s);var D=function(){var R=arguments,W=v?v.apply(this,R):R[0],Z=D.cache;if(Z.has(W))return Z.get(W);var ae=d.apply(this,R);return D.cache=Z.set(W,ae)||Z,ae};return D.cache=new(Mp.Cache||ds),D}Mp.Cache=ds;function Tp(d){if(typeof d!="function")throw new Ui(s);return function(){var v=arguments;switch(v.length){case 0:return!d.call(this);case 1:return!d.call(this,v[0]);case 2:return!d.call(this,v[0],v[1]);case 3:return!d.call(this,v[0],v[1],v[2])}return!d.apply(this,v)}}function V5(d){return h_(2,d)}var Y5=F4(function(d,v){v=v.length==1&&Ot(v[0])?Er(v[0],Jn(pt())):Er(Nn(v,1),Jn(pt()));var D=v.length;return Ut(function(R){for(var W=-1,Z=Bn(R.length,D);++W=v}),yu=cS(function(){return arguments}())?cS:function(d){return Ur(d)&&vr.call(d,"callee")&&!Zw.call(d,"callee")},Ot=Te.isArray,o8=qd?Jn(qd):m4;function ci(d){return d!=null&&Op(d.length)&&!ys(d)}function Kr(d){return Ur(d)&&ci(d)}function u8(d){return d===!0||d===!1||Ur(d)&&Qn(d)==_e}var yo=Sk||dy,l8=Ud?Jn(Ud):v4;function c8(d){return Ur(d)&&d.nodeType===1&&!Lf(d)}function f8(d){if(d==null)return!0;if(ci(d)&&(Ot(d)||typeof d=="string"||typeof d.splice=="function"||yo(d)||Ml(d)||yu(d)))return!d.length;var v=kn(d);if(v==Ue||v==Ee)return!d.size;if(Bf(d))return!O0(d).length;for(var D in d)if(vr.call(d,D))return!1;return!0}function h8(d,v){return Pf(d,v)}function d8(d,v,D){D=typeof D=="function"?D:r;var R=D?D(d,v):r;return R===r?Pf(d,v,r,D):!!R}function ny(d){if(!Ur(d))return!1;var v=Qn(d);return v==Ne||v==we||typeof d.message=="string"&&typeof d.name=="string"&&!Lf(d)}function p8(d){return typeof d=="number"&&Jw(d)}function ys(d){if(!zr(d))return!1;var v=Qn(d);return v==Ce||v==He||v==xe||v==ue}function y_(d){return typeof d=="number"&&d==kt(d)}function Op(d){return typeof d=="number"&&d>-1&&d%1==0&&d<=K}function zr(d){var v=typeof d;return d!=null&&(v=="object"||v=="function")}function Ur(d){return d!=null&&typeof d=="object"}var b_=pf?Jn(pf):y4;function m8(d,v){return d===v||T0(d,v,j0(v))}function v8(d,v,D){return D=typeof D=="function"?D:r,T0(d,v,j0(v),D)}function g8(d){return x_(d)&&d!=+d}function y8(d){if(tL(d))throw new Et(a);return fS(d)}function b8(d){return d===null}function x8(d){return d==null}function x_(d){return typeof d=="number"||Ur(d)&&Qn(d)==J}function Lf(d){if(!Ur(d)||Qn(d)!=ye)return!1;var v=ip(d);if(v===null)return!0;var D=vr.call(v,"constructor")&&v.constructor;return typeof D=="function"&&D instanceof D&&ep.call(D)==vk}var iy=Hd?Jn(Hd):b4;function w8(d){return y_(d)&&d>=-K&&d<=K}var w_=Wd?Jn(Wd):x4;function Fp(d){return typeof d=="string"||!Ot(d)&&Ur(d)&&Qn(d)==Me}function Ni(d){return typeof d=="symbol"||Ur(d)&&Qn(d)==P}var Ml=Vd?Jn(Vd):w4;function S8(d){return d===r}function _8(d){return Ur(d)&&kn(d)==Y}function A8(d){return Ur(d)&&Qn(d)==pe}var D8=Sp(F0),N8=Sp(function(d,v){return d<=v});function S_(d){if(!d)return[];if(ci(d))return Fp(d)?pa(d):li(d);if(Df&&d[Df])return b0(d[Df]());var v=kn(d),D=v==Ue?_f:v==Ee?Kd:Tl;return D(d)}function bs(d){if(!d)return d===0?d:0;if(d=ji(d),d===I||d===-I){var v=d<0?-1:1;return v*$}return d===d?d:0}function kt(d){var v=bs(d),D=v%1;return v===v?D?v-D:v:0}function __(d){return d?pu(kt(d),0,he):0}function ji(d){if(typeof d=="number")return d;if(Ni(d))return se;if(zr(d)){var v=typeof d.valueOf=="function"?d.valueOf():d;d=zr(v)?v+"":v}if(typeof d!="string")return d===0?d:+d;d=bf(d);var D=tf.test(d);return D||au.test(d)?d0(d.slice(2),D?2:8):ef.test(d)?se:+d}function A_(d){return Ha(d,fi(d))}function E8(d){return d?pu(kt(d),-K,K):d===0?d:0}function dr(d){return d==null?"":Di(d)}var C8=Nl(function(d,v){if(Bf(v)||ci(v)){Ha(v,xn(v),d);return}for(var D in v)vr.call(v,D)&&Tf(d,D,v[D])}),D_=Nl(function(d,v){Ha(v,fi(v),d)}),Pp=Nl(function(d,v,D,R){Ha(v,fi(v),d,R)}),M8=Nl(function(d,v,D,R){Ha(v,xn(v),d,R)}),T8=vs(D0);function O8(d,v){var D=Dl(d);return v==null?D:nS(D,v)}var F8=Ut(function(d,v){d=Dr(d);var D=-1,R=v.length,W=R>2?v[2]:r;for(W&&ei(v[0],v[1],W)&&(R=1);++D1),Z}),Ha(d,V0(d),D),R&&(D=Wi(D,f|h|p,H4));for(var W=v.length;W--;)k0(D,v[W]);return D});function Z8(d,v){return E_(d,Tp(pt(v)))}var K8=vs(function(d,v){return d==null?{}:A4(d,v)});function E_(d,v){if(d==null)return{};var D=Er(V0(d),function(R){return[R]});return v=pt(v),yS(d,D,function(R,W){return v(R,W[0])})}function J8(d,v,D){v=vo(v,d);var R=-1,W=v.length;for(W||(W=1,d=r);++Rv){var R=d;d=v,v=R}if(D||d%1||v%1){var W=Qw();return Bn(d+W*(v-d+Ld("1e-"+((W+"").length-1))),v)}return R0(d,v)}var l6=El(function(d,v,D){return v=v.toLowerCase(),d+(D?T_(v):v)});function T_(d){return oy(dr(d).toLowerCase())}function O_(d){return d=dr(d),d&&d.replace(nf,Xd).replace(s0,"")}function c6(d,v,D){d=dr(d),v=Di(v);var R=d.length;D=D===r?R:pu(kt(D),0,R);var W=D;return D-=v.length,D>=0&&d.slice(D,W)==v}function f6(d){return d=dr(d),d&&ro.test(d)?d.replace(ht,wf):d}function h6(d){return d=dr(d),d&&jc.test(d)?d.replace(La,"\\$&"):d}var d6=El(function(d,v,D){return d+(D?"-":"")+v.toLowerCase()}),p6=El(function(d,v,D){return d+(D?" ":"")+v.toLowerCase()}),m6=RS("toLowerCase");function v6(d,v,D){d=dr(d),v=kt(v);var R=v?xl(d):0;if(!v||R>=v)return d;var W=(v-R)/2;return wp(up(W),D)+d+wp(op(W),D)}function g6(d,v,D){d=dr(d),v=kt(v);var R=v?xl(d):0;return v&&R>>0,D?(d=dr(d),d&&(typeof v=="string"||v!=null&&!iy(v))&&(v=Di(v),!v&&co(d))?go(pa(d),0,D):d.split(v,D)):[]}var A6=El(function(d,v,D){return d+(D?" ":"")+oy(v)});function D6(d,v,D){return d=dr(d),D=D==null?0:pu(kt(D),0,d.length),v=Di(v),d.slice(D,D+v.length)==v}function N6(d,v,D){var R=j.templateSettings;D&&ei(d,v,D)&&(v=r),d=dr(d),v=Pp({},v,R,qS);var W=Pp({},v.imports,R.imports,qS),Z=xn(W),ae=bl(W,Z),fe,be,Be=0,ke=v.interpolate||ao,We="__p += '",Je=x0((v.escape||ao).source+"|"+ke.source+"|"+(ke===nu?da:ao).source+"|"+(v.evaluate||ao).source+"|$","g"),ut="//# sourceURL="+(vr.call(v,"sourceURL")?(v.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++c0+"]")+` -`;d.replace(Je,function(yt,Vt,Jt,Ei,ti,Ci){return Jt||(Jt=Ei),We+=d.slice(Be,Ci).replace(ls,Sf),Vt&&(fe=!0,We+=`' + +`)}function lL(d){return Ot(d)||yu(d)||!!(eS&&d&&d[eS])}function gs(d,v){var D=typeof d;return v=v??K,!!v&&(D=="number"||D!="symbol"&&af.test(d))&&d>-1&&d%1==0&&d0){if(++v>=F)return arguments[0]}else v=0;return d.apply(r,arguments)}}function Dp(d,v){var D=-1,P=d.length,W=P-1;for(v=v===r?P:v;++D1?d[v-1]:r;return D=typeof D=="function"?(d.pop(),D):r,c_(d,D)});function f_(d){var v=j(d);return v.__chain__=!0,v}function x5(d,v){return v(d),d}function Ep(d,v){return v(d)}var w5=vs(function(d){var v=d.length,D=v?d[0]:0,P=this.__wrapped__,W=function(Z){return N0(Z,d)};return v>1||this.__actions__.length||!(P instanceof jt)||!gs(D)?this.thru(W):(P=P.slice(D,+D+(v?1:0)),P.__actions__.push({func:Ep,args:[W],thisArg:r}),new Hi(P,this.__chain__).thru(function(Z){return v&&!Z.length&&Z.push(r),Z}))});function S5(){return f_(this)}function _5(){return new Hi(this.value(),this.__chain__)}function A5(){this.__values__===r&&(this.__values__=D_(this.value()));var d=this.__index__>=this.__values__.length,v=d?r:this.__values__[this.__index__++];return{done:d,value:v}}function D5(){return this}function E5(d){for(var v,D=this;D instanceof fp;){var P=i_(D);P.__index__=0,P.__values__=r,v?W.__wrapped__=P:v=P;var W=P;D=D.__wrapped__}return W.__wrapped__=d,v}function N5(){var d=this.__wrapped__;if(d instanceof jt){var v=d;return this.__actions__.length&&(v=new jt(this)),v=v.reverse(),v.__actions__.push({func:Ep,args:[ty],thisArg:r}),new Hi(v,this.__chain__)}return this.thru(ty)}function C5(){return NS(this.__wrapped__,this.__actions__)}var M5=yp(function(d,v,D){vr.call(d,D)?++d[D]:ps(d,D,1)});function T5(d,v,D){var P=Ot(d)?Yd:x4;return D&&ei(d,v,D)&&(v=r),P(d,pt(v,3))}function O5(d,v){var D=Ot(d)?za:cS;return D(d,pt(v,3))}var F5=LS(a_),R5=LS(s_);function P5(d,v){return En(Np(d,v),1)}function k5(d,v){return En(Np(d,v),k)}function B5(d,v,D){return D=D===r?1:It(D),En(Np(d,v),D)}function h_(d,v){var D=Ot(d)?Kn:po;return D(d,pt(v,3))}function d_(d,v){var D=Ot(d)?y0:lS;return D(d,pt(v,3))}var I5=yp(function(d,v,D){vr.call(d,D)?d[D].push(v):ps(d,D,[v])});function L5(d,v,D,P){d=ci(d)?d:Tl(d),D=D&&!P?It(D):0;var W=d.length;return D<0&&(D=ln(W+D,0)),Fp(d)?D<=W&&d.indexOf(v,D)>-1:!!W&&Oe(d,v,D)>-1}var $5=Ut(function(d,v,D){var P=-1,W=typeof v=="function",Z=ci(d)?Te(d.length):[];return po(d,function(ae){Z[++P]=W?Zn(v,ae,D):Pf(ae,v,D)}),Z}),z5=yp(function(d,v,D){ps(d,D,v)});function Np(d,v){var D=Ot(d)?Nr:vS;return D(d,pt(v,3))}function q5(d,v,D,P){return d==null?[]:(Ot(v)||(v=v==null?[]:[v]),D=P?r:D,Ot(D)||(D=D==null?[]:[D]),xS(d,v,D))}var U5=yp(function(d,v,D){d[D?0:1].push(v)},function(){return[[],[]]});function H5(d,v,D){var P=Ot(d)?Zr:$r,W=arguments.length<3;return P(d,pt(v,4),D,W,po)}function W5(d,v,D){var P=Ot(d)?yf:$r,W=arguments.length<3;return P(d,pt(v,4),D,W,lS)}function V5(d,v){var D=Ot(d)?za:cS;return D(d,Tp(pt(v,3)))}function Y5(d){var v=Ot(d)?aS:L4;return v(d)}function j5(d,v,D){(D?ei(d,v,D):v===r)?v=1:v=It(v);var P=Ot(d)?m4:$4;return P(d,v)}function G5(d){var v=Ot(d)?v4:q4;return v(d)}function X5(d){if(d==null)return 0;if(ci(d))return Fp(d)?xl(d):d.length;var v=In(d);return v==Ue||v==Ne?d.size:R0(d).length}function Z5(d,v,D){var P=Ot(d)?bf:U4;return D&&ei(d,v,D)&&(v=r),P(d,pt(v,3))}var K5=Ut(function(d,v){if(d==null)return[];var D=v.length;return D>1&&ei(d,v[0],v[1])?v=[]:D>2&&ei(v[0],v[1],v[2])&&(v=[v[0]]),xS(d,En(v,1),[])}),Cp=OI||function(){return on.Date.now()};function J5(d,v){if(typeof v!="function")throw new Ui(s);return d=It(d),function(){if(--d<1)return v.apply(this,arguments)}}function p_(d,v,D){return v=D?r:v,v=d&&v==null?d.length:v,ms(d,C,r,r,r,r,v)}function m_(d,v){var D;if(typeof v!="function")throw new Ui(s);return d=It(d),function(){return--d>0&&(D=v.apply(this,arguments)),d<=1&&(v=r),D}}var ny=Ut(function(d,v,D){var P=b;if(D.length){var W=fo(D,Cl(ny));P|=A}return ms(d,P,v,D,W)}),v_=Ut(function(d,v,D){var P=b|y;if(D.length){var W=fo(D,Cl(v_));P|=A}return ms(v,P,d,D,W)});function g_(d,v,D){v=D?r:v;var P=ms(d,x,r,r,r,r,r,v);return P.placeholder=g_.placeholder,P}function y_(d,v,D){v=D?r:v;var P=ms(d,_,r,r,r,r,r,v);return P.placeholder=y_.placeholder,P}function b_(d,v,D){var P,W,Z,ae,fe,be,Be=0,Ie=!1,We=!1,Je=!0;if(typeof d!="function")throw new Ui(s);v=ji(v)||0,zr(D)&&(Ie=!!D.leading,We="maxWait"in D,Z=We?ln(ji(D.maxWait)||0,v):Z,Je="trailing"in D?!!D.trailing:Je);function ut(Jr){var ya=P,xs=W;return P=W=r,Be=Jr,ae=d.apply(xs,ya),ae}function gt(Jr){return Be=Jr,fe=$f(Vt,v),Ie?ut(Jr):ae}function qt(Jr){var ya=Jr-be,xs=Jr-Be,L_=v-ya;return We?Bn(L_,Z-xs):L_}function yt(Jr){var ya=Jr-be,xs=Jr-Be;return be===r||ya>=v||ya<0||We&&xs>=Z}function Vt(){var Jr=Cp();if(yt(Jr))return Jt(Jr);fe=$f(Vt,qt(Jr))}function Jt(Jr){return fe=r,Je&&P?ut(Jr):(P=W=r,ae)}function Ni(){fe!==r&&MS(fe),Be=0,P=be=W=fe=r}function ti(){return fe===r?ae:Jt(Cp())}function Ci(){var Jr=Cp(),ya=yt(Jr);if(P=arguments,W=this,be=Jr,ya){if(fe===r)return gt(be);if(We)return MS(fe),fe=$f(Vt,v),ut(be)}return fe===r&&(fe=$f(Vt,v)),ae}return Ci.cancel=Ni,Ci.flush=ti,Ci}var Q5=Ut(function(d,v){return uS(d,1,v)}),e8=Ut(function(d,v,D){return uS(d,ji(v)||0,D)});function t8(d){return ms(d,E)}function Mp(d,v){if(typeof d!="function"||v!=null&&typeof v!="function")throw new Ui(s);var D=function(){var P=arguments,W=v?v.apply(this,P):P[0],Z=D.cache;if(Z.has(W))return Z.get(W);var ae=d.apply(this,P);return D.cache=Z.set(W,ae)||Z,ae};return D.cache=new(Mp.Cache||ds),D}Mp.Cache=ds;function Tp(d){if(typeof d!="function")throw new Ui(s);return function(){var v=arguments;switch(v.length){case 0:return!d.call(this);case 1:return!d.call(this,v[0]);case 2:return!d.call(this,v[0],v[1]);case 3:return!d.call(this,v[0],v[1],v[2])}return!d.apply(this,v)}}function r8(d){return m_(2,d)}var n8=H4(function(d,v){v=v.length==1&&Ot(v[0])?Nr(v[0],Jn(pt())):Nr(En(v,1),Jn(pt()));var D=v.length;return Ut(function(P){for(var W=-1,Z=Bn(P.length,D);++W=v}),yu=dS(function(){return arguments}())?dS:function(d){return Ur(d)&&vr.call(d,"callee")&&!Qw.call(d,"callee")},Ot=Te.isArray,y8=qd?Jn(qd):E4;function ci(d){return d!=null&&Op(d.length)&&!ys(d)}function Kr(d){return Ur(d)&&ci(d)}function b8(d){return d===!0||d===!1||Ur(d)&&Qn(d)==_e}var yo=RI||my,x8=Ud?Jn(Ud):N4;function w8(d){return Ur(d)&&d.nodeType===1&&!zf(d)}function S8(d){if(d==null)return!0;if(ci(d)&&(Ot(d)||typeof d=="string"||typeof d.splice=="function"||yo(d)||Ml(d)||yu(d)))return!d.length;var v=In(d);if(v==Ue||v==Ne)return!d.size;if(Lf(d))return!R0(d).length;for(var D in d)if(vr.call(d,D))return!1;return!0}function _8(d,v){return kf(d,v)}function A8(d,v,D){D=typeof D=="function"?D:r;var P=D?D(d,v):r;return P===r?kf(d,v,r,D):!!P}function ay(d){if(!Ur(d))return!1;var v=Qn(d);return v==Ee||v==we||typeof d.message=="string"&&typeof d.name=="string"&&!zf(d)}function D8(d){return typeof d=="number"&&tS(d)}function ys(d){if(!zr(d))return!1;var v=Qn(d);return v==Ce||v==He||v==xe||v==ue}function w_(d){return typeof d=="number"&&d==It(d)}function Op(d){return typeof d=="number"&&d>-1&&d%1==0&&d<=K}function zr(d){var v=typeof d;return d!=null&&(v=="object"||v=="function")}function Ur(d){return d!=null&&typeof d=="object"}var S_=vf?Jn(vf):M4;function E8(d,v){return d===v||F0(d,v,X0(v))}function N8(d,v,D){return D=typeof D=="function"?D:r,F0(d,v,X0(v),D)}function C8(d){return __(d)&&d!=+d}function M8(d){if(hL(d))throw new Nt(a);return pS(d)}function T8(d){return d===null}function O8(d){return d==null}function __(d){return typeof d=="number"||Ur(d)&&Qn(d)==J}function zf(d){if(!Ur(d)||Qn(d)!=ye)return!1;var v=ip(d);if(v===null)return!0;var D=vr.call(v,"constructor")&&v.constructor;return typeof D=="function"&&D instanceof D&&ep.call(D)==NI}var sy=Hd?Jn(Hd):T4;function F8(d){return w_(d)&&d>=-K&&d<=K}var A_=Wd?Jn(Wd):O4;function Fp(d){return typeof d=="string"||!Ot(d)&&Ur(d)&&Qn(d)==Me}function Ei(d){return typeof d=="symbol"||Ur(d)&&Qn(d)==R}var Ml=Vd?Jn(Vd):F4;function R8(d){return d===r}function P8(d){return Ur(d)&&In(d)==Y}function k8(d){return Ur(d)&&Qn(d)==pe}var B8=Sp(P0),I8=Sp(function(d,v){return d<=v});function D_(d){if(!d)return[];if(ci(d))return Fp(d)?ma(d):li(d);if(Nf&&d[Nf])return w0(d[Nf]());var v=In(d),D=v==Ue?Df:v==Ne?Kd:Tl;return D(d)}function bs(d){if(!d)return d===0?d:0;if(d=ji(d),d===k||d===-k){var v=d<0?-1:1;return v*$}return d===d?d:0}function It(d){var v=bs(d),D=v%1;return v===v?D?v-D:v:0}function E_(d){return d?pu(It(d),0,he):0}function ji(d){if(typeof d=="number")return d;if(Ei(d))return se;if(zr(d)){var v=typeof d.valueOf=="function"?d.valueOf():d;d=zr(v)?v+"":v}if(typeof d!="string")return d===0?d:+d;d=wf(d);var D=nf.test(d);return D||au.test(d)?m0(d.slice(2),D?2:8):rf.test(d)?se:+d}function N_(d){return Ha(d,fi(d))}function L8(d){return d?pu(It(d),-K,K):d===0?d:0}function dr(d){return d==null?"":Di(d)}var $8=El(function(d,v){if(Lf(v)||ci(v)){Ha(v,xn(v),d);return}for(var D in v)vr.call(v,D)&&Ff(d,D,v[D])}),C_=El(function(d,v){Ha(v,fi(v),d)}),Rp=El(function(d,v,D,P){Ha(v,fi(v),d,P)}),z8=El(function(d,v,D,P){Ha(v,xn(v),d,P)}),q8=vs(N0);function U8(d,v){var D=Dl(d);return v==null?D:sS(D,v)}var H8=Ut(function(d,v){d=Dr(d);var D=-1,P=v.length,W=P>2?v[2]:r;for(W&&ei(v[0],v[1],W)&&(P=1);++D1),Z}),Ha(d,j0(d),D),P&&(D=Wi(D,f|h|p,eL));for(var W=v.length;W--;)$0(D,v[W]);return D});function o6(d,v){return T_(d,Tp(pt(v)))}var u6=vs(function(d,v){return d==null?{}:k4(d,v)});function T_(d,v){if(d==null)return{};var D=Nr(j0(d),function(P){return[P]});return v=pt(v),wS(d,D,function(P,W){return v(P,W[0])})}function l6(d,v,D){v=vo(v,d);var P=-1,W=v.length;for(W||(W=1,d=r);++Pv){var P=d;d=v,v=P}if(D||d%1||v%1){var W=rS();return Bn(d+W*(v-d+Ld("1e-"+((W+"").length-1))),v)}return B0(d,v)}var x6=Nl(function(d,v,D){return v=v.toLowerCase(),d+(D?R_(v):v)});function R_(d){return ly(dr(d).toLowerCase())}function P_(d){return d=dr(d),d&&d.replace(sf,Xd).replace(u0,"")}function w6(d,v,D){d=dr(d),v=Di(v);var P=d.length;D=D===r?P:pu(It(D),0,P);var W=D;return D-=v.length,D>=0&&d.slice(D,W)==v}function S6(d){return d=dr(d),d&&ro.test(d)?d.replace(ht,_f):d}function _6(d){return d=dr(d),d&&Xc.test(d)?d.replace(La,"\\$&"):d}var A6=Nl(function(d,v,D){return d+(D?"-":"")+v.toLowerCase()}),D6=Nl(function(d,v,D){return d+(D?" ":"")+v.toLowerCase()}),E6=IS("toLowerCase");function N6(d,v,D){d=dr(d),v=It(v);var P=v?xl(d):0;if(!v||P>=v)return d;var W=(v-P)/2;return wp(up(W),D)+d+wp(op(W),D)}function C6(d,v,D){d=dr(d),v=It(v);var P=v?xl(d):0;return v&&P>>0,D?(d=dr(d),d&&(typeof v=="string"||v!=null&&!sy(v))&&(v=Di(v),!v&&co(d))?go(ma(d),0,D):d.split(v,D)):[]}var k6=Nl(function(d,v,D){return d+(D?" ":"")+ly(v)});function B6(d,v,D){return d=dr(d),D=D==null?0:pu(It(D),0,d.length),v=Di(v),d.slice(D,D+v.length)==v}function I6(d,v,D){var P=j.templateSettings;D&&ei(d,v,D)&&(v=r),d=dr(d),v=Rp({},v,P,WS);var W=Rp({},v.imports,P.imports,WS),Z=xn(W),ae=bl(W,Z),fe,be,Be=0,Ie=v.interpolate||ao,We="__p += '",Je=S0((v.escape||ao).source+"|"+Ie.source+"|"+(Ie===nu?pa:ao).source+"|"+(v.evaluate||ao).source+"|$","g"),ut="//# sourceURL="+(vr.call(v,"sourceURL")?(v.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++h0+"]")+` +`;d.replace(Je,function(yt,Vt,Jt,Ni,ti,Ci){return Jt||(Jt=Ni),We+=d.slice(Be,Ci).replace(ls,Af),Vt&&(fe=!0,We+=`' + __e(`+Vt+`) + '`),ti&&(be=!0,We+=`'; `+ti+`; @@ -18,75 +18,75 @@ __p += '`),Jt&&(We+=`' + `;var gt=vr.call(v,"variable")&&v.variable;if(!gt)We=`with (obj) { `+We+` } -`;else if(Qc.test(gt))throw new Et(o);We=(be?We.replace(oe,""):We).replace(Ae,"$1").replace($e,"$1;"),We="function("+(gt||"obj")+`) { +`;else if(tf.test(gt))throw new Nt(o);We=(be?We.replace(oe,""):We).replace(Ae,"$1").replace($e,"$1;"),We="function("+(gt||"obj")+`) { `+(gt?"":`obj || (obj = {}); `)+"var __t, __p = ''"+(fe?", __e = _.escape":"")+(be?`, __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } `:`; `)+We+`return __p -}`;var qt=P_(function(){return fr(Z,ut+"return "+We).apply(r,ae)});if(qt.source=We,ny(qt))throw qt;return qt}function E6(d){return dr(d).toLowerCase()}function C6(d){return dr(d).toUpperCase()}function M6(d,v,D){if(d=dr(d),d&&(D||v===r))return bf(d);if(!d||!(v=Di(v)))return d;var R=pa(d),W=pa(v),Z=jd(R,W),ae=xf(R,W)+1;return go(R,Z,ae).join("")}function T6(d,v,D){if(d=dr(d),d&&(D||v===r))return d.slice(0,Yw(d)+1);if(!d||!(v=Di(v)))return d;var R=pa(d),W=xf(R,pa(v))+1;return go(R,0,W).join("")}function O6(d,v,D){if(d=dr(d),d&&(D||v===r))return d.replace(no,"");if(!d||!(v=Di(v)))return d;var R=pa(d),W=jd(R,pa(v));return go(R,W).join("")}function F6(d,v){var D=M,R=O;if(zr(v)){var W="separator"in v?v.separator:W;D="length"in v?kt(v.length):D,R="omission"in v?Di(v.omission):R}d=dr(d);var Z=d.length;if(co(d)){var ae=pa(d);Z=ae.length}if(D>=Z)return d;var fe=D-xl(R);if(fe<1)return R;var be=ae?go(ae,0,fe).join(""):d.slice(0,fe);if(W===r)return be+R;if(ae&&(fe+=be.length-fe),iy(W)){if(d.slice(fe).search(W)){var Be,ke=be;for(W.global||(W=x0(W.source,dr(hl.exec(W))+"g")),W.lastIndex=0;Be=W.exec(ke);)var We=Be.index;be=be.slice(0,We===r?fe:We)}}else if(d.indexOf(Di(W),fe)!=fe){var Je=be.lastIndexOf(W);Je>-1&&(be=be.slice(0,Je))}return be+R}function P6(d){return d=dr(d),d&&Dn.test(d)?d.replace(ct,uk):d}var R6=El(function(d,v,D){return d+(D?" ":"")+v.toUpperCase()}),oy=RS("toUpperCase");function F_(d,v,D){return d=dr(d),v=D?r:v,v===r?y0(d)?fk(d):L(d):d.match(v)||[]}var P_=Ut(function(d,v){try{return Zn(d,r,v)}catch(D){return ny(D)?D:new Et(D)}}),I6=vs(function(d,v){return Kn(v,function(D){D=Wa(D),ps(d,D,ty(d[D],d))}),d});function B6(d){var v=d==null?0:d.length,D=pt();return d=v?Er(d,function(R){if(typeof R[1]!="function")throw new Ui(s);return[D(R[0]),R[1]]}):[],Ut(function(R){for(var W=-1;++WK)return[];var D=he,R=Bn(d,he);v=pt(v),d-=he;for(var W=yl(R,v);++D0||v<0)?new jt(D):(d<0?D=D.takeRight(-d):d&&(D=D.drop(d)),v!==r&&(v=kt(v),D=v<0?D.dropRight(-v):D.take(v-d)),D)},jt.prototype.takeRightWhile=function(d){return this.reverse().takeWhile(d).reverse()},jt.prototype.toArray=function(){return this.take(he)},Ua(jt.prototype,function(d,v){var D=/^(?:filter|find|map|reject)|While$/.test(v),R=/^(?:head|last)$/.test(v),W=j[R?"take"+(v=="last"?"Right":""):v],Z=R||/^find/.test(v);W&&(j.prototype[v]=function(){var ae=this.__wrapped__,fe=R?[1]:arguments,be=ae instanceof jt,Be=fe[0],ke=be||Ot(ae),We=function(Vt){var Jt=W.apply(j,qa([Vt],fe));return R&&Je?Jt[0]:Jt};ke&&D&&typeof Be=="function"&&Be.length!=1&&(be=ke=!1);var Je=this.__chain__,ut=!!this.__actions__.length,gt=Z&&!Je,qt=be&&!ut;if(!Z&&ke){ae=qt?ae:new jt(this);var yt=d.apply(ae,fe);return yt.__actions__.push({func:Np,args:[We],thisArg:r}),new Hi(yt,Je)}return gt&&qt?d.apply(this,fe):(yt=this.thru(We),gt?R?yt.value()[0]:yt.value():yt)})}),Kn(["pop","push","shift","sort","splice","unshift"],function(d){var v=Jd[d],D=/^(?:push|sort|unshift)$/.test(d)?"tap":"thru",R=/^(?:pop|shift)$/.test(d);j.prototype[d]=function(){var W=arguments;if(R&&!this.__chain__){var Z=this.value();return v.apply(Ot(Z)?Z:[],W)}return this[D](function(ae){return v.apply(Ot(ae)?ae:[],W)})}}),Ua(jt.prototype,function(d,v){var D=j[v];if(D){var R=D.name+"";vr.call(Al,R)||(Al[R]=[]),Al[R].push({name:v,func:D})}}),Al[bp(r,y).name]=[{name:"wrapper",func:r}],jt.prototype.clone=Pk,jt.prototype.reverse=Rk,jt.prototype.value=Ik,j.prototype.at=c5,j.prototype.chain=f5,j.prototype.commit=h5,j.prototype.next=d5,j.prototype.plant=m5,j.prototype.reverse=v5,j.prototype.toJSON=j.prototype.valueOf=j.prototype.value=g5,j.prototype.first=j.prototype.head,Df&&(j.prototype[Df]=p5),j},wl=hk();lo?((lo.exports=wl)._=wl,hf._=wl):on._=wl}).call(Qi)})(Lm,Lm.exports);var dT=Lm.exports;const k9=Vu(dT),HAe=B9({__proto__:null,default:k9},[dT]);function nb(t){"@babel/helpers - typeof";return nb=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},nb(t)}function Fn(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function k_(t,e){for(var r=0;r"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function $9(t){if(t===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function z9(t,e){if(e&&(typeof e=="object"||typeof e=="function"))return e;if(e!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return $9(t)}function Bi(t){var e=L9();return function(){var n=$m(t),i;if(e){var a=$m(this).constructor;i=Reflect.construct(n,arguments,a)}else i=n.apply(this,arguments);return z9(this,i)}}var b1=function(){function t(){Fn(this,t)}return Pn(t,[{key:"listenForWhisper",value:function(r,n){return this.listen(".client-"+r,n)}},{key:"notification",value:function(r){return this.listen(".Illuminate\\Notifications\\Events\\BroadcastNotificationCreated",r)}},{key:"stopListeningForWhisper",value:function(r,n){return this.stopListening(".client-"+r,n)}}]),t}(),pT=function(){function t(e){Fn(this,t),this.namespace=e}return Pn(t,[{key:"format",value:function(r){return r.charAt(0)==="."||r.charAt(0)==="\\"?r.substr(1):(this.namespace&&(r=this.namespace+"."+r),r.replace(/\./g,"\\"))}},{key:"setNamespace",value:function(r){this.namespace=r}}]),t}(),Vv=function(t){Ii(r,t);var e=Bi(r);function r(n,i,a){var s;return Fn(this,r),s=e.call(this),s.name=i,s.pusher=n,s.options=a,s.eventFormatter=new pT(s.options.namespace),s.subscribe(),s}return Pn(r,[{key:"subscribe",value:function(){this.subscription=this.pusher.subscribe(this.name)}},{key:"unsubscribe",value:function(){this.pusher.unsubscribe(this.name)}},{key:"listen",value:function(i,a){return this.on(this.eventFormatter.format(i),a),this}},{key:"listenToAll",value:function(i){var a=this;return this.subscription.bind_global(function(s,o){if(!s.startsWith("pusher:")){var u=a.options.namespace.replace(/\./g,"\\"),l=s.startsWith(u)?s.substring(u.length+1):"."+s;i(l,o)}}),this}},{key:"stopListening",value:function(i,a){return a?this.subscription.unbind(this.eventFormatter.format(i),a):this.subscription.unbind(this.eventFormatter.format(i)),this}},{key:"stopListeningToAll",value:function(i){return i?this.subscription.unbind_global(i):this.subscription.unbind_global(),this}},{key:"subscribed",value:function(i){return this.on("pusher:subscription_succeeded",function(){i()}),this}},{key:"error",value:function(i){return this.on("pusher:subscription_error",function(a){i(a)}),this}},{key:"on",value:function(i,a){return this.subscription.bind(i,a),this}}]),r}(b1),q9=function(t){Ii(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Pn(r,[{key:"whisper",value:function(i,a){return this.pusher.channels.channels[this.name].trigger("client-".concat(i),a),this}}]),r}(Vv),U9=function(t){Ii(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Pn(r,[{key:"whisper",value:function(i,a){return this.pusher.channels.channels[this.name].trigger("client-".concat(i),a),this}}]),r}(Vv),H9=function(t){Ii(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Pn(r,[{key:"here",value:function(i){return this.on("pusher:subscription_succeeded",function(a){i(Object.keys(a.members).map(function(s){return a.members[s]}))}),this}},{key:"joining",value:function(i){return this.on("pusher:member_added",function(a){i(a.info)}),this}},{key:"whisper",value:function(i,a){return this.pusher.channels.channels[this.name].trigger("client-".concat(i),a),this}},{key:"leaving",value:function(i){return this.on("pusher:member_removed",function(a){i(a.info)}),this}}]),r}(Vv),mT=function(t){Ii(r,t);var e=Bi(r);function r(n,i,a){var s;return Fn(this,r),s=e.call(this),s.events={},s.listeners={},s.name=i,s.socket=n,s.options=a,s.eventFormatter=new pT(s.options.namespace),s.subscribe(),s}return Pn(r,[{key:"subscribe",value:function(){this.socket.emit("subscribe",{channel:this.name,auth:this.options.auth||{}})}},{key:"unsubscribe",value:function(){this.unbind(),this.socket.emit("unsubscribe",{channel:this.name,auth:this.options.auth||{}})}},{key:"listen",value:function(i,a){return this.on(this.eventFormatter.format(i),a),this}},{key:"stopListening",value:function(i,a){return this.unbindEvent(this.eventFormatter.format(i),a),this}},{key:"subscribed",value:function(i){return this.on("connect",function(a){i(a)}),this}},{key:"error",value:function(i){return this}},{key:"on",value:function(i,a){var s=this;return this.listeners[i]=this.listeners[i]||[],this.events[i]||(this.events[i]=function(o,u){s.name===o&&s.listeners[i]&&s.listeners[i].forEach(function(l){return l(u)})},this.socket.on(i,this.events[i])),this.listeners[i].push(a),this}},{key:"unbind",value:function(){var i=this;Object.keys(this.events).forEach(function(a){i.unbindEvent(a)})}},{key:"unbindEvent",value:function(i,a){this.listeners[i]=this.listeners[i]||[],a&&(this.listeners[i]=this.listeners[i].filter(function(s){return s!==a})),(!a||this.listeners[i].length===0)&&(this.events[i]&&(this.socket.removeListener(i,this.events[i]),delete this.events[i]),delete this.listeners[i])}}]),r}(b1),vT=function(t){Ii(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Pn(r,[{key:"whisper",value:function(i,a){return this.socket.emit("client event",{channel:this.name,event:"client-".concat(i),data:a}),this}}]),r}(mT),W9=function(t){Ii(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Pn(r,[{key:"here",value:function(i){return this.on("presence:subscribed",function(a){i(a.map(function(s){return s.user_info}))}),this}},{key:"joining",value:function(i){return this.on("presence:joining",function(a){return i(a.user_info)}),this}},{key:"whisper",value:function(i,a){return this.socket.emit("client event",{channel:this.name,event:"client-".concat(i),data:a}),this}},{key:"leaving",value:function(i){return this.on("presence:leaving",function(a){return i(a.user_info)}),this}}]),r}(vT),zm=function(t){Ii(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Pn(r,[{key:"subscribe",value:function(){}},{key:"unsubscribe",value:function(){}},{key:"listen",value:function(i,a){return this}},{key:"listenToAll",value:function(i){return this}},{key:"stopListening",value:function(i,a){return this}},{key:"subscribed",value:function(i){return this}},{key:"error",value:function(i){return this}},{key:"on",value:function(i,a){return this}}]),r}(b1),L_=function(t){Ii(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Pn(r,[{key:"whisper",value:function(i,a){return this}}]),r}(zm),V9=function(t){Ii(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Pn(r,[{key:"here",value:function(i){return this}},{key:"joining",value:function(i){return this}},{key:"whisper",value:function(i,a){return this}},{key:"leaving",value:function(i){return this}}]),r}(zm),x1=function(){function t(e){Fn(this,t),this._defaultOptions={auth:{headers:{}},authEndpoint:"/broadcasting/auth",userAuthentication:{endpoint:"/broadcasting/user-auth",headers:{}},broadcaster:"pusher",csrfToken:null,bearerToken:null,host:null,key:null,namespace:"App.Events"},this.setOptions(e),this.connect()}return Pn(t,[{key:"setOptions",value:function(r){this.options=ib(this._defaultOptions,r);var n=this.csrfToken();return n&&(this.options.auth.headers["X-CSRF-TOKEN"]=n,this.options.userAuthentication.headers["X-CSRF-TOKEN"]=n),n=this.options.bearerToken,n&&(this.options.auth.headers.Authorization="Bearer "+n,this.options.userAuthentication.headers.Authorization="Bearer "+n),r}},{key:"csrfToken",value:function(){var r;return typeof window<"u"&&window.Laravel&&window.Laravel.csrfToken?window.Laravel.csrfToken:this.options.csrfToken?this.options.csrfToken:typeof document<"u"&&typeof document.querySelector=="function"&&(r=document.querySelector('meta[name="csrf-token"]'))?r.getAttribute("content"):null}}]),t}(),Y9=function(t){Ii(r,t);var e=Bi(r);function r(){var n;return Fn(this,r),n=e.apply(this,arguments),n.channels={},n}return Pn(r,[{key:"connect",value:function(){typeof this.options.client<"u"?this.pusher=this.options.client:this.options.Pusher?this.pusher=new this.options.Pusher(this.options.key,this.options):this.pusher=new Pusher(this.options.key,this.options)}},{key:"signin",value:function(){this.pusher.signin()}},{key:"listen",value:function(i,a,s){return this.channel(i).listen(a,s)}},{key:"channel",value:function(i){return this.channels[i]||(this.channels[i]=new Vv(this.pusher,i,this.options)),this.channels[i]}},{key:"privateChannel",value:function(i){return this.channels["private-"+i]||(this.channels["private-"+i]=new q9(this.pusher,"private-"+i,this.options)),this.channels["private-"+i]}},{key:"encryptedPrivateChannel",value:function(i){return this.channels["private-encrypted-"+i]||(this.channels["private-encrypted-"+i]=new U9(this.pusher,"private-encrypted-"+i,this.options)),this.channels["private-encrypted-"+i]}},{key:"presenceChannel",value:function(i){return this.channels["presence-"+i]||(this.channels["presence-"+i]=new H9(this.pusher,"presence-"+i,this.options)),this.channels["presence-"+i]}},{key:"leave",value:function(i){var a=this,s=[i,"private-"+i,"private-encrypted-"+i,"presence-"+i];s.forEach(function(o,u){a.leaveChannel(o)})}},{key:"leaveChannel",value:function(i){this.channels[i]&&(this.channels[i].unsubscribe(),delete this.channels[i])}},{key:"socketId",value:function(){return this.pusher.connection.socket_id}},{key:"disconnect",value:function(){this.pusher.disconnect()}}]),r}(x1),j9=function(t){Ii(r,t);var e=Bi(r);function r(){var n;return Fn(this,r),n=e.apply(this,arguments),n.channels={},n}return Pn(r,[{key:"connect",value:function(){var i=this,a=this.getSocketIO();return this.socket=a(this.options.host,this.options),this.socket.on("reconnect",function(){Object.values(i.channels).forEach(function(s){s.subscribe()})}),this.socket}},{key:"getSocketIO",value:function(){if(typeof this.options.client<"u")return this.options.client;if(typeof io<"u")return io;throw new Error("Socket.io client not found. Should be globally available or passed via options.client")}},{key:"listen",value:function(i,a,s){return this.channel(i).listen(a,s)}},{key:"channel",value:function(i){return this.channels[i]||(this.channels[i]=new mT(this.socket,i,this.options)),this.channels[i]}},{key:"privateChannel",value:function(i){return this.channels["private-"+i]||(this.channels["private-"+i]=new vT(this.socket,"private-"+i,this.options)),this.channels["private-"+i]}},{key:"presenceChannel",value:function(i){return this.channels["presence-"+i]||(this.channels["presence-"+i]=new W9(this.socket,"presence-"+i,this.options)),this.channels["presence-"+i]}},{key:"leave",value:function(i){var a=this,s=[i,"private-"+i,"presence-"+i];s.forEach(function(o){a.leaveChannel(o)})}},{key:"leaveChannel",value:function(i){this.channels[i]&&(this.channels[i].unsubscribe(),delete this.channels[i])}},{key:"socketId",value:function(){return this.socket.id}},{key:"disconnect",value:function(){this.socket.disconnect()}}]),r}(x1),G9=function(t){Ii(r,t);var e=Bi(r);function r(){var n;return Fn(this,r),n=e.apply(this,arguments),n.channels={},n}return Pn(r,[{key:"connect",value:function(){}},{key:"listen",value:function(i,a,s){return new zm}},{key:"channel",value:function(i){return new zm}},{key:"privateChannel",value:function(i){return new L_}},{key:"encryptedPrivateChannel",value:function(i){return new L_}},{key:"presenceChannel",value:function(i){return new V9}},{key:"leave",value:function(i){}},{key:"leaveChannel",value:function(i){}},{key:"socketId",value:function(){return"fake-socket-id"}},{key:"disconnect",value:function(){}}]),r}(x1),WAe=function(){function t(e){Fn(this,t),this.options=e,this.connect(),this.options.withoutInterceptors||this.registerInterceptors()}return Pn(t,[{key:"channel",value:function(r){return this.connector.channel(r)}},{key:"connect",value:function(){this.options.broadcaster=="pusher"?this.connector=new Y9(this.options):this.options.broadcaster=="socket.io"?this.connector=new j9(this.options):this.options.broadcaster=="null"?this.connector=new G9(this.options):typeof this.options.broadcaster=="function"&&(this.connector=new this.options.broadcaster(this.options))}},{key:"disconnect",value:function(){this.connector.disconnect()}},{key:"join",value:function(r){return this.connector.presenceChannel(r)}},{key:"leave",value:function(r){this.connector.leave(r)}},{key:"leaveChannel",value:function(r){this.connector.leaveChannel(r)}},{key:"leaveAllChannels",value:function(){for(var r in this.connector.channels)this.leaveChannel(r)}},{key:"listen",value:function(r,n,i){return this.connector.listen(r,n,i)}},{key:"private",value:function(r){return this.connector.privateChannel(r)}},{key:"encryptedPrivate",value:function(r){return this.connector.encryptedPrivateChannel(r)}},{key:"socketId",value:function(){return this.connector.socketId()}},{key:"registerInterceptors",value:function(){typeof Vue=="function"&&Vue.http&&this.registerVueRequestInterceptor(),typeof axios=="function"&&this.registerAxiosRequestInterceptor(),typeof jQuery=="function"&&this.registerjQueryAjaxSetup(),(typeof Turbo>"u"?"undefined":nb(Turbo))==="object"&&this.registerTurboRequestInterceptor()}},{key:"registerVueRequestInterceptor",value:function(){var r=this;Vue.http.interceptors.push(function(n,i){r.socketId()&&n.headers.set("X-Socket-ID",r.socketId()),i()})}},{key:"registerAxiosRequestInterceptor",value:function(){var r=this;axios.interceptors.request.use(function(n){return r.socketId()&&(n.headers["X-Socket-Id"]=r.socketId()),n})}},{key:"registerjQueryAjaxSetup",value:function(){var r=this;typeof jQuery.ajax<"u"&&jQuery.ajaxPrefilter(function(n,i,a){r.socketId()&&a.setRequestHeader("X-Socket-Id",r.socketId())})}},{key:"registerTurboRequestInterceptor",value:function(){var r=this;document.addEventListener("turbo:before-fetch-request",function(n){n.detail.fetchOptions.headers["X-Socket-Id"]=r.socketId()})}}]),t}(),gT={exports:{}};/*! +}`;var qt=B_(function(){return fr(Z,ut+"return "+We).apply(r,ae)});if(qt.source=We,ay(qt))throw qt;return qt}function L6(d){return dr(d).toLowerCase()}function $6(d){return dr(d).toUpperCase()}function z6(d,v,D){if(d=dr(d),d&&(D||v===r))return wf(d);if(!d||!(v=Di(v)))return d;var P=ma(d),W=ma(v),Z=jd(P,W),ae=Sf(P,W)+1;return go(P,Z,ae).join("")}function q6(d,v,D){if(d=dr(d),d&&(D||v===r))return d.slice(0,Xw(d)+1);if(!d||!(v=Di(v)))return d;var P=ma(d),W=Sf(P,ma(v))+1;return go(P,0,W).join("")}function U6(d,v,D){if(d=dr(d),d&&(D||v===r))return d.replace(no,"");if(!d||!(v=Di(v)))return d;var P=ma(d),W=jd(P,ma(v));return go(P,W).join("")}function H6(d,v){var D=M,P=O;if(zr(v)){var W="separator"in v?v.separator:W;D="length"in v?It(v.length):D,P="omission"in v?Di(v.omission):P}d=dr(d);var Z=d.length;if(co(d)){var ae=ma(d);Z=ae.length}if(D>=Z)return d;var fe=D-xl(P);if(fe<1)return P;var be=ae?go(ae,0,fe).join(""):d.slice(0,fe);if(W===r)return be+P;if(ae&&(fe+=be.length-fe),sy(W)){if(d.slice(fe).search(W)){var Be,Ie=be;for(W.global||(W=S0(W.source,dr(hl.exec(W))+"g")),W.lastIndex=0;Be=W.exec(Ie);)var We=Be.index;be=be.slice(0,We===r?fe:We)}}else if(d.indexOf(Di(W),fe)!=fe){var Je=be.lastIndexOf(W);Je>-1&&(be=be.slice(0,Je))}return be+P}function W6(d){return d=dr(d),d&&Dn.test(d)?d.replace(ct,bI):d}var V6=Nl(function(d,v,D){return d+(D?" ":"")+v.toUpperCase()}),ly=IS("toUpperCase");function k_(d,v,D){return d=dr(d),v=D?r:v,v===r?x0(d)?SI(d):L(d):d.match(v)||[]}var B_=Ut(function(d,v){try{return Zn(d,r,v)}catch(D){return ay(D)?D:new Nt(D)}}),Y6=vs(function(d,v){return Kn(v,function(D){D=Wa(D),ps(d,D,ny(d[D],d))}),d});function j6(d){var v=d==null?0:d.length,D=pt();return d=v?Nr(d,function(P){if(typeof P[1]!="function")throw new Ui(s);return[D(P[0]),P[1]]}):[],Ut(function(P){for(var W=-1;++WK)return[];var D=he,P=Bn(d,he);v=pt(v),d-=he;for(var W=yl(P,v);++D0||v<0)?new jt(D):(d<0?D=D.takeRight(-d):d&&(D=D.drop(d)),v!==r&&(v=It(v),D=v<0?D.dropRight(-v):D.take(v-d)),D)},jt.prototype.takeRightWhile=function(d){return this.reverse().takeWhile(d).reverse()},jt.prototype.toArray=function(){return this.take(he)},Ua(jt.prototype,function(d,v){var D=/^(?:filter|find|map|reject)|While$/.test(v),P=/^(?:head|last)$/.test(v),W=j[P?"take"+(v=="last"?"Right":""):v],Z=P||/^find/.test(v);W&&(j.prototype[v]=function(){var ae=this.__wrapped__,fe=P?[1]:arguments,be=ae instanceof jt,Be=fe[0],Ie=be||Ot(ae),We=function(Vt){var Jt=W.apply(j,qa([Vt],fe));return P&&Je?Jt[0]:Jt};Ie&&D&&typeof Be=="function"&&Be.length!=1&&(be=Ie=!1);var Je=this.__chain__,ut=!!this.__actions__.length,gt=Z&&!Je,qt=be&&!ut;if(!Z&&Ie){ae=qt?ae:new jt(this);var yt=d.apply(ae,fe);return yt.__actions__.push({func:Ep,args:[We],thisArg:r}),new Hi(yt,Je)}return gt&&qt?d.apply(this,fe):(yt=this.thru(We),gt?P?yt.value()[0]:yt.value():yt)})}),Kn(["pop","push","shift","sort","splice","unshift"],function(d){var v=Jd[d],D=/^(?:push|sort|unshift)$/.test(d)?"tap":"thru",P=/^(?:pop|shift)$/.test(d);j.prototype[d]=function(){var W=arguments;if(P&&!this.__chain__){var Z=this.value();return v.apply(Ot(Z)?Z:[],W)}return this[D](function(ae){return v.apply(Ot(ae)?ae:[],W)})}}),Ua(jt.prototype,function(d,v){var D=j[v];if(D){var P=D.name+"";vr.call(Al,P)||(Al[P]=[]),Al[P].push({name:v,func:D})}}),Al[bp(r,y).name]=[{name:"wrapper",func:r}],jt.prototype.clone=WI,jt.prototype.reverse=VI,jt.prototype.value=YI,j.prototype.at=w5,j.prototype.chain=S5,j.prototype.commit=_5,j.prototype.next=A5,j.prototype.plant=E5,j.prototype.reverse=N5,j.prototype.toJSON=j.prototype.valueOf=j.prototype.value=C5,j.prototype.first=j.prototype.head,Nf&&(j.prototype[Nf]=D5),j},wl=_I();lo?((lo.exports=wl)._=wl,pf._=wl):on._=wl}).call(ea)})(Lm,Lm.exports);var gT=Lm.exports;const X9=Vu(gT),Z9=G9({__proto__:null,default:X9},[gT]);function ab(t){"@babel/helpers - typeof";return ab=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ab(t)}function Fn(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function z_(t,e){for(var r=0;r"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function J9(t){if(t===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function Q9(t,e){if(e&&(typeof e=="object"||typeof e=="function"))return e;if(e!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return J9(t)}function Bi(t){var e=K9();return function(){var n=$m(t),i;if(e){var a=$m(this).constructor;i=Reflect.construct(n,arguments,a)}else i=n.apply(this,arguments);return Q9(this,i)}}var x1=function(){function t(){Fn(this,t)}return Rn(t,[{key:"listenForWhisper",value:function(r,n){return this.listen(".client-"+r,n)}},{key:"notification",value:function(r){return this.listen(".Illuminate\\Notifications\\Events\\BroadcastNotificationCreated",r)}},{key:"stopListeningForWhisper",value:function(r,n){return this.stopListening(".client-"+r,n)}}]),t}(),yT=function(){function t(e){Fn(this,t),this.namespace=e}return Rn(t,[{key:"format",value:function(r){return r.charAt(0)==="."||r.charAt(0)==="\\"?r.substr(1):(this.namespace&&(r=this.namespace+"."+r),r.replace(/\./g,"\\"))}},{key:"setNamespace",value:function(r){this.namespace=r}}]),t}(),jv=function(t){ki(r,t);var e=Bi(r);function r(n,i,a){var s;return Fn(this,r),s=e.call(this),s.name=i,s.pusher=n,s.options=a,s.eventFormatter=new yT(s.options.namespace),s.subscribe(),s}return Rn(r,[{key:"subscribe",value:function(){this.subscription=this.pusher.subscribe(this.name)}},{key:"unsubscribe",value:function(){this.pusher.unsubscribe(this.name)}},{key:"listen",value:function(i,a){return this.on(this.eventFormatter.format(i),a),this}},{key:"listenToAll",value:function(i){var a=this;return this.subscription.bind_global(function(s,o){if(!s.startsWith("pusher:")){var u=a.options.namespace.replace(/\./g,"\\"),l=s.startsWith(u)?s.substring(u.length+1):"."+s;i(l,o)}}),this}},{key:"stopListening",value:function(i,a){return a?this.subscription.unbind(this.eventFormatter.format(i),a):this.subscription.unbind(this.eventFormatter.format(i)),this}},{key:"stopListeningToAll",value:function(i){return i?this.subscription.unbind_global(i):this.subscription.unbind_global(),this}},{key:"subscribed",value:function(i){return this.on("pusher:subscription_succeeded",function(){i()}),this}},{key:"error",value:function(i){return this.on("pusher:subscription_error",function(a){i(a)}),this}},{key:"on",value:function(i,a){return this.subscription.bind(i,a),this}}]),r}(x1),e7=function(t){ki(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Rn(r,[{key:"whisper",value:function(i,a){return this.pusher.channels.channels[this.name].trigger("client-".concat(i),a),this}}]),r}(jv),t7=function(t){ki(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Rn(r,[{key:"whisper",value:function(i,a){return this.pusher.channels.channels[this.name].trigger("client-".concat(i),a),this}}]),r}(jv),r7=function(t){ki(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Rn(r,[{key:"here",value:function(i){return this.on("pusher:subscription_succeeded",function(a){i(Object.keys(a.members).map(function(s){return a.members[s]}))}),this}},{key:"joining",value:function(i){return this.on("pusher:member_added",function(a){i(a.info)}),this}},{key:"whisper",value:function(i,a){return this.pusher.channels.channels[this.name].trigger("client-".concat(i),a),this}},{key:"leaving",value:function(i){return this.on("pusher:member_removed",function(a){i(a.info)}),this}}]),r}(jv),bT=function(t){ki(r,t);var e=Bi(r);function r(n,i,a){var s;return Fn(this,r),s=e.call(this),s.events={},s.listeners={},s.name=i,s.socket=n,s.options=a,s.eventFormatter=new yT(s.options.namespace),s.subscribe(),s}return Rn(r,[{key:"subscribe",value:function(){this.socket.emit("subscribe",{channel:this.name,auth:this.options.auth||{}})}},{key:"unsubscribe",value:function(){this.unbind(),this.socket.emit("unsubscribe",{channel:this.name,auth:this.options.auth||{}})}},{key:"listen",value:function(i,a){return this.on(this.eventFormatter.format(i),a),this}},{key:"stopListening",value:function(i,a){return this.unbindEvent(this.eventFormatter.format(i),a),this}},{key:"subscribed",value:function(i){return this.on("connect",function(a){i(a)}),this}},{key:"error",value:function(i){return this}},{key:"on",value:function(i,a){var s=this;return this.listeners[i]=this.listeners[i]||[],this.events[i]||(this.events[i]=function(o,u){s.name===o&&s.listeners[i]&&s.listeners[i].forEach(function(l){return l(u)})},this.socket.on(i,this.events[i])),this.listeners[i].push(a),this}},{key:"unbind",value:function(){var i=this;Object.keys(this.events).forEach(function(a){i.unbindEvent(a)})}},{key:"unbindEvent",value:function(i,a){this.listeners[i]=this.listeners[i]||[],a&&(this.listeners[i]=this.listeners[i].filter(function(s){return s!==a})),(!a||this.listeners[i].length===0)&&(this.events[i]&&(this.socket.removeListener(i,this.events[i]),delete this.events[i]),delete this.listeners[i])}}]),r}(x1),xT=function(t){ki(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Rn(r,[{key:"whisper",value:function(i,a){return this.socket.emit("client event",{channel:this.name,event:"client-".concat(i),data:a}),this}}]),r}(bT),n7=function(t){ki(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Rn(r,[{key:"here",value:function(i){return this.on("presence:subscribed",function(a){i(a.map(function(s){return s.user_info}))}),this}},{key:"joining",value:function(i){return this.on("presence:joining",function(a){return i(a.user_info)}),this}},{key:"whisper",value:function(i,a){return this.socket.emit("client event",{channel:this.name,event:"client-".concat(i),data:a}),this}},{key:"leaving",value:function(i){return this.on("presence:leaving",function(a){return i(a.user_info)}),this}}]),r}(xT),zm=function(t){ki(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Rn(r,[{key:"subscribe",value:function(){}},{key:"unsubscribe",value:function(){}},{key:"listen",value:function(i,a){return this}},{key:"listenToAll",value:function(i){return this}},{key:"stopListening",value:function(i,a){return this}},{key:"subscribed",value:function(i){return this}},{key:"error",value:function(i){return this}},{key:"on",value:function(i,a){return this}}]),r}(x1),q_=function(t){ki(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Rn(r,[{key:"whisper",value:function(i,a){return this}}]),r}(zm),i7=function(t){ki(r,t);var e=Bi(r);function r(){return Fn(this,r),e.apply(this,arguments)}return Rn(r,[{key:"here",value:function(i){return this}},{key:"joining",value:function(i){return this}},{key:"whisper",value:function(i,a){return this}},{key:"leaving",value:function(i){return this}}]),r}(zm),w1=function(){function t(e){Fn(this,t),this._defaultOptions={auth:{headers:{}},authEndpoint:"/broadcasting/auth",userAuthentication:{endpoint:"/broadcasting/user-auth",headers:{}},broadcaster:"pusher",csrfToken:null,bearerToken:null,host:null,key:null,namespace:"App.Events"},this.setOptions(e),this.connect()}return Rn(t,[{key:"setOptions",value:function(r){this.options=sb(this._defaultOptions,r);var n=this.csrfToken();return n&&(this.options.auth.headers["X-CSRF-TOKEN"]=n,this.options.userAuthentication.headers["X-CSRF-TOKEN"]=n),n=this.options.bearerToken,n&&(this.options.auth.headers.Authorization="Bearer "+n,this.options.userAuthentication.headers.Authorization="Bearer "+n),r}},{key:"csrfToken",value:function(){var r;return typeof window<"u"&&window.Laravel&&window.Laravel.csrfToken?window.Laravel.csrfToken:this.options.csrfToken?this.options.csrfToken:typeof document<"u"&&typeof document.querySelector=="function"&&(r=document.querySelector('meta[name="csrf-token"]'))?r.getAttribute("content"):null}}]),t}(),a7=function(t){ki(r,t);var e=Bi(r);function r(){var n;return Fn(this,r),n=e.apply(this,arguments),n.channels={},n}return Rn(r,[{key:"connect",value:function(){typeof this.options.client<"u"?this.pusher=this.options.client:this.options.Pusher?this.pusher=new this.options.Pusher(this.options.key,this.options):this.pusher=new Pusher(this.options.key,this.options)}},{key:"signin",value:function(){this.pusher.signin()}},{key:"listen",value:function(i,a,s){return this.channel(i).listen(a,s)}},{key:"channel",value:function(i){return this.channels[i]||(this.channels[i]=new jv(this.pusher,i,this.options)),this.channels[i]}},{key:"privateChannel",value:function(i){return this.channels["private-"+i]||(this.channels["private-"+i]=new e7(this.pusher,"private-"+i,this.options)),this.channels["private-"+i]}},{key:"encryptedPrivateChannel",value:function(i){return this.channels["private-encrypted-"+i]||(this.channels["private-encrypted-"+i]=new t7(this.pusher,"private-encrypted-"+i,this.options)),this.channels["private-encrypted-"+i]}},{key:"presenceChannel",value:function(i){return this.channels["presence-"+i]||(this.channels["presence-"+i]=new r7(this.pusher,"presence-"+i,this.options)),this.channels["presence-"+i]}},{key:"leave",value:function(i){var a=this,s=[i,"private-"+i,"private-encrypted-"+i,"presence-"+i];s.forEach(function(o,u){a.leaveChannel(o)})}},{key:"leaveChannel",value:function(i){this.channels[i]&&(this.channels[i].unsubscribe(),delete this.channels[i])}},{key:"socketId",value:function(){return this.pusher.connection.socket_id}},{key:"disconnect",value:function(){this.pusher.disconnect()}}]),r}(w1),s7=function(t){ki(r,t);var e=Bi(r);function r(){var n;return Fn(this,r),n=e.apply(this,arguments),n.channels={},n}return Rn(r,[{key:"connect",value:function(){var i=this,a=this.getSocketIO();return this.socket=a(this.options.host,this.options),this.socket.on("reconnect",function(){Object.values(i.channels).forEach(function(s){s.subscribe()})}),this.socket}},{key:"getSocketIO",value:function(){if(typeof this.options.client<"u")return this.options.client;if(typeof io<"u")return io;throw new Error("Socket.io client not found. Should be globally available or passed via options.client")}},{key:"listen",value:function(i,a,s){return this.channel(i).listen(a,s)}},{key:"channel",value:function(i){return this.channels[i]||(this.channels[i]=new bT(this.socket,i,this.options)),this.channels[i]}},{key:"privateChannel",value:function(i){return this.channels["private-"+i]||(this.channels["private-"+i]=new xT(this.socket,"private-"+i,this.options)),this.channels["private-"+i]}},{key:"presenceChannel",value:function(i){return this.channels["presence-"+i]||(this.channels["presence-"+i]=new n7(this.socket,"presence-"+i,this.options)),this.channels["presence-"+i]}},{key:"leave",value:function(i){var a=this,s=[i,"private-"+i,"presence-"+i];s.forEach(function(o){a.leaveChannel(o)})}},{key:"leaveChannel",value:function(i){this.channels[i]&&(this.channels[i].unsubscribe(),delete this.channels[i])}},{key:"socketId",value:function(){return this.socket.id}},{key:"disconnect",value:function(){this.socket.disconnect()}}]),r}(w1),o7=function(t){ki(r,t);var e=Bi(r);function r(){var n;return Fn(this,r),n=e.apply(this,arguments),n.channels={},n}return Rn(r,[{key:"connect",value:function(){}},{key:"listen",value:function(i,a,s){return new zm}},{key:"channel",value:function(i){return new zm}},{key:"privateChannel",value:function(i){return new q_}},{key:"encryptedPrivateChannel",value:function(i){return new q_}},{key:"presenceChannel",value:function(i){return new i7}},{key:"leave",value:function(i){}},{key:"leaveChannel",value:function(i){}},{key:"socketId",value:function(){return"fake-socket-id"}},{key:"disconnect",value:function(){}}]),r}(w1),u7=function(){function t(e){Fn(this,t),this.options=e,this.connect(),this.options.withoutInterceptors||this.registerInterceptors()}return Rn(t,[{key:"channel",value:function(r){return this.connector.channel(r)}},{key:"connect",value:function(){this.options.broadcaster=="pusher"?this.connector=new a7(this.options):this.options.broadcaster=="socket.io"?this.connector=new s7(this.options):this.options.broadcaster=="null"?this.connector=new o7(this.options):typeof this.options.broadcaster=="function"&&(this.connector=new this.options.broadcaster(this.options))}},{key:"disconnect",value:function(){this.connector.disconnect()}},{key:"join",value:function(r){return this.connector.presenceChannel(r)}},{key:"leave",value:function(r){this.connector.leave(r)}},{key:"leaveChannel",value:function(r){this.connector.leaveChannel(r)}},{key:"leaveAllChannels",value:function(){for(var r in this.connector.channels)this.leaveChannel(r)}},{key:"listen",value:function(r,n,i){return this.connector.listen(r,n,i)}},{key:"private",value:function(r){return this.connector.privateChannel(r)}},{key:"encryptedPrivate",value:function(r){return this.connector.encryptedPrivateChannel(r)}},{key:"socketId",value:function(){return this.connector.socketId()}},{key:"registerInterceptors",value:function(){typeof Vue=="function"&&Vue.http&&this.registerVueRequestInterceptor(),typeof axios=="function"&&this.registerAxiosRequestInterceptor(),typeof jQuery=="function"&&this.registerjQueryAjaxSetup(),(typeof Turbo>"u"?"undefined":ab(Turbo))==="object"&&this.registerTurboRequestInterceptor()}},{key:"registerVueRequestInterceptor",value:function(){var r=this;Vue.http.interceptors.push(function(n,i){r.socketId()&&n.headers.set("X-Socket-ID",r.socketId()),i()})}},{key:"registerAxiosRequestInterceptor",value:function(){var r=this;axios.interceptors.request.use(function(n){return r.socketId()&&(n.headers["X-Socket-Id"]=r.socketId()),n})}},{key:"registerjQueryAjaxSetup",value:function(){var r=this;typeof jQuery.ajax<"u"&&jQuery.ajaxPrefilter(function(n,i,a){r.socketId()&&a.setRequestHeader("X-Socket-Id",r.socketId())})}},{key:"registerTurboRequestInterceptor",value:function(){var r=this;document.addEventListener("turbo:before-fetch-request",function(n){n.detail.fetchOptions.headers["X-Socket-Id"]=r.socketId()})}}]),t}(),wT={exports:{}};/*! * Pusher JavaScript Library v8.4.0-rc2 * https://pusher.com/ * * Copyright 2020, Pusher * Released under the MIT licence. - */(function(t,e){(function(n,i){t.exports=i()})(window,function(){return function(r){var n={};function i(a){if(n[a])return n[a].exports;var s=n[a]={i:a,l:!1,exports:{}};return r[a].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=r,i.c=n,i.d=function(a,s,o){i.o(a,s)||Object.defineProperty(a,s,{enumerable:!0,get:o})},i.r=function(a){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})},i.t=function(a,s){if(s&1&&(a=i(a)),s&8||s&4&&typeof a=="object"&&a&&a.__esModule)return a;var o=Object.create(null);if(i.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:a}),s&2&&typeof a!="string")for(var u in a)i.d(o,u,(function(l){return a[l]}).bind(null,u));return o},i.n=function(a){var s=a&&a.__esModule?function(){return a.default}:function(){return a};return i.d(s,"a",s),s},i.o=function(a,s){return Object.prototype.hasOwnProperty.call(a,s)},i.p="",i(i.s=2)}([function(r,n,i){var a=this&&this.__extends||function(){var m=function(b,y){return m=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(S,x){S.__proto__=x}||function(S,x){for(var _ in x)x.hasOwnProperty(_)&&(S[_]=x[_])},m(b,y)};return function(b,y){m(b,y);function S(){this.constructor=b}b.prototype=y===null?Object.create(y):(S.prototype=y.prototype,new S)}}();Object.defineProperty(n,"__esModule",{value:!0});var s=256,o=function(){function m(b){b===void 0&&(b="="),this._paddingCharacter=b}return m.prototype.encodedLength=function(b){return this._paddingCharacter?(b+2)/3*4|0:(b*8+5)/6|0},m.prototype.encode=function(b){for(var y="",S=0;S>>3*6&63),y+=this._encodeByte(x>>>2*6&63),y+=this._encodeByte(x>>>1*6&63),y+=this._encodeByte(x>>>0*6&63)}var _=b.length-S;if(_>0){var x=b[S]<<16|(_===2?b[S+1]<<8:0);y+=this._encodeByte(x>>>3*6&63),y+=this._encodeByte(x>>>2*6&63),_===2?y+=this._encodeByte(x>>>1*6&63):y+=this._paddingCharacter||"",y+=this._paddingCharacter||""}return y},m.prototype.maxDecodedLength=function(b){return this._paddingCharacter?b/4*3|0:(b*6+7)/8|0},m.prototype.decodedLength=function(b){return this.maxDecodedLength(b.length-this._getPaddingLength(b))},m.prototype.decode=function(b){if(b.length===0)return new Uint8Array(0);for(var y=this._getPaddingLength(b),S=b.length-y,x=new Uint8Array(this.maxDecodedLength(S)),_=0,A=0,w=0,C=0,E=0,N=0,M=0;A>>4,x[_++]=E<<4|N>>>2,x[_++]=N<<6|M,w|=C&s,w|=E&s,w|=N&s,w|=M&s;if(A>>4,w|=C&s,w|=E&s),A>>2,w|=N&s),A>>8&6,y+=51-b>>>8&-75,y+=61-b>>>8&-15,y+=62-b>>>8&3,String.fromCharCode(y)},m.prototype._decodeChar=function(b){var y=s;return y+=(42-b&b-44)>>>8&-s+b-43+62,y+=(46-b&b-48)>>>8&-s+b-47+63,y+=(47-b&b-58)>>>8&-s+b-48+52,y+=(64-b&b-91)>>>8&-s+b-65+0,y+=(96-b&b-123)>>>8&-s+b-97+26,y},m.prototype._getPaddingLength=function(b){var y=0;if(this._paddingCharacter){for(var S=b.length-1;S>=0&&b[S]===this._paddingCharacter;S--)y++;if(b.length<4||y>2)throw new Error("Base64Coder: incorrect padding")}return y},m}();n.Coder=o;var u=new o;function l(m){return u.encode(m)}n.encode=l;function c(m){return u.decode(m)}n.decode=c;var f=function(m){a(b,m);function b(){return m!==null&&m.apply(this,arguments)||this}return b.prototype._encodeByte=function(y){var S=y;return S+=65,S+=25-y>>>8&6,S+=51-y>>>8&-75,S+=61-y>>>8&-13,S+=62-y>>>8&49,String.fromCharCode(S)},b.prototype._decodeChar=function(y){var S=s;return S+=(44-y&y-46)>>>8&-s+y-45+62,S+=(94-y&y-96)>>>8&-s+y-95+63,S+=(47-y&y-58)>>>8&-s+y-48+52,S+=(64-y&y-91)>>>8&-s+y-65+0,S+=(96-y&y-123)>>>8&-s+y-97+26,S},b}(o);n.URLSafeCoder=f;var h=new f;function p(m){return h.encode(m)}n.encodeURLSafe=p;function g(m){return h.decode(m)}n.decodeURLSafe=g,n.encodedLength=function(m){return u.encodedLength(m)},n.maxDecodedLength=function(m){return u.maxDecodedLength(m)},n.decodedLength=function(m){return u.decodedLength(m)}},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0});var a="utf8: invalid string",s="utf8: invalid source encoding";function o(c){for(var f=new Uint8Array(u(c)),h=0,p=0;p>6,f[h++]=128|g&63):g<55296?(f[h++]=224|g>>12,f[h++]=128|g>>6&63,f[h++]=128|g&63):(p++,g=(g&1023)<<10,g|=c.charCodeAt(p)&1023,g+=65536,f[h++]=240|g>>18,f[h++]=128|g>>12&63,f[h++]=128|g>>6&63,f[h++]=128|g&63)}return f}n.encode=o;function u(c){for(var f=0,h=0;h=c.length-1)throw new Error(a);h++,f+=4}else throw new Error(a)}return f}n.encodedLength=u;function l(c){for(var f=[],h=0;h=c.length)throw new Error(s);var m=c[++h];if((m&192)!==128)throw new Error(s);p=(p&31)<<6|m&63,g=128}else if(p<240){if(h>=c.length-1)throw new Error(s);var m=c[++h],b=c[++h];if((m&192)!==128||(b&192)!==128)throw new Error(s);p=(p&15)<<12|(m&63)<<6|b&63,g=2048}else if(p<248){if(h>=c.length-2)throw new Error(s);var m=c[++h],b=c[++h],y=c[++h];if((m&192)!==128||(b&192)!==128||(y&192)!==128)throw new Error(s);p=(p&15)<<18|(m&63)<<12|(b&63)<<6|y&63,g=65536}else throw new Error(s);if(p=55296&&p<=57343)throw new Error(s);if(p>=65536){if(p>1114111)throw new Error(s);p-=65536,f.push(String.fromCharCode(55296|p>>10)),p=56320|p&1023}}f.push(String.fromCharCode(p))}return f.join("")}n.decode=l},function(r,n,i){r.exports=i(3).default},function(r,n,i){i.r(n);class a{constructor(T,L){this.lastId=0,this.prefix=T,this.name=L}create(T){this.lastId++;var L=this.lastId,Q=this.prefix+L,ie=this.name+"["+L+"]",Oe=!1,Ze=function(){Oe||(T.apply(null,arguments),Oe=!0)};return this[L]=Ze,{number:L,id:Q,name:ie,callback:Ze}}remove(T){delete this[T.number]}}var s=new a("_pusher_script_","Pusher.ScriptReceivers"),o={VERSION:"8.4.0-rc2",PROTOCOL:7,wsPort:80,wssPort:443,wsPath:"",httpHost:"sockjs.pusher.com",httpPort:80,httpsPort:443,httpPath:"/pusher",stats_host:"stats.pusher.com",authEndpoint:"/pusher/auth",authTransport:"ajax",activityTimeout:12e4,pongTimeout:3e4,unavailableTimeout:1e4,userAuthentication:{endpoint:"/pusher/user-auth",transport:"ajax"},channelAuthorization:{endpoint:"/pusher/auth",transport:"ajax"},cdn_http:"http://js.pusher.com",cdn_https:"https://js.pusher.com",dependency_suffix:""},u=o;class l{constructor(T){this.options=T,this.receivers=T.receivers||s,this.loading={}}load(T,L,Q){var ie=this;if(ie.loading[T]&&ie.loading[T].length>0)ie.loading[T].push(Q);else{ie.loading[T]=[Q];var Oe=et.createScriptRequest(ie.getPath(T,L)),Ze=ie.receivers.create(function(st){if(ie.receivers.remove(Ze),ie.loading[T]){var _t=ie.loading[T];delete ie.loading[T];for(var Yt=function($r){$r||Oe.cleanup()},ar=0;ar<_t.length;ar++)_t[ar](st,Yt)}});Oe.send(Ze)}}getRoot(T){var L,Q=et.getDocument().location.protocol;return T&&T.useTLS||Q==="https:"?L=this.options.cdn_https:L=this.options.cdn_http,L.replace(/\/*$/,"")+"/"+this.options.version}getPath(T,L){return this.getRoot(L)+"/"+T+this.options.suffix+".js"}}var c=new a("_pusher_dependencies","Pusher.DependenciesReceivers"),f=new l({cdn_http:u.cdn_http,cdn_https:u.cdn_https,version:u.VERSION,suffix:u.dependency_suffix,receivers:c});const h={baseUrl:"https://pusher.com",urls:{authenticationEndpoint:{path:"/docs/channels/server_api/authenticating_users"},authorizationEndpoint:{path:"/docs/channels/server_api/authorizing-users/"},javascriptQuickStart:{path:"/docs/javascript_quick_start"},triggeringClientEvents:{path:"/docs/client_api_guide/client_events#trigger-events"},encryptedChannelSupport:{fullUrl:"https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support"}}};var g={buildLogSuffix:function(z){const T="See:",L=h.urls[z];if(!L)return"";let Q;return L.fullUrl?Q=L.fullUrl:L.path&&(Q=h.baseUrl+L.path),Q?`${T} ${Q}`:""}},m;(function(z){z.UserAuthentication="user-authentication",z.ChannelAuthorization="channel-authorization"})(m||(m={}));class b extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class y extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class S extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class x extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class _ extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class A extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class w extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class C extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class E extends Error{constructor(T,L){super(L),this.status=T,Object.setPrototypeOf(this,new.target.prototype)}}var M=function(z,T,L,Q,ie){const Oe=et.createXHR();Oe.open("POST",L.endpoint,!0),Oe.setRequestHeader("Content-Type","application/x-www-form-urlencoded");for(var Ze in L.headers)Oe.setRequestHeader(Ze,L.headers[Ze]);if(L.headersProvider!=null){let st=L.headersProvider();for(var Ze in st)Oe.setRequestHeader(Ze,st[Ze])}return Oe.onreadystatechange=function(){if(Oe.readyState===4)if(Oe.status===200){let st,_t=!1;try{st=JSON.parse(Oe.responseText),_t=!0}catch{ie(new E(200,`JSON returned from ${Q.toString()} endpoint was invalid, yet status code was 200. Data was: ${Oe.responseText}`),null)}_t&&ie(null,st)}else{let st="";switch(Q){case m.UserAuthentication:st=g.buildLogSuffix("authenticationEndpoint");break;case m.ChannelAuthorization:st=`Clients must be authorized to join private or presence channels. ${g.buildLogSuffix("authorizationEndpoint")}`;break}ie(new E(Oe.status,`Unable to retrieve auth string from ${Q.toString()} endpoint - received status: ${Oe.status} from ${L.endpoint}. ${st}`),null)}},Oe.send(T),Oe};function O(z){return I(H(z))}var F=String.fromCharCode,q="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",V=function(z){var T=z.charCodeAt(0);return T<128?z:T<2048?F(192|T>>>6)+F(128|T&63):F(224|T>>>12&15)+F(128|T>>>6&63)+F(128|T&63)},H=function(z){return z.replace(/[^\x00-\x7F]/g,V)},B=function(z){var T=[0,2,1][z.length%3],L=z.charCodeAt(0)<<16|(z.length>1?z.charCodeAt(1):0)<<8|(z.length>2?z.charCodeAt(2):0),Q=[q.charAt(L>>>18),q.charAt(L>>>12&63),T>=2?"=":q.charAt(L>>>6&63),T>=1?"=":q.charAt(L&63)];return Q.join("")},I=window.btoa||function(z){return z.replace(/[\s\S]{1,3}/g,B)};class K{constructor(T,L,Q,ie){this.clear=L,this.timer=T(()=>{this.timer&&(this.timer=ie(this.timer))},Q)}isRunning(){return this.timer!==null}ensureAborted(){this.timer&&(this.clear(this.timer),this.timer=null)}}var $=K;function se(z){window.clearTimeout(z)}function he(z){window.clearInterval(z)}class ne extends ${constructor(T,L){super(setTimeout,se,T,function(Q){return L(),null})}}class X extends ${constructor(T,L){super(setInterval,he,T,function(Q){return L(),Q})}}var de={now(){return Date.now?Date.now():new Date().valueOf()},defer(z){return new ne(0,z)},method(z,...T){var L=Array.prototype.slice.call(arguments,1);return function(Q){return Q[z].apply(Q,L.concat(arguments))}}},Se=de;function ce(z,...T){for(var L=0;L{window.console&&window.console.log&&window.console.log(T)}}debug(...T){this.log(this.globalLog,T)}warn(...T){this.log(this.globalLogWarn,T)}error(...T){this.log(this.globalLogError,T)}globalLogWarn(T){window.console&&window.console.warn?window.console.warn(T):this.globalLog(T)}globalLogError(T){window.console&&window.console.error?window.console.error(T):this.globalLogWarn(T)}log(T,...L){var Q=xe.apply(this,arguments);vf.log?vf.log(Q):vf.logToConsole&&T.bind(this)(Q)}}var Y=new U,pe=function(z,T,L,Q,ie){(L.headers!==void 0||L.headersProvider!=null)&&Y.warn(`To send headers with the ${Q.toString()} request, you must use AJAX, rather than JSONP.`);var Oe=z.nextAuthCallbackID.toString();z.nextAuthCallbackID++;var Ze=z.getDocument(),st=Ze.createElement("script");z.auth_callbacks[Oe]=function(ar){ie(null,ar)};var _t="Pusher.auth_callbacks['"+Oe+"']";st.src=L.endpoint+"?callback="+encodeURIComponent(_t)+"&"+T;var Yt=Ze.getElementsByTagName("head")[0]||Ze.documentElement;Yt.insertBefore(st,Yt.firstChild)},ge=pe;class De{constructor(T){this.src=T}send(T){var L=this,Q="Error loading "+L.src;L.script=document.createElement("script"),L.script.id=T.id,L.script.src=L.src,L.script.type="text/javascript",L.script.charset="UTF-8",L.script.addEventListener?(L.script.onerror=function(){T.callback(Q)},L.script.onload=function(){T.callback(null)}):L.script.onreadystatechange=function(){(L.script.readyState==="loaded"||L.script.readyState==="complete")&&T.callback(null)},L.script.async===void 0&&document.attachEvent&&/opera/i.test(navigator.userAgent)?(L.errorScript=document.createElement("script"),L.errorScript.id=T.id+"_error",L.errorScript.text=T.name+"('"+Q+"');",L.script.async=L.errorScript.async=!1):L.script.async=!0;var ie=document.getElementsByTagName("head")[0];ie.insertBefore(L.script,ie.firstChild),L.errorScript&&ie.insertBefore(L.errorScript,L.script.nextSibling)}cleanup(){this.script&&(this.script.onload=this.script.onerror=null,this.script.onreadystatechange=null),this.script&&this.script.parentNode&&this.script.parentNode.removeChild(this.script),this.errorScript&&this.errorScript.parentNode&&this.errorScript.parentNode.removeChild(this.errorScript),this.script=null,this.errorScript=null}}class Re{constructor(T,L){this.url=T,this.data=L}send(T){if(!this.request){var L=Ee(this.data),Q=this.url+"/"+T.number+"?"+L;this.request=et.createScriptRequest(Q),this.request.send(T)}}cleanup(){this.request&&this.request.cleanup()}}var Ie=function(z,T){return function(L,Q){var ie="http"+(T?"s":"")+"://",Oe=ie+(z.host||z.options.host)+z.options.path,Ze=et.createJSONPRequest(Oe,L),st=et.ScriptReceivers.create(function(_t,Yt){s.remove(st),Ze.cleanup(),Yt&&Yt.host&&(z.host=Yt.host),Q&&Q(_t,Yt)});Ze.send(st)}},Ve={name:"jsonp",getAgent:Ie},ze=Ve;function vt(z,T,L){var Q=z+(T.useTLS?"s":""),ie=T.useTLS?T.hostTLS:T.hostNonTLS;return Q+"://"+ie+L}function St(z,T){var L="/app/"+z,Q="?protocol="+u.PROTOCOL+"&client=js&version="+u.VERSION+(T?"&"+T:"");return L+Q}var at={getInitial:function(z,T){var L=(T.httpPath||"")+St(z,"flash=false");return vt("ws",T,L)}},mr={getInitial:function(z,T){var L=(T.httpPath||"/pusher")+St(z);return vt("http",T,L)}},k={getInitial:function(z,T){return vt("http",T,T.httpPath||"/pusher")},getPath:function(z,T){return St(z)}};class oe{constructor(){this._callbacks={}}get(T){return this._callbacks[Ae(T)]}add(T,L,Q){var ie=Ae(T);this._callbacks[ie]=this._callbacks[ie]||[],this._callbacks[ie].push({fn:L,context:Q})}remove(T,L,Q){if(!T&&!L&&!Q){this._callbacks={};return}var ie=T?[Ae(T)]:we(this._callbacks);L||Q?this.removeCallback(ie,L,Q):this.removeAllCallbacks(ie)}removeCallback(T,L,Q){Ce(T,function(ie){this._callbacks[ie]=J(this._callbacks[ie]||[],function(Oe){return L&&L!==Oe.fn||Q&&Q!==Oe.context}),this._callbacks[ie].length===0&&delete this._callbacks[ie]},this)}removeAllCallbacks(T){Ce(T,function(L){delete this._callbacks[L]},this)}}function Ae(z){return"_"+z}class $e{constructor(T){this.callbacks=new oe,this.global_callbacks=[],this.failThrough=T}bind(T,L,Q){return this.callbacks.add(T,L,Q),this}bind_global(T){return this.global_callbacks.push(T),this}unbind(T,L,Q){return this.callbacks.remove(T,L,Q),this}unbind_global(T){return T?(this.global_callbacks=J(this.global_callbacks||[],L=>L!==T),this):(this.global_callbacks=[],this)}unbind_all(){return this.unbind(),this.unbind_global(),this}emit(T,L,Q){for(var ie=0;ie0)for(var ie=0;ie{this.onError(L),this.changeState("closed")}),!1}return this.bindListeners(),Y.debug("Connecting",{transport:this.name,url:T}),this.changeState("connecting"),!0}close(){return this.socket?(this.socket.close(),!0):!1}send(T){return this.state==="open"?(Se.defer(()=>{this.socket&&this.socket.send(T)}),!0):!1}ping(){this.state==="open"&&this.supportsPing()&&this.socket.ping()}onOpen(){this.hooks.beforeOpen&&this.hooks.beforeOpen(this.socket,this.hooks.urls.getPath(this.key,this.options)),this.changeState("open"),this.socket.onopen=void 0}onError(T){this.emit("error",{type:"WebSocketError",error:T}),this.timeline.error(this.buildTimelineMessage({error:T.toString()}))}onClose(T){T?this.changeState("closed",{code:T.code,reason:T.reason,wasClean:T.wasClean}):this.changeState("closed"),this.unbindListeners(),this.socket=void 0}onMessage(T){this.emit("message",T)}onActivity(){this.emit("activity")}bindListeners(){this.socket.onopen=()=>{this.onOpen()},this.socket.onerror=T=>{this.onError(T)},this.socket.onclose=T=>{this.onClose(T)},this.socket.onmessage=T=>{this.onMessage(T)},this.supportsPing()&&(this.socket.onactivity=()=>{this.onActivity()})}unbindListeners(){this.socket&&(this.socket.onopen=void 0,this.socket.onerror=void 0,this.socket.onclose=void 0,this.socket.onmessage=void 0,this.supportsPing()&&(this.socket.onactivity=void 0))}changeState(T,L){this.state=T,this.timeline.info(this.buildTimelineMessage({state:T,params:L})),this.emit(T,L)}buildTimelineMessage(T){return ce({cid:this.id},T)}}class ht{constructor(T){this.hooks=T}isSupported(T){return this.hooks.isSupported(T)}createConnection(T,L,Q,ie){return new ct(this.hooks,T,L,Q,ie)}}var Dn=new ht({urls:at,handlesActivityChecks:!1,supportsPing:!1,isInitialized:function(){return!!et.getWebSocketAPI()},isSupported:function(){return!!et.getWebSocketAPI()},getSocket:function(z){return et.createWebSocket(z)}}),ro={urls:mr,handlesActivityChecks:!1,supportsPing:!0,isInitialized:function(){return!0}},ll=ce({getSocket:function(z){return et.HTTPFactory.createStreamingSocket(z)}},ro),cl=ce({getSocket:function(z){return et.HTTPFactory.createPollingSocket(z)}},ro),nu={isSupported:function(){return et.isXHRSupported()}},Wc=new ht(ce({},ll,nu)),Vc=new ht(ce({},cl,nu)),Yc={ws:Dn,xhr_streaming:Wc,xhr_polling:Vc},La=Yc,jc=new ht({file:"sockjs",urls:k,handlesActivityChecks:!0,supportsPing:!1,isSupported:function(){return!0},isInitialized:function(){return window.SockJS!==void 0},getSocket:function(z,T){return new window.SockJS(z,null,{js_path:f.getPath("sockjs",{useTLS:T.useTLS}),ignore_null_origin:T.ignoreNullOrigin})},beforeOpen:function(z,T){z.send(JSON.stringify({path:T}))}}),no={isSupported:function(z){var T=et.isXDRSupported(z.useTLS);return T}},Gc=new ht(ce({},ll,no)),Xc=new ht(ce({},cl,no));La.xdr_streaming=Gc,La.xdr_polling=Xc,La.sockjs=jc;var Zc=La;class Kc extends $e{constructor(){super();var T=this;window.addEventListener!==void 0&&(window.addEventListener("online",function(){T.emit("online")},!1),window.addEventListener("offline",function(){T.emit("offline")},!1))}isOnline(){return window.navigator.onLine===void 0?!0:window.navigator.onLine}}var Jc=new Kc;class Qc{constructor(T,L,Q){this.manager=T,this.transport=L,this.minPingDelay=Q.minPingDelay,this.maxPingDelay=Q.maxPingDelay,this.pingDelay=void 0}createConnection(T,L,Q,ie){ie=ce({},ie,{activityTimeout:this.pingDelay});var Oe=this.transport.createConnection(T,L,Q,ie),Ze=null,st=function(){Oe.unbind("open",st),Oe.bind("closed",_t),Ze=Se.now()},_t=Yt=>{if(Oe.unbind("closed",_t),Yt.code===1002||Yt.code===1003)this.manager.reportDeath();else if(!Yt.wasClean&&Ze){var ar=Se.now()-Ze;ar<2*this.maxPingDelay&&(this.manager.reportDeath(),this.pingDelay=Math.max(ar/2,this.minPingDelay))}};return Oe.bind("open",st),Oe}isSupported(T){return this.manager.isAlive()&&this.transport.isSupported(T)}}const fl={decodeMessage:function(z){try{var T=JSON.parse(z.data),L=T.data;if(typeof L=="string")try{L=JSON.parse(T.data)}catch{}var Q={event:T.event,channel:T.channel,data:L};return T.user_id&&(Q.user_id=T.user_id),Q}catch(ie){throw{type:"MessageParseError",error:ie,data:z.data}}},encodeMessage:function(z){return JSON.stringify(z)},processHandshake:function(z){var T=fl.decodeMessage(z);if(T.event==="pusher:connection_established"){if(!T.data.activity_timeout)throw"No activity timeout specified in handshake";return{action:"connected",id:T.data.socket_id,activityTimeout:T.data.activity_timeout*1e3}}else{if(T.event==="pusher:error")return{action:this.getCloseAction(T.data),error:this.getCloseError(T.data)};throw"Invalid handshake"}},getCloseAction:function(z){return z.code<4e3?z.code>=1002&&z.code<=1004?"backoff":null:z.code===4e3?"tls_only":z.code<4100?"refused":z.code<4200?"backoff":z.code<4300?"retry":"refused"},getCloseError:function(z){return z.code!==1e3&&z.code!==1001?{type:"PusherError",data:{code:z.code,message:z.reason||z.message}}:null}};var da=fl;class hl extends $e{constructor(T,L){super(),this.id=T,this.transport=L,this.activityTimeout=L.activityTimeout,this.bindListeners()}handlesActivityChecks(){return this.transport.handlesActivityChecks()}send(T){return this.transport.send(T)}send_event(T,L,Q){var ie={event:T,data:L};return Q&&(ie.channel=Q),Y.debug("Event sent",ie),this.send(da.encodeMessage(ie))}ping(){this.transport.supportsPing()?this.transport.ping():this.send_event("pusher:ping",{})}close(){this.transport.close()}bindListeners(){var T={message:Q=>{var ie;try{ie=da.decodeMessage(Q)}catch(Oe){this.emit("error",{type:"MessageParseError",error:Oe,data:Q.data})}if(ie!==void 0){switch(Y.debug("Event recd",ie),ie.event){case"pusher:error":this.emit("error",{type:"PusherError",data:ie.data});break;case"pusher:ping":this.emit("ping");break;case"pusher:pong":this.emit("pong");break}this.emit("message",ie)}},activity:()=>{this.emit("activity")},error:Q=>{this.emit("error",Q)},closed:Q=>{L(),Q&&Q.code&&this.handleCloseEvent(Q),this.transport=null,this.emit("closed")}},L=()=>{me(T,(Q,ie)=>{this.transport.unbind(ie,Q)})};me(T,(Q,ie)=>{this.transport.bind(ie,Q)})}handleCloseEvent(T){var L=da.getCloseAction(T),Q=da.getCloseError(T);Q&&this.emit("error",Q),L&&this.emit(L,{action:L,error:Q})}}class ef{constructor(T,L){this.transport=T,this.callback=L,this.bindListeners()}close(){this.unbindListeners(),this.transport.close()}bindListeners(){this.onMessage=T=>{this.unbindListeners();var L;try{L=da.processHandshake(T)}catch(Q){this.finish("error",{error:Q}),this.transport.close();return}L.action==="connected"?this.finish("connected",{connection:new hl(L.id,this.transport),activityTimeout:L.activityTimeout}):(this.finish(L.action,{error:L.error}),this.transport.close())},this.onClosed=T=>{this.unbindListeners();var L=da.getCloseAction(T)||"backoff",Q=da.getCloseError(T);this.finish(L,{error:Q})},this.transport.bind("message",this.onMessage),this.transport.bind("closed",this.onClosed)}unbindListeners(){this.transport.unbind("message",this.onMessage),this.transport.unbind("closed",this.onClosed)}finish(T,L){this.callback(ce({transport:this.transport,action:T},L))}}class tf{constructor(T,L){this.timeline=T,this.options=L||{}}send(T,L){this.timeline.isEmpty()||this.timeline.send(et.TimelineTransport.getAgent(this,T),L)}}class iu extends $e{constructor(T,L){super(function(Q,ie){Y.debug("No callbacks on "+T+" for "+Q)}),this.name=T,this.pusher=L,this.subscribed=!1,this.subscriptionPending=!1,this.subscriptionCancelled=!1}authorize(T,L){return L(null,{auth:""})}trigger(T,L){if(T.indexOf("client-")!==0)throw new b("Event '"+T+"' does not start with 'client-'");if(!this.subscribed){var Q=g.buildLogSuffix("triggeringClientEvents");Y.warn(`Client event triggered before channel 'subscription_succeeded' event . ${Q}`)}return this.pusher.send_event(T,L,this.name)}disconnect(){this.subscribed=!1,this.subscriptionPending=!1}handleEvent(T){var L=T.event,Q=T.data;if(L==="pusher_internal:subscription_succeeded")this.handleSubscriptionSucceededEvent(T);else if(L==="pusher_internal:subscription_count")this.handleSubscriptionCountEvent(T);else if(L.indexOf("pusher_internal:")!==0){var ie={};this.emit(L,Q,ie)}}handleSubscriptionSucceededEvent(T){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit("pusher:subscription_succeeded",T.data)}handleSubscriptionCountEvent(T){T.data.subscription_count&&(this.subscriptionCount=T.data.subscription_count),this.emit("pusher:subscription_count",T.data)}subscribe(){this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,(T,L)=>{T?(this.subscriptionPending=!1,Y.error(T.toString()),this.emit("pusher:subscription_error",Object.assign({},{type:"AuthError",error:T.message},T instanceof E?{status:T.status}:{}))):this.pusher.send_event("pusher:subscribe",{auth:L.auth,channel_data:L.channel_data,channel:this.name})}))}unsubscribe(){this.subscribed=!1,this.pusher.send_event("pusher:unsubscribe",{channel:this.name})}cancelSubscription(){this.subscriptionCancelled=!0}reinstateSubscription(){this.subscriptionCancelled=!1}}class au extends iu{authorize(T,L){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:T},L)}}class rf{constructor(){this.reset()}get(T){return Object.prototype.hasOwnProperty.call(this.members,T)?{id:T,info:this.members[T]}:null}each(T){me(this.members,(L,Q)=>{T(this.get(Q))})}setMyID(T){this.myID=T}onSubscription(T){this.members=T.presence.hash,this.count=T.presence.count,this.me=this.get(this.myID)}addMember(T){return this.get(T.user_id)===null&&this.count++,this.members[T.user_id]=T.user_info,this.get(T.user_id)}removeMember(T){var L=this.get(T.user_id);return L&&(delete this.members[T.user_id],this.count--),L}reset(){this.members={},this.count=0,this.myID=null,this.me=null}}var nf=function(z,T,L,Q){function ie(Oe){return Oe instanceof L?Oe:new L(function(Ze){Ze(Oe)})}return new(L||(L=Promise))(function(Oe,Ze){function st(ar){try{Yt(Q.next(ar))}catch($r){Ze($r)}}function _t(ar){try{Yt(Q.throw(ar))}catch($r){Ze($r)}}function Yt(ar){ar.done?Oe(ar.value):ie(ar.value).then(st,_t)}Yt((Q=Q.apply(z,T||[])).next())})};class ao extends au{constructor(T,L){super(T,L),this.members=new rf}authorize(T,L){super.authorize(T,(Q,ie)=>nf(this,void 0,void 0,function*(){if(!Q)if(ie=ie,ie.channel_data!=null){var Oe=JSON.parse(ie.channel_data);this.members.setMyID(Oe.user_id)}else if(yield this.pusher.user.signinDonePromise,this.pusher.user.user_data!=null)this.members.setMyID(this.pusher.user.user_data.id);else{let Ze=g.buildLogSuffix("authorizationEndpoint");Y.error(`Invalid auth response for channel '${this.name}', expected 'channel_data' field. ${Ze}, or the user should be signed in.`),L("Invalid auth response");return}L(Q,ie)}))}handleEvent(T){var L=T.event;if(L.indexOf("pusher_internal:")===0)this.handleInternalEvent(T);else{var Q=T.data,ie={};T.user_id&&(ie.user_id=T.user_id),this.emit(L,Q,ie)}}handleInternalEvent(T){var L=T.event,Q=T.data;switch(L){case"pusher_internal:subscription_succeeded":this.handleSubscriptionSucceededEvent(T);break;case"pusher_internal:subscription_count":this.handleSubscriptionCountEvent(T);break;case"pusher_internal:member_added":var ie=this.members.addMember(Q);this.emit("pusher:member_added",ie);break;case"pusher_internal:member_removed":var Oe=this.members.removeMember(Q);Oe&&this.emit("pusher:member_removed",Oe);break}}handleSubscriptionSucceededEvent(T){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):(this.members.onSubscription(T.data),this.emit("pusher:subscription_succeeded",this.members))}disconnect(){this.members.reset(),super.disconnect()}}var ls=i(1),Wt=i(0);class bn extends au{constructor(T,L,Q){super(T,L),this.key=null,this.nacl=Q}authorize(T,L){super.authorize(T,(Q,ie)=>{if(Q){L(Q,ie);return}let Oe=ie.shared_secret;if(!Oe){L(new Error(`No shared_secret key in auth payload for encrypted channel: ${this.name}`),null);return}this.key=Object(Wt.decode)(Oe),delete ie.shared_secret,L(null,ie)})}trigger(T,L){throw new A("Client events are not currently supported for encrypted channels")}handleEvent(T){var L=T.event,Q=T.data;if(L.indexOf("pusher_internal:")===0||L.indexOf("pusher:")===0){super.handleEvent(T);return}this.handleEncryptedEvent(L,Q)}handleEncryptedEvent(T,L){if(!this.key){Y.debug("Received encrypted event before key has been retrieved from the authEndpoint");return}if(!L.ciphertext||!L.nonce){Y.error("Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: "+L);return}let Q=Object(Wt.decode)(L.ciphertext);if(Q.length{if(Ze){Y.error(`Failed to make a request to the authEndpoint: ${st}. Unable to fetch new key, so dropping encrypted event`);return}if(Oe=this.nacl.secretbox.open(Q,ie,this.key),Oe===null){Y.error("Failed to decrypt event with new key. Dropping encrypted event");return}this.emit(T,this.getDataToEmit(Oe))});return}this.emit(T,this.getDataToEmit(Oe))}getDataToEmit(T){let L=Object(ls.decode)(T);try{return JSON.parse(L)}catch{return L}}}class af extends $e{constructor(T,L){super(),this.state="initialized",this.connection=null,this.key=T,this.options=L,this.timeline=this.options.timeline,this.usingTLS=this.options.useTLS,this.errorCallbacks=this.buildErrorCallbacks(),this.connectionCallbacks=this.buildConnectionCallbacks(this.errorCallbacks),this.handshakeCallbacks=this.buildHandshakeCallbacks(this.errorCallbacks);var Q=et.getNetwork();Q.bind("online",()=>{this.timeline.info({netinfo:"online"}),(this.state==="connecting"||this.state==="unavailable")&&this.retryIn(0)}),Q.bind("offline",()=>{this.timeline.info({netinfo:"offline"}),this.connection&&this.sendActivityCheck()}),this.updateStrategy()}switchCluster(T){this.key=T,this.updateStrategy(),this.retryIn(0)}connect(){if(!(this.connection||this.runner)){if(!this.strategy.isSupported()){this.updateState("failed");return}this.updateState("connecting"),this.startConnecting(),this.setUnavailableTimer()}}send(T){return this.connection?this.connection.send(T):!1}send_event(T,L,Q){return this.connection?this.connection.send_event(T,L,Q):!1}disconnect(){this.disconnectInternally(),this.updateState("disconnected")}isUsingTLS(){return this.usingTLS}startConnecting(){var T=(L,Q)=>{L?this.runner=this.strategy.connect(0,T):Q.action==="error"?(this.emit("error",{type:"HandshakeError",error:Q.error}),this.timeline.error({handshakeError:Q.error})):(this.abortConnecting(),this.handshakeCallbacks[Q.action](Q))};this.runner=this.strategy.connect(0,T)}abortConnecting(){this.runner&&(this.runner.abort(),this.runner=null)}disconnectInternally(){if(this.abortConnecting(),this.clearRetryTimer(),this.clearUnavailableTimer(),this.connection){var T=this.abandonConnection();T.close()}}updateStrategy(){this.strategy=this.options.getStrategy({key:this.key,timeline:this.timeline,useTLS:this.usingTLS})}retryIn(T){this.timeline.info({action:"retry",delay:T}),T>0&&this.emit("connecting_in",Math.round(T/1e3)),this.retryTimer=new ne(T||0,()=>{this.disconnectInternally(),this.connect()})}clearRetryTimer(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)}setUnavailableTimer(){this.unavailableTimer=new ne(this.options.unavailableTimeout,()=>{this.updateState("unavailable")})}clearUnavailableTimer(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()}sendActivityCheck(){this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new ne(this.options.pongTimeout,()=>{this.timeline.error({pong_timed_out:this.options.pongTimeout}),this.retryIn(0)})}resetActivityCheck(){this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new ne(this.activityTimeout,()=>{this.sendActivityCheck()}))}stopActivityCheck(){this.activityTimer&&this.activityTimer.ensureAborted()}buildConnectionCallbacks(T){return ce({},T,{message:L=>{this.resetActivityCheck(),this.emit("message",L)},ping:()=>{this.send_event("pusher:pong",{})},activity:()=>{this.resetActivityCheck()},error:L=>{this.emit("error",L)},closed:()=>{this.abandonConnection(),this.shouldRetry()&&this.retryIn(1e3)}})}buildHandshakeCallbacks(T){return ce({},T,{connected:L=>{this.activityTimeout=Math.min(this.options.activityTimeout,L.activityTimeout,L.connection.activityTimeout||1/0),this.clearUnavailableTimer(),this.setConnection(L.connection),this.socket_id=this.connection.id,this.updateState("connected",{socket_id:this.socket_id})}})}buildErrorCallbacks(){let T=L=>Q=>{Q.error&&this.emit("error",{type:"WebSocketError",error:Q.error}),L(Q)};return{tls_only:T(()=>{this.usingTLS=!0,this.updateStrategy(),this.retryIn(0)}),refused:T(()=>{this.disconnect()}),backoff:T(()=>{this.retryIn(1e3)}),retry:T(()=>{this.retryIn(0)})}}setConnection(T){this.connection=T;for(var L in this.connectionCallbacks)this.connection.bind(L,this.connectionCallbacks[L]);this.resetActivityCheck()}abandonConnection(){if(this.connection){this.stopActivityCheck();for(var T in this.connectionCallbacks)this.connection.unbind(T,this.connectionCallbacks[T]);var L=this.connection;return this.connection=null,L}}updateState(T,L){var Q=this.state;if(this.state=T,Q!==T){var ie=T;ie==="connected"&&(ie+=" with new socket ID "+L.socket_id),Y.debug("State changed",Q+" -> "+ie),this.timeline.info({state:T,params:L}),this.emit("state_change",{previous:Q,current:T}),this.emit(T,L)}}shouldRetry(){return this.state==="connecting"||this.state==="connected"}}class so{constructor(){this.channels={}}add(T,L){return this.channels[T]||(this.channels[T]=$a(T,L)),this.channels[T]}all(){return Ne(this.channels)}find(T){return this.channels[T]}remove(T){var L=this.channels[T];return delete this.channels[T],L}disconnect(){me(this.channels,function(T){T.disconnect()})}}function $a(z,T){if(z.indexOf("private-encrypted-")===0){if(T.config.nacl)return qi.createEncryptedChannel(z,T,T.config.nacl);let L="Tried to subscribe to a private-encrypted- channel but no nacl implementation available",Q=g.buildLogSuffix("encryptedChannelSupport");throw new A(`${L}. ${Q}`)}else{if(z.indexOf("private-")===0)return qi.createPrivateChannel(z,T);if(z.indexOf("presence-")===0)return qi.createPresenceChannel(z,T);if(z.indexOf("#")===0)throw new y('Cannot create a channel with name "'+z+'".');return qi.createChannel(z,T)}}var dl={createChannels(){return new so},createConnectionManager(z,T){return new af(z,T)},createChannel(z,T){return new iu(z,T)},createPrivateChannel(z,T){return new au(z,T)},createPresenceChannel(z,T){return new ao(z,T)},createEncryptedChannel(z,T,L){return new bn(z,T,L)},createTimelineSender(z,T){return new tf(z,T)},createHandshake(z,T){return new ef(z,T)},createAssistantToTheTransportManager(z,T,L){return new Qc(z,T,L)}},qi=dl;class Sd{constructor(T){this.options=T||{},this.livesLeft=this.options.lives||1/0}getAssistant(T){return qi.createAssistantToTheTransportManager(this,T,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})}isAlive(){return this.livesLeft>0}reportDeath(){this.livesLeft-=1}}class cs{constructor(T,L){this.strategies=T,this.loop=!!L.loop,this.failFast=!!L.failFast,this.timeout=L.timeout,this.timeoutLimit=L.timeoutLimit}isSupported(){return ee(this.strategies,Se.method("isSupported"))}connect(T,L){var Q=this.strategies,ie=0,Oe=this.timeout,Ze=null,st=(_t,Yt)=>{Yt?L(null,Yt):(ie=ie+1,this.loop&&(ie=ie%Q.length),ie0&&(Oe=new ne(Q.timeout,function(){Ze.abort(),ie(!0)})),Ze=T.connect(L,function(st,_t){st&&Oe&&Oe.isRunning()&&!Q.failFast||(Oe&&Oe.ensureAborted(),ie(st,_t))}),{abort:function(){Oe&&Oe.ensureAborted(),Ze.abort()},forceMinPriority:function(st){Ze.forceMinPriority(st)}}}}class sf{constructor(T){this.strategies=T}isSupported(){return ee(this.strategies,Se.method("isSupported"))}connect(T,L){return Qg(this.strategies,T,function(Q,ie){return function(Oe,Ze){if(ie[Q].error=Oe,Oe){_d(ie)&&L(!0);return}Ce(ie,function(st){st.forceMinPriority(Ze.transport.priority)}),L(null,Ze)}})}}function Qg(z,T,L){var Q=He(z,function(ie,Oe,Ze,st){return ie.connect(T,L(Oe,st))});return{abort:function(){Ce(Q,Ad)},forceMinPriority:function(ie){Ce(Q,function(Oe){Oe.forceMinPriority(ie)})}}}function _d(z){return ue(z,function(T){return!!T.error})}function Ad(z){!z.error&&!z.aborted&&(z.abort(),z.aborted=!0)}class Dd{constructor(T,L,Q){this.strategy=T,this.transports=L,this.ttl=Q.ttl||1800*1e3,this.usingTLS=Q.useTLS,this.timeline=Q.timeline}isSupported(){return this.strategy.isSupported()}connect(T,L){var Q=this.usingTLS,ie=e0(Q),Oe=ie&&ie.cacheSkipCount?ie.cacheSkipCount:0,Ze=[this.strategy];if(ie&&ie.timestamp+this.ttl>=Se.now()){var st=this.transports[ie.transport];st&&(["ws","wss"].includes(ie.transport)||Oe>3?(this.timeline.info({cached:!0,transport:ie.transport,latency:ie.latency}),Ze.push(new cs([st],{timeout:ie.latency*2+1e3,failFast:!0}))):Oe++)}var _t=Se.now(),Yt=Ze.pop().connect(T,function ar($r,gl){$r?(ou(Q),Ze.length>0?(_t=Se.now(),Yt=Ze.pop().connect(T,ar)):L($r)):(Nd(Q,gl.transport.name,Se.now()-_t,Oe),L(null,gl))});return{abort:function(){Yt.abort()},forceMinPriority:function(ar){T=ar,Yt&&Yt.forceMinPriority(ar)}}}}function su(z){return"pusherTransport"+(z?"TLS":"NonTLS")}function e0(z){var T=et.getLocalStorage();if(T)try{var L=T[su(z)];if(L)return JSON.parse(L)}catch{ou(z)}return null}function Nd(z,T,L,Q){var ie=et.getLocalStorage();if(ie)try{ie[su(z)]=P({timestamp:Se.now(),transport:T,latency:L,cacheSkipCount:Q})}catch{}}function ou(z){var T=et.getLocalStorage();if(T)try{delete T[su(z)]}catch{}}class uu{constructor(T,{delay:L}){this.strategy=T,this.options={delay:L}}isSupported(){return this.strategy.isSupported()}connect(T,L){var Q=this.strategy,ie,Oe=new ne(this.options.delay,function(){ie=Q.connect(T,L)});return{abort:function(){Oe.ensureAborted(),ie&&ie.abort()},forceMinPriority:function(Ze){T=Ze,ie&&ie.forceMinPriority(Ze)}}}}class lu{constructor(T,L,Q){this.test=T,this.trueBranch=L,this.falseBranch=Q}isSupported(){var T=this.test()?this.trueBranch:this.falseBranch;return T.isSupported()}connect(T,L){var Q=this.test()?this.trueBranch:this.falseBranch;return Q.connect(T,L)}}class Ed{constructor(T){this.strategy=T}isSupported(){return this.strategy.isSupported()}connect(T,L){var Q=this.strategy.connect(T,function(ie,Oe){Oe&&Q.abort(),L(ie,Oe)});return Q}}function oo(z){return function(){return z.isSupported()}}var of=function(z,T,L){var Q={};function ie(Zd,co,y0,b0,_f){var Af=L(z,Zd,co,y0,b0,_f);return Q[Zd]=Af,Af}var Oe=Object.assign({},T,{hostNonTLS:z.wsHost+":"+z.wsPort,hostTLS:z.wsHost+":"+z.wssPort,httpPath:z.wsPath}),Ze=Object.assign({},Oe,{useTLS:!0}),st=Object.assign({},T,{hostNonTLS:z.httpHost+":"+z.httpPort,hostTLS:z.httpHost+":"+z.httpsPort,httpPath:z.httpPath}),_t={loop:!0,timeout:15e3,timeoutLimit:6e4},Yt=new Sd({minPingDelay:1e4,maxPingDelay:z.activityTimeout}),ar=new Sd({lives:2,minPingDelay:1e4,maxPingDelay:z.activityTimeout}),$r=ie("ws","ws",3,Oe,Yt),gl=ie("wss","ws",3,Ze,Yt),yf=ie("sockjs","sockjs",1,st),yl=ie("xhr_streaming","xhr_streaming",1,st,ar),g0=ie("xdr_streaming","xdr_streaming",1,st,ar),bf=ie("xhr_polling","xhr_polling",1,st),Jn=ie("xdr_polling","xdr_polling",1,st),bl=new cs([$r],_t),cu=new cs([gl],_t),jd=new cs([yf],_t),xf=new cs([new lu(oo(yl),yl,g0)],_t),Gd=new cs([new lu(oo(bf),bf,Jn)],_t),Xd=new cs([new lu(oo(xf),new sf([xf,new uu(Gd,{delay:4e3})]),Gd)],_t),wf=new lu(oo(Xd),Xd,jd),Sf;return T.useTLS?Sf=new sf([bl,new uu(wf,{delay:2e3})]):Sf=new sf([bl,new uu(cu,{delay:2e3}),new uu(wf,{delay:5e3})]),new Dd(new Ed(new lu(oo($r),Sf,wf)),Q,{ttl:18e5,timeline:T.timeline,useTLS:T.useTLS})},t0=of,Cd=function(){var z=this;z.timeline.info(z.buildTimelineMessage({transport:z.name+(z.options.useTLS?"s":"")})),z.hooks.isInitialized()?z.changeState("initialized"):z.hooks.file?(z.changeState("initializing"),f.load(z.hooks.file,{useTLS:z.options.useTLS},function(T,L){z.hooks.isInitialized()?(z.changeState("initialized"),L(!0)):(T&&z.onError(T),z.onClose(),L(!1))})):z.onClose()},uf={getRequest:function(z){var T=new window.XDomainRequest;return T.ontimeout=function(){z.emit("error",new S),z.close()},T.onerror=function(L){z.emit("error",L),z.close()},T.onprogress=function(){T.responseText&&T.responseText.length>0&&z.onChunk(200,T.responseText)},T.onload=function(){T.responseText&&T.responseText.length>0&&z.onChunk(200,T.responseText),z.emit("finished",200),z.close()},T},abortRequest:function(z){z.ontimeout=z.onerror=z.onprogress=z.onload=null,z.abort()}},lf=uf;const uo=256*1024;class Md extends $e{constructor(T,L,Q){super(),this.hooks=T,this.method=L,this.url=Q}start(T){this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=()=>{this.close()},et.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send(T)}close(){this.unloader&&(et.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)}onChunk(T,L){for(;;){var Q=this.advanceBuffer(L);if(Q)this.emit("chunk",{status:T,data:Q});else break}this.isBufferTooLong(L)&&this.emit("buffer_too_long")}advanceBuffer(T){var L=T.slice(this.position),Q=L.indexOf(` -`);return Q!==-1?(this.position+=Q+1,L.slice(0,Q)):null}isBufferTooLong(T){return this.position===T.length&&T.length>uo}}var pl;(function(z){z[z.CONNECTING=0]="CONNECTING",z[z.OPEN=1]="OPEN",z[z.CLOSED=3]="CLOSED"})(pl||(pl={}));var fs=pl,Td=1;class Od{constructor(T,L){this.hooks=T,this.session=Id(1e3)+"/"+Bd(8),this.location=Fd(L),this.readyState=fs.CONNECTING,this.openStream()}send(T){return this.sendRaw(JSON.stringify([T]))}ping(){this.hooks.sendHeartbeat(this)}close(T,L){this.onClose(T,L,!0)}sendRaw(T){if(this.readyState===fs.OPEN)try{return et.createSocketRequest("POST",Rd(Pd(this.location,this.session))).start(T),!0}catch{return!1}else return!1}reconnect(){this.closeStream(),this.openStream()}onClose(T,L,Q){this.closeStream(),this.readyState=fs.CLOSED,this.onclose&&this.onclose({code:T,reason:L,wasClean:Q})}onChunk(T){if(T.status===200){this.readyState===fs.OPEN&&this.onActivity();var L,Q=T.data.slice(0,1);switch(Q){case"o":L=JSON.parse(T.data.slice(1)||"{}"),this.onOpen(L);break;case"a":L=JSON.parse(T.data.slice(1)||"[]");for(var ie=0;ie{this.onChunk(T)}),this.stream.bind("finished",T=>{this.hooks.onFinished(this,T)}),this.stream.bind("buffer_too_long",()=>{this.reconnect()});try{this.stream.start()}catch(T){Se.defer(()=>{this.onError(T),this.onClose(1006,"Could not start streaming",!1)})}}closeStream(){this.stream&&(this.stream.unbind_all(),this.stream.close(),this.stream=null)}}function Fd(z){var T=/([^\?]*)\/*(\??.*)/.exec(z);return{base:T[1],queryString:T[2]}}function Pd(z,T){return z.base+"/"+T+"/xhr_send"}function Rd(z){var T=z.indexOf("?")===-1?"?":"&";return z+T+"t="+ +new Date+"&n="+Td++}function r0(z,T){var L=/(https?:\/\/)([^\/:]+)((\/|:)?.*)/.exec(z);return L[1]+T+L[3]}function Id(z){return et.randomInt(z)}function Bd(z){for(var T=[],L=0;L0&&z.onChunk(L.status,L.responseText);break;case 4:L.responseText&&L.responseText.length>0&&z.onChunk(L.status,L.responseText),z.emit("finished",L.status),z.close();break}},L},abortRequest:function(z){z.onreadystatechange=null,z.abort()}},u0=o0,l0={createStreamingSocket(z){return this.createSocket(a0,z)},createPollingSocket(z){return this.createSocket(cf,z)},createSocket(z,T){return new n0(z,T)},createXHR(z,T){return this.createRequest(u0,z,T)},createRequest(z,T,L){return new Md(z,T,L)}},kd=l0;kd.createXDR=function(z,T){return this.createRequest(lf,z,T)};var c0=kd,Ar={nextAuthCallbackID:1,auth_callbacks:{},ScriptReceivers:s,DependenciesReceivers:c,getDefaultStrategy:t0,Transports:Zc,transportConnectionInitializer:Cd,HTTPFactory:c0,TimelineTransport:ze,getXHRAPI(){return window.XMLHttpRequest},getWebSocketAPI(){return window.WebSocket||window.MozWebSocket},setup(z){window.Pusher=z;var T=()=>{this.onDocumentBody(z.ready)};window.JSON?T():f.load("json2",{},T)},getDocument(){return document},getProtocol(){return this.getDocument().location.protocol},getAuthorizers(){return{ajax:M,jsonp:ge}},onDocumentBody(z){document.body?z():setTimeout(()=>{this.onDocumentBody(z)},0)},createJSONPRequest(z,T){return new Re(z,T)},createScriptRequest(z){return new De(z)},getLocalStorage(){try{return window.localStorage}catch{return}},createXHR(){return this.getXHRAPI()?this.createXMLHttpRequest():this.createMicrosoftXHR()},createXMLHttpRequest(){var z=this.getXHRAPI();return new z},createMicrosoftXHR(){return new ActiveXObject("Microsoft.XMLHTTP")},getNetwork(){return Jc},createWebSocket(z){var T=this.getWebSocketAPI();return new T(z)},createSocketRequest(z,T){if(this.isXHRSupported())return this.HTTPFactory.createXHR(z,T);if(this.isXDRSupported(T.indexOf("https:")===0))return this.HTTPFactory.createXDR(z,T);throw"Cross-origin HTTP requests are not supported"},isXHRSupported(){var z=this.getXHRAPI();return!!z&&new z().withCredentials!==void 0},isXDRSupported(z){var T=z?"https:":"http:",L=this.getProtocol();return!!window.XDomainRequest&&L===T},addUnloadListener(z){window.addEventListener!==void 0?window.addEventListener("unload",z,!1):window.attachEvent!==void 0&&window.attachEvent("onunload",z)},removeUnloadListener(z){window.addEventListener!==void 0?window.removeEventListener("unload",z,!1):window.detachEvent!==void 0&&window.detachEvent("onunload",z)},randomInt(z){return Math.floor(function(){return(window.crypto||window.msCrypto).getRandomValues(new Uint32Array(1))[0]/Math.pow(2,32)}()*z)}},et=Ar,ff;(function(z){z[z.ERROR=3]="ERROR",z[z.INFO=6]="INFO",z[z.DEBUG=7]="DEBUG"})(ff||(ff={}));var ml=ff;class f0{constructor(T,L,Q){this.key=T,this.session=L,this.events=[],this.options=Q||{},this.sent=0,this.uniqueID=0}log(T,L){T<=this.options.level&&(this.events.push(ce({},L,{timestamp:Se.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())}error(T){this.log(ml.ERROR,T)}info(T){this.log(ml.INFO,T)}debug(T){this.log(ml.DEBUG,T)}isEmpty(){return this.events.length===0}send(T,L){var Q=ce({session:this.session,bundle:this.sent+1,key:this.key,lib:"js",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],T(Q,(ie,Oe)=>{ie||this.sent++,L&&L(ie,Oe)}),!0}generateUniqueID(){return this.uniqueID++,this.uniqueID}}class h0{constructor(T,L,Q,ie){this.name=T,this.priority=L,this.transport=Q,this.options=ie||{}}isSupported(){return this.transport.isSupported({useTLS:this.options.useTLS})}connect(T,L){if(this.isSupported()){if(this.priority{Q||(ar(),Oe?Oe.close():ie.close())},forceMinPriority:$r=>{Q||this.priority<$r&&(Oe?Oe.close():ie.close())}}}}function Ld(z,T){return Se.defer(function(){T(z)}),{abort:function(){},forceMinPriority:function(){}}}const{Transports:d0}=et;var $d=function(z,T,L,Q,ie,Oe){var Ze=d0[L];if(!Ze)throw new w(L);var st=(!z.enabledTransports||_e(z.enabledTransports,T)!==-1)&&(!z.disabledTransports||_e(z.disabledTransports,T)===-1),_t;return st?(ie=Object.assign({ignoreNullOrigin:z.ignoreNullOrigin},ie),_t=new h0(T,Q,Oe?Oe.getAssistant(Ze):Ze,ie)):_t=p0,_t},p0={isSupported:function(){return!1},connect:function(z,T){var L=Se.defer(function(){T(new C)});return{abort:function(){L.ensureAborted()},forceMinPriority:function(){}}}};function on(z){if(z==null)throw"You must pass an options object";if(z.cluster==null)throw"Options object must provide a cluster";"disableStats"in z&&Y.warn("The disableStats option is deprecated in favor of enableStats")}const hf=(z,T)=>{var L="socket_id="+encodeURIComponent(z.socketId);for(var Q in T.params)L+="&"+encodeURIComponent(Q)+"="+encodeURIComponent(T.params[Q]);if(T.paramsProvider!=null){let ie=T.paramsProvider();for(var Q in ie)L+="&"+encodeURIComponent(Q)+"="+encodeURIComponent(ie[Q])}return L};var zd=z=>{if(typeof et.getAuthorizers()[z.transport]>"u")throw`'${z.transport}' is not a recognized auth transport`;return(T,L)=>{const Q=hf(T,z);et.getAuthorizers()[z.transport](et,Q,z,m.UserAuthentication,L)}};const df=(z,T)=>{var L="socket_id="+encodeURIComponent(z.socketId);L+="&channel_name="+encodeURIComponent(z.channelName);for(var Q in T.params)L+="&"+encodeURIComponent(Q)+"="+encodeURIComponent(T.params[Q]);if(T.paramsProvider!=null){let ie=T.paramsProvider();for(var Q in ie)L+="&"+encodeURIComponent(Q)+"="+encodeURIComponent(ie[Q])}return L};var qd=z=>{if(typeof et.getAuthorizers()[z.transport]>"u")throw`'${z.transport}' is not a recognized auth transport`;return(T,L)=>{const Q=df(T,z);et.getAuthorizers()[z.transport](et,Q,z,m.ChannelAuthorization,L)}};const Ud=(z,T,L)=>{const Q={authTransport:T.transport,authEndpoint:T.endpoint,auth:{params:T.params,headers:T.headers}};return(ie,Oe)=>{const Ze=z.channel(ie.channelName);L(Ze,Q).authorize(ie.socketId,Oe)}};function pf(z,T){let L={activityTimeout:z.activityTimeout||u.activityTimeout,cluster:z.cluster,httpPath:z.httpPath||u.httpPath,httpPort:z.httpPort||u.httpPort,httpsPort:z.httpsPort||u.httpsPort,pongTimeout:z.pongTimeout||u.pongTimeout,statsHost:z.statsHost||u.stats_host,unavailableTimeout:z.unavailableTimeout||u.unavailableTimeout,wsPath:z.wsPath||u.wsPath,wsPort:z.wsPort||u.wsPort,wssPort:z.wssPort||u.wssPort,enableStats:m0(z),httpHost:Hd(z),useTLS:Zn(z),wsHost:Wd(z),userAuthenticator:v0(z),channelAuthorizer:za(z,T)};return"disabledTransports"in z&&(L.disabledTransports=z.disabledTransports),"enabledTransports"in z&&(L.enabledTransports=z.enabledTransports),"ignoreNullOrigin"in z&&(L.ignoreNullOrigin=z.ignoreNullOrigin),"timelineParams"in z&&(L.timelineParams=z.timelineParams),"nacl"in z&&(L.nacl=z.nacl),L}function Hd(z){return z.httpHost?z.httpHost:z.cluster?`sockjs-${z.cluster}.pusher.com`:u.httpHost}function Wd(z){return z.wsHost?z.wsHost:Vd(z.cluster)}function Vd(z){return`ws-${z}.pusher.com`}function Zn(z){return et.getProtocol()==="https:"?!0:z.forceTLS!==!1}function m0(z){return"enableStats"in z?z.enableStats:"disableStats"in z?!z.disableStats:!1}const Kn=z=>"customHandler"in z&&z.customHandler!=null;function v0(z){const T=Object.assign(Object.assign({},u.userAuthentication),z.userAuthentication);return Kn(T)?T.customHandler:zd(T)}function Yd(z,T){let L;if("channelAuthorization"in z)L=Object.assign(Object.assign({},u.channelAuthorization),z.channelAuthorization);else if(L={transport:z.authTransport||u.authTransport,endpoint:z.authEndpoint||u.authEndpoint},"auth"in z&&("params"in z.auth&&(L.params=z.auth.params),"headers"in z.auth&&(L.headers=z.auth.headers)),"authorizer"in z)return{customHandler:Ud(T,L,z.authorizer)};return L}function za(z,T){const L=Yd(z,T);return Kn(L)?L.customHandler:qd(L)}class vl extends $e{constructor(T){super(function(L,Q){Y.debug(`No callbacks on watchlist events for ${L}`)}),this.pusher=T,this.bindWatchlistInternalEvent()}handleEvent(T){T.data.events.forEach(L=>{this.emit(L.name,L)})}bindWatchlistInternalEvent(){this.pusher.connection.bind("message",T=>{var L=T.event;L==="pusher_internal:watchlist_events"&&this.handleEvent(T)})}}function mf(){let z,T;return{promise:new Promise((Q,ie)=>{z=Q,T=ie}),resolve:z,reject:T}}var Er=mf;class qa extends $e{constructor(T){super(function(L,Q){Y.debug("No callbacks on user for "+L)}),this.signin_requested=!1,this.user_data=null,this.serverToUserChannel=null,this.signinDonePromise=null,this._signinDoneResolve=null,this._onAuthorize=(L,Q)=>{if(L){Y.warn(`Error during signin: ${L}`),this._cleanup();return}this.pusher.send_event("pusher:signin",{auth:Q.auth,user_data:Q.user_data})},this.pusher=T,this.pusher.connection.bind("state_change",({previous:L,current:Q})=>{L!=="connected"&&Q==="connected"&&this._signin(),L==="connected"&&Q!=="connected"&&(this._cleanup(),this._newSigninPromiseIfNeeded())}),this.watchlist=new vl(T),this.pusher.connection.bind("message",L=>{var Q=L.event;Q==="pusher:signin_success"&&this._onSigninSuccess(L.data),this.serverToUserChannel&&this.serverToUserChannel.name===L.channel&&this.serverToUserChannel.handleEvent(L)})}signin(){this.signin_requested||(this.signin_requested=!0,this._signin())}_signin(){this.signin_requested&&(this._newSigninPromiseIfNeeded(),this.pusher.connection.state==="connected"&&this.pusher.config.userAuthenticator({socketId:this.pusher.connection.socket_id},this._onAuthorize))}_onSigninSuccess(T){try{this.user_data=JSON.parse(T.user_data)}catch{Y.error(`Failed parsing user data after signin: ${T.user_data}`),this._cleanup();return}if(typeof this.user_data.id!="string"||this.user_data.id===""){Y.error(`user_data doesn't contain an id. user_data: ${this.user_data}`),this._cleanup();return}this._signinDoneResolve(),this._subscribeChannels()}_subscribeChannels(){const T=L=>{L.subscriptionPending&&L.subscriptionCancelled?L.reinstateSubscription():!L.subscriptionPending&&this.pusher.connection.state==="connected"&&L.subscribe()};this.serverToUserChannel=new iu(`#server-to-user-${this.user_data.id}`,this.pusher),this.serverToUserChannel.bind_global((L,Q)=>{L.indexOf("pusher_internal:")===0||L.indexOf("pusher:")===0||this.emit(L,Q)}),T(this.serverToUserChannel)}_cleanup(){this.user_data=null,this.serverToUserChannel&&(this.serverToUserChannel.unbind_all(),this.serverToUserChannel.disconnect(),this.serverToUserChannel=null),this.signin_requested&&this._signinDoneResolve()}_newSigninPromiseIfNeeded(){if(!this.signin_requested||this.signinDonePromise&&!this.signinDonePromise.done)return;const{promise:T,resolve:L,reject:Q}=Er();T.done=!1;const ie=()=>{T.done=!0};T.then(ie).catch(ie),this.signinDonePromise=T,this._signinDoneResolve=L}}class Zr{static ready(){Zr.isReady=!0;for(var T=0,L=Zr.instances.length;Tet.getDefaultStrategy(this.config,ie,$d);this.connection=qi.createConnectionManager(this.key,{getStrategy:Q,timeline:this.timeline,activityTimeout:this.config.activityTimeout,pongTimeout:this.config.pongTimeout,unavailableTimeout:this.config.unavailableTimeout,useTLS:!!this.config.useTLS}),this.connection.bind("connected",()=>{this.subscribeAll(),this.timelineSender&&this.timelineSender.send(this.connection.isUsingTLS())}),this.connection.bind("message",ie=>{var Oe=ie.event,Ze=Oe.indexOf("pusher_internal:")===0;if(ie.channel){var st=this.channel(ie.channel);st&&st.handleEvent(ie)}Ze||this.global_emitter.emit(ie.event,ie.data)}),this.connection.bind("connecting",()=>{this.channels.disconnect()}),this.connection.bind("disconnected",()=>{this.channels.disconnect()}),this.connection.bind("error",ie=>{Y.warn(ie)}),Zr.instances.push(this),this.timeline.info({instances:Zr.instances.length}),this.user=new qa(this),Zr.isReady&&this.connect()}switchCluster(T){const{appKey:L,cluster:Q}=T;this.key=L,this.options=Object.assign(Object.assign({},this.options),{cluster:Q}),this.config=pf(this.options,this),this.connection.switchCluster(this.key)}channel(T){return this.channels.find(T)}allChannels(){return this.channels.all()}connect(){if(this.connection.connect(),this.timelineSender&&!this.timelineSenderTimer){var T=this.connection.isUsingTLS(),L=this.timelineSender;this.timelineSenderTimer=new X(6e4,function(){L.send(T)})}}disconnect(){this.connection.disconnect(),this.timelineSenderTimer&&(this.timelineSenderTimer.ensureAborted(),this.timelineSenderTimer=null)}bind(T,L,Q){return this.global_emitter.bind(T,L,Q),this}unbind(T,L,Q){return this.global_emitter.unbind(T,L,Q),this}bind_global(T){return this.global_emitter.bind_global(T),this}unbind_global(T){return this.global_emitter.unbind_global(T),this}unbind_all(T){return this.global_emitter.unbind_all(),this}subscribeAll(){var T;for(T in this.channels.channels)this.channels.channels.hasOwnProperty(T)&&this.subscribe(T)}subscribe(T){var L=this.channels.add(T,this);return L.subscriptionPending&&L.subscriptionCancelled?L.reinstateSubscription():!L.subscriptionPending&&this.connection.state==="connected"&&L.subscribe(),L}unsubscribe(T){var L=this.channels.find(T);L&&L.subscriptionPending?L.cancelSubscription():(L=this.channels.remove(T),L&&L.subscribed&&L.unsubscribe())}send_event(T,L,Q){return this.connection.send_event(T,L,Q)}shouldUseTLS(){return this.config.useTLS}signin(){this.user.signin()}}Zr.instances=[],Zr.isReady=!1,Zr.logToConsole=!1,Zr.Runtime=et,Zr.ScriptReceivers=et.ScriptReceivers,Zr.DependenciesReceivers=et.DependenciesReceivers,Zr.auth_callbacks=et.auth_callbacks;var vf=n.default=Zr;function gf(z){if(z==null)throw"You must pass your app key when you instantiate Pusher."}et.setup(Zr)}])})})(gT);var X9=gT.exports;const VAe=Vu(X9);function yT(t,e){return function(){return t.apply(e,arguments)}}const{toString:Z9}=Object.prototype,{getPrototypeOf:w1}=Object,Yv=(t=>e=>{const r=Z9.call(e);return t[r]||(t[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),Qa=t=>(t=t.toLowerCase(),e=>Yv(e)===t),jv=t=>e=>typeof e===t,{isArray:Ac}=Array,xh=jv("undefined");function K9(t){return t!==null&&!xh(t)&&t.constructor!==null&&!xh(t.constructor)&&na(t.constructor.isBuffer)&&t.constructor.isBuffer(t)}const bT=Qa("ArrayBuffer");function J9(t){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(t):e=t&&t.buffer&&bT(t.buffer),e}const Q9=jv("string"),na=jv("function"),xT=jv("number"),Gv=t=>t!==null&&typeof t=="object",e7=t=>t===!0||t===!1,wm=t=>{if(Yv(t)!=="object")return!1;const e=w1(t);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in t)&&!(Symbol.iterator in t)},t7=Qa("Date"),r7=Qa("File"),n7=Qa("Blob"),i7=Qa("FileList"),a7=t=>Gv(t)&&na(t.pipe),s7=t=>{let e;return t&&(typeof FormData=="function"&&t instanceof FormData||na(t.append)&&((e=Yv(t))==="formdata"||e==="object"&&na(t.toString)&&t.toString()==="[object FormData]"))},o7=Qa("URLSearchParams"),u7=t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Gh(t,e,{allOwnKeys:r=!1}={}){if(t===null||typeof t>"u")return;let n,i;if(typeof t!="object"&&(t=[t]),Ac(t))for(n=0,i=t.length;n0;)if(i=r[n],e===i.toLowerCase())return i;return null}const ST=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,_T=t=>!xh(t)&&t!==ST;function sb(){const{caseless:t}=_T(this)&&this||{},e={},r=(n,i)=>{const a=t&&wT(e,i)||i;wm(e[a])&&wm(n)?e[a]=sb(e[a],n):wm(n)?e[a]=sb({},n):Ac(n)?e[a]=n.slice():e[a]=n};for(let n=0,i=arguments.length;n(Gh(e,(i,a)=>{r&&na(i)?t[a]=yT(i,r):t[a]=i},{allOwnKeys:n}),t),c7=t=>(t.charCodeAt(0)===65279&&(t=t.slice(1)),t),f7=(t,e,r,n)=>{t.prototype=Object.create(e.prototype,n),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),r&&Object.assign(t.prototype,r)},h7=(t,e,r,n)=>{let i,a,s;const o={};if(e=e||{},t==null)return e;do{for(i=Object.getOwnPropertyNames(t),a=i.length;a-- >0;)s=i[a],(!n||n(s,t,e))&&!o[s]&&(e[s]=t[s],o[s]=!0);t=r!==!1&&w1(t)}while(t&&(!r||r(t,e))&&t!==Object.prototype);return e},d7=(t,e,r)=>{t=String(t),(r===void 0||r>t.length)&&(r=t.length),r-=e.length;const n=t.indexOf(e,r);return n!==-1&&n===r},p7=t=>{if(!t)return null;if(Ac(t))return t;let e=t.length;if(!xT(e))return null;const r=new Array(e);for(;e-- >0;)r[e]=t[e];return r},m7=(t=>e=>t&&e instanceof t)(typeof Uint8Array<"u"&&w1(Uint8Array)),v7=(t,e)=>{const n=(t&&t[Symbol.iterator]).call(t);let i;for(;(i=n.next())&&!i.done;){const a=i.value;e.call(t,a[0],a[1])}},g7=(t,e)=>{let r;const n=[];for(;(r=t.exec(e))!==null;)n.push(r);return n},y7=Qa("HTMLFormElement"),b7=t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,n,i){return n.toUpperCase()+i}),$_=(({hasOwnProperty:t})=>(e,r)=>t.call(e,r))(Object.prototype),x7=Qa("RegExp"),AT=(t,e)=>{const r=Object.getOwnPropertyDescriptors(t),n={};Gh(r,(i,a)=>{let s;(s=e(i,a,t))!==!1&&(n[a]=s||i)}),Object.defineProperties(t,n)},w7=t=>{AT(t,(e,r)=>{if(na(t)&&["arguments","caller","callee"].indexOf(r)!==-1)return!1;const n=t[r];if(na(n)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")})}})},S7=(t,e)=>{const r={},n=i=>{i.forEach(a=>{r[a]=!0})};return Ac(t)?n(t):n(String(t).split(e)),r},_7=()=>{},A7=(t,e)=>(t=+t,Number.isFinite(t)?t:e),my="abcdefghijklmnopqrstuvwxyz",z_="0123456789",DT={DIGIT:z_,ALPHA:my,ALPHA_DIGIT:my+my.toUpperCase()+z_},D7=(t=16,e=DT.ALPHA_DIGIT)=>{let r="";const{length:n}=e;for(;t--;)r+=e[Math.random()*n|0];return r};function N7(t){return!!(t&&na(t.append)&&t[Symbol.toStringTag]==="FormData"&&t[Symbol.iterator])}const E7=t=>{const e=new Array(10),r=(n,i)=>{if(Gv(n)){if(e.indexOf(n)>=0)return;if(!("toJSON"in n)){e[i]=n;const a=Ac(n)?[]:{};return Gh(n,(s,o)=>{const u=r(s,i+1);!xh(u)&&(a[o]=u)}),e[i]=void 0,a}}return n};return r(t,0)},C7=Qa("AsyncFunction"),M7=t=>t&&(Gv(t)||na(t))&&na(t.then)&&na(t.catch),Le={isArray:Ac,isArrayBuffer:bT,isBuffer:K9,isFormData:s7,isArrayBufferView:J9,isString:Q9,isNumber:xT,isBoolean:e7,isObject:Gv,isPlainObject:wm,isUndefined:xh,isDate:t7,isFile:r7,isBlob:n7,isRegExp:x7,isFunction:na,isStream:a7,isURLSearchParams:o7,isTypedArray:m7,isFileList:i7,forEach:Gh,merge:sb,extend:l7,trim:u7,stripBOM:c7,inherits:f7,toFlatObject:h7,kindOf:Yv,kindOfTest:Qa,endsWith:d7,toArray:p7,forEachEntry:v7,matchAll:g7,isHTMLForm:y7,hasOwnProperty:$_,hasOwnProp:$_,reduceDescriptors:AT,freezeMethods:w7,toObjectSet:S7,toCamelCase:b7,noop:_7,toFiniteNumber:A7,findKey:wT,global:ST,isContextDefined:_T,ALPHABET:DT,generateString:D7,isSpecCompliantForm:N7,toJSONObject:E7,isAsyncFn:C7,isThenable:M7};function nr(t,e,r,n,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=t,this.name="AxiosError",e&&(this.code=e),r&&(this.config=r),n&&(this.request=n),i&&(this.response=i)}Le.inherits(nr,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Le.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const NT=nr.prototype,ET={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(t=>{ET[t]={value:t}});Object.defineProperties(nr,ET);Object.defineProperty(NT,"isAxiosError",{value:!0});nr.from=(t,e,r,n,i,a)=>{const s=Object.create(NT);return Le.toFlatObject(t,s,function(u){return u!==Error.prototype},o=>o!=="isAxiosError"),nr.call(s,t.message,e,r,n,i),s.cause=t,s.name=t.name,a&&Object.assign(s,a),s};const T7=null;function ob(t){return Le.isPlainObject(t)||Le.isArray(t)}function CT(t){return Le.endsWith(t,"[]")?t.slice(0,-2):t}function q_(t,e,r){return t?t.concat(e).map(function(i,a){return i=CT(i),!r&&a?"["+i+"]":i}).join(r?".":""):e}function O7(t){return Le.isArray(t)&&!t.some(ob)}const F7=Le.toFlatObject(Le,{},null,function(e){return/^is[A-Z]/.test(e)});function Xv(t,e,r){if(!Le.isObject(t))throw new TypeError("target must be an object");e=e||new FormData,r=Le.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(m,b){return!Le.isUndefined(b[m])});const n=r.metaTokens,i=r.visitor||c,a=r.dots,s=r.indexes,u=(r.Blob||typeof Blob<"u"&&Blob)&&Le.isSpecCompliantForm(e);if(!Le.isFunction(i))throw new TypeError("visitor must be a function");function l(g){if(g===null)return"";if(Le.isDate(g))return g.toISOString();if(!u&&Le.isBlob(g))throw new nr("Blob is not supported. Use a Buffer instead.");return Le.isArrayBuffer(g)||Le.isTypedArray(g)?u&&typeof Blob=="function"?new Blob([g]):Buffer.from(g):g}function c(g,m,b){let y=g;if(g&&!b&&typeof g=="object"){if(Le.endsWith(m,"{}"))m=n?m:m.slice(0,-2),g=JSON.stringify(g);else if(Le.isArray(g)&&O7(g)||(Le.isFileList(g)||Le.endsWith(m,"[]"))&&(y=Le.toArray(g)))return m=CT(m),y.forEach(function(x,_){!(Le.isUndefined(x)||x===null)&&e.append(s===!0?q_([m],_,a):s===null?m:m+"[]",l(x))}),!1}return ob(g)?!0:(e.append(q_(b,m,a),l(g)),!1)}const f=[],h=Object.assign(F7,{defaultVisitor:c,convertValue:l,isVisitable:ob});function p(g,m){if(!Le.isUndefined(g)){if(f.indexOf(g)!==-1)throw Error("Circular reference detected in "+m.join("."));f.push(g),Le.forEach(g,function(y,S){(!(Le.isUndefined(y)||y===null)&&i.call(e,y,Le.isString(S)?S.trim():S,m,h))===!0&&p(y,m?m.concat(S):[S])}),f.pop()}}if(!Le.isObject(t))throw new TypeError("data must be an object");return p(t),e}function U_(t){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,function(n){return e[n]})}function S1(t,e){this._pairs=[],t&&Xv(t,this,e)}const MT=S1.prototype;MT.append=function(e,r){this._pairs.push([e,r])};MT.toString=function(e){const r=e?function(n){return e.call(this,n,U_)}:U_;return this._pairs.map(function(i){return r(i[0])+"="+r(i[1])},"").join("&")};function P7(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function TT(t,e,r){if(!e)return t;const n=r&&r.encode||P7,i=r&&r.serialize;let a;if(i?a=i(e,r):a=Le.isURLSearchParams(e)?e.toString():new S1(e,r).toString(n),a){const s=t.indexOf("#");s!==-1&&(t=t.slice(0,s)),t+=(t.indexOf("?")===-1?"?":"&")+a}return t}class H_{constructor(){this.handlers=[]}use(e,r,n){return this.handlers.push({fulfilled:e,rejected:r,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){Le.forEach(this.handlers,function(n){n!==null&&e(n)})}}const OT={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},R7=typeof URLSearchParams<"u"?URLSearchParams:S1,I7=typeof FormData<"u"?FormData:null,B7=typeof Blob<"u"?Blob:null,k7={isBrowser:!0,classes:{URLSearchParams:R7,FormData:I7,Blob:B7},protocols:["http","https","file","blob","url","data"]},FT=typeof window<"u"&&typeof document<"u",L7=(t=>FT&&["ReactNative","NativeScript","NS"].indexOf(t)<0)(typeof navigator<"u"&&navigator.product),$7=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",z7=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:FT,hasStandardBrowserEnv:L7,hasStandardBrowserWebWorkerEnv:$7},Symbol.toStringTag,{value:"Module"})),Ga={...z7,...k7};function q7(t,e){return Xv(t,new Ga.classes.URLSearchParams,Object.assign({visitor:function(r,n,i,a){return Ga.isNode&&Le.isBuffer(r)?(this.append(n,r.toString("base64")),!1):a.defaultVisitor.apply(this,arguments)}},e))}function U7(t){return Le.matchAll(/\w+|\[(\w*)]/g,t).map(e=>e[0]==="[]"?"":e[1]||e[0])}function H7(t){const e={},r=Object.keys(t);let n;const i=r.length;let a;for(n=0;n=r.length;return s=!s&&Le.isArray(i)?i.length:s,u?(Le.hasOwnProp(i,s)?i[s]=[i[s],n]:i[s]=n,!o):((!i[s]||!Le.isObject(i[s]))&&(i[s]=[]),e(r,n,i[s],a)&&Le.isArray(i[s])&&(i[s]=H7(i[s])),!o)}if(Le.isFormData(t)&&Le.isFunction(t.entries)){const r={};return Le.forEachEntry(t,(n,i)=>{e(U7(n),i,r,0)}),r}return null}function W7(t,e,r){if(Le.isString(t))try{return(e||JSON.parse)(t),Le.trim(t)}catch(n){if(n.name!=="SyntaxError")throw n}return(r||JSON.stringify)(t)}const _1={transitional:OT,adapter:["xhr","http"],transformRequest:[function(e,r){const n=r.getContentType()||"",i=n.indexOf("application/json")>-1,a=Le.isObject(e);if(a&&Le.isHTMLForm(e)&&(e=new FormData(e)),Le.isFormData(e))return i?JSON.stringify(PT(e)):e;if(Le.isArrayBuffer(e)||Le.isBuffer(e)||Le.isStream(e)||Le.isFile(e)||Le.isBlob(e))return e;if(Le.isArrayBufferView(e))return e.buffer;if(Le.isURLSearchParams(e))return r.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let o;if(a){if(n.indexOf("application/x-www-form-urlencoded")>-1)return q7(e,this.formSerializer).toString();if((o=Le.isFileList(e))||n.indexOf("multipart/form-data")>-1){const u=this.env&&this.env.FormData;return Xv(o?{"files[]":e}:e,u&&new u,this.formSerializer)}}return a||i?(r.setContentType("application/json",!1),W7(e)):e}],transformResponse:[function(e){const r=this.transitional||_1.transitional,n=r&&r.forcedJSONParsing,i=this.responseType==="json";if(e&&Le.isString(e)&&(n&&!this.responseType||i)){const s=!(r&&r.silentJSONParsing)&&i;try{return JSON.parse(e)}catch(o){if(s)throw o.name==="SyntaxError"?nr.from(o,nr.ERR_BAD_RESPONSE,this,null,this.response):o}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Ga.classes.FormData,Blob:Ga.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Le.forEach(["delete","get","head","post","put","patch"],t=>{_1.headers[t]={}});const A1=_1,V7=Le.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Y7=t=>{const e={};let r,n,i;return t&&t.split(` -`).forEach(function(s){i=s.indexOf(":"),r=s.substring(0,i).trim().toLowerCase(),n=s.substring(i+1).trim(),!(!r||e[r]&&V7[r])&&(r==="set-cookie"?e[r]?e[r].push(n):e[r]=[n]:e[r]=e[r]?e[r]+", "+n:n)}),e},W_=Symbol("internals");function $f(t){return t&&String(t).trim().toLowerCase()}function Sm(t){return t===!1||t==null?t:Le.isArray(t)?t.map(Sm):String(t)}function j7(t){const e=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(t);)e[n[1]]=n[2];return e}const G7=t=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim());function vy(t,e,r,n,i){if(Le.isFunction(n))return n.call(this,e,r);if(i&&(e=r),!!Le.isString(e)){if(Le.isString(n))return e.indexOf(n)!==-1;if(Le.isRegExp(n))return n.test(e)}}function X7(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,r,n)=>r.toUpperCase()+n)}function Z7(t,e){const r=Le.toCamelCase(" "+e);["get","set","has"].forEach(n=>{Object.defineProperty(t,n+r,{value:function(i,a,s){return this[n].call(this,e,i,a,s)},configurable:!0})})}class Zv{constructor(e){e&&this.set(e)}set(e,r,n){const i=this;function a(o,u,l){const c=$f(u);if(!c)throw new Error("header name must be a non-empty string");const f=Le.findKey(i,c);(!f||i[f]===void 0||l===!0||l===void 0&&i[f]!==!1)&&(i[f||u]=Sm(o))}const s=(o,u)=>Le.forEach(o,(l,c)=>a(l,c,u));return Le.isPlainObject(e)||e instanceof this.constructor?s(e,r):Le.isString(e)&&(e=e.trim())&&!G7(e)?s(Y7(e),r):e!=null&&a(r,e,n),this}get(e,r){if(e=$f(e),e){const n=Le.findKey(this,e);if(n){const i=this[n];if(!r)return i;if(r===!0)return j7(i);if(Le.isFunction(r))return r.call(this,i,n);if(Le.isRegExp(r))return r.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,r){if(e=$f(e),e){const n=Le.findKey(this,e);return!!(n&&this[n]!==void 0&&(!r||vy(this,this[n],n,r)))}return!1}delete(e,r){const n=this;let i=!1;function a(s){if(s=$f(s),s){const o=Le.findKey(n,s);o&&(!r||vy(n,n[o],o,r))&&(delete n[o],i=!0)}}return Le.isArray(e)?e.forEach(a):a(e),i}clear(e){const r=Object.keys(this);let n=r.length,i=!1;for(;n--;){const a=r[n];(!e||vy(this,this[a],a,e,!0))&&(delete this[a],i=!0)}return i}normalize(e){const r=this,n={};return Le.forEach(this,(i,a)=>{const s=Le.findKey(n,a);if(s){r[s]=Sm(i),delete r[a];return}const o=e?X7(a):String(a).trim();o!==a&&delete r[a],r[o]=Sm(i),n[o]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const r=Object.create(null);return Le.forEach(this,(n,i)=>{n!=null&&n!==!1&&(r[i]=e&&Le.isArray(n)?n.join(", "):n)}),r}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,r])=>e+": "+r).join(` -`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...r){const n=new this(e);return r.forEach(i=>n.set(i)),n}static accessor(e){const n=(this[W_]=this[W_]={accessors:{}}).accessors,i=this.prototype;function a(s){const o=$f(s);n[o]||(Z7(i,s),n[o]=!0)}return Le.isArray(e)?e.forEach(a):a(e),this}}Zv.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);Le.reduceDescriptors(Zv.prototype,({value:t},e)=>{let r=e[0].toUpperCase()+e.slice(1);return{get:()=>t,set(n){this[r]=n}}});Le.freezeMethods(Zv);const zs=Zv;function gy(t,e){const r=this||A1,n=e||r,i=zs.from(n.headers);let a=n.data;return Le.forEach(t,function(o){a=o.call(r,a,i.normalize(),e?e.status:void 0)}),i.normalize(),a}function RT(t){return!!(t&&t.__CANCEL__)}function Xh(t,e,r){nr.call(this,t??"canceled",nr.ERR_CANCELED,e,r),this.name="CanceledError"}Le.inherits(Xh,nr,{__CANCEL__:!0});function K7(t,e,r){const n=r.config.validateStatus;!r.status||!n||n(r.status)?t(r):e(new nr("Request failed with status code "+r.status,[nr.ERR_BAD_REQUEST,nr.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r))}const J7=Ga.hasStandardBrowserEnv?{write(t,e,r,n,i,a){const s=[t+"="+encodeURIComponent(e)];Le.isNumber(r)&&s.push("expires="+new Date(r).toGMTString()),Le.isString(n)&&s.push("path="+n),Le.isString(i)&&s.push("domain="+i),a===!0&&s.push("secure"),document.cookie=s.join("; ")},read(t){const e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(t){this.write(t,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function Q7(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}function eq(t,e){return e?t.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):t}function IT(t,e){return t&&!Q7(e)?eq(t,e):e}const tq=Ga.hasStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a");let n;function i(a){let s=a;return e&&(r.setAttribute("href",s),s=r.href),r.setAttribute("href",s),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:r.pathname.charAt(0)==="/"?r.pathname:"/"+r.pathname}}return n=i(window.location.href),function(s){const o=Le.isString(s)?i(s):s;return o.protocol===n.protocol&&o.host===n.host}}():function(){return function(){return!0}}();function rq(t){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}function nq(t,e){t=t||10;const r=new Array(t),n=new Array(t);let i=0,a=0,s;return e=e!==void 0?e:1e3,function(u){const l=Date.now(),c=n[a];s||(s=l),r[i]=u,n[i]=l;let f=a,h=0;for(;f!==i;)h+=r[f++],f=f%t;if(i=(i+1)%t,i===a&&(a=(a+1)%t),l-s{const a=i.loaded,s=i.lengthComputable?i.total:void 0,o=a-r,u=n(o),l=a<=s;r=a;const c={loaded:a,total:s,progress:s?a/s:void 0,bytes:o,rate:u||void 0,estimated:u&&s&&l?(s-a)/u:void 0,event:i};c[e?"download":"upload"]=!0,t(c)}}const iq=typeof XMLHttpRequest<"u",aq=iq&&function(t){return new Promise(function(r,n){let i=t.data;const a=zs.from(t.headers).normalize();let{responseType:s,withXSRFToken:o}=t,u;function l(){t.cancelToken&&t.cancelToken.unsubscribe(u),t.signal&&t.signal.removeEventListener("abort",u)}let c;if(Le.isFormData(i)){if(Ga.hasStandardBrowserEnv||Ga.hasStandardBrowserWebWorkerEnv)a.setContentType(!1);else if((c=a.getContentType())!==!1){const[m,...b]=c?c.split(";").map(y=>y.trim()).filter(Boolean):[];a.setContentType([m||"multipart/form-data",...b].join("; "))}}let f=new XMLHttpRequest;if(t.auth){const m=t.auth.username||"",b=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";a.set("Authorization","Basic "+btoa(m+":"+b))}const h=IT(t.baseURL,t.url);f.open(t.method.toUpperCase(),TT(h,t.params,t.paramsSerializer),!0),f.timeout=t.timeout;function p(){if(!f)return;const m=zs.from("getAllResponseHeaders"in f&&f.getAllResponseHeaders()),y={data:!s||s==="text"||s==="json"?f.responseText:f.response,status:f.status,statusText:f.statusText,headers:m,config:t,request:f};K7(function(x){r(x),l()},function(x){n(x),l()},y),f=null}if("onloadend"in f?f.onloadend=p:f.onreadystatechange=function(){!f||f.readyState!==4||f.status===0&&!(f.responseURL&&f.responseURL.indexOf("file:")===0)||setTimeout(p)},f.onabort=function(){f&&(n(new nr("Request aborted",nr.ECONNABORTED,t,f)),f=null)},f.onerror=function(){n(new nr("Network Error",nr.ERR_NETWORK,t,f)),f=null},f.ontimeout=function(){let b=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded";const y=t.transitional||OT;t.timeoutErrorMessage&&(b=t.timeoutErrorMessage),n(new nr(b,y.clarifyTimeoutError?nr.ETIMEDOUT:nr.ECONNABORTED,t,f)),f=null},Ga.hasStandardBrowserEnv&&(o&&Le.isFunction(o)&&(o=o(t)),o||o!==!1&&tq(h))){const m=t.xsrfHeaderName&&t.xsrfCookieName&&J7.read(t.xsrfCookieName);m&&a.set(t.xsrfHeaderName,m)}i===void 0&&a.setContentType(null),"setRequestHeader"in f&&Le.forEach(a.toJSON(),function(b,y){f.setRequestHeader(y,b)}),Le.isUndefined(t.withCredentials)||(f.withCredentials=!!t.withCredentials),s&&s!=="json"&&(f.responseType=t.responseType),typeof t.onDownloadProgress=="function"&&f.addEventListener("progress",V_(t.onDownloadProgress,!0)),typeof t.onUploadProgress=="function"&&f.upload&&f.upload.addEventListener("progress",V_(t.onUploadProgress)),(t.cancelToken||t.signal)&&(u=m=>{f&&(n(!m||m.type?new Xh(null,t,f):m),f.abort(),f=null)},t.cancelToken&&t.cancelToken.subscribe(u),t.signal&&(t.signal.aborted?u():t.signal.addEventListener("abort",u)));const g=rq(h);if(g&&Ga.protocols.indexOf(g)===-1){n(new nr("Unsupported protocol "+g+":",nr.ERR_BAD_REQUEST,t));return}f.send(i||null)})},ub={http:T7,xhr:aq};Le.forEach(ub,(t,e)=>{if(t){try{Object.defineProperty(t,"name",{value:e})}catch{}Object.defineProperty(t,"adapterName",{value:e})}});const Y_=t=>`- ${t}`,sq=t=>Le.isFunction(t)||t===null||t===!1,BT={getAdapter:t=>{t=Le.isArray(t)?t:[t];const{length:e}=t;let r,n;const i={};for(let a=0;a`adapter ${o} `+(u===!1?"is not supported by the environment":"is not available in the build"));let s=e?a.length>1?`since : -`+a.map(Y_).join(` -`):" "+Y_(a[0]):"as no adapter specified";throw new nr("There is no suitable adapter to dispatch the request "+s,"ERR_NOT_SUPPORT")}return n},adapters:ub};function yy(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new Xh(null,t)}function j_(t){return yy(t),t.headers=zs.from(t.headers),t.data=gy.call(t,t.transformRequest),["post","put","patch"].indexOf(t.method)!==-1&&t.headers.setContentType("application/x-www-form-urlencoded",!1),BT.getAdapter(t.adapter||A1.adapter)(t).then(function(n){return yy(t),n.data=gy.call(t,t.transformResponse,n),n.headers=zs.from(n.headers),n},function(n){return RT(n)||(yy(t),n&&n.response&&(n.response.data=gy.call(t,t.transformResponse,n.response),n.response.headers=zs.from(n.response.headers))),Promise.reject(n)})}const G_=t=>t instanceof zs?t.toJSON():t;function nc(t,e){e=e||{};const r={};function n(l,c,f){return Le.isPlainObject(l)&&Le.isPlainObject(c)?Le.merge.call({caseless:f},l,c):Le.isPlainObject(c)?Le.merge({},c):Le.isArray(c)?c.slice():c}function i(l,c,f){if(Le.isUndefined(c)){if(!Le.isUndefined(l))return n(void 0,l,f)}else return n(l,c,f)}function a(l,c){if(!Le.isUndefined(c))return n(void 0,c)}function s(l,c){if(Le.isUndefined(c)){if(!Le.isUndefined(l))return n(void 0,l)}else return n(void 0,c)}function o(l,c,f){if(f in e)return n(l,c);if(f in t)return n(void 0,l)}const u={url:a,method:a,data:a,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:o,headers:(l,c)=>i(G_(l),G_(c),!0)};return Le.forEach(Object.keys(Object.assign({},t,e)),function(c){const f=u[c]||i,h=f(t[c],e[c],c);Le.isUndefined(h)&&f!==o||(r[c]=h)}),r}const kT="1.6.7",D1={};["object","boolean","number","function","string","symbol"].forEach((t,e)=>{D1[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}});const X_={};D1.transitional=function(e,r,n){function i(a,s){return"[Axios v"+kT+"] Transitional option '"+a+"'"+s+(n?". "+n:"")}return(a,s,o)=>{if(e===!1)throw new nr(i(s," has been removed"+(r?" in "+r:"")),nr.ERR_DEPRECATED);return r&&!X_[s]&&(X_[s]=!0,console.warn(i(s," has been deprecated since v"+r+" and will be removed in the near future"))),e?e(a,s,o):!0}};function oq(t,e,r){if(typeof t!="object")throw new nr("options must be an object",nr.ERR_BAD_OPTION_VALUE);const n=Object.keys(t);let i=n.length;for(;i-- >0;){const a=n[i],s=e[a];if(s){const o=t[a],u=o===void 0||s(o,a,t);if(u!==!0)throw new nr("option "+a+" must be "+u,nr.ERR_BAD_OPTION_VALUE);continue}if(r!==!0)throw new nr("Unknown option "+a,nr.ERR_BAD_OPTION)}}const lb={assertOptions:oq,validators:D1},bo=lb.validators;class qm{constructor(e){this.defaults=e,this.interceptors={request:new H_,response:new H_}}async request(e,r){try{return await this._request(e,r)}catch(n){if(n instanceof Error){let i;Error.captureStackTrace?Error.captureStackTrace(i={}):i=new Error;const a=i.stack?i.stack.replace(/^.+\n/,""):"";n.stack?a&&!String(n.stack).endsWith(a.replace(/^.+\n.+\n/,""))&&(n.stack+=` -`+a):n.stack=a}throw n}}_request(e,r){typeof e=="string"?(r=r||{},r.url=e):r=e||{},r=nc(this.defaults,r);const{transitional:n,paramsSerializer:i,headers:a}=r;n!==void 0&&lb.assertOptions(n,{silentJSONParsing:bo.transitional(bo.boolean),forcedJSONParsing:bo.transitional(bo.boolean),clarifyTimeoutError:bo.transitional(bo.boolean)},!1),i!=null&&(Le.isFunction(i)?r.paramsSerializer={serialize:i}:lb.assertOptions(i,{encode:bo.function,serialize:bo.function},!0)),r.method=(r.method||this.defaults.method||"get").toLowerCase();let s=a&&Le.merge(a.common,a[r.method]);a&&Le.forEach(["delete","get","head","post","put","patch","common"],g=>{delete a[g]}),r.headers=zs.concat(s,a);const o=[];let u=!0;this.interceptors.request.forEach(function(m){typeof m.runWhen=="function"&&m.runWhen(r)===!1||(u=u&&m.synchronous,o.unshift(m.fulfilled,m.rejected))});const l=[];this.interceptors.response.forEach(function(m){l.push(m.fulfilled,m.rejected)});let c,f=0,h;if(!u){const g=[j_.bind(this),void 0];for(g.unshift.apply(g,o),g.push.apply(g,l),h=g.length,c=Promise.resolve(r);f{if(!n._listeners)return;let a=n._listeners.length;for(;a-- >0;)n._listeners[a](i);n._listeners=null}),this.promise.then=i=>{let a;const s=new Promise(o=>{n.subscribe(o),a=o}).then(i);return s.cancel=function(){n.unsubscribe(a)},s},e(function(a,s,o){n.reason||(n.reason=new Xh(a,s,o),r(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const r=this._listeners.indexOf(e);r!==-1&&this._listeners.splice(r,1)}static source(){let e;return{token:new N1(function(i){e=i}),cancel:e}}}const uq=N1;function lq(t){return function(r){return t.apply(null,r)}}function cq(t){return Le.isObject(t)&&t.isAxiosError===!0}const cb={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(cb).forEach(([t,e])=>{cb[e]=t});const fq=cb;function LT(t){const e=new _m(t),r=yT(_m.prototype.request,e);return Le.extend(r,_m.prototype,e,{allOwnKeys:!0}),Le.extend(r,e,null,{allOwnKeys:!0}),r.create=function(i){return LT(nc(t,i))},r}const rn=LT(A1);rn.Axios=_m;rn.CanceledError=Xh;rn.CancelToken=uq;rn.isCancel=RT;rn.VERSION=kT;rn.toFormData=Xv;rn.AxiosError=nr;rn.Cancel=rn.CanceledError;rn.all=function(e){return Promise.all(e)};rn.spread=lq;rn.isAxiosError=cq;rn.mergeConfig=nc;rn.AxiosHeaders=zs;rn.formToJSON=t=>PT(Le.isHTMLForm(t)?new FormData(t):t);rn.getAdapter=BT.getAdapter;rn.HttpStatusCode=fq;rn.default=rn;const YAe=rn;/*! + */(function(t,e){(function(n,i){t.exports=i()})(window,function(){return function(r){var n={};function i(a){if(n[a])return n[a].exports;var s=n[a]={i:a,l:!1,exports:{}};return r[a].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=r,i.c=n,i.d=function(a,s,o){i.o(a,s)||Object.defineProperty(a,s,{enumerable:!0,get:o})},i.r=function(a){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})},i.t=function(a,s){if(s&1&&(a=i(a)),s&8||s&4&&typeof a=="object"&&a&&a.__esModule)return a;var o=Object.create(null);if(i.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:a}),s&2&&typeof a!="string")for(var u in a)i.d(o,u,(function(l){return a[l]}).bind(null,u));return o},i.n=function(a){var s=a&&a.__esModule?function(){return a.default}:function(){return a};return i.d(s,"a",s),s},i.o=function(a,s){return Object.prototype.hasOwnProperty.call(a,s)},i.p="",i(i.s=2)}([function(r,n,i){var a=this&&this.__extends||function(){var m=function(b,y){return m=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(S,x){S.__proto__=x}||function(S,x){for(var _ in x)x.hasOwnProperty(_)&&(S[_]=x[_])},m(b,y)};return function(b,y){m(b,y);function S(){this.constructor=b}b.prototype=y===null?Object.create(y):(S.prototype=y.prototype,new S)}}();Object.defineProperty(n,"__esModule",{value:!0});var s=256,o=function(){function m(b){b===void 0&&(b="="),this._paddingCharacter=b}return m.prototype.encodedLength=function(b){return this._paddingCharacter?(b+2)/3*4|0:(b*8+5)/6|0},m.prototype.encode=function(b){for(var y="",S=0;S>>3*6&63),y+=this._encodeByte(x>>>2*6&63),y+=this._encodeByte(x>>>1*6&63),y+=this._encodeByte(x>>>0*6&63)}var _=b.length-S;if(_>0){var x=b[S]<<16|(_===2?b[S+1]<<8:0);y+=this._encodeByte(x>>>3*6&63),y+=this._encodeByte(x>>>2*6&63),_===2?y+=this._encodeByte(x>>>1*6&63):y+=this._paddingCharacter||"",y+=this._paddingCharacter||""}return y},m.prototype.maxDecodedLength=function(b){return this._paddingCharacter?b/4*3|0:(b*6+7)/8|0},m.prototype.decodedLength=function(b){return this.maxDecodedLength(b.length-this._getPaddingLength(b))},m.prototype.decode=function(b){if(b.length===0)return new Uint8Array(0);for(var y=this._getPaddingLength(b),S=b.length-y,x=new Uint8Array(this.maxDecodedLength(S)),_=0,A=0,w=0,C=0,N=0,E=0,M=0;A>>4,x[_++]=N<<4|E>>>2,x[_++]=E<<6|M,w|=C&s,w|=N&s,w|=E&s,w|=M&s;if(A>>4,w|=C&s,w|=N&s),A>>2,w|=E&s),A>>8&6,y+=51-b>>>8&-75,y+=61-b>>>8&-15,y+=62-b>>>8&3,String.fromCharCode(y)},m.prototype._decodeChar=function(b){var y=s;return y+=(42-b&b-44)>>>8&-s+b-43+62,y+=(46-b&b-48)>>>8&-s+b-47+63,y+=(47-b&b-58)>>>8&-s+b-48+52,y+=(64-b&b-91)>>>8&-s+b-65+0,y+=(96-b&b-123)>>>8&-s+b-97+26,y},m.prototype._getPaddingLength=function(b){var y=0;if(this._paddingCharacter){for(var S=b.length-1;S>=0&&b[S]===this._paddingCharacter;S--)y++;if(b.length<4||y>2)throw new Error("Base64Coder: incorrect padding")}return y},m}();n.Coder=o;var u=new o;function l(m){return u.encode(m)}n.encode=l;function c(m){return u.decode(m)}n.decode=c;var f=function(m){a(b,m);function b(){return m!==null&&m.apply(this,arguments)||this}return b.prototype._encodeByte=function(y){var S=y;return S+=65,S+=25-y>>>8&6,S+=51-y>>>8&-75,S+=61-y>>>8&-13,S+=62-y>>>8&49,String.fromCharCode(S)},b.prototype._decodeChar=function(y){var S=s;return S+=(44-y&y-46)>>>8&-s+y-45+62,S+=(94-y&y-96)>>>8&-s+y-95+63,S+=(47-y&y-58)>>>8&-s+y-48+52,S+=(64-y&y-91)>>>8&-s+y-65+0,S+=(96-y&y-123)>>>8&-s+y-97+26,S},b}(o);n.URLSafeCoder=f;var h=new f;function p(m){return h.encode(m)}n.encodeURLSafe=p;function g(m){return h.decode(m)}n.decodeURLSafe=g,n.encodedLength=function(m){return u.encodedLength(m)},n.maxDecodedLength=function(m){return u.maxDecodedLength(m)},n.decodedLength=function(m){return u.decodedLength(m)}},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0});var a="utf8: invalid string",s="utf8: invalid source encoding";function o(c){for(var f=new Uint8Array(u(c)),h=0,p=0;p>6,f[h++]=128|g&63):g<55296?(f[h++]=224|g>>12,f[h++]=128|g>>6&63,f[h++]=128|g&63):(p++,g=(g&1023)<<10,g|=c.charCodeAt(p)&1023,g+=65536,f[h++]=240|g>>18,f[h++]=128|g>>12&63,f[h++]=128|g>>6&63,f[h++]=128|g&63)}return f}n.encode=o;function u(c){for(var f=0,h=0;h=c.length-1)throw new Error(a);h++,f+=4}else throw new Error(a)}return f}n.encodedLength=u;function l(c){for(var f=[],h=0;h=c.length)throw new Error(s);var m=c[++h];if((m&192)!==128)throw new Error(s);p=(p&31)<<6|m&63,g=128}else if(p<240){if(h>=c.length-1)throw new Error(s);var m=c[++h],b=c[++h];if((m&192)!==128||(b&192)!==128)throw new Error(s);p=(p&15)<<12|(m&63)<<6|b&63,g=2048}else if(p<248){if(h>=c.length-2)throw new Error(s);var m=c[++h],b=c[++h],y=c[++h];if((m&192)!==128||(b&192)!==128||(y&192)!==128)throw new Error(s);p=(p&15)<<18|(m&63)<<12|(b&63)<<6|y&63,g=65536}else throw new Error(s);if(p=55296&&p<=57343)throw new Error(s);if(p>=65536){if(p>1114111)throw new Error(s);p-=65536,f.push(String.fromCharCode(55296|p>>10)),p=56320|p&1023}}f.push(String.fromCharCode(p))}return f.join("")}n.decode=l},function(r,n,i){r.exports=i(3).default},function(r,n,i){i.r(n);class a{constructor(T,L){this.lastId=0,this.prefix=T,this.name=L}create(T){this.lastId++;var L=this.lastId,Q=this.prefix+L,ie=this.name+"["+L+"]",Oe=!1,Ze=function(){Oe||(T.apply(null,arguments),Oe=!0)};return this[L]=Ze,{number:L,id:Q,name:ie,callback:Ze}}remove(T){delete this[T.number]}}var s=new a("_pusher_script_","Pusher.ScriptReceivers"),o={VERSION:"8.4.0-rc2",PROTOCOL:7,wsPort:80,wssPort:443,wsPath:"",httpHost:"sockjs.pusher.com",httpPort:80,httpsPort:443,httpPath:"/pusher",stats_host:"stats.pusher.com",authEndpoint:"/pusher/auth",authTransport:"ajax",activityTimeout:12e4,pongTimeout:3e4,unavailableTimeout:1e4,userAuthentication:{endpoint:"/pusher/user-auth",transport:"ajax"},channelAuthorization:{endpoint:"/pusher/auth",transport:"ajax"},cdn_http:"http://js.pusher.com",cdn_https:"https://js.pusher.com",dependency_suffix:""},u=o;class l{constructor(T){this.options=T,this.receivers=T.receivers||s,this.loading={}}load(T,L,Q){var ie=this;if(ie.loading[T]&&ie.loading[T].length>0)ie.loading[T].push(Q);else{ie.loading[T]=[Q];var Oe=et.createScriptRequest(ie.getPath(T,L)),Ze=ie.receivers.create(function(st){if(ie.receivers.remove(Ze),ie.loading[T]){var _t=ie.loading[T];delete ie.loading[T];for(var Yt=function($r){$r||Oe.cleanup()},ar=0;ar<_t.length;ar++)_t[ar](st,Yt)}});Oe.send(Ze)}}getRoot(T){var L,Q=et.getDocument().location.protocol;return T&&T.useTLS||Q==="https:"?L=this.options.cdn_https:L=this.options.cdn_http,L.replace(/\/*$/,"")+"/"+this.options.version}getPath(T,L){return this.getRoot(L)+"/"+T+this.options.suffix+".js"}}var c=new a("_pusher_dependencies","Pusher.DependenciesReceivers"),f=new l({cdn_http:u.cdn_http,cdn_https:u.cdn_https,version:u.VERSION,suffix:u.dependency_suffix,receivers:c});const h={baseUrl:"https://pusher.com",urls:{authenticationEndpoint:{path:"/docs/channels/server_api/authenticating_users"},authorizationEndpoint:{path:"/docs/channels/server_api/authorizing-users/"},javascriptQuickStart:{path:"/docs/javascript_quick_start"},triggeringClientEvents:{path:"/docs/client_api_guide/client_events#trigger-events"},encryptedChannelSupport:{fullUrl:"https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support"}}};var g={buildLogSuffix:function(z){const T="See:",L=h.urls[z];if(!L)return"";let Q;return L.fullUrl?Q=L.fullUrl:L.path&&(Q=h.baseUrl+L.path),Q?`${T} ${Q}`:""}},m;(function(z){z.UserAuthentication="user-authentication",z.ChannelAuthorization="channel-authorization"})(m||(m={}));class b extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class y extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class S extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class x extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class _ extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class A extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class w extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class C extends Error{constructor(T){super(T),Object.setPrototypeOf(this,new.target.prototype)}}class N extends Error{constructor(T,L){super(L),this.status=T,Object.setPrototypeOf(this,new.target.prototype)}}var M=function(z,T,L,Q,ie){const Oe=et.createXHR();Oe.open("POST",L.endpoint,!0),Oe.setRequestHeader("Content-Type","application/x-www-form-urlencoded");for(var Ze in L.headers)Oe.setRequestHeader(Ze,L.headers[Ze]);if(L.headersProvider!=null){let st=L.headersProvider();for(var Ze in st)Oe.setRequestHeader(Ze,st[Ze])}return Oe.onreadystatechange=function(){if(Oe.readyState===4)if(Oe.status===200){let st,_t=!1;try{st=JSON.parse(Oe.responseText),_t=!0}catch{ie(new N(200,`JSON returned from ${Q.toString()} endpoint was invalid, yet status code was 200. Data was: ${Oe.responseText}`),null)}_t&&ie(null,st)}else{let st="";switch(Q){case m.UserAuthentication:st=g.buildLogSuffix("authenticationEndpoint");break;case m.ChannelAuthorization:st=`Clients must be authorized to join private or presence channels. ${g.buildLogSuffix("authorizationEndpoint")}`;break}ie(new N(Oe.status,`Unable to retrieve auth string from ${Q.toString()} endpoint - received status: ${Oe.status} from ${L.endpoint}. ${st}`),null)}},Oe.send(T),Oe};function O(z){return k(H(z))}var F=String.fromCharCode,q="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",V=function(z){var T=z.charCodeAt(0);return T<128?z:T<2048?F(192|T>>>6)+F(128|T&63):F(224|T>>>12&15)+F(128|T>>>6&63)+F(128|T&63)},H=function(z){return z.replace(/[^\x00-\x7F]/g,V)},B=function(z){var T=[0,2,1][z.length%3],L=z.charCodeAt(0)<<16|(z.length>1?z.charCodeAt(1):0)<<8|(z.length>2?z.charCodeAt(2):0),Q=[q.charAt(L>>>18),q.charAt(L>>>12&63),T>=2?"=":q.charAt(L>>>6&63),T>=1?"=":q.charAt(L&63)];return Q.join("")},k=window.btoa||function(z){return z.replace(/[\s\S]{1,3}/g,B)};class K{constructor(T,L,Q,ie){this.clear=L,this.timer=T(()=>{this.timer&&(this.timer=ie(this.timer))},Q)}isRunning(){return this.timer!==null}ensureAborted(){this.timer&&(this.clear(this.timer),this.timer=null)}}var $=K;function se(z){window.clearTimeout(z)}function he(z){window.clearInterval(z)}class ne extends ${constructor(T,L){super(setTimeout,se,T,function(Q){return L(),null})}}class X extends ${constructor(T,L){super(setInterval,he,T,function(Q){return L(),Q})}}var de={now(){return Date.now?Date.now():new Date().valueOf()},defer(z){return new ne(0,z)},method(z,...T){var L=Array.prototype.slice.call(arguments,1);return function(Q){return Q[z].apply(Q,L.concat(arguments))}}},Se=de;function ce(z,...T){for(var L=0;L{window.console&&window.console.log&&window.console.log(T)}}debug(...T){this.log(this.globalLog,T)}warn(...T){this.log(this.globalLogWarn,T)}error(...T){this.log(this.globalLogError,T)}globalLogWarn(T){window.console&&window.console.warn?window.console.warn(T):this.globalLog(T)}globalLogError(T){window.console&&window.console.error?window.console.error(T):this.globalLogWarn(T)}log(T,...L){var Q=xe.apply(this,arguments);yf.log?yf.log(Q):yf.logToConsole&&T.bind(this)(Q)}}var Y=new U,pe=function(z,T,L,Q,ie){(L.headers!==void 0||L.headersProvider!=null)&&Y.warn(`To send headers with the ${Q.toString()} request, you must use AJAX, rather than JSONP.`);var Oe=z.nextAuthCallbackID.toString();z.nextAuthCallbackID++;var Ze=z.getDocument(),st=Ze.createElement("script");z.auth_callbacks[Oe]=function(ar){ie(null,ar)};var _t="Pusher.auth_callbacks['"+Oe+"']";st.src=L.endpoint+"?callback="+encodeURIComponent(_t)+"&"+T;var Yt=Ze.getElementsByTagName("head")[0]||Ze.documentElement;Yt.insertBefore(st,Yt.firstChild)},ge=pe;class De{constructor(T){this.src=T}send(T){var L=this,Q="Error loading "+L.src;L.script=document.createElement("script"),L.script.id=T.id,L.script.src=L.src,L.script.type="text/javascript",L.script.charset="UTF-8",L.script.addEventListener?(L.script.onerror=function(){T.callback(Q)},L.script.onload=function(){T.callback(null)}):L.script.onreadystatechange=function(){(L.script.readyState==="loaded"||L.script.readyState==="complete")&&T.callback(null)},L.script.async===void 0&&document.attachEvent&&/opera/i.test(navigator.userAgent)?(L.errorScript=document.createElement("script"),L.errorScript.id=T.id+"_error",L.errorScript.text=T.name+"('"+Q+"');",L.script.async=L.errorScript.async=!1):L.script.async=!0;var ie=document.getElementsByTagName("head")[0];ie.insertBefore(L.script,ie.firstChild),L.errorScript&&ie.insertBefore(L.errorScript,L.script.nextSibling)}cleanup(){this.script&&(this.script.onload=this.script.onerror=null,this.script.onreadystatechange=null),this.script&&this.script.parentNode&&this.script.parentNode.removeChild(this.script),this.errorScript&&this.errorScript.parentNode&&this.errorScript.parentNode.removeChild(this.errorScript),this.script=null,this.errorScript=null}}class Pe{constructor(T,L){this.url=T,this.data=L}send(T){if(!this.request){var L=Ne(this.data),Q=this.url+"/"+T.number+"?"+L;this.request=et.createScriptRequest(Q),this.request.send(T)}}cleanup(){this.request&&this.request.cleanup()}}var ke=function(z,T){return function(L,Q){var ie="http"+(T?"s":"")+"://",Oe=ie+(z.host||z.options.host)+z.options.path,Ze=et.createJSONPRequest(Oe,L),st=et.ScriptReceivers.create(function(_t,Yt){s.remove(st),Ze.cleanup(),Yt&&Yt.host&&(z.host=Yt.host),Q&&Q(_t,Yt)});Ze.send(st)}},Ve={name:"jsonp",getAgent:ke},ze=Ve;function vt(z,T,L){var Q=z+(T.useTLS?"s":""),ie=T.useTLS?T.hostTLS:T.hostNonTLS;return Q+"://"+ie+L}function St(z,T){var L="/app/"+z,Q="?protocol="+u.PROTOCOL+"&client=js&version="+u.VERSION+(T?"&"+T:"");return L+Q}var at={getInitial:function(z,T){var L=(T.httpPath||"")+St(z,"flash=false");return vt("ws",T,L)}},mr={getInitial:function(z,T){var L=(T.httpPath||"/pusher")+St(z);return vt("http",T,L)}},I={getInitial:function(z,T){return vt("http",T,T.httpPath||"/pusher")},getPath:function(z,T){return St(z)}};class oe{constructor(){this._callbacks={}}get(T){return this._callbacks[Ae(T)]}add(T,L,Q){var ie=Ae(T);this._callbacks[ie]=this._callbacks[ie]||[],this._callbacks[ie].push({fn:L,context:Q})}remove(T,L,Q){if(!T&&!L&&!Q){this._callbacks={};return}var ie=T?[Ae(T)]:we(this._callbacks);L||Q?this.removeCallback(ie,L,Q):this.removeAllCallbacks(ie)}removeCallback(T,L,Q){Ce(T,function(ie){this._callbacks[ie]=J(this._callbacks[ie]||[],function(Oe){return L&&L!==Oe.fn||Q&&Q!==Oe.context}),this._callbacks[ie].length===0&&delete this._callbacks[ie]},this)}removeAllCallbacks(T){Ce(T,function(L){delete this._callbacks[L]},this)}}function Ae(z){return"_"+z}class $e{constructor(T){this.callbacks=new oe,this.global_callbacks=[],this.failThrough=T}bind(T,L,Q){return this.callbacks.add(T,L,Q),this}bind_global(T){return this.global_callbacks.push(T),this}unbind(T,L,Q){return this.callbacks.remove(T,L,Q),this}unbind_global(T){return T?(this.global_callbacks=J(this.global_callbacks||[],L=>L!==T),this):(this.global_callbacks=[],this)}unbind_all(){return this.unbind(),this.unbind_global(),this}emit(T,L,Q){for(var ie=0;ie0)for(var ie=0;ie{this.onError(L),this.changeState("closed")}),!1}return this.bindListeners(),Y.debug("Connecting",{transport:this.name,url:T}),this.changeState("connecting"),!0}close(){return this.socket?(this.socket.close(),!0):!1}send(T){return this.state==="open"?(Se.defer(()=>{this.socket&&this.socket.send(T)}),!0):!1}ping(){this.state==="open"&&this.supportsPing()&&this.socket.ping()}onOpen(){this.hooks.beforeOpen&&this.hooks.beforeOpen(this.socket,this.hooks.urls.getPath(this.key,this.options)),this.changeState("open"),this.socket.onopen=void 0}onError(T){this.emit("error",{type:"WebSocketError",error:T}),this.timeline.error(this.buildTimelineMessage({error:T.toString()}))}onClose(T){T?this.changeState("closed",{code:T.code,reason:T.reason,wasClean:T.wasClean}):this.changeState("closed"),this.unbindListeners(),this.socket=void 0}onMessage(T){this.emit("message",T)}onActivity(){this.emit("activity")}bindListeners(){this.socket.onopen=()=>{this.onOpen()},this.socket.onerror=T=>{this.onError(T)},this.socket.onclose=T=>{this.onClose(T)},this.socket.onmessage=T=>{this.onMessage(T)},this.supportsPing()&&(this.socket.onactivity=()=>{this.onActivity()})}unbindListeners(){this.socket&&(this.socket.onopen=void 0,this.socket.onerror=void 0,this.socket.onclose=void 0,this.socket.onmessage=void 0,this.supportsPing()&&(this.socket.onactivity=void 0))}changeState(T,L){this.state=T,this.timeline.info(this.buildTimelineMessage({state:T,params:L})),this.emit(T,L)}buildTimelineMessage(T){return ce({cid:this.id},T)}}class ht{constructor(T){this.hooks=T}isSupported(T){return this.hooks.isSupported(T)}createConnection(T,L,Q,ie){return new ct(this.hooks,T,L,Q,ie)}}var Dn=new ht({urls:at,handlesActivityChecks:!1,supportsPing:!1,isInitialized:function(){return!!et.getWebSocketAPI()},isSupported:function(){return!!et.getWebSocketAPI()},getSocket:function(z){return et.createWebSocket(z)}}),ro={urls:mr,handlesActivityChecks:!1,supportsPing:!0,isInitialized:function(){return!0}},ll=ce({getSocket:function(z){return et.HTTPFactory.createStreamingSocket(z)}},ro),cl=ce({getSocket:function(z){return et.HTTPFactory.createPollingSocket(z)}},ro),nu={isSupported:function(){return et.isXHRSupported()}},Yc=new ht(ce({},ll,nu)),jc=new ht(ce({},cl,nu)),Gc={ws:Dn,xhr_streaming:Yc,xhr_polling:jc},La=Gc,Xc=new ht({file:"sockjs",urls:I,handlesActivityChecks:!0,supportsPing:!1,isSupported:function(){return!0},isInitialized:function(){return window.SockJS!==void 0},getSocket:function(z,T){return new window.SockJS(z,null,{js_path:f.getPath("sockjs",{useTLS:T.useTLS}),ignore_null_origin:T.ignoreNullOrigin})},beforeOpen:function(z,T){z.send(JSON.stringify({path:T}))}}),no={isSupported:function(z){var T=et.isXDRSupported(z.useTLS);return T}},Zc=new ht(ce({},ll,no)),Kc=new ht(ce({},cl,no));La.xdr_streaming=Zc,La.xdr_polling=Kc,La.sockjs=Xc;var Jc=La;class Qc extends $e{constructor(){super();var T=this;window.addEventListener!==void 0&&(window.addEventListener("online",function(){T.emit("online")},!1),window.addEventListener("offline",function(){T.emit("offline")},!1))}isOnline(){return window.navigator.onLine===void 0?!0:window.navigator.onLine}}var ef=new Qc;class tf{constructor(T,L,Q){this.manager=T,this.transport=L,this.minPingDelay=Q.minPingDelay,this.maxPingDelay=Q.maxPingDelay,this.pingDelay=void 0}createConnection(T,L,Q,ie){ie=ce({},ie,{activityTimeout:this.pingDelay});var Oe=this.transport.createConnection(T,L,Q,ie),Ze=null,st=function(){Oe.unbind("open",st),Oe.bind("closed",_t),Ze=Se.now()},_t=Yt=>{if(Oe.unbind("closed",_t),Yt.code===1002||Yt.code===1003)this.manager.reportDeath();else if(!Yt.wasClean&&Ze){var ar=Se.now()-Ze;ar<2*this.maxPingDelay&&(this.manager.reportDeath(),this.pingDelay=Math.max(ar/2,this.minPingDelay))}};return Oe.bind("open",st),Oe}isSupported(T){return this.manager.isAlive()&&this.transport.isSupported(T)}}const fl={decodeMessage:function(z){try{var T=JSON.parse(z.data),L=T.data;if(typeof L=="string")try{L=JSON.parse(T.data)}catch{}var Q={event:T.event,channel:T.channel,data:L};return T.user_id&&(Q.user_id=T.user_id),Q}catch(ie){throw{type:"MessageParseError",error:ie,data:z.data}}},encodeMessage:function(z){return JSON.stringify(z)},processHandshake:function(z){var T=fl.decodeMessage(z);if(T.event==="pusher:connection_established"){if(!T.data.activity_timeout)throw"No activity timeout specified in handshake";return{action:"connected",id:T.data.socket_id,activityTimeout:T.data.activity_timeout*1e3}}else{if(T.event==="pusher:error")return{action:this.getCloseAction(T.data),error:this.getCloseError(T.data)};throw"Invalid handshake"}},getCloseAction:function(z){return z.code<4e3?z.code>=1002&&z.code<=1004?"backoff":null:z.code===4e3?"tls_only":z.code<4100?"refused":z.code<4200?"backoff":z.code<4300?"retry":"refused"},getCloseError:function(z){return z.code!==1e3&&z.code!==1001?{type:"PusherError",data:{code:z.code,message:z.reason||z.message}}:null}};var pa=fl;class hl extends $e{constructor(T,L){super(),this.id=T,this.transport=L,this.activityTimeout=L.activityTimeout,this.bindListeners()}handlesActivityChecks(){return this.transport.handlesActivityChecks()}send(T){return this.transport.send(T)}send_event(T,L,Q){var ie={event:T,data:L};return Q&&(ie.channel=Q),Y.debug("Event sent",ie),this.send(pa.encodeMessage(ie))}ping(){this.transport.supportsPing()?this.transport.ping():this.send_event("pusher:ping",{})}close(){this.transport.close()}bindListeners(){var T={message:Q=>{var ie;try{ie=pa.decodeMessage(Q)}catch(Oe){this.emit("error",{type:"MessageParseError",error:Oe,data:Q.data})}if(ie!==void 0){switch(Y.debug("Event recd",ie),ie.event){case"pusher:error":this.emit("error",{type:"PusherError",data:ie.data});break;case"pusher:ping":this.emit("ping");break;case"pusher:pong":this.emit("pong");break}this.emit("message",ie)}},activity:()=>{this.emit("activity")},error:Q=>{this.emit("error",Q)},closed:Q=>{L(),Q&&Q.code&&this.handleCloseEvent(Q),this.transport=null,this.emit("closed")}},L=()=>{me(T,(Q,ie)=>{this.transport.unbind(ie,Q)})};me(T,(Q,ie)=>{this.transport.bind(ie,Q)})}handleCloseEvent(T){var L=pa.getCloseAction(T),Q=pa.getCloseError(T);Q&&this.emit("error",Q),L&&this.emit(L,{action:L,error:Q})}}class rf{constructor(T,L){this.transport=T,this.callback=L,this.bindListeners()}close(){this.unbindListeners(),this.transport.close()}bindListeners(){this.onMessage=T=>{this.unbindListeners();var L;try{L=pa.processHandshake(T)}catch(Q){this.finish("error",{error:Q}),this.transport.close();return}L.action==="connected"?this.finish("connected",{connection:new hl(L.id,this.transport),activityTimeout:L.activityTimeout}):(this.finish(L.action,{error:L.error}),this.transport.close())},this.onClosed=T=>{this.unbindListeners();var L=pa.getCloseAction(T)||"backoff",Q=pa.getCloseError(T);this.finish(L,{error:Q})},this.transport.bind("message",this.onMessage),this.transport.bind("closed",this.onClosed)}unbindListeners(){this.transport.unbind("message",this.onMessage),this.transport.unbind("closed",this.onClosed)}finish(T,L){this.callback(ce({transport:this.transport,action:T},L))}}class nf{constructor(T,L){this.timeline=T,this.options=L||{}}send(T,L){this.timeline.isEmpty()||this.timeline.send(et.TimelineTransport.getAgent(this,T),L)}}class iu extends $e{constructor(T,L){super(function(Q,ie){Y.debug("No callbacks on "+T+" for "+Q)}),this.name=T,this.pusher=L,this.subscribed=!1,this.subscriptionPending=!1,this.subscriptionCancelled=!1}authorize(T,L){return L(null,{auth:""})}trigger(T,L){if(T.indexOf("client-")!==0)throw new b("Event '"+T+"' does not start with 'client-'");if(!this.subscribed){var Q=g.buildLogSuffix("triggeringClientEvents");Y.warn(`Client event triggered before channel 'subscription_succeeded' event . ${Q}`)}return this.pusher.send_event(T,L,this.name)}disconnect(){this.subscribed=!1,this.subscriptionPending=!1}handleEvent(T){var L=T.event,Q=T.data;if(L==="pusher_internal:subscription_succeeded")this.handleSubscriptionSucceededEvent(T);else if(L==="pusher_internal:subscription_count")this.handleSubscriptionCountEvent(T);else if(L.indexOf("pusher_internal:")!==0){var ie={};this.emit(L,Q,ie)}}handleSubscriptionSucceededEvent(T){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit("pusher:subscription_succeeded",T.data)}handleSubscriptionCountEvent(T){T.data.subscription_count&&(this.subscriptionCount=T.data.subscription_count),this.emit("pusher:subscription_count",T.data)}subscribe(){this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,(T,L)=>{T?(this.subscriptionPending=!1,Y.error(T.toString()),this.emit("pusher:subscription_error",Object.assign({},{type:"AuthError",error:T.message},T instanceof N?{status:T.status}:{}))):this.pusher.send_event("pusher:subscribe",{auth:L.auth,channel_data:L.channel_data,channel:this.name})}))}unsubscribe(){this.subscribed=!1,this.pusher.send_event("pusher:unsubscribe",{channel:this.name})}cancelSubscription(){this.subscriptionCancelled=!0}reinstateSubscription(){this.subscriptionCancelled=!1}}class au extends iu{authorize(T,L){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:T},L)}}class af{constructor(){this.reset()}get(T){return Object.prototype.hasOwnProperty.call(this.members,T)?{id:T,info:this.members[T]}:null}each(T){me(this.members,(L,Q)=>{T(this.get(Q))})}setMyID(T){this.myID=T}onSubscription(T){this.members=T.presence.hash,this.count=T.presence.count,this.me=this.get(this.myID)}addMember(T){return this.get(T.user_id)===null&&this.count++,this.members[T.user_id]=T.user_info,this.get(T.user_id)}removeMember(T){var L=this.get(T.user_id);return L&&(delete this.members[T.user_id],this.count--),L}reset(){this.members={},this.count=0,this.myID=null,this.me=null}}var sf=function(z,T,L,Q){function ie(Oe){return Oe instanceof L?Oe:new L(function(Ze){Ze(Oe)})}return new(L||(L=Promise))(function(Oe,Ze){function st(ar){try{Yt(Q.next(ar))}catch($r){Ze($r)}}function _t(ar){try{Yt(Q.throw(ar))}catch($r){Ze($r)}}function Yt(ar){ar.done?Oe(ar.value):ie(ar.value).then(st,_t)}Yt((Q=Q.apply(z,T||[])).next())})};class ao extends au{constructor(T,L){super(T,L),this.members=new af}authorize(T,L){super.authorize(T,(Q,ie)=>sf(this,void 0,void 0,function*(){if(!Q)if(ie=ie,ie.channel_data!=null){var Oe=JSON.parse(ie.channel_data);this.members.setMyID(Oe.user_id)}else if(yield this.pusher.user.signinDonePromise,this.pusher.user.user_data!=null)this.members.setMyID(this.pusher.user.user_data.id);else{let Ze=g.buildLogSuffix("authorizationEndpoint");Y.error(`Invalid auth response for channel '${this.name}', expected 'channel_data' field. ${Ze}, or the user should be signed in.`),L("Invalid auth response");return}L(Q,ie)}))}handleEvent(T){var L=T.event;if(L.indexOf("pusher_internal:")===0)this.handleInternalEvent(T);else{var Q=T.data,ie={};T.user_id&&(ie.user_id=T.user_id),this.emit(L,Q,ie)}}handleInternalEvent(T){var L=T.event,Q=T.data;switch(L){case"pusher_internal:subscription_succeeded":this.handleSubscriptionSucceededEvent(T);break;case"pusher_internal:subscription_count":this.handleSubscriptionCountEvent(T);break;case"pusher_internal:member_added":var ie=this.members.addMember(Q);this.emit("pusher:member_added",ie);break;case"pusher_internal:member_removed":var Oe=this.members.removeMember(Q);Oe&&this.emit("pusher:member_removed",Oe);break}}handleSubscriptionSucceededEvent(T){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):(this.members.onSubscription(T.data),this.emit("pusher:subscription_succeeded",this.members))}disconnect(){this.members.reset(),super.disconnect()}}var ls=i(1),Wt=i(0);class bn extends au{constructor(T,L,Q){super(T,L),this.key=null,this.nacl=Q}authorize(T,L){super.authorize(T,(Q,ie)=>{if(Q){L(Q,ie);return}let Oe=ie.shared_secret;if(!Oe){L(new Error(`No shared_secret key in auth payload for encrypted channel: ${this.name}`),null);return}this.key=Object(Wt.decode)(Oe),delete ie.shared_secret,L(null,ie)})}trigger(T,L){throw new A("Client events are not currently supported for encrypted channels")}handleEvent(T){var L=T.event,Q=T.data;if(L.indexOf("pusher_internal:")===0||L.indexOf("pusher:")===0){super.handleEvent(T);return}this.handleEncryptedEvent(L,Q)}handleEncryptedEvent(T,L){if(!this.key){Y.debug("Received encrypted event before key has been retrieved from the authEndpoint");return}if(!L.ciphertext||!L.nonce){Y.error("Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: "+L);return}let Q=Object(Wt.decode)(L.ciphertext);if(Q.length{if(Ze){Y.error(`Failed to make a request to the authEndpoint: ${st}. Unable to fetch new key, so dropping encrypted event`);return}if(Oe=this.nacl.secretbox.open(Q,ie,this.key),Oe===null){Y.error("Failed to decrypt event with new key. Dropping encrypted event");return}this.emit(T,this.getDataToEmit(Oe))});return}this.emit(T,this.getDataToEmit(Oe))}getDataToEmit(T){let L=Object(ls.decode)(T);try{return JSON.parse(L)}catch{return L}}}class of extends $e{constructor(T,L){super(),this.state="initialized",this.connection=null,this.key=T,this.options=L,this.timeline=this.options.timeline,this.usingTLS=this.options.useTLS,this.errorCallbacks=this.buildErrorCallbacks(),this.connectionCallbacks=this.buildConnectionCallbacks(this.errorCallbacks),this.handshakeCallbacks=this.buildHandshakeCallbacks(this.errorCallbacks);var Q=et.getNetwork();Q.bind("online",()=>{this.timeline.info({netinfo:"online"}),(this.state==="connecting"||this.state==="unavailable")&&this.retryIn(0)}),Q.bind("offline",()=>{this.timeline.info({netinfo:"offline"}),this.connection&&this.sendActivityCheck()}),this.updateStrategy()}switchCluster(T){this.key=T,this.updateStrategy(),this.retryIn(0)}connect(){if(!(this.connection||this.runner)){if(!this.strategy.isSupported()){this.updateState("failed");return}this.updateState("connecting"),this.startConnecting(),this.setUnavailableTimer()}}send(T){return this.connection?this.connection.send(T):!1}send_event(T,L,Q){return this.connection?this.connection.send_event(T,L,Q):!1}disconnect(){this.disconnectInternally(),this.updateState("disconnected")}isUsingTLS(){return this.usingTLS}startConnecting(){var T=(L,Q)=>{L?this.runner=this.strategy.connect(0,T):Q.action==="error"?(this.emit("error",{type:"HandshakeError",error:Q.error}),this.timeline.error({handshakeError:Q.error})):(this.abortConnecting(),this.handshakeCallbacks[Q.action](Q))};this.runner=this.strategy.connect(0,T)}abortConnecting(){this.runner&&(this.runner.abort(),this.runner=null)}disconnectInternally(){if(this.abortConnecting(),this.clearRetryTimer(),this.clearUnavailableTimer(),this.connection){var T=this.abandonConnection();T.close()}}updateStrategy(){this.strategy=this.options.getStrategy({key:this.key,timeline:this.timeline,useTLS:this.usingTLS})}retryIn(T){this.timeline.info({action:"retry",delay:T}),T>0&&this.emit("connecting_in",Math.round(T/1e3)),this.retryTimer=new ne(T||0,()=>{this.disconnectInternally(),this.connect()})}clearRetryTimer(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)}setUnavailableTimer(){this.unavailableTimer=new ne(this.options.unavailableTimeout,()=>{this.updateState("unavailable")})}clearUnavailableTimer(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()}sendActivityCheck(){this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new ne(this.options.pongTimeout,()=>{this.timeline.error({pong_timed_out:this.options.pongTimeout}),this.retryIn(0)})}resetActivityCheck(){this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new ne(this.activityTimeout,()=>{this.sendActivityCheck()}))}stopActivityCheck(){this.activityTimer&&this.activityTimer.ensureAborted()}buildConnectionCallbacks(T){return ce({},T,{message:L=>{this.resetActivityCheck(),this.emit("message",L)},ping:()=>{this.send_event("pusher:pong",{})},activity:()=>{this.resetActivityCheck()},error:L=>{this.emit("error",L)},closed:()=>{this.abandonConnection(),this.shouldRetry()&&this.retryIn(1e3)}})}buildHandshakeCallbacks(T){return ce({},T,{connected:L=>{this.activityTimeout=Math.min(this.options.activityTimeout,L.activityTimeout,L.connection.activityTimeout||1/0),this.clearUnavailableTimer(),this.setConnection(L.connection),this.socket_id=this.connection.id,this.updateState("connected",{socket_id:this.socket_id})}})}buildErrorCallbacks(){let T=L=>Q=>{Q.error&&this.emit("error",{type:"WebSocketError",error:Q.error}),L(Q)};return{tls_only:T(()=>{this.usingTLS=!0,this.updateStrategy(),this.retryIn(0)}),refused:T(()=>{this.disconnect()}),backoff:T(()=>{this.retryIn(1e3)}),retry:T(()=>{this.retryIn(0)})}}setConnection(T){this.connection=T;for(var L in this.connectionCallbacks)this.connection.bind(L,this.connectionCallbacks[L]);this.resetActivityCheck()}abandonConnection(){if(this.connection){this.stopActivityCheck();for(var T in this.connectionCallbacks)this.connection.unbind(T,this.connectionCallbacks[T]);var L=this.connection;return this.connection=null,L}}updateState(T,L){var Q=this.state;if(this.state=T,Q!==T){var ie=T;ie==="connected"&&(ie+=" with new socket ID "+L.socket_id),Y.debug("State changed",Q+" -> "+ie),this.timeline.info({state:T,params:L}),this.emit("state_change",{previous:Q,current:T}),this.emit(T,L)}}shouldRetry(){return this.state==="connecting"||this.state==="connected"}}class so{constructor(){this.channels={}}add(T,L){return this.channels[T]||(this.channels[T]=$a(T,L)),this.channels[T]}all(){return Ee(this.channels)}find(T){return this.channels[T]}remove(T){var L=this.channels[T];return delete this.channels[T],L}disconnect(){me(this.channels,function(T){T.disconnect()})}}function $a(z,T){if(z.indexOf("private-encrypted-")===0){if(T.config.nacl)return qi.createEncryptedChannel(z,T,T.config.nacl);let L="Tried to subscribe to a private-encrypted- channel but no nacl implementation available",Q=g.buildLogSuffix("encryptedChannelSupport");throw new A(`${L}. ${Q}`)}else{if(z.indexOf("private-")===0)return qi.createPrivateChannel(z,T);if(z.indexOf("presence-")===0)return qi.createPresenceChannel(z,T);if(z.indexOf("#")===0)throw new y('Cannot create a channel with name "'+z+'".');return qi.createChannel(z,T)}}var dl={createChannels(){return new so},createConnectionManager(z,T){return new of(z,T)},createChannel(z,T){return new iu(z,T)},createPrivateChannel(z,T){return new au(z,T)},createPresenceChannel(z,T){return new ao(z,T)},createEncryptedChannel(z,T,L){return new bn(z,T,L)},createTimelineSender(z,T){return new nf(z,T)},createHandshake(z,T){return new rf(z,T)},createAssistantToTheTransportManager(z,T,L){return new tf(z,T,L)}},qi=dl;class Sd{constructor(T){this.options=T||{},this.livesLeft=this.options.lives||1/0}getAssistant(T){return qi.createAssistantToTheTransportManager(this,T,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})}isAlive(){return this.livesLeft>0}reportDeath(){this.livesLeft-=1}}class cs{constructor(T,L){this.strategies=T,this.loop=!!L.loop,this.failFast=!!L.failFast,this.timeout=L.timeout,this.timeoutLimit=L.timeoutLimit}isSupported(){return ee(this.strategies,Se.method("isSupported"))}connect(T,L){var Q=this.strategies,ie=0,Oe=this.timeout,Ze=null,st=(_t,Yt)=>{Yt?L(null,Yt):(ie=ie+1,this.loop&&(ie=ie%Q.length),ie0&&(Oe=new ne(Q.timeout,function(){Ze.abort(),ie(!0)})),Ze=T.connect(L,function(st,_t){st&&Oe&&Oe.isRunning()&&!Q.failFast||(Oe&&Oe.ensureAborted(),ie(st,_t))}),{abort:function(){Oe&&Oe.ensureAborted(),Ze.abort()},forceMinPriority:function(st){Ze.forceMinPriority(st)}}}}class uf{constructor(T){this.strategies=T}isSupported(){return ee(this.strategies,Se.method("isSupported"))}connect(T,L){return t0(this.strategies,T,function(Q,ie){return function(Oe,Ze){if(ie[Q].error=Oe,Oe){_d(ie)&&L(!0);return}Ce(ie,function(st){st.forceMinPriority(Ze.transport.priority)}),L(null,Ze)}})}}function t0(z,T,L){var Q=He(z,function(ie,Oe,Ze,st){return ie.connect(T,L(Oe,st))});return{abort:function(){Ce(Q,Ad)},forceMinPriority:function(ie){Ce(Q,function(Oe){Oe.forceMinPriority(ie)})}}}function _d(z){return ue(z,function(T){return!!T.error})}function Ad(z){!z.error&&!z.aborted&&(z.abort(),z.aborted=!0)}class Dd{constructor(T,L,Q){this.strategy=T,this.transports=L,this.ttl=Q.ttl||1800*1e3,this.usingTLS=Q.useTLS,this.timeline=Q.timeline}isSupported(){return this.strategy.isSupported()}connect(T,L){var Q=this.usingTLS,ie=r0(Q),Oe=ie&&ie.cacheSkipCount?ie.cacheSkipCount:0,Ze=[this.strategy];if(ie&&ie.timestamp+this.ttl>=Se.now()){var st=this.transports[ie.transport];st&&(["ws","wss"].includes(ie.transport)||Oe>3?(this.timeline.info({cached:!0,transport:ie.transport,latency:ie.latency}),Ze.push(new cs([st],{timeout:ie.latency*2+1e3,failFast:!0}))):Oe++)}var _t=Se.now(),Yt=Ze.pop().connect(T,function ar($r,gl){$r?(ou(Q),Ze.length>0?(_t=Se.now(),Yt=Ze.pop().connect(T,ar)):L($r)):(Ed(Q,gl.transport.name,Se.now()-_t,Oe),L(null,gl))});return{abort:function(){Yt.abort()},forceMinPriority:function(ar){T=ar,Yt&&Yt.forceMinPriority(ar)}}}}function su(z){return"pusherTransport"+(z?"TLS":"NonTLS")}function r0(z){var T=et.getLocalStorage();if(T)try{var L=T[su(z)];if(L)return JSON.parse(L)}catch{ou(z)}return null}function Ed(z,T,L,Q){var ie=et.getLocalStorage();if(ie)try{ie[su(z)]=R({timestamp:Se.now(),transport:T,latency:L,cacheSkipCount:Q})}catch{}}function ou(z){var T=et.getLocalStorage();if(T)try{delete T[su(z)]}catch{}}class uu{constructor(T,{delay:L}){this.strategy=T,this.options={delay:L}}isSupported(){return this.strategy.isSupported()}connect(T,L){var Q=this.strategy,ie,Oe=new ne(this.options.delay,function(){ie=Q.connect(T,L)});return{abort:function(){Oe.ensureAborted(),ie&&ie.abort()},forceMinPriority:function(Ze){T=Ze,ie&&ie.forceMinPriority(Ze)}}}}class lu{constructor(T,L,Q){this.test=T,this.trueBranch=L,this.falseBranch=Q}isSupported(){var T=this.test()?this.trueBranch:this.falseBranch;return T.isSupported()}connect(T,L){var Q=this.test()?this.trueBranch:this.falseBranch;return Q.connect(T,L)}}class Nd{constructor(T){this.strategy=T}isSupported(){return this.strategy.isSupported()}connect(T,L){var Q=this.strategy.connect(T,function(ie,Oe){Oe&&Q.abort(),L(ie,Oe)});return Q}}function oo(z){return function(){return z.isSupported()}}var lf=function(z,T,L){var Q={};function ie(Zd,co,x0,w0,Df){var Ef=L(z,Zd,co,x0,w0,Df);return Q[Zd]=Ef,Ef}var Oe=Object.assign({},T,{hostNonTLS:z.wsHost+":"+z.wsPort,hostTLS:z.wsHost+":"+z.wssPort,httpPath:z.wsPath}),Ze=Object.assign({},Oe,{useTLS:!0}),st=Object.assign({},T,{hostNonTLS:z.httpHost+":"+z.httpPort,hostTLS:z.httpHost+":"+z.httpsPort,httpPath:z.httpPath}),_t={loop:!0,timeout:15e3,timeoutLimit:6e4},Yt=new Sd({minPingDelay:1e4,maxPingDelay:z.activityTimeout}),ar=new Sd({lives:2,minPingDelay:1e4,maxPingDelay:z.activityTimeout}),$r=ie("ws","ws",3,Oe,Yt),gl=ie("wss","ws",3,Ze,Yt),xf=ie("sockjs","sockjs",1,st),yl=ie("xhr_streaming","xhr_streaming",1,st,ar),b0=ie("xdr_streaming","xdr_streaming",1,st,ar),wf=ie("xhr_polling","xhr_polling",1,st),Jn=ie("xdr_polling","xdr_polling",1,st),bl=new cs([$r],_t),cu=new cs([gl],_t),jd=new cs([xf],_t),Sf=new cs([new lu(oo(yl),yl,b0)],_t),Gd=new cs([new lu(oo(wf),wf,Jn)],_t),Xd=new cs([new lu(oo(Sf),new uf([Sf,new uu(Gd,{delay:4e3})]),Gd)],_t),_f=new lu(oo(Xd),Xd,jd),Af;return T.useTLS?Af=new uf([bl,new uu(_f,{delay:2e3})]):Af=new uf([bl,new uu(cu,{delay:2e3}),new uu(_f,{delay:5e3})]),new Dd(new Nd(new lu(oo($r),Af,_f)),Q,{ttl:18e5,timeline:T.timeline,useTLS:T.useTLS})},n0=lf,Cd=function(){var z=this;z.timeline.info(z.buildTimelineMessage({transport:z.name+(z.options.useTLS?"s":"")})),z.hooks.isInitialized()?z.changeState("initialized"):z.hooks.file?(z.changeState("initializing"),f.load(z.hooks.file,{useTLS:z.options.useTLS},function(T,L){z.hooks.isInitialized()?(z.changeState("initialized"),L(!0)):(T&&z.onError(T),z.onClose(),L(!1))})):z.onClose()},cf={getRequest:function(z){var T=new window.XDomainRequest;return T.ontimeout=function(){z.emit("error",new S),z.close()},T.onerror=function(L){z.emit("error",L),z.close()},T.onprogress=function(){T.responseText&&T.responseText.length>0&&z.onChunk(200,T.responseText)},T.onload=function(){T.responseText&&T.responseText.length>0&&z.onChunk(200,T.responseText),z.emit("finished",200),z.close()},T},abortRequest:function(z){z.ontimeout=z.onerror=z.onprogress=z.onload=null,z.abort()}},ff=cf;const uo=256*1024;class Md extends $e{constructor(T,L,Q){super(),this.hooks=T,this.method=L,this.url=Q}start(T){this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=()=>{this.close()},et.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send(T)}close(){this.unloader&&(et.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)}onChunk(T,L){for(;;){var Q=this.advanceBuffer(L);if(Q)this.emit("chunk",{status:T,data:Q});else break}this.isBufferTooLong(L)&&this.emit("buffer_too_long")}advanceBuffer(T){var L=T.slice(this.position),Q=L.indexOf(` +`);return Q!==-1?(this.position+=Q+1,L.slice(0,Q)):null}isBufferTooLong(T){return this.position===T.length&&T.length>uo}}var pl;(function(z){z[z.CONNECTING=0]="CONNECTING",z[z.OPEN=1]="OPEN",z[z.CLOSED=3]="CLOSED"})(pl||(pl={}));var fs=pl,Td=1;class Od{constructor(T,L){this.hooks=T,this.session=kd(1e3)+"/"+Bd(8),this.location=Fd(L),this.readyState=fs.CONNECTING,this.openStream()}send(T){return this.sendRaw(JSON.stringify([T]))}ping(){this.hooks.sendHeartbeat(this)}close(T,L){this.onClose(T,L,!0)}sendRaw(T){if(this.readyState===fs.OPEN)try{return et.createSocketRequest("POST",Pd(Rd(this.location,this.session))).start(T),!0}catch{return!1}else return!1}reconnect(){this.closeStream(),this.openStream()}onClose(T,L,Q){this.closeStream(),this.readyState=fs.CLOSED,this.onclose&&this.onclose({code:T,reason:L,wasClean:Q})}onChunk(T){if(T.status===200){this.readyState===fs.OPEN&&this.onActivity();var L,Q=T.data.slice(0,1);switch(Q){case"o":L=JSON.parse(T.data.slice(1)||"{}"),this.onOpen(L);break;case"a":L=JSON.parse(T.data.slice(1)||"[]");for(var ie=0;ie{this.onChunk(T)}),this.stream.bind("finished",T=>{this.hooks.onFinished(this,T)}),this.stream.bind("buffer_too_long",()=>{this.reconnect()});try{this.stream.start()}catch(T){Se.defer(()=>{this.onError(T),this.onClose(1006,"Could not start streaming",!1)})}}closeStream(){this.stream&&(this.stream.unbind_all(),this.stream.close(),this.stream=null)}}function Fd(z){var T=/([^\?]*)\/*(\??.*)/.exec(z);return{base:T[1],queryString:T[2]}}function Rd(z,T){return z.base+"/"+T+"/xhr_send"}function Pd(z){var T=z.indexOf("?")===-1?"?":"&";return z+T+"t="+ +new Date+"&n="+Td++}function i0(z,T){var L=/(https?:\/\/)([^\/:]+)((\/|:)?.*)/.exec(z);return L[1]+T+L[3]}function kd(z){return et.randomInt(z)}function Bd(z){for(var T=[],L=0;L0&&z.onChunk(L.status,L.responseText);break;case 4:L.responseText&&L.responseText.length>0&&z.onChunk(L.status,L.responseText),z.emit("finished",L.status),z.close();break}},L},abortRequest:function(z){z.onreadystatechange=null,z.abort()}},c0=l0,f0={createStreamingSocket(z){return this.createSocket(o0,z)},createPollingSocket(z){return this.createSocket(hf,z)},createSocket(z,T){return new a0(z,T)},createXHR(z,T){return this.createRequest(c0,z,T)},createRequest(z,T,L){return new Md(z,T,L)}},Id=f0;Id.createXDR=function(z,T){return this.createRequest(ff,z,T)};var h0=Id,Ar={nextAuthCallbackID:1,auth_callbacks:{},ScriptReceivers:s,DependenciesReceivers:c,getDefaultStrategy:n0,Transports:Jc,transportConnectionInitializer:Cd,HTTPFactory:h0,TimelineTransport:ze,getXHRAPI(){return window.XMLHttpRequest},getWebSocketAPI(){return window.WebSocket||window.MozWebSocket},setup(z){window.Pusher=z;var T=()=>{this.onDocumentBody(z.ready)};window.JSON?T():f.load("json2",{},T)},getDocument(){return document},getProtocol(){return this.getDocument().location.protocol},getAuthorizers(){return{ajax:M,jsonp:ge}},onDocumentBody(z){document.body?z():setTimeout(()=>{this.onDocumentBody(z)},0)},createJSONPRequest(z,T){return new Pe(z,T)},createScriptRequest(z){return new De(z)},getLocalStorage(){try{return window.localStorage}catch{return}},createXHR(){return this.getXHRAPI()?this.createXMLHttpRequest():this.createMicrosoftXHR()},createXMLHttpRequest(){var z=this.getXHRAPI();return new z},createMicrosoftXHR(){return new ActiveXObject("Microsoft.XMLHTTP")},getNetwork(){return ef},createWebSocket(z){var T=this.getWebSocketAPI();return new T(z)},createSocketRequest(z,T){if(this.isXHRSupported())return this.HTTPFactory.createXHR(z,T);if(this.isXDRSupported(T.indexOf("https:")===0))return this.HTTPFactory.createXDR(z,T);throw"Cross-origin HTTP requests are not supported"},isXHRSupported(){var z=this.getXHRAPI();return!!z&&new z().withCredentials!==void 0},isXDRSupported(z){var T=z?"https:":"http:",L=this.getProtocol();return!!window.XDomainRequest&&L===T},addUnloadListener(z){window.addEventListener!==void 0?window.addEventListener("unload",z,!1):window.attachEvent!==void 0&&window.attachEvent("onunload",z)},removeUnloadListener(z){window.addEventListener!==void 0?window.removeEventListener("unload",z,!1):window.detachEvent!==void 0&&window.detachEvent("onunload",z)},randomInt(z){return Math.floor(function(){return(window.crypto||window.msCrypto).getRandomValues(new Uint32Array(1))[0]/Math.pow(2,32)}()*z)}},et=Ar,df;(function(z){z[z.ERROR=3]="ERROR",z[z.INFO=6]="INFO",z[z.DEBUG=7]="DEBUG"})(df||(df={}));var ml=df;class d0{constructor(T,L,Q){this.key=T,this.session=L,this.events=[],this.options=Q||{},this.sent=0,this.uniqueID=0}log(T,L){T<=this.options.level&&(this.events.push(ce({},L,{timestamp:Se.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())}error(T){this.log(ml.ERROR,T)}info(T){this.log(ml.INFO,T)}debug(T){this.log(ml.DEBUG,T)}isEmpty(){return this.events.length===0}send(T,L){var Q=ce({session:this.session,bundle:this.sent+1,key:this.key,lib:"js",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],T(Q,(ie,Oe)=>{ie||this.sent++,L&&L(ie,Oe)}),!0}generateUniqueID(){return this.uniqueID++,this.uniqueID}}class p0{constructor(T,L,Q,ie){this.name=T,this.priority=L,this.transport=Q,this.options=ie||{}}isSupported(){return this.transport.isSupported({useTLS:this.options.useTLS})}connect(T,L){if(this.isSupported()){if(this.priority{Q||(ar(),Oe?Oe.close():ie.close())},forceMinPriority:$r=>{Q||this.priority<$r&&(Oe?Oe.close():ie.close())}}}}function Ld(z,T){return Se.defer(function(){T(z)}),{abort:function(){},forceMinPriority:function(){}}}const{Transports:m0}=et;var $d=function(z,T,L,Q,ie,Oe){var Ze=m0[L];if(!Ze)throw new w(L);var st=(!z.enabledTransports||_e(z.enabledTransports,T)!==-1)&&(!z.disabledTransports||_e(z.disabledTransports,T)===-1),_t;return st?(ie=Object.assign({ignoreNullOrigin:z.ignoreNullOrigin},ie),_t=new p0(T,Q,Oe?Oe.getAssistant(Ze):Ze,ie)):_t=v0,_t},v0={isSupported:function(){return!1},connect:function(z,T){var L=Se.defer(function(){T(new C)});return{abort:function(){L.ensureAborted()},forceMinPriority:function(){}}}};function on(z){if(z==null)throw"You must pass an options object";if(z.cluster==null)throw"Options object must provide a cluster";"disableStats"in z&&Y.warn("The disableStats option is deprecated in favor of enableStats")}const pf=(z,T)=>{var L="socket_id="+encodeURIComponent(z.socketId);for(var Q in T.params)L+="&"+encodeURIComponent(Q)+"="+encodeURIComponent(T.params[Q]);if(T.paramsProvider!=null){let ie=T.paramsProvider();for(var Q in ie)L+="&"+encodeURIComponent(Q)+"="+encodeURIComponent(ie[Q])}return L};var zd=z=>{if(typeof et.getAuthorizers()[z.transport]>"u")throw`'${z.transport}' is not a recognized auth transport`;return(T,L)=>{const Q=pf(T,z);et.getAuthorizers()[z.transport](et,Q,z,m.UserAuthentication,L)}};const mf=(z,T)=>{var L="socket_id="+encodeURIComponent(z.socketId);L+="&channel_name="+encodeURIComponent(z.channelName);for(var Q in T.params)L+="&"+encodeURIComponent(Q)+"="+encodeURIComponent(T.params[Q]);if(T.paramsProvider!=null){let ie=T.paramsProvider();for(var Q in ie)L+="&"+encodeURIComponent(Q)+"="+encodeURIComponent(ie[Q])}return L};var qd=z=>{if(typeof et.getAuthorizers()[z.transport]>"u")throw`'${z.transport}' is not a recognized auth transport`;return(T,L)=>{const Q=mf(T,z);et.getAuthorizers()[z.transport](et,Q,z,m.ChannelAuthorization,L)}};const Ud=(z,T,L)=>{const Q={authTransport:T.transport,authEndpoint:T.endpoint,auth:{params:T.params,headers:T.headers}};return(ie,Oe)=>{const Ze=z.channel(ie.channelName);L(Ze,Q).authorize(ie.socketId,Oe)}};function vf(z,T){let L={activityTimeout:z.activityTimeout||u.activityTimeout,cluster:z.cluster,httpPath:z.httpPath||u.httpPath,httpPort:z.httpPort||u.httpPort,httpsPort:z.httpsPort||u.httpsPort,pongTimeout:z.pongTimeout||u.pongTimeout,statsHost:z.statsHost||u.stats_host,unavailableTimeout:z.unavailableTimeout||u.unavailableTimeout,wsPath:z.wsPath||u.wsPath,wsPort:z.wsPort||u.wsPort,wssPort:z.wssPort||u.wssPort,enableStats:g0(z),httpHost:Hd(z),useTLS:Zn(z),wsHost:Wd(z),userAuthenticator:y0(z),channelAuthorizer:za(z,T)};return"disabledTransports"in z&&(L.disabledTransports=z.disabledTransports),"enabledTransports"in z&&(L.enabledTransports=z.enabledTransports),"ignoreNullOrigin"in z&&(L.ignoreNullOrigin=z.ignoreNullOrigin),"timelineParams"in z&&(L.timelineParams=z.timelineParams),"nacl"in z&&(L.nacl=z.nacl),L}function Hd(z){return z.httpHost?z.httpHost:z.cluster?`sockjs-${z.cluster}.pusher.com`:u.httpHost}function Wd(z){return z.wsHost?z.wsHost:Vd(z.cluster)}function Vd(z){return`ws-${z}.pusher.com`}function Zn(z){return et.getProtocol()==="https:"?!0:z.forceTLS!==!1}function g0(z){return"enableStats"in z?z.enableStats:"disableStats"in z?!z.disableStats:!1}const Kn=z=>"customHandler"in z&&z.customHandler!=null;function y0(z){const T=Object.assign(Object.assign({},u.userAuthentication),z.userAuthentication);return Kn(T)?T.customHandler:zd(T)}function Yd(z,T){let L;if("channelAuthorization"in z)L=Object.assign(Object.assign({},u.channelAuthorization),z.channelAuthorization);else if(L={transport:z.authTransport||u.authTransport,endpoint:z.authEndpoint||u.authEndpoint},"auth"in z&&("params"in z.auth&&(L.params=z.auth.params),"headers"in z.auth&&(L.headers=z.auth.headers)),"authorizer"in z)return{customHandler:Ud(T,L,z.authorizer)};return L}function za(z,T){const L=Yd(z,T);return Kn(L)?L.customHandler:qd(L)}class vl extends $e{constructor(T){super(function(L,Q){Y.debug(`No callbacks on watchlist events for ${L}`)}),this.pusher=T,this.bindWatchlistInternalEvent()}handleEvent(T){T.data.events.forEach(L=>{this.emit(L.name,L)})}bindWatchlistInternalEvent(){this.pusher.connection.bind("message",T=>{var L=T.event;L==="pusher_internal:watchlist_events"&&this.handleEvent(T)})}}function gf(){let z,T;return{promise:new Promise((Q,ie)=>{z=Q,T=ie}),resolve:z,reject:T}}var Nr=gf;class qa extends $e{constructor(T){super(function(L,Q){Y.debug("No callbacks on user for "+L)}),this.signin_requested=!1,this.user_data=null,this.serverToUserChannel=null,this.signinDonePromise=null,this._signinDoneResolve=null,this._onAuthorize=(L,Q)=>{if(L){Y.warn(`Error during signin: ${L}`),this._cleanup();return}this.pusher.send_event("pusher:signin",{auth:Q.auth,user_data:Q.user_data})},this.pusher=T,this.pusher.connection.bind("state_change",({previous:L,current:Q})=>{L!=="connected"&&Q==="connected"&&this._signin(),L==="connected"&&Q!=="connected"&&(this._cleanup(),this._newSigninPromiseIfNeeded())}),this.watchlist=new vl(T),this.pusher.connection.bind("message",L=>{var Q=L.event;Q==="pusher:signin_success"&&this._onSigninSuccess(L.data),this.serverToUserChannel&&this.serverToUserChannel.name===L.channel&&this.serverToUserChannel.handleEvent(L)})}signin(){this.signin_requested||(this.signin_requested=!0,this._signin())}_signin(){this.signin_requested&&(this._newSigninPromiseIfNeeded(),this.pusher.connection.state==="connected"&&this.pusher.config.userAuthenticator({socketId:this.pusher.connection.socket_id},this._onAuthorize))}_onSigninSuccess(T){try{this.user_data=JSON.parse(T.user_data)}catch{Y.error(`Failed parsing user data after signin: ${T.user_data}`),this._cleanup();return}if(typeof this.user_data.id!="string"||this.user_data.id===""){Y.error(`user_data doesn't contain an id. user_data: ${this.user_data}`),this._cleanup();return}this._signinDoneResolve(),this._subscribeChannels()}_subscribeChannels(){const T=L=>{L.subscriptionPending&&L.subscriptionCancelled?L.reinstateSubscription():!L.subscriptionPending&&this.pusher.connection.state==="connected"&&L.subscribe()};this.serverToUserChannel=new iu(`#server-to-user-${this.user_data.id}`,this.pusher),this.serverToUserChannel.bind_global((L,Q)=>{L.indexOf("pusher_internal:")===0||L.indexOf("pusher:")===0||this.emit(L,Q)}),T(this.serverToUserChannel)}_cleanup(){this.user_data=null,this.serverToUserChannel&&(this.serverToUserChannel.unbind_all(),this.serverToUserChannel.disconnect(),this.serverToUserChannel=null),this.signin_requested&&this._signinDoneResolve()}_newSigninPromiseIfNeeded(){if(!this.signin_requested||this.signinDonePromise&&!this.signinDonePromise.done)return;const{promise:T,resolve:L,reject:Q}=Nr();T.done=!1;const ie=()=>{T.done=!0};T.then(ie).catch(ie),this.signinDonePromise=T,this._signinDoneResolve=L}}class Zr{static ready(){Zr.isReady=!0;for(var T=0,L=Zr.instances.length;Tet.getDefaultStrategy(this.config,ie,$d);this.connection=qi.createConnectionManager(this.key,{getStrategy:Q,timeline:this.timeline,activityTimeout:this.config.activityTimeout,pongTimeout:this.config.pongTimeout,unavailableTimeout:this.config.unavailableTimeout,useTLS:!!this.config.useTLS}),this.connection.bind("connected",()=>{this.subscribeAll(),this.timelineSender&&this.timelineSender.send(this.connection.isUsingTLS())}),this.connection.bind("message",ie=>{var Oe=ie.event,Ze=Oe.indexOf("pusher_internal:")===0;if(ie.channel){var st=this.channel(ie.channel);st&&st.handleEvent(ie)}Ze||this.global_emitter.emit(ie.event,ie.data)}),this.connection.bind("connecting",()=>{this.channels.disconnect()}),this.connection.bind("disconnected",()=>{this.channels.disconnect()}),this.connection.bind("error",ie=>{Y.warn(ie)}),Zr.instances.push(this),this.timeline.info({instances:Zr.instances.length}),this.user=new qa(this),Zr.isReady&&this.connect()}switchCluster(T){const{appKey:L,cluster:Q}=T;this.key=L,this.options=Object.assign(Object.assign({},this.options),{cluster:Q}),this.config=vf(this.options,this),this.connection.switchCluster(this.key)}channel(T){return this.channels.find(T)}allChannels(){return this.channels.all()}connect(){if(this.connection.connect(),this.timelineSender&&!this.timelineSenderTimer){var T=this.connection.isUsingTLS(),L=this.timelineSender;this.timelineSenderTimer=new X(6e4,function(){L.send(T)})}}disconnect(){this.connection.disconnect(),this.timelineSenderTimer&&(this.timelineSenderTimer.ensureAborted(),this.timelineSenderTimer=null)}bind(T,L,Q){return this.global_emitter.bind(T,L,Q),this}unbind(T,L,Q){return this.global_emitter.unbind(T,L,Q),this}bind_global(T){return this.global_emitter.bind_global(T),this}unbind_global(T){return this.global_emitter.unbind_global(T),this}unbind_all(T){return this.global_emitter.unbind_all(),this}subscribeAll(){var T;for(T in this.channels.channels)this.channels.channels.hasOwnProperty(T)&&this.subscribe(T)}subscribe(T){var L=this.channels.add(T,this);return L.subscriptionPending&&L.subscriptionCancelled?L.reinstateSubscription():!L.subscriptionPending&&this.connection.state==="connected"&&L.subscribe(),L}unsubscribe(T){var L=this.channels.find(T);L&&L.subscriptionPending?L.cancelSubscription():(L=this.channels.remove(T),L&&L.subscribed&&L.unsubscribe())}send_event(T,L,Q){return this.connection.send_event(T,L,Q)}shouldUseTLS(){return this.config.useTLS}signin(){this.user.signin()}}Zr.instances=[],Zr.isReady=!1,Zr.logToConsole=!1,Zr.Runtime=et,Zr.ScriptReceivers=et.ScriptReceivers,Zr.DependenciesReceivers=et.DependenciesReceivers,Zr.auth_callbacks=et.auth_callbacks;var yf=n.default=Zr;function bf(z){if(z==null)throw"You must pass your app key when you instantiate Pusher."}et.setup(Zr)}])})})(wT);var l7=wT.exports;const c7=Vu(l7);function ST(t,e){return function(){return t.apply(e,arguments)}}const{toString:f7}=Object.prototype,{getPrototypeOf:S1}=Object,Gv=(t=>e=>{const r=f7.call(e);return t[r]||(t[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),Qa=t=>(t=t.toLowerCase(),e=>Gv(e)===t),Xv=t=>e=>typeof e===t,{isArray:Ec}=Array,xh=Xv("undefined");function h7(t){return t!==null&&!xh(t)&&t.constructor!==null&&!xh(t.constructor)&&ia(t.constructor.isBuffer)&&t.constructor.isBuffer(t)}const _T=Qa("ArrayBuffer");function d7(t){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(t):e=t&&t.buffer&&_T(t.buffer),e}const p7=Xv("string"),ia=Xv("function"),AT=Xv("number"),Zv=t=>t!==null&&typeof t=="object",m7=t=>t===!0||t===!1,wm=t=>{if(Gv(t)!=="object")return!1;const e=S1(t);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in t)&&!(Symbol.iterator in t)},v7=Qa("Date"),g7=Qa("File"),y7=Qa("Blob"),b7=Qa("FileList"),x7=t=>Zv(t)&&ia(t.pipe),w7=t=>{let e;return t&&(typeof FormData=="function"&&t instanceof FormData||ia(t.append)&&((e=Gv(t))==="formdata"||e==="object"&&ia(t.toString)&&t.toString()==="[object FormData]"))},S7=Qa("URLSearchParams"),_7=t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Gh(t,e,{allOwnKeys:r=!1}={}){if(t===null||typeof t>"u")return;let n,i;if(typeof t!="object"&&(t=[t]),Ec(t))for(n=0,i=t.length;n0;)if(i=r[n],e===i.toLowerCase())return i;return null}const ET=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,NT=t=>!xh(t)&&t!==ET;function ub(){const{caseless:t}=NT(this)&&this||{},e={},r=(n,i)=>{const a=t&&DT(e,i)||i;wm(e[a])&&wm(n)?e[a]=ub(e[a],n):wm(n)?e[a]=ub({},n):Ec(n)?e[a]=n.slice():e[a]=n};for(let n=0,i=arguments.length;n(Gh(e,(i,a)=>{r&&ia(i)?t[a]=ST(i,r):t[a]=i},{allOwnKeys:n}),t),D7=t=>(t.charCodeAt(0)===65279&&(t=t.slice(1)),t),E7=(t,e,r,n)=>{t.prototype=Object.create(e.prototype,n),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),r&&Object.assign(t.prototype,r)},N7=(t,e,r,n)=>{let i,a,s;const o={};if(e=e||{},t==null)return e;do{for(i=Object.getOwnPropertyNames(t),a=i.length;a-- >0;)s=i[a],(!n||n(s,t,e))&&!o[s]&&(e[s]=t[s],o[s]=!0);t=r!==!1&&S1(t)}while(t&&(!r||r(t,e))&&t!==Object.prototype);return e},C7=(t,e,r)=>{t=String(t),(r===void 0||r>t.length)&&(r=t.length),r-=e.length;const n=t.indexOf(e,r);return n!==-1&&n===r},M7=t=>{if(!t)return null;if(Ec(t))return t;let e=t.length;if(!AT(e))return null;const r=new Array(e);for(;e-- >0;)r[e]=t[e];return r},T7=(t=>e=>t&&e instanceof t)(typeof Uint8Array<"u"&&S1(Uint8Array)),O7=(t,e)=>{const n=(t&&t[Symbol.iterator]).call(t);let i;for(;(i=n.next())&&!i.done;){const a=i.value;e.call(t,a[0],a[1])}},F7=(t,e)=>{let r;const n=[];for(;(r=t.exec(e))!==null;)n.push(r);return n},R7=Qa("HTMLFormElement"),P7=t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,n,i){return n.toUpperCase()+i}),U_=(({hasOwnProperty:t})=>(e,r)=>t.call(e,r))(Object.prototype),k7=Qa("RegExp"),CT=(t,e)=>{const r=Object.getOwnPropertyDescriptors(t),n={};Gh(r,(i,a)=>{let s;(s=e(i,a,t))!==!1&&(n[a]=s||i)}),Object.defineProperties(t,n)},B7=t=>{CT(t,(e,r)=>{if(ia(t)&&["arguments","caller","callee"].indexOf(r)!==-1)return!1;const n=t[r];if(ia(n)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")})}})},I7=(t,e)=>{const r={},n=i=>{i.forEach(a=>{r[a]=!0})};return Ec(t)?n(t):n(String(t).split(e)),r},L7=()=>{},$7=(t,e)=>(t=+t,Number.isFinite(t)?t:e),gy="abcdefghijklmnopqrstuvwxyz",H_="0123456789",MT={DIGIT:H_,ALPHA:gy,ALPHA_DIGIT:gy+gy.toUpperCase()+H_},z7=(t=16,e=MT.ALPHA_DIGIT)=>{let r="";const{length:n}=e;for(;t--;)r+=e[Math.random()*n|0];return r};function q7(t){return!!(t&&ia(t.append)&&t[Symbol.toStringTag]==="FormData"&&t[Symbol.iterator])}const U7=t=>{const e=new Array(10),r=(n,i)=>{if(Zv(n)){if(e.indexOf(n)>=0)return;if(!("toJSON"in n)){e[i]=n;const a=Ec(n)?[]:{};return Gh(n,(s,o)=>{const u=r(s,i+1);!xh(u)&&(a[o]=u)}),e[i]=void 0,a}}return n};return r(t,0)},H7=Qa("AsyncFunction"),W7=t=>t&&(Zv(t)||ia(t))&&ia(t.then)&&ia(t.catch),Le={isArray:Ec,isArrayBuffer:_T,isBuffer:h7,isFormData:w7,isArrayBufferView:d7,isString:p7,isNumber:AT,isBoolean:m7,isObject:Zv,isPlainObject:wm,isUndefined:xh,isDate:v7,isFile:g7,isBlob:y7,isRegExp:k7,isFunction:ia,isStream:x7,isURLSearchParams:S7,isTypedArray:T7,isFileList:b7,forEach:Gh,merge:ub,extend:A7,trim:_7,stripBOM:D7,inherits:E7,toFlatObject:N7,kindOf:Gv,kindOfTest:Qa,endsWith:C7,toArray:M7,forEachEntry:O7,matchAll:F7,isHTMLForm:R7,hasOwnProperty:U_,hasOwnProp:U_,reduceDescriptors:CT,freezeMethods:B7,toObjectSet:I7,toCamelCase:P7,noop:L7,toFiniteNumber:$7,findKey:DT,global:ET,isContextDefined:NT,ALPHABET:MT,generateString:z7,isSpecCompliantForm:q7,toJSONObject:U7,isAsyncFn:H7,isThenable:W7};function nr(t,e,r,n,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=t,this.name="AxiosError",e&&(this.code=e),r&&(this.config=r),n&&(this.request=n),i&&(this.response=i)}Le.inherits(nr,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Le.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const TT=nr.prototype,OT={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(t=>{OT[t]={value:t}});Object.defineProperties(nr,OT);Object.defineProperty(TT,"isAxiosError",{value:!0});nr.from=(t,e,r,n,i,a)=>{const s=Object.create(TT);return Le.toFlatObject(t,s,function(u){return u!==Error.prototype},o=>o!=="isAxiosError"),nr.call(s,t.message,e,r,n,i),s.cause=t,s.name=t.name,a&&Object.assign(s,a),s};const V7=null;function lb(t){return Le.isPlainObject(t)||Le.isArray(t)}function FT(t){return Le.endsWith(t,"[]")?t.slice(0,-2):t}function W_(t,e,r){return t?t.concat(e).map(function(i,a){return i=FT(i),!r&&a?"["+i+"]":i}).join(r?".":""):e}function Y7(t){return Le.isArray(t)&&!t.some(lb)}const j7=Le.toFlatObject(Le,{},null,function(e){return/^is[A-Z]/.test(e)});function Kv(t,e,r){if(!Le.isObject(t))throw new TypeError("target must be an object");e=e||new FormData,r=Le.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(m,b){return!Le.isUndefined(b[m])});const n=r.metaTokens,i=r.visitor||c,a=r.dots,s=r.indexes,u=(r.Blob||typeof Blob<"u"&&Blob)&&Le.isSpecCompliantForm(e);if(!Le.isFunction(i))throw new TypeError("visitor must be a function");function l(g){if(g===null)return"";if(Le.isDate(g))return g.toISOString();if(!u&&Le.isBlob(g))throw new nr("Blob is not supported. Use a Buffer instead.");return Le.isArrayBuffer(g)||Le.isTypedArray(g)?u&&typeof Blob=="function"?new Blob([g]):Buffer.from(g):g}function c(g,m,b){let y=g;if(g&&!b&&typeof g=="object"){if(Le.endsWith(m,"{}"))m=n?m:m.slice(0,-2),g=JSON.stringify(g);else if(Le.isArray(g)&&Y7(g)||(Le.isFileList(g)||Le.endsWith(m,"[]"))&&(y=Le.toArray(g)))return m=FT(m),y.forEach(function(x,_){!(Le.isUndefined(x)||x===null)&&e.append(s===!0?W_([m],_,a):s===null?m:m+"[]",l(x))}),!1}return lb(g)?!0:(e.append(W_(b,m,a),l(g)),!1)}const f=[],h=Object.assign(j7,{defaultVisitor:c,convertValue:l,isVisitable:lb});function p(g,m){if(!Le.isUndefined(g)){if(f.indexOf(g)!==-1)throw Error("Circular reference detected in "+m.join("."));f.push(g),Le.forEach(g,function(y,S){(!(Le.isUndefined(y)||y===null)&&i.call(e,y,Le.isString(S)?S.trim():S,m,h))===!0&&p(y,m?m.concat(S):[S])}),f.pop()}}if(!Le.isObject(t))throw new TypeError("data must be an object");return p(t),e}function V_(t){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,function(n){return e[n]})}function _1(t,e){this._pairs=[],t&&Kv(t,this,e)}const RT=_1.prototype;RT.append=function(e,r){this._pairs.push([e,r])};RT.toString=function(e){const r=e?function(n){return e.call(this,n,V_)}:V_;return this._pairs.map(function(i){return r(i[0])+"="+r(i[1])},"").join("&")};function G7(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function PT(t,e,r){if(!e)return t;const n=r&&r.encode||G7,i=r&&r.serialize;let a;if(i?a=i(e,r):a=Le.isURLSearchParams(e)?e.toString():new _1(e,r).toString(n),a){const s=t.indexOf("#");s!==-1&&(t=t.slice(0,s)),t+=(t.indexOf("?")===-1?"?":"&")+a}return t}class Y_{constructor(){this.handlers=[]}use(e,r,n){return this.handlers.push({fulfilled:e,rejected:r,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){Le.forEach(this.handlers,function(n){n!==null&&e(n)})}}const kT={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},X7=typeof URLSearchParams<"u"?URLSearchParams:_1,Z7=typeof FormData<"u"?FormData:null,K7=typeof Blob<"u"?Blob:null,J7={isBrowser:!0,classes:{URLSearchParams:X7,FormData:Z7,Blob:K7},protocols:["http","https","file","blob","url","data"]},BT=typeof window<"u"&&typeof document<"u",Q7=(t=>BT&&["ReactNative","NativeScript","NS"].indexOf(t)<0)(typeof navigator<"u"&&navigator.product),eq=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",tq=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:BT,hasStandardBrowserEnv:Q7,hasStandardBrowserWebWorkerEnv:eq},Symbol.toStringTag,{value:"Module"})),Ga={...tq,...J7};function rq(t,e){return Kv(t,new Ga.classes.URLSearchParams,Object.assign({visitor:function(r,n,i,a){return Ga.isNode&&Le.isBuffer(r)?(this.append(n,r.toString("base64")),!1):a.defaultVisitor.apply(this,arguments)}},e))}function nq(t){return Le.matchAll(/\w+|\[(\w*)]/g,t).map(e=>e[0]==="[]"?"":e[1]||e[0])}function iq(t){const e={},r=Object.keys(t);let n;const i=r.length;let a;for(n=0;n=r.length;return s=!s&&Le.isArray(i)?i.length:s,u?(Le.hasOwnProp(i,s)?i[s]=[i[s],n]:i[s]=n,!o):((!i[s]||!Le.isObject(i[s]))&&(i[s]=[]),e(r,n,i[s],a)&&Le.isArray(i[s])&&(i[s]=iq(i[s])),!o)}if(Le.isFormData(t)&&Le.isFunction(t.entries)){const r={};return Le.forEachEntry(t,(n,i)=>{e(nq(n),i,r,0)}),r}return null}function aq(t,e,r){if(Le.isString(t))try{return(e||JSON.parse)(t),Le.trim(t)}catch(n){if(n.name!=="SyntaxError")throw n}return(r||JSON.stringify)(t)}const A1={transitional:kT,adapter:["xhr","http"],transformRequest:[function(e,r){const n=r.getContentType()||"",i=n.indexOf("application/json")>-1,a=Le.isObject(e);if(a&&Le.isHTMLForm(e)&&(e=new FormData(e)),Le.isFormData(e))return i?JSON.stringify(IT(e)):e;if(Le.isArrayBuffer(e)||Le.isBuffer(e)||Le.isStream(e)||Le.isFile(e)||Le.isBlob(e))return e;if(Le.isArrayBufferView(e))return e.buffer;if(Le.isURLSearchParams(e))return r.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let o;if(a){if(n.indexOf("application/x-www-form-urlencoded")>-1)return rq(e,this.formSerializer).toString();if((o=Le.isFileList(e))||n.indexOf("multipart/form-data")>-1){const u=this.env&&this.env.FormData;return Kv(o?{"files[]":e}:e,u&&new u,this.formSerializer)}}return a||i?(r.setContentType("application/json",!1),aq(e)):e}],transformResponse:[function(e){const r=this.transitional||A1.transitional,n=r&&r.forcedJSONParsing,i=this.responseType==="json";if(e&&Le.isString(e)&&(n&&!this.responseType||i)){const s=!(r&&r.silentJSONParsing)&&i;try{return JSON.parse(e)}catch(o){if(s)throw o.name==="SyntaxError"?nr.from(o,nr.ERR_BAD_RESPONSE,this,null,this.response):o}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Ga.classes.FormData,Blob:Ga.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Le.forEach(["delete","get","head","post","put","patch"],t=>{A1.headers[t]={}});const D1=A1,sq=Le.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),oq=t=>{const e={};let r,n,i;return t&&t.split(` +`).forEach(function(s){i=s.indexOf(":"),r=s.substring(0,i).trim().toLowerCase(),n=s.substring(i+1).trim(),!(!r||e[r]&&sq[r])&&(r==="set-cookie"?e[r]?e[r].push(n):e[r]=[n]:e[r]=e[r]?e[r]+", "+n:n)}),e},j_=Symbol("internals");function qf(t){return t&&String(t).trim().toLowerCase()}function Sm(t){return t===!1||t==null?t:Le.isArray(t)?t.map(Sm):String(t)}function uq(t){const e=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(t);)e[n[1]]=n[2];return e}const lq=t=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim());function yy(t,e,r,n,i){if(Le.isFunction(n))return n.call(this,e,r);if(i&&(e=r),!!Le.isString(e)){if(Le.isString(n))return e.indexOf(n)!==-1;if(Le.isRegExp(n))return n.test(e)}}function cq(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,r,n)=>r.toUpperCase()+n)}function fq(t,e){const r=Le.toCamelCase(" "+e);["get","set","has"].forEach(n=>{Object.defineProperty(t,n+r,{value:function(i,a,s){return this[n].call(this,e,i,a,s)},configurable:!0})})}class Jv{constructor(e){e&&this.set(e)}set(e,r,n){const i=this;function a(o,u,l){const c=qf(u);if(!c)throw new Error("header name must be a non-empty string");const f=Le.findKey(i,c);(!f||i[f]===void 0||l===!0||l===void 0&&i[f]!==!1)&&(i[f||u]=Sm(o))}const s=(o,u)=>Le.forEach(o,(l,c)=>a(l,c,u));return Le.isPlainObject(e)||e instanceof this.constructor?s(e,r):Le.isString(e)&&(e=e.trim())&&!lq(e)?s(oq(e),r):e!=null&&a(r,e,n),this}get(e,r){if(e=qf(e),e){const n=Le.findKey(this,e);if(n){const i=this[n];if(!r)return i;if(r===!0)return uq(i);if(Le.isFunction(r))return r.call(this,i,n);if(Le.isRegExp(r))return r.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,r){if(e=qf(e),e){const n=Le.findKey(this,e);return!!(n&&this[n]!==void 0&&(!r||yy(this,this[n],n,r)))}return!1}delete(e,r){const n=this;let i=!1;function a(s){if(s=qf(s),s){const o=Le.findKey(n,s);o&&(!r||yy(n,n[o],o,r))&&(delete n[o],i=!0)}}return Le.isArray(e)?e.forEach(a):a(e),i}clear(e){const r=Object.keys(this);let n=r.length,i=!1;for(;n--;){const a=r[n];(!e||yy(this,this[a],a,e,!0))&&(delete this[a],i=!0)}return i}normalize(e){const r=this,n={};return Le.forEach(this,(i,a)=>{const s=Le.findKey(n,a);if(s){r[s]=Sm(i),delete r[a];return}const o=e?cq(a):String(a).trim();o!==a&&delete r[a],r[o]=Sm(i),n[o]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const r=Object.create(null);return Le.forEach(this,(n,i)=>{n!=null&&n!==!1&&(r[i]=e&&Le.isArray(n)?n.join(", "):n)}),r}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,r])=>e+": "+r).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...r){const n=new this(e);return r.forEach(i=>n.set(i)),n}static accessor(e){const n=(this[j_]=this[j_]={accessors:{}}).accessors,i=this.prototype;function a(s){const o=qf(s);n[o]||(fq(i,s),n[o]=!0)}return Le.isArray(e)?e.forEach(a):a(e),this}}Jv.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);Le.reduceDescriptors(Jv.prototype,({value:t},e)=>{let r=e[0].toUpperCase()+e.slice(1);return{get:()=>t,set(n){this[r]=n}}});Le.freezeMethods(Jv);const zs=Jv;function by(t,e){const r=this||D1,n=e||r,i=zs.from(n.headers);let a=n.data;return Le.forEach(t,function(o){a=o.call(r,a,i.normalize(),e?e.status:void 0)}),i.normalize(),a}function LT(t){return!!(t&&t.__CANCEL__)}function Xh(t,e,r){nr.call(this,t??"canceled",nr.ERR_CANCELED,e,r),this.name="CanceledError"}Le.inherits(Xh,nr,{__CANCEL__:!0});function hq(t,e,r){const n=r.config.validateStatus;!r.status||!n||n(r.status)?t(r):e(new nr("Request failed with status code "+r.status,[nr.ERR_BAD_REQUEST,nr.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r))}const dq=Ga.hasStandardBrowserEnv?{write(t,e,r,n,i,a){const s=[t+"="+encodeURIComponent(e)];Le.isNumber(r)&&s.push("expires="+new Date(r).toGMTString()),Le.isString(n)&&s.push("path="+n),Le.isString(i)&&s.push("domain="+i),a===!0&&s.push("secure"),document.cookie=s.join("; ")},read(t){const e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(t){this.write(t,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function pq(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}function mq(t,e){return e?t.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):t}function $T(t,e){return t&&!pq(e)?mq(t,e):e}const vq=Ga.hasStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a");let n;function i(a){let s=a;return e&&(r.setAttribute("href",s),s=r.href),r.setAttribute("href",s),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:r.pathname.charAt(0)==="/"?r.pathname:"/"+r.pathname}}return n=i(window.location.href),function(s){const o=Le.isString(s)?i(s):s;return o.protocol===n.protocol&&o.host===n.host}}():function(){return function(){return!0}}();function gq(t){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}function yq(t,e){t=t||10;const r=new Array(t),n=new Array(t);let i=0,a=0,s;return e=e!==void 0?e:1e3,function(u){const l=Date.now(),c=n[a];s||(s=l),r[i]=u,n[i]=l;let f=a,h=0;for(;f!==i;)h+=r[f++],f=f%t;if(i=(i+1)%t,i===a&&(a=(a+1)%t),l-s{const a=i.loaded,s=i.lengthComputable?i.total:void 0,o=a-r,u=n(o),l=a<=s;r=a;const c={loaded:a,total:s,progress:s?a/s:void 0,bytes:o,rate:u||void 0,estimated:u&&s&&l?(s-a)/u:void 0,event:i};c[e?"download":"upload"]=!0,t(c)}}const bq=typeof XMLHttpRequest<"u",xq=bq&&function(t){return new Promise(function(r,n){let i=t.data;const a=zs.from(t.headers).normalize();let{responseType:s,withXSRFToken:o}=t,u;function l(){t.cancelToken&&t.cancelToken.unsubscribe(u),t.signal&&t.signal.removeEventListener("abort",u)}let c;if(Le.isFormData(i)){if(Ga.hasStandardBrowserEnv||Ga.hasStandardBrowserWebWorkerEnv)a.setContentType(!1);else if((c=a.getContentType())!==!1){const[m,...b]=c?c.split(";").map(y=>y.trim()).filter(Boolean):[];a.setContentType([m||"multipart/form-data",...b].join("; "))}}let f=new XMLHttpRequest;if(t.auth){const m=t.auth.username||"",b=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";a.set("Authorization","Basic "+btoa(m+":"+b))}const h=$T(t.baseURL,t.url);f.open(t.method.toUpperCase(),PT(h,t.params,t.paramsSerializer),!0),f.timeout=t.timeout;function p(){if(!f)return;const m=zs.from("getAllResponseHeaders"in f&&f.getAllResponseHeaders()),y={data:!s||s==="text"||s==="json"?f.responseText:f.response,status:f.status,statusText:f.statusText,headers:m,config:t,request:f};hq(function(x){r(x),l()},function(x){n(x),l()},y),f=null}if("onloadend"in f?f.onloadend=p:f.onreadystatechange=function(){!f||f.readyState!==4||f.status===0&&!(f.responseURL&&f.responseURL.indexOf("file:")===0)||setTimeout(p)},f.onabort=function(){f&&(n(new nr("Request aborted",nr.ECONNABORTED,t,f)),f=null)},f.onerror=function(){n(new nr("Network Error",nr.ERR_NETWORK,t,f)),f=null},f.ontimeout=function(){let b=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded";const y=t.transitional||kT;t.timeoutErrorMessage&&(b=t.timeoutErrorMessage),n(new nr(b,y.clarifyTimeoutError?nr.ETIMEDOUT:nr.ECONNABORTED,t,f)),f=null},Ga.hasStandardBrowserEnv&&(o&&Le.isFunction(o)&&(o=o(t)),o||o!==!1&&vq(h))){const m=t.xsrfHeaderName&&t.xsrfCookieName&&dq.read(t.xsrfCookieName);m&&a.set(t.xsrfHeaderName,m)}i===void 0&&a.setContentType(null),"setRequestHeader"in f&&Le.forEach(a.toJSON(),function(b,y){f.setRequestHeader(y,b)}),Le.isUndefined(t.withCredentials)||(f.withCredentials=!!t.withCredentials),s&&s!=="json"&&(f.responseType=t.responseType),typeof t.onDownloadProgress=="function"&&f.addEventListener("progress",G_(t.onDownloadProgress,!0)),typeof t.onUploadProgress=="function"&&f.upload&&f.upload.addEventListener("progress",G_(t.onUploadProgress)),(t.cancelToken||t.signal)&&(u=m=>{f&&(n(!m||m.type?new Xh(null,t,f):m),f.abort(),f=null)},t.cancelToken&&t.cancelToken.subscribe(u),t.signal&&(t.signal.aborted?u():t.signal.addEventListener("abort",u)));const g=gq(h);if(g&&Ga.protocols.indexOf(g)===-1){n(new nr("Unsupported protocol "+g+":",nr.ERR_BAD_REQUEST,t));return}f.send(i||null)})},cb={http:V7,xhr:xq};Le.forEach(cb,(t,e)=>{if(t){try{Object.defineProperty(t,"name",{value:e})}catch{}Object.defineProperty(t,"adapterName",{value:e})}});const X_=t=>`- ${t}`,wq=t=>Le.isFunction(t)||t===null||t===!1,zT={getAdapter:t=>{t=Le.isArray(t)?t:[t];const{length:e}=t;let r,n;const i={};for(let a=0;a`adapter ${o} `+(u===!1?"is not supported by the environment":"is not available in the build"));let s=e?a.length>1?`since : +`+a.map(X_).join(` +`):" "+X_(a[0]):"as no adapter specified";throw new nr("There is no suitable adapter to dispatch the request "+s,"ERR_NOT_SUPPORT")}return n},adapters:cb};function xy(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new Xh(null,t)}function Z_(t){return xy(t),t.headers=zs.from(t.headers),t.data=by.call(t,t.transformRequest),["post","put","patch"].indexOf(t.method)!==-1&&t.headers.setContentType("application/x-www-form-urlencoded",!1),zT.getAdapter(t.adapter||D1.adapter)(t).then(function(n){return xy(t),n.data=by.call(t,t.transformResponse,n),n.headers=zs.from(n.headers),n},function(n){return LT(n)||(xy(t),n&&n.response&&(n.response.data=by.call(t,t.transformResponse,n.response),n.response.headers=zs.from(n.response.headers))),Promise.reject(n)})}const K_=t=>t instanceof zs?t.toJSON():t;function ac(t,e){e=e||{};const r={};function n(l,c,f){return Le.isPlainObject(l)&&Le.isPlainObject(c)?Le.merge.call({caseless:f},l,c):Le.isPlainObject(c)?Le.merge({},c):Le.isArray(c)?c.slice():c}function i(l,c,f){if(Le.isUndefined(c)){if(!Le.isUndefined(l))return n(void 0,l,f)}else return n(l,c,f)}function a(l,c){if(!Le.isUndefined(c))return n(void 0,c)}function s(l,c){if(Le.isUndefined(c)){if(!Le.isUndefined(l))return n(void 0,l)}else return n(void 0,c)}function o(l,c,f){if(f in e)return n(l,c);if(f in t)return n(void 0,l)}const u={url:a,method:a,data:a,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:o,headers:(l,c)=>i(K_(l),K_(c),!0)};return Le.forEach(Object.keys(Object.assign({},t,e)),function(c){const f=u[c]||i,h=f(t[c],e[c],c);Le.isUndefined(h)&&f!==o||(r[c]=h)}),r}const qT="1.6.7",E1={};["object","boolean","number","function","string","symbol"].forEach((t,e)=>{E1[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}});const J_={};E1.transitional=function(e,r,n){function i(a,s){return"[Axios v"+qT+"] Transitional option '"+a+"'"+s+(n?". "+n:"")}return(a,s,o)=>{if(e===!1)throw new nr(i(s," has been removed"+(r?" in "+r:"")),nr.ERR_DEPRECATED);return r&&!J_[s]&&(J_[s]=!0,console.warn(i(s," has been deprecated since v"+r+" and will be removed in the near future"))),e?e(a,s,o):!0}};function Sq(t,e,r){if(typeof t!="object")throw new nr("options must be an object",nr.ERR_BAD_OPTION_VALUE);const n=Object.keys(t);let i=n.length;for(;i-- >0;){const a=n[i],s=e[a];if(s){const o=t[a],u=o===void 0||s(o,a,t);if(u!==!0)throw new nr("option "+a+" must be "+u,nr.ERR_BAD_OPTION_VALUE);continue}if(r!==!0)throw new nr("Unknown option "+a,nr.ERR_BAD_OPTION)}}const fb={assertOptions:Sq,validators:E1},bo=fb.validators;class qm{constructor(e){this.defaults=e,this.interceptors={request:new Y_,response:new Y_}}async request(e,r){try{return await this._request(e,r)}catch(n){if(n instanceof Error){let i;Error.captureStackTrace?Error.captureStackTrace(i={}):i=new Error;const a=i.stack?i.stack.replace(/^.+\n/,""):"";n.stack?a&&!String(n.stack).endsWith(a.replace(/^.+\n.+\n/,""))&&(n.stack+=` +`+a):n.stack=a}throw n}}_request(e,r){typeof e=="string"?(r=r||{},r.url=e):r=e||{},r=ac(this.defaults,r);const{transitional:n,paramsSerializer:i,headers:a}=r;n!==void 0&&fb.assertOptions(n,{silentJSONParsing:bo.transitional(bo.boolean),forcedJSONParsing:bo.transitional(bo.boolean),clarifyTimeoutError:bo.transitional(bo.boolean)},!1),i!=null&&(Le.isFunction(i)?r.paramsSerializer={serialize:i}:fb.assertOptions(i,{encode:bo.function,serialize:bo.function},!0)),r.method=(r.method||this.defaults.method||"get").toLowerCase();let s=a&&Le.merge(a.common,a[r.method]);a&&Le.forEach(["delete","get","head","post","put","patch","common"],g=>{delete a[g]}),r.headers=zs.concat(s,a);const o=[];let u=!0;this.interceptors.request.forEach(function(m){typeof m.runWhen=="function"&&m.runWhen(r)===!1||(u=u&&m.synchronous,o.unshift(m.fulfilled,m.rejected))});const l=[];this.interceptors.response.forEach(function(m){l.push(m.fulfilled,m.rejected)});let c,f=0,h;if(!u){const g=[Z_.bind(this),void 0];for(g.unshift.apply(g,o),g.push.apply(g,l),h=g.length,c=Promise.resolve(r);f{if(!n._listeners)return;let a=n._listeners.length;for(;a-- >0;)n._listeners[a](i);n._listeners=null}),this.promise.then=i=>{let a;const s=new Promise(o=>{n.subscribe(o),a=o}).then(i);return s.cancel=function(){n.unsubscribe(a)},s},e(function(a,s,o){n.reason||(n.reason=new Xh(a,s,o),r(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const r=this._listeners.indexOf(e);r!==-1&&this._listeners.splice(r,1)}static source(){let e;return{token:new N1(function(i){e=i}),cancel:e}}}const _q=N1;function Aq(t){return function(r){return t.apply(null,r)}}function Dq(t){return Le.isObject(t)&&t.isAxiosError===!0}const hb={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(hb).forEach(([t,e])=>{hb[e]=t});const Eq=hb;function UT(t){const e=new _m(t),r=ST(_m.prototype.request,e);return Le.extend(r,_m.prototype,e,{allOwnKeys:!0}),Le.extend(r,e,null,{allOwnKeys:!0}),r.create=function(i){return UT(ac(t,i))},r}const rn=UT(D1);rn.Axios=_m;rn.CanceledError=Xh;rn.CancelToken=_q;rn.isCancel=LT;rn.VERSION=qT;rn.toFormData=Kv;rn.AxiosError=nr;rn.Cancel=rn.CanceledError;rn.all=function(e){return Promise.all(e)};rn.spread=Aq;rn.isAxiosError=Dq;rn.mergeConfig=ac;rn.AxiosHeaders=zs;rn.formToJSON=t=>IT(Le.isHTMLForm(t)?new FormData(t):t);rn.getAdapter=zT.getAdapter;rn.HttpStatusCode=Eq;rn.default=rn;const HT=rn;/*! * @kurkle/color v0.3.2 * https://github.com/kurkle/color#readme * (c) 2023 Jukka Kurkela * Released under the MIT License - */function Zh(t){return t+.5|0}const Mo=(t,e,r)=>Math.max(Math.min(t,r),e);function Zf(t){return Mo(Zh(t*2.55),0,255)}function ko(t){return Mo(Zh(t*255),0,255)}function Ts(t){return Mo(Zh(t/2.55)/100,0,1)}function Z_(t){return Mo(Zh(t*100),0,100)}const Gi={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},fb=[..."0123456789ABCDEF"],hq=t=>fb[t&15],dq=t=>fb[(t&240)>>4]+fb[t&15],Rp=t=>(t&240)>>4===(t&15),pq=t=>Rp(t.r)&&Rp(t.g)&&Rp(t.b)&&Rp(t.a);function mq(t){var e=t.length,r;return t[0]==="#"&&(e===4||e===5?r={r:255&Gi[t[1]]*17,g:255&Gi[t[2]]*17,b:255&Gi[t[3]]*17,a:e===5?Gi[t[4]]*17:255}:(e===7||e===9)&&(r={r:Gi[t[1]]<<4|Gi[t[2]],g:Gi[t[3]]<<4|Gi[t[4]],b:Gi[t[5]]<<4|Gi[t[6]],a:e===9?Gi[t[7]]<<4|Gi[t[8]]:255})),r}const vq=(t,e)=>t<255?e(t):"";function gq(t){var e=pq(t)?hq:dq;return t?"#"+e(t.r)+e(t.g)+e(t.b)+vq(t.a,e):void 0}const yq=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function $T(t,e,r){const n=e*Math.min(r,1-r),i=(a,s=(a+t/30)%12)=>r-n*Math.max(Math.min(s-3,9-s,1),-1);return[i(0),i(8),i(4)]}function bq(t,e,r){const n=(i,a=(i+t/60)%6)=>r-r*e*Math.max(Math.min(a,4-a,1),0);return[n(5),n(3),n(1)]}function xq(t,e,r){const n=$T(t,1,.5);let i;for(e+r>1&&(i=1/(e+r),e*=i,r*=i),i=0;i<3;i++)n[i]*=1-e-r,n[i]+=e;return n}function wq(t,e,r,n,i){return t===i?(e-r)/n+(e.5?c/(2-a-s):c/(a+s),u=wq(r,n,i,c,a),u=u*60+.5),[u|0,l||0,o]}function C1(t,e,r,n){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,r,n)).map(ko)}function M1(t,e,r){return C1($T,t,e,r)}function Sq(t,e,r){return C1(xq,t,e,r)}function _q(t,e,r){return C1(bq,t,e,r)}function zT(t){return(t%360+360)%360}function Aq(t){const e=yq.exec(t);let r=255,n;if(!e)return;e[5]!==n&&(r=e[6]?Zf(+e[5]):ko(+e[5]));const i=zT(+e[2]),a=+e[3]/100,s=+e[4]/100;return e[1]==="hwb"?n=Sq(i,a,s):e[1]==="hsv"?n=_q(i,a,s):n=M1(i,a,s),{r:n[0],g:n[1],b:n[2],a:r}}function Dq(t,e){var r=E1(t);r[0]=zT(r[0]+e),r=M1(r),t.r=r[0],t.g=r[1],t.b=r[2]}function Nq(t){if(!t)return;const e=E1(t),r=e[0],n=Z_(e[1]),i=Z_(e[2]);return t.a<255?`hsla(${r}, ${n}%, ${i}%, ${Ts(t.a)})`:`hsl(${r}, ${n}%, ${i}%)`}const K_={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},J_={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function Eq(){const t={},e=Object.keys(J_),r=Object.keys(K_);let n,i,a,s,o;for(n=0;n>16&255,a>>8&255,a&255]}return t}let Ip;function Cq(t){Ip||(Ip=Eq(),Ip.transparent=[0,0,0,0]);const e=Ip[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:e.length===4?e[3]:255}}const Mq=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function Tq(t){const e=Mq.exec(t);let r=255,n,i,a;if(e){if(e[7]!==n){const s=+e[7];r=e[8]?Zf(s):Mo(s*255,0,255)}return n=+e[1],i=+e[3],a=+e[5],n=255&(e[2]?Zf(n):Mo(n,0,255)),i=255&(e[4]?Zf(i):Mo(i,0,255)),a=255&(e[6]?Zf(a):Mo(a,0,255)),{r:n,g:i,b:a,a:r}}}function Oq(t){return t&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${Ts(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`)}const by=t=>t<=.0031308?t*12.92:Math.pow(t,1/2.4)*1.055-.055,Ol=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function Fq(t,e,r){const n=Ol(Ts(t.r)),i=Ol(Ts(t.g)),a=Ol(Ts(t.b));return{r:ko(by(n+r*(Ol(Ts(e.r))-n))),g:ko(by(i+r*(Ol(Ts(e.g))-i))),b:ko(by(a+r*(Ol(Ts(e.b))-a))),a:t.a+r*(e.a-t.a)}}function Bp(t,e,r){if(t){let n=E1(t);n[e]=Math.max(0,Math.min(n[e]+n[e]*r,e===0?360:1)),n=M1(n),t.r=n[0],t.g=n[1],t.b=n[2]}}function qT(t,e){return t&&Object.assign(e||{},t)}function Q_(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=ko(t[3]))):(e=qT(t,{r:0,g:0,b:0,a:1}),e.a=ko(e.a)),e}function Pq(t){return t.charAt(0)==="r"?Tq(t):Aq(t)}class wh{constructor(e){if(e instanceof wh)return e;const r=typeof e;let n;r==="object"?n=Q_(e):r==="string"&&(n=mq(e)||Cq(e)||Pq(e)),this._rgb=n,this._valid=!!n}get valid(){return this._valid}get rgb(){var e=qT(this._rgb);return e&&(e.a=Ts(e.a)),e}set rgb(e){this._rgb=Q_(e)}rgbString(){return this._valid?Oq(this._rgb):void 0}hexString(){return this._valid?gq(this._rgb):void 0}hslString(){return this._valid?Nq(this._rgb):void 0}mix(e,r){if(e){const n=this.rgb,i=e.rgb;let a;const s=r===a?.5:r,o=2*s-1,u=n.a-i.a,l=((o*u===-1?o:(o+u)/(1+o*u))+1)/2;a=1-l,n.r=255&l*n.r+a*i.r+.5,n.g=255&l*n.g+a*i.g+.5,n.b=255&l*n.b+a*i.b+.5,n.a=s*n.a+(1-s)*i.a,this.rgb=n}return this}interpolate(e,r){return e&&(this._rgb=Fq(this._rgb,e._rgb,r)),this}clone(){return new wh(this.rgb)}alpha(e){return this._rgb.a=ko(e),this}clearer(e){const r=this._rgb;return r.a*=1-e,this}greyscale(){const e=this._rgb,r=Zh(e.r*.3+e.g*.59+e.b*.11);return e.r=e.g=e.b=r,this}opaquer(e){const r=this._rgb;return r.a*=1+e,this}negate(){const e=this._rgb;return e.r=255-e.r,e.g=255-e.g,e.b=255-e.b,this}lighten(e){return Bp(this._rgb,2,e),this}darken(e){return Bp(this._rgb,2,-e),this}saturate(e){return Bp(this._rgb,1,e),this}desaturate(e){return Bp(this._rgb,1,-e),this}rotate(e){return Dq(this._rgb,e),this}}/*! + */function Zh(t){return t+.5|0}const Mo=(t,e,r)=>Math.max(Math.min(t,r),e);function Jf(t){return Mo(Zh(t*2.55),0,255)}function Io(t){return Mo(Zh(t*255),0,255)}function Ts(t){return Mo(Zh(t/2.55)/100,0,1)}function Q_(t){return Mo(Zh(t*100),0,100)}const Gi={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},db=[..."0123456789ABCDEF"],Nq=t=>db[t&15],Cq=t=>db[(t&240)>>4]+db[t&15],Pp=t=>(t&240)>>4===(t&15),Mq=t=>Pp(t.r)&&Pp(t.g)&&Pp(t.b)&&Pp(t.a);function Tq(t){var e=t.length,r;return t[0]==="#"&&(e===4||e===5?r={r:255&Gi[t[1]]*17,g:255&Gi[t[2]]*17,b:255&Gi[t[3]]*17,a:e===5?Gi[t[4]]*17:255}:(e===7||e===9)&&(r={r:Gi[t[1]]<<4|Gi[t[2]],g:Gi[t[3]]<<4|Gi[t[4]],b:Gi[t[5]]<<4|Gi[t[6]],a:e===9?Gi[t[7]]<<4|Gi[t[8]]:255})),r}const Oq=(t,e)=>t<255?e(t):"";function Fq(t){var e=Mq(t)?Nq:Cq;return t?"#"+e(t.r)+e(t.g)+e(t.b)+Oq(t.a,e):void 0}const Rq=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function WT(t,e,r){const n=e*Math.min(r,1-r),i=(a,s=(a+t/30)%12)=>r-n*Math.max(Math.min(s-3,9-s,1),-1);return[i(0),i(8),i(4)]}function Pq(t,e,r){const n=(i,a=(i+t/60)%6)=>r-r*e*Math.max(Math.min(a,4-a,1),0);return[n(5),n(3),n(1)]}function kq(t,e,r){const n=WT(t,1,.5);let i;for(e+r>1&&(i=1/(e+r),e*=i,r*=i),i=0;i<3;i++)n[i]*=1-e-r,n[i]+=e;return n}function Bq(t,e,r,n,i){return t===i?(e-r)/n+(e.5?c/(2-a-s):c/(a+s),u=Bq(r,n,i,c,a),u=u*60+.5),[u|0,l||0,o]}function M1(t,e,r,n){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,r,n)).map(Io)}function T1(t,e,r){return M1(WT,t,e,r)}function Iq(t,e,r){return M1(kq,t,e,r)}function Lq(t,e,r){return M1(Pq,t,e,r)}function VT(t){return(t%360+360)%360}function $q(t){const e=Rq.exec(t);let r=255,n;if(!e)return;e[5]!==n&&(r=e[6]?Jf(+e[5]):Io(+e[5]));const i=VT(+e[2]),a=+e[3]/100,s=+e[4]/100;return e[1]==="hwb"?n=Iq(i,a,s):e[1]==="hsv"?n=Lq(i,a,s):n=T1(i,a,s),{r:n[0],g:n[1],b:n[2],a:r}}function zq(t,e){var r=C1(t);r[0]=VT(r[0]+e),r=T1(r),t.r=r[0],t.g=r[1],t.b=r[2]}function qq(t){if(!t)return;const e=C1(t),r=e[0],n=Q_(e[1]),i=Q_(e[2]);return t.a<255?`hsla(${r}, ${n}%, ${i}%, ${Ts(t.a)})`:`hsl(${r}, ${n}%, ${i}%)`}const eA={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},tA={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function Uq(){const t={},e=Object.keys(tA),r=Object.keys(eA);let n,i,a,s,o;for(n=0;n>16&255,a>>8&255,a&255]}return t}let kp;function Hq(t){kp||(kp=Uq(),kp.transparent=[0,0,0,0]);const e=kp[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:e.length===4?e[3]:255}}const Wq=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function Vq(t){const e=Wq.exec(t);let r=255,n,i,a;if(e){if(e[7]!==n){const s=+e[7];r=e[8]?Jf(s):Mo(s*255,0,255)}return n=+e[1],i=+e[3],a=+e[5],n=255&(e[2]?Jf(n):Mo(n,0,255)),i=255&(e[4]?Jf(i):Mo(i,0,255)),a=255&(e[6]?Jf(a):Mo(a,0,255)),{r:n,g:i,b:a,a:r}}}function Yq(t){return t&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${Ts(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`)}const wy=t=>t<=.0031308?t*12.92:Math.pow(t,1/2.4)*1.055-.055,Ol=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function jq(t,e,r){const n=Ol(Ts(t.r)),i=Ol(Ts(t.g)),a=Ol(Ts(t.b));return{r:Io(wy(n+r*(Ol(Ts(e.r))-n))),g:Io(wy(i+r*(Ol(Ts(e.g))-i))),b:Io(wy(a+r*(Ol(Ts(e.b))-a))),a:t.a+r*(e.a-t.a)}}function Bp(t,e,r){if(t){let n=C1(t);n[e]=Math.max(0,Math.min(n[e]+n[e]*r,e===0?360:1)),n=T1(n),t.r=n[0],t.g=n[1],t.b=n[2]}}function YT(t,e){return t&&Object.assign(e||{},t)}function rA(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=Io(t[3]))):(e=YT(t,{r:0,g:0,b:0,a:1}),e.a=Io(e.a)),e}function Gq(t){return t.charAt(0)==="r"?Vq(t):$q(t)}class wh{constructor(e){if(e instanceof wh)return e;const r=typeof e;let n;r==="object"?n=rA(e):r==="string"&&(n=Tq(e)||Hq(e)||Gq(e)),this._rgb=n,this._valid=!!n}get valid(){return this._valid}get rgb(){var e=YT(this._rgb);return e&&(e.a=Ts(e.a)),e}set rgb(e){this._rgb=rA(e)}rgbString(){return this._valid?Yq(this._rgb):void 0}hexString(){return this._valid?Fq(this._rgb):void 0}hslString(){return this._valid?qq(this._rgb):void 0}mix(e,r){if(e){const n=this.rgb,i=e.rgb;let a;const s=r===a?.5:r,o=2*s-1,u=n.a-i.a,l=((o*u===-1?o:(o+u)/(1+o*u))+1)/2;a=1-l,n.r=255&l*n.r+a*i.r+.5,n.g=255&l*n.g+a*i.g+.5,n.b=255&l*n.b+a*i.b+.5,n.a=s*n.a+(1-s)*i.a,this.rgb=n}return this}interpolate(e,r){return e&&(this._rgb=jq(this._rgb,e._rgb,r)),this}clone(){return new wh(this.rgb)}alpha(e){return this._rgb.a=Io(e),this}clearer(e){const r=this._rgb;return r.a*=1-e,this}greyscale(){const e=this._rgb,r=Zh(e.r*.3+e.g*.59+e.b*.11);return e.r=e.g=e.b=r,this}opaquer(e){const r=this._rgb;return r.a*=1+e,this}negate(){const e=this._rgb;return e.r=255-e.r,e.g=255-e.g,e.b=255-e.b,this}lighten(e){return Bp(this._rgb,2,e),this}darken(e){return Bp(this._rgb,2,-e),this}saturate(e){return Bp(this._rgb,1,e),this}desaturate(e){return Bp(this._rgb,1,-e),this}rotate(e){return zq(this._rgb,e),this}}/*! * Chart.js v4.4.1 * https://www.chartjs.org * (c) 2023 Chart.js Contributors * Released under the MIT License - */function ws(){}const Rq=(()=>{let t=0;return()=>t++})();function or(t){return t===null||typeof t>"u"}function Or(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return e.slice(0,7)==="[object"&&e.slice(-6)==="Array]"}function Gt(t){return t!==null&&Object.prototype.toString.call(t)==="[object Object]"}function Vr(t){return(typeof t=="number"||t instanceof Number)&&isFinite(+t)}function Mi(t,e){return Vr(t)?t:e}function Rt(t,e){return typeof t>"u"?e:t}const Iq=(t,e)=>typeof t=="string"&&t.endsWith("%")?parseFloat(t)/100:+t/e,UT=(t,e)=>typeof t=="string"&&t.endsWith("%")?parseFloat(t)/100*e:+t;function Cr(t,e,r){if(t&&typeof t.call=="function")return t.apply(r,e)}function yr(t,e,r,n){let i,a,s;if(Or(t))if(a=t.length,n)for(i=a-1;i>=0;i--)e.call(r,t[i],i);else for(i=0;it,x:t=>t.x,y:t=>t.y};function Lq(t){const e=t.split("."),r=[];let n="";for(const i of e)n+=i,n.endsWith("\\")?n=n.slice(0,-1)+".":(r.push(n),n="");return r}function $q(t){const e=Lq(t);return r=>{for(const n of e){if(n==="")break;r=r&&r[n]}return r}}function zo(t,e){return(eA[e]||(eA[e]=$q(e)))(t)}function T1(t){return t.charAt(0).toUpperCase()+t.slice(1)}const _h=t=>typeof t<"u",qo=t=>typeof t=="function",tA=(t,e)=>{if(t.size!==e.size)return!1;for(const r of t)if(!e.has(r))return!1;return!0};function zq(t){return t.type==="mouseup"||t.type==="click"||t.type==="contextmenu"}const Pr=Math.PI,Fr=2*Pr,qq=Fr+Pr,Wm=Number.POSITIVE_INFINITY,Uq=Pr/180,en=Pr/2,bu=Pr/4,rA=Pr*2/3,To=Math.log10,Xa=Math.sign;function sh(t,e,r){return Math.abs(t-e)i-a).pop(),e}function ic(t){return!isNaN(parseFloat(t))&&isFinite(t)}function Wq(t,e){const r=Math.round(t);return r-e<=t&&r+e>=t}function WT(t,e,r){let n,i,a;for(n=0,i=t.length;nu&&l=Math.min(e,r)-n&&t<=Math.max(e,r)+n}function F1(t,e,r){r=r||(s=>t[s]1;)a=i+n>>1,r(a)?i=a:n=a;return{lo:i,hi:n}}const Ps=(t,e,r,n)=>F1(t,r,n?i=>{const a=t[i][e];return at[i][e]F1(t,r,n=>t[n][e]>=r);function Gq(t,e,r){let n=0,i=t.length;for(;nn&&t[i-1]>r;)i--;return n>0||i{const n="_onData"+T1(r),i=t[r];Object.defineProperty(t,r,{configurable:!0,enumerable:!1,value(...a){const s=i.apply(this,a);return t._chartjs.listeners.forEach(o=>{typeof o[n]=="function"&&o[n](...a)}),s}})})}function aA(t,e){const r=t._chartjs;if(!r)return;const n=r.listeners,i=n.indexOf(e);i!==-1&&n.splice(i,1),!(n.length>0)&&(YT.forEach(a=>{delete t[a]}),delete t._chartjs)}function jT(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}const GT=function(){return typeof window>"u"?function(t){return t()}:window.requestAnimationFrame}();function XT(t,e){let r=[],n=!1;return function(...i){r=i,n||(n=!0,GT.call(window,()=>{n=!1,t.apply(e,r)}))}}function Zq(t,e){let r;return function(...n){return e?(clearTimeout(r),r=setTimeout(t,e,n)):t.apply(this,n),e}}const P1=t=>t==="start"?"left":t==="end"?"right":"center",$n=(t,e,r)=>t==="start"?e:t==="end"?r:(e+r)/2,Kq=(t,e,r,n)=>t===(n?"left":"right")?r:t==="center"?(e+r)/2:e;function ZT(t,e,r){const n=e.length;let i=0,a=n;if(t._sorted){const{iScale:s,_parsed:o}=t,u=s.axis,{min:l,max:c,minDefined:f,maxDefined:h}=s.getUserBounds();f&&(i=wn(Math.min(Ps(o,u,l).lo,r?n:Ps(e,u,s.getPixelForValue(l)).lo),0,n-1)),h?a=wn(Math.max(Ps(o,s.axis,c,!0).hi+1,r?0:Ps(e,u,s.getPixelForValue(c),!0).hi+1),i,n)-i:a=n-i}return{start:i,count:a}}function KT(t){const{xScale:e,yScale:r,_scaleRanges:n}=t,i={xmin:e.min,xmax:e.max,ymin:r.min,ymax:r.max};if(!n)return t._scaleRanges=i,!0;const a=n.xmin!==e.min||n.xmax!==e.max||n.ymin!==r.min||n.ymax!==r.max;return Object.assign(n,i),a}const kp=t=>t===0||t===1,sA=(t,e,r)=>-(Math.pow(2,10*(t-=1))*Math.sin((t-e)*Fr/r)),oA=(t,e,r)=>Math.pow(2,-10*t)*Math.sin((t-e)*Fr/r)+1,oh={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>-Math.cos(t*en)+1,easeOutSine:t=>Math.sin(t*en),easeInOutSine:t=>-.5*(Math.cos(Pr*t)-1),easeInExpo:t=>t===0?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>t===1?1:-Math.pow(2,-10*t)+1,easeInOutExpo:t=>kp(t)?t:t<.5?.5*Math.pow(2,10*(t*2-1)):.5*(-Math.pow(2,-10*(t*2-1))+2),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>kp(t)?t:sA(t,.075,.3),easeOutElastic:t=>kp(t)?t:oA(t,.075,.3),easeInOutElastic(t){return kp(t)?t:t<.5?.5*sA(t*2,.1125,.45):.5+.5*oA(t*2-1,.1125,.45)},easeInBack(t){return t*t*((1.70158+1)*t-1.70158)},easeOutBack(t){return(t-=1)*t*((1.70158+1)*t+1.70158)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?.5*(t*t*(((e*=1.525)+1)*t-e)):.5*((t-=2)*t*(((e*=1.525)+1)*t+e)+2)},easeInBounce:t=>1-oh.easeOutBounce(1-t),easeOutBounce(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:t=>t<.5?oh.easeInBounce(t*2)*.5:oh.easeOutBounce(t*2-1)*.5+.5};function R1(t){if(t&&typeof t=="object"){const e=t.toString();return e==="[object CanvasPattern]"||e==="[object CanvasGradient]"}return!1}function uA(t){return R1(t)?t:new wh(t)}function xy(t){return R1(t)?t:new wh(t).saturate(.5).darken(.1).hexString()}const Jq=["x","y","borderWidth","radius","tension"],Qq=["color","borderColor","backgroundColor"];function eU(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:e=>e!=="onProgress"&&e!=="onComplete"&&e!=="fn"}),t.set("animations",{colors:{type:"color",properties:Qq},numbers:{type:"number",properties:Jq}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:e=>e|0}}}})}function tU(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}const lA=new Map;function rU(t,e){e=e||{};const r=t+JSON.stringify(e);let n=lA.get(r);return n||(n=new Intl.NumberFormat(t,e),lA.set(r,n)),n}function Kh(t,e,r){return rU(e,r).format(t)}const JT={values(t){return Or(t)?t:""+t},numeric(t,e,r){if(t===0)return"0";const n=this.chart.options.locale;let i,a=t;if(r.length>1){const l=Math.max(Math.abs(r[0].value),Math.abs(r[r.length-1].value));(l<1e-4||l>1e15)&&(i="scientific"),a=nU(t,r)}const s=To(Math.abs(a)),o=isNaN(s)?1:Math.max(Math.min(-1*Math.floor(s),20),0),u={notation:i,minimumFractionDigits:o,maximumFractionDigits:o};return Object.assign(u,this.options.ticks.format),Kh(t,n,u)},logarithmic(t,e,r){if(t===0)return"0";const n=r[e].significand||t/Math.pow(10,Math.floor(To(t)));return[1,2,3,5,10,15].includes(n)||e>.8*r.length?JT.numeric.call(this,t,e,r):""}};function nU(t,e){let r=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;return Math.abs(r)>=1&&t!==Math.floor(t)&&(r=t-Math.floor(t)),r}var Jh={formatters:JT};function iU(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(e,r)=>r.lineWidth,tickColor:(e,r)=>r.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Jh.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:e=>!e.startsWith("before")&&!e.startsWith("after")&&e!=="callback"&&e!=="parser",_indexable:e=>e!=="borderDash"&&e!=="tickBorderDash"&&e!=="dash"}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:e=>e!=="backdropPadding"&&e!=="callback",_indexable:e=>e!=="backdropPadding"})}const $u=Object.create(null),db=Object.create(null);function uh(t,e){if(!e)return t;const r=e.split(".");for(let n=0,i=r.length;nn.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(n,i)=>xy(i.backgroundColor),this.hoverBorderColor=(n,i)=>xy(i.borderColor),this.hoverColor=(n,i)=>xy(i.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(e),this.apply(r)}set(e,r){return wy(this,e,r)}get(e){return uh(this,e)}describe(e,r){return wy(db,e,r)}override(e,r){return wy($u,e,r)}route(e,r,n,i){const a=uh(this,e),s=uh(this,n),o="_"+r;Object.defineProperties(a,{[o]:{value:a[r],writable:!0},[r]:{enumerable:!0,get(){const u=this[o],l=s[i];return Gt(u)?Object.assign({},l,u):Rt(u,l)},set(u){this[o]=u}}})}apply(e){e.forEach(r=>r(this))}}var qr=new aU({_scriptable:t=>!t.startsWith("on"),_indexable:t=>t!=="events",hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[eU,tU,iU]);function sU(t){return!t||or(t.size)||or(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function Vm(t,e,r,n,i){let a=e[i];return a||(a=e[i]=t.measureText(i).width,r.push(i)),a>n&&(n=a),n}function oU(t,e,r,n){n=n||{};let i=n.data=n.data||{},a=n.garbageCollect=n.garbageCollect||[];n.font!==e&&(i=n.data={},a=n.garbageCollect=[],n.font=e),t.save(),t.font=e;let s=0;const o=r.length;let u,l,c,f,h;for(u=0;ur.length){for(u=0;u0&&t.stroke()}}function Rs(t,e,r){return r=r||.5,!e||t&&t.x>e.left-r&&t.xe.top-r&&t.y0&&a.strokeColor!=="";let u,l;for(t.save(),t.font=i.string,cU(t,a),u=0;u+t||0;function I1(t,e){const r={},n=Gt(e),i=n?Object.keys(e):e,a=Gt(t)?n?s=>Rt(t[s],t[e[s]]):s=>t[s]:()=>t;for(const s of i)r[s]=vU(a(s));return r}function eO(t){return I1(t,{top:"y",right:"x",bottom:"y",left:"x"})}function Pu(t){return I1(t,["topLeft","topRight","bottomLeft","bottomRight"])}function Yn(t){const e=eO(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function pn(t,e){t=t||{},e=e||qr.font;let r=Rt(t.size,e.size);typeof r=="string"&&(r=parseInt(r,10));let n=Rt(t.style,e.style);n&&!(""+n).match(pU)&&(console.warn('Invalid font style specified: "'+n+'"'),n=void 0);const i={family:Rt(t.family,e.family),lineHeight:mU(Rt(t.lineHeight,e.lineHeight),r),size:r,style:n,weight:Rt(t.weight,e.weight),string:""};return i.string=sU(i),i}function Kf(t,e,r,n){let i=!0,a,s,o;for(a=0,s=t.length;ar&&o===0?0:o+u;return{min:s(n,-Math.abs(a)),max:s(i,a)}}function Yo(t,e){return Object.assign(Object.create(t),e)}function B1(t,e=[""],r,n,i=()=>t[0]){const a=r||t;typeof n>"u"&&(n=iO("_fallback",t));const s={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:a,_fallback:n,_getTarget:i,override:o=>B1([o,...t],e,a,n)};return new Proxy(s,{deleteProperty(o,u){return delete o[u],delete o._keys,delete t[0][u],!0},get(o,u){return rO(o,u,()=>DU(u,e,t,o))},getOwnPropertyDescriptor(o,u){return Reflect.getOwnPropertyDescriptor(o._scopes[0],u)},getPrototypeOf(){return Reflect.getPrototypeOf(t[0])},has(o,u){return hA(o).includes(u)},ownKeys(o){return hA(o)},set(o,u,l){const c=o._storage||(o._storage=i());return o[u]=c[u]=l,delete o._keys,!0}})}function ac(t,e,r,n){const i={_cacheable:!1,_proxy:t,_context:e,_subProxy:r,_stack:new Set,_descriptors:tO(t,n),setContext:a=>ac(t,a,r,n),override:a=>ac(t.override(a),e,r,n)};return new Proxy(i,{deleteProperty(a,s){return delete a[s],delete t[s],!0},get(a,s,o){return rO(a,s,()=>bU(a,s,o))},getOwnPropertyDescriptor(a,s){return a._descriptors.allKeys?Reflect.has(t,s)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,s)},getPrototypeOf(){return Reflect.getPrototypeOf(t)},has(a,s){return Reflect.has(t,s)},ownKeys(){return Reflect.ownKeys(t)},set(a,s,o){return t[s]=o,delete a[s],!0}})}function tO(t,e={scriptable:!0,indexable:!0}){const{_scriptable:r=e.scriptable,_indexable:n=e.indexable,_allKeys:i=e.allKeys}=t;return{allKeys:i,scriptable:r,indexable:n,isScriptable:qo(r)?r:()=>r,isIndexable:qo(n)?n:()=>n}}const yU=(t,e)=>t?t+T1(e):e,k1=(t,e)=>Gt(e)&&t!=="adapters"&&(Object.getPrototypeOf(e)===null||e.constructor===Object);function rO(t,e,r){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const n=r();return t[e]=n,n}function bU(t,e,r){const{_proxy:n,_context:i,_subProxy:a,_descriptors:s}=t;let o=n[e];return qo(o)&&s.isScriptable(e)&&(o=xU(e,o,t,r)),Or(o)&&o.length&&(o=wU(e,o,t,s.isIndexable)),k1(e,o)&&(o=ac(o,i,a&&a[e],s)),o}function xU(t,e,r,n){const{_proxy:i,_context:a,_subProxy:s,_stack:o}=r;if(o.has(t))throw new Error("Recursion detected: "+Array.from(o).join("->")+"->"+t);o.add(t);let u=e(a,s||n);return o.delete(t),k1(t,u)&&(u=L1(i._scopes,i,t,u)),u}function wU(t,e,r,n){const{_proxy:i,_context:a,_subProxy:s,_descriptors:o}=r;if(typeof a.index<"u"&&n(t))return e[a.index%e.length];if(Gt(e[0])){const u=e,l=i._scopes.filter(c=>c!==u);e=[];for(const c of u){const f=L1(l,i,t,c);e.push(ac(f,a,s&&s[t],o))}}return e}function nO(t,e,r){return qo(t)?t(e,r):t}const SU=(t,e)=>t===!0?e:typeof t=="string"?zo(e,t):void 0;function _U(t,e,r,n,i){for(const a of e){const s=SU(r,a);if(s){t.add(s);const o=nO(s._fallback,r,i);if(typeof o<"u"&&o!==r&&o!==n)return o}else if(s===!1&&typeof n<"u"&&r!==n)return null}return!1}function L1(t,e,r,n){const i=e._rootScopes,a=nO(e._fallback,r,n),s=[...t,...i],o=new Set;o.add(n);let u=fA(o,s,r,a||r,n);return u===null||typeof a<"u"&&a!==r&&(u=fA(o,s,a,u,n),u===null)?!1:B1(Array.from(o),[""],i,a,()=>AU(e,r,n))}function fA(t,e,r,n,i){for(;r;)r=_U(t,e,r,n,i);return r}function AU(t,e,r){const n=t._getTarget();e in n||(n[e]={});const i=n[e];return Or(i)&&Gt(r)?r:i||{}}function DU(t,e,r,n){let i;for(const a of e)if(i=iO(yU(a,t),r),typeof i<"u")return k1(t,i)?L1(r,n,t,i):i}function iO(t,e){for(const r of e){if(!r)continue;const n=r[t];if(typeof n<"u")return n}}function hA(t){let e=t._keys;return e||(e=t._keys=NU(t._scopes)),e}function NU(t){const e=new Set;for(const r of t)for(const n of Object.keys(r).filter(i=>!i.startsWith("_")))e.add(n);return Array.from(e)}function aO(t,e,r,n){const{iScale:i}=t,{key:a="r"}=this._parsing,s=new Array(n);let o,u,l,c;for(o=0,u=n;oet==="x"?"y":"x";function CU(t,e,r,n){const i=t.skip?e:t,a=e,s=r.skip?e:r,o=hb(a,i),u=hb(s,a);let l=o/(o+u),c=u/(o+u);l=isNaN(l)?0:l,c=isNaN(c)?0:c;const f=n*l,h=n*c;return{previous:{x:a.x-f*(s.x-i.x),y:a.y-f*(s.y-i.y)},next:{x:a.x+h*(s.x-i.x),y:a.y+h*(s.y-i.y)}}}function MU(t,e,r){const n=t.length;let i,a,s,o,u,l=sc(t,0);for(let c=0;c!l.skip)),e.cubicInterpolationMode==="monotone")OU(t,i);else{let l=n?t[t.length-1]:t[0];for(a=0,s=t.length;at.ownerDocument.defaultView.getComputedStyle(t,null);function RU(t,e){return Qv(t).getPropertyValue(e)}const IU=["top","right","bottom","left"];function Ru(t,e,r){const n={};r=r?"-"+r:"";for(let i=0;i<4;i++){const a=IU[i];n[a]=parseFloat(t[e+"-"+a+r])||0}return n.width=n.left+n.right,n.height=n.top+n.bottom,n}const BU=(t,e,r)=>(t>0||e>0)&&(!r||!r.shadowRoot);function kU(t,e){const r=t.touches,n=r&&r.length?r[0]:t,{offsetX:i,offsetY:a}=n;let s=!1,o,u;if(BU(i,a,t.target))o=i,u=a;else{const l=e.getBoundingClientRect();o=n.clientX-l.left,u=n.clientY-l.top,s=!0}return{x:o,y:u,box:s}}function Du(t,e){if("native"in t)return t;const{canvas:r,currentDevicePixelRatio:n}=e,i=Qv(r),a=i.boxSizing==="border-box",s=Ru(i,"padding"),o=Ru(i,"border","width"),{x:u,y:l,box:c}=kU(t,r),f=s.left+(c&&o.left),h=s.top+(c&&o.top);let{width:p,height:g}=e;return a&&(p-=s.width+o.width,g-=s.height+o.height),{x:Math.round((u-f)/p*r.width/n),y:Math.round((l-h)/g*r.height/n)}}function LU(t,e,r){let n,i;if(e===void 0||r===void 0){const a=z1(t);if(!a)e=t.clientWidth,r=t.clientHeight;else{const s=a.getBoundingClientRect(),o=Qv(a),u=Ru(o,"border","width"),l=Ru(o,"padding");e=s.width-l.width-u.width,r=s.height-l.height-u.height,n=Ym(o.maxWidth,a,"clientWidth"),i=Ym(o.maxHeight,a,"clientHeight")}}return{width:e,height:r,maxWidth:n||Wm,maxHeight:i||Wm}}const $p=t=>Math.round(t*10)/10;function $U(t,e,r,n){const i=Qv(t),a=Ru(i,"margin"),s=Ym(i.maxWidth,t,"clientWidth")||Wm,o=Ym(i.maxHeight,t,"clientHeight")||Wm,u=LU(t,e,r);let{width:l,height:c}=u;if(i.boxSizing==="content-box"){const h=Ru(i,"border","width"),p=Ru(i,"padding");l-=p.width+h.width,c-=p.height+h.height}return l=Math.max(0,l-a.width),c=Math.max(0,n?l/n:c-a.height),l=$p(Math.min(l,s,u.maxWidth)),c=$p(Math.min(c,o,u.maxHeight)),l&&!c&&(c=$p(l/2)),(e!==void 0||r!==void 0)&&n&&u.height&&c>u.height&&(c=u.height,l=$p(Math.floor(c*n))),{width:l,height:c}}function dA(t,e,r){const n=e||1,i=Math.floor(t.height*n),a=Math.floor(t.width*n);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const s=t.canvas;return s.style&&(r||!s.style.height&&!s.style.width)&&(s.style.height=`${t.height}px`,s.style.width=`${t.width}px`),t.currentDevicePixelRatio!==n||s.height!==i||s.width!==a?(t.currentDevicePixelRatio=n,s.height=i,s.width=a,t.ctx.setTransform(n,0,0,n,0,0),!0):!1}const zU=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};$1()&&(window.addEventListener("test",null,e),window.removeEventListener("test",null,e))}catch{}return t}();function pA(t,e){const r=RU(t,e),n=r&&r.match(/^(\d+)(\.\d+)?px$/);return n?+n[1]:void 0}function Nu(t,e,r,n){return{x:t.x+r*(e.x-t.x),y:t.y+r*(e.y-t.y)}}function qU(t,e,r,n){return{x:t.x+r*(e.x-t.x),y:n==="middle"?r<.5?t.y:e.y:n==="after"?r<1?t.y:e.y:r>0?e.y:t.y}}function UU(t,e,r,n){const i={x:t.cp2x,y:t.cp2y},a={x:e.cp1x,y:e.cp1y},s=Nu(t,i,r),o=Nu(i,a,r),u=Nu(a,e,r),l=Nu(s,o,r),c=Nu(o,u,r);return Nu(l,c,r)}const HU=function(t,e){return{x(r){return t+t+e-r},setWidth(r){e=r},textAlign(r){return r==="center"?r:r==="right"?"left":"right"},xPlus(r,n){return r-n},leftForLtr(r,n){return r-n}}},WU=function(){return{x(t){return t},setWidth(t){},textAlign(t){return t},xPlus(t,e){return t+e},leftForLtr(t,e){return t}}};function Gl(t,e,r){return t?HU(e,r):WU()}function oO(t,e){let r,n;(e==="ltr"||e==="rtl")&&(r=t.canvas.style,n=[r.getPropertyValue("direction"),r.getPropertyPriority("direction")],r.setProperty("direction",e,"important"),t.prevTextDirection=n)}function uO(t,e){e!==void 0&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function lO(t){return t==="angle"?{between:Ah,compare:Vq,normalize:Oi}:{between:Fs,compare:(e,r)=>e-r,normalize:e=>e}}function mA({start:t,end:e,count:r,loop:n,style:i}){return{start:t%r,end:e%r,loop:n&&(e-t+1)%r===0,style:i}}function VU(t,e,r){const{property:n,start:i,end:a}=r,{between:s,normalize:o}=lO(n),u=e.length;let{start:l,end:c,loop:f}=t,h,p;if(f){for(l+=u,c+=u,h=0,p=u;hu(i,x,y)&&o(i,x)!==0,A=()=>o(a,y)===0||u(a,x,y),w=()=>m||_(),C=()=>!m||A();for(let E=c,N=c;E<=f;++E)S=e[E%s],!S.skip&&(y=l(S[n]),y!==x&&(m=u(y,i,a),b===null&&w()&&(b=o(y,i)===0?E:N),b!==null&&C()&&(g.push(mA({start:b,end:E,loop:h,count:s,style:p})),b=null),N=E,x=y));return b!==null&&g.push(mA({start:b,end:f,loop:h,count:s,style:p})),g}function fO(t,e){const r=[],n=t.segments;for(let i=0;ii&&t[a%e].skip;)a--;return a%=e,{start:i,end:a}}function jU(t,e,r,n){const i=t.length,a=[];let s=e,o=t[e],u;for(u=e+1;u<=r;++u){const l=t[u%i];l.skip||l.stop?o.skip||(n=!1,a.push({start:e%i,end:(u-1)%i,loop:n}),e=s=l.stop?u:null):(s=u,o.skip&&(e=u)),o=l}return s!==null&&a.push({start:e%i,end:s%i,loop:n}),a}function GU(t,e){const r=t.points,n=t.options.spanGaps,i=r.length;if(!i)return[];const a=!!t._loop,{start:s,end:o}=YU(r,i,a,n);if(n===!0)return vA(t,[{start:s,end:o,loop:a}],r,e);const u=o{let t=0;return()=>t++})();function or(t){return t===null||typeof t>"u"}function Or(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return e.slice(0,7)==="[object"&&e.slice(-6)==="Array]"}function Gt(t){return t!==null&&Object.prototype.toString.call(t)==="[object Object]"}function Vr(t){return(typeof t=="number"||t instanceof Number)&&isFinite(+t)}function Mi(t,e){return Vr(t)?t:e}function Pt(t,e){return typeof t>"u"?e:t}const Zq=(t,e)=>typeof t=="string"&&t.endsWith("%")?parseFloat(t)/100:+t/e,jT=(t,e)=>typeof t=="string"&&t.endsWith("%")?parseFloat(t)/100*e:+t;function Cr(t,e,r){if(t&&typeof t.call=="function")return t.apply(r,e)}function yr(t,e,r,n){let i,a,s;if(Or(t))if(a=t.length,n)for(i=a-1;i>=0;i--)e.call(r,t[i],i);else for(i=0;it,x:t=>t.x,y:t=>t.y};function Qq(t){const e=t.split("."),r=[];let n="";for(const i of e)n+=i,n.endsWith("\\")?n=n.slice(0,-1)+".":(r.push(n),n="");return r}function eU(t){const e=Qq(t);return r=>{for(const n of e){if(n==="")break;r=r&&r[n]}return r}}function zo(t,e){return(nA[e]||(nA[e]=eU(e)))(t)}function O1(t){return t.charAt(0).toUpperCase()+t.slice(1)}const _h=t=>typeof t<"u",qo=t=>typeof t=="function",iA=(t,e)=>{if(t.size!==e.size)return!1;for(const r of t)if(!e.has(r))return!1;return!0};function tU(t){return t.type==="mouseup"||t.type==="click"||t.type==="contextmenu"}const Rr=Math.PI,Fr=2*Rr,rU=Fr+Rr,Wm=Number.POSITIVE_INFINITY,nU=Rr/180,en=Rr/2,bu=Rr/4,aA=Rr*2/3,To=Math.log10,Xa=Math.sign;function sh(t,e,r){return Math.abs(t-e)i-a).pop(),e}function sc(t){return!isNaN(parseFloat(t))&&isFinite(t)}function aU(t,e){const r=Math.round(t);return r-e<=t&&r+e>=t}function XT(t,e,r){let n,i,a;for(n=0,i=t.length;nu&&l=Math.min(e,r)-n&&t<=Math.max(e,r)+n}function R1(t,e,r){r=r||(s=>t[s]1;)a=i+n>>1,r(a)?i=a:n=a;return{lo:i,hi:n}}const Rs=(t,e,r,n)=>R1(t,r,n?i=>{const a=t[i][e];return at[i][e]R1(t,r,n=>t[n][e]>=r);function lU(t,e,r){let n=0,i=t.length;for(;nn&&t[i-1]>r;)i--;return n>0||i{const n="_onData"+O1(r),i=t[r];Object.defineProperty(t,r,{configurable:!0,enumerable:!1,value(...a){const s=i.apply(this,a);return t._chartjs.listeners.forEach(o=>{typeof o[n]=="function"&&o[n](...a)}),s}})})}function uA(t,e){const r=t._chartjs;if(!r)return;const n=r.listeners,i=n.indexOf(e);i!==-1&&n.splice(i,1),!(n.length>0)&&(KT.forEach(a=>{delete t[a]}),delete t._chartjs)}function JT(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}const QT=function(){return typeof window>"u"?function(t){return t()}:window.requestAnimationFrame}();function eO(t,e){let r=[],n=!1;return function(...i){r=i,n||(n=!0,QT.call(window,()=>{n=!1,t.apply(e,r)}))}}function fU(t,e){let r;return function(...n){return e?(clearTimeout(r),r=setTimeout(t,e,n)):t.apply(this,n),e}}const P1=t=>t==="start"?"left":t==="end"?"right":"center",$n=(t,e,r)=>t==="start"?e:t==="end"?r:(e+r)/2,hU=(t,e,r,n)=>t===(n?"left":"right")?r:t==="center"?(e+r)/2:e;function tO(t,e,r){const n=e.length;let i=0,a=n;if(t._sorted){const{iScale:s,_parsed:o}=t,u=s.axis,{min:l,max:c,minDefined:f,maxDefined:h}=s.getUserBounds();f&&(i=wn(Math.min(Rs(o,u,l).lo,r?n:Rs(e,u,s.getPixelForValue(l)).lo),0,n-1)),h?a=wn(Math.max(Rs(o,s.axis,c,!0).hi+1,r?0:Rs(e,u,s.getPixelForValue(c),!0).hi+1),i,n)-i:a=n-i}return{start:i,count:a}}function rO(t){const{xScale:e,yScale:r,_scaleRanges:n}=t,i={xmin:e.min,xmax:e.max,ymin:r.min,ymax:r.max};if(!n)return t._scaleRanges=i,!0;const a=n.xmin!==e.min||n.xmax!==e.max||n.ymin!==r.min||n.ymax!==r.max;return Object.assign(n,i),a}const Ip=t=>t===0||t===1,lA=(t,e,r)=>-(Math.pow(2,10*(t-=1))*Math.sin((t-e)*Fr/r)),cA=(t,e,r)=>Math.pow(2,-10*t)*Math.sin((t-e)*Fr/r)+1,oh={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>-Math.cos(t*en)+1,easeOutSine:t=>Math.sin(t*en),easeInOutSine:t=>-.5*(Math.cos(Rr*t)-1),easeInExpo:t=>t===0?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>t===1?1:-Math.pow(2,-10*t)+1,easeInOutExpo:t=>Ip(t)?t:t<.5?.5*Math.pow(2,10*(t*2-1)):.5*(-Math.pow(2,-10*(t*2-1))+2),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>Ip(t)?t:lA(t,.075,.3),easeOutElastic:t=>Ip(t)?t:cA(t,.075,.3),easeInOutElastic(t){return Ip(t)?t:t<.5?.5*lA(t*2,.1125,.45):.5+.5*cA(t*2-1,.1125,.45)},easeInBack(t){return t*t*((1.70158+1)*t-1.70158)},easeOutBack(t){return(t-=1)*t*((1.70158+1)*t+1.70158)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?.5*(t*t*(((e*=1.525)+1)*t-e)):.5*((t-=2)*t*(((e*=1.525)+1)*t+e)+2)},easeInBounce:t=>1-oh.easeOutBounce(1-t),easeOutBounce(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:t=>t<.5?oh.easeInBounce(t*2)*.5:oh.easeOutBounce(t*2-1)*.5+.5};function k1(t){if(t&&typeof t=="object"){const e=t.toString();return e==="[object CanvasPattern]"||e==="[object CanvasGradient]"}return!1}function fA(t){return k1(t)?t:new wh(t)}function Sy(t){return k1(t)?t:new wh(t).saturate(.5).darken(.1).hexString()}const dU=["x","y","borderWidth","radius","tension"],pU=["color","borderColor","backgroundColor"];function mU(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:e=>e!=="onProgress"&&e!=="onComplete"&&e!=="fn"}),t.set("animations",{colors:{type:"color",properties:pU},numbers:{type:"number",properties:dU}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:e=>e|0}}}})}function vU(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}const hA=new Map;function gU(t,e){e=e||{};const r=t+JSON.stringify(e);let n=hA.get(r);return n||(n=new Intl.NumberFormat(t,e),hA.set(r,n)),n}function Kh(t,e,r){return gU(e,r).format(t)}const nO={values(t){return Or(t)?t:""+t},numeric(t,e,r){if(t===0)return"0";const n=this.chart.options.locale;let i,a=t;if(r.length>1){const l=Math.max(Math.abs(r[0].value),Math.abs(r[r.length-1].value));(l<1e-4||l>1e15)&&(i="scientific"),a=yU(t,r)}const s=To(Math.abs(a)),o=isNaN(s)?1:Math.max(Math.min(-1*Math.floor(s),20),0),u={notation:i,minimumFractionDigits:o,maximumFractionDigits:o};return Object.assign(u,this.options.ticks.format),Kh(t,n,u)},logarithmic(t,e,r){if(t===0)return"0";const n=r[e].significand||t/Math.pow(10,Math.floor(To(t)));return[1,2,3,5,10,15].includes(n)||e>.8*r.length?nO.numeric.call(this,t,e,r):""}};function yU(t,e){let r=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;return Math.abs(r)>=1&&t!==Math.floor(t)&&(r=t-Math.floor(t)),r}var Jh={formatters:nO};function bU(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(e,r)=>r.lineWidth,tickColor:(e,r)=>r.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Jh.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:e=>!e.startsWith("before")&&!e.startsWith("after")&&e!=="callback"&&e!=="parser",_indexable:e=>e!=="borderDash"&&e!=="tickBorderDash"&&e!=="dash"}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:e=>e!=="backdropPadding"&&e!=="callback",_indexable:e=>e!=="backdropPadding"})}const $u=Object.create(null),mb=Object.create(null);function uh(t,e){if(!e)return t;const r=e.split(".");for(let n=0,i=r.length;nn.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(n,i)=>Sy(i.backgroundColor),this.hoverBorderColor=(n,i)=>Sy(i.borderColor),this.hoverColor=(n,i)=>Sy(i.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(e),this.apply(r)}set(e,r){return _y(this,e,r)}get(e){return uh(this,e)}describe(e,r){return _y(mb,e,r)}override(e,r){return _y($u,e,r)}route(e,r,n,i){const a=uh(this,e),s=uh(this,n),o="_"+r;Object.defineProperties(a,{[o]:{value:a[r],writable:!0},[r]:{enumerable:!0,get(){const u=this[o],l=s[i];return Gt(u)?Object.assign({},l,u):Pt(u,l)},set(u){this[o]=u}}})}apply(e){e.forEach(r=>r(this))}}var qr=new xU({_scriptable:t=>!t.startsWith("on"),_indexable:t=>t!=="events",hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[mU,vU,bU]);function wU(t){return!t||or(t.size)||or(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function Vm(t,e,r,n,i){let a=e[i];return a||(a=e[i]=t.measureText(i).width,r.push(i)),a>n&&(n=a),n}function SU(t,e,r,n){n=n||{};let i=n.data=n.data||{},a=n.garbageCollect=n.garbageCollect||[];n.font!==e&&(i=n.data={},a=n.garbageCollect=[],n.font=e),t.save(),t.font=e;let s=0;const o=r.length;let u,l,c,f,h;for(u=0;ur.length){for(u=0;u0&&t.stroke()}}function Ps(t,e,r){return r=r||.5,!e||t&&t.x>e.left-r&&t.xe.top-r&&t.y0&&a.strokeColor!=="";let u,l;for(t.save(),t.font=i.string,DU(t,a),u=0;u+t||0;function B1(t,e){const r={},n=Gt(e),i=n?Object.keys(e):e,a=Gt(t)?n?s=>Pt(t[s],t[e[s]]):s=>t[s]:()=>t;for(const s of i)r[s]=OU(a(s));return r}function aO(t){return B1(t,{top:"y",right:"x",bottom:"y",left:"x"})}function Ru(t){return B1(t,["topLeft","topRight","bottomLeft","bottomRight"])}function Yn(t){const e=aO(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function pn(t,e){t=t||{},e=e||qr.font;let r=Pt(t.size,e.size);typeof r=="string"&&(r=parseInt(r,10));let n=Pt(t.style,e.style);n&&!(""+n).match(MU)&&(console.warn('Invalid font style specified: "'+n+'"'),n=void 0);const i={family:Pt(t.family,e.family),lineHeight:TU(Pt(t.lineHeight,e.lineHeight),r),size:r,style:n,weight:Pt(t.weight,e.weight),string:""};return i.string=wU(i),i}function Qf(t,e,r,n){let i=!0,a,s,o;for(a=0,s=t.length;ar&&o===0?0:o+u;return{min:s(n,-Math.abs(a)),max:s(i,a)}}function Yo(t,e){return Object.assign(Object.create(t),e)}function I1(t,e=[""],r,n,i=()=>t[0]){const a=r||t;typeof n>"u"&&(n=lO("_fallback",t));const s={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:a,_fallback:n,_getTarget:i,override:o=>I1([o,...t],e,a,n)};return new Proxy(s,{deleteProperty(o,u){return delete o[u],delete o._keys,delete t[0][u],!0},get(o,u){return oO(o,u,()=>zU(u,e,t,o))},getOwnPropertyDescriptor(o,u){return Reflect.getOwnPropertyDescriptor(o._scopes[0],u)},getPrototypeOf(){return Reflect.getPrototypeOf(t[0])},has(o,u){return mA(o).includes(u)},ownKeys(o){return mA(o)},set(o,u,l){const c=o._storage||(o._storage=i());return o[u]=c[u]=l,delete o._keys,!0}})}function oc(t,e,r,n){const i={_cacheable:!1,_proxy:t,_context:e,_subProxy:r,_stack:new Set,_descriptors:sO(t,n),setContext:a=>oc(t,a,r,n),override:a=>oc(t.override(a),e,r,n)};return new Proxy(i,{deleteProperty(a,s){return delete a[s],delete t[s],!0},get(a,s,o){return oO(a,s,()=>PU(a,s,o))},getOwnPropertyDescriptor(a,s){return a._descriptors.allKeys?Reflect.has(t,s)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,s)},getPrototypeOf(){return Reflect.getPrototypeOf(t)},has(a,s){return Reflect.has(t,s)},ownKeys(){return Reflect.ownKeys(t)},set(a,s,o){return t[s]=o,delete a[s],!0}})}function sO(t,e={scriptable:!0,indexable:!0}){const{_scriptable:r=e.scriptable,_indexable:n=e.indexable,_allKeys:i=e.allKeys}=t;return{allKeys:i,scriptable:r,indexable:n,isScriptable:qo(r)?r:()=>r,isIndexable:qo(n)?n:()=>n}}const RU=(t,e)=>t?t+O1(e):e,L1=(t,e)=>Gt(e)&&t!=="adapters"&&(Object.getPrototypeOf(e)===null||e.constructor===Object);function oO(t,e,r){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const n=r();return t[e]=n,n}function PU(t,e,r){const{_proxy:n,_context:i,_subProxy:a,_descriptors:s}=t;let o=n[e];return qo(o)&&s.isScriptable(e)&&(o=kU(e,o,t,r)),Or(o)&&o.length&&(o=BU(e,o,t,s.isIndexable)),L1(e,o)&&(o=oc(o,i,a&&a[e],s)),o}function kU(t,e,r,n){const{_proxy:i,_context:a,_subProxy:s,_stack:o}=r;if(o.has(t))throw new Error("Recursion detected: "+Array.from(o).join("->")+"->"+t);o.add(t);let u=e(a,s||n);return o.delete(t),L1(t,u)&&(u=$1(i._scopes,i,t,u)),u}function BU(t,e,r,n){const{_proxy:i,_context:a,_subProxy:s,_descriptors:o}=r;if(typeof a.index<"u"&&n(t))return e[a.index%e.length];if(Gt(e[0])){const u=e,l=i._scopes.filter(c=>c!==u);e=[];for(const c of u){const f=$1(l,i,t,c);e.push(oc(f,a,s&&s[t],o))}}return e}function uO(t,e,r){return qo(t)?t(e,r):t}const IU=(t,e)=>t===!0?e:typeof t=="string"?zo(e,t):void 0;function LU(t,e,r,n,i){for(const a of e){const s=IU(r,a);if(s){t.add(s);const o=uO(s._fallback,r,i);if(typeof o<"u"&&o!==r&&o!==n)return o}else if(s===!1&&typeof n<"u"&&r!==n)return null}return!1}function $1(t,e,r,n){const i=e._rootScopes,a=uO(e._fallback,r,n),s=[...t,...i],o=new Set;o.add(n);let u=pA(o,s,r,a||r,n);return u===null||typeof a<"u"&&a!==r&&(u=pA(o,s,a,u,n),u===null)?!1:I1(Array.from(o),[""],i,a,()=>$U(e,r,n))}function pA(t,e,r,n,i){for(;r;)r=LU(t,e,r,n,i);return r}function $U(t,e,r){const n=t._getTarget();e in n||(n[e]={});const i=n[e];return Or(i)&&Gt(r)?r:i||{}}function zU(t,e,r,n){let i;for(const a of e)if(i=lO(RU(a,t),r),typeof i<"u")return L1(t,i)?$1(r,n,t,i):i}function lO(t,e){for(const r of e){if(!r)continue;const n=r[t];if(typeof n<"u")return n}}function mA(t){let e=t._keys;return e||(e=t._keys=qU(t._scopes)),e}function qU(t){const e=new Set;for(const r of t)for(const n of Object.keys(r).filter(i=>!i.startsWith("_")))e.add(n);return Array.from(e)}function cO(t,e,r,n){const{iScale:i}=t,{key:a="r"}=this._parsing,s=new Array(n);let o,u,l,c;for(o=0,u=n;oet==="x"?"y":"x";function HU(t,e,r,n){const i=t.skip?e:t,a=e,s=r.skip?e:r,o=pb(a,i),u=pb(s,a);let l=o/(o+u),c=u/(o+u);l=isNaN(l)?0:l,c=isNaN(c)?0:c;const f=n*l,h=n*c;return{previous:{x:a.x-f*(s.x-i.x),y:a.y-f*(s.y-i.y)},next:{x:a.x+h*(s.x-i.x),y:a.y+h*(s.y-i.y)}}}function WU(t,e,r){const n=t.length;let i,a,s,o,u,l=uc(t,0);for(let c=0;c!l.skip)),e.cubicInterpolationMode==="monotone")YU(t,i);else{let l=n?t[t.length-1]:t[0];for(a=0,s=t.length;at.ownerDocument.defaultView.getComputedStyle(t,null);function XU(t,e){return tg(t).getPropertyValue(e)}const ZU=["top","right","bottom","left"];function Pu(t,e,r){const n={};r=r?"-"+r:"";for(let i=0;i<4;i++){const a=ZU[i];n[a]=parseFloat(t[e+"-"+a+r])||0}return n.width=n.left+n.right,n.height=n.top+n.bottom,n}const KU=(t,e,r)=>(t>0||e>0)&&(!r||!r.shadowRoot);function JU(t,e){const r=t.touches,n=r&&r.length?r[0]:t,{offsetX:i,offsetY:a}=n;let s=!1,o,u;if(KU(i,a,t.target))o=i,u=a;else{const l=e.getBoundingClientRect();o=n.clientX-l.left,u=n.clientY-l.top,s=!0}return{x:o,y:u,box:s}}function Du(t,e){if("native"in t)return t;const{canvas:r,currentDevicePixelRatio:n}=e,i=tg(r),a=i.boxSizing==="border-box",s=Pu(i,"padding"),o=Pu(i,"border","width"),{x:u,y:l,box:c}=JU(t,r),f=s.left+(c&&o.left),h=s.top+(c&&o.top);let{width:p,height:g}=e;return a&&(p-=s.width+o.width,g-=s.height+o.height),{x:Math.round((u-f)/p*r.width/n),y:Math.round((l-h)/g*r.height/n)}}function QU(t,e,r){let n,i;if(e===void 0||r===void 0){const a=q1(t);if(!a)e=t.clientWidth,r=t.clientHeight;else{const s=a.getBoundingClientRect(),o=tg(a),u=Pu(o,"border","width"),l=Pu(o,"padding");e=s.width-l.width-u.width,r=s.height-l.height-u.height,n=Ym(o.maxWidth,a,"clientWidth"),i=Ym(o.maxHeight,a,"clientHeight")}}return{width:e,height:r,maxWidth:n||Wm,maxHeight:i||Wm}}const $p=t=>Math.round(t*10)/10;function eH(t,e,r,n){const i=tg(t),a=Pu(i,"margin"),s=Ym(i.maxWidth,t,"clientWidth")||Wm,o=Ym(i.maxHeight,t,"clientHeight")||Wm,u=QU(t,e,r);let{width:l,height:c}=u;if(i.boxSizing==="content-box"){const h=Pu(i,"border","width"),p=Pu(i,"padding");l-=p.width+h.width,c-=p.height+h.height}return l=Math.max(0,l-a.width),c=Math.max(0,n?l/n:c-a.height),l=$p(Math.min(l,s,u.maxWidth)),c=$p(Math.min(c,o,u.maxHeight)),l&&!c&&(c=$p(l/2)),(e!==void 0||r!==void 0)&&n&&u.height&&c>u.height&&(c=u.height,l=$p(Math.floor(c*n))),{width:l,height:c}}function vA(t,e,r){const n=e||1,i=Math.floor(t.height*n),a=Math.floor(t.width*n);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const s=t.canvas;return s.style&&(r||!s.style.height&&!s.style.width)&&(s.style.height=`${t.height}px`,s.style.width=`${t.width}px`),t.currentDevicePixelRatio!==n||s.height!==i||s.width!==a?(t.currentDevicePixelRatio=n,s.height=i,s.width=a,t.ctx.setTransform(n,0,0,n,0,0),!0):!1}const tH=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};z1()&&(window.addEventListener("test",null,e),window.removeEventListener("test",null,e))}catch{}return t}();function gA(t,e){const r=XU(t,e),n=r&&r.match(/^(\d+)(\.\d+)?px$/);return n?+n[1]:void 0}function Eu(t,e,r,n){return{x:t.x+r*(e.x-t.x),y:t.y+r*(e.y-t.y)}}function rH(t,e,r,n){return{x:t.x+r*(e.x-t.x),y:n==="middle"?r<.5?t.y:e.y:n==="after"?r<1?t.y:e.y:r>0?e.y:t.y}}function nH(t,e,r,n){const i={x:t.cp2x,y:t.cp2y},a={x:e.cp1x,y:e.cp1y},s=Eu(t,i,r),o=Eu(i,a,r),u=Eu(a,e,r),l=Eu(s,o,r),c=Eu(o,u,r);return Eu(l,c,r)}const iH=function(t,e){return{x(r){return t+t+e-r},setWidth(r){e=r},textAlign(r){return r==="center"?r:r==="right"?"left":"right"},xPlus(r,n){return r-n},leftForLtr(r,n){return r-n}}},aH=function(){return{x(t){return t},setWidth(t){},textAlign(t){return t},xPlus(t,e){return t+e},leftForLtr(t,e){return t}}};function Zl(t,e,r){return t?iH(e,r):aH()}function hO(t,e){let r,n;(e==="ltr"||e==="rtl")&&(r=t.canvas.style,n=[r.getPropertyValue("direction"),r.getPropertyPriority("direction")],r.setProperty("direction",e,"important"),t.prevTextDirection=n)}function dO(t,e){e!==void 0&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function pO(t){return t==="angle"?{between:Ah,compare:sU,normalize:Oi}:{between:Fs,compare:(e,r)=>e-r,normalize:e=>e}}function yA({start:t,end:e,count:r,loop:n,style:i}){return{start:t%r,end:e%r,loop:n&&(e-t+1)%r===0,style:i}}function sH(t,e,r){const{property:n,start:i,end:a}=r,{between:s,normalize:o}=pO(n),u=e.length;let{start:l,end:c,loop:f}=t,h,p;if(f){for(l+=u,c+=u,h=0,p=u;hu(i,x,y)&&o(i,x)!==0,A=()=>o(a,y)===0||u(a,x,y),w=()=>m||_(),C=()=>!m||A();for(let N=c,E=c;N<=f;++N)S=e[N%s],!S.skip&&(y=l(S[n]),y!==x&&(m=u(y,i,a),b===null&&w()&&(b=o(y,i)===0?N:E),b!==null&&C()&&(g.push(yA({start:b,end:N,loop:h,count:s,style:p})),b=null),E=N,x=y));return b!==null&&g.push(yA({start:b,end:f,loop:h,count:s,style:p})),g}function vO(t,e){const r=[],n=t.segments;for(let i=0;ii&&t[a%e].skip;)a--;return a%=e,{start:i,end:a}}function uH(t,e,r,n){const i=t.length,a=[];let s=e,o=t[e],u;for(u=e+1;u<=r;++u){const l=t[u%i];l.skip||l.stop?o.skip||(n=!1,a.push({start:e%i,end:(u-1)%i,loop:n}),e=s=l.stop?u:null):(s=u,o.skip&&(e=u)),o=l}return s!==null&&a.push({start:e%i,end:s%i,loop:n}),a}function lH(t,e){const r=t.points,n=t.options.spanGaps,i=r.length;if(!i)return[];const a=!!t._loop,{start:s,end:o}=oH(r,i,a,n);if(n===!0)return bA(t,[{start:s,end:o,loop:a}],r,e);const u=oo({chart:e,initial:r.initial,numSteps:s,currentStep:Math.min(n-r.start,s)}))}_refresh(){this._request||(this._running=!0,this._request=GT.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(e=Date.now()){let r=0;this._charts.forEach((n,i)=>{if(!n.running||!n.items.length)return;const a=n.items;let s=a.length-1,o=!1,u;for(;s>=0;--s)u=a[s],u._active?(u._total>n.duration&&(n.duration=u._total),u.tick(e),o=!0):(a[s]=a[a.length-1],a.pop());o&&(i.draw(),this._notify(i,n,e,"progress")),a.length||(n.running=!1,this._notify(i,n,e,"complete"),n.initial=!1),r+=a.length}),this._lastDate=e,r===0&&(this._running=!1)}_getAnims(e){const r=this._charts;let n=r.get(e);return n||(n={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},r.set(e,n)),n}listen(e,r,n){this._getAnims(e).listeners[r].push(n)}add(e,r){!r||!r.length||this._getAnims(e).items.push(...r)}has(e){return this._getAnims(e).items.length>0}start(e){const r=this._charts.get(e);r&&(r.running=!0,r.start=Date.now(),r.duration=r.items.reduce((n,i)=>Math.max(n,i._duration),0),this._refresh())}running(e){if(!this._running)return!1;const r=this._charts.get(e);return!(!r||!r.running||!r.items.length)}stop(e){const r=this._charts.get(e);if(!r||!r.items.length)return;const n=r.items;let i=n.length-1;for(;i>=0;--i)n[i].cancel();r.items=[],this._notify(e,r,Date.now(),"complete")}remove(e){return this._charts.delete(e)}}var Ya=new KU;const yA="transparent",JU={boolean(t,e,r){return r>.5?e:t},color(t,e,r){const n=uA(t||yA),i=n.valid&&uA(e||yA);return i&&i.valid?i.mix(n,r).hexString():e},number(t,e,r){return t+(e-t)*r}};class hO{constructor(e,r,n,i){const a=r[n];i=Kf([e.to,i,a,e.from]);const s=Kf([e.from,a,i]);this._active=!0,this._fn=e.fn||JU[e.type||typeof s],this._easing=oh[e.easing]||oh.linear,this._start=Math.floor(Date.now()+(e.delay||0)),this._duration=this._total=Math.floor(e.duration),this._loop=!!e.loop,this._target=r,this._prop=n,this._from=s,this._to=i,this._promises=void 0}active(){return this._active}update(e,r,n){if(this._active){this._notify(!1);const i=this._target[this._prop],a=n-this._start,s=this._duration-a;this._start=n,this._duration=Math.floor(Math.max(s,e.duration)),this._total+=a,this._loop=!!e.loop,this._to=Kf([e.to,r,i,e.from]),this._from=Kf([e.from,i,r])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(e){const r=e-this._start,n=this._duration,i=this._prop,a=this._from,s=this._loop,o=this._to;let u;if(this._active=a!==o&&(s||r1?2-u:u,u=this._easing(Math.min(1,Math.max(0,u))),this._target[i]=this._fn(a,o,u)}wait(){const e=this._promises||(this._promises=[]);return new Promise((r,n)=>{e.push({res:r,rej:n})})}_notify(e){const r=e?"res":"rej",n=this._promises||[];for(let i=0;i{const a=e[i];if(!Gt(a))return;const s={};for(const o of r)s[o]=a[o];(Or(a.properties)&&a.properties||[i]).forEach(o=>{(o===i||!n.has(o))&&n.set(o,s)})})}_animateOptions(e,r){const n=r.options,i=eH(e,n);if(!i)return[];const a=this._createAnimations(i,n);return n.$shared&&QU(e.options.$animations,n).then(()=>{e.options=n},()=>{}),a}_createAnimations(e,r){const n=this._properties,i=[],a=e.$animations||(e.$animations={}),s=Object.keys(r),o=Date.now();let u;for(u=s.length-1;u>=0;--u){const l=s[u];if(l.charAt(0)==="$")continue;if(l==="options"){i.push(...this._animateOptions(e,r));continue}const c=r[l];let f=a[l];const h=n.get(l);if(f)if(h&&f.active()){f.update(h,c,o);continue}else f.cancel();if(!h||!h.duration){e[l]=c;continue}a[l]=f=new hO(h,e,l,c),i.push(f)}return i}update(e,r){if(this._properties.size===0){Object.assign(e,r);return}const n=this._createAnimations(e,r);if(n.length)return Ya.add(this._chart,n),!0}}function QU(t,e){const r=[],n=Object.keys(e);for(let i=0;i0||!r&&a<0)return i.index}return null}function _A(t,e){const{chart:r,_cachedMeta:n}=t,i=r._stacks||(r._stacks={}),{iScale:a,vScale:s,index:o}=n,u=a.axis,l=s.axis,c=iH(a,s,n),f=e.length;let h;for(let p=0;pr[n].axis===e).shift()}function oH(t,e){return Yo(t,{active:!1,dataset:void 0,datasetIndex:e,index:e,mode:"default",type:"dataset"})}function uH(t,e,r){return Yo(t,{active:!1,dataIndex:e,parsed:void 0,raw:void 0,element:r,index:e,mode:"default",type:"data"})}function zf(t,e){const r=t.controller.index,n=t.vScale&&t.vScale.axis;if(n){e=e||t._parsed;for(const i of e){const a=i._stacks;if(!a||a[n]===void 0||a[n][r]===void 0)return;delete a[n][r],a[n]._visualValues!==void 0&&a[n]._visualValues[r]!==void 0&&delete a[n]._visualValues[r]}}}const _y=t=>t==="reset"||t==="none",AA=(t,e)=>e?t:Object.assign({},t),lH=(t,e,r)=>t&&!e.hidden&&e._stacked&&{keys:dO(r,!0),values:null};class ia{constructor(e,r){this.chart=e,this._ctx=e.ctx,this.index=r,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const e=this._cachedMeta;this.configure(),this.linkScales(),e._stacked=wA(e.vScale,e),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(e){this.index!==e&&zf(this._cachedMeta),this.index=e}linkScales(){const e=this.chart,r=this._cachedMeta,n=this.getDataset(),i=(f,h,p,g)=>f==="x"?h:f==="r"?g:p,a=r.xAxisID=Rt(n.xAxisID,Sy(e,"x")),s=r.yAxisID=Rt(n.yAxisID,Sy(e,"y")),o=r.rAxisID=Rt(n.rAxisID,Sy(e,"r")),u=r.indexAxis,l=r.iAxisID=i(u,a,s,o),c=r.vAxisID=i(u,s,a,o);r.xScale=this.getScaleForId(a),r.yScale=this.getScaleForId(s),r.rScale=this.getScaleForId(o),r.iScale=this.getScaleForId(l),r.vScale=this.getScaleForId(c)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(e){return this.chart.scales[e]}_getOtherScale(e){const r=this._cachedMeta;return e===r.iScale?r.vScale:r.iScale}reset(){this._update("reset")}_destroy(){const e=this._cachedMeta;this._data&&aA(this._data,this),e._stacked&&zf(e)}_dataCheck(){const e=this.getDataset(),r=e.data||(e.data=[]),n=this._data;if(Gt(r))this._data=nH(r);else if(n!==r){if(n){aA(n,this);const i=this._cachedMeta;zf(i),i._parsed=[]}r&&Object.isExtensible(r)&&Xq(r,this),this._syncList=[],this._data=r}}addElements(){const e=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(e.dataset=new this.datasetElementType)}buildOrUpdateElements(e){const r=this._cachedMeta,n=this.getDataset();let i=!1;this._dataCheck();const a=r._stacked;r._stacked=wA(r.vScale,r),r.stack!==n.stack&&(i=!0,zf(r),r.stack=n.stack),this._resyncElements(e),(i||a!==r._stacked)&&_A(this,r._parsed)}configure(){const e=this.chart.config,r=e.datasetScopeKeys(this._type),n=e.getOptionScopes(this.getDataset(),r,!0);this.options=e.createResolver(n,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(e,r){const{_cachedMeta:n,_data:i}=this,{iScale:a,_stacked:s}=n,o=a.axis;let u=e===0&&r===i.length?!0:n._sorted,l=e>0&&n._parsed[e-1],c,f,h;if(this._parsing===!1)n._parsed=i,n._sorted=!0,h=i;else{Or(i[e])?h=this.parseArrayData(n,i,e,r):Gt(i[e])?h=this.parseObjectData(n,i,e,r):h=this.parsePrimitiveData(n,i,e,r);const p=()=>f[o]===null||l&&f[o]m||f=0;--h)if(!g()){this.updateRangeFromParsed(l,e,p,u);break}}return l}getAllParsedValues(e){const r=this._cachedMeta._parsed,n=[];let i,a,s;for(i=0,a=r.length;i=0&&ethis.getContext(n,i,r),m=l.resolveNamedOptions(h,p,g,f);return m.$shared&&(m.$shared=u,a[s]=Object.freeze(AA(m,u))),m}_resolveAnimations(e,r,n){const i=this.chart,a=this._cachedDataOpts,s=`animation-${r}`,o=a[s];if(o)return o;let u;if(i.options.animation!==!1){const c=this.chart.config,f=c.datasetAnimationScopeKeys(this._type,r),h=c.getOptionScopes(this.getDataset(),f);u=c.createResolver(h,this.getContext(e,n,r))}const l=new q1(i,u&&u.animations);return u&&u._cacheable&&(a[s]=Object.freeze(l)),l}getSharedOptions(e){if(e.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},e))}includeOptions(e,r){return!r||_y(e)||this.chart._animationsDisabled}_getSharedOptions(e,r){const n=this.resolveDataElementOptions(e,r),i=this._sharedOptions,a=this.getSharedOptions(n),s=this.includeOptions(r,a)||a!==i;return this.updateSharedOptions(a,r,n),{sharedOptions:a,includeOptions:s}}updateElement(e,r,n,i){_y(i)?Object.assign(e,n):this._resolveAnimations(r,i).update(e,n)}updateSharedOptions(e,r,n){e&&!_y(r)&&this._resolveAnimations(void 0,r).update(e,n)}_setStyle(e,r,n,i){e.active=i;const a=this.getStyle(r,i);this._resolveAnimations(r,n,i).update(e,{options:!i&&this.getSharedOptions(a)||a})}removeHoverStyle(e,r,n){this._setStyle(e,n,"active",!1)}setHoverStyle(e,r,n){this._setStyle(e,n,"active",!0)}_removeDatasetHoverStyle(){const e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,"active",!1)}_setDatasetHoverStyle(){const e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,"active",!0)}_resyncElements(e){const r=this._data,n=this._cachedMeta.data;for(const[o,u,l]of this._syncList)this[o](u,l);this._syncList=[];const i=n.length,a=r.length,s=Math.min(a,i);s&&this.parse(0,s),a>i?this._insertElements(i,a-i,e):a{for(l.length+=r,o=l.length-1;o>=s;o--)l[o]=l[o-r]};for(u(a),o=e;oi-a))}return t._cache.$bar}function fH(t){const e=t.iScale,r=cH(e,t.type);let n=e._length,i,a,s,o;const u=()=>{s===32767||s===-32768||(_h(o)&&(n=Math.min(n,Math.abs(s-o)||n)),o=s)};for(i=0,a=r.length;i0?i[t-1]:null,o=tMath.abs(o)&&(u=o,l=s),e[r.axis]=l,e._custom={barStart:u,barEnd:l,start:i,end:a,min:s,max:o}}function pO(t,e,r,n){return Or(t)?pH(t,e,r,n):e[r.axis]=r.parse(t,n),e}function DA(t,e,r,n){const i=t.iScale,a=t.vScale,s=i.getLabels(),o=i===a,u=[];let l,c,f,h;for(l=r,c=r+n;l=r?1:-1)}function vH(t){let e,r,n,i,a;return t.horizontal?(e=t.base>t.x,r="left",n="right"):(e=t.baseu.controller.options.grouped),a=n.options.stacked,s=[],o=u=>{const l=u.controller.getParsed(r),c=l&&l[u.vScale.axis];if(or(c)||isNaN(c))return!0};for(const u of i)if(!(r!==void 0&&o(u))&&((a===!1||s.indexOf(u.stack)===-1||a===void 0&&u.stack===void 0)&&s.push(u.stack),u.index===e))break;return s.length||s.push(void 0),s}_getStackCount(e){return this._getStacks(void 0,e).length}_getStackIndex(e,r,n){const i=this._getStacks(e,n),a=r!==void 0?i.indexOf(r):-1;return a===-1?i.length-1:a}_getRuler(){const e=this.options,r=this._cachedMeta,n=r.iScale,i=[];let a,s;for(a=0,s=r.data.length;a=0;--n)r=Math.max(r,e[n].size(this.resolveDataElementOptions(n))/2);return r>0&&r}getLabelAndValue(e){const r=this._cachedMeta,n=this.chart.data.labels||[],{xScale:i,yScale:a}=r,s=this.getParsed(e),o=i.getLabelForValue(s.x),u=a.getLabelForValue(s.y),l=s._custom;return{label:n[e]||"",value:"("+o+", "+u+(l?", "+l:"")+")"}}update(e){const r=this._cachedMeta.data;this.updateElements(r,0,r.length,e)}updateElements(e,r,n,i){const a=i==="reset",{iScale:s,vScale:o}=this._cachedMeta,{sharedOptions:u,includeOptions:l}=this._getSharedOptions(r,i),c=s.axis,f=o.axis;for(let h=r;hAh(x,o,u,!0)?1:Math.max(_,_*r,A,A*r),g=(x,_,A)=>Ah(x,o,u,!0)?-1:Math.min(_,_*r,A,A*r),m=p(0,l,f),b=p(en,c,h),y=g(Pr,l,f),S=g(Pr+en,c,h);n=(m-y)/2,i=(b-S)/2,a=-(m+y)/2,s=-(b+S)/2}return{ratioX:n,ratioY:i,offsetX:a,offsetY:s}}class Oo extends ia{constructor(e,r){super(e,r),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(e,r){const n=this.getDataset().data,i=this._cachedMeta;if(this._parsing===!1)i._parsed=n;else{let a=u=>+n[u];if(Gt(n[e])){const{key:u="value"}=this._parsing;a=l=>+zo(n[l],u)}let s,o;for(s=e,o=e+r;s0&&!isNaN(e)?Fr*(Math.abs(e)/r):0}getLabelAndValue(e){const r=this._cachedMeta,n=this.chart,i=n.data.labels||[],a=Kh(r._parsed[e],n.options.locale);return{label:i[e]||"",value:a}}getMaxBorderWidth(e){let r=0;const n=this.chart;let i,a,s,o,u;if(!e){for(i=0,a=n.data.datasets.length;ie!=="spacing",_indexable:e=>e!=="spacing"&&!e.startsWith("borderDash")&&!e.startsWith("hoverBorderDash")}),je(Oo,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){const r=e.data;if(r.labels.length&&r.datasets.length){const{labels:{pointStyle:n,color:i}}=e.legend.options;return r.labels.map((a,s)=>{const u=e.getDatasetMeta(0).controller.getStyle(s);return{text:a,fillStyle:u.backgroundColor,strokeStyle:u.borderColor,fontColor:i,lineWidth:u.borderWidth,pointStyle:n,hidden:!e.getDataVisibility(s),index:s}})}return[]}},onClick(e,r,n){n.chart.toggleDataVisibility(r.index),n.chart.update()}}}});class fh extends ia{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(e){const r=this._cachedMeta,{dataset:n,data:i=[],_dataset:a}=r,s=this.chart._animationsDisabled;let{start:o,count:u}=ZT(r,i,s);this._drawStart=o,this._drawCount=u,KT(r)&&(o=0,u=i.length),n._chart=this.chart,n._datasetIndex=this.index,n._decimated=!!a._decimated,n.points=i;const l=this.resolveDatasetElementOptions(e);this.options.showLine||(l.borderWidth=0),l.segment=this.options.segment,this.updateElement(n,void 0,{animated:!s,options:l},e),this.updateElements(i,o,u,e)}updateElements(e,r,n,i){const a=i==="reset",{iScale:s,vScale:o,_stacked:u,_dataset:l}=this._cachedMeta,{sharedOptions:c,includeOptions:f}=this._getSharedOptions(r,i),h=s.axis,p=o.axis,{spanGaps:g,segment:m}=this.options,b=ic(g)?g:Number.POSITIVE_INFINITY,y=this.chart._animationsDisabled||a||i==="none",S=r+n,x=e.length;let _=r>0&&this.getParsed(r-1);for(let A=0;A=S){C.skip=!0;continue}const E=this.getParsed(A),N=or(E[p]),M=C[h]=s.getPixelForValue(E[h],A),O=C[p]=a||N?o.getBasePixel():o.getPixelForValue(u?this.applyStack(o,E,u):E[p],A);C.skip=isNaN(M)||isNaN(O)||N,C.stop=A>0&&Math.abs(E[h]-_[h])>b,m&&(C.parsed=E,C.raw=l.data[A]),f&&(C.options=c||this.resolveDataElementOptions(A,w.active?"active":i)),y||this.updateElement(w,A,C,i),_=E}}getMaxOverflow(){const e=this._cachedMeta,r=e.dataset,n=r.options&&r.options.borderWidth||0,i=e.data||[];if(!i.length)return n;const a=i[0].size(this.resolveDataElementOptions(0)),s=i[i.length-1].size(this.resolveDataElementOptions(i.length-1));return Math.max(n,a,s)/2}draw(){const e=this._cachedMeta;e.dataset.updateControlPoints(this.chart.chartArea,e.iScale.axis),super.draw()}}je(fh,"id","line"),je(fh,"defaults",{datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1}),je(fh,"overrides",{scales:{_index_:{type:"category"},_value_:{type:"linear"}}});class Xl extends ia{constructor(e,r){super(e,r),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(e){const r=this._cachedMeta,n=this.chart,i=n.data.labels||[],a=Kh(r._parsed[e].r,n.options.locale);return{label:i[e]||"",value:a}}parseObjectData(e,r,n,i){return aO.bind(this)(e,r,n,i)}update(e){const r=this._cachedMeta.data;this._updateRadius(),this.updateElements(r,0,r.length,e)}getMinMax(){const e=this._cachedMeta,r={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return e.data.forEach((n,i)=>{const a=this.getParsed(i).r;!isNaN(a)&&this.chart.getDataVisibility(i)&&(ar.max&&(r.max=a))}),r}_updateRadius(){const e=this.chart,r=e.chartArea,n=e.options,i=Math.min(r.right-r.left,r.bottom-r.top),a=Math.max(i/2,0),s=Math.max(n.cutoutPercentage?a/100*n.cutoutPercentage:1,0),o=(a-s)/e.getVisibleDatasetCount();this.outerRadius=a-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(e,r,n,i){const a=i==="reset",s=this.chart,u=s.options.animation,l=this._cachedMeta.rScale,c=l.xCenter,f=l.yCenter,h=l.getIndexAngle(0)-.5*Pr;let p=h,g;const m=360/this.countVisibleElements();for(g=0;g{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&r++}),r}_computeAngle(e,r,n){return this.chart.getDataVisibility(e)?Sa(this.resolveDataElementOptions(e,r).angle||n):0}}je(Xl,"id","polarArea"),je(Xl,"defaults",{dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0}),je(Xl,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){const r=e.data;if(r.labels.length&&r.datasets.length){const{labels:{pointStyle:n,color:i}}=e.legend.options;return r.labels.map((a,s)=>{const u=e.getDatasetMeta(0).controller.getStyle(s);return{text:a,fillStyle:u.backgroundColor,strokeStyle:u.borderColor,fontColor:i,lineWidth:u.borderWidth,pointStyle:n,hidden:!e.getDataVisibility(s),index:s}})}return[]}},onClick(e,r,n){n.chart.toggleDataVisibility(r.index),n.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}});class jm extends Oo{}je(jm,"id","pie"),je(jm,"defaults",{cutout:0,rotation:0,circumference:360,radius:"100%"});class hh extends ia{getLabelAndValue(e){const r=this._cachedMeta.vScale,n=this.getParsed(e);return{label:r.getLabels()[e],value:""+r.getLabelForValue(n[r.axis])}}parseObjectData(e,r,n,i){return aO.bind(this)(e,r,n,i)}update(e){const r=this._cachedMeta,n=r.dataset,i=r.data||[],a=r.iScale.getLabels();if(n.points=i,e!=="resize"){const s=this.resolveDatasetElementOptions(e);this.options.showLine||(s.borderWidth=0);const o={_loop:!0,_fullLoop:a.length===i.length,options:s};this.updateElement(n,void 0,o,e)}this.updateElements(i,0,i.length,e)}updateElements(e,r,n,i){const a=this._cachedMeta.rScale,s=i==="reset";for(let o=r;o0&&this.getParsed(r-1);for(let _=r;_0&&Math.abs(w[p]-x[p])>y,b&&(C.parsed=w,C.raw=l.data[_]),h&&(C.options=f||this.resolveDataElementOptions(_,A.active?"active":i)),S||this.updateElement(A,_,C,i),x=w}this.updateSharedOptions(f,i,c)}getMaxOverflow(){const e=this._cachedMeta,r=e.data||[];if(!this.options.showLine){let o=0;for(let u=r.length-1;u>=0;--u)o=Math.max(o,r[u].size(this.resolveDataElementOptions(u))/2);return o>0&&o}const n=e.dataset,i=n.options&&n.options.borderWidth||0;if(!r.length)return i;const a=r[0].size(this.resolveDataElementOptions(0)),s=r[r.length-1].size(this.resolveDataElementOptions(r.length-1));return Math.max(i,a,s)/2}}je(dh,"id","scatter"),je(dh,"defaults",{datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1}),je(dh,"overrides",{interaction:{mode:"point"},scales:{x:{type:"linear"},y:{type:"linear"}}});var mO=Object.freeze({__proto__:null,BarController:lh,BubbleController:ch,DoughnutController:Oo,LineController:fh,PieController:jm,PolarAreaController:Xl,RadarController:hh,ScatterController:dh});function wu(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class U1{constructor(e){je(this,"options");this.options=e||{}}static override(e){Object.assign(U1.prototype,e)}init(){}formats(){return wu()}parse(){return wu()}format(){return wu()}add(){return wu()}diff(){return wu()}startOf(){return wu()}endOf(){return wu()}}var vO={_date:U1};function wH(t,e,r,n){const{controller:i,data:a,_sorted:s}=t,o=i._cachedMeta.iScale;if(o&&e===o.axis&&e!=="r"&&s&&a.length){const u=o._reversePixels?jq:Ps;if(n){if(i._sharedOptions){const l=a[0],c=typeof l.getRange=="function"&&l.getRange(e);if(c){const f=u(a,e,r-c),h=u(a,e,r+c);return{lo:f.lo,hi:h.hi}}}}else return u(a,e,r)}return{lo:0,hi:a.length-1}}function Qh(t,e,r,n,i){const a=t.getSortedVisibleDatasetMetas(),s=r[e];for(let o=0,u=a.length;o{u[s](e[r],i)&&(a.push({element:u,datasetIndex:l,index:c}),o=o||u.inRange(e.x,e.y,i))}),n&&!o?[]:a}var gO={evaluateInteractionItems:Qh,modes:{index(t,e,r,n){const i=Du(e,t),a=r.axis||"x",s=r.includeInvisible||!1,o=r.intersect?Dy(t,i,a,n,s):Ny(t,i,a,!1,n,s),u=[];return o.length?(t.getSortedVisibleDatasetMetas().forEach(l=>{const c=o[0].index,f=l.data[c];f&&!f.skip&&u.push({element:f,datasetIndex:l.index,index:c})}),u):[]},dataset(t,e,r,n){const i=Du(e,t),a=r.axis||"xy",s=r.includeInvisible||!1;let o=r.intersect?Dy(t,i,a,n,s):Ny(t,i,a,!1,n,s);if(o.length>0){const u=o[0].datasetIndex,l=t.getDatasetMeta(u).data;o=[];for(let c=0;cr.pos===e)}function MA(t,e){return t.filter(r=>yO.indexOf(r.pos)===-1&&r.box.axis===e)}function Uf(t,e){return t.sort((r,n)=>{const i=e?n:r,a=e?r:n;return i.weight===a.weight?i.index-a.index:i.weight-a.weight})}function DH(t){const e=[];let r,n,i,a,s,o;for(r=0,n=(t||[]).length;rl.box.fullSize),!0),n=Uf(qf(e,"left"),!0),i=Uf(qf(e,"right")),a=Uf(qf(e,"top"),!0),s=Uf(qf(e,"bottom")),o=MA(e,"x"),u=MA(e,"y");return{fullSize:r,leftAndTop:n.concat(a),rightAndBottom:i.concat(u).concat(s).concat(o),chartArea:qf(e,"chartArea"),vertical:n.concat(i).concat(u),horizontal:a.concat(s).concat(o)}}function TA(t,e,r,n){return Math.max(t[r],e[r])+Math.max(t[n],e[n])}function bO(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.left),t.bottom=Math.max(t.bottom,e.bottom),t.right=Math.max(t.right,e.right)}function MH(t,e,r,n){const{pos:i,box:a}=r,s=t.maxPadding;if(!Gt(i)){r.size&&(t[i]-=r.size);const f=n[r.stack]||{size:0,count:1};f.size=Math.max(f.size,r.horizontal?a.height:a.width),r.size=f.size/f.count,t[i]+=r.size}a.getPadding&&bO(s,a.getPadding());const o=Math.max(0,e.outerWidth-TA(s,t,"left","right")),u=Math.max(0,e.outerHeight-TA(s,t,"top","bottom")),l=o!==t.w,c=u!==t.h;return t.w=o,t.h=u,r.horizontal?{same:l,other:c}:{same:c,other:l}}function TH(t){const e=t.maxPadding;function r(n){const i=Math.max(e[n]-t[n],0);return t[n]+=i,i}t.y+=r("top"),t.x+=r("left"),r("right"),r("bottom")}function OH(t,e){const r=e.maxPadding;function n(i){const a={left:0,top:0,right:0,bottom:0};return i.forEach(s=>{a[s]=Math.max(e[s],r[s])}),a}return n(t?["left","right"]:["top","bottom"])}function Jf(t,e,r,n){const i=[];let a,s,o,u,l,c;for(a=0,s=t.length,l=0;a{typeof m.beforeLayout=="function"&&m.beforeLayout()});const c=u.reduce((m,b)=>b.box.options&&b.box.options.display===!1?m:m+1,0)||1,f=Object.freeze({outerWidth:e,outerHeight:r,padding:i,availableWidth:a,availableHeight:s,vBoxMaxWidth:a/2/c,hBoxMaxHeight:s/2}),h=Object.assign({},i);bO(h,Yn(n));const p=Object.assign({maxPadding:h,w:a,h:s,x:i.left,y:i.top},i),g=EH(u.concat(l),f);Jf(o.fullSize,p,f,g),Jf(u,p,f,g),Jf(l,p,f,g)&&Jf(u,p,f,g),TH(p),OA(o.leftAndTop,p,f,g),p.x+=p.w,p.y+=p.h,OA(o.rightAndBottom,p,f,g),t.chartArea={left:p.left,top:p.top,right:p.left+p.w,bottom:p.top+p.h,height:p.h,width:p.w},yr(o.chartArea,m=>{const b=m.box;Object.assign(b,t.chartArea),b.update(p.w,p.h,{left:0,top:0,right:0,bottom:0})})}};class H1{acquireContext(e,r){}releaseContext(e){return!1}addEventListener(e,r,n){}removeEventListener(e,r,n){}getDevicePixelRatio(){return 1}getMaximumSize(e,r,n,i){return r=Math.max(0,r||e.width),n=n||e.height,{width:r,height:Math.max(0,i?Math.floor(r/i):n)}}isAttached(e){return!0}updateConfig(e){}}class xO extends H1{acquireContext(e){return e&&e.getContext&&e.getContext("2d")||null}updateConfig(e){e.options.animation=!1}}const Am="$chartjs",FH={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},FA=t=>t===null||t==="";function PH(t,e){const r=t.style,n=t.getAttribute("height"),i=t.getAttribute("width");if(t[Am]={initial:{height:n,width:i,style:{display:r.display,height:r.height,width:r.width}}},r.display=r.display||"block",r.boxSizing=r.boxSizing||"border-box",FA(i)){const a=pA(t,"width");a!==void 0&&(t.width=a)}if(FA(n))if(t.style.height==="")t.height=t.width/(e||2);else{const a=pA(t,"height");a!==void 0&&(t.height=a)}return t}const wO=zU?{passive:!0}:!1;function RH(t,e,r){t.addEventListener(e,r,wO)}function IH(t,e,r){t.canvas.removeEventListener(e,r,wO)}function BH(t,e){const r=FH[t.type]||t.type,{x:n,y:i}=Du(t,e);return{type:r,chart:e,native:t,x:n!==void 0?n:null,y:i!==void 0?i:null}}function Gm(t,e){for(const r of t)if(r===e||r.contains(e))return!0}function kH(t,e,r){const n=t.canvas,i=new MutationObserver(a=>{let s=!1;for(const o of a)s=s||Gm(o.addedNodes,n),s=s&&!Gm(o.removedNodes,n);s&&r()});return i.observe(document,{childList:!0,subtree:!0}),i}function LH(t,e,r){const n=t.canvas,i=new MutationObserver(a=>{let s=!1;for(const o of a)s=s||Gm(o.removedNodes,n),s=s&&!Gm(o.addedNodes,n);s&&r()});return i.observe(document,{childList:!0,subtree:!0}),i}const Nh=new Map;let PA=0;function SO(){const t=window.devicePixelRatio;t!==PA&&(PA=t,Nh.forEach((e,r)=>{r.currentDevicePixelRatio!==t&&e()}))}function $H(t,e){Nh.size||window.addEventListener("resize",SO),Nh.set(t,e)}function zH(t){Nh.delete(t),Nh.size||window.removeEventListener("resize",SO)}function qH(t,e,r){const n=t.canvas,i=n&&z1(n);if(!i)return;const a=XT((o,u)=>{const l=i.clientWidth;r(o,u),l{const u=o[0],l=u.contentRect.width,c=u.contentRect.height;l===0&&c===0||a(l,c)});return s.observe(i),$H(t,a),s}function Ey(t,e,r){r&&r.disconnect(),e==="resize"&&zH(t)}function UH(t,e,r){const n=t.canvas,i=XT(a=>{t.ctx!==null&&r(BH(a,t))},t);return RH(n,e,i),i}class _O extends H1{acquireContext(e,r){const n=e&&e.getContext&&e.getContext("2d");return n&&n.canvas===e?(PH(e,r),n):null}releaseContext(e){const r=e.canvas;if(!r[Am])return!1;const n=r[Am].initial;["height","width"].forEach(a=>{const s=n[a];or(s)?r.removeAttribute(a):r.setAttribute(a,s)});const i=n.style||{};return Object.keys(i).forEach(a=>{r.style[a]=i[a]}),r.width=r.width,delete r[Am],!0}addEventListener(e,r,n){this.removeEventListener(e,r);const i=e.$proxies||(e.$proxies={}),s={attach:kH,detach:LH,resize:qH}[r]||UH;i[r]=s(e,r,n)}removeEventListener(e,r){const n=e.$proxies||(e.$proxies={}),i=n[r];if(!i)return;({attach:Ey,detach:Ey,resize:Ey}[r]||IH)(e,r,i),n[r]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(e,r,n,i){return $U(e,r,n,i)}isAttached(e){const r=z1(e);return!!(r&&r.isConnected)}}function AO(t){return!$1()||typeof OffscreenCanvas<"u"&&t instanceof OffscreenCanvas?xO:_O}var xm;let es=(xm=class{constructor(){je(this,"x");je(this,"y");je(this,"active",!1);je(this,"options");je(this,"$animations")}tooltipPosition(e){const{x:r,y:n}=this.getProps(["x","y"],e);return{x:r,y:n}}hasValue(){return ic(this.x)&&ic(this.y)}getProps(e,r){const n=this.$animations;if(!r||!n)return this;const i={};return e.forEach(a=>{i[a]=n[a]&&n[a].active()?n[a]._to:this[a]}),i}},je(xm,"defaults",{}),je(xm,"defaultRoutes"),xm);function HH(t,e){const r=t.options.ticks,n=WH(t),i=Math.min(r.maxTicksLimit||n,n),a=r.major.enabled?YH(e):[],s=a.length,o=a[0],u=a[s-1],l=[];if(s>i)return jH(e,l,a,s/i),l;const c=VH(a,e,i);if(s>0){let f,h;const p=s>1?Math.round((u-o)/(s-1)):null;for(qp(e,l,c,or(p)?0:o-p,o),f=0,h=s-1;fi)return u}return Math.max(i,1)}function YH(t){const e=[];let r,n;for(r=0,n=t.length;rt==="left"?"right":t==="right"?"left":t,RA=(t,e,r)=>e==="top"||e==="left"?t[e]+r:t[e]-r,IA=(t,e)=>Math.min(e||t,t);function BA(t,e){const r=[],n=t.length/e,i=t.length;let a=0;for(;as+o)))return u}function KH(t,e){yr(t,r=>{const n=r.gc,i=n.length/2;let a;if(i>e){for(a=0;an?n:r,n=i&&r>n?r:n,{min:Mi(r,Mi(n,r)),max:Mi(n,Mi(r,n))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const e=this.chart.data;return this.options.labels||(this.isHorizontal()?e.xLabels:e.yLabels)||e.labels||[]}getLabelItems(e=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(e))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){Cr(this.options.beforeUpdate,[this])}update(e,r,n){const{beginAtZero:i,grace:a,ticks:s}=this.options,o=s.sampleSize;this.beforeUpdate(),this.maxWidth=e,this.maxHeight=r,this._margins=n=Object.assign({left:0,right:0,top:0,bottom:0},n),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+n.left+n.right:this.height+n.top+n.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=gU(this,a,i),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const u=o=a||n<=1||!this.isHorizontal()){this.labelRotation=i;return}const c=this._getLabelSizes(),f=c.widest.width,h=c.highest.height,p=wn(this.chart.width-f,0,this.maxWidth);o=e.offset?this.maxWidth/n:p/(n-1),f+6>o&&(o=p/(n-(e.offset?.5:1)),u=this.maxHeight-Hf(e.grid)-r.padding-kA(e.title,this.chart.options.font),l=Math.sqrt(f*f+h*h),s=O1(Math.min(Math.asin(wn((c.highest.height+6)/o,-1,1)),Math.asin(wn(u/l,-1,1))-Math.asin(wn(h/l,-1,1)))),s=Math.max(i,Math.min(a,s))),this.labelRotation=s}afterCalculateLabelRotation(){Cr(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){Cr(this.options.beforeFit,[this])}fit(){const e={width:0,height:0},{chart:r,options:{ticks:n,title:i,grid:a}}=this,s=this._isVisible(),o=this.isHorizontal();if(s){const u=kA(i,r.options.font);if(o?(e.width=this.maxWidth,e.height=Hf(a)+u):(e.height=this.maxHeight,e.width=Hf(a)+u),n.display&&this.ticks.length){const{first:l,last:c,widest:f,highest:h}=this._getLabelSizes(),p=n.padding*2,g=Sa(this.labelRotation),m=Math.cos(g),b=Math.sin(g);if(o){const y=n.mirror?0:b*f.width+m*h.height;e.height=Math.min(this.maxHeight,e.height+y+p)}else{const y=n.mirror?0:m*f.width+b*h.height;e.width=Math.min(this.maxWidth,e.width+y+p)}this._calculatePadding(l,c,b,m)}}this._handleMargins(),o?(this.width=this._length=r.width-this._margins.left-this._margins.right,this.height=e.height):(this.width=e.width,this.height=this._length=r.height-this._margins.top-this._margins.bottom)}_calculatePadding(e,r,n,i){const{ticks:{align:a,padding:s},position:o}=this.options,u=this.labelRotation!==0,l=o!=="top"&&this.axis==="x";if(this.isHorizontal()){const c=this.getPixelForTick(0)-this.left,f=this.right-this.getPixelForTick(this.ticks.length-1);let h=0,p=0;u?l?(h=i*e.width,p=n*r.height):(h=n*e.height,p=i*r.width):a==="start"?p=r.width:a==="end"?h=e.width:a!=="inner"&&(h=e.width/2,p=r.width/2),this.paddingLeft=Math.max((h-c+s)*this.width/(this.width-c),0),this.paddingRight=Math.max((p-f+s)*this.width/(this.width-f),0)}else{let c=r.height/2,f=e.height/2;a==="start"?(c=0,f=e.height):a==="end"&&(c=r.height,f=0),this.paddingTop=c+s,this.paddingBottom=f+s}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){Cr(this.options.afterFit,[this])}isHorizontal(){const{axis:e,position:r}=this.options;return r==="top"||r==="bottom"||e==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(e){this.beforeTickToLabelConversion(),this.generateTickLabels(e);let r,n;for(r=0,n=e.length;r({width:s[N]||0,height:o[N]||0});return{first:E(0),last:E(r-1),widest:E(w),highest:E(C),widths:s,heights:o}}getLabelForValue(e){return e}getPixelForValue(e,r){return NaN}getValueForPixel(e){}getPixelForTick(e){const r=this.ticks;return e<0||e>r.length-1?null:this.getPixelForValue(r[e].value)}getPixelForDecimal(e){this._reversePixels&&(e=1-e);const r=this._startPixel+e*this._length;return Yq(this._alignToPixels?xu(this.chart,r,0):r)}getDecimalForPixel(e){const r=(e-this._startPixel)/this._length;return this._reversePixels?1-r:r}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:e,max:r}=this;return e<0&&r<0?r:e>0&&r>0?e:0}getContext(e){const r=this.ticks||[];if(e>=0&&eo*i?o/n:u/i:u*i0}_computeGridLineItems(e){const r=this.axis,n=this.chart,i=this.options,{grid:a,position:s,border:o}=i,u=a.offset,l=this.isHorizontal(),f=this.ticks.length+(u?1:0),h=Hf(a),p=[],g=o.setContext(this.getContext()),m=g.display?g.width:0,b=m/2,y=function(B){return xu(n,B,m)};let S,x,_,A,w,C,E,N,M,O,F,q;if(s==="top")S=y(this.bottom),C=this.bottom-h,N=S-b,O=y(e.top)+b,q=e.bottom;else if(s==="bottom")S=y(this.top),O=e.top,q=y(e.bottom)-b,C=S+b,N=this.top+h;else if(s==="left")S=y(this.right),w=this.right-h,E=S-b,M=y(e.left)+b,F=e.right;else if(s==="right")S=y(this.left),M=e.left,F=y(e.right)-b,w=S+b,E=this.left+h;else if(r==="x"){if(s==="center")S=y((e.top+e.bottom)/2+.5);else if(Gt(s)){const B=Object.keys(s)[0],I=s[B];S=y(this.chart.scales[B].getPixelForValue(I))}O=e.top,q=e.bottom,C=S+b,N=C+h}else if(r==="y"){if(s==="center")S=y((e.left+e.right)/2);else if(Gt(s)){const B=Object.keys(s)[0],I=s[B];S=y(this.chart.scales[B].getPixelForValue(I))}w=S-b,E=w-h,M=e.left,F=e.right}const V=Rt(i.ticks.maxTicksLimit,f),H=Math.max(1,Math.ceil(f/V));for(x=0;x0&&(ce-=de/2);break}he={left:ce,top:Se,width:de+ne.width,height:X+ne.height,color:H.backdropColor}}b.push({label:_,font:N,textOffset:F,options:{rotation:m,color:I,strokeColor:K,strokeWidth:$,textAlign:se,textBaseline:q,translation:[A,w],backdrop:he}})}return b}_getXAxisLabelAlignment(){const{position:e,ticks:r}=this.options;if(-Sa(this.labelRotation))return e==="top"?"left":"right";let i="center";return r.align==="start"?i="left":r.align==="end"?i="right":r.align==="inner"&&(i="inner"),i}_getYAxisLabelAlignment(e){const{position:r,ticks:{crossAlign:n,mirror:i,padding:a}}=this.options,s=this._getLabelSizes(),o=e+a,u=s.widest.width;let l,c;return r==="left"?i?(c=this.right+a,n==="near"?l="left":n==="center"?(l="center",c+=u/2):(l="right",c+=u)):(c=this.right-o,n==="near"?l="right":n==="center"?(l="center",c-=u/2):(l="left",c=this.left)):r==="right"?i?(c=this.left+a,n==="near"?l="right":n==="center"?(l="center",c-=u/2):(l="left",c-=u)):(c=this.left+o,n==="near"?l="left":n==="center"?(l="center",c+=u/2):(l="right",c=this.right)):l="right",{textAlign:l,x:c}}_computeLabelArea(){if(this.options.ticks.mirror)return;const e=this.chart,r=this.options.position;if(r==="left"||r==="right")return{top:0,left:this.left,bottom:e.height,right:this.right};if(r==="top"||r==="bottom")return{top:this.top,left:0,bottom:this.bottom,right:e.width}}drawBackground(){const{ctx:e,options:{backgroundColor:r},left:n,top:i,width:a,height:s}=this;r&&(e.save(),e.fillStyle=r,e.fillRect(n,i,a,s),e.restore())}getLineWidthForValue(e){const r=this.options.grid;if(!this._isVisible()||!r.display)return 0;const i=this.ticks.findIndex(a=>a.value===e);return i>=0?r.setContext(this.getContext(i)).lineWidth:0}drawGrid(e){const r=this.options.grid,n=this.ctx,i=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(e));let a,s;const o=(u,l,c)=>{!c.width||!c.color||(n.save(),n.lineWidth=c.width,n.strokeStyle=c.color,n.setLineDash(c.borderDash||[]),n.lineDashOffset=c.borderDashOffset,n.beginPath(),n.moveTo(u.x,u.y),n.lineTo(l.x,l.y),n.stroke(),n.restore())};if(r.display)for(a=0,s=i.length;a{this.draw(a)}}]:[{z:n,draw:a=>{this.drawBackground(),this.drawGrid(a),this.drawTitle()}},{z:i,draw:()=>{this.drawBorder()}},{z:r,draw:a=>{this.drawLabels(a)}}]}getMatchingVisibleMetas(e){const r=this.chart.getSortedVisibleDatasetMetas(),n=this.axis+"AxisID",i=[];let a,s;for(a=0,s=r.length;a{const n=r.split("."),i=n.pop(),a=[t].concat(n).join("."),s=e[r].split("."),o=s.pop(),u=s.join(".");qr.route(a,i,u,o)})}function iW(t){return"id"in t&&"defaults"in t}class aW{constructor(){this.controllers=new Up(ia,"datasets",!0),this.elements=new Up(es,"elements"),this.plugins=new Up(Object,"plugins"),this.scales=new Up(jo,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...e){this._each("register",e)}remove(...e){this._each("unregister",e)}addControllers(...e){this._each("register",e,this.controllers)}addElements(...e){this._each("register",e,this.elements)}addPlugins(...e){this._each("register",e,this.plugins)}addScales(...e){this._each("register",e,this.scales)}getController(e){return this._get(e,this.controllers,"controller")}getElement(e){return this._get(e,this.elements,"element")}getPlugin(e){return this._get(e,this.plugins,"plugin")}getScale(e){return this._get(e,this.scales,"scale")}removeControllers(...e){this._each("unregister",e,this.controllers)}removeElements(...e){this._each("unregister",e,this.elements)}removePlugins(...e){this._each("unregister",e,this.plugins)}removeScales(...e){this._each("unregister",e,this.scales)}_each(e,r,n){[...r].forEach(i=>{const a=n||this._getRegistryForType(i);n||a.isForType(i)||a===this.plugins&&i.id?this._exec(e,a,i):yr(i,s=>{const o=n||this._getRegistryForType(s);this._exec(e,o,s)})})}_exec(e,r,n){const i=T1(e);Cr(n["before"+i],[],n),r[e](n),Cr(n["after"+i],[],n)}_getRegistryForType(e){for(let r=0;ra.filter(o=>!s.some(u=>o.plugin.id===u.plugin.id));this._notify(i(r,n),e,"stop"),this._notify(i(n,r),e,"start")}}function oW(t){const e={},r=[],n=Object.keys(ba.plugins.items);for(let a=0;a1&&LA(t[0].toLowerCase());if(n)return n}throw new Error(`Cannot determine type of '${t}' axis. Please provide 'axis' or 'position' option.`)}function $A(t,e,r){if(r[e+"AxisID"]===t)return{axis:e}}function pW(t,e){if(e.data&&e.data.datasets){const r=e.data.datasets.filter(n=>n.xAxisID===t||n.yAxisID===t);if(r.length)return $A(t,"x",r[0])||$A(t,"y",r[0])}return{}}function mW(t,e){const r=$u[t.type]||{scales:{}},n=e.scales||{},i=mb(t.type,e),a=Object.create(null);return Object.keys(n).forEach(s=>{const o=n[s];if(!Gt(o))return console.error(`Invalid scale configuration for scale: ${s}`);if(o._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${s}`);const u=vb(s,o,pW(s,t),qr.scales[o.type]),l=hW(u,i),c=r.scales||{};a[s]=ah(Object.create(null),[{axis:u},o,c[u],c[l]])}),t.data.datasets.forEach(s=>{const o=s.type||t.type,u=s.indexAxis||mb(o,e),c=($u[o]||{}).scales||{};Object.keys(c).forEach(f=>{const h=fW(f,u),p=s[h+"AxisID"]||h;a[p]=a[p]||Object.create(null),ah(a[p],[{axis:h},n[p],c[f]])})}),Object.keys(a).forEach(s=>{const o=a[s];ah(o,[qr.scales[o.type],qr.scale])}),a}function DO(t){const e=t.options||(t.options={});e.plugins=Rt(e.plugins,{}),e.scales=mW(t,e)}function NO(t){return t=t||{},t.datasets=t.datasets||[],t.labels=t.labels||[],t}function vW(t){return t=t||{},t.data=NO(t.data),DO(t),t}const zA=new Map,EO=new Set;function Hp(t,e){let r=zA.get(t);return r||(r=e(),zA.set(t,r),EO.add(r)),r}const Wf=(t,e,r)=>{const n=zo(e,r);n!==void 0&&t.add(n)};class gW{constructor(e){this._config=vW(e),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(e){this._config.type=e}get data(){return this._config.data}set data(e){this._config.data=NO(e)}get options(){return this._config.options}set options(e){this._config.options=e}get plugins(){return this._config.plugins}update(){const e=this._config;this.clearCache(),DO(e)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(e){return Hp(e,()=>[[`datasets.${e}`,""]])}datasetAnimationScopeKeys(e,r){return Hp(`${e}.transition.${r}`,()=>[[`datasets.${e}.transitions.${r}`,`transitions.${r}`],[`datasets.${e}`,""]])}datasetElementScopeKeys(e,r){return Hp(`${e}-${r}`,()=>[[`datasets.${e}.elements.${r}`,`datasets.${e}`,`elements.${r}`,""]])}pluginScopeKeys(e){const r=e.id,n=this.type;return Hp(`${n}-plugin-${r}`,()=>[[`plugins.${r}`,...e.additionalOptionScopes||[]]])}_cachedScopes(e,r){const n=this._scopeCache;let i=n.get(e);return(!i||r)&&(i=new Map,n.set(e,i)),i}getOptionScopes(e,r,n){const{options:i,type:a}=this,s=this._cachedScopes(e,n),o=s.get(r);if(o)return o;const u=new Set;r.forEach(c=>{e&&(u.add(e),c.forEach(f=>Wf(u,e,f))),c.forEach(f=>Wf(u,i,f)),c.forEach(f=>Wf(u,$u[a]||{},f)),c.forEach(f=>Wf(u,qr,f)),c.forEach(f=>Wf(u,db,f))});const l=Array.from(u);return l.length===0&&l.push(Object.create(null)),EO.has(r)&&s.set(r,l),l}chartOptionScopes(){const{options:e,type:r}=this;return[e,$u[r]||{},qr.datasets[r]||{},{type:r},qr,db]}resolveNamedOptions(e,r,n,i=[""]){const a={$shared:!0},{resolver:s,subPrefixes:o}=qA(this._resolverCache,e,i);let u=s;if(bW(s,r)){a.$shared=!1,n=qo(n)?n():n;const l=this.createResolver(e,n,o);u=ac(s,n,l)}for(const l of r)a[l]=u[l];return a}createResolver(e,r,n=[""],i){const{resolver:a}=qA(this._resolverCache,e,n);return Gt(r)?ac(a,r,void 0,i):a}}function qA(t,e,r){let n=t.get(e);n||(n=new Map,t.set(e,n));const i=r.join();let a=n.get(i);return a||(a={resolver:B1(e,r),subPrefixes:r.filter(o=>!o.toLowerCase().includes("hover"))},n.set(i,a)),a}const yW=t=>Gt(t)&&Object.getOwnPropertyNames(t).some(e=>qo(t[e]));function bW(t,e){const{isScriptable:r,isIndexable:n}=tO(t);for(const i of e){const a=r(i),s=n(i),o=(s||a)&&t[i];if(a&&(qo(o)||yW(o))||s&&Or(o))return!0}return!1}var xW="4.4.1";const wW=["top","bottom","left","right","chartArea"];function UA(t,e){return t==="top"||t==="bottom"||wW.indexOf(t)===-1&&e==="x"}function HA(t,e){return function(r,n){return r[t]===n[t]?r[e]-n[e]:r[t]-n[t]}}function WA(t){const e=t.chart,r=e.options.animation;e.notifyPlugins("afterRender"),Cr(r&&r.onComplete,[t],e)}function SW(t){const e=t.chart,r=e.options.animation;Cr(r&&r.onProgress,[t],e)}function CO(t){return $1()&&typeof t=="string"?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const Dm={},VA=t=>{const e=CO(t);return Object.values(Dm).filter(r=>r.canvas===e).pop()};function _W(t,e,r){const n=Object.keys(t);for(const i of n){const a=+i;if(a>=e){const s=t[i];delete t[i],(r>0||a>e)&&(t[a+r]=s)}}}function AW(t,e,r,n){return!r||t.type==="mouseout"?null:n?e:t}function Wp(t,e,r){return t.options.clip?t[r]:e[r]}function DW(t,e){const{xScale:r,yScale:n}=t;return r&&n?{left:Wp(r,e,"left"),right:Wp(r,e,"right"),top:Wp(n,e,"top"),bottom:Wp(n,e,"bottom")}:e}class _o{static register(...e){ba.add(...e),YA()}static unregister(...e){ba.remove(...e),YA()}constructor(e,r){const n=this.config=new gW(r),i=CO(e),a=VA(i);if(a)throw new Error("Canvas is already in use. Chart with ID '"+a.id+"' must be destroyed before the canvas with ID '"+a.canvas.id+"' can be reused.");const s=n.createResolver(n.chartOptionScopes(),this.getContext());this.platform=new(n.platform||AO(i)),this.platform.updateConfig(n);const o=this.platform.acquireContext(i,s.aspectRatio),u=o&&o.canvas,l=u&&u.height,c=u&&u.width;if(this.id=Rq(),this.ctx=o,this.canvas=u,this.width=c,this.height=l,this._options=s,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new sW,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=Zq(f=>this.update(f),s.resizeDelay||0),this._dataChanges=[],Dm[this.id]=this,!o||!u){console.error("Failed to create chart: can't acquire context from the given item");return}Ya.listen(this,"complete",WA),Ya.listen(this,"progress",SW),this._initialize(),this.attached&&this.update()}get aspectRatio(){const{options:{aspectRatio:e,maintainAspectRatio:r},width:n,height:i,_aspectRatio:a}=this;return or(e)?r&&a?a:i?n/i:null:e}get data(){return this.config.data}set data(e){this.config.data=e}get options(){return this._options}set options(e){this.config.options=e}get registry(){return ba}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():dA(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return cA(this.canvas,this.ctx),this}stop(){return Ya.stop(this),this}resize(e,r){Ya.running(this)?this._resizeBeforeDraw={width:e,height:r}:this._resize(e,r)}_resize(e,r){const n=this.options,i=this.canvas,a=n.maintainAspectRatio&&this.aspectRatio,s=this.platform.getMaximumSize(i,e,r,a),o=n.devicePixelRatio||this.platform.getDevicePixelRatio(),u=this.width?"resize":"attach";this.width=s.width,this.height=s.height,this._aspectRatio=this.aspectRatio,dA(this,o,!0)&&(this.notifyPlugins("resize",{size:s}),Cr(n.onResize,[this,s],this),this.attached&&this._doResize(u)&&this.render())}ensureScalesHaveIDs(){const r=this.options.scales||{};yr(r,(n,i)=>{n.id=i})}buildOrUpdateScales(){const e=this.options,r=e.scales,n=this.scales,i=Object.keys(n).reduce((s,o)=>(s[o]=!1,s),{});let a=[];r&&(a=a.concat(Object.keys(r).map(s=>{const o=r[s],u=vb(s,o),l=u==="r",c=u==="x";return{options:o,dposition:l?"chartArea":c?"bottom":"left",dtype:l?"radialLinear":c?"category":"linear"}}))),yr(a,s=>{const o=s.options,u=o.id,l=vb(u,o),c=Rt(o.type,s.dtype);(o.position===void 0||UA(o.position,l)!==UA(s.dposition))&&(o.position=s.dposition),i[u]=!0;let f=null;if(u in n&&n[u].type===c)f=n[u];else{const h=ba.getScale(c);f=new h({id:u,type:c,ctx:this.ctx,chart:this}),n[f.id]=f}f.init(o,e)}),yr(i,(s,o)=>{s||delete n[o]}),yr(n,s=>{Mn.configure(this,s,s.options),Mn.addBox(this,s)})}_updateMetasets(){const e=this._metasets,r=this.data.datasets.length,n=e.length;if(e.sort((i,a)=>i.index-a.index),n>r){for(let i=r;ir.length&&delete this._stacks,e.forEach((n,i)=>{r.filter(a=>a===n._dataset).length===0&&this._destroyDatasetMeta(i)})}buildOrUpdateControllers(){const e=[],r=this.data.datasets;let n,i;for(this._removeUnreferencedMetasets(),n=0,i=r.length;n{this.getDatasetMeta(r).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(e){const r=this.config;r.update();const n=this._options=r.createResolver(r.chartOptionScopes(),this.getContext()),i=this._animationsDisabled=!n.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:e,cancelable:!0})===!1)return;const a=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let s=0;for(let l=0,c=this.data.datasets.length;l{l.reset()}),this._updateDatasets(e),this.notifyPlugins("afterUpdate",{mode:e}),this._layers.sort(HA("z","_idx"));const{_active:o,_lastEvent:u}=this;u?this._eventHandler(u,!0):o.length&&this._updateHoverStyles(o,o,!0),this.render()}_updateScales(){yr(this.scales,e=>{Mn.removeBox(this,e)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const e=this.options,r=new Set(Object.keys(this._listeners)),n=new Set(e.events);(!tA(r,n)||!!this._responsiveListeners!==e.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:e}=this,r=this._getUniformDataChanges()||[];for(const{method:n,start:i,count:a}of r){const s=n==="_removeElements"?-a:a;_W(e,i,s)}}_getUniformDataChanges(){const e=this._dataChanges;if(!e||!e.length)return;this._dataChanges=[];const r=this.data.datasets.length,n=a=>new Set(e.filter(s=>s[0]===a).map((s,o)=>o+","+s.splice(1).join(","))),i=n(0);for(let a=1;aa.split(",")).map(a=>({method:a[1],start:+a[2],count:+a[3]}))}_updateLayout(e){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;Mn.update(this,this.width,this.height,e);const r=this.chartArea,n=r.width<=0||r.height<=0;this._layers=[],yr(this.boxes,i=>{n&&i.position==="chartArea"||(i.configure&&i.configure(),this._layers.push(...i._layers()))},this),this._layers.forEach((i,a)=>{i._idx=a}),this.notifyPlugins("afterLayout")}_updateDatasets(e){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:e,cancelable:!0})!==!1){for(let r=0,n=this.data.datasets.length;r=0;--r)this._drawDataset(e[r]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(e){const r=this.ctx,n=e._clip,i=!n.disabled,a=DW(e,this.chartArea),s={meta:e,index:e.index,cancelable:!0};this.notifyPlugins("beforeDatasetDraw",s)!==!1&&(i&&Kv(r,{left:n.left===!1?0:a.left-n.left,right:n.right===!1?this.width:a.right+n.right,top:n.top===!1?0:a.top-n.top,bottom:n.bottom===!1?this.height:a.bottom+n.bottom}),e.controller.draw(),i&&Jv(r),s.cancelable=!1,this.notifyPlugins("afterDatasetDraw",s))}isPointInArea(e){return Rs(e,this.chartArea,this._minPadding)}getElementsAtEventForMode(e,r,n,i){const a=gO.modes[r];return typeof a=="function"?a(this,e,n,i):[]}getDatasetMeta(e){const r=this.data.datasets[e],n=this._metasets;let i=n.filter(a=>a&&a._dataset===r).pop();return i||(i={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:r&&r.order||0,index:e,_dataset:r,_parsed:[],_sorted:!1},n.push(i)),i}getContext(){return this.$context||(this.$context=Yo(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(e){const r=this.data.datasets[e];if(!r)return!1;const n=this.getDatasetMeta(e);return typeof n.hidden=="boolean"?!n.hidden:!r.hidden}setDatasetVisibility(e,r){const n=this.getDatasetMeta(e);n.hidden=!r}toggleDataVisibility(e){this._hiddenIndices[e]=!this._hiddenIndices[e]}getDataVisibility(e){return!this._hiddenIndices[e]}_updateVisibility(e,r,n){const i=n?"show":"hide",a=this.getDatasetMeta(e),s=a.controller._resolveAnimations(void 0,i);_h(r)?(a.data[r].hidden=!n,this.update()):(this.setDatasetVisibility(e,n),s.update(a,{visible:n}),this.update(o=>o.datasetIndex===e?i:void 0))}hide(e,r){this._updateVisibility(e,r,!1)}show(e,r){this._updateVisibility(e,r,!0)}_destroyDatasetMeta(e){const r=this._metasets[e];r&&r.controller&&r.controller._destroy(),delete this._metasets[e]}_stop(){let e,r;for(this.stop(),Ya.remove(this),e=0,r=this.data.datasets.length;e{r.addEventListener(this,a,s),e[a]=s},i=(a,s,o)=>{a.offsetX=s,a.offsetY=o,this._eventHandler(a)};yr(this.options.events,a=>n(a,i))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const e=this._responsiveListeners,r=this.platform,n=(u,l)=>{r.addEventListener(this,u,l),e[u]=l},i=(u,l)=>{e[u]&&(r.removeEventListener(this,u,l),delete e[u])},a=(u,l)=>{this.canvas&&this.resize(u,l)};let s;const o=()=>{i("attach",o),this.attached=!0,this.resize(),n("resize",a),n("detach",s)};s=()=>{this.attached=!1,i("resize",a),this._stop(),this._resize(0,0),n("attach",o)},r.isAttached(this.canvas)?o():s()}unbindEvents(){yr(this._listeners,(e,r)=>{this.platform.removeEventListener(this,r,e)}),this._listeners={},yr(this._responsiveListeners,(e,r)=>{this.platform.removeEventListener(this,r,e)}),this._responsiveListeners=void 0}updateHoverStyle(e,r,n){const i=n?"set":"remove";let a,s,o,u;for(r==="dataset"&&(a=this.getDatasetMeta(e[0].datasetIndex),a.controller["_"+i+"DatasetHoverStyle"]()),o=0,u=e.length;o{const o=this.getDatasetMeta(a);if(!o)throw new Error("No dataset found at index "+a);return{datasetIndex:a,element:o.data[s],index:s}});!Um(n,r)&&(this._active=n,this._lastEvent=null,this._updateHoverStyles(n,r))}notifyPlugins(e,r,n){return this._plugins.notify(this,e,r,n)}isPluginEnabled(e){return this._plugins._cache.filter(r=>r.plugin.id===e).length===1}_updateHoverStyles(e,r,n){const i=this.options.hover,a=(u,l)=>u.filter(c=>!l.some(f=>c.datasetIndex===f.datasetIndex&&c.index===f.index)),s=a(r,e),o=n?e:a(e,r);s.length&&this.updateHoverStyle(s,i.mode,!1),o.length&&i.mode&&this.updateHoverStyle(o,i.mode,!0)}_eventHandler(e,r){const n={event:e,replay:r,cancelable:!0,inChartArea:this.isPointInArea(e)},i=s=>(s.options.events||this.options.events).includes(e.native.type);if(this.notifyPlugins("beforeEvent",n,i)===!1)return;const a=this._handleEvent(e,r,n.inChartArea);return n.cancelable=!1,this.notifyPlugins("afterEvent",n,i),(a||n.changed)&&this.render(),this}_handleEvent(e,r,n){const{_active:i=[],options:a}=this,s=r,o=this._getActiveElements(e,i,n,s),u=zq(e),l=AW(e,this._lastEvent,n,u);n&&(this._lastEvent=null,Cr(a.onHover,[e,o,this],this),u&&Cr(a.onClick,[e,o,this],this));const c=!Um(o,i);return(c||r)&&(this._active=o,this._updateHoverStyles(o,i,r)),this._lastEvent=l,c}_getActiveElements(e,r,n,i){if(e.type==="mouseout")return[];if(!n)return r;const a=this.options.hover;return this.getElementsAtEventForMode(e,a.mode,a,i)}}je(_o,"defaults",qr),je(_o,"instances",Dm),je(_o,"overrides",$u),je(_o,"registry",ba),je(_o,"version",xW),je(_o,"getChart",VA);function YA(){return yr(_o.instances,t=>t._plugins.invalidate())}function NW(t,e,r){const{startAngle:n,pixelMargin:i,x:a,y:s,outerRadius:o,innerRadius:u}=e;let l=i/o;t.beginPath(),t.arc(a,s,o,n-l,r+l),u>i?(l=i/u,t.arc(a,s,u,r+l,n-l,!0)):t.arc(a,s,i,r+en,n-en),t.closePath(),t.clip()}function EW(t){return I1(t,["outerStart","outerEnd","innerStart","innerEnd"])}function CW(t,e,r,n){const i=EW(t.options.borderRadius),a=(r-e)/2,s=Math.min(a,n*e/2),o=u=>{const l=(r-Math.min(a,u))*n/2;return wn(u,0,Math.min(a,l))};return{outerStart:o(i.outerStart),outerEnd:o(i.outerEnd),innerStart:wn(i.innerStart,0,s),innerEnd:wn(i.innerEnd,0,s)}}function Fl(t,e,r,n){return{x:r+t*Math.cos(e),y:n+t*Math.sin(e)}}function Xm(t,e,r,n,i,a){const{x:s,y:o,startAngle:u,pixelMargin:l,innerRadius:c}=e,f=Math.max(e.outerRadius+n+r-l,0),h=c>0?c+n+r+l:0;let p=0;const g=i-u;if(n){const H=c>0?c-n:0,B=f>0?f-n:0,I=(H+B)/2,K=I!==0?g*I/(I+n):g;p=(g-K)/2}const m=Math.max(.001,g*f-r/Pr)/f,b=(g-m)/2,y=u+b+p,S=i-b-p,{outerStart:x,outerEnd:_,innerStart:A,innerEnd:w}=CW(e,h,f,S-y),C=f-x,E=f-_,N=y+x/C,M=S-_/E,O=h+A,F=h+w,q=y+A/O,V=S-w/F;if(t.beginPath(),a){const H=(N+M)/2;if(t.arc(s,o,f,N,H),t.arc(s,o,f,H,M),_>0){const $=Fl(E,M,s,o);t.arc($.x,$.y,_,M,S+en)}const B=Fl(F,S,s,o);if(t.lineTo(B.x,B.y),w>0){const $=Fl(F,V,s,o);t.arc($.x,$.y,w,S+en,V+Math.PI)}const I=(S-w/h+(y+A/h))/2;if(t.arc(s,o,h,S-w/h,I,!0),t.arc(s,o,h,I,y+A/h,!0),A>0){const $=Fl(O,q,s,o);t.arc($.x,$.y,A,q+Math.PI,y-en)}const K=Fl(C,y,s,o);if(t.lineTo(K.x,K.y),x>0){const $=Fl(C,N,s,o);t.arc($.x,$.y,x,y-en,N)}}else{t.moveTo(s,o);const H=Math.cos(N)*f+s,B=Math.sin(N)*f+o;t.lineTo(H,B);const I=Math.cos(M)*f+s,K=Math.sin(M)*f+o;t.lineTo(I,K)}t.closePath()}function MW(t,e,r,n,i){const{fullCircles:a,startAngle:s,circumference:o}=e;let u=e.endAngle;if(a){Xm(t,e,r,n,u,i);for(let l=0;l=Fr||Ah(s,u,l),b=Fs(o,c+p,f+p);return m&&b}getCenterPoint(r){const{x:n,y:i,startAngle:a,endAngle:s,innerRadius:o,outerRadius:u}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],r),{offset:l,spacing:c}=this.options,f=(a+s)/2,h=(o+u+c+l)/2;return{x:n+Math.cos(f)*h,y:i+Math.sin(f)*h}}tooltipPosition(r){return this.getCenterPoint(r)}draw(r){const{options:n,circumference:i}=this,a=(n.offset||0)/4,s=(n.spacing||0)/2,o=n.circular;if(this.pixelMargin=n.borderAlign==="inner"?.33:0,this.fullCircles=i>Fr?Math.floor(i/Fr):0,i===0||this.innerRadius<0||this.outerRadius<0)return;r.save();const u=(this.startAngle+this.endAngle)/2;r.translate(Math.cos(u)*a,Math.sin(u)*a);const l=1-Math.sin(Math.min(Pr,i||0)),c=a*l;r.fillStyle=n.backgroundColor,r.strokeStyle=n.borderColor,MW(r,this,c,s,o),TW(r,this,c,s,o),r.restore()}}je(ql,"id","arc"),je(ql,"defaults",{borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0}),je(ql,"defaultRoutes",{backgroundColor:"backgroundColor"}),je(ql,"descriptors",{_scriptable:!0,_indexable:r=>r!=="borderDash"});function MO(t,e,r=e){t.lineCap=Rt(r.borderCapStyle,e.borderCapStyle),t.setLineDash(Rt(r.borderDash,e.borderDash)),t.lineDashOffset=Rt(r.borderDashOffset,e.borderDashOffset),t.lineJoin=Rt(r.borderJoinStyle,e.borderJoinStyle),t.lineWidth=Rt(r.borderWidth,e.borderWidth),t.strokeStyle=Rt(r.borderColor,e.borderColor)}function OW(t,e,r){t.lineTo(r.x,r.y)}function FW(t){return t.stepped?uU:t.tension||t.cubicInterpolationMode==="monotone"?lU:OW}function TO(t,e,r={}){const n=t.length,{start:i=0,end:a=n-1}=r,{start:s,end:o}=e,u=Math.max(i,s),l=Math.min(a,o),c=io&&a>o;return{count:n,start:u,loop:e.loop,ilen:l(s+(l?o-_:_))%a,x=()=>{m!==b&&(t.lineTo(c,b),t.lineTo(c,m),t.lineTo(c,y))};for(u&&(p=i[S(0)],t.moveTo(p.x,p.y)),h=0;h<=o;++h){if(p=i[S(h)],p.skip)continue;const _=p.x,A=p.y,w=_|0;w===g?(Ab&&(b=A),c=(f*c+_)/++f):(x(),t.lineTo(_,A),g=w,f=0,m=b=A),y=A}x()}function gb(t){const e=t.options,r=e.borderDash&&e.borderDash.length;return!t._decimated&&!t._loop&&!e.tension&&e.cubicInterpolationMode!=="monotone"&&!e.stepped&&!r?RW:PW}function IW(t){return t.stepped?qU:t.tension||t.cubicInterpolationMode==="monotone"?UU:Nu}function BW(t,e,r,n){let i=e._path;i||(i=e._path=new Path2D,e.path(i,r,n)&&i.closePath()),MO(t,e.options),t.stroke(i)}function kW(t,e,r,n){const{segments:i,options:a}=e,s=gb(e);for(const o of i)MO(t,a,o.style),t.beginPath(),s(t,e,o,{start:r,end:r+n-1})&&t.closePath(),t.stroke()}const LW=typeof Path2D=="function";function $W(t,e,r,n){LW&&!e.options.segment?BW(t,e,r,n):kW(t,e,r,n)}class Is extends es{constructor(e){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,e&&Object.assign(this,e)}updateControlPoints(e,r){const n=this.options;if((n.tension||n.cubicInterpolationMode==="monotone")&&!n.stepped&&!this._pointsUpdated){const i=n.spanGaps?this._loop:this._fullLoop;PU(this._points,n,e,i,r),this._pointsUpdated=!0}}set points(e){this._points=e,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=GU(this,this.options.segment))}first(){const e=this.segments,r=this.points;return e.length&&r[e[0].start]}last(){const e=this.segments,r=this.points,n=e.length;return n&&r[e[n-1].end]}interpolate(e,r){const n=this.options,i=e[r],a=this.points,s=fO(this,{property:r,start:i,end:i});if(!s.length)return;const o=[],u=IW(n);let l,c;for(l=0,c=s.length;le!=="borderDash"&&e!=="fill"});function jA(t,e,r,n){const i=t.options,{[r]:a}=t.getProps([r],n);return Math.abs(e-a)t.replace("rgb(","rgba(").replace(")",", 0.5)"));function PO(t){return yb[t%yb.length]}function RO(t){return GA[t%GA.length]}function VW(t,e){return t.borderColor=PO(e),t.backgroundColor=RO(e),++e}function YW(t,e){return t.backgroundColor=t.data.map(()=>PO(e++)),e}function jW(t,e){return t.backgroundColor=t.data.map(()=>RO(e++)),e}function GW(t){let e=0;return(r,n)=>{const i=t.getDatasetMeta(n).controller;i instanceof Oo?e=YW(r,e):i instanceof Xl?e=jW(r,e):i&&(e=VW(r,e))}}function XA(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return!0;return!1}function XW(t){return t&&(t.borderColor||t.backgroundColor)}var IO={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,r){if(!r.enabled)return;const{data:{datasets:n},options:i}=t.config,{elements:a}=i;if(!r.forceOverride&&(XA(n)||XW(i)||a&&XA(a)))return;const s=GW(t);n.forEach(s)}};function ZW(t,e,r,n,i){const a=i.samples||n;if(a>=r)return t.slice(e,e+r);const s=[],o=(r-2)/(a-2);let u=0;const l=e+r-1;let c=e,f,h,p,g,m;for(s[u++]=t[c],f=0;fp&&(p=g,h=t[S],m=S);s[u++]=h,c=m}return s[u++]=t[l],s}function KW(t,e,r,n){let i=0,a=0,s,o,u,l,c,f,h,p,g,m;const b=[],y=e+r-1,S=t[e].x,_=t[y].x-S;for(s=e;sm&&(m=l,h=s),i=(a*i+o.x)/++a;else{const w=s-1;if(!or(f)&&!or(h)){const C=Math.min(f,h),E=Math.max(f,h);C!==p&&C!==w&&b.push({...t[C],x:i}),E!==p&&E!==w&&b.push({...t[E],x:i})}s>0&&w!==p&&b.push(t[w]),b.push(o),c=A,a=0,g=m=l,f=h=p=s}}return b}function BO(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,writable:!0,value:e})}}function ZA(t){t.data.datasets.forEach(e=>{BO(e)})}function JW(t,e){const r=e.length;let n=0,i;const{iScale:a}=t,{min:s,max:o,minDefined:u,maxDefined:l}=a.getUserBounds();return u&&(n=wn(Ps(e,a.axis,s).lo,0,r-1)),l?i=wn(Ps(e,a.axis,o).hi+1,n,r)-n:i=r-n,{start:n,count:i}}var kO={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,r)=>{if(!r.enabled){ZA(t);return}const n=t.width;t.data.datasets.forEach((i,a)=>{const{_data:s,indexAxis:o}=i,u=t.getDatasetMeta(a),l=s||i.data;if(Kf([o,t.options.indexAxis])==="y"||!u.controller.supportsDecimation)return;const c=t.scales[u.xAxisID];if(c.type!=="linear"&&c.type!=="time"||t.options.parsing)return;let{start:f,count:h}=JW(u,l);const p=r.threshold||4*n;if(h<=p){BO(i);return}or(s)&&(i._data=l,delete i.data,Object.defineProperty(i,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(m){this._data=m}}));let g;switch(r.algorithm){case"lttb":g=ZW(l,f,h,n,r);break;case"min-max":g=KW(l,f,h,n);break;default:throw new Error(`Unsupported decimation algorithm '${r.algorithm}'`)}i._decimated=g})},destroy(t){ZA(t)}};function QW(t,e,r){const n=t.segments,i=t.points,a=e.points,s=[];for(const o of n){let{start:u,end:l}=o;l=W1(u,l,i);const c=bb(r,i[u],i[l],o.loop);if(!e.segments){s.push({source:o,target:c,start:i[u],end:i[l]});continue}const f=fO(e,c);for(const h of f){const p=bb(r,a[h.start],a[h.end],h.loop),g=cO(o,i,p);for(const m of g)s.push({source:m,target:h,start:{[r]:KA(c,p,"start",Math.max)},end:{[r]:KA(c,p,"end",Math.min)}})}}return s}function bb(t,e,r,n){if(n)return;let i=e[t],a=r[t];return t==="angle"&&(i=Oi(i),a=Oi(a)),{property:t,start:i,end:a}}function eV(t,e){const{x:r=null,y:n=null}=t||{},i=e.points,a=[];return e.segments.forEach(({start:s,end:o})=>{o=W1(s,o,i);const u=i[s],l=i[o];n!==null?(a.push({x:u.x,y:n}),a.push({x:l.x,y:n})):r!==null&&(a.push({x:r,y:u.y}),a.push({x:r,y:l.y}))}),a}function W1(t,e,r){for(;e>t;e--){const n=r[e];if(!isNaN(n.x)&&!isNaN(n.y))break}return e}function KA(t,e,r,n){return t&&e?n(t[r],e[r]):t?t[r]:e?e[r]:0}function LO(t,e){let r=[],n=!1;return Or(t)?(n=!0,r=t):r=eV(t,e),r.length?new Is({points:r,options:{tension:0},_loop:n,_fullLoop:n}):null}function JA(t){return t&&t.fill!==!1}function tV(t,e,r){let i=t[e].fill;const a=[e];let s;if(!r)return i;for(;i!==!1&&a.indexOf(i)===-1;){if(!Vr(i))return i;if(s=t[i],!s)return!1;if(s.visible)return i;a.push(i),i=s.fill}return!1}function rV(t,e,r){const n=sV(t);if(Gt(n))return isNaN(n.value)?!1:n;let i=parseFloat(n);return Vr(i)&&Math.floor(i)===i?nV(n[0],e,i,r):["origin","start","end","stack","shape"].indexOf(n)>=0&&n}function nV(t,e,r,n){return(t==="-"||t==="+")&&(r=e+r),r===e||r<0||r>=n?!1:r}function iV(t,e){let r=null;return t==="start"?r=e.bottom:t==="end"?r=e.top:Gt(t)?r=e.getPixelForValue(t.value):e.getBasePixel&&(r=e.getBasePixel()),r}function aV(t,e,r){let n;return t==="start"?n=r:t==="end"?n=e.options.reverse?e.min:e.max:Gt(t)?n=t.value:n=e.getBaseValue(),n}function sV(t){const e=t.options,r=e.fill;let n=Rt(r&&r.target,r);return n===void 0&&(n=!!e.backgroundColor),n===!1||n===null?!1:n===!0?"origin":n}function oV(t){const{scale:e,index:r,line:n}=t,i=[],a=n.segments,s=n.points,o=uV(e,r);o.push(LO({x:null,y:e.bottom},n));for(let u=0;u=0;--s){const o=i[s].$filler;o&&(o.line.updateControlPoints(a,o.axis),n&&o.fill&&Ty(t.ctx,o,a))}},beforeDatasetsDraw(t,e,r){if(r.drawTime!=="beforeDatasetsDraw")return;const n=t.getSortedVisibleDatasetMetas();for(let i=n.length-1;i>=0;--i){const a=n[i].$filler;JA(a)&&Ty(t.ctx,a,t.chartArea)}},beforeDatasetDraw(t,e,r){const n=e.meta.$filler;!JA(n)||r.drawTime!=="beforeDatasetDraw"||Ty(t.ctx,n,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const rD=(t,e)=>{let{boxHeight:r=e,boxWidth:n=e}=t;return t.usePointStyle&&(r=Math.min(r,e),n=t.pointStyleWidth||Math.min(n,e)),{boxWidth:n,boxHeight:r,itemHeight:Math.max(e,r)}},yV=(t,e)=>t!==null&&e!==null&&t.datasetIndex===e.datasetIndex&&t.index===e.index;class nD extends es{constructor(e){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,r,n){this.maxWidth=e,this.maxHeight=r,this._margins=n,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const e=this.options.labels||{};let r=Cr(e.generateLabels,[this.chart],this)||[];e.filter&&(r=r.filter(n=>e.filter(n,this.chart.data))),e.sort&&(r=r.sort((n,i)=>e.sort(n,i,this.chart.data))),this.options.reverse&&r.reverse(),this.legendItems=r}fit(){const{options:e,ctx:r}=this;if(!e.display){this.width=this.height=0;return}const n=e.labels,i=pn(n.font),a=i.size,s=this._computeTitleHeight(),{boxWidth:o,itemHeight:u}=rD(n,a);let l,c;r.font=i.string,this.isHorizontal()?(l=this.maxWidth,c=this._fitRows(s,a,o,u)+10):(c=this.maxHeight,l=this._fitCols(s,i,o,u)+10),this.width=Math.min(l,e.maxWidth||this.maxWidth),this.height=Math.min(c,e.maxHeight||this.maxHeight)}_fitRows(e,r,n,i){const{ctx:a,maxWidth:s,options:{labels:{padding:o}}}=this,u=this.legendHitBoxes=[],l=this.lineWidths=[0],c=i+o;let f=e;a.textAlign="left",a.textBaseline="middle";let h=-1,p=-c;return this.legendItems.forEach((g,m)=>{const b=n+r/2+a.measureText(g.text).width;(m===0||l[l.length-1]+b+2*o>s)&&(f+=c,l[l.length-(m>0?0:1)]=0,p+=c,h++),u[m]={left:0,top:p,row:h,width:b,height:i},l[l.length-1]+=b+o}),f}_fitCols(e,r,n,i){const{ctx:a,maxHeight:s,options:{labels:{padding:o}}}=this,u=this.legendHitBoxes=[],l=this.columnSizes=[],c=s-e;let f=o,h=0,p=0,g=0,m=0;return this.legendItems.forEach((b,y)=>{const{itemWidth:S,itemHeight:x}=bV(n,r,a,b,i);y>0&&p+x+2*o>c&&(f+=h+o,l.push({width:h,height:p}),g+=h+o,m++,h=p=0),u[y]={left:g,top:p,col:m,width:S,height:x},h=Math.max(h,S),p+=x+o}),f+=h,l.push({width:h,height:p}),f}adjustHitBoxes(){if(!this.options.display)return;const e=this._computeTitleHeight(),{legendHitBoxes:r,options:{align:n,labels:{padding:i},rtl:a}}=this,s=Gl(a,this.left,this.width);if(this.isHorizontal()){let o=0,u=$n(n,this.left+i,this.right-this.lineWidths[o]);for(const l of r)o!==l.row&&(o=l.row,u=$n(n,this.left+i,this.right-this.lineWidths[o])),l.top+=this.top+e+i,l.left=s.leftForLtr(s.x(u),l.width),u+=l.width+i}else{let o=0,u=$n(n,this.top+e+i,this.bottom-this.columnSizes[o].height);for(const l of r)l.col!==o&&(o=l.col,u=$n(n,this.top+e+i,this.bottom-this.columnSizes[o].height)),l.top=u,l.left+=this.left+i,l.left=s.leftForLtr(s.x(l.left),l.width),u+=l.height+i}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){const e=this.ctx;Kv(e,this),this._draw(),Jv(e)}}_draw(){const{options:e,columnSizes:r,lineWidths:n,ctx:i}=this,{align:a,labels:s}=e,o=qr.color,u=Gl(e.rtl,this.left,this.width),l=pn(s.font),{padding:c}=s,f=l.size,h=f/2;let p;this.drawTitle(),i.textAlign=u.textAlign("left"),i.textBaseline="middle",i.lineWidth=.5,i.font=l.string;const{boxWidth:g,boxHeight:m,itemHeight:b}=rD(s,f),y=function(w,C,E){if(isNaN(g)||g<=0||isNaN(m)||m<0)return;i.save();const N=Rt(E.lineWidth,1);if(i.fillStyle=Rt(E.fillStyle,o),i.lineCap=Rt(E.lineCap,"butt"),i.lineDashOffset=Rt(E.lineDashOffset,0),i.lineJoin=Rt(E.lineJoin,"miter"),i.lineWidth=N,i.strokeStyle=Rt(E.strokeStyle,o),i.setLineDash(Rt(E.lineDash,[])),s.usePointStyle){const M={radius:m*Math.SQRT2/2,pointStyle:E.pointStyle,rotation:E.rotation,borderWidth:N},O=u.xPlus(w,g/2),F=C+h;QT(i,M,O,F,s.pointStyleWidth&&g)}else{const M=C+Math.max((f-m)/2,0),O=u.leftForLtr(w,g),F=Pu(E.borderRadius);i.beginPath(),Object.values(F).some(q=>q!==0)?Dh(i,{x:O,y:M,w:g,h:m,radius:F}):i.rect(O,M,g,m),i.fill(),N!==0&&i.stroke()}i.restore()},S=function(w,C,E){zu(i,E.text,w,C+b/2,l,{strikethrough:E.hidden,textAlign:u.textAlign(E.textAlign)})},x=this.isHorizontal(),_=this._computeTitleHeight();x?p={x:$n(a,this.left+c,this.right-n[0]),y:this.top+c+_,line:0}:p={x:this.left+c,y:$n(a,this.top+_+c,this.bottom-r[0].height),line:0},oO(this.ctx,e.textDirection);const A=b+c;this.legendItems.forEach((w,C)=>{i.strokeStyle=w.fontColor,i.fillStyle=w.fontColor;const E=i.measureText(w.text).width,N=u.textAlign(w.textAlign||(w.textAlign=s.textAlign)),M=g+h+E;let O=p.x,F=p.y;u.setWidth(this.width),x?C>0&&O+M+c>this.right&&(F=p.y+=A,p.line++,O=p.x=$n(a,this.left+c,this.right-n[p.line])):C>0&&F+A>this.bottom&&(O=p.x=O+r[p.line].width+c,p.line++,F=p.y=$n(a,this.top+_+c,this.bottom-r[p.line].height));const q=u.x(O);if(y(q,F,w),O=Kq(N,O+g+h,x?O+M:this.right,e.rtl),S(u.x(O),F,w),x)p.x+=M+c;else if(typeof w.text!="string"){const V=l.lineHeight;p.y+=qO(w,V)+c}else p.y+=A}),uO(this.ctx,e.textDirection)}drawTitle(){const e=this.options,r=e.title,n=pn(r.font),i=Yn(r.padding);if(!r.display)return;const a=Gl(e.rtl,this.left,this.width),s=this.ctx,o=r.position,u=n.size/2,l=i.top+u;let c,f=this.left,h=this.width;if(this.isHorizontal())h=Math.max(...this.lineWidths),c=this.top+l,f=$n(e.align,f,this.right-h);else{const g=this.columnSizes.reduce((m,b)=>Math.max(m,b.height),0);c=l+$n(e.align,this.top,this.bottom-g-e.labels.padding-this._computeTitleHeight())}const p=$n(o,f,f+h);s.textAlign=a.textAlign(P1(o)),s.textBaseline="middle",s.strokeStyle=r.color,s.fillStyle=r.color,s.font=n.string,zu(s,r.text,p,c,n)}_computeTitleHeight(){const e=this.options.title,r=pn(e.font),n=Yn(e.padding);return e.display?r.lineHeight+n.height:0}_getLegendItemAt(e,r){let n,i,a;if(Fs(e,this.left,this.right)&&Fs(r,this.top,this.bottom)){for(a=this.legendHitBoxes,n=0;na.length>s.length?a:s)),e+r.size/2+n.measureText(i).width}function wV(t,e,r){let n=t;return typeof e.text!="string"&&(n=qO(e,r)),n}function qO(t,e){const r=t.text?t.text.length:0;return e*r}function SV(t,e){return!!((t==="mousemove"||t==="mouseout")&&(e.onHover||e.onLeave)||e.onClick&&(t==="click"||t==="mouseup"))}var UO={id:"legend",_element:nD,start(t,e,r){const n=t.legend=new nD({ctx:t.ctx,options:r,chart:t});Mn.configure(t,n,r),Mn.addBox(t,n)},stop(t){Mn.removeBox(t,t.legend),delete t.legend},beforeUpdate(t,e,r){const n=t.legend;Mn.configure(t,n,r),n.options=r},afterUpdate(t){const e=t.legend;e.buildLabels(),e.adjustHitBoxes()},afterEvent(t,e){e.replay||t.legend.handleEvent(e.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(t,e,r){const n=e.datasetIndex,i=r.chart;i.isDatasetVisible(n)?(i.hide(n),e.hidden=!0):(i.show(n),e.hidden=!1)},onHover:null,onLeave:null,labels:{color:t=>t.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:r,pointStyle:n,textAlign:i,color:a,useBorderRadius:s,borderRadius:o}}=t.legend.options;return t._getSortedDatasetMetas().map(u=>{const l=u.controller.getStyle(r?0:void 0),c=Yn(l.borderWidth);return{text:e[u.index].label,fillStyle:l.backgroundColor,fontColor:a,hidden:!u.visible,lineCap:l.borderCapStyle,lineDash:l.borderDash,lineDashOffset:l.borderDashOffset,lineJoin:l.borderJoinStyle,lineWidth:(c.width+c.height)/4,strokeStyle:l.borderColor,pointStyle:n||l.pointStyle,rotation:l.rotation,textAlign:i||l.textAlign,borderRadius:s&&(o||l.borderRadius),datasetIndex:u.index}},this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class V1 extends es{constructor(e){super(),this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,r){const n=this.options;if(this.left=0,this.top=0,!n.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=e,this.height=this.bottom=r;const i=Or(n.text)?n.text.length:1;this._padding=Yn(n.padding);const a=i*pn(n.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=a:this.width=a}isHorizontal(){const e=this.options.position;return e==="top"||e==="bottom"}_drawArgs(e){const{top:r,left:n,bottom:i,right:a,options:s}=this,o=s.align;let u=0,l,c,f;return this.isHorizontal()?(c=$n(o,n,a),f=r+e,l=a-n):(s.position==="left"?(c=n+e,f=$n(o,i,r),u=Pr*-.5):(c=a-e,f=$n(o,r,i),u=Pr*.5),l=i-r),{titleX:c,titleY:f,maxWidth:l,rotation:u}}draw(){const e=this.ctx,r=this.options;if(!r.display)return;const n=pn(r.font),a=n.lineHeight/2+this._padding.top,{titleX:s,titleY:o,maxWidth:u,rotation:l}=this._drawArgs(a);zu(e,r.text,0,0,n,{color:r.color,maxWidth:u,rotation:l,textAlign:P1(r.align),textBaseline:"middle",translation:[s,o]})}}function _V(t,e){const r=new V1({ctx:t.ctx,options:e,chart:t});Mn.configure(t,r,e),Mn.addBox(t,r),t.titleBlock=r}var HO={id:"title",_element:V1,start(t,e,r){_V(t,r)},stop(t){const e=t.titleBlock;Mn.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,r){const n=t.titleBlock;Mn.configure(t,n,r),n.options=r},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Vp=new WeakMap;var WO={id:"subtitle",start(t,e,r){const n=new V1({ctx:t.ctx,options:r,chart:t});Mn.configure(t,n,r),Mn.addBox(t,n),Vp.set(t,n)},stop(t){Mn.removeBox(t,Vp.get(t)),Vp.delete(t)},beforeUpdate(t,e,r){const n=Vp.get(t);Mn.configure(t,n,r),n.options=r},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Qf={average(t){if(!t.length)return!1;let e,r,n=0,i=0,a=0;for(e=0,r=t.length;eo({chart:e,initial:r.initial,numSteps:s,currentStep:Math.min(n-r.start,s)}))}_refresh(){this._request||(this._running=!0,this._request=QT.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(e=Date.now()){let r=0;this._charts.forEach((n,i)=>{if(!n.running||!n.items.length)return;const a=n.items;let s=a.length-1,o=!1,u;for(;s>=0;--s)u=a[s],u._active?(u._total>n.duration&&(n.duration=u._total),u.tick(e),o=!0):(a[s]=a[a.length-1],a.pop());o&&(i.draw(),this._notify(i,n,e,"progress")),a.length||(n.running=!1,this._notify(i,n,e,"complete"),n.initial=!1),r+=a.length}),this._lastDate=e,r===0&&(this._running=!1)}_getAnims(e){const r=this._charts;let n=r.get(e);return n||(n={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},r.set(e,n)),n}listen(e,r,n){this._getAnims(e).listeners[r].push(n)}add(e,r){!r||!r.length||this._getAnims(e).items.push(...r)}has(e){return this._getAnims(e).items.length>0}start(e){const r=this._charts.get(e);r&&(r.running=!0,r.start=Date.now(),r.duration=r.items.reduce((n,i)=>Math.max(n,i._duration),0),this._refresh())}running(e){if(!this._running)return!1;const r=this._charts.get(e);return!(!r||!r.running||!r.items.length)}stop(e){const r=this._charts.get(e);if(!r||!r.items.length)return;const n=r.items;let i=n.length-1;for(;i>=0;--i)n[i].cancel();r.items=[],this._notify(e,r,Date.now(),"complete")}remove(e){return this._charts.delete(e)}}var Ya=new hH;const wA="transparent",dH={boolean(t,e,r){return r>.5?e:t},color(t,e,r){const n=fA(t||wA),i=n.valid&&fA(e||wA);return i&&i.valid?i.mix(n,r).hexString():e},number(t,e,r){return t+(e-t)*r}};class gO{constructor(e,r,n,i){const a=r[n];i=Qf([e.to,i,a,e.from]);const s=Qf([e.from,a,i]);this._active=!0,this._fn=e.fn||dH[e.type||typeof s],this._easing=oh[e.easing]||oh.linear,this._start=Math.floor(Date.now()+(e.delay||0)),this._duration=this._total=Math.floor(e.duration),this._loop=!!e.loop,this._target=r,this._prop=n,this._from=s,this._to=i,this._promises=void 0}active(){return this._active}update(e,r,n){if(this._active){this._notify(!1);const i=this._target[this._prop],a=n-this._start,s=this._duration-a;this._start=n,this._duration=Math.floor(Math.max(s,e.duration)),this._total+=a,this._loop=!!e.loop,this._to=Qf([e.to,r,i,e.from]),this._from=Qf([e.from,i,r])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(e){const r=e-this._start,n=this._duration,i=this._prop,a=this._from,s=this._loop,o=this._to;let u;if(this._active=a!==o&&(s||r1?2-u:u,u=this._easing(Math.min(1,Math.max(0,u))),this._target[i]=this._fn(a,o,u)}wait(){const e=this._promises||(this._promises=[]);return new Promise((r,n)=>{e.push({res:r,rej:n})})}_notify(e){const r=e?"res":"rej",n=this._promises||[];for(let i=0;i{const a=e[i];if(!Gt(a))return;const s={};for(const o of r)s[o]=a[o];(Or(a.properties)&&a.properties||[i]).forEach(o=>{(o===i||!n.has(o))&&n.set(o,s)})})}_animateOptions(e,r){const n=r.options,i=mH(e,n);if(!i)return[];const a=this._createAnimations(i,n);return n.$shared&&pH(e.options.$animations,n).then(()=>{e.options=n},()=>{}),a}_createAnimations(e,r){const n=this._properties,i=[],a=e.$animations||(e.$animations={}),s=Object.keys(r),o=Date.now();let u;for(u=s.length-1;u>=0;--u){const l=s[u];if(l.charAt(0)==="$")continue;if(l==="options"){i.push(...this._animateOptions(e,r));continue}const c=r[l];let f=a[l];const h=n.get(l);if(f)if(h&&f.active()){f.update(h,c,o);continue}else f.cancel();if(!h||!h.duration){e[l]=c;continue}a[l]=f=new gO(h,e,l,c),i.push(f)}return i}update(e,r){if(this._properties.size===0){Object.assign(e,r);return}const n=this._createAnimations(e,r);if(n.length)return Ya.add(this._chart,n),!0}}function pH(t,e){const r=[],n=Object.keys(e);for(let i=0;i0||!r&&a<0)return i.index}return null}function EA(t,e){const{chart:r,_cachedMeta:n}=t,i=r._stacks||(r._stacks={}),{iScale:a,vScale:s,index:o}=n,u=a.axis,l=s.axis,c=bH(a,s,n),f=e.length;let h;for(let p=0;pr[n].axis===e).shift()}function SH(t,e){return Yo(t,{active:!1,dataset:void 0,datasetIndex:e,index:e,mode:"default",type:"dataset"})}function _H(t,e,r){return Yo(t,{active:!1,dataIndex:e,parsed:void 0,raw:void 0,element:r,index:e,mode:"default",type:"data"})}function Uf(t,e){const r=t.controller.index,n=t.vScale&&t.vScale.axis;if(n){e=e||t._parsed;for(const i of e){const a=i._stacks;if(!a||a[n]===void 0||a[n][r]===void 0)return;delete a[n][r],a[n]._visualValues!==void 0&&a[n]._visualValues[r]!==void 0&&delete a[n]._visualValues[r]}}}const Dy=t=>t==="reset"||t==="none",NA=(t,e)=>e?t:Object.assign({},t),AH=(t,e,r)=>t&&!e.hidden&&e._stacked&&{keys:yO(r,!0),values:null};class aa{constructor(e,r){this.chart=e,this._ctx=e.ctx,this.index=r,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const e=this._cachedMeta;this.configure(),this.linkScales(),e._stacked=AA(e.vScale,e),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(e){this.index!==e&&Uf(this._cachedMeta),this.index=e}linkScales(){const e=this.chart,r=this._cachedMeta,n=this.getDataset(),i=(f,h,p,g)=>f==="x"?h:f==="r"?g:p,a=r.xAxisID=Pt(n.xAxisID,Ay(e,"x")),s=r.yAxisID=Pt(n.yAxisID,Ay(e,"y")),o=r.rAxisID=Pt(n.rAxisID,Ay(e,"r")),u=r.indexAxis,l=r.iAxisID=i(u,a,s,o),c=r.vAxisID=i(u,s,a,o);r.xScale=this.getScaleForId(a),r.yScale=this.getScaleForId(s),r.rScale=this.getScaleForId(o),r.iScale=this.getScaleForId(l),r.vScale=this.getScaleForId(c)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(e){return this.chart.scales[e]}_getOtherScale(e){const r=this._cachedMeta;return e===r.iScale?r.vScale:r.iScale}reset(){this._update("reset")}_destroy(){const e=this._cachedMeta;this._data&&uA(this._data,this),e._stacked&&Uf(e)}_dataCheck(){const e=this.getDataset(),r=e.data||(e.data=[]),n=this._data;if(Gt(r))this._data=yH(r);else if(n!==r){if(n){uA(n,this);const i=this._cachedMeta;Uf(i),i._parsed=[]}r&&Object.isExtensible(r)&&cU(r,this),this._syncList=[],this._data=r}}addElements(){const e=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(e.dataset=new this.datasetElementType)}buildOrUpdateElements(e){const r=this._cachedMeta,n=this.getDataset();let i=!1;this._dataCheck();const a=r._stacked;r._stacked=AA(r.vScale,r),r.stack!==n.stack&&(i=!0,Uf(r),r.stack=n.stack),this._resyncElements(e),(i||a!==r._stacked)&&EA(this,r._parsed)}configure(){const e=this.chart.config,r=e.datasetScopeKeys(this._type),n=e.getOptionScopes(this.getDataset(),r,!0);this.options=e.createResolver(n,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(e,r){const{_cachedMeta:n,_data:i}=this,{iScale:a,_stacked:s}=n,o=a.axis;let u=e===0&&r===i.length?!0:n._sorted,l=e>0&&n._parsed[e-1],c,f,h;if(this._parsing===!1)n._parsed=i,n._sorted=!0,h=i;else{Or(i[e])?h=this.parseArrayData(n,i,e,r):Gt(i[e])?h=this.parseObjectData(n,i,e,r):h=this.parsePrimitiveData(n,i,e,r);const p=()=>f[o]===null||l&&f[o]m||f=0;--h)if(!g()){this.updateRangeFromParsed(l,e,p,u);break}}return l}getAllParsedValues(e){const r=this._cachedMeta._parsed,n=[];let i,a,s;for(i=0,a=r.length;i=0&&ethis.getContext(n,i,r),m=l.resolveNamedOptions(h,p,g,f);return m.$shared&&(m.$shared=u,a[s]=Object.freeze(NA(m,u))),m}_resolveAnimations(e,r,n){const i=this.chart,a=this._cachedDataOpts,s=`animation-${r}`,o=a[s];if(o)return o;let u;if(i.options.animation!==!1){const c=this.chart.config,f=c.datasetAnimationScopeKeys(this._type,r),h=c.getOptionScopes(this.getDataset(),f);u=c.createResolver(h,this.getContext(e,n,r))}const l=new U1(i,u&&u.animations);return u&&u._cacheable&&(a[s]=Object.freeze(l)),l}getSharedOptions(e){if(e.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},e))}includeOptions(e,r){return!r||Dy(e)||this.chart._animationsDisabled}_getSharedOptions(e,r){const n=this.resolveDataElementOptions(e,r),i=this._sharedOptions,a=this.getSharedOptions(n),s=this.includeOptions(r,a)||a!==i;return this.updateSharedOptions(a,r,n),{sharedOptions:a,includeOptions:s}}updateElement(e,r,n,i){Dy(i)?Object.assign(e,n):this._resolveAnimations(r,i).update(e,n)}updateSharedOptions(e,r,n){e&&!Dy(r)&&this._resolveAnimations(void 0,r).update(e,n)}_setStyle(e,r,n,i){e.active=i;const a=this.getStyle(r,i);this._resolveAnimations(r,n,i).update(e,{options:!i&&this.getSharedOptions(a)||a})}removeHoverStyle(e,r,n){this._setStyle(e,n,"active",!1)}setHoverStyle(e,r,n){this._setStyle(e,n,"active",!0)}_removeDatasetHoverStyle(){const e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,"active",!1)}_setDatasetHoverStyle(){const e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,"active",!0)}_resyncElements(e){const r=this._data,n=this._cachedMeta.data;for(const[o,u,l]of this._syncList)this[o](u,l);this._syncList=[];const i=n.length,a=r.length,s=Math.min(a,i);s&&this.parse(0,s),a>i?this._insertElements(i,a-i,e):a{for(l.length+=r,o=l.length-1;o>=s;o--)l[o]=l[o-r]};for(u(a),o=e;oi-a))}return t._cache.$bar}function EH(t){const e=t.iScale,r=DH(e,t.type);let n=e._length,i,a,s,o;const u=()=>{s===32767||s===-32768||(_h(o)&&(n=Math.min(n,Math.abs(s-o)||n)),o=s)};for(i=0,a=r.length;i0?i[t-1]:null,o=tMath.abs(o)&&(u=o,l=s),e[r.axis]=l,e._custom={barStart:u,barEnd:l,start:i,end:a,min:s,max:o}}function bO(t,e,r,n){return Or(t)?MH(t,e,r,n):e[r.axis]=r.parse(t,n),e}function CA(t,e,r,n){const i=t.iScale,a=t.vScale,s=i.getLabels(),o=i===a,u=[];let l,c,f,h;for(l=r,c=r+n;l=r?1:-1)}function OH(t){let e,r,n,i,a;return t.horizontal?(e=t.base>t.x,r="left",n="right"):(e=t.baseu.controller.options.grouped),a=n.options.stacked,s=[],o=u=>{const l=u.controller.getParsed(r),c=l&&l[u.vScale.axis];if(or(c)||isNaN(c))return!0};for(const u of i)if(!(r!==void 0&&o(u))&&((a===!1||s.indexOf(u.stack)===-1||a===void 0&&u.stack===void 0)&&s.push(u.stack),u.index===e))break;return s.length||s.push(void 0),s}_getStackCount(e){return this._getStacks(void 0,e).length}_getStackIndex(e,r,n){const i=this._getStacks(e,n),a=r!==void 0?i.indexOf(r):-1;return a===-1?i.length-1:a}_getRuler(){const e=this.options,r=this._cachedMeta,n=r.iScale,i=[];let a,s;for(a=0,s=r.data.length;a=0;--n)r=Math.max(r,e[n].size(this.resolveDataElementOptions(n))/2);return r>0&&r}getLabelAndValue(e){const r=this._cachedMeta,n=this.chart.data.labels||[],{xScale:i,yScale:a}=r,s=this.getParsed(e),o=i.getLabelForValue(s.x),u=a.getLabelForValue(s.y),l=s._custom;return{label:n[e]||"",value:"("+o+", "+u+(l?", "+l:"")+")"}}update(e){const r=this._cachedMeta.data;this.updateElements(r,0,r.length,e)}updateElements(e,r,n,i){const a=i==="reset",{iScale:s,vScale:o}=this._cachedMeta,{sharedOptions:u,includeOptions:l}=this._getSharedOptions(r,i),c=s.axis,f=o.axis;for(let h=r;hAh(x,o,u,!0)?1:Math.max(_,_*r,A,A*r),g=(x,_,A)=>Ah(x,o,u,!0)?-1:Math.min(_,_*r,A,A*r),m=p(0,l,f),b=p(en,c,h),y=g(Rr,l,f),S=g(Rr+en,c,h);n=(m-y)/2,i=(b-S)/2,a=-(m+y)/2,s=-(b+S)/2}return{ratioX:n,ratioY:i,offsetX:a,offsetY:s}}class Oo extends aa{constructor(e,r){super(e,r),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(e,r){const n=this.getDataset().data,i=this._cachedMeta;if(this._parsing===!1)i._parsed=n;else{let a=u=>+n[u];if(Gt(n[e])){const{key:u="value"}=this._parsing;a=l=>+zo(n[l],u)}let s,o;for(s=e,o=e+r;s0&&!isNaN(e)?Fr*(Math.abs(e)/r):0}getLabelAndValue(e){const r=this._cachedMeta,n=this.chart,i=n.data.labels||[],a=Kh(r._parsed[e],n.options.locale);return{label:i[e]||"",value:a}}getMaxBorderWidth(e){let r=0;const n=this.chart;let i,a,s,o,u;if(!e){for(i=0,a=n.data.datasets.length;ie!=="spacing",_indexable:e=>e!=="spacing"&&!e.startsWith("borderDash")&&!e.startsWith("hoverBorderDash")}),je(Oo,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){const r=e.data;if(r.labels.length&&r.datasets.length){const{labels:{pointStyle:n,color:i}}=e.legend.options;return r.labels.map((a,s)=>{const u=e.getDatasetMeta(0).controller.getStyle(s);return{text:a,fillStyle:u.backgroundColor,strokeStyle:u.borderColor,fontColor:i,lineWidth:u.borderWidth,pointStyle:n,hidden:!e.getDataVisibility(s),index:s}})}return[]}},onClick(e,r,n){n.chart.toggleDataVisibility(r.index),n.chart.update()}}}});class fh extends aa{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(e){const r=this._cachedMeta,{dataset:n,data:i=[],_dataset:a}=r,s=this.chart._animationsDisabled;let{start:o,count:u}=tO(r,i,s);this._drawStart=o,this._drawCount=u,rO(r)&&(o=0,u=i.length),n._chart=this.chart,n._datasetIndex=this.index,n._decimated=!!a._decimated,n.points=i;const l=this.resolveDatasetElementOptions(e);this.options.showLine||(l.borderWidth=0),l.segment=this.options.segment,this.updateElement(n,void 0,{animated:!s,options:l},e),this.updateElements(i,o,u,e)}updateElements(e,r,n,i){const a=i==="reset",{iScale:s,vScale:o,_stacked:u,_dataset:l}=this._cachedMeta,{sharedOptions:c,includeOptions:f}=this._getSharedOptions(r,i),h=s.axis,p=o.axis,{spanGaps:g,segment:m}=this.options,b=sc(g)?g:Number.POSITIVE_INFINITY,y=this.chart._animationsDisabled||a||i==="none",S=r+n,x=e.length;let _=r>0&&this.getParsed(r-1);for(let A=0;A=S){C.skip=!0;continue}const N=this.getParsed(A),E=or(N[p]),M=C[h]=s.getPixelForValue(N[h],A),O=C[p]=a||E?o.getBasePixel():o.getPixelForValue(u?this.applyStack(o,N,u):N[p],A);C.skip=isNaN(M)||isNaN(O)||E,C.stop=A>0&&Math.abs(N[h]-_[h])>b,m&&(C.parsed=N,C.raw=l.data[A]),f&&(C.options=c||this.resolveDataElementOptions(A,w.active?"active":i)),y||this.updateElement(w,A,C,i),_=N}}getMaxOverflow(){const e=this._cachedMeta,r=e.dataset,n=r.options&&r.options.borderWidth||0,i=e.data||[];if(!i.length)return n;const a=i[0].size(this.resolveDataElementOptions(0)),s=i[i.length-1].size(this.resolveDataElementOptions(i.length-1));return Math.max(n,a,s)/2}draw(){const e=this._cachedMeta;e.dataset.updateControlPoints(this.chart.chartArea,e.iScale.axis),super.draw()}}je(fh,"id","line"),je(fh,"defaults",{datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1}),je(fh,"overrides",{scales:{_index_:{type:"category"},_value_:{type:"linear"}}});class Kl extends aa{constructor(e,r){super(e,r),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(e){const r=this._cachedMeta,n=this.chart,i=n.data.labels||[],a=Kh(r._parsed[e].r,n.options.locale);return{label:i[e]||"",value:a}}parseObjectData(e,r,n,i){return cO.bind(this)(e,r,n,i)}update(e){const r=this._cachedMeta.data;this._updateRadius(),this.updateElements(r,0,r.length,e)}getMinMax(){const e=this._cachedMeta,r={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return e.data.forEach((n,i)=>{const a=this.getParsed(i).r;!isNaN(a)&&this.chart.getDataVisibility(i)&&(ar.max&&(r.max=a))}),r}_updateRadius(){const e=this.chart,r=e.chartArea,n=e.options,i=Math.min(r.right-r.left,r.bottom-r.top),a=Math.max(i/2,0),s=Math.max(n.cutoutPercentage?a/100*n.cutoutPercentage:1,0),o=(a-s)/e.getVisibleDatasetCount();this.outerRadius=a-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(e,r,n,i){const a=i==="reset",s=this.chart,u=s.options.animation,l=this._cachedMeta.rScale,c=l.xCenter,f=l.yCenter,h=l.getIndexAngle(0)-.5*Rr;let p=h,g;const m=360/this.countVisibleElements();for(g=0;g{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&r++}),r}_computeAngle(e,r,n){return this.chart.getDataVisibility(e)?Sa(this.resolveDataElementOptions(e,r).angle||n):0}}je(Kl,"id","polarArea"),je(Kl,"defaults",{dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0}),je(Kl,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){const r=e.data;if(r.labels.length&&r.datasets.length){const{labels:{pointStyle:n,color:i}}=e.legend.options;return r.labels.map((a,s)=>{const u=e.getDatasetMeta(0).controller.getStyle(s);return{text:a,fillStyle:u.backgroundColor,strokeStyle:u.borderColor,fontColor:i,lineWidth:u.borderWidth,pointStyle:n,hidden:!e.getDataVisibility(s),index:s}})}return[]}},onClick(e,r,n){n.chart.toggleDataVisibility(r.index),n.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}});class jm extends Oo{}je(jm,"id","pie"),je(jm,"defaults",{cutout:0,rotation:0,circumference:360,radius:"100%"});class hh extends aa{getLabelAndValue(e){const r=this._cachedMeta.vScale,n=this.getParsed(e);return{label:r.getLabels()[e],value:""+r.getLabelForValue(n[r.axis])}}parseObjectData(e,r,n,i){return cO.bind(this)(e,r,n,i)}update(e){const r=this._cachedMeta,n=r.dataset,i=r.data||[],a=r.iScale.getLabels();if(n.points=i,e!=="resize"){const s=this.resolveDatasetElementOptions(e);this.options.showLine||(s.borderWidth=0);const o={_loop:!0,_fullLoop:a.length===i.length,options:s};this.updateElement(n,void 0,o,e)}this.updateElements(i,0,i.length,e)}updateElements(e,r,n,i){const a=this._cachedMeta.rScale,s=i==="reset";for(let o=r;o0&&this.getParsed(r-1);for(let _=r;_0&&Math.abs(w[p]-x[p])>y,b&&(C.parsed=w,C.raw=l.data[_]),h&&(C.options=f||this.resolveDataElementOptions(_,A.active?"active":i)),S||this.updateElement(A,_,C,i),x=w}this.updateSharedOptions(f,i,c)}getMaxOverflow(){const e=this._cachedMeta,r=e.data||[];if(!this.options.showLine){let o=0;for(let u=r.length-1;u>=0;--u)o=Math.max(o,r[u].size(this.resolveDataElementOptions(u))/2);return o>0&&o}const n=e.dataset,i=n.options&&n.options.borderWidth||0;if(!r.length)return i;const a=r[0].size(this.resolveDataElementOptions(0)),s=r[r.length-1].size(this.resolveDataElementOptions(r.length-1));return Math.max(i,a,s)/2}}je(dh,"id","scatter"),je(dh,"defaults",{datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1}),je(dh,"overrides",{interaction:{mode:"point"},scales:{x:{type:"linear"},y:{type:"linear"}}});var xO=Object.freeze({__proto__:null,BarController:lh,BubbleController:ch,DoughnutController:Oo,LineController:fh,PieController:jm,PolarAreaController:Kl,RadarController:hh,ScatterController:dh});function wu(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class H1{constructor(e){je(this,"options");this.options=e||{}}static override(e){Object.assign(H1.prototype,e)}init(){}formats(){return wu()}parse(){return wu()}format(){return wu()}add(){return wu()}diff(){return wu()}startOf(){return wu()}endOf(){return wu()}}var wO={_date:H1};function BH(t,e,r,n){const{controller:i,data:a,_sorted:s}=t,o=i._cachedMeta.iScale;if(o&&e===o.axis&&e!=="r"&&s&&a.length){const u=o._reversePixels?uU:Rs;if(n){if(i._sharedOptions){const l=a[0],c=typeof l.getRange=="function"&&l.getRange(e);if(c){const f=u(a,e,r-c),h=u(a,e,r+c);return{lo:f.lo,hi:h.hi}}}}else return u(a,e,r)}return{lo:0,hi:a.length-1}}function Qh(t,e,r,n,i){const a=t.getSortedVisibleDatasetMetas(),s=r[e];for(let o=0,u=a.length;o{u[s](e[r],i)&&(a.push({element:u,datasetIndex:l,index:c}),o=o||u.inRange(e.x,e.y,i))}),n&&!o?[]:a}var SO={evaluateInteractionItems:Qh,modes:{index(t,e,r,n){const i=Du(e,t),a=r.axis||"x",s=r.includeInvisible||!1,o=r.intersect?Ny(t,i,a,n,s):Cy(t,i,a,!1,n,s),u=[];return o.length?(t.getSortedVisibleDatasetMetas().forEach(l=>{const c=o[0].index,f=l.data[c];f&&!f.skip&&u.push({element:f,datasetIndex:l.index,index:c})}),u):[]},dataset(t,e,r,n){const i=Du(e,t),a=r.axis||"xy",s=r.includeInvisible||!1;let o=r.intersect?Ny(t,i,a,n,s):Cy(t,i,a,!1,n,s);if(o.length>0){const u=o[0].datasetIndex,l=t.getDatasetMeta(u).data;o=[];for(let c=0;cr.pos===e)}function FA(t,e){return t.filter(r=>_O.indexOf(r.pos)===-1&&r.box.axis===e)}function Wf(t,e){return t.sort((r,n)=>{const i=e?n:r,a=e?r:n;return i.weight===a.weight?i.index-a.index:i.weight-a.weight})}function zH(t){const e=[];let r,n,i,a,s,o;for(r=0,n=(t||[]).length;rl.box.fullSize),!0),n=Wf(Hf(e,"left"),!0),i=Wf(Hf(e,"right")),a=Wf(Hf(e,"top"),!0),s=Wf(Hf(e,"bottom")),o=FA(e,"x"),u=FA(e,"y");return{fullSize:r,leftAndTop:n.concat(a),rightAndBottom:i.concat(u).concat(s).concat(o),chartArea:Hf(e,"chartArea"),vertical:n.concat(i).concat(u),horizontal:a.concat(s).concat(o)}}function RA(t,e,r,n){return Math.max(t[r],e[r])+Math.max(t[n],e[n])}function AO(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.left),t.bottom=Math.max(t.bottom,e.bottom),t.right=Math.max(t.right,e.right)}function WH(t,e,r,n){const{pos:i,box:a}=r,s=t.maxPadding;if(!Gt(i)){r.size&&(t[i]-=r.size);const f=n[r.stack]||{size:0,count:1};f.size=Math.max(f.size,r.horizontal?a.height:a.width),r.size=f.size/f.count,t[i]+=r.size}a.getPadding&&AO(s,a.getPadding());const o=Math.max(0,e.outerWidth-RA(s,t,"left","right")),u=Math.max(0,e.outerHeight-RA(s,t,"top","bottom")),l=o!==t.w,c=u!==t.h;return t.w=o,t.h=u,r.horizontal?{same:l,other:c}:{same:c,other:l}}function VH(t){const e=t.maxPadding;function r(n){const i=Math.max(e[n]-t[n],0);return t[n]+=i,i}t.y+=r("top"),t.x+=r("left"),r("right"),r("bottom")}function YH(t,e){const r=e.maxPadding;function n(i){const a={left:0,top:0,right:0,bottom:0};return i.forEach(s=>{a[s]=Math.max(e[s],r[s])}),a}return n(t?["left","right"]:["top","bottom"])}function eh(t,e,r,n){const i=[];let a,s,o,u,l,c;for(a=0,s=t.length,l=0;a{typeof m.beforeLayout=="function"&&m.beforeLayout()});const c=u.reduce((m,b)=>b.box.options&&b.box.options.display===!1?m:m+1,0)||1,f=Object.freeze({outerWidth:e,outerHeight:r,padding:i,availableWidth:a,availableHeight:s,vBoxMaxWidth:a/2/c,hBoxMaxHeight:s/2}),h=Object.assign({},i);AO(h,Yn(n));const p=Object.assign({maxPadding:h,w:a,h:s,x:i.left,y:i.top},i),g=UH(u.concat(l),f);eh(o.fullSize,p,f,g),eh(u,p,f,g),eh(l,p,f,g)&&eh(u,p,f,g),VH(p),PA(o.leftAndTop,p,f,g),p.x+=p.w,p.y+=p.h,PA(o.rightAndBottom,p,f,g),t.chartArea={left:p.left,top:p.top,right:p.left+p.w,bottom:p.top+p.h,height:p.h,width:p.w},yr(o.chartArea,m=>{const b=m.box;Object.assign(b,t.chartArea),b.update(p.w,p.h,{left:0,top:0,right:0,bottom:0})})}};class W1{acquireContext(e,r){}releaseContext(e){return!1}addEventListener(e,r,n){}removeEventListener(e,r,n){}getDevicePixelRatio(){return 1}getMaximumSize(e,r,n,i){return r=Math.max(0,r||e.width),n=n||e.height,{width:r,height:Math.max(0,i?Math.floor(r/i):n)}}isAttached(e){return!0}updateConfig(e){}}class DO extends W1{acquireContext(e){return e&&e.getContext&&e.getContext("2d")||null}updateConfig(e){e.options.animation=!1}}const Am="$chartjs",jH={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},kA=t=>t===null||t==="";function GH(t,e){const r=t.style,n=t.getAttribute("height"),i=t.getAttribute("width");if(t[Am]={initial:{height:n,width:i,style:{display:r.display,height:r.height,width:r.width}}},r.display=r.display||"block",r.boxSizing=r.boxSizing||"border-box",kA(i)){const a=gA(t,"width");a!==void 0&&(t.width=a)}if(kA(n))if(t.style.height==="")t.height=t.width/(e||2);else{const a=gA(t,"height");a!==void 0&&(t.height=a)}return t}const EO=tH?{passive:!0}:!1;function XH(t,e,r){t.addEventListener(e,r,EO)}function ZH(t,e,r){t.canvas.removeEventListener(e,r,EO)}function KH(t,e){const r=jH[t.type]||t.type,{x:n,y:i}=Du(t,e);return{type:r,chart:e,native:t,x:n!==void 0?n:null,y:i!==void 0?i:null}}function Gm(t,e){for(const r of t)if(r===e||r.contains(e))return!0}function JH(t,e,r){const n=t.canvas,i=new MutationObserver(a=>{let s=!1;for(const o of a)s=s||Gm(o.addedNodes,n),s=s&&!Gm(o.removedNodes,n);s&&r()});return i.observe(document,{childList:!0,subtree:!0}),i}function QH(t,e,r){const n=t.canvas,i=new MutationObserver(a=>{let s=!1;for(const o of a)s=s||Gm(o.removedNodes,n),s=s&&!Gm(o.addedNodes,n);s&&r()});return i.observe(document,{childList:!0,subtree:!0}),i}const Eh=new Map;let BA=0;function NO(){const t=window.devicePixelRatio;t!==BA&&(BA=t,Eh.forEach((e,r)=>{r.currentDevicePixelRatio!==t&&e()}))}function eW(t,e){Eh.size||window.addEventListener("resize",NO),Eh.set(t,e)}function tW(t){Eh.delete(t),Eh.size||window.removeEventListener("resize",NO)}function rW(t,e,r){const n=t.canvas,i=n&&q1(n);if(!i)return;const a=eO((o,u)=>{const l=i.clientWidth;r(o,u),l{const u=o[0],l=u.contentRect.width,c=u.contentRect.height;l===0&&c===0||a(l,c)});return s.observe(i),eW(t,a),s}function My(t,e,r){r&&r.disconnect(),e==="resize"&&tW(t)}function nW(t,e,r){const n=t.canvas,i=eO(a=>{t.ctx!==null&&r(KH(a,t))},t);return XH(n,e,i),i}class CO extends W1{acquireContext(e,r){const n=e&&e.getContext&&e.getContext("2d");return n&&n.canvas===e?(GH(e,r),n):null}releaseContext(e){const r=e.canvas;if(!r[Am])return!1;const n=r[Am].initial;["height","width"].forEach(a=>{const s=n[a];or(s)?r.removeAttribute(a):r.setAttribute(a,s)});const i=n.style||{};return Object.keys(i).forEach(a=>{r.style[a]=i[a]}),r.width=r.width,delete r[Am],!0}addEventListener(e,r,n){this.removeEventListener(e,r);const i=e.$proxies||(e.$proxies={}),s={attach:JH,detach:QH,resize:rW}[r]||nW;i[r]=s(e,r,n)}removeEventListener(e,r){const n=e.$proxies||(e.$proxies={}),i=n[r];if(!i)return;({attach:My,detach:My,resize:My}[r]||ZH)(e,r,i),n[r]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(e,r,n,i){return eH(e,r,n,i)}isAttached(e){const r=q1(e);return!!(r&&r.isConnected)}}function MO(t){return!z1()||typeof OffscreenCanvas<"u"&&t instanceof OffscreenCanvas?DO:CO}var xm;let es=(xm=class{constructor(){je(this,"x");je(this,"y");je(this,"active",!1);je(this,"options");je(this,"$animations")}tooltipPosition(e){const{x:r,y:n}=this.getProps(["x","y"],e);return{x:r,y:n}}hasValue(){return sc(this.x)&&sc(this.y)}getProps(e,r){const n=this.$animations;if(!r||!n)return this;const i={};return e.forEach(a=>{i[a]=n[a]&&n[a].active()?n[a]._to:this[a]}),i}},je(xm,"defaults",{}),je(xm,"defaultRoutes"),xm);function iW(t,e){const r=t.options.ticks,n=aW(t),i=Math.min(r.maxTicksLimit||n,n),a=r.major.enabled?oW(e):[],s=a.length,o=a[0],u=a[s-1],l=[];if(s>i)return uW(e,l,a,s/i),l;const c=sW(a,e,i);if(s>0){let f,h;const p=s>1?Math.round((u-o)/(s-1)):null;for(qp(e,l,c,or(p)?0:o-p,o),f=0,h=s-1;fi)return u}return Math.max(i,1)}function oW(t){const e=[];let r,n;for(r=0,n=t.length;rt==="left"?"right":t==="right"?"left":t,IA=(t,e,r)=>e==="top"||e==="left"?t[e]+r:t[e]-r,LA=(t,e)=>Math.min(e||t,t);function $A(t,e){const r=[],n=t.length/e,i=t.length;let a=0;for(;as+o)))return u}function hW(t,e){yr(t,r=>{const n=r.gc,i=n.length/2;let a;if(i>e){for(a=0;an?n:r,n=i&&r>n?r:n,{min:Mi(r,Mi(n,r)),max:Mi(n,Mi(r,n))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const e=this.chart.data;return this.options.labels||(this.isHorizontal()?e.xLabels:e.yLabels)||e.labels||[]}getLabelItems(e=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(e))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){Cr(this.options.beforeUpdate,[this])}update(e,r,n){const{beginAtZero:i,grace:a,ticks:s}=this.options,o=s.sampleSize;this.beforeUpdate(),this.maxWidth=e,this.maxHeight=r,this._margins=n=Object.assign({left:0,right:0,top:0,bottom:0},n),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+n.left+n.right:this.height+n.top+n.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=FU(this,a,i),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const u=o=a||n<=1||!this.isHorizontal()){this.labelRotation=i;return}const c=this._getLabelSizes(),f=c.widest.width,h=c.highest.height,p=wn(this.chart.width-f,0,this.maxWidth);o=e.offset?this.maxWidth/n:p/(n-1),f+6>o&&(o=p/(n-(e.offset?.5:1)),u=this.maxHeight-Vf(e.grid)-r.padding-zA(e.title,this.chart.options.font),l=Math.sqrt(f*f+h*h),s=F1(Math.min(Math.asin(wn((c.highest.height+6)/o,-1,1)),Math.asin(wn(u/l,-1,1))-Math.asin(wn(h/l,-1,1)))),s=Math.max(i,Math.min(a,s))),this.labelRotation=s}afterCalculateLabelRotation(){Cr(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){Cr(this.options.beforeFit,[this])}fit(){const e={width:0,height:0},{chart:r,options:{ticks:n,title:i,grid:a}}=this,s=this._isVisible(),o=this.isHorizontal();if(s){const u=zA(i,r.options.font);if(o?(e.width=this.maxWidth,e.height=Vf(a)+u):(e.height=this.maxHeight,e.width=Vf(a)+u),n.display&&this.ticks.length){const{first:l,last:c,widest:f,highest:h}=this._getLabelSizes(),p=n.padding*2,g=Sa(this.labelRotation),m=Math.cos(g),b=Math.sin(g);if(o){const y=n.mirror?0:b*f.width+m*h.height;e.height=Math.min(this.maxHeight,e.height+y+p)}else{const y=n.mirror?0:m*f.width+b*h.height;e.width=Math.min(this.maxWidth,e.width+y+p)}this._calculatePadding(l,c,b,m)}}this._handleMargins(),o?(this.width=this._length=r.width-this._margins.left-this._margins.right,this.height=e.height):(this.width=e.width,this.height=this._length=r.height-this._margins.top-this._margins.bottom)}_calculatePadding(e,r,n,i){const{ticks:{align:a,padding:s},position:o}=this.options,u=this.labelRotation!==0,l=o!=="top"&&this.axis==="x";if(this.isHorizontal()){const c=this.getPixelForTick(0)-this.left,f=this.right-this.getPixelForTick(this.ticks.length-1);let h=0,p=0;u?l?(h=i*e.width,p=n*r.height):(h=n*e.height,p=i*r.width):a==="start"?p=r.width:a==="end"?h=e.width:a!=="inner"&&(h=e.width/2,p=r.width/2),this.paddingLeft=Math.max((h-c+s)*this.width/(this.width-c),0),this.paddingRight=Math.max((p-f+s)*this.width/(this.width-f),0)}else{let c=r.height/2,f=e.height/2;a==="start"?(c=0,f=e.height):a==="end"&&(c=r.height,f=0),this.paddingTop=c+s,this.paddingBottom=f+s}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){Cr(this.options.afterFit,[this])}isHorizontal(){const{axis:e,position:r}=this.options;return r==="top"||r==="bottom"||e==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(e){this.beforeTickToLabelConversion(),this.generateTickLabels(e);let r,n;for(r=0,n=e.length;r({width:s[E]||0,height:o[E]||0});return{first:N(0),last:N(r-1),widest:N(w),highest:N(C),widths:s,heights:o}}getLabelForValue(e){return e}getPixelForValue(e,r){return NaN}getValueForPixel(e){}getPixelForTick(e){const r=this.ticks;return e<0||e>r.length-1?null:this.getPixelForValue(r[e].value)}getPixelForDecimal(e){this._reversePixels&&(e=1-e);const r=this._startPixel+e*this._length;return oU(this._alignToPixels?xu(this.chart,r,0):r)}getDecimalForPixel(e){const r=(e-this._startPixel)/this._length;return this._reversePixels?1-r:r}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:e,max:r}=this;return e<0&&r<0?r:e>0&&r>0?e:0}getContext(e){const r=this.ticks||[];if(e>=0&&eo*i?o/n:u/i:u*i0}_computeGridLineItems(e){const r=this.axis,n=this.chart,i=this.options,{grid:a,position:s,border:o}=i,u=a.offset,l=this.isHorizontal(),f=this.ticks.length+(u?1:0),h=Vf(a),p=[],g=o.setContext(this.getContext()),m=g.display?g.width:0,b=m/2,y=function(B){return xu(n,B,m)};let S,x,_,A,w,C,N,E,M,O,F,q;if(s==="top")S=y(this.bottom),C=this.bottom-h,E=S-b,O=y(e.top)+b,q=e.bottom;else if(s==="bottom")S=y(this.top),O=e.top,q=y(e.bottom)-b,C=S+b,E=this.top+h;else if(s==="left")S=y(this.right),w=this.right-h,N=S-b,M=y(e.left)+b,F=e.right;else if(s==="right")S=y(this.left),M=e.left,F=y(e.right)-b,w=S+b,N=this.left+h;else if(r==="x"){if(s==="center")S=y((e.top+e.bottom)/2+.5);else if(Gt(s)){const B=Object.keys(s)[0],k=s[B];S=y(this.chart.scales[B].getPixelForValue(k))}O=e.top,q=e.bottom,C=S+b,E=C+h}else if(r==="y"){if(s==="center")S=y((e.left+e.right)/2);else if(Gt(s)){const B=Object.keys(s)[0],k=s[B];S=y(this.chart.scales[B].getPixelForValue(k))}w=S-b,N=w-h,M=e.left,F=e.right}const V=Pt(i.ticks.maxTicksLimit,f),H=Math.max(1,Math.ceil(f/V));for(x=0;x0&&(ce-=de/2);break}he={left:ce,top:Se,width:de+ne.width,height:X+ne.height,color:H.backdropColor}}b.push({label:_,font:E,textOffset:F,options:{rotation:m,color:k,strokeColor:K,strokeWidth:$,textAlign:se,textBaseline:q,translation:[A,w],backdrop:he}})}return b}_getXAxisLabelAlignment(){const{position:e,ticks:r}=this.options;if(-Sa(this.labelRotation))return e==="top"?"left":"right";let i="center";return r.align==="start"?i="left":r.align==="end"?i="right":r.align==="inner"&&(i="inner"),i}_getYAxisLabelAlignment(e){const{position:r,ticks:{crossAlign:n,mirror:i,padding:a}}=this.options,s=this._getLabelSizes(),o=e+a,u=s.widest.width;let l,c;return r==="left"?i?(c=this.right+a,n==="near"?l="left":n==="center"?(l="center",c+=u/2):(l="right",c+=u)):(c=this.right-o,n==="near"?l="right":n==="center"?(l="center",c-=u/2):(l="left",c=this.left)):r==="right"?i?(c=this.left+a,n==="near"?l="right":n==="center"?(l="center",c-=u/2):(l="left",c-=u)):(c=this.left+o,n==="near"?l="left":n==="center"?(l="center",c+=u/2):(l="right",c=this.right)):l="right",{textAlign:l,x:c}}_computeLabelArea(){if(this.options.ticks.mirror)return;const e=this.chart,r=this.options.position;if(r==="left"||r==="right")return{top:0,left:this.left,bottom:e.height,right:this.right};if(r==="top"||r==="bottom")return{top:this.top,left:0,bottom:this.bottom,right:e.width}}drawBackground(){const{ctx:e,options:{backgroundColor:r},left:n,top:i,width:a,height:s}=this;r&&(e.save(),e.fillStyle=r,e.fillRect(n,i,a,s),e.restore())}getLineWidthForValue(e){const r=this.options.grid;if(!this._isVisible()||!r.display)return 0;const i=this.ticks.findIndex(a=>a.value===e);return i>=0?r.setContext(this.getContext(i)).lineWidth:0}drawGrid(e){const r=this.options.grid,n=this.ctx,i=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(e));let a,s;const o=(u,l,c)=>{!c.width||!c.color||(n.save(),n.lineWidth=c.width,n.strokeStyle=c.color,n.setLineDash(c.borderDash||[]),n.lineDashOffset=c.borderDashOffset,n.beginPath(),n.moveTo(u.x,u.y),n.lineTo(l.x,l.y),n.stroke(),n.restore())};if(r.display)for(a=0,s=i.length;a{this.draw(a)}}]:[{z:n,draw:a=>{this.drawBackground(),this.drawGrid(a),this.drawTitle()}},{z:i,draw:()=>{this.drawBorder()}},{z:r,draw:a=>{this.drawLabels(a)}}]}getMatchingVisibleMetas(e){const r=this.chart.getSortedVisibleDatasetMetas(),n=this.axis+"AxisID",i=[];let a,s;for(a=0,s=r.length;a{const n=r.split("."),i=n.pop(),a=[t].concat(n).join("."),s=e[r].split("."),o=s.pop(),u=s.join(".");qr.route(a,i,u,o)})}function bW(t){return"id"in t&&"defaults"in t}class xW{constructor(){this.controllers=new Up(aa,"datasets",!0),this.elements=new Up(es,"elements"),this.plugins=new Up(Object,"plugins"),this.scales=new Up(jo,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...e){this._each("register",e)}remove(...e){this._each("unregister",e)}addControllers(...e){this._each("register",e,this.controllers)}addElements(...e){this._each("register",e,this.elements)}addPlugins(...e){this._each("register",e,this.plugins)}addScales(...e){this._each("register",e,this.scales)}getController(e){return this._get(e,this.controllers,"controller")}getElement(e){return this._get(e,this.elements,"element")}getPlugin(e){return this._get(e,this.plugins,"plugin")}getScale(e){return this._get(e,this.scales,"scale")}removeControllers(...e){this._each("unregister",e,this.controllers)}removeElements(...e){this._each("unregister",e,this.elements)}removePlugins(...e){this._each("unregister",e,this.plugins)}removeScales(...e){this._each("unregister",e,this.scales)}_each(e,r,n){[...r].forEach(i=>{const a=n||this._getRegistryForType(i);n||a.isForType(i)||a===this.plugins&&i.id?this._exec(e,a,i):yr(i,s=>{const o=n||this._getRegistryForType(s);this._exec(e,o,s)})})}_exec(e,r,n){const i=O1(e);Cr(n["before"+i],[],n),r[e](n),Cr(n["after"+i],[],n)}_getRegistryForType(e){for(let r=0;ra.filter(o=>!s.some(u=>o.plugin.id===u.plugin.id));this._notify(i(r,n),e,"stop"),this._notify(i(n,r),e,"start")}}function SW(t){const e={},r=[],n=Object.keys(ba.plugins.items);for(let a=0;a1&&qA(t[0].toLowerCase());if(n)return n}throw new Error(`Cannot determine type of '${t}' axis. Please provide 'axis' or 'position' option.`)}function UA(t,e,r){if(r[e+"AxisID"]===t)return{axis:e}}function MW(t,e){if(e.data&&e.data.datasets){const r=e.data.datasets.filter(n=>n.xAxisID===t||n.yAxisID===t);if(r.length)return UA(t,"x",r[0])||UA(t,"y",r[0])}return{}}function TW(t,e){const r=$u[t.type]||{scales:{}},n=e.scales||{},i=gb(t.type,e),a=Object.create(null);return Object.keys(n).forEach(s=>{const o=n[s];if(!Gt(o))return console.error(`Invalid scale configuration for scale: ${s}`);if(o._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${s}`);const u=yb(s,o,MW(s,t),qr.scales[o.type]),l=NW(u,i),c=r.scales||{};a[s]=ah(Object.create(null),[{axis:u},o,c[u],c[l]])}),t.data.datasets.forEach(s=>{const o=s.type||t.type,u=s.indexAxis||gb(o,e),c=($u[o]||{}).scales||{};Object.keys(c).forEach(f=>{const h=EW(f,u),p=s[h+"AxisID"]||h;a[p]=a[p]||Object.create(null),ah(a[p],[{axis:h},n[p],c[f]])})}),Object.keys(a).forEach(s=>{const o=a[s];ah(o,[qr.scales[o.type],qr.scale])}),a}function TO(t){const e=t.options||(t.options={});e.plugins=Pt(e.plugins,{}),e.scales=TW(t,e)}function OO(t){return t=t||{},t.datasets=t.datasets||[],t.labels=t.labels||[],t}function OW(t){return t=t||{},t.data=OO(t.data),TO(t),t}const HA=new Map,FO=new Set;function Hp(t,e){let r=HA.get(t);return r||(r=e(),HA.set(t,r),FO.add(r)),r}const Yf=(t,e,r)=>{const n=zo(e,r);n!==void 0&&t.add(n)};class FW{constructor(e){this._config=OW(e),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(e){this._config.type=e}get data(){return this._config.data}set data(e){this._config.data=OO(e)}get options(){return this._config.options}set options(e){this._config.options=e}get plugins(){return this._config.plugins}update(){const e=this._config;this.clearCache(),TO(e)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(e){return Hp(e,()=>[[`datasets.${e}`,""]])}datasetAnimationScopeKeys(e,r){return Hp(`${e}.transition.${r}`,()=>[[`datasets.${e}.transitions.${r}`,`transitions.${r}`],[`datasets.${e}`,""]])}datasetElementScopeKeys(e,r){return Hp(`${e}-${r}`,()=>[[`datasets.${e}.elements.${r}`,`datasets.${e}`,`elements.${r}`,""]])}pluginScopeKeys(e){const r=e.id,n=this.type;return Hp(`${n}-plugin-${r}`,()=>[[`plugins.${r}`,...e.additionalOptionScopes||[]]])}_cachedScopes(e,r){const n=this._scopeCache;let i=n.get(e);return(!i||r)&&(i=new Map,n.set(e,i)),i}getOptionScopes(e,r,n){const{options:i,type:a}=this,s=this._cachedScopes(e,n),o=s.get(r);if(o)return o;const u=new Set;r.forEach(c=>{e&&(u.add(e),c.forEach(f=>Yf(u,e,f))),c.forEach(f=>Yf(u,i,f)),c.forEach(f=>Yf(u,$u[a]||{},f)),c.forEach(f=>Yf(u,qr,f)),c.forEach(f=>Yf(u,mb,f))});const l=Array.from(u);return l.length===0&&l.push(Object.create(null)),FO.has(r)&&s.set(r,l),l}chartOptionScopes(){const{options:e,type:r}=this;return[e,$u[r]||{},qr.datasets[r]||{},{type:r},qr,mb]}resolveNamedOptions(e,r,n,i=[""]){const a={$shared:!0},{resolver:s,subPrefixes:o}=WA(this._resolverCache,e,i);let u=s;if(PW(s,r)){a.$shared=!1,n=qo(n)?n():n;const l=this.createResolver(e,n,o);u=oc(s,n,l)}for(const l of r)a[l]=u[l];return a}createResolver(e,r,n=[""],i){const{resolver:a}=WA(this._resolverCache,e,n);return Gt(r)?oc(a,r,void 0,i):a}}function WA(t,e,r){let n=t.get(e);n||(n=new Map,t.set(e,n));const i=r.join();let a=n.get(i);return a||(a={resolver:I1(e,r),subPrefixes:r.filter(o=>!o.toLowerCase().includes("hover"))},n.set(i,a)),a}const RW=t=>Gt(t)&&Object.getOwnPropertyNames(t).some(e=>qo(t[e]));function PW(t,e){const{isScriptable:r,isIndexable:n}=sO(t);for(const i of e){const a=r(i),s=n(i),o=(s||a)&&t[i];if(a&&(qo(o)||RW(o))||s&&Or(o))return!0}return!1}var kW="4.4.1";const BW=["top","bottom","left","right","chartArea"];function VA(t,e){return t==="top"||t==="bottom"||BW.indexOf(t)===-1&&e==="x"}function YA(t,e){return function(r,n){return r[t]===n[t]?r[e]-n[e]:r[t]-n[t]}}function jA(t){const e=t.chart,r=e.options.animation;e.notifyPlugins("afterRender"),Cr(r&&r.onComplete,[t],e)}function IW(t){const e=t.chart,r=e.options.animation;Cr(r&&r.onProgress,[t],e)}function RO(t){return z1()&&typeof t=="string"?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const Dm={},GA=t=>{const e=RO(t);return Object.values(Dm).filter(r=>r.canvas===e).pop()};function LW(t,e,r){const n=Object.keys(t);for(const i of n){const a=+i;if(a>=e){const s=t[i];delete t[i],(r>0||a>e)&&(t[a+r]=s)}}}function $W(t,e,r,n){return!r||t.type==="mouseout"?null:n?e:t}function Wp(t,e,r){return t.options.clip?t[r]:e[r]}function zW(t,e){const{xScale:r,yScale:n}=t;return r&&n?{left:Wp(r,e,"left"),right:Wp(r,e,"right"),top:Wp(n,e,"top"),bottom:Wp(n,e,"bottom")}:e}class _o{static register(...e){ba.add(...e),XA()}static unregister(...e){ba.remove(...e),XA()}constructor(e,r){const n=this.config=new FW(r),i=RO(e),a=GA(i);if(a)throw new Error("Canvas is already in use. Chart with ID '"+a.id+"' must be destroyed before the canvas with ID '"+a.canvas.id+"' can be reused.");const s=n.createResolver(n.chartOptionScopes(),this.getContext());this.platform=new(n.platform||MO(i)),this.platform.updateConfig(n);const o=this.platform.acquireContext(i,s.aspectRatio),u=o&&o.canvas,l=u&&u.height,c=u&&u.width;if(this.id=Xq(),this.ctx=o,this.canvas=u,this.width=c,this.height=l,this._options=s,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new wW,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=fU(f=>this.update(f),s.resizeDelay||0),this._dataChanges=[],Dm[this.id]=this,!o||!u){console.error("Failed to create chart: can't acquire context from the given item");return}Ya.listen(this,"complete",jA),Ya.listen(this,"progress",IW),this._initialize(),this.attached&&this.update()}get aspectRatio(){const{options:{aspectRatio:e,maintainAspectRatio:r},width:n,height:i,_aspectRatio:a}=this;return or(e)?r&&a?a:i?n/i:null:e}get data(){return this.config.data}set data(e){this.config.data=e}get options(){return this._options}set options(e){this.config.options=e}get registry(){return ba}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():vA(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return dA(this.canvas,this.ctx),this}stop(){return Ya.stop(this),this}resize(e,r){Ya.running(this)?this._resizeBeforeDraw={width:e,height:r}:this._resize(e,r)}_resize(e,r){const n=this.options,i=this.canvas,a=n.maintainAspectRatio&&this.aspectRatio,s=this.platform.getMaximumSize(i,e,r,a),o=n.devicePixelRatio||this.platform.getDevicePixelRatio(),u=this.width?"resize":"attach";this.width=s.width,this.height=s.height,this._aspectRatio=this.aspectRatio,vA(this,o,!0)&&(this.notifyPlugins("resize",{size:s}),Cr(n.onResize,[this,s],this),this.attached&&this._doResize(u)&&this.render())}ensureScalesHaveIDs(){const r=this.options.scales||{};yr(r,(n,i)=>{n.id=i})}buildOrUpdateScales(){const e=this.options,r=e.scales,n=this.scales,i=Object.keys(n).reduce((s,o)=>(s[o]=!1,s),{});let a=[];r&&(a=a.concat(Object.keys(r).map(s=>{const o=r[s],u=yb(s,o),l=u==="r",c=u==="x";return{options:o,dposition:l?"chartArea":c?"bottom":"left",dtype:l?"radialLinear":c?"category":"linear"}}))),yr(a,s=>{const o=s.options,u=o.id,l=yb(u,o),c=Pt(o.type,s.dtype);(o.position===void 0||VA(o.position,l)!==VA(s.dposition))&&(o.position=s.dposition),i[u]=!0;let f=null;if(u in n&&n[u].type===c)f=n[u];else{const h=ba.getScale(c);f=new h({id:u,type:c,ctx:this.ctx,chart:this}),n[f.id]=f}f.init(o,e)}),yr(i,(s,o)=>{s||delete n[o]}),yr(n,s=>{Mn.configure(this,s,s.options),Mn.addBox(this,s)})}_updateMetasets(){const e=this._metasets,r=this.data.datasets.length,n=e.length;if(e.sort((i,a)=>i.index-a.index),n>r){for(let i=r;ir.length&&delete this._stacks,e.forEach((n,i)=>{r.filter(a=>a===n._dataset).length===0&&this._destroyDatasetMeta(i)})}buildOrUpdateControllers(){const e=[],r=this.data.datasets;let n,i;for(this._removeUnreferencedMetasets(),n=0,i=r.length;n{this.getDatasetMeta(r).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(e){const r=this.config;r.update();const n=this._options=r.createResolver(r.chartOptionScopes(),this.getContext()),i=this._animationsDisabled=!n.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:e,cancelable:!0})===!1)return;const a=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let s=0;for(let l=0,c=this.data.datasets.length;l{l.reset()}),this._updateDatasets(e),this.notifyPlugins("afterUpdate",{mode:e}),this._layers.sort(YA("z","_idx"));const{_active:o,_lastEvent:u}=this;u?this._eventHandler(u,!0):o.length&&this._updateHoverStyles(o,o,!0),this.render()}_updateScales(){yr(this.scales,e=>{Mn.removeBox(this,e)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const e=this.options,r=new Set(Object.keys(this._listeners)),n=new Set(e.events);(!iA(r,n)||!!this._responsiveListeners!==e.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:e}=this,r=this._getUniformDataChanges()||[];for(const{method:n,start:i,count:a}of r){const s=n==="_removeElements"?-a:a;LW(e,i,s)}}_getUniformDataChanges(){const e=this._dataChanges;if(!e||!e.length)return;this._dataChanges=[];const r=this.data.datasets.length,n=a=>new Set(e.filter(s=>s[0]===a).map((s,o)=>o+","+s.splice(1).join(","))),i=n(0);for(let a=1;aa.split(",")).map(a=>({method:a[1],start:+a[2],count:+a[3]}))}_updateLayout(e){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;Mn.update(this,this.width,this.height,e);const r=this.chartArea,n=r.width<=0||r.height<=0;this._layers=[],yr(this.boxes,i=>{n&&i.position==="chartArea"||(i.configure&&i.configure(),this._layers.push(...i._layers()))},this),this._layers.forEach((i,a)=>{i._idx=a}),this.notifyPlugins("afterLayout")}_updateDatasets(e){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:e,cancelable:!0})!==!1){for(let r=0,n=this.data.datasets.length;r=0;--r)this._drawDataset(e[r]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(e){const r=this.ctx,n=e._clip,i=!n.disabled,a=zW(e,this.chartArea),s={meta:e,index:e.index,cancelable:!0};this.notifyPlugins("beforeDatasetDraw",s)!==!1&&(i&&Qv(r,{left:n.left===!1?0:a.left-n.left,right:n.right===!1?this.width:a.right+n.right,top:n.top===!1?0:a.top-n.top,bottom:n.bottom===!1?this.height:a.bottom+n.bottom}),e.controller.draw(),i&&eg(r),s.cancelable=!1,this.notifyPlugins("afterDatasetDraw",s))}isPointInArea(e){return Ps(e,this.chartArea,this._minPadding)}getElementsAtEventForMode(e,r,n,i){const a=SO.modes[r];return typeof a=="function"?a(this,e,n,i):[]}getDatasetMeta(e){const r=this.data.datasets[e],n=this._metasets;let i=n.filter(a=>a&&a._dataset===r).pop();return i||(i={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:r&&r.order||0,index:e,_dataset:r,_parsed:[],_sorted:!1},n.push(i)),i}getContext(){return this.$context||(this.$context=Yo(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(e){const r=this.data.datasets[e];if(!r)return!1;const n=this.getDatasetMeta(e);return typeof n.hidden=="boolean"?!n.hidden:!r.hidden}setDatasetVisibility(e,r){const n=this.getDatasetMeta(e);n.hidden=!r}toggleDataVisibility(e){this._hiddenIndices[e]=!this._hiddenIndices[e]}getDataVisibility(e){return!this._hiddenIndices[e]}_updateVisibility(e,r,n){const i=n?"show":"hide",a=this.getDatasetMeta(e),s=a.controller._resolveAnimations(void 0,i);_h(r)?(a.data[r].hidden=!n,this.update()):(this.setDatasetVisibility(e,n),s.update(a,{visible:n}),this.update(o=>o.datasetIndex===e?i:void 0))}hide(e,r){this._updateVisibility(e,r,!1)}show(e,r){this._updateVisibility(e,r,!0)}_destroyDatasetMeta(e){const r=this._metasets[e];r&&r.controller&&r.controller._destroy(),delete this._metasets[e]}_stop(){let e,r;for(this.stop(),Ya.remove(this),e=0,r=this.data.datasets.length;e{r.addEventListener(this,a,s),e[a]=s},i=(a,s,o)=>{a.offsetX=s,a.offsetY=o,this._eventHandler(a)};yr(this.options.events,a=>n(a,i))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const e=this._responsiveListeners,r=this.platform,n=(u,l)=>{r.addEventListener(this,u,l),e[u]=l},i=(u,l)=>{e[u]&&(r.removeEventListener(this,u,l),delete e[u])},a=(u,l)=>{this.canvas&&this.resize(u,l)};let s;const o=()=>{i("attach",o),this.attached=!0,this.resize(),n("resize",a),n("detach",s)};s=()=>{this.attached=!1,i("resize",a),this._stop(),this._resize(0,0),n("attach",o)},r.isAttached(this.canvas)?o():s()}unbindEvents(){yr(this._listeners,(e,r)=>{this.platform.removeEventListener(this,r,e)}),this._listeners={},yr(this._responsiveListeners,(e,r)=>{this.platform.removeEventListener(this,r,e)}),this._responsiveListeners=void 0}updateHoverStyle(e,r,n){const i=n?"set":"remove";let a,s,o,u;for(r==="dataset"&&(a=this.getDatasetMeta(e[0].datasetIndex),a.controller["_"+i+"DatasetHoverStyle"]()),o=0,u=e.length;o{const o=this.getDatasetMeta(a);if(!o)throw new Error("No dataset found at index "+a);return{datasetIndex:a,element:o.data[s],index:s}});!Um(n,r)&&(this._active=n,this._lastEvent=null,this._updateHoverStyles(n,r))}notifyPlugins(e,r,n){return this._plugins.notify(this,e,r,n)}isPluginEnabled(e){return this._plugins._cache.filter(r=>r.plugin.id===e).length===1}_updateHoverStyles(e,r,n){const i=this.options.hover,a=(u,l)=>u.filter(c=>!l.some(f=>c.datasetIndex===f.datasetIndex&&c.index===f.index)),s=a(r,e),o=n?e:a(e,r);s.length&&this.updateHoverStyle(s,i.mode,!1),o.length&&i.mode&&this.updateHoverStyle(o,i.mode,!0)}_eventHandler(e,r){const n={event:e,replay:r,cancelable:!0,inChartArea:this.isPointInArea(e)},i=s=>(s.options.events||this.options.events).includes(e.native.type);if(this.notifyPlugins("beforeEvent",n,i)===!1)return;const a=this._handleEvent(e,r,n.inChartArea);return n.cancelable=!1,this.notifyPlugins("afterEvent",n,i),(a||n.changed)&&this.render(),this}_handleEvent(e,r,n){const{_active:i=[],options:a}=this,s=r,o=this._getActiveElements(e,i,n,s),u=tU(e),l=$W(e,this._lastEvent,n,u);n&&(this._lastEvent=null,Cr(a.onHover,[e,o,this],this),u&&Cr(a.onClick,[e,o,this],this));const c=!Um(o,i);return(c||r)&&(this._active=o,this._updateHoverStyles(o,i,r)),this._lastEvent=l,c}_getActiveElements(e,r,n,i){if(e.type==="mouseout")return[];if(!n)return r;const a=this.options.hover;return this.getElementsAtEventForMode(e,a.mode,a,i)}}je(_o,"defaults",qr),je(_o,"instances",Dm),je(_o,"overrides",$u),je(_o,"registry",ba),je(_o,"version",kW),je(_o,"getChart",GA);function XA(){return yr(_o.instances,t=>t._plugins.invalidate())}function qW(t,e,r){const{startAngle:n,pixelMargin:i,x:a,y:s,outerRadius:o,innerRadius:u}=e;let l=i/o;t.beginPath(),t.arc(a,s,o,n-l,r+l),u>i?(l=i/u,t.arc(a,s,u,r+l,n-l,!0)):t.arc(a,s,i,r+en,n-en),t.closePath(),t.clip()}function UW(t){return B1(t,["outerStart","outerEnd","innerStart","innerEnd"])}function HW(t,e,r,n){const i=UW(t.options.borderRadius),a=(r-e)/2,s=Math.min(a,n*e/2),o=u=>{const l=(r-Math.min(a,u))*n/2;return wn(u,0,Math.min(a,l))};return{outerStart:o(i.outerStart),outerEnd:o(i.outerEnd),innerStart:wn(i.innerStart,0,s),innerEnd:wn(i.innerEnd,0,s)}}function Fl(t,e,r,n){return{x:r+t*Math.cos(e),y:n+t*Math.sin(e)}}function Xm(t,e,r,n,i,a){const{x:s,y:o,startAngle:u,pixelMargin:l,innerRadius:c}=e,f=Math.max(e.outerRadius+n+r-l,0),h=c>0?c+n+r+l:0;let p=0;const g=i-u;if(n){const H=c>0?c-n:0,B=f>0?f-n:0,k=(H+B)/2,K=k!==0?g*k/(k+n):g;p=(g-K)/2}const m=Math.max(.001,g*f-r/Rr)/f,b=(g-m)/2,y=u+b+p,S=i-b-p,{outerStart:x,outerEnd:_,innerStart:A,innerEnd:w}=HW(e,h,f,S-y),C=f-x,N=f-_,E=y+x/C,M=S-_/N,O=h+A,F=h+w,q=y+A/O,V=S-w/F;if(t.beginPath(),a){const H=(E+M)/2;if(t.arc(s,o,f,E,H),t.arc(s,o,f,H,M),_>0){const $=Fl(N,M,s,o);t.arc($.x,$.y,_,M,S+en)}const B=Fl(F,S,s,o);if(t.lineTo(B.x,B.y),w>0){const $=Fl(F,V,s,o);t.arc($.x,$.y,w,S+en,V+Math.PI)}const k=(S-w/h+(y+A/h))/2;if(t.arc(s,o,h,S-w/h,k,!0),t.arc(s,o,h,k,y+A/h,!0),A>0){const $=Fl(O,q,s,o);t.arc($.x,$.y,A,q+Math.PI,y-en)}const K=Fl(C,y,s,o);if(t.lineTo(K.x,K.y),x>0){const $=Fl(C,E,s,o);t.arc($.x,$.y,x,y-en,E)}}else{t.moveTo(s,o);const H=Math.cos(E)*f+s,B=Math.sin(E)*f+o;t.lineTo(H,B);const k=Math.cos(M)*f+s,K=Math.sin(M)*f+o;t.lineTo(k,K)}t.closePath()}function WW(t,e,r,n,i){const{fullCircles:a,startAngle:s,circumference:o}=e;let u=e.endAngle;if(a){Xm(t,e,r,n,u,i);for(let l=0;l=Fr||Ah(s,u,l),b=Fs(o,c+p,f+p);return m&&b}getCenterPoint(r){const{x:n,y:i,startAngle:a,endAngle:s,innerRadius:o,outerRadius:u}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],r),{offset:l,spacing:c}=this.options,f=(a+s)/2,h=(o+u+c+l)/2;return{x:n+Math.cos(f)*h,y:i+Math.sin(f)*h}}tooltipPosition(r){return this.getCenterPoint(r)}draw(r){const{options:n,circumference:i}=this,a=(n.offset||0)/4,s=(n.spacing||0)/2,o=n.circular;if(this.pixelMargin=n.borderAlign==="inner"?.33:0,this.fullCircles=i>Fr?Math.floor(i/Fr):0,i===0||this.innerRadius<0||this.outerRadius<0)return;r.save();const u=(this.startAngle+this.endAngle)/2;r.translate(Math.cos(u)*a,Math.sin(u)*a);const l=1-Math.sin(Math.min(Rr,i||0)),c=a*l;r.fillStyle=n.backgroundColor,r.strokeStyle=n.borderColor,WW(r,this,c,s,o),VW(r,this,c,s,o),r.restore()}}je(ql,"id","arc"),je(ql,"defaults",{borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0}),je(ql,"defaultRoutes",{backgroundColor:"backgroundColor"}),je(ql,"descriptors",{_scriptable:!0,_indexable:r=>r!=="borderDash"});function PO(t,e,r=e){t.lineCap=Pt(r.borderCapStyle,e.borderCapStyle),t.setLineDash(Pt(r.borderDash,e.borderDash)),t.lineDashOffset=Pt(r.borderDashOffset,e.borderDashOffset),t.lineJoin=Pt(r.borderJoinStyle,e.borderJoinStyle),t.lineWidth=Pt(r.borderWidth,e.borderWidth),t.strokeStyle=Pt(r.borderColor,e.borderColor)}function YW(t,e,r){t.lineTo(r.x,r.y)}function jW(t){return t.stepped?_U:t.tension||t.cubicInterpolationMode==="monotone"?AU:YW}function kO(t,e,r={}){const n=t.length,{start:i=0,end:a=n-1}=r,{start:s,end:o}=e,u=Math.max(i,s),l=Math.min(a,o),c=io&&a>o;return{count:n,start:u,loop:e.loop,ilen:l(s+(l?o-_:_))%a,x=()=>{m!==b&&(t.lineTo(c,b),t.lineTo(c,m),t.lineTo(c,y))};for(u&&(p=i[S(0)],t.moveTo(p.x,p.y)),h=0;h<=o;++h){if(p=i[S(h)],p.skip)continue;const _=p.x,A=p.y,w=_|0;w===g?(Ab&&(b=A),c=(f*c+_)/++f):(x(),t.lineTo(_,A),g=w,f=0,m=b=A),y=A}x()}function bb(t){const e=t.options,r=e.borderDash&&e.borderDash.length;return!t._decimated&&!t._loop&&!e.tension&&e.cubicInterpolationMode!=="monotone"&&!e.stepped&&!r?XW:GW}function ZW(t){return t.stepped?rH:t.tension||t.cubicInterpolationMode==="monotone"?nH:Eu}function KW(t,e,r,n){let i=e._path;i||(i=e._path=new Path2D,e.path(i,r,n)&&i.closePath()),PO(t,e.options),t.stroke(i)}function JW(t,e,r,n){const{segments:i,options:a}=e,s=bb(e);for(const o of i)PO(t,a,o.style),t.beginPath(),s(t,e,o,{start:r,end:r+n-1})&&t.closePath(),t.stroke()}const QW=typeof Path2D=="function";function eV(t,e,r,n){QW&&!e.options.segment?KW(t,e,r,n):JW(t,e,r,n)}class ks extends es{constructor(e){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,e&&Object.assign(this,e)}updateControlPoints(e,r){const n=this.options;if((n.tension||n.cubicInterpolationMode==="monotone")&&!n.stepped&&!this._pointsUpdated){const i=n.spanGaps?this._loop:this._fullLoop;GU(this._points,n,e,i,r),this._pointsUpdated=!0}}set points(e){this._points=e,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=lH(this,this.options.segment))}first(){const e=this.segments,r=this.points;return e.length&&r[e[0].start]}last(){const e=this.segments,r=this.points,n=e.length;return n&&r[e[n-1].end]}interpolate(e,r){const n=this.options,i=e[r],a=this.points,s=vO(this,{property:r,start:i,end:i});if(!s.length)return;const o=[],u=ZW(n);let l,c;for(l=0,c=s.length;le!=="borderDash"&&e!=="fill"});function ZA(t,e,r,n){const i=t.options,{[r]:a}=t.getProps([r],n);return Math.abs(e-a)t.replace("rgb(","rgba(").replace(")",", 0.5)"));function LO(t){return xb[t%xb.length]}function $O(t){return KA[t%KA.length]}function sV(t,e){return t.borderColor=LO(e),t.backgroundColor=$O(e),++e}function oV(t,e){return t.backgroundColor=t.data.map(()=>LO(e++)),e}function uV(t,e){return t.backgroundColor=t.data.map(()=>$O(e++)),e}function lV(t){let e=0;return(r,n)=>{const i=t.getDatasetMeta(n).controller;i instanceof Oo?e=oV(r,e):i instanceof Kl?e=uV(r,e):i&&(e=sV(r,e))}}function JA(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return!0;return!1}function cV(t){return t&&(t.borderColor||t.backgroundColor)}var zO={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,r){if(!r.enabled)return;const{data:{datasets:n},options:i}=t.config,{elements:a}=i;if(!r.forceOverride&&(JA(n)||cV(i)||a&&JA(a)))return;const s=lV(t);n.forEach(s)}};function fV(t,e,r,n,i){const a=i.samples||n;if(a>=r)return t.slice(e,e+r);const s=[],o=(r-2)/(a-2);let u=0;const l=e+r-1;let c=e,f,h,p,g,m;for(s[u++]=t[c],f=0;fp&&(p=g,h=t[S],m=S);s[u++]=h,c=m}return s[u++]=t[l],s}function hV(t,e,r,n){let i=0,a=0,s,o,u,l,c,f,h,p,g,m;const b=[],y=e+r-1,S=t[e].x,_=t[y].x-S;for(s=e;sm&&(m=l,h=s),i=(a*i+o.x)/++a;else{const w=s-1;if(!or(f)&&!or(h)){const C=Math.min(f,h),N=Math.max(f,h);C!==p&&C!==w&&b.push({...t[C],x:i}),N!==p&&N!==w&&b.push({...t[N],x:i})}s>0&&w!==p&&b.push(t[w]),b.push(o),c=A,a=0,g=m=l,f=h=p=s}}return b}function qO(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,writable:!0,value:e})}}function QA(t){t.data.datasets.forEach(e=>{qO(e)})}function dV(t,e){const r=e.length;let n=0,i;const{iScale:a}=t,{min:s,max:o,minDefined:u,maxDefined:l}=a.getUserBounds();return u&&(n=wn(Rs(e,a.axis,s).lo,0,r-1)),l?i=wn(Rs(e,a.axis,o).hi+1,n,r)-n:i=r-n,{start:n,count:i}}var UO={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,r)=>{if(!r.enabled){QA(t);return}const n=t.width;t.data.datasets.forEach((i,a)=>{const{_data:s,indexAxis:o}=i,u=t.getDatasetMeta(a),l=s||i.data;if(Qf([o,t.options.indexAxis])==="y"||!u.controller.supportsDecimation)return;const c=t.scales[u.xAxisID];if(c.type!=="linear"&&c.type!=="time"||t.options.parsing)return;let{start:f,count:h}=dV(u,l);const p=r.threshold||4*n;if(h<=p){qO(i);return}or(s)&&(i._data=l,delete i.data,Object.defineProperty(i,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(m){this._data=m}}));let g;switch(r.algorithm){case"lttb":g=fV(l,f,h,n,r);break;case"min-max":g=hV(l,f,h,n);break;default:throw new Error(`Unsupported decimation algorithm '${r.algorithm}'`)}i._decimated=g})},destroy(t){QA(t)}};function pV(t,e,r){const n=t.segments,i=t.points,a=e.points,s=[];for(const o of n){let{start:u,end:l}=o;l=V1(u,l,i);const c=wb(r,i[u],i[l],o.loop);if(!e.segments){s.push({source:o,target:c,start:i[u],end:i[l]});continue}const f=vO(e,c);for(const h of f){const p=wb(r,a[h.start],a[h.end],h.loop),g=mO(o,i,p);for(const m of g)s.push({source:m,target:h,start:{[r]:eD(c,p,"start",Math.max)},end:{[r]:eD(c,p,"end",Math.min)}})}}return s}function wb(t,e,r,n){if(n)return;let i=e[t],a=r[t];return t==="angle"&&(i=Oi(i),a=Oi(a)),{property:t,start:i,end:a}}function mV(t,e){const{x:r=null,y:n=null}=t||{},i=e.points,a=[];return e.segments.forEach(({start:s,end:o})=>{o=V1(s,o,i);const u=i[s],l=i[o];n!==null?(a.push({x:u.x,y:n}),a.push({x:l.x,y:n})):r!==null&&(a.push({x:r,y:u.y}),a.push({x:r,y:l.y}))}),a}function V1(t,e,r){for(;e>t;e--){const n=r[e];if(!isNaN(n.x)&&!isNaN(n.y))break}return e}function eD(t,e,r,n){return t&&e?n(t[r],e[r]):t?t[r]:e?e[r]:0}function HO(t,e){let r=[],n=!1;return Or(t)?(n=!0,r=t):r=mV(t,e),r.length?new ks({points:r,options:{tension:0},_loop:n,_fullLoop:n}):null}function tD(t){return t&&t.fill!==!1}function vV(t,e,r){let i=t[e].fill;const a=[e];let s;if(!r)return i;for(;i!==!1&&a.indexOf(i)===-1;){if(!Vr(i))return i;if(s=t[i],!s)return!1;if(s.visible)return i;a.push(i),i=s.fill}return!1}function gV(t,e,r){const n=wV(t);if(Gt(n))return isNaN(n.value)?!1:n;let i=parseFloat(n);return Vr(i)&&Math.floor(i)===i?yV(n[0],e,i,r):["origin","start","end","stack","shape"].indexOf(n)>=0&&n}function yV(t,e,r,n){return(t==="-"||t==="+")&&(r=e+r),r===e||r<0||r>=n?!1:r}function bV(t,e){let r=null;return t==="start"?r=e.bottom:t==="end"?r=e.top:Gt(t)?r=e.getPixelForValue(t.value):e.getBasePixel&&(r=e.getBasePixel()),r}function xV(t,e,r){let n;return t==="start"?n=r:t==="end"?n=e.options.reverse?e.min:e.max:Gt(t)?n=t.value:n=e.getBaseValue(),n}function wV(t){const e=t.options,r=e.fill;let n=Pt(r&&r.target,r);return n===void 0&&(n=!!e.backgroundColor),n===!1||n===null?!1:n===!0?"origin":n}function SV(t){const{scale:e,index:r,line:n}=t,i=[],a=n.segments,s=n.points,o=_V(e,r);o.push(HO({x:null,y:e.bottom},n));for(let u=0;u=0;--s){const o=i[s].$filler;o&&(o.line.updateControlPoints(a,o.axis),n&&o.fill&&Fy(t.ctx,o,a))}},beforeDatasetsDraw(t,e,r){if(r.drawTime!=="beforeDatasetsDraw")return;const n=t.getSortedVisibleDatasetMetas();for(let i=n.length-1;i>=0;--i){const a=n[i].$filler;tD(a)&&Fy(t.ctx,a,t.chartArea)}},beforeDatasetDraw(t,e,r){const n=e.meta.$filler;!tD(n)||r.drawTime!=="beforeDatasetDraw"||Fy(t.ctx,n,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const aD=(t,e)=>{let{boxHeight:r=e,boxWidth:n=e}=t;return t.usePointStyle&&(r=Math.min(r,e),n=t.pointStyleWidth||Math.min(n,e)),{boxWidth:n,boxHeight:r,itemHeight:Math.max(e,r)}},RV=(t,e)=>t!==null&&e!==null&&t.datasetIndex===e.datasetIndex&&t.index===e.index;class sD extends es{constructor(e){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,r,n){this.maxWidth=e,this.maxHeight=r,this._margins=n,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const e=this.options.labels||{};let r=Cr(e.generateLabels,[this.chart],this)||[];e.filter&&(r=r.filter(n=>e.filter(n,this.chart.data))),e.sort&&(r=r.sort((n,i)=>e.sort(n,i,this.chart.data))),this.options.reverse&&r.reverse(),this.legendItems=r}fit(){const{options:e,ctx:r}=this;if(!e.display){this.width=this.height=0;return}const n=e.labels,i=pn(n.font),a=i.size,s=this._computeTitleHeight(),{boxWidth:o,itemHeight:u}=aD(n,a);let l,c;r.font=i.string,this.isHorizontal()?(l=this.maxWidth,c=this._fitRows(s,a,o,u)+10):(c=this.maxHeight,l=this._fitCols(s,i,o,u)+10),this.width=Math.min(l,e.maxWidth||this.maxWidth),this.height=Math.min(c,e.maxHeight||this.maxHeight)}_fitRows(e,r,n,i){const{ctx:a,maxWidth:s,options:{labels:{padding:o}}}=this,u=this.legendHitBoxes=[],l=this.lineWidths=[0],c=i+o;let f=e;a.textAlign="left",a.textBaseline="middle";let h=-1,p=-c;return this.legendItems.forEach((g,m)=>{const b=n+r/2+a.measureText(g.text).width;(m===0||l[l.length-1]+b+2*o>s)&&(f+=c,l[l.length-(m>0?0:1)]=0,p+=c,h++),u[m]={left:0,top:p,row:h,width:b,height:i},l[l.length-1]+=b+o}),f}_fitCols(e,r,n,i){const{ctx:a,maxHeight:s,options:{labels:{padding:o}}}=this,u=this.legendHitBoxes=[],l=this.columnSizes=[],c=s-e;let f=o,h=0,p=0,g=0,m=0;return this.legendItems.forEach((b,y)=>{const{itemWidth:S,itemHeight:x}=PV(n,r,a,b,i);y>0&&p+x+2*o>c&&(f+=h+o,l.push({width:h,height:p}),g+=h+o,m++,h=p=0),u[y]={left:g,top:p,col:m,width:S,height:x},h=Math.max(h,S),p+=x+o}),f+=h,l.push({width:h,height:p}),f}adjustHitBoxes(){if(!this.options.display)return;const e=this._computeTitleHeight(),{legendHitBoxes:r,options:{align:n,labels:{padding:i},rtl:a}}=this,s=Zl(a,this.left,this.width);if(this.isHorizontal()){let o=0,u=$n(n,this.left+i,this.right-this.lineWidths[o]);for(const l of r)o!==l.row&&(o=l.row,u=$n(n,this.left+i,this.right-this.lineWidths[o])),l.top+=this.top+e+i,l.left=s.leftForLtr(s.x(u),l.width),u+=l.width+i}else{let o=0,u=$n(n,this.top+e+i,this.bottom-this.columnSizes[o].height);for(const l of r)l.col!==o&&(o=l.col,u=$n(n,this.top+e+i,this.bottom-this.columnSizes[o].height)),l.top=u,l.left+=this.left+i,l.left=s.leftForLtr(s.x(l.left),l.width),u+=l.height+i}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){const e=this.ctx;Qv(e,this),this._draw(),eg(e)}}_draw(){const{options:e,columnSizes:r,lineWidths:n,ctx:i}=this,{align:a,labels:s}=e,o=qr.color,u=Zl(e.rtl,this.left,this.width),l=pn(s.font),{padding:c}=s,f=l.size,h=f/2;let p;this.drawTitle(),i.textAlign=u.textAlign("left"),i.textBaseline="middle",i.lineWidth=.5,i.font=l.string;const{boxWidth:g,boxHeight:m,itemHeight:b}=aD(s,f),y=function(w,C,N){if(isNaN(g)||g<=0||isNaN(m)||m<0)return;i.save();const E=Pt(N.lineWidth,1);if(i.fillStyle=Pt(N.fillStyle,o),i.lineCap=Pt(N.lineCap,"butt"),i.lineDashOffset=Pt(N.lineDashOffset,0),i.lineJoin=Pt(N.lineJoin,"miter"),i.lineWidth=E,i.strokeStyle=Pt(N.strokeStyle,o),i.setLineDash(Pt(N.lineDash,[])),s.usePointStyle){const M={radius:m*Math.SQRT2/2,pointStyle:N.pointStyle,rotation:N.rotation,borderWidth:E},O=u.xPlus(w,g/2),F=C+h;iO(i,M,O,F,s.pointStyleWidth&&g)}else{const M=C+Math.max((f-m)/2,0),O=u.leftForLtr(w,g),F=Ru(N.borderRadius);i.beginPath(),Object.values(F).some(q=>q!==0)?Dh(i,{x:O,y:M,w:g,h:m,radius:F}):i.rect(O,M,g,m),i.fill(),E!==0&&i.stroke()}i.restore()},S=function(w,C,N){zu(i,N.text,w,C+b/2,l,{strikethrough:N.hidden,textAlign:u.textAlign(N.textAlign)})},x=this.isHorizontal(),_=this._computeTitleHeight();x?p={x:$n(a,this.left+c,this.right-n[0]),y:this.top+c+_,line:0}:p={x:this.left+c,y:$n(a,this.top+_+c,this.bottom-r[0].height),line:0},hO(this.ctx,e.textDirection);const A=b+c;this.legendItems.forEach((w,C)=>{i.strokeStyle=w.fontColor,i.fillStyle=w.fontColor;const N=i.measureText(w.text).width,E=u.textAlign(w.textAlign||(w.textAlign=s.textAlign)),M=g+h+N;let O=p.x,F=p.y;u.setWidth(this.width),x?C>0&&O+M+c>this.right&&(F=p.y+=A,p.line++,O=p.x=$n(a,this.left+c,this.right-n[p.line])):C>0&&F+A>this.bottom&&(O=p.x=O+r[p.line].width+c,p.line++,F=p.y=$n(a,this.top+_+c,this.bottom-r[p.line].height));const q=u.x(O);if(y(q,F,w),O=hU(E,O+g+h,x?O+M:this.right,e.rtl),S(u.x(O),F,w),x)p.x+=M+c;else if(typeof w.text!="string"){const V=l.lineHeight;p.y+=YO(w,V)+c}else p.y+=A}),dO(this.ctx,e.textDirection)}drawTitle(){const e=this.options,r=e.title,n=pn(r.font),i=Yn(r.padding);if(!r.display)return;const a=Zl(e.rtl,this.left,this.width),s=this.ctx,o=r.position,u=n.size/2,l=i.top+u;let c,f=this.left,h=this.width;if(this.isHorizontal())h=Math.max(...this.lineWidths),c=this.top+l,f=$n(e.align,f,this.right-h);else{const g=this.columnSizes.reduce((m,b)=>Math.max(m,b.height),0);c=l+$n(e.align,this.top,this.bottom-g-e.labels.padding-this._computeTitleHeight())}const p=$n(o,f,f+h);s.textAlign=a.textAlign(P1(o)),s.textBaseline="middle",s.strokeStyle=r.color,s.fillStyle=r.color,s.font=n.string,zu(s,r.text,p,c,n)}_computeTitleHeight(){const e=this.options.title,r=pn(e.font),n=Yn(e.padding);return e.display?r.lineHeight+n.height:0}_getLegendItemAt(e,r){let n,i,a;if(Fs(e,this.left,this.right)&&Fs(r,this.top,this.bottom)){for(a=this.legendHitBoxes,n=0;na.length>s.length?a:s)),e+r.size/2+n.measureText(i).width}function BV(t,e,r){let n=t;return typeof e.text!="string"&&(n=YO(e,r)),n}function YO(t,e){const r=t.text?t.text.length:0;return e*r}function IV(t,e){return!!((t==="mousemove"||t==="mouseout")&&(e.onHover||e.onLeave)||e.onClick&&(t==="click"||t==="mouseup"))}var jO={id:"legend",_element:sD,start(t,e,r){const n=t.legend=new sD({ctx:t.ctx,options:r,chart:t});Mn.configure(t,n,r),Mn.addBox(t,n)},stop(t){Mn.removeBox(t,t.legend),delete t.legend},beforeUpdate(t,e,r){const n=t.legend;Mn.configure(t,n,r),n.options=r},afterUpdate(t){const e=t.legend;e.buildLabels(),e.adjustHitBoxes()},afterEvent(t,e){e.replay||t.legend.handleEvent(e.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(t,e,r){const n=e.datasetIndex,i=r.chart;i.isDatasetVisible(n)?(i.hide(n),e.hidden=!0):(i.show(n),e.hidden=!1)},onHover:null,onLeave:null,labels:{color:t=>t.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:r,pointStyle:n,textAlign:i,color:a,useBorderRadius:s,borderRadius:o}}=t.legend.options;return t._getSortedDatasetMetas().map(u=>{const l=u.controller.getStyle(r?0:void 0),c=Yn(l.borderWidth);return{text:e[u.index].label,fillStyle:l.backgroundColor,fontColor:a,hidden:!u.visible,lineCap:l.borderCapStyle,lineDash:l.borderDash,lineDashOffset:l.borderDashOffset,lineJoin:l.borderJoinStyle,lineWidth:(c.width+c.height)/4,strokeStyle:l.borderColor,pointStyle:n||l.pointStyle,rotation:l.rotation,textAlign:i||l.textAlign,borderRadius:s&&(o||l.borderRadius),datasetIndex:u.index}},this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class Y1 extends es{constructor(e){super(),this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,r){const n=this.options;if(this.left=0,this.top=0,!n.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=e,this.height=this.bottom=r;const i=Or(n.text)?n.text.length:1;this._padding=Yn(n.padding);const a=i*pn(n.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=a:this.width=a}isHorizontal(){const e=this.options.position;return e==="top"||e==="bottom"}_drawArgs(e){const{top:r,left:n,bottom:i,right:a,options:s}=this,o=s.align;let u=0,l,c,f;return this.isHorizontal()?(c=$n(o,n,a),f=r+e,l=a-n):(s.position==="left"?(c=n+e,f=$n(o,i,r),u=Rr*-.5):(c=a-e,f=$n(o,r,i),u=Rr*.5),l=i-r),{titleX:c,titleY:f,maxWidth:l,rotation:u}}draw(){const e=this.ctx,r=this.options;if(!r.display)return;const n=pn(r.font),a=n.lineHeight/2+this._padding.top,{titleX:s,titleY:o,maxWidth:u,rotation:l}=this._drawArgs(a);zu(e,r.text,0,0,n,{color:r.color,maxWidth:u,rotation:l,textAlign:P1(r.align),textBaseline:"middle",translation:[s,o]})}}function LV(t,e){const r=new Y1({ctx:t.ctx,options:e,chart:t});Mn.configure(t,r,e),Mn.addBox(t,r),t.titleBlock=r}var GO={id:"title",_element:Y1,start(t,e,r){LV(t,r)},stop(t){const e=t.titleBlock;Mn.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,r){const n=t.titleBlock;Mn.configure(t,n,r),n.options=r},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Vp=new WeakMap;var XO={id:"subtitle",start(t,e,r){const n=new Y1({ctx:t.ctx,options:r,chart:t});Mn.configure(t,n,r),Mn.addBox(t,n),Vp.set(t,n)},stop(t){Mn.removeBox(t,Vp.get(t)),Vp.delete(t)},beforeUpdate(t,e,r){const n=Vp.get(t);Mn.configure(t,n,r),n.options=r},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const th={average(t){if(!t.length)return!1;let e,r,n=0,i=0,a=0;for(e=0,r=t.length;e-1?t.split(` -`):t}function AV(t,e){const{element:r,datasetIndex:n,index:i}=e,a=t.getDatasetMeta(n).controller,{label:s,value:o}=a.getLabelAndValue(i);return{chart:t,label:s,parsed:a.getParsed(i),raw:t.data.datasets[n].data[i],formattedValue:o,dataset:a.getDataset(),dataIndex:i,datasetIndex:n,element:r}}function iD(t,e){const r=t.chart.ctx,{body:n,footer:i,title:a}=t,{boxWidth:s,boxHeight:o}=e,u=pn(e.bodyFont),l=pn(e.titleFont),c=pn(e.footerFont),f=a.length,h=i.length,p=n.length,g=Yn(e.padding);let m=g.height,b=0,y=n.reduce((_,A)=>_+A.before.length+A.lines.length+A.after.length,0);if(y+=t.beforeBody.length+t.afterBody.length,f&&(m+=f*l.lineHeight+(f-1)*e.titleSpacing+e.titleMarginBottom),y){const _=e.displayColors?Math.max(o,u.lineHeight):u.lineHeight;m+=p*_+(y-p)*u.lineHeight+(y-1)*e.bodySpacing}h&&(m+=e.footerMarginTop+h*c.lineHeight+(h-1)*e.footerSpacing);let S=0;const x=function(_){b=Math.max(b,r.measureText(_).width+S)};return r.save(),r.font=l.string,yr(t.title,x),r.font=u.string,yr(t.beforeBody.concat(t.afterBody),x),S=e.displayColors?s+2+e.boxPadding:0,yr(n,_=>{yr(_.before,x),yr(_.lines,x),yr(_.after,x)}),S=0,r.font=c.string,yr(t.footer,x),r.restore(),b+=g.width,{width:b,height:m}}function DV(t,e){const{y:r,height:n}=e;return rt.height-n/2?"bottom":"center"}function NV(t,e,r,n){const{x:i,width:a}=n,s=r.caretSize+r.caretPadding;if(t==="left"&&i+a+s>e.width||t==="right"&&i-a-s<0)return!0}function EV(t,e,r,n){const{x:i,width:a}=r,{width:s,chartArea:{left:o,right:u}}=t;let l="center";return n==="center"?l=i<=(o+u)/2?"left":"right":i<=a/2?l="left":i>=s-a/2&&(l="right"),NV(l,t,e,r)&&(l="center"),l}function aD(t,e,r){const n=r.yAlign||e.yAlign||DV(t,r);return{xAlign:r.xAlign||e.xAlign||EV(t,e,r,n),yAlign:n}}function CV(t,e){let{x:r,width:n}=t;return e==="right"?r-=n:e==="center"&&(r-=n/2),r}function MV(t,e,r){let{y:n,height:i}=t;return e==="top"?n+=r:e==="bottom"?n-=i+r:n-=i/2,n}function sD(t,e,r,n){const{caretSize:i,caretPadding:a,cornerRadius:s}=t,{xAlign:o,yAlign:u}=r,l=i+a,{topLeft:c,topRight:f,bottomLeft:h,bottomRight:p}=Pu(s);let g=CV(e,o);const m=MV(e,u,l);return u==="center"?o==="left"?g+=l:o==="right"&&(g-=l):o==="left"?g-=Math.max(c,h)+i:o==="right"&&(g+=Math.max(f,p)+i),{x:wn(g,0,n.width-e.width),y:wn(m,0,n.height-e.height)}}function Yp(t,e,r){const n=Yn(r.padding);return e==="center"?t.x+t.width/2:e==="right"?t.x+t.width-n.right:t.x+n.left}function oD(t){return Va([],Ns(t))}function TV(t,e,r){return Yo(t,{tooltip:e,tooltipItems:r,type:"tooltip"})}function uD(t,e){const r=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return r?t.override(r):t}const VO={beforeTitle:ws,title(t){if(t.length>0){const e=t[0],r=e.chart.data.labels,n=r?r.length:0;if(this&&this.options&&this.options.mode==="dataset")return e.dataset.label||"";if(e.label)return e.label;if(n>0&&e.dataIndex"u"?VO[e].call(r,n):i}class xb extends es{constructor(e){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=e.chart,this.options=e.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(e){this.options=e,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const e=this._cachedAnimations;if(e)return e;const r=this.chart,n=this.options.setContext(this.getContext()),i=n.enabled&&r.options.animation&&n.animations,a=new q1(this.chart,i);return i._cacheable&&(this._cachedAnimations=Object.freeze(a)),a}getContext(){return this.$context||(this.$context=TV(this.chart.getContext(),this,this._tooltipItems))}getTitle(e,r){const{callbacks:n}=r,i=di(n,"beforeTitle",this,e),a=di(n,"title",this,e),s=di(n,"afterTitle",this,e);let o=[];return o=Va(o,Ns(i)),o=Va(o,Ns(a)),o=Va(o,Ns(s)),o}getBeforeBody(e,r){return oD(di(r.callbacks,"beforeBody",this,e))}getBody(e,r){const{callbacks:n}=r,i=[];return yr(e,a=>{const s={before:[],lines:[],after:[]},o=uD(n,a);Va(s.before,Ns(di(o,"beforeLabel",this,a))),Va(s.lines,di(o,"label",this,a)),Va(s.after,Ns(di(o,"afterLabel",this,a))),i.push(s)}),i}getAfterBody(e,r){return oD(di(r.callbacks,"afterBody",this,e))}getFooter(e,r){const{callbacks:n}=r,i=di(n,"beforeFooter",this,e),a=di(n,"footer",this,e),s=di(n,"afterFooter",this,e);let o=[];return o=Va(o,Ns(i)),o=Va(o,Ns(a)),o=Va(o,Ns(s)),o}_createItems(e){const r=this._active,n=this.chart.data,i=[],a=[],s=[];let o=[],u,l;for(u=0,l=r.length;ue.filter(c,f,h,n))),e.itemSort&&(o=o.sort((c,f)=>e.itemSort(c,f,n))),yr(o,c=>{const f=uD(e.callbacks,c);i.push(di(f,"labelColor",this,c)),a.push(di(f,"labelPointStyle",this,c)),s.push(di(f,"labelTextColor",this,c))}),this.labelColors=i,this.labelPointStyles=a,this.labelTextColors=s,this.dataPoints=o,o}update(e,r){const n=this.options.setContext(this.getContext()),i=this._active;let a,s=[];if(!i.length)this.opacity!==0&&(a={opacity:0});else{const o=Qf[n.position].call(this,i,this._eventPosition);s=this._createItems(n),this.title=this.getTitle(s,n),this.beforeBody=this.getBeforeBody(s,n),this.body=this.getBody(s,n),this.afterBody=this.getAfterBody(s,n),this.footer=this.getFooter(s,n);const u=this._size=iD(this,n),l=Object.assign({},o,u),c=aD(this.chart,n,l),f=sD(n,l,c,this.chart);this.xAlign=c.xAlign,this.yAlign=c.yAlign,a={opacity:1,x:f.x,y:f.y,width:u.width,height:u.height,caretX:o.x,caretY:o.y}}this._tooltipItems=s,this.$context=void 0,a&&this._resolveAnimations().update(this,a),e&&n.external&&n.external.call(this,{chart:this.chart,tooltip:this,replay:r})}drawCaret(e,r,n,i){const a=this.getCaretPosition(e,n,i);r.lineTo(a.x1,a.y1),r.lineTo(a.x2,a.y2),r.lineTo(a.x3,a.y3)}getCaretPosition(e,r,n){const{xAlign:i,yAlign:a}=this,{caretSize:s,cornerRadius:o}=n,{topLeft:u,topRight:l,bottomLeft:c,bottomRight:f}=Pu(o),{x:h,y:p}=e,{width:g,height:m}=r;let b,y,S,x,_,A;return a==="center"?(_=p+m/2,i==="left"?(b=h,y=b-s,x=_+s,A=_-s):(b=h+g,y=b+s,x=_-s,A=_+s),S=b):(i==="left"?y=h+Math.max(u,c)+s:i==="right"?y=h+g-Math.max(l,f)-s:y=this.caretX,a==="top"?(x=p,_=x-s,b=y-s,S=y+s):(x=p+m,_=x+s,b=y+s,S=y-s),A=x),{x1:b,x2:y,x3:S,y1:x,y2:_,y3:A}}drawTitle(e,r,n){const i=this.title,a=i.length;let s,o,u;if(a){const l=Gl(n.rtl,this.x,this.width);for(e.x=Yp(this,n.titleAlign,n),r.textAlign=l.textAlign(n.titleAlign),r.textBaseline="middle",s=pn(n.titleFont),o=n.titleSpacing,r.fillStyle=n.titleColor,r.font=s.string,u=0;uS!==0)?(e.beginPath(),e.fillStyle=a.multiKeyBackground,Dh(e,{x:m,y:g,w:l,h:u,radius:y}),e.fill(),e.stroke(),e.fillStyle=s.backgroundColor,e.beginPath(),Dh(e,{x:b,y:g+1,w:l-2,h:u-2,radius:y}),e.fill()):(e.fillStyle=a.multiKeyBackground,e.fillRect(m,g,l,u),e.strokeRect(m,g,l,u),e.fillStyle=s.backgroundColor,e.fillRect(b,g+1,l-2,u-2))}e.fillStyle=this.labelTextColors[n]}drawBody(e,r,n){const{body:i}=this,{bodySpacing:a,bodyAlign:s,displayColors:o,boxHeight:u,boxWidth:l,boxPadding:c}=n,f=pn(n.bodyFont);let h=f.lineHeight,p=0;const g=Gl(n.rtl,this.x,this.width),m=function(E){r.fillText(E,g.x(e.x+p),e.y+h/2),e.y+=h+a},b=g.textAlign(s);let y,S,x,_,A,w,C;for(r.textAlign=s,r.textBaseline="middle",r.font=f.string,e.x=Yp(this,b,n),r.fillStyle=n.bodyColor,yr(this.beforeBody,m),p=o&&b!=="right"?s==="center"?l/2+c:l+2+c:0,_=0,w=i.length;_0&&r.stroke()}_updateAnimationTarget(e){const r=this.chart,n=this.$animations,i=n&&n.x,a=n&&n.y;if(i||a){const s=Qf[e.position].call(this,this._active,this._eventPosition);if(!s)return;const o=this._size=iD(this,e),u=Object.assign({},s,this._size),l=aD(r,e,u),c=sD(e,u,l,r);(i._to!==c.x||a._to!==c.y)&&(this.xAlign=l.xAlign,this.yAlign=l.yAlign,this.width=o.width,this.height=o.height,this.caretX=s.x,this.caretY=s.y,this._resolveAnimations().update(this,c))}}_willRender(){return!!this.opacity}draw(e){const r=this.options.setContext(this.getContext());let n=this.opacity;if(!n)return;this._updateAnimationTarget(r);const i={width:this.width,height:this.height},a={x:this.x,y:this.y};n=Math.abs(n)<.001?0:n;const s=Yn(r.padding),o=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;r.enabled&&o&&(e.save(),e.globalAlpha=n,this.drawBackground(a,e,i,r),oO(e,r.textDirection),a.y+=s.top,this.drawTitle(a,e,r),this.drawBody(a,e,r),this.drawFooter(a,e,r),uO(e,r.textDirection),e.restore())}getActiveElements(){return this._active||[]}setActiveElements(e,r){const n=this._active,i=e.map(({datasetIndex:o,index:u})=>{const l=this.chart.getDatasetMeta(o);if(!l)throw new Error("Cannot find a dataset at index "+o);return{datasetIndex:o,element:l.data[u],index:u}}),a=!Um(n,i),s=this._positionChanged(i,r);(a||s)&&(this._active=i,this._eventPosition=r,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(e,r,n=!0){if(r&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const i=this.options,a=this._active||[],s=this._getActiveElements(e,a,r,n),o=this._positionChanged(s,e),u=r||!Um(s,a)||o;return u&&(this._active=s,(i.enabled||i.external)&&(this._eventPosition={x:e.x,y:e.y},this.update(!0,r))),u}_getActiveElements(e,r,n,i){const a=this.options;if(e.type==="mouseout")return[];if(!i)return r.filter(o=>this.chart.data.datasets[o.datasetIndex]&&this.chart.getDatasetMeta(o.datasetIndex).controller.getParsed(o.index)!==void 0);const s=this.chart.getElementsAtEventForMode(e,a.mode,a,n);return a.reverse&&s.reverse(),s}_positionChanged(e,r){const{caretX:n,caretY:i,options:a}=this,s=Qf[a.position].call(this,e,r);return s!==!1&&(n!==s.x||i!==s.y)}}je(xb,"positioners",Qf);var YO={id:"tooltip",_element:xb,positioners:Qf,afterInit(t,e,r){r&&(t.tooltip=new xb({chart:t,options:r}))},beforeUpdate(t,e,r){t.tooltip&&t.tooltip.initialize(r)},reset(t,e,r){t.tooltip&&t.tooltip.initialize(r)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const r={tooltip:e};if(t.notifyPlugins("beforeTooltipDraw",{...r,cancelable:!0})===!1)return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",r)}},afterEvent(t,e){if(t.tooltip){const r=e.replay;t.tooltip.handleEvent(e.event,r,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:VO},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>t!=="filter"&&t!=="itemSort"&&t!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},jO=Object.freeze({__proto__:null,Colors:IO,Decimation:kO,Filler:zO,Legend:UO,SubTitle:WO,Title:HO,Tooltip:YO});const OV=(t,e,r,n)=>(typeof e=="string"?(r=t.push(e)-1,n.unshift({index:r,label:e})):isNaN(e)&&(r=null),r);function FV(t,e,r,n){const i=t.indexOf(e);if(i===-1)return OV(t,e,r,n);const a=t.lastIndexOf(e);return i!==a?r:i}const PV=(t,e)=>t===null?null:wn(Math.round(t),0,e);function lD(t){const e=this.getLabels();return t>=0&&tr.length-1?null:this.getPixelForValue(r[e].value)}getValueForPixel(e){return Math.round(this._startValue+this.getDecimalForPixel(e)*this._valueRange)}getBasePixel(){return this.bottom}}je(Zm,"id","category"),je(Zm,"defaults",{ticks:{callback:lD}});function RV(t,e){const r=[],{bounds:i,step:a,min:s,max:o,precision:u,count:l,maxTicks:c,maxDigits:f,includeBounds:h}=t,p=a||1,g=c-1,{min:m,max:b}=e,y=!or(s),S=!or(o),x=!or(l),_=(b-m)/(f+1);let A=nA((b-m)/g/p)*p,w,C,E,N;if(A<1e-14&&!y&&!S)return[{value:m},{value:b}];N=Math.ceil(b/A)-Math.floor(m/A),N>g&&(A=nA(N*A/g/p)*p),or(u)||(w=Math.pow(10,u),A=Math.ceil(A*w)/w),i==="ticks"?(C=Math.floor(m/A)*A,E=Math.ceil(b/A)*A):(C=m,E=b),y&&S&&a&&Wq((o-s)/a,A/1e3)?(N=Math.round(Math.min((o-s)/A,c)),A=(o-s)/N,C=s,E=o):x?(C=y?s:C,E=S?o:E,N=l-1,A=(E-C)/N):(N=(E-C)/A,sh(N,Math.round(N),A/1e3)?N=Math.round(N):N=Math.ceil(N));const M=Math.max(iA(A),iA(C));w=Math.pow(10,or(u)?M:u),C=Math.round(C*w)/w,E=Math.round(E*w)/w;let O=0;for(y&&(h&&C!==s?(r.push({value:s}),Co)break;r.push({value:F})}return S&&h&&E!==o?r.length&&sh(r[r.length-1].value,o,cD(o,_,t))?r[r.length-1].value=o:r.push({value:o}):(!S||E===o)&&r.push({value:E}),r}function cD(t,e,{horizontal:r,minRotation:n}){const i=Sa(n),a=(r?Math.sin(i):Math.cos(i))||.001,s=.75*e*(""+t).length;return Math.min(e/a,s)}class Km extends jo{constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(e,r){return or(e)||(typeof e=="number"||e instanceof Number)&&!isFinite(+e)?null:+e}handleTickRangeOptions(){const{beginAtZero:e}=this.options,{minDefined:r,maxDefined:n}=this.getUserBounds();let{min:i,max:a}=this;const s=u=>i=r?i:u,o=u=>a=n?a:u;if(e){const u=Xa(i),l=Xa(a);u<0&&l<0?o(0):u>0&&l>0&&s(0)}if(i===a){let u=a===0?1:Math.abs(a*.05);o(a+u),e||s(i-u)}this.min=i,this.max=a}getTickLimit(){const e=this.options.ticks;let{maxTicksLimit:r,stepSize:n}=e,i;return n?(i=Math.ceil(this.max/n)-Math.floor(this.min/n)+1,i>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${n} would result generating up to ${i} ticks. Limiting to 1000.`),i=1e3)):(i=this.computeTickLimit(),r=r||11),r&&(i=Math.min(r,i)),i}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const e=this.options,r=e.ticks;let n=this.getTickLimit();n=Math.max(2,n);const i={maxTicks:n,bounds:e.bounds,min:e.min,max:e.max,precision:r.precision,step:r.stepSize,count:r.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:r.minRotation||0,includeBounds:r.includeBounds!==!1},a=this._range||this,s=RV(i,a);return e.bounds==="ticks"&&WT(s,this,"value"),e.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}configure(){const e=this.ticks;let r=this.min,n=this.max;if(super.configure(),this.options.offset&&e.length){const i=(n-r)/Math.max(e.length-1,1)/2;r-=i,n+=i}this._startValue=r,this._endValue=n,this._valueRange=n-r}getLabelForValue(e){return Kh(e,this.chart.options.locale,this.options.ticks.format)}}class Jm extends Km{determineDataLimits(){const{min:e,max:r}=this.getMinMax(!0);this.min=Vr(e)?e:0,this.max=Vr(r)?r:1,this.handleTickRangeOptions()}computeTickLimit(){const e=this.isHorizontal(),r=e?this.width:this.height,n=Sa(this.options.ticks.minRotation),i=(e?Math.sin(n):Math.cos(n))||.001,a=this._resolveTickFontOptions(0);return Math.ceil(r/Math.min(40,a.lineHeight/i))}getPixelForValue(e){return e===null?NaN:this.getPixelForDecimal((e-this._startValue)/this._valueRange)}getValueForPixel(e){return this._startValue+this.getDecimalForPixel(e)*this._valueRange}}je(Jm,"id","linear"),je(Jm,"defaults",{ticks:{callback:Jh.formatters.numeric}});const Eh=t=>Math.floor(To(t)),Su=(t,e)=>Math.pow(10,Eh(t)+e);function fD(t){return t/Math.pow(10,Eh(t))===1}function hD(t,e,r){const n=Math.pow(10,r),i=Math.floor(t/n);return Math.ceil(e/n)-i}function IV(t,e){const r=e-t;let n=Eh(r);for(;hD(t,e,n)>10;)n++;for(;hD(t,e,n)<10;)n--;return Math.min(n,Eh(t))}function BV(t,{min:e,max:r}){e=Mi(t.min,e);const n=[],i=Eh(e);let a=IV(e,r),s=a<0?Math.pow(10,Math.abs(a)):1;const o=Math.pow(10,a),u=i>a?Math.pow(10,i):0,l=Math.round((e-u)*s)/s,c=Math.floor((e-u)/o/10)*o*10;let f=Math.floor((l-c)/Math.pow(10,a)),h=Mi(t.min,Math.round((u+c+f*Math.pow(10,a))*s)/s);for(;h=10?f=f<15?15:20:f++,f>=20&&(a++,f=2,s=a>=0?1:s),h=Math.round((u+c+f*Math.pow(10,a))*s)/s;const p=Mi(t.max,h);return n.push({value:p,major:fD(p),significand:f}),n}class Qm extends jo{constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(e,r){const n=Km.prototype.parse.apply(this,[e,r]);if(n===0){this._zero=!0;return}return Vr(n)&&n>0?n:null}determineDataLimits(){const{min:e,max:r}=this.getMinMax(!0);this.min=Vr(e)?Math.max(0,e):null,this.max=Vr(r)?Math.max(0,r):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!Vr(this._userMin)&&(this.min=e===Su(this.min,0)?Su(this.min,-1):Su(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:e,maxDefined:r}=this.getUserBounds();let n=this.min,i=this.max;const a=o=>n=e?n:o,s=o=>i=r?i:o;n===i&&(n<=0?(a(1),s(10)):(a(Su(n,-1)),s(Su(i,1)))),n<=0&&a(Su(i,-1)),i<=0&&s(Su(n,1)),this.min=n,this.max=i}buildTicks(){const e=this.options,r={min:this._userMin,max:this._userMax},n=BV(r,this);return e.bounds==="ticks"&&WT(n,this,"value"),e.reverse?(n.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),n}getLabelForValue(e){return e===void 0?"0":Kh(e,this.chart.options.locale,this.options.ticks.format)}configure(){const e=this.min;super.configure(),this._startValue=To(e),this._valueRange=To(this.max)-To(e)}getPixelForValue(e){return(e===void 0||e===0)&&(e=this.min),e===null||isNaN(e)?NaN:this.getPixelForDecimal(e===this.min?0:(To(e)-this._startValue)/this._valueRange)}getValueForPixel(e){const r=this.getDecimalForPixel(e);return Math.pow(10,this._startValue+r*this._valueRange)}}je(Qm,"id","logarithmic"),je(Qm,"defaults",{ticks:{callback:Jh.formatters.logarithmic,major:{enabled:!0}}});function wb(t){const e=t.ticks;if(e.display&&t.display){const r=Yn(e.backdropPadding);return Rt(e.font&&e.font.size,qr.font.size)+r.height}return 0}function kV(t,e,r){return r=Or(r)?r:[r],{w:oU(t,e.string,r),h:r.length*e.lineHeight}}function dD(t,e,r,n,i){return t===n||t===i?{start:e-r/2,end:e+r/2}:ti?{start:e-r,end:e}:{start:e,end:e+r}}function LV(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},r=Object.assign({},e),n=[],i=[],a=t._pointLabels.length,s=t.options.pointLabels,o=s.centerPointLabels?Pr/a:0;for(let u=0;ue.r&&(o=(n.end-e.r)/a,t.r=Math.max(t.r,e.r+o)),i.starte.b&&(u=(i.end-e.b)/s,t.b=Math.max(t.b,e.b+u))}function zV(t,e,r){const n=t.drawingArea,{extra:i,additionalAngle:a,padding:s,size:o}=r,u=t.getPointPosition(e,n+i+s,a),l=Math.round(O1(Oi(u.angle+en))),c=VV(u.y,o.h,l),f=HV(l),h=WV(u.x,o.w,f);return{visible:!0,x:u.x,y:c,textAlign:f,left:h,top:c,right:h+o.w,bottom:c+o.h}}function qV(t,e){if(!e)return!0;const{left:r,top:n,right:i,bottom:a}=t;return!(Rs({x:r,y:n},e)||Rs({x:r,y:a},e)||Rs({x:i,y:n},e)||Rs({x:i,y:a},e))}function UV(t,e,r){const n=[],i=t._pointLabels.length,a=t.options,{centerPointLabels:s,display:o}=a.pointLabels,u={extra:wb(a)/2,additionalAngle:s?Pr/i:0};let l;for(let c=0;c270||r<90)&&(t-=e),t}function YV(t,e,r){const{left:n,top:i,right:a,bottom:s}=r,{backdropColor:o}=e;if(!or(o)){const u=Pu(e.borderRadius),l=Yn(e.backdropPadding);t.fillStyle=o;const c=n-l.left,f=i-l.top,h=a-n+l.width,p=s-i+l.height;Object.values(u).some(g=>g!==0)?(t.beginPath(),Dh(t,{x:c,y:f,w:h,h:p,radius:u}),t.fill()):t.fillRect(c,f,h,p)}}function jV(t,e){const{ctx:r,options:{pointLabels:n}}=t;for(let i=e-1;i>=0;i--){const a=t._pointLabelItems[i];if(!a.visible)continue;const s=n.setContext(t.getPointLabelContext(i));YV(r,s,a);const o=pn(s.font),{x:u,y:l,textAlign:c}=a;zu(r,t._pointLabels[i],u,l+o.lineHeight/2,o,{color:s.color,textAlign:c,textBaseline:"middle"})}}function GO(t,e,r,n){const{ctx:i}=t;if(r)i.arc(t.xCenter,t.yCenter,e,0,Fr);else{let a=t.getPointPosition(0,e);i.moveTo(a.x,a.y);for(let s=1;s{const i=Cr(this.options.pointLabels.callback,[r,n],this);return i||i===0?i:""}).filter((r,n)=>this.chart.getDataVisibility(n))}fit(){const e=this.options;e.display&&e.pointLabels.display?LV(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(e,r,n,i){this.xCenter+=Math.floor((e-r)/2),this.yCenter+=Math.floor((n-i)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(e,r,n,i))}getIndexAngle(e){const r=Fr/(this._pointLabels.length||1),n=this.options.startAngle||0;return Oi(e*r+Sa(n))}getDistanceFromCenterForValue(e){if(or(e))return NaN;const r=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-e)*r:(e-this.min)*r}getValueForDistanceFromCenter(e){if(or(e))return NaN;const r=e/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-r:this.min+r}getPointLabelContext(e){const r=this._pointLabels||[];if(e>=0&&e{if(f!==0){u=this.getDistanceFromCenterForValue(c.value);const h=this.getContext(f),p=i.setContext(h),g=a.setContext(h);GV(this,p,u,s,g)}}),n.display){for(e.save(),o=s-1;o>=0;o--){const c=n.setContext(this.getPointLabelContext(o)),{color:f,lineWidth:h}=c;!h||!f||(e.lineWidth=h,e.strokeStyle=f,e.setLineDash(c.borderDash),e.lineDashOffset=c.borderDashOffset,u=this.getDistanceFromCenterForValue(r.ticks.reverse?this.min:this.max),l=this.getPointPosition(o,u),e.beginPath(),e.moveTo(this.xCenter,this.yCenter),e.lineTo(l.x,l.y),e.stroke())}e.restore()}}drawBorder(){}drawLabels(){const e=this.ctx,r=this.options,n=r.ticks;if(!n.display)return;const i=this.getIndexAngle(0);let a,s;e.save(),e.translate(this.xCenter,this.yCenter),e.rotate(i),e.textAlign="center",e.textBaseline="middle",this.ticks.forEach((o,u)=>{if(u===0&&!r.reverse)return;const l=n.setContext(this.getContext(u)),c=pn(l.font);if(a=this.getDistanceFromCenterForValue(this.ticks[u].value),l.showLabelBackdrop){e.font=c.string,s=e.measureText(o.label).width,e.fillStyle=l.backdropColor;const f=Yn(l.backdropPadding);e.fillRect(-s/2-f.left,-a-c.size/2-f.top,s+f.width,c.size+f.height)}zu(e,o.label,0,-a,c,{color:l.color,strokeColor:l.textStrokeColor,strokeWidth:l.textStrokeWidth})}),e.restore()}drawTitle(){}}je(Ul,"id","radialLinear"),je(Ul,"defaults",{display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Jh.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(e){return e},padding:5,centerPointLabels:!1}}),je(Ul,"defaultRoutes",{"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"}),je(Ul,"descriptors",{angleLines:{_fallback:"grid"}});const eg={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},vi=Object.keys(eg);function pD(t,e){return t-e}function mD(t,e){if(or(e))return null;const r=t._adapter,{parser:n,round:i,isoWeekday:a}=t._parseOpts;let s=e;return typeof n=="function"&&(s=n(s)),Vr(s)||(s=typeof n=="string"?r.parse(s,n):r.parse(s)),s===null?null:(i&&(s=i==="week"&&(ic(a)||a===!0)?r.startOf(s,"isoWeek",a):r.startOf(s,i)),+s)}function vD(t,e,r,n){const i=vi.length;for(let a=vi.indexOf(t);a=vi.indexOf(r);a--){const s=vi[a];if(eg[s].common&&t._adapter.diff(i,n,s)>=e-1)return s}return vi[r?vi.indexOf(r):0]}function KV(t){for(let e=vi.indexOf(t)+1,r=vi.length;e=e?r[n]:r[i];t[a]=!0}}function JV(t,e,r,n){const i=t._adapter,a=+i.startOf(e[0].value,n),s=e[e.length-1].value;let o,u;for(o=a;o<=s;o=+i.add(o,1,n))u=r[o],u>=0&&(e[u].major=!0);return e}function yD(t,e,r){const n=[],i={},a=e.length;let s,o;for(s=0;s+e.value))}initOffsets(e=[]){let r=0,n=0,i,a;this.options.offset&&e.length&&(i=this.getDecimalForValue(e[0]),e.length===1?r=1-i:r=(this.getDecimalForValue(e[1])-i)/2,a=this.getDecimalForValue(e[e.length-1]),e.length===1?n=a:n=(a-this.getDecimalForValue(e[e.length-2]))/2);const s=e.length<3?.5:.25;r=wn(r,0,s),n=wn(n,0,s),this._offsets={start:r,end:n,factor:1/(r+1+n)}}_generate(){const e=this._adapter,r=this.min,n=this.max,i=this.options,a=i.time,s=a.unit||vD(a.minUnit,r,n,this._getLabelCapacity(r)),o=Rt(i.ticks.stepSize,1),u=s==="week"?a.isoWeekday:!1,l=ic(u)||u===!0,c={};let f=r,h,p;if(l&&(f=+e.startOf(f,"isoWeek",u)),f=+e.startOf(f,l?"day":s),e.diff(n,r,s)>1e5*o)throw new Error(r+" and "+n+" are too far apart with stepSize of "+o+" "+s);const g=i.ticks.source==="data"&&this.getDataTimestamps();for(h=f,p=0;h+m)}getLabelForValue(e){const r=this._adapter,n=this.options.time;return n.tooltipFormat?r.format(e,n.tooltipFormat):r.format(e,n.displayFormats.datetime)}format(e,r){const i=this.options.time.displayFormats,a=this._unit,s=r||i[a];return this._adapter.format(e,s)}_tickFormatFunction(e,r,n,i){const a=this.options,s=a.ticks.callback;if(s)return Cr(s,[e,r,n],this);const o=a.time.displayFormats,u=this._unit,l=this._majorUnit,c=u&&o[u],f=l&&o[l],h=n[r],p=l&&f&&h&&h.major;return this._adapter.format(e,i||(p?f:c))}generateTickLabels(e){let r,n,i;for(r=0,n=e.length;r0?o:1}getDataTimestamps(){let e=this._cache.data||[],r,n;if(e.length)return e;const i=this.getMatchingVisibleMetas();if(this._normalized&&i.length)return this._cache.data=i[0].controller.getAllParsedValues(this);for(r=0,n=i.length;r=t[n].pos&&e<=t[i].pos&&({lo:n,hi:i}=Ps(t,"pos",e)),{pos:a,time:o}=t[n],{pos:s,time:u}=t[i]):(e>=t[n].time&&e<=t[i].time&&({lo:n,hi:i}=Ps(t,"time",e)),{time:a,pos:o}=t[n],{time:s,pos:u}=t[i]);const l=s-a;return l?o+(u-o)*(e-a)/l:o}class ev extends oc{constructor(e){super(e),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const e=this._getTimestampsForTable(),r=this._table=this.buildLookupTable(e);this._minPos=jp(r,this.min),this._tableRange=jp(r,this.max)-this._minPos,super.initOffsets(e)}buildLookupTable(e){const{min:r,max:n}=this,i=[],a=[];let s,o,u,l,c;for(s=0,o=e.length;s=r&&l<=n&&i.push(l);if(i.length<2)return[{time:r,pos:0},{time:n,pos:1}];for(s=0,o=i.length;si-a)}_getTimestampsForTable(){let e=this._cache.all||[];if(e.length)return e;const r=this.getDataTimestamps(),n=this.getLabelTimestamps();return r.length&&n.length?e=this.normalize(r.concat(n)):e=r.length?r:n,e=this._cache.all=e,e}getDecimalForValue(e){return(jp(this._table,e)-this._minPos)/this._tableRange}getValueForPixel(e){const r=this._offsets,n=this.getDecimalForPixel(e)/r.factor-r.end;return jp(this._table,n*this._tableRange+this._minPos,!0)}}je(ev,"id","timeseries"),je(ev,"defaults",oc.defaults);var XO=Object.freeze({__proto__:null,CategoryScale:Zm,LinearScale:Jm,LogarithmicScale:Qm,RadialLinearScale:Ul,TimeScale:oc,TimeSeriesScale:ev});const QV=[mO,FO,jO,XO],GAe=Object.freeze(Object.defineProperty({__proto__:null,Animation:hO,Animations:q1,ArcElement:ql,BarController:lh,BarElement:mh,BasePlatform:H1,BasicPlatform:xO,BubbleController:ch,CategoryScale:Zm,Chart:_o,Colors:IO,DatasetController:ia,Decimation:kO,DomPlatform:_O,DoughnutController:Oo,Element:es,Filler:zO,Interaction:gO,Legend:UO,LineController:fh,LineElement:Is,LinearScale:Jm,LogarithmicScale:Qm,PieController:jm,PointElement:ph,PolarAreaController:Xl,RadarController:hh,RadialLinearScale:Ul,Scale:jo,ScatterController:dh,SubTitle:WO,Ticks:Jh,TimeScale:oc,TimeSeriesScale:ev,Title:HO,Tooltip:YO,_adapters:vO,_detectPlatform:AO,animator:Ya,controllers:mO,defaults:qr,elements:FO,layouts:Mn,plugins:jO,registerables:QV,registry:ba,scales:XO},Symbol.toStringTag,{value:"Module"}));var Sb=function(t,e){return Sb=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[i]=n[i])},Sb(t,e)};function sn(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");Sb(t,e);function r(){this.constructor=t}t.prototype=e===null?Object.create(e):(r.prototype=e.prototype,new r)}function eY(t,e,r,n){function i(a){return a instanceof r?a:new r(function(s){s(a)})}return new(r||(r=Promise))(function(a,s){function o(c){try{l(n.next(c))}catch(f){s(f)}}function u(c){try{l(n.throw(c))}catch(f){s(f)}}function l(c){c.done?a(c.value):i(c.value).then(o,u)}l((n=n.apply(t,e||[])).next())})}function Y1(t,e){var r={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},n,i,a,s;return s={next:o(0),throw:o(1),return:o(2)},typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function o(l){return function(c){return u([l,c])}}function u(l){if(n)throw new TypeError("Generator is already executing.");for(;s&&(s=0,l[0]&&(r=0)),r;)try{if(n=1,i&&(a=l[0]&2?i.return:l[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,l[1])).done)return a;switch(i=0,a&&(l=[l[0]&2,a.value]),l[0]){case 0:case 1:a=l;break;case 4:return r.label++,{value:l[1],done:!1};case 5:r.label++,i=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(a=r.trys,!(a=a.length>0&&a[a.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!a||l[1]>a[0]&&l[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function Mr(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),i,a=[],s;try{for(;(e===void 0||e-- >0)&&!(i=n.next()).done;)a.push(i.value)}catch(o){s={error:o}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return a}function Tr(t,e,r){if(r||arguments.length===2)for(var n=0,i=e.length,a;n1||o(h,p)})})}function o(h,p){try{u(n[h](p))}catch(g){f(a[0][3],g)}}function u(h){h.value instanceof Zl?Promise.resolve(h.value.v).then(l,c):f(a[0][2],h)}function l(h){o("next",h)}function c(h){o("throw",h)}function f(h,p){h(p),a.shift(),a.length&&o(a[0][0],a[0][1])}}function rY(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],r;return e?e.call(t):(t=typeof bi=="function"?bi(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(a){r[a]=t[a]&&function(s){return new Promise(function(o,u){s=t[a](s),i(o,u,s.done,s.value)})}}function i(a,s,o,u){Promise.resolve(u).then(function(l){a({value:l,done:o})},s)}}function Ft(t){return typeof t=="function"}function Yu(t){var e=function(n){Error.call(n),n.stack=new Error().stack},r=t(e);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var Nm=Yu(function(t){return function(r){t(this),this.message=r?r.length+` errors occurred during unsubscription: +`):t}function $V(t,e){const{element:r,datasetIndex:n,index:i}=e,a=t.getDatasetMeta(n).controller,{label:s,value:o}=a.getLabelAndValue(i);return{chart:t,label:s,parsed:a.getParsed(i),raw:t.data.datasets[n].data[i],formattedValue:o,dataset:a.getDataset(),dataIndex:i,datasetIndex:n,element:r}}function oD(t,e){const r=t.chart.ctx,{body:n,footer:i,title:a}=t,{boxWidth:s,boxHeight:o}=e,u=pn(e.bodyFont),l=pn(e.titleFont),c=pn(e.footerFont),f=a.length,h=i.length,p=n.length,g=Yn(e.padding);let m=g.height,b=0,y=n.reduce((_,A)=>_+A.before.length+A.lines.length+A.after.length,0);if(y+=t.beforeBody.length+t.afterBody.length,f&&(m+=f*l.lineHeight+(f-1)*e.titleSpacing+e.titleMarginBottom),y){const _=e.displayColors?Math.max(o,u.lineHeight):u.lineHeight;m+=p*_+(y-p)*u.lineHeight+(y-1)*e.bodySpacing}h&&(m+=e.footerMarginTop+h*c.lineHeight+(h-1)*e.footerSpacing);let S=0;const x=function(_){b=Math.max(b,r.measureText(_).width+S)};return r.save(),r.font=l.string,yr(t.title,x),r.font=u.string,yr(t.beforeBody.concat(t.afterBody),x),S=e.displayColors?s+2+e.boxPadding:0,yr(n,_=>{yr(_.before,x),yr(_.lines,x),yr(_.after,x)}),S=0,r.font=c.string,yr(t.footer,x),r.restore(),b+=g.width,{width:b,height:m}}function zV(t,e){const{y:r,height:n}=e;return rt.height-n/2?"bottom":"center"}function qV(t,e,r,n){const{x:i,width:a}=n,s=r.caretSize+r.caretPadding;if(t==="left"&&i+a+s>e.width||t==="right"&&i-a-s<0)return!0}function UV(t,e,r,n){const{x:i,width:a}=r,{width:s,chartArea:{left:o,right:u}}=t;let l="center";return n==="center"?l=i<=(o+u)/2?"left":"right":i<=a/2?l="left":i>=s-a/2&&(l="right"),qV(l,t,e,r)&&(l="center"),l}function uD(t,e,r){const n=r.yAlign||e.yAlign||zV(t,r);return{xAlign:r.xAlign||e.xAlign||UV(t,e,r,n),yAlign:n}}function HV(t,e){let{x:r,width:n}=t;return e==="right"?r-=n:e==="center"&&(r-=n/2),r}function WV(t,e,r){let{y:n,height:i}=t;return e==="top"?n+=r:e==="bottom"?n-=i+r:n-=i/2,n}function lD(t,e,r,n){const{caretSize:i,caretPadding:a,cornerRadius:s}=t,{xAlign:o,yAlign:u}=r,l=i+a,{topLeft:c,topRight:f,bottomLeft:h,bottomRight:p}=Ru(s);let g=HV(e,o);const m=WV(e,u,l);return u==="center"?o==="left"?g+=l:o==="right"&&(g-=l):o==="left"?g-=Math.max(c,h)+i:o==="right"&&(g+=Math.max(f,p)+i),{x:wn(g,0,n.width-e.width),y:wn(m,0,n.height-e.height)}}function Yp(t,e,r){const n=Yn(r.padding);return e==="center"?t.x+t.width/2:e==="right"?t.x+t.width-n.right:t.x+n.left}function cD(t){return Va([],Es(t))}function VV(t,e,r){return Yo(t,{tooltip:e,tooltipItems:r,type:"tooltip"})}function fD(t,e){const r=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return r?t.override(r):t}const ZO={beforeTitle:ws,title(t){if(t.length>0){const e=t[0],r=e.chart.data.labels,n=r?r.length:0;if(this&&this.options&&this.options.mode==="dataset")return e.dataset.label||"";if(e.label)return e.label;if(n>0&&e.dataIndex"u"?ZO[e].call(r,n):i}class Sb extends es{constructor(e){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=e.chart,this.options=e.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(e){this.options=e,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const e=this._cachedAnimations;if(e)return e;const r=this.chart,n=this.options.setContext(this.getContext()),i=n.enabled&&r.options.animation&&n.animations,a=new U1(this.chart,i);return i._cacheable&&(this._cachedAnimations=Object.freeze(a)),a}getContext(){return this.$context||(this.$context=VV(this.chart.getContext(),this,this._tooltipItems))}getTitle(e,r){const{callbacks:n}=r,i=di(n,"beforeTitle",this,e),a=di(n,"title",this,e),s=di(n,"afterTitle",this,e);let o=[];return o=Va(o,Es(i)),o=Va(o,Es(a)),o=Va(o,Es(s)),o}getBeforeBody(e,r){return cD(di(r.callbacks,"beforeBody",this,e))}getBody(e,r){const{callbacks:n}=r,i=[];return yr(e,a=>{const s={before:[],lines:[],after:[]},o=fD(n,a);Va(s.before,Es(di(o,"beforeLabel",this,a))),Va(s.lines,di(o,"label",this,a)),Va(s.after,Es(di(o,"afterLabel",this,a))),i.push(s)}),i}getAfterBody(e,r){return cD(di(r.callbacks,"afterBody",this,e))}getFooter(e,r){const{callbacks:n}=r,i=di(n,"beforeFooter",this,e),a=di(n,"footer",this,e),s=di(n,"afterFooter",this,e);let o=[];return o=Va(o,Es(i)),o=Va(o,Es(a)),o=Va(o,Es(s)),o}_createItems(e){const r=this._active,n=this.chart.data,i=[],a=[],s=[];let o=[],u,l;for(u=0,l=r.length;ue.filter(c,f,h,n))),e.itemSort&&(o=o.sort((c,f)=>e.itemSort(c,f,n))),yr(o,c=>{const f=fD(e.callbacks,c);i.push(di(f,"labelColor",this,c)),a.push(di(f,"labelPointStyle",this,c)),s.push(di(f,"labelTextColor",this,c))}),this.labelColors=i,this.labelPointStyles=a,this.labelTextColors=s,this.dataPoints=o,o}update(e,r){const n=this.options.setContext(this.getContext()),i=this._active;let a,s=[];if(!i.length)this.opacity!==0&&(a={opacity:0});else{const o=th[n.position].call(this,i,this._eventPosition);s=this._createItems(n),this.title=this.getTitle(s,n),this.beforeBody=this.getBeforeBody(s,n),this.body=this.getBody(s,n),this.afterBody=this.getAfterBody(s,n),this.footer=this.getFooter(s,n);const u=this._size=oD(this,n),l=Object.assign({},o,u),c=uD(this.chart,n,l),f=lD(n,l,c,this.chart);this.xAlign=c.xAlign,this.yAlign=c.yAlign,a={opacity:1,x:f.x,y:f.y,width:u.width,height:u.height,caretX:o.x,caretY:o.y}}this._tooltipItems=s,this.$context=void 0,a&&this._resolveAnimations().update(this,a),e&&n.external&&n.external.call(this,{chart:this.chart,tooltip:this,replay:r})}drawCaret(e,r,n,i){const a=this.getCaretPosition(e,n,i);r.lineTo(a.x1,a.y1),r.lineTo(a.x2,a.y2),r.lineTo(a.x3,a.y3)}getCaretPosition(e,r,n){const{xAlign:i,yAlign:a}=this,{caretSize:s,cornerRadius:o}=n,{topLeft:u,topRight:l,bottomLeft:c,bottomRight:f}=Ru(o),{x:h,y:p}=e,{width:g,height:m}=r;let b,y,S,x,_,A;return a==="center"?(_=p+m/2,i==="left"?(b=h,y=b-s,x=_+s,A=_-s):(b=h+g,y=b+s,x=_-s,A=_+s),S=b):(i==="left"?y=h+Math.max(u,c)+s:i==="right"?y=h+g-Math.max(l,f)-s:y=this.caretX,a==="top"?(x=p,_=x-s,b=y-s,S=y+s):(x=p+m,_=x+s,b=y+s,S=y-s),A=x),{x1:b,x2:y,x3:S,y1:x,y2:_,y3:A}}drawTitle(e,r,n){const i=this.title,a=i.length;let s,o,u;if(a){const l=Zl(n.rtl,this.x,this.width);for(e.x=Yp(this,n.titleAlign,n),r.textAlign=l.textAlign(n.titleAlign),r.textBaseline="middle",s=pn(n.titleFont),o=n.titleSpacing,r.fillStyle=n.titleColor,r.font=s.string,u=0;uS!==0)?(e.beginPath(),e.fillStyle=a.multiKeyBackground,Dh(e,{x:m,y:g,w:l,h:u,radius:y}),e.fill(),e.stroke(),e.fillStyle=s.backgroundColor,e.beginPath(),Dh(e,{x:b,y:g+1,w:l-2,h:u-2,radius:y}),e.fill()):(e.fillStyle=a.multiKeyBackground,e.fillRect(m,g,l,u),e.strokeRect(m,g,l,u),e.fillStyle=s.backgroundColor,e.fillRect(b,g+1,l-2,u-2))}e.fillStyle=this.labelTextColors[n]}drawBody(e,r,n){const{body:i}=this,{bodySpacing:a,bodyAlign:s,displayColors:o,boxHeight:u,boxWidth:l,boxPadding:c}=n,f=pn(n.bodyFont);let h=f.lineHeight,p=0;const g=Zl(n.rtl,this.x,this.width),m=function(N){r.fillText(N,g.x(e.x+p),e.y+h/2),e.y+=h+a},b=g.textAlign(s);let y,S,x,_,A,w,C;for(r.textAlign=s,r.textBaseline="middle",r.font=f.string,e.x=Yp(this,b,n),r.fillStyle=n.bodyColor,yr(this.beforeBody,m),p=o&&b!=="right"?s==="center"?l/2+c:l+2+c:0,_=0,w=i.length;_0&&r.stroke()}_updateAnimationTarget(e){const r=this.chart,n=this.$animations,i=n&&n.x,a=n&&n.y;if(i||a){const s=th[e.position].call(this,this._active,this._eventPosition);if(!s)return;const o=this._size=oD(this,e),u=Object.assign({},s,this._size),l=uD(r,e,u),c=lD(e,u,l,r);(i._to!==c.x||a._to!==c.y)&&(this.xAlign=l.xAlign,this.yAlign=l.yAlign,this.width=o.width,this.height=o.height,this.caretX=s.x,this.caretY=s.y,this._resolveAnimations().update(this,c))}}_willRender(){return!!this.opacity}draw(e){const r=this.options.setContext(this.getContext());let n=this.opacity;if(!n)return;this._updateAnimationTarget(r);const i={width:this.width,height:this.height},a={x:this.x,y:this.y};n=Math.abs(n)<.001?0:n;const s=Yn(r.padding),o=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;r.enabled&&o&&(e.save(),e.globalAlpha=n,this.drawBackground(a,e,i,r),hO(e,r.textDirection),a.y+=s.top,this.drawTitle(a,e,r),this.drawBody(a,e,r),this.drawFooter(a,e,r),dO(e,r.textDirection),e.restore())}getActiveElements(){return this._active||[]}setActiveElements(e,r){const n=this._active,i=e.map(({datasetIndex:o,index:u})=>{const l=this.chart.getDatasetMeta(o);if(!l)throw new Error("Cannot find a dataset at index "+o);return{datasetIndex:o,element:l.data[u],index:u}}),a=!Um(n,i),s=this._positionChanged(i,r);(a||s)&&(this._active=i,this._eventPosition=r,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(e,r,n=!0){if(r&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const i=this.options,a=this._active||[],s=this._getActiveElements(e,a,r,n),o=this._positionChanged(s,e),u=r||!Um(s,a)||o;return u&&(this._active=s,(i.enabled||i.external)&&(this._eventPosition={x:e.x,y:e.y},this.update(!0,r))),u}_getActiveElements(e,r,n,i){const a=this.options;if(e.type==="mouseout")return[];if(!i)return r.filter(o=>this.chart.data.datasets[o.datasetIndex]&&this.chart.getDatasetMeta(o.datasetIndex).controller.getParsed(o.index)!==void 0);const s=this.chart.getElementsAtEventForMode(e,a.mode,a,n);return a.reverse&&s.reverse(),s}_positionChanged(e,r){const{caretX:n,caretY:i,options:a}=this,s=th[a.position].call(this,e,r);return s!==!1&&(n!==s.x||i!==s.y)}}je(Sb,"positioners",th);var KO={id:"tooltip",_element:Sb,positioners:th,afterInit(t,e,r){r&&(t.tooltip=new Sb({chart:t,options:r}))},beforeUpdate(t,e,r){t.tooltip&&t.tooltip.initialize(r)},reset(t,e,r){t.tooltip&&t.tooltip.initialize(r)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const r={tooltip:e};if(t.notifyPlugins("beforeTooltipDraw",{...r,cancelable:!0})===!1)return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",r)}},afterEvent(t,e){if(t.tooltip){const r=e.replay;t.tooltip.handleEvent(e.event,r,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:ZO},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>t!=="filter"&&t!=="itemSort"&&t!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},JO=Object.freeze({__proto__:null,Colors:zO,Decimation:UO,Filler:VO,Legend:jO,SubTitle:XO,Title:GO,Tooltip:KO});const YV=(t,e,r,n)=>(typeof e=="string"?(r=t.push(e)-1,n.unshift({index:r,label:e})):isNaN(e)&&(r=null),r);function jV(t,e,r,n){const i=t.indexOf(e);if(i===-1)return YV(t,e,r,n);const a=t.lastIndexOf(e);return i!==a?r:i}const GV=(t,e)=>t===null?null:wn(Math.round(t),0,e);function hD(t){const e=this.getLabels();return t>=0&&tr.length-1?null:this.getPixelForValue(r[e].value)}getValueForPixel(e){return Math.round(this._startValue+this.getDecimalForPixel(e)*this._valueRange)}getBasePixel(){return this.bottom}}je(Zm,"id","category"),je(Zm,"defaults",{ticks:{callback:hD}});function XV(t,e){const r=[],{bounds:i,step:a,min:s,max:o,precision:u,count:l,maxTicks:c,maxDigits:f,includeBounds:h}=t,p=a||1,g=c-1,{min:m,max:b}=e,y=!or(s),S=!or(o),x=!or(l),_=(b-m)/(f+1);let A=sA((b-m)/g/p)*p,w,C,N,E;if(A<1e-14&&!y&&!S)return[{value:m},{value:b}];E=Math.ceil(b/A)-Math.floor(m/A),E>g&&(A=sA(E*A/g/p)*p),or(u)||(w=Math.pow(10,u),A=Math.ceil(A*w)/w),i==="ticks"?(C=Math.floor(m/A)*A,N=Math.ceil(b/A)*A):(C=m,N=b),y&&S&&a&&aU((o-s)/a,A/1e3)?(E=Math.round(Math.min((o-s)/A,c)),A=(o-s)/E,C=s,N=o):x?(C=y?s:C,N=S?o:N,E=l-1,A=(N-C)/E):(E=(N-C)/A,sh(E,Math.round(E),A/1e3)?E=Math.round(E):E=Math.ceil(E));const M=Math.max(oA(A),oA(C));w=Math.pow(10,or(u)?M:u),C=Math.round(C*w)/w,N=Math.round(N*w)/w;let O=0;for(y&&(h&&C!==s?(r.push({value:s}),Co)break;r.push({value:F})}return S&&h&&N!==o?r.length&&sh(r[r.length-1].value,o,dD(o,_,t))?r[r.length-1].value=o:r.push({value:o}):(!S||N===o)&&r.push({value:N}),r}function dD(t,e,{horizontal:r,minRotation:n}){const i=Sa(n),a=(r?Math.sin(i):Math.cos(i))||.001,s=.75*e*(""+t).length;return Math.min(e/a,s)}class Km extends jo{constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(e,r){return or(e)||(typeof e=="number"||e instanceof Number)&&!isFinite(+e)?null:+e}handleTickRangeOptions(){const{beginAtZero:e}=this.options,{minDefined:r,maxDefined:n}=this.getUserBounds();let{min:i,max:a}=this;const s=u=>i=r?i:u,o=u=>a=n?a:u;if(e){const u=Xa(i),l=Xa(a);u<0&&l<0?o(0):u>0&&l>0&&s(0)}if(i===a){let u=a===0?1:Math.abs(a*.05);o(a+u),e||s(i-u)}this.min=i,this.max=a}getTickLimit(){const e=this.options.ticks;let{maxTicksLimit:r,stepSize:n}=e,i;return n?(i=Math.ceil(this.max/n)-Math.floor(this.min/n)+1,i>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${n} would result generating up to ${i} ticks. Limiting to 1000.`),i=1e3)):(i=this.computeTickLimit(),r=r||11),r&&(i=Math.min(r,i)),i}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const e=this.options,r=e.ticks;let n=this.getTickLimit();n=Math.max(2,n);const i={maxTicks:n,bounds:e.bounds,min:e.min,max:e.max,precision:r.precision,step:r.stepSize,count:r.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:r.minRotation||0,includeBounds:r.includeBounds!==!1},a=this._range||this,s=XV(i,a);return e.bounds==="ticks"&&XT(s,this,"value"),e.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}configure(){const e=this.ticks;let r=this.min,n=this.max;if(super.configure(),this.options.offset&&e.length){const i=(n-r)/Math.max(e.length-1,1)/2;r-=i,n+=i}this._startValue=r,this._endValue=n,this._valueRange=n-r}getLabelForValue(e){return Kh(e,this.chart.options.locale,this.options.ticks.format)}}class Jm extends Km{determineDataLimits(){const{min:e,max:r}=this.getMinMax(!0);this.min=Vr(e)?e:0,this.max=Vr(r)?r:1,this.handleTickRangeOptions()}computeTickLimit(){const e=this.isHorizontal(),r=e?this.width:this.height,n=Sa(this.options.ticks.minRotation),i=(e?Math.sin(n):Math.cos(n))||.001,a=this._resolveTickFontOptions(0);return Math.ceil(r/Math.min(40,a.lineHeight/i))}getPixelForValue(e){return e===null?NaN:this.getPixelForDecimal((e-this._startValue)/this._valueRange)}getValueForPixel(e){return this._startValue+this.getDecimalForPixel(e)*this._valueRange}}je(Jm,"id","linear"),je(Jm,"defaults",{ticks:{callback:Jh.formatters.numeric}});const Nh=t=>Math.floor(To(t)),Su=(t,e)=>Math.pow(10,Nh(t)+e);function pD(t){return t/Math.pow(10,Nh(t))===1}function mD(t,e,r){const n=Math.pow(10,r),i=Math.floor(t/n);return Math.ceil(e/n)-i}function ZV(t,e){const r=e-t;let n=Nh(r);for(;mD(t,e,n)>10;)n++;for(;mD(t,e,n)<10;)n--;return Math.min(n,Nh(t))}function KV(t,{min:e,max:r}){e=Mi(t.min,e);const n=[],i=Nh(e);let a=ZV(e,r),s=a<0?Math.pow(10,Math.abs(a)):1;const o=Math.pow(10,a),u=i>a?Math.pow(10,i):0,l=Math.round((e-u)*s)/s,c=Math.floor((e-u)/o/10)*o*10;let f=Math.floor((l-c)/Math.pow(10,a)),h=Mi(t.min,Math.round((u+c+f*Math.pow(10,a))*s)/s);for(;h=10?f=f<15?15:20:f++,f>=20&&(a++,f=2,s=a>=0?1:s),h=Math.round((u+c+f*Math.pow(10,a))*s)/s;const p=Mi(t.max,h);return n.push({value:p,major:pD(p),significand:f}),n}class Qm extends jo{constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(e,r){const n=Km.prototype.parse.apply(this,[e,r]);if(n===0){this._zero=!0;return}return Vr(n)&&n>0?n:null}determineDataLimits(){const{min:e,max:r}=this.getMinMax(!0);this.min=Vr(e)?Math.max(0,e):null,this.max=Vr(r)?Math.max(0,r):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!Vr(this._userMin)&&(this.min=e===Su(this.min,0)?Su(this.min,-1):Su(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:e,maxDefined:r}=this.getUserBounds();let n=this.min,i=this.max;const a=o=>n=e?n:o,s=o=>i=r?i:o;n===i&&(n<=0?(a(1),s(10)):(a(Su(n,-1)),s(Su(i,1)))),n<=0&&a(Su(i,-1)),i<=0&&s(Su(n,1)),this.min=n,this.max=i}buildTicks(){const e=this.options,r={min:this._userMin,max:this._userMax},n=KV(r,this);return e.bounds==="ticks"&&XT(n,this,"value"),e.reverse?(n.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),n}getLabelForValue(e){return e===void 0?"0":Kh(e,this.chart.options.locale,this.options.ticks.format)}configure(){const e=this.min;super.configure(),this._startValue=To(e),this._valueRange=To(this.max)-To(e)}getPixelForValue(e){return(e===void 0||e===0)&&(e=this.min),e===null||isNaN(e)?NaN:this.getPixelForDecimal(e===this.min?0:(To(e)-this._startValue)/this._valueRange)}getValueForPixel(e){const r=this.getDecimalForPixel(e);return Math.pow(10,this._startValue+r*this._valueRange)}}je(Qm,"id","logarithmic"),je(Qm,"defaults",{ticks:{callback:Jh.formatters.logarithmic,major:{enabled:!0}}});function _b(t){const e=t.ticks;if(e.display&&t.display){const r=Yn(e.backdropPadding);return Pt(e.font&&e.font.size,qr.font.size)+r.height}return 0}function JV(t,e,r){return r=Or(r)?r:[r],{w:SU(t,e.string,r),h:r.length*e.lineHeight}}function vD(t,e,r,n,i){return t===n||t===i?{start:e-r/2,end:e+r/2}:ti?{start:e-r,end:e}:{start:e,end:e+r}}function QV(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},r=Object.assign({},e),n=[],i=[],a=t._pointLabels.length,s=t.options.pointLabels,o=s.centerPointLabels?Rr/a:0;for(let u=0;ue.r&&(o=(n.end-e.r)/a,t.r=Math.max(t.r,e.r+o)),i.starte.b&&(u=(i.end-e.b)/s,t.b=Math.max(t.b,e.b+u))}function tY(t,e,r){const n=t.drawingArea,{extra:i,additionalAngle:a,padding:s,size:o}=r,u=t.getPointPosition(e,n+i+s,a),l=Math.round(F1(Oi(u.angle+en))),c=sY(u.y,o.h,l),f=iY(l),h=aY(u.x,o.w,f);return{visible:!0,x:u.x,y:c,textAlign:f,left:h,top:c,right:h+o.w,bottom:c+o.h}}function rY(t,e){if(!e)return!0;const{left:r,top:n,right:i,bottom:a}=t;return!(Ps({x:r,y:n},e)||Ps({x:r,y:a},e)||Ps({x:i,y:n},e)||Ps({x:i,y:a},e))}function nY(t,e,r){const n=[],i=t._pointLabels.length,a=t.options,{centerPointLabels:s,display:o}=a.pointLabels,u={extra:_b(a)/2,additionalAngle:s?Rr/i:0};let l;for(let c=0;c270||r<90)&&(t-=e),t}function oY(t,e,r){const{left:n,top:i,right:a,bottom:s}=r,{backdropColor:o}=e;if(!or(o)){const u=Ru(e.borderRadius),l=Yn(e.backdropPadding);t.fillStyle=o;const c=n-l.left,f=i-l.top,h=a-n+l.width,p=s-i+l.height;Object.values(u).some(g=>g!==0)?(t.beginPath(),Dh(t,{x:c,y:f,w:h,h:p,radius:u}),t.fill()):t.fillRect(c,f,h,p)}}function uY(t,e){const{ctx:r,options:{pointLabels:n}}=t;for(let i=e-1;i>=0;i--){const a=t._pointLabelItems[i];if(!a.visible)continue;const s=n.setContext(t.getPointLabelContext(i));oY(r,s,a);const o=pn(s.font),{x:u,y:l,textAlign:c}=a;zu(r,t._pointLabels[i],u,l+o.lineHeight/2,o,{color:s.color,textAlign:c,textBaseline:"middle"})}}function QO(t,e,r,n){const{ctx:i}=t;if(r)i.arc(t.xCenter,t.yCenter,e,0,Fr);else{let a=t.getPointPosition(0,e);i.moveTo(a.x,a.y);for(let s=1;s{const i=Cr(this.options.pointLabels.callback,[r,n],this);return i||i===0?i:""}).filter((r,n)=>this.chart.getDataVisibility(n))}fit(){const e=this.options;e.display&&e.pointLabels.display?QV(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(e,r,n,i){this.xCenter+=Math.floor((e-r)/2),this.yCenter+=Math.floor((n-i)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(e,r,n,i))}getIndexAngle(e){const r=Fr/(this._pointLabels.length||1),n=this.options.startAngle||0;return Oi(e*r+Sa(n))}getDistanceFromCenterForValue(e){if(or(e))return NaN;const r=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-e)*r:(e-this.min)*r}getValueForDistanceFromCenter(e){if(or(e))return NaN;const r=e/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-r:this.min+r}getPointLabelContext(e){const r=this._pointLabels||[];if(e>=0&&e{if(f!==0){u=this.getDistanceFromCenterForValue(c.value);const h=this.getContext(f),p=i.setContext(h),g=a.setContext(h);lY(this,p,u,s,g)}}),n.display){for(e.save(),o=s-1;o>=0;o--){const c=n.setContext(this.getPointLabelContext(o)),{color:f,lineWidth:h}=c;!h||!f||(e.lineWidth=h,e.strokeStyle=f,e.setLineDash(c.borderDash),e.lineDashOffset=c.borderDashOffset,u=this.getDistanceFromCenterForValue(r.ticks.reverse?this.min:this.max),l=this.getPointPosition(o,u),e.beginPath(),e.moveTo(this.xCenter,this.yCenter),e.lineTo(l.x,l.y),e.stroke())}e.restore()}}drawBorder(){}drawLabels(){const e=this.ctx,r=this.options,n=r.ticks;if(!n.display)return;const i=this.getIndexAngle(0);let a,s;e.save(),e.translate(this.xCenter,this.yCenter),e.rotate(i),e.textAlign="center",e.textBaseline="middle",this.ticks.forEach((o,u)=>{if(u===0&&!r.reverse)return;const l=n.setContext(this.getContext(u)),c=pn(l.font);if(a=this.getDistanceFromCenterForValue(this.ticks[u].value),l.showLabelBackdrop){e.font=c.string,s=e.measureText(o.label).width,e.fillStyle=l.backdropColor;const f=Yn(l.backdropPadding);e.fillRect(-s/2-f.left,-a-c.size/2-f.top,s+f.width,c.size+f.height)}zu(e,o.label,0,-a,c,{color:l.color,strokeColor:l.textStrokeColor,strokeWidth:l.textStrokeWidth})}),e.restore()}drawTitle(){}}je(Ul,"id","radialLinear"),je(Ul,"defaults",{display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Jh.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(e){return e},padding:5,centerPointLabels:!1}}),je(Ul,"defaultRoutes",{"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"}),je(Ul,"descriptors",{angleLines:{_fallback:"grid"}});const rg={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},vi=Object.keys(rg);function gD(t,e){return t-e}function yD(t,e){if(or(e))return null;const r=t._adapter,{parser:n,round:i,isoWeekday:a}=t._parseOpts;let s=e;return typeof n=="function"&&(s=n(s)),Vr(s)||(s=typeof n=="string"?r.parse(s,n):r.parse(s)),s===null?null:(i&&(s=i==="week"&&(sc(a)||a===!0)?r.startOf(s,"isoWeek",a):r.startOf(s,i)),+s)}function bD(t,e,r,n){const i=vi.length;for(let a=vi.indexOf(t);a=vi.indexOf(r);a--){const s=vi[a];if(rg[s].common&&t._adapter.diff(i,n,s)>=e-1)return s}return vi[r?vi.indexOf(r):0]}function hY(t){for(let e=vi.indexOf(t)+1,r=vi.length;e=e?r[n]:r[i];t[a]=!0}}function dY(t,e,r,n){const i=t._adapter,a=+i.startOf(e[0].value,n),s=e[e.length-1].value;let o,u;for(o=a;o<=s;o=+i.add(o,1,n))u=r[o],u>=0&&(e[u].major=!0);return e}function wD(t,e,r){const n=[],i={},a=e.length;let s,o;for(s=0;s+e.value))}initOffsets(e=[]){let r=0,n=0,i,a;this.options.offset&&e.length&&(i=this.getDecimalForValue(e[0]),e.length===1?r=1-i:r=(this.getDecimalForValue(e[1])-i)/2,a=this.getDecimalForValue(e[e.length-1]),e.length===1?n=a:n=(a-this.getDecimalForValue(e[e.length-2]))/2);const s=e.length<3?.5:.25;r=wn(r,0,s),n=wn(n,0,s),this._offsets={start:r,end:n,factor:1/(r+1+n)}}_generate(){const e=this._adapter,r=this.min,n=this.max,i=this.options,a=i.time,s=a.unit||bD(a.minUnit,r,n,this._getLabelCapacity(r)),o=Pt(i.ticks.stepSize,1),u=s==="week"?a.isoWeekday:!1,l=sc(u)||u===!0,c={};let f=r,h,p;if(l&&(f=+e.startOf(f,"isoWeek",u)),f=+e.startOf(f,l?"day":s),e.diff(n,r,s)>1e5*o)throw new Error(r+" and "+n+" are too far apart with stepSize of "+o+" "+s);const g=i.ticks.source==="data"&&this.getDataTimestamps();for(h=f,p=0;h+m)}getLabelForValue(e){const r=this._adapter,n=this.options.time;return n.tooltipFormat?r.format(e,n.tooltipFormat):r.format(e,n.displayFormats.datetime)}format(e,r){const i=this.options.time.displayFormats,a=this._unit,s=r||i[a];return this._adapter.format(e,s)}_tickFormatFunction(e,r,n,i){const a=this.options,s=a.ticks.callback;if(s)return Cr(s,[e,r,n],this);const o=a.time.displayFormats,u=this._unit,l=this._majorUnit,c=u&&o[u],f=l&&o[l],h=n[r],p=l&&f&&h&&h.major;return this._adapter.format(e,i||(p?f:c))}generateTickLabels(e){let r,n,i;for(r=0,n=e.length;r0?o:1}getDataTimestamps(){let e=this._cache.data||[],r,n;if(e.length)return e;const i=this.getMatchingVisibleMetas();if(this._normalized&&i.length)return this._cache.data=i[0].controller.getAllParsedValues(this);for(r=0,n=i.length;r=t[n].pos&&e<=t[i].pos&&({lo:n,hi:i}=Rs(t,"pos",e)),{pos:a,time:o}=t[n],{pos:s,time:u}=t[i]):(e>=t[n].time&&e<=t[i].time&&({lo:n,hi:i}=Rs(t,"time",e)),{time:a,pos:o}=t[n],{time:s,pos:u}=t[i]);const l=s-a;return l?o+(u-o)*(e-a)/l:o}class ev extends lc{constructor(e){super(e),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const e=this._getTimestampsForTable(),r=this._table=this.buildLookupTable(e);this._minPos=jp(r,this.min),this._tableRange=jp(r,this.max)-this._minPos,super.initOffsets(e)}buildLookupTable(e){const{min:r,max:n}=this,i=[],a=[];let s,o,u,l,c;for(s=0,o=e.length;s=r&&l<=n&&i.push(l);if(i.length<2)return[{time:r,pos:0},{time:n,pos:1}];for(s=0,o=i.length;si-a)}_getTimestampsForTable(){let e=this._cache.all||[];if(e.length)return e;const r=this.getDataTimestamps(),n=this.getLabelTimestamps();return r.length&&n.length?e=this.normalize(r.concat(n)):e=r.length?r:n,e=this._cache.all=e,e}getDecimalForValue(e){return(jp(this._table,e)-this._minPos)/this._tableRange}getValueForPixel(e){const r=this._offsets,n=this.getDecimalForPixel(e)/r.factor-r.end;return jp(this._table,n*this._tableRange+this._minPos,!0)}}je(ev,"id","timeseries"),je(ev,"defaults",lc.defaults);var eF=Object.freeze({__proto__:null,CategoryScale:Zm,LinearScale:Jm,LogarithmicScale:Qm,RadialLinearScale:Ul,TimeScale:lc,TimeSeriesScale:ev});const pY=[xO,IO,JO,eF],tF=Object.freeze(Object.defineProperty({__proto__:null,Animation:gO,Animations:U1,ArcElement:ql,BarController:lh,BarElement:mh,BasePlatform:W1,BasicPlatform:DO,BubbleController:ch,CategoryScale:Zm,Chart:_o,Colors:zO,DatasetController:aa,Decimation:UO,DomPlatform:CO,DoughnutController:Oo,Element:es,Filler:VO,Interaction:SO,Legend:jO,LineController:fh,LineElement:ks,LinearScale:Jm,LogarithmicScale:Qm,PieController:jm,PointElement:ph,PolarAreaController:Kl,RadarController:hh,RadialLinearScale:Ul,Scale:jo,ScatterController:dh,SubTitle:XO,Ticks:Jh,TimeScale:lc,TimeSeriesScale:ev,Title:GO,Tooltip:KO,_adapters:wO,_detectPlatform:MO,animator:Ya,controllers:xO,defaults:qr,elements:IO,layouts:Mn,plugins:JO,registerables:pY,registry:ba,scales:eF},Symbol.toStringTag,{value:"Module"}));var Ab=function(t,e){return Ab=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[i]=n[i])},Ab(t,e)};function sn(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");Ab(t,e);function r(){this.constructor=t}t.prototype=e===null?Object.create(e):(r.prototype=e.prototype,new r)}function mY(t,e,r,n){function i(a){return a instanceof r?a:new r(function(s){s(a)})}return new(r||(r=Promise))(function(a,s){function o(c){try{l(n.next(c))}catch(f){s(f)}}function u(c){try{l(n.throw(c))}catch(f){s(f)}}function l(c){c.done?a(c.value):i(c.value).then(o,u)}l((n=n.apply(t,e||[])).next())})}function j1(t,e){var r={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},n,i,a,s;return s={next:o(0),throw:o(1),return:o(2)},typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function o(l){return function(c){return u([l,c])}}function u(l){if(n)throw new TypeError("Generator is already executing.");for(;s&&(s=0,l[0]&&(r=0)),r;)try{if(n=1,i&&(a=l[0]&2?i.return:l[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,l[1])).done)return a;switch(i=0,a&&(l=[l[0]&2,a.value]),l[0]){case 0:case 1:a=l;break;case 4:return r.label++,{value:l[1],done:!1};case 5:r.label++,i=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(a=r.trys,!(a=a.length>0&&a[a.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!a||l[1]>a[0]&&l[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function Mr(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),i,a=[],s;try{for(;(e===void 0||e-- >0)&&!(i=n.next()).done;)a.push(i.value)}catch(o){s={error:o}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return a}function Tr(t,e,r){if(r||arguments.length===2)for(var n=0,i=e.length,a;n1||o(h,p)})})}function o(h,p){try{u(n[h](p))}catch(g){f(a[0][3],g)}}function u(h){h.value instanceof Jl?Promise.resolve(h.value.v).then(l,c):f(a[0][2],h)}function l(h){o("next",h)}function c(h){o("throw",h)}function f(h,p){h(p),a.shift(),a.length&&o(a[0][0],a[0][1])}}function gY(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],r;return e?e.call(t):(t=typeof bi=="function"?bi(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(a){r[a]=t[a]&&function(s){return new Promise(function(o,u){s=t[a](s),i(o,u,s.done,s.value)})}}function i(a,s,o,u){Promise.resolve(u).then(function(l){a({value:l,done:o})},s)}}function Ft(t){return typeof t=="function"}function Yu(t){var e=function(n){Error.call(n),n.stack=new Error().stack},r=t(e);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var Em=Yu(function(t){return function(r){t(this),this.message=r?r.length+` errors occurred during unsubscription: `+r.map(function(n,i){return i+1+") "+n.toString()}).join(` - `):"",this.name="UnsubscriptionError",this.errors=r}});function Vs(t,e){if(t){var r=t.indexOf(e);0<=r&&t.splice(r,1)}}var Si=function(){function t(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return t.prototype.unsubscribe=function(){var e,r,n,i,a;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var o=bi(s),u=o.next();!u.done;u=o.next()){var l=u.value;l.remove(this)}}catch(m){e={error:m}}finally{try{u&&!u.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}else s.remove(this);var c=this.initialTeardown;if(Ft(c))try{c()}catch(m){a=m instanceof Nm?m.errors:[m]}var f=this._finalizers;if(f){this._finalizers=null;try{for(var h=bi(f),p=h.next();!p.done;p=h.next()){var g=p.value;try{bD(g)}catch(m){a=a??[],m instanceof Nm?a=Tr(Tr([],Mr(a)),Mr(m.errors)):a.push(m)}}}catch(m){n={error:m}}finally{try{p&&!p.done&&(i=h.return)&&i.call(h)}finally{if(n)throw n.error}}}if(a)throw new Nm(a)}},t.prototype.add=function(e){var r;if(e&&e!==this)if(this.closed)bD(e);else{if(e instanceof t){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(e)}},t.prototype._hasParent=function(e){var r=this._parentage;return r===e||Array.isArray(r)&&r.includes(e)},t.prototype._addParent=function(e){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(e),r):r?[r,e]:e},t.prototype._removeParent=function(e){var r=this._parentage;r===e?this._parentage=null:Array.isArray(r)&&Vs(r,e)},t.prototype.remove=function(e){var r=this._finalizers;r&&Vs(r,e),e instanceof t&&e._removeParent(this)},t.EMPTY=function(){var e=new t;return e.closed=!0,e}(),t}(),ZO=Si.EMPTY;function KO(t){return t instanceof Si||t&&"closed"in t&&Ft(t.remove)&&Ft(t.add)&&Ft(t.unsubscribe)}function bD(t){Ft(t)?t():t.unsubscribe()}var Go={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},j1={setTimeout:function(t,e){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),e.prototype._trySubscribe=function(r){return this._throwIfClosed(),t.prototype._trySubscribe.call(this,r)},e.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},e.prototype._innerSubscribe=function(r){var n=this,i=this,a=i.hasError,s=i.isStopped,o=i.observers;return a||s?ZO:(this.currentObservers=null,o.push(r),new Si(function(){n.currentObservers=null,Vs(o,r)}))},e.prototype._checkFinalizedStatuses=function(r){var n=this,i=n.hasError,a=n.thrownError,s=n.isStopped;i?r.error(a):s&&r.complete()},e.prototype.asObservable=function(){var r=new Kt;return r.source=this,r},e.create=function(r,n){return new wD(r,n)},e}(Kt),wD=function(t){sn(e,t);function e(r,n){var i=t.call(this)||this;return i.destination=r,i.source=n,i}return e.prototype.next=function(r){var n,i;(i=(n=this.destination)===null||n===void 0?void 0:n.next)===null||i===void 0||i.call(n,r)},e.prototype.error=function(r){var n,i;(i=(n=this.destination)===null||n===void 0?void 0:n.error)===null||i===void 0||i.call(n,r)},e.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},e.prototype._subscribe=function(r){var n,i;return(i=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&i!==void 0?i:ZO},e}(an),K1=function(t){sn(e,t);function e(r){var n=t.call(this)||this;return n._value=r,n}return Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),e.prototype._subscribe=function(r){var n=t.prototype._subscribe.call(this,r);return!n.closed&&r.next(this._value),n},e.prototype.getValue=function(){var r=this,n=r.hasError,i=r.thrownError,a=r._value;if(n)throw i;return this._throwIfClosed(),a},e.prototype.next=function(r){t.prototype.next.call(this,this._value=r)},e}(an),ig={now:function(){return(ig.delegate||Date).now()},delegate:void 0},ag=function(t){sn(e,t);function e(r,n,i){r===void 0&&(r=1/0),n===void 0&&(n=1/0),i===void 0&&(i=ig);var a=t.call(this)||this;return a._bufferSize=r,a._windowTime=n,a._timestampProvider=i,a._buffer=[],a._infiniteTimeWindow=!0,a._infiniteTimeWindow=n===1/0,a._bufferSize=Math.max(1,r),a._windowTime=Math.max(1,n),a}return e.prototype.next=function(r){var n=this,i=n.isStopped,a=n._buffer,s=n._infiniteTimeWindow,o=n._timestampProvider,u=n._windowTime;i||(a.push(r),!s&&a.push(o.now()+u)),this._trimBuffer(),t.prototype.next.call(this,r)},e.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),i=this,a=i._infiniteTimeWindow,s=i._buffer,o=s.slice(),u=0;u0?t.prototype.requestAsyncId.call(this,r,n,i):(r.actions.push(this),r._scheduled||(r._scheduled=Db.setImmediate(r.flush.bind(r,void 0))))},e.prototype.recycleAsyncId=function(r,n,i){var a;if(i===void 0&&(i=0),i!=null?i>0:this.delay>0)return t.prototype.recycleAsyncId.call(this,r,n,i);var s=r.actions;n!=null&&((a=s[s.length-1])===null||a===void 0?void 0:a.id)!==n&&(Db.clearImmediate(n),r._scheduled===n&&(r._scheduled=void 0))},e}(ed),Nb=function(){function t(e,r){r===void 0&&(r=t.now),this.schedulerActionCtor=e,this.now=r}return t.prototype.schedule=function(e,r,n){return r===void 0&&(r=0),new this.schedulerActionCtor(this,e).schedule(n,r)},t.now=ig.now,t}(),td=function(t){sn(e,t);function e(r,n){n===void 0&&(n=Nb.now);var i=t.call(this,r,n)||this;return i.actions=[],i._active=!1,i}return e.prototype.flush=function(r){var n=this.actions;if(this._active){n.push(r);return}var i;this._active=!0;do if(i=r.execute(r.state,r.delay))break;while(r=n.shift());if(this._active=!1,i){for(;r=n.shift();)r.unsubscribe();throw i}},e}(Nb),xY=function(t){sn(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var i=this.actions,a;r=r||i.shift();do if(a=r.execute(r.state,r.delay))break;while((r=i[0])&&r.id===n&&i.shift());if(this._active=!1,a){for(;(r=i[0])&&r.id===n&&i.shift();)r.unsubscribe();throw a}},e}(td),sF=new xY(bY),wY=sF,oa=new td(ed),Q1=oa,SY=function(t){sn(e,t);function e(r,n){var i=t.call(this,r,n)||this;return i.scheduler=r,i.work=n,i}return e.prototype.schedule=function(r,n){return n===void 0&&(n=0),n>0?t.prototype.schedule.call(this,r,n):(this.delay=n,this.state=r,this.scheduler.flush(this),this)},e.prototype.execute=function(r,n){return n>0||this.closed?t.prototype.execute.call(this,r,n):this._execute(r,n)},e.prototype.requestAsyncId=function(r,n,i){return i===void 0&&(i=0),i!=null&&i>0||i==null&&this.delay>0?t.prototype.requestAsyncId.call(this,r,n,i):(r.flush(this),0)},e}(ed),_Y=function(t){sn(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(td),oF=new _Y(SY),AY=oF,DY=function(t){sn(e,t);function e(r,n){var i=t.call(this,r,n)||this;return i.scheduler=r,i.work=n,i}return e.prototype.requestAsyncId=function(r,n,i){return i===void 0&&(i=0),i!==null&&i>0?t.prototype.requestAsyncId.call(this,r,n,i):(r.actions.push(this),r._scheduled||(r._scheduled=lc.requestAnimationFrame(function(){return r.flush(void 0)})))},e.prototype.recycleAsyncId=function(r,n,i){var a;if(i===void 0&&(i=0),i!=null?i>0:this.delay>0)return t.prototype.recycleAsyncId.call(this,r,n,i);var s=r.actions;n!=null&&((a=s[s.length-1])===null||a===void 0?void 0:a.id)!==n&&(lc.cancelAnimationFrame(n),r._scheduled=void 0)},e}(ed),NY=function(t){sn(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var i=this.actions,a;r=r||i.shift();do if(a=r.execute(r.state,r.delay))break;while((r=i[0])&&r.id===n&&i.shift());if(this._active=!1,a){for(;(r=i[0])&&r.id===n&&i.shift();)r.unsubscribe();throw a}},e}(td),uF=new NY(DY),EY=uF,CY=function(t){sn(e,t);function e(r,n){r===void 0&&(r=lF),n===void 0&&(n=1/0);var i=t.call(this,r,function(){return i.frame})||this;return i.maxFrames=n,i.frame=0,i.index=-1,i}return e.prototype.flush=function(){for(var r=this,n=r.actions,i=r.maxFrames,a,s;(s=n[0])&&s.delay<=i&&(n.shift(),this.frame=s.delay,!(a=s.execute(s.state,s.delay))););if(a){for(;s=n.shift();)s.unsubscribe();throw a}},e.frameTimeFactor=10,e}(td),lF=function(t){sn(e,t);function e(r,n,i){i===void 0&&(i=r.index+=1);var a=t.call(this,r,n)||this;return a.scheduler=r,a.work=n,a.index=i,a.active=!0,a.index=r.index=i,a}return e.prototype.schedule=function(r,n){if(n===void 0&&(n=0),Number.isFinite(n)){if(!this.id)return t.prototype.schedule.call(this,r,n);this.active=!1;var i=new e(this.scheduler,this.work);return this.add(i),i.schedule(r,n)}else return Si.EMPTY},e.prototype.requestAsyncId=function(r,n,i){i===void 0&&(i=0),this.delay=r.frame+i;var a=r.actions;return a.push(this),a.sort(e.sortActions),1},e.prototype.recycleAsyncId=function(r,n,i){},e.prototype._execute=function(r,n){if(this.active===!0)return t.prototype._execute.call(this,r,n)},e.sortActions=function(r,n){return r.delay===n.delay?r.index===n.index?0:r.index>n.index?1:-1:r.delay>n.delay?1:-1},e}(ed),ts=new Kt(function(t){return t.complete()});function MY(t){return t?TY(t):ts}function TY(t){return new Kt(function(e){return t.schedule(function(){return e.complete()})})}function sg(t){return t&&Ft(t.schedule)}function ex(t){return t[t.length-1]}function rd(t){return Ft(ex(t))?t.pop():void 0}function Xs(t){return sg(ex(t))?t.pop():void 0}function cF(t,e){return typeof ex(t)=="number"?t.pop():e}var tx=function(t){return t&&typeof t.length=="number"&&typeof t!="function"};function fF(t){return Ft(t==null?void 0:t.then)}function hF(t){return Ft(t[rg])}function dF(t){return Symbol.asyncIterator&&Ft(t==null?void 0:t[Symbol.asyncIterator])}function pF(t){return new TypeError("You provided "+(t!==null&&typeof t=="object"?"an invalid object":"'"+t+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function OY(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var mF=OY();function vF(t){return Ft(t==null?void 0:t[mF])}function gF(t){return tY(this,arguments,function(){var r,n,i,a;return Y1(this,function(s){switch(s.label){case 0:r=t.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,Zl(r.read())];case 3:return n=s.sent(),i=n.value,a=n.done,a?[4,Zl(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,Zl(i)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function yF(t){return Ft(t==null?void 0:t.getReader)}function wt(t){if(t instanceof Kt)return t;if(t!=null){if(hF(t))return FY(t);if(tx(t))return PY(t);if(fF(t))return RY(t);if(dF(t))return bF(t);if(vF(t))return IY(t);if(yF(t))return BY(t)}throw pF(t)}function FY(t){return new Kt(function(e){var r=t[rg]();if(Ft(r.subscribe))return r.subscribe(e);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function PY(t){return new Kt(function(e){for(var r=0;r0&&y(i)},void 0,void 0,function(){g!=null&&g.closed||g==null||g.unsubscribe(),m=null})),!b&&y(n!=null?typeof n=="number"?n:+n-u.now():i)})}function VY(t){throw new EF(t)}function Gu(t,e){return tt(function(r,n){var i=0;r.subscribe(Ke(n,function(a){n.next(t.call(e,a,i++))}))})}var YY=Array.isArray;function jY(t,e){return YY(e)?t.apply(void 0,Tr([],Mr(e))):t(e)}function Xu(t){return Gu(function(e){return jY(t,e)})}function tv(t,e,r,n){if(r)if(sg(r))n=r;else return function(){for(var i=[],a=0;a=0?xi(l,a,p,s,!0):f=!0,p();var g=Ke(l,function(m){var b,y,S=c.slice();try{for(var x=bi(S),_=x.next();!_.done;_=x.next()){var A=_.value,w=A.buffer;w.push(m),o<=w.length&&h(A)}}catch(C){b={error:C}}finally{try{_&&!_.done&&(y=x.return)&&y.call(x)}finally{if(b)throw b.error}}},function(){for(;c!=null&&c.length;)l.next(c.shift().buffer);g==null||g.unsubscribe(),l.complete(),l.unsubscribe()},void 0,function(){return c=null});u.subscribe(g)})}function Dj(t,e){return tt(function(r,n){var i=[];wt(t).subscribe(Ke(n,function(a){var s=[];i.push(s);var o=new Si,u=function(){Vs(i,s),n.next(s),o.unsubscribe()};o.add(wt(e(a)).subscribe(Ke(n,u,nn)))},nn)),r.subscribe(Ke(n,function(a){var s,o;try{for(var u=bi(i),l=u.next();!l.done;l=u.next()){var c=l.value;c.push(a)}}catch(f){s={error:f}}finally{try{l&&!l.done&&(o=u.return)&&o.call(u)}finally{if(s)throw s.error}}},function(){for(;i.length>0;)n.next(i.shift());n.complete()}))})}function Nj(t){return tt(function(e,r){var n=null,i=null,a=function(){i==null||i.unsubscribe();var s=n;n=[],s&&r.next(s),wt(t()).subscribe(i=Ke(r,a,nn))};a(),e.subscribe(Ke(r,function(s){return n==null?void 0:n.push(s)},function(){n&&r.next(n),r.complete()},void 0,function(){return n=i=null}))})}function $F(t){return tt(function(e,r){var n=null,i=!1,a;n=e.subscribe(Ke(r,void 0,void 0,function(s){a=wt(t(s,$F(t)(e))),n?(n.unsubscribe(),n=null,a.subscribe(r)):i=!0})),i&&(n.unsubscribe(),n=null,a.subscribe(r))})}function zF(t,e,r,n,i){return function(a,s){var o=r,u=e,l=0;a.subscribe(Ke(s,function(c){var f=l++;u=o?t(u,c,f):(o=!0,c),n&&s.next(u)},i&&function(){o&&s.next(u),s.complete()}))}}function nd(t,e){return tt(zF(t,e,arguments.length>=2,!1,!0))}var Ej=function(t,e){return t.push(e),t};function qF(){return tt(function(t,e){nd(Ej,[])(t).subscribe(e)})}function UF(t,e){return X1(qF(),Ca(function(r){return t(r)}),e?Xu(e):An)}function HF(t){return UF(OF,t)}var Cj=HF;function WF(){for(var t=[],e=0;e=2;return function(n){return n.pipe(qu(function(i,a){return a===t}),Mh(1),r?fg(e):hg(function(){return new Cb}))}}function Vj(){for(var t=[],e=0;e=2;return function(n){return n.pipe(t?qu(function(i,a){return t(i,a,n)}):An,Mh(1),r?fg(e):hg(function(){return new ju}))}}function Qj(t,e,r,n){return tt(function(i,a){var s;!e||typeof e=="function"?s=e:(r=e.duration,s=e.element,n=e.connector);var o=new Map,u=function(g){o.forEach(g),g(a)},l=function(g){return u(function(m){return m.error(g)})},c=0,f=!1,h=new Z1(a,function(g){try{var m=t(g),b=o.get(m);if(!b){o.set(m,b=n?n():new an);var y=p(m,b);if(a.next(y),r){var S=Ke(b,function(){b.complete(),S==null||S.unsubscribe()},void 0,void 0,function(){return o.delete(m)});h.add(wt(r(y)).subscribe(S))}}b.next(s?s(g):g)}catch(x){l(x)}},function(){return u(function(g){return g.complete()})},l,function(){return o.clear()},function(){return f=!0,c===0});i.subscribe(h);function p(g,m){var b=new Kt(function(y){c++;var S=m.subscribe(y);return function(){S.unsubscribe(),--c===0&&f&&h.unsubscribe()}});return b.key=g,b}})}function eG(){return tt(function(t,e){t.subscribe(Ke(e,function(){e.next(!1),e.complete()},function(){e.next(!0),e.complete()}))})}function ZF(t){return t<=0?function(){return ts}:tt(function(e,r){var n=[];e.subscribe(Ke(r,function(i){n.push(i),t=2;return function(n){return n.pipe(t?qu(function(i,a){return t(i,a,n)}):An,ZF(1),r?fg(e):hg(function(){return new ju}))}}function rG(){return tt(function(t,e){t.subscribe(Ke(e,function(r){e.next(Cm.createNext(r))},function(){e.next(Cm.createComplete()),e.complete()},function(r){e.next(Cm.createError(r)),e.complete()}))})}function nG(t){return nd(Ft(t)?function(e,r){return t(e,r)>0?e:r}:function(e,r){return e>r?e:r})}var iG=Ca;function aG(t,e,r){return r===void 0&&(r=1/0),Ft(e)?Ca(function(){return t},e,r):(typeof e=="number"&&(r=e),Ca(function(){return t},r))}function sG(t,e,r){return r===void 0&&(r=1/0),tt(function(n,i){var a=e;return ix(n,i,function(s,o){return t(a,s,o)},r,function(s){a=s},!1,void 0,function(){return a=null})})}function oG(){for(var t=[],e=0;e=2,!0))}function AG(t,e){return e===void 0&&(e=function(r,n){return r===n}),tt(function(r,n){var i=DD(),a=DD(),s=function(u){n.next(u),n.complete()},o=function(u,l){var c=Ke(n,function(f){var h=l.buffer,p=l.complete;h.length===0?p?s(!1):u.buffer.push(f):!e(f,h.shift())&&s(!1)},function(){u.complete=!0;var f=l.complete,h=l.buffer;f&&s(h.length===0),c==null||c.unsubscribe()});return c};r.subscribe(o(i,a)),wt(t).subscribe(o(a,i))})}function DD(){return{buffer:[],complete:!1}}function JF(t){t===void 0&&(t={});var e=t.connector,r=e===void 0?function(){return new an}:e,n=t.resetOnError,i=n===void 0?!0:n,a=t.resetOnComplete,s=a===void 0?!0:a,o=t.resetOnRefCountZero,u=o===void 0?!0:o;return function(l){var c,f,h,p=0,g=!1,m=!1,b=function(){f==null||f.unsubscribe(),f=void 0},y=function(){b(),c=h=void 0,g=m=!1},S=function(){var x=c;y(),x==null||x.unsubscribe()};return tt(function(x,_){p++,!m&&!g&&b();var A=h=h??r();_.add(function(){p--,p===0&&!m&&!g&&(f=Ry(S,u))}),A.subscribe(_),!c&&p>0&&(c=new uc({next:function(w){return A.next(w)},error:function(w){m=!0,b(),f=Ry(y,i,w),A.error(w)},complete:function(){g=!0,b(),f=Ry(y,s),A.complete()}}),wt(x).subscribe(c))})(l)}}function Ry(t,e){for(var r=[],n=2;n0?e:t;return tt(function(n,i){var a=[new an],s=[],o=0;i.next(a[0].asObservable()),n.subscribe(Ke(i,function(u){var l,c;try{for(var f=bi(a),h=f.next();!h.done;h=f.next()){var p=h.value;p.next(u)}}catch(b){l={error:b}}finally{try{h&&!h.done&&(c=f.return)&&c.call(f)}finally{if(l)throw l.error}}var g=o-t+1;if(g>=0&&g%r===0&&a.shift().complete(),++o%r===0){var m=new an;a.push(m),i.next(m.asObservable())}},function(){for(;a.length>0;)a.shift().complete();i.complete()},function(u){for(;a.length>0;)a.shift().error(u);i.error(u)},function(){s=null,a=null}))})}function VG(t){for(var e,r,n=[],i=1;i=0?xi(l,a,p,s,!0):f=!0,p();var g=function(b){return c.slice().forEach(b)},m=function(b){g(function(y){var S=y.window;return b(S)}),b(l),l.unsubscribe()};return u.subscribe(Ke(l,function(b){g(function(y){y.window.next(b),o<=++y.seen&&h(y)})},function(){return m(function(b){return b.complete()})},function(b){return m(function(y){return y.error(b)})})),function(){c=null}})}function YG(t,e){return tt(function(r,n){var i=[],a=function(s){for(;00},enumerable:!1,configurable:!0}),e.prototype._trySubscribe=function(r){return this._throwIfClosed(),t.prototype._trySubscribe.call(this,r)},e.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},e.prototype._innerSubscribe=function(r){var n=this,i=this,a=i.hasError,s=i.isStopped,o=i.observers;return a||s?rF:(this.currentObservers=null,o.push(r),new Si(function(){n.currentObservers=null,Vs(o,r)}))},e.prototype._checkFinalizedStatuses=function(r){var n=this,i=n.hasError,a=n.thrownError,s=n.isStopped;i?r.error(a):s&&r.complete()},e.prototype.asObservable=function(){var r=new Kt;return r.source=this,r},e.create=function(r,n){return new AD(r,n)},e}(Kt),AD=function(t){sn(e,t);function e(r,n){var i=t.call(this)||this;return i.destination=r,i.source=n,i}return e.prototype.next=function(r){var n,i;(i=(n=this.destination)===null||n===void 0?void 0:n.next)===null||i===void 0||i.call(n,r)},e.prototype.error=function(r){var n,i;(i=(n=this.destination)===null||n===void 0?void 0:n.error)===null||i===void 0||i.call(n,r)},e.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},e.prototype._subscribe=function(r){var n,i;return(i=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&i!==void 0?i:rF},e}(an),J1=function(t){sn(e,t);function e(r){var n=t.call(this)||this;return n._value=r,n}return Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),e.prototype._subscribe=function(r){var n=t.prototype._subscribe.call(this,r);return!n.closed&&r.next(this._value),n},e.prototype.getValue=function(){var r=this,n=r.hasError,i=r.thrownError,a=r._value;if(n)throw i;return this._throwIfClosed(),a},e.prototype.next=function(r){t.prototype.next.call(this,this._value=r)},e}(an),sg={now:function(){return(sg.delegate||Date).now()},delegate:void 0},og=function(t){sn(e,t);function e(r,n,i){r===void 0&&(r=1/0),n===void 0&&(n=1/0),i===void 0&&(i=sg);var a=t.call(this)||this;return a._bufferSize=r,a._windowTime=n,a._timestampProvider=i,a._buffer=[],a._infiniteTimeWindow=!0,a._infiniteTimeWindow=n===1/0,a._bufferSize=Math.max(1,r),a._windowTime=Math.max(1,n),a}return e.prototype.next=function(r){var n=this,i=n.isStopped,a=n._buffer,s=n._infiniteTimeWindow,o=n._timestampProvider,u=n._windowTime;i||(a.push(r),!s&&a.push(o.now()+u)),this._trimBuffer(),t.prototype.next.call(this,r)},e.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),i=this,a=i._infiniteTimeWindow,s=i._buffer,o=s.slice(),u=0;u0?t.prototype.requestAsyncId.call(this,r,n,i):(r.actions.push(this),r._scheduled||(r._scheduled=Nb.setImmediate(r.flush.bind(r,void 0))))},e.prototype.recycleAsyncId=function(r,n,i){var a;if(i===void 0&&(i=0),i!=null?i>0:this.delay>0)return t.prototype.recycleAsyncId.call(this,r,n,i);var s=r.actions;n!=null&&((a=s[s.length-1])===null||a===void 0?void 0:a.id)!==n&&(Nb.clearImmediate(n),r._scheduled===n&&(r._scheduled=void 0))},e}(ed),Cb=function(){function t(e,r){r===void 0&&(r=t.now),this.schedulerActionCtor=e,this.now=r}return t.prototype.schedule=function(e,r,n){return r===void 0&&(r=0),new this.schedulerActionCtor(this,e).schedule(n,r)},t.now=sg.now,t}(),td=function(t){sn(e,t);function e(r,n){n===void 0&&(n=Cb.now);var i=t.call(this,r,n)||this;return i.actions=[],i._active=!1,i}return e.prototype.flush=function(r){var n=this.actions;if(this._active){n.push(r);return}var i;this._active=!0;do if(i=r.execute(r.state,r.delay))break;while(r=n.shift());if(this._active=!1,i){for(;r=n.shift();)r.unsubscribe();throw i}},e}(Cb),kY=function(t){sn(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var i=this.actions,a;r=r||i.shift();do if(a=r.execute(r.state,r.delay))break;while((r=i[0])&&r.id===n&&i.shift());if(this._active=!1,a){for(;(r=i[0])&&r.id===n&&i.shift();)r.unsubscribe();throw a}},e}(td),hF=new kY(PY),BY=hF,ua=new td(ed),ex=ua,IY=function(t){sn(e,t);function e(r,n){var i=t.call(this,r,n)||this;return i.scheduler=r,i.work=n,i}return e.prototype.schedule=function(r,n){return n===void 0&&(n=0),n>0?t.prototype.schedule.call(this,r,n):(this.delay=n,this.state=r,this.scheduler.flush(this),this)},e.prototype.execute=function(r,n){return n>0||this.closed?t.prototype.execute.call(this,r,n):this._execute(r,n)},e.prototype.requestAsyncId=function(r,n,i){return i===void 0&&(i=0),i!=null&&i>0||i==null&&this.delay>0?t.prototype.requestAsyncId.call(this,r,n,i):(r.flush(this),0)},e}(ed),LY=function(t){sn(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(td),dF=new LY(IY),$Y=dF,zY=function(t){sn(e,t);function e(r,n){var i=t.call(this,r,n)||this;return i.scheduler=r,i.work=n,i}return e.prototype.requestAsyncId=function(r,n,i){return i===void 0&&(i=0),i!==null&&i>0?t.prototype.requestAsyncId.call(this,r,n,i):(r.actions.push(this),r._scheduled||(r._scheduled=fc.requestAnimationFrame(function(){return r.flush(void 0)})))},e.prototype.recycleAsyncId=function(r,n,i){var a;if(i===void 0&&(i=0),i!=null?i>0:this.delay>0)return t.prototype.recycleAsyncId.call(this,r,n,i);var s=r.actions;n!=null&&((a=s[s.length-1])===null||a===void 0?void 0:a.id)!==n&&(fc.cancelAnimationFrame(n),r._scheduled=void 0)},e}(ed),qY=function(t){sn(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var i=this.actions,a;r=r||i.shift();do if(a=r.execute(r.state,r.delay))break;while((r=i[0])&&r.id===n&&i.shift());if(this._active=!1,a){for(;(r=i[0])&&r.id===n&&i.shift();)r.unsubscribe();throw a}},e}(td),pF=new qY(zY),UY=pF,HY=function(t){sn(e,t);function e(r,n){r===void 0&&(r=mF),n===void 0&&(n=1/0);var i=t.call(this,r,function(){return i.frame})||this;return i.maxFrames=n,i.frame=0,i.index=-1,i}return e.prototype.flush=function(){for(var r=this,n=r.actions,i=r.maxFrames,a,s;(s=n[0])&&s.delay<=i&&(n.shift(),this.frame=s.delay,!(a=s.execute(s.state,s.delay))););if(a){for(;s=n.shift();)s.unsubscribe();throw a}},e.frameTimeFactor=10,e}(td),mF=function(t){sn(e,t);function e(r,n,i){i===void 0&&(i=r.index+=1);var a=t.call(this,r,n)||this;return a.scheduler=r,a.work=n,a.index=i,a.active=!0,a.index=r.index=i,a}return e.prototype.schedule=function(r,n){if(n===void 0&&(n=0),Number.isFinite(n)){if(!this.id)return t.prototype.schedule.call(this,r,n);this.active=!1;var i=new e(this.scheduler,this.work);return this.add(i),i.schedule(r,n)}else return Si.EMPTY},e.prototype.requestAsyncId=function(r,n,i){i===void 0&&(i=0),this.delay=r.frame+i;var a=r.actions;return a.push(this),a.sort(e.sortActions),1},e.prototype.recycleAsyncId=function(r,n,i){},e.prototype._execute=function(r,n){if(this.active===!0)return t.prototype._execute.call(this,r,n)},e.sortActions=function(r,n){return r.delay===n.delay?r.index===n.index?0:r.index>n.index?1:-1:r.delay>n.delay?1:-1},e}(ed),ts=new Kt(function(t){return t.complete()});function WY(t){return t?VY(t):ts}function VY(t){return new Kt(function(e){return t.schedule(function(){return e.complete()})})}function ug(t){return t&&Ft(t.schedule)}function tx(t){return t[t.length-1]}function rd(t){return Ft(tx(t))?t.pop():void 0}function Xs(t){return ug(tx(t))?t.pop():void 0}function vF(t,e){return typeof tx(t)=="number"?t.pop():e}var rx=function(t){return t&&typeof t.length=="number"&&typeof t!="function"};function gF(t){return Ft(t==null?void 0:t.then)}function yF(t){return Ft(t[ig])}function bF(t){return Symbol.asyncIterator&&Ft(t==null?void 0:t[Symbol.asyncIterator])}function xF(t){return new TypeError("You provided "+(t!==null&&typeof t=="object"?"an invalid object":"'"+t+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function YY(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var wF=YY();function SF(t){return Ft(t==null?void 0:t[wF])}function _F(t){return vY(this,arguments,function(){var r,n,i,a;return j1(this,function(s){switch(s.label){case 0:r=t.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,Jl(r.read())];case 3:return n=s.sent(),i=n.value,a=n.done,a?[4,Jl(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,Jl(i)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function AF(t){return Ft(t==null?void 0:t.getReader)}function wt(t){if(t instanceof Kt)return t;if(t!=null){if(yF(t))return jY(t);if(rx(t))return GY(t);if(gF(t))return XY(t);if(bF(t))return DF(t);if(SF(t))return ZY(t);if(AF(t))return KY(t)}throw xF(t)}function jY(t){return new Kt(function(e){var r=t[ig]();if(Ft(r.subscribe))return r.subscribe(e);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function GY(t){return new Kt(function(e){for(var r=0;r0&&y(i)},void 0,void 0,function(){g!=null&&g.closed||g==null||g.unsubscribe(),m=null})),!b&&y(n!=null?typeof n=="number"?n:+n-u.now():i)})}function sj(t){throw new RF(t)}function Gu(t,e){return tt(function(r,n){var i=0;r.subscribe(Ke(n,function(a){n.next(t.call(e,a,i++))}))})}var oj=Array.isArray;function uj(t,e){return oj(e)?t.apply(void 0,Tr([],Mr(e))):t(e)}function Xu(t){return Gu(function(e){return uj(t,e)})}function tv(t,e,r,n){if(r)if(ug(r))n=r;else return function(){for(var i=[],a=0;a=0?xi(l,a,p,s,!0):f=!0,p();var g=Ke(l,function(m){var b,y,S=c.slice();try{for(var x=bi(S),_=x.next();!_.done;_=x.next()){var A=_.value,w=A.buffer;w.push(m),o<=w.length&&h(A)}}catch(C){b={error:C}}finally{try{_&&!_.done&&(y=x.return)&&y.call(x)}finally{if(b)throw b.error}}},function(){for(;c!=null&&c.length;)l.next(c.shift().buffer);g==null||g.unsubscribe(),l.complete(),l.unsubscribe()},void 0,function(){return c=null});u.subscribe(g)})}function zj(t,e){return tt(function(r,n){var i=[];wt(t).subscribe(Ke(n,function(a){var s=[];i.push(s);var o=new Si,u=function(){Vs(i,s),n.next(s),o.unsubscribe()};o.add(wt(e(a)).subscribe(Ke(n,u,nn)))},nn)),r.subscribe(Ke(n,function(a){var s,o;try{for(var u=bi(i),l=u.next();!l.done;l=u.next()){var c=l.value;c.push(a)}}catch(f){s={error:f}}finally{try{l&&!l.done&&(o=u.return)&&o.call(u)}finally{if(s)throw s.error}}},function(){for(;i.length>0;)n.next(i.shift());n.complete()}))})}function qj(t){return tt(function(e,r){var n=null,i=null,a=function(){i==null||i.unsubscribe();var s=n;n=[],s&&r.next(s),wt(t()).subscribe(i=Ke(r,a,nn))};a(),e.subscribe(Ke(r,function(s){return n==null?void 0:n.push(s)},function(){n&&r.next(n),r.complete()},void 0,function(){return n=i=null}))})}function VF(t){return tt(function(e,r){var n=null,i=!1,a;n=e.subscribe(Ke(r,void 0,void 0,function(s){a=wt(t(s,VF(t)(e))),n?(n.unsubscribe(),n=null,a.subscribe(r)):i=!0})),i&&(n.unsubscribe(),n=null,a.subscribe(r))})}function YF(t,e,r,n,i){return function(a,s){var o=r,u=e,l=0;a.subscribe(Ke(s,function(c){var f=l++;u=o?t(u,c,f):(o=!0,c),n&&s.next(u)},i&&function(){o&&s.next(u),s.complete()}))}}function nd(t,e){return tt(YF(t,e,arguments.length>=2,!1,!0))}var Uj=function(t,e){return t.push(e),t};function jF(){return tt(function(t,e){nd(Uj,[])(t).subscribe(e)})}function GF(t,e){return Z1(jF(),Ca(function(r){return t(r)}),e?Xu(e):An)}function XF(t){return GF(IF,t)}var Hj=XF;function ZF(){for(var t=[],e=0;e=2;return function(n){return n.pipe(qu(function(i,a){return a===t}),Mh(1),r?dg(e):pg(function(){return new Tb}))}}function sG(){for(var t=[],e=0;e=2;return function(n){return n.pipe(t?qu(function(i,a){return t(i,a,n)}):An,Mh(1),r?dg(e):pg(function(){return new ju}))}}function pG(t,e,r,n){return tt(function(i,a){var s;!e||typeof e=="function"?s=e:(r=e.duration,s=e.element,n=e.connector);var o=new Map,u=function(g){o.forEach(g),g(a)},l=function(g){return u(function(m){return m.error(g)})},c=0,f=!1,h=new K1(a,function(g){try{var m=t(g),b=o.get(m);if(!b){o.set(m,b=n?n():new an);var y=p(m,b);if(a.next(y),r){var S=Ke(b,function(){b.complete(),S==null||S.unsubscribe()},void 0,void 0,function(){return o.delete(m)});h.add(wt(r(y)).subscribe(S))}}b.next(s?s(g):g)}catch(x){l(x)}},function(){return u(function(g){return g.complete()})},l,function(){return o.clear()},function(){return f=!0,c===0});i.subscribe(h);function p(g,m){var b=new Kt(function(y){c++;var S=m.subscribe(y);return function(){S.unsubscribe(),--c===0&&f&&h.unsubscribe()}});return b.key=g,b}})}function mG(){return tt(function(t,e){t.subscribe(Ke(e,function(){e.next(!1),e.complete()},function(){e.next(!0),e.complete()}))})}function r3(t){return t<=0?function(){return ts}:tt(function(e,r){var n=[];e.subscribe(Ke(r,function(i){n.push(i),t=2;return function(n){return n.pipe(t?qu(function(i,a){return t(i,a,n)}):An,r3(1),r?dg(e):pg(function(){return new ju}))}}function gG(){return tt(function(t,e){t.subscribe(Ke(e,function(r){e.next(Cm.createNext(r))},function(){e.next(Cm.createComplete()),e.complete()},function(r){e.next(Cm.createError(r)),e.complete()}))})}function yG(t){return nd(Ft(t)?function(e,r){return t(e,r)>0?e:r}:function(e,r){return e>r?e:r})}var bG=Ca;function xG(t,e,r){return r===void 0&&(r=1/0),Ft(e)?Ca(function(){return t},e,r):(typeof e=="number"&&(r=e),Ca(function(){return t},r))}function wG(t,e,r){return r===void 0&&(r=1/0),tt(function(n,i){var a=e;return ax(n,i,function(s,o){return t(a,s,o)},r,function(s){a=s},!1,void 0,function(){return a=null})})}function SG(){for(var t=[],e=0;e=2,!0))}function $G(t,e){return e===void 0&&(e=function(r,n){return r===n}),tt(function(r,n){var i=CD(),a=CD(),s=function(u){n.next(u),n.complete()},o=function(u,l){var c=Ke(n,function(f){var h=l.buffer,p=l.complete;h.length===0?p?s(!1):u.buffer.push(f):!e(f,h.shift())&&s(!1)},function(){u.complete=!0;var f=l.complete,h=l.buffer;f&&s(h.length===0),c==null||c.unsubscribe()});return c};r.subscribe(o(i,a)),wt(t).subscribe(o(a,i))})}function CD(){return{buffer:[],complete:!1}}function i3(t){t===void 0&&(t={});var e=t.connector,r=e===void 0?function(){return new an}:e,n=t.resetOnError,i=n===void 0?!0:n,a=t.resetOnComplete,s=a===void 0?!0:a,o=t.resetOnRefCountZero,u=o===void 0?!0:o;return function(l){var c,f,h,p=0,g=!1,m=!1,b=function(){f==null||f.unsubscribe(),f=void 0},y=function(){b(),c=h=void 0,g=m=!1},S=function(){var x=c;y(),x==null||x.unsubscribe()};return tt(function(x,_){p++,!m&&!g&&b();var A=h=h??r();_.add(function(){p--,p===0&&!m&&!g&&(f=By(S,u))}),A.subscribe(_),!c&&p>0&&(c=new cc({next:function(w){return A.next(w)},error:function(w){m=!0,b(),f=By(y,i,w),A.error(w)},complete:function(){g=!0,b(),f=By(y,s),A.complete()}}),wt(x).subscribe(c))})(l)}}function By(t,e){for(var r=[],n=2;n0?e:t;return tt(function(n,i){var a=[new an],s=[],o=0;i.next(a[0].asObservable()),n.subscribe(Ke(i,function(u){var l,c;try{for(var f=bi(a),h=f.next();!h.done;h=f.next()){var p=h.value;p.next(u)}}catch(b){l={error:b}}finally{try{h&&!h.done&&(c=f.return)&&c.call(f)}finally{if(l)throw l.error}}var g=o-t+1;if(g>=0&&g%r===0&&a.shift().complete(),++o%r===0){var m=new an;a.push(m),i.next(m.asObservable())}},function(){for(;a.length>0;)a.shift().complete();i.complete()},function(u){for(;a.length>0;)a.shift().error(u);i.error(u)},function(){s=null,a=null}))})}function sX(t){for(var e,r,n=[],i=1;i=0?xi(l,a,p,s,!0):f=!0,p();var g=function(b){return c.slice().forEach(b)},m=function(b){g(function(y){var S=y.window;return b(S)}),b(l),l.unsubscribe()};return u.subscribe(Ke(l,function(b){g(function(y){y.window.next(b),o<=++y.seen&&h(y)})},function(){return m(function(b){return b.complete()})},function(b){return m(function(y){return y.error(b)})})),function(){c=null}})}function oX(t,e){return tt(function(r,n){var i=[],a=function(s){for(;0>>0,n;for(n=0;n0)for(r=0;r>>0,n;for(n=0;n0)for(r=0;r=0;return(a?r?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+n}var mx=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Xp=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,By={},Kl={};function ft(t,e,r,n){var i=n;typeof n=="string"&&(i=function(){return this[n]()}),t&&(Kl[t]=i),e&&(Kl[e[0]]=function(){return Za(i.apply(this,arguments),e[1],e[2])}),r&&(Kl[r]=function(){return this.localeData().ordinal(i.apply(this,arguments),t)})}function nX(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function iX(t){var e=t.match(mx),r,n;for(r=0,n=e.length;r=0&&Xp.test(t);)t=t.replace(Xp,n),Xp.lastIndex=0,r-=1;return t}var aX={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function sX(t){var e=this._longDateFormat[t],r=this._longDateFormat[t.toUpperCase()];return e||!r?e:(this._longDateFormat[t]=r.match(mx).map(function(n){return n==="MMMM"||n==="MM"||n==="DD"||n==="dddd"?n.slice(1):n}).join(""),this._longDateFormat[t])}var oX="Invalid date";function uX(){return this._invalidDate}var lX="%d",cX=/\d{1,2}/;function fX(t){return this._ordinal.replace("%d",t)}var hX={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function dX(t,e,r,n){var i=this._relativeTime[r];return is(i)?i(t,e,r,n):i.replace(/%d/i,t)}function pX(t,e){var r=this._relativeTime[t>0?"future":"past"];return is(r)?r(e):r.replace(/%s/i,e)}var CD={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function la(t){return typeof t=="string"?CD[t]||CD[t.toLowerCase()]:void 0}function vx(t){var e={},r,n;for(n in t)ur(t,n)&&(r=la(n),r&&(e[r]=t[n]));return e}var mX={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function vX(t){var e=[],r;for(r in t)ur(t,r)&&e.push({unit:r,priority:mX[r]});return e.sort(function(n,i){return n.priority-i.priority}),e}var a3=/\d/,ki=/\d\d/,s3=/\d{3}/,gx=/\d{4}/,pg=/[+-]?\d{6}/,Ir=/\d\d?/,o3=/\d\d\d\d?/,u3=/\d\d\d\d\d\d?/,mg=/\d{1,3}/,yx=/\d{1,4}/,vg=/[+-]?\d{1,6}/,Nc=/\d+/,gg=/[+-]?\d+/,gX=/Z|[+-]\d\d:?\d\d/gi,yg=/Z|[+-]\d\d(?::?\d\d)?/gi,yX=/[+-]?\d+(\.\d{1,3})?/,sd=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,Ec=/^[1-9]\d?/,bx=/^([1-9]\d|\d)/,rv;rv={};function it(t,e,r){rv[t]=is(e)?e:function(n,i){return n&&r?r:e}}function bX(t,e){return ur(rv,t)?rv[t](e._strict,e._locale):new RegExp(xX(t))}function xX(t){return qs(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,r,n,i,a){return r||n||i||a}))}function qs(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Ki(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function Xt(t){var e=+t,r=0;return e!==0&&isFinite(e)&&(r=Ki(e)),r}var Rb={};function Sr(t,e){var r,n=e,i;for(typeof t=="string"&&(t=[t]),Ys(e)&&(n=function(a,s){s[e]=Xt(a)}),i=t.length,r=0;r68?1900:2e3)};var l3=Cc("FullYear",!0);function AX(){return bg(this.year())}function Cc(t,e){return function(r){return r!=null?(c3(this,t,r),Qe.updateOffset(this,e),this):Oh(this,t)}}function Oh(t,e){if(!t.isValid())return NaN;var r=t._d,n=t._isUTC;switch(e){case"Milliseconds":return n?r.getUTCMilliseconds():r.getMilliseconds();case"Seconds":return n?r.getUTCSeconds():r.getSeconds();case"Minutes":return n?r.getUTCMinutes():r.getMinutes();case"Hours":return n?r.getUTCHours():r.getHours();case"Date":return n?r.getUTCDate():r.getDate();case"Day":return n?r.getUTCDay():r.getDay();case"Month":return n?r.getUTCMonth():r.getMonth();case"FullYear":return n?r.getUTCFullYear():r.getFullYear();default:return NaN}}function c3(t,e,r){var n,i,a,s,o;if(!(!t.isValid()||isNaN(r))){switch(n=t._d,i=t._isUTC,e){case"Milliseconds":return void(i?n.setUTCMilliseconds(r):n.setMilliseconds(r));case"Seconds":return void(i?n.setUTCSeconds(r):n.setSeconds(r));case"Minutes":return void(i?n.setUTCMinutes(r):n.setMinutes(r));case"Hours":return void(i?n.setUTCHours(r):n.setHours(r));case"Date":return void(i?n.setUTCDate(r):n.setDate(r));case"FullYear":break;default:return}a=r,s=t.month(),o=t.date(),o=o===29&&s===1&&!bg(a)?28:o,i?n.setUTCFullYear(a,s,o):n.setFullYear(a,s,o)}}function DX(t){return t=la(t),is(this[t])?this[t]():this}function NX(t,e){if(typeof t=="object"){t=vx(t);var r=vX(t),n,i=r.length;for(n=0;n=0?(o=new Date(t+400,e,r,n,i,a,s),isFinite(o.getFullYear())&&o.setFullYear(t)):o=new Date(t,e,r,n,i,a,s),o}function Fh(t){var e,r;return t<100&&t>=0?(r=Array.prototype.slice.call(arguments),r[0]=t+400,e=new Date(Date.UTC.apply(null,r)),isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t)):e=new Date(Date.UTC.apply(null,arguments)),e}function nv(t,e,r){var n=7+e-r,i=(7+Fh(t,0,n).getUTCDay()-e)%7;return-i+n-1}function v3(t,e,r,n,i){var a=(7+r-n)%7,s=nv(t,n,i),o=1+7*(e-1)+a+s,u,l;return o<=0?(u=t-1,l=vh(u)+o):o>vh(t)?(u=t+1,l=o-vh(t)):(u=t,l=o),{year:u,dayOfYear:l}}function Ph(t,e,r){var n=nv(t.year(),e,r),i=Math.floor((t.dayOfYear()-n-1)/7)+1,a,s;return i<1?(s=t.year()-1,a=i+Us(s,e,r)):i>Us(t.year(),e,r)?(a=i-Us(t.year(),e,r),s=t.year()+1):(s=t.year(),a=i),{week:a,year:s}}function Us(t,e,r){var n=nv(t,e,r),i=nv(t+1,e,r);return(vh(t)-n+i)/7}ft("w",["ww",2],"wo","week");ft("W",["WW",2],"Wo","isoWeek");it("w",Ir,Ec);it("ww",Ir,ki);it("W",Ir,Ec);it("WW",Ir,ki);od(["w","ww","W","WW"],function(t,e,r,n){e[n.substr(0,1)]=Xt(t)});function $X(t){return Ph(t,this._week.dow,this._week.doy).week}var zX={dow:0,doy:6};function qX(){return this._week.dow}function UX(){return this._week.doy}function HX(t){var e=this.localeData().week(this);return t==null?e:this.add((t-e)*7,"d")}function WX(t){var e=Ph(this,1,4).week;return t==null?e:this.add((t-e)*7,"d")}ft("d",0,"do","day");ft("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)});ft("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)});ft("dddd",0,0,function(t){return this.localeData().weekdays(this,t)});ft("e",0,0,"weekday");ft("E",0,0,"isoWeekday");it("d",Ir);it("e",Ir);it("E",Ir);it("dd",function(t,e){return e.weekdaysMinRegex(t)});it("ddd",function(t,e){return e.weekdaysShortRegex(t)});it("dddd",function(t,e){return e.weekdaysRegex(t)});od(["dd","ddd","dddd"],function(t,e,r,n){var i=r._locale.weekdaysParse(t,n,r._strict);i!=null?e.d=i:Lt(r).invalidWeekday=t});od(["d","e","E"],function(t,e,r,n){e[n]=Xt(t)});function VX(t,e){return typeof t!="string"?t:isNaN(t)?(t=e.weekdaysParse(t),typeof t=="number"?t:null):parseInt(t,10)}function YX(t,e){return typeof t=="string"?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function wx(t,e){return t.slice(e,7).concat(t.slice(0,e))}var jX="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),g3="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),GX="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),XX=sd,ZX=sd,KX=sd;function JX(t,e){var r=Ma(this._weekdays)?this._weekdays:this._weekdays[t&&t!==!0&&this._weekdays.isFormat.test(e)?"format":"standalone"];return t===!0?wx(r,this._week.dow):t?r[t.day()]:r}function QX(t){return t===!0?wx(this._weekdaysShort,this._week.dow):t?this._weekdaysShort[t.day()]:this._weekdaysShort}function eZ(t){return t===!0?wx(this._weekdaysMin,this._week.dow):t?this._weekdaysMin[t.day()]:this._weekdaysMin}function tZ(t,e,r){var n,i,a,s=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],n=0;n<7;++n)a=rs([2e3,1]).day(n),this._minWeekdaysParse[n]=this.weekdaysMin(a,"").toLocaleLowerCase(),this._shortWeekdaysParse[n]=this.weekdaysShort(a,"").toLocaleLowerCase(),this._weekdaysParse[n]=this.weekdays(a,"").toLocaleLowerCase();return r?e==="dddd"?(i=Qr.call(this._weekdaysParse,s),i!==-1?i:null):e==="ddd"?(i=Qr.call(this._shortWeekdaysParse,s),i!==-1?i:null):(i=Qr.call(this._minWeekdaysParse,s),i!==-1?i:null):e==="dddd"?(i=Qr.call(this._weekdaysParse,s),i!==-1||(i=Qr.call(this._shortWeekdaysParse,s),i!==-1)?i:(i=Qr.call(this._minWeekdaysParse,s),i!==-1?i:null)):e==="ddd"?(i=Qr.call(this._shortWeekdaysParse,s),i!==-1||(i=Qr.call(this._weekdaysParse,s),i!==-1)?i:(i=Qr.call(this._minWeekdaysParse,s),i!==-1?i:null)):(i=Qr.call(this._minWeekdaysParse,s),i!==-1||(i=Qr.call(this._weekdaysParse,s),i!==-1)?i:(i=Qr.call(this._shortWeekdaysParse,s),i!==-1?i:null))}function rZ(t,e,r){var n,i,a;if(this._weekdaysParseExact)return tZ.call(this,t,e,r);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),n=0;n<7;n++){if(i=rs([2e3,1]).day(n),r&&!this._fullWeekdaysParse[n]&&(this._fullWeekdaysParse[n]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[n]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[n]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[n]||(a="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[n]=new RegExp(a.replace(".",""),"i")),r&&e==="dddd"&&this._fullWeekdaysParse[n].test(t))return n;if(r&&e==="ddd"&&this._shortWeekdaysParse[n].test(t))return n;if(r&&e==="dd"&&this._minWeekdaysParse[n].test(t))return n;if(!r&&this._weekdaysParse[n].test(t))return n}}function nZ(t){if(!this.isValid())return t!=null?this:NaN;var e=Oh(this,"Day");return t!=null?(t=VX(t,this.localeData()),this.add(t-e,"d")):e}function iZ(t){if(!this.isValid())return t!=null?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return t==null?e:this.add(t-e,"d")}function aZ(t){if(!this.isValid())return t!=null?this:NaN;if(t!=null){var e=YX(t,this.localeData());return this.day(this.day()%7?e:e-7)}else return this.day()||7}function sZ(t){return this._weekdaysParseExact?(ur(this,"_weekdaysRegex")||Sx.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(ur(this,"_weekdaysRegex")||(this._weekdaysRegex=XX),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function oZ(t){return this._weekdaysParseExact?(ur(this,"_weekdaysRegex")||Sx.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(ur(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=ZX),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function uZ(t){return this._weekdaysParseExact?(ur(this,"_weekdaysRegex")||Sx.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(ur(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=KX),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Sx(){function t(c,f){return f.length-c.length}var e=[],r=[],n=[],i=[],a,s,o,u,l;for(a=0;a<7;a++)s=rs([2e3,1]).day(a),o=qs(this.weekdaysMin(s,"")),u=qs(this.weekdaysShort(s,"")),l=qs(this.weekdays(s,"")),e.push(o),r.push(u),n.push(l),i.push(o),i.push(u),i.push(l);e.sort(t),r.sort(t),n.sort(t),i.sort(t),this._weekdaysRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+e.join("|")+")","i")}function _x(){return this.hours()%12||12}function lZ(){return this.hours()||24}ft("H",["HH",2],0,"hour");ft("h",["hh",2],0,_x);ft("k",["kk",2],0,lZ);ft("hmm",0,0,function(){return""+_x.apply(this)+Za(this.minutes(),2)});ft("hmmss",0,0,function(){return""+_x.apply(this)+Za(this.minutes(),2)+Za(this.seconds(),2)});ft("Hmm",0,0,function(){return""+this.hours()+Za(this.minutes(),2)});ft("Hmmss",0,0,function(){return""+this.hours()+Za(this.minutes(),2)+Za(this.seconds(),2)});function y3(t,e){ft(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}y3("a",!0);y3("A",!1);function b3(t,e){return e._meridiemParse}it("a",b3);it("A",b3);it("H",Ir,bx);it("h",Ir,Ec);it("k",Ir,Ec);it("HH",Ir,ki);it("hh",Ir,ki);it("kk",Ir,ki);it("hmm",o3);it("hmmss",u3);it("Hmm",o3);it("Hmmss",u3);Sr(["H","HH"],mn);Sr(["k","kk"],function(t,e,r){var n=Xt(t);e[mn]=n===24?0:n});Sr(["a","A"],function(t,e,r){r._isPm=r._locale.isPM(t),r._meridiem=t});Sr(["h","hh"],function(t,e,r){e[mn]=Xt(t),Lt(r).bigHour=!0});Sr("hmm",function(t,e,r){var n=t.length-2;e[mn]=Xt(t.substr(0,n)),e[_a]=Xt(t.substr(n)),Lt(r).bigHour=!0});Sr("hmmss",function(t,e,r){var n=t.length-4,i=t.length-2;e[mn]=Xt(t.substr(0,n)),e[_a]=Xt(t.substr(n,2)),e[ks]=Xt(t.substr(i)),Lt(r).bigHour=!0});Sr("Hmm",function(t,e,r){var n=t.length-2;e[mn]=Xt(t.substr(0,n)),e[_a]=Xt(t.substr(n))});Sr("Hmmss",function(t,e,r){var n=t.length-4,i=t.length-2;e[mn]=Xt(t.substr(0,n)),e[_a]=Xt(t.substr(n,2)),e[ks]=Xt(t.substr(i))});function cZ(t){return(t+"").toLowerCase().charAt(0)==="p"}var fZ=/[ap]\.?m?\.?/i,hZ=Cc("Hours",!0);function dZ(t,e,r){return t>11?r?"pm":"PM":r?"am":"AM"}var x3={calendar:tX,longDateFormat:aX,invalidDate:oX,ordinal:lX,dayOfMonthOrdinalParse:cX,relativeTime:hX,months:CX,monthsShort:f3,week:zX,weekdays:jX,weekdaysMin:GX,weekdaysShort:g3,meridiemParse:fZ},Br={},Vf={},Rh;function pZ(t,e){var r,n=Math.min(t.length,e.length);for(r=0;r0;){if(i=xg(a.slice(0,r).join("-")),i)return i;if(n&&n.length>=r&&pZ(a,n)>=r-1)break;r--}e++}return Rh}function vZ(t){return!!(t&&t.match("^[^/\\\\]*$"))}function xg(t){var e=null,r;if(Br[t]===void 0&&typeof module<"u"&&module&&module.exports&&vZ(t))try{e=Rh._abbr,r=require,r("./locale/"+t),Lo(e)}catch{Br[t]=null}return Br[t]}function Lo(t,e){var r;return t&&(mi(e)?r=Ks(t):r=Ax(t,e),r?Rh=r:typeof console<"u"&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),Rh._abbr}function Ax(t,e){if(e!==null){var r,n=x3;if(e.abbr=t,Br[t]!=null)n3("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=Br[t]._config;else if(e.parentLocale!=null)if(Br[e.parentLocale]!=null)n=Br[e.parentLocale]._config;else if(r=xg(e.parentLocale),r!=null)n=r._config;else return Vf[e.parentLocale]||(Vf[e.parentLocale]=[]),Vf[e.parentLocale].push({name:t,config:e}),null;return Br[t]=new px(Fb(n,e)),Vf[t]&&Vf[t].forEach(function(i){Ax(i.name,i.config)}),Lo(t),Br[t]}else return delete Br[t],null}function gZ(t,e){if(e!=null){var r,n,i=x3;Br[t]!=null&&Br[t].parentLocale!=null?Br[t].set(Fb(Br[t]._config,e)):(n=xg(t),n!=null&&(i=n._config),e=Fb(i,e),n==null&&(e.abbr=t),r=new px(e),r.parentLocale=Br[t],Br[t]=r),Lo(t)}else Br[t]!=null&&(Br[t].parentLocale!=null?(Br[t]=Br[t].parentLocale,t===Lo()&&Lo(t)):Br[t]!=null&&delete Br[t]);return Br[t]}function Ks(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Rh;if(!Ma(t)){if(e=xg(t),e)return e;t=[t]}return mZ(t)}function yZ(){return Pb(Br)}function Dx(t){var e,r=t._a;return r&&Lt(t).overflow===-2&&(e=r[Bs]<0||r[Bs]>11?Bs:r[ja]<1||r[ja]>xx(r[Un],r[Bs])?ja:r[mn]<0||r[mn]>24||r[mn]===24&&(r[_a]!==0||r[ks]!==0||r[Mu]!==0)?mn:r[_a]<0||r[_a]>59?_a:r[ks]<0||r[ks]>59?ks:r[Mu]<0||r[Mu]>999?Mu:-1,Lt(t)._overflowDayOfYear&&(eja)&&(e=ja),Lt(t)._overflowWeeks&&e===-1&&(e=SX),Lt(t)._overflowWeekday&&e===-1&&(e=_X),Lt(t).overflow=e),t}var bZ=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,xZ=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,wZ=/Z|[+-]\d\d(?::?\d\d)?/,Zp=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],ky=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],SZ=/^\/?Date\((-?\d+)/i,_Z=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,AZ={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function w3(t){var e,r,n=t._i,i=bZ.exec(n)||xZ.exec(n),a,s,o,u,l=Zp.length,c=ky.length;if(i){for(Lt(t).iso=!0,e=0,r=l;evh(s)||t._dayOfYear===0)&&(Lt(t)._overflowDayOfYear=!0),r=Fh(s,0,t._dayOfYear),t._a[Bs]=r.getUTCMonth(),t._a[ja]=r.getUTCDate()),e=0;e<3&&t._a[e]==null;++e)t._a[e]=n[e]=i[e];for(;e<7;e++)t._a[e]=n[e]=t._a[e]==null?e===2?1:0:t._a[e];t._a[mn]===24&&t._a[_a]===0&&t._a[ks]===0&&t._a[Mu]===0&&(t._nextDay=!0,t._a[mn]=0),t._d=(t._useUTC?Fh:LX).apply(null,n),a=t._useUTC?t._d.getUTCDay():t._d.getDay(),t._tzm!=null&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[mn]=24),t._w&&typeof t._w.d<"u"&&t._w.d!==a&&(Lt(t).weekdayMismatch=!0)}}function FZ(t){var e,r,n,i,a,s,o,u,l;e=t._w,e.GG!=null||e.W!=null||e.E!=null?(a=1,s=4,r=$l(e.GG,t._a[Un],Ph(Rr(),1,4).year),n=$l(e.W,1),i=$l(e.E,1),(i<1||i>7)&&(u=!0)):(a=t._locale._week.dow,s=t._locale._week.doy,l=Ph(Rr(),a,s),r=$l(e.gg,t._a[Un],l.year),n=$l(e.w,l.week),e.d!=null?(i=e.d,(i<0||i>6)&&(u=!0)):e.e!=null?(i=e.e+a,(e.e<0||e.e>6)&&(u=!0)):i=a),n<1||n>Us(r,a,s)?Lt(t)._overflowWeeks=!0:u!=null?Lt(t)._overflowWeekday=!0:(o=v3(r,n,i,a,s),t._a[Un]=o.year,t._dayOfYear=o.dayOfYear)}Qe.ISO_8601=function(){};Qe.RFC_2822=function(){};function Ex(t){if(t._f===Qe.ISO_8601){w3(t);return}if(t._f===Qe.RFC_2822){S3(t);return}t._a=[],Lt(t).empty=!0;var e=""+t._i,r,n,i,a,s,o=e.length,u=0,l,c;for(i=i3(t._f,t._locale).match(mx)||[],c=i.length,r=0;r0&&Lt(t).unusedInput.push(s),e=e.slice(e.indexOf(n)+n.length),u+=n.length),Kl[a]?(n?Lt(t).empty=!1:Lt(t).unusedTokens.push(a),wX(a,n,t)):t._strict&&!n&&Lt(t).unusedTokens.push(a);Lt(t).charsLeftOver=o-u,e.length>0&&Lt(t).unusedInput.push(e),t._a[mn]<=12&&Lt(t).bigHour===!0&&t._a[mn]>0&&(Lt(t).bigHour=void 0),Lt(t).parsedDateParts=t._a.slice(0),Lt(t).meridiem=t._meridiem,t._a[mn]=PZ(t._locale,t._a[mn],t._meridiem),l=Lt(t).era,l!==null&&(t._a[Un]=t._locale.erasConvertYear(l,t._a[Un])),Nx(t),Dx(t)}function PZ(t,e,r){var n;return r==null?e:t.meridiemHour!=null?t.meridiemHour(e,r):(t.isPM!=null&&(n=t.isPM(r),n&&e<12&&(e+=12),!n&&e===12&&(e=0)),e)}function RZ(t){var e,r,n,i,a,s,o=!1,u=t._f.length;if(u===0){Lt(t).invalidFormat=!0,t._d=new Date(NaN);return}for(i=0;ithis?this:t:dg()});function D3(t,e){var r,n;if(e.length===1&&Ma(e[0])&&(e=e[0]),!e.length)return Rr();for(r=e[0],n=1;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function tK(){if(!mi(this._isDSTShifted))return this._isDSTShifted;var t={},e;return dx(t,this),t=_3(t),t._a?(e=t._isUTC?rs(t._a):Rr(t._a),this._isDSTShifted=this.isValid()&&YZ(t._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function rK(){return this.isValid()?!this._isUTC:!1}function nK(){return this.isValid()?this._isUTC:!1}function E3(){return this.isValid()?this._isUTC&&this._offset===0:!1}var iK=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,aK=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Oa(t,e){var r=t,n=null,i,a,s;return Tm(t)?r={ms:t._milliseconds,d:t._days,M:t._months}:Ys(t)||!isNaN(+t)?(r={},e?r[e]=+t:r.milliseconds=+t):(n=iK.exec(t))?(i=n[1]==="-"?-1:1,r={y:0,d:Xt(n[ja])*i,h:Xt(n[mn])*i,m:Xt(n[_a])*i,s:Xt(n[ks])*i,ms:Xt(Ib(n[Mu]*1e3))*i}):(n=aK.exec(t))?(i=n[1]==="-"?-1:1,r={y:_u(n[2],i),M:_u(n[3],i),w:_u(n[4],i),d:_u(n[5],i),h:_u(n[6],i),m:_u(n[7],i),s:_u(n[8],i)}):r==null?r={}:typeof r=="object"&&("from"in r||"to"in r)&&(s=sK(Rr(r.from),Rr(r.to)),r={},r.ms=s.milliseconds,r.M=s.months),a=new wg(r),Tm(t)&&ur(t,"_locale")&&(a._locale=t._locale),Tm(t)&&ur(t,"_isValid")&&(a._isValid=t._isValid),a}Oa.fn=wg.prototype;Oa.invalid=VZ;function _u(t,e){var r=t&&parseFloat(t.replace(",","."));return(isNaN(r)?0:r)*e}function TD(t,e){var r={};return r.months=e.month()-t.month()+(e.year()-t.year())*12,t.clone().add(r.months,"M").isAfter(e)&&--r.months,r.milliseconds=+e-+t.clone().add(r.months,"M"),r}function sK(t,e){var r;return t.isValid()&&e.isValid()?(e=Mx(e,t),t.isBefore(e)?r=TD(t,e):(r=TD(e,t),r.milliseconds=-r.milliseconds,r.months=-r.months),r):{milliseconds:0,months:0}}function C3(t,e){return function(r,n){var i,a;return n!==null&&!isNaN(+n)&&(n3(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),a=r,r=n,n=a),i=Oa(r,n),M3(this,i,t),this}}function M3(t,e,r,n){var i=e._milliseconds,a=Ib(e._days),s=Ib(e._months);t.isValid()&&(n=n??!0,s&&d3(t,Oh(t,"Month")+s*r),a&&c3(t,"Date",Oh(t,"Date")+a*r),i&&t._d.setTime(t._d.valueOf()+i*r),n&&Qe.updateOffset(t,a||s))}var oK=C3(1,"add"),uK=C3(-1,"subtract");function T3(t){return typeof t=="string"||t instanceof String}function lK(t){return Ta(t)||id(t)||T3(t)||Ys(t)||fK(t)||cK(t)||t===null||t===void 0}function cK(t){var e=Iu(t)&&!fx(t),r=!1,n=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],i,a,s=n.length;for(i=0;ir.valueOf():r.valueOf()9999?Mm(r,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):is(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",Mm(r,"Z")):Mm(r,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function DK(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="",r,n,i,a;return this.isLocal()||(t=this.utcOffset()===0?"moment.utc":"moment.parseZone",e="Z"),r="["+t+'("]',n=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",i="-MM-DD[T]HH:mm:ss.SSS",a=e+'[")]',this.format(r+n+i+a)}function NK(t){t||(t=this.isUtc()?Qe.defaultFormatUtc:Qe.defaultFormat);var e=Mm(this,t);return this.localeData().postformat(e)}function EK(t,e){return this.isValid()&&(Ta(t)&&t.isValid()||Rr(t).isValid())?Oa({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function CK(t){return this.from(Rr(),t)}function MK(t,e){return this.isValid()&&(Ta(t)&&t.isValid()||Rr(t).isValid())?Oa({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function TK(t){return this.to(Rr(),t)}function O3(t){var e;return t===void 0?this._locale._abbr:(e=Ks(t),e!=null&&(this._locale=e),this)}var F3=ua("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return t===void 0?this.localeData():this.locale(t)});function P3(){return this._locale}var iv=1e3,Jl=60*iv,av=60*Jl,R3=(365*400+97)*24*av;function Ql(t,e){return(t%e+e)%e}function I3(t,e,r){return t<100&&t>=0?new Date(t+400,e,r)-R3:new Date(t,e,r).valueOf()}function B3(t,e,r){return t<100&&t>=0?Date.UTC(t+400,e,r)-R3:Date.UTC(t,e,r)}function OK(t){var e,r;if(t=la(t),t===void 0||t==="millisecond"||!this.isValid())return this;switch(r=this._isUTC?B3:I3,t){case"year":e=r(this.year(),0,1);break;case"quarter":e=r(this.year(),this.month()-this.month()%3,1);break;case"month":e=r(this.year(),this.month(),1);break;case"week":e=r(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":e=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":e=r(this.year(),this.month(),this.date());break;case"hour":e=this._d.valueOf(),e-=Ql(e+(this._isUTC?0:this.utcOffset()*Jl),av);break;case"minute":e=this._d.valueOf(),e-=Ql(e,Jl);break;case"second":e=this._d.valueOf(),e-=Ql(e,iv);break}return this._d.setTime(e),Qe.updateOffset(this,!0),this}function FK(t){var e,r;if(t=la(t),t===void 0||t==="millisecond"||!this.isValid())return this;switch(r=this._isUTC?B3:I3,t){case"year":e=r(this.year()+1,0,1)-1;break;case"quarter":e=r(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":e=r(this.year(),this.month()+1,1)-1;break;case"week":e=r(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":e=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":e=r(this.year(),this.month(),this.date()+1)-1;break;case"hour":e=this._d.valueOf(),e+=av-Ql(e+(this._isUTC?0:this.utcOffset()*Jl),av)-1;break;case"minute":e=this._d.valueOf(),e+=Jl-Ql(e,Jl)-1;break;case"second":e=this._d.valueOf(),e+=iv-Ql(e,iv)-1;break}return this._d.setTime(e),Qe.updateOffset(this,!0),this}function PK(){return this._d.valueOf()-(this._offset||0)*6e4}function RK(){return Math.floor(this.valueOf()/1e3)}function IK(){return new Date(this.valueOf())}function BK(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function kK(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function LK(){return this.isValid()?this.toISOString():null}function $K(){return hx(this)}function zK(){return Po({},Lt(this))}function qK(){return Lt(this).overflow}function UK(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}ft("N",0,0,"eraAbbr");ft("NN",0,0,"eraAbbr");ft("NNN",0,0,"eraAbbr");ft("NNNN",0,0,"eraName");ft("NNNNN",0,0,"eraNarrow");ft("y",["y",1],"yo","eraYear");ft("y",["yy",2],0,"eraYear");ft("y",["yyy",3],0,"eraYear");ft("y",["yyyy",4],0,"eraYear");it("N",Tx);it("NN",Tx);it("NNN",Tx);it("NNNN",QK);it("NNNNN",eJ);Sr(["N","NN","NNN","NNNN","NNNNN"],function(t,e,r,n){var i=r._locale.erasParse(t,n,r._strict);i?Lt(r).era=i:Lt(r).invalidEra=t});it("y",Nc);it("yy",Nc);it("yyy",Nc);it("yyyy",Nc);it("yo",tJ);Sr(["y","yy","yyy","yyyy"],Un);Sr(["yo"],function(t,e,r,n){var i;r._locale._eraYearOrdinalRegex&&(i=t.match(r._locale._eraYearOrdinalRegex)),r._locale.eraYearOrdinalParse?e[Un]=r._locale.eraYearOrdinalParse(t,i):e[Un]=parseInt(t,10)});function HK(t,e){var r,n,i,a=this._eras||Ks("en")._eras;for(r=0,n=a.length;r=0)return a[n]}function VK(t,e){var r=t.since<=t.until?1:-1;return e===void 0?Qe(t.since).year():Qe(t.since).year()+(e-t.offset)*r}function YK(){var t,e,r,n=this.localeData().eras();for(t=0,e=n.length;ta&&(e=a),uJ.call(this,t,e,r,n,i))}function uJ(t,e,r,n,i){var a=v3(t,e,r,n,i),s=Fh(a.year,0,a.dayOfYear);return this.year(s.getUTCFullYear()),this.month(s.getUTCMonth()),this.date(s.getUTCDate()),this}ft("Q",0,"Qo","quarter");it("Q",a3);Sr("Q",function(t,e){e[Bs]=(Xt(t)-1)*3});function lJ(t){return t==null?Math.ceil((this.month()+1)/3):this.month((t-1)*3+this.month()%3)}ft("D",["DD",2],"Do","date");it("D",Ir,Ec);it("DD",Ir,ki);it("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient});Sr(["D","DD"],ja);Sr("Do",function(t,e){e[ja]=Xt(t.match(Ir)[0])});var L3=Cc("Date",!0);ft("DDD",["DDDD",3],"DDDo","dayOfYear");it("DDD",mg);it("DDDD",s3);Sr(["DDD","DDDD"],function(t,e,r){r._dayOfYear=Xt(t)});function cJ(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return t==null?e:this.add(t-e,"d")}ft("m",["mm",2],0,"minute");it("m",Ir,bx);it("mm",Ir,ki);Sr(["m","mm"],_a);var fJ=Cc("Minutes",!1);ft("s",["ss",2],0,"second");it("s",Ir,bx);it("ss",Ir,ki);Sr(["s","ss"],ks);var hJ=Cc("Seconds",!1);ft("S",0,0,function(){return~~(this.millisecond()/100)});ft(0,["SS",2],0,function(){return~~(this.millisecond()/10)});ft(0,["SSS",3],0,"millisecond");ft(0,["SSSS",4],0,function(){return this.millisecond()*10});ft(0,["SSSSS",5],0,function(){return this.millisecond()*100});ft(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3});ft(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4});ft(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5});ft(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6});it("S",mg,a3);it("SS",mg,ki);it("SSS",mg,s3);var Ro,$3;for(Ro="SSSS";Ro.length<=9;Ro+="S")it(Ro,Nc);function dJ(t,e){e[Mu]=Xt(("0."+t)*1e3)}for(Ro="S";Ro.length<=9;Ro+="S")Sr(Ro,dJ);$3=Cc("Milliseconds",!1);ft("z",0,0,"zoneAbbr");ft("zz",0,0,"zoneName");function pJ(){return this._isUTC?"UTC":""}function mJ(){return this._isUTC?"Coordinated Universal Time":""}var Xe=ad.prototype;Xe.add=oK;Xe.calendar=pK;Xe.clone=mK;Xe.diff=SK;Xe.endOf=FK;Xe.format=NK;Xe.from=EK;Xe.fromNow=CK;Xe.to=MK;Xe.toNow=TK;Xe.get=DX;Xe.invalidAt=qK;Xe.isAfter=vK;Xe.isBefore=gK;Xe.isBetween=yK;Xe.isSame=bK;Xe.isSameOrAfter=xK;Xe.isSameOrBefore=wK;Xe.isValid=$K;Xe.lang=F3;Xe.locale=O3;Xe.localeData=P3;Xe.max=$Z;Xe.min=LZ;Xe.parsingFlags=zK;Xe.set=NX;Xe.startOf=OK;Xe.subtract=uK;Xe.toArray=BK;Xe.toObject=kK;Xe.toDate=IK;Xe.toISOString=AK;Xe.inspect=DK;typeof Symbol<"u"&&Symbol.for!=null&&(Xe[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"});Xe.toJSON=LK;Xe.toString=_K;Xe.unix=RK;Xe.valueOf=PK;Xe.creationData=UK;Xe.eraName=YK;Xe.eraNarrow=jK;Xe.eraAbbr=GK;Xe.eraYear=XK;Xe.year=l3;Xe.isLeapYear=AX;Xe.weekYear=rJ;Xe.isoWeekYear=nJ;Xe.quarter=Xe.quarters=lJ;Xe.month=p3;Xe.daysInMonth=IX;Xe.week=Xe.weeks=HX;Xe.isoWeek=Xe.isoWeeks=WX;Xe.weeksInYear=sJ;Xe.weeksInWeekYear=oJ;Xe.isoWeeksInYear=iJ;Xe.isoWeeksInISOWeekYear=aJ;Xe.date=L3;Xe.day=Xe.days=nZ;Xe.weekday=iZ;Xe.isoWeekday=aZ;Xe.dayOfYear=cJ;Xe.hour=Xe.hours=hZ;Xe.minute=Xe.minutes=fJ;Xe.second=Xe.seconds=hJ;Xe.millisecond=Xe.milliseconds=$3;Xe.utcOffset=GZ;Xe.utc=ZZ;Xe.local=KZ;Xe.parseZone=JZ;Xe.hasAlignedHourOffset=QZ;Xe.isDST=eK;Xe.isLocal=rK;Xe.isUtcOffset=nK;Xe.isUtc=E3;Xe.isUTC=E3;Xe.zoneAbbr=pJ;Xe.zoneName=mJ;Xe.dates=ua("dates accessor is deprecated. Use date instead.",L3);Xe.months=ua("months accessor is deprecated. Use month instead",p3);Xe.years=ua("years accessor is deprecated. Use year instead",l3);Xe.zone=ua("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",XZ);Xe.isDSTShifted=ua("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",tK);function vJ(t){return Rr(t*1e3)}function gJ(){return Rr.apply(null,arguments).parseZone()}function z3(t){return t}var cr=px.prototype;cr.calendar=rX;cr.longDateFormat=sX;cr.invalidDate=uX;cr.ordinal=fX;cr.preparse=z3;cr.postformat=z3;cr.relativeTime=dX;cr.pastFuture=pX;cr.set=eX;cr.eras=HK;cr.erasParse=WK;cr.erasConvertYear=VK;cr.erasAbbrRegex=KK;cr.erasNameRegex=ZK;cr.erasNarrowRegex=JK;cr.months=OX;cr.monthsShort=FX;cr.monthsParse=RX;cr.monthsRegex=kX;cr.monthsShortRegex=BX;cr.week=$X;cr.firstDayOfYear=UX;cr.firstDayOfWeek=qX;cr.weekdays=JX;cr.weekdaysMin=eZ;cr.weekdaysShort=QX;cr.weekdaysParse=rZ;cr.weekdaysRegex=sZ;cr.weekdaysShortRegex=oZ;cr.weekdaysMinRegex=uZ;cr.isPM=cZ;cr.meridiem=dZ;function sv(t,e,r,n){var i=Ks(),a=rs().set(n,e);return i[r](a,t)}function q3(t,e,r){if(Ys(t)&&(e=t,t=void 0),t=t||"",e!=null)return sv(t,e,r,"month");var n,i=[];for(n=0;n<12;n++)i[n]=sv(t,n,r,"month");return i}function Fx(t,e,r,n){typeof t=="boolean"?(Ys(e)&&(r=e,e=void 0),e=e||""):(e=t,r=e,t=!1,Ys(e)&&(r=e,e=void 0),e=e||"");var i=Ks(),a=t?i._week.dow:0,s,o=[];if(r!=null)return sv(e,(r+a)%7,n,"day");for(s=0;s<7;s++)o[s]=sv(e,(s+a)%7,n,"day");return o}function yJ(t,e){return q3(t,e,"months")}function bJ(t,e){return q3(t,e,"monthsShort")}function xJ(t,e,r){return Fx(t,e,r,"weekdays")}function wJ(t,e,r){return Fx(t,e,r,"weekdaysShort")}function SJ(t,e,r){return Fx(t,e,r,"weekdaysMin")}Lo("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,r=Xt(t%100/10)===1?"th":e===1?"st":e===2?"nd":e===3?"rd":"th";return t+r}});Qe.lang=ua("moment.lang is deprecated. Use moment.locale instead.",Lo);Qe.langData=ua("moment.langData is deprecated. Use moment.localeData instead.",Ks);var Ss=Math.abs;function _J(){var t=this._data;return this._milliseconds=Ss(this._milliseconds),this._days=Ss(this._days),this._months=Ss(this._months),t.milliseconds=Ss(t.milliseconds),t.seconds=Ss(t.seconds),t.minutes=Ss(t.minutes),t.hours=Ss(t.hours),t.months=Ss(t.months),t.years=Ss(t.years),this}function U3(t,e,r,n){var i=Oa(e,r);return t._milliseconds+=n*i._milliseconds,t._days+=n*i._days,t._months+=n*i._months,t._bubble()}function AJ(t,e){return U3(this,t,e,1)}function DJ(t,e){return U3(this,t,e,-1)}function OD(t){return t<0?Math.floor(t):Math.ceil(t)}function NJ(){var t=this._milliseconds,e=this._days,r=this._months,n=this._data,i,a,s,o,u;return t>=0&&e>=0&&r>=0||t<=0&&e<=0&&r<=0||(t+=OD(kb(r)+e)*864e5,e=0,r=0),n.milliseconds=t%1e3,i=Ki(t/1e3),n.seconds=i%60,a=Ki(i/60),n.minutes=a%60,s=Ki(a/60),n.hours=s%24,e+=Ki(s/24),u=Ki(H3(e)),r+=u,e-=OD(kb(u)),o=Ki(r/12),r%=12,n.days=e,n.months=r,n.years=o,this}function H3(t){return t*4800/146097}function kb(t){return t*146097/4800}function EJ(t){if(!this.isValid())return NaN;var e,r,n=this._milliseconds;if(t=la(t),t==="month"||t==="quarter"||t==="year")switch(e=this._days+n/864e5,r=this._months+H3(e),t){case"month":return r;case"quarter":return r/3;case"year":return r/12}else switch(e=this._days+Math.round(kb(this._months)),t){case"week":return e/7+n/6048e5;case"day":return e+n/864e5;case"hour":return e*24+n/36e5;case"minute":return e*1440+n/6e4;case"second":return e*86400+n/1e3;case"millisecond":return Math.floor(e*864e5)+n;default:throw new Error("Unknown unit "+t)}}function Js(t){return function(){return this.as(t)}}var W3=Js("ms"),CJ=Js("s"),MJ=Js("m"),TJ=Js("h"),OJ=Js("d"),FJ=Js("w"),PJ=Js("M"),RJ=Js("Q"),IJ=Js("y"),BJ=W3;function kJ(){return Oa(this)}function LJ(t){return t=la(t),this.isValid()?this[t+"s"]():NaN}function Ku(t){return function(){return this.isValid()?this._data[t]:NaN}}var $J=Ku("milliseconds"),zJ=Ku("seconds"),qJ=Ku("minutes"),UJ=Ku("hours"),HJ=Ku("days"),WJ=Ku("months"),VJ=Ku("years");function YJ(){return Ki(this.days()/7)}var Ms=Math.round,Hl={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function jJ(t,e,r,n,i){return i.relativeTime(e||1,!!r,t,n)}function GJ(t,e,r,n){var i=Oa(t).abs(),a=Ms(i.as("s")),s=Ms(i.as("m")),o=Ms(i.as("h")),u=Ms(i.as("d")),l=Ms(i.as("M")),c=Ms(i.as("w")),f=Ms(i.as("y")),h=a<=r.ss&&["s",a]||a0,h[4]=n,jJ.apply(null,h)}function XJ(t){return t===void 0?Ms:typeof t=="function"?(Ms=t,!0):!1}function ZJ(t,e){return Hl[t]===void 0?!1:e===void 0?Hl[t]:(Hl[t]=e,t==="s"&&(Hl.ss=e-1),!0)}function KJ(t,e){if(!this.isValid())return this.localeData().invalidDate();var r=!1,n=Hl,i,a;return typeof t=="object"&&(e=t,t=!1),typeof t=="boolean"&&(r=t),typeof e=="object"&&(n=Object.assign({},Hl,e),e.s!=null&&e.ss==null&&(n.ss=e.s-1)),i=this.localeData(),a=GJ(this,!r,n,i),r&&(a=i.pastFuture(+this,a)),i.postformat(a)}var Ly=Math.abs;function Pl(t){return(t>0)-(t<0)||+t}function _g(){if(!this.isValid())return this.localeData().invalidDate();var t=Ly(this._milliseconds)/1e3,e=Ly(this._days),r=Ly(this._months),n,i,a,s,o=this.asSeconds(),u,l,c,f;return o?(n=Ki(t/60),i=Ki(n/60),t%=60,n%=60,a=Ki(r/12),r%=12,s=t?t.toFixed(3).replace(/\.?0+$/,""):"",u=o<0?"-":"",l=Pl(this._months)!==Pl(o)?"-":"",c=Pl(this._days)!==Pl(o)?"-":"",f=Pl(this._milliseconds)!==Pl(o)?"-":"",u+"P"+(a?l+a+"Y":"")+(r?l+r+"M":"")+(e?c+e+"D":"")+(i||n||t?"T":"")+(i?f+i+"H":"")+(n?f+n+"M":"")+(t?f+s+"S":"")):"P0D"}var ir=wg.prototype;ir.isValid=WZ;ir.abs=_J;ir.add=AJ;ir.subtract=DJ;ir.as=EJ;ir.asMilliseconds=W3;ir.asSeconds=CJ;ir.asMinutes=MJ;ir.asHours=TJ;ir.asDays=OJ;ir.asWeeks=FJ;ir.asMonths=PJ;ir.asQuarters=RJ;ir.asYears=IJ;ir.valueOf=BJ;ir._bubble=NJ;ir.clone=kJ;ir.get=LJ;ir.milliseconds=$J;ir.seconds=zJ;ir.minutes=qJ;ir.hours=UJ;ir.days=HJ;ir.weeks=YJ;ir.months=WJ;ir.years=VJ;ir.humanize=KJ;ir.toISOString=_g;ir.toString=_g;ir.toJSON=_g;ir.locale=O3;ir.localeData=P3;ir.toIsoString=ua("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",_g);ir.lang=F3;ft("X",0,0,"unix");ft("x",0,0,"valueOf");it("x",gg);it("X",yX);Sr("X",function(t,e,r){r._d=new Date(parseFloat(t)*1e3)});Sr("x",function(t,e,r){r._d=new Date(Xt(t))});//! moment.js -Qe.version="2.30.1";JG(Rr);Qe.fn=Xe;Qe.min=zZ;Qe.max=qZ;Qe.now=UZ;Qe.utc=rs;Qe.unix=vJ;Qe.months=yJ;Qe.isDate=id;Qe.locale=Lo;Qe.invalid=dg;Qe.duration=Oa;Qe.isMoment=Ta;Qe.weekdays=xJ;Qe.parseZone=gJ;Qe.localeData=Ks;Qe.isDuration=Tm;Qe.monthsShort=bJ;Qe.weekdaysMin=SJ;Qe.defineLocale=Ax;Qe.updateLocale=gZ;Qe.locales=yZ;Qe.weekdaysShort=wJ;Qe.normalizeUnits=la;Qe.relativeTimeRounding=XJ;Qe.relativeTimeThreshold=ZJ;Qe.calendarFormat=dK;Qe.prototype=Xe;Qe.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"};/** +`+new Error().stack),r=!1}return e.apply(this,arguments)},e)}var TD={};function l3(t,e){Qe.deprecationHandler!=null&&Qe.deprecationHandler(t,e),TD[t]||(u3(e),TD[t]=!0)}Qe.suppressDeprecationWarnings=!1;Qe.deprecationHandler=null;function is(t){return typeof Function<"u"&&t instanceof Function||Object.prototype.toString.call(t)==="[object Function]"}function vX(t){var e,r;for(r in t)ur(t,r)&&(e=t[r],is(e)?this[r]=e:this["_"+r]=e);this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function Rb(t,e){var r=Ro({},t),n;for(n in e)ur(e,n)&&(ku(t[n])&&ku(e[n])?(r[n]={},Ro(r[n],t[n]),Ro(r[n],e[n])):e[n]!=null?r[n]=e[n]:delete r[n]);for(n in t)ur(t,n)&&!ur(e,n)&&ku(t[n])&&(r[n]=Ro({},r[n]));return r}function mx(t){t!=null&&this.set(t)}var Pb;Object.keys?Pb=Object.keys:Pb=function(t){var e,r=[];for(e in t)ur(t,e)&&r.push(e);return r};var gX={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function yX(t,e,r){var n=this._calendar[t]||this._calendar.sameElse;return is(n)?n.call(e,r):n}function Za(t,e,r){var n=""+Math.abs(t),i=e-n.length,a=t>=0;return(a?r?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+n}var vx=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Xp=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ly={},Ql={};function ft(t,e,r,n){var i=n;typeof n=="string"&&(i=function(){return this[n]()}),t&&(Ql[t]=i),e&&(Ql[e[0]]=function(){return Za(i.apply(this,arguments),e[1],e[2])}),r&&(Ql[r]=function(){return this.localeData().ordinal(i.apply(this,arguments),t)})}function bX(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function xX(t){var e=t.match(vx),r,n;for(r=0,n=e.length;r=0&&Xp.test(t);)t=t.replace(Xp,n),Xp.lastIndex=0,r-=1;return t}var wX={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function SX(t){var e=this._longDateFormat[t],r=this._longDateFormat[t.toUpperCase()];return e||!r?e:(this._longDateFormat[t]=r.match(vx).map(function(n){return n==="MMMM"||n==="MM"||n==="DD"||n==="dddd"?n.slice(1):n}).join(""),this._longDateFormat[t])}var _X="Invalid date";function AX(){return this._invalidDate}var DX="%d",EX=/\d{1,2}/;function NX(t){return this._ordinal.replace("%d",t)}var CX={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function MX(t,e,r,n){var i=this._relativeTime[r];return is(i)?i(t,e,r,n):i.replace(/%d/i,t)}function TX(t,e){var r=this._relativeTime[t>0?"future":"past"];return is(r)?r(e):r.replace(/%s/i,e)}var OD={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function ca(t){return typeof t=="string"?OD[t]||OD[t.toLowerCase()]:void 0}function gx(t){var e={},r,n;for(n in t)ur(t,n)&&(r=ca(n),r&&(e[r]=t[n]));return e}var OX={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function FX(t){var e=[],r;for(r in t)ur(t,r)&&e.push({unit:r,priority:OX[r]});return e.sort(function(n,i){return n.priority-i.priority}),e}var f3=/\d/,Ii=/\d\d/,h3=/\d{3}/,yx=/\d{4}/,vg=/[+-]?\d{6}/,kr=/\d\d?/,d3=/\d\d\d\d?/,p3=/\d\d\d\d\d\d?/,gg=/\d{1,3}/,bx=/\d{1,4}/,yg=/[+-]?\d{1,6}/,Cc=/\d+/,bg=/[+-]?\d+/,RX=/Z|[+-]\d\d:?\d\d/gi,xg=/Z|[+-]\d\d(?::?\d\d)?/gi,PX=/[+-]?\d+(\.\d{1,3})?/,sd=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,Mc=/^[1-9]\d?/,xx=/^([1-9]\d|\d)/,nv;nv={};function it(t,e,r){nv[t]=is(e)?e:function(n,i){return n&&r?r:e}}function kX(t,e){return ur(nv,t)?nv[t](e._strict,e._locale):new RegExp(BX(t))}function BX(t){return qs(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,r,n,i,a){return r||n||i||a}))}function qs(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Ji(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function Xt(t){var e=+t,r=0;return e!==0&&isFinite(e)&&(r=Ji(e)),r}var kb={};function Sr(t,e){var r,n=e,i;for(typeof t=="string"&&(t=[t]),Ys(e)&&(n=function(a,s){s[e]=Xt(a)}),i=t.length,r=0;r68?1900:2e3)};var m3=Tc("FullYear",!0);function zX(){return wg(this.year())}function Tc(t,e){return function(r){return r!=null?(v3(this,t,r),Qe.updateOffset(this,e),this):Oh(this,t)}}function Oh(t,e){if(!t.isValid())return NaN;var r=t._d,n=t._isUTC;switch(e){case"Milliseconds":return n?r.getUTCMilliseconds():r.getMilliseconds();case"Seconds":return n?r.getUTCSeconds():r.getSeconds();case"Minutes":return n?r.getUTCMinutes():r.getMinutes();case"Hours":return n?r.getUTCHours():r.getHours();case"Date":return n?r.getUTCDate():r.getDate();case"Day":return n?r.getUTCDay():r.getDay();case"Month":return n?r.getUTCMonth():r.getMonth();case"FullYear":return n?r.getUTCFullYear():r.getFullYear();default:return NaN}}function v3(t,e,r){var n,i,a,s,o;if(!(!t.isValid()||isNaN(r))){switch(n=t._d,i=t._isUTC,e){case"Milliseconds":return void(i?n.setUTCMilliseconds(r):n.setMilliseconds(r));case"Seconds":return void(i?n.setUTCSeconds(r):n.setSeconds(r));case"Minutes":return void(i?n.setUTCMinutes(r):n.setMinutes(r));case"Hours":return void(i?n.setUTCHours(r):n.setHours(r));case"Date":return void(i?n.setUTCDate(r):n.setDate(r));case"FullYear":break;default:return}a=r,s=t.month(),o=t.date(),o=o===29&&s===1&&!wg(a)?28:o,i?n.setUTCFullYear(a,s,o):n.setFullYear(a,s,o)}}function qX(t){return t=ca(t),is(this[t])?this[t]():this}function UX(t,e){if(typeof t=="object"){t=gx(t);var r=FX(t),n,i=r.length;for(n=0;n=0?(o=new Date(t+400,e,r,n,i,a,s),isFinite(o.getFullYear())&&o.setFullYear(t)):o=new Date(t,e,r,n,i,a,s),o}function Fh(t){var e,r;return t<100&&t>=0?(r=Array.prototype.slice.call(arguments),r[0]=t+400,e=new Date(Date.UTC.apply(null,r)),isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t)):e=new Date(Date.UTC.apply(null,arguments)),e}function iv(t,e,r){var n=7+e-r,i=(7+Fh(t,0,n).getUTCDay()-e)%7;return-i+n-1}function S3(t,e,r,n,i){var a=(7+r-n)%7,s=iv(t,n,i),o=1+7*(e-1)+a+s,u,l;return o<=0?(u=t-1,l=vh(u)+o):o>vh(t)?(u=t+1,l=o-vh(t)):(u=t,l=o),{year:u,dayOfYear:l}}function Rh(t,e,r){var n=iv(t.year(),e,r),i=Math.floor((t.dayOfYear()-n-1)/7)+1,a,s;return i<1?(s=t.year()-1,a=i+Us(s,e,r)):i>Us(t.year(),e,r)?(a=i-Us(t.year(),e,r),s=t.year()+1):(s=t.year(),a=i),{week:a,year:s}}function Us(t,e,r){var n=iv(t,e,r),i=iv(t+1,e,r);return(vh(t)-n+i)/7}ft("w",["ww",2],"wo","week");ft("W",["WW",2],"Wo","isoWeek");it("w",kr,Mc);it("ww",kr,Ii);it("W",kr,Mc);it("WW",kr,Ii);od(["w","ww","W","WW"],function(t,e,r,n){e[n.substr(0,1)]=Xt(t)});function tZ(t){return Rh(t,this._week.dow,this._week.doy).week}var rZ={dow:0,doy:6};function nZ(){return this._week.dow}function iZ(){return this._week.doy}function aZ(t){var e=this.localeData().week(this);return t==null?e:this.add((t-e)*7,"d")}function sZ(t){var e=Rh(this,1,4).week;return t==null?e:this.add((t-e)*7,"d")}ft("d",0,"do","day");ft("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)});ft("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)});ft("dddd",0,0,function(t){return this.localeData().weekdays(this,t)});ft("e",0,0,"weekday");ft("E",0,0,"isoWeekday");it("d",kr);it("e",kr);it("E",kr);it("dd",function(t,e){return e.weekdaysMinRegex(t)});it("ddd",function(t,e){return e.weekdaysShortRegex(t)});it("dddd",function(t,e){return e.weekdaysRegex(t)});od(["dd","ddd","dddd"],function(t,e,r,n){var i=r._locale.weekdaysParse(t,n,r._strict);i!=null?e.d=i:Lt(r).invalidWeekday=t});od(["d","e","E"],function(t,e,r,n){e[n]=Xt(t)});function oZ(t,e){return typeof t!="string"?t:isNaN(t)?(t=e.weekdaysParse(t),typeof t=="number"?t:null):parseInt(t,10)}function uZ(t,e){return typeof t=="string"?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function Sx(t,e){return t.slice(e,7).concat(t.slice(0,e))}var lZ="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),_3="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),cZ="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),fZ=sd,hZ=sd,dZ=sd;function pZ(t,e){var r=Ma(this._weekdays)?this._weekdays:this._weekdays[t&&t!==!0&&this._weekdays.isFormat.test(e)?"format":"standalone"];return t===!0?Sx(r,this._week.dow):t?r[t.day()]:r}function mZ(t){return t===!0?Sx(this._weekdaysShort,this._week.dow):t?this._weekdaysShort[t.day()]:this._weekdaysShort}function vZ(t){return t===!0?Sx(this._weekdaysMin,this._week.dow):t?this._weekdaysMin[t.day()]:this._weekdaysMin}function gZ(t,e,r){var n,i,a,s=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],n=0;n<7;++n)a=rs([2e3,1]).day(n),this._minWeekdaysParse[n]=this.weekdaysMin(a,"").toLocaleLowerCase(),this._shortWeekdaysParse[n]=this.weekdaysShort(a,"").toLocaleLowerCase(),this._weekdaysParse[n]=this.weekdays(a,"").toLocaleLowerCase();return r?e==="dddd"?(i=Qr.call(this._weekdaysParse,s),i!==-1?i:null):e==="ddd"?(i=Qr.call(this._shortWeekdaysParse,s),i!==-1?i:null):(i=Qr.call(this._minWeekdaysParse,s),i!==-1?i:null):e==="dddd"?(i=Qr.call(this._weekdaysParse,s),i!==-1||(i=Qr.call(this._shortWeekdaysParse,s),i!==-1)?i:(i=Qr.call(this._minWeekdaysParse,s),i!==-1?i:null)):e==="ddd"?(i=Qr.call(this._shortWeekdaysParse,s),i!==-1||(i=Qr.call(this._weekdaysParse,s),i!==-1)?i:(i=Qr.call(this._minWeekdaysParse,s),i!==-1?i:null)):(i=Qr.call(this._minWeekdaysParse,s),i!==-1||(i=Qr.call(this._weekdaysParse,s),i!==-1)?i:(i=Qr.call(this._shortWeekdaysParse,s),i!==-1?i:null))}function yZ(t,e,r){var n,i,a;if(this._weekdaysParseExact)return gZ.call(this,t,e,r);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),n=0;n<7;n++){if(i=rs([2e3,1]).day(n),r&&!this._fullWeekdaysParse[n]&&(this._fullWeekdaysParse[n]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[n]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[n]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[n]||(a="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[n]=new RegExp(a.replace(".",""),"i")),r&&e==="dddd"&&this._fullWeekdaysParse[n].test(t))return n;if(r&&e==="ddd"&&this._shortWeekdaysParse[n].test(t))return n;if(r&&e==="dd"&&this._minWeekdaysParse[n].test(t))return n;if(!r&&this._weekdaysParse[n].test(t))return n}}function bZ(t){if(!this.isValid())return t!=null?this:NaN;var e=Oh(this,"Day");return t!=null?(t=oZ(t,this.localeData()),this.add(t-e,"d")):e}function xZ(t){if(!this.isValid())return t!=null?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return t==null?e:this.add(t-e,"d")}function wZ(t){if(!this.isValid())return t!=null?this:NaN;if(t!=null){var e=uZ(t,this.localeData());return this.day(this.day()%7?e:e-7)}else return this.day()||7}function SZ(t){return this._weekdaysParseExact?(ur(this,"_weekdaysRegex")||_x.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(ur(this,"_weekdaysRegex")||(this._weekdaysRegex=fZ),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function _Z(t){return this._weekdaysParseExact?(ur(this,"_weekdaysRegex")||_x.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(ur(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=hZ),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function AZ(t){return this._weekdaysParseExact?(ur(this,"_weekdaysRegex")||_x.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(ur(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=dZ),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function _x(){function t(c,f){return f.length-c.length}var e=[],r=[],n=[],i=[],a,s,o,u,l;for(a=0;a<7;a++)s=rs([2e3,1]).day(a),o=qs(this.weekdaysMin(s,"")),u=qs(this.weekdaysShort(s,"")),l=qs(this.weekdays(s,"")),e.push(o),r.push(u),n.push(l),i.push(o),i.push(u),i.push(l);e.sort(t),r.sort(t),n.sort(t),i.sort(t),this._weekdaysRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+e.join("|")+")","i")}function Ax(){return this.hours()%12||12}function DZ(){return this.hours()||24}ft("H",["HH",2],0,"hour");ft("h",["hh",2],0,Ax);ft("k",["kk",2],0,DZ);ft("hmm",0,0,function(){return""+Ax.apply(this)+Za(this.minutes(),2)});ft("hmmss",0,0,function(){return""+Ax.apply(this)+Za(this.minutes(),2)+Za(this.seconds(),2)});ft("Hmm",0,0,function(){return""+this.hours()+Za(this.minutes(),2)});ft("Hmmss",0,0,function(){return""+this.hours()+Za(this.minutes(),2)+Za(this.seconds(),2)});function A3(t,e){ft(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}A3("a",!0);A3("A",!1);function D3(t,e){return e._meridiemParse}it("a",D3);it("A",D3);it("H",kr,xx);it("h",kr,Mc);it("k",kr,Mc);it("HH",kr,Ii);it("hh",kr,Ii);it("kk",kr,Ii);it("hmm",d3);it("hmmss",p3);it("Hmm",d3);it("Hmmss",p3);Sr(["H","HH"],mn);Sr(["k","kk"],function(t,e,r){var n=Xt(t);e[mn]=n===24?0:n});Sr(["a","A"],function(t,e,r){r._isPm=r._locale.isPM(t),r._meridiem=t});Sr(["h","hh"],function(t,e,r){e[mn]=Xt(t),Lt(r).bigHour=!0});Sr("hmm",function(t,e,r){var n=t.length-2;e[mn]=Xt(t.substr(0,n)),e[_a]=Xt(t.substr(n)),Lt(r).bigHour=!0});Sr("hmmss",function(t,e,r){var n=t.length-4,i=t.length-2;e[mn]=Xt(t.substr(0,n)),e[_a]=Xt(t.substr(n,2)),e[Is]=Xt(t.substr(i)),Lt(r).bigHour=!0});Sr("Hmm",function(t,e,r){var n=t.length-2;e[mn]=Xt(t.substr(0,n)),e[_a]=Xt(t.substr(n))});Sr("Hmmss",function(t,e,r){var n=t.length-4,i=t.length-2;e[mn]=Xt(t.substr(0,n)),e[_a]=Xt(t.substr(n,2)),e[Is]=Xt(t.substr(i))});function EZ(t){return(t+"").toLowerCase().charAt(0)==="p"}var NZ=/[ap]\.?m?\.?/i,CZ=Tc("Hours",!0);function MZ(t,e,r){return t>11?r?"pm":"PM":r?"am":"AM"}var E3={calendar:gX,longDateFormat:wX,invalidDate:_X,ordinal:DX,dayOfMonthOrdinalParse:EX,relativeTime:CX,months:WX,monthsShort:g3,week:rZ,weekdays:lZ,weekdaysMin:cZ,weekdaysShort:_3,meridiemParse:NZ},Br={},jf={},Ph;function TZ(t,e){var r,n=Math.min(t.length,e.length);for(r=0;r0;){if(i=Sg(a.slice(0,r).join("-")),i)return i;if(n&&n.length>=r&&TZ(a,n)>=r-1)break;r--}e++}return Ph}function FZ(t){return!!(t&&t.match("^[^/\\\\]*$"))}function Sg(t){var e=null,r;if(Br[t]===void 0&&typeof module<"u"&&module&&module.exports&&FZ(t))try{e=Ph._abbr,r=require,r("./locale/"+t),Lo(e)}catch{Br[t]=null}return Br[t]}function Lo(t,e){var r;return t&&(mi(e)?r=Ks(t):r=Dx(t,e),r?Ph=r:typeof console<"u"&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),Ph._abbr}function Dx(t,e){if(e!==null){var r,n=E3;if(e.abbr=t,Br[t]!=null)l3("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=Br[t]._config;else if(e.parentLocale!=null)if(Br[e.parentLocale]!=null)n=Br[e.parentLocale]._config;else if(r=Sg(e.parentLocale),r!=null)n=r._config;else return jf[e.parentLocale]||(jf[e.parentLocale]=[]),jf[e.parentLocale].push({name:t,config:e}),null;return Br[t]=new mx(Rb(n,e)),jf[t]&&jf[t].forEach(function(i){Dx(i.name,i.config)}),Lo(t),Br[t]}else return delete Br[t],null}function RZ(t,e){if(e!=null){var r,n,i=E3;Br[t]!=null&&Br[t].parentLocale!=null?Br[t].set(Rb(Br[t]._config,e)):(n=Sg(t),n!=null&&(i=n._config),e=Rb(i,e),n==null&&(e.abbr=t),r=new mx(e),r.parentLocale=Br[t],Br[t]=r),Lo(t)}else Br[t]!=null&&(Br[t].parentLocale!=null?(Br[t]=Br[t].parentLocale,t===Lo()&&Lo(t)):Br[t]!=null&&delete Br[t]);return Br[t]}function Ks(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Ph;if(!Ma(t)){if(e=Sg(t),e)return e;t=[t]}return OZ(t)}function PZ(){return Pb(Br)}function Ex(t){var e,r=t._a;return r&&Lt(t).overflow===-2&&(e=r[Bs]<0||r[Bs]>11?Bs:r[ja]<1||r[ja]>wx(r[Un],r[Bs])?ja:r[mn]<0||r[mn]>24||r[mn]===24&&(r[_a]!==0||r[Is]!==0||r[Mu]!==0)?mn:r[_a]<0||r[_a]>59?_a:r[Is]<0||r[Is]>59?Is:r[Mu]<0||r[Mu]>999?Mu:-1,Lt(t)._overflowDayOfYear&&(eja)&&(e=ja),Lt(t)._overflowWeeks&&e===-1&&(e=LX),Lt(t)._overflowWeekday&&e===-1&&(e=$X),Lt(t).overflow=e),t}var kZ=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,BZ=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,IZ=/Z|[+-]\d\d(?::?\d\d)?/,Zp=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],$y=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],LZ=/^\/?Date\((-?\d+)/i,$Z=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,zZ={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function N3(t){var e,r,n=t._i,i=kZ.exec(n)||BZ.exec(n),a,s,o,u,l=Zp.length,c=$y.length;if(i){for(Lt(t).iso=!0,e=0,r=l;evh(s)||t._dayOfYear===0)&&(Lt(t)._overflowDayOfYear=!0),r=Fh(s,0,t._dayOfYear),t._a[Bs]=r.getUTCMonth(),t._a[ja]=r.getUTCDate()),e=0;e<3&&t._a[e]==null;++e)t._a[e]=n[e]=i[e];for(;e<7;e++)t._a[e]=n[e]=t._a[e]==null?e===2?1:0:t._a[e];t._a[mn]===24&&t._a[_a]===0&&t._a[Is]===0&&t._a[Mu]===0&&(t._nextDay=!0,t._a[mn]=0),t._d=(t._useUTC?Fh:eZ).apply(null,n),a=t._useUTC?t._d.getUTCDay():t._d.getDay(),t._tzm!=null&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[mn]=24),t._w&&typeof t._w.d<"u"&&t._w.d!==a&&(Lt(t).weekdayMismatch=!0)}}function GZ(t){var e,r,n,i,a,s,o,u,l;e=t._w,e.GG!=null||e.W!=null||e.E!=null?(a=1,s=4,r=$l(e.GG,t._a[Un],Rh(Pr(),1,4).year),n=$l(e.W,1),i=$l(e.E,1),(i<1||i>7)&&(u=!0)):(a=t._locale._week.dow,s=t._locale._week.doy,l=Rh(Pr(),a,s),r=$l(e.gg,t._a[Un],l.year),n=$l(e.w,l.week),e.d!=null?(i=e.d,(i<0||i>6)&&(u=!0)):e.e!=null?(i=e.e+a,(e.e<0||e.e>6)&&(u=!0)):i=a),n<1||n>Us(r,a,s)?Lt(t)._overflowWeeks=!0:u!=null?Lt(t)._overflowWeekday=!0:(o=S3(r,n,i,a,s),t._a[Un]=o.year,t._dayOfYear=o.dayOfYear)}Qe.ISO_8601=function(){};Qe.RFC_2822=function(){};function Cx(t){if(t._f===Qe.ISO_8601){N3(t);return}if(t._f===Qe.RFC_2822){C3(t);return}t._a=[],Lt(t).empty=!0;var e=""+t._i,r,n,i,a,s,o=e.length,u=0,l,c;for(i=c3(t._f,t._locale).match(vx)||[],c=i.length,r=0;r0&&Lt(t).unusedInput.push(s),e=e.slice(e.indexOf(n)+n.length),u+=n.length),Ql[a]?(n?Lt(t).empty=!1:Lt(t).unusedTokens.push(a),IX(a,n,t)):t._strict&&!n&&Lt(t).unusedTokens.push(a);Lt(t).charsLeftOver=o-u,e.length>0&&Lt(t).unusedInput.push(e),t._a[mn]<=12&&Lt(t).bigHour===!0&&t._a[mn]>0&&(Lt(t).bigHour=void 0),Lt(t).parsedDateParts=t._a.slice(0),Lt(t).meridiem=t._meridiem,t._a[mn]=XZ(t._locale,t._a[mn],t._meridiem),l=Lt(t).era,l!==null&&(t._a[Un]=t._locale.erasConvertYear(l,t._a[Un])),Nx(t),Ex(t)}function XZ(t,e,r){var n;return r==null?e:t.meridiemHour!=null?t.meridiemHour(e,r):(t.isPM!=null&&(n=t.isPM(r),n&&e<12&&(e+=12),!n&&e===12&&(e=0)),e)}function ZZ(t){var e,r,n,i,a,s,o=!1,u=t._f.length;if(u===0){Lt(t).invalidFormat=!0,t._d=new Date(NaN);return}for(i=0;ithis?this:t:mg()});function O3(t,e){var r,n;if(e.length===1&&Ma(e[0])&&(e=e[0]),!e.length)return Pr();for(r=e[0],n=1;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function gK(){if(!mi(this._isDSTShifted))return this._isDSTShifted;var t={},e;return px(t,this),t=M3(t),t._a?(e=t._isUTC?rs(t._a):Pr(t._a),this._isDSTShifted=this.isValid()&&uK(t._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function yK(){return this.isValid()?!this._isUTC:!1}function bK(){return this.isValid()?this._isUTC:!1}function R3(){return this.isValid()?this._isUTC&&this._offset===0:!1}var xK=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,wK=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Oa(t,e){var r=t,n=null,i,a,s;return Tm(t)?r={ms:t._milliseconds,d:t._days,M:t._months}:Ys(t)||!isNaN(+t)?(r={},e?r[e]=+t:r.milliseconds=+t):(n=xK.exec(t))?(i=n[1]==="-"?-1:1,r={y:0,d:Xt(n[ja])*i,h:Xt(n[mn])*i,m:Xt(n[_a])*i,s:Xt(n[Is])*i,ms:Xt(Bb(n[Mu]*1e3))*i}):(n=wK.exec(t))?(i=n[1]==="-"?-1:1,r={y:_u(n[2],i),M:_u(n[3],i),w:_u(n[4],i),d:_u(n[5],i),h:_u(n[6],i),m:_u(n[7],i),s:_u(n[8],i)}):r==null?r={}:typeof r=="object"&&("from"in r||"to"in r)&&(s=SK(Pr(r.from),Pr(r.to)),r={},r.ms=s.milliseconds,r.M=s.months),a=new _g(r),Tm(t)&&ur(t,"_locale")&&(a._locale=t._locale),Tm(t)&&ur(t,"_isValid")&&(a._isValid=t._isValid),a}Oa.fn=_g.prototype;Oa.invalid=oK;function _u(t,e){var r=t&&parseFloat(t.replace(",","."));return(isNaN(r)?0:r)*e}function RD(t,e){var r={};return r.months=e.month()-t.month()+(e.year()-t.year())*12,t.clone().add(r.months,"M").isAfter(e)&&--r.months,r.milliseconds=+e-+t.clone().add(r.months,"M"),r}function SK(t,e){var r;return t.isValid()&&e.isValid()?(e=Tx(e,t),t.isBefore(e)?r=RD(t,e):(r=RD(e,t),r.milliseconds=-r.milliseconds,r.months=-r.months),r):{milliseconds:0,months:0}}function P3(t,e){return function(r,n){var i,a;return n!==null&&!isNaN(+n)&&(l3(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),a=r,r=n,n=a),i=Oa(r,n),k3(this,i,t),this}}function k3(t,e,r,n){var i=e._milliseconds,a=Bb(e._days),s=Bb(e._months);t.isValid()&&(n=n??!0,s&&b3(t,Oh(t,"Month")+s*r),a&&v3(t,"Date",Oh(t,"Date")+a*r),i&&t._d.setTime(t._d.valueOf()+i*r),n&&Qe.updateOffset(t,a||s))}var _K=P3(1,"add"),AK=P3(-1,"subtract");function B3(t){return typeof t=="string"||t instanceof String}function DK(t){return Ta(t)||id(t)||B3(t)||Ys(t)||NK(t)||EK(t)||t===null||t===void 0}function EK(t){var e=ku(t)&&!hx(t),r=!1,n=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],i,a,s=n.length;for(i=0;ir.valueOf():r.valueOf()9999?Mm(r,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):is(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",Mm(r,"Z")):Mm(r,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function qK(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="",r,n,i,a;return this.isLocal()||(t=this.utcOffset()===0?"moment.utc":"moment.parseZone",e="Z"),r="["+t+'("]',n=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",i="-MM-DD[T]HH:mm:ss.SSS",a=e+'[")]',this.format(r+n+i+a)}function UK(t){t||(t=this.isUtc()?Qe.defaultFormatUtc:Qe.defaultFormat);var e=Mm(this,t);return this.localeData().postformat(e)}function HK(t,e){return this.isValid()&&(Ta(t)&&t.isValid()||Pr(t).isValid())?Oa({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function WK(t){return this.from(Pr(),t)}function VK(t,e){return this.isValid()&&(Ta(t)&&t.isValid()||Pr(t).isValid())?Oa({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function YK(t){return this.to(Pr(),t)}function I3(t){var e;return t===void 0?this._locale._abbr:(e=Ks(t),e!=null&&(this._locale=e),this)}var L3=la("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return t===void 0?this.localeData():this.locale(t)});function $3(){return this._locale}var av=1e3,ec=60*av,sv=60*ec,z3=(365*400+97)*24*sv;function tc(t,e){return(t%e+e)%e}function q3(t,e,r){return t<100&&t>=0?new Date(t+400,e,r)-z3:new Date(t,e,r).valueOf()}function U3(t,e,r){return t<100&&t>=0?Date.UTC(t+400,e,r)-z3:Date.UTC(t,e,r)}function jK(t){var e,r;if(t=ca(t),t===void 0||t==="millisecond"||!this.isValid())return this;switch(r=this._isUTC?U3:q3,t){case"year":e=r(this.year(),0,1);break;case"quarter":e=r(this.year(),this.month()-this.month()%3,1);break;case"month":e=r(this.year(),this.month(),1);break;case"week":e=r(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":e=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":e=r(this.year(),this.month(),this.date());break;case"hour":e=this._d.valueOf(),e-=tc(e+(this._isUTC?0:this.utcOffset()*ec),sv);break;case"minute":e=this._d.valueOf(),e-=tc(e,ec);break;case"second":e=this._d.valueOf(),e-=tc(e,av);break}return this._d.setTime(e),Qe.updateOffset(this,!0),this}function GK(t){var e,r;if(t=ca(t),t===void 0||t==="millisecond"||!this.isValid())return this;switch(r=this._isUTC?U3:q3,t){case"year":e=r(this.year()+1,0,1)-1;break;case"quarter":e=r(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":e=r(this.year(),this.month()+1,1)-1;break;case"week":e=r(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":e=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":e=r(this.year(),this.month(),this.date()+1)-1;break;case"hour":e=this._d.valueOf(),e+=sv-tc(e+(this._isUTC?0:this.utcOffset()*ec),sv)-1;break;case"minute":e=this._d.valueOf(),e+=ec-tc(e,ec)-1;break;case"second":e=this._d.valueOf(),e+=av-tc(e,av)-1;break}return this._d.setTime(e),Qe.updateOffset(this,!0),this}function XK(){return this._d.valueOf()-(this._offset||0)*6e4}function ZK(){return Math.floor(this.valueOf()/1e3)}function KK(){return new Date(this.valueOf())}function JK(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function QK(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function eJ(){return this.isValid()?this.toISOString():null}function tJ(){return dx(this)}function rJ(){return Ro({},Lt(this))}function nJ(){return Lt(this).overflow}function iJ(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}ft("N",0,0,"eraAbbr");ft("NN",0,0,"eraAbbr");ft("NNN",0,0,"eraAbbr");ft("NNNN",0,0,"eraName");ft("NNNNN",0,0,"eraNarrow");ft("y",["y",1],"yo","eraYear");ft("y",["yy",2],0,"eraYear");ft("y",["yyy",3],0,"eraYear");ft("y",["yyyy",4],0,"eraYear");it("N",Ox);it("NN",Ox);it("NNN",Ox);it("NNNN",mJ);it("NNNNN",vJ);Sr(["N","NN","NNN","NNNN","NNNNN"],function(t,e,r,n){var i=r._locale.erasParse(t,n,r._strict);i?Lt(r).era=i:Lt(r).invalidEra=t});it("y",Cc);it("yy",Cc);it("yyy",Cc);it("yyyy",Cc);it("yo",gJ);Sr(["y","yy","yyy","yyyy"],Un);Sr(["yo"],function(t,e,r,n){var i;r._locale._eraYearOrdinalRegex&&(i=t.match(r._locale._eraYearOrdinalRegex)),r._locale.eraYearOrdinalParse?e[Un]=r._locale.eraYearOrdinalParse(t,i):e[Un]=parseInt(t,10)});function aJ(t,e){var r,n,i,a=this._eras||Ks("en")._eras;for(r=0,n=a.length;r=0)return a[n]}function oJ(t,e){var r=t.since<=t.until?1:-1;return e===void 0?Qe(t.since).year():Qe(t.since).year()+(e-t.offset)*r}function uJ(){var t,e,r,n=this.localeData().eras();for(t=0,e=n.length;ta&&(e=a),AJ.call(this,t,e,r,n,i))}function AJ(t,e,r,n,i){var a=S3(t,e,r,n,i),s=Fh(a.year,0,a.dayOfYear);return this.year(s.getUTCFullYear()),this.month(s.getUTCMonth()),this.date(s.getUTCDate()),this}ft("Q",0,"Qo","quarter");it("Q",f3);Sr("Q",function(t,e){e[Bs]=(Xt(t)-1)*3});function DJ(t){return t==null?Math.ceil((this.month()+1)/3):this.month((t-1)*3+this.month()%3)}ft("D",["DD",2],"Do","date");it("D",kr,Mc);it("DD",kr,Ii);it("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient});Sr(["D","DD"],ja);Sr("Do",function(t,e){e[ja]=Xt(t.match(kr)[0])});var W3=Tc("Date",!0);ft("DDD",["DDDD",3],"DDDo","dayOfYear");it("DDD",gg);it("DDDD",h3);Sr(["DDD","DDDD"],function(t,e,r){r._dayOfYear=Xt(t)});function EJ(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return t==null?e:this.add(t-e,"d")}ft("m",["mm",2],0,"minute");it("m",kr,xx);it("mm",kr,Ii);Sr(["m","mm"],_a);var NJ=Tc("Minutes",!1);ft("s",["ss",2],0,"second");it("s",kr,xx);it("ss",kr,Ii);Sr(["s","ss"],Is);var CJ=Tc("Seconds",!1);ft("S",0,0,function(){return~~(this.millisecond()/100)});ft(0,["SS",2],0,function(){return~~(this.millisecond()/10)});ft(0,["SSS",3],0,"millisecond");ft(0,["SSSS",4],0,function(){return this.millisecond()*10});ft(0,["SSSSS",5],0,function(){return this.millisecond()*100});ft(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3});ft(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4});ft(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5});ft(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6});it("S",gg,f3);it("SS",gg,Ii);it("SSS",gg,h3);var Po,V3;for(Po="SSSS";Po.length<=9;Po+="S")it(Po,Cc);function MJ(t,e){e[Mu]=Xt(("0."+t)*1e3)}for(Po="S";Po.length<=9;Po+="S")Sr(Po,MJ);V3=Tc("Milliseconds",!1);ft("z",0,0,"zoneAbbr");ft("zz",0,0,"zoneName");function TJ(){return this._isUTC?"UTC":""}function OJ(){return this._isUTC?"Coordinated Universal Time":""}var Xe=ad.prototype;Xe.add=_K;Xe.calendar=TK;Xe.clone=OK;Xe.diff=LK;Xe.endOf=GK;Xe.format=UK;Xe.from=HK;Xe.fromNow=WK;Xe.to=VK;Xe.toNow=YK;Xe.get=qX;Xe.invalidAt=nJ;Xe.isAfter=FK;Xe.isBefore=RK;Xe.isBetween=PK;Xe.isSame=kK;Xe.isSameOrAfter=BK;Xe.isSameOrBefore=IK;Xe.isValid=tJ;Xe.lang=L3;Xe.locale=I3;Xe.localeData=$3;Xe.max=tK;Xe.min=eK;Xe.parsingFlags=rJ;Xe.set=UX;Xe.startOf=jK;Xe.subtract=AK;Xe.toArray=JK;Xe.toObject=QK;Xe.toDate=KK;Xe.toISOString=zK;Xe.inspect=qK;typeof Symbol<"u"&&Symbol.for!=null&&(Xe[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"});Xe.toJSON=eJ;Xe.toString=$K;Xe.unix=ZK;Xe.valueOf=XK;Xe.creationData=iJ;Xe.eraName=uJ;Xe.eraNarrow=lJ;Xe.eraAbbr=cJ;Xe.eraYear=fJ;Xe.year=m3;Xe.isLeapYear=zX;Xe.weekYear=yJ;Xe.isoWeekYear=bJ;Xe.quarter=Xe.quarters=DJ;Xe.month=x3;Xe.daysInMonth=KX;Xe.week=Xe.weeks=aZ;Xe.isoWeek=Xe.isoWeeks=sZ;Xe.weeksInYear=SJ;Xe.weeksInWeekYear=_J;Xe.isoWeeksInYear=xJ;Xe.isoWeeksInISOWeekYear=wJ;Xe.date=W3;Xe.day=Xe.days=bZ;Xe.weekday=xZ;Xe.isoWeekday=wZ;Xe.dayOfYear=EJ;Xe.hour=Xe.hours=CZ;Xe.minute=Xe.minutes=NJ;Xe.second=Xe.seconds=CJ;Xe.millisecond=Xe.milliseconds=V3;Xe.utcOffset=cK;Xe.utc=hK;Xe.local=dK;Xe.parseZone=pK;Xe.hasAlignedHourOffset=mK;Xe.isDST=vK;Xe.isLocal=yK;Xe.isUtcOffset=bK;Xe.isUtc=R3;Xe.isUTC=R3;Xe.zoneAbbr=TJ;Xe.zoneName=OJ;Xe.dates=la("dates accessor is deprecated. Use date instead.",W3);Xe.months=la("months accessor is deprecated. Use month instead",x3);Xe.years=la("years accessor is deprecated. Use year instead",m3);Xe.zone=la("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",fK);Xe.isDSTShifted=la("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",gK);function FJ(t){return Pr(t*1e3)}function RJ(){return Pr.apply(null,arguments).parseZone()}function Y3(t){return t}var cr=mx.prototype;cr.calendar=yX;cr.longDateFormat=SX;cr.invalidDate=AX;cr.ordinal=NX;cr.preparse=Y3;cr.postformat=Y3;cr.relativeTime=MX;cr.pastFuture=TX;cr.set=vX;cr.eras=aJ;cr.erasParse=sJ;cr.erasConvertYear=oJ;cr.erasAbbrRegex=dJ;cr.erasNameRegex=hJ;cr.erasNarrowRegex=pJ;cr.months=jX;cr.monthsShort=GX;cr.monthsParse=ZX;cr.monthsRegex=QX;cr.monthsShortRegex=JX;cr.week=tZ;cr.firstDayOfYear=iZ;cr.firstDayOfWeek=nZ;cr.weekdays=pZ;cr.weekdaysMin=vZ;cr.weekdaysShort=mZ;cr.weekdaysParse=yZ;cr.weekdaysRegex=SZ;cr.weekdaysShortRegex=_Z;cr.weekdaysMinRegex=AZ;cr.isPM=EZ;cr.meridiem=MZ;function ov(t,e,r,n){var i=Ks(),a=rs().set(n,e);return i[r](a,t)}function j3(t,e,r){if(Ys(t)&&(e=t,t=void 0),t=t||"",e!=null)return ov(t,e,r,"month");var n,i=[];for(n=0;n<12;n++)i[n]=ov(t,n,r,"month");return i}function Rx(t,e,r,n){typeof t=="boolean"?(Ys(e)&&(r=e,e=void 0),e=e||""):(e=t,r=e,t=!1,Ys(e)&&(r=e,e=void 0),e=e||"");var i=Ks(),a=t?i._week.dow:0,s,o=[];if(r!=null)return ov(e,(r+a)%7,n,"day");for(s=0;s<7;s++)o[s]=ov(e,(s+a)%7,n,"day");return o}function PJ(t,e){return j3(t,e,"months")}function kJ(t,e){return j3(t,e,"monthsShort")}function BJ(t,e,r){return Rx(t,e,r,"weekdays")}function IJ(t,e,r){return Rx(t,e,r,"weekdaysShort")}function LJ(t,e,r){return Rx(t,e,r,"weekdaysMin")}Lo("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,r=Xt(t%100/10)===1?"th":e===1?"st":e===2?"nd":e===3?"rd":"th";return t+r}});Qe.lang=la("moment.lang is deprecated. Use moment.locale instead.",Lo);Qe.langData=la("moment.langData is deprecated. Use moment.localeData instead.",Ks);var Ss=Math.abs;function $J(){var t=this._data;return this._milliseconds=Ss(this._milliseconds),this._days=Ss(this._days),this._months=Ss(this._months),t.milliseconds=Ss(t.milliseconds),t.seconds=Ss(t.seconds),t.minutes=Ss(t.minutes),t.hours=Ss(t.hours),t.months=Ss(t.months),t.years=Ss(t.years),this}function G3(t,e,r,n){var i=Oa(e,r);return t._milliseconds+=n*i._milliseconds,t._days+=n*i._days,t._months+=n*i._months,t._bubble()}function zJ(t,e){return G3(this,t,e,1)}function qJ(t,e){return G3(this,t,e,-1)}function PD(t){return t<0?Math.floor(t):Math.ceil(t)}function UJ(){var t=this._milliseconds,e=this._days,r=this._months,n=this._data,i,a,s,o,u;return t>=0&&e>=0&&r>=0||t<=0&&e<=0&&r<=0||(t+=PD(Lb(r)+e)*864e5,e=0,r=0),n.milliseconds=t%1e3,i=Ji(t/1e3),n.seconds=i%60,a=Ji(i/60),n.minutes=a%60,s=Ji(a/60),n.hours=s%24,e+=Ji(s/24),u=Ji(X3(e)),r+=u,e-=PD(Lb(u)),o=Ji(r/12),r%=12,n.days=e,n.months=r,n.years=o,this}function X3(t){return t*4800/146097}function Lb(t){return t*146097/4800}function HJ(t){if(!this.isValid())return NaN;var e,r,n=this._milliseconds;if(t=ca(t),t==="month"||t==="quarter"||t==="year")switch(e=this._days+n/864e5,r=this._months+X3(e),t){case"month":return r;case"quarter":return r/3;case"year":return r/12}else switch(e=this._days+Math.round(Lb(this._months)),t){case"week":return e/7+n/6048e5;case"day":return e+n/864e5;case"hour":return e*24+n/36e5;case"minute":return e*1440+n/6e4;case"second":return e*86400+n/1e3;case"millisecond":return Math.floor(e*864e5)+n;default:throw new Error("Unknown unit "+t)}}function Js(t){return function(){return this.as(t)}}var Z3=Js("ms"),WJ=Js("s"),VJ=Js("m"),YJ=Js("h"),jJ=Js("d"),GJ=Js("w"),XJ=Js("M"),ZJ=Js("Q"),KJ=Js("y"),JJ=Z3;function QJ(){return Oa(this)}function eQ(t){return t=ca(t),this.isValid()?this[t+"s"]():NaN}function Ku(t){return function(){return this.isValid()?this._data[t]:NaN}}var tQ=Ku("milliseconds"),rQ=Ku("seconds"),nQ=Ku("minutes"),iQ=Ku("hours"),aQ=Ku("days"),sQ=Ku("months"),oQ=Ku("years");function uQ(){return Ji(this.days()/7)}var Ms=Math.round,Hl={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function lQ(t,e,r,n,i){return i.relativeTime(e||1,!!r,t,n)}function cQ(t,e,r,n){var i=Oa(t).abs(),a=Ms(i.as("s")),s=Ms(i.as("m")),o=Ms(i.as("h")),u=Ms(i.as("d")),l=Ms(i.as("M")),c=Ms(i.as("w")),f=Ms(i.as("y")),h=a<=r.ss&&["s",a]||a0,h[4]=n,lQ.apply(null,h)}function fQ(t){return t===void 0?Ms:typeof t=="function"?(Ms=t,!0):!1}function hQ(t,e){return Hl[t]===void 0?!1:e===void 0?Hl[t]:(Hl[t]=e,t==="s"&&(Hl.ss=e-1),!0)}function dQ(t,e){if(!this.isValid())return this.localeData().invalidDate();var r=!1,n=Hl,i,a;return typeof t=="object"&&(e=t,t=!1),typeof t=="boolean"&&(r=t),typeof e=="object"&&(n=Object.assign({},Hl,e),e.s!=null&&e.ss==null&&(n.ss=e.s-1)),i=this.localeData(),a=cQ(this,!r,n,i),r&&(a=i.pastFuture(+this,a)),i.postformat(a)}var zy=Math.abs;function Rl(t){return(t>0)-(t<0)||+t}function Dg(){if(!this.isValid())return this.localeData().invalidDate();var t=zy(this._milliseconds)/1e3,e=zy(this._days),r=zy(this._months),n,i,a,s,o=this.asSeconds(),u,l,c,f;return o?(n=Ji(t/60),i=Ji(n/60),t%=60,n%=60,a=Ji(r/12),r%=12,s=t?t.toFixed(3).replace(/\.?0+$/,""):"",u=o<0?"-":"",l=Rl(this._months)!==Rl(o)?"-":"",c=Rl(this._days)!==Rl(o)?"-":"",f=Rl(this._milliseconds)!==Rl(o)?"-":"",u+"P"+(a?l+a+"Y":"")+(r?l+r+"M":"")+(e?c+e+"D":"")+(i||n||t?"T":"")+(i?f+i+"H":"")+(n?f+n+"M":"")+(t?f+s+"S":"")):"P0D"}var ir=_g.prototype;ir.isValid=sK;ir.abs=$J;ir.add=zJ;ir.subtract=qJ;ir.as=HJ;ir.asMilliseconds=Z3;ir.asSeconds=WJ;ir.asMinutes=VJ;ir.asHours=YJ;ir.asDays=jJ;ir.asWeeks=GJ;ir.asMonths=XJ;ir.asQuarters=ZJ;ir.asYears=KJ;ir.valueOf=JJ;ir._bubble=UJ;ir.clone=QJ;ir.get=eQ;ir.milliseconds=tQ;ir.seconds=rQ;ir.minutes=nQ;ir.hours=iQ;ir.days=aQ;ir.weeks=uQ;ir.months=sQ;ir.years=oQ;ir.humanize=dQ;ir.toISOString=Dg;ir.toString=Dg;ir.toJSON=Dg;ir.locale=I3;ir.localeData=$3;ir.toIsoString=la("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Dg);ir.lang=L3;ft("X",0,0,"unix");ft("x",0,0,"valueOf");it("x",bg);it("X",PX);Sr("X",function(t,e,r){r._d=new Date(parseFloat(t)*1e3)});Sr("x",function(t,e,r){r._d=new Date(Xt(t))});//! moment.js +Qe.version="2.30.1";pX(Pr);Qe.fn=Xe;Qe.min=rK;Qe.max=nK;Qe.now=iK;Qe.utc=rs;Qe.unix=FJ;Qe.months=PJ;Qe.isDate=id;Qe.locale=Lo;Qe.invalid=mg;Qe.duration=Oa;Qe.isMoment=Ta;Qe.weekdays=BJ;Qe.parseZone=RJ;Qe.localeData=Ks;Qe.isDuration=Tm;Qe.monthsShort=kJ;Qe.weekdaysMin=LJ;Qe.defineLocale=Dx;Qe.updateLocale=RZ;Qe.locales=PZ;Qe.weekdaysShort=IJ;Qe.normalizeUnits=ca;Qe.relativeTimeRounding=fQ;Qe.relativeTimeThreshold=hQ;Qe.calendarFormat=MK;Qe.prototype=Xe;Qe.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"};/** * @vue/runtime-dom v3.4.18 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/const JJ="http://www.w3.org/2000/svg",QJ="http://www.w3.org/1998/Math/MathML",Ao=typeof document<"u"?document:null,FD=Ao&&Ao.createElement("template"),eQ={insert:(t,e,r)=>{e.insertBefore(t,r||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,r,n)=>{const i=e==="svg"?Ao.createElementNS(JJ,t):e==="mathml"?Ao.createElementNS(QJ,t):Ao.createElement(t,r?{is:r}:void 0);return t==="select"&&n&&n.multiple!=null&&i.setAttribute("multiple",n.multiple),i},createText:t=>Ao.createTextNode(t),createComment:t=>Ao.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>Ao.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,r,n,i,a){const s=r?r.previousSibling:e.lastChild;if(i&&(i===a||i.nextSibling))for(;e.insertBefore(i.cloneNode(!0),r),!(i===a||!(i=i.nextSibling)););else{FD.innerHTML=n==="svg"?`${t}`:n==="mathml"?`${t}`:t;const o=FD.content;if(n==="svg"||n==="mathml"){const u=o.firstChild;for(;u.firstChild;)o.appendChild(u.firstChild);o.removeChild(u)}e.insertBefore(o,r)}return[s?s.nextSibling:e.firstChild,r?r.previousSibling:e.lastChild]}},xo="transition",jf="animation",cc=Symbol("_vtc"),Px=(t,{slots:e})=>GM(XM,Y3(t),e);Px.displayName="Transition";const V3={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},tQ=Px.props=yi({},ZM,V3),Au=(t,e=[])=>{Vn(t)?t.forEach(r=>r(...e)):t&&t(...e)},PD=t=>t?Vn(t)?t.some(e=>e.length>1):t.length>1:!1;function Y3(t){const e={};for(const F in t)F in V3||(e[F]=t[F]);if(t.css===!1)return e;const{name:r="v",type:n,duration:i,enterFromClass:a=`${r}-enter-from`,enterActiveClass:s=`${r}-enter-active`,enterToClass:o=`${r}-enter-to`,appearFromClass:u=a,appearActiveClass:l=s,appearToClass:c=o,leaveFromClass:f=`${r}-leave-from`,leaveActiveClass:h=`${r}-leave-active`,leaveToClass:p=`${r}-leave-to`}=t,g=rQ(i),m=g&&g[0],b=g&&g[1],{onBeforeEnter:y,onEnter:S,onEnterCancelled:x,onLeave:_,onLeaveCancelled:A,onBeforeAppear:w=y,onAppear:C=S,onAppearCancelled:E=x}=e,N=(F,q,V)=>{So(F,q?c:o),So(F,q?l:s),V&&V()},M=(F,q)=>{F._isLeaving=!1,So(F,f),So(F,p),So(F,h),q&&q()},O=F=>(q,V)=>{const H=F?C:S,B=()=>N(q,F,V);Au(H,[q,B]),RD(()=>{So(q,F?u:a),Es(q,F?c:o),PD(H)||ID(q,n,m,B)})};return yi(e,{onBeforeEnter(F){Au(y,[F]),Es(F,a),Es(F,s)},onBeforeAppear(F){Au(w,[F]),Es(F,u),Es(F,l)},onEnter:O(!1),onAppear:O(!0),onLeave(F,q){F._isLeaving=!0;const V=()=>M(F,q);Es(F,f),G3(),Es(F,h),RD(()=>{F._isLeaving&&(So(F,f),Es(F,p),PD(_)||ID(F,n,b,V))}),Au(_,[F,V])},onEnterCancelled(F){N(F,!1),Au(x,[F])},onAppearCancelled(F){N(F,!0),Au(E,[F])},onLeaveCancelled(F){M(F),Au(A,[F])}})}function rQ(t){if(t==null)return null;if(KM(t))return[$y(t.enter),$y(t.leave)];{const e=$y(t);return[e,e]}}function $y(t){return eb(t)}function Es(t,e){e.split(/\s+/).forEach(r=>r&&t.classList.add(r)),(t[cc]||(t[cc]=new Set)).add(e)}function So(t,e){e.split(/\s+/).forEach(n=>n&&t.classList.remove(n));const r=t[cc];r&&(r.delete(e),r.size||(t[cc]=void 0))}function RD(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let nQ=0;function ID(t,e,r,n){const i=t._endId=++nQ,a=()=>{i===t._endId&&n()};if(r)return setTimeout(a,r);const{type:s,timeout:o,propCount:u}=j3(t,e);if(!s)return n();const l=s+"end";let c=0;const f=()=>{t.removeEventListener(l,h),a()},h=p=>{p.target===t&&++c>=u&&f()};setTimeout(()=>{c(r[g]||"").split(", "),i=n(`${xo}Delay`),a=n(`${xo}Duration`),s=BD(i,a),o=n(`${jf}Delay`),u=n(`${jf}Duration`),l=BD(o,u);let c=null,f=0,h=0;e===xo?s>0&&(c=xo,f=s,h=a.length):e===jf?l>0&&(c=jf,f=l,h=u.length):(f=Math.max(s,l),c=f>0?s>l?xo:jf:null,h=c?c===xo?a.length:u.length:0);const p=c===xo&&/\b(transform|all)(,|$)/.test(n(`${xo}Property`).toString());return{type:c,timeout:f,propCount:h,hasTransform:p}}function BD(t,e){for(;t.lengthkD(r)+kD(t[n])))}function kD(t){return t==="auto"?0:Number(t.slice(0,-1).replace(",","."))*1e3}function G3(){return document.body.offsetHeight}function iQ(t,e,r){const n=t[cc];n&&(e=(e?[e,...n]:[...n]).join(" ")),e==null?t.removeAttribute("class"):r?t.setAttribute("class",e):t.className=e}const Ih=Symbol("_vod"),X3={beforeMount(t,{value:e},{transition:r}){t[Ih]=t.style.display==="none"?"":t.style.display,r&&e?r.beforeEnter(t):Gf(t,e)},mounted(t,{value:e},{transition:r}){r&&e&&r.enter(t)},updated(t,{value:e,oldValue:r},{transition:n}){!e==!r&&t.style.display===t[Ih]||(n?e?(n.beforeEnter(t),Gf(t,!0),n.enter(t)):n.leave(t,()=>{Gf(t,!1)}):Gf(t,e))},beforeUnmount(t,{value:e}){Gf(t,e)}};function Gf(t,e){t.style.display=e?t[Ih]:"none"}function aQ(){X3.getSSRProps=({value:t})=>{if(!t)return{style:{display:"none"}}}}const Z3=Symbol("");function sQ(t){const e=Uv();if(!e)return;const r=e.ut=(i=t(e.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${e.uid}"]`)).forEach(a=>$b(a,i))},n=()=>{const i=t(e.proxy);Lb(e.subTree,i),r(i)};JM(n),QM(()=>{const i=new MutationObserver(n);i.observe(e.subTree.el.parentNode,{childList:!0}),eT(()=>i.disconnect())})}function Lb(t,e){if(t.shapeFlag&128){const r=t.suspense;t=r.activeBranch,r.pendingBranch&&!r.isHydrating&&r.effects.push(()=>{Lb(r.activeBranch,e)})}for(;t.component;)t=t.component.subTree;if(t.shapeFlag&1&&t.el)$b(t.el,e);else if(t.type===m1)t.children.forEach(r=>Lb(r,e));else if(t.type===rT){let{el:r,anchor:n}=t;for(;r&&($b(r,e),r!==n);)r=r.nextSibling}}function $b(t,e){if(t.nodeType===1){const r=t.style;let n="";for(const i in e)r.setProperty(`--${i}`,e[i]),n+=`--${i}: ${e[i]};`;r[Z3]=n}}const oQ=/(^|;)\s*display\s*:/;function uQ(t,e,r){const n=t.style,i=jr(r),a=n.display;let s=!1;if(r&&!i){if(e&&!jr(e))for(const o in e)r[o]==null&&zb(n,o,"");for(const o in r)o==="display"&&(s=!0),zb(n,o,r[o])}else if(i){if(e!==r){const o=n[Z3];o&&(r+=";"+o),n.cssText=r,s=oQ.test(r)}}else e&&t.removeAttribute("style");Ih in t&&(t[Ih]=s?n.display:"",n.display=a)}const LD=/\s*!important$/;function zb(t,e,r){if(Vn(r))r.forEach(n=>zb(t,e,n));else if(r==null&&(r=""),e.startsWith("--"))t.setProperty(e,r);else{const n=lQ(t,e);LD.test(r)?t.setProperty(Co(n),r.replace(LD,""),"important"):t[n]=r}}const $D=["Webkit","Moz","ms"],zy={};function lQ(t,e){const r=zy[e];if(r)return r;let n=Fi(e);if(n!=="filter"&&n in t)return zy[e]=n;n=Hv(n);for(let i=0;i<$D.length;i++){const a=$D[i]+n;if(a in t)return zy[e]=a}return e}const zD="http://www.w3.org/1999/xlink";function cQ(t,e,r,n,i){if(n&&e.startsWith("xlink:"))r==null?t.removeAttributeNS(zD,e.slice(6,e.length)):t.setAttributeNS(zD,e,r);else{const a=D$(e);r==null||a&&!lT(r)?t.removeAttribute(e):t.setAttribute(e,a?"":r)}}function fQ(t,e,r,n,i,a,s){if(e==="innerHTML"||e==="textContent"){n&&s(n,i,a),t[e]=r??"";return}const o=t.tagName;if(e==="value"&&o!=="PROGRESS"&&!o.includes("-")){t._value=r;const l=o==="OPTION"?t.getAttribute("value"):t.value,c=r??"";l!==c&&(t.value=c),r==null&&t.removeAttribute(e);return}let u=!1;if(r===""||r==null){const l=typeof t[e];l==="boolean"?r=lT(r):r==null&&l==="string"?(r="",u=!0):l==="number"&&(r=0,u=!0)}try{t[e]=r}catch{}u&&t.removeAttribute(e)}function Os(t,e,r,n){t.addEventListener(e,r,n)}function hQ(t,e,r,n){t.removeEventListener(e,r,n)}const qD=Symbol("_vei");function dQ(t,e,r,n,i=null){const a=t[qD]||(t[qD]={}),s=a[e];if(n&&s)s.value=n;else{const[o,u]=pQ(e);if(n){const l=a[e]=gQ(n,i);Os(t,o,l,u)}else s&&(hQ(t,o,s,u),a[e]=void 0)}}const UD=/(?:Once|Passive|Capture)$/;function pQ(t){let e;if(UD.test(t)){e={};let n;for(;n=t.match(UD);)t=t.slice(0,t.length-n[0].length),e[n[0].toLowerCase()]=!0}return[t[2]===":"?t.slice(3):Co(t.slice(2)),e]}let qy=0;const mQ=Promise.resolve(),vQ=()=>qy||(mQ.then(()=>qy=0),qy=Date.now());function gQ(t,e){const r=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=r.attached)return;cT(yQ(n,r.value),e,5,[n])};return r.value=t,r.attached=vQ(),r}function yQ(t,e){if(Vn(e)){const r=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{r.call(t),t._stopped=!0},e.map(n=>i=>!i._stopped&&n&&n(i))}else return e}const HD=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123,bQ=(t,e,r,n,i,a,s,o,u)=>{const l=i==="svg";e==="class"?iQ(t,n,l):e==="style"?uQ(t,r,n):v1(e)?A$(e)||dQ(t,e,r,n,s):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):xQ(t,e,n,l))?fQ(t,e,n,a,s,o,u):(e==="true-value"?t._trueValue=n:e==="false-value"&&(t._falseValue=n),cQ(t,e,n,l))};function xQ(t,e,r,n){if(n)return!!(e==="innerHTML"||e==="textContent"||e in t&&HD(e)&&jM(r));if(e==="spellcheck"||e==="draggable"||e==="translate"||e==="form"||e==="list"&&t.tagName==="INPUT"||e==="type"&&t.tagName==="TEXTAREA")return!1;if(e==="width"||e==="height"){const i=t.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return HD(e)&&jr(r)?!1:e in t}/*! #__NO_SIDE_EFFECTS__ */function K3(t,e){const r=nT(t);class n extends Ag{constructor(a){super(r,a,e)}}return n.def=r,n}/*! #__NO_SIDE_EFFECTS__ */const wQ=t=>K3(t,uP),SQ=typeof HTMLElement<"u"?HTMLElement:class{};class Ag extends SQ{constructor(e,r={},n){super(),this._def=e,this._props=r,this._instance=null,this._connected=!1,this._resolved=!1,this._numberProps=null,this._ob=null,this.shadowRoot&&n?n(this._createVNode(),this.shadowRoot):(this.attachShadow({mode:"open"}),this._def.__asyncLoader||this._resolveProps(this._def))}connectedCallback(){this._connected=!0,this._instance||(this._resolved?this._update():this._resolveDef())}disconnectedCallback(){this._connected=!1,this._ob&&(this._ob.disconnect(),this._ob=null),d1(()=>{this._connected||(qb(null,this.shadowRoot),this._instance=null)})}_resolveDef(){this._resolved=!0;for(let n=0;n{for(const i of n)this._setAttr(i.attributeName)}),this._ob.observe(this,{attributes:!0});const e=(n,i=!1)=>{const{props:a,styles:s}=n;let o;if(a&&!Vn(a))for(const u in a){const l=a[u];(l===Number||l&&l.type===Number)&&(u in this._props&&(this._props[u]=eb(this._props[u])),(o||(o=Object.create(null)))[Fi(u)]=!0)}this._numberProps=o,i&&this._resolveProps(n),this._applyStyles(s),this._update()},r=this._def.__asyncLoader;r?r().then(n=>e(n,!0)):e(this._def)}_resolveProps(e){const{props:r}=e,n=Vn(r)?r:Object.keys(r||{});for(const i of Object.keys(this))i[0]!=="_"&&n.includes(i)&&this._setProp(i,this[i],!0,!1);for(const i of n.map(Fi))Object.defineProperty(this,i,{get(){return this._getProp(i)},set(a){this._setProp(i,a)}})}_setAttr(e){let r=this.getAttribute(e);const n=Fi(e);this._numberProps&&this._numberProps[n]&&(r=eb(r)),this._setProp(n,r,!1)}_getProp(e){return this._props[e]}_setProp(e,r,n=!0,i=!0){r!==this._props[e]&&(this._props[e]=r,i&&this._instance&&this._update(),n&&(r===!0?this.setAttribute(Co(e),""):typeof r=="string"||typeof r=="number"?this.setAttribute(Co(e),r+""):r||this.removeAttribute(Co(e))))}_update(){qb(this._createVNode(),this.shadowRoot)}_createVNode(){const e=p1(this._def,yi({},this._props));return this._instance||(e.ce=r=>{this._instance=r,r.isCE=!0;const n=(a,s)=>{this.dispatchEvent(new CustomEvent(a,{detail:s}))};r.emit=(a,...s)=>{n(a,s),Co(a)!==a&&n(Co(a),s)};let i=this;for(;i=i&&(i.parentNode||i.host);)if(i instanceof Ag){r.parent=i._instance,r.provides=i._instance.provides;break}}),e}_applyStyles(e){e&&e.forEach(r=>{const n=document.createElement("style");n.textContent=r,this.shadowRoot.appendChild(n)})}}function _Q(t="$style"){{const e=Uv();if(!e)return jl;const r=e.type.__cssModules;if(!r)return jl;const n=r[t];return n||jl}}const J3=new WeakMap,Q3=new WeakMap,ov=Symbol("_moveCb"),WD=Symbol("_enterCb"),eP={name:"TransitionGroup",props:yi({},tQ,{tag:String,moveClass:String}),setup(t,{slots:e}){const r=Uv(),n=iT();let i,a;return aT(()=>{if(!i.length)return;const s=t.moveClass||`${t.name||"v"}-move`;if(!MQ(i[0].el,r.vnode.el,s))return;i.forEach(NQ),i.forEach(EQ);const o=i.filter(CQ);G3(),o.forEach(u=>{const l=u.el,c=l.style;Es(l,s),c.transform=c.webkitTransform=c.transitionDuration="";const f=l[ov]=h=>{h&&h.target!==l||(!h||/transform$/.test(h.propertyName))&&(l.removeEventListener("transitionend",f),l[ov]=null,So(l,s))};l.addEventListener("transitionend",f)})}),()=>{const s=sT(t),o=Y3(s);let u=s.tag||m1;i=a,a=e.default?oT(e.default()):[];for(let l=0;ldelete t.mode;eP.props;const DQ=eP;function NQ(t){const e=t.el;e[ov]&&e[ov](),e[WD]&&e[WD]()}function EQ(t){Q3.set(t,t.el.getBoundingClientRect())}function CQ(t){const e=J3.get(t),r=Q3.get(t),n=e.left-r.left,i=e.top-r.top;if(n||i){const a=t.el.style;return a.transform=a.webkitTransform=`translate(${n}px,${i}px)`,a.transitionDuration="0s",t}}function MQ(t,e,r){const n=t.cloneNode(),i=t[cc];i&&i.forEach(o=>{o.split(/\s+/).forEach(u=>u&&n.classList.remove(u))}),r.split(/\s+/).forEach(o=>o&&n.classList.add(o)),n.style.display="none";const a=e.nodeType===1?e:e.parentNode;a.appendChild(n);const{hasTransform:s}=j3(n);return a.removeChild(n),s}const Uo=t=>{const e=t.props["onUpdate:modelValue"]||!1;return Vn(e)?r=>_$(e,r):e};function TQ(t){t.target.composing=!0}function VD(t){const e=t.target;e.composing&&(e.composing=!1,e.dispatchEvent(new Event("input")))}const aa=Symbol("_assign"),uv={created(t,{modifiers:{lazy:e,trim:r,number:n}},i){t[aa]=Uo(i);const a=n||i.props&&i.props.type==="number";Os(t,e?"change":"input",s=>{if(s.target.composing)return;let o=t.value;r&&(o=o.trim()),a&&(o=km(o)),t[aa](o)}),r&&Os(t,"change",()=>{t.value=t.value.trim()}),e||(Os(t,"compositionstart",TQ),Os(t,"compositionend",VD),Os(t,"change",VD))},mounted(t,{value:e}){t.value=e??""},beforeUpdate(t,{value:e,modifiers:{lazy:r,trim:n,number:i}},a){if(t[aa]=Uo(a),t.composing)return;const s=i||t.type==="number"?km(t.value):t.value,o=e??"";s!==o&&(document.activeElement===t&&t.type!=="range"&&(r||n&&t.value.trim()===o)||(t.value=o))}},Rx={deep:!0,created(t,e,r){t[aa]=Uo(r),Os(t,"change",()=>{const n=t._modelValue,i=fc(t),a=t.checked,s=t[aa];if(Vn(n)){const o=qv(n,i),u=o!==-1;if(a&&!u)s(n.concat(i));else if(!a&&u){const l=[...n];l.splice(o,1),s(l)}}else if(jh(n)){const o=new Set(n);a?o.add(i):o.delete(i),s(o)}else s(rP(t,a))})},mounted:YD,beforeUpdate(t,e,r){t[aa]=Uo(r),YD(t,e,r)}};function YD(t,{value:e,oldValue:r},n){t._modelValue=e,Vn(e)?t.checked=qv(e,n.props.value)>-1:jh(e)?t.checked=e.has(n.props.value):e!==r&&(t.checked=bh(e,rP(t,!0)))}const Ix={created(t,{value:e},r){t.checked=bh(e,r.props.value),t[aa]=Uo(r),Os(t,"change",()=>{t[aa](fc(t))})},beforeUpdate(t,{value:e,oldValue:r},n){t[aa]=Uo(n),e!==r&&(t.checked=bh(e,n.props.value))}},tP={deep:!0,created(t,{value:e,modifiers:{number:r}},n){const i=jh(e);Os(t,"change",()=>{const a=Array.prototype.filter.call(t.options,s=>s.selected).map(s=>r?km(fc(s)):fc(s));t[aa](t.multiple?i?new Set(a):a:a[0]),t._assigning=!0,d1(()=>{t._assigning=!1})}),t[aa]=Uo(n)},mounted(t,{value:e,oldValue:r,modifiers:{number:n}}){jD(t,e,r,n)},beforeUpdate(t,e,r){t[aa]=Uo(r)},updated(t,{value:e,oldValue:r,modifiers:{number:n}}){t._assigning||jD(t,e,r,n)}};function jD(t,e,r,n){const i=t.multiple,a=Vn(e);if(!(i&&!a&&!jh(e))){for(let s=0,o=t.options.length;s-1}else u.selected=e.has(l);else if(bh(fc(u),e)){t.selectedIndex!==s&&(t.selectedIndex=s);return}}!i&&t.selectedIndex!==-1&&(t.selectedIndex=-1)}}function fc(t){return"_value"in t?t._value:t.value}function rP(t,e){const r=e?"_trueValue":"_falseValue";return r in t?t[r]:e}const nP={created(t,e,r){Kp(t,e,r,null,"created")},mounted(t,e,r){Kp(t,e,r,null,"mounted")},beforeUpdate(t,e,r,n){Kp(t,e,r,n,"beforeUpdate")},updated(t,e,r,n){Kp(t,e,r,n,"updated")}};function iP(t,e){switch(t){case"SELECT":return tP;case"TEXTAREA":return uv;default:switch(e){case"checkbox":return Rx;case"radio":return Ix;default:return uv}}}function Kp(t,e,r,n,i){const s=iP(t.tagName,r.props&&r.props.type)[i];s&&s(t,e,r,n)}function OQ(){uv.getSSRProps=({value:t})=>({value:t}),Ix.getSSRProps=({value:t},e)=>{if(e.props&&bh(e.props.value,t))return{checked:!0}},Rx.getSSRProps=({value:t},e)=>{if(Vn(t)){if(e.props&&qv(t,e.props.value)>-1)return{checked:!0}}else if(jh(t)){if(e.props&&t.has(e.props.value))return{checked:!0}}else if(t)return{checked:!0}},nP.getSSRProps=(t,e)=>{if(typeof e.type!="string")return;const r=iP(e.type.toUpperCase(),e.props&&e.props.type);if(r.getSSRProps)return r.getSSRProps(t,e)}}const FQ=["ctrl","shift","alt","meta"],PQ={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,e)=>FQ.some(r=>t[`${r}Key`]&&!e.includes(r))},RQ=(t,e)=>{const r=t._withMods||(t._withMods={}),n=e.join(".");return r[n]||(r[n]=(i,...a)=>{for(let s=0;s{const r=t._withKeys||(t._withKeys={}),n=e.join(".");return r[n]||(r[n]=i=>{if(!("key"in i))return;const a=Co(i.key);if(e.some(s=>s===a||IQ[s]===a))return t(i)})},aP=yi({patchProp:bQ},eQ);let gh,GD=!1;function sP(){return gh||(gh=tT(aP))}function oP(){return gh=GD?gh:uT(aP),GD=!0,gh}const qb=(...t)=>{sP().render(...t)},uP=(...t)=>{oP().hydrate(...t)},kQ=(...t)=>{const e=sP().createApp(...t),{mount:r}=e;return e.mount=n=>{const i=cP(n);if(!i)return;const a=e._component;!jM(a)&&!a.render&&!a.template&&(a.template=i.innerHTML),i.innerHTML="";const s=r(i,!1,lP(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),s},e},LQ=(...t)=>{const e=oP().createApp(...t),{mount:r}=e;return e.mount=n=>{const i=cP(n);if(i)return r(i,!0,lP(i))},e};function lP(t){if(t instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&t instanceof MathMLElement)return"mathml"}function cP(t){return jr(t)?document.querySelector(t):t}let XD=!1;const $Q=()=>{XD||(XD=!0,OQ(),aQ())},zQ=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:XM,BaseTransitionPropsValidators:ZM,Comment:N$,DeprecationTypes:E$,EffectScope:C$,ErrorCodes:M$,ErrorTypeStrings:T$,Fragment:m1,KeepAlive:O$,ReactiveEffect:F$,Static:rT,Suspense:P$,Teleport:R$,Text:I$,TrackOpTypes:B$,Transition:Px,TransitionGroup:DQ,TriggerOpTypes:k$,VueElement:Ag,assertNumber:L$,callWithAsyncErrorHandling:cT,callWithErrorHandling:$$,camelize:Fi,capitalize:Hv,cloneVNode:z$,compatUtils:q$,computed:U$,createApp:kQ,createBlock:H$,createCommentVNode:W$,createElementBlock:V$,createElementVNode:Y$,createHydrationRenderer:uT,createPropsRestProxy:j$,createRenderer:tT,createSSRApp:LQ,createSlots:G$,createStaticVNode:X$,createTextVNode:Z$,createVNode:p1,customRef:K$,defineAsyncComponent:J$,defineComponent:nT,defineCustomElement:K3,defineEmits:Q$,defineExpose:ez,defineModel:tz,defineOptions:rz,defineProps:nz,defineSSRCustomElement:wQ,defineSlots:iz,devtools:az,effect:sz,effectScope:oz,getCurrentInstance:Uv,getCurrentScope:uz,getTransitionRawChildren:oT,guardReactiveProps:lz,h:GM,handleError:cz,hasInjectionContext:fz,hydrate:uP,initCustomFormatter:hz,initDirectivesForSSR:$Q,inject:dz,isMemoSame:pz,isProxy:mz,isReactive:vz,isReadonly:gz,isRef:yz,isRuntimeOnly:bz,isShallow:xz,isVNode:wz,markRaw:Sz,mergeDefaults:_z,mergeModels:Az,mergeProps:Dz,nextTick:d1,normalizeClass:Nz,normalizeProps:Ez,normalizeStyle:Cz,onActivated:Mz,onBeforeMount:Tz,onBeforeUnmount:Oz,onBeforeUpdate:Fz,onDeactivated:Pz,onErrorCaptured:Rz,onMounted:QM,onRenderTracked:Iz,onRenderTriggered:Bz,onScopeDispose:kz,onServerPrefetch:Lz,onUnmounted:eT,onUpdated:aT,openBlock:$z,popScopeId:zz,provide:qz,proxyRefs:Uz,pushScopeId:Hz,queuePostFlushCb:Wz,reactive:Vz,readonly:Yz,ref:jz,registerRuntimeCompiler:fT,render:qb,renderList:Gz,renderSlot:Xz,resolveComponent:Zz,resolveDirective:Kz,resolveDynamicComponent:Jz,resolveFilter:Qz,resolveTransitionHooks:rb,setBlockTracking:e9,setDevtoolsHook:t9,setTransitionHooks:tb,shallowReactive:r9,shallowReadonly:n9,shallowRef:g1,ssrContextKey:i9,ssrUtils:a9,stop:s9,toDisplayString:o9,toHandlerKey:hT,toHandlers:u9,toRaw:sT,toRef:l9,toRefs:c9,toValue:f9,transformVNodeArgs:h9,triggerRef:d9,unref:p9,useAttrs:m9,useCssModule:_Q,useCssVars:sQ,useModel:v9,useSSRContext:g9,useSlots:y9,useTransitionState:iT,vModelCheckbox:Rx,vModelDynamic:nP,vModelRadio:Ix,vModelSelect:tP,vModelText:uv,vShow:X3,version:b9,warn:x9,watch:w9,watchEffect:S9,watchPostEffect:JM,watchSyncEffect:_9,withAsyncContext:A9,withCtx:D9,withDefaults:N9,withDirectives:E9,withKeys:BQ,withMemo:C9,withModifiers:RQ,withScopeId:M9},Symbol.toStringTag,{value:"Module"}));/** +**/const pQ="http://www.w3.org/2000/svg",mQ="http://www.w3.org/1998/Math/MathML",Ao=typeof document<"u"?document:null,kD=Ao&&Ao.createElement("template"),vQ={insert:(t,e,r)=>{e.insertBefore(t,r||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,r,n)=>{const i=e==="svg"?Ao.createElementNS(pQ,t):e==="mathml"?Ao.createElementNS(mQ,t):Ao.createElement(t,r?{is:r}:void 0);return t==="select"&&n&&n.multiple!=null&&i.setAttribute("multiple",n.multiple),i},createText:t=>Ao.createTextNode(t),createComment:t=>Ao.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>Ao.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,r,n,i,a){const s=r?r.previousSibling:e.lastChild;if(i&&(i===a||i.nextSibling))for(;e.insertBefore(i.cloneNode(!0),r),!(i===a||!(i=i.nextSibling)););else{kD.innerHTML=n==="svg"?`${t}`:n==="mathml"?`${t}`:t;const o=kD.content;if(n==="svg"||n==="mathml"){const u=o.firstChild;for(;u.firstChild;)o.appendChild(u.firstChild);o.removeChild(u)}e.insertBefore(o,r)}return[s?s.nextSibling:e.firstChild,r?r.previousSibling:e.lastChild]}},xo="transition",Xf="animation",hc=Symbol("_vtc"),Px=(t,{slots:e})=>KM(JM,J3(t),e);Px.displayName="Transition";const K3={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},gQ=Px.props=yi({},QM,K3),Au=(t,e=[])=>{Vn(t)?t.forEach(r=>r(...e)):t&&t(...e)},BD=t=>t?Vn(t)?t.some(e=>e.length>1):t.length>1:!1;function J3(t){const e={};for(const F in t)F in K3||(e[F]=t[F]);if(t.css===!1)return e;const{name:r="v",type:n,duration:i,enterFromClass:a=`${r}-enter-from`,enterActiveClass:s=`${r}-enter-active`,enterToClass:o=`${r}-enter-to`,appearFromClass:u=a,appearActiveClass:l=s,appearToClass:c=o,leaveFromClass:f=`${r}-leave-from`,leaveActiveClass:h=`${r}-leave-active`,leaveToClass:p=`${r}-leave-to`}=t,g=yQ(i),m=g&&g[0],b=g&&g[1],{onBeforeEnter:y,onEnter:S,onEnterCancelled:x,onLeave:_,onLeaveCancelled:A,onBeforeAppear:w=y,onAppear:C=S,onAppearCancelled:N=x}=e,E=(F,q,V)=>{So(F,q?c:o),So(F,q?l:s),V&&V()},M=(F,q)=>{F._isLeaving=!1,So(F,f),So(F,p),So(F,h),q&&q()},O=F=>(q,V)=>{const H=F?C:S,B=()=>E(q,F,V);Au(H,[q,B]),ID(()=>{So(q,F?u:a),Ns(q,F?c:o),BD(H)||LD(q,n,m,B)})};return yi(e,{onBeforeEnter(F){Au(y,[F]),Ns(F,a),Ns(F,s)},onBeforeAppear(F){Au(w,[F]),Ns(F,u),Ns(F,l)},onEnter:O(!1),onAppear:O(!0),onLeave(F,q){F._isLeaving=!0;const V=()=>M(F,q);Ns(F,f),eR(),Ns(F,h),ID(()=>{F._isLeaving&&(So(F,f),Ns(F,p),BD(_)||LD(F,n,b,V))}),Au(_,[F,V])},onEnterCancelled(F){E(F,!1),Au(x,[F])},onAppearCancelled(F){E(F,!0),Au(N,[F])},onLeaveCancelled(F){M(F),Au(A,[F])}})}function yQ(t){if(t==null)return null;if(eT(t))return[qy(t.enter),qy(t.leave)];{const e=qy(t);return[e,e]}}function qy(t){return rb(t)}function Ns(t,e){e.split(/\s+/).forEach(r=>r&&t.classList.add(r)),(t[hc]||(t[hc]=new Set)).add(e)}function So(t,e){e.split(/\s+/).forEach(n=>n&&t.classList.remove(n));const r=t[hc];r&&(r.delete(e),r.size||(t[hc]=void 0))}function ID(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let bQ=0;function LD(t,e,r,n){const i=t._endId=++bQ,a=()=>{i===t._endId&&n()};if(r)return setTimeout(a,r);const{type:s,timeout:o,propCount:u}=Q3(t,e);if(!s)return n();const l=s+"end";let c=0;const f=()=>{t.removeEventListener(l,h),a()},h=p=>{p.target===t&&++c>=u&&f()};setTimeout(()=>{c(r[g]||"").split(", "),i=n(`${xo}Delay`),a=n(`${xo}Duration`),s=$D(i,a),o=n(`${Xf}Delay`),u=n(`${Xf}Duration`),l=$D(o,u);let c=null,f=0,h=0;e===xo?s>0&&(c=xo,f=s,h=a.length):e===Xf?l>0&&(c=Xf,f=l,h=u.length):(f=Math.max(s,l),c=f>0?s>l?xo:Xf:null,h=c?c===xo?a.length:u.length:0);const p=c===xo&&/\b(transform|all)(,|$)/.test(n(`${xo}Property`).toString());return{type:c,timeout:f,propCount:h,hasTransform:p}}function $D(t,e){for(;t.lengthzD(r)+zD(t[n])))}function zD(t){return t==="auto"?0:Number(t.slice(0,-1).replace(",","."))*1e3}function eR(){return document.body.offsetHeight}function xQ(t,e,r){const n=t[hc];n&&(e=(e?[e,...n]:[...n]).join(" ")),e==null?t.removeAttribute("class"):r?t.setAttribute("class",e):t.className=e}const kh=Symbol("_vod"),tR={beforeMount(t,{value:e},{transition:r}){t[kh]=t.style.display==="none"?"":t.style.display,r&&e?r.beforeEnter(t):Zf(t,e)},mounted(t,{value:e},{transition:r}){r&&e&&r.enter(t)},updated(t,{value:e,oldValue:r},{transition:n}){!e==!r&&t.style.display===t[kh]||(n?e?(n.beforeEnter(t),Zf(t,!0),n.enter(t)):n.leave(t,()=>{Zf(t,!1)}):Zf(t,e))},beforeUnmount(t,{value:e}){Zf(t,e)}};function Zf(t,e){t.style.display=e?t[kh]:"none"}function wQ(){tR.getSSRProps=({value:t})=>{if(!t)return{style:{display:"none"}}}}const rR=Symbol("");function SQ(t){const e=Hv();if(!e)return;const r=e.ut=(i=t(e.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${e.uid}"]`)).forEach(a=>zb(a,i))},n=()=>{const i=t(e.proxy);$b(e.subTree,i),r(i)};tT(n),rT(()=>{const i=new MutationObserver(n);i.observe(e.subTree.el.parentNode,{childList:!0}),nT(()=>i.disconnect())})}function $b(t,e){if(t.shapeFlag&128){const r=t.suspense;t=r.activeBranch,r.pendingBranch&&!r.isHydrating&&r.effects.push(()=>{$b(r.activeBranch,e)})}for(;t.component;)t=t.component.subTree;if(t.shapeFlag&1&&t.el)zb(t.el,e);else if(t.type===v1)t.children.forEach(r=>$b(r,e));else if(t.type===aT){let{el:r,anchor:n}=t;for(;r&&(zb(r,e),r!==n);)r=r.nextSibling}}function zb(t,e){if(t.nodeType===1){const r=t.style;let n="";for(const i in e)r.setProperty(`--${i}`,e[i]),n+=`--${i}: ${e[i]};`;r[rR]=n}}const _Q=/(^|;)\s*display\s*:/;function AQ(t,e,r){const n=t.style,i=jr(r),a=n.display;let s=!1;if(r&&!i){if(e&&!jr(e))for(const o in e)r[o]==null&&qb(n,o,"");for(const o in r)o==="display"&&(s=!0),qb(n,o,r[o])}else if(i){if(e!==r){const o=n[rR];o&&(r+=";"+o),n.cssText=r,s=_Q.test(r)}}else e&&t.removeAttribute("style");kh in t&&(t[kh]=s?n.display:"",n.display=a)}const qD=/\s*!important$/;function qb(t,e,r){if(Vn(r))r.forEach(n=>qb(t,e,n));else if(r==null&&(r=""),e.startsWith("--"))t.setProperty(e,r);else{const n=DQ(t,e);qD.test(r)?t.setProperty(Co(n),r.replace(qD,""),"important"):t[n]=r}}const UD=["Webkit","Moz","ms"],Uy={};function DQ(t,e){const r=Uy[e];if(r)return r;let n=Fi(e);if(n!=="filter"&&n in t)return Uy[e]=n;n=Wv(n);for(let i=0;iHy||(OQ.then(()=>Hy=0),Hy=Date.now());function RQ(t,e){const r=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=r.attached)return;hT(PQ(n,r.value),e,5,[n])};return r.value=t,r.attached=FQ(),r}function PQ(t,e){if(Vn(e)){const r=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{r.call(t),t._stopped=!0},e.map(n=>i=>!i._stopped&&n&&n(i))}else return e}const YD=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123,kQ=(t,e,r,n,i,a,s,o,u)=>{const l=i==="svg";e==="class"?xQ(t,n,l):e==="style"?AQ(t,r,n):y1(e)?L$(e)||MQ(t,e,r,n,s):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):BQ(t,e,n,l))?NQ(t,e,n,a,s,o,u):(e==="true-value"?t._trueValue=n:e==="false-value"&&(t._falseValue=n),EQ(t,e,n,l))};function BQ(t,e,r,n){if(n)return!!(e==="innerHTML"||e==="textContent"||e in t&&YD(e)&&ZM(r));if(e==="spellcheck"||e==="draggable"||e==="translate"||e==="form"||e==="list"&&t.tagName==="INPUT"||e==="type"&&t.tagName==="TEXTAREA")return!1;if(e==="width"||e==="height"){const i=t.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return YD(e)&&jr(r)?!1:e in t}/*! #__NO_SIDE_EFFECTS__ */function nR(t,e){const r=g1(t);class n extends Eg{constructor(a){super(r,a,e)}}return n.def=r,n}/*! #__NO_SIDE_EFFECTS__ */const IQ=t=>nR(t,pR),LQ=typeof HTMLElement<"u"?HTMLElement:class{};class Eg extends LQ{constructor(e,r={},n){super(),this._def=e,this._props=r,this._instance=null,this._connected=!1,this._resolved=!1,this._numberProps=null,this._ob=null,this.shadowRoot&&n?n(this._createVNode(),this.shadowRoot):(this.attachShadow({mode:"open"}),this._def.__asyncLoader||this._resolveProps(this._def))}connectedCallback(){this._connected=!0,this._instance||(this._resolved?this._update():this._resolveDef())}disconnectedCallback(){this._connected=!1,this._ob&&(this._ob.disconnect(),this._ob=null),p1(()=>{this._connected||(Ub(null,this.shadowRoot),this._instance=null)})}_resolveDef(){this._resolved=!0;for(let n=0;n{for(const i of n)this._setAttr(i.attributeName)}),this._ob.observe(this,{attributes:!0});const e=(n,i=!1)=>{const{props:a,styles:s}=n;let o;if(a&&!Vn(a))for(const u in a){const l=a[u];(l===Number||l&&l.type===Number)&&(u in this._props&&(this._props[u]=rb(this._props[u])),(o||(o=Object.create(null)))[Fi(u)]=!0)}this._numberProps=o,i&&this._resolveProps(n),this._applyStyles(s),this._update()},r=this._def.__asyncLoader;r?r().then(n=>e(n,!0)):e(this._def)}_resolveProps(e){const{props:r}=e,n=Vn(r)?r:Object.keys(r||{});for(const i of Object.keys(this))i[0]!=="_"&&n.includes(i)&&this._setProp(i,this[i],!0,!1);for(const i of n.map(Fi))Object.defineProperty(this,i,{get(){return this._getProp(i)},set(a){this._setProp(i,a)}})}_setAttr(e){let r=this.getAttribute(e);const n=Fi(e);this._numberProps&&this._numberProps[n]&&(r=rb(r)),this._setProp(n,r,!1)}_getProp(e){return this._props[e]}_setProp(e,r,n=!0,i=!0){r!==this._props[e]&&(this._props[e]=r,i&&this._instance&&this._update(),n&&(r===!0?this.setAttribute(Co(e),""):typeof r=="string"||typeof r=="number"?this.setAttribute(Co(e),r+""):r||this.removeAttribute(Co(e))))}_update(){Ub(this._createVNode(),this.shadowRoot)}_createVNode(){const e=m1(this._def,yi({},this._props));return this._instance||(e.ce=r=>{this._instance=r,r.isCE=!0;const n=(a,s)=>{this.dispatchEvent(new CustomEvent(a,{detail:s}))};r.emit=(a,...s)=>{n(a,s),Co(a)!==a&&n(Co(a),s)};let i=this;for(;i=i&&(i.parentNode||i.host);)if(i instanceof Eg){r.parent=i._instance,r.provides=i._instance.provides;break}}),e}_applyStyles(e){e&&e.forEach(r=>{const n=document.createElement("style");n.textContent=r,this.shadowRoot.appendChild(n)})}}function $Q(t="$style"){{const e=Hv();if(!e)return Xl;const r=e.type.__cssModules;if(!r)return Xl;const n=r[t];return n||Xl}}const iR=new WeakMap,aR=new WeakMap,uv=Symbol("_moveCb"),jD=Symbol("_enterCb"),sR={name:"TransitionGroup",props:yi({},gQ,{tag:String,moveClass:String}),setup(t,{slots:e}){const r=Hv(),n=sT();let i,a;return oT(()=>{if(!i.length)return;const s=t.moveClass||`${t.name||"v"}-move`;if(!VQ(i[0].el,r.vnode.el,s))return;i.forEach(UQ),i.forEach(HQ);const o=i.filter(WQ);eR(),o.forEach(u=>{const l=u.el,c=l.style;Ns(l,s),c.transform=c.webkitTransform=c.transitionDuration="";const f=l[uv]=h=>{h&&h.target!==l||(!h||/transform$/.test(h.propertyName))&&(l.removeEventListener("transitionend",f),l[uv]=null,So(l,s))};l.addEventListener("transitionend",f)})}),()=>{const s=uT(t),o=J3(s);let u=s.tag||v1;i=a,a=e.default?lT(e.default()):[];for(let l=0;ldelete t.mode;sR.props;const qQ=sR;function UQ(t){const e=t.el;e[uv]&&e[uv](),e[jD]&&e[jD]()}function HQ(t){aR.set(t,t.el.getBoundingClientRect())}function WQ(t){const e=iR.get(t),r=aR.get(t),n=e.left-r.left,i=e.top-r.top;if(n||i){const a=t.el.style;return a.transform=a.webkitTransform=`translate(${n}px,${i}px)`,a.transitionDuration="0s",t}}function VQ(t,e,r){const n=t.cloneNode(),i=t[hc];i&&i.forEach(o=>{o.split(/\s+/).forEach(u=>u&&n.classList.remove(u))}),r.split(/\s+/).forEach(o=>o&&n.classList.add(o)),n.style.display="none";const a=e.nodeType===1?e:e.parentNode;a.appendChild(n);const{hasTransform:s}=Q3(n);return a.removeChild(n),s}const Uo=t=>{const e=t.props["onUpdate:modelValue"]||!1;return Vn(e)?r=>I$(e,r):e};function YQ(t){t.target.composing=!0}function GD(t){const e=t.target;e.composing&&(e.composing=!1,e.dispatchEvent(new Event("input")))}const sa=Symbol("_assign"),lv={created(t,{modifiers:{lazy:e,trim:r,number:n}},i){t[sa]=Uo(i);const a=n||i.props&&i.props.type==="number";Os(t,e?"change":"input",s=>{if(s.target.composing)return;let o=t.value;r&&(o=o.trim()),a&&(o=Im(o)),t[sa](o)}),r&&Os(t,"change",()=>{t.value=t.value.trim()}),e||(Os(t,"compositionstart",YQ),Os(t,"compositionend",GD),Os(t,"change",GD))},mounted(t,{value:e}){t.value=e??""},beforeUpdate(t,{value:e,modifiers:{lazy:r,trim:n,number:i}},a){if(t[sa]=Uo(a),t.composing)return;const s=i||t.type==="number"?Im(t.value):t.value,o=e??"";s!==o&&(document.activeElement===t&&t.type!=="range"&&(r||n&&t.value.trim()===o)||(t.value=o))}},kx={deep:!0,created(t,e,r){t[sa]=Uo(r),Os(t,"change",()=>{const n=t._modelValue,i=dc(t),a=t.checked,s=t[sa];if(Vn(n)){const o=Uv(n,i),u=o!==-1;if(a&&!u)s(n.concat(i));else if(!a&&u){const l=[...n];l.splice(o,1),s(l)}}else if(jh(n)){const o=new Set(n);a?o.add(i):o.delete(i),s(o)}else s(uR(t,a))})},mounted:XD,beforeUpdate(t,e,r){t[sa]=Uo(r),XD(t,e,r)}};function XD(t,{value:e,oldValue:r},n){t._modelValue=e,Vn(e)?t.checked=Uv(e,n.props.value)>-1:jh(e)?t.checked=e.has(n.props.value):e!==r&&(t.checked=bh(e,uR(t,!0)))}const Bx={created(t,{value:e},r){t.checked=bh(e,r.props.value),t[sa]=Uo(r),Os(t,"change",()=>{t[sa](dc(t))})},beforeUpdate(t,{value:e,oldValue:r},n){t[sa]=Uo(n),e!==r&&(t.checked=bh(e,n.props.value))}},oR={deep:!0,created(t,{value:e,modifiers:{number:r}},n){const i=jh(e);Os(t,"change",()=>{const a=Array.prototype.filter.call(t.options,s=>s.selected).map(s=>r?Im(dc(s)):dc(s));t[sa](t.multiple?i?new Set(a):a:a[0]),t._assigning=!0,p1(()=>{t._assigning=!1})}),t[sa]=Uo(n)},mounted(t,{value:e,oldValue:r,modifiers:{number:n}}){ZD(t,e,r,n)},beforeUpdate(t,e,r){t[sa]=Uo(r)},updated(t,{value:e,oldValue:r,modifiers:{number:n}}){t._assigning||ZD(t,e,r,n)}};function ZD(t,e,r,n){const i=t.multiple,a=Vn(e);if(!(i&&!a&&!jh(e))){for(let s=0,o=t.options.length;s-1}else u.selected=e.has(l);else if(bh(dc(u),e)){t.selectedIndex!==s&&(t.selectedIndex=s);return}}!i&&t.selectedIndex!==-1&&(t.selectedIndex=-1)}}function dc(t){return"_value"in t?t._value:t.value}function uR(t,e){const r=e?"_trueValue":"_falseValue";return r in t?t[r]:e}const lR={created(t,e,r){Kp(t,e,r,null,"created")},mounted(t,e,r){Kp(t,e,r,null,"mounted")},beforeUpdate(t,e,r,n){Kp(t,e,r,n,"beforeUpdate")},updated(t,e,r,n){Kp(t,e,r,n,"updated")}};function cR(t,e){switch(t){case"SELECT":return oR;case"TEXTAREA":return lv;default:switch(e){case"checkbox":return kx;case"radio":return Bx;default:return lv}}}function Kp(t,e,r,n,i){const s=cR(t.tagName,r.props&&r.props.type)[i];s&&s(t,e,r,n)}function jQ(){lv.getSSRProps=({value:t})=>({value:t}),Bx.getSSRProps=({value:t},e)=>{if(e.props&&bh(e.props.value,t))return{checked:!0}},kx.getSSRProps=({value:t},e)=>{if(Vn(t)){if(e.props&&Uv(t,e.props.value)>-1)return{checked:!0}}else if(jh(t)){if(e.props&&t.has(e.props.value))return{checked:!0}}else if(t)return{checked:!0}},lR.getSSRProps=(t,e)=>{if(typeof e.type!="string")return;const r=cR(e.type.toUpperCase(),e.props&&e.props.type);if(r.getSSRProps)return r.getSSRProps(t,e)}}const GQ=["ctrl","shift","alt","meta"],XQ={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,e)=>GQ.some(r=>t[`${r}Key`]&&!e.includes(r))},ZQ=(t,e)=>{const r=t._withMods||(t._withMods={}),n=e.join(".");return r[n]||(r[n]=(i,...a)=>{for(let s=0;s{const r=t._withKeys||(t._withKeys={}),n=e.join(".");return r[n]||(r[n]=i=>{if(!("key"in i))return;const a=Co(i.key);if(e.some(s=>s===a||KQ[s]===a))return t(i)})},fR=yi({patchProp:kQ},vQ);let gh,KD=!1;function hR(){return gh||(gh=iT(fR))}function dR(){return gh=KD?gh:cT(fR),KD=!0,gh}const Ub=(...t)=>{hR().render(...t)},pR=(...t)=>{dR().hydrate(...t)},Ix=(...t)=>{const e=hR().createApp(...t),{mount:r}=e;return e.mount=n=>{const i=vR(n);if(!i)return;const a=e._component;!ZM(a)&&!a.render&&!a.template&&(a.template=i.innerHTML),i.innerHTML="";const s=r(i,!1,mR(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),s},e},QQ=(...t)=>{const e=dR().createApp(...t),{mount:r}=e;return e.mount=n=>{const i=vR(n);if(i)return r(i,!0,mR(i))},e};function mR(t){if(t instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&t instanceof MathMLElement)return"mathml"}function vR(t){return jr(t)?document.querySelector(t):t}let JD=!1;const eee=()=>{JD||(JD=!0,jQ(),wQ())},tee=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:JM,BaseTransitionPropsValidators:QM,Comment:z$,DeprecationTypes:q$,EffectScope:U$,ErrorCodes:H$,ErrorTypeStrings:W$,Fragment:v1,KeepAlive:V$,ReactiveEffect:Y$,Static:aT,Suspense:j$,Teleport:G$,Text:X$,TrackOpTypes:Z$,Transition:Px,TransitionGroup:qQ,TriggerOpTypes:K$,VueElement:Eg,assertNumber:J$,callWithAsyncErrorHandling:hT,callWithErrorHandling:Q$,camelize:Fi,capitalize:Wv,cloneVNode:ez,compatUtils:tz,computed:rz,createApp:Ix,createBlock:nz,createCommentVNode:iz,createElementBlock:az,createElementVNode:sz,createHydrationRenderer:cT,createPropsRestProxy:oz,createRenderer:iT,createSSRApp:QQ,createSlots:uz,createStaticVNode:lz,createTextVNode:cz,createVNode:m1,customRef:fz,defineAsyncComponent:dT,defineComponent:g1,defineCustomElement:nR,defineEmits:hz,defineExpose:dz,defineModel:pz,defineOptions:mz,defineProps:vz,defineSSRCustomElement:IQ,defineSlots:gz,devtools:yz,effect:bz,effectScope:xz,getCurrentInstance:Hv,getCurrentScope:wz,getTransitionRawChildren:lT,guardReactiveProps:Sz,h:KM,handleError:_z,hasInjectionContext:Az,hydrate:pR,initCustomFormatter:Dz,initDirectivesForSSR:eee,inject:Ez,isMemoSame:Nz,isProxy:Cz,isReactive:Mz,isReadonly:Tz,isRef:Oz,isRuntimeOnly:Fz,isShallow:Rz,isVNode:Pz,markRaw:pT,mergeDefaults:kz,mergeModels:Bz,mergeProps:Iz,nextTick:p1,normalizeClass:Lz,normalizeProps:$z,normalizeStyle:zz,onActivated:qz,onBeforeMount:Uz,onBeforeUnmount:Hz,onBeforeUpdate:Wz,onDeactivated:Vz,onErrorCaptured:Yz,onMounted:rT,onRenderTracked:jz,onRenderTriggered:Gz,onScopeDispose:Xz,onServerPrefetch:Zz,onUnmounted:nT,onUpdated:oT,openBlock:Kz,popScopeId:Jz,provide:Qz,proxyRefs:e9,pushScopeId:t9,queuePostFlushCb:r9,reactive:n9,readonly:i9,ref:a9,registerRuntimeCompiler:mT,render:Ub,renderList:s9,renderSlot:o9,resolveComponent:u9,resolveDirective:l9,resolveDynamicComponent:c9,resolveFilter:f9,resolveTransitionHooks:ib,setBlockTracking:h9,setDevtoolsHook:d9,setTransitionHooks:nb,shallowReactive:p9,shallowReadonly:m9,shallowRef:Vv,ssrContextKey:v9,ssrUtils:g9,stop:y9,toDisplayString:b9,toHandlerKey:vT,toHandlers:x9,toRaw:uT,toRef:w9,toRefs:S9,toValue:_9,transformVNodeArgs:A9,triggerRef:D9,unref:E9,useAttrs:N9,useCssModule:$Q,useCssVars:SQ,useModel:C9,useSSRContext:M9,useSlots:T9,useTransitionState:sT,vModelCheckbox:kx,vModelDynamic:lR,vModelRadio:Bx,vModelSelect:oR,vModelText:lv,vShow:tR,version:O9,warn:F9,watch:R9,watchEffect:P9,watchPostEffect:tT,watchSyncEffect:k9,withAsyncContext:B9,withCtx:I9,withDefaults:L9,withDirectives:$9,withKeys:JQ,withMemo:z9,withModifiers:ZQ,withScopeId:q9},Symbol.toStringTag,{value:"Module"}));/** * @vue/compiler-core v3.4.18 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/const Bh=Symbol(""),yh=Symbol(""),Bx=Symbol(""),lv=Symbol(""),fP=Symbol(""),Uu=Symbol(""),hP=Symbol(""),dP=Symbol(""),kx=Symbol(""),Lx=Symbol(""),ud=Symbol(""),$x=Symbol(""),pP=Symbol(""),zx=Symbol(""),qx=Symbol(""),Ux=Symbol(""),Hx=Symbol(""),Wx=Symbol(""),Vx=Symbol(""),mP=Symbol(""),vP=Symbol(""),Dg=Symbol(""),cv=Symbol(""),Yx=Symbol(""),jx=Symbol(""),kh=Symbol(""),ld=Symbol(""),Gx=Symbol(""),Ub=Symbol(""),qQ=Symbol(""),Hb=Symbol(""),fv=Symbol(""),UQ=Symbol(""),HQ=Symbol(""),Xx=Symbol(""),WQ=Symbol(""),VQ=Symbol(""),Zx=Symbol(""),gP=Symbol(""),hc={[Bh]:"Fragment",[yh]:"Teleport",[Bx]:"Suspense",[lv]:"KeepAlive",[fP]:"BaseTransition",[Uu]:"openBlock",[hP]:"createBlock",[dP]:"createElementBlock",[kx]:"createVNode",[Lx]:"createElementVNode",[ud]:"createCommentVNode",[$x]:"createTextVNode",[pP]:"createStaticVNode",[zx]:"resolveComponent",[qx]:"resolveDynamicComponent",[Ux]:"resolveDirective",[Hx]:"resolveFilter",[Wx]:"withDirectives",[Vx]:"renderList",[mP]:"renderSlot",[vP]:"createSlots",[Dg]:"toDisplayString",[cv]:"mergeProps",[Yx]:"normalizeClass",[jx]:"normalizeStyle",[kh]:"normalizeProps",[ld]:"guardReactiveProps",[Gx]:"toHandlers",[Ub]:"camelize",[qQ]:"capitalize",[Hb]:"toHandlerKey",[fv]:"setBlockTracking",[UQ]:"pushScopeId",[HQ]:"popScopeId",[Xx]:"withCtx",[WQ]:"unref",[VQ]:"isRef",[Zx]:"withMemo",[gP]:"isMemoSame"};function YQ(t){Object.getOwnPropertySymbols(t).forEach(e=>{hc[e]=t[e]})}const Li={start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0},source:""};function jQ(t,e=""){return{type:0,source:e,children:t,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:0,temps:0,codegenNode:void 0,loc:Li}}function Lh(t,e,r,n,i,a,s,o=!1,u=!1,l=!1,c=Li){return t&&(o?(t.helper(Uu),t.helper(mc(t.inSSR,l))):t.helper(pc(t.inSSR,l)),s&&t.helper(Wx)),{type:13,tag:e,props:r,children:n,patchFlag:i,dynamicProps:a,directives:s,isBlock:o,disableTracking:u,isComponent:l,loc:c}}function cd(t,e=Li){return{type:17,loc:e,elements:t}}function ta(t,e=Li){return{type:15,loc:e,properties:t}}function Yr(t,e){return{type:16,loc:Li,key:jr(t)?$t(t,!0):t,value:e}}function $t(t,e=!1,r=Li,n=0){return{type:4,loc:r,content:t,isStatic:e,constType:e?3:n}}function Da(t,e=Li){return{type:8,loc:e,children:t}}function hn(t,e=[],r=Li){return{type:14,loc:r,callee:t,arguments:e}}function dc(t,e=void 0,r=!1,n=!1,i=Li){return{type:18,params:t,returns:e,newline:r,isSlot:n,loc:i}}function Wb(t,e,r,n=!0){return{type:19,test:t,consequent:e,alternate:r,newline:n,loc:Li}}function GQ(t,e,r=!1){return{type:20,index:t,value:e,isVNode:r,loc:Li}}function XQ(t){return{type:21,body:t,loc:Li}}function pc(t,e){return t||e?kx:Lx}function mc(t,e){return t||e?hP:dP}function Kx(t,{helper:e,removeHelper:r,inSSR:n}){t.isBlock||(t.isBlock=!0,r(pc(n,t.isComponent)),e(Uu),e(mc(n,t.isComponent)))}const ZD=new Uint8Array([123,123]),KD=new Uint8Array([125,125]);function JD(t){return t>=97&&t<=122||t>=65&&t<=90}function Ti(t){return t===32||t===10||t===9||t===12||t===13}function wo(t){return t===47||t===62||Ti(t)}function hv(t){const e=new Uint8Array(t.length);for(let r=0;r=0;i--){const a=this.newlines[i];if(e>a){r=i+2,n=e-a;break}}return{column:n,line:r,offset:e}}peek(){return this.buffer.charCodeAt(this.index+1)}stateText(e){e===60?(this.index>this.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=5,this.sectionStart=this.index):!this.inVPre&&e===this.delimiterOpen[0]&&(this.state=2,this.delimiterIndex=0,this.stateInterpolationOpen(e))}stateInterpolationOpen(e){if(e===this.delimiterOpen[this.delimiterIndex])if(this.delimiterIndex===this.delimiterOpen.length-1){const r=this.index+1-this.delimiterOpen.length;r>this.sectionStart&&this.cbs.ontext(this.sectionStart,r),this.state=3,this.sectionStart=r}else this.delimiterIndex++;else this.inRCDATA?(this.state=32,this.stateInRCDATA(e)):(this.state=1,this.stateText(e))}stateInterpolation(e){e===this.delimiterClose[0]&&(this.state=4,this.delimiterIndex=0,this.stateInterpolationClose(e))}stateInterpolationClose(e){e===this.delimiterClose[this.delimiterIndex]?this.delimiterIndex===this.delimiterClose.length-1?(this.cbs.oninterpolation(this.sectionStart,this.index+1),this.inRCDATA?this.state=32:this.state=1,this.sectionStart=this.index+1):this.delimiterIndex++:(this.state=3,this.stateInterpolation(e))}stateSpecialStartSequence(e){const r=this.sequenceIndex===this.currentSequence.length;if(!(r?wo(e):(e|32)===this.currentSequence[this.sequenceIndex]))this.inRCDATA=!1;else if(!r){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=6,this.stateInTagName(e)}stateInRCDATA(e){if(this.sequenceIndex===this.currentSequence.length){if(e===62||Ti(e)){const r=this.index-this.currentSequence.length;if(this.sectionStart=e||(this.state===28?this.currentSequence===Ln.CdataEnd?this.cbs.oncdata(this.sectionStart,e):this.cbs.oncomment(this.sectionStart,e):this.state===6||this.state===11||this.state===18||this.state===17||this.state===12||this.state===13||this.state===14||this.state===15||this.state===16||this.state===20||this.state===19||this.state===21||this.state===9||this.cbs.ontext(this.sectionStart,e))}emitCodePoint(e,r){}}function QD(t,{compatConfig:e}){const r=e&&e[t];return t==="MODE"?r||3:r}function Bu(t,e){const r=QD("MODE",e),n=QD(t,e);return r===3?n===!0:n!==!1}function $h(t,e,r,...n){return Bu(t,e)}function Jx(t){throw t}function yP(t){}function kr(t,e,r,n){const i=`https://vuejs.org/error-reference/#compiler-${t}`,a=new SyntaxError(String(i));return a.code=t,a.loc=e,a}const gi=t=>t.type===4&&t.isStatic;function bP(t){switch(t){case"Teleport":case"teleport":return yh;case"Suspense":case"suspense":return Bx;case"KeepAlive":case"keep-alive":return lv;case"BaseTransition":case"base-transition":return fP}}const KQ=/^\d|[^\$\w]/,Qx=t=>!KQ.test(t),JQ=/[A-Za-z_$\xA0-\uFFFF]/,QQ=/[\.\?\w$\xA0-\uFFFF]/,eee=/\s+[.[]\s*|\s*[.[]\s+/g,tee=t=>{t=t.trim().replace(eee,s=>s.trim());let e=0,r=[],n=0,i=0,a=null;for(let s=0;se.type===7&&e.name==="bind"&&(!e.arg||e.arg.type!==4||!e.arg.isStatic))}function Uy(t){return t.type===5||t.type===2}function nee(t){return t.type===7&&t.name==="slot"}function dv(t){return t.type===1&&t.tagType===3}function pv(t){return t.type===1&&t.tagType===2}const iee=new Set([kh,ld]);function wP(t,e=[]){if(t&&!jr(t)&&t.type===14){const r=t.callee;if(!jr(r)&&iee.has(r))return wP(t.arguments[0],e.concat(t))}return[t,e]}function mv(t,e,r){let n,i=t.type===13?t.props:t.arguments[2],a=[],s;if(i&&!jr(i)&&i.type===14){const o=wP(i);i=o[0],a=o[1],s=a[a.length-1]}if(i==null||jr(i))n=ta([e]);else if(i.type===14){const o=i.arguments[0];!jr(o)&&o.type===15?e2(e,o)||o.properties.unshift(e):i.callee===Gx?n=hn(r.helper(cv),[ta([e]),i]):i.arguments.unshift(ta([e])),!n&&(n=i)}else i.type===15?(e2(e,i)||i.properties.unshift(e),n=i):(n=hn(r.helper(cv),[ta([e]),i]),s&&s.callee===ld&&(s=a[a.length-2]));t.type===13?s?s.arguments[0]=n:t.props=n:s?s.arguments[0]=n:t.arguments[2]=n}function e2(t,e){let r=!1;if(t.key.type===4){const n=t.key.content;r=e.properties.some(i=>i.key.type===4&&i.key.content===n)}return r}function zh(t,e){return`_${e}_${t.replace(/[^\w]/g,(r,n)=>r==="-"?"_":t.charCodeAt(n).toString())}`}function aee(t){return t.type===14&&t.callee===Zx?t.arguments[1].returns:t}const see=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,SP={parseMode:"base",ns:0,delimiters:["{{","}}"],getNamespace:()=>0,isVoidTag:py,isPreTag:py,isCustomElement:py,onError:Jx,onWarn:yP,comments:!1,prefixIdentifiers:!1};let hr=SP,qh=null,ku="",zn=null,rr=null,pi="",Cs=-1,Eu=-1,vv=0,Do=!1,Vb=null;const Hr=[],Wr=new ZQ(Hr,{onerr:_s,ontext(t,e){Jp(Cn(t,e),t,e)},ontextentity(t,e,r){Jp(t,e,r)},oninterpolation(t,e){if(Do)return Jp(Cn(t,e),t,e);let r=t+Wr.delimiterOpen.length,n=e-Wr.delimiterClose.length;for(;Ti(ku.charCodeAt(r));)r++;for(;Ti(ku.charCodeAt(n-1));)n--;let i=Cn(r,n);i.includes("&")&&(i=hr.decodeEntities(i,!1)),Yb({type:5,content:Pm(i,!1,cn(r,n)),loc:cn(t,e)})},onopentagname(t,e){const r=Cn(t,e);zn={type:1,tag:r,ns:hr.getNamespace(r,Hr[0],hr.ns),tagType:0,props:[],children:[],loc:cn(t-1,e),codegenNode:void 0}},onopentagend(t){r2(t)},onclosetag(t,e){const r=Cn(t,e);if(!hr.isVoidTag(r)){let n=!1;for(let i=0;i0&&_s(24,Hr[0].loc.start.offset);for(let s=0;s<=i;s++){const o=Hr.shift();Fm(o,e,s(n.type===7?n.rawName:n.name)===r)&&_s(2,e)},onattribend(t,e){if(zn&&rr){if(Ou(rr.loc,e),t!==0)if(pi.includes("&")&&(pi=hr.decodeEntities(pi,!0)),rr.type===6)rr.name==="class"&&(pi=DP(pi).trim()),t===1&&!pi&&_s(13,e),rr.value={type:2,content:pi,loc:t===1?cn(Cs,Eu):cn(Cs-1,Eu+1)},Wr.inSFCRoot&&zn.tag==="template"&&rr.name==="lang"&&pi&&pi!=="html"&&Wr.enterRCDATA(hv("-1&&$h("COMPILER_V_BIND_SYNC",hr,rr.loc,rr.rawName)&&(rr.name="model",rr.modifiers.splice(n,1))}(rr.type!==7||rr.name!=="pre")&&zn.props.push(rr)}pi="",Cs=Eu=-1},oncomment(t,e){hr.comments&&Yb({type:3,content:Cn(t,e),loc:cn(t-4,e+3)})},onend(){const t=ku.length;for(let e=0;e{const g=e.start.offset+h,m=g+f.length;return Pm(f,!1,cn(g,m),0,p?1:0)},o={source:s(a.trim(),r.indexOf(a,i.length)),value:void 0,key:void 0,index:void 0,finalized:!1};let u=i.trim().replace(oee,"").trim();const l=i.indexOf(u),c=u.match(t2);if(c){u=u.replace(t2,"").trim();const f=c[1].trim();let h;if(f&&(h=r.indexOf(f,l+u.length),o.key=s(f,h,!0)),c[2]){const p=c[2].trim();p&&(o.index=s(p,r.indexOf(p,o.key?h+f.length:l+u.length),!0))}}return u&&(o.value=s(u,l,!0)),o}function Cn(t,e){return ku.slice(t,e)}function r2(t){Wr.inSFCRoot&&(zn.innerLoc=cn(t+1,t+1)),Yb(zn);const{tag:e,ns:r}=zn;r===0&&hr.isPreTag(e)&&vv++,hr.isVoidTag(e)?Fm(zn,t):(Hr.unshift(zn),(r===1||r===2)&&(Wr.inXML=!0)),zn=null}function Jp(t,e,r){var n;{const s=(n=Hr[0])==null?void 0:n.tag;s!=="script"&&s!=="style"&&t.includes("&")&&(t=hr.decodeEntities(t,!1))}const i=Hr[0]||qh,a=i.children[i.children.length-1];(a==null?void 0:a.type)===2?(a.content+=t,Ou(a.loc,r)):i.children.push({type:2,content:t,loc:cn(e,r)})}function Fm(t,e,r=!1){r?Ou(t.loc,_P(e,60)):Ou(t.loc,e+1),Wr.inSFCRoot&&(t.children.length?t.innerLoc.end=yi({},t.children[t.children.length-1].loc.end):t.innerLoc.end=yi({},t.innerLoc.start),t.innerLoc.source=Cn(t.innerLoc.start.offset,t.innerLoc.end.offset));const{tag:n,ns:i}=t;Do||(n==="slot"?t.tagType=2:n2(t)?t.tagType=3:cee(t)&&(t.tagType=1)),Wr.inRCDATA||(t.children=AP(t.children,t.tag)),i===0&&hr.isPreTag(n)&&vv--,Vb===t&&(Do=Wr.inVPre=!1,Vb=null),Wr.inXML&&(Hr[0]?Hr[0].ns:hr.ns)===0&&(Wr.inXML=!1);{const a=t.props;if(!Wr.inSFCRoot&&Bu("COMPILER_NATIVE_TEMPLATE",hr)&&t.tag==="template"&&!n2(t)){const o=Hr[0]||qh,u=o.children.indexOf(t);o.children.splice(u,1,...t.children)}const s=a.find(o=>o.type===6&&o.name==="inline-template");s&&$h("COMPILER_INLINE_TEMPLATE",hr,s.loc)&&t.children.length&&(s.value={type:2,content:Cn(t.children[0].loc.start.offset,t.children[t.children.length-1].loc.end.offset),loc:s.loc})}}function _P(t,e){let r=t;for(;ku.charCodeAt(r)!==e&&r>=0;)r--;return r}const lee=new Set(["if","else","else-if","for","slot"]);function n2({tag:t,props:e}){if(t==="template"){for(let r=0;r64&&t<91}const hee=/\r\n/g;function AP(t,e){var r,n;const i=hr.whitespace!=="preserve";let a=!1;for(let s=0;s0){if(u>=2){o.codegenNode.patchFlag="-1",o.codegenNode=e.hoist(o.codegenNode),a++;continue}}else{const l=o.codegenNode;if(l.type===13){const c=TP(l);if((!c||c===512||c===1)&&CP(o,e)>=2){const f=MP(o);f&&(l.props=e.hoist(f))}l.dynamicProps&&(l.dynamicProps=e.hoist(l.dynamicProps))}}}if(o.type===1){const u=o.tagType===1;u&&e.scopes.vSlot++,Rm(o,e),u&&e.scopes.vSlot--}else if(o.type===11)Rm(o,e,o.children.length===1);else if(o.type===9)for(let u=0;u1)for(let l=0;lO&&(E.childIndex--,E.onNodeRemoved()),E.parent.children.splice(O,1)},onNodeRemoved:ih,addIdentifiers(N){},removeIdentifiers(N){},hoist(N){jr(N)&&(N=$t(N)),E.hoists.push(N);const M=$t(`_hoisted_${E.hoists.length}`,!1,N.loc,2);return M.hoisted=N,M},cache(N,M=!1){return GQ(E.cached++,N,M)}};return E.filters=new Set,E}function wee(t,e){const r=xee(t,e);Eg(t,r),e.hoistStatic&&yee(t,r),e.ssr||See(t,r),t.helpers=new Set([...r.helpers.keys()]),t.components=[...r.components],t.directives=[...r.directives],t.imports=r.imports,t.hoists=r.hoists,t.temps=r.temps,t.cached=r.cached,t.transformed=!0,t.filters=[...r.filters]}function See(t,e){const{helper:r}=e,{children:n}=t;if(n.length===1){const i=n[0];if(NP(t,i)&&i.codegenNode){const a=i.codegenNode;a.type===13&&Kx(a,e),t.codegenNode=a}else t.codegenNode=i}else if(n.length>1){let i=64;t.codegenNode=Lh(e,r(Bh),void 0,t.children,i+"",void 0,void 0,!0,void 0,!1)}}function _ee(t,e){let r=0;const n=()=>{r--};for(;rn===t:n=>t.test(n);return(n,i)=>{if(n.type===1){const{props:a}=n;if(n.tagType===3&&a.some(nee))return;const s=[];for(let o=0;o`${hc[t]}: _${hc[t]}`;function Aee(t,{mode:e="function",prefixIdentifiers:r=e==="module",sourceMap:n=!1,filename:i="template.vue.html",scopeId:a=null,optimizeImports:s=!1,runtimeGlobalName:o="Vue",runtimeModuleName:u="vue",ssrRuntimeModuleName:l="vue/server-renderer",ssr:c=!1,isTS:f=!1,inSSR:h=!1}){const p={mode:e,prefixIdentifiers:r,sourceMap:n,filename:i,scopeId:a,optimizeImports:s,runtimeGlobalName:o,runtimeModuleName:u,ssrRuntimeModuleName:l,ssr:c,isTS:f,inSSR:h,source:t.source,code:"",column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper(m){return`_${hc[m]}`},push(m,b=-2,y){p.code+=m},indent(){g(++p.indentLevel)},deindent(m=!1){m?--p.indentLevel:g(--p.indentLevel)},newline(){g(p.indentLevel)}};function g(m){p.push(` -`+" ".repeat(m),0)}return p}function Dee(t,e={}){const r=Aee(t,e);e.onContextCreated&&e.onContextCreated(r);const{mode:n,push:i,prefixIdentifiers:a,indent:s,deindent:o,newline:u,scopeId:l,ssr:c}=r,f=Array.from(t.helpers),h=f.length>0,p=!a&&n!=="module";Nee(t,r);const m=c?"ssrRender":"render",y=(c?["_ctx","_push","_parent","_attrs"]:["_ctx","_cache"]).join(", ");if(i(`function ${m}(${y}) {`),s(),p&&(i("with (_ctx) {"),s(),h&&(i(`const { ${f.map(FP).join(", ")} } = _Vue -`,-1),u())),t.components.length&&(Hy(t.components,"component",r),(t.directives.length||t.temps>0)&&u()),t.directives.length&&(Hy(t.directives,"directive",r),t.temps>0&&u()),t.filters&&t.filters.length&&(u(),Hy(t.filters,"filter",r),u()),t.temps>0){i("let ");for(let S=0;S0?", ":""}_temp${S}`)}return(t.components.length||t.directives.length||t.temps)&&(i(` -`,0),u()),c||i("return "),t.codegenNode?Hn(t.codegenNode,r):i("null"),p&&(o(),i("}")),o(),i("}"),{ast:t,code:r.code,preamble:"",map:r.map?r.map.toJSON():void 0}}function Nee(t,e){const{ssr:r,prefixIdentifiers:n,push:i,newline:a,runtimeModuleName:s,runtimeGlobalName:o,ssrRuntimeModuleName:u}=e,l=o,c=Array.from(t.helpers);if(c.length>0&&(i(`const _Vue = ${l} -`,-1),t.hoists.length)){const f=[kx,Lx,ud,$x,pP].filter(h=>c.includes(h)).map(FP).join(", ");i(`const { ${f} } = _Vue -`,-1)}Eee(t.hoists,e),a(),i("return ")}function Hy(t,e,{helper:r,push:n,newline:i,isTS:a}){const s=r(e==="filter"?Hx:e==="component"?zx:Ux);for(let o=0;o3||!1;e.push("["),r&&e.indent(),fd(t,e,r),r&&e.deindent(),e.push("]")}function fd(t,e,r=!1,n=!0){const{push:i,newline:a}=e;for(let s=0;sr||"null")}function Ree(t,e){const{push:r,helper:n,pure:i}=e,a=jr(t.callee)?t.callee:n(t.callee);i&&r(Cg),r(a+"(",-2,t),fd(t.arguments,e),r(")")}function Iee(t,e){const{push:r,indent:n,deindent:i,newline:a}=e,{properties:s}=t;if(!s.length){r("{}",-2,t);return}const o=s.length>1||!1;r(o?"{":"{ "),o&&n();for(let u=0;u "),(u||o)&&(r("{"),n()),s?(u&&r("return "),Vn(s)?ew(s,e):Hn(s,e)):o&&Hn(o,e),(u||o)&&(i(),r("}")),l&&(t.isNonScopedSlot&&r(", undefined, true"),r(")"))}function Lee(t,e){const{test:r,consequent:n,alternate:i,newline:a}=t,{push:s,indent:o,deindent:u,newline:l}=e;if(r.type===4){const f=!Qx(r.content);f&&s("("),PP(r,e),f&&s(")")}else s("("),Hn(r,e),s(")");a&&o(),e.indentLevel++,a||s(" "),s("? "),Hn(n,e),e.indentLevel--,a&&l(),a||s(" "),s(": ");const c=i.type===19;c||e.indentLevel++,Hn(i,e),c||e.indentLevel--,a&&u(!0)}function $ee(t,e){const{push:r,helper:n,indent:i,deindent:a,newline:s}=e;r(`_cache[${t.index}] || (`),t.isVNode&&(i(),r(`${n(fv)}(-1),`),s()),r(`_cache[${t.index}] = `),Hn(t.value,e),t.isVNode&&(r(","),s(),r(`${n(fv)}(1),`),s(),r(`_cache[${t.index}]`),a()),r(")")}new RegExp("\\b"+"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield".split(",").join("\\b|\\b")+"\\b");const zee=OP(/^(if|else|else-if)$/,(t,e,r)=>qee(t,e,r,(n,i,a)=>{const s=r.parent.children;let o=s.indexOf(n),u=0;for(;o-->=0;){const l=s[o];l&&l.type===9&&(u+=l.branches.length)}return()=>{if(a)n.codegenNode=a2(i,u,r);else{const l=Uee(n.codegenNode);l.alternate=a2(i,u+n.branches.length-1,r)}}}));function qee(t,e,r,n){if(e.name!=="else"&&(!e.exp||!e.exp.content.trim())){const i=e.exp?e.exp.loc:t.loc;r.onError(kr(28,e.loc)),e.exp=$t("true",!1,i)}if(e.name==="if"){const i=i2(t,e),a={type:9,loc:t.loc,branches:[i]};if(r.replaceNode(a),n)return n(a,i,!0)}else{const i=r.parent.children;let a=i.indexOf(t);for(;a-->=-1;){const s=i[a];if(s&&s.type===3){r.removeNode(s);continue}if(s&&s.type===2&&!s.content.trim().length){r.removeNode(s);continue}if(s&&s.type===9){e.name==="else-if"&&s.branches[s.branches.length-1].condition===void 0&&r.onError(kr(30,t.loc)),r.removeNode();const o=i2(t,e);s.branches.push(o);const u=n&&n(s,o,!1);Eg(o,r),u&&u(),r.currentNode=null}else r.onError(kr(30,t.loc));break}}}function i2(t,e){const r=t.tagType===3;return{type:10,loc:t.loc,condition:e.name==="else"?void 0:e.exp,children:r&&!xa(t,"for")?t.children:[t],userKey:Ng(t,"key"),isTemplateIf:r}}function a2(t,e,r){return t.condition?Wb(t.condition,s2(t,e,r),hn(r.helper(ud),['""',"true"])):s2(t,e,r)}function s2(t,e,r){const{helper:n}=r,i=Yr("key",$t(`${e}`,!1,Li,2)),{children:a}=t,s=a[0];if(a.length!==1||s.type!==1)if(a.length===1&&s.type===11){const u=s.codegenNode;return mv(u,i,r),u}else return Lh(r,n(Bh),ta([i]),a,64+"",void 0,void 0,!0,!1,!1,t.loc);else{const u=s.codegenNode,l=aee(u);return l.type===13&&Kx(l,r),mv(l,i,r),u}}function Uee(t){for(;;)if(t.type===19)if(t.alternate.type===19)t=t.alternate;else return t;else t.type===20&&(t=t.value)}const Hee=OP("for",(t,e,r)=>{const{helper:n,removeHelper:i}=r;return Wee(t,e,r,a=>{const s=hn(n(Vx),[a.source]),o=dv(t),u=xa(t,"memo"),l=Ng(t,"key"),c=l&&(l.type===6?$t(l.value.content,!0):l.exp),f=l?Yr("key",c):null,h=a.source.type===4&&a.source.constType>0,p=h?64:l?128:256;return a.codegenNode=Lh(r,n(Bh),void 0,s,p+"",void 0,void 0,!0,!h,!1,t.loc),()=>{let g;const{children:m}=a,b=m.length!==1||m[0].type!==1,y=pv(t)?t:o&&t.children.length===1&&pv(t.children[0])?t.children[0]:null;if(y?(g=y.codegenNode,o&&f&&mv(g,f,r)):b?g=Lh(r,n(Bh),f?ta([f]):void 0,t.children,"64",void 0,void 0,!0,void 0,!1):(g=m[0].codegenNode,o&&f&&mv(g,f,r),g.isBlock!==!h&&(g.isBlock?(i(Uu),i(mc(r.inSSR,g.isComponent))):i(pc(r.inSSR,g.isComponent))),g.isBlock=!h,g.isBlock?(n(Uu),n(mc(r.inSSR,g.isComponent))):n(pc(r.inSSR,g.isComponent))),u){const S=dc(jb(a.parseResult,[$t("_cached")]));S.body=XQ([Da(["const _memo = (",u.exp,")"]),Da(["if (_cached",...c?[" && _cached.key === ",c]:[],` && ${r.helperString(gP)}(_cached, _memo)) return _cached`]),Da(["const _item = ",g]),$t("_item.memo = _memo"),$t("return _item")]),s.arguments.push(S,$t("_cache"),$t(String(r.cached++)))}else s.arguments.push(dc(jb(a.parseResult),g,!0))}})});function Wee(t,e,r,n){if(!e.exp){r.onError(kr(31,e.loc));return}const i=e.forParseResult;if(!i){r.onError(kr(32,e.loc));return}IP(i);const{addIdentifiers:a,removeIdentifiers:s,scopes:o}=r,{source:u,value:l,key:c,index:f}=i,h={type:11,loc:e.loc,source:u,valueAlias:l,keyAlias:c,objectIndexAlias:f,parseResult:i,children:dv(t)?t.children:[t]};r.replaceNode(h),o.vFor++;const p=n&&n(h);return()=>{o.vFor--,p&&p()}}function IP(t,e){t.finalized||(t.finalized=!0)}function jb({value:t,key:e,index:r},n=[]){return Vee([t,e,r,...n])}function Vee(t){let e=t.length;for(;e--&&!t[e];);return t.slice(0,e+1).map((r,n)=>r||$t("_".repeat(n+1),!1))}const o2=$t("undefined",!1),Yee=(t,e)=>{if(t.type===1&&(t.tagType===1||t.tagType===3)){const r=xa(t,"slot");if(r)return r.exp,e.scopes.vSlot++,()=>{e.scopes.vSlot--}}},jee=(t,e,r,n)=>dc(t,r,!1,!0,r.length?r[0].loc:n);function Gee(t,e,r=jee){e.helper(Xx);const{children:n,loc:i}=t,a=[],s=[];let o=e.scopes.vSlot>0||e.scopes.vFor>0;const u=xa(t,"slot",!0);if(u){const{arg:b,exp:y}=u;b&&!gi(b)&&(o=!0),a.push(Yr(b||$t("default",!0),r(y,void 0,n,i)))}let l=!1,c=!1;const f=[],h=new Set;let p=0;for(let b=0;b{const x=r(y,void 0,S,i);return e.compatConfig&&(x.isNonScopedSlot=!0),Yr("default",x)};l?f.length&&f.some(y=>BP(y))&&(c?e.onError(kr(39,f[0].loc)):a.push(b(void 0,f))):a.push(b(void 0,n))}const g=o?2:Im(t.children)?3:1;let m=ta(a.concat(Yr("_",$t(g+"",!1))),i);return s.length&&(m=hn(e.helper(vP),[m,cd(s)])),{slots:m,hasDynamicSlots:o}}function Qp(t,e,r){const n=[Yr("name",t),Yr("fn",e)];return r!=null&&n.push(Yr("key",$t(String(r),!0))),ta(n)}function Im(t){for(let e=0;efunction(){if(t=e.currentNode,!(t.type===1&&(t.tagType===0||t.tagType===1)))return;const{tag:n,props:i}=t,a=t.tagType===1;let s=a?Zee(t,e):`"${n}"`;const o=KM(s)&&s.callee===qx;let u,l,c,f=0,h,p,g,m=o||s===yh||s===Bx||!a&&(n==="svg"||n==="foreignObject");if(i.length>0){const b=LP(t,e,void 0,a,o);u=b.props,f=b.patchFlag,p=b.dynamicPropNames;const y=b.directives;g=y&&y.length?cd(y.map(S=>Jee(S,e))):void 0,b.shouldUseBlock&&(m=!0)}if(t.children.length>0)if(s===lv&&(m=!0,f|=1024),a&&s!==yh&&s!==lv){const{slots:y,hasDynamicSlots:S}=Gee(t,e);l=y,S&&(f|=1024)}else if(t.children.length===1&&s!==yh){const y=t.children[0],S=y.type,x=S===5||S===8;x&&ra(y,e)===0&&(f|=1),x||S===2?l=y:l=t.children}else l=t.children;f!==0&&(c=String(f),p&&p.length&&(h=Qee(p))),t.codegenNode=Lh(e,s,u,l,c,h,g,!!m,!1,a,t.loc)};function Zee(t,e,r=!1){let{tag:n}=t;const i=Gb(n),a=Ng(t,"is");if(a)if(i||Bu("COMPILER_IS_ON_ELEMENT",e)){const o=a.type===6?a.value&&$t(a.value.content,!0):a.exp;if(o)return hn(e.helper(qx),[o])}else a.type===6&&a.value.content.startsWith("vue:")&&(n=a.value.content.slice(4));const s=bP(n)||e.isBuiltInComponent(n);return s?(r||e.helper(s),s):(e.helper(zx),e.components.add(n),zh(n,"component"))}function LP(t,e,r=t.props,n,i,a=!1){const{tag:s,loc:o,children:u}=t;let l=[];const c=[],f=[],h=u.length>0;let p=!1,g=0,m=!1,b=!1,y=!1,S=!1,x=!1,_=!1;const A=[],w=N=>{l.length&&(c.push(ta(u2(l),o)),l=[]),N&&c.push(N)},C=({key:N,value:M})=>{if(gi(N)){const O=N.content,F=v1(O);if(F&&(!n||i)&&O.toLowerCase()!=="onclick"&&O!=="onUpdate:modelValue"&&!B_(O)&&(S=!0),F&&B_(O)&&(_=!0),F&&M.type===14&&(M=M.arguments[0]),M.type===20||(M.type===4||M.type===8)&&ra(M,e)>0)return;O==="ref"?m=!0:O==="class"?b=!0:O==="style"?y=!0:O!=="key"&&!A.includes(O)&&A.push(O),n&&(O==="class"||O==="style")&&!A.includes(O)&&A.push(O)}else x=!0};for(let N=0;N0&&l.push(Yr($t("ref_for",!0),$t("true")))),F==="is"&&(Gb(s)||V&&V.content.startsWith("vue:")||Bu("COMPILER_IS_ON_ELEMENT",e)))continue;l.push(Yr($t(F,!0,q),$t(V?V.content:"",H,V?V.loc:O)))}else{const{name:O,arg:F,exp:q,loc:V,modifiers:H}=M,B=O==="bind",I=O==="on";if(O==="slot"){n||e.onError(kr(40,V));continue}if(O==="once"||O==="memo"||O==="is"||B&&Tu(F,"is")&&(Gb(s)||Bu("COMPILER_IS_ON_ELEMENT",e))||I&&a)continue;if((B&&Tu(F,"key")||I&&h&&Tu(F,"vue:before-update"))&&(p=!0),B&&Tu(F,"ref")&&e.scopes.vFor>0&&l.push(Yr($t("ref_for",!0),$t("true"))),!F&&(B||I)){if(x=!0,q)if(B){if(w(),Bu("COMPILER_V_BIND_OBJECT_ORDER",e)){c.unshift(q);continue}c.push(q)}else w({type:14,loc:V,callee:e.helper(Gx),arguments:n?[q]:[q,"true"]});else e.onError(kr(B?34:35,V));continue}B&&H.includes("prop")&&(g|=32);const K=e.directiveTransforms[O];if(K){const{props:$,needRuntime:se}=K(M,t,e);!a&&$.forEach(C),I&&F&&!gi(F)?w(ta($,o)):l.push(...$),se&&(f.push(M),y1(se)&&kP.set(M,se))}else T9(O)||(f.push(M),h&&(p=!0))}}let E;if(c.length?(w(),c.length>1?E=hn(e.helper(cv),c,o):E=c[0]):l.length&&(E=ta(u2(l),o)),x?g|=16:(b&&!n&&(g|=2),y&&!n&&(g|=4),A.length&&(g|=8),S&&(g|=32)),!p&&(g===0||g===32)&&(m||_||f.length>0)&&(g|=512),!e.inSSR&&E)switch(E.type){case 15:let N=-1,M=-1,O=!1;for(let V=0;VYr(s,a)),i))}return cd(r,t.loc)}function Qee(t){let e="[";for(let r=0,n=t.length;r{if(pv(t)){const{children:r,loc:n}=t,{slotName:i,slotProps:a}=tte(t,e),s=[e.prefixIdentifiers?"_ctx.$slots":"$slots",i,"{}","undefined","true"];let o=2;a&&(s[2]=a,o=3),r.length&&(s[3]=dc([],r,!1,!1,n),o=4),e.scopeId&&!e.slotted&&(o=5),s.splice(o),t.codegenNode=hn(e.helper(mP),s,n)}};function tte(t,e){let r='"default"',n;const i=[];for(let a=0;a0){const{props:a,directives:s}=LP(t,e,i,!1,!1);n=a,s.length&&e.onError(kr(36,s[0].loc))}return{slotName:r,slotProps:n}}const rte=/^\s*([\w$_]+|(async\s*)?\([^)]*?\))\s*(:[^=]+)?=>|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/,$P=(t,e,r,n)=>{const{loc:i,modifiers:a,arg:s}=t;!t.exp&&!a.length&&r.onError(kr(35,i));let o;if(s.type===4)if(s.isStatic){let f=s.content;f.startsWith("vue:")&&(f=`vnode-${f.slice(4)}`);const h=e.tagType!==0||f.startsWith("vnode")||!/[A-Z]/.test(f)?hT(Fi(f)):`on:${f}`;o=$t(h,!0,s.loc)}else o=Da([`${r.helperString(Hb)}(`,s,")"]);else o=s,o.children.unshift(`${r.helperString(Hb)}(`),o.children.push(")");let u=t.exp;u&&!u.content.trim()&&(u=void 0);let l=r.cacheHandlers&&!u&&!r.inVOnce;if(u){const f=xP(u.content),h=!(f||rte.test(u.content)),p=u.content.includes(";");(h||l&&f)&&(u=Da([`${h?"$event":"(...args)"} => ${p?"{":"("}`,u,p?"}":")"]))}let c={props:[Yr(o,u||$t("() => {}",!1,i))]};return n&&(c=n(c)),l&&(c.props[0].value=r.cache(c.props[0].value)),c.props.forEach(f=>f.key.isHandlerKey=!0),c},nte=(t,e,r)=>{const{modifiers:n,loc:i}=t,a=t.arg;let{exp:s}=t;if(s&&s.type===4&&!s.content.trim()&&(s=void 0),!s){if(a.type!==4||!a.isStatic)return r.onError(kr(52,a.loc)),{props:[Yr(a,$t("",!0,i))]};const o=Fi(a.content);s=t.exp=$t(o,!1,a.loc)}return a.type!==4?(a.children.unshift("("),a.children.push(') || ""')):a.isStatic||(a.content=`${a.content} || ""`),n.includes("camel")&&(a.type===4?a.isStatic?a.content=Fi(a.content):a.content=`${r.helperString(Ub)}(${a.content})`:(a.children.unshift(`${r.helperString(Ub)}(`),a.children.push(")"))),r.inSSR||(n.includes("prop")&&l2(a,"."),n.includes("attr")&&l2(a,"^")),{props:[Yr(a,s)]}},l2=(t,e)=>{t.type===4?t.isStatic?t.content=e+t.content:t.content=`\`${e}\${${t.content}}\``:(t.children.unshift(`'${e}' + (`),t.children.push(")"))},ite=(t,e)=>{if(t.type===0||t.type===1||t.type===11||t.type===10)return()=>{const r=t.children;let n,i=!1;for(let a=0;aa.type===7&&!e.directiveTransforms[a.name])&&t.tag!=="template")))for(let a=0;a{if(t.type===1&&xa(t,"once",!0))return c2.has(t)||e.inVOnce||e.inSSR?void 0:(c2.add(t),e.inVOnce=!0,e.helper(fv),()=>{e.inVOnce=!1;const r=e.currentNode;r.codegenNode&&(r.codegenNode=e.cache(r.codegenNode,!0))})},zP=(t,e,r)=>{const{exp:n,arg:i}=t;if(!n)return r.onError(kr(41,t.loc)),em();const a=n.loc.source,s=n.type===4?n.content:a,o=r.bindingMetadata[a];if(o==="props"||o==="props-aliased")return r.onError(kr(44,n.loc)),em();if(!s.trim()||!xP(s)&&!!1)return r.onError(kr(42,n.loc)),em();const l=i||$t("modelValue",!0),c=i?gi(i)?`onUpdate:${Fi(i.content)}`:Da(['"onUpdate:" + ',i]):"onUpdate:modelValue";let f;const h=r.isTS?"($event: any)":"$event";f=Da([`${h} => ((`,n,") = $event)"]);const p=[Yr(l,t.exp),Yr(c,f)];if(t.modifiers.length&&e.tagType===1){const g=t.modifiers.map(b=>(Qx(b)?b:JSON.stringify(b))+": true").join(", "),m=i?gi(i)?`${i.content}Modifiers`:Da([i,' + "Modifiers"']):"modelModifiers";p.push(Yr(m,$t(`{ ${g} }`,!1,t.loc,2)))}return em(p)};function em(t=[]){return{props:t}}const ste=/[\w).+\-_$\]]/,ote=(t,e)=>{Bu("COMPILER_FILTERS",e)&&(t.type===5&&gv(t.content,e),t.type===1&&t.props.forEach(r=>{r.type===7&&r.name!=="for"&&r.exp&&gv(r.exp,e)}))};function gv(t,e){if(t.type===4)f2(t,e);else for(let r=0;r=0&&(S=r.charAt(y),S===" ");y--);(!S||!ste.test(S))&&(s=!0)}}g===void 0?g=r.slice(0,p).trim():c!==0&&b();function b(){m.push(r.slice(c,p).trim()),c=p+1}if(m.length){for(p=0;p{if(t.type===1){const r=xa(t,"memo");return!r||h2.has(t)?void 0:(h2.add(t),()=>{const n=t.codegenNode||e.currentNode.codegenNode;n&&n.type===13&&(t.tagType!==1&&Kx(n,e),t.codegenNode=hn(e.helper(Zx),[r.exp,dc(void 0,n),"_cache",String(e.cached++)]))})}};function cte(t){return[[ate,zee,lte,Hee,ote,ete,Xee,Yee,ite],{on:$P,bind:nte,model:zP}]}function fte(t,e={}){const r=e.onError||Jx,n=e.mode==="module";e.prefixIdentifiers===!0?r(kr(47)):n&&r(kr(48));const i=!1;e.cacheHandlers&&r(kr(49)),e.scopeId&&!n&&r(kr(50));const a=yi({},e,{prefixIdentifiers:i}),s=jr(t)?gee(t,a):t,[o,u]=cte();return wee(s,yi({},a,{nodeTransforms:[...o,...e.nodeTransforms||[]],directiveTransforms:yi({},u,e.directiveTransforms||{})})),Dee(s,a)}const hte=()=>({props:[]});/** +**/const Bh=Symbol(""),yh=Symbol(""),Lx=Symbol(""),cv=Symbol(""),gR=Symbol(""),Uu=Symbol(""),yR=Symbol(""),bR=Symbol(""),$x=Symbol(""),zx=Symbol(""),ud=Symbol(""),qx=Symbol(""),xR=Symbol(""),Ux=Symbol(""),Hx=Symbol(""),Wx=Symbol(""),Vx=Symbol(""),Yx=Symbol(""),jx=Symbol(""),wR=Symbol(""),SR=Symbol(""),Ng=Symbol(""),fv=Symbol(""),Gx=Symbol(""),Xx=Symbol(""),Ih=Symbol(""),ld=Symbol(""),Zx=Symbol(""),Hb=Symbol(""),ree=Symbol(""),Wb=Symbol(""),hv=Symbol(""),nee=Symbol(""),iee=Symbol(""),Kx=Symbol(""),aee=Symbol(""),see=Symbol(""),Jx=Symbol(""),_R=Symbol(""),pc={[Bh]:"Fragment",[yh]:"Teleport",[Lx]:"Suspense",[cv]:"KeepAlive",[gR]:"BaseTransition",[Uu]:"openBlock",[yR]:"createBlock",[bR]:"createElementBlock",[$x]:"createVNode",[zx]:"createElementVNode",[ud]:"createCommentVNode",[qx]:"createTextVNode",[xR]:"createStaticVNode",[Ux]:"resolveComponent",[Hx]:"resolveDynamicComponent",[Wx]:"resolveDirective",[Vx]:"resolveFilter",[Yx]:"withDirectives",[jx]:"renderList",[wR]:"renderSlot",[SR]:"createSlots",[Ng]:"toDisplayString",[fv]:"mergeProps",[Gx]:"normalizeClass",[Xx]:"normalizeStyle",[Ih]:"normalizeProps",[ld]:"guardReactiveProps",[Zx]:"toHandlers",[Hb]:"camelize",[ree]:"capitalize",[Wb]:"toHandlerKey",[hv]:"setBlockTracking",[nee]:"pushScopeId",[iee]:"popScopeId",[Kx]:"withCtx",[aee]:"unref",[see]:"isRef",[Jx]:"withMemo",[_R]:"isMemoSame"};function oee(t){Object.getOwnPropertySymbols(t).forEach(e=>{pc[e]=t[e]})}const Li={start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0},source:""};function uee(t,e=""){return{type:0,source:e,children:t,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:0,temps:0,codegenNode:void 0,loc:Li}}function Lh(t,e,r,n,i,a,s,o=!1,u=!1,l=!1,c=Li){return t&&(o?(t.helper(Uu),t.helper(gc(t.inSSR,l))):t.helper(vc(t.inSSR,l)),s&&t.helper(Yx)),{type:13,tag:e,props:r,children:n,patchFlag:i,dynamicProps:a,directives:s,isBlock:o,disableTracking:u,isComponent:l,loc:c}}function cd(t,e=Li){return{type:17,loc:e,elements:t}}function ra(t,e=Li){return{type:15,loc:e,properties:t}}function Yr(t,e){return{type:16,loc:Li,key:jr(t)?$t(t,!0):t,value:e}}function $t(t,e=!1,r=Li,n=0){return{type:4,loc:r,content:t,isStatic:e,constType:e?3:n}}function Da(t,e=Li){return{type:8,loc:e,children:t}}function hn(t,e=[],r=Li){return{type:14,loc:r,callee:t,arguments:e}}function mc(t,e=void 0,r=!1,n=!1,i=Li){return{type:18,params:t,returns:e,newline:r,isSlot:n,loc:i}}function Vb(t,e,r,n=!0){return{type:19,test:t,consequent:e,alternate:r,newline:n,loc:Li}}function lee(t,e,r=!1){return{type:20,index:t,value:e,isVNode:r,loc:Li}}function cee(t){return{type:21,body:t,loc:Li}}function vc(t,e){return t||e?$x:zx}function gc(t,e){return t||e?yR:bR}function Qx(t,{helper:e,removeHelper:r,inSSR:n}){t.isBlock||(t.isBlock=!0,r(vc(n,t.isComponent)),e(Uu),e(gc(n,t.isComponent)))}const QD=new Uint8Array([123,123]),e2=new Uint8Array([125,125]);function t2(t){return t>=97&&t<=122||t>=65&&t<=90}function Ti(t){return t===32||t===10||t===9||t===12||t===13}function wo(t){return t===47||t===62||Ti(t)}function dv(t){const e=new Uint8Array(t.length);for(let r=0;r=0;i--){const a=this.newlines[i];if(e>a){r=i+2,n=e-a;break}}return{column:n,line:r,offset:e}}peek(){return this.buffer.charCodeAt(this.index+1)}stateText(e){e===60?(this.index>this.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=5,this.sectionStart=this.index):!this.inVPre&&e===this.delimiterOpen[0]&&(this.state=2,this.delimiterIndex=0,this.stateInterpolationOpen(e))}stateInterpolationOpen(e){if(e===this.delimiterOpen[this.delimiterIndex])if(this.delimiterIndex===this.delimiterOpen.length-1){const r=this.index+1-this.delimiterOpen.length;r>this.sectionStart&&this.cbs.ontext(this.sectionStart,r),this.state=3,this.sectionStart=r}else this.delimiterIndex++;else this.inRCDATA?(this.state=32,this.stateInRCDATA(e)):(this.state=1,this.stateText(e))}stateInterpolation(e){e===this.delimiterClose[0]&&(this.state=4,this.delimiterIndex=0,this.stateInterpolationClose(e))}stateInterpolationClose(e){e===this.delimiterClose[this.delimiterIndex]?this.delimiterIndex===this.delimiterClose.length-1?(this.cbs.oninterpolation(this.sectionStart,this.index+1),this.inRCDATA?this.state=32:this.state=1,this.sectionStart=this.index+1):this.delimiterIndex++:(this.state=3,this.stateInterpolation(e))}stateSpecialStartSequence(e){const r=this.sequenceIndex===this.currentSequence.length;if(!(r?wo(e):(e|32)===this.currentSequence[this.sequenceIndex]))this.inRCDATA=!1;else if(!r){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=6,this.stateInTagName(e)}stateInRCDATA(e){if(this.sequenceIndex===this.currentSequence.length){if(e===62||Ti(e)){const r=this.index-this.currentSequence.length;if(this.sectionStart=e||(this.state===28?this.currentSequence===Ln.CdataEnd?this.cbs.oncdata(this.sectionStart,e):this.cbs.oncomment(this.sectionStart,e):this.state===6||this.state===11||this.state===18||this.state===17||this.state===12||this.state===13||this.state===14||this.state===15||this.state===16||this.state===20||this.state===19||this.state===21||this.state===9||this.cbs.ontext(this.sectionStart,e))}emitCodePoint(e,r){}}function r2(t,{compatConfig:e}){const r=e&&e[t];return t==="MODE"?r||3:r}function Bu(t,e){const r=r2("MODE",e),n=r2(t,e);return r===3?n===!0:n!==!1}function $h(t,e,r,...n){return Bu(t,e)}function ew(t){throw t}function AR(t){}function Ir(t,e,r,n){const i=`https://vuejs.org/error-reference/#compiler-${t}`,a=new SyntaxError(String(i));return a.code=t,a.loc=e,a}const gi=t=>t.type===4&&t.isStatic;function DR(t){switch(t){case"Teleport":case"teleport":return yh;case"Suspense":case"suspense":return Lx;case"KeepAlive":case"keep-alive":return cv;case"BaseTransition":case"base-transition":return gR}}const hee=/^\d|[^\$\w]/,tw=t=>!hee.test(t),dee=/[A-Za-z_$\xA0-\uFFFF]/,pee=/[\.\?\w$\xA0-\uFFFF]/,mee=/\s+[.[]\s*|\s*[.[]\s+/g,vee=t=>{t=t.trim().replace(mee,s=>s.trim());let e=0,r=[],n=0,i=0,a=null;for(let s=0;se.type===7&&e.name==="bind"&&(!e.arg||e.arg.type!==4||!e.arg.isStatic))}function Wy(t){return t.type===5||t.type===2}function yee(t){return t.type===7&&t.name==="slot"}function pv(t){return t.type===1&&t.tagType===3}function mv(t){return t.type===1&&t.tagType===2}const bee=new Set([Ih,ld]);function NR(t,e=[]){if(t&&!jr(t)&&t.type===14){const r=t.callee;if(!jr(r)&&bee.has(r))return NR(t.arguments[0],e.concat(t))}return[t,e]}function vv(t,e,r){let n,i=t.type===13?t.props:t.arguments[2],a=[],s;if(i&&!jr(i)&&i.type===14){const o=NR(i);i=o[0],a=o[1],s=a[a.length-1]}if(i==null||jr(i))n=ra([e]);else if(i.type===14){const o=i.arguments[0];!jr(o)&&o.type===15?n2(e,o)||o.properties.unshift(e):i.callee===Zx?n=hn(r.helper(fv),[ra([e]),i]):i.arguments.unshift(ra([e])),!n&&(n=i)}else i.type===15?(n2(e,i)||i.properties.unshift(e),n=i):(n=hn(r.helper(fv),[ra([e]),i]),s&&s.callee===ld&&(s=a[a.length-2]));t.type===13?s?s.arguments[0]=n:t.props=n:s?s.arguments[0]=n:t.arguments[2]=n}function n2(t,e){let r=!1;if(t.key.type===4){const n=t.key.content;r=e.properties.some(i=>i.key.type===4&&i.key.content===n)}return r}function zh(t,e){return`_${e}_${t.replace(/[^\w]/g,(r,n)=>r==="-"?"_":t.charCodeAt(n).toString())}`}function xee(t){return t.type===14&&t.callee===Jx?t.arguments[1].returns:t}const wee=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,CR={parseMode:"base",ns:0,delimiters:["{{","}}"],getNamespace:()=>0,isVoidTag:vy,isPreTag:vy,isCustomElement:vy,onError:ew,onWarn:AR,comments:!1,prefixIdentifiers:!1};let hr=CR,qh=null,Iu="",zn=null,rr=null,pi="",Cs=-1,Nu=-1,gv=0,Do=!1,Yb=null;const Hr=[],Wr=new fee(Hr,{onerr:_s,ontext(t,e){Jp(Cn(t,e),t,e)},ontextentity(t,e,r){Jp(t,e,r)},oninterpolation(t,e){if(Do)return Jp(Cn(t,e),t,e);let r=t+Wr.delimiterOpen.length,n=e-Wr.delimiterClose.length;for(;Ti(Iu.charCodeAt(r));)r++;for(;Ti(Iu.charCodeAt(n-1));)n--;let i=Cn(r,n);i.includes("&")&&(i=hr.decodeEntities(i,!1)),jb({type:5,content:Rm(i,!1,cn(r,n)),loc:cn(t,e)})},onopentagname(t,e){const r=Cn(t,e);zn={type:1,tag:r,ns:hr.getNamespace(r,Hr[0],hr.ns),tagType:0,props:[],children:[],loc:cn(t-1,e),codegenNode:void 0}},onopentagend(t){a2(t)},onclosetag(t,e){const r=Cn(t,e);if(!hr.isVoidTag(r)){let n=!1;for(let i=0;i0&&_s(24,Hr[0].loc.start.offset);for(let s=0;s<=i;s++){const o=Hr.shift();Fm(o,e,s(n.type===7?n.rawName:n.name)===r)&&_s(2,e)},onattribend(t,e){if(zn&&rr){if(Ou(rr.loc,e),t!==0)if(pi.includes("&")&&(pi=hr.decodeEntities(pi,!0)),rr.type===6)rr.name==="class"&&(pi=OR(pi).trim()),t===1&&!pi&&_s(13,e),rr.value={type:2,content:pi,loc:t===1?cn(Cs,Nu):cn(Cs-1,Nu+1)},Wr.inSFCRoot&&zn.tag==="template"&&rr.name==="lang"&&pi&&pi!=="html"&&Wr.enterRCDATA(dv("-1&&$h("COMPILER_V_BIND_SYNC",hr,rr.loc,rr.rawName)&&(rr.name="model",rr.modifiers.splice(n,1))}(rr.type!==7||rr.name!=="pre")&&zn.props.push(rr)}pi="",Cs=Nu=-1},oncomment(t,e){hr.comments&&jb({type:3,content:Cn(t,e),loc:cn(t-4,e+3)})},onend(){const t=Iu.length;for(let e=0;e{const g=e.start.offset+h,m=g+f.length;return Rm(f,!1,cn(g,m),0,p?1:0)},o={source:s(a.trim(),r.indexOf(a,i.length)),value:void 0,key:void 0,index:void 0,finalized:!1};let u=i.trim().replace(See,"").trim();const l=i.indexOf(u),c=u.match(i2);if(c){u=u.replace(i2,"").trim();const f=c[1].trim();let h;if(f&&(h=r.indexOf(f,l+u.length),o.key=s(f,h,!0)),c[2]){const p=c[2].trim();p&&(o.index=s(p,r.indexOf(p,o.key?h+f.length:l+u.length),!0))}}return u&&(o.value=s(u,l,!0)),o}function Cn(t,e){return Iu.slice(t,e)}function a2(t){Wr.inSFCRoot&&(zn.innerLoc=cn(t+1,t+1)),jb(zn);const{tag:e,ns:r}=zn;r===0&&hr.isPreTag(e)&&gv++,hr.isVoidTag(e)?Fm(zn,t):(Hr.unshift(zn),(r===1||r===2)&&(Wr.inXML=!0)),zn=null}function Jp(t,e,r){var n;{const s=(n=Hr[0])==null?void 0:n.tag;s!=="script"&&s!=="style"&&t.includes("&")&&(t=hr.decodeEntities(t,!1))}const i=Hr[0]||qh,a=i.children[i.children.length-1];(a==null?void 0:a.type)===2?(a.content+=t,Ou(a.loc,r)):i.children.push({type:2,content:t,loc:cn(e,r)})}function Fm(t,e,r=!1){r?Ou(t.loc,MR(e,60)):Ou(t.loc,e+1),Wr.inSFCRoot&&(t.children.length?t.innerLoc.end=yi({},t.children[t.children.length-1].loc.end):t.innerLoc.end=yi({},t.innerLoc.start),t.innerLoc.source=Cn(t.innerLoc.start.offset,t.innerLoc.end.offset));const{tag:n,ns:i}=t;Do||(n==="slot"?t.tagType=2:s2(t)?t.tagType=3:Dee(t)&&(t.tagType=1)),Wr.inRCDATA||(t.children=TR(t.children,t.tag)),i===0&&hr.isPreTag(n)&&gv--,Yb===t&&(Do=Wr.inVPre=!1,Yb=null),Wr.inXML&&(Hr[0]?Hr[0].ns:hr.ns)===0&&(Wr.inXML=!1);{const a=t.props;if(!Wr.inSFCRoot&&Bu("COMPILER_NATIVE_TEMPLATE",hr)&&t.tag==="template"&&!s2(t)){const o=Hr[0]||qh,u=o.children.indexOf(t);o.children.splice(u,1,...t.children)}const s=a.find(o=>o.type===6&&o.name==="inline-template");s&&$h("COMPILER_INLINE_TEMPLATE",hr,s.loc)&&t.children.length&&(s.value={type:2,content:Cn(t.children[0].loc.start.offset,t.children[t.children.length-1].loc.end.offset),loc:s.loc})}}function MR(t,e){let r=t;for(;Iu.charCodeAt(r)!==e&&r>=0;)r--;return r}const Aee=new Set(["if","else","else-if","for","slot"]);function s2({tag:t,props:e}){if(t==="template"){for(let r=0;r64&&t<91}const Nee=/\r\n/g;function TR(t,e){var r,n;const i=hr.whitespace!=="preserve";let a=!1;for(let s=0;s0){if(u>=2){o.codegenNode.patchFlag="-1",o.codegenNode=e.hoist(o.codegenNode),a++;continue}}else{const l=o.codegenNode;if(l.type===13){const c=BR(l);if((!c||c===512||c===1)&&PR(o,e)>=2){const f=kR(o);f&&(l.props=e.hoist(f))}l.dynamicProps&&(l.dynamicProps=e.hoist(l.dynamicProps))}}}if(o.type===1){const u=o.tagType===1;u&&e.scopes.vSlot++,Pm(o,e),u&&e.scopes.vSlot--}else if(o.type===11)Pm(o,e,o.children.length===1);else if(o.type===9)for(let u=0;u1)for(let l=0;lO&&(N.childIndex--,N.onNodeRemoved()),N.parent.children.splice(O,1)},onNodeRemoved:ih,addIdentifiers(E){},removeIdentifiers(E){},hoist(E){jr(E)&&(E=$t(E)),N.hoists.push(E);const M=$t(`_hoisted_${N.hoists.length}`,!1,E.loc,2);return M.hoisted=E,M},cache(E,M=!1){return lee(N.cached++,E,M)}};return N.filters=new Set,N}function Bee(t,e){const r=kee(t,e);Mg(t,r),e.hoistStatic&&Ree(t,r),e.ssr||Iee(t,r),t.helpers=new Set([...r.helpers.keys()]),t.components=[...r.components],t.directives=[...r.directives],t.imports=r.imports,t.hoists=r.hoists,t.temps=r.temps,t.cached=r.cached,t.transformed=!0,t.filters=[...r.filters]}function Iee(t,e){const{helper:r}=e,{children:n}=t;if(n.length===1){const i=n[0];if(FR(t,i)&&i.codegenNode){const a=i.codegenNode;a.type===13&&Qx(a,e),t.codegenNode=a}else t.codegenNode=i}else if(n.length>1){let i=64;t.codegenNode=Lh(e,r(Bh),void 0,t.children,i+"",void 0,void 0,!0,void 0,!1)}}function Lee(t,e){let r=0;const n=()=>{r--};for(;rn===t:n=>t.test(n);return(n,i)=>{if(n.type===1){const{props:a}=n;if(n.tagType===3&&a.some(yee))return;const s=[];for(let o=0;o`${pc[t]}: _${pc[t]}`;function $ee(t,{mode:e="function",prefixIdentifiers:r=e==="module",sourceMap:n=!1,filename:i="template.vue.html",scopeId:a=null,optimizeImports:s=!1,runtimeGlobalName:o="Vue",runtimeModuleName:u="vue",ssrRuntimeModuleName:l="vue/server-renderer",ssr:c=!1,isTS:f=!1,inSSR:h=!1}){const p={mode:e,prefixIdentifiers:r,sourceMap:n,filename:i,scopeId:a,optimizeImports:s,runtimeGlobalName:o,runtimeModuleName:u,ssrRuntimeModuleName:l,ssr:c,isTS:f,inSSR:h,source:t.source,code:"",column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper(m){return`_${pc[m]}`},push(m,b=-2,y){p.code+=m},indent(){g(++p.indentLevel)},deindent(m=!1){m?--p.indentLevel:g(--p.indentLevel)},newline(){g(p.indentLevel)}};function g(m){p.push(` +`+" ".repeat(m),0)}return p}function zee(t,e={}){const r=$ee(t,e);e.onContextCreated&&e.onContextCreated(r);const{mode:n,push:i,prefixIdentifiers:a,indent:s,deindent:o,newline:u,scopeId:l,ssr:c}=r,f=Array.from(t.helpers),h=f.length>0,p=!a&&n!=="module";qee(t,r);const m=c?"ssrRender":"render",y=(c?["_ctx","_push","_parent","_attrs"]:["_ctx","_cache"]).join(", ");if(i(`function ${m}(${y}) {`),s(),p&&(i("with (_ctx) {"),s(),h&&(i(`const { ${f.map(LR).join(", ")} } = _Vue +`,-1),u())),t.components.length&&(Vy(t.components,"component",r),(t.directives.length||t.temps>0)&&u()),t.directives.length&&(Vy(t.directives,"directive",r),t.temps>0&&u()),t.filters&&t.filters.length&&(u(),Vy(t.filters,"filter",r),u()),t.temps>0){i("let ");for(let S=0;S0?", ":""}_temp${S}`)}return(t.components.length||t.directives.length||t.temps)&&(i(` +`,0),u()),c||i("return "),t.codegenNode?Hn(t.codegenNode,r):i("null"),p&&(o(),i("}")),o(),i("}"),{ast:t,code:r.code,preamble:"",map:r.map?r.map.toJSON():void 0}}function qee(t,e){const{ssr:r,prefixIdentifiers:n,push:i,newline:a,runtimeModuleName:s,runtimeGlobalName:o,ssrRuntimeModuleName:u}=e,l=o,c=Array.from(t.helpers);if(c.length>0&&(i(`const _Vue = ${l} +`,-1),t.hoists.length)){const f=[$x,zx,ud,qx,xR].filter(h=>c.includes(h)).map(LR).join(", ");i(`const { ${f} } = _Vue +`,-1)}Uee(t.hoists,e),a(),i("return ")}function Vy(t,e,{helper:r,push:n,newline:i,isTS:a}){const s=r(e==="filter"?Vx:e==="component"?Ux:Wx);for(let o=0;o3||!1;e.push("["),r&&e.indent(),fd(t,e,r),r&&e.deindent(),e.push("]")}function fd(t,e,r=!1,n=!0){const{push:i,newline:a}=e;for(let s=0;sr||"null")}function Xee(t,e){const{push:r,helper:n,pure:i}=e,a=jr(t.callee)?t.callee:n(t.callee);i&&r(Tg),r(a+"(",-2,t),fd(t.arguments,e),r(")")}function Zee(t,e){const{push:r,indent:n,deindent:i,newline:a}=e,{properties:s}=t;if(!s.length){r("{}",-2,t);return}const o=s.length>1||!1;r(o?"{":"{ "),o&&n();for(let u=0;u "),(u||o)&&(r("{"),n()),s?(u&&r("return "),Vn(s)?rw(s,e):Hn(s,e)):o&&Hn(o,e),(u||o)&&(i(),r("}")),l&&(t.isNonScopedSlot&&r(", undefined, true"),r(")"))}function Qee(t,e){const{test:r,consequent:n,alternate:i,newline:a}=t,{push:s,indent:o,deindent:u,newline:l}=e;if(r.type===4){const f=!tw(r.content);f&&s("("),$R(r,e),f&&s(")")}else s("("),Hn(r,e),s(")");a&&o(),e.indentLevel++,a||s(" "),s("? "),Hn(n,e),e.indentLevel--,a&&l(),a||s(" "),s(": ");const c=i.type===19;c||e.indentLevel++,Hn(i,e),c||e.indentLevel--,a&&u(!0)}function ete(t,e){const{push:r,helper:n,indent:i,deindent:a,newline:s}=e;r(`_cache[${t.index}] || (`),t.isVNode&&(i(),r(`${n(hv)}(-1),`),s()),r(`_cache[${t.index}] = `),Hn(t.value,e),t.isVNode&&(r(","),s(),r(`${n(hv)}(1),`),s(),r(`_cache[${t.index}]`),a()),r(")")}new RegExp("\\b"+"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield".split(",").join("\\b|\\b")+"\\b");const tte=IR(/^(if|else|else-if)$/,(t,e,r)=>rte(t,e,r,(n,i,a)=>{const s=r.parent.children;let o=s.indexOf(n),u=0;for(;o-->=0;){const l=s[o];l&&l.type===9&&(u+=l.branches.length)}return()=>{if(a)n.codegenNode=u2(i,u,r);else{const l=nte(n.codegenNode);l.alternate=u2(i,u+n.branches.length-1,r)}}}));function rte(t,e,r,n){if(e.name!=="else"&&(!e.exp||!e.exp.content.trim())){const i=e.exp?e.exp.loc:t.loc;r.onError(Ir(28,e.loc)),e.exp=$t("true",!1,i)}if(e.name==="if"){const i=o2(t,e),a={type:9,loc:t.loc,branches:[i]};if(r.replaceNode(a),n)return n(a,i,!0)}else{const i=r.parent.children;let a=i.indexOf(t);for(;a-->=-1;){const s=i[a];if(s&&s.type===3){r.removeNode(s);continue}if(s&&s.type===2&&!s.content.trim().length){r.removeNode(s);continue}if(s&&s.type===9){e.name==="else-if"&&s.branches[s.branches.length-1].condition===void 0&&r.onError(Ir(30,t.loc)),r.removeNode();const o=o2(t,e);s.branches.push(o);const u=n&&n(s,o,!1);Mg(o,r),u&&u(),r.currentNode=null}else r.onError(Ir(30,t.loc));break}}}function o2(t,e){const r=t.tagType===3;return{type:10,loc:t.loc,condition:e.name==="else"?void 0:e.exp,children:r&&!xa(t,"for")?t.children:[t],userKey:Cg(t,"key"),isTemplateIf:r}}function u2(t,e,r){return t.condition?Vb(t.condition,l2(t,e,r),hn(r.helper(ud),['""',"true"])):l2(t,e,r)}function l2(t,e,r){const{helper:n}=r,i=Yr("key",$t(`${e}`,!1,Li,2)),{children:a}=t,s=a[0];if(a.length!==1||s.type!==1)if(a.length===1&&s.type===11){const u=s.codegenNode;return vv(u,i,r),u}else return Lh(r,n(Bh),ra([i]),a,64+"",void 0,void 0,!0,!1,!1,t.loc);else{const u=s.codegenNode,l=xee(u);return l.type===13&&Qx(l,r),vv(l,i,r),u}}function nte(t){for(;;)if(t.type===19)if(t.alternate.type===19)t=t.alternate;else return t;else t.type===20&&(t=t.value)}const ite=IR("for",(t,e,r)=>{const{helper:n,removeHelper:i}=r;return ate(t,e,r,a=>{const s=hn(n(jx),[a.source]),o=pv(t),u=xa(t,"memo"),l=Cg(t,"key"),c=l&&(l.type===6?$t(l.value.content,!0):l.exp),f=l?Yr("key",c):null,h=a.source.type===4&&a.source.constType>0,p=h?64:l?128:256;return a.codegenNode=Lh(r,n(Bh),void 0,s,p+"",void 0,void 0,!0,!h,!1,t.loc),()=>{let g;const{children:m}=a,b=m.length!==1||m[0].type!==1,y=mv(t)?t:o&&t.children.length===1&&mv(t.children[0])?t.children[0]:null;if(y?(g=y.codegenNode,o&&f&&vv(g,f,r)):b?g=Lh(r,n(Bh),f?ra([f]):void 0,t.children,"64",void 0,void 0,!0,void 0,!1):(g=m[0].codegenNode,o&&f&&vv(g,f,r),g.isBlock!==!h&&(g.isBlock?(i(Uu),i(gc(r.inSSR,g.isComponent))):i(vc(r.inSSR,g.isComponent))),g.isBlock=!h,g.isBlock?(n(Uu),n(gc(r.inSSR,g.isComponent))):n(vc(r.inSSR,g.isComponent))),u){const S=mc(Gb(a.parseResult,[$t("_cached")]));S.body=cee([Da(["const _memo = (",u.exp,")"]),Da(["if (_cached",...c?[" && _cached.key === ",c]:[],` && ${r.helperString(_R)}(_cached, _memo)) return _cached`]),Da(["const _item = ",g]),$t("_item.memo = _memo"),$t("return _item")]),s.arguments.push(S,$t("_cache"),$t(String(r.cached++)))}else s.arguments.push(mc(Gb(a.parseResult),g,!0))}})});function ate(t,e,r,n){if(!e.exp){r.onError(Ir(31,e.loc));return}const i=e.forParseResult;if(!i){r.onError(Ir(32,e.loc));return}qR(i);const{addIdentifiers:a,removeIdentifiers:s,scopes:o}=r,{source:u,value:l,key:c,index:f}=i,h={type:11,loc:e.loc,source:u,valueAlias:l,keyAlias:c,objectIndexAlias:f,parseResult:i,children:pv(t)?t.children:[t]};r.replaceNode(h),o.vFor++;const p=n&&n(h);return()=>{o.vFor--,p&&p()}}function qR(t,e){t.finalized||(t.finalized=!0)}function Gb({value:t,key:e,index:r},n=[]){return ste([t,e,r,...n])}function ste(t){let e=t.length;for(;e--&&!t[e];);return t.slice(0,e+1).map((r,n)=>r||$t("_".repeat(n+1),!1))}const c2=$t("undefined",!1),ote=(t,e)=>{if(t.type===1&&(t.tagType===1||t.tagType===3)){const r=xa(t,"slot");if(r)return r.exp,e.scopes.vSlot++,()=>{e.scopes.vSlot--}}},ute=(t,e,r,n)=>mc(t,r,!1,!0,r.length?r[0].loc:n);function lte(t,e,r=ute){e.helper(Kx);const{children:n,loc:i}=t,a=[],s=[];let o=e.scopes.vSlot>0||e.scopes.vFor>0;const u=xa(t,"slot",!0);if(u){const{arg:b,exp:y}=u;b&&!gi(b)&&(o=!0),a.push(Yr(b||$t("default",!0),r(y,void 0,n,i)))}let l=!1,c=!1;const f=[],h=new Set;let p=0;for(let b=0;b{const x=r(y,void 0,S,i);return e.compatConfig&&(x.isNonScopedSlot=!0),Yr("default",x)};l?f.length&&f.some(y=>UR(y))&&(c?e.onError(Ir(39,f[0].loc)):a.push(b(void 0,f))):a.push(b(void 0,n))}const g=o?2:km(t.children)?3:1;let m=ra(a.concat(Yr("_",$t(g+"",!1))),i);return s.length&&(m=hn(e.helper(SR),[m,cd(s)])),{slots:m,hasDynamicSlots:o}}function Qp(t,e,r){const n=[Yr("name",t),Yr("fn",e)];return r!=null&&n.push(Yr("key",$t(String(r),!0))),ra(n)}function km(t){for(let e=0;efunction(){if(t=e.currentNode,!(t.type===1&&(t.tagType===0||t.tagType===1)))return;const{tag:n,props:i}=t,a=t.tagType===1;let s=a?fte(t,e):`"${n}"`;const o=eT(s)&&s.callee===Hx;let u,l,c,f=0,h,p,g,m=o||s===yh||s===Lx||!a&&(n==="svg"||n==="foreignObject");if(i.length>0){const b=WR(t,e,void 0,a,o);u=b.props,f=b.patchFlag,p=b.dynamicPropNames;const y=b.directives;g=y&&y.length?cd(y.map(S=>dte(S,e))):void 0,b.shouldUseBlock&&(m=!0)}if(t.children.length>0)if(s===cv&&(m=!0,f|=1024),a&&s!==yh&&s!==cv){const{slots:y,hasDynamicSlots:S}=lte(t,e);l=y,S&&(f|=1024)}else if(t.children.length===1&&s!==yh){const y=t.children[0],S=y.type,x=S===5||S===8;x&&na(y,e)===0&&(f|=1),x||S===2?l=y:l=t.children}else l=t.children;f!==0&&(c=String(f),p&&p.length&&(h=pte(p))),t.codegenNode=Lh(e,s,u,l,c,h,g,!!m,!1,a,t.loc)};function fte(t,e,r=!1){let{tag:n}=t;const i=Xb(n),a=Cg(t,"is");if(a)if(i||Bu("COMPILER_IS_ON_ELEMENT",e)){const o=a.type===6?a.value&&$t(a.value.content,!0):a.exp;if(o)return hn(e.helper(Hx),[o])}else a.type===6&&a.value.content.startsWith("vue:")&&(n=a.value.content.slice(4));const s=DR(n)||e.isBuiltInComponent(n);return s?(r||e.helper(s),s):(e.helper(Ux),e.components.add(n),zh(n,"component"))}function WR(t,e,r=t.props,n,i,a=!1){const{tag:s,loc:o,children:u}=t;let l=[];const c=[],f=[],h=u.length>0;let p=!1,g=0,m=!1,b=!1,y=!1,S=!1,x=!1,_=!1;const A=[],w=E=>{l.length&&(c.push(ra(f2(l),o)),l=[]),E&&c.push(E)},C=({key:E,value:M})=>{if(gi(E)){const O=E.content,F=y1(O);if(F&&(!n||i)&&O.toLowerCase()!=="onclick"&&O!=="onUpdate:modelValue"&&!$_(O)&&(S=!0),F&&$_(O)&&(_=!0),F&&M.type===14&&(M=M.arguments[0]),M.type===20||(M.type===4||M.type===8)&&na(M,e)>0)return;O==="ref"?m=!0:O==="class"?b=!0:O==="style"?y=!0:O!=="key"&&!A.includes(O)&&A.push(O),n&&(O==="class"||O==="style")&&!A.includes(O)&&A.push(O)}else x=!0};for(let E=0;E0&&l.push(Yr($t("ref_for",!0),$t("true")))),F==="is"&&(Xb(s)||V&&V.content.startsWith("vue:")||Bu("COMPILER_IS_ON_ELEMENT",e)))continue;l.push(Yr($t(F,!0,q),$t(V?V.content:"",H,V?V.loc:O)))}else{const{name:O,arg:F,exp:q,loc:V,modifiers:H}=M,B=O==="bind",k=O==="on";if(O==="slot"){n||e.onError(Ir(40,V));continue}if(O==="once"||O==="memo"||O==="is"||B&&Tu(F,"is")&&(Xb(s)||Bu("COMPILER_IS_ON_ELEMENT",e))||k&&a)continue;if((B&&Tu(F,"key")||k&&h&&Tu(F,"vue:before-update"))&&(p=!0),B&&Tu(F,"ref")&&e.scopes.vFor>0&&l.push(Yr($t("ref_for",!0),$t("true"))),!F&&(B||k)){if(x=!0,q)if(B){if(w(),Bu("COMPILER_V_BIND_OBJECT_ORDER",e)){c.unshift(q);continue}c.push(q)}else w({type:14,loc:V,callee:e.helper(Zx),arguments:n?[q]:[q,"true"]});else e.onError(Ir(B?34:35,V));continue}B&&H.includes("prop")&&(g|=32);const K=e.directiveTransforms[O];if(K){const{props:$,needRuntime:se}=K(M,t,e);!a&&$.forEach(C),k&&F&&!gi(F)?w(ra($,o)):l.push(...$),se&&(f.push(M),b1(se)&&HR.set(M,se))}else U9(O)||(f.push(M),h&&(p=!0))}}let N;if(c.length?(w(),c.length>1?N=hn(e.helper(fv),c,o):N=c[0]):l.length&&(N=ra(f2(l),o)),x?g|=16:(b&&!n&&(g|=2),y&&!n&&(g|=4),A.length&&(g|=8),S&&(g|=32)),!p&&(g===0||g===32)&&(m||_||f.length>0)&&(g|=512),!e.inSSR&&N)switch(N.type){case 15:let E=-1,M=-1,O=!1;for(let V=0;VYr(s,a)),i))}return cd(r,t.loc)}function pte(t){let e="[";for(let r=0,n=t.length;r{if(mv(t)){const{children:r,loc:n}=t,{slotName:i,slotProps:a}=vte(t,e),s=[e.prefixIdentifiers?"_ctx.$slots":"$slots",i,"{}","undefined","true"];let o=2;a&&(s[2]=a,o=3),r.length&&(s[3]=mc([],r,!1,!1,n),o=4),e.scopeId&&!e.slotted&&(o=5),s.splice(o),t.codegenNode=hn(e.helper(wR),s,n)}};function vte(t,e){let r='"default"',n;const i=[];for(let a=0;a0){const{props:a,directives:s}=WR(t,e,i,!1,!1);n=a,s.length&&e.onError(Ir(36,s[0].loc))}return{slotName:r,slotProps:n}}const gte=/^\s*([\w$_]+|(async\s*)?\([^)]*?\))\s*(:[^=]+)?=>|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/,VR=(t,e,r,n)=>{const{loc:i,modifiers:a,arg:s}=t;!t.exp&&!a.length&&r.onError(Ir(35,i));let o;if(s.type===4)if(s.isStatic){let f=s.content;f.startsWith("vue:")&&(f=`vnode-${f.slice(4)}`);const h=e.tagType!==0||f.startsWith("vnode")||!/[A-Z]/.test(f)?vT(Fi(f)):`on:${f}`;o=$t(h,!0,s.loc)}else o=Da([`${r.helperString(Wb)}(`,s,")"]);else o=s,o.children.unshift(`${r.helperString(Wb)}(`),o.children.push(")");let u=t.exp;u&&!u.content.trim()&&(u=void 0);let l=r.cacheHandlers&&!u&&!r.inVOnce;if(u){const f=ER(u.content),h=!(f||gte.test(u.content)),p=u.content.includes(";");(h||l&&f)&&(u=Da([`${h?"$event":"(...args)"} => ${p?"{":"("}`,u,p?"}":")"]))}let c={props:[Yr(o,u||$t("() => {}",!1,i))]};return n&&(c=n(c)),l&&(c.props[0].value=r.cache(c.props[0].value)),c.props.forEach(f=>f.key.isHandlerKey=!0),c},yte=(t,e,r)=>{const{modifiers:n,loc:i}=t,a=t.arg;let{exp:s}=t;if(s&&s.type===4&&!s.content.trim()&&(s=void 0),!s){if(a.type!==4||!a.isStatic)return r.onError(Ir(52,a.loc)),{props:[Yr(a,$t("",!0,i))]};const o=Fi(a.content);s=t.exp=$t(o,!1,a.loc)}return a.type!==4?(a.children.unshift("("),a.children.push(') || ""')):a.isStatic||(a.content=`${a.content} || ""`),n.includes("camel")&&(a.type===4?a.isStatic?a.content=Fi(a.content):a.content=`${r.helperString(Hb)}(${a.content})`:(a.children.unshift(`${r.helperString(Hb)}(`),a.children.push(")"))),r.inSSR||(n.includes("prop")&&h2(a,"."),n.includes("attr")&&h2(a,"^")),{props:[Yr(a,s)]}},h2=(t,e)=>{t.type===4?t.isStatic?t.content=e+t.content:t.content=`\`${e}\${${t.content}}\``:(t.children.unshift(`'${e}' + (`),t.children.push(")"))},bte=(t,e)=>{if(t.type===0||t.type===1||t.type===11||t.type===10)return()=>{const r=t.children;let n,i=!1;for(let a=0;aa.type===7&&!e.directiveTransforms[a.name])&&t.tag!=="template")))for(let a=0;a{if(t.type===1&&xa(t,"once",!0))return d2.has(t)||e.inVOnce||e.inSSR?void 0:(d2.add(t),e.inVOnce=!0,e.helper(hv),()=>{e.inVOnce=!1;const r=e.currentNode;r.codegenNode&&(r.codegenNode=e.cache(r.codegenNode,!0))})},YR=(t,e,r)=>{const{exp:n,arg:i}=t;if(!n)return r.onError(Ir(41,t.loc)),em();const a=n.loc.source,s=n.type===4?n.content:a,o=r.bindingMetadata[a];if(o==="props"||o==="props-aliased")return r.onError(Ir(44,n.loc)),em();if(!s.trim()||!ER(s)&&!!1)return r.onError(Ir(42,n.loc)),em();const l=i||$t("modelValue",!0),c=i?gi(i)?`onUpdate:${Fi(i.content)}`:Da(['"onUpdate:" + ',i]):"onUpdate:modelValue";let f;const h=r.isTS?"($event: any)":"$event";f=Da([`${h} => ((`,n,") = $event)"]);const p=[Yr(l,t.exp),Yr(c,f)];if(t.modifiers.length&&e.tagType===1){const g=t.modifiers.map(b=>(tw(b)?b:JSON.stringify(b))+": true").join(", "),m=i?gi(i)?`${i.content}Modifiers`:Da([i,' + "Modifiers"']):"modelModifiers";p.push(Yr(m,$t(`{ ${g} }`,!1,t.loc,2)))}return em(p)};function em(t=[]){return{props:t}}const wte=/[\w).+\-_$\]]/,Ste=(t,e)=>{Bu("COMPILER_FILTERS",e)&&(t.type===5&&yv(t.content,e),t.type===1&&t.props.forEach(r=>{r.type===7&&r.name!=="for"&&r.exp&&yv(r.exp,e)}))};function yv(t,e){if(t.type===4)p2(t,e);else for(let r=0;r=0&&(S=r.charAt(y),S===" ");y--);(!S||!wte.test(S))&&(s=!0)}}g===void 0?g=r.slice(0,p).trim():c!==0&&b();function b(){m.push(r.slice(c,p).trim()),c=p+1}if(m.length){for(p=0;p{if(t.type===1){const r=xa(t,"memo");return!r||m2.has(t)?void 0:(m2.add(t),()=>{const n=t.codegenNode||e.currentNode.codegenNode;n&&n.type===13&&(t.tagType!==1&&Qx(n,e),t.codegenNode=hn(e.helper(Jx),[r.exp,mc(void 0,n),"_cache",String(e.cached++)]))})}};function Dte(t){return[[xte,tte,Ate,ite,Ste,mte,cte,ote,bte],{on:VR,bind:yte,model:YR}]}function Ete(t,e={}){const r=e.onError||ew,n=e.mode==="module";e.prefixIdentifiers===!0?r(Ir(47)):n&&r(Ir(48));const i=!1;e.cacheHandlers&&r(Ir(49)),e.scopeId&&!n&&r(Ir(50));const a=yi({},e,{prefixIdentifiers:i}),s=jr(t)?Fee(t,a):t,[o,u]=Dte();return Bee(s,yi({},a,{nodeTransforms:[...o,...e.nodeTransforms||[]],directiveTransforms:yi({},u,e.directiveTransforms||{})})),zee(s,a)}const Nte=()=>({props:[]});/** * @vue/compiler-dom v3.4.18 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/const qP=Symbol(""),UP=Symbol(""),HP=Symbol(""),WP=Symbol(""),Xb=Symbol(""),VP=Symbol(""),YP=Symbol(""),jP=Symbol(""),GP=Symbol(""),XP=Symbol("");YQ({[qP]:"vModelRadio",[UP]:"vModelCheckbox",[HP]:"vModelText",[WP]:"vModelSelect",[Xb]:"vModelDynamic",[VP]:"withModifiers",[YP]:"withKeys",[jP]:"vShow",[GP]:"Transition",[XP]:"TransitionGroup"});let Rl;function dte(t,e=!1){return Rl||(Rl=document.createElement("div")),e?(Rl.innerHTML=`
`,Rl.children[0].getAttribute("foo")):(Rl.innerHTML=t,Rl.textContent)}const pte={parseMode:"html",isVoidTag:O9,isNativeTag:t=>F9(t)||P9(t)||R9(t),isPreTag:t=>t==="pre",decodeEntities:dte,isBuiltInComponent:t=>{if(t==="Transition"||t==="transition")return GP;if(t==="TransitionGroup"||t==="transition-group")return XP},getNamespace(t,e,r){let n=e?e.ns:r;if(e&&n===2)if(e.tag==="annotation-xml"){if(t==="svg")return 1;e.props.some(i=>i.type===6&&i.name==="encoding"&&i.value!=null&&(i.value.content==="text/html"||i.value.content==="application/xhtml+xml"))&&(n=0)}else/^m(?:[ions]|text)$/.test(e.tag)&&t!=="mglyph"&&t!=="malignmark"&&(n=0);else e&&n===1&&(e.tag==="foreignObject"||e.tag==="desc"||e.tag==="title")&&(n=0);if(n===0){if(t==="svg")return 1;if(t==="math")return 2}return n}},mte=t=>{t.type===1&&t.props.forEach((e,r)=>{e.type===6&&e.name==="style"&&e.value&&(t.props[r]={type:7,name:"bind",arg:$t("style",!0,e.loc),exp:vte(e.value.content,e.loc),modifiers:[],loc:e.loc})})},vte=(t,e)=>{const r=I9(t);return $t(JSON.stringify(r),!1,e,3)};function $o(t,e){return kr(t,e)}const gte=(t,e,r)=>{const{exp:n,loc:i}=t;return n||r.onError($o(53,i)),e.children.length&&(r.onError($o(54,i)),e.children.length=0),{props:[Yr($t("innerHTML",!0,i),n||$t("",!0))]}},yte=(t,e,r)=>{const{exp:n,loc:i}=t;return n||r.onError($o(55,i)),e.children.length&&(r.onError($o(56,i)),e.children.length=0),{props:[Yr($t("textContent",!0),n?ra(n,r)>0?n:hn(r.helperString(Dg),[n],i):$t("",!0))]}},bte=(t,e,r)=>{const n=zP(t,e,r);if(!n.props.length||e.tagType===1)return n;t.arg&&r.onError($o(58,t.arg.loc));const{tag:i}=e,a=r.isCustomElement(i);if(i==="input"||i==="textarea"||i==="select"||a){let s=HP,o=!1;if(i==="input"||a){const u=Ng(e,"type");if(u){if(u.type===7)s=Xb;else if(u.value)switch(u.value.content){case"radio":s=qP;break;case"checkbox":s=UP;break;case"file":o=!0,r.onError($o(59,t.loc));break}}else ree(e)&&(s=Xb)}else i==="select"&&(s=WP);o||(n.needRuntime=r.helper(s))}else r.onError($o(57,t.loc));return n.props=n.props.filter(s=>!(s.key.type===4&&s.key.content==="modelValue")),n},xte=Wv("passive,once,capture"),wte=Wv("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"),Ste=Wv("left,right"),ZP=Wv("onkeyup,onkeydown,onkeypress",!0),_te=(t,e,r,n)=>{const i=[],a=[],s=[];for(let o=0;ogi(t)&&t.content.toLowerCase()==="onclick"?$t(e,!0):t.type!==4?Da(["(",t,`) === "onClick" ? "${e}" : (`,t,")"]):t,Ate=(t,e,r)=>$P(t,e,r,n=>{const{modifiers:i}=t;if(!i.length)return n;let{key:a,value:s}=n.props[0];const{keyModifiers:o,nonKeyModifiers:u,eventOptionModifiers:l}=_te(a,i,r,t.loc);if(u.includes("right")&&(a=d2(a,"onContextmenu")),u.includes("middle")&&(a=d2(a,"onMouseup")),u.length&&(s=hn(r.helper(VP),[s,JSON.stringify(u)])),o.length&&(!gi(a)||ZP(a.content))&&(s=hn(r.helper(YP),[s,JSON.stringify(o)])),l.length){const c=l.map(Hv).join("");a=gi(a)?$t(`${a.content}${c}`,!0):Da(["(",a,`) + "${c}"`])}return{props:[Yr(a,s)]}}),Dte=(t,e,r)=>{const{exp:n,loc:i}=t;return n||r.onError($o(61,i)),{props:[],needRuntime:r.helper(jP)}},Nte=(t,e)=>{t.type===1&&t.tagType===0&&(t.tag==="script"||t.tag==="style")&&e.removeNode()},Ete=[mte],Cte={cloak:hte,html:gte,text:yte,model:bte,on:Ate,show:Dte};function Mte(t,e={}){return fte(t,yi({},pte,e,{nodeTransforms:[Nte,...Ete,...e.nodeTransforms||[]],directiveTransforms:yi({},Cte,e.directiveTransforms||{}),transformHoist:null}))}/** +**/const jR=Symbol(""),GR=Symbol(""),XR=Symbol(""),ZR=Symbol(""),Zb=Symbol(""),KR=Symbol(""),JR=Symbol(""),QR=Symbol(""),eP=Symbol(""),tP=Symbol("");oee({[jR]:"vModelRadio",[GR]:"vModelCheckbox",[XR]:"vModelText",[ZR]:"vModelSelect",[Zb]:"vModelDynamic",[KR]:"withModifiers",[JR]:"withKeys",[QR]:"vShow",[eP]:"Transition",[tP]:"TransitionGroup"});let Pl;function Cte(t,e=!1){return Pl||(Pl=document.createElement("div")),e?(Pl.innerHTML=`
`,Pl.children[0].getAttribute("foo")):(Pl.innerHTML=t,Pl.textContent)}const Mte={parseMode:"html",isVoidTag:H9,isNativeTag:t=>W9(t)||V9(t)||Y9(t),isPreTag:t=>t==="pre",decodeEntities:Cte,isBuiltInComponent:t=>{if(t==="Transition"||t==="transition")return eP;if(t==="TransitionGroup"||t==="transition-group")return tP},getNamespace(t,e,r){let n=e?e.ns:r;if(e&&n===2)if(e.tag==="annotation-xml"){if(t==="svg")return 1;e.props.some(i=>i.type===6&&i.name==="encoding"&&i.value!=null&&(i.value.content==="text/html"||i.value.content==="application/xhtml+xml"))&&(n=0)}else/^m(?:[ions]|text)$/.test(e.tag)&&t!=="mglyph"&&t!=="malignmark"&&(n=0);else e&&n===1&&(e.tag==="foreignObject"||e.tag==="desc"||e.tag==="title")&&(n=0);if(n===0){if(t==="svg")return 1;if(t==="math")return 2}return n}},Tte=t=>{t.type===1&&t.props.forEach((e,r)=>{e.type===6&&e.name==="style"&&e.value&&(t.props[r]={type:7,name:"bind",arg:$t("style",!0,e.loc),exp:Ote(e.value.content,e.loc),modifiers:[],loc:e.loc})})},Ote=(t,e)=>{const r=j9(t);return $t(JSON.stringify(r),!1,e,3)};function $o(t,e){return Ir(t,e)}const Fte=(t,e,r)=>{const{exp:n,loc:i}=t;return n||r.onError($o(53,i)),e.children.length&&(r.onError($o(54,i)),e.children.length=0),{props:[Yr($t("innerHTML",!0,i),n||$t("",!0))]}},Rte=(t,e,r)=>{const{exp:n,loc:i}=t;return n||r.onError($o(55,i)),e.children.length&&(r.onError($o(56,i)),e.children.length=0),{props:[Yr($t("textContent",!0),n?na(n,r)>0?n:hn(r.helperString(Ng),[n],i):$t("",!0))]}},Pte=(t,e,r)=>{const n=YR(t,e,r);if(!n.props.length||e.tagType===1)return n;t.arg&&r.onError($o(58,t.arg.loc));const{tag:i}=e,a=r.isCustomElement(i);if(i==="input"||i==="textarea"||i==="select"||a){let s=XR,o=!1;if(i==="input"||a){const u=Cg(e,"type");if(u){if(u.type===7)s=Zb;else if(u.value)switch(u.value.content){case"radio":s=jR;break;case"checkbox":s=GR;break;case"file":o=!0,r.onError($o(59,t.loc));break}}else gee(e)&&(s=Zb)}else i==="select"&&(s=ZR);o||(n.needRuntime=r.helper(s))}else r.onError($o(57,t.loc));return n.props=n.props.filter(s=>!(s.key.type===4&&s.key.content==="modelValue")),n},kte=Yv("passive,once,capture"),Bte=Yv("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"),Ite=Yv("left,right"),rP=Yv("onkeyup,onkeydown,onkeypress",!0),Lte=(t,e,r,n)=>{const i=[],a=[],s=[];for(let o=0;ogi(t)&&t.content.toLowerCase()==="onclick"?$t(e,!0):t.type!==4?Da(["(",t,`) === "onClick" ? "${e}" : (`,t,")"]):t,$te=(t,e,r)=>VR(t,e,r,n=>{const{modifiers:i}=t;if(!i.length)return n;let{key:a,value:s}=n.props[0];const{keyModifiers:o,nonKeyModifiers:u,eventOptionModifiers:l}=Lte(a,i,r,t.loc);if(u.includes("right")&&(a=v2(a,"onContextmenu")),u.includes("middle")&&(a=v2(a,"onMouseup")),u.length&&(s=hn(r.helper(KR),[s,JSON.stringify(u)])),o.length&&(!gi(a)||rP(a.content))&&(s=hn(r.helper(JR),[s,JSON.stringify(o)])),l.length){const c=l.map(Wv).join("");a=gi(a)?$t(`${a.content}${c}`,!0):Da(["(",a,`) + "${c}"`])}return{props:[Yr(a,s)]}}),zte=(t,e,r)=>{const{exp:n,loc:i}=t;return n||r.onError($o(61,i)),{props:[],needRuntime:r.helper(QR)}},qte=(t,e)=>{t.type===1&&t.tagType===0&&(t.tag==="script"||t.tag==="style")&&e.removeNode()},Ute=[Tte],Hte={cloak:Nte,html:Fte,text:Rte,model:Pte,on:$te,show:zte};function Wte(t,e={}){return Ete(t,yi({},Mte,e,{nodeTransforms:[qte,...Ute,...e.nodeTransforms||[]],directiveTransforms:yi({},Hte,e.directiveTransforms||{}),transformHoist:null}))}/** * vue v3.4.18 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/const p2=new WeakMap;function Tte(t){let e=p2.get(t??jl);return e||(e=Object.create(null),p2.set(t??jl,e)),e}function Ote(t,e){if(!jr(t))if(t.nodeType)t=t.innerHTML;else return ih;const r=t,n=Tte(e),i=n[r];if(i)return i;if(t[0]==="#"){const u=document.querySelector(t);t=u?u.innerHTML:""}const a=yi({hoistStatic:!0,onError:void 0,onWarn:ih},e);!a.isCustomElement&&typeof customElements<"u"&&(a.isCustomElement=u=>!!customElements.get(u));const{code:s}=Mte(t,a),o=new Function("Vue",s)(zQ);return o._rc=!0,n[r]=o}fT(Ote);class KP{constructor(e={}){je(this,"config",{primarySelector:void 0,popupClass:"shadow-lg h-half w-1/2 bg-white"});je(this,"container",document.createElement("div"));je(this,"popupBody",document.createElement("div"));je(this,"parentWrapper");if(this.config=Object.assign(this.config,e),this.config.primarySelector===void 0&&document.querySelectorAll(".is-popup").length>0){const r=document.querySelectorAll(".is-popup").length;this.parentWrapper=document.querySelectorAll(".is-popup")[r-1]}else this.parentWrapper=document.querySelector("body").querySelectorAll("div")[0]}static show(e,r={},n={}){return new KP(n).open(e,r)}hash(){let e="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";for(let n=0;n<10;n++)e+=r.charAt(Math.floor(Math.random()*r.length));return e.toLocaleLowerCase()}open(e,r={},n={}){if(this.popupBody=document.createElement("div"),typeof e=="function")try{e=(async()=>(await e()).default)()}catch{}const i=document.querySelector("body").querySelectorAll("div")[0];this.parentWrapper.style.filter="blur(4px)",i.style.filter="blur(6px)";let a=[];const s=nsState.state.getValue();s.popups!==void 0&&(a=s.popups);let o={};e.props&&(o=Object.keys(r).filter(l=>e.props.includes(l)).reduce((l,c)=>(l[c]=r[c],l),{}));const u={hash:`popup-${this.hash()}-${this.hash()}`,component:g1(e),close:(l=null)=>this.close(u,l),props:o,params:r,config:n};return a.push(u),nsState.setState({popups:a}),u}close(e,r=null){this.parentWrapper.style.filter="blur(0px)";const n=document.querySelector("body").querySelectorAll("div")[0];document.querySelectorAll(".is-popup").length<=1&&(n.style.filter="blur(0px)");const i=`#${e.hash} .popup-body`,a=document.querySelector(i);a.classList.remove("zoom-out-entrance"),a.classList.add("zoom-in-exit"),document.querySelector(`#${e.hash}`).classList.remove("is-popup"),setTimeout(()=>{const{popups:o}=nsState.state.getValue(),u=o.indexOf(e);if(o.splice(u,1),nsState.setState({popups:o}),r!==null)return r(e)},250)}}class ZAe{constructor(){je(this,"_subject");this._subject=new ag}subject(){return this._subject}emit({identifier:e,value:r}){this._subject.next({identifier:e,value:r})}}class Wy{constructor(e){this.instance=e}close(){this.instance.classList.add("fade-out-exit"),this.instance.classList.add("anim-duration-300"),this.instance.classList.remove("zoom-in-entrance"),setTimeout(()=>{this.instance.remove()},250)}}class KAe{constructor(){je(this,"queue");window.floatingNotices===void 0&&(window.floatingNotices=[],this.queue=window.floatingNotices)}show(e,r,n={duration:3e3,type:"info"}){const{floatingNotice:i}=this.__createSnack({title:e,description:r,options:n});n.actions===void 0&&(n.duration=3e3),this.__startTimer(n.duration,i)}error(e,r,n={duration:3e3,type:"error"}){return this.show(e,r,{...n,type:"error"})}success(e,r,n={duration:3e3,type:"success"}){return this.show(e,r,{...n,type:"success"})}info(e,r,n={duration:3e3,type:"info"}){return this.show(e,r,{...n,type:"info"})}warning(e,r,n={duration:3e3,type:"warning"}){return this.show(e,r,{...n,type:"warning"})}__startTimer(e,r){let n;const i=()=>{e>0&&e!==!1&&(n=setTimeout(()=>{new Wy(r).close()},e))};r.addEventListener("mouseenter",()=>{clearTimeout(n)}),r.addEventListener("mouseleave",()=>{i()}),i()}__createSnack({title:e,description:r,options:n}){let i="",a="";switch(n.type){case"info":i="",a="info";break;case"error":i="",a="error";break;case"success":i="",a="success";break;case"warning":i="",a="warning";break}if(document.getElementById("floating-notice-wrapper")===null){const u=new DOMParser().parseFromString(` +**/const g2=new WeakMap;function Vte(t){let e=g2.get(t??Xl);return e||(e=Object.create(null),g2.set(t??Xl,e)),e}function Yte(t,e){if(!jr(t))if(t.nodeType)t=t.innerHTML;else return ih;const r=t,n=Vte(e),i=n[r];if(i)return i;if(t[0]==="#"){const u=document.querySelector(t);t=u?u.innerHTML:""}const a=yi({hoistStatic:!0,onError:void 0,onWarn:ih},e);!a.isCustomElement&&typeof customElements<"u"&&(a.isCustomElement=u=>!!customElements.get(u));const{code:s}=Wte(t,a),o=new Function("Vue",s)(tee);return o._rc=!0,n[r]=o}mT(Yte);class nw{constructor(e={}){je(this,"config",{primarySelector:void 0,popupClass:"shadow-lg h-half w-1/2 bg-white"});je(this,"container",document.createElement("div"));je(this,"popupBody",document.createElement("div"));je(this,"parentWrapper");if(this.config=Object.assign(this.config,e),this.config.primarySelector===void 0&&document.querySelectorAll(".is-popup").length>0){const r=document.querySelectorAll(".is-popup").length;this.parentWrapper=document.querySelectorAll(".is-popup")[r-1]}else this.parentWrapper=document.querySelector("body").querySelectorAll("div")[0]}static show(e,r={},n={}){return new nw(n).open(e,r)}hash(){let e="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";for(let n=0;n<10;n++)e+=r.charAt(Math.floor(Math.random()*r.length));return e.toLocaleLowerCase()}open(e,r={},n={}){if(this.popupBody=document.createElement("div"),typeof e=="function")try{e=(async()=>(await e()).default)()}catch{}const i=document.querySelector("body").querySelectorAll("div")[0];this.parentWrapper.style.filter="blur(4px)",i.style.filter="blur(6px)";let a=[];const s=nsState.state.getValue();s.popups!==void 0&&(a=s.popups);let o={};e.props&&(o=Object.keys(r).filter(l=>e.props.includes(l)).reduce((l,c)=>(l[c]=r[c],l),{}));const u={hash:`popup-${this.hash()}-${this.hash()}`,component:Vv(e),close:(l=null)=>this.close(u,l),props:o,params:r,config:n};return a.push(u),nsState.setState({popups:a}),u}close(e,r=null){this.parentWrapper.style.filter="blur(0px)";const n=document.querySelector("body").querySelectorAll("div")[0];document.querySelectorAll(".is-popup").length<=1&&(n.style.filter="blur(0px)");const i=`#${e.hash} .popup-body`,a=document.querySelector(i);a.classList.remove("zoom-out-entrance"),a.classList.add("zoom-in-exit"),document.querySelector(`#${e.hash}`).classList.remove("is-popup"),setTimeout(()=>{const{popups:o}=nsState.state.getValue(),u=o.indexOf(e);if(o.splice(u,1),nsState.setState({popups:o}),r!==null)return r(e)},250)}}class nP{constructor(){je(this,"_subject");this._subject=new og}subject(){return this._subject}emit({identifier:e,value:r}){this._subject.next({identifier:e,value:r})}}class Yy{constructor(e){this.instance=e}close(){this.instance.classList.add("fade-out-exit"),this.instance.classList.add("anim-duration-300"),this.instance.classList.remove("zoom-in-entrance"),setTimeout(()=>{this.instance.remove()},250)}}class iP{constructor(){je(this,"queue");window.floatingNotices===void 0&&(window.floatingNotices=[],this.queue=window.floatingNotices)}show(e,r,n={duration:3e3,type:"info"}){const{floatingNotice:i}=this.__createSnack({title:e,description:r,options:n});n.actions===void 0&&(n.duration=3e3),this.__startTimer(n.duration,i)}error(e,r,n={duration:3e3,type:"error"}){return this.show(e,r,{...n,type:"error"})}success(e,r,n={duration:3e3,type:"success"}){return this.show(e,r,{...n,type:"success"})}info(e,r,n={duration:3e3,type:"info"}){return this.show(e,r,{...n,type:"info"})}warning(e,r,n={duration:3e3,type:"warning"}){return this.show(e,r,{...n,type:"warning"})}__startTimer(e,r){let n;const i=()=>{e>0&&e!==!1&&(n=setTimeout(()=>{new Yy(r).close()},e))};r.addEventListener("mouseenter",()=>{clearTimeout(n)}),r.addEventListener("mouseleave",()=>{i()}),i()}__createSnack({title:e,description:r,options:n}){let i="",a="";switch(n.type){case"info":i="",a="info";break;case"error":i="",a="error";break;case"success":i="",a="success";break;case"warning":i="",a="warning";break}if(document.getElementById("floating-notice-wrapper")===null){const u=new DOMParser().parseFromString(`
@@ -104,60 +104,60 @@ Qe.version="2.30.1";JG(Rr);Qe.fn=Xe;Qe.min=zZ;Qe.max=qZ;Qe.now=UZ;Qe.utc=rs;Qe.u
- `,"text/html").firstElementChild;n.actions[u].onClick?c.querySelector(".ns-button").addEventListener("click",()=>{n.actions[u].onClick(new Wy(o))}):c.querySelector(".ns-button").addEventListener("click",()=>new Wy(o).close()),l.appendChild(c.querySelector(".ns-button"))}return s.appendChild(o),{floatingNotice:o}}}class JAe{constructor(){je(this,"_subject");je(this,"_client");je(this,"_lastRequestData");this._subject=new an}defineClient(e){this._client=e}post(e,r,n={}){return this._request("post",e,r,n)}get(e,r={}){return this._request("get",e,void 0,r)}delete(e,r={}){return this._request("delete",e,void 0,r)}put(e,r,n={}){return this._request("put",e,r,n)}get response(){return this._lastRequestData}_request(e,r,n={},i={}){return r=nsHooks.applyFilters("http-client-url",r.replace(/\/$/,"")),this._subject.next({identifier:"async.start",url:r,data:n}),new Kt(a=>{this._client[e](r,n,{...this._client.defaults[e],...i}).then(s=>{this._lastRequestData=s,a.next(s.data),a.complete(),this._subject.next({identifier:"async.stop"})}).catch(s=>{var o;a.error(((o=s.response)==null?void 0:o.data)||s.response||s),this._subject.next({identifier:"async.stop"})})})}subject(){return this._subject}emit({identifier:e,value:r}){this._subject.next({identifier:e,value:r})}}class QAe{constructor(){je(this,"queue");window.snackbarQueue===void 0&&(window.snackbarQueue=[],this.queue=window.snackbarQueue)}show(e,r,n={duration:3e3,type:"info"}){return new Kt(i=>{const{buttonNode:a,textNode:s,snackWrapper:o,sampleSnack:u}=this.__createSnack({message:e,label:r,type:n.type});a.addEventListener("click",l=>{i.next(a),i.complete(),u.remove()}),this.__startTimer(n.duration,u)})}error(e,r=null,n={duration:3e3,type:"error"}){return this.show(e,r,{...n,type:"error"})}success(e,r=null,n={duration:3e3,type:"success"}){return this.show(e,r,{...n,type:"success"})}info(e,r=null,n={duration:3e3,type:"info"}){return this.show(e,r,{...n,type:"info"})}__startTimer(e,r){let n;const i=()=>{e>0&&e!==!1&&(n=setTimeout(()=>{r.remove()},e))};r.addEventListener("mouseenter",()=>{clearTimeout(n)}),r.addEventListener("mouseleave",()=>{i()}),i()}__createSnack({message:e,label:r,type:n="info"}){const i=document.getElementById("snack-wrapper")||document.createElement("div"),a=document.createElement("div"),s=document.createElement("p"),o=document.createElement("div"),u=document.createElement("button");let l="",c="";switch(n){case"info":l="",c="info";break;case"error":l="",c="error";break;case"success":l="",c="success";break}return s.textContent=e,s.setAttribute("class","pr-2"),r&&(o.setAttribute("class","ns-button default"),u.textContent=r,u.setAttribute("class",`px-3 py-2 shadow rounded uppercase ${l}`),o.appendChild(u)),a.appendChild(s),a.appendChild(o),a.setAttribute("class",`md:rounded py-2 px-3 md:w-2/5 w-full z-10 md:my-2 shadow-lg flex justify-between items-center zoom-in-entrance anim-duration-300 ns-notice ${c}`),i.appendChild(a),document.getElementById("snack-wrapper")===null&&(i.setAttribute("id","snack-wrapper"),i.setAttribute("class","absolute bottom-0 w-full flex justify-between items-center flex-col"),document.body.appendChild(i)),{snackWrapper:i,sampleSnack:a,buttonsWrapper:o,buttonNode:u,textNode:s}}}class eDe{constructor(e){je(this,"behaviorState");je(this,"stateStore",{});this.behaviorState=new K1({}),this.behaviorState.subscribe(r=>{this.stateStore=r}),this.setState(e)}setState(e){this.behaviorState.next({...this.stateStore,...e})}get state(){return this.behaviorState}subscribe(e){this.behaviorState.subscribe(e)}}class tDe{validateFields(e){return e.map(r=>(this.checkField(r,e,{touchField:!1}),r.errors?r.errors.length===0:0)).filter(r=>r===!1).length===0}validateFieldsErrors(e){return e.map(r=>(this.checkField(r,e,{touchField:!1}),r.errors)).flat()}validateForm(e){e.main&&this.validateField(e.main);const r=[];for(let n in e.tabs)if(e.tabs[n].fields){const i=[],a=this.validateFieldsErrors(e.tabs[n].fields);a.length>0&&i.push(a),e.tabs[n].errors=i.flat(),r.push(i.flat())}return r.flat().filter(n=>n!==void 0)}initializeTabs(e){let r=0;for(let n in e)r===0&&(e[n].active=!0),e[n].active=e[n].active===void 0?!1:e[n].active,e[n].fields=this.createFields(e[n].fields),r++;return e}validateField(e){return this.checkField(e,[],{touchField:!1})}fieldsValid(e){return!(e.map(r=>r.errors&&r.errors.length>0).filter(r=>r).length>0)}createFields(e){return e.map(r=>{if(r.type=r.type||"text",r.errors=r.errors||[],r.disabled=r.disabled||!1,r.touched=!1,r.type==="custom"&&typeof r.component=="string"){const n=r.component;if(r.component=g1(nsExtraComponents[r.component]),r.component)r.component.value.$field=r,r.component.value.$fields=e;else throw`Failed to load a custom component. "${n}" is not provided as an extra component. More details here: "https://my.nexopos.com/en/documentation/developpers-guides/how-to-register-a-custom-vue-component"`}return r})}isFormUntouched(e){let r=!0;if(e.main&&(r=e.main.touched?!1:r),e.tabs)for(let n in e.tabs)r=e.tabs[n].fields.filter(i=>i.touched).length>0?!1:r;return r}createForm(e){if(e.main&&(e.main=this.createFields([e.main])[0]),e.tabs)for(let r in e.tabs)e.tabs[r].errors=[],e.tabs[r].fields!==void 0?e.tabs[r].fields=this.createFields(e.tabs[r].fields):console.info(`Warning: The tab "${e.tabs[r].label}" is missing fields. Fallback on checking dynamic component instead.`);return e}enableFields(e){return e.map(r=>r.disabled=!1)}disableFields(e){return e.map(r=>r.disabled=!0)}disableForm(e){e.main&&(e.main.disabled=!0);for(let r in e.tabs)e.tabs[r].fields.forEach(n=>n.disabled=!0)}enableForm(e){e.main&&(e.main.disabled=!1);for(let r in e.tabs)e.tabs[r].fields.forEach(n=>n.disabled=!1)}getValue(e){const r={};return e.forEach(n=>{r[n.name]=n.value}),r}checkField(e,r=[],n={touchField:!0}){if(e.validation!==void 0){e.errors=[];const i=this.detectValidationRules(e.validation).filter(s=>s!=null);i.map(s=>s.identifier).includes("sometimes")?e.value!==void 0&&e.value.length>0&&i.forEach(s=>{this.fieldPassCheck(e,s,r)}):i.forEach(s=>{this.fieldPassCheck(e,s,r)})}return n.touchField&&(e.touched=!0),e}extractForm(e){let r={};if(e.main&&(r[e.main.name]=e.main.value),e.tabs)for(let n in e.tabs)r[n]===void 0&&(r[n]={}),r[n]=this.extractFields(e.tabs[n].fields);return r}extractFields(e,r={}){return e.forEach(n=>{r[n.name]=n.value}),r}detectValidationRules(e){const r=n=>{const i=/(min)\:([0-9])+/g,a=/(sometimes)/g,s=/(max)\:([0-9])+/g,o=/(same):(\w+)/g,u=/(different):(\w+)/g;let l;if(["email","required"].includes(n))return{identifier:n};if(n.length>0&&(l=i.exec(n)||s.exec(n)||o.exec(n)||u.exec(n)||a.exec(n),l!==null))return{identifier:l[1],value:l[2]}};return Array.isArray(e)?e.filter(n=>typeof n=="string").map(r):e.split("|").map(r)}triggerError(e,r){if(r.errors)for(let n in r.errors){let i=n.split(".").filter(a=>!/^\d+$/.test(a));i.length===2&&e.tabs[i[0]].fields.forEach(a=>{a.name===i[1]&&r.errors[n].forEach(s=>{const o={identifier:"invalid",invalid:!0,message:s,name:a.name};a.errors.push(o)})}),n===e.main.name&&r.errors[n].forEach(a=>{e.main.errors.push({identifier:"invalid",invalid:!0,message:a,name:e.main.name})})}}triggerFieldsErrors(e,r){if(r&&r.errors)for(let n in r.errors)e.forEach(i=>{i.name===n&&r.errors[n].forEach(a=>{const s={identifier:"invalid",invalid:!0,message:a,name:i.name};i.errors.push(s)})})}trackError(e,r,n){e.errors.push({identifier:r.identifier,invalid:!0,name:e.name,rule:r,fields:n})}unTrackError(e,r){e.errors.forEach((n,i)=>{n.identifier===r.identifier&&n.invalid===!0&&e.errors.splice(i,1)})}fieldPassCheck(e,r,n){if(r!==void 0){const a={required:(s,o)=>s.value===void 0||s.value===null||s.value.length===0,email:(s,o)=>s.value.length>0&&!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(s.value),same:(s,o)=>{const u=n.filter(l=>l.name===o.value);return u.length===1&&["string","number"].includes(typeof s.value)&&s.value.length>0&&u[0].value!==s.value},different:(s,o)=>{const u=n.filter(l=>l.name===o.value);return u.length===1&&["string","number"].includes(typeof s.value)&&s.value.length>0&&u[0].value===s.value},min:(s,o)=>s.value&&s.value.lengths.value&&s.value.length>parseInt(o.value)}[r.identifier];return typeof a=="function"?a(e,r)===!1?this.unTrackError(e,r):this.trackError(e,r,n):e}}}class rDe{constructor(){je(this,"url");this.url=ns.base_url}get(e){return this.url+e}}/** + `,"text/html").firstElementChild;n.actions[u].onClick?c.querySelector(".ns-button").addEventListener("click",()=>{n.actions[u].onClick(new Yy(o))}):c.querySelector(".ns-button").addEventListener("click",()=>new Yy(o).close()),l.appendChild(c.querySelector(".ns-button"))}return s.appendChild(o),{floatingNotice:o}}}class jte{constructor(){je(this,"_subject");je(this,"_client");je(this,"_lastRequestData");this._subject=new an}defineClient(e){this._client=e}post(e,r,n={}){return this._request("post",e,r,n)}get(e,r={}){return this._request("get",e,void 0,r)}delete(e,r={}){return this._request("delete",e,void 0,r)}put(e,r,n={}){return this._request("put",e,r,n)}get response(){return this._lastRequestData}_request(e,r,n={},i={}){return r=nsHooks.applyFilters("http-client-url",r.replace(/\/$/,"")),this._subject.next({identifier:"async.start",url:r,data:n}),new Kt(a=>{this._client[e](r,n,{...this._client.defaults[e],...i}).then(s=>{this._lastRequestData=s,a.next(s.data),a.complete(),this._subject.next({identifier:"async.stop"})}).catch(s=>{var o;a.error(((o=s.response)==null?void 0:o.data)||s.response||s),this._subject.next({identifier:"async.stop"})})})}subject(){return this._subject}emit({identifier:e,value:r}){this._subject.next({identifier:e,value:r})}}class aP{constructor(){je(this,"queue");window.snackbarQueue===void 0&&(window.snackbarQueue=[],this.queue=window.snackbarQueue)}show(e,r,n={duration:3e3,type:"info"}){return new Kt(i=>{const{buttonNode:a,textNode:s,snackWrapper:o,sampleSnack:u}=this.__createSnack({message:e,label:r,type:n.type});a.addEventListener("click",l=>{i.next(a),i.complete(),u.remove()}),this.__startTimer(n.duration,u)})}error(e,r=null,n={duration:3e3,type:"error"}){return this.show(e,r,{...n,type:"error"})}success(e,r=null,n={duration:3e3,type:"success"}){return this.show(e,r,{...n,type:"success"})}info(e,r=null,n={duration:3e3,type:"info"}){return this.show(e,r,{...n,type:"info"})}__startTimer(e,r){let n;const i=()=>{e>0&&e!==!1&&(n=setTimeout(()=>{r.remove()},e))};r.addEventListener("mouseenter",()=>{clearTimeout(n)}),r.addEventListener("mouseleave",()=>{i()}),i()}__createSnack({message:e,label:r,type:n="info"}){const i=document.getElementById("snack-wrapper")||document.createElement("div"),a=document.createElement("div"),s=document.createElement("p"),o=document.createElement("div"),u=document.createElement("button");let l="",c="";switch(n){case"info":l="",c="info";break;case"error":l="",c="error";break;case"success":l="",c="success";break}return s.textContent=e,s.setAttribute("class","pr-2"),r&&(o.setAttribute("class","ns-button default"),u.textContent=r,u.setAttribute("class",`px-3 py-2 shadow rounded uppercase ${l}`),o.appendChild(u)),a.appendChild(s),a.appendChild(o),a.setAttribute("class",`md:rounded py-2 px-3 md:w-2/5 w-full z-10 md:my-2 shadow-lg flex justify-between items-center zoom-in-entrance anim-duration-300 ns-notice ${c}`),i.appendChild(a),document.getElementById("snack-wrapper")===null&&(i.setAttribute("id","snack-wrapper"),i.setAttribute("class","absolute bottom-0 w-full flex justify-between items-center flex-col"),document.body.appendChild(i)),{snackWrapper:i,sampleSnack:a,buttonsWrapper:o,buttonNode:u,textNode:s}}}class Gte{constructor(e){je(this,"behaviorState");je(this,"stateStore",{});this.behaviorState=new J1({}),this.behaviorState.subscribe(r=>{this.stateStore=r}),this.setState(e)}setState(e){this.behaviorState.next({...this.stateStore,...e})}get state(){return this.behaviorState}subscribe(e){this.behaviorState.subscribe(e)}}class Xte{validateFields(e){return e.map(r=>(this.checkField(r,e,{touchField:!1}),r.errors?r.errors.length===0:0)).filter(r=>r===!1).length===0}validateFieldsErrors(e){return e.map(r=>(this.checkField(r,e,{touchField:!1}),r.errors)).flat()}validateForm(e){e.main&&this.validateField(e.main);const r=[];for(let n in e.tabs)if(e.tabs[n].fields){const i=[],a=this.validateFieldsErrors(e.tabs[n].fields);a.length>0&&i.push(a),e.tabs[n].errors=i.flat(),r.push(i.flat())}return r.flat().filter(n=>n!==void 0)}initializeTabs(e){let r=0;for(let n in e)r===0&&(e[n].active=!0),e[n].active=e[n].active===void 0?!1:e[n].active,e[n].fields=this.createFields(e[n].fields),r++;return e}validateField(e){return this.checkField(e,[],{touchField:!1})}fieldsValid(e){return!(e.map(r=>r.errors&&r.errors.length>0).filter(r=>r).length>0)}createFields(e){return e.map(r=>{if(r.type=r.type||"text",r.errors=r.errors||[],r.disabled=r.disabled||!1,r.touched=!1,r.type==="custom"&&typeof r.component=="string"){const n=r.component;if(r.component=Vv(nsExtraComponents[r.component]),r.component)r.component.value.$field=r,r.component.value.$fields=e;else throw`Failed to load a custom component. "${n}" is not provided as an extra component. More details here: "https://my.nexopos.com/en/documentation/developpers-guides/how-to-register-a-custom-vue-component"`}return r})}isFormUntouched(e){let r=!0;if(e.main&&(r=e.main.touched?!1:r),e.tabs)for(let n in e.tabs)r=e.tabs[n].fields.filter(i=>i.touched).length>0?!1:r;return r}createForm(e){if(e.main&&(e.main=this.createFields([e.main])[0]),e.tabs)for(let r in e.tabs)e.tabs[r].errors=[],e.tabs[r].fields!==void 0?e.tabs[r].fields=this.createFields(e.tabs[r].fields):console.info(`Warning: The tab "${e.tabs[r].label}" is missing fields. Fallback on checking dynamic component instead.`);return e}enableFields(e){return e.map(r=>r.disabled=!1)}disableFields(e){return e.map(r=>r.disabled=!0)}disableForm(e){e.main&&(e.main.disabled=!0);for(let r in e.tabs)e.tabs[r].fields.forEach(n=>n.disabled=!0)}enableForm(e){e.main&&(e.main.disabled=!1);for(let r in e.tabs)e.tabs[r].fields.forEach(n=>n.disabled=!1)}getValue(e){const r={};return e.forEach(n=>{r[n.name]=n.value}),r}checkField(e,r=[],n={touchField:!0}){if(e.validation!==void 0){e.errors=[];const i=this.detectValidationRules(e.validation).filter(s=>s!=null);i.map(s=>s.identifier).includes("sometimes")?e.value!==void 0&&e.value.length>0&&i.forEach(s=>{this.fieldPassCheck(e,s,r)}):i.forEach(s=>{this.fieldPassCheck(e,s,r)})}return n.touchField&&(e.touched=!0),e}extractForm(e){let r={};if(e.main&&(r[e.main.name]=e.main.value),e.tabs)for(let n in e.tabs)r[n]===void 0&&(r[n]={}),r[n]=this.extractFields(e.tabs[n].fields);return r}extractFields(e,r={}){return e.forEach(n=>{r[n.name]=n.value}),r}detectValidationRules(e){const r=n=>{const i=/(min)\:([0-9])+/g,a=/(sometimes)/g,s=/(max)\:([0-9])+/g,o=/(same):(\w+)/g,u=/(different):(\w+)/g;let l;if(["email","required"].includes(n))return{identifier:n};if(n.length>0&&(l=i.exec(n)||s.exec(n)||o.exec(n)||u.exec(n)||a.exec(n),l!==null))return{identifier:l[1],value:l[2]}};return Array.isArray(e)?e.filter(n=>typeof n=="string").map(r):e.split("|").map(r)}triggerError(e,r){if(r.errors)for(let n in r.errors){let i=n.split(".").filter(a=>!/^\d+$/.test(a));i.length===2&&e.tabs[i[0]].fields.forEach(a=>{a.name===i[1]&&r.errors[n].forEach(s=>{const o={identifier:"invalid",invalid:!0,message:s,name:a.name};a.errors.push(o)})}),n===e.main.name&&r.errors[n].forEach(a=>{e.main.errors.push({identifier:"invalid",invalid:!0,message:a,name:e.main.name})})}}triggerFieldsErrors(e,r){if(r&&r.errors)for(let n in r.errors)e.forEach(i=>{i.name===n&&r.errors[n].forEach(a=>{const s={identifier:"invalid",invalid:!0,message:a,name:i.name};i.errors.push(s)})})}trackError(e,r,n){e.errors.push({identifier:r.identifier,invalid:!0,name:e.name,rule:r,fields:n})}unTrackError(e,r){e.errors.forEach((n,i)=>{n.identifier===r.identifier&&n.invalid===!0&&e.errors.splice(i,1)})}fieldPassCheck(e,r,n){if(r!==void 0){const a={required:(s,o)=>s.value===void 0||s.value===null||s.value.length===0,email:(s,o)=>s.value.length>0&&!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(s.value),same:(s,o)=>{const u=n.filter(l=>l.name===o.value);return u.length===1&&["string","number"].includes(typeof s.value)&&s.value.length>0&&u[0].value!==s.value},different:(s,o)=>{const u=n.filter(l=>l.name===o.value);return u.length===1&&["string","number"].includes(typeof s.value)&&s.value.length>0&&u[0].value===s.value},min:(s,o)=>s.value&&s.value.lengths.value&&s.value.length>parseInt(o.value)}[r.identifier];return typeof a=="function"?a(e,r)===!1?this.unTrackError(e,r):this.trackError(e,r,n):e}}}class Zte{constructor(){je(this,"url");this.url=ns.base_url}get(e){return this.url+e}}/** * @license countdown.js v2.6.1 http://countdownjs.org * Copyright (c)2006-2014 Stephen M. McKamey. * Licensed under The MIT License. - */var ya=function(){var t=1,e=2,r=4,n=8,i=16,a=32,s=64,o=128,u=256,l=512,c=1024,f=o|s|i|n|r|e,h=1e3,p=60,g=60,m=24,b=m*g*p*h,y=7,S=12,x=10,_=10,A=10,w=Math.ceil,C=Math.floor;function E(P,U){var Y=P.getTime();return P.setMonth(P.getMonth()+U),Math.round((P.getTime()-Y)/b)}function N(P){var U=P.getTime(),Y=new Date(U);return Y.setMonth(P.getMonth()+1),Math.round((Y.getTime()-U)/b)}function M(P){var U=P.getTime(),Y=new Date(U);return Y.setFullYear(P.getFullYear()+1),Math.round((Y.getTime()-U)/b)}function O(P,U){if(U=U instanceof Date||U!==null&&isFinite(U)?new Date(+U):new Date,!P)return U;var Y=+P.value||0;return Y?(U.setTime(U.getTime()+Y),U):(Y=+P.milliseconds||0,Y&&U.setMilliseconds(U.getMilliseconds()+Y),Y=+P.seconds||0,Y&&U.setSeconds(U.getSeconds()+Y),Y=+P.minutes||0,Y&&U.setMinutes(U.getMinutes()+Y),Y=+P.hours||0,Y&&U.setHours(U.getHours()+Y),Y=+P.weeks||0,Y&&(Y*=y),Y+=+P.days||0,Y&&U.setDate(U.getDate()+Y),Y=+P.months||0,Y&&U.setMonth(U.getMonth()+Y),Y=+P.millennia||0,Y&&(Y*=A),Y+=+P.centuries||0,Y&&(Y*=_),Y+=+P.decades||0,Y&&(Y*=x),Y+=+P.years||0,Y&&U.setFullYear(U.getFullYear()+Y),U)}var F=0,q=1,V=2,H=3,B=4,I=5,K=6,$=7,se=8,he=9,ne=10,X,de,Se,ce,xe,_e,me;function we(P,U){return me(P)+(P===1?X[U]:de[U])}var Ne;function Ce(){}Ce.prototype.toString=function(P){var U=Ne(this),Y=U.length;if(!Y)return P?""+P:xe;if(Y===1)return U[0];var pe=Se+U.pop();return U.join(ce)+pe},Ce.prototype.toHTML=function(P,U){P=P||"span";var Y=Ne(this),pe=Y.length;if(!pe)return U=U||xe,U&&"<"+P+">"+U+"";for(var ge=0;ge"+Y[ge]+"";if(pe===1)return Y[0];var De=Se+Y.pop();return Y.join(ce)+De},Ce.prototype.addTo=function(P){return O(this,P)},Ne=function(P){var U=[],Y=P.millennia;return Y&&U.push(_e(Y,ne)),Y=P.centuries,Y&&U.push(_e(Y,he)),Y=P.decades,Y&&U.push(_e(Y,se)),Y=P.years,Y&&U.push(_e(Y,$)),Y=P.months,Y&&U.push(_e(Y,K)),Y=P.weeks,Y&&U.push(_e(Y,I)),Y=P.days,Y&&U.push(_e(Y,B)),Y=P.hours,Y&&U.push(_e(Y,H)),Y=P.minutes,Y&&U.push(_e(Y,V)),Y=P.seconds,Y&&U.push(_e(Y,q)),Y=P.milliseconds,Y&&U.push(_e(Y,F)),U};function He(P,U){switch(U){case"seconds":if(P.seconds!==p||isNaN(P.minutes))return;P.minutes++,P.seconds=0;case"minutes":if(P.minutes!==g||isNaN(P.hours))return;P.hours++,P.minutes=0;case"hours":if(P.hours!==m||isNaN(P.days))return;P.days++,P.hours=0;case"days":if(P.days!==y||isNaN(P.weeks))return;P.weeks++,P.days=0;case"weeks":if(P.weeks!==N(P.refMonth)/y||isNaN(P.months))return;P.months++,P.weeks=0;case"months":if(P.months!==S||isNaN(P.years))return;P.years++,P.months=0;case"years":if(P.years!==x||isNaN(P.decades))return;P.decades++,P.years=0;case"decades":if(P.decades!==_||isNaN(P.centuries))return;P.centuries++,P.decades=0;case"centuries":if(P.centuries!==A||isNaN(P.millennia))return;P.millennia++,P.centuries=0}}function Ue(P,U,Y,pe,ge,De){return P[Y]>=0&&(U+=P[Y],delete P[Y]),U/=ge,U+1<=1?0:P[pe]>=0?(P[pe]=+(P[pe]+U).toFixed(De),He(P,pe),0):U}function J(P,U){var Y=Ue(P,0,"milliseconds","seconds",h,U);if(Y&&(Y=Ue(P,Y,"seconds","minutes",p,U),!!Y&&(Y=Ue(P,Y,"minutes","hours",g,U),!!Y&&(Y=Ue(P,Y,"hours","days",m,U),!!Y&&(Y=Ue(P,Y,"days","weeks",y,U),!!Y&&(Y=Ue(P,Y,"weeks","months",N(P.refMonth)/y,U),!!Y&&(Y=Ue(P,Y,"months","years",M(P.refMonth)/N(P.refMonth),U),!!Y&&(Y=Ue(P,Y,"years","decades",x,U),!!Y&&(Y=Ue(P,Y,"decades","centuries",_,U),!!Y&&(Y=Ue(P,Y,"centuries","millennia",A,U),Y))))))))))throw new Error("Fractional unit overflow")}function te(P){var U;for(P.milliseconds<0?(U=w(-P.milliseconds/h),P.seconds-=U,P.milliseconds+=U*h):P.milliseconds>=h&&(P.seconds+=C(P.milliseconds/h),P.milliseconds%=h),P.seconds<0?(U=w(-P.seconds/p),P.minutes-=U,P.seconds+=U*p):P.seconds>=p&&(P.minutes+=C(P.seconds/p),P.seconds%=p),P.minutes<0?(U=w(-P.minutes/g),P.hours-=U,P.minutes+=U*g):P.minutes>=g&&(P.hours+=C(P.minutes/g),P.minutes%=g),P.hours<0?(U=w(-P.hours/m),P.days-=U,P.hours+=U*m):P.hours>=m&&(P.days+=C(P.hours/m),P.hours%=m);P.days<0;)P.months--,P.days+=E(P.refMonth,1);P.days>=y&&(P.weeks+=C(P.days/y),P.days%=y),P.months<0?(U=w(-P.months/S),P.years-=U,P.months+=U*S):P.months>=S&&(P.years+=C(P.months/S),P.months%=S),P.years>=x&&(P.decades+=C(P.years/x),P.years%=x,P.decades>=_&&(P.centuries+=C(P.decades/_),P.decades%=_,P.centuries>=A&&(P.millennia+=C(P.centuries/A),P.centuries%=A)))}function ye(P,U,Y,pe){var ge=0;!(U&c)||ge>=Y?(P.centuries+=P.millennia*A,delete P.millennia):P.millennia&&ge++,!(U&l)||ge>=Y?(P.decades+=P.centuries*_,delete P.centuries):P.centuries&&ge++,!(U&u)||ge>=Y?(P.years+=P.decades*x,delete P.decades):P.decades&&ge++,!(U&o)||ge>=Y?(P.months+=P.years*S,delete P.years):P.years&&ge++,!(U&s)||ge>=Y?(P.months&&(P.days+=E(P.refMonth,P.months)),delete P.months,P.days>=y&&(P.weeks+=C(P.days/y),P.days%=y)):P.months&&ge++,!(U&a)||ge>=Y?(P.days+=P.weeks*y,delete P.weeks):P.weeks&&ge++,!(U&i)||ge>=Y?(P.hours+=P.days*m,delete P.days):P.days&&ge++,!(U&n)||ge>=Y?(P.minutes+=P.hours*g,delete P.hours):P.hours&&ge++,!(U&r)||ge>=Y?(P.seconds+=P.minutes*p,delete P.minutes):P.minutes&&ge++,!(U&e)||ge>=Y?(P.milliseconds+=P.seconds*h,delete P.seconds):P.seconds&&ge++,(!(U&t)||ge>=Y)&&J(P,pe)}function ee(P,U,Y,pe,ge,De){var Re=new Date;if(P.start=U=U||Re,P.end=Y=Y||Re,P.units=pe,P.value=Y.getTime()-U.getTime(),P.value<0){var Ie=Y;Y=U,U=Ie}P.refMonth=new Date(U.getFullYear(),U.getMonth(),15,12,0,0);try{P.millennia=0,P.centuries=0,P.decades=0,P.years=Y.getFullYear()-U.getFullYear(),P.months=Y.getMonth()-U.getMonth(),P.weeks=0,P.days=Y.getDate()-U.getDate(),P.hours=Y.getHours()-U.getHours(),P.minutes=Y.getMinutes()-U.getMinutes(),P.seconds=Y.getSeconds()-U.getSeconds(),P.milliseconds=Y.getMilliseconds()-U.getMilliseconds(),te(P),ye(P,pe,ge,De)}finally{delete P.refMonth}return P}function ue(P){return P&t?h/30:P&e?h:P&r?h*p:P&n?h*p*g:P&i?h*p*g*m:h*p*g*m*y}function le(P,U,Y,pe,ge){var De;Y=+Y||f,pe=pe>0?pe:NaN,ge=ge>0?ge<20?Math.round(ge):20:0;var Re=null;typeof P=="function"?(De=P,P=null):P instanceof Date||(P!==null&&isFinite(P)?P=new Date(+P):(typeof Re=="object"&&(Re=P),P=null));var Ie=null;if(typeof U=="function"?(De=U,U=null):U instanceof Date||(U!==null&&isFinite(U)?U=new Date(+U):(typeof U=="object"&&(Ie=U),U=null)),Re&&(P=O(Re,U)),Ie&&(U=O(Ie,P)),!P&&!U)return new Ce;if(!De)return ee(new Ce,P,U,Y,pe,ge);var Ve=ue(Y),ze,vt=function(){De(ee(new Ce,P,U,Y,pe,ge),ze)};return vt(),ze=setInterval(vt,Ve)}le.MILLISECONDS=t,le.SECONDS=e,le.MINUTES=r,le.HOURS=n,le.DAYS=i,le.WEEKS=a,le.MONTHS=s,le.YEARS=o,le.DECADES=u,le.CENTURIES=l,le.MILLENNIA=c,le.DEFAULTS=f,le.ALL=c|l|u|o|s|a|i|n|r|e|t;var Ee=le.setFormat=function(P){if(P){if("singular"in P||"plural"in P){var U=P.singular||[];U.split&&(U=U.split("|"));var Y=P.plural||[];Y.split&&(Y=Y.split("|"));for(var pe=F;pe<=ne;pe++)X[pe]=U[pe]||X[pe],de[pe]=Y[pe]||de[pe]}typeof P.last=="string"&&(Se=P.last),typeof P.delim=="string"&&(ce=P.delim),typeof P.empty=="string"&&(xe=P.empty),typeof P.formatNumber=="function"&&(me=P.formatNumber),typeof P.formatter=="function"&&(_e=P.formatter)}},Me=le.resetFormat=function(){X=" millisecond| second| minute| hour| day| week| month| year| decade| century| millennium".split("|"),de=" milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia".split("|"),Se=" and ",ce=", ",xe="",me=function(P){return P},_e=we};return le.setLabels=function(P,U,Y,pe,ge,De,Re){Ee({singular:P,plural:U,last:Y,delim:pe,empty:ge,formatNumber:De,formatter:Re})},le.resetLabels=Me,Me(),typeof module<"u"&&module.exports?module.exports=le:typeof window<"u"&&typeof window.define=="function"&&typeof window.define.amd<"u"&&window.define("countdown",[],function(){return le}),le}();class nDe{constructor(){je(this,"instances");this.instances=new Object}getInstance(e){return this.instances[e]}defineInstance(e,r){this.instances[e]=r}}function JP(t){return typeof t!="string"||t===""?(console.error("The namespace must be a non-empty string."),!1):/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(t)?!0:(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)}function tw(t){return typeof t!="string"||t===""?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(t)?(console.error("The hook name cannot begin with `__`."),!1):/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(t)?!0:(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)}function m2(t,e){return function(n,i,a,s=10){const o=t[e];if(!tw(n)||!JP(i))return;if(typeof a!="function"){console.error("The hook callback must be a function.");return}if(typeof s!="number"){console.error("If specified, the hook priority must be a number.");return}const u={callback:a,priority:s,namespace:i};if(o[n]){const l=o[n].handlers;let c;for(c=l.length;c>0&&!(s>=l[c-1].priority);c--);c===l.length?l[c]=u:l.splice(c,0,u),o.__current.forEach(f=>{f.name===n&&f.currentIndex>=c&&f.currentIndex++})}else o[n]={handlers:[u],runs:0};n!=="hookAdded"&&t.doAction("hookAdded",n,i,a,s)}}function tm(t,e,r=!1){return function(i,a){const s=t[e];if(!tw(i)||!r&&!JP(a))return;if(!s[i])return 0;let o=0;if(r)o=s[i].handlers.length,s[i]={runs:s[i].runs,handlers:[]};else{const u=s[i].handlers;for(let l=u.length-1;l>=0;l--)u[l].namespace===a&&(u.splice(l,1),o++,s.__current.forEach(c=>{c.name===i&&c.currentIndex>=l&&c.currentIndex--}))}return i!=="hookRemoved"&&t.doAction("hookRemoved",i,a),o}}function v2(t,e){return function(n,i){const a=t[e];return typeof i<"u"?n in a&&a[n].handlers.some(s=>s.namespace===i):n in a}}function g2(t,e,r=!1){return function(i,...a){const s=t[e];s[i]||(s[i]={handlers:[],runs:0}),s[i].runs++;const o=s[i].handlers;if(!o||!o.length)return r?a[0]:void 0;const u={name:i,currentIndex:0};for(s.__current.push(u);u.currentIndex"u"?typeof i.__current[0]<"u":i.__current[0]?n===i.__current[0].name:!1}}function x2(t,e){return function(n){const i=t[e];if(tw(n))return i[n]&&i[n].runs?i[n].runs:0}}class Fte{constructor(){this.actions=Object.create(null),this.actions.__current=[],this.filters=Object.create(null),this.filters.__current=[],this.addAction=m2(this,"actions"),this.addFilter=m2(this,"filters"),this.removeAction=tm(this,"actions"),this.removeFilter=tm(this,"filters"),this.hasAction=v2(this,"actions"),this.hasFilter=v2(this,"filters"),this.removeAllActions=tm(this,"actions",!0),this.removeAllFilters=tm(this,"filters",!0),this.doAction=g2(this,"actions"),this.applyFilters=g2(this,"filters",!0),this.currentAction=y2(this,"actions"),this.currentFilter=y2(this,"filters"),this.doingAction=b2(this,"actions"),this.doingFilter=b2(this,"filters"),this.didAction=x2(this,"actions"),this.didFilter=x2(this,"filters")}}function Pte(){return new Fte}Pte();function iDe(t,e,r,n){const i={};return Object.keys(t).forEach(a=>{a===e&&(i[r]=n),i[a]=t[a]}),i}function aDe(t,e,r,n){const i={};return Object.keys(t).forEach(a=>{i[a]=t[a],a===e&&(i[r]=n)}),i[r]||(i[r]=n),i}function sDe(t){this.popup.params.resolve!==void 0&&this.popup.params.reject&&(t!==!1?this.popup.params.resolve(t):this.popup.params.reject(t)),this.popup.close()}function oDe(){this.popup!==void 0&&nsHotPress.create("popup-esc").whenPressed("escape",t=>{t.preventDefault();const e=parseInt(this.$el.parentElement.getAttribute("data-index"));document.querySelector(`.is-popup [data-index="${e+1}]`)===null&&(this.popup.params&&this.popup.params.reject!==void 0&&this.popup.params.reject(!1),this.popup.close(),nsHotPress.destroy("popup-esc"))})}ya.setFormat({singular:` ${nh("millisecond| second| minute| hour| day| week| month| year| decade| century| millennium")}`,plural:` ${nh("milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia")}`,last:` ${nh("and")} `,delim:", ",empty:""});const uDe=function(t){const e=Qe(ns.date.current,"YYYY-MM-DD HH:mm:ss"),r=Qe(t),n=e.isBefore(r)?"after":"before",i=Math.abs(e.diff(r,"months"))>0,a=Math.abs(e.diff(r,"days"))>0,s=Math.abs(e.diff(r,"hours"))>0,o=Math.abs(e.diff(r,"minutes"))>0,u=Math.abs(e.diff(r,"seconds"))>0;let l;i?l=ya.MONTHS:a?l=ya.DAYS:s?l=ya.HOURS:o?l=ya.MINUTES:u?l=ya.SECONDS:l=ya.MONTHS|ya.DAYS|ya.HOURS|ya.MINUTES;const c=ya(e.toDate(),r.toDate(),l,void 0,void 0);return(n==="before"?nh("{date} ago"):nh("In {date}")).replace("{date}",c.toString())},lDe=t=>{var e=t;if(t>=1e3){for(var r=["","k","m","b","t"],n=Math.floor((""+t).length/3),i,a=2;a>=1;a--){i=parseFloat((n!=0?t/Math.pow(1e3,n):t).toPrecision(a));var s=(i+"").replace(/[^a-zA-Z 0-9]+/g,"");if(s.length<=2)break}i%1!=0&&(i=i.toFixed(1)),e=i+r[n]}return e},cDe=(t,e)=>t?(t=t.toString(),t.length>e?t.substring(0,e)+"...":t):"";function dn(){return dn=Object.assign?Object.assign.bind():function(t){for(var e=1;e"+U+"";for(var ge=0;ge"+Y[ge]+"";if(pe===1)return Y[0];var De=Se+Y.pop();return Y.join(ce)+De},Ce.prototype.addTo=function(R){return O(this,R)},Ee=function(R){var U=[],Y=R.millennia;return Y&&U.push(_e(Y,ne)),Y=R.centuries,Y&&U.push(_e(Y,he)),Y=R.decades,Y&&U.push(_e(Y,se)),Y=R.years,Y&&U.push(_e(Y,$)),Y=R.months,Y&&U.push(_e(Y,K)),Y=R.weeks,Y&&U.push(_e(Y,k)),Y=R.days,Y&&U.push(_e(Y,B)),Y=R.hours,Y&&U.push(_e(Y,H)),Y=R.minutes,Y&&U.push(_e(Y,V)),Y=R.seconds,Y&&U.push(_e(Y,q)),Y=R.milliseconds,Y&&U.push(_e(Y,F)),U};function He(R,U){switch(U){case"seconds":if(R.seconds!==p||isNaN(R.minutes))return;R.minutes++,R.seconds=0;case"minutes":if(R.minutes!==g||isNaN(R.hours))return;R.hours++,R.minutes=0;case"hours":if(R.hours!==m||isNaN(R.days))return;R.days++,R.hours=0;case"days":if(R.days!==y||isNaN(R.weeks))return;R.weeks++,R.days=0;case"weeks":if(R.weeks!==E(R.refMonth)/y||isNaN(R.months))return;R.months++,R.weeks=0;case"months":if(R.months!==S||isNaN(R.years))return;R.years++,R.months=0;case"years":if(R.years!==x||isNaN(R.decades))return;R.decades++,R.years=0;case"decades":if(R.decades!==_||isNaN(R.centuries))return;R.centuries++,R.decades=0;case"centuries":if(R.centuries!==A||isNaN(R.millennia))return;R.millennia++,R.centuries=0}}function Ue(R,U,Y,pe,ge,De){return R[Y]>=0&&(U+=R[Y],delete R[Y]),U/=ge,U+1<=1?0:R[pe]>=0?(R[pe]=+(R[pe]+U).toFixed(De),He(R,pe),0):U}function J(R,U){var Y=Ue(R,0,"milliseconds","seconds",h,U);if(Y&&(Y=Ue(R,Y,"seconds","minutes",p,U),!!Y&&(Y=Ue(R,Y,"minutes","hours",g,U),!!Y&&(Y=Ue(R,Y,"hours","days",m,U),!!Y&&(Y=Ue(R,Y,"days","weeks",y,U),!!Y&&(Y=Ue(R,Y,"weeks","months",E(R.refMonth)/y,U),!!Y&&(Y=Ue(R,Y,"months","years",M(R.refMonth)/E(R.refMonth),U),!!Y&&(Y=Ue(R,Y,"years","decades",x,U),!!Y&&(Y=Ue(R,Y,"decades","centuries",_,U),!!Y&&(Y=Ue(R,Y,"centuries","millennia",A,U),Y))))))))))throw new Error("Fractional unit overflow")}function te(R){var U;for(R.milliseconds<0?(U=w(-R.milliseconds/h),R.seconds-=U,R.milliseconds+=U*h):R.milliseconds>=h&&(R.seconds+=C(R.milliseconds/h),R.milliseconds%=h),R.seconds<0?(U=w(-R.seconds/p),R.minutes-=U,R.seconds+=U*p):R.seconds>=p&&(R.minutes+=C(R.seconds/p),R.seconds%=p),R.minutes<0?(U=w(-R.minutes/g),R.hours-=U,R.minutes+=U*g):R.minutes>=g&&(R.hours+=C(R.minutes/g),R.minutes%=g),R.hours<0?(U=w(-R.hours/m),R.days-=U,R.hours+=U*m):R.hours>=m&&(R.days+=C(R.hours/m),R.hours%=m);R.days<0;)R.months--,R.days+=N(R.refMonth,1);R.days>=y&&(R.weeks+=C(R.days/y),R.days%=y),R.months<0?(U=w(-R.months/S),R.years-=U,R.months+=U*S):R.months>=S&&(R.years+=C(R.months/S),R.months%=S),R.years>=x&&(R.decades+=C(R.years/x),R.years%=x,R.decades>=_&&(R.centuries+=C(R.decades/_),R.decades%=_,R.centuries>=A&&(R.millennia+=C(R.centuries/A),R.centuries%=A)))}function ye(R,U,Y,pe){var ge=0;!(U&c)||ge>=Y?(R.centuries+=R.millennia*A,delete R.millennia):R.millennia&&ge++,!(U&l)||ge>=Y?(R.decades+=R.centuries*_,delete R.centuries):R.centuries&&ge++,!(U&u)||ge>=Y?(R.years+=R.decades*x,delete R.decades):R.decades&&ge++,!(U&o)||ge>=Y?(R.months+=R.years*S,delete R.years):R.years&&ge++,!(U&s)||ge>=Y?(R.months&&(R.days+=N(R.refMonth,R.months)),delete R.months,R.days>=y&&(R.weeks+=C(R.days/y),R.days%=y)):R.months&&ge++,!(U&a)||ge>=Y?(R.days+=R.weeks*y,delete R.weeks):R.weeks&&ge++,!(U&i)||ge>=Y?(R.hours+=R.days*m,delete R.days):R.days&&ge++,!(U&n)||ge>=Y?(R.minutes+=R.hours*g,delete R.hours):R.hours&&ge++,!(U&r)||ge>=Y?(R.seconds+=R.minutes*p,delete R.minutes):R.minutes&&ge++,!(U&e)||ge>=Y?(R.milliseconds+=R.seconds*h,delete R.seconds):R.seconds&&ge++,(!(U&t)||ge>=Y)&&J(R,pe)}function ee(R,U,Y,pe,ge,De){var Pe=new Date;if(R.start=U=U||Pe,R.end=Y=Y||Pe,R.units=pe,R.value=Y.getTime()-U.getTime(),R.value<0){var ke=Y;Y=U,U=ke}R.refMonth=new Date(U.getFullYear(),U.getMonth(),15,12,0,0);try{R.millennia=0,R.centuries=0,R.decades=0,R.years=Y.getFullYear()-U.getFullYear(),R.months=Y.getMonth()-U.getMonth(),R.weeks=0,R.days=Y.getDate()-U.getDate(),R.hours=Y.getHours()-U.getHours(),R.minutes=Y.getMinutes()-U.getMinutes(),R.seconds=Y.getSeconds()-U.getSeconds(),R.milliseconds=Y.getMilliseconds()-U.getMilliseconds(),te(R),ye(R,pe,ge,De)}finally{delete R.refMonth}return R}function ue(R){return R&t?h/30:R&e?h:R&r?h*p:R&n?h*p*g:R&i?h*p*g*m:h*p*g*m*y}function le(R,U,Y,pe,ge){var De;Y=+Y||f,pe=pe>0?pe:NaN,ge=ge>0?ge<20?Math.round(ge):20:0;var Pe=null;typeof R=="function"?(De=R,R=null):R instanceof Date||(R!==null&&isFinite(R)?R=new Date(+R):(typeof Pe=="object"&&(Pe=R),R=null));var ke=null;if(typeof U=="function"?(De=U,U=null):U instanceof Date||(U!==null&&isFinite(U)?U=new Date(+U):(typeof U=="object"&&(ke=U),U=null)),Pe&&(R=O(Pe,U)),ke&&(U=O(ke,R)),!R&&!U)return new Ce;if(!De)return ee(new Ce,R,U,Y,pe,ge);var Ve=ue(Y),ze,vt=function(){De(ee(new Ce,R,U,Y,pe,ge),ze)};return vt(),ze=setInterval(vt,Ve)}le.MILLISECONDS=t,le.SECONDS=e,le.MINUTES=r,le.HOURS=n,le.DAYS=i,le.WEEKS=a,le.MONTHS=s,le.YEARS=o,le.DECADES=u,le.CENTURIES=l,le.MILLENNIA=c,le.DEFAULTS=f,le.ALL=c|l|u|o|s|a|i|n|r|e|t;var Ne=le.setFormat=function(R){if(R){if("singular"in R||"plural"in R){var U=R.singular||[];U.split&&(U=U.split("|"));var Y=R.plural||[];Y.split&&(Y=Y.split("|"));for(var pe=F;pe<=ne;pe++)X[pe]=U[pe]||X[pe],de[pe]=Y[pe]||de[pe]}typeof R.last=="string"&&(Se=R.last),typeof R.delim=="string"&&(ce=R.delim),typeof R.empty=="string"&&(xe=R.empty),typeof R.formatNumber=="function"&&(me=R.formatNumber),typeof R.formatter=="function"&&(_e=R.formatter)}},Me=le.resetFormat=function(){X=" millisecond| second| minute| hour| day| week| month| year| decade| century| millennium".split("|"),de=" milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia".split("|"),Se=" and ",ce=", ",xe="",me=function(R){return R},_e=we};return le.setLabels=function(R,U,Y,pe,ge,De,Pe){Ne({singular:R,plural:U,last:Y,delim:pe,empty:ge,formatNumber:De,formatter:Pe})},le.resetLabels=Me,Me(),typeof module<"u"&&module.exports?module.exports=le:typeof window<"u"&&typeof window.define=="function"&&typeof window.define.amd<"u"&&window.define("countdown",[],function(){return le}),le}();class Kte{constructor(){je(this,"instances");this.instances=new Object}getInstance(e){return this.instances[e]}defineInstance(e,r){this.instances[e]=r}}function sP(t){return typeof t!="string"||t===""?(console.error("The namespace must be a non-empty string."),!1):/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(t)?!0:(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)}function iw(t){return typeof t!="string"||t===""?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(t)?(console.error("The hook name cannot begin with `__`."),!1):/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(t)?!0:(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)}function y2(t,e){return function(n,i,a,s=10){const o=t[e];if(!iw(n)||!sP(i))return;if(typeof a!="function"){console.error("The hook callback must be a function.");return}if(typeof s!="number"){console.error("If specified, the hook priority must be a number.");return}const u={callback:a,priority:s,namespace:i};if(o[n]){const l=o[n].handlers;let c;for(c=l.length;c>0&&!(s>=l[c-1].priority);c--);c===l.length?l[c]=u:l.splice(c,0,u),o.__current.forEach(f=>{f.name===n&&f.currentIndex>=c&&f.currentIndex++})}else o[n]={handlers:[u],runs:0};n!=="hookAdded"&&t.doAction("hookAdded",n,i,a,s)}}function tm(t,e,r=!1){return function(i,a){const s=t[e];if(!iw(i)||!r&&!sP(a))return;if(!s[i])return 0;let o=0;if(r)o=s[i].handlers.length,s[i]={runs:s[i].runs,handlers:[]};else{const u=s[i].handlers;for(let l=u.length-1;l>=0;l--)u[l].namespace===a&&(u.splice(l,1),o++,s.__current.forEach(c=>{c.name===i&&c.currentIndex>=l&&c.currentIndex--}))}return i!=="hookRemoved"&&t.doAction("hookRemoved",i,a),o}}function b2(t,e){return function(n,i){const a=t[e];return typeof i<"u"?n in a&&a[n].handlers.some(s=>s.namespace===i):n in a}}function x2(t,e,r=!1){return function(i,...a){const s=t[e];s[i]||(s[i]={handlers:[],runs:0}),s[i].runs++;const o=s[i].handlers;if(!o||!o.length)return r?a[0]:void 0;const u={name:i,currentIndex:0};for(s.__current.push(u);u.currentIndex"u"?typeof i.__current[0]<"u":i.__current[0]?n===i.__current[0].name:!1}}function _2(t,e){return function(n){const i=t[e];if(iw(n))return i[n]&&i[n].runs?i[n].runs:0}}class Jte{constructor(){this.actions=Object.create(null),this.actions.__current=[],this.filters=Object.create(null),this.filters.__current=[],this.addAction=y2(this,"actions"),this.addFilter=y2(this,"filters"),this.removeAction=tm(this,"actions"),this.removeFilter=tm(this,"filters"),this.hasAction=b2(this,"actions"),this.hasFilter=b2(this,"filters"),this.removeAllActions=tm(this,"actions",!0),this.removeAllFilters=tm(this,"filters",!0),this.doAction=x2(this,"actions"),this.applyFilters=x2(this,"filters",!0),this.currentAction=w2(this,"actions"),this.currentFilter=w2(this,"filters"),this.doingAction=S2(this,"actions"),this.doingFilter=S2(this,"filters"),this.didAction=_2(this,"actions"),this.didFilter=_2(this,"filters")}}function oP(){return new Jte}oP();function Qte(t,e,r,n){const i={};return Object.keys(t).forEach(a=>{a===e&&(i[r]=n),i[a]=t[a]}),i}function ere(t,e,r,n){const i={};return Object.keys(t).forEach(a=>{i[a]=t[a],a===e&&(i[r]=n)}),i[r]||(i[r]=n),i}function tre(t){this.popup.params.resolve!==void 0&&this.popup.params.reject&&(t!==!1?this.popup.params.resolve(t):this.popup.params.reject(t)),this.popup.close()}function rre(){this.popup!==void 0&&nsHotPress.create(`popup-esc-${this.popup.hash}`).whenPressed("escape",t=>{t.preventDefault();const e=document.querySelector(`#${this.popup.hash}`);if(e&&e.getAttribute("focused")!=="true")return;const r=parseInt(this.$el.parentElement.getAttribute("data-index"));document.querySelector(`.is-popup [data-index="${r+1}]`)===null&&(this.popup.params&&this.popup.params.reject!==void 0&&this.popup.params.reject(!1),this.popup.close(),nsHotPress.destroy(`popup-esc-${this.popup.hash}`))})}Zi.setFormat({singular:` ${Gl("millisecond| second| minute| hour| day| week| month| year| decade| century| millennium")}`,plural:` ${Gl("milliseconds| seconds| minutes| hours| days| weeks| months| years| decades| centuries| millennia")}`,last:` ${Gl("and")} `,delim:", ",empty:""});const nre=function(t){const e=Qe(ns.date.current,"YYYY-MM-DD HH:mm:ss"),r=Qe(t),n=e.isBefore(r)?"after":"before",i=Math.abs(e.diff(r,"months"))>0,a=Math.abs(e.diff(r,"days"))>0,s=Math.abs(e.diff(r,"hours"))>0,o=Math.abs(e.diff(r,"minutes"))>0,u=Math.abs(e.diff(r,"seconds"))>0;let l;i?l=Zi.MONTHS:a?l=Zi.DAYS:s?l=Zi.HOURS:o?l=Zi.MINUTES:u?l=Zi.SECONDS:l=Zi.MONTHS|Zi.DAYS|Zi.HOURS|Zi.MINUTES;const c=Zi(e.toDate(),r.toDate(),l,void 0,void 0);return(n==="before"?Gl("{date} ago"):Gl("In {date}")).replace("{date}",c.toString())},ire=t=>{var e=t;if(t>=1e3){for(var r=["","k","m","b","t"],n=Math.floor((""+t).length/3),i,a=2;a>=1;a--){i=parseFloat((n!=0?t/Math.pow(1e3,n):t).toPrecision(a));var s=(i+"").replace(/[^a-zA-Z 0-9]+/g,"");if(s.length<=2)break}i%1!=0&&(i=i.toFixed(1)),e=i+r[n]}return e},are=(t,e)=>t?(t=t.toString(),t.length>e?t.substring(0,e)+"...":t):"";function dn(){return dn=Object.assign?Object.assign.bind():function(t){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:"any";const Y=U?o(U).index:i.length,pe=[];for(let De=0;De{const pe=n.get(Y);return!pe.isAny&&pe.test(P)});return U.length?U:["any"]}function h(P){return P&&typeof P=="function"&&"_typedFunctionData"in P}function p(P,U,Y){if(!h(P))throw new TypeError(S2);const pe=Y&&Y.exact,ge=Array.isArray(U)?U.join(","):U,De=_(ge),Re=b(De);if(!pe||Re in P.signatures){const vt=P._typedFunctionData.signatureMap.get(Re);if(vt)return vt}const Ie=De.length;let Ve;if(pe){Ve=[];let vt;for(vt in P.signatures)Ve.push(P._typedFunctionData.signatureMap.get(vt))}else Ve=P._typedFunctionData.signatures;for(let vt=0;vt!oe.has(Ae.name)))continue}at.push(mr)}}if(Ve=at,Ve.length===0)break}let ze;for(ze of Ve)if(ze.params.length<=Ie)return ze;throw new TypeError("Signature not found (signature: "+(P.name||"unnamed")+"("+b(De,", ")+"))")}function g(P,U,Y){return p(P,U,Y).implementation}function m(P,U){const Y=o(U);if(Y.test(P))return P;const pe=Y.conversionsTo;if(pe.length===0)throw new Error("There are no conversions to "+U+" defined.");for(let ge=0;ge1&&arguments[1]!==void 0?arguments[1]:",";return P.map(Y=>Y.name).join(U)}function y(P){const U=P.indexOf("...")===0,pe=(U?P.length>3?P.slice(3):"any":P).split("|").map(Ie=>o(Ie.trim()));let ge=!1,De=U?"...":"";return{types:pe.map(function(Ie){return ge=Ie.isAny||ge,De+=Ie.name+"|",{name:Ie.name,typeIndex:Ie.index,test:Ie.test,isAny:Ie.isAny,conversion:null,conversionIndex:-1}}),name:De.slice(0,-1),hasAny:ge,hasConversion:!1,restParam:U}}function S(P){const U=P.types.map(Re=>Re.name),Y=I(U);let pe=P.hasAny,ge=P.name;const De=Y.map(function(Re){const Ie=o(Re.from);return pe=Ie.isAny||pe,ge+="|"+Re.from,{name:Re.from,typeIndex:Ie.index,test:Ie.test,isAny:Ie.isAny,conversion:Re,conversionIndex:Re.index}});return{types:P.types.concat(De),name:ge,hasAny:pe,hasConversion:De.length>0,restParam:P.restParam}}function x(P){return P.typeSet||(P.typeSet=new Set,P.types.forEach(U=>P.typeSet.add(U.name))),P.typeSet}function _(P){const U=[];if(typeof P!="string")throw new TypeError("Signatures must be strings");const Y=P.trim();if(Y==="")return U;const pe=Y.split(",");for(let ge=0;ge=ge+1}}else return P.length===0?function(De){return De.length===0}:P.length===1?(Y=w(P[0]),function(De){return Y(De[0])&&De.length===1}):P.length===2?(Y=w(P[0]),pe=w(P[1]),function(De){return Y(De[0])&&pe(De[1])&&De.length===2}):(U=P.map(w),function(De){for(let Re=0;Re{const ge=N(pe.params,U);let De;for(De of ge)Y.add(De)}),Y.has("any")?["any"]:Array.from(Y)}function F(P,U,Y){let pe,ge;const De=P||"unnamed";let Re=Y,Ie;for(Ie=0;Ie{const mr=E(at.params,Ie),k=w(mr);(Ie0){const at=f(U[Ie]);return pe=new TypeError("Unexpected type of argument in function "+De+" (expected: "+ge.join(" or ")+", actual: "+at.join(" | ")+", index: "+Ie+")"),pe.data={category:"wrongType",fn:De,index:Ie,actual:at,expected:ge},pe}}else Re=St}const Ve=Re.map(function(St){return A(St.params)?1/0:St.params.length});if(U.lengthze)return pe=new TypeError("Too many arguments in function "+De+" (expected: "+ze+", actual: "+U.length+")"),pe.data={category:"tooManyArgs",fn:De,index:U.length,expectedLength:ze},pe;const vt=[];for(let St=0;St0)return 1;const pe=V(P)-V(U);return pe<0?-1:pe>0?1:0}function B(P,U){const Y=P.params,pe=U.params,ge=me(Y),De=me(pe),Re=A(Y),Ie=A(pe);if(Re&&ge.hasAny){if(!Ie||!De.hasAny)return 1}else if(Ie&&De.hasAny)return-1;let Ve=0,ze=0,vt;for(vt of Y)vt.hasAny&&++Ve,vt.hasConversion&&++ze;let St=0,at=0;for(vt of pe)vt.hasAny&&++St,vt.hasConversion&&++at;if(Ve!==St)return Ve-St;if(Re&&ge.hasConversion){if(!Ie||!De.hasConversion)return 1}else if(Ie&&De.hasConversion)return-1;if(ze!==at)return ze-at;if(Re){if(!Ie)return 1}else if(Ie)return-1;const mr=(Y.length-pe.length)*(Re?-1:1);if(mr!==0)return mr;const k=[];let oe=0;for(let $e=0;$e1&&U.sort((ge,De)=>ge.index-De.index);let Y=U[0].conversionsTo;if(P.length===1)return Y;Y=Y.concat([]);const pe=new Set(P);for(let ge=1;gege.hasConversion)){const ge=A(P),De=P.map($);Y=function(){const Ie=[],Ve=ge?arguments.length-1:arguments.length;for(let ze=0;zeVe.name).join("|"),hasAny:Ie.some(Ve=>Ve.isAny),hasConversion:!1,restParam:!0}),Re.push(De)}else Re=De.types.map(function(Ie){return{types:[Ie],name:Ie.name,hasAny:Ie.isAny,hasConversion:Ie.conversion,restParam:!1}});return Ce(Re,function(Ie){return U(Y,pe+1,ge.concat([Ie]))})}else return[ge]}return U(P,0,[])}function he(P,U){const Y=Math.max(P.length,U.length);for(let Ie=0;Ie=pe:Re?pe>=ge:pe===ge}function ne(P){return P.map(U=>ye(U)?J(U.referToSelf.callback):te(U)?Ue(U.referTo.references,U.referTo.callback):U)}function X(P,U,Y){const pe=[];let ge;for(ge of P){let De=Y[ge];if(typeof De!="number")throw new TypeError('No definition for referenced signature "'+ge+'"');if(De=U[De],typeof De!="function")return!1;pe.push(De)}return pe}function de(P,U,Y){const pe=ne(P),ge=new Array(pe.length).fill(!1);let De=!0;for(;De;){De=!1;let Re=!0;for(let Ie=0;Ie{const pe=P[Y];if(U.test(pe.toString()))throw new SyntaxError("Using `this` to self-reference a function is deprecated since typed-function@3. Use typed.referTo and typed.referToSelf instead.")})}function ce(P,U){if(s.createCount++,Object.keys(U).length===0)throw new SyntaxError("No signatures provided");s.warnAgainstDeprecatedThis&&Se(U);const Y=[],pe=[],ge={},De=[];let Re;for(Re in U){if(!Object.prototype.hasOwnProperty.call(U,Re))continue;const Wt=_(Re);if(!Wt)continue;Y.forEach(function($a){if(he($a,Wt))throw new TypeError('Conflicting signatures "'+b($a)+'" and "'+b(Wt)+'".')}),Y.push(Wt);const bn=pe.length;pe.push(U[Re]);const af=Wt.map(S);let so;for(so of se(af)){const $a=b(so);De.push({params:so,name:$a,fn:bn}),so.every(dl=>!dl.hasConversion)&&(ge[$a]=bn)}}De.sort(B);const Ie=de(pe,ge,ls);let Ve;for(Ve in ge)Object.prototype.hasOwnProperty.call(ge,Ve)&&(ge[Ve]=Ie[ge[Ve]]);const ze=[],vt=new Map;for(Ve of De)vt.has(Ve.name)||(Ve.fn=Ie[Ve.fn],ze.push(Ve),vt.set(Ve.name,Ve));const St=ze[0]&&ze[0].params.length<=2&&!A(ze[0].params),at=ze[1]&&ze[1].params.length<=2&&!A(ze[1].params),mr=ze[2]&&ze[2].params.length<=2&&!A(ze[2].params),k=ze[3]&&ze[3].params.length<=2&&!A(ze[3].params),oe=ze[4]&&ze[4].params.length<=2&&!A(ze[4].params),Ae=ze[5]&&ze[5].params.length<=2&&!A(ze[5].params),$e=St&&at&&mr&&k&&oe&&Ae;for(let Wt=0;WtWt.test),nf=ze.map(Wt=>Wt.implementation),ao=function(){for(let bn=iu;bnb(_(Y))),U=me(arguments);if(typeof U!="function")throw new TypeError("Callback function expected as last argument");return Ue(P,U)}function Ue(P,U){return{referTo:{references:P,callback:U}}}function J(P){if(typeof P!="function")throw new TypeError("Callback function expected as first argument");return{referToSelf:{callback:P}}}function te(P){return P&&typeof P.referTo=="object"&&Array.isArray(P.referTo.references)&&typeof P.referTo.callback=="function"}function ye(P){return P&&typeof P.referToSelf=="object"&&typeof P.referToSelf.callback=="function"}function ee(P,U){if(!P)return U;if(U&&U!==P){const Y=new Error("Function names do not match (expected: "+P+", actual: "+U+")");throw Y.data={actual:U,expected:P},Y}return P}function ue(P){let U;for(const Y in P)Object.prototype.hasOwnProperty.call(P,Y)&&(h(P[Y])||typeof P[Y].signature=="string")&&(U=ee(U,P[Y].name));return U}function le(P,U){let Y;for(Y in U)if(Object.prototype.hasOwnProperty.call(U,Y)){if(Y in P&&U[Y]!==P[Y]){const pe=new Error('Signature "'+Y+'" is defined twice');throw pe.data={signature:Y,sourceFunction:U[Y],destFunction:P[Y]},pe}P[Y]=U[Y]}}const Ee=s;s=function(P){const U=typeof P=="string",Y=U?1:0;let pe=U?P:"";const ge={};for(let De=Y;Dege.from===P.from);if(!Y)throw new Error("Attempt to remove nonexistent conversion from "+P.from+" to "+P.to);if(Y.convert!==P.convert)throw new Error("Conversion to remove does not match existing conversion");const pe=U.conversionsTo.indexOf(Y);U.conversionsTo.splice(pe,1)},s.resolve=function(P,U){if(!h(P))throw new TypeError(S2);const Y=P._typedFunctionData.signatures;for(let pe=0;pe0?1:t<0?-1:0},Kte=Math.log2||function(e){return Math.log(e)/Math.LN2},Jte=Math.log10||function(e){return Math.log(e)/Math.LN10},Qte=Math.log1p||function(t){return Math.log(t+1)},ere=Math.cbrt||function(e){if(e===0)return e;var r=e<0,n;return r&&(e=-e),isFinite(e)?(n=Math.exp(Math.log(e)/3),n=(e/(n*n)+2*n)/3):n=e,r?-n:n},tre=Math.expm1||function(e){return e>=2e-4||e<=-2e-4?Math.exp(e)-1:e+e*e/2+e*e*e/6};function Vy(t,e,r){var n={2:"0b",8:"0o",16:"0x"},i=n[e],a="";if(r){if(r<1)throw new Error("size must be in greater than 0");if(!ot(r))throw new Error("size must be an integer");if(t>2**(r-1)-1||t<-(2**(r-1)))throw new Error("Value must be in range [-2^".concat(r-1,", 2^").concat(r-1,"-1]"));if(!ot(t))throw new Error("Value must be an integer");t<0&&(t=t+2**r),a="i".concat(r)}var s="";return t<0&&(t=-t,s="-"),"".concat(s).concat(i).concat(t.toString(e)).concat(a)}function Lu(t,e){if(typeof e=="function")return e(t);if(t===1/0)return"Infinity";if(t===-1/0)return"-Infinity";if(isNaN(t))return"NaN";var{notation:r,precision:n,wordSize:i}=iR(e);switch(r){case"fixed":return aR(t,n);case"exponential":return sR(t,n);case"engineering":return rre(t,n);case"bin":return Vy(t,2,i);case"oct":return Vy(t,8,i);case"hex":return Vy(t,16,i);case"auto":return nre(t,n,e).replace(/((\.\d*?)(0+))($|e)/,function(){var a=arguments[2],s=arguments[4];return a!=="."?a+s:s});default:throw new Error('Unknown notation "'+r+'". Choose "auto", "exponential", "fixed", "bin", "oct", or "hex.')}}function iR(t){var e="auto",r,n;if(t!==void 0)if(Ct(t))r=t;else if(Mt(t))r=t.toNumber();else if(Tg(t))t.precision!==void 0&&(r=_2(t.precision,()=>{throw new Error('Option "precision" must be a number or BigNumber')})),t.wordSize!==void 0&&(n=_2(t.wordSize,()=>{throw new Error('Option "wordSize" must be a number or BigNumber')})),t.notation&&(e=t.notation);else throw new Error("Unsupported type of options, number, BigNumber, or object expected");return{notation:e,precision:r,wordSize:n}}function Fg(t){var e=String(t).toLowerCase().match(/^(-?)(\d+\.?\d*)(e([+-]?\d+))?$/);if(!e)throw new SyntaxError("Invalid number "+t);var r=e[1],n=e[2],i=parseFloat(e[4]||"0"),a=n.indexOf(".");i+=a!==-1?a-1:n.length-1;var s=n.replace(".","").replace(/^0*/,function(o){return i-=o.length,""}).replace(/0*$/,"").split("").map(function(o){return parseInt(o)});return s.length===0&&(s.push(0),i++),{sign:r,coefficients:s,exponent:i}}function rre(t,e){if(isNaN(t)||!isFinite(t))return String(t);var r=Fg(t),n=Pg(r,e),i=n.exponent,a=n.coefficients,s=i%3===0?i:i<0?i-3-i%3:i-i%3;if(Ct(e))for(;e>a.length||i-s+1>a.length;)a.push(0);else for(var o=Math.abs(i-s)-(a.length-1),u=0;u0;)c++,l--;var f=a.slice(c).join(""),h=Ct(e)&&f.length||f.match(/[1-9]/)?"."+f:"",p=a.slice(0,c).join("")+h+"e"+(i>=0?"+":"")+s.toString();return n.sign+p}function aR(t,e){if(isNaN(t)||!isFinite(t))return String(t);var r=Fg(t),n=typeof e=="number"?Pg(r,r.exponent+1+e):r,i=n.coefficients,a=n.exponent+1,s=a+(e||0);return i.length0?"."+i.join(""):"")+"e"+(a>=0?"+":"")+a}function nre(t,e,r){if(isNaN(t)||!isFinite(t))return String(t);var n=A2(r==null?void 0:r.lowerExp,-3),i=A2(r==null?void 0:r.upperExp,5),a=Fg(t),s=e?Pg(a,e):a;if(s.exponent=i)return sR(t,e);var o=s.coefficients,u=s.exponent;o.length0?u:0;return le){var i=n.splice(e,n.length-e);if(i[0]>=5){var a=e-1;for(n[a]++;n[a]===10;)n.pop(),a===0&&(n.unshift(0),r.exponent++,a++),a--,n[a]++}}return r}function ec(t){for(var e=[],r=0;r0?!0:t<0?!1:1/t===1/0,n=e>0?!0:e<0?!1:1/e===1/0;return r^n?-t:t}function _2(t,e){if(Ct(t))return t;if(Mt(t))return t.toNumber();e()}function A2(t,e){return Ct(t)?t:Mt(t)?t.toNumber():e}function Yy(t,e,r){var n=t.constructor,i=new n(2),a="";if(r){if(r<1)throw new Error("size must be in greater than 0");if(!ot(r))throw new Error("size must be an integer");if(t.greaterThan(i.pow(r-1).sub(1))||t.lessThan(i.pow(r-1).mul(-1)))throw new Error("Value must be in range [-2^".concat(r-1,", 2^").concat(r-1,"-1]"));if(!t.isInteger())throw new Error("Value must be an integer");t.lessThan(0)&&(t=t.add(i.pow(r))),a="i".concat(r)}switch(e){case 2:return"".concat(t.toBinary()).concat(a);case 8:return"".concat(t.toOctal()).concat(a);case 16:return"".concat(t.toHexadecimal()).concat(a);default:throw new Error("Base ".concat(e," not supported "))}}function dre(t,e){if(typeof e=="function")return e(t);if(!t.isFinite())return t.isNaN()?"NaN":t.gt(0)?"Infinity":"-Infinity";var{notation:r,precision:n,wordSize:i}=iR(e);switch(r){case"fixed":return mre(t,n);case"exponential":return D2(t,n);case"engineering":return pre(t,n);case"bin":return Yy(t,2,i);case"oct":return Yy(t,8,i);case"hex":return Yy(t,16,i);case"auto":{var a=N2(e==null?void 0:e.lowerExp,-3),s=N2(e==null?void 0:e.upperExp,5);if(t.isZero())return"0";var o,u=t.toSignificantDigits(n),l=u.e;return l>=a&&l=0?"+":"")+n.toString()}function D2(t,e){return e!==void 0?t.toExponential(e-1):t.toExponential()}function mre(t,e){return t.toFixed(e)}function N2(t,e){return Ct(t)?t:Mt(t)?t.toNumber():e}function vre(t,e){var r=t.length-e.length,n=t.length;return t.substring(r,n)===e}function Pt(t,e){var r=gre(t,e);return e&&typeof e=="object"&&"truncate"in e&&r.length>e.truncate?r.substring(0,e.truncate-3)+"...":r}function gre(t,e){if(typeof t=="number")return Lu(t,e);if(Mt(t))return dre(t,e);if(yre(t))return!e||e.fraction!=="decimal"?t.s*t.n+"/"+t.d:t.toString();if(Array.isArray(t))return oR(t,e);if(qn(t))return Vl(t);if(typeof t=="function")return t.syntax?String(t.syntax):"function";if(t&&typeof t=="object"){if(typeof t.format=="function")return t.format(e);if(t&&t.toString(e)!=={}.toString())return t.toString(e);var r=Object.keys(t).map(n=>Vl(n)+": "+Pt(t[n],e));return"{"+r.join(", ")+"}"}return String(t)}function Vl(t){for(var e=String(t),r="",n=0;n/g,">"),e}function oR(t,e){if(Array.isArray(t)){for(var r="[",n=t.length,i=0;ie?1:-1}function It(t,e,r){if(!(this instanceof It))throw new SyntaxError("Constructor must be called with the new operator");this.actual=t,this.expected=e,this.relation=r,this.message="Dimension mismatch ("+(Array.isArray(t)?"["+t.join(", ")+"]":t)+" "+(this.relation||"!=")+" "+(Array.isArray(e)?"["+e.join(", ")+"]":e)+")",this.stack=new Error().stack}It.prototype=new RangeError;It.prototype.constructor=RangeError;It.prototype.name="DimensionError";It.prototype.isDimensionError=!0;function Fa(t,e,r){if(!(this instanceof Fa))throw new SyntaxError("Constructor must be called with the new operator");this.index=t,arguments.length<3?(this.min=0,this.max=e):(this.min=e,this.max=r),this.min!==void 0&&this.index=this.max?this.message="Index out of range ("+this.index+" > "+(this.max-1)+")":this.message="Index out of range ("+this.index+")",this.stack=new Error().stack}Fa.prototype=new RangeError;Fa.prototype.constructor=RangeError;Fa.prototype.name="IndexError";Fa.prototype.isIndexError=!0;function Nt(t){for(var e=[];Array.isArray(t);)e.push(t.length),t=t[0];return e}function uR(t,e,r){var n,i=t.length;if(i!==e[r])throw new It(i,e[r]);if(r")}function C2(t,e){var r=e.length===0;if(r){if(Array.isArray(t))throw new It(t.length,0)}else uR(t,e,0)}function bv(t,e){var r=t.isMatrix?t._size:Nt(t),n=e._sourceSize;n.forEach((i,a)=>{if(i!==null&&i!==r[a])throw new It(i,r[a])})}function gr(t,e){if(t!==void 0){if(!Ct(t)||!ot(t))throw new TypeError("Index must be an integer (value: "+t+")");if(t<0||typeof e=="number"&&t>=e)throw new Fa(t,e)}}function vc(t){for(var e=0;e=0,u=e%r===0;if(o)if(u)n[a]=-e/r;else throw new Error("Could not replace wildcard, since "+e+" is no multiple of "+-r);return n}function lR(t){return t.reduce((e,r)=>e*r,1)}function bre(t,e){for(var r=t,n,i=e.length-1;i>0;i--){var a=e[i];n=[];for(var s=r.length/a,o=0;oe.test(r))}function M2(t,e){return Array.prototype.join.call(t,e)}function yc(t){if(!Array.isArray(t))throw new TypeError("Array input expected");if(t.length===0)return t;var e=[],r=0;e[0]={value:t[0],identifier:0};for(var n=1;n1)return t.slice(1).reduce(function(r,n){return pR(r,n,e,0)},t[0]);throw new Error("Wrong number of arguments in function concat")}function xre(){for(var t=arguments.length,e=new Array(t),r=0;rh.length),i=Math.max(...n),a=new Array(i).fill(null),s=0;sa[c]&&(a[c]=o[l])}for(var f=0;f1||t[i]>e[a])throw new Error("shape missmatch: missmatch is found in arg with shape (".concat(t,") not possible to broadcast dimension ").concat(n," with size ").concat(t[i]," to size ").concat(e[a]))}}function T2(t,e){var r=Nt(t);if(Wu(r,e))return t;_v(r,e);var n=xre(r,e),i=n.length,a=[...Array(i-r.length).fill(1),...r],s=Sre(t);r.length!Are(a)).every(a=>r[a]!==void 0);if(!n){var i=e.filter(a=>r[a]===void 0);throw new Error('Cannot create function "'.concat(t,'", ')+"some dependencies are missing: ".concat(i.map(a=>'"'.concat(a,'"')).join(", "),"."))}}function Are(t){return t&&t[0]==="?"}function Dre(t){return t&&t[0]==="?"?t.slice(1):t}function ri(t,e){if(gR(t)&&vR(t,e))return t[e];throw typeof t[e]=="function"&&aw(t,e)?new Error('Cannot access method "'+e+'" as a property'):new Error('No access to property "'+e+'"')}function bc(t,e,r){if(gR(t)&&vR(t,e))return t[e]=r,r;throw new Error('No access to property "'+e+'"')}function Nre(t,e){return e in t}function vR(t,e){return!t||typeof t!="object"?!1:nt(Cre,e)?!0:!(e in Object.prototype||e in Function.prototype)}function Ere(t,e){if(!aw(t,e))throw new Error('No access to method "'+e+'"');return t[e]}function aw(t,e){return t==null||typeof t[e]!="function"||nt(t,e)&&Object.getPrototypeOf&&e in Object.getPrototypeOf(t)?!1:nt(Mre,e)?!0:!(e in Object.prototype||e in Function.prototype)}function gR(t){return typeof t=="object"&&t&&t.constructor===Object}var Cre={length:!0,name:!0},Mre={toString:!0,valueOf:!0,toLocaleString:!0};class Ig{constructor(e){this.wrappedObject=e}keys(){return Object.keys(this.wrappedObject).values()}get(e){return ri(this.wrappedObject,e)}set(e,r){return bc(this.wrappedObject,e,r),this}has(e){return Nre(this.wrappedObject,e)}entries(){return bR(this.keys(),e=>[e,this.get(e)])}forEach(e){for(var r of this.keys())e(this.get(r),r,this)}delete(e){delete this.wrappedObject[e]}clear(){for(var e of this.keys())this.delete(e)}get size(){return Object.keys(this.wrappedObject).length}}class yR{constructor(e,r,n){this.a=e,this.b=r,this.bKeys=n}get(e){return this.bKeys.has(e)?this.b.get(e):this.a.get(e)}set(e,r){return this.bKeys.has(e)?this.b.set(e,r):this.a.set(e,r),this}has(e){return this.b.has(e)||this.a.has(e)}keys(){return new Set([...this.a.keys(),...this.b.keys()])[Symbol.iterator]()}entries(){return bR(this.keys(),e=>[e,this.get(e)])}forEach(e){for(var r of this.keys())e(this.get(r),r,this)}delete(e){return this.bKeys.has(e)?this.b.delete(e):this.a.delete(e)}clear(){this.a.clear(),this.b.clear()}get size(){return[...this.keys()].length}}function bR(t,e){return{next:()=>{var r=t.next();return r.done?r:{value:e(r.value),done:!1}}}}function Hh(){return new Map}function tc(t){if(!t)return Hh();if(xR(t))return t;if(Tg(t))return new Ig(t);throw new Error("createMap can create maps from objects or Maps")}function Tre(t){if(t instanceof Ig)return t.wrappedObject;var e={};for(var r of t.keys()){var n=t.get(r);bc(e,r,n)}return e}function xR(t){return t?t instanceof Map||t instanceof Ig||typeof t.set=="function"&&typeof t.get=="function"&&typeof t.keys=="function"&&typeof t.has=="function":!1}var wR=function(){return wR=Wl.create,Wl},Ore=["?BigNumber","?Complex","?DenseMatrix","?Fraction"],Fre=G("typed",Ore,function(e){var{BigNumber:r,Complex:n,DenseMatrix:i,Fraction:a}=e,s=wR();return s.clear(),s.addTypes([{name:"number",test:Ct},{name:"Complex",test:Hs},{name:"BigNumber",test:Mt},{name:"Fraction",test:hd},{name:"Unit",test:Ji},{name:"identifier",test:o=>qn&&/^(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])(?:[0-9A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])*$/.test(o)},{name:"string",test:qn},{name:"Chain",test:tR},{name:"Array",test:sr},{name:"Matrix",test:dt},{name:"DenseMatrix",test:yv},{name:"SparseMatrix",test:Fu},{name:"Range",test:rw},{name:"Index",test:Mg},{name:"boolean",test:Rte},{name:"ResultSet",test:Ite},{name:"Help",test:eR},{name:"function",test:Bte},{name:"Date",test:kte},{name:"RegExp",test:Lte},{name:"null",test:$te},{name:"undefined",test:zte},{name:"AccessorNode",test:Hu},{name:"ArrayNode",test:Zi},{name:"AssignmentNode",test:qte},{name:"BlockNode",test:Ute},{name:"ConditionalNode",test:Hte},{name:"ConstantNode",test:er},{name:"FunctionNode",test:Ho},{name:"FunctionAssignmentNode",test:dd},{name:"IndexNode",test:Mc},{name:"Node",test:pr},{name:"ObjectNode",test:Og},{name:"OperatorNode",test:tn},{name:"ParenthesisNode",test:js},{name:"RangeNode",test:Wte},{name:"RelationalNode",test:Vte},{name:"SymbolNode",test:Sn},{name:"Map",test:xR},{name:"Object",test:Tg}]),s.addConversions([{from:"number",to:"BigNumber",convert:function(u){if(r||jy(u),ire(u)>15)throw new TypeError("Cannot implicitly convert a number with >15 significant digits to BigNumber (value: "+u+"). Use function bignumber(x) to convert to BigNumber.");return new r(u)}},{from:"number",to:"Complex",convert:function(u){return n||rm(u),new n(u,0)}},{from:"BigNumber",to:"Complex",convert:function(u){return n||rm(u),new n(u.toNumber(),0)}},{from:"Fraction",to:"BigNumber",convert:function(u){throw new TypeError("Cannot implicitly convert a Fraction to BigNumber or vice versa. Use function bignumber(x) to convert to BigNumber or fraction(x) to convert to Fraction.")}},{from:"Fraction",to:"Complex",convert:function(u){return n||rm(u),new n(u.valueOf(),0)}},{from:"number",to:"Fraction",convert:function(u){a||Gy(u);var l=new a(u);if(l.valueOf()!==u)throw new TypeError("Cannot implicitly convert a number to a Fraction when there will be a loss of precision (value: "+u+"). Use function fraction(x) to convert to Fraction.");return l}},{from:"string",to:"number",convert:function(u){var l=Number(u);if(isNaN(l))throw new Error('Cannot convert "'+u+'" to a number');return l}},{from:"string",to:"BigNumber",convert:function(u){r||jy(u);try{return new r(u)}catch{throw new Error('Cannot convert "'+u+'" to BigNumber')}}},{from:"string",to:"Fraction",convert:function(u){a||Gy(u);try{return new a(u)}catch{throw new Error('Cannot convert "'+u+'" to Fraction')}}},{from:"string",to:"Complex",convert:function(u){n||rm(u);try{return new n(u)}catch{throw new Error('Cannot convert "'+u+'" to Complex')}}},{from:"boolean",to:"number",convert:function(u){return+u}},{from:"boolean",to:"BigNumber",convert:function(u){return r||jy(u),new r(+u)}},{from:"boolean",to:"Fraction",convert:function(u){return a||Gy(u),new a(+u)}},{from:"boolean",to:"string",convert:function(u){return String(u)}},{from:"Array",to:"Matrix",convert:function(u){return i||Pre(),new i(u)}},{from:"Matrix",to:"Array",convert:function(u){return u.valueOf()}}]),s.onMismatch=(o,u,l)=>{var c=s.createError(o,u,l);if(["wrongType","mismatch"].includes(c.data.category)&&u.length===1&&sa(u[0])&&l.some(h=>!h.params.includes(","))){var f=new TypeError("Function '".concat(o,"' doesn't apply to matrices. To call it ")+"elementwise on a matrix 'M', try 'map(M, ".concat(o,")'."));throw f.data=c.data,f}throw c},s.onMismatch=(o,u,l)=>{var c=s.createError(o,u,l);if(["wrongType","mismatch"].includes(c.data.category)&&u.length===1&&sa(u[0])&&l.some(h=>!h.params.includes(","))){var f=new TypeError("Function '".concat(o,"' doesn't apply to matrices. To call it ")+"elementwise on a matrix 'M', try 'map(M, ".concat(o,")'."));throw f.data=c.data,f}throw c},s});function jy(t){throw new Error("Cannot convert value ".concat(t," into a BigNumber: no class 'BigNumber' provided"))}function rm(t){throw new Error("Cannot convert value ".concat(t," into a Complex number: no class 'Complex' provided"))}function Pre(){throw new Error("Cannot convert array into a Matrix: no class 'DenseMatrix' provided")}function Gy(t){throw new Error("Cannot convert value ".concat(t," into a Fraction, no class 'Fraction' provided."))}var Rre="ResultSet",Ire=[],Bre=G(Rre,Ire,()=>{function t(e){if(!(this instanceof t))throw new SyntaxError("Constructor must be called with the new operator");this.entries=e||[]}return t.prototype.type="ResultSet",t.prototype.isResultSet=!0,t.prototype.valueOf=function(){return this.entries},t.prototype.toString=function(){return"["+this.entries.join(", ")+"]"},t.prototype.toJSON=function(){return{mathjs:"ResultSet",entries:this.entries}},t.fromJSON=function(e){return new t(e.entries)},t},{isClass:!0});/*! +`);return Object.freeze(uP)};dn(Re,uP,{MATRIX_OPTIONS:wre,NUMBER_OPTIONS:Sre});function A2(){return!0}function Xi(){return!1}function kl(){}const D2="Argument is not a typed-function.";function hP(){function t(R){return typeof R=="object"&&R!==null&&R.constructor===Object}const e=[{name:"number",test:function(R){return typeof R=="number"}},{name:"string",test:function(R){return typeof R=="string"}},{name:"boolean",test:function(R){return typeof R=="boolean"}},{name:"Function",test:function(R){return typeof R=="function"}},{name:"Array",test:Array.isArray},{name:"Date",test:function(R){return R instanceof Date}},{name:"RegExp",test:function(R){return R instanceof RegExp}},{name:"Object",test:t},{name:"null",test:function(R){return R===null}},{name:"undefined",test:function(R){return R===void 0}}],r={name:"any",test:A2,isAny:!0};let n,i,a=0,s={createCount:0};function o(R){const U=n.get(R);if(U)return U;let Y='Unknown type "'+R+'"';const pe=R.toLowerCase();let ge;for(ge of i)if(ge.toLowerCase()===pe){Y+='. Did you mean "'+ge+'" ?';break}throw new TypeError(Y)}function u(R){let U=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"any";const Y=U?o(U).index:i.length,pe=[];for(let De=0;De{const pe=n.get(Y);return!pe.isAny&&pe.test(R)});return U.length?U:["any"]}function h(R){return R&&typeof R=="function"&&"_typedFunctionData"in R}function p(R,U,Y){if(!h(R))throw new TypeError(D2);const pe=Y&&Y.exact,ge=Array.isArray(U)?U.join(","):U,De=_(ge),Pe=b(De);if(!pe||Pe in R.signatures){const vt=R._typedFunctionData.signatureMap.get(Pe);if(vt)return vt}const ke=De.length;let Ve;if(pe){Ve=[];let vt;for(vt in R.signatures)Ve.push(R._typedFunctionData.signatureMap.get(vt))}else Ve=R._typedFunctionData.signatures;for(let vt=0;vt!oe.has(Ae.name)))continue}at.push(mr)}}if(Ve=at,Ve.length===0)break}let ze;for(ze of Ve)if(ze.params.length<=ke)return ze;throw new TypeError("Signature not found (signature: "+(R.name||"unnamed")+"("+b(De,", ")+"))")}function g(R,U,Y){return p(R,U,Y).implementation}function m(R,U){const Y=o(U);if(Y.test(R))return R;const pe=Y.conversionsTo;if(pe.length===0)throw new Error("There are no conversions to "+U+" defined.");for(let ge=0;ge1&&arguments[1]!==void 0?arguments[1]:",";return R.map(Y=>Y.name).join(U)}function y(R){const U=R.indexOf("...")===0,pe=(U?R.length>3?R.slice(3):"any":R).split("|").map(ke=>o(ke.trim()));let ge=!1,De=U?"...":"";return{types:pe.map(function(ke){return ge=ke.isAny||ge,De+=ke.name+"|",{name:ke.name,typeIndex:ke.index,test:ke.test,isAny:ke.isAny,conversion:null,conversionIndex:-1}}),name:De.slice(0,-1),hasAny:ge,hasConversion:!1,restParam:U}}function S(R){const U=R.types.map(Pe=>Pe.name),Y=k(U);let pe=R.hasAny,ge=R.name;const De=Y.map(function(Pe){const ke=o(Pe.from);return pe=ke.isAny||pe,ge+="|"+Pe.from,{name:Pe.from,typeIndex:ke.index,test:ke.test,isAny:ke.isAny,conversion:Pe,conversionIndex:Pe.index}});return{types:R.types.concat(De),name:ge,hasAny:pe,hasConversion:De.length>0,restParam:R.restParam}}function x(R){return R.typeSet||(R.typeSet=new Set,R.types.forEach(U=>R.typeSet.add(U.name))),R.typeSet}function _(R){const U=[];if(typeof R!="string")throw new TypeError("Signatures must be strings");const Y=R.trim();if(Y==="")return U;const pe=Y.split(",");for(let ge=0;ge=ge+1}}else return R.length===0?function(De){return De.length===0}:R.length===1?(Y=w(R[0]),function(De){return Y(De[0])&&De.length===1}):R.length===2?(Y=w(R[0]),pe=w(R[1]),function(De){return Y(De[0])&&pe(De[1])&&De.length===2}):(U=R.map(w),function(De){for(let Pe=0;Pe{const ge=E(pe.params,U);let De;for(De of ge)Y.add(De)}),Y.has("any")?["any"]:Array.from(Y)}function F(R,U,Y){let pe,ge;const De=R||"unnamed";let Pe=Y,ke;for(ke=0;ke{const mr=N(at.params,ke),I=w(mr);(ke0){const at=f(U[ke]);return pe=new TypeError("Unexpected type of argument in function "+De+" (expected: "+ge.join(" or ")+", actual: "+at.join(" | ")+", index: "+ke+")"),pe.data={category:"wrongType",fn:De,index:ke,actual:at,expected:ge},pe}}else Pe=St}const Ve=Pe.map(function(St){return A(St.params)?1/0:St.params.length});if(U.lengthze)return pe=new TypeError("Too many arguments in function "+De+" (expected: "+ze+", actual: "+U.length+")"),pe.data={category:"tooManyArgs",fn:De,index:U.length,expectedLength:ze},pe;const vt=[];for(let St=0;St0)return 1;const pe=V(R)-V(U);return pe<0?-1:pe>0?1:0}function B(R,U){const Y=R.params,pe=U.params,ge=me(Y),De=me(pe),Pe=A(Y),ke=A(pe);if(Pe&&ge.hasAny){if(!ke||!De.hasAny)return 1}else if(ke&&De.hasAny)return-1;let Ve=0,ze=0,vt;for(vt of Y)vt.hasAny&&++Ve,vt.hasConversion&&++ze;let St=0,at=0;for(vt of pe)vt.hasAny&&++St,vt.hasConversion&&++at;if(Ve!==St)return Ve-St;if(Pe&&ge.hasConversion){if(!ke||!De.hasConversion)return 1}else if(ke&&De.hasConversion)return-1;if(ze!==at)return ze-at;if(Pe){if(!ke)return 1}else if(ke)return-1;const mr=(Y.length-pe.length)*(Pe?-1:1);if(mr!==0)return mr;const I=[];let oe=0;for(let $e=0;$e1&&U.sort((ge,De)=>ge.index-De.index);let Y=U[0].conversionsTo;if(R.length===1)return Y;Y=Y.concat([]);const pe=new Set(R);for(let ge=1;gege.hasConversion)){const ge=A(R),De=R.map($);Y=function(){const ke=[],Ve=ge?arguments.length-1:arguments.length;for(let ze=0;zeVe.name).join("|"),hasAny:ke.some(Ve=>Ve.isAny),hasConversion:!1,restParam:!0}),Pe.push(De)}else Pe=De.types.map(function(ke){return{types:[ke],name:ke.name,hasAny:ke.isAny,hasConversion:ke.conversion,restParam:!1}});return Ce(Pe,function(ke){return U(Y,pe+1,ge.concat([ke]))})}else return[ge]}return U(R,0,[])}function he(R,U){const Y=Math.max(R.length,U.length);for(let ke=0;ke=pe:Pe?pe>=ge:pe===ge}function ne(R){return R.map(U=>ye(U)?J(U.referToSelf.callback):te(U)?Ue(U.referTo.references,U.referTo.callback):U)}function X(R,U,Y){const pe=[];let ge;for(ge of R){let De=Y[ge];if(typeof De!="number")throw new TypeError('No definition for referenced signature "'+ge+'"');if(De=U[De],typeof De!="function")return!1;pe.push(De)}return pe}function de(R,U,Y){const pe=ne(R),ge=new Array(pe.length).fill(!1);let De=!0;for(;De;){De=!1;let Pe=!0;for(let ke=0;ke{const pe=R[Y];if(U.test(pe.toString()))throw new SyntaxError("Using `this` to self-reference a function is deprecated since typed-function@3. Use typed.referTo and typed.referToSelf instead.")})}function ce(R,U){if(s.createCount++,Object.keys(U).length===0)throw new SyntaxError("No signatures provided");s.warnAgainstDeprecatedThis&&Se(U);const Y=[],pe=[],ge={},De=[];let Pe;for(Pe in U){if(!Object.prototype.hasOwnProperty.call(U,Pe))continue;const Wt=_(Pe);if(!Wt)continue;Y.forEach(function($a){if(he($a,Wt))throw new TypeError('Conflicting signatures "'+b($a)+'" and "'+b(Wt)+'".')}),Y.push(Wt);const bn=pe.length;pe.push(U[Pe]);const of=Wt.map(S);let so;for(so of se(of)){const $a=b(so);De.push({params:so,name:$a,fn:bn}),so.every(dl=>!dl.hasConversion)&&(ge[$a]=bn)}}De.sort(B);const ke=de(pe,ge,ls);let Ve;for(Ve in ge)Object.prototype.hasOwnProperty.call(ge,Ve)&&(ge[Ve]=ke[ge[Ve]]);const ze=[],vt=new Map;for(Ve of De)vt.has(Ve.name)||(Ve.fn=ke[Ve.fn],ze.push(Ve),vt.set(Ve.name,Ve));const St=ze[0]&&ze[0].params.length<=2&&!A(ze[0].params),at=ze[1]&&ze[1].params.length<=2&&!A(ze[1].params),mr=ze[2]&&ze[2].params.length<=2&&!A(ze[2].params),I=ze[3]&&ze[3].params.length<=2&&!A(ze[3].params),oe=ze[4]&&ze[4].params.length<=2&&!A(ze[4].params),Ae=ze[5]&&ze[5].params.length<=2&&!A(ze[5].params),$e=St&&at&&mr&&I&&oe&&Ae;for(let Wt=0;WtWt.test),sf=ze.map(Wt=>Wt.implementation),ao=function(){for(let bn=iu;bnb(_(Y))),U=me(arguments);if(typeof U!="function")throw new TypeError("Callback function expected as last argument");return Ue(R,U)}function Ue(R,U){return{referTo:{references:R,callback:U}}}function J(R){if(typeof R!="function")throw new TypeError("Callback function expected as first argument");return{referToSelf:{callback:R}}}function te(R){return R&&typeof R.referTo=="object"&&Array.isArray(R.referTo.references)&&typeof R.referTo.callback=="function"}function ye(R){return R&&typeof R.referToSelf=="object"&&typeof R.referToSelf.callback=="function"}function ee(R,U){if(!R)return U;if(U&&U!==R){const Y=new Error("Function names do not match (expected: "+R+", actual: "+U+")");throw Y.data={actual:U,expected:R},Y}return R}function ue(R){let U;for(const Y in R)Object.prototype.hasOwnProperty.call(R,Y)&&(h(R[Y])||typeof R[Y].signature=="string")&&(U=ee(U,R[Y].name));return U}function le(R,U){let Y;for(Y in U)if(Object.prototype.hasOwnProperty.call(U,Y)){if(Y in R&&U[Y]!==R[Y]){const pe=new Error('Signature "'+Y+'" is defined twice');throw pe.data={signature:Y,sourceFunction:U[Y],destFunction:R[Y]},pe}R[Y]=U[Y]}}const Ne=s;s=function(R){const U=typeof R=="string",Y=U?1:0;let pe=U?R:"";const ge={};for(let De=Y;Dege.from===R.from);if(!Y)throw new Error("Attempt to remove nonexistent conversion from "+R.from+" to "+R.to);if(Y.convert!==R.convert)throw new Error("Conversion to remove does not match existing conversion");const pe=U.conversionsTo.indexOf(Y);U.conversionsTo.splice(pe,1)},s.resolve=function(R,U){if(!h(R))throw new TypeError(D2);const Y=R._typedFunctionData.signatures;for(let pe=0;pe0?1:t<0?-1:0},_re=Math.log2||function(e){return Math.log(e)/Math.LN2},Are=Math.log10||function(e){return Math.log(e)/Math.LN10},Dre=Math.log1p||function(t){return Math.log(t+1)},Ere=Math.cbrt||function(e){if(e===0)return e;var r=e<0,n;return r&&(e=-e),isFinite(e)?(n=Math.exp(Math.log(e)/3),n=(e/(n*n)+2*n)/3):n=e,r?-n:n},Nre=Math.expm1||function(e){return e>=2e-4||e<=-2e-4?Math.exp(e)-1:e+e*e/2+e*e*e/6};function jy(t,e,r){var n={2:"0b",8:"0o",16:"0x"},i=n[e],a="";if(r){if(r<1)throw new Error("size must be in greater than 0");if(!ot(r))throw new Error("size must be an integer");if(t>2**(r-1)-1||t<-(2**(r-1)))throw new Error("Value must be in range [-2^".concat(r-1,", 2^").concat(r-1,"-1]"));if(!ot(t))throw new Error("Value must be an integer");t<0&&(t=t+2**r),a="i".concat(r)}var s="";return t<0&&(t=-t,s="-"),"".concat(s).concat(i).concat(t.toString(e)).concat(a)}function Lu(t,e){if(typeof e=="function")return e(t);if(t===1/0)return"Infinity";if(t===-1/0)return"-Infinity";if(isNaN(t))return"NaN";var{notation:r,precision:n,wordSize:i}=dP(e);switch(r){case"fixed":return pP(t,n);case"exponential":return mP(t,n);case"engineering":return Cre(t,n);case"bin":return jy(t,2,i);case"oct":return jy(t,8,i);case"hex":return jy(t,16,i);case"auto":return Mre(t,n,e).replace(/((\.\d*?)(0+))($|e)/,function(){var a=arguments[2],s=arguments[4];return a!=="."?a+s:s});default:throw new Error('Unknown notation "'+r+'". Choose "auto", "exponential", "fixed", "bin", "oct", or "hex.')}}function dP(t){var e="auto",r,n;if(t!==void 0)if(Ct(t))r=t;else if(Mt(t))r=t.toNumber();else if(Fg(t))t.precision!==void 0&&(r=E2(t.precision,()=>{throw new Error('Option "precision" must be a number or BigNumber')})),t.wordSize!==void 0&&(n=E2(t.wordSize,()=>{throw new Error('Option "wordSize" must be a number or BigNumber')})),t.notation&&(e=t.notation);else throw new Error("Unsupported type of options, number, BigNumber, or object expected");return{notation:e,precision:r,wordSize:n}}function Pg(t){var e=String(t).toLowerCase().match(/^(-?)(\d+\.?\d*)(e([+-]?\d+))?$/);if(!e)throw new SyntaxError("Invalid number "+t);var r=e[1],n=e[2],i=parseFloat(e[4]||"0"),a=n.indexOf(".");i+=a!==-1?a-1:n.length-1;var s=n.replace(".","").replace(/^0*/,function(o){return i-=o.length,""}).replace(/0*$/,"").split("").map(function(o){return parseInt(o)});return s.length===0&&(s.push(0),i++),{sign:r,coefficients:s,exponent:i}}function Cre(t,e){if(isNaN(t)||!isFinite(t))return String(t);var r=Pg(t),n=kg(r,e),i=n.exponent,a=n.coefficients,s=i%3===0?i:i<0?i-3-i%3:i-i%3;if(Ct(e))for(;e>a.length||i-s+1>a.length;)a.push(0);else for(var o=Math.abs(i-s)-(a.length-1),u=0;u0;)c++,l--;var f=a.slice(c).join(""),h=Ct(e)&&f.length||f.match(/[1-9]/)?"."+f:"",p=a.slice(0,c).join("")+h+"e"+(i>=0?"+":"")+s.toString();return n.sign+p}function pP(t,e){if(isNaN(t)||!isFinite(t))return String(t);var r=Pg(t),n=typeof e=="number"?kg(r,r.exponent+1+e):r,i=n.coefficients,a=n.exponent+1,s=a+(e||0);return i.length0?"."+i.join(""):"")+"e"+(a>=0?"+":"")+a}function Mre(t,e,r){if(isNaN(t)||!isFinite(t))return String(t);var n=N2(r==null?void 0:r.lowerExp,-3),i=N2(r==null?void 0:r.upperExp,5),a=Pg(t),s=e?kg(a,e):a;if(s.exponent=i)return mP(t,e);var o=s.coefficients,u=s.exponent;o.length0?u:0;return le){var i=n.splice(e,n.length-e);if(i[0]>=5){var a=e-1;for(n[a]++;n[a]===10;)n.pop(),a===0&&(n.unshift(0),r.exponent++,a++),a--,n[a]++}}return r}function rc(t){for(var e=[],r=0;r0?!0:t<0?!1:1/t===1/0,n=e>0?!0:e<0?!1:1/e===1/0;return r^n?-t:t}function E2(t,e){if(Ct(t))return t;if(Mt(t))return t.toNumber();e()}function N2(t,e){return Ct(t)?t:Mt(t)?t.toNumber():e}function Gy(t,e,r){var n=t.constructor,i=new n(2),a="";if(r){if(r<1)throw new Error("size must be in greater than 0");if(!ot(r))throw new Error("size must be an integer");if(t.greaterThan(i.pow(r-1).sub(1))||t.lessThan(i.pow(r-1).mul(-1)))throw new Error("Value must be in range [-2^".concat(r-1,", 2^").concat(r-1,"-1]"));if(!t.isInteger())throw new Error("Value must be an integer");t.lessThan(0)&&(t=t.add(i.pow(r))),a="i".concat(r)}switch(e){case 2:return"".concat(t.toBinary()).concat(a);case 8:return"".concat(t.toOctal()).concat(a);case 16:return"".concat(t.toHexadecimal()).concat(a);default:throw new Error("Base ".concat(e," not supported "))}}function $re(t,e){if(typeof e=="function")return e(t);if(!t.isFinite())return t.isNaN()?"NaN":t.gt(0)?"Infinity":"-Infinity";var{notation:r,precision:n,wordSize:i}=dP(e);switch(r){case"fixed":return qre(t,n);case"exponential":return C2(t,n);case"engineering":return zre(t,n);case"bin":return Gy(t,2,i);case"oct":return Gy(t,8,i);case"hex":return Gy(t,16,i);case"auto":{var a=M2(e==null?void 0:e.lowerExp,-3),s=M2(e==null?void 0:e.upperExp,5);if(t.isZero())return"0";var o,u=t.toSignificantDigits(n),l=u.e;return l>=a&&l=0?"+":"")+n.toString()}function C2(t,e){return e!==void 0?t.toExponential(e-1):t.toExponential()}function qre(t,e){return t.toFixed(e)}function M2(t,e){return Ct(t)?t:Mt(t)?t.toNumber():e}function Ure(t,e){var r=t.length-e.length,n=t.length;return t.substring(r,n)===e}function Rt(t,e){var r=Hre(t,e);return e&&typeof e=="object"&&"truncate"in e&&r.length>e.truncate?r.substring(0,e.truncate-3)+"...":r}function Hre(t,e){if(typeof t=="number")return Lu(t,e);if(Mt(t))return $re(t,e);if(Wre(t))return!e||e.fraction!=="decimal"?t.s*t.n+"/"+t.d:t.toString();if(Array.isArray(t))return vP(t,e);if(qn(t))return Vl(t);if(typeof t=="function")return t.syntax?String(t.syntax):"function";if(t&&typeof t=="object"){if(typeof t.format=="function")return t.format(e);if(t&&t.toString(e)!=={}.toString())return t.toString(e);var r=Object.keys(t).map(n=>Vl(n)+": "+Rt(t[n],e));return"{"+r.join(", ")+"}"}return String(t)}function Vl(t){for(var e=String(t),r="",n=0;n/g,">"),e}function vP(t,e){if(Array.isArray(t)){for(var r="[",n=t.length,i=0;ie?1:-1}function kt(t,e,r){if(!(this instanceof kt))throw new SyntaxError("Constructor must be called with the new operator");this.actual=t,this.expected=e,this.relation=r,this.message="Dimension mismatch ("+(Array.isArray(t)?"["+t.join(", ")+"]":t)+" "+(this.relation||"!=")+" "+(Array.isArray(e)?"["+e.join(", ")+"]":e)+")",this.stack=new Error().stack}kt.prototype=new RangeError;kt.prototype.constructor=RangeError;kt.prototype.name="DimensionError";kt.prototype.isDimensionError=!0;function Fa(t,e,r){if(!(this instanceof Fa))throw new SyntaxError("Constructor must be called with the new operator");this.index=t,arguments.length<3?(this.min=0,this.max=e):(this.min=e,this.max=r),this.min!==void 0&&this.index=this.max?this.message="Index out of range ("+this.index+" > "+(this.max-1)+")":this.message="Index out of range ("+this.index+")",this.stack=new Error().stack}Fa.prototype=new RangeError;Fa.prototype.constructor=RangeError;Fa.prototype.name="IndexError";Fa.prototype.isIndexError=!0;function Et(t){for(var e=[];Array.isArray(t);)e.push(t.length),t=t[0];return e}function gP(t,e,r){var n,i=t.length;if(i!==e[r])throw new kt(i,e[r]);if(r")}function O2(t,e){var r=e.length===0;if(r){if(Array.isArray(t))throw new kt(t.length,0)}else gP(t,e,0)}function xv(t,e){var r=t.isMatrix?t._size:Et(t),n=e._sourceSize;n.forEach((i,a)=>{if(i!==null&&i!==r[a])throw new kt(i,r[a])})}function gr(t,e){if(t!==void 0){if(!Ct(t)||!ot(t))throw new TypeError("Index must be an integer (value: "+t+")");if(t<0||typeof e=="number"&&t>=e)throw new Fa(t,e)}}function yc(t){for(var e=0;e=0,u=e%r===0;if(o)if(u)n[a]=-e/r;else throw new Error("Could not replace wildcard, since "+e+" is no multiple of "+-r);return n}function yP(t){return t.reduce((e,r)=>e*r,1)}function Vre(t,e){for(var r=t,n,i=e.length-1;i>0;i--){var a=e[i];n=[];for(var s=r.length/a,o=0;oe.test(r))}function F2(t,e){return Array.prototype.join.call(t,e)}function xc(t){if(!Array.isArray(t))throw new TypeError("Array input expected");if(t.length===0)return t;var e=[],r=0;e[0]={value:t[0],identifier:0};for(var n=1;n1)return t.slice(1).reduce(function(r,n){return _P(r,n,e,0)},t[0]);throw new Error("Wrong number of arguments in function concat")}function Yre(){for(var t=arguments.length,e=new Array(t),r=0;rh.length),i=Math.max(...n),a=new Array(i).fill(null),s=0;sa[c]&&(a[c]=o[l])}for(var f=0;f1||t[i]>e[a])throw new Error("shape missmatch: missmatch is found in arg with shape (".concat(t,") not possible to broadcast dimension ").concat(n," with size ").concat(t[i]," to size ").concat(e[a]))}}function R2(t,e){var r=Et(t);if(Wu(r,e))return t;Av(r,e);var n=Yre(r,e),i=n.length,a=[...Array(i-r.length).fill(1),...r],s=Gre(t);r.length!Zre(a)).every(a=>r[a]!==void 0);if(!n){var i=e.filter(a=>r[a]===void 0);throw new Error('Cannot create function "'.concat(t,'", ')+"some dependencies are missing: ".concat(i.map(a=>'"'.concat(a,'"')).join(", "),"."))}}function Zre(t){return t&&t[0]==="?"}function Kre(t){return t&&t[0]==="?"?t.slice(1):t}function ri(t,e){if(EP(t)&&DP(t,e))return t[e];throw typeof t[e]=="function"&&uw(t,e)?new Error('Cannot access method "'+e+'" as a property'):new Error('No access to property "'+e+'"')}function wc(t,e,r){if(EP(t)&&DP(t,e))return t[e]=r,r;throw new Error('No access to property "'+e+'"')}function Jre(t,e){return e in t}function DP(t,e){return!t||typeof t!="object"?!1:nt(ene,e)?!0:!(e in Object.prototype||e in Function.prototype)}function Qre(t,e){if(!uw(t,e))throw new Error('No access to method "'+e+'"');return t[e]}function uw(t,e){return t==null||typeof t[e]!="function"||nt(t,e)&&Object.getPrototypeOf&&e in Object.getPrototypeOf(t)?!1:nt(tne,e)?!0:!(e in Object.prototype||e in Function.prototype)}function EP(t){return typeof t=="object"&&t&&t.constructor===Object}var ene={length:!0,name:!0},tne={toString:!0,valueOf:!0,toLocaleString:!0};class Ig{constructor(e){this.wrappedObject=e}keys(){return Object.keys(this.wrappedObject).values()}get(e){return ri(this.wrappedObject,e)}set(e,r){return wc(this.wrappedObject,e,r),this}has(e){return Jre(this.wrappedObject,e)}entries(){return CP(this.keys(),e=>[e,this.get(e)])}forEach(e){for(var r of this.keys())e(this.get(r),r,this)}delete(e){delete this.wrappedObject[e]}clear(){for(var e of this.keys())this.delete(e)}get size(){return Object.keys(this.wrappedObject).length}}class NP{constructor(e,r,n){this.a=e,this.b=r,this.bKeys=n}get(e){return this.bKeys.has(e)?this.b.get(e):this.a.get(e)}set(e,r){return this.bKeys.has(e)?this.b.set(e,r):this.a.set(e,r),this}has(e){return this.b.has(e)||this.a.has(e)}keys(){return new Set([...this.a.keys(),...this.b.keys()])[Symbol.iterator]()}entries(){return CP(this.keys(),e=>[e,this.get(e)])}forEach(e){for(var r of this.keys())e(this.get(r),r,this)}delete(e){return this.bKeys.has(e)?this.b.delete(e):this.a.delete(e)}clear(){this.a.clear(),this.b.clear()}get size(){return[...this.keys()].length}}function CP(t,e){return{next:()=>{var r=t.next();return r.done?r:{value:e(r.value),done:!1}}}}function Hh(){return new Map}function nc(t){if(!t)return Hh();if(MP(t))return t;if(Fg(t))return new Ig(t);throw new Error("createMap can create maps from objects or Maps")}function rne(t){if(t instanceof Ig)return t.wrappedObject;var e={};for(var r of t.keys()){var n=t.get(r);wc(e,r,n)}return e}function MP(t){return t?t instanceof Map||t instanceof Ig||typeof t.set=="function"&&typeof t.get=="function"&&typeof t.keys=="function"&&typeof t.has=="function":!1}var TP=function(){return TP=Wl.create,Wl},nne=["?BigNumber","?Complex","?DenseMatrix","?Fraction"],ine=G("typed",nne,function(e){var{BigNumber:r,Complex:n,DenseMatrix:i,Fraction:a}=e,s=TP();return s.clear(),s.addTypes([{name:"number",test:Ct},{name:"Complex",test:Hs},{name:"BigNumber",test:Mt},{name:"Fraction",test:hd},{name:"Unit",test:Qi},{name:"identifier",test:o=>qn&&/^(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])(?:[0-9A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])*$/.test(o)},{name:"string",test:qn},{name:"Chain",test:cP},{name:"Array",test:sr},{name:"Matrix",test:dt},{name:"DenseMatrix",test:bv},{name:"SparseMatrix",test:Fu},{name:"Range",test:aw},{name:"Index",test:Og},{name:"boolean",test:sre},{name:"ResultSet",test:ore},{name:"Help",test:lP},{name:"function",test:ure},{name:"Date",test:lre},{name:"RegExp",test:cre},{name:"null",test:fre},{name:"undefined",test:hre},{name:"AccessorNode",test:Hu},{name:"ArrayNode",test:Ki},{name:"AssignmentNode",test:dre},{name:"BlockNode",test:pre},{name:"ConditionalNode",test:mre},{name:"ConstantNode",test:er},{name:"FunctionNode",test:Ho},{name:"FunctionAssignmentNode",test:dd},{name:"IndexNode",test:Oc},{name:"Node",test:pr},{name:"ObjectNode",test:Rg},{name:"OperatorNode",test:tn},{name:"ParenthesisNode",test:js},{name:"RangeNode",test:vre},{name:"RelationalNode",test:gre},{name:"SymbolNode",test:Sn},{name:"Map",test:MP},{name:"Object",test:Fg}]),s.addConversions([{from:"number",to:"BigNumber",convert:function(u){if(r||Xy(u),Tre(u)>15)throw new TypeError("Cannot implicitly convert a number with >15 significant digits to BigNumber (value: "+u+"). Use function bignumber(x) to convert to BigNumber.");return new r(u)}},{from:"number",to:"Complex",convert:function(u){return n||rm(u),new n(u,0)}},{from:"BigNumber",to:"Complex",convert:function(u){return n||rm(u),new n(u.toNumber(),0)}},{from:"Fraction",to:"BigNumber",convert:function(u){throw new TypeError("Cannot implicitly convert a Fraction to BigNumber or vice versa. Use function bignumber(x) to convert to BigNumber or fraction(x) to convert to Fraction.")}},{from:"Fraction",to:"Complex",convert:function(u){return n||rm(u),new n(u.valueOf(),0)}},{from:"number",to:"Fraction",convert:function(u){a||Zy(u);var l=new a(u);if(l.valueOf()!==u)throw new TypeError("Cannot implicitly convert a number to a Fraction when there will be a loss of precision (value: "+u+"). Use function fraction(x) to convert to Fraction.");return l}},{from:"string",to:"number",convert:function(u){var l=Number(u);if(isNaN(l))throw new Error('Cannot convert "'+u+'" to a number');return l}},{from:"string",to:"BigNumber",convert:function(u){r||Xy(u);try{return new r(u)}catch{throw new Error('Cannot convert "'+u+'" to BigNumber')}}},{from:"string",to:"Fraction",convert:function(u){a||Zy(u);try{return new a(u)}catch{throw new Error('Cannot convert "'+u+'" to Fraction')}}},{from:"string",to:"Complex",convert:function(u){n||rm(u);try{return new n(u)}catch{throw new Error('Cannot convert "'+u+'" to Complex')}}},{from:"boolean",to:"number",convert:function(u){return+u}},{from:"boolean",to:"BigNumber",convert:function(u){return r||Xy(u),new r(+u)}},{from:"boolean",to:"Fraction",convert:function(u){return a||Zy(u),new a(+u)}},{from:"boolean",to:"string",convert:function(u){return String(u)}},{from:"Array",to:"Matrix",convert:function(u){return i||ane(),new i(u)}},{from:"Matrix",to:"Array",convert:function(u){return u.valueOf()}}]),s.onMismatch=(o,u,l)=>{var c=s.createError(o,u,l);if(["wrongType","mismatch"].includes(c.data.category)&&u.length===1&&oa(u[0])&&l.some(h=>!h.params.includes(","))){var f=new TypeError("Function '".concat(o,"' doesn't apply to matrices. To call it ")+"elementwise on a matrix 'M', try 'map(M, ".concat(o,")'."));throw f.data=c.data,f}throw c},s.onMismatch=(o,u,l)=>{var c=s.createError(o,u,l);if(["wrongType","mismatch"].includes(c.data.category)&&u.length===1&&oa(u[0])&&l.some(h=>!h.params.includes(","))){var f=new TypeError("Function '".concat(o,"' doesn't apply to matrices. To call it ")+"elementwise on a matrix 'M', try 'map(M, ".concat(o,")'."));throw f.data=c.data,f}throw c},s});function Xy(t){throw new Error("Cannot convert value ".concat(t," into a BigNumber: no class 'BigNumber' provided"))}function rm(t){throw new Error("Cannot convert value ".concat(t," into a Complex number: no class 'Complex' provided"))}function ane(){throw new Error("Cannot convert array into a Matrix: no class 'DenseMatrix' provided")}function Zy(t){throw new Error("Cannot convert value ".concat(t," into a Fraction, no class 'Fraction' provided."))}var sne="ResultSet",one=[],une=G(sne,one,()=>{function t(e){if(!(this instanceof t))throw new SyntaxError("Constructor must be called with the new operator");this.entries=e||[]}return t.prototype.type="ResultSet",t.prototype.isResultSet=!0,t.prototype.valueOf=function(){return this.entries},t.prototype.toString=function(){return"["+this.entries.join(", ")+"]"},t.prototype.toJSON=function(){return{mathjs:"ResultSet",entries:this.entries}},t.fromJSON=function(e){return new t(e.entries)},t},{isClass:!0});/*! * decimal.js v10.4.3 * An arbitrary-precision Decimal type for JavaScript. * https://github.com/MikeMcl/decimal.js * Copyright (c) 2022 Michael Mclaughlin * MIT Licence - */var Yl=9e15,Xo=1e9,Qb="0123456789abcdef",Av="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Dv="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",e1={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Yl,maxE:Yl,crypto:!1},SR,Ls,At=!0,Bg="[DecimalError] ",Wo=Bg+"Invalid argument: ",_R=Bg+"Precision limit exceeded",AR=Bg+"crypto unavailable",DR="[object Decimal]",jn=Math.floor,fn=Math.pow,kre=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Lre=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,$re=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,NR=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Na=1e7,mt=7,zre=9007199254740991,qre=Av.length-1,t1=Dv.length-1,qe={toStringTag:DR};qe.absoluteValue=qe.abs=function(){var t=new this.constructor(this);return t.s<0&&(t.s=1),lt(t)};qe.ceil=function(){return lt(new this.constructor(this),this.e+1,2)};qe.clampedTo=qe.clamp=function(t,e){var r,n=this,i=n.constructor;if(t=new i(t),e=new i(e),!t.s||!e.s)return new i(NaN);if(t.gt(e))throw Error(Wo+e);return r=n.cmp(t),r<0?t:n.cmp(e)>0?e:new i(n)};qe.comparedTo=qe.cmp=function(t){var e,r,n,i,a=this,s=a.d,o=(t=new a.constructor(t)).d,u=a.s,l=t.s;if(!s||!o)return!u||!l?NaN:u!==l?u:s===o?0:!s^u<0?1:-1;if(!s[0]||!o[0])return s[0]?u:o[0]?-l:0;if(u!==l)return u;if(a.e!==t.e)return a.e>t.e^u<0?1:-1;for(n=s.length,i=o.length,e=0,r=no[e]^u<0?1:-1;return n===i?0:n>i^u<0?1:-1};qe.cosine=qe.cos=function(){var t,e,r=this,n=r.constructor;return r.d?r.d[0]?(t=n.precision,e=n.rounding,n.precision=t+Math.max(r.e,r.sd())+mt,n.rounding=1,r=Ure(n,OR(n,r)),n.precision=t,n.rounding=e,lt(Ls==2||Ls==3?r.neg():r,t,e,!0)):new n(1):new n(NaN)};qe.cubeRoot=qe.cbrt=function(){var t,e,r,n,i,a,s,o,u,l,c=this,f=c.constructor;if(!c.isFinite()||c.isZero())return new f(c);for(At=!1,a=c.s*fn(c.s*c,1/3),!a||Math.abs(a)==1/0?(r=Tn(c.d),t=c.e,(a=(t-r.length+1)%3)&&(r+=a==1||a==-2?"0":"00"),a=fn(r,1/3),t=jn((t+1)/3)-(t%3==(t<0?-1:2)),a==1/0?r="5e"+t:(r=a.toExponential(),r=r.slice(0,r.indexOf("e")+1)+t),n=new f(r),n.s=c.s):n=new f(a.toString()),s=(t=f.precision)+3;;)if(o=n,u=o.times(o).times(o),l=u.plus(c),n=Nr(l.plus(c).times(o),l.plus(u),s+2,1),Tn(o.d).slice(0,s)===(r=Tn(n.d)).slice(0,s))if(r=r.slice(s-3,s+1),r=="9999"||!i&&r=="4999"){if(!i&&(lt(o,t+1,0),o.times(o).times(o).eq(c))){n=o;break}s+=4,i=1}else{(!+r||!+r.slice(1)&&r.charAt(0)=="5")&&(lt(n,t+1,1),e=!n.times(n).times(n).eq(c));break}return At=!0,lt(n,t,f.rounding,e)};qe.decimalPlaces=qe.dp=function(){var t,e=this.d,r=NaN;if(e){if(t=e.length-1,r=(t-jn(this.e/mt))*mt,t=e[t],t)for(;t%10==0;t/=10)r--;r<0&&(r=0)}return r};qe.dividedBy=qe.div=function(t){return Nr(this,new this.constructor(t))};qe.dividedToIntegerBy=qe.divToInt=function(t){var e=this,r=e.constructor;return lt(Nr(e,new r(t),0,1,1),r.precision,r.rounding)};qe.equals=qe.eq=function(t){return this.cmp(t)===0};qe.floor=function(){return lt(new this.constructor(this),this.e+1,3)};qe.greaterThan=qe.gt=function(t){return this.cmp(t)>0};qe.greaterThanOrEqualTo=qe.gte=function(t){var e=this.cmp(t);return e==1||e===0};qe.hyperbolicCosine=qe.cosh=function(){var t,e,r,n,i,a=this,s=a.constructor,o=new s(1);if(!a.isFinite())return new s(a.s?1/0:NaN);if(a.isZero())return o;r=s.precision,n=s.rounding,s.precision=r+Math.max(a.e,a.sd())+4,s.rounding=1,i=a.d.length,i<32?(t=Math.ceil(i/3),e=(1/Lg(4,t)).toString()):(t=16,e="2.3283064365386962890625e-10"),a=xc(s,1,a.times(e),new s(1),!0);for(var u,l=t,c=new s(8);l--;)u=a.times(a),a=o.minus(u.times(c.minus(u.times(c))));return lt(a,s.precision=r,s.rounding=n,!0)};qe.hyperbolicSine=qe.sinh=function(){var t,e,r,n,i=this,a=i.constructor;if(!i.isFinite()||i.isZero())return new a(i);if(e=a.precision,r=a.rounding,a.precision=e+Math.max(i.e,i.sd())+4,a.rounding=1,n=i.d.length,n<3)i=xc(a,2,i,i,!0);else{t=1.4*Math.sqrt(n),t=t>16?16:t|0,i=i.times(1/Lg(5,t)),i=xc(a,2,i,i,!0);for(var s,o=new a(5),u=new a(16),l=new a(20);t--;)s=i.times(i),i=i.times(o.plus(s.times(u.times(s).plus(l))))}return a.precision=e,a.rounding=r,lt(i,e,r,!0)};qe.hyperbolicTangent=qe.tanh=function(){var t,e,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(t=n.precision,e=n.rounding,n.precision=t+7,n.rounding=1,Nr(r.sinh(),r.cosh(),n.precision=t,n.rounding=e)):new n(r.s)};qe.inverseCosine=qe.acos=function(){var t,e=this,r=e.constructor,n=e.abs().cmp(1),i=r.precision,a=r.rounding;return n!==-1?n===0?e.isNeg()?Aa(r,i,a):new r(0):new r(NaN):e.isZero()?Aa(r,i+4,a).times(.5):(r.precision=i+6,r.rounding=1,e=e.asin(),t=Aa(r,i+4,a).times(.5),r.precision=i,r.rounding=a,t.minus(e))};qe.inverseHyperbolicCosine=qe.acosh=function(){var t,e,r=this,n=r.constructor;return r.lte(1)?new n(r.eq(1)?0:NaN):r.isFinite()?(t=n.precision,e=n.rounding,n.precision=t+Math.max(Math.abs(r.e),r.sd())+4,n.rounding=1,At=!1,r=r.times(r).minus(1).sqrt().plus(r),At=!0,n.precision=t,n.rounding=e,r.ln()):new n(r)};qe.inverseHyperbolicSine=qe.asinh=function(){var t,e,r=this,n=r.constructor;return!r.isFinite()||r.isZero()?new n(r):(t=n.precision,e=n.rounding,n.precision=t+2*Math.max(Math.abs(r.e),r.sd())+6,n.rounding=1,At=!1,r=r.times(r).plus(1).sqrt().plus(r),At=!0,n.precision=t,n.rounding=e,r.ln())};qe.inverseHyperbolicTangent=qe.atanh=function(){var t,e,r,n,i=this,a=i.constructor;return i.isFinite()?i.e>=0?new a(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(t=a.precision,e=a.rounding,n=i.sd(),Math.max(n,t)<2*-i.e-1?lt(new a(i),t,e,!0):(a.precision=r=n-i.e,i=Nr(i.plus(1),new a(1).minus(i),r+t,1),a.precision=t+4,a.rounding=1,i=i.ln(),a.precision=t,a.rounding=e,i.times(.5))):new a(NaN)};qe.inverseSine=qe.asin=function(){var t,e,r,n,i=this,a=i.constructor;return i.isZero()?new a(i):(e=i.abs().cmp(1),r=a.precision,n=a.rounding,e!==-1?e===0?(t=Aa(a,r+4,n).times(.5),t.s=i.s,t):new a(NaN):(a.precision=r+6,a.rounding=1,i=i.div(new a(1).minus(i.times(i)).sqrt().plus(1)).atan(),a.precision=r,a.rounding=n,i.times(2)))};qe.inverseTangent=qe.atan=function(){var t,e,r,n,i,a,s,o,u,l=this,c=l.constructor,f=c.precision,h=c.rounding;if(l.isFinite()){if(l.isZero())return new c(l);if(l.abs().eq(1)&&f+4<=t1)return s=Aa(c,f+4,h).times(.25),s.s=l.s,s}else{if(!l.s)return new c(NaN);if(f+4<=t1)return s=Aa(c,f+4,h).times(.5),s.s=l.s,s}for(c.precision=o=f+10,c.rounding=1,r=Math.min(28,o/mt+2|0),t=r;t;--t)l=l.div(l.times(l).plus(1).sqrt().plus(1));for(At=!1,e=Math.ceil(o/mt),n=1,u=l.times(l),s=new c(l),i=l;t!==-1;)if(i=i.times(u),a=s.minus(i.div(n+=2)),i=i.times(u),s=a.plus(i.div(n+=2)),s.d[e]!==void 0)for(t=e;s.d[t]===a.d[t]&&t--;);return r&&(s=s.times(2<this.d.length-2};qe.isNaN=function(){return!this.s};qe.isNegative=qe.isNeg=function(){return this.s<0};qe.isPositive=qe.isPos=function(){return this.s>0};qe.isZero=function(){return!!this.d&&this.d[0]===0};qe.lessThan=qe.lt=function(t){return this.cmp(t)<0};qe.lessThanOrEqualTo=qe.lte=function(t){return this.cmp(t)<1};qe.logarithm=qe.log=function(t){var e,r,n,i,a,s,o,u,l=this,c=l.constructor,f=c.precision,h=c.rounding,p=5;if(t==null)t=new c(10),e=!0;else{if(t=new c(t),r=t.d,t.s<0||!r||!r[0]||t.eq(1))return new c(NaN);e=t.eq(10)}if(r=l.d,l.s<0||!r||!r[0]||l.eq(1))return new c(r&&!r[0]?-1/0:l.s!=1?NaN:r?0:1/0);if(e)if(r.length>1)a=!0;else{for(i=r[0];i%10===0;)i/=10;a=i!==1}if(At=!1,o=f+p,s=Bo(l,o),n=e?Nv(c,o+10):Bo(t,o),u=Nr(s,n,o,1),Wh(u.d,i=f,h))do if(o+=10,s=Bo(l,o),n=e?Nv(c,o+10):Bo(t,o),u=Nr(s,n,o,1),!a){+Tn(u.d).slice(i+1,i+15)+1==1e14&&(u=lt(u,f+1,0));break}while(Wh(u.d,i+=10,h));return At=!0,lt(u,f,h)};qe.minus=qe.sub=function(t){var e,r,n,i,a,s,o,u,l,c,f,h,p=this,g=p.constructor;if(t=new g(t),!p.d||!t.d)return!p.s||!t.s?t=new g(NaN):p.d?t.s=-t.s:t=new g(t.d||p.s!==t.s?p:NaN),t;if(p.s!=t.s)return t.s=-t.s,p.plus(t);if(l=p.d,h=t.d,o=g.precision,u=g.rounding,!l[0]||!h[0]){if(h[0])t.s=-t.s;else if(l[0])t=new g(p);else return new g(u===3?-0:0);return At?lt(t,o,u):t}if(r=jn(t.e/mt),c=jn(p.e/mt),l=l.slice(),a=c-r,a){for(f=a<0,f?(e=l,a=-a,s=h.length):(e=h,r=c,s=l.length),n=Math.max(Math.ceil(o/mt),s)+2,a>n&&(a=n,e.length=1),e.reverse(),n=a;n--;)e.push(0);e.reverse()}else{for(n=l.length,s=h.length,f=n0;--n)l[s++]=0;for(n=h.length;n>a;){if(l[--n]s?a+1:s+1,i>s&&(i=s,r.length=1),r.reverse();i--;)r.push(0);r.reverse()}for(s=l.length,i=c.length,s-i<0&&(i=s,r=c,c=l,l=r),e=0;i;)e=(l[--i]=l[i]+c[i]+e)/Na|0,l[i]%=Na;for(e&&(l.unshift(e),++n),s=l.length;l[--s]==0;)l.pop();return t.d=l,t.e=kg(l,n),At?lt(t,o,u):t};qe.precision=qe.sd=function(t){var e,r=this;if(t!==void 0&&t!==!!t&&t!==1&&t!==0)throw Error(Wo+t);return r.d?(e=ER(r.d),t&&r.e+1>e&&(e=r.e+1)):e=NaN,e};qe.round=function(){var t=this,e=t.constructor;return lt(new e(t),t.e+1,e.rounding)};qe.sine=qe.sin=function(){var t,e,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(t=n.precision,e=n.rounding,n.precision=t+Math.max(r.e,r.sd())+mt,n.rounding=1,r=Wre(n,OR(n,r)),n.precision=t,n.rounding=e,lt(Ls>2?r.neg():r,t,e,!0)):new n(NaN)};qe.squareRoot=qe.sqrt=function(){var t,e,r,n,i,a,s=this,o=s.d,u=s.e,l=s.s,c=s.constructor;if(l!==1||!o||!o[0])return new c(!l||l<0&&(!o||o[0])?NaN:o?s:1/0);for(At=!1,l=Math.sqrt(+s),l==0||l==1/0?(e=Tn(o),(e.length+u)%2==0&&(e+="0"),l=Math.sqrt(e),u=jn((u+1)/2)-(u<0||u%2),l==1/0?e="5e"+u:(e=l.toExponential(),e=e.slice(0,e.indexOf("e")+1)+u),n=new c(e)):n=new c(l.toString()),r=(u=c.precision)+3;;)if(a=n,n=a.plus(Nr(s,a,r+2,1)).times(.5),Tn(a.d).slice(0,r)===(e=Tn(n.d)).slice(0,r))if(e=e.slice(r-3,r+1),e=="9999"||!i&&e=="4999"){if(!i&&(lt(a,u+1,0),a.times(a).eq(s))){n=a;break}r+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(lt(n,u+1,1),t=!n.times(n).eq(s));break}return At=!0,lt(n,u,c.rounding,t)};qe.tangent=qe.tan=function(){var t,e,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(t=n.precision,e=n.rounding,n.precision=t+10,n.rounding=1,r=r.sin(),r.s=1,r=Nr(r,new n(1).minus(r.times(r)).sqrt(),t+10,0),n.precision=t,n.rounding=e,lt(Ls==2||Ls==4?r.neg():r,t,e,!0)):new n(NaN)};qe.times=qe.mul=function(t){var e,r,n,i,a,s,o,u,l,c=this,f=c.constructor,h=c.d,p=(t=new f(t)).d;if(t.s*=c.s,!h||!h[0]||!p||!p[0])return new f(!t.s||h&&!h[0]&&!p||p&&!p[0]&&!h?NaN:!h||!p?t.s/0:t.s*0);for(r=jn(c.e/mt)+jn(t.e/mt),u=h.length,l=p.length,u=0;){for(e=0,i=u+n;i>n;)o=a[i]+p[n]*h[i-n-1]+e,a[i--]=o%Na|0,e=o/Na|0;a[i]=(a[i]+e)%Na|0}for(;!a[--s];)a.pop();return e?++r:a.shift(),t.d=a,t.e=kg(a,r),At?lt(t,f.precision,f.rounding):t};qe.toBinary=function(t,e){return sw(this,2,t,e)};qe.toDecimalPlaces=qe.toDP=function(t,e){var r=this,n=r.constructor;return r=new n(r),t===void 0?r:(_i(t,0,Xo),e===void 0?e=n.rounding:_i(e,0,8),lt(r,t+r.e+1,e))};qe.toExponential=function(t,e){var r,n=this,i=n.constructor;return t===void 0?r=Ka(n,!0):(_i(t,0,Xo),e===void 0?e=i.rounding:_i(e,0,8),n=lt(new i(n),t+1,e),r=Ka(n,!0,t+1)),n.isNeg()&&!n.isZero()?"-"+r:r};qe.toFixed=function(t,e){var r,n,i=this,a=i.constructor;return t===void 0?r=Ka(i):(_i(t,0,Xo),e===void 0?e=a.rounding:_i(e,0,8),n=lt(new a(i),t+i.e+1,e),r=Ka(n,!1,t+n.e+1)),i.isNeg()&&!i.isZero()?"-"+r:r};qe.toFraction=function(t){var e,r,n,i,a,s,o,u,l,c,f,h,p=this,g=p.d,m=p.constructor;if(!g)return new m(p);if(l=r=new m(1),n=u=new m(0),e=new m(n),a=e.e=ER(g)-p.e-1,s=a%mt,e.d[0]=fn(10,s<0?mt+s:s),t==null)t=a>0?e:l;else{if(o=new m(t),!o.isInt()||o.lt(l))throw Error(Wo+o);t=o.gt(e)?a>0?e:l:o}for(At=!1,o=new m(Tn(g)),c=m.precision,m.precision=a=g.length*mt*2;f=Nr(o,e,0,1,1),i=r.plus(f.times(n)),i.cmp(t)!=1;)r=n,n=i,i=l,l=u.plus(f.times(i)),u=i,i=e,e=o.minus(f.times(i)),o=i;return i=Nr(t.minus(r),n,0,1,1),u=u.plus(i.times(l)),r=r.plus(i.times(n)),u.s=l.s=p.s,h=Nr(l,n,a,1).minus(p).abs().cmp(Nr(u,r,a,1).minus(p).abs())<1?[l,n]:[u,r],m.precision=c,At=!0,h};qe.toHexadecimal=qe.toHex=function(t,e){return sw(this,16,t,e)};qe.toNearest=function(t,e){var r=this,n=r.constructor;if(r=new n(r),t==null){if(!r.d)return r;t=new n(1),e=n.rounding}else{if(t=new n(t),e===void 0?e=n.rounding:_i(e,0,8),!r.d)return t.s?r:t;if(!t.d)return t.s&&(t.s=r.s),t}return t.d[0]?(At=!1,r=Nr(r,t,0,e,1).times(t),At=!0,lt(r)):(t.s=r.s,r=t),r};qe.toNumber=function(){return+this};qe.toOctal=function(t,e){return sw(this,8,t,e)};qe.toPower=qe.pow=function(t){var e,r,n,i,a,s,o=this,u=o.constructor,l=+(t=new u(t));if(!o.d||!t.d||!o.d[0]||!t.d[0])return new u(fn(+o,l));if(o=new u(o),o.eq(1))return o;if(n=u.precision,a=u.rounding,t.eq(1))return lt(o,n,a);if(e=jn(t.e/mt),e>=t.d.length-1&&(r=l<0?-l:l)<=zre)return i=CR(u,o,r,n),t.s<0?new u(1).div(i):lt(i,n,a);if(s=o.s,s<0){if(eu.maxE+1||e0?s/0:0):(At=!1,u.rounding=o.s=1,r=Math.min(12,(e+"").length),i=r1(t.times(Bo(o,n+r)),n),i.d&&(i=lt(i,n+5,1),Wh(i.d,n,a)&&(e=n+10,i=lt(r1(t.times(Bo(o,e+r)),e),e+5,1),+Tn(i.d).slice(n+1,n+15)+1==1e14&&(i=lt(i,n+1,0)))),i.s=s,At=!0,u.rounding=a,lt(i,n,a))};qe.toPrecision=function(t,e){var r,n=this,i=n.constructor;return t===void 0?r=Ka(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(_i(t,1,Xo),e===void 0?e=i.rounding:_i(e,0,8),n=lt(new i(n),t,e),r=Ka(n,t<=n.e||n.e<=i.toExpNeg,t)),n.isNeg()&&!n.isZero()?"-"+r:r};qe.toSignificantDigits=qe.toSD=function(t,e){var r=this,n=r.constructor;return t===void 0?(t=n.precision,e=n.rounding):(_i(t,1,Xo),e===void 0?e=n.rounding:_i(e,0,8)),lt(new n(r),t,e)};qe.toString=function(){var t=this,e=t.constructor,r=Ka(t,t.e<=e.toExpNeg||t.e>=e.toExpPos);return t.isNeg()&&!t.isZero()?"-"+r:r};qe.truncated=qe.trunc=function(){return lt(new this.constructor(this),this.e+1,1)};qe.valueOf=qe.toJSON=function(){var t=this,e=t.constructor,r=Ka(t,t.e<=e.toExpNeg||t.e>=e.toExpPos);return t.isNeg()?"-"+r:r};function Tn(t){var e,r,n,i=t.length-1,a="",s=t[0];if(i>0){for(a+=s,e=1;er)throw Error(Wo+t)}function Wh(t,e,r,n){var i,a,s,o;for(a=t[0];a>=10;a/=10)--e;return--e<0?(e+=mt,i=0):(i=Math.ceil((e+1)/mt),e%=mt),a=fn(10,mt-e),o=t[i]%a|0,n==null?e<3?(e==0?o=o/100|0:e==1&&(o=o/10|0),s=r<4&&o==99999||r>3&&o==49999||o==5e4||o==0):s=(r<4&&o+1==a||r>3&&o+1==a/2)&&(t[i+1]/a/100|0)==fn(10,e-2)-1||(o==a/2||o==0)&&(t[i+1]/a/100|0)==0:e<4?(e==0?o=o/1e3|0:e==1?o=o/100|0:e==2&&(o=o/10|0),s=(n||r<4)&&o==9999||!n&&r>3&&o==4999):s=((n||r<4)&&o+1==a||!n&&r>3&&o+1==a/2)&&(t[i+1]/a/1e3|0)==fn(10,e-3)-1,s}function Bm(t,e,r){for(var n,i=[0],a,s=0,o=t.length;sr-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/r|0,i[n]%=r)}return i.reverse()}function Ure(t,e){var r,n,i;if(e.isZero())return e;n=e.d.length,n<32?(r=Math.ceil(n/3),i=(1/Lg(4,r)).toString()):(r=16,i="2.3283064365386962890625e-10"),t.precision+=r,e=xc(t,1,e.times(i),new t(1));for(var a=r;a--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return t.precision-=r,e}var Nr=function(){function t(n,i,a){var s,o=0,u=n.length;for(n=n.slice();u--;)s=n[u]*i+o,n[u]=s%a|0,o=s/a|0;return o&&n.unshift(o),n}function e(n,i,a,s){var o,u;if(a!=s)u=a>s?1:-1;else for(o=u=0;oi[o]?1:-1;break}return u}function r(n,i,a,s){for(var o=0;a--;)n[a]-=o,o=n[a]1;)n.shift()}return function(n,i,a,s,o,u){var l,c,f,h,p,g,m,b,y,S,x,_,A,w,C,E,N,M,O,F,q=n.constructor,V=n.s==i.s?1:-1,H=n.d,B=i.d;if(!H||!H[0]||!B||!B[0])return new q(!n.s||!i.s||(H?B&&H[0]==B[0]:!B)?NaN:H&&H[0]==0||!B?V*0:V/0);for(u?(p=1,c=n.e-i.e):(u=Na,p=mt,c=jn(n.e/p)-jn(i.e/p)),O=B.length,N=H.length,y=new q(V),S=y.d=[],f=0;B[f]==(H[f]||0);f++);if(B[f]>(H[f]||0)&&c--,a==null?(w=a=q.precision,s=q.rounding):o?w=a+(n.e-i.e)+1:w=a,w<0)S.push(1),g=!0;else{if(w=w/p+2|0,f=0,O==1){for(h=0,B=B[0],w++;(f1&&(B=t(B,h,u),H=t(H,h,u),O=B.length,N=H.length),E=O,x=H.slice(0,O),_=x.length;_=u/2&&++M;do h=0,l=e(B,x,O,_),l<0?(A=x[0],O!=_&&(A=A*u+(x[1]||0)),h=A/M|0,h>1?(h>=u&&(h=u-1),m=t(B,h,u),b=m.length,_=x.length,l=e(m,x,b,_),l==1&&(h--,r(m,O=10;h/=10)f++;y.e=f+c*p-1,lt(y,o?a+y.e+1:a,s,g)}return y}}();function lt(t,e,r,n){var i,a,s,o,u,l,c,f,h,p=t.constructor;e:if(e!=null){if(f=t.d,!f)return t;for(i=1,o=f[0];o>=10;o/=10)i++;if(a=e-i,a<0)a+=mt,s=e,c=f[h=0],u=c/fn(10,i-s-1)%10|0;else if(h=Math.ceil((a+1)/mt),o=f.length,h>=o)if(n){for(;o++<=h;)f.push(0);c=u=0,i=1,a%=mt,s=a-mt+1}else break e;else{for(c=o=f[h],i=1;o>=10;o/=10)i++;a%=mt,s=a-mt+i,u=s<0?0:c/fn(10,i-s-1)%10|0}if(n=n||e<0||f[h+1]!==void 0||(s<0?c:c%fn(10,i-s-1)),l=r<4?(u||n)&&(r==0||r==(t.s<0?3:2)):u>5||u==5&&(r==4||n||r==6&&(a>0?s>0?c/fn(10,i-s):0:f[h-1])%10&1||r==(t.s<0?8:7)),e<1||!f[0])return f.length=0,l?(e-=t.e+1,f[0]=fn(10,(mt-e%mt)%mt),t.e=-e||0):f[0]=t.e=0,t;if(a==0?(f.length=h,o=1,h--):(f.length=h+1,o=fn(10,mt-a),f[h]=s>0?(c/fn(10,i-s)%fn(10,s)|0)*o:0),l)for(;;)if(h==0){for(a=1,s=f[0];s>=10;s/=10)a++;for(s=f[0]+=o,o=1;s>=10;s/=10)o++;a!=o&&(t.e++,f[0]==Na&&(f[0]=1));break}else{if(f[h]+=o,f[h]!=Na)break;f[h--]=0,o=1}for(a=f.length;f[--a]===0;)f.pop()}return At&&(t.e>p.maxE?(t.d=null,t.e=NaN):t.e0?a=a.charAt(0)+"."+a.slice(1)+No(n):s>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(t.e<0?"e":"e+")+t.e):i<0?(a="0."+No(-i-1)+a,r&&(n=r-s)>0&&(a+=No(n))):i>=s?(a+=No(i+1-s),r&&(n=r-i-1)>0&&(a=a+"."+No(n))):((n=i+1)0&&(i+1===s&&(a+="."),a+=No(n))),a}function kg(t,e){var r=t[0];for(e*=mt;r>=10;r/=10)e++;return e}function Nv(t,e,r){if(e>qre)throw At=!0,r&&(t.precision=r),Error(_R);return lt(new t(Av),e,1,!0)}function Aa(t,e,r){if(e>t1)throw Error(_R);return lt(new t(Dv),e,r,!0)}function ER(t){var e=t.length-1,r=e*mt+1;if(e=t[e],e){for(;e%10==0;e/=10)r--;for(e=t[0];e>=10;e/=10)r++}return r}function No(t){for(var e="";t--;)e+="0";return e}function CR(t,e,r,n){var i,a=new t(1),s=Math.ceil(n/mt+4);for(At=!1;;){if(r%2&&(a=a.times(e),F2(a.d,s)&&(i=!0)),r=jn(r/2),r===0){r=a.d.length-1,i&&a.d[r]===0&&++a.d[r];break}e=e.times(e),F2(e.d,s)}return At=!0,a}function O2(t){return t.d[t.d.length-1]&1}function MR(t,e,r){for(var n,i=new t(e[0]),a=0;++a17)return new h(t.d?t.d[0]?t.s<0?0:1/0:1:t.s?t.s<0?0:t:NaN);for(e==null?(At=!1,u=g):u=e,o=new h(.03125);t.e>-2;)t=t.times(o),f+=5;for(n=Math.log(fn(2,f))/Math.LN10*2+5|0,u+=n,r=a=s=new h(1),h.precision=u;;){if(a=lt(a.times(t),u,1),r=r.times(++c),o=s.plus(Nr(a,r,u,1)),Tn(o.d).slice(0,u)===Tn(s.d).slice(0,u)){for(i=f;i--;)s=lt(s.times(s),u,1);if(e==null)if(l<3&&Wh(s.d,u-n,p,l))h.precision=u+=10,r=a=o=new h(1),c=0,l++;else return lt(s,h.precision=g,p,At=!0);else return h.precision=g,s}s=o}}function Bo(t,e){var r,n,i,a,s,o,u,l,c,f,h,p=1,g=10,m=t,b=m.d,y=m.constructor,S=y.rounding,x=y.precision;if(m.s<0||!b||!b[0]||!m.e&&b[0]==1&&b.length==1)return new y(b&&!b[0]?-1/0:m.s!=1?NaN:b?0:m);if(e==null?(At=!1,c=x):c=e,y.precision=c+=g,r=Tn(b),n=r.charAt(0),Math.abs(a=m.e)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)m=m.times(t),r=Tn(m.d),n=r.charAt(0),p++;a=m.e,n>1?(m=new y("0."+r),a++):m=new y(n+"."+r.slice(1))}else return l=Nv(y,c+2,x).times(a+""),m=Bo(new y(n+"."+r.slice(1)),c-g).plus(l),y.precision=x,e==null?lt(m,x,S,At=!0):m;for(f=m,u=s=m=Nr(m.minus(1),m.plus(1),c,1),h=lt(m.times(m),c,1),i=3;;){if(s=lt(s.times(h),c,1),l=u.plus(Nr(s,new y(i),c,1)),Tn(l.d).slice(0,c)===Tn(u.d).slice(0,c))if(u=u.times(2),a!==0&&(u=u.plus(Nv(y,c+2,x).times(a+""))),u=Nr(u,new y(p),c,1),e==null)if(Wh(u.d,c-g,S,o))y.precision=c+=g,l=s=m=Nr(f.minus(1),f.plus(1),c,1),h=lt(m.times(m),c,1),i=o=1;else return lt(u,y.precision=x,S,At=!0);else return y.precision=x,u;u=l,i+=2}}function TR(t){return String(t.s*t.s/0)}function n1(t,e){var r,n,i;for((r=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(r<0&&(r=n),r+=+e.slice(n+1),e=e.substring(0,n)):r<0&&(r=e.length),n=0;e.charCodeAt(n)===48;n++);for(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(n,i),e){if(i-=n,t.e=r=r-n-1,t.d=[],n=(r+1)%mt,r<0&&(n+=mt),nt.constructor.maxE?(t.d=null,t.e=NaN):t.e-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),NR.test(e))return n1(t,e)}else if(e==="Infinity"||e==="NaN")return+e||(t.s=NaN),t.e=NaN,t.d=null,t;if(Lre.test(e))r=16,e=e.toLowerCase();else if(kre.test(e))r=2;else if($re.test(e))r=8;else throw Error(Wo+e);for(a=e.search(/p/i),a>0?(u=+e.slice(a+1),e=e.substring(2,a)):e=e.slice(2),a=e.indexOf("."),s=a>=0,n=t.constructor,s&&(e=e.replace(".",""),o=e.length,a=o-a,i=CR(n,new n(r),a,a*2)),l=Bm(e,r,Na),c=l.length-1,a=c;l[a]===0;--a)l.pop();return a<0?new n(t.s*0):(t.e=kg(l,c),t.d=l,At=!1,s&&(t=Nr(t,i,o*4)),u&&(t=t.times(Math.abs(u)<54?fn(2,u):Vo.pow(2,u))),At=!0,t)}function Wre(t,e){var r,n=e.d.length;if(n<3)return e.isZero()?e:xc(t,2,e,e);r=1.4*Math.sqrt(n),r=r>16?16:r|0,e=e.times(1/Lg(5,r)),e=xc(t,2,e,e);for(var i,a=new t(5),s=new t(16),o=new t(20);r--;)i=e.times(e),e=e.times(a.plus(i.times(s.times(i).minus(o))));return e}function xc(t,e,r,n,i){var a,s,o,u,l=t.precision,c=Math.ceil(l/mt);for(At=!1,u=r.times(r),o=new t(n);;){if(s=Nr(o.times(u),new t(e++*e++),l,1),o=i?n.plus(s):n.minus(s),n=Nr(s.times(u),new t(e++*e++),l,1),s=o.plus(n),s.d[c]!==void 0){for(a=c;s.d[a]===o.d[a]&&a--;);if(a==-1)break}a=o,o=n,n=s,s=a}return At=!0,s.d.length=c+1,s}function Lg(t,e){for(var r=t;--e;)r*=t;return r}function OR(t,e){var r,n=e.s<0,i=Aa(t,t.precision,1),a=i.times(.5);if(e=e.abs(),e.lte(a))return Ls=n?4:1,e;if(r=e.divToInt(i),r.isZero())Ls=n?3:2;else{if(e=e.minus(r.times(i)),e.lte(a))return Ls=O2(r)?n?2:3:n?4:1,e;Ls=O2(r)?n?1:4:n?3:2}return e.minus(i).abs()}function sw(t,e,r,n){var i,a,s,o,u,l,c,f,h,p=t.constructor,g=r!==void 0;if(g?(_i(r,1,Xo),n===void 0?n=p.rounding:_i(n,0,8)):(r=p.precision,n=p.rounding),!t.isFinite())c=TR(t);else{for(c=Ka(t),s=c.indexOf("."),g?(i=2,e==16?r=r*4-3:e==8&&(r=r*3-2)):i=e,s>=0&&(c=c.replace(".",""),h=new p(1),h.e=c.length-s,h.d=Bm(Ka(h),10,i),h.e=h.d.length),f=Bm(c,10,i),a=u=f.length;f[--u]==0;)f.pop();if(!f[0])c=g?"0p+0":"0";else{if(s<0?a--:(t=new p(t),t.d=f,t.e=a,t=Nr(t,h,r,n,0,i),f=t.d,a=t.e,l=SR),s=f[r],o=i/2,l=l||f[r+1]!==void 0,l=n<4?(s!==void 0||l)&&(n===0||n===(t.s<0?3:2)):s>o||s===o&&(n===4||l||n===6&&f[r-1]&1||n===(t.s<0?8:7)),f.length=r,l)for(;++f[--r]>i-1;)f[r]=0,r||(++a,f.unshift(1));for(u=f.length;!f[u-1];--u);for(s=0,c="";s1)if(e==16||e==8){for(s=e==16?4:3,--u;u%s;u++)c+="0";for(f=Bm(c,i,e),u=f.length;!f[u-1];--u);for(s=1,c="1.";su)for(a-=u;a--;)c+="0";else ae)return t.length=e,!0}function Vre(t){return new this(t).abs()}function Yre(t){return new this(t).acos()}function jre(t){return new this(t).acosh()}function Gre(t,e){return new this(t).plus(e)}function Xre(t){return new this(t).asin()}function Zre(t){return new this(t).asinh()}function Kre(t){return new this(t).atan()}function Jre(t){return new this(t).atanh()}function Qre(t,e){t=new this(t),e=new this(e);var r,n=this.precision,i=this.rounding,a=n+4;return!t.s||!e.s?r=new this(NaN):!t.d&&!e.d?(r=Aa(this,a,1).times(e.s>0?.25:.75),r.s=t.s):!e.d||t.isZero()?(r=e.s<0?Aa(this,n,i):new this(0),r.s=t.s):!t.d||e.isZero()?(r=Aa(this,a,1).times(.5),r.s=t.s):e.s<0?(this.precision=a,this.rounding=1,r=this.atan(Nr(t,e,a,1)),e=Aa(this,a,1),this.precision=n,this.rounding=i,r=t.s<0?r.minus(e):r.plus(e)):r=this.atan(Nr(t,e,a,1)),r}function ene(t){return new this(t).cbrt()}function tne(t){return lt(t=new this(t),t.e+1,2)}function rne(t,e,r){return new this(t).clamp(e,r)}function nne(t){if(!t||typeof t!="object")throw Error(Bg+"Object expected");var e,r,n,i=t.defaults===!0,a=["precision",1,Xo,"rounding",0,8,"toExpNeg",-Yl,0,"toExpPos",0,Yl,"maxE",0,Yl,"minE",-Yl,0,"modulo",0,9];for(e=0;e=a[e+1]&&n<=a[e+2])this[r]=n;else throw Error(Wo+r+": "+n);if(r="crypto",i&&(this[r]=e1[r]),(n=t[r])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[r]=!0;else throw Error(AR);else this[r]=!1;else throw Error(Wo+r+": "+n);return this}function ine(t){return new this(t).cos()}function ane(t){return new this(t).cosh()}function FR(t){var e,r,n;function i(a){var s,o,u,l=this;if(!(l instanceof i))return new i(a);if(l.constructor=i,P2(a)){l.s=a.s,At?!a.d||a.e>i.maxE?(l.e=NaN,l.d=null):a.e=10;o/=10)s++;At?s>i.maxE?(l.e=NaN,l.d=null):s=429e7?e[a]=crypto.getRandomValues(new Uint32Array(1))[0]:o[a++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);a=214e7?crypto.randomBytes(4).copy(e,a):(o.push(i%1e7),a+=4);a=n/4}else throw Error(AR);else for(;a=10;i/=10)n++;n{var{on:e,config:r}=t,n=Vo.clone({precision:r.precision,modulo:Vo.EUCLID});return n.prototype=Object.create(n.prototype),n.prototype.type="BigNumber",n.prototype.isBigNumber=!0,n.prototype.toJSON=function(){return{mathjs:"BigNumber",value:this.toString()}},n.fromJSON=function(i){return new n(i.value)},e&&e("config",function(i,a){i.precision!==a.precision&&n.config({precision:i.precision})}),n},{isClass:!0}),PR={exports:{}};/** + */var Yl=9e15,Xo=1e9,e1="0123456789abcdef",Dv="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Ev="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",t1={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Yl,maxE:Yl,crypto:!1},OP,Ls,At=!0,Lg="[DecimalError] ",Wo=Lg+"Invalid argument: ",FP=Lg+"Precision limit exceeded",RP=Lg+"crypto unavailable",PP="[object Decimal]",jn=Math.floor,fn=Math.pow,lne=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,cne=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,fne=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,kP=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Ea=1e7,mt=7,hne=9007199254740991,dne=Dv.length-1,r1=Ev.length-1,qe={toStringTag:PP};qe.absoluteValue=qe.abs=function(){var t=new this.constructor(this);return t.s<0&&(t.s=1),lt(t)};qe.ceil=function(){return lt(new this.constructor(this),this.e+1,2)};qe.clampedTo=qe.clamp=function(t,e){var r,n=this,i=n.constructor;if(t=new i(t),e=new i(e),!t.s||!e.s)return new i(NaN);if(t.gt(e))throw Error(Wo+e);return r=n.cmp(t),r<0?t:n.cmp(e)>0?e:new i(n)};qe.comparedTo=qe.cmp=function(t){var e,r,n,i,a=this,s=a.d,o=(t=new a.constructor(t)).d,u=a.s,l=t.s;if(!s||!o)return!u||!l?NaN:u!==l?u:s===o?0:!s^u<0?1:-1;if(!s[0]||!o[0])return s[0]?u:o[0]?-l:0;if(u!==l)return u;if(a.e!==t.e)return a.e>t.e^u<0?1:-1;for(n=s.length,i=o.length,e=0,r=no[e]^u<0?1:-1;return n===i?0:n>i^u<0?1:-1};qe.cosine=qe.cos=function(){var t,e,r=this,n=r.constructor;return r.d?r.d[0]?(t=n.precision,e=n.rounding,n.precision=t+Math.max(r.e,r.sd())+mt,n.rounding=1,r=pne(n,zP(n,r)),n.precision=t,n.rounding=e,lt(Ls==2||Ls==3?r.neg():r,t,e,!0)):new n(1):new n(NaN)};qe.cubeRoot=qe.cbrt=function(){var t,e,r,n,i,a,s,o,u,l,c=this,f=c.constructor;if(!c.isFinite()||c.isZero())return new f(c);for(At=!1,a=c.s*fn(c.s*c,1/3),!a||Math.abs(a)==1/0?(r=Tn(c.d),t=c.e,(a=(t-r.length+1)%3)&&(r+=a==1||a==-2?"0":"00"),a=fn(r,1/3),t=jn((t+1)/3)-(t%3==(t<0?-1:2)),a==1/0?r="5e"+t:(r=a.toExponential(),r=r.slice(0,r.indexOf("e")+1)+t),n=new f(r),n.s=c.s):n=new f(a.toString()),s=(t=f.precision)+3;;)if(o=n,u=o.times(o).times(o),l=u.plus(c),n=Er(l.plus(c).times(o),l.plus(u),s+2,1),Tn(o.d).slice(0,s)===(r=Tn(n.d)).slice(0,s))if(r=r.slice(s-3,s+1),r=="9999"||!i&&r=="4999"){if(!i&&(lt(o,t+1,0),o.times(o).times(o).eq(c))){n=o;break}s+=4,i=1}else{(!+r||!+r.slice(1)&&r.charAt(0)=="5")&&(lt(n,t+1,1),e=!n.times(n).times(n).eq(c));break}return At=!0,lt(n,t,f.rounding,e)};qe.decimalPlaces=qe.dp=function(){var t,e=this.d,r=NaN;if(e){if(t=e.length-1,r=(t-jn(this.e/mt))*mt,t=e[t],t)for(;t%10==0;t/=10)r--;r<0&&(r=0)}return r};qe.dividedBy=qe.div=function(t){return Er(this,new this.constructor(t))};qe.dividedToIntegerBy=qe.divToInt=function(t){var e=this,r=e.constructor;return lt(Er(e,new r(t),0,1,1),r.precision,r.rounding)};qe.equals=qe.eq=function(t){return this.cmp(t)===0};qe.floor=function(){return lt(new this.constructor(this),this.e+1,3)};qe.greaterThan=qe.gt=function(t){return this.cmp(t)>0};qe.greaterThanOrEqualTo=qe.gte=function(t){var e=this.cmp(t);return e==1||e===0};qe.hyperbolicCosine=qe.cosh=function(){var t,e,r,n,i,a=this,s=a.constructor,o=new s(1);if(!a.isFinite())return new s(a.s?1/0:NaN);if(a.isZero())return o;r=s.precision,n=s.rounding,s.precision=r+Math.max(a.e,a.sd())+4,s.rounding=1,i=a.d.length,i<32?(t=Math.ceil(i/3),e=(1/zg(4,t)).toString()):(t=16,e="2.3283064365386962890625e-10"),a=Sc(s,1,a.times(e),new s(1),!0);for(var u,l=t,c=new s(8);l--;)u=a.times(a),a=o.minus(u.times(c.minus(u.times(c))));return lt(a,s.precision=r,s.rounding=n,!0)};qe.hyperbolicSine=qe.sinh=function(){var t,e,r,n,i=this,a=i.constructor;if(!i.isFinite()||i.isZero())return new a(i);if(e=a.precision,r=a.rounding,a.precision=e+Math.max(i.e,i.sd())+4,a.rounding=1,n=i.d.length,n<3)i=Sc(a,2,i,i,!0);else{t=1.4*Math.sqrt(n),t=t>16?16:t|0,i=i.times(1/zg(5,t)),i=Sc(a,2,i,i,!0);for(var s,o=new a(5),u=new a(16),l=new a(20);t--;)s=i.times(i),i=i.times(o.plus(s.times(u.times(s).plus(l))))}return a.precision=e,a.rounding=r,lt(i,e,r,!0)};qe.hyperbolicTangent=qe.tanh=function(){var t,e,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(t=n.precision,e=n.rounding,n.precision=t+7,n.rounding=1,Er(r.sinh(),r.cosh(),n.precision=t,n.rounding=e)):new n(r.s)};qe.inverseCosine=qe.acos=function(){var t,e=this,r=e.constructor,n=e.abs().cmp(1),i=r.precision,a=r.rounding;return n!==-1?n===0?e.isNeg()?Aa(r,i,a):new r(0):new r(NaN):e.isZero()?Aa(r,i+4,a).times(.5):(r.precision=i+6,r.rounding=1,e=e.asin(),t=Aa(r,i+4,a).times(.5),r.precision=i,r.rounding=a,t.minus(e))};qe.inverseHyperbolicCosine=qe.acosh=function(){var t,e,r=this,n=r.constructor;return r.lte(1)?new n(r.eq(1)?0:NaN):r.isFinite()?(t=n.precision,e=n.rounding,n.precision=t+Math.max(Math.abs(r.e),r.sd())+4,n.rounding=1,At=!1,r=r.times(r).minus(1).sqrt().plus(r),At=!0,n.precision=t,n.rounding=e,r.ln()):new n(r)};qe.inverseHyperbolicSine=qe.asinh=function(){var t,e,r=this,n=r.constructor;return!r.isFinite()||r.isZero()?new n(r):(t=n.precision,e=n.rounding,n.precision=t+2*Math.max(Math.abs(r.e),r.sd())+6,n.rounding=1,At=!1,r=r.times(r).plus(1).sqrt().plus(r),At=!0,n.precision=t,n.rounding=e,r.ln())};qe.inverseHyperbolicTangent=qe.atanh=function(){var t,e,r,n,i=this,a=i.constructor;return i.isFinite()?i.e>=0?new a(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(t=a.precision,e=a.rounding,n=i.sd(),Math.max(n,t)<2*-i.e-1?lt(new a(i),t,e,!0):(a.precision=r=n-i.e,i=Er(i.plus(1),new a(1).minus(i),r+t,1),a.precision=t+4,a.rounding=1,i=i.ln(),a.precision=t,a.rounding=e,i.times(.5))):new a(NaN)};qe.inverseSine=qe.asin=function(){var t,e,r,n,i=this,a=i.constructor;return i.isZero()?new a(i):(e=i.abs().cmp(1),r=a.precision,n=a.rounding,e!==-1?e===0?(t=Aa(a,r+4,n).times(.5),t.s=i.s,t):new a(NaN):(a.precision=r+6,a.rounding=1,i=i.div(new a(1).minus(i.times(i)).sqrt().plus(1)).atan(),a.precision=r,a.rounding=n,i.times(2)))};qe.inverseTangent=qe.atan=function(){var t,e,r,n,i,a,s,o,u,l=this,c=l.constructor,f=c.precision,h=c.rounding;if(l.isFinite()){if(l.isZero())return new c(l);if(l.abs().eq(1)&&f+4<=r1)return s=Aa(c,f+4,h).times(.25),s.s=l.s,s}else{if(!l.s)return new c(NaN);if(f+4<=r1)return s=Aa(c,f+4,h).times(.5),s.s=l.s,s}for(c.precision=o=f+10,c.rounding=1,r=Math.min(28,o/mt+2|0),t=r;t;--t)l=l.div(l.times(l).plus(1).sqrt().plus(1));for(At=!1,e=Math.ceil(o/mt),n=1,u=l.times(l),s=new c(l),i=l;t!==-1;)if(i=i.times(u),a=s.minus(i.div(n+=2)),i=i.times(u),s=a.plus(i.div(n+=2)),s.d[e]!==void 0)for(t=e;s.d[t]===a.d[t]&&t--;);return r&&(s=s.times(2<this.d.length-2};qe.isNaN=function(){return!this.s};qe.isNegative=qe.isNeg=function(){return this.s<0};qe.isPositive=qe.isPos=function(){return this.s>0};qe.isZero=function(){return!!this.d&&this.d[0]===0};qe.lessThan=qe.lt=function(t){return this.cmp(t)<0};qe.lessThanOrEqualTo=qe.lte=function(t){return this.cmp(t)<1};qe.logarithm=qe.log=function(t){var e,r,n,i,a,s,o,u,l=this,c=l.constructor,f=c.precision,h=c.rounding,p=5;if(t==null)t=new c(10),e=!0;else{if(t=new c(t),r=t.d,t.s<0||!r||!r[0]||t.eq(1))return new c(NaN);e=t.eq(10)}if(r=l.d,l.s<0||!r||!r[0]||l.eq(1))return new c(r&&!r[0]?-1/0:l.s!=1?NaN:r?0:1/0);if(e)if(r.length>1)a=!0;else{for(i=r[0];i%10===0;)i/=10;a=i!==1}if(At=!1,o=f+p,s=Bo(l,o),n=e?Nv(c,o+10):Bo(t,o),u=Er(s,n,o,1),Wh(u.d,i=f,h))do if(o+=10,s=Bo(l,o),n=e?Nv(c,o+10):Bo(t,o),u=Er(s,n,o,1),!a){+Tn(u.d).slice(i+1,i+15)+1==1e14&&(u=lt(u,f+1,0));break}while(Wh(u.d,i+=10,h));return At=!0,lt(u,f,h)};qe.minus=qe.sub=function(t){var e,r,n,i,a,s,o,u,l,c,f,h,p=this,g=p.constructor;if(t=new g(t),!p.d||!t.d)return!p.s||!t.s?t=new g(NaN):p.d?t.s=-t.s:t=new g(t.d||p.s!==t.s?p:NaN),t;if(p.s!=t.s)return t.s=-t.s,p.plus(t);if(l=p.d,h=t.d,o=g.precision,u=g.rounding,!l[0]||!h[0]){if(h[0])t.s=-t.s;else if(l[0])t=new g(p);else return new g(u===3?-0:0);return At?lt(t,o,u):t}if(r=jn(t.e/mt),c=jn(p.e/mt),l=l.slice(),a=c-r,a){for(f=a<0,f?(e=l,a=-a,s=h.length):(e=h,r=c,s=l.length),n=Math.max(Math.ceil(o/mt),s)+2,a>n&&(a=n,e.length=1),e.reverse(),n=a;n--;)e.push(0);e.reverse()}else{for(n=l.length,s=h.length,f=n0;--n)l[s++]=0;for(n=h.length;n>a;){if(l[--n]s?a+1:s+1,i>s&&(i=s,r.length=1),r.reverse();i--;)r.push(0);r.reverse()}for(s=l.length,i=c.length,s-i<0&&(i=s,r=c,c=l,l=r),e=0;i;)e=(l[--i]=l[i]+c[i]+e)/Ea|0,l[i]%=Ea;for(e&&(l.unshift(e),++n),s=l.length;l[--s]==0;)l.pop();return t.d=l,t.e=$g(l,n),At?lt(t,o,u):t};qe.precision=qe.sd=function(t){var e,r=this;if(t!==void 0&&t!==!!t&&t!==1&&t!==0)throw Error(Wo+t);return r.d?(e=BP(r.d),t&&r.e+1>e&&(e=r.e+1)):e=NaN,e};qe.round=function(){var t=this,e=t.constructor;return lt(new e(t),t.e+1,e.rounding)};qe.sine=qe.sin=function(){var t,e,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(t=n.precision,e=n.rounding,n.precision=t+Math.max(r.e,r.sd())+mt,n.rounding=1,r=vne(n,zP(n,r)),n.precision=t,n.rounding=e,lt(Ls>2?r.neg():r,t,e,!0)):new n(NaN)};qe.squareRoot=qe.sqrt=function(){var t,e,r,n,i,a,s=this,o=s.d,u=s.e,l=s.s,c=s.constructor;if(l!==1||!o||!o[0])return new c(!l||l<0&&(!o||o[0])?NaN:o?s:1/0);for(At=!1,l=Math.sqrt(+s),l==0||l==1/0?(e=Tn(o),(e.length+u)%2==0&&(e+="0"),l=Math.sqrt(e),u=jn((u+1)/2)-(u<0||u%2),l==1/0?e="5e"+u:(e=l.toExponential(),e=e.slice(0,e.indexOf("e")+1)+u),n=new c(e)):n=new c(l.toString()),r=(u=c.precision)+3;;)if(a=n,n=a.plus(Er(s,a,r+2,1)).times(.5),Tn(a.d).slice(0,r)===(e=Tn(n.d)).slice(0,r))if(e=e.slice(r-3,r+1),e=="9999"||!i&&e=="4999"){if(!i&&(lt(a,u+1,0),a.times(a).eq(s))){n=a;break}r+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(lt(n,u+1,1),t=!n.times(n).eq(s));break}return At=!0,lt(n,u,c.rounding,t)};qe.tangent=qe.tan=function(){var t,e,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(t=n.precision,e=n.rounding,n.precision=t+10,n.rounding=1,r=r.sin(),r.s=1,r=Er(r,new n(1).minus(r.times(r)).sqrt(),t+10,0),n.precision=t,n.rounding=e,lt(Ls==2||Ls==4?r.neg():r,t,e,!0)):new n(NaN)};qe.times=qe.mul=function(t){var e,r,n,i,a,s,o,u,l,c=this,f=c.constructor,h=c.d,p=(t=new f(t)).d;if(t.s*=c.s,!h||!h[0]||!p||!p[0])return new f(!t.s||h&&!h[0]&&!p||p&&!p[0]&&!h?NaN:!h||!p?t.s/0:t.s*0);for(r=jn(c.e/mt)+jn(t.e/mt),u=h.length,l=p.length,u=0;){for(e=0,i=u+n;i>n;)o=a[i]+p[n]*h[i-n-1]+e,a[i--]=o%Ea|0,e=o/Ea|0;a[i]=(a[i]+e)%Ea|0}for(;!a[--s];)a.pop();return e?++r:a.shift(),t.d=a,t.e=$g(a,r),At?lt(t,f.precision,f.rounding):t};qe.toBinary=function(t,e){return lw(this,2,t,e)};qe.toDecimalPlaces=qe.toDP=function(t,e){var r=this,n=r.constructor;return r=new n(r),t===void 0?r:(_i(t,0,Xo),e===void 0?e=n.rounding:_i(e,0,8),lt(r,t+r.e+1,e))};qe.toExponential=function(t,e){var r,n=this,i=n.constructor;return t===void 0?r=Ka(n,!0):(_i(t,0,Xo),e===void 0?e=i.rounding:_i(e,0,8),n=lt(new i(n),t+1,e),r=Ka(n,!0,t+1)),n.isNeg()&&!n.isZero()?"-"+r:r};qe.toFixed=function(t,e){var r,n,i=this,a=i.constructor;return t===void 0?r=Ka(i):(_i(t,0,Xo),e===void 0?e=a.rounding:_i(e,0,8),n=lt(new a(i),t+i.e+1,e),r=Ka(n,!1,t+n.e+1)),i.isNeg()&&!i.isZero()?"-"+r:r};qe.toFraction=function(t){var e,r,n,i,a,s,o,u,l,c,f,h,p=this,g=p.d,m=p.constructor;if(!g)return new m(p);if(l=r=new m(1),n=u=new m(0),e=new m(n),a=e.e=BP(g)-p.e-1,s=a%mt,e.d[0]=fn(10,s<0?mt+s:s),t==null)t=a>0?e:l;else{if(o=new m(t),!o.isInt()||o.lt(l))throw Error(Wo+o);t=o.gt(e)?a>0?e:l:o}for(At=!1,o=new m(Tn(g)),c=m.precision,m.precision=a=g.length*mt*2;f=Er(o,e,0,1,1),i=r.plus(f.times(n)),i.cmp(t)!=1;)r=n,n=i,i=l,l=u.plus(f.times(i)),u=i,i=e,e=o.minus(f.times(i)),o=i;return i=Er(t.minus(r),n,0,1,1),u=u.plus(i.times(l)),r=r.plus(i.times(n)),u.s=l.s=p.s,h=Er(l,n,a,1).minus(p).abs().cmp(Er(u,r,a,1).minus(p).abs())<1?[l,n]:[u,r],m.precision=c,At=!0,h};qe.toHexadecimal=qe.toHex=function(t,e){return lw(this,16,t,e)};qe.toNearest=function(t,e){var r=this,n=r.constructor;if(r=new n(r),t==null){if(!r.d)return r;t=new n(1),e=n.rounding}else{if(t=new n(t),e===void 0?e=n.rounding:_i(e,0,8),!r.d)return t.s?r:t;if(!t.d)return t.s&&(t.s=r.s),t}return t.d[0]?(At=!1,r=Er(r,t,0,e,1).times(t),At=!0,lt(r)):(t.s=r.s,r=t),r};qe.toNumber=function(){return+this};qe.toOctal=function(t,e){return lw(this,8,t,e)};qe.toPower=qe.pow=function(t){var e,r,n,i,a,s,o=this,u=o.constructor,l=+(t=new u(t));if(!o.d||!t.d||!o.d[0]||!t.d[0])return new u(fn(+o,l));if(o=new u(o),o.eq(1))return o;if(n=u.precision,a=u.rounding,t.eq(1))return lt(o,n,a);if(e=jn(t.e/mt),e>=t.d.length-1&&(r=l<0?-l:l)<=hne)return i=IP(u,o,r,n),t.s<0?new u(1).div(i):lt(i,n,a);if(s=o.s,s<0){if(eu.maxE+1||e0?s/0:0):(At=!1,u.rounding=o.s=1,r=Math.min(12,(e+"").length),i=n1(t.times(Bo(o,n+r)),n),i.d&&(i=lt(i,n+5,1),Wh(i.d,n,a)&&(e=n+10,i=lt(n1(t.times(Bo(o,e+r)),e),e+5,1),+Tn(i.d).slice(n+1,n+15)+1==1e14&&(i=lt(i,n+1,0)))),i.s=s,At=!0,u.rounding=a,lt(i,n,a))};qe.toPrecision=function(t,e){var r,n=this,i=n.constructor;return t===void 0?r=Ka(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(_i(t,1,Xo),e===void 0?e=i.rounding:_i(e,0,8),n=lt(new i(n),t,e),r=Ka(n,t<=n.e||n.e<=i.toExpNeg,t)),n.isNeg()&&!n.isZero()?"-"+r:r};qe.toSignificantDigits=qe.toSD=function(t,e){var r=this,n=r.constructor;return t===void 0?(t=n.precision,e=n.rounding):(_i(t,1,Xo),e===void 0?e=n.rounding:_i(e,0,8)),lt(new n(r),t,e)};qe.toString=function(){var t=this,e=t.constructor,r=Ka(t,t.e<=e.toExpNeg||t.e>=e.toExpPos);return t.isNeg()&&!t.isZero()?"-"+r:r};qe.truncated=qe.trunc=function(){return lt(new this.constructor(this),this.e+1,1)};qe.valueOf=qe.toJSON=function(){var t=this,e=t.constructor,r=Ka(t,t.e<=e.toExpNeg||t.e>=e.toExpPos);return t.isNeg()?"-"+r:r};function Tn(t){var e,r,n,i=t.length-1,a="",s=t[0];if(i>0){for(a+=s,e=1;er)throw Error(Wo+t)}function Wh(t,e,r,n){var i,a,s,o;for(a=t[0];a>=10;a/=10)--e;return--e<0?(e+=mt,i=0):(i=Math.ceil((e+1)/mt),e%=mt),a=fn(10,mt-e),o=t[i]%a|0,n==null?e<3?(e==0?o=o/100|0:e==1&&(o=o/10|0),s=r<4&&o==99999||r>3&&o==49999||o==5e4||o==0):s=(r<4&&o+1==a||r>3&&o+1==a/2)&&(t[i+1]/a/100|0)==fn(10,e-2)-1||(o==a/2||o==0)&&(t[i+1]/a/100|0)==0:e<4?(e==0?o=o/1e3|0:e==1?o=o/100|0:e==2&&(o=o/10|0),s=(n||r<4)&&o==9999||!n&&r>3&&o==4999):s=((n||r<4)&&o+1==a||!n&&r>3&&o+1==a/2)&&(t[i+1]/a/1e3|0)==fn(10,e-3)-1,s}function Bm(t,e,r){for(var n,i=[0],a,s=0,o=t.length;sr-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/r|0,i[n]%=r)}return i.reverse()}function pne(t,e){var r,n,i;if(e.isZero())return e;n=e.d.length,n<32?(r=Math.ceil(n/3),i=(1/zg(4,r)).toString()):(r=16,i="2.3283064365386962890625e-10"),t.precision+=r,e=Sc(t,1,e.times(i),new t(1));for(var a=r;a--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return t.precision-=r,e}var Er=function(){function t(n,i,a){var s,o=0,u=n.length;for(n=n.slice();u--;)s=n[u]*i+o,n[u]=s%a|0,o=s/a|0;return o&&n.unshift(o),n}function e(n,i,a,s){var o,u;if(a!=s)u=a>s?1:-1;else for(o=u=0;oi[o]?1:-1;break}return u}function r(n,i,a,s){for(var o=0;a--;)n[a]-=o,o=n[a]1;)n.shift()}return function(n,i,a,s,o,u){var l,c,f,h,p,g,m,b,y,S,x,_,A,w,C,N,E,M,O,F,q=n.constructor,V=n.s==i.s?1:-1,H=n.d,B=i.d;if(!H||!H[0]||!B||!B[0])return new q(!n.s||!i.s||(H?B&&H[0]==B[0]:!B)?NaN:H&&H[0]==0||!B?V*0:V/0);for(u?(p=1,c=n.e-i.e):(u=Ea,p=mt,c=jn(n.e/p)-jn(i.e/p)),O=B.length,E=H.length,y=new q(V),S=y.d=[],f=0;B[f]==(H[f]||0);f++);if(B[f]>(H[f]||0)&&c--,a==null?(w=a=q.precision,s=q.rounding):o?w=a+(n.e-i.e)+1:w=a,w<0)S.push(1),g=!0;else{if(w=w/p+2|0,f=0,O==1){for(h=0,B=B[0],w++;(f1&&(B=t(B,h,u),H=t(H,h,u),O=B.length,E=H.length),N=O,x=H.slice(0,O),_=x.length;_=u/2&&++M;do h=0,l=e(B,x,O,_),l<0?(A=x[0],O!=_&&(A=A*u+(x[1]||0)),h=A/M|0,h>1?(h>=u&&(h=u-1),m=t(B,h,u),b=m.length,_=x.length,l=e(m,x,b,_),l==1&&(h--,r(m,O=10;h/=10)f++;y.e=f+c*p-1,lt(y,o?a+y.e+1:a,s,g)}return y}}();function lt(t,e,r,n){var i,a,s,o,u,l,c,f,h,p=t.constructor;e:if(e!=null){if(f=t.d,!f)return t;for(i=1,o=f[0];o>=10;o/=10)i++;if(a=e-i,a<0)a+=mt,s=e,c=f[h=0],u=c/fn(10,i-s-1)%10|0;else if(h=Math.ceil((a+1)/mt),o=f.length,h>=o)if(n){for(;o++<=h;)f.push(0);c=u=0,i=1,a%=mt,s=a-mt+1}else break e;else{for(c=o=f[h],i=1;o>=10;o/=10)i++;a%=mt,s=a-mt+i,u=s<0?0:c/fn(10,i-s-1)%10|0}if(n=n||e<0||f[h+1]!==void 0||(s<0?c:c%fn(10,i-s-1)),l=r<4?(u||n)&&(r==0||r==(t.s<0?3:2)):u>5||u==5&&(r==4||n||r==6&&(a>0?s>0?c/fn(10,i-s):0:f[h-1])%10&1||r==(t.s<0?8:7)),e<1||!f[0])return f.length=0,l?(e-=t.e+1,f[0]=fn(10,(mt-e%mt)%mt),t.e=-e||0):f[0]=t.e=0,t;if(a==0?(f.length=h,o=1,h--):(f.length=h+1,o=fn(10,mt-a),f[h]=s>0?(c/fn(10,i-s)%fn(10,s)|0)*o:0),l)for(;;)if(h==0){for(a=1,s=f[0];s>=10;s/=10)a++;for(s=f[0]+=o,o=1;s>=10;s/=10)o++;a!=o&&(t.e++,f[0]==Ea&&(f[0]=1));break}else{if(f[h]+=o,f[h]!=Ea)break;f[h--]=0,o=1}for(a=f.length;f[--a]===0;)f.pop()}return At&&(t.e>p.maxE?(t.d=null,t.e=NaN):t.e0?a=a.charAt(0)+"."+a.slice(1)+Eo(n):s>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(t.e<0?"e":"e+")+t.e):i<0?(a="0."+Eo(-i-1)+a,r&&(n=r-s)>0&&(a+=Eo(n))):i>=s?(a+=Eo(i+1-s),r&&(n=r-i-1)>0&&(a=a+"."+Eo(n))):((n=i+1)0&&(i+1===s&&(a+="."),a+=Eo(n))),a}function $g(t,e){var r=t[0];for(e*=mt;r>=10;r/=10)e++;return e}function Nv(t,e,r){if(e>dne)throw At=!0,r&&(t.precision=r),Error(FP);return lt(new t(Dv),e,1,!0)}function Aa(t,e,r){if(e>r1)throw Error(FP);return lt(new t(Ev),e,r,!0)}function BP(t){var e=t.length-1,r=e*mt+1;if(e=t[e],e){for(;e%10==0;e/=10)r--;for(e=t[0];e>=10;e/=10)r++}return r}function Eo(t){for(var e="";t--;)e+="0";return e}function IP(t,e,r,n){var i,a=new t(1),s=Math.ceil(n/mt+4);for(At=!1;;){if(r%2&&(a=a.times(e),k2(a.d,s)&&(i=!0)),r=jn(r/2),r===0){r=a.d.length-1,i&&a.d[r]===0&&++a.d[r];break}e=e.times(e),k2(e.d,s)}return At=!0,a}function P2(t){return t.d[t.d.length-1]&1}function LP(t,e,r){for(var n,i=new t(e[0]),a=0;++a17)return new h(t.d?t.d[0]?t.s<0?0:1/0:1:t.s?t.s<0?0:t:NaN);for(e==null?(At=!1,u=g):u=e,o=new h(.03125);t.e>-2;)t=t.times(o),f+=5;for(n=Math.log(fn(2,f))/Math.LN10*2+5|0,u+=n,r=a=s=new h(1),h.precision=u;;){if(a=lt(a.times(t),u,1),r=r.times(++c),o=s.plus(Er(a,r,u,1)),Tn(o.d).slice(0,u)===Tn(s.d).slice(0,u)){for(i=f;i--;)s=lt(s.times(s),u,1);if(e==null)if(l<3&&Wh(s.d,u-n,p,l))h.precision=u+=10,r=a=o=new h(1),c=0,l++;else return lt(s,h.precision=g,p,At=!0);else return h.precision=g,s}s=o}}function Bo(t,e){var r,n,i,a,s,o,u,l,c,f,h,p=1,g=10,m=t,b=m.d,y=m.constructor,S=y.rounding,x=y.precision;if(m.s<0||!b||!b[0]||!m.e&&b[0]==1&&b.length==1)return new y(b&&!b[0]?-1/0:m.s!=1?NaN:b?0:m);if(e==null?(At=!1,c=x):c=e,y.precision=c+=g,r=Tn(b),n=r.charAt(0),Math.abs(a=m.e)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)m=m.times(t),r=Tn(m.d),n=r.charAt(0),p++;a=m.e,n>1?(m=new y("0."+r),a++):m=new y(n+"."+r.slice(1))}else return l=Nv(y,c+2,x).times(a+""),m=Bo(new y(n+"."+r.slice(1)),c-g).plus(l),y.precision=x,e==null?lt(m,x,S,At=!0):m;for(f=m,u=s=m=Er(m.minus(1),m.plus(1),c,1),h=lt(m.times(m),c,1),i=3;;){if(s=lt(s.times(h),c,1),l=u.plus(Er(s,new y(i),c,1)),Tn(l.d).slice(0,c)===Tn(u.d).slice(0,c))if(u=u.times(2),a!==0&&(u=u.plus(Nv(y,c+2,x).times(a+""))),u=Er(u,new y(p),c,1),e==null)if(Wh(u.d,c-g,S,o))y.precision=c+=g,l=s=m=Er(f.minus(1),f.plus(1),c,1),h=lt(m.times(m),c,1),i=o=1;else return lt(u,y.precision=x,S,At=!0);else return y.precision=x,u;u=l,i+=2}}function $P(t){return String(t.s*t.s/0)}function i1(t,e){var r,n,i;for((r=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(r<0&&(r=n),r+=+e.slice(n+1),e=e.substring(0,n)):r<0&&(r=e.length),n=0;e.charCodeAt(n)===48;n++);for(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(n,i),e){if(i-=n,t.e=r=r-n-1,t.d=[],n=(r+1)%mt,r<0&&(n+=mt),nt.constructor.maxE?(t.d=null,t.e=NaN):t.e-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),kP.test(e))return i1(t,e)}else if(e==="Infinity"||e==="NaN")return+e||(t.s=NaN),t.e=NaN,t.d=null,t;if(cne.test(e))r=16,e=e.toLowerCase();else if(lne.test(e))r=2;else if(fne.test(e))r=8;else throw Error(Wo+e);for(a=e.search(/p/i),a>0?(u=+e.slice(a+1),e=e.substring(2,a)):e=e.slice(2),a=e.indexOf("."),s=a>=0,n=t.constructor,s&&(e=e.replace(".",""),o=e.length,a=o-a,i=IP(n,new n(r),a,a*2)),l=Bm(e,r,Ea),c=l.length-1,a=c;l[a]===0;--a)l.pop();return a<0?new n(t.s*0):(t.e=$g(l,c),t.d=l,At=!1,s&&(t=Er(t,i,o*4)),u&&(t=t.times(Math.abs(u)<54?fn(2,u):Vo.pow(2,u))),At=!0,t)}function vne(t,e){var r,n=e.d.length;if(n<3)return e.isZero()?e:Sc(t,2,e,e);r=1.4*Math.sqrt(n),r=r>16?16:r|0,e=e.times(1/zg(5,r)),e=Sc(t,2,e,e);for(var i,a=new t(5),s=new t(16),o=new t(20);r--;)i=e.times(e),e=e.times(a.plus(i.times(s.times(i).minus(o))));return e}function Sc(t,e,r,n,i){var a,s,o,u,l=t.precision,c=Math.ceil(l/mt);for(At=!1,u=r.times(r),o=new t(n);;){if(s=Er(o.times(u),new t(e++*e++),l,1),o=i?n.plus(s):n.minus(s),n=Er(s.times(u),new t(e++*e++),l,1),s=o.plus(n),s.d[c]!==void 0){for(a=c;s.d[a]===o.d[a]&&a--;);if(a==-1)break}a=o,o=n,n=s,s=a}return At=!0,s.d.length=c+1,s}function zg(t,e){for(var r=t;--e;)r*=t;return r}function zP(t,e){var r,n=e.s<0,i=Aa(t,t.precision,1),a=i.times(.5);if(e=e.abs(),e.lte(a))return Ls=n?4:1,e;if(r=e.divToInt(i),r.isZero())Ls=n?3:2;else{if(e=e.minus(r.times(i)),e.lte(a))return Ls=P2(r)?n?2:3:n?4:1,e;Ls=P2(r)?n?1:4:n?3:2}return e.minus(i).abs()}function lw(t,e,r,n){var i,a,s,o,u,l,c,f,h,p=t.constructor,g=r!==void 0;if(g?(_i(r,1,Xo),n===void 0?n=p.rounding:_i(n,0,8)):(r=p.precision,n=p.rounding),!t.isFinite())c=$P(t);else{for(c=Ka(t),s=c.indexOf("."),g?(i=2,e==16?r=r*4-3:e==8&&(r=r*3-2)):i=e,s>=0&&(c=c.replace(".",""),h=new p(1),h.e=c.length-s,h.d=Bm(Ka(h),10,i),h.e=h.d.length),f=Bm(c,10,i),a=u=f.length;f[--u]==0;)f.pop();if(!f[0])c=g?"0p+0":"0";else{if(s<0?a--:(t=new p(t),t.d=f,t.e=a,t=Er(t,h,r,n,0,i),f=t.d,a=t.e,l=OP),s=f[r],o=i/2,l=l||f[r+1]!==void 0,l=n<4?(s!==void 0||l)&&(n===0||n===(t.s<0?3:2)):s>o||s===o&&(n===4||l||n===6&&f[r-1]&1||n===(t.s<0?8:7)),f.length=r,l)for(;++f[--r]>i-1;)f[r]=0,r||(++a,f.unshift(1));for(u=f.length;!f[u-1];--u);for(s=0,c="";s1)if(e==16||e==8){for(s=e==16?4:3,--u;u%s;u++)c+="0";for(f=Bm(c,i,e),u=f.length;!f[u-1];--u);for(s=1,c="1.";su)for(a-=u;a--;)c+="0";else ae)return t.length=e,!0}function gne(t){return new this(t).abs()}function yne(t){return new this(t).acos()}function bne(t){return new this(t).acosh()}function xne(t,e){return new this(t).plus(e)}function wne(t){return new this(t).asin()}function Sne(t){return new this(t).asinh()}function _ne(t){return new this(t).atan()}function Ane(t){return new this(t).atanh()}function Dne(t,e){t=new this(t),e=new this(e);var r,n=this.precision,i=this.rounding,a=n+4;return!t.s||!e.s?r=new this(NaN):!t.d&&!e.d?(r=Aa(this,a,1).times(e.s>0?.25:.75),r.s=t.s):!e.d||t.isZero()?(r=e.s<0?Aa(this,n,i):new this(0),r.s=t.s):!t.d||e.isZero()?(r=Aa(this,a,1).times(.5),r.s=t.s):e.s<0?(this.precision=a,this.rounding=1,r=this.atan(Er(t,e,a,1)),e=Aa(this,a,1),this.precision=n,this.rounding=i,r=t.s<0?r.minus(e):r.plus(e)):r=this.atan(Er(t,e,a,1)),r}function Ene(t){return new this(t).cbrt()}function Nne(t){return lt(t=new this(t),t.e+1,2)}function Cne(t,e,r){return new this(t).clamp(e,r)}function Mne(t){if(!t||typeof t!="object")throw Error(Lg+"Object expected");var e,r,n,i=t.defaults===!0,a=["precision",1,Xo,"rounding",0,8,"toExpNeg",-Yl,0,"toExpPos",0,Yl,"maxE",0,Yl,"minE",-Yl,0,"modulo",0,9];for(e=0;e=a[e+1]&&n<=a[e+2])this[r]=n;else throw Error(Wo+r+": "+n);if(r="crypto",i&&(this[r]=t1[r]),(n=t[r])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[r]=!0;else throw Error(RP);else this[r]=!1;else throw Error(Wo+r+": "+n);return this}function Tne(t){return new this(t).cos()}function One(t){return new this(t).cosh()}function qP(t){var e,r,n;function i(a){var s,o,u,l=this;if(!(l instanceof i))return new i(a);if(l.constructor=i,B2(a)){l.s=a.s,At?!a.d||a.e>i.maxE?(l.e=NaN,l.d=null):a.e=10;o/=10)s++;At?s>i.maxE?(l.e=NaN,l.d=null):s=429e7?e[a]=crypto.getRandomValues(new Uint32Array(1))[0]:o[a++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);a=214e7?crypto.randomBytes(4).copy(e,a):(o.push(i%1e7),a+=4);a=n/4}else throw Error(RP);else for(;a=10;i/=10)n++;n{var{on:e,config:r}=t,n=Vo.clone({precision:r.precision,modulo:Vo.EUCLID});return n.prototype=Object.create(n.prototype),n.prototype.type="BigNumber",n.prototype.isBigNumber=!0,n.prototype.toJSON=function(){return{mathjs:"BigNumber",value:this.toString()}},n.fromJSON=function(i){return new n(i.value)},e&&e("config",function(i,a){i.precision!==a.precision&&n.config({precision:i.precision})}),n},{isClass:!0}),UP={exports:{}};/** * @license Complex.js v2.1.1 12/05/2020 * * Copyright (c) 2020, Robert Eisele (robert@xarg.org) * Dual licensed under the MIT or GPL Version 2 licenses. **/(function(t,e){(function(r){var n=Math.cosh||function(f){return Math.abs(f)<1e-9?1-f:(Math.exp(f)+Math.exp(-f))*.5},i=Math.sinh||function(f){return Math.abs(f)<1e-9?f:(Math.exp(f)-Math.exp(-f))*.5},a=function(f){var h=Math.PI/4;if(-h>f||f>h)return Math.cos(f)-1;var p=f*f;return p*(p*(p*(p*(p*(p*(p*(p/20922789888e3-1/87178291200)+1/479001600)-1/3628800)+1/40320)-1/720)+1/24)-1/2)},s=function(f,h){var p=Math.abs(f),g=Math.abs(h);return p<3e3&&g<3e3?Math.sqrt(p*p+g*g):(p0&&o();break;case"number":p.im=0,p.re=f;break;default:o()}return isNaN(p.re)||isNaN(p.im),p};function c(f,h){if(!(this instanceof c))return new c(f,h);var p=l(f,h);this.re=p.re,this.im=p.im}c.prototype={re:0,im:0,sign:function(){var f=this.abs();return new c(this.re/f,this.im/f)},add:function(f,h){var p=new c(f,h);return this.isInfinite()&&p.isInfinite()?c.NAN:this.isInfinite()||p.isInfinite()?c.INFINITY:new c(this.re+p.re,this.im+p.im)},sub:function(f,h){var p=new c(f,h);return this.isInfinite()&&p.isInfinite()?c.NAN:this.isInfinite()||p.isInfinite()?c.INFINITY:new c(this.re-p.re,this.im-p.im)},mul:function(f,h){var p=new c(f,h);return this.isInfinite()&&p.isZero()||this.isZero()&&p.isInfinite()?c.NAN:this.isInfinite()||p.isInfinite()?c.INFINITY:p.im===0&&this.im===0?new c(this.re*p.re,0):new c(this.re*p.re-this.im*p.im,this.re*p.im+this.im*p.re)},div:function(f,h){var p=new c(f,h);if(this.isZero()&&p.isZero()||this.isInfinite()&&p.isInfinite())return c.NAN;if(this.isInfinite()||p.isZero())return c.INFINITY;if(this.isZero()||p.isInfinite())return c.ZERO;f=this.re,h=this.im;var g=p.re,m=p.im,b,y;return m===0?new c(f/g,h/g):Math.abs(g)0)return new c(Math.pow(f,p.re),0);if(f===0)switch((p.re%4+4)%4){case 0:return new c(Math.pow(h,p.re),0);case 1:return new c(0,Math.pow(h,p.re));case 2:return new c(-Math.pow(h,p.re),0);case 3:return new c(0,-Math.pow(h,p.re))}}if(f===0&&h===0&&p.re>0&&p.im>=0)return c.ZERO;var g=Math.atan2(h,f),m=u(f,h);return f=Math.exp(p.re*m-p.im*g),h=p.im*m+p.re*g,new c(f*Math.cos(h),f*Math.sin(h))},sqrt:function(){var f=this.re,h=this.im,p=this.abs(),g,m;if(f>=0){if(h===0)return new c(Math.sqrt(f),0);g=.5*Math.sqrt(2*(p+f))}else g=Math.abs(h)/Math.sqrt(2*(p-f));return f<=0?m=.5*Math.sqrt(2*(p-f)):m=Math.abs(h)/Math.sqrt(2*(p+f)),new c(g,h<0?-m:m)},exp:function(){var f=Math.exp(this.re);return this.im,new c(f*Math.cos(this.im),f*Math.sin(this.im))},expm1:function(){var f=this.re,h=this.im;return new c(Math.expm1(f)*Math.cos(h)+a(h),Math.exp(f)*Math.sin(h))},log:function(){var f=this.re,h=this.im;return new c(u(f,h),Math.atan2(h,f))},abs:function(){return s(this.re,this.im)},arg:function(){return Math.atan2(this.im,this.re)},sin:function(){var f=this.re,h=this.im;return new c(Math.sin(f)*n(h),Math.cos(f)*i(h))},cos:function(){var f=this.re,h=this.im;return new c(Math.cos(f)*n(h),-Math.sin(f)*i(h))},tan:function(){var f=2*this.re,h=2*this.im,p=Math.cos(f)+n(h);return new c(Math.sin(f)/p,i(h)/p)},cot:function(){var f=2*this.re,h=2*this.im,p=Math.cos(f)-n(h);return new c(-Math.sin(f)/p,i(h)/p)},sec:function(){var f=this.re,h=this.im,p=.5*n(2*h)+.5*Math.cos(2*f);return new c(Math.cos(f)*n(h)/p,Math.sin(f)*i(h)/p)},csc:function(){var f=this.re,h=this.im,p=.5*n(2*h)-.5*Math.cos(2*f);return new c(Math.sin(f)*n(h)/p,-Math.cos(f)*i(h)/p)},asin:function(){var f=this.re,h=this.im,p=new c(h*h-f*f+1,-2*f*h).sqrt(),g=new c(p.re-h,p.im+f).log();return new c(g.im,-g.re)},acos:function(){var f=this.re,h=this.im,p=new c(h*h-f*f+1,-2*f*h).sqrt(),g=new c(p.re-h,p.im+f).log();return new c(Math.PI/2-g.im,g.re)},atan:function(){var f=this.re,h=this.im;if(f===0){if(h===1)return new c(0,1/0);if(h===-1)return new c(0,-1/0)}var p=f*f+(1-h)*(1-h),g=new c((1-h*h-f*f)/p,-2*f/p).log();return new c(-.5*g.im,.5*g.re)},acot:function(){var f=this.re,h=this.im;if(h===0)return new c(Math.atan2(1,f),0);var p=f*f+h*h;return p!==0?new c(f/p,-h/p).atan():new c(f!==0?f/0:0,h!==0?-h/0:0).atan()},asec:function(){var f=this.re,h=this.im;if(f===0&&h===0)return new c(0,1/0);var p=f*f+h*h;return p!==0?new c(f/p,-h/p).acos():new c(f!==0?f/0:0,h!==0?-h/0:0).acos()},acsc:function(){var f=this.re,h=this.im;if(f===0&&h===0)return new c(Math.PI/2,1/0);var p=f*f+h*h;return p!==0?new c(f/p,-h/p).asin():new c(f!==0?f/0:0,h!==0?-h/0:0).asin()},sinh:function(){var f=this.re,h=this.im;return new c(i(f)*Math.cos(h),n(f)*Math.sin(h))},cosh:function(){var f=this.re,h=this.im;return new c(n(f)*Math.cos(h),i(f)*Math.sin(h))},tanh:function(){var f=2*this.re,h=2*this.im,p=n(f)+Math.cos(h);return new c(i(f)/p,Math.sin(h)/p)},coth:function(){var f=2*this.re,h=2*this.im,p=n(f)-Math.cos(h);return new c(i(f)/p,-Math.sin(h)/p)},csch:function(){var f=this.re,h=this.im,p=Math.cos(2*h)-n(2*f);return new c(-2*i(f)*Math.cos(h)/p,2*n(f)*Math.sin(h)/p)},sech:function(){var f=this.re,h=this.im,p=Math.cos(2*h)+n(2*f);return new c(2*n(f)*Math.cos(h)/p,-2*i(f)*Math.sin(h)/p)},asinh:function(){var f=this.im;this.im=-this.re,this.re=f;var h=this.asin();return this.re=-this.im,this.im=f,f=h.re,h.re=-h.im,h.im=f,h},acosh:function(){var f=this.acos();if(f.im<=0){var h=f.re;f.re=-f.im,f.im=h}else{var h=f.im;f.im=-f.re,f.re=h}return f},atanh:function(){var f=this.re,h=this.im,p=f>1&&h===0,g=1-f,m=1+f,b=g*g+h*h,y=b!==0?new c((m*g-h*h)/b,(h*g+m*h)/b):new c(f!==-1?f/0:0,h!==0?h/0:0),S=y.re;return y.re=u(y.re,y.im)/2,y.im=Math.atan2(y.im,S)/2,p&&(y.im=-y.im),y},acoth:function(){var f=this.re,h=this.im;if(f===0&&h===0)return new c(0,Math.PI/2);var p=f*f+h*h;return p!==0?new c(f/p,-h/p).atanh():new c(f!==0?f/0:0,h!==0?-h/0:0).atanh()},acsch:function(){var f=this.re,h=this.im;if(h===0)return new c(f!==0?Math.log(f+Math.sqrt(f*f+1)):1/0,0);var p=f*f+h*h;return p!==0?new c(f/p,-h/p).asinh():new c(f!==0?f/0:0,h!==0?-h/0:0).asinh()},asech:function(){var f=this.re,h=this.im;if(this.isZero())return c.INFINITY;var p=f*f+h*h;return p!==0?new c(f/p,-h/p).acosh():new c(f!==0?f/0:0,h!==0?-h/0:0).acosh()},inverse:function(){if(this.isZero())return c.INFINITY;if(this.isInfinite())return c.ZERO;var f=this.re,h=this.im,p=f*f+h*h;return new c(f/p,-h/p)},conjugate:function(){return new c(this.re,-this.im)},neg:function(){return new c(-this.re,-this.im)},ceil:function(f){return f=Math.pow(10,f||0),new c(Math.ceil(this.re*f)/f,Math.ceil(this.im*f)/f)},floor:function(f){return f=Math.pow(10,f||0),new c(Math.floor(this.re*f)/f,Math.floor(this.im*f)/f)},round:function(f){return f=Math.pow(10,f||0),new c(Math.round(this.re*f)/f,Math.round(this.im*f)/f)},equals:function(f,h){var p=new c(f,h);return Math.abs(p.re-this.re)<=c.EPSILON&&Math.abs(p.im-this.im)<=c.EPSILON},clone:function(){return new c(this.re,this.im)},toString:function(){var f=this.re,h=this.im,p="";return this.isNaN()?"NaN":this.isInfinite()?"Infinity":(Math.abs(f)(Object.defineProperty(En,"name",{value:"Complex"}),En.prototype.constructor=En,En.prototype.type="Complex",En.prototype.isComplex=!0,En.prototype.toJSON=function(){return{mathjs:"Complex",re:this.re,im:this.im}},En.prototype.toPolar=function(){return{r:this.abs(),phi:this.arg()}},En.prototype.format=function(t){var e="",r=this.im,n=this.re,i=Lu(this.re,t),a=Lu(this.im,t),s=Ct(t)?t:t?t.precision:null;if(s!==null){var o=Math.pow(10,-s);Math.abs(n/r)e.re?1:t.ree.im?1:t.im0&&o();break;case"number":p.im=0,p.re=f;break;default:o()}return isNaN(p.re)||isNaN(p.im),p};function c(f,h){if(!(this instanceof c))return new c(f,h);var p=l(f,h);this.re=p.re,this.im=p.im}c.prototype={re:0,im:0,sign:function(){var f=this.abs();return new c(this.re/f,this.im/f)},add:function(f,h){var p=new c(f,h);return this.isInfinite()&&p.isInfinite()?c.NAN:this.isInfinite()||p.isInfinite()?c.INFINITY:new c(this.re+p.re,this.im+p.im)},sub:function(f,h){var p=new c(f,h);return this.isInfinite()&&p.isInfinite()?c.NAN:this.isInfinite()||p.isInfinite()?c.INFINITY:new c(this.re-p.re,this.im-p.im)},mul:function(f,h){var p=new c(f,h);return this.isInfinite()&&p.isZero()||this.isZero()&&p.isInfinite()?c.NAN:this.isInfinite()||p.isInfinite()?c.INFINITY:p.im===0&&this.im===0?new c(this.re*p.re,0):new c(this.re*p.re-this.im*p.im,this.re*p.im+this.im*p.re)},div:function(f,h){var p=new c(f,h);if(this.isZero()&&p.isZero()||this.isInfinite()&&p.isInfinite())return c.NAN;if(this.isInfinite()||p.isZero())return c.INFINITY;if(this.isZero()||p.isInfinite())return c.ZERO;f=this.re,h=this.im;var g=p.re,m=p.im,b,y;return m===0?new c(f/g,h/g):Math.abs(g)0)return new c(Math.pow(f,p.re),0);if(f===0)switch((p.re%4+4)%4){case 0:return new c(Math.pow(h,p.re),0);case 1:return new c(0,Math.pow(h,p.re));case 2:return new c(-Math.pow(h,p.re),0);case 3:return new c(0,-Math.pow(h,p.re))}}if(f===0&&h===0&&p.re>0&&p.im>=0)return c.ZERO;var g=Math.atan2(h,f),m=u(f,h);return f=Math.exp(p.re*m-p.im*g),h=p.im*m+p.re*g,new c(f*Math.cos(h),f*Math.sin(h))},sqrt:function(){var f=this.re,h=this.im,p=this.abs(),g,m;if(f>=0){if(h===0)return new c(Math.sqrt(f),0);g=.5*Math.sqrt(2*(p+f))}else g=Math.abs(h)/Math.sqrt(2*(p-f));return f<=0?m=.5*Math.sqrt(2*(p-f)):m=Math.abs(h)/Math.sqrt(2*(p+f)),new c(g,h<0?-m:m)},exp:function(){var f=Math.exp(this.re);return this.im,new c(f*Math.cos(this.im),f*Math.sin(this.im))},expm1:function(){var f=this.re,h=this.im;return new c(Math.expm1(f)*Math.cos(h)+a(h),Math.exp(f)*Math.sin(h))},log:function(){var f=this.re,h=this.im;return new c(u(f,h),Math.atan2(h,f))},abs:function(){return s(this.re,this.im)},arg:function(){return Math.atan2(this.im,this.re)},sin:function(){var f=this.re,h=this.im;return new c(Math.sin(f)*n(h),Math.cos(f)*i(h))},cos:function(){var f=this.re,h=this.im;return new c(Math.cos(f)*n(h),-Math.sin(f)*i(h))},tan:function(){var f=2*this.re,h=2*this.im,p=Math.cos(f)+n(h);return new c(Math.sin(f)/p,i(h)/p)},cot:function(){var f=2*this.re,h=2*this.im,p=Math.cos(f)-n(h);return new c(-Math.sin(f)/p,i(h)/p)},sec:function(){var f=this.re,h=this.im,p=.5*n(2*h)+.5*Math.cos(2*f);return new c(Math.cos(f)*n(h)/p,Math.sin(f)*i(h)/p)},csc:function(){var f=this.re,h=this.im,p=.5*n(2*h)-.5*Math.cos(2*f);return new c(Math.sin(f)*n(h)/p,-Math.cos(f)*i(h)/p)},asin:function(){var f=this.re,h=this.im,p=new c(h*h-f*f+1,-2*f*h).sqrt(),g=new c(p.re-h,p.im+f).log();return new c(g.im,-g.re)},acos:function(){var f=this.re,h=this.im,p=new c(h*h-f*f+1,-2*f*h).sqrt(),g=new c(p.re-h,p.im+f).log();return new c(Math.PI/2-g.im,g.re)},atan:function(){var f=this.re,h=this.im;if(f===0){if(h===1)return new c(0,1/0);if(h===-1)return new c(0,-1/0)}var p=f*f+(1-h)*(1-h),g=new c((1-h*h-f*f)/p,-2*f/p).log();return new c(-.5*g.im,.5*g.re)},acot:function(){var f=this.re,h=this.im;if(h===0)return new c(Math.atan2(1,f),0);var p=f*f+h*h;return p!==0?new c(f/p,-h/p).atan():new c(f!==0?f/0:0,h!==0?-h/0:0).atan()},asec:function(){var f=this.re,h=this.im;if(f===0&&h===0)return new c(0,1/0);var p=f*f+h*h;return p!==0?new c(f/p,-h/p).acos():new c(f!==0?f/0:0,h!==0?-h/0:0).acos()},acsc:function(){var f=this.re,h=this.im;if(f===0&&h===0)return new c(Math.PI/2,1/0);var p=f*f+h*h;return p!==0?new c(f/p,-h/p).asin():new c(f!==0?f/0:0,h!==0?-h/0:0).asin()},sinh:function(){var f=this.re,h=this.im;return new c(i(f)*Math.cos(h),n(f)*Math.sin(h))},cosh:function(){var f=this.re,h=this.im;return new c(n(f)*Math.cos(h),i(f)*Math.sin(h))},tanh:function(){var f=2*this.re,h=2*this.im,p=n(f)+Math.cos(h);return new c(i(f)/p,Math.sin(h)/p)},coth:function(){var f=2*this.re,h=2*this.im,p=n(f)-Math.cos(h);return new c(i(f)/p,-Math.sin(h)/p)},csch:function(){var f=this.re,h=this.im,p=Math.cos(2*h)-n(2*f);return new c(-2*i(f)*Math.cos(h)/p,2*n(f)*Math.sin(h)/p)},sech:function(){var f=this.re,h=this.im,p=Math.cos(2*h)+n(2*f);return new c(2*n(f)*Math.cos(h)/p,-2*i(f)*Math.sin(h)/p)},asinh:function(){var f=this.im;this.im=-this.re,this.re=f;var h=this.asin();return this.re=-this.im,this.im=f,f=h.re,h.re=-h.im,h.im=f,h},acosh:function(){var f=this.acos();if(f.im<=0){var h=f.re;f.re=-f.im,f.im=h}else{var h=f.im;f.im=-f.re,f.re=h}return f},atanh:function(){var f=this.re,h=this.im,p=f>1&&h===0,g=1-f,m=1+f,b=g*g+h*h,y=b!==0?new c((m*g-h*h)/b,(h*g+m*h)/b):new c(f!==-1?f/0:0,h!==0?h/0:0),S=y.re;return y.re=u(y.re,y.im)/2,y.im=Math.atan2(y.im,S)/2,p&&(y.im=-y.im),y},acoth:function(){var f=this.re,h=this.im;if(f===0&&h===0)return new c(0,Math.PI/2);var p=f*f+h*h;return p!==0?new c(f/p,-h/p).atanh():new c(f!==0?f/0:0,h!==0?-h/0:0).atanh()},acsch:function(){var f=this.re,h=this.im;if(h===0)return new c(f!==0?Math.log(f+Math.sqrt(f*f+1)):1/0,0);var p=f*f+h*h;return p!==0?new c(f/p,-h/p).asinh():new c(f!==0?f/0:0,h!==0?-h/0:0).asinh()},asech:function(){var f=this.re,h=this.im;if(this.isZero())return c.INFINITY;var p=f*f+h*h;return p!==0?new c(f/p,-h/p).acosh():new c(f!==0?f/0:0,h!==0?-h/0:0).acosh()},inverse:function(){if(this.isZero())return c.INFINITY;if(this.isInfinite())return c.ZERO;var f=this.re,h=this.im,p=f*f+h*h;return new c(f/p,-h/p)},conjugate:function(){return new c(this.re,-this.im)},neg:function(){return new c(-this.re,-this.im)},ceil:function(f){return f=Math.pow(10,f||0),new c(Math.ceil(this.re*f)/f,Math.ceil(this.im*f)/f)},floor:function(f){return f=Math.pow(10,f||0),new c(Math.floor(this.re*f)/f,Math.floor(this.im*f)/f)},round:function(f){return f=Math.pow(10,f||0),new c(Math.round(this.re*f)/f,Math.round(this.im*f)/f)},equals:function(f,h){var p=new c(f,h);return Math.abs(p.re-this.re)<=c.EPSILON&&Math.abs(p.im-this.im)<=c.EPSILON},clone:function(){return new c(this.re,this.im)},toString:function(){var f=this.re,h=this.im,p="";return this.isNaN()?"NaN":this.isInfinite()?"Infinity":(Math.abs(f)(Object.defineProperty(Nn,"name",{value:"Complex"}),Nn.prototype.constructor=Nn,Nn.prototype.type="Complex",Nn.prototype.isComplex=!0,Nn.prototype.toJSON=function(){return{mathjs:"Complex",re:this.re,im:this.im}},Nn.prototype.toPolar=function(){return{r:this.abs(),phi:this.arg()}},Nn.prototype.format=function(t){var e="",r=this.im,n=this.re,i=Lu(this.re,t),a=Lu(this.im,t),s=Ct(t)?t:t?t.precision:null;if(s!==null){var o=Math.pow(10,-s);Math.abs(n/r)e.re?1:t.ree.im?1:t.im1&&(S[x]=(S[x]||0)+1):S[y]=(S[y]||0)+1,S}var u=function(y,S){var x=0,_=1,A=1,w=0,C=0,E=0,N=1,M=1,O=0,F=1,q=1,V=1,H=1e7,B;if(y!=null)if(S!==void 0){if(x=y,_=S,A=x*_,x%1!==0||_%1!==0)throw b()}else switch(typeof y){case"object":{if("d"in y&&"n"in y)x=y.n,_=y.d,"s"in y&&(x*=y.s);else if(0 in y)x=y[0],1 in y&&(_=y[1]);else throw m();A=x*_;break}case"number":{if(y<0&&(A=y,y=-y),y%1===0)x=y;else if(y>0){for(y>=1&&(M=Math.pow(10,Math.floor(1+Math.log(y)/Math.LN10)),y/=M);F<=H&&V<=H;)if(B=(O+q)/(F+V),y===B){F+V<=H?(x=O+q,_=F+V):V>F?(x=q,_=V):(x=O,_=F);break}else y>B?(O+=q,F+=V):(q+=O,V+=F),F>H?(x=q,_=V):(x=O,_=F);x*=M}else(isNaN(y)||isNaN(S))&&(_=x=NaN);break}case"string":{if(F=y.match(/\d+|./g),F===null)throw m();if(F[O]==="-"?(A=-1,O++):F[O]==="+"&&O++,F.length===O+1?C=a(F[O++],A):F[O+1]==="."||F[O]==="."?(F[O]!=="."&&(w=a(F[O++],A)),O++,(O+1===F.length||F[O+1]==="("&&F[O+3]===")"||F[O+1]==="'"&&F[O+3]==="'")&&(C=a(F[O],A),N=Math.pow(10,F[O].length),O++),(F[O]==="("&&F[O+2]===")"||F[O]==="'"&&F[O+2]==="'")&&(E=a(F[O+1],A),M=Math.pow(10,F[O+1].length)-1,O+=3)):F[O+1]==="/"||F[O+1]===":"?(C=a(F[O],A),N=a(F[O+2],1),O+=3):F[O+3]==="/"&&F[O+1]===" "&&(w=a(F[O],A),C=a(F[O+2],A),N=a(F[O+4],1),O+=5),F.length<=O){_=N*M,A=x=E+_*w+M*C;break}}default:throw m()}if(_===0)throw g();i.s=A<0?-1:1,i.n=Math.abs(x),i.d=Math.abs(_)};function l(y,S,x){for(var _=1;S>0;y=y*y%x,S>>=1)S&1&&(_=_*y%x);return _}function c(y,S){for(;S%2===0;S/=2);for(;S%5===0;S/=5);if(S===1)return 0;for(var x=10%S,_=1;x!==1;_++)if(x=x*10%S,_>n)return 0;return _}function f(y,S,x){for(var _=1,A=l(10,x,S),w=0;w<300;w++){if(_===A)return w;_=_*10%S,A=A*10%S}return 0}function h(y,S){if(!y)return S;if(!S)return y;for(;;){if(y%=S,!y)return S;if(S%=y,!S)return y}}function p(y,S){if(u(y,S),this instanceof p)y=h(i.d,i.n),this.s=i.s,this.n=i.n/y,this.d=i.d/y;else return s(i.s*i.n,i.d)}var g=function(){return new Error("Division by Zero")},m=function(){return new Error("Invalid argument")},b=function(){return new Error("Parameters must be integer")};p.prototype={s:1,n:0,d:1,abs:function(){return s(this.n,this.d)},neg:function(){return s(-this.s*this.n,this.d)},add:function(y,S){return u(y,S),s(this.s*this.n*i.d+i.s*this.d*i.n,this.d*i.d)},sub:function(y,S){return u(y,S),s(this.s*this.n*i.d-i.s*this.d*i.n,this.d*i.d)},mul:function(y,S){return u(y,S),s(this.s*i.s*this.n*i.n,this.d*i.d)},div:function(y,S){return u(y,S),s(this.s*i.s*this.n*i.d,this.d*i.n)},clone:function(){return s(this.s*this.n,this.d)},mod:function(y,S){if(isNaN(this.n)||isNaN(this.d))return new p(NaN);if(y===void 0)return s(this.s*this.n%this.d,1);if(u(y,S),i.n===0&&this.d===0)throw g();return s(this.s*(i.d*this.n)%(i.n*this.d),i.d*this.d)},gcd:function(y,S){return u(y,S),s(h(i.n,this.n)*h(i.d,this.d),i.d*this.d)},lcm:function(y,S){return u(y,S),i.n===0&&this.n===0?s(0,1):s(i.n*this.n,h(i.n,this.n)*h(i.d,this.d))},ceil:function(y){return y=Math.pow(10,y||0),isNaN(this.n)||isNaN(this.d)?new p(NaN):s(Math.ceil(y*this.s*this.n/this.d),y)},floor:function(y){return y=Math.pow(10,y||0),isNaN(this.n)||isNaN(this.d)?new p(NaN):s(Math.floor(y*this.s*this.n/this.d),y)},round:function(y){return y=Math.pow(10,y||0),isNaN(this.n)||isNaN(this.d)?new p(NaN):s(Math.round(y*this.s*this.n/this.d),y)},inverse:function(){return s(this.s*this.d,this.n)},pow:function(y,S){if(u(y,S),i.d===1)return i.s<0?s(Math.pow(this.s*this.d,i.n),Math.pow(this.n,i.n)):s(Math.pow(this.s*this.n,i.n),Math.pow(this.d,i.n));if(this.s<0)return null;var x=o(this.n),_=o(this.d),A=1,w=1;for(var C in x)if(C!=="1"){if(C==="0"){A=0;break}if(x[C]*=i.n,x[C]%i.d===0)x[C]/=i.d;else return null;A*=Math.pow(C,x[C])}for(var C in _)if(C!=="1"){if(_[C]*=i.n,_[C]%i.d===0)_[C]/=i.d;else return null;w*=Math.pow(C,_[C])}return i.s<0?s(w,A):s(A,w)},equals:function(y,S){return u(y,S),this.s*this.n*i.d===i.s*i.n*this.d},compare:function(y,S){u(y,S);var x=this.s*this.n*i.d-i.s*i.n*this.d;return(0=0;w--)A=A.inverse().add(x[w]);if(Math.abs(A.sub(S).valueOf())0&&(x+=S,x+=" ",_%=A),x+=_,x+="/",x+=A),x},toLatex:function(y){var S,x="",_=this.n,A=this.d;return this.s<0&&(x+="-"),A===1?x+=_:(y&&(S=Math.floor(_/A))>0&&(x+=S,_%=A),x+="\\frac{",x+=_,x+="}{",x+=A,x+="}"),x},toContinued:function(){var y,S=this.n,x=this.d,_=[];if(isNaN(S)||isNaN(x))return _;do _.push(Math.floor(S/x)),y=S%x,S=x,x=y;while(S!==1);return _},toString:function(y){var S=this.n,x=this.d;if(isNaN(S)||isNaN(x))return"NaN";y=y||15;var _=c(S,x),A=f(S,x,_),w=this.s<0?"-":"";if(w+=S/x|0,S%=x,S*=10,S&&(w+="."),_){for(var C=A;C--;)w+=S/x|0,S%=x,S*=10;w+="(";for(var C=_;C--;)w+=S/x|0,S%=x,S*=10;w+=")"}else for(var C=y;S&&C--;)w+=S/x|0,S%=x,S*=10;return w}},Object.defineProperty(p,"__esModule",{value:!0}),p.default=p,p.Fraction=p,t.exports=p})()})(RR);var kne=RR.exports;const As=Vu(kne);var Lne="Fraction",$ne=[],zne=G(Lne,$ne,()=>(Object.defineProperty(As,"name",{value:"Fraction"}),As.prototype.constructor=As,As.prototype.type="Fraction",As.prototype.isFraction=!0,As.prototype.toJSON=function(){return{mathjs:"Fraction",n:this.s*this.n,d:this.d}},As.fromJSON=function(t){return new As(t)},As),{isClass:!0}),qne="Range",Une=[],Hne=G(qne,Une,()=>{function t(e,r,n){if(!(this instanceof t))throw new SyntaxError("Constructor must be called with the new operator");var i=e!=null,a=r!=null,s=n!=null;if(i){if(Mt(e))e=e.toNumber();else if(typeof e!="number")throw new TypeError("Parameter start must be a number")}if(a){if(Mt(r))r=r.toNumber();else if(typeof r!="number")throw new TypeError("Parameter end must be a number")}if(s){if(Mt(n))n=n.toNumber();else if(typeof n!="number")throw new TypeError("Parameter step must be a number")}this.start=i?parseFloat(e):0,this.end=a?parseFloat(r):0,this.step=s?parseFloat(n):1}return t.prototype.type="Range",t.prototype.isRange=!0,t.parse=function(e){if(typeof e!="string")return null;var r=e.split(":"),n=r.map(function(a){return parseFloat(a)}),i=n.some(function(a){return isNaN(a)});if(i)return null;switch(n.length){case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[2],n[1]);default:return null}},t.prototype.clone=function(){return new t(this.start,this.end,this.step)},t.prototype.size=function(){var e=0,r=this.start,n=this.step,i=this.end,a=i-r;return Io(n)===Io(a)?e=Math.ceil(a/n):a===0&&(e=0),isNaN(e)&&(e=0),[e]},t.prototype.min=function(){var e=this.size()[0];if(e>0)return this.step>0?this.start:this.start+(e-1)*this.step},t.prototype.max=function(){var e=this.size()[0];if(e>0)return this.step>0?this.start+(e-1)*this.step:this.start},t.prototype.forEach=function(e){var r=this.start,n=this.step,i=this.end,a=0;if(n>0)for(;ri;)e(r,[a],this),r+=n,a++},t.prototype.map=function(e){var r=[];return this.forEach(function(n,i,a){r[i[0]]=e(n,i,a)}),r},t.prototype.toArray=function(){var e=[];return this.forEach(function(r,n){e[n[0]]=r}),e},t.prototype.valueOf=function(){return this.toArray()},t.prototype.format=function(e){var r=Lu(this.start,e);return this.step!==1&&(r+=":"+Lu(this.step,e)),r+=":"+Lu(this.end,e),r},t.prototype.toString=function(){return this.format()},t.prototype.toJSON=function(){return{mathjs:"Range",start:this.start,end:this.end,step:this.step}},t.fromJSON=function(e){return new t(e.start,e.end,e.step)},t},{isClass:!0}),Wne="Matrix",Vne=[],Yne=G(Wne,Vne,()=>{function t(){if(!(this instanceof t))throw new SyntaxError("Constructor must be called with the new operator")}return t.prototype.type="Matrix",t.prototype.isMatrix=!0,t.prototype.storage=function(){throw new Error("Cannot invoke storage on a Matrix interface")},t.prototype.datatype=function(){throw new Error("Cannot invoke datatype on a Matrix interface")},t.prototype.create=function(e,r){throw new Error("Cannot invoke create on a Matrix interface")},t.prototype.subset=function(e,r,n){throw new Error("Cannot invoke subset on a Matrix interface")},t.prototype.get=function(e){throw new Error("Cannot invoke get on a Matrix interface")},t.prototype.set=function(e,r,n){throw new Error("Cannot invoke set on a Matrix interface")},t.prototype.resize=function(e,r){throw new Error("Cannot invoke resize on a Matrix interface")},t.prototype.reshape=function(e,r){throw new Error("Cannot invoke reshape on a Matrix interface")},t.prototype.clone=function(){throw new Error("Cannot invoke clone on a Matrix interface")},t.prototype.size=function(){throw new Error("Cannot invoke size on a Matrix interface")},t.prototype.map=function(e,r){throw new Error("Cannot invoke map on a Matrix interface")},t.prototype.forEach=function(e){throw new Error("Cannot invoke forEach on a Matrix interface")},t.prototype[Symbol.iterator]=function(){throw new Error("Cannot iterate a Matrix interface")},t.prototype.toArray=function(){throw new Error("Cannot invoke toArray on a Matrix interface")},t.prototype.valueOf=function(){throw new Error("Cannot invoke valueOf on a Matrix interface")},t.prototype.format=function(e){throw new Error("Cannot invoke format on a Matrix interface")},t.prototype.toString=function(){throw new Error("Cannot invoke toString on a Matrix interface")},t},{isClass:!0});function jne(t){var e=0,r=1,n=Object.create(null),i=Object.create(null),a=0,s=function(u){var l=i[u];if(l&&(delete n[l],delete i[u],--e,r===l)){if(!e){a=0,r=1;return}for(;!Object.prototype.hasOwnProperty.call(n,++r););}};return t=Math.abs(t),{hit:function(u){var l=i[u],c=++a;if(n[c]=u,i[u]=c,!l)return++e,e<=t?void 0:(u=n[r],s(u),u);if(delete n[l],r===l)for(;!Object.prototype.hasOwnProperty.call(n,++r););},delete:s,clear:function(){e=a=0,r=1,n=Object.create(null),i=Object.create(null)}}}function pd(t){var{hasher:e,limit:r}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return r=r??Number.POSITIVE_INFINITY,e=e??JSON.stringify,function n(){typeof n.cache!="object"&&(n.cache={values:new Map,lru:jne(r||Number.POSITIVE_INFINITY)});for(var i=[],a=0;a{var{Matrix:e}=t;function r(c,f){if(!(this instanceof r))throw new SyntaxError("Constructor must be called with the new operator");if(f&&!qn(f))throw new Error("Invalid datatype: "+f);if(dt(c))c.type==="DenseMatrix"?(this._data=xt(c._data),this._size=xt(c._size),this._datatype=f||c._datatype):(this._data=c.toArray(),this._size=c.size(),this._datatype=f||c._datatype);else if(c&&sr(c.data)&&sr(c.size))this._data=c.data,this._size=c.size,C2(this._data,this._size),this._datatype=f||c.datatype;else if(sr(c))this._data=l(c),this._size=Nt(this._data),C2(this._data,this._size),this._datatype=f;else{if(c)throw new TypeError("Unsupported type of data ("+xr(c)+")");this._data=[],this._size=[0],this._datatype=f}}r.prototype=new e,r.prototype.createDenseMatrix=function(c,f){return new r(c,f)},Object.defineProperty(r,"name",{value:"DenseMatrix"}),r.prototype.constructor=r,r.prototype.type="DenseMatrix",r.prototype.isDenseMatrix=!0,r.prototype.getDataType=function(){return Uh(this._data,xr)},r.prototype.storage=function(){return"dense"},r.prototype.datatype=function(){return this._datatype},r.prototype.create=function(c,f){return new r(c,f)},r.prototype.subset=function(c,f,h){switch(arguments.length){case 1:return n(this,c);case 2:case 3:return a(this,c,f,h);default:throw new SyntaxError("Wrong number of arguments")}},r.prototype.get=function(c){if(!sr(c))throw new TypeError("Array expected");if(c.length!==this._size.length)throw new It(c.length,this._size.length);for(var f=0;f");var x=f.max().map(function(w){return w+1});u(c,x,p);var _=g.length,A=0;s(c._data,f,h,_,A)}return c}function s(c,f,h,p,g){var m=g===p-1,b=f.dimension(g);m?b.forEach(function(y,S){gr(y),c[y]=h[S[0]]}):b.forEach(function(y,S){gr(y),s(c[y],f,h[S[0]],p,g+1)})}r.prototype.resize=function(c,f,h){if(!sa(c))throw new TypeError("Array or Matrix expected");var p=c.valueOf().map(m=>Array.isArray(m)&&m.length===1?m[0]:m),g=h?this.clone():this;return o(g,p,f)};function o(c,f,h){if(f.length===0){for(var p=c._data;sr(p);)p=p[0];return p}return c._size=f.slice(0),c._data=gc(c._data,c._size,h),c}r.prototype.reshape=function(c,f){var h=f?this.clone():this;h._data=nw(h._data,c);var p=h._size.reduce((g,m)=>g*m);return h._size=iw(c,p),h};function u(c,f,h){for(var p=c._size.slice(0),g=!1;p.lengthp[m]&&(p[m]=f[m],g=!0);g&&o(c,p,h)}r.prototype.clone=function(){var c=new r({data:xt(this._data),size:xt(this._size),datatype:this._datatype});return c},r.prototype.size=function(){return this._size.slice(0)},r.prototype.map=function(c){var f=this,h=IR(c),p=function b(y,S){return sr(y)?y.map(function(x,_){return b(x,S.concat(_))}):h===1?c(y):h===2?c(y,S):c(y,S,f)},g=p(this._data,[]),m=this._datatype!==void 0?Uh(g,xr):void 0;return new r(g,m)},r.prototype.forEach=function(c){var f=this,h=function p(g,m){sr(g)?g.forEach(function(b,y){p(b,m.concat(y))}):c(g,m,f)};h(this._data,[])},r.prototype[Symbol.iterator]=function*(){var c=function*f(h,p){if(sr(h))for(var g=0;g[x[y]]);f.push(new r(S,c._datatype))},m=0;m0?c:0,h=c<0?-c:0,p=this._size[0],g=this._size[1],m=Math.min(p-h,g-f),b=[],y=0;y0?h:0,m=h<0?-h:0,b=c[0],y=c[1],S=Math.min(b-m,y-g),x;if(sr(f)){if(f.length!==S)throw new Error("Invalid value array length");x=function(E){return f[E]}}else if(dt(f)){var _=f.size();if(_.length!==1||_[0]!==S)throw new Error("Invalid matrix length");x=function(E){return f.get([E])}}else x=function(){return f};p||(p=Mt(x(0))?x(0).mul(0):0);var A=[];if(c.length>0){A=gc(A,c,p);for(var w=0;w{var{typed:e}=t;return e(R2,{any:xt})});function BR(t){var e=t.length,r=t[0].length,n,i,a=[];for(i=0;i=n.length)throw new Fa(e,n.length);return dt(t)?t.create(Ev(t.valueOf(),e,r)):Ev(t,e,r)}function Ev(t,e,r){var n,i,a,s;if(e<=0)if(Array.isArray(t[0])){for(s=BR(t),i=[],n=0;n{var{typed:e}=t;return e(B2,{number:ot,BigNumber:function(n){return n.isInt()},Fraction:function(n){return n.d===1&&isFinite(n.n)},"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),Pa="number",Oc="number, number";function kR(t){return Math.abs(t)}kR.signature=Pa;function LR(t,e){return t+e}LR.signature=Oc;function $R(t,e){return t-e}$R.signature=Oc;function zR(t,e){return t*e}zR.signature=Oc;function qR(t){return-t}qR.signature=Pa;function UR(t){return t}UR.signature=Pa;function eh(t){return ere(t)}eh.signature=Pa;function HR(t){return t*t*t}HR.signature=Pa;function WR(t){return Math.exp(t)}WR.signature=Pa;function VR(t){return tre(t)}VR.signature=Pa;function YR(t,e){if(!ot(t)||!ot(e))throw new Error("Parameters in function lcm must be integer numbers");if(t===0||e===0)return 0;for(var r,n=t*e;e!==0;)r=e,e=t%r,t=r;return Math.abs(n/t)}YR.signature=Oc;function tie(t,e){return e?Math.log(t)/Math.log(e):Math.log(t)}function jR(t){return Jte(t)}jR.signature=Pa;function GR(t){return Kte(t)}GR.signature=Pa;function k2(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2,r=e<0;if(r&&(e=-e),e===0)throw new Error("Root must be non-zero");if(t<0&&Math.abs(e)%2!==1)throw new Error("Root must be odd when a is negative.");if(t===0)return r?1/0:0;if(!isFinite(t))return r?0:t;var n=Math.pow(Math.abs(t),1/e);return n=t<0?-n:n,r?1/n:n}function i1(t){return Io(t)}i1.signature=Pa;function XR(t){return t*t}XR.signature=Pa;function ZR(t,e){var r,n,i,a=0,s=1,o=1,u=0;if(!ot(t)||!ot(e))throw new Error("Parameters in function xgcd must be integer numbers");for(;e;)n=Math.floor(t/e),i=t-n*e,r=a,a=s-n*a,s=r,r=o,o=u-n*o,u=r,t=e,e=i;var l;return t<0?l=[-t,-s,-u]:l=[t,t?s:0,u],l}ZR.signature=Oc;function KR(t,e){return t*t<1&&e===1/0||t*t>1&&e===-1/0?0:Math.pow(t,e)}KR.signature=Oc;function L2(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(!ot(e)||e<0||e>15)throw new Error("Number of decimals in function round must be an integer from 0 to 15 inclusive");return parseFloat(aR(t,e))}var rie="number",Fc="number, number";function JR(t,e){if(!ot(t)||!ot(e))throw new Error("Integers expected in function bitAnd");return t&e}JR.signature=Fc;function QR(t){if(!ot(t))throw new Error("Integer expected in function bitNot");return~t}QR.signature=rie;function eI(t,e){if(!ot(t)||!ot(e))throw new Error("Integers expected in function bitOr");return t|e}eI.signature=Fc;function tI(t,e){if(!ot(t)||!ot(e))throw new Error("Integers expected in function bitXor");return t^e}tI.signature=Fc;function rI(t,e){if(!ot(t)||!ot(e))throw new Error("Integers expected in function leftShift");return t<>e}nI.signature=Fc;function iI(t,e){if(!ot(t)||!ot(e))throw new Error("Integers expected in function rightLogShift");return t>>>e}iI.signature=Fc;function $s(t,e){if(e>1;return $s(t,r)*$s(r+1,e)}function aI(t,e){if(!ot(t)||t<0)throw new TypeError("Positive integer value expected in function combinations");if(!ot(e)||e<0)throw new TypeError("Positive integer value expected in function combinations");if(e>t)throw new TypeError("k must be less than or equal to n");for(var r=t-e,n=1,i=e171?1/0:$s(1,t-1);if(t<.5)return Math.PI/(Math.sin(Math.PI*t)*Cv(1-t));if(t>=171.35)return 1/0;if(t>85){var r=t*t,n=r*t,i=n*t,a=i*t;return Math.sqrt(2*Math.PI/t)*Math.pow(t/Math.E,t)*(1+1/(12*t)+1/(288*r)-139/(51840*n)-571/(2488320*i)+163879/(209018880*a)+5246819/(75246796800*a*t))}--t,e=rc[0];for(var s=1;s=1;n--)r+=$2[n]/(t+n);return fI+(t+.5)*Math.log(e)-e+Math.log(r)}Mv.signature="number";var Gn="number";function hI(t){return sre(t)}hI.signature=Gn;function dI(t){return Math.atan(1/t)}dI.signature=Gn;function pI(t){return isFinite(t)?(Math.log((t+1)/t)+Math.log(t/(t-1)))/2:0}pI.signature=Gn;function mI(t){return Math.asin(1/t)}mI.signature=Gn;function vI(t){var e=1/t;return Math.log(e+Math.sqrt(e*e+1))}vI.signature=Gn;function gI(t){return Math.acos(1/t)}gI.signature=Gn;function yI(t){var e=1/t,r=Math.sqrt(e*e-1);return Math.log(r+e)}yI.signature=Gn;function bI(t){return ore(t)}bI.signature=Gn;function xI(t){return ure(t)}xI.signature=Gn;function wI(t){return 1/Math.tan(t)}wI.signature=Gn;function SI(t){var e=Math.exp(2*t);return(e+1)/(e-1)}SI.signature=Gn;function _I(t){return 1/Math.sin(t)}_I.signature=Gn;function AI(t){return t===0?Number.POSITIVE_INFINITY:Math.abs(2/(Math.exp(t)-Math.exp(-t)))*Io(t)}AI.signature=Gn;function DI(t){return 1/Math.cos(t)}DI.signature=Gn;function NI(t){return 2/(Math.exp(t)+Math.exp(-t))}NI.signature=Gn;function EI(t){return cre(t)}EI.signature=Gn;var zg="number";function CI(t){return t<0}CI.signature=zg;function MI(t){return t>0}MI.signature=zg;function TI(t){return t===0}TI.signature=zg;function OI(t){return Number.isNaN(t)}OI.signature=zg;var z2="isNegative",cie=["typed"],fie=G(z2,cie,t=>{var{typed:e}=t;return e(z2,{number:CI,BigNumber:function(n){return n.isNeg()&&!n.isZero()&&!n.isNaN()},Fraction:function(n){return n.s<0},Unit:e.referToSelf(r=>n=>e.find(r,n.valueType())(n.value)),"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),q2="isNumeric",hie=["typed"],die=G(q2,hie,t=>{var{typed:e}=t;return e(q2,{"number | BigNumber | Fraction | boolean":()=>!0,"Complex | Unit | string | null | undefined | Node":()=>!1,"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),U2="hasNumericValue",pie=["typed","isNumeric"],mie=G(U2,pie,t=>{var{typed:e,isNumeric:r}=t;return e(U2,{boolean:()=>!0,string:function(i){return i.trim().length>0&&!isNaN(Number(i))},any:function(i){return r(i)}})}),H2="isPositive",vie=["typed"],gie=G(H2,vie,t=>{var{typed:e}=t;return e(H2,{number:MI,BigNumber:function(n){return!n.isNeg()&&!n.isZero()&&!n.isNaN()},Fraction:function(n){return n.s>0&&n.n>0},Unit:e.referToSelf(r=>n=>e.find(r,n.valueType())(n.value)),"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),W2="isZero",yie=["typed"],bie=G(W2,yie,t=>{var{typed:e}=t;return e(W2,{number:TI,BigNumber:function(n){return n.isZero()},Complex:function(n){return n.re===0&&n.im===0},Fraction:function(n){return n.d===1&&n.n===0},Unit:e.referToSelf(r=>n=>e.find(r,n.valueType())(n.value)),"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),V2="isNaN",xie=["typed"],wie=G(V2,xie,t=>{var{typed:e}=t;return e(V2,{number:OI,BigNumber:function(n){return n.isNaN()},Fraction:function(n){return!1},Complex:function(n){return n.isNaN()},Unit:function(n){return Number.isNaN(n.value)},"Array | Matrix":function(n){return Bt(n,Number.isNaN)}})}),Y2="typeOf",Sie=["typed"],_ie=G(Y2,Sie,t=>{var{typed:e}=t;return e(Y2,{any:xr})});function Ja(t,e,r){if(r==null)return t.eq(e);if(t.eq(e))return!0;if(t.isNaN()||e.isNaN())return!1;if(t.isFinite()&&e.isFinite()){var n=t.minus(e).abs();if(n.isZero())return!0;var i=t.constructor.max(t.abs(),e.abs());return n.lte(i.times(r))}return!1}function Aie(t,e,r){return Ri(t.re,e.re,r)&&Ri(t.im,e.im,r)}var Pc=G("compareUnits",["typed"],t=>{var{typed:e}=t;return{"Unit, Unit":e.referToSelf(r=>(n,i)=>{if(!n.equalBase(i))throw new Error("Cannot compare units with different base");return e.find(r,[n.valueType(),i.valueType()])(n.value,i.value)})}}),Tv="equalScalar",Die=["typed","config"],Nie=G(Tv,Die,t=>{var{typed:e,config:r}=t,n=Pc({typed:e});return e(Tv,{"boolean, boolean":function(a,s){return a===s},"number, number":function(a,s){return Ri(a,s,r.epsilon)},"BigNumber, BigNumber":function(a,s){return a.eq(s)||Ja(a,s,r.epsilon)},"Fraction, Fraction":function(a,s){return a.equals(s)},"Complex, Complex":function(a,s){return Aie(a,s,r.epsilon)}},n)});G(Tv,["typed","config"],t=>{var{typed:e,config:r}=t;return e(Tv,{"number, number":function(i,a){return Ri(i,a,r.epsilon)}})});var Eie="SparseMatrix",Cie=["typed","equalScalar","Matrix"],Mie=G(Eie,Cie,t=>{var{typed:e,equalScalar:r,Matrix:n}=t;function i(m,b){if(!(this instanceof i))throw new SyntaxError("Constructor must be called with the new operator");if(b&&!qn(b))throw new Error("Invalid datatype: "+b);if(dt(m))a(this,m,b);else if(m&&sr(m.index)&&sr(m.ptr)&&sr(m.size))this._values=m.values,this._index=m.index,this._ptr=m.ptr,this._size=m.size,this._datatype=b||m.datatype;else if(sr(m))s(this,m,b);else{if(m)throw new TypeError("Unsupported type of data ("+xr(m)+")");this._values=[],this._index=[],this._ptr=[0],this._size=[0,0],this._datatype=b}}function a(m,b,y){b.type==="SparseMatrix"?(m._values=b._values?xt(b._values):void 0,m._index=xt(b._index),m._ptr=xt(b._ptr),m._size=xt(b._size),m._datatype=y||b._datatype):s(m,b.valueOf(),y||b._datatype)}function s(m,b,y){m._values=[],m._index=[],m._ptr=[],m._datatype=y;var S=b.length,x=0,_=r,A=0;if(qn(y)&&(_=e.find(r,[y,y])||r,A=e.convert(0,y)),S>0){var w=0;do{m._ptr.push(m._index.length);for(var C=0;C");if(x.length===1){var E=b.dimension(0);E.forEach(function(O,F){gr(O),m.set([O,0],y[F[0]],S)})}else{var N=b.dimension(0),M=b.dimension(1);N.forEach(function(O,F){gr(O),M.forEach(function(q,V){gr(q),m.set([O,q],y[F[0]][V[0]],S)})})}}return m}i.prototype.get=function(m){if(!sr(m))throw new TypeError("Array expected");if(m.length!==this._size.length)throw new It(m.length,this._size.length);if(!this._values)throw new Error("Cannot invoke get on a Pattern only matrix");var b=m[0],y=m[1];gr(b,this._size[0]),gr(y,this._size[1]);var S=l(b,this._ptr[y],this._ptr[y+1],this._index);return S_-1||x>A-1)&&(h(this,Math.max(S+1,_),Math.max(x+1,A),y),_=this._size[0],A=this._size[1]),gr(S,_),gr(x,A);var E=l(S,this._ptr[x],this._ptr[x+1],this._index);return EArray.isArray(_)&&_.length===1?_[0]:_);if(S.length!==2)throw new Error("Only two dimensions matrix are supported");S.forEach(function(_){if(!Ct(_)||!ot(_)||_<0)throw new TypeError("Invalid size, must contain positive integers (size: "+Pt(S)+")")});var x=y?this.clone():this;return h(x,S[0],S[1],b)};function h(m,b,y,S){var x=S||0,_=r,A=0;qn(m._datatype)&&(_=e.find(r,[m._datatype,m._datatype])||r,A=e.convert(0,m._datatype),x=e.convert(x,m._datatype));var w=!_(x,A),C=m._size[0],E=m._size[1],N,M,O;if(y>E){for(M=E;MC){if(w){var F=0;for(M=0;Mb-1&&(m._values.splice(O,1),m._index.splice(O,1),V++)}m._ptr[M]=m._values.length}return m._size[0]=b,m._size[1]=y,m}i.prototype.reshape=function(m,b){if(!sr(m))throw new TypeError("Array expected");if(m.length!==2)throw new Error("Sparse matrices can only be reshaped in two dimensions");m.forEach(function($){if(!Ct($)||!ot($)||$<=-2||$===0)throw new TypeError("Invalid size, must contain positive integers or -1 (size: "+Pt(m)+")")});var y=this._size[0]*this._size[1];m=iw(m,y);var S=m[0]*m[1];if(y!==S)throw new Error("Reshaping sparse matrix will result in the wrong number of elements");var x=b?this.clone():this;if(this._size[0]===m[0]&&this._size[1]===m[1])return x;for(var _=[],A=0;A=b&&B<=y&&O(m._values[H],B-b,F-S)}else{for(var I={},K=q;K "+(this._values?Pt(this._values[C],m):"X")}return x},i.prototype.toString=function(){return Pt(this.toArray())},i.prototype.toJSON=function(){return{mathjs:"SparseMatrix",values:this._values,index:this._index,ptr:this._ptr,size:this._size,datatype:this._datatype}},i.prototype.diagonal=function(m){if(m){if(Mt(m)&&(m=m.toNumber()),!Ct(m)||!ot(m))throw new TypeError("The parameter k must be an integer number")}else m=0;var b=m>0?m:0,y=m<0?-m:0,S=this._size[0],x=this._size[1],_=Math.min(S-y,x-b),A=[],w=[],C=[];C[0]=0;for(var E=b;E0?y:0,C=y<0?-y:0,E=m[0],N=m[1],M=Math.min(E-C,N-w),O;if(sr(b)){if(b.length!==M)throw new Error("Invalid value array length");O=function(se){return b[se]}}else if(dt(b)){var F=b.size();if(F.length!==1||F[0]!==M)throw new Error("Invalid matrix length");O=function(se){return b.get([se])}}else O=function(){return b};for(var q=[],V=[],H=[],B=0;B=0&&I=C||x[N]!==b)){var O=S?S[E]:void 0;x.splice(N,0,b),S&&S.splice(N,0,O),x.splice(N<=E?E+1:E,1),S&&S.splice(N<=E?E+1:E,1);continue}if(N=C||x[E]!==m)){var F=S?S[N]:void 0;x.splice(E,0,m),S&&S.splice(E,0,F),x.splice(E<=N?N+1:N,1),S&&S.splice(E<=N?N+1:N,1)}}},i},{isClass:!0}),Tie="number",Oie=["typed"];function Fie(t){var e=t.match(/(0[box])([0-9a-fA-F]*)\.([0-9a-fA-F]*)/);if(e){var r={"0b":2,"0o":8,"0x":16}[e[1]],n=e[2],i=e[3];return{input:t,radix:r,integerPart:n,fractionalPart:i}}else return null}function Pie(t){for(var e=parseInt(t.integerPart,t.radix),r=0,n=0;n{var{typed:e}=t,r=e("number",{"":function(){return 0},number:function(i){return i},string:function(i){if(i==="NaN")return NaN;var a=Fie(i);if(a)return Pie(a);var s=0,o=i.match(/(0[box][0-9a-fA-F]*)i([0-9]*)/);o&&(s=Number(o[2]),i=o[1]);var u=Number(i);if(isNaN(u))throw new SyntaxError('String "'+i+'" is not a valid number');if(o){if(u>2**s-1)throw new SyntaxError('String "'.concat(i,'" is out of range'));u>=2**(s-1)&&(u=u-2**s)}return u},BigNumber:function(i){return i.toNumber()},Fraction:function(i){return i.valueOf()},Unit:e.referToSelf(n=>i=>{var a=i.clone();return a.value=n(i.value),a}),null:function(i){return 0},"Unit, string | Unit":function(i,a){return i.toNumber(a)},"Array | Matrix":e.referToSelf(n=>i=>Bt(i,n))});return r.fromJSON=function(n){return parseFloat(n.value)},r}),j2="string",Iie=["typed"],Bie=G(j2,Iie,t=>{var{typed:e}=t;return e(j2,{"":function(){return""},number:Lu,null:function(n){return"null"},boolean:function(n){return n+""},string:function(n){return n},"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r)),any:function(n){return String(n)}})}),G2="boolean",kie=["typed"],Lie=G(G2,kie,t=>{var{typed:e}=t;return e(G2,{"":function(){return!1},boolean:function(n){return n},number:function(n){return!!n},null:function(n){return!1},BigNumber:function(n){return!n.isZero()},string:function(n){var i=n.toLowerCase();if(i==="true")return!0;if(i==="false")return!1;var a=Number(n);if(n!==""&&!isNaN(a))return!!a;throw new Error('Cannot convert "'+n+'" to a boolean')},"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),$ie="bignumber",zie=["typed","BigNumber"],qie=G($ie,zie,t=>{var{typed:e,BigNumber:r}=t;return e("bignumber",{"":function(){return new r(0)},number:function(i){return new r(i+"")},string:function(i){var a=i.match(/(0[box][0-9a-fA-F]*)i([0-9]*)/);if(a){var s=a[2],o=r(a[1]),u=new r(2).pow(Number(s));if(o.gt(u.sub(1)))throw new SyntaxError('String "'.concat(i,'" is out of range'));var l=new r(2).pow(Number(s)-1);return o.gte(l)?o.sub(u):o}return new r(i)},BigNumber:function(i){return i},Unit:e.referToSelf(n=>i=>{var a=i.clone();return a.value=n(i.value),a}),Fraction:function(i){return new r(i.n).div(i.d).times(i.s)},null:function(i){return new r(0)},"Array | Matrix":e.referToSelf(n=>i=>Bt(i,n))})}),Uie="complex",Hie=["typed","Complex"],Wie=G(Uie,Hie,t=>{var{typed:e,Complex:r}=t;return e("complex",{"":function(){return r.ZERO},number:function(i){return new r(i,0)},"number, number":function(i,a){return new r(i,a)},"BigNumber, BigNumber":function(i,a){return new r(i.toNumber(),a.toNumber())},Fraction:function(i){return new r(i.valueOf(),0)},Complex:function(i){return i.clone()},string:function(i){return r(i)},null:function(i){return r(0)},Object:function(i){if("re"in i&&"im"in i)return new r(i.re,i.im);if("r"in i&&"phi"in i||"abs"in i&&"arg"in i)return new r(i);throw new Error("Expected object with properties (re and im) or (r and phi) or (abs and arg)")},"Array | Matrix":e.referToSelf(n=>i=>Bt(i,n))})}),Vie="fraction",Yie=["typed","Fraction"],jie=G(Vie,Yie,t=>{var{typed:e,Fraction:r}=t;return e("fraction",{number:function(i){if(!isFinite(i)||isNaN(i))throw new Error(i+" cannot be represented as a fraction");return new r(i)},string:function(i){return new r(i)},"number, number":function(i,a){return new r(i,a)},null:function(i){return new r(0)},BigNumber:function(i){return new r(i.toString())},Fraction:function(i){return i},Unit:e.referToSelf(n=>i=>{var a=i.clone();return a.value=n(i.value),a}),Object:function(i){return new r(i)},"Array | Matrix":e.referToSelf(n=>i=>Bt(i,n))})}),X2="matrix",Gie=["typed","Matrix","DenseMatrix","SparseMatrix"],Xie=G(X2,Gie,t=>{var{typed:e,Matrix:r,DenseMatrix:n,SparseMatrix:i}=t;return e(X2,{"":function(){return a([])},string:function(o){return a([],o)},"string, string":function(o,u){return a([],o,u)},Array:function(o){return a(o)},Matrix:function(o){return a(o,o.storage())},"Array | Matrix, string":a,"Array | Matrix, string, string":a});function a(s,o,u){if(o==="dense"||o==="default"||o===void 0)return new n(s,u);if(o==="sparse")return new i(s,u);throw new TypeError("Unknown matrix type "+JSON.stringify(o)+".")}}),Z2="matrixFromFunction",Zie=["typed","matrix","isZero"],Kie=G(Z2,Zie,t=>{var{typed:e,matrix:r,isZero:n}=t;return e(Z2,{"Array | Matrix, function, string, string":function(s,o,u,l){return i(s,o,u,l)},"Array | Matrix, function, string":function(s,o,u){return i(s,o,u)},"Matrix, function":function(s,o){return i(s,o,"dense")},"Array, function":function(s,o){return i(s,o,"dense").toArray()},"Array | Matrix, string, function":function(s,o,u){return i(s,u,o)},"Array | Matrix, string, string, function":function(s,o,u,l){return i(s,l,o,u)}});function i(a,s,o,u){var l;return u!==void 0?l=r(o,u):l=r(o),l.resize(a),l.forEach(function(c,f){var h=s(f);n(h)||l.set(f,h)}),l}}),K2="matrixFromRows",Jie=["typed","matrix","flatten","size"],Qie=G(K2,Jie,t=>{var{typed:e,matrix:r,flatten:n,size:i}=t;return e(K2,{"...Array":function(u){return a(u)},"...Matrix":function(u){return r(a(u.map(l=>l.toArray())))}});function a(o){if(o.length===0)throw new TypeError("At least one row is needed to construct a matrix.");var u=s(o[0]),l=[];for(var c of o){var f=s(c);if(f!==u)throw new TypeError("The vectors had different length: "+(u|0)+" ≠ "+(f|0));l.push(n(c))}return l}function s(o){var u=i(o);if(u.length===1)return u[0];if(u.length===2){if(u[0]===1)return u[1];if(u[1]===1)return u[0];throw new TypeError("At least one of the arguments is not a vector.")}else throw new TypeError("Only one- or two-dimensional vectors are supported.")}}),J2="matrixFromColumns",eae=["typed","matrix","flatten","size"],tae=G(J2,eae,t=>{var{typed:e,matrix:r,flatten:n,size:i}=t;return e(J2,{"...Array":function(u){return a(u)},"...Matrix":function(u){return r(a(u.map(l=>l.toArray())))}});function a(o){if(o.length===0)throw new TypeError("At least one column is needed to construct a matrix.");for(var u=s(o[0]),l=[],c=0;c{var{typed:e}=t;return e(Q2,{"Unit, Array":function(n,i){return n.splitUnit(i)}})}),eN="unaryMinus",iae=["typed"],aae=G(eN,iae,t=>{var{typed:e}=t;return e(eN,{number:qR,"Complex | BigNumber | Fraction":r=>r.neg(),Unit:e.referToSelf(r=>n=>{var i=n.clone();return i.value=e.find(r,i.valueType())(n.value),i}),"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),tN="unaryPlus",sae=["typed","config","BigNumber"],oae=G(tN,sae,t=>{var{typed:e,config:r,BigNumber:n}=t;return e(tN,{number:UR,Complex:function(a){return a},BigNumber:function(a){return a},Fraction:function(a){return a},Unit:function(a){return a.clone()},"Array | Matrix":e.referToSelf(i=>a=>Bt(a,i)),"boolean | string":function(a){return r.number==="BigNumber"?new n(+a):+a}})}),rN="abs",uae=["typed"],lae=G(rN,uae,t=>{var{typed:e}=t;return e(rN,{number:kR,"Complex | BigNumber | Fraction | Unit":r=>r.abs(),"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),nN="apply",cae=["typed","isInteger"],uw=G(nN,cae,t=>{var{typed:e,isInteger:r}=t;return e(nN,{"Array | Matrix, number | BigNumber, function":function(i,a,s){if(!r(a))throw new TypeError("Integer number expected for dimension");var o=Array.isArray(i)?Nt(i):i.size();if(a<0||a>=o.length)throw new Fa(a,o.length);return dt(i)?i.create(Ov(i.valueOf(),a,s)):Ov(i,a,s)}})});function Ov(t,e,r){var n,i,a;if(e<=0)if(Array.isArray(t[0])){for(a=fae(t),i=[],n=0;n{var{typed:e}=t;return e(iN,{"number, number":LR,"Complex, Complex":function(n,i){return n.add(i)},"BigNumber, BigNumber":function(n,i){return n.plus(i)},"Fraction, Fraction":function(n,i){return n.add(i)},"Unit, Unit":e.referToSelf(r=>(n,i)=>{if(n.value===null||n.value===void 0)throw new Error("Parameter x contains a unit with undefined value");if(i.value===null||i.value===void 0)throw new Error("Parameter y contains a unit with undefined value");if(!n.equalBase(i))throw new Error("Units do not match");var a=n.clone();return a.value=e.find(r,[a.valueType(),i.valueType()])(a.value,i.value),a.fixPrefix=!1,a})})}),aN="subtractScalar",pae=["typed"],mae=G(aN,pae,t=>{var{typed:e}=t;return e(aN,{"number, number":$R,"Complex, Complex":function(n,i){return n.sub(i)},"BigNumber, BigNumber":function(n,i){return n.minus(i)},"Fraction, Fraction":function(n,i){return n.sub(i)},"Unit, Unit":e.referToSelf(r=>(n,i)=>{if(n.value===null||n.value===void 0)throw new Error("Parameter x contains a unit with undefined value");if(i.value===null||i.value===void 0)throw new Error("Parameter y contains a unit with undefined value");if(!n.equalBase(i))throw new Error("Units do not match");var a=n.clone();return a.value=e.find(r,[a.valueType(),i.valueType()])(a.value,i.value),a.fixPrefix=!1,a})})}),sN="cbrt",vae=["config","typed","isNegative","unaryMinus","matrix","Complex","BigNumber","Fraction"],gae=G(sN,vae,t=>{var{config:e,typed:r,isNegative:n,unaryMinus:i,matrix:a,Complex:s,BigNumber:o,Fraction:u}=t;return r(sN,{number:eh,Complex:l,"Complex, boolean":l,BigNumber:function(h){return h.cbrt()},Unit:c});function l(f,h){var p=f.arg()/3,g=f.abs(),m=new s(eh(g),0).mul(new s(0,p).exp());if(h){var b=[m,new s(eh(g),0).mul(new s(0,p+Math.PI*2/3).exp()),new s(eh(g),0).mul(new s(0,p-Math.PI*2/3).exp())];return e.matrix==="Array"?b:a(b)}else return m}function c(f){if(f.value&&Hs(f.value)){var h=f.clone();return h.value=1,h=h.pow(1/3),h.value=l(f.value),h}else{var p=n(f.value);p&&(f.value=i(f.value));var g;Mt(f.value)?g=new o(1).div(3):hd(f.value)?g=new u(1,3):g=1/3;var m=f.pow(g);return p&&(m.value=i(m.value)),m}}}),yae="matAlgo11xS0s",bae=["typed","equalScalar"],Rn=G(yae,bae,t=>{var{typed:e,equalScalar:r}=t;return function(i,a,s,o){var u=i._values,l=i._index,c=i._ptr,f=i._size,h=i._datatype;if(!u)throw new Error("Cannot perform operation on Pattern Sparse Matrix and Scalar value");var p=f[0],g=f[1],m,b=r,y=0,S=s;typeof h=="string"&&(m=h,b=e.find(r,[m,m]),y=e.convert(0,m),a=e.convert(a,m),S=e.find(s,[m,m]));for(var x=[],_=[],A=[],w=0;w{var{typed:e,DenseMatrix:r}=t;return function(i,a,s,o){var u=i._values,l=i._index,c=i._ptr,f=i._size,h=i._datatype;if(!u)throw new Error("Cannot perform operation on Pattern Sparse Matrix and Scalar value");var p=f[0],g=f[1],m,b=s;typeof h=="string"&&(m=h,a=e.convert(a,m),b=e.find(s,[m,m]));for(var y=[],S=[],x=[],_=0;_{var{typed:e}=t;return function(i,a,s,o){var u=i._data,l=i._size,c=i._datatype,f,h=s;typeof c=="string"&&(f=c,a=e.convert(a,f),h=e.find(s,[f,f]));var p=l.length>0?r(h,0,l,l[0],u,a,o):[];return i.createDenseMatrix({data:p,size:xt(l),datatype:f})};function r(n,i,a,s,o,u,l){var c=[];if(i===a.length-1)for(var f=0;f{var{typed:e,config:r,round:n}=t;return e(a1,{number:function(a){return Ri(a,n(a),r.epsilon)?n(a):Math.ceil(a)},"number, number":function(a,s){if(Ri(a,n(a,s),r.epsilon))return n(a,s);var[o,u]="".concat(a,"e").split("e"),l=Math.ceil(Number("".concat(o,"e").concat(Number(u)+s)));return[o,u]="".concat(l,"e").split("e"),Number("".concat(o,"e").concat(Number(u)-s))}})}),Nae=G(a1,Aae,t=>{var{typed:e,config:r,round:n,matrix:i,equalScalar:a,zeros:s,DenseMatrix:o}=t,u=Rn({typed:e,equalScalar:a}),l=gn({typed:e,DenseMatrix:o}),c=Ra({typed:e}),f=Dae({typed:e,config:r,round:n});return e("ceil",{number:f.signatures.number,"number,number":f.signatures["number,number"],Complex:function(p){return p.ceil()},"Complex, number":function(p,g){return p.ceil(g)},"Complex, BigNumber":function(p,g){return p.ceil(g.toNumber())},BigNumber:function(p){return Ja(p,n(p),r.epsilon)?n(p):p.ceil()},"BigNumber, BigNumber":function(p,g){return Ja(p,n(p,g),r.epsilon)?n(p,g):p.toDecimalPlaces(g.toNumber(),Vo.ROUND_CEIL)},Fraction:function(p){return p.ceil()},"Fraction, number":function(p,g){return p.ceil(g)},"Fraction, BigNumber":function(p,g){return p.ceil(g.toNumber())},"Array | Matrix":e.referToSelf(h=>p=>Bt(p,h)),"Array, number | BigNumber":e.referToSelf(h=>(p,g)=>Bt(p,m=>h(m,g))),"SparseMatrix, number | BigNumber":e.referToSelf(h=>(p,g)=>u(p,g,h,!1)),"DenseMatrix, number | BigNumber":e.referToSelf(h=>(p,g)=>c(p,g,h,!1)),"number | Complex | Fraction | BigNumber, Array":e.referToSelf(h=>(p,g)=>c(i(g),p,h,!0).valueOf()),"number | Complex | Fraction | BigNumber, Matrix":e.referToSelf(h=>(p,g)=>a(p,0)?s(g.size(),g.storage()):g.storage()==="dense"?c(g,p,h,!0):l(g,p,h,!0))})}),oN="cube",Eae=["typed"],Cae=G(oN,Eae,t=>{var{typed:e}=t;return e(oN,{number:HR,Complex:function(n){return n.mul(n).mul(n)},BigNumber:function(n){return n.times(n).times(n)},Fraction:function(n){return n.pow(3)},Unit:function(n){return n.pow(3)}})}),uN="exp",Mae=["typed"],Tae=G(uN,Mae,t=>{var{typed:e}=t;return e(uN,{number:WR,Complex:function(n){return n.exp()},BigNumber:function(n){return n.exp()}})}),lN="expm1",Oae=["typed","Complex"],Fae=G(lN,Oae,t=>{var{typed:e,Complex:r}=t;return e(lN,{number:VR,Complex:function(i){var a=Math.exp(i.re);return new r(a*Math.cos(i.im)-1,a*Math.sin(i.im))},BigNumber:function(i){return i.exp().minus(1)}})}),s1="fix",Pae=["typed","Complex","matrix","ceil","floor","equalScalar","zeros","DenseMatrix"],Rae=G(s1,["typed","ceil","floor"],t=>{var{typed:e,ceil:r,floor:n}=t;return e(s1,{number:function(a){return a>0?n(a):r(a)},"number, number":function(a,s){return a>0?n(a,s):r(a,s)}})}),Iae=G(s1,Pae,t=>{var{typed:e,Complex:r,matrix:n,ceil:i,floor:a,equalScalar:s,zeros:o,DenseMatrix:u}=t,l=gn({typed:e,DenseMatrix:u}),c=Ra({typed:e}),f=Rae({typed:e,ceil:i,floor:a});return e("fix",{number:f.signatures.number,"number, number | BigNumber":f.signatures["number,number"],Complex:function(p){return new r(p.re>0?Math.floor(p.re):Math.ceil(p.re),p.im>0?Math.floor(p.im):Math.ceil(p.im))},"Complex, number":function(p,g){return new r(p.re>0?a(p.re,g):i(p.re,g),p.im>0?a(p.im,g):i(p.im,g))},"Complex, BigNumber":function(p,g){var m=g.toNumber();return new r(p.re>0?a(p.re,m):i(p.re,m),p.im>0?a(p.im,m):i(p.im,m))},BigNumber:function(p){return p.isNegative()?i(p):a(p)},"BigNumber, number | BigNumber":function(p,g){return p.isNegative()?i(p,g):a(p,g)},Fraction:function(p){return p.s<0?p.ceil():p.floor()},"Fraction, number | BigNumber":function(p,g){return p.s<0?i(p,g):a(p,g)},"Array | Matrix":e.referToSelf(h=>p=>Bt(p,h)),"Array | Matrix, number | BigNumber":e.referToSelf(h=>(p,g)=>Bt(p,m=>h(m,g))),"number | Complex | Fraction | BigNumber, Array":e.referToSelf(h=>(p,g)=>c(n(g),p,h,!0).valueOf()),"number | Complex | Fraction | BigNumber, Matrix":e.referToSelf(h=>(p,g)=>s(p,0)?o(g.size(),g.storage()):g.storage()==="dense"?c(g,p,h,!0):l(g,p,h,!0))})}),o1="floor",Bae=["typed","config","round","matrix","equalScalar","zeros","DenseMatrix"],kae=G(o1,["typed","config","round"],t=>{var{typed:e,config:r,round:n}=t;return e(o1,{number:function(a){return Ri(a,n(a),r.epsilon)?n(a):Math.floor(a)},"number, number":function(a,s){if(Ri(a,n(a,s),r.epsilon))return n(a,s);var[o,u]="".concat(a,"e").split("e"),l=Math.floor(Number("".concat(o,"e").concat(Number(u)+s)));return[o,u]="".concat(l,"e").split("e"),Number("".concat(o,"e").concat(Number(u)-s))}})}),FI=G(o1,Bae,t=>{var{typed:e,config:r,round:n,matrix:i,equalScalar:a,zeros:s,DenseMatrix:o}=t,u=Rn({typed:e,equalScalar:a}),l=gn({typed:e,DenseMatrix:o}),c=Ra({typed:e}),f=kae({typed:e,config:r,round:n});return e("floor",{number:f.signatures.number,"number,number":f.signatures["number,number"],Complex:function(p){return p.floor()},"Complex, number":function(p,g){return p.floor(g)},"Complex, BigNumber":function(p,g){return p.floor(g.toNumber())},BigNumber:function(p){return Ja(p,n(p),r.epsilon)?n(p):p.floor()},"BigNumber, BigNumber":function(p,g){return Ja(p,n(p,g),r.epsilon)?n(p,g):p.toDecimalPlaces(g.toNumber(),Vo.ROUND_FLOOR)},Fraction:function(p){return p.floor()},"Fraction, number":function(p,g){return p.floor(g)},"Fraction, BigNumber":function(p,g){return p.floor(g.toNumber())},"Array | Matrix":e.referToSelf(h=>p=>Bt(p,h)),"Array, number | BigNumber":e.referToSelf(h=>(p,g)=>Bt(p,m=>h(m,g))),"SparseMatrix, number | BigNumber":e.referToSelf(h=>(p,g)=>u(p,g,h,!1)),"DenseMatrix, number | BigNumber":e.referToSelf(h=>(p,g)=>c(p,g,h,!1)),"number | Complex | Fraction | BigNumber, Array":e.referToSelf(h=>(p,g)=>c(i(g),p,h,!0).valueOf()),"number | Complex | Fraction | BigNumber, Matrix":e.referToSelf(h=>(p,g)=>a(p,0)?s(g.size(),g.storage()):g.storage()==="dense"?c(g,p,h,!0):l(g,p,h,!0))})}),Lae="matAlgo02xDS0",$ae=["typed","equalScalar"],Ia=G(Lae,$ae,t=>{var{typed:e,equalScalar:r}=t;return function(i,a,s,o){var u=i._data,l=i._size,c=i._datatype,f=a._values,h=a._index,p=a._ptr,g=a._size,m=a._datatype;if(l.length!==g.length)throw new It(l.length,g.length);if(l[0]!==g[0]||l[1]!==g[1])throw new RangeError("Dimension mismatch. Matrix A ("+l+") must match Matrix B ("+g+")");if(!f)throw new Error("Cannot perform operation on Dense Matrix and Pattern Sparse Matrix");var b=l[0],y=l[1],S,x=r,_=0,A=s;typeof c=="string"&&c===m&&(S=c,x=e.find(r,[S,S]),_=e.convert(0,S),A=e.find(s,[S,S]));for(var w=[],C=[],E=[],N=0;N{var{typed:e}=t;return function(n,i,a,s){var o=n._data,u=n._size,l=n._datatype,c=i._values,f=i._index,h=i._ptr,p=i._size,g=i._datatype;if(u.length!==p.length)throw new It(u.length,p.length);if(u[0]!==p[0]||u[1]!==p[1])throw new RangeError("Dimension mismatch. Matrix A ("+u+") must match Matrix B ("+p+")");if(!c)throw new Error("Cannot perform operation on Dense Matrix and Pattern Sparse Matrix");var m=u[0],b=u[1],y,S=0,x=a;typeof l=="string"&&l===g&&(y=l,S=e.convert(0,y),x=e.find(a,[y,y]));for(var _=[],A=0;A{var{typed:e,equalScalar:r}=t;return function(i,a,s){var o=i._values,u=i._index,l=i._ptr,c=i._size,f=i._datatype,h=a._values,p=a._index,g=a._ptr,m=a._size,b=a._datatype;if(c.length!==m.length)throw new It(c.length,m.length);if(c[0]!==m[0]||c[1]!==m[1])throw new RangeError("Dimension mismatch. Matrix A ("+c+") must match Matrix B ("+m+")");var y=c[0],S=c[1],x,_=r,A=0,w=s;typeof f=="string"&&f===b&&(x=f,_=e.find(r,[x,x]),A=e.convert(0,x),w=e.find(s,[x,x]));var C=o&&h?[]:void 0,E=[],N=[],M=C?[]:void 0,O=C?[]:void 0,F=[],q=[],V,H,B,I;for(H=0;H{var{typed:e}=t;return function(i,a,s){var o=i._data,u=i._size,l=i._datatype,c=a._data,f=a._size,h=a._datatype,p=[];if(u.length!==f.length)throw new It(u.length,f.length);for(var g=0;g0?r(b,0,p,p[0],o,c):[];return i.createDenseMatrix({data:y,size:p,datatype:m})};function r(n,i,a,s,o,u){var l=[];if(i===a.length-1)for(var c=0;c{var{concat:e}=t;return function(i,a){var s=Math.max(i._size.length,a._size.length);if(i._size.length===a._size.length&&i._size.every((g,m)=>g===a._size[m]))return[i,a];for(var o=r(i._size,s,0),u=r(a._size,s,0),l=[],c=0;c{var{typed:e,matrix:r,concat:n}=t,i=Yae({typed:e}),a=Ra({typed:e}),s=Xae({concat:n});return function(u){var l=u.elop,c=u.SD||u.DS,f;l?(f={"DenseMatrix, DenseMatrix":(m,b)=>i(...s(m,b),l),"Array, Array":(m,b)=>i(...s(r(m),r(b)),l).valueOf(),"Array, DenseMatrix":(m,b)=>i(...s(r(m),b),l),"DenseMatrix, Array":(m,b)=>i(...s(m,r(b)),l)},u.SS&&(f["SparseMatrix, SparseMatrix"]=(m,b)=>u.SS(...s(m,b),l,!1)),u.DS&&(f["DenseMatrix, SparseMatrix"]=(m,b)=>u.DS(...s(m,b),l,!1),f["Array, SparseMatrix"]=(m,b)=>u.DS(...s(r(m),b),l,!1)),c&&(f["SparseMatrix, DenseMatrix"]=(m,b)=>c(...s(b,m),l,!0),f["SparseMatrix, Array"]=(m,b)=>c(...s(r(b),m),l,!0))):(f={"DenseMatrix, DenseMatrix":e.referToSelf(m=>(b,y)=>i(...s(b,y),m)),"Array, Array":e.referToSelf(m=>(b,y)=>i(...s(r(b),r(y)),m).valueOf()),"Array, DenseMatrix":e.referToSelf(m=>(b,y)=>i(...s(r(b),y),m)),"DenseMatrix, Array":e.referToSelf(m=>(b,y)=>i(...s(b,r(y)),m))},u.SS&&(f["SparseMatrix, SparseMatrix"]=e.referToSelf(m=>(b,y)=>u.SS(...s(b,y),m,!1))),u.DS&&(f["DenseMatrix, SparseMatrix"]=e.referToSelf(m=>(b,y)=>u.DS(...s(b,y),m,!1)),f["Array, SparseMatrix"]=e.referToSelf(m=>(b,y)=>u.DS(...s(r(b),y),m,!1))),c&&(f["SparseMatrix, DenseMatrix"]=e.referToSelf(m=>(b,y)=>c(...s(y,b),m,!0)),f["SparseMatrix, Array"]=e.referToSelf(m=>(b,y)=>c(...s(r(y),b),m,!0))));var h=u.scalar||"any",p=u.Ds||u.Ss;p&&(l?(f["DenseMatrix,"+h]=(m,b)=>a(m,b,l,!1),f[h+", DenseMatrix"]=(m,b)=>a(b,m,l,!0),f["Array,"+h]=(m,b)=>a(r(m),b,l,!1).valueOf(),f[h+", Array"]=(m,b)=>a(r(b),m,l,!0).valueOf()):(f["DenseMatrix,"+h]=e.referToSelf(m=>(b,y)=>a(b,y,m,!1)),f[h+", DenseMatrix"]=e.referToSelf(m=>(b,y)=>a(y,b,m,!0)),f["Array,"+h]=e.referToSelf(m=>(b,y)=>a(r(b),y,m,!1).valueOf()),f[h+", Array"]=e.referToSelf(m=>(b,y)=>a(r(y),b,m,!0).valueOf())));var g=u.sS!==void 0?u.sS:u.Ss;return l?(u.Ss&&(f["SparseMatrix,"+h]=(m,b)=>u.Ss(m,b,l,!1)),g&&(f[h+", SparseMatrix"]=(m,b)=>g(b,m,l,!0))):(u.Ss&&(f["SparseMatrix,"+h]=e.referToSelf(m=>(b,y)=>u.Ss(b,y,m,!1))),g&&(f[h+", SparseMatrix"]=e.referToSelf(m=>(b,y)=>g(y,b,m,!0)))),l&&l.signatures&&rR(f,l.signatures),f}}),cN="mod",Jae=["typed","config","round","matrix","equalScalar","zeros","DenseMatrix","concat"],PI=G(cN,Jae,t=>{var{typed:e,config:r,round:n,matrix:i,equalScalar:a,zeros:s,DenseMatrix:o,concat:u}=t,l=FI({typed:e,config:r,round:n,matrix:i,equalScalar:a,zeros:s,DenseMatrix:o}),c=Ia({typed:e,equalScalar:a}),f=si({typed:e}),h=qg({typed:e,equalScalar:a}),p=Rn({typed:e,equalScalar:a}),g=gn({typed:e,DenseMatrix:o}),m=_r({typed:e,matrix:i,concat:u});return e(cN,{"number, number":b,"BigNumber, BigNumber":function(S,x){return x.isZero()?S:S.sub(x.mul(l(S.div(x))))},"Fraction, Fraction":function(S,x){return x.equals(0)?S:S.sub(x.mul(l(S.div(x))))}},m({SS:h,DS:f,SD:c,Ss:p,sS:g}));function b(y,S){return S===0?y:y-S*l(y/S)}}),Qae="matAlgo01xDSid",ese=["typed"],Zo=G(Qae,ese,t=>{var{typed:e}=t;return function(n,i,a,s){var o=n._data,u=n._size,l=n._datatype,c=i._values,f=i._index,h=i._ptr,p=i._size,g=i._datatype;if(u.length!==p.length)throw new It(u.length,p.length);if(u[0]!==p[0]||u[1]!==p[1])throw new RangeError("Dimension mismatch. Matrix A ("+u+") must match Matrix B ("+p+")");if(!c)throw new Error("Cannot perform operation on Dense Matrix and Pattern Sparse Matrix");var m=u[0],b=u[1],y=typeof l=="string"&&l===g?l:void 0,S=y?e.find(a,[y,y]):a,x,_,A=[];for(x=0;x{var{typed:e,equalScalar:r}=t;return function(i,a,s){var o=i._values,u=i._index,l=i._ptr,c=i._size,f=i._datatype,h=a._values,p=a._index,g=a._ptr,m=a._size,b=a._datatype;if(c.length!==m.length)throw new It(c.length,m.length);if(c[0]!==m[0]||c[1]!==m[1])throw new RangeError("Dimension mismatch. Matrix A ("+c+") must match Matrix B ("+m+")");var y=c[0],S=c[1],x,_=r,A=0,w=s;typeof f=="string"&&f===b&&(x=f,_=e.find(r,[x,x]),A=e.convert(0,x),w=e.find(s,[x,x]));var C=o&&h?[]:void 0,E=[],N=[],M=o&&h?[]:void 0,O=o&&h?[]:void 0,F=[],q=[],V,H,B,I,K;for(H=0;H{var{typed:e,DenseMatrix:r}=t;return function(i,a,s,o){var u=i._values,l=i._index,c=i._ptr,f=i._size,h=i._datatype;if(!u)throw new Error("Cannot perform operation on Pattern Sparse Matrix and Scalar value");var p=f[0],g=f[1],m,b=s;typeof h=="string"&&(m=h,a=e.convert(a,m),b=e.find(s,[m,m]));for(var y=[],S=[],x=[],_=0;_Array.isArray(e))}var ose=G(fN,ase,t=>{var{typed:e,matrix:r,config:n,round:i,equalScalar:a,zeros:s,BigNumber:o,DenseMatrix:u,concat:l}=t,c=PI({typed:e,config:n,round:i,matrix:r,equalScalar:a,zeros:s,DenseMatrix:u,concat:l}),f=Zo({typed:e}),h=lw({typed:e,equalScalar:a}),p=Ju({typed:e,DenseMatrix:u}),g=_r({typed:e,matrix:r,concat:l});return e(fN,{"number, number":m,"BigNumber, BigNumber":b,"Fraction, Fraction":(y,S)=>y.gcd(S)},g({SS:h,DS:f,Ss:p}),{[sse]:e.referToSelf(y=>(S,x,_)=>{for(var A=y(S,x),w=0;w<_.length;w++)A=y(A,_[w]);return A}),Array:e.referToSelf(y=>S=>{if(S.length===1&&Array.isArray(S[0])&&hN(S[0]))return y(...S[0]);if(hN(S))return y(...S);throw new Qu("gcd() supports only 1d matrices!")}),Matrix:e.referToSelf(y=>S=>y(S.toArray()))});function m(y,S){if(!ot(y)||!ot(S))throw new Error("Parameters in function gcd must be integer numbers");for(var x;S!==0;)x=c(y,S),y=S,S=x;return y<0?-y:y}function b(y,S){if(!y.isInt()||!S.isInt())throw new Error("Parameters in function gcd must be integer numbers");for(var x=new o(0);!S.isZero();){var _=c(y,S);y=S,S=_}return y.lt(x)?y.neg():y}}),use="matAlgo06xS0S0",lse=["typed","equalScalar"],Ug=G(use,lse,t=>{var{typed:e,equalScalar:r}=t;return function(i,a,s){var o=i._values,u=i._size,l=i._datatype,c=a._values,f=a._size,h=a._datatype;if(u.length!==f.length)throw new It(u.length,f.length);if(u[0]!==f[0]||u[1]!==f[1])throw new RangeError("Dimension mismatch. Matrix A ("+u+") must match Matrix B ("+f+")");var p=u[0],g=u[1],m,b=r,y=0,S=s;typeof l=="string"&&l===h&&(m=l,b=e.find(r,[m,m]),y=e.convert(0,m),S=e.find(s,[m,m]));for(var x=o&&c?[]:void 0,_=[],A=[],w=x?[]:void 0,C=[],E=[],N=0;N{var{typed:e,matrix:r,equalScalar:n,concat:i}=t,a=Ia({typed:e,equalScalar:n}),s=Ug({typed:e,equalScalar:n}),o=Rn({typed:e,equalScalar:n}),u=_r({typed:e,matrix:r,concat:i}),l="number | BigNumber | Fraction | Matrix | Array",c={};return c["".concat(l,", ").concat(l,", ...").concat(l)]=e.referToSelf(h=>(p,g,m)=>{for(var b=h(p,g),y=0;yh.lcm(p)},u({SS:s,DS:a,Ss:o}),c);function f(h,p){if(!h.isInt()||!p.isInt())throw new Error("Parameters in function lcm must be integer numbers");if(h.isZero())return h;if(p.isZero())return p;for(var g=h.times(p);!p.isZero();){var m=p;p=h.mod(m),h=m}return g.div(h).abs()}}),pN="log10",hse=["typed","config","Complex"],dse=G(pN,hse,t=>{var{typed:e,config:r,Complex:n}=t;return e(pN,{number:function(a){return a>=0||r.predictable?jR(a):new n(a,0).log().div(Math.LN10)},Complex:function(a){return new n(a).log().div(Math.LN10)},BigNumber:function(a){return!a.isNegative()||r.predictable?a.log():new n(a.toNumber(),0).log().div(Math.LN10)},"Array | Matrix":e.referToSelf(i=>a=>Bt(a,i))})}),mN="log2",pse=["typed","config","Complex"],mse=G(mN,pse,t=>{var{typed:e,config:r,Complex:n}=t;return e(mN,{number:function(s){return s>=0||r.predictable?GR(s):i(new n(s,0))},Complex:i,BigNumber:function(s){return!s.isNegative()||r.predictable?s.log(2):i(new n(s.toNumber(),0))},"Array | Matrix":e.referToSelf(a=>s=>Bt(s,a))});function i(a){var s=Math.sqrt(a.re*a.re+a.im*a.im);return new n(Math.log2?Math.log2(s):Math.log(s)/Math.LN2,Math.atan2(a.im,a.re)/Math.LN2)}}),vse="multiplyScalar",gse=["typed"],yse=G(vse,gse,t=>{var{typed:e}=t;return e("multiplyScalar",{"number, number":zR,"Complex, Complex":function(n,i){return n.mul(i)},"BigNumber, BigNumber":function(n,i){return n.times(i)},"Fraction, Fraction":function(n,i){return n.mul(i)},"number | Fraction | BigNumber | Complex, Unit":(r,n)=>n.multiply(r),"Unit, number | Fraction | BigNumber | Complex | Unit":(r,n)=>r.multiply(n)})}),vN="multiply",bse=["typed","matrix","addScalar","multiplyScalar","equalScalar","dot"],xse=G(vN,bse,t=>{var{typed:e,matrix:r,addScalar:n,multiplyScalar:i,equalScalar:a,dot:s}=t,o=Rn({typed:e,equalScalar:a}),u=Ra({typed:e});function l(A,w){switch(A.length){case 1:switch(w.length){case 1:if(A[0]!==w[0])throw new RangeError("Dimension mismatch in multiplication. Vectors must have the same length");break;case 2:if(A[0]!==w[0])throw new RangeError("Dimension mismatch in multiplication. Vector length ("+A[0]+") must match Matrix rows ("+w[0]+")");break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix B has "+w.length+" dimensions)")}break;case 2:switch(w.length){case 1:if(A[1]!==w[0])throw new RangeError("Dimension mismatch in multiplication. Matrix columns ("+A[1]+") must match Vector length ("+w[0]+")");break;case 2:if(A[1]!==w[0])throw new RangeError("Dimension mismatch in multiplication. Matrix A columns ("+A[1]+") must match Matrix B rows ("+w[0]+")");break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix B has "+w.length+" dimensions)")}break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix A has "+A.length+" dimensions)")}}function c(A,w,C){if(C===0)throw new Error("Cannot multiply two empty vectors");return s(A,w)}function f(A,w){if(w.storage()!=="dense")throw new Error("Support for SparseMatrix not implemented");return h(A,w)}function h(A,w){var C=A._data,E=A._size,N=A._datatype,M=w._data,O=w._size,F=w._datatype,q=E[0],V=O[1],H,B=n,I=i;N&&F&&N===F&&typeof N=="string"&&(H=N,B=e.find(n,[H,H]),I=e.find(i,[H,H]));for(var K=[],$=0;$xe)for(var me=0,we=0;we(w,C)=>{l(Nt(w),Nt(C));var E=A(r(w),r(C));return dt(E)?E.valueOf():E}),"Matrix, Matrix":function(w,C){var E=w.size(),N=C.size();return l(E,N),E.length===1?N.length===1?c(w,C,E[0]):f(w,C):N.length===1?p(w,C):g(w,C)},"Matrix, Array":e.referTo("Matrix,Matrix",A=>(w,C)=>A(w,r(C))),"Array, Matrix":e.referToSelf(A=>(w,C)=>A(r(w,C.storage()),C)),"SparseMatrix, any":function(w,C){return o(w,C,i,!1)},"DenseMatrix, any":function(w,C){return u(w,C,i,!1)},"any, SparseMatrix":function(w,C){return o(C,w,i,!0)},"any, DenseMatrix":function(w,C){return u(C,w,i,!0)},"Array, any":function(w,C){return u(r(w),C,i,!1).valueOf()},"any, Array":function(w,C){return u(r(C),w,i,!0).valueOf()},"any, any":i,"any, any, ...any":e.referToSelf(A=>(w,C,E)=>{for(var N=A(w,C),M=0;M{var{typed:e,matrix:r,equalScalar:n,BigNumber:i,concat:a}=t,s=Zo({typed:e}),o=Ia({typed:e,equalScalar:n}),u=Ug({typed:e,equalScalar:n}),l=Rn({typed:e,equalScalar:n}),c=_r({typed:e,matrix:r,concat:a});function f(){throw new Error("Complex number not supported in function nthRoot. Use nthRoots instead.")}return e(gN,{number:k2,"number, number":k2,BigNumber:p=>h(p,new i(2)),"BigNumber, BigNumber":h,Complex:f,"Complex, number":f,Array:e.referTo("DenseMatrix,number",p=>g=>p(r(g),2).valueOf()),DenseMatrix:e.referTo("DenseMatrix,number",p=>g=>p(g,2)),SparseMatrix:e.referTo("SparseMatrix,number",p=>g=>p(g,2)),"SparseMatrix, SparseMatrix":e.referToSelf(p=>(g,m)=>{if(m.density()===1)return u(g,m,p);throw new Error("Root must be non-zero")}),"DenseMatrix, SparseMatrix":e.referToSelf(p=>(g,m)=>{if(m.density()===1)return s(g,m,p,!1);throw new Error("Root must be non-zero")}),"Array, SparseMatrix":e.referTo("DenseMatrix,SparseMatrix",p=>(g,m)=>p(r(g),m)),"number | BigNumber, SparseMatrix":e.referToSelf(p=>(g,m)=>{if(m.density()===1)return l(m,g,p,!0);throw new Error("Root must be non-zero")})},c({scalar:"number | BigNumber",SD:o,Ss:l,sS:!1}));function h(p,g){var m=i.precision,b=i.clone({precision:m+2}),y=new i(0),S=new b(1),x=g.isNegative();if(x&&(g=g.neg()),g.isZero())throw new Error("Root must be non-zero");if(p.isNegative()&&!g.abs().mod(2).equals(1))throw new Error("Root must be odd when a is negative.");if(p.isZero())return x?new b(1/0):0;if(!p.isFinite())return x?y:p;var _=p.abs().pow(S.div(g));return _=p.isNeg()?_.neg():_,new i((x?S.div(_):_).toPrecision(m))}}),yN="sign",_se=["typed","BigNumber","Fraction","complex"],Ase=G(yN,_se,t=>{var{typed:e,BigNumber:r,complex:n,Fraction:i}=t;return e(yN,{number:i1,Complex:function(s){return s.im===0?n(i1(s.re)):s.sign()},BigNumber:function(s){return new r(s.cmp(0))},Fraction:function(s){return new i(s.s,1)},"Array | Matrix":e.referToSelf(a=>s=>Bt(s,a)),Unit:e.referToSelf(a=>s=>{if(!s._isDerived()&&s.units[0].unit.offset!==0)throw new TypeError("sign is ambiguous for units with offset");return e.find(a,s.valueType())(s.value)})})}),Dse="sqrt",Nse=["config","typed","Complex"],Ese=G(Dse,Nse,t=>{var{config:e,typed:r,Complex:n}=t;return r("sqrt",{number:i,Complex:function(s){return s.sqrt()},BigNumber:function(s){return!s.isNegative()||e.predictable?s.sqrt():i(s.toNumber())},Unit:function(s){return s.pow(.5)}});function i(a){return isNaN(a)?NaN:a>=0||e.predictable?Math.sqrt(a):new n(a,0).sqrt()}}),bN="square",Cse=["typed"],Mse=G(bN,Cse,t=>{var{typed:e}=t;return e(bN,{number:XR,Complex:function(n){return n.mul(n)},BigNumber:function(n){return n.times(n)},Fraction:function(n){return n.mul(n)},Unit:function(n){return n.pow(2)}})}),xN="subtract",Tse=["typed","matrix","equalScalar","subtractScalar","unaryMinus","DenseMatrix","concat"],Ose=G(xN,Tse,t=>{var{typed:e,matrix:r,equalScalar:n,subtractScalar:i,unaryMinus:a,DenseMatrix:s,concat:o}=t,u=Zo({typed:e}),l=si({typed:e}),c=qg({typed:e,equalScalar:n}),f=Ju({typed:e,DenseMatrix:s}),h=gn({typed:e,DenseMatrix:s}),p=_r({typed:e,matrix:r,concat:o});return e(xN,{"any, any":i},p({elop:i,SS:c,DS:u,SD:l,Ss:h,sS:f}))}),wN="xgcd",Fse=["typed","config","matrix","BigNumber"],Pse=G(wN,Fse,t=>{var{typed:e,config:r,matrix:n,BigNumber:i}=t;return e(wN,{"number, number":function(o,u){var l=ZR(o,u);return r.matrix==="Array"?l:n(l)},"BigNumber, BigNumber":a});function a(s,o){var u,l,c,f=new i(0),h=new i(1),p=f,g=h,m=h,b=f;if(!s.isInt()||!o.isInt())throw new Error("Parameters in function xgcd must be integer numbers");for(;!o.isZero();)l=s.div(o).floor(),c=s.mod(o),u=p,p=g.minus(l.times(p)),g=u,u=m,m=b.minus(l.times(m)),b=u,s=o,o=c;var y;return s.lt(f)?y=[s.neg(),g.neg(),b.neg()]:y=[s,s.isZero()?0:g,b],r.matrix==="Array"?y:n(y)}}),SN="invmod",Rse=["typed","config","BigNumber","xgcd","equal","smaller","mod","add","isInteger"],Ise=G(SN,Rse,t=>{var{typed:e,config:r,BigNumber:n,xgcd:i,equal:a,smaller:s,mod:o,add:u,isInteger:l}=t;return e(SN,{"number, number":c,"BigNumber, BigNumber":c});function c(f,h){if(!l(f)||!l(h))throw new Error("Parameters in function invmod must be integer numbers");if(f=o(f,h),a(h,0))throw new Error("Divisor must be non zero");var p=i(f,h);p=p.valueOf();var[g,m]=p;return a(g,n(1))?(m=o(m,h),s(m,n(0))&&(m=u(m,h)),m):NaN}}),Bse="matAlgo09xS0Sf",kse=["typed","equalScalar"],RI=G(Bse,kse,t=>{var{typed:e,equalScalar:r}=t;return function(i,a,s){var o=i._values,u=i._index,l=i._ptr,c=i._size,f=i._datatype,h=a._values,p=a._index,g=a._ptr,m=a._size,b=a._datatype;if(c.length!==m.length)throw new It(c.length,m.length);if(c[0]!==m[0]||c[1]!==m[1])throw new RangeError("Dimension mismatch. Matrix A ("+c+") must match Matrix B ("+m+")");var y=c[0],S=c[1],x,_=r,A=0,w=s;typeof f=="string"&&f===b&&(x=f,_=e.find(r,[x,x]),A=e.convert(0,x),w=e.find(s,[x,x]));var C=o&&h?[]:void 0,E=[],N=[],M=C?[]:void 0,O=[],F,q,V,H,B;for(q=0;q{var{typed:e,matrix:r,equalScalar:n,multiplyScalar:i,concat:a}=t,s=Ia({typed:e,equalScalar:n}),o=RI({typed:e,equalScalar:n}),u=Rn({typed:e,equalScalar:n}),l=_r({typed:e,matrix:r,concat:a});return e(_N,l({elop:i,SS:o,DS:s,Ss:u}))});function zse(t,e){if(t.isFinite()&&!t.isInteger()||e.isFinite()&&!e.isInteger())throw new Error("Integers expected in function bitAnd");var r=t.constructor;if(t.isNaN()||e.isNaN())return new r(NaN);if(t.isZero()||e.eq(-1)||t.eq(e))return t;if(e.isZero()||t.eq(-1))return e;if(!t.isFinite()||!e.isFinite()){if(!t.isFinite()&&!e.isFinite())return t.isNegative()===e.isNegative()?t:new r(0);if(!t.isFinite())return e.isNegative()?t:t.isNegative()?new r(0):e;if(!e.isFinite())return t.isNegative()?e:e.isNegative()?new r(0):t}return cw(t,e,function(n,i){return n&i})}function Vh(t){if(t.isFinite()&&!t.isInteger())throw new Error("Integer expected in function bitNot");var e=t.constructor,r=e.precision;e.config({precision:1e9});var n=t.plus(new e(1));return n.s=-n.s||null,e.config({precision:r}),n}function qse(t,e){if(t.isFinite()&&!t.isInteger()||e.isFinite()&&!e.isInteger())throw new Error("Integers expected in function bitOr");var r=t.constructor;if(t.isNaN()||e.isNaN())return new r(NaN);var n=new r(-1);return t.isZero()||e.eq(n)||t.eq(e)?e:e.isZero()||t.eq(n)?t:!t.isFinite()||!e.isFinite()?!t.isFinite()&&!t.isNegative()&&e.isNegative()||t.isNegative()&&!e.isNegative()&&!e.isFinite()?n:t.isNegative()&&e.isNegative()?t.isFinite()?t:e:t.isFinite()?e:t:cw(t,e,function(i,a){return i|a})}function cw(t,e,r){var n=t.constructor,i,a,s=+(t.s<0),o=+(e.s<0);if(s){i=nm(Vh(t));for(var u=0;u0;)r(c[--p],f[--g])===m&&(b=b.plus(y)),y=y.times(S);for(;g>0;)r(h,f[--g])===m&&(b=b.plus(y)),y=y.times(S);return n.config({precision:x}),m===0&&(b.s=-b.s),b}function nm(t){for(var e=t.d,r=e[0]+"",n=1;n0)if(++o>l)for(o-=l;o--;)u+="0";else o1&&((c[p+1]===null||c[p+1]===void 0)&&(c[p+1]=0),c[p+1]+=c[p]>>1,c[p]&=1)}return c.reverse()}function Use(t,e){if(t.isFinite()&&!t.isInteger()||e.isFinite()&&!e.isInteger())throw new Error("Integers expected in function bitXor");var r=t.constructor;if(t.isNaN()||e.isNaN())return new r(NaN);if(t.isZero())return e;if(e.isZero())return t;if(t.eq(e))return new r(0);var n=new r(-1);return t.eq(n)?Vh(e):e.eq(n)?Vh(t):!t.isFinite()||!e.isFinite()?!t.isFinite()&&!e.isFinite()?n:new r(t.isNegative()===e.isNegative()?1/0:-1/0):cw(t,e,function(i,a){return i^a})}function Hse(t,e){if(t.isFinite()&&!t.isInteger()||e.isFinite()&&!e.isInteger())throw new Error("Integers expected in function leftShift");var r=t.constructor;return t.isNaN()||e.isNaN()||e.isNegative()&&!e.isZero()?new r(NaN):t.isZero()||e.isZero()?t:!t.isFinite()&&!e.isFinite()?new r(NaN):e.lt(55)?t.times(Math.pow(2,e.toNumber())+""):t.times(new r(2).pow(e))}function Wse(t,e){if(t.isFinite()&&!t.isInteger()||e.isFinite()&&!e.isInteger())throw new Error("Integers expected in function rightArithShift");var r=t.constructor;return t.isNaN()||e.isNaN()||e.isNegative()&&!e.isZero()?new r(NaN):t.isZero()||e.isZero()?t:e.isFinite()?e.lt(55)?t.div(Math.pow(2,e.toNumber())+"").floor():t.div(new r(2).pow(e)).floor():t.isNegative()?new r(-1):t.isFinite()?new r(0):new r(NaN)}var AN="bitAnd",Vse=["typed","matrix","equalScalar","concat"],II=G(AN,Vse,t=>{var{typed:e,matrix:r,equalScalar:n,concat:i}=t,a=Ia({typed:e,equalScalar:n}),s=Ug({typed:e,equalScalar:n}),o=Rn({typed:e,equalScalar:n}),u=_r({typed:e,matrix:r,concat:i});return e(AN,{"number, number":JR,"BigNumber, BigNumber":zse},u({SS:s,DS:a,Ss:o}))}),DN="bitNot",Yse=["typed"],jse=G(DN,Yse,t=>{var{typed:e}=t;return e(DN,{number:QR,BigNumber:Vh,"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),NN="bitOr",Gse=["typed","matrix","equalScalar","DenseMatrix","concat"],BI=G(NN,Gse,t=>{var{typed:e,matrix:r,equalScalar:n,DenseMatrix:i,concat:a}=t,s=Zo({typed:e}),o=lw({typed:e,equalScalar:n}),u=Ju({typed:e,DenseMatrix:i}),l=_r({typed:e,matrix:r,concat:a});return e(NN,{"number, number":eI,"BigNumber, BigNumber":qse},l({SS:o,DS:s,Ss:u}))}),Xse="matAlgo07xSSf",Zse=["typed","DenseMatrix"],as=G(Xse,Zse,t=>{var{typed:e,DenseMatrix:r}=t;return function(a,s,o){var u=a._size,l=a._datatype,c=s._size,f=s._datatype;if(u.length!==c.length)throw new It(u.length,c.length);if(u[0]!==c[0]||u[1]!==c[1])throw new RangeError("Dimension mismatch. Matrix A ("+u+") must match Matrix B ("+c+")");var h=u[0],p=u[1],g,m=0,b=o;typeof l=="string"&&l===f&&(g=l,m=e.convert(0,g),b=e.find(o,[g,g]));var y,S,x=[];for(y=0;y{var{typed:e,matrix:r,DenseMatrix:n,concat:i}=t,a=si({typed:e}),s=as({typed:e,DenseMatrix:n}),o=gn({typed:e,DenseMatrix:n}),u=_r({typed:e,matrix:r,concat:i});return e(EN,{"number, number":tI,"BigNumber, BigNumber":Use},u({SS:s,DS:a,Ss:o}))}),CN="arg",Qse=["typed"],eoe=G(CN,Qse,t=>{var{typed:e}=t;return e(CN,{number:function(n){return Math.atan2(0,n)},BigNumber:function(n){return n.constructor.atan2(0,n)},Complex:function(n){return n.arg()},"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),MN="conj",toe=["typed"],roe=G(MN,toe,t=>{var{typed:e}=t;return e(MN,{"number | BigNumber | Fraction":r=>r,Complex:r=>r.conjugate(),"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),TN="im",noe=["typed"],ioe=G(TN,noe,t=>{var{typed:e}=t;return e(TN,{number:()=>0,"BigNumber | Fraction":r=>r.mul(0),Complex:r=>r.im,"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),ON="re",aoe=["typed"],soe=G(ON,aoe,t=>{var{typed:e}=t;return e(ON,{"number | BigNumber | Fraction":r=>r,Complex:r=>r.re,"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),FN="not",ooe=["typed"],uoe=G(FN,ooe,t=>{var{typed:e}=t;return e(FN,{"null | undefined":()=>!0,number:sI,Complex:function(n){return n.re===0&&n.im===0},BigNumber:function(n){return n.isZero()||n.isNaN()},Unit:e.referToSelf(r=>n=>e.find(r,n.valueType())(n.value)),"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),PN="or",loe=["typed","matrix","equalScalar","DenseMatrix","concat"],kI=G(PN,loe,t=>{var{typed:e,matrix:r,equalScalar:n,DenseMatrix:i,concat:a}=t,s=si({typed:e}),o=qg({typed:e,equalScalar:n}),u=gn({typed:e,DenseMatrix:i}),l=_r({typed:e,matrix:r,concat:a});return e(PN,{"number, number":oI,"Complex, Complex":function(f,h){return f.re!==0||f.im!==0||h.re!==0||h.im!==0},"BigNumber, BigNumber":function(f,h){return!f.isZero()&&!f.isNaN()||!h.isZero()&&!h.isNaN()},"Unit, Unit":e.referToSelf(c=>(f,h)=>c(f.value||0,h.value||0))},l({SS:o,DS:s,Ss:u}))}),RN="xor",coe=["typed","matrix","DenseMatrix","concat"],foe=G(RN,coe,t=>{var{typed:e,matrix:r,DenseMatrix:n,concat:i}=t,a=si({typed:e}),s=as({typed:e,DenseMatrix:n}),o=gn({typed:e,DenseMatrix:n}),u=_r({typed:e,matrix:r,concat:i});return e(RN,{"number, number":uI,"Complex, Complex":function(c,f){return(c.re!==0||c.im!==0)!=(f.re!==0||f.im!==0)},"BigNumber, BigNumber":function(c,f){return(!c.isZero()&&!c.isNaN())!=(!f.isZero()&&!f.isNaN())},"Unit, Unit":e.referToSelf(l=>(c,f)=>l(c.value||0,f.value||0))},u({SS:s,DS:a,Ss:o}))}),IN="concat",hoe=["typed","matrix","isInteger"],LI=G(IN,hoe,t=>{var{typed:e,matrix:r,isInteger:n}=t;return e(IN,{"...Array | Matrix | number | BigNumber":function(a){var s,o=a.length,u=-1,l,c=!1,f=[];for(s=0;s0&&u>l)throw new Fa(u,l+1)}else{var p=xt(h).valueOf(),g=Nt(p);if(f[s]=p,l=u,u=g.length-1,s>0&&u!==l)throw new It(l+1,u+1)}}if(f.length===0)throw new SyntaxError("At least one matrix expected");for(var m=f.shift();f.length;)m=mR(m,f.shift(),u);return c?r(m):m},"...string":function(a){return a.join("")}})}),BN="column",doe=["typed","Index","matrix","range"],$I=G(BN,doe,t=>{var{typed:e,Index:r,matrix:n,range:i}=t;return e(BN,{"Matrix, number":a,"Array, number":function(o,u){return a(n(xt(o)),u).valueOf()}});function a(s,o){if(s.size().length!==2)throw new Error("Only two dimensional matrix is supported");gr(o,s.size()[1]);var u=i(0,s.size()[0]),l=new r(u,o),c=s.subset(l);return dt(c)?c:n([[c]])}}),kN="count",poe=["typed","size","prod"],moe=G(kN,poe,t=>{var{typed:e,size:r,prod:n}=t;return e(kN,{string:function(a){return a.length},"Matrix | Array":function(a){return n(r(a))}})}),LN="cross",voe=["typed","matrix","subtract","multiply"],goe=G(LN,voe,t=>{var{typed:e,matrix:r,subtract:n,multiply:i}=t;return e(LN,{"Matrix, Matrix":function(o,u){return r(a(o.toArray(),u.toArray()))},"Matrix, Array":function(o,u){return r(a(o.toArray(),u))},"Array, Matrix":function(o,u){return r(a(o,u.toArray()))},"Array, Array":a});function a(s,o){var u=Math.max(Nt(s).length,Nt(o).length);s=xv(s),o=xv(o);var l=Nt(s),c=Nt(o);if(l.length!==1||c.length!==1||l[0]!==3||c[0]!==3)throw new RangeError("Vectors with length 3 expected (Size A = ["+l.join(", ")+"], B = ["+c.join(", ")+"])");var f=[n(i(s[1],o[2]),i(s[2],o[1])),n(i(s[2],o[0]),i(s[0],o[2])),n(i(s[0],o[1]),i(s[1],o[0]))];return u>1?[f]:f}}),$N="diag",yoe=["typed","matrix","DenseMatrix","SparseMatrix"],boe=G($N,yoe,t=>{var{typed:e,matrix:r,DenseMatrix:n,SparseMatrix:i}=t;return e($N,{Array:function(l){return a(l,0,Nt(l),null)},"Array, number":function(l,c){return a(l,c,Nt(l),null)},"Array, BigNumber":function(l,c){return a(l,c.toNumber(),Nt(l),null)},"Array, string":function(l,c){return a(l,0,Nt(l),c)},"Array, number, string":function(l,c,f){return a(l,c,Nt(l),f)},"Array, BigNumber, string":function(l,c,f){return a(l,c.toNumber(),Nt(l),f)},Matrix:function(l){return a(l,0,l.size(),l.storage())},"Matrix, number":function(l,c){return a(l,c,l.size(),l.storage())},"Matrix, BigNumber":function(l,c){return a(l,c.toNumber(),l.size(),l.storage())},"Matrix, string":function(l,c){return a(l,0,l.size(),c)},"Matrix, number, string":function(l,c,f){return a(l,c,l.size(),f)},"Matrix, BigNumber, string":function(l,c,f){return a(l,c.toNumber(),l.size(),f)}});function a(u,l,c,f){if(!ot(l))throw new TypeError("Second parameter in function diag must be an integer");var h=l>0?l:0,p=l<0?-l:0;switch(c.length){case 1:return s(u,l,f,c[0],p,h);case 2:return o(u,l,f,c,p,h)}throw new RangeError("Matrix for function diag must be 2 dimensional")}function s(u,l,c,f,h,p){var g=[f+h,f+p];if(c&&c!=="sparse"&&c!=="dense")throw new TypeError("Unknown matrix type ".concat(c,'"'));var m=c==="sparse"?i.diagonal(g,u,l):n.diagonal(g,u,l);return c!==null?m:m.valueOf()}function o(u,l,c,f,h,p){if(dt(u)){var g=u.diagonal(l);return c!==null?c!==g.storage()?r(g,c):g:g.valueOf()}for(var m=Math.min(f[0]-h,f[1]-p),b=[],y=0;y=2&&m.push("index: ".concat(xr(r))),p.length>=3&&m.push("array: ".concat(xr(n))),new TypeError("Function ".concat(i," cannot apply callback arguments ")+"".concat(t.name,"(").concat(m.join(", "),") at index ").concat(JSON.stringify(r)))}else throw new TypeError("Function ".concat(i," cannot apply callback arguments ")+"to function ".concat(t.name,": ").concat(b.message))}}}var xoe="filter",woe=["typed"],Soe=G(xoe,woe,t=>{var{typed:e}=t;return e("filter",{"Array, function":zN,"Matrix, function":function(n,i){return n.create(zN(n.toArray(),i))},"Array, RegExp":wv,"Matrix, RegExp":function(n,i){return n.create(wv(n.toArray(),i))}})});function zN(t,e){return dR(t,function(r,n,i){return Rc(e,r,[n],i,"filter")})}var qN="flatten",_oe=["typed","matrix"],Aoe=G(qN,_oe,t=>{var{typed:e,matrix:r}=t;return e(qN,{Array:function(i){return tr(i)},Matrix:function(i){var a=tr(i.toArray());return r(a)}})}),UN="forEach",Doe=["typed"],Noe=G(UN,Doe,t=>{var{typed:e}=t;return e(UN,{"Array, function":Eoe,"Matrix, function":function(n,i){n.forEach(i)}})});function Eoe(t,e){var r=function n(i,a){if(Array.isArray(i))Rg(i,function(s,o){n(s,a.concat(o))});else return Rc(e,i,a,t,"forEach")};r(t,[])}var HN="getMatrixDataType",Coe=["typed"],Moe=G(HN,Coe,t=>{var{typed:e}=t;return e(HN,{Array:function(n){return Uh(n,xr)},Matrix:function(n){return n.getDataType()}})}),WN="identity",Toe=["typed","config","matrix","BigNumber","DenseMatrix","SparseMatrix"],Ooe=G(WN,Toe,t=>{var{typed:e,config:r,matrix:n,BigNumber:i,DenseMatrix:a,SparseMatrix:s}=t;return e(WN,{"":function(){return r.matrix==="Matrix"?n([]):[]},string:function(c){return n(c)},"number | BigNumber":function(c){return u(c,c,r.matrix==="Matrix"?"dense":void 0)},"number | BigNumber, string":function(c,f){return u(c,c,f)},"number | BigNumber, number | BigNumber":function(c,f){return u(c,f,r.matrix==="Matrix"?"dense":void 0)},"number | BigNumber, number | BigNumber, string":function(c,f,h){return u(c,f,h)},Array:function(c){return o(c)},"Array, string":function(c,f){return o(c,f)},Matrix:function(c){return o(c.valueOf(),c.storage())},"Matrix, string":function(c,f){return o(c.valueOf(),f)}});function o(l,c){switch(l.length){case 0:return c?n(c):[];case 1:return u(l[0],l[0],c);case 2:return u(l[0],l[1],c);default:throw new Error("Vector containing two values expected")}}function u(l,c,f){var h=Mt(l)||Mt(c)?i:null;if(Mt(l)&&(l=l.toNumber()),Mt(c)&&(c=c.toNumber()),!ot(l)||l<1)throw new Error("Parameters in function identity must be positive integers");if(!ot(c)||c<1)throw new Error("Parameters in function identity must be positive integers");var p=h?new i(1):1,g=h?new h(0):0,m=[l,c];if(f){if(f==="sparse")return s.diagonal(m,p,0,g);if(f==="dense")return a.diagonal(m,p,0,g);throw new TypeError('Unknown matrix type "'.concat(f,'"'))}for(var b=gc([],m,g),y=l{var{typed:e,matrix:r,multiplyScalar:n}=t;return e(VN,{"Matrix, Matrix":function(s,o){return r(i(s.toArray(),o.toArray()))},"Matrix, Array":function(s,o){return r(i(s.toArray(),o))},"Array, Matrix":function(s,o){return r(i(s,o.toArray()))},"Array, Array":i});function i(a,s){if(Nt(a).length===1&&(a=[a]),Nt(s).length===1&&(s=[s]),Nt(a).length>2||Nt(s).length>2)throw new RangeError("Vectors with dimensions greater then 2 are not supported expected (Size x = "+JSON.stringify(a.length)+", y = "+JSON.stringify(s.length)+")");var o=[],u=[];return a.map(function(l){return s.map(function(c){return u=[],o.push(u),l.map(function(f){return c.map(function(h){return u.push(n(f,h))})})})})&&o}}),YN="map",Roe=["typed"],Ioe=G(YN,Roe,t=>{var{typed:e}=t;return e(YN,{"Array, function":Boe,"Matrix, function":function(n,i){return n.map(i)}})});function Boe(t,e){var r=function n(i,a){return Array.isArray(i)?i.map(function(s,o){return n(s,a.concat(o))}):Rc(e,i,a,t,"map")};return r(t,[])}var jN="diff",koe=["typed","matrix","subtract","number"],zI=G(jN,koe,t=>{var{typed:e,matrix:r,subtract:n,number:i}=t;return e(jN,{"Array | Matrix":function(c){return dt(c)?r(s(c.toArray())):s(c)},"Array | Matrix, number":function(c,f){if(!ot(f))throw new RangeError("Dimension must be a whole number");return dt(c)?r(a(c.toArray(),f)):a(c,f)},"Array, BigNumber":e.referTo("Array,number",l=>(c,f)=>l(c,i(f))),"Matrix, BigNumber":e.referTo("Matrix,number",l=>(c,f)=>l(c,i(f)))});function a(l,c){if(dt(l)&&(l=l.toArray()),!Array.isArray(l))throw RangeError("Array/Matrix does not have that many dimensions");if(c>0){var f=[];return l.forEach(h=>{f.push(a(h,c-1))}),f}else{if(c===0)return s(l);throw RangeError("Cannot have negative dimension")}}function s(l){for(var c=[],f=l.length,h=1;h{var{typed:e,config:r,matrix:n,BigNumber:i}=t;return e("ones",{"":function(){return r.matrix==="Array"?a([]):a([],"default")},"...number | BigNumber | string":function(l){var c=l[l.length-1];if(typeof c=="string"){var f=l.pop();return a(l,f)}else return r.matrix==="Array"?a(l):a(l,"default")},Array:a,Matrix:function(l){var c=l.storage();return a(l.valueOf(),c)},"Array | Matrix, string":function(l,c){return a(l.valueOf(),c)}});function a(u,l){var c=s(u),f=c?new i(1):1;if(o(u),l){var h=n(l);return u.length>0?h.resize(u,f):h}else{var p=[];return u.length>0?gc(p,u,f):p}}function s(u){var l=!1;return u.forEach(function(c,f,h){Mt(c)&&(l=!0,h[f]=c.toNumber())}),l}function o(u){u.forEach(function(l){if(typeof l!="number"||!ot(l)||l<0)throw new Error("Parameters in function ones must be positive integers")})}});function fw(){throw new Error('No "bignumber" implementation available')}function qI(){throw new Error('No "fraction" implementation available')}function UI(){throw new Error('No "matrix" implementation available')}var GN="range",qoe=["typed","config","?matrix","?bignumber","smaller","smallerEq","larger","largerEq","add","isPositive"],HI=G(GN,qoe,t=>{var{typed:e,config:r,matrix:n,bignumber:i,smaller:a,smallerEq:s,larger:o,largerEq:u,add:l,isPositive:c}=t;return e(GN,{string:h,"string, boolean":h,"number, number":function(b,y){return f(p(b,y,1,!1))},"number, number, number":function(b,y,S){return f(p(b,y,S,!1))},"number, number, boolean":function(b,y,S){return f(p(b,y,1,S))},"number, number, number, boolean":function(b,y,S,x){return f(p(b,y,S,x))},"BigNumber, BigNumber":function(b,y){var S=b.constructor;return f(p(b,y,new S(1),!1))},"BigNumber, BigNumber, BigNumber":function(b,y,S){return f(p(b,y,S,!1))},"BigNumber, BigNumber, boolean":function(b,y,S){var x=b.constructor;return f(p(b,y,new x(1),S))},"BigNumber, BigNumber, BigNumber, boolean":function(b,y,S,x){return f(p(b,y,S,x))},"Unit, Unit, Unit":function(b,y,S){return f(p(b,y,S,!1))},"Unit, Unit, Unit, boolean":function(b,y,S,x){return f(p(b,y,S,x))}});function f(m){return r.matrix==="Matrix"?n?n(m):UI():m}function h(m,b){var y=g(m);if(!y)throw new SyntaxError('String "'+m+'" is no valid range');return r.number==="BigNumber"?(i===void 0&&fw(),f(p(i(y.start),i(y.end),i(y.step)))):f(p(y.start,y.end,y.step,b))}function p(m,b,y,S){for(var x=[],_=c(y)?S?s:a:S?u:o,A=m;_(A,b);)x.push(A),A=l(A,y);return x}function g(m){var b=m.split(":"),y=b.map(function(x){return Number(x)}),S=y.some(function(x){return isNaN(x)});if(S)return null;switch(y.length){case 2:return{start:y[0],end:y[1],step:1};case 3:return{start:y[0],end:y[2],step:y[1]};default:return null}}}),XN="reshape",Uoe=["typed","isInteger","matrix"],Hoe=G(XN,Uoe,t=>{var{typed:e,isInteger:r}=t;return e(XN,{"Matrix, Array":function(i,a){return i.reshape(a,!0)},"Array, Array":function(i,a){return a.forEach(function(s){if(!r(s))throw new TypeError("Invalid size for dimension: "+s)}),nw(i,a)}})}),Woe="resize",Voe=["config","matrix"],Yoe=G(Woe,Voe,t=>{var{config:e,matrix:r}=t;return function(a,s,o){if(arguments.length!==2&&arguments.length!==3)throw new Qu("resize",arguments.length,2,3);if(dt(s)&&(s=s.valueOf()),Mt(s[0])&&(s=s.map(function(c){return Mt(c)?c.toNumber():c})),dt(a))return a.resize(s,o,!0);if(typeof a=="string")return n(a,s,o);var u=Array.isArray(a)?!1:e.matrix!=="Array";if(s.length===0){for(;Array.isArray(a);)a=a[0];return xt(a)}else{Array.isArray(a)||(a=[a]),a=xt(a);var l=gc(a,s,o);return u?r(l):l}};function n(i,a,s){if(s!==void 0){if(typeof s!="string"||s.length!==1)throw new TypeError("Single character expected as defaultValue")}else s=" ";if(a.length!==1)throw new It(a.length,1);var o=a[0];if(typeof o!="number"||!ot(o))throw new TypeError("Invalid size, must contain positive integers (size: "+Pt(a)+")");if(i.length>o)return i.substring(0,o);if(i.length{var{typed:e,multiply:r,rotationMatrix:n}=t;return e(ZN,{"Array , number | BigNumber | Complex | Unit":function(s,o){i(s,2);var u=r(n(o),s);return u.toArray()},"Matrix , number | BigNumber | Complex | Unit":function(s,o){return i(s,2),r(n(o),s)},"Array, number | BigNumber | Complex | Unit, Array | Matrix":function(s,o,u){i(s,3);var l=r(n(o,u),s);return l},"Matrix, number | BigNumber | Complex | Unit, Array | Matrix":function(s,o,u){return i(s,3),r(n(o,u),s)}});function i(a,s){var o=Array.isArray(a)?Nt(a):a.size();if(o.length>2)throw new RangeError("Vector must be of dimensions 1x".concat(s));if(o.length===2&&o[1]!==1)throw new RangeError("Vector must be of dimensions 1x".concat(s));if(o[0]!==s)throw new RangeError("Vector must be of dimensions 1x".concat(s))}}),KN="rotationMatrix",Xoe=["typed","config","multiplyScalar","addScalar","unaryMinus","norm","matrix","BigNumber","DenseMatrix","SparseMatrix","cos","sin"],Zoe=G(KN,Xoe,t=>{var{typed:e,config:r,multiplyScalar:n,addScalar:i,unaryMinus:a,norm:s,BigNumber:o,matrix:u,DenseMatrix:l,SparseMatrix:c,cos:f,sin:h}=t;return e(KN,{"":function(){return r.matrix==="Matrix"?u([]):[]},string:function(x){return u(x)},"number | BigNumber | Complex | Unit":function(x){return p(x,r.matrix==="Matrix"?"dense":void 0)},"number | BigNumber | Complex | Unit, string":function(x,_){return p(x,_)},"number | BigNumber | Complex | Unit, Array":function(x,_){var A=u(_);return g(A),y(x,A,void 0)},"number | BigNumber | Complex | Unit, Matrix":function(x,_){g(_);var A=_.storage()||(r.matrix==="Matrix"?"dense":void 0);return y(x,_,A)},"number | BigNumber | Complex | Unit, Array, string":function(x,_,A){var w=u(_);return g(w),y(x,w,A)},"number | BigNumber | Complex | Unit, Matrix, string":function(x,_,A){return g(_),y(x,_,A)}});function p(S,x){var _=Mt(S),A=_?new o(-1):-1,w=f(S),C=h(S),E=[[w,n(A,C)],[C,w]];return b(E,x)}function g(S){var x=S.size();if(x.length<1||x[0]!==3)throw new RangeError("Vector must be of dimensions 1x3")}function m(S){return S.reduce((x,_)=>n(x,_))}function b(S,x){if(x){if(x==="sparse")return new c(S);if(x==="dense")return new l(S);throw new TypeError('Unknown matrix type "'.concat(x,'"'))}return S}function y(S,x,_){var A=s(x);if(A===0)throw new RangeError("Rotation around zero vector");var w=Mt(S)?o:null,C=w?new w(1):1,E=w?new w(-1):-1,N=w?new w(x.get([0])/A):x.get([0])/A,M=w?new w(x.get([1])/A):x.get([1])/A,O=w?new w(x.get([2])/A):x.get([2])/A,F=f(S),q=i(C,a(F)),V=h(S),H=i(F,m([N,N,q])),B=i(m([N,M,q]),m([E,O,V])),I=i(m([N,O,q]),m([M,V])),K=i(m([N,M,q]),m([O,V])),$=i(F,m([M,M,q])),se=i(m([M,O,q]),m([E,N,V])),he=i(m([N,O,q]),m([E,M,V])),ne=i(m([M,O,q]),m([N,V])),X=i(F,m([O,O,q])),de=[[H,B,I],[K,$,se],[he,ne,X]];return b(de,_)}}),JN="row",Koe=["typed","Index","matrix","range"],WI=G(JN,Koe,t=>{var{typed:e,Index:r,matrix:n,range:i}=t;return e(JN,{"Matrix, number":a,"Array, number":function(o,u){return a(n(xt(o)),u).valueOf()}});function a(s,o){if(s.size().length!==2)throw new Error("Only two dimensional matrix is supported");gr(o,s.size()[0]);var u=i(0,s.size()[1]),l=new r(o,u),c=s.subset(l);return dt(c)?c:n([[c]])}}),QN="size",Joe=["typed","config","?matrix"],Qoe=G(QN,Joe,t=>{var{typed:e,config:r,matrix:n}=t;return e(QN,{Matrix:function(a){return a.create(a.size())},Array:Nt,string:function(a){return r.matrix==="Array"?[a.length]:n([a.length])},"number | Complex | BigNumber | Unit | boolean | null":function(a){return r.matrix==="Array"?[]:n?n([]):UI()}})}),eE="squeeze",eue=["typed","matrix"],tue=G(eE,eue,t=>{var{typed:e,matrix:r}=t;return e(eE,{Array:function(i){return xv(xt(i))},Matrix:function(i){var a=xv(i.toArray());return Array.isArray(a)?r(a):a},any:function(i){return xt(i)}})}),tE="subset",rue=["typed","matrix","zeros","add"],VI=G(tE,rue,t=>{var{typed:e,matrix:r,zeros:n,add:i}=t;return e(tE,{"Matrix, Index":function(o,u){return vc(u)?r():(bv(o,u),o.subset(u))},"Array, Index":e.referTo("Matrix, Index",function(s){return function(o,u){var l=s(r(o),u);return u.isScalar()?l:l.valueOf()}}),"Object, Index":iue,"string, Index":nue,"Matrix, Index, any, any":function(o,u,l,c){return vc(u)?o:(bv(o,u),o.clone().subset(u,a(l,u),c))},"Array, Index, any, any":e.referTo("Matrix, Index, any, any",function(s){return function(o,u,l,c){var f=s(r(o),u,l,c);return f.isMatrix?f.valueOf():f}}),"Array, Index, any":e.referTo("Matrix, Index, any, any",function(s){return function(o,u,l){return s(r(o),u,l,void 0).valueOf()}}),"Matrix, Index, any":e.referTo("Matrix, Index, any, any",function(s){return function(o,u,l){return s(o,u,l,void 0)}}),"string, Index, string":rE,"string, Index, string, string":rE,"Object, Index, any":aue});function a(s,o){if(typeof s=="string")throw new Error("can't boradcast a string");if(o._isScalar)return s;var u=o.size();if(u.every(l=>l>0))try{return i(s,n(u))}catch{return s}else return s}});function nue(t,e){if(!Mg(e))throw new TypeError("Index expected");if(vc(e))return"";if(bv(Array.from(t),e),e.size().length!==1)throw new It(e.size().length,1);var r=t.length;gr(e.min()[0],r),gr(e.max()[0],r);var n=e.dimension(0),i="";return n.forEach(function(a){i+=t.charAt(a)}),i}function rE(t,e,r,n){if(!e||e.isIndex!==!0)throw new TypeError("Index expected");if(vc(e))return t;if(bv(Array.from(t),e),e.size().length!==1)throw new It(e.size().length,1);if(n!==void 0){if(typeof n!="string"||n.length!==1)throw new TypeError("Single character expected as defaultValue")}else n=" ";var i=e.dimension(0),a=i.size()[0];if(a!==r.length)throw new It(i.size()[0],r.length);var s=t.length;gr(e.min()[0]),gr(e.max()[0]);for(var o=[],u=0;us)for(var l=s-1,c=o.length;l{var{typed:e,matrix:r}=t;return e(nE,{Array:s=>n(r(s)).valueOf(),Matrix:n,any:xt});function n(s){var o=s.size(),u;switch(o.length){case 1:u=s.clone();break;case 2:{var l=o[0],c=o[1];if(c===0)throw new RangeError("Cannot transpose a 2D matrix with no columns (size: "+Pt(o)+")");switch(s.storage()){case"dense":u=i(s,l,c);break;case"sparse":u=a(s,l,c);break}}break;default:throw new RangeError("Matrix must be a vector or two dimensional (size: "+Pt(o)+")")}return u}function i(s,o,u){for(var l=s._data,c=[],f,h=0;h{var{typed:e,transpose:r,conj:n}=t;return e(iE,{any:function(a){return n(r(a))}})}),aE="zeros",cue=["typed","config","matrix","BigNumber"],fue=G(aE,cue,t=>{var{typed:e,config:r,matrix:n,BigNumber:i}=t;return e(aE,{"":function(){return r.matrix==="Array"?a([]):a([],"default")},"...number | BigNumber | string":function(l){var c=l[l.length-1];if(typeof c=="string"){var f=l.pop();return a(l,f)}else return r.matrix==="Array"?a(l):a(l,"default")},Array:a,Matrix:function(l){var c=l.storage();return a(l.valueOf(),c)},"Array | Matrix, string":function(l,c){return a(l.valueOf(),c)}});function a(u,l){var c=s(u),f=c?new i(0):0;if(o(u),l){var h=n(l);return u.length>0?h.resize(u,f):h}else{var p=[];return u.length>0?gc(p,u,f):p}}function s(u){var l=!1;return u.forEach(function(c,f,h){Mt(c)&&(l=!0,h[f]=c.toNumber())}),l}function o(u){u.forEach(function(l){if(typeof l!="number"||!ot(l)||l<0)throw new Error("Parameters in function zeros must be positive integers")})}}),sE="fft",hue=["typed","matrix","addScalar","multiplyScalar","divideScalar","exp","tau","i","dotDivide","conj","pow","ceil","log2"],due=G(sE,hue,t=>{var{typed:e,matrix:r,addScalar:n,multiplyScalar:i,divideScalar:a,exp:s,tau:o,i:u,dotDivide:l,conj:c,pow:f,ceil:h,log2:p}=t;return e(sE,{Array:g,Matrix:function(x){return x.create(g(x.toArray()))}});function g(S){var x=Nt(S);return x.length===1?y(S,x[0]):m(S.map(_=>g(_,x.slice(1))),0)}function m(S,x){var _=Nt(S);if(x!==0)return new Array(_[0]).fill(0).map((w,C)=>m(S[C],x-1));if(_.length===1)return y(S);function A(w){var C=Nt(w);return new Array(C[1]).fill(0).map((E,N)=>new Array(C[0]).fill(0).map((M,O)=>w[O][N]))}return A(m(A(S),1))}function b(S){for(var x=S.length,_=s(a(i(-1,i(u,o)),x)),A=[],w=1-x;wi(S[I],A[x-1+I])),...new Array(C-x).fill(0)],N=[...new Array(x+x-1).fill(0).map((B,I)=>a(1,A[I])),...new Array(C-(x+x-1)).fill(0)],M=y(E),O=y(N),F=new Array(C).fill(0).map((B,I)=>i(M[I],O[I])),q=l(c(g(c(F))),C),V=[],H=x-1;HN%2===0)),...y(S.filter((E,N)=>N%2===1))],A=0;A{var{typed:e,fft:r,dotDivide:n,conj:i}=t;return e(oE,{"Array | Matrix":function(s){var o=dt(s)?s.size():Nt(s);return n(i(r(i(s))),o.reduce((u,l)=>u*l,1))}})});function Yh(t){"@babel/helpers - typeof";return Yh=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Yh(t)}function vue(t,e){if(Yh(t)!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e||"default");if(Yh(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function gue(t){var e=vue(t,"string");return Yh(e)=="symbol"?e:String(e)}function vn(t,e,r){return e=gue(e),e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function uE(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),r.push.apply(r,n)}return r}function yue(t){for(var e=1;e{var{typed:e,add:r,subtract:n,multiply:i,divide:a,max:s,map:o,abs:u,isPositive:l,isNegative:c,larger:f,smaller:h,matrix:p,bignumber:g,unaryMinus:m}=t;function b(E){return function(N,M,O,F){var q=!(M.length===2&&(M.every(w)||M.every(Ji)));if(q)throw new Error('"tspan" must be an Array of two numeric values or two units [tStart, tEnd]');var V=M[0],H=M[1],B=f(H,V),I=F.firstStep;if(I!==void 0&&!l(I))throw new Error('"firstStep" must be positive');var K=F.maxStep;if(K!==void 0&&!l(K))throw new Error('"maxStep" must be positive');var $=F.minStep;if($&&c($))throw new Error('"minStep" must be positive or zero');var se=[V,H,I,$,K].filter(P=>P!==void 0);if(!(se.every(w)||se.every(Ji)))throw new Error('Inconsistent type of "t" dependant variables');for(var he=1,ne=F.tol?F.tol:1e-4,X=F.minDelta?F.minDelta:.2,de=F.maxDelta?F.maxDelta:5,Se=F.maxIter?F.maxIter:1e4,ce=[V,H,...O,K,$].some(Mt),[xe,_e,me,we]=ce?[g(E.a),g(E.c),g(E.b),g(E.bp)]:[E.a,E.c,E.b,E.bp],Ne=I?B?I:m(I):a(n(H,V),he),Ce=[V],He=[O],Ue=n(me,we),J=0,te=0,ye=_(B),ee=A(B);ye(Ce[J],H);){var ue=[];Ne=ee(Ce[J],H,Ne),ue.push(N(Ce[J],He[J]));for(var le=1;le<_e.length;++le)ue.push(N(r(Ce[J],i(_e[le],Ne)),r(He[J],i(Ne,xe[le],ue))));var Ee=s(u(o(i(Ue,ue),P=>Ji(P)?P.value:P)));Ee1/4&&(Ce.push(r(Ce[J],Ne)),He.push(r(He[J],i(Ne,me,ue))),J++);var Me=.84*(ne/Ee)**(1/5);if(h(Me,X)?Me=X:f(Me,de)&&(Me=de),Me=ce?g(Me):Me,Ne=i(Ne,Me),K&&f(u(Ne),K)?Ne=B?K:m(K):$&&h(u(Ne),$)&&(Ne=B?$:m($)),te++,te>Se)throw new Error("Maximum number of iterations reached, try changing options")}return{t:Ce,y:He}}}function y(E,N,M,O){var F=[[],[.5],[0,.75],[.2222222222222222,.3333333333333333,.4444444444444444]],q=[null,1/2,3/4,1],V=[2/9,1/3,4/9,0],H=[7/24,1/4,1/3,1/8],B={a:F,c:q,b:V,bp:H};return b(B)(E,N,M,O)}function S(E,N,M,O){var F=[[],[.2],[.075,.225],[.9777777777777777,-3.7333333333333334,3.5555555555555554],[2.9525986892242035,-11.595793324188385,9.822892851699436,-.2908093278463649],[2.8462752525252526,-10.757575757575758,8.906422717743473,.2784090909090909,-.2735313036020583],[.09114583333333333,0,.44923629829290207,.6510416666666666,-.322376179245283,.13095238095238096]],q=[null,1/5,3/10,4/5,8/9,1,1],V=[35/384,0,500/1113,125/192,-2187/6784,11/84,0],H=[5179/57600,0,7571/16695,393/640,-92097/339200,187/2100,1/40],B={a:F,c:q,b:V,bp:H};return b(B)(E,N,M,O)}function x(E,N,M,O){var F=O.method?O.method:"RK45",q={RK23:y,RK45:S};if(F.toUpperCase()in q){var V=yue({},O);return delete V.method,q[F.toUpperCase()](E,N,M,V)}else{var H=Object.keys(q).map(I=>'"'.concat(I,'"')),B="".concat(H.slice(0,-1).join(", ")," and ").concat(H.slice(-1));throw new Error('Unavailable method "'.concat(F,'". Available methods are ').concat(B))}}function _(E){return E?h:f}function A(E){var N=E?f:h;return function(M,O,F){var q=r(M,F);return N(q,O)?n(O,M):F}}function w(E){return Mt(E)||Ct(E)}function C(E,N,M,O){var F=x(E,N.toArray(),M.toArray(),O);return{t:p(F.t),y:p(F.y)}}return e("solveODE",{"function, Array, Array, Object":x,"function, Matrix, Matrix, Object":C,"function, Array, Array":(E,N,M)=>x(E,N,M,{}),"function, Matrix, Matrix":(E,N,M)=>C(E,N,M,{}),"function, Array, number | BigNumber | Unit":(E,N,M)=>{var O=x(E,N,[M],{});return{t:O.t,y:O.y.map(F=>F[0])}},"function, Matrix, number | BigNumber | Unit":(E,N,M)=>{var O=x(E,N.toArray(),[M],{});return{t:p(O.t),y:p(O.y.map(F=>F[0]))}},"function, Array, number | BigNumber | Unit, Object":(E,N,M,O)=>{var F=x(E,N,[M],O);return{t:F.t,y:F.y.map(q=>q[0])}},"function, Matrix, number | BigNumber | Unit, Object":(E,N,M,O)=>{var F=x(E,N.toArray(),[M],O);return{t:p(F.t),y:p(F.y.map(q=>q[0]))}}})}),Sue="erf",_ue=["typed"],Aue=G(Sue,_ue,t=>{var{typed:e}=t;return e("name",{number:function(s){var o=Math.abs(s);return o>=Eue?Io(s):o<=Due?Io(s)*r(o):o<=4?Io(s)*(1-n(o)):Io(s)*(1-i(o))},"Array | Matrix":e.referToSelf(a=>s=>Bt(s,a))});function r(a){var s=a*a,o=Ds[0][4]*s,u=s,l;for(l=0;l<3;l+=1)o=(o+Ds[0][l])*s,u=(u+Bl[0][l])*s;return a*(o+Ds[0][3])/(u+Bl[0][3])}function n(a){var s=Ds[1][8]*a,o=a,u;for(u=0;u<7;u+=1)s=(s+Ds[1][u])*a,o=(o+Bl[1][u])*a;var l=(s+Ds[1][7])/(o+Bl[1][7]),c=parseInt(a*16)/16,f=(a-c)*(a+c);return Math.exp(-c*c)*Math.exp(-f)*l}function i(a){var s=1/(a*a),o=Ds[2][5]*s,u=s,l;for(l=0;l<4;l+=1)o=(o+Ds[2][l])*s,u=(u+Bl[2][l])*s;var c=s*(o+Ds[2][4])/(u+Bl[2][4]);c=(Nue-c)/a,s=parseInt(a*16)/16;var f=(a-s)*(a+s);return Math.exp(-s*s)*Math.exp(-f)*c}}),Due=.46875,Nue=.5641895835477563,Ds=[[3.1611237438705655,113.86415415105016,377.485237685302,3209.3775891384694,.18577770618460315],[.5641884969886701,8.883149794388377,66.11919063714163,298.6351381974001,881.952221241769,1712.0476126340707,2051.0783778260716,1230.3393547979972,21531153547440383e-24],[.30532663496123236,.36034489994980445,.12578172611122926,.016083785148742275,.0006587491615298378,.016315387137302097]],Bl=[[23.601290952344122,244.02463793444417,1282.6165260773723,2844.236833439171],[15.744926110709835,117.6939508913125,537.1811018620099,1621.3895745666903,3290.7992357334597,4362.619090143247,3439.3676741437216,1230.3393548037495],[2.568520192289822,1.8729528499234604,.5279051029514285,.06051834131244132,.0023352049762686918]],Eue=Math.pow(2,53),lE="zeta",Cue=["typed","config","multiply","pow","divide","factorial","equal","smallerEq","isNegative","gamma","sin","subtract","add","?Complex","?BigNumber","pi"],Mue=G(lE,Cue,t=>{var{typed:e,config:r,multiply:n,pow:i,divide:a,factorial:s,equal:o,smallerEq:u,isNegative:l,gamma:c,sin:f,subtract:h,add:p,Complex:g,BigNumber:m,pi:b}=t;return e(lE,{number:w=>y(w,C=>C,()=>20),BigNumber:w=>y(w,C=>new m(C),()=>Math.abs(Math.log10(r.epsilon))),Complex:S});function y(w,C,E){return o(w,0)?C(-.5):o(w,1)?C(NaN):isFinite(w)?x(w,C,E,N=>N):l(w)?C(NaN):C(1)}function S(w){return w.re===0&&w.im===0?new g(-.5):w.re===1?new g(NaN,NaN):w.re===1/0&&w.im===0?new g(1):w.im===1/0||w.re===-1/0?new g(NaN,NaN):x(w,C=>C,C=>Math.round(1.3*15+.9*Math.abs(C.im)),C=>C.re)}function x(w,C,E,N){var M=E(w);if(N(w)>-(M-1)/2)return A(w,C(M),C);var O=n(i(2,w),i(C(b),h(w,1)));return O=n(O,f(n(a(C(b),2),w))),O=n(O,c(h(1,w))),n(O,x(h(1,w),C,E,N))}function _(w,C){for(var E=w,N=w;u(N,C);N=p(N,1)){var M=a(n(s(p(C,h(N,1))),i(4,N)),n(s(h(C,N)),s(n(2,N))));E=p(E,M)}return n(C,E)}function A(w,C,E){for(var N=a(1,n(_(E(0),C),h(1,i(2,h(1,w))))),M=E(0),O=E(1);u(O,C);O=p(O,1))M=p(M,a(n((-1)**(O-1),_(O,C)),i(O,w)));return n(N,M)}}),cE="mode",Tue=["typed","isNaN","isNumeric"],Oue=G(cE,Tue,t=>{var{typed:e,isNaN:r,isNumeric:n}=t;return e(cE,{"Array | Matrix":i,"...":function(s){return i(s)}});function i(a){a=tr(a.valueOf());var s=a.length;if(s===0)throw new Error("Cannot calculate mode of an empty array");for(var o={},u=[],l=0,c=0;cl&&(l=o[f],u=[f])}return u}});function ai(t,e,r){var n;return String(t).indexOf("Unexpected type")!==-1?(n=arguments.length>2?" (type: "+xr(r)+", value: "+JSON.stringify(r)+")":" (type: "+t.data.actual+")",new TypeError("Cannot calculate "+e+", unexpected type of argument"+n)):String(t).indexOf("complex numbers")!==-1?(n=arguments.length>2?" (type: "+xr(r)+", value: "+JSON.stringify(r)+")":"",new TypeError("Cannot calculate "+e+", no ordering relation is defined for complex numbers"+n)):t}var fE="prod",Fue=["typed","config","multiplyScalar","numeric"],Pue=G(fE,Fue,t=>{var{typed:e,config:r,multiplyScalar:n,numeric:i}=t;return e(fE,{"Array | Matrix":a,"Array | Matrix, number | BigNumber":function(o,u){throw new Error("prod(A, dim) is not yet supported")},"...":function(o){return a(o)}});function a(s){var o;if(Gs(s,function(u){try{o=o===void 0?u:n(o,u)}catch(l){throw ai(l,"prod",u)}}),typeof o=="string"&&(o=i(o,r.number)),o===void 0)throw new Error("Cannot calculate prod of an empty array");return o}}),hE="format",Rue=["typed"],Iue=G(hE,Rue,t=>{var{typed:e}=t;return e(hE,{any:Pt,"any, Object | function | number | BigNumber":Pt})}),dE="bin",Bue=["typed","format"],kue=G(dE,Bue,t=>{var{typed:e,format:r}=t;return e(dE,{"number | BigNumber":function(i){return r(i,{notation:"bin"})},"number | BigNumber, number | BigNumber":function(i,a){return r(i,{notation:"bin",wordSize:a})}})}),pE="oct",Lue=["typed","format"],$ue=G(pE,Lue,t=>{var{typed:e,format:r}=t;return e(pE,{"number | BigNumber":function(i){return r(i,{notation:"oct"})},"number | BigNumber, number | BigNumber":function(i,a){return r(i,{notation:"oct",wordSize:a})}})}),mE="hex",zue=["typed","format"],que=G(mE,zue,t=>{var{typed:e,format:r}=t;return e(mE,{"number | BigNumber":function(i){return r(i,{notation:"hex"})},"number | BigNumber, number | BigNumber":function(i,a){return r(i,{notation:"hex",wordSize:a})}})}),YI=/\$([\w.]+)/g,vE="print",Uue=["typed"],jI=G(vE,Uue,t=>{var{typed:e}=t;return e(vE,{"string, Object | Array":gE,"string, Object | Array, number | Object":gE})});function gE(t,e,r){return t.replace(YI,function(n,i){var a=i.split("."),s=e[a.shift()];for(s!==void 0&&s.isMatrix&&(s=s.toArray());a.length&&s!==void 0;){var o=a.shift();s=o?s[o]:s+"."}return s!==void 0?qn(s)?s:Pt(s,r):n})}var yE="to",Hue=["typed","matrix","concat"],Wue=G(yE,Hue,t=>{var{typed:e,matrix:r,concat:n}=t,i=_r({typed:e,matrix:r,concat:n});return e(yE,{"Unit, Unit | string":(a,s)=>a.to(s)},i({Ds:!0}))}),bE="isPrime",Yue=["typed"],jue=G(bE,Yue,t=>{var{typed:e}=t;return e(bE,{number:function(n){if(n*0!==0)return!1;if(n<=3)return n>1;if(n%2===0||n%3===0)return!1;for(var i=5;i*i<=n;i+=6)if(n%i===0||n%(i+2)===0)return!1;return!0},BigNumber:function(n){if(n.toNumber()*0!==0)return!1;if(n.lte(3))return n.gt(1);if(n.mod(2).eq(0)||n.mod(3).eq(0))return!1;if(n.lt(Math.pow(2,32))){for(var i=n.toNumber(),a=5;a*a<=i;a+=6)if(i%a===0||i%(a+2)===0)return!1;return!0}function s(S,x,_){for(var A=1;!x.eq(0);)x.mod(2).eq(0)?(x=x.div(2),S=S.mul(S).mod(_)):(x=x.sub(1),A=S.mul(A).mod(_));return A}var o=n.constructor.clone({precision:n.toFixed(0).length*2});n=new o(n);for(var u=0,l=n.sub(1);l.mod(2).eq(0);)l=l.div(2),u+=1;var c=null;if(n.lt("3317044064679887385961981"))c=[2,3,5,7,11,13,17,19,23,29,31,37,41].filter(S=>Sn=>Bt(n,r))})}),Gue="numeric",Xue=["number","?bignumber","?fraction"],Zue=G(Gue,Xue,t=>{var{number:e,bignumber:r,fraction:n}=t,i={string:!0,number:!0,BigNumber:!0,Fraction:!0},a={number:s=>e(s),BigNumber:r?s=>r(s):fw,Fraction:n?s=>n(s):qI};return function(o){var u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"number",l=arguments.length>2?arguments[2]:void 0;if(l!==void 0)throw new SyntaxError("numeric() takes one or two arguments");var c=xr(o);if(!(c in i))throw new TypeError("Cannot convert "+o+' of type "'+c+'"; valid input types are '+Object.keys(i).join(", "));if(!(u in a))throw new TypeError("Cannot convert "+o+' to type "'+u+'"; valid output types are '+Object.keys(a).join(", "));return u===c?o:a[u](o)}}),xE="divideScalar",Kue=["typed","numeric"],Jue=G(xE,Kue,t=>{var{typed:e,numeric:r}=t;return e(xE,{"number, number":function(i,a){return i/a},"Complex, Complex":function(i,a){return i.div(a)},"BigNumber, BigNumber":function(i,a){return i.div(a)},"Fraction, Fraction":function(i,a){return i.div(a)},"Unit, number | Complex | Fraction | BigNumber | Unit":(n,i)=>n.divide(i),"number | Fraction | Complex | BigNumber, Unit":(n,i)=>i.divideInto(n)})}),wE="pow",Que=["typed","config","identity","multiply","matrix","inv","fraction","number","Complex"],ele=G(wE,Que,t=>{var{typed:e,config:r,identity:n,multiply:i,matrix:a,inv:s,number:o,fraction:u,Complex:l}=t;return e(wE,{"number, number":c,"Complex, Complex":function(g,m){return g.pow(m)},"BigNumber, BigNumber":function(g,m){return m.isInteger()||g>=0||r.predictable?g.pow(m):new l(g.toNumber(),0).pow(m.toNumber(),0)},"Fraction, Fraction":function(g,m){var b=g.pow(m);if(b!=null)return b;if(r.predictable)throw new Error("Result of pow is non-rational and cannot be expressed as a fraction");return c(g.valueOf(),m.valueOf())},"Array, number":f,"Array, BigNumber":function(g,m){return f(g,m.toNumber())},"Matrix, number":h,"Matrix, BigNumber":function(g,m){return h(g,m.toNumber())},"Unit, number | BigNumber":function(g,m){return g.pow(m)}});function c(p,g){if(r.predictable&&!ot(g)&&p<0)try{var m=u(g),b=o(m);if((g===b||Math.abs((g-b)/g)<1e-14)&&m.d%2===1)return(m.n%2===0?1:-1)*Math.pow(-p,g)}catch{}return r.predictable&&(p<-1&&g===1/0||p>-1&&p<0&&g===-1/0)?NaN:ot(g)||p>=0||r.predictable?KR(p,g):p*p<1&&g===1/0||p*p>1&&g===-1/0?0:new l(p,0).pow(g,0)}function f(p,g){if(!ot(g))throw new TypeError("For A^b, b must be an integer (value is "+g+")");var m=Nt(p);if(m.length!==2)throw new Error("For A^b, A must be 2 dimensional (A has "+m.length+" dimensions)");if(m[0]!==m[1])throw new Error("For A^b, A must be square (size is "+m[0]+"x"+m[1]+")");if(g<0)try{return f(s(p),-g)}catch(S){throw S.message==="Cannot calculate inverse, determinant is zero"?new TypeError("For A^b, when A is not invertible, b must be a positive integer (value is "+g+")"):S}for(var b=n(m[0]).valueOf(),y=p;g>=1;)(g&1)===1&&(b=i(y,b)),g>>=1,y=i(y,y);return b}function h(p,g){return a(f(p.valueOf(),g))}}),kl="Number of decimals in function round must be an integer",SE="round",tle=["typed","matrix","equalScalar","zeros","BigNumber","DenseMatrix"],rle=G(SE,tle,t=>{var{typed:e,matrix:r,equalScalar:n,zeros:i,BigNumber:a,DenseMatrix:s}=t,o=Rn({typed:e,equalScalar:n}),u=gn({typed:e,DenseMatrix:s}),l=Ra({typed:e});return e(SE,{number:L2,"number, number":L2,"number, BigNumber":function(f,h){if(!h.isInteger())throw new TypeError(kl);return new a(f).toDecimalPlaces(h.toNumber())},Complex:function(f){return f.round()},"Complex, number":function(f,h){if(h%1)throw new TypeError(kl);return f.round(h)},"Complex, BigNumber":function(f,h){if(!h.isInteger())throw new TypeError(kl);var p=h.toNumber();return f.round(p)},BigNumber:function(f){return f.toDecimalPlaces(0)},"BigNumber, BigNumber":function(f,h){if(!h.isInteger())throw new TypeError(kl);return f.toDecimalPlaces(h.toNumber())},Fraction:function(f){return f.round()},"Fraction, number":function(f,h){if(h%1)throw new TypeError(kl);return f.round(h)},"Fraction, BigNumber":function(f,h){if(!h.isInteger())throw new TypeError(kl);return f.round(h.toNumber())},"Unit, number, Unit":e.referToSelf(c=>function(f,h,p){var g=f.toNumeric(p);return p.multiply(c(g,h))}),"Unit, BigNumber, Unit":e.referToSelf(c=>(f,h,p)=>c(f,h.toNumber(),p)),"Unit, Unit":e.referToSelf(c=>(f,h)=>c(f,0,h)),"Array | Matrix, number, Unit":e.referToSelf(c=>(f,h,p)=>Bt(f,g=>c(g,h,p))),"Array | Matrix, BigNumber, Unit":e.referToSelf(c=>(f,h,p)=>c(f,h.toNumber(),p)),"Array | Matrix, Unit":e.referToSelf(c=>(f,h)=>c(f,0,h)),"Array | Matrix":e.referToSelf(c=>f=>Bt(f,c)),"SparseMatrix, number | BigNumber":e.referToSelf(c=>(f,h)=>o(f,h,c,!1)),"DenseMatrix, number | BigNumber":e.referToSelf(c=>(f,h)=>l(f,h,c,!1)),"Array, number | BigNumber":e.referToSelf(c=>(f,h)=>l(r(f),h,c,!1).valueOf()),"number | Complex | BigNumber | Fraction, SparseMatrix":e.referToSelf(c=>(f,h)=>n(f,0)?i(h.size(),h.storage()):u(h,f,c,!0)),"number | Complex | BigNumber | Fraction, DenseMatrix":e.referToSelf(c=>(f,h)=>n(f,0)?i(h.size(),h.storage()):l(h,f,c,!0)),"number | Complex | BigNumber | Fraction, Array":e.referToSelf(c=>(f,h)=>l(r(h),f,c,!0).valueOf())})}),_E="log",nle=["config","typed","divideScalar","Complex"],ile=G(_E,nle,t=>{var{typed:e,config:r,divideScalar:n,Complex:i}=t;return e(_E,{number:function(s){return s>=0||r.predictable?tie(s):new i(s,0).log()},Complex:function(s){return s.log()},BigNumber:function(s){return!s.isNegative()||r.predictable?s.ln():new i(s.toNumber(),0).log()},"any, any":e.referToSelf(a=>(s,o)=>n(a(s),a(o)))})}),AE="log1p",ale=["typed","config","divideScalar","log","Complex"],sle=G(AE,ale,t=>{var{typed:e,config:r,divideScalar:n,log:i,Complex:a}=t;return e(AE,{number:function(u){return u>=-1||r.predictable?Qte(u):s(new a(u,0))},Complex:s,BigNumber:function(u){var l=u.plus(1);return!l.isNegative()||r.predictable?l.ln():s(new a(u.toNumber(),0))},"Array | Matrix":e.referToSelf(o=>u=>Bt(u,o)),"any, any":e.referToSelf(o=>(u,l)=>n(o(u),i(l)))});function s(o){var u=o.re+1;return new a(Math.log(Math.sqrt(u*u+o.im*o.im)),Math.atan2(o.im,u))}}),DE="nthRoots",ole=["config","typed","divideScalar","Complex"],ule=G(DE,ole,t=>{var{typed:e,config:r,divideScalar:n,Complex:i}=t,a=[function(u){return new i(u,0)},function(u){return new i(0,u)},function(u){return new i(-u,0)},function(u){return new i(0,-u)}];function s(o,u){if(u<0)throw new Error("Root must be greater than zero");if(u===0)throw new Error("Root must be non-zero");if(u%1!==0)throw new Error("Root must be an integer");if(o===0||o.abs()===0)return[new i(0,0)];var l=typeof o=="number",c;(l||o.re===0||o.im===0)&&(l?c=2*+(o<0):o.im===0?c=2*+(o.re<0):c=2*+(o.im<0)+1);for(var f=o.arg(),h=o.abs(),p=[],g=Math.pow(h,1/u),m=0;m{var{typed:e,equalScalar:r,matrix:n,pow:i,DenseMatrix:a,concat:s}=t,o=si({typed:e}),u=as({typed:e,DenseMatrix:a}),l=Rn({typed:e,equalScalar:r}),c=gn({typed:e,DenseMatrix:a}),f=_r({typed:e,matrix:n,concat:s}),h={};for(var p in i.signatures)Object.prototype.hasOwnProperty.call(i.signatures,p)&&!p.includes("Matrix")&&!p.includes("Array")&&(h[p]=i.signatures[p]);var g=e(h);return e(NE,f({elop:g,SS:u,DS:o,Ss:l,sS:c}))}),EE="dotDivide",fle=["typed","matrix","equalScalar","divideScalar","DenseMatrix","concat"],hle=G(EE,fle,t=>{var{typed:e,matrix:r,equalScalar:n,divideScalar:i,DenseMatrix:a,concat:s}=t,o=Ia({typed:e,equalScalar:n}),u=si({typed:e}),l=as({typed:e,DenseMatrix:a}),c=Rn({typed:e,equalScalar:n}),f=gn({typed:e,DenseMatrix:a}),h=_r({typed:e,matrix:r,concat:s});return e(EE,h({elop:i,SS:l,DS:u,SD:o,Ss:c,sS:f}))});function md(t){var{DenseMatrix:e}=t;return function(n,i,a){var s=n.size();if(s.length!==2)throw new RangeError("Matrix must be two dimensional (size: "+Pt(s)+")");var o=s[0],u=s[1];if(o!==u)throw new RangeError("Matrix must be square (size: "+Pt(s)+")");var l=[];if(dt(i)){var c=i.size(),f=i._data;if(c.length===1){if(c[0]!==o)throw new RangeError("Dimension mismatch. Matrix columns must match vector length.");for(var h=0;h{var{typed:e,matrix:r,divideScalar:n,multiplyScalar:i,subtractScalar:a,equalScalar:s,DenseMatrix:o}=t,u=md({DenseMatrix:o});return e(CE,{"SparseMatrix, Array | Matrix":function(h,p){return c(h,p)},"DenseMatrix, Array | Matrix":function(h,p){return l(h,p)},"Array, Array | Matrix":function(h,p){var g=r(h),m=l(g,p);return m.valueOf()}});function l(f,h){h=u(f,h,!0);for(var p=h._data,g=f._size[0],m=f._size[1],b=[],y=f._data,S=0;S_&&(C.push(b[O]),E.push(F))}if(s(w,0))throw new Error("Linear system cannot be solved since matrix is singular");for(var q=n(A,w),V=0,H=E.length;V{var{typed:e,matrix:r,divideScalar:n,multiplyScalar:i,subtractScalar:a,equalScalar:s,DenseMatrix:o}=t,u=md({DenseMatrix:o});return e(ME,{"SparseMatrix, Array | Matrix":function(h,p){return c(h,p)},"DenseMatrix, Array | Matrix":function(h,p){return l(h,p)},"Array, Array | Matrix":function(h,p){var g=r(h),m=l(g,p);return m.valueOf()}});function l(f,h){h=u(f,h,!0);for(var p=h._data,g=f._size[0],m=f._size[1],b=[],y=f._data,S=m-1;S>=0;S--){var x=p[S][0]||0,_=void 0;if(s(x,0))_=0;else{var A=y[S][S];if(s(A,0))throw new Error("Linear system cannot be solved since matrix is singular");_=n(x,A);for(var w=S-1;w>=0;w--)p[w]=[a(p[w][0]||0,i(_,y[w][S]))]}b[S]=[_]}return new o({data:b,size:[g,1]})}function c(f,h){h=u(f,h,!0);for(var p=h._data,g=f._size[0],m=f._size[1],b=f._values,y=f._index,S=f._ptr,x=[],_=m-1;_>=0;_--){var A=p[_][0]||0;if(s(A,0))x[_]=[0];else{for(var w=0,C=[],E=[],N=S[_],M=S[_+1],O=M-1;O>=N;O--){var F=y[O];F===_?w=b[O]:F<_&&(C.push(b[O]),E.push(F))}if(s(w,0))throw new Error("Linear system cannot be solved since matrix is singular");for(var q=n(A,w),V=0,H=E.length;V{var{typed:e,matrix:r,divideScalar:n,multiplyScalar:i,subtractScalar:a,equalScalar:s,DenseMatrix:o}=t,u=md({DenseMatrix:o});return e(TE,{"SparseMatrix, Array | Matrix":function(h,p){return c(h,p)},"DenseMatrix, Array | Matrix":function(h,p){return l(h,p)},"Array, Array | Matrix":function(h,p){var g=r(h),m=l(g,p);return m.map(b=>b.valueOf())}});function l(f,h){for(var p=[u(f,h,!0)._data.map(E=>E[0])],g=f._data,m=f._size[0],b=f._size[1],y=0;ynew o({data:E.map(N=>[N]),size:[m,1]}))}function c(f,h){for(var p=[u(f,h,!0)._data.map(he=>he[0])],g=f._size[0],m=f._size[1],b=f._values,y=f._index,S=f._ptr,x=0;xx&&(C.push(b[F]),E.push(q))}if(s(O,0))if(s(w[x],0)){if(A===0){var I=[...w];I[x]=1;for(var K=0,$=E.length;K<$;K++){var se=E[K];I[se]=a(I[se],C[K])}p.push(I)}}else{if(A===0)return[];p.splice(A,1),A-=1,_-=1}else{w[x]=n(w[x],O);for(var V=0,H=E.length;Vnew o({data:he.map(ne=>[ne]),size:[g,1]}))}}),OE="usolveAll",ble=["typed","matrix","divideScalar","multiplyScalar","subtractScalar","equalScalar","DenseMatrix"],xle=G(OE,ble,t=>{var{typed:e,matrix:r,divideScalar:n,multiplyScalar:i,subtractScalar:a,equalScalar:s,DenseMatrix:o}=t,u=md({DenseMatrix:o});return e(OE,{"SparseMatrix, Array | Matrix":function(h,p){return c(h,p)},"DenseMatrix, Array | Matrix":function(h,p){return l(h,p)},"Array, Array | Matrix":function(h,p){var g=r(h),m=l(g,p);return m.map(b=>b.valueOf())}});function l(f,h){for(var p=[u(f,h,!0)._data.map(E=>E[0])],g=f._data,m=f._size[0],b=f._size[1],y=b-1;y>=0;y--)for(var S=p.length,x=0;x=0;C--)w[C]=a(w[C],g[C][y]);p.push(w)}}else{if(x===0)return[];p.splice(x,1),x-=1,S-=1}else{_[y]=n(_[y],g[y][y]);for(var A=y-1;A>=0;A--)_[A]=a(_[A],i(_[y],g[A][y]))}}return p.map(E=>new o({data:E.map(N=>[N]),size:[m,1]}))}function c(f,h){for(var p=[u(f,h,!0)._data.map(he=>he[0])],g=f._size[0],m=f._size[1],b=f._values,y=f._index,S=f._ptr,x=m-1;x>=0;x--)for(var _=p.length,A=0;A<_;A++){for(var w=p[A],C=[],E=[],N=S[x],M=S[x+1],O=0,F=M-1;F>=N;F--){var q=y[F];q===x?O=b[F]:qnew o({data:he.map(ne=>[ne]),size:[g,1]}))}}),wle="matAlgo08xS0Sid",Sle=["typed","equalScalar"],hw=G(wle,Sle,t=>{var{typed:e,equalScalar:r}=t;return function(i,a,s){var o=i._values,u=i._index,l=i._ptr,c=i._size,f=i._datatype,h=a._values,p=a._index,g=a._ptr,m=a._size,b=a._datatype;if(c.length!==m.length)throw new It(c.length,m.length);if(c[0]!==m[0]||c[1]!==m[1])throw new RangeError("Dimension mismatch. Matrix A ("+c+") must match Matrix B ("+m+")");if(!o||!h)throw new Error("Cannot perform operation on Pattern Sparse Matrices");var y=c[0],S=c[1],x,_=r,A=0,w=s;typeof f=="string"&&f===b&&(x=f,_=e.find(r,[x,x]),A=e.convert(0,x),w=e.find(s,[x,x]));for(var C=[],E=[],N=[],M=[],O=[],F,q,V,H,B=0;B{var{typed:e,matrix:r}=t;return{"Array, number":e.referTo("DenseMatrix, number",n=>(i,a)=>n(r(i),a).valueOf()),"Array, BigNumber":e.referTo("DenseMatrix, BigNumber",n=>(i,a)=>n(r(i),a).valueOf()),"number, Array":e.referTo("number, DenseMatrix",n=>(i,a)=>n(i,r(a)).valueOf()),"BigNumber, Array":e.referTo("BigNumber, DenseMatrix",n=>(i,a)=>n(i,r(a)).valueOf())}}),FE="leftShift",_le=["typed","matrix","equalScalar","zeros","DenseMatrix","concat"],Ale=G(FE,_le,t=>{var{typed:e,matrix:r,equalScalar:n,zeros:i,DenseMatrix:a,concat:s}=t,o=Zo({typed:e}),u=Ia({typed:e,equalScalar:n}),l=hw({typed:e,equalScalar:n}),c=Ju({typed:e,DenseMatrix:a}),f=Rn({typed:e,equalScalar:n}),h=Ra({typed:e}),p=_r({typed:e,matrix:r,concat:s}),g=dw({typed:e,matrix:r});return e(FE,{"number, number":rI,"BigNumber, BigNumber":Hse,"SparseMatrix, number | BigNumber":e.referToSelf(m=>(b,y)=>n(y,0)?b.clone():f(b,y,m,!1)),"DenseMatrix, number | BigNumber":e.referToSelf(m=>(b,y)=>n(y,0)?b.clone():h(b,y,m,!1)),"number | BigNumber, SparseMatrix":e.referToSelf(m=>(b,y)=>n(b,0)?i(y.size(),y.storage()):c(y,b,m,!0)),"number | BigNumber, DenseMatrix":e.referToSelf(m=>(b,y)=>n(b,0)?i(y.size(),y.storage()):h(y,b,m,!0))},g,p({SS:l,DS:o,SD:u}))}),PE="rightArithShift",Dle=["typed","matrix","equalScalar","zeros","DenseMatrix","concat"],Nle=G(PE,Dle,t=>{var{typed:e,matrix:r,equalScalar:n,zeros:i,DenseMatrix:a,concat:s}=t,o=Zo({typed:e}),u=Ia({typed:e,equalScalar:n}),l=hw({typed:e,equalScalar:n}),c=Ju({typed:e,DenseMatrix:a}),f=Rn({typed:e,equalScalar:n}),h=Ra({typed:e}),p=_r({typed:e,matrix:r,concat:s}),g=dw({typed:e,matrix:r});return e(PE,{"number, number":nI,"BigNumber, BigNumber":Wse,"SparseMatrix, number | BigNumber":e.referToSelf(m=>(b,y)=>n(y,0)?b.clone():f(b,y,m,!1)),"DenseMatrix, number | BigNumber":e.referToSelf(m=>(b,y)=>n(y,0)?b.clone():h(b,y,m,!1)),"number | BigNumber, SparseMatrix":e.referToSelf(m=>(b,y)=>n(b,0)?i(y.size(),y.storage()):c(y,b,m,!0)),"number | BigNumber, DenseMatrix":e.referToSelf(m=>(b,y)=>n(b,0)?i(y.size(),y.storage()):h(y,b,m,!0))},g,p({SS:l,DS:o,SD:u}))}),RE="rightLogShift",Ele=["typed","matrix","equalScalar","zeros","DenseMatrix","concat"],Cle=G(RE,Ele,t=>{var{typed:e,matrix:r,equalScalar:n,zeros:i,DenseMatrix:a,concat:s}=t,o=Zo({typed:e}),u=Ia({typed:e,equalScalar:n}),l=hw({typed:e,equalScalar:n}),c=Ju({typed:e,DenseMatrix:a}),f=Rn({typed:e,equalScalar:n}),h=Ra({typed:e}),p=_r({typed:e,matrix:r,concat:s}),g=dw({typed:e,matrix:r});return e(RE,{"number, number":iI,"SparseMatrix, number | BigNumber":e.referToSelf(m=>(b,y)=>n(y,0)?b.clone():f(b,y,m,!1)),"DenseMatrix, number | BigNumber":e.referToSelf(m=>(b,y)=>n(y,0)?b.clone():h(b,y,m,!1)),"number | BigNumber, SparseMatrix":e.referToSelf(m=>(b,y)=>n(b,0)?i(y.size(),y.storage()):c(y,b,m,!0)),"number | BigNumber, DenseMatrix":e.referToSelf(m=>(b,y)=>n(b,0)?i(y.size(),y.storage()):h(y,b,m,!0))},g,p({SS:l,DS:o,SD:u}))}),IE="and",Mle=["typed","matrix","equalScalar","zeros","not","concat"],GI=G(IE,Mle,t=>{var{typed:e,matrix:r,equalScalar:n,zeros:i,not:a,concat:s}=t,o=Ia({typed:e,equalScalar:n}),u=Ug({typed:e,equalScalar:n}),l=Rn({typed:e,equalScalar:n}),c=Ra({typed:e}),f=_r({typed:e,matrix:r,concat:s});return e(IE,{"number, number":lI,"Complex, Complex":function(p,g){return(p.re!==0||p.im!==0)&&(g.re!==0||g.im!==0)},"BigNumber, BigNumber":function(p,g){return!p.isZero()&&!g.isZero()&&!p.isNaN()&&!g.isNaN()},"Unit, Unit":e.referToSelf(h=>(p,g)=>h(p.value||0,g.value||0)),"SparseMatrix, any":e.referToSelf(h=>(p,g)=>a(g)?i(p.size(),p.storage()):l(p,g,h,!1)),"DenseMatrix, any":e.referToSelf(h=>(p,g)=>a(g)?i(p.size(),p.storage()):c(p,g,h,!1)),"any, SparseMatrix":e.referToSelf(h=>(p,g)=>a(p)?i(p.size(),p.storage()):l(g,p,h,!0)),"any, DenseMatrix":e.referToSelf(h=>(p,g)=>a(p)?i(p.size(),p.storage()):c(g,p,h,!0)),"Array, any":e.referToSelf(h=>(p,g)=>h(r(p),g).valueOf()),"any, Array":e.referToSelf(h=>(p,g)=>h(p,r(g)).valueOf())},f({SS:u,DS:o}))}),Fv="compare",Tle=["typed","config","matrix","equalScalar","BigNumber","Fraction","DenseMatrix","concat"],Ole=G(Fv,Tle,t=>{var{typed:e,config:r,equalScalar:n,matrix:i,BigNumber:a,Fraction:s,DenseMatrix:o,concat:u}=t,l=si({typed:e}),c=qg({typed:e,equalScalar:n}),f=gn({typed:e,DenseMatrix:o}),h=_r({typed:e,matrix:i,concat:u}),p=Pc({typed:e});return e(Fv,Fle({typed:e,config:r}),{"boolean, boolean":function(m,b){return m===b?0:m>b?1:-1},"BigNumber, BigNumber":function(m,b){return Ja(m,b,r.epsilon)?new a(0):new a(m.cmp(b))},"Fraction, Fraction":function(m,b){return new s(m.compare(b))},"Complex, Complex":function(){throw new TypeError("No ordering relation is defined for complex numbers")}},p,h({SS:c,DS:l,Ss:f}))}),Fle=G(Fv,["typed","config"],t=>{var{typed:e,config:r}=t;return e(Fv,{"number, number":function(i,a){return Ri(i,a,r.epsilon)?0:i>a?1:-1}})}),Ple=function t(e,r){var n=/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,i=/(^[ ]*|[ ]*$)/g,a=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,s=/^0x[0-9a-f]+$/i,o=/^0/,u=function(x){return t.insensitive&&(""+x).toLowerCase()||""+x},l=u(e).replace(i,"")||"",c=u(r).replace(i,"")||"",f=l.replace(n,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),h=c.replace(n,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),p=parseInt(l.match(s),16)||f.length!==1&&l.match(a)&&Date.parse(l),g=parseInt(c.match(s),16)||p&&c.match(a)&&Date.parse(c)||null,m,b;if(g){if(pg)return 1}for(var y=0,S=Math.max(f.length,h.length);yb)return 1}return 0};const Ll=Vu(Ple);var BE="compareNatural",Rle=["typed","compare"],Ile=G(BE,Rle,t=>{var{typed:e,compare:r}=t,n=r.signatures["boolean,boolean"];return e(BE,{"any, any":i});function i(u,l){var c=xr(u),f=xr(l),h;if((c==="number"||c==="BigNumber"||c==="Fraction")&&(f==="number"||f==="BigNumber"||f==="Fraction"))return h=r(u,l),h.toString()!=="0"?h>0?1:-1:Ll(c,f);var p=["Array","DenseMatrix","SparseMatrix"];if(p.includes(c)||p.includes(f))return h=a(i,u,l),h!==0?h:Ll(c,f);if(c!==f)return Ll(c,f);if(c==="Complex")return Ble(u,l);if(c==="Unit")return u.equalBase(l)?i(u.value,l.value):s(i,u.formatUnits(),l.formatUnits());if(c==="boolean")return n(u,l);if(c==="string")return Ll(u,l);if(c==="Object")return o(i,u,l);if(c==="null"||c==="undefined")return 0;throw new TypeError('Unsupported type of value "'+c+'"')}function a(u,l,c){return Fu(l)&&Fu(c)?s(u,l.toJSON().values,c.toJSON().values):Fu(l)?a(u,l.toArray(),c):Fu(c)?a(u,l,c.toArray()):yv(l)?a(u,l.toJSON().data,c):yv(c)?a(u,l,c.toJSON().data):Array.isArray(l)?Array.isArray(c)?s(u,l,c):a(u,l,[c]):a(u,[l],c)}function s(u,l,c){for(var f=0,h=Math.min(l.length,c.length);fc.length?1:l.lengthe.re?1:t.ree.im?1:t.im{var{typed:e,matrix:r,concat:n}=t,i=_r({typed:e,matrix:r,concat:n});return e(kE,Kb,i({elop:Kb,Ds:!0}))}),Pv="equal",$le=["typed","matrix","equalScalar","DenseMatrix","concat"],zle=G(Pv,$le,t=>{var{typed:e,matrix:r,equalScalar:n,DenseMatrix:i,concat:a}=t,s=si({typed:e}),o=as({typed:e,DenseMatrix:i}),u=gn({typed:e,DenseMatrix:i}),l=_r({typed:e,matrix:r,concat:a});return e(Pv,qle({typed:e,equalScalar:n}),l({elop:n,SS:o,DS:s,Ss:u}))}),qle=G(Pv,["typed","equalScalar"],t=>{var{typed:e,equalScalar:r}=t;return e(Pv,{"any, any":function(i,a){return i===null?a===null:a===null?i===null:i===void 0?a===void 0:a===void 0?i===void 0:r(i,a)}})}),LE="equalText",Ule=["typed","compareText","isZero"],Hle=G(LE,Ule,t=>{var{typed:e,compareText:r,isZero:n}=t;return e(LE,{"any, any":function(a,s){return n(r(a,s))}})}),Rv="smaller",Wle=["typed","config","matrix","DenseMatrix","concat"],Vle=G(Rv,Wle,t=>{var{typed:e,config:r,matrix:n,DenseMatrix:i,concat:a}=t,s=si({typed:e}),o=as({typed:e,DenseMatrix:i}),u=gn({typed:e,DenseMatrix:i}),l=_r({typed:e,matrix:n,concat:a}),c=Pc({typed:e});return e(Rv,Yle({typed:e,config:r}),{"boolean, boolean":(f,h)=>ff.compare(h)===-1,"Complex, Complex":function(h,p){throw new TypeError("No ordering relation is defined for complex numbers")}},c,l({SS:o,DS:s,Ss:u}))}),Yle=G(Rv,["typed","config"],t=>{var{typed:e,config:r}=t;return e(Rv,{"number, number":function(i,a){return i{var{typed:e,config:r,matrix:n,DenseMatrix:i,concat:a}=t,s=si({typed:e}),o=as({typed:e,DenseMatrix:i}),u=gn({typed:e,DenseMatrix:i}),l=_r({typed:e,matrix:n,concat:a}),c=Pc({typed:e});return e(Iv,Xle({typed:e,config:r}),{"boolean, boolean":(f,h)=>f<=h,"BigNumber, BigNumber":function(h,p){return h.lte(p)||Ja(h,p,r.epsilon)},"Fraction, Fraction":(f,h)=>f.compare(h)!==1,"Complex, Complex":function(){throw new TypeError("No ordering relation is defined for complex numbers")}},c,l({SS:o,DS:s,Ss:u}))}),Xle=G(Iv,["typed","config"],t=>{var{typed:e,config:r}=t;return e(Iv,{"number, number":function(i,a){return i<=a||Ri(i,a,r.epsilon)}})}),Bv="larger",Zle=["typed","config","matrix","DenseMatrix","concat"],Kle=G(Bv,Zle,t=>{var{typed:e,config:r,matrix:n,DenseMatrix:i,concat:a}=t,s=si({typed:e}),o=as({typed:e,DenseMatrix:i}),u=gn({typed:e,DenseMatrix:i}),l=_r({typed:e,matrix:n,concat:a}),c=Pc({typed:e});return e(Bv,Jle({typed:e,config:r}),{"boolean, boolean":(f,h)=>f>h,"BigNumber, BigNumber":function(h,p){return h.gt(p)&&!Ja(h,p,r.epsilon)},"Fraction, Fraction":(f,h)=>f.compare(h)===1,"Complex, Complex":function(){throw new TypeError("No ordering relation is defined for complex numbers")}},c,l({SS:o,DS:s,Ss:u}))}),Jle=G(Bv,["typed","config"],t=>{var{typed:e,config:r}=t;return e(Bv,{"number, number":function(i,a){return i>a&&!Ri(i,a,r.epsilon)}})}),kv="largerEq",Qle=["typed","config","matrix","DenseMatrix","concat"],ece=G(kv,Qle,t=>{var{typed:e,config:r,matrix:n,DenseMatrix:i,concat:a}=t,s=si({typed:e}),o=as({typed:e,DenseMatrix:i}),u=gn({typed:e,DenseMatrix:i}),l=_r({typed:e,matrix:n,concat:a}),c=Pc({typed:e});return e(kv,tce({typed:e,config:r}),{"boolean, boolean":(f,h)=>f>=h,"BigNumber, BigNumber":function(h,p){return h.gte(p)||Ja(h,p,r.epsilon)},"Fraction, Fraction":(f,h)=>f.compare(h)!==-1,"Complex, Complex":function(){throw new TypeError("No ordering relation is defined for complex numbers")}},c,l({SS:o,DS:s,Ss:u}))}),tce=G(kv,["typed","config"],t=>{var{typed:e,config:r}=t;return e(kv,{"number, number":function(i,a){return i>=a||Ri(i,a,r.epsilon)}})}),$E="deepEqual",rce=["typed","equal"],nce=G($E,rce,t=>{var{typed:e,equal:r}=t;return e($E,{"any, any":function(a,s){return n(a.valueOf(),s.valueOf())}});function n(i,a){if(Array.isArray(i))if(Array.isArray(a)){var s=i.length;if(s!==a.length)return!1;for(var o=0;o{var{typed:e,config:r,equalScalar:n,matrix:i,DenseMatrix:a,concat:s}=t,o=si({typed:e}),u=as({typed:e,DenseMatrix:a}),l=gn({typed:e,DenseMatrix:a}),c=_r({typed:e,matrix:i,concat:s});return e(Lv,sce({typed:e,equalScalar:n}),c({elop:f,SS:u,DS:o,Ss:l}));function f(h,p){return!n(h,p)}}),sce=G(Lv,["typed","equalScalar"],t=>{var{typed:e,equalScalar:r}=t;return e(Lv,{"any, any":function(i,a){return i===null?a!==null:a===null?i!==null:i===void 0?a!==void 0:a===void 0?i!==void 0:!r(i,a)}})}),zE="partitionSelect",oce=["typed","isNumeric","isNaN","compare"],uce=G(zE,oce,t=>{var{typed:e,isNumeric:r,isNaN:n,compare:i}=t,a=i,s=(l,c)=>-i(l,c);return e(zE,{"Array | Matrix, number":function(c,f){return o(c,f,a)},"Array | Matrix, number, string":function(c,f,h){if(h==="asc")return o(c,f,a);if(h==="desc")return o(c,f,s);throw new Error('Compare string must be "asc" or "desc"')},"Array | Matrix, number, function":o});function o(l,c,f){if(!ot(c)||c<0)throw new Error("k must be a non-negative integer");if(dt(l)){var h=l.size();if(h.length>1)throw new Error("Only one dimensional matrices supported");return u(l.valueOf(),c,f)}if(Array.isArray(l))return u(l,c,f)}function u(l,c,f){if(c>=l.length)throw new Error("k out of bounds");for(var h=0;h=0){var S=l[b];l[b]=l[m],l[m]=S,--b}else++m;f(l[m],y)>0&&--m,c<=m?g=m:p=m+1}return l[c]}}),qE="sort",lce=["typed","matrix","compare","compareNatural"],cce=G(qE,lce,t=>{var{typed:e,matrix:r,compare:n,compareNatural:i}=t,a=n,s=(c,f)=>-n(c,f);return e(qE,{Array:function(f){return u(f),f.sort(a)},Matrix:function(f){return l(f),r(f.toArray().sort(a),f.storage())},"Array, function":function(f,h){return u(f),f.sort(h)},"Matrix, function":function(f,h){return l(f),r(f.toArray().sort(h),f.storage())},"Array, string":function(f,h){return u(f),f.sort(o(h))},"Matrix, string":function(f,h){return l(f),r(f.toArray().sort(o(h)),f.storage())}});function o(c){if(c==="asc")return a;if(c==="desc")return s;if(c==="natural")return i;throw new Error('String "asc", "desc", or "natural" expected')}function u(c){if(Nt(c).length!==1)throw new Error("One dimensional array expected")}function l(c){if(c.size().length!==1)throw new Error("One dimensional matrix expected")}}),UE="max",fce=["typed","config","numeric","larger"],XI=G(UE,fce,t=>{var{typed:e,config:r,numeric:n,larger:i}=t;return e(UE,{"Array | Matrix":s,"Array | Matrix, number | BigNumber":function(u,l){return $g(u,l.valueOf(),a)},"...":function(u){if(Tc(u))throw new TypeError("Scalar values expected in function max");return s(u)}});function a(o,u){try{return i(o,u)?o:u}catch(l){throw ai(l,"max",u)}}function s(o){var u;if(Gs(o,function(l){try{isNaN(l)&&typeof l=="number"?u=NaN:(u===void 0||i(l,u))&&(u=l)}catch(c){throw ai(c,"max",l)}}),u===void 0)throw new Error("Cannot calculate max of an empty array");return typeof u=="string"&&(u=n(u,r.number)),u}}),HE="min",hce=["typed","config","numeric","smaller"],ZI=G(HE,hce,t=>{var{typed:e,config:r,numeric:n,smaller:i}=t;return e(HE,{"Array | Matrix":s,"Array | Matrix, number | BigNumber":function(u,l){return $g(u,l.valueOf(),a)},"...":function(u){if(Tc(u))throw new TypeError("Scalar values expected in function min");return s(u)}});function a(o,u){try{return i(o,u)?o:u}catch(l){throw ai(l,"min",u)}}function s(o){var u;if(Gs(o,function(l){try{isNaN(l)&&typeof l=="number"?u=NaN:(u===void 0||i(l,u))&&(u=l)}catch(c){throw ai(c,"min",l)}}),u===void 0)throw new Error("Cannot calculate min of an empty array");return typeof u=="string"&&(u=n(u,r.number)),u}}),dce="ImmutableDenseMatrix",pce=["smaller","DenseMatrix"],mce=G(dce,pce,t=>{var{smaller:e,DenseMatrix:r}=t;function n(i,a){if(!(this instanceof n))throw new SyntaxError("Constructor must be called with the new operator");if(a&&!qn(a))throw new Error("Invalid datatype: "+a);if(dt(i)||sr(i)){var s=new r(i,a);this._data=s._data,this._size=s._size,this._datatype=s._datatype,this._min=null,this._max=null}else if(i&&sr(i.data)&&sr(i.size))this._data=i.data,this._size=i.size,this._datatype=i.datatype,this._min=typeof i.min<"u"?i.min:null,this._max=typeof i.max<"u"?i.max:null;else{if(i)throw new TypeError("Unsupported type of data ("+xr(i)+")");this._data=[],this._size=[0],this._datatype=a,this._min=null,this._max=null}}return n.prototype=new r,n.prototype.type="ImmutableDenseMatrix",n.prototype.isImmutableDenseMatrix=!0,n.prototype.subset=function(i){switch(arguments.length){case 1:{var a=r.prototype.subset.call(this,i);return dt(a)?new n({data:a._data,size:a._size,datatype:a._datatype}):a}case 2:case 3:throw new Error("Cannot invoke set subset on an Immutable Matrix instance");default:throw new SyntaxError("Wrong number of arguments")}},n.prototype.set=function(){throw new Error("Cannot invoke set on an Immutable Matrix instance")},n.prototype.resize=function(){throw new Error("Cannot invoke resize on an Immutable Matrix instance")},n.prototype.reshape=function(){throw new Error("Cannot invoke reshape on an Immutable Matrix instance")},n.prototype.clone=function(){return new n({data:xt(this._data),size:xt(this._size),datatype:this._datatype})},n.prototype.toJSON=function(){return{mathjs:"ImmutableDenseMatrix",data:this._data,size:this._size,datatype:this._datatype}},n.fromJSON=function(i){return new n(i)},n.prototype.swapRows=function(){throw new Error("Cannot invoke swapRows on an Immutable Matrix instance")},n.prototype.min=function(){if(this._min===null){var i=null;this.forEach(function(a){(i===null||e(a,i))&&(i=a)}),this._min=i!==null?i:void 0}return this._min},n.prototype.max=function(){if(this._max===null){var i=null;this.forEach(function(a){(i===null||e(i,a))&&(i=a)}),this._max=i!==null?i:void 0}return this._max},n},{isClass:!0}),vce="Index",gce=["ImmutableDenseMatrix","getMatrixDataType"],yce=G(vce,gce,t=>{var{ImmutableDenseMatrix:e,getMatrixDataType:r}=t;function n(a){if(!(this instanceof n))throw new SyntaxError("Constructor must be called with the new operator");this._dimensions=[],this._sourceSize=[],this._isScalar=!0;for(var s=0,o=arguments.length;s{r&&e.push(n)}),e}var bce="FibonacciHeap",xce=["smaller","larger"],wce=G(bce,xce,t=>{var{smaller:e,larger:r}=t,n=1/Math.log((1+Math.sqrt(5))/2);function i(){if(!(this instanceof i))throw new SyntaxError("Constructor must be called with the new operator");this._minimum=null,this._size=0}i.prototype.type="FibonacciHeap",i.prototype.isFibonacciHeap=!0,i.prototype.insert=function(c,f){var h={key:c,value:f,degree:0};if(this._minimum){var p=this._minimum;h.left=p,h.right=p.right,p.right=h,h.right.left=h,e(c,p.key)&&(this._minimum=h)}else h.left=h,h.right=h,this._minimum=h;return this._size++,h},i.prototype.size=function(){return this._size},i.prototype.clear=function(){this._minimum=null,this._size=0},i.prototype.isEmpty=function(){return this._size===0},i.prototype.extractMinimum=function(){var c=this._minimum;if(c===null)return c;for(var f=this._minimum,h=c.degree,p=c.child;h>0;){var g=p.right;p.left.right=p.right,p.right.left=p.left,p.left=f,p.right=f.right,f.right=p,p.right.left=p,p.parent=null,p=g,h--}return c.left.right=c.right,c.right.left=c.left,c===c.right?f=null:(f=c.right,f=l(f,this._size)),this._size--,this._minimum=f,c},i.prototype.remove=function(c){this._minimum=a(this._minimum,c,-1),this.extractMinimum()};function a(c,f,h){f.key=h;var p=f.parent;return p&&e(f.key,p.key)&&(s(c,f,p),o(c,p)),e(f.key,c.key)&&(c=f),c}function s(c,f,h){f.left.right=f.right,f.right.left=f.left,h.degree--,h.child===f&&(h.child=f.right),h.degree===0&&(h.child=null),f.left=c,f.right=c.right,c.right=f,f.right.left=f,f.parent=null,f.mark=!1}function o(c,f){var h=f.parent;h&&(f.mark?(s(c,f,h),o(h)):f.mark=!0)}var u=function(f,h){f.left.right=f.right,f.right.left=f.left,f.parent=h,h.child?(f.left=h.child,f.right=h.child.right,h.child.right=f,f.right.left=f):(h.child=f,f.right=f,f.left=f),h.degree++,f.mark=!1};function l(c,f){var h=Math.floor(Math.log(f)*n)+1,p=new Array(h),g=0,m=c;if(m)for(g++,m=m.right;m!==c;)g++,m=m.right;for(var b;g>0;){for(var y=m.degree,S=m.right;b=p[y],!!b;){if(r(m.key,b.key)){var x=b;b=m,m=x}u(b,m),p[y]=null,y++}p[y]=m,m=S,g--}c=null;for(var _=0;_{var{addScalar:e,equalScalar:r,FibonacciHeap:n}=t;function i(){if(!(this instanceof i))throw new SyntaxError("Constructor must be called with the new operator");this._values=[],this._heap=new n}return i.prototype.type="Spa",i.prototype.isSpa=!0,i.prototype.set=function(a,s){if(this._values[a])this._values[a].value=s;else{var o=this._heap.insert(a,s);this._values[a]=o}},i.prototype.get=function(a){var s=this._values[a];return s?s.value:0},i.prototype.accumulate=function(a,s){var o=this._values[a];o?o.value=e(o.value,s):(o=this._heap.insert(a,s),this._values[a]=o)},i.prototype.forEach=function(a,s,o){var u=this._heap,l=this._values,c=[],f=u.extractMinimum();for(f&&c.push(f);f&&f.key<=s;)f.key>=a&&(r(f.value,0)||o(f.key,f.value,this)),f=u.extractMinimum(),f&&c.push(f);for(var h=0;h{var{on:e,config:r,addScalar:n,subtractScalar:i,multiplyScalar:a,divideScalar:s,pow:o,abs:u,fix:l,round:c,equal:f,isNumeric:h,format:p,number:g,Complex:m,BigNumber:b,Fraction:y}=t,S=g;function x(J,te){if(!(this instanceof x))throw new Error("Constructor must be called with the new operator");if(!(J==null||h(J)||Hs(J)))throw new TypeError("First parameter in Unit constructor must be number, BigNumber, Fraction, Complex, or undefined");if(this.fixPrefix=!1,this.skipAutomaticSimplification=!0,te===void 0)this.units=[],this.dimensions=K.map(ee=>0);else if(typeof te=="string"){var ye=x.parse(te);this.units=ye.units,this.dimensions=ye.dimensions}else if(Ji(te)&&te.value===null)this.fixPrefix=te.fixPrefix,this.skipAutomaticSimplification=te.skipAutomaticSimplification,this.dimensions=te.dimensions.slice(0),this.units=te.units.map(ee=>dn({},ee));else throw new TypeError("Second parameter in Unit constructor must be a string or valueless Unit");this.value=this._normalize(J)}Object.defineProperty(x,"name",{value:"Unit"}),x.prototype.constructor=x,x.prototype.type="Unit",x.prototype.isUnit=!0;var _,A,w;function C(){for(;w===" "||w===" ";)M()}function E(J){return J>="0"&&J<="9"||J==="."}function N(J){return J>="0"&&J<="9"}function M(){A++,w=_.charAt(A)}function O(J){A=J,w=_.charAt(A)}function F(){var J="",te=A;if(w==="+"?M():w==="-"&&(J+=w,M()),!E(w))return O(te),null;if(w==="."){if(J+=w,M(),!N(w))return O(te),null}else{for(;N(w);)J+=w,M();w==="."&&(J+=w,M())}for(;N(w);)J+=w,M();if(w==="E"||w==="e"){var ye="",ee=A;if(ye+=w,M(),(w==="+"||w==="-")&&(ye+=w,M()),!N(w))return O(ee),J;for(J=J+ye;N(w);)J+=w,M()}return J}function q(){for(var J="";N(w)||x.isValidAlpha(w);)J+=w,M();var te=J.charAt(0);return x.isValidAlpha(te)?J:null}function V(J){return w===J?(M(),J):null}x.parse=function(J,te){if(te=te||{},_=J,A=-1,w="",typeof _!="string")throw new TypeError("Invalid argument in Unit.parse, string expected");var ye=new x;ye.units=[];var ee=1,ue=!1;M(),C();var le=F(),Ee=null;if(le){if(r.number==="BigNumber")Ee=new b(le);else if(r.number==="Fraction")try{Ee=new y(le)}catch{Ee=parseFloat(le)}else Ee=parseFloat(le);C(),V("*")?(ee=1,ue=!0):V("/")&&(ee=-1,ue=!0)}for(var Me=[],P=1;;){for(C();w==="(";)Me.push(ee),P*=ee,ee=1,M(),C();var U=void 0;if(w){var Y=w;if(U=q(),U===null)throw new SyntaxError('Unexpected "'+Y+'" in "'+_+'" at index '+A.toString())}else break;var pe=H(U);if(pe===null)throw new SyntaxError('Unit "'+U+'" not found.');var ge=ee*P;if(C(),V("^")){C();var De=F();if(De===null)throw new SyntaxError('In "'+J+'", "^" must be followed by a floating-point number');ge*=De}ye.units.push({unit:pe.unit,prefix:pe.prefix,power:ge});for(var Re=0;Re1||Math.abs(this.units[0].power-1)>1e-15},x.prototype._normalize=function(J){if(J==null||this.units.length===0)return J;for(var te=J,ye=x._getNumberConverter(xr(J)),ee=0;ee{if(nt(X,J)){var te=X[J],ye=te.prefixes[""];return{unit:te,prefix:ye}}for(var ee in X)if(nt(X,ee)&&vre(J,ee)){var ue=X[ee],le=J.length-ee.length,Ee=J.substring(0,le),Me=nt(ue.prefixes,Ee)?ue.prefixes[Ee]:void 0;if(Me!==void 0)return{unit:ue,prefix:Me}}return null},{hasher:J=>J[0],limit:100});x.isValuelessUnit=function(J){return H(J)!==null},x.prototype.hasBase=function(J){if(typeof J=="string"&&(J=$[J]),!J)return!1;for(var te=0;te1e-12)return!1;return!0},x.prototype.equalBase=function(J){for(var te=0;te1e-12)return!1;return!0},x.prototype.equals=function(J){return this.equalBase(J)&&f(this.value,J.value)},x.prototype.multiply=function(J){for(var te=this.clone(),ye=Ji(J)?J:new x(J),ee=0;ee1e-12&&(nt(xe,Me)?te.push({unit:xe[Me].unit,prefix:xe[Me].prefix,power:J.dimensions[Ee]||0}):le=!0)}te.length1e-12)if(nt(ce.si,ee))te.push({unit:ce.si[ee].unit,prefix:ce.si[ee].prefix,power:J.dimensions[ye]||0});else throw new Error("Cannot express custom unit "+ee+" in SI units")}return J.units=te,J.fixPrefix=!0,J.skipAutomaticSimplification=!0,this.value!==null?(J.value=null,this.to(J)):J},x.prototype.formatUnits=function(){for(var J="",te="",ye=0,ee=0,ue=0;ue0?(ye++,J+=" "+this.units[ue].prefix.name+this.units[ue].unit.name,Math.abs(this.units[ue].power-1)>1e-15&&(J+="^"+this.units[ue].power)):this.units[ue].power<0&&ee++;if(ee>0)for(var le=0;le0?(te+=" "+this.units[le].prefix.name+this.units[le].unit.name,Math.abs(this.units[le].power+1)>1e-15&&(te+="^"+-this.units[le].power)):(te+=" "+this.units[le].prefix.name+this.units[le].unit.name,te+="^"+this.units[le].power));J=J.substr(1),te=te.substr(1),ye>1&&ee>0&&(J="("+J+")"),ee>1&&ye>0&&(te="("+te+")");var Ee=J;return ye>0&&ee>0&&(Ee+=" / "),Ee+=te,Ee},x.prototype.format=function(J){var te=this.skipAutomaticSimplification||this.value===null?this.clone():this.simplify(),ye=!1;typeof te.value<"u"&&te.value!==null&&Hs(te.value)&&(ye=Math.abs(te.value.re)<1e-14);for(var ee in te.units)nt(te.units,ee)&&te.units[ee].unit&&(te.units[ee].unit.name==="VA"&&ye?te.units[ee].unit=X.VAR:te.units[ee].unit.name==="VAR"&&!ye&&(te.units[ee].unit=X.VA));te.units.length===1&&!te.fixPrefix&&Math.abs(te.units[0].power-Math.round(te.units[0].power))<1e-14&&(te.units[0].prefix=te._bestPrefix());var ue=te._denormalize(te.value),le=te.value!==null?p(ue,J||{}):"",Ee=te.formatUnits();return te.value&&Hs(te.value)&&(le="("+le+")"),Ee.length>0&&le.length>0&&(le+=" "),le+=Ee,le},x.prototype._bestPrefix=function(){if(this.units.length!==1)throw new Error("Can only compute the best prefix for single units with integer powers, like kg, s^2, N^-1, and so forth!");if(Math.abs(this.units[0].power-Math.round(this.units[0].power))>=1e-14)throw new Error("Can only compute the best prefix for single units with integer powers, like kg, s^2, N^-1, and so forth!");var J=this.value!==null?u(this.value):0,te=u(this.units[0].unit.value),ye=this.units[0].prefix;if(J===0)return ye;var ee=this.units[0].power,ue=Math.log(J/Math.pow(ye.value*te,ee))/Math.LN10-1.2;if(ue>-2.200001&&ue<1.800001)return ye;ue=Math.abs(ue);var le=this.units[0].unit.prefixes;for(var Ee in le)if(nt(le,Ee)){var Me=le[Ee];if(Me.scientific){var P=Math.abs(Math.log(J/Math.pow(Me.value*te,ee))/Math.LN10-1.2);(P0)},X={meter:{name:"meter",base:$.LENGTH,prefixes:I.LONG,value:1,offset:0},inch:{name:"inch",base:$.LENGTH,prefixes:I.NONE,value:.0254,offset:0},foot:{name:"foot",base:$.LENGTH,prefixes:I.NONE,value:.3048,offset:0},yard:{name:"yard",base:$.LENGTH,prefixes:I.NONE,value:.9144,offset:0},mile:{name:"mile",base:$.LENGTH,prefixes:I.NONE,value:1609.344,offset:0},link:{name:"link",base:$.LENGTH,prefixes:I.NONE,value:.201168,offset:0},rod:{name:"rod",base:$.LENGTH,prefixes:I.NONE,value:5.0292,offset:0},chain:{name:"chain",base:$.LENGTH,prefixes:I.NONE,value:20.1168,offset:0},angstrom:{name:"angstrom",base:$.LENGTH,prefixes:I.NONE,value:1e-10,offset:0},m:{name:"m",base:$.LENGTH,prefixes:I.SHORT,value:1,offset:0},in:{name:"in",base:$.LENGTH,prefixes:I.NONE,value:.0254,offset:0},ft:{name:"ft",base:$.LENGTH,prefixes:I.NONE,value:.3048,offset:0},yd:{name:"yd",base:$.LENGTH,prefixes:I.NONE,value:.9144,offset:0},mi:{name:"mi",base:$.LENGTH,prefixes:I.NONE,value:1609.344,offset:0},li:{name:"li",base:$.LENGTH,prefixes:I.NONE,value:.201168,offset:0},rd:{name:"rd",base:$.LENGTH,prefixes:I.NONE,value:5.02921,offset:0},ch:{name:"ch",base:$.LENGTH,prefixes:I.NONE,value:20.1168,offset:0},mil:{name:"mil",base:$.LENGTH,prefixes:I.NONE,value:254e-7,offset:0},m2:{name:"m2",base:$.SURFACE,prefixes:I.SQUARED,value:1,offset:0},sqin:{name:"sqin",base:$.SURFACE,prefixes:I.NONE,value:64516e-8,offset:0},sqft:{name:"sqft",base:$.SURFACE,prefixes:I.NONE,value:.09290304,offset:0},sqyd:{name:"sqyd",base:$.SURFACE,prefixes:I.NONE,value:.83612736,offset:0},sqmi:{name:"sqmi",base:$.SURFACE,prefixes:I.NONE,value:2589988110336e-6,offset:0},sqrd:{name:"sqrd",base:$.SURFACE,prefixes:I.NONE,value:25.29295,offset:0},sqch:{name:"sqch",base:$.SURFACE,prefixes:I.NONE,value:404.6873,offset:0},sqmil:{name:"sqmil",base:$.SURFACE,prefixes:I.NONE,value:64516e-14,offset:0},acre:{name:"acre",base:$.SURFACE,prefixes:I.NONE,value:4046.86,offset:0},hectare:{name:"hectare",base:$.SURFACE,prefixes:I.NONE,value:1e4,offset:0},m3:{name:"m3",base:$.VOLUME,prefixes:I.CUBIC,value:1,offset:0},L:{name:"L",base:$.VOLUME,prefixes:I.SHORT,value:.001,offset:0},l:{name:"l",base:$.VOLUME,prefixes:I.SHORT,value:.001,offset:0},litre:{name:"litre",base:$.VOLUME,prefixes:I.LONG,value:.001,offset:0},cuin:{name:"cuin",base:$.VOLUME,prefixes:I.NONE,value:16387064e-12,offset:0},cuft:{name:"cuft",base:$.VOLUME,prefixes:I.NONE,value:.028316846592,offset:0},cuyd:{name:"cuyd",base:$.VOLUME,prefixes:I.NONE,value:.764554857984,offset:0},teaspoon:{name:"teaspoon",base:$.VOLUME,prefixes:I.NONE,value:5e-6,offset:0},tablespoon:{name:"tablespoon",base:$.VOLUME,prefixes:I.NONE,value:15e-6,offset:0},drop:{name:"drop",base:$.VOLUME,prefixes:I.NONE,value:5e-8,offset:0},gtt:{name:"gtt",base:$.VOLUME,prefixes:I.NONE,value:5e-8,offset:0},minim:{name:"minim",base:$.VOLUME,prefixes:I.NONE,value:6161152e-14,offset:0},fluiddram:{name:"fluiddram",base:$.VOLUME,prefixes:I.NONE,value:36966911e-13,offset:0},fluidounce:{name:"fluidounce",base:$.VOLUME,prefixes:I.NONE,value:2957353e-11,offset:0},gill:{name:"gill",base:$.VOLUME,prefixes:I.NONE,value:.0001182941,offset:0},cc:{name:"cc",base:$.VOLUME,prefixes:I.NONE,value:1e-6,offset:0},cup:{name:"cup",base:$.VOLUME,prefixes:I.NONE,value:.0002365882,offset:0},pint:{name:"pint",base:$.VOLUME,prefixes:I.NONE,value:.0004731765,offset:0},quart:{name:"quart",base:$.VOLUME,prefixes:I.NONE,value:.0009463529,offset:0},gallon:{name:"gallon",base:$.VOLUME,prefixes:I.NONE,value:.003785412,offset:0},beerbarrel:{name:"beerbarrel",base:$.VOLUME,prefixes:I.NONE,value:.1173478,offset:0},oilbarrel:{name:"oilbarrel",base:$.VOLUME,prefixes:I.NONE,value:.1589873,offset:0},hogshead:{name:"hogshead",base:$.VOLUME,prefixes:I.NONE,value:.238481,offset:0},fldr:{name:"fldr",base:$.VOLUME,prefixes:I.NONE,value:36966911e-13,offset:0},floz:{name:"floz",base:$.VOLUME,prefixes:I.NONE,value:2957353e-11,offset:0},gi:{name:"gi",base:$.VOLUME,prefixes:I.NONE,value:.0001182941,offset:0},cp:{name:"cp",base:$.VOLUME,prefixes:I.NONE,value:.0002365882,offset:0},pt:{name:"pt",base:$.VOLUME,prefixes:I.NONE,value:.0004731765,offset:0},qt:{name:"qt",base:$.VOLUME,prefixes:I.NONE,value:.0009463529,offset:0},gal:{name:"gal",base:$.VOLUME,prefixes:I.NONE,value:.003785412,offset:0},bbl:{name:"bbl",base:$.VOLUME,prefixes:I.NONE,value:.1173478,offset:0},obl:{name:"obl",base:$.VOLUME,prefixes:I.NONE,value:.1589873,offset:0},g:{name:"g",base:$.MASS,prefixes:I.SHORT,value:.001,offset:0},gram:{name:"gram",base:$.MASS,prefixes:I.LONG,value:.001,offset:0},ton:{name:"ton",base:$.MASS,prefixes:I.SHORT,value:907.18474,offset:0},t:{name:"t",base:$.MASS,prefixes:I.SHORT,value:1e3,offset:0},tonne:{name:"tonne",base:$.MASS,prefixes:I.LONG,value:1e3,offset:0},grain:{name:"grain",base:$.MASS,prefixes:I.NONE,value:6479891e-11,offset:0},dram:{name:"dram",base:$.MASS,prefixes:I.NONE,value:.0017718451953125,offset:0},ounce:{name:"ounce",base:$.MASS,prefixes:I.NONE,value:.028349523125,offset:0},poundmass:{name:"poundmass",base:$.MASS,prefixes:I.NONE,value:.45359237,offset:0},hundredweight:{name:"hundredweight",base:$.MASS,prefixes:I.NONE,value:45.359237,offset:0},stick:{name:"stick",base:$.MASS,prefixes:I.NONE,value:.115,offset:0},stone:{name:"stone",base:$.MASS,prefixes:I.NONE,value:6.35029318,offset:0},gr:{name:"gr",base:$.MASS,prefixes:I.NONE,value:6479891e-11,offset:0},dr:{name:"dr",base:$.MASS,prefixes:I.NONE,value:.0017718451953125,offset:0},oz:{name:"oz",base:$.MASS,prefixes:I.NONE,value:.028349523125,offset:0},lbm:{name:"lbm",base:$.MASS,prefixes:I.NONE,value:.45359237,offset:0},cwt:{name:"cwt",base:$.MASS,prefixes:I.NONE,value:45.359237,offset:0},s:{name:"s",base:$.TIME,prefixes:I.SHORT,value:1,offset:0},min:{name:"min",base:$.TIME,prefixes:I.NONE,value:60,offset:0},h:{name:"h",base:$.TIME,prefixes:I.NONE,value:3600,offset:0},second:{name:"second",base:$.TIME,prefixes:I.LONG,value:1,offset:0},sec:{name:"sec",base:$.TIME,prefixes:I.LONG,value:1,offset:0},minute:{name:"minute",base:$.TIME,prefixes:I.NONE,value:60,offset:0},hour:{name:"hour",base:$.TIME,prefixes:I.NONE,value:3600,offset:0},day:{name:"day",base:$.TIME,prefixes:I.NONE,value:86400,offset:0},week:{name:"week",base:$.TIME,prefixes:I.NONE,value:7*86400,offset:0},month:{name:"month",base:$.TIME,prefixes:I.NONE,value:2629800,offset:0},year:{name:"year",base:$.TIME,prefixes:I.NONE,value:31557600,offset:0},decade:{name:"decade",base:$.TIME,prefixes:I.NONE,value:315576e3,offset:0},century:{name:"century",base:$.TIME,prefixes:I.NONE,value:315576e4,offset:0},millennium:{name:"millennium",base:$.TIME,prefixes:I.NONE,value:315576e5,offset:0},hertz:{name:"Hertz",base:$.FREQUENCY,prefixes:I.LONG,value:1,offset:0,reciprocal:!0},Hz:{name:"Hz",base:$.FREQUENCY,prefixes:I.SHORT,value:1,offset:0,reciprocal:!0},rad:{name:"rad",base:$.ANGLE,prefixes:I.SHORT,value:1,offset:0},radian:{name:"radian",base:$.ANGLE,prefixes:I.LONG,value:1,offset:0},deg:{name:"deg",base:$.ANGLE,prefixes:I.SHORT,value:null,offset:0},degree:{name:"degree",base:$.ANGLE,prefixes:I.LONG,value:null,offset:0},grad:{name:"grad",base:$.ANGLE,prefixes:I.SHORT,value:null,offset:0},gradian:{name:"gradian",base:$.ANGLE,prefixes:I.LONG,value:null,offset:0},cycle:{name:"cycle",base:$.ANGLE,prefixes:I.NONE,value:null,offset:0},arcsec:{name:"arcsec",base:$.ANGLE,prefixes:I.NONE,value:null,offset:0},arcmin:{name:"arcmin",base:$.ANGLE,prefixes:I.NONE,value:null,offset:0},A:{name:"A",base:$.CURRENT,prefixes:I.SHORT,value:1,offset:0},ampere:{name:"ampere",base:$.CURRENT,prefixes:I.LONG,value:1,offset:0},K:{name:"K",base:$.TEMPERATURE,prefixes:I.SHORT,value:1,offset:0},degC:{name:"degC",base:$.TEMPERATURE,prefixes:I.SHORT,value:1,offset:273.15},degF:{name:"degF",base:$.TEMPERATURE,prefixes:I.SHORT,value:new y(5,9),offset:459.67},degR:{name:"degR",base:$.TEMPERATURE,prefixes:I.SHORT,value:new y(5,9),offset:0},kelvin:{name:"kelvin",base:$.TEMPERATURE,prefixes:I.LONG,value:1,offset:0},celsius:{name:"celsius",base:$.TEMPERATURE,prefixes:I.LONG,value:1,offset:273.15},fahrenheit:{name:"fahrenheit",base:$.TEMPERATURE,prefixes:I.LONG,value:new y(5,9),offset:459.67},rankine:{name:"rankine",base:$.TEMPERATURE,prefixes:I.LONG,value:new y(5,9),offset:0},mol:{name:"mol",base:$.AMOUNT_OF_SUBSTANCE,prefixes:I.SHORT,value:1,offset:0},mole:{name:"mole",base:$.AMOUNT_OF_SUBSTANCE,prefixes:I.LONG,value:1,offset:0},cd:{name:"cd",base:$.LUMINOUS_INTENSITY,prefixes:I.SHORT,value:1,offset:0},candela:{name:"candela",base:$.LUMINOUS_INTENSITY,prefixes:I.LONG,value:1,offset:0},N:{name:"N",base:$.FORCE,prefixes:I.SHORT,value:1,offset:0},newton:{name:"newton",base:$.FORCE,prefixes:I.LONG,value:1,offset:0},dyn:{name:"dyn",base:$.FORCE,prefixes:I.SHORT,value:1e-5,offset:0},dyne:{name:"dyne",base:$.FORCE,prefixes:I.LONG,value:1e-5,offset:0},lbf:{name:"lbf",base:$.FORCE,prefixes:I.NONE,value:4.4482216152605,offset:0},poundforce:{name:"poundforce",base:$.FORCE,prefixes:I.NONE,value:4.4482216152605,offset:0},kip:{name:"kip",base:$.FORCE,prefixes:I.LONG,value:4448.2216,offset:0},kilogramforce:{name:"kilogramforce",base:$.FORCE,prefixes:I.NONE,value:9.80665,offset:0},J:{name:"J",base:$.ENERGY,prefixes:I.SHORT,value:1,offset:0},joule:{name:"joule",base:$.ENERGY,prefixes:I.LONG,value:1,offset:0},erg:{name:"erg",base:$.ENERGY,prefixes:I.SHORTLONG,value:1e-7,offset:0},Wh:{name:"Wh",base:$.ENERGY,prefixes:I.SHORT,value:3600,offset:0},BTU:{name:"BTU",base:$.ENERGY,prefixes:I.BTU,value:1055.05585262,offset:0},eV:{name:"eV",base:$.ENERGY,prefixes:I.SHORT,value:1602176565e-28,offset:0},electronvolt:{name:"electronvolt",base:$.ENERGY,prefixes:I.LONG,value:1602176565e-28,offset:0},W:{name:"W",base:$.POWER,prefixes:I.SHORT,value:1,offset:0},watt:{name:"watt",base:$.POWER,prefixes:I.LONG,value:1,offset:0},hp:{name:"hp",base:$.POWER,prefixes:I.NONE,value:745.6998715386,offset:0},VAR:{name:"VAR",base:$.POWER,prefixes:I.SHORT,value:m.I,offset:0},VA:{name:"VA",base:$.POWER,prefixes:I.SHORT,value:1,offset:0},Pa:{name:"Pa",base:$.PRESSURE,prefixes:I.SHORT,value:1,offset:0},psi:{name:"psi",base:$.PRESSURE,prefixes:I.NONE,value:6894.75729276459,offset:0},atm:{name:"atm",base:$.PRESSURE,prefixes:I.NONE,value:101325,offset:0},bar:{name:"bar",base:$.PRESSURE,prefixes:I.SHORTLONG,value:1e5,offset:0},torr:{name:"torr",base:$.PRESSURE,prefixes:I.NONE,value:133.322,offset:0},mmHg:{name:"mmHg",base:$.PRESSURE,prefixes:I.NONE,value:133.322,offset:0},mmH2O:{name:"mmH2O",base:$.PRESSURE,prefixes:I.NONE,value:9.80665,offset:0},cmH2O:{name:"cmH2O",base:$.PRESSURE,prefixes:I.NONE,value:98.0665,offset:0},coulomb:{name:"coulomb",base:$.ELECTRIC_CHARGE,prefixes:I.LONG,value:1,offset:0},C:{name:"C",base:$.ELECTRIC_CHARGE,prefixes:I.SHORT,value:1,offset:0},farad:{name:"farad",base:$.ELECTRIC_CAPACITANCE,prefixes:I.LONG,value:1,offset:0},F:{name:"F",base:$.ELECTRIC_CAPACITANCE,prefixes:I.SHORT,value:1,offset:0},volt:{name:"volt",base:$.ELECTRIC_POTENTIAL,prefixes:I.LONG,value:1,offset:0},V:{name:"V",base:$.ELECTRIC_POTENTIAL,prefixes:I.SHORT,value:1,offset:0},ohm:{name:"ohm",base:$.ELECTRIC_RESISTANCE,prefixes:I.SHORTLONG,value:1,offset:0},henry:{name:"henry",base:$.ELECTRIC_INDUCTANCE,prefixes:I.LONG,value:1,offset:0},H:{name:"H",base:$.ELECTRIC_INDUCTANCE,prefixes:I.SHORT,value:1,offset:0},siemens:{name:"siemens",base:$.ELECTRIC_CONDUCTANCE,prefixes:I.LONG,value:1,offset:0},S:{name:"S",base:$.ELECTRIC_CONDUCTANCE,prefixes:I.SHORT,value:1,offset:0},weber:{name:"weber",base:$.MAGNETIC_FLUX,prefixes:I.LONG,value:1,offset:0},Wb:{name:"Wb",base:$.MAGNETIC_FLUX,prefixes:I.SHORT,value:1,offset:0},tesla:{name:"tesla",base:$.MAGNETIC_FLUX_DENSITY,prefixes:I.LONG,value:1,offset:0},T:{name:"T",base:$.MAGNETIC_FLUX_DENSITY,prefixes:I.SHORT,value:1,offset:0},b:{name:"b",base:$.BIT,prefixes:I.BINARY_SHORT,value:1,offset:0},bits:{name:"bits",base:$.BIT,prefixes:I.BINARY_LONG,value:1,offset:0},B:{name:"B",base:$.BIT,prefixes:I.BINARY_SHORT,value:8,offset:0},bytes:{name:"bytes",base:$.BIT,prefixes:I.BINARY_LONG,value:8,offset:0}},de={meters:"meter",inches:"inch",feet:"foot",yards:"yard",miles:"mile",links:"link",rods:"rod",chains:"chain",angstroms:"angstrom",lt:"l",litres:"litre",liter:"litre",liters:"litre",teaspoons:"teaspoon",tablespoons:"tablespoon",minims:"minim",fluiddrams:"fluiddram",fluidounces:"fluidounce",gills:"gill",cups:"cup",pints:"pint",quarts:"quart",gallons:"gallon",beerbarrels:"beerbarrel",oilbarrels:"oilbarrel",hogsheads:"hogshead",gtts:"gtt",grams:"gram",tons:"ton",tonnes:"tonne",grains:"grain",drams:"dram",ounces:"ounce",poundmasses:"poundmass",hundredweights:"hundredweight",sticks:"stick",lb:"lbm",lbs:"lbm",kips:"kip",kgf:"kilogramforce",acres:"acre",hectares:"hectare",sqfeet:"sqft",sqyard:"sqyd",sqmile:"sqmi",sqmiles:"sqmi",mmhg:"mmHg",mmh2o:"mmH2O",cmh2o:"cmH2O",seconds:"second",secs:"second",minutes:"minute",mins:"minute",hours:"hour",hr:"hour",hrs:"hour",days:"day",weeks:"week",months:"month",years:"year",decades:"decade",centuries:"century",millennia:"millennium",hertz:"hertz",radians:"radian",degrees:"degree",gradians:"gradian",cycles:"cycle",arcsecond:"arcsec",arcseconds:"arcsec",arcminute:"arcmin",arcminutes:"arcmin",BTUs:"BTU",watts:"watt",joules:"joule",amperes:"ampere",amps:"ampere",amp:"ampere",coulombs:"coulomb",volts:"volt",ohms:"ohm",farads:"farad",webers:"weber",teslas:"tesla",electronvolts:"electronvolt",moles:"mole",bit:"bits",byte:"bytes"};function Se(J){if(J.number==="BigNumber"){var te=pw(b);X.rad.value=new b(1),X.deg.value=te.div(180),X.grad.value=te.div(200),X.cycle.value=te.times(2),X.arcsec.value=te.div(648e3),X.arcmin.value=te.div(10800)}else X.rad.value=1,X.deg.value=Math.PI/180,X.grad.value=Math.PI/200,X.cycle.value=Math.PI*2,X.arcsec.value=Math.PI/648e3,X.arcmin.value=Math.PI/10800;X.radian.value=X.rad.value,X.degree.value=X.deg.value,X.gradian.value=X.grad.value}Se(r),e&&e("config",function(J,te){J.number!==te.number&&Se(J)});var ce={si:{NONE:{unit:ne,prefix:I.NONE[""]},LENGTH:{unit:X.m,prefix:I.SHORT[""]},MASS:{unit:X.g,prefix:I.SHORT.k},TIME:{unit:X.s,prefix:I.SHORT[""]},CURRENT:{unit:X.A,prefix:I.SHORT[""]},TEMPERATURE:{unit:X.K,prefix:I.SHORT[""]},LUMINOUS_INTENSITY:{unit:X.cd,prefix:I.SHORT[""]},AMOUNT_OF_SUBSTANCE:{unit:X.mol,prefix:I.SHORT[""]},ANGLE:{unit:X.rad,prefix:I.SHORT[""]},BIT:{unit:X.bits,prefix:I.SHORT[""]},FORCE:{unit:X.N,prefix:I.SHORT[""]},ENERGY:{unit:X.J,prefix:I.SHORT[""]},POWER:{unit:X.W,prefix:I.SHORT[""]},PRESSURE:{unit:X.Pa,prefix:I.SHORT[""]},ELECTRIC_CHARGE:{unit:X.C,prefix:I.SHORT[""]},ELECTRIC_CAPACITANCE:{unit:X.F,prefix:I.SHORT[""]},ELECTRIC_POTENTIAL:{unit:X.V,prefix:I.SHORT[""]},ELECTRIC_RESISTANCE:{unit:X.ohm,prefix:I.SHORT[""]},ELECTRIC_INDUCTANCE:{unit:X.H,prefix:I.SHORT[""]},ELECTRIC_CONDUCTANCE:{unit:X.S,prefix:I.SHORT[""]},MAGNETIC_FLUX:{unit:X.Wb,prefix:I.SHORT[""]},MAGNETIC_FLUX_DENSITY:{unit:X.T,prefix:I.SHORT[""]},FREQUENCY:{unit:X.Hz,prefix:I.SHORT[""]}}};ce.cgs=JSON.parse(JSON.stringify(ce.si)),ce.cgs.LENGTH={unit:X.m,prefix:I.SHORT.c},ce.cgs.MASS={unit:X.g,prefix:I.SHORT[""]},ce.cgs.FORCE={unit:X.dyn,prefix:I.SHORT[""]},ce.cgs.ENERGY={unit:X.erg,prefix:I.NONE[""]},ce.us=JSON.parse(JSON.stringify(ce.si)),ce.us.LENGTH={unit:X.ft,prefix:I.NONE[""]},ce.us.MASS={unit:X.lbm,prefix:I.NONE[""]},ce.us.TEMPERATURE={unit:X.degF,prefix:I.NONE[""]},ce.us.FORCE={unit:X.lbf,prefix:I.NONE[""]},ce.us.ENERGY={unit:X.BTU,prefix:I.BTU[""]},ce.us.POWER={unit:X.hp,prefix:I.NONE[""]},ce.us.PRESSURE={unit:X.psi,prefix:I.NONE[""]},ce.auto=JSON.parse(JSON.stringify(ce.si));var xe=ce.auto;x.setUnitSystem=function(J){if(nt(ce,J))xe=ce[J];else throw new Error("Unit system "+J+" does not exist. Choices are: "+Object.keys(ce).join(", "))},x.getUnitSystem=function(){for(var J in ce)if(nt(ce,J)&&ce[J]===xe)return J},x.typeConverters={BigNumber:function(te){return te!=null&&te.isFraction?new b(te.n).div(te.d).times(te.s):new b(te+"")},Fraction:function(te){return new y(te)},Complex:function(te){return te},number:function(te){return te!=null&&te.isFraction?g(te):te}},x.prototype._numberConverter=function(){var J=x.typeConverters[this.valueType()];if(J)return J;throw new TypeError('Unsupported Unit value type "'+this.valueType()+'"')},x._getNumberConverter=function(J){if(!x.typeConverters[J])throw new TypeError('Unsupported type "'+J+'"');return x.typeConverters[J]};for(var _e in X)if(nt(X,_e)){var me=X[_e];me.dimensions=me.base.dimensions}for(var we in de)if(nt(de,we)){var Ne=X[de[we]],Ce={};for(var He in Ne)nt(Ne,He)&&(Ce[He]=Ne[He]);Ce.name=we,X[we]=Ce}x.isValidAlpha=function(te){return/^[a-zA-Z]$/.test(te)};function Ue(J){for(var te=0;te0&&!(x.isValidAlpha(w)||N(w)))throw new Error('Invalid unit name (only alphanumeric characters are allowed): "'+J+'"')}}return x.createUnit=function(J,te){if(typeof J!="object")throw new TypeError("createUnit expects first parameter to be of type 'Object'");if(te&&te.override){for(var ye in J)if(nt(J,ye)&&x.deleteUnit(ye),J[ye].aliases)for(var ee=0;ee"u"||te===null)&&(te={}),typeof J!="string")throw new TypeError("createUnitSingle expects first parameter to be of type 'string'");if(nt(X,J))throw new Error('Cannot create unit "'+J+'": a unit with that name already exists');Ue(J);var ye=null,ee=[],ue=0,le,Ee,Me;if(te&&te.type==="Unit")ye=te.clone();else if(typeof te=="string")te!==""&&(le=te);else if(typeof te=="object")le=te.definition,Ee=te.prefixes,ue=te.offset,Me=te.baseName,te.aliases&&(ee=te.aliases.valueOf());else throw new TypeError('Cannot create unit "'+J+'" from "'+te.toString()+'": expecting "string" or "Unit" or "Object"');if(ee){for(var P=0;P1e-12){Ie=!1;break}if(Ie){De=!0,U.base=$[Re];break}}if(!De){Me=Me||J+"_STUFF";var ze={dimensions:ye.dimensions.slice(0)};ze.key=Me,$[Me]=ze,xe[Me]={unit:U,prefix:I.NONE[""]},U.base=$[Me]}}else{if(Me=Me||J+"_STUFF",K.indexOf(Me)>=0)throw new Error('Cannot create new base unit "'+J+'": a base unit with that name already exists (and cannot be overridden)');K.push(Me);for(var Y in $)nt($,Y)&&($[Y].dimensions[K.length-1]=0);for(var pe={dimensions:[]},ge=0;ge{var{typed:e,Unit:r}=t;return e(YE,{Unit:function(i){return i.clone()},string:function(i){return r.isValuelessUnit(i)?new r(null,i):r.parse(i,{allowNoUnits:!0})},"number | BigNumber | Fraction | Complex, string | Unit":function(i,a){return new r(i,a)},"number | BigNumber | Fraction":function(i){return new r(i)},"Array | Matrix":e.referToSelf(n=>i=>Bt(i,n))})}),jE="sparse",Pce=["typed","SparseMatrix"],Rce=G(jE,Pce,t=>{var{typed:e,SparseMatrix:r}=t;return e(jE,{"":function(){return new r([])},string:function(i){return new r([],i)},"Array | Matrix":function(i){return new r(i)},"Array | Matrix, string":function(i,a){return new r(i,a)}})}),GE="createUnit",Ice=["typed","Unit"],Bce=G(GE,Ice,t=>{var{typed:e,Unit:r}=t;return e(GE,{"Object, Object":function(i,a){return r.createUnit(i,a)},Object:function(i){return r.createUnit(i,{})},"string, Unit | string | Object, Object":function(i,a,s){var o={};return o[i]=a,r.createUnit(o,s)},"string, Unit | string | Object":function(i,a){var s={};return s[i]=a,r.createUnit(s,{})},string:function(i){var a={};return a[i]={},r.createUnit(a,{})}})}),XE="acos",kce=["typed","config","Complex"],Lce=G(XE,kce,t=>{var{typed:e,config:r,Complex:n}=t;return e(XE,{number:function(a){return a>=-1&&a<=1||r.predictable?Math.acos(a):new n(a,0).acos()},Complex:function(a){return a.acos()},BigNumber:function(a){return a.acos()}})}),ZE="acosh",$ce=["typed","config","Complex"],zce=G(ZE,$ce,t=>{var{typed:e,config:r,Complex:n}=t;return e(ZE,{number:function(a){return a>=1||r.predictable?hI(a):a<=-1?new n(Math.log(Math.sqrt(a*a-1)-a),Math.PI):new n(a,0).acosh()},Complex:function(a){return a.acosh()},BigNumber:function(a){return a.acosh()}})}),KE="acot",qce=["typed","BigNumber"],Uce=G(KE,qce,t=>{var{typed:e,BigNumber:r}=t;return e(KE,{number:dI,Complex:function(i){return i.acot()},BigNumber:function(i){return new r(1).div(i).atan()}})}),JE="acoth",Hce=["typed","config","Complex","BigNumber"],Wce=G(JE,Hce,t=>{var{typed:e,config:r,Complex:n,BigNumber:i}=t;return e(JE,{number:function(s){return s>=1||s<=-1||r.predictable?pI(s):new n(s,0).acoth()},Complex:function(s){return s.acoth()},BigNumber:function(s){return new i(1).div(s).atanh()}})}),QE="acsc",Vce=["typed","config","Complex","BigNumber"],Yce=G(QE,Vce,t=>{var{typed:e,config:r,Complex:n,BigNumber:i}=t;return e(QE,{number:function(s){return s<=-1||s>=1||r.predictable?mI(s):new n(s,0).acsc()},Complex:function(s){return s.acsc()},BigNumber:function(s){return new i(1).div(s).asin()}})}),eC="acsch",jce=["typed","BigNumber"],Gce=G(eC,jce,t=>{var{typed:e,BigNumber:r}=t;return e(eC,{number:vI,Complex:function(i){return i.acsch()},BigNumber:function(i){return new r(1).div(i).asinh()}})}),tC="asec",Xce=["typed","config","Complex","BigNumber"],Zce=G(tC,Xce,t=>{var{typed:e,config:r,Complex:n,BigNumber:i}=t;return e(tC,{number:function(s){return s<=-1||s>=1||r.predictable?gI(s):new n(s,0).asec()},Complex:function(s){return s.asec()},BigNumber:function(s){return new i(1).div(s).acos()}})}),rC="asech",Kce=["typed","config","Complex","BigNumber"],Jce=G(rC,Kce,t=>{var{typed:e,config:r,Complex:n,BigNumber:i}=t;return e(rC,{number:function(s){if(s<=1&&s>=-1||r.predictable){var o=1/s;if(o>0||r.predictable)return yI(s);var u=Math.sqrt(o*o-1);return new n(Math.log(u-o),Math.PI)}return new n(s,0).asech()},Complex:function(s){return s.asech()},BigNumber:function(s){return new i(1).div(s).acosh()}})}),nC="asin",Qce=["typed","config","Complex"],efe=G(nC,Qce,t=>{var{typed:e,config:r,Complex:n}=t;return e(nC,{number:function(a){return a>=-1&&a<=1||r.predictable?Math.asin(a):new n(a,0).asin()},Complex:function(a){return a.asin()},BigNumber:function(a){return a.asin()}})}),tfe="asinh",rfe=["typed"],nfe=G(tfe,rfe,t=>{var{typed:e}=t;return e("asinh",{number:bI,Complex:function(n){return n.asinh()},BigNumber:function(n){return n.asinh()}})}),ife="atan",afe=["typed"],sfe=G(ife,afe,t=>{var{typed:e}=t;return e("atan",{number:function(n){return Math.atan(n)},Complex:function(n){return n.atan()},BigNumber:function(n){return n.atan()}})}),iC="atan2",ofe=["typed","matrix","equalScalar","BigNumber","DenseMatrix","concat"],ufe=G(iC,ofe,t=>{var{typed:e,matrix:r,equalScalar:n,BigNumber:i,DenseMatrix:a,concat:s}=t,o=Ia({typed:e,equalScalar:n}),u=si({typed:e}),l=RI({typed:e,equalScalar:n}),c=Rn({typed:e,equalScalar:n}),f=gn({typed:e,DenseMatrix:a}),h=_r({typed:e,matrix:r,concat:s});return e(iC,{"number, number":Math.atan2,"BigNumber, BigNumber":(p,g)=>i.atan2(p,g)},h({scalar:"number | BigNumber",SS:l,DS:u,SD:o,Ss:c,sS:f}))}),aC="atanh",lfe=["typed","config","Complex"],cfe=G(aC,lfe,t=>{var{typed:e,config:r,Complex:n}=t;return e(aC,{number:function(a){return a<=1&&a>=-1||r.predictable?xI(a):new n(a,0).atanh()},Complex:function(a){return a.atanh()},BigNumber:function(a){return a.atanh()}})}),Ic=G("trigUnit",["typed"],t=>{var{typed:e}=t;return{Unit:e.referToSelf(r=>n=>{if(!n.hasBase(n.constructor.BASE_UNITS.ANGLE))throw new TypeError("Unit in function cot is no angle");return e.find(r,n.valueType())(n.value)})}}),sC="cos",ffe=["typed"],hfe=G(sC,ffe,t=>{var{typed:e}=t,r=Ic({typed:e});return e(sC,{number:Math.cos,"Complex | BigNumber":n=>n.cos()},r)}),oC="cosh",dfe=["typed"],pfe=G(oC,dfe,t=>{var{typed:e}=t;return e(oC,{number:lre,"Complex | BigNumber":r=>r.cosh()})}),uC="cot",mfe=["typed","BigNumber"],vfe=G(uC,mfe,t=>{var{typed:e,BigNumber:r}=t,n=Ic({typed:e});return e(uC,{number:wI,Complex:i=>i.cot(),BigNumber:i=>new r(1).div(i.tan())},n)}),lC="coth",gfe=["typed","BigNumber"],yfe=G(lC,gfe,t=>{var{typed:e,BigNumber:r}=t;return e(lC,{number:SI,Complex:n=>n.coth(),BigNumber:n=>new r(1).div(n.tanh())})}),cC="csc",bfe=["typed","BigNumber"],xfe=G(cC,bfe,t=>{var{typed:e,BigNumber:r}=t,n=Ic({typed:e});return e(cC,{number:_I,Complex:i=>i.csc(),BigNumber:i=>new r(1).div(i.sin())},n)}),fC="csch",wfe=["typed","BigNumber"],Sfe=G(fC,wfe,t=>{var{typed:e,BigNumber:r}=t;return e(fC,{number:AI,Complex:n=>n.csch(),BigNumber:n=>new r(1).div(n.sinh())})}),hC="sec",_fe=["typed","BigNumber"],Afe=G(hC,_fe,t=>{var{typed:e,BigNumber:r}=t,n=Ic({typed:e});return e(hC,{number:DI,Complex:i=>i.sec(),BigNumber:i=>new r(1).div(i.cos())},n)}),dC="sech",Dfe=["typed","BigNumber"],Nfe=G(dC,Dfe,t=>{var{typed:e,BigNumber:r}=t;return e(dC,{number:NI,Complex:n=>n.sech(),BigNumber:n=>new r(1).div(n.cosh())})}),pC="sin",Efe=["typed"],Cfe=G(pC,Efe,t=>{var{typed:e}=t,r=Ic({typed:e});return e(pC,{number:Math.sin,"Complex | BigNumber":n=>n.sin()},r)}),mC="sinh",Mfe=["typed"],Tfe=G(mC,Mfe,t=>{var{typed:e}=t;return e(mC,{number:EI,"Complex | BigNumber":r=>r.sinh()})}),vC="tan",Ofe=["typed"],Ffe=G(vC,Ofe,t=>{var{typed:e}=t,r=Ic({typed:e});return e(vC,{number:Math.tan,"Complex | BigNumber":n=>n.tan()},r)}),Pfe="tanh",Rfe=["typed"],Ife=G(Pfe,Rfe,t=>{var{typed:e}=t;return e("tanh",{number:fre,"Complex | BigNumber":r=>r.tanh()})}),gC="setCartesian",Bfe=["typed","size","subset","compareNatural","Index","DenseMatrix"],kfe=G(gC,Bfe,t=>{var{typed:e,size:r,subset:n,compareNatural:i,Index:a,DenseMatrix:s}=t;return e(gC,{"Array | Matrix, Array | Matrix":function(u,l){var c=[];if(n(r(u),new a(0))!==0&&n(r(l),new a(0))!==0){var f=tr(Array.isArray(u)?u:u.toArray()).sort(i),h=tr(Array.isArray(l)?l:l.toArray()).sort(i);c=[];for(var p=0;p{var{typed:e,size:r,subset:n,compareNatural:i,Index:a,DenseMatrix:s}=t;return e(yC,{"Array | Matrix, Array | Matrix":function(u,l){var c;if(n(r(u),new a(0))===0)c=[];else{if(n(r(l),new a(0))===0)return tr(u.toArray());var f=yc(tr(Array.isArray(u)?u:u.toArray()).sort(i)),h=yc(tr(Array.isArray(l)?l:l.toArray()).sort(i));c=[];for(var p,g=0;g{var{typed:e,size:r,subset:n,compareNatural:i,Index:a,DenseMatrix:s}=t;return e(bC,{"Array | Matrix":function(u){var l;if(n(r(u),new a(0))===0)l=[];else{var c=tr(Array.isArray(u)?u:u.toArray()).sort(i);l=[],l.push(c[0]);for(var f=1;f{var{typed:e,size:r,subset:n,compareNatural:i,Index:a,DenseMatrix:s}=t;return e(xC,{"Array | Matrix, Array | Matrix":function(u,l){var c;if(n(r(u),new a(0))===0||n(r(l),new a(0))===0)c=[];else{var f=yc(tr(Array.isArray(u)?u:u.toArray()).sort(i)),h=yc(tr(Array.isArray(l)?l:l.toArray()).sort(i));c=[];for(var p=0;p{var{typed:e,size:r,subset:n,compareNatural:i,Index:a}=t;return e(wC,{"Array | Matrix, Array | Matrix":function(o,u){if(n(r(o),new a(0))===0)return!0;if(n(r(u),new a(0))===0)return!1;for(var l=yc(tr(Array.isArray(o)?o:o.toArray()).sort(i)),c=yc(tr(Array.isArray(u)?u:u.toArray()).sort(i)),f,h=0;h{var{typed:e,size:r,subset:n,compareNatural:i,Index:a}=t;return e(SC,{"number | BigNumber | Fraction | Complex, Array | Matrix":function(o,u){if(n(r(u),new a(0))===0)return 0;for(var l=tr(Array.isArray(u)?u:u.toArray()),c=0,f=0;f{var{typed:e,size:r,subset:n,compareNatural:i,Index:a}=t;return e(_C,{"Array | Matrix":function(l){if(n(r(l),new a(0))===0)return[];for(var c=tr(Array.isArray(l)?l:l.toArray()).sort(i),f=[],h=0;h.toString(2).length<=c.length;)f.push(s(c,h.toString(2).split("").reverse())),h++;return o(f)}});function s(u,l){for(var c=[],f=0;f0;c--)for(var f=0;fu[f+1].length&&(l=u[f],u[f]=u[f+1],u[f+1]=l);return u}}),AC="setSize",Zfe=["typed","compareNatural"],Kfe=G(AC,Zfe,t=>{var{typed:e,compareNatural:r}=t;return e(AC,{"Array | Matrix":function(i){return Array.isArray(i)?tr(i).length:tr(i.toArray()).length},"Array | Matrix, boolean":function(i,a){if(a===!1||i.length===0)return Array.isArray(i)?tr(i).length:tr(i.toArray()).length;for(var s=tr(Array.isArray(i)?i:i.toArray()).sort(r),o=1,u=1;u{var{typed:e,size:r,concat:n,subset:i,setDifference:a,Index:s}=t;return e(DC,{"Array | Matrix, Array | Matrix":function(u,l){if(i(r(u),new s(0))===0)return tr(l);if(i(r(l),new s(0))===0)return tr(u);var c=tr(u),f=tr(l);return n(a(c,f),a(f,c))}})}),NC="setUnion",ehe=["typed","size","concat","subset","setIntersect","setSymDifference","Index"],the=G(NC,ehe,t=>{var{typed:e,size:r,concat:n,subset:i,setIntersect:a,setSymDifference:s,Index:o}=t;return e(NC,{"Array | Matrix, Array | Matrix":function(l,c){if(i(r(l),new o(0))===0)return tr(c);if(i(r(c),new o(0))===0)return tr(l);var f=tr(l),h=tr(c);return n(s(f,h),a(f,h))}})}),EC="add",rhe=["typed","matrix","addScalar","equalScalar","DenseMatrix","SparseMatrix","concat"],nhe=G(EC,rhe,t=>{var{typed:e,matrix:r,addScalar:n,equalScalar:i,DenseMatrix:a,SparseMatrix:s,concat:o}=t,u=Zo({typed:e}),l=lw({typed:e,equalScalar:i}),c=Ju({typed:e,DenseMatrix:a}),f=_r({typed:e,matrix:r,concat:o});return e(EC,{"any, any":n,"any, any, ...any":e.referToSelf(h=>(p,g,m)=>{for(var b=h(p,g),y=0;y{var{typed:e,abs:r,addScalar:n,divideScalar:i,multiplyScalar:a,sqrt:s,smaller:o,isPositive:u}=t;return e(CC,{"... number | BigNumber":l,Array:l,Matrix:c=>l(tr(c.toArray()))});function l(c){for(var f=0,h=0,p=0;p{var{typed:e,abs:r,add:n,pow:i,conj:a,sqrt:s,multiply:o,equalScalar:u,larger:l,smaller:c,matrix:f,ctranspose:h,eigs:p}=t;return e(MC,{number:Math.abs,Complex:function(E){return E.abs()},BigNumber:function(E){return E.abs()},boolean:function(E){return Math.abs(E)},Array:function(E){return w(f(E),2)},Matrix:function(E){return w(E,2)},"Array, number | BigNumber | string":function(E,N){return w(f(E),N)},"Matrix, number | BigNumber | string":function(E,N){return w(E,N)}});function g(C){var E=0;return C.forEach(function(N){var M=r(N);l(M,E)&&(E=M)},!0),E}function m(C){var E;return C.forEach(function(N){var M=r(N);(!E||c(M,E))&&(E=M)},!0),E||0}function b(C,E){if(E===Number.POSITIVE_INFINITY||E==="inf")return g(C);if(E===Number.NEGATIVE_INFINITY||E==="-inf")return m(C);if(E==="fro")return w(C,2);if(typeof E=="number"&&!isNaN(E)){if(!u(E,0)){var N=0;return C.forEach(function(M){N=n(i(r(M),E),N)},!0),i(N,1/E)}return Number.POSITIVE_INFINITY}throw new Error("Unsupported parameter value")}function y(C){var E=0;return C.forEach(function(N,M){E=n(E,o(N,a(N)))}),r(s(E))}function S(C){var E=[],N=0;return C.forEach(function(M,O){var F=O[1],q=n(E[F]||0,r(M));l(q,N)&&(N=q),E[F]=q},!0),N}function x(C){var E=C.size();if(E[0]!==E[1])throw new RangeError("Invalid matrix dimensions");var N=h(C),M=o(N,C),O=p(M).values.toArray(),F=O[O.length-1];return r(s(F))}function _(C){var E=[],N=0;return C.forEach(function(M,O){var F=O[0],q=n(E[F]||0,r(M));l(q,N)&&(N=q),E[F]=q},!0),N}function A(C,E){if(E===1)return S(C);if(E===Number.POSITIVE_INFINITY||E==="inf")return _(C);if(E==="fro")return y(C);if(E===2)return x(C);throw new Error("Unsupported parameter value "+E)}function w(C,E){var N=C.size();if(N.length===1)return b(C,E);if(N.length===2){if(N[0]&&N[1])return A(C,E);throw new RangeError("Invalid matrix dimensions")}}}),TC="dot",uhe=["typed","addScalar","multiplyScalar","conj","size"],lhe=G(TC,uhe,t=>{var{typed:e,addScalar:r,multiplyScalar:n,conj:i,size:a}=t;return e(TC,{"Array | DenseMatrix, Array | DenseMatrix":o,"SparseMatrix, SparseMatrix":u});function s(c,f){var h=l(c),p=l(f),g,m;if(h.length===1)g=h[0];else if(h.length===2&&h[1]===1)g=h[0];else throw new RangeError("Expected a column vector, instead got a matrix of size ("+h.join(", ")+")");if(p.length===1)m=p[0];else if(p.length===2&&p[1]===1)m=p[0];else throw new RangeError("Expected a column vector, instead got a matrix of size ("+p.join(", ")+")");if(g!==m)throw new RangeError("Vectors must have equal length ("+g+" != "+m+")");if(g===0)throw new RangeError("Cannot calculate the dot product of empty vectors");return g}function o(c,f){var h=s(c,f),p=dt(c)?c._data:c,g=dt(c)?c._datatype:void 0,m=dt(f)?f._data:f,b=dt(f)?f._datatype:void 0,y=l(c).length===2,S=l(f).length===2,x=r,_=n;if(g&&b&&g===b&&typeof g=="string"){var A=g;x=e.find(r,[A,A]),_=e.find(n,[A,A])}if(!y&&!S){for(var w=_(i(p[0]),m[0]),C=1;Cw){_++;continue}A===w&&(b=y(b,S(p[x],m[_])),x++,_++)}return b}function l(c){return dt(c)?c.size():a(c)}}),che="trace",fhe=["typed","matrix","add"],hhe=G(che,fhe,t=>{var{typed:e,matrix:r,add:n}=t;return e("trace",{Array:function(o){return i(r(o))},SparseMatrix:a,DenseMatrix:i,any:xt});function i(s){var o=s._size,u=s._data;switch(o.length){case 1:if(o[0]===1)return xt(u[0]);throw new RangeError("Matrix must be square (size: "+Pt(o)+")");case 2:{var l=o[0],c=o[1];if(l===c){for(var f=0,h=0;h0)for(var g=0;gg)break}return p}throw new RangeError("Matrix must be square (size: "+Pt(c)+")")}}),OC="index",dhe=["typed","Index"],phe=G(OC,dhe,t=>{var{typed:e,Index:r}=t;return e(OC,{"...number | string | BigNumber | Range | Array | Matrix":function(i){var a=i.map(function(o){return Mt(o)?o.toNumber():sr(o)||dt(o)?o.map(function(u){return Mt(u)?u.toNumber():u}):o}),s=new r;return r.apply(s,a),s}})}),KI=new Set(["end"]),mhe="Node",vhe=["mathWithTransform"],ghe=G(mhe,vhe,t=>{var{mathWithTransform:e}=t;function r(i){for(var a of[...KI])if(i.has(a))throw new Error('Scope contains an illegal symbol, "'+a+'" is a reserved keyword')}class n{get type(){return"Node"}get isNode(){return!0}evaluate(a){return this.compile().evaluate(a)}compile(){var a=this._compile(e,{}),s={},o=null;function u(l){var c=tc(l);return r(c),a(c,s,o)}return{evaluate:u}}_compile(a,s){throw new Error("Method _compile must be implemented by type "+this.type)}forEach(a){throw new Error("Cannot run forEach on a Node interface")}map(a){throw new Error("Cannot run map on a Node interface")}_ifNode(a){if(!pr(a))throw new TypeError("Callback function must return a Node");return a}traverse(a){a(this,null,null);function s(o,u){o.forEach(function(l,c,f){u(l,c,f),s(l,u)})}s(this,a)}transform(a){function s(o,u,l){var c=a(o,u,l);return c!==o?c:o.map(s)}return s(this,null,null)}filter(a){var s=[];return this.traverse(function(o,u,l){a(o,u,l)&&s.push(o)}),s}clone(){throw new Error("Cannot clone a Node interface")}cloneDeep(){return this.map(function(a){return a.cloneDeep()})}equals(a){return a?this.type===a.type&&Wu(this,a):!1}toString(a){var s=this._getCustomString(a);return typeof s<"u"?s:this._toString(a)}_toString(){throw new Error("_toString not implemented for "+this.type)}toJSON(){throw new Error("Cannot serialize object: toJSON not implemented by "+this.type)}toHTML(a){var s=this._getCustomString(a);return typeof s<"u"?s:this._toHTML(a)}_toHTML(){throw new Error("_toHTML not implemented for "+this.type)}toTex(a){var s=this._getCustomString(a);return typeof s<"u"?s:this._toTex(a)}_toTex(a){throw new Error("_toTex not implemented for "+this.type)}_getCustomString(a){if(a&&typeof a=="object")switch(typeof a.handler){case"object":case"undefined":return;case"function":return a.handler(this,a);default:throw new TypeError("Object or function expected as callback")}}getIdentifier(){return this.type}getContent(){return this}}return n},{isClass:!0,isNode:!0});function oi(t){return t&&t.isIndexError?new Fa(t.index+1,t.min+1,t.max!==void 0?t.max+1:void 0):t}function JI(t){var{subset:e}=t;return function(n,i){try{if(Array.isArray(n))return e(n,i);if(n&&typeof n.subset=="function")return n.subset(i);if(typeof n=="string")return e(n,i);if(typeof n=="object"){if(!i.isObjectProperty())throw new TypeError("Cannot apply a numeric index as object property");return ri(n,i.getObjectProperty())}else throw new TypeError("Cannot apply index: unsupported type of object")}catch(a){throw oi(a)}}}var im="AccessorNode",yhe=["subset","Node"],bhe=G(im,yhe,t=>{var{subset:e,Node:r}=t,n=JI({subset:e});function i(s){return!(Hu(s)||Zi(s)||er(s)||Ho(s)||Og(s)||js(s)||Sn(s))}class a extends r{constructor(o,u){if(super(),!pr(o))throw new TypeError('Node expected for parameter "object"');if(!Mc(u))throw new TypeError('IndexNode expected for parameter "index"');this.object=o,this.index=u}get name(){return this.index?this.index.isObjectProperty()?this.index.getObjectProperty():"":this.object.name||""}get type(){return im}get isAccessorNode(){return!0}_compile(o,u){var l=this.object._compile(o,u),c=this.index._compile(o,u);if(this.index.isObjectProperty()){var f=this.index.getObjectProperty();return function(p,g,m){return ri(l(p,g,m),f)}}else return function(p,g,m){var b=l(p,g,m),y=c(p,g,b);return n(b,y)}}forEach(o){o(this.object,"object",this),o(this.index,"index",this)}map(o){return new a(this._ifNode(o(this.object,"object",this)),this._ifNode(o(this.index,"index",this)))}clone(){return new a(this.object,this.index)}_toString(o){var u=this.object.toString(o);return i(this.object)&&(u="("+u+")"),u+this.index.toString(o)}_toHTML(o){var u=this.object.toHTML(o);return i(this.object)&&(u='('+u+')'),u+this.index.toHTML(o)}_toTex(o){var u=this.object.toTex(o);return i(this.object)&&(u="\\left(' + object + '\\right)"),u+this.index.toTex(o)}toJSON(){return{mathjs:im,object:this.object,index:this.index}}static fromJSON(o){return new a(o.object,o.index)}}return vn(a,"name",im),a},{isClass:!0,isNode:!0}),am="ArrayNode",xhe=["Node"],whe=G(am,xhe,t=>{var{Node:e}=t;class r extends e{constructor(i){if(super(),this.items=i||[],!Array.isArray(this.items)||!this.items.every(pr))throw new TypeError("Array containing Nodes expected")}get type(){return am}get isArrayNode(){return!0}_compile(i,a){var s=Ws(this.items,function(l){return l._compile(i,a)}),o=i.config.matrix!=="Array";if(o){var u=i.matrix;return function(c,f,h){return u(Ws(s,function(p){return p(c,f,h)}))}}else return function(c,f,h){return Ws(s,function(p){return p(c,f,h)})}}forEach(i){for(var a=0;a['+a.join(',')+']'}_toTex(i){function a(s,o){var u=s.some(Zi)&&!s.every(Zi),l=o||u,c=l?"&":"\\\\",f=s.map(function(h){return h.items?a(h.items,!o):h.toTex(i)}).join(c);return u||!l||l&&!o?"\\begin{bmatrix}"+f+"\\end{bmatrix}":f}return a(this.items,!1)}}return vn(r,"name",am),r},{isClass:!0,isNode:!0});function She(t){var{subset:e,matrix:r}=t;return function(i,a,s){try{if(Array.isArray(i)){var o=r(i).subset(a,s).valueOf();return o.forEach((u,l)=>{i[l]=u}),i}else{if(i&&typeof i.subset=="function")return i.subset(a,s);if(typeof i=="string")return e(i,a,s);if(typeof i=="object"){if(!a.isObjectProperty())throw TypeError("Cannot apply a numeric index as object property");return bc(i,a.getObjectProperty(),s),i}else throw new TypeError("Cannot apply index: unsupported type of object")}}catch(u){throw oi(u)}}}var wa=[{AssignmentNode:{},FunctionAssignmentNode:{}},{ConditionalNode:{latexLeftParens:!1,latexRightParens:!1,latexParens:!1}},{"OperatorNode:or":{op:"or",associativity:"left",associativeWith:[]}},{"OperatorNode:xor":{op:"xor",associativity:"left",associativeWith:[]}},{"OperatorNode:and":{op:"and",associativity:"left",associativeWith:[]}},{"OperatorNode:bitOr":{op:"|",associativity:"left",associativeWith:[]}},{"OperatorNode:bitXor":{op:"^|",associativity:"left",associativeWith:[]}},{"OperatorNode:bitAnd":{op:"&",associativity:"left",associativeWith:[]}},{"OperatorNode:equal":{op:"==",associativity:"left",associativeWith:[]},"OperatorNode:unequal":{op:"!=",associativity:"left",associativeWith:[]},"OperatorNode:smaller":{op:"<",associativity:"left",associativeWith:[]},"OperatorNode:larger":{op:">",associativity:"left",associativeWith:[]},"OperatorNode:smallerEq":{op:"<=",associativity:"left",associativeWith:[]},"OperatorNode:largerEq":{op:">=",associativity:"left",associativeWith:[]},RelationalNode:{associativity:"left",associativeWith:[]}},{"OperatorNode:leftShift":{op:"<<",associativity:"left",associativeWith:[]},"OperatorNode:rightArithShift":{op:">>",associativity:"left",associativeWith:[]},"OperatorNode:rightLogShift":{op:">>>",associativity:"left",associativeWith:[]}},{"OperatorNode:to":{op:"to",associativity:"left",associativeWith:[]}},{RangeNode:{}},{"OperatorNode:add":{op:"+",associativity:"left",associativeWith:["OperatorNode:add","OperatorNode:subtract"]},"OperatorNode:subtract":{op:"-",associativity:"left",associativeWith:[]}},{"OperatorNode:multiply":{op:"*",associativity:"left",associativeWith:["OperatorNode:multiply","OperatorNode:divide","Operator:dotMultiply","Operator:dotDivide"]},"OperatorNode:divide":{op:"/",associativity:"left",associativeWith:[],latexLeftParens:!1,latexRightParens:!1,latexParens:!1},"OperatorNode:dotMultiply":{op:".*",associativity:"left",associativeWith:["OperatorNode:multiply","OperatorNode:divide","OperatorNode:dotMultiply","OperatorNode:doDivide"]},"OperatorNode:dotDivide":{op:"./",associativity:"left",associativeWith:[]},"OperatorNode:mod":{op:"mod",associativity:"left",associativeWith:[]}},{"OperatorNode:multiply":{associativity:"left",associativeWith:["OperatorNode:multiply","OperatorNode:divide","Operator:dotMultiply","Operator:dotDivide"]}},{"OperatorNode:unaryPlus":{op:"+",associativity:"right"},"OperatorNode:unaryMinus":{op:"-",associativity:"right"},"OperatorNode:bitNot":{op:"~",associativity:"right"},"OperatorNode:not":{op:"not",associativity:"right"}},{"OperatorNode:pow":{op:"^",associativity:"right",associativeWith:[],latexRightParens:!1},"OperatorNode:dotPow":{op:".^",associativity:"right",associativeWith:[]}},{"OperatorNode:factorial":{op:"!",associativity:"left"}},{"OperatorNode:ctranspose":{op:"'",associativity:"left"}}];function sm(t,e){if(!e||e!=="auto")return t;for(var r=t;js(r);)r=r.content;return r}function br(t,e,r,n){var i=t;e!=="keep"&&(i=t.getContent());for(var a=i.getIdentifier(),s=null,o=0;o{var{subset:e,matrix:r,Node:n}=t,i=JI({subset:e}),a=She({subset:e,matrix:r});function s(u,l,c){l||(l="keep");var f=br(u,l,c),h=br(u.value,l,c);return l==="all"||h!==null&&h<=f}class o extends n{constructor(l,c,f){if(super(),this.object=l,this.index=f?c:null,this.value=f||c,!Sn(l)&&!Hu(l))throw new TypeError('SymbolNode or AccessorNode expected as "object"');if(Sn(l)&&l.name==="end")throw new Error('Cannot assign to symbol "end"');if(this.index&&!Mc(this.index))throw new TypeError('IndexNode expected as "index"');if(!pr(this.value))throw new TypeError('Node expected as "value"')}get name(){return this.index?this.index.isObjectProperty()?this.index.getObjectProperty():"":this.object.name||""}get type(){return om}get isAssignmentNode(){return!0}_compile(l,c){var f=this.object._compile(l,c),h=this.index?this.index._compile(l,c):null,p=this.value._compile(l,c),g=this.object.name;if(this.index)if(this.index.isObjectProperty()){var m=this.index.getObjectProperty();return function(_,A,w){var C=f(_,A,w),E=p(_,A,w);return bc(C,m,E),E}}else{if(Sn(this.object))return function(_,A,w){var C=f(_,A,w),E=p(_,A,w),N=h(_,A,C);return _.set(g,a(C,N,E)),E};var b=this.object.object._compile(l,c);if(this.object.index.isObjectProperty()){var y=this.object.index.getObjectProperty();return function(_,A,w){var C=b(_,A,w),E=ri(C,y),N=h(_,A,E),M=p(_,A,w);return bc(C,y,a(E,N,M)),M}}else{var S=this.object.index._compile(l,c);return function(_,A,w){var C=b(_,A,w),E=S(_,A,C),N=i(C,E),M=h(_,A,N),O=p(_,A,w);return a(C,E,a(N,M,O)),O}}}else{if(!Sn(this.object))throw new TypeError("SymbolNode expected as object");return function(_,A,w){var C=p(_,A,w);return _.set(g,C),C}}}forEach(l){l(this.object,"object",this),this.index&&l(this.index,"index",this),l(this.value,"value",this)}map(l){var c=this._ifNode(l(this.object,"object",this)),f=this.index?this._ifNode(l(this.index,"index",this)):null,h=this._ifNode(l(this.value,"value",this));return new o(c,f,h)}clone(){return new o(this.object,this.index,this.value)}_toString(l){var c=this.object.toString(l),f=this.index?this.index.toString(l):"",h=this.value.toString(l);return s(this,l&&l.parenthesis,l&&l.implicit)&&(h="("+h+")"),c+f+" = "+h}toJSON(){return{mathjs:om,object:this.object,index:this.index,value:this.value}}static fromJSON(l){return new o(l.object,l.index,l.value)}_toHTML(l){var c=this.object.toHTML(l),f=this.index?this.index.toHTML(l):"",h=this.value.toHTML(l);return s(this,l&&l.parenthesis,l&&l.implicit)&&(h='('+h+')'),c+f+'='+h}_toTex(l){var c=this.object.toTex(l),f=this.index?this.index.toTex(l):"",h=this.value.toTex(l);return s(this,l&&l.parenthesis,l&&l.implicit)&&(h="\\left(".concat(h,"\\right)")),c+f+"="+h}}return vn(o,"name",om),o},{isClass:!0,isNode:!0}),um="BlockNode",Nhe=["ResultSet","Node"],Ehe=G(um,Nhe,t=>{var{ResultSet:e,Node:r}=t;class n extends r{constructor(a){if(super(),!Array.isArray(a))throw new Error("Array expected");this.blocks=a.map(function(s){var o=s&&s.node,u=s&&s.visible!==void 0?s.visible:!0;if(!pr(o))throw new TypeError('Property "node" must be a Node');if(typeof u!="boolean")throw new TypeError('Property "visible" must be a boolean');return{node:o,visible:u}})}get type(){return um}get isBlockNode(){return!0}_compile(a,s){var o=Ws(this.blocks,function(u){return{evaluate:u.node._compile(a,s),visible:u.visible}});return function(l,c,f){var h=[];return Rg(o,function(g){var m=g.evaluate(l,c,f);g.visible&&h.push(m)}),new e(h)}}forEach(a){for(var s=0;s1&&(S[x]=(S[x]||0)+1):S[y]=(S[y]||0)+1,S}var u=function(y,S){var x=0,_=1,A=1,w=0,C=0,N=0,E=1,M=1,O=0,F=1,q=1,V=1,H=1e7,B;if(y!=null)if(S!==void 0){if(x=y,_=S,A=x*_,x%1!==0||_%1!==0)throw b()}else switch(typeof y){case"object":{if("d"in y&&"n"in y)x=y.n,_=y.d,"s"in y&&(x*=y.s);else if(0 in y)x=y[0],1 in y&&(_=y[1]);else throw m();A=x*_;break}case"number":{if(y<0&&(A=y,y=-y),y%1===0)x=y;else if(y>0){for(y>=1&&(M=Math.pow(10,Math.floor(1+Math.log(y)/Math.LN10)),y/=M);F<=H&&V<=H;)if(B=(O+q)/(F+V),y===B){F+V<=H?(x=O+q,_=F+V):V>F?(x=q,_=V):(x=O,_=F);break}else y>B?(O+=q,F+=V):(q+=O,V+=F),F>H?(x=q,_=V):(x=O,_=F);x*=M}else(isNaN(y)||isNaN(S))&&(_=x=NaN);break}case"string":{if(F=y.match(/\d+|./g),F===null)throw m();if(F[O]==="-"?(A=-1,O++):F[O]==="+"&&O++,F.length===O+1?C=a(F[O++],A):F[O+1]==="."||F[O]==="."?(F[O]!=="."&&(w=a(F[O++],A)),O++,(O+1===F.length||F[O+1]==="("&&F[O+3]===")"||F[O+1]==="'"&&F[O+3]==="'")&&(C=a(F[O],A),E=Math.pow(10,F[O].length),O++),(F[O]==="("&&F[O+2]===")"||F[O]==="'"&&F[O+2]==="'")&&(N=a(F[O+1],A),M=Math.pow(10,F[O+1].length)-1,O+=3)):F[O+1]==="/"||F[O+1]===":"?(C=a(F[O],A),E=a(F[O+2],1),O+=3):F[O+3]==="/"&&F[O+1]===" "&&(w=a(F[O],A),C=a(F[O+2],A),E=a(F[O+4],1),O+=5),F.length<=O){_=E*M,A=x=N+_*w+M*C;break}}default:throw m()}if(_===0)throw g();i.s=A<0?-1:1,i.n=Math.abs(x),i.d=Math.abs(_)};function l(y,S,x){for(var _=1;S>0;y=y*y%x,S>>=1)S&1&&(_=_*y%x);return _}function c(y,S){for(;S%2===0;S/=2);for(;S%5===0;S/=5);if(S===1)return 0;for(var x=10%S,_=1;x!==1;_++)if(x=x*10%S,_>n)return 0;return _}function f(y,S,x){for(var _=1,A=l(10,x,S),w=0;w<300;w++){if(_===A)return w;_=_*10%S,A=A*10%S}return 0}function h(y,S){if(!y)return S;if(!S)return y;for(;;){if(y%=S,!y)return S;if(S%=y,!S)return y}}function p(y,S){if(u(y,S),this instanceof p)y=h(i.d,i.n),this.s=i.s,this.n=i.n/y,this.d=i.d/y;else return s(i.s*i.n,i.d)}var g=function(){return new Error("Division by Zero")},m=function(){return new Error("Invalid argument")},b=function(){return new Error("Parameters must be integer")};p.prototype={s:1,n:0,d:1,abs:function(){return s(this.n,this.d)},neg:function(){return s(-this.s*this.n,this.d)},add:function(y,S){return u(y,S),s(this.s*this.n*i.d+i.s*this.d*i.n,this.d*i.d)},sub:function(y,S){return u(y,S),s(this.s*this.n*i.d-i.s*this.d*i.n,this.d*i.d)},mul:function(y,S){return u(y,S),s(this.s*i.s*this.n*i.n,this.d*i.d)},div:function(y,S){return u(y,S),s(this.s*i.s*this.n*i.d,this.d*i.n)},clone:function(){return s(this.s*this.n,this.d)},mod:function(y,S){if(isNaN(this.n)||isNaN(this.d))return new p(NaN);if(y===void 0)return s(this.s*this.n%this.d,1);if(u(y,S),i.n===0&&this.d===0)throw g();return s(this.s*(i.d*this.n)%(i.n*this.d),i.d*this.d)},gcd:function(y,S){return u(y,S),s(h(i.n,this.n)*h(i.d,this.d),i.d*this.d)},lcm:function(y,S){return u(y,S),i.n===0&&this.n===0?s(0,1):s(i.n*this.n,h(i.n,this.n)*h(i.d,this.d))},ceil:function(y){return y=Math.pow(10,y||0),isNaN(this.n)||isNaN(this.d)?new p(NaN):s(Math.ceil(y*this.s*this.n/this.d),y)},floor:function(y){return y=Math.pow(10,y||0),isNaN(this.n)||isNaN(this.d)?new p(NaN):s(Math.floor(y*this.s*this.n/this.d),y)},round:function(y){return y=Math.pow(10,y||0),isNaN(this.n)||isNaN(this.d)?new p(NaN):s(Math.round(y*this.s*this.n/this.d),y)},inverse:function(){return s(this.s*this.d,this.n)},pow:function(y,S){if(u(y,S),i.d===1)return i.s<0?s(Math.pow(this.s*this.d,i.n),Math.pow(this.n,i.n)):s(Math.pow(this.s*this.n,i.n),Math.pow(this.d,i.n));if(this.s<0)return null;var x=o(this.n),_=o(this.d),A=1,w=1;for(var C in x)if(C!=="1"){if(C==="0"){A=0;break}if(x[C]*=i.n,x[C]%i.d===0)x[C]/=i.d;else return null;A*=Math.pow(C,x[C])}for(var C in _)if(C!=="1"){if(_[C]*=i.n,_[C]%i.d===0)_[C]/=i.d;else return null;w*=Math.pow(C,_[C])}return i.s<0?s(w,A):s(A,w)},equals:function(y,S){return u(y,S),this.s*this.n*i.d===i.s*i.n*this.d},compare:function(y,S){u(y,S);var x=this.s*this.n*i.d-i.s*i.n*this.d;return(0=0;w--)A=A.inverse().add(x[w]);if(Math.abs(A.sub(S).valueOf())0&&(x+=S,x+=" ",_%=A),x+=_,x+="/",x+=A),x},toLatex:function(y){var S,x="",_=this.n,A=this.d;return this.s<0&&(x+="-"),A===1?x+=_:(y&&(S=Math.floor(_/A))>0&&(x+=S,_%=A),x+="\\frac{",x+=_,x+="}{",x+=A,x+="}"),x},toContinued:function(){var y,S=this.n,x=this.d,_=[];if(isNaN(S)||isNaN(x))return _;do _.push(Math.floor(S/x)),y=S%x,S=x,x=y;while(S!==1);return _},toString:function(y){var S=this.n,x=this.d;if(isNaN(S)||isNaN(x))return"NaN";y=y||15;var _=c(S,x),A=f(S,x,_),w=this.s<0?"-":"";if(w+=S/x|0,S%=x,S*=10,S&&(w+="."),_){for(var C=A;C--;)w+=S/x|0,S%=x,S*=10;w+="(";for(var C=_;C--;)w+=S/x|0,S%=x,S*=10;w+=")"}else for(var C=y;S&&C--;)w+=S/x|0,S%=x,S*=10;return w}},Object.defineProperty(p,"__esModule",{value:!0}),p.default=p,p.Fraction=p,t.exports=p})()})(HP);var lie=HP.exports;const As=Vu(lie);var cie="Fraction",fie=[],hie=G(cie,fie,()=>(Object.defineProperty(As,"name",{value:"Fraction"}),As.prototype.constructor=As,As.prototype.type="Fraction",As.prototype.isFraction=!0,As.prototype.toJSON=function(){return{mathjs:"Fraction",n:this.s*this.n,d:this.d}},As.fromJSON=function(t){return new As(t)},As),{isClass:!0}),die="Range",pie=[],mie=G(die,pie,()=>{function t(e,r,n){if(!(this instanceof t))throw new SyntaxError("Constructor must be called with the new operator");var i=e!=null,a=r!=null,s=n!=null;if(i){if(Mt(e))e=e.toNumber();else if(typeof e!="number")throw new TypeError("Parameter start must be a number")}if(a){if(Mt(r))r=r.toNumber();else if(typeof r!="number")throw new TypeError("Parameter end must be a number")}if(s){if(Mt(n))n=n.toNumber();else if(typeof n!="number")throw new TypeError("Parameter step must be a number")}this.start=i?parseFloat(e):0,this.end=a?parseFloat(r):0,this.step=s?parseFloat(n):1}return t.prototype.type="Range",t.prototype.isRange=!0,t.parse=function(e){if(typeof e!="string")return null;var r=e.split(":"),n=r.map(function(a){return parseFloat(a)}),i=n.some(function(a){return isNaN(a)});if(i)return null;switch(n.length){case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[2],n[1]);default:return null}},t.prototype.clone=function(){return new t(this.start,this.end,this.step)},t.prototype.size=function(){var e=0,r=this.start,n=this.step,i=this.end,a=i-r;return ko(n)===ko(a)?e=Math.ceil(a/n):a===0&&(e=0),isNaN(e)&&(e=0),[e]},t.prototype.min=function(){var e=this.size()[0];if(e>0)return this.step>0?this.start:this.start+(e-1)*this.step},t.prototype.max=function(){var e=this.size()[0];if(e>0)return this.step>0?this.start+(e-1)*this.step:this.start},t.prototype.forEach=function(e){var r=this.start,n=this.step,i=this.end,a=0;if(n>0)for(;ri;)e(r,[a],this),r+=n,a++},t.prototype.map=function(e){var r=[];return this.forEach(function(n,i,a){r[i[0]]=e(n,i,a)}),r},t.prototype.toArray=function(){var e=[];return this.forEach(function(r,n){e[n[0]]=r}),e},t.prototype.valueOf=function(){return this.toArray()},t.prototype.format=function(e){var r=Lu(this.start,e);return this.step!==1&&(r+=":"+Lu(this.step,e)),r+=":"+Lu(this.end,e),r},t.prototype.toString=function(){return this.format()},t.prototype.toJSON=function(){return{mathjs:"Range",start:this.start,end:this.end,step:this.step}},t.fromJSON=function(e){return new t(e.start,e.end,e.step)},t},{isClass:!0}),vie="Matrix",gie=[],yie=G(vie,gie,()=>{function t(){if(!(this instanceof t))throw new SyntaxError("Constructor must be called with the new operator")}return t.prototype.type="Matrix",t.prototype.isMatrix=!0,t.prototype.storage=function(){throw new Error("Cannot invoke storage on a Matrix interface")},t.prototype.datatype=function(){throw new Error("Cannot invoke datatype on a Matrix interface")},t.prototype.create=function(e,r){throw new Error("Cannot invoke create on a Matrix interface")},t.prototype.subset=function(e,r,n){throw new Error("Cannot invoke subset on a Matrix interface")},t.prototype.get=function(e){throw new Error("Cannot invoke get on a Matrix interface")},t.prototype.set=function(e,r,n){throw new Error("Cannot invoke set on a Matrix interface")},t.prototype.resize=function(e,r){throw new Error("Cannot invoke resize on a Matrix interface")},t.prototype.reshape=function(e,r){throw new Error("Cannot invoke reshape on a Matrix interface")},t.prototype.clone=function(){throw new Error("Cannot invoke clone on a Matrix interface")},t.prototype.size=function(){throw new Error("Cannot invoke size on a Matrix interface")},t.prototype.map=function(e,r){throw new Error("Cannot invoke map on a Matrix interface")},t.prototype.forEach=function(e){throw new Error("Cannot invoke forEach on a Matrix interface")},t.prototype[Symbol.iterator]=function(){throw new Error("Cannot iterate a Matrix interface")},t.prototype.toArray=function(){throw new Error("Cannot invoke toArray on a Matrix interface")},t.prototype.valueOf=function(){throw new Error("Cannot invoke valueOf on a Matrix interface")},t.prototype.format=function(e){throw new Error("Cannot invoke format on a Matrix interface")},t.prototype.toString=function(){throw new Error("Cannot invoke toString on a Matrix interface")},t},{isClass:!0});function bie(t){var e=0,r=1,n=Object.create(null),i=Object.create(null),a=0,s=function(u){var l=i[u];if(l&&(delete n[l],delete i[u],--e,r===l)){if(!e){a=0,r=1;return}for(;!Object.prototype.hasOwnProperty.call(n,++r););}};return t=Math.abs(t),{hit:function(u){var l=i[u],c=++a;if(n[c]=u,i[u]=c,!l)return++e,e<=t?void 0:(u=n[r],s(u),u);if(delete n[l],r===l)for(;!Object.prototype.hasOwnProperty.call(n,++r););},delete:s,clear:function(){e=a=0,r=1,n=Object.create(null),i=Object.create(null)}}}function pd(t){var{hasher:e,limit:r}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return r=r??Number.POSITIVE_INFINITY,e=e??JSON.stringify,function n(){typeof n.cache!="object"&&(n.cache={values:new Map,lru:bie(r||Number.POSITIVE_INFINITY)});for(var i=[],a=0;a{var{Matrix:e}=t;function r(c,f){if(!(this instanceof r))throw new SyntaxError("Constructor must be called with the new operator");if(f&&!qn(f))throw new Error("Invalid datatype: "+f);if(dt(c))c.type==="DenseMatrix"?(this._data=xt(c._data),this._size=xt(c._size),this._datatype=f||c._datatype):(this._data=c.toArray(),this._size=c.size(),this._datatype=f||c._datatype);else if(c&&sr(c.data)&&sr(c.size))this._data=c.data,this._size=c.size,O2(this._data,this._size),this._datatype=f||c.datatype;else if(sr(c))this._data=l(c),this._size=Et(this._data),O2(this._data,this._size),this._datatype=f;else{if(c)throw new TypeError("Unsupported type of data ("+xr(c)+")");this._data=[],this._size=[0],this._datatype=f}}r.prototype=new e,r.prototype.createDenseMatrix=function(c,f){return new r(c,f)},Object.defineProperty(r,"name",{value:"DenseMatrix"}),r.prototype.constructor=r,r.prototype.type="DenseMatrix",r.prototype.isDenseMatrix=!0,r.prototype.getDataType=function(){return Uh(this._data,xr)},r.prototype.storage=function(){return"dense"},r.prototype.datatype=function(){return this._datatype},r.prototype.create=function(c,f){return new r(c,f)},r.prototype.subset=function(c,f,h){switch(arguments.length){case 1:return n(this,c);case 2:case 3:return a(this,c,f,h);default:throw new SyntaxError("Wrong number of arguments")}},r.prototype.get=function(c){if(!sr(c))throw new TypeError("Array expected");if(c.length!==this._size.length)throw new kt(c.length,this._size.length);for(var f=0;f");var x=f.max().map(function(w){return w+1});u(c,x,p);var _=g.length,A=0;s(c._data,f,h,_,A)}return c}function s(c,f,h,p,g){var m=g===p-1,b=f.dimension(g);m?b.forEach(function(y,S){gr(y),c[y]=h[S[0]]}):b.forEach(function(y,S){gr(y),s(c[y],f,h[S[0]],p,g+1)})}r.prototype.resize=function(c,f,h){if(!oa(c))throw new TypeError("Array or Matrix expected");var p=c.valueOf().map(m=>Array.isArray(m)&&m.length===1?m[0]:m),g=h?this.clone():this;return o(g,p,f)};function o(c,f,h){if(f.length===0){for(var p=c._data;sr(p);)p=p[0];return p}return c._size=f.slice(0),c._data=bc(c._data,c._size,h),c}r.prototype.reshape=function(c,f){var h=f?this.clone():this;h._data=sw(h._data,c);var p=h._size.reduce((g,m)=>g*m);return h._size=ow(c,p),h};function u(c,f,h){for(var p=c._size.slice(0),g=!1;p.lengthp[m]&&(p[m]=f[m],g=!0);g&&o(c,p,h)}r.prototype.clone=function(){var c=new r({data:xt(this._data),size:xt(this._size),datatype:this._datatype});return c},r.prototype.size=function(){return this._size.slice(0)},r.prototype.map=function(c){var f=this,h=WP(c),p=function b(y,S){return sr(y)?y.map(function(x,_){return b(x,S.concat(_))}):h===1?c(y):h===2?c(y,S):c(y,S,f)},g=p(this._data,[]),m=this._datatype!==void 0?Uh(g,xr):void 0;return new r(g,m)},r.prototype.forEach=function(c){var f=this,h=function p(g,m){sr(g)?g.forEach(function(b,y){p(b,m.concat(y))}):c(g,m,f)};h(this._data,[])},r.prototype[Symbol.iterator]=function*(){var c=function*f(h,p){if(sr(h))for(var g=0;g[x[y]]);f.push(new r(S,c._datatype))},m=0;m0?c:0,h=c<0?-c:0,p=this._size[0],g=this._size[1],m=Math.min(p-h,g-f),b=[],y=0;y0?h:0,m=h<0?-h:0,b=c[0],y=c[1],S=Math.min(b-m,y-g),x;if(sr(f)){if(f.length!==S)throw new Error("Invalid value array length");x=function(N){return f[N]}}else if(dt(f)){var _=f.size();if(_.length!==1||_[0]!==S)throw new Error("Invalid matrix length");x=function(N){return f.get([N])}}else x=function(){return f};p||(p=Mt(x(0))?x(0).mul(0):0);var A=[];if(c.length>0){A=bc(A,c,p);for(var w=0;w{var{typed:e}=t;return e(I2,{any:xt})});function VP(t){var e=t.length,r=t[0].length,n,i,a=[];for(i=0;i=n.length)throw new Fa(e,n.length);return dt(t)?t.create(Cv(t.valueOf(),e,r)):Cv(t,e,r)}function Cv(t,e,r){var n,i,a,s;if(e<=0)if(Array.isArray(t[0])){for(s=VP(t),i=[],n=0;n{var{typed:e}=t;return e($2,{number:ot,BigNumber:function(n){return n.isInt()},Fraction:function(n){return n.d===1&&isFinite(n.n)},"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),Ra="number",Rc="number, number";function YP(t){return Math.abs(t)}YP.signature=Ra;function jP(t,e){return t+e}jP.signature=Rc;function GP(t,e){return t-e}GP.signature=Rc;function XP(t,e){return t*e}XP.signature=Rc;function ZP(t){return-t}ZP.signature=Ra;function KP(t){return t}KP.signature=Ra;function rh(t){return Ere(t)}rh.signature=Ra;function JP(t){return t*t*t}JP.signature=Ra;function QP(t){return Math.exp(t)}QP.signature=Ra;function ek(t){return Nre(t)}ek.signature=Ra;function tk(t,e){if(!ot(t)||!ot(e))throw new Error("Parameters in function lcm must be integer numbers");if(t===0||e===0)return 0;for(var r,n=t*e;e!==0;)r=e,e=t%r,t=r;return Math.abs(n/t)}tk.signature=Rc;function Nie(t,e){return e?Math.log(t)/Math.log(e):Math.log(t)}function rk(t){return Are(t)}rk.signature=Ra;function nk(t){return _re(t)}nk.signature=Ra;function z2(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2,r=e<0;if(r&&(e=-e),e===0)throw new Error("Root must be non-zero");if(t<0&&Math.abs(e)%2!==1)throw new Error("Root must be odd when a is negative.");if(t===0)return r?1/0:0;if(!isFinite(t))return r?0:t;var n=Math.pow(Math.abs(t),1/e);return n=t<0?-n:n,r?1/n:n}function a1(t){return ko(t)}a1.signature=Ra;function ik(t){return t*t}ik.signature=Ra;function ak(t,e){var r,n,i,a=0,s=1,o=1,u=0;if(!ot(t)||!ot(e))throw new Error("Parameters in function xgcd must be integer numbers");for(;e;)n=Math.floor(t/e),i=t-n*e,r=a,a=s-n*a,s=r,r=o,o=u-n*o,u=r,t=e,e=i;var l;return t<0?l=[-t,-s,-u]:l=[t,t?s:0,u],l}ak.signature=Rc;function sk(t,e){return t*t<1&&e===1/0||t*t>1&&e===-1/0?0:Math.pow(t,e)}sk.signature=Rc;function q2(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(!ot(e)||e<0||e>15)throw new Error("Number of decimals in function round must be an integer from 0 to 15 inclusive");return parseFloat(pP(t,e))}var Cie="number",Pc="number, number";function ok(t,e){if(!ot(t)||!ot(e))throw new Error("Integers expected in function bitAnd");return t&e}ok.signature=Pc;function uk(t){if(!ot(t))throw new Error("Integer expected in function bitNot");return~t}uk.signature=Cie;function lk(t,e){if(!ot(t)||!ot(e))throw new Error("Integers expected in function bitOr");return t|e}lk.signature=Pc;function ck(t,e){if(!ot(t)||!ot(e))throw new Error("Integers expected in function bitXor");return t^e}ck.signature=Pc;function fk(t,e){if(!ot(t)||!ot(e))throw new Error("Integers expected in function leftShift");return t<>e}hk.signature=Pc;function dk(t,e){if(!ot(t)||!ot(e))throw new Error("Integers expected in function rightLogShift");return t>>>e}dk.signature=Pc;function $s(t,e){if(e>1;return $s(t,r)*$s(r+1,e)}function pk(t,e){if(!ot(t)||t<0)throw new TypeError("Positive integer value expected in function combinations");if(!ot(e)||e<0)throw new TypeError("Positive integer value expected in function combinations");if(e>t)throw new TypeError("k must be less than or equal to n");for(var r=t-e,n=1,i=e171?1/0:$s(1,t-1);if(t<.5)return Math.PI/(Math.sin(Math.PI*t)*Mv(1-t));if(t>=171.35)return 1/0;if(t>85){var r=t*t,n=r*t,i=n*t,a=i*t;return Math.sqrt(2*Math.PI/t)*Math.pow(t/Math.E,t)*(1+1/(12*t)+1/(288*r)-139/(51840*n)-571/(2488320*i)+163879/(209018880*a)+5246819/(75246796800*a*t))}--t,e=ic[0];for(var s=1;s=1;n--)r+=U2[n]/(t+n);return xk+(t+.5)*Math.log(e)-e+Math.log(r)}Tv.signature="number";var Gn="number";function wk(t){return Fre(t)}wk.signature=Gn;function Sk(t){return Math.atan(1/t)}Sk.signature=Gn;function _k(t){return isFinite(t)?(Math.log((t+1)/t)+Math.log(t/(t-1)))/2:0}_k.signature=Gn;function Ak(t){return Math.asin(1/t)}Ak.signature=Gn;function Dk(t){var e=1/t;return Math.log(e+Math.sqrt(e*e+1))}Dk.signature=Gn;function Ek(t){return Math.acos(1/t)}Ek.signature=Gn;function Nk(t){var e=1/t,r=Math.sqrt(e*e-1);return Math.log(r+e)}Nk.signature=Gn;function Ck(t){return Rre(t)}Ck.signature=Gn;function Mk(t){return Pre(t)}Mk.signature=Gn;function Tk(t){return 1/Math.tan(t)}Tk.signature=Gn;function Ok(t){var e=Math.exp(2*t);return(e+1)/(e-1)}Ok.signature=Gn;function Fk(t){return 1/Math.sin(t)}Fk.signature=Gn;function Rk(t){return t===0?Number.POSITIVE_INFINITY:Math.abs(2/(Math.exp(t)-Math.exp(-t)))*ko(t)}Rk.signature=Gn;function Pk(t){return 1/Math.cos(t)}Pk.signature=Gn;function kk(t){return 2/(Math.exp(t)+Math.exp(-t))}kk.signature=Gn;function Bk(t){return Bre(t)}Bk.signature=Gn;var Ug="number";function Ik(t){return t<0}Ik.signature=Ug;function Lk(t){return t>0}Lk.signature=Ug;function $k(t){return t===0}$k.signature=Ug;function zk(t){return Number.isNaN(t)}zk.signature=Ug;var H2="isNegative",Bie=["typed"],Iie=G(H2,Bie,t=>{var{typed:e}=t;return e(H2,{number:Ik,BigNumber:function(n){return n.isNeg()&&!n.isZero()&&!n.isNaN()},Fraction:function(n){return n.s<0},Unit:e.referToSelf(r=>n=>e.find(r,n.valueType())(n.value)),"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),W2="isNumeric",Lie=["typed"],$ie=G(W2,Lie,t=>{var{typed:e}=t;return e(W2,{"number | BigNumber | Fraction | boolean":()=>!0,"Complex | Unit | string | null | undefined | Node":()=>!1,"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),V2="hasNumericValue",zie=["typed","isNumeric"],qie=G(V2,zie,t=>{var{typed:e,isNumeric:r}=t;return e(V2,{boolean:()=>!0,string:function(i){return i.trim().length>0&&!isNaN(Number(i))},any:function(i){return r(i)}})}),Y2="isPositive",Uie=["typed"],Hie=G(Y2,Uie,t=>{var{typed:e}=t;return e(Y2,{number:Lk,BigNumber:function(n){return!n.isNeg()&&!n.isZero()&&!n.isNaN()},Fraction:function(n){return n.s>0&&n.n>0},Unit:e.referToSelf(r=>n=>e.find(r,n.valueType())(n.value)),"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),j2="isZero",Wie=["typed"],Vie=G(j2,Wie,t=>{var{typed:e}=t;return e(j2,{number:$k,BigNumber:function(n){return n.isZero()},Complex:function(n){return n.re===0&&n.im===0},Fraction:function(n){return n.d===1&&n.n===0},Unit:e.referToSelf(r=>n=>e.find(r,n.valueType())(n.value)),"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),G2="isNaN",Yie=["typed"],jie=G(G2,Yie,t=>{var{typed:e}=t;return e(G2,{number:zk,BigNumber:function(n){return n.isNaN()},Fraction:function(n){return!1},Complex:function(n){return n.isNaN()},Unit:function(n){return Number.isNaN(n.value)},"Array | Matrix":function(n){return Bt(n,Number.isNaN)}})}),X2="typeOf",Gie=["typed"],Xie=G(X2,Gie,t=>{var{typed:e}=t;return e(X2,{any:xr})});function Ja(t,e,r){if(r==null)return t.eq(e);if(t.eq(e))return!0;if(t.isNaN()||e.isNaN())return!1;if(t.isFinite()&&e.isFinite()){var n=t.minus(e).abs();if(n.isZero())return!0;var i=t.constructor.max(t.abs(),e.abs());return n.lte(i.times(r))}return!1}function Zie(t,e,r){return Pi(t.re,e.re,r)&&Pi(t.im,e.im,r)}var kc=G("compareUnits",["typed"],t=>{var{typed:e}=t;return{"Unit, Unit":e.referToSelf(r=>(n,i)=>{if(!n.equalBase(i))throw new Error("Cannot compare units with different base");return e.find(r,[n.valueType(),i.valueType()])(n.value,i.value)})}}),Ov="equalScalar",Kie=["typed","config"],Jie=G(Ov,Kie,t=>{var{typed:e,config:r}=t,n=kc({typed:e});return e(Ov,{"boolean, boolean":function(a,s){return a===s},"number, number":function(a,s){return Pi(a,s,r.epsilon)},"BigNumber, BigNumber":function(a,s){return a.eq(s)||Ja(a,s,r.epsilon)},"Fraction, Fraction":function(a,s){return a.equals(s)},"Complex, Complex":function(a,s){return Zie(a,s,r.epsilon)}},n)});G(Ov,["typed","config"],t=>{var{typed:e,config:r}=t;return e(Ov,{"number, number":function(i,a){return Pi(i,a,r.epsilon)}})});var Qie="SparseMatrix",eae=["typed","equalScalar","Matrix"],tae=G(Qie,eae,t=>{var{typed:e,equalScalar:r,Matrix:n}=t;function i(m,b){if(!(this instanceof i))throw new SyntaxError("Constructor must be called with the new operator");if(b&&!qn(b))throw new Error("Invalid datatype: "+b);if(dt(m))a(this,m,b);else if(m&&sr(m.index)&&sr(m.ptr)&&sr(m.size))this._values=m.values,this._index=m.index,this._ptr=m.ptr,this._size=m.size,this._datatype=b||m.datatype;else if(sr(m))s(this,m,b);else{if(m)throw new TypeError("Unsupported type of data ("+xr(m)+")");this._values=[],this._index=[],this._ptr=[0],this._size=[0,0],this._datatype=b}}function a(m,b,y){b.type==="SparseMatrix"?(m._values=b._values?xt(b._values):void 0,m._index=xt(b._index),m._ptr=xt(b._ptr),m._size=xt(b._size),m._datatype=y||b._datatype):s(m,b.valueOf(),y||b._datatype)}function s(m,b,y){m._values=[],m._index=[],m._ptr=[],m._datatype=y;var S=b.length,x=0,_=r,A=0;if(qn(y)&&(_=e.find(r,[y,y])||r,A=e.convert(0,y)),S>0){var w=0;do{m._ptr.push(m._index.length);for(var C=0;C");if(x.length===1){var N=b.dimension(0);N.forEach(function(O,F){gr(O),m.set([O,0],y[F[0]],S)})}else{var E=b.dimension(0),M=b.dimension(1);E.forEach(function(O,F){gr(O),M.forEach(function(q,V){gr(q),m.set([O,q],y[F[0]][V[0]],S)})})}}return m}i.prototype.get=function(m){if(!sr(m))throw new TypeError("Array expected");if(m.length!==this._size.length)throw new kt(m.length,this._size.length);if(!this._values)throw new Error("Cannot invoke get on a Pattern only matrix");var b=m[0],y=m[1];gr(b,this._size[0]),gr(y,this._size[1]);var S=l(b,this._ptr[y],this._ptr[y+1],this._index);return S_-1||x>A-1)&&(h(this,Math.max(S+1,_),Math.max(x+1,A),y),_=this._size[0],A=this._size[1]),gr(S,_),gr(x,A);var N=l(S,this._ptr[x],this._ptr[x+1],this._index);return NArray.isArray(_)&&_.length===1?_[0]:_);if(S.length!==2)throw new Error("Only two dimensions matrix are supported");S.forEach(function(_){if(!Ct(_)||!ot(_)||_<0)throw new TypeError("Invalid size, must contain positive integers (size: "+Rt(S)+")")});var x=y?this.clone():this;return h(x,S[0],S[1],b)};function h(m,b,y,S){var x=S||0,_=r,A=0;qn(m._datatype)&&(_=e.find(r,[m._datatype,m._datatype])||r,A=e.convert(0,m._datatype),x=e.convert(x,m._datatype));var w=!_(x,A),C=m._size[0],N=m._size[1],E,M,O;if(y>N){for(M=N;MC){if(w){var F=0;for(M=0;Mb-1&&(m._values.splice(O,1),m._index.splice(O,1),V++)}m._ptr[M]=m._values.length}return m._size[0]=b,m._size[1]=y,m}i.prototype.reshape=function(m,b){if(!sr(m))throw new TypeError("Array expected");if(m.length!==2)throw new Error("Sparse matrices can only be reshaped in two dimensions");m.forEach(function($){if(!Ct($)||!ot($)||$<=-2||$===0)throw new TypeError("Invalid size, must contain positive integers or -1 (size: "+Rt(m)+")")});var y=this._size[0]*this._size[1];m=ow(m,y);var S=m[0]*m[1];if(y!==S)throw new Error("Reshaping sparse matrix will result in the wrong number of elements");var x=b?this.clone():this;if(this._size[0]===m[0]&&this._size[1]===m[1])return x;for(var _=[],A=0;A=b&&B<=y&&O(m._values[H],B-b,F-S)}else{for(var k={},K=q;K "+(this._values?Rt(this._values[C],m):"X")}return x},i.prototype.toString=function(){return Rt(this.toArray())},i.prototype.toJSON=function(){return{mathjs:"SparseMatrix",values:this._values,index:this._index,ptr:this._ptr,size:this._size,datatype:this._datatype}},i.prototype.diagonal=function(m){if(m){if(Mt(m)&&(m=m.toNumber()),!Ct(m)||!ot(m))throw new TypeError("The parameter k must be an integer number")}else m=0;var b=m>0?m:0,y=m<0?-m:0,S=this._size[0],x=this._size[1],_=Math.min(S-y,x-b),A=[],w=[],C=[];C[0]=0;for(var N=b;N0?y:0,C=y<0?-y:0,N=m[0],E=m[1],M=Math.min(N-C,E-w),O;if(sr(b)){if(b.length!==M)throw new Error("Invalid value array length");O=function(se){return b[se]}}else if(dt(b)){var F=b.size();if(F.length!==1||F[0]!==M)throw new Error("Invalid matrix length");O=function(se){return b.get([se])}}else O=function(){return b};for(var q=[],V=[],H=[],B=0;B=0&&k=C||x[E]!==b)){var O=S?S[N]:void 0;x.splice(E,0,b),S&&S.splice(E,0,O),x.splice(E<=N?N+1:N,1),S&&S.splice(E<=N?N+1:N,1);continue}if(E=C||x[N]!==m)){var F=S?S[E]:void 0;x.splice(N,0,m),S&&S.splice(N,0,F),x.splice(N<=E?E+1:E,1),S&&S.splice(N<=E?E+1:E,1)}}},i},{isClass:!0}),rae="number",nae=["typed"];function iae(t){var e=t.match(/(0[box])([0-9a-fA-F]*)\.([0-9a-fA-F]*)/);if(e){var r={"0b":2,"0o":8,"0x":16}[e[1]],n=e[2],i=e[3];return{input:t,radix:r,integerPart:n,fractionalPart:i}}else return null}function aae(t){for(var e=parseInt(t.integerPart,t.radix),r=0,n=0;n{var{typed:e}=t,r=e("number",{"":function(){return 0},number:function(i){return i},string:function(i){if(i==="NaN")return NaN;var a=iae(i);if(a)return aae(a);var s=0,o=i.match(/(0[box][0-9a-fA-F]*)i([0-9]*)/);o&&(s=Number(o[2]),i=o[1]);var u=Number(i);if(isNaN(u))throw new SyntaxError('String "'+i+'" is not a valid number');if(o){if(u>2**s-1)throw new SyntaxError('String "'.concat(i,'" is out of range'));u>=2**(s-1)&&(u=u-2**s)}return u},BigNumber:function(i){return i.toNumber()},Fraction:function(i){return i.valueOf()},Unit:e.referToSelf(n=>i=>{var a=i.clone();return a.value=n(i.value),a}),null:function(i){return 0},"Unit, string | Unit":function(i,a){return i.toNumber(a)},"Array | Matrix":e.referToSelf(n=>i=>Bt(i,n))});return r.fromJSON=function(n){return parseFloat(n.value)},r}),Z2="string",oae=["typed"],uae=G(Z2,oae,t=>{var{typed:e}=t;return e(Z2,{"":function(){return""},number:Lu,null:function(n){return"null"},boolean:function(n){return n+""},string:function(n){return n},"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r)),any:function(n){return String(n)}})}),K2="boolean",lae=["typed"],cae=G(K2,lae,t=>{var{typed:e}=t;return e(K2,{"":function(){return!1},boolean:function(n){return n},number:function(n){return!!n},null:function(n){return!1},BigNumber:function(n){return!n.isZero()},string:function(n){var i=n.toLowerCase();if(i==="true")return!0;if(i==="false")return!1;var a=Number(n);if(n!==""&&!isNaN(a))return!!a;throw new Error('Cannot convert "'+n+'" to a boolean')},"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),fae="bignumber",hae=["typed","BigNumber"],dae=G(fae,hae,t=>{var{typed:e,BigNumber:r}=t;return e("bignumber",{"":function(){return new r(0)},number:function(i){return new r(i+"")},string:function(i){var a=i.match(/(0[box][0-9a-fA-F]*)i([0-9]*)/);if(a){var s=a[2],o=r(a[1]),u=new r(2).pow(Number(s));if(o.gt(u.sub(1)))throw new SyntaxError('String "'.concat(i,'" is out of range'));var l=new r(2).pow(Number(s)-1);return o.gte(l)?o.sub(u):o}return new r(i)},BigNumber:function(i){return i},Unit:e.referToSelf(n=>i=>{var a=i.clone();return a.value=n(i.value),a}),Fraction:function(i){return new r(i.n).div(i.d).times(i.s)},null:function(i){return new r(0)},"Array | Matrix":e.referToSelf(n=>i=>Bt(i,n))})}),pae="complex",mae=["typed","Complex"],vae=G(pae,mae,t=>{var{typed:e,Complex:r}=t;return e("complex",{"":function(){return r.ZERO},number:function(i){return new r(i,0)},"number, number":function(i,a){return new r(i,a)},"BigNumber, BigNumber":function(i,a){return new r(i.toNumber(),a.toNumber())},Fraction:function(i){return new r(i.valueOf(),0)},Complex:function(i){return i.clone()},string:function(i){return r(i)},null:function(i){return r(0)},Object:function(i){if("re"in i&&"im"in i)return new r(i.re,i.im);if("r"in i&&"phi"in i||"abs"in i&&"arg"in i)return new r(i);throw new Error("Expected object with properties (re and im) or (r and phi) or (abs and arg)")},"Array | Matrix":e.referToSelf(n=>i=>Bt(i,n))})}),gae="fraction",yae=["typed","Fraction"],bae=G(gae,yae,t=>{var{typed:e,Fraction:r}=t;return e("fraction",{number:function(i){if(!isFinite(i)||isNaN(i))throw new Error(i+" cannot be represented as a fraction");return new r(i)},string:function(i){return new r(i)},"number, number":function(i,a){return new r(i,a)},null:function(i){return new r(0)},BigNumber:function(i){return new r(i.toString())},Fraction:function(i){return i},Unit:e.referToSelf(n=>i=>{var a=i.clone();return a.value=n(i.value),a}),Object:function(i){return new r(i)},"Array | Matrix":e.referToSelf(n=>i=>Bt(i,n))})}),J2="matrix",xae=["typed","Matrix","DenseMatrix","SparseMatrix"],wae=G(J2,xae,t=>{var{typed:e,Matrix:r,DenseMatrix:n,SparseMatrix:i}=t;return e(J2,{"":function(){return a([])},string:function(o){return a([],o)},"string, string":function(o,u){return a([],o,u)},Array:function(o){return a(o)},Matrix:function(o){return a(o,o.storage())},"Array | Matrix, string":a,"Array | Matrix, string, string":a});function a(s,o,u){if(o==="dense"||o==="default"||o===void 0)return new n(s,u);if(o==="sparse")return new i(s,u);throw new TypeError("Unknown matrix type "+JSON.stringify(o)+".")}}),Q2="matrixFromFunction",Sae=["typed","matrix","isZero"],_ae=G(Q2,Sae,t=>{var{typed:e,matrix:r,isZero:n}=t;return e(Q2,{"Array | Matrix, function, string, string":function(s,o,u,l){return i(s,o,u,l)},"Array | Matrix, function, string":function(s,o,u){return i(s,o,u)},"Matrix, function":function(s,o){return i(s,o,"dense")},"Array, function":function(s,o){return i(s,o,"dense").toArray()},"Array | Matrix, string, function":function(s,o,u){return i(s,u,o)},"Array | Matrix, string, string, function":function(s,o,u,l){return i(s,l,o,u)}});function i(a,s,o,u){var l;return u!==void 0?l=r(o,u):l=r(o),l.resize(a),l.forEach(function(c,f){var h=s(f);n(h)||l.set(f,h)}),l}}),eE="matrixFromRows",Aae=["typed","matrix","flatten","size"],Dae=G(eE,Aae,t=>{var{typed:e,matrix:r,flatten:n,size:i}=t;return e(eE,{"...Array":function(u){return a(u)},"...Matrix":function(u){return r(a(u.map(l=>l.toArray())))}});function a(o){if(o.length===0)throw new TypeError("At least one row is needed to construct a matrix.");var u=s(o[0]),l=[];for(var c of o){var f=s(c);if(f!==u)throw new TypeError("The vectors had different length: "+(u|0)+" ≠ "+(f|0));l.push(n(c))}return l}function s(o){var u=i(o);if(u.length===1)return u[0];if(u.length===2){if(u[0]===1)return u[1];if(u[1]===1)return u[0];throw new TypeError("At least one of the arguments is not a vector.")}else throw new TypeError("Only one- or two-dimensional vectors are supported.")}}),tE="matrixFromColumns",Eae=["typed","matrix","flatten","size"],Nae=G(tE,Eae,t=>{var{typed:e,matrix:r,flatten:n,size:i}=t;return e(tE,{"...Array":function(u){return a(u)},"...Matrix":function(u){return r(a(u.map(l=>l.toArray())))}});function a(o){if(o.length===0)throw new TypeError("At least one column is needed to construct a matrix.");for(var u=s(o[0]),l=[],c=0;c{var{typed:e}=t;return e(rE,{"Unit, Array":function(n,i){return n.splitUnit(i)}})}),nE="unaryMinus",Tae=["typed"],Oae=G(nE,Tae,t=>{var{typed:e}=t;return e(nE,{number:ZP,"Complex | BigNumber | Fraction":r=>r.neg(),Unit:e.referToSelf(r=>n=>{var i=n.clone();return i.value=e.find(r,i.valueType())(n.value),i}),"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),iE="unaryPlus",Fae=["typed","config","BigNumber"],Rae=G(iE,Fae,t=>{var{typed:e,config:r,BigNumber:n}=t;return e(iE,{number:KP,Complex:function(a){return a},BigNumber:function(a){return a},Fraction:function(a){return a},Unit:function(a){return a.clone()},"Array | Matrix":e.referToSelf(i=>a=>Bt(a,i)),"boolean | string":function(a){return r.number==="BigNumber"?new n(+a):+a}})}),aE="abs",Pae=["typed"],kae=G(aE,Pae,t=>{var{typed:e}=t;return e(aE,{number:YP,"Complex | BigNumber | Fraction | Unit":r=>r.abs(),"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),sE="apply",Bae=["typed","isInteger"],fw=G(sE,Bae,t=>{var{typed:e,isInteger:r}=t;return e(sE,{"Array | Matrix, number | BigNumber, function":function(i,a,s){if(!r(a))throw new TypeError("Integer number expected for dimension");var o=Array.isArray(i)?Et(i):i.size();if(a<0||a>=o.length)throw new Fa(a,o.length);return dt(i)?i.create(Fv(i.valueOf(),a,s)):Fv(i,a,s)}})});function Fv(t,e,r){var n,i,a;if(e<=0)if(Array.isArray(t[0])){for(a=Iae(t),i=[],n=0;n{var{typed:e}=t;return e(oE,{"number, number":jP,"Complex, Complex":function(n,i){return n.add(i)},"BigNumber, BigNumber":function(n,i){return n.plus(i)},"Fraction, Fraction":function(n,i){return n.add(i)},"Unit, Unit":e.referToSelf(r=>(n,i)=>{if(n.value===null||n.value===void 0)throw new Error("Parameter x contains a unit with undefined value");if(i.value===null||i.value===void 0)throw new Error("Parameter y contains a unit with undefined value");if(!n.equalBase(i))throw new Error("Units do not match");var a=n.clone();return a.value=e.find(r,[a.valueType(),i.valueType()])(a.value,i.value),a.fixPrefix=!1,a})})}),uE="subtractScalar",zae=["typed"],qae=G(uE,zae,t=>{var{typed:e}=t;return e(uE,{"number, number":GP,"Complex, Complex":function(n,i){return n.sub(i)},"BigNumber, BigNumber":function(n,i){return n.minus(i)},"Fraction, Fraction":function(n,i){return n.sub(i)},"Unit, Unit":e.referToSelf(r=>(n,i)=>{if(n.value===null||n.value===void 0)throw new Error("Parameter x contains a unit with undefined value");if(i.value===null||i.value===void 0)throw new Error("Parameter y contains a unit with undefined value");if(!n.equalBase(i))throw new Error("Units do not match");var a=n.clone();return a.value=e.find(r,[a.valueType(),i.valueType()])(a.value,i.value),a.fixPrefix=!1,a})})}),lE="cbrt",Uae=["config","typed","isNegative","unaryMinus","matrix","Complex","BigNumber","Fraction"],Hae=G(lE,Uae,t=>{var{config:e,typed:r,isNegative:n,unaryMinus:i,matrix:a,Complex:s,BigNumber:o,Fraction:u}=t;return r(lE,{number:rh,Complex:l,"Complex, boolean":l,BigNumber:function(h){return h.cbrt()},Unit:c});function l(f,h){var p=f.arg()/3,g=f.abs(),m=new s(rh(g),0).mul(new s(0,p).exp());if(h){var b=[m,new s(rh(g),0).mul(new s(0,p+Math.PI*2/3).exp()),new s(rh(g),0).mul(new s(0,p-Math.PI*2/3).exp())];return e.matrix==="Array"?b:a(b)}else return m}function c(f){if(f.value&&Hs(f.value)){var h=f.clone();return h.value=1,h=h.pow(1/3),h.value=l(f.value),h}else{var p=n(f.value);p&&(f.value=i(f.value));var g;Mt(f.value)?g=new o(1).div(3):hd(f.value)?g=new u(1,3):g=1/3;var m=f.pow(g);return p&&(m.value=i(m.value)),m}}}),Wae="matAlgo11xS0s",Vae=["typed","equalScalar"],Pn=G(Wae,Vae,t=>{var{typed:e,equalScalar:r}=t;return function(i,a,s,o){var u=i._values,l=i._index,c=i._ptr,f=i._size,h=i._datatype;if(!u)throw new Error("Cannot perform operation on Pattern Sparse Matrix and Scalar value");var p=f[0],g=f[1],m,b=r,y=0,S=s;typeof h=="string"&&(m=h,b=e.find(r,[m,m]),y=e.convert(0,m),a=e.convert(a,m),S=e.find(s,[m,m]));for(var x=[],_=[],A=[],w=0;w{var{typed:e,DenseMatrix:r}=t;return function(i,a,s,o){var u=i._values,l=i._index,c=i._ptr,f=i._size,h=i._datatype;if(!u)throw new Error("Cannot perform operation on Pattern Sparse Matrix and Scalar value");var p=f[0],g=f[1],m,b=s;typeof h=="string"&&(m=h,a=e.convert(a,m),b=e.find(s,[m,m]));for(var y=[],S=[],x=[],_=0;_{var{typed:e}=t;return function(i,a,s,o){var u=i._data,l=i._size,c=i._datatype,f,h=s;typeof c=="string"&&(f=c,a=e.convert(a,f),h=e.find(s,[f,f]));var p=l.length>0?r(h,0,l,l[0],u,a,o):[];return i.createDenseMatrix({data:p,size:xt(l),datatype:f})};function r(n,i,a,s,o,u,l){var c=[];if(i===a.length-1)for(var f=0;f{var{typed:e,config:r,round:n}=t;return e(s1,{number:function(a){return Pi(a,n(a),r.epsilon)?n(a):Math.ceil(a)},"number, number":function(a,s){if(Pi(a,n(a,s),r.epsilon))return n(a,s);var[o,u]="".concat(a,"e").split("e"),l=Math.ceil(Number("".concat(o,"e").concat(Number(u)+s)));return[o,u]="".concat(l,"e").split("e"),Number("".concat(o,"e").concat(Number(u)-s))}})}),Jae=G(s1,Zae,t=>{var{typed:e,config:r,round:n,matrix:i,equalScalar:a,zeros:s,DenseMatrix:o}=t,u=Pn({typed:e,equalScalar:a}),l=gn({typed:e,DenseMatrix:o}),c=Pa({typed:e}),f=Kae({typed:e,config:r,round:n});return e("ceil",{number:f.signatures.number,"number,number":f.signatures["number,number"],Complex:function(p){return p.ceil()},"Complex, number":function(p,g){return p.ceil(g)},"Complex, BigNumber":function(p,g){return p.ceil(g.toNumber())},BigNumber:function(p){return Ja(p,n(p),r.epsilon)?n(p):p.ceil()},"BigNumber, BigNumber":function(p,g){return Ja(p,n(p,g),r.epsilon)?n(p,g):p.toDecimalPlaces(g.toNumber(),Vo.ROUND_CEIL)},Fraction:function(p){return p.ceil()},"Fraction, number":function(p,g){return p.ceil(g)},"Fraction, BigNumber":function(p,g){return p.ceil(g.toNumber())},"Array | Matrix":e.referToSelf(h=>p=>Bt(p,h)),"Array, number | BigNumber":e.referToSelf(h=>(p,g)=>Bt(p,m=>h(m,g))),"SparseMatrix, number | BigNumber":e.referToSelf(h=>(p,g)=>u(p,g,h,!1)),"DenseMatrix, number | BigNumber":e.referToSelf(h=>(p,g)=>c(p,g,h,!1)),"number | Complex | Fraction | BigNumber, Array":e.referToSelf(h=>(p,g)=>c(i(g),p,h,!0).valueOf()),"number | Complex | Fraction | BigNumber, Matrix":e.referToSelf(h=>(p,g)=>a(p,0)?s(g.size(),g.storage()):g.storage()==="dense"?c(g,p,h,!0):l(g,p,h,!0))})}),cE="cube",Qae=["typed"],ese=G(cE,Qae,t=>{var{typed:e}=t;return e(cE,{number:JP,Complex:function(n){return n.mul(n).mul(n)},BigNumber:function(n){return n.times(n).times(n)},Fraction:function(n){return n.pow(3)},Unit:function(n){return n.pow(3)}})}),fE="exp",tse=["typed"],rse=G(fE,tse,t=>{var{typed:e}=t;return e(fE,{number:QP,Complex:function(n){return n.exp()},BigNumber:function(n){return n.exp()}})}),hE="expm1",nse=["typed","Complex"],ise=G(hE,nse,t=>{var{typed:e,Complex:r}=t;return e(hE,{number:ek,Complex:function(i){var a=Math.exp(i.re);return new r(a*Math.cos(i.im)-1,a*Math.sin(i.im))},BigNumber:function(i){return i.exp().minus(1)}})}),o1="fix",ase=["typed","Complex","matrix","ceil","floor","equalScalar","zeros","DenseMatrix"],sse=G(o1,["typed","ceil","floor"],t=>{var{typed:e,ceil:r,floor:n}=t;return e(o1,{number:function(a){return a>0?n(a):r(a)},"number, number":function(a,s){return a>0?n(a,s):r(a,s)}})}),ose=G(o1,ase,t=>{var{typed:e,Complex:r,matrix:n,ceil:i,floor:a,equalScalar:s,zeros:o,DenseMatrix:u}=t,l=gn({typed:e,DenseMatrix:u}),c=Pa({typed:e}),f=sse({typed:e,ceil:i,floor:a});return e("fix",{number:f.signatures.number,"number, number | BigNumber":f.signatures["number,number"],Complex:function(p){return new r(p.re>0?Math.floor(p.re):Math.ceil(p.re),p.im>0?Math.floor(p.im):Math.ceil(p.im))},"Complex, number":function(p,g){return new r(p.re>0?a(p.re,g):i(p.re,g),p.im>0?a(p.im,g):i(p.im,g))},"Complex, BigNumber":function(p,g){var m=g.toNumber();return new r(p.re>0?a(p.re,m):i(p.re,m),p.im>0?a(p.im,m):i(p.im,m))},BigNumber:function(p){return p.isNegative()?i(p):a(p)},"BigNumber, number | BigNumber":function(p,g){return p.isNegative()?i(p,g):a(p,g)},Fraction:function(p){return p.s<0?p.ceil():p.floor()},"Fraction, number | BigNumber":function(p,g){return p.s<0?i(p,g):a(p,g)},"Array | Matrix":e.referToSelf(h=>p=>Bt(p,h)),"Array | Matrix, number | BigNumber":e.referToSelf(h=>(p,g)=>Bt(p,m=>h(m,g))),"number | Complex | Fraction | BigNumber, Array":e.referToSelf(h=>(p,g)=>c(n(g),p,h,!0).valueOf()),"number | Complex | Fraction | BigNumber, Matrix":e.referToSelf(h=>(p,g)=>s(p,0)?o(g.size(),g.storage()):g.storage()==="dense"?c(g,p,h,!0):l(g,p,h,!0))})}),u1="floor",use=["typed","config","round","matrix","equalScalar","zeros","DenseMatrix"],lse=G(u1,["typed","config","round"],t=>{var{typed:e,config:r,round:n}=t;return e(u1,{number:function(a){return Pi(a,n(a),r.epsilon)?n(a):Math.floor(a)},"number, number":function(a,s){if(Pi(a,n(a,s),r.epsilon))return n(a,s);var[o,u]="".concat(a,"e").split("e"),l=Math.floor(Number("".concat(o,"e").concat(Number(u)+s)));return[o,u]="".concat(l,"e").split("e"),Number("".concat(o,"e").concat(Number(u)-s))}})}),qk=G(u1,use,t=>{var{typed:e,config:r,round:n,matrix:i,equalScalar:a,zeros:s,DenseMatrix:o}=t,u=Pn({typed:e,equalScalar:a}),l=gn({typed:e,DenseMatrix:o}),c=Pa({typed:e}),f=lse({typed:e,config:r,round:n});return e("floor",{number:f.signatures.number,"number,number":f.signatures["number,number"],Complex:function(p){return p.floor()},"Complex, number":function(p,g){return p.floor(g)},"Complex, BigNumber":function(p,g){return p.floor(g.toNumber())},BigNumber:function(p){return Ja(p,n(p),r.epsilon)?n(p):p.floor()},"BigNumber, BigNumber":function(p,g){return Ja(p,n(p,g),r.epsilon)?n(p,g):p.toDecimalPlaces(g.toNumber(),Vo.ROUND_FLOOR)},Fraction:function(p){return p.floor()},"Fraction, number":function(p,g){return p.floor(g)},"Fraction, BigNumber":function(p,g){return p.floor(g.toNumber())},"Array | Matrix":e.referToSelf(h=>p=>Bt(p,h)),"Array, number | BigNumber":e.referToSelf(h=>(p,g)=>Bt(p,m=>h(m,g))),"SparseMatrix, number | BigNumber":e.referToSelf(h=>(p,g)=>u(p,g,h,!1)),"DenseMatrix, number | BigNumber":e.referToSelf(h=>(p,g)=>c(p,g,h,!1)),"number | Complex | Fraction | BigNumber, Array":e.referToSelf(h=>(p,g)=>c(i(g),p,h,!0).valueOf()),"number | Complex | Fraction | BigNumber, Matrix":e.referToSelf(h=>(p,g)=>a(p,0)?s(g.size(),g.storage()):g.storage()==="dense"?c(g,p,h,!0):l(g,p,h,!0))})}),cse="matAlgo02xDS0",fse=["typed","equalScalar"],ka=G(cse,fse,t=>{var{typed:e,equalScalar:r}=t;return function(i,a,s,o){var u=i._data,l=i._size,c=i._datatype,f=a._values,h=a._index,p=a._ptr,g=a._size,m=a._datatype;if(l.length!==g.length)throw new kt(l.length,g.length);if(l[0]!==g[0]||l[1]!==g[1])throw new RangeError("Dimension mismatch. Matrix A ("+l+") must match Matrix B ("+g+")");if(!f)throw new Error("Cannot perform operation on Dense Matrix and Pattern Sparse Matrix");var b=l[0],y=l[1],S,x=r,_=0,A=s;typeof c=="string"&&c===m&&(S=c,x=e.find(r,[S,S]),_=e.convert(0,S),A=e.find(s,[S,S]));for(var w=[],C=[],N=[],E=0;E{var{typed:e}=t;return function(n,i,a,s){var o=n._data,u=n._size,l=n._datatype,c=i._values,f=i._index,h=i._ptr,p=i._size,g=i._datatype;if(u.length!==p.length)throw new kt(u.length,p.length);if(u[0]!==p[0]||u[1]!==p[1])throw new RangeError("Dimension mismatch. Matrix A ("+u+") must match Matrix B ("+p+")");if(!c)throw new Error("Cannot perform operation on Dense Matrix and Pattern Sparse Matrix");var m=u[0],b=u[1],y,S=0,x=a;typeof l=="string"&&l===g&&(y=l,S=e.convert(0,y),x=e.find(a,[y,y]));for(var _=[],A=0;A{var{typed:e,equalScalar:r}=t;return function(i,a,s){var o=i._values,u=i._index,l=i._ptr,c=i._size,f=i._datatype,h=a._values,p=a._index,g=a._ptr,m=a._size,b=a._datatype;if(c.length!==m.length)throw new kt(c.length,m.length);if(c[0]!==m[0]||c[1]!==m[1])throw new RangeError("Dimension mismatch. Matrix A ("+c+") must match Matrix B ("+m+")");var y=c[0],S=c[1],x,_=r,A=0,w=s;typeof f=="string"&&f===b&&(x=f,_=e.find(r,[x,x]),A=e.convert(0,x),w=e.find(s,[x,x]));var C=o&&h?[]:void 0,N=[],E=[],M=C?[]:void 0,O=C?[]:void 0,F=[],q=[],V,H,B,k;for(H=0;H{var{typed:e}=t;return function(i,a,s){var o=i._data,u=i._size,l=i._datatype,c=a._data,f=a._size,h=a._datatype,p=[];if(u.length!==f.length)throw new kt(u.length,f.length);for(var g=0;g0?r(b,0,p,p[0],o,c):[];return i.createDenseMatrix({data:y,size:p,datatype:m})};function r(n,i,a,s,o,u){var l=[];if(i===a.length-1)for(var c=0;c{var{concat:e}=t;return function(i,a){var s=Math.max(i._size.length,a._size.length);if(i._size.length===a._size.length&&i._size.every((g,m)=>g===a._size[m]))return[i,a];for(var o=r(i._size,s,0),u=r(a._size,s,0),l=[],c=0;c{var{typed:e,matrix:r,concat:n}=t,i=yse({typed:e}),a=Pa({typed:e}),s=wse({concat:n});return function(u){var l=u.elop,c=u.SD||u.DS,f;l?(f={"DenseMatrix, DenseMatrix":(m,b)=>i(...s(m,b),l),"Array, Array":(m,b)=>i(...s(r(m),r(b)),l).valueOf(),"Array, DenseMatrix":(m,b)=>i(...s(r(m),b),l),"DenseMatrix, Array":(m,b)=>i(...s(m,r(b)),l)},u.SS&&(f["SparseMatrix, SparseMatrix"]=(m,b)=>u.SS(...s(m,b),l,!1)),u.DS&&(f["DenseMatrix, SparseMatrix"]=(m,b)=>u.DS(...s(m,b),l,!1),f["Array, SparseMatrix"]=(m,b)=>u.DS(...s(r(m),b),l,!1)),c&&(f["SparseMatrix, DenseMatrix"]=(m,b)=>c(...s(b,m),l,!0),f["SparseMatrix, Array"]=(m,b)=>c(...s(r(b),m),l,!0))):(f={"DenseMatrix, DenseMatrix":e.referToSelf(m=>(b,y)=>i(...s(b,y),m)),"Array, Array":e.referToSelf(m=>(b,y)=>i(...s(r(b),r(y)),m).valueOf()),"Array, DenseMatrix":e.referToSelf(m=>(b,y)=>i(...s(r(b),y),m)),"DenseMatrix, Array":e.referToSelf(m=>(b,y)=>i(...s(b,r(y)),m))},u.SS&&(f["SparseMatrix, SparseMatrix"]=e.referToSelf(m=>(b,y)=>u.SS(...s(b,y),m,!1))),u.DS&&(f["DenseMatrix, SparseMatrix"]=e.referToSelf(m=>(b,y)=>u.DS(...s(b,y),m,!1)),f["Array, SparseMatrix"]=e.referToSelf(m=>(b,y)=>u.DS(...s(r(b),y),m,!1))),c&&(f["SparseMatrix, DenseMatrix"]=e.referToSelf(m=>(b,y)=>c(...s(y,b),m,!0)),f["SparseMatrix, Array"]=e.referToSelf(m=>(b,y)=>c(...s(r(y),b),m,!0))));var h=u.scalar||"any",p=u.Ds||u.Ss;p&&(l?(f["DenseMatrix,"+h]=(m,b)=>a(m,b,l,!1),f[h+", DenseMatrix"]=(m,b)=>a(b,m,l,!0),f["Array,"+h]=(m,b)=>a(r(m),b,l,!1).valueOf(),f[h+", Array"]=(m,b)=>a(r(b),m,l,!0).valueOf()):(f["DenseMatrix,"+h]=e.referToSelf(m=>(b,y)=>a(b,y,m,!1)),f[h+", DenseMatrix"]=e.referToSelf(m=>(b,y)=>a(y,b,m,!0)),f["Array,"+h]=e.referToSelf(m=>(b,y)=>a(r(b),y,m,!1).valueOf()),f[h+", Array"]=e.referToSelf(m=>(b,y)=>a(r(y),b,m,!0).valueOf())));var g=u.sS!==void 0?u.sS:u.Ss;return l?(u.Ss&&(f["SparseMatrix,"+h]=(m,b)=>u.Ss(m,b,l,!1)),g&&(f[h+", SparseMatrix"]=(m,b)=>g(b,m,l,!0))):(u.Ss&&(f["SparseMatrix,"+h]=e.referToSelf(m=>(b,y)=>u.Ss(b,y,m,!1))),g&&(f[h+", SparseMatrix"]=e.referToSelf(m=>(b,y)=>g(y,b,m,!0)))),l&&l.signatures&&fP(f,l.signatures),f}}),dE="mod",Ase=["typed","config","round","matrix","equalScalar","zeros","DenseMatrix","concat"],Uk=G(dE,Ase,t=>{var{typed:e,config:r,round:n,matrix:i,equalScalar:a,zeros:s,DenseMatrix:o,concat:u}=t,l=qk({typed:e,config:r,round:n,matrix:i,equalScalar:a,zeros:s,DenseMatrix:o}),c=ka({typed:e,equalScalar:a}),f=si({typed:e}),h=Hg({typed:e,equalScalar:a}),p=Pn({typed:e,equalScalar:a}),g=gn({typed:e,DenseMatrix:o}),m=_r({typed:e,matrix:i,concat:u});return e(dE,{"number, number":b,"BigNumber, BigNumber":function(S,x){return x.isZero()?S:S.sub(x.mul(l(S.div(x))))},"Fraction, Fraction":function(S,x){return x.equals(0)?S:S.sub(x.mul(l(S.div(x))))}},m({SS:h,DS:f,SD:c,Ss:p,sS:g}));function b(y,S){return S===0?y:y-S*l(y/S)}}),Dse="matAlgo01xDSid",Ese=["typed"],Zo=G(Dse,Ese,t=>{var{typed:e}=t;return function(n,i,a,s){var o=n._data,u=n._size,l=n._datatype,c=i._values,f=i._index,h=i._ptr,p=i._size,g=i._datatype;if(u.length!==p.length)throw new kt(u.length,p.length);if(u[0]!==p[0]||u[1]!==p[1])throw new RangeError("Dimension mismatch. Matrix A ("+u+") must match Matrix B ("+p+")");if(!c)throw new Error("Cannot perform operation on Dense Matrix and Pattern Sparse Matrix");var m=u[0],b=u[1],y=typeof l=="string"&&l===g?l:void 0,S=y?e.find(a,[y,y]):a,x,_,A=[];for(x=0;x{var{typed:e,equalScalar:r}=t;return function(i,a,s){var o=i._values,u=i._index,l=i._ptr,c=i._size,f=i._datatype,h=a._values,p=a._index,g=a._ptr,m=a._size,b=a._datatype;if(c.length!==m.length)throw new kt(c.length,m.length);if(c[0]!==m[0]||c[1]!==m[1])throw new RangeError("Dimension mismatch. Matrix A ("+c+") must match Matrix B ("+m+")");var y=c[0],S=c[1],x,_=r,A=0,w=s;typeof f=="string"&&f===b&&(x=f,_=e.find(r,[x,x]),A=e.convert(0,x),w=e.find(s,[x,x]));var C=o&&h?[]:void 0,N=[],E=[],M=o&&h?[]:void 0,O=o&&h?[]:void 0,F=[],q=[],V,H,B,k,K;for(H=0;H{var{typed:e,DenseMatrix:r}=t;return function(i,a,s,o){var u=i._values,l=i._index,c=i._ptr,f=i._size,h=i._datatype;if(!u)throw new Error("Cannot perform operation on Pattern Sparse Matrix and Scalar value");var p=f[0],g=f[1],m,b=s;typeof h=="string"&&(m=h,a=e.convert(a,m),b=e.find(s,[m,m]));for(var y=[],S=[],x=[],_=0;_Array.isArray(e))}var Rse=G(pE,Ose,t=>{var{typed:e,matrix:r,config:n,round:i,equalScalar:a,zeros:s,BigNumber:o,DenseMatrix:u,concat:l}=t,c=Uk({typed:e,config:n,round:i,matrix:r,equalScalar:a,zeros:s,DenseMatrix:u,concat:l}),f=Zo({typed:e}),h=hw({typed:e,equalScalar:a}),p=Ju({typed:e,DenseMatrix:u}),g=_r({typed:e,matrix:r,concat:l});return e(pE,{"number, number":m,"BigNumber, BigNumber":b,"Fraction, Fraction":(y,S)=>y.gcd(S)},g({SS:h,DS:f,Ss:p}),{[Fse]:e.referToSelf(y=>(S,x,_)=>{for(var A=y(S,x),w=0;w<_.length;w++)A=y(A,_[w]);return A}),Array:e.referToSelf(y=>S=>{if(S.length===1&&Array.isArray(S[0])&&mE(S[0]))return y(...S[0]);if(mE(S))return y(...S);throw new Qu("gcd() supports only 1d matrices!")}),Matrix:e.referToSelf(y=>S=>y(S.toArray()))});function m(y,S){if(!ot(y)||!ot(S))throw new Error("Parameters in function gcd must be integer numbers");for(var x;S!==0;)x=c(y,S),y=S,S=x;return y<0?-y:y}function b(y,S){if(!y.isInt()||!S.isInt())throw new Error("Parameters in function gcd must be integer numbers");for(var x=new o(0);!S.isZero();){var _=c(y,S);y=S,S=_}return y.lt(x)?y.neg():y}}),Pse="matAlgo06xS0S0",kse=["typed","equalScalar"],Wg=G(Pse,kse,t=>{var{typed:e,equalScalar:r}=t;return function(i,a,s){var o=i._values,u=i._size,l=i._datatype,c=a._values,f=a._size,h=a._datatype;if(u.length!==f.length)throw new kt(u.length,f.length);if(u[0]!==f[0]||u[1]!==f[1])throw new RangeError("Dimension mismatch. Matrix A ("+u+") must match Matrix B ("+f+")");var p=u[0],g=u[1],m,b=r,y=0,S=s;typeof l=="string"&&l===h&&(m=l,b=e.find(r,[m,m]),y=e.convert(0,m),S=e.find(s,[m,m]));for(var x=o&&c?[]:void 0,_=[],A=[],w=x?[]:void 0,C=[],N=[],E=0;E{var{typed:e,matrix:r,equalScalar:n,concat:i}=t,a=ka({typed:e,equalScalar:n}),s=Wg({typed:e,equalScalar:n}),o=Pn({typed:e,equalScalar:n}),u=_r({typed:e,matrix:r,concat:i}),l="number | BigNumber | Fraction | Matrix | Array",c={};return c["".concat(l,", ").concat(l,", ...").concat(l)]=e.referToSelf(h=>(p,g,m)=>{for(var b=h(p,g),y=0;yh.lcm(p)},u({SS:s,DS:a,Ss:o}),c);function f(h,p){if(!h.isInt()||!p.isInt())throw new Error("Parameters in function lcm must be integer numbers");if(h.isZero())return h;if(p.isZero())return p;for(var g=h.times(p);!p.isZero();){var m=p;p=h.mod(m),h=m}return g.div(h).abs()}}),gE="log10",Lse=["typed","config","Complex"],$se=G(gE,Lse,t=>{var{typed:e,config:r,Complex:n}=t;return e(gE,{number:function(a){return a>=0||r.predictable?rk(a):new n(a,0).log().div(Math.LN10)},Complex:function(a){return new n(a).log().div(Math.LN10)},BigNumber:function(a){return!a.isNegative()||r.predictable?a.log():new n(a.toNumber(),0).log().div(Math.LN10)},"Array | Matrix":e.referToSelf(i=>a=>Bt(a,i))})}),yE="log2",zse=["typed","config","Complex"],qse=G(yE,zse,t=>{var{typed:e,config:r,Complex:n}=t;return e(yE,{number:function(s){return s>=0||r.predictable?nk(s):i(new n(s,0))},Complex:i,BigNumber:function(s){return!s.isNegative()||r.predictable?s.log(2):i(new n(s.toNumber(),0))},"Array | Matrix":e.referToSelf(a=>s=>Bt(s,a))});function i(a){var s=Math.sqrt(a.re*a.re+a.im*a.im);return new n(Math.log2?Math.log2(s):Math.log(s)/Math.LN2,Math.atan2(a.im,a.re)/Math.LN2)}}),Use="multiplyScalar",Hse=["typed"],Wse=G(Use,Hse,t=>{var{typed:e}=t;return e("multiplyScalar",{"number, number":XP,"Complex, Complex":function(n,i){return n.mul(i)},"BigNumber, BigNumber":function(n,i){return n.times(i)},"Fraction, Fraction":function(n,i){return n.mul(i)},"number | Fraction | BigNumber | Complex, Unit":(r,n)=>n.multiply(r),"Unit, number | Fraction | BigNumber | Complex | Unit":(r,n)=>r.multiply(n)})}),bE="multiply",Vse=["typed","matrix","addScalar","multiplyScalar","equalScalar","dot"],Yse=G(bE,Vse,t=>{var{typed:e,matrix:r,addScalar:n,multiplyScalar:i,equalScalar:a,dot:s}=t,o=Pn({typed:e,equalScalar:a}),u=Pa({typed:e});function l(A,w){switch(A.length){case 1:switch(w.length){case 1:if(A[0]!==w[0])throw new RangeError("Dimension mismatch in multiplication. Vectors must have the same length");break;case 2:if(A[0]!==w[0])throw new RangeError("Dimension mismatch in multiplication. Vector length ("+A[0]+") must match Matrix rows ("+w[0]+")");break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix B has "+w.length+" dimensions)")}break;case 2:switch(w.length){case 1:if(A[1]!==w[0])throw new RangeError("Dimension mismatch in multiplication. Matrix columns ("+A[1]+") must match Vector length ("+w[0]+")");break;case 2:if(A[1]!==w[0])throw new RangeError("Dimension mismatch in multiplication. Matrix A columns ("+A[1]+") must match Matrix B rows ("+w[0]+")");break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix B has "+w.length+" dimensions)")}break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix A has "+A.length+" dimensions)")}}function c(A,w,C){if(C===0)throw new Error("Cannot multiply two empty vectors");return s(A,w)}function f(A,w){if(w.storage()!=="dense")throw new Error("Support for SparseMatrix not implemented");return h(A,w)}function h(A,w){var C=A._data,N=A._size,E=A._datatype,M=w._data,O=w._size,F=w._datatype,q=N[0],V=O[1],H,B=n,k=i;E&&F&&E===F&&typeof E=="string"&&(H=E,B=e.find(n,[H,H]),k=e.find(i,[H,H]));for(var K=[],$=0;$xe)for(var me=0,we=0;we(w,C)=>{l(Et(w),Et(C));var N=A(r(w),r(C));return dt(N)?N.valueOf():N}),"Matrix, Matrix":function(w,C){var N=w.size(),E=C.size();return l(N,E),N.length===1?E.length===1?c(w,C,N[0]):f(w,C):E.length===1?p(w,C):g(w,C)},"Matrix, Array":e.referTo("Matrix,Matrix",A=>(w,C)=>A(w,r(C))),"Array, Matrix":e.referToSelf(A=>(w,C)=>A(r(w,C.storage()),C)),"SparseMatrix, any":function(w,C){return o(w,C,i,!1)},"DenseMatrix, any":function(w,C){return u(w,C,i,!1)},"any, SparseMatrix":function(w,C){return o(C,w,i,!0)},"any, DenseMatrix":function(w,C){return u(C,w,i,!0)},"Array, any":function(w,C){return u(r(w),C,i,!1).valueOf()},"any, Array":function(w,C){return u(r(C),w,i,!0).valueOf()},"any, any":i,"any, any, ...any":e.referToSelf(A=>(w,C,N)=>{for(var E=A(w,C),M=0;M{var{typed:e,matrix:r,equalScalar:n,BigNumber:i,concat:a}=t,s=Zo({typed:e}),o=ka({typed:e,equalScalar:n}),u=Wg({typed:e,equalScalar:n}),l=Pn({typed:e,equalScalar:n}),c=_r({typed:e,matrix:r,concat:a});function f(){throw new Error("Complex number not supported in function nthRoot. Use nthRoots instead.")}return e(xE,{number:z2,"number, number":z2,BigNumber:p=>h(p,new i(2)),"BigNumber, BigNumber":h,Complex:f,"Complex, number":f,Array:e.referTo("DenseMatrix,number",p=>g=>p(r(g),2).valueOf()),DenseMatrix:e.referTo("DenseMatrix,number",p=>g=>p(g,2)),SparseMatrix:e.referTo("SparseMatrix,number",p=>g=>p(g,2)),"SparseMatrix, SparseMatrix":e.referToSelf(p=>(g,m)=>{if(m.density()===1)return u(g,m,p);throw new Error("Root must be non-zero")}),"DenseMatrix, SparseMatrix":e.referToSelf(p=>(g,m)=>{if(m.density()===1)return s(g,m,p,!1);throw new Error("Root must be non-zero")}),"Array, SparseMatrix":e.referTo("DenseMatrix,SparseMatrix",p=>(g,m)=>p(r(g),m)),"number | BigNumber, SparseMatrix":e.referToSelf(p=>(g,m)=>{if(m.density()===1)return l(m,g,p,!0);throw new Error("Root must be non-zero")})},c({scalar:"number | BigNumber",SD:o,Ss:l,sS:!1}));function h(p,g){var m=i.precision,b=i.clone({precision:m+2}),y=new i(0),S=new b(1),x=g.isNegative();if(x&&(g=g.neg()),g.isZero())throw new Error("Root must be non-zero");if(p.isNegative()&&!g.abs().mod(2).equals(1))throw new Error("Root must be odd when a is negative.");if(p.isZero())return x?new b(1/0):0;if(!p.isFinite())return x?y:p;var _=p.abs().pow(S.div(g));return _=p.isNeg()?_.neg():_,new i((x?S.div(_):_).toPrecision(m))}}),wE="sign",Xse=["typed","BigNumber","Fraction","complex"],Zse=G(wE,Xse,t=>{var{typed:e,BigNumber:r,complex:n,Fraction:i}=t;return e(wE,{number:a1,Complex:function(s){return s.im===0?n(a1(s.re)):s.sign()},BigNumber:function(s){return new r(s.cmp(0))},Fraction:function(s){return new i(s.s,1)},"Array | Matrix":e.referToSelf(a=>s=>Bt(s,a)),Unit:e.referToSelf(a=>s=>{if(!s._isDerived()&&s.units[0].unit.offset!==0)throw new TypeError("sign is ambiguous for units with offset");return e.find(a,s.valueType())(s.value)})})}),Kse="sqrt",Jse=["config","typed","Complex"],Qse=G(Kse,Jse,t=>{var{config:e,typed:r,Complex:n}=t;return r("sqrt",{number:i,Complex:function(s){return s.sqrt()},BigNumber:function(s){return!s.isNegative()||e.predictable?s.sqrt():i(s.toNumber())},Unit:function(s){return s.pow(.5)}});function i(a){return isNaN(a)?NaN:a>=0||e.predictable?Math.sqrt(a):new n(a,0).sqrt()}}),SE="square",eoe=["typed"],toe=G(SE,eoe,t=>{var{typed:e}=t;return e(SE,{number:ik,Complex:function(n){return n.mul(n)},BigNumber:function(n){return n.times(n)},Fraction:function(n){return n.mul(n)},Unit:function(n){return n.pow(2)}})}),_E="subtract",roe=["typed","matrix","equalScalar","subtractScalar","unaryMinus","DenseMatrix","concat"],noe=G(_E,roe,t=>{var{typed:e,matrix:r,equalScalar:n,subtractScalar:i,unaryMinus:a,DenseMatrix:s,concat:o}=t,u=Zo({typed:e}),l=si({typed:e}),c=Hg({typed:e,equalScalar:n}),f=Ju({typed:e,DenseMatrix:s}),h=gn({typed:e,DenseMatrix:s}),p=_r({typed:e,matrix:r,concat:o});return e(_E,{"any, any":i},p({elop:i,SS:c,DS:u,SD:l,Ss:h,sS:f}))}),AE="xgcd",ioe=["typed","config","matrix","BigNumber"],aoe=G(AE,ioe,t=>{var{typed:e,config:r,matrix:n,BigNumber:i}=t;return e(AE,{"number, number":function(o,u){var l=ak(o,u);return r.matrix==="Array"?l:n(l)},"BigNumber, BigNumber":a});function a(s,o){var u,l,c,f=new i(0),h=new i(1),p=f,g=h,m=h,b=f;if(!s.isInt()||!o.isInt())throw new Error("Parameters in function xgcd must be integer numbers");for(;!o.isZero();)l=s.div(o).floor(),c=s.mod(o),u=p,p=g.minus(l.times(p)),g=u,u=m,m=b.minus(l.times(m)),b=u,s=o,o=c;var y;return s.lt(f)?y=[s.neg(),g.neg(),b.neg()]:y=[s,s.isZero()?0:g,b],r.matrix==="Array"?y:n(y)}}),DE="invmod",soe=["typed","config","BigNumber","xgcd","equal","smaller","mod","add","isInteger"],ooe=G(DE,soe,t=>{var{typed:e,config:r,BigNumber:n,xgcd:i,equal:a,smaller:s,mod:o,add:u,isInteger:l}=t;return e(DE,{"number, number":c,"BigNumber, BigNumber":c});function c(f,h){if(!l(f)||!l(h))throw new Error("Parameters in function invmod must be integer numbers");if(f=o(f,h),a(h,0))throw new Error("Divisor must be non zero");var p=i(f,h);p=p.valueOf();var[g,m]=p;return a(g,n(1))?(m=o(m,h),s(m,n(0))&&(m=u(m,h)),m):NaN}}),uoe="matAlgo09xS0Sf",loe=["typed","equalScalar"],Hk=G(uoe,loe,t=>{var{typed:e,equalScalar:r}=t;return function(i,a,s){var o=i._values,u=i._index,l=i._ptr,c=i._size,f=i._datatype,h=a._values,p=a._index,g=a._ptr,m=a._size,b=a._datatype;if(c.length!==m.length)throw new kt(c.length,m.length);if(c[0]!==m[0]||c[1]!==m[1])throw new RangeError("Dimension mismatch. Matrix A ("+c+") must match Matrix B ("+m+")");var y=c[0],S=c[1],x,_=r,A=0,w=s;typeof f=="string"&&f===b&&(x=f,_=e.find(r,[x,x]),A=e.convert(0,x),w=e.find(s,[x,x]));var C=o&&h?[]:void 0,N=[],E=[],M=C?[]:void 0,O=[],F,q,V,H,B;for(q=0;q{var{typed:e,matrix:r,equalScalar:n,multiplyScalar:i,concat:a}=t,s=ka({typed:e,equalScalar:n}),o=Hk({typed:e,equalScalar:n}),u=Pn({typed:e,equalScalar:n}),l=_r({typed:e,matrix:r,concat:a});return e(EE,l({elop:i,SS:o,DS:s,Ss:u}))});function hoe(t,e){if(t.isFinite()&&!t.isInteger()||e.isFinite()&&!e.isInteger())throw new Error("Integers expected in function bitAnd");var r=t.constructor;if(t.isNaN()||e.isNaN())return new r(NaN);if(t.isZero()||e.eq(-1)||t.eq(e))return t;if(e.isZero()||t.eq(-1))return e;if(!t.isFinite()||!e.isFinite()){if(!t.isFinite()&&!e.isFinite())return t.isNegative()===e.isNegative()?t:new r(0);if(!t.isFinite())return e.isNegative()?t:t.isNegative()?new r(0):e;if(!e.isFinite())return t.isNegative()?e:e.isNegative()?new r(0):t}return dw(t,e,function(n,i){return n&i})}function Vh(t){if(t.isFinite()&&!t.isInteger())throw new Error("Integer expected in function bitNot");var e=t.constructor,r=e.precision;e.config({precision:1e9});var n=t.plus(new e(1));return n.s=-n.s||null,e.config({precision:r}),n}function doe(t,e){if(t.isFinite()&&!t.isInteger()||e.isFinite()&&!e.isInteger())throw new Error("Integers expected in function bitOr");var r=t.constructor;if(t.isNaN()||e.isNaN())return new r(NaN);var n=new r(-1);return t.isZero()||e.eq(n)||t.eq(e)?e:e.isZero()||t.eq(n)?t:!t.isFinite()||!e.isFinite()?!t.isFinite()&&!t.isNegative()&&e.isNegative()||t.isNegative()&&!e.isNegative()&&!e.isFinite()?n:t.isNegative()&&e.isNegative()?t.isFinite()?t:e:t.isFinite()?e:t:dw(t,e,function(i,a){return i|a})}function dw(t,e,r){var n=t.constructor,i,a,s=+(t.s<0),o=+(e.s<0);if(s){i=nm(Vh(t));for(var u=0;u0;)r(c[--p],f[--g])===m&&(b=b.plus(y)),y=y.times(S);for(;g>0;)r(h,f[--g])===m&&(b=b.plus(y)),y=y.times(S);return n.config({precision:x}),m===0&&(b.s=-b.s),b}function nm(t){for(var e=t.d,r=e[0]+"",n=1;n0)if(++o>l)for(o-=l;o--;)u+="0";else o1&&((c[p+1]===null||c[p+1]===void 0)&&(c[p+1]=0),c[p+1]+=c[p]>>1,c[p]&=1)}return c.reverse()}function poe(t,e){if(t.isFinite()&&!t.isInteger()||e.isFinite()&&!e.isInteger())throw new Error("Integers expected in function bitXor");var r=t.constructor;if(t.isNaN()||e.isNaN())return new r(NaN);if(t.isZero())return e;if(e.isZero())return t;if(t.eq(e))return new r(0);var n=new r(-1);return t.eq(n)?Vh(e):e.eq(n)?Vh(t):!t.isFinite()||!e.isFinite()?!t.isFinite()&&!e.isFinite()?n:new r(t.isNegative()===e.isNegative()?1/0:-1/0):dw(t,e,function(i,a){return i^a})}function moe(t,e){if(t.isFinite()&&!t.isInteger()||e.isFinite()&&!e.isInteger())throw new Error("Integers expected in function leftShift");var r=t.constructor;return t.isNaN()||e.isNaN()||e.isNegative()&&!e.isZero()?new r(NaN):t.isZero()||e.isZero()?t:!t.isFinite()&&!e.isFinite()?new r(NaN):e.lt(55)?t.times(Math.pow(2,e.toNumber())+""):t.times(new r(2).pow(e))}function voe(t,e){if(t.isFinite()&&!t.isInteger()||e.isFinite()&&!e.isInteger())throw new Error("Integers expected in function rightArithShift");var r=t.constructor;return t.isNaN()||e.isNaN()||e.isNegative()&&!e.isZero()?new r(NaN):t.isZero()||e.isZero()?t:e.isFinite()?e.lt(55)?t.div(Math.pow(2,e.toNumber())+"").floor():t.div(new r(2).pow(e)).floor():t.isNegative()?new r(-1):t.isFinite()?new r(0):new r(NaN)}var NE="bitAnd",goe=["typed","matrix","equalScalar","concat"],Wk=G(NE,goe,t=>{var{typed:e,matrix:r,equalScalar:n,concat:i}=t,a=ka({typed:e,equalScalar:n}),s=Wg({typed:e,equalScalar:n}),o=Pn({typed:e,equalScalar:n}),u=_r({typed:e,matrix:r,concat:i});return e(NE,{"number, number":ok,"BigNumber, BigNumber":hoe},u({SS:s,DS:a,Ss:o}))}),CE="bitNot",yoe=["typed"],boe=G(CE,yoe,t=>{var{typed:e}=t;return e(CE,{number:uk,BigNumber:Vh,"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),ME="bitOr",xoe=["typed","matrix","equalScalar","DenseMatrix","concat"],Vk=G(ME,xoe,t=>{var{typed:e,matrix:r,equalScalar:n,DenseMatrix:i,concat:a}=t,s=Zo({typed:e}),o=hw({typed:e,equalScalar:n}),u=Ju({typed:e,DenseMatrix:i}),l=_r({typed:e,matrix:r,concat:a});return e(ME,{"number, number":lk,"BigNumber, BigNumber":doe},l({SS:o,DS:s,Ss:u}))}),woe="matAlgo07xSSf",Soe=["typed","DenseMatrix"],as=G(woe,Soe,t=>{var{typed:e,DenseMatrix:r}=t;return function(a,s,o){var u=a._size,l=a._datatype,c=s._size,f=s._datatype;if(u.length!==c.length)throw new kt(u.length,c.length);if(u[0]!==c[0]||u[1]!==c[1])throw new RangeError("Dimension mismatch. Matrix A ("+u+") must match Matrix B ("+c+")");var h=u[0],p=u[1],g,m=0,b=o;typeof l=="string"&&l===f&&(g=l,m=e.convert(0,g),b=e.find(o,[g,g]));var y,S,x=[];for(y=0;y{var{typed:e,matrix:r,DenseMatrix:n,concat:i}=t,a=si({typed:e}),s=as({typed:e,DenseMatrix:n}),o=gn({typed:e,DenseMatrix:n}),u=_r({typed:e,matrix:r,concat:i});return e(TE,{"number, number":ck,"BigNumber, BigNumber":poe},u({SS:s,DS:a,Ss:o}))}),OE="arg",Doe=["typed"],Eoe=G(OE,Doe,t=>{var{typed:e}=t;return e(OE,{number:function(n){return Math.atan2(0,n)},BigNumber:function(n){return n.constructor.atan2(0,n)},Complex:function(n){return n.arg()},"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),FE="conj",Noe=["typed"],Coe=G(FE,Noe,t=>{var{typed:e}=t;return e(FE,{"number | BigNumber | Fraction":r=>r,Complex:r=>r.conjugate(),"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),RE="im",Moe=["typed"],Toe=G(RE,Moe,t=>{var{typed:e}=t;return e(RE,{number:()=>0,"BigNumber | Fraction":r=>r.mul(0),Complex:r=>r.im,"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),PE="re",Ooe=["typed"],Foe=G(PE,Ooe,t=>{var{typed:e}=t;return e(PE,{"number | BigNumber | Fraction":r=>r,Complex:r=>r.re,"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),kE="not",Roe=["typed"],Poe=G(kE,Roe,t=>{var{typed:e}=t;return e(kE,{"null | undefined":()=>!0,number:mk,Complex:function(n){return n.re===0&&n.im===0},BigNumber:function(n){return n.isZero()||n.isNaN()},Unit:e.referToSelf(r=>n=>e.find(r,n.valueType())(n.value)),"Array | Matrix":e.referToSelf(r=>n=>Bt(n,r))})}),BE="or",koe=["typed","matrix","equalScalar","DenseMatrix","concat"],Yk=G(BE,koe,t=>{var{typed:e,matrix:r,equalScalar:n,DenseMatrix:i,concat:a}=t,s=si({typed:e}),o=Hg({typed:e,equalScalar:n}),u=gn({typed:e,DenseMatrix:i}),l=_r({typed:e,matrix:r,concat:a});return e(BE,{"number, number":vk,"Complex, Complex":function(f,h){return f.re!==0||f.im!==0||h.re!==0||h.im!==0},"BigNumber, BigNumber":function(f,h){return!f.isZero()&&!f.isNaN()||!h.isZero()&&!h.isNaN()},"Unit, Unit":e.referToSelf(c=>(f,h)=>c(f.value||0,h.value||0))},l({SS:o,DS:s,Ss:u}))}),IE="xor",Boe=["typed","matrix","DenseMatrix","concat"],Ioe=G(IE,Boe,t=>{var{typed:e,matrix:r,DenseMatrix:n,concat:i}=t,a=si({typed:e}),s=as({typed:e,DenseMatrix:n}),o=gn({typed:e,DenseMatrix:n}),u=_r({typed:e,matrix:r,concat:i});return e(IE,{"number, number":gk,"Complex, Complex":function(c,f){return(c.re!==0||c.im!==0)!=(f.re!==0||f.im!==0)},"BigNumber, BigNumber":function(c,f){return(!c.isZero()&&!c.isNaN())!=(!f.isZero()&&!f.isNaN())},"Unit, Unit":e.referToSelf(l=>(c,f)=>l(c.value||0,f.value||0))},u({SS:s,DS:a,Ss:o}))}),LE="concat",Loe=["typed","matrix","isInteger"],jk=G(LE,Loe,t=>{var{typed:e,matrix:r,isInteger:n}=t;return e(LE,{"...Array | Matrix | number | BigNumber":function(a){var s,o=a.length,u=-1,l,c=!1,f=[];for(s=0;s0&&u>l)throw new Fa(u,l+1)}else{var p=xt(h).valueOf(),g=Et(p);if(f[s]=p,l=u,u=g.length-1,s>0&&u!==l)throw new kt(l+1,u+1)}}if(f.length===0)throw new SyntaxError("At least one matrix expected");for(var m=f.shift();f.length;)m=AP(m,f.shift(),u);return c?r(m):m},"...string":function(a){return a.join("")}})}),$E="column",$oe=["typed","Index","matrix","range"],Gk=G($E,$oe,t=>{var{typed:e,Index:r,matrix:n,range:i}=t;return e($E,{"Matrix, number":a,"Array, number":function(o,u){return a(n(xt(o)),u).valueOf()}});function a(s,o){if(s.size().length!==2)throw new Error("Only two dimensional matrix is supported");gr(o,s.size()[1]);var u=i(0,s.size()[0]),l=new r(u,o),c=s.subset(l);return dt(c)?c:n([[c]])}}),zE="count",zoe=["typed","size","prod"],qoe=G(zE,zoe,t=>{var{typed:e,size:r,prod:n}=t;return e(zE,{string:function(a){return a.length},"Matrix | Array":function(a){return n(r(a))}})}),qE="cross",Uoe=["typed","matrix","subtract","multiply"],Hoe=G(qE,Uoe,t=>{var{typed:e,matrix:r,subtract:n,multiply:i}=t;return e(qE,{"Matrix, Matrix":function(o,u){return r(a(o.toArray(),u.toArray()))},"Matrix, Array":function(o,u){return r(a(o.toArray(),u))},"Array, Matrix":function(o,u){return r(a(o,u.toArray()))},"Array, Array":a});function a(s,o){var u=Math.max(Et(s).length,Et(o).length);s=wv(s),o=wv(o);var l=Et(s),c=Et(o);if(l.length!==1||c.length!==1||l[0]!==3||c[0]!==3)throw new RangeError("Vectors with length 3 expected (Size A = ["+l.join(", ")+"], B = ["+c.join(", ")+"])");var f=[n(i(s[1],o[2]),i(s[2],o[1])),n(i(s[2],o[0]),i(s[0],o[2])),n(i(s[0],o[1]),i(s[1],o[0]))];return u>1?[f]:f}}),UE="diag",Woe=["typed","matrix","DenseMatrix","SparseMatrix"],Voe=G(UE,Woe,t=>{var{typed:e,matrix:r,DenseMatrix:n,SparseMatrix:i}=t;return e(UE,{Array:function(l){return a(l,0,Et(l),null)},"Array, number":function(l,c){return a(l,c,Et(l),null)},"Array, BigNumber":function(l,c){return a(l,c.toNumber(),Et(l),null)},"Array, string":function(l,c){return a(l,0,Et(l),c)},"Array, number, string":function(l,c,f){return a(l,c,Et(l),f)},"Array, BigNumber, string":function(l,c,f){return a(l,c.toNumber(),Et(l),f)},Matrix:function(l){return a(l,0,l.size(),l.storage())},"Matrix, number":function(l,c){return a(l,c,l.size(),l.storage())},"Matrix, BigNumber":function(l,c){return a(l,c.toNumber(),l.size(),l.storage())},"Matrix, string":function(l,c){return a(l,0,l.size(),c)},"Matrix, number, string":function(l,c,f){return a(l,c,l.size(),f)},"Matrix, BigNumber, string":function(l,c,f){return a(l,c.toNumber(),l.size(),f)}});function a(u,l,c,f){if(!ot(l))throw new TypeError("Second parameter in function diag must be an integer");var h=l>0?l:0,p=l<0?-l:0;switch(c.length){case 1:return s(u,l,f,c[0],p,h);case 2:return o(u,l,f,c,p,h)}throw new RangeError("Matrix for function diag must be 2 dimensional")}function s(u,l,c,f,h,p){var g=[f+h,f+p];if(c&&c!=="sparse"&&c!=="dense")throw new TypeError("Unknown matrix type ".concat(c,'"'));var m=c==="sparse"?i.diagonal(g,u,l):n.diagonal(g,u,l);return c!==null?m:m.valueOf()}function o(u,l,c,f,h,p){if(dt(u)){var g=u.diagonal(l);return c!==null?c!==g.storage()?r(g,c):g:g.valueOf()}for(var m=Math.min(f[0]-h,f[1]-p),b=[],y=0;y=2&&m.push("index: ".concat(xr(r))),p.length>=3&&m.push("array: ".concat(xr(n))),new TypeError("Function ".concat(i," cannot apply callback arguments ")+"".concat(t.name,"(").concat(m.join(", "),") at index ").concat(JSON.stringify(r)))}else throw new TypeError("Function ".concat(i," cannot apply callback arguments ")+"to function ".concat(t.name,": ").concat(b.message))}}}var Yoe="filter",joe=["typed"],Goe=G(Yoe,joe,t=>{var{typed:e}=t;return e("filter",{"Array, function":HE,"Matrix, function":function(n,i){return n.create(HE(n.toArray(),i))},"Array, RegExp":Sv,"Matrix, RegExp":function(n,i){return n.create(Sv(n.toArray(),i))}})});function HE(t,e){return SP(t,function(r,n,i){return Bc(e,r,[n],i,"filter")})}var WE="flatten",Xoe=["typed","matrix"],Zoe=G(WE,Xoe,t=>{var{typed:e,matrix:r}=t;return e(WE,{Array:function(i){return tr(i)},Matrix:function(i){var a=tr(i.toArray());return r(a)}})}),VE="forEach",Koe=["typed"],Joe=G(VE,Koe,t=>{var{typed:e}=t;return e(VE,{"Array, function":Qoe,"Matrix, function":function(n,i){n.forEach(i)}})});function Qoe(t,e){var r=function n(i,a){if(Array.isArray(i))Bg(i,function(s,o){n(s,a.concat(o))});else return Bc(e,i,a,t,"forEach")};r(t,[])}var YE="getMatrixDataType",eue=["typed"],tue=G(YE,eue,t=>{var{typed:e}=t;return e(YE,{Array:function(n){return Uh(n,xr)},Matrix:function(n){return n.getDataType()}})}),jE="identity",rue=["typed","config","matrix","BigNumber","DenseMatrix","SparseMatrix"],nue=G(jE,rue,t=>{var{typed:e,config:r,matrix:n,BigNumber:i,DenseMatrix:a,SparseMatrix:s}=t;return e(jE,{"":function(){return r.matrix==="Matrix"?n([]):[]},string:function(c){return n(c)},"number | BigNumber":function(c){return u(c,c,r.matrix==="Matrix"?"dense":void 0)},"number | BigNumber, string":function(c,f){return u(c,c,f)},"number | BigNumber, number | BigNumber":function(c,f){return u(c,f,r.matrix==="Matrix"?"dense":void 0)},"number | BigNumber, number | BigNumber, string":function(c,f,h){return u(c,f,h)},Array:function(c){return o(c)},"Array, string":function(c,f){return o(c,f)},Matrix:function(c){return o(c.valueOf(),c.storage())},"Matrix, string":function(c,f){return o(c.valueOf(),f)}});function o(l,c){switch(l.length){case 0:return c?n(c):[];case 1:return u(l[0],l[0],c);case 2:return u(l[0],l[1],c);default:throw new Error("Vector containing two values expected")}}function u(l,c,f){var h=Mt(l)||Mt(c)?i:null;if(Mt(l)&&(l=l.toNumber()),Mt(c)&&(c=c.toNumber()),!ot(l)||l<1)throw new Error("Parameters in function identity must be positive integers");if(!ot(c)||c<1)throw new Error("Parameters in function identity must be positive integers");var p=h?new i(1):1,g=h?new h(0):0,m=[l,c];if(f){if(f==="sparse")return s.diagonal(m,p,0,g);if(f==="dense")return a.diagonal(m,p,0,g);throw new TypeError('Unknown matrix type "'.concat(f,'"'))}for(var b=bc([],m,g),y=l{var{typed:e,matrix:r,multiplyScalar:n}=t;return e(GE,{"Matrix, Matrix":function(s,o){return r(i(s.toArray(),o.toArray()))},"Matrix, Array":function(s,o){return r(i(s.toArray(),o))},"Array, Matrix":function(s,o){return r(i(s,o.toArray()))},"Array, Array":i});function i(a,s){if(Et(a).length===1&&(a=[a]),Et(s).length===1&&(s=[s]),Et(a).length>2||Et(s).length>2)throw new RangeError("Vectors with dimensions greater then 2 are not supported expected (Size x = "+JSON.stringify(a.length)+", y = "+JSON.stringify(s.length)+")");var o=[],u=[];return a.map(function(l){return s.map(function(c){return u=[],o.push(u),l.map(function(f){return c.map(function(h){return u.push(n(f,h))})})})})&&o}}),XE="map",sue=["typed"],oue=G(XE,sue,t=>{var{typed:e}=t;return e(XE,{"Array, function":uue,"Matrix, function":function(n,i){return n.map(i)}})});function uue(t,e){var r=function n(i,a){return Array.isArray(i)?i.map(function(s,o){return n(s,a.concat(o))}):Bc(e,i,a,t,"map")};return r(t,[])}var ZE="diff",lue=["typed","matrix","subtract","number"],Xk=G(ZE,lue,t=>{var{typed:e,matrix:r,subtract:n,number:i}=t;return e(ZE,{"Array | Matrix":function(c){return dt(c)?r(s(c.toArray())):s(c)},"Array | Matrix, number":function(c,f){if(!ot(f))throw new RangeError("Dimension must be a whole number");return dt(c)?r(a(c.toArray(),f)):a(c,f)},"Array, BigNumber":e.referTo("Array,number",l=>(c,f)=>l(c,i(f))),"Matrix, BigNumber":e.referTo("Matrix,number",l=>(c,f)=>l(c,i(f)))});function a(l,c){if(dt(l)&&(l=l.toArray()),!Array.isArray(l))throw RangeError("Array/Matrix does not have that many dimensions");if(c>0){var f=[];return l.forEach(h=>{f.push(a(h,c-1))}),f}else{if(c===0)return s(l);throw RangeError("Cannot have negative dimension")}}function s(l){for(var c=[],f=l.length,h=1;h{var{typed:e,config:r,matrix:n,BigNumber:i}=t;return e("ones",{"":function(){return r.matrix==="Array"?a([]):a([],"default")},"...number | BigNumber | string":function(l){var c=l[l.length-1];if(typeof c=="string"){var f=l.pop();return a(l,f)}else return r.matrix==="Array"?a(l):a(l,"default")},Array:a,Matrix:function(l){var c=l.storage();return a(l.valueOf(),c)},"Array | Matrix, string":function(l,c){return a(l.valueOf(),c)}});function a(u,l){var c=s(u),f=c?new i(1):1;if(o(u),l){var h=n(l);return u.length>0?h.resize(u,f):h}else{var p=[];return u.length>0?bc(p,u,f):p}}function s(u){var l=!1;return u.forEach(function(c,f,h){Mt(c)&&(l=!0,h[f]=c.toNumber())}),l}function o(u){u.forEach(function(l){if(typeof l!="number"||!ot(l)||l<0)throw new Error("Parameters in function ones must be positive integers")})}});function pw(){throw new Error('No "bignumber" implementation available')}function Zk(){throw new Error('No "fraction" implementation available')}function Kk(){throw new Error('No "matrix" implementation available')}var KE="range",due=["typed","config","?matrix","?bignumber","smaller","smallerEq","larger","largerEq","add","isPositive"],Jk=G(KE,due,t=>{var{typed:e,config:r,matrix:n,bignumber:i,smaller:a,smallerEq:s,larger:o,largerEq:u,add:l,isPositive:c}=t;return e(KE,{string:h,"string, boolean":h,"number, number":function(b,y){return f(p(b,y,1,!1))},"number, number, number":function(b,y,S){return f(p(b,y,S,!1))},"number, number, boolean":function(b,y,S){return f(p(b,y,1,S))},"number, number, number, boolean":function(b,y,S,x){return f(p(b,y,S,x))},"BigNumber, BigNumber":function(b,y){var S=b.constructor;return f(p(b,y,new S(1),!1))},"BigNumber, BigNumber, BigNumber":function(b,y,S){return f(p(b,y,S,!1))},"BigNumber, BigNumber, boolean":function(b,y,S){var x=b.constructor;return f(p(b,y,new x(1),S))},"BigNumber, BigNumber, BigNumber, boolean":function(b,y,S,x){return f(p(b,y,S,x))},"Unit, Unit, Unit":function(b,y,S){return f(p(b,y,S,!1))},"Unit, Unit, Unit, boolean":function(b,y,S,x){return f(p(b,y,S,x))}});function f(m){return r.matrix==="Matrix"?n?n(m):Kk():m}function h(m,b){var y=g(m);if(!y)throw new SyntaxError('String "'+m+'" is no valid range');return r.number==="BigNumber"?(i===void 0&&pw(),f(p(i(y.start),i(y.end),i(y.step)))):f(p(y.start,y.end,y.step,b))}function p(m,b,y,S){for(var x=[],_=c(y)?S?s:a:S?u:o,A=m;_(A,b);)x.push(A),A=l(A,y);return x}function g(m){var b=m.split(":"),y=b.map(function(x){return Number(x)}),S=y.some(function(x){return isNaN(x)});if(S)return null;switch(y.length){case 2:return{start:y[0],end:y[1],step:1};case 3:return{start:y[0],end:y[2],step:y[1]};default:return null}}}),JE="reshape",pue=["typed","isInteger","matrix"],mue=G(JE,pue,t=>{var{typed:e,isInteger:r}=t;return e(JE,{"Matrix, Array":function(i,a){return i.reshape(a,!0)},"Array, Array":function(i,a){return a.forEach(function(s){if(!r(s))throw new TypeError("Invalid size for dimension: "+s)}),sw(i,a)}})}),vue="resize",gue=["config","matrix"],yue=G(vue,gue,t=>{var{config:e,matrix:r}=t;return function(a,s,o){if(arguments.length!==2&&arguments.length!==3)throw new Qu("resize",arguments.length,2,3);if(dt(s)&&(s=s.valueOf()),Mt(s[0])&&(s=s.map(function(c){return Mt(c)?c.toNumber():c})),dt(a))return a.resize(s,o,!0);if(typeof a=="string")return n(a,s,o);var u=Array.isArray(a)?!1:e.matrix!=="Array";if(s.length===0){for(;Array.isArray(a);)a=a[0];return xt(a)}else{Array.isArray(a)||(a=[a]),a=xt(a);var l=bc(a,s,o);return u?r(l):l}};function n(i,a,s){if(s!==void 0){if(typeof s!="string"||s.length!==1)throw new TypeError("Single character expected as defaultValue")}else s=" ";if(a.length!==1)throw new kt(a.length,1);var o=a[0];if(typeof o!="number"||!ot(o))throw new TypeError("Invalid size, must contain positive integers (size: "+Rt(a)+")");if(i.length>o)return i.substring(0,o);if(i.length{var{typed:e,multiply:r,rotationMatrix:n}=t;return e(QE,{"Array , number | BigNumber | Complex | Unit":function(s,o){i(s,2);var u=r(n(o),s);return u.toArray()},"Matrix , number | BigNumber | Complex | Unit":function(s,o){return i(s,2),r(n(o),s)},"Array, number | BigNumber | Complex | Unit, Array | Matrix":function(s,o,u){i(s,3);var l=r(n(o,u),s);return l},"Matrix, number | BigNumber | Complex | Unit, Array | Matrix":function(s,o,u){return i(s,3),r(n(o,u),s)}});function i(a,s){var o=Array.isArray(a)?Et(a):a.size();if(o.length>2)throw new RangeError("Vector must be of dimensions 1x".concat(s));if(o.length===2&&o[1]!==1)throw new RangeError("Vector must be of dimensions 1x".concat(s));if(o[0]!==s)throw new RangeError("Vector must be of dimensions 1x".concat(s))}}),eN="rotationMatrix",wue=["typed","config","multiplyScalar","addScalar","unaryMinus","norm","matrix","BigNumber","DenseMatrix","SparseMatrix","cos","sin"],Sue=G(eN,wue,t=>{var{typed:e,config:r,multiplyScalar:n,addScalar:i,unaryMinus:a,norm:s,BigNumber:o,matrix:u,DenseMatrix:l,SparseMatrix:c,cos:f,sin:h}=t;return e(eN,{"":function(){return r.matrix==="Matrix"?u([]):[]},string:function(x){return u(x)},"number | BigNumber | Complex | Unit":function(x){return p(x,r.matrix==="Matrix"?"dense":void 0)},"number | BigNumber | Complex | Unit, string":function(x,_){return p(x,_)},"number | BigNumber | Complex | Unit, Array":function(x,_){var A=u(_);return g(A),y(x,A,void 0)},"number | BigNumber | Complex | Unit, Matrix":function(x,_){g(_);var A=_.storage()||(r.matrix==="Matrix"?"dense":void 0);return y(x,_,A)},"number | BigNumber | Complex | Unit, Array, string":function(x,_,A){var w=u(_);return g(w),y(x,w,A)},"number | BigNumber | Complex | Unit, Matrix, string":function(x,_,A){return g(_),y(x,_,A)}});function p(S,x){var _=Mt(S),A=_?new o(-1):-1,w=f(S),C=h(S),N=[[w,n(A,C)],[C,w]];return b(N,x)}function g(S){var x=S.size();if(x.length<1||x[0]!==3)throw new RangeError("Vector must be of dimensions 1x3")}function m(S){return S.reduce((x,_)=>n(x,_))}function b(S,x){if(x){if(x==="sparse")return new c(S);if(x==="dense")return new l(S);throw new TypeError('Unknown matrix type "'.concat(x,'"'))}return S}function y(S,x,_){var A=s(x);if(A===0)throw new RangeError("Rotation around zero vector");var w=Mt(S)?o:null,C=w?new w(1):1,N=w?new w(-1):-1,E=w?new w(x.get([0])/A):x.get([0])/A,M=w?new w(x.get([1])/A):x.get([1])/A,O=w?new w(x.get([2])/A):x.get([2])/A,F=f(S),q=i(C,a(F)),V=h(S),H=i(F,m([E,E,q])),B=i(m([E,M,q]),m([N,O,V])),k=i(m([E,O,q]),m([M,V])),K=i(m([E,M,q]),m([O,V])),$=i(F,m([M,M,q])),se=i(m([M,O,q]),m([N,E,V])),he=i(m([E,O,q]),m([N,M,V])),ne=i(m([M,O,q]),m([E,V])),X=i(F,m([O,O,q])),de=[[H,B,k],[K,$,se],[he,ne,X]];return b(de,_)}}),tN="row",_ue=["typed","Index","matrix","range"],Qk=G(tN,_ue,t=>{var{typed:e,Index:r,matrix:n,range:i}=t;return e(tN,{"Matrix, number":a,"Array, number":function(o,u){return a(n(xt(o)),u).valueOf()}});function a(s,o){if(s.size().length!==2)throw new Error("Only two dimensional matrix is supported");gr(o,s.size()[0]);var u=i(0,s.size()[1]),l=new r(o,u),c=s.subset(l);return dt(c)?c:n([[c]])}}),rN="size",Aue=["typed","config","?matrix"],Due=G(rN,Aue,t=>{var{typed:e,config:r,matrix:n}=t;return e(rN,{Matrix:function(a){return a.create(a.size())},Array:Et,string:function(a){return r.matrix==="Array"?[a.length]:n([a.length])},"number | Complex | BigNumber | Unit | boolean | null":function(a){return r.matrix==="Array"?[]:n?n([]):Kk()}})}),nN="squeeze",Eue=["typed","matrix"],Nue=G(nN,Eue,t=>{var{typed:e,matrix:r}=t;return e(nN,{Array:function(i){return wv(xt(i))},Matrix:function(i){var a=wv(i.toArray());return Array.isArray(a)?r(a):a},any:function(i){return xt(i)}})}),iN="subset",Cue=["typed","matrix","zeros","add"],eB=G(iN,Cue,t=>{var{typed:e,matrix:r,zeros:n,add:i}=t;return e(iN,{"Matrix, Index":function(o,u){return yc(u)?r():(xv(o,u),o.subset(u))},"Array, Index":e.referTo("Matrix, Index",function(s){return function(o,u){var l=s(r(o),u);return u.isScalar()?l:l.valueOf()}}),"Object, Index":Tue,"string, Index":Mue,"Matrix, Index, any, any":function(o,u,l,c){return yc(u)?o:(xv(o,u),o.clone().subset(u,a(l,u),c))},"Array, Index, any, any":e.referTo("Matrix, Index, any, any",function(s){return function(o,u,l,c){var f=s(r(o),u,l,c);return f.isMatrix?f.valueOf():f}}),"Array, Index, any":e.referTo("Matrix, Index, any, any",function(s){return function(o,u,l){return s(r(o),u,l,void 0).valueOf()}}),"Matrix, Index, any":e.referTo("Matrix, Index, any, any",function(s){return function(o,u,l){return s(o,u,l,void 0)}}),"string, Index, string":aN,"string, Index, string, string":aN,"Object, Index, any":Oue});function a(s,o){if(typeof s=="string")throw new Error("can't boradcast a string");if(o._isScalar)return s;var u=o.size();if(u.every(l=>l>0))try{return i(s,n(u))}catch{return s}else return s}});function Mue(t,e){if(!Og(e))throw new TypeError("Index expected");if(yc(e))return"";if(xv(Array.from(t),e),e.size().length!==1)throw new kt(e.size().length,1);var r=t.length;gr(e.min()[0],r),gr(e.max()[0],r);var n=e.dimension(0),i="";return n.forEach(function(a){i+=t.charAt(a)}),i}function aN(t,e,r,n){if(!e||e.isIndex!==!0)throw new TypeError("Index expected");if(yc(e))return t;if(xv(Array.from(t),e),e.size().length!==1)throw new kt(e.size().length,1);if(n!==void 0){if(typeof n!="string"||n.length!==1)throw new TypeError("Single character expected as defaultValue")}else n=" ";var i=e.dimension(0),a=i.size()[0];if(a!==r.length)throw new kt(i.size()[0],r.length);var s=t.length;gr(e.min()[0]),gr(e.max()[0]);for(var o=[],u=0;us)for(var l=s-1,c=o.length;l{var{typed:e,matrix:r}=t;return e(sN,{Array:s=>n(r(s)).valueOf(),Matrix:n,any:xt});function n(s){var o=s.size(),u;switch(o.length){case 1:u=s.clone();break;case 2:{var l=o[0],c=o[1];if(c===0)throw new RangeError("Cannot transpose a 2D matrix with no columns (size: "+Rt(o)+")");switch(s.storage()){case"dense":u=i(s,l,c);break;case"sparse":u=a(s,l,c);break}}break;default:throw new RangeError("Matrix must be a vector or two dimensional (size: "+Rt(o)+")")}return u}function i(s,o,u){for(var l=s._data,c=[],f,h=0;h{var{typed:e,transpose:r,conj:n}=t;return e(oN,{any:function(a){return n(r(a))}})}),uN="zeros",Bue=["typed","config","matrix","BigNumber"],Iue=G(uN,Bue,t=>{var{typed:e,config:r,matrix:n,BigNumber:i}=t;return e(uN,{"":function(){return r.matrix==="Array"?a([]):a([],"default")},"...number | BigNumber | string":function(l){var c=l[l.length-1];if(typeof c=="string"){var f=l.pop();return a(l,f)}else return r.matrix==="Array"?a(l):a(l,"default")},Array:a,Matrix:function(l){var c=l.storage();return a(l.valueOf(),c)},"Array | Matrix, string":function(l,c){return a(l.valueOf(),c)}});function a(u,l){var c=s(u),f=c?new i(0):0;if(o(u),l){var h=n(l);return u.length>0?h.resize(u,f):h}else{var p=[];return u.length>0?bc(p,u,f):p}}function s(u){var l=!1;return u.forEach(function(c,f,h){Mt(c)&&(l=!0,h[f]=c.toNumber())}),l}function o(u){u.forEach(function(l){if(typeof l!="number"||!ot(l)||l<0)throw new Error("Parameters in function zeros must be positive integers")})}}),lN="fft",Lue=["typed","matrix","addScalar","multiplyScalar","divideScalar","exp","tau","i","dotDivide","conj","pow","ceil","log2"],$ue=G(lN,Lue,t=>{var{typed:e,matrix:r,addScalar:n,multiplyScalar:i,divideScalar:a,exp:s,tau:o,i:u,dotDivide:l,conj:c,pow:f,ceil:h,log2:p}=t;return e(lN,{Array:g,Matrix:function(x){return x.create(g(x.toArray()))}});function g(S){var x=Et(S);return x.length===1?y(S,x[0]):m(S.map(_=>g(_,x.slice(1))),0)}function m(S,x){var _=Et(S);if(x!==0)return new Array(_[0]).fill(0).map((w,C)=>m(S[C],x-1));if(_.length===1)return y(S);function A(w){var C=Et(w);return new Array(C[1]).fill(0).map((N,E)=>new Array(C[0]).fill(0).map((M,O)=>w[O][E]))}return A(m(A(S),1))}function b(S){for(var x=S.length,_=s(a(i(-1,i(u,o)),x)),A=[],w=1-x;wi(S[k],A[x-1+k])),...new Array(C-x).fill(0)],E=[...new Array(x+x-1).fill(0).map((B,k)=>a(1,A[k])),...new Array(C-(x+x-1)).fill(0)],M=y(N),O=y(E),F=new Array(C).fill(0).map((B,k)=>i(M[k],O[k])),q=l(c(g(c(F))),C),V=[],H=x-1;HE%2===0)),...y(S.filter((N,E)=>E%2===1))],A=0;A{var{typed:e,fft:r,dotDivide:n,conj:i}=t;return e(cN,{"Array | Matrix":function(s){var o=dt(s)?s.size():Et(s);return n(i(r(i(s))),o.reduce((u,l)=>u*l,1))}})});function Yh(t){"@babel/helpers - typeof";return Yh=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Yh(t)}function Uue(t,e){if(Yh(t)!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e||"default");if(Yh(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function Hue(t){var e=Uue(t,"string");return Yh(e)=="symbol"?e:String(e)}function vn(t,e,r){return e=Hue(e),e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function fN(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),r.push.apply(r,n)}return r}function Wue(t){for(var e=1;e{var{typed:e,add:r,subtract:n,multiply:i,divide:a,max:s,map:o,abs:u,isPositive:l,isNegative:c,larger:f,smaller:h,matrix:p,bignumber:g,unaryMinus:m}=t;function b(N){return function(E,M,O,F){var q=!(M.length===2&&(M.every(w)||M.every(Qi)));if(q)throw new Error('"tspan" must be an Array of two numeric values or two units [tStart, tEnd]');var V=M[0],H=M[1],B=f(H,V),k=F.firstStep;if(k!==void 0&&!l(k))throw new Error('"firstStep" must be positive');var K=F.maxStep;if(K!==void 0&&!l(K))throw new Error('"maxStep" must be positive');var $=F.minStep;if($&&c($))throw new Error('"minStep" must be positive or zero');var se=[V,H,k,$,K].filter(R=>R!==void 0);if(!(se.every(w)||se.every(Qi)))throw new Error('Inconsistent type of "t" dependant variables');for(var he=1,ne=F.tol?F.tol:1e-4,X=F.minDelta?F.minDelta:.2,de=F.maxDelta?F.maxDelta:5,Se=F.maxIter?F.maxIter:1e4,ce=[V,H,...O,K,$].some(Mt),[xe,_e,me,we]=ce?[g(N.a),g(N.c),g(N.b),g(N.bp)]:[N.a,N.c,N.b,N.bp],Ee=k?B?k:m(k):a(n(H,V),he),Ce=[V],He=[O],Ue=n(me,we),J=0,te=0,ye=_(B),ee=A(B);ye(Ce[J],H);){var ue=[];Ee=ee(Ce[J],H,Ee),ue.push(E(Ce[J],He[J]));for(var le=1;le<_e.length;++le)ue.push(E(r(Ce[J],i(_e[le],Ee)),r(He[J],i(Ee,xe[le],ue))));var Ne=s(u(o(i(Ue,ue),R=>Qi(R)?R.value:R)));Ne1/4&&(Ce.push(r(Ce[J],Ee)),He.push(r(He[J],i(Ee,me,ue))),J++);var Me=.84*(ne/Ne)**(1/5);if(h(Me,X)?Me=X:f(Me,de)&&(Me=de),Me=ce?g(Me):Me,Ee=i(Ee,Me),K&&f(u(Ee),K)?Ee=B?K:m(K):$&&h(u(Ee),$)&&(Ee=B?$:m($)),te++,te>Se)throw new Error("Maximum number of iterations reached, try changing options")}return{t:Ce,y:He}}}function y(N,E,M,O){var F=[[],[.5],[0,.75],[.2222222222222222,.3333333333333333,.4444444444444444]],q=[null,1/2,3/4,1],V=[2/9,1/3,4/9,0],H=[7/24,1/4,1/3,1/8],B={a:F,c:q,b:V,bp:H};return b(B)(N,E,M,O)}function S(N,E,M,O){var F=[[],[.2],[.075,.225],[.9777777777777777,-3.7333333333333334,3.5555555555555554],[2.9525986892242035,-11.595793324188385,9.822892851699436,-.2908093278463649],[2.8462752525252526,-10.757575757575758,8.906422717743473,.2784090909090909,-.2735313036020583],[.09114583333333333,0,.44923629829290207,.6510416666666666,-.322376179245283,.13095238095238096]],q=[null,1/5,3/10,4/5,8/9,1,1],V=[35/384,0,500/1113,125/192,-2187/6784,11/84,0],H=[5179/57600,0,7571/16695,393/640,-92097/339200,187/2100,1/40],B={a:F,c:q,b:V,bp:H};return b(B)(N,E,M,O)}function x(N,E,M,O){var F=O.method?O.method:"RK45",q={RK23:y,RK45:S};if(F.toUpperCase()in q){var V=Wue({},O);return delete V.method,q[F.toUpperCase()](N,E,M,V)}else{var H=Object.keys(q).map(k=>'"'.concat(k,'"')),B="".concat(H.slice(0,-1).join(", ")," and ").concat(H.slice(-1));throw new Error('Unavailable method "'.concat(F,'". Available methods are ').concat(B))}}function _(N){return N?h:f}function A(N){var E=N?f:h;return function(M,O,F){var q=r(M,F);return E(q,O)?n(O,M):F}}function w(N){return Mt(N)||Ct(N)}function C(N,E,M,O){var F=x(N,E.toArray(),M.toArray(),O);return{t:p(F.t),y:p(F.y)}}return e("solveODE",{"function, Array, Array, Object":x,"function, Matrix, Matrix, Object":C,"function, Array, Array":(N,E,M)=>x(N,E,M,{}),"function, Matrix, Matrix":(N,E,M)=>C(N,E,M,{}),"function, Array, number | BigNumber | Unit":(N,E,M)=>{var O=x(N,E,[M],{});return{t:O.t,y:O.y.map(F=>F[0])}},"function, Matrix, number | BigNumber | Unit":(N,E,M)=>{var O=x(N,E.toArray(),[M],{});return{t:p(O.t),y:p(O.y.map(F=>F[0]))}},"function, Array, number | BigNumber | Unit, Object":(N,E,M,O)=>{var F=x(N,E,[M],O);return{t:F.t,y:F.y.map(q=>q[0])}},"function, Matrix, number | BigNumber | Unit, Object":(N,E,M,O)=>{var F=x(N,E.toArray(),[M],O);return{t:p(F.t),y:p(F.y.map(q=>q[0]))}}})}),Xue="erf",Zue=["typed"],Kue=G(Xue,Zue,t=>{var{typed:e}=t;return e("name",{number:function(s){var o=Math.abs(s);return o>=ele?ko(s):o<=Jue?ko(s)*r(o):o<=4?ko(s)*(1-n(o)):ko(s)*(1-i(o))},"Array | Matrix":e.referToSelf(a=>s=>Bt(s,a))});function r(a){var s=a*a,o=Ds[0][4]*s,u=s,l;for(l=0;l<3;l+=1)o=(o+Ds[0][l])*s,u=(u+Bl[0][l])*s;return a*(o+Ds[0][3])/(u+Bl[0][3])}function n(a){var s=Ds[1][8]*a,o=a,u;for(u=0;u<7;u+=1)s=(s+Ds[1][u])*a,o=(o+Bl[1][u])*a;var l=(s+Ds[1][7])/(o+Bl[1][7]),c=parseInt(a*16)/16,f=(a-c)*(a+c);return Math.exp(-c*c)*Math.exp(-f)*l}function i(a){var s=1/(a*a),o=Ds[2][5]*s,u=s,l;for(l=0;l<4;l+=1)o=(o+Ds[2][l])*s,u=(u+Bl[2][l])*s;var c=s*(o+Ds[2][4])/(u+Bl[2][4]);c=(Que-c)/a,s=parseInt(a*16)/16;var f=(a-s)*(a+s);return Math.exp(-s*s)*Math.exp(-f)*c}}),Jue=.46875,Que=.5641895835477563,Ds=[[3.1611237438705655,113.86415415105016,377.485237685302,3209.3775891384694,.18577770618460315],[.5641884969886701,8.883149794388377,66.11919063714163,298.6351381974001,881.952221241769,1712.0476126340707,2051.0783778260716,1230.3393547979972,21531153547440383e-24],[.30532663496123236,.36034489994980445,.12578172611122926,.016083785148742275,.0006587491615298378,.016315387137302097]],Bl=[[23.601290952344122,244.02463793444417,1282.6165260773723,2844.236833439171],[15.744926110709835,117.6939508913125,537.1811018620099,1621.3895745666903,3290.7992357334597,4362.619090143247,3439.3676741437216,1230.3393548037495],[2.568520192289822,1.8729528499234604,.5279051029514285,.06051834131244132,.0023352049762686918]],ele=Math.pow(2,53),hN="zeta",tle=["typed","config","multiply","pow","divide","factorial","equal","smallerEq","isNegative","gamma","sin","subtract","add","?Complex","?BigNumber","pi"],rle=G(hN,tle,t=>{var{typed:e,config:r,multiply:n,pow:i,divide:a,factorial:s,equal:o,smallerEq:u,isNegative:l,gamma:c,sin:f,subtract:h,add:p,Complex:g,BigNumber:m,pi:b}=t;return e(hN,{number:w=>y(w,C=>C,()=>20),BigNumber:w=>y(w,C=>new m(C),()=>Math.abs(Math.log10(r.epsilon))),Complex:S});function y(w,C,N){return o(w,0)?C(-.5):o(w,1)?C(NaN):isFinite(w)?x(w,C,N,E=>E):l(w)?C(NaN):C(1)}function S(w){return w.re===0&&w.im===0?new g(-.5):w.re===1?new g(NaN,NaN):w.re===1/0&&w.im===0?new g(1):w.im===1/0||w.re===-1/0?new g(NaN,NaN):x(w,C=>C,C=>Math.round(1.3*15+.9*Math.abs(C.im)),C=>C.re)}function x(w,C,N,E){var M=N(w);if(E(w)>-(M-1)/2)return A(w,C(M),C);var O=n(i(2,w),i(C(b),h(w,1)));return O=n(O,f(n(a(C(b),2),w))),O=n(O,c(h(1,w))),n(O,x(h(1,w),C,N,E))}function _(w,C){for(var N=w,E=w;u(E,C);E=p(E,1)){var M=a(n(s(p(C,h(E,1))),i(4,E)),n(s(h(C,E)),s(n(2,E))));N=p(N,M)}return n(C,N)}function A(w,C,N){for(var E=a(1,n(_(N(0),C),h(1,i(2,h(1,w))))),M=N(0),O=N(1);u(O,C);O=p(O,1))M=p(M,a(n((-1)**(O-1),_(O,C)),i(O,w)));return n(E,M)}}),dN="mode",nle=["typed","isNaN","isNumeric"],ile=G(dN,nle,t=>{var{typed:e,isNaN:r,isNumeric:n}=t;return e(dN,{"Array | Matrix":i,"...":function(s){return i(s)}});function i(a){a=tr(a.valueOf());var s=a.length;if(s===0)throw new Error("Cannot calculate mode of an empty array");for(var o={},u=[],l=0,c=0;cl&&(l=o[f],u=[f])}return u}});function ai(t,e,r){var n;return String(t).indexOf("Unexpected type")!==-1?(n=arguments.length>2?" (type: "+xr(r)+", value: "+JSON.stringify(r)+")":" (type: "+t.data.actual+")",new TypeError("Cannot calculate "+e+", unexpected type of argument"+n)):String(t).indexOf("complex numbers")!==-1?(n=arguments.length>2?" (type: "+xr(r)+", value: "+JSON.stringify(r)+")":"",new TypeError("Cannot calculate "+e+", no ordering relation is defined for complex numbers"+n)):t}var pN="prod",ale=["typed","config","multiplyScalar","numeric"],sle=G(pN,ale,t=>{var{typed:e,config:r,multiplyScalar:n,numeric:i}=t;return e(pN,{"Array | Matrix":a,"Array | Matrix, number | BigNumber":function(o,u){throw new Error("prod(A, dim) is not yet supported")},"...":function(o){return a(o)}});function a(s){var o;if(Gs(s,function(u){try{o=o===void 0?u:n(o,u)}catch(l){throw ai(l,"prod",u)}}),typeof o=="string"&&(o=i(o,r.number)),o===void 0)throw new Error("Cannot calculate prod of an empty array");return o}}),mN="format",ole=["typed"],ule=G(mN,ole,t=>{var{typed:e}=t;return e(mN,{any:Rt,"any, Object | function | number | BigNumber":Rt})}),vN="bin",lle=["typed","format"],cle=G(vN,lle,t=>{var{typed:e,format:r}=t;return e(vN,{"number | BigNumber":function(i){return r(i,{notation:"bin"})},"number | BigNumber, number | BigNumber":function(i,a){return r(i,{notation:"bin",wordSize:a})}})}),gN="oct",fle=["typed","format"],hle=G(gN,fle,t=>{var{typed:e,format:r}=t;return e(gN,{"number | BigNumber":function(i){return r(i,{notation:"oct"})},"number | BigNumber, number | BigNumber":function(i,a){return r(i,{notation:"oct",wordSize:a})}})}),yN="hex",dle=["typed","format"],ple=G(yN,dle,t=>{var{typed:e,format:r}=t;return e(yN,{"number | BigNumber":function(i){return r(i,{notation:"hex"})},"number | BigNumber, number | BigNumber":function(i,a){return r(i,{notation:"hex",wordSize:a})}})}),tB=/\$([\w.]+)/g,bN="print",mle=["typed"],rB=G(bN,mle,t=>{var{typed:e}=t;return e(bN,{"string, Object | Array":xN,"string, Object | Array, number | Object":xN})});function xN(t,e,r){return t.replace(tB,function(n,i){var a=i.split("."),s=e[a.shift()];for(s!==void 0&&s.isMatrix&&(s=s.toArray());a.length&&s!==void 0;){var o=a.shift();s=o?s[o]:s+"."}return s!==void 0?qn(s)?s:Rt(s,r):n})}var wN="to",vle=["typed","matrix","concat"],gle=G(wN,vle,t=>{var{typed:e,matrix:r,concat:n}=t,i=_r({typed:e,matrix:r,concat:n});return e(wN,{"Unit, Unit | string":(a,s)=>a.to(s)},i({Ds:!0}))}),SN="isPrime",yle=["typed"],ble=G(SN,yle,t=>{var{typed:e}=t;return e(SN,{number:function(n){if(n*0!==0)return!1;if(n<=3)return n>1;if(n%2===0||n%3===0)return!1;for(var i=5;i*i<=n;i+=6)if(n%i===0||n%(i+2)===0)return!1;return!0},BigNumber:function(n){if(n.toNumber()*0!==0)return!1;if(n.lte(3))return n.gt(1);if(n.mod(2).eq(0)||n.mod(3).eq(0))return!1;if(n.lt(Math.pow(2,32))){for(var i=n.toNumber(),a=5;a*a<=i;a+=6)if(i%a===0||i%(a+2)===0)return!1;return!0}function s(S,x,_){for(var A=1;!x.eq(0);)x.mod(2).eq(0)?(x=x.div(2),S=S.mul(S).mod(_)):(x=x.sub(1),A=S.mul(A).mod(_));return A}var o=n.constructor.clone({precision:n.toFixed(0).length*2});n=new o(n);for(var u=0,l=n.sub(1);l.mod(2).eq(0);)l=l.div(2),u+=1;var c=null;if(n.lt("3317044064679887385961981"))c=[2,3,5,7,11,13,17,19,23,29,31,37,41].filter(S=>Sn=>Bt(n,r))})}),xle="numeric",wle=["number","?bignumber","?fraction"],Sle=G(xle,wle,t=>{var{number:e,bignumber:r,fraction:n}=t,i={string:!0,number:!0,BigNumber:!0,Fraction:!0},a={number:s=>e(s),BigNumber:r?s=>r(s):pw,Fraction:n?s=>n(s):Zk};return function(o){var u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"number",l=arguments.length>2?arguments[2]:void 0;if(l!==void 0)throw new SyntaxError("numeric() takes one or two arguments");var c=xr(o);if(!(c in i))throw new TypeError("Cannot convert "+o+' of type "'+c+'"; valid input types are '+Object.keys(i).join(", "));if(!(u in a))throw new TypeError("Cannot convert "+o+' to type "'+u+'"; valid output types are '+Object.keys(a).join(", "));return u===c?o:a[u](o)}}),_N="divideScalar",_le=["typed","numeric"],Ale=G(_N,_le,t=>{var{typed:e,numeric:r}=t;return e(_N,{"number, number":function(i,a){return i/a},"Complex, Complex":function(i,a){return i.div(a)},"BigNumber, BigNumber":function(i,a){return i.div(a)},"Fraction, Fraction":function(i,a){return i.div(a)},"Unit, number | Complex | Fraction | BigNumber | Unit":(n,i)=>n.divide(i),"number | Fraction | Complex | BigNumber, Unit":(n,i)=>i.divideInto(n)})}),AN="pow",Dle=["typed","config","identity","multiply","matrix","inv","fraction","number","Complex"],Ele=G(AN,Dle,t=>{var{typed:e,config:r,identity:n,multiply:i,matrix:a,inv:s,number:o,fraction:u,Complex:l}=t;return e(AN,{"number, number":c,"Complex, Complex":function(g,m){return g.pow(m)},"BigNumber, BigNumber":function(g,m){return m.isInteger()||g>=0||r.predictable?g.pow(m):new l(g.toNumber(),0).pow(m.toNumber(),0)},"Fraction, Fraction":function(g,m){var b=g.pow(m);if(b!=null)return b;if(r.predictable)throw new Error("Result of pow is non-rational and cannot be expressed as a fraction");return c(g.valueOf(),m.valueOf())},"Array, number":f,"Array, BigNumber":function(g,m){return f(g,m.toNumber())},"Matrix, number":h,"Matrix, BigNumber":function(g,m){return h(g,m.toNumber())},"Unit, number | BigNumber":function(g,m){return g.pow(m)}});function c(p,g){if(r.predictable&&!ot(g)&&p<0)try{var m=u(g),b=o(m);if((g===b||Math.abs((g-b)/g)<1e-14)&&m.d%2===1)return(m.n%2===0?1:-1)*Math.pow(-p,g)}catch{}return r.predictable&&(p<-1&&g===1/0||p>-1&&p<0&&g===-1/0)?NaN:ot(g)||p>=0||r.predictable?sk(p,g):p*p<1&&g===1/0||p*p>1&&g===-1/0?0:new l(p,0).pow(g,0)}function f(p,g){if(!ot(g))throw new TypeError("For A^b, b must be an integer (value is "+g+")");var m=Et(p);if(m.length!==2)throw new Error("For A^b, A must be 2 dimensional (A has "+m.length+" dimensions)");if(m[0]!==m[1])throw new Error("For A^b, A must be square (size is "+m[0]+"x"+m[1]+")");if(g<0)try{return f(s(p),-g)}catch(S){throw S.message==="Cannot calculate inverse, determinant is zero"?new TypeError("For A^b, when A is not invertible, b must be a positive integer (value is "+g+")"):S}for(var b=n(m[0]).valueOf(),y=p;g>=1;)(g&1)===1&&(b=i(y,b)),g>>=1,y=i(y,y);return b}function h(p,g){return a(f(p.valueOf(),g))}}),Il="Number of decimals in function round must be an integer",DN="round",Nle=["typed","matrix","equalScalar","zeros","BigNumber","DenseMatrix"],Cle=G(DN,Nle,t=>{var{typed:e,matrix:r,equalScalar:n,zeros:i,BigNumber:a,DenseMatrix:s}=t,o=Pn({typed:e,equalScalar:n}),u=gn({typed:e,DenseMatrix:s}),l=Pa({typed:e});return e(DN,{number:q2,"number, number":q2,"number, BigNumber":function(f,h){if(!h.isInteger())throw new TypeError(Il);return new a(f).toDecimalPlaces(h.toNumber())},Complex:function(f){return f.round()},"Complex, number":function(f,h){if(h%1)throw new TypeError(Il);return f.round(h)},"Complex, BigNumber":function(f,h){if(!h.isInteger())throw new TypeError(Il);var p=h.toNumber();return f.round(p)},BigNumber:function(f){return f.toDecimalPlaces(0)},"BigNumber, BigNumber":function(f,h){if(!h.isInteger())throw new TypeError(Il);return f.toDecimalPlaces(h.toNumber())},Fraction:function(f){return f.round()},"Fraction, number":function(f,h){if(h%1)throw new TypeError(Il);return f.round(h)},"Fraction, BigNumber":function(f,h){if(!h.isInteger())throw new TypeError(Il);return f.round(h.toNumber())},"Unit, number, Unit":e.referToSelf(c=>function(f,h,p){var g=f.toNumeric(p);return p.multiply(c(g,h))}),"Unit, BigNumber, Unit":e.referToSelf(c=>(f,h,p)=>c(f,h.toNumber(),p)),"Unit, Unit":e.referToSelf(c=>(f,h)=>c(f,0,h)),"Array | Matrix, number, Unit":e.referToSelf(c=>(f,h,p)=>Bt(f,g=>c(g,h,p))),"Array | Matrix, BigNumber, Unit":e.referToSelf(c=>(f,h,p)=>c(f,h.toNumber(),p)),"Array | Matrix, Unit":e.referToSelf(c=>(f,h)=>c(f,0,h)),"Array | Matrix":e.referToSelf(c=>f=>Bt(f,c)),"SparseMatrix, number | BigNumber":e.referToSelf(c=>(f,h)=>o(f,h,c,!1)),"DenseMatrix, number | BigNumber":e.referToSelf(c=>(f,h)=>l(f,h,c,!1)),"Array, number | BigNumber":e.referToSelf(c=>(f,h)=>l(r(f),h,c,!1).valueOf()),"number | Complex | BigNumber | Fraction, SparseMatrix":e.referToSelf(c=>(f,h)=>n(f,0)?i(h.size(),h.storage()):u(h,f,c,!0)),"number | Complex | BigNumber | Fraction, DenseMatrix":e.referToSelf(c=>(f,h)=>n(f,0)?i(h.size(),h.storage()):l(h,f,c,!0)),"number | Complex | BigNumber | Fraction, Array":e.referToSelf(c=>(f,h)=>l(r(h),f,c,!0).valueOf())})}),EN="log",Mle=["config","typed","divideScalar","Complex"],Tle=G(EN,Mle,t=>{var{typed:e,config:r,divideScalar:n,Complex:i}=t;return e(EN,{number:function(s){return s>=0||r.predictable?Nie(s):new i(s,0).log()},Complex:function(s){return s.log()},BigNumber:function(s){return!s.isNegative()||r.predictable?s.ln():new i(s.toNumber(),0).log()},"any, any":e.referToSelf(a=>(s,o)=>n(a(s),a(o)))})}),NN="log1p",Ole=["typed","config","divideScalar","log","Complex"],Fle=G(NN,Ole,t=>{var{typed:e,config:r,divideScalar:n,log:i,Complex:a}=t;return e(NN,{number:function(u){return u>=-1||r.predictable?Dre(u):s(new a(u,0))},Complex:s,BigNumber:function(u){var l=u.plus(1);return!l.isNegative()||r.predictable?l.ln():s(new a(u.toNumber(),0))},"Array | Matrix":e.referToSelf(o=>u=>Bt(u,o)),"any, any":e.referToSelf(o=>(u,l)=>n(o(u),i(l)))});function s(o){var u=o.re+1;return new a(Math.log(Math.sqrt(u*u+o.im*o.im)),Math.atan2(o.im,u))}}),CN="nthRoots",Rle=["config","typed","divideScalar","Complex"],Ple=G(CN,Rle,t=>{var{typed:e,config:r,divideScalar:n,Complex:i}=t,a=[function(u){return new i(u,0)},function(u){return new i(0,u)},function(u){return new i(-u,0)},function(u){return new i(0,-u)}];function s(o,u){if(u<0)throw new Error("Root must be greater than zero");if(u===0)throw new Error("Root must be non-zero");if(u%1!==0)throw new Error("Root must be an integer");if(o===0||o.abs()===0)return[new i(0,0)];var l=typeof o=="number",c;(l||o.re===0||o.im===0)&&(l?c=2*+(o<0):o.im===0?c=2*+(o.re<0):c=2*+(o.im<0)+1);for(var f=o.arg(),h=o.abs(),p=[],g=Math.pow(h,1/u),m=0;m{var{typed:e,equalScalar:r,matrix:n,pow:i,DenseMatrix:a,concat:s}=t,o=si({typed:e}),u=as({typed:e,DenseMatrix:a}),l=Pn({typed:e,equalScalar:r}),c=gn({typed:e,DenseMatrix:a}),f=_r({typed:e,matrix:n,concat:s}),h={};for(var p in i.signatures)Object.prototype.hasOwnProperty.call(i.signatures,p)&&!p.includes("Matrix")&&!p.includes("Array")&&(h[p]=i.signatures[p]);var g=e(h);return e(MN,f({elop:g,SS:u,DS:o,Ss:l,sS:c}))}),TN="dotDivide",Ile=["typed","matrix","equalScalar","divideScalar","DenseMatrix","concat"],Lle=G(TN,Ile,t=>{var{typed:e,matrix:r,equalScalar:n,divideScalar:i,DenseMatrix:a,concat:s}=t,o=ka({typed:e,equalScalar:n}),u=si({typed:e}),l=as({typed:e,DenseMatrix:a}),c=Pn({typed:e,equalScalar:n}),f=gn({typed:e,DenseMatrix:a}),h=_r({typed:e,matrix:r,concat:s});return e(TN,h({elop:i,SS:l,DS:u,SD:o,Ss:c,sS:f}))});function md(t){var{DenseMatrix:e}=t;return function(n,i,a){var s=n.size();if(s.length!==2)throw new RangeError("Matrix must be two dimensional (size: "+Rt(s)+")");var o=s[0],u=s[1];if(o!==u)throw new RangeError("Matrix must be square (size: "+Rt(s)+")");var l=[];if(dt(i)){var c=i.size(),f=i._data;if(c.length===1){if(c[0]!==o)throw new RangeError("Dimension mismatch. Matrix columns must match vector length.");for(var h=0;h{var{typed:e,matrix:r,divideScalar:n,multiplyScalar:i,subtractScalar:a,equalScalar:s,DenseMatrix:o}=t,u=md({DenseMatrix:o});return e(ON,{"SparseMatrix, Array | Matrix":function(h,p){return c(h,p)},"DenseMatrix, Array | Matrix":function(h,p){return l(h,p)},"Array, Array | Matrix":function(h,p){var g=r(h),m=l(g,p);return m.valueOf()}});function l(f,h){h=u(f,h,!0);for(var p=h._data,g=f._size[0],m=f._size[1],b=[],y=f._data,S=0;S_&&(C.push(b[O]),N.push(F))}if(s(w,0))throw new Error("Linear system cannot be solved since matrix is singular");for(var q=n(A,w),V=0,H=N.length;V{var{typed:e,matrix:r,divideScalar:n,multiplyScalar:i,subtractScalar:a,equalScalar:s,DenseMatrix:o}=t,u=md({DenseMatrix:o});return e(FN,{"SparseMatrix, Array | Matrix":function(h,p){return c(h,p)},"DenseMatrix, Array | Matrix":function(h,p){return l(h,p)},"Array, Array | Matrix":function(h,p){var g=r(h),m=l(g,p);return m.valueOf()}});function l(f,h){h=u(f,h,!0);for(var p=h._data,g=f._size[0],m=f._size[1],b=[],y=f._data,S=m-1;S>=0;S--){var x=p[S][0]||0,_=void 0;if(s(x,0))_=0;else{var A=y[S][S];if(s(A,0))throw new Error("Linear system cannot be solved since matrix is singular");_=n(x,A);for(var w=S-1;w>=0;w--)p[w]=[a(p[w][0]||0,i(_,y[w][S]))]}b[S]=[_]}return new o({data:b,size:[g,1]})}function c(f,h){h=u(f,h,!0);for(var p=h._data,g=f._size[0],m=f._size[1],b=f._values,y=f._index,S=f._ptr,x=[],_=m-1;_>=0;_--){var A=p[_][0]||0;if(s(A,0))x[_]=[0];else{for(var w=0,C=[],N=[],E=S[_],M=S[_+1],O=M-1;O>=E;O--){var F=y[O];F===_?w=b[O]:F<_&&(C.push(b[O]),N.push(F))}if(s(w,0))throw new Error("Linear system cannot be solved since matrix is singular");for(var q=n(A,w),V=0,H=N.length;V{var{typed:e,matrix:r,divideScalar:n,multiplyScalar:i,subtractScalar:a,equalScalar:s,DenseMatrix:o}=t,u=md({DenseMatrix:o});return e(RN,{"SparseMatrix, Array | Matrix":function(h,p){return c(h,p)},"DenseMatrix, Array | Matrix":function(h,p){return l(h,p)},"Array, Array | Matrix":function(h,p){var g=r(h),m=l(g,p);return m.map(b=>b.valueOf())}});function l(f,h){for(var p=[u(f,h,!0)._data.map(N=>N[0])],g=f._data,m=f._size[0],b=f._size[1],y=0;ynew o({data:N.map(E=>[E]),size:[m,1]}))}function c(f,h){for(var p=[u(f,h,!0)._data.map(he=>he[0])],g=f._size[0],m=f._size[1],b=f._values,y=f._index,S=f._ptr,x=0;xx&&(C.push(b[F]),N.push(q))}if(s(O,0))if(s(w[x],0)){if(A===0){var k=[...w];k[x]=1;for(var K=0,$=N.length;K<$;K++){var se=N[K];k[se]=a(k[se],C[K])}p.push(k)}}else{if(A===0)return[];p.splice(A,1),A-=1,_-=1}else{w[x]=n(w[x],O);for(var V=0,H=N.length;Vnew o({data:he.map(ne=>[ne]),size:[g,1]}))}}),PN="usolveAll",Vle=["typed","matrix","divideScalar","multiplyScalar","subtractScalar","equalScalar","DenseMatrix"],Yle=G(PN,Vle,t=>{var{typed:e,matrix:r,divideScalar:n,multiplyScalar:i,subtractScalar:a,equalScalar:s,DenseMatrix:o}=t,u=md({DenseMatrix:o});return e(PN,{"SparseMatrix, Array | Matrix":function(h,p){return c(h,p)},"DenseMatrix, Array | Matrix":function(h,p){return l(h,p)},"Array, Array | Matrix":function(h,p){var g=r(h),m=l(g,p);return m.map(b=>b.valueOf())}});function l(f,h){for(var p=[u(f,h,!0)._data.map(N=>N[0])],g=f._data,m=f._size[0],b=f._size[1],y=b-1;y>=0;y--)for(var S=p.length,x=0;x=0;C--)w[C]=a(w[C],g[C][y]);p.push(w)}}else{if(x===0)return[];p.splice(x,1),x-=1,S-=1}else{_[y]=n(_[y],g[y][y]);for(var A=y-1;A>=0;A--)_[A]=a(_[A],i(_[y],g[A][y]))}}return p.map(N=>new o({data:N.map(E=>[E]),size:[m,1]}))}function c(f,h){for(var p=[u(f,h,!0)._data.map(he=>he[0])],g=f._size[0],m=f._size[1],b=f._values,y=f._index,S=f._ptr,x=m-1;x>=0;x--)for(var _=p.length,A=0;A<_;A++){for(var w=p[A],C=[],N=[],E=S[x],M=S[x+1],O=0,F=M-1;F>=E;F--){var q=y[F];q===x?O=b[F]:qnew o({data:he.map(ne=>[ne]),size:[g,1]}))}}),jle="matAlgo08xS0Sid",Gle=["typed","equalScalar"],mw=G(jle,Gle,t=>{var{typed:e,equalScalar:r}=t;return function(i,a,s){var o=i._values,u=i._index,l=i._ptr,c=i._size,f=i._datatype,h=a._values,p=a._index,g=a._ptr,m=a._size,b=a._datatype;if(c.length!==m.length)throw new kt(c.length,m.length);if(c[0]!==m[0]||c[1]!==m[1])throw new RangeError("Dimension mismatch. Matrix A ("+c+") must match Matrix B ("+m+")");if(!o||!h)throw new Error("Cannot perform operation on Pattern Sparse Matrices");var y=c[0],S=c[1],x,_=r,A=0,w=s;typeof f=="string"&&f===b&&(x=f,_=e.find(r,[x,x]),A=e.convert(0,x),w=e.find(s,[x,x]));for(var C=[],N=[],E=[],M=[],O=[],F,q,V,H,B=0;B{var{typed:e,matrix:r}=t;return{"Array, number":e.referTo("DenseMatrix, number",n=>(i,a)=>n(r(i),a).valueOf()),"Array, BigNumber":e.referTo("DenseMatrix, BigNumber",n=>(i,a)=>n(r(i),a).valueOf()),"number, Array":e.referTo("number, DenseMatrix",n=>(i,a)=>n(i,r(a)).valueOf()),"BigNumber, Array":e.referTo("BigNumber, DenseMatrix",n=>(i,a)=>n(i,r(a)).valueOf())}}),kN="leftShift",Xle=["typed","matrix","equalScalar","zeros","DenseMatrix","concat"],Zle=G(kN,Xle,t=>{var{typed:e,matrix:r,equalScalar:n,zeros:i,DenseMatrix:a,concat:s}=t,o=Zo({typed:e}),u=ka({typed:e,equalScalar:n}),l=mw({typed:e,equalScalar:n}),c=Ju({typed:e,DenseMatrix:a}),f=Pn({typed:e,equalScalar:n}),h=Pa({typed:e}),p=_r({typed:e,matrix:r,concat:s}),g=vw({typed:e,matrix:r});return e(kN,{"number, number":fk,"BigNumber, BigNumber":moe,"SparseMatrix, number | BigNumber":e.referToSelf(m=>(b,y)=>n(y,0)?b.clone():f(b,y,m,!1)),"DenseMatrix, number | BigNumber":e.referToSelf(m=>(b,y)=>n(y,0)?b.clone():h(b,y,m,!1)),"number | BigNumber, SparseMatrix":e.referToSelf(m=>(b,y)=>n(b,0)?i(y.size(),y.storage()):c(y,b,m,!0)),"number | BigNumber, DenseMatrix":e.referToSelf(m=>(b,y)=>n(b,0)?i(y.size(),y.storage()):h(y,b,m,!0))},g,p({SS:l,DS:o,SD:u}))}),BN="rightArithShift",Kle=["typed","matrix","equalScalar","zeros","DenseMatrix","concat"],Jle=G(BN,Kle,t=>{var{typed:e,matrix:r,equalScalar:n,zeros:i,DenseMatrix:a,concat:s}=t,o=Zo({typed:e}),u=ka({typed:e,equalScalar:n}),l=mw({typed:e,equalScalar:n}),c=Ju({typed:e,DenseMatrix:a}),f=Pn({typed:e,equalScalar:n}),h=Pa({typed:e}),p=_r({typed:e,matrix:r,concat:s}),g=vw({typed:e,matrix:r});return e(BN,{"number, number":hk,"BigNumber, BigNumber":voe,"SparseMatrix, number | BigNumber":e.referToSelf(m=>(b,y)=>n(y,0)?b.clone():f(b,y,m,!1)),"DenseMatrix, number | BigNumber":e.referToSelf(m=>(b,y)=>n(y,0)?b.clone():h(b,y,m,!1)),"number | BigNumber, SparseMatrix":e.referToSelf(m=>(b,y)=>n(b,0)?i(y.size(),y.storage()):c(y,b,m,!0)),"number | BigNumber, DenseMatrix":e.referToSelf(m=>(b,y)=>n(b,0)?i(y.size(),y.storage()):h(y,b,m,!0))},g,p({SS:l,DS:o,SD:u}))}),IN="rightLogShift",Qle=["typed","matrix","equalScalar","zeros","DenseMatrix","concat"],ece=G(IN,Qle,t=>{var{typed:e,matrix:r,equalScalar:n,zeros:i,DenseMatrix:a,concat:s}=t,o=Zo({typed:e}),u=ka({typed:e,equalScalar:n}),l=mw({typed:e,equalScalar:n}),c=Ju({typed:e,DenseMatrix:a}),f=Pn({typed:e,equalScalar:n}),h=Pa({typed:e}),p=_r({typed:e,matrix:r,concat:s}),g=vw({typed:e,matrix:r});return e(IN,{"number, number":dk,"SparseMatrix, number | BigNumber":e.referToSelf(m=>(b,y)=>n(y,0)?b.clone():f(b,y,m,!1)),"DenseMatrix, number | BigNumber":e.referToSelf(m=>(b,y)=>n(y,0)?b.clone():h(b,y,m,!1)),"number | BigNumber, SparseMatrix":e.referToSelf(m=>(b,y)=>n(b,0)?i(y.size(),y.storage()):c(y,b,m,!0)),"number | BigNumber, DenseMatrix":e.referToSelf(m=>(b,y)=>n(b,0)?i(y.size(),y.storage()):h(y,b,m,!0))},g,p({SS:l,DS:o,SD:u}))}),LN="and",tce=["typed","matrix","equalScalar","zeros","not","concat"],nB=G(LN,tce,t=>{var{typed:e,matrix:r,equalScalar:n,zeros:i,not:a,concat:s}=t,o=ka({typed:e,equalScalar:n}),u=Wg({typed:e,equalScalar:n}),l=Pn({typed:e,equalScalar:n}),c=Pa({typed:e}),f=_r({typed:e,matrix:r,concat:s});return e(LN,{"number, number":yk,"Complex, Complex":function(p,g){return(p.re!==0||p.im!==0)&&(g.re!==0||g.im!==0)},"BigNumber, BigNumber":function(p,g){return!p.isZero()&&!g.isZero()&&!p.isNaN()&&!g.isNaN()},"Unit, Unit":e.referToSelf(h=>(p,g)=>h(p.value||0,g.value||0)),"SparseMatrix, any":e.referToSelf(h=>(p,g)=>a(g)?i(p.size(),p.storage()):l(p,g,h,!1)),"DenseMatrix, any":e.referToSelf(h=>(p,g)=>a(g)?i(p.size(),p.storage()):c(p,g,h,!1)),"any, SparseMatrix":e.referToSelf(h=>(p,g)=>a(p)?i(p.size(),p.storage()):l(g,p,h,!0)),"any, DenseMatrix":e.referToSelf(h=>(p,g)=>a(p)?i(p.size(),p.storage()):c(g,p,h,!0)),"Array, any":e.referToSelf(h=>(p,g)=>h(r(p),g).valueOf()),"any, Array":e.referToSelf(h=>(p,g)=>h(p,r(g)).valueOf())},f({SS:u,DS:o}))}),Rv="compare",rce=["typed","config","matrix","equalScalar","BigNumber","Fraction","DenseMatrix","concat"],nce=G(Rv,rce,t=>{var{typed:e,config:r,equalScalar:n,matrix:i,BigNumber:a,Fraction:s,DenseMatrix:o,concat:u}=t,l=si({typed:e}),c=Hg({typed:e,equalScalar:n}),f=gn({typed:e,DenseMatrix:o}),h=_r({typed:e,matrix:i,concat:u}),p=kc({typed:e});return e(Rv,ice({typed:e,config:r}),{"boolean, boolean":function(m,b){return m===b?0:m>b?1:-1},"BigNumber, BigNumber":function(m,b){return Ja(m,b,r.epsilon)?new a(0):new a(m.cmp(b))},"Fraction, Fraction":function(m,b){return new s(m.compare(b))},"Complex, Complex":function(){throw new TypeError("No ordering relation is defined for complex numbers")}},p,h({SS:c,DS:l,Ss:f}))}),ice=G(Rv,["typed","config"],t=>{var{typed:e,config:r}=t;return e(Rv,{"number, number":function(i,a){return Pi(i,a,r.epsilon)?0:i>a?1:-1}})}),ace=function t(e,r){var n=/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,i=/(^[ ]*|[ ]*$)/g,a=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,s=/^0x[0-9a-f]+$/i,o=/^0/,u=function(x){return t.insensitive&&(""+x).toLowerCase()||""+x},l=u(e).replace(i,"")||"",c=u(r).replace(i,"")||"",f=l.replace(n,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),h=c.replace(n,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),p=parseInt(l.match(s),16)||f.length!==1&&l.match(a)&&Date.parse(l),g=parseInt(c.match(s),16)||p&&c.match(a)&&Date.parse(c)||null,m,b;if(g){if(pg)return 1}for(var y=0,S=Math.max(f.length,h.length);yb)return 1}return 0};const Ll=Vu(ace);var $N="compareNatural",sce=["typed","compare"],oce=G($N,sce,t=>{var{typed:e,compare:r}=t,n=r.signatures["boolean,boolean"];return e($N,{"any, any":i});function i(u,l){var c=xr(u),f=xr(l),h;if((c==="number"||c==="BigNumber"||c==="Fraction")&&(f==="number"||f==="BigNumber"||f==="Fraction"))return h=r(u,l),h.toString()!=="0"?h>0?1:-1:Ll(c,f);var p=["Array","DenseMatrix","SparseMatrix"];if(p.includes(c)||p.includes(f))return h=a(i,u,l),h!==0?h:Ll(c,f);if(c!==f)return Ll(c,f);if(c==="Complex")return uce(u,l);if(c==="Unit")return u.equalBase(l)?i(u.value,l.value):s(i,u.formatUnits(),l.formatUnits());if(c==="boolean")return n(u,l);if(c==="string")return Ll(u,l);if(c==="Object")return o(i,u,l);if(c==="null"||c==="undefined")return 0;throw new TypeError('Unsupported type of value "'+c+'"')}function a(u,l,c){return Fu(l)&&Fu(c)?s(u,l.toJSON().values,c.toJSON().values):Fu(l)?a(u,l.toArray(),c):Fu(c)?a(u,l,c.toArray()):bv(l)?a(u,l.toJSON().data,c):bv(c)?a(u,l,c.toJSON().data):Array.isArray(l)?Array.isArray(c)?s(u,l,c):a(u,l,[c]):a(u,[l],c)}function s(u,l,c){for(var f=0,h=Math.min(l.length,c.length);fc.length?1:l.lengthe.re?1:t.ree.im?1:t.im{var{typed:e,matrix:r,concat:n}=t,i=_r({typed:e,matrix:r,concat:n});return e(zN,Jb,i({elop:Jb,Ds:!0}))}),Pv="equal",fce=["typed","matrix","equalScalar","DenseMatrix","concat"],hce=G(Pv,fce,t=>{var{typed:e,matrix:r,equalScalar:n,DenseMatrix:i,concat:a}=t,s=si({typed:e}),o=as({typed:e,DenseMatrix:i}),u=gn({typed:e,DenseMatrix:i}),l=_r({typed:e,matrix:r,concat:a});return e(Pv,dce({typed:e,equalScalar:n}),l({elop:n,SS:o,DS:s,Ss:u}))}),dce=G(Pv,["typed","equalScalar"],t=>{var{typed:e,equalScalar:r}=t;return e(Pv,{"any, any":function(i,a){return i===null?a===null:a===null?i===null:i===void 0?a===void 0:a===void 0?i===void 0:r(i,a)}})}),qN="equalText",pce=["typed","compareText","isZero"],mce=G(qN,pce,t=>{var{typed:e,compareText:r,isZero:n}=t;return e(qN,{"any, any":function(a,s){return n(r(a,s))}})}),kv="smaller",vce=["typed","config","matrix","DenseMatrix","concat"],gce=G(kv,vce,t=>{var{typed:e,config:r,matrix:n,DenseMatrix:i,concat:a}=t,s=si({typed:e}),o=as({typed:e,DenseMatrix:i}),u=gn({typed:e,DenseMatrix:i}),l=_r({typed:e,matrix:n,concat:a}),c=kc({typed:e});return e(kv,yce({typed:e,config:r}),{"boolean, boolean":(f,h)=>ff.compare(h)===-1,"Complex, Complex":function(h,p){throw new TypeError("No ordering relation is defined for complex numbers")}},c,l({SS:o,DS:s,Ss:u}))}),yce=G(kv,["typed","config"],t=>{var{typed:e,config:r}=t;return e(kv,{"number, number":function(i,a){return i{var{typed:e,config:r,matrix:n,DenseMatrix:i,concat:a}=t,s=si({typed:e}),o=as({typed:e,DenseMatrix:i}),u=gn({typed:e,DenseMatrix:i}),l=_r({typed:e,matrix:n,concat:a}),c=kc({typed:e});return e(Bv,wce({typed:e,config:r}),{"boolean, boolean":(f,h)=>f<=h,"BigNumber, BigNumber":function(h,p){return h.lte(p)||Ja(h,p,r.epsilon)},"Fraction, Fraction":(f,h)=>f.compare(h)!==1,"Complex, Complex":function(){throw new TypeError("No ordering relation is defined for complex numbers")}},c,l({SS:o,DS:s,Ss:u}))}),wce=G(Bv,["typed","config"],t=>{var{typed:e,config:r}=t;return e(Bv,{"number, number":function(i,a){return i<=a||Pi(i,a,r.epsilon)}})}),Iv="larger",Sce=["typed","config","matrix","DenseMatrix","concat"],_ce=G(Iv,Sce,t=>{var{typed:e,config:r,matrix:n,DenseMatrix:i,concat:a}=t,s=si({typed:e}),o=as({typed:e,DenseMatrix:i}),u=gn({typed:e,DenseMatrix:i}),l=_r({typed:e,matrix:n,concat:a}),c=kc({typed:e});return e(Iv,Ace({typed:e,config:r}),{"boolean, boolean":(f,h)=>f>h,"BigNumber, BigNumber":function(h,p){return h.gt(p)&&!Ja(h,p,r.epsilon)},"Fraction, Fraction":(f,h)=>f.compare(h)===1,"Complex, Complex":function(){throw new TypeError("No ordering relation is defined for complex numbers")}},c,l({SS:o,DS:s,Ss:u}))}),Ace=G(Iv,["typed","config"],t=>{var{typed:e,config:r}=t;return e(Iv,{"number, number":function(i,a){return i>a&&!Pi(i,a,r.epsilon)}})}),Lv="largerEq",Dce=["typed","config","matrix","DenseMatrix","concat"],Ece=G(Lv,Dce,t=>{var{typed:e,config:r,matrix:n,DenseMatrix:i,concat:a}=t,s=si({typed:e}),o=as({typed:e,DenseMatrix:i}),u=gn({typed:e,DenseMatrix:i}),l=_r({typed:e,matrix:n,concat:a}),c=kc({typed:e});return e(Lv,Nce({typed:e,config:r}),{"boolean, boolean":(f,h)=>f>=h,"BigNumber, BigNumber":function(h,p){return h.gte(p)||Ja(h,p,r.epsilon)},"Fraction, Fraction":(f,h)=>f.compare(h)!==-1,"Complex, Complex":function(){throw new TypeError("No ordering relation is defined for complex numbers")}},c,l({SS:o,DS:s,Ss:u}))}),Nce=G(Lv,["typed","config"],t=>{var{typed:e,config:r}=t;return e(Lv,{"number, number":function(i,a){return i>=a||Pi(i,a,r.epsilon)}})}),UN="deepEqual",Cce=["typed","equal"],Mce=G(UN,Cce,t=>{var{typed:e,equal:r}=t;return e(UN,{"any, any":function(a,s){return n(a.valueOf(),s.valueOf())}});function n(i,a){if(Array.isArray(i))if(Array.isArray(a)){var s=i.length;if(s!==a.length)return!1;for(var o=0;o{var{typed:e,config:r,equalScalar:n,matrix:i,DenseMatrix:a,concat:s}=t,o=si({typed:e}),u=as({typed:e,DenseMatrix:a}),l=gn({typed:e,DenseMatrix:a}),c=_r({typed:e,matrix:i,concat:s});return e($v,Fce({typed:e,equalScalar:n}),c({elop:f,SS:u,DS:o,Ss:l}));function f(h,p){return!n(h,p)}}),Fce=G($v,["typed","equalScalar"],t=>{var{typed:e,equalScalar:r}=t;return e($v,{"any, any":function(i,a){return i===null?a!==null:a===null?i!==null:i===void 0?a!==void 0:a===void 0?i!==void 0:!r(i,a)}})}),HN="partitionSelect",Rce=["typed","isNumeric","isNaN","compare"],Pce=G(HN,Rce,t=>{var{typed:e,isNumeric:r,isNaN:n,compare:i}=t,a=i,s=(l,c)=>-i(l,c);return e(HN,{"Array | Matrix, number":function(c,f){return o(c,f,a)},"Array | Matrix, number, string":function(c,f,h){if(h==="asc")return o(c,f,a);if(h==="desc")return o(c,f,s);throw new Error('Compare string must be "asc" or "desc"')},"Array | Matrix, number, function":o});function o(l,c,f){if(!ot(c)||c<0)throw new Error("k must be a non-negative integer");if(dt(l)){var h=l.size();if(h.length>1)throw new Error("Only one dimensional matrices supported");return u(l.valueOf(),c,f)}if(Array.isArray(l))return u(l,c,f)}function u(l,c,f){if(c>=l.length)throw new Error("k out of bounds");for(var h=0;h=0){var S=l[b];l[b]=l[m],l[m]=S,--b}else++m;f(l[m],y)>0&&--m,c<=m?g=m:p=m+1}return l[c]}}),WN="sort",kce=["typed","matrix","compare","compareNatural"],Bce=G(WN,kce,t=>{var{typed:e,matrix:r,compare:n,compareNatural:i}=t,a=n,s=(c,f)=>-n(c,f);return e(WN,{Array:function(f){return u(f),f.sort(a)},Matrix:function(f){return l(f),r(f.toArray().sort(a),f.storage())},"Array, function":function(f,h){return u(f),f.sort(h)},"Matrix, function":function(f,h){return l(f),r(f.toArray().sort(h),f.storage())},"Array, string":function(f,h){return u(f),f.sort(o(h))},"Matrix, string":function(f,h){return l(f),r(f.toArray().sort(o(h)),f.storage())}});function o(c){if(c==="asc")return a;if(c==="desc")return s;if(c==="natural")return i;throw new Error('String "asc", "desc", or "natural" expected')}function u(c){if(Et(c).length!==1)throw new Error("One dimensional array expected")}function l(c){if(c.size().length!==1)throw new Error("One dimensional matrix expected")}}),VN="max",Ice=["typed","config","numeric","larger"],iB=G(VN,Ice,t=>{var{typed:e,config:r,numeric:n,larger:i}=t;return e(VN,{"Array | Matrix":s,"Array | Matrix, number | BigNumber":function(u,l){return qg(u,l.valueOf(),a)},"...":function(u){if(Fc(u))throw new TypeError("Scalar values expected in function max");return s(u)}});function a(o,u){try{return i(o,u)?o:u}catch(l){throw ai(l,"max",u)}}function s(o){var u;if(Gs(o,function(l){try{isNaN(l)&&typeof l=="number"?u=NaN:(u===void 0||i(l,u))&&(u=l)}catch(c){throw ai(c,"max",l)}}),u===void 0)throw new Error("Cannot calculate max of an empty array");return typeof u=="string"&&(u=n(u,r.number)),u}}),YN="min",Lce=["typed","config","numeric","smaller"],aB=G(YN,Lce,t=>{var{typed:e,config:r,numeric:n,smaller:i}=t;return e(YN,{"Array | Matrix":s,"Array | Matrix, number | BigNumber":function(u,l){return qg(u,l.valueOf(),a)},"...":function(u){if(Fc(u))throw new TypeError("Scalar values expected in function min");return s(u)}});function a(o,u){try{return i(o,u)?o:u}catch(l){throw ai(l,"min",u)}}function s(o){var u;if(Gs(o,function(l){try{isNaN(l)&&typeof l=="number"?u=NaN:(u===void 0||i(l,u))&&(u=l)}catch(c){throw ai(c,"min",l)}}),u===void 0)throw new Error("Cannot calculate min of an empty array");return typeof u=="string"&&(u=n(u,r.number)),u}}),$ce="ImmutableDenseMatrix",zce=["smaller","DenseMatrix"],qce=G($ce,zce,t=>{var{smaller:e,DenseMatrix:r}=t;function n(i,a){if(!(this instanceof n))throw new SyntaxError("Constructor must be called with the new operator");if(a&&!qn(a))throw new Error("Invalid datatype: "+a);if(dt(i)||sr(i)){var s=new r(i,a);this._data=s._data,this._size=s._size,this._datatype=s._datatype,this._min=null,this._max=null}else if(i&&sr(i.data)&&sr(i.size))this._data=i.data,this._size=i.size,this._datatype=i.datatype,this._min=typeof i.min<"u"?i.min:null,this._max=typeof i.max<"u"?i.max:null;else{if(i)throw new TypeError("Unsupported type of data ("+xr(i)+")");this._data=[],this._size=[0],this._datatype=a,this._min=null,this._max=null}}return n.prototype=new r,n.prototype.type="ImmutableDenseMatrix",n.prototype.isImmutableDenseMatrix=!0,n.prototype.subset=function(i){switch(arguments.length){case 1:{var a=r.prototype.subset.call(this,i);return dt(a)?new n({data:a._data,size:a._size,datatype:a._datatype}):a}case 2:case 3:throw new Error("Cannot invoke set subset on an Immutable Matrix instance");default:throw new SyntaxError("Wrong number of arguments")}},n.prototype.set=function(){throw new Error("Cannot invoke set on an Immutable Matrix instance")},n.prototype.resize=function(){throw new Error("Cannot invoke resize on an Immutable Matrix instance")},n.prototype.reshape=function(){throw new Error("Cannot invoke reshape on an Immutable Matrix instance")},n.prototype.clone=function(){return new n({data:xt(this._data),size:xt(this._size),datatype:this._datatype})},n.prototype.toJSON=function(){return{mathjs:"ImmutableDenseMatrix",data:this._data,size:this._size,datatype:this._datatype}},n.fromJSON=function(i){return new n(i)},n.prototype.swapRows=function(){throw new Error("Cannot invoke swapRows on an Immutable Matrix instance")},n.prototype.min=function(){if(this._min===null){var i=null;this.forEach(function(a){(i===null||e(a,i))&&(i=a)}),this._min=i!==null?i:void 0}return this._min},n.prototype.max=function(){if(this._max===null){var i=null;this.forEach(function(a){(i===null||e(i,a))&&(i=a)}),this._max=i!==null?i:void 0}return this._max},n},{isClass:!0}),Uce="Index",Hce=["ImmutableDenseMatrix","getMatrixDataType"],Wce=G(Uce,Hce,t=>{var{ImmutableDenseMatrix:e,getMatrixDataType:r}=t;function n(a){if(!(this instanceof n))throw new SyntaxError("Constructor must be called with the new operator");this._dimensions=[],this._sourceSize=[],this._isScalar=!0;for(var s=0,o=arguments.length;s{r&&e.push(n)}),e}var Vce="FibonacciHeap",Yce=["smaller","larger"],jce=G(Vce,Yce,t=>{var{smaller:e,larger:r}=t,n=1/Math.log((1+Math.sqrt(5))/2);function i(){if(!(this instanceof i))throw new SyntaxError("Constructor must be called with the new operator");this._minimum=null,this._size=0}i.prototype.type="FibonacciHeap",i.prototype.isFibonacciHeap=!0,i.prototype.insert=function(c,f){var h={key:c,value:f,degree:0};if(this._minimum){var p=this._minimum;h.left=p,h.right=p.right,p.right=h,h.right.left=h,e(c,p.key)&&(this._minimum=h)}else h.left=h,h.right=h,this._minimum=h;return this._size++,h},i.prototype.size=function(){return this._size},i.prototype.clear=function(){this._minimum=null,this._size=0},i.prototype.isEmpty=function(){return this._size===0},i.prototype.extractMinimum=function(){var c=this._minimum;if(c===null)return c;for(var f=this._minimum,h=c.degree,p=c.child;h>0;){var g=p.right;p.left.right=p.right,p.right.left=p.left,p.left=f,p.right=f.right,f.right=p,p.right.left=p,p.parent=null,p=g,h--}return c.left.right=c.right,c.right.left=c.left,c===c.right?f=null:(f=c.right,f=l(f,this._size)),this._size--,this._minimum=f,c},i.prototype.remove=function(c){this._minimum=a(this._minimum,c,-1),this.extractMinimum()};function a(c,f,h){f.key=h;var p=f.parent;return p&&e(f.key,p.key)&&(s(c,f,p),o(c,p)),e(f.key,c.key)&&(c=f),c}function s(c,f,h){f.left.right=f.right,f.right.left=f.left,h.degree--,h.child===f&&(h.child=f.right),h.degree===0&&(h.child=null),f.left=c,f.right=c.right,c.right=f,f.right.left=f,f.parent=null,f.mark=!1}function o(c,f){var h=f.parent;h&&(f.mark?(s(c,f,h),o(h)):f.mark=!0)}var u=function(f,h){f.left.right=f.right,f.right.left=f.left,f.parent=h,h.child?(f.left=h.child,f.right=h.child.right,h.child.right=f,f.right.left=f):(h.child=f,f.right=f,f.left=f),h.degree++,f.mark=!1};function l(c,f){var h=Math.floor(Math.log(f)*n)+1,p=new Array(h),g=0,m=c;if(m)for(g++,m=m.right;m!==c;)g++,m=m.right;for(var b;g>0;){for(var y=m.degree,S=m.right;b=p[y],!!b;){if(r(m.key,b.key)){var x=b;b=m,m=x}u(b,m),p[y]=null,y++}p[y]=m,m=S,g--}c=null;for(var _=0;_{var{addScalar:e,equalScalar:r,FibonacciHeap:n}=t;function i(){if(!(this instanceof i))throw new SyntaxError("Constructor must be called with the new operator");this._values=[],this._heap=new n}return i.prototype.type="Spa",i.prototype.isSpa=!0,i.prototype.set=function(a,s){if(this._values[a])this._values[a].value=s;else{var o=this._heap.insert(a,s);this._values[a]=o}},i.prototype.get=function(a){var s=this._values[a];return s?s.value:0},i.prototype.accumulate=function(a,s){var o=this._values[a];o?o.value=e(o.value,s):(o=this._heap.insert(a,s),this._values[a]=o)},i.prototype.forEach=function(a,s,o){var u=this._heap,l=this._values,c=[],f=u.extractMinimum();for(f&&c.push(f);f&&f.key<=s;)f.key>=a&&(r(f.value,0)||o(f.key,f.value,this)),f=u.extractMinimum(),f&&c.push(f);for(var h=0;h{var{on:e,config:r,addScalar:n,subtractScalar:i,multiplyScalar:a,divideScalar:s,pow:o,abs:u,fix:l,round:c,equal:f,isNumeric:h,format:p,number:g,Complex:m,BigNumber:b,Fraction:y}=t,S=g;function x(J,te){if(!(this instanceof x))throw new Error("Constructor must be called with the new operator");if(!(J==null||h(J)||Hs(J)))throw new TypeError("First parameter in Unit constructor must be number, BigNumber, Fraction, Complex, or undefined");if(this.fixPrefix=!1,this.skipAutomaticSimplification=!0,te===void 0)this.units=[],this.dimensions=K.map(ee=>0);else if(typeof te=="string"){var ye=x.parse(te);this.units=ye.units,this.dimensions=ye.dimensions}else if(Qi(te)&&te.value===null)this.fixPrefix=te.fixPrefix,this.skipAutomaticSimplification=te.skipAutomaticSimplification,this.dimensions=te.dimensions.slice(0),this.units=te.units.map(ee=>dn({},ee));else throw new TypeError("Second parameter in Unit constructor must be a string or valueless Unit");this.value=this._normalize(J)}Object.defineProperty(x,"name",{value:"Unit"}),x.prototype.constructor=x,x.prototype.type="Unit",x.prototype.isUnit=!0;var _,A,w;function C(){for(;w===" "||w===" ";)M()}function N(J){return J>="0"&&J<="9"||J==="."}function E(J){return J>="0"&&J<="9"}function M(){A++,w=_.charAt(A)}function O(J){A=J,w=_.charAt(A)}function F(){var J="",te=A;if(w==="+"?M():w==="-"&&(J+=w,M()),!N(w))return O(te),null;if(w==="."){if(J+=w,M(),!E(w))return O(te),null}else{for(;E(w);)J+=w,M();w==="."&&(J+=w,M())}for(;E(w);)J+=w,M();if(w==="E"||w==="e"){var ye="",ee=A;if(ye+=w,M(),(w==="+"||w==="-")&&(ye+=w,M()),!E(w))return O(ee),J;for(J=J+ye;E(w);)J+=w,M()}return J}function q(){for(var J="";E(w)||x.isValidAlpha(w);)J+=w,M();var te=J.charAt(0);return x.isValidAlpha(te)?J:null}function V(J){return w===J?(M(),J):null}x.parse=function(J,te){if(te=te||{},_=J,A=-1,w="",typeof _!="string")throw new TypeError("Invalid argument in Unit.parse, string expected");var ye=new x;ye.units=[];var ee=1,ue=!1;M(),C();var le=F(),Ne=null;if(le){if(r.number==="BigNumber")Ne=new b(le);else if(r.number==="Fraction")try{Ne=new y(le)}catch{Ne=parseFloat(le)}else Ne=parseFloat(le);C(),V("*")?(ee=1,ue=!0):V("/")&&(ee=-1,ue=!0)}for(var Me=[],R=1;;){for(C();w==="(";)Me.push(ee),R*=ee,ee=1,M(),C();var U=void 0;if(w){var Y=w;if(U=q(),U===null)throw new SyntaxError('Unexpected "'+Y+'" in "'+_+'" at index '+A.toString())}else break;var pe=H(U);if(pe===null)throw new SyntaxError('Unit "'+U+'" not found.');var ge=ee*R;if(C(),V("^")){C();var De=F();if(De===null)throw new SyntaxError('In "'+J+'", "^" must be followed by a floating-point number');ge*=De}ye.units.push({unit:pe.unit,prefix:pe.prefix,power:ge});for(var Pe=0;Pe1||Math.abs(this.units[0].power-1)>1e-15},x.prototype._normalize=function(J){if(J==null||this.units.length===0)return J;for(var te=J,ye=x._getNumberConverter(xr(J)),ee=0;ee{if(nt(X,J)){var te=X[J],ye=te.prefixes[""];return{unit:te,prefix:ye}}for(var ee in X)if(nt(X,ee)&&Ure(J,ee)){var ue=X[ee],le=J.length-ee.length,Ne=J.substring(0,le),Me=nt(ue.prefixes,Ne)?ue.prefixes[Ne]:void 0;if(Me!==void 0)return{unit:ue,prefix:Me}}return null},{hasher:J=>J[0],limit:100});x.isValuelessUnit=function(J){return H(J)!==null},x.prototype.hasBase=function(J){if(typeof J=="string"&&(J=$[J]),!J)return!1;for(var te=0;te1e-12)return!1;return!0},x.prototype.equalBase=function(J){for(var te=0;te1e-12)return!1;return!0},x.prototype.equals=function(J){return this.equalBase(J)&&f(this.value,J.value)},x.prototype.multiply=function(J){for(var te=this.clone(),ye=Qi(J)?J:new x(J),ee=0;ee1e-12&&(nt(xe,Me)?te.push({unit:xe[Me].unit,prefix:xe[Me].prefix,power:J.dimensions[Ne]||0}):le=!0)}te.length1e-12)if(nt(ce.si,ee))te.push({unit:ce.si[ee].unit,prefix:ce.si[ee].prefix,power:J.dimensions[ye]||0});else throw new Error("Cannot express custom unit "+ee+" in SI units")}return J.units=te,J.fixPrefix=!0,J.skipAutomaticSimplification=!0,this.value!==null?(J.value=null,this.to(J)):J},x.prototype.formatUnits=function(){for(var J="",te="",ye=0,ee=0,ue=0;ue0?(ye++,J+=" "+this.units[ue].prefix.name+this.units[ue].unit.name,Math.abs(this.units[ue].power-1)>1e-15&&(J+="^"+this.units[ue].power)):this.units[ue].power<0&&ee++;if(ee>0)for(var le=0;le0?(te+=" "+this.units[le].prefix.name+this.units[le].unit.name,Math.abs(this.units[le].power+1)>1e-15&&(te+="^"+-this.units[le].power)):(te+=" "+this.units[le].prefix.name+this.units[le].unit.name,te+="^"+this.units[le].power));J=J.substr(1),te=te.substr(1),ye>1&&ee>0&&(J="("+J+")"),ee>1&&ye>0&&(te="("+te+")");var Ne=J;return ye>0&&ee>0&&(Ne+=" / "),Ne+=te,Ne},x.prototype.format=function(J){var te=this.skipAutomaticSimplification||this.value===null?this.clone():this.simplify(),ye=!1;typeof te.value<"u"&&te.value!==null&&Hs(te.value)&&(ye=Math.abs(te.value.re)<1e-14);for(var ee in te.units)nt(te.units,ee)&&te.units[ee].unit&&(te.units[ee].unit.name==="VA"&&ye?te.units[ee].unit=X.VAR:te.units[ee].unit.name==="VAR"&&!ye&&(te.units[ee].unit=X.VA));te.units.length===1&&!te.fixPrefix&&Math.abs(te.units[0].power-Math.round(te.units[0].power))<1e-14&&(te.units[0].prefix=te._bestPrefix());var ue=te._denormalize(te.value),le=te.value!==null?p(ue,J||{}):"",Ne=te.formatUnits();return te.value&&Hs(te.value)&&(le="("+le+")"),Ne.length>0&&le.length>0&&(le+=" "),le+=Ne,le},x.prototype._bestPrefix=function(){if(this.units.length!==1)throw new Error("Can only compute the best prefix for single units with integer powers, like kg, s^2, N^-1, and so forth!");if(Math.abs(this.units[0].power-Math.round(this.units[0].power))>=1e-14)throw new Error("Can only compute the best prefix for single units with integer powers, like kg, s^2, N^-1, and so forth!");var J=this.value!==null?u(this.value):0,te=u(this.units[0].unit.value),ye=this.units[0].prefix;if(J===0)return ye;var ee=this.units[0].power,ue=Math.log(J/Math.pow(ye.value*te,ee))/Math.LN10-1.2;if(ue>-2.200001&&ue<1.800001)return ye;ue=Math.abs(ue);var le=this.units[0].unit.prefixes;for(var Ne in le)if(nt(le,Ne)){var Me=le[Ne];if(Me.scientific){var R=Math.abs(Math.log(J/Math.pow(Me.value*te,ee))/Math.LN10-1.2);(R0)},X={meter:{name:"meter",base:$.LENGTH,prefixes:k.LONG,value:1,offset:0},inch:{name:"inch",base:$.LENGTH,prefixes:k.NONE,value:.0254,offset:0},foot:{name:"foot",base:$.LENGTH,prefixes:k.NONE,value:.3048,offset:0},yard:{name:"yard",base:$.LENGTH,prefixes:k.NONE,value:.9144,offset:0},mile:{name:"mile",base:$.LENGTH,prefixes:k.NONE,value:1609.344,offset:0},link:{name:"link",base:$.LENGTH,prefixes:k.NONE,value:.201168,offset:0},rod:{name:"rod",base:$.LENGTH,prefixes:k.NONE,value:5.0292,offset:0},chain:{name:"chain",base:$.LENGTH,prefixes:k.NONE,value:20.1168,offset:0},angstrom:{name:"angstrom",base:$.LENGTH,prefixes:k.NONE,value:1e-10,offset:0},m:{name:"m",base:$.LENGTH,prefixes:k.SHORT,value:1,offset:0},in:{name:"in",base:$.LENGTH,prefixes:k.NONE,value:.0254,offset:0},ft:{name:"ft",base:$.LENGTH,prefixes:k.NONE,value:.3048,offset:0},yd:{name:"yd",base:$.LENGTH,prefixes:k.NONE,value:.9144,offset:0},mi:{name:"mi",base:$.LENGTH,prefixes:k.NONE,value:1609.344,offset:0},li:{name:"li",base:$.LENGTH,prefixes:k.NONE,value:.201168,offset:0},rd:{name:"rd",base:$.LENGTH,prefixes:k.NONE,value:5.02921,offset:0},ch:{name:"ch",base:$.LENGTH,prefixes:k.NONE,value:20.1168,offset:0},mil:{name:"mil",base:$.LENGTH,prefixes:k.NONE,value:254e-7,offset:0},m2:{name:"m2",base:$.SURFACE,prefixes:k.SQUARED,value:1,offset:0},sqin:{name:"sqin",base:$.SURFACE,prefixes:k.NONE,value:64516e-8,offset:0},sqft:{name:"sqft",base:$.SURFACE,prefixes:k.NONE,value:.09290304,offset:0},sqyd:{name:"sqyd",base:$.SURFACE,prefixes:k.NONE,value:.83612736,offset:0},sqmi:{name:"sqmi",base:$.SURFACE,prefixes:k.NONE,value:2589988110336e-6,offset:0},sqrd:{name:"sqrd",base:$.SURFACE,prefixes:k.NONE,value:25.29295,offset:0},sqch:{name:"sqch",base:$.SURFACE,prefixes:k.NONE,value:404.6873,offset:0},sqmil:{name:"sqmil",base:$.SURFACE,prefixes:k.NONE,value:64516e-14,offset:0},acre:{name:"acre",base:$.SURFACE,prefixes:k.NONE,value:4046.86,offset:0},hectare:{name:"hectare",base:$.SURFACE,prefixes:k.NONE,value:1e4,offset:0},m3:{name:"m3",base:$.VOLUME,prefixes:k.CUBIC,value:1,offset:0},L:{name:"L",base:$.VOLUME,prefixes:k.SHORT,value:.001,offset:0},l:{name:"l",base:$.VOLUME,prefixes:k.SHORT,value:.001,offset:0},litre:{name:"litre",base:$.VOLUME,prefixes:k.LONG,value:.001,offset:0},cuin:{name:"cuin",base:$.VOLUME,prefixes:k.NONE,value:16387064e-12,offset:0},cuft:{name:"cuft",base:$.VOLUME,prefixes:k.NONE,value:.028316846592,offset:0},cuyd:{name:"cuyd",base:$.VOLUME,prefixes:k.NONE,value:.764554857984,offset:0},teaspoon:{name:"teaspoon",base:$.VOLUME,prefixes:k.NONE,value:5e-6,offset:0},tablespoon:{name:"tablespoon",base:$.VOLUME,prefixes:k.NONE,value:15e-6,offset:0},drop:{name:"drop",base:$.VOLUME,prefixes:k.NONE,value:5e-8,offset:0},gtt:{name:"gtt",base:$.VOLUME,prefixes:k.NONE,value:5e-8,offset:0},minim:{name:"minim",base:$.VOLUME,prefixes:k.NONE,value:6161152e-14,offset:0},fluiddram:{name:"fluiddram",base:$.VOLUME,prefixes:k.NONE,value:36966911e-13,offset:0},fluidounce:{name:"fluidounce",base:$.VOLUME,prefixes:k.NONE,value:2957353e-11,offset:0},gill:{name:"gill",base:$.VOLUME,prefixes:k.NONE,value:.0001182941,offset:0},cc:{name:"cc",base:$.VOLUME,prefixes:k.NONE,value:1e-6,offset:0},cup:{name:"cup",base:$.VOLUME,prefixes:k.NONE,value:.0002365882,offset:0},pint:{name:"pint",base:$.VOLUME,prefixes:k.NONE,value:.0004731765,offset:0},quart:{name:"quart",base:$.VOLUME,prefixes:k.NONE,value:.0009463529,offset:0},gallon:{name:"gallon",base:$.VOLUME,prefixes:k.NONE,value:.003785412,offset:0},beerbarrel:{name:"beerbarrel",base:$.VOLUME,prefixes:k.NONE,value:.1173478,offset:0},oilbarrel:{name:"oilbarrel",base:$.VOLUME,prefixes:k.NONE,value:.1589873,offset:0},hogshead:{name:"hogshead",base:$.VOLUME,prefixes:k.NONE,value:.238481,offset:0},fldr:{name:"fldr",base:$.VOLUME,prefixes:k.NONE,value:36966911e-13,offset:0},floz:{name:"floz",base:$.VOLUME,prefixes:k.NONE,value:2957353e-11,offset:0},gi:{name:"gi",base:$.VOLUME,prefixes:k.NONE,value:.0001182941,offset:0},cp:{name:"cp",base:$.VOLUME,prefixes:k.NONE,value:.0002365882,offset:0},pt:{name:"pt",base:$.VOLUME,prefixes:k.NONE,value:.0004731765,offset:0},qt:{name:"qt",base:$.VOLUME,prefixes:k.NONE,value:.0009463529,offset:0},gal:{name:"gal",base:$.VOLUME,prefixes:k.NONE,value:.003785412,offset:0},bbl:{name:"bbl",base:$.VOLUME,prefixes:k.NONE,value:.1173478,offset:0},obl:{name:"obl",base:$.VOLUME,prefixes:k.NONE,value:.1589873,offset:0},g:{name:"g",base:$.MASS,prefixes:k.SHORT,value:.001,offset:0},gram:{name:"gram",base:$.MASS,prefixes:k.LONG,value:.001,offset:0},ton:{name:"ton",base:$.MASS,prefixes:k.SHORT,value:907.18474,offset:0},t:{name:"t",base:$.MASS,prefixes:k.SHORT,value:1e3,offset:0},tonne:{name:"tonne",base:$.MASS,prefixes:k.LONG,value:1e3,offset:0},grain:{name:"grain",base:$.MASS,prefixes:k.NONE,value:6479891e-11,offset:0},dram:{name:"dram",base:$.MASS,prefixes:k.NONE,value:.0017718451953125,offset:0},ounce:{name:"ounce",base:$.MASS,prefixes:k.NONE,value:.028349523125,offset:0},poundmass:{name:"poundmass",base:$.MASS,prefixes:k.NONE,value:.45359237,offset:0},hundredweight:{name:"hundredweight",base:$.MASS,prefixes:k.NONE,value:45.359237,offset:0},stick:{name:"stick",base:$.MASS,prefixes:k.NONE,value:.115,offset:0},stone:{name:"stone",base:$.MASS,prefixes:k.NONE,value:6.35029318,offset:0},gr:{name:"gr",base:$.MASS,prefixes:k.NONE,value:6479891e-11,offset:0},dr:{name:"dr",base:$.MASS,prefixes:k.NONE,value:.0017718451953125,offset:0},oz:{name:"oz",base:$.MASS,prefixes:k.NONE,value:.028349523125,offset:0},lbm:{name:"lbm",base:$.MASS,prefixes:k.NONE,value:.45359237,offset:0},cwt:{name:"cwt",base:$.MASS,prefixes:k.NONE,value:45.359237,offset:0},s:{name:"s",base:$.TIME,prefixes:k.SHORT,value:1,offset:0},min:{name:"min",base:$.TIME,prefixes:k.NONE,value:60,offset:0},h:{name:"h",base:$.TIME,prefixes:k.NONE,value:3600,offset:0},second:{name:"second",base:$.TIME,prefixes:k.LONG,value:1,offset:0},sec:{name:"sec",base:$.TIME,prefixes:k.LONG,value:1,offset:0},minute:{name:"minute",base:$.TIME,prefixes:k.NONE,value:60,offset:0},hour:{name:"hour",base:$.TIME,prefixes:k.NONE,value:3600,offset:0},day:{name:"day",base:$.TIME,prefixes:k.NONE,value:86400,offset:0},week:{name:"week",base:$.TIME,prefixes:k.NONE,value:7*86400,offset:0},month:{name:"month",base:$.TIME,prefixes:k.NONE,value:2629800,offset:0},year:{name:"year",base:$.TIME,prefixes:k.NONE,value:31557600,offset:0},decade:{name:"decade",base:$.TIME,prefixes:k.NONE,value:315576e3,offset:0},century:{name:"century",base:$.TIME,prefixes:k.NONE,value:315576e4,offset:0},millennium:{name:"millennium",base:$.TIME,prefixes:k.NONE,value:315576e5,offset:0},hertz:{name:"Hertz",base:$.FREQUENCY,prefixes:k.LONG,value:1,offset:0,reciprocal:!0},Hz:{name:"Hz",base:$.FREQUENCY,prefixes:k.SHORT,value:1,offset:0,reciprocal:!0},rad:{name:"rad",base:$.ANGLE,prefixes:k.SHORT,value:1,offset:0},radian:{name:"radian",base:$.ANGLE,prefixes:k.LONG,value:1,offset:0},deg:{name:"deg",base:$.ANGLE,prefixes:k.SHORT,value:null,offset:0},degree:{name:"degree",base:$.ANGLE,prefixes:k.LONG,value:null,offset:0},grad:{name:"grad",base:$.ANGLE,prefixes:k.SHORT,value:null,offset:0},gradian:{name:"gradian",base:$.ANGLE,prefixes:k.LONG,value:null,offset:0},cycle:{name:"cycle",base:$.ANGLE,prefixes:k.NONE,value:null,offset:0},arcsec:{name:"arcsec",base:$.ANGLE,prefixes:k.NONE,value:null,offset:0},arcmin:{name:"arcmin",base:$.ANGLE,prefixes:k.NONE,value:null,offset:0},A:{name:"A",base:$.CURRENT,prefixes:k.SHORT,value:1,offset:0},ampere:{name:"ampere",base:$.CURRENT,prefixes:k.LONG,value:1,offset:0},K:{name:"K",base:$.TEMPERATURE,prefixes:k.SHORT,value:1,offset:0},degC:{name:"degC",base:$.TEMPERATURE,prefixes:k.SHORT,value:1,offset:273.15},degF:{name:"degF",base:$.TEMPERATURE,prefixes:k.SHORT,value:new y(5,9),offset:459.67},degR:{name:"degR",base:$.TEMPERATURE,prefixes:k.SHORT,value:new y(5,9),offset:0},kelvin:{name:"kelvin",base:$.TEMPERATURE,prefixes:k.LONG,value:1,offset:0},celsius:{name:"celsius",base:$.TEMPERATURE,prefixes:k.LONG,value:1,offset:273.15},fahrenheit:{name:"fahrenheit",base:$.TEMPERATURE,prefixes:k.LONG,value:new y(5,9),offset:459.67},rankine:{name:"rankine",base:$.TEMPERATURE,prefixes:k.LONG,value:new y(5,9),offset:0},mol:{name:"mol",base:$.AMOUNT_OF_SUBSTANCE,prefixes:k.SHORT,value:1,offset:0},mole:{name:"mole",base:$.AMOUNT_OF_SUBSTANCE,prefixes:k.LONG,value:1,offset:0},cd:{name:"cd",base:$.LUMINOUS_INTENSITY,prefixes:k.SHORT,value:1,offset:0},candela:{name:"candela",base:$.LUMINOUS_INTENSITY,prefixes:k.LONG,value:1,offset:0},N:{name:"N",base:$.FORCE,prefixes:k.SHORT,value:1,offset:0},newton:{name:"newton",base:$.FORCE,prefixes:k.LONG,value:1,offset:0},dyn:{name:"dyn",base:$.FORCE,prefixes:k.SHORT,value:1e-5,offset:0},dyne:{name:"dyne",base:$.FORCE,prefixes:k.LONG,value:1e-5,offset:0},lbf:{name:"lbf",base:$.FORCE,prefixes:k.NONE,value:4.4482216152605,offset:0},poundforce:{name:"poundforce",base:$.FORCE,prefixes:k.NONE,value:4.4482216152605,offset:0},kip:{name:"kip",base:$.FORCE,prefixes:k.LONG,value:4448.2216,offset:0},kilogramforce:{name:"kilogramforce",base:$.FORCE,prefixes:k.NONE,value:9.80665,offset:0},J:{name:"J",base:$.ENERGY,prefixes:k.SHORT,value:1,offset:0},joule:{name:"joule",base:$.ENERGY,prefixes:k.LONG,value:1,offset:0},erg:{name:"erg",base:$.ENERGY,prefixes:k.SHORTLONG,value:1e-7,offset:0},Wh:{name:"Wh",base:$.ENERGY,prefixes:k.SHORT,value:3600,offset:0},BTU:{name:"BTU",base:$.ENERGY,prefixes:k.BTU,value:1055.05585262,offset:0},eV:{name:"eV",base:$.ENERGY,prefixes:k.SHORT,value:1602176565e-28,offset:0},electronvolt:{name:"electronvolt",base:$.ENERGY,prefixes:k.LONG,value:1602176565e-28,offset:0},W:{name:"W",base:$.POWER,prefixes:k.SHORT,value:1,offset:0},watt:{name:"watt",base:$.POWER,prefixes:k.LONG,value:1,offset:0},hp:{name:"hp",base:$.POWER,prefixes:k.NONE,value:745.6998715386,offset:0},VAR:{name:"VAR",base:$.POWER,prefixes:k.SHORT,value:m.I,offset:0},VA:{name:"VA",base:$.POWER,prefixes:k.SHORT,value:1,offset:0},Pa:{name:"Pa",base:$.PRESSURE,prefixes:k.SHORT,value:1,offset:0},psi:{name:"psi",base:$.PRESSURE,prefixes:k.NONE,value:6894.75729276459,offset:0},atm:{name:"atm",base:$.PRESSURE,prefixes:k.NONE,value:101325,offset:0},bar:{name:"bar",base:$.PRESSURE,prefixes:k.SHORTLONG,value:1e5,offset:0},torr:{name:"torr",base:$.PRESSURE,prefixes:k.NONE,value:133.322,offset:0},mmHg:{name:"mmHg",base:$.PRESSURE,prefixes:k.NONE,value:133.322,offset:0},mmH2O:{name:"mmH2O",base:$.PRESSURE,prefixes:k.NONE,value:9.80665,offset:0},cmH2O:{name:"cmH2O",base:$.PRESSURE,prefixes:k.NONE,value:98.0665,offset:0},coulomb:{name:"coulomb",base:$.ELECTRIC_CHARGE,prefixes:k.LONG,value:1,offset:0},C:{name:"C",base:$.ELECTRIC_CHARGE,prefixes:k.SHORT,value:1,offset:0},farad:{name:"farad",base:$.ELECTRIC_CAPACITANCE,prefixes:k.LONG,value:1,offset:0},F:{name:"F",base:$.ELECTRIC_CAPACITANCE,prefixes:k.SHORT,value:1,offset:0},volt:{name:"volt",base:$.ELECTRIC_POTENTIAL,prefixes:k.LONG,value:1,offset:0},V:{name:"V",base:$.ELECTRIC_POTENTIAL,prefixes:k.SHORT,value:1,offset:0},ohm:{name:"ohm",base:$.ELECTRIC_RESISTANCE,prefixes:k.SHORTLONG,value:1,offset:0},henry:{name:"henry",base:$.ELECTRIC_INDUCTANCE,prefixes:k.LONG,value:1,offset:0},H:{name:"H",base:$.ELECTRIC_INDUCTANCE,prefixes:k.SHORT,value:1,offset:0},siemens:{name:"siemens",base:$.ELECTRIC_CONDUCTANCE,prefixes:k.LONG,value:1,offset:0},S:{name:"S",base:$.ELECTRIC_CONDUCTANCE,prefixes:k.SHORT,value:1,offset:0},weber:{name:"weber",base:$.MAGNETIC_FLUX,prefixes:k.LONG,value:1,offset:0},Wb:{name:"Wb",base:$.MAGNETIC_FLUX,prefixes:k.SHORT,value:1,offset:0},tesla:{name:"tesla",base:$.MAGNETIC_FLUX_DENSITY,prefixes:k.LONG,value:1,offset:0},T:{name:"T",base:$.MAGNETIC_FLUX_DENSITY,prefixes:k.SHORT,value:1,offset:0},b:{name:"b",base:$.BIT,prefixes:k.BINARY_SHORT,value:1,offset:0},bits:{name:"bits",base:$.BIT,prefixes:k.BINARY_LONG,value:1,offset:0},B:{name:"B",base:$.BIT,prefixes:k.BINARY_SHORT,value:8,offset:0},bytes:{name:"bytes",base:$.BIT,prefixes:k.BINARY_LONG,value:8,offset:0}},de={meters:"meter",inches:"inch",feet:"foot",yards:"yard",miles:"mile",links:"link",rods:"rod",chains:"chain",angstroms:"angstrom",lt:"l",litres:"litre",liter:"litre",liters:"litre",teaspoons:"teaspoon",tablespoons:"tablespoon",minims:"minim",fluiddrams:"fluiddram",fluidounces:"fluidounce",gills:"gill",cups:"cup",pints:"pint",quarts:"quart",gallons:"gallon",beerbarrels:"beerbarrel",oilbarrels:"oilbarrel",hogsheads:"hogshead",gtts:"gtt",grams:"gram",tons:"ton",tonnes:"tonne",grains:"grain",drams:"dram",ounces:"ounce",poundmasses:"poundmass",hundredweights:"hundredweight",sticks:"stick",lb:"lbm",lbs:"lbm",kips:"kip",kgf:"kilogramforce",acres:"acre",hectares:"hectare",sqfeet:"sqft",sqyard:"sqyd",sqmile:"sqmi",sqmiles:"sqmi",mmhg:"mmHg",mmh2o:"mmH2O",cmh2o:"cmH2O",seconds:"second",secs:"second",minutes:"minute",mins:"minute",hours:"hour",hr:"hour",hrs:"hour",days:"day",weeks:"week",months:"month",years:"year",decades:"decade",centuries:"century",millennia:"millennium",hertz:"hertz",radians:"radian",degrees:"degree",gradians:"gradian",cycles:"cycle",arcsecond:"arcsec",arcseconds:"arcsec",arcminute:"arcmin",arcminutes:"arcmin",BTUs:"BTU",watts:"watt",joules:"joule",amperes:"ampere",amps:"ampere",amp:"ampere",coulombs:"coulomb",volts:"volt",ohms:"ohm",farads:"farad",webers:"weber",teslas:"tesla",electronvolts:"electronvolt",moles:"mole",bit:"bits",byte:"bytes"};function Se(J){if(J.number==="BigNumber"){var te=gw(b);X.rad.value=new b(1),X.deg.value=te.div(180),X.grad.value=te.div(200),X.cycle.value=te.times(2),X.arcsec.value=te.div(648e3),X.arcmin.value=te.div(10800)}else X.rad.value=1,X.deg.value=Math.PI/180,X.grad.value=Math.PI/200,X.cycle.value=Math.PI*2,X.arcsec.value=Math.PI/648e3,X.arcmin.value=Math.PI/10800;X.radian.value=X.rad.value,X.degree.value=X.deg.value,X.gradian.value=X.grad.value}Se(r),e&&e("config",function(J,te){J.number!==te.number&&Se(J)});var ce={si:{NONE:{unit:ne,prefix:k.NONE[""]},LENGTH:{unit:X.m,prefix:k.SHORT[""]},MASS:{unit:X.g,prefix:k.SHORT.k},TIME:{unit:X.s,prefix:k.SHORT[""]},CURRENT:{unit:X.A,prefix:k.SHORT[""]},TEMPERATURE:{unit:X.K,prefix:k.SHORT[""]},LUMINOUS_INTENSITY:{unit:X.cd,prefix:k.SHORT[""]},AMOUNT_OF_SUBSTANCE:{unit:X.mol,prefix:k.SHORT[""]},ANGLE:{unit:X.rad,prefix:k.SHORT[""]},BIT:{unit:X.bits,prefix:k.SHORT[""]},FORCE:{unit:X.N,prefix:k.SHORT[""]},ENERGY:{unit:X.J,prefix:k.SHORT[""]},POWER:{unit:X.W,prefix:k.SHORT[""]},PRESSURE:{unit:X.Pa,prefix:k.SHORT[""]},ELECTRIC_CHARGE:{unit:X.C,prefix:k.SHORT[""]},ELECTRIC_CAPACITANCE:{unit:X.F,prefix:k.SHORT[""]},ELECTRIC_POTENTIAL:{unit:X.V,prefix:k.SHORT[""]},ELECTRIC_RESISTANCE:{unit:X.ohm,prefix:k.SHORT[""]},ELECTRIC_INDUCTANCE:{unit:X.H,prefix:k.SHORT[""]},ELECTRIC_CONDUCTANCE:{unit:X.S,prefix:k.SHORT[""]},MAGNETIC_FLUX:{unit:X.Wb,prefix:k.SHORT[""]},MAGNETIC_FLUX_DENSITY:{unit:X.T,prefix:k.SHORT[""]},FREQUENCY:{unit:X.Hz,prefix:k.SHORT[""]}}};ce.cgs=JSON.parse(JSON.stringify(ce.si)),ce.cgs.LENGTH={unit:X.m,prefix:k.SHORT.c},ce.cgs.MASS={unit:X.g,prefix:k.SHORT[""]},ce.cgs.FORCE={unit:X.dyn,prefix:k.SHORT[""]},ce.cgs.ENERGY={unit:X.erg,prefix:k.NONE[""]},ce.us=JSON.parse(JSON.stringify(ce.si)),ce.us.LENGTH={unit:X.ft,prefix:k.NONE[""]},ce.us.MASS={unit:X.lbm,prefix:k.NONE[""]},ce.us.TEMPERATURE={unit:X.degF,prefix:k.NONE[""]},ce.us.FORCE={unit:X.lbf,prefix:k.NONE[""]},ce.us.ENERGY={unit:X.BTU,prefix:k.BTU[""]},ce.us.POWER={unit:X.hp,prefix:k.NONE[""]},ce.us.PRESSURE={unit:X.psi,prefix:k.NONE[""]},ce.auto=JSON.parse(JSON.stringify(ce.si));var xe=ce.auto;x.setUnitSystem=function(J){if(nt(ce,J))xe=ce[J];else throw new Error("Unit system "+J+" does not exist. Choices are: "+Object.keys(ce).join(", "))},x.getUnitSystem=function(){for(var J in ce)if(nt(ce,J)&&ce[J]===xe)return J},x.typeConverters={BigNumber:function(te){return te!=null&&te.isFraction?new b(te.n).div(te.d).times(te.s):new b(te+"")},Fraction:function(te){return new y(te)},Complex:function(te){return te},number:function(te){return te!=null&&te.isFraction?g(te):te}},x.prototype._numberConverter=function(){var J=x.typeConverters[this.valueType()];if(J)return J;throw new TypeError('Unsupported Unit value type "'+this.valueType()+'"')},x._getNumberConverter=function(J){if(!x.typeConverters[J])throw new TypeError('Unsupported type "'+J+'"');return x.typeConverters[J]};for(var _e in X)if(nt(X,_e)){var me=X[_e];me.dimensions=me.base.dimensions}for(var we in de)if(nt(de,we)){var Ee=X[de[we]],Ce={};for(var He in Ee)nt(Ee,He)&&(Ce[He]=Ee[He]);Ce.name=we,X[we]=Ce}x.isValidAlpha=function(te){return/^[a-zA-Z]$/.test(te)};function Ue(J){for(var te=0;te0&&!(x.isValidAlpha(w)||E(w)))throw new Error('Invalid unit name (only alphanumeric characters are allowed): "'+J+'"')}}return x.createUnit=function(J,te){if(typeof J!="object")throw new TypeError("createUnit expects first parameter to be of type 'Object'");if(te&&te.override){for(var ye in J)if(nt(J,ye)&&x.deleteUnit(ye),J[ye].aliases)for(var ee=0;ee"u"||te===null)&&(te={}),typeof J!="string")throw new TypeError("createUnitSingle expects first parameter to be of type 'string'");if(nt(X,J))throw new Error('Cannot create unit "'+J+'": a unit with that name already exists');Ue(J);var ye=null,ee=[],ue=0,le,Ne,Me;if(te&&te.type==="Unit")ye=te.clone();else if(typeof te=="string")te!==""&&(le=te);else if(typeof te=="object")le=te.definition,Ne=te.prefixes,ue=te.offset,Me=te.baseName,te.aliases&&(ee=te.aliases.valueOf());else throw new TypeError('Cannot create unit "'+J+'" from "'+te.toString()+'": expecting "string" or "Unit" or "Object"');if(ee){for(var R=0;R1e-12){ke=!1;break}if(ke){De=!0,U.base=$[Pe];break}}if(!De){Me=Me||J+"_STUFF";var ze={dimensions:ye.dimensions.slice(0)};ze.key=Me,$[Me]=ze,xe[Me]={unit:U,prefix:k.NONE[""]},U.base=$[Me]}}else{if(Me=Me||J+"_STUFF",K.indexOf(Me)>=0)throw new Error('Cannot create new base unit "'+J+'": a base unit with that name already exists (and cannot be overridden)');K.push(Me);for(var Y in $)nt($,Y)&&($[Y].dimensions[K.length-1]=0);for(var pe={dimensions:[]},ge=0;ge{var{typed:e,Unit:r}=t;return e(XN,{Unit:function(i){return i.clone()},string:function(i){return r.isValuelessUnit(i)?new r(null,i):r.parse(i,{allowNoUnits:!0})},"number | BigNumber | Fraction | Complex, string | Unit":function(i,a){return new r(i,a)},"number | BigNumber | Fraction":function(i){return new r(i)},"Array | Matrix":e.referToSelf(n=>i=>Bt(i,n))})}),ZN="sparse",afe=["typed","SparseMatrix"],sfe=G(ZN,afe,t=>{var{typed:e,SparseMatrix:r}=t;return e(ZN,{"":function(){return new r([])},string:function(i){return new r([],i)},"Array | Matrix":function(i){return new r(i)},"Array | Matrix, string":function(i,a){return new r(i,a)}})}),KN="createUnit",ofe=["typed","Unit"],ufe=G(KN,ofe,t=>{var{typed:e,Unit:r}=t;return e(KN,{"Object, Object":function(i,a){return r.createUnit(i,a)},Object:function(i){return r.createUnit(i,{})},"string, Unit | string | Object, Object":function(i,a,s){var o={};return o[i]=a,r.createUnit(o,s)},"string, Unit | string | Object":function(i,a){var s={};return s[i]=a,r.createUnit(s,{})},string:function(i){var a={};return a[i]={},r.createUnit(a,{})}})}),JN="acos",lfe=["typed","config","Complex"],cfe=G(JN,lfe,t=>{var{typed:e,config:r,Complex:n}=t;return e(JN,{number:function(a){return a>=-1&&a<=1||r.predictable?Math.acos(a):new n(a,0).acos()},Complex:function(a){return a.acos()},BigNumber:function(a){return a.acos()}})}),QN="acosh",ffe=["typed","config","Complex"],hfe=G(QN,ffe,t=>{var{typed:e,config:r,Complex:n}=t;return e(QN,{number:function(a){return a>=1||r.predictable?wk(a):a<=-1?new n(Math.log(Math.sqrt(a*a-1)-a),Math.PI):new n(a,0).acosh()},Complex:function(a){return a.acosh()},BigNumber:function(a){return a.acosh()}})}),eC="acot",dfe=["typed","BigNumber"],pfe=G(eC,dfe,t=>{var{typed:e,BigNumber:r}=t;return e(eC,{number:Sk,Complex:function(i){return i.acot()},BigNumber:function(i){return new r(1).div(i).atan()}})}),tC="acoth",mfe=["typed","config","Complex","BigNumber"],vfe=G(tC,mfe,t=>{var{typed:e,config:r,Complex:n,BigNumber:i}=t;return e(tC,{number:function(s){return s>=1||s<=-1||r.predictable?_k(s):new n(s,0).acoth()},Complex:function(s){return s.acoth()},BigNumber:function(s){return new i(1).div(s).atanh()}})}),rC="acsc",gfe=["typed","config","Complex","BigNumber"],yfe=G(rC,gfe,t=>{var{typed:e,config:r,Complex:n,BigNumber:i}=t;return e(rC,{number:function(s){return s<=-1||s>=1||r.predictable?Ak(s):new n(s,0).acsc()},Complex:function(s){return s.acsc()},BigNumber:function(s){return new i(1).div(s).asin()}})}),nC="acsch",bfe=["typed","BigNumber"],xfe=G(nC,bfe,t=>{var{typed:e,BigNumber:r}=t;return e(nC,{number:Dk,Complex:function(i){return i.acsch()},BigNumber:function(i){return new r(1).div(i).asinh()}})}),iC="asec",wfe=["typed","config","Complex","BigNumber"],Sfe=G(iC,wfe,t=>{var{typed:e,config:r,Complex:n,BigNumber:i}=t;return e(iC,{number:function(s){return s<=-1||s>=1||r.predictable?Ek(s):new n(s,0).asec()},Complex:function(s){return s.asec()},BigNumber:function(s){return new i(1).div(s).acos()}})}),aC="asech",_fe=["typed","config","Complex","BigNumber"],Afe=G(aC,_fe,t=>{var{typed:e,config:r,Complex:n,BigNumber:i}=t;return e(aC,{number:function(s){if(s<=1&&s>=-1||r.predictable){var o=1/s;if(o>0||r.predictable)return Nk(s);var u=Math.sqrt(o*o-1);return new n(Math.log(u-o),Math.PI)}return new n(s,0).asech()},Complex:function(s){return s.asech()},BigNumber:function(s){return new i(1).div(s).acosh()}})}),sC="asin",Dfe=["typed","config","Complex"],Efe=G(sC,Dfe,t=>{var{typed:e,config:r,Complex:n}=t;return e(sC,{number:function(a){return a>=-1&&a<=1||r.predictable?Math.asin(a):new n(a,0).asin()},Complex:function(a){return a.asin()},BigNumber:function(a){return a.asin()}})}),Nfe="asinh",Cfe=["typed"],Mfe=G(Nfe,Cfe,t=>{var{typed:e}=t;return e("asinh",{number:Ck,Complex:function(n){return n.asinh()},BigNumber:function(n){return n.asinh()}})}),Tfe="atan",Ofe=["typed"],Ffe=G(Tfe,Ofe,t=>{var{typed:e}=t;return e("atan",{number:function(n){return Math.atan(n)},Complex:function(n){return n.atan()},BigNumber:function(n){return n.atan()}})}),oC="atan2",Rfe=["typed","matrix","equalScalar","BigNumber","DenseMatrix","concat"],Pfe=G(oC,Rfe,t=>{var{typed:e,matrix:r,equalScalar:n,BigNumber:i,DenseMatrix:a,concat:s}=t,o=ka({typed:e,equalScalar:n}),u=si({typed:e}),l=Hk({typed:e,equalScalar:n}),c=Pn({typed:e,equalScalar:n}),f=gn({typed:e,DenseMatrix:a}),h=_r({typed:e,matrix:r,concat:s});return e(oC,{"number, number":Math.atan2,"BigNumber, BigNumber":(p,g)=>i.atan2(p,g)},h({scalar:"number | BigNumber",SS:l,DS:u,SD:o,Ss:c,sS:f}))}),uC="atanh",kfe=["typed","config","Complex"],Bfe=G(uC,kfe,t=>{var{typed:e,config:r,Complex:n}=t;return e(uC,{number:function(a){return a<=1&&a>=-1||r.predictable?Mk(a):new n(a,0).atanh()},Complex:function(a){return a.atanh()},BigNumber:function(a){return a.atanh()}})}),Ic=G("trigUnit",["typed"],t=>{var{typed:e}=t;return{Unit:e.referToSelf(r=>n=>{if(!n.hasBase(n.constructor.BASE_UNITS.ANGLE))throw new TypeError("Unit in function cot is no angle");return e.find(r,n.valueType())(n.value)})}}),lC="cos",Ife=["typed"],Lfe=G(lC,Ife,t=>{var{typed:e}=t,r=Ic({typed:e});return e(lC,{number:Math.cos,"Complex | BigNumber":n=>n.cos()},r)}),cC="cosh",$fe=["typed"],zfe=G(cC,$fe,t=>{var{typed:e}=t;return e(cC,{number:kre,"Complex | BigNumber":r=>r.cosh()})}),fC="cot",qfe=["typed","BigNumber"],Ufe=G(fC,qfe,t=>{var{typed:e,BigNumber:r}=t,n=Ic({typed:e});return e(fC,{number:Tk,Complex:i=>i.cot(),BigNumber:i=>new r(1).div(i.tan())},n)}),hC="coth",Hfe=["typed","BigNumber"],Wfe=G(hC,Hfe,t=>{var{typed:e,BigNumber:r}=t;return e(hC,{number:Ok,Complex:n=>n.coth(),BigNumber:n=>new r(1).div(n.tanh())})}),dC="csc",Vfe=["typed","BigNumber"],Yfe=G(dC,Vfe,t=>{var{typed:e,BigNumber:r}=t,n=Ic({typed:e});return e(dC,{number:Fk,Complex:i=>i.csc(),BigNumber:i=>new r(1).div(i.sin())},n)}),pC="csch",jfe=["typed","BigNumber"],Gfe=G(pC,jfe,t=>{var{typed:e,BigNumber:r}=t;return e(pC,{number:Rk,Complex:n=>n.csch(),BigNumber:n=>new r(1).div(n.sinh())})}),mC="sec",Xfe=["typed","BigNumber"],Zfe=G(mC,Xfe,t=>{var{typed:e,BigNumber:r}=t,n=Ic({typed:e});return e(mC,{number:Pk,Complex:i=>i.sec(),BigNumber:i=>new r(1).div(i.cos())},n)}),vC="sech",Kfe=["typed","BigNumber"],Jfe=G(vC,Kfe,t=>{var{typed:e,BigNumber:r}=t;return e(vC,{number:kk,Complex:n=>n.sech(),BigNumber:n=>new r(1).div(n.cosh())})}),gC="sin",Qfe=["typed"],ehe=G(gC,Qfe,t=>{var{typed:e}=t,r=Ic({typed:e});return e(gC,{number:Math.sin,"Complex | BigNumber":n=>n.sin()},r)}),yC="sinh",the=["typed"],rhe=G(yC,the,t=>{var{typed:e}=t;return e(yC,{number:Bk,"Complex | BigNumber":r=>r.sinh()})}),bC="tan",nhe=["typed"],ihe=G(bC,nhe,t=>{var{typed:e}=t,r=Ic({typed:e});return e(bC,{number:Math.tan,"Complex | BigNumber":n=>n.tan()},r)}),ahe="tanh",she=["typed"],ohe=G(ahe,she,t=>{var{typed:e}=t;return e("tanh",{number:Ire,"Complex | BigNumber":r=>r.tanh()})}),xC="setCartesian",uhe=["typed","size","subset","compareNatural","Index","DenseMatrix"],lhe=G(xC,uhe,t=>{var{typed:e,size:r,subset:n,compareNatural:i,Index:a,DenseMatrix:s}=t;return e(xC,{"Array | Matrix, Array | Matrix":function(u,l){var c=[];if(n(r(u),new a(0))!==0&&n(r(l),new a(0))!==0){var f=tr(Array.isArray(u)?u:u.toArray()).sort(i),h=tr(Array.isArray(l)?l:l.toArray()).sort(i);c=[];for(var p=0;p{var{typed:e,size:r,subset:n,compareNatural:i,Index:a,DenseMatrix:s}=t;return e(wC,{"Array | Matrix, Array | Matrix":function(u,l){var c;if(n(r(u),new a(0))===0)c=[];else{if(n(r(l),new a(0))===0)return tr(u.toArray());var f=xc(tr(Array.isArray(u)?u:u.toArray()).sort(i)),h=xc(tr(Array.isArray(l)?l:l.toArray()).sort(i));c=[];for(var p,g=0;g{var{typed:e,size:r,subset:n,compareNatural:i,Index:a,DenseMatrix:s}=t;return e(SC,{"Array | Matrix":function(u){var l;if(n(r(u),new a(0))===0)l=[];else{var c=tr(Array.isArray(u)?u:u.toArray()).sort(i);l=[],l.push(c[0]);for(var f=1;f{var{typed:e,size:r,subset:n,compareNatural:i,Index:a,DenseMatrix:s}=t;return e(_C,{"Array | Matrix, Array | Matrix":function(u,l){var c;if(n(r(u),new a(0))===0||n(r(l),new a(0))===0)c=[];else{var f=xc(tr(Array.isArray(u)?u:u.toArray()).sort(i)),h=xc(tr(Array.isArray(l)?l:l.toArray()).sort(i));c=[];for(var p=0;p{var{typed:e,size:r,subset:n,compareNatural:i,Index:a}=t;return e(AC,{"Array | Matrix, Array | Matrix":function(o,u){if(n(r(o),new a(0))===0)return!0;if(n(r(u),new a(0))===0)return!1;for(var l=xc(tr(Array.isArray(o)?o:o.toArray()).sort(i)),c=xc(tr(Array.isArray(u)?u:u.toArray()).sort(i)),f,h=0;h{var{typed:e,size:r,subset:n,compareNatural:i,Index:a}=t;return e(DC,{"number | BigNumber | Fraction | Complex, Array | Matrix":function(o,u){if(n(r(u),new a(0))===0)return 0;for(var l=tr(Array.isArray(u)?u:u.toArray()),c=0,f=0;f{var{typed:e,size:r,subset:n,compareNatural:i,Index:a}=t;return e(EC,{"Array | Matrix":function(l){if(n(r(l),new a(0))===0)return[];for(var c=tr(Array.isArray(l)?l:l.toArray()).sort(i),f=[],h=0;h.toString(2).length<=c.length;)f.push(s(c,h.toString(2).split("").reverse())),h++;return o(f)}});function s(u,l){for(var c=[],f=0;f0;c--)for(var f=0;fu[f+1].length&&(l=u[f],u[f]=u[f+1],u[f+1]=l);return u}}),NC="setSize",She=["typed","compareNatural"],_he=G(NC,She,t=>{var{typed:e,compareNatural:r}=t;return e(NC,{"Array | Matrix":function(i){return Array.isArray(i)?tr(i).length:tr(i.toArray()).length},"Array | Matrix, boolean":function(i,a){if(a===!1||i.length===0)return Array.isArray(i)?tr(i).length:tr(i.toArray()).length;for(var s=tr(Array.isArray(i)?i:i.toArray()).sort(r),o=1,u=1;u{var{typed:e,size:r,concat:n,subset:i,setDifference:a,Index:s}=t;return e(CC,{"Array | Matrix, Array | Matrix":function(u,l){if(i(r(u),new s(0))===0)return tr(l);if(i(r(l),new s(0))===0)return tr(u);var c=tr(u),f=tr(l);return n(a(c,f),a(f,c))}})}),MC="setUnion",Ehe=["typed","size","concat","subset","setIntersect","setSymDifference","Index"],Nhe=G(MC,Ehe,t=>{var{typed:e,size:r,concat:n,subset:i,setIntersect:a,setSymDifference:s,Index:o}=t;return e(MC,{"Array | Matrix, Array | Matrix":function(l,c){if(i(r(l),new o(0))===0)return tr(c);if(i(r(c),new o(0))===0)return tr(l);var f=tr(l),h=tr(c);return n(s(f,h),a(f,h))}})}),TC="add",Che=["typed","matrix","addScalar","equalScalar","DenseMatrix","SparseMatrix","concat"],Mhe=G(TC,Che,t=>{var{typed:e,matrix:r,addScalar:n,equalScalar:i,DenseMatrix:a,SparseMatrix:s,concat:o}=t,u=Zo({typed:e}),l=hw({typed:e,equalScalar:i}),c=Ju({typed:e,DenseMatrix:a}),f=_r({typed:e,matrix:r,concat:o});return e(TC,{"any, any":n,"any, any, ...any":e.referToSelf(h=>(p,g,m)=>{for(var b=h(p,g),y=0;y{var{typed:e,abs:r,addScalar:n,divideScalar:i,multiplyScalar:a,sqrt:s,smaller:o,isPositive:u}=t;return e(OC,{"... number | BigNumber":l,Array:l,Matrix:c=>l(tr(c.toArray()))});function l(c){for(var f=0,h=0,p=0;p{var{typed:e,abs:r,add:n,pow:i,conj:a,sqrt:s,multiply:o,equalScalar:u,larger:l,smaller:c,matrix:f,ctranspose:h,eigs:p}=t;return e(FC,{number:Math.abs,Complex:function(N){return N.abs()},BigNumber:function(N){return N.abs()},boolean:function(N){return Math.abs(N)},Array:function(N){return w(f(N),2)},Matrix:function(N){return w(N,2)},"Array, number | BigNumber | string":function(N,E){return w(f(N),E)},"Matrix, number | BigNumber | string":function(N,E){return w(N,E)}});function g(C){var N=0;return C.forEach(function(E){var M=r(E);l(M,N)&&(N=M)},!0),N}function m(C){var N;return C.forEach(function(E){var M=r(E);(!N||c(M,N))&&(N=M)},!0),N||0}function b(C,N){if(N===Number.POSITIVE_INFINITY||N==="inf")return g(C);if(N===Number.NEGATIVE_INFINITY||N==="-inf")return m(C);if(N==="fro")return w(C,2);if(typeof N=="number"&&!isNaN(N)){if(!u(N,0)){var E=0;return C.forEach(function(M){E=n(i(r(M),N),E)},!0),i(E,1/N)}return Number.POSITIVE_INFINITY}throw new Error("Unsupported parameter value")}function y(C){var N=0;return C.forEach(function(E,M){N=n(N,o(E,a(E)))}),r(s(N))}function S(C){var N=[],E=0;return C.forEach(function(M,O){var F=O[1],q=n(N[F]||0,r(M));l(q,E)&&(E=q),N[F]=q},!0),E}function x(C){var N=C.size();if(N[0]!==N[1])throw new RangeError("Invalid matrix dimensions");var E=h(C),M=o(E,C),O=p(M).values.toArray(),F=O[O.length-1];return r(s(F))}function _(C){var N=[],E=0;return C.forEach(function(M,O){var F=O[0],q=n(N[F]||0,r(M));l(q,E)&&(E=q),N[F]=q},!0),E}function A(C,N){if(N===1)return S(C);if(N===Number.POSITIVE_INFINITY||N==="inf")return _(C);if(N==="fro")return y(C);if(N===2)return x(C);throw new Error("Unsupported parameter value "+N)}function w(C,N){var E=C.size();if(E.length===1)return b(C,N);if(E.length===2){if(E[0]&&E[1])return A(C,N);throw new RangeError("Invalid matrix dimensions")}}}),RC="dot",Phe=["typed","addScalar","multiplyScalar","conj","size"],khe=G(RC,Phe,t=>{var{typed:e,addScalar:r,multiplyScalar:n,conj:i,size:a}=t;return e(RC,{"Array | DenseMatrix, Array | DenseMatrix":o,"SparseMatrix, SparseMatrix":u});function s(c,f){var h=l(c),p=l(f),g,m;if(h.length===1)g=h[0];else if(h.length===2&&h[1]===1)g=h[0];else throw new RangeError("Expected a column vector, instead got a matrix of size ("+h.join(", ")+")");if(p.length===1)m=p[0];else if(p.length===2&&p[1]===1)m=p[0];else throw new RangeError("Expected a column vector, instead got a matrix of size ("+p.join(", ")+")");if(g!==m)throw new RangeError("Vectors must have equal length ("+g+" != "+m+")");if(g===0)throw new RangeError("Cannot calculate the dot product of empty vectors");return g}function o(c,f){var h=s(c,f),p=dt(c)?c._data:c,g=dt(c)?c._datatype:void 0,m=dt(f)?f._data:f,b=dt(f)?f._datatype:void 0,y=l(c).length===2,S=l(f).length===2,x=r,_=n;if(g&&b&&g===b&&typeof g=="string"){var A=g;x=e.find(r,[A,A]),_=e.find(n,[A,A])}if(!y&&!S){for(var w=_(i(p[0]),m[0]),C=1;Cw){_++;continue}A===w&&(b=y(b,S(p[x],m[_])),x++,_++)}return b}function l(c){return dt(c)?c.size():a(c)}}),Bhe="trace",Ihe=["typed","matrix","add"],Lhe=G(Bhe,Ihe,t=>{var{typed:e,matrix:r,add:n}=t;return e("trace",{Array:function(o){return i(r(o))},SparseMatrix:a,DenseMatrix:i,any:xt});function i(s){var o=s._size,u=s._data;switch(o.length){case 1:if(o[0]===1)return xt(u[0]);throw new RangeError("Matrix must be square (size: "+Rt(o)+")");case 2:{var l=o[0],c=o[1];if(l===c){for(var f=0,h=0;h0)for(var g=0;gg)break}return p}throw new RangeError("Matrix must be square (size: "+Rt(c)+")")}}),PC="index",$he=["typed","Index"],zhe=G(PC,$he,t=>{var{typed:e,Index:r}=t;return e(PC,{"...number | string | BigNumber | Range | Array | Matrix":function(i){var a=i.map(function(o){return Mt(o)?o.toNumber():sr(o)||dt(o)?o.map(function(u){return Mt(u)?u.toNumber():u}):o}),s=new r;return r.apply(s,a),s}})}),sB=new Set(["end"]),qhe="Node",Uhe=["mathWithTransform"],Hhe=G(qhe,Uhe,t=>{var{mathWithTransform:e}=t;function r(i){for(var a of[...sB])if(i.has(a))throw new Error('Scope contains an illegal symbol, "'+a+'" is a reserved keyword')}class n{get type(){return"Node"}get isNode(){return!0}evaluate(a){return this.compile().evaluate(a)}compile(){var a=this._compile(e,{}),s={},o=null;function u(l){var c=nc(l);return r(c),a(c,s,o)}return{evaluate:u}}_compile(a,s){throw new Error("Method _compile must be implemented by type "+this.type)}forEach(a){throw new Error("Cannot run forEach on a Node interface")}map(a){throw new Error("Cannot run map on a Node interface")}_ifNode(a){if(!pr(a))throw new TypeError("Callback function must return a Node");return a}traverse(a){a(this,null,null);function s(o,u){o.forEach(function(l,c,f){u(l,c,f),s(l,u)})}s(this,a)}transform(a){function s(o,u,l){var c=a(o,u,l);return c!==o?c:o.map(s)}return s(this,null,null)}filter(a){var s=[];return this.traverse(function(o,u,l){a(o,u,l)&&s.push(o)}),s}clone(){throw new Error("Cannot clone a Node interface")}cloneDeep(){return this.map(function(a){return a.cloneDeep()})}equals(a){return a?this.type===a.type&&Wu(this,a):!1}toString(a){var s=this._getCustomString(a);return typeof s<"u"?s:this._toString(a)}_toString(){throw new Error("_toString not implemented for "+this.type)}toJSON(){throw new Error("Cannot serialize object: toJSON not implemented by "+this.type)}toHTML(a){var s=this._getCustomString(a);return typeof s<"u"?s:this._toHTML(a)}_toHTML(){throw new Error("_toHTML not implemented for "+this.type)}toTex(a){var s=this._getCustomString(a);return typeof s<"u"?s:this._toTex(a)}_toTex(a){throw new Error("_toTex not implemented for "+this.type)}_getCustomString(a){if(a&&typeof a=="object")switch(typeof a.handler){case"object":case"undefined":return;case"function":return a.handler(this,a);default:throw new TypeError("Object or function expected as callback")}}getIdentifier(){return this.type}getContent(){return this}}return n},{isClass:!0,isNode:!0});function oi(t){return t&&t.isIndexError?new Fa(t.index+1,t.min+1,t.max!==void 0?t.max+1:void 0):t}function oB(t){var{subset:e}=t;return function(n,i){try{if(Array.isArray(n))return e(n,i);if(n&&typeof n.subset=="function")return n.subset(i);if(typeof n=="string")return e(n,i);if(typeof n=="object"){if(!i.isObjectProperty())throw new TypeError("Cannot apply a numeric index as object property");return ri(n,i.getObjectProperty())}else throw new TypeError("Cannot apply index: unsupported type of object")}catch(a){throw oi(a)}}}var im="AccessorNode",Whe=["subset","Node"],Vhe=G(im,Whe,t=>{var{subset:e,Node:r}=t,n=oB({subset:e});function i(s){return!(Hu(s)||Ki(s)||er(s)||Ho(s)||Rg(s)||js(s)||Sn(s))}class a extends r{constructor(o,u){if(super(),!pr(o))throw new TypeError('Node expected for parameter "object"');if(!Oc(u))throw new TypeError('IndexNode expected for parameter "index"');this.object=o,this.index=u}get name(){return this.index?this.index.isObjectProperty()?this.index.getObjectProperty():"":this.object.name||""}get type(){return im}get isAccessorNode(){return!0}_compile(o,u){var l=this.object._compile(o,u),c=this.index._compile(o,u);if(this.index.isObjectProperty()){var f=this.index.getObjectProperty();return function(p,g,m){return ri(l(p,g,m),f)}}else return function(p,g,m){var b=l(p,g,m),y=c(p,g,b);return n(b,y)}}forEach(o){o(this.object,"object",this),o(this.index,"index",this)}map(o){return new a(this._ifNode(o(this.object,"object",this)),this._ifNode(o(this.index,"index",this)))}clone(){return new a(this.object,this.index)}_toString(o){var u=this.object.toString(o);return i(this.object)&&(u="("+u+")"),u+this.index.toString(o)}_toHTML(o){var u=this.object.toHTML(o);return i(this.object)&&(u='('+u+')'),u+this.index.toHTML(o)}_toTex(o){var u=this.object.toTex(o);return i(this.object)&&(u="\\left(' + object + '\\right)"),u+this.index.toTex(o)}toJSON(){return{mathjs:im,object:this.object,index:this.index}}static fromJSON(o){return new a(o.object,o.index)}}return vn(a,"name",im),a},{isClass:!0,isNode:!0}),am="ArrayNode",Yhe=["Node"],jhe=G(am,Yhe,t=>{var{Node:e}=t;class r extends e{constructor(i){if(super(),this.items=i||[],!Array.isArray(this.items)||!this.items.every(pr))throw new TypeError("Array containing Nodes expected")}get type(){return am}get isArrayNode(){return!0}_compile(i,a){var s=Ws(this.items,function(l){return l._compile(i,a)}),o=i.config.matrix!=="Array";if(o){var u=i.matrix;return function(c,f,h){return u(Ws(s,function(p){return p(c,f,h)}))}}else return function(c,f,h){return Ws(s,function(p){return p(c,f,h)})}}forEach(i){for(var a=0;a['+a.join(',')+']'}_toTex(i){function a(s,o){var u=s.some(Ki)&&!s.every(Ki),l=o||u,c=l?"&":"\\\\",f=s.map(function(h){return h.items?a(h.items,!o):h.toTex(i)}).join(c);return u||!l||l&&!o?"\\begin{bmatrix}"+f+"\\end{bmatrix}":f}return a(this.items,!1)}}return vn(r,"name",am),r},{isClass:!0,isNode:!0});function Ghe(t){var{subset:e,matrix:r}=t;return function(i,a,s){try{if(Array.isArray(i)){var o=r(i).subset(a,s).valueOf();return o.forEach((u,l)=>{i[l]=u}),i}else{if(i&&typeof i.subset=="function")return i.subset(a,s);if(typeof i=="string")return e(i,a,s);if(typeof i=="object"){if(!a.isObjectProperty())throw TypeError("Cannot apply a numeric index as object property");return wc(i,a.getObjectProperty(),s),i}else throw new TypeError("Cannot apply index: unsupported type of object")}}catch(u){throw oi(u)}}}var wa=[{AssignmentNode:{},FunctionAssignmentNode:{}},{ConditionalNode:{latexLeftParens:!1,latexRightParens:!1,latexParens:!1}},{"OperatorNode:or":{op:"or",associativity:"left",associativeWith:[]}},{"OperatorNode:xor":{op:"xor",associativity:"left",associativeWith:[]}},{"OperatorNode:and":{op:"and",associativity:"left",associativeWith:[]}},{"OperatorNode:bitOr":{op:"|",associativity:"left",associativeWith:[]}},{"OperatorNode:bitXor":{op:"^|",associativity:"left",associativeWith:[]}},{"OperatorNode:bitAnd":{op:"&",associativity:"left",associativeWith:[]}},{"OperatorNode:equal":{op:"==",associativity:"left",associativeWith:[]},"OperatorNode:unequal":{op:"!=",associativity:"left",associativeWith:[]},"OperatorNode:smaller":{op:"<",associativity:"left",associativeWith:[]},"OperatorNode:larger":{op:">",associativity:"left",associativeWith:[]},"OperatorNode:smallerEq":{op:"<=",associativity:"left",associativeWith:[]},"OperatorNode:largerEq":{op:">=",associativity:"left",associativeWith:[]},RelationalNode:{associativity:"left",associativeWith:[]}},{"OperatorNode:leftShift":{op:"<<",associativity:"left",associativeWith:[]},"OperatorNode:rightArithShift":{op:">>",associativity:"left",associativeWith:[]},"OperatorNode:rightLogShift":{op:">>>",associativity:"left",associativeWith:[]}},{"OperatorNode:to":{op:"to",associativity:"left",associativeWith:[]}},{RangeNode:{}},{"OperatorNode:add":{op:"+",associativity:"left",associativeWith:["OperatorNode:add","OperatorNode:subtract"]},"OperatorNode:subtract":{op:"-",associativity:"left",associativeWith:[]}},{"OperatorNode:multiply":{op:"*",associativity:"left",associativeWith:["OperatorNode:multiply","OperatorNode:divide","Operator:dotMultiply","Operator:dotDivide"]},"OperatorNode:divide":{op:"/",associativity:"left",associativeWith:[],latexLeftParens:!1,latexRightParens:!1,latexParens:!1},"OperatorNode:dotMultiply":{op:".*",associativity:"left",associativeWith:["OperatorNode:multiply","OperatorNode:divide","OperatorNode:dotMultiply","OperatorNode:doDivide"]},"OperatorNode:dotDivide":{op:"./",associativity:"left",associativeWith:[]},"OperatorNode:mod":{op:"mod",associativity:"left",associativeWith:[]}},{"OperatorNode:multiply":{associativity:"left",associativeWith:["OperatorNode:multiply","OperatorNode:divide","Operator:dotMultiply","Operator:dotDivide"]}},{"OperatorNode:unaryPlus":{op:"+",associativity:"right"},"OperatorNode:unaryMinus":{op:"-",associativity:"right"},"OperatorNode:bitNot":{op:"~",associativity:"right"},"OperatorNode:not":{op:"not",associativity:"right"}},{"OperatorNode:pow":{op:"^",associativity:"right",associativeWith:[],latexRightParens:!1},"OperatorNode:dotPow":{op:".^",associativity:"right",associativeWith:[]}},{"OperatorNode:factorial":{op:"!",associativity:"left"}},{"OperatorNode:ctranspose":{op:"'",associativity:"left"}}];function sm(t,e){if(!e||e!=="auto")return t;for(var r=t;js(r);)r=r.content;return r}function br(t,e,r,n){var i=t;e!=="keep"&&(i=t.getContent());for(var a=i.getIdentifier(),s=null,o=0;o{var{subset:e,matrix:r,Node:n}=t,i=oB({subset:e}),a=Ghe({subset:e,matrix:r});function s(u,l,c){l||(l="keep");var f=br(u,l,c),h=br(u.value,l,c);return l==="all"||h!==null&&h<=f}class o extends n{constructor(l,c,f){if(super(),this.object=l,this.index=f?c:null,this.value=f||c,!Sn(l)&&!Hu(l))throw new TypeError('SymbolNode or AccessorNode expected as "object"');if(Sn(l)&&l.name==="end")throw new Error('Cannot assign to symbol "end"');if(this.index&&!Oc(this.index))throw new TypeError('IndexNode expected as "index"');if(!pr(this.value))throw new TypeError('Node expected as "value"')}get name(){return this.index?this.index.isObjectProperty()?this.index.getObjectProperty():"":this.object.name||""}get type(){return om}get isAssignmentNode(){return!0}_compile(l,c){var f=this.object._compile(l,c),h=this.index?this.index._compile(l,c):null,p=this.value._compile(l,c),g=this.object.name;if(this.index)if(this.index.isObjectProperty()){var m=this.index.getObjectProperty();return function(_,A,w){var C=f(_,A,w),N=p(_,A,w);return wc(C,m,N),N}}else{if(Sn(this.object))return function(_,A,w){var C=f(_,A,w),N=p(_,A,w),E=h(_,A,C);return _.set(g,a(C,E,N)),N};var b=this.object.object._compile(l,c);if(this.object.index.isObjectProperty()){var y=this.object.index.getObjectProperty();return function(_,A,w){var C=b(_,A,w),N=ri(C,y),E=h(_,A,N),M=p(_,A,w);return wc(C,y,a(N,E,M)),M}}else{var S=this.object.index._compile(l,c);return function(_,A,w){var C=b(_,A,w),N=S(_,A,C),E=i(C,N),M=h(_,A,E),O=p(_,A,w);return a(C,N,a(E,M,O)),O}}}else{if(!Sn(this.object))throw new TypeError("SymbolNode expected as object");return function(_,A,w){var C=p(_,A,w);return _.set(g,C),C}}}forEach(l){l(this.object,"object",this),this.index&&l(this.index,"index",this),l(this.value,"value",this)}map(l){var c=this._ifNode(l(this.object,"object",this)),f=this.index?this._ifNode(l(this.index,"index",this)):null,h=this._ifNode(l(this.value,"value",this));return new o(c,f,h)}clone(){return new o(this.object,this.index,this.value)}_toString(l){var c=this.object.toString(l),f=this.index?this.index.toString(l):"",h=this.value.toString(l);return s(this,l&&l.parenthesis,l&&l.implicit)&&(h="("+h+")"),c+f+" = "+h}toJSON(){return{mathjs:om,object:this.object,index:this.index,value:this.value}}static fromJSON(l){return new o(l.object,l.index,l.value)}_toHTML(l){var c=this.object.toHTML(l),f=this.index?this.index.toHTML(l):"",h=this.value.toHTML(l);return s(this,l&&l.parenthesis,l&&l.implicit)&&(h='('+h+')'),c+f+'='+h}_toTex(l){var c=this.object.toTex(l),f=this.index?this.index.toTex(l):"",h=this.value.toTex(l);return s(this,l&&l.parenthesis,l&&l.implicit)&&(h="\\left(".concat(h,"\\right)")),c+f+"="+h}}return vn(o,"name",om),o},{isClass:!0,isNode:!0}),um="BlockNode",Jhe=["ResultSet","Node"],Qhe=G(um,Jhe,t=>{var{ResultSet:e,Node:r}=t;class n extends r{constructor(a){if(super(),!Array.isArray(a))throw new Error("Array expected");this.blocks=a.map(function(s){var o=s&&s.node,u=s&&s.visible!==void 0?s.visible:!0;if(!pr(o))throw new TypeError('Property "node" must be a Node');if(typeof u!="boolean")throw new TypeError('Property "visible" must be a boolean');return{node:o,visible:u}})}get type(){return um}get isBlockNode(){return!0}_compile(a,s){var o=Ws(this.blocks,function(u){return{evaluate:u.node._compile(a,s),visible:u.visible}});return function(l,c,f){var h=[];return Bg(o,function(g){var m=g.evaluate(l,c,f);g.visible&&h.push(m)}),new e(h)}}forEach(a){for(var s=0;s;')}).join('
')}_toTex(a){return this.blocks.map(function(s){return s.node.toTex(a)+(s.visible?"":";")}).join(`\\;\\; -`)}}return vn(n,"name",um),n},{isClass:!0,isNode:!0}),lm="ConditionalNode",Che=["Node"],Mhe=G(lm,Che,t=>{var{Node:e}=t;function r(i){if(typeof i=="number"||typeof i=="boolean"||typeof i=="string")return!!i;if(i){if(Mt(i))return!i.isZero();if(Hs(i))return!!(i.re||i.im);if(Ji(i))return!!i.value}if(i==null)return!1;throw new TypeError('Unsupported type of condition "'+xr(i)+'"')}class n extends e{constructor(a,s,o){if(super(),!pr(a))throw new TypeError("Parameter condition must be a Node");if(!pr(s))throw new TypeError("Parameter trueExpr must be a Node");if(!pr(o))throw new TypeError("Parameter falseExpr must be a Node");this.condition=a,this.trueExpr=s,this.falseExpr=o}get type(){return lm}get isConditionalNode(){return!0}_compile(a,s){var o=this.condition._compile(a,s),u=this.trueExpr._compile(a,s),l=this.falseExpr._compile(a,s);return function(f,h,p){return r(o(f,h,p))?u(f,h,p):l(f,h,p)}}forEach(a){a(this.condition,"condition",this),a(this.trueExpr,"trueExpr",this),a(this.falseExpr,"falseExpr",this)}map(a){return new n(this._ifNode(a(this.condition,"condition",this)),this._ifNode(a(this.trueExpr,"trueExpr",this)),this._ifNode(a(this.falseExpr,"falseExpr",this)))}clone(){return new n(this.condition,this.trueExpr,this.falseExpr)}_toString(a){var s=a&&a.parenthesis?a.parenthesis:"keep",o=br(this,s,a&&a.implicit),u=this.condition.toString(a),l=br(this.condition,s,a&&a.implicit);(s==="all"||this.condition.type==="OperatorNode"||l!==null&&l<=o)&&(u="("+u+")");var c=this.trueExpr.toString(a),f=br(this.trueExpr,s,a&&a.implicit);(s==="all"||this.trueExpr.type==="OperatorNode"||f!==null&&f<=o)&&(c="("+c+")");var h=this.falseExpr.toString(a),p=br(this.falseExpr,s,a&&a.implicit);return(s==="all"||this.falseExpr.type==="OperatorNode"||p!==null&&p<=o)&&(h="("+h+")"),u+" ? "+c+" : "+h}toJSON(){return{mathjs:lm,condition:this.condition,trueExpr:this.trueExpr,falseExpr:this.falseExpr}}static fromJSON(a){return new n(a.condition,a.trueExpr,a.falseExpr)}_toHTML(a){var s=a&&a.parenthesis?a.parenthesis:"keep",o=br(this,s,a&&a.implicit),u=this.condition.toHTML(a),l=br(this.condition,s,a&&a.implicit);(s==="all"||this.condition.type==="OperatorNode"||l!==null&&l<=o)&&(u='('+u+')');var c=this.trueExpr.toHTML(a),f=br(this.trueExpr,s,a&&a.implicit);(s==="all"||this.trueExpr.type==="OperatorNode"||f!==null&&f<=o)&&(c='('+c+')');var h=this.falseExpr.toHTML(a),p=br(this.falseExpr,s,a&&a.implicit);return(s==="all"||this.falseExpr.type==="OperatorNode"||p!==null&&p<=o)&&(h='('+h+')'),u+'?'+c+':'+h}_toTex(a){return"\\begin{cases} {"+this.trueExpr.toTex(a)+"}, &\\quad{\\text{if }\\;"+this.condition.toTex(a)+"}\\\\{"+this.falseExpr.toTex(a)+"}, &\\quad{\\text{otherwise}}\\end{cases}"}}return vn(n,"name",lm),n},{isClass:!0,isNode:!0}),u1=Object.assign||function(t){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:{},r=e.preserveFormatting,n=r===void 0?!1:r,i=e.escapeMapFn,a=i===void 0?Fhe:i,s=String(t),o="",u=a(u1({},The),n?u1({},Ohe):{}),l=Object.keys(u),c=function(){var h=!1;l.forEach(function(p,g){h||s.length>=p.length&&s.slice(0,p.length)===p&&(o+=u[l[g]],s=s.slice(p.length,s.length),h=!0)}),h||(o+=s.slice(0,1),s=s.slice(1,s.length))};s;)c();return o};const Rhe=Vu(Phe);var l1={Alpha:"A",alpha:"\\alpha",Beta:"B",beta:"\\beta",Gamma:"\\Gamma",gamma:"\\gamma",Delta:"\\Delta",delta:"\\delta",Epsilon:"E",epsilon:"\\epsilon",varepsilon:"\\varepsilon",Zeta:"Z",zeta:"\\zeta",Eta:"H",eta:"\\eta",Theta:"\\Theta",theta:"\\theta",vartheta:"\\vartheta",Iota:"I",iota:"\\iota",Kappa:"K",kappa:"\\kappa",varkappa:"\\varkappa",Lambda:"\\Lambda",lambda:"\\lambda",Mu:"M",mu:"\\mu",Nu:"N",nu:"\\nu",Xi:"\\Xi",xi:"\\xi",Omicron:"O",omicron:"o",Pi:"\\Pi",pi:"\\pi",varpi:"\\varpi",Rho:"P",rho:"\\rho",varrho:"\\varrho",Sigma:"\\Sigma",sigma:"\\sigma",varsigma:"\\varsigma",Tau:"T",tau:"\\tau",Upsilon:"\\Upsilon",upsilon:"\\upsilon",Phi:"\\Phi",phi:"\\phi",varphi:"\\varphi",Chi:"X",chi:"\\chi",Psi:"\\Psi",psi:"\\psi",Omega:"\\Omega",omega:"\\omega",true:"\\mathrm{True}",false:"\\mathrm{False}",i:"i",inf:"\\infty",Inf:"\\infty",infinity:"\\infty",Infinity:"\\infty",oo:"\\infty",lim:"\\lim",undefined:"\\mathbf{?}"},Qt={transpose:"^\\top",ctranspose:"^H",factorial:"!",pow:"^",dotPow:".^\\wedge",unaryPlus:"+",unaryMinus:"-",bitNot:"\\~",not:"\\neg",multiply:"\\cdot",divide:"\\frac",dotMultiply:".\\cdot",dotDivide:".:",mod:"\\mod",add:"+",subtract:"-",to:"\\rightarrow",leftShift:"<<",rightArithShift:">>",rightLogShift:">>>",equal:"=",unequal:"\\neq",smaller:"<",larger:">",smallerEq:"\\leq",largerEq:"\\geq",bitAnd:"\\&",bitXor:"\\underline{|}",bitOr:"|",and:"\\wedge",xor:"\\veebar",or:"\\vee"},FC={abs:{1:"\\left|${args[0]}\\right|"},add:{2:"\\left(${args[0]}".concat(Qt.add,"${args[1]}\\right)")},cbrt:{1:"\\sqrt[3]{${args[0]}}"},ceil:{1:"\\left\\lceil${args[0]}\\right\\rceil"},cube:{1:"\\left(${args[0]}\\right)^3"},divide:{2:"\\frac{${args[0]}}{${args[1]}}"},dotDivide:{2:"\\left(${args[0]}".concat(Qt.dotDivide,"${args[1]}\\right)")},dotMultiply:{2:"\\left(${args[0]}".concat(Qt.dotMultiply,"${args[1]}\\right)")},dotPow:{2:"\\left(${args[0]}".concat(Qt.dotPow,"${args[1]}\\right)")},exp:{1:"\\exp\\left(${args[0]}\\right)"},expm1:"\\left(e".concat(Qt.pow,"{${args[0]}}-1\\right)"),fix:{1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},floor:{1:"\\left\\lfloor${args[0]}\\right\\rfloor"},gcd:"\\gcd\\left(${args}\\right)",hypot:"\\hypot\\left(${args}\\right)",log:{1:"\\ln\\left(${args[0]}\\right)",2:"\\log_{${args[1]}}\\left(${args[0]}\\right)"},log10:{1:"\\log_{10}\\left(${args[0]}\\right)"},log1p:{1:"\\ln\\left(${args[0]}+1\\right)",2:"\\log_{${args[1]}}\\left(${args[0]}+1\\right)"},log2:"\\log_{2}\\left(${args[0]}\\right)",mod:{2:"\\left(${args[0]}".concat(Qt.mod,"${args[1]}\\right)")},multiply:{2:"\\left(${args[0]}".concat(Qt.multiply,"${args[1]}\\right)")},norm:{1:"\\left\\|${args[0]}\\right\\|",2:void 0},nthRoot:{2:"\\sqrt[${args[1]}]{${args[0]}}"},nthRoots:{2:"\\{y : $y^{args[1]} = {${args[0]}}\\}"},pow:{2:"\\left(${args[0]}\\right)".concat(Qt.pow,"{${args[1]}}")},round:{1:"\\left\\lfloor${args[0]}\\right\\rceil",2:void 0},sign:{1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},sqrt:{1:"\\sqrt{${args[0]}}"},square:{1:"\\left(${args[0]}\\right)^2"},subtract:{2:"\\left(${args[0]}".concat(Qt.subtract,"${args[1]}\\right)")},unaryMinus:{1:"".concat(Qt.unaryMinus,"\\left(${args[0]}\\right)")},unaryPlus:{1:"".concat(Qt.unaryPlus,"\\left(${args[0]}\\right)")},bitAnd:{2:"\\left(${args[0]}".concat(Qt.bitAnd,"${args[1]}\\right)")},bitNot:{1:Qt.bitNot+"\\left(${args[0]}\\right)"},bitOr:{2:"\\left(${args[0]}".concat(Qt.bitOr,"${args[1]}\\right)")},bitXor:{2:"\\left(${args[0]}".concat(Qt.bitXor,"${args[1]}\\right)")},leftShift:{2:"\\left(${args[0]}".concat(Qt.leftShift,"${args[1]}\\right)")},rightArithShift:{2:"\\left(${args[0]}".concat(Qt.rightArithShift,"${args[1]}\\right)")},rightLogShift:{2:"\\left(${args[0]}".concat(Qt.rightLogShift,"${args[1]}\\right)")},bellNumbers:{1:"\\mathrm{B}_{${args[0]}}"},catalan:{1:"\\mathrm{C}_{${args[0]}}"},stirlingS2:{2:"\\mathrm{S}\\left(${args}\\right)"},arg:{1:"\\arg\\left(${args[0]}\\right)"},conj:{1:"\\left(${args[0]}\\right)^*"},im:{1:"\\Im\\left\\lbrace${args[0]}\\right\\rbrace"},re:{1:"\\Re\\left\\lbrace${args[0]}\\right\\rbrace"},and:{2:"\\left(${args[0]}".concat(Qt.and,"${args[1]}\\right)")},not:{1:Qt.not+"\\left(${args[0]}\\right)"},or:{2:"\\left(${args[0]}".concat(Qt.or,"${args[1]}\\right)")},xor:{2:"\\left(${args[0]}".concat(Qt.xor,"${args[1]}\\right)")},cross:{2:"\\left(${args[0]}\\right)\\times\\left(${args[1]}\\right)"},ctranspose:{1:"\\left(${args[0]}\\right)".concat(Qt.ctranspose)},det:{1:"\\det\\left(${args[0]}\\right)"},dot:{2:"\\left(${args[0]}\\cdot${args[1]}\\right)"},expm:{1:"\\exp\\left(${args[0]}\\right)"},inv:{1:"\\left(${args[0]}\\right)^{-1}"},pinv:{1:"\\left(${args[0]}\\right)^{+}"},sqrtm:{1:"{${args[0]}}".concat(Qt.pow,"{\\frac{1}{2}}")},trace:{1:"\\mathrm{tr}\\left(${args[0]}\\right)"},transpose:{1:"\\left(${args[0]}\\right)".concat(Qt.transpose)},combinations:{2:"\\binom{${args[0]}}{${args[1]}}"},combinationsWithRep:{2:"\\left(\\!\\!{\\binom{${args[0]}}{${args[1]}}}\\!\\!\\right)"},factorial:{1:"\\left(${args[0]}\\right)".concat(Qt.factorial)},gamma:{1:"\\Gamma\\left(${args[0]}\\right)"},lgamma:{1:"\\ln\\Gamma\\left(${args[0]}\\right)"},equal:{2:"\\left(${args[0]}".concat(Qt.equal,"${args[1]}\\right)")},larger:{2:"\\left(${args[0]}".concat(Qt.larger,"${args[1]}\\right)")},largerEq:{2:"\\left(${args[0]}".concat(Qt.largerEq,"${args[1]}\\right)")},smaller:{2:"\\left(${args[0]}".concat(Qt.smaller,"${args[1]}\\right)")},smallerEq:{2:"\\left(${args[0]}".concat(Qt.smallerEq,"${args[1]}\\right)")},unequal:{2:"\\left(${args[0]}".concat(Qt.unequal,"${args[1]}\\right)")},erf:{1:"erf\\left(${args[0]}\\right)"},max:"\\max\\left(${args}\\right)",min:"\\min\\left(${args}\\right)",variance:"\\mathrm{Var}\\left(${args}\\right)",acos:{1:"\\cos^{-1}\\left(${args[0]}\\right)"},acosh:{1:"\\cosh^{-1}\\left(${args[0]}\\right)"},acot:{1:"\\cot^{-1}\\left(${args[0]}\\right)"},acoth:{1:"\\coth^{-1}\\left(${args[0]}\\right)"},acsc:{1:"\\csc^{-1}\\left(${args[0]}\\right)"},acsch:{1:"\\mathrm{csch}^{-1}\\left(${args[0]}\\right)"},asec:{1:"\\sec^{-1}\\left(${args[0]}\\right)"},asech:{1:"\\mathrm{sech}^{-1}\\left(${args[0]}\\right)"},asin:{1:"\\sin^{-1}\\left(${args[0]}\\right)"},asinh:{1:"\\sinh^{-1}\\left(${args[0]}\\right)"},atan:{1:"\\tan^{-1}\\left(${args[0]}\\right)"},atan2:{2:"\\mathrm{atan2}\\left(${args}\\right)"},atanh:{1:"\\tanh^{-1}\\left(${args[0]}\\right)"},cos:{1:"\\cos\\left(${args[0]}\\right)"},cosh:{1:"\\cosh\\left(${args[0]}\\right)"},cot:{1:"\\cot\\left(${args[0]}\\right)"},coth:{1:"\\coth\\left(${args[0]}\\right)"},csc:{1:"\\csc\\left(${args[0]}\\right)"},csch:{1:"\\mathrm{csch}\\left(${args[0]}\\right)"},sec:{1:"\\sec\\left(${args[0]}\\right)"},sech:{1:"\\mathrm{sech}\\left(${args[0]}\\right)"},sin:{1:"\\sin\\left(${args[0]}\\right)"},sinh:{1:"\\sinh\\left(${args[0]}\\right)"},tan:{1:"\\tan\\left(${args[0]}\\right)"},tanh:{1:"\\tanh\\left(${args[0]}\\right)"},to:{2:"\\left(${args[0]}".concat(Qt.to,"${args[1]}\\right)")},numeric:function(e,r){return e.args[0].toTex()},number:{0:"0",1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)${args[1]}\\right)"},string:{0:'\\mathtt{""}',1:"\\mathrm{string}\\left(${args[0]}\\right)"},bignumber:{0:"0",1:"\\left(${args[0]}\\right)"},complex:{0:"0",1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)+".concat(l1.i,"\\cdot\\left(${args[1]}\\right)\\right)")},matrix:{0:"\\begin{bmatrix}\\end{bmatrix}",1:"\\left(${args[0]}\\right)",2:"\\left(${args[0]}\\right)"},sparse:{0:"\\begin{bsparse}\\end{bsparse}",1:"\\left(${args[0]}\\right)"},unit:{1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)${args[1]}\\right)"}},Ihe="\\mathrm{${name}}\\left(${args}\\right)",PC={deg:"^\\circ"};function c1(t){return Rhe(t,{preserveFormatting:!0})}function QI(t,e){return e=typeof e>"u"?!1:e,e?nt(PC,t)?PC[t]:"\\mathrm{"+c1(t)+"}":nt(l1,t)?l1[t]:c1(t)}var cm="ConstantNode",Bhe=["Node"],khe=G(cm,Bhe,t=>{var{Node:e}=t;class r extends e{constructor(i){super(),this.value=i}get type(){return cm}get isConstantNode(){return!0}_compile(i,a){var s=this.value;return function(){return s}}forEach(i){}map(i){return this.clone()}clone(){return new r(this.value)}_toString(i){return Pt(this.value,i)}_toHTML(i){var a=this._toString(i);switch(xr(this.value)){case"number":case"BigNumber":case"Fraction":return''+a+"";case"string":return''+a+"";case"boolean":return''+a+"";case"null":return''+a+"";case"undefined":return''+a+"";default:return''+a+""}}toJSON(){return{mathjs:cm,value:this.value}}static fromJSON(i){return new r(i.value)}_toTex(i){var a=this._toString(i);switch(xr(this.value)){case"string":return"\\mathtt{"+c1(a)+"}";case"number":case"BigNumber":{if(!isFinite(this.value))return this.value.valueOf()<0?"-\\infty":"\\infty";var s=a.toLowerCase().indexOf("e");if(s!==-1)return a.substring(0,s)+"\\cdot10^{"+a.substring(s+1)+"}"}return a;case"Fraction":return this.value.toLatex();default:return a}}}return vn(r,"name",cm),r},{isClass:!0,isNode:!0}),fm="FunctionAssignmentNode",Lhe=["typed","Node"],$he=G(fm,Lhe,t=>{var{typed:e,Node:r}=t;function n(a,s,o){var u=br(a,s,o),l=br(a.expr,s,o);return s==="all"||l!==null&&l<=u}class i extends r{constructor(s,o,u){if(super(),typeof s!="string")throw new TypeError('String expected for parameter "name"');if(!Array.isArray(o))throw new TypeError('Array containing strings or objects expected for parameter "params"');if(!pr(u))throw new TypeError('Node expected for parameter "expr"');if(KI.has(s))throw new Error('Illegal function name, "'+s+'" is a reserved keyword');var l=new Set;for(var c of o){var f=typeof c=="string"?c:c.name;if(l.has(f))throw new Error('Duplicate parameter name "'.concat(f,'"'));l.add(f)}this.name=s,this.params=o.map(function(h){return h&&h.name||h}),this.types=o.map(function(h){return h&&h.type||"any"}),this.expr=u}get type(){return fm}get isFunctionAssignmentNode(){return!0}_compile(s,o){var u=Object.create(o);Rg(this.params,function(g){u[g]=!0});var l=this.expr._compile(s,u),c=this.name,f=this.params,h=M2(this.types,","),p=c+"("+M2(this.params,", ")+")";return function(m,b,y){var S={};S[h]=function(){for(var _=Object.create(b),A=0;A'+ea(this.params[l])+"");var c=this.expr.toHTML(s);return n(this,o,s&&s.implicit)&&(c='('+c+')'),''+ea(this.name)+'('+u.join(',')+')='+c}_toTex(s){var o=s&&s.parenthesis?s.parenthesis:"keep",u=this.expr.toTex(s);return n(this,o,s&&s.implicit)&&(u="\\left(".concat(u,"\\right)")),"\\mathrm{"+this.name+"}\\left("+this.params.map(QI).join(",")+"\\right)="+u}}return vn(i,"name",fm),i},{isClass:!0,isNode:!0}),hm="IndexNode",zhe=["Node","size"],qhe=G(hm,zhe,t=>{var{Node:e,size:r}=t;class n extends e{constructor(a,s){if(super(),this.dimensions=a,this.dotNotation=s||!1,!Array.isArray(a)||!a.every(pr))throw new TypeError('Array containing Nodes expected for parameter "dimensions"');if(this.dotNotation&&!this.isObjectProperty())throw new Error("dotNotation only applicable for object properties")}get type(){return hm}get isIndexNode(){return!0}_compile(a,s){var o=Ws(this.dimensions,function(l,c){var f=l.filter(g=>g.isSymbolNode&&g.name==="end").length>0;if(f){var h=Object.create(s);h.end=!0;var p=l._compile(a,h);return function(m,b,y){if(!dt(y)&&!sr(y)&&!qn(y))throw new TypeError('Cannot resolve "end": context must be a Matrix, Array, or string but is '+xr(y));var S=r(y).valueOf(),x=Object.create(b);return x.end=S[c],p(m,x,y)}}else return l._compile(a,s)}),u=ri(a,"index");return function(c,f,h){var p=Ws(o,function(g){return g(c,f,h)});return u(...p)}}forEach(a){for(var s=0;s.'+ea(this.getObjectProperty())+"":'['+s.join(',')+']'}_toTex(a){var s=this.dimensions.map(function(o){return o.toTex(a)});return this.dotNotation?"."+this.getObjectProperty():"_{"+s.join(",")+"}"}}return vn(n,"name",hm),n},{isClass:!0,isNode:!0}),dm="ObjectNode",Uhe=["Node"],Hhe=G(dm,Uhe,t=>{var{Node:e}=t;class r extends e{constructor(i){if(super(),this.properties=i||{},i&&(typeof i!="object"||!Object.keys(i).every(function(a){return pr(i[a])})))throw new TypeError("Object containing Nodes expected")}get type(){return dm}get isObjectNode(){return!0}_compile(i,a){var s={};for(var o in this.properties)if(nt(this.properties,o)){var u=Vl(o),l=JSON.parse(u),c=ri(this.properties,o);s[l]=c._compile(i,a)}return function(h,p,g){var m={};for(var b in s)nt(s,b)&&(m[b]=s[b](h,p,g));return m}}forEach(i){for(var a in this.properties)nt(this.properties,a)&&i(this.properties[a],"properties["+Vl(a)+"]",this)}map(i){var a={};for(var s in this.properties)nt(this.properties,s)&&(a[s]=this._ifNode(i(this.properties[s],"properties["+Vl(s)+"]",this)));return new r(a)}clone(){var i={};for(var a in this.properties)nt(this.properties,a)&&(i[a]=this.properties[a]);return new r(i)}_toString(i){var a=[];for(var s in this.properties)nt(this.properties,s)&&a.push(Vl(s)+": "+this.properties[s].toString(i));return"{"+a.join(", ")+"}"}toJSON(){return{mathjs:dm,properties:this.properties}}static fromJSON(i){return new r(i.properties)}_toHTML(i){var a=[];for(var s in this.properties)nt(this.properties,s)&&a.push(''+ea(s)+':'+this.properties[s].toHTML(i));return'{'+a.join(',')+'}'}_toTex(i){var a=[];for(var s in this.properties)nt(this.properties,s)&&a.push("\\mathbf{"+s+":} & "+this.properties[s].toTex(i)+"\\\\");var o="\\left\\{\\begin{array}{ll}"+a.join(` -`)+"\\end{array}\\right\\}";return o}}return vn(r,"name",dm),r},{isClass:!0,isNode:!0});function th(t,e){return new yR(t,new Ig(e),new Set(Object.keys(e)))}var pm="OperatorNode",Whe=["Node"],Vhe=G(pm,Whe,t=>{var{Node:e}=t;function r(a,s){var o=a;if(s==="auto")for(;js(o);)o=o.content;return er(o)?!0:tn(o)?r(o.args[0],s):!1}function n(a,s,o,u,l){var c=br(a,s,o),f=Xf(a,s);if(s==="all"||u.length>2&&a.getIdentifier()!=="OperatorNode:add"&&a.getIdentifier()!=="OperatorNode:multiply")return u.map(function(M){switch(M.getContent().type){case"ArrayNode":case"ConstantNode":case"SymbolNode":case"ParenthesisNode":return!1;default:return!0}});var h;switch(u.length){case 0:h=[];break;case 1:{var p=br(u[0],s,o,a);if(l&&p!==null){var g,m;if(s==="keep"?(g=u[0].getIdentifier(),m=a.getIdentifier()):(g=u[0].getContent().getIdentifier(),m=a.getContent().getIdentifier()),wa[c][m].latexLeftParens===!1){h=[!1];break}if(wa[p][g].latexParens===!1){h=[!1];break}}if(p===null){h=[!1];break}if(p<=c){h=[!0];break}h=[!1]}break;case 2:{var b,y=br(u[0],s,o,a),S=Ky(a,u[0],s);y===null?b=!1:y===c&&f==="right"&&!S||y=2&&a.getIdentifier()==="OperatorNode:multiply"&&a.implicit&&s!=="all"&&o==="hide")for(var N=1;N2&&(this.getIdentifier()==="OperatorNode:add"||this.getIdentifier()==="OperatorNode:multiply")){var b=l.map(function(y,S){return y=y.toString(s),c[S]&&(y="("+y+")"),y});return this.implicit&&this.getIdentifier()==="OperatorNode:multiply"&&u==="hide"?b.join(" "):b.join(" "+this.op+" ")}else return this.fn+"("+this.args.join(", ")+")"}toJSON(){return{mathjs:pm,op:this.op,fn:this.fn,args:this.args,implicit:this.implicit,isPercentage:this.isPercentage}}static fromJSON(s){return new i(s.op,s.fn,s.args,s.implicit,s.isPercentage)}_toHTML(s){var o=s&&s.parenthesis?s.parenthesis:"keep",u=s&&s.implicit?s.implicit:"hide",l=this.args,c=n(this,o,u,l,!1);if(l.length===1){var f=Xf(this,o),h=l[0].toHTML(s);return c[0]&&(h='('+h+')'),f==="right"?''+ea(this.op)+""+h:h+''+ea(this.op)+""}else if(l.length===2){var p=l[0].toHTML(s),g=l[1].toHTML(s);return c[0]&&(p='('+p+')'),c[1]&&(g='('+g+')'),this.implicit&&this.getIdentifier()==="OperatorNode:multiply"&&u==="hide"?p+''+g:p+''+ea(this.op)+""+g}else{var m=l.map(function(b,y){return b=b.toHTML(s),c[y]&&(b='('+b+')'),b});return l.length>2&&(this.getIdentifier()==="OperatorNode:add"||this.getIdentifier()==="OperatorNode:multiply")?this.implicit&&this.getIdentifier()==="OperatorNode:multiply"&&u==="hide"?m.join(''):m.join(''+ea(this.op)+""):''+ea(this.fn)+'('+m.join(',')+')'}}_toTex(s){var o=s&&s.parenthesis?s.parenthesis:"keep",u=s&&s.implicit?s.implicit:"hide",l=this.args,c=n(this,o,u,l,!0),f=Qt[this.fn];if(f=typeof f>"u"?this.op:f,l.length===1){var h=Xf(this,o),p=l[0].toTex(s);return c[0]&&(p="\\left(".concat(p,"\\right)")),h==="right"?f+p:p+f}else if(l.length===2){var g=l[0],m=g.toTex(s);c[0]&&(m="\\left(".concat(m,"\\right)"));var b=l[1],y=b.toTex(s);c[1]&&(y="\\left(".concat(y,"\\right)"));var S;switch(o==="keep"?S=g.getIdentifier():S=g.getContent().getIdentifier(),this.getIdentifier()){case"OperatorNode:divide":return f+"{"+m+"}{"+y+"}";case"OperatorNode:pow":switch(m="{"+m+"}",y="{"+y+"}",S){case"ConditionalNode":case"OperatorNode:divide":m="\\left(".concat(m,"\\right)")}break;case"OperatorNode:multiply":if(this.implicit&&u==="hide")return m+"~"+y}return m+f+y}else if(l.length>2&&(this.getIdentifier()==="OperatorNode:add"||this.getIdentifier()==="OperatorNode:multiply")){var x=l.map(function(_,A){return _=_.toTex(s),c[A]&&(_="\\left(".concat(_,"\\right)")),_});return this.getIdentifier()==="OperatorNode:multiply"&&this.implicit&&u==="hide"?x.join("~"):x.join(f)}else return"\\mathrm{"+this.fn+"}\\left("+l.map(function(_){return _.toTex(s)}).join(",")+"\\right)"}getIdentifier(){return this.type+":"+this.fn}}return vn(i,"name",pm),i},{isClass:!0,isNode:!0}),mm="ParenthesisNode",Yhe=["Node"],jhe=G(mm,Yhe,t=>{var{Node:e}=t;class r extends e{constructor(i){if(super(),!pr(i))throw new TypeError('Node expected for parameter "content"');this.content=i}get type(){return mm}get isParenthesisNode(){return!0}_compile(i,a){return this.content._compile(i,a)}getContent(){return this.content.getContent()}forEach(i){i(this.content,"content",this)}map(i){var a=i(this.content,"content",this);return new r(a)}clone(){return new r(this.content)}_toString(i){return!i||i&&!i.parenthesis||i&&i.parenthesis==="keep"?"("+this.content.toString(i)+")":this.content.toString(i)}toJSON(){return{mathjs:mm,content:this.content}}static fromJSON(i){return new r(i.content)}_toHTML(i){return!i||i&&!i.parenthesis||i&&i.parenthesis==="keep"?'('+this.content.toHTML(i)+')':this.content.toHTML(i)}_toTex(i){return!i||i&&!i.parenthesis||i&&i.parenthesis==="keep"?"\\left(".concat(this.content.toTex(i),"\\right)"):this.content.toTex(i)}}return vn(r,"name",mm),r},{isClass:!0,isNode:!0}),vm="RangeNode",Ghe=["Node"],Xhe=G(vm,Ghe,t=>{var{Node:e}=t;function r(i,a,s){var o=br(i,a,s),u={},l=br(i.start,a,s);if(u.start=l!==null&&l<=o||a==="all",i.step){var c=br(i.step,a,s);u.step=c!==null&&c<=o||a==="all"}var f=br(i.end,a,s);return u.end=f!==null&&f<=o||a==="all",u}class n extends e{constructor(a,s,o){if(super(),!pr(a))throw new TypeError("Node expected");if(!pr(s))throw new TypeError("Node expected");if(o&&!pr(o))throw new TypeError("Node expected");if(arguments.length>3)throw new Error("Too many arguments");this.start=a,this.end=s,this.step=o||null}get type(){return vm}get isRangeNode(){return!0}needsEnd(){var a=this.filter(function(s){return Sn(s)&&s.name==="end"});return a.length>0}_compile(a,s){var o=a.range,u=this.start._compile(a,s),l=this.end._compile(a,s);if(this.step){var c=this.step._compile(a,s);return function(h,p,g){return o(u(h,p,g),l(h,p,g),c(h,p,g))}}else return function(h,p,g){return o(u(h,p,g),l(h,p,g))}}forEach(a){a(this.start,"start",this),a(this.end,"end",this),this.step&&a(this.step,"step",this)}map(a){return new n(this._ifNode(a(this.start,"start",this)),this._ifNode(a(this.end,"end",this)),this.step&&this._ifNode(a(this.step,"step",this)))}clone(){return new n(this.start,this.end,this.step&&this.step)}_toString(a){var s=a&&a.parenthesis?a.parenthesis:"keep",o=r(this,s,a&&a.implicit),u,l=this.start.toString(a);if(o.start&&(l="("+l+")"),u=l,this.step){var c=this.step.toString(a);o.step&&(c="("+c+")"),u+=":"+c}var f=this.end.toString(a);return o.end&&(f="("+f+")"),u+=":"+f,u}toJSON(){return{mathjs:vm,start:this.start,end:this.end,step:this.step}}static fromJSON(a){return new n(a.start,a.end,a.step)}_toHTML(a){var s=a&&a.parenthesis?a.parenthesis:"keep",o=r(this,s,a&&a.implicit),u,l=this.start.toHTML(a);if(o.start&&(l='('+l+')'),u=l,this.step){var c=this.step.toHTML(a);o.step&&(c='('+c+')'),u+=':'+c}var f=this.end.toHTML(a);return o.end&&(f='('+f+')'),u+=':'+f,u}_toTex(a){var s=a&&a.parenthesis?a.parenthesis:"keep",o=r(this,s,a&&a.implicit),u=this.start.toTex(a);if(o.start&&(u="\\left(".concat(u,"\\right)")),this.step){var l=this.step.toTex(a);o.step&&(l="\\left(".concat(l,"\\right)")),u+=":"+l}var c=this.end.toTex(a);return o.end&&(c="\\left(".concat(c,"\\right)")),u+=":"+c,u}}return vn(n,"name",vm),n},{isClass:!0,isNode:!0}),gm="RelationalNode",Zhe=["Node"],Khe=G(gm,Zhe,t=>{var{Node:e}=t,r={equal:"==",unequal:"!=",smaller:"<",larger:">",smallerEq:"<=",largerEq:">="};class n extends e{constructor(a,s){if(super(),!Array.isArray(a))throw new TypeError("Parameter conditionals must be an array");if(!Array.isArray(s))throw new TypeError("Parameter params must be an array");if(a.length!==s.length-1)throw new TypeError("Parameter params must contain exactly one more element than parameter conditionals");this.conditionals=a,this.params=s}get type(){return gm}get isRelationalNode(){return!0}_compile(a,s){var o=this,u=this.params.map(l=>l._compile(a,s));return function(c,f,h){for(var p,g=u[0](c,f,h),m=0;ma(s,"params["+o+"]",this),this)}map(a){return new n(this.conditionals.slice(),this.params.map((s,o)=>this._ifNode(a(s,"params["+o+"]",this)),this))}clone(){return new n(this.conditionals,this.params)}_toString(a){for(var s=a&&a.parenthesis?a.parenthesis:"keep",o=br(this,s,a&&a.implicit),u=this.params.map(function(f,h){var p=br(f,s,a&&a.implicit);return s==="all"||p!==null&&p<=o?"("+f.toString(a)+")":f.toString(a)}),l=u[0],c=0;c('+f.toHTML(a)+')':f.toHTML(a)}),l=u[0],c=0;c'+ea(r[this.conditionals[c]])+""+u[c+1];return l}_toTex(a){for(var s=a&&a.parenthesis?a.parenthesis:"keep",o=br(this,s,a&&a.implicit),u=this.params.map(function(f,h){var p=br(f,s,a&&a.implicit);return s==="all"||p!==null&&p<=o?"\\left("+f.toTex(a)+"\right)":f.toTex(a)}),l=u[0],c=0;c{var{math:e,Unit:r,Node:n}=t;function i(s){return r?r.isValuelessUnit(s):!1}class a extends n{constructor(o){if(super(),typeof o!="string")throw new TypeError('String expected for parameter "name"');this.name=o}get type(){return"SymbolNode"}get isSymbolNode(){return!0}_compile(o,u){var l=this.name;if(u[l]===!0)return function(f,h,p){return ri(h,l)};if(l in o)return function(f,h,p){return f.has(l)?f.get(l):ri(o,l)};var c=i(l);return function(f,h,p){return f.has(l)?f.get(l):c?new r(null,l):a.onUndefinedSymbol(l)}}forEach(o){}map(o){return this.clone()}static onUndefinedSymbol(o){throw new Error("Undefined symbol "+o)}clone(){return new a(this.name)}_toString(o){return this.name}_toHTML(o){var u=ea(this.name);return u==="true"||u==="false"?''+u+"":u==="i"?''+u+"":u==="Infinity"?''+u+"":u==="NaN"?''+u+"":u==="null"?''+u+"":u==="undefined"?''+u+"":''+u+""}toJSON(){return{mathjs:"SymbolNode",name:this.name}}static fromJSON(o){return new a(o.name)}_toTex(o){var u=!1;typeof e[this.name]>"u"&&i(this.name)&&(u=!0);var l=QI(this.name,u);return l[0]==="\\"?l:" "+l}}return a},{isClass:!0,isNode:!0}),ym="FunctionNode",tde=["math","Node","SymbolNode"],rde=G(ym,tde,t=>{var e,{math:r,Node:n,SymbolNode:i}=t,a=u=>Pt(u,{truncate:78});function s(u,l,c){for(var f="",h=/\$(?:\{([a-z_][a-z_0-9]*)(?:\[([0-9]+)\])?\}|\$)/gi,p=0,g;(g=h.exec(u))!==null;)if(f+=u.substring(p,g.index),p=g.index,g[0]==="$$")f+="$",p++;else{p+=g[0].length;var m=l[g[1]];if(!m)throw new ReferenceError("Template: Property "+g[1]+" does not exist.");if(g[2]===void 0)switch(typeof m){case"string":f+=m;break;case"object":if(pr(m))f+=m.toTex(c);else if(Array.isArray(m))f+=m.map(function(b,y){if(pr(b))return b.toTex(c);throw new TypeError("Template: "+g[1]+"["+y+"] is not a Node.")}).join(",");else throw new TypeError("Template: "+g[1]+" has to be a Node, String or array of Nodes");break;default:throw new TypeError("Template: "+g[1]+" has to be a Node, String or array of Nodes")}else if(pr(m[g[2]]&&m[g[2]]))f+=m[g[2]].toTex(c);else throw new TypeError("Template: "+g[1]+"["+g[2]+"] is not a Node.")}return f+=u.slice(p),f}class o extends n{constructor(l,c){if(super(),typeof l=="string"&&(l=new i(l)),!pr(l))throw new TypeError('Node expected as parameter "fn"');if(!Array.isArray(c)||!c.every(pr))throw new TypeError('Array containing Nodes expected for parameter "args"');this.fn=l,this.args=c||[]}get name(){return this.fn.name||""}get type(){return ym}get isFunctionNode(){return!0}_compile(l,c){var f=this.args.map(E=>E._compile(l,c));if(Sn(this.fn)){var h=this.fn.name;if(c[h]){var y=this.args;return function(N,M,O){var F=ri(M,h);if(typeof F!="function")throw new TypeError("Argument '".concat(h,"' was not a function; received: ").concat(a(F)));if(F.rawArgs)return F(y,l,th(N,M));var q=f.map(V=>V(N,M,O));return F.apply(F,q)}}else{var p=h in l?ri(l,h):void 0,g=typeof p=="function"&&p.rawArgs===!0,m=E=>{var N;if(E.has(h))N=E.get(h);else if(h in l)N=ri(l,h);else return o.onUndefinedFunction(h);if(typeof N=="function")return N;throw new TypeError("'".concat(h,`' is not a function; its value is: - `).concat(a(N)))};if(g){var b=this.args;return function(N,M,O){var F=m(N);return F(b,l,th(N,M))}}else switch(f.length){case 0:return function(N,M,O){var F=m(N);return F()};case 1:return function(N,M,O){var F=m(N),q=f[0];return F(q(N,M,O))};case 2:return function(N,M,O){var F=m(N),q=f[0],V=f[1];return F(q(N,M,O),V(N,M,O))};default:return function(N,M,O){var F=m(N),q=f.map(V=>V(N,M,O));return F(...q)}}}}else if(Hu(this.fn)&&Mc(this.fn.index)&&this.fn.index.isObjectProperty()){var S=this.fn.object._compile(l,c),x=this.fn.index.getObjectProperty(),_=this.args;return function(N,M,O){var F=S(N,M,O),q=Ere(F,x);if(q!=null&&q.rawArgs)return q(_,l,th(N,M));var V=f.map(H=>H(N,M,O));return q.apply(F,V)}}else{var A=this.fn.toString(),w=this.fn._compile(l,c),C=this.args;return function(N,M,O){var F=w(N,M,O);if(typeof F!="function")throw new TypeError("Expression '".concat(A,"' did not evaluate to a function; value is:")+` - `.concat(a(F)));if(F.rawArgs)return F(C,l,th(N,M));var q=f.map(V=>V(N,M,O));return F.apply(F,q)}}}forEach(l){l(this.fn,"fn",this);for(var c=0;c'+ea(this.fn)+'('+c.join(',')+')'}toTex(l){var c;return l&&typeof l.handler=="object"&&nt(l.handler,this.name)&&(c=l.handler[this.name](this,l)),typeof c<"u"?c:super.toTex(l)}_toTex(l){var c=this.args.map(function(p){return p.toTex(l)}),f;FC[this.name]&&(f=FC[this.name]),r[this.name]&&(typeof r[this.name].toTex=="function"||typeof r[this.name].toTex=="object"||typeof r[this.name].toTex=="string")&&(f=r[this.name].toTex);var h;switch(typeof f){case"function":h=f(this,l);break;case"string":h=s(f,this,l);break;case"object":switch(typeof f[c.length]){case"function":h=f[c.length](this,l);break;case"string":h=s(f[c.length],this,l);break}}return typeof h<"u"?h:s(Ihe,this,l)}getIdentifier(){return this.type+":"+this.name}}return e=o,vn(o,"name",ym),vn(o,"onUndefinedFunction",function(u){throw new Error("Undefined function "+u)}),vn(o,"fromJSON",function(u){return new e(u.fn,u.args)}),o},{isClass:!0,isNode:!0}),RC="parse",nde=["typed","numeric","config","AccessorNode","ArrayNode","AssignmentNode","BlockNode","ConditionalNode","ConstantNode","FunctionAssignmentNode","FunctionNode","IndexNode","ObjectNode","OperatorNode","ParenthesisNode","RangeNode","RelationalNode","SymbolNode"],ide=G(RC,nde,t=>{var{typed:e,numeric:r,config:n,AccessorNode:i,ArrayNode:a,AssignmentNode:s,BlockNode:o,ConditionalNode:u,ConstantNode:l,FunctionAssignmentNode:c,FunctionNode:f,IndexNode:h,ObjectNode:p,OperatorNode:g,ParenthesisNode:m,RangeNode:b,RelationalNode:y,SymbolNode:S}=t,x=e(RC,{string:function(oe){return he(oe,{})},"Array | Matrix":function(oe){return _(oe,{})},"string, Object":function(oe,Ae){var $e=Ae.nodes!==void 0?Ae.nodes:{};return he(oe,$e)},"Array | Matrix, Object":_});function _(k){var oe=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Ae=oe.nodes!==void 0?oe.nodes:{};return Bt(k,function($e){if(typeof $e!="string")throw new TypeError("String expected");return he($e,Ae)})}var A={NULL:0,DELIMITER:1,NUMBER:2,SYMBOL:3,UNKNOWN:4},w={",":!0,"(":!0,")":!0,"[":!0,"]":!0,"{":!0,"}":!0,'"':!0,"'":!0,";":!0,"+":!0,"-":!0,"*":!0,".*":!0,"/":!0,"./":!0,"%":!0,"^":!0,".^":!0,"~":!0,"!":!0,"&":!0,"|":!0,"^|":!0,"=":!0,":":!0,"?":!0,"==":!0,"!=":!0,"<":!0,">":!0,"<=":!0,">=":!0,"<<":!0,">>":!0,">>>":!0},C={mod:!0,to:!0,in:!0,and:!0,xor:!0,or:!0,not:!0},E={true:!0,false:!1,null:null,undefined:void 0},N=["NaN","Infinity"],M={'"':'"',"'":"'","\\":"\\","/":"/",b:"\b",f:"\f",n:` -`,r:"\r",t:" "};function O(){return{extraNodes:{},expression:"",comment:"",index:0,token:"",tokenType:A.NULL,nestingLevel:0,conditionalLevel:null}}function F(k,oe){return k.expression.substr(k.index,oe)}function q(k){return F(k,1)}function V(k){k.index++}function H(k){return k.expression.charAt(k.index-1)}function B(k){return k.expression.charAt(k.index+1)}function I(k){for(k.tokenType=A.NULL,k.token="",k.comment="";;){if(q(k)==="#")for(;q(k)!==` -`&&q(k)!=="";)k.comment+=q(k),V(k);if(x.isWhitespace(q(k),k.nestingLevel))V(k);else break}if(q(k)===""){k.tokenType=A.DELIMITER;return}if(q(k)===` -`&&!k.nestingLevel){k.tokenType=A.DELIMITER,k.token=q(k),V(k);return}var oe=q(k),Ae=F(k,2),$e=F(k,3);if($e.length===3&&w[$e]){k.tokenType=A.DELIMITER,k.token=$e,V(k),V(k),V(k);return}if(Ae.length===2&&w[Ae]){k.tokenType=A.DELIMITER,k.token=Ae,V(k),V(k);return}if(w[oe]){k.tokenType=A.DELIMITER,k.token=oe,V(k);return}if(x.isDigitDot(oe)){k.tokenType=A.NUMBER;var ct=F(k,2);if(ct==="0b"||ct==="0o"||ct==="0x"){for(k.token+=q(k),V(k),k.token+=q(k),V(k);x.isHexDigit(q(k));)k.token+=q(k),V(k);if(q(k)===".")for(k.token+=".",V(k);x.isHexDigit(q(k));)k.token+=q(k),V(k);else if(q(k)==="i")for(k.token+="i",V(k);x.isDigit(q(k));)k.token+=q(k),V(k);return}if(q(k)==="."){if(k.token+=q(k),V(k),!x.isDigit(q(k))){k.tokenType=A.DELIMITER;return}}else{for(;x.isDigit(q(k));)k.token+=q(k),V(k);x.isDecimalMark(q(k),B(k))&&(k.token+=q(k),V(k))}for(;x.isDigit(q(k));)k.token+=q(k),V(k);if(q(k)==="E"||q(k)==="e"){if(x.isDigit(B(k))||B(k)==="-"||B(k)==="+"){if(k.token+=q(k),V(k),(q(k)==="+"||q(k)==="-")&&(k.token+=q(k),V(k)),!x.isDigit(q(k)))throw at(k,'Digit expected, got "'+q(k)+'"');for(;x.isDigit(q(k));)k.token+=q(k),V(k);if(x.isDecimalMark(q(k),B(k)))throw at(k,'Digit expected, got "'+q(k)+'"')}else if(B(k)===".")throw V(k),at(k,'Digit expected, got "'+q(k)+'"')}return}if(x.isAlpha(q(k),H(k),B(k))){for(;x.isAlpha(q(k),H(k),B(k))||x.isDigit(q(k));)k.token+=q(k),V(k);nt(C,k.token)?k.tokenType=A.DELIMITER:k.tokenType=A.SYMBOL;return}for(k.tokenType=A.UNKNOWN;q(k)!=="";)k.token+=q(k),V(k);throw at(k,'Syntax error in part "'+k.token+'"')}function K(k){do I(k);while(k.token===` -`)}function $(k){k.nestingLevel++}function se(k){k.nestingLevel--}x.isAlpha=function(oe,Ae,$e){return x.isValidLatinOrGreek(oe)||x.isValidMathSymbol(oe,$e)||x.isValidMathSymbol(Ae,oe)},x.isValidLatinOrGreek=function(oe){return/^[a-zA-Z_$\u00C0-\u02AF\u0370-\u03FF\u2100-\u214F]$/.test(oe)},x.isValidMathSymbol=function(oe,Ae){return/^[\uD835]$/.test(oe)&&/^[\uDC00-\uDFFF]$/.test(Ae)&&/^[^\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]$/.test(Ae)},x.isWhitespace=function(oe,Ae){return oe===" "||oe===" "||oe===` -`&&Ae>0},x.isDecimalMark=function(oe,Ae){return oe==="."&&Ae!=="/"&&Ae!=="*"&&Ae!=="^"},x.isDigitDot=function(oe){return oe>="0"&&oe<="9"||oe==="."},x.isDigit=function(oe){return oe>="0"&&oe<="9"},x.isHexDigit=function(oe){return oe>="0"&&oe<="9"||oe>="a"&&oe<="f"||oe>="A"&&oe<="F"};function he(k,oe){var Ae=O();dn(Ae,{expression:k,extraNodes:oe}),I(Ae);var $e=ne(Ae);if(Ae.token!=="")throw Ae.tokenType===A.DELIMITER?mr(Ae,"Unexpected operator "+Ae.token):at(Ae,'Unexpected part "'+Ae.token+'"');return $e}function ne(k){var oe,Ae=[],$e;for(k.token!==""&&k.token!==` -`&&k.token!==";"&&(oe=X(k),k.comment&&(oe.comment=k.comment));k.token===` -`||k.token===";";)Ae.length===0&&oe&&($e=k.token!==";",Ae.push({node:oe,visible:$e})),I(k),k.token!==` -`&&k.token!==";"&&k.token!==""&&(oe=X(k),k.comment&&(oe.comment=k.comment),$e=k.token!==";",Ae.push({node:oe,visible:$e}));return Ae.length>0?new o(Ae):(oe||(oe=new l(void 0),k.comment&&(oe.comment=k.comment)),oe)}function X(k){var oe,Ae,$e,ct,ht=de(k);if(k.token==="="){if(Sn(ht))return oe=ht.name,K(k),$e=X(k),new s(new S(oe),$e);if(Hu(ht))return K(k),$e=X(k),new s(ht.object,ht.index,$e);if(Ho(ht)&&Sn(ht.fn)&&(ct=!0,Ae=[],oe=ht.name,ht.args.forEach(function(Dn,ro){Sn(Dn)?Ae[ro]=Dn.name:ct=!1}),ct))return K(k),$e=X(k),new c(oe,Ae,$e);throw at(k,"Invalid left hand side of assignment operator =")}return ht}function de(k){for(var oe=Se(k);k.token==="?";){var Ae=k.conditionalLevel;k.conditionalLevel=k.nestingLevel,K(k);var $e=oe,ct=X(k);if(k.token!==":")throw at(k,"False part of conditional expression expected");k.conditionalLevel=null,K(k);var ht=X(k);oe=new u($e,ct,ht),k.conditionalLevel=Ae}return oe}function Se(k){for(var oe=ce(k);k.token==="or";)K(k),oe=new g("or","or",[oe,ce(k)]);return oe}function ce(k){for(var oe=xe(k);k.token==="xor";)K(k),oe=new g("xor","xor",[oe,xe(k)]);return oe}function xe(k){for(var oe=_e(k);k.token==="and";)K(k),oe=new g("and","and",[oe,_e(k)]);return oe}function _e(k){for(var oe=me(k);k.token==="|";)K(k),oe=new g("|","bitOr",[oe,me(k)]);return oe}function me(k){for(var oe=we(k);k.token==="^|";)K(k),oe=new g("^|","bitXor",[oe,we(k)]);return oe}function we(k){for(var oe=Ne(k);k.token==="&";)K(k),oe=new g("&","bitAnd",[oe,Ne(k)]);return oe}function Ne(k){for(var oe=[Ce(k)],Ae=[],$e={"==":"equal","!=":"unequal","<":"smaller",">":"larger","<=":"smallerEq",">=":"largerEq"};nt($e,k.token);){var ct={name:k.token,fn:$e[k.token]};Ae.push(ct),K(k),oe.push(Ce(k))}return oe.length===1?oe[0]:oe.length===2?new g(Ae[0].name,Ae[0].fn,oe):new y(Ae.map(ht=>ht.fn),oe)}function Ce(k){var oe,Ae,$e,ct;oe=He(k);for(var ht={"<<":"leftShift",">>":"rightArithShift",">>>":"rightLogShift"};nt(ht,k.token);)Ae=k.token,$e=ht[Ae],K(k),ct=[oe,He(k)],oe=new g(Ae,$e,ct);return oe}function He(k){var oe,Ae,$e,ct;oe=Ue(k);for(var ht={to:"to",in:"to"};nt(ht,k.token);)Ae=k.token,$e=ht[Ae],K(k),Ae==="in"&&k.token===""?oe=new g("*","multiply",[oe,new S("in")],!0):(ct=[oe,Ue(k)],oe=new g(Ae,$e,ct));return oe}function Ue(k){var oe,Ae=[];if(k.token===":"?oe=new l(1):oe=J(k),k.token===":"&&k.conditionalLevel!==k.nestingLevel){for(Ae.push(oe);k.token===":"&&Ae.length<3;)K(k),k.token===")"||k.token==="]"||k.token===","||k.token===""?Ae.push(new S("end")):Ae.push(J(k));Ae.length===3?oe=new b(Ae[0],Ae[2],Ae[1]):oe=new b(Ae[0],Ae[1])}return oe}function J(k){var oe,Ae,$e,ct;oe=te(k);for(var ht={"+":"add","-":"subtract"};nt(ht,k.token);){Ae=k.token,$e=ht[Ae],K(k);var Dn=te(k);Dn.isPercentage?ct=[oe,new g("*","multiply",[oe,Dn])]:ct=[oe,Dn],oe=new g(Ae,$e,ct)}return oe}function te(k){var oe,Ae,$e,ct;oe=ye(k),Ae=oe;for(var ht={"*":"multiply",".*":"dotMultiply","/":"divide","./":"dotDivide"};nt(ht,k.token);)$e=k.token,ct=ht[$e],K(k),Ae=ye(k),oe=new g($e,ct,[oe,Ae]);return oe}function ye(k){var oe,Ae;for(oe=ee(k),Ae=oe;k.tokenType===A.SYMBOL||k.token==="in"&&er(oe)||k.tokenType===A.NUMBER&&!er(Ae)&&(!tn(Ae)||Ae.op==="!")||k.token==="(";)Ae=ee(k),oe=new g("*","multiply",[oe,Ae],!0);return oe}function ee(k){for(var oe=ue(k),Ae=oe,$e=[];k.token==="/"&&Zb(Ae);)if($e.push(dn({},k)),K(k),k.tokenType===A.NUMBER)if($e.push(dn({},k)),K(k),k.tokenType===A.SYMBOL||k.token==="(")dn(k,$e.pop()),$e.pop(),Ae=ue(k),oe=new g("/","divide",[oe,Ae]);else{$e.pop(),dn(k,$e.pop());break}else{dn(k,$e.pop());break}return oe}function ue(k){var oe,Ae,$e,ct;oe=le(k);for(var ht={"%":"mod",mod:"mod"};nt(ht,k.token);)Ae=k.token,$e=ht[Ae],K(k),Ae==="%"&&k.tokenType===A.DELIMITER&&k.token!=="("?oe=new g("/","divide",[oe,new l(100)],!1,!0):(ct=[oe,le(k)],oe=new g(Ae,$e,ct));return oe}function le(k){var oe,Ae,$e,ct={"-":"unaryMinus","+":"unaryPlus","~":"bitNot",not:"not"};return nt(ct,k.token)?($e=ct[k.token],oe=k.token,K(k),Ae=[le(k)],new g(oe,$e,Ae)):Ee(k)}function Ee(k){var oe,Ae,$e,ct;return oe=Me(k),(k.token==="^"||k.token===".^")&&(Ae=k.token,$e=Ae==="^"?"pow":"dotPow",K(k),ct=[oe,le(k)],oe=new g(Ae,$e,ct)),oe}function Me(k){var oe,Ae,$e,ct;oe=P(k);for(var ht={"!":"factorial","'":"ctranspose"};nt(ht,k.token);)Ae=k.token,$e=ht[Ae],I(k),ct=[oe],oe=new g(Ae,$e,ct),oe=Y(k,oe);return oe}function P(k){var oe=[];if(k.tokenType===A.SYMBOL&&nt(k.extraNodes,k.token)){var Ae=k.extraNodes[k.token];if(I(k),k.token==="("){if(oe=[],$(k),I(k),k.token!==")")for(oe.push(X(k));k.token===",";)I(k),oe.push(X(k));if(k.token!==")")throw at(k,"Parenthesis ) expected");se(k),I(k)}return new Ae(oe)}return U(k)}function U(k){var oe,Ae;return k.tokenType===A.SYMBOL||k.tokenType===A.DELIMITER&&k.token in C?(Ae=k.token,I(k),nt(E,Ae)?oe=new l(E[Ae]):N.indexOf(Ae)!==-1?oe=new l(r(Ae,"number")):oe=new S(Ae),oe=Y(k,oe),oe):pe(k)}function Y(k,oe,Ae){for(var $e;(k.token==="("||k.token==="["||k.token===".")&&(!Ae||Ae.indexOf(k.token)!==-1);)if($e=[],k.token==="(")if(Sn(oe)||Hu(oe)){if($(k),I(k),k.token!==")")for($e.push(X(k));k.token===",";)I(k),$e.push(X(k));if(k.token!==")")throw at(k,"Parenthesis ) expected");se(k),I(k),oe=new f(oe,$e)}else return oe;else if(k.token==="["){if($(k),I(k),k.token!=="]")for($e.push(X(k));k.token===",";)I(k),$e.push(X(k));if(k.token!=="]")throw at(k,"Parenthesis ] expected");se(k),I(k),oe=new i(oe,new h($e))}else{I(k);var ct=k.tokenType===A.SYMBOL||k.tokenType===A.DELIMITER&&k.token in C;if(!ct)throw at(k,"Property name expected after dot");$e.push(new l(k.token)),I(k);var ht=!0;oe=new i(oe,new h($e,ht))}return oe}function pe(k){var oe,Ae;return k.token==='"'||k.token==="'"?(Ae=ge(k,k.token),oe=new l(Ae),oe=Y(k,oe),oe):De(k)}function ge(k,oe){for(var Ae="";q(k)!==""&&q(k)!==oe;)if(q(k)==="\\"){V(k);var $e=q(k),ct=M[$e];if(ct!==void 0)Ae+=ct,k.index+=1;else if($e==="u"){var ht=k.expression.slice(k.index+1,k.index+5);if(/^[0-9A-Fa-f]{4}$/.test(ht))Ae+=String.fromCharCode(parseInt(ht,16)),k.index+=5;else throw at(k,"Invalid unicode character \\u".concat(ht))}else throw at(k,"Bad escape character \\".concat($e))}else Ae+=q(k),V(k);if(I(k),k.token!==oe)throw at(k,"End of string ".concat(oe," expected"));return I(k),Ae}function De(k){var oe,Ae,$e,ct;if(k.token==="["){if($(k),I(k),k.token!=="]"){var ht=Re(k);if(k.token===";"){for($e=1,Ae=[ht];k.token===";";)I(k),Ae[$e]=Re(k),$e++;if(k.token!=="]")throw at(k,"End of matrix ] expected");se(k),I(k),ct=Ae[0].items.length;for(var Dn=1;Dn<$e;Dn++)if(Ae[Dn].items.length!==ct)throw mr(k,"Column dimensions mismatch ("+Ae[Dn].items.length+" !== "+ct+")");oe=new a(Ae)}else{if(k.token!=="]")throw at(k,"End of matrix ] expected");se(k),I(k),oe=ht}}else se(k),I(k),oe=new a([]);return Y(k,oe)}return Ie(k)}function Re(k){for(var oe=[X(k)],Ae=1;k.token===",";)I(k),oe[Ae]=X(k),Ae++;return new a(oe)}function Ie(k){if(k.token==="{"){$(k);var oe,Ae={};do if(I(k),k.token!=="}"){if(k.token==='"'||k.token==="'")oe=ge(k,k.token);else if(k.tokenType===A.SYMBOL||k.tokenType===A.DELIMITER&&k.token in C)oe=k.token,I(k);else throw at(k,"Symbol or string expected as object key");if(k.token!==":")throw at(k,"Colon : expected after object key");I(k),Ae[oe]=X(k)}while(k.token===",");if(k.token!=="}")throw at(k,"Comma , or bracket } expected after object value");se(k),I(k);var $e=new p(Ae);return $e=Y(k,$e),$e}return Ve(k)}function Ve(k){var oe;return k.tokenType===A.NUMBER?(oe=k.token,I(k),new l(r(oe,n.number))):ze(k)}function ze(k){var oe;if(k.token==="("){if($(k),I(k),oe=X(k),k.token!==")")throw at(k,"Parenthesis ) expected");return se(k),I(k),oe=new m(oe),oe=Y(k,oe),oe}return vt(k)}function vt(k){throw k.token===""?at(k,"Unexpected end of expression"):at(k,"Value expected")}function St(k){return k.index-k.token.length+1}function at(k,oe){var Ae=St(k),$e=new SyntaxError(oe+" (char "+Ae+")");return $e.char=Ae,$e}function mr(k,oe){var Ae=St(k),$e=new SyntaxError(oe+" (char "+Ae+")");return $e.char=Ae,$e}return e.addConversion({from:"string",to:"Node",convert:x}),x}),IC="compile",ade=["typed","parse"],sde=G(IC,ade,t=>{var{typed:e,parse:r}=t;return e(IC,{string:function(i){return r(i).compile()},"Array | Matrix":function(i){return Bt(i,function(a){return r(a).compile()})}})}),BC="evaluate",ode=["typed","parse"],ude=G(BC,ode,t=>{var{typed:e,parse:r}=t;return e(BC,{string:function(i){var a=Hh();return r(i).compile().evaluate(a)},"string, Map | Object":function(i,a){return r(i).compile().evaluate(a)},"Array | Matrix":function(i){var a=Hh();return Bt(i,function(s){return r(s).compile().evaluate(a)})},"Array | Matrix, Map | Object":function(i,a){return Bt(i,function(s){return r(s).compile().evaluate(a)})}})}),lde="Parser",cde=["evaluate"],fde=G(lde,cde,t=>{var{evaluate:e}=t;function r(){if(!(this instanceof r))throw new SyntaxError("Constructor must be called with the new operator");Object.defineProperty(this,"scope",{value:Hh(),writable:!1})}return r.prototype.type="Parser",r.prototype.isParser=!0,r.prototype.evaluate=function(n){return e(n,this.scope)},r.prototype.get=function(n){if(this.scope.has(n))return this.scope.get(n)},r.prototype.getAll=function(){return Tre(this.scope)},r.prototype.getAllAsMap=function(){return this.scope},r.prototype.set=function(n,i){return this.scope.set(n,i),i},r.prototype.remove=function(n){this.scope.delete(n)},r.prototype.clear=function(){this.scope.clear()},r},{isClass:!0}),kC="parser",hde=["typed","Parser"],dde=G(kC,hde,t=>{var{typed:e,Parser:r}=t;return e(kC,{"":function(){return new r}})}),LC="lup",pde=["typed","matrix","abs","addScalar","divideScalar","multiplyScalar","subtractScalar","larger","equalScalar","unaryMinus","DenseMatrix","SparseMatrix","Spa"],mde=G(LC,pde,t=>{var{typed:e,matrix:r,abs:n,addScalar:i,divideScalar:a,multiplyScalar:s,subtractScalar:o,larger:u,equalScalar:l,unaryMinus:c,DenseMatrix:f,SparseMatrix:h,Spa:p}=t;return e(LC,{DenseMatrix:function(y){return g(y)},SparseMatrix:function(y){return m(y)},Array:function(y){var S=r(y),x=g(S);return{L:x.L.valueOf(),U:x.U.valueOf(),p:x.p}}});function g(b){var y=b._size[0],S=b._size[1],x=Math.min(y,S),_=xt(b._data),A=[],w=[y,x],C=[],E=[x,S],N,M,O,F=[];for(N=0;N0)for(N=0;N{var{Node:e}=t;function r(i){if(typeof i=="number"||typeof i=="boolean"||typeof i=="string")return!!i;if(i){if(Mt(i))return!i.isZero();if(Hs(i))return!!(i.re||i.im);if(Qi(i))return!!i.value}if(i==null)return!1;throw new TypeError('Unsupported type of condition "'+xr(i)+'"')}class n extends e{constructor(a,s,o){if(super(),!pr(a))throw new TypeError("Parameter condition must be a Node");if(!pr(s))throw new TypeError("Parameter trueExpr must be a Node");if(!pr(o))throw new TypeError("Parameter falseExpr must be a Node");this.condition=a,this.trueExpr=s,this.falseExpr=o}get type(){return lm}get isConditionalNode(){return!0}_compile(a,s){var o=this.condition._compile(a,s),u=this.trueExpr._compile(a,s),l=this.falseExpr._compile(a,s);return function(f,h,p){return r(o(f,h,p))?u(f,h,p):l(f,h,p)}}forEach(a){a(this.condition,"condition",this),a(this.trueExpr,"trueExpr",this),a(this.falseExpr,"falseExpr",this)}map(a){return new n(this._ifNode(a(this.condition,"condition",this)),this._ifNode(a(this.trueExpr,"trueExpr",this)),this._ifNode(a(this.falseExpr,"falseExpr",this)))}clone(){return new n(this.condition,this.trueExpr,this.falseExpr)}_toString(a){var s=a&&a.parenthesis?a.parenthesis:"keep",o=br(this,s,a&&a.implicit),u=this.condition.toString(a),l=br(this.condition,s,a&&a.implicit);(s==="all"||this.condition.type==="OperatorNode"||l!==null&&l<=o)&&(u="("+u+")");var c=this.trueExpr.toString(a),f=br(this.trueExpr,s,a&&a.implicit);(s==="all"||this.trueExpr.type==="OperatorNode"||f!==null&&f<=o)&&(c="("+c+")");var h=this.falseExpr.toString(a),p=br(this.falseExpr,s,a&&a.implicit);return(s==="all"||this.falseExpr.type==="OperatorNode"||p!==null&&p<=o)&&(h="("+h+")"),u+" ? "+c+" : "+h}toJSON(){return{mathjs:lm,condition:this.condition,trueExpr:this.trueExpr,falseExpr:this.falseExpr}}static fromJSON(a){return new n(a.condition,a.trueExpr,a.falseExpr)}_toHTML(a){var s=a&&a.parenthesis?a.parenthesis:"keep",o=br(this,s,a&&a.implicit),u=this.condition.toHTML(a),l=br(this.condition,s,a&&a.implicit);(s==="all"||this.condition.type==="OperatorNode"||l!==null&&l<=o)&&(u='('+u+')');var c=this.trueExpr.toHTML(a),f=br(this.trueExpr,s,a&&a.implicit);(s==="all"||this.trueExpr.type==="OperatorNode"||f!==null&&f<=o)&&(c='('+c+')');var h=this.falseExpr.toHTML(a),p=br(this.falseExpr,s,a&&a.implicit);return(s==="all"||this.falseExpr.type==="OperatorNode"||p!==null&&p<=o)&&(h='('+h+')'),u+'?'+c+':'+h}_toTex(a){return"\\begin{cases} {"+this.trueExpr.toTex(a)+"}, &\\quad{\\text{if }\\;"+this.condition.toTex(a)+"}\\\\{"+this.falseExpr.toTex(a)+"}, &\\quad{\\text{otherwise}}\\end{cases}"}}return vn(n,"name",lm),n},{isClass:!0,isNode:!0}),l1=Object.assign||function(t){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:{},r=e.preserveFormatting,n=r===void 0?!1:r,i=e.escapeMapFn,a=i===void 0?ide:i,s=String(t),o="",u=a(l1({},rde),n?l1({},nde):{}),l=Object.keys(u),c=function(){var h=!1;l.forEach(function(p,g){h||s.length>=p.length&&s.slice(0,p.length)===p&&(o+=u[l[g]],s=s.slice(p.length,s.length),h=!0)}),h||(o+=s.slice(0,1),s=s.slice(1,s.length))};s;)c();return o};const sde=Vu(ade);var c1={Alpha:"A",alpha:"\\alpha",Beta:"B",beta:"\\beta",Gamma:"\\Gamma",gamma:"\\gamma",Delta:"\\Delta",delta:"\\delta",Epsilon:"E",epsilon:"\\epsilon",varepsilon:"\\varepsilon",Zeta:"Z",zeta:"\\zeta",Eta:"H",eta:"\\eta",Theta:"\\Theta",theta:"\\theta",vartheta:"\\vartheta",Iota:"I",iota:"\\iota",Kappa:"K",kappa:"\\kappa",varkappa:"\\varkappa",Lambda:"\\Lambda",lambda:"\\lambda",Mu:"M",mu:"\\mu",Nu:"N",nu:"\\nu",Xi:"\\Xi",xi:"\\xi",Omicron:"O",omicron:"o",Pi:"\\Pi",pi:"\\pi",varpi:"\\varpi",Rho:"P",rho:"\\rho",varrho:"\\varrho",Sigma:"\\Sigma",sigma:"\\sigma",varsigma:"\\varsigma",Tau:"T",tau:"\\tau",Upsilon:"\\Upsilon",upsilon:"\\upsilon",Phi:"\\Phi",phi:"\\phi",varphi:"\\varphi",Chi:"X",chi:"\\chi",Psi:"\\Psi",psi:"\\psi",Omega:"\\Omega",omega:"\\omega",true:"\\mathrm{True}",false:"\\mathrm{False}",i:"i",inf:"\\infty",Inf:"\\infty",infinity:"\\infty",Infinity:"\\infty",oo:"\\infty",lim:"\\lim",undefined:"\\mathbf{?}"},Qt={transpose:"^\\top",ctranspose:"^H",factorial:"!",pow:"^",dotPow:".^\\wedge",unaryPlus:"+",unaryMinus:"-",bitNot:"\\~",not:"\\neg",multiply:"\\cdot",divide:"\\frac",dotMultiply:".\\cdot",dotDivide:".:",mod:"\\mod",add:"+",subtract:"-",to:"\\rightarrow",leftShift:"<<",rightArithShift:">>",rightLogShift:">>>",equal:"=",unequal:"\\neq",smaller:"<",larger:">",smallerEq:"\\leq",largerEq:"\\geq",bitAnd:"\\&",bitXor:"\\underline{|}",bitOr:"|",and:"\\wedge",xor:"\\veebar",or:"\\vee"},kC={abs:{1:"\\left|${args[0]}\\right|"},add:{2:"\\left(${args[0]}".concat(Qt.add,"${args[1]}\\right)")},cbrt:{1:"\\sqrt[3]{${args[0]}}"},ceil:{1:"\\left\\lceil${args[0]}\\right\\rceil"},cube:{1:"\\left(${args[0]}\\right)^3"},divide:{2:"\\frac{${args[0]}}{${args[1]}}"},dotDivide:{2:"\\left(${args[0]}".concat(Qt.dotDivide,"${args[1]}\\right)")},dotMultiply:{2:"\\left(${args[0]}".concat(Qt.dotMultiply,"${args[1]}\\right)")},dotPow:{2:"\\left(${args[0]}".concat(Qt.dotPow,"${args[1]}\\right)")},exp:{1:"\\exp\\left(${args[0]}\\right)"},expm1:"\\left(e".concat(Qt.pow,"{${args[0]}}-1\\right)"),fix:{1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},floor:{1:"\\left\\lfloor${args[0]}\\right\\rfloor"},gcd:"\\gcd\\left(${args}\\right)",hypot:"\\hypot\\left(${args}\\right)",log:{1:"\\ln\\left(${args[0]}\\right)",2:"\\log_{${args[1]}}\\left(${args[0]}\\right)"},log10:{1:"\\log_{10}\\left(${args[0]}\\right)"},log1p:{1:"\\ln\\left(${args[0]}+1\\right)",2:"\\log_{${args[1]}}\\left(${args[0]}+1\\right)"},log2:"\\log_{2}\\left(${args[0]}\\right)",mod:{2:"\\left(${args[0]}".concat(Qt.mod,"${args[1]}\\right)")},multiply:{2:"\\left(${args[0]}".concat(Qt.multiply,"${args[1]}\\right)")},norm:{1:"\\left\\|${args[0]}\\right\\|",2:void 0},nthRoot:{2:"\\sqrt[${args[1]}]{${args[0]}}"},nthRoots:{2:"\\{y : $y^{args[1]} = {${args[0]}}\\}"},pow:{2:"\\left(${args[0]}\\right)".concat(Qt.pow,"{${args[1]}}")},round:{1:"\\left\\lfloor${args[0]}\\right\\rceil",2:void 0},sign:{1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},sqrt:{1:"\\sqrt{${args[0]}}"},square:{1:"\\left(${args[0]}\\right)^2"},subtract:{2:"\\left(${args[0]}".concat(Qt.subtract,"${args[1]}\\right)")},unaryMinus:{1:"".concat(Qt.unaryMinus,"\\left(${args[0]}\\right)")},unaryPlus:{1:"".concat(Qt.unaryPlus,"\\left(${args[0]}\\right)")},bitAnd:{2:"\\left(${args[0]}".concat(Qt.bitAnd,"${args[1]}\\right)")},bitNot:{1:Qt.bitNot+"\\left(${args[0]}\\right)"},bitOr:{2:"\\left(${args[0]}".concat(Qt.bitOr,"${args[1]}\\right)")},bitXor:{2:"\\left(${args[0]}".concat(Qt.bitXor,"${args[1]}\\right)")},leftShift:{2:"\\left(${args[0]}".concat(Qt.leftShift,"${args[1]}\\right)")},rightArithShift:{2:"\\left(${args[0]}".concat(Qt.rightArithShift,"${args[1]}\\right)")},rightLogShift:{2:"\\left(${args[0]}".concat(Qt.rightLogShift,"${args[1]}\\right)")},bellNumbers:{1:"\\mathrm{B}_{${args[0]}}"},catalan:{1:"\\mathrm{C}_{${args[0]}}"},stirlingS2:{2:"\\mathrm{S}\\left(${args}\\right)"},arg:{1:"\\arg\\left(${args[0]}\\right)"},conj:{1:"\\left(${args[0]}\\right)^*"},im:{1:"\\Im\\left\\lbrace${args[0]}\\right\\rbrace"},re:{1:"\\Re\\left\\lbrace${args[0]}\\right\\rbrace"},and:{2:"\\left(${args[0]}".concat(Qt.and,"${args[1]}\\right)")},not:{1:Qt.not+"\\left(${args[0]}\\right)"},or:{2:"\\left(${args[0]}".concat(Qt.or,"${args[1]}\\right)")},xor:{2:"\\left(${args[0]}".concat(Qt.xor,"${args[1]}\\right)")},cross:{2:"\\left(${args[0]}\\right)\\times\\left(${args[1]}\\right)"},ctranspose:{1:"\\left(${args[0]}\\right)".concat(Qt.ctranspose)},det:{1:"\\det\\left(${args[0]}\\right)"},dot:{2:"\\left(${args[0]}\\cdot${args[1]}\\right)"},expm:{1:"\\exp\\left(${args[0]}\\right)"},inv:{1:"\\left(${args[0]}\\right)^{-1}"},pinv:{1:"\\left(${args[0]}\\right)^{+}"},sqrtm:{1:"{${args[0]}}".concat(Qt.pow,"{\\frac{1}{2}}")},trace:{1:"\\mathrm{tr}\\left(${args[0]}\\right)"},transpose:{1:"\\left(${args[0]}\\right)".concat(Qt.transpose)},combinations:{2:"\\binom{${args[0]}}{${args[1]}}"},combinationsWithRep:{2:"\\left(\\!\\!{\\binom{${args[0]}}{${args[1]}}}\\!\\!\\right)"},factorial:{1:"\\left(${args[0]}\\right)".concat(Qt.factorial)},gamma:{1:"\\Gamma\\left(${args[0]}\\right)"},lgamma:{1:"\\ln\\Gamma\\left(${args[0]}\\right)"},equal:{2:"\\left(${args[0]}".concat(Qt.equal,"${args[1]}\\right)")},larger:{2:"\\left(${args[0]}".concat(Qt.larger,"${args[1]}\\right)")},largerEq:{2:"\\left(${args[0]}".concat(Qt.largerEq,"${args[1]}\\right)")},smaller:{2:"\\left(${args[0]}".concat(Qt.smaller,"${args[1]}\\right)")},smallerEq:{2:"\\left(${args[0]}".concat(Qt.smallerEq,"${args[1]}\\right)")},unequal:{2:"\\left(${args[0]}".concat(Qt.unequal,"${args[1]}\\right)")},erf:{1:"erf\\left(${args[0]}\\right)"},max:"\\max\\left(${args}\\right)",min:"\\min\\left(${args}\\right)",variance:"\\mathrm{Var}\\left(${args}\\right)",acos:{1:"\\cos^{-1}\\left(${args[0]}\\right)"},acosh:{1:"\\cosh^{-1}\\left(${args[0]}\\right)"},acot:{1:"\\cot^{-1}\\left(${args[0]}\\right)"},acoth:{1:"\\coth^{-1}\\left(${args[0]}\\right)"},acsc:{1:"\\csc^{-1}\\left(${args[0]}\\right)"},acsch:{1:"\\mathrm{csch}^{-1}\\left(${args[0]}\\right)"},asec:{1:"\\sec^{-1}\\left(${args[0]}\\right)"},asech:{1:"\\mathrm{sech}^{-1}\\left(${args[0]}\\right)"},asin:{1:"\\sin^{-1}\\left(${args[0]}\\right)"},asinh:{1:"\\sinh^{-1}\\left(${args[0]}\\right)"},atan:{1:"\\tan^{-1}\\left(${args[0]}\\right)"},atan2:{2:"\\mathrm{atan2}\\left(${args}\\right)"},atanh:{1:"\\tanh^{-1}\\left(${args[0]}\\right)"},cos:{1:"\\cos\\left(${args[0]}\\right)"},cosh:{1:"\\cosh\\left(${args[0]}\\right)"},cot:{1:"\\cot\\left(${args[0]}\\right)"},coth:{1:"\\coth\\left(${args[0]}\\right)"},csc:{1:"\\csc\\left(${args[0]}\\right)"},csch:{1:"\\mathrm{csch}\\left(${args[0]}\\right)"},sec:{1:"\\sec\\left(${args[0]}\\right)"},sech:{1:"\\mathrm{sech}\\left(${args[0]}\\right)"},sin:{1:"\\sin\\left(${args[0]}\\right)"},sinh:{1:"\\sinh\\left(${args[0]}\\right)"},tan:{1:"\\tan\\left(${args[0]}\\right)"},tanh:{1:"\\tanh\\left(${args[0]}\\right)"},to:{2:"\\left(${args[0]}".concat(Qt.to,"${args[1]}\\right)")},numeric:function(e,r){return e.args[0].toTex()},number:{0:"0",1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)${args[1]}\\right)"},string:{0:'\\mathtt{""}',1:"\\mathrm{string}\\left(${args[0]}\\right)"},bignumber:{0:"0",1:"\\left(${args[0]}\\right)"},complex:{0:"0",1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)+".concat(c1.i,"\\cdot\\left(${args[1]}\\right)\\right)")},matrix:{0:"\\begin{bmatrix}\\end{bmatrix}",1:"\\left(${args[0]}\\right)",2:"\\left(${args[0]}\\right)"},sparse:{0:"\\begin{bsparse}\\end{bsparse}",1:"\\left(${args[0]}\\right)"},unit:{1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)${args[1]}\\right)"}},ode="\\mathrm{${name}}\\left(${args}\\right)",BC={deg:"^\\circ"};function f1(t){return sde(t,{preserveFormatting:!0})}function uB(t,e){return e=typeof e>"u"?!1:e,e?nt(BC,t)?BC[t]:"\\mathrm{"+f1(t)+"}":nt(c1,t)?c1[t]:f1(t)}var cm="ConstantNode",ude=["Node"],lde=G(cm,ude,t=>{var{Node:e}=t;class r extends e{constructor(i){super(),this.value=i}get type(){return cm}get isConstantNode(){return!0}_compile(i,a){var s=this.value;return function(){return s}}forEach(i){}map(i){return this.clone()}clone(){return new r(this.value)}_toString(i){return Rt(this.value,i)}_toHTML(i){var a=this._toString(i);switch(xr(this.value)){case"number":case"BigNumber":case"Fraction":return''+a+"";case"string":return''+a+"";case"boolean":return''+a+"";case"null":return''+a+"";case"undefined":return''+a+"";default:return''+a+""}}toJSON(){return{mathjs:cm,value:this.value}}static fromJSON(i){return new r(i.value)}_toTex(i){var a=this._toString(i);switch(xr(this.value)){case"string":return"\\mathtt{"+f1(a)+"}";case"number":case"BigNumber":{if(!isFinite(this.value))return this.value.valueOf()<0?"-\\infty":"\\infty";var s=a.toLowerCase().indexOf("e");if(s!==-1)return a.substring(0,s)+"\\cdot10^{"+a.substring(s+1)+"}"}return a;case"Fraction":return this.value.toLatex();default:return a}}}return vn(r,"name",cm),r},{isClass:!0,isNode:!0}),fm="FunctionAssignmentNode",cde=["typed","Node"],fde=G(fm,cde,t=>{var{typed:e,Node:r}=t;function n(a,s,o){var u=br(a,s,o),l=br(a.expr,s,o);return s==="all"||l!==null&&l<=u}class i extends r{constructor(s,o,u){if(super(),typeof s!="string")throw new TypeError('String expected for parameter "name"');if(!Array.isArray(o))throw new TypeError('Array containing strings or objects expected for parameter "params"');if(!pr(u))throw new TypeError('Node expected for parameter "expr"');if(sB.has(s))throw new Error('Illegal function name, "'+s+'" is a reserved keyword');var l=new Set;for(var c of o){var f=typeof c=="string"?c:c.name;if(l.has(f))throw new Error('Duplicate parameter name "'.concat(f,'"'));l.add(f)}this.name=s,this.params=o.map(function(h){return h&&h.name||h}),this.types=o.map(function(h){return h&&h.type||"any"}),this.expr=u}get type(){return fm}get isFunctionAssignmentNode(){return!0}_compile(s,o){var u=Object.create(o);Bg(this.params,function(g){u[g]=!0});var l=this.expr._compile(s,u),c=this.name,f=this.params,h=F2(this.types,","),p=c+"("+F2(this.params,", ")+")";return function(m,b,y){var S={};S[h]=function(){for(var _=Object.create(b),A=0;A'+ta(this.params[l])+"");var c=this.expr.toHTML(s);return n(this,o,s&&s.implicit)&&(c='('+c+')'),''+ta(this.name)+'('+u.join(',')+')='+c}_toTex(s){var o=s&&s.parenthesis?s.parenthesis:"keep",u=this.expr.toTex(s);return n(this,o,s&&s.implicit)&&(u="\\left(".concat(u,"\\right)")),"\\mathrm{"+this.name+"}\\left("+this.params.map(uB).join(",")+"\\right)="+u}}return vn(i,"name",fm),i},{isClass:!0,isNode:!0}),hm="IndexNode",hde=["Node","size"],dde=G(hm,hde,t=>{var{Node:e,size:r}=t;class n extends e{constructor(a,s){if(super(),this.dimensions=a,this.dotNotation=s||!1,!Array.isArray(a)||!a.every(pr))throw new TypeError('Array containing Nodes expected for parameter "dimensions"');if(this.dotNotation&&!this.isObjectProperty())throw new Error("dotNotation only applicable for object properties")}get type(){return hm}get isIndexNode(){return!0}_compile(a,s){var o=Ws(this.dimensions,function(l,c){var f=l.filter(g=>g.isSymbolNode&&g.name==="end").length>0;if(f){var h=Object.create(s);h.end=!0;var p=l._compile(a,h);return function(m,b,y){if(!dt(y)&&!sr(y)&&!qn(y))throw new TypeError('Cannot resolve "end": context must be a Matrix, Array, or string but is '+xr(y));var S=r(y).valueOf(),x=Object.create(b);return x.end=S[c],p(m,x,y)}}else return l._compile(a,s)}),u=ri(a,"index");return function(c,f,h){var p=Ws(o,function(g){return g(c,f,h)});return u(...p)}}forEach(a){for(var s=0;s.'+ta(this.getObjectProperty())+"":'['+s.join(',')+']'}_toTex(a){var s=this.dimensions.map(function(o){return o.toTex(a)});return this.dotNotation?"."+this.getObjectProperty():"_{"+s.join(",")+"}"}}return vn(n,"name",hm),n},{isClass:!0,isNode:!0}),dm="ObjectNode",pde=["Node"],mde=G(dm,pde,t=>{var{Node:e}=t;class r extends e{constructor(i){if(super(),this.properties=i||{},i&&(typeof i!="object"||!Object.keys(i).every(function(a){return pr(i[a])})))throw new TypeError("Object containing Nodes expected")}get type(){return dm}get isObjectNode(){return!0}_compile(i,a){var s={};for(var o in this.properties)if(nt(this.properties,o)){var u=Vl(o),l=JSON.parse(u),c=ri(this.properties,o);s[l]=c._compile(i,a)}return function(h,p,g){var m={};for(var b in s)nt(s,b)&&(m[b]=s[b](h,p,g));return m}}forEach(i){for(var a in this.properties)nt(this.properties,a)&&i(this.properties[a],"properties["+Vl(a)+"]",this)}map(i){var a={};for(var s in this.properties)nt(this.properties,s)&&(a[s]=this._ifNode(i(this.properties[s],"properties["+Vl(s)+"]",this)));return new r(a)}clone(){var i={};for(var a in this.properties)nt(this.properties,a)&&(i[a]=this.properties[a]);return new r(i)}_toString(i){var a=[];for(var s in this.properties)nt(this.properties,s)&&a.push(Vl(s)+": "+this.properties[s].toString(i));return"{"+a.join(", ")+"}"}toJSON(){return{mathjs:dm,properties:this.properties}}static fromJSON(i){return new r(i.properties)}_toHTML(i){var a=[];for(var s in this.properties)nt(this.properties,s)&&a.push(''+ta(s)+':'+this.properties[s].toHTML(i));return'{'+a.join(',')+'}'}_toTex(i){var a=[];for(var s in this.properties)nt(this.properties,s)&&a.push("\\mathbf{"+s+":} & "+this.properties[s].toTex(i)+"\\\\");var o="\\left\\{\\begin{array}{ll}"+a.join(` +`)+"\\end{array}\\right\\}";return o}}return vn(r,"name",dm),r},{isClass:!0,isNode:!0});function nh(t,e){return new NP(t,new Ig(e),new Set(Object.keys(e)))}var pm="OperatorNode",vde=["Node"],gde=G(pm,vde,t=>{var{Node:e}=t;function r(a,s){var o=a;if(s==="auto")for(;js(o);)o=o.content;return er(o)?!0:tn(o)?r(o.args[0],s):!1}function n(a,s,o,u,l){var c=br(a,s,o),f=Kf(a,s);if(s==="all"||u.length>2&&a.getIdentifier()!=="OperatorNode:add"&&a.getIdentifier()!=="OperatorNode:multiply")return u.map(function(M){switch(M.getContent().type){case"ArrayNode":case"ConstantNode":case"SymbolNode":case"ParenthesisNode":return!1;default:return!0}});var h;switch(u.length){case 0:h=[];break;case 1:{var p=br(u[0],s,o,a);if(l&&p!==null){var g,m;if(s==="keep"?(g=u[0].getIdentifier(),m=a.getIdentifier()):(g=u[0].getContent().getIdentifier(),m=a.getContent().getIdentifier()),wa[c][m].latexLeftParens===!1){h=[!1];break}if(wa[p][g].latexParens===!1){h=[!1];break}}if(p===null){h=[!1];break}if(p<=c){h=[!0];break}h=[!1]}break;case 2:{var b,y=br(u[0],s,o,a),S=Qy(a,u[0],s);y===null?b=!1:y===c&&f==="right"&&!S||y=2&&a.getIdentifier()==="OperatorNode:multiply"&&a.implicit&&s!=="all"&&o==="hide")for(var E=1;E2&&(this.getIdentifier()==="OperatorNode:add"||this.getIdentifier()==="OperatorNode:multiply")){var b=l.map(function(y,S){return y=y.toString(s),c[S]&&(y="("+y+")"),y});return this.implicit&&this.getIdentifier()==="OperatorNode:multiply"&&u==="hide"?b.join(" "):b.join(" "+this.op+" ")}else return this.fn+"("+this.args.join(", ")+")"}toJSON(){return{mathjs:pm,op:this.op,fn:this.fn,args:this.args,implicit:this.implicit,isPercentage:this.isPercentage}}static fromJSON(s){return new i(s.op,s.fn,s.args,s.implicit,s.isPercentage)}_toHTML(s){var o=s&&s.parenthesis?s.parenthesis:"keep",u=s&&s.implicit?s.implicit:"hide",l=this.args,c=n(this,o,u,l,!1);if(l.length===1){var f=Kf(this,o),h=l[0].toHTML(s);return c[0]&&(h='('+h+')'),f==="right"?''+ta(this.op)+""+h:h+''+ta(this.op)+""}else if(l.length===2){var p=l[0].toHTML(s),g=l[1].toHTML(s);return c[0]&&(p='('+p+')'),c[1]&&(g='('+g+')'),this.implicit&&this.getIdentifier()==="OperatorNode:multiply"&&u==="hide"?p+''+g:p+''+ta(this.op)+""+g}else{var m=l.map(function(b,y){return b=b.toHTML(s),c[y]&&(b='('+b+')'),b});return l.length>2&&(this.getIdentifier()==="OperatorNode:add"||this.getIdentifier()==="OperatorNode:multiply")?this.implicit&&this.getIdentifier()==="OperatorNode:multiply"&&u==="hide"?m.join(''):m.join(''+ta(this.op)+""):''+ta(this.fn)+'('+m.join(',')+')'}}_toTex(s){var o=s&&s.parenthesis?s.parenthesis:"keep",u=s&&s.implicit?s.implicit:"hide",l=this.args,c=n(this,o,u,l,!0),f=Qt[this.fn];if(f=typeof f>"u"?this.op:f,l.length===1){var h=Kf(this,o),p=l[0].toTex(s);return c[0]&&(p="\\left(".concat(p,"\\right)")),h==="right"?f+p:p+f}else if(l.length===2){var g=l[0],m=g.toTex(s);c[0]&&(m="\\left(".concat(m,"\\right)"));var b=l[1],y=b.toTex(s);c[1]&&(y="\\left(".concat(y,"\\right)"));var S;switch(o==="keep"?S=g.getIdentifier():S=g.getContent().getIdentifier(),this.getIdentifier()){case"OperatorNode:divide":return f+"{"+m+"}{"+y+"}";case"OperatorNode:pow":switch(m="{"+m+"}",y="{"+y+"}",S){case"ConditionalNode":case"OperatorNode:divide":m="\\left(".concat(m,"\\right)")}break;case"OperatorNode:multiply":if(this.implicit&&u==="hide")return m+"~"+y}return m+f+y}else if(l.length>2&&(this.getIdentifier()==="OperatorNode:add"||this.getIdentifier()==="OperatorNode:multiply")){var x=l.map(function(_,A){return _=_.toTex(s),c[A]&&(_="\\left(".concat(_,"\\right)")),_});return this.getIdentifier()==="OperatorNode:multiply"&&this.implicit&&u==="hide"?x.join("~"):x.join(f)}else return"\\mathrm{"+this.fn+"}\\left("+l.map(function(_){return _.toTex(s)}).join(",")+"\\right)"}getIdentifier(){return this.type+":"+this.fn}}return vn(i,"name",pm),i},{isClass:!0,isNode:!0}),mm="ParenthesisNode",yde=["Node"],bde=G(mm,yde,t=>{var{Node:e}=t;class r extends e{constructor(i){if(super(),!pr(i))throw new TypeError('Node expected for parameter "content"');this.content=i}get type(){return mm}get isParenthesisNode(){return!0}_compile(i,a){return this.content._compile(i,a)}getContent(){return this.content.getContent()}forEach(i){i(this.content,"content",this)}map(i){var a=i(this.content,"content",this);return new r(a)}clone(){return new r(this.content)}_toString(i){return!i||i&&!i.parenthesis||i&&i.parenthesis==="keep"?"("+this.content.toString(i)+")":this.content.toString(i)}toJSON(){return{mathjs:mm,content:this.content}}static fromJSON(i){return new r(i.content)}_toHTML(i){return!i||i&&!i.parenthesis||i&&i.parenthesis==="keep"?'('+this.content.toHTML(i)+')':this.content.toHTML(i)}_toTex(i){return!i||i&&!i.parenthesis||i&&i.parenthesis==="keep"?"\\left(".concat(this.content.toTex(i),"\\right)"):this.content.toTex(i)}}return vn(r,"name",mm),r},{isClass:!0,isNode:!0}),vm="RangeNode",xde=["Node"],wde=G(vm,xde,t=>{var{Node:e}=t;function r(i,a,s){var o=br(i,a,s),u={},l=br(i.start,a,s);if(u.start=l!==null&&l<=o||a==="all",i.step){var c=br(i.step,a,s);u.step=c!==null&&c<=o||a==="all"}var f=br(i.end,a,s);return u.end=f!==null&&f<=o||a==="all",u}class n extends e{constructor(a,s,o){if(super(),!pr(a))throw new TypeError("Node expected");if(!pr(s))throw new TypeError("Node expected");if(o&&!pr(o))throw new TypeError("Node expected");if(arguments.length>3)throw new Error("Too many arguments");this.start=a,this.end=s,this.step=o||null}get type(){return vm}get isRangeNode(){return!0}needsEnd(){var a=this.filter(function(s){return Sn(s)&&s.name==="end"});return a.length>0}_compile(a,s){var o=a.range,u=this.start._compile(a,s),l=this.end._compile(a,s);if(this.step){var c=this.step._compile(a,s);return function(h,p,g){return o(u(h,p,g),l(h,p,g),c(h,p,g))}}else return function(h,p,g){return o(u(h,p,g),l(h,p,g))}}forEach(a){a(this.start,"start",this),a(this.end,"end",this),this.step&&a(this.step,"step",this)}map(a){return new n(this._ifNode(a(this.start,"start",this)),this._ifNode(a(this.end,"end",this)),this.step&&this._ifNode(a(this.step,"step",this)))}clone(){return new n(this.start,this.end,this.step&&this.step)}_toString(a){var s=a&&a.parenthesis?a.parenthesis:"keep",o=r(this,s,a&&a.implicit),u,l=this.start.toString(a);if(o.start&&(l="("+l+")"),u=l,this.step){var c=this.step.toString(a);o.step&&(c="("+c+")"),u+=":"+c}var f=this.end.toString(a);return o.end&&(f="("+f+")"),u+=":"+f,u}toJSON(){return{mathjs:vm,start:this.start,end:this.end,step:this.step}}static fromJSON(a){return new n(a.start,a.end,a.step)}_toHTML(a){var s=a&&a.parenthesis?a.parenthesis:"keep",o=r(this,s,a&&a.implicit),u,l=this.start.toHTML(a);if(o.start&&(l='('+l+')'),u=l,this.step){var c=this.step.toHTML(a);o.step&&(c='('+c+')'),u+=':'+c}var f=this.end.toHTML(a);return o.end&&(f='('+f+')'),u+=':'+f,u}_toTex(a){var s=a&&a.parenthesis?a.parenthesis:"keep",o=r(this,s,a&&a.implicit),u=this.start.toTex(a);if(o.start&&(u="\\left(".concat(u,"\\right)")),this.step){var l=this.step.toTex(a);o.step&&(l="\\left(".concat(l,"\\right)")),u+=":"+l}var c=this.end.toTex(a);return o.end&&(c="\\left(".concat(c,"\\right)")),u+=":"+c,u}}return vn(n,"name",vm),n},{isClass:!0,isNode:!0}),gm="RelationalNode",Sde=["Node"],_de=G(gm,Sde,t=>{var{Node:e}=t,r={equal:"==",unequal:"!=",smaller:"<",larger:">",smallerEq:"<=",largerEq:">="};class n extends e{constructor(a,s){if(super(),!Array.isArray(a))throw new TypeError("Parameter conditionals must be an array");if(!Array.isArray(s))throw new TypeError("Parameter params must be an array");if(a.length!==s.length-1)throw new TypeError("Parameter params must contain exactly one more element than parameter conditionals");this.conditionals=a,this.params=s}get type(){return gm}get isRelationalNode(){return!0}_compile(a,s){var o=this,u=this.params.map(l=>l._compile(a,s));return function(c,f,h){for(var p,g=u[0](c,f,h),m=0;ma(s,"params["+o+"]",this),this)}map(a){return new n(this.conditionals.slice(),this.params.map((s,o)=>this._ifNode(a(s,"params["+o+"]",this)),this))}clone(){return new n(this.conditionals,this.params)}_toString(a){for(var s=a&&a.parenthesis?a.parenthesis:"keep",o=br(this,s,a&&a.implicit),u=this.params.map(function(f,h){var p=br(f,s,a&&a.implicit);return s==="all"||p!==null&&p<=o?"("+f.toString(a)+")":f.toString(a)}),l=u[0],c=0;c('+f.toHTML(a)+')':f.toHTML(a)}),l=u[0],c=0;c'+ta(r[this.conditionals[c]])+""+u[c+1];return l}_toTex(a){for(var s=a&&a.parenthesis?a.parenthesis:"keep",o=br(this,s,a&&a.implicit),u=this.params.map(function(f,h){var p=br(f,s,a&&a.implicit);return s==="all"||p!==null&&p<=o?"\\left("+f.toTex(a)+"\right)":f.toTex(a)}),l=u[0],c=0;c{var{math:e,Unit:r,Node:n}=t;function i(s){return r?r.isValuelessUnit(s):!1}class a extends n{constructor(o){if(super(),typeof o!="string")throw new TypeError('String expected for parameter "name"');this.name=o}get type(){return"SymbolNode"}get isSymbolNode(){return!0}_compile(o,u){var l=this.name;if(u[l]===!0)return function(f,h,p){return ri(h,l)};if(l in o)return function(f,h,p){return f.has(l)?f.get(l):ri(o,l)};var c=i(l);return function(f,h,p){return f.has(l)?f.get(l):c?new r(null,l):a.onUndefinedSymbol(l)}}forEach(o){}map(o){return this.clone()}static onUndefinedSymbol(o){throw new Error("Undefined symbol "+o)}clone(){return new a(this.name)}_toString(o){return this.name}_toHTML(o){var u=ta(this.name);return u==="true"||u==="false"?''+u+"":u==="i"?''+u+"":u==="Infinity"?''+u+"":u==="NaN"?''+u+"":u==="null"?''+u+"":u==="undefined"?''+u+"":''+u+""}toJSON(){return{mathjs:"SymbolNode",name:this.name}}static fromJSON(o){return new a(o.name)}_toTex(o){var u=!1;typeof e[this.name]>"u"&&i(this.name)&&(u=!0);var l=uB(this.name,u);return l[0]==="\\"?l:" "+l}}return a},{isClass:!0,isNode:!0}),ym="FunctionNode",Nde=["math","Node","SymbolNode"],Cde=G(ym,Nde,t=>{var e,{math:r,Node:n,SymbolNode:i}=t,a=u=>Rt(u,{truncate:78});function s(u,l,c){for(var f="",h=/\$(?:\{([a-z_][a-z_0-9]*)(?:\[([0-9]+)\])?\}|\$)/gi,p=0,g;(g=h.exec(u))!==null;)if(f+=u.substring(p,g.index),p=g.index,g[0]==="$$")f+="$",p++;else{p+=g[0].length;var m=l[g[1]];if(!m)throw new ReferenceError("Template: Property "+g[1]+" does not exist.");if(g[2]===void 0)switch(typeof m){case"string":f+=m;break;case"object":if(pr(m))f+=m.toTex(c);else if(Array.isArray(m))f+=m.map(function(b,y){if(pr(b))return b.toTex(c);throw new TypeError("Template: "+g[1]+"["+y+"] is not a Node.")}).join(",");else throw new TypeError("Template: "+g[1]+" has to be a Node, String or array of Nodes");break;default:throw new TypeError("Template: "+g[1]+" has to be a Node, String or array of Nodes")}else if(pr(m[g[2]]&&m[g[2]]))f+=m[g[2]].toTex(c);else throw new TypeError("Template: "+g[1]+"["+g[2]+"] is not a Node.")}return f+=u.slice(p),f}class o extends n{constructor(l,c){if(super(),typeof l=="string"&&(l=new i(l)),!pr(l))throw new TypeError('Node expected as parameter "fn"');if(!Array.isArray(c)||!c.every(pr))throw new TypeError('Array containing Nodes expected for parameter "args"');this.fn=l,this.args=c||[]}get name(){return this.fn.name||""}get type(){return ym}get isFunctionNode(){return!0}_compile(l,c){var f=this.args.map(N=>N._compile(l,c));if(Sn(this.fn)){var h=this.fn.name;if(c[h]){var y=this.args;return function(E,M,O){var F=ri(M,h);if(typeof F!="function")throw new TypeError("Argument '".concat(h,"' was not a function; received: ").concat(a(F)));if(F.rawArgs)return F(y,l,nh(E,M));var q=f.map(V=>V(E,M,O));return F.apply(F,q)}}else{var p=h in l?ri(l,h):void 0,g=typeof p=="function"&&p.rawArgs===!0,m=N=>{var E;if(N.has(h))E=N.get(h);else if(h in l)E=ri(l,h);else return o.onUndefinedFunction(h);if(typeof E=="function")return E;throw new TypeError("'".concat(h,`' is not a function; its value is: + `).concat(a(E)))};if(g){var b=this.args;return function(E,M,O){var F=m(E);return F(b,l,nh(E,M))}}else switch(f.length){case 0:return function(E,M,O){var F=m(E);return F()};case 1:return function(E,M,O){var F=m(E),q=f[0];return F(q(E,M,O))};case 2:return function(E,M,O){var F=m(E),q=f[0],V=f[1];return F(q(E,M,O),V(E,M,O))};default:return function(E,M,O){var F=m(E),q=f.map(V=>V(E,M,O));return F(...q)}}}}else if(Hu(this.fn)&&Oc(this.fn.index)&&this.fn.index.isObjectProperty()){var S=this.fn.object._compile(l,c),x=this.fn.index.getObjectProperty(),_=this.args;return function(E,M,O){var F=S(E,M,O),q=Qre(F,x);if(q!=null&&q.rawArgs)return q(_,l,nh(E,M));var V=f.map(H=>H(E,M,O));return q.apply(F,V)}}else{var A=this.fn.toString(),w=this.fn._compile(l,c),C=this.args;return function(E,M,O){var F=w(E,M,O);if(typeof F!="function")throw new TypeError("Expression '".concat(A,"' did not evaluate to a function; value is:")+` + `.concat(a(F)));if(F.rawArgs)return F(C,l,nh(E,M));var q=f.map(V=>V(E,M,O));return F.apply(F,q)}}}forEach(l){l(this.fn,"fn",this);for(var c=0;c'+ta(this.fn)+'('+c.join(',')+')'}toTex(l){var c;return l&&typeof l.handler=="object"&&nt(l.handler,this.name)&&(c=l.handler[this.name](this,l)),typeof c<"u"?c:super.toTex(l)}_toTex(l){var c=this.args.map(function(p){return p.toTex(l)}),f;kC[this.name]&&(f=kC[this.name]),r[this.name]&&(typeof r[this.name].toTex=="function"||typeof r[this.name].toTex=="object"||typeof r[this.name].toTex=="string")&&(f=r[this.name].toTex);var h;switch(typeof f){case"function":h=f(this,l);break;case"string":h=s(f,this,l);break;case"object":switch(typeof f[c.length]){case"function":h=f[c.length](this,l);break;case"string":h=s(f[c.length],this,l);break}}return typeof h<"u"?h:s(ode,this,l)}getIdentifier(){return this.type+":"+this.name}}return e=o,vn(o,"name",ym),vn(o,"onUndefinedFunction",function(u){throw new Error("Undefined function "+u)}),vn(o,"fromJSON",function(u){return new e(u.fn,u.args)}),o},{isClass:!0,isNode:!0}),IC="parse",Mde=["typed","numeric","config","AccessorNode","ArrayNode","AssignmentNode","BlockNode","ConditionalNode","ConstantNode","FunctionAssignmentNode","FunctionNode","IndexNode","ObjectNode","OperatorNode","ParenthesisNode","RangeNode","RelationalNode","SymbolNode"],Tde=G(IC,Mde,t=>{var{typed:e,numeric:r,config:n,AccessorNode:i,ArrayNode:a,AssignmentNode:s,BlockNode:o,ConditionalNode:u,ConstantNode:l,FunctionAssignmentNode:c,FunctionNode:f,IndexNode:h,ObjectNode:p,OperatorNode:g,ParenthesisNode:m,RangeNode:b,RelationalNode:y,SymbolNode:S}=t,x=e(IC,{string:function(oe){return he(oe,{})},"Array | Matrix":function(oe){return _(oe,{})},"string, Object":function(oe,Ae){var $e=Ae.nodes!==void 0?Ae.nodes:{};return he(oe,$e)},"Array | Matrix, Object":_});function _(I){var oe=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Ae=oe.nodes!==void 0?oe.nodes:{};return Bt(I,function($e){if(typeof $e!="string")throw new TypeError("String expected");return he($e,Ae)})}var A={NULL:0,DELIMITER:1,NUMBER:2,SYMBOL:3,UNKNOWN:4},w={",":!0,"(":!0,")":!0,"[":!0,"]":!0,"{":!0,"}":!0,'"':!0,"'":!0,";":!0,"+":!0,"-":!0,"*":!0,".*":!0,"/":!0,"./":!0,"%":!0,"^":!0,".^":!0,"~":!0,"!":!0,"&":!0,"|":!0,"^|":!0,"=":!0,":":!0,"?":!0,"==":!0,"!=":!0,"<":!0,">":!0,"<=":!0,">=":!0,"<<":!0,">>":!0,">>>":!0},C={mod:!0,to:!0,in:!0,and:!0,xor:!0,or:!0,not:!0},N={true:!0,false:!1,null:null,undefined:void 0},E=["NaN","Infinity"],M={'"':'"',"'":"'","\\":"\\","/":"/",b:"\b",f:"\f",n:` +`,r:"\r",t:" "};function O(){return{extraNodes:{},expression:"",comment:"",index:0,token:"",tokenType:A.NULL,nestingLevel:0,conditionalLevel:null}}function F(I,oe){return I.expression.substr(I.index,oe)}function q(I){return F(I,1)}function V(I){I.index++}function H(I){return I.expression.charAt(I.index-1)}function B(I){return I.expression.charAt(I.index+1)}function k(I){for(I.tokenType=A.NULL,I.token="",I.comment="";;){if(q(I)==="#")for(;q(I)!==` +`&&q(I)!=="";)I.comment+=q(I),V(I);if(x.isWhitespace(q(I),I.nestingLevel))V(I);else break}if(q(I)===""){I.tokenType=A.DELIMITER;return}if(q(I)===` +`&&!I.nestingLevel){I.tokenType=A.DELIMITER,I.token=q(I),V(I);return}var oe=q(I),Ae=F(I,2),$e=F(I,3);if($e.length===3&&w[$e]){I.tokenType=A.DELIMITER,I.token=$e,V(I),V(I),V(I);return}if(Ae.length===2&&w[Ae]){I.tokenType=A.DELIMITER,I.token=Ae,V(I),V(I);return}if(w[oe]){I.tokenType=A.DELIMITER,I.token=oe,V(I);return}if(x.isDigitDot(oe)){I.tokenType=A.NUMBER;var ct=F(I,2);if(ct==="0b"||ct==="0o"||ct==="0x"){for(I.token+=q(I),V(I),I.token+=q(I),V(I);x.isHexDigit(q(I));)I.token+=q(I),V(I);if(q(I)===".")for(I.token+=".",V(I);x.isHexDigit(q(I));)I.token+=q(I),V(I);else if(q(I)==="i")for(I.token+="i",V(I);x.isDigit(q(I));)I.token+=q(I),V(I);return}if(q(I)==="."){if(I.token+=q(I),V(I),!x.isDigit(q(I))){I.tokenType=A.DELIMITER;return}}else{for(;x.isDigit(q(I));)I.token+=q(I),V(I);x.isDecimalMark(q(I),B(I))&&(I.token+=q(I),V(I))}for(;x.isDigit(q(I));)I.token+=q(I),V(I);if(q(I)==="E"||q(I)==="e"){if(x.isDigit(B(I))||B(I)==="-"||B(I)==="+"){if(I.token+=q(I),V(I),(q(I)==="+"||q(I)==="-")&&(I.token+=q(I),V(I)),!x.isDigit(q(I)))throw at(I,'Digit expected, got "'+q(I)+'"');for(;x.isDigit(q(I));)I.token+=q(I),V(I);if(x.isDecimalMark(q(I),B(I)))throw at(I,'Digit expected, got "'+q(I)+'"')}else if(B(I)===".")throw V(I),at(I,'Digit expected, got "'+q(I)+'"')}return}if(x.isAlpha(q(I),H(I),B(I))){for(;x.isAlpha(q(I),H(I),B(I))||x.isDigit(q(I));)I.token+=q(I),V(I);nt(C,I.token)?I.tokenType=A.DELIMITER:I.tokenType=A.SYMBOL;return}for(I.tokenType=A.UNKNOWN;q(I)!=="";)I.token+=q(I),V(I);throw at(I,'Syntax error in part "'+I.token+'"')}function K(I){do k(I);while(I.token===` +`)}function $(I){I.nestingLevel++}function se(I){I.nestingLevel--}x.isAlpha=function(oe,Ae,$e){return x.isValidLatinOrGreek(oe)||x.isValidMathSymbol(oe,$e)||x.isValidMathSymbol(Ae,oe)},x.isValidLatinOrGreek=function(oe){return/^[a-zA-Z_$\u00C0-\u02AF\u0370-\u03FF\u2100-\u214F]$/.test(oe)},x.isValidMathSymbol=function(oe,Ae){return/^[\uD835]$/.test(oe)&&/^[\uDC00-\uDFFF]$/.test(Ae)&&/^[^\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]$/.test(Ae)},x.isWhitespace=function(oe,Ae){return oe===" "||oe===" "||oe===` +`&&Ae>0},x.isDecimalMark=function(oe,Ae){return oe==="."&&Ae!=="/"&&Ae!=="*"&&Ae!=="^"},x.isDigitDot=function(oe){return oe>="0"&&oe<="9"||oe==="."},x.isDigit=function(oe){return oe>="0"&&oe<="9"},x.isHexDigit=function(oe){return oe>="0"&&oe<="9"||oe>="a"&&oe<="f"||oe>="A"&&oe<="F"};function he(I,oe){var Ae=O();dn(Ae,{expression:I,extraNodes:oe}),k(Ae);var $e=ne(Ae);if(Ae.token!=="")throw Ae.tokenType===A.DELIMITER?mr(Ae,"Unexpected operator "+Ae.token):at(Ae,'Unexpected part "'+Ae.token+'"');return $e}function ne(I){var oe,Ae=[],$e;for(I.token!==""&&I.token!==` +`&&I.token!==";"&&(oe=X(I),I.comment&&(oe.comment=I.comment));I.token===` +`||I.token===";";)Ae.length===0&&oe&&($e=I.token!==";",Ae.push({node:oe,visible:$e})),k(I),I.token!==` +`&&I.token!==";"&&I.token!==""&&(oe=X(I),I.comment&&(oe.comment=I.comment),$e=I.token!==";",Ae.push({node:oe,visible:$e}));return Ae.length>0?new o(Ae):(oe||(oe=new l(void 0),I.comment&&(oe.comment=I.comment)),oe)}function X(I){var oe,Ae,$e,ct,ht=de(I);if(I.token==="="){if(Sn(ht))return oe=ht.name,K(I),$e=X(I),new s(new S(oe),$e);if(Hu(ht))return K(I),$e=X(I),new s(ht.object,ht.index,$e);if(Ho(ht)&&Sn(ht.fn)&&(ct=!0,Ae=[],oe=ht.name,ht.args.forEach(function(Dn,ro){Sn(Dn)?Ae[ro]=Dn.name:ct=!1}),ct))return K(I),$e=X(I),new c(oe,Ae,$e);throw at(I,"Invalid left hand side of assignment operator =")}return ht}function de(I){for(var oe=Se(I);I.token==="?";){var Ae=I.conditionalLevel;I.conditionalLevel=I.nestingLevel,K(I);var $e=oe,ct=X(I);if(I.token!==":")throw at(I,"False part of conditional expression expected");I.conditionalLevel=null,K(I);var ht=X(I);oe=new u($e,ct,ht),I.conditionalLevel=Ae}return oe}function Se(I){for(var oe=ce(I);I.token==="or";)K(I),oe=new g("or","or",[oe,ce(I)]);return oe}function ce(I){for(var oe=xe(I);I.token==="xor";)K(I),oe=new g("xor","xor",[oe,xe(I)]);return oe}function xe(I){for(var oe=_e(I);I.token==="and";)K(I),oe=new g("and","and",[oe,_e(I)]);return oe}function _e(I){for(var oe=me(I);I.token==="|";)K(I),oe=new g("|","bitOr",[oe,me(I)]);return oe}function me(I){for(var oe=we(I);I.token==="^|";)K(I),oe=new g("^|","bitXor",[oe,we(I)]);return oe}function we(I){for(var oe=Ee(I);I.token==="&";)K(I),oe=new g("&","bitAnd",[oe,Ee(I)]);return oe}function Ee(I){for(var oe=[Ce(I)],Ae=[],$e={"==":"equal","!=":"unequal","<":"smaller",">":"larger","<=":"smallerEq",">=":"largerEq"};nt($e,I.token);){var ct={name:I.token,fn:$e[I.token]};Ae.push(ct),K(I),oe.push(Ce(I))}return oe.length===1?oe[0]:oe.length===2?new g(Ae[0].name,Ae[0].fn,oe):new y(Ae.map(ht=>ht.fn),oe)}function Ce(I){var oe,Ae,$e,ct;oe=He(I);for(var ht={"<<":"leftShift",">>":"rightArithShift",">>>":"rightLogShift"};nt(ht,I.token);)Ae=I.token,$e=ht[Ae],K(I),ct=[oe,He(I)],oe=new g(Ae,$e,ct);return oe}function He(I){var oe,Ae,$e,ct;oe=Ue(I);for(var ht={to:"to",in:"to"};nt(ht,I.token);)Ae=I.token,$e=ht[Ae],K(I),Ae==="in"&&I.token===""?oe=new g("*","multiply",[oe,new S("in")],!0):(ct=[oe,Ue(I)],oe=new g(Ae,$e,ct));return oe}function Ue(I){var oe,Ae=[];if(I.token===":"?oe=new l(1):oe=J(I),I.token===":"&&I.conditionalLevel!==I.nestingLevel){for(Ae.push(oe);I.token===":"&&Ae.length<3;)K(I),I.token===")"||I.token==="]"||I.token===","||I.token===""?Ae.push(new S("end")):Ae.push(J(I));Ae.length===3?oe=new b(Ae[0],Ae[2],Ae[1]):oe=new b(Ae[0],Ae[1])}return oe}function J(I){var oe,Ae,$e,ct;oe=te(I);for(var ht={"+":"add","-":"subtract"};nt(ht,I.token);){Ae=I.token,$e=ht[Ae],K(I);var Dn=te(I);Dn.isPercentage?ct=[oe,new g("*","multiply",[oe,Dn])]:ct=[oe,Dn],oe=new g(Ae,$e,ct)}return oe}function te(I){var oe,Ae,$e,ct;oe=ye(I),Ae=oe;for(var ht={"*":"multiply",".*":"dotMultiply","/":"divide","./":"dotDivide"};nt(ht,I.token);)$e=I.token,ct=ht[$e],K(I),Ae=ye(I),oe=new g($e,ct,[oe,Ae]);return oe}function ye(I){var oe,Ae;for(oe=ee(I),Ae=oe;I.tokenType===A.SYMBOL||I.token==="in"&&er(oe)||I.tokenType===A.NUMBER&&!er(Ae)&&(!tn(Ae)||Ae.op==="!")||I.token==="(";)Ae=ee(I),oe=new g("*","multiply",[oe,Ae],!0);return oe}function ee(I){for(var oe=ue(I),Ae=oe,$e=[];I.token==="/"&&Kb(Ae);)if($e.push(dn({},I)),K(I),I.tokenType===A.NUMBER)if($e.push(dn({},I)),K(I),I.tokenType===A.SYMBOL||I.token==="(")dn(I,$e.pop()),$e.pop(),Ae=ue(I),oe=new g("/","divide",[oe,Ae]);else{$e.pop(),dn(I,$e.pop());break}else{dn(I,$e.pop());break}return oe}function ue(I){var oe,Ae,$e,ct;oe=le(I);for(var ht={"%":"mod",mod:"mod"};nt(ht,I.token);)Ae=I.token,$e=ht[Ae],K(I),Ae==="%"&&I.tokenType===A.DELIMITER&&I.token!=="("?oe=new g("/","divide",[oe,new l(100)],!1,!0):(ct=[oe,le(I)],oe=new g(Ae,$e,ct));return oe}function le(I){var oe,Ae,$e,ct={"-":"unaryMinus","+":"unaryPlus","~":"bitNot",not:"not"};return nt(ct,I.token)?($e=ct[I.token],oe=I.token,K(I),Ae=[le(I)],new g(oe,$e,Ae)):Ne(I)}function Ne(I){var oe,Ae,$e,ct;return oe=Me(I),(I.token==="^"||I.token===".^")&&(Ae=I.token,$e=Ae==="^"?"pow":"dotPow",K(I),ct=[oe,le(I)],oe=new g(Ae,$e,ct)),oe}function Me(I){var oe,Ae,$e,ct;oe=R(I);for(var ht={"!":"factorial","'":"ctranspose"};nt(ht,I.token);)Ae=I.token,$e=ht[Ae],k(I),ct=[oe],oe=new g(Ae,$e,ct),oe=Y(I,oe);return oe}function R(I){var oe=[];if(I.tokenType===A.SYMBOL&&nt(I.extraNodes,I.token)){var Ae=I.extraNodes[I.token];if(k(I),I.token==="("){if(oe=[],$(I),k(I),I.token!==")")for(oe.push(X(I));I.token===",";)k(I),oe.push(X(I));if(I.token!==")")throw at(I,"Parenthesis ) expected");se(I),k(I)}return new Ae(oe)}return U(I)}function U(I){var oe,Ae;return I.tokenType===A.SYMBOL||I.tokenType===A.DELIMITER&&I.token in C?(Ae=I.token,k(I),nt(N,Ae)?oe=new l(N[Ae]):E.indexOf(Ae)!==-1?oe=new l(r(Ae,"number")):oe=new S(Ae),oe=Y(I,oe),oe):pe(I)}function Y(I,oe,Ae){for(var $e;(I.token==="("||I.token==="["||I.token===".")&&(!Ae||Ae.indexOf(I.token)!==-1);)if($e=[],I.token==="(")if(Sn(oe)||Hu(oe)){if($(I),k(I),I.token!==")")for($e.push(X(I));I.token===",";)k(I),$e.push(X(I));if(I.token!==")")throw at(I,"Parenthesis ) expected");se(I),k(I),oe=new f(oe,$e)}else return oe;else if(I.token==="["){if($(I),k(I),I.token!=="]")for($e.push(X(I));I.token===",";)k(I),$e.push(X(I));if(I.token!=="]")throw at(I,"Parenthesis ] expected");se(I),k(I),oe=new i(oe,new h($e))}else{k(I);var ct=I.tokenType===A.SYMBOL||I.tokenType===A.DELIMITER&&I.token in C;if(!ct)throw at(I,"Property name expected after dot");$e.push(new l(I.token)),k(I);var ht=!0;oe=new i(oe,new h($e,ht))}return oe}function pe(I){var oe,Ae;return I.token==='"'||I.token==="'"?(Ae=ge(I,I.token),oe=new l(Ae),oe=Y(I,oe),oe):De(I)}function ge(I,oe){for(var Ae="";q(I)!==""&&q(I)!==oe;)if(q(I)==="\\"){V(I);var $e=q(I),ct=M[$e];if(ct!==void 0)Ae+=ct,I.index+=1;else if($e==="u"){var ht=I.expression.slice(I.index+1,I.index+5);if(/^[0-9A-Fa-f]{4}$/.test(ht))Ae+=String.fromCharCode(parseInt(ht,16)),I.index+=5;else throw at(I,"Invalid unicode character \\u".concat(ht))}else throw at(I,"Bad escape character \\".concat($e))}else Ae+=q(I),V(I);if(k(I),I.token!==oe)throw at(I,"End of string ".concat(oe," expected"));return k(I),Ae}function De(I){var oe,Ae,$e,ct;if(I.token==="["){if($(I),k(I),I.token!=="]"){var ht=Pe(I);if(I.token===";"){for($e=1,Ae=[ht];I.token===";";)k(I),Ae[$e]=Pe(I),$e++;if(I.token!=="]")throw at(I,"End of matrix ] expected");se(I),k(I),ct=Ae[0].items.length;for(var Dn=1;Dn<$e;Dn++)if(Ae[Dn].items.length!==ct)throw mr(I,"Column dimensions mismatch ("+Ae[Dn].items.length+" !== "+ct+")");oe=new a(Ae)}else{if(I.token!=="]")throw at(I,"End of matrix ] expected");se(I),k(I),oe=ht}}else se(I),k(I),oe=new a([]);return Y(I,oe)}return ke(I)}function Pe(I){for(var oe=[X(I)],Ae=1;I.token===",";)k(I),oe[Ae]=X(I),Ae++;return new a(oe)}function ke(I){if(I.token==="{"){$(I);var oe,Ae={};do if(k(I),I.token!=="}"){if(I.token==='"'||I.token==="'")oe=ge(I,I.token);else if(I.tokenType===A.SYMBOL||I.tokenType===A.DELIMITER&&I.token in C)oe=I.token,k(I);else throw at(I,"Symbol or string expected as object key");if(I.token!==":")throw at(I,"Colon : expected after object key");k(I),Ae[oe]=X(I)}while(I.token===",");if(I.token!=="}")throw at(I,"Comma , or bracket } expected after object value");se(I),k(I);var $e=new p(Ae);return $e=Y(I,$e),$e}return Ve(I)}function Ve(I){var oe;return I.tokenType===A.NUMBER?(oe=I.token,k(I),new l(r(oe,n.number))):ze(I)}function ze(I){var oe;if(I.token==="("){if($(I),k(I),oe=X(I),I.token!==")")throw at(I,"Parenthesis ) expected");return se(I),k(I),oe=new m(oe),oe=Y(I,oe),oe}return vt(I)}function vt(I){throw I.token===""?at(I,"Unexpected end of expression"):at(I,"Value expected")}function St(I){return I.index-I.token.length+1}function at(I,oe){var Ae=St(I),$e=new SyntaxError(oe+" (char "+Ae+")");return $e.char=Ae,$e}function mr(I,oe){var Ae=St(I),$e=new SyntaxError(oe+" (char "+Ae+")");return $e.char=Ae,$e}return e.addConversion({from:"string",to:"Node",convert:x}),x}),LC="compile",Ode=["typed","parse"],Fde=G(LC,Ode,t=>{var{typed:e,parse:r}=t;return e(LC,{string:function(i){return r(i).compile()},"Array | Matrix":function(i){return Bt(i,function(a){return r(a).compile()})}})}),$C="evaluate",Rde=["typed","parse"],Pde=G($C,Rde,t=>{var{typed:e,parse:r}=t;return e($C,{string:function(i){var a=Hh();return r(i).compile().evaluate(a)},"string, Map | Object":function(i,a){return r(i).compile().evaluate(a)},"Array | Matrix":function(i){var a=Hh();return Bt(i,function(s){return r(s).compile().evaluate(a)})},"Array | Matrix, Map | Object":function(i,a){return Bt(i,function(s){return r(s).compile().evaluate(a)})}})}),kde="Parser",Bde=["evaluate"],Ide=G(kde,Bde,t=>{var{evaluate:e}=t;function r(){if(!(this instanceof r))throw new SyntaxError("Constructor must be called with the new operator");Object.defineProperty(this,"scope",{value:Hh(),writable:!1})}return r.prototype.type="Parser",r.prototype.isParser=!0,r.prototype.evaluate=function(n){return e(n,this.scope)},r.prototype.get=function(n){if(this.scope.has(n))return this.scope.get(n)},r.prototype.getAll=function(){return rne(this.scope)},r.prototype.getAllAsMap=function(){return this.scope},r.prototype.set=function(n,i){return this.scope.set(n,i),i},r.prototype.remove=function(n){this.scope.delete(n)},r.prototype.clear=function(){this.scope.clear()},r},{isClass:!0}),zC="parser",Lde=["typed","Parser"],$de=G(zC,Lde,t=>{var{typed:e,Parser:r}=t;return e(zC,{"":function(){return new r}})}),qC="lup",zde=["typed","matrix","abs","addScalar","divideScalar","multiplyScalar","subtractScalar","larger","equalScalar","unaryMinus","DenseMatrix","SparseMatrix","Spa"],qde=G(qC,zde,t=>{var{typed:e,matrix:r,abs:n,addScalar:i,divideScalar:a,multiplyScalar:s,subtractScalar:o,larger:u,equalScalar:l,unaryMinus:c,DenseMatrix:f,SparseMatrix:h,Spa:p}=t;return e(qC,{DenseMatrix:function(y){return g(y)},SparseMatrix:function(y){return m(y)},Array:function(y){var S=r(y),x=g(S);return{L:x.L.valueOf(),U:x.U.valueOf(),p:x.p}}});function g(b){var y=b._size[0],S=b._size[1],x=Math.min(y,S),_=xt(b._data),A=[],w=[y,x],C=[],N=[x,S],E,M,O,F=[];for(E=0;E0)for(E=0;E0&&X.forEach(0,B-1,function(me,we){h._forEachRow(me,C,E,N,function(Ne,Ce){Ne>me&&X.accumulate(Ne,c(s(Ce,we)))})});var ce=B,xe=X.get(B),_e=n(xe);X.forEach(B+1,y-1,function(me,we){var Ne=n(we);u(Ne,_e)&&(ce=me,_e=Ne,xe=we)}),B!==ce&&(h._swapRows(B,ce,M[1],C,E,N),h._swapRows(B,ce,V[1],O,F,q),X.swap(B,ce),se(B,ce)),X.forEach(0,y-1,function(me,we){me<=B?(O.push(we),F.push(me)):(we=a(we,xe),l(we,0)||(C.push(we),E.push(me)))})};for(B=0;B0&&X.forEach(0,B-1,function(me,we){h._forEachRow(me,C,N,E,function(Ee,Ce){Ee>me&&X.accumulate(Ee,c(s(Ce,we)))})});var ce=B,xe=X.get(B),_e=n(xe);X.forEach(B+1,y-1,function(me,we){var Ee=n(we);u(Ee,_e)&&(ce=me,_e=Ee,xe=we)}),B!==ce&&(h._swapRows(B,ce,M[1],C,N,E),h._swapRows(B,ce,V[1],O,F,q),X.swap(B,ce),se(B,ce)),X.forEach(0,y-1,function(me,we){me<=B?(O.push(we),F.push(me)):(we=a(we,xe),l(we,0)||(C.push(we),N.push(me)))})};for(B=0;B{var{typed:e,matrix:r,zeros:n,identity:i,isZero:a,equal:s,sign:o,sqrt:u,conj:l,unaryMinus:c,addScalar:f,divideScalar:h,multiplyScalar:p,subtractScalar:g,complex:m}=t;return dn(e($C,{DenseMatrix:function(_){return y(_)},SparseMatrix:function(_){return S()},Array:function(_){var A=r(_),w=y(A);return{Q:w.Q.valueOf(),R:w.R.valueOf()}}}),{_denseQRimpl:b});function b(x){var _=x._size[0],A=x._size[1],w=i([_],"dense"),C=w._data,E=x.clone(),N=E._data,M,O,F,q=n([_],"");for(F=0;F0)for(var w=A[0][0].type==="Complex"?m(0):0,C=0;C=0;){var u=r[s+o],l=r[n+u];l===-1?(o--,a[e++]=u):(r[n+u]=r[i+l],++o,r[s+o]=l)}return e}function bde(t,e){if(!t)return null;var r=0,n,i=[],a=[],s=0,o=e,u=2*e;for(n=0;n=0;n--)t[n]!==-1&&(a[o+n]=a[s+t[n]],a[s+t[n]]=n);for(n=0;n{var{add:e,multiply:r,transpose:n}=t;return function(c,f){if(!f||c<=0||c>3)return null;var h=f._size,p=h[0],g=h[1],m=0,b=Math.max(16,10*Math.sqrt(g));b=Math.min(g-2,b);var y=i(c,f,p,g,b);wde(y,u,null);for(var S=y._index,x=y._ptr,_=x[g],A=[],w=[],C=0,E=g+1,N=2*(g+1),M=3*(g+1),O=4*(g+1),F=5*(g+1),q=6*(g+1),V=7*(g+1),H=A,B=a(g,x,w,C,M,H,N,V,E,q,O,F),I=s(g,x,w,F,O,q,b,E,M,H,N),K=0,$,se,he,ne,X,de,Se,ce,xe,_e,me,we,Ne,Ce,He,Ue;IJ?(de=he,Se=ee,ce=w[C+he]-J):(de=S[ee++],Se=x[de],ce=w[C+de]),X=1;X<=ce;X++)$=S[Se++],!((xe=w[E+$])<=0)&&(ye+=xe,w[E+$]=-xe,S[le++]=$,w[N+$]!==-1&&(H[w[N+$]]=H[$]),H[$]!==-1?w[N+H[$]]=w[N+$]:w[M+w[F+$]]=w[N+$]);de!==he&&(x[de]=Eo(he),w[q+de]=0)}for(J!==0&&(_=le),w[F+he]=ye,x[he]=ue,w[C+he]=le-ue,w[O+he]=-2,B=o(B,m,w,q,g),_e=ue;_e=B?w[q+de]-=xe:w[q+de]!==0&&(w[q+de]=w[F+de]+Ee)}for(_e=ue;_e0?(Ue+=Me,S[Ce++]=de,He+=de):(x[de]=Eo(he),w[q+de]=0)}w[O+$]=Ce-we+1;var P=Ce,U=we+w[C+$];for(ee=Ne+1;ee=0))for(He=H[$],$=w[V+He],w[V+He]=-1;$!==-1&&w[N+$]!==-1;$=w[N+$],B++){for(ce=w[C+$],me=w[O+$],ee=x[$]+1;ee<=x[$]+ce-1;ee++)w[q+S[ee]]=B;var pe=$;for(se=w[N+$];se!==-1;){var ge=w[C+se]===ce&&w[O+se]===me;for(ee=x[se]+1;ge&&ee<=x[se]+ce-1;ee++)w[q+S[ee]]!==B&&(ge=0);ge?(x[se]=Eo($),w[E+$]+=w[E+se],w[E+se]=0,w[O+se]=-1,se=w[N+se],w[N+pe]=se):(pe=se,se=w[N+se])}}for(ee=ue,_e=ue;_e=0;se--)w[E+se]>0||(w[N+se]=w[M+x[se]],w[M+x[se]]=se);for(de=g;de>=0;de--)w[E+de]<=0||x[de]!==-1&&(w[N+de]=w[M+x[de]],w[M+x[de]]=de);for(he=0,$=0;$<=g;$++)x[$]===-1&&(he=eB($,he,w,M,N,A,q));return A.splice(A.length-1,1),A};function i(l,c,f,h,p){var g=n(c);if(l===1&&h===f)return e(c,g);if(l===2){for(var m=g._index,b=g._ptr,y=0,S=0;Sp))for(var _=b[S+1];x<_;x++)m[y++]=m[x]}return b[f]=y,c=n(g),r(g,c)}return r(g,c)}function a(l,c,f,h,p,g,m,b,y,S,x,_){for(var A=0;Am)f[b+A]=0,f[p+A]=-1,_++,c[A]=Eo(l),f[b+l]++;else{var C=f[y+w];C!==-1&&(S[C]=A),f[x+A]=f[y+w],f[y+w]=A}}return _}function o(l,c,f,h,p){if(l<2||l+c<0){for(var g=0;g{var{transpose:e}=t;return function(r,n,i,a){if(!r||!n||!i)return null;var s=r._size,o=s[0],u=s[1],l,c,f,h,p,g,m,b=4*u+(a?u+o+1:0),y=[],S=0,x=u,_=2*u,A=3*u,w=4*u,C=5*u+1;for(f=0;f=1&&E[c]++,F.jleaf===2&&E[F.q]--}n[c]!==-1&&(y[S+c]=n[c])}for(c=0;c{var{add:e,multiply:r,transpose:n}=t,i=Ade({add:e,multiply:r,transpose:n}),a=Cde({transpose:n});return function(u,l,c){var f=l._ptr,h=l._size,p=h[1],g,m={};if(m.q=i(u,l),u&&!m.q)return null;if(c){var b=u?yde(l,null,m.q,0):l;m.parent=xde(b,1);var y=bde(m.parent,p);if(m.cp=a(b,m.parent,y,1),b&&m.parent&&m.cp&&s(b,m))for(m.unz=0,g=0;g=0;C--)for(N=l[C],M=l[C+1],E=N;E=0;w--)m[w]=-1,C=b[w],C!==-1&&(y[A+C]++===0&&(y[_+C]=w),y[S+w]=y[x+C],y[x+C]=w);for(u.lnz=0,u.m2=h,C=0;C=0;){t=n[h];var p=i?i[t]:t;f1(s,t)||(tB(s,t),n[u+h]=p<0?0:zC(s[p]));var g=1;for(c=n[u+h],f=p<0?0:zC(s[p+1]);c{var{divideScalar:e,multiply:r,subtract:n}=t;return function(a,s,o,u,l,c,f){var h=a._values,p=a._index,g=a._ptr,m=a._size,b=m[1],y=s._values,S=s._index,x=s._ptr,_,A,w,C,E=Pde(a,s,o,u,c);for(_=E;_{var{abs:e,divideScalar:r,multiply:n,subtract:i,larger:a,largerEq:s,SparseMatrix:o}=t,u=Bde({divideScalar:r,multiply:n,subtract:i});return function(c,f,h){if(!c)return null;var p=c._size,g=p[1],m,b=100,y=100;f&&(m=f.q,b=f.lnz||b,y=f.unz||y);var S=[],x=[],_=[],A=new o({values:S,index:x,ptr:_,size:[g,g]}),w=[],C=[],E=[],N=new o({values:w,index:C,ptr:E,size:[g,g]}),M=[],O,F,q=[],V=[];for(O=0;O{var{typed:e,abs:r,add:n,multiply:i,transpose:a,divideScalar:s,subtract:o,larger:u,largerEq:l,SparseMatrix:c}=t,f=Ode({add:n,multiply:i,transpose:a}),h=$de({abs:r,divideScalar:s,multiply:i,subtract:o,larger:u,largerEq:l,SparseMatrix:c});return e(qC,{"SparseMatrix, number, number":function(g,m,b){if(!ot(m)||m<0||m>3)throw new Error("Symbolic Ordering and Analysis order must be an integer number in the interval [0, 3]");if(b<0||b>1)throw new Error("Partial pivoting threshold must be a number from 0 to 1");var y=f(m,g,!1),S=h(g,y,b);return{L:S.L,U:S.U,p:S.pinv,q:y.q,toString:function(){return"L: "+this.L.toString()+` +P: `+this.p}}}}),UC="qr",Ude=["typed","matrix","zeros","identity","isZero","equal","sign","sqrt","conj","unaryMinus","addScalar","divideScalar","multiplyScalar","subtractScalar","complex"],Hde=G(UC,Ude,t=>{var{typed:e,matrix:r,zeros:n,identity:i,isZero:a,equal:s,sign:o,sqrt:u,conj:l,unaryMinus:c,addScalar:f,divideScalar:h,multiplyScalar:p,subtractScalar:g,complex:m}=t;return dn(e(UC,{DenseMatrix:function(_){return y(_)},SparseMatrix:function(_){return S()},Array:function(_){var A=r(_),w=y(A);return{Q:w.Q.valueOf(),R:w.R.valueOf()}}}),{_denseQRimpl:b});function b(x){var _=x._size[0],A=x._size[1],w=i([_],"dense"),C=w._data,N=x.clone(),E=N._data,M,O,F,q=n([_],"");for(F=0;F0)for(var w=A[0][0].type==="Complex"?m(0):0,C=0;C=0;){var u=r[s+o],l=r[n+u];l===-1?(o--,a[e++]=u):(r[n+u]=r[i+l],++o,r[s+o]=l)}return e}function Vde(t,e){if(!t)return null;var r=0,n,i=[],a=[],s=0,o=e,u=2*e;for(n=0;n=0;n--)t[n]!==-1&&(a[o+n]=a[s+t[n]],a[s+t[n]]=n);for(n=0;n{var{add:e,multiply:r,transpose:n}=t;return function(c,f){if(!f||c<=0||c>3)return null;var h=f._size,p=h[0],g=h[1],m=0,b=Math.max(16,10*Math.sqrt(g));b=Math.min(g-2,b);var y=i(c,f,p,g,b);jde(y,u,null);for(var S=y._index,x=y._ptr,_=x[g],A=[],w=[],C=0,N=g+1,E=2*(g+1),M=3*(g+1),O=4*(g+1),F=5*(g+1),q=6*(g+1),V=7*(g+1),H=A,B=a(g,x,w,C,M,H,E,V,N,q,O,F),k=s(g,x,w,F,O,q,b,N,M,H,E),K=0,$,se,he,ne,X,de,Se,ce,xe,_e,me,we,Ee,Ce,He,Ue;kJ?(de=he,Se=ee,ce=w[C+he]-J):(de=S[ee++],Se=x[de],ce=w[C+de]),X=1;X<=ce;X++)$=S[Se++],!((xe=w[N+$])<=0)&&(ye+=xe,w[N+$]=-xe,S[le++]=$,w[E+$]!==-1&&(H[w[E+$]]=H[$]),H[$]!==-1?w[E+H[$]]=w[E+$]:w[M+w[F+$]]=w[E+$]);de!==he&&(x[de]=No(he),w[q+de]=0)}for(J!==0&&(_=le),w[F+he]=ye,x[he]=ue,w[C+he]=le-ue,w[O+he]=-2,B=o(B,m,w,q,g),_e=ue;_e=B?w[q+de]-=xe:w[q+de]!==0&&(w[q+de]=w[F+de]+Ne)}for(_e=ue;_e0?(Ue+=Me,S[Ce++]=de,He+=de):(x[de]=No(he),w[q+de]=0)}w[O+$]=Ce-we+1;var R=Ce,U=we+w[C+$];for(ee=Ee+1;ee=0))for(He=H[$],$=w[V+He],w[V+He]=-1;$!==-1&&w[E+$]!==-1;$=w[E+$],B++){for(ce=w[C+$],me=w[O+$],ee=x[$]+1;ee<=x[$]+ce-1;ee++)w[q+S[ee]]=B;var pe=$;for(se=w[E+$];se!==-1;){var ge=w[C+se]===ce&&w[O+se]===me;for(ee=x[se]+1;ge&&ee<=x[se]+ce-1;ee++)w[q+S[ee]]!==B&&(ge=0);ge?(x[se]=No($),w[N+$]+=w[N+se],w[N+se]=0,w[O+se]=-1,se=w[E+se],w[E+pe]=se):(pe=se,se=w[E+se])}}for(ee=ue,_e=ue;_e=0;se--)w[N+se]>0||(w[E+se]=w[M+x[se]],w[M+x[se]]=se);for(de=g;de>=0;de--)w[N+de]<=0||x[de]!==-1&&(w[E+de]=w[M+x[de]],w[M+x[de]]=de);for(he=0,$=0;$<=g;$++)x[$]===-1&&(he=lB($,he,w,M,E,A,q));return A.splice(A.length-1,1),A};function i(l,c,f,h,p){var g=n(c);if(l===1&&h===f)return e(c,g);if(l===2){for(var m=g._index,b=g._ptr,y=0,S=0;Sp))for(var _=b[S+1];x<_;x++)m[y++]=m[x]}return b[f]=y,c=n(g),r(g,c)}return r(g,c)}function a(l,c,f,h,p,g,m,b,y,S,x,_){for(var A=0;Am)f[b+A]=0,f[p+A]=-1,_++,c[A]=No(l),f[b+l]++;else{var C=f[y+w];C!==-1&&(S[C]=A),f[x+A]=f[y+w],f[y+w]=A}}return _}function o(l,c,f,h,p){if(l<2||l+c<0){for(var g=0;g{var{transpose:e}=t;return function(r,n,i,a){if(!r||!n||!i)return null;var s=r._size,o=s[0],u=s[1],l,c,f,h,p,g,m,b=4*u+(a?u+o+1:0),y=[],S=0,x=u,_=2*u,A=3*u,w=4*u,C=5*u+1;for(f=0;f=1&&N[c]++,F.jleaf===2&&N[F.q]--}n[c]!==-1&&(y[S+c]=n[c])}for(c=0;c{var{add:e,multiply:r,transpose:n}=t,i=Zde({add:e,multiply:r,transpose:n}),a=epe({transpose:n});return function(u,l,c){var f=l._ptr,h=l._size,p=h[1],g,m={};if(m.q=i(u,l),u&&!m.q)return null;if(c){var b=u?Wde(l,null,m.q,0):l;m.parent=Yde(b,1);var y=Vde(m.parent,p);if(m.cp=a(b,m.parent,y,1),b&&m.parent&&m.cp&&s(b,m))for(m.unz=0,g=0;g=0;C--)for(E=l[C],M=l[C+1],N=E;N=0;w--)m[w]=-1,C=b[w],C!==-1&&(y[A+C]++===0&&(y[_+C]=w),y[S+w]=y[x+C],y[x+C]=w);for(u.lnz=0,u.m2=h,C=0;C=0;){t=n[h];var p=i?i[t]:t;h1(s,t)||(cB(s,t),n[u+h]=p<0?0:HC(s[p]));var g=1;for(c=n[u+h],f=p<0?0:HC(s[p+1]);c{var{divideScalar:e,multiply:r,subtract:n}=t;return function(a,s,o,u,l,c,f){var h=a._values,p=a._index,g=a._ptr,m=a._size,b=m[1],y=s._values,S=s._index,x=s._ptr,_,A,w,C,N=ape(a,s,o,u,c);for(_=N;_{var{abs:e,divideScalar:r,multiply:n,subtract:i,larger:a,largerEq:s,SparseMatrix:o}=t,u=upe({divideScalar:r,multiply:n,subtract:i});return function(c,f,h){if(!c)return null;var p=c._size,g=p[1],m,b=100,y=100;f&&(m=f.q,b=f.lnz||b,y=f.unz||y);var S=[],x=[],_=[],A=new o({values:S,index:x,ptr:_,size:[g,g]}),w=[],C=[],N=[],E=new o({values:w,index:C,ptr:N,size:[g,g]}),M=[],O,F,q=[],V=[];for(O=0;O{var{typed:e,abs:r,add:n,multiply:i,transpose:a,divideScalar:s,subtract:o,larger:u,largerEq:l,SparseMatrix:c}=t,f=npe({add:n,multiply:i,transpose:a}),h=fpe({abs:r,divideScalar:s,multiply:i,subtract:o,larger:u,largerEq:l,SparseMatrix:c});return e(WC,{"SparseMatrix, number, number":function(g,m,b){if(!ot(m)||m<0||m>3)throw new Error("Symbolic Ordering and Analysis order must be an integer number in the interval [0, 3]");if(b<0||b>1)throw new Error("Partial pivoting threshold must be a number from 0 to 1");var y=f(m,g,!1),S=h(g,y,b);return{L:S.L,U:S.U,p:S.pinv,q:y.q,toString:function(){return"L: "+this.L.toString()+` U: `+this.U.toString()+` p: `+this.p.toString()+(this.q?` q: `+this.q.toString():"")+` -`}}}})});function UC(t,e){var r,n=e.length,i=[];if(t)for(r=0;r{var{typed:e,matrix:r,lup:n,slu:i,usolve:a,lsolve:s,DenseMatrix:o}=t,u=md({DenseMatrix:o});return e(HC,{"Array, Array | Matrix":function(h,p){h=r(h);var g=n(h),m=c(g.L,g.U,g.p,null,p);return m.valueOf()},"DenseMatrix, Array | Matrix":function(h,p){var g=n(h);return c(g.L,g.U,g.p,null,p)},"SparseMatrix, Array | Matrix":function(h,p){var g=n(h);return c(g.L,g.U,g.p,null,p)},"SparseMatrix, Array | Matrix, number, number":function(h,p,g,m){var b=i(h,g,m);return c(b.L,b.U,b.p,b.q,p)},"Object, Array | Matrix":function(h,p){return c(h.L,h.U,h.p,h.q,p)}});function l(f){if(dt(f))return f;if(sr(f))return r(f);throw new TypeError("Invalid Matrix LU decomposition")}function c(f,h,p,g,m){f=l(f),h=l(h),p&&(m=u(f,m,!0),m._data=UC(p,m._data));var b=s(f,m),y=a(h,b);return g&&(y._data=UC(g,y._data)),y}}),WC="polynomialRoot",Wde=["typed","isZero","equalScalar","add","subtract","multiply","divide","sqrt","unaryMinus","cbrt","typeOf","im","re"],Vde=G(WC,Wde,t=>{var{typed:e,isZero:r,equalScalar:n,add:i,subtract:a,multiply:s,divide:o,sqrt:u,unaryMinus:l,cbrt:c,typeOf:f,im:h,re:p}=t;return e(WC,{"number|Complex, ...number|Complex":(g,m)=>{for(var b=[g,...m];b.length>0&&r(b[b.length-1]);)b.pop();if(b.length<2)throw new RangeError("Polynomial [".concat(g,", ").concat(m,"] must have a non-zero non-constant coefficient"));switch(b.length){case 2:return[l(o(b[0],b[1]))];case 3:{var[y,S,x]=b,_=s(2,x),A=s(S,S),w=s(4,x,y);if(n(A,w))return[o(l(S),_)];var C=u(a(A,w));return[o(a(C,S),_),o(a(l(C),S),_)]}case 4:{var[E,N,M,O]=b,F=l(s(3,O)),q=s(M,M),V=s(3,O,N),H=i(s(2,M,M,M),s(27,O,O,E)),B=s(9,O,M,N);if(n(q,V)&&n(H,B))return[o(M,F)];var I=a(q,V),K=a(H,B),$=i(s(18,O,M,N,E),s(M,M,N,N)),se=i(s(4,M,M,M,E),s(4,O,N,N,N),s(27,O,O,E,E));if(n($,se))return[o(a(s(4,O,M,N),i(s(9,O,O,E),s(M,M,M))),s(O,I)),o(a(s(9,O,E),s(M,N)),s(2,I))];var he;n(q,V)?he=K:he=o(i(K,u(a(s(K,K),s(4,I,I,I)))),2);var ne=!0,X=c(he,ne).toArray().map(de=>o(i(M,de,o(I,de)),F));return X.map(de=>f(de)==="Complex"&&n(p(de),p(de)+h(de))?p(de):de)}default:throw new RangeError("only implemented for cubic or lower-order polynomials, not ".concat(b))}}})}),Yde="Help",jde=["evaluate"],Gde=G(Yde,jde,t=>{var{evaluate:e}=t;function r(n){if(!(this instanceof r))throw new SyntaxError("Constructor must be called with the new operator");if(!n)throw new Error('Argument "doc" missing');this.doc=n}return r.prototype.type="Help",r.prototype.isHelp=!0,r.prototype.toString=function(){var n=this.doc||{},i=` +`}}}})});function VC(t,e){var r,n=e.length,i=[];if(t)for(r=0;r{var{typed:e,matrix:r,lup:n,slu:i,usolve:a,lsolve:s,DenseMatrix:o}=t,u=md({DenseMatrix:o});return e(YC,{"Array, Array | Matrix":function(h,p){h=r(h);var g=n(h),m=c(g.L,g.U,g.p,null,p);return m.valueOf()},"DenseMatrix, Array | Matrix":function(h,p){var g=n(h);return c(g.L,g.U,g.p,null,p)},"SparseMatrix, Array | Matrix":function(h,p){var g=n(h);return c(g.L,g.U,g.p,null,p)},"SparseMatrix, Array | Matrix, number, number":function(h,p,g,m){var b=i(h,g,m);return c(b.L,b.U,b.p,b.q,p)},"Object, Array | Matrix":function(h,p){return c(h.L,h.U,h.p,h.q,p)}});function l(f){if(dt(f))return f;if(sr(f))return r(f);throw new TypeError("Invalid Matrix LU decomposition")}function c(f,h,p,g,m){f=l(f),h=l(h),p&&(m=u(f,m,!0),m._data=VC(p,m._data));var b=s(f,m),y=a(h,b);return g&&(y._data=VC(g,y._data)),y}}),jC="polynomialRoot",vpe=["typed","isZero","equalScalar","add","subtract","multiply","divide","sqrt","unaryMinus","cbrt","typeOf","im","re"],gpe=G(jC,vpe,t=>{var{typed:e,isZero:r,equalScalar:n,add:i,subtract:a,multiply:s,divide:o,sqrt:u,unaryMinus:l,cbrt:c,typeOf:f,im:h,re:p}=t;return e(jC,{"number|Complex, ...number|Complex":(g,m)=>{for(var b=[g,...m];b.length>0&&r(b[b.length-1]);)b.pop();if(b.length<2)throw new RangeError("Polynomial [".concat(g,", ").concat(m,"] must have a non-zero non-constant coefficient"));switch(b.length){case 2:return[l(o(b[0],b[1]))];case 3:{var[y,S,x]=b,_=s(2,x),A=s(S,S),w=s(4,x,y);if(n(A,w))return[o(l(S),_)];var C=u(a(A,w));return[o(a(C,S),_),o(a(l(C),S),_)]}case 4:{var[N,E,M,O]=b,F=l(s(3,O)),q=s(M,M),V=s(3,O,E),H=i(s(2,M,M,M),s(27,O,O,N)),B=s(9,O,M,E);if(n(q,V)&&n(H,B))return[o(M,F)];var k=a(q,V),K=a(H,B),$=i(s(18,O,M,E,N),s(M,M,E,E)),se=i(s(4,M,M,M,N),s(4,O,E,E,E),s(27,O,O,N,N));if(n($,se))return[o(a(s(4,O,M,E),i(s(9,O,O,N),s(M,M,M))),s(O,k)),o(a(s(9,O,N),s(M,E)),s(2,k))];var he;n(q,V)?he=K:he=o(i(K,u(a(s(K,K),s(4,k,k,k)))),2);var ne=!0,X=c(he,ne).toArray().map(de=>o(i(M,de,o(k,de)),F));return X.map(de=>f(de)==="Complex"&&n(p(de),p(de)+h(de))?p(de):de)}default:throw new RangeError("only implemented for cubic or lower-order polynomials, not ".concat(b))}}})}),ype="Help",bpe=["evaluate"],xpe=G(ype,bpe,t=>{var{evaluate:e}=t;function r(n){if(!(this instanceof r))throw new SyntaxError("Constructor must be called with the new operator");if(!n)throw new Error('Argument "doc" missing');this.doc=n}return r.prototype.type="Help",r.prototype.isHelp=!0,r.prototype.toString=function(){var n=this.doc||{},i=` `;if(n.name&&(i+="Name: "+n.name+` `),n.category&&(i+="Category: "+n.category+` @@ -171,11 +171,11 @@ q: `+this.q.toString():"")+` `),n.examples){i+=`Examples: `;for(var a=!1,s=e("config()"),o={config:f=>(a=!0,e("config(newConfig)",{newConfig:f}))},u=0;ua!=="mathjs").forEach(a=>{i[a]=n[a]}),new r(i)},r.prototype.valueOf=r.prototype.toString,r},{isClass:!0}),Xde="Chain",Zde=["?on","math","typed"],Kde=G(Xde,Zde,t=>{var{on:e,math:r,typed:n}=t;function i(l){if(!(this instanceof i))throw new SyntaxError("Constructor must be called with the new operator");tR(l)?this.value=l.value:this.value=l}i.prototype.type="Chain",i.prototype.isChain=!0,i.prototype.done=function(){return this.value},i.prototype.valueOf=function(){return this.value},i.prototype.toString=function(){return Pt(this.value)},i.prototype.toJSON=function(){return{mathjs:"Chain",value:this.value}},i.fromJSON=function(l){return new i(l.value)};function a(l,c){typeof c=="function"&&(i.prototype[l]=o(c))}function s(l,c){jte(i.prototype,l,function(){var h=c();if(typeof h=="function")return o(h)})}function o(l){return function(){if(arguments.length===0)return new i(l(this.value));for(var c=[this.value],f=0;fl[g])};for(var h in l)f(h)}};var u={expression:!0,docs:!0,type:!0,classes:!0,json:!0,error:!0,isChain:!0};return i.createProxy(r),e&&e("import",function(l,c,f){f||s(l,c)}),i},{isClass:!0}),VC={name:"e",category:"Constants",syntax:["e"],description:"Euler's number, the base of the natural logarithm. Approximately equal to 2.71828",examples:["e","e ^ 2","exp(2)","log(e)"],seealso:["exp"]},Jde={name:"false",category:"Constants",syntax:["false"],description:"Boolean value false",examples:["false"],seealso:["true"]},Qde={name:"i",category:"Constants",syntax:["i"],description:"Imaginary unit, defined as i*i=-1. A complex number is described as a + b*i, where a is the real part, and b is the imaginary part.",examples:["i","i * i","sqrt(-1)"],seealso:[]},epe={name:"Infinity",category:"Constants",syntax:["Infinity"],description:"Infinity, a number which is larger than the maximum number that can be handled by a floating point number.",examples:["Infinity","1 / 0"],seealso:[]},tpe={name:"LN10",category:"Constants",syntax:["LN10"],description:"Returns the natural logarithm of 10, approximately equal to 2.302",examples:["LN10","log(10)"],seealso:[]},rpe={name:"LN2",category:"Constants",syntax:["LN2"],description:"Returns the natural logarithm of 2, approximately equal to 0.693",examples:["LN2","log(2)"],seealso:[]},npe={name:"LOG10E",category:"Constants",syntax:["LOG10E"],description:"Returns the base-10 logarithm of E, approximately equal to 0.434",examples:["LOG10E","log(e, 10)"],seealso:[]},ipe={name:"LOG2E",category:"Constants",syntax:["LOG2E"],description:"Returns the base-2 logarithm of E, approximately equal to 1.442",examples:["LOG2E","log(e, 2)"],seealso:[]},ape={name:"NaN",category:"Constants",syntax:["NaN"],description:"Not a number",examples:["NaN","0 / 0"],seealso:[]},spe={name:"null",category:"Constants",syntax:["null"],description:"Value null",examples:["null"],seealso:["true","false"]},ope={name:"phi",category:"Constants",syntax:["phi"],description:"Phi is the golden ratio. Two quantities are in the golden ratio if their ratio is the same as the ratio of their sum to the larger of the two quantities. Phi is defined as `(1 + sqrt(5)) / 2` and is approximately 1.618034...",examples:["phi"],seealso:[]},YC={name:"pi",category:"Constants",syntax:["pi"],description:"The number pi is a mathematical constant that is the ratio of a circle's circumference to its diameter, and is approximately equal to 3.14159",examples:["pi","sin(pi/2)"],seealso:["tau"]},upe={name:"SQRT1_2",category:"Constants",syntax:["SQRT1_2"],description:"Returns the square root of 1/2, approximately equal to 0.707",examples:["SQRT1_2","sqrt(1/2)"],seealso:[]},lpe={name:"SQRT2",category:"Constants",syntax:["SQRT2"],description:"Returns the square root of 2, approximately equal to 1.414",examples:["SQRT2","sqrt(2)"],seealso:[]},cpe={name:"tau",category:"Constants",syntax:["tau"],description:"Tau is the ratio constant of a circle's circumference to radius, equal to 2 * pi, approximately 6.2832.",examples:["tau","2 * pi"],seealso:["pi"]},fpe={name:"true",category:"Constants",syntax:["true"],description:"Boolean value true",examples:["true"],seealso:["false"]},hpe={name:"version",category:"Constants",syntax:["version"],description:"A string with the version number of math.js",examples:["version"],seealso:[]},dpe={name:"bignumber",category:"Construction",syntax:["bignumber(x)"],description:"Create a big number from a number or string.",examples:["0.1 + 0.2","bignumber(0.1) + bignumber(0.2)",'bignumber("7.2")','bignumber("7.2e500")',"bignumber([0.1, 0.2, 0.3])"],seealso:["boolean","complex","fraction","index","matrix","string","unit"]},ppe={name:"boolean",category:"Construction",syntax:["x","boolean(x)"],description:"Convert a string or number into a boolean.",examples:["boolean(0)","boolean(1)","boolean(3)",'boolean("true")','boolean("false")',"boolean([1, 0, 1, 1])"],seealso:["bignumber","complex","index","matrix","number","string","unit"]},mpe={name:"complex",category:"Construction",syntax:["complex()","complex(re, im)","complex(string)"],description:"Create a complex number.",examples:["complex()","complex(2, 3)",'complex("7 - 2i")'],seealso:["bignumber","boolean","index","matrix","number","string","unit"]},vpe={name:"createUnit",category:"Construction",syntax:["createUnit(definitions)","createUnit(name, definition)"],description:"Create a user-defined unit and register it with the Unit type.",examples:['createUnit("foo")','createUnit("knot", {definition: "0.514444444 m/s", aliases: ["knots", "kt", "kts"]})','createUnit("mph", "1 mile/hour")'],seealso:["unit","splitUnit"]},gpe={name:"fraction",category:"Construction",syntax:["fraction(num)","fraction(matrix)","fraction(num,den)","fraction({n: num, d: den})"],description:"Create a fraction from a number or from integer numerator and denominator.",examples:["fraction(0.125)","fraction(1, 3) + fraction(2, 5)","fraction({n: 333, d: 53})","fraction([sqrt(9), sqrt(10), sqrt(11)])"],seealso:["bignumber","boolean","complex","index","matrix","string","unit"]},ype={name:"index",category:"Construction",syntax:["[start]","[start:end]","[start:step:end]","[start1, start 2, ...]","[start1:end1, start2:end2, ...]","[start1:step1:end1, start2:step2:end2, ...]"],description:"Create an index to get or replace a subset of a matrix",examples:["A = [1, 2, 3; 4, 5, 6]","A[1, :]","A[1, 2] = 50","A[1:2, 1:2] = 1","B = [1, 2, 3]","B[B>1 and B<3]"],seealso:["bignumber","boolean","complex","matrix,","number","range","string","unit"]},bpe={name:"matrix",category:"Construction",syntax:["[]","[a1, b1, ...; a2, b2, ...]","matrix()",'matrix("dense")',"matrix([...])"],description:"Create a matrix.",examples:["[]","[1, 2, 3]","[1, 2, 3; 4, 5, 6]","matrix()","matrix([3, 4])",'matrix([3, 4; 5, 6], "sparse")','matrix([3, 4; 5, 6], "sparse", "number")'],seealso:["bignumber","boolean","complex","index","number","string","unit","sparse"]},xpe={name:"number",category:"Construction",syntax:["x","number(x)","number(unit, valuelessUnit)"],description:"Create a number or convert a string or boolean into a number.",examples:["2","2e3","4.05","number(2)",'number("7.2")',"number(true)","number([true, false, true, true])",'number(unit("52cm"), "m")'],seealso:["bignumber","boolean","complex","fraction","index","matrix","string","unit"]},wpe={name:"sparse",category:"Construction",syntax:["sparse()","sparse([a1, b1, ...; a1, b2, ...])",'sparse([a1, b1, ...; a1, b2, ...], "number")'],description:"Create a sparse matrix.",examples:["sparse()","sparse([3, 4; 5, 6])",'sparse([3, 0; 5, 0], "number")'],seealso:["bignumber","boolean","complex","index","number","string","unit","matrix"]},Spe={name:"splitUnit",category:"Construction",syntax:["splitUnit(unit: Unit, parts: Unit[])"],description:"Split a unit in an array of units whose sum is equal to the original unit.",examples:['splitUnit(1 m, ["feet", "inch"])'],seealso:["unit","createUnit"]},_pe={name:"string",category:"Construction",syntax:['"text"',"string(x)"],description:"Create a string or convert a value to a string",examples:['"Hello World!"',"string(4.2)","string(3 + 2i)"],seealso:["bignumber","boolean","complex","index","matrix","number","unit"]},Ape={name:"unit",category:"Construction",syntax:["value unit","unit(value, unit)","unit(string)"],description:"Create a unit.",examples:["5.5 mm","3 inch",'unit(7.1, "kilogram")','unit("23 deg")'],seealso:["bignumber","boolean","complex","index","matrix","number","string"]},Dpe={name:"config",category:"Core",syntax:["config()","config(options)"],description:"Get configuration or change configuration.",examples:["config()","1/3 + 1/4",'config({number: "Fraction"})',"1/3 + 1/4"],seealso:[]},Npe={name:"import",category:"Core",syntax:["import(functions)","import(functions, options)"],description:"Import functions or constants from an object.",examples:["import({myFn: f(x)=x^2, myConstant: 32 })","myFn(2)","myConstant"],seealso:[]},Epe={name:"typed",category:"Core",syntax:["typed(signatures)","typed(name, signatures)"],description:"Create a typed function.",examples:['double = typed({ "number": f(x)=x+x, "string": f(x)=concat(x,x) })',"double(2)",'double("hello")'],seealso:[]},Cpe={name:"derivative",category:"Algebra",syntax:["derivative(expr, variable)","derivative(expr, variable, {simplify: boolean})"],description:"Takes the derivative of an expression expressed in parser Nodes. The derivative will be taken over the supplied variable in the second parameter. If there are multiple variables in the expression, it will return a partial derivative.",examples:['derivative("2x^3", "x")','derivative("2x^3", "x", {simplify: false})','derivative("2x^2 + 3x + 4", "x")','derivative("sin(2x)", "x")','f = parse("x^2 + x")','x = parse("x")',"df = derivative(f, x)","df.evaluate({x: 3})"],seealso:["simplify","parse","evaluate"]},Mpe={name:"leafCount",category:"Algebra",syntax:["leafCount(expr)"],description:"Computes the number of leaves in the parse tree of the given expression",examples:['leafCount("e^(i*pi)-1")','leafCount(parse("{a: 22/7, b: 10^(1/2)}"))'],seealso:["simplify"]},Tpe={name:"lsolve",category:"Algebra",syntax:["x=lsolve(L, b)"],description:"Finds one solution of the linear system L * x = b where L is an [n x n] lower triangular matrix and b is a [n] column vector.",examples:["a = [-2, 3; 2, 1]","b = [11, 9]","x = lsolve(a, b)"],seealso:["lsolveAll","lup","lusolve","usolve","matrix","sparse"]},Ope={name:"lsolveAll",category:"Algebra",syntax:["x=lsolveAll(L, b)"],description:"Finds all solutions of the linear system L * x = b where L is an [n x n] lower triangular matrix and b is a [n] column vector.",examples:["a = [-2, 3; 2, 1]","b = [11, 9]","x = lsolve(a, b)"],seealso:["lsolve","lup","lusolve","usolve","matrix","sparse"]},Fpe={name:"lup",category:"Algebra",syntax:["lup(m)"],description:"Calculate the Matrix LU decomposition with partial pivoting. Matrix A is decomposed in three matrices (L, U, P) where P * A = L * U",examples:["lup([[2, 1], [1, 4]])","lup(matrix([[2, 1], [1, 4]]))","lup(sparse([[2, 1], [1, 4]]))"],seealso:["lusolve","lsolve","usolve","matrix","sparse","slu","qr"]},Ppe={name:"lusolve",category:"Algebra",syntax:["x=lusolve(A, b)","x=lusolve(lu, b)"],description:"Solves the linear system A * x = b where A is an [n x n] matrix and b is a [n] column vector.",examples:["a = [-2, 3; 2, 1]","b = [11, 9]","x = lusolve(a, b)"],seealso:["lup","slu","lsolve","usolve","matrix","sparse"]},Rpe={name:"polynomialRoot",category:"Algebra",syntax:["x=polynomialRoot(-6, 3)","x=polynomialRoot(4, -4, 1)","x=polynomialRoot(-8, 12, -6, 1)"],description:"Finds the roots of a univariate polynomial given by its coefficients starting from constant, linear, and so on, increasing in degree.",examples:["a = polynomialRoot(-6, 11, -6, 1)"],seealso:["cbrt","sqrt"]},Ipe={name:"qr",category:"Algebra",syntax:["qr(A)"],description:"Calculates the Matrix QR decomposition. Matrix `A` is decomposed in two matrices (`Q`, `R`) where `Q` is an orthogonal matrix and `R` is an upper triangular matrix.",examples:["qr([[1, -1, 4], [1, 4, -2], [1, 4, 2], [1, -1, 0]])"],seealso:["lup","slu","matrix"]},Bpe={name:"rationalize",category:"Algebra",syntax:["rationalize(expr)","rationalize(expr, scope)","rationalize(expr, scope, detailed)"],description:"Transform a rationalizable expression in a rational fraction. If rational fraction is one variable polynomial then converts the numerator and denominator in canonical form, with decreasing exponents, returning the coefficients of numerator.",examples:['rationalize("2x/y - y/(x+1)")','rationalize("2x/y - y/(x+1)", true)'],seealso:["simplify"]},kpe={name:"resolve",category:"Algebra",syntax:["resolve(node, scope)"],description:"Recursively substitute variables in an expression tree.",examples:['resolve(parse("1 + x"), { x: 7 })','resolve(parse("size(text)"), { text: "Hello World" })','resolve(parse("x + y"), { x: parse("3z") })','resolve(parse("3x"), { x: parse("y+z"), z: parse("w^y") })'],seealso:["simplify","evaluate"],mayThrow:["ReferenceError"]},Lpe={name:"simplify",category:"Algebra",syntax:["simplify(expr)","simplify(expr, rules)"],description:"Simplify an expression tree.",examples:['simplify("3 + 2 / 4")','simplify("2x + x")','f = parse("x * (x + 2 + x)")',"simplified = simplify(f)","simplified.evaluate({x: 2})"],seealso:["simplifyCore","derivative","evaluate","parse","rationalize","resolve"]},$pe={name:"simplifyConstant",category:"Algebra",syntax:["simplifyConstant(expr)","simplifyConstant(expr, options)"],description:"Replace constant subexpressions of node with their values.",examples:['simplifyConstant("(3-3)*x")','simplifyConstant(parse("z-cos(tau/8)"))'],seealso:["simplify","simplifyCore","evaluate"]},zpe={name:"simplifyCore",category:"Algebra",syntax:["simplifyCore(node)"],description:"Perform simple one-pass simplifications on an expression tree.",examples:['simplifyCore(parse("0*x"))','simplifyCore(parse("(x+0)*2"))'],seealso:["simplify","simplifyConstant","evaluate"]},qpe={name:"slu",category:"Algebra",syntax:["slu(A, order, threshold)"],description:"Calculate the Matrix LU decomposition with full pivoting. Matrix A is decomposed in two matrices (L, U) and two permutation vectors (pinv, q) where P * A * Q = L * U",examples:["slu(sparse([4.5, 0, 3.2, 0; 3.1, 2.9, 0, 0.9; 0, 1.7, 3, 0; 3.5, 0.4, 0, 1]), 1, 0.001)"],seealso:["lusolve","lsolve","usolve","matrix","sparse","lup","qr"]},Upe={name:"symbolicEqual",category:"Algebra",syntax:["symbolicEqual(expr1, expr2)","symbolicEqual(expr1, expr2, options)"],description:"Returns true if the difference of the expressions simplifies to 0",examples:['symbolicEqual("x*y","y*x")','symbolicEqual("abs(x^2)", "x^2")','symbolicEqual("abs(x)", "x", {context: {abs: {trivial: true}}})'],seealso:["simplify","evaluate"]},Hpe={name:"usolve",category:"Algebra",syntax:["x=usolve(U, b)"],description:"Finds one solution of the linear system U * x = b where U is an [n x n] upper triangular matrix and b is a [n] column vector.",examples:["x=usolve(sparse([1, 1, 1, 1; 0, 1, 1, 1; 0, 0, 1, 1; 0, 0, 0, 1]), [1; 2; 3; 4])"],seealso:["usolveAll","lup","lusolve","lsolve","matrix","sparse"]},Wpe={name:"usolveAll",category:"Algebra",syntax:["x=usolve(U, b)"],description:"Finds all solutions of the linear system U * x = b where U is an [n x n] upper triangular matrix and b is a [n] column vector.",examples:["x=usolve(sparse([1, 1, 1, 1; 0, 1, 1, 1; 0, 0, 1, 1; 0, 0, 0, 1]), [1; 2; 3; 4])"],seealso:["usolve","lup","lusolve","lsolve","matrix","sparse"]},Vpe={name:"abs",category:"Arithmetic",syntax:["abs(x)"],description:"Compute the absolute value.",examples:["abs(3.5)","abs(-4.2)"],seealso:["sign"]},Ype={name:"add",category:"Operators",syntax:["x + y","add(x, y)"],description:"Add two values.",examples:["a = 2.1 + 3.6","a - 3.6","3 + 2i","3 cm + 2 inch",'"2.3" + "4"'],seealso:["subtract"]},jpe={name:"cbrt",category:"Arithmetic",syntax:["cbrt(x)","cbrt(x, allRoots)"],description:"Compute the cubic root value. If x = y * y * y, then y is the cubic root of x. When `x` is a number or complex number, an optional second argument `allRoots` can be provided to return all three cubic roots. If not provided, the principal root is returned",examples:["cbrt(64)","cube(4)","cbrt(-8)","cbrt(2 + 3i)","cbrt(8i)","cbrt(8i, true)","cbrt(27 m^3)"],seealso:["square","sqrt","cube","multiply"]},Gpe={name:"ceil",category:"Arithmetic",syntax:["ceil(x)"],description:"Round a value towards plus infinity. If x is complex, both real and imaginary part are rounded towards plus infinity.",examples:["ceil(3.2)","ceil(3.8)","ceil(-4.2)"],seealso:["floor","fix","round"]},Xpe={name:"cube",category:"Arithmetic",syntax:["cube(x)"],description:"Compute the cube of a value. The cube of x is x * x * x.",examples:["cube(2)","2^3","2 * 2 * 2"],seealso:["multiply","square","pow"]},Zpe={name:"divide",category:"Operators",syntax:["x / y","divide(x, y)"],description:"Divide two values.",examples:["a = 2 / 3","a * 3","4.5 / 2","3 + 4 / 2","(3 + 4) / 2","18 km / 4.5"],seealso:["multiply"]},Kpe={name:"dotDivide",category:"Operators",syntax:["x ./ y","dotDivide(x, y)"],description:"Divide two values element wise.",examples:["a = [1, 2, 3; 4, 5, 6]","b = [2, 1, 1; 3, 2, 5]","a ./ b"],seealso:["multiply","dotMultiply","divide"]},Jpe={name:"dotMultiply",category:"Operators",syntax:["x .* y","dotMultiply(x, y)"],description:"Multiply two values element wise.",examples:["a = [1, 2, 3; 4, 5, 6]","b = [2, 1, 1; 3, 2, 5]","a .* b"],seealso:["multiply","divide","dotDivide"]},Qpe={name:"dotPow",category:"Operators",syntax:["x .^ y","dotPow(x, y)"],description:"Calculates the power of x to y element wise.",examples:["a = [1, 2, 3; 4, 5, 6]","a .^ 2"],seealso:["pow"]},eme={name:"exp",category:"Arithmetic",syntax:["exp(x)"],description:"Calculate the exponent of a value.",examples:["exp(1.3)","e ^ 1.3","log(exp(1.3))","x = 2.4","(exp(i*x) == cos(x) + i*sin(x)) # Euler's formula"],seealso:["expm","expm1","pow","log"]},tme={name:"expm",category:"Arithmetic",syntax:["exp(x)"],description:"Compute the matrix exponential, expm(A) = e^A. The matrix must be square. Not to be confused with exp(a), which performs element-wise exponentiation.",examples:["expm([[0,2],[0,0]])"],seealso:["exp"]},rme={name:"expm1",category:"Arithmetic",syntax:["expm1(x)"],description:"Calculate the value of subtracting 1 from the exponential value.",examples:["expm1(2)","pow(e, 2) - 1","log(expm1(2) + 1)"],seealso:["exp","pow","log"]},nme={name:"fix",category:"Arithmetic",syntax:["fix(x)"],description:"Round a value towards zero. If x is complex, both real and imaginary part are rounded towards zero.",examples:["fix(3.2)","fix(3.8)","fix(-4.2)","fix(-4.8)"],seealso:["ceil","floor","round"]},ime={name:"floor",category:"Arithmetic",syntax:["floor(x)"],description:"Round a value towards minus infinity.If x is complex, both real and imaginary part are rounded towards minus infinity.",examples:["floor(3.2)","floor(3.8)","floor(-4.2)"],seealso:["ceil","fix","round"]},ame={name:"gcd",category:"Arithmetic",syntax:["gcd(a, b)","gcd(a, b, c, ...)"],description:"Compute the greatest common divisor.",examples:["gcd(8, 12)","gcd(-4, 6)","gcd(25, 15, -10)"],seealso:["lcm","xgcd"]},sme={name:"hypot",category:"Arithmetic",syntax:["hypot(a, b, c, ...)","hypot([a, b, c, ...])"],description:"Calculate the hypotenusa of a list with values. ",examples:["hypot(3, 4)","sqrt(3^2 + 4^2)","hypot(-2)","hypot([3, 4, 5])"],seealso:["abs","norm"]},ome={name:"invmod",category:"Arithmetic",syntax:["invmod(a, b)"],description:"Calculate the (modular) multiplicative inverse of a modulo b. Solution to the equation ax ≣ 1 (mod b)",examples:["invmod(8, 12)","invmod(7, 13)","invmod(15151, 15122)"],seealso:["gcd","xgcd"]},ume={name:"lcm",category:"Arithmetic",syntax:["lcm(x, y)"],description:"Compute the least common multiple.",examples:["lcm(4, 6)","lcm(6, 21)","lcm(6, 21, 5)"],seealso:["gcd"]},lme={name:"log",category:"Arithmetic",syntax:["log(x)","log(x, base)"],description:"Compute the logarithm of a value. If no base is provided, the natural logarithm of x is calculated. If base if provided, the logarithm is calculated for the specified base. log(x, base) is defined as log(x) / log(base).",examples:["log(3.5)","a = log(2.4)","exp(a)","10 ^ 4","log(10000, 10)","log(10000) / log(10)","b = log(1024, 2)","2 ^ b"],seealso:["exp","log1p","log2","log10"]},cme={name:"log10",category:"Arithmetic",syntax:["log10(x)"],description:"Compute the 10-base logarithm of a value.",examples:["log10(0.00001)","log10(10000)","10 ^ 4","log(10000) / log(10)","log(10000, 10)"],seealso:["exp","log"]},fme={name:"log1p",category:"Arithmetic",syntax:["log1p(x)","log1p(x, base)"],description:"Calculate the logarithm of a `value+1`",examples:["log1p(2.5)","exp(log1p(1.4))","pow(10, 4)","log1p(9999, 10)","log1p(9999) / log(10)"],seealso:["exp","log","log2","log10"]},hme={name:"log2",category:"Arithmetic",syntax:["log2(x)"],description:"Calculate the 2-base of a value. This is the same as calculating `log(x, 2)`.",examples:["log2(0.03125)","log2(16)","log2(16) / log2(2)","pow(2, 4)"],seealso:["exp","log1p","log","log10"]},dme={name:"mod",category:"Operators",syntax:["x % y","x mod y","mod(x, y)"],description:"Calculates the modulus, the remainder of an integer division.",examples:["7 % 3","11 % 2","10 mod 4","isOdd(x) = x % 2","isOdd(2)","isOdd(3)"],seealso:["divide"]},pme={name:"multiply",category:"Operators",syntax:["x * y","multiply(x, y)"],description:"multiply two values.",examples:["a = 2.1 * 3.4","a / 3.4","2 * 3 + 4","2 * (3 + 4)","3 * 2.1 km"],seealso:["divide"]},mme={name:"norm",category:"Arithmetic",syntax:["norm(x)","norm(x, p)"],description:"Calculate the norm of a number, vector or matrix.",examples:["abs(-3.5)","norm(-3.5)","norm(3 - 4i)","norm([1, 2, -3], Infinity)","norm([1, 2, -3], -Infinity)","norm([3, 4], 2)","norm([[1, 2], [3, 4]], 1)",'norm([[1, 2], [3, 4]], "inf")','norm([[1, 2], [3, 4]], "fro")']},vme={name:"nthRoot",category:"Arithmetic",syntax:["nthRoot(a)","nthRoot(a, root)"],description:'Calculate the nth root of a value. The principal nth root of a positive real number A, is the positive real solution of the equation "x^root = A".',examples:["4 ^ 3","nthRoot(64, 3)","nthRoot(9, 2)","sqrt(9)"],seealso:["nthRoots","pow","sqrt"]},gme={name:"nthRoots",category:"Arithmetic",syntax:["nthRoots(A)","nthRoots(A, root)"],description:'Calculate the nth roots of a value. An nth root of a positive real number A, is a positive real solution of the equation "x^root = A". This function returns an array of complex values.',examples:["nthRoots(1)","nthRoots(1, 3)"],seealso:["sqrt","pow","nthRoot"]},yme={name:"pow",category:"Operators",syntax:["x ^ y","pow(x, y)"],description:"Calculates the power of x to y, x^y.",examples:["2^3","2*2*2","1 + e ^ (pi * i)","pow([[1, 2], [4, 3]], 2)","pow([[1, 2], [4, 3]], -1)"],seealso:["multiply","nthRoot","nthRoots","sqrt"]},bme={name:"round",category:"Arithmetic",syntax:["round(x)","round(x, n)","round(unit, valuelessUnit)","round(unit, n, valuelessUnit)"],description:"round a value towards the nearest integer.If x is complex, both real and imaginary part are rounded towards the nearest integer. When n is specified, the value is rounded to n decimals.",examples:["round(3.2)","round(3.8)","round(-4.2)","round(-4.8)","round(pi, 3)","round(123.45678, 2)","round(3.241cm, 2, cm)","round([3.2, 3.8, -4.7])"],seealso:["ceil","floor","fix"]},xme={name:"sign",category:"Arithmetic",syntax:["sign(x)"],description:"Compute the sign of a value. The sign of a value x is 1 when x>1, -1 when x<0, and 0 when x=0.",examples:["sign(3.5)","sign(-4.2)","sign(0)"],seealso:["abs"]},wme={name:"sqrt",category:"Arithmetic",syntax:["sqrt(x)"],description:"Compute the square root value. If x = y * y, then y is the square root of x.",examples:["sqrt(25)","5 * 5","sqrt(-1)"],seealso:["square","sqrtm","multiply","nthRoot","nthRoots","pow"]},Sme={name:"sqrtm",category:"Arithmetic",syntax:["sqrtm(x)"],description:"Calculate the principal square root of a square matrix. The principal square root matrix `X` of another matrix `A` is such that `X * X = A`.",examples:["sqrtm([[33, 24], [48, 57]])"],seealso:["sqrt","abs","square","multiply"]},_me={name:"sylvester",category:"Algebra",syntax:["sylvester(A,B,C)"],description:"Solves the real-valued Sylvester equation AX+XB=C for X",examples:["sylvester([[-1, -2], [1, 1]], [[-2, 1], [-1, 2]], [[-3, 2], [3, 0]])","A = [[-1, -2], [1, 1]]; B = [[2, -1], [1, -2]]; C = [[-3, 2], [3, 0]]","sylvester(A, B, C)"],seealso:["schur","lyap"]},Ame={name:"schur",category:"Algebra",syntax:["schur(A)"],description:"Performs a real Schur decomposition of the real matrix A = UTU'",examples:["schur([[1, 0], [-4, 3]])","A = [[1, 0], [-4, 3]]","schur(A)"],seealso:["lyap","sylvester"]},Dme={name:"lyap",category:"Algebra",syntax:["lyap(A,Q)"],description:"Solves the Continuous-time Lyapunov equation AP+PA'+Q=0 for P",examples:["lyap([[-2, 0], [1, -4]], [[3, 1], [1, 3]])","A = [[-2, 0], [1, -4]]","Q = [[3, 1], [1, 3]]","lyap(A,Q)"],seealso:["schur","sylvester"]},Nme={name:"square",category:"Arithmetic",syntax:["square(x)"],description:"Compute the square of a value. The square of x is x * x.",examples:["square(3)","sqrt(9)","3^2","3 * 3"],seealso:["multiply","pow","sqrt","cube"]},Eme={name:"subtract",category:"Operators",syntax:["x - y","subtract(x, y)"],description:"subtract two values.",examples:["a = 5.3 - 2","a + 2","2/3 - 1/6","2 * 3 - 3","2.1 km - 500m"],seealso:["add"]},Cme={name:"unaryMinus",category:"Operators",syntax:["-x","unaryMinus(x)"],description:"Inverse the sign of a value. Converts booleans and strings to numbers.",examples:["-4.5","-(-5.6)",'-"22"'],seealso:["add","subtract","unaryPlus"]},Mme={name:"unaryPlus",category:"Operators",syntax:["+x","unaryPlus(x)"],description:"Converts booleans and strings to numbers.",examples:["+true",'+"2"'],seealso:["add","subtract","unaryMinus"]},Tme={name:"xgcd",category:"Arithmetic",syntax:["xgcd(a, b)"],description:"Calculate the extended greatest common divisor for two values. The result is an array [d, x, y] with 3 entries, where d is the greatest common divisor, and d = x * a + y * b.",examples:["xgcd(8, 12)","gcd(8, 12)","xgcd(36163, 21199)"],seealso:["gcd","lcm"]},Ome={name:"bitAnd",category:"Bitwise",syntax:["x & y","bitAnd(x, y)"],description:"Bitwise AND operation. Performs the logical AND operation on each pair of the corresponding bits of the two given values by multiplying them. If both bits in the compared position are 1, the bit in the resulting binary representation is 1, otherwise, the result is 0",examples:["5 & 3","bitAnd(53, 131)","[1, 12, 31] & 42"],seealso:["bitNot","bitOr","bitXor","leftShift","rightArithShift","rightLogShift"]},Fme={name:"bitNot",category:"Bitwise",syntax:["~x","bitNot(x)"],description:"Bitwise NOT operation. Performs a logical negation on each bit of the given value. Bits that are 0 become 1, and those that are 1 become 0.",examples:["~1","~2","bitNot([2, -3, 4])"],seealso:["bitAnd","bitOr","bitXor","leftShift","rightArithShift","rightLogShift"]},Pme={name:"bitOr",category:"Bitwise",syntax:["x | y","bitOr(x, y)"],description:"Bitwise OR operation. Performs the logical inclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if the first bit is 1 or the second bit is 1 or both bits are 1, otherwise, the result is 0.",examples:["5 | 3","bitOr([1, 2, 3], 4)"],seealso:["bitAnd","bitNot","bitXor","leftShift","rightArithShift","rightLogShift"]},Rme={name:"bitXor",category:"Bitwise",syntax:["bitXor(x, y)"],description:"Bitwise XOR operation, exclusive OR. Performs the logical exclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if only the first bit is 1 or only the second bit is 1, but will be 0 if both are 0 or both are 1.",examples:["bitOr(1, 2)","bitXor([2, 3, 4], 4)"],seealso:["bitAnd","bitNot","bitOr","leftShift","rightArithShift","rightLogShift"]},Ime={name:"leftShift",category:"Bitwise",syntax:["x << y","leftShift(x, y)"],description:"Bitwise left logical shift of a value x by y number of bits.",examples:["4 << 1","8 >> 1"],seealso:["bitAnd","bitNot","bitOr","bitXor","rightArithShift","rightLogShift"]},Bme={name:"rightArithShift",category:"Bitwise",syntax:["x >> y","rightArithShift(x, y)"],description:"Bitwise right arithmetic shift of a value x by y number of bits.",examples:["8 >> 1","4 << 1","-12 >> 2"],seealso:["bitAnd","bitNot","bitOr","bitXor","leftShift","rightLogShift"]},kme={name:"rightLogShift",category:"Bitwise",syntax:["x >>> y","rightLogShift(x, y)"],description:"Bitwise right logical shift of a value x by y number of bits.",examples:["8 >>> 1","4 << 1","-12 >>> 2"],seealso:["bitAnd","bitNot","bitOr","bitXor","leftShift","rightArithShift"]},Lme={name:"bellNumbers",category:"Combinatorics",syntax:["bellNumbers(n)"],description:"The Bell Numbers count the number of partitions of a set. A partition is a pairwise disjoint subset of S whose union is S. `bellNumbers` only takes integer arguments. The following condition must be enforced: n >= 0.",examples:["bellNumbers(3)","bellNumbers(8)"],seealso:["stirlingS2"]},$me={name:"catalan",category:"Combinatorics",syntax:["catalan(n)"],description:"The Catalan Numbers enumerate combinatorial structures of many different types. catalan only takes integer arguments. The following condition must be enforced: n >= 0.",examples:["catalan(3)","catalan(8)"],seealso:["bellNumbers"]},zme={name:"composition",category:"Combinatorics",syntax:["composition(n, k)"],description:"The composition counts of n into k parts. composition only takes integer arguments. The following condition must be enforced: k <= n.",examples:["composition(5, 3)"],seealso:["combinations"]},qme={name:"stirlingS2",category:"Combinatorics",syntax:["stirlingS2(n, k)"],description:"he Stirling numbers of the second kind, counts the number of ways to partition a set of n labelled objects into k nonempty unlabelled subsets. `stirlingS2` only takes integer arguments. The following condition must be enforced: k <= n. If n = k or k = 1, then s(n,k) = 1.",examples:["stirlingS2(5, 3)"],seealso:["bellNumbers"]},Ume={name:"arg",category:"Complex",syntax:["arg(x)"],description:"Compute the argument of a complex value. If x = a+bi, the argument is computed as atan2(b, a).",examples:["arg(2 + 2i)","atan2(3, 2)","arg(2 + 3i)"],seealso:["re","im","conj","abs"]},Hme={name:"conj",category:"Complex",syntax:["conj(x)"],description:"Compute the complex conjugate of a complex value. If x = a+bi, the complex conjugate is a-bi.",examples:["conj(2 + 3i)","conj(2 - 3i)","conj(-5.2i)"],seealso:["re","im","abs","arg"]},Wme={name:"im",category:"Complex",syntax:["im(x)"],description:"Get the imaginary part of a complex number.",examples:["im(2 + 3i)","re(2 + 3i)","im(-5.2i)","im(2.4)"],seealso:["re","conj","abs","arg"]},Vme={name:"re",category:"Complex",syntax:["re(x)"],description:"Get the real part of a complex number.",examples:["re(2 + 3i)","im(2 + 3i)","re(-5.2i)","re(2.4)"],seealso:["im","conj","abs","arg"]},Yme={name:"evaluate",category:"Expression",syntax:["evaluate(expression)","evaluate(expression, scope)","evaluate([expr1, expr2, expr3, ...])","evaluate([expr1, expr2, expr3, ...], scope)"],description:"Evaluate an expression or an array with expressions.",examples:['evaluate("2 + 3")','evaluate("sqrt(16)")','evaluate("2 inch to cm")','evaluate("sin(x * pi)", { "x": 1/2 })','evaluate(["width=2", "height=4","width*height"])'],seealso:[]},jme={name:"help",category:"Expression",syntax:["help(object)","help(string)"],description:"Display documentation on a function or data type.",examples:["help(sqrt)",'help("complex")'],seealso:[]},Gme={name:"distance",category:"Geometry",syntax:["distance([x1, y1], [x2, y2])","distance([[x1, y1], [x2, y2]])"],description:"Calculates the Euclidean distance between two points.",examples:["distance([0,0], [4,4])","distance([[0,0], [4,4]])"],seealso:[]},Xme={name:"intersect",category:"Geometry",syntax:["intersect(expr1, expr2, expr3, expr4)","intersect(expr1, expr2, expr3)"],description:"Computes the intersection point of lines and/or planes.",examples:["intersect([0, 0], [10, 10], [10, 0], [0, 10])","intersect([1, 0, 1], [4, -2, 2], [1, 1, 1, 6])"],seealso:[]},Zme={name:"and",category:"Logical",syntax:["x and y","and(x, y)"],description:"Logical and. Test whether two values are both defined with a nonzero/nonempty value.",examples:["true and false","true and true","2 and 4"],seealso:["not","or","xor"]},Kme={name:"not",category:"Logical",syntax:["not x","not(x)"],description:"Logical not. Flips the boolean value of given argument.",examples:["not true","not false","not 2","not 0"],seealso:["and","or","xor"]},Jme={name:"or",category:"Logical",syntax:["x or y","or(x, y)"],description:"Logical or. Test if at least one value is defined with a nonzero/nonempty value.",examples:["true or false","false or false","0 or 4"],seealso:["not","and","xor"]},Qme={name:"xor",category:"Logical",syntax:["x xor y","xor(x, y)"],description:"Logical exclusive or, xor. Test whether one and only one value is defined with a nonzero/nonempty value.",examples:["true xor false","false xor false","true xor true","0 xor 4"],seealso:["not","and","or"]},eve={name:"column",category:"Matrix",syntax:["column(x, index)"],description:"Return a column from a matrix or array.",examples:["A = [[1, 2], [3, 4]]","column(A, 1)","column(A, 2)"],seealso:["row","matrixFromColumns"]},tve={name:"concat",category:"Matrix",syntax:["concat(A, B, C, ...)","concat(A, B, C, ..., dim)"],description:"Concatenate matrices. By default, the matrices are concatenated by the last dimension. The dimension on which to concatenate can be provided as last argument.",examples:["A = [1, 2; 5, 6]","B = [3, 4; 7, 8]","concat(A, B)","concat(A, B, 1)","concat(A, B, 2)"],seealso:["det","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]},rve={name:"count",category:"Matrix",syntax:["count(x)"],description:"Count the number of elements of a matrix, array or string.",examples:["a = [1, 2; 3, 4; 5, 6]","count(a)","size(a)",'count("hello world")'],seealso:["size"]},nve={name:"cross",category:"Matrix",syntax:["cross(A, B)"],description:"Calculate the cross product for two vectors in three dimensional space.",examples:["cross([1, 1, 0], [0, 1, 1])","cross([3, -3, 1], [4, 9, 2])","cross([2, 3, 4], [5, 6, 7])"],seealso:["multiply","dot"]},ive={name:"ctranspose",category:"Matrix",syntax:["x'","ctranspose(x)"],description:"Complex Conjugate and Transpose a matrix",examples:["a = [1, 2, 3; 4, 5, 6]","a'","ctranspose(a)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","zeros"]},ave={name:"det",category:"Matrix",syntax:["det(x)"],description:"Calculate the determinant of a matrix",examples:["det([1, 2; 3, 4])","det([-2, 2, 3; -1, 1, 3; 2, 0, -1])"],seealso:["concat","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]},sve={name:"diag",category:"Matrix",syntax:["diag(x)","diag(x, k)"],description:"Create a diagonal matrix or retrieve the diagonal of a matrix. When x is a vector, a matrix with the vector values on the diagonal will be returned. When x is a matrix, a vector with the diagonal values of the matrix is returned. When k is provided, the k-th diagonal will be filled in or retrieved, if k is positive, the values are placed on the super diagonal. When k is negative, the values are placed on the sub diagonal.",examples:["diag(1:3)","diag(1:3, 1)","a = [1, 2, 3; 4, 5, 6; 7, 8, 9]","diag(a)"],seealso:["concat","det","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]},ove={name:"diff",category:"Matrix",syntax:["diff(arr)","diff(arr, dim)"],description:["Create a new matrix or array with the difference of the passed matrix or array.","Dim parameter is optional and used to indicant the dimension of the array/matrix to apply the difference","If no dimension parameter is passed it is assumed as dimension 0","Dimension is zero-based in javascript and one-based in the parser","Arrays must be 'rectangular' meaning arrays like [1, 2]","If something is passed as a matrix it will be returned as a matrix but other than that all matrices are converted to arrays"],examples:["A = [1, 2, 4, 7, 0]","diff(A)","diff(A, 1)","B = [[1, 2], [3, 4]]","diff(B)","diff(B, 1)","diff(B, 2)","diff(B, bignumber(2))","diff([[1, 2], matrix([3, 4])], 2)"],seealso:["subtract","partitionSelect"]},uve={name:"dot",category:"Matrix",syntax:["dot(A, B)","A * B"],description:"Calculate the dot product of two vectors. The dot product of A = [a1, a2, a3, ..., an] and B = [b1, b2, b3, ..., bn] is defined as dot(A, B) = a1 * b1 + a2 * b2 + a3 * b3 + ... + an * bn",examples:["dot([2, 4, 1], [2, 2, 3])","[2, 4, 1] * [2, 2, 3]"],seealso:["multiply","cross"]},lve={name:"eigs",category:"Matrix",syntax:["eigs(x)"],description:"Calculate the eigenvalues and optionally eigenvectors of a square matrix",examples:["eigs([[5, 2.3], [2.3, 1]])","eigs([[1, 2, 3], [4, 5, 6], [7, 8, 9]], { precision: 1e-6, eigenvectors: false })"],seealso:["inv"]},cve={name:"filter",category:"Matrix",syntax:["filter(x, test)"],description:"Filter items in a matrix.",examples:["isPositive(x) = x > 0","filter([6, -2, -1, 4, 3], isPositive)","filter([6, -2, 0, 1, 0], x != 0)"],seealso:["sort","map","forEach"]},fve={name:"flatten",category:"Matrix",syntax:["flatten(x)"],description:"Flatten a multi dimensional matrix into a single dimensional matrix.",examples:["a = [1, 2, 3; 4, 5, 6]","size(a)","b = flatten(a)","size(b)"],seealso:["concat","resize","size","squeeze"]},hve={name:"forEach",category:"Matrix",syntax:["forEach(x, callback)"],description:"Iterates over all elements of a matrix/array, and executes the given callback function.",examples:["numberOfPets = {}","addPet(n) = numberOfPets[n] = (numberOfPets[n] ? numberOfPets[n]:0 ) + 1;",'forEach(["Dog","Cat","Cat"], addPet)',"numberOfPets"],seealso:["map","sort","filter"]},dve={name:"getMatrixDataType",category:"Matrix",syntax:["getMatrixDataType(x)"],description:'Find the data type of all elements in a matrix or array, for example "number" if all items are a number and "Complex" if all values are complex numbers. If a matrix contains more than one data type, it will return "mixed".',examples:["getMatrixDataType([1, 2, 3])","getMatrixDataType([[5 cm], [2 inch]])",'getMatrixDataType([1, "text"])',"getMatrixDataType([1, bignumber(4)])"],seealso:["matrix","sparse","typeOf"]},pve={name:"identity",category:"Matrix",syntax:["identity(n)","identity(m, n)","identity([m, n])"],description:"Returns the identity matrix with size m-by-n. The matrix has ones on the diagonal and zeros elsewhere.",examples:["identity(3)","identity(3, 5)","a = [1, 2, 3; 4, 5, 6]","identity(size(a))"],seealso:["concat","det","diag","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]},mve={name:"inv",category:"Matrix",syntax:["inv(x)"],description:"Calculate the inverse of a matrix",examples:["inv([1, 2; 3, 4])","inv(4)","1 / 4"],seealso:["concat","det","diag","identity","ones","range","size","squeeze","subset","trace","transpose","zeros"]},vve={name:"pinv",category:"Matrix",syntax:["pinv(x)"],description:"Calculate the Moore–Penrose inverse of a matrix",examples:["pinv([1, 2; 3, 4])","pinv([[1, 0], [0, 1], [0, 1]])","pinv(4)"],seealso:["inv"]},gve={name:"kron",category:"Matrix",syntax:["kron(x, y)"],description:"Calculates the kronecker product of 2 matrices or vectors.",examples:["kron([[1, 0], [0, 1]], [[1, 2], [3, 4]])","kron([1,1], [2,3,4])"],seealso:["multiply","dot","cross"]},yve={name:"map",category:"Matrix",syntax:["map(x, callback)"],description:"Create a new matrix or array with the results of the callback function executed on each entry of the matrix/array.",examples:["map([1, 2, 3], square)"],seealso:["filter","forEach"]},bve={name:"matrixFromColumns",category:"Matrix",syntax:["matrixFromColumns(...arr)","matrixFromColumns(row1, row2)","matrixFromColumns(row1, row2, row3)"],description:"Create a dense matrix from vectors as individual columns.",examples:["matrixFromColumns([1, 2, 3], [[4],[5],[6]])"],seealso:["matrix","matrixFromRows","matrixFromFunction","zeros"]},xve={name:"matrixFromFunction",category:"Matrix",syntax:["matrixFromFunction(size, fn)","matrixFromFunction(size, fn, format)","matrixFromFunction(size, fn, format, datatype)","matrixFromFunction(size, format, fn)","matrixFromFunction(size, format, datatype, fn)"],description:"Create a matrix by evaluating a generating function at each index.",examples:["f(I) = I[1] - I[2]","matrixFromFunction([3,3], f)","g(I) = I[1] - I[2] == 1 ? 4 : 0",'matrixFromFunction([100, 100], "sparse", g)',"matrixFromFunction([5], random)"],seealso:["matrix","matrixFromRows","matrixFromColumns","zeros"]},wve={name:"matrixFromRows",category:"Matrix",syntax:["matrixFromRows(...arr)","matrixFromRows(row1, row2)","matrixFromRows(row1, row2, row3)"],description:"Create a dense matrix from vectors as individual rows.",examples:["matrixFromRows([1, 2, 3], [[4],[5],[6]])"],seealso:["matrix","matrixFromColumns","matrixFromFunction","zeros"]},Sve={name:"ones",category:"Matrix",syntax:["ones(m)","ones(m, n)","ones(m, n, p, ...)","ones([m])","ones([m, n])","ones([m, n, p, ...])"],description:"Create a matrix containing ones.",examples:["ones(3)","ones(3, 5)","ones([2,3]) * 4.5","a = [1, 2, 3; 4, 5, 6]","ones(size(a))"],seealso:["concat","det","diag","identity","inv","range","size","squeeze","subset","trace","transpose","zeros"]},_ve={name:"partitionSelect",category:"Matrix",syntax:["partitionSelect(x, k)","partitionSelect(x, k, compare)"],description:"Partition-based selection of an array or 1D matrix. Will find the kth smallest value, and mutates the input array. Uses Quickselect.",examples:["partitionSelect([5, 10, 1], 2)",'partitionSelect(["C", "B", "A", "D"], 1, compareText)',"arr = [5, 2, 1]","partitionSelect(arr, 0) # returns 1, arr is now: [1, 2, 5]","arr","partitionSelect(arr, 1, 'desc') # returns 2, arr is now: [5, 2, 1]","arr"],seealso:["sort"]},Ave={name:"range",category:"Type",syntax:["start:end","start:step:end","range(start, end)","range(start, end, step)","range(string)"],description:"Create a range. Lower bound of the range is included, upper bound is excluded.",examples:["1:5","3:-1:-3","range(3, 7)","range(0, 12, 2)",'range("4:10")',"range(1m, 1m, 3m)","a = [1, 2, 3, 4; 5, 6, 7, 8]","a[1:2, 1:2]"],seealso:["concat","det","diag","identity","inv","ones","size","squeeze","subset","trace","transpose","zeros"]},Dve={name:"reshape",category:"Matrix",syntax:["reshape(x, sizes)"],description:"Reshape a multi dimensional array to fit the specified dimensions.",examples:["reshape([1, 2, 3, 4, 5, 6], [2, 3])","reshape([[1, 2], [3, 4]], [1, 4])","reshape([[1, 2], [3, 4]], [4])","reshape([1, 2, 3, 4], [-1, 2])"],seealso:["size","squeeze","resize"]},Nve={name:"resize",category:"Matrix",syntax:["resize(x, size)","resize(x, size, defaultValue)"],description:"Resize a matrix.",examples:["resize([1,2,3,4,5], [3])","resize([1,2,3], [5])","resize([1,2,3], [5], -1)","resize(2, [2, 3])",'resize("hello", [8], "!")'],seealso:["size","subset","squeeze","reshape"]},Eve={name:"rotate",category:"Matrix",syntax:["rotate(w, theta)","rotate(w, theta, v)"],description:"Returns a 2-D rotation matrix (2x2) for a given angle (in radians). Returns a 2-D rotation matrix (3x3) of a given angle (in radians) around given axis.",examples:["rotate([1, 0], pi / 2)",'rotate(matrix([1, 0]), unit("35deg"))','rotate([1, 0, 0], unit("90deg"), [0, 0, 1])','rotate(matrix([1, 0, 0]), unit("90deg"), matrix([0, 0, 1]))'],seealso:["matrix","rotationMatrix"]},Cve={name:"rotationMatrix",category:"Matrix",syntax:["rotationMatrix(theta)","rotationMatrix(theta, v)","rotationMatrix(theta, v, format)"],description:"Returns a 2-D rotation matrix (2x2) for a given angle (in radians). Returns a 2-D rotation matrix (3x3) of a given angle (in radians) around given axis.",examples:["rotationMatrix(pi / 2)",'rotationMatrix(unit("45deg"), [0, 0, 1])','rotationMatrix(1, matrix([0, 0, 1]), "sparse")'],seealso:["cos","sin"]},Mve={name:"row",category:"Matrix",syntax:["row(x, index)"],description:"Return a row from a matrix or array.",examples:["A = [[1, 2], [3, 4]]","row(A, 1)","row(A, 2)"],seealso:["column","matrixFromRows"]},Tve={name:"size",category:"Matrix",syntax:["size(x)"],description:"Calculate the size of a matrix.",examples:["size(2.3)",'size("hello world")',"a = [1, 2; 3, 4; 5, 6]","size(a)","size(1:6)"],seealso:["concat","count","det","diag","identity","inv","ones","range","squeeze","subset","trace","transpose","zeros"]},Ove={name:"sort",category:"Matrix",syntax:["sort(x)","sort(x, compare)"],description:'Sort the items in a matrix. Compare can be a string "asc", "desc", "natural", or a custom sort function.',examples:["sort([5, 10, 1])",'sort(["C", "B", "A", "D"], "natural")',"sortByLength(a, b) = size(a)[1] - size(b)[1]",'sort(["Langdon", "Tom", "Sara"], sortByLength)','sort(["10", "1", "2"], "natural")'],seealso:["map","filter","forEach"]},Fve={name:"squeeze",category:"Matrix",syntax:["squeeze(x)"],description:"Remove inner and outer singleton dimensions from a matrix.",examples:["a = zeros(3,2,1)","size(squeeze(a))","b = zeros(1,1,3)","size(squeeze(b))"],seealso:["concat","det","diag","identity","inv","ones","range","size","subset","trace","transpose","zeros"]},Pve={name:"subset",category:"Matrix",syntax:["value(index)","value(index) = replacement","subset(value, [index])","subset(value, [index], replacement)"],description:"Get or set a subset of the entries of a matrix or characters of a string. Indexes are one-based. There should be one index specification for each dimension of the target. Each specification can be a single index, a list of indices, or a range in colon notation `l:u`. In a range, both the lower bound l and upper bound u are included; and if a bound is omitted it defaults to the most extreme valid value. The cartesian product of the indices specified in each dimension determines the target of the operation.",examples:["d = [1, 2; 3, 4]","e = []","e[1, 1:2] = [5, 6]","e[2, :] = [7, 8]","f = d * e","f[2, 1]","f[:, 1]","f[[1,2], [1,3]] = [9, 10; 11, 12]","f"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","trace","transpose","zeros"]},Rve={name:"trace",category:"Matrix",syntax:["trace(A)"],description:"Calculate the trace of a matrix: the sum of the elements on the main diagonal of a square matrix.",examples:["A = [1, 2, 3; -1, 2, 3; 2, 0, 3]","trace(A)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","transpose","zeros"]},Ive={name:"transpose",category:"Matrix",syntax:["x'","transpose(x)"],description:"Transpose a matrix",examples:["a = [1, 2, 3; 4, 5, 6]","a'","transpose(a)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","zeros"]},Bve={name:"zeros",category:"Matrix",syntax:["zeros(m)","zeros(m, n)","zeros(m, n, p, ...)","zeros([m])","zeros([m, n])","zeros([m, n, p, ...])"],description:"Create a matrix containing zeros.",examples:["zeros(3)","zeros(3, 5)","a = [1, 2, 3; 4, 5, 6]","zeros(size(a))"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose"]},kve={name:"fft",category:"Matrix",syntax:["fft(x)"],description:"Calculate N-dimensional fourier transform",examples:["fft([[1, 0], [1, 0]])"],seealso:["ifft"]},Lve={name:"ifft",category:"Matrix",syntax:["ifft(x)"],description:"Calculate N-dimensional inverse fourier transform",examples:["ifft([[2, 2], [0, 0]])"],seealso:["fft"]},$ve={name:"combinations",category:"Probability",syntax:["combinations(n, k)"],description:"Compute the number of combinations of n items taken k at a time",examples:["combinations(7, 5)"],seealso:["combinationsWithRep","permutations","factorial"]},zve={name:"combinationsWithRep",category:"Probability",syntax:["combinationsWithRep(n, k)"],description:"Compute the number of combinations of n items taken k at a time with replacements.",examples:["combinationsWithRep(7, 5)"],seealso:["combinations","permutations","factorial"]},qve={name:"factorial",category:"Probability",syntax:["n!","factorial(n)"],description:"Compute the factorial of a value",examples:["5!","5 * 4 * 3 * 2 * 1","3!"],seealso:["combinations","combinationsWithRep","permutations","gamma"]},Uve={name:"gamma",category:"Probability",syntax:["gamma(n)"],description:"Compute the gamma function. For small values, the Lanczos approximation is used, and for large values the extended Stirling approximation.",examples:["gamma(4)","3!","gamma(1/2)","sqrt(pi)"],seealso:["factorial"]},Hve={name:"lgamma",category:"Probability",syntax:["lgamma(n)"],description:"Logarithm of the gamma function for real, positive numbers and complex numbers, using Lanczos approximation for numbers and Stirling series for complex numbers.",examples:["lgamma(4)","lgamma(1/2)","lgamma(i)","lgamma(complex(1.1, 2))"],seealso:["gamma"]},Wve={name:"kldivergence",category:"Probability",syntax:["kldivergence(x, y)"],description:"Calculate the Kullback-Leibler (KL) divergence between two distributions.",examples:["kldivergence([0.7,0.5,0.4], [0.2,0.9,0.5])"],seealso:[]},Vve={name:"multinomial",category:"Probability",syntax:["multinomial(A)"],description:"Multinomial Coefficients compute the number of ways of picking a1, a2, ..., ai unordered outcomes from `n` possibilities. multinomial takes one array of integers as an argument. The following condition must be enforced: every ai > 0.",examples:["multinomial([1, 2, 1])"],seealso:["combinations","factorial"]},Yve={name:"permutations",category:"Probability",syntax:["permutations(n)","permutations(n, k)"],description:"Compute the number of permutations of n items taken k at a time",examples:["permutations(5)","permutations(5, 3)"],seealso:["combinations","combinationsWithRep","factorial"]},jve={name:"pickRandom",category:"Probability",syntax:["pickRandom(array)","pickRandom(array, number)","pickRandom(array, weights)","pickRandom(array, number, weights)","pickRandom(array, weights, number)"],description:"Pick a random entry from a given array.",examples:["pickRandom(0:10)","pickRandom([1, 3, 1, 6])","pickRandom([1, 3, 1, 6], 2)","pickRandom([1, 3, 1, 6], [2, 3, 2, 1])","pickRandom([1, 3, 1, 6], 2, [2, 3, 2, 1])","pickRandom([1, 3, 1, 6], [2, 3, 2, 1], 2)"],seealso:["random","randomInt"]},Gve={name:"random",category:"Probability",syntax:["random()","random(max)","random(min, max)","random(size)","random(size, max)","random(size, min, max)"],description:"Return a random number.",examples:["random()","random(10, 20)","random([2, 3])"],seealso:["pickRandom","randomInt"]},Xve={name:"randomInt",category:"Probability",syntax:["randomInt(max)","randomInt(min, max)","randomInt(size)","randomInt(size, max)","randomInt(size, min, max)"],description:"Return a random integer number",examples:["randomInt(10, 20)","randomInt([2, 3], 10)"],seealso:["pickRandom","random"]},Zve={name:"compare",category:"Relational",syntax:["compare(x, y)"],description:"Compare two values. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:["compare(2, 3)","compare(3, 2)","compare(2, 2)","compare(5cm, 40mm)","compare(2, [1, 2, 3])"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compareNatural","compareText"]},Kve={name:"compareNatural",category:"Relational",syntax:["compareNatural(x, y)"],description:"Compare two values of any type in a deterministic, natural way. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:["compareNatural(2, 3)","compareNatural(3, 2)","compareNatural(2, 2)","compareNatural(5cm, 40mm)",'compareNatural("2", "10")',"compareNatural(2 + 3i, 2 + 4i)","compareNatural([1, 2, 4], [1, 2, 3])","compareNatural([1, 5], [1, 2, 3])","compareNatural([1, 2], [1, 2])","compareNatural({a: 2}, {a: 4})"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compare","compareText"]},Jve={name:"compareText",category:"Relational",syntax:["compareText(x, y)"],description:"Compare two strings lexically. Comparison is case sensitive. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:['compareText("B", "A")','compareText("A", "B")','compareText("A", "A")','compareText("2", "10")','compare("2", "10")',"compare(2, 10)",'compareNatural("2", "10")','compareText("B", ["A", "B", "C"])'],seealso:["compare","compareNatural"]},Qve={name:"deepEqual",category:"Relational",syntax:["deepEqual(x, y)"],description:"Check equality of two matrices element wise. Returns true if the size of both matrices is equal and when and each of the elements are equal.",examples:["deepEqual([1,3,4], [1,3,4])","deepEqual([1,3,4], [1,3])"],seealso:["equal","unequal","smaller","larger","smallerEq","largerEq","compare"]},ege={name:"equal",category:"Relational",syntax:["x == y","equal(x, y)"],description:"Check equality of two values. Returns true if the values are equal, and false if not.",examples:["2+2 == 3","2+2 == 4","a = 3.2","b = 6-2.8","a == b","50cm == 0.5m"],seealso:["unequal","smaller","larger","smallerEq","largerEq","compare","deepEqual","equalText"]},tge={name:"equalText",category:"Relational",syntax:["equalText(x, y)"],description:"Check equality of two strings. Comparison is case sensitive. Returns true if the values are equal, and false if not.",examples:['equalText("Hello", "Hello")','equalText("a", "A")','equal("2e3", "2000")','equalText("2e3", "2000")','equalText("B", ["A", "B", "C"])'],seealso:["compare","compareNatural","compareText","equal"]},rge={name:"larger",category:"Relational",syntax:["x > y","larger(x, y)"],description:"Check if value x is larger than y. Returns true if x is larger than y, and false if not.",examples:["2 > 3","5 > 2*2","a = 3.3","b = 6-2.8","(a > b)","(b < a)","5 cm > 2 inch"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compare"]},nge={name:"largerEq",category:"Relational",syntax:["x >= y","largerEq(x, y)"],description:"Check if value x is larger or equal to y. Returns true if x is larger or equal to y, and false if not.",examples:["2 >= 1+1","2 > 1+1","a = 3.2","b = 6-2.8","(a >= b)"],seealso:["equal","unequal","smallerEq","smaller","compare"]},ige={name:"smaller",category:"Relational",syntax:["x < y","smaller(x, y)"],description:"Check if value x is smaller than value y. Returns true if x is smaller than y, and false if not.",examples:["2 < 3","5 < 2*2","a = 3.3","b = 6-2.8","(a < b)","5 cm < 2 inch"],seealso:["equal","unequal","larger","smallerEq","largerEq","compare"]},age={name:"smallerEq",category:"Relational",syntax:["x <= y","smallerEq(x, y)"],description:"Check if value x is smaller or equal to value y. Returns true if x is smaller than y, and false if not.",examples:["2 <= 1+1","2 < 1+1","a = 3.2","b = 6-2.8","(a <= b)"],seealso:["equal","unequal","larger","smaller","largerEq","compare"]},sge={name:"unequal",category:"Relational",syntax:["x != y","unequal(x, y)"],description:"Check unequality of two values. Returns true if the values are unequal, and false if they are equal.",examples:["2+2 != 3","2+2 != 4","a = 3.2","b = 6-2.8","a != b","50cm != 0.5m","5 cm != 2 inch"],seealso:["equal","smaller","larger","smallerEq","largerEq","compare","deepEqual"]},oge={name:"setCartesian",category:"Set",syntax:["setCartesian(set1, set2)"],description:"Create the cartesian product of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays and the values will be sorted in ascending order before the operation.",examples:["setCartesian([1, 2], [3, 4])"],seealso:["setUnion","setIntersect","setDifference","setPowerset"]},uge={name:"setDifference",category:"Set",syntax:["setDifference(set1, set2)"],description:"Create the difference of two (multi)sets: every element of set1, that is not the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setDifference([1, 2, 3, 4], [3, 4, 5, 6])","setDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setIntersect","setSymDifference"]},lge={name:"setDistinct",category:"Set",syntax:["setDistinct(set)"],description:"Collect the distinct elements of a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setDistinct([1, 1, 1, 2, 2, 3])"],seealso:["setMultiplicity"]},cge={name:"setIntersect",category:"Set",syntax:["setIntersect(set1, set2)"],description:"Create the intersection of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setIntersect([1, 2, 3, 4], [3, 4, 5, 6])","setIntersect([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setDifference"]},fge={name:"setIsSubset",category:"Set",syntax:["setIsSubset(set1, set2)"],description:"Check whether a (multi)set is a subset of another (multi)set: every element of set1 is the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setIsSubset([1, 2], [3, 4, 5, 6])","setIsSubset([3, 4], [3, 4, 5, 6])"],seealso:["setUnion","setIntersect","setDifference"]},hge={name:"setMultiplicity",category:"Set",syntax:["setMultiplicity(element, set)"],description:"Count the multiplicity of an element in a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setMultiplicity(1, [1, 2, 2, 4])","setMultiplicity(2, [1, 2, 2, 4])"],seealso:["setDistinct","setSize"]},dge={name:"setPowerset",category:"Set",syntax:["setPowerset(set)"],description:"Create the powerset of a (multi)set: the powerset contains very possible subsets of a (multi)set. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setPowerset([1, 2, 3])"],seealso:["setCartesian"]},pge={name:"setSize",category:"Set",syntax:["setSize(set)","setSize(set, unique)"],description:'Count the number of elements of a (multi)set. When the second parameter "unique" is true, count only the unique values. A multi-dimension array will be converted to a single-dimension array before the operation.',examples:["setSize([1, 2, 2, 4])","setSize([1, 2, 2, 4], true)"],seealso:["setUnion","setIntersect","setDifference"]},mge={name:"setSymDifference",category:"Set",syntax:["setSymDifference(set1, set2)"],description:"Create the symmetric difference of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setSymDifference([1, 2, 3, 4], [3, 4, 5, 6])","setSymDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setIntersect","setDifference"]},vge={name:"setUnion",category:"Set",syntax:["setUnion(set1, set2)"],description:"Create the union of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setUnion([1, 2, 3, 4], [3, 4, 5, 6])","setUnion([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setIntersect","setDifference"]},gge={name:"zpk2tf",category:"Signal",syntax:["zpk2tf(z, p, k)"],description:"Compute the transfer function of a zero-pole-gain model.",examples:["zpk2tf([1, 2], [-1, -2], 1)","zpk2tf([1, 2], [-1, -2])","zpk2tf([1 - 3i, 2 + 2i], [-1, -2])"],seealso:[]},yge={name:"freqz",category:"Signal",syntax:["freqz(b, a)","freqz(b, a, w)"],description:"Calculates the frequency response of a filter given its numerator and denominator coefficients.",examples:["freqz([1, 2], [1, 2, 3])","freqz([1, 2], [1, 2, 3], [0, 1])","freqz([1, 2], [1, 2, 3], 512)"],seealso:[]},bge={name:"erf",category:"Special",syntax:["erf(x)"],description:"Compute the erf function of a value using a rational Chebyshev approximations for different intervals of x",examples:["erf(0.2)","erf(-0.5)","erf(4)"],seealso:[]},xge={name:"zeta",category:"Special",syntax:["zeta(s)"],description:"Compute the Riemann Zeta Function using an infinite series and Riemanns Functional Equation for the entire complex plane",examples:["zeta(0.2)","zeta(-0.5)","zeta(4)"],seealso:[]},wge={name:"mad",category:"Statistics",syntax:["mad(a, b, c, ...)","mad(A)"],description:"Compute the median absolute deviation of a matrix or a list with values. The median absolute deviation is defined as the median of the absolute deviations from the median.",examples:["mad(10, 20, 30)","mad([1, 2, 3])"],seealso:["mean","median","std","abs"]},Sge={name:"max",category:"Statistics",syntax:["max(a, b, c, ...)","max(A)","max(A, dimension)"],description:"Compute the maximum value of a list of values.",examples:["max(2, 3, 4, 1)","max([2, 3, 4, 1])","max([2, 5; 4, 3])","max([2, 5; 4, 3], 1)","max([2, 5; 4, 3], 2)","max(2.7, 7.1, -4.5, 2.0, 4.1)","min(2.7, 7.1, -4.5, 2.0, 4.1)"],seealso:["mean","median","min","prod","std","sum","variance"]},_ge={name:"mean",category:"Statistics",syntax:["mean(a, b, c, ...)","mean(A)","mean(A, dimension)"],description:"Compute the arithmetic mean of a list of values.",examples:["mean(2, 3, 4, 1)","mean([2, 3, 4, 1])","mean([2, 5; 4, 3])","mean([2, 5; 4, 3], 1)","mean([2, 5; 4, 3], 2)","mean([1.0, 2.7, 3.2, 4.0])"],seealso:["max","median","min","prod","std","sum","variance"]},Age={name:"median",category:"Statistics",syntax:["median(a, b, c, ...)","median(A)"],description:"Compute the median of all values. The values are sorted and the middle value is returned. In case of an even number of values, the average of the two middle values is returned.",examples:["median(5, 2, 7)","median([3, -1, 5, 7])"],seealso:["max","mean","min","prod","std","sum","variance","quantileSeq"]},Dge={name:"min",category:"Statistics",syntax:["min(a, b, c, ...)","min(A)","min(A, dimension)"],description:"Compute the minimum value of a list of values.",examples:["min(2, 3, 4, 1)","min([2, 3, 4, 1])","min([2, 5; 4, 3])","min([2, 5; 4, 3], 1)","min([2, 5; 4, 3], 2)","min(2.7, 7.1, -4.5, 2.0, 4.1)","max(2.7, 7.1, -4.5, 2.0, 4.1)"],seealso:["max","mean","median","prod","std","sum","variance"]},Nge={name:"mode",category:"Statistics",syntax:["mode(a, b, c, ...)","mode(A)","mode(A, a, b, B, c, ...)"],description:"Computes the mode of all values as an array. In case mode being more than one, multiple values are returned in an array.",examples:["mode(2, 1, 4, 3, 1)","mode([1, 2.7, 3.2, 4, 2.7])","mode(1, 4, 6, 1, 6)"],seealso:["max","mean","min","median","prod","std","sum","variance"]},Ege={name:"prod",category:"Statistics",syntax:["prod(a, b, c, ...)","prod(A)"],description:"Compute the product of all values.",examples:["prod(2, 3, 4)","prod([2, 3, 4])","prod([2, 5; 4, 3])"],seealso:["max","mean","min","median","min","std","sum","variance"]},Cge={name:"quantileSeq",category:"Statistics",syntax:["quantileSeq(A, prob[, sorted])","quantileSeq(A, [prob1, prob2, ...][, sorted])","quantileSeq(A, N[, sorted])"],description:`Compute the prob order quantile of a matrix or a list with values. The sequence is sorted and the middle value is returned. Supported types of sequence values are: Number, BigNumber, Unit Supported types of probablity are: Number, BigNumber. +`),i},r.prototype.toJSON=function(){var n=xt(this.doc);return n.mathjs="Help",n},r.fromJSON=function(n){var i={};return Object.keys(n).filter(a=>a!=="mathjs").forEach(a=>{i[a]=n[a]}),new r(i)},r.prototype.valueOf=r.prototype.toString,r},{isClass:!0}),wpe="Chain",Spe=["?on","math","typed"],_pe=G(wpe,Spe,t=>{var{on:e,math:r,typed:n}=t;function i(l){if(!(this instanceof i))throw new SyntaxError("Constructor must be called with the new operator");cP(l)?this.value=l.value:this.value=l}i.prototype.type="Chain",i.prototype.isChain=!0,i.prototype.done=function(){return this.value},i.prototype.valueOf=function(){return this.value},i.prototype.toString=function(){return Rt(this.value)},i.prototype.toJSON=function(){return{mathjs:"Chain",value:this.value}},i.fromJSON=function(l){return new i(l.value)};function a(l,c){typeof c=="function"&&(i.prototype[l]=o(c))}function s(l,c){bre(i.prototype,l,function(){var h=c();if(typeof h=="function")return o(h)})}function o(l){return function(){if(arguments.length===0)return new i(l(this.value));for(var c=[this.value],f=0;fl[g])};for(var h in l)f(h)}};var u={expression:!0,docs:!0,type:!0,classes:!0,json:!0,error:!0,isChain:!0};return i.createProxy(r),e&&e("import",function(l,c,f){f||s(l,c)}),i},{isClass:!0}),GC={name:"e",category:"Constants",syntax:["e"],description:"Euler's number, the base of the natural logarithm. Approximately equal to 2.71828",examples:["e","e ^ 2","exp(2)","log(e)"],seealso:["exp"]},Ape={name:"false",category:"Constants",syntax:["false"],description:"Boolean value false",examples:["false"],seealso:["true"]},Dpe={name:"i",category:"Constants",syntax:["i"],description:"Imaginary unit, defined as i*i=-1. A complex number is described as a + b*i, where a is the real part, and b is the imaginary part.",examples:["i","i * i","sqrt(-1)"],seealso:[]},Epe={name:"Infinity",category:"Constants",syntax:["Infinity"],description:"Infinity, a number which is larger than the maximum number that can be handled by a floating point number.",examples:["Infinity","1 / 0"],seealso:[]},Npe={name:"LN10",category:"Constants",syntax:["LN10"],description:"Returns the natural logarithm of 10, approximately equal to 2.302",examples:["LN10","log(10)"],seealso:[]},Cpe={name:"LN2",category:"Constants",syntax:["LN2"],description:"Returns the natural logarithm of 2, approximately equal to 0.693",examples:["LN2","log(2)"],seealso:[]},Mpe={name:"LOG10E",category:"Constants",syntax:["LOG10E"],description:"Returns the base-10 logarithm of E, approximately equal to 0.434",examples:["LOG10E","log(e, 10)"],seealso:[]},Tpe={name:"LOG2E",category:"Constants",syntax:["LOG2E"],description:"Returns the base-2 logarithm of E, approximately equal to 1.442",examples:["LOG2E","log(e, 2)"],seealso:[]},Ope={name:"NaN",category:"Constants",syntax:["NaN"],description:"Not a number",examples:["NaN","0 / 0"],seealso:[]},Fpe={name:"null",category:"Constants",syntax:["null"],description:"Value null",examples:["null"],seealso:["true","false"]},Rpe={name:"phi",category:"Constants",syntax:["phi"],description:"Phi is the golden ratio. Two quantities are in the golden ratio if their ratio is the same as the ratio of their sum to the larger of the two quantities. Phi is defined as `(1 + sqrt(5)) / 2` and is approximately 1.618034...",examples:["phi"],seealso:[]},XC={name:"pi",category:"Constants",syntax:["pi"],description:"The number pi is a mathematical constant that is the ratio of a circle's circumference to its diameter, and is approximately equal to 3.14159",examples:["pi","sin(pi/2)"],seealso:["tau"]},Ppe={name:"SQRT1_2",category:"Constants",syntax:["SQRT1_2"],description:"Returns the square root of 1/2, approximately equal to 0.707",examples:["SQRT1_2","sqrt(1/2)"],seealso:[]},kpe={name:"SQRT2",category:"Constants",syntax:["SQRT2"],description:"Returns the square root of 2, approximately equal to 1.414",examples:["SQRT2","sqrt(2)"],seealso:[]},Bpe={name:"tau",category:"Constants",syntax:["tau"],description:"Tau is the ratio constant of a circle's circumference to radius, equal to 2 * pi, approximately 6.2832.",examples:["tau","2 * pi"],seealso:["pi"]},Ipe={name:"true",category:"Constants",syntax:["true"],description:"Boolean value true",examples:["true"],seealso:["false"]},Lpe={name:"version",category:"Constants",syntax:["version"],description:"A string with the version number of math.js",examples:["version"],seealso:[]},$pe={name:"bignumber",category:"Construction",syntax:["bignumber(x)"],description:"Create a big number from a number or string.",examples:["0.1 + 0.2","bignumber(0.1) + bignumber(0.2)",'bignumber("7.2")','bignumber("7.2e500")',"bignumber([0.1, 0.2, 0.3])"],seealso:["boolean","complex","fraction","index","matrix","string","unit"]},zpe={name:"boolean",category:"Construction",syntax:["x","boolean(x)"],description:"Convert a string or number into a boolean.",examples:["boolean(0)","boolean(1)","boolean(3)",'boolean("true")','boolean("false")',"boolean([1, 0, 1, 1])"],seealso:["bignumber","complex","index","matrix","number","string","unit"]},qpe={name:"complex",category:"Construction",syntax:["complex()","complex(re, im)","complex(string)"],description:"Create a complex number.",examples:["complex()","complex(2, 3)",'complex("7 - 2i")'],seealso:["bignumber","boolean","index","matrix","number","string","unit"]},Upe={name:"createUnit",category:"Construction",syntax:["createUnit(definitions)","createUnit(name, definition)"],description:"Create a user-defined unit and register it with the Unit type.",examples:['createUnit("foo")','createUnit("knot", {definition: "0.514444444 m/s", aliases: ["knots", "kt", "kts"]})','createUnit("mph", "1 mile/hour")'],seealso:["unit","splitUnit"]},Hpe={name:"fraction",category:"Construction",syntax:["fraction(num)","fraction(matrix)","fraction(num,den)","fraction({n: num, d: den})"],description:"Create a fraction from a number or from integer numerator and denominator.",examples:["fraction(0.125)","fraction(1, 3) + fraction(2, 5)","fraction({n: 333, d: 53})","fraction([sqrt(9), sqrt(10), sqrt(11)])"],seealso:["bignumber","boolean","complex","index","matrix","string","unit"]},Wpe={name:"index",category:"Construction",syntax:["[start]","[start:end]","[start:step:end]","[start1, start 2, ...]","[start1:end1, start2:end2, ...]","[start1:step1:end1, start2:step2:end2, ...]"],description:"Create an index to get or replace a subset of a matrix",examples:["A = [1, 2, 3; 4, 5, 6]","A[1, :]","A[1, 2] = 50","A[1:2, 1:2] = 1","B = [1, 2, 3]","B[B>1 and B<3]"],seealso:["bignumber","boolean","complex","matrix,","number","range","string","unit"]},Vpe={name:"matrix",category:"Construction",syntax:["[]","[a1, b1, ...; a2, b2, ...]","matrix()",'matrix("dense")',"matrix([...])"],description:"Create a matrix.",examples:["[]","[1, 2, 3]","[1, 2, 3; 4, 5, 6]","matrix()","matrix([3, 4])",'matrix([3, 4; 5, 6], "sparse")','matrix([3, 4; 5, 6], "sparse", "number")'],seealso:["bignumber","boolean","complex","index","number","string","unit","sparse"]},Ype={name:"number",category:"Construction",syntax:["x","number(x)","number(unit, valuelessUnit)"],description:"Create a number or convert a string or boolean into a number.",examples:["2","2e3","4.05","number(2)",'number("7.2")',"number(true)","number([true, false, true, true])",'number(unit("52cm"), "m")'],seealso:["bignumber","boolean","complex","fraction","index","matrix","string","unit"]},jpe={name:"sparse",category:"Construction",syntax:["sparse()","sparse([a1, b1, ...; a1, b2, ...])",'sparse([a1, b1, ...; a1, b2, ...], "number")'],description:"Create a sparse matrix.",examples:["sparse()","sparse([3, 4; 5, 6])",'sparse([3, 0; 5, 0], "number")'],seealso:["bignumber","boolean","complex","index","number","string","unit","matrix"]},Gpe={name:"splitUnit",category:"Construction",syntax:["splitUnit(unit: Unit, parts: Unit[])"],description:"Split a unit in an array of units whose sum is equal to the original unit.",examples:['splitUnit(1 m, ["feet", "inch"])'],seealso:["unit","createUnit"]},Xpe={name:"string",category:"Construction",syntax:['"text"',"string(x)"],description:"Create a string or convert a value to a string",examples:['"Hello World!"',"string(4.2)","string(3 + 2i)"],seealso:["bignumber","boolean","complex","index","matrix","number","unit"]},Zpe={name:"unit",category:"Construction",syntax:["value unit","unit(value, unit)","unit(string)"],description:"Create a unit.",examples:["5.5 mm","3 inch",'unit(7.1, "kilogram")','unit("23 deg")'],seealso:["bignumber","boolean","complex","index","matrix","number","string"]},Kpe={name:"config",category:"Core",syntax:["config()","config(options)"],description:"Get configuration or change configuration.",examples:["config()","1/3 + 1/4",'config({number: "Fraction"})',"1/3 + 1/4"],seealso:[]},Jpe={name:"import",category:"Core",syntax:["import(functions)","import(functions, options)"],description:"Import functions or constants from an object.",examples:["import({myFn: f(x)=x^2, myConstant: 32 })","myFn(2)","myConstant"],seealso:[]},Qpe={name:"typed",category:"Core",syntax:["typed(signatures)","typed(name, signatures)"],description:"Create a typed function.",examples:['double = typed({ "number": f(x)=x+x, "string": f(x)=concat(x,x) })',"double(2)",'double("hello")'],seealso:[]},eme={name:"derivative",category:"Algebra",syntax:["derivative(expr, variable)","derivative(expr, variable, {simplify: boolean})"],description:"Takes the derivative of an expression expressed in parser Nodes. The derivative will be taken over the supplied variable in the second parameter. If there are multiple variables in the expression, it will return a partial derivative.",examples:['derivative("2x^3", "x")','derivative("2x^3", "x", {simplify: false})','derivative("2x^2 + 3x + 4", "x")','derivative("sin(2x)", "x")','f = parse("x^2 + x")','x = parse("x")',"df = derivative(f, x)","df.evaluate({x: 3})"],seealso:["simplify","parse","evaluate"]},tme={name:"leafCount",category:"Algebra",syntax:["leafCount(expr)"],description:"Computes the number of leaves in the parse tree of the given expression",examples:['leafCount("e^(i*pi)-1")','leafCount(parse("{a: 22/7, b: 10^(1/2)}"))'],seealso:["simplify"]},rme={name:"lsolve",category:"Algebra",syntax:["x=lsolve(L, b)"],description:"Finds one solution of the linear system L * x = b where L is an [n x n] lower triangular matrix and b is a [n] column vector.",examples:["a = [-2, 3; 2, 1]","b = [11, 9]","x = lsolve(a, b)"],seealso:["lsolveAll","lup","lusolve","usolve","matrix","sparse"]},nme={name:"lsolveAll",category:"Algebra",syntax:["x=lsolveAll(L, b)"],description:"Finds all solutions of the linear system L * x = b where L is an [n x n] lower triangular matrix and b is a [n] column vector.",examples:["a = [-2, 3; 2, 1]","b = [11, 9]","x = lsolve(a, b)"],seealso:["lsolve","lup","lusolve","usolve","matrix","sparse"]},ime={name:"lup",category:"Algebra",syntax:["lup(m)"],description:"Calculate the Matrix LU decomposition with partial pivoting. Matrix A is decomposed in three matrices (L, U, P) where P * A = L * U",examples:["lup([[2, 1], [1, 4]])","lup(matrix([[2, 1], [1, 4]]))","lup(sparse([[2, 1], [1, 4]]))"],seealso:["lusolve","lsolve","usolve","matrix","sparse","slu","qr"]},ame={name:"lusolve",category:"Algebra",syntax:["x=lusolve(A, b)","x=lusolve(lu, b)"],description:"Solves the linear system A * x = b where A is an [n x n] matrix and b is a [n] column vector.",examples:["a = [-2, 3; 2, 1]","b = [11, 9]","x = lusolve(a, b)"],seealso:["lup","slu","lsolve","usolve","matrix","sparse"]},sme={name:"polynomialRoot",category:"Algebra",syntax:["x=polynomialRoot(-6, 3)","x=polynomialRoot(4, -4, 1)","x=polynomialRoot(-8, 12, -6, 1)"],description:"Finds the roots of a univariate polynomial given by its coefficients starting from constant, linear, and so on, increasing in degree.",examples:["a = polynomialRoot(-6, 11, -6, 1)"],seealso:["cbrt","sqrt"]},ome={name:"qr",category:"Algebra",syntax:["qr(A)"],description:"Calculates the Matrix QR decomposition. Matrix `A` is decomposed in two matrices (`Q`, `R`) where `Q` is an orthogonal matrix and `R` is an upper triangular matrix.",examples:["qr([[1, -1, 4], [1, 4, -2], [1, 4, 2], [1, -1, 0]])"],seealso:["lup","slu","matrix"]},ume={name:"rationalize",category:"Algebra",syntax:["rationalize(expr)","rationalize(expr, scope)","rationalize(expr, scope, detailed)"],description:"Transform a rationalizable expression in a rational fraction. If rational fraction is one variable polynomial then converts the numerator and denominator in canonical form, with decreasing exponents, returning the coefficients of numerator.",examples:['rationalize("2x/y - y/(x+1)")','rationalize("2x/y - y/(x+1)", true)'],seealso:["simplify"]},lme={name:"resolve",category:"Algebra",syntax:["resolve(node, scope)"],description:"Recursively substitute variables in an expression tree.",examples:['resolve(parse("1 + x"), { x: 7 })','resolve(parse("size(text)"), { text: "Hello World" })','resolve(parse("x + y"), { x: parse("3z") })','resolve(parse("3x"), { x: parse("y+z"), z: parse("w^y") })'],seealso:["simplify","evaluate"],mayThrow:["ReferenceError"]},cme={name:"simplify",category:"Algebra",syntax:["simplify(expr)","simplify(expr, rules)"],description:"Simplify an expression tree.",examples:['simplify("3 + 2 / 4")','simplify("2x + x")','f = parse("x * (x + 2 + x)")',"simplified = simplify(f)","simplified.evaluate({x: 2})"],seealso:["simplifyCore","derivative","evaluate","parse","rationalize","resolve"]},fme={name:"simplifyConstant",category:"Algebra",syntax:["simplifyConstant(expr)","simplifyConstant(expr, options)"],description:"Replace constant subexpressions of node with their values.",examples:['simplifyConstant("(3-3)*x")','simplifyConstant(parse("z-cos(tau/8)"))'],seealso:["simplify","simplifyCore","evaluate"]},hme={name:"simplifyCore",category:"Algebra",syntax:["simplifyCore(node)"],description:"Perform simple one-pass simplifications on an expression tree.",examples:['simplifyCore(parse("0*x"))','simplifyCore(parse("(x+0)*2"))'],seealso:["simplify","simplifyConstant","evaluate"]},dme={name:"slu",category:"Algebra",syntax:["slu(A, order, threshold)"],description:"Calculate the Matrix LU decomposition with full pivoting. Matrix A is decomposed in two matrices (L, U) and two permutation vectors (pinv, q) where P * A * Q = L * U",examples:["slu(sparse([4.5, 0, 3.2, 0; 3.1, 2.9, 0, 0.9; 0, 1.7, 3, 0; 3.5, 0.4, 0, 1]), 1, 0.001)"],seealso:["lusolve","lsolve","usolve","matrix","sparse","lup","qr"]},pme={name:"symbolicEqual",category:"Algebra",syntax:["symbolicEqual(expr1, expr2)","symbolicEqual(expr1, expr2, options)"],description:"Returns true if the difference of the expressions simplifies to 0",examples:['symbolicEqual("x*y","y*x")','symbolicEqual("abs(x^2)", "x^2")','symbolicEqual("abs(x)", "x", {context: {abs: {trivial: true}}})'],seealso:["simplify","evaluate"]},mme={name:"usolve",category:"Algebra",syntax:["x=usolve(U, b)"],description:"Finds one solution of the linear system U * x = b where U is an [n x n] upper triangular matrix and b is a [n] column vector.",examples:["x=usolve(sparse([1, 1, 1, 1; 0, 1, 1, 1; 0, 0, 1, 1; 0, 0, 0, 1]), [1; 2; 3; 4])"],seealso:["usolveAll","lup","lusolve","lsolve","matrix","sparse"]},vme={name:"usolveAll",category:"Algebra",syntax:["x=usolve(U, b)"],description:"Finds all solutions of the linear system U * x = b where U is an [n x n] upper triangular matrix and b is a [n] column vector.",examples:["x=usolve(sparse([1, 1, 1, 1; 0, 1, 1, 1; 0, 0, 1, 1; 0, 0, 0, 1]), [1; 2; 3; 4])"],seealso:["usolve","lup","lusolve","lsolve","matrix","sparse"]},gme={name:"abs",category:"Arithmetic",syntax:["abs(x)"],description:"Compute the absolute value.",examples:["abs(3.5)","abs(-4.2)"],seealso:["sign"]},yme={name:"add",category:"Operators",syntax:["x + y","add(x, y)"],description:"Add two values.",examples:["a = 2.1 + 3.6","a - 3.6","3 + 2i","3 cm + 2 inch",'"2.3" + "4"'],seealso:["subtract"]},bme={name:"cbrt",category:"Arithmetic",syntax:["cbrt(x)","cbrt(x, allRoots)"],description:"Compute the cubic root value. If x = y * y * y, then y is the cubic root of x. When `x` is a number or complex number, an optional second argument `allRoots` can be provided to return all three cubic roots. If not provided, the principal root is returned",examples:["cbrt(64)","cube(4)","cbrt(-8)","cbrt(2 + 3i)","cbrt(8i)","cbrt(8i, true)","cbrt(27 m^3)"],seealso:["square","sqrt","cube","multiply"]},xme={name:"ceil",category:"Arithmetic",syntax:["ceil(x)"],description:"Round a value towards plus infinity. If x is complex, both real and imaginary part are rounded towards plus infinity.",examples:["ceil(3.2)","ceil(3.8)","ceil(-4.2)"],seealso:["floor","fix","round"]},wme={name:"cube",category:"Arithmetic",syntax:["cube(x)"],description:"Compute the cube of a value. The cube of x is x * x * x.",examples:["cube(2)","2^3","2 * 2 * 2"],seealso:["multiply","square","pow"]},Sme={name:"divide",category:"Operators",syntax:["x / y","divide(x, y)"],description:"Divide two values.",examples:["a = 2 / 3","a * 3","4.5 / 2","3 + 4 / 2","(3 + 4) / 2","18 km / 4.5"],seealso:["multiply"]},_me={name:"dotDivide",category:"Operators",syntax:["x ./ y","dotDivide(x, y)"],description:"Divide two values element wise.",examples:["a = [1, 2, 3; 4, 5, 6]","b = [2, 1, 1; 3, 2, 5]","a ./ b"],seealso:["multiply","dotMultiply","divide"]},Ame={name:"dotMultiply",category:"Operators",syntax:["x .* y","dotMultiply(x, y)"],description:"Multiply two values element wise.",examples:["a = [1, 2, 3; 4, 5, 6]","b = [2, 1, 1; 3, 2, 5]","a .* b"],seealso:["multiply","divide","dotDivide"]},Dme={name:"dotPow",category:"Operators",syntax:["x .^ y","dotPow(x, y)"],description:"Calculates the power of x to y element wise.",examples:["a = [1, 2, 3; 4, 5, 6]","a .^ 2"],seealso:["pow"]},Eme={name:"exp",category:"Arithmetic",syntax:["exp(x)"],description:"Calculate the exponent of a value.",examples:["exp(1.3)","e ^ 1.3","log(exp(1.3))","x = 2.4","(exp(i*x) == cos(x) + i*sin(x)) # Euler's formula"],seealso:["expm","expm1","pow","log"]},Nme={name:"expm",category:"Arithmetic",syntax:["exp(x)"],description:"Compute the matrix exponential, expm(A) = e^A. The matrix must be square. Not to be confused with exp(a), which performs element-wise exponentiation.",examples:["expm([[0,2],[0,0]])"],seealso:["exp"]},Cme={name:"expm1",category:"Arithmetic",syntax:["expm1(x)"],description:"Calculate the value of subtracting 1 from the exponential value.",examples:["expm1(2)","pow(e, 2) - 1","log(expm1(2) + 1)"],seealso:["exp","pow","log"]},Mme={name:"fix",category:"Arithmetic",syntax:["fix(x)"],description:"Round a value towards zero. If x is complex, both real and imaginary part are rounded towards zero.",examples:["fix(3.2)","fix(3.8)","fix(-4.2)","fix(-4.8)"],seealso:["ceil","floor","round"]},Tme={name:"floor",category:"Arithmetic",syntax:["floor(x)"],description:"Round a value towards minus infinity.If x is complex, both real and imaginary part are rounded towards minus infinity.",examples:["floor(3.2)","floor(3.8)","floor(-4.2)"],seealso:["ceil","fix","round"]},Ome={name:"gcd",category:"Arithmetic",syntax:["gcd(a, b)","gcd(a, b, c, ...)"],description:"Compute the greatest common divisor.",examples:["gcd(8, 12)","gcd(-4, 6)","gcd(25, 15, -10)"],seealso:["lcm","xgcd"]},Fme={name:"hypot",category:"Arithmetic",syntax:["hypot(a, b, c, ...)","hypot([a, b, c, ...])"],description:"Calculate the hypotenusa of a list with values. ",examples:["hypot(3, 4)","sqrt(3^2 + 4^2)","hypot(-2)","hypot([3, 4, 5])"],seealso:["abs","norm"]},Rme={name:"invmod",category:"Arithmetic",syntax:["invmod(a, b)"],description:"Calculate the (modular) multiplicative inverse of a modulo b. Solution to the equation ax ≣ 1 (mod b)",examples:["invmod(8, 12)","invmod(7, 13)","invmod(15151, 15122)"],seealso:["gcd","xgcd"]},Pme={name:"lcm",category:"Arithmetic",syntax:["lcm(x, y)"],description:"Compute the least common multiple.",examples:["lcm(4, 6)","lcm(6, 21)","lcm(6, 21, 5)"],seealso:["gcd"]},kme={name:"log",category:"Arithmetic",syntax:["log(x)","log(x, base)"],description:"Compute the logarithm of a value. If no base is provided, the natural logarithm of x is calculated. If base if provided, the logarithm is calculated for the specified base. log(x, base) is defined as log(x) / log(base).",examples:["log(3.5)","a = log(2.4)","exp(a)","10 ^ 4","log(10000, 10)","log(10000) / log(10)","b = log(1024, 2)","2 ^ b"],seealso:["exp","log1p","log2","log10"]},Bme={name:"log10",category:"Arithmetic",syntax:["log10(x)"],description:"Compute the 10-base logarithm of a value.",examples:["log10(0.00001)","log10(10000)","10 ^ 4","log(10000) / log(10)","log(10000, 10)"],seealso:["exp","log"]},Ime={name:"log1p",category:"Arithmetic",syntax:["log1p(x)","log1p(x, base)"],description:"Calculate the logarithm of a `value+1`",examples:["log1p(2.5)","exp(log1p(1.4))","pow(10, 4)","log1p(9999, 10)","log1p(9999) / log(10)"],seealso:["exp","log","log2","log10"]},Lme={name:"log2",category:"Arithmetic",syntax:["log2(x)"],description:"Calculate the 2-base of a value. This is the same as calculating `log(x, 2)`.",examples:["log2(0.03125)","log2(16)","log2(16) / log2(2)","pow(2, 4)"],seealso:["exp","log1p","log","log10"]},$me={name:"mod",category:"Operators",syntax:["x % y","x mod y","mod(x, y)"],description:"Calculates the modulus, the remainder of an integer division.",examples:["7 % 3","11 % 2","10 mod 4","isOdd(x) = x % 2","isOdd(2)","isOdd(3)"],seealso:["divide"]},zme={name:"multiply",category:"Operators",syntax:["x * y","multiply(x, y)"],description:"multiply two values.",examples:["a = 2.1 * 3.4","a / 3.4","2 * 3 + 4","2 * (3 + 4)","3 * 2.1 km"],seealso:["divide"]},qme={name:"norm",category:"Arithmetic",syntax:["norm(x)","norm(x, p)"],description:"Calculate the norm of a number, vector or matrix.",examples:["abs(-3.5)","norm(-3.5)","norm(3 - 4i)","norm([1, 2, -3], Infinity)","norm([1, 2, -3], -Infinity)","norm([3, 4], 2)","norm([[1, 2], [3, 4]], 1)",'norm([[1, 2], [3, 4]], "inf")','norm([[1, 2], [3, 4]], "fro")']},Ume={name:"nthRoot",category:"Arithmetic",syntax:["nthRoot(a)","nthRoot(a, root)"],description:'Calculate the nth root of a value. The principal nth root of a positive real number A, is the positive real solution of the equation "x^root = A".',examples:["4 ^ 3","nthRoot(64, 3)","nthRoot(9, 2)","sqrt(9)"],seealso:["nthRoots","pow","sqrt"]},Hme={name:"nthRoots",category:"Arithmetic",syntax:["nthRoots(A)","nthRoots(A, root)"],description:'Calculate the nth roots of a value. An nth root of a positive real number A, is a positive real solution of the equation "x^root = A". This function returns an array of complex values.',examples:["nthRoots(1)","nthRoots(1, 3)"],seealso:["sqrt","pow","nthRoot"]},Wme={name:"pow",category:"Operators",syntax:["x ^ y","pow(x, y)"],description:"Calculates the power of x to y, x^y.",examples:["2^3","2*2*2","1 + e ^ (pi * i)","pow([[1, 2], [4, 3]], 2)","pow([[1, 2], [4, 3]], -1)"],seealso:["multiply","nthRoot","nthRoots","sqrt"]},Vme={name:"round",category:"Arithmetic",syntax:["round(x)","round(x, n)","round(unit, valuelessUnit)","round(unit, n, valuelessUnit)"],description:"round a value towards the nearest integer.If x is complex, both real and imaginary part are rounded towards the nearest integer. When n is specified, the value is rounded to n decimals.",examples:["round(3.2)","round(3.8)","round(-4.2)","round(-4.8)","round(pi, 3)","round(123.45678, 2)","round(3.241cm, 2, cm)","round([3.2, 3.8, -4.7])"],seealso:["ceil","floor","fix"]},Yme={name:"sign",category:"Arithmetic",syntax:["sign(x)"],description:"Compute the sign of a value. The sign of a value x is 1 when x>1, -1 when x<0, and 0 when x=0.",examples:["sign(3.5)","sign(-4.2)","sign(0)"],seealso:["abs"]},jme={name:"sqrt",category:"Arithmetic",syntax:["sqrt(x)"],description:"Compute the square root value. If x = y * y, then y is the square root of x.",examples:["sqrt(25)","5 * 5","sqrt(-1)"],seealso:["square","sqrtm","multiply","nthRoot","nthRoots","pow"]},Gme={name:"sqrtm",category:"Arithmetic",syntax:["sqrtm(x)"],description:"Calculate the principal square root of a square matrix. The principal square root matrix `X` of another matrix `A` is such that `X * X = A`.",examples:["sqrtm([[33, 24], [48, 57]])"],seealso:["sqrt","abs","square","multiply"]},Xme={name:"sylvester",category:"Algebra",syntax:["sylvester(A,B,C)"],description:"Solves the real-valued Sylvester equation AX+XB=C for X",examples:["sylvester([[-1, -2], [1, 1]], [[-2, 1], [-1, 2]], [[-3, 2], [3, 0]])","A = [[-1, -2], [1, 1]]; B = [[2, -1], [1, -2]]; C = [[-3, 2], [3, 0]]","sylvester(A, B, C)"],seealso:["schur","lyap"]},Zme={name:"schur",category:"Algebra",syntax:["schur(A)"],description:"Performs a real Schur decomposition of the real matrix A = UTU'",examples:["schur([[1, 0], [-4, 3]])","A = [[1, 0], [-4, 3]]","schur(A)"],seealso:["lyap","sylvester"]},Kme={name:"lyap",category:"Algebra",syntax:["lyap(A,Q)"],description:"Solves the Continuous-time Lyapunov equation AP+PA'+Q=0 for P",examples:["lyap([[-2, 0], [1, -4]], [[3, 1], [1, 3]])","A = [[-2, 0], [1, -4]]","Q = [[3, 1], [1, 3]]","lyap(A,Q)"],seealso:["schur","sylvester"]},Jme={name:"square",category:"Arithmetic",syntax:["square(x)"],description:"Compute the square of a value. The square of x is x * x.",examples:["square(3)","sqrt(9)","3^2","3 * 3"],seealso:["multiply","pow","sqrt","cube"]},Qme={name:"subtract",category:"Operators",syntax:["x - y","subtract(x, y)"],description:"subtract two values.",examples:["a = 5.3 - 2","a + 2","2/3 - 1/6","2 * 3 - 3","2.1 km - 500m"],seealso:["add"]},eve={name:"unaryMinus",category:"Operators",syntax:["-x","unaryMinus(x)"],description:"Inverse the sign of a value. Converts booleans and strings to numbers.",examples:["-4.5","-(-5.6)",'-"22"'],seealso:["add","subtract","unaryPlus"]},tve={name:"unaryPlus",category:"Operators",syntax:["+x","unaryPlus(x)"],description:"Converts booleans and strings to numbers.",examples:["+true",'+"2"'],seealso:["add","subtract","unaryMinus"]},rve={name:"xgcd",category:"Arithmetic",syntax:["xgcd(a, b)"],description:"Calculate the extended greatest common divisor for two values. The result is an array [d, x, y] with 3 entries, where d is the greatest common divisor, and d = x * a + y * b.",examples:["xgcd(8, 12)","gcd(8, 12)","xgcd(36163, 21199)"],seealso:["gcd","lcm"]},nve={name:"bitAnd",category:"Bitwise",syntax:["x & y","bitAnd(x, y)"],description:"Bitwise AND operation. Performs the logical AND operation on each pair of the corresponding bits of the two given values by multiplying them. If both bits in the compared position are 1, the bit in the resulting binary representation is 1, otherwise, the result is 0",examples:["5 & 3","bitAnd(53, 131)","[1, 12, 31] & 42"],seealso:["bitNot","bitOr","bitXor","leftShift","rightArithShift","rightLogShift"]},ive={name:"bitNot",category:"Bitwise",syntax:["~x","bitNot(x)"],description:"Bitwise NOT operation. Performs a logical negation on each bit of the given value. Bits that are 0 become 1, and those that are 1 become 0.",examples:["~1","~2","bitNot([2, -3, 4])"],seealso:["bitAnd","bitOr","bitXor","leftShift","rightArithShift","rightLogShift"]},ave={name:"bitOr",category:"Bitwise",syntax:["x | y","bitOr(x, y)"],description:"Bitwise OR operation. Performs the logical inclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if the first bit is 1 or the second bit is 1 or both bits are 1, otherwise, the result is 0.",examples:["5 | 3","bitOr([1, 2, 3], 4)"],seealso:["bitAnd","bitNot","bitXor","leftShift","rightArithShift","rightLogShift"]},sve={name:"bitXor",category:"Bitwise",syntax:["bitXor(x, y)"],description:"Bitwise XOR operation, exclusive OR. Performs the logical exclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if only the first bit is 1 or only the second bit is 1, but will be 0 if both are 0 or both are 1.",examples:["bitOr(1, 2)","bitXor([2, 3, 4], 4)"],seealso:["bitAnd","bitNot","bitOr","leftShift","rightArithShift","rightLogShift"]},ove={name:"leftShift",category:"Bitwise",syntax:["x << y","leftShift(x, y)"],description:"Bitwise left logical shift of a value x by y number of bits.",examples:["4 << 1","8 >> 1"],seealso:["bitAnd","bitNot","bitOr","bitXor","rightArithShift","rightLogShift"]},uve={name:"rightArithShift",category:"Bitwise",syntax:["x >> y","rightArithShift(x, y)"],description:"Bitwise right arithmetic shift of a value x by y number of bits.",examples:["8 >> 1","4 << 1","-12 >> 2"],seealso:["bitAnd","bitNot","bitOr","bitXor","leftShift","rightLogShift"]},lve={name:"rightLogShift",category:"Bitwise",syntax:["x >>> y","rightLogShift(x, y)"],description:"Bitwise right logical shift of a value x by y number of bits.",examples:["8 >>> 1","4 << 1","-12 >>> 2"],seealso:["bitAnd","bitNot","bitOr","bitXor","leftShift","rightArithShift"]},cve={name:"bellNumbers",category:"Combinatorics",syntax:["bellNumbers(n)"],description:"The Bell Numbers count the number of partitions of a set. A partition is a pairwise disjoint subset of S whose union is S. `bellNumbers` only takes integer arguments. The following condition must be enforced: n >= 0.",examples:["bellNumbers(3)","bellNumbers(8)"],seealso:["stirlingS2"]},fve={name:"catalan",category:"Combinatorics",syntax:["catalan(n)"],description:"The Catalan Numbers enumerate combinatorial structures of many different types. catalan only takes integer arguments. The following condition must be enforced: n >= 0.",examples:["catalan(3)","catalan(8)"],seealso:["bellNumbers"]},hve={name:"composition",category:"Combinatorics",syntax:["composition(n, k)"],description:"The composition counts of n into k parts. composition only takes integer arguments. The following condition must be enforced: k <= n.",examples:["composition(5, 3)"],seealso:["combinations"]},dve={name:"stirlingS2",category:"Combinatorics",syntax:["stirlingS2(n, k)"],description:"he Stirling numbers of the second kind, counts the number of ways to partition a set of n labelled objects into k nonempty unlabelled subsets. `stirlingS2` only takes integer arguments. The following condition must be enforced: k <= n. If n = k or k = 1, then s(n,k) = 1.",examples:["stirlingS2(5, 3)"],seealso:["bellNumbers"]},pve={name:"arg",category:"Complex",syntax:["arg(x)"],description:"Compute the argument of a complex value. If x = a+bi, the argument is computed as atan2(b, a).",examples:["arg(2 + 2i)","atan2(3, 2)","arg(2 + 3i)"],seealso:["re","im","conj","abs"]},mve={name:"conj",category:"Complex",syntax:["conj(x)"],description:"Compute the complex conjugate of a complex value. If x = a+bi, the complex conjugate is a-bi.",examples:["conj(2 + 3i)","conj(2 - 3i)","conj(-5.2i)"],seealso:["re","im","abs","arg"]},vve={name:"im",category:"Complex",syntax:["im(x)"],description:"Get the imaginary part of a complex number.",examples:["im(2 + 3i)","re(2 + 3i)","im(-5.2i)","im(2.4)"],seealso:["re","conj","abs","arg"]},gve={name:"re",category:"Complex",syntax:["re(x)"],description:"Get the real part of a complex number.",examples:["re(2 + 3i)","im(2 + 3i)","re(-5.2i)","re(2.4)"],seealso:["im","conj","abs","arg"]},yve={name:"evaluate",category:"Expression",syntax:["evaluate(expression)","evaluate(expression, scope)","evaluate([expr1, expr2, expr3, ...])","evaluate([expr1, expr2, expr3, ...], scope)"],description:"Evaluate an expression or an array with expressions.",examples:['evaluate("2 + 3")','evaluate("sqrt(16)")','evaluate("2 inch to cm")','evaluate("sin(x * pi)", { "x": 1/2 })','evaluate(["width=2", "height=4","width*height"])'],seealso:[]},bve={name:"help",category:"Expression",syntax:["help(object)","help(string)"],description:"Display documentation on a function or data type.",examples:["help(sqrt)",'help("complex")'],seealso:[]},xve={name:"distance",category:"Geometry",syntax:["distance([x1, y1], [x2, y2])","distance([[x1, y1], [x2, y2]])"],description:"Calculates the Euclidean distance between two points.",examples:["distance([0,0], [4,4])","distance([[0,0], [4,4]])"],seealso:[]},wve={name:"intersect",category:"Geometry",syntax:["intersect(expr1, expr2, expr3, expr4)","intersect(expr1, expr2, expr3)"],description:"Computes the intersection point of lines and/or planes.",examples:["intersect([0, 0], [10, 10], [10, 0], [0, 10])","intersect([1, 0, 1], [4, -2, 2], [1, 1, 1, 6])"],seealso:[]},Sve={name:"and",category:"Logical",syntax:["x and y","and(x, y)"],description:"Logical and. Test whether two values are both defined with a nonzero/nonempty value.",examples:["true and false","true and true","2 and 4"],seealso:["not","or","xor"]},_ve={name:"not",category:"Logical",syntax:["not x","not(x)"],description:"Logical not. Flips the boolean value of given argument.",examples:["not true","not false","not 2","not 0"],seealso:["and","or","xor"]},Ave={name:"or",category:"Logical",syntax:["x or y","or(x, y)"],description:"Logical or. Test if at least one value is defined with a nonzero/nonempty value.",examples:["true or false","false or false","0 or 4"],seealso:["not","and","xor"]},Dve={name:"xor",category:"Logical",syntax:["x xor y","xor(x, y)"],description:"Logical exclusive or, xor. Test whether one and only one value is defined with a nonzero/nonempty value.",examples:["true xor false","false xor false","true xor true","0 xor 4"],seealso:["not","and","or"]},Eve={name:"column",category:"Matrix",syntax:["column(x, index)"],description:"Return a column from a matrix or array.",examples:["A = [[1, 2], [3, 4]]","column(A, 1)","column(A, 2)"],seealso:["row","matrixFromColumns"]},Nve={name:"concat",category:"Matrix",syntax:["concat(A, B, C, ...)","concat(A, B, C, ..., dim)"],description:"Concatenate matrices. By default, the matrices are concatenated by the last dimension. The dimension on which to concatenate can be provided as last argument.",examples:["A = [1, 2; 5, 6]","B = [3, 4; 7, 8]","concat(A, B)","concat(A, B, 1)","concat(A, B, 2)"],seealso:["det","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]},Cve={name:"count",category:"Matrix",syntax:["count(x)"],description:"Count the number of elements of a matrix, array or string.",examples:["a = [1, 2; 3, 4; 5, 6]","count(a)","size(a)",'count("hello world")'],seealso:["size"]},Mve={name:"cross",category:"Matrix",syntax:["cross(A, B)"],description:"Calculate the cross product for two vectors in three dimensional space.",examples:["cross([1, 1, 0], [0, 1, 1])","cross([3, -3, 1], [4, 9, 2])","cross([2, 3, 4], [5, 6, 7])"],seealso:["multiply","dot"]},Tve={name:"ctranspose",category:"Matrix",syntax:["x'","ctranspose(x)"],description:"Complex Conjugate and Transpose a matrix",examples:["a = [1, 2, 3; 4, 5, 6]","a'","ctranspose(a)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","zeros"]},Ove={name:"det",category:"Matrix",syntax:["det(x)"],description:"Calculate the determinant of a matrix",examples:["det([1, 2; 3, 4])","det([-2, 2, 3; -1, 1, 3; 2, 0, -1])"],seealso:["concat","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]},Fve={name:"diag",category:"Matrix",syntax:["diag(x)","diag(x, k)"],description:"Create a diagonal matrix or retrieve the diagonal of a matrix. When x is a vector, a matrix with the vector values on the diagonal will be returned. When x is a matrix, a vector with the diagonal values of the matrix is returned. When k is provided, the k-th diagonal will be filled in or retrieved, if k is positive, the values are placed on the super diagonal. When k is negative, the values are placed on the sub diagonal.",examples:["diag(1:3)","diag(1:3, 1)","a = [1, 2, 3; 4, 5, 6; 7, 8, 9]","diag(a)"],seealso:["concat","det","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]},Rve={name:"diff",category:"Matrix",syntax:["diff(arr)","diff(arr, dim)"],description:["Create a new matrix or array with the difference of the passed matrix or array.","Dim parameter is optional and used to indicant the dimension of the array/matrix to apply the difference","If no dimension parameter is passed it is assumed as dimension 0","Dimension is zero-based in javascript and one-based in the parser","Arrays must be 'rectangular' meaning arrays like [1, 2]","If something is passed as a matrix it will be returned as a matrix but other than that all matrices are converted to arrays"],examples:["A = [1, 2, 4, 7, 0]","diff(A)","diff(A, 1)","B = [[1, 2], [3, 4]]","diff(B)","diff(B, 1)","diff(B, 2)","diff(B, bignumber(2))","diff([[1, 2], matrix([3, 4])], 2)"],seealso:["subtract","partitionSelect"]},Pve={name:"dot",category:"Matrix",syntax:["dot(A, B)","A * B"],description:"Calculate the dot product of two vectors. The dot product of A = [a1, a2, a3, ..., an] and B = [b1, b2, b3, ..., bn] is defined as dot(A, B) = a1 * b1 + a2 * b2 + a3 * b3 + ... + an * bn",examples:["dot([2, 4, 1], [2, 2, 3])","[2, 4, 1] * [2, 2, 3]"],seealso:["multiply","cross"]},kve={name:"eigs",category:"Matrix",syntax:["eigs(x)"],description:"Calculate the eigenvalues and optionally eigenvectors of a square matrix",examples:["eigs([[5, 2.3], [2.3, 1]])","eigs([[1, 2, 3], [4, 5, 6], [7, 8, 9]], { precision: 1e-6, eigenvectors: false })"],seealso:["inv"]},Bve={name:"filter",category:"Matrix",syntax:["filter(x, test)"],description:"Filter items in a matrix.",examples:["isPositive(x) = x > 0","filter([6, -2, -1, 4, 3], isPositive)","filter([6, -2, 0, 1, 0], x != 0)"],seealso:["sort","map","forEach"]},Ive={name:"flatten",category:"Matrix",syntax:["flatten(x)"],description:"Flatten a multi dimensional matrix into a single dimensional matrix.",examples:["a = [1, 2, 3; 4, 5, 6]","size(a)","b = flatten(a)","size(b)"],seealso:["concat","resize","size","squeeze"]},Lve={name:"forEach",category:"Matrix",syntax:["forEach(x, callback)"],description:"Iterates over all elements of a matrix/array, and executes the given callback function.",examples:["numberOfPets = {}","addPet(n) = numberOfPets[n] = (numberOfPets[n] ? numberOfPets[n]:0 ) + 1;",'forEach(["Dog","Cat","Cat"], addPet)',"numberOfPets"],seealso:["map","sort","filter"]},$ve={name:"getMatrixDataType",category:"Matrix",syntax:["getMatrixDataType(x)"],description:'Find the data type of all elements in a matrix or array, for example "number" if all items are a number and "Complex" if all values are complex numbers. If a matrix contains more than one data type, it will return "mixed".',examples:["getMatrixDataType([1, 2, 3])","getMatrixDataType([[5 cm], [2 inch]])",'getMatrixDataType([1, "text"])',"getMatrixDataType([1, bignumber(4)])"],seealso:["matrix","sparse","typeOf"]},zve={name:"identity",category:"Matrix",syntax:["identity(n)","identity(m, n)","identity([m, n])"],description:"Returns the identity matrix with size m-by-n. The matrix has ones on the diagonal and zeros elsewhere.",examples:["identity(3)","identity(3, 5)","a = [1, 2, 3; 4, 5, 6]","identity(size(a))"],seealso:["concat","det","diag","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]},qve={name:"inv",category:"Matrix",syntax:["inv(x)"],description:"Calculate the inverse of a matrix",examples:["inv([1, 2; 3, 4])","inv(4)","1 / 4"],seealso:["concat","det","diag","identity","ones","range","size","squeeze","subset","trace","transpose","zeros"]},Uve={name:"pinv",category:"Matrix",syntax:["pinv(x)"],description:"Calculate the Moore–Penrose inverse of a matrix",examples:["pinv([1, 2; 3, 4])","pinv([[1, 0], [0, 1], [0, 1]])","pinv(4)"],seealso:["inv"]},Hve={name:"kron",category:"Matrix",syntax:["kron(x, y)"],description:"Calculates the kronecker product of 2 matrices or vectors.",examples:["kron([[1, 0], [0, 1]], [[1, 2], [3, 4]])","kron([1,1], [2,3,4])"],seealso:["multiply","dot","cross"]},Wve={name:"map",category:"Matrix",syntax:["map(x, callback)"],description:"Create a new matrix or array with the results of the callback function executed on each entry of the matrix/array.",examples:["map([1, 2, 3], square)"],seealso:["filter","forEach"]},Vve={name:"matrixFromColumns",category:"Matrix",syntax:["matrixFromColumns(...arr)","matrixFromColumns(row1, row2)","matrixFromColumns(row1, row2, row3)"],description:"Create a dense matrix from vectors as individual columns.",examples:["matrixFromColumns([1, 2, 3], [[4],[5],[6]])"],seealso:["matrix","matrixFromRows","matrixFromFunction","zeros"]},Yve={name:"matrixFromFunction",category:"Matrix",syntax:["matrixFromFunction(size, fn)","matrixFromFunction(size, fn, format)","matrixFromFunction(size, fn, format, datatype)","matrixFromFunction(size, format, fn)","matrixFromFunction(size, format, datatype, fn)"],description:"Create a matrix by evaluating a generating function at each index.",examples:["f(I) = I[1] - I[2]","matrixFromFunction([3,3], f)","g(I) = I[1] - I[2] == 1 ? 4 : 0",'matrixFromFunction([100, 100], "sparse", g)',"matrixFromFunction([5], random)"],seealso:["matrix","matrixFromRows","matrixFromColumns","zeros"]},jve={name:"matrixFromRows",category:"Matrix",syntax:["matrixFromRows(...arr)","matrixFromRows(row1, row2)","matrixFromRows(row1, row2, row3)"],description:"Create a dense matrix from vectors as individual rows.",examples:["matrixFromRows([1, 2, 3], [[4],[5],[6]])"],seealso:["matrix","matrixFromColumns","matrixFromFunction","zeros"]},Gve={name:"ones",category:"Matrix",syntax:["ones(m)","ones(m, n)","ones(m, n, p, ...)","ones([m])","ones([m, n])","ones([m, n, p, ...])"],description:"Create a matrix containing ones.",examples:["ones(3)","ones(3, 5)","ones([2,3]) * 4.5","a = [1, 2, 3; 4, 5, 6]","ones(size(a))"],seealso:["concat","det","diag","identity","inv","range","size","squeeze","subset","trace","transpose","zeros"]},Xve={name:"partitionSelect",category:"Matrix",syntax:["partitionSelect(x, k)","partitionSelect(x, k, compare)"],description:"Partition-based selection of an array or 1D matrix. Will find the kth smallest value, and mutates the input array. Uses Quickselect.",examples:["partitionSelect([5, 10, 1], 2)",'partitionSelect(["C", "B", "A", "D"], 1, compareText)',"arr = [5, 2, 1]","partitionSelect(arr, 0) # returns 1, arr is now: [1, 2, 5]","arr","partitionSelect(arr, 1, 'desc') # returns 2, arr is now: [5, 2, 1]","arr"],seealso:["sort"]},Zve={name:"range",category:"Type",syntax:["start:end","start:step:end","range(start, end)","range(start, end, step)","range(string)"],description:"Create a range. Lower bound of the range is included, upper bound is excluded.",examples:["1:5","3:-1:-3","range(3, 7)","range(0, 12, 2)",'range("4:10")',"range(1m, 1m, 3m)","a = [1, 2, 3, 4; 5, 6, 7, 8]","a[1:2, 1:2]"],seealso:["concat","det","diag","identity","inv","ones","size","squeeze","subset","trace","transpose","zeros"]},Kve={name:"reshape",category:"Matrix",syntax:["reshape(x, sizes)"],description:"Reshape a multi dimensional array to fit the specified dimensions.",examples:["reshape([1, 2, 3, 4, 5, 6], [2, 3])","reshape([[1, 2], [3, 4]], [1, 4])","reshape([[1, 2], [3, 4]], [4])","reshape([1, 2, 3, 4], [-1, 2])"],seealso:["size","squeeze","resize"]},Jve={name:"resize",category:"Matrix",syntax:["resize(x, size)","resize(x, size, defaultValue)"],description:"Resize a matrix.",examples:["resize([1,2,3,4,5], [3])","resize([1,2,3], [5])","resize([1,2,3], [5], -1)","resize(2, [2, 3])",'resize("hello", [8], "!")'],seealso:["size","subset","squeeze","reshape"]},Qve={name:"rotate",category:"Matrix",syntax:["rotate(w, theta)","rotate(w, theta, v)"],description:"Returns a 2-D rotation matrix (2x2) for a given angle (in radians). Returns a 2-D rotation matrix (3x3) of a given angle (in radians) around given axis.",examples:["rotate([1, 0], pi / 2)",'rotate(matrix([1, 0]), unit("35deg"))','rotate([1, 0, 0], unit("90deg"), [0, 0, 1])','rotate(matrix([1, 0, 0]), unit("90deg"), matrix([0, 0, 1]))'],seealso:["matrix","rotationMatrix"]},ege={name:"rotationMatrix",category:"Matrix",syntax:["rotationMatrix(theta)","rotationMatrix(theta, v)","rotationMatrix(theta, v, format)"],description:"Returns a 2-D rotation matrix (2x2) for a given angle (in radians). Returns a 2-D rotation matrix (3x3) of a given angle (in radians) around given axis.",examples:["rotationMatrix(pi / 2)",'rotationMatrix(unit("45deg"), [0, 0, 1])','rotationMatrix(1, matrix([0, 0, 1]), "sparse")'],seealso:["cos","sin"]},tge={name:"row",category:"Matrix",syntax:["row(x, index)"],description:"Return a row from a matrix or array.",examples:["A = [[1, 2], [3, 4]]","row(A, 1)","row(A, 2)"],seealso:["column","matrixFromRows"]},rge={name:"size",category:"Matrix",syntax:["size(x)"],description:"Calculate the size of a matrix.",examples:["size(2.3)",'size("hello world")',"a = [1, 2; 3, 4; 5, 6]","size(a)","size(1:6)"],seealso:["concat","count","det","diag","identity","inv","ones","range","squeeze","subset","trace","transpose","zeros"]},nge={name:"sort",category:"Matrix",syntax:["sort(x)","sort(x, compare)"],description:'Sort the items in a matrix. Compare can be a string "asc", "desc", "natural", or a custom sort function.',examples:["sort([5, 10, 1])",'sort(["C", "B", "A", "D"], "natural")',"sortByLength(a, b) = size(a)[1] - size(b)[1]",'sort(["Langdon", "Tom", "Sara"], sortByLength)','sort(["10", "1", "2"], "natural")'],seealso:["map","filter","forEach"]},ige={name:"squeeze",category:"Matrix",syntax:["squeeze(x)"],description:"Remove inner and outer singleton dimensions from a matrix.",examples:["a = zeros(3,2,1)","size(squeeze(a))","b = zeros(1,1,3)","size(squeeze(b))"],seealso:["concat","det","diag","identity","inv","ones","range","size","subset","trace","transpose","zeros"]},age={name:"subset",category:"Matrix",syntax:["value(index)","value(index) = replacement","subset(value, [index])","subset(value, [index], replacement)"],description:"Get or set a subset of the entries of a matrix or characters of a string. Indexes are one-based. There should be one index specification for each dimension of the target. Each specification can be a single index, a list of indices, or a range in colon notation `l:u`. In a range, both the lower bound l and upper bound u are included; and if a bound is omitted it defaults to the most extreme valid value. The cartesian product of the indices specified in each dimension determines the target of the operation.",examples:["d = [1, 2; 3, 4]","e = []","e[1, 1:2] = [5, 6]","e[2, :] = [7, 8]","f = d * e","f[2, 1]","f[:, 1]","f[[1,2], [1,3]] = [9, 10; 11, 12]","f"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","trace","transpose","zeros"]},sge={name:"trace",category:"Matrix",syntax:["trace(A)"],description:"Calculate the trace of a matrix: the sum of the elements on the main diagonal of a square matrix.",examples:["A = [1, 2, 3; -1, 2, 3; 2, 0, 3]","trace(A)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","transpose","zeros"]},oge={name:"transpose",category:"Matrix",syntax:["x'","transpose(x)"],description:"Transpose a matrix",examples:["a = [1, 2, 3; 4, 5, 6]","a'","transpose(a)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","zeros"]},uge={name:"zeros",category:"Matrix",syntax:["zeros(m)","zeros(m, n)","zeros(m, n, p, ...)","zeros([m])","zeros([m, n])","zeros([m, n, p, ...])"],description:"Create a matrix containing zeros.",examples:["zeros(3)","zeros(3, 5)","a = [1, 2, 3; 4, 5, 6]","zeros(size(a))"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose"]},lge={name:"fft",category:"Matrix",syntax:["fft(x)"],description:"Calculate N-dimensional fourier transform",examples:["fft([[1, 0], [1, 0]])"],seealso:["ifft"]},cge={name:"ifft",category:"Matrix",syntax:["ifft(x)"],description:"Calculate N-dimensional inverse fourier transform",examples:["ifft([[2, 2], [0, 0]])"],seealso:["fft"]},fge={name:"combinations",category:"Probability",syntax:["combinations(n, k)"],description:"Compute the number of combinations of n items taken k at a time",examples:["combinations(7, 5)"],seealso:["combinationsWithRep","permutations","factorial"]},hge={name:"combinationsWithRep",category:"Probability",syntax:["combinationsWithRep(n, k)"],description:"Compute the number of combinations of n items taken k at a time with replacements.",examples:["combinationsWithRep(7, 5)"],seealso:["combinations","permutations","factorial"]},dge={name:"factorial",category:"Probability",syntax:["n!","factorial(n)"],description:"Compute the factorial of a value",examples:["5!","5 * 4 * 3 * 2 * 1","3!"],seealso:["combinations","combinationsWithRep","permutations","gamma"]},pge={name:"gamma",category:"Probability",syntax:["gamma(n)"],description:"Compute the gamma function. For small values, the Lanczos approximation is used, and for large values the extended Stirling approximation.",examples:["gamma(4)","3!","gamma(1/2)","sqrt(pi)"],seealso:["factorial"]},mge={name:"lgamma",category:"Probability",syntax:["lgamma(n)"],description:"Logarithm of the gamma function for real, positive numbers and complex numbers, using Lanczos approximation for numbers and Stirling series for complex numbers.",examples:["lgamma(4)","lgamma(1/2)","lgamma(i)","lgamma(complex(1.1, 2))"],seealso:["gamma"]},vge={name:"kldivergence",category:"Probability",syntax:["kldivergence(x, y)"],description:"Calculate the Kullback-Leibler (KL) divergence between two distributions.",examples:["kldivergence([0.7,0.5,0.4], [0.2,0.9,0.5])"],seealso:[]},gge={name:"multinomial",category:"Probability",syntax:["multinomial(A)"],description:"Multinomial Coefficients compute the number of ways of picking a1, a2, ..., ai unordered outcomes from `n` possibilities. multinomial takes one array of integers as an argument. The following condition must be enforced: every ai > 0.",examples:["multinomial([1, 2, 1])"],seealso:["combinations","factorial"]},yge={name:"permutations",category:"Probability",syntax:["permutations(n)","permutations(n, k)"],description:"Compute the number of permutations of n items taken k at a time",examples:["permutations(5)","permutations(5, 3)"],seealso:["combinations","combinationsWithRep","factorial"]},bge={name:"pickRandom",category:"Probability",syntax:["pickRandom(array)","pickRandom(array, number)","pickRandom(array, weights)","pickRandom(array, number, weights)","pickRandom(array, weights, number)"],description:"Pick a random entry from a given array.",examples:["pickRandom(0:10)","pickRandom([1, 3, 1, 6])","pickRandom([1, 3, 1, 6], 2)","pickRandom([1, 3, 1, 6], [2, 3, 2, 1])","pickRandom([1, 3, 1, 6], 2, [2, 3, 2, 1])","pickRandom([1, 3, 1, 6], [2, 3, 2, 1], 2)"],seealso:["random","randomInt"]},xge={name:"random",category:"Probability",syntax:["random()","random(max)","random(min, max)","random(size)","random(size, max)","random(size, min, max)"],description:"Return a random number.",examples:["random()","random(10, 20)","random([2, 3])"],seealso:["pickRandom","randomInt"]},wge={name:"randomInt",category:"Probability",syntax:["randomInt(max)","randomInt(min, max)","randomInt(size)","randomInt(size, max)","randomInt(size, min, max)"],description:"Return a random integer number",examples:["randomInt(10, 20)","randomInt([2, 3], 10)"],seealso:["pickRandom","random"]},Sge={name:"compare",category:"Relational",syntax:["compare(x, y)"],description:"Compare two values. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:["compare(2, 3)","compare(3, 2)","compare(2, 2)","compare(5cm, 40mm)","compare(2, [1, 2, 3])"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compareNatural","compareText"]},_ge={name:"compareNatural",category:"Relational",syntax:["compareNatural(x, y)"],description:"Compare two values of any type in a deterministic, natural way. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:["compareNatural(2, 3)","compareNatural(3, 2)","compareNatural(2, 2)","compareNatural(5cm, 40mm)",'compareNatural("2", "10")',"compareNatural(2 + 3i, 2 + 4i)","compareNatural([1, 2, 4], [1, 2, 3])","compareNatural([1, 5], [1, 2, 3])","compareNatural([1, 2], [1, 2])","compareNatural({a: 2}, {a: 4})"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compare","compareText"]},Age={name:"compareText",category:"Relational",syntax:["compareText(x, y)"],description:"Compare two strings lexically. Comparison is case sensitive. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:['compareText("B", "A")','compareText("A", "B")','compareText("A", "A")','compareText("2", "10")','compare("2", "10")',"compare(2, 10)",'compareNatural("2", "10")','compareText("B", ["A", "B", "C"])'],seealso:["compare","compareNatural"]},Dge={name:"deepEqual",category:"Relational",syntax:["deepEqual(x, y)"],description:"Check equality of two matrices element wise. Returns true if the size of both matrices is equal and when and each of the elements are equal.",examples:["deepEqual([1,3,4], [1,3,4])","deepEqual([1,3,4], [1,3])"],seealso:["equal","unequal","smaller","larger","smallerEq","largerEq","compare"]},Ege={name:"equal",category:"Relational",syntax:["x == y","equal(x, y)"],description:"Check equality of two values. Returns true if the values are equal, and false if not.",examples:["2+2 == 3","2+2 == 4","a = 3.2","b = 6-2.8","a == b","50cm == 0.5m"],seealso:["unequal","smaller","larger","smallerEq","largerEq","compare","deepEqual","equalText"]},Nge={name:"equalText",category:"Relational",syntax:["equalText(x, y)"],description:"Check equality of two strings. Comparison is case sensitive. Returns true if the values are equal, and false if not.",examples:['equalText("Hello", "Hello")','equalText("a", "A")','equal("2e3", "2000")','equalText("2e3", "2000")','equalText("B", ["A", "B", "C"])'],seealso:["compare","compareNatural","compareText","equal"]},Cge={name:"larger",category:"Relational",syntax:["x > y","larger(x, y)"],description:"Check if value x is larger than y. Returns true if x is larger than y, and false if not.",examples:["2 > 3","5 > 2*2","a = 3.3","b = 6-2.8","(a > b)","(b < a)","5 cm > 2 inch"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compare"]},Mge={name:"largerEq",category:"Relational",syntax:["x >= y","largerEq(x, y)"],description:"Check if value x is larger or equal to y. Returns true if x is larger or equal to y, and false if not.",examples:["2 >= 1+1","2 > 1+1","a = 3.2","b = 6-2.8","(a >= b)"],seealso:["equal","unequal","smallerEq","smaller","compare"]},Tge={name:"smaller",category:"Relational",syntax:["x < y","smaller(x, y)"],description:"Check if value x is smaller than value y. Returns true if x is smaller than y, and false if not.",examples:["2 < 3","5 < 2*2","a = 3.3","b = 6-2.8","(a < b)","5 cm < 2 inch"],seealso:["equal","unequal","larger","smallerEq","largerEq","compare"]},Oge={name:"smallerEq",category:"Relational",syntax:["x <= y","smallerEq(x, y)"],description:"Check if value x is smaller or equal to value y. Returns true if x is smaller than y, and false if not.",examples:["2 <= 1+1","2 < 1+1","a = 3.2","b = 6-2.8","(a <= b)"],seealso:["equal","unequal","larger","smaller","largerEq","compare"]},Fge={name:"unequal",category:"Relational",syntax:["x != y","unequal(x, y)"],description:"Check unequality of two values. Returns true if the values are unequal, and false if they are equal.",examples:["2+2 != 3","2+2 != 4","a = 3.2","b = 6-2.8","a != b","50cm != 0.5m","5 cm != 2 inch"],seealso:["equal","smaller","larger","smallerEq","largerEq","compare","deepEqual"]},Rge={name:"setCartesian",category:"Set",syntax:["setCartesian(set1, set2)"],description:"Create the cartesian product of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays and the values will be sorted in ascending order before the operation.",examples:["setCartesian([1, 2], [3, 4])"],seealso:["setUnion","setIntersect","setDifference","setPowerset"]},Pge={name:"setDifference",category:"Set",syntax:["setDifference(set1, set2)"],description:"Create the difference of two (multi)sets: every element of set1, that is not the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setDifference([1, 2, 3, 4], [3, 4, 5, 6])","setDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setIntersect","setSymDifference"]},kge={name:"setDistinct",category:"Set",syntax:["setDistinct(set)"],description:"Collect the distinct elements of a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setDistinct([1, 1, 1, 2, 2, 3])"],seealso:["setMultiplicity"]},Bge={name:"setIntersect",category:"Set",syntax:["setIntersect(set1, set2)"],description:"Create the intersection of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setIntersect([1, 2, 3, 4], [3, 4, 5, 6])","setIntersect([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setDifference"]},Ige={name:"setIsSubset",category:"Set",syntax:["setIsSubset(set1, set2)"],description:"Check whether a (multi)set is a subset of another (multi)set: every element of set1 is the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setIsSubset([1, 2], [3, 4, 5, 6])","setIsSubset([3, 4], [3, 4, 5, 6])"],seealso:["setUnion","setIntersect","setDifference"]},Lge={name:"setMultiplicity",category:"Set",syntax:["setMultiplicity(element, set)"],description:"Count the multiplicity of an element in a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setMultiplicity(1, [1, 2, 2, 4])","setMultiplicity(2, [1, 2, 2, 4])"],seealso:["setDistinct","setSize"]},$ge={name:"setPowerset",category:"Set",syntax:["setPowerset(set)"],description:"Create the powerset of a (multi)set: the powerset contains very possible subsets of a (multi)set. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setPowerset([1, 2, 3])"],seealso:["setCartesian"]},zge={name:"setSize",category:"Set",syntax:["setSize(set)","setSize(set, unique)"],description:'Count the number of elements of a (multi)set. When the second parameter "unique" is true, count only the unique values. A multi-dimension array will be converted to a single-dimension array before the operation.',examples:["setSize([1, 2, 2, 4])","setSize([1, 2, 2, 4], true)"],seealso:["setUnion","setIntersect","setDifference"]},qge={name:"setSymDifference",category:"Set",syntax:["setSymDifference(set1, set2)"],description:"Create the symmetric difference of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setSymDifference([1, 2, 3, 4], [3, 4, 5, 6])","setSymDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setIntersect","setDifference"]},Uge={name:"setUnion",category:"Set",syntax:["setUnion(set1, set2)"],description:"Create the union of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setUnion([1, 2, 3, 4], [3, 4, 5, 6])","setUnion([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setIntersect","setDifference"]},Hge={name:"zpk2tf",category:"Signal",syntax:["zpk2tf(z, p, k)"],description:"Compute the transfer function of a zero-pole-gain model.",examples:["zpk2tf([1, 2], [-1, -2], 1)","zpk2tf([1, 2], [-1, -2])","zpk2tf([1 - 3i, 2 + 2i], [-1, -2])"],seealso:[]},Wge={name:"freqz",category:"Signal",syntax:["freqz(b, a)","freqz(b, a, w)"],description:"Calculates the frequency response of a filter given its numerator and denominator coefficients.",examples:["freqz([1, 2], [1, 2, 3])","freqz([1, 2], [1, 2, 3], [0, 1])","freqz([1, 2], [1, 2, 3], 512)"],seealso:[]},Vge={name:"erf",category:"Special",syntax:["erf(x)"],description:"Compute the erf function of a value using a rational Chebyshev approximations for different intervals of x",examples:["erf(0.2)","erf(-0.5)","erf(4)"],seealso:[]},Yge={name:"zeta",category:"Special",syntax:["zeta(s)"],description:"Compute the Riemann Zeta Function using an infinite series and Riemanns Functional Equation for the entire complex plane",examples:["zeta(0.2)","zeta(-0.5)","zeta(4)"],seealso:[]},jge={name:"mad",category:"Statistics",syntax:["mad(a, b, c, ...)","mad(A)"],description:"Compute the median absolute deviation of a matrix or a list with values. The median absolute deviation is defined as the median of the absolute deviations from the median.",examples:["mad(10, 20, 30)","mad([1, 2, 3])"],seealso:["mean","median","std","abs"]},Gge={name:"max",category:"Statistics",syntax:["max(a, b, c, ...)","max(A)","max(A, dimension)"],description:"Compute the maximum value of a list of values.",examples:["max(2, 3, 4, 1)","max([2, 3, 4, 1])","max([2, 5; 4, 3])","max([2, 5; 4, 3], 1)","max([2, 5; 4, 3], 2)","max(2.7, 7.1, -4.5, 2.0, 4.1)","min(2.7, 7.1, -4.5, 2.0, 4.1)"],seealso:["mean","median","min","prod","std","sum","variance"]},Xge={name:"mean",category:"Statistics",syntax:["mean(a, b, c, ...)","mean(A)","mean(A, dimension)"],description:"Compute the arithmetic mean of a list of values.",examples:["mean(2, 3, 4, 1)","mean([2, 3, 4, 1])","mean([2, 5; 4, 3])","mean([2, 5; 4, 3], 1)","mean([2, 5; 4, 3], 2)","mean([1.0, 2.7, 3.2, 4.0])"],seealso:["max","median","min","prod","std","sum","variance"]},Zge={name:"median",category:"Statistics",syntax:["median(a, b, c, ...)","median(A)"],description:"Compute the median of all values. The values are sorted and the middle value is returned. In case of an even number of values, the average of the two middle values is returned.",examples:["median(5, 2, 7)","median([3, -1, 5, 7])"],seealso:["max","mean","min","prod","std","sum","variance","quantileSeq"]},Kge={name:"min",category:"Statistics",syntax:["min(a, b, c, ...)","min(A)","min(A, dimension)"],description:"Compute the minimum value of a list of values.",examples:["min(2, 3, 4, 1)","min([2, 3, 4, 1])","min([2, 5; 4, 3])","min([2, 5; 4, 3], 1)","min([2, 5; 4, 3], 2)","min(2.7, 7.1, -4.5, 2.0, 4.1)","max(2.7, 7.1, -4.5, 2.0, 4.1)"],seealso:["max","mean","median","prod","std","sum","variance"]},Jge={name:"mode",category:"Statistics",syntax:["mode(a, b, c, ...)","mode(A)","mode(A, a, b, B, c, ...)"],description:"Computes the mode of all values as an array. In case mode being more than one, multiple values are returned in an array.",examples:["mode(2, 1, 4, 3, 1)","mode([1, 2.7, 3.2, 4, 2.7])","mode(1, 4, 6, 1, 6)"],seealso:["max","mean","min","median","prod","std","sum","variance"]},Qge={name:"prod",category:"Statistics",syntax:["prod(a, b, c, ...)","prod(A)"],description:"Compute the product of all values.",examples:["prod(2, 3, 4)","prod([2, 3, 4])","prod([2, 5; 4, 3])"],seealso:["max","mean","min","median","min","std","sum","variance"]},e0e={name:"quantileSeq",category:"Statistics",syntax:["quantileSeq(A, prob[, sorted])","quantileSeq(A, [prob1, prob2, ...][, sorted])","quantileSeq(A, N[, sorted])"],description:`Compute the prob order quantile of a matrix or a list with values. The sequence is sorted and the middle value is returned. Supported types of sequence values are: Number, BigNumber, Unit Supported types of probablity are: Number, BigNumber. -In case of a (multi dimensional) array or matrix, the prob order quantile of all elements will be calculated.`,examples:["quantileSeq([3, -1, 5, 7], 0.5)","quantileSeq([3, -1, 5, 7], [1/3, 2/3])","quantileSeq([3, -1, 5, 7], 2)","quantileSeq([-1, 3, 5, 7], 0.5, true)"],seealso:["mean","median","min","max","prod","std","sum","variance"]},Mge={name:"std",category:"Statistics",syntax:["std(a, b, c, ...)","std(A)","std(A, dimension)","std(A, normalization)","std(A, dimension, normalization)"],description:'Compute the standard deviation of all values, defined as std(A) = sqrt(variance(A)). Optional parameter normalization can be "unbiased" (default), "uncorrected", or "biased".',examples:["std(2, 4, 6)","std([2, 4, 6, 8])",'std([2, 4, 6, 8], "uncorrected")','std([2, 4, 6, 8], "biased")',"std([1, 2, 3; 4, 5, 6])"],seealso:["max","mean","min","median","prod","sum","variance"]},Tge={name:"cumsum",category:"Statistics",syntax:["cumsum(a, b, c, ...)","cumsum(A)"],description:"Compute the cumulative sum of all values.",examples:["cumsum(2, 3, 4, 1)","cumsum([2, 3, 4, 1])","cumsum([1, 2; 3, 4])","cumsum([1, 2; 3, 4], 1)","cumsum([1, 2; 3, 4], 2)"],seealso:["max","mean","median","min","prod","std","sum","variance"]},Oge={name:"sum",category:"Statistics",syntax:["sum(a, b, c, ...)","sum(A)","sum(A, dimension)"],description:"Compute the sum of all values.",examples:["sum(2, 3, 4, 1)","sum([2, 3, 4, 1])","sum([2, 5; 4, 3])"],seealso:["max","mean","median","min","prod","std","sum","variance"]},Fge={name:"variance",category:"Statistics",syntax:["variance(a, b, c, ...)","variance(A)","variance(A, dimension)","variance(A, normalization)","variance(A, dimension, normalization)"],description:'Compute the variance of all values. Optional parameter normalization can be "unbiased" (default), "uncorrected", or "biased".',examples:["variance(2, 4, 6)","variance([2, 4, 6, 8])",'variance([2, 4, 6, 8], "uncorrected")','variance([2, 4, 6, 8], "biased")',"variance([1, 2, 3; 4, 5, 6])"],seealso:["max","mean","min","median","min","prod","std","sum"]},Pge={name:"corr",category:"Statistics",syntax:["corr(A,B)"],description:"Compute the correlation coefficient of a two list with values, For matrices, the matrix correlation coefficient is calculated.",examples:["corr([2, 4, 6, 8],[1, 2, 3, 6])","corr(matrix([[1, 2.2, 3, 4.8, 5], [1, 2, 3, 4, 5]]), matrix([[4, 5.3, 6.6, 7, 8], [1, 2, 3, 4, 5]]))"],seealso:["max","mean","min","median","min","prod","std","sum"]},Rge={name:"acos",category:"Trigonometry",syntax:["acos(x)"],description:"Compute the inverse cosine of a value in radians.",examples:["acos(0.5)","acos(cos(2.3))"],seealso:["cos","atan","asin"]},Ige={name:"acosh",category:"Trigonometry",syntax:["acosh(x)"],description:"Calculate the hyperbolic arccos of a value, defined as `acosh(x) = ln(sqrt(x^2 - 1) + x)`.",examples:["acosh(1.5)"],seealso:["cosh","asinh","atanh"]},Bge={name:"acot",category:"Trigonometry",syntax:["acot(x)"],description:"Calculate the inverse cotangent of a value.",examples:["acot(0.5)","acot(cot(0.5))","acot(2)"],seealso:["cot","atan"]},kge={name:"acoth",category:"Trigonometry",syntax:["acoth(x)"],description:"Calculate the hyperbolic arccotangent of a value, defined as `acoth(x) = (ln((x+1)/x) + ln(x/(x-1))) / 2`.",examples:["acoth(2)","acoth(0.5)"],seealso:["acsch","asech"]},Lge={name:"acsc",category:"Trigonometry",syntax:["acsc(x)"],description:"Calculate the inverse cotangent of a value.",examples:["acsc(2)","acsc(csc(0.5))","acsc(0.5)"],seealso:["csc","asin","asec"]},$ge={name:"acsch",category:"Trigonometry",syntax:["acsch(x)"],description:"Calculate the hyperbolic arccosecant of a value, defined as `acsch(x) = ln(1/x + sqrt(1/x^2 + 1))`.",examples:["acsch(0.5)"],seealso:["asech","acoth"]},zge={name:"asec",category:"Trigonometry",syntax:["asec(x)"],description:"Calculate the inverse secant of a value.",examples:["asec(0.5)","asec(sec(0.5))","asec(2)"],seealso:["acos","acot","acsc"]},qge={name:"asech",category:"Trigonometry",syntax:["asech(x)"],description:"Calculate the inverse secant of a value.",examples:["asech(0.5)"],seealso:["acsch","acoth"]},Uge={name:"asin",category:"Trigonometry",syntax:["asin(x)"],description:"Compute the inverse sine of a value in radians.",examples:["asin(0.5)","asin(sin(0.5))"],seealso:["sin","acos","atan"]},Hge={name:"asinh",category:"Trigonometry",syntax:["asinh(x)"],description:"Calculate the hyperbolic arcsine of a value, defined as `asinh(x) = ln(x + sqrt(x^2 + 1))`.",examples:["asinh(0.5)"],seealso:["acosh","atanh"]},Wge={name:"atan",category:"Trigonometry",syntax:["atan(x)"],description:"Compute the inverse tangent of a value in radians.",examples:["atan(0.5)","atan(tan(0.5))"],seealso:["tan","acos","asin"]},Vge={name:"atan2",category:"Trigonometry",syntax:["atan2(y, x)"],description:"Computes the principal value of the arc tangent of y/x in radians.",examples:["atan2(2, 2) / pi","angle = 60 deg in rad","x = cos(angle)","y = sin(angle)","atan2(y, x)"],seealso:["sin","cos","tan"]},Yge={name:"atanh",category:"Trigonometry",syntax:["atanh(x)"],description:"Calculate the hyperbolic arctangent of a value, defined as `atanh(x) = ln((1 + x)/(1 - x)) / 2`.",examples:["atanh(0.5)"],seealso:["acosh","asinh"]},jge={name:"cos",category:"Trigonometry",syntax:["cos(x)"],description:"Compute the cosine of x in radians.",examples:["cos(2)","cos(pi / 4) ^ 2","cos(180 deg)","cos(60 deg)","sin(0.2)^2 + cos(0.2)^2"],seealso:["acos","sin","tan"]},Gge={name:"cosh",category:"Trigonometry",syntax:["cosh(x)"],description:"Compute the hyperbolic cosine of x in radians.",examples:["cosh(0.5)"],seealso:["sinh","tanh","coth"]},Xge={name:"cot",category:"Trigonometry",syntax:["cot(x)"],description:"Compute the cotangent of x in radians. Defined as 1/tan(x)",examples:["cot(2)","1 / tan(2)"],seealso:["sec","csc","tan"]},Zge={name:"coth",category:"Trigonometry",syntax:["coth(x)"],description:"Compute the hyperbolic cotangent of x in radians.",examples:["coth(2)","1 / tanh(2)"],seealso:["sech","csch","tanh"]},Kge={name:"csc",category:"Trigonometry",syntax:["csc(x)"],description:"Compute the cosecant of x in radians. Defined as 1/sin(x)",examples:["csc(2)","1 / sin(2)"],seealso:["sec","cot","sin"]},Jge={name:"csch",category:"Trigonometry",syntax:["csch(x)"],description:"Compute the hyperbolic cosecant of x in radians. Defined as 1/sinh(x)",examples:["csch(2)","1 / sinh(2)"],seealso:["sech","coth","sinh"]},Qge={name:"sec",category:"Trigonometry",syntax:["sec(x)"],description:"Compute the secant of x in radians. Defined as 1/cos(x)",examples:["sec(2)","1 / cos(2)"],seealso:["cot","csc","cos"]},e0e={name:"sech",category:"Trigonometry",syntax:["sech(x)"],description:"Compute the hyperbolic secant of x in radians. Defined as 1/cosh(x)",examples:["sech(2)","1 / cosh(2)"],seealso:["coth","csch","cosh"]},t0e={name:"sin",category:"Trigonometry",syntax:["sin(x)"],description:"Compute the sine of x in radians.",examples:["sin(2)","sin(pi / 4) ^ 2","sin(90 deg)","sin(30 deg)","sin(0.2)^2 + cos(0.2)^2"],seealso:["asin","cos","tan"]},r0e={name:"sinh",category:"Trigonometry",syntax:["sinh(x)"],description:"Compute the hyperbolic sine of x in radians.",examples:["sinh(0.5)"],seealso:["cosh","tanh"]},n0e={name:"tan",category:"Trigonometry",syntax:["tan(x)"],description:"Compute the tangent of x in radians.",examples:["tan(0.5)","sin(0.5) / cos(0.5)","tan(pi / 4)","tan(45 deg)"],seealso:["atan","sin","cos"]},i0e={name:"tanh",category:"Trigonometry",syntax:["tanh(x)"],description:"Compute the hyperbolic tangent of x in radians.",examples:["tanh(0.5)","sinh(0.5) / cosh(0.5)"],seealso:["sinh","cosh"]},a0e={name:"to",category:"Units",syntax:["x to unit","to(x, unit)"],description:"Change the unit of a value.",examples:["5 inch to cm","3.2kg to g","16 bytes in bits"],seealso:[]},s0e={name:"bin",category:"Utils",syntax:["bin(value)"],description:"Format a number as binary",examples:["bin(2)"],seealso:["oct","hex"]},o0e={name:"clone",category:"Utils",syntax:["clone(x)"],description:"Clone a variable. Creates a copy of primitive variables,and a deep copy of matrices",examples:["clone(3.5)","clone(2 - 4i)","clone(45 deg)","clone([1, 2; 3, 4])",'clone("hello world")'],seealso:[]},u0e={name:"format",category:"Utils",syntax:["format(value)","format(value, precision)"],description:"Format a value of any type as string.",examples:["format(2.3)","format(3 - 4i)","format([])","format(pi, 3)"],seealso:["print"]},l0e={name:"hasNumericValue",category:"Utils",syntax:["hasNumericValue(x)"],description:"Test whether a value is an numeric value. In case of a string, true is returned if the string contains a numeric value.",examples:["hasNumericValue(2)",'hasNumericValue("2")','isNumeric("2")',"hasNumericValue(0)","hasNumericValue(bignumber(500))","hasNumericValue(fraction(0.125))","hasNumericValue(2 + 3i)",'hasNumericValue([2.3, "foo", false])'],seealso:["isInteger","isZero","isNegative","isPositive","isNaN","isNumeric"]},c0e={name:"hex",category:"Utils",syntax:["hex(value)"],description:"Format a number as hexadecimal",examples:["hex(240)"],seealso:["bin","oct"]},f0e={name:"isInteger",category:"Utils",syntax:["isInteger(x)"],description:"Test whether a value is an integer number.",examples:["isInteger(2)","isInteger(3.5)","isInteger([3, 0.5, -2])"],seealso:["isNegative","isNumeric","isPositive","isZero"]},h0e={name:"isNaN",category:"Utils",syntax:["isNaN(x)"],description:"Test whether a value is NaN (not a number)",examples:["isNaN(2)","isNaN(0 / 0)","isNaN(NaN)","isNaN(Infinity)"],seealso:["isNegative","isNumeric","isPositive","isZero"]},d0e={name:"isNegative",category:"Utils",syntax:["isNegative(x)"],description:"Test whether a value is negative: smaller than zero.",examples:["isNegative(2)","isNegative(0)","isNegative(-4)","isNegative([3, 0.5, -2])"],seealso:["isInteger","isNumeric","isPositive","isZero"]},p0e={name:"isNumeric",category:"Utils",syntax:["isNumeric(x)"],description:"Test whether a value is a numeric value. Returns true when the input is a number, BigNumber, Fraction, or boolean.",examples:["isNumeric(2)",'isNumeric("2")','hasNumericValue("2")',"isNumeric(0)","isNumeric(bignumber(500))","isNumeric(fraction(0.125))","isNumeric(2 + 3i)",'isNumeric([2.3, "foo", false])'],seealso:["isInteger","isZero","isNegative","isPositive","isNaN","hasNumericValue"]},m0e={name:"isPositive",category:"Utils",syntax:["isPositive(x)"],description:"Test whether a value is positive: larger than zero.",examples:["isPositive(2)","isPositive(0)","isPositive(-4)","isPositive([3, 0.5, -2])"],seealso:["isInteger","isNumeric","isNegative","isZero"]},v0e={name:"isPrime",category:"Utils",syntax:["isPrime(x)"],description:"Test whether a value is prime: has no divisors other than itself and one.",examples:["isPrime(3)","isPrime(-2)","isPrime([2, 17, 100])"],seealso:["isInteger","isNumeric","isNegative","isZero"]},g0e={name:"isZero",category:"Utils",syntax:["isZero(x)"],description:"Test whether a value is zero.",examples:["isZero(2)","isZero(0)","isZero(-4)","isZero([3, 0, -2, 0])"],seealso:["isInteger","isNumeric","isNegative","isPositive"]},y0e={name:"numeric",category:"Utils",syntax:["numeric(x)"],description:"Convert a numeric input to a specific numeric type: number, BigNumber, or Fraction.",examples:['numeric("4")','numeric("4", "number")','numeric("4", "BigNumber")','numeric("4", "Fraction")','numeric(4, "Fraction")','numeric(fraction(2, 5), "number")'],seealso:["number","fraction","bignumber","string","format"]},b0e={name:"oct",category:"Utils",syntax:["oct(value)"],description:"Format a number as octal",examples:["oct(56)"],seealso:["bin","hex"]},x0e={name:"print",category:"Utils",syntax:["print(template, values)","print(template, values, precision)"],description:"Interpolate values into a string template.",examples:['print("Lucy is $age years old", {age: 5})','print("The value of pi is $pi", {pi: pi}, 3)','print("Hello, $user.name!", {user: {name: "John"}})','print("Values: $1, $2, $3", [6, 9, 4])'],seealso:["format"]},w0e={name:"typeOf",category:"Utils",syntax:["typeOf(x)"],description:"Get the type of a variable.",examples:["typeOf(3.5)","typeOf(2 - 4i)","typeOf(45 deg)",'typeOf("hello world")'],seealso:["getMatrixDataType"]},S0e={name:"solveODE",category:"Numeric",syntax:["solveODE(func, tspan, y0)","solveODE(func, tspan, y0, options)"],description:"Numerical Integration of Ordinary Differential Equations.",examples:["f(t,y) = y","tspan = [0, 4]","solveODE(f, tspan, 1)","solveODE(f, tspan, [1, 2])",'solveODE(f, tspan, 1, { method:"RK23", maxStep:0.1 })'],seealso:["derivative","simplifyCore"]},_0e={bignumber:dpe,boolean:ppe,complex:mpe,createUnit:vpe,fraction:gpe,index:ype,matrix:bpe,number:xpe,sparse:wpe,splitUnit:Spe,string:_pe,unit:Ape,e:VC,E:VC,false:Jde,i:Qde,Infinity:epe,LN2:rpe,LN10:tpe,LOG2E:ipe,LOG10E:npe,NaN:ape,null:spe,pi:YC,PI:YC,phi:ope,SQRT1_2:upe,SQRT2:lpe,tau:cpe,true:fpe,version:hpe,speedOfLight:{description:"Speed of light in vacuum",examples:["speedOfLight"]},gravitationConstant:{description:"Newtonian constant of gravitation",examples:["gravitationConstant"]},planckConstant:{description:"Planck constant",examples:["planckConstant"]},reducedPlanckConstant:{description:"Reduced Planck constant",examples:["reducedPlanckConstant"]},magneticConstant:{description:"Magnetic constant (vacuum permeability)",examples:["magneticConstant"]},electricConstant:{description:"Electric constant (vacuum permeability)",examples:["electricConstant"]},vacuumImpedance:{description:"Characteristic impedance of vacuum",examples:["vacuumImpedance"]},coulomb:{description:"Coulomb's constant",examples:["coulomb"]},elementaryCharge:{description:"Elementary charge",examples:["elementaryCharge"]},bohrMagneton:{description:"Borh magneton",examples:["bohrMagneton"]},conductanceQuantum:{description:"Conductance quantum",examples:["conductanceQuantum"]},inverseConductanceQuantum:{description:"Inverse conductance quantum",examples:["inverseConductanceQuantum"]},magneticFluxQuantum:{description:"Magnetic flux quantum",examples:["magneticFluxQuantum"]},nuclearMagneton:{description:"Nuclear magneton",examples:["nuclearMagneton"]},klitzing:{description:"Von Klitzing constant",examples:["klitzing"]},bohrRadius:{description:"Borh radius",examples:["bohrRadius"]},classicalElectronRadius:{description:"Classical electron radius",examples:["classicalElectronRadius"]},electronMass:{description:"Electron mass",examples:["electronMass"]},fermiCoupling:{description:"Fermi coupling constant",examples:["fermiCoupling"]},fineStructure:{description:"Fine-structure constant",examples:["fineStructure"]},hartreeEnergy:{description:"Hartree energy",examples:["hartreeEnergy"]},protonMass:{description:"Proton mass",examples:["protonMass"]},deuteronMass:{description:"Deuteron Mass",examples:["deuteronMass"]},neutronMass:{description:"Neutron mass",examples:["neutronMass"]},quantumOfCirculation:{description:"Quantum of circulation",examples:["quantumOfCirculation"]},rydberg:{description:"Rydberg constant",examples:["rydberg"]},thomsonCrossSection:{description:"Thomson cross section",examples:["thomsonCrossSection"]},weakMixingAngle:{description:"Weak mixing angle",examples:["weakMixingAngle"]},efimovFactor:{description:"Efimov factor",examples:["efimovFactor"]},atomicMass:{description:"Atomic mass constant",examples:["atomicMass"]},avogadro:{description:"Avogadro's number",examples:["avogadro"]},boltzmann:{description:"Boltzmann constant",examples:["boltzmann"]},faraday:{description:"Faraday constant",examples:["faraday"]},firstRadiation:{description:"First radiation constant",examples:["firstRadiation"]},loschmidt:{description:"Loschmidt constant at T=273.15 K and p=101.325 kPa",examples:["loschmidt"]},gasConstant:{description:"Gas constant",examples:["gasConstant"]},molarPlanckConstant:{description:"Molar Planck constant",examples:["molarPlanckConstant"]},molarVolume:{description:"Molar volume of an ideal gas at T=273.15 K and p=101.325 kPa",examples:["molarVolume"]},sackurTetrode:{description:"Sackur-Tetrode constant at T=1 K and p=101.325 kPa",examples:["sackurTetrode"]},secondRadiation:{description:"Second radiation constant",examples:["secondRadiation"]},stefanBoltzmann:{description:"Stefan-Boltzmann constant",examples:["stefanBoltzmann"]},wienDisplacement:{description:"Wien displacement law constant",examples:["wienDisplacement"]},molarMass:{description:"Molar mass constant",examples:["molarMass"]},molarMassC12:{description:"Molar mass constant of carbon-12",examples:["molarMassC12"]},gravity:{description:"Standard acceleration of gravity (standard acceleration of free-fall on Earth)",examples:["gravity"]},planckLength:{description:"Planck length",examples:["planckLength"]},planckMass:{description:"Planck mass",examples:["planckMass"]},planckTime:{description:"Planck time",examples:["planckTime"]},planckCharge:{description:"Planck charge",examples:["planckCharge"]},planckTemperature:{description:"Planck temperature",examples:["planckTemperature"]},derivative:Cpe,lsolve:Tpe,lsolveAll:Ope,lup:Fpe,lusolve:Ppe,leafCount:Mpe,polynomialRoot:Rpe,resolve:kpe,simplify:Lpe,simplifyConstant:$pe,simplifyCore:zpe,symbolicEqual:Upe,rationalize:Bpe,slu:qpe,usolve:Hpe,usolveAll:Wpe,qr:Ipe,abs:Vpe,add:Ype,cbrt:jpe,ceil:Gpe,cube:Xpe,divide:Zpe,dotDivide:Kpe,dotMultiply:Jpe,dotPow:Qpe,exp:eme,expm:tme,expm1:rme,fix:nme,floor:ime,gcd:ame,hypot:sme,lcm:ume,log:lme,log2:hme,log1p:fme,log10:cme,mod:dme,multiply:pme,norm:mme,nthRoot:vme,nthRoots:gme,pow:yme,round:bme,sign:xme,sqrt:wme,sqrtm:Sme,square:Nme,subtract:Eme,unaryMinus:Cme,unaryPlus:Mme,xgcd:Tme,invmod:ome,bitAnd:Ome,bitNot:Fme,bitOr:Pme,bitXor:Rme,leftShift:Ime,rightArithShift:Bme,rightLogShift:kme,bellNumbers:Lme,catalan:$me,composition:zme,stirlingS2:qme,config:Dpe,import:Npe,typed:Epe,arg:Ume,conj:Hme,re:Vme,im:Wme,evaluate:Yme,help:jme,distance:Gme,intersect:Xme,and:Zme,not:Kme,or:Jme,xor:Qme,concat:tve,count:rve,cross:nve,column:eve,ctranspose:ive,det:ave,diag:sve,diff:ove,dot:uve,getMatrixDataType:dve,identity:pve,filter:cve,flatten:fve,forEach:hve,inv:mve,pinv:vve,eigs:lve,kron:gve,matrixFromFunction:xve,matrixFromRows:wve,matrixFromColumns:bve,map:yve,ones:Sve,partitionSelect:_ve,range:Ave,resize:Nve,reshape:Dve,rotate:Eve,rotationMatrix:Cve,row:Mve,size:Tve,sort:Ove,squeeze:Fve,subset:Pve,trace:Rve,transpose:Ive,zeros:Bve,fft:kve,ifft:Lve,sylvester:_me,schur:Ame,lyap:Dme,solveODE:S0e,combinations:$ve,combinationsWithRep:zve,factorial:qve,gamma:Uve,kldivergence:Wve,lgamma:Hve,multinomial:Vve,permutations:Yve,pickRandom:jve,random:Gve,randomInt:Xve,compare:Zve,compareNatural:Kve,compareText:Jve,deepEqual:Qve,equal:ege,equalText:tge,larger:rge,largerEq:nge,smaller:ige,smallerEq:age,unequal:sge,setCartesian:oge,setDifference:uge,setDistinct:lge,setIntersect:cge,setIsSubset:fge,setMultiplicity:hge,setPowerset:dge,setSize:pge,setSymDifference:mge,setUnion:vge,zpk2tf:gge,freqz:yge,erf:bge,zeta:xge,cumsum:Tge,mad:wge,max:Sge,mean:_ge,median:Age,min:Dge,mode:Nge,prod:Ege,quantileSeq:Cge,std:Mge,sum:Oge,variance:Fge,corr:Pge,acos:Rge,acosh:Ige,acot:Bge,acoth:kge,acsc:Lge,acsch:$ge,asec:zge,asech:qge,asin:Uge,asinh:Hge,atan:Wge,atanh:Yge,atan2:Vge,cos:jge,cosh:Gge,cot:Xge,coth:Zge,csc:Kge,csch:Jge,sec:Qge,sech:e0e,sin:t0e,sinh:r0e,tan:n0e,tanh:i0e,to:a0e,clone:o0e,format:u0e,bin:s0e,oct:b0e,hex:c0e,isNaN:h0e,isInteger:f0e,isNegative:d0e,isNumeric:p0e,hasNumericValue:l0e,isPositive:m0e,isPrime:v0e,isZero:g0e,print:x0e,typeOf:w0e,numeric:y0e},jC="help",A0e=["typed","mathWithTransform","Help"],D0e=G(jC,A0e,t=>{var{typed:e,mathWithTransform:r,Help:n}=t;return e(jC,{any:function(a){var s,o=a;if(typeof a!="string"){for(s in r)if(nt(r,s)&&a===r[s]){o=s;break}}var u=ri(_0e,o);if(!u){var l=typeof o=="function"?o.name:o;throw new Error('No documentation found on "'+l+'"')}return new n(u)}})}),GC="chain",N0e=["typed","Chain"],E0e=G(GC,N0e,t=>{var{typed:e,Chain:r}=t;return e(GC,{"":function(){return new r},any:function(i){return new r(i)}})}),XC="det",C0e=["typed","matrix","subtractScalar","multiply","divideScalar","isZero","unaryMinus"],M0e=G(XC,C0e,t=>{var{typed:e,matrix:r,subtractScalar:n,multiply:i,divideScalar:a,isZero:s,unaryMinus:o}=t;return e(XC,{any:function(c){return xt(c)},"Array | Matrix":function(c){var f;switch(dt(c)?f=c.size():Array.isArray(c)?(c=r(c),f=c.size()):f=[],f.length){case 0:return xt(c);case 1:if(f[0]===1)return xt(c.valueOf()[0]);if(f[0]===0)return 1;throw new RangeError("Matrix must be square (size: "+Pt(f)+")");case 2:{var h=f[0],p=f[1];if(h===p)return u(c.clone().valueOf(),h);if(p===0)return 1;throw new RangeError("Matrix must be square (size: "+Pt(f)+")")}default:throw new RangeError("Matrix must be two dimensional (size: "+Pt(f)+")")}}});function u(l,c,f){if(c===1)return xt(l[0][0]);if(c===2)return n(i(l[0][0],l[1][1]),i(l[1][0],l[0][1]));for(var h=!1,p=new Array(c).fill(0).map((C,E)=>E),g=0;g{var{typed:e,matrix:r,divideScalar:n,addScalar:i,multiply:a,unaryMinus:s,det:o,identity:u,abs:l}=t;return e(ZC,{"Array | Matrix":function(h){var p=dt(h)?h.size():Nt(h);switch(p.length){case 1:if(p[0]===1)return dt(h)?r([n(1,h.valueOf()[0])]):[n(1,h[0])];throw new RangeError("Matrix must be square (size: "+Pt(p)+")");case 2:{var g=p[0],m=p[1];if(g===m)return dt(h)?r(c(h.valueOf(),g,m),h.storage()):c(h,g,m);throw new RangeError("Matrix must be square (size: "+Pt(p)+")")}default:throw new RangeError("Matrix must be two dimensional (size: "+Pt(p)+")")}},any:function(h){return n(1,h)}});function c(f,h,p){var g,m,b,y,S;if(h===1){if(y=f[0][0],y===0)throw Error("Cannot calculate inverse, determinant is zero");return[[n(1,y)]]}else if(h===2){var x=o(f);if(x===0)throw Error("Cannot calculate inverse, determinant is zero");return[[n(f[1][1],x),n(s(f[0][1]),x)],[n(s(f[1][0]),x),n(f[0][0],x)]]}else{var _=f.concat();for(g=0;gC&&(C=l(_[g][w]),E=g),g++;if(C===0)throw Error("Cannot calculate inverse, determinant is zero");g=E,g!==w&&(S=_[w],_[w]=_[g],_[g]=S,S=A[w],A[w]=A[g],A[g]=S);var N=_[w],M=A[w];for(g=0;g{var{typed:e,matrix:r,inv:n,deepEqual:i,equal:a,dotDivide:s,dot:o,ctranspose:u,divideScalar:l,multiply:c,add:f,Complex:h}=t;return e(KC,{"Array | Matrix":function(x){var _=dt(x)?x.size():Nt(x);switch(_.length){case 1:return y(x)?u(x):_[0]===1?n(x):s(u(x),o(x,x));case 2:{if(y(x))return u(x);var A=_[0],w=_[1];if(A===w)try{return n(x)}catch(C){if(!(C instanceof Error&&C.message.match(/Cannot calculate inverse, determinant is zero/)))throw C}return dt(x)?r(p(x.valueOf(),A,w),x.storage()):p(x,A,w)}default:throw new RangeError("Matrix must be two dimensional (size: "+Pt(_)+")")}},any:function(x){return a(x,0)?xt(x):l(1,x)}});function p(S,x,_){var{C:A,F:w}=m(S,x,_),C=c(n(c(u(A),A)),u(A)),E=c(u(w),n(c(w,u(w))));return c(E,C)}function g(S,x,_){for(var A=xt(S),w=0,C=0;CE.filter((M,O)=>O!b(o(A[N],A[N])));return{C:w,F:C}}function b(S){return a(f(S,h(1,1)),f(0,h(1,1)))}function y(S){return i(f(S,h(1,1)),f(c(S,0),h(1,1)))}});function R0e(t){var{addScalar:e,subtract:r,flatten:n,multiply:i,multiplyScalar:a,divideScalar:s,sqrt:o,abs:u,bignumber:l,diag:c,size:f,reshape:h,inv:p,qr:g,usolve:m,usolveAll:b,equal:y,complex:S,larger:x,smaller:_,matrixFromColumns:A,dot:w}=t;function C(ne,X,de,Se){var ce=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,xe=E(ne,X,de,Se,ce);N(ne,X,de,Se,ce,xe);var{values:_e,C:me}=M(ne,X,de,Se,ce);if(ce){var we=O(ne,X,me,xe,_e,de,Se);return{values:_e,eigenvectors:we}}return{values:_e}}function E(ne,X,de,Se,ce){var xe=Se==="BigNumber",_e=Se==="Complex",me=xe?l(0):0,we=xe?l(1):_e?S(1):1,Ne=xe?l(1):1,Ce=xe?l(10):2,He=a(Ce,Ce),Ue;ce&&(Ue=Array(X).fill(we));for(var J=!1;!J;){J=!0;for(var te=0;te1&&(J=c(Array(Ce-1).fill(me)))),Ce-=1,we.pop();for(var Me=0;Me2&&(J=c(Array(Ce-2).fill(me)))),Ce-=2,we.pop(),we.pop();for(var U=0;U+r(u(ge),u(De))),te>100){var Y=Error("The eigenvalues failed to converge. Only found these eigenvalues: "+Ne.join(", "));throw Y.values=Ne,Y.vectors=[],Y}var pe=ce?i(Ue,H(He,X)):void 0;return{values:Ne,C:pe}}function O(ne,X,de,Se,ce,xe,_e){var me=p(de),we=i(me,ne,de),Ne=_e==="BigNumber",Ce=_e==="Complex",He=Ne?l(0):Ce?S(0):0,Ue=Ne?l(1):Ce?S(1):1,J=[],te=[];for(var ye of ce){var ee=B(J,ye,y);ee===-1?(J.push(ye),te.push(1)):te[ee]+=1}for(var ue=[],le=J.length,Ee=Array(X).fill(He),Me=c(Array(X).fill(Ue)),P=function(){var pe=J[U],ge=r(we,i(pe,Me)),De=b(ge,Ee);for(De.shift();De.lengthi(Ie,Ve)),ue.push(...De.map(Ve=>({value:pe,vector:n(Ve)})))},U=0;U=5)return null;for(me=0;;){var we=m(ne,_e);if(_(se($(_e,[we])),Se))break;if(++me>=10)return null;_e=he(we)}return _e}function K(ne,X,de){var Se=de==="BigNumber",ce=de==="Complex",xe=Array(ne).fill(0).map(_e=>2*Math.random()-1);return Se&&(xe=xe.map(_e=>l(_e))),ce&&(xe=xe.map(_e=>S(_e))),xe=$(xe,X),he(xe,de)}function $(ne,X){var de=f(ne);for(var Se of X)Se=h(Se,de),ne=r(ne,i(s(w(Se,ne),w(Se,Se)),Se));return ne}function se(ne){return u(o(w(ne,ne)))}function he(ne,X){var de=X==="BigNumber",Se=X==="Complex",ce=de?l(1):Se?S(1):1;return i(s(ce,se(ne)),ne)}return C}function I0e(t){var{config:e,addScalar:r,subtract:n,abs:i,atan:a,cos:s,sin:o,multiplyScalar:u,inv:l,bignumber:c,multiply:f,add:h}=t;function p(N,M){var O=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.epsilon,F=arguments.length>3?arguments[3]:void 0,q=arguments.length>4?arguments[4]:void 0;if(F==="number")return g(N,O,q);if(F==="BigNumber")return m(N,O,q);throw TypeError("Unsupported data type: "+F)}function g(N,M,O){var F=N.length,q=Math.abs(M/F),V,H;if(O){H=new Array(F);for(var B=0;B=Math.abs(q);){var K=I[0][0],$=I[0][1];V=b(N[K][K],N[$][$],N[K][$]),N=A(N,V,K,$),O&&(H=S(H,V,K,$)),I=w(N)}for(var se=Array(F).fill(0),he=0;he=i(q);){var K=I[0][0],$=I[0][1];V=y(N[K][K],N[$][$],N[K][$]),N=_(N,V,K,$),O&&(H=x(H,V,K,$)),I=C(N)}for(var se=Array(F).fill(0),he=0;he({value:q[X],vector:ne}));return{values:q,eigenvectors:he}}return p}var B0e="eigs",k0e=["config","typed","matrix","addScalar","equal","subtract","abs","atan","cos","sin","multiplyScalar","divideScalar","inv","bignumber","multiply","add","larger","column","flatten","number","complex","sqrt","diag","size","reshape","qr","usolve","usolveAll","im","re","smaller","matrixFromColumns","dot"],L0e=G(B0e,k0e,t=>{var{config:e,typed:r,matrix:n,addScalar:i,subtract:a,equal:s,abs:o,atan:u,cos:l,sin:c,multiplyScalar:f,divideScalar:h,inv:p,bignumber:g,multiply:m,add:b,larger:y,column:S,flatten:x,number:_,complex:A,sqrt:w,diag:C,size:E,reshape:N,qr:M,usolve:O,usolveAll:F,im:q,re:V,smaller:H,matrixFromColumns:B,dot:I}=t,K=I0e({config:e,addScalar:i,subtract:a,column:S,flatten:x,equal:s,abs:o,atan:u,cos:l,sin:c,multiplyScalar:f,inv:p,bignumber:g,complex:A,multiply:m,add:b}),$=R0e({config:e,addScalar:i,subtract:a,multiply:m,multiplyScalar:f,flatten:x,divideScalar:h,sqrt:w,abs:o,bignumber:g,diag:C,size:E,reshape:N,qr:M,inv:p,usolve:O,usolveAll:F,equal:s,complex:A,larger:y,smaller:H,matrixFromColumns:B,dot:I});return r("eigs",{Array:function(xe){return se(n(xe))},"Array, number|BigNumber":function(xe,_e){return se(n(xe),{precision:_e})},"Array, Object"(ce,xe){return se(n(ce),xe)},Matrix:function(xe){return se(xe,{matricize:!0})},"Matrix, number|BigNumber":function(xe,_e){return se(xe,{precision:_e,matricize:!0})},"Matrix, Object":function(xe,_e){var me={matricize:!0};return dn(me,_e),se(xe,me)}});function se(ce){var xe,_e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},me="eigenvectors"in _e?_e.eigenvectors:!0,we=(xe=_e.precision)!==null&&xe!==void 0?xe:e.epsilon,Ne=he(ce,we,me);return _e.matricize&&(Ne.values=n(Ne.values),me&&(Ne.eigenvectors=Ne.eigenvectors.map(Ce=>{var{value:He,vector:Ue}=Ce;return{value:He,vector:n(Ue)}}))),me&&Object.defineProperty(Ne,"vectors",{enumerable:!1,get:()=>{throw new Error("eigs(M).vectors replaced with eigs(M).eigenvectors")}}),Ne}function he(ce,xe,_e){var me=ce.toArray(),we=ce.size();if(we.length!==2||we[0]!==we[1])throw new RangeError("Matrix must be square (size: ".concat(Pt(we),")"));var Ne=we[0];if(X(me,Ne,xe)&&(de(me,Ne),ne(me,Ne,xe))){var Ce=Se(ce,me,Ne);return K(me,Ne,xe,Ce,_e)}var He=Se(ce,me,Ne);return $(me,Ne,xe,He,_e)}function ne(ce,xe,_e){for(var me=0;me{var{typed:e,abs:r,add:n,identity:i,inv:a,multiply:s}=t;return e(JC,{Matrix:function(f){var h=f.size();if(h.length!==2||h[0]!==h[1])throw new RangeError("Matrix must be square (size: "+Pt(h)+")");for(var p=h[0],g=1e-15,m=o(f),b=u(m,g),y=b.q,S=b.j,x=s(f,Math.pow(2,-S)),_=i(p),A=i(p),w=1,C=x,E=-1,N=1;N<=y;N++)N>1&&(C=s(C,x),E=-E),w=w*(y-N+1)/((2*y-N+1)*N),_=n(_,s(w,C)),A=n(A,s(w*E,C));for(var M=s(a(A),_),O=0;O{var{typed:e,abs:r,add:n,multiply:i,map:a,sqrt:s,subtract:o,inv:u,size:l,max:c,identity:f}=t,h=1e3,p=1e-6;function g(m){var b,y=0,S=m,x=f(l(m));do{var _=S;if(S=i(.5,n(_,u(x))),x=i(.5,n(x,u(_))),b=c(r(o(S,_))),b>p&&++y>h)throw new Error("computing square root of matrix: iterative method could not converge")}while(b>p);return S}return e(QC,{"Array | Matrix":function(b){var y=dt(b)?b.size():Nt(b);switch(y.length){case 1:if(y[0]===1)return a(b,s);throw new RangeError("Matrix must be square (size: "+Pt(y)+")");case 2:{var S=y[0],x=y[1];if(S===x)return g(b);throw new RangeError("Matrix must be square (size: "+Pt(y)+")")}default:throw new RangeError("Matrix must be at most two dimensional (size: "+Pt(y)+")")}}})}),eM="sylvester",H0e=["typed","schur","matrixFromColumns","matrix","multiply","range","concat","transpose","index","subset","add","subtract","identity","lusolve","abs"],W0e=G(eM,H0e,t=>{var{typed:e,schur:r,matrixFromColumns:n,matrix:i,multiply:a,range:s,concat:o,transpose:u,index:l,subset:c,add:f,subtract:h,identity:p,lusolve:g,abs:m}=t;return e(eM,{"Matrix, Matrix, Matrix":b,"Array, Matrix, Matrix":function(S,x,_){return b(i(S),x,_)},"Array, Array, Matrix":function(S,x,_){return b(i(S),i(x),_)},"Array, Matrix, Array":function(S,x,_){return b(i(S),x,i(_))},"Matrix, Array, Matrix":function(S,x,_){return b(S,i(x),_)},"Matrix, Array, Array":function(S,x,_){return b(S,i(x),i(_))},"Matrix, Matrix, Array":function(S,x,_){return b(S,x,i(_))},"Array, Array, Array":function(S,x,_){return b(i(S),i(x),i(_)).toArray()}});function b(y,S,x){for(var _=S.size()[0],A=y.size()[0],w=r(y),C=w.T,E=w.U,N=r(a(-1,S)),M=N.T,O=N.U,F=a(a(u(E),x),O),q=s(0,A),V=[],H=(Ce,He)=>o(Ce,He,1),B=(Ce,He)=>o(Ce,He,0),I=0;I<_;I++)if(I<_-1&&m(c(M,l(I+1,I)))>1e-5){for(var K=B(c(F,l(q,I)),c(F,l(q,I+1))),$=0;${var{typed:e,matrix:r,identity:n,multiply:i,qr:a,norm:s,subtract:o}=t;return e(tM,{Array:function(c){var f=u(r(c));return{U:f.U.valueOf(),T:f.T.valueOf()}},Matrix:function(c){return u(c)}});function u(l){var c=l.size()[0],f=l,h=n(c),p=0,g;do{g=f;var m=a(f),b=m.Q,y=m.R;if(f=i(y,b),h=i(h,b),p++>100)break}while(s(o(f,g))>1e-4);return{U:h,T:f}}}),rM="lyap",j0e=["typed","matrix","sylvester","multiply","transpose"],G0e=G(rM,j0e,t=>{var{typed:e,matrix:r,sylvester:n,multiply:i,transpose:a}=t;return e(rM,{"Matrix, Matrix":function(o,u){return n(o,a(o),i(-1,u))},"Array, Matrix":function(o,u){return n(r(o),a(r(o)),i(-1,u))},"Matrix, Array":function(o,u){return n(o,a(r(o)),r(i(-1,u)))},"Array, Array":function(o,u){return n(r(o),a(r(o)),r(i(-1,u))).toArray()}})}),X0e="divide",Z0e=["typed","matrix","multiply","equalScalar","divideScalar","inv"],K0e=G(X0e,Z0e,t=>{var{typed:e,matrix:r,multiply:n,equalScalar:i,divideScalar:a,inv:s}=t,o=Rn({typed:e,equalScalar:i}),u=Ra({typed:e});return e("divide",rR({"Array | Matrix, Array | Matrix":function(c,f){return n(c,s(f))},"DenseMatrix, any":function(c,f){return u(c,f,a,!1)},"SparseMatrix, any":function(c,f){return o(c,f,a,!1)},"Array, any":function(c,f){return u(r(c),f,a,!1).valueOf()},"any, Array | Matrix":function(c,f){return n(c,s(f))}},a.signatures))}),nM="distance",J0e=["typed","addScalar","subtractScalar","divideScalar","multiplyScalar","deepEqual","sqrt","abs"],Q0e=G(nM,J0e,t=>{var{typed:e,addScalar:r,subtractScalar:n,multiplyScalar:i,divideScalar:a,deepEqual:s,sqrt:o,abs:u}=t;return e(nM,{"Array, Array, Array":function(A,w,C){if(A.length===2&&w.length===2&&C.length===2){if(!c(A))throw new TypeError("Array with 2 numbers or BigNumbers expected for first argument");if(!c(w))throw new TypeError("Array with 2 numbers or BigNumbers expected for second argument");if(!c(C))throw new TypeError("Array with 2 numbers or BigNumbers expected for third argument");if(s(w,C))throw new TypeError("LinePoint1 should not be same with LinePoint2");var E=n(C[1],w[1]),N=n(w[0],C[0]),M=n(i(C[0],w[1]),i(w[0],C[1]));return b(A[0],A[1],E,N,M)}else throw new TypeError("Invalid Arguments: Try again")},"Object, Object, Object":function(A,w,C){if(Object.keys(A).length===2&&Object.keys(w).length===2&&Object.keys(C).length===2){if(!c(A))throw new TypeError("Values of pointX and pointY should be numbers or BigNumbers");if(!c(w))throw new TypeError("Values of lineOnePtX and lineOnePtY should be numbers or BigNumbers");if(!c(C))throw new TypeError("Values of lineTwoPtX and lineTwoPtY should be numbers or BigNumbers");if(s(g(w),g(C)))throw new TypeError("LinePoint1 should not be same with LinePoint2");if("pointX"in A&&"pointY"in A&&"lineOnePtX"in w&&"lineOnePtY"in w&&"lineTwoPtX"in C&&"lineTwoPtY"in C){var E=n(C.lineTwoPtY,w.lineOnePtY),N=n(w.lineOnePtX,C.lineTwoPtX),M=n(i(C.lineTwoPtX,w.lineOnePtY),i(w.lineOnePtX,C.lineTwoPtY));return b(A.pointX,A.pointY,E,N,M)}else throw new TypeError("Key names do not match")}else throw new TypeError("Invalid Arguments: Try again")},"Array, Array":function(A,w){if(A.length===2&&w.length===3){if(!c(A))throw new TypeError("Array with 2 numbers or BigNumbers expected for first argument");if(!f(w))throw new TypeError("Array with 3 numbers or BigNumbers expected for second argument");return b(A[0],A[1],w[0],w[1],w[2])}else if(A.length===3&&w.length===6){if(!f(A))throw new TypeError("Array with 3 numbers or BigNumbers expected for first argument");if(!p(w))throw new TypeError("Array with 6 numbers or BigNumbers expected for second argument");return y(A[0],A[1],A[2],w[0],w[1],w[2],w[3],w[4],w[5])}else if(A.length===w.length&&A.length>0){if(!h(A))throw new TypeError("All values of an array should be numbers or BigNumbers");if(!h(w))throw new TypeError("All values of an array should be numbers or BigNumbers");return S(A,w)}else throw new TypeError("Invalid Arguments: Try again")},"Object, Object":function(A,w){if(Object.keys(A).length===2&&Object.keys(w).length===3){if(!c(A))throw new TypeError("Values of pointX and pointY should be numbers or BigNumbers");if(!f(w))throw new TypeError("Values of xCoeffLine, yCoeffLine and constant should be numbers or BigNumbers");if("pointX"in A&&"pointY"in A&&"xCoeffLine"in w&&"yCoeffLine"in w&&"constant"in w)return b(A.pointX,A.pointY,w.xCoeffLine,w.yCoeffLine,w.constant);throw new TypeError("Key names do not match")}else if(Object.keys(A).length===3&&Object.keys(w).length===6){if(!f(A))throw new TypeError("Values of pointX, pointY and pointZ should be numbers or BigNumbers");if(!p(w))throw new TypeError("Values of x0, y0, z0, a, b and c should be numbers or BigNumbers");if("pointX"in A&&"pointY"in A&&"x0"in w&&"y0"in w&&"z0"in w&&"a"in w&&"b"in w&&"c"in w)return y(A.pointX,A.pointY,A.pointZ,w.x0,w.y0,w.z0,w.a,w.b,w.c);throw new TypeError("Key names do not match")}else if(Object.keys(A).length===2&&Object.keys(w).length===2){if(!c(A))throw new TypeError("Values of pointOneX and pointOneY should be numbers or BigNumbers");if(!c(w))throw new TypeError("Values of pointTwoX and pointTwoY should be numbers or BigNumbers");if("pointOneX"in A&&"pointOneY"in A&&"pointTwoX"in w&&"pointTwoY"in w)return S([A.pointOneX,A.pointOneY],[w.pointTwoX,w.pointTwoY]);throw new TypeError("Key names do not match")}else if(Object.keys(A).length===3&&Object.keys(w).length===3){if(!f(A))throw new TypeError("Values of pointOneX, pointOneY and pointOneZ should be numbers or BigNumbers");if(!f(w))throw new TypeError("Values of pointTwoX, pointTwoY and pointTwoZ should be numbers or BigNumbers");if("pointOneX"in A&&"pointOneY"in A&&"pointOneZ"in A&&"pointTwoX"in w&&"pointTwoY"in w&&"pointTwoZ"in w)return S([A.pointOneX,A.pointOneY,A.pointOneZ],[w.pointTwoX,w.pointTwoY,w.pointTwoZ]);throw new TypeError("Key names do not match")}else throw new TypeError("Invalid Arguments: Try again")},Array:function(A){if(!m(A))throw new TypeError("Incorrect array format entered for pairwise distance calculation");return x(A)}});function l(_){return typeof _=="number"||Mt(_)}function c(_){return _.constructor!==Array&&(_=g(_)),l(_[0])&&l(_[1])}function f(_){return _.constructor!==Array&&(_=g(_)),l(_[0])&&l(_[1])&&l(_[2])}function h(_){return Array.isArray(_)||(_=g(_)),_.every(l)}function p(_){return _.constructor!==Array&&(_=g(_)),l(_[0])&&l(_[1])&&l(_[2])&&l(_[3])&&l(_[4])&&l(_[5])}function g(_){for(var A=Object.keys(_),w=[],C=0;CA.length!==2||!l(A[0])||!l(A[1])))return!1}else if(_[0].length===3&&l(_[0][0])&&l(_[0][1])&&l(_[0][2])){if(_.some(A=>A.length!==3||!l(A[0])||!l(A[1])||!l(A[2])))return!1}else return!1;return!0}function b(_,A,w,C,E){var N=u(r(r(i(w,_),i(C,A)),E)),M=o(r(i(w,w),i(C,C)));return a(N,M)}function y(_,A,w,C,E,N,M,O,F){var q=[n(i(n(E,A),F),i(n(N,w),O)),n(i(n(N,w),M),i(n(C,_),F)),n(i(n(C,_),O),i(n(E,A),M))];q=o(r(r(i(q[0],q[0]),i(q[1],q[1])),i(q[2],q[2])));var V=o(r(r(i(M,M),i(O,O)),i(F,F)));return a(q,V)}function S(_,A){for(var w=_.length,C=0,E=0,N=0;N{var{typed:e,config:r,abs:n,add:i,addScalar:a,matrix:s,multiply:o,multiplyScalar:u,divideScalar:l,subtract:c,smaller:f,equalScalar:h,flatten:p,isZero:g,isNumeric:m}=t;return e("intersect",{"Array, Array, Array":b,"Array, Array, Array, Array":y,"Matrix, Matrix, Matrix":function(O,F,q){var V=b(O.valueOf(),F.valueOf(),q.valueOf());return V===null?null:s(V)},"Matrix, Matrix, Matrix, Matrix":function(O,F,q,V){var H=y(O.valueOf(),F.valueOf(),q.valueOf(),V.valueOf());return H===null?null:s(H)}});function b(M,O,F){if(M=S(M),O=S(O),F=S(F),!_(M))throw new TypeError("Array with 3 numbers or BigNumbers expected for first argument");if(!_(O))throw new TypeError("Array with 3 numbers or BigNumbers expected for second argument");if(!A(F))throw new TypeError("Array with 4 numbers expected as third argument");return N(M[0],M[1],M[2],O[0],O[1],O[2],F[0],F[1],F[2],F[3])}function y(M,O,F,q){if(M=S(M),O=S(O),F=S(F),q=S(q),M.length===2){if(!x(M))throw new TypeError("Array with 2 numbers or BigNumbers expected for first argument");if(!x(O))throw new TypeError("Array with 2 numbers or BigNumbers expected for second argument");if(!x(F))throw new TypeError("Array with 2 numbers or BigNumbers expected for third argument");if(!x(q))throw new TypeError("Array with 2 numbers or BigNumbers expected for fourth argument");return w(M,O,F,q)}else if(M.length===3){if(!_(M))throw new TypeError("Array with 3 numbers or BigNumbers expected for first argument");if(!_(O))throw new TypeError("Array with 3 numbers or BigNumbers expected for second argument");if(!_(F))throw new TypeError("Array with 3 numbers or BigNumbers expected for third argument");if(!_(q))throw new TypeError("Array with 3 numbers or BigNumbers expected for fourth argument");return E(M[0],M[1],M[2],O[0],O[1],O[2],F[0],F[1],F[2],q[0],q[1],q[2])}else throw new TypeError("Arrays with two or thee dimensional points expected")}function S(M){return M.length===1?M[0]:M.length>1&&Array.isArray(M[0])&&M.every(O=>Array.isArray(O)&&O.length===1)?p(M):M}function x(M){return M.length===2&&m(M[0])&&m(M[1])}function _(M){return M.length===3&&m(M[0])&&m(M[1])&&m(M[2])}function A(M){return M.length===4&&m(M[0])&&m(M[1])&&m(M[2])&&m(M[3])}function w(M,O,F,q){var V=M,H=F,B=c(V,O),I=c(H,q),K=c(u(B[0],I[1]),u(I[0],B[1]));if(g(K)||f(n(K),r.epsilon))return null;var $=u(I[0],V[1]),se=u(I[1],V[0]),he=u(I[0],H[1]),ne=u(I[1],H[0]),X=l(a(c(c($,se),he),ne),K);return i(o(B,X),V)}function C(M,O,F,q,V,H,B,I,K,$,se,he){var ne=u(c(M,O),c(F,q)),X=u(c(V,H),c(B,I)),de=u(c(K,$),c(se,he));return a(a(ne,X),de)}function E(M,O,F,q,V,H,B,I,K,$,se,he){var ne=C(M,B,$,B,O,I,se,I,F,K,he,K),X=C($,B,q,M,se,I,V,O,he,K,H,F),de=C(M,B,q,M,O,I,V,O,F,K,H,F),Se=C($,B,$,B,se,I,se,I,he,K,he,K),ce=C(q,M,q,M,V,O,V,O,H,F,H,F),xe=c(u(ne,X),u(de,Se)),_e=c(u(ce,Se),u(X,X));if(g(_e))return null;var me=l(xe,_e),we=l(a(ne,u(me,X)),Se),Ne=a(M,u(me,c(q,M))),Ce=a(O,u(me,c(V,O))),He=a(F,u(me,c(H,F))),Ue=a(B,u(we,c($,B))),J=a(I,u(we,c(se,I))),te=a(K,u(we,c(he,K)));return h(Ne,Ue)&&h(Ce,J)&&h(He,te)?[Ne,Ce,He]:null}function N(M,O,F,q,V,H,B,I,K,$){var se=u(M,B),he=u(q,B),ne=u(O,I),X=u(V,I),de=u(F,K),Se=u(H,K),ce=c(c(c($,se),ne),de),xe=c(c(c(a(a(he,X),Se),se),ne),de),_e=l(ce,xe),me=a(M,u(_e,c(q,M))),we=a(O,u(_e,c(V,O))),Ne=a(F,u(_e,c(H,F)));return[me,we,Ne]}}),iM="sum",nye=["typed","config","add","numeric"],rB=G(iM,nye,t=>{var{typed:e,config:r,add:n,numeric:i}=t;return e(iM,{"Array | Matrix":a,"Array | Matrix, number | BigNumber":s,"...":function(u){if(Tc(u))throw new TypeError("Scalar values expected in function sum");return a(u)}});function a(o){var u;return Gs(o,function(l){try{u=u===void 0?l:n(u,l)}catch(c){throw ai(c,"sum",l)}}),u===void 0&&(u=i(0,r.number)),typeof u=="string"&&(u=i(u,r.number)),u}function s(o,u){try{var l=$g(o,u,n);return l}catch(c){throw ai(c,"sum")}}}),bm="cumsum",iye=["typed","add","unaryPlus"],nB=G(bm,iye,t=>{var{typed:e,add:r,unaryPlus:n}=t;return e(bm,{Array:i,Matrix:function(l){return l.create(i(l.valueOf()))},"Array, number | BigNumber":s,"Matrix, number | BigNumber":function(l,c){return l.create(s(l.valueOf(),c))},"...":function(l){if(Tc(l))throw new TypeError("All values expected to be scalar in function cumsum");return i(l)}});function i(u){try{return a(u)}catch(l){throw ai(l,bm)}}function a(u){if(u.length===0)return[];for(var l=[n(u[0])],c=1;c=c.length)throw new Fa(l,c.length);try{return o(u,l)}catch(f){throw ai(f,bm)}}function o(u,l){var c,f,h;if(l<=0){var p=u[0][0];if(Array.isArray(p)){for(h=BR(u),f=[],c=0;c{var{typed:e,add:r,divide:n}=t;return e(aM,{"Array | Matrix":a,"Array | Matrix, number | BigNumber":i,"...":function(o){if(Tc(o))throw new TypeError("Scalar values expected in function mean");return a(o)}});function i(s,o){try{var u=$g(s,o,r),l=Array.isArray(s)?Nt(s):s.size();return n(u,l[o])}catch(c){throw ai(c,"mean")}}function a(s){var o,u=0;if(Gs(s,function(l){try{o=o===void 0?l:r(o,l),u++}catch(c){throw ai(c,"mean",l)}}),u===0)throw new Error("Cannot calculate the mean of an empty array");return n(o,u)}}),sM="median",sye=["typed","add","divide","compare","partitionSelect"],oye=G(sM,sye,t=>{var{typed:e,add:r,divide:n,compare:i,partitionSelect:a}=t;function s(l){try{l=tr(l.valueOf());var c=l.length;if(c===0)throw new Error("Cannot calculate median of an empty array");if(c%2===0){for(var f=c/2-1,h=a(l,f+1),p=l[f],g=0;g0&&(p=l[g]);return u(p,h)}else{var m=a(l,(c-1)/2);return o(m)}}catch(b){throw ai(b,"median")}}var o=e({"number | BigNumber | Complex | Unit":function(c){return c}}),u=e({"number | BigNumber | Complex | Unit, number | BigNumber | Complex | Unit":function(c,f){return n(r(c,f),2)}});return e(sM,{"Array | Matrix":s,"Array | Matrix, number | BigNumber":function(c,f){throw new Error("median(A, dim) is not yet supported")},"...":function(c){if(Tc(c))throw new TypeError("Scalar values expected in function median");return s(c)}})}),oM="mad",uye=["typed","abs","map","median","subtract"],lye=G(oM,uye,t=>{var{typed:e,abs:r,map:n,median:i,subtract:a}=t;return e(oM,{"Array | Matrix":s,"...":function(u){return s(u)}});function s(o){if(o=tr(o.valueOf()),o.length===0)throw new Error("Cannot calculate median absolute deviation (mad) of an empty array");try{var u=i(o);return i(n(o,function(l){return r(a(l,u))}))}catch(l){throw l instanceof TypeError&&l.message.indexOf("median")!==-1?new TypeError(l.message.replace("median","mad")):ai(l,"mad")}}}),Jy="unbiased",uM="variance",cye=["typed","add","subtract","multiply","divide","apply","isNaN"],aB=G(uM,cye,t=>{var{typed:e,add:r,subtract:n,multiply:i,divide:a,apply:s,isNaN:o}=t;return e(uM,{"Array | Matrix":function(f){return u(f,Jy)},"Array | Matrix, string":u,"Array | Matrix, number | BigNumber":function(f,h){return l(f,h,Jy)},"Array | Matrix, number | BigNumber, string":l,"...":function(f){return u(f,Jy)}});function u(c,f){var h,p=0;if(c.length===0)throw new SyntaxError("Function variance requires one or more parameters (0 provided)");if(Gs(c,function(b){try{h=h===void 0?b:r(h,b),p++}catch(y){throw ai(y,"variance",b)}}),p===0)throw new Error("Cannot calculate variance of an empty array");var g=a(h,p);if(h=void 0,Gs(c,function(b){var y=n(b,g);h=h===void 0?i(y,y):r(h,i(y,y))}),o(h))return h;switch(f){case"uncorrected":return a(h,p);case"biased":return a(h,p+1);case"unbiased":{var m=Mt(h)?h.mul(0):0;return p===1?m:a(h,p-1)}default:throw new Error('Unknown normalization "'+f+'". Choose "unbiased" (default), "uncorrected", or "biased".')}}function l(c,f,h){try{if(c.length===0)throw new SyntaxError("Function variance requires one or more parameters (0 provided)");return s(c,f,p=>u(p,h))}catch(p){throw ai(p,"variance")}}}),lM="quantileSeq",fye=["typed","?bignumber","add","subtract","divide","multiply","partitionSelect","compare","isInteger","smaller","smallerEq","larger"],sB=G(lM,fye,t=>{var{typed:e,bignumber:r,add:n,subtract:i,divide:a,multiply:s,partitionSelect:o,compare:u,isInteger:l,smaller:c,smallerEq:f,larger:h}=t,p=uw({typed:e,isInteger:l});return e(lM,{"Array | Matrix, number | BigNumber":(S,x)=>m(S,x,!1),"Array | Matrix, number | BigNumber, number":(S,x,_)=>g(S,x,!1,_,m),"Array | Matrix, number | BigNumber, boolean":m,"Array | Matrix, number | BigNumber, boolean, number":(S,x,_,A)=>g(S,x,_,A,m),"Array | Matrix, Array | Matrix":(S,x)=>b(S,x,!1),"Array | Matrix, Array | Matrix, number":(S,x,_)=>g(S,x,!1,_,b),"Array | Matrix, Array | Matrix, boolean":b,"Array | Matrix, Array | Matrix, boolean, number":(S,x,_,A)=>g(S,x,_,A,b)});function g(S,x,_,A,w){return p(S,A,C=>w(C,x,_))}function m(S,x,_){var A,w=S.valueOf();if(c(x,0))throw new Error("N/prob must be non-negative");if(f(x,1))return Ct(x)?y(w,x,_):r(y(w,x,_));if(h(x,1)){if(!l(x))throw new Error("N must be a positive integer");if(h(x,4294967295))throw new Error("N must be less than or equal to 2^32-1, as that is the maximum length of an Array");var C=n(x,1);A=[];for(var E=0;c(E,x);E++){var N=a(E+1,C);A.push(y(w,N,_))}return Ct(x)?A:r(A)}}function b(S,x,_){for(var A=S.valueOf(),w=x.valueOf(),C=[],E=0;E0&&(M=A[F])}return n(s(M,i(1,N)),s(O,N))}}),cM="std",hye=["typed","map","sqrt","variance"],oB=G(cM,hye,t=>{var{typed:e,map:r,sqrt:n,variance:i}=t;return e(cM,{"Array | Matrix":a,"Array | Matrix, string":a,"Array | Matrix, number | BigNumber":a,"Array | Matrix, number | BigNumber, string":a,"...":function(o){return a(o)}});function a(s,o){if(s.length===0)throw new SyntaxError("Function std requires one or more parameters (0 provided)");try{var u=i.apply(null,arguments);return sa(u)?r(u,n):n(u)}catch(l){throw l instanceof TypeError&&l.message.indexOf(" variance")!==-1?new TypeError(l.message.replace(" variance"," std")):l}}}),fM="corr",dye=["typed","matrix","mean","sqrt","sum","add","subtract","multiply","pow","divide"],pye=G(fM,dye,t=>{var{typed:e,matrix:r,sqrt:n,sum:i,add:a,subtract:s,multiply:o,pow:u,divide:l}=t;return e(fM,{"Array, Array":function(p,g){return c(p,g)},"Matrix, Matrix":function(p,g){var m=c(p.toArray(),g.toArray());return Array.isArray(m)?r(m):m}});function c(h,p){var g=[];if(Array.isArray(h[0])&&Array.isArray(p[0])){if(h.length!==p.length)throw new SyntaxError("Dimension mismatch. Array A and B must have the same length.");for(var m=0;ma(w,o(C,p[E])),0),S=i(h.map(w=>u(w,2))),x=i(p.map(w=>u(w,2))),_=s(o(g,y),o(m,b)),A=n(o(s(o(g,S),u(m,2)),s(o(g,x),u(b,2))));return l(_,A)}}),hM="combinations",mye=["typed"],vye=G(hM,mye,t=>{var{typed:e}=t;return e(hM,{"number, number":aI,"BigNumber, BigNumber":function(n,i){var a=n.constructor,s,o,u=n.minus(i),l=new a(1);if(!dM(n)||!dM(i))throw new TypeError("Positive integer value expected in function combinations");if(i.gt(n))throw new TypeError("k must be less than n in function combinations");if(s=l,i.lt(u))for(o=l;o.lte(u);o=o.plus(l))s=s.times(i.plus(o)).dividedBy(o);else for(o=l;o.lte(i);o=o.plus(l))s=s.times(u.plus(o)).dividedBy(o);return s}})});function dM(t){return t.isInteger()&&t.gte(0)}var pM="combinationsWithRep",gye=["typed"],yye=G(pM,gye,t=>{var{typed:e}=t;return e(pM,{"number, number":function(n,i){if(!ot(n)||n<0)throw new TypeError("Positive integer value expected in function combinationsWithRep");if(!ot(i)||i<0)throw new TypeError("Positive integer value expected in function combinationsWithRep");if(n<1)throw new TypeError("k must be less than or equal to n + k - 1");if(i{var{typed:e,config:r,multiplyScalar:n,pow:i,BigNumber:a,Complex:s}=t;function o(l){if(l.im===0)return Cv(l.re);if(l.re<.5){var c=new s(1-l.re,-l.im),f=new s(Math.PI*l.re,Math.PI*l.im);return new s(Math.PI).div(f.sin()).div(o(c))}l=new s(l.re-1,l.im);for(var h=new s(rc[0],0),p=1;p2;)h-=2,g+=h,p=p.times(g);return new a(p.toPrecision(a.precision))}}),gM="lgamma",wye=["Complex","typed"],Sye=G(gM,wye,t=>{var{Complex:e,typed:r}=t,n=7,i=7,a=[-.029550653594771242,.00641025641025641,-.0019175269175269176,.0008417508417508417,-.0005952380952380953,.0007936507936507937,-.002777777777777778,.08333333333333333];return r(gM,{number:Mv,Complex:s,BigNumber:function(){throw new Error("mathjs doesn't yet provide an implementation of the algorithm lgamma for BigNumber")}});function s(l){var c=6.283185307179586,f=1.1447298858494002,h=.1;if(l.isNaN())return new e(NaN,NaN);if(l.im===0)return new e(Mv(l.re),0);if(l.re>=n||Math.abs(l.im)>=i)return o(l);if(l.re<=h){var p=hre(c,l.im)*Math.floor(.5*l.re+.25),g=l.mul(Math.PI).sin().log(),m=s(new e(1-l.re,-l.im));return new e(f,p).sub(g).sub(m)}else return l.im>=0?u(l):u(l.conjugate()).conjugate()}function o(l){for(var c=l.sub(.5).mul(l.log()).sub(l).add(fI),f=new e(1,0).div(l),h=f.div(l),p=a[0],g=a[1],m=2*h.re,b=h.re*h.re+h.im*h.im,y=2;y<8;y++){var S=g;g=-b*p+a[y],p=m*p+S}var x=f.mul(h.mul(p).add(g));return c.add(x)}function u(l){var c=0,f=0,h=l;for(l=l.add(1);l.re<=n;){h=h.mul(l);var p=h.im<0?1:0;p!==0&&f===0&&c++,f=p,l=l.add(1)}return o(l).sub(h.log()).sub(new e(0,c*2*Math.PI*1))}}),yM="factorial",_ye=["typed","gamma"],Aye=G(yM,_ye,t=>{var{typed:e,gamma:r}=t;return e(yM,{number:function(i){if(i<0)throw new Error("Value must be non-negative");return r(i+1)},BigNumber:function(i){if(i.isNegative())throw new Error("Value must be non-negative");return r(i.plus(1))},"Array | Matrix":e.referToSelf(n=>i=>Bt(i,n))})}),bM="kldivergence",Dye=["typed","matrix","divide","sum","multiply","map","dotDivide","log","isNumeric"],Nye=G(bM,Dye,t=>{var{typed:e,matrix:r,divide:n,sum:i,multiply:a,map:s,dotDivide:o,log:u,isNumeric:l}=t;return e(bM,{"Array, Array":function(h,p){return c(r(h),r(p))},"Matrix, Array":function(h,p){return c(h,r(p))},"Array, Matrix":function(h,p){return c(r(h),p)},"Matrix, Matrix":function(h,p){return c(h,p)}});function c(f,h){var p=h.size().length,g=f.size().length;if(p>1)throw new Error("first object must be one dimensional");if(g>1)throw new Error("second object must be one dimensional");if(p!==g)throw new Error("Length of two vectors must be equal");var m=i(f);if(m===0)throw new Error("Sum of elements in first object must be non zero");var b=i(h);if(b===0)throw new Error("Sum of elements in second object must be non zero");var y=n(f,i(f)),S=n(h,i(h)),x=i(a(y,s(o(y,S),_=>u(_))));return l(x)?x:Number.NaN}}),xM="multinomial",Eye=["typed","add","divide","multiply","factorial","isInteger","isPositive"],Cye=G(xM,Eye,t=>{var{typed:e,add:r,divide:n,multiply:i,factorial:a,isInteger:s,isPositive:o}=t;return e(xM,{"Array | Matrix":function(l){var c=0,f=1;return Gs(l,function(h){if(!s(h)||!o(h))throw new TypeError("Positive integer value expected in function multinomial");c=r(c,h),f=i(f,a(h))}),n(a(c),f)}})}),wM="permutations",Mye=["typed","factorial"],Tye=G(wM,Mye,t=>{var{typed:e,factorial:r}=t;return e(wM,{"number | BigNumber":r,"number, number":function(i,a){if(!ot(i)||i<0)throw new TypeError("Positive integer value expected in function permutations");if(!ot(a)||a<0)throw new TypeError("Positive integer value expected in function permutations");if(a>i)throw new TypeError("second argument k must be less than or equal to first argument n");return $s(i-a+1,i)},"BigNumber, BigNumber":function(i,a){var s,o;if(!SM(i)||!SM(a))throw new TypeError("Positive integer value expected in function permutations");if(a.gt(i))throw new TypeError("second argument k must be less than or equal to first argument n");var u=i.mul(0).add(1);for(s=u,o=i.minus(a).plus(1);o.lte(i);o=o.plus(1))s=s.times(o);return s}})});function SM(t){return t.isInteger()&&t.gte(0)}var mw={exports:{}};mw.exports;(function(t){(function(e,r,n){function i(u){var l=this,c=o();l.next=function(){var f=2091639*l.s0+l.c*23283064365386963e-26;return l.s0=l.s1,l.s1=l.s2,l.s2=f-(l.c=f|0)},l.c=1,l.s0=c(" "),l.s1=c(" "),l.s2=c(" "),l.s0-=c(u),l.s0<0&&(l.s0+=1),l.s1-=c(u),l.s1<0&&(l.s1+=1),l.s2-=c(u),l.s2<0&&(l.s2+=1),c=null}function a(u,l){return l.c=u.c,l.s0=u.s0,l.s1=u.s1,l.s2=u.s2,l}function s(u,l){var c=new i(u),f=l&&l.state,h=c.next;return h.int32=function(){return c.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,f&&(typeof f=="object"&&a(f,c),h.state=function(){return a(c,{})}),h}function o(){var u=4022871197,l=function(c){c=String(c);for(var f=0;f>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return l}r&&r.exports?r.exports=s:n&&n.amd?n(function(){return s}):this.alea=s})(Qi,t,!1)})(mw);var Oye=mw.exports,vw={exports:{}};vw.exports;(function(t){(function(e,r,n){function i(o){var u=this,l="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var f=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^f^f>>>8},o===(o|0)?u.x=o:l+=o;for(var c=0;c>>0)/4294967296};return f.double=function(){do var h=l.next()>>>11,p=(l.next()>>>0)/4294967296,g=(h+p)/(1<<21);while(g===0);return g},f.int32=l.next,f.quick=f,c&&(typeof c=="object"&&a(c,l),f.state=function(){return a(l,{})}),f}r&&r.exports?r.exports=s:n&&n.amd?n(function(){return s}):this.xor128=s})(Qi,t,!1)})(vw);var Fye=vw.exports,gw={exports:{}};gw.exports;(function(t){(function(e,r,n){function i(o){var u=this,l="";u.next=function(){var f=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(f^f<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,o===(o|0)?u.x=o:l+=o;for(var c=0;c>>4),u.next()}function a(o,u){return u.x=o.x,u.y=o.y,u.z=o.z,u.w=o.w,u.v=o.v,u.d=o.d,u}function s(o,u){var l=new i(o),c=u&&u.state,f=function(){return(l.next()>>>0)/4294967296};return f.double=function(){do var h=l.next()>>>11,p=(l.next()>>>0)/4294967296,g=(h+p)/(1<<21);while(g===0);return g},f.int32=l.next,f.quick=f,c&&(typeof c=="object"&&a(c,l),f.state=function(){return a(l,{})}),f}r&&r.exports?r.exports=s:n&&n.amd?n(function(){return s}):this.xorwow=s})(Qi,t,!1)})(gw);var Pye=gw.exports,yw={exports:{}};yw.exports;(function(t){(function(e,r,n){function i(o){var u=this;u.next=function(){var c=u.x,f=u.i,h,p;return h=c[f],h^=h>>>7,p=h^h<<24,h=c[f+1&7],p^=h^h>>>10,h=c[f+3&7],p^=h^h>>>3,h=c[f+4&7],p^=h^h<<7,h=c[f+7&7],h=h^h<<13,p^=h^h<<9,c[f]=p,u.i=f+1&7,p};function l(c,f){var h,p=[];if(f===(f|0))p[0]=f;else for(f=""+f,h=0;h0;--h)c.next()}l(u,o)}function a(o,u){return u.x=o.x.slice(),u.i=o.i,u}function s(o,u){o==null&&(o=+new Date);var l=new i(o),c=u&&u.state,f=function(){return(l.next()>>>0)/4294967296};return f.double=function(){do var h=l.next()>>>11,p=(l.next()>>>0)/4294967296,g=(h+p)/(1<<21);while(g===0);return g},f.int32=l.next,f.quick=f,c&&(c.x&&a(c,l),f.state=function(){return a(l,{})}),f}r&&r.exports?r.exports=s:n&&n.amd?n(function(){return s}):this.xorshift7=s})(Qi,t,!1)})(yw);var Rye=yw.exports,bw={exports:{}};bw.exports;(function(t){(function(e,r,n){function i(o){var u=this;u.next=function(){var c=u.w,f=u.X,h=u.i,p,g;return u.w=c=c+1640531527|0,g=f[h+34&127],p=f[h=h+1&127],g^=g<<13,p^=p<<17,g^=g>>>15,p^=p>>>12,g=f[h]=g^p,u.i=h,g+(c^c>>>16)|0};function l(c,f){var h,p,g,m,b,y=[],S=128;for(f===(f|0)?(p=f,f=null):(f=f+"\0",p=0,S=Math.max(S,f.length)),g=0,m=-32;m>>15,p^=p<<4,p^=p>>>13,m>=0&&(b=b+1640531527|0,h=y[m&127]^=p+b,g=h==0?g+1:0);for(g>=128&&(y[(f&&f.length||0)&127]=-1),g=127,m=4*128;m>0;--m)p=y[g+34&127],h=y[g=g+1&127],p^=p<<13,h^=h<<17,p^=p>>>15,h^=h>>>12,y[g]=p^h;c.w=b,c.X=y,c.i=g}l(u,o)}function a(o,u){return u.i=o.i,u.w=o.w,u.X=o.X.slice(),u}function s(o,u){o==null&&(o=+new Date);var l=new i(o),c=u&&u.state,f=function(){return(l.next()>>>0)/4294967296};return f.double=function(){do var h=l.next()>>>11,p=(l.next()>>>0)/4294967296,g=(h+p)/(1<<21);while(g===0);return g},f.int32=l.next,f.quick=f,c&&(c.X&&a(c,l),f.state=function(){return a(l,{})}),f}r&&r.exports?r.exports=s:n&&n.amd?n(function(){return s}):this.xor4096=s})(Qi,t,!1)})(bw);var Iye=bw.exports,xw={exports:{}};xw.exports;(function(t){(function(e,r,n){function i(o){var u=this,l="";u.next=function(){var f=u.b,h=u.c,p=u.d,g=u.a;return f=f<<25^f>>>7^h,h=h-p|0,p=p<<24^p>>>8^g,g=g-f|0,u.b=f=f<<20^f>>>12^h,u.c=h=h-p|0,u.d=p<<16^h>>>16^g,u.a=g-f|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,o===Math.floor(o)?(u.a=o/4294967296|0,u.b=o|0):l+=o;for(var c=0;c>>0)/4294967296};return f.double=function(){do var h=l.next()>>>11,p=(l.next()>>>0)/4294967296,g=(h+p)/(1<<21);while(g===0);return g},f.int32=l.next,f.quick=f,c&&(typeof c=="object"&&a(c,l),f.state=function(){return a(l,{})}),f}r&&r.exports?r.exports=s:n&&n.amd?n(function(){return s}):this.tychei=s})(Qi,t,!1)})(xw);var Bye=xw.exports,uB={exports:{}};const kye={},Lye=Object.freeze(Object.defineProperty({__proto__:null,default:kye},Symbol.toStringTag,{value:"Module"})),$ye=S$(Lye);(function(t){(function(e,r,n){var i=256,a=6,s=52,o="random",u=n.pow(i,a),l=n.pow(2,s),c=l*2,f=i-1,h;function p(_,A,w){var C=[];A=A==!0?{entropy:!0}:A||{};var E=y(b(A.entropy?[_,x(r)]:_??S(),3),C),N=new g(C),M=function(){for(var O=N.g(a),F=u,q=0;O=c;)O/=2,F/=2,q>>>=1;return(O+q)/F};return M.int32=function(){return N.g(4)|0},M.quick=function(){return N.g(4)/4294967296},M.double=M,y(x(N.S),r),(A.pass||w||function(O,F,q,V){return V&&(V.S&&m(V,N),O.state=function(){return m(N,{})}),q?(n[o]=O,F):O})(M,E,"global"in A?A.global:this==n,A.state)}function g(_){var A,w=_.length,C=this,E=0,N=C.i=C.j=0,M=C.S=[];for(w||(_=[w++]);E{var{typed:e,config:r,on:n}=t,i=wc(r.randomSeed);return n&&n("config",function(s,o){s.randomSeed!==o.randomSeed&&(i=wc(s.randomSeed))}),e(_M,{"Array | Matrix":function(o){return a(o,{})},"Array | Matrix, Object":function(o,u){return a(o,u)},"Array | Matrix, number":function(o,u){return a(o,{number:u})},"Array | Matrix, Array | Matrix":function(o,u){return a(o,{weights:u})},"Array | Matrix, Array | Matrix, number":function(o,u,l){return a(o,{number:l,weights:u})},"Array | Matrix, number, Array | Matrix":function(o,u,l){return a(o,{number:u,weights:l})}});function a(s,o){var{number:u,weights:l,elementWise:c=!0}=o,f=typeof u>"u";f&&(u=1);var h=dt(s)?s.create:dt(l)?l.create:null;s=s.valueOf(),l&&(l=l.valueOf()),c===!0&&(s=tr(s),l=tr(l));var p=0;if(typeof l<"u"){if(l.length!==s.length)throw new Error("Weights must have the same length as possibles");for(var g=0,m=l.length;g"u")S=s[Math.floor(i()*b)];else for(var x=i()*p,_=0,A=s.length;_1)for(var n=0,i=t.shift();n{var{typed:e,config:r,on:n}=t,i=wc(r.randomSeed);return n&&n("config",function(o,u){o.randomSeed!==u.randomSeed&&(i=wc(o.randomSeed))}),e(AM,{"":()=>s(0,1),number:o=>s(0,o),"number, number":(o,u)=>s(o,u),"Array | Matrix":o=>a(o,0,1),"Array | Matrix, number":(o,u)=>a(o,0,u),"Array | Matrix, number, number":(o,u,l)=>a(o,u,l)});function a(o,u,l){var c=ww(o.valueOf(),()=>s(u,l));return dt(o)?o.create(c):c}function s(o,u){return o+i()*(u-o)}}),DM="randomInt",Qye=["typed","config","?on"],ebe=G(DM,Qye,t=>{var{typed:e,config:r,on:n}=t,i=wc(r.randomSeed);return n&&n("config",function(o,u){o.randomSeed!==u.randomSeed&&(i=wc(o.randomSeed))}),e(DM,{"":()=>s(0,1),number:o=>s(0,o),"number, number":(o,u)=>s(o,u),"Array | Matrix":o=>a(o,0,1),"Array | Matrix, number":(o,u)=>a(o,0,u),"Array | Matrix, number, number":(o,u,l)=>a(o,u,l)});function a(o,u,l){var c=ww(o.valueOf(),()=>s(u,l));return dt(o)?o.create(c):c}function s(o,u){return Math.floor(o+i()*(u-o))}}),NM="stirlingS2",tbe=["typed","addScalar","subtractScalar","multiplyScalar","divideScalar","pow","factorial","combinations","isNegative","isInteger","number","?bignumber","larger"],rbe=G(NM,tbe,t=>{var{typed:e,addScalar:r,subtractScalar:n,multiplyScalar:i,divideScalar:a,pow:s,factorial:o,combinations:u,isNegative:l,isInteger:c,number:f,bignumber:h,larger:p}=t,g=[],m=[];return e(NM,{"number | BigNumber, number | BigNumber":function(y,S){if(!c(y)||l(y)||!c(S)||l(S))throw new TypeError("Non-negative integer value expected in function stirlingS2");if(p(S,y))throw new TypeError("k must be less than or equal to n in function stirlingS2");var x=!(Ct(y)&&Ct(S)),_=x?m:g,A=x?h:f,w=f(y),C=f(S);if(_[w]&&_[w].length>C)return _[w][C];for(var E=0;E<=w;++E)if(_[E]||(_[E]=[A(E===0?1:0)]),E!==0)for(var N=_[E],M=_[E-1],O=N.length;O<=E&&O<=C;++O)O===E?N[O]=1:N[O]=r(i(A(O),M[O]),M[O-1]);return _[w][C]}})}),EM="bellNumbers",nbe=["typed","addScalar","isNegative","isInteger","stirlingS2"],ibe=G(EM,nbe,t=>{var{typed:e,addScalar:r,isNegative:n,isInteger:i,stirlingS2:a}=t;return e(EM,{"number | BigNumber":function(o){if(!i(o)||n(o))throw new TypeError("Non-negative integer value expected in function bellNumbers");for(var u=0,l=0;l<=o;l++)u=r(u,a(o,l));return u}})}),CM="catalan",abe=["typed","addScalar","divideScalar","multiplyScalar","combinations","isNegative","isInteger"],sbe=G(CM,abe,t=>{var{typed:e,addScalar:r,divideScalar:n,multiplyScalar:i,combinations:a,isNegative:s,isInteger:o}=t;return e(CM,{"number | BigNumber":function(l){if(!o(l)||s(l))throw new TypeError("Non-negative integer value expected in function catalan");return n(a(i(l,2),l),r(l,1))}})}),MM="composition",obe=["typed","addScalar","combinations","isNegative","isPositive","isInteger","larger"],ube=G(MM,obe,t=>{var{typed:e,addScalar:r,combinations:n,isPositive:i,isNegative:a,isInteger:s,larger:o}=t;return e(MM,{"number | BigNumber, number | BigNumber":function(l,c){if(!s(l)||!i(l)||!s(c)||!i(c))throw new TypeError("Positive integer value expected in function composition");if(o(c,l))throw new TypeError("k must be less than or equal to n in function composition");return n(r(l,-1),r(c,-1))}})}),TM="leafCount",lbe=["parse","typed"],cbe=G(TM,lbe,t=>{var{parse:e,typed:r}=t;function n(i){var a=0;return i.forEach(s=>{a+=n(s)}),a||1}return r(TM,{Node:function(a){return n(a)}})});function OM(t){return er(t)||tn(t)&&t.isUnary()&&er(t.args[0])}function $v(t){return!!(er(t)||(Ho(t)||tn(t))&&t.args.every($v)||js(t)&&$v(t.content))}function FM(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),r.push.apply(r,n)}return r}function Qy(t){for(var e=1;e{var{FunctionNode:e,OperatorNode:r,SymbolNode:n}=t,i=!0,a=!1,s="defaultF",o={add:{trivial:i,total:i,commutative:i,associative:i},unaryPlus:{trivial:i,total:i,commutative:i,associative:i},subtract:{trivial:a,total:i,commutative:a,associative:a},multiply:{trivial:i,total:i,commutative:i,associative:i},divide:{trivial:a,total:i,commutative:a,associative:a},paren:{trivial:i,total:i,commutative:i,associative:a},defaultF:{trivial:a,total:i,commutative:a,associative:a}},u={divide:{total:a},log:{total:a}},l={subtract:{total:a},abs:{trivial:i},log:{total:i}};function c(x,_){var A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:o,w=s;if(typeof x=="string"?w=x:tn(x)?w=x.fn.toString():Ho(x)?w=x.name:js(x)&&(w="paren"),nt(A,w)){var C=A[w];if(nt(C,_))return C[_];if(nt(o,w))return o[w][_]}if(nt(A,s)){var E=A[s];return nt(E,_)?E[_]:o[s][_]}if(nt(o,w)){var N=o[w];if(nt(N,_))return N[_]}return o[s][_]}function f(x){var _=arguments.length>1&&arguments[1]!==void 0?arguments[1]:o;return c(x,"commutative",_)}function h(x){var _=arguments.length>1&&arguments[1]!==void 0?arguments[1]:o;return c(x,"associative",_)}function p(x,_){var A=Qy({},x);for(var w in _)nt(x,w)?A[w]=Qy(Qy({},_[w]),x[w]):A[w]=_[w];return A}function g(x,_){if(!x.args||x.args.length===0)return x;x.args=m(x,_);for(var A=0;A2&&h(x,_)){for(var E=x.args.pop();x.args.length>0;)E=A([x.args.pop(),E]);x.args=E.args}}}function y(x,_){if(!(!x.args||x.args.length===0)){for(var A=S(x),w=x.args.length,C=0;C2&&h(x,_)){for(var E=x.args.shift();x.args.length>0;)E=A([E,x.args.shift()]);x.args=E.args}}}function S(x){return tn(x)?function(_){try{return new r(x.op,x.fn,_,x.implicit)}catch(A){return console.error(A),[]}}:function(_){return new e(new n(x.name),_)}}return{createMakeNodeFunction:S,hasProperty:c,isCommutative:f,isAssociative:h,mergeContext:p,flatten:g,allChildren:m,unflattenr:b,unflattenl:y,defaultContext:o,realContext:u,positiveContext:l}}),dbe="simplify",pbe=["config","typed","parse","add","subtract","multiply","divide","pow","isZero","equal","resolve","simplifyConstant","simplifyCore","?fraction","?bignumber","mathWithTransform","matrix","AccessorNode","ArrayNode","ConstantNode","FunctionNode","IndexNode","ObjectNode","OperatorNode","ParenthesisNode","SymbolNode"],mbe=G(dbe,pbe,t=>{var{config:e,typed:r,parse:n,add:i,subtract:a,multiply:s,divide:o,pow:u,isZero:l,equal:c,resolve:f,simplifyConstant:h,simplifyCore:p,fraction:g,bignumber:m,mathWithTransform:b,matrix:y,AccessorNode:S,ArrayNode:x,ConstantNode:_,FunctionNode:A,IndexNode:w,ObjectNode:C,OperatorNode:E,ParenthesisNode:N,SymbolNode:M}=t,{hasProperty:O,isCommutative:F,isAssociative:q,mergeContext:V,flatten:H,unflattenr:B,unflattenl:I,createMakeNodeFunction:K,defaultContext:$,realContext:se,positiveContext:he}=Sw({FunctionNode:A,OperatorNode:E,SymbolNode:M});r.addConversion({from:"Object",to:"Map",convert:tc});var ne=r("simplify",{Node:me,"Node, Map":(ee,ue)=>me(ee,!1,ue),"Node, Map, Object":(ee,ue,le)=>me(ee,!1,ue,le),"Node, Array":me,"Node, Array, Map":me,"Node, Array, Map, Object":me});r.removeConversion({from:"Object",to:"Map",convert:tc}),ne.defaultContext=$,ne.realContext=se,ne.positiveContext=he;function X(ee){return ee.transform(function(ue,le,Ee){return js(ue)?X(ue.content):ue})}var de={true:!0,false:!0,e:!0,i:!0,Infinity:!0,LN2:!0,LN10:!0,LOG2E:!0,LOG10E:!0,NaN:!0,phi:!0,pi:!0,SQRT1_2:!0,SQRT2:!0,tau:!0};ne.rules=[p,{l:"log(e)",r:"1"},{s:"n-n1 -> n+-n1",assuming:{subtract:{total:!0}}},{s:"n-n -> 0",assuming:{subtract:{total:!1}}},{s:"-(cl*v) -> v * (-cl)",assuming:{multiply:{commutative:!0},subtract:{total:!0}}},{s:"-(cl*v) -> (-cl) * v",assuming:{multiply:{commutative:!1},subtract:{total:!0}}},{s:"-(v*cl) -> v * (-cl)",assuming:{multiply:{commutative:!1},subtract:{total:!0}}},{l:"-(n1/n2)",r:"-n1/n2"},{l:"-v",r:"v * (-1)"},{l:"(n1 + n2)*(-1)",r:"n1*(-1) + n2*(-1)",repeat:!0},{l:"n/n1^n2",r:"n*n1^-n2"},{l:"n/n1",r:"n*n1^-1"},{s:"(n1*n2)^n3 -> n1^n3 * n2^n3",assuming:{multiply:{commutative:!0}}},{s:"(n1*n2)^(-1) -> n2^(-1) * n1^(-1)",assuming:{multiply:{commutative:!1}}},{s:"(n ^ n1) ^ n2 -> n ^ (n1 * n2)",assuming:{divide:{total:!0}}},{l:" vd * ( vd * n1 + n2)",r:"vd^2 * n1 + vd * n2"},{s:" vd * (vd^n4 * n1 + n2) -> vd^(1+n4) * n1 + vd * n2",assuming:{divide:{total:!0}}},{s:"vd^n3 * ( vd * n1 + n2) -> vd^(n3+1) * n1 + vd^n3 * n2",assuming:{divide:{total:!0}}},{s:"vd^n3 * (vd^n4 * n1 + n2) -> vd^(n3+n4) * n1 + vd^n3 * n2",assuming:{divide:{total:!0}}},{l:"n*n",r:"n^2"},{s:"n * n^n1 -> n^(n1+1)",assuming:{divide:{total:!0}}},{s:"n^n1 * n^n2 -> n^(n1+n2)",assuming:{divide:{total:!0}}},h,{s:"n+n -> 2*n",assuming:{add:{total:!0}}},{l:"n+-n",r:"0"},{l:"vd*n + vd",r:"vd*(n+1)"},{l:"n3*n1 + n3*n2",r:"n3*(n1+n2)"},{l:"n3^(-n4)*n1 + n3 * n2",r:"n3^(-n4)*(n1 + n3^(n4+1) *n2)"},{l:"n3^(-n4)*n1 + n3^n5 * n2",r:"n3^(-n4)*(n1 + n3^(n4+n5)*n2)"},{s:"n*vd + vd -> (n+1)*vd",assuming:{multiply:{commutative:!1}}},{s:"vd + n*vd -> (1+n)*vd",assuming:{multiply:{commutative:!1}}},{s:"n1*n3 + n2*n3 -> (n1+n2)*n3",assuming:{multiply:{commutative:!1}}},{s:"n^n1 * n -> n^(n1+1)",assuming:{divide:{total:!0},multiply:{commutative:!1}}},{s:"n1*n3^(-n4) + n2 * n3 -> (n1 + n2*n3^(n4 + 1))*n3^(-n4)",assuming:{multiply:{commutative:!1}}},{s:"n1*n3^(-n4) + n2 * n3^n5 -> (n1 + n2*n3^(n4 + n5))*n3^(-n4)",assuming:{multiply:{commutative:!1}}},{l:"n*cd + cd",r:"(n+1)*cd"},{s:"cd*n + cd -> cd*(n+1)",assuming:{multiply:{commutative:!1}}},{s:"cd + cd*n -> cd*(1+n)",assuming:{multiply:{commutative:!1}}},h,{s:"(-n)*n1 -> -(n*n1)",assuming:{subtract:{total:!0}}},{s:"n1*(-n) -> -(n1*n)",assuming:{subtract:{total:!0},multiply:{commutative:!1}}},{s:"ce+ve -> ve+ce",assuming:{add:{commutative:!0}},imposeContext:{add:{commutative:!1}}},{s:"vd*cd -> cd*vd",assuming:{multiply:{commutative:!0}},imposeContext:{multiply:{commutative:!1}}},{l:"n+-n1",r:"n-n1"},{l:"n+-(n1)",r:"n-(n1)"},{s:"n*(n1^-1) -> n/n1",assuming:{multiply:{commutative:!0}}},{s:"n*n1^-n2 -> n/n1^n2",assuming:{multiply:{commutative:!0}}},{s:"n^-1 -> 1/n",assuming:{multiply:{commutative:!0}}},{l:"n^1",r:"n"},{s:"n*(n1/n2) -> (n*n1)/n2",assuming:{multiply:{associative:!0}}},{s:"n-(n1+n2) -> n-n1-n2",assuming:{addition:{associative:!0,commutative:!0}}},{l:"1*n",r:"n",imposeContext:{multiply:{commutative:!0}}},{s:"n1/(n2/n3) -> (n1*n3)/n2",assuming:{multiply:{associative:!0}}},{l:"n1/(-n2)",r:"-n1/n2"}];function Se(ee,ue){var le={};if(ee.s){var Ee=ee.s.split("->");if(Ee.length===2)le.l=Ee[0],le.r=Ee[1];else throw SyntaxError("Could not parse rule: "+ee.s)}else le.l=ee.l,le.r=ee.r;le.l=X(n(le.l)),le.r=X(n(le.r));for(var Me of["imposeContext","repeat","assuming"])Me in ee&&(le[Me]=ee[Me]);if(ee.evaluate&&(le.evaluate=n(ee.evaluate)),q(le.l,ue)){var P=!F(le.l,ue),U;P&&(U=_e());var Y=K(le.l),pe=_e();le.expanded={},le.expanded.l=Y([le.l,pe]),H(le.expanded.l,ue),B(le.expanded.l,ue),le.expanded.r=Y([le.r,pe]),P&&(le.expandedNC1={},le.expandedNC1.l=Y([U,le.l]),le.expandedNC1.r=Y([U,le.r]),le.expandedNC2={},le.expandedNC2.l=Y([U,le.expanded.l]),le.expandedNC2.r=Y([U,le.expanded.r]))}return le}function ce(ee,ue){for(var le=[],Ee=0;Ee2&&arguments[2]!==void 0?arguments[2]:Hh(),Ee=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},Me=Ee.consoleDebug;ue=ce(ue||ne.rules,Ee.context);var P=f(ee,le);P=X(P);for(var U={},Y=P.toString({parenthesis:"all"});!U[Y];){U[Y]=!0,xe=0;var pe=Y;Me&&console.log("Working on: ",Y);for(var ge=0;ge ").concat(ue[ge].r.toString()))),Me){var Re=P.toString({parenthesis:"all"});Re!==pe&&(console.log("Applying",De,"produced",Re),pe=Re)}I(P,Ee.context)}Y=P.toString({parenthesis:"all"})}return P}function we(ee,ue,le){var Ee=ee;if(ee)for(var Me=0;Me1&&(pe=P(ee.args.slice(0,Y))),Me=ee.args.slice(Y),Ee=Me.length===1?Me[0]:P(Me),le.push(P([pe,Ee]))}return le}function He(ee,ue){var le={placeholders:{}};if(!ee.placeholders&&!ue.placeholders)return le;if(ee.placeholders){if(!ue.placeholders)return ee}else return ue;for(var Ee in ee.placeholders)if(nt(ee.placeholders,Ee)&&(le.placeholders[Ee]=ee.placeholders[Ee],nt(ue.placeholders,Ee)&&!ye(ee.placeholders[Ee],ue.placeholders[Ee])))return null;for(var Me in ue.placeholders)nt(ue.placeholders,Me)&&(le.placeholders[Me]=ue.placeholders[Me]);return le}function Ue(ee,ue){var le=[];if(ee.length===0||ue.length===0)return le;for(var Ee,Me=0;Me2)throw new Error("permuting >2 commutative non-associative rule arguments not yet implemented");var pe=te(ee.args[0],ue.args[1],le);if(pe.length===0)return[];var ge=te(ee.args[1],ue.args[0],le);if(ge.length===0)return[];P=[pe,ge]}Me=J(P)}else if(ue.args.length>=2&&ee.args.length===2){for(var De=Ce(ue,le),Re=[],Ie=0;Ie2)throw Error("Unexpected non-binary associative function: "+ee.toString());return[]}}else if(ee instanceof M){if(ee.name.length===0)throw new Error("Symbol in rule has 0 length...!?");if(de[ee.name]){if(ee.name!==ue.name)return[]}else switch(ee.name[1]>="a"&&ee.name[1]<="z"?ee.name.substring(0,2):ee.name[0]){case"n":case"_p":Me[0].placeholders[ee.name]=ue;break;case"c":case"cl":if(er(ue))Me[0].placeholders[ee.name]=ue;else return[];break;case"v":if(!er(ue))Me[0].placeholders[ee.name]=ue;else return[];break;case"vl":if(Sn(ue))Me[0].placeholders[ee.name]=ue;else return[];break;case"cd":if(OM(ue))Me[0].placeholders[ee.name]=ue;else return[];break;case"vd":if(!OM(ue))Me[0].placeholders[ee.name]=ue;else return[];break;case"ce":if($v(ue))Me[0].placeholders[ee.name]=ue;else return[];break;case"ve":if(!$v(ue))Me[0].placeholders[ee.name]=ue;else return[];break;default:throw new Error("Invalid symbol in rule: "+ee.name)}}else if(ee instanceof _){if(!c(ee.value,ue.value))return[]}else return[];return Me}function ye(ee,ue){if(ee instanceof _&&ue instanceof _){if(!c(ee.value,ue.value))return!1}else if(ee instanceof M&&ue instanceof M){if(ee.name!==ue.name)return!1}else if(ee instanceof E&&ue instanceof E||ee instanceof A&&ue instanceof A){if(ee instanceof E){if(ee.op!==ue.op||ee.fn!==ue.fn)return!1}else if(ee instanceof A&&ee.name!==ue.name)return!1;if(ee.args.length!==ue.args.length)return!1;for(var le=0;le{var{typed:e,config:r,mathWithTransform:n,matrix:i,fraction:a,bignumber:s,AccessorNode:o,ArrayNode:u,ConstantNode:l,FunctionNode:c,IndexNode:f,ObjectNode:h,OperatorNode:p,SymbolNode:g}=t,{isCommutative:m,isAssociative:b,allChildren:y,createMakeNodeFunction:S}=Sw({FunctionNode:c,OperatorNode:p,SymbolNode:g}),x=e("simplifyConstant",{Node:H=>C(V(H,{})),"Node, Object":function(B,I){return C(V(B,I))}});function _(H){return hd(H)?H.valueOf():H instanceof Array?H.map(_):dt(H)?i(_(H.valueOf())):H}function A(H,B,I){try{return n[H].apply(null,B)}catch{return B=B.map(_),N(n[H].apply(null,B),I)}}var w=e({Fraction:O,number:function(B){return B<0?M(new l(-B)):new l(B)},BigNumber:function(B){return B<0?M(new l(-B)):new l(B)},Complex:function(B){throw new Error("Cannot convert Complex number to Node")},string:function(B){return new l(B)},Matrix:function(B){return new u(B.valueOf().map(I=>w(I)))}});function C(H){return pr(H)?H:w(H)}function E(H,B){var I=B&&B.exactFractions!==!1;if(I&&isFinite(H)&&a){var K=a(H),$=B&&typeof B.fractionsLimit=="number"?B.fractionsLimit:1/0;if(K.valueOf()===H&&K.n<$&&K.d<$)return K}return H}var N=e({"string, Object":function(B,I){if(r.number==="BigNumber")return s===void 0&&fw(),s(B);if(r.number==="Fraction")return a===void 0&&qI(),a(B);var K=parseFloat(B);return E(K,I)},"Fraction, Object":function(B,I){return B},"BigNumber, Object":function(B,I){return B},"number, Object":function(B,I){return E(B,I)},"Complex, Object":function(B,I){return B.im!==0?B:E(B.re,I)},"Matrix, Object":function(B,I){return i(E(B.valueOf()))},"Array, Object":function(B,I){return B.map(E)}});function M(H){return new p("-","unaryMinus",[H])}function O(H){var B,I=H.s*H.n;return I<0?B=new p("-","unaryMinus",[new l(-I)]):B=new l(I),H.d===1?B:new p("/","divide",[B,new l(H.d)])}function F(H,B,I){if(!Mc(B))return new o(C(H),C(B));if(Zi(H)||dt(H)){for(var K=Array.from(B.dimensions);K.length>0;)if(er(K[0])&&typeof K[0].value!="string"){var $=N(K.shift().value,I);Zi(H)?H=H.items[$-1]:(H=H.valueOf()[$-1],H instanceof Array&&(H=i(H)))}else if(K.length>1&&er(K[1])&&typeof K[1].value!="string"){var se=N(K[1].value,I),he=[],ne=Zi(H)?H.items:H.valueOf();for(var X of ne)if(Zi(X))he.push(X.items[se-1]);else if(dt(H))he.push(X[se-1]);else break;if(he.length===ne.length)Zi(H)?H=new u(he):H=i(he),K.splice(1,1);else break}else break;return K.length===B.dimensions.length?new o(C(H),B):K.length>0?(B=new f(K),new o(C(H),B)):H}if(Og(H)&&B.dimensions.length===1&&er(B.dimensions[0])){var de=B.dimensions[0].value;return de in H.properties?H.properties[de]:new l}return new o(C(H),B)}function q(H,B,I,K){var $=B.shift(),se=B.reduce((he,ne)=>{if(!pr(ne)){var X=he.pop();if(pr(X))return[X,ne];try{return he.push(A(H,[X,ne],K)),he}catch{he.push(X)}}he.push(C(he.pop()));var de=he.length===1?he[0]:I(he);return[I([de,C(ne)])]},[$]);return se.length===1?se[0]:I([se[0],w(se[1])])}function V(H,B){switch(H.type){case"SymbolNode":return H;case"ConstantNode":switch(typeof H.value){case"number":return N(H.value,B);case"string":return H.value;default:if(!isNaN(H.value))return N(H.value,B)}return H;case"FunctionNode":if(n[H.name]&&n[H.name].rawArgs)return H;{var I=["add","multiply"];if(I.indexOf(H.name)===-1){var K=H.args.map(Ne=>V(Ne,B));if(!K.some(pr))try{return A(H.name,K,B)}catch{}if(H.name==="size"&&K.length===1&&Zi(K[0])){for(var $=[],se=K[0];Zi(se);)$.push(se.items.length),se=se.items[0];return i($)}return new c(H.name,K.map(C))}}case"OperatorNode":{var he=H.fn.toString(),ne,X,de=S(H);if(tn(H)&&H.isUnary())ne=[V(H.args[0],B)],pr(ne[0])?X=de(ne):X=A(he,ne,B);else if(b(H,B.context))if(ne=y(H,B.context),ne=ne.map(Ne=>V(Ne,B)),m(he,B.context)){for(var Se=[],ce=[],xe=0;xe1?(X=q(he,Se,de,B),ce.unshift(X),X=q(he,ce,de,B)):X=q(he,ne,de,B)}else X=q(he,ne,de,B);else ne=H.args.map(Ne=>V(Ne,B)),X=q(he,ne,de,B);return X}case"ParenthesisNode":return V(H.content,B);case"AccessorNode":return F(V(H.object,B),V(H.index,B),B);case"ArrayNode":{var _e=H.items.map(Ne=>V(Ne,B));return _e.some(pr)?new u(_e.map(C)):i(_e)}case"IndexNode":return new f(H.dimensions.map(Ne=>x(Ne,B)));case"ObjectNode":{var me={};for(var we in H.properties)me[we]=x(H.properties[we],B);return new h(me)}case"AssignmentNode":case"BlockNode":case"FunctionAssignmentNode":case"RangeNode":case"ConditionalNode":default:throw new Error("Unimplemented node type in simplifyConstant: ".concat(H.type))}}return x}),PM="simplifyCore",bbe=["typed","parse","equal","isZero","add","subtract","multiply","divide","pow","AccessorNode","ArrayNode","ConstantNode","FunctionNode","IndexNode","ObjectNode","OperatorNode","ParenthesisNode","SymbolNode"],xbe=G(PM,bbe,t=>{var{typed:e,parse:r,equal:n,isZero:i,add:a,subtract:s,multiply:o,divide:u,pow:l,AccessorNode:c,ArrayNode:f,ConstantNode:h,FunctionNode:p,IndexNode:g,ObjectNode:m,OperatorNode:b,ParenthesisNode:y,SymbolNode:S}=t,x=new h(0),_=new h(1),A=new h(!0),w=new h(!1);function C(O){return tn(O)&&["and","not","or"].includes(O.op)}var{hasProperty:E,isCommutative:N}=Sw({FunctionNode:p,OperatorNode:b,SymbolNode:S});function M(O){var F=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},q=F?F.context:void 0;if(E(O,"trivial",q)){if(Ho(O)&&O.args.length===1)return M(O.args[0],F);var V=!1,H=0;if(O.forEach(ce=>{++H,H===1&&(V=M(ce,F))}),H===1)return V}var B=O;if(Ho(B)){var I=_he(B.name);if(I){if(B.args.length>2&&E(B,"associative",q))for(;B.args.length>2;){var K=B.args.pop(),$=B.args.pop();B.args.push(new b(I,B.name,[K,$]))}B=new b(I,B.name,B.args)}else return new p(M(B.fn),B.args.map(ce=>M(ce,F)))}if(tn(B)&&B.isUnary()){var se=M(B.args[0],F);if(B.op==="~"&&tn(se)&&se.isUnary()&&se.op==="~"||B.op==="not"&&tn(se)&&se.isUnary()&&se.op==="not"&&C(se.args[0]))return se.args[0];var he=!0;if(B.op==="-"&&tn(se)&&(se.isBinary()&&se.fn==="subtract"&&(B=new b("-","subtract",[se.args[1],se.args[0]]),he=!1),se.isUnary()&&se.op==="-"))return se.args[0];if(he)return new b(B.op,B.fn,[se])}if(tn(B)&&B.isBinary()){var ne=M(B.args[0],F),X=M(B.args[1],F);if(B.op==="+"){if(er(ne)&&i(ne.value))return X;if(er(X)&&i(X.value))return ne;tn(X)&&X.isUnary()&&X.op==="-"&&(X=X.args[0],B=new b("-","subtract",[ne,X]))}if(B.op==="-")return tn(X)&&X.isUnary()&&X.op==="-"?M(new b("+","add",[ne,X.args[0]]),F):er(ne)&&i(ne.value)?M(new b("-","unaryMinus",[X])):er(X)&&i(X.value)?ne:new b(B.op,B.fn,[ne,X]);if(B.op==="*"){if(er(ne)){if(i(ne.value))return x;if(n(ne.value,1))return X}if(er(X)){if(i(X.value))return x;if(n(X.value,1))return ne;if(N(B,q))return new b(B.op,B.fn,[X,ne],B.implicit)}return new b(B.op,B.fn,[ne,X],B.implicit)}if(B.op==="/")return er(ne)&&i(ne.value)?x:er(X)&&n(X.value,1)?ne:new b(B.op,B.fn,[ne,X]);if(B.op==="^"&&er(X)){if(i(X.value))return _;if(n(X.value,1))return ne}if(B.op==="and"){if(er(ne))if(ne.value){if(C(X))return X}else return w;if(er(X))if(X.value){if(C(ne))return ne}else return w}if(B.op==="or"){if(er(ne)){if(ne.value)return A;if(C(X))return X}if(er(X)){if(X.value)return A;if(C(ne))return ne}}return new b(B.op,B.fn,[ne,X])}if(tn(B))return new b(B.op,B.fn,B.args.map(ce=>M(ce,F)));if(Zi(B))return new f(B.items.map(ce=>M(ce,F)));if(Hu(B))return new c(M(B.object,F),M(B.index,F));if(Mc(B))return new g(B.dimensions.map(ce=>M(ce,F)));if(Og(B)){var de={};for(var Se in B.properties)de[Se]=M(B.properties[Se],F);return new m(de)}return B}return e(PM,{Node:M,"Node,Object":M})}),wbe="resolve",Sbe=["typed","parse","ConstantNode","FunctionNode","OperatorNode","ParenthesisNode"],_be=G(wbe,Sbe,t=>{var{typed:e,parse:r,ConstantNode:n,FunctionNode:i,OperatorNode:a,ParenthesisNode:s}=t;function o(u,l){var c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:new Set;if(!l)return u;if(Sn(u)){if(c.has(u.name)){var f=Array.from(c).join(", ");throw new ReferenceError("recursive loop of variable definitions among {".concat(f,"}"))}var h=l.get(u.name);if(pr(h)){var p=new Set(c);return p.add(u.name),o(h,l,p)}else return typeof h=="number"?r(String(h)):h!==void 0?new n(h):u}else if(tn(u)){var g=u.args.map(function(b){return o(b,l,c)});return new a(u.op,u.fn,g,u.implicit)}else{if(js(u))return new s(o(u.content,l,c));if(Ho(u)){var m=u.args.map(function(b){return o(b,l,c)});return new i(u.name,m)}}return u.map(b=>o(b,l,c))}return e("resolve",{Node:o,"Node, Map | null | undefined":o,"Node, Object":(u,l)=>o(u,tc(l)),"Array | Matrix":e.referToSelf(u=>l=>l.map(c=>u(c))),"Array | Matrix, null | undefined":e.referToSelf(u=>l=>l.map(c=>u(c))),"Array, Object":e.referTo("Array,Map",u=>(l,c)=>u(l,tc(c))),"Matrix, Object":e.referTo("Matrix,Map",u=>(l,c)=>u(l,tc(c))),"Array | Matrix, Map":e.referToSelf(u=>(l,c)=>l.map(f=>u(f,c)))})}),RM="symbolicEqual",Abe=["parse","simplify","typed","OperatorNode"],Dbe=G(RM,Abe,t=>{var{parse:e,simplify:r,typed:n,OperatorNode:i}=t;function a(s,o){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},l=new i("-","subtract",[s,o]),c=r(l,{},u);return er(c)&&!c.value}return n(RM,{"Node, Node":a,"Node, Node, Object":a})}),IM="derivative",Nbe=["typed","config","parse","simplify","equal","isZero","numeric","ConstantNode","FunctionNode","OperatorNode","ParenthesisNode","SymbolNode"],Ebe=G(IM,Nbe,t=>{var{typed:e,config:r,parse:n,simplify:i,equal:a,isZero:s,numeric:o,ConstantNode:u,FunctionNode:l,OperatorNode:c,ParenthesisNode:f,SymbolNode:h}=t;function p(x,_){var A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{simplify:!0},w={};b(w,x,_.name);var C=y(x,w);return A.simplify?i(C):C}e.addConversion({from:"identifier",to:"SymbolNode",convert:n});var g=e(IM,{"Node, SymbolNode":p,"Node, SymbolNode, Object":p});e.removeConversion({from:"identifier",to:"SymbolNode",convert:n}),g._simplify=!0,g.toTex=function(x){return m.apply(null,x.args)};var m=e("_derivTex",{"Node, SymbolNode":function(_,A){return er(_)&&xr(_.value)==="string"?m(n(_.value).toString(),A.toString(),1):m(_.toTex(),A.toString(),1)},"Node, ConstantNode":function(_,A){if(xr(A.value)==="string")return m(_,n(A.value));throw new Error("The second parameter to 'derivative' is a non-string constant")},"Node, SymbolNode, ConstantNode":function(_,A,w){return m(_.toString(),A.name,w.value)},"string, string, number":function(_,A,w){var C;return w===1?C="{d\\over d"+A+"}":C="{d^{"+w+"}\\over d"+A+"^{"+w+"}}",C+"\\left[".concat(_,"\\right]")}}),b=e("constTag",{"Object, ConstantNode, string":function(_,A){return _[A]=!0,!0},"Object, SymbolNode, string":function(_,A,w){return A.name!==w?(_[A]=!0,!0):!1},"Object, ParenthesisNode, string":function(_,A,w){return b(_,A.content,w)},"Object, FunctionAssignmentNode, string":function(_,A,w){return A.params.indexOf(w)===-1?(_[A]=!0,!0):b(_,A.expr,w)},"Object, FunctionNode | OperatorNode, string":function(_,A,w){if(A.args.length>0){for(var C=b(_,A.args[0],w),E=1;E0){var C=_.args.filter(function(H){return A[H]===void 0}),E=C.length===1?C[0]:new c("*","multiply",C),N=w.concat(y(E,A));return new c("*","multiply",N)}return new c("+","add",_.args.map(function(H){return new c("*","multiply",_.args.map(function(B){return B===H?y(B,A):B.clone()}))}))}if(_.op==="/"&&_.isBinary()){var M=_.args[0],O=_.args[1];return A[O]!==void 0?new c("/","divide",[y(M,A),O]):A[M]!==void 0?new c("*","multiply",[new c("-","unaryMinus",[M]),new c("/","divide",[y(O,A),new c("^","pow",[O.clone(),S(2)])])]):new c("/","divide",[new c("-","subtract",[new c("*","multiply",[y(M,A),O.clone()]),new c("*","multiply",[M.clone(),y(O,A)])]),new c("^","pow",[O.clone(),S(2)])])}if(_.op==="^"&&_.isBinary()){var F=_.args[0],q=_.args[1];if(A[F]!==void 0)return er(F)&&(s(F.value)||a(F.value,1))?S(0):new c("*","multiply",[_,new c("*","multiply",[new l("log",[F.clone()]),y(q.clone(),A)])]);if(A[q]!==void 0){if(er(q)){if(s(q.value))return S(0);if(a(q.value,1))return y(F,A)}var V=new c("^","pow",[F.clone(),new c("-","subtract",[q,S(1)])]);return new c("*","multiply",[q.clone(),new c("*","multiply",[y(F,A),V])])}return new c("*","multiply",[new c("^","pow",[F.clone(),q.clone()]),new c("+","add",[new c("*","multiply",[y(F,A),new c("/","divide",[q.clone(),F.clone()])]),new c("*","multiply",[y(q,A),new l("log",[F.clone()])])])])}throw new Error('Cannot process operator "'+_.op+'" in derivative: the operator is not supported, undefined, or the number of arguments passed to it are not supported')}});function S(x,_){return new u(o(x,_||r.number))}return g}),BM="rationalize",Cbe=["config","typed","equal","isZero","add","subtract","multiply","divide","pow","parse","simplifyConstant","simplifyCore","simplify","?bignumber","?fraction","mathWithTransform","matrix","AccessorNode","ArrayNode","ConstantNode","FunctionNode","IndexNode","ObjectNode","OperatorNode","SymbolNode","ParenthesisNode"],Mbe=G(BM,Cbe,t=>{var{config:e,typed:r,equal:n,isZero:i,add:a,subtract:s,multiply:o,divide:u,pow:l,parse:c,simplifyConstant:f,simplifyCore:h,simplify:p,fraction:g,bignumber:m,mathWithTransform:b,matrix:y,AccessorNode:S,ArrayNode:x,ConstantNode:_,FunctionNode:A,IndexNode:w,ObjectNode:C,OperatorNode:E,SymbolNode:N,ParenthesisNode:M}=t;function O(B){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},K=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,$=q(),se=F(B,I,!0,$.firstRules),he=se.variables.length,ne={exactFractions:!1},X={exactFractions:!0};if(B=se.expression,he>=1){B=V(B);var de,Se,ce=!0,xe=!1;B=p(B,$.firstRules,{},ne);for(var _e;Se=ce?$.distrDivRules:$.sucDivRules,B=p(B,Se,{},X),ce=!ce,_e=B.toString(),_e!==de;)xe=!0,de=_e;xe&&(B=p(B,$.firstRulesAgain,{},ne)),B=p(B,$.finalRules,{},ne)}var me=[],we={};return B.type==="OperatorNode"&&B.isBinary()&&B.op==="/"?(he===1&&(B.args[0]=H(B.args[0],me),B.args[1]=H(B.args[1])),K&&(we.numerator=B.args[0],we.denominator=B.args[1])):(he===1&&(B=H(B,me)),K&&(we.numerator=B,we.denominator=null)),K?(we.coefficients=me,we.variables=se.variables,we.expression=B,we):B}return r(BM,{Node:O,"Node, boolean":(B,I)=>O(B,{},I),"Node, Object":O,"Node, Object, boolean":O});function F(B,I,K,$){var se=[],he=p(B,$,I,{exactFractions:!1});K=!!K;var ne="+-*"+(K?"/":"");de(he);var X={};return X.expression=he,X.variables=se,X;function de(Se){var ce=Se.type;if(ce==="FunctionNode")throw new Error("There is an unsolved function call");if(ce==="OperatorNode")if(Se.op==="^"){if(Se.args[1].type!=="ConstantNode"||!ot(parseFloat(Se.args[1].value)))throw new Error("There is a non-integer exponent");de(Se.args[0])}else{if(ne.indexOf(Se.op)===-1)throw new Error("Operator "+Se.op+" invalid in polynomial expression");for(var xe=0;xe1;if($==="OperatorNode"&&B.isBinary()){var he=!1,ne;if(B.op==="^"&&(B.args[0].type==="ParenthesisNode"||B.args[0].type==="OperatorNode")&&B.args[1].type==="ConstantNode"&&(ne=parseFloat(B.args[1].value),he=ne>=2&&ot(ne)),he){if(ne>2){var X=B.args[0],de=new E("^","pow",[B.args[0].cloneDeep(),new _(ne-1)]);B=new E("*","multiply",[X,de])}else B=new E("*","multiply",[B.args[0],B.args[0].cloneDeep()]);se&&(K==="content"?I.content=B:I.args[K]=B)}}if($==="ParenthesisNode")V(B.content,B,"content");else if($!=="ConstantNode"&&$!=="SymbolNode")for(var Se=0;Se=0;X--)if(I[X]!==0){var de=new _(he?I[X]:Math.abs(I[X])),Se=I[X]<0?"-":"+";if(X>0){var ce=new N(se);if(X>1){var xe=new _(X);ce=new E("^","pow",[ce,xe])}I[X]===-1&&he?de=new E("-","unaryMinus",[ce]):Math.abs(I[X])===1?de=ce:de=new E("*","multiply",[de,ce])}he?ne=de:Se==="+"?ne=new E("+","add",[ne,de]):ne=new E("-","subtract",[ne,de]),he=!1}if(he)return new _(0);return ne;function _e(me,we,Ne){var Ce=me.type;if(Ce==="FunctionNode")throw new Error("There is an unsolved function call");if(Ce==="OperatorNode"){if("+-*^".indexOf(me.op)===-1)throw new Error("Operator "+me.op+" invalid");if(we!==null){if((me.fn==="unaryMinus"||me.fn==="pow")&&we.fn!=="add"&&we.fn!=="subtract"&&we.fn!=="multiply")throw new Error("Invalid "+me.op+" placing");if((me.fn==="subtract"||me.fn==="add"||me.fn==="multiply")&&we.fn!=="add"&&we.fn!=="subtract")throw new Error("Invalid "+me.op+" placing");if((me.fn==="subtract"||me.fn==="add"||me.fn==="unaryMinus")&&Ne.noFil!==0)throw new Error("Invalid "+me.op+" placing")}(me.op==="^"||me.op==="*")&&(Ne.fire=me.op);for(var He=0;He$&&(I[Ue]=0),I[Ue]+=Ne.cte*(Ne.oper==="+"?1:-1),$=Math.max(Ue,$);return}Ne.cte=Ue,Ne.fire===""&&(I[0]+=Ne.cte*(Ne.oper==="+"?1:-1))}else throw new Error("Type "+Ce+" is not allowed")}}}),kM="zpk2tf",Tbe=["typed","add","multiply","Complex","number"],Obe=G(kM,Tbe,t=>{var{typed:e,add:r,multiply:n,Complex:i,number:a}=t;return e(kM,{"Array,Array,number":function(l,c,f){return s(l,c,f)},"Array,Array":function(l,c){return s(l,c,1)},"Matrix,Matrix,number":function(l,c,f){return s(l.valueOf(),c.valueOf(),f)},"Matrix,Matrix":function(l,c){return s(l.valueOf(),c.valueOf(),1)}});function s(u,l,c){u.some(S=>S.type==="BigNumber")&&(u=u.map(S=>a(S))),l.some(S=>S.type==="BigNumber")&&(l=l.map(S=>a(S)));for(var f=[i(1,0)],h=[i(1,0)],p=0;p=0&&f-h{var{typed:e,add:r,multiply:n,Complex:i,divide:a,matrix:s}=t;return e(LM,{"Array, Array":function(c,f){var h=u(512);return o(c,f,h)},"Array, Array, Array":function(c,f,h){return o(c,f,h)},"Array, Array, number":function(c,f,h){if(h<0)throw new Error("w must be a positive number");var p=u(h);return o(c,f,p)},"Matrix, Matrix":function(c,f){var h=u(512),{w:p,h:g}=o(c.valueOf(),f.valueOf(),h);return{w:s(p),h:s(g)}},"Matrix, Matrix, Matrix":function(c,f,h){var{h:p}=o(c.valueOf(),f.valueOf(),h.valueOf());return{h:s(p),w:s(h)}},"Matrix, Matrix, number":function(c,f,h){if(h<0)throw new Error("w must be a positive number");var p=u(h),{h:g}=o(c.valueOf(),f.valueOf(),p);return{h:s(g),w:s(p)}}});function o(l,c,f){for(var h=[],p=[],g=0;g{var{classes:e}=t;return function(n,i){var a=e[i&&i.mathjs];return a&&typeof a.fromJSON=="function"?a.fromJSON(i):i}}),kbe="replacer",Lbe=[],$be=G(kbe,Lbe,()=>function(e,r){return typeof r=="number"&&(!isFinite(r)||isNaN(r))?{mathjs:"number",value:String(r)}:r}),zbe="12.3.2",qbe=G("true",[],()=>!0),Ube=G("false",[],()=>!1),Hbe=G("null",[],()=>null),Wbe=$i("Infinity",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r(1/0):1/0}),Vbe=$i("NaN",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r(NaN):NaN}),Ybe=$i("pi",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?pw(r):nie}),jbe=$i("tau",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?Ece(r):iie}),Gbe=$i("e",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?Dce(r):aie}),Xbe=$i("phi",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?Nce(r):sie}),Zbe=$i("LN2",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r(2).ln():Math.LN2}),Kbe=$i("LN10",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r(10).ln():Math.LN10}),Jbe=$i("LOG2E",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r(1).div(new r(2).ln()):Math.LOG2E}),Qbe=$i("LOG10E",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r(1).div(new r(10).ln()):Math.LOG10E}),e1e=$i("SQRT1_2",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r("0.5").sqrt():Math.SQRT1_2}),t1e=$i("SQRT2",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r(2).sqrt():Math.SQRT2}),r1e=$i("i",["Complex"],t=>{var{Complex:e}=t;return e.I}),n1e=G("version",[],()=>zbe);function $i(t,e,r){return G(t,e,r,{recreateOnConfigChange:!0})}var i1e=Dt("speedOfLight","299792458","m s^-1"),a1e=Dt("gravitationConstant","6.67430e-11","m^3 kg^-1 s^-2"),s1e=Dt("planckConstant","6.62607015e-34","J s"),o1e=Dt("reducedPlanckConstant","1.0545718176461565e-34","J s"),u1e=Dt("magneticConstant","1.25663706212e-6","N A^-2"),l1e=Dt("electricConstant","8.8541878128e-12","F m^-1"),c1e=Dt("vacuumImpedance","376.730313667","ohm"),f1e=Dt("coulomb","8.987551792261171e9","N m^2 C^-2"),h1e=Dt("elementaryCharge","1.602176634e-19","C"),d1e=Dt("bohrMagneton","9.2740100783e-24","J T^-1"),p1e=Dt("conductanceQuantum","7.748091729863649e-5","S"),m1e=Dt("inverseConductanceQuantum","12906.403729652257","ohm"),v1e=Dt("magneticFluxQuantum","2.0678338484619295e-15","Wb"),g1e=Dt("nuclearMagneton","5.0507837461e-27","J T^-1"),y1e=Dt("klitzing","25812.807459304513","ohm"),b1e=Dt("bohrRadius","5.29177210903e-11","m"),x1e=Dt("classicalElectronRadius","2.8179403262e-15","m"),w1e=Dt("electronMass","9.1093837015e-31","kg"),S1e=Dt("fermiCoupling","1.1663787e-5","GeV^-2"),_1e=Wg("fineStructure",.0072973525693),A1e=Dt("hartreeEnergy","4.3597447222071e-18","J"),D1e=Dt("protonMass","1.67262192369e-27","kg"),N1e=Dt("deuteronMass","3.3435830926e-27","kg"),E1e=Dt("neutronMass","1.6749271613e-27","kg"),C1e=Dt("quantumOfCirculation","3.6369475516e-4","m^2 s^-1"),M1e=Dt("rydberg","10973731.568160","m^-1"),T1e=Dt("thomsonCrossSection","6.6524587321e-29","m^2"),O1e=Wg("weakMixingAngle",.2229),F1e=Wg("efimovFactor",22.7),P1e=Dt("atomicMass","1.66053906660e-27","kg"),R1e=Dt("avogadro","6.02214076e23","mol^-1"),I1e=Dt("boltzmann","1.380649e-23","J K^-1"),B1e=Dt("faraday","96485.33212331001","C mol^-1"),k1e=Dt("firstRadiation","3.7417718521927573e-16","W m^2"),L1e=Dt("loschmidt","2.686780111798444e25","m^-3"),$1e=Dt("gasConstant","8.31446261815324","J K^-1 mol^-1"),z1e=Dt("molarPlanckConstant","3.990312712893431e-10","J s mol^-1"),q1e=Dt("molarVolume","0.022413969545014137","m^3 mol^-1"),U1e=Wg("sackurTetrode",-1.16487052358),H1e=Dt("secondRadiation","0.014387768775039337","m K"),W1e=Dt("stefanBoltzmann","5.67037441918443e-8","W m^-2 K^-4"),V1e=Dt("wienDisplacement","2.897771955e-3","m K"),Y1e=Dt("molarMass","0.99999999965e-3","kg mol^-1"),j1e=Dt("molarMassC12","11.9999999958e-3","kg mol^-1"),G1e=Dt("gravity","9.80665","m s^-2"),X1e=Dt("planckLength","1.616255e-35","m"),Z1e=Dt("planckMass","2.176435e-8","kg"),K1e=Dt("planckTime","5.391245e-44","s"),J1e=Dt("planckCharge","1.87554603778e-18","C"),Q1e=Dt("planckTemperature","1.416785e+32","K");function Dt(t,e,r){var n=["config","Unit","BigNumber"];return G(t,n,i=>{var{config:a,Unit:s,BigNumber:o}=i,u=a.number==="BigNumber"?new o(e):parseFloat(e),l=new s(u,r);return l.fixPrefix=!0,l})}function Wg(t,e){var r=["config","BigNumber"];return G(t,r,n=>{var{config:i,BigNumber:a}=n;return i.number==="BigNumber"?new a(e):e})}var exe="apply",txe=["typed","isInteger"],rxe=G(exe,txe,t=>{var{typed:e,isInteger:r}=t,n=uw({typed:e,isInteger:r});return e("apply",{"...any":function(a){var s=a[1];Ct(s)?a[1]=s-1:Mt(s)&&(a[1]=s.minus(1));try{return n.apply(null,a)}catch(o){throw oi(o)}}})},{isTransformFunction:!0}),nxe="column",ixe=["typed","Index","matrix","range"],axe=G(nxe,ixe,t=>{var{typed:e,Index:r,matrix:n,range:i}=t,a=$I({typed:e,Index:r,matrix:n,range:i});return e("column",{"...any":function(o){var u=o.length-1,l=o[u];Ct(l)&&(o[u]=l-1);try{return a.apply(null,o)}catch(c){throw oi(c)}}})},{isTransformFunction:!0});function _w(t,e,r){var n=t.filter(function(u){return Sn(u)&&!(u.name in e)&&!r.has(u.name)})[0];if(!n)throw new Error('No undefined variable found in inline expression "'+t+'"');var i=n.name,a=new Map,s=new yR(r,a,new Set([i])),o=t.compile();return function(l){return a.set(i,l),o.evaluate(s)}}var sxe="filter",oxe=["typed"],uxe=G(sxe,oxe,t=>{var{typed:e}=t;function r(i,a,s){var o,u;return i[0]&&(o=i[0].compile().evaluate(s)),i[1]&&(Sn(i[1])||dd(i[1])?u=i[1].compile().evaluate(s):u=_w(i[1],a,s)),n(o,u)}r.rawArgs=!0;var n=e("filter",{"Array, function":$M,"Matrix, function":function(a,s){return a.create($M(a.toArray(),s))},"Array, RegExp":wv,"Matrix, RegExp":function(a,s){return a.create(wv(a.toArray(),s))}});return r},{isTransformFunction:!0});function $M(t,e){return dR(t,function(r,n,i){return Rc(e,r,[n+1],i,"filter")})}var lxe="forEach",cxe=["typed"],fxe=G(lxe,cxe,t=>{var{typed:e}=t;function r(i,a,s){var o,u;return i[0]&&(o=i[0].compile().evaluate(s)),i[1]&&(Sn(i[1])||dd(i[1])?u=i[1].compile().evaluate(s):u=_w(i[1],a,s)),n(o,u)}r.rawArgs=!0;var n=e("forEach",{"Array | Matrix, function":function(a,s){var o=function u(l,c){if(Array.isArray(l))Rg(l,function(f,h){u(f,c.concat(h+1))});else return Rc(s,l,c,a,"forEach")};o(a.valueOf(),[])}});return r},{isTransformFunction:!0}),hxe="index",dxe=["Index","getMatrixDataType"],pxe=G(hxe,dxe,t=>{var{Index:e,getMatrixDataType:r}=t;return function(){for(var i=[],a=0,s=arguments.length;a0?0:2;else if(o&&o.isSet===!0)o=o.map(function(l){return l-1});else if(sr(o)||dt(o))r(o)!=="boolean"&&(o=o.map(function(l){return l-1}));else if(Ct(o))o--;else if(Mt(o))o=o.toNumber()-1;else if(typeof o!="string")throw new TypeError("Dimension must be an Array, Matrix, number, string, or Range");i[a]=o}var u=new e;return e.apply(u,i),u}},{isTransformFunction:!0}),mxe="map",vxe=["typed"],gxe=G(mxe,vxe,t=>{var{typed:e}=t;function r(i,a,s){var o,u;return i[0]&&(o=i[0].compile().evaluate(s)),i[1]&&(Sn(i[1])||dd(i[1])?u=i[1].compile().evaluate(s):u=_w(i[1],a,s)),n(o,u)}r.rawArgs=!0;var n=e("map",{"Array, function":function(a,s){return zM(a,s,a)},"Matrix, function":function(a,s){return a.create(zM(a.valueOf(),s,a))}});return r},{isTransformFunction:!0});function zM(t,e,r){function n(i,a){return Array.isArray(i)?Ws(i,function(s,o){return n(s,a.concat(o+1))}):Rc(e,i,a,r,"map")}return n(t,[])}function Ko(t){if(t.length===2&&sa(t[0])){t=t.slice();var e=t[1];Ct(e)?t[1]=e-1:Mt(e)&&(t[1]=e.minus(1))}return t}var yxe="max",bxe=["typed","config","numeric","larger"],xxe=G(yxe,bxe,t=>{var{typed:e,config:r,numeric:n,larger:i}=t,a=XI({typed:e,config:r,numeric:n,larger:i});return e("max",{"...any":function(o){o=Ko(o);try{return a.apply(null,o)}catch(u){throw oi(u)}}})},{isTransformFunction:!0}),wxe="mean",Sxe=["typed","add","divide"],_xe=G(wxe,Sxe,t=>{var{typed:e,add:r,divide:n}=t,i=iB({typed:e,add:r,divide:n});return e("mean",{"...any":function(s){s=Ko(s);try{return i.apply(null,s)}catch(o){throw oi(o)}}})},{isTransformFunction:!0}),Axe="min",Dxe=["typed","config","numeric","smaller"],Nxe=G(Axe,Dxe,t=>{var{typed:e,config:r,numeric:n,smaller:i}=t,a=ZI({typed:e,config:r,numeric:n,smaller:i});return e("min",{"...any":function(o){o=Ko(o);try{return a.apply(null,o)}catch(u){throw oi(u)}}})},{isTransformFunction:!0}),Exe="range",Cxe=["typed","config","?matrix","?bignumber","smaller","smallerEq","larger","largerEq","add","isPositive"],Mxe=G(Exe,Cxe,t=>{var{typed:e,config:r,matrix:n,bignumber:i,smaller:a,smallerEq:s,larger:o,largerEq:u,add:l,isPositive:c}=t,f=HI({typed:e,config:r,matrix:n,bignumber:i,smaller:a,smallerEq:s,larger:o,largerEq:u,add:l,isPositive:c});return e("range",{"...any":function(p){var g=p.length-1,m=p[g];return typeof m!="boolean"&&p.push(!0),f.apply(null,p)}})},{isTransformFunction:!0}),Txe="row",Oxe=["typed","Index","matrix","range"],Fxe=G(Txe,Oxe,t=>{var{typed:e,Index:r,matrix:n,range:i}=t,a=WI({typed:e,Index:r,matrix:n,range:i});return e("row",{"...any":function(o){var u=o.length-1,l=o[u];Ct(l)&&(o[u]=l-1);try{return a.apply(null,o)}catch(c){throw oi(c)}}})},{isTransformFunction:!0}),Pxe="subset",Rxe=["typed","matrix","zeros","add"],Ixe=G(Pxe,Rxe,t=>{var{typed:e,matrix:r,zeros:n,add:i}=t,a=VI({typed:e,matrix:r,zeros:n,add:i});return e("subset",{"...any":function(o){try{return a.apply(null,o)}catch(u){throw oi(u)}}})},{isTransformFunction:!0}),Bxe="concat",kxe=["typed","matrix","isInteger"],Lxe=G(Bxe,kxe,t=>{var{typed:e,matrix:r,isInteger:n}=t,i=LI({typed:e,matrix:r,isInteger:n});return e("concat",{"...any":function(s){var o=s.length-1,u=s[o];Ct(u)?s[o]=u-1:Mt(u)&&(s[o]=u.minus(1));try{return i.apply(null,s)}catch(l){throw oi(l)}}})},{isTransformFunction:!0}),qM="diff",$xe=["typed","matrix","subtract","number","bignumber"],zxe=G(qM,$xe,t=>{var{typed:e,matrix:r,subtract:n,number:i,bignumber:a}=t,s=zI({typed:e,matrix:r,subtract:n,number:i,bignumber:a});return e(qM,{"...any":function(u){u=Ko(u);try{return s.apply(null,u)}catch(l){throw oi(l)}}})},{isTransformFunction:!0}),qxe="std",Uxe=["typed","map","sqrt","variance"],Hxe=G(qxe,Uxe,t=>{var{typed:e,map:r,sqrt:n,variance:i}=t,a=oB({typed:e,map:r,sqrt:n,variance:i});return e("std",{"...any":function(o){o=Ko(o);try{return a.apply(null,o)}catch(u){throw oi(u)}}})},{isTransformFunction:!0}),UM="sum",Wxe=["typed","config","add","numeric"],Vxe=G(UM,Wxe,t=>{var{typed:e,config:r,add:n,numeric:i}=t,a=rB({typed:e,config:r,add:n,numeric:i});return e(UM,{"...any":function(o){o=Ko(o);try{return a.apply(null,o)}catch(u){throw oi(u)}}})},{isTransformFunction:!0}),Yxe="quantileSeq",jxe=["typed","bignumber","add","subtract","divide","multiply","partitionSelect","compare","isInteger","smaller","smallerEq","larger"],Gxe=G(Yxe,jxe,t=>{var{typed:e,bignumber:r,add:n,subtract:i,divide:a,multiply:s,partitionSelect:o,compare:u,isInteger:l,smaller:c,smallerEq:f,larger:h}=t,p=sB({typed:e,bignumber:r,add:n,subtract:i,divide:a,multiply:s,partitionSelect:o,compare:u,isInteger:l,smaller:c,smallerEq:f,larger:h});return e("quantileSeq",{"Array | Matrix, number | BigNumber":p,"Array | Matrix, number | BigNumber, number":(m,b,y)=>p(m,b,g(y)),"Array | Matrix, number | BigNumber, boolean":p,"Array | Matrix, number | BigNumber, boolean, number":(m,b,y,S)=>p(m,b,y,g(S)),"Array | Matrix, Array | Matrix":p,"Array | Matrix, Array | Matrix, number":(m,b,y)=>p(m,b,g(y)),"Array | Matrix, Array | Matrix, boolean":p,"Array | Matrix, Array | Matrix, boolean, number":(m,b,y,S)=>p(m,b,y,g(S))});function g(m){return Ko([[],m])[1]}},{isTransformFunction:!0}),HM="cumsum",Xxe=["typed","add","unaryPlus"],Zxe=G(HM,Xxe,t=>{var{typed:e,add:r,unaryPlus:n}=t,i=nB({typed:e,add:r,unaryPlus:n});return e(HM,{"...any":function(s){if(s.length===2&&sa(s[0])){var o=s[1];Ct(o)?s[1]=o-1:Mt(o)&&(s[1]=o.minus(1))}try{return i.apply(null,s)}catch(u){throw oi(u)}}})},{isTransformFunction:!0}),WM="variance",Kxe=["typed","add","subtract","multiply","divide","apply","isNaN"],Jxe=G(WM,Kxe,t=>{var{typed:e,add:r,subtract:n,multiply:i,divide:a,apply:s,isNaN:o}=t,u=aB({typed:e,add:r,subtract:n,multiply:i,divide:a,apply:s,isNaN:o});return e(WM,{"...any":function(c){c=Ko(c);try{return u.apply(null,c)}catch(f){throw oi(f)}}})},{isTransformFunction:!0}),VM="print",Qxe=["typed","matrix","zeros","add"],ewe=G(VM,Qxe,t=>{var{typed:e,matrix:r,zeros:n,add:i}=t,a=jI({typed:e,matrix:r,zeros:n,add:i});return e(VM,{"string, Object | Array":function(u,l){return a(s(u),l)},"string, Object | Array, number | Object":function(u,l,c){return a(s(u),l,c)}});function s(o){return o.replace(YI,u=>{var l=u.slice(1).split("."),c=l.map(function(f){return!isNaN(f)&&f.length>0?parseInt(f)-1:f});return"$"+c.join(".")})}},{isTransformFunction:!0}),twe="and",rwe=["typed","matrix","zeros","add","equalScalar","not","concat"],nwe=G(twe,rwe,t=>{var{typed:e,matrix:r,equalScalar:n,zeros:i,not:a,concat:s}=t,o=GI({typed:e,matrix:r,equalScalar:n,zeros:i,not:a,concat:s});function u(l,c,f){var h=l[0].compile().evaluate(f);if(!sa(h)&&!o(h,!0))return!1;var p=l[1].compile().evaluate(f);return o(h,p)}return u.rawArgs=!0,u},{isTransformFunction:!0}),iwe="or",awe=["typed","matrix","equalScalar","DenseMatrix","concat"],swe=G(iwe,awe,t=>{var{typed:e,matrix:r,equalScalar:n,DenseMatrix:i,concat:a}=t,s=kI({typed:e,matrix:r,equalScalar:n,DenseMatrix:i,concat:a});function o(u,l,c){var f=u[0].compile().evaluate(c);if(!sa(f)&&s(f,!1))return!0;var h=u[1].compile().evaluate(c);return s(f,h)}return o.rawArgs=!0,o},{isTransformFunction:!0}),owe="bitAnd",uwe=["typed","matrix","zeros","add","equalScalar","not","concat"],lwe=G(owe,uwe,t=>{var{typed:e,matrix:r,equalScalar:n,zeros:i,not:a,concat:s}=t,o=II({typed:e,matrix:r,equalScalar:n,zeros:i,not:a,concat:s});function u(l,c,f){var h=l[0].compile().evaluate(f);if(!sa(h)){if(isNaN(h))return NaN;if(h===0||h===!1)return 0}var p=l[1].compile().evaluate(f);return o(h,p)}return u.rawArgs=!0,u},{isTransformFunction:!0}),cwe="bitOr",fwe=["typed","matrix","equalScalar","DenseMatrix","concat"],hwe=G(cwe,fwe,t=>{var{typed:e,matrix:r,equalScalar:n,DenseMatrix:i,concat:a}=t,s=BI({typed:e,matrix:r,equalScalar:n,DenseMatrix:i,concat:a});function o(u,l,c){var f=u[0].compile().evaluate(c);if(!sa(f)){if(isNaN(f))return NaN;if(f===-1)return-1;if(f===!0)return 1}var h=u[1].compile().evaluate(c);return s(f,h)}return o.rawArgs=!0,o},{isTransformFunction:!0}),Ge=Fne({config:Pe}),wr=Bne({}),YM=Gbe({BigNumber:Ge,config:Pe}),dwe=Ube({}),pwe=_1e({BigNumber:Ge,config:Pe}),tl=zne({}),cB=r1e({Complex:wr}),mwe=Wbe({BigNumber:Ge,config:Pe}),vwe=Kbe({BigNumber:Ge,config:Pe}),gwe=Qbe({BigNumber:Ge,config:Pe}),Vg=Yne({}),ywe=Vbe({BigNumber:Ge,config:Pe}),bwe=Hbe({}),xwe=Xbe({BigNumber:Ge,config:Pe}),wwe=Hne({}),fB=Bre({}),Swe=e1e({BigNumber:Ge,config:Pe}),_we=U1e({BigNumber:Ge,config:Pe}),hB=jbe({BigNumber:Ge,config:Pe}),Awe=qbe({}),Dwe=n1e({}),Tt=Zne({Matrix:Vg}),Nwe=F1e({BigNumber:Ge,config:Pe}),Ewe=Zbe({BigNumber:Ge,config:Pe}),h1=Ybe({BigNumber:Ge,config:Pe}),Cwe=$be({}),Mwe=t1e({BigNumber:Ge,config:Pe}),re=Fre({BigNumber:Ge,Complex:wr,DenseMatrix:Tt,Fraction:tl}),Aw=oae({BigNumber:Ge,config:Pe,typed:re}),Twe=O1e({BigNumber:Ge,config:Pe}),ui=lae({typed:re}),Owe=Lce({Complex:wr,config:Pe,typed:re}),Fwe=Uce({BigNumber:Ge,typed:re}),Pwe=Yce({BigNumber:Ge,Complex:wr,config:Pe,typed:re}),yn=dae({typed:re}),Rwe=eoe({typed:re}),Iwe=Jce({BigNumber:Ge,Complex:wr,config:Pe,typed:re}),Bwe=nfe({typed:re}),dB=sfe({typed:re}),kwe=cfe({Complex:wr,config:Pe,typed:re}),Pi=qie({BigNumber:Ge,typed:re}),Lwe=jse({typed:re}),$we=Lie({typed:re}),zwe=Jne({typed:re}),Yg=vye({typed:re}),jg=Wie({Complex:wr,typed:re}),rl=roe({typed:re}),Dw=hfe({typed:re}),qwe=vfe({BigNumber:Ge,typed:re}),Uwe=xfe({BigNumber:Ge,typed:re}),Hwe=Cae({typed:re}),zt=Nie({config:Pe,typed:re}),Wwe=Aue({typed:re}),pB=Tae({typed:re}),Vwe=Fae({Complex:wr,typed:re}),Ywe=Soe({typed:re}),jwe=Noe({typed:re}),vd=Iue({typed:re}),Nw=Moe({typed:re}),Gwe=que({format:vd,typed:re}),Ew=ioe({typed:re}),wi=eie({typed:re}),Jo=fie({typed:re}),nl=gie({typed:re}),Ba=bie({typed:re}),Xwe=Jbe({BigNumber:Ge,config:Pe}),Zwe=Sye({Complex:wr,typed:re}),Kwe=dse({Complex:wr,config:Pe,typed:re}),mB=mse({Complex:wr,config:Pe,typed:re}),il=Ioe({typed:re}),Xr=yse({typed:re}),zv=uoe({typed:re}),Qs=Rie({typed:re}),Jwe=$ue({format:vd,typed:re}),Qwe=Zye({config:Pe,typed:re}),eSe=jI({typed:re}),tSe=Jye({config:Pe,typed:re}),Cw=soe({typed:re}),rSe=Afe({BigNumber:Ge,typed:re}),vB=Ase({BigNumber:Ge,Fraction:tl,complex:jg,typed:re}),Gg=Cfe({typed:re}),eo=Mie({Matrix:Vg,equalScalar:zt,typed:re}),nSe=nae({typed:re}),iSe=Mse({typed:re}),aSe=Bie({typed:re}),ca=mae({typed:re}),sSe=Ffe({typed:re}),gB=_ie({typed:re}),oSe=zce({Complex:wr,config:Pe,typed:re}),uSe=Gce({BigNumber:Ge,typed:re}),Mw=uw({isInteger:wi,typed:re}),lSe=Zce({BigNumber:Ge,Complex:wr,config:Pe,typed:re}),cSe=kue({format:vd,typed:re}),fSe=yye({typed:re}),hSe=pfe({typed:re}),dSe=Sfe({BigNumber:Ge,typed:re}),gd=wie({typed:re}),pSe=jue({typed:re}),mSe=ebe({config:Pe,typed:re}),vSe=Nfe({BigNumber:Ge,typed:re}),gSe=Tfe({typed:re}),ySe=Rce({SparseMatrix:eo,typed:re}),ka=Ese({Complex:wr,config:Pe,typed:re}),bSe=Ife({typed:re}),ss=aae({typed:re}),xSe=Wce({BigNumber:Ge,Complex:wr,config:Pe,typed:re}),wSe=yfe({BigNumber:Ge,typed:re}),Bc=jie({Fraction:tl,typed:re}),al=die({typed:re}),Ye=Xie({DenseMatrix:Tt,Matrix:Vg,SparseMatrix:eo,typed:re}),SSe=Kie({isZero:Ba,matrix:Ye,typed:re}),_Se=Oue({isNaN:gd,isNumeric:al,typed:re}),Ea=Zue({bignumber:Pi,fraction:Bc,number:Qs}),yB=Pue({config:Pe,multiplyScalar:Xr,numeric:Ea,typed:re}),bB=Hoe({isInteger:wi,matrix:Ye,typed:re}),In=Qoe({matrix:Ye,config:Pe,typed:re}),ASe=tue({matrix:Ye,typed:re}),yd=oue({matrix:Ye,typed:re}),xB=Pse({BigNumber:Ge,config:Pe,matrix:Ye,typed:re}),On=fue({BigNumber:Ge,config:Pe,matrix:Ye,typed:re}),DSe=efe({Complex:wr,config:Pe,typed:re}),wB=gae({BigNumber:Ge,Complex:wr,Fraction:tl,config:Pe,isNegative:Jo,matrix:Ye,typed:re,unaryMinus:ss}),Zt=LI({isInteger:wi,matrix:Ye,typed:re}),NSe=moe({prod:yB,size:In,typed:re}),Tw=lue({conj:rl,transpose:yd,typed:re}),SB=boe({DenseMatrix:Tt,SparseMatrix:eo,matrix:Ye,typed:re}),Lr=Jue({numeric:Ea,typed:re}),bd=hle({DenseMatrix:Tt,concat:Zt,divideScalar:Lr,equalScalar:zt,matrix:Ye,typed:re}),fa=zle({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),xd=Aoe({matrix:Ye,typed:re}),ESe=mie({isNumeric:al,typed:re}),Qo=Ooe({BigNumber:Ge,DenseMatrix:Tt,SparseMatrix:eo,config:Pe,matrix:Ye,typed:re}),CSe=Poe({matrix:Ye,multiplyScalar:Xr,typed:re}),Xg=ece({DenseMatrix:Tt,concat:Zt,config:Pe,matrix:Ye,typed:re}),MSe=Ale({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re,zeros:On}),_B=ple({DenseMatrix:Tt,divideScalar:Lr,equalScalar:zt,matrix:Ye,multiplyScalar:Xr,subtractScalar:ca,typed:re}),Ow=tae({flatten:xd,matrix:Ye,size:In,typed:re}),TSe=Sse({BigNumber:Ge,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),OSe=zoe({BigNumber:Ge,config:Pe,matrix:Ye,typed:re}),Fw=gde({addScalar:yn,complex:jg,conj:rl,divideScalar:Lr,equal:fa,identity:Qo,isZero:Ba,matrix:Ye,multiplyScalar:Xr,sign:vB,sqrt:ka,subtractScalar:ca,typed:re,unaryMinus:ss,zeros:On}),FSe=Yoe({config:Pe,matrix:Ye}),PSe=Nle({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re,zeros:On}),kc=rle({BigNumber:Ge,DenseMatrix:Tt,equalScalar:zt,matrix:Ye,typed:re,zeros:On}),ni=Vle({DenseMatrix:Tt,concat:Zt,config:Pe,matrix:Ye,typed:re}),Gr=Ose({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,subtractScalar:ca,typed:re,unaryMinus:ss}),RSe=Wue({concat:Zt,matrix:Ye,typed:re}),ISe=ace({DenseMatrix:Tt,concat:Zt,config:Pe,equalScalar:zt,matrix:Ye,typed:re}),Pw=vle({DenseMatrix:Tt,divideScalar:Lr,equalScalar:zt,matrix:Ye,multiplyScalar:Xr,subtractScalar:ca,typed:re}),BSe=foe({DenseMatrix:Tt,concat:Zt,matrix:Ye,typed:re}),Ht=nhe({DenseMatrix:Tt,SparseMatrix:eo,addScalar:yn,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),kSe=ufe({BigNumber:Ge,DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),LSe=II({concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),$Se=BI({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),zSe=Jse({DenseMatrix:Tt,concat:Zt,matrix:Ye,typed:re}),qSe=sbe({addScalar:yn,combinations:Yg,divideScalar:Lr,isInteger:wi,isNegative:Jo,multiplyScalar:Xr,typed:re}),sl=Ole({BigNumber:Ge,DenseMatrix:Tt,Fraction:tl,concat:Zt,config:Pe,equalScalar:zt,matrix:Ye,typed:re}),AB=Lle({concat:Zt,matrix:Ye,typed:re}),USe=nB({add:Ht,typed:re,unaryPlus:Aw}),Rw=nce({equal:fa,typed:re}),HSe=zI({matrix:Ye,number:Qs,subtract:Gr,typed:re}),WSe=Q0e({abs:ui,addScalar:yn,deepEqual:Rw,divideScalar:Lr,multiplyScalar:Xr,sqrt:ka,subtractScalar:ca,typed:re}),Zg=lhe({addScalar:yn,conj:rl,multiplyScalar:Xr,size:In,typed:re}),VSe=Hle({compareText:AB,isZero:Ba,typed:re}),DB=FI({DenseMatrix:Tt,config:Pe,equalScalar:zt,matrix:Ye,round:kc,typed:re,zeros:On}),YSe=ose({BigNumber:Ge,DenseMatrix:Tt,concat:Zt,config:Pe,equalScalar:zt,matrix:Ye,round:kc,typed:re,zeros:On}),jSe=ahe({abs:ui,addScalar:yn,divideScalar:Lr,isPositive:nl,multiplyScalar:Xr,smaller:ni,sqrt:ka,typed:re}),NB=mce({DenseMatrix:Tt,smaller:ni}),Wn=yce({ImmutableDenseMatrix:NB,getMatrixDataType:Nw}),ii=Kle({DenseMatrix:Tt,concat:Zt,config:Pe,matrix:Ye,typed:re}),Iw=ile({Complex:wr,config:Pe,divideScalar:Lr,typed:re}),GSe=yle({DenseMatrix:Tt,divideScalar:Lr,equalScalar:zt,matrix:Ye,multiplyScalar:Xr,subtractScalar:ca,typed:re}),XSe=Qie({flatten:xd,matrix:Ye,size:In,typed:re}),ZSe=ZI({config:Pe,numeric:Ea,smaller:ni,typed:re}),EB=PI({DenseMatrix:Tt,concat:Zt,config:Pe,equalScalar:zt,matrix:Ye,round:kc,typed:re,zeros:On}),lr=xse({addScalar:yn,dot:Zg,equalScalar:zt,matrix:Ye,multiplyScalar:Xr,typed:re}),KSe=ule({Complex:wr,config:Pe,divideScalar:Lr,typed:re}),JSe=kI({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),Kg=uce({compare:sl,isNaN:gd,isNumeric:al,typed:re}),QSe=Cle({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re,zeros:On}),CB=qde({SparseMatrix:eo,abs:ui,add:Ht,divideScalar:Lr,larger:ii,largerEq:Xg,multiply:lr,subtract:Gr,transpose:yd,typed:re}),zi=VI({add:Ht,matrix:Ye,typed:re,zeros:On}),Bw=rB({add:Ht,config:Pe,numeric:Ea,typed:re}),e_e=hhe({add:Ht,matrix:Ye,typed:re}),MB=xle({DenseMatrix:Tt,divideScalar:Lr,equalScalar:zt,matrix:Ye,multiplyScalar:Xr,subtractScalar:ca,typed:re}),t_e=Obe({Complex:wr,add:Ht,multiply:lr,number:Qs,typed:re}),kw=Nae({DenseMatrix:Tt,config:Pe,equalScalar:zt,matrix:Ye,round:kc,typed:re,zeros:On}),os=Ile({compare:sl,typed:re}),r_e=ube({addScalar:yn,combinations:Yg,isInteger:wi,isNegative:Jo,isPositive:nl,larger:ii,typed:re}),n_e=goe({matrix:Ye,multiply:lr,subtract:Gr,typed:re}),TB=M0e({divideScalar:Lr,isZero:Ba,matrix:Ye,multiply:lr,subtractScalar:ca,typed:re,unaryMinus:ss}),i_e=$se({concat:Zt,equalScalar:zt,matrix:Ye,multiplyScalar:Xr,typed:re}),OB=wce({larger:ii,smaller:ni}),FB=Iae({Complex:wr,DenseMatrix:Tt,ceil:kw,equalScalar:zt,floor:DB,matrix:Ye,typed:re,zeros:On}),PB=phe({Index:Wn,typed:re}),a_e=rye({abs:ui,add:Ht,addScalar:yn,config:Pe,divideScalar:Lr,equalScalar:zt,flatten:xd,isNumeric:al,isZero:Ba,matrix:Ye,multiply:lr,multiplyScalar:Xr,smaller:ni,subtract:Gr,typed:re}),s_e=Ise({BigNumber:Ge,add:Ht,config:Pe,equal:fa,isInteger:wi,mod:EB,smaller:ni,typed:re,xgcd:xB}),o_e=fse({concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),u_e=sle({Complex:wr,config:Pe,divideScalar:Lr,log:Iw,typed:re}),Lw=XI({config:Pe,larger:ii,numeric:Ea,typed:re}),l_e=kfe({DenseMatrix:Tt,Index:Wn,compareNatural:os,size:In,subset:zi,typed:re}),c_e=qfe({DenseMatrix:Tt,Index:Wn,compareNatural:os,size:In,subset:zi,typed:re}),f_e=Vfe({Index:Wn,compareNatural:os,size:In,subset:zi,typed:re}),h_e=Xfe({Index:Wn,compareNatural:os,size:In,subset:zi,typed:re}),Sc=Gle({DenseMatrix:Tt,concat:Zt,config:Pe,matrix:Ye,typed:re}),d_e=cce({compare:sl,compareNatural:os,matrix:Ye,typed:re}),p_e=GI({concat:Zt,equalScalar:zt,matrix:Ye,not:zv,typed:re,zeros:On}),_c=HI({bignumber:Pi,matrix:Ye,add:Ht,config:Pe,isPositive:nl,larger:ii,largerEq:Xg,smaller:ni,smallerEq:Sc,typed:re}),m_e=WI({Index:Wn,matrix:Ye,range:_c,typed:re}),RB=$fe({DenseMatrix:Tt,Index:Wn,compareNatural:os,size:In,subset:zi,typed:re}),v_e=jfe({Index:Wn,compareNatural:os,size:In,subset:zi,typed:re}),IB=Qfe({Index:Wn,concat:Zt,setDifference:RB,size:In,subset:zi,typed:re}),BB=Ace({FibonacciHeap:OB,addScalar:yn,equalScalar:zt}),kB=$I({Index:Wn,matrix:Ye,range:_c,typed:re}),ol=O0e({abs:ui,addScalar:yn,det:TB,divideScalar:Lr,identity:Qo,matrix:Ye,multiply:lr,typed:re,unaryMinus:ss}),LB=mde({DenseMatrix:Tt,Spa:BB,SparseMatrix:eo,abs:ui,addScalar:yn,divideScalar:Lr,equalScalar:zt,larger:ii,matrix:Ye,multiplyScalar:Xr,subtractScalar:ca,typed:re,unaryMinus:ss}),g_e=P0e({Complex:wr,add:Ht,ctranspose:Tw,deepEqual:Rw,divideScalar:Lr,dot:Zg,dotDivide:bd,equal:fa,inv:ol,matrix:Ye,multiply:lr,typed:re}),ha=ele({Complex:wr,config:Pe,fraction:Bc,identity:Qo,inv:ol,matrix:Ye,multiply:lr,number:Qs,typed:re}),$B=Hfe({DenseMatrix:Tt,Index:Wn,compareNatural:os,size:In,subset:zi,typed:re}),y_e=the({Index:Wn,concat:Zt,setIntersect:$B,setSymDifference:IB,size:In,subset:zi,typed:re}),b_e=U0e({abs:ui,add:Ht,identity:Qo,inv:ol,map:il,max:Lw,multiply:lr,size:In,sqrt:ka,subtract:Gr,typed:re}),bt=Tce({BigNumber:Ge,Complex:wr,Fraction:tl,abs:ui,addScalar:yn,config:Pe,divideScalar:Lr,equal:fa,fix:FB,format:vd,isNumeric:al,multiplyScalar:Xr,number:Qs,pow:ha,round:kc,subtractScalar:ca}),x_e=c1e({BigNumber:Ge,Unit:bt,config:Pe}),w_e=V1e({BigNumber:Ge,Unit:bt,config:Pe}),S_e=P1e({BigNumber:Ge,Unit:bt,config:Pe}),__e=d1e({BigNumber:Ge,Unit:bt,config:Pe}),A_e=I1e({BigNumber:Ge,Unit:bt,config:Pe}),D_e=p1e({BigNumber:Ge,Unit:bt,config:Pe}),N_e=f1e({BigNumber:Ge,Unit:bt,config:Pe}),E_e=N1e({BigNumber:Ge,Unit:bt,config:Pe}),C_e=cle({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,pow:ha,typed:re}),M_e=l1e({BigNumber:Ge,Unit:bt,config:Pe}),T_e=h1e({BigNumber:Ge,Unit:bt,config:Pe}),O_e=z0e({abs:ui,add:Ht,identity:Qo,inv:ol,multiply:lr,typed:re}),F_e=B1e({BigNumber:Ge,Unit:bt,config:Pe}),zB=due({addScalar:yn,ceil:kw,conj:rl,divideScalar:Lr,dotDivide:bd,exp:pB,i:cB,log2:mB,matrix:Ye,multiplyScalar:Xr,pow:ha,tau:hB,typed:re}),$w=xye({BigNumber:Ge,Complex:wr,config:Pe,multiplyScalar:Xr,pow:ha,typed:re}),P_e=a1e({BigNumber:Ge,Unit:bt,config:Pe}),R_e=A1e({BigNumber:Ge,Unit:bt,config:Pe}),I_e=mue({conj:rl,dotDivide:bd,fft:zB,typed:re}),B_e=y1e({BigNumber:Ge,Unit:bt,config:Pe}),k_e=L1e({BigNumber:Ge,Unit:bt,config:Pe}),L_e=u1e({BigNumber:Ge,Unit:bt,config:Pe}),$_e=Y1e({BigNumber:Ge,Unit:bt,config:Pe}),z_e=z1e({BigNumber:Ge,Unit:bt,config:Pe}),q_e=E1e({BigNumber:Ge,Unit:bt,config:Pe}),U_e=g1e({BigNumber:Ge,Unit:bt,config:Pe}),H_e=J1e({BigNumber:Ge,Unit:bt,config:Pe}),W_e=X1e({BigNumber:Ge,Unit:bt,config:Pe}),V_e=Q1e({BigNumber:Ge,Unit:bt,config:Pe}),Y_e=D1e({BigNumber:Ge,Unit:bt,config:Pe}),j_e=C1e({BigNumber:Ge,Unit:bt,config:Pe}),G_e=o1e({BigNumber:Ge,Unit:bt,config:Pe}),X_e=M1e({BigNumber:Ge,Unit:bt,config:Pe}),Z_e=H1e({BigNumber:Ge,Unit:bt,config:Pe}),K_e=i1e({BigNumber:Ge,Unit:bt,config:Pe}),J_e=W1e({BigNumber:Ge,Unit:bt,config:Pe}),Q_e=T1e({BigNumber:Ge,Unit:bt,config:Pe}),eAe=R1e({BigNumber:Ge,Unit:bt,config:Pe}),tAe=b1e({BigNumber:Ge,Unit:bt,config:Pe}),rAe=Bce({Unit:bt,typed:re}),_n=K0e({divideScalar:Lr,equalScalar:zt,inv:ol,matrix:Ye,multiply:lr,typed:re}),nAe=w1e({BigNumber:Ge,Unit:bt,config:Pe}),wd=Aye({gamma:$w,typed:re}),iAe=k1e({BigNumber:Ge,Unit:bt,config:Pe}),aAe=G1e({BigNumber:Ge,Unit:bt,config:Pe}),sAe=m1e({BigNumber:Ge,Unit:bt,config:Pe}),qB=Hde({DenseMatrix:Tt,lsolve:_B,lup:LB,matrix:Ye,slu:CB,typed:re,usolve:Pw}),oAe=v1e({BigNumber:Ge,Unit:bt,config:Pe}),uAe=j1e({BigNumber:Ge,Unit:bt,config:Pe}),lAe=Cye({add:Ht,divide:_n,factorial:wd,isInteger:wi,isPositive:nl,multiply:lr,typed:re}),cAe=Tye({factorial:wd,typed:re}),fAe=Z1e({BigNumber:Ge,Unit:bt,config:Pe}),hAe=Vde({add:Ht,cbrt:wB,divide:_n,equalScalar:zt,im:Ew,isZero:Ba,multiply:lr,re:Cw,sqrt:ka,subtract:Gr,typeOf:gB,typed:re,unaryMinus:ss}),dAe=Kfe({compareNatural:os,typed:re}),pAe=wue({abs:ui,add:Ht,bignumber:Pi,divide:_n,isNegative:Jo,isPositive:nl,larger:ii,map:il,matrix:Ye,max:Lw,multiply:lr,smaller:ni,subtract:Gr,typed:re,unaryMinus:ss}),UB=rbe({bignumber:Pi,addScalar:yn,combinations:Yg,divideScalar:Lr,factorial:wd,isInteger:wi,isNegative:Jo,larger:ii,multiplyScalar:Xr,number:Qs,pow:ha,subtractScalar:ca,typed:re}),mAe=Fce({Unit:bt,typed:re}),vAe=ibe({addScalar:yn,isInteger:wi,isNegative:Jo,stirlingS2:UB,typed:re}),HB=L0e({abs:ui,add:Ht,addScalar:yn,atan:dB,bignumber:Pi,column:kB,complex:jg,config:Pe,cos:Dw,diag:SB,divideScalar:Lr,dot:Zg,equal:fa,flatten:xd,im:Ew,inv:ol,larger:ii,matrix:Ye,matrixFromColumns:Ow,multiply:lr,multiplyScalar:Xr,number:Qs,qr:Fw,re:Cw,reshape:bB,sin:Gg,size:In,smaller:ni,sqrt:ka,subtract:Gr,typed:re,usolve:Pw,usolveAll:MB}),gAe=S1e({BigNumber:Ge,Unit:bt,config:Pe}),yAe=$1e({BigNumber:Ge,Unit:bt,config:Pe}),bAe=Nye({divide:_n,dotDivide:bd,isNumeric:al,log:Iw,map:il,matrix:Ye,multiply:lr,sum:Bw,typed:re}),WB=iB({add:Ht,divide:_n,typed:re}),xAe=q1e({BigNumber:Ge,Unit:bt,config:Pe}),wAe=s1e({BigNumber:Ge,Unit:bt,config:Pe}),SAe=sB({bignumber:Pi,add:Ht,compare:sl,divide:_n,isInteger:wi,larger:ii,multiply:lr,partitionSelect:Kg,smaller:ni,smallerEq:Sc,subtract:Gr,typed:re}),zw=aB({add:Ht,apply:Mw,divide:_n,isNaN:gd,multiply:lr,subtract:Gr,typed:re}),_Ae=x1e({BigNumber:Ge,Unit:bt,config:Pe}),VB=oye({add:Ht,compare:sl,divide:_n,partitionSelect:Kg,typed:re}),AAe=pye({add:Ht,divide:_n,matrix:Ye,mean:WB,multiply:lr,pow:ha,sqrt:ka,subtract:Gr,sum:Bw,typed:re}),DAe=Pbe({Complex:wr,add:Ht,divide:_n,matrix:Ye,multiply:lr,typed:re}),NAe=lye({abs:ui,map:il,median:VB,subtract:Gr,typed:re}),EAe=oB({map:il,sqrt:ka,typed:re,variance:zw}),CAe=Mue({BigNumber:Ge,Complex:wr,add:Ht,config:Pe,divide:_n,equal:fa,factorial:wd,gamma:$w,isNegative:Jo,multiply:lr,pi:h1,pow:ha,sin:Gg,smallerEq:Sc,subtract:Gr,typed:re}),qw=ohe({abs:ui,add:Ht,conj:rl,ctranspose:Tw,eigs:HB,equalScalar:zt,larger:ii,matrix:Ye,multiply:lr,pow:ha,smaller:ni,sqrt:ka,typed:re}),YB=Zoe({BigNumber:Ge,DenseMatrix:Tt,SparseMatrix:eo,addScalar:yn,config:Pe,cos:Dw,matrix:Ye,multiplyScalar:Xr,norm:qw,sin:Gg,typed:re,unaryMinus:ss}),MAe=K1e({BigNumber:Ge,Unit:bt,config:Pe}),jB=Y0e({identity:Qo,matrix:Ye,multiply:lr,norm:qw,qr:Fw,subtract:Gr,typed:re}),TAe=Goe({multiply:lr,rotationMatrix:YB,typed:re}),GB=W0e({abs:ui,add:Ht,concat:Zt,identity:Qo,index:PB,lusolve:qB,matrix:Ye,matrixFromColumns:Ow,multiply:lr,range:_c,schur:jB,subset:zi,subtract:Gr,transpose:yd,typed:re}),OAe=G0e({matrix:Ye,multiply:lr,sylvester:GB,transpose:yd,typed:re}),Lc={},$c={},XB={},Xn=ghe({mathWithTransform:$c}),zc=Hhe({Node:Xn}),to=Vhe({Node:Xn}),ul=jhe({Node:Xn}),ZB=Khe({Node:Xn}),qc=whe({Node:Xn}),KB=Ehe({Node:Xn,ResultSet:fB}),JB=Mhe({Node:Xn}),eu=khe({Node:Xn}),QB=Xhe({Node:Xn}),FAe=Bbe({classes:XB}),Uw=Kde({math:Lc,typed:re}),ek=$he({Node:Xn,typed:re}),zl=E0e({Chain:Uw,typed:re}),Uc=qhe({Node:Xn,size:In}),Hc=bhe({Node:Xn,subset:zi}),tk=Dhe({matrix:Ye,Node:Xn,subset:zi}),tu=ede({Unit:bt,Node:Xn,math:Lc}),ru=rde({Node:Xn,SymbolNode:tu,math:Lc}),us=ide({AccessorNode:Hc,ArrayNode:qc,AssignmentNode:tk,BlockNode:KB,ConditionalNode:JB,ConstantNode:eu,FunctionAssignmentNode:ek,FunctionNode:ru,IndexNode:Uc,ObjectNode:zc,OperatorNode:to,ParenthesisNode:ul,RangeNode:QB,RelationalNode:ZB,SymbolNode:tu,config:Pe,numeric:Ea,typed:re}),rk=_be({ConstantNode:eu,FunctionNode:ru,OperatorNode:to,ParenthesisNode:ul,parse:us,typed:re}),Hw=ybe({bignumber:Pi,fraction:Bc,AccessorNode:Hc,ArrayNode:qc,ConstantNode:eu,FunctionNode:ru,IndexNode:Uc,ObjectNode:zc,OperatorNode:to,SymbolNode:tu,config:Pe,mathWithTransform:$c,matrix:Ye,typed:re}),PAe=sde({parse:us,typed:re}),Ww=xbe({AccessorNode:Hc,ArrayNode:qc,ConstantNode:eu,FunctionNode:ru,IndexNode:Uc,ObjectNode:zc,OperatorNode:to,ParenthesisNode:ul,SymbolNode:tu,add:Ht,divide:_n,equal:fa,isZero:Ba,multiply:lr,parse:us,pow:ha,subtract:Gr,typed:re}),Vw=ude({parse:us,typed:re}),nk=Gde({evaluate:Vw}),ik=fde({evaluate:Vw}),Jg=mbe({bignumber:Pi,fraction:Bc,AccessorNode:Hc,ArrayNode:qc,ConstantNode:eu,FunctionNode:ru,IndexNode:Uc,ObjectNode:zc,OperatorNode:to,ParenthesisNode:ul,SymbolNode:tu,add:Ht,config:Pe,divide:_n,equal:fa,isZero:Ba,mathWithTransform:$c,matrix:Ye,multiply:lr,parse:us,pow:ha,resolve:rk,simplifyConstant:Hw,simplifyCore:Ww,subtract:Gr,typed:re}),RAe=Dbe({OperatorNode:to,parse:us,simplify:Jg,typed:re}),IAe=cbe({parse:us,typed:re}),BAe=dde({Parser:ik,typed:re}),kAe=Mbe({bignumber:Pi,fraction:Bc,AccessorNode:Hc,ArrayNode:qc,ConstantNode:eu,FunctionNode:ru,IndexNode:Uc,ObjectNode:zc,OperatorNode:to,ParenthesisNode:ul,SymbolNode:tu,add:Ht,config:Pe,divide:_n,equal:fa,isZero:Ba,mathWithTransform:$c,matrix:Ye,multiply:lr,parse:us,pow:ha,simplify:Jg,simplifyConstant:Hw,simplifyCore:Ww,subtract:Gr,typed:re}),LAe=Ebe({ConstantNode:eu,FunctionNode:ru,OperatorNode:to,ParenthesisNode:ul,SymbolNode:tu,config:Pe,equal:fa,isZero:Ba,numeric:Ea,parse:us,simplify:Jg,typed:re}),$Ae=D0e({Help:nk,mathWithTransform:$c,typed:re});dn(Lc,{e:YM,false:dwe,fineStructure:pwe,i:cB,Infinity:mwe,LN10:vwe,LOG10E:gwe,NaN:ywe,null:bwe,phi:xwe,SQRT1_2:Swe,sackurTetrode:_we,tau:hB,true:Awe,E:YM,version:Dwe,efimovFactor:Nwe,LN2:Ewe,pi:h1,replacer:Cwe,reviver:FAe,SQRT2:Mwe,typed:re,unaryPlus:Aw,PI:h1,weakMixingAngle:Twe,abs:ui,acos:Owe,acot:Fwe,acsc:Pwe,addScalar:yn,arg:Rwe,asech:Iwe,asinh:Bwe,atan:dB,atanh:kwe,bignumber:Pi,bitNot:Lwe,boolean:$we,clone:zwe,combinations:Yg,complex:jg,conj:rl,cos:Dw,cot:qwe,csc:Uwe,cube:Hwe,equalScalar:zt,erf:Wwe,exp:pB,expm1:Vwe,filter:Ywe,forEach:jwe,format:vd,getMatrixDataType:Nw,hex:Gwe,im:Ew,isInteger:wi,isNegative:Jo,isPositive:nl,isZero:Ba,LOG2E:Xwe,lgamma:Zwe,log10:Kwe,log2:mB,map:il,multiplyScalar:Xr,not:zv,number:Qs,oct:Jwe,pickRandom:Qwe,print:eSe,random:tSe,re:Cw,sec:rSe,sign:vB,sin:Gg,splitUnit:nSe,square:iSe,string:aSe,subtractScalar:ca,tan:sSe,typeOf:gB,acosh:oSe,acsch:uSe,apply:Mw,asec:lSe,bin:cSe,chain:zl,combinationsWithRep:fSe,cosh:hSe,csch:dSe,isNaN:gd,isPrime:pSe,randomInt:mSe,sech:vSe,sinh:gSe,sparse:ySe,sqrt:ka,tanh:bSe,unaryMinus:ss,acoth:xSe,coth:wSe,fraction:Bc,isNumeric:al,matrix:Ye,matrixFromFunction:SSe,mode:_Se,numeric:Ea,prod:yB,reshape:bB,size:In,squeeze:ASe,transpose:yd,xgcd:xB,zeros:On,asin:DSe,cbrt:wB,concat:Zt,count:NSe,ctranspose:Tw,diag:SB,divideScalar:Lr,dotDivide:bd,equal:fa,flatten:xd,hasNumericValue:ESe,identity:Qo,kron:CSe,largerEq:Xg,leftShift:MSe,lsolve:_B,matrixFromColumns:Ow,nthRoot:TSe,ones:OSe,qr:Fw,resize:FSe,rightArithShift:PSe,round:kc,smaller:ni,subtract:Gr,to:RSe,unequal:ISe,usolve:Pw,xor:BSe,add:Ht,atan2:kSe,bitAnd:LSe,bitOr:$Se,bitXor:zSe,catalan:qSe,compare:sl,compareText:AB,cumsum:USe,deepEqual:Rw,diff:HSe,distance:WSe,dot:Zg,equalText:VSe,floor:DB,gcd:YSe,hypot:jSe,larger:ii,log:Iw,lsolveAll:GSe,matrixFromRows:XSe,min:ZSe,mod:EB,multiply:lr,nthRoots:KSe,or:JSe,partitionSelect:Kg,rightLogShift:QSe,slu:CB,subset:zi,sum:Bw,trace:e_e,usolveAll:MB,zpk2tf:t_e,ceil:kw,compareNatural:os,composition:r_e,cross:n_e,det:TB,dotMultiply:i_e,fix:FB,index:PB,intersect:a_e,invmod:s_e,lcm:o_e,log1p:u_e,max:Lw,setCartesian:l_e,setDistinct:c_e,setIsSubset:f_e,setPowerset:h_e,smallerEq:Sc,sort:d_e,and:p_e,range:_c,row:m_e,setDifference:RB,setMultiplicity:v_e,setSymDifference:IB,column:kB,inv:ol,lup:LB,pinv:g_e,pow:ha,setIntersect:$B,setUnion:y_e,sqrtm:b_e,vacuumImpedance:x_e,wienDisplacement:w_e,atomicMass:S_e,bohrMagneton:__e,boltzmann:A_e,conductanceQuantum:D_e,coulomb:N_e,deuteronMass:E_e,dotPow:C_e,electricConstant:M_e,elementaryCharge:T_e,expm:O_e,faraday:F_e,fft:zB,gamma:$w,gravitationConstant:P_e,hartreeEnergy:R_e,ifft:I_e,klitzing:B_e,loschmidt:k_e,magneticConstant:L_e,molarMass:$_e,molarPlanckConstant:z_e,neutronMass:q_e,nuclearMagneton:U_e,planckCharge:H_e,planckLength:W_e,planckTemperature:V_e,protonMass:Y_e,quantumOfCirculation:j_e,reducedPlanckConstant:G_e,rydberg:X_e,secondRadiation:Z_e,speedOfLight:K_e,stefanBoltzmann:J_e,thomsonCrossSection:Q_e,avogadro:eAe,bohrRadius:tAe,createUnit:rAe,divide:_n,electronMass:nAe,factorial:wd,firstRadiation:iAe,gravity:aAe,inverseConductanceQuantum:sAe,lusolve:qB,magneticFluxQuantum:oAe,molarMassC12:uAe,multinomial:lAe,parse:us,permutations:cAe,planckMass:fAe,polynomialRoot:hAe,resolve:rk,setSize:dAe,simplifyConstant:Hw,solveODE:pAe,stirlingS2:UB,unit:mAe,bellNumbers:vAe,compile:PAe,eigs:HB,fermiCoupling:gAe,gasConstant:yAe,kldivergence:bAe,mean:WB,molarVolume:xAe,planckConstant:wAe,quantileSeq:SAe,simplifyCore:Ww,variance:zw,classicalElectronRadius:_Ae,evaluate:Vw,median:VB,simplify:Jg,symbolicEqual:RAe,corr:AAe,freqz:DAe,leafCount:IAe,mad:NAe,parser:BAe,rationalize:kAe,std:EAe,zeta:CAe,derivative:LAe,norm:qw,rotationMatrix:YB,help:$Ae,planckTime:MAe,schur:jB,rotate:TAe,sylvester:GB,lyap:OAe,config:Pe});dn($c,Lc,{filter:uxe({typed:re}),forEach:fxe({typed:re}),map:gxe({typed:re}),apply:rxe({isInteger:wi,typed:re}),or:swe({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),and:nwe({add:Ht,concat:Zt,equalScalar:zt,matrix:Ye,not:zv,typed:re,zeros:On}),concat:Lxe({isInteger:wi,matrix:Ye,typed:re}),max:xxe({config:Pe,larger:ii,numeric:Ea,typed:re}),print:ewe({add:Ht,matrix:Ye,typed:re,zeros:On}),bitAnd:lwe({add:Ht,concat:Zt,equalScalar:zt,matrix:Ye,not:zv,typed:re,zeros:On}),diff:zxe({bignumber:Pi,matrix:Ye,number:Qs,subtract:Gr,typed:re}),min:Nxe({config:Pe,numeric:Ea,smaller:ni,typed:re}),subset:Ixe({add:Ht,matrix:Ye,typed:re,zeros:On}),bitOr:hwe({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),cumsum:Zxe({add:Ht,typed:re,unaryPlus:Aw}),index:pxe({Index:Wn,getMatrixDataType:Nw}),sum:Vxe({add:Ht,config:Pe,numeric:Ea,typed:re}),range:Mxe({bignumber:Pi,matrix:Ye,add:Ht,config:Pe,isPositive:nl,larger:ii,largerEq:Xg,smaller:ni,smallerEq:Sc,typed:re}),row:Fxe({Index:Wn,matrix:Ye,range:_c,typed:re}),column:axe({Index:Wn,matrix:Ye,range:_c,typed:re}),mean:_xe({add:Ht,divide:_n,typed:re}),quantileSeq:Gxe({add:Ht,bignumber:Pi,compare:sl,divide:_n,isInteger:wi,larger:ii,multiply:lr,partitionSelect:Kg,smaller:ni,smallerEq:Sc,subtract:Gr,typed:re}),variance:Jxe({add:Ht,apply:Mw,divide:_n,isNaN:gd,multiply:lr,subtract:Gr,typed:re}),std:Hxe({map:il,sqrt:ka,typed:re,variance:zw})});dn(XB,{BigNumber:Ge,Complex:wr,Fraction:tl,Matrix:Vg,Node:Xn,ObjectNode:zc,OperatorNode:to,ParenthesisNode:ul,Range:wwe,RelationalNode:ZB,ResultSet:fB,ArrayNode:qc,BlockNode:KB,ConditionalNode:JB,ConstantNode:eu,DenseMatrix:Tt,RangeNode:QB,Chain:Uw,FunctionAssignmentNode:ek,SparseMatrix:eo,IndexNode:Uc,ImmutableDenseMatrix:NB,Index:Wn,AccessorNode:Hc,AssignmentNode:tk,FibonacciHeap:OB,Spa:BB,Unit:bt,SymbolNode:tu,FunctionNode:ru,Help:nk,Parser:ik});Uw.createProxy(Lc);class rh{static compute(e,r,n){switch(e){case"inclusive":return rh.computeInclusive(r,n);case"exclusive":return rh.computeExclusive(r,n)}}static computeInclusive(e,r){return zl(zl(e).divide(zl(r).add(100).done()).done()).multiply(100).done()}static computeExclusive(e,r){return zl(e).divide(100).multiply(zl(r).add(100).done()).done()}static getTaxValue(e,r,n){switch(e){case"inclusive":return r-rh.compute(e,r,n);case"exclusive":return rh.compute(e,r,n)-r}return 0}}export{DQ as A,K1 as B,GAe as C,LQ as D,WAe as E,KAe as F,K3 as G,JAe as H,wQ as I,uP as J,$Q as K,HAe as L,qb as M,_Q as N,sQ as O,VAe as P,Rx as Q,XAe as R,QAe as S,rh as T,rDe as U,Ag as V,Ix as W,X3 as X,Gu as Y,nj as Z,YAe as a,Pte as b,kQ as c,oDe as d,ya as e,ZAe as f,Mb as g,Qe as h,eDe as i,KP as j,tDe as k,aDe as l,iDe as m,lDe as n,cDe as o,sDe as p,nDe as q,zl as r,tP as s,uDe as t,Px as u,uv as v,BQ as w,RQ as x,nP as y,an as z}; +In case of a (multi dimensional) array or matrix, the prob order quantile of all elements will be calculated.`,examples:["quantileSeq([3, -1, 5, 7], 0.5)","quantileSeq([3, -1, 5, 7], [1/3, 2/3])","quantileSeq([3, -1, 5, 7], 2)","quantileSeq([-1, 3, 5, 7], 0.5, true)"],seealso:["mean","median","min","max","prod","std","sum","variance"]},t0e={name:"std",category:"Statistics",syntax:["std(a, b, c, ...)","std(A)","std(A, dimension)","std(A, normalization)","std(A, dimension, normalization)"],description:'Compute the standard deviation of all values, defined as std(A) = sqrt(variance(A)). Optional parameter normalization can be "unbiased" (default), "uncorrected", or "biased".',examples:["std(2, 4, 6)","std([2, 4, 6, 8])",'std([2, 4, 6, 8], "uncorrected")','std([2, 4, 6, 8], "biased")',"std([1, 2, 3; 4, 5, 6])"],seealso:["max","mean","min","median","prod","sum","variance"]},r0e={name:"cumsum",category:"Statistics",syntax:["cumsum(a, b, c, ...)","cumsum(A)"],description:"Compute the cumulative sum of all values.",examples:["cumsum(2, 3, 4, 1)","cumsum([2, 3, 4, 1])","cumsum([1, 2; 3, 4])","cumsum([1, 2; 3, 4], 1)","cumsum([1, 2; 3, 4], 2)"],seealso:["max","mean","median","min","prod","std","sum","variance"]},n0e={name:"sum",category:"Statistics",syntax:["sum(a, b, c, ...)","sum(A)","sum(A, dimension)"],description:"Compute the sum of all values.",examples:["sum(2, 3, 4, 1)","sum([2, 3, 4, 1])","sum([2, 5; 4, 3])"],seealso:["max","mean","median","min","prod","std","sum","variance"]},i0e={name:"variance",category:"Statistics",syntax:["variance(a, b, c, ...)","variance(A)","variance(A, dimension)","variance(A, normalization)","variance(A, dimension, normalization)"],description:'Compute the variance of all values. Optional parameter normalization can be "unbiased" (default), "uncorrected", or "biased".',examples:["variance(2, 4, 6)","variance([2, 4, 6, 8])",'variance([2, 4, 6, 8], "uncorrected")','variance([2, 4, 6, 8], "biased")',"variance([1, 2, 3; 4, 5, 6])"],seealso:["max","mean","min","median","min","prod","std","sum"]},a0e={name:"corr",category:"Statistics",syntax:["corr(A,B)"],description:"Compute the correlation coefficient of a two list with values, For matrices, the matrix correlation coefficient is calculated.",examples:["corr([2, 4, 6, 8],[1, 2, 3, 6])","corr(matrix([[1, 2.2, 3, 4.8, 5], [1, 2, 3, 4, 5]]), matrix([[4, 5.3, 6.6, 7, 8], [1, 2, 3, 4, 5]]))"],seealso:["max","mean","min","median","min","prod","std","sum"]},s0e={name:"acos",category:"Trigonometry",syntax:["acos(x)"],description:"Compute the inverse cosine of a value in radians.",examples:["acos(0.5)","acos(cos(2.3))"],seealso:["cos","atan","asin"]},o0e={name:"acosh",category:"Trigonometry",syntax:["acosh(x)"],description:"Calculate the hyperbolic arccos of a value, defined as `acosh(x) = ln(sqrt(x^2 - 1) + x)`.",examples:["acosh(1.5)"],seealso:["cosh","asinh","atanh"]},u0e={name:"acot",category:"Trigonometry",syntax:["acot(x)"],description:"Calculate the inverse cotangent of a value.",examples:["acot(0.5)","acot(cot(0.5))","acot(2)"],seealso:["cot","atan"]},l0e={name:"acoth",category:"Trigonometry",syntax:["acoth(x)"],description:"Calculate the hyperbolic arccotangent of a value, defined as `acoth(x) = (ln((x+1)/x) + ln(x/(x-1))) / 2`.",examples:["acoth(2)","acoth(0.5)"],seealso:["acsch","asech"]},c0e={name:"acsc",category:"Trigonometry",syntax:["acsc(x)"],description:"Calculate the inverse cotangent of a value.",examples:["acsc(2)","acsc(csc(0.5))","acsc(0.5)"],seealso:["csc","asin","asec"]},f0e={name:"acsch",category:"Trigonometry",syntax:["acsch(x)"],description:"Calculate the hyperbolic arccosecant of a value, defined as `acsch(x) = ln(1/x + sqrt(1/x^2 + 1))`.",examples:["acsch(0.5)"],seealso:["asech","acoth"]},h0e={name:"asec",category:"Trigonometry",syntax:["asec(x)"],description:"Calculate the inverse secant of a value.",examples:["asec(0.5)","asec(sec(0.5))","asec(2)"],seealso:["acos","acot","acsc"]},d0e={name:"asech",category:"Trigonometry",syntax:["asech(x)"],description:"Calculate the inverse secant of a value.",examples:["asech(0.5)"],seealso:["acsch","acoth"]},p0e={name:"asin",category:"Trigonometry",syntax:["asin(x)"],description:"Compute the inverse sine of a value in radians.",examples:["asin(0.5)","asin(sin(0.5))"],seealso:["sin","acos","atan"]},m0e={name:"asinh",category:"Trigonometry",syntax:["asinh(x)"],description:"Calculate the hyperbolic arcsine of a value, defined as `asinh(x) = ln(x + sqrt(x^2 + 1))`.",examples:["asinh(0.5)"],seealso:["acosh","atanh"]},v0e={name:"atan",category:"Trigonometry",syntax:["atan(x)"],description:"Compute the inverse tangent of a value in radians.",examples:["atan(0.5)","atan(tan(0.5))"],seealso:["tan","acos","asin"]},g0e={name:"atan2",category:"Trigonometry",syntax:["atan2(y, x)"],description:"Computes the principal value of the arc tangent of y/x in radians.",examples:["atan2(2, 2) / pi","angle = 60 deg in rad","x = cos(angle)","y = sin(angle)","atan2(y, x)"],seealso:["sin","cos","tan"]},y0e={name:"atanh",category:"Trigonometry",syntax:["atanh(x)"],description:"Calculate the hyperbolic arctangent of a value, defined as `atanh(x) = ln((1 + x)/(1 - x)) / 2`.",examples:["atanh(0.5)"],seealso:["acosh","asinh"]},b0e={name:"cos",category:"Trigonometry",syntax:["cos(x)"],description:"Compute the cosine of x in radians.",examples:["cos(2)","cos(pi / 4) ^ 2","cos(180 deg)","cos(60 deg)","sin(0.2)^2 + cos(0.2)^2"],seealso:["acos","sin","tan"]},x0e={name:"cosh",category:"Trigonometry",syntax:["cosh(x)"],description:"Compute the hyperbolic cosine of x in radians.",examples:["cosh(0.5)"],seealso:["sinh","tanh","coth"]},w0e={name:"cot",category:"Trigonometry",syntax:["cot(x)"],description:"Compute the cotangent of x in radians. Defined as 1/tan(x)",examples:["cot(2)","1 / tan(2)"],seealso:["sec","csc","tan"]},S0e={name:"coth",category:"Trigonometry",syntax:["coth(x)"],description:"Compute the hyperbolic cotangent of x in radians.",examples:["coth(2)","1 / tanh(2)"],seealso:["sech","csch","tanh"]},_0e={name:"csc",category:"Trigonometry",syntax:["csc(x)"],description:"Compute the cosecant of x in radians. Defined as 1/sin(x)",examples:["csc(2)","1 / sin(2)"],seealso:["sec","cot","sin"]},A0e={name:"csch",category:"Trigonometry",syntax:["csch(x)"],description:"Compute the hyperbolic cosecant of x in radians. Defined as 1/sinh(x)",examples:["csch(2)","1 / sinh(2)"],seealso:["sech","coth","sinh"]},D0e={name:"sec",category:"Trigonometry",syntax:["sec(x)"],description:"Compute the secant of x in radians. Defined as 1/cos(x)",examples:["sec(2)","1 / cos(2)"],seealso:["cot","csc","cos"]},E0e={name:"sech",category:"Trigonometry",syntax:["sech(x)"],description:"Compute the hyperbolic secant of x in radians. Defined as 1/cosh(x)",examples:["sech(2)","1 / cosh(2)"],seealso:["coth","csch","cosh"]},N0e={name:"sin",category:"Trigonometry",syntax:["sin(x)"],description:"Compute the sine of x in radians.",examples:["sin(2)","sin(pi / 4) ^ 2","sin(90 deg)","sin(30 deg)","sin(0.2)^2 + cos(0.2)^2"],seealso:["asin","cos","tan"]},C0e={name:"sinh",category:"Trigonometry",syntax:["sinh(x)"],description:"Compute the hyperbolic sine of x in radians.",examples:["sinh(0.5)"],seealso:["cosh","tanh"]},M0e={name:"tan",category:"Trigonometry",syntax:["tan(x)"],description:"Compute the tangent of x in radians.",examples:["tan(0.5)","sin(0.5) / cos(0.5)","tan(pi / 4)","tan(45 deg)"],seealso:["atan","sin","cos"]},T0e={name:"tanh",category:"Trigonometry",syntax:["tanh(x)"],description:"Compute the hyperbolic tangent of x in radians.",examples:["tanh(0.5)","sinh(0.5) / cosh(0.5)"],seealso:["sinh","cosh"]},O0e={name:"to",category:"Units",syntax:["x to unit","to(x, unit)"],description:"Change the unit of a value.",examples:["5 inch to cm","3.2kg to g","16 bytes in bits"],seealso:[]},F0e={name:"bin",category:"Utils",syntax:["bin(value)"],description:"Format a number as binary",examples:["bin(2)"],seealso:["oct","hex"]},R0e={name:"clone",category:"Utils",syntax:["clone(x)"],description:"Clone a variable. Creates a copy of primitive variables,and a deep copy of matrices",examples:["clone(3.5)","clone(2 - 4i)","clone(45 deg)","clone([1, 2; 3, 4])",'clone("hello world")'],seealso:[]},P0e={name:"format",category:"Utils",syntax:["format(value)","format(value, precision)"],description:"Format a value of any type as string.",examples:["format(2.3)","format(3 - 4i)","format([])","format(pi, 3)"],seealso:["print"]},k0e={name:"hasNumericValue",category:"Utils",syntax:["hasNumericValue(x)"],description:"Test whether a value is an numeric value. In case of a string, true is returned if the string contains a numeric value.",examples:["hasNumericValue(2)",'hasNumericValue("2")','isNumeric("2")',"hasNumericValue(0)","hasNumericValue(bignumber(500))","hasNumericValue(fraction(0.125))","hasNumericValue(2 + 3i)",'hasNumericValue([2.3, "foo", false])'],seealso:["isInteger","isZero","isNegative","isPositive","isNaN","isNumeric"]},B0e={name:"hex",category:"Utils",syntax:["hex(value)"],description:"Format a number as hexadecimal",examples:["hex(240)"],seealso:["bin","oct"]},I0e={name:"isInteger",category:"Utils",syntax:["isInteger(x)"],description:"Test whether a value is an integer number.",examples:["isInteger(2)","isInteger(3.5)","isInteger([3, 0.5, -2])"],seealso:["isNegative","isNumeric","isPositive","isZero"]},L0e={name:"isNaN",category:"Utils",syntax:["isNaN(x)"],description:"Test whether a value is NaN (not a number)",examples:["isNaN(2)","isNaN(0 / 0)","isNaN(NaN)","isNaN(Infinity)"],seealso:["isNegative","isNumeric","isPositive","isZero"]},$0e={name:"isNegative",category:"Utils",syntax:["isNegative(x)"],description:"Test whether a value is negative: smaller than zero.",examples:["isNegative(2)","isNegative(0)","isNegative(-4)","isNegative([3, 0.5, -2])"],seealso:["isInteger","isNumeric","isPositive","isZero"]},z0e={name:"isNumeric",category:"Utils",syntax:["isNumeric(x)"],description:"Test whether a value is a numeric value. Returns true when the input is a number, BigNumber, Fraction, or boolean.",examples:["isNumeric(2)",'isNumeric("2")','hasNumericValue("2")',"isNumeric(0)","isNumeric(bignumber(500))","isNumeric(fraction(0.125))","isNumeric(2 + 3i)",'isNumeric([2.3, "foo", false])'],seealso:["isInteger","isZero","isNegative","isPositive","isNaN","hasNumericValue"]},q0e={name:"isPositive",category:"Utils",syntax:["isPositive(x)"],description:"Test whether a value is positive: larger than zero.",examples:["isPositive(2)","isPositive(0)","isPositive(-4)","isPositive([3, 0.5, -2])"],seealso:["isInteger","isNumeric","isNegative","isZero"]},U0e={name:"isPrime",category:"Utils",syntax:["isPrime(x)"],description:"Test whether a value is prime: has no divisors other than itself and one.",examples:["isPrime(3)","isPrime(-2)","isPrime([2, 17, 100])"],seealso:["isInteger","isNumeric","isNegative","isZero"]},H0e={name:"isZero",category:"Utils",syntax:["isZero(x)"],description:"Test whether a value is zero.",examples:["isZero(2)","isZero(0)","isZero(-4)","isZero([3, 0, -2, 0])"],seealso:["isInteger","isNumeric","isNegative","isPositive"]},W0e={name:"numeric",category:"Utils",syntax:["numeric(x)"],description:"Convert a numeric input to a specific numeric type: number, BigNumber, or Fraction.",examples:['numeric("4")','numeric("4", "number")','numeric("4", "BigNumber")','numeric("4", "Fraction")','numeric(4, "Fraction")','numeric(fraction(2, 5), "number")'],seealso:["number","fraction","bignumber","string","format"]},V0e={name:"oct",category:"Utils",syntax:["oct(value)"],description:"Format a number as octal",examples:["oct(56)"],seealso:["bin","hex"]},Y0e={name:"print",category:"Utils",syntax:["print(template, values)","print(template, values, precision)"],description:"Interpolate values into a string template.",examples:['print("Lucy is $age years old", {age: 5})','print("The value of pi is $pi", {pi: pi}, 3)','print("Hello, $user.name!", {user: {name: "John"}})','print("Values: $1, $2, $3", [6, 9, 4])'],seealso:["format"]},j0e={name:"typeOf",category:"Utils",syntax:["typeOf(x)"],description:"Get the type of a variable.",examples:["typeOf(3.5)","typeOf(2 - 4i)","typeOf(45 deg)",'typeOf("hello world")'],seealso:["getMatrixDataType"]},G0e={name:"solveODE",category:"Numeric",syntax:["solveODE(func, tspan, y0)","solveODE(func, tspan, y0, options)"],description:"Numerical Integration of Ordinary Differential Equations.",examples:["f(t,y) = y","tspan = [0, 4]","solveODE(f, tspan, 1)","solveODE(f, tspan, [1, 2])",'solveODE(f, tspan, 1, { method:"RK23", maxStep:0.1 })'],seealso:["derivative","simplifyCore"]},X0e={bignumber:$pe,boolean:zpe,complex:qpe,createUnit:Upe,fraction:Hpe,index:Wpe,matrix:Vpe,number:Ype,sparse:jpe,splitUnit:Gpe,string:Xpe,unit:Zpe,e:GC,E:GC,false:Ape,i:Dpe,Infinity:Epe,LN2:Cpe,LN10:Npe,LOG2E:Tpe,LOG10E:Mpe,NaN:Ope,null:Fpe,pi:XC,PI:XC,phi:Rpe,SQRT1_2:Ppe,SQRT2:kpe,tau:Bpe,true:Ipe,version:Lpe,speedOfLight:{description:"Speed of light in vacuum",examples:["speedOfLight"]},gravitationConstant:{description:"Newtonian constant of gravitation",examples:["gravitationConstant"]},planckConstant:{description:"Planck constant",examples:["planckConstant"]},reducedPlanckConstant:{description:"Reduced Planck constant",examples:["reducedPlanckConstant"]},magneticConstant:{description:"Magnetic constant (vacuum permeability)",examples:["magneticConstant"]},electricConstant:{description:"Electric constant (vacuum permeability)",examples:["electricConstant"]},vacuumImpedance:{description:"Characteristic impedance of vacuum",examples:["vacuumImpedance"]},coulomb:{description:"Coulomb's constant",examples:["coulomb"]},elementaryCharge:{description:"Elementary charge",examples:["elementaryCharge"]},bohrMagneton:{description:"Borh magneton",examples:["bohrMagneton"]},conductanceQuantum:{description:"Conductance quantum",examples:["conductanceQuantum"]},inverseConductanceQuantum:{description:"Inverse conductance quantum",examples:["inverseConductanceQuantum"]},magneticFluxQuantum:{description:"Magnetic flux quantum",examples:["magneticFluxQuantum"]},nuclearMagneton:{description:"Nuclear magneton",examples:["nuclearMagneton"]},klitzing:{description:"Von Klitzing constant",examples:["klitzing"]},bohrRadius:{description:"Borh radius",examples:["bohrRadius"]},classicalElectronRadius:{description:"Classical electron radius",examples:["classicalElectronRadius"]},electronMass:{description:"Electron mass",examples:["electronMass"]},fermiCoupling:{description:"Fermi coupling constant",examples:["fermiCoupling"]},fineStructure:{description:"Fine-structure constant",examples:["fineStructure"]},hartreeEnergy:{description:"Hartree energy",examples:["hartreeEnergy"]},protonMass:{description:"Proton mass",examples:["protonMass"]},deuteronMass:{description:"Deuteron Mass",examples:["deuteronMass"]},neutronMass:{description:"Neutron mass",examples:["neutronMass"]},quantumOfCirculation:{description:"Quantum of circulation",examples:["quantumOfCirculation"]},rydberg:{description:"Rydberg constant",examples:["rydberg"]},thomsonCrossSection:{description:"Thomson cross section",examples:["thomsonCrossSection"]},weakMixingAngle:{description:"Weak mixing angle",examples:["weakMixingAngle"]},efimovFactor:{description:"Efimov factor",examples:["efimovFactor"]},atomicMass:{description:"Atomic mass constant",examples:["atomicMass"]},avogadro:{description:"Avogadro's number",examples:["avogadro"]},boltzmann:{description:"Boltzmann constant",examples:["boltzmann"]},faraday:{description:"Faraday constant",examples:["faraday"]},firstRadiation:{description:"First radiation constant",examples:["firstRadiation"]},loschmidt:{description:"Loschmidt constant at T=273.15 K and p=101.325 kPa",examples:["loschmidt"]},gasConstant:{description:"Gas constant",examples:["gasConstant"]},molarPlanckConstant:{description:"Molar Planck constant",examples:["molarPlanckConstant"]},molarVolume:{description:"Molar volume of an ideal gas at T=273.15 K and p=101.325 kPa",examples:["molarVolume"]},sackurTetrode:{description:"Sackur-Tetrode constant at T=1 K and p=101.325 kPa",examples:["sackurTetrode"]},secondRadiation:{description:"Second radiation constant",examples:["secondRadiation"]},stefanBoltzmann:{description:"Stefan-Boltzmann constant",examples:["stefanBoltzmann"]},wienDisplacement:{description:"Wien displacement law constant",examples:["wienDisplacement"]},molarMass:{description:"Molar mass constant",examples:["molarMass"]},molarMassC12:{description:"Molar mass constant of carbon-12",examples:["molarMassC12"]},gravity:{description:"Standard acceleration of gravity (standard acceleration of free-fall on Earth)",examples:["gravity"]},planckLength:{description:"Planck length",examples:["planckLength"]},planckMass:{description:"Planck mass",examples:["planckMass"]},planckTime:{description:"Planck time",examples:["planckTime"]},planckCharge:{description:"Planck charge",examples:["planckCharge"]},planckTemperature:{description:"Planck temperature",examples:["planckTemperature"]},derivative:eme,lsolve:rme,lsolveAll:nme,lup:ime,lusolve:ame,leafCount:tme,polynomialRoot:sme,resolve:lme,simplify:cme,simplifyConstant:fme,simplifyCore:hme,symbolicEqual:pme,rationalize:ume,slu:dme,usolve:mme,usolveAll:vme,qr:ome,abs:gme,add:yme,cbrt:bme,ceil:xme,cube:wme,divide:Sme,dotDivide:_me,dotMultiply:Ame,dotPow:Dme,exp:Eme,expm:Nme,expm1:Cme,fix:Mme,floor:Tme,gcd:Ome,hypot:Fme,lcm:Pme,log:kme,log2:Lme,log1p:Ime,log10:Bme,mod:$me,multiply:zme,norm:qme,nthRoot:Ume,nthRoots:Hme,pow:Wme,round:Vme,sign:Yme,sqrt:jme,sqrtm:Gme,square:Jme,subtract:Qme,unaryMinus:eve,unaryPlus:tve,xgcd:rve,invmod:Rme,bitAnd:nve,bitNot:ive,bitOr:ave,bitXor:sve,leftShift:ove,rightArithShift:uve,rightLogShift:lve,bellNumbers:cve,catalan:fve,composition:hve,stirlingS2:dve,config:Kpe,import:Jpe,typed:Qpe,arg:pve,conj:mve,re:gve,im:vve,evaluate:yve,help:bve,distance:xve,intersect:wve,and:Sve,not:_ve,or:Ave,xor:Dve,concat:Nve,count:Cve,cross:Mve,column:Eve,ctranspose:Tve,det:Ove,diag:Fve,diff:Rve,dot:Pve,getMatrixDataType:$ve,identity:zve,filter:Bve,flatten:Ive,forEach:Lve,inv:qve,pinv:Uve,eigs:kve,kron:Hve,matrixFromFunction:Yve,matrixFromRows:jve,matrixFromColumns:Vve,map:Wve,ones:Gve,partitionSelect:Xve,range:Zve,resize:Jve,reshape:Kve,rotate:Qve,rotationMatrix:ege,row:tge,size:rge,sort:nge,squeeze:ige,subset:age,trace:sge,transpose:oge,zeros:uge,fft:lge,ifft:cge,sylvester:Xme,schur:Zme,lyap:Kme,solveODE:G0e,combinations:fge,combinationsWithRep:hge,factorial:dge,gamma:pge,kldivergence:vge,lgamma:mge,multinomial:gge,permutations:yge,pickRandom:bge,random:xge,randomInt:wge,compare:Sge,compareNatural:_ge,compareText:Age,deepEqual:Dge,equal:Ege,equalText:Nge,larger:Cge,largerEq:Mge,smaller:Tge,smallerEq:Oge,unequal:Fge,setCartesian:Rge,setDifference:Pge,setDistinct:kge,setIntersect:Bge,setIsSubset:Ige,setMultiplicity:Lge,setPowerset:$ge,setSize:zge,setSymDifference:qge,setUnion:Uge,zpk2tf:Hge,freqz:Wge,erf:Vge,zeta:Yge,cumsum:r0e,mad:jge,max:Gge,mean:Xge,median:Zge,min:Kge,mode:Jge,prod:Qge,quantileSeq:e0e,std:t0e,sum:n0e,variance:i0e,corr:a0e,acos:s0e,acosh:o0e,acot:u0e,acoth:l0e,acsc:c0e,acsch:f0e,asec:h0e,asech:d0e,asin:p0e,asinh:m0e,atan:v0e,atanh:y0e,atan2:g0e,cos:b0e,cosh:x0e,cot:w0e,coth:S0e,csc:_0e,csch:A0e,sec:D0e,sech:E0e,sin:N0e,sinh:C0e,tan:M0e,tanh:T0e,to:O0e,clone:R0e,format:P0e,bin:F0e,oct:V0e,hex:B0e,isNaN:L0e,isInteger:I0e,isNegative:$0e,isNumeric:z0e,hasNumericValue:k0e,isPositive:q0e,isPrime:U0e,isZero:H0e,print:Y0e,typeOf:j0e,numeric:W0e},ZC="help",Z0e=["typed","mathWithTransform","Help"],K0e=G(ZC,Z0e,t=>{var{typed:e,mathWithTransform:r,Help:n}=t;return e(ZC,{any:function(a){var s,o=a;if(typeof a!="string"){for(s in r)if(nt(r,s)&&a===r[s]){o=s;break}}var u=ri(X0e,o);if(!u){var l=typeof o=="function"?o.name:o;throw new Error('No documentation found on "'+l+'"')}return new n(u)}})}),KC="chain",J0e=["typed","Chain"],Q0e=G(KC,J0e,t=>{var{typed:e,Chain:r}=t;return e(KC,{"":function(){return new r},any:function(i){return new r(i)}})}),JC="det",eye=["typed","matrix","subtractScalar","multiply","divideScalar","isZero","unaryMinus"],tye=G(JC,eye,t=>{var{typed:e,matrix:r,subtractScalar:n,multiply:i,divideScalar:a,isZero:s,unaryMinus:o}=t;return e(JC,{any:function(c){return xt(c)},"Array | Matrix":function(c){var f;switch(dt(c)?f=c.size():Array.isArray(c)?(c=r(c),f=c.size()):f=[],f.length){case 0:return xt(c);case 1:if(f[0]===1)return xt(c.valueOf()[0]);if(f[0]===0)return 1;throw new RangeError("Matrix must be square (size: "+Rt(f)+")");case 2:{var h=f[0],p=f[1];if(h===p)return u(c.clone().valueOf(),h);if(p===0)return 1;throw new RangeError("Matrix must be square (size: "+Rt(f)+")")}default:throw new RangeError("Matrix must be two dimensional (size: "+Rt(f)+")")}}});function u(l,c,f){if(c===1)return xt(l[0][0]);if(c===2)return n(i(l[0][0],l[1][1]),i(l[1][0],l[0][1]));for(var h=!1,p=new Array(c).fill(0).map((C,N)=>N),g=0;g{var{typed:e,matrix:r,divideScalar:n,addScalar:i,multiply:a,unaryMinus:s,det:o,identity:u,abs:l}=t;return e(QC,{"Array | Matrix":function(h){var p=dt(h)?h.size():Et(h);switch(p.length){case 1:if(p[0]===1)return dt(h)?r([n(1,h.valueOf()[0])]):[n(1,h[0])];throw new RangeError("Matrix must be square (size: "+Rt(p)+")");case 2:{var g=p[0],m=p[1];if(g===m)return dt(h)?r(c(h.valueOf(),g,m),h.storage()):c(h,g,m);throw new RangeError("Matrix must be square (size: "+Rt(p)+")")}default:throw new RangeError("Matrix must be two dimensional (size: "+Rt(p)+")")}},any:function(h){return n(1,h)}});function c(f,h,p){var g,m,b,y,S;if(h===1){if(y=f[0][0],y===0)throw Error("Cannot calculate inverse, determinant is zero");return[[n(1,y)]]}else if(h===2){var x=o(f);if(x===0)throw Error("Cannot calculate inverse, determinant is zero");return[[n(f[1][1],x),n(s(f[0][1]),x)],[n(s(f[1][0]),x),n(f[0][0],x)]]}else{var _=f.concat();for(g=0;gC&&(C=l(_[g][w]),N=g),g++;if(C===0)throw Error("Cannot calculate inverse, determinant is zero");g=N,g!==w&&(S=_[w],_[w]=_[g],_[g]=S,S=A[w],A[w]=A[g],A[g]=S);var E=_[w],M=A[w];for(g=0;g{var{typed:e,matrix:r,inv:n,deepEqual:i,equal:a,dotDivide:s,dot:o,ctranspose:u,divideScalar:l,multiply:c,add:f,Complex:h}=t;return e(eM,{"Array | Matrix":function(x){var _=dt(x)?x.size():Et(x);switch(_.length){case 1:return y(x)?u(x):_[0]===1?n(x):s(u(x),o(x,x));case 2:{if(y(x))return u(x);var A=_[0],w=_[1];if(A===w)try{return n(x)}catch(C){if(!(C instanceof Error&&C.message.match(/Cannot calculate inverse, determinant is zero/)))throw C}return dt(x)?r(p(x.valueOf(),A,w),x.storage()):p(x,A,w)}default:throw new RangeError("Matrix must be two dimensional (size: "+Rt(_)+")")}},any:function(x){return a(x,0)?xt(x):l(1,x)}});function p(S,x,_){var{C:A,F:w}=m(S,x,_),C=c(n(c(u(A),A)),u(A)),N=c(u(w),n(c(w,u(w))));return c(N,C)}function g(S,x,_){for(var A=xt(S),w=0,C=0;CN.filter((M,O)=>O!b(o(A[E],A[E])));return{C:w,F:C}}function b(S){return a(f(S,h(1,1)),f(0,h(1,1)))}function y(S){return i(f(S,h(1,1)),f(c(S,0),h(1,1)))}});function sye(t){var{addScalar:e,subtract:r,flatten:n,multiply:i,multiplyScalar:a,divideScalar:s,sqrt:o,abs:u,bignumber:l,diag:c,size:f,reshape:h,inv:p,qr:g,usolve:m,usolveAll:b,equal:y,complex:S,larger:x,smaller:_,matrixFromColumns:A,dot:w}=t;function C(ne,X,de,Se){var ce=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,xe=N(ne,X,de,Se,ce);E(ne,X,de,Se,ce,xe);var{values:_e,C:me}=M(ne,X,de,Se,ce);if(ce){var we=O(ne,X,me,xe,_e,de,Se);return{values:_e,eigenvectors:we}}return{values:_e}}function N(ne,X,de,Se,ce){var xe=Se==="BigNumber",_e=Se==="Complex",me=xe?l(0):0,we=xe?l(1):_e?S(1):1,Ee=xe?l(1):1,Ce=xe?l(10):2,He=a(Ce,Ce),Ue;ce&&(Ue=Array(X).fill(we));for(var J=!1;!J;){J=!0;for(var te=0;te1&&(J=c(Array(Ce-1).fill(me)))),Ce-=1,we.pop();for(var Me=0;Me2&&(J=c(Array(Ce-2).fill(me)))),Ce-=2,we.pop(),we.pop();for(var U=0;U+r(u(ge),u(De))),te>100){var Y=Error("The eigenvalues failed to converge. Only found these eigenvalues: "+Ee.join(", "));throw Y.values=Ee,Y.vectors=[],Y}var pe=ce?i(Ue,H(He,X)):void 0;return{values:Ee,C:pe}}function O(ne,X,de,Se,ce,xe,_e){var me=p(de),we=i(me,ne,de),Ee=_e==="BigNumber",Ce=_e==="Complex",He=Ee?l(0):Ce?S(0):0,Ue=Ee?l(1):Ce?S(1):1,J=[],te=[];for(var ye of ce){var ee=B(J,ye,y);ee===-1?(J.push(ye),te.push(1)):te[ee]+=1}for(var ue=[],le=J.length,Ne=Array(X).fill(He),Me=c(Array(X).fill(Ue)),R=function(){var pe=J[U],ge=r(we,i(pe,Me)),De=b(ge,Ne);for(De.shift();De.lengthi(ke,Ve)),ue.push(...De.map(Ve=>({value:pe,vector:n(Ve)})))},U=0;U=5)return null;for(me=0;;){var we=m(ne,_e);if(_(se($(_e,[we])),Se))break;if(++me>=10)return null;_e=he(we)}return _e}function K(ne,X,de){var Se=de==="BigNumber",ce=de==="Complex",xe=Array(ne).fill(0).map(_e=>2*Math.random()-1);return Se&&(xe=xe.map(_e=>l(_e))),ce&&(xe=xe.map(_e=>S(_e))),xe=$(xe,X),he(xe,de)}function $(ne,X){var de=f(ne);for(var Se of X)Se=h(Se,de),ne=r(ne,i(s(w(Se,ne),w(Se,Se)),Se));return ne}function se(ne){return u(o(w(ne,ne)))}function he(ne,X){var de=X==="BigNumber",Se=X==="Complex",ce=de?l(1):Se?S(1):1;return i(s(ce,se(ne)),ne)}return C}function oye(t){var{config:e,addScalar:r,subtract:n,abs:i,atan:a,cos:s,sin:o,multiplyScalar:u,inv:l,bignumber:c,multiply:f,add:h}=t;function p(E,M){var O=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.epsilon,F=arguments.length>3?arguments[3]:void 0,q=arguments.length>4?arguments[4]:void 0;if(F==="number")return g(E,O,q);if(F==="BigNumber")return m(E,O,q);throw TypeError("Unsupported data type: "+F)}function g(E,M,O){var F=E.length,q=Math.abs(M/F),V,H;if(O){H=new Array(F);for(var B=0;B=Math.abs(q);){var K=k[0][0],$=k[0][1];V=b(E[K][K],E[$][$],E[K][$]),E=A(E,V,K,$),O&&(H=S(H,V,K,$)),k=w(E)}for(var se=Array(F).fill(0),he=0;he=i(q);){var K=k[0][0],$=k[0][1];V=y(E[K][K],E[$][$],E[K][$]),E=_(E,V,K,$),O&&(H=x(H,V,K,$)),k=C(E)}for(var se=Array(F).fill(0),he=0;he({value:q[X],vector:ne}));return{values:q,eigenvectors:he}}return p}var uye="eigs",lye=["config","typed","matrix","addScalar","equal","subtract","abs","atan","cos","sin","multiplyScalar","divideScalar","inv","bignumber","multiply","add","larger","column","flatten","number","complex","sqrt","diag","size","reshape","qr","usolve","usolveAll","im","re","smaller","matrixFromColumns","dot"],cye=G(uye,lye,t=>{var{config:e,typed:r,matrix:n,addScalar:i,subtract:a,equal:s,abs:o,atan:u,cos:l,sin:c,multiplyScalar:f,divideScalar:h,inv:p,bignumber:g,multiply:m,add:b,larger:y,column:S,flatten:x,number:_,complex:A,sqrt:w,diag:C,size:N,reshape:E,qr:M,usolve:O,usolveAll:F,im:q,re:V,smaller:H,matrixFromColumns:B,dot:k}=t,K=oye({config:e,addScalar:i,subtract:a,column:S,flatten:x,equal:s,abs:o,atan:u,cos:l,sin:c,multiplyScalar:f,inv:p,bignumber:g,complex:A,multiply:m,add:b}),$=sye({config:e,addScalar:i,subtract:a,multiply:m,multiplyScalar:f,flatten:x,divideScalar:h,sqrt:w,abs:o,bignumber:g,diag:C,size:N,reshape:E,qr:M,inv:p,usolve:O,usolveAll:F,equal:s,complex:A,larger:y,smaller:H,matrixFromColumns:B,dot:k});return r("eigs",{Array:function(xe){return se(n(xe))},"Array, number|BigNumber":function(xe,_e){return se(n(xe),{precision:_e})},"Array, Object"(ce,xe){return se(n(ce),xe)},Matrix:function(xe){return se(xe,{matricize:!0})},"Matrix, number|BigNumber":function(xe,_e){return se(xe,{precision:_e,matricize:!0})},"Matrix, Object":function(xe,_e){var me={matricize:!0};return dn(me,_e),se(xe,me)}});function se(ce){var xe,_e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},me="eigenvectors"in _e?_e.eigenvectors:!0,we=(xe=_e.precision)!==null&&xe!==void 0?xe:e.epsilon,Ee=he(ce,we,me);return _e.matricize&&(Ee.values=n(Ee.values),me&&(Ee.eigenvectors=Ee.eigenvectors.map(Ce=>{var{value:He,vector:Ue}=Ce;return{value:He,vector:n(Ue)}}))),me&&Object.defineProperty(Ee,"vectors",{enumerable:!1,get:()=>{throw new Error("eigs(M).vectors replaced with eigs(M).eigenvectors")}}),Ee}function he(ce,xe,_e){var me=ce.toArray(),we=ce.size();if(we.length!==2||we[0]!==we[1])throw new RangeError("Matrix must be square (size: ".concat(Rt(we),")"));var Ee=we[0];if(X(me,Ee,xe)&&(de(me,Ee),ne(me,Ee,xe))){var Ce=Se(ce,me,Ee);return K(me,Ee,xe,Ce,_e)}var He=Se(ce,me,Ee);return $(me,Ee,xe,He,_e)}function ne(ce,xe,_e){for(var me=0;me{var{typed:e,abs:r,add:n,identity:i,inv:a,multiply:s}=t;return e(tM,{Matrix:function(f){var h=f.size();if(h.length!==2||h[0]!==h[1])throw new RangeError("Matrix must be square (size: "+Rt(h)+")");for(var p=h[0],g=1e-15,m=o(f),b=u(m,g),y=b.q,S=b.j,x=s(f,Math.pow(2,-S)),_=i(p),A=i(p),w=1,C=x,N=-1,E=1;E<=y;E++)E>1&&(C=s(C,x),N=-N),w=w*(y-E+1)/((2*y-E+1)*E),_=n(_,s(w,C)),A=n(A,s(w*N,C));for(var M=s(a(A),_),O=0;O{var{typed:e,abs:r,add:n,multiply:i,map:a,sqrt:s,subtract:o,inv:u,size:l,max:c,identity:f}=t,h=1e3,p=1e-6;function g(m){var b,y=0,S=m,x=f(l(m));do{var _=S;if(S=i(.5,n(_,u(x))),x=i(.5,n(x,u(_))),b=c(r(o(S,_))),b>p&&++y>h)throw new Error("computing square root of matrix: iterative method could not converge")}while(b>p);return S}return e(rM,{"Array | Matrix":function(b){var y=dt(b)?b.size():Et(b);switch(y.length){case 1:if(y[0]===1)return a(b,s);throw new RangeError("Matrix must be square (size: "+Rt(y)+")");case 2:{var S=y[0],x=y[1];if(S===x)return g(b);throw new RangeError("Matrix must be square (size: "+Rt(y)+")")}default:throw new RangeError("Matrix must be at most two dimensional (size: "+Rt(y)+")")}}})}),nM="sylvester",mye=["typed","schur","matrixFromColumns","matrix","multiply","range","concat","transpose","index","subset","add","subtract","identity","lusolve","abs"],vye=G(nM,mye,t=>{var{typed:e,schur:r,matrixFromColumns:n,matrix:i,multiply:a,range:s,concat:o,transpose:u,index:l,subset:c,add:f,subtract:h,identity:p,lusolve:g,abs:m}=t;return e(nM,{"Matrix, Matrix, Matrix":b,"Array, Matrix, Matrix":function(S,x,_){return b(i(S),x,_)},"Array, Array, Matrix":function(S,x,_){return b(i(S),i(x),_)},"Array, Matrix, Array":function(S,x,_){return b(i(S),x,i(_))},"Matrix, Array, Matrix":function(S,x,_){return b(S,i(x),_)},"Matrix, Array, Array":function(S,x,_){return b(S,i(x),i(_))},"Matrix, Matrix, Array":function(S,x,_){return b(S,x,i(_))},"Array, Array, Array":function(S,x,_){return b(i(S),i(x),i(_)).toArray()}});function b(y,S,x){for(var _=S.size()[0],A=y.size()[0],w=r(y),C=w.T,N=w.U,E=r(a(-1,S)),M=E.T,O=E.U,F=a(a(u(N),x),O),q=s(0,A),V=[],H=(Ce,He)=>o(Ce,He,1),B=(Ce,He)=>o(Ce,He,0),k=0;k<_;k++)if(k<_-1&&m(c(M,l(k+1,k)))>1e-5){for(var K=B(c(F,l(q,k)),c(F,l(q,k+1))),$=0;${var{typed:e,matrix:r,identity:n,multiply:i,qr:a,norm:s,subtract:o}=t;return e(iM,{Array:function(c){var f=u(r(c));return{U:f.U.valueOf(),T:f.T.valueOf()}},Matrix:function(c){return u(c)}});function u(l){var c=l.size()[0],f=l,h=n(c),p=0,g;do{g=f;var m=a(f),b=m.Q,y=m.R;if(f=i(y,b),h=i(h,b),p++>100)break}while(s(o(f,g))>1e-4);return{U:h,T:f}}}),aM="lyap",bye=["typed","matrix","sylvester","multiply","transpose"],xye=G(aM,bye,t=>{var{typed:e,matrix:r,sylvester:n,multiply:i,transpose:a}=t;return e(aM,{"Matrix, Matrix":function(o,u){return n(o,a(o),i(-1,u))},"Array, Matrix":function(o,u){return n(r(o),a(r(o)),i(-1,u))},"Matrix, Array":function(o,u){return n(o,a(r(o)),r(i(-1,u)))},"Array, Array":function(o,u){return n(r(o),a(r(o)),r(i(-1,u))).toArray()}})}),wye="divide",Sye=["typed","matrix","multiply","equalScalar","divideScalar","inv"],_ye=G(wye,Sye,t=>{var{typed:e,matrix:r,multiply:n,equalScalar:i,divideScalar:a,inv:s}=t,o=Pn({typed:e,equalScalar:i}),u=Pa({typed:e});return e("divide",fP({"Array | Matrix, Array | Matrix":function(c,f){return n(c,s(f))},"DenseMatrix, any":function(c,f){return u(c,f,a,!1)},"SparseMatrix, any":function(c,f){return o(c,f,a,!1)},"Array, any":function(c,f){return u(r(c),f,a,!1).valueOf()},"any, Array | Matrix":function(c,f){return n(c,s(f))}},a.signatures))}),sM="distance",Aye=["typed","addScalar","subtractScalar","divideScalar","multiplyScalar","deepEqual","sqrt","abs"],Dye=G(sM,Aye,t=>{var{typed:e,addScalar:r,subtractScalar:n,multiplyScalar:i,divideScalar:a,deepEqual:s,sqrt:o,abs:u}=t;return e(sM,{"Array, Array, Array":function(A,w,C){if(A.length===2&&w.length===2&&C.length===2){if(!c(A))throw new TypeError("Array with 2 numbers or BigNumbers expected for first argument");if(!c(w))throw new TypeError("Array with 2 numbers or BigNumbers expected for second argument");if(!c(C))throw new TypeError("Array with 2 numbers or BigNumbers expected for third argument");if(s(w,C))throw new TypeError("LinePoint1 should not be same with LinePoint2");var N=n(C[1],w[1]),E=n(w[0],C[0]),M=n(i(C[0],w[1]),i(w[0],C[1]));return b(A[0],A[1],N,E,M)}else throw new TypeError("Invalid Arguments: Try again")},"Object, Object, Object":function(A,w,C){if(Object.keys(A).length===2&&Object.keys(w).length===2&&Object.keys(C).length===2){if(!c(A))throw new TypeError("Values of pointX and pointY should be numbers or BigNumbers");if(!c(w))throw new TypeError("Values of lineOnePtX and lineOnePtY should be numbers or BigNumbers");if(!c(C))throw new TypeError("Values of lineTwoPtX and lineTwoPtY should be numbers or BigNumbers");if(s(g(w),g(C)))throw new TypeError("LinePoint1 should not be same with LinePoint2");if("pointX"in A&&"pointY"in A&&"lineOnePtX"in w&&"lineOnePtY"in w&&"lineTwoPtX"in C&&"lineTwoPtY"in C){var N=n(C.lineTwoPtY,w.lineOnePtY),E=n(w.lineOnePtX,C.lineTwoPtX),M=n(i(C.lineTwoPtX,w.lineOnePtY),i(w.lineOnePtX,C.lineTwoPtY));return b(A.pointX,A.pointY,N,E,M)}else throw new TypeError("Key names do not match")}else throw new TypeError("Invalid Arguments: Try again")},"Array, Array":function(A,w){if(A.length===2&&w.length===3){if(!c(A))throw new TypeError("Array with 2 numbers or BigNumbers expected for first argument");if(!f(w))throw new TypeError("Array with 3 numbers or BigNumbers expected for second argument");return b(A[0],A[1],w[0],w[1],w[2])}else if(A.length===3&&w.length===6){if(!f(A))throw new TypeError("Array with 3 numbers or BigNumbers expected for first argument");if(!p(w))throw new TypeError("Array with 6 numbers or BigNumbers expected for second argument");return y(A[0],A[1],A[2],w[0],w[1],w[2],w[3],w[4],w[5])}else if(A.length===w.length&&A.length>0){if(!h(A))throw new TypeError("All values of an array should be numbers or BigNumbers");if(!h(w))throw new TypeError("All values of an array should be numbers or BigNumbers");return S(A,w)}else throw new TypeError("Invalid Arguments: Try again")},"Object, Object":function(A,w){if(Object.keys(A).length===2&&Object.keys(w).length===3){if(!c(A))throw new TypeError("Values of pointX and pointY should be numbers or BigNumbers");if(!f(w))throw new TypeError("Values of xCoeffLine, yCoeffLine and constant should be numbers or BigNumbers");if("pointX"in A&&"pointY"in A&&"xCoeffLine"in w&&"yCoeffLine"in w&&"constant"in w)return b(A.pointX,A.pointY,w.xCoeffLine,w.yCoeffLine,w.constant);throw new TypeError("Key names do not match")}else if(Object.keys(A).length===3&&Object.keys(w).length===6){if(!f(A))throw new TypeError("Values of pointX, pointY and pointZ should be numbers or BigNumbers");if(!p(w))throw new TypeError("Values of x0, y0, z0, a, b and c should be numbers or BigNumbers");if("pointX"in A&&"pointY"in A&&"x0"in w&&"y0"in w&&"z0"in w&&"a"in w&&"b"in w&&"c"in w)return y(A.pointX,A.pointY,A.pointZ,w.x0,w.y0,w.z0,w.a,w.b,w.c);throw new TypeError("Key names do not match")}else if(Object.keys(A).length===2&&Object.keys(w).length===2){if(!c(A))throw new TypeError("Values of pointOneX and pointOneY should be numbers or BigNumbers");if(!c(w))throw new TypeError("Values of pointTwoX and pointTwoY should be numbers or BigNumbers");if("pointOneX"in A&&"pointOneY"in A&&"pointTwoX"in w&&"pointTwoY"in w)return S([A.pointOneX,A.pointOneY],[w.pointTwoX,w.pointTwoY]);throw new TypeError("Key names do not match")}else if(Object.keys(A).length===3&&Object.keys(w).length===3){if(!f(A))throw new TypeError("Values of pointOneX, pointOneY and pointOneZ should be numbers or BigNumbers");if(!f(w))throw new TypeError("Values of pointTwoX, pointTwoY and pointTwoZ should be numbers or BigNumbers");if("pointOneX"in A&&"pointOneY"in A&&"pointOneZ"in A&&"pointTwoX"in w&&"pointTwoY"in w&&"pointTwoZ"in w)return S([A.pointOneX,A.pointOneY,A.pointOneZ],[w.pointTwoX,w.pointTwoY,w.pointTwoZ]);throw new TypeError("Key names do not match")}else throw new TypeError("Invalid Arguments: Try again")},Array:function(A){if(!m(A))throw new TypeError("Incorrect array format entered for pairwise distance calculation");return x(A)}});function l(_){return typeof _=="number"||Mt(_)}function c(_){return _.constructor!==Array&&(_=g(_)),l(_[0])&&l(_[1])}function f(_){return _.constructor!==Array&&(_=g(_)),l(_[0])&&l(_[1])&&l(_[2])}function h(_){return Array.isArray(_)||(_=g(_)),_.every(l)}function p(_){return _.constructor!==Array&&(_=g(_)),l(_[0])&&l(_[1])&&l(_[2])&&l(_[3])&&l(_[4])&&l(_[5])}function g(_){for(var A=Object.keys(_),w=[],C=0;CA.length!==2||!l(A[0])||!l(A[1])))return!1}else if(_[0].length===3&&l(_[0][0])&&l(_[0][1])&&l(_[0][2])){if(_.some(A=>A.length!==3||!l(A[0])||!l(A[1])||!l(A[2])))return!1}else return!1;return!0}function b(_,A,w,C,N){var E=u(r(r(i(w,_),i(C,A)),N)),M=o(r(i(w,w),i(C,C)));return a(E,M)}function y(_,A,w,C,N,E,M,O,F){var q=[n(i(n(N,A),F),i(n(E,w),O)),n(i(n(E,w),M),i(n(C,_),F)),n(i(n(C,_),O),i(n(N,A),M))];q=o(r(r(i(q[0],q[0]),i(q[1],q[1])),i(q[2],q[2])));var V=o(r(r(i(M,M),i(O,O)),i(F,F)));return a(q,V)}function S(_,A){for(var w=_.length,C=0,N=0,E=0;E{var{typed:e,config:r,abs:n,add:i,addScalar:a,matrix:s,multiply:o,multiplyScalar:u,divideScalar:l,subtract:c,smaller:f,equalScalar:h,flatten:p,isZero:g,isNumeric:m}=t;return e("intersect",{"Array, Array, Array":b,"Array, Array, Array, Array":y,"Matrix, Matrix, Matrix":function(O,F,q){var V=b(O.valueOf(),F.valueOf(),q.valueOf());return V===null?null:s(V)},"Matrix, Matrix, Matrix, Matrix":function(O,F,q,V){var H=y(O.valueOf(),F.valueOf(),q.valueOf(),V.valueOf());return H===null?null:s(H)}});function b(M,O,F){if(M=S(M),O=S(O),F=S(F),!_(M))throw new TypeError("Array with 3 numbers or BigNumbers expected for first argument");if(!_(O))throw new TypeError("Array with 3 numbers or BigNumbers expected for second argument");if(!A(F))throw new TypeError("Array with 4 numbers expected as third argument");return E(M[0],M[1],M[2],O[0],O[1],O[2],F[0],F[1],F[2],F[3])}function y(M,O,F,q){if(M=S(M),O=S(O),F=S(F),q=S(q),M.length===2){if(!x(M))throw new TypeError("Array with 2 numbers or BigNumbers expected for first argument");if(!x(O))throw new TypeError("Array with 2 numbers or BigNumbers expected for second argument");if(!x(F))throw new TypeError("Array with 2 numbers or BigNumbers expected for third argument");if(!x(q))throw new TypeError("Array with 2 numbers or BigNumbers expected for fourth argument");return w(M,O,F,q)}else if(M.length===3){if(!_(M))throw new TypeError("Array with 3 numbers or BigNumbers expected for first argument");if(!_(O))throw new TypeError("Array with 3 numbers or BigNumbers expected for second argument");if(!_(F))throw new TypeError("Array with 3 numbers or BigNumbers expected for third argument");if(!_(q))throw new TypeError("Array with 3 numbers or BigNumbers expected for fourth argument");return N(M[0],M[1],M[2],O[0],O[1],O[2],F[0],F[1],F[2],q[0],q[1],q[2])}else throw new TypeError("Arrays with two or thee dimensional points expected")}function S(M){return M.length===1?M[0]:M.length>1&&Array.isArray(M[0])&&M.every(O=>Array.isArray(O)&&O.length===1)?p(M):M}function x(M){return M.length===2&&m(M[0])&&m(M[1])}function _(M){return M.length===3&&m(M[0])&&m(M[1])&&m(M[2])}function A(M){return M.length===4&&m(M[0])&&m(M[1])&&m(M[2])&&m(M[3])}function w(M,O,F,q){var V=M,H=F,B=c(V,O),k=c(H,q),K=c(u(B[0],k[1]),u(k[0],B[1]));if(g(K)||f(n(K),r.epsilon))return null;var $=u(k[0],V[1]),se=u(k[1],V[0]),he=u(k[0],H[1]),ne=u(k[1],H[0]),X=l(a(c(c($,se),he),ne),K);return i(o(B,X),V)}function C(M,O,F,q,V,H,B,k,K,$,se,he){var ne=u(c(M,O),c(F,q)),X=u(c(V,H),c(B,k)),de=u(c(K,$),c(se,he));return a(a(ne,X),de)}function N(M,O,F,q,V,H,B,k,K,$,se,he){var ne=C(M,B,$,B,O,k,se,k,F,K,he,K),X=C($,B,q,M,se,k,V,O,he,K,H,F),de=C(M,B,q,M,O,k,V,O,F,K,H,F),Se=C($,B,$,B,se,k,se,k,he,K,he,K),ce=C(q,M,q,M,V,O,V,O,H,F,H,F),xe=c(u(ne,X),u(de,Se)),_e=c(u(ce,Se),u(X,X));if(g(_e))return null;var me=l(xe,_e),we=l(a(ne,u(me,X)),Se),Ee=a(M,u(me,c(q,M))),Ce=a(O,u(me,c(V,O))),He=a(F,u(me,c(H,F))),Ue=a(B,u(we,c($,B))),J=a(k,u(we,c(se,k))),te=a(K,u(we,c(he,K)));return h(Ee,Ue)&&h(Ce,J)&&h(He,te)?[Ee,Ce,He]:null}function E(M,O,F,q,V,H,B,k,K,$){var se=u(M,B),he=u(q,B),ne=u(O,k),X=u(V,k),de=u(F,K),Se=u(H,K),ce=c(c(c($,se),ne),de),xe=c(c(c(a(a(he,X),Se),se),ne),de),_e=l(ce,xe),me=a(M,u(_e,c(q,M))),we=a(O,u(_e,c(V,O))),Ee=a(F,u(_e,c(H,F)));return[me,we,Ee]}}),oM="sum",Mye=["typed","config","add","numeric"],fB=G(oM,Mye,t=>{var{typed:e,config:r,add:n,numeric:i}=t;return e(oM,{"Array | Matrix":a,"Array | Matrix, number | BigNumber":s,"...":function(u){if(Fc(u))throw new TypeError("Scalar values expected in function sum");return a(u)}});function a(o){var u;return Gs(o,function(l){try{u=u===void 0?l:n(u,l)}catch(c){throw ai(c,"sum",l)}}),u===void 0&&(u=i(0,r.number)),typeof u=="string"&&(u=i(u,r.number)),u}function s(o,u){try{var l=qg(o,u,n);return l}catch(c){throw ai(c,"sum")}}}),bm="cumsum",Tye=["typed","add","unaryPlus"],hB=G(bm,Tye,t=>{var{typed:e,add:r,unaryPlus:n}=t;return e(bm,{Array:i,Matrix:function(l){return l.create(i(l.valueOf()))},"Array, number | BigNumber":s,"Matrix, number | BigNumber":function(l,c){return l.create(s(l.valueOf(),c))},"...":function(l){if(Fc(l))throw new TypeError("All values expected to be scalar in function cumsum");return i(l)}});function i(u){try{return a(u)}catch(l){throw ai(l,bm)}}function a(u){if(u.length===0)return[];for(var l=[n(u[0])],c=1;c=c.length)throw new Fa(l,c.length);try{return o(u,l)}catch(f){throw ai(f,bm)}}function o(u,l){var c,f,h;if(l<=0){var p=u[0][0];if(Array.isArray(p)){for(h=VP(u),f=[],c=0;c{var{typed:e,add:r,divide:n}=t;return e(uM,{"Array | Matrix":a,"Array | Matrix, number | BigNumber":i,"...":function(o){if(Fc(o))throw new TypeError("Scalar values expected in function mean");return a(o)}});function i(s,o){try{var u=qg(s,o,r),l=Array.isArray(s)?Et(s):s.size();return n(u,l[o])}catch(c){throw ai(c,"mean")}}function a(s){var o,u=0;if(Gs(s,function(l){try{o=o===void 0?l:r(o,l),u++}catch(c){throw ai(c,"mean",l)}}),u===0)throw new Error("Cannot calculate the mean of an empty array");return n(o,u)}}),lM="median",Fye=["typed","add","divide","compare","partitionSelect"],Rye=G(lM,Fye,t=>{var{typed:e,add:r,divide:n,compare:i,partitionSelect:a}=t;function s(l){try{l=tr(l.valueOf());var c=l.length;if(c===0)throw new Error("Cannot calculate median of an empty array");if(c%2===0){for(var f=c/2-1,h=a(l,f+1),p=l[f],g=0;g0&&(p=l[g]);return u(p,h)}else{var m=a(l,(c-1)/2);return o(m)}}catch(b){throw ai(b,"median")}}var o=e({"number | BigNumber | Complex | Unit":function(c){return c}}),u=e({"number | BigNumber | Complex | Unit, number | BigNumber | Complex | Unit":function(c,f){return n(r(c,f),2)}});return e(lM,{"Array | Matrix":s,"Array | Matrix, number | BigNumber":function(c,f){throw new Error("median(A, dim) is not yet supported")},"...":function(c){if(Fc(c))throw new TypeError("Scalar values expected in function median");return s(c)}})}),cM="mad",Pye=["typed","abs","map","median","subtract"],kye=G(cM,Pye,t=>{var{typed:e,abs:r,map:n,median:i,subtract:a}=t;return e(cM,{"Array | Matrix":s,"...":function(u){return s(u)}});function s(o){if(o=tr(o.valueOf()),o.length===0)throw new Error("Cannot calculate median absolute deviation (mad) of an empty array");try{var u=i(o);return i(n(o,function(l){return r(a(l,u))}))}catch(l){throw l instanceof TypeError&&l.message.indexOf("median")!==-1?new TypeError(l.message.replace("median","mad")):ai(l,"mad")}}}),eb="unbiased",fM="variance",Bye=["typed","add","subtract","multiply","divide","apply","isNaN"],pB=G(fM,Bye,t=>{var{typed:e,add:r,subtract:n,multiply:i,divide:a,apply:s,isNaN:o}=t;return e(fM,{"Array | Matrix":function(f){return u(f,eb)},"Array | Matrix, string":u,"Array | Matrix, number | BigNumber":function(f,h){return l(f,h,eb)},"Array | Matrix, number | BigNumber, string":l,"...":function(f){return u(f,eb)}});function u(c,f){var h,p=0;if(c.length===0)throw new SyntaxError("Function variance requires one or more parameters (0 provided)");if(Gs(c,function(b){try{h=h===void 0?b:r(h,b),p++}catch(y){throw ai(y,"variance",b)}}),p===0)throw new Error("Cannot calculate variance of an empty array");var g=a(h,p);if(h=void 0,Gs(c,function(b){var y=n(b,g);h=h===void 0?i(y,y):r(h,i(y,y))}),o(h))return h;switch(f){case"uncorrected":return a(h,p);case"biased":return a(h,p+1);case"unbiased":{var m=Mt(h)?h.mul(0):0;return p===1?m:a(h,p-1)}default:throw new Error('Unknown normalization "'+f+'". Choose "unbiased" (default), "uncorrected", or "biased".')}}function l(c,f,h){try{if(c.length===0)throw new SyntaxError("Function variance requires one or more parameters (0 provided)");return s(c,f,p=>u(p,h))}catch(p){throw ai(p,"variance")}}}),hM="quantileSeq",Iye=["typed","?bignumber","add","subtract","divide","multiply","partitionSelect","compare","isInteger","smaller","smallerEq","larger"],mB=G(hM,Iye,t=>{var{typed:e,bignumber:r,add:n,subtract:i,divide:a,multiply:s,partitionSelect:o,compare:u,isInteger:l,smaller:c,smallerEq:f,larger:h}=t,p=fw({typed:e,isInteger:l});return e(hM,{"Array | Matrix, number | BigNumber":(S,x)=>m(S,x,!1),"Array | Matrix, number | BigNumber, number":(S,x,_)=>g(S,x,!1,_,m),"Array | Matrix, number | BigNumber, boolean":m,"Array | Matrix, number | BigNumber, boolean, number":(S,x,_,A)=>g(S,x,_,A,m),"Array | Matrix, Array | Matrix":(S,x)=>b(S,x,!1),"Array | Matrix, Array | Matrix, number":(S,x,_)=>g(S,x,!1,_,b),"Array | Matrix, Array | Matrix, boolean":b,"Array | Matrix, Array | Matrix, boolean, number":(S,x,_,A)=>g(S,x,_,A,b)});function g(S,x,_,A,w){return p(S,A,C=>w(C,x,_))}function m(S,x,_){var A,w=S.valueOf();if(c(x,0))throw new Error("N/prob must be non-negative");if(f(x,1))return Ct(x)?y(w,x,_):r(y(w,x,_));if(h(x,1)){if(!l(x))throw new Error("N must be a positive integer");if(h(x,4294967295))throw new Error("N must be less than or equal to 2^32-1, as that is the maximum length of an Array");var C=n(x,1);A=[];for(var N=0;c(N,x);N++){var E=a(N+1,C);A.push(y(w,E,_))}return Ct(x)?A:r(A)}}function b(S,x,_){for(var A=S.valueOf(),w=x.valueOf(),C=[],N=0;N0&&(M=A[F])}return n(s(M,i(1,E)),s(O,E))}}),dM="std",Lye=["typed","map","sqrt","variance"],vB=G(dM,Lye,t=>{var{typed:e,map:r,sqrt:n,variance:i}=t;return e(dM,{"Array | Matrix":a,"Array | Matrix, string":a,"Array | Matrix, number | BigNumber":a,"Array | Matrix, number | BigNumber, string":a,"...":function(o){return a(o)}});function a(s,o){if(s.length===0)throw new SyntaxError("Function std requires one or more parameters (0 provided)");try{var u=i.apply(null,arguments);return oa(u)?r(u,n):n(u)}catch(l){throw l instanceof TypeError&&l.message.indexOf(" variance")!==-1?new TypeError(l.message.replace(" variance"," std")):l}}}),pM="corr",$ye=["typed","matrix","mean","sqrt","sum","add","subtract","multiply","pow","divide"],zye=G(pM,$ye,t=>{var{typed:e,matrix:r,sqrt:n,sum:i,add:a,subtract:s,multiply:o,pow:u,divide:l}=t;return e(pM,{"Array, Array":function(p,g){return c(p,g)},"Matrix, Matrix":function(p,g){var m=c(p.toArray(),g.toArray());return Array.isArray(m)?r(m):m}});function c(h,p){var g=[];if(Array.isArray(h[0])&&Array.isArray(p[0])){if(h.length!==p.length)throw new SyntaxError("Dimension mismatch. Array A and B must have the same length.");for(var m=0;ma(w,o(C,p[N])),0),S=i(h.map(w=>u(w,2))),x=i(p.map(w=>u(w,2))),_=s(o(g,y),o(m,b)),A=n(o(s(o(g,S),u(m,2)),s(o(g,x),u(b,2))));return l(_,A)}}),mM="combinations",qye=["typed"],Uye=G(mM,qye,t=>{var{typed:e}=t;return e(mM,{"number, number":pk,"BigNumber, BigNumber":function(n,i){var a=n.constructor,s,o,u=n.minus(i),l=new a(1);if(!vM(n)||!vM(i))throw new TypeError("Positive integer value expected in function combinations");if(i.gt(n))throw new TypeError("k must be less than n in function combinations");if(s=l,i.lt(u))for(o=l;o.lte(u);o=o.plus(l))s=s.times(i.plus(o)).dividedBy(o);else for(o=l;o.lte(i);o=o.plus(l))s=s.times(u.plus(o)).dividedBy(o);return s}})});function vM(t){return t.isInteger()&&t.gte(0)}var gM="combinationsWithRep",Hye=["typed"],Wye=G(gM,Hye,t=>{var{typed:e}=t;return e(gM,{"number, number":function(n,i){if(!ot(n)||n<0)throw new TypeError("Positive integer value expected in function combinationsWithRep");if(!ot(i)||i<0)throw new TypeError("Positive integer value expected in function combinationsWithRep");if(n<1)throw new TypeError("k must be less than or equal to n + k - 1");if(i{var{typed:e,config:r,multiplyScalar:n,pow:i,BigNumber:a,Complex:s}=t;function o(l){if(l.im===0)return Mv(l.re);if(l.re<.5){var c=new s(1-l.re,-l.im),f=new s(Math.PI*l.re,Math.PI*l.im);return new s(Math.PI).div(f.sin()).div(o(c))}l=new s(l.re-1,l.im);for(var h=new s(ic[0],0),p=1;p2;)h-=2,g+=h,p=p.times(g);return new a(p.toPrecision(a.precision))}}),xM="lgamma",jye=["Complex","typed"],Gye=G(xM,jye,t=>{var{Complex:e,typed:r}=t,n=7,i=7,a=[-.029550653594771242,.00641025641025641,-.0019175269175269176,.0008417508417508417,-.0005952380952380953,.0007936507936507937,-.002777777777777778,.08333333333333333];return r(xM,{number:Tv,Complex:s,BigNumber:function(){throw new Error("mathjs doesn't yet provide an implementation of the algorithm lgamma for BigNumber")}});function s(l){var c=6.283185307179586,f=1.1447298858494002,h=.1;if(l.isNaN())return new e(NaN,NaN);if(l.im===0)return new e(Tv(l.re),0);if(l.re>=n||Math.abs(l.im)>=i)return o(l);if(l.re<=h){var p=Lre(c,l.im)*Math.floor(.5*l.re+.25),g=l.mul(Math.PI).sin().log(),m=s(new e(1-l.re,-l.im));return new e(f,p).sub(g).sub(m)}else return l.im>=0?u(l):u(l.conjugate()).conjugate()}function o(l){for(var c=l.sub(.5).mul(l.log()).sub(l).add(xk),f=new e(1,0).div(l),h=f.div(l),p=a[0],g=a[1],m=2*h.re,b=h.re*h.re+h.im*h.im,y=2;y<8;y++){var S=g;g=-b*p+a[y],p=m*p+S}var x=f.mul(h.mul(p).add(g));return c.add(x)}function u(l){var c=0,f=0,h=l;for(l=l.add(1);l.re<=n;){h=h.mul(l);var p=h.im<0?1:0;p!==0&&f===0&&c++,f=p,l=l.add(1)}return o(l).sub(h.log()).sub(new e(0,c*2*Math.PI*1))}}),wM="factorial",Xye=["typed","gamma"],Zye=G(wM,Xye,t=>{var{typed:e,gamma:r}=t;return e(wM,{number:function(i){if(i<0)throw new Error("Value must be non-negative");return r(i+1)},BigNumber:function(i){if(i.isNegative())throw new Error("Value must be non-negative");return r(i.plus(1))},"Array | Matrix":e.referToSelf(n=>i=>Bt(i,n))})}),SM="kldivergence",Kye=["typed","matrix","divide","sum","multiply","map","dotDivide","log","isNumeric"],Jye=G(SM,Kye,t=>{var{typed:e,matrix:r,divide:n,sum:i,multiply:a,map:s,dotDivide:o,log:u,isNumeric:l}=t;return e(SM,{"Array, Array":function(h,p){return c(r(h),r(p))},"Matrix, Array":function(h,p){return c(h,r(p))},"Array, Matrix":function(h,p){return c(r(h),p)},"Matrix, Matrix":function(h,p){return c(h,p)}});function c(f,h){var p=h.size().length,g=f.size().length;if(p>1)throw new Error("first object must be one dimensional");if(g>1)throw new Error("second object must be one dimensional");if(p!==g)throw new Error("Length of two vectors must be equal");var m=i(f);if(m===0)throw new Error("Sum of elements in first object must be non zero");var b=i(h);if(b===0)throw new Error("Sum of elements in second object must be non zero");var y=n(f,i(f)),S=n(h,i(h)),x=i(a(y,s(o(y,S),_=>u(_))));return l(x)?x:Number.NaN}}),_M="multinomial",Qye=["typed","add","divide","multiply","factorial","isInteger","isPositive"],ebe=G(_M,Qye,t=>{var{typed:e,add:r,divide:n,multiply:i,factorial:a,isInteger:s,isPositive:o}=t;return e(_M,{"Array | Matrix":function(l){var c=0,f=1;return Gs(l,function(h){if(!s(h)||!o(h))throw new TypeError("Positive integer value expected in function multinomial");c=r(c,h),f=i(f,a(h))}),n(a(c),f)}})}),AM="permutations",tbe=["typed","factorial"],rbe=G(AM,tbe,t=>{var{typed:e,factorial:r}=t;return e(AM,{"number | BigNumber":r,"number, number":function(i,a){if(!ot(i)||i<0)throw new TypeError("Positive integer value expected in function permutations");if(!ot(a)||a<0)throw new TypeError("Positive integer value expected in function permutations");if(a>i)throw new TypeError("second argument k must be less than or equal to first argument n");return $s(i-a+1,i)},"BigNumber, BigNumber":function(i,a){var s,o;if(!DM(i)||!DM(a))throw new TypeError("Positive integer value expected in function permutations");if(a.gt(i))throw new TypeError("second argument k must be less than or equal to first argument n");var u=i.mul(0).add(1);for(s=u,o=i.minus(a).plus(1);o.lte(i);o=o.plus(1))s=s.times(o);return s}})});function DM(t){return t.isInteger()&&t.gte(0)}var yw={exports:{}};yw.exports;(function(t){(function(e,r,n){function i(u){var l=this,c=o();l.next=function(){var f=2091639*l.s0+l.c*23283064365386963e-26;return l.s0=l.s1,l.s1=l.s2,l.s2=f-(l.c=f|0)},l.c=1,l.s0=c(" "),l.s1=c(" "),l.s2=c(" "),l.s0-=c(u),l.s0<0&&(l.s0+=1),l.s1-=c(u),l.s1<0&&(l.s1+=1),l.s2-=c(u),l.s2<0&&(l.s2+=1),c=null}function a(u,l){return l.c=u.c,l.s0=u.s0,l.s1=u.s1,l.s2=u.s2,l}function s(u,l){var c=new i(u),f=l&&l.state,h=c.next;return h.int32=function(){return c.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,f&&(typeof f=="object"&&a(f,c),h.state=function(){return a(c,{})}),h}function o(){var u=4022871197,l=function(c){c=String(c);for(var f=0;f>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return l}r&&r.exports?r.exports=s:n&&n.amd?n(function(){return s}):this.alea=s})(ea,t,!1)})(yw);var nbe=yw.exports,bw={exports:{}};bw.exports;(function(t){(function(e,r,n){function i(o){var u=this,l="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var f=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^f^f>>>8},o===(o|0)?u.x=o:l+=o;for(var c=0;c>>0)/4294967296};return f.double=function(){do var h=l.next()>>>11,p=(l.next()>>>0)/4294967296,g=(h+p)/(1<<21);while(g===0);return g},f.int32=l.next,f.quick=f,c&&(typeof c=="object"&&a(c,l),f.state=function(){return a(l,{})}),f}r&&r.exports?r.exports=s:n&&n.amd?n(function(){return s}):this.xor128=s})(ea,t,!1)})(bw);var ibe=bw.exports,xw={exports:{}};xw.exports;(function(t){(function(e,r,n){function i(o){var u=this,l="";u.next=function(){var f=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(f^f<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,o===(o|0)?u.x=o:l+=o;for(var c=0;c>>4),u.next()}function a(o,u){return u.x=o.x,u.y=o.y,u.z=o.z,u.w=o.w,u.v=o.v,u.d=o.d,u}function s(o,u){var l=new i(o),c=u&&u.state,f=function(){return(l.next()>>>0)/4294967296};return f.double=function(){do var h=l.next()>>>11,p=(l.next()>>>0)/4294967296,g=(h+p)/(1<<21);while(g===0);return g},f.int32=l.next,f.quick=f,c&&(typeof c=="object"&&a(c,l),f.state=function(){return a(l,{})}),f}r&&r.exports?r.exports=s:n&&n.amd?n(function(){return s}):this.xorwow=s})(ea,t,!1)})(xw);var abe=xw.exports,ww={exports:{}};ww.exports;(function(t){(function(e,r,n){function i(o){var u=this;u.next=function(){var c=u.x,f=u.i,h,p;return h=c[f],h^=h>>>7,p=h^h<<24,h=c[f+1&7],p^=h^h>>>10,h=c[f+3&7],p^=h^h>>>3,h=c[f+4&7],p^=h^h<<7,h=c[f+7&7],h=h^h<<13,p^=h^h<<9,c[f]=p,u.i=f+1&7,p};function l(c,f){var h,p=[];if(f===(f|0))p[0]=f;else for(f=""+f,h=0;h0;--h)c.next()}l(u,o)}function a(o,u){return u.x=o.x.slice(),u.i=o.i,u}function s(o,u){o==null&&(o=+new Date);var l=new i(o),c=u&&u.state,f=function(){return(l.next()>>>0)/4294967296};return f.double=function(){do var h=l.next()>>>11,p=(l.next()>>>0)/4294967296,g=(h+p)/(1<<21);while(g===0);return g},f.int32=l.next,f.quick=f,c&&(c.x&&a(c,l),f.state=function(){return a(l,{})}),f}r&&r.exports?r.exports=s:n&&n.amd?n(function(){return s}):this.xorshift7=s})(ea,t,!1)})(ww);var sbe=ww.exports,Sw={exports:{}};Sw.exports;(function(t){(function(e,r,n){function i(o){var u=this;u.next=function(){var c=u.w,f=u.X,h=u.i,p,g;return u.w=c=c+1640531527|0,g=f[h+34&127],p=f[h=h+1&127],g^=g<<13,p^=p<<17,g^=g>>>15,p^=p>>>12,g=f[h]=g^p,u.i=h,g+(c^c>>>16)|0};function l(c,f){var h,p,g,m,b,y=[],S=128;for(f===(f|0)?(p=f,f=null):(f=f+"\0",p=0,S=Math.max(S,f.length)),g=0,m=-32;m>>15,p^=p<<4,p^=p>>>13,m>=0&&(b=b+1640531527|0,h=y[m&127]^=p+b,g=h==0?g+1:0);for(g>=128&&(y[(f&&f.length||0)&127]=-1),g=127,m=4*128;m>0;--m)p=y[g+34&127],h=y[g=g+1&127],p^=p<<13,h^=h<<17,p^=p>>>15,h^=h>>>12,y[g]=p^h;c.w=b,c.X=y,c.i=g}l(u,o)}function a(o,u){return u.i=o.i,u.w=o.w,u.X=o.X.slice(),u}function s(o,u){o==null&&(o=+new Date);var l=new i(o),c=u&&u.state,f=function(){return(l.next()>>>0)/4294967296};return f.double=function(){do var h=l.next()>>>11,p=(l.next()>>>0)/4294967296,g=(h+p)/(1<<21);while(g===0);return g},f.int32=l.next,f.quick=f,c&&(c.X&&a(c,l),f.state=function(){return a(l,{})}),f}r&&r.exports?r.exports=s:n&&n.amd?n(function(){return s}):this.xor4096=s})(ea,t,!1)})(Sw);var obe=Sw.exports,_w={exports:{}};_w.exports;(function(t){(function(e,r,n){function i(o){var u=this,l="";u.next=function(){var f=u.b,h=u.c,p=u.d,g=u.a;return f=f<<25^f>>>7^h,h=h-p|0,p=p<<24^p>>>8^g,g=g-f|0,u.b=f=f<<20^f>>>12^h,u.c=h=h-p|0,u.d=p<<16^h>>>16^g,u.a=g-f|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,o===Math.floor(o)?(u.a=o/4294967296|0,u.b=o|0):l+=o;for(var c=0;c>>0)/4294967296};return f.double=function(){do var h=l.next()>>>11,p=(l.next()>>>0)/4294967296,g=(h+p)/(1<<21);while(g===0);return g},f.int32=l.next,f.quick=f,c&&(typeof c=="object"&&a(c,l),f.state=function(){return a(l,{})}),f}r&&r.exports?r.exports=s:n&&n.amd?n(function(){return s}):this.tychei=s})(ea,t,!1)})(_w);var ube=_w.exports,gB={exports:{}};const lbe={},cbe=Object.freeze(Object.defineProperty({__proto__:null,default:lbe},Symbol.toStringTag,{value:"Module"})),fbe=R$(cbe);(function(t){(function(e,r,n){var i=256,a=6,s=52,o="random",u=n.pow(i,a),l=n.pow(2,s),c=l*2,f=i-1,h;function p(_,A,w){var C=[];A=A==!0?{entropy:!0}:A||{};var N=y(b(A.entropy?[_,x(r)]:_??S(),3),C),E=new g(C),M=function(){for(var O=E.g(a),F=u,q=0;O=c;)O/=2,F/=2,q>>>=1;return(O+q)/F};return M.int32=function(){return E.g(4)|0},M.quick=function(){return E.g(4)/4294967296},M.double=M,y(x(E.S),r),(A.pass||w||function(O,F,q,V){return V&&(V.S&&m(V,E),O.state=function(){return m(E,{})}),q?(n[o]=O,F):O})(M,N,"global"in A?A.global:this==n,A.state)}function g(_){var A,w=_.length,C=this,N=0,E=C.i=C.j=0,M=C.S=[];for(w||(_=[w++]);N{var{typed:e,config:r,on:n}=t,i=_c(r.randomSeed);return n&&n("config",function(s,o){s.randomSeed!==o.randomSeed&&(i=_c(s.randomSeed))}),e(EM,{"Array | Matrix":function(o){return a(o,{})},"Array | Matrix, Object":function(o,u){return a(o,u)},"Array | Matrix, number":function(o,u){return a(o,{number:u})},"Array | Matrix, Array | Matrix":function(o,u){return a(o,{weights:u})},"Array | Matrix, Array | Matrix, number":function(o,u,l){return a(o,{number:l,weights:u})},"Array | Matrix, number, Array | Matrix":function(o,u,l){return a(o,{number:u,weights:l})}});function a(s,o){var{number:u,weights:l,elementWise:c=!0}=o,f=typeof u>"u";f&&(u=1);var h=dt(s)?s.create:dt(l)?l.create:null;s=s.valueOf(),l&&(l=l.valueOf()),c===!0&&(s=tr(s),l=tr(l));var p=0;if(typeof l<"u"){if(l.length!==s.length)throw new Error("Weights must have the same length as possibles");for(var g=0,m=l.length;g"u")S=s[Math.floor(i()*b)];else for(var x=i()*p,_=0,A=s.length;_1)for(var n=0,i=t.shift();n{var{typed:e,config:r,on:n}=t,i=_c(r.randomSeed);return n&&n("config",function(o,u){o.randomSeed!==u.randomSeed&&(i=_c(o.randomSeed))}),e(NM,{"":()=>s(0,1),number:o=>s(0,o),"number, number":(o,u)=>s(o,u),"Array | Matrix":o=>a(o,0,1),"Array | Matrix, number":(o,u)=>a(o,0,u),"Array | Matrix, number, number":(o,u,l)=>a(o,u,l)});function a(o,u,l){var c=Aw(o.valueOf(),()=>s(u,l));return dt(o)?o.create(c):c}function s(o,u){return o+i()*(u-o)}}),CM="randomInt",Dbe=["typed","config","?on"],Ebe=G(CM,Dbe,t=>{var{typed:e,config:r,on:n}=t,i=_c(r.randomSeed);return n&&n("config",function(o,u){o.randomSeed!==u.randomSeed&&(i=_c(o.randomSeed))}),e(CM,{"":()=>s(0,1),number:o=>s(0,o),"number, number":(o,u)=>s(o,u),"Array | Matrix":o=>a(o,0,1),"Array | Matrix, number":(o,u)=>a(o,0,u),"Array | Matrix, number, number":(o,u,l)=>a(o,u,l)});function a(o,u,l){var c=Aw(o.valueOf(),()=>s(u,l));return dt(o)?o.create(c):c}function s(o,u){return Math.floor(o+i()*(u-o))}}),MM="stirlingS2",Nbe=["typed","addScalar","subtractScalar","multiplyScalar","divideScalar","pow","factorial","combinations","isNegative","isInteger","number","?bignumber","larger"],Cbe=G(MM,Nbe,t=>{var{typed:e,addScalar:r,subtractScalar:n,multiplyScalar:i,divideScalar:a,pow:s,factorial:o,combinations:u,isNegative:l,isInteger:c,number:f,bignumber:h,larger:p}=t,g=[],m=[];return e(MM,{"number | BigNumber, number | BigNumber":function(y,S){if(!c(y)||l(y)||!c(S)||l(S))throw new TypeError("Non-negative integer value expected in function stirlingS2");if(p(S,y))throw new TypeError("k must be less than or equal to n in function stirlingS2");var x=!(Ct(y)&&Ct(S)),_=x?m:g,A=x?h:f,w=f(y),C=f(S);if(_[w]&&_[w].length>C)return _[w][C];for(var N=0;N<=w;++N)if(_[N]||(_[N]=[A(N===0?1:0)]),N!==0)for(var E=_[N],M=_[N-1],O=E.length;O<=N&&O<=C;++O)O===N?E[O]=1:E[O]=r(i(A(O),M[O]),M[O-1]);return _[w][C]}})}),TM="bellNumbers",Mbe=["typed","addScalar","isNegative","isInteger","stirlingS2"],Tbe=G(TM,Mbe,t=>{var{typed:e,addScalar:r,isNegative:n,isInteger:i,stirlingS2:a}=t;return e(TM,{"number | BigNumber":function(o){if(!i(o)||n(o))throw new TypeError("Non-negative integer value expected in function bellNumbers");for(var u=0,l=0;l<=o;l++)u=r(u,a(o,l));return u}})}),OM="catalan",Obe=["typed","addScalar","divideScalar","multiplyScalar","combinations","isNegative","isInteger"],Fbe=G(OM,Obe,t=>{var{typed:e,addScalar:r,divideScalar:n,multiplyScalar:i,combinations:a,isNegative:s,isInteger:o}=t;return e(OM,{"number | BigNumber":function(l){if(!o(l)||s(l))throw new TypeError("Non-negative integer value expected in function catalan");return n(a(i(l,2),l),r(l,1))}})}),FM="composition",Rbe=["typed","addScalar","combinations","isNegative","isPositive","isInteger","larger"],Pbe=G(FM,Rbe,t=>{var{typed:e,addScalar:r,combinations:n,isPositive:i,isNegative:a,isInteger:s,larger:o}=t;return e(FM,{"number | BigNumber, number | BigNumber":function(l,c){if(!s(l)||!i(l)||!s(c)||!i(c))throw new TypeError("Positive integer value expected in function composition");if(o(c,l))throw new TypeError("k must be less than or equal to n in function composition");return n(r(l,-1),r(c,-1))}})}),RM="leafCount",kbe=["parse","typed"],Bbe=G(RM,kbe,t=>{var{parse:e,typed:r}=t;function n(i){var a=0;return i.forEach(s=>{a+=n(s)}),a||1}return r(RM,{Node:function(a){return n(a)}})});function PM(t){return er(t)||tn(t)&&t.isUnary()&&er(t.args[0])}function zv(t){return!!(er(t)||(Ho(t)||tn(t))&&t.args.every(zv)||js(t)&&zv(t.content))}function kM(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),r.push.apply(r,n)}return r}function tb(t){for(var e=1;e{var{FunctionNode:e,OperatorNode:r,SymbolNode:n}=t,i=!0,a=!1,s="defaultF",o={add:{trivial:i,total:i,commutative:i,associative:i},unaryPlus:{trivial:i,total:i,commutative:i,associative:i},subtract:{trivial:a,total:i,commutative:a,associative:a},multiply:{trivial:i,total:i,commutative:i,associative:i},divide:{trivial:a,total:i,commutative:a,associative:a},paren:{trivial:i,total:i,commutative:i,associative:a},defaultF:{trivial:a,total:i,commutative:a,associative:a}},u={divide:{total:a},log:{total:a}},l={subtract:{total:a},abs:{trivial:i},log:{total:i}};function c(x,_){var A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:o,w=s;if(typeof x=="string"?w=x:tn(x)?w=x.fn.toString():Ho(x)?w=x.name:js(x)&&(w="paren"),nt(A,w)){var C=A[w];if(nt(C,_))return C[_];if(nt(o,w))return o[w][_]}if(nt(A,s)){var N=A[s];return nt(N,_)?N[_]:o[s][_]}if(nt(o,w)){var E=o[w];if(nt(E,_))return E[_]}return o[s][_]}function f(x){var _=arguments.length>1&&arguments[1]!==void 0?arguments[1]:o;return c(x,"commutative",_)}function h(x){var _=arguments.length>1&&arguments[1]!==void 0?arguments[1]:o;return c(x,"associative",_)}function p(x,_){var A=tb({},x);for(var w in _)nt(x,w)?A[w]=tb(tb({},_[w]),x[w]):A[w]=_[w];return A}function g(x,_){if(!x.args||x.args.length===0)return x;x.args=m(x,_);for(var A=0;A2&&h(x,_)){for(var N=x.args.pop();x.args.length>0;)N=A([x.args.pop(),N]);x.args=N.args}}}function y(x,_){if(!(!x.args||x.args.length===0)){for(var A=S(x),w=x.args.length,C=0;C2&&h(x,_)){for(var N=x.args.shift();x.args.length>0;)N=A([N,x.args.shift()]);x.args=N.args}}}function S(x){return tn(x)?function(_){try{return new r(x.op,x.fn,_,x.implicit)}catch(A){return console.error(A),[]}}:function(_){return new e(new n(x.name),_)}}return{createMakeNodeFunction:S,hasProperty:c,isCommutative:f,isAssociative:h,mergeContext:p,flatten:g,allChildren:m,unflattenr:b,unflattenl:y,defaultContext:o,realContext:u,positiveContext:l}}),$be="simplify",zbe=["config","typed","parse","add","subtract","multiply","divide","pow","isZero","equal","resolve","simplifyConstant","simplifyCore","?fraction","?bignumber","mathWithTransform","matrix","AccessorNode","ArrayNode","ConstantNode","FunctionNode","IndexNode","ObjectNode","OperatorNode","ParenthesisNode","SymbolNode"],qbe=G($be,zbe,t=>{var{config:e,typed:r,parse:n,add:i,subtract:a,multiply:s,divide:o,pow:u,isZero:l,equal:c,resolve:f,simplifyConstant:h,simplifyCore:p,fraction:g,bignumber:m,mathWithTransform:b,matrix:y,AccessorNode:S,ArrayNode:x,ConstantNode:_,FunctionNode:A,IndexNode:w,ObjectNode:C,OperatorNode:N,ParenthesisNode:E,SymbolNode:M}=t,{hasProperty:O,isCommutative:F,isAssociative:q,mergeContext:V,flatten:H,unflattenr:B,unflattenl:k,createMakeNodeFunction:K,defaultContext:$,realContext:se,positiveContext:he}=Dw({FunctionNode:A,OperatorNode:N,SymbolNode:M});r.addConversion({from:"Object",to:"Map",convert:nc});var ne=r("simplify",{Node:me,"Node, Map":(ee,ue)=>me(ee,!1,ue),"Node, Map, Object":(ee,ue,le)=>me(ee,!1,ue,le),"Node, Array":me,"Node, Array, Map":me,"Node, Array, Map, Object":me});r.removeConversion({from:"Object",to:"Map",convert:nc}),ne.defaultContext=$,ne.realContext=se,ne.positiveContext=he;function X(ee){return ee.transform(function(ue,le,Ne){return js(ue)?X(ue.content):ue})}var de={true:!0,false:!0,e:!0,i:!0,Infinity:!0,LN2:!0,LN10:!0,LOG2E:!0,LOG10E:!0,NaN:!0,phi:!0,pi:!0,SQRT1_2:!0,SQRT2:!0,tau:!0};ne.rules=[p,{l:"log(e)",r:"1"},{s:"n-n1 -> n+-n1",assuming:{subtract:{total:!0}}},{s:"n-n -> 0",assuming:{subtract:{total:!1}}},{s:"-(cl*v) -> v * (-cl)",assuming:{multiply:{commutative:!0},subtract:{total:!0}}},{s:"-(cl*v) -> (-cl) * v",assuming:{multiply:{commutative:!1},subtract:{total:!0}}},{s:"-(v*cl) -> v * (-cl)",assuming:{multiply:{commutative:!1},subtract:{total:!0}}},{l:"-(n1/n2)",r:"-n1/n2"},{l:"-v",r:"v * (-1)"},{l:"(n1 + n2)*(-1)",r:"n1*(-1) + n2*(-1)",repeat:!0},{l:"n/n1^n2",r:"n*n1^-n2"},{l:"n/n1",r:"n*n1^-1"},{s:"(n1*n2)^n3 -> n1^n3 * n2^n3",assuming:{multiply:{commutative:!0}}},{s:"(n1*n2)^(-1) -> n2^(-1) * n1^(-1)",assuming:{multiply:{commutative:!1}}},{s:"(n ^ n1) ^ n2 -> n ^ (n1 * n2)",assuming:{divide:{total:!0}}},{l:" vd * ( vd * n1 + n2)",r:"vd^2 * n1 + vd * n2"},{s:" vd * (vd^n4 * n1 + n2) -> vd^(1+n4) * n1 + vd * n2",assuming:{divide:{total:!0}}},{s:"vd^n3 * ( vd * n1 + n2) -> vd^(n3+1) * n1 + vd^n3 * n2",assuming:{divide:{total:!0}}},{s:"vd^n3 * (vd^n4 * n1 + n2) -> vd^(n3+n4) * n1 + vd^n3 * n2",assuming:{divide:{total:!0}}},{l:"n*n",r:"n^2"},{s:"n * n^n1 -> n^(n1+1)",assuming:{divide:{total:!0}}},{s:"n^n1 * n^n2 -> n^(n1+n2)",assuming:{divide:{total:!0}}},h,{s:"n+n -> 2*n",assuming:{add:{total:!0}}},{l:"n+-n",r:"0"},{l:"vd*n + vd",r:"vd*(n+1)"},{l:"n3*n1 + n3*n2",r:"n3*(n1+n2)"},{l:"n3^(-n4)*n1 + n3 * n2",r:"n3^(-n4)*(n1 + n3^(n4+1) *n2)"},{l:"n3^(-n4)*n1 + n3^n5 * n2",r:"n3^(-n4)*(n1 + n3^(n4+n5)*n2)"},{s:"n*vd + vd -> (n+1)*vd",assuming:{multiply:{commutative:!1}}},{s:"vd + n*vd -> (1+n)*vd",assuming:{multiply:{commutative:!1}}},{s:"n1*n3 + n2*n3 -> (n1+n2)*n3",assuming:{multiply:{commutative:!1}}},{s:"n^n1 * n -> n^(n1+1)",assuming:{divide:{total:!0},multiply:{commutative:!1}}},{s:"n1*n3^(-n4) + n2 * n3 -> (n1 + n2*n3^(n4 + 1))*n3^(-n4)",assuming:{multiply:{commutative:!1}}},{s:"n1*n3^(-n4) + n2 * n3^n5 -> (n1 + n2*n3^(n4 + n5))*n3^(-n4)",assuming:{multiply:{commutative:!1}}},{l:"n*cd + cd",r:"(n+1)*cd"},{s:"cd*n + cd -> cd*(n+1)",assuming:{multiply:{commutative:!1}}},{s:"cd + cd*n -> cd*(1+n)",assuming:{multiply:{commutative:!1}}},h,{s:"(-n)*n1 -> -(n*n1)",assuming:{subtract:{total:!0}}},{s:"n1*(-n) -> -(n1*n)",assuming:{subtract:{total:!0},multiply:{commutative:!1}}},{s:"ce+ve -> ve+ce",assuming:{add:{commutative:!0}},imposeContext:{add:{commutative:!1}}},{s:"vd*cd -> cd*vd",assuming:{multiply:{commutative:!0}},imposeContext:{multiply:{commutative:!1}}},{l:"n+-n1",r:"n-n1"},{l:"n+-(n1)",r:"n-(n1)"},{s:"n*(n1^-1) -> n/n1",assuming:{multiply:{commutative:!0}}},{s:"n*n1^-n2 -> n/n1^n2",assuming:{multiply:{commutative:!0}}},{s:"n^-1 -> 1/n",assuming:{multiply:{commutative:!0}}},{l:"n^1",r:"n"},{s:"n*(n1/n2) -> (n*n1)/n2",assuming:{multiply:{associative:!0}}},{s:"n-(n1+n2) -> n-n1-n2",assuming:{addition:{associative:!0,commutative:!0}}},{l:"1*n",r:"n",imposeContext:{multiply:{commutative:!0}}},{s:"n1/(n2/n3) -> (n1*n3)/n2",assuming:{multiply:{associative:!0}}},{l:"n1/(-n2)",r:"-n1/n2"}];function Se(ee,ue){var le={};if(ee.s){var Ne=ee.s.split("->");if(Ne.length===2)le.l=Ne[0],le.r=Ne[1];else throw SyntaxError("Could not parse rule: "+ee.s)}else le.l=ee.l,le.r=ee.r;le.l=X(n(le.l)),le.r=X(n(le.r));for(var Me of["imposeContext","repeat","assuming"])Me in ee&&(le[Me]=ee[Me]);if(ee.evaluate&&(le.evaluate=n(ee.evaluate)),q(le.l,ue)){var R=!F(le.l,ue),U;R&&(U=_e());var Y=K(le.l),pe=_e();le.expanded={},le.expanded.l=Y([le.l,pe]),H(le.expanded.l,ue),B(le.expanded.l,ue),le.expanded.r=Y([le.r,pe]),R&&(le.expandedNC1={},le.expandedNC1.l=Y([U,le.l]),le.expandedNC1.r=Y([U,le.r]),le.expandedNC2={},le.expandedNC2.l=Y([U,le.expanded.l]),le.expandedNC2.r=Y([U,le.expanded.r]))}return le}function ce(ee,ue){for(var le=[],Ne=0;Ne2&&arguments[2]!==void 0?arguments[2]:Hh(),Ne=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},Me=Ne.consoleDebug;ue=ce(ue||ne.rules,Ne.context);var R=f(ee,le);R=X(R);for(var U={},Y=R.toString({parenthesis:"all"});!U[Y];){U[Y]=!0,xe=0;var pe=Y;Me&&console.log("Working on: ",Y);for(var ge=0;ge ").concat(ue[ge].r.toString()))),Me){var Pe=R.toString({parenthesis:"all"});Pe!==pe&&(console.log("Applying",De,"produced",Pe),pe=Pe)}k(R,Ne.context)}Y=R.toString({parenthesis:"all"})}return R}function we(ee,ue,le){var Ne=ee;if(ee)for(var Me=0;Me1&&(pe=R(ee.args.slice(0,Y))),Me=ee.args.slice(Y),Ne=Me.length===1?Me[0]:R(Me),le.push(R([pe,Ne]))}return le}function He(ee,ue){var le={placeholders:{}};if(!ee.placeholders&&!ue.placeholders)return le;if(ee.placeholders){if(!ue.placeholders)return ee}else return ue;for(var Ne in ee.placeholders)if(nt(ee.placeholders,Ne)&&(le.placeholders[Ne]=ee.placeholders[Ne],nt(ue.placeholders,Ne)&&!ye(ee.placeholders[Ne],ue.placeholders[Ne])))return null;for(var Me in ue.placeholders)nt(ue.placeholders,Me)&&(le.placeholders[Me]=ue.placeholders[Me]);return le}function Ue(ee,ue){var le=[];if(ee.length===0||ue.length===0)return le;for(var Ne,Me=0;Me2)throw new Error("permuting >2 commutative non-associative rule arguments not yet implemented");var pe=te(ee.args[0],ue.args[1],le);if(pe.length===0)return[];var ge=te(ee.args[1],ue.args[0],le);if(ge.length===0)return[];R=[pe,ge]}Me=J(R)}else if(ue.args.length>=2&&ee.args.length===2){for(var De=Ce(ue,le),Pe=[],ke=0;ke2)throw Error("Unexpected non-binary associative function: "+ee.toString());return[]}}else if(ee instanceof M){if(ee.name.length===0)throw new Error("Symbol in rule has 0 length...!?");if(de[ee.name]){if(ee.name!==ue.name)return[]}else switch(ee.name[1]>="a"&&ee.name[1]<="z"?ee.name.substring(0,2):ee.name[0]){case"n":case"_p":Me[0].placeholders[ee.name]=ue;break;case"c":case"cl":if(er(ue))Me[0].placeholders[ee.name]=ue;else return[];break;case"v":if(!er(ue))Me[0].placeholders[ee.name]=ue;else return[];break;case"vl":if(Sn(ue))Me[0].placeholders[ee.name]=ue;else return[];break;case"cd":if(PM(ue))Me[0].placeholders[ee.name]=ue;else return[];break;case"vd":if(!PM(ue))Me[0].placeholders[ee.name]=ue;else return[];break;case"ce":if(zv(ue))Me[0].placeholders[ee.name]=ue;else return[];break;case"ve":if(!zv(ue))Me[0].placeholders[ee.name]=ue;else return[];break;default:throw new Error("Invalid symbol in rule: "+ee.name)}}else if(ee instanceof _){if(!c(ee.value,ue.value))return[]}else return[];return Me}function ye(ee,ue){if(ee instanceof _&&ue instanceof _){if(!c(ee.value,ue.value))return!1}else if(ee instanceof M&&ue instanceof M){if(ee.name!==ue.name)return!1}else if(ee instanceof N&&ue instanceof N||ee instanceof A&&ue instanceof A){if(ee instanceof N){if(ee.op!==ue.op||ee.fn!==ue.fn)return!1}else if(ee instanceof A&&ee.name!==ue.name)return!1;if(ee.args.length!==ue.args.length)return!1;for(var le=0;le{var{typed:e,config:r,mathWithTransform:n,matrix:i,fraction:a,bignumber:s,AccessorNode:o,ArrayNode:u,ConstantNode:l,FunctionNode:c,IndexNode:f,ObjectNode:h,OperatorNode:p,SymbolNode:g}=t,{isCommutative:m,isAssociative:b,allChildren:y,createMakeNodeFunction:S}=Dw({FunctionNode:c,OperatorNode:p,SymbolNode:g}),x=e("simplifyConstant",{Node:H=>C(V(H,{})),"Node, Object":function(B,k){return C(V(B,k))}});function _(H){return hd(H)?H.valueOf():H instanceof Array?H.map(_):dt(H)?i(_(H.valueOf())):H}function A(H,B,k){try{return n[H].apply(null,B)}catch{return B=B.map(_),E(n[H].apply(null,B),k)}}var w=e({Fraction:O,number:function(B){return B<0?M(new l(-B)):new l(B)},BigNumber:function(B){return B<0?M(new l(-B)):new l(B)},Complex:function(B){throw new Error("Cannot convert Complex number to Node")},string:function(B){return new l(B)},Matrix:function(B){return new u(B.valueOf().map(k=>w(k)))}});function C(H){return pr(H)?H:w(H)}function N(H,B){var k=B&&B.exactFractions!==!1;if(k&&isFinite(H)&&a){var K=a(H),$=B&&typeof B.fractionsLimit=="number"?B.fractionsLimit:1/0;if(K.valueOf()===H&&K.n<$&&K.d<$)return K}return H}var E=e({"string, Object":function(B,k){if(r.number==="BigNumber")return s===void 0&&pw(),s(B);if(r.number==="Fraction")return a===void 0&&Zk(),a(B);var K=parseFloat(B);return N(K,k)},"Fraction, Object":function(B,k){return B},"BigNumber, Object":function(B,k){return B},"number, Object":function(B,k){return N(B,k)},"Complex, Object":function(B,k){return B.im!==0?B:N(B.re,k)},"Matrix, Object":function(B,k){return i(N(B.valueOf()))},"Array, Object":function(B,k){return B.map(N)}});function M(H){return new p("-","unaryMinus",[H])}function O(H){var B,k=H.s*H.n;return k<0?B=new p("-","unaryMinus",[new l(-k)]):B=new l(k),H.d===1?B:new p("/","divide",[B,new l(H.d)])}function F(H,B,k){if(!Oc(B))return new o(C(H),C(B));if(Ki(H)||dt(H)){for(var K=Array.from(B.dimensions);K.length>0;)if(er(K[0])&&typeof K[0].value!="string"){var $=E(K.shift().value,k);Ki(H)?H=H.items[$-1]:(H=H.valueOf()[$-1],H instanceof Array&&(H=i(H)))}else if(K.length>1&&er(K[1])&&typeof K[1].value!="string"){var se=E(K[1].value,k),he=[],ne=Ki(H)?H.items:H.valueOf();for(var X of ne)if(Ki(X))he.push(X.items[se-1]);else if(dt(H))he.push(X[se-1]);else break;if(he.length===ne.length)Ki(H)?H=new u(he):H=i(he),K.splice(1,1);else break}else break;return K.length===B.dimensions.length?new o(C(H),B):K.length>0?(B=new f(K),new o(C(H),B)):H}if(Rg(H)&&B.dimensions.length===1&&er(B.dimensions[0])){var de=B.dimensions[0].value;return de in H.properties?H.properties[de]:new l}return new o(C(H),B)}function q(H,B,k,K){var $=B.shift(),se=B.reduce((he,ne)=>{if(!pr(ne)){var X=he.pop();if(pr(X))return[X,ne];try{return he.push(A(H,[X,ne],K)),he}catch{he.push(X)}}he.push(C(he.pop()));var de=he.length===1?he[0]:k(he);return[k([de,C(ne)])]},[$]);return se.length===1?se[0]:k([se[0],w(se[1])])}function V(H,B){switch(H.type){case"SymbolNode":return H;case"ConstantNode":switch(typeof H.value){case"number":return E(H.value,B);case"string":return H.value;default:if(!isNaN(H.value))return E(H.value,B)}return H;case"FunctionNode":if(n[H.name]&&n[H.name].rawArgs)return H;{var k=["add","multiply"];if(k.indexOf(H.name)===-1){var K=H.args.map(Ee=>V(Ee,B));if(!K.some(pr))try{return A(H.name,K,B)}catch{}if(H.name==="size"&&K.length===1&&Ki(K[0])){for(var $=[],se=K[0];Ki(se);)$.push(se.items.length),se=se.items[0];return i($)}return new c(H.name,K.map(C))}}case"OperatorNode":{var he=H.fn.toString(),ne,X,de=S(H);if(tn(H)&&H.isUnary())ne=[V(H.args[0],B)],pr(ne[0])?X=de(ne):X=A(he,ne,B);else if(b(H,B.context))if(ne=y(H,B.context),ne=ne.map(Ee=>V(Ee,B)),m(he,B.context)){for(var Se=[],ce=[],xe=0;xe1?(X=q(he,Se,de,B),ce.unshift(X),X=q(he,ce,de,B)):X=q(he,ne,de,B)}else X=q(he,ne,de,B);else ne=H.args.map(Ee=>V(Ee,B)),X=q(he,ne,de,B);return X}case"ParenthesisNode":return V(H.content,B);case"AccessorNode":return F(V(H.object,B),V(H.index,B),B);case"ArrayNode":{var _e=H.items.map(Ee=>V(Ee,B));return _e.some(pr)?new u(_e.map(C)):i(_e)}case"IndexNode":return new f(H.dimensions.map(Ee=>x(Ee,B)));case"ObjectNode":{var me={};for(var we in H.properties)me[we]=x(H.properties[we],B);return new h(me)}case"AssignmentNode":case"BlockNode":case"FunctionAssignmentNode":case"RangeNode":case"ConditionalNode":default:throw new Error("Unimplemented node type in simplifyConstant: ".concat(H.type))}}return x}),BM="simplifyCore",Vbe=["typed","parse","equal","isZero","add","subtract","multiply","divide","pow","AccessorNode","ArrayNode","ConstantNode","FunctionNode","IndexNode","ObjectNode","OperatorNode","ParenthesisNode","SymbolNode"],Ybe=G(BM,Vbe,t=>{var{typed:e,parse:r,equal:n,isZero:i,add:a,subtract:s,multiply:o,divide:u,pow:l,AccessorNode:c,ArrayNode:f,ConstantNode:h,FunctionNode:p,IndexNode:g,ObjectNode:m,OperatorNode:b,ParenthesisNode:y,SymbolNode:S}=t,x=new h(0),_=new h(1),A=new h(!0),w=new h(!1);function C(O){return tn(O)&&["and","not","or"].includes(O.op)}var{hasProperty:N,isCommutative:E}=Dw({FunctionNode:p,OperatorNode:b,SymbolNode:S});function M(O){var F=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},q=F?F.context:void 0;if(N(O,"trivial",q)){if(Ho(O)&&O.args.length===1)return M(O.args[0],F);var V=!1,H=0;if(O.forEach(ce=>{++H,H===1&&(V=M(ce,F))}),H===1)return V}var B=O;if(Ho(B)){var k=Xhe(B.name);if(k){if(B.args.length>2&&N(B,"associative",q))for(;B.args.length>2;){var K=B.args.pop(),$=B.args.pop();B.args.push(new b(k,B.name,[K,$]))}B=new b(k,B.name,B.args)}else return new p(M(B.fn),B.args.map(ce=>M(ce,F)))}if(tn(B)&&B.isUnary()){var se=M(B.args[0],F);if(B.op==="~"&&tn(se)&&se.isUnary()&&se.op==="~"||B.op==="not"&&tn(se)&&se.isUnary()&&se.op==="not"&&C(se.args[0]))return se.args[0];var he=!0;if(B.op==="-"&&tn(se)&&(se.isBinary()&&se.fn==="subtract"&&(B=new b("-","subtract",[se.args[1],se.args[0]]),he=!1),se.isUnary()&&se.op==="-"))return se.args[0];if(he)return new b(B.op,B.fn,[se])}if(tn(B)&&B.isBinary()){var ne=M(B.args[0],F),X=M(B.args[1],F);if(B.op==="+"){if(er(ne)&&i(ne.value))return X;if(er(X)&&i(X.value))return ne;tn(X)&&X.isUnary()&&X.op==="-"&&(X=X.args[0],B=new b("-","subtract",[ne,X]))}if(B.op==="-")return tn(X)&&X.isUnary()&&X.op==="-"?M(new b("+","add",[ne,X.args[0]]),F):er(ne)&&i(ne.value)?M(new b("-","unaryMinus",[X])):er(X)&&i(X.value)?ne:new b(B.op,B.fn,[ne,X]);if(B.op==="*"){if(er(ne)){if(i(ne.value))return x;if(n(ne.value,1))return X}if(er(X)){if(i(X.value))return x;if(n(X.value,1))return ne;if(E(B,q))return new b(B.op,B.fn,[X,ne],B.implicit)}return new b(B.op,B.fn,[ne,X],B.implicit)}if(B.op==="/")return er(ne)&&i(ne.value)?x:er(X)&&n(X.value,1)?ne:new b(B.op,B.fn,[ne,X]);if(B.op==="^"&&er(X)){if(i(X.value))return _;if(n(X.value,1))return ne}if(B.op==="and"){if(er(ne))if(ne.value){if(C(X))return X}else return w;if(er(X))if(X.value){if(C(ne))return ne}else return w}if(B.op==="or"){if(er(ne)){if(ne.value)return A;if(C(X))return X}if(er(X)){if(X.value)return A;if(C(ne))return ne}}return new b(B.op,B.fn,[ne,X])}if(tn(B))return new b(B.op,B.fn,B.args.map(ce=>M(ce,F)));if(Ki(B))return new f(B.items.map(ce=>M(ce,F)));if(Hu(B))return new c(M(B.object,F),M(B.index,F));if(Oc(B))return new g(B.dimensions.map(ce=>M(ce,F)));if(Rg(B)){var de={};for(var Se in B.properties)de[Se]=M(B.properties[Se],F);return new m(de)}return B}return e(BM,{Node:M,"Node,Object":M})}),jbe="resolve",Gbe=["typed","parse","ConstantNode","FunctionNode","OperatorNode","ParenthesisNode"],Xbe=G(jbe,Gbe,t=>{var{typed:e,parse:r,ConstantNode:n,FunctionNode:i,OperatorNode:a,ParenthesisNode:s}=t;function o(u,l){var c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:new Set;if(!l)return u;if(Sn(u)){if(c.has(u.name)){var f=Array.from(c).join(", ");throw new ReferenceError("recursive loop of variable definitions among {".concat(f,"}"))}var h=l.get(u.name);if(pr(h)){var p=new Set(c);return p.add(u.name),o(h,l,p)}else return typeof h=="number"?r(String(h)):h!==void 0?new n(h):u}else if(tn(u)){var g=u.args.map(function(b){return o(b,l,c)});return new a(u.op,u.fn,g,u.implicit)}else{if(js(u))return new s(o(u.content,l,c));if(Ho(u)){var m=u.args.map(function(b){return o(b,l,c)});return new i(u.name,m)}}return u.map(b=>o(b,l,c))}return e("resolve",{Node:o,"Node, Map | null | undefined":o,"Node, Object":(u,l)=>o(u,nc(l)),"Array | Matrix":e.referToSelf(u=>l=>l.map(c=>u(c))),"Array | Matrix, null | undefined":e.referToSelf(u=>l=>l.map(c=>u(c))),"Array, Object":e.referTo("Array,Map",u=>(l,c)=>u(l,nc(c))),"Matrix, Object":e.referTo("Matrix,Map",u=>(l,c)=>u(l,nc(c))),"Array | Matrix, Map":e.referToSelf(u=>(l,c)=>l.map(f=>u(f,c)))})}),IM="symbolicEqual",Zbe=["parse","simplify","typed","OperatorNode"],Kbe=G(IM,Zbe,t=>{var{parse:e,simplify:r,typed:n,OperatorNode:i}=t;function a(s,o){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},l=new i("-","subtract",[s,o]),c=r(l,{},u);return er(c)&&!c.value}return n(IM,{"Node, Node":a,"Node, Node, Object":a})}),LM="derivative",Jbe=["typed","config","parse","simplify","equal","isZero","numeric","ConstantNode","FunctionNode","OperatorNode","ParenthesisNode","SymbolNode"],Qbe=G(LM,Jbe,t=>{var{typed:e,config:r,parse:n,simplify:i,equal:a,isZero:s,numeric:o,ConstantNode:u,FunctionNode:l,OperatorNode:c,ParenthesisNode:f,SymbolNode:h}=t;function p(x,_){var A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{simplify:!0},w={};b(w,x,_.name);var C=y(x,w);return A.simplify?i(C):C}e.addConversion({from:"identifier",to:"SymbolNode",convert:n});var g=e(LM,{"Node, SymbolNode":p,"Node, SymbolNode, Object":p});e.removeConversion({from:"identifier",to:"SymbolNode",convert:n}),g._simplify=!0,g.toTex=function(x){return m.apply(null,x.args)};var m=e("_derivTex",{"Node, SymbolNode":function(_,A){return er(_)&&xr(_.value)==="string"?m(n(_.value).toString(),A.toString(),1):m(_.toTex(),A.toString(),1)},"Node, ConstantNode":function(_,A){if(xr(A.value)==="string")return m(_,n(A.value));throw new Error("The second parameter to 'derivative' is a non-string constant")},"Node, SymbolNode, ConstantNode":function(_,A,w){return m(_.toString(),A.name,w.value)},"string, string, number":function(_,A,w){var C;return w===1?C="{d\\over d"+A+"}":C="{d^{"+w+"}\\over d"+A+"^{"+w+"}}",C+"\\left[".concat(_,"\\right]")}}),b=e("constTag",{"Object, ConstantNode, string":function(_,A){return _[A]=!0,!0},"Object, SymbolNode, string":function(_,A,w){return A.name!==w?(_[A]=!0,!0):!1},"Object, ParenthesisNode, string":function(_,A,w){return b(_,A.content,w)},"Object, FunctionAssignmentNode, string":function(_,A,w){return A.params.indexOf(w)===-1?(_[A]=!0,!0):b(_,A.expr,w)},"Object, FunctionNode | OperatorNode, string":function(_,A,w){if(A.args.length>0){for(var C=b(_,A.args[0],w),N=1;N0){var C=_.args.filter(function(H){return A[H]===void 0}),N=C.length===1?C[0]:new c("*","multiply",C),E=w.concat(y(N,A));return new c("*","multiply",E)}return new c("+","add",_.args.map(function(H){return new c("*","multiply",_.args.map(function(B){return B===H?y(B,A):B.clone()}))}))}if(_.op==="/"&&_.isBinary()){var M=_.args[0],O=_.args[1];return A[O]!==void 0?new c("/","divide",[y(M,A),O]):A[M]!==void 0?new c("*","multiply",[new c("-","unaryMinus",[M]),new c("/","divide",[y(O,A),new c("^","pow",[O.clone(),S(2)])])]):new c("/","divide",[new c("-","subtract",[new c("*","multiply",[y(M,A),O.clone()]),new c("*","multiply",[M.clone(),y(O,A)])]),new c("^","pow",[O.clone(),S(2)])])}if(_.op==="^"&&_.isBinary()){var F=_.args[0],q=_.args[1];if(A[F]!==void 0)return er(F)&&(s(F.value)||a(F.value,1))?S(0):new c("*","multiply",[_,new c("*","multiply",[new l("log",[F.clone()]),y(q.clone(),A)])]);if(A[q]!==void 0){if(er(q)){if(s(q.value))return S(0);if(a(q.value,1))return y(F,A)}var V=new c("^","pow",[F.clone(),new c("-","subtract",[q,S(1)])]);return new c("*","multiply",[q.clone(),new c("*","multiply",[y(F,A),V])])}return new c("*","multiply",[new c("^","pow",[F.clone(),q.clone()]),new c("+","add",[new c("*","multiply",[y(F,A),new c("/","divide",[q.clone(),F.clone()])]),new c("*","multiply",[y(q,A),new l("log",[F.clone()])])])])}throw new Error('Cannot process operator "'+_.op+'" in derivative: the operator is not supported, undefined, or the number of arguments passed to it are not supported')}});function S(x,_){return new u(o(x,_||r.number))}return g}),$M="rationalize",e1e=["config","typed","equal","isZero","add","subtract","multiply","divide","pow","parse","simplifyConstant","simplifyCore","simplify","?bignumber","?fraction","mathWithTransform","matrix","AccessorNode","ArrayNode","ConstantNode","FunctionNode","IndexNode","ObjectNode","OperatorNode","SymbolNode","ParenthesisNode"],t1e=G($M,e1e,t=>{var{config:e,typed:r,equal:n,isZero:i,add:a,subtract:s,multiply:o,divide:u,pow:l,parse:c,simplifyConstant:f,simplifyCore:h,simplify:p,fraction:g,bignumber:m,mathWithTransform:b,matrix:y,AccessorNode:S,ArrayNode:x,ConstantNode:_,FunctionNode:A,IndexNode:w,ObjectNode:C,OperatorNode:N,SymbolNode:E,ParenthesisNode:M}=t;function O(B){var k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},K=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,$=q(),se=F(B,k,!0,$.firstRules),he=se.variables.length,ne={exactFractions:!1},X={exactFractions:!0};if(B=se.expression,he>=1){B=V(B);var de,Se,ce=!0,xe=!1;B=p(B,$.firstRules,{},ne);for(var _e;Se=ce?$.distrDivRules:$.sucDivRules,B=p(B,Se,{},X),ce=!ce,_e=B.toString(),_e!==de;)xe=!0,de=_e;xe&&(B=p(B,$.firstRulesAgain,{},ne)),B=p(B,$.finalRules,{},ne)}var me=[],we={};return B.type==="OperatorNode"&&B.isBinary()&&B.op==="/"?(he===1&&(B.args[0]=H(B.args[0],me),B.args[1]=H(B.args[1])),K&&(we.numerator=B.args[0],we.denominator=B.args[1])):(he===1&&(B=H(B,me)),K&&(we.numerator=B,we.denominator=null)),K?(we.coefficients=me,we.variables=se.variables,we.expression=B,we):B}return r($M,{Node:O,"Node, boolean":(B,k)=>O(B,{},k),"Node, Object":O,"Node, Object, boolean":O});function F(B,k,K,$){var se=[],he=p(B,$,k,{exactFractions:!1});K=!!K;var ne="+-*"+(K?"/":"");de(he);var X={};return X.expression=he,X.variables=se,X;function de(Se){var ce=Se.type;if(ce==="FunctionNode")throw new Error("There is an unsolved function call");if(ce==="OperatorNode")if(Se.op==="^"){if(Se.args[1].type!=="ConstantNode"||!ot(parseFloat(Se.args[1].value)))throw new Error("There is a non-integer exponent");de(Se.args[0])}else{if(ne.indexOf(Se.op)===-1)throw new Error("Operator "+Se.op+" invalid in polynomial expression");for(var xe=0;xe1;if($==="OperatorNode"&&B.isBinary()){var he=!1,ne;if(B.op==="^"&&(B.args[0].type==="ParenthesisNode"||B.args[0].type==="OperatorNode")&&B.args[1].type==="ConstantNode"&&(ne=parseFloat(B.args[1].value),he=ne>=2&&ot(ne)),he){if(ne>2){var X=B.args[0],de=new N("^","pow",[B.args[0].cloneDeep(),new _(ne-1)]);B=new N("*","multiply",[X,de])}else B=new N("*","multiply",[B.args[0],B.args[0].cloneDeep()]);se&&(K==="content"?k.content=B:k.args[K]=B)}}if($==="ParenthesisNode")V(B.content,B,"content");else if($!=="ConstantNode"&&$!=="SymbolNode")for(var Se=0;Se=0;X--)if(k[X]!==0){var de=new _(he?k[X]:Math.abs(k[X])),Se=k[X]<0?"-":"+";if(X>0){var ce=new E(se);if(X>1){var xe=new _(X);ce=new N("^","pow",[ce,xe])}k[X]===-1&&he?de=new N("-","unaryMinus",[ce]):Math.abs(k[X])===1?de=ce:de=new N("*","multiply",[de,ce])}he?ne=de:Se==="+"?ne=new N("+","add",[ne,de]):ne=new N("-","subtract",[ne,de]),he=!1}if(he)return new _(0);return ne;function _e(me,we,Ee){var Ce=me.type;if(Ce==="FunctionNode")throw new Error("There is an unsolved function call");if(Ce==="OperatorNode"){if("+-*^".indexOf(me.op)===-1)throw new Error("Operator "+me.op+" invalid");if(we!==null){if((me.fn==="unaryMinus"||me.fn==="pow")&&we.fn!=="add"&&we.fn!=="subtract"&&we.fn!=="multiply")throw new Error("Invalid "+me.op+" placing");if((me.fn==="subtract"||me.fn==="add"||me.fn==="multiply")&&we.fn!=="add"&&we.fn!=="subtract")throw new Error("Invalid "+me.op+" placing");if((me.fn==="subtract"||me.fn==="add"||me.fn==="unaryMinus")&&Ee.noFil!==0)throw new Error("Invalid "+me.op+" placing")}(me.op==="^"||me.op==="*")&&(Ee.fire=me.op);for(var He=0;He$&&(k[Ue]=0),k[Ue]+=Ee.cte*(Ee.oper==="+"?1:-1),$=Math.max(Ue,$);return}Ee.cte=Ue,Ee.fire===""&&(k[0]+=Ee.cte*(Ee.oper==="+"?1:-1))}else throw new Error("Type "+Ce+" is not allowed")}}}),zM="zpk2tf",r1e=["typed","add","multiply","Complex","number"],n1e=G(zM,r1e,t=>{var{typed:e,add:r,multiply:n,Complex:i,number:a}=t;return e(zM,{"Array,Array,number":function(l,c,f){return s(l,c,f)},"Array,Array":function(l,c){return s(l,c,1)},"Matrix,Matrix,number":function(l,c,f){return s(l.valueOf(),c.valueOf(),f)},"Matrix,Matrix":function(l,c){return s(l.valueOf(),c.valueOf(),1)}});function s(u,l,c){u.some(S=>S.type==="BigNumber")&&(u=u.map(S=>a(S))),l.some(S=>S.type==="BigNumber")&&(l=l.map(S=>a(S)));for(var f=[i(1,0)],h=[i(1,0)],p=0;p=0&&f-h{var{typed:e,add:r,multiply:n,Complex:i,divide:a,matrix:s}=t;return e(qM,{"Array, Array":function(c,f){var h=u(512);return o(c,f,h)},"Array, Array, Array":function(c,f,h){return o(c,f,h)},"Array, Array, number":function(c,f,h){if(h<0)throw new Error("w must be a positive number");var p=u(h);return o(c,f,p)},"Matrix, Matrix":function(c,f){var h=u(512),{w:p,h:g}=o(c.valueOf(),f.valueOf(),h);return{w:s(p),h:s(g)}},"Matrix, Matrix, Matrix":function(c,f,h){var{h:p}=o(c.valueOf(),f.valueOf(),h.valueOf());return{h:s(p),w:s(h)}},"Matrix, Matrix, number":function(c,f,h){if(h<0)throw new Error("w must be a positive number");var p=u(h),{h:g}=o(c.valueOf(),f.valueOf(),p);return{h:s(g),w:s(p)}}});function o(l,c,f){for(var h=[],p=[],g=0;g{var{classes:e}=t;return function(n,i){var a=e[i&&i.mathjs];return a&&typeof a.fromJSON=="function"?a.fromJSON(i):i}}),l1e="replacer",c1e=[],f1e=G(l1e,c1e,()=>function(e,r){return typeof r=="number"&&(!isFinite(r)||isNaN(r))?{mathjs:"number",value:String(r)}:r}),h1e="12.3.2",d1e=G("true",[],()=>!0),p1e=G("false",[],()=>!1),m1e=G("null",[],()=>null),v1e=$i("Infinity",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r(1/0):1/0}),g1e=$i("NaN",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r(NaN):NaN}),y1e=$i("pi",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?gw(r):Mie}),b1e=$i("tau",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?Qce(r):Tie}),x1e=$i("e",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?Kce(r):Oie}),w1e=$i("phi",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?Jce(r):Fie}),S1e=$i("LN2",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r(2).ln():Math.LN2}),_1e=$i("LN10",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r(10).ln():Math.LN10}),A1e=$i("LOG2E",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r(1).div(new r(2).ln()):Math.LOG2E}),D1e=$i("LOG10E",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r(1).div(new r(10).ln()):Math.LOG10E}),E1e=$i("SQRT1_2",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r("0.5").sqrt():Math.SQRT1_2}),N1e=$i("SQRT2",["config","?BigNumber"],t=>{var{config:e,BigNumber:r}=t;return e.number==="BigNumber"?new r(2).sqrt():Math.SQRT2}),C1e=$i("i",["Complex"],t=>{var{Complex:e}=t;return e.I}),M1e=G("version",[],()=>h1e);function $i(t,e,r){return G(t,e,r,{recreateOnConfigChange:!0})}var T1e=Dt("speedOfLight","299792458","m s^-1"),O1e=Dt("gravitationConstant","6.67430e-11","m^3 kg^-1 s^-2"),F1e=Dt("planckConstant","6.62607015e-34","J s"),R1e=Dt("reducedPlanckConstant","1.0545718176461565e-34","J s"),P1e=Dt("magneticConstant","1.25663706212e-6","N A^-2"),k1e=Dt("electricConstant","8.8541878128e-12","F m^-1"),B1e=Dt("vacuumImpedance","376.730313667","ohm"),I1e=Dt("coulomb","8.987551792261171e9","N m^2 C^-2"),L1e=Dt("elementaryCharge","1.602176634e-19","C"),$1e=Dt("bohrMagneton","9.2740100783e-24","J T^-1"),z1e=Dt("conductanceQuantum","7.748091729863649e-5","S"),q1e=Dt("inverseConductanceQuantum","12906.403729652257","ohm"),U1e=Dt("magneticFluxQuantum","2.0678338484619295e-15","Wb"),H1e=Dt("nuclearMagneton","5.0507837461e-27","J T^-1"),W1e=Dt("klitzing","25812.807459304513","ohm"),V1e=Dt("bohrRadius","5.29177210903e-11","m"),Y1e=Dt("classicalElectronRadius","2.8179403262e-15","m"),j1e=Dt("electronMass","9.1093837015e-31","kg"),G1e=Dt("fermiCoupling","1.1663787e-5","GeV^-2"),X1e=Yg("fineStructure",.0072973525693),Z1e=Dt("hartreeEnergy","4.3597447222071e-18","J"),K1e=Dt("protonMass","1.67262192369e-27","kg"),J1e=Dt("deuteronMass","3.3435830926e-27","kg"),Q1e=Dt("neutronMass","1.6749271613e-27","kg"),exe=Dt("quantumOfCirculation","3.6369475516e-4","m^2 s^-1"),txe=Dt("rydberg","10973731.568160","m^-1"),rxe=Dt("thomsonCrossSection","6.6524587321e-29","m^2"),nxe=Yg("weakMixingAngle",.2229),ixe=Yg("efimovFactor",22.7),axe=Dt("atomicMass","1.66053906660e-27","kg"),sxe=Dt("avogadro","6.02214076e23","mol^-1"),oxe=Dt("boltzmann","1.380649e-23","J K^-1"),uxe=Dt("faraday","96485.33212331001","C mol^-1"),lxe=Dt("firstRadiation","3.7417718521927573e-16","W m^2"),cxe=Dt("loschmidt","2.686780111798444e25","m^-3"),fxe=Dt("gasConstant","8.31446261815324","J K^-1 mol^-1"),hxe=Dt("molarPlanckConstant","3.990312712893431e-10","J s mol^-1"),dxe=Dt("molarVolume","0.022413969545014137","m^3 mol^-1"),pxe=Yg("sackurTetrode",-1.16487052358),mxe=Dt("secondRadiation","0.014387768775039337","m K"),vxe=Dt("stefanBoltzmann","5.67037441918443e-8","W m^-2 K^-4"),gxe=Dt("wienDisplacement","2.897771955e-3","m K"),yxe=Dt("molarMass","0.99999999965e-3","kg mol^-1"),bxe=Dt("molarMassC12","11.9999999958e-3","kg mol^-1"),xxe=Dt("gravity","9.80665","m s^-2"),wxe=Dt("planckLength","1.616255e-35","m"),Sxe=Dt("planckMass","2.176435e-8","kg"),_xe=Dt("planckTime","5.391245e-44","s"),Axe=Dt("planckCharge","1.87554603778e-18","C"),Dxe=Dt("planckTemperature","1.416785e+32","K");function Dt(t,e,r){var n=["config","Unit","BigNumber"];return G(t,n,i=>{var{config:a,Unit:s,BigNumber:o}=i,u=a.number==="BigNumber"?new o(e):parseFloat(e),l=new s(u,r);return l.fixPrefix=!0,l})}function Yg(t,e){var r=["config","BigNumber"];return G(t,r,n=>{var{config:i,BigNumber:a}=n;return i.number==="BigNumber"?new a(e):e})}var Exe="apply",Nxe=["typed","isInteger"],Cxe=G(Exe,Nxe,t=>{var{typed:e,isInteger:r}=t,n=fw({typed:e,isInteger:r});return e("apply",{"...any":function(a){var s=a[1];Ct(s)?a[1]=s-1:Mt(s)&&(a[1]=s.minus(1));try{return n.apply(null,a)}catch(o){throw oi(o)}}})},{isTransformFunction:!0}),Mxe="column",Txe=["typed","Index","matrix","range"],Oxe=G(Mxe,Txe,t=>{var{typed:e,Index:r,matrix:n,range:i}=t,a=Gk({typed:e,Index:r,matrix:n,range:i});return e("column",{"...any":function(o){var u=o.length-1,l=o[u];Ct(l)&&(o[u]=l-1);try{return a.apply(null,o)}catch(c){throw oi(c)}}})},{isTransformFunction:!0});function Ew(t,e,r){var n=t.filter(function(u){return Sn(u)&&!(u.name in e)&&!r.has(u.name)})[0];if(!n)throw new Error('No undefined variable found in inline expression "'+t+'"');var i=n.name,a=new Map,s=new NP(r,a,new Set([i])),o=t.compile();return function(l){return a.set(i,l),o.evaluate(s)}}var Fxe="filter",Rxe=["typed"],Pxe=G(Fxe,Rxe,t=>{var{typed:e}=t;function r(i,a,s){var o,u;return i[0]&&(o=i[0].compile().evaluate(s)),i[1]&&(Sn(i[1])||dd(i[1])?u=i[1].compile().evaluate(s):u=Ew(i[1],a,s)),n(o,u)}r.rawArgs=!0;var n=e("filter",{"Array, function":UM,"Matrix, function":function(a,s){return a.create(UM(a.toArray(),s))},"Array, RegExp":Sv,"Matrix, RegExp":function(a,s){return a.create(Sv(a.toArray(),s))}});return r},{isTransformFunction:!0});function UM(t,e){return SP(t,function(r,n,i){return Bc(e,r,[n+1],i,"filter")})}var kxe="forEach",Bxe=["typed"],Ixe=G(kxe,Bxe,t=>{var{typed:e}=t;function r(i,a,s){var o,u;return i[0]&&(o=i[0].compile().evaluate(s)),i[1]&&(Sn(i[1])||dd(i[1])?u=i[1].compile().evaluate(s):u=Ew(i[1],a,s)),n(o,u)}r.rawArgs=!0;var n=e("forEach",{"Array | Matrix, function":function(a,s){var o=function u(l,c){if(Array.isArray(l))Bg(l,function(f,h){u(f,c.concat(h+1))});else return Bc(s,l,c,a,"forEach")};o(a.valueOf(),[])}});return r},{isTransformFunction:!0}),Lxe="index",$xe=["Index","getMatrixDataType"],zxe=G(Lxe,$xe,t=>{var{Index:e,getMatrixDataType:r}=t;return function(){for(var i=[],a=0,s=arguments.length;a0?0:2;else if(o&&o.isSet===!0)o=o.map(function(l){return l-1});else if(sr(o)||dt(o))r(o)!=="boolean"&&(o=o.map(function(l){return l-1}));else if(Ct(o))o--;else if(Mt(o))o=o.toNumber()-1;else if(typeof o!="string")throw new TypeError("Dimension must be an Array, Matrix, number, string, or Range");i[a]=o}var u=new e;return e.apply(u,i),u}},{isTransformFunction:!0}),qxe="map",Uxe=["typed"],Hxe=G(qxe,Uxe,t=>{var{typed:e}=t;function r(i,a,s){var o,u;return i[0]&&(o=i[0].compile().evaluate(s)),i[1]&&(Sn(i[1])||dd(i[1])?u=i[1].compile().evaluate(s):u=Ew(i[1],a,s)),n(o,u)}r.rawArgs=!0;var n=e("map",{"Array, function":function(a,s){return HM(a,s,a)},"Matrix, function":function(a,s){return a.create(HM(a.valueOf(),s,a))}});return r},{isTransformFunction:!0});function HM(t,e,r){function n(i,a){return Array.isArray(i)?Ws(i,function(s,o){return n(s,a.concat(o+1))}):Bc(e,i,a,r,"map")}return n(t,[])}function Ko(t){if(t.length===2&&oa(t[0])){t=t.slice();var e=t[1];Ct(e)?t[1]=e-1:Mt(e)&&(t[1]=e.minus(1))}return t}var Wxe="max",Vxe=["typed","config","numeric","larger"],Yxe=G(Wxe,Vxe,t=>{var{typed:e,config:r,numeric:n,larger:i}=t,a=iB({typed:e,config:r,numeric:n,larger:i});return e("max",{"...any":function(o){o=Ko(o);try{return a.apply(null,o)}catch(u){throw oi(u)}}})},{isTransformFunction:!0}),jxe="mean",Gxe=["typed","add","divide"],Xxe=G(jxe,Gxe,t=>{var{typed:e,add:r,divide:n}=t,i=dB({typed:e,add:r,divide:n});return e("mean",{"...any":function(s){s=Ko(s);try{return i.apply(null,s)}catch(o){throw oi(o)}}})},{isTransformFunction:!0}),Zxe="min",Kxe=["typed","config","numeric","smaller"],Jxe=G(Zxe,Kxe,t=>{var{typed:e,config:r,numeric:n,smaller:i}=t,a=aB({typed:e,config:r,numeric:n,smaller:i});return e("min",{"...any":function(o){o=Ko(o);try{return a.apply(null,o)}catch(u){throw oi(u)}}})},{isTransformFunction:!0}),Qxe="range",ewe=["typed","config","?matrix","?bignumber","smaller","smallerEq","larger","largerEq","add","isPositive"],twe=G(Qxe,ewe,t=>{var{typed:e,config:r,matrix:n,bignumber:i,smaller:a,smallerEq:s,larger:o,largerEq:u,add:l,isPositive:c}=t,f=Jk({typed:e,config:r,matrix:n,bignumber:i,smaller:a,smallerEq:s,larger:o,largerEq:u,add:l,isPositive:c});return e("range",{"...any":function(p){var g=p.length-1,m=p[g];return typeof m!="boolean"&&p.push(!0),f.apply(null,p)}})},{isTransformFunction:!0}),rwe="row",nwe=["typed","Index","matrix","range"],iwe=G(rwe,nwe,t=>{var{typed:e,Index:r,matrix:n,range:i}=t,a=Qk({typed:e,Index:r,matrix:n,range:i});return e("row",{"...any":function(o){var u=o.length-1,l=o[u];Ct(l)&&(o[u]=l-1);try{return a.apply(null,o)}catch(c){throw oi(c)}}})},{isTransformFunction:!0}),awe="subset",swe=["typed","matrix","zeros","add"],owe=G(awe,swe,t=>{var{typed:e,matrix:r,zeros:n,add:i}=t,a=eB({typed:e,matrix:r,zeros:n,add:i});return e("subset",{"...any":function(o){try{return a.apply(null,o)}catch(u){throw oi(u)}}})},{isTransformFunction:!0}),uwe="concat",lwe=["typed","matrix","isInteger"],cwe=G(uwe,lwe,t=>{var{typed:e,matrix:r,isInteger:n}=t,i=jk({typed:e,matrix:r,isInteger:n});return e("concat",{"...any":function(s){var o=s.length-1,u=s[o];Ct(u)?s[o]=u-1:Mt(u)&&(s[o]=u.minus(1));try{return i.apply(null,s)}catch(l){throw oi(l)}}})},{isTransformFunction:!0}),WM="diff",fwe=["typed","matrix","subtract","number","bignumber"],hwe=G(WM,fwe,t=>{var{typed:e,matrix:r,subtract:n,number:i,bignumber:a}=t,s=Xk({typed:e,matrix:r,subtract:n,number:i,bignumber:a});return e(WM,{"...any":function(u){u=Ko(u);try{return s.apply(null,u)}catch(l){throw oi(l)}}})},{isTransformFunction:!0}),dwe="std",pwe=["typed","map","sqrt","variance"],mwe=G(dwe,pwe,t=>{var{typed:e,map:r,sqrt:n,variance:i}=t,a=vB({typed:e,map:r,sqrt:n,variance:i});return e("std",{"...any":function(o){o=Ko(o);try{return a.apply(null,o)}catch(u){throw oi(u)}}})},{isTransformFunction:!0}),VM="sum",vwe=["typed","config","add","numeric"],gwe=G(VM,vwe,t=>{var{typed:e,config:r,add:n,numeric:i}=t,a=fB({typed:e,config:r,add:n,numeric:i});return e(VM,{"...any":function(o){o=Ko(o);try{return a.apply(null,o)}catch(u){throw oi(u)}}})},{isTransformFunction:!0}),ywe="quantileSeq",bwe=["typed","bignumber","add","subtract","divide","multiply","partitionSelect","compare","isInteger","smaller","smallerEq","larger"],xwe=G(ywe,bwe,t=>{var{typed:e,bignumber:r,add:n,subtract:i,divide:a,multiply:s,partitionSelect:o,compare:u,isInteger:l,smaller:c,smallerEq:f,larger:h}=t,p=mB({typed:e,bignumber:r,add:n,subtract:i,divide:a,multiply:s,partitionSelect:o,compare:u,isInteger:l,smaller:c,smallerEq:f,larger:h});return e("quantileSeq",{"Array | Matrix, number | BigNumber":p,"Array | Matrix, number | BigNumber, number":(m,b,y)=>p(m,b,g(y)),"Array | Matrix, number | BigNumber, boolean":p,"Array | Matrix, number | BigNumber, boolean, number":(m,b,y,S)=>p(m,b,y,g(S)),"Array | Matrix, Array | Matrix":p,"Array | Matrix, Array | Matrix, number":(m,b,y)=>p(m,b,g(y)),"Array | Matrix, Array | Matrix, boolean":p,"Array | Matrix, Array | Matrix, boolean, number":(m,b,y,S)=>p(m,b,y,g(S))});function g(m){return Ko([[],m])[1]}},{isTransformFunction:!0}),YM="cumsum",wwe=["typed","add","unaryPlus"],Swe=G(YM,wwe,t=>{var{typed:e,add:r,unaryPlus:n}=t,i=hB({typed:e,add:r,unaryPlus:n});return e(YM,{"...any":function(s){if(s.length===2&&oa(s[0])){var o=s[1];Ct(o)?s[1]=o-1:Mt(o)&&(s[1]=o.minus(1))}try{return i.apply(null,s)}catch(u){throw oi(u)}}})},{isTransformFunction:!0}),jM="variance",_we=["typed","add","subtract","multiply","divide","apply","isNaN"],Awe=G(jM,_we,t=>{var{typed:e,add:r,subtract:n,multiply:i,divide:a,apply:s,isNaN:o}=t,u=pB({typed:e,add:r,subtract:n,multiply:i,divide:a,apply:s,isNaN:o});return e(jM,{"...any":function(c){c=Ko(c);try{return u.apply(null,c)}catch(f){throw oi(f)}}})},{isTransformFunction:!0}),GM="print",Dwe=["typed","matrix","zeros","add"],Ewe=G(GM,Dwe,t=>{var{typed:e,matrix:r,zeros:n,add:i}=t,a=rB({typed:e,matrix:r,zeros:n,add:i});return e(GM,{"string, Object | Array":function(u,l){return a(s(u),l)},"string, Object | Array, number | Object":function(u,l,c){return a(s(u),l,c)}});function s(o){return o.replace(tB,u=>{var l=u.slice(1).split("."),c=l.map(function(f){return!isNaN(f)&&f.length>0?parseInt(f)-1:f});return"$"+c.join(".")})}},{isTransformFunction:!0}),Nwe="and",Cwe=["typed","matrix","zeros","add","equalScalar","not","concat"],Mwe=G(Nwe,Cwe,t=>{var{typed:e,matrix:r,equalScalar:n,zeros:i,not:a,concat:s}=t,o=nB({typed:e,matrix:r,equalScalar:n,zeros:i,not:a,concat:s});function u(l,c,f){var h=l[0].compile().evaluate(f);if(!oa(h)&&!o(h,!0))return!1;var p=l[1].compile().evaluate(f);return o(h,p)}return u.rawArgs=!0,u},{isTransformFunction:!0}),Twe="or",Owe=["typed","matrix","equalScalar","DenseMatrix","concat"],Fwe=G(Twe,Owe,t=>{var{typed:e,matrix:r,equalScalar:n,DenseMatrix:i,concat:a}=t,s=Yk({typed:e,matrix:r,equalScalar:n,DenseMatrix:i,concat:a});function o(u,l,c){var f=u[0].compile().evaluate(c);if(!oa(f)&&s(f,!1))return!0;var h=u[1].compile().evaluate(c);return s(f,h)}return o.rawArgs=!0,o},{isTransformFunction:!0}),Rwe="bitAnd",Pwe=["typed","matrix","zeros","add","equalScalar","not","concat"],kwe=G(Rwe,Pwe,t=>{var{typed:e,matrix:r,equalScalar:n,zeros:i,not:a,concat:s}=t,o=Wk({typed:e,matrix:r,equalScalar:n,zeros:i,not:a,concat:s});function u(l,c,f){var h=l[0].compile().evaluate(f);if(!oa(h)){if(isNaN(h))return NaN;if(h===0||h===!1)return 0}var p=l[1].compile().evaluate(f);return o(h,p)}return u.rawArgs=!0,u},{isTransformFunction:!0}),Bwe="bitOr",Iwe=["typed","matrix","equalScalar","DenseMatrix","concat"],Lwe=G(Bwe,Iwe,t=>{var{typed:e,matrix:r,equalScalar:n,DenseMatrix:i,concat:a}=t,s=Vk({typed:e,matrix:r,equalScalar:n,DenseMatrix:i,concat:a});function o(u,l,c){var f=u[0].compile().evaluate(c);if(!oa(f)){if(isNaN(f))return NaN;if(f===-1)return-1;if(f===!0)return 1}var h=u[1].compile().evaluate(c);return s(f,h)}return o.rawArgs=!0,o},{isTransformFunction:!0}),Ge=iie({config:Re}),wr=uie({}),XM=x1e({BigNumber:Ge,config:Re}),$we=p1e({}),zwe=X1e({BigNumber:Ge,config:Re}),tl=hie({}),bB=C1e({Complex:wr}),qwe=v1e({BigNumber:Ge,config:Re}),Uwe=_1e({BigNumber:Ge,config:Re}),Hwe=D1e({BigNumber:Ge,config:Re}),jg=yie({}),Wwe=g1e({BigNumber:Ge,config:Re}),Vwe=m1e({}),Ywe=w1e({BigNumber:Ge,config:Re}),jwe=mie({}),xB=une({}),Gwe=E1e({BigNumber:Ge,config:Re}),Xwe=pxe({BigNumber:Ge,config:Re}),wB=b1e({BigNumber:Ge,config:Re}),Zwe=d1e({}),Kwe=M1e({}),Tt=Sie({Matrix:jg}),Jwe=ixe({BigNumber:Ge,config:Re}),Qwe=S1e({BigNumber:Ge,config:Re}),d1=y1e({BigNumber:Ge,config:Re}),eSe=f1e({}),tSe=N1e({BigNumber:Ge,config:Re}),re=ine({BigNumber:Ge,Complex:wr,DenseMatrix:Tt,Fraction:tl}),Nw=Rae({BigNumber:Ge,config:Re,typed:re}),rSe=nxe({BigNumber:Ge,config:Re}),ui=kae({typed:re}),nSe=cfe({Complex:wr,config:Re,typed:re}),iSe=pfe({BigNumber:Ge,typed:re}),aSe=yfe({BigNumber:Ge,Complex:wr,config:Re,typed:re}),yn=$ae({typed:re}),sSe=Eoe({typed:re}),oSe=Afe({BigNumber:Ge,Complex:wr,config:Re,typed:re}),uSe=Mfe({typed:re}),SB=Ffe({typed:re}),lSe=Bfe({Complex:wr,config:Re,typed:re}),Ri=dae({BigNumber:Ge,typed:re}),cSe=boe({typed:re}),fSe=cae({typed:re}),hSe=Aie({typed:re}),Gg=Uye({typed:re}),Xg=vae({Complex:wr,typed:re}),rl=Coe({typed:re}),Cw=Lfe({typed:re}),dSe=Ufe({BigNumber:Ge,typed:re}),pSe=Yfe({BigNumber:Ge,typed:re}),mSe=ese({typed:re}),zt=Jie({config:Re,typed:re}),vSe=Kue({typed:re}),_B=rse({typed:re}),gSe=ise({Complex:wr,typed:re}),ySe=Goe({typed:re}),bSe=Joe({typed:re}),vd=ule({typed:re}),Mw=tue({typed:re}),xSe=ple({format:vd,typed:re}),Tw=Toe({typed:re}),wi=Eie({typed:re}),Jo=Iie({typed:re}),nl=Hie({typed:re}),Ba=Vie({typed:re}),wSe=A1e({BigNumber:Ge,config:Re}),SSe=Gye({Complex:wr,typed:re}),_Se=$se({Complex:wr,config:Re,typed:re}),AB=qse({Complex:wr,config:Re,typed:re}),il=oue({typed:re}),Xr=Wse({typed:re}),qv=Poe({typed:re}),Qs=sae({typed:re}),ASe=hle({format:vd,typed:re}),DSe=Sbe({config:Re,typed:re}),ESe=rB({typed:re}),NSe=Abe({config:Re,typed:re}),Ow=Foe({typed:re}),CSe=Zfe({BigNumber:Ge,typed:re}),DB=Zse({BigNumber:Ge,Fraction:tl,complex:Xg,typed:re}),Zg=ehe({typed:re}),eo=tae({Matrix:jg,equalScalar:zt,typed:re}),MSe=Mae({typed:re}),TSe=toe({typed:re}),OSe=uae({typed:re}),fa=qae({typed:re}),FSe=ihe({typed:re}),EB=Xie({typed:re}),RSe=hfe({Complex:wr,config:Re,typed:re}),PSe=xfe({BigNumber:Ge,typed:re}),Fw=fw({isInteger:wi,typed:re}),kSe=Sfe({BigNumber:Ge,Complex:wr,config:Re,typed:re}),BSe=cle({format:vd,typed:re}),ISe=Wye({typed:re}),LSe=zfe({typed:re}),$Se=Gfe({BigNumber:Ge,typed:re}),gd=jie({typed:re}),zSe=ble({typed:re}),qSe=Ebe({config:Re,typed:re}),USe=Jfe({BigNumber:Ge,typed:re}),HSe=rhe({typed:re}),WSe=sfe({SparseMatrix:eo,typed:re}),Ia=Qse({Complex:wr,config:Re,typed:re}),VSe=ohe({typed:re}),ss=Oae({typed:re}),YSe=vfe({BigNumber:Ge,Complex:wr,config:Re,typed:re}),jSe=Wfe({BigNumber:Ge,typed:re}),Lc=bae({Fraction:tl,typed:re}),al=$ie({typed:re}),Ye=wae({DenseMatrix:Tt,Matrix:jg,SparseMatrix:eo,typed:re}),GSe=_ae({isZero:Ba,matrix:Ye,typed:re}),XSe=ile({isNaN:gd,isNumeric:al,typed:re}),Na=Sle({bignumber:Ri,fraction:Lc,number:Qs}),NB=sle({config:Re,multiplyScalar:Xr,numeric:Na,typed:re}),CB=mue({isInteger:wi,matrix:Ye,typed:re}),kn=Due({matrix:Ye,config:Re,typed:re}),ZSe=Nue({matrix:Ye,typed:re}),yd=Rue({matrix:Ye,typed:re}),MB=aoe({BigNumber:Ge,config:Re,matrix:Ye,typed:re}),On=Iue({BigNumber:Ge,config:Re,matrix:Ye,typed:re}),KSe=Efe({Complex:wr,config:Re,typed:re}),TB=Hae({BigNumber:Ge,Complex:wr,Fraction:tl,config:Re,isNegative:Jo,matrix:Ye,typed:re,unaryMinus:ss}),Zt=jk({isInteger:wi,matrix:Ye,typed:re}),JSe=qoe({prod:NB,size:kn,typed:re}),Rw=kue({conj:rl,transpose:yd,typed:re}),OB=Voe({DenseMatrix:Tt,SparseMatrix:eo,matrix:Ye,typed:re}),Lr=Ale({numeric:Na,typed:re}),bd=Lle({DenseMatrix:Tt,concat:Zt,divideScalar:Lr,equalScalar:zt,matrix:Ye,typed:re}),ha=hce({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),xd=Zoe({matrix:Ye,typed:re}),QSe=qie({isNumeric:al,typed:re}),Qo=nue({BigNumber:Ge,DenseMatrix:Tt,SparseMatrix:eo,config:Re,matrix:Ye,typed:re}),e_e=aue({matrix:Ye,multiplyScalar:Xr,typed:re}),Kg=Ece({DenseMatrix:Tt,concat:Zt,config:Re,matrix:Ye,typed:re}),t_e=Zle({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re,zeros:On}),FB=zle({DenseMatrix:Tt,divideScalar:Lr,equalScalar:zt,matrix:Ye,multiplyScalar:Xr,subtractScalar:fa,typed:re}),Pw=Nae({flatten:xd,matrix:Ye,size:kn,typed:re}),r_e=Gse({BigNumber:Ge,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),n_e=hue({BigNumber:Ge,config:Re,matrix:Ye,typed:re}),kw=Hde({addScalar:yn,complex:Xg,conj:rl,divideScalar:Lr,equal:ha,identity:Qo,isZero:Ba,matrix:Ye,multiplyScalar:Xr,sign:DB,sqrt:Ia,subtractScalar:fa,typed:re,unaryMinus:ss,zeros:On}),i_e=yue({config:Re,matrix:Ye}),a_e=Jle({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re,zeros:On}),$c=Cle({BigNumber:Ge,DenseMatrix:Tt,equalScalar:zt,matrix:Ye,typed:re,zeros:On}),ni=gce({DenseMatrix:Tt,concat:Zt,config:Re,matrix:Ye,typed:re}),Gr=noe({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,subtractScalar:fa,typed:re,unaryMinus:ss}),s_e=gle({concat:Zt,matrix:Ye,typed:re}),o_e=Oce({DenseMatrix:Tt,concat:Zt,config:Re,equalScalar:zt,matrix:Ye,typed:re}),Bw=Ule({DenseMatrix:Tt,divideScalar:Lr,equalScalar:zt,matrix:Ye,multiplyScalar:Xr,subtractScalar:fa,typed:re}),u_e=Ioe({DenseMatrix:Tt,concat:Zt,matrix:Ye,typed:re}),Ht=Mhe({DenseMatrix:Tt,SparseMatrix:eo,addScalar:yn,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),l_e=Pfe({BigNumber:Ge,DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),c_e=Wk({concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),f_e=Vk({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),h_e=Aoe({DenseMatrix:Tt,concat:Zt,matrix:Ye,typed:re}),d_e=Fbe({addScalar:yn,combinations:Gg,divideScalar:Lr,isInteger:wi,isNegative:Jo,multiplyScalar:Xr,typed:re}),sl=nce({BigNumber:Ge,DenseMatrix:Tt,Fraction:tl,concat:Zt,config:Re,equalScalar:zt,matrix:Ye,typed:re}),RB=cce({concat:Zt,matrix:Ye,typed:re}),p_e=hB({add:Ht,typed:re,unaryPlus:Nw}),Iw=Mce({equal:ha,typed:re}),m_e=Xk({matrix:Ye,number:Qs,subtract:Gr,typed:re}),v_e=Dye({abs:ui,addScalar:yn,deepEqual:Iw,divideScalar:Lr,multiplyScalar:Xr,sqrt:Ia,subtractScalar:fa,typed:re}),Jg=khe({addScalar:yn,conj:rl,multiplyScalar:Xr,size:kn,typed:re}),g_e=mce({compareText:RB,isZero:Ba,typed:re}),PB=qk({DenseMatrix:Tt,config:Re,equalScalar:zt,matrix:Ye,round:$c,typed:re,zeros:On}),y_e=Rse({BigNumber:Ge,DenseMatrix:Tt,concat:Zt,config:Re,equalScalar:zt,matrix:Ye,round:$c,typed:re,zeros:On}),b_e=Ohe({abs:ui,addScalar:yn,divideScalar:Lr,isPositive:nl,multiplyScalar:Xr,smaller:ni,sqrt:Ia,typed:re}),kB=qce({DenseMatrix:Tt,smaller:ni}),Wn=Wce({ImmutableDenseMatrix:kB,getMatrixDataType:Mw}),ii=_ce({DenseMatrix:Tt,concat:Zt,config:Re,matrix:Ye,typed:re}),Lw=Tle({Complex:wr,config:Re,divideScalar:Lr,typed:re}),x_e=Wle({DenseMatrix:Tt,divideScalar:Lr,equalScalar:zt,matrix:Ye,multiplyScalar:Xr,subtractScalar:fa,typed:re}),w_e=Dae({flatten:xd,matrix:Ye,size:kn,typed:re}),S_e=aB({config:Re,numeric:Na,smaller:ni,typed:re}),BB=Uk({DenseMatrix:Tt,concat:Zt,config:Re,equalScalar:zt,matrix:Ye,round:$c,typed:re,zeros:On}),lr=Yse({addScalar:yn,dot:Jg,equalScalar:zt,matrix:Ye,multiplyScalar:Xr,typed:re}),__e=Ple({Complex:wr,config:Re,divideScalar:Lr,typed:re}),A_e=Yk({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),Qg=Pce({compare:sl,isNaN:gd,isNumeric:al,typed:re}),D_e=ece({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re,zeros:On}),IB=dpe({SparseMatrix:eo,abs:ui,add:Ht,divideScalar:Lr,larger:ii,largerEq:Kg,multiply:lr,subtract:Gr,transpose:yd,typed:re}),zi=eB({add:Ht,matrix:Ye,typed:re,zeros:On}),$w=fB({add:Ht,config:Re,numeric:Na,typed:re}),E_e=Lhe({add:Ht,matrix:Ye,typed:re}),LB=Yle({DenseMatrix:Tt,divideScalar:Lr,equalScalar:zt,matrix:Ye,multiplyScalar:Xr,subtractScalar:fa,typed:re}),N_e=n1e({Complex:wr,add:Ht,multiply:lr,number:Qs,typed:re}),zw=Jae({DenseMatrix:Tt,config:Re,equalScalar:zt,matrix:Ye,round:$c,typed:re,zeros:On}),os=oce({compare:sl,typed:re}),C_e=Pbe({addScalar:yn,combinations:Gg,isInteger:wi,isNegative:Jo,isPositive:nl,larger:ii,typed:re}),M_e=Hoe({matrix:Ye,multiply:lr,subtract:Gr,typed:re}),$B=tye({divideScalar:Lr,isZero:Ba,matrix:Ye,multiply:lr,subtractScalar:fa,typed:re,unaryMinus:ss}),T_e=foe({concat:Zt,equalScalar:zt,matrix:Ye,multiplyScalar:Xr,typed:re}),zB=jce({larger:ii,smaller:ni}),qB=ose({Complex:wr,DenseMatrix:Tt,ceil:zw,equalScalar:zt,floor:PB,matrix:Ye,typed:re,zeros:On}),UB=zhe({Index:Wn,typed:re}),O_e=Cye({abs:ui,add:Ht,addScalar:yn,config:Re,divideScalar:Lr,equalScalar:zt,flatten:xd,isNumeric:al,isZero:Ba,matrix:Ye,multiply:lr,multiplyScalar:Xr,smaller:ni,subtract:Gr,typed:re}),F_e=ooe({BigNumber:Ge,add:Ht,config:Re,equal:ha,isInteger:wi,mod:BB,smaller:ni,typed:re,xgcd:MB}),R_e=Ise({concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),P_e=Fle({Complex:wr,config:Re,divideScalar:Lr,log:Lw,typed:re}),qw=iB({config:Re,larger:ii,numeric:Na,typed:re}),k_e=lhe({DenseMatrix:Tt,Index:Wn,compareNatural:os,size:kn,subset:zi,typed:re}),B_e=dhe({DenseMatrix:Tt,Index:Wn,compareNatural:os,size:kn,subset:zi,typed:re}),I_e=ghe({Index:Wn,compareNatural:os,size:kn,subset:zi,typed:re}),L_e=whe({Index:Wn,compareNatural:os,size:kn,subset:zi,typed:re}),Ac=xce({DenseMatrix:Tt,concat:Zt,config:Re,matrix:Ye,typed:re}),$_e=Bce({compare:sl,compareNatural:os,matrix:Ye,typed:re}),z_e=nB({concat:Zt,equalScalar:zt,matrix:Ye,not:qv,typed:re,zeros:On}),Dc=Jk({bignumber:Ri,matrix:Ye,add:Ht,config:Re,isPositive:nl,larger:ii,largerEq:Kg,smaller:ni,smallerEq:Ac,typed:re}),q_e=Qk({Index:Wn,matrix:Ye,range:Dc,typed:re}),HB=fhe({DenseMatrix:Tt,Index:Wn,compareNatural:os,size:kn,subset:zi,typed:re}),U_e=bhe({Index:Wn,compareNatural:os,size:kn,subset:zi,typed:re}),WB=Dhe({Index:Wn,concat:Zt,setDifference:HB,size:kn,subset:zi,typed:re}),VB=Zce({FibonacciHeap:zB,addScalar:yn,equalScalar:zt}),YB=Gk({Index:Wn,matrix:Ye,range:Dc,typed:re}),ol=nye({abs:ui,addScalar:yn,det:$B,divideScalar:Lr,identity:Qo,matrix:Ye,multiply:lr,typed:re,unaryMinus:ss}),jB=qde({DenseMatrix:Tt,Spa:VB,SparseMatrix:eo,abs:ui,addScalar:yn,divideScalar:Lr,equalScalar:zt,larger:ii,matrix:Ye,multiplyScalar:Xr,subtractScalar:fa,typed:re,unaryMinus:ss}),H_e=aye({Complex:wr,add:Ht,ctranspose:Rw,deepEqual:Iw,divideScalar:Lr,dot:Jg,dotDivide:bd,equal:ha,inv:ol,matrix:Ye,multiply:lr,typed:re}),da=Ele({Complex:wr,config:Re,fraction:Lc,identity:Qo,inv:ol,matrix:Ye,multiply:lr,number:Qs,typed:re}),GB=mhe({DenseMatrix:Tt,Index:Wn,compareNatural:os,size:kn,subset:zi,typed:re}),W_e=Nhe({Index:Wn,concat:Zt,setIntersect:GB,setSymDifference:WB,size:kn,subset:zi,typed:re}),V_e=pye({abs:ui,add:Ht,identity:Qo,inv:ol,map:il,max:qw,multiply:lr,size:kn,sqrt:Ia,subtract:Gr,typed:re}),bt=rfe({BigNumber:Ge,Complex:wr,Fraction:tl,abs:ui,addScalar:yn,config:Re,divideScalar:Lr,equal:ha,fix:qB,format:vd,isNumeric:al,multiplyScalar:Xr,number:Qs,pow:da,round:$c,subtractScalar:fa}),Y_e=B1e({BigNumber:Ge,Unit:bt,config:Re}),j_e=gxe({BigNumber:Ge,Unit:bt,config:Re}),G_e=axe({BigNumber:Ge,Unit:bt,config:Re}),X_e=$1e({BigNumber:Ge,Unit:bt,config:Re}),Z_e=oxe({BigNumber:Ge,Unit:bt,config:Re}),K_e=z1e({BigNumber:Ge,Unit:bt,config:Re}),J_e=I1e({BigNumber:Ge,Unit:bt,config:Re}),Q_e=J1e({BigNumber:Ge,Unit:bt,config:Re}),eAe=Ble({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,pow:da,typed:re}),tAe=k1e({BigNumber:Ge,Unit:bt,config:Re}),rAe=L1e({BigNumber:Ge,Unit:bt,config:Re}),nAe=hye({abs:ui,add:Ht,identity:Qo,inv:ol,multiply:lr,typed:re}),iAe=uxe({BigNumber:Ge,Unit:bt,config:Re}),XB=$ue({addScalar:yn,ceil:zw,conj:rl,divideScalar:Lr,dotDivide:bd,exp:_B,i:bB,log2:AB,matrix:Ye,multiplyScalar:Xr,pow:da,tau:wB,typed:re}),Uw=Yye({BigNumber:Ge,Complex:wr,config:Re,multiplyScalar:Xr,pow:da,typed:re}),aAe=O1e({BigNumber:Ge,Unit:bt,config:Re}),sAe=Z1e({BigNumber:Ge,Unit:bt,config:Re}),oAe=que({conj:rl,dotDivide:bd,fft:XB,typed:re}),uAe=W1e({BigNumber:Ge,Unit:bt,config:Re}),lAe=cxe({BigNumber:Ge,Unit:bt,config:Re}),cAe=P1e({BigNumber:Ge,Unit:bt,config:Re}),fAe=yxe({BigNumber:Ge,Unit:bt,config:Re}),hAe=hxe({BigNumber:Ge,Unit:bt,config:Re}),dAe=Q1e({BigNumber:Ge,Unit:bt,config:Re}),pAe=H1e({BigNumber:Ge,Unit:bt,config:Re}),mAe=Axe({BigNumber:Ge,Unit:bt,config:Re}),vAe=wxe({BigNumber:Ge,Unit:bt,config:Re}),gAe=Dxe({BigNumber:Ge,Unit:bt,config:Re}),yAe=K1e({BigNumber:Ge,Unit:bt,config:Re}),bAe=exe({BigNumber:Ge,Unit:bt,config:Re}),xAe=R1e({BigNumber:Ge,Unit:bt,config:Re}),wAe=txe({BigNumber:Ge,Unit:bt,config:Re}),SAe=mxe({BigNumber:Ge,Unit:bt,config:Re}),_Ae=T1e({BigNumber:Ge,Unit:bt,config:Re}),AAe=vxe({BigNumber:Ge,Unit:bt,config:Re}),DAe=rxe({BigNumber:Ge,Unit:bt,config:Re}),EAe=sxe({BigNumber:Ge,Unit:bt,config:Re}),NAe=V1e({BigNumber:Ge,Unit:bt,config:Re}),CAe=ufe({Unit:bt,typed:re}),_n=_ye({divideScalar:Lr,equalScalar:zt,inv:ol,matrix:Ye,multiply:lr,typed:re}),MAe=j1e({BigNumber:Ge,Unit:bt,config:Re}),wd=Zye({gamma:Uw,typed:re}),TAe=lxe({BigNumber:Ge,Unit:bt,config:Re}),OAe=xxe({BigNumber:Ge,Unit:bt,config:Re}),FAe=q1e({BigNumber:Ge,Unit:bt,config:Re}),ZB=mpe({DenseMatrix:Tt,lsolve:FB,lup:jB,matrix:Ye,slu:IB,typed:re,usolve:Bw}),RAe=U1e({BigNumber:Ge,Unit:bt,config:Re}),PAe=bxe({BigNumber:Ge,Unit:bt,config:Re}),kAe=ebe({add:Ht,divide:_n,factorial:wd,isInteger:wi,isPositive:nl,multiply:lr,typed:re}),BAe=rbe({factorial:wd,typed:re}),IAe=Sxe({BigNumber:Ge,Unit:bt,config:Re}),LAe=gpe({add:Ht,cbrt:TB,divide:_n,equalScalar:zt,im:Tw,isZero:Ba,multiply:lr,re:Ow,sqrt:Ia,subtract:Gr,typeOf:EB,typed:re,unaryMinus:ss}),$Ae=_he({compareNatural:os,typed:re}),zAe=Gue({abs:ui,add:Ht,bignumber:Ri,divide:_n,isNegative:Jo,isPositive:nl,larger:ii,map:il,matrix:Ye,max:qw,multiply:lr,smaller:ni,subtract:Gr,typed:re,unaryMinus:ss}),KB=Cbe({bignumber:Ri,addScalar:yn,combinations:Gg,divideScalar:Lr,factorial:wd,isInteger:wi,isNegative:Jo,larger:ii,multiplyScalar:Xr,number:Qs,pow:da,subtractScalar:fa,typed:re}),qAe=ife({Unit:bt,typed:re}),UAe=Tbe({addScalar:yn,isInteger:wi,isNegative:Jo,stirlingS2:KB,typed:re}),JB=cye({abs:ui,add:Ht,addScalar:yn,atan:SB,bignumber:Ri,column:YB,complex:Xg,config:Re,cos:Cw,diag:OB,divideScalar:Lr,dot:Jg,equal:ha,flatten:xd,im:Tw,inv:ol,larger:ii,matrix:Ye,matrixFromColumns:Pw,multiply:lr,multiplyScalar:Xr,number:Qs,qr:kw,re:Ow,reshape:CB,sin:Zg,size:kn,smaller:ni,sqrt:Ia,subtract:Gr,typed:re,usolve:Bw,usolveAll:LB}),HAe=G1e({BigNumber:Ge,Unit:bt,config:Re}),WAe=fxe({BigNumber:Ge,Unit:bt,config:Re}),VAe=Jye({divide:_n,dotDivide:bd,isNumeric:al,log:Lw,map:il,matrix:Ye,multiply:lr,sum:$w,typed:re}),QB=dB({add:Ht,divide:_n,typed:re}),YAe=dxe({BigNumber:Ge,Unit:bt,config:Re}),jAe=F1e({BigNumber:Ge,Unit:bt,config:Re}),GAe=mB({bignumber:Ri,add:Ht,compare:sl,divide:_n,isInteger:wi,larger:ii,multiply:lr,partitionSelect:Qg,smaller:ni,smallerEq:Ac,subtract:Gr,typed:re}),Hw=pB({add:Ht,apply:Fw,divide:_n,isNaN:gd,multiply:lr,subtract:Gr,typed:re}),XAe=Y1e({BigNumber:Ge,Unit:bt,config:Re}),eI=Rye({add:Ht,compare:sl,divide:_n,partitionSelect:Qg,typed:re}),ZAe=zye({add:Ht,divide:_n,matrix:Ye,mean:QB,multiply:lr,pow:da,sqrt:Ia,subtract:Gr,sum:$w,typed:re}),KAe=a1e({Complex:wr,add:Ht,divide:_n,matrix:Ye,multiply:lr,typed:re}),JAe=kye({abs:ui,map:il,median:eI,subtract:Gr,typed:re}),QAe=vB({map:il,sqrt:Ia,typed:re,variance:Hw}),eDe=rle({BigNumber:Ge,Complex:wr,add:Ht,config:Re,divide:_n,equal:ha,factorial:wd,gamma:Uw,isNegative:Jo,multiply:lr,pi:d1,pow:da,sin:Zg,smallerEq:Ac,subtract:Gr,typed:re}),Ww=Rhe({abs:ui,add:Ht,conj:rl,ctranspose:Rw,eigs:JB,equalScalar:zt,larger:ii,matrix:Ye,multiply:lr,pow:da,smaller:ni,sqrt:Ia,typed:re}),tI=Sue({BigNumber:Ge,DenseMatrix:Tt,SparseMatrix:eo,addScalar:yn,config:Re,cos:Cw,matrix:Ye,multiplyScalar:Xr,norm:Ww,sin:Zg,typed:re,unaryMinus:ss}),tDe=_xe({BigNumber:Ge,Unit:bt,config:Re}),rI=yye({identity:Qo,matrix:Ye,multiply:lr,norm:Ww,qr:kw,subtract:Gr,typed:re}),rDe=xue({multiply:lr,rotationMatrix:tI,typed:re}),nI=vye({abs:ui,add:Ht,concat:Zt,identity:Qo,index:UB,lusolve:ZB,matrix:Ye,matrixFromColumns:Pw,multiply:lr,range:Dc,schur:rI,subset:zi,subtract:Gr,transpose:yd,typed:re}),nDe=xye({matrix:Ye,multiply:lr,sylvester:nI,transpose:yd,typed:re}),zc={},qc={},iI={},Xn=Hhe({mathWithTransform:qc}),Uc=mde({Node:Xn}),to=gde({Node:Xn}),ul=bde({Node:Xn}),aI=_de({Node:Xn}),Hc=jhe({Node:Xn}),sI=Qhe({Node:Xn,ResultSet:xB}),oI=tde({Node:Xn}),eu=lde({Node:Xn}),uI=wde({Node:Xn}),iDe=u1e({classes:iI}),Vw=_pe({math:zc,typed:re}),lI=fde({Node:Xn,typed:re}),zl=Q0e({Chain:Vw,typed:re}),Wc=dde({Node:Xn,size:kn}),Vc=Vhe({Node:Xn,subset:zi}),cI=Khe({matrix:Ye,Node:Xn,subset:zi}),tu=Ede({Unit:bt,Node:Xn,math:zc}),ru=Cde({Node:Xn,SymbolNode:tu,math:zc}),us=Tde({AccessorNode:Vc,ArrayNode:Hc,AssignmentNode:cI,BlockNode:sI,ConditionalNode:oI,ConstantNode:eu,FunctionAssignmentNode:lI,FunctionNode:ru,IndexNode:Wc,ObjectNode:Uc,OperatorNode:to,ParenthesisNode:ul,RangeNode:uI,RelationalNode:aI,SymbolNode:tu,config:Re,numeric:Na,typed:re}),fI=Xbe({ConstantNode:eu,FunctionNode:ru,OperatorNode:to,ParenthesisNode:ul,parse:us,typed:re}),Yw=Wbe({bignumber:Ri,fraction:Lc,AccessorNode:Vc,ArrayNode:Hc,ConstantNode:eu,FunctionNode:ru,IndexNode:Wc,ObjectNode:Uc,OperatorNode:to,SymbolNode:tu,config:Re,mathWithTransform:qc,matrix:Ye,typed:re}),aDe=Fde({parse:us,typed:re}),jw=Ybe({AccessorNode:Vc,ArrayNode:Hc,ConstantNode:eu,FunctionNode:ru,IndexNode:Wc,ObjectNode:Uc,OperatorNode:to,ParenthesisNode:ul,SymbolNode:tu,add:Ht,divide:_n,equal:ha,isZero:Ba,multiply:lr,parse:us,pow:da,subtract:Gr,typed:re}),Gw=Pde({parse:us,typed:re}),hI=xpe({evaluate:Gw}),dI=Ide({evaluate:Gw}),e0=qbe({bignumber:Ri,fraction:Lc,AccessorNode:Vc,ArrayNode:Hc,ConstantNode:eu,FunctionNode:ru,IndexNode:Wc,ObjectNode:Uc,OperatorNode:to,ParenthesisNode:ul,SymbolNode:tu,add:Ht,config:Re,divide:_n,equal:ha,isZero:Ba,mathWithTransform:qc,matrix:Ye,multiply:lr,parse:us,pow:da,resolve:fI,simplifyConstant:Yw,simplifyCore:jw,subtract:Gr,typed:re}),sDe=Kbe({OperatorNode:to,parse:us,simplify:e0,typed:re}),oDe=Bbe({parse:us,typed:re}),uDe=$de({Parser:dI,typed:re}),lDe=t1e({bignumber:Ri,fraction:Lc,AccessorNode:Vc,ArrayNode:Hc,ConstantNode:eu,FunctionNode:ru,IndexNode:Wc,ObjectNode:Uc,OperatorNode:to,ParenthesisNode:ul,SymbolNode:tu,add:Ht,config:Re,divide:_n,equal:ha,isZero:Ba,mathWithTransform:qc,matrix:Ye,multiply:lr,parse:us,pow:da,simplify:e0,simplifyConstant:Yw,simplifyCore:jw,subtract:Gr,typed:re}),cDe=Qbe({ConstantNode:eu,FunctionNode:ru,OperatorNode:to,ParenthesisNode:ul,SymbolNode:tu,config:Re,equal:ha,isZero:Ba,numeric:Na,parse:us,simplify:e0,typed:re}),fDe=K0e({Help:hI,mathWithTransform:qc,typed:re});dn(zc,{e:XM,false:$we,fineStructure:zwe,i:bB,Infinity:qwe,LN10:Uwe,LOG10E:Hwe,NaN:Wwe,null:Vwe,phi:Ywe,SQRT1_2:Gwe,sackurTetrode:Xwe,tau:wB,true:Zwe,E:XM,version:Kwe,efimovFactor:Jwe,LN2:Qwe,pi:d1,replacer:eSe,reviver:iDe,SQRT2:tSe,typed:re,unaryPlus:Nw,PI:d1,weakMixingAngle:rSe,abs:ui,acos:nSe,acot:iSe,acsc:aSe,addScalar:yn,arg:sSe,asech:oSe,asinh:uSe,atan:SB,atanh:lSe,bignumber:Ri,bitNot:cSe,boolean:fSe,clone:hSe,combinations:Gg,complex:Xg,conj:rl,cos:Cw,cot:dSe,csc:pSe,cube:mSe,equalScalar:zt,erf:vSe,exp:_B,expm1:gSe,filter:ySe,forEach:bSe,format:vd,getMatrixDataType:Mw,hex:xSe,im:Tw,isInteger:wi,isNegative:Jo,isPositive:nl,isZero:Ba,LOG2E:wSe,lgamma:SSe,log10:_Se,log2:AB,map:il,multiplyScalar:Xr,not:qv,number:Qs,oct:ASe,pickRandom:DSe,print:ESe,random:NSe,re:Ow,sec:CSe,sign:DB,sin:Zg,splitUnit:MSe,square:TSe,string:OSe,subtractScalar:fa,tan:FSe,typeOf:EB,acosh:RSe,acsch:PSe,apply:Fw,asec:kSe,bin:BSe,chain:zl,combinationsWithRep:ISe,cosh:LSe,csch:$Se,isNaN:gd,isPrime:zSe,randomInt:qSe,sech:USe,sinh:HSe,sparse:WSe,sqrt:Ia,tanh:VSe,unaryMinus:ss,acoth:YSe,coth:jSe,fraction:Lc,isNumeric:al,matrix:Ye,matrixFromFunction:GSe,mode:XSe,numeric:Na,prod:NB,reshape:CB,size:kn,squeeze:ZSe,transpose:yd,xgcd:MB,zeros:On,asin:KSe,cbrt:TB,concat:Zt,count:JSe,ctranspose:Rw,diag:OB,divideScalar:Lr,dotDivide:bd,equal:ha,flatten:xd,hasNumericValue:QSe,identity:Qo,kron:e_e,largerEq:Kg,leftShift:t_e,lsolve:FB,matrixFromColumns:Pw,nthRoot:r_e,ones:n_e,qr:kw,resize:i_e,rightArithShift:a_e,round:$c,smaller:ni,subtract:Gr,to:s_e,unequal:o_e,usolve:Bw,xor:u_e,add:Ht,atan2:l_e,bitAnd:c_e,bitOr:f_e,bitXor:h_e,catalan:d_e,compare:sl,compareText:RB,cumsum:p_e,deepEqual:Iw,diff:m_e,distance:v_e,dot:Jg,equalText:g_e,floor:PB,gcd:y_e,hypot:b_e,larger:ii,log:Lw,lsolveAll:x_e,matrixFromRows:w_e,min:S_e,mod:BB,multiply:lr,nthRoots:__e,or:A_e,partitionSelect:Qg,rightLogShift:D_e,slu:IB,subset:zi,sum:$w,trace:E_e,usolveAll:LB,zpk2tf:N_e,ceil:zw,compareNatural:os,composition:C_e,cross:M_e,det:$B,dotMultiply:T_e,fix:qB,index:UB,intersect:O_e,invmod:F_e,lcm:R_e,log1p:P_e,max:qw,setCartesian:k_e,setDistinct:B_e,setIsSubset:I_e,setPowerset:L_e,smallerEq:Ac,sort:$_e,and:z_e,range:Dc,row:q_e,setDifference:HB,setMultiplicity:U_e,setSymDifference:WB,column:YB,inv:ol,lup:jB,pinv:H_e,pow:da,setIntersect:GB,setUnion:W_e,sqrtm:V_e,vacuumImpedance:Y_e,wienDisplacement:j_e,atomicMass:G_e,bohrMagneton:X_e,boltzmann:Z_e,conductanceQuantum:K_e,coulomb:J_e,deuteronMass:Q_e,dotPow:eAe,electricConstant:tAe,elementaryCharge:rAe,expm:nAe,faraday:iAe,fft:XB,gamma:Uw,gravitationConstant:aAe,hartreeEnergy:sAe,ifft:oAe,klitzing:uAe,loschmidt:lAe,magneticConstant:cAe,molarMass:fAe,molarPlanckConstant:hAe,neutronMass:dAe,nuclearMagneton:pAe,planckCharge:mAe,planckLength:vAe,planckTemperature:gAe,protonMass:yAe,quantumOfCirculation:bAe,reducedPlanckConstant:xAe,rydberg:wAe,secondRadiation:SAe,speedOfLight:_Ae,stefanBoltzmann:AAe,thomsonCrossSection:DAe,avogadro:EAe,bohrRadius:NAe,createUnit:CAe,divide:_n,electronMass:MAe,factorial:wd,firstRadiation:TAe,gravity:OAe,inverseConductanceQuantum:FAe,lusolve:ZB,magneticFluxQuantum:RAe,molarMassC12:PAe,multinomial:kAe,parse:us,permutations:BAe,planckMass:IAe,polynomialRoot:LAe,resolve:fI,setSize:$Ae,simplifyConstant:Yw,solveODE:zAe,stirlingS2:KB,unit:qAe,bellNumbers:UAe,compile:aDe,eigs:JB,fermiCoupling:HAe,gasConstant:WAe,kldivergence:VAe,mean:QB,molarVolume:YAe,planckConstant:jAe,quantileSeq:GAe,simplifyCore:jw,variance:Hw,classicalElectronRadius:XAe,evaluate:Gw,median:eI,simplify:e0,symbolicEqual:sDe,corr:ZAe,freqz:KAe,leafCount:oDe,mad:JAe,parser:uDe,rationalize:lDe,std:QAe,zeta:eDe,derivative:cDe,norm:Ww,rotationMatrix:tI,help:fDe,planckTime:tDe,schur:rI,rotate:rDe,sylvester:nI,lyap:nDe,config:Re});dn(qc,zc,{filter:Pxe({typed:re}),forEach:Ixe({typed:re}),map:Hxe({typed:re}),apply:Cxe({isInteger:wi,typed:re}),or:Fwe({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),and:Mwe({add:Ht,concat:Zt,equalScalar:zt,matrix:Ye,not:qv,typed:re,zeros:On}),concat:cwe({isInteger:wi,matrix:Ye,typed:re}),max:Yxe({config:Re,larger:ii,numeric:Na,typed:re}),print:Ewe({add:Ht,matrix:Ye,typed:re,zeros:On}),bitAnd:kwe({add:Ht,concat:Zt,equalScalar:zt,matrix:Ye,not:qv,typed:re,zeros:On}),diff:hwe({bignumber:Ri,matrix:Ye,number:Qs,subtract:Gr,typed:re}),min:Jxe({config:Re,numeric:Na,smaller:ni,typed:re}),subset:owe({add:Ht,matrix:Ye,typed:re,zeros:On}),bitOr:Lwe({DenseMatrix:Tt,concat:Zt,equalScalar:zt,matrix:Ye,typed:re}),cumsum:Swe({add:Ht,typed:re,unaryPlus:Nw}),index:zxe({Index:Wn,getMatrixDataType:Mw}),sum:gwe({add:Ht,config:Re,numeric:Na,typed:re}),range:twe({bignumber:Ri,matrix:Ye,add:Ht,config:Re,isPositive:nl,larger:ii,largerEq:Kg,smaller:ni,smallerEq:Ac,typed:re}),row:iwe({Index:Wn,matrix:Ye,range:Dc,typed:re}),column:Oxe({Index:Wn,matrix:Ye,range:Dc,typed:re}),mean:Xxe({add:Ht,divide:_n,typed:re}),quantileSeq:xwe({add:Ht,bignumber:Ri,compare:sl,divide:_n,isInteger:wi,larger:ii,multiply:lr,partitionSelect:Qg,smaller:ni,smallerEq:Ac,subtract:Gr,typed:re}),variance:Awe({add:Ht,apply:Fw,divide:_n,isNaN:gd,multiply:lr,subtract:Gr,typed:re}),std:mwe({map:il,sqrt:Ia,typed:re,variance:Hw})});dn(iI,{BigNumber:Ge,Complex:wr,Fraction:tl,Matrix:jg,Node:Xn,ObjectNode:Uc,OperatorNode:to,ParenthesisNode:ul,Range:jwe,RelationalNode:aI,ResultSet:xB,ArrayNode:Hc,BlockNode:sI,ConditionalNode:oI,ConstantNode:eu,DenseMatrix:Tt,RangeNode:uI,Chain:Vw,FunctionAssignmentNode:lI,SparseMatrix:eo,IndexNode:Wc,ImmutableDenseMatrix:kB,Index:Wn,AccessorNode:Vc,AssignmentNode:cI,FibonacciHeap:zB,Spa:VB,Unit:bt,SymbolNode:tu,FunctionNode:ru,Help:hI,Parser:dI});Vw.createProxy(zc);class jl{static compute(e,r,n){switch(e){case"inclusive":return jl.computeInclusive(r,n);case"exclusive":return jl.computeExclusive(r,n)}}static computeInclusive(e,r){return zl(zl(e).divide(zl(r).add(100).done()).done()).multiply(100).done()}static computeExclusive(e,r){return zl(e).divide(100).multiply(zl(r).add(100).done()).done()}static getTaxValue(e,r,n){switch(e){case"inclusive":return r-jl.compute(e,r,n);case"exclusive":return jl.compute(e,r,n)-r}return 0}}window._=Z9;window.ChartJS=tF;window.Pusher=c7;window.createApp=Ix;window.moment=Qe;window.Axios=HT;window.__=Gl;window.__m=P$;window.SnackBar=aP;window.FloatingNotice=iP;window.nsHooks=oP();window.popupResolver=tre,window.popupCloser=rre,window.countdown=Zi;window.timespan=nre;window.Axios.defaults.headers.common["x-requested-with"]="XMLHttpRequest";window.Axios.defaults.withCredentials=!0;ns.websocket.enabled&&(window.Echo=new u7({broadcaster:"pusher",key:ns.websocket.key,wsHost:ns.websocket.host,wsPort:ns.websocket.port,wssPort:ns.websocket.port,namespace:"",forceTLS:ns.websocket.secured,disableStats:!0,encrypted:ns.websocket.secured,enabledTransports:ns.websocket.secured?["ws","wss"]:["ws"],disabledTransports:ns.websocket.secured?["sockjs","xhr_polling","xhr_streaming"]:[]}));const hDe=new nP,pI=new jte,dDe=new aP,pDe=new iP,mDe=new Zte,vDe=new Kte,SDe=window.nsHooks,mI=new class{constructor(){je(this,"breakpoint");this.breakpoint="",this.detectScreenSizes(),rv(window,"resize").subscribe(t=>this.detectScreenSizes())}detectScreenSizes(){switch(!0){case(window.outerWidth>0&&window.outerWidth<=480):this.breakpoint="xs";break;case(window.outerWidth>480&&window.outerWidth<=640):this.breakpoint="sm";break;case(window.outerWidth>640&&window.outerWidth<=1024):this.breakpoint="md";break;case(window.outerWidth>1024&&window.outerWidth<=1280):this.breakpoint="lg";break;case window.outerWidth>1280:this.breakpoint="xl";break}}},gDe=new Gte({sidebar:["xs","sm","md"].includes(mI.breakpoint)?"hidden":"visible"});pI.defineClient(HT);window.nsEvent=hDe;window.nsHttpClient=pI;window.nsSnackBar=dDe;window.nsNotice=pDe;window.nsState=gDe;window.nsUrl=mDe;window.nsScreen=mI;window.ChartJS=tF;window.EventEmitter=nP;window.Popup=nw;window.RxJS=dX;window.FormValidation=Xte;window.nsCrudHandler=vDe;window.defineComponent=g1;window.defineAsyncComponent=dT;window.markRaw=pT;window.shallowRef=Vv;window.createApp=Ix;window.ns.insertAfterKey=ere;window.ns.insertBeforeKey=Qte;window.nsCurrency=k$;window.nsAbbreviate=ire;window.nsRawCurrency=B$;window.nsTruncate=are;window.nsTax=jl;console.log("bootstrap");export{Bx as A,J1 as B,tR as C,Gu as D,are as E,Xte as F,yj as G,nre as H,nw as P,an as S,jl as T,Eg as V,pI as a,dDe as b,Ix as c,pDe as d,hDe as e,zl as f,rre as g,Qe as h,oR as i,Px as j,ZQ as k,lR as l,qQ as m,SDe as n,QQ as o,tre as p,nR as q,IQ as r,pR as s,eee as t,Ub as u,lv as v,JQ as w,$Q as x,SQ as y,kx as z}; diff --git a/public/build/assets/bootstrap-D2kvfjsL.js b/public/build/assets/bootstrap-D2kvfjsL.js deleted file mode 100644 index 2cf0140a4..000000000 --- a/public/build/assets/bootstrap-D2kvfjsL.js +++ /dev/null @@ -1 +0,0 @@ -var u=Object.defineProperty;var l=(n,e,s)=>e in n?u(n,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):n[e]=s;var o=(n,e,s)=>(l(n,typeof e!="symbol"?e+"":e,s),s);import{L as b,C as t,P as h,c as w,h as k,a as i,S as a,F as r,b as m,p as S,d as C,e as f,t as x,E as y,f as d,H as A,U as R,g as _,i as v,j as H,R as E,k as W,l as T,m as g,n as P,o as B,T as F,q as J}from"./tax-BACo6kIE.js";import{_ as z,a as K,n as L,b as N}from"./currency-ZXKMLAC0.js";import{d as U,a as q,m as j,s as V}from"./runtime-core.esm-bundler-DCfIpxDt.js";window._=b;window.ChartJS=t;window.Pusher=h;window.createApp=w;window.moment=k;window.Axios=i;window.__=z;window.__m=K;window.SnackBar=a;window.FloatingNotice=r;window.nsHooks=m();window.popupResolver=S,window.popupCloser=C,window.countdown=f;window.timespan=x;window.Axios.defaults.headers.common["x-requested-with"]="XMLHttpRequest";window.Axios.defaults.withCredentials=!0;ns.websocket.enabled&&(window.Echo=new y({broadcaster:"pusher",key:ns.websocket.key,wsHost:ns.websocket.host,wsPort:ns.websocket.port,wssPort:ns.websocket.port,namespace:"",forceTLS:ns.websocket.secured,disableStats:!0,encrypted:ns.websocket.secured,enabledTransports:ns.websocket.secured?["ws","wss"]:["ws"],disabledTransports:ns.websocket.secured?["sockjs","xhr_polling","xhr_streaming"]:[]}));const M=new d,c=new A,X=new a,D=new r,G=new R,I=new J,p=new class{constructor(){o(this,"breakpoint");this.breakpoint="",this.detectScreenSizes(),_(window,"resize").subscribe(n=>this.detectScreenSizes())}detectScreenSizes(){switch(!0){case(window.outerWidth>0&&window.outerWidth<=480):this.breakpoint="xs";break;case(window.outerWidth>480&&window.outerWidth<=640):this.breakpoint="sm";break;case(window.outerWidth>640&&window.outerWidth<=1024):this.breakpoint="md";break;case(window.outerWidth>1024&&window.outerWidth<=1280):this.breakpoint="lg";break;case window.outerWidth>1280:this.breakpoint="xl";break}}},O=new v({sidebar:["xs","sm","md"].includes(p.breakpoint)?"hidden":"visible"});c.defineClient(i);window.nsEvent=M;window.nsHttpClient=c;window.nsSnackBar=X;window.nsNotice=D;window.nsState=O;window.nsUrl=G;window.nsScreen=p;window.ChartJS=t;window.EventEmitter=d;window.Popup=H;window.RxJS=E;window.FormValidation=W;window.nsCrudHandler=I;window.defineComponent=U;window.defineAsyncComponent=q;window.markRaw=j;window.shallowRef=V;window.createApp=w;window.ns.insertAfterKey=T;window.ns.insertBeforeKey=g;window.nsCurrency=L;window.nsAbbreviate=P;window.nsRawCurrency=N;window.nsTruncate=B;window.nsTax=F;console.log("bootstrap"); diff --git a/public/build/assets/cashier-BVfAhfLz.js b/public/build/assets/cashier-BVfAhfLz.js deleted file mode 100644 index 3a6d46af9..000000000 --- a/public/build/assets/cashier-BVfAhfLz.js +++ /dev/null @@ -1 +0,0 @@ -var a=Object.defineProperty;var h=(r,s,e)=>s in r?a(r,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[s]=e;var t=(r,s,e)=>(h(r,typeof s!="symbol"?s+"":s,e),e);import{a as i,b as p}from"./bootstrap-B7E2wy_a.js";import{_ as o}from"./currency-ZXKMLAC0.js";import{B as n}from"./tax-BACo6kIE.js";import"./runtime-core.esm-bundler-DCfIpxDt.js";class m{constructor(){t(this,"_mysales");t(this,"_reports",{mysales:i.get("/api/reports/cashier-report")});this._mysales=new n({});for(let s in this._reports)this.loadReport(s)}loadReport(s){return this._reports[s].subscribe(e=>{this[`_${s}`].next(e)})}refreshReport(){i.get("/api/reports/cashier-report?refresh=true").subscribe(s=>{this._mysales.next(s),p.success(o("The report has been refreshed."),o("OK")).subscribe()})}get mysales(){return this._mysales}}window.Cashier=new m; diff --git a/public/build/assets/cashier-CK3OBI92.js b/public/build/assets/cashier-CK3OBI92.js new file mode 100644 index 000000000..21a5649d1 --- /dev/null +++ b/public/build/assets/cashier-CK3OBI92.js @@ -0,0 +1 @@ +var o=Object.defineProperty;var h=(r,s,e)=>s in r?o(r,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[s]=e;var t=(r,s,e)=>(h(r,typeof s!="symbol"?s+"":s,e),e);import{a,B as p,b as n}from"./bootstrap-Bpe5LRJd.js";import{_ as i}from"./currency-lOMYG1Wf.js";import"./runtime-core.esm-bundler-RT2b-_3S.js";class c{constructor(){t(this,"_mysales");t(this,"_reports",{mysales:a.get("/api/reports/cashier-report")});this._mysales=new p({});for(let s in this._reports)this.loadReport(s)}loadReport(s){return this._reports[s].subscribe(e=>{this[`_${s}`].next(e)})}refreshReport(){a.get("/api/reports/cashier-report?refresh=true").subscribe(s=>{this._mysales.next(s),n.success(i("The report has been refreshed."),i("OK")).subscribe()})}get mysales(){return this._mysales}}window.Cashier=new c; diff --git a/public/build/assets/components-CSb5I62o.js b/public/build/assets/components-CSb5I62o.js deleted file mode 100644 index 41455d122..000000000 --- a/public/build/assets/components-CSb5I62o.js +++ /dev/null @@ -1 +0,0 @@ -import se from"./ns-alert-popup-DDoxXsJC.js";import{_ as p}from"./currency-ZXKMLAC0.js";import{n as ve}from"./ns-avatar-image-C_oqdj76.js";import{_ as D}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as r,b as l,t as h,g as T,r as w,B as y,f as u,n as m,F as _,e as C,C as R,j as v,w as M,h as E,a as ke,k as W,D as we,E as ne,G as le,H as xe,I as J,J as ee,i as z,K as De,L as Ce,s as te,M as Me}from"./runtime-core.esm-bundler-DCfIpxDt.js";import{h as x,v as A,k as ie,d as re,p as ae,j as L,w as Y,s as U,u as Te,x as Se,y as de,z as $e}from"./tax-BACo6kIE.js";import{b as $,a as H,n as oe,d as q}from"./bootstrap-B7E2wy_a.js";import{n as G,g as Ee,e as N,b as Re,f as ue,h as Fe,i as Oe,a as Pe,j as je,c as Ae,k as Ue,d as He}from"./ns-prompt-popup-BbWKrSku.js";import"./index.es-BED_8l8F.js";const Le={methods:{__:p},components:{nsAvatarImage:ve},name:"ns-avatar",data(){return{svg:""}},computed:{avatarUrl(){return this.url.length===0?"":this.url}},props:["url","display-name"]},Ye={class:"flex justify-between items-center flex-shrink-0"},Ve={class:"hidden md:inline-block px-2"},Be={class:"md:hidden px-2"},Ie={class:"px-2"},Ne={class:"overflow-hidden rounded-full bg-gray-600"};function ze(e,t,s,c,d,n){const a=w("ns-avatar-image");return i(),r("div",Ye,[l("span",Ve,h(n.__("Howdy, {name}").replace("{name}",this.displayName)),1),l("span",Be,h(e.displayName),1),l("div",Ie,[l("div",Ne,[T(a,{url:n.avatarUrl,name:e.displayName},null,8,["url","name"])])])])}const qe=D(Le,[["render",ze]]),We={data:()=>({clicked:!1,_save:0}),props:["type","disabled","link","href","routerLink","to","target"],mounted(){},computed:{isDisabled(){return this.disabled&&(this.disabled.length===0||this.disabled==="disabled"||this.disabled)}}},Ge=["disabled"],Ke=["target","href"];function Qe(e,t,s,c,d,n){return i(),r("div",{class:m(["flex ns-button",s.type?s.type:"default"])},[!s.link&&!s.href?(i(),r("button",{key:0,disabled:n.isDisabled,class:"flex rounded items-center py-2 px-3 font-semibold"},[y(e.$slots,"default")],8,Ge)):u("",!0),s.href?(i(),r("a",{key:1,target:s.target,href:s.href,class:"flex rounded items-center py-2 px-3 font-semibold"},[y(e.$slots,"default")],8,Ke)):u("",!0)],2)}const Xe=D(We,[["render",Qe]]),Ze={name:"ns-calendar",props:["date","field","visible","range","selected-range","side"],data(){return{calendar:[[]],currentDay:x(),daysOfWeek:new Array(7).fill("").map((e,t)=>t),hours:0,minutes:0,currentView:"days",clickedOnCalendar:!1,moment:x,months:new Array(12).fill("").map((e,t)=>t)}},computed:{momentCopy(){return x()}},beforeUnmount(){document.removeEventListener("click",this.checkClickedItem)},mounted(){document.addEventListener("click",this.checkClickedItem),this.currentDay=[void 0,null,""].includes(this.date)?x():x(this.date),this.hours=this.currentDay.hours(),this.minutes=this.currentDay.minutes(),this.build(),this.toggleView("days")},methods:{__:p,handleCalendarClick(){this.clickedOnCalendar=!0},getDayClass({day:e,_dayIndex:t,dayOfWeek:s,_index:c,currentDay:d}){const n=[];return(x(this.date).isSame(e.date,"day")||this.isRangeEdge(e))&&!this.isInvalidRange()?n.push("bg-info-secondary text-primary border-info-secondary text-white"):n.push("hover:bg-numpad-hover"),this.isInvalidRange()&&this.isRangeEdge(e)&&n.push("bg-error-secondary text-white"),c===0&&n.push("border-t border-tab-table-th"),this.isInRange(e)&&!this.isRangeEdge(e)?n.push("bg-info-primary"):e.isDifferentMonth&&!this.isRangeEdge(e)&&n.push("bg-tab-table-th"),n.join(" ")},erase(){this.selectDate({date:x(ns.date.current)})},isInRange(e){return this.range&&this.range.length===2&&this.range[0]&&this.range[1]?x(e.date).isSameOrAfter(this.range[0])&&x(e.date).isSameOrBefore(this.range[1]):!1},isInvalidRange(){return this.selectedRange&&this.selectedRange.endDate?x(this.selectedRange.startDate).isAfter(x(this.selectedRange.endDate))||x(this.selectedRange.endDate).isBefore(x(this.selectedRange.startDate)):!1},isRangeEdge(e){return this.range&&this.range.length===2&&this.range[0]&&this.range[1]?x(e.date).isSame(this.range[0],"day")||x(e.date).isSame(this.range[1],"day"):!1},setYear(e){parseInt(e.srcElement.value)>0&&parseInt(e.srcElement.value)<9999&&(this.currentDay.year(e.srcElement.value),this.selectDate({date:this.currentDay.clone()}))},subYear(){parseFloat(this.currentDay.format("YYYY"))>0&&(this.currentDay.subtract(1,"year"),this.selectDate({date:this.currentDay.clone()}))},addYear(){this.currentDay.add(1,"year"),this.selectDate({date:this.currentDay.clone()})},toggleView(e){this.currentView=e,this.currentView==="years"&&setTimeout(()=>{this.$refs.year.select()},100),this.currentView==="days"&&setTimeout(()=>{this.$refs.hours.addEventListener("focus",function(t){this.select()}),this.$refs.minutes.addEventListener("focus",function(t){this.select()})},100)},setMonth(e){this.currentDay.month(e),this.selectDate({date:this.currentDay.clone()})},detectHoursChange(){parseFloat(this.hours)<0&&(this.hours=0),parseFloat(this.hours)>23&&(this.hours=23),this.selectDate({date:this.currentDay.clone()})},detectMinuteChange(){parseFloat(this.minutes)<0&&(this.minutes=0),parseFloat(this.minutes)>59&&(this.minutes=59),this.selectDate({date:this.currentDay.clone()})},checkClickedItem(e){this.$parent.$el.getAttribute("class").split(" ").includes("picker")&&(!this.$parent.$el.contains(e.srcElement)&&!this.clickedOnCalendar&&this.visible&&this.$emit("onClickOut",!0),setTimeout(()=>{this.clickedOnCalendar=!1},100))},selectDate(e){if([void 0].includes(e))this.$emit("set",null);else{if(this.side==="left"&&x(this.selectedRange.endDate).isValid()&&e.date.isAfter(this.selectedRange.endDate))return $.error(p("The left range will be invalid.")).subscribe(),!1;if(this.side==="right"&&x(this.selectedRange.startDate).isValid()&&e.date.isBefore(this.selectedRange.startDate))return $.error(p("The right range will be invalid.")).subscribe(),!1;this.currentDay=e.date,this.currentDay.hours(this.hours),this.currentDay.minutes(this.minutes),this.$emit("set",this.currentDay.format("YYYY-MM-DD HH:mm:ss"))}this.build()},subMonth(){this.currentDay.subtract(1,"month"),this.build()},addMonth(){this.currentDay.add(1,"month"),this.build()},resetCalendar(){this.calendar=[[]]},build(){this.resetCalendar(),this.currentDay.clone().startOf("month");const e=this.currentDay.clone().startOf("month"),t=this.currentDay.clone().endOf("month");for(;;){e.day()===0&&this.calendar[0].length>0&&this.calendar.push([]);let s=this.calendar.length-1;if(this.calendar[s].push({date:e.clone(),dayOfWeek:e.day(),isToday:e.isSame(x.now(),"day"),isDifferentMonth:!1,isNextMonth:!1,isPreviousMonth:!1}),e.isSame(t,"day"))break;e.add(1,"day")}if(this.calendar[0].length<7){const s=7-this.calendar[0].length,c=this.calendar[0][0].date.clone(),d=[];for(let n=0;nn.handleCalendarClick()),class:"flex bg-box-background flex-col rounded-lg overflow-hidden"},[d.currentView==="years"?(i(),r("div",Je,[l("div",et,[l("div",null,[l("button",{onClick:t[0]||(t[0]=a=>n.subMonth()),class:"w-8 h-8 ns-inset-button border outline-none text-numpad-text rounded"},st)]),l("div",nt,[l("span",{class:"mr-2 cursor-pointer border-b border-info-secondary border-dashed",onClick:t[1]||(t[1]=a=>n.toggleView("months"))},h(d.currentDay.format("MMM")),1),l("span",{class:"cursor-pointer border-b border-info-secondary border-dashed",onClick:t[2]||(t[2]=a=>n.toggleView("years"))},h(d.currentDay.format("YYYY")),1)]),l("div",null,[l("button",{onClick:t[3]||(t[3]=a=>n.addMonth()),class:"w-8 h-8 ns-inset-button border outline-none text-numpad-text rounded"},it)])]),l("div",rt,[l("div",at,[l("button",{onClick:t[4]||(t[4]=a=>n.subYear()),class:"px-2 py-2"},ot),l("div",ut,[l("input",{type:"text",ref:"year",class:"p-2 flex-auto w-full text-center outline-none",onChange:t[5]||(t[5]=a=>n.setYear(a)),value:d.currentDay.format("YYYY")},null,40,ct)]),l("button",{onClick:t[6]||(t[6]=a=>n.addYear()),class:"px-2 py-2"},ft)])]),l("div",mt,[l("button",{onClick:t[7]||(t[7]=a=>n.toggleView("days")),class:"p-2 w-full ns-inset-button border text-sm error hover:text-white rounded flex items-center justify-center"},h(n.__("Return To Calendar")),1)])])):u("",!0),d.currentView==="months"?(i(),r("div",gt,[l("div",bt,[l("div",null,[l("button",{onClick:t[8]||(t[8]=a=>n.subYear()),class:"w-8 h-8 ns-inset-button outline-none border rounded"},_t)]),l("div",yt,[l("span",vt,h(d.currentDay.format("MMM")),1),l("span",{class:"cursor-pointer border-b border-info-secondary border-dashed",onClick:t[9]||(t[9]=a=>n.toggleView("years"))},h(d.currentDay.format("YYYY")),1)]),l("div",null,[l("button",{onClick:t[10]||(t[10]=a=>n.addYear()),class:"w-8 h-8 ns-inset-button outline-none border rounded"},wt)])]),l("div",xt,[(i(!0),r(_,null,C(d.months,(a,o)=>(i(),r("div",{key:o,class:"h-8 flex justify-center items-center text-sm border-box-background"},[l("div",Dt,[l("div",{class:m([n.momentCopy.month(a).format("MM")===d.currentDay.format("MM")?"bg-info-secondary text-white":"hover:bg-numpad-hover","h-full w-full border-box-background flex items-center justify-center cursor-pointer"]),onClick:f=>n.setMonth(a)},h(n.momentCopy.format("MMM")),11,Ct)])]))),128))]),l("div",Mt,[l("button",{onClick:t[11]||(t[11]=a=>n.toggleView("days")),class:"p-2 w-full ns-inset-button border text-sm error rounded flex items-center justify-center"},h(n.__("Return To Calendar")),1)])])):u("",!0),d.currentView==="days"?(i(),r("div",Tt,[l("div",St,[l("div",null,[l("button",{onClick:t[12]||(t[12]=a=>n.subMonth()),class:"w-8 h-8 ns-inset-button border rounded"},Et)]),l("div",Rt,[l("span",{class:"mr-2 cursor-pointer border-b border-info-secondary border-dashed",onClick:t[13]||(t[13]=a=>n.toggleView("months"))},h(d.currentDay.format("MMM")),1),l("span",{class:"cursor-pointer border-b border-info-secondary border-dashed",onClick:t[14]||(t[14]=a=>n.toggleView("years"))},h(d.currentDay.format("YYYY")),1)]),l("div",null,[l("button",{onClick:t[15]||(t[15]=a=>n.addMonth()),class:"w-8 h-8 ns-inset-button border rounded"},Ot)])]),l("div",Pt,[l("div",jt,h(n.__("Sun")),1),l("div",At,h(n.__("Mon")),1),l("div",Ut,h(n.__("Tue")),1),l("div",Ht,h(n.__("Wed")),1),l("div",Lt,h(n.__("Thr")),1),l("div",Yt,h(n.__("Fri")),1),l("div",Vt,h(n.__("Sat")),1)]),(i(!0),r(_,null,C(d.calendar,(a,o)=>(i(),r("div",{key:o,class:"grid grid-flow-row grid-cols-7 grid-rows-1 gap-0 text-primary divide-x divide-y"},[(i(!0),r(_,null,C(d.daysOfWeek,(f,g)=>(i(),r("div",{key:g,class:"md:h-10 h-8 flex justify-center items-center text-sm border-tab-table-th"},[(i(!0),r(_,null,C(a,(b,S)=>(i(),r(_,null,[b.dayOfWeek===f?(i(),r("div",{key:S,class:m([n.getDayClass({day:b,_dayIndex:S,dayOfWeek:f,_index:g,currentDay:d.currentDay}),"h-full w-full flex items-center justify-center cursor-pointer"]),onClick:F=>n.selectDate(b)},[b.isDifferentMonth?u("",!0):(i(),r("span",It,h(b.date.format("DD")),1)),b.isDifferentMonth?(i(),r("span",Nt,h(b.date.format("DD")),1)):u("",!0)],10,Bt)):u("",!0)],64))),256))]))),128))]))),128))])):u("",!0),l("div",zt,[l("div",qt,[l("div",Wt,[l("div",Gt,[l("div",Kt,[l("button",{onClick:t[16]||(t[16]=a=>n.erase()),class:"border ns-inset-button text-sm error rounded md:w-10 w-8 md:h-10 h-8 flex items-center justify-center"},Xt)])])]),l("div",Zt,[d.currentView==="days"?(i(),r("div",Jt,[es,R(l("input",{placeholder:"HH",ref:"hours",onChange:t[17]||(t[17]=a=>n.detectHoursChange(a)),class:"w-12 p-1 text-center border border-numpad-edge bg-input-background outline-none text-sm active:border-numpad-edge","onUpdate:modelValue":t[18]||(t[18]=a=>d.hours=a),type:"number"},null,544),[[A,d.hours]]),ts,R(l("input",{placeholder:"mm",ref:"minutes",onChange:t[19]||(t[19]=a=>n.detectMinuteChange(a)),class:"w-12 p-1 text-center border border-numpad-edge bg-input-background outline-none text-sm active:border-numpad-edge","onUpdate:modelValue":t[20]||(t[20]=a=>d.minutes=a),type:"number"},null,544),[[A,d.minutes]])])):u("",!0)])])])])}const ce=D(Ze,[["render",ss]]),ls={data:()=>({}),props:["checked","field","label"],computed:{isChecked(){return this.field?this.field.value:this.checked},hasError(){return this.field.errors!==void 0&&this.field.errors.length>0}},methods:{toggleIt(){this.field!==void 0&&(this.field.value=!this.field.value),this.$emit("change",!this.checked)}}},is={class:"w-6 h-6 flex bg-input-background border-input-edge border-2 items-center justify-center cursor-pointer"},rs={key:0,class:"las la-check"};function as(e,t,s,c,d,n){return i(),r("div",{class:"flex ns-checkbox items-center justify-center cursor-pointer",onClick:t[0]||(t[0]=a=>n.toggleIt())},[l("div",is,[n.isChecked?(i(),r("i",rs)):u("",!0)]),s.label?(i(),r("label",{key:0,class:m([n.hasError?"has-error":"is-pristine","mx-2"])},h(s.label),3)):u("",!0),s.field?(i(),r("label",{key:1,class:m([n.hasError?"has-error":"is-pristine","mx-2"])},h(s.field.label),3)):u("",!0)])}const ds=D(ls,[["render",as]]),os={name:"ns-close-button",methods:{}},us={class:"outline-none ns-close-button hover:border-transparent border rounded-full h-8 min-w-[2rem] items-center justify-center"},cs=l("i",{class:"las la-times"},null,-1);function hs(e,t,s,c,d,n){return i(),r("button",us,[cs,v(),y(e.$slots,"default")])}const fs=D(os,[["render",hs]]),ms={data(){return{fields:[],validation:new ie}},props:["popup"],methods:{__:p,popupCloser:re,popupResolver:ae,closePopup(){this.popupResolver(!1)},useFilters(){this.popupResolver(this.validation.extractFields(this.fields))},clearFilters(){this.fields.forEach(e=>e.value=""),this.popupResolver(null)}},mounted(){this.fields=this.validation.createFields(this.popup.params.queryFilters),this.popupCloser()}},gs={class:"ns-box shadow-lg w-95vw h-95vh md:w-3/5-screen md:h-5/6-screen flex flex-col"},bs={class:"p-2 border-b ns-box-header flex justify-between items-center"},ps={class:"p-2 ns-box-body flex-auto"},_s={class:"p-2 flex justify-between ns-box-footer border-t"};function ys(e,t,s,c,d,n){const a=w("ns-close-button"),o=w("ns-field"),f=w("ns-button");return i(),r("div",gs,[l("div",bs,[l("h3",null,h(n.__("Search Filters")),1),l("div",null,[T(a,{onClick:t[0]||(t[0]=g=>n.closePopup())})])]),l("div",ps,[(i(!0),r(_,null,C(d.fields,(g,b)=>(i(),E(o,{field:g,key:b},null,8,["field"]))),128))]),l("div",_s,[l("div",null,[T(f,{onClick:t[1]||(t[1]=g=>n.clearFilters()),type:"error"},{default:M(()=>[v(h(n.__("Clear Filters")),1)]),_:1})]),l("div",null,[T(f,{onClick:t[2]||(t[2]=g=>n.useFilters()),type:"info"},{default:M(()=>[v(h(n.__("Use Filters")),1)]),_:1})])])])}const vs=D(ms,[["render",ys]]),ks={data:()=>({prependOptions:!1,showOptions:!0,isRefreshing:!1,sortColumn:"",searchInput:"",queryFiltersString:"",searchQuery:"",page:1,bulkAction:"",bulkActions:[],queryFilters:[],headerButtons:[],withFilters:!1,columns:[],selectedEntries:[],globallyChecked:!1,result:{current_page:null,data:[],first_page_url:null,from:null,last_page:null,last_page_url:null,next_page_url:null,path:null,per_page:null,prev_page_url:null,to:null,total:null}}),name:"ns-crud",mounted(){this.identifier!==void 0&&nsCrudHandler.defineInstance(this.identifier,this),this.loadConfig()},props:["src","createUrl","mode","identifier","queryParams","popup"],computed:{getParsedSrc(){return`${this.src}?${this.sortColumn}${this.searchQuery}${this.queryFiltersString}${this.queryPage}${this.getQueryParams()?"&"+this.getQueryParams():""}`},showQueryFilters(){return this.queryFilters.length>0},getSelectedAction(){const e=this.bulkActions.filter(t=>t.identifier===this.bulkAction);return e.length>0?e[0]:!1},pagination(){return this.result?this.pageNumbers(this.result.last_page,this.result.current_page):[]},queryPage(){return this.result?`&page=${this.page}`:""},resultInfo(){return p("displaying {perPage} on {items} items").replace("{perPage}",this.result.per_page||0).replace("{items}",this.result.total||0)},headerButtonsComponents(){return this.headerButtons.map(e=>ke(()=>new Promise(t=>{t(nsExtraComponents[e])})))}},methods:{__:p,getQueryParams(){return this.queryParams?Object.keys(this.queryParams).map(e=>`${e}=${this.queryParams[e]}`).join("&"):""},pageNumbers(e,t){var s=[];t-3>1&&s.push(1,"...");for(let c=1;c<=e;c++)t+3>c&&t-3c>0||typeof c=="string")},downloadContent(){nsHttpClient.post(`${this.src}/export?${this.getParsedSrc}`,{entries:this.selectedEntries.map(e=>e.$id)}).subscribe(e=>{setTimeout(()=>document.location=e.url,300),$.success(p("The document has been generated.")).subscribe()},e=>{$.error(e.message||p("Unexpected error occurred.")).subscribe()})},clearSelectedEntries(){L.show(G,{title:p("Clear Selected Entries ?"),message:p("Would you like to clear all selected entries ?"),onAction:e=>{e&&(this.selectedEntries=[],this.handleGlobalChange(!1))}})},refreshRow(e){if(console.log({row:e}),e.$checked===!0)this.selectedEntries.filter(s=>s.$id===e.$id).length===0&&this.selectedEntries.push(e);else{const t=this.selectedEntries.filter(s=>s.$id===e.$id);if(t.length>0){const s=this.selectedEntries.indexOf(t[0]);this.selectedEntries.splice(s,1)}}},handleShowOptions(e){this.result.data.forEach(t=>{t.$id!==e.$id&&(t.$toggled=!1)})},handleGlobalChange(e){this.globallyChecked=e,this.result.data.forEach(t=>{t.$checked=e,this.refreshRow(t)})},loadConfig(){nsHttpClient.get(`${this.src}/config?${this.getQueryParams()}`).subscribe(t=>{this.columns=t.columns,this.bulkActions=t.bulkActions,this.queryFilters=t.queryFilters,this.prependOptions=t.prependOptions,this.showOptions=t.showOptions,this.headerButtons=t.headerButtons||[],this.refresh()},t=>{$.error(t.message,"OK",{duration:!1}).subscribe()})},cancelSearch(){this.searchInput="",this.search()},search(){this.searchInput?this.searchQuery=`&search=${this.searchInput}`:this.searchQuery="",this.page=1,this.refresh()},sort(e){if(this.columns[e].$sort===!1)return $.error(p("Sorting is explicitely disabled on this column")).subscribe();for(let t in this.columns)t!==e&&(this.columns[t].$sorted=!1,this.columns[t].$direction="");switch(this.columns[e].$sorted=!0,this.columns[e].$direction){case"asc":this.columns[e].$direction="desc";break;case"desc":this.columns[e].$direction="";break;case"":default:this.columns[e].$direction="asc";break}["asc","desc"].includes(this.columns[e].$direction)?this.sortColumn=`active=${e}&direction=${this.columns[e].$direction}`:this.sortColumn="",this.$emit("sort",this.columns[e]),this.refresh()},bulkDo(){if(this.bulkAction)if(this.selectedEntries.length>0){if(confirm(this.getSelectedAction.confirm||p("Would you like to perform the selected bulk action on the selected entries ?")))return nsHttpClient.post(`${this.src}/bulk-actions`,{action:this.bulkAction,entries:this.selectedEntries.map(e=>e.$id)}).subscribe({next:e=>{$.info(e.message).subscribe(),this.selectedEntries=[],this.refresh()},error:e=>{$.error(e.message).subscribe()}})}else return $.error(p("No selection has been made.")).subscribe();else return $.error(p("No action has been selected.")).subscribe()},async openQueryFilter(){try{const e=await new Promise((t,s)=>{L.show(vs,{resolve:t,reject:s,queryFilters:this.queryFilters})});this.withFilters=!1,this.queryFiltersString="",e!==null&&(this.withFilters=!0,this.queryFiltersString="&queryFilters="+encodeURIComponent(JSON.stringify(e))),this.refresh()}catch{}},refresh(){this.globallyChecked=!1,this.isRefreshing=!0,nsHttpClient.get(`${this.getParsedSrc}`).subscribe(t=>{t.data=t.data.map(s=>(this.selectedEntries.filter(d=>d.$id===s.$id).length>0&&(s.$checked=!0),s)),this.isRefreshing=!1,this.result=t,this.page=t.current_page},t=>{this.isRefreshing=!1,$.error(t.message).subscribe()})}}},ws={key:0,id:"crud-table-header",class:"p-2 border-b flex flex-col md:flex-row justify-between flex-wrap"},xs={id:"crud-search-box",class:"w-full md:w-auto -mx-2 mb-2 md:mb-0 flex"},Ds={key:0,class:"px-2 flex items-center justify-center"},Cs=["href"],Ms=l("i",{class:"las la-plus"},null,-1),Ts=[Ms],Ss={class:"px-2"},$s={class:"rounded-full p-1 ns-crud-input flex"},Es=l("i",{class:"las la-search"},null,-1),Rs=[Es],Fs=l("i",{class:"las la-times text-white"},null,-1),Os=[Fs],Ps={class:"px-2 flex items-center justify-center"},js={key:1,class:"px-2 flex items-center"},As={key:0,class:"las la-filter"},Us={key:1,class:"las la-check"},Hs={key:2,class:"ml-1"},Ls={key:3,class:"ml-1"},Ys={key:2,id:"custom-buttons"},Vs={id:"crud-buttons",class:"-mx-1 flex flex-wrap w-full md:w-auto"},Bs={key:0,class:"px-1 flex items-center"},Is=l("i",{class:"lar la-check-square"},null,-1),Ns={class:"px-1 flex items-center"},zs=l("i",{class:"las la-download"},null,-1),qs={class:"flex p-2"},Ws={class:"overflow-x-auto flex-auto"},Gs={key:0,class:"table ns-table w-full"},Ks={class:"text-center px-2 border w-16 py-2"},Qs={key:0,class:"text-left px-2 py-2 w-16 border"},Xs=["onClick"],Zs={class:"w-full flex justify-between items-center"},Js={class:"flex"},en={class:"h-6 w-6 flex justify-center items-center"},tn={key:0,class:"las la-sort-amount-up"},sn={key:1,class:"las la-sort-amount-down"},nn={key:1,class:"text-left px-2 py-2 w-16 border"},ln={key:1},rn=["colspan"],an={class:"p-2 flex border-t flex-col md:flex-row justify-between footer"},dn={key:0,id:"grouped-actions",class:"mb-2 md:mb-0 flex justify-between rounded-full ns-crud-input p-1"},on={class:"bg-input-disabled",selected:"",value:""},un=["value"],cn={class:"flex"},hn={class:"items-center flex text-primary mx-4"},fn={id:"pagination",class:"flex items-center -mx-1"},mn=l("i",{class:"las la-angle-double-left"},null,-1),gn=[mn],bn=["onClick"],pn=l("i",{class:"las la-angle-double-right"},null,-1),_n=[pn];function yn(e,t,s,c,d,n){const a=w("ns-checkbox"),o=w("ns-table-row");return i(),r("div",{id:"crud-table",class:m(["w-full rounded-lg",s.mode!=="light"?"shadow mb-8":""])},[s.mode!=="light"?(i(),r("div",ws,[l("div",xs,[s.createUrl?(i(),r("div",Ds,[l("a",{href:s.createUrl||"#",class:"rounded-full ns-crud-button text-sm h-10 flex items-center justify-center cursor-pointer px-3 outline-none border"},Ts,8,Cs)])):u("",!0),l("div",Ss,[l("div",$s,[R(l("input",{onKeypress:t[0]||(t[0]=Y(f=>n.search(),["enter"])),"onUpdate:modelValue":t[1]||(t[1]=f=>e.searchInput=f),type:"text",class:"w-36 md:w-auto bg-transparent outline-none px-2"},null,544),[[A,e.searchInput]]),l("button",{onClick:t[2]||(t[2]=f=>n.search()),class:"rounded-full w-8 h-8 outline-none ns-crud-input-button"},Rs),e.searchQuery?(i(),r("button",{key:0,onClick:t[3]||(t[3]=f=>n.cancelSearch()),class:"ml-1 rounded-full w-8 h-8 bg-error-secondary outline-none hover:bg-error-tertiary"},Os)):u("",!0)])]),l("div",Ps,[l("button",{onClick:t[4]||(t[4]=f=>n.refresh()),class:"rounded-full text-sm h-10 px-3 outline-none border ns-crud-button"},[l("i",{class:m([e.isRefreshing?"animate-spin":"","las la-sync"])},null,2)])]),n.showQueryFilters?(i(),r("div",js,[l("button",{onClick:t[5]||(t[5]=f=>n.openQueryFilter()),class:m([e.withFilters?"table-filters-enabled":"table-filters-disabled","ns-crud-button border rounded-full text-sm h-10 px-3 outline-none"])},[e.withFilters?u("",!0):(i(),r("i",As)),e.withFilters?(i(),r("i",Us)):u("",!0),e.withFilters?u("",!0):(i(),r("span",Hs,h(n.__("Filters")),1)),e.withFilters?(i(),r("span",Ls,h(n.__("Has Filters")),1)):u("",!0)],2)])):u("",!0),n.headerButtonsComponents.length>0?(i(),r("div",Ys,[(i(!0),r(_,null,C(n.headerButtonsComponents,(f,g)=>(i(),E(W(f),{onRefresh:t[6]||(t[6]=b=>n.refresh()),result:e.result,key:g},null,40,["result"]))),128))])):u("",!0)]),l("div",Vs,[e.selectedEntries.length>0?(i(),r("div",Bs,[l("button",{onClick:t[7]||(t[7]=f=>n.clearSelectedEntries()),class:"flex justify-center items-center rounded-full text-sm h-10 px-3 outline-none ns-crud-button border"},[Is,v(" "+h(n.__("{entries} entries selected").replace("{entries}",e.selectedEntries.length)),1)])])):u("",!0),l("div",Ns,[l("button",{onClick:t[8]||(t[8]=f=>n.downloadContent()),class:"flex justify-center items-center rounded-full text-sm h-10 px-3 ns-crud-button border outline-none"},[zs,v(" "+h(n.__("Download")),1)])])])])):u("",!0),l("div",qs,[l("div",Ws,[Object.values(e.columns).length>0?(i(),r("table",Gs,[l("thead",null,[l("tr",null,[l("th",Ks,[T(a,{checked:e.globallyChecked,onChange:t[9]||(t[9]=f=>n.handleGlobalChange(f))},null,8,["checked"])]),e.prependOptions&&e.showOptions?(i(),r("th",Qs)):u("",!0),(i(!0),r(_,null,C(e.columns,(f,g)=>(i(),r("th",{key:g,onClick:b=>n.sort(g),style:we({"min-width":f.width||"auto"}),class:"cursor-pointer justify-betweenw-40 border text-left px-2 py-2"},[l("div",Zs,[l("span",Js,h(f.label),1),l("span",en,[f.$direction==="desc"?(i(),r("i",tn)):u("",!0),f.$direction==="asc"?(i(),r("i",sn)):u("",!0)])])],12,Xs))),128)),!e.prependOptions&&e.showOptions?(i(),r("th",nn)):u("",!0)])]),l("tbody",null,[e.result.data!==void 0&&e.result.data.length>0?(i(!0),r(_,{key:0},C(e.result.data,(f,g)=>(i(),E(o,{key:g,onUpdated:t[10]||(t[10]=b=>n.refreshRow(b)),columns:e.columns,prependOptions:e.prependOptions,showOptions:e.showOptions,row:f,onReload:t[11]||(t[11]=b=>n.refresh()),onToggled:t[12]||(t[12]=b=>n.handleShowOptions(b))},null,8,["columns","prependOptions","showOptions","row"]))),128)):u("",!0),!e.result||e.result.data.length===0?(i(),r("tr",ln,[l("td",{colspan:Object.values(e.columns).length+2,class:"text-center border py-3"},h(n.__("There is nothing to display...")),9,rn)])):u("",!0)])])):u("",!0)])]),l("div",an,[e.bulkActions.length>0?(i(),r("div",dn,[R(l("select",{class:"outline-none bg-transparent","onUpdate:modelValue":t[13]||(t[13]=f=>e.bulkAction=f),id:"grouped-actions"},[l("option",on,[y(e.$slots,"bulk-label",{},()=>[v(h(n.__("Bulk Actions")),1)])]),(i(!0),r(_,null,C(e.bulkActions,(f,g)=>(i(),r("option",{class:"bg-input-disabled",key:g,value:f.identifier},h(f.label),9,un))),128))],512),[[U,e.bulkAction]]),l("button",{onClick:t[14]||(t[14]=f=>n.bulkDo()),class:"ns-crud-input-button h-8 px-3 outline-none rounded-full flex items-center justify-center"},[y(e.$slots,"bulk-go",{},()=>[v(h(n.__("Apply")),1)])])])):u("",!0),l("div",cn,[l("div",hn,h(n.resultInfo),1),l("div",fn,[e.result.current_page?(i(),r(_,{key:0},[l("a",{href:"javascript:void(0)",onClick:t[15]||(t[15]=f=>{e.page=e.result.first_page,n.refresh()}),class:"mx-1 flex items-center justify-center h-8 w-8 rounded-full ns-crud-button border shadow"},gn),(i(!0),r(_,null,C(n.pagination,(f,g)=>(i(),r(_,null,[e.page!=="..."?(i(),r("a",{key:g,class:m([e.page==f?"bg-info-tertiary border-transparent text-white":"","mx-1 flex items-center justify-center h-8 w-8 rounded-full ns-crud-button border"]),onClick:b=>{e.page=f,n.refresh()},href:"javascript:void(0)"},h(f),11,bn)):u("",!0),e.page==="..."?(i(),r("a",{key:g,href:"javascript:void(0)",class:"mx-1 flex items-center justify-center h-8 w-8 rounded-full ns-crud-button border"},"...")):u("",!0)],64))),256)),l("a",{href:"javascript:void(0)",onClick:t[16]||(t[16]=f=>{e.page=e.result.last_page,n.refresh()}),class:"mx-1 flex items-center justify-center h-8 w-8 rounded-full ns-crud-button border shadow"},_n)],64)):u("",!0)])])])],2)}const vn=D(ks,[["render",yn]]),kn={data:()=>({form:{},globallyChecked:!1,formValidation:new ie,rows:[]}),emits:["updated","saved"],mounted(){this.loadForm()},props:["src","createUrl","fieldClass","returnUrl","submitUrl","submitMethod","disableTabs","queryParams","popup"],computed:{activeTabFields(){for(let e in this.form.tabs)if(this.form.tabs[e].active)return this.form.tabs[e].fields;return[]},activeTabIdentifier(){for(let e in this.form.tabs)if(this.form.tabs[e].active)return e;return{}}},methods:{__:p,popupResolver:ae,toggle(e){for(let t in this.form.tabs)this.form.tabs[t].active=!1;this.form.tabs[e].active=!0},async handleSaved(e,t,s){(await this.loadForm()).form.tabs[t].fields.filter(d=>{d.name===s.name&&e.data.entry&&(d.value=e.data.entry.id)})},handleClose(){this.popup&&this.popupResolver(!1)},submit(){if(this.formValidation.validateForm(this.form).length>0)return $.error(p("Unable to proceed the form is not valid"),p("Close")).subscribe();if(this.formValidation.disableForm(this.form),this.submitUrl===void 0)return $.error(p("No submit URL was provided"),p("Okay")).subscribe();H[this.submitMethod?this.submitMethod.toLowerCase():"post"](this.appendQueryParamas(this.submitUrl),this.formValidation.extractForm(this.form)).subscribe(e=>{if(e.status==="success")if(this.popup)this.popupResolver(e);else{if(this.submitMethod&&this.submitMethod.toLowerCase()==="post"&&this.returnUrl!==!1)return document.location=e.data.editUrl||this.returnUrl;$.info(e.message,p("Okay"),{duration:3e3}).subscribe(),this.$emit("saved",e)}this.formValidation.enableForm(this.form)},e=>{$.error(e.message,void 0,{duration:5e3}).subscribe(),e.data!==void 0&&this.formValidation.triggerError(this.form,e.data),this.formValidation.enableForm(this.form)})},handleGlobalChange(e){this.globallyChecked=e,this.rows.forEach(t=>t.$checked=e)},loadForm(){return new Promise((e,t)=>{H.get(`${this.appendQueryParamas(this.src)}`).subscribe({next:c=>{e(c),this.form=this.parseForm(c.form),oe.doAction("ns-crud-form-loaded",this),this.$emit("updated",this.form)},error:c=>{t(c),$.error(c.message,p("Okay"),{duration:0}).subscribe()}})})},appendQueryParamas(e){if(this.queryParams===void 0)return e;const t=Object.keys(this.queryParams).map(s=>`${encodeURIComponent(s)}=${encodeURIComponent(this.queryParams[s])}`).join("&");return e.includes("?")?`${e}&${t}`:`${e}?${t}`},parseForm(e){e.main.value=e.main.value===void 0?"":e.main.value,e.main=this.formValidation.createFields([e.main])[0];let t=0;for(let s in e.tabs)t===0&&(e.tabs[s].active=!0),e.tabs[s].active=e.tabs[s].active===void 0?!1:e.tabs[s].active,e.tabs[s].fields=this.formValidation.createFields(e.tabs[s].fields),t++;return e}}},wn={key:0,class:"flex items-center justify-center h-full"},xn={key:0,class:"box-header border-b box-border p-2 flex justify-between items-center"},Dn={class:"text-primary font-bold text-lg"},Cn={class:"flex flex-col"},Mn={key:0,class:"flex justify-between items-center"},Tn={for:"title",class:"font-bold my-2 text-primary"},Sn={key:0},$n={for:"title",class:"text-sm my-2"},En=["href"],Rn=["disabled"],Fn=["disabled"],On={key:0,class:"text-xs text-primary py-1"},Pn={key:0},jn={key:1},An={class:"header flex ml-4",style:{"margin-bottom":"-1px"}},Un=["onClick"],Hn={class:"ns-tab-item"},Ln={class:"border p-4 rounded"},Yn={class:"-mx-4 flex flex-wrap"},Vn={key:0,class:"flex justify-end"},Bn=["disabled"];function In(e,t,s,c,d,n){const a=w("ns-spinner"),o=w("ns-close-button"),f=w("ns-field");return i(),r(_,null,[Object.values(e.form).length===0?(i(),r("div",wn,[T(a)])):u("",!0),Object.values(e.form).length>0?(i(),r("div",{key:1,class:m(["form flex-auto",s.popup?"bg-box-background w-95vw md:w-2/3-screen":""]),id:"crud-form"},[s.popup?(i(),r("div",xn,[l("h2",Dn,h(s.popup.params.title),1),l("div",null,[T(o,{onClick:t[0]||(t[0]=g=>n.handleClose())})])])):u("",!0),Object.values(e.form).length>0?(i(),r("div",{key:1,class:m(s.popup?"p-2":"")},[l("div",Cn,[e.form.main?(i(),r("div",Mn,[l("label",Tn,[e.form.main.name?(i(),r("span",Sn,h(e.form.main.label),1)):u("",!0)]),l("div",$n,[s.returnUrl&&!s.popup?(i(),r("a",{key:0,href:s.returnUrl,class:"rounded-full border px-2 py-1 ns-inset-button error"},h(n.__("Go Back")),9,En)):u("",!0)])])):u("",!0),e.form.main.name?(i(),r(_,{key:1},[l("div",{class:m([e.form.main.disabled?"disabled":e.form.main.errors.length>0?"error":"info","input-group flex border-2 rounded overflow-hidden"])},[R(l("input",{"onUpdate:modelValue":t[1]||(t[1]=g=>e.form.main.value=g),onKeydown:t[2]||(t[2]=Y(g=>n.submit(),["enter"])),onKeypress:t[3]||(t[3]=g=>e.formValidation.checkField(e.form.main)),onBlur:t[4]||(t[4]=g=>e.formValidation.checkField(e.form.main)),onChange:t[5]||(t[5]=g=>e.formValidation.checkField(e.form.main)),disabled:e.form.main.disabled,type:"text",class:"flex-auto outline-none h-10 px-2"},null,40,Rn),[[A,e.form.main.value]]),l("button",{disabled:e.form.main.disabled,class:m([e.form.main.disabled?"disabled":e.form.main.errors.length>0?"error":"","outline-none px-4 h-10 text-white"]),onClick:t[6]||(t[6]=g=>n.submit())},h(n.__("Save")),11,Fn)],2),e.form.main.description&&e.form.main.errors.length===0?(i(),r("p",On,h(e.form.main.description),1)):u("",!0),(i(!0),r(_,null,C(e.form.main.errors,(g,b)=>(i(),r("p",{key:b,class:"text-xs py-1 text-error-tertiary"},[g.identifier==="required"?(i(),r("span",Pn,[y(e.$slots,"error-required",{},()=>[v(h(g.identifier),1)])])):u("",!0),g.identifier==="invalid"?(i(),r("span",jn,[y(e.$slots,"error-invalid",{},()=>[v(h(g.message),1)])])):u("",!0)]))),128))],64)):u("",!0)]),s.disableTabs!=="true"?(i(),r("div",{key:0,id:"tabs-container",class:m([s.popup?"mt-5":"my-5","ns-tab"])},[l("div",An,[(i(!0),r(_,null,C(e.form.tabs,(g,b)=>(i(),r("div",{key:b,onClick:S=>n.toggle(b),class:m([g.active?"active border border-b-transparent":"inactive border","tab rounded-tl rounded-tr border px-3 py-2 cursor-pointer"]),style:{"margin-right":"-1px"}},h(g.label),11,Un))),128))]),l("div",Hn,[l("div",Ln,[l("div",Yn,[(i(!0),r(_,null,C(n.activeTabFields,(g,b)=>(i(),r("div",{key:`${n.activeTabIdentifier}-${b}`,class:m(s.fieldClass||"px-4 w-full md:w-1/2 lg:w-1/3")},[T(f,{onSaved:S=>n.handleSaved(S,n.activeTabIdentifier,g),onBlur:S=>e.formValidation.checkField(g),onChange:S=>e.formValidation.checkField(g),field:g},null,8,["onSaved","onBlur","onChange","field"])],2))),128))]),e.form.main.name?u("",!0):(i(),r("div",Vn,[l("div",{class:m(["ns-button",e.form.main.disabled?"default":e.form.main.errors.length>0?"error":"info"])},[l("button",{disabled:e.form.main.disabled,onClick:t[7]||(t[7]=g=>n.submit()),class:"outline-none px-4 h-10 border-l"},h(n.__("Save")),9,Bn)],2)]))])])],2)):u("",!0)],2)):u("",!0)],2)):u("",!0)],64)}const Nn=D(kn,[["render",In]]),zn={data:()=>({}),mounted(){},computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"bg-input-edge cursor-not-allowed":"bg-transparent"},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"}},props:["placeholder","leading","type","field"]},qn={class:"flex flex-auto flex-col mb-2"},Wn=["for"],Gn={key:0,class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},Kn={class:"sm:text-sm sm:leading-5"},Qn=["disabled","id","placeholder"];function Xn(e,t,s,c,d,n){const a=w("ns-field-description");return i(),r("div",qn,[l("label",{for:s.field.name,class:m([n.hasError?"text-error-primary":"text-primary","block leading-5 font-medium"])},[y(e.$slots,"default")],10,Wn),l("div",{class:m([n.hasError?"border-error-primary":"border-input-edge","bg-input-background text-secondary mt-1 relative border-2 rounded-md focus:shadow-sm"])},[s.leading?(i(),r("div",Gn,[l("span",Kn,h(s.leading),1)])):u("",!0),R(l("input",{disabled:s.field.disabled,"onUpdate:modelValue":t[0]||(t[0]=o=>s.field.value=o),onBlur:t[1]||(t[1]=o=>e.$emit("blur",this)),onChange:t[2]||(t[2]=o=>e.$emit("change",this)),id:s.field.name,type:"date",class:m([n.inputClass,"form-input block w-full sm:text-sm sm:leading-5 h-10"]),placeholder:s.placeholder},null,42,Qn),[[A,s.field.value]])],2),T(a,{field:s.field},null,8,["field"])])}const Zn=D(zn,[["render",Xn]]),he={isSame:(e,t,s)=>{let c=new Date(e),d=new Date(t);return s==="date"&&(c.setHours(0,0,0,0),d.setHours(0,0,0,0)),c.getTime()===d.getTime()},daysInMonth:(e,t)=>new Date(e,t,0).getDate(),weekNumber:e=>Ee(e),format:(e,t)=>N(e,t),nextMonth:e=>{let t=new Date(e.getTime());return t.setDate(1),t.setMonth(t.getMonth()+1),t},prevMonth:e=>{let t=new Date(e.getTime());return t.setDate(1),t.setMonth(t.getMonth()-1),t},validateDateRange:(e,t,s)=>{let c=new Date(s),d=new Date(t);return s&&e.getTime()>c.getTime()?c:t&&e.getTime()({...{direction:"ltr",format:"mm/dd/yyyy",separator:" - ",applyLabel:"Apply",cancelLabel:"Cancel",weekLabel:"W",customRangeLabel:"Custom Range",daysOfWeek:N.i18n.dayNames.slice(0,7).map(s=>s.substring(0,2)),monthNames:N.i18n.monthNames.slice(0,12),firstDay:0},...e}),yearMonth:e=>{let t=e.getMonth()+1;return e.getFullYear()+(t<10?"0":"")+t},isValidDate:e=>e instanceof Date&&!isNaN(e)},K={props:{dateUtil:{type:[Object,String],default:"native"}},created(){this.$dateUtil=he}},Jn={mixins:[K],name:"calendar",props:{monthDate:Date,localeData:Object,start:Date,end:Date,minDate:Date,maxDate:Date,showDropdowns:{type:Boolean,default:!1},showWeekNumbers:{type:Boolean,default:!1},dateFormat:{type:Function,default:null}},data(){let e=this.monthDate||this.start||new Date;return{currentMonthDate:e,year_text:e.getFullYear()}},methods:{prevMonthClick(){this.changeMonthDate(this.$dateUtil.prevMonth(this.currentMonthDate))},nextMonthClick(){this.changeMonthDate(this.$dateUtil.nextMonth(this.currentMonthDate))},changeMonthDate(e,t=!0){let s=this.$dateUtil.yearMonth(this.currentMonthDate);this.currentMonthDate=this.$dateUtil.validateDateRange(e,this.minDate,this.maxDate),t&&s!==this.$dateUtil.yearMonth(this.currentMonthDate)&&this.$emit("change-month",{month:this.currentMonthDate.getMonth()+1,year:this.currentMonthDate.getFullYear()}),this.checkYear()},dayClass(e){let t=new Date(e);t.setHours(0,0,0,0);let s=new Date(this.start);s.setHours(0,0,0,0);let c=new Date(this.end);c.setHours(0,0,0,0);let d={off:e.getMonth()+1!==this.month,weekend:e.getDay()===6||e.getDay()===0,today:t.setHours(0,0,0,0)==new Date().setHours(0,0,0,0),active:t.setHours(0,0,0,0)==new Date(this.start).setHours(0,0,0,0)||t.setHours(0,0,0,0)==new Date(this.end).setHours(0,0,0,0),"in-range":t>=s&&t<=c,"start-date":t.getTime()===s.getTime(),"end-date":t.getTime()===c.getTime(),disabled:this.minDate&&t.getTime()this.maxDate.getTime()};return this.dateFormat?this.dateFormat(d,e):d},checkYear(){this.$refs.yearSelect!==document.activeElement&&this.$nextTick(()=>{this.year_text=this.monthDate.getFullYear()})}},computed:{monthName(){return this.locale.monthNames[this.currentMonthDate.getMonth()]},year:{get(){return this.year_text},set(e){this.year_text=e;let t=this.$dateUtil.validateDateRange(new Date(e,this.month,1),this.minDate,this.maxDate);this.$dateUtil.isValidDate(t)&&this.$emit("change-month",{month:t.getMonth(),year:t.getFullYear()})}},month:{get(){return this.currentMonthDate.getMonth()+1},set(e){let t=this.$dateUtil.validateDateRange(new Date(this.year,e-1,1),this.minDate,this.maxDate);this.$emit("change-month",{month:t.getMonth()+1,year:t.getFullYear()})}},calendar(){let e=this.month,t=this.currentMonthDate.getFullYear(),s=new Date(t,e-1,1),c=this.$dateUtil.prevMonth(s).getMonth()+1,d=this.$dateUtil.prevMonth(s).getFullYear(),n=new Date(d,e-1,0).getDate(),a=s.getDay(),o=[];for(let b=0;b<6;b++)o[b]=[];let f=n-a+this.locale.firstDay+1;f>n&&(f-=7),a===this.locale.firstDay&&(f=n-6);let g=new Date(d,c-1,f,12,0,0);for(let b=0,S=0,F=0;b<6*7;b++,S++,g.setDate(g.getDate()+1))b>0&&S%7===0&&(S=0,F++),o[F][S]=new Date(g.getTime());return o},months(){let e=this.locale.monthNames.map((t,s)=>({label:t,value:s}));if(this.maxDate&&this.minDate){let t=this.maxDate.getFullYear()-this.minDate.getFullYear();if(t<2){let s=[];if(t<1)for(let c=this.minDate.getMonth();c<=this.maxDate.getMonth();c++)s.push(c);else{for(let c=0;c<=this.maxDate.getMonth();c++)s.push(c);for(let c=this.minDate.getMonth();c<12;c++)s.push(c)}if(s.length>0)return e.filter(c=>s.find(d=>c.value===d)>-1)}}return e},locale(){return this.$dateUtil.localeData(this.localeData)}},watch:{monthDate(e){this.currentMonthDate.getTime()!==e.getTime()&&this.changeMonthDate(e,!1)}}},fe=e=>(ne("data-v-66e2a2e7"),e=e(),le(),e),el={class:"table-condensed"},tl=fe(()=>l("span",null,null,-1)),sl=[tl],nl=["colspan"],ll={class:"row mx-1"},il=["value"],rl=["colspan"],al=fe(()=>l("span",null,null,-1)),dl=[al],ol={key:0,class:"week"},ul={key:0,class:"week"},cl=["onClick","onMouseover"];function hl(e,t,s,c,d,n){return i(),r("table",el,[l("thead",null,[l("tr",null,[l("th",{class:"prev available",onClick:t[0]||(t[0]=(...a)=>n.prevMonthClick&&n.prevMonthClick(...a)),tabindex:"0"},sl),s.showDropdowns?(i(),r("th",{key:0,colspan:s.showWeekNumbers?6:5,class:"month"},[l("div",ll,[R(l("select",{"onUpdate:modelValue":t[1]||(t[1]=a=>n.month=a),class:"monthselect col"},[(i(!0),r(_,null,C(n.months,a=>(i(),r("option",{key:a.value,value:a.value+1},h(a.label),9,il))),128))],512),[[U,n.month]]),R(l("input",{ref:"yearSelect",type:"number","onUpdate:modelValue":t[2]||(t[2]=a=>n.year=a),onBlur:t[3]||(t[3]=(...a)=>n.checkYear&&n.checkYear(...a)),class:"yearselect col"},null,544),[[A,n.year]])])],8,nl)):(i(),r("th",{key:1,colspan:s.showWeekNumbers?6:5,class:"month"},h(n.monthName)+" "+h(n.year),9,rl)),l("th",{class:"next available",onClick:t[4]||(t[4]=(...a)=>n.nextMonthClick&&n.nextMonthClick(...a)),tabindex:"0"},dl)])]),l("tbody",null,[l("tr",null,[s.showWeekNumbers?(i(),r("th",ol,h(n.locale.weekLabel),1)):u("",!0),(i(!0),r(_,null,C(n.locale.daysOfWeek,a=>(i(),r("th",{key:a},h(a),1))),128))]),(i(!0),r(_,null,C(n.calendar,(a,o)=>(i(),r("tr",{key:o},[s.showWeekNumbers&&(o%7||o===0)?(i(),r("td",ul,h(e.$dateUtil.weekNumber(a[0])),1)):u("",!0),(i(!0),r(_,null,C(a,(f,g)=>(i(),r("td",{class:m(n.dayClass(f)),onClick:b=>e.$emit("dateClick",f),onMouseover:b=>e.$emit("hoverDate",f),key:g},[y(e.$slots,"date-slot",{date:f},()=>[v(h(f.getDate()),1)],!0)],42,cl))),128))]))),128))])])}const fl=D(Jn,[["render",hl],["__scopeId","data-v-66e2a2e7"]]),ml={props:{miniuteIncrement:{type:Number,default:5},hour24:{type:Boolean,default:!0},secondPicker:{type:Boolean,default:!1},currentTime:{default(){return new Date}},readonly:{type:Boolean,default:!1}},data(){let e=this.currentTime?this.currentTime:new Date,t=e.getHours();return{hour:this.hour24?t:t%12||12,minute:e.getMinutes()-e.getMinutes()%this.miniuteIncrement,second:e.getSeconds(),ampm:t<12?"AM":"PM"}},computed:{hours(){let e=[],t=this.hour24?24:12;for(let s=0;se<10?"0"+e.toString():e.toString(),getHour(){return this.hour24?this.hour:this.hour===12?this.ampm==="AM"?0:12:this.hour+(this.ampm==="PM"?12:0)},onChange(){this.$emit("update",{hours:this.getHour(),minutes:this.minute,seconds:this.second})}}},gl={class:"calendar-time"},bl=["disabled"],pl=["value"],_l=["disabled"],yl=["value"],vl=["disabled"],kl=["value"],wl=["disabled"],xl=l("option",{value:"AM"},"AM",-1),Dl=l("option",{value:"PM"},"PM",-1),Cl=[xl,Dl];function Ml(e,t,s,c,d,n){return i(),r("div",gl,[R(l("select",{"onUpdate:modelValue":t[0]||(t[0]=a=>d.hour=a),class:"hourselect form-control mr-1",disabled:s.readonly},[(i(!0),r(_,null,C(n.hours,a=>(i(),r("option",{key:a,value:a},h(n.formatNumber(a)),9,pl))),128))],8,bl),[[U,d.hour]]),v(" :"),R(l("select",{"onUpdate:modelValue":t[1]||(t[1]=a=>d.minute=a),class:"minuteselect form-control ml-1",disabled:s.readonly},[(i(!0),r(_,null,C(n.minutes,a=>(i(),r("option",{key:a,value:a},h(n.formatNumber(a)),9,yl))),128))],8,_l),[[U,d.minute]]),s.secondPicker?(i(),r(_,{key:0},[v(" :"),R(l("select",{"onUpdate:modelValue":t[2]||(t[2]=a=>d.second=a),class:"secondselect form-control ml-1",disabled:s.readonly},[(i(),r(_,null,C(60,a=>l("option",{key:a-1,value:a-1},h(n.formatNumber(a-1)),9,kl)),64))],8,vl),[[U,d.second]])],64)):u("",!0),s.hour24?u("",!0):R((i(),r("select",{key:1,"onUpdate:modelValue":t[3]||(t[3]=a=>d.ampm=a),class:"ampmselect",disabled:s.readonly},Cl,8,wl)),[[U,d.ampm]])])}const Tl=D(ml,[["render",Ml]]),Sl={mixins:[K],props:{ranges:Object,selected:Object,localeData:Object,alwaysShowCalendars:Boolean},data(){return{customRangeActive:!1}},methods:{clickRange(e){this.customRangeActive=!1,this.$emit("clickRange",e)},clickCustomRange(){this.customRangeActive=!0,this.$emit("showCustomRange")},range_class(e){return{active:e.selected===!0}}},computed:{listedRanges(){return this.ranges?Object.keys(this.ranges).map(e=>({label:e,value:this.ranges[e],selected:this.$dateUtil.isSame(this.selected.startDate,this.ranges[e][0])&&this.$dateUtil.isSame(this.selected.endDate,this.ranges[e][1])})):!1},selectedRange(){return this.listedRanges.find(e=>e.selected===!0)},showCustomRangeLabel(){return!this.alwaysShowCalendars}}},$l={class:"ranges"},El={key:0},Rl=["onClick","data-range-key"];function Fl(e,t,s,c,d,n){return i(),r("div",$l,[s.ranges?(i(),r("ul",El,[(i(!0),r(_,null,C(n.listedRanges,a=>(i(),r("li",{onClick:o=>n.clickRange(a.value),"data-range-key":a.label,key:a.label,class:m(n.range_class(a)),tabindex:"0"},h(a.label),11,Rl))),128)),n.showCustomRangeLabel?(i(),r("li",{key:0,class:m({active:d.customRangeActive||!n.selectedRange}),onClick:t[0]||(t[0]=(...a)=>n.clickCustomRange&&n.clickCustomRange(...a)),tabindex:"0"},h(s.localeData.customRangeLabel),3)):u("",!0)])):u("",!0)])}const Ol=D(Sl,[["render",Fl]]),Pl={mounted(e,{instance:t}){if(t.appendToBody){const{height:s,top:c,left:d,width:n,right:a}=t.$refs.toggle.getBoundingClientRect();e.unbindPosition=t.calculatePosition(e,t,{width:n,top:window.scrollY+c+s,left:window.scrollX+d,right:a}),document.body.appendChild(e)}else t.$el.appendChild(e)},unmounted(e,{instance:t}){t.appendToBody&&(e.unbindPosition&&typeof e.unbindPosition=="function"&&e.unbindPosition(),e.parentNode&&e.parentNode.removeChild(e))}},jl={inheritAttrs:!1,components:{Calendar:fl,CalendarTime:Tl,CalendarRanges:Ol},mixins:[K],directives:{appendToBody:Pl},emits:["update:modelValue","toggle","hoverDate","startSelection","select","change-month","finishSelection"],props:{modelValue:{type:Object},minDate:{type:[String,Date],default(){return null}},maxDate:{type:[String,Date],default(){return null}},showWeekNumbers:{type:Boolean,default:!1},linkedCalendars:{type:Boolean,default:!0},singleDatePicker:{type:[Boolean,String],default:!1},showDropdowns:{type:Boolean,default:!1},timePicker:{type:Boolean,default:!1},timePickerIncrement:{type:Number,default:5},timePicker24Hour:{type:Boolean,default:!0},timePickerSeconds:{type:Boolean,default:!1},autoApply:{type:Boolean,default:!1},localeData:{type:Object,default(){return{}}},dateRange:{type:[Object],default:null,required:!0},ranges:{type:[Object,Boolean],default(){let e=new Date;e.setHours(0,0,0,0);let t=new Date;t.setHours(11,59,59,999);let s=new Date;s.setDate(e.getDate()-1),s.setHours(0,0,0,0);let c=new Date;c.setDate(e.getDate()-1),c.setHours(11,59,59,999);let d=new Date(e.getFullYear(),e.getMonth(),1),n=new Date(e.getFullYear(),e.getMonth()+1,0,11,59,59,999);return{Today:[e,t],Yesterday:[s,c],"This month":[d,n],"This year":[new Date(e.getFullYear(),0,1),new Date(e.getFullYear(),11,31,11,59,59,999)],"Last month":[new Date(e.getFullYear(),e.getMonth()-1,1),new Date(e.getFullYear(),e.getMonth(),0,11,59,59,999)]}}},opens:{type:String,default:"center"},dateFormat:Function,alwaysShowCalendars:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},controlContainerClass:{type:[Object,String],default:"form-control reportrange-text"},appendToBody:{type:Boolean,default:!1},calculatePosition:{type:Function,default(e,t,{width:s,top:c,left:d,right:n}){t.opens==="center"?e.style.left=d+s/2+"px":t.opens==="left"?e.style.right=window.innerWidth-n+"px":t.opens==="right"&&(e.style.left=d+"px"),e.style.top=c+"px"}},closeOnEsc:{type:Boolean,default:!0},readonly:{type:Boolean}},data(){const e=he;let t={locale:e.localeData({...this.localeData})},s=this.dateRange.startDate||null,c=this.dateRange.endDate||null;if(t.monthDate=s?new Date(s):new Date,t.nextMonthDate=e.nextMonth(t.monthDate),t.start=s?new Date(s):null,this.singleDatePicker&&this.singleDatePicker!=="range"?t.end=t.start:t.end=c?new Date(c):null,t.in_selection=!1,t.open=!1,t.showCustomRangeCalendars=!1,t.locale.firstDay!==0){let d=t.locale.firstDay,n=[...t.locale.daysOfWeek];for(;d>0;)n.push(n.shift()),d--;t.locale.daysOfWeek=n}return t},methods:{dateFormatFn(e,t){let s=new Date(t);s.setHours(0,0,0,0);let c=new Date(this.start);c.setHours(0,0,0,0);let d=new Date(this.end);return d.setHours(0,0,0,0),e["in-range"]=s>=c&&s<=d,this.dateFormat?this.dateFormat(e,t):e},changeLeftMonth(e){let t=new Date(e.year,e.month-1,1);this.monthDate=t,(this.linkedCalendars||this.$dateUtil.yearMonth(this.monthDate)>=this.$dateUtil.yearMonth(this.nextMonthDate))&&(this.nextMonthDate=this.$dateUtil.validateDateRange(this.$dateUtil.nextMonth(t),this.minDate,this.maxDate),(!this.singleDatePicker||this.singleDatePicker==="range")&&this.$dateUtil.yearMonth(this.monthDate)===this.$dateUtil.yearMonth(this.nextMonthDate)&&(this.monthDate=this.$dateUtil.validateDateRange(this.$dateUtil.prevMonth(this.monthDate),this.minDate,this.maxDate))),this.$emit("change-month",this.monthDate,0)},changeRightMonth(e){let t=new Date(e.year,e.month-1,1);this.nextMonthDate=t,(this.linkedCalendars||this.$dateUtil.yearMonth(this.nextMonthDate)<=this.$dateUtil.yearMonth(this.monthDate))&&(this.monthDate=this.$dateUtil.validateDateRange(this.$dateUtil.prevMonth(t),this.minDate,this.maxDate),this.$dateUtil.yearMonth(this.monthDate)===this.$dateUtil.yearMonth(this.nextMonthDate)&&(this.nextMonthDate=this.$dateUtil.validateDateRange(this.$dateUtil.nextMonth(this.nextMonthDate),this.minDate,this.maxDate))),this.$emit("change-month",this.monthDate,1)},normalizeDatetime(e,t){let s=new Date(e);return this.timePicker&&t&&(s.setHours(t.getHours()),s.setMinutes(t.getMinutes()),s.setSeconds(t.getSeconds()),s.setMilliseconds(t.getMilliseconds())),s},dateClick(e){if(this.readonly)return!1;this.in_selection?(this.in_selection=!1,this.end=this.normalizeDatetime(e,this.end),this.end=this.start&&(this.end=t),this.$emit("hoverDate",e)},onClickPicker(){this.disabled||this.togglePicker(null,!0)},togglePicker(e,t){typeof e=="boolean"?this.open=e:this.open=!this.open,t===!0&&this.$emit("toggle",this.open,this.togglePicker)},clickedApply(){this.togglePicker(!1,!0),this.$emit("update:modelValue",{startDate:this.start,endDate:this.singleDatePicker&&this.singleDatePicker!=="range"?this.start:this.end})},clickCancel(){if(this.open){let e=this.dateRange.startDate,t=this.dateRange.endDate;this.start=e?new Date(e):null,this.end=t?new Date(t):null,this.in_selection=!1,this.togglePicker(!1,!0)}},onSelect(){this.$emit("select",{startDate:this.start,endDate:this.end})},clickAway(e){e&&e.target&&!this.$el.contains(e.target)&&this.$refs.dropdown&&!this.$refs.dropdown.contains(e.target)&&this.clickCancel()},clickRange(e){this.in_selection=!1,this.$dateUtil.isValidDate(e[0])&&this.$dateUtil.isValidDate(e[1])?(this.start=this.$dateUtil.validateDateRange(new Date(e[0]),this.minDate,this.maxDate),this.end=this.$dateUtil.validateDateRange(new Date(e[1]),this.minDate,this.maxDate),this.changeLeftMonth({month:this.start.getMonth()+1,year:this.start.getFullYear()}),this.linkedCalendars===!1&&this.changeRightMonth({month:this.end.getMonth()+1,year:this.end.getFullYear()})):(this.start=null,this.end=null),this.onSelect(),this.autoApply&&this.clickedApply()},onUpdateStartTime(e){let t=new Date(this.start);t.setHours(e.hours),t.setMinutes(e.minutes),t.setSeconds(e.seconds),this.start=this.$dateUtil.validateDateRange(t,this.minDate,this.maxDate),this.autoApply&&this.$emit("update:modelValue",{startDate:this.start,endDate:this.singleDatePicker&&this.singleDatePicker!=="range"?this.start:this.end})},onUpdateEndTime(e){let t=new Date(this.end);t.setHours(e.hours),t.setMinutes(e.minutes),t.setSeconds(e.seconds),this.end=this.$dateUtil.validateDateRange(t,this.minDate,this.maxDate),this.autoApply&&this.$emit("update:modelValue",{startDate:this.start,endDate:this.end})},handleEscape(e){this.open&&e.keyCode===27&&this.closeOnEsc&&this.clickCancel()}},computed:{showRanges(){return this.ranges!==!1&&!this.readonly},showCalendars(){return this.alwaysShowCalendars||this.showCustomRangeCalendars},startText(){return this.start===null?"":this.$dateUtil.format(this.start,this.locale.format)},endText(){return this.end===null?"":this.$dateUtil.format(this.end,this.locale.format)},rangeText(){let e=this.startText;return(!this.singleDatePicker||this.singleDatePicker==="range")&&(e+=this.locale.separator+this.endText),e},min(){return this.minDate?new Date(this.minDate):null},max(){return this.maxDate?new Date(this.maxDate):null},pickerStyles(){return{"show-calendar":this.open||this.opens==="inline","show-ranges":this.showRanges,"show-weeknumbers":this.showWeekNumbers,single:this.singleDatePicker,["opens"+this.opens]:!0,linked:this.linkedCalendars,"hide-calendars":!this.showCalendars}},isClear(){return!this.dateRange.startDate||!this.dateRange.endDate},isDirty(){let e=new Date(this.dateRange.startDate),t=new Date(this.dateRange.endDate);return!this.isClear&&(this.start.getTime()!==e.getTime()||this.end.getTime()!==t.getTime())}},watch:{minDate(){let e=this.$dateUtil.validateDateRange(this.monthDate,this.minDate||new Date,this.maxDate);this.changeLeftMonth({year:e.getFullYear(),month:e.getMonth()+1})},maxDate(){let e=this.$dateUtil.validateDateRange(this.nextMonthDate,this.minDate,this.maxDate||new Date);this.changeRightMonth({year:e.getFullYear(),month:e.getMonth()+1})},"dateRange.startDate"(e){this.$dateUtil.isValidDate(new Date(e))&&(this.start=e&&!this.isClear&&this.$dateUtil.isValidDate(new Date(e))?new Date(e):null,this.isClear?(this.start=null,this.end=null):(this.start=new Date(this.dateRange.startDate),this.end=new Date(this.dateRange.endDate)))},"dateRange.endDate"(e){this.$dateUtil.isValidDate(new Date(e))&&(this.end=e&&!this.isClear?new Date(e):null,this.isClear?(this.start=null,this.end=null):(this.start=new Date(this.dateRange.startDate),this.end=new Date(this.dateRange.endDate)))},open:{handler(e){typeof document=="object"&&this.$nextTick(()=>{e?document.body.addEventListener("click",this.clickAway):document.body.removeEventListener("click",this.clickAway),e?document.addEventListener("keydown",this.handleEscape):document.removeEventListener("keydown",this.handleEscape),!this.alwaysShowCalendars&&this.ranges&&(this.showCustomRangeCalendars=!Object.keys(this.ranges).find(t=>this.$dateUtil.isSame(this.start,this.ranges[t][0],"date")&&this.$dateUtil.isSame(this.end,this.ranges[t][1],"date")))})},immediate:!0}}},me=e=>(ne("data-v-577c3804"),e=e(),le(),e),Al=me(()=>l("i",{class:"glyphicon glyphicon-calendar fa fa-calendar"},null,-1)),Ul=me(()=>l("b",{class:"caret"},null,-1)),Hl={class:"calendars"},Ll={key:1,class:"calendars-container"};const Yl={class:"calendar-table"},Vl={key:0,class:"drp-calendar col right"};const Bl={class:"calendar-table"},Il={key:0,class:"drp-buttons"},Nl={key:0,class:"drp-selected"},zl=["disabled"];function ql(e,t,s,c,d,n){const a=w("calendar-ranges"),o=w("calendar"),f=w("calendar-time"),g=xe("append-to-body");return i(),r("div",{class:m(["vue-daterange-picker",{inline:s.opens==="inline"}])},[l("div",{class:m(s.controlContainerClass),onClick:t[0]||(t[0]=(...b)=>n.onClickPicker&&n.onClickPicker(...b)),ref:"toggle"},[y(e.$slots,"input",{startDate:e.start,endDate:e.end,ranges:s.ranges,rangeText:n.rangeText},()=>[Al,v("  "),l("span",null,h(n.rangeText),1),Ul],!0)],2),T(Te,{name:"slide-fade",mode:"out-in"},{default:M(()=>[e.open||s.opens==="inline"?R((i(),r("div",{key:0,class:m(["daterangepicker ltr",n.pickerStyles]),ref:"dropdown"},[y(e.$slots,"header",{rangeText:n.rangeText,locale:e.locale,clickCancel:n.clickCancel,clickApply:n.clickedApply,in_selection:e.in_selection,autoApply:s.autoApply},void 0,!0),l("div",Hl,[n.showRanges?y(e.$slots,"ranges",{key:0,startDate:e.start,endDate:e.end,ranges:s.ranges,clickRange:n.clickRange},()=>[T(a,{onClickRange:n.clickRange,onShowCustomRange:t[1]||(t[1]=b=>e.showCustomRangeCalendars=!0),"always-show-calendars":s.alwaysShowCalendars,"locale-data":e.locale,ranges:s.ranges,selected:{startDate:e.start,endDate:e.end}},null,8,["onClickRange","always-show-calendars","locale-data","ranges","selected"])],!0):u("",!0),n.showCalendars?(i(),r("div",Ll,[l("div",{class:m(["drp-calendar col left",{single:s.singleDatePicker}])},[u("",!0),l("div",Yl,[T(o,{monthDate:e.monthDate,"locale-data":e.locale,start:e.start,end:e.end,minDate:n.min,maxDate:n.max,"show-dropdowns":s.showDropdowns,onChangeMonth:n.changeLeftMonth,"date-format":n.dateFormatFn,onDateClick:n.dateClick,onHoverDate:n.hoverDate,showWeekNumbers:s.showWeekNumbers},{default:M(()=>[y(e.$slots,"date",J(ee(e.data)),void 0,!0)]),_:3},8,["monthDate","locale-data","start","end","minDate","maxDate","show-dropdowns","onChangeMonth","date-format","onDateClick","onHoverDate","showWeekNumbers"])]),s.timePicker&&e.start?(i(),E(f,{key:1,onUpdate:n.onUpdateStartTime,"miniute-increment":s.timePickerIncrement,hour24:s.timePicker24Hour,"second-picker":s.timePickerSeconds,"current-time":e.start,readonly:s.readonly},null,8,["onUpdate","miniute-increment","hour24","second-picker","current-time","readonly"])):u("",!0)],2),s.singleDatePicker?u("",!0):(i(),r("div",Vl,[u("",!0),l("div",Bl,[T(o,{monthDate:e.nextMonthDate,"locale-data":e.locale,start:e.start,end:e.end,minDate:n.min,maxDate:n.max,"show-dropdowns":s.showDropdowns,onChangeMonth:n.changeRightMonth,"date-format":n.dateFormatFn,onDateClick:n.dateClick,onHoverDate:n.hoverDate,showWeekNumbers:s.showWeekNumbers},{default:M(()=>[y(e.$slots,"date",J(ee(e.data)),void 0,!0)]),_:3},8,["monthDate","locale-data","start","end","minDate","maxDate","show-dropdowns","onChangeMonth","date-format","onDateClick","onHoverDate","showWeekNumbers"])]),s.timePicker&&e.end?(i(),E(f,{key:1,onUpdate:n.onUpdateEndTime,"miniute-increment":s.timePickerIncrement,hour24:s.timePicker24Hour,"second-picker":s.timePickerSeconds,"current-time":e.end,readonly:s.readonly},null,8,["onUpdate","miniute-increment","hour24","second-picker","current-time","readonly"])):u("",!0)]))])):u("",!0)]),y(e.$slots,"footer",{rangeText:n.rangeText,locale:e.locale,clickCancel:n.clickCancel,clickApply:n.clickedApply,in_selection:e.in_selection,autoApply:s.autoApply},()=>[s.autoApply?u("",!0):(i(),r("div",Il,[n.showCalendars?(i(),r("span",Nl,h(n.rangeText),1)):u("",!0),s.readonly?u("",!0):(i(),r("button",{key:1,class:"cancelBtn btn btn-sm btn-secondary",type:"button",onClick:t[2]||(t[2]=(...b)=>n.clickCancel&&n.clickCancel(...b))},h(e.locale.cancelLabel),1)),s.readonly?u("",!0):(i(),r("button",{key:2,class:"applyBtn btn btn-sm btn-success",disabled:e.in_selection,type:"button",onClick:t[3]||(t[3]=(...b)=>n.clickedApply&&n.clickedApply(...b))},h(e.locale.applyLabel),9,zl))]))],!0)],2)),[[g]]):u("",!0)]),_:3})],2)}const Wl=D(jl,[["render",ql],["__scopeId","data-v-577c3804"]]),Gl={name:"ns-date-range-picker",data(){return{dateRange:{startDate:null,endDate:null}}},components:{DateRangePicker:Wl},mounted(){this.field.value!==void 0&&(this.dateRange=this.field.value)},watch:{dateRange(){const e={startDate:x(this.dateRange.startDate).format("YYYY-MM-DD HH:mm"),endDate:x(this.dateRange.endDate).format("YYYY-MM-DD HH:mm")};this.field.value=e,this.$emit("change",this)}},methods:{__:p,getFormattedDate(e){return e!==null?x(e).format("YYYY-MM-DD HH:mm"):p("N/D")},clearDate(){this.dateRange={startDate:null,endDate:null},this.field.value=void 0}},computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"bg-gray-200 cursor-not-allowed":"bg-transparent"},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"}},props:["placeholder","leading","type","field"]},Kl={class:"flex flex-auto flex-col mb-2 ns-date-range-picker"},Ql=["for"],Xl={key:0,class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},Zl={class:"text-primary sm:text-sm sm:leading-5"},Jl=l("i",{class:"las la-times"},null,-1),ei=[Jl],ti={class:"flex justify-between items-center w-full py-2"},si={class:"text-xs"},ni={class:"text-xs"};function li(e,t,s,c,d,n){const a=w("date-range-picker"),o=w("ns-field-description");return i(),r("div",Kl,[l("label",{for:s.field.name,class:m([n.hasError?"text-error-primary":"text-primary","block leading-5 font-medium"])},[y(e.$slots,"default")],10,Ql),l("div",{class:m([n.hasError?"error":"","mt-1 relative flex input-group border-2 rounded-md overflow-hidden focus:shadow-sm"])},[s.leading?(i(),r("div",Xl,[l("span",Zl,h(s.leading),1)])):u("",!0),l("button",{class:"px-3 outline-none bg-error-secondary font-semibold text-white",onClick:t[0]||(t[0]=f=>n.clearDate())},ei),T(a,{class:"w-full flex items-center bg-input-background",ref:"picker","locale-data":{firstDay:1,format:"yyyy-mm-dd HH:mm:ss"},timePicker:!0,timePicker24Hour:!0,showWeekNumbers:!0,showDropdowns:!0,autoApply:!1,appendToBody:!0,modelValue:d.dateRange,"onUpdate:modelValue":t[1]||(t[1]=f=>d.dateRange=f),disabled:s.field.disabled,linkedCalendars:!0},{input:M(f=>[l("div",ti,[l("span",si,h(n.__("Range Starts"))+" : "+h(n.getFormattedDate(f.startDate)),1),l("span",ni,h(n.__("Range Ends"))+" : "+h(n.getFormattedDate(f.endDate)),1)])]),_:1},8,["modelValue","disabled"])],2),T(o,{field:s.field},null,8,["field"])])}const ge=D(Gl,[["render",li]]),ii={name:"ns-date-time-picker",props:["field","date"],data(){return{visible:!1,hours:0,minutes:0,currentView:"days",currentDay:void 0,moment:x}},computed:{fieldDate(){return this.field?x(this.field.value).isValid()?x(this.field.value):x():this.date?x(this.date):x()}},mounted(){let e=x(this.field.value);e.isValid()?this.setDate(e.format("YYYY-MM-DD HH:mm:ss")):this.setDate(x(ns.date.current).format("YYYY-MM-DD HH:mm:ss"))},methods:{__:p,setDate(e){this.field.value=e}}},ri={class:"picker mb-2"},ai={key:0,class:"block leading-5 font-medium text-primary"},di={class:"ns-button"},oi=l("i",{class:"las la-clock text-xl"},null,-1),ui={key:0,class:"mx-1 text-sm"},ci={key:0},hi={key:1},fi={key:1,class:"mx-1 text-sm"},mi={key:0},gi={key:1},bi={key:1,class:"text-sm text-secondary py-1"},pi={key:2,class:"relative z-10 h-0 w-0"};function _i(e,t,s,c,d,n){const a=w("ns-calendar");return i(),r("div",ri,[s.field&&s.field.label&&s.field.label.length>0?(i(),r("label",ai,h(s.field.label),1)):u("",!0),l("div",di,[l("button",{onClick:t[0]||(t[0]=o=>d.visible=!d.visible),class:m([s.field&&s.field.label&&s.field.label.length>0?"mt-1 border border-input-edge":"","shadow rounded cursor-pointer w-full p-1 flex items-center text-primary"])},[oi,s.field?(i(),r("span",ui,[[null,"",void 0].includes(s.field.value)?u("",!0):(i(),r("span",ci,h(n.fieldDate.format("YYYY-MM-DD HH:mm")),1)),[null,"",void 0].includes(s.field.value)?(i(),r("span",hi,"N/A")):u("",!0)])):u("",!0),s.date?(i(),r("span",fi,[[null,"",void 0].includes(s.date)?u("",!0):(i(),r("span",mi,h(n.fieldDate.format("YYYY-MM-DD HH:mm")),1)),[null,"",void 0].includes(s.date)?(i(),r("span",gi,"N/A")):u("",!0)])):u("",!0)],2)]),s.field?(i(),r("p",bi,h(s.field.description),1)):u("",!0),d.visible?(i(),r("div",pi,[l("div",{class:m([s.field&&s.field.label&&s.field.label.length>0?"-mt-4":"mt-2","absolute w-72 shadow-xl rounded ns-box anim-duration-300 zoom-in-entrance flex flex-col"])},[s.field?(i(),E(a,{key:0,onOnClickOut:t[1]||(t[1]=o=>d.visible=!1),onSet:t[2]||(t[2]=o=>n.setDate(o)),visible:d.visible,date:s.field.value},null,8,["visible","date"])):u("",!0),s.date?(i(),E(a,{key:1,onOnClickOut:t[3]||(t[3]=o=>d.visible=!1),onSet:t[4]||(t[4]=o=>n.setDate(o)),visible:d.visible,date:s.date},null,8,["visible","date"])):u("",!0)],2)])):u("",!0)])}const be=D(ii,[["render",_i]]),yi={name:"ns-datepicker",components:{nsCalendar:ce},props:["label","date","format"],computed:{formattedDate(){return x(this.date).format(this.format||"YYYY-MM-DD HH:mm:ss")}},data(){return{visible:!1}},mounted(){},methods:{__:p,setDate(e){this.$emit("set",e)}}},vi={class:"picker"},ki={class:"ns-button"},wi=l("i",{class:"las la-clock text-2xl"},null,-1),xi={class:"mx-1 text-sm"},Di={key:0},Ci={key:1},Mi={key:0,class:"relative h-0 w-0 -mb-2"},Ti={class:"w-72 mt-2 shadow-lg anim-duration-300 zoom-in-entrance flex flex-col ns-floating-panel"};function Si(e,t,s,c,d,n){const a=w("ns-calendar");return i(),r("div",vi,[l("div",ki,[l("button",{onClick:t[0]||(t[0]=o=>d.visible=!d.visible),class:"rounded cursor-pointer border border-input-edge shadow w-full px-1 py-1 flex items-center text-primary"},[wi,l("span",xi,[l("span",null,h(s.label||n.__("Date"))+" : ",1),s.date?(i(),r("span",Di,h(n.formattedDate),1)):(i(),r("span",Ci,h(n.__("N/A")),1))])])]),d.visible?(i(),r("div",Mi,[l("div",Ti,[T(a,{visible:d.visible,onOnClickOut:t[1]||(t[1]=o=>d.visible=!1),date:s.date,onSet:t[2]||(t[2]=o=>n.setDate(o))},null,8,["visible","date"])])])):u("",!0)])}const $i=D(yi,[["render",Si]]),Ei={name:"ns-daterange-picker",data(){return{leftCalendar:x(),rightCalendar:x().add(1,"months"),rangeViewToggled:!1,clickedOnCalendar:!1}},mounted(){this.field.value||this.clearDate(),document.addEventListener("click",this.checkClickedItem)},beforeUnmount(){document.removeEventListener("click",this.checkClickedItem)},watch:{leftCalendar(){this.leftCalendar.isSame(this.rightCalendar,"month")&&this.rightCalendar.add(1,"months")},rightCalendar(){this.rightCalendar.isSame(this.leftCalendar,"month")&&this.leftCalendar.sub(1,"months")}},methods:{__:p,setDateRange(e,t){this.field.value[e]=t,x(this.field.value.startDate).isBefore(x(this.field.value.endDate))&&this.$emit("change",this.field)},getFormattedDate(e){return e!==null?x(e).format("YYYY-MM-DD HH:mm"):p("N/D")},clearDate(){this.field.value={startDate:null,endDate:null}},toggleRangeView(){this.rangeViewToggled=!this.rangeViewToggled},handleDateRangeClick(){this.clickedOnCalendar=!0},checkClickedItem(e){this.$el.getAttribute("class").split(" ").includes("ns-daterange-picker")&&(!this.$el.contains(e.srcElement)&&!this.clickedOnCalendar&&this.rangeViewToggled&&(this.$emit("blur",this.field),this.toggleRangeView()),setTimeout(()=>{this.clickedOnCalendar=!1},100))}},computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"bg-gray-200 cursor-not-allowed":"bg-transparent"},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"},startDateFormatted(){return this.field.value!==void 0&&x(this.field.value.startDate).isValid()?x(this.field.value.startDate).format("YYYY-MM-DD HH:mm"):!1},endDateFormatted(){return this.field.value!==void 0&&x(this.field.value.endDate).isValid()?x(this.field.value.endDate).format("YYYY-MM-DD HH:mm"):!1}},props:["placeholder","leading","type","field"]},Ri=["for"],Fi={class:"border border-input-edge rounded-tl rounded-bl flex-auto flex"},Oi={key:0,class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},Pi={class:"text-primary sm:text-sm sm:leading-5"},ji=l("span",{class:"mr-1"},[l("i",{class:"las la-clock text-2xl"})],-1),Ai={class:""},Ui=l("span",{class:"mx-2"},"—",-1),Hi=l("span",{class:"mr-1"},[l("i",{class:"las la-clock text-2xl"})],-1),Li={class:""},Yi=l("i",{class:"las la-times"},null,-1),Vi=[Yi],Bi={key:0,class:"relative h-0 w-0"},Ii={class:"z-10 absolute md:w-[550px] w-[225px] mt-2 shadow-lg anim-duration-300 zoom-in-entrance flex flex-col"},Ni={class:"flex flex-col md:flex-row bg-box-background rounded-lg"},zi=l("div",{class:"flex-auto border-l border-r"},null,-1);function qi(e,t,s,c,d,n){const a=w("ns-calendar"),o=w("ns-field-description");return i(),r("div",{onClick:t[4]||(t[4]=f=>n.handleDateRangeClick()),class:"flex flex-auto flex-col mb-2 ns-daterange-picker"},[l("label",{for:s.field.name,class:m([n.hasError?"text-error-primary":"text-primary","block leading-5 font-medium"])},[y(e.$slots,"default")],10,Ri),l("div",{class:m([n.hasError?"error":"","mt-1 relative flex input-group bg-input-background rounded overflow-hidden shadow focus:shadow-sm"])},[l("div",Fi,[s.leading?(i(),r("div",Oi,[l("span",Pi,h(s.leading),1)])):u("",!0),l("div",{class:"flex flex-auto p-1 text-primary text-sm items-center cursor-pointer",onClick:t[0]||(t[0]=f=>n.toggleRangeView())},[ji,l("span",Ai,h(n.startDateFormatted||n.__("N/A")),1),Ui,Hi,l("span",Li,h(n.endDateFormatted||n.__("N/A")),1)])]),l("button",{class:"px-3 outline-none font-bold bg-error-tertiary",onClick:t[1]||(t[1]=f=>n.clearDate())},Vi)],2),d.rangeViewToggled?(i(),r("div",Bi,[l("div",Ii,[l("div",Ni,[T(a,{class:"md:w-1/2 w-full",range:[n.startDateFormatted,n.endDateFormatted],side:"left",date:s.field.value.startDate,"selected-range":s.field.value,onSet:t[2]||(t[2]=f=>n.setDateRange("startDate",f))},null,8,["range","date","selected-range"]),zi,T(a,{class:"md:w-1/2 w-full",range:[n.startDateFormatted,n.endDateFormatted],side:"right",date:s.field.value.endDate,"selected-range":s.field.value,onSet:t[3]||(t[3]=f=>n.setDateRange("endDate",f))},null,8,["range","date","selected-range"])])])])):u("",!0),T(o,{field:s.field},null,8,["field"])])}const Wi=D(Ei,[["render",qi]]),Gi={name:"ns-dropzone",emits:["dropped"],mounted(){},setup(e,{emit:t}){const s=z(null);return{dropZone:s,handleDrop:d=>{console.log(s.value),s.value.style.border="2px solid rgb(255 255 255 / 0%)";const n=d.dataTransfer.getData("text");t("dropped",n)}}}};function Ki(e,t,s,c,d,n){return i(),r("div",{ref:"dropZone",class:"ns-drop-zone mb-4",onDragover:t[0]||(t[0]=Se(()=>{},["prevent"]))},[y(e.$slots,"default",{},void 0,!0)],544)}const Qi=D(Gi,[["render",Ki],["__scopeId","data-v-3a5c087e"]]),Xi={emits:["drag-start","drag-end"],name:"ns-draggable",props:{widget:{required:!0}},setup(e,{emit:t}){const s=z(null),c=z(null);let d=null,n=0,a=0,o=0,f=0;const g=F=>{const P=F.srcElement.closest(".ns-draggable-item"),O=P.getBoundingClientRect();d=P.cloneNode(!0),d.setAttribute("class","ns-ghost"),d.style.display="none",d.style.position="fixed",d.style.top=`${O.top}px`,d.style.left=`${O.left}px`,d.style.width=`${O.width}px`,d.style.height=`${O.height}px`,P.closest(".ns-drop-zone").appendChild(d),n=F.clientX-o,a=F.clientY-f,c.value={dom:P},t("drag-start",e.widget)},b=F=>{if(c.value===null)return;const P=c.value.dom.closest(".ns-drop-zone").querySelector(".ns-ghost"),O=P.querySelector("div");Array.from(O.classList).filter(j=>j.startsWith("shadow")).forEach(j=>O.classList.remove(j)),o=F.clientX-n,f=F.clientY-a,O.style.boxShadow="0px 4px 10px 5px rgb(0 0 0 / 48%)",P.style.display="block",P.style.transform=`translate(${o}px, ${f}px)`,P.style.cursor="grabbing",document.querySelectorAll(".ns-drop-zone").forEach(j=>{j.getBoundingClientRect();const{left:B,top:I,right:k,bottom:ye}=j.getBoundingClientRect(),{clientX:X,clientY:Z}=F;X>=B&&X<=k&&Z>=I&&Z<=ye?(j.style.border="2px dashed #ccc",j.setAttribute("hovered","true")):(j.style.border="2px solid rgb(255 255 255 / 0%)",j.setAttribute("hovered","false"))})},S=F=>{if(c.value===null)return;const O=c.value.dom.closest(".ns-drop-zone").querySelector(".ns-ghost");O&&O.remove(),c.value=null,o=0,f=0,F.srcElement.closest(".ns-drop-zone"),t("drag-end",e.widget)};return De(()=>{s.value&&(document.addEventListener("mousemove",F=>b(F)),document.addEventListener("mouseup",F=>S(F)))}),Ce(()=>{document.removeEventListener("mousemove",b),document.removeEventListener("mouseup",S)}),{draggable:s,startDrag:g}}};function Zi(e,t,s,c,d,n){return i(),r("div",{ref:"draggable",class:"ns-draggable-item",onMousedown:t[0]||(t[0]=(...a)=>c.startDrag&&c.startDrag(...a))},[y(e.$slots,"default")],544)}const Ji=D(Xi,[["render",Zi]]),er={name:"ns-dragzone",props:["raw-widgets","raw-columns"],components:{nsDropzone:Qi,nsDraggable:Ji},data(){return{widgets:[],dragged:null,columns:[]}},mounted(){this.widgets=this.rawWidgets.map(e=>({name:e.name,"component-name":e["component-name"],"class-name":e["class-name"],component:te(window[e["component-name"]])})),this.columns=this.rawColumns.map(e=>(e.widgets.forEach(t=>{t.component=te(window[t.identifier]),t["class-name"]=t.class_name,t["component-name"]=t.identifier}),e)),setTimeout(()=>{var e=document.querySelectorAll(".widget-placeholder");document.addEventListener("mousemove",t=>{for(var s=0;s=c.left&&t.clientX<=c.right&&t.clientY>=c.top&&t.clientY<=c.bottom){e[s].setAttribute("hovered","true");break}else e[s].setAttribute("hovered","false")}})},10)},computed:{hasUnusedWidgets(){const e=this.columns.map(t=>t.widgets).flat();return this.widgets.filter(t=>!e.map(c=>c["component-name"]).includes(t["component-name"])).length>0}},methods:{__:p,handleEndDragging(e){const t=document.querySelector('.ns-drop-zone[hovered="true"]');if(t){const d=t.closest("[column-name]").getAttribute("column-name"),n=this.columns.filter(O=>O.name===d),a=n[0].widgets.filter(O=>O["component-name"]===t.querySelector(".ns-draggable-item").getAttribute("component-name")),o=document.querySelector(`[component-name="${e["component-name"]}"]`),g=o.closest("[column-name]").getAttribute("column-name"),b=this.columns.filter(O=>O.name===g),S=b[0].widgets.filter(O=>O["component-name"]===o.getAttribute("component-name"));if(S[0]["component-name"]===a[0]["component-name"])return;const F=S[0].position,P=a[0].position;S[0].column=d,S[0].position=P,a[0].column=g,a[0].position=F,n[0].widgets[P]=S[0],b[0].widgets[F]=a[0],this.handleChange(n[0]),this.handleChange(b[0]),t.style.border="2px solid rgb(255 255 255 / 0%)",t.setAttribute("hovered","false")}const s=document.querySelector('.widget-placeholder[hovered="true"]');if(s){const c=s.closest("[column-name]").getAttribute("column-name");if(e===c){console.log("The widget is already in the same column.");return}const d=this.columns.filter(o=>o.name===e.column)[0],n=d.widgets.indexOf(e);d.widgets.splice(n,1);const a=this.columns.filter(o=>o.name===c)[0];e.position=a.widgets.length,e.column=c,a.widgets.push(e),this.handleChange(d),this.handleChange(a)}},handleChange(e,t){setTimeout(()=>{nsHttpClient.post("/api/users/widgets",{column:e}).subscribe(s=>{},s=>$.error(s.message||p("An unpexpected error occured while using the widget.")).subscribe())},100)},handleRemoveWidget(e,t){const s=t.widgets.indexOf(e);t.widgets.splice(s,1),this.handleChange(t)},async openWidgetAdded(e){try{const t=this.columns.filter(a=>a.name!==e.name?(console.log(a.name),a.widgets.length>0):!1).map(a=>a.widgets).flat(),s=e.widgets.map(a=>a["component-name"]),c=this.widgets.filter(a=>{const o=t.map(f=>f["component-name"]);return o.push(...s),!o.includes(a["component-name"])}).map(a=>({value:a,label:a.name})),d=await new Promise((a,o)=>{const f=c.filter(g=>s.includes(g["component-name"]));Popup.show(Re,{value:f,resolve:a,reject:o,type:"multiselect",options:c,label:p("Choose Widget"),description:p("Select with widget you want to add to the column.")})}),n=this.columns.indexOf(e);this.columns[n].widgets=[...this.columns[n].widgets,...d].map((a,o)=>(a.position=o,a.column=e.name,a)),this.handleChange(this.columns[n])}catch(t){console.log(t)}}}},tr={class:"flex md:-mx-2 flex-wrap"},sr=["column-name"],nr=["onClick"],lr={class:"text-sm text-primary",type:"info"};function ir(e,t,s,c,d,n){const a=w("ns-draggable"),o=w("ns-dropzone");return i(),r("div",tr,[(i(!0),r(_,null,C(d.columns,(f,g)=>(i(),r("div",{class:"w-full md:px-2 md:w-1/2 lg:w-1/3 xl:1/4","column-name":f.name,key:f.name},[(i(!0),r(_,null,C(f.widgets,b=>(i(),E(o,null,{default:M(()=>[T(a,{"component-name":b["component-name"],onDragEnd:t[0]||(t[0]=S=>n.handleEndDragging(S)),widget:b},{default:M(()=>[(i(),E(W(b.component),{onOnRemove:S=>n.handleRemoveWidget(b,f),widget:b},null,40,["onOnRemove","widget"]))]),_:2},1032,["component-name","widget"])]),_:2},1024))),256)),n.hasUnusedWidgets?(i(),r("div",{key:0,onClick:b=>n.openWidgetAdded(f),class:"widget-placeholder cursor-pointer border-2 border-dashed h-16 flex items-center justify-center"},[l("span",lr,h(n.__("Click here to add widgets")),1)],8,nr)):u("",!0)],8,sr))),128))])}const rr=D(er,[["render",ir]]),ar={emits:["blur","change","saved","keypress"],data:()=>({}),mounted(){},components:{nsDateRangePicker:ge,nsDateTimePicker:be,nsSwitch:ue},computed:{isInputField(){return["text","password","email","number","tel"].includes(this.field.type)},isHiddenField(){return["hidden"].includes(this.field.type)},isDateField(){return["date"].includes(this.field.type)},isSelectField(){return["select"].includes(this.field.type)},isSearchField(){return["search-select"].includes(this.field.type)},isTextarea(){return["textarea"].includes(this.field.type)},isCheckbox(){return["checkbox"].includes(this.field.type)},isMultiselect(){return["multiselect"].includes(this.field.type)},isInlineMultiselect(){return["inline-multiselect"].includes(this.field.type)},isSelectAudio(){return["select-audio"].includes(this.field.type)},isSwitch(){return["switch"].includes(this.field.type)},isMedia(){return["media"].includes(this.field.type)},isCkEditor(){return["ckeditor"].includes(this.field.type)},isDateTimePicker(){return["datetimepicker"].includes(this.field.type)},isDateRangePicker(){return["daterangepicker"].includes(this.field.type)},isCustom(){return["custom"].includes(this.field.type)}},props:["field"],methods:{handleSaved(e,t){this.$emit("saved",t)},addOption(e){this.field.type==="select"&&this.field.options.forEach(s=>s.selected=!1),e.selected=!0;const t=this.field.options.indexOf(e);this.field.options.splice(t,1),this.field.options.unshift(e),this.refreshMultiselect(),this.$emit("change",{action:"addOption",option:e})},changeTouchedState(e,t){t.stopPropagation&&(t.stopPropagation(),e.touched=!0,this.$emit("change",e))},refreshMultiselect(){this.field.value=this.field.options.filter(e=>e.selected).map(e=>e.value)},removeOption(e){e.selected=!1,this.refreshMultiselect(),this.$emit("change",{action:"removeOption",option:e})}}},dr=["name","value"],or={key:1,class:"flex flex-auto mb-2"},ur=["innerHTML"],cr=["innerHTML"],hr=["innerHTML"],fr=["innerHTML"],mr=["innerHTML"],gr=["innerHTML"],br=["innerHTML"],pr=["innerHTML"],_r=["innerHTML"],yr=["innerHTML"],vr=["innerHTML"],kr=["innerHTML"],wr=["innerHTML"],xr=["innerHTML"];function Dr(e,t,s,c,d,n){const a=w("ns-input"),o=w("ns-date-time-picker"),f=w("ns-date"),g=w("ns-media-input"),b=w("ns-select"),S=w("ns-search-select"),F=w("ns-daterange-picker"),P=w("ns-select-audio"),O=w("ns-textarea"),V=w("ns-checkbox"),Q=w("ns-inline-multiselect"),j=w("ns-multiselect"),B=w("ns-ckeditor"),I=w("ns-switch");return i(),r(_,null,[n.isHiddenField?(i(),r("input",{key:0,type:"hidden",name:s.field.name,value:s.field.value},null,8,dr)):u("",!0),n.isHiddenField?u("",!0):(i(),r("div",or,[n.isInputField?(i(),E(a,{key:0,onKeypress:t[0]||(t[0]=k=>n.changeTouchedState(s.field,k)),onChange:t[1]||(t[1]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,ur)]),_:1},8,["field"])):u("",!0),n.isDateTimePicker?(i(),E(o,{key:1,onBlur:t[2]||(t[2]=k=>e.$emit("blur",s.field)),onChange:t[3]||(t[3]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,cr)]),_:1},8,["field"])):u("",!0),n.isDateField?(i(),E(f,{key:2,onBlur:t[4]||(t[4]=k=>e.$emit("blur",s.field)),onChange:t[5]||(t[5]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,hr)]),_:1},8,["field"])):u("",!0),n.isMedia?(i(),E(g,{key:3,onBlur:t[6]||(t[6]=k=>e.$emit("blur",s.field)),onChange:t[7]||(t[7]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,fr)]),_:1},8,["field"])):u("",!0),n.isSelectField?(i(),E(b,{key:4,onChange:t[8]||(t[8]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,mr)]),_:1},8,["field"])):u("",!0),n.isSearchField?(i(),E(S,{key:5,field:s.field,onSaved:t[9]||(t[9]=k=>n.handleSaved(s.field,k)),onChange:t[10]||(t[10]=k=>n.changeTouchedState(s.field,k))},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,gr)]),_:1},8,["field"])):u("",!0),n.isDateRangePicker?(i(),E(F,{key:6,onBlur:t[11]||(t[11]=k=>e.$emit("blur",s.field)),onChange:t[12]||(t[12]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,br)]),_:1},8,["field"])):u("",!0),n.isSelectAudio?(i(),E(P,{key:7,onBlur:t[13]||(t[13]=k=>e.$emit("blur",s.field)),onChange:t[14]||(t[14]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,pr)]),_:1},8,["field"])):u("",!0),n.isTextarea?(i(),E(O,{key:8,onBlur:t[15]||(t[15]=k=>e.$emit("blur",s.field)),onChange:t[16]||(t[16]=k=>n.changeTouchedState(s.field,k)),field:s.field},{description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,_r)]),default:M(()=>[l("template",null,[v(h(s.field.label),1)])]),_:1},8,["field"])):u("",!0),n.isCheckbox?(i(),E(V,{key:9,onBlur:t[17]||(t[17]=k=>e.$emit("blur",s.field)),onChange:t[18]||(t[18]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,yr)]),_:1},8,["field"])):u("",!0),n.isInlineMultiselect?(i(),E(Q,{key:10,onBlur:t[19]||(t[19]=k=>e.$emit("blur",s.field)),onUpdate:t[20]||(t[20]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,vr)]),_:1},8,["field"])):u("",!0),n.isMultiselect?(i(),E(j,{key:11,onAddOption:t[21]||(t[21]=k=>n.addOption(k)),onRemoveOption:t[22]||(t[22]=k=>n.removeOption(k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,kr)]),_:1},8,["field"])):u("",!0),n.isCkEditor?(i(),E(B,{key:12,field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,wr)]),_:1},8,["field"])):u("",!0),n.isSwitch?(i(),E(I,{key:13,field:s.field,onChange:t[23]||(t[23]=k=>n.changeTouchedState(s.field,k))},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,xr)]),_:1},8,["field"])):u("",!0),n.isCustom?(i(),E(Me,{key:14},[(i(),E(W(s.field.component),{field:s.field,onBlur:t[24]||(t[24]=k=>e.$emit("blur",s.field)),onChange:t[25]||(t[25]=k=>n.changeTouchedState(s.field,k))},null,40,["field"]))],1024)):u("",!0)]))],64)}const Cr=D(ar,[["render",Dr]]),Mr={name:"ns-field-detail",props:["field"],methods:{__:p}},Tr={key:0,class:"text-xs ns-description"};function Sr(e,t,s,c,d,n){return i(),r(_,null,[!s.field.errors||s.field.errors.length===0?(i(),r("p",Tr,h(s.field.description),1)):u("",!0),(i(!0),r(_,null,C(s.field.errors,(a,o)=>(i(),r("p",{key:o,class:"text-xs ns-error"},[a.identifier==="required"?y(e.$slots,a.identifier,{key:0},()=>[v(h(n.__("This field is required.")),1)]):u("",!0),a.identifier==="email"?y(e.$slots,a.identifier,{key:1},()=>[v(h(n.__("This field must contain a valid email address.")),1)]):u("",!0),a.identifier==="invalid"?y(e.$slots,a.identifier,{key:2},()=>[v(h(a.message),1)]):u("",!0),a.identifier==="same"?y(e.$slots,a.identifier,{key:3},()=>[v(h(n.__('This field must be similar to "{other}""').replace("{other}",a.fields.filter(f=>f.name===a.rule.value)[0].label)),1)]):u("",!0),a.identifier==="min"?y(e.$slots,a.identifier,{key:4},()=>[v(h(n.__('This field must have at least "{length}" characters"').replace("{length}",a.rule.value)),1)]):u("",!0),a.identifier==="max"?y(e.$slots,a.identifier,{key:5},()=>[v(h(n.__('This field must have at most "{length}" characters"').replace("{length}",a.rule.value)),1)]):u("",!0),a.identifier==="different"?y(e.$slots,a.identifier,{key:6},()=>[v(h(n.__('This field must be different from "{other}""').replace("{other}",a.fields.filter(f=>f.name===a.rule.value)[0].label)),1)]):u("",!0)]))),128))],64)}const $r=D(Mr,[["render",Sr]]),Er={props:["className","buttonClass","type"]};function Rr(e,t,s,c,d,n){return i(),r("button",{class:m([s.type?s.type:s.buttonClass,"ns-inset-button rounded-full h-8 w-8 border items-center justify-center"])},[l("i",{class:m([s.className,"las"])},null,2)],2)}const Fr=D(Er,[["render",Rr]]),Or={name:"ns-input-label",props:["field"],data(){return{tags:[],searchField:"",focused:!1,optionsToKeyValue:{}}},methods:{addOption(e){let t;this.optionSuggestions.length===1&&e===void 0?t=this.optionSuggestions[0]:e!==void 0&&(t=e),t!==void 0&&(this.field.value.filter(c=>c===t.value).length>0||(this.searchField="",this.field.value.push(t.value),this.$emit("change",this.field)))},removeOption(e){const t=this.field.value.filter(s=>s!==e);this.field.value=t}},mounted(){if(this.$refs.searchField.addEventListener("focus",e=>{this.focused=!0}),this.$refs.searchField.addEventListener("blur",e=>{setTimeout(()=>{this.focused=!1},200)}),this.field.value.length===void 0)try{this.field.value=JSON.parse(this.field.value)}catch{this.field.value=[]}this.field.options.forEach(e=>{this.optionsToKeyValue[e.value]=e.label})},computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},optionSuggestions(){if(typeof this.field.value.map=="function"){const e=this.field.value.map(t=>t.value);return this.field.options.filter(t=>!e.includes(t.value)&&this.focused>0&&(t.label.search(this.searchField)>-1||t.value.search(this.searchField)>-1))}return[]},disabledClass(){return this.field.disabled?"ns-disabled cursor-not-allowed":""},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":""}},props:["placeholder","leading","type","field"]},Pr={class:"flex flex-col mb-2 flex-auto ns-input"},jr=["for"],Ar={key:0,class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},Ur={class:"leading sm:text-sm sm:leading-5"},Hr=["disabled","id","type","placeholder"],Lr={class:"rounded shadow bg-box-elevation-hover flex mr-1 mb-1"},Yr={class:"p-2 flex items-center text-primary"},Vr={class:"flex items-center justify-center px-2"},Br=["onClick"],Ir=l("i",{class:"las la-times-circle"},null,-1),Nr=[Ir],zr={class:"relative"},qr=["placeholder"],Wr={class:"h-0 absolute w-full z-10"},Gr={class:"shadow bg-box-background absoluve bottom-0 w-full max-h-80 overflow-y-auto"},Kr=["onClick"];function Qr(e,t,s,c,d,n){const a=w("ns-field-description");return i(),r("div",Pr,[s.field.label&&s.field.label.length>0?(i(),r("label",{key:0,for:s.field.name,class:m([n.hasError?"has-error":"is-pristine","block leading-5 font-medium"])},[y(e.$slots,"default")],10,jr)):u("",!0),l("div",{class:m([(n.hasError?"has-error":"is-pristine")+" "+(s.field.description||s.field.errors>0?"mb-2":""),"mt-1 relative border-2 rounded-md focus:shadow-sm"])},[s.leading?(i(),r("div",Ar,[l("span",Ur,h(s.leading),1)])):u("",!0),l("div",{disabled:s.field.disabled,id:s.field.name,type:s.field.type,class:m([n.inputClass,"flex sm:text-sm sm:leading-5 p-1 flex-wrap"]),placeholder:s.field.placeholder||""},[(i(!0),r(_,null,C(s.field.value,o=>(i(),r("div",Lr,[l("div",Yr,h(d.optionsToKeyValue[o]),1),l("div",Vr,[l("div",{onClick:f=>n.removeOption(o),class:"cursor-pointer rounded-full bg-error-tertiary h-5 w-5 flex items-center justify-center"},Nr,8,Br)])]))),256)),l("div",zr,[R(l("input",{onChange:t[0]||(t[0]=o=>o.stopPropagation()),onKeydown:t[1]||(t[1]=Y(o=>n.addOption(),["enter"])),ref:"searchField","onUpdate:modelValue":t[2]||(t[2]=o=>d.searchField=o),type:"text",class:"w-auto p-2 border-b border-dashed bg-transparent",placeholder:s.field.placeholder||"Start searching here..."},null,40,qr),[[A,d.searchField]]),l("div",Wr,[l("div",Gr,[l("ul",null,[(i(!0),r(_,null,C(n.optionSuggestions,o=>(i(),r("li",{onClick:f=>n.addOption(o),class:"p-2 hover:bg-box-elevation-hover text-primary cursor-pointer"},h(o.label),9,Kr))),256))])])])])],10,Hr)],2),T(a,{field:s.field},null,8,["field"])])}const Xr=D(Or,[["render",Qr]]),Zr={data:()=>({}),mounted(){},computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"ns-disabled cursor-not-allowed":""},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"}},props:["placeholder","leading","type","field"]},Jr={class:"flex flex-col mb-2 flex-auto ns-input"},ea=["for"],ta={key:0,class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},sa={class:"leading sm:text-sm sm:leading-5"},na=["disabled","id","type","placeholder"];function la(e,t,s,c,d,n){const a=w("ns-field-description");return i(),r("div",Jr,[s.field.label&&s.field.label.length>0?(i(),r("label",{key:0,for:s.field.name,class:m([n.hasError?"has-error":"is-pristine","block leading-5 font-medium"])},[y(e.$slots,"default")],10,ea)):u("",!0),l("div",{class:m([(n.hasError?"has-error":"is-pristine")+" "+(s.field.description||s.field.errors>0?"mb-2":""),"mt-1 relative overflow-hidden border-2 rounded-md focus:shadow-sm"])},[s.leading?(i(),r("div",ta,[l("span",sa,h(s.leading),1)])):u("",!0),R(l("input",{disabled:s.field.disabled,"onUpdate:modelValue":t[0]||(t[0]=o=>s.field.value=o),id:s.field.name,type:s.type||s.field.type||"text",class:m([n.inputClass,"block w-full sm:text-sm sm:leading-5 h-10"]),placeholder:s.field.placeholder||""},null,10,na),[[de,s.field.value]])],2),T(a,{field:s.field},null,8,["field"])])}const ia=D(Zr,[["render",la]]),ra={data:()=>({clicked:!1,_save:0}),props:["type","to","href","target"],computed:{buttonclass(){switch(this.type){case"info":return"shadow bg-blue-400 text-white";case"success":return"shadow bg-green-400 text-white";case"error":return"shadow bg-red-400 text-white";case"warning":return"shadow bg-orange-400 text-white";default:return"shadow bg-white text-gray-800"}}}},aa={class:"flex"},da=["target","href"];function oa(e,t,s,c,d,n){return i(),r("div",aa,[s.href?(i(),r("a",{key:0,target:s.target,href:s.href,class:m([n.buttonclass,"rounded cursor-pointer py-2 px-3 font-semibold"])},[y(e.$slots,"default")],10,da)):u("",!0)])}const ua=D(ra,[["render",oa]]),pe={zip:"la-file-archive",tar:"la-file-archive",bz:"la-file-archive","7z":"la-file-archive",css:"la-file-code",js:"la-file-code",json:"la-file-code",docx:"la-file-word",doc:"la-file-word",mp3:"la-file-audio",aac:"la-file-audio",ods:"la-file-audio",pdf:"la-file-pdf",csv:"la-file-csv",avi:"la-file-video",mpeg:"la-file-video",mpkg:"la-file-video",unknown:"la-file"},ca={name:"ns-media",props:["popup"],data(){return{searchFieldDebounce:null,searchField:"",pages:[{label:p("Upload"),name:"upload",selected:!1},{label:p("Gallery"),name:"gallery",selected:!0}],resources:[],isDragging:!1,response:{data:[],current_page:0,from:0,to:0,next_page_url:"",prev_page_url:"",path:"",per_page:0,total:0,last_page:0,first_page:0},fileIcons:pe,queryPage:1,bulkSelect:!1,files:[]}},mounted(){this.popupCloser();const e=this.pages.filter(t=>t.name==="gallery")[0];this.select(e)},watch:{searchField(){clearTimeout(this.searchFieldDebounce),this.searchFieldDebounce=setTimeout(()=>{this.loadGallery(1)},500)},files:{handler(){this.uploadFiles()},deep:!0}},computed:{postMedia(){return oe.applyFilters("http-client-url","/api/medias")},currentPage(){return this.pages.filter(e=>e.selected)[0]},hasOneSelected(){return this.response.data.filter(e=>e.selected).length>0},selectedResource(){return this.response.data.filter(e=>e.selected)[0]},csrf(){return ns.authentication.csrf},isPopup(){return typeof this.popup<"u"},user_id(){return this.isPopup&&this.popup.params.user_id||0},panelOpened(){return!this.bulkSelect&&this.hasOneSelected},popupInstance(){return this.popup}},methods:{popupCloser:re,__:p,cancelBulkSelect(){this.bulkSelect=!1,this.response.data.forEach(e=>e.selected=!1)},openError(e){L.show(se,{title:p("An error occured"),message:e.error.message||p("An unexpected error occured.")})},deleteSelected(){L.show(G,{title:p("Confirm Your Action"),message:p("You're about to delete selected resources. Would you like to proceed?"),onAction:e=>{e&&H.post("/api/medias/bulk-delete",{ids:this.response.data.filter(t=>t.selected).map(t=>t.id)}).subscribe({next:t=>{$.success(t.message).subscribe(),this.loadGallery()},error:t=>{$.error(t.message).subscribe()}})}})},loadUploadScreen(){setTimeout(()=>{this.setDropZone()},1e3)},setDropZone(){const e=document.getElementById("dropping-zone");e.addEventListener("dragenter",s=>this.preventDefaults(s),!1),e.addEventListener("dragleave",s=>this.preventDefaults(s),!1),e.addEventListener("dragover",s=>this.preventDefaults(s),!1),e.addEventListener("drop",s=>this.preventDefaults(s),!1),["dragenter","dragover"].forEach(s=>{e.addEventListener(s,()=>{this.isDragging=!0})}),["dragleave","drop"].forEach(s=>{e.addEventListener(s,()=>{this.isDragging=!1})}),e.addEventListener("drop",s=>this.handleDrop(s),!1),this.$refs.files.addEventListener("change",s=>this.processFiles(s.currentTarget.files))},async uploadFiles(){const e=this.files.filter(t=>t.uploaded===!1&&t.progress===0&&t.failed===!1);for(let t=0;t{const a=new FormData;a.append("file",s.file),H.post("/api/medias",a,{headers:{"Content-Type":"multipart/form-data"}}).subscribe({next:o=>{s.uploaded=!0,s.progress=100,d(o)},error:o=>{e[t].failed=!0,e[t].error=o}})})}catch{s.failed=!0}}},handleDrop(e){this.processFiles(e.dataTransfer.files),e.preventDefault(),e.stopPropagation()},preventDefaults(e){e.preventDefault(),e.stopPropagation()},getAllParents(e){let t=[];for(;e.parentNode&&e.parentNode.nodeName.toLowerCase()!="body";)e=e.parentNode,t.push(e);return t},triggerManualUpload(e){const t=e.target;if(t!==null){const c=this.getAllParents(t).map(d=>{const n=d.getAttribute("class");if(n)return n.split(" ")});if(t.getAttribute("class")){const d=t.getAttribute("class").split(" ");c.push(d)}c.flat().includes("ns-scrollbar")||this.$refs.files.click()}},processFiles(e){Array.from(e).filter(c=>(console.log(this),Object.values(window.ns.medias.mimes).includes(c.type))).forEach(c=>{this.files.unshift({file:c,uploaded:!1,failed:!1,progress:0})})},select(e){this.pages.forEach(t=>t.selected=!1),e.selected=!0,e.name==="gallery"?this.loadGallery():e.name==="upload"&&this.loadUploadScreen()},loadGallery(e=null){e=e===null?this.queryPage:e,this.queryPage=e,H.get(`/api/medias?page=${e}&user_id=${this.user_id}${this.searchField.length>0?`&search=${this.searchField}`:""}`).subscribe(t=>{t.data.forEach(s=>s.selected=!1),this.response=t})},submitChange(e,t){H.put(`/api/medias/${t.id}`,{name:e.srcElement.textContent}).subscribe({next:s=>{t.fileEdit=!1,$.success(s.message,"OK").subscribe()},error:s=>{t.fileEdit=!1,$.success(s.message||p("An unexpected error occured."),"OK").subscribe()}})},useSelectedEntries(){this.popup.params.resolve({event:"use-selected",value:this.response.data.filter(e=>e.selected)}),this.popup.close()},selectResource(e){this.bulkSelect||this.response.data.forEach((t,s)=>{s!==this.response.data.indexOf(e)&&(t.selected=!1)}),e.fileEdit=!1,e.selected=!e.selected},isImage(e){return Object.keys(ns.medias.imageMimes).includes(e.extension)}}},ha={class:"sidebar w-48 md:h-full flex-shrink-0"},fa={class:"text-xl font-bold my-4 text-center"},ma={class:"sidebar-menus flex md:block mt-8"},ga=["onClick"],ba={key:0,class:"content flex-auto w-full flex-col overflow-hidden flex"},pa={key:0,class:"p-2 flex bg-box-background flex-shrink-0 justify-between"},_a=l("div",null,null,-1),ya={class:"cursor-pointer text-lg md:text-xl font-bold text-center text-primary mb-4"},va={style:{display:"none"},type:"file",name:"",multiple:"",ref:"files",id:""},ka={class:"rounded bg-box-background shadow w-full md:w-2/3 text-primary h-56 overflow-y-auto ns-scrollbar p-2"},wa={key:0},xa={key:0,class:"rounded bg-info-primary flex items-center justify-center text-xs p-2"},Da=["onClick"],Ca=l("i",{class:"las la-eye"},null,-1),Ma={class:"ml-2"},Ta={key:1,class:"h-full w-full items-center justify-center flex text-center text-soft-tertiary"},Sa={key:1,class:"content flex-auto flex-col w-full overflow-hidden flex"},$a={key:0,class:"p-2 flex bg-box-background flex-shrink-0 justify-between"},Ea=l("div",null,null,-1),Ra={class:"flex flex-auto overflow-hidden"},Fa={class:"shadow ns-grid flex flex-auto flex-col overflow-y-auto ns-scrollbar"},Oa={class:"p-2 border-b border-box-background"},Pa={class:"ns-input border-2 rounded border-input-edge bg-input-background flex"},ja=["placeholder"],Aa={key:0,class:"flex items-center justify-center w-20 p-1"},Ua={class:"flex flex-auto"},Ha={class:"p-2 overflow-x-auto"},La={class:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5"},Ya={class:"p-2"},Va=["onClick"],Ba=["src","alt"],Ia={key:1,class:"object-cover h-full flex items-center justify-center"},Na={key:0,class:"flex flex-auto items-center justify-center"},za={class:"text-2xl font-bold"},qa={id:"preview",class:"ns-media-preview-panel hidden lg:block w-64 flex-shrink-0"},Wa={key:0,class:"h-64 bg-gray-800 flex items-center justify-center"},Ga=["src","alt"],Ka={key:1,class:"object-cover h-full flex items-center justify-center"},Qa={key:1,id:"details",class:"p-4 text-gray-700 text-sm"},Xa={class:"flex flex-col mb-2"},Za={class:"font-bold block"},Ja=["contenteditable"],ed={class:"flex flex-col mb-2"},td={class:"font-bold block"},sd={class:"flex flex-col mb-2"},nd={class:"font-bold block"},ld={class:"py-2 pr-2 flex ns-media-footer flex-shrink-0 justify-between"},id={class:"flex -mx-2 flex-shrink-0"},rd={key:0,class:"px-2"},ad={class:"ns-button shadow rounded overflow-hidden info"},dd=l("i",{class:"las la-times"},null,-1),od={key:1,class:"px-2"},ud={class:"ns-button shadow rounded overflow-hidden info"},cd=l("i",{class:"las la-check-circle"},null,-1),hd={key:2,class:"px-2"},fd={class:"ns-button shadow rounded overflow-hidden warning"},md=l("i",{class:"las la-trash"},null,-1),gd={class:"flex-shrink-0 -mx-2 flex"},bd={class:"px-2"},pd={class:"rounded shadow overflow-hidden flex text-sm"},_d=["disabled"],yd=l("hr",{class:"border-r border-gray-700"},null,-1),vd=["disabled"],kd={key:0,class:"px-2"},wd={class:"ns-button info"};function xd(e,t,s,c,d,n){const a=w("ns-close-button");return i(),r("div",{class:m(["flex md:flex-row flex-col ns-box shadow-xl overflow-hidden",n.isPopup?"w-6/7-screen h-6/7-screen":"w-full h-full"]),id:"ns-media"},[l("div",ha,[l("h3",fa,h(n.__("Medias Manager")),1),l("ul",ma,[(i(!0),r(_,null,C(d.pages,(o,f)=>(i(),r("li",{onClick:g=>n.select(o),class:m(["py-2 px-3 cursor-pointer border-l-8",o.selected?"active":""]),key:f},h(o.label),11,ga))),128))])]),n.currentPage.name==="upload"?(i(),r("div",ba,[n.isPopup?(i(),r("div",pa,[_a,l("div",null,[T(a,{onClick:t[0]||(t[0]=o=>n.popupInstance.close())})])])):u("",!0),l("div",{id:"dropping-zone",onClick:t[1]||(t[1]=o=>n.triggerManualUpload(o)),class:m([d.isDragging?"border-dashed border-2":"","flex flex-auto m-2 p-2 flex-col border-info-primary items-center justify-center"])},[l("h3",ya,h(n.__("Click Here Or Drop Your File To Upload")),1),l("input",va,null,512),l("div",ka,[d.files.length>0?(i(),r("ul",wa,[(i(!0),r(_,null,C(d.files,(o,f)=>(i(),r("li",{class:m([o.failed===!1?"border-info-secondary":"border-error-secondary","p-2 mb-2 border-b-2 flex items-center justify-between"]),key:f},[l("span",null,h(o.file.name),1),o.failed===!1?(i(),r("span",xa,h(o.progress)+"%",1)):u("",!0),o.failed===!0?(i(),r("div",{key:1,onClick:g=>n.openError(o),class:"rounded bg-error-primary hover:bg-error-secondary hover:text-white flex items-center justify-center text-xs p-2 cursor-pointer"},[Ca,v(),l("span",Ma,h(n.__("See Error")),1)],8,Da)):u("",!0)],2))),128))])):u("",!0),d.files.length===0?(i(),r("div",Ta,h(n.__("Your uploaded files will displays here.")),1)):u("",!0)])],2)])):u("",!0),n.currentPage.name==="gallery"?(i(),r("div",Sa,[n.isPopup?(i(),r("div",$a,[Ea,l("div",null,[T(a,{onClick:t[2]||(t[2]=o=>n.popupInstance.close())})])])):u("",!0),l("div",Ra,[l("div",Fa,[l("div",Oa,[l("div",Pa,[R(l("input",{id:"search",type:"text","onUpdate:modelValue":t[3]||(t[3]=o=>d.searchField=o),placeholder:n.__("Search Medias"),class:"px-4 block w-full sm:text-sm sm:leading-5 h-10"},null,8,ja),[[A,d.searchField]]),d.searchField.length>0?(i(),r("div",Aa,[l("button",{onClick:t[4]||(t[4]=o=>d.searchField=""),class:"h-full w-full rounded-tr rounded-br overflow-hidden"},h(n.__("Cancel")),1)])):u("",!0)])]),l("div",Ua,[l("div",Ha,[l("div",La,[(i(!0),r(_,null,C(d.response.data,(o,f)=>(i(),r("div",{key:f,class:""},[l("div",Ya,[l("div",{onClick:g=>n.selectResource(o),class:m([o.selected?"ns-media-image-selected ring-4":"","rounded-lg aspect-square bg-gray-500 m-2 overflow-hidden flex items-center justify-center"])},[n.isImage(o)?(i(),r("img",{key:0,class:"object-cover h-full",src:o.sizes.thumb,alt:o.name},null,8,Ba)):u("",!0),n.isImage(o)?u("",!0):(i(),r("div",Ia,[l("i",{class:m([d.fileIcons[o.extension]||d.fileIcons.unknown,"las text-8xl text-white"])},null,2)]))],10,Va)])]))),128))])]),d.response.data.length===0?(i(),r("div",Na,[l("h3",za,h(n.__("Nothing has already been uploaded")),1)])):u("",!0)])]),l("div",qa,[n.panelOpened?(i(),r("div",Wa,[n.isImage(n.selectedResource)?(i(),r("img",{key:0,class:"object-cover h-full",src:n.selectedResource.sizes.thumb,alt:n.selectedResource.name},null,8,Ga)):u("",!0),n.isImage(n.selectedResource)?u("",!0):(i(),r("div",Ka,[l("i",{class:m([d.fileIcons[n.selectedResource.extension]||d.fileIcons.unknown,"las text-8xl text-white"])},null,2)]))])):u("",!0),n.panelOpened?(i(),r("div",Qa,[l("p",Xa,[l("strong",Za,h(n.__("File Name"))+": ",1),l("span",{class:m(["p-2",n.selectedResource.fileEdit?"border-b border-input-edge bg-input-background":""]),onBlur:t[5]||(t[5]=o=>n.submitChange(o,n.selectedResource)),contenteditable:n.selectedResource.fileEdit?"true":"false",onClick:t[6]||(t[6]=o=>n.selectedResource.fileEdit=!0)},h(n.selectedResource.name),43,Ja)]),l("p",ed,[l("strong",td,h(n.__("Uploaded At"))+":",1),l("span",null,h(n.selectedResource.created_at),1)]),l("p",sd,[l("strong",nd,h(n.__("By"))+" :",1),l("span",null,h(n.selectedResource.user.username),1)])])):u("",!0)])]),l("div",ld,[l("div",id,[d.bulkSelect?(i(),r("div",rd,[l("div",ad,[l("button",{onClick:t[7]||(t[7]=o=>n.cancelBulkSelect()),class:"py-2 px-3"},[dd,v(" "+h(n.__("Cancel")),1)])])])):u("",!0),n.hasOneSelected&&!d.bulkSelect?(i(),r("div",od,[l("div",ud,[l("button",{onClick:t[8]||(t[8]=o=>d.bulkSelect=!0),class:"py-2 px-3"},[cd,v(" "+h(n.__("Bulk Select")),1)])])])):u("",!0),n.hasOneSelected?(i(),r("div",hd,[l("div",fd,[l("button",{onClick:t[9]||(t[9]=o=>n.deleteSelected()),class:"py-2 px-3"},[md,v(" "+h(n.__("Delete")),1)])])])):u("",!0)]),l("div",gd,[l("div",bd,[l("div",pd,[l("div",{class:m(["ns-button",d.response.current_page===1?"disabled cursor-not-allowed":"info"])},[l("button",{disabled:d.response.current_page===1,onClick:t[10]||(t[10]=o=>n.loadGallery(d.response.current_page-1)),class:"p-2"},h(n.__("Previous")),9,_d)],2),yd,l("div",{class:m(["ns-button",d.response.current_page===d.response.last_page?"disabled cursor-not-allowed":"info"])},[l("button",{disabled:d.response.current_page===d.response.last_page,onClick:t[11]||(t[11]=o=>n.loadGallery(d.response.current_page+1)),class:"p-2"},h(n.__("Next")),9,vd)],2)])]),n.isPopup&&n.hasOneSelected?(i(),r("div",kd,[l("div",wd,[l("button",{class:"rounded shadow p-2 text-sm",onClick:t[12]||(t[12]=o=>n.useSelectedEntries())},h(n.__("Use Selected")),1)])])):u("",!0)])])])):u("",!0)],2)}const _e=D(ca,[["render",xd]]),_c=Object.freeze(Object.defineProperty({__proto__:null,default:_e},Symbol.toStringTag,{value:"Module"})),Dd={computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"ns-disabled cursor-not-allowed":"ns-enabled"},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"}},data(){return{fileIcons:pe}},props:["placeholder","leading","type","field"],mounted(){},methods:{isImage(e){return Object.keys(ns.medias.imageMimes).includes(e.extension)},toggleMedia(){new Promise((t,s)=>{L.show(_e,{resolve:t,reject:s,...this.field.data||{}})}).then(t=>{t.event==="use-selected"&&(!this.field.data||this.field.data.type==="url"?this.field.value=t.value[0].sizes.original:!this.field.data||this.field.data.type==="model"?(this.field.value=t.value[0].id,this.field.data.model=t.value[0]):this.field.value=t.value[0].sizes.original,this.$forceUpdate())})}}},Cd={class:"flex flex-col mb-2 flex-auto ns-media"},Md=["for"],Td={key:0,class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},Sd={class:"text-primary sm:text-sm sm:leading-5"},$d={class:"rounded overflow-hidden flex"},Ed={key:0,class:"form-input flex w-full sm:text-sm items-center sm:leading-5 h-10"},Rd=["src","alt"],Fd={key:1,class:"object-cover flex items-center justify-center"},Od={class:"text-xs text-secondary"},Pd=["disabled","id","type","placeholder"],jd=l("i",{class:"las la-photo-video"},null,-1),Ad=[jd];function Ud(e,t,s,c,d,n){const a=w("ns-field-description");return i(),r("div",Cd,[l("label",{for:s.field.name,class:m([n.hasError?"has-error":"is-pristine","block leading-5 font-medium"])},[y(e.$slots,"default")],10,Md),l("div",{class:m([n.hasError?"has-error":"is-pristine","mt-1 relative border-2 rounded-md focus:shadow-sm"])},[s.leading?(i(),r("div",Td,[l("span",Sd,h(s.leading),1)])):u("",!0),l("div",$d,[s.field.data&&s.field.data.type==="model"?(i(),r("div",Ed,[s.field.value&&s.field.data.model.name?(i(),r(_,{key:0},[n.isImage(s.field.data.model)?(i(),r("img",{key:0,class:"w-8 h-8 m-1",src:s.field.data.model.sizes.thumb,alt:s.field.data.model.name},null,8,Rd)):u("",!0),n.isImage(s.field.data.model)?u("",!0):(i(),r("div",Fd,[l("i",{class:m([d.fileIcons[s.field.data.model.extension]||d.fileIcons.unknown,"las text-3xl"])},null,2)])),l("span",Od,h(s.field.data.model.name),1)],64)):u("",!0)])):u("",!0),!s.field.data||s.field.data.type==="undefined"||s.field.data.type==="url"?R((i(),r("input",{key:1,"onUpdate:modelValue":t[0]||(t[0]=o=>s.field.value=o),disabled:s.field.disabled,onBlur:t[1]||(t[1]=o=>e.$emit("blur",this)),onChange:t[2]||(t[2]=o=>e.$emit("change",this)),id:s.field.name,type:s.type||s.field.type||"text",class:m([n.inputClass,"form-input block w-full sm:text-sm sm:leading-5 h-10"]),placeholder:s.placeholder},null,42,Pd)),[[de,s.field.value]]):u("",!0),l("button",{onClick:t[3]||(t[3]=o=>n.toggleMedia(s.field)),class:"w-10 h-10 flex items-center justify-center border-l-2 outline-none"},Ad)])],2),T(a,{field:s.field},null,8,["field"])])}const Hd=D(Dd,[["render",Ud]]),Ld={data:()=>({defaultToggledState:!1,_save:0,hasChildren:!1}),props:["href","to","label","icon","notification","toggled","identifier"],mounted(){this.hasChildren=this.$el.querySelectorAll(".submenu").length>0,this.defaultToggledState=this.toggled!==void 0?this.toggled:this.defaultToggledState,q.subject().subscribe(e=>{e.value!==this.identifier&&(this.defaultToggledState=!1)})},methods:{toggleEmit(){this.toggle().then(e=>{e&&q.emit({identifier:"side-menu.open",value:this.identifier})})},goTo(e,t){return this.$router.push(e),t.preventDefault(),!1},toggle(){return new Promise((e,t)=>{(!this.href||this.href.length===0)&&(this.defaultToggledState=!this.defaultToggledState,e(this.defaultToggledState))})}}},Yd=["href"],Vd={class:"flex items-center"},Bd={key:0,class:"rounded-full notification-label font-bold w-6 h-6 text-xs justify-center items-center flex"},Id=["href"],Nd={class:"flex items-center"},zd={key:0,class:"rounded-full notification-label font-bold w-6 h-6 text-xs justify-center items-center flex"};function qd(e,t,s,c,d,n){var a,o;return i(),r("div",null,[s.to&&!e.hasChildren?(i(),r("a",{key:0,onClick:t[0]||(t[0]=f=>n.goTo(s.to,f)),href:s.to,class:m([e.defaultToggledState?"toggled":"normal","flex justify-between py-2 border-l-8 px-3 font-bold ns-aside-menu"])},[l("span",Vd,[l("i",{class:m(["las text-lg mr-2",((a=s.icon)==null?void 0:a.length)>0?s.icon:"la-star"])},null,2),v(" "+h(s.label),1)]),s.notification>0?(i(),r("span",Bd,h(s.notification),1)):u("",!0)],10,Yd)):(i(),r("a",{key:1,onClick:t[1]||(t[1]=f=>n.toggleEmit()),href:s.href||"javascript:void(0)",class:m([e.defaultToggledState?"toggled":"normal","flex justify-between py-2 border-l-8 px-3 font-bold ns-aside-menu"])},[l("span",Nd,[l("i",{class:m(["las text-lg mr-2",((o=s.icon)==null?void 0:o.length)>0?s.icon:"la-star"])},null,2),v(" "+h(s.label),1)]),s.notification>0?(i(),r("span",zd,h(s.notification),1)):u("",!0)],10,Id)),l("ul",{class:m([e.defaultToggledState?"":"hidden","submenu-wrapper"])},[y(e.$slots,"default")],2)])}const Wd=D(Ld,[["render",qd]]),Gd={data(){return{showPanel:!1,search:"",eventListener:null}},emits:["change","blur"],props:["field"],computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},_filtredOptions(){let e=this._options;return this.search.length>0&&(e=this._options.filter(t=>t.label.toLowerCase().search(this.search.toLowerCase())!==-1)),e.filter(t=>t.selected===!1)},_options(){return this.field.options.map(e=>(e.selected=e.selected===void 0?!1:e.selected,this.field.value&&this.field.value.includes(e.value)&&(e.selected=!0),e))}},methods:{__:p,togglePanel(){this.showPanel=!this.showPanel},selectAvailableOptionIfPossible(){this._filtredOptions.length>0&&this.addOption(this._filtredOptions[0])},addOption(e){this.field.disabled||(this.$emit("addOption",e),this.$forceUpdate(),setTimeout(()=>{this.search=""},100))},removeOption(e,t){if(!this.field.disabled)return t.preventDefault(),t.stopPropagation(),this.$emit("removeOption",e),this.$forceUpdate(),setTimeout(()=>{this.search=""},100),!1}},mounted(){this.field.value&&this.field.value.reverse().forEach(t=>{const s=this.field.options.filter(c=>c.value===t);s.length>0&&this.addOption(s[0])}),this.eventListener=document.addEventListener("click",e=>{let s=e.target.parentElement,c=!1;if(this.showPanel){for(;s;){if(s&&s.classList.contains("ns-multiselect")&&!s.classList.contains("arrows")){c=!0;break}s=s.parentElement}c===!1&&this.togglePanel()}})}},Kd={class:"flex flex-col ns-multiselect"},Qd=["for"],Xd={class:"flex flex-col"},Zd={class:"flex -mx-1 -my-1 flex-wrap"},Jd={class:"rounded bg-info-secondary text-white flex justify-between p-1 items-center"},eo={class:"pr-8"},to=["onClick"],so=l("i",{class:"las la-times"},null,-1),no=[so],lo={class:"arrows ml-1"},io={class:"ns-dropdown shadow"},ro={class:"search border-b border-input-option-hover"},ao={class:"h-40 overflow-y-auto"},oo=["onClick"],uo={key:0,class:"las la-check"},co={key:0,class:"p-2 text-center text-primary"},ho={class:"my-2"};function fo(e,t,s,c,d,n){const a=w("ns-field-description");return i(),r("div",Kd,[l("label",{for:s.field.name,class:m([n.hasError?"text-error-secondary":"text-primary","block mb-1 leading-5 font-medium"])},[y(e.$slots,"default")],10,Qd),l("div",Xd,[l("div",{onClick:t[0]||(t[0]=o=>n.togglePanel()),class:m([(d.showPanel,""),"overflow-y-auto flex select-preview justify-between rounded border-2 border-input-option-hover p-2 items-start"]),style:{"max-height":"150px"}},[l("div",Zd,[(i(!0),r(_,null,C(n._options.filter(o=>o.selected),(o,f)=>(i(),r("div",{key:f,class:"px-1 my-1"},[l("div",Jd,[l("span",eo,h(o.label),1),l("button",{onClick:g=>n.removeOption(o,g),class:"rounded outline-none hover:bg-info-tertiary h-6 w-6 flex items-center justify-center"},no,8,to)])]))),128))]),l("div",lo,[l("i",{class:m(["las la-angle-down",d.showPanel?"hidden":""])},null,2),l("i",{class:m(["las la-angle-up",d.showPanel?"":"hidden"])},null,2)])],2),d.showPanel?(i(),r("div",{key:0,class:m(["h-0 z-10",d.showPanel?"shadow":""])},[l("div",io,[l("div",ro,[R(l("input",{onKeypress:t[1]||(t[1]=Y(o=>n.selectAvailableOptionIfPossible(),["enter"])),"onUpdate:modelValue":t[2]||(t[2]=o=>d.search=o),class:"p-2 w-full bg-transparent text-primary outline-none",placeholder:"Search"},null,544),[[A,d.search]])]),l("div",ao,[(i(!0),r(_,null,C(n._filtredOptions,(o,f)=>(i(),r("div",{onClick:g=>n.addOption(o),key:f,class:m([o.selected?"bg-info-secondary text-white":"text-primary","option p-2 flex justify-between cursor-pointer hover:bg-info-secondary hover:text-white"])},[l("span",null,h(o.label),1),l("span",null,[o.checked?(i(),r("i",uo)):u("",!0)])],10,oo))),128))]),n._options.length===0?(i(),r("div",co,h(n.__("Nothing to display")),1)):u("",!0)])],2)):u("",!0)]),l("div",ho,[T(a,{field:s.field},null,8,["field"])])])}const mo=D(Gd,[["render",fo]]),go={},bo={class:"my-4"},po={class:"font-bold text-2xl"},_o={class:"text-primary"};function yo(e,t){return i(),r("div",bo,[l("h2",po,[y(e.$slots,"title")]),l("span",_o,[y(e.$slots,"description")])])}const vo=D(go,[["render",yo]]),ko={name:"ns-search",props:["url","placeholder","value","label","method","searchArgument"],data(){return{searchText:"",searchTimeout:null,results:[]}},methods:{__:p,selectOption(e){this.$emit("select",e),this.searchText="",this.results=[]},renderLabel(e,t){return typeof t=="object"?t.map(s=>e[s]).join(" "):e[t]}},watch:{searchText(){clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout(()=>{this.searchText.length>0&&H[this.method||"post"](this.url,{[this.searchArgument||"search"]:this.searchText}).subscribe({next:e=>{this.results=e},error:e=>{$.error(e.message||p("An unexpected error occurred.")).subscribe()}})},1e3)}},mounted(){}},wo={class:"ns-search"},xo={class:"input-group info border-2"},Do=["placeholder"],Co={class:"relative"},Mo={class:"w-full absolute shadow-lg"},To={key:0,class:"ns-vertical-menu"},So=["onClick"];function $o(e,t,s,c,d,n){return i(),r("div",wo,[l("div",xo,[R(l("input",{type:"text","onUpdate:modelValue":t[0]||(t[0]=a=>d.searchText=a),class:"p-2 w-full outline-none",placeholder:s.placeholder||n.__("Search..."),id:""},null,8,Do),[[A,d.searchText]])]),l("div",Co,[l("div",Mo,[d.results.length>0&&d.searchText.length>0?(i(),r("ul",To,[(i(!0),r(_,null,C(d.results,(a,o)=>(i(),r("li",{class:"border-b p-2 cursor-pointer",onClick:f=>n.selectOption(a),key:o},h(n.renderLabel(a,s.label)),9,So))),128))])):u("",!0)])])])}const Eo=D(ko,[["render",$o]]),Ro={data:()=>({searchField:"",showResults:!1}),name:"ns-search-select",emits:["saved","change"],props:["name","placeholder","field","leading"],computed:{selectedOptionLabel(){if(this.field.value===null||this.field.value===void 0)return p("Choose...");const e=this.field.options.filter(t=>t.value===this.field.value);return e.length>0?e[0].label:p("Choose...")},filtredOptions(){return this.searchField.length>0?this.field.options.filter(e=>new RegExp(this.searchField,"i").test(e.label)).splice(0,10):this.field.options},hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"ns-disabled cursor-not-allowed":""},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"}},watch:{showResults(){this.showResults===!0&&setTimeout(()=>{this.$refs.searchInputField.select()},50)}},mounted(){const e=this.field.options.filter(t=>t.value===this.field.value);e.length>0&&[null,void 0].includes(this.field.value)&&this.selectOption(e[0]),document.addEventListener("click",t=>{this.$el.contains(t.target)===!1&&(this.showResults=!1)})},methods:{__:p,selectFirstOption(){this.filtredOptions.length>0&&this.selectOption(this.filtredOptions[0])},selectOption(e){this.field.value=e.value,this.$emit("change",e.value),this.searchField="",this.showResults=!1},async triggerDynamicComponent(e){try{this.showResults=!1;const t=nsExtraComponents[e.component]||nsComponents[e.component];t===void 0&&$.error(p(`The component ${e.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.`)).subscribe();const s=await new Promise((c,d)=>{const n=L.show(t,{...e.props||{},field:this.field,resolve:c,reject:d})});this.$emit("saved",s)}catch{}}}},Fo={class:"flex flex-col flex-auto ns-select"},Oo=["for"],Po={class:"text-primary text-sm"},jo=l("i",{class:"las la-plus"},null,-1),Ao=[jo],Uo={key:0,class:"relative"},Ho={class:"w-full overflow-hidden -top-[8px] border-r-2 border-l-2 border-t rounded-b-md border-b-2 border-input-edge bg-input-background shadow z-10 absolute"},Lo={class:"border-b border-input-edge border-dashed p-2"},Yo=["placeholder"],Vo={class:"h-60 overflow-y-auto"},Bo=["onClick"];function Io(e,t,s,c,d,n){const a=w("ns-field-description");return i(),r("div",Fo,[l("label",{for:s.field.name,class:m([n.hasError?"has-error":"is-pristine","block leading-5 font-medium"])},[y(e.$slots,"default")],10,Oo),l("div",{class:m([n.hasError?"has-error":"is-pristine","border-2 mt-1 relative rounded-md shadow-sm mb-1 flex overflow-hidden"])},[l("div",{onClick:t[0]||(t[0]=o=>e.showResults=!e.showResults),class:"flex-auto h-10 sm:leading-5 py-2 px-4 flex items-center bg-input-background cursor-default"},[l("span",Po,h(n.selectedOptionLabel),1)]),s.field.component?(i(),r("div",{key:0,onClick:t[1]||(t[1]=o=>n.triggerDynamicComponent(s.field)),class:"flex items-center justify-center w-10 hover:cursor-pointer hover:bg-input-button-hover border-l-2 border-input-edge"},Ao)):u("",!0)],2),e.showResults?(i(),r("div",Uo,[l("div",Ho,[l("div",Lo,[R(l("input",{onKeypress:t[2]||(t[2]=Y(o=>n.selectFirstOption(),["enter"])),ref:"searchInputField","onUpdate:modelValue":t[3]||(t[3]=o=>e.searchField=o),type:"text",placeholder:n.__("Search result")},null,40,Yo),[[A,e.searchField]])]),l("div",Vo,[l("ul",null,[(i(!0),r(_,null,C(n.filtredOptions,o=>(i(),r("li",{onClick:f=>n.selectOption(o),class:"py-1 px-2 hover:bg-info-primary cursor-pointer text-primary"},h(o.label),9,Bo))),256))])])])])):u("",!0),T(a,{field:s.field},null,8,["field"])])}const No=D(Ro,[["render",Io]]),zo={data:()=>({}),props:["name","placeholder","field","leading"],computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"ns-disabled cursor-not-allowed":""},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"}},mounted(){},methods:{__:p}},qo={class:"flex flex-col flex-auto ns-select"},Wo=["for"],Go=["disabled","name"],Ko={value:null},Qo=["value"];function Xo(e,t,s,c,d,n){const a=w("ns-field-description");return i(),r("div",qo,[l("label",{for:s.field.name,class:m([n.hasError?"has-error":"is-pristine","block leading-5 font-medium"])},[y(e.$slots,"default")],10,Wo),l("div",{class:m([n.hasError?"has-error":"is-pristine","border-2 mt-1 relative rounded-md shadow-sm mb-1 overflow-hidden"])},[R(l("select",{disabled:s.field.disabled?s.field.disabled:!1,name:s.field.name,"onUpdate:modelValue":t[0]||(t[0]=o=>s.field.value=o),class:m([n.inputClass,"form-input block w-full pl-7 pr-12 sm:text-sm sm:leading-5 h-10 appearance-none"])},[l("option",Ko,h(n.__("Choose an option")),1),(i(!0),r(_,null,C(s.field.options,(o,f)=>(i(),r("option",{key:f,value:o.value,class:"py-2"},h(o.label),9,Qo))),128))],10,Go),[[U,s.field.value]])],2),T(a,{field:s.field},null,8,["field"])])}const Zo=D(zo,[["render",Xo]]),Jo={data:()=>({}),props:["name","placeholder","field","leading"],computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"bg-gray-200 cursor-not-allowed":"bg-transparent"},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"}},methods:{__:p,playSelectedSound(){this.field.value!==null&&this.field.value.length>0&&new Audio(this.field.value).play()}}},eu={class:"flex flex-col flex-auto"},tu=["for"],su=l("button",{class:"w-10 flex item-center justify-center"},[l("i",{class:"las la-play text-2xl"})],-1),nu=[su],lu=["disabled","name"],iu=["value"];function ru(e,t,s,c,d,n){const a=w("ns-field-description");return i(),r("div",eu,[l("label",{for:s.field.name,class:m([n.hasError?"text-error-primary":"text-primary","block leading-5 font-medium"])},[y(e.$slots,"default")],10,tu),l("div",{class:m([n.hasError?"border-error-primary":"border-input-edge","border-2 mt-1 flex relative overflow-hidden rounded-md shadow-sm mb-1 form-input"])},[l("div",{onClick:t[0]||(t[0]=o=>n.playSelectedSound()),class:"border-r-2 border-input-edge flex-auto flex items-center justify-center hover:bg-info-tertiary hover:text-white"},nu),R(l("select",{disabled:s.field.disabled?s.field.disabled:!1,onChange:t[1]||(t[1]=o=>e.$emit("change",o)),name:s.field.name,"onUpdate:modelValue":t[2]||(t[2]=o=>s.field.value=o),class:m([n.inputClass,"text-primary block w-full pl-7 pr-12 sm:text-sm sm:leading-5 h-10 outline-none"])},[(i(!0),r(_,null,C(s.field.options,(o,f)=>(i(),r("option",{key:f,value:o.value,class:"py-2"},h(o.label),9,iu))),128))],42,lu),[[U,s.field.value]])],2),T(a,{field:s.field},null,8,["field"])])}const au=D(Jo,[["render",ru]]),du={data:()=>({}),mounted(){},computed:{validatedSize(){return this.size||24},validatedBorder(){return this.border||8},validatedAnimation(){return this.animation||"fast"}},props:["color","size","border","animation"]},ou={class:"flex items-center justify-center"};function uu(e,t,s,c,d,n){return i(),r("div",ou,[l("div",{class:m(["loader ease-linear rounded-full border-gray-200",n.validatedAnimation+" border-4 border-t-4 w-"+n.validatedSize+" h-"+n.validatedSize])},null,2)])}const cu=D(du,[["render",uu]]),hu={data:()=>({}),props:["href","label","active","to"],mounted(){},methods:{goTo(e,t){return this.$router.push(e),t.preventDefault(),!1}}},fu={class:"submenu"},mu=["href"],gu=["href"];function bu(e,t,s,c,d,n){return i(),r("div",null,[l("li",fu,[s.href?(i(),r("a",{key:0,class:m([s.active?"font-bold active":"normal","py-2 border-l-8 px-3 block ns-aside-submenu"]),href:s.href},[y(e.$slots,"default")],10,mu)):s.to?(i(),r("a",{key:1,class:m([s.active?"font-bold active":"normal","py-2 border-l-8 px-3 block ns-aside-submenu"]),onClick:t[0]||(t[0]=a=>n.goTo(s.to,a)),href:s.to},[y(e.$slots,"default")],10,gu)):u("",!0)])])}const pu=D(hu,[["render",bu]]),_u={props:["options","row","columns","prependOptions","showOptions"],data:()=>({optionsToggled:!1}),mounted(){},methods:{__:p,sanitizeHTML(e){var t=document.createElement("div");t.innerHTML=e;for(var s=t.getElementsByTagName("script"),c=s.length;c--;)s[c].parentNode.removeChild(s[c]);return t.innerHTML},getElementOffset(e){const t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset,left:t.left+window.pageXOffset}},toggleMenu(e){if(this.row.$toggled=!this.row.$toggled,this.$emit("toggled",this.row),this.row.$toggled)setTimeout(()=>{const t=this.$el.querySelectorAll(".relative > .absolute")[0],s=this.$el.querySelectorAll(".relative")[0],c=this.getElementOffset(s);t.style.top=c.top+"px",t.style.left=c.left+"px",s!==void 0&&(s.classList.remove("relative"),s.classList.add("dropdown-holder"))},100);else{const t=this.$el.querySelectorAll(".dropdown-holder")[0];t.classList.remove("dropdown-holder"),t.classList.add("relative")}},handleChanged(e){this.row.$checked=e,this.$emit("updated",this.row)},triggerAsync(e){e.confirm!==null?confirm(e.confirm.message)&&H[e.type.toLowerCase()](e.url).subscribe(t=>{$.success(t.message).subscribe(),this.$emit("reload",this.row)},t=>{this.toggleMenu(),$.error(t.message).subscribe()}):(q.emit({identifier:"ns-table-row-action",value:{action:e,row:this.row,component:this}}),this.toggleMenu())},triggerPopup(e,t){const s=window.nsExtraComponents[e.component];if(console.log({action:e}),e.component)return s?new Promise((c,d)=>{Popup.show(s,{resolve:c,reject:d,row:t,action:e})}):$.error(p(`Unable to load the component "${e.component}". Make sure the component is registered to "nsExtraComponents".`)).subscribe();this.triggerAsync(e)}}},yu={class:"font-sans p-2"},vu={key:0,class:"font-sans p-2"},ku={class:""},wu=l("i",{class:"las la-ellipsis-h"},null,-1),xu={class:"relative"},Du={key:0,class:"zoom-in-entrance border border-box-edge anim-duration-300 z-50 origin-bottom-right w-56 mt-2 absolute rounded-md shadow-lg ns-menu-wrapper"},Cu={class:"rounded-md shadow-xs"},Mu={class:"py-1",role:"menu","aria-orientation":"vertical","aria-labelledby":"options-menu"},Tu=["href","innerHTML"],Su=["onClick","innerHTML"],$u=["href","innerHTML"],Eu=["innerHTML"],Ru={key:2},Fu={key:1,class:"font-sans p-2 flex flex-col items-center justify-center"},Ou={class:""},Pu=l("i",{class:"las la-ellipsis-h"},null,-1),ju={class:"relative"},Au={key:0,class:"zoom-in-entrance border border-box-edge anim-duration-300 z-50 origin-bottom-right -ml-28 w-56 mt-2 absolute rounded-md shadow-lg ns-menu-wrapper"},Uu={class:"rounded-md shadow-xs"},Hu={class:"py-1",role:"menu","aria-orientation":"vertical","aria-labelledby":"options-menu"},Lu=["href","innerHTML"],Yu=["onClick","innerHTML"];function Vu(e,t,s,c,d,n){const a=w("ns-checkbox");return i(),r("tr",{class:m(["ns-table-row",s.row.$cssClass?s.row.$cssClass:"border text-sm"])},[l("td",yu,[T(a,{onChange:t[0]||(t[0]=o=>n.handleChanged(o)),checked:s.row.$checked},null,8,["checked"])]),s.prependOptions&&s.showOptions?(i(),r("td",vu,[l("div",ku,[l("button",{onClick:t[1]||(t[1]=o=>n.toggleMenu(o)),class:m([s.row.$toggled?"active":"","ns-inset-button outline-none rounded-full w-24 text-sm p-1 border"])},[wu,v(" "+h(n.__("Options")),1)],2),s.row.$toggled?(i(),r("div",{key:0,onClick:t[2]||(t[2]=o=>n.toggleMenu(o)),class:"absolute w-full h-full z-10 top-0 left-0"})):u("",!0),l("div",xu,[s.row.$toggled?(i(),r("div",Du,[l("div",Cu,[l("div",Mu,[(i(!0),r(_,null,C(s.row.$actions,(o,f)=>(i(),r(_,{key:f},[o.type==="GOTO"?(i(),r("a",{key:0,href:o.url,class:"ns-action-button block px-4 py-2 text-sm leading-5",role:"menuitem",innerHTML:n.sanitizeHTML(o.label)},null,8,Tu)):u("",!0),["GET","DELETE","POPUP"].includes(o.type)?(i(),r("a",{key:1,href:"javascript:void(0)",onClick:g=>n.triggerAsync(o),class:"ns-action-button block px-4 py-2 text-sm leading-5",role:"menuitem",innerHTML:n.sanitizeHTML(o.label)},null,8,Su)):u("",!0)],64))),128))])])])):u("",!0)])])])):u("",!0),(i(!0),r(_,null,C(s.columns,(o,f)=>(i(),r("td",{key:f,class:"font-sans p-2"},[s.row[f]&&s.row[f].type&&s.row[f].type==="link"?(i(),r("a",{key:0,target:"_blank",href:s.row[f].href,innerHTML:n.sanitizeHTML(s.row[f].label)},null,8,$u)):u("",!0),typeof s.row[f]=="string"||typeof s.row[f]=="number"?(i(),r("div",{key:1,innerHTML:n.sanitizeHTML(s.row[f])},null,8,Eu)):u("",!0),s.row[f]===null?(i(),r("div",Ru,h(n.__("Undefined")),1)):u("",!0)]))),128)),!s.prependOptions&&s.showOptions?(i(),r("td",Fu,[l("div",Ou,[l("button",{onClick:t[3]||(t[3]=o=>n.toggleMenu(o)),class:m([s.row.$toggled?"active":"","ns-inset-button outline-none rounded-full w-24 text-sm p-1 border"])},[Pu,v(" "+h(n.__("Options")),1)],2),s.row.$toggled?(i(),r("div",{key:0,onClick:t[4]||(t[4]=o=>n.toggleMenu(o)),class:"absolute w-full h-full z-10 top-0 left-0"})):u("",!0),l("div",ju,[s.row.$toggled?(i(),r("div",Au,[l("div",Uu,[l("div",Hu,[(i(!0),r(_,null,C(s.row.$actions,(o,f)=>(i(),r(_,{key:f},[o.type==="GOTO"?(i(),r("a",{key:0,href:o.url,class:"ns-action-button block px-4 py-2 text-sm leading-5",role:"menuitem",innerHTML:n.sanitizeHTML(o.label)},null,8,Lu)):u("",!0),["GET","DELETE","POPUP"].includes(o.type)?(i(),r("a",{key:1,href:"javascript:void(0)",onClick:g=>n.triggerAsync(o),class:"ns-action-button block px-4 py-2 text-sm leading-5",role:"menuitem",innerHTML:n.sanitizeHTML(o.label)},null,8,Yu)):u("",!0)],64))),128))])])])):u("",!0)])])])):u("",!0)],2)}const Bu=D(_u,[["render",Vu]]),Iu={data(){return{childrens:[],tabState:new $e}},props:["active"],computed:{activeComponent(){const e=this.childrens.filter(t=>t.active);return e.length>0?e[0]:!1}},beforeUnmount(){this.tabState.unsubscribe()},watch:{active(e,t){this.childrens.forEach(s=>{s.active=s.identifier===e,s.active&&this.toggle(s)})}},mounted(){this.buildChildrens(this.active)},methods:{__:p,toggle(e){this.$emit("active",e.identifier),this.$emit("changeTab",e.identifier),this.tabState.next(e)},buildChildrens(e){this.childrens=Array.from(this.$el.querySelectorAll(".ns-tab-item")).map(s=>{const c=s.getAttribute("identifier")||void 0;let d=!0;return s.getAttribute("visible")&&(d=s.getAttribute("visible")==="true"),{el:s,active:!!(e&&e===c),identifier:c,initialized:!1,visible:d,label:s.getAttribute("label")||p("Unamed Tab")}}).filter(s=>s.visible),!(this.childrens.filter(s=>s.active).length>0)&&this.childrens.length>0&&(this.childrens[0].active=!0),this.childrens.forEach(s=>{s.active&&this.toggle(s)})}}},Nu=["selected-tab"],zu={class:"header ml-4 flex justify-between",style:{"margin-bottom":"-1px"}},qu={class:"flex flex-auto"},Wu=["onClick"];function Gu(e,t,s,c,d,n){return i(),r("div",{class:"tabs flex flex-col flex-auto ns-tab overflow-hidden","selected-tab":n.activeComponent.identifier},[l("div",zu,[l("div",qu,[(i(!0),r(_,null,C(d.childrens,(a,o)=>(i(),r("div",{key:a.identifier,onClick:f=>n.toggle(a),class:m([s.active===a.identifier?"border-b-0 active z-10":"border inactive","tab rounded-tl rounded-tr border px-3 py-2 cursor-pointer"]),style:{"margin-right":"-1px"}},h(a.label),11,Wu))),128))]),l("div",null,[y(e.$slots,"extra")])]),y(e.$slots,"default")],8,Nu)}const Ku=D(Iu,[["render",Gu]]),Qu={data(){return{selectedTab:{},tabStateSubscriber:null}},computed:{},mounted(){this.tabStateSubscriber=this.$parent.tabState.subscribe(e=>{this.selectedTab=e})},unmounted(){this.tabStateSubscriber.unsubscribe()},props:["label","identifier","padding"]},Xu=["label","identifier"];function Zu(e,t,s,c,d,n){return i(),r("div",{class:m([d.selectedTab.identifier!==s.identifier?"hidden":"","ns-tab-item flex flex-auto overflow-hidden"]),label:s.label,identifier:s.identifier},[d.selectedTab.identifier===s.identifier?(i(),r("div",{key:0,class:m(["border rounded flex-auto overflow-y-auto",s.padding||"p-4"])},[y(e.$slots,"default")],2)):u("",!0)],10,Xu)}const Ju=D(Qu,[["render",Zu]]),ec={data:()=>({}),mounted(){},computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"ns-disabled cursor-not-allowed":""},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"p-8":"p-2"}},props:["placeholder","leading","type","field"]},tc={class:"flex flex-col mb-2 flex-auto ns-textarea"},sc=["for"],nc={key:0,class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},lc={class:"text-secondary sm:text-sm sm:leading-5"},ic=["rows","disabled","id","type","placeholder"],rc={key:0,class:"text-xs text-secondary"};function ac(e,t,s,c,d,n){return i(),r("div",tc,[l("label",{for:s.field.name,class:m([n.hasError?"text-error-primary":"text-primary","block leading-5 font-medium"])},h(s.field.label),11,sc),l("div",{class:m([n.hasError?"has-error":"is-pristine","mt-1 relative border-2 overflow-hidden rounded-md focus:shadow-sm mb-1"])},[s.leading?(i(),r("div",nc,[l("span",lc,h(s.leading),1)])):u("",!0),R(l("textarea",{rows:s.field.data&&s.field.data.rows||10,disabled:s.field.disabled,"onUpdate:modelValue":t[0]||(t[0]=a=>s.field.value=a),onBlur:t[1]||(t[1]=a=>e.$emit("blur",this)),onChange:t[2]||(t[2]=a=>e.$emit("change",this)),id:s.field.name,type:s.type||s.field.type||"text",class:m([n.inputClass,"form-input block w-full sm:text-sm sm:leading-5"]),placeholder:s.placeholder},null,42,ic),[[A,s.field.value]])],2),!s.field.errors||s.field.errors.length===0?(i(),r("p",rc,[y(e.$slots,"description")])):u("",!0),(i(!0),r(_,null,C(s.field.errors,(a,o)=>(i(),r("p",{key:o,class:"text-xs text-error-primary"},[a.identifier==="required"?y(e.$slots,a.identifier,{key:0},()=>[v("This field is required.")]):u("",!0),a.identifier==="email"?y(e.$slots,a.identifier,{key:1},()=>[v("This field must contain a valid email address.")]):u("",!0),a.identifier==="invalid"?y(e.$slots,a.identifier,{key:2},()=>[v(h(a.message),1)]):u("",!0)]))),128))])}const dc=D(ec,[["render",ac]]),yc=Object.freeze(Object.defineProperty({__proto__:null,nsAlertPopup:se,nsAvatar:qe,nsButton:Xe,nsCalendar:ce,nsCheckbox:ds,nsCkeditor:Fe,nsCloseButton:fs,nsConfirmPopup:G,nsCrud:vn,nsCrudForm:Nn,nsDate:Zn,nsDateRangePicker:ge,nsDateTimePicker:be,nsDatepicker:$i,nsDaterangePicker:Wi,nsDragzone:rr,nsField:Cr,nsFieldDescription:$r,nsIconButton:Fr,nsInlineMultiselect:Xr,nsInput:ia,nsLink:ua,nsMediaInput:Hd,nsMenu:Wd,nsMultiselect:mo,nsNotice:Oe,nsNumpad:Pe,nsNumpadPlus:je,nsPOSLoadingPopup:Ae,nsPageTitle:vo,nsPaginate:Ue,nsPromptPopup:He,nsSearch:Eo,nsSearchSelect:No,nsSelect:Zo,nsSelectAudio:au,nsSpinner:cu,nsSubmenu:pu,nsSwitch:ue,nsTableRow:Bu,nsTabs:Ku,nsTabsItem:Ju,nsTextarea:dc},Symbol.toStringTag,{value:"Module"}));export{pu as a,yc as b,$i as c,Wi as d,be as e,_e as f,Cr as g,fs as h,_c as i,Wd as n}; diff --git a/public/build/assets/components-RJC2qWGQ.js b/public/build/assets/components-RJC2qWGQ.js new file mode 100644 index 000000000..7dc324d92 --- /dev/null +++ b/public/build/assets/components-RJC2qWGQ.js @@ -0,0 +1 @@ +import se from"./ns-alert-popup-SVrn5Xft.js";import{_}from"./currency-lOMYG1Wf.js";import{n as ve}from"./ns-avatar-image-CAD6xUGA.js";import{_ as D}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,a as l,t as h,f as T,r as w,A as y,e as u,n as m,F as p,b as C,B as F,i as v,w as M,g as E,d as ke,j as W,C as we,D as ne,E as le,G as xe,H as J,I as ee,h as z,J as De,K as Ce,s as te,L as Me}from"./runtime-core.esm-bundler-RT2b-_3S.js";import{h as x,b as $,v as j,F as ie,g as ae,p as re,P as L,w as Y,i as U,a as H,n as de,j as Te,k as Se,l as oe,e as q,S as $e}from"./bootstrap-Bpe5LRJd.js";import{n as G,g as Ee,e as N,b as Fe,f as ue,h as Re,i as Oe,a as Pe,j as je,c as Ae,k as Ue,d as He}from"./ns-prompt-popup-C2dK5WQb.js";import"./index.es-Br67aBEV.js";const Le={methods:{__:_},components:{nsAvatarImage:ve},name:"ns-avatar",data(){return{svg:""}},computed:{avatarUrl(){return this.url.length===0?"":this.url}},props:["url","display-name"]},Ye={class:"flex justify-between items-center flex-shrink-0"},Ve={class:"hidden md:inline-block px-2"},Be={class:"md:hidden px-2"},Ie={class:"px-2"},Ne={class:"overflow-hidden rounded-full bg-gray-600"};function ze(e,t,s,c,d,n){const r=w("ns-avatar-image");return i(),a("div",Ye,[l("span",Ve,h(n.__("Howdy, {name}").replace("{name}",this.displayName)),1),l("span",Be,h(e.displayName),1),l("div",Ie,[l("div",Ne,[T(r,{url:n.avatarUrl,name:e.displayName},null,8,["url","name"])])])])}const qe=D(Le,[["render",ze]]),We={data:()=>({clicked:!1,_save:0}),props:["type","disabled","link","href","routerLink","to","target"],mounted(){},computed:{isDisabled(){return this.disabled&&(this.disabled.length===0||this.disabled==="disabled"||this.disabled)}}},Ge=["disabled"],Ke=["target","href"];function Qe(e,t,s,c,d,n){return i(),a("div",{class:m(["flex ns-button",s.type?s.type:"default"])},[!s.link&&!s.href?(i(),a("button",{key:0,disabled:n.isDisabled,class:"flex rounded items-center py-2 px-3 font-semibold"},[y(e.$slots,"default")],8,Ge)):u("",!0),s.href?(i(),a("a",{key:1,target:s.target,href:s.href,class:"flex rounded items-center py-2 px-3 font-semibold"},[y(e.$slots,"default")],8,Ke)):u("",!0)],2)}const Ze=D(We,[["render",Qe]]),Xe={name:"ns-calendar",props:["date","field","visible","range","selected-range","side"],data(){return{calendar:[[]],currentDay:x(),daysOfWeek:new Array(7).fill("").map((e,t)=>t),hours:0,minutes:0,currentView:"days",clickedOnCalendar:!1,moment:x,months:new Array(12).fill("").map((e,t)=>t)}},computed:{momentCopy(){return x()}},beforeUnmount(){document.removeEventListener("click",this.checkClickedItem)},mounted(){document.addEventListener("click",this.checkClickedItem),this.currentDay=[void 0,null,""].includes(this.date)?x():x(this.date),this.hours=this.currentDay.hours(),this.minutes=this.currentDay.minutes(),this.build(),this.toggleView("days")},methods:{__:_,handleCalendarClick(){this.clickedOnCalendar=!0},getDayClass({day:e,_dayIndex:t,dayOfWeek:s,_index:c,currentDay:d}){const n=[];return(x(this.date).isSame(e.date,"day")||this.isRangeEdge(e))&&!this.isInvalidRange()?n.push("bg-info-secondary text-primary border-info-secondary text-white"):n.push("hover:bg-numpad-hover"),this.isInvalidRange()&&this.isRangeEdge(e)&&n.push("bg-error-secondary text-white"),c===0&&n.push("border-t border-tab-table-th"),this.isInRange(e)&&!this.isRangeEdge(e)?n.push("bg-info-primary"):e.isDifferentMonth&&!this.isRangeEdge(e)&&n.push("bg-tab-table-th"),n.join(" ")},erase(){this.selectDate({date:x(ns.date.current)})},isInRange(e){return this.range&&this.range.length===2&&this.range[0]&&this.range[1]?x(e.date).isSameOrAfter(this.range[0])&&x(e.date).isSameOrBefore(this.range[1]):!1},isInvalidRange(){return this.selectedRange&&this.selectedRange.endDate?x(this.selectedRange.startDate).isAfter(x(this.selectedRange.endDate))||x(this.selectedRange.endDate).isBefore(x(this.selectedRange.startDate)):!1},isRangeEdge(e){return this.range&&this.range.length===2&&this.range[0]&&this.range[1]?x(e.date).isSame(this.range[0],"day")||x(e.date).isSame(this.range[1],"day"):!1},setYear(e){parseInt(e.srcElement.value)>0&&parseInt(e.srcElement.value)<9999&&(this.currentDay.year(e.srcElement.value),this.selectDate({date:this.currentDay.clone()}))},subYear(){parseFloat(this.currentDay.format("YYYY"))>0&&(this.currentDay.subtract(1,"year"),this.selectDate({date:this.currentDay.clone()}))},addYear(){this.currentDay.add(1,"year"),this.selectDate({date:this.currentDay.clone()})},toggleView(e){this.currentView=e,this.currentView==="years"&&setTimeout(()=>{this.$refs.year.select()},100),this.currentView==="days"&&setTimeout(()=>{this.$refs.hours.addEventListener("focus",function(t){this.select()}),this.$refs.minutes.addEventListener("focus",function(t){this.select()})},100)},setMonth(e){this.currentDay.month(e),this.selectDate({date:this.currentDay.clone()})},detectHoursChange(){parseFloat(this.hours)<0&&(this.hours=0),parseFloat(this.hours)>23&&(this.hours=23),this.selectDate({date:this.currentDay.clone()})},detectMinuteChange(){parseFloat(this.minutes)<0&&(this.minutes=0),parseFloat(this.minutes)>59&&(this.minutes=59),this.selectDate({date:this.currentDay.clone()})},checkClickedItem(e){this.$parent.$el.getAttribute("class").split(" ").includes("picker")&&(!this.$parent.$el.contains(e.srcElement)&&!this.clickedOnCalendar&&this.visible&&this.$emit("onClickOut",!0),setTimeout(()=>{this.clickedOnCalendar=!1},100))},selectDate(e){if([void 0].includes(e))this.$emit("set",null);else{if(this.side==="left"&&x(this.selectedRange.endDate).isValid()&&e.date.isAfter(this.selectedRange.endDate))return $.error(_("The left range will be invalid.")).subscribe(),!1;if(this.side==="right"&&x(this.selectedRange.startDate).isValid()&&e.date.isBefore(this.selectedRange.startDate))return $.error(_("The right range will be invalid.")).subscribe(),!1;this.currentDay=e.date,this.currentDay.hours(this.hours),this.currentDay.minutes(this.minutes),this.$emit("set",this.currentDay.format("YYYY-MM-DD HH:mm:ss"))}this.build()},subMonth(){this.currentDay.subtract(1,"month"),this.build()},addMonth(){this.currentDay.add(1,"month"),this.build()},resetCalendar(){this.calendar=[[]]},build(){this.resetCalendar(),this.currentDay.clone().startOf("month");const e=this.currentDay.clone().startOf("month"),t=this.currentDay.clone().endOf("month");for(;;){e.day()===0&&this.calendar[0].length>0&&this.calendar.push([]);let s=this.calendar.length-1;if(this.calendar[s].push({date:e.clone(),dayOfWeek:e.day(),isToday:e.isSame(x.now(),"day"),isDifferentMonth:!1,isNextMonth:!1,isPreviousMonth:!1}),e.isSame(t,"day"))break;e.add(1,"day")}if(this.calendar[0].length<7){const s=7-this.calendar[0].length,c=this.calendar[0][0].date.clone(),d=[];for(let n=0;nn.handleCalendarClick()),class:"flex bg-box-background flex-col rounded-lg overflow-hidden"},[d.currentView==="years"?(i(),a("div",Je,[l("div",et,[l("div",null,[l("button",{onClick:t[0]||(t[0]=r=>n.subMonth()),class:"w-8 h-8 ns-inset-button border outline-none text-numpad-text rounded"},st)]),l("div",nt,[l("span",{class:"mr-2 cursor-pointer border-b border-info-secondary border-dashed",onClick:t[1]||(t[1]=r=>n.toggleView("months"))},h(d.currentDay.format("MMM")),1),l("span",{class:"cursor-pointer border-b border-info-secondary border-dashed",onClick:t[2]||(t[2]=r=>n.toggleView("years"))},h(d.currentDay.format("YYYY")),1)]),l("div",null,[l("button",{onClick:t[3]||(t[3]=r=>n.addMonth()),class:"w-8 h-8 ns-inset-button border outline-none text-numpad-text rounded"},it)])]),l("div",at,[l("div",rt,[l("button",{onClick:t[4]||(t[4]=r=>n.subYear()),class:"px-2 py-2"},ot),l("div",ut,[l("input",{type:"text",ref:"year",class:"p-2 flex-auto w-full text-center outline-none",onChange:t[5]||(t[5]=r=>n.setYear(r)),value:d.currentDay.format("YYYY")},null,40,ct)]),l("button",{onClick:t[6]||(t[6]=r=>n.addYear()),class:"px-2 py-2"},ft)])]),l("div",mt,[l("button",{onClick:t[7]||(t[7]=r=>n.toggleView("days")),class:"p-2 w-full ns-inset-button border text-sm error hover:text-white rounded flex items-center justify-center"},h(n.__("Return To Calendar")),1)])])):u("",!0),d.currentView==="months"?(i(),a("div",gt,[l("div",bt,[l("div",null,[l("button",{onClick:t[8]||(t[8]=r=>n.subYear()),class:"w-8 h-8 ns-inset-button outline-none border rounded"},pt)]),l("div",yt,[l("span",vt,h(d.currentDay.format("MMM")),1),l("span",{class:"cursor-pointer border-b border-info-secondary border-dashed",onClick:t[9]||(t[9]=r=>n.toggleView("years"))},h(d.currentDay.format("YYYY")),1)]),l("div",null,[l("button",{onClick:t[10]||(t[10]=r=>n.addYear()),class:"w-8 h-8 ns-inset-button outline-none border rounded"},wt)])]),l("div",xt,[(i(!0),a(p,null,C(d.months,(r,o)=>(i(),a("div",{key:o,class:"h-8 flex justify-center items-center text-sm border-box-background"},[l("div",Dt,[l("div",{class:m([n.momentCopy.month(r).format("MM")===d.currentDay.format("MM")?"bg-info-secondary text-white":"hover:bg-numpad-hover","h-full w-full border-box-background flex items-center justify-center cursor-pointer"]),onClick:f=>n.setMonth(r)},h(n.momentCopy.format("MMM")),11,Ct)])]))),128))]),l("div",Mt,[l("button",{onClick:t[11]||(t[11]=r=>n.toggleView("days")),class:"p-2 w-full ns-inset-button border text-sm error rounded flex items-center justify-center"},h(n.__("Return To Calendar")),1)])])):u("",!0),d.currentView==="days"?(i(),a("div",Tt,[l("div",St,[l("div",null,[l("button",{onClick:t[12]||(t[12]=r=>n.subMonth()),class:"w-8 h-8 ns-inset-button border rounded"},Et)]),l("div",Ft,[l("span",{class:"mr-2 cursor-pointer border-b border-info-secondary border-dashed",onClick:t[13]||(t[13]=r=>n.toggleView("months"))},h(d.currentDay.format("MMM")),1),l("span",{class:"cursor-pointer border-b border-info-secondary border-dashed",onClick:t[14]||(t[14]=r=>n.toggleView("years"))},h(d.currentDay.format("YYYY")),1)]),l("div",null,[l("button",{onClick:t[15]||(t[15]=r=>n.addMonth()),class:"w-8 h-8 ns-inset-button border rounded"},Ot)])]),l("div",Pt,[l("div",jt,h(n.__("Sun")),1),l("div",At,h(n.__("Mon")),1),l("div",Ut,h(n.__("Tue")),1),l("div",Ht,h(n.__("Wed")),1),l("div",Lt,h(n.__("Thr")),1),l("div",Yt,h(n.__("Fri")),1),l("div",Vt,h(n.__("Sat")),1)]),(i(!0),a(p,null,C(d.calendar,(r,o)=>(i(),a("div",{key:o,class:"grid grid-flow-row grid-cols-7 grid-rows-1 gap-0 text-primary divide-x divide-y"},[(i(!0),a(p,null,C(d.daysOfWeek,(f,g)=>(i(),a("div",{key:g,class:"md:h-10 h-8 flex justify-center items-center text-sm border-tab-table-th"},[(i(!0),a(p,null,C(r,(b,S)=>(i(),a(p,null,[b.dayOfWeek===f?(i(),a("div",{key:S,class:m([n.getDayClass({day:b,_dayIndex:S,dayOfWeek:f,_index:g,currentDay:d.currentDay}),"h-full w-full flex items-center justify-center cursor-pointer"]),onClick:R=>n.selectDate(b)},[b.isDifferentMonth?u("",!0):(i(),a("span",It,h(b.date.format("DD")),1)),b.isDifferentMonth?(i(),a("span",Nt,h(b.date.format("DD")),1)):u("",!0)],10,Bt)):u("",!0)],64))),256))]))),128))]))),128))])):u("",!0),l("div",zt,[l("div",qt,[l("div",Wt,[l("div",Gt,[l("div",Kt,[l("button",{onClick:t[16]||(t[16]=r=>n.erase()),class:"border ns-inset-button text-sm error rounded md:w-10 w-8 md:h-10 h-8 flex items-center justify-center"},Zt)])])]),l("div",Xt,[d.currentView==="days"?(i(),a("div",Jt,[es,F(l("input",{placeholder:"HH",ref:"hours",onChange:t[17]||(t[17]=r=>n.detectHoursChange(r)),class:"w-12 p-1 text-center border border-numpad-edge bg-input-background outline-none text-sm active:border-numpad-edge","onUpdate:modelValue":t[18]||(t[18]=r=>d.hours=r),type:"number"},null,544),[[j,d.hours]]),ts,F(l("input",{placeholder:"mm",ref:"minutes",onChange:t[19]||(t[19]=r=>n.detectMinuteChange(r)),class:"w-12 p-1 text-center border border-numpad-edge bg-input-background outline-none text-sm active:border-numpad-edge","onUpdate:modelValue":t[20]||(t[20]=r=>d.minutes=r),type:"number"},null,544),[[j,d.minutes]])])):u("",!0)])])])])}const ce=D(Xe,[["render",ss]]),ls={data:()=>({}),props:["checked","field","label"],computed:{isChecked(){return this.field?this.field.value:this.checked},hasError(){return this.field.errors!==void 0&&this.field.errors.length>0}},methods:{toggleIt(){this.field!==void 0&&(this.field.value=!this.field.value),this.$emit("change",!this.checked)}}},is={class:"w-6 h-6 flex bg-input-background border-input-edge border-2 items-center justify-center cursor-pointer"},as={key:0,class:"las la-check"};function rs(e,t,s,c,d,n){return i(),a("div",{class:"flex ns-checkbox items-center justify-center cursor-pointer",onClick:t[0]||(t[0]=r=>n.toggleIt())},[l("div",is,[n.isChecked?(i(),a("i",as)):u("",!0)]),s.label?(i(),a("label",{key:0,class:m([n.hasError?"has-error":"is-pristine","mx-2"])},h(s.label),3)):u("",!0),s.field?(i(),a("label",{key:1,class:m([n.hasError?"has-error":"is-pristine","mx-2"])},h(s.field.label),3)):u("",!0)])}const ds=D(ls,[["render",rs]]),os={name:"ns-close-button",methods:{}},us={class:"outline-none ns-close-button hover:border-transparent border rounded-full h-8 min-w-[2rem] items-center justify-center"},cs=l("i",{class:"las la-times"},null,-1);function hs(e,t,s,c,d,n){return i(),a("button",us,[cs,v(),y(e.$slots,"default")])}const fs=D(os,[["render",hs]]),ms={data(){return{fields:[],validation:new ie}},props:["popup"],methods:{__:_,popupCloser:ae,popupResolver:re,closePopup(){this.popupResolver(!1)},useFilters(){this.popupResolver(this.validation.extractFields(this.fields))},clearFilters(){this.fields.forEach(e=>e.value=""),this.popupResolver(null)}},mounted(){this.fields=this.validation.createFields(this.popup.params.queryFilters),this.popupCloser()}},gs={class:"ns-box shadow-lg w-95vw h-95vh md:w-3/5-screen md:h-5/6-screen flex flex-col"},bs={class:"p-2 border-b ns-box-header flex justify-between items-center"},_s={class:"p-2 ns-box-body flex-auto"},ps={class:"p-2 flex justify-between ns-box-footer border-t"};function ys(e,t,s,c,d,n){const r=w("ns-close-button"),o=w("ns-field"),f=w("ns-button");return i(),a("div",gs,[l("div",bs,[l("h3",null,h(n.__("Search Filters")),1),l("div",null,[T(r,{onClick:t[0]||(t[0]=g=>n.closePopup())})])]),l("div",_s,[(i(!0),a(p,null,C(d.fields,(g,b)=>(i(),E(o,{field:g,key:b},null,8,["field"]))),128))]),l("div",ps,[l("div",null,[T(f,{onClick:t[1]||(t[1]=g=>n.clearFilters()),type:"error"},{default:M(()=>[v(h(n.__("Clear Filters")),1)]),_:1})]),l("div",null,[T(f,{onClick:t[2]||(t[2]=g=>n.useFilters()),type:"info"},{default:M(()=>[v(h(n.__("Use Filters")),1)]),_:1})])])])}const vs=D(ms,[["render",ys]]),ks={data:()=>({prependOptions:!1,showOptions:!0,showCheckboxes:!0,isRefreshing:!1,sortColumn:"",searchInput:"",queryFiltersString:"",searchQuery:"",page:1,bulkAction:"",bulkActions:[],queryFilters:[],headerButtons:[],withFilters:!1,columns:[],selectedEntries:[],globallyChecked:!1,result:{current_page:null,data:[],first_page_url:null,from:null,last_page:null,last_page_url:null,next_page_url:null,path:null,per_page:null,prev_page_url:null,to:null,total:null}}),name:"ns-crud",mounted(){this.identifier!==void 0&&nsCrudHandler.defineInstance(this.identifier,this),this.loadConfig()},props:["src","createUrl","mode","identifier","queryParams","popup"],computed:{getParsedSrc(){return`${this.src}?${this.sortColumn}${this.searchQuery}${this.queryFiltersString}${this.queryPage}${this.getQueryParams()?"&"+this.getQueryParams():""}`},showQueryFilters(){return this.queryFilters.length>0},getSelectedAction(){const e=this.bulkActions.filter(t=>t.identifier===this.bulkAction);return e.length>0?e[0]:!1},pagination(){return this.result?this.pageNumbers(this.result.last_page,this.result.current_page):[]},queryPage(){return this.result?`&page=${this.page}`:""},resultInfo(){return _("displaying {perPage} on {items} items").replace("{perPage}",this.result.per_page||0).replace("{items}",this.result.total||0)},headerButtonsComponents(){return this.headerButtons.map(e=>ke(()=>new Promise(t=>{t(nsExtraComponents[e])})))}},methods:{__:_,getQueryParams(){return this.queryParams?Object.keys(this.queryParams).map(e=>`${e}=${this.queryParams[e]}`).join("&"):""},pageNumbers(e,t){var s=[];t-3>1&&s.push(1,"...");for(let c=1;c<=e;c++)t+3>c&&t-3c>0||typeof c=="string")},downloadContent(){nsHttpClient.post(`${this.src}/export?${this.getParsedSrc}`,{entries:this.selectedEntries.map(e=>e.$id)}).subscribe(e=>{setTimeout(()=>document.location=e.url,300),$.success(_("The document has been generated.")).subscribe()},e=>{$.error(e.message||_("Unexpected error occurred.")).subscribe()})},clearSelectedEntries(){L.show(G,{title:_("Clear Selected Entries ?"),message:_("Would you like to clear all selected entries ?"),onAction:e=>{e&&(this.selectedEntries=[],this.handleGlobalChange(!1))}})},refreshRow(e){if(console.log({row:e}),e.$checked===!0)this.selectedEntries.filter(s=>s.$id===e.$id).length===0&&this.selectedEntries.push(e);else{const t=this.selectedEntries.filter(s=>s.$id===e.$id);if(t.length>0){const s=this.selectedEntries.indexOf(t[0]);this.selectedEntries.splice(s,1)}}},handleShowOptions(e){this.result.data.forEach(t=>{t.$id!==e.$id&&(t.$toggled=!1)})},handleGlobalChange(e){this.globallyChecked=e,this.result.data.forEach(t=>{t.$checked=e,this.refreshRow(t)})},loadConfig(){nsHttpClient.get(`${this.src}/config?${this.getQueryParams()}`).subscribe(t=>{this.columns=t.columns,this.bulkActions=t.bulkActions,this.queryFilters=t.queryFilters,this.prependOptions=t.prependOptions,this.showOptions=t.showOptions,this.showCheckboxes=t.showCheckboxes,this.headerButtons=t.headerButtons||[],this.refresh()},t=>{$.error(t.message,"OK",{duration:!1}).subscribe()})},cancelSearch(){this.searchInput="",this.search()},search(){this.searchInput?this.searchQuery=`&search=${this.searchInput}`:this.searchQuery="",this.page=1,this.refresh()},sort(e){if(this.columns[e].$sort===!1)return $.error(_("Sorting is explicitely disabled on this column")).subscribe();for(let t in this.columns)t!==e&&(this.columns[t].$sorted=!1,this.columns[t].$direction="");switch(this.columns[e].$sorted=!0,this.columns[e].$direction){case"asc":this.columns[e].$direction="desc";break;case"desc":this.columns[e].$direction="";break;case"":default:this.columns[e].$direction="asc";break}["asc","desc"].includes(this.columns[e].$direction)?this.sortColumn=`active=${e}&direction=${this.columns[e].$direction}`:this.sortColumn="",this.$emit("sort",this.columns[e]),this.refresh()},bulkDo(){if(this.bulkAction)if(this.selectedEntries.length>0){if(confirm(this.getSelectedAction.confirm||_("Would you like to perform the selected bulk action on the selected entries ?")))return nsHttpClient.post(`${this.src}/bulk-actions`,{action:this.bulkAction,entries:this.selectedEntries.map(e=>e.$id)}).subscribe({next:e=>{$.info(e.message).subscribe(),this.selectedEntries=[],this.refresh()},error:e=>{$.error(e.message).subscribe()}})}else return $.error(_("No selection has been made.")).subscribe();else return $.error(_("No action has been selected.")).subscribe()},async openQueryFilter(){try{const e=await new Promise((t,s)=>{L.show(vs,{resolve:t,reject:s,queryFilters:this.queryFilters})});this.withFilters=!1,this.queryFiltersString="",e!==null&&(this.withFilters=!0,this.queryFiltersString="&queryFilters="+encodeURIComponent(JSON.stringify(e))),this.refresh()}catch{}},refresh(){this.globallyChecked=!1,this.isRefreshing=!0,nsHttpClient.get(`${this.getParsedSrc}`).subscribe(t=>{t.data=t.data.map(s=>(this.selectedEntries.filter(d=>d.$id===s.$id).length>0&&(s.$checked=!0),s)),this.isRefreshing=!1,this.result=t,this.page=t.current_page},t=>{this.isRefreshing=!1,$.error(t.message).subscribe()})}}},ws={key:0,id:"crud-table-header",class:"p-2 border-b flex flex-col md:flex-row justify-between flex-wrap"},xs={id:"crud-search-box",class:"w-full md:w-auto -mx-2 mb-2 md:mb-0 flex"},Ds={key:0,class:"px-2 flex items-center justify-center"},Cs=["href"],Ms=l("i",{class:"las la-plus"},null,-1),Ts=[Ms],Ss={class:"px-2"},$s={class:"rounded-full p-1 ns-crud-input flex"},Es=l("i",{class:"las la-search"},null,-1),Fs=[Es],Rs=l("i",{class:"las la-times text-white"},null,-1),Os=[Rs],Ps={class:"px-2 flex items-center justify-center"},js={key:1,class:"px-2 flex items-center"},As={key:0,class:"las la-filter"},Us={key:1,class:"las la-check"},Hs={key:2,class:"ml-1"},Ls={key:3,class:"ml-1"},Ys={key:2,id:"custom-buttons"},Vs={id:"crud-buttons",class:"-mx-1 flex flex-wrap w-full md:w-auto"},Bs={key:0,class:"px-1 flex items-center"},Is=l("i",{class:"lar la-check-square"},null,-1),Ns={class:"px-1 flex items-center"},zs=l("i",{class:"las la-download"},null,-1),qs={class:"flex p-2"},Ws={class:"overflow-x-auto flex-auto"},Gs={key:0,class:"table ns-table w-full"},Ks={key:0,class:"text-center px-2 border w-16 py-2"},Qs={key:1,class:"text-left px-2 py-2 w-16 border"},Zs=["onClick"],Xs={class:"w-full flex justify-between items-center"},Js={class:"flex"},en={class:"h-6 w-6 flex justify-center items-center"},tn={key:0,class:"las la-sort-amount-up"},sn={key:1,class:"las la-sort-amount-down"},nn={key:2,class:"text-left px-2 py-2 w-16 border"},ln={key:1},an=["colspan"],rn={class:"p-2 flex border-t flex-col md:flex-row justify-between footer"},dn={key:0,id:"grouped-actions",class:"mb-2 md:mb-0 flex justify-between rounded-full ns-crud-input p-1"},on={class:"bg-input-disabled",selected:"",value:""},un=["value"],cn={class:"flex"},hn={class:"items-center flex text-primary mx-4"},fn={id:"pagination",class:"flex items-center -mx-1"},mn=l("i",{class:"las la-angle-double-left"},null,-1),gn=[mn],bn=["onClick"],_n=l("i",{class:"las la-angle-double-right"},null,-1),pn=[_n];function yn(e,t,s,c,d,n){const r=w("ns-checkbox"),o=w("ns-table-row");return i(),a("div",{id:"crud-table",class:m(["w-full rounded-lg",s.mode!=="light"?"shadow mb-8":""])},[s.mode!=="light"?(i(),a("div",ws,[l("div",xs,[s.createUrl?(i(),a("div",Ds,[l("a",{href:s.createUrl||"#",class:"rounded-full ns-crud-button text-sm h-10 flex items-center justify-center cursor-pointer px-3 outline-none border"},Ts,8,Cs)])):u("",!0),l("div",Ss,[l("div",$s,[F(l("input",{onKeypress:t[0]||(t[0]=Y(f=>n.search(),["enter"])),"onUpdate:modelValue":t[1]||(t[1]=f=>e.searchInput=f),type:"text",class:"w-36 md:w-auto bg-transparent outline-none px-2"},null,544),[[j,e.searchInput]]),l("button",{onClick:t[2]||(t[2]=f=>n.search()),class:"rounded-full w-8 h-8 outline-none ns-crud-input-button"},Fs),e.searchQuery?(i(),a("button",{key:0,onClick:t[3]||(t[3]=f=>n.cancelSearch()),class:"ml-1 rounded-full w-8 h-8 bg-error-secondary outline-none hover:bg-error-tertiary"},Os)):u("",!0)])]),l("div",Ps,[l("button",{onClick:t[4]||(t[4]=f=>n.refresh()),class:"rounded-full text-sm h-10 px-3 outline-none border ns-crud-button"},[l("i",{class:m([e.isRefreshing?"animate-spin":"","las la-sync"])},null,2)])]),n.showQueryFilters?(i(),a("div",js,[l("button",{onClick:t[5]||(t[5]=f=>n.openQueryFilter()),class:m([e.withFilters?"table-filters-enabled":"table-filters-disabled","ns-crud-button border rounded-full text-sm h-10 px-3 outline-none"])},[e.withFilters?u("",!0):(i(),a("i",As)),e.withFilters?(i(),a("i",Us)):u("",!0),e.withFilters?u("",!0):(i(),a("span",Hs,h(n.__("Filters")),1)),e.withFilters?(i(),a("span",Ls,h(n.__("Has Filters")),1)):u("",!0)],2)])):u("",!0),n.headerButtonsComponents.length>0?(i(),a("div",Ys,[(i(!0),a(p,null,C(n.headerButtonsComponents,(f,g)=>(i(),E(W(f),{onRefresh:t[6]||(t[6]=b=>n.refresh()),result:e.result,key:g},null,40,["result"]))),128))])):u("",!0)]),l("div",Vs,[e.selectedEntries.length>0?(i(),a("div",Bs,[l("button",{onClick:t[7]||(t[7]=f=>n.clearSelectedEntries()),class:"flex justify-center items-center rounded-full text-sm h-10 px-3 outline-none ns-crud-button border"},[Is,v(" "+h(n.__("{entries} entries selected").replace("{entries}",e.selectedEntries.length)),1)])])):u("",!0),l("div",Ns,[l("button",{onClick:t[8]||(t[8]=f=>n.downloadContent()),class:"flex justify-center items-center rounded-full text-sm h-10 px-3 ns-crud-button border outline-none"},[zs,v(" "+h(n.__("Download")),1)])])])])):u("",!0),l("div",qs,[l("div",Ws,[Object.values(e.columns).length>0?(i(),a("table",Gs,[l("thead",null,[l("tr",null,[e.showCheckBox?(i(),a("th",Ks,[T(r,{checked:e.globallyChecked,onChange:t[9]||(t[9]=f=>n.handleGlobalChange(f))},null,8,["checked"])])):u("",!0),e.prependOptions&&e.showOptions?(i(),a("th",Qs)):u("",!0),(i(!0),a(p,null,C(e.columns,(f,g)=>(i(),a("th",{key:g,onClick:b=>n.sort(g),style:we({"min-width":f.width||"auto"}),class:"cursor-pointer justify-betweenw-40 border text-left px-2 py-2"},[l("div",Xs,[l("span",Js,h(f.label),1),l("span",en,[f.$direction==="desc"?(i(),a("i",tn)):u("",!0),f.$direction==="asc"?(i(),a("i",sn)):u("",!0)])])],12,Zs))),128)),!e.prependOptions&&e.showOptions?(i(),a("th",nn)):u("",!0)])]),l("tbody",null,[e.result.data!==void 0&&e.result.data.length>0?(i(!0),a(p,{key:0},C(e.result.data,(f,g)=>(i(),E(o,{key:g,onUpdated:t[10]||(t[10]=b=>n.refreshRow(b)),columns:e.columns,prependOptions:e.prependOptions,showOptions:e.showOptions,showCheckboxes:e.showCheckboxes,row:f,onReload:t[11]||(t[11]=b=>n.refresh()),onToggled:t[12]||(t[12]=b=>n.handleShowOptions(b))},null,8,["columns","prependOptions","showOptions","showCheckboxes","row"]))),128)):u("",!0),!e.result||e.result.data.length===0?(i(),a("tr",ln,[l("td",{colspan:Object.values(e.columns).length+2,class:"text-center border py-3"},h(n.__("There is nothing to display...")),9,an)])):u("",!0)])])):u("",!0)])]),l("div",rn,[e.bulkActions.length>0?(i(),a("div",dn,[F(l("select",{class:"outline-none bg-transparent","onUpdate:modelValue":t[13]||(t[13]=f=>e.bulkAction=f),id:"grouped-actions"},[l("option",on,[y(e.$slots,"bulk-label",{},()=>[v(h(n.__("Bulk Actions")),1)])]),(i(!0),a(p,null,C(e.bulkActions,(f,g)=>(i(),a("option",{class:"bg-input-disabled",key:g,value:f.identifier},h(f.label),9,un))),128))],512),[[U,e.bulkAction]]),l("button",{onClick:t[14]||(t[14]=f=>n.bulkDo()),class:"ns-crud-input-button h-8 px-3 outline-none rounded-full flex items-center justify-center"},[y(e.$slots,"bulk-go",{},()=>[v(h(n.__("Apply")),1)])])])):u("",!0),l("div",cn,[l("div",hn,h(n.resultInfo),1),l("div",fn,[e.result.current_page?(i(),a(p,{key:0},[l("a",{href:"javascript:void(0)",onClick:t[15]||(t[15]=f=>{e.page=e.result.first_page,n.refresh()}),class:"mx-1 flex items-center justify-center h-8 w-8 rounded-full ns-crud-button border shadow"},gn),(i(!0),a(p,null,C(n.pagination,(f,g)=>(i(),a(p,null,[e.page!=="..."?(i(),a("a",{key:g,class:m([e.page==f?"bg-info-tertiary border-transparent text-white":"","mx-1 flex items-center justify-center h-8 w-8 rounded-full ns-crud-button border"]),onClick:b=>{e.page=f,n.refresh()},href:"javascript:void(0)"},h(f),11,bn)):u("",!0),e.page==="..."?(i(),a("a",{key:g,href:"javascript:void(0)",class:"mx-1 flex items-center justify-center h-8 w-8 rounded-full ns-crud-button border"},"...")):u("",!0)],64))),256)),l("a",{href:"javascript:void(0)",onClick:t[16]||(t[16]=f=>{e.page=e.result.last_page,n.refresh()}),class:"mx-1 flex items-center justify-center h-8 w-8 rounded-full ns-crud-button border shadow"},pn)],64)):u("",!0)])])])],2)}const vn=D(ks,[["render",yn]]),kn={data:()=>({form:{},globallyChecked:!1,formValidation:new ie,rows:[]}),emits:["updated","saved"],mounted(){this.loadForm()},props:["src","createUrl","fieldClass","returnUrl","submitUrl","submitMethod","disableTabs","queryParams","popup"],computed:{activeTabFields(){for(let e in this.form.tabs)if(this.form.tabs[e].active)return this.form.tabs[e].fields;return[]},activeTabIdentifier(){for(let e in this.form.tabs)if(this.form.tabs[e].active)return e;return{}}},methods:{__:_,popupResolver:re,toggle(e){for(let t in this.form.tabs)this.form.tabs[t].active=!1;this.form.tabs[e].active=!0},async handleSaved(e,t,s){(await this.loadForm()).form.tabs[t].fields.filter(d=>{d.name===s.name&&e.data.entry&&(d.value=e.data.entry.id)})},handleClose(){this.popup&&this.popupResolver(!1)},submit(){if(this.formValidation.validateForm(this.form).length>0)return $.error(_("Unable to proceed the form is not valid"),_("Close")).subscribe();if(this.formValidation.disableForm(this.form),this.submitUrl===void 0)return $.error(_("No submit URL was provided"),_("Okay")).subscribe();H[this.submitMethod?this.submitMethod.toLowerCase():"post"](this.appendQueryParamas(this.submitUrl),this.formValidation.extractForm(this.form)).subscribe(e=>{if(e.status==="success")if(this.popup)this.popupResolver(e);else{if(this.submitMethod&&this.submitMethod.toLowerCase()==="post"&&this.returnUrl!==!1)return document.location=e.data.editUrl||this.returnUrl;$.info(e.message,_("Okay"),{duration:3e3}).subscribe(),this.$emit("saved",e)}this.formValidation.enableForm(this.form)},e=>{$.error(e.message,void 0,{duration:5e3}).subscribe(),e.data!==void 0&&this.formValidation.triggerError(this.form,e.data),this.formValidation.enableForm(this.form)})},handleGlobalChange(e){this.globallyChecked=e,this.rows.forEach(t=>t.$checked=e)},loadForm(){return new Promise((e,t)=>{H.get(`${this.appendQueryParamas(this.src)}`).subscribe({next:c=>{e(c),this.form=this.parseForm(c.form),de.doAction("ns-crud-form-loaded",this),this.$emit("updated",this.form)},error:c=>{t(c),$.error(c.message,_("Okay"),{duration:0}).subscribe()}})})},appendQueryParamas(e){if(this.queryParams===void 0)return e;const t=Object.keys(this.queryParams).map(s=>`${encodeURIComponent(s)}=${encodeURIComponent(this.queryParams[s])}`).join("&");return e.includes("?")?`${e}&${t}`:`${e}?${t}`},parseForm(e){e.main.value=e.main.value===void 0?"":e.main.value,e.main=this.formValidation.createFields([e.main])[0];let t=0;for(let s in e.tabs)t===0&&(e.tabs[s].active=!0),e.tabs[s].active=e.tabs[s].active===void 0?!1:e.tabs[s].active,e.tabs[s].fields=this.formValidation.createFields(e.tabs[s].fields),t++;return e}}},wn={key:0,class:"flex items-center justify-center h-full"},xn={key:0,class:"box-header border-b border-box-edge box-border p-2 flex justify-between items-center"},Dn={class:"text-primary font-bold text-lg"},Cn={class:"flex flex-col"},Mn={key:0,class:"flex justify-between items-center"},Tn={for:"title",class:"font-bold my-2 text-primary"},Sn={key:0},$n={for:"title",class:"text-sm my-2"},En=["href"],Fn=["disabled"],Rn=["disabled"],On={key:0,class:"text-xs text-primary py-1"},Pn={key:0},jn={key:1},An={class:"header flex ml-4",style:{"margin-bottom":"-1px"}},Un=["onClick"],Hn={class:"ns-tab-item"},Ln={class:"border p-4 rounded"},Yn={class:"-mx-4 flex flex-wrap"},Vn={key:0,class:"flex justify-end"},Bn=["disabled"];function In(e,t,s,c,d,n){const r=w("ns-spinner"),o=w("ns-close-button"),f=w("ns-field");return i(),a(p,null,[Object.values(e.form).length===0?(i(),a("div",wn,[T(r)])):u("",!0),Object.values(e.form).length>0?(i(),a("div",{key:1,class:m(["form flex-auto",s.popup?"bg-box-background w-95vw md:w-2/3-screen":""]),id:"crud-form"},[s.popup?(i(),a("div",xn,[l("h2",Dn,h(s.popup.params.title),1),l("div",null,[T(o,{onClick:t[0]||(t[0]=g=>n.handleClose())})])])):u("",!0),Object.values(e.form).length>0?(i(),a("div",{key:1,class:m(s.popup?"p-2":"")},[l("div",Cn,[e.form.main?(i(),a("div",Mn,[l("label",Tn,[e.form.main.name?(i(),a("span",Sn,h(e.form.main.label),1)):u("",!0)]),l("div",$n,[s.returnUrl&&!s.popup?(i(),a("a",{key:0,href:s.returnUrl,class:"rounded-full border px-2 py-1 ns-inset-button error"},h(n.__("Go Back")),9,En)):u("",!0)])])):u("",!0),e.form.main.name?(i(),a(p,{key:1},[l("div",{class:m([e.form.main.disabled?"disabled":e.form.main.errors.length>0?"error":"info","input-group flex border-2 rounded overflow-hidden"])},[F(l("input",{"onUpdate:modelValue":t[1]||(t[1]=g=>e.form.main.value=g),onKeydown:t[2]||(t[2]=Y(g=>n.submit(),["enter"])),onKeypress:t[3]||(t[3]=g=>e.formValidation.checkField(e.form.main)),onBlur:t[4]||(t[4]=g=>e.formValidation.checkField(e.form.main)),onChange:t[5]||(t[5]=g=>e.formValidation.checkField(e.form.main)),disabled:e.form.main.disabled,type:"text",class:"flex-auto outline-none h-10 px-2"},null,40,Fn),[[j,e.form.main.value]]),l("button",{disabled:e.form.main.disabled,class:m([e.form.main.disabled?"disabled":e.form.main.errors.length>0?"error":"","outline-none px-4 h-10 text-white"]),onClick:t[6]||(t[6]=g=>n.submit())},h(n.__("Save")),11,Rn)],2),e.form.main.description&&e.form.main.errors.length===0?(i(),a("p",On,h(e.form.main.description),1)):u("",!0),(i(!0),a(p,null,C(e.form.main.errors,(g,b)=>(i(),a("p",{key:b,class:"text-xs py-1 text-error-tertiary"},[g.identifier==="required"?(i(),a("span",Pn,[y(e.$slots,"error-required",{},()=>[v(h(g.identifier),1)])])):u("",!0),g.identifier==="invalid"?(i(),a("span",jn,[y(e.$slots,"error-invalid",{},()=>[v(h(g.message),1)])])):u("",!0)]))),128))],64)):u("",!0)]),s.disableTabs!=="true"?(i(),a("div",{key:0,id:"tabs-container",class:m([s.popup?"mt-5":"my-5","ns-tab"])},[l("div",An,[(i(!0),a(p,null,C(e.form.tabs,(g,b)=>(i(),a("div",{key:b,onClick:S=>n.toggle(b),class:m([g.active?"active border border-b-transparent":"inactive border","tab rounded-tl rounded-tr border px-3 py-2 cursor-pointer"]),style:{"margin-right":"-1px"}},h(g.label),11,Un))),128))]),l("div",Hn,[l("div",Ln,[l("div",Yn,[(i(!0),a(p,null,C(n.activeTabFields,(g,b)=>(i(),a("div",{key:`${n.activeTabIdentifier}-${b}`,class:m(s.fieldClass||"px-4 w-full md:w-1/2 lg:w-1/3")},[T(f,{onSaved:S=>n.handleSaved(S,n.activeTabIdentifier,g),onBlur:S=>e.formValidation.checkField(g),onChange:S=>e.formValidation.checkField(g),field:g},null,8,["onSaved","onBlur","onChange","field"])],2))),128))]),e.form.main.name?u("",!0):(i(),a("div",Vn,[l("div",{class:m(["ns-button",e.form.main.disabled?"default":e.form.main.errors.length>0?"error":"info"])},[l("button",{disabled:e.form.main.disabled,onClick:t[7]||(t[7]=g=>n.submit()),class:"outline-none px-4 h-10 border-l"},h(n.__("Save")),9,Bn)],2)]))])])],2)):u("",!0)],2)):u("",!0)],2)):u("",!0)],64)}const Nn=D(kn,[["render",In]]),zn={data:()=>({}),mounted(){},computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"bg-input-edge cursor-not-allowed":"bg-transparent"},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"}},props:["placeholder","leading","type","field"]},qn={class:"flex flex-auto flex-col mb-2"},Wn=["for"],Gn={key:0,class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},Kn={class:"sm:text-sm sm:leading-5"},Qn=["disabled","id","placeholder"];function Zn(e,t,s,c,d,n){const r=w("ns-field-description");return i(),a("div",qn,[l("label",{for:s.field.name,class:m([n.hasError?"text-error-primary":"text-primary","block leading-5 font-medium"])},[y(e.$slots,"default")],10,Wn),l("div",{class:m([n.hasError?"border-error-primary":"border-input-edge","bg-input-background text-secondary mt-1 relative border-2 rounded-md focus:shadow-sm"])},[s.leading?(i(),a("div",Gn,[l("span",Kn,h(s.leading),1)])):u("",!0),F(l("input",{disabled:s.field.disabled,"onUpdate:modelValue":t[0]||(t[0]=o=>s.field.value=o),onBlur:t[1]||(t[1]=o=>e.$emit("blur",this)),onChange:t[2]||(t[2]=o=>e.$emit("change",this)),id:s.field.name,type:"date",class:m([n.inputClass,"form-input block w-full sm:text-sm sm:leading-5 h-10"]),placeholder:s.placeholder},null,42,Qn),[[j,s.field.value]])],2),T(r,{field:s.field},null,8,["field"])])}const Xn=D(zn,[["render",Zn]]),he={isSame:(e,t,s)=>{let c=new Date(e),d=new Date(t);return s==="date"&&(c.setHours(0,0,0,0),d.setHours(0,0,0,0)),c.getTime()===d.getTime()},daysInMonth:(e,t)=>new Date(e,t,0).getDate(),weekNumber:e=>Ee(e),format:(e,t)=>N(e,t),nextMonth:e=>{let t=new Date(e.getTime());return t.setDate(1),t.setMonth(t.getMonth()+1),t},prevMonth:e=>{let t=new Date(e.getTime());return t.setDate(1),t.setMonth(t.getMonth()-1),t},validateDateRange:(e,t,s)=>{let c=new Date(s),d=new Date(t);return s&&e.getTime()>c.getTime()?c:t&&e.getTime()({...{direction:"ltr",format:"mm/dd/yyyy",separator:" - ",applyLabel:"Apply",cancelLabel:"Cancel",weekLabel:"W",customRangeLabel:"Custom Range",daysOfWeek:N.i18n.dayNames.slice(0,7).map(s=>s.substring(0,2)),monthNames:N.i18n.monthNames.slice(0,12),firstDay:0},...e}),yearMonth:e=>{let t=e.getMonth()+1;return e.getFullYear()+(t<10?"0":"")+t},isValidDate:e=>e instanceof Date&&!isNaN(e)},K={props:{dateUtil:{type:[Object,String],default:"native"}},created(){this.$dateUtil=he}},Jn={mixins:[K],name:"calendar",props:{monthDate:Date,localeData:Object,start:Date,end:Date,minDate:Date,maxDate:Date,showDropdowns:{type:Boolean,default:!1},showWeekNumbers:{type:Boolean,default:!1},dateFormat:{type:Function,default:null}},data(){let e=this.monthDate||this.start||new Date;return{currentMonthDate:e,year_text:e.getFullYear()}},methods:{prevMonthClick(){this.changeMonthDate(this.$dateUtil.prevMonth(this.currentMonthDate))},nextMonthClick(){this.changeMonthDate(this.$dateUtil.nextMonth(this.currentMonthDate))},changeMonthDate(e,t=!0){let s=this.$dateUtil.yearMonth(this.currentMonthDate);this.currentMonthDate=this.$dateUtil.validateDateRange(e,this.minDate,this.maxDate),t&&s!==this.$dateUtil.yearMonth(this.currentMonthDate)&&this.$emit("change-month",{month:this.currentMonthDate.getMonth()+1,year:this.currentMonthDate.getFullYear()}),this.checkYear()},dayClass(e){let t=new Date(e);t.setHours(0,0,0,0);let s=new Date(this.start);s.setHours(0,0,0,0);let c=new Date(this.end);c.setHours(0,0,0,0);let d={off:e.getMonth()+1!==this.month,weekend:e.getDay()===6||e.getDay()===0,today:t.setHours(0,0,0,0)==new Date().setHours(0,0,0,0),active:t.setHours(0,0,0,0)==new Date(this.start).setHours(0,0,0,0)||t.setHours(0,0,0,0)==new Date(this.end).setHours(0,0,0,0),"in-range":t>=s&&t<=c,"start-date":t.getTime()===s.getTime(),"end-date":t.getTime()===c.getTime(),disabled:this.minDate&&t.getTime()this.maxDate.getTime()};return this.dateFormat?this.dateFormat(d,e):d},checkYear(){this.$refs.yearSelect!==document.activeElement&&this.$nextTick(()=>{this.year_text=this.monthDate.getFullYear()})}},computed:{monthName(){return this.locale.monthNames[this.currentMonthDate.getMonth()]},year:{get(){return this.year_text},set(e){this.year_text=e;let t=this.$dateUtil.validateDateRange(new Date(e,this.month,1),this.minDate,this.maxDate);this.$dateUtil.isValidDate(t)&&this.$emit("change-month",{month:t.getMonth(),year:t.getFullYear()})}},month:{get(){return this.currentMonthDate.getMonth()+1},set(e){let t=this.$dateUtil.validateDateRange(new Date(this.year,e-1,1),this.minDate,this.maxDate);this.$emit("change-month",{month:t.getMonth()+1,year:t.getFullYear()})}},calendar(){let e=this.month,t=this.currentMonthDate.getFullYear(),s=new Date(t,e-1,1),c=this.$dateUtil.prevMonth(s).getMonth()+1,d=this.$dateUtil.prevMonth(s).getFullYear(),n=new Date(d,e-1,0).getDate(),r=s.getDay(),o=[];for(let b=0;b<6;b++)o[b]=[];let f=n-r+this.locale.firstDay+1;f>n&&(f-=7),r===this.locale.firstDay&&(f=n-6);let g=new Date(d,c-1,f,12,0,0);for(let b=0,S=0,R=0;b<6*7;b++,S++,g.setDate(g.getDate()+1))b>0&&S%7===0&&(S=0,R++),o[R][S]=new Date(g.getTime());return o},months(){let e=this.locale.monthNames.map((t,s)=>({label:t,value:s}));if(this.maxDate&&this.minDate){let t=this.maxDate.getFullYear()-this.minDate.getFullYear();if(t<2){let s=[];if(t<1)for(let c=this.minDate.getMonth();c<=this.maxDate.getMonth();c++)s.push(c);else{for(let c=0;c<=this.maxDate.getMonth();c++)s.push(c);for(let c=this.minDate.getMonth();c<12;c++)s.push(c)}if(s.length>0)return e.filter(c=>s.find(d=>c.value===d)>-1)}}return e},locale(){return this.$dateUtil.localeData(this.localeData)}},watch:{monthDate(e){this.currentMonthDate.getTime()!==e.getTime()&&this.changeMonthDate(e,!1)}}},fe=e=>(ne("data-v-66e2a2e7"),e=e(),le(),e),el={class:"table-condensed"},tl=fe(()=>l("span",null,null,-1)),sl=[tl],nl=["colspan"],ll={class:"row mx-1"},il=["value"],al=["colspan"],rl=fe(()=>l("span",null,null,-1)),dl=[rl],ol={key:0,class:"week"},ul={key:0,class:"week"},cl=["onClick","onMouseover"];function hl(e,t,s,c,d,n){return i(),a("table",el,[l("thead",null,[l("tr",null,[l("th",{class:"prev available",onClick:t[0]||(t[0]=(...r)=>n.prevMonthClick&&n.prevMonthClick(...r)),tabindex:"0"},sl),s.showDropdowns?(i(),a("th",{key:0,colspan:s.showWeekNumbers?6:5,class:"month"},[l("div",ll,[F(l("select",{"onUpdate:modelValue":t[1]||(t[1]=r=>n.month=r),class:"monthselect col"},[(i(!0),a(p,null,C(n.months,r=>(i(),a("option",{key:r.value,value:r.value+1},h(r.label),9,il))),128))],512),[[U,n.month]]),F(l("input",{ref:"yearSelect",type:"number","onUpdate:modelValue":t[2]||(t[2]=r=>n.year=r),onBlur:t[3]||(t[3]=(...r)=>n.checkYear&&n.checkYear(...r)),class:"yearselect col"},null,544),[[j,n.year]])])],8,nl)):(i(),a("th",{key:1,colspan:s.showWeekNumbers?6:5,class:"month"},h(n.monthName)+" "+h(n.year),9,al)),l("th",{class:"next available",onClick:t[4]||(t[4]=(...r)=>n.nextMonthClick&&n.nextMonthClick(...r)),tabindex:"0"},dl)])]),l("tbody",null,[l("tr",null,[s.showWeekNumbers?(i(),a("th",ol,h(n.locale.weekLabel),1)):u("",!0),(i(!0),a(p,null,C(n.locale.daysOfWeek,r=>(i(),a("th",{key:r},h(r),1))),128))]),(i(!0),a(p,null,C(n.calendar,(r,o)=>(i(),a("tr",{key:o},[s.showWeekNumbers&&(o%7||o===0)?(i(),a("td",ul,h(e.$dateUtil.weekNumber(r[0])),1)):u("",!0),(i(!0),a(p,null,C(r,(f,g)=>(i(),a("td",{class:m(n.dayClass(f)),onClick:b=>e.$emit("dateClick",f),onMouseover:b=>e.$emit("hoverDate",f),key:g},[y(e.$slots,"date-slot",{date:f},()=>[v(h(f.getDate()),1)],!0)],42,cl))),128))]))),128))])])}const fl=D(Jn,[["render",hl],["__scopeId","data-v-66e2a2e7"]]),ml={props:{miniuteIncrement:{type:Number,default:5},hour24:{type:Boolean,default:!0},secondPicker:{type:Boolean,default:!1},currentTime:{default(){return new Date}},readonly:{type:Boolean,default:!1}},data(){let e=this.currentTime?this.currentTime:new Date,t=e.getHours();return{hour:this.hour24?t:t%12||12,minute:e.getMinutes()-e.getMinutes()%this.miniuteIncrement,second:e.getSeconds(),ampm:t<12?"AM":"PM"}},computed:{hours(){let e=[],t=this.hour24?24:12;for(let s=0;se<10?"0"+e.toString():e.toString(),getHour(){return this.hour24?this.hour:this.hour===12?this.ampm==="AM"?0:12:this.hour+(this.ampm==="PM"?12:0)},onChange(){this.$emit("update",{hours:this.getHour(),minutes:this.minute,seconds:this.second})}}},gl={class:"calendar-time"},bl=["disabled"],_l=["value"],pl=["disabled"],yl=["value"],vl=["disabled"],kl=["value"],wl=["disabled"],xl=l("option",{value:"AM"},"AM",-1),Dl=l("option",{value:"PM"},"PM",-1),Cl=[xl,Dl];function Ml(e,t,s,c,d,n){return i(),a("div",gl,[F(l("select",{"onUpdate:modelValue":t[0]||(t[0]=r=>d.hour=r),class:"hourselect form-control mr-1",disabled:s.readonly},[(i(!0),a(p,null,C(n.hours,r=>(i(),a("option",{key:r,value:r},h(n.formatNumber(r)),9,_l))),128))],8,bl),[[U,d.hour]]),v(" :"),F(l("select",{"onUpdate:modelValue":t[1]||(t[1]=r=>d.minute=r),class:"minuteselect form-control ml-1",disabled:s.readonly},[(i(!0),a(p,null,C(n.minutes,r=>(i(),a("option",{key:r,value:r},h(n.formatNumber(r)),9,yl))),128))],8,pl),[[U,d.minute]]),s.secondPicker?(i(),a(p,{key:0},[v(" :"),F(l("select",{"onUpdate:modelValue":t[2]||(t[2]=r=>d.second=r),class:"secondselect form-control ml-1",disabled:s.readonly},[(i(),a(p,null,C(60,r=>l("option",{key:r-1,value:r-1},h(n.formatNumber(r-1)),9,kl)),64))],8,vl),[[U,d.second]])],64)):u("",!0),s.hour24?u("",!0):F((i(),a("select",{key:1,"onUpdate:modelValue":t[3]||(t[3]=r=>d.ampm=r),class:"ampmselect",disabled:s.readonly},Cl,8,wl)),[[U,d.ampm]])])}const Tl=D(ml,[["render",Ml]]),Sl={mixins:[K],props:{ranges:Object,selected:Object,localeData:Object,alwaysShowCalendars:Boolean},data(){return{customRangeActive:!1}},methods:{clickRange(e){this.customRangeActive=!1,this.$emit("clickRange",e)},clickCustomRange(){this.customRangeActive=!0,this.$emit("showCustomRange")},range_class(e){return{active:e.selected===!0}}},computed:{listedRanges(){return this.ranges?Object.keys(this.ranges).map(e=>({label:e,value:this.ranges[e],selected:this.$dateUtil.isSame(this.selected.startDate,this.ranges[e][0])&&this.$dateUtil.isSame(this.selected.endDate,this.ranges[e][1])})):!1},selectedRange(){return this.listedRanges.find(e=>e.selected===!0)},showCustomRangeLabel(){return!this.alwaysShowCalendars}}},$l={class:"ranges"},El={key:0},Fl=["onClick","data-range-key"];function Rl(e,t,s,c,d,n){return i(),a("div",$l,[s.ranges?(i(),a("ul",El,[(i(!0),a(p,null,C(n.listedRanges,r=>(i(),a("li",{onClick:o=>n.clickRange(r.value),"data-range-key":r.label,key:r.label,class:m(n.range_class(r)),tabindex:"0"},h(r.label),11,Fl))),128)),n.showCustomRangeLabel?(i(),a("li",{key:0,class:m({active:d.customRangeActive||!n.selectedRange}),onClick:t[0]||(t[0]=(...r)=>n.clickCustomRange&&n.clickCustomRange(...r)),tabindex:"0"},h(s.localeData.customRangeLabel),3)):u("",!0)])):u("",!0)])}const Ol=D(Sl,[["render",Rl]]),Pl={mounted(e,{instance:t}){if(t.appendToBody){const{height:s,top:c,left:d,width:n,right:r}=t.$refs.toggle.getBoundingClientRect();e.unbindPosition=t.calculatePosition(e,t,{width:n,top:window.scrollY+c+s,left:window.scrollX+d,right:r}),document.body.appendChild(e)}else t.$el.appendChild(e)},unmounted(e,{instance:t}){t.appendToBody&&(e.unbindPosition&&typeof e.unbindPosition=="function"&&e.unbindPosition(),e.parentNode&&e.parentNode.removeChild(e))}},jl={inheritAttrs:!1,components:{Calendar:fl,CalendarTime:Tl,CalendarRanges:Ol},mixins:[K],directives:{appendToBody:Pl},emits:["update:modelValue","toggle","hoverDate","startSelection","select","change-month","finishSelection"],props:{modelValue:{type:Object},minDate:{type:[String,Date],default(){return null}},maxDate:{type:[String,Date],default(){return null}},showWeekNumbers:{type:Boolean,default:!1},linkedCalendars:{type:Boolean,default:!0},singleDatePicker:{type:[Boolean,String],default:!1},showDropdowns:{type:Boolean,default:!1},timePicker:{type:Boolean,default:!1},timePickerIncrement:{type:Number,default:5},timePicker24Hour:{type:Boolean,default:!0},timePickerSeconds:{type:Boolean,default:!1},autoApply:{type:Boolean,default:!1},localeData:{type:Object,default(){return{}}},dateRange:{type:[Object],default:null,required:!0},ranges:{type:[Object,Boolean],default(){let e=new Date;e.setHours(0,0,0,0);let t=new Date;t.setHours(11,59,59,999);let s=new Date;s.setDate(e.getDate()-1),s.setHours(0,0,0,0);let c=new Date;c.setDate(e.getDate()-1),c.setHours(11,59,59,999);let d=new Date(e.getFullYear(),e.getMonth(),1),n=new Date(e.getFullYear(),e.getMonth()+1,0,11,59,59,999);return{Today:[e,t],Yesterday:[s,c],"This month":[d,n],"This year":[new Date(e.getFullYear(),0,1),new Date(e.getFullYear(),11,31,11,59,59,999)],"Last month":[new Date(e.getFullYear(),e.getMonth()-1,1),new Date(e.getFullYear(),e.getMonth(),0,11,59,59,999)]}}},opens:{type:String,default:"center"},dateFormat:Function,alwaysShowCalendars:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},controlContainerClass:{type:[Object,String],default:"form-control reportrange-text"},appendToBody:{type:Boolean,default:!1},calculatePosition:{type:Function,default(e,t,{width:s,top:c,left:d,right:n}){t.opens==="center"?e.style.left=d+s/2+"px":t.opens==="left"?e.style.right=window.innerWidth-n+"px":t.opens==="right"&&(e.style.left=d+"px"),e.style.top=c+"px"}},closeOnEsc:{type:Boolean,default:!0},readonly:{type:Boolean}},data(){const e=he;let t={locale:e.localeData({...this.localeData})},s=this.dateRange.startDate||null,c=this.dateRange.endDate||null;if(t.monthDate=s?new Date(s):new Date,t.nextMonthDate=e.nextMonth(t.monthDate),t.start=s?new Date(s):null,this.singleDatePicker&&this.singleDatePicker!=="range"?t.end=t.start:t.end=c?new Date(c):null,t.in_selection=!1,t.open=!1,t.showCustomRangeCalendars=!1,t.locale.firstDay!==0){let d=t.locale.firstDay,n=[...t.locale.daysOfWeek];for(;d>0;)n.push(n.shift()),d--;t.locale.daysOfWeek=n}return t},methods:{dateFormatFn(e,t){let s=new Date(t);s.setHours(0,0,0,0);let c=new Date(this.start);c.setHours(0,0,0,0);let d=new Date(this.end);return d.setHours(0,0,0,0),e["in-range"]=s>=c&&s<=d,this.dateFormat?this.dateFormat(e,t):e},changeLeftMonth(e){let t=new Date(e.year,e.month-1,1);this.monthDate=t,(this.linkedCalendars||this.$dateUtil.yearMonth(this.monthDate)>=this.$dateUtil.yearMonth(this.nextMonthDate))&&(this.nextMonthDate=this.$dateUtil.validateDateRange(this.$dateUtil.nextMonth(t),this.minDate,this.maxDate),(!this.singleDatePicker||this.singleDatePicker==="range")&&this.$dateUtil.yearMonth(this.monthDate)===this.$dateUtil.yearMonth(this.nextMonthDate)&&(this.monthDate=this.$dateUtil.validateDateRange(this.$dateUtil.prevMonth(this.monthDate),this.minDate,this.maxDate))),this.$emit("change-month",this.monthDate,0)},changeRightMonth(e){let t=new Date(e.year,e.month-1,1);this.nextMonthDate=t,(this.linkedCalendars||this.$dateUtil.yearMonth(this.nextMonthDate)<=this.$dateUtil.yearMonth(this.monthDate))&&(this.monthDate=this.$dateUtil.validateDateRange(this.$dateUtil.prevMonth(t),this.minDate,this.maxDate),this.$dateUtil.yearMonth(this.monthDate)===this.$dateUtil.yearMonth(this.nextMonthDate)&&(this.nextMonthDate=this.$dateUtil.validateDateRange(this.$dateUtil.nextMonth(this.nextMonthDate),this.minDate,this.maxDate))),this.$emit("change-month",this.monthDate,1)},normalizeDatetime(e,t){let s=new Date(e);return this.timePicker&&t&&(s.setHours(t.getHours()),s.setMinutes(t.getMinutes()),s.setSeconds(t.getSeconds()),s.setMilliseconds(t.getMilliseconds())),s},dateClick(e){if(this.readonly)return!1;this.in_selection?(this.in_selection=!1,this.end=this.normalizeDatetime(e,this.end),this.end=this.start&&(this.end=t),this.$emit("hoverDate",e)},onClickPicker(){this.disabled||this.togglePicker(null,!0)},togglePicker(e,t){typeof e=="boolean"?this.open=e:this.open=!this.open,t===!0&&this.$emit("toggle",this.open,this.togglePicker)},clickedApply(){this.togglePicker(!1,!0),this.$emit("update:modelValue",{startDate:this.start,endDate:this.singleDatePicker&&this.singleDatePicker!=="range"?this.start:this.end})},clickCancel(){if(this.open){let e=this.dateRange.startDate,t=this.dateRange.endDate;this.start=e?new Date(e):null,this.end=t?new Date(t):null,this.in_selection=!1,this.togglePicker(!1,!0)}},onSelect(){this.$emit("select",{startDate:this.start,endDate:this.end})},clickAway(e){e&&e.target&&!this.$el.contains(e.target)&&this.$refs.dropdown&&!this.$refs.dropdown.contains(e.target)&&this.clickCancel()},clickRange(e){this.in_selection=!1,this.$dateUtil.isValidDate(e[0])&&this.$dateUtil.isValidDate(e[1])?(this.start=this.$dateUtil.validateDateRange(new Date(e[0]),this.minDate,this.maxDate),this.end=this.$dateUtil.validateDateRange(new Date(e[1]),this.minDate,this.maxDate),this.changeLeftMonth({month:this.start.getMonth()+1,year:this.start.getFullYear()}),this.linkedCalendars===!1&&this.changeRightMonth({month:this.end.getMonth()+1,year:this.end.getFullYear()})):(this.start=null,this.end=null),this.onSelect(),this.autoApply&&this.clickedApply()},onUpdateStartTime(e){let t=new Date(this.start);t.setHours(e.hours),t.setMinutes(e.minutes),t.setSeconds(e.seconds),this.start=this.$dateUtil.validateDateRange(t,this.minDate,this.maxDate),this.autoApply&&this.$emit("update:modelValue",{startDate:this.start,endDate:this.singleDatePicker&&this.singleDatePicker!=="range"?this.start:this.end})},onUpdateEndTime(e){let t=new Date(this.end);t.setHours(e.hours),t.setMinutes(e.minutes),t.setSeconds(e.seconds),this.end=this.$dateUtil.validateDateRange(t,this.minDate,this.maxDate),this.autoApply&&this.$emit("update:modelValue",{startDate:this.start,endDate:this.end})},handleEscape(e){this.open&&e.keyCode===27&&this.closeOnEsc&&this.clickCancel()}},computed:{showRanges(){return this.ranges!==!1&&!this.readonly},showCalendars(){return this.alwaysShowCalendars||this.showCustomRangeCalendars},startText(){return this.start===null?"":this.$dateUtil.format(this.start,this.locale.format)},endText(){return this.end===null?"":this.$dateUtil.format(this.end,this.locale.format)},rangeText(){let e=this.startText;return(!this.singleDatePicker||this.singleDatePicker==="range")&&(e+=this.locale.separator+this.endText),e},min(){return this.minDate?new Date(this.minDate):null},max(){return this.maxDate?new Date(this.maxDate):null},pickerStyles(){return{"show-calendar":this.open||this.opens==="inline","show-ranges":this.showRanges,"show-weeknumbers":this.showWeekNumbers,single:this.singleDatePicker,["opens"+this.opens]:!0,linked:this.linkedCalendars,"hide-calendars":!this.showCalendars}},isClear(){return!this.dateRange.startDate||!this.dateRange.endDate},isDirty(){let e=new Date(this.dateRange.startDate),t=new Date(this.dateRange.endDate);return!this.isClear&&(this.start.getTime()!==e.getTime()||this.end.getTime()!==t.getTime())}},watch:{minDate(){let e=this.$dateUtil.validateDateRange(this.monthDate,this.minDate||new Date,this.maxDate);this.changeLeftMonth({year:e.getFullYear(),month:e.getMonth()+1})},maxDate(){let e=this.$dateUtil.validateDateRange(this.nextMonthDate,this.minDate,this.maxDate||new Date);this.changeRightMonth({year:e.getFullYear(),month:e.getMonth()+1})},"dateRange.startDate"(e){this.$dateUtil.isValidDate(new Date(e))&&(this.start=e&&!this.isClear&&this.$dateUtil.isValidDate(new Date(e))?new Date(e):null,this.isClear?(this.start=null,this.end=null):(this.start=new Date(this.dateRange.startDate),this.end=new Date(this.dateRange.endDate)))},"dateRange.endDate"(e){this.$dateUtil.isValidDate(new Date(e))&&(this.end=e&&!this.isClear?new Date(e):null,this.isClear?(this.start=null,this.end=null):(this.start=new Date(this.dateRange.startDate),this.end=new Date(this.dateRange.endDate)))},open:{handler(e){typeof document=="object"&&this.$nextTick(()=>{e?document.body.addEventListener("click",this.clickAway):document.body.removeEventListener("click",this.clickAway),e?document.addEventListener("keydown",this.handleEscape):document.removeEventListener("keydown",this.handleEscape),!this.alwaysShowCalendars&&this.ranges&&(this.showCustomRangeCalendars=!Object.keys(this.ranges).find(t=>this.$dateUtil.isSame(this.start,this.ranges[t][0],"date")&&this.$dateUtil.isSame(this.end,this.ranges[t][1],"date")))})},immediate:!0}}},me=e=>(ne("data-v-577c3804"),e=e(),le(),e),Al=me(()=>l("i",{class:"glyphicon glyphicon-calendar fa fa-calendar"},null,-1)),Ul=me(()=>l("b",{class:"caret"},null,-1)),Hl={class:"calendars"},Ll={key:1,class:"calendars-container"};const Yl={class:"calendar-table"},Vl={key:0,class:"drp-calendar col right"};const Bl={class:"calendar-table"},Il={key:0,class:"drp-buttons"},Nl={key:0,class:"drp-selected"},zl=["disabled"];function ql(e,t,s,c,d,n){const r=w("calendar-ranges"),o=w("calendar"),f=w("calendar-time"),g=xe("append-to-body");return i(),a("div",{class:m(["vue-daterange-picker",{inline:s.opens==="inline"}])},[l("div",{class:m(s.controlContainerClass),onClick:t[0]||(t[0]=(...b)=>n.onClickPicker&&n.onClickPicker(...b)),ref:"toggle"},[y(e.$slots,"input",{startDate:e.start,endDate:e.end,ranges:s.ranges,rangeText:n.rangeText},()=>[Al,v("  "),l("span",null,h(n.rangeText),1),Ul],!0)],2),T(Te,{name:"slide-fade",mode:"out-in"},{default:M(()=>[e.open||s.opens==="inline"?F((i(),a("div",{key:0,class:m(["daterangepicker ltr",n.pickerStyles]),ref:"dropdown"},[y(e.$slots,"header",{rangeText:n.rangeText,locale:e.locale,clickCancel:n.clickCancel,clickApply:n.clickedApply,in_selection:e.in_selection,autoApply:s.autoApply},void 0,!0),l("div",Hl,[n.showRanges?y(e.$slots,"ranges",{key:0,startDate:e.start,endDate:e.end,ranges:s.ranges,clickRange:n.clickRange},()=>[T(r,{onClickRange:n.clickRange,onShowCustomRange:t[1]||(t[1]=b=>e.showCustomRangeCalendars=!0),"always-show-calendars":s.alwaysShowCalendars,"locale-data":e.locale,ranges:s.ranges,selected:{startDate:e.start,endDate:e.end}},null,8,["onClickRange","always-show-calendars","locale-data","ranges","selected"])],!0):u("",!0),n.showCalendars?(i(),a("div",Ll,[l("div",{class:m(["drp-calendar col left",{single:s.singleDatePicker}])},[u("",!0),l("div",Yl,[T(o,{monthDate:e.monthDate,"locale-data":e.locale,start:e.start,end:e.end,minDate:n.min,maxDate:n.max,"show-dropdowns":s.showDropdowns,onChangeMonth:n.changeLeftMonth,"date-format":n.dateFormatFn,onDateClick:n.dateClick,onHoverDate:n.hoverDate,showWeekNumbers:s.showWeekNumbers},{default:M(()=>[y(e.$slots,"date",J(ee(e.data)),void 0,!0)]),_:3},8,["monthDate","locale-data","start","end","minDate","maxDate","show-dropdowns","onChangeMonth","date-format","onDateClick","onHoverDate","showWeekNumbers"])]),s.timePicker&&e.start?(i(),E(f,{key:1,onUpdate:n.onUpdateStartTime,"miniute-increment":s.timePickerIncrement,hour24:s.timePicker24Hour,"second-picker":s.timePickerSeconds,"current-time":e.start,readonly:s.readonly},null,8,["onUpdate","miniute-increment","hour24","second-picker","current-time","readonly"])):u("",!0)],2),s.singleDatePicker?u("",!0):(i(),a("div",Vl,[u("",!0),l("div",Bl,[T(o,{monthDate:e.nextMonthDate,"locale-data":e.locale,start:e.start,end:e.end,minDate:n.min,maxDate:n.max,"show-dropdowns":s.showDropdowns,onChangeMonth:n.changeRightMonth,"date-format":n.dateFormatFn,onDateClick:n.dateClick,onHoverDate:n.hoverDate,showWeekNumbers:s.showWeekNumbers},{default:M(()=>[y(e.$slots,"date",J(ee(e.data)),void 0,!0)]),_:3},8,["monthDate","locale-data","start","end","minDate","maxDate","show-dropdowns","onChangeMonth","date-format","onDateClick","onHoverDate","showWeekNumbers"])]),s.timePicker&&e.end?(i(),E(f,{key:1,onUpdate:n.onUpdateEndTime,"miniute-increment":s.timePickerIncrement,hour24:s.timePicker24Hour,"second-picker":s.timePickerSeconds,"current-time":e.end,readonly:s.readonly},null,8,["onUpdate","miniute-increment","hour24","second-picker","current-time","readonly"])):u("",!0)]))])):u("",!0)]),y(e.$slots,"footer",{rangeText:n.rangeText,locale:e.locale,clickCancel:n.clickCancel,clickApply:n.clickedApply,in_selection:e.in_selection,autoApply:s.autoApply},()=>[s.autoApply?u("",!0):(i(),a("div",Il,[n.showCalendars?(i(),a("span",Nl,h(n.rangeText),1)):u("",!0),s.readonly?u("",!0):(i(),a("button",{key:1,class:"cancelBtn btn btn-sm btn-secondary",type:"button",onClick:t[2]||(t[2]=(...b)=>n.clickCancel&&n.clickCancel(...b))},h(e.locale.cancelLabel),1)),s.readonly?u("",!0):(i(),a("button",{key:2,class:"applyBtn btn btn-sm btn-success",disabled:e.in_selection,type:"button",onClick:t[3]||(t[3]=(...b)=>n.clickedApply&&n.clickedApply(...b))},h(e.locale.applyLabel),9,zl))]))],!0)],2)),[[g]]):u("",!0)]),_:3})],2)}const Wl=D(jl,[["render",ql],["__scopeId","data-v-577c3804"]]),Gl={name:"ns-date-range-picker",data(){return{dateRange:{startDate:null,endDate:null}}},components:{DateRangePicker:Wl},mounted(){this.field.value!==void 0&&(this.dateRange=this.field.value)},watch:{dateRange(){const e={startDate:x(this.dateRange.startDate).format("YYYY-MM-DD HH:mm"),endDate:x(this.dateRange.endDate).format("YYYY-MM-DD HH:mm")};this.field.value=e,this.$emit("change",this)}},methods:{__:_,getFormattedDate(e){return e!==null?x(e).format("YYYY-MM-DD HH:mm"):_("N/D")},clearDate(){this.dateRange={startDate:null,endDate:null},this.field.value=void 0}},computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"bg-gray-200 cursor-not-allowed":"bg-transparent"},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"}},props:["placeholder","leading","type","field"]},Kl={class:"flex flex-auto flex-col mb-2 ns-date-range-picker"},Ql=["for"],Zl={key:0,class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},Xl={class:"text-primary sm:text-sm sm:leading-5"},Jl=l("i",{class:"las la-times"},null,-1),ei=[Jl],ti={class:"flex justify-between items-center w-full py-2"},si={class:"text-xs"},ni={class:"text-xs"};function li(e,t,s,c,d,n){const r=w("date-range-picker"),o=w("ns-field-description");return i(),a("div",Kl,[l("label",{for:s.field.name,class:m([n.hasError?"text-error-primary":"text-primary","block leading-5 font-medium"])},[y(e.$slots,"default")],10,Ql),l("div",{class:m([n.hasError?"error":"","mt-1 relative flex input-group border-2 rounded-md overflow-hidden focus:shadow-sm"])},[s.leading?(i(),a("div",Zl,[l("span",Xl,h(s.leading),1)])):u("",!0),l("button",{class:"px-3 outline-none bg-error-secondary font-semibold text-white",onClick:t[0]||(t[0]=f=>n.clearDate())},ei),T(r,{class:"w-full flex items-center bg-input-background",ref:"picker","locale-data":{firstDay:1,format:"yyyy-mm-dd HH:mm:ss"},timePicker:!0,timePicker24Hour:!0,showWeekNumbers:!0,showDropdowns:!0,autoApply:!1,appendToBody:!0,modelValue:d.dateRange,"onUpdate:modelValue":t[1]||(t[1]=f=>d.dateRange=f),disabled:s.field.disabled,linkedCalendars:!0},{input:M(f=>[l("div",ti,[l("span",si,h(n.__("Range Starts"))+" : "+h(n.getFormattedDate(f.startDate)),1),l("span",ni,h(n.__("Range Ends"))+" : "+h(n.getFormattedDate(f.endDate)),1)])]),_:1},8,["modelValue","disabled"])],2),T(o,{field:s.field},null,8,["field"])])}const ge=D(Gl,[["render",li]]),ii={name:"ns-date-time-picker",props:["field","date"],data(){return{visible:!1,hours:0,minutes:0,currentView:"days",currentDay:void 0,moment:x}},computed:{fieldDate(){return this.field?x(this.field.value).isValid()?x(this.field.value):x():this.date?x(this.date):x()}},mounted(){let e=x(this.field.value);e.isValid()?this.setDate(e.format("YYYY-MM-DD HH:mm:ss")):this.setDate(x(ns.date.current).format("YYYY-MM-DD HH:mm:ss"))},methods:{__:_,setDate(e){this.field.value=e}}},ai={class:"picker mb-2"},ri={key:0,class:"block leading-5 font-medium text-primary"},di={class:"ns-button"},oi=l("i",{class:"las la-clock text-xl"},null,-1),ui={key:0,class:"mx-1 text-sm"},ci={key:0},hi={key:1},fi={key:1,class:"mx-1 text-sm"},mi={key:0},gi={key:1},bi={key:1,class:"text-sm text-secondary py-1"},_i={key:2,class:"relative z-10 h-0 w-0"};function pi(e,t,s,c,d,n){const r=w("ns-calendar");return i(),a("div",ai,[s.field&&s.field.label&&s.field.label.length>0?(i(),a("label",ri,h(s.field.label),1)):u("",!0),l("div",di,[l("button",{onClick:t[0]||(t[0]=o=>d.visible=!d.visible),class:m([s.field&&s.field.label&&s.field.label.length>0?"mt-1 border border-input-edge":"","shadow rounded cursor-pointer w-full p-1 flex items-center text-primary"])},[oi,s.field?(i(),a("span",ui,[[null,"",void 0].includes(s.field.value)?u("",!0):(i(),a("span",ci,h(n.fieldDate.format("YYYY-MM-DD HH:mm")),1)),[null,"",void 0].includes(s.field.value)?(i(),a("span",hi,"N/A")):u("",!0)])):u("",!0),s.date?(i(),a("span",fi,[[null,"",void 0].includes(s.date)?u("",!0):(i(),a("span",mi,h(n.fieldDate.format("YYYY-MM-DD HH:mm")),1)),[null,"",void 0].includes(s.date)?(i(),a("span",gi,"N/A")):u("",!0)])):u("",!0)],2)]),s.field?(i(),a("p",bi,h(s.field.description),1)):u("",!0),d.visible?(i(),a("div",_i,[l("div",{class:m([s.field&&s.field.label&&s.field.label.length>0?"-mt-4":"mt-2","absolute w-72 shadow-xl rounded ns-box anim-duration-300 zoom-in-entrance flex flex-col"])},[s.field?(i(),E(r,{key:0,onOnClickOut:t[1]||(t[1]=o=>d.visible=!1),onSet:t[2]||(t[2]=o=>n.setDate(o)),visible:d.visible,date:s.field.value},null,8,["visible","date"])):u("",!0),s.date?(i(),E(r,{key:1,onOnClickOut:t[3]||(t[3]=o=>d.visible=!1),onSet:t[4]||(t[4]=o=>n.setDate(o)),visible:d.visible,date:s.date},null,8,["visible","date"])):u("",!0)],2)])):u("",!0)])}const be=D(ii,[["render",pi]]),yi={name:"ns-datepicker",components:{nsCalendar:ce},props:["label","date","format"],computed:{formattedDate(){return x(this.date).format(this.format||"YYYY-MM-DD HH:mm:ss")}},data(){return{visible:!1}},mounted(){},methods:{__:_,setDate(e){this.$emit("set",e)}}},vi={class:"picker"},ki={class:"ns-button"},wi=l("i",{class:"las la-clock text-2xl"},null,-1),xi={class:"mx-1 text-sm"},Di={key:0},Ci={key:1},Mi={key:0,class:"relative h-0 w-0 -mb-2"},Ti={class:"w-72 mt-2 shadow-lg anim-duration-300 zoom-in-entrance flex flex-col ns-floating-panel"};function Si(e,t,s,c,d,n){const r=w("ns-calendar");return i(),a("div",vi,[l("div",ki,[l("button",{onClick:t[0]||(t[0]=o=>d.visible=!d.visible),class:"rounded cursor-pointer border border-input-edge shadow w-full px-1 py-1 flex items-center text-primary"},[wi,l("span",xi,[l("span",null,h(s.label||n.__("Date"))+" : ",1),s.date?(i(),a("span",Di,h(n.formattedDate),1)):(i(),a("span",Ci,h(n.__("N/A")),1))])])]),d.visible?(i(),a("div",Mi,[l("div",Ti,[T(r,{visible:d.visible,onOnClickOut:t[1]||(t[1]=o=>d.visible=!1),date:s.date,onSet:t[2]||(t[2]=o=>n.setDate(o))},null,8,["visible","date"])])])):u("",!0)])}const $i=D(yi,[["render",Si]]),Ei={name:"ns-daterange-picker",data(){return{leftCalendar:x(),rightCalendar:x().add(1,"months"),rangeViewToggled:!1,clickedOnCalendar:!1}},mounted(){this.field.value||this.clearDate(),document.addEventListener("click",this.checkClickedItem)},beforeUnmount(){document.removeEventListener("click",this.checkClickedItem)},watch:{leftCalendar(){this.leftCalendar.isSame(this.rightCalendar,"month")&&this.rightCalendar.add(1,"months")},rightCalendar(){this.rightCalendar.isSame(this.leftCalendar,"month")&&this.leftCalendar.sub(1,"months")}},methods:{__:_,setDateRange(e,t){this.field.value[e]=t,x(this.field.value.startDate).isBefore(x(this.field.value.endDate))&&this.$emit("change",this.field)},getFormattedDate(e){return e!==null?x(e).format("YYYY-MM-DD HH:mm"):_("N/D")},clearDate(){this.field.value={startDate:null,endDate:null}},toggleRangeView(){this.rangeViewToggled=!this.rangeViewToggled},handleDateRangeClick(){this.clickedOnCalendar=!0},checkClickedItem(e){this.$el.getAttribute("class").split(" ").includes("ns-daterange-picker")&&(!this.$el.contains(e.srcElement)&&!this.clickedOnCalendar&&this.rangeViewToggled&&(this.$emit("blur",this.field),this.toggleRangeView()),setTimeout(()=>{this.clickedOnCalendar=!1},100))}},computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"bg-gray-200 cursor-not-allowed":"bg-transparent"},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"},startDateFormatted(){return this.field.value!==void 0&&x(this.field.value.startDate).isValid()?x(this.field.value.startDate).format("YYYY-MM-DD HH:mm"):!1},endDateFormatted(){return this.field.value!==void 0&&x(this.field.value.endDate).isValid()?x(this.field.value.endDate).format("YYYY-MM-DD HH:mm"):!1}},props:["placeholder","leading","type","field"]},Fi=["for"],Ri={class:"border border-input-edge rounded-tl rounded-bl flex-auto flex"},Oi={key:0,class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},Pi={class:"text-primary sm:text-sm sm:leading-5"},ji=l("span",{class:"mr-1"},[l("i",{class:"las la-clock text-2xl"})],-1),Ai={class:""},Ui=l("span",{class:"mx-2"},"—",-1),Hi=l("span",{class:"mr-1"},[l("i",{class:"las la-clock text-2xl"})],-1),Li={class:""},Yi=l("i",{class:"las la-times"},null,-1),Vi=[Yi],Bi={key:0,class:"relative h-0 w-0"},Ii={class:"z-10 absolute md:w-[550px] w-[225px] mt-2 shadow-lg anim-duration-300 zoom-in-entrance flex flex-col"},Ni={class:"flex flex-col md:flex-row bg-box-background rounded-lg"},zi=l("div",{class:"flex-auto border-l border-r"},null,-1);function qi(e,t,s,c,d,n){const r=w("ns-calendar"),o=w("ns-field-description");return i(),a("div",{onClick:t[4]||(t[4]=f=>n.handleDateRangeClick()),class:"flex flex-auto flex-col mb-2 ns-daterange-picker"},[l("label",{for:s.field.name,class:m([n.hasError?"text-error-primary":"text-primary","block leading-5 font-medium"])},[y(e.$slots,"default")],10,Fi),l("div",{class:m([n.hasError?"error":"","mt-1 relative flex input-group bg-input-background rounded overflow-hidden shadow focus:shadow-sm"])},[l("div",Ri,[s.leading?(i(),a("div",Oi,[l("span",Pi,h(s.leading),1)])):u("",!0),l("div",{class:"flex flex-auto p-1 text-primary text-sm items-center cursor-pointer",onClick:t[0]||(t[0]=f=>n.toggleRangeView())},[ji,l("span",Ai,h(n.startDateFormatted||n.__("N/A")),1),Ui,Hi,l("span",Li,h(n.endDateFormatted||n.__("N/A")),1)])]),l("button",{class:"px-3 outline-none font-bold bg-error-tertiary",onClick:t[1]||(t[1]=f=>n.clearDate())},Vi)],2),d.rangeViewToggled?(i(),a("div",Bi,[l("div",Ii,[l("div",Ni,[T(r,{class:"md:w-1/2 w-full",range:[n.startDateFormatted,n.endDateFormatted],side:"left",date:s.field.value.startDate,"selected-range":s.field.value,onSet:t[2]||(t[2]=f=>n.setDateRange("startDate",f))},null,8,["range","date","selected-range"]),zi,T(r,{class:"md:w-1/2 w-full",range:[n.startDateFormatted,n.endDateFormatted],side:"right",date:s.field.value.endDate,"selected-range":s.field.value,onSet:t[3]||(t[3]=f=>n.setDateRange("endDate",f))},null,8,["range","date","selected-range"])])])])):u("",!0),T(o,{field:s.field},null,8,["field"])])}const Wi=D(Ei,[["render",qi]]),Gi={name:"ns-dropzone",emits:["dropped"],mounted(){},setup(e,{emit:t}){return{dropZone:z(null),handleDrop:d=>{const n=d.dataTransfer.getData("text");t("dropped",n)}}}};function Ki(e,t,s,c,d,n){return i(),a("div",{ref:"dropZone",class:"ns-drop-zone mb-4",onDragover:t[0]||(t[0]=Se(()=>{},["prevent"]))},[y(e.$slots,"default",{},void 0,!0)],544)}const Qi=D(Gi,[["render",Ki],["__scopeId","data-v-0817a409"]]),Zi={emits:["drag-start","drag-end"],name:"ns-draggable",props:{widget:{required:!0}},setup(e,{emit:t}){const s=z(null),c=z(null);let d=null,n=0,r=0,o=0,f=0;const g=R=>{const P=R.srcElement.closest(".ns-draggable-item"),O=P.getBoundingClientRect();d=P.cloneNode(!0),d.setAttribute("class","ns-ghost"),d.style.display="none",d.style.position="fixed",d.style.top=`${O.top}px`,d.style.left=`${O.left}px`,d.style.width=`${O.width}px`,d.style.height=`${O.height}px`,P.closest(".ns-drop-zone").appendChild(d),n=R.clientX-o,r=R.clientY-f,c.value={dom:P},t("drag-start",e.widget)},b=R=>{if(c.value===null)return;const P=c.value.dom.closest(".ns-drop-zone").querySelector(".ns-ghost"),O=P.querySelector("div");Array.from(O.classList).filter(A=>A.startsWith("shadow")).forEach(A=>O.classList.remove(A)),o=R.clientX-n,f=R.clientY-r,O.style.boxShadow="0px 4px 10px 5px rgb(0 0 0 / 48%)",P.style.display="block",P.style.transform=`translate(${o}px, ${f}px)`,P.style.cursor="grabbing",document.querySelectorAll(".ns-drop-zone").forEach(A=>{A.getBoundingClientRect();const{left:B,top:I,right:k,bottom:ye}=A.getBoundingClientRect(),{clientX:Z,clientY:X}=R;Z>=B&&Z<=k&&X>=I&&X<=ye?A.setAttribute("hovered","true"):A.setAttribute("hovered","false")})},S=R=>{if(c.value===null)return;const O=c.value.dom.closest(".ns-drop-zone").querySelector(".ns-ghost");O&&O.remove(),c.value=null,o=0,f=0,R.srcElement.closest(".ns-drop-zone"),t("drag-end",e.widget)};return De(()=>{s.value&&(document.addEventListener("mousemove",R=>b(R)),document.addEventListener("mouseup",R=>S(R)))}),Ce(()=>{document.removeEventListener("mousemove",b),document.removeEventListener("mouseup",S)}),{draggable:s,startDrag:g}}};function Xi(e,t,s,c,d,n){return i(),a("div",{ref:"draggable",class:"ns-draggable-item",onMousedown:t[0]||(t[0]=(...r)=>c.startDrag&&c.startDrag(...r))},[y(e.$slots,"default")],544)}const Ji=D(Zi,[["render",Xi]]),ea={name:"ns-dragzone",props:["raw-widgets","raw-columns"],components:{nsDropzone:Qi,nsDraggable:Ji},data(){return{widgets:[],theme:ns.theme,dragged:null,columns:[]}},mounted(){this.widgets=this.rawWidgets.map(e=>({name:e.name,"component-name":e["component-name"],"class-name":e["class-name"],component:te(window[e["component-name"]])})),this.columns=this.rawColumns.map(e=>(e.widgets.forEach(t=>{t.component=te(window[t.identifier]),t["class-name"]=t.class_name,t["component-name"]=t.identifier}),e)),setTimeout(()=>{var e=document.querySelectorAll(".widget-placeholder");document.addEventListener("mousemove",t=>{for(var s=0;s=c.left&&t.clientX<=c.right&&t.clientY>=c.top&&t.clientY<=c.bottom){e[s].setAttribute("hovered","true");break}else e[s].setAttribute("hovered","false")}})},10)},computed:{hasUnusedWidgets(){const e=this.columns.map(t=>t.widgets).flat();return this.widgets.filter(t=>!e.map(c=>c["component-name"]).includes(t["component-name"])).length>0}},methods:{__:_,handleEndDragging(e){const t=document.querySelector('.ns-drop-zone[hovered="true"]');if(t){const d=t.closest("[column-name]").getAttribute("column-name"),n=this.columns.filter(O=>O.name===d),r=n[0].widgets.filter(O=>O["component-name"]===t.querySelector(".ns-draggable-item").getAttribute("component-name")),o=document.querySelector(`[component-name="${e["component-name"]}"]`),g=o.closest("[column-name]").getAttribute("column-name"),b=this.columns.filter(O=>O.name===g),S=b[0].widgets.filter(O=>O["component-name"]===o.getAttribute("component-name"));if(S[0]["component-name"]===r[0]["component-name"])return;const R=S[0].position,P=r[0].position;S[0].column=d,S[0].position=P,r[0].column=g,r[0].position=R,n[0].widgets[P]=S[0],b[0].widgets[R]=r[0],this.handleChange(n[0]),this.handleChange(b[0]),t.setAttribute("hovered","false")}const s=document.querySelector('.widget-placeholder[hovered="true"]');if(s){const c=s.closest("[column-name]").getAttribute("column-name");if(e===c){console.log("The widget is already in the same column.");return}const d=this.columns.filter(o=>o.name===e.column)[0],n=d.widgets.indexOf(e);d.widgets.splice(n,1);const r=this.columns.filter(o=>o.name===c)[0];e.position=r.widgets.length,e.column=c,r.widgets.push(e),this.handleChange(d),this.handleChange(r)}},handleChange(e,t){setTimeout(()=>{nsHttpClient.post("/api/users/widgets",{column:e}).subscribe(s=>{},s=>$.error(s.message||_("An unpexpected error occured while using the widget.")).subscribe())},100)},handleRemoveWidget(e,t){const s=t.widgets.indexOf(e);t.widgets.splice(s,1),this.handleChange(t)},async openWidgetAdded(e){try{const t=this.columns.filter(r=>r.name!==e.name?(console.log(r.name),r.widgets.length>0):!1).map(r=>r.widgets).flat(),s=e.widgets.map(r=>r["component-name"]),c=this.widgets.filter(r=>{const o=t.map(f=>f["component-name"]);return o.push(...s),!o.includes(r["component-name"])}).map(r=>({value:r,label:r.name})),d=await new Promise((r,o)=>{const f=c.filter(g=>s.includes(g["component-name"]));Popup.show(Fe,{value:f,resolve:r,reject:o,type:"multiselect",options:c,label:_("Choose Widget"),description:_("Select with widget you want to add to the column.")})}),n=this.columns.indexOf(e);this.columns[n].widgets=[...this.columns[n].widgets,...d].map((r,o)=>(r.position=o,r.column=e.name,r)),this.handleChange(this.columns[n])}catch(t){console.log(t)}}}},ta={class:"flex md:-mx-2 flex-wrap"},sa=["column-name"],na=["onClick"],la={class:"text-sm text-primary",type:"info"};function ia(e,t,s,c,d,n){const r=w("ns-draggable"),o=w("ns-dropzone");return i(),a("div",ta,[(i(!0),a(p,null,C(d.columns,(f,g)=>(i(),a("div",{class:"w-full md:px-2 md:w-1/2 lg:w-1/3 xl:1/4","column-name":f.name,key:f.name},[(i(!0),a(p,null,C(f.widgets,b=>(i(),E(o,null,{default:M(()=>[T(r,{"component-name":b["component-name"],onDragEnd:t[0]||(t[0]=S=>n.handleEndDragging(S)),widget:b},{default:M(()=>[(i(),E(W(b.component),{onOnRemove:S=>n.handleRemoveWidget(b,f),widget:b},null,40,["onOnRemove","widget"]))]),_:2},1032,["component-name","widget"])]),_:2},1024))),256)),n.hasUnusedWidgets?(i(),a("div",{key:0,onClick:b=>n.openWidgetAdded(f),class:"widget-placeholder cursor-pointer border-2 border-dashed h-16 flex items-center justify-center"},[l("span",la,h(n.__("Click here to add widgets")),1)],8,na)):u("",!0)],8,sa))),128))])}const aa=D(ea,[["render",ia],["__scopeId","data-v-8fa76ad4"]]),ra={emits:["blur","change","saved","keypress"],data:()=>({}),mounted(){},components:{nsDateRangePicker:ge,nsDateTimePicker:be,nsSwitch:ue},computed:{isInputField(){return["text","password","email","number","tel"].includes(this.field.type)},isHiddenField(){return["hidden"].includes(this.field.type)},isDateField(){return["date"].includes(this.field.type)},isSelectField(){return["select"].includes(this.field.type)},isSearchField(){return["search-select"].includes(this.field.type)},isTextarea(){return["textarea"].includes(this.field.type)},isCheckbox(){return["checkbox"].includes(this.field.type)},isMultiselect(){return["multiselect"].includes(this.field.type)},isInlineMultiselect(){return["inline-multiselect"].includes(this.field.type)},isSelectAudio(){return["select-audio"].includes(this.field.type)},isSwitch(){return["switch"].includes(this.field.type)},isMedia(){return["media"].includes(this.field.type)},isCkEditor(){return["ckeditor"].includes(this.field.type)},isDateTimePicker(){return["datetimepicker"].includes(this.field.type)},isDateRangePicker(){return["daterangepicker"].includes(this.field.type)},isCustom(){return["custom"].includes(this.field.type)}},props:["field"],methods:{handleSaved(e,t){this.$emit("saved",t)},addOption(e){this.field.type==="select"&&this.field.options.forEach(s=>s.selected=!1),e.selected=!0;const t=this.field.options.indexOf(e);this.field.options.splice(t,1),this.field.options.unshift(e),this.refreshMultiselect(),this.$emit("change",{action:"addOption",option:e})},changeTouchedState(e,t){t.stopPropagation&&t.stopPropagation(),e.touched=!0,this.$emit("change",e)},refreshMultiselect(){this.field.value=this.field.options.filter(e=>e.selected).map(e=>e.value)},removeOption(e){e.selected=!1,this.refreshMultiselect(),this.$emit("change",{action:"removeOption",option:e})}}},da=["name","value"],oa={key:1,class:"flex flex-auto mb-2"},ua=["innerHTML"],ca=["innerHTML"],ha=["innerHTML"],fa=["innerHTML"],ma=["innerHTML"],ga=["innerHTML"],ba=["innerHTML"],_a=["innerHTML"],pa=["innerHTML"],ya=["innerHTML"],va=["innerHTML"],ka=["innerHTML"],wa=["innerHTML"],xa=["innerHTML"];function Da(e,t,s,c,d,n){const r=w("ns-input"),o=w("ns-date-time-picker"),f=w("ns-date"),g=w("ns-media-input"),b=w("ns-select"),S=w("ns-search-select"),R=w("ns-daterange-picker"),P=w("ns-select-audio"),O=w("ns-textarea"),V=w("ns-checkbox"),Q=w("ns-inline-multiselect"),A=w("ns-multiselect"),B=w("ns-ckeditor"),I=w("ns-switch");return i(),a(p,null,[n.isHiddenField?(i(),a("input",{key:0,type:"hidden",name:s.field.name,value:s.field.value},null,8,da)):u("",!0),n.isHiddenField?u("",!0):(i(),a("div",oa,[n.isInputField?(i(),E(r,{key:0,onKeypress:t[0]||(t[0]=k=>n.changeTouchedState(s.field,k)),onChange:t[1]||(t[1]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,ua)]),_:1},8,["field"])):u("",!0),n.isDateTimePicker?(i(),E(o,{key:1,onBlur:t[2]||(t[2]=k=>e.$emit("blur",s.field)),onChange:t[3]||(t[3]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,ca)]),_:1},8,["field"])):u("",!0),n.isDateField?(i(),E(f,{key:2,onBlur:t[4]||(t[4]=k=>e.$emit("blur",s.field)),onChange:t[5]||(t[5]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,ha)]),_:1},8,["field"])):u("",!0),n.isMedia?(i(),E(g,{key:3,onBlur:t[6]||(t[6]=k=>e.$emit("blur",s.field)),onChange:t[7]||(t[7]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,fa)]),_:1},8,["field"])):u("",!0),n.isSelectField?(i(),E(b,{key:4,onChange:t[8]||(t[8]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,ma)]),_:1},8,["field"])):u("",!0),n.isSearchField?(i(),E(S,{key:5,field:s.field,onSaved:t[9]||(t[9]=k=>n.handleSaved(s.field,k)),onChange:t[10]||(t[10]=k=>n.changeTouchedState(s.field,k))},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,ga)]),_:1},8,["field"])):u("",!0),n.isDateRangePicker?(i(),E(R,{key:6,onBlur:t[11]||(t[11]=k=>e.$emit("blur",s.field)),onChange:t[12]||(t[12]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,ba)]),_:1},8,["field"])):u("",!0),n.isSelectAudio?(i(),E(P,{key:7,onBlur:t[13]||(t[13]=k=>e.$emit("blur",s.field)),onChange:t[14]||(t[14]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,_a)]),_:1},8,["field"])):u("",!0),n.isTextarea?(i(),E(O,{key:8,onBlur:t[15]||(t[15]=k=>e.$emit("blur",s.field)),onChange:t[16]||(t[16]=k=>n.changeTouchedState(s.field,k)),field:s.field},{description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,pa)]),default:M(()=>[l("template",null,[v(h(s.field.label),1)])]),_:1},8,["field"])):u("",!0),n.isCheckbox?(i(),E(V,{key:9,onBlur:t[17]||(t[17]=k=>e.$emit("blur",s.field)),onChange:t[18]||(t[18]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,ya)]),_:1},8,["field"])):u("",!0),n.isInlineMultiselect?(i(),E(Q,{key:10,onBlur:t[19]||(t[19]=k=>e.$emit("blur",s.field)),onUpdate:t[20]||(t[20]=k=>n.changeTouchedState(s.field,k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,va)]),_:1},8,["field"])):u("",!0),n.isMultiselect?(i(),E(A,{key:11,onAddOption:t[21]||(t[21]=k=>n.addOption(k)),onRemoveOption:t[22]||(t[22]=k=>n.removeOption(k)),field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,ka)]),_:1},8,["field"])):u("",!0),n.isCkEditor?(i(),E(B,{key:12,field:s.field},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,wa)]),_:1},8,["field"])):u("",!0),n.isSwitch?(i(),E(I,{key:13,field:s.field,onChange:t[23]||(t[23]=k=>n.changeTouchedState(s.field,k))},{default:M(()=>[v(h(s.field.label),1)]),description:M(()=>[l("span",{innerHTML:s.field.description||""},null,8,xa)]),_:1},8,["field"])):u("",!0),n.isCustom?(i(),E(Me,{key:14},[(i(),E(W(s.field.component),{field:s.field,onBlur:t[24]||(t[24]=k=>e.$emit("blur",s.field)),onChange:t[25]||(t[25]=k=>n.changeTouchedState(s.field,k))},null,40,["field"]))],1024)):u("",!0)]))],64)}const Ca=D(ra,[["render",Da]]),Ma={name:"ns-field-detail",props:["field"],methods:{__:_}},Ta={key:0,class:"text-xs ns-description"};function Sa(e,t,s,c,d,n){return i(),a(p,null,[!s.field.errors||s.field.errors.length===0?(i(),a("p",Ta,h(s.field.description),1)):u("",!0),(i(!0),a(p,null,C(s.field.errors,(r,o)=>(i(),a("p",{key:o,class:"text-xs ns-error"},[r.identifier==="required"?y(e.$slots,r.identifier,{key:0},()=>[v(h(n.__("This field is required.")),1)]):u("",!0),r.identifier==="email"?y(e.$slots,r.identifier,{key:1},()=>[v(h(n.__("This field must contain a valid email address.")),1)]):u("",!0),r.identifier==="invalid"?y(e.$slots,r.identifier,{key:2},()=>[v(h(r.message),1)]):u("",!0),r.identifier==="same"?y(e.$slots,r.identifier,{key:3},()=>[v(h(n.__('This field must be similar to "{other}""').replace("{other}",r.fields.filter(f=>f.name===r.rule.value)[0].label)),1)]):u("",!0),r.identifier==="min"?y(e.$slots,r.identifier,{key:4},()=>[v(h(n.__('This field must have at least "{length}" characters"').replace("{length}",r.rule.value)),1)]):u("",!0),r.identifier==="max"?y(e.$slots,r.identifier,{key:5},()=>[v(h(n.__('This field must have at most "{length}" characters"').replace("{length}",r.rule.value)),1)]):u("",!0),r.identifier==="different"?y(e.$slots,r.identifier,{key:6},()=>[v(h(n.__('This field must be different from "{other}""').replace("{other}",r.fields.filter(f=>f.name===r.rule.value)[0].label)),1)]):u("",!0)]))),128))],64)}const $a=D(Ma,[["render",Sa]]),Ea={props:["className","buttonClass","type"]};function Fa(e,t,s,c,d,n){return i(),a("button",{class:m([s.type?s.type:s.buttonClass,"ns-inset-button rounded-full h-8 w-8 border items-center justify-center"])},[l("i",{class:m([s.className,"las"])},null,2)],2)}const Ra=D(Ea,[["render",Fa]]),Oa={name:"ns-input-label",props:["field"],data(){return{tags:[],searchField:"",focused:!1,optionsToKeyValue:{}}},methods:{addOption(e){let t;this.optionSuggestions.length===1&&e===void 0?t=this.optionSuggestions[0]:e!==void 0&&(t=e),t!==void 0&&(this.field.value.filter(c=>c===t.value).length>0||(this.searchField="",this.field.value.push(t.value),this.$emit("change",this.field)))},removeOption(e){const t=this.field.value.filter(s=>s!==e);this.field.value=t}},mounted(){if(this.$refs.searchField.addEventListener("focus",e=>{this.focused=!0}),this.$refs.searchField.addEventListener("blur",e=>{setTimeout(()=>{this.focused=!1},200)}),this.field.value.length===void 0)try{this.field.value=JSON.parse(this.field.value)}catch{this.field.value=[]}this.field.options.forEach(e=>{this.optionsToKeyValue[e.value]=e.label})},computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},optionSuggestions(){if(typeof this.field.value.map=="function"){const e=this.field.value.map(t=>t.value);return this.field.options.filter(t=>!e.includes(t.value)&&this.focused>0&&(t.label.search(this.searchField)>-1||t.value.search(this.searchField)>-1))}return[]},disabledClass(){return this.field.disabled?"ns-disabled cursor-not-allowed":""},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":""}},props:["placeholder","leading","type","field"]},Pa={class:"flex flex-col mb-2 flex-auto ns-input"},ja=["for"],Aa={key:0,class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},Ua={class:"leading sm:text-sm sm:leading-5"},Ha=["disabled","id","type","placeholder"],La={class:"rounded shadow bg-box-elevation-hover flex mr-1 mb-1"},Ya={class:"p-2 flex items-center text-primary"},Va={class:"flex items-center justify-center px-2"},Ba=["onClick"],Ia=l("i",{class:"las la-times-circle"},null,-1),Na=[Ia],za={class:"relative"},qa=["placeholder"],Wa={class:"h-0 absolute w-full z-10"},Ga={class:"shadow bg-box-background absoluve bottom-0 w-full max-h-80 overflow-y-auto"},Ka=["onClick"];function Qa(e,t,s,c,d,n){const r=w("ns-field-description");return i(),a("div",Pa,[s.field.label&&s.field.label.length>0?(i(),a("label",{key:0,for:s.field.name,class:m([n.hasError?"has-error":"is-pristine","block leading-5 font-medium"])},[y(e.$slots,"default")],10,ja)):u("",!0),l("div",{class:m([(n.hasError?"has-error":"is-pristine")+" "+(s.field.description||s.field.errors>0?"mb-2":""),"mt-1 relative border-2 rounded-md focus:shadow-sm"])},[s.leading?(i(),a("div",Aa,[l("span",Ua,h(s.leading),1)])):u("",!0),l("div",{disabled:s.field.disabled,id:s.field.name,type:s.field.type,class:m([n.inputClass,"flex sm:text-sm sm:leading-5 p-1 flex-wrap"]),placeholder:s.field.placeholder||""},[(i(!0),a(p,null,C(s.field.value,o=>(i(),a("div",La,[l("div",Ya,h(d.optionsToKeyValue[o]),1),l("div",Va,[l("div",{onClick:f=>n.removeOption(o),class:"cursor-pointer rounded-full bg-error-tertiary h-5 w-5 flex items-center justify-center"},Na,8,Ba)])]))),256)),l("div",za,[F(l("input",{onChange:t[0]||(t[0]=o=>o.stopPropagation()),onKeydown:t[1]||(t[1]=Y(o=>n.addOption(),["enter"])),ref:"searchField","onUpdate:modelValue":t[2]||(t[2]=o=>d.searchField=o),type:"text",class:"w-auto p-2 border-b border-dashed bg-transparent",placeholder:s.field.placeholder||"Start searching here..."},null,40,qa),[[j,d.searchField]]),l("div",Wa,[l("div",Ga,[l("ul",null,[(i(!0),a(p,null,C(n.optionSuggestions,o=>(i(),a("li",{onClick:f=>n.addOption(o),class:"p-2 hover:bg-box-elevation-hover text-primary cursor-pointer"},h(o.label),9,Ka))),256))])])])])],10,Ha)],2),T(r,{field:s.field},null,8,["field"])])}const Za=D(Oa,[["render",Qa]]),Xa={data:()=>({}),mounted(){},computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"ns-disabled cursor-not-allowed":""},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"}},props:["placeholder","leading","type","field"]},Ja={class:"flex flex-col mb-2 flex-auto ns-input"},er=["for"],tr={key:0,class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},sr={class:"leading sm:text-sm sm:leading-5"},nr=["disabled","id","type","placeholder"];function lr(e,t,s,c,d,n){const r=w("ns-field-description");return i(),a("div",Ja,[s.field.label&&s.field.label.length>0?(i(),a("label",{key:0,for:s.field.name,class:m([n.hasError?"has-error":"is-pristine","block leading-5 font-medium"])},[y(e.$slots,"default")],10,er)):u("",!0),l("div",{class:m([(n.hasError?"has-error":"is-pristine")+" "+(s.field.description||s.field.errors>0?"mb-2":""),"mt-1 relative overflow-hidden border-2 rounded-md focus:shadow-sm"])},[s.leading?(i(),a("div",tr,[l("span",sr,h(s.leading),1)])):u("",!0),F(l("input",{disabled:s.field.disabled,"onUpdate:modelValue":t[0]||(t[0]=o=>s.field.value=o),id:s.field.name,type:s.type||s.field.type||"text",class:m([n.inputClass,"block w-full sm:text-sm sm:leading-5 h-10"]),placeholder:s.field.placeholder||""},null,10,nr),[[oe,s.field.value]])],2),T(r,{field:s.field},null,8,["field"])])}const ir=D(Xa,[["render",lr]]),ar={data:()=>({clicked:!1,_save:0}),props:["type","to","href","target"],computed:{buttonclass(){switch(this.type){case"info":return"shadow bg-blue-400 text-white";case"success":return"shadow bg-green-400 text-white";case"error":return"shadow bg-red-400 text-white";case"warning":return"shadow bg-orange-400 text-white";default:return"shadow bg-white text-gray-800"}}}},rr={class:"flex"},dr=["target","href"];function or(e,t,s,c,d,n){return i(),a("div",rr,[s.href?(i(),a("a",{key:0,target:s.target,href:s.href,class:m([n.buttonclass,"rounded cursor-pointer py-2 px-3 font-semibold"])},[y(e.$slots,"default")],10,dr)):u("",!0)])}const ur=D(ar,[["render",or]]),_e={zip:"la-file-archive",tar:"la-file-archive",bz:"la-file-archive","7z":"la-file-archive",css:"la-file-code",js:"la-file-code",json:"la-file-code",docx:"la-file-word",doc:"la-file-word",mp3:"la-file-audio",aac:"la-file-audio",ods:"la-file-audio",pdf:"la-file-pdf",csv:"la-file-csv",avi:"la-file-video",mpeg:"la-file-video",mpkg:"la-file-video",unknown:"la-file"},cr={name:"ns-media",props:["popup"],data(){return{searchFieldDebounce:null,searchField:"",pages:[{label:_("Upload"),name:"upload",selected:!1},{label:_("Gallery"),name:"gallery",selected:!0}],resources:[],isDragging:!1,response:{data:[],current_page:0,from:0,to:0,next_page_url:"",prev_page_url:"",path:"",per_page:0,total:0,last_page:0,first_page:0},fileIcons:_e,queryPage:1,bulkSelect:!1,files:[]}},mounted(){this.popupCloser();const e=this.pages.filter(t=>t.name==="gallery")[0];this.select(e)},watch:{searchField(){clearTimeout(this.searchFieldDebounce),this.searchFieldDebounce=setTimeout(()=>{this.loadGallery(1)},500)},files:{handler(){this.uploadFiles()},deep:!0}},computed:{postMedia(){return de.applyFilters("http-client-url","/api/medias")},currentPage(){return this.pages.filter(e=>e.selected)[0]},hasOneSelected(){return this.response.data.filter(e=>e.selected).length>0},selectedResource(){return this.response.data.filter(e=>e.selected)[0]},csrf(){return ns.authentication.csrf},isPopup(){return typeof this.popup<"u"},user_id(){return this.isPopup&&this.popup.params.user_id||0},panelOpened(){return!this.bulkSelect&&this.hasOneSelected},popupInstance(){return this.popup}},methods:{popupCloser:ae,__:_,cancelBulkSelect(){this.bulkSelect=!1,this.response.data.forEach(e=>e.selected=!1)},openError(e){L.show(se,{title:_("An error occured"),message:e.error.message||_("An unexpected error occured.")})},deleteSelected(){L.show(G,{title:_("Confirm Your Action"),message:_("You're about to delete selected resources. Would you like to proceed?"),onAction:e=>{e&&H.post("/api/medias/bulk-delete",{ids:this.response.data.filter(t=>t.selected).map(t=>t.id)}).subscribe({next:t=>{$.success(t.message).subscribe(),this.loadGallery()},error:t=>{$.error(t.message).subscribe()}})}})},loadUploadScreen(){setTimeout(()=>{this.setDropZone()},1e3)},setDropZone(){const e=document.getElementById("dropping-zone");e.addEventListener("dragenter",s=>this.preventDefaults(s),!1),e.addEventListener("dragleave",s=>this.preventDefaults(s),!1),e.addEventListener("dragover",s=>this.preventDefaults(s),!1),e.addEventListener("drop",s=>this.preventDefaults(s),!1),["dragenter","dragover"].forEach(s=>{e.addEventListener(s,()=>{this.isDragging=!0})}),["dragleave","drop"].forEach(s=>{e.addEventListener(s,()=>{this.isDragging=!1})}),e.addEventListener("drop",s=>this.handleDrop(s),!1),this.$refs.files.addEventListener("change",s=>this.processFiles(s.currentTarget.files))},async uploadFiles(){const e=this.files.filter(t=>t.uploaded===!1&&t.progress===0&&t.failed===!1);for(let t=0;t{const r=new FormData;r.append("file",s.file),H.post("/api/medias",r,{headers:{"Content-Type":"multipart/form-data"}}).subscribe({next:o=>{s.uploaded=!0,s.progress=100,d(o)},error:o=>{e[t].failed=!0,e[t].error=o}})})}catch{s.failed=!0}}},handleDrop(e){this.processFiles(e.dataTransfer.files),e.preventDefault(),e.stopPropagation()},preventDefaults(e){e.preventDefault(),e.stopPropagation()},getAllParents(e){let t=[];for(;e.parentNode&&e.parentNode.nodeName.toLowerCase()!="body";)e=e.parentNode,t.push(e);return t},triggerManualUpload(e){const t=e.target;if(t!==null){const c=this.getAllParents(t).map(d=>{const n=d.getAttribute("class");if(n)return n.split(" ")});if(t.getAttribute("class")){const d=t.getAttribute("class").split(" ");c.push(d)}c.flat().includes("ns-scrollbar")||this.$refs.files.click()}},processFiles(e){Array.from(e).filter(c=>(console.log(this),Object.values(window.ns.medias.mimes).includes(c.type))).forEach(c=>{this.files.unshift({file:c,uploaded:!1,failed:!1,progress:0})})},select(e){this.pages.forEach(t=>t.selected=!1),e.selected=!0,e.name==="gallery"?this.loadGallery():e.name==="upload"&&this.loadUploadScreen()},loadGallery(e=null){e=e===null?this.queryPage:e,this.queryPage=e,H.get(`/api/medias?page=${e}&user_id=${this.user_id}${this.searchField.length>0?`&search=${this.searchField}`:""}`).subscribe(t=>{t.data.forEach(s=>s.selected=!1),this.response=t})},submitChange(e,t){H.put(`/api/medias/${t.id}`,{name:e.srcElement.textContent}).subscribe({next:s=>{t.fileEdit=!1,$.success(s.message,"OK").subscribe()},error:s=>{t.fileEdit=!1,$.success(s.message||_("An unexpected error occured."),"OK").subscribe()}})},useSelectedEntries(){this.popup.params.resolve({event:"use-selected",value:this.response.data.filter(e=>e.selected)}),this.popup.close()},selectResource(e){this.bulkSelect||this.response.data.forEach((t,s)=>{s!==this.response.data.indexOf(e)&&(t.selected=!1)}),e.fileEdit=!1,e.selected=!e.selected},isImage(e){return Object.keys(ns.medias.imageMimes).includes(e.extension)}}},hr={class:"sidebar w-48 md:h-full flex-shrink-0"},fr={class:"text-xl font-bold my-4 text-center"},mr={class:"sidebar-menus flex md:block mt-8"},gr=["onClick"],br={key:0,class:"content flex-auto w-full flex-col overflow-hidden flex"},_r={key:0,class:"p-2 flex bg-box-background flex-shrink-0 justify-between"},pr=l("div",null,null,-1),yr={class:"cursor-pointer text-lg md:text-xl font-bold text-center text-primary mb-4"},vr={style:{display:"none"},type:"file",name:"",multiple:"",ref:"files",id:""},kr={class:"rounded bg-box-background shadow w-full md:w-2/3 text-primary h-56 overflow-y-auto ns-scrollbar p-2"},wr={key:0},xr={key:0,class:"rounded bg-info-primary flex items-center justify-center text-xs p-2"},Dr=["onClick"],Cr=l("i",{class:"las la-eye"},null,-1),Mr={class:"ml-2"},Tr={key:1,class:"h-full w-full items-center justify-center flex text-center text-soft-tertiary"},Sr={key:1,class:"content flex-auto flex-col w-full overflow-hidden flex"},$r={key:0,class:"p-2 flex bg-box-background flex-shrink-0 justify-between"},Er=l("div",null,null,-1),Fr={class:"flex flex-auto overflow-hidden"},Rr={class:"shadow ns-grid flex flex-auto flex-col overflow-y-auto ns-scrollbar"},Or={class:"p-2 border-b border-box-background"},Pr={class:"ns-input border-2 rounded border-input-edge bg-input-background flex"},jr=["placeholder"],Ar={key:0,class:"flex items-center justify-center w-20 p-1"},Ur={class:"flex flex-auto"},Hr={class:"p-2 overflow-x-auto"},Lr={class:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5"},Yr={class:"p-2"},Vr=["onClick"],Br=["src","alt"],Ir={key:1,class:"object-cover h-full flex items-center justify-center"},Nr={key:0,class:"flex flex-auto items-center justify-center"},zr={class:"text-2xl font-bold"},qr={id:"preview",class:"ns-media-preview-panel hidden lg:block w-64 flex-shrink-0"},Wr={key:0,class:"h-64 bg-gray-800 flex items-center justify-center"},Gr=["src","alt"],Kr={key:1,class:"object-cover h-full flex items-center justify-center"},Qr={key:1,id:"details",class:"p-4 text-gray-700 text-sm"},Zr={class:"flex flex-col mb-2"},Xr={class:"font-bold block"},Jr=["contenteditable"],ed={class:"flex flex-col mb-2"},td={class:"font-bold block"},sd={class:"flex flex-col mb-2"},nd={class:"font-bold block"},ld={class:"py-2 pr-2 flex ns-media-footer flex-shrink-0 justify-between"},id={class:"flex -mx-2 flex-shrink-0"},ad={key:0,class:"px-2"},rd={class:"ns-button shadow rounded overflow-hidden info"},dd=l("i",{class:"las la-times"},null,-1),od={key:1,class:"px-2"},ud={class:"ns-button shadow rounded overflow-hidden info"},cd=l("i",{class:"las la-check-circle"},null,-1),hd={key:2,class:"px-2"},fd={class:"ns-button shadow rounded overflow-hidden warning"},md=l("i",{class:"las la-trash"},null,-1),gd={class:"flex-shrink-0 -mx-2 flex"},bd={class:"px-2"},_d={class:"rounded shadow overflow-hidden flex text-sm"},pd=["disabled"],yd=l("hr",{class:"border-r border-gray-700"},null,-1),vd=["disabled"],kd={key:0,class:"px-2"},wd={class:"ns-button info"};function xd(e,t,s,c,d,n){const r=w("ns-close-button");return i(),a("div",{class:m(["flex md:flex-row flex-col ns-box shadow-xl overflow-hidden",n.isPopup?"w-6/7-screen h-6/7-screen":"w-full h-full"]),id:"ns-media"},[l("div",hr,[l("h3",fr,h(n.__("Medias Manager")),1),l("ul",mr,[(i(!0),a(p,null,C(d.pages,(o,f)=>(i(),a("li",{onClick:g=>n.select(o),class:m(["py-2 px-3 cursor-pointer border-l-8",o.selected?"active":""]),key:f},h(o.label),11,gr))),128))])]),n.currentPage.name==="upload"?(i(),a("div",br,[n.isPopup?(i(),a("div",_r,[pr,l("div",null,[T(r,{onClick:t[0]||(t[0]=o=>n.popupInstance.close())})])])):u("",!0),l("div",{id:"dropping-zone",onClick:t[1]||(t[1]=o=>n.triggerManualUpload(o)),class:m([d.isDragging?"border-dashed border-2":"","flex flex-auto m-2 p-2 flex-col border-info-primary items-center justify-center"])},[l("h3",yr,h(n.__("Click Here Or Drop Your File To Upload")),1),l("input",vr,null,512),l("div",kr,[d.files.length>0?(i(),a("ul",wr,[(i(!0),a(p,null,C(d.files,(o,f)=>(i(),a("li",{class:m([o.failed===!1?"border-info-secondary":"border-error-secondary","p-2 mb-2 border-b-2 flex items-center justify-between"]),key:f},[l("span",null,h(o.file.name),1),o.failed===!1?(i(),a("span",xr,h(o.progress)+"%",1)):u("",!0),o.failed===!0?(i(),a("div",{key:1,onClick:g=>n.openError(o),class:"rounded bg-error-primary hover:bg-error-secondary hover:text-white flex items-center justify-center text-xs p-2 cursor-pointer"},[Cr,v(),l("span",Mr,h(n.__("See Error")),1)],8,Dr)):u("",!0)],2))),128))])):u("",!0),d.files.length===0?(i(),a("div",Tr,h(n.__("Your uploaded files will displays here.")),1)):u("",!0)])],2)])):u("",!0),n.currentPage.name==="gallery"?(i(),a("div",Sr,[n.isPopup?(i(),a("div",$r,[Er,l("div",null,[T(r,{onClick:t[2]||(t[2]=o=>n.popupInstance.close())})])])):u("",!0),l("div",Fr,[l("div",Rr,[l("div",Or,[l("div",Pr,[F(l("input",{id:"search",type:"text","onUpdate:modelValue":t[3]||(t[3]=o=>d.searchField=o),placeholder:n.__("Search Medias"),class:"px-4 block w-full sm:text-sm sm:leading-5 h-10"},null,8,jr),[[j,d.searchField]]),d.searchField.length>0?(i(),a("div",Ar,[l("button",{onClick:t[4]||(t[4]=o=>d.searchField=""),class:"h-full w-full rounded-tr rounded-br overflow-hidden"},h(n.__("Cancel")),1)])):u("",!0)])]),l("div",Ur,[l("div",Hr,[l("div",Lr,[(i(!0),a(p,null,C(d.response.data,(o,f)=>(i(),a("div",{key:f,class:""},[l("div",Yr,[l("div",{onClick:g=>n.selectResource(o),class:m([o.selected?"ns-media-image-selected ring-4":"","rounded-lg aspect-square bg-gray-500 m-2 overflow-hidden flex items-center justify-center"])},[n.isImage(o)?(i(),a("img",{key:0,class:"object-cover h-full",src:o.sizes.thumb,alt:o.name},null,8,Br)):u("",!0),n.isImage(o)?u("",!0):(i(),a("div",Ir,[l("i",{class:m([d.fileIcons[o.extension]||d.fileIcons.unknown,"las text-8xl text-white"])},null,2)]))],10,Vr)])]))),128))])]),d.response.data.length===0?(i(),a("div",Nr,[l("h3",zr,h(n.__("Nothing has already been uploaded")),1)])):u("",!0)])]),l("div",qr,[n.panelOpened?(i(),a("div",Wr,[n.isImage(n.selectedResource)?(i(),a("img",{key:0,class:"object-cover h-full",src:n.selectedResource.sizes.thumb,alt:n.selectedResource.name},null,8,Gr)):u("",!0),n.isImage(n.selectedResource)?u("",!0):(i(),a("div",Kr,[l("i",{class:m([d.fileIcons[n.selectedResource.extension]||d.fileIcons.unknown,"las text-8xl text-white"])},null,2)]))])):u("",!0),n.panelOpened?(i(),a("div",Qr,[l("p",Zr,[l("strong",Xr,h(n.__("File Name"))+": ",1),l("span",{class:m(["p-2",n.selectedResource.fileEdit?"border-b border-input-edge bg-input-background":""]),onBlur:t[5]||(t[5]=o=>n.submitChange(o,n.selectedResource)),contenteditable:n.selectedResource.fileEdit?"true":"false",onClick:t[6]||(t[6]=o=>n.selectedResource.fileEdit=!0)},h(n.selectedResource.name),43,Jr)]),l("p",ed,[l("strong",td,h(n.__("Uploaded At"))+":",1),l("span",null,h(n.selectedResource.created_at),1)]),l("p",sd,[l("strong",nd,h(n.__("By"))+" :",1),l("span",null,h(n.selectedResource.user.username),1)])])):u("",!0)])]),l("div",ld,[l("div",id,[d.bulkSelect?(i(),a("div",ad,[l("div",rd,[l("button",{onClick:t[7]||(t[7]=o=>n.cancelBulkSelect()),class:"py-2 px-3"},[dd,v(" "+h(n.__("Cancel")),1)])])])):u("",!0),n.hasOneSelected&&!d.bulkSelect?(i(),a("div",od,[l("div",ud,[l("button",{onClick:t[8]||(t[8]=o=>d.bulkSelect=!0),class:"py-2 px-3"},[cd,v(" "+h(n.__("Bulk Select")),1)])])])):u("",!0),n.hasOneSelected?(i(),a("div",hd,[l("div",fd,[l("button",{onClick:t[9]||(t[9]=o=>n.deleteSelected()),class:"py-2 px-3"},[md,v(" "+h(n.__("Delete")),1)])])])):u("",!0)]),l("div",gd,[l("div",bd,[l("div",_d,[l("div",{class:m(["ns-button",d.response.current_page===1?"disabled cursor-not-allowed":"info"])},[l("button",{disabled:d.response.current_page===1,onClick:t[10]||(t[10]=o=>n.loadGallery(d.response.current_page-1)),class:"p-2"},h(n.__("Previous")),9,pd)],2),yd,l("div",{class:m(["ns-button",d.response.current_page===d.response.last_page?"disabled cursor-not-allowed":"info"])},[l("button",{disabled:d.response.current_page===d.response.last_page,onClick:t[11]||(t[11]=o=>n.loadGallery(d.response.current_page+1)),class:"p-2"},h(n.__("Next")),9,vd)],2)])]),n.isPopup&&n.hasOneSelected?(i(),a("div",kd,[l("div",wd,[l("button",{class:"rounded shadow p-2 text-sm",onClick:t[12]||(t[12]=o=>n.useSelectedEntries())},h(n.__("Use Selected")),1)])])):u("",!0)])])])):u("",!0)],2)}const pe=D(cr,[["render",xd]]),_c=Object.freeze(Object.defineProperty({__proto__:null,default:pe},Symbol.toStringTag,{value:"Module"})),Dd={computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"ns-disabled cursor-not-allowed":"ns-enabled"},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"}},data(){return{fileIcons:_e}},props:["placeholder","leading","type","field"],mounted(){},methods:{isImage(e){return Object.keys(ns.medias.imageMimes).includes(e.extension)},toggleMedia(){new Promise((t,s)=>{L.show(pe,{resolve:t,reject:s,...this.field.data||{}})}).then(t=>{t.event==="use-selected"&&(!this.field.data||this.field.data.type==="url"?this.field.value=t.value[0].sizes.original:!this.field.data||this.field.data.type==="model"?(this.field.value=t.value[0].id,this.field.data.model=t.value[0]):this.field.value=t.value[0].sizes.original,this.$forceUpdate())})}}},Cd={class:"flex flex-col mb-2 flex-auto ns-media"},Md=["for"],Td={key:0,class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},Sd={class:"text-primary sm:text-sm sm:leading-5"},$d={class:"rounded overflow-hidden flex"},Ed={key:0,class:"form-input flex w-full sm:text-sm items-center sm:leading-5 h-10"},Fd=["src","alt"],Rd={key:1,class:"object-cover flex items-center justify-center"},Od={class:"text-xs text-secondary"},Pd=["disabled","id","type","placeholder"],jd=l("i",{class:"las la-photo-video"},null,-1),Ad=[jd];function Ud(e,t,s,c,d,n){const r=w("ns-field-description");return i(),a("div",Cd,[l("label",{for:s.field.name,class:m([n.hasError?"has-error":"is-pristine","block leading-5 font-medium"])},[y(e.$slots,"default")],10,Md),l("div",{class:m([n.hasError?"has-error":"is-pristine","mt-1 relative border-2 rounded-md focus:shadow-sm"])},[s.leading?(i(),a("div",Td,[l("span",Sd,h(s.leading),1)])):u("",!0),l("div",$d,[s.field.data&&s.field.data.type==="model"?(i(),a("div",Ed,[s.field.value&&s.field.data.model.name?(i(),a(p,{key:0},[n.isImage(s.field.data.model)?(i(),a("img",{key:0,class:"w-8 h-8 m-1",src:s.field.data.model.sizes.thumb,alt:s.field.data.model.name},null,8,Fd)):u("",!0),n.isImage(s.field.data.model)?u("",!0):(i(),a("div",Rd,[l("i",{class:m([d.fileIcons[s.field.data.model.extension]||d.fileIcons.unknown,"las text-3xl"])},null,2)])),l("span",Od,h(s.field.data.model.name),1)],64)):u("",!0)])):u("",!0),!s.field.data||s.field.data.type==="undefined"||s.field.data.type==="url"?F((i(),a("input",{key:1,"onUpdate:modelValue":t[0]||(t[0]=o=>s.field.value=o),disabled:s.field.disabled,onBlur:t[1]||(t[1]=o=>e.$emit("blur",this)),onChange:t[2]||(t[2]=o=>e.$emit("change",this)),id:s.field.name,type:s.type||s.field.type||"text",class:m([n.inputClass,"form-input block w-full sm:text-sm sm:leading-5 h-10"]),placeholder:s.placeholder},null,42,Pd)),[[oe,s.field.value]]):u("",!0),l("button",{onClick:t[3]||(t[3]=o=>n.toggleMedia(s.field)),class:"w-10 h-10 flex items-center justify-center border-l-2 outline-none"},Ad)])],2),T(r,{field:s.field},null,8,["field"])])}const Hd=D(Dd,[["render",Ud]]),Ld={data:()=>({defaultToggledState:!1,_save:0,hasChildren:!1}),props:["href","to","label","icon","notification","toggled","identifier"],mounted(){this.hasChildren=this.$el.querySelectorAll(".submenu").length>0,this.defaultToggledState=this.toggled!==void 0?this.toggled:this.defaultToggledState,q.subject().subscribe(e=>{e.value!==this.identifier&&(this.defaultToggledState=!1)})},methods:{toggleEmit(){this.toggle().then(e=>{e&&q.emit({identifier:"side-menu.open",value:this.identifier})})},goTo(e,t){return this.$router.push(e),t.preventDefault(),!1},toggle(){return new Promise((e,t)=>{(!this.href||this.href.length===0)&&(this.defaultToggledState=!this.defaultToggledState,e(this.defaultToggledState))})}}},Yd=["href"],Vd={class:"flex items-center"},Bd={key:0,class:"rounded-full notification-label font-bold w-6 h-6 text-xs justify-center items-center flex"},Id=["href"],Nd={class:"flex items-center"},zd={key:0,class:"rounded-full notification-label font-bold w-6 h-6 text-xs justify-center items-center flex"};function qd(e,t,s,c,d,n){var r,o;return i(),a("div",null,[s.to&&!e.hasChildren?(i(),a("a",{key:0,onClick:t[0]||(t[0]=f=>n.goTo(s.to,f)),href:s.to,class:m([e.defaultToggledState?"toggled":"normal","flex justify-between py-2 border-l-8 px-3 font-bold ns-aside-menu"])},[l("span",Vd,[l("i",{class:m(["las text-lg mr-2",((r=s.icon)==null?void 0:r.length)>0?s.icon:"la-star"])},null,2),v(" "+h(s.label),1)]),s.notification>0?(i(),a("span",Bd,h(s.notification),1)):u("",!0)],10,Yd)):(i(),a("a",{key:1,onClick:t[1]||(t[1]=f=>n.toggleEmit()),href:s.href||"javascript:void(0)",class:m([e.defaultToggledState?"toggled":"normal","flex justify-between py-2 border-l-8 px-3 font-bold ns-aside-menu"])},[l("span",Nd,[l("i",{class:m(["las text-lg mr-2",((o=s.icon)==null?void 0:o.length)>0?s.icon:"la-star"])},null,2),v(" "+h(s.label),1)]),s.notification>0?(i(),a("span",zd,h(s.notification),1)):u("",!0)],10,Id)),l("ul",{class:m([e.defaultToggledState?"":"hidden","submenu-wrapper"])},[y(e.$slots,"default")],2)])}const Wd=D(Ld,[["render",qd]]),Gd={data(){return{showPanel:!1,search:"",eventListener:null}},emits:["change","blur"],props:["field"],computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},_filtredOptions(){let e=this._options;return this.search.length>0&&(e=this._options.filter(t=>t.label.toLowerCase().search(this.search.toLowerCase())!==-1)),e.filter(t=>t.selected===!1)},_options(){return this.field.options.map(e=>(e.selected=e.selected===void 0?!1:e.selected,this.field.value&&this.field.value.includes(e.value)&&(e.selected=!0),e))}},methods:{__:_,togglePanel(){this.showPanel=!this.showPanel},selectAvailableOptionIfPossible(){this._filtredOptions.length>0&&this.addOption(this._filtredOptions[0])},addOption(e){this.field.disabled||(this.$emit("addOption",e),this.$forceUpdate(),setTimeout(()=>{this.search=""},100))},removeOption(e,t){if(!this.field.disabled)return t.preventDefault(),t.stopPropagation(),this.$emit("removeOption",e),this.$forceUpdate(),setTimeout(()=>{this.search=""},100),!1}},mounted(){this.field.value&&this.field.value.reverse().forEach(t=>{const s=this.field.options.filter(c=>c.value===t);s.length>0&&this.addOption(s[0])}),this.eventListener=document.addEventListener("click",e=>{let s=e.target.parentElement,c=!1;if(this.showPanel){for(;s;){if(s&&s.classList.contains("ns-multiselect")&&!s.classList.contains("arrows")){c=!0;break}s=s.parentElement}c===!1&&this.togglePanel()}})}},Kd={class:"flex flex-col ns-multiselect"},Qd=["for"],Zd={class:"flex flex-col"},Xd={class:"flex -mx-1 -my-1 flex-wrap"},Jd={class:"rounded bg-info-secondary text-white flex justify-between p-1 items-center"},eo={class:"pr-8"},to=["onClick"],so=l("i",{class:"las la-times"},null,-1),no=[so],lo={class:"arrows ml-1"},io={class:"ns-dropdown shadow"},ao={class:"search border-b border-input-option-hover"},ro={class:"h-40 overflow-y-auto"},oo=["onClick"],uo={key:0,class:"las la-check"},co={key:0,class:"p-2 text-center text-primary"},ho={class:"my-2"};function fo(e,t,s,c,d,n){const r=w("ns-field-description");return i(),a("div",Kd,[l("label",{for:s.field.name,class:m([n.hasError?"text-error-secondary":"text-primary","block mb-1 leading-5 font-medium"])},[y(e.$slots,"default")],10,Qd),l("div",Zd,[l("div",{onClick:t[0]||(t[0]=o=>n.togglePanel()),class:m([(d.showPanel,""),"overflow-y-auto flex select-preview justify-between rounded border-2 border-input-option-hover p-2 items-start"]),style:{"max-height":"150px"}},[l("div",Xd,[(i(!0),a(p,null,C(n._options.filter(o=>o.selected),(o,f)=>(i(),a("div",{key:f,class:"px-1 my-1"},[l("div",Jd,[l("span",eo,h(o.label),1),l("button",{onClick:g=>n.removeOption(o,g),class:"rounded outline-none hover:bg-info-tertiary h-6 w-6 flex items-center justify-center"},no,8,to)])]))),128))]),l("div",lo,[l("i",{class:m(["las la-angle-down",d.showPanel?"hidden":""])},null,2),l("i",{class:m(["las la-angle-up",d.showPanel?"":"hidden"])},null,2)])],2),d.showPanel?(i(),a("div",{key:0,class:m(["h-0 z-10",d.showPanel?"shadow":""])},[l("div",io,[l("div",ao,[F(l("input",{onKeypress:t[1]||(t[1]=Y(o=>n.selectAvailableOptionIfPossible(),["enter"])),"onUpdate:modelValue":t[2]||(t[2]=o=>d.search=o),class:"p-2 w-full bg-transparent text-primary outline-none",placeholder:"Search"},null,544),[[j,d.search]])]),l("div",ro,[(i(!0),a(p,null,C(n._filtredOptions,(o,f)=>(i(),a("div",{onClick:g=>n.addOption(o),key:f,class:m([o.selected?"bg-info-secondary text-white":"text-primary","option p-2 flex justify-between cursor-pointer hover:bg-info-secondary hover:text-white"])},[l("span",null,h(o.label),1),l("span",null,[o.checked?(i(),a("i",uo)):u("",!0)])],10,oo))),128))]),n._options.length===0?(i(),a("div",co,h(n.__("Nothing to display")),1)):u("",!0)])],2)):u("",!0)]),l("div",ho,[T(r,{field:s.field},null,8,["field"])])])}const mo=D(Gd,[["render",fo]]),go={},bo={class:"my-4"},_o={class:"font-bold text-2xl"},po={class:"text-primary"};function yo(e,t){return i(),a("div",bo,[l("h2",_o,[y(e.$slots,"title")]),l("span",po,[y(e.$slots,"description")])])}const vo=D(go,[["render",yo]]),ko={name:"ns-search",props:["url","placeholder","value","label","method","searchArgument"],data(){return{searchText:"",searchTimeout:null,results:[]}},methods:{__:_,selectOption(e){this.$emit("select",e),this.searchText="",this.results=[]},renderLabel(e,t){return typeof t=="object"?t.map(s=>e[s]).join(" "):e[t]}},watch:{searchText(){clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout(()=>{this.searchText.length>0&&H[this.method||"post"](this.url,{[this.searchArgument||"search"]:this.searchText}).subscribe({next:e=>{this.results=e},error:e=>{$.error(e.message||_("An unexpected error occurred.")).subscribe()}})},1e3)}},mounted(){}},wo={class:"ns-search"},xo={class:"input-group info border-2"},Do=["placeholder"],Co={class:"relative"},Mo={class:"w-full absolute shadow-lg"},To={key:0,class:"ns-vertical-menu"},So=["onClick"];function $o(e,t,s,c,d,n){return i(),a("div",wo,[l("div",xo,[F(l("input",{type:"text","onUpdate:modelValue":t[0]||(t[0]=r=>d.searchText=r),class:"p-2 w-full outline-none",placeholder:s.placeholder||n.__("Search..."),id:""},null,8,Do),[[j,d.searchText]])]),l("div",Co,[l("div",Mo,[d.results.length>0&&d.searchText.length>0?(i(),a("ul",To,[(i(!0),a(p,null,C(d.results,(r,o)=>(i(),a("li",{class:"border-b p-2 cursor-pointer",onClick:f=>n.selectOption(r),key:o},h(n.renderLabel(r,s.label)),9,So))),128))])):u("",!0)])])])}const Eo=D(ko,[["render",$o]]),Fo={data:()=>({searchField:"",showResults:!1}),name:"ns-search-select",emits:["saved","change"],props:["name","placeholder","field","leading"],computed:{selectedOptionLabel(){if(this.field.value===null||this.field.value===void 0)return _("Choose...");const e=this.field.options.filter(t=>t.value===this.field.value);return e.length>0?e[0].label:_("Choose...")},filtredOptions(){return this.searchField.length>0?this.field.options.filter(e=>new RegExp(this.searchField,"i").test(e.label)).splice(0,10):this.field.options},hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"ns-disabled cursor-not-allowed":""},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"}},watch:{showResults(){this.showResults===!0&&setTimeout(()=>{this.$refs.searchInputField.select()},50)}},mounted(){const e=this.field.options.filter(t=>t.value===this.field.value);e.length>0&&[null,void 0].includes(this.field.value)&&this.selectOption(e[0]),document.addEventListener("click",t=>{this.$el.contains(t.target)===!1&&(this.showResults=!1)})},methods:{__:_,selectFirstOption(){this.filtredOptions.length>0&&this.selectOption(this.filtredOptions[0])},selectOption(e){this.field.value=e.value,this.$emit("change",e.value),this.searchField="",this.showResults=!1},async triggerDynamicComponent(e){try{this.showResults=!1;const t=nsExtraComponents[e.component]||nsComponents[e.component];t===void 0&&$.error(_(`The component ${e.component} cannot be loaded. Make sure it's injected on nsExtraComponents object.`)).subscribe();const s=await new Promise((c,d)=>{const n=L.show(t,{...e.props||{},field:this.field,resolve:c,reject:d})});this.$emit("saved",s)}catch{}}}},Ro={class:"flex flex-col flex-auto ns-select"},Oo=["for"],Po={class:"text-primary text-sm"},jo=l("i",{class:"las la-plus"},null,-1),Ao=[jo],Uo={key:0,class:"relative"},Ho={class:"w-full overflow-hidden -top-[8px] border-r-2 border-l-2 border-t rounded-b-md border-b-2 border-input-edge bg-input-background shadow z-10 absolute"},Lo={class:"border-b border-input-edge border-dashed p-2"},Yo=["placeholder"],Vo={class:"h-60 overflow-y-auto"},Bo=["onClick"];function Io(e,t,s,c,d,n){const r=w("ns-field-description");return i(),a("div",Ro,[l("label",{for:s.field.name,class:m([n.hasError?"has-error":"is-pristine","block leading-5 font-medium"])},[y(e.$slots,"default")],10,Oo),l("div",{class:m([(n.hasError?"has-error":"is-pristine")+" "+(s.field.disabled?"cursor-not-allowed":"cursor-default"),"border-2 mt-1 relative rounded-md shadow-sm mb-1 flex overflow-hidden"])},[l("div",{onClick:t[0]||(t[0]=o=>!s.field.disabled&&(e.showResults=!e.showResults)),class:m([s.field.disabled?"bg-input-disabled":"bg-input-background","flex-auto h-10 sm:leading-5 py-2 px-4 flex items-center"])},[l("span",Po,h(n.selectedOptionLabel),1)],2),s.field.component&&!s.field.disabled?(i(),a("div",{key:0,onClick:t[1]||(t[1]=o=>n.triggerDynamicComponent(s.field)),class:"flex items-center justify-center w-10 hover:cursor-pointer hover:bg-input-button-hover border-l-2 border-input-edge"},Ao)):u("",!0)],2),e.showResults?(i(),a("div",Uo,[l("div",Ho,[l("div",Lo,[F(l("input",{onKeypress:t[2]||(t[2]=Y(o=>n.selectFirstOption(),["enter"])),ref:"searchInputField","onUpdate:modelValue":t[3]||(t[3]=o=>e.searchField=o),type:"text",placeholder:n.__("Search result")},null,40,Yo),[[j,e.searchField]])]),l("div",Vo,[l("ul",null,[(i(!0),a(p,null,C(n.filtredOptions,o=>(i(),a("li",{onClick:f=>n.selectOption(o),class:"py-1 px-2 hover:bg-info-primary cursor-pointer text-primary"},h(o.label),9,Bo))),256))])])])])):u("",!0),T(r,{field:s.field},null,8,["field"])])}const No=D(Fo,[["render",Io]]),zo={data:()=>({}),props:["name","placeholder","field","leading"],computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"ns-disabled cursor-not-allowed":""},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"}},mounted(){},methods:{__:_}},qo={class:"flex flex-col flex-auto ns-select"},Wo=["for"],Go=["disabled","name"],Ko={value:null},Qo=["value"];function Zo(e,t,s,c,d,n){const r=w("ns-field-description");return i(),a("div",qo,[l("label",{for:s.field.name,class:m([n.hasError?"has-error":"is-pristine","block leading-5 font-medium"])},[y(e.$slots,"default")],10,Wo),l("div",{class:m([n.hasError?"has-error":"is-pristine","border-2 mt-1 relative rounded-md shadow-sm mb-1 overflow-hidden"])},[F(l("select",{disabled:s.field.disabled?s.field.disabled:!1,name:s.field.name,"onUpdate:modelValue":t[0]||(t[0]=o=>s.field.value=o),class:m([n.inputClass,"form-input block w-full pl-7 pr-12 sm:text-sm sm:leading-5 h-10 appearance-none"])},[l("option",Ko,h(n.__("Choose an option")),1),(i(!0),a(p,null,C(s.field.options,(o,f)=>(i(),a("option",{key:f,value:o.value,class:"py-2"},h(o.label),9,Qo))),128))],10,Go),[[U,s.field.value]])],2),T(r,{field:s.field},null,8,["field"])])}const Xo=D(zo,[["render",Zo]]),Jo={data:()=>({}),props:["name","placeholder","field","leading"],computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"bg-gray-200 cursor-not-allowed":"bg-transparent"},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"pl-8":"px-4"}},methods:{__:_,playSelectedSound(){this.field.value!==null&&this.field.value.length>0&&new Audio(this.field.value).play()}}},eu={class:"flex flex-col flex-auto"},tu=["for"],su=l("button",{class:"w-10 flex item-center justify-center"},[l("i",{class:"las la-play text-2xl"})],-1),nu=[su],lu=["disabled","name"],iu=["value"];function au(e,t,s,c,d,n){const r=w("ns-field-description");return i(),a("div",eu,[l("label",{for:s.field.name,class:m([n.hasError?"text-error-primary":"text-primary","block leading-5 font-medium"])},[y(e.$slots,"default")],10,tu),l("div",{class:m([n.hasError?"border-error-primary":"border-input-edge","border-2 mt-1 flex relative overflow-hidden rounded-md shadow-sm mb-1 form-input"])},[l("div",{onClick:t[0]||(t[0]=o=>n.playSelectedSound()),class:"border-r-2 border-input-edge flex-auto flex items-center justify-center hover:bg-info-tertiary hover:text-white"},nu),F(l("select",{disabled:s.field.disabled?s.field.disabled:!1,onChange:t[1]||(t[1]=o=>e.$emit("change",o)),name:s.field.name,"onUpdate:modelValue":t[2]||(t[2]=o=>s.field.value=o),class:m([n.inputClass,"text-primary block w-full pl-7 pr-12 sm:text-sm sm:leading-5 h-10 outline-none"])},[(i(!0),a(p,null,C(s.field.options,(o,f)=>(i(),a("option",{key:f,value:o.value,class:"py-2"},h(o.label),9,iu))),128))],42,lu),[[U,s.field.value]])],2),T(r,{field:s.field},null,8,["field"])])}const ru=D(Jo,[["render",au]]),du={data:()=>({}),mounted(){},computed:{validatedSize(){return this.size||24},validatedBorder(){return this.border||8},validatedAnimation(){return this.animation||"fast"}},props:["color","size","border","animation"]},ou={class:"flex items-center justify-center"};function uu(e,t,s,c,d,n){return i(),a("div",ou,[l("div",{class:m(["loader ease-linear rounded-full border-gray-200",n.validatedAnimation+" border-4 border-t-4 w-"+n.validatedSize+" h-"+n.validatedSize])},null,2)])}const cu=D(du,[["render",uu]]),hu={data:()=>({}),props:["href","label","active","to"],mounted(){},methods:{goTo(e,t){return this.$router.push(e),t.preventDefault(),!1}}},fu={class:"submenu"},mu=["href"],gu=["href"];function bu(e,t,s,c,d,n){return i(),a("div",null,[l("li",fu,[s.href?(i(),a("a",{key:0,class:m([s.active?"font-bold active":"normal","py-2 border-l-8 px-3 block ns-aside-submenu"]),href:s.href},[y(e.$slots,"default")],10,mu)):s.to?(i(),a("a",{key:1,class:m([s.active?"font-bold active":"normal","py-2 border-l-8 px-3 block ns-aside-submenu"]),onClick:t[0]||(t[0]=r=>n.goTo(s.to,r)),href:s.to},[y(e.$slots,"default")],10,gu)):u("",!0)])])}const _u=D(hu,[["render",bu]]),pu={props:["options","row","columns","prependOptions","showOptions","showCheckboxes"],data:()=>({optionsToggled:!1}),mounted(){},methods:{__:_,sanitizeHTML(e){var t=document.createElement("div");t.innerHTML=e;for(var s=t.getElementsByTagName("script"),c=s.length;c--;)s[c].parentNode.removeChild(s[c]);return t.innerHTML},getElementOffset(e){const t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset,left:t.left+window.pageXOffset}},toggleMenu(e){if(this.row.$toggled=!this.row.$toggled,this.$emit("toggled",this.row),this.row.$toggled)setTimeout(()=>{const t=this.$el.querySelectorAll(".relative > .absolute")[0],s=this.$el.querySelectorAll(".relative")[0],c=this.getElementOffset(s);t.style.top=c.top+"px",t.style.left=c.left+"px",s!==void 0&&(s.classList.remove("relative"),s.classList.add("dropdown-holder"))},100);else{const t=this.$el.querySelectorAll(".dropdown-holder")[0];t.classList.remove("dropdown-holder"),t.classList.add("relative")}},handleChanged(e){this.row.$checked=e,this.$emit("updated",this.row)},triggerAsync(e){e.confirm!==null?confirm(e.confirm.message)&&H[e.type.toLowerCase()](e.url).subscribe(t=>{$.success(t.message).subscribe(),this.$emit("reload",this.row)},t=>{this.toggleMenu(),$.error(t.message).subscribe()}):(q.emit({identifier:"ns-table-row-action",value:{action:e,row:this.row,component:this}}),this.toggleMenu())},triggerPopup(e,t){const s=window.nsExtraComponents[e.component];if(console.log({action:e}),e.component)return s?new Promise((c,d)=>{Popup.show(s,{resolve:c,reject:d,row:t,action:e})}):$.error(_(`Unable to load the component "${e.component}". Make sure the component is registered to "nsExtraComponents".`)).subscribe();this.triggerAsync(e)}}},yu={key:0,class:"font-sans p-2"},vu={key:1,class:"font-sans p-2"},ku={class:""},wu=l("i",{class:"las la-ellipsis-h"},null,-1),xu={class:"relative"},Du={key:0,class:"zoom-in-entrance border border-box-edge anim-duration-300 z-50 origin-bottom-right w-56 mt-2 absolute rounded-md shadow-lg ns-menu-wrapper"},Cu={class:"rounded-md shadow-xs"},Mu={class:"py-1",role:"menu","aria-orientation":"vertical","aria-labelledby":"options-menu"},Tu=["href","innerHTML"],Su=["onClick","innerHTML"],$u=["href","innerHTML"],Eu=["innerHTML"],Fu={key:2},Ru={key:2,class:"font-sans p-2 flex flex-col items-center justify-center"},Ou={class:""},Pu=l("i",{class:"las la-ellipsis-h"},null,-1),ju={class:"relative"},Au={key:0,class:"zoom-in-entrance border border-box-edge anim-duration-300 z-50 origin-bottom-right -ml-28 w-56 mt-2 absolute rounded-md shadow-lg ns-menu-wrapper"},Uu={class:"rounded-md shadow-xs"},Hu={class:"py-1",role:"menu","aria-orientation":"vertical","aria-labelledby":"options-menu"},Lu=["href","innerHTML"],Yu=["onClick","innerHTML"];function Vu(e,t,s,c,d,n){const r=w("ns-checkbox");return i(),a("tr",{class:m(["ns-table-row",s.row.$cssClass?s.row.$cssClass:"border text-sm"])},[s.showCheckboxes?(i(),a("td",yu,[T(r,{onChange:t[0]||(t[0]=o=>n.handleChanged(o)),checked:s.row.$checked},null,8,["checked"])])):u("",!0),s.prependOptions&&s.showOptions?(i(),a("td",vu,[l("div",ku,[l("button",{onClick:t[1]||(t[1]=o=>n.toggleMenu(o)),class:m([s.row.$toggled?"active":"","ns-inset-button outline-none rounded-full w-24 text-sm p-1 border"])},[wu,v(" "+h(n.__("Options")),1)],2),s.row.$toggled?(i(),a("div",{key:0,onClick:t[2]||(t[2]=o=>n.toggleMenu(o)),class:"absolute w-full h-full z-10 top-0 left-0"})):u("",!0),l("div",xu,[s.row.$toggled?(i(),a("div",Du,[l("div",Cu,[l("div",Mu,[(i(!0),a(p,null,C(s.row.$actions,(o,f)=>(i(),a(p,{key:f},[o.type==="GOTO"?(i(),a("a",{key:0,href:o.url,class:"ns-action-button block px-4 py-2 text-sm leading-5",role:"menuitem",innerHTML:n.sanitizeHTML(o.label)},null,8,Tu)):u("",!0),["GET","DELETE","POPUP"].includes(o.type)?(i(),a("a",{key:1,href:"javascript:void(0)",onClick:g=>n.triggerAsync(o),class:"ns-action-button block px-4 py-2 text-sm leading-5",role:"menuitem",innerHTML:n.sanitizeHTML(o.label)},null,8,Su)):u("",!0)],64))),128))])])])):u("",!0)])])])):u("",!0),(i(!0),a(p,null,C(s.columns,(o,f)=>(i(),a("td",{key:f,class:"font-sans p-2"},[s.row[f]&&s.row[f].type&&s.row[f].type==="link"?(i(),a("a",{key:0,target:"_blank",href:s.row[f].href,innerHTML:n.sanitizeHTML(s.row[f].label)},null,8,$u)):u("",!0),typeof s.row[f]=="string"||typeof s.row[f]=="number"?(i(),a("div",{key:1,innerHTML:n.sanitizeHTML(s.row[f])},null,8,Eu)):u("",!0),s.row[f]===null?(i(),a("div",Fu,h(n.__("Undefined")),1)):u("",!0)]))),128)),!s.prependOptions&&s.showOptions?(i(),a("td",Ru,[l("div",Ou,[l("button",{onClick:t[3]||(t[3]=o=>n.toggleMenu(o)),class:m([s.row.$toggled?"active":"","ns-inset-button outline-none rounded-full w-24 text-sm p-1 border"])},[Pu,v(" "+h(n.__("Options")),1)],2),s.row.$toggled?(i(),a("div",{key:0,onClick:t[4]||(t[4]=o=>n.toggleMenu(o)),class:"absolute w-full h-full z-10 top-0 left-0"})):u("",!0),l("div",ju,[s.row.$toggled?(i(),a("div",Au,[l("div",Uu,[l("div",Hu,[(i(!0),a(p,null,C(s.row.$actions,(o,f)=>(i(),a(p,{key:f},[o.type==="GOTO"?(i(),a("a",{key:0,href:o.url,class:"ns-action-button block px-4 py-2 text-sm leading-5",role:"menuitem",innerHTML:n.sanitizeHTML(o.label)},null,8,Lu)):u("",!0),["GET","DELETE","POPUP"].includes(o.type)?(i(),a("a",{key:1,href:"javascript:void(0)",onClick:g=>n.triggerAsync(o),class:"ns-action-button block px-4 py-2 text-sm leading-5",role:"menuitem",innerHTML:n.sanitizeHTML(o.label)},null,8,Yu)):u("",!0)],64))),128))])])])):u("",!0)])])])):u("",!0)],2)}const Bu=D(pu,[["render",Vu]]),Iu={data(){return{childrens:[],tabState:new $e}},props:["active"],computed:{activeComponent(){const e=this.childrens.filter(t=>t.active);return e.length>0?e[0]:!1}},beforeUnmount(){this.tabState.unsubscribe()},watch:{active(e,t){this.childrens.forEach(s=>{s.active=s.identifier===e,s.active&&this.toggle(s)})}},mounted(){this.buildChildrens(this.active)},methods:{__:_,toggle(e){this.$emit("active",e.identifier),this.$emit("changeTab",e.identifier),this.tabState.next(e)},buildChildrens(e){this.childrens=Array.from(this.$el.querySelectorAll(".ns-tab-item")).map(s=>{const c=s.getAttribute("identifier")||void 0;let d=!0;return s.getAttribute("visible")&&(d=s.getAttribute("visible")==="true"),{el:s,active:!!(e&&e===c),identifier:c,initialized:!1,visible:d,label:s.getAttribute("label")||_("Unamed Tab")}}).filter(s=>s.visible),!(this.childrens.filter(s=>s.active).length>0)&&this.childrens.length>0&&(this.childrens[0].active=!0),this.childrens.forEach(s=>{s.active&&this.toggle(s)})}}},Nu=["selected-tab"],zu={class:"header ml-4 flex justify-between",style:{"margin-bottom":"-1px"}},qu={class:"flex flex-auto"},Wu=["onClick"];function Gu(e,t,s,c,d,n){return i(),a("div",{class:"tabs flex flex-col flex-auto ns-tab overflow-hidden","selected-tab":n.activeComponent.identifier},[l("div",zu,[l("div",qu,[(i(!0),a(p,null,C(d.childrens,(r,o)=>(i(),a("div",{key:r.identifier,onClick:f=>n.toggle(r),class:m([s.active===r.identifier?"border-b-0 active z-10":"border inactive","tab rounded-tl rounded-tr border px-3 py-2 cursor-pointer"]),style:{"margin-right":"-1px"}},h(r.label),11,Wu))),128))]),l("div",null,[y(e.$slots,"extra")])]),y(e.$slots,"default")],8,Nu)}const Ku=D(Iu,[["render",Gu]]),Qu={data(){return{selectedTab:{},tabStateSubscriber:null}},computed:{},mounted(){this.tabStateSubscriber=this.$parent.tabState.subscribe(e=>{this.selectedTab=e})},unmounted(){this.tabStateSubscriber.unsubscribe()},props:["label","identifier","padding"]},Zu=["label","identifier"];function Xu(e,t,s,c,d,n){return i(),a("div",{class:m([d.selectedTab.identifier!==s.identifier?"hidden":"","ns-tab-item flex flex-auto overflow-hidden"]),label:s.label,identifier:s.identifier},[d.selectedTab.identifier===s.identifier?(i(),a("div",{key:0,class:m(["border rounded flex-auto overflow-y-auto",s.padding||"p-4"])},[y(e.$slots,"default")],2)):u("",!0)],10,Zu)}const Ju=D(Qu,[["render",Xu]]),ec={data:()=>({}),mounted(){},computed:{hasError(){return this.field.errors!==void 0&&this.field.errors.length>0},disabledClass(){return this.field.disabled?"ns-disabled cursor-not-allowed":""},inputClass(){return this.disabledClass+" "+this.leadClass},leadClass(){return this.leading?"p-8":"p-2"}},props:["placeholder","leading","type","field"]},tc={class:"flex flex-col mb-2 flex-auto ns-textarea"},sc=["for"],nc={key:0,class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},lc={class:"text-secondary sm:text-sm sm:leading-5"},ic=["rows","disabled","id","type","placeholder"],ac={key:0,class:"text-xs text-secondary"};function rc(e,t,s,c,d,n){return i(),a("div",tc,[l("label",{for:s.field.name,class:m([n.hasError?"text-error-primary":"text-primary","block leading-5 font-medium"])},h(s.field.label),11,sc),l("div",{class:m([n.hasError?"has-error":"is-pristine","mt-1 relative border-2 overflow-hidden rounded-md focus:shadow-sm mb-1"])},[s.leading?(i(),a("div",nc,[l("span",lc,h(s.leading),1)])):u("",!0),F(l("textarea",{rows:s.field.data&&s.field.data.rows||10,disabled:s.field.disabled,"onUpdate:modelValue":t[0]||(t[0]=r=>s.field.value=r),onBlur:t[1]||(t[1]=r=>e.$emit("blur",this)),onChange:t[2]||(t[2]=r=>e.$emit("change",this)),id:s.field.name,type:s.type||s.field.type||"text",class:m([n.inputClass,"form-input block w-full sm:text-sm sm:leading-5"]),placeholder:s.placeholder},null,42,ic),[[j,s.field.value]])],2),!s.field.errors||s.field.errors.length===0?(i(),a("p",ac,[y(e.$slots,"description")])):u("",!0),(i(!0),a(p,null,C(s.field.errors,(r,o)=>(i(),a("p",{key:o,class:"text-xs text-error-primary"},[r.identifier==="required"?y(e.$slots,r.identifier,{key:0},()=>[v("This field is required.")]):u("",!0),r.identifier==="email"?y(e.$slots,r.identifier,{key:1},()=>[v("This field must contain a valid email address.")]):u("",!0),r.identifier==="invalid"?y(e.$slots,r.identifier,{key:2},()=>[v(h(r.message),1)]):u("",!0)]))),128))])}const dc=D(ec,[["render",rc]]),pc=Object.freeze(Object.defineProperty({__proto__:null,nsAlertPopup:se,nsAvatar:qe,nsButton:Ze,nsCalendar:ce,nsCheckbox:ds,nsCkeditor:Re,nsCloseButton:fs,nsConfirmPopup:G,nsCrud:vn,nsCrudForm:Nn,nsDate:Xn,nsDateRangePicker:ge,nsDateTimePicker:be,nsDatepicker:$i,nsDaterangePicker:Wi,nsDragzone:aa,nsField:Ca,nsFieldDescription:$a,nsIconButton:Ra,nsInlineMultiselect:Za,nsInput:ir,nsLink:ur,nsMediaInput:Hd,nsMenu:Wd,nsMultiselect:mo,nsNotice:Oe,nsNumpad:Pe,nsNumpadPlus:je,nsPOSLoadingPopup:Ae,nsPageTitle:vo,nsPaginate:Ue,nsPromptPopup:He,nsSearch:Eo,nsSearchSelect:No,nsSelect:Xo,nsSelectAudio:ru,nsSpinner:cu,nsSubmenu:_u,nsSwitch:ue,nsTableRow:Bu,nsTabs:Ku,nsTabsItem:Ju,nsTextarea:dc},Symbol.toStringTag,{value:"Module"}));export{_u as a,pc as b,$i as c,Wi as d,be as e,pe as f,Ca as g,fs as h,_c as i,Wd as n}; diff --git a/public/build/assets/create-coupons-36Lc70gf.js b/public/build/assets/create-coupons-36Lc70gf.js new file mode 100644 index 000000000..aeef01fa0 --- /dev/null +++ b/public/build/assets/create-coupons-36Lc70gf.js @@ -0,0 +1 @@ +import{F as C,b as h,a as p,v as T}from"./bootstrap-Bpe5LRJd.js";import{_ as c}from"./currency-lOMYG1Wf.js";import{_ as U}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as g,o as i,c as l,f as k,e as b,F as u,a as r,A as v,i as _,t as m,n as F,B,b as f,g as O}from"./runtime-core.esm-bundler-RT2b-_3S.js";const N={name:"ns-create-coupons",mounted(){this.loadForm()},computed:{validTabs(){if(this.form){const e=[];for(let t in this.form.tabs)["selected_products","selected_categories","selected_groups","selected_customers"].includes(t)&&e.push(this.form.tabs[t]);return e}return[]},activeValidTab(){return this.validTabs.filter(e=>e.active)[0]},generalTab(){const e=[];for(let t in this.form.tabs)["general"].includes(t)&&e.push(this.form.tabs[t]);return e}},data(){return{formValidation:new C,form:{},nsSnackBar:h,nsHttpClient:p,options:new Array(40).fill("").map((e,t)=>({label:"Foo"+t,value:"bar"+t}))}},props:["submitMethod","submitUrl","returnUrl","src","rules"],methods:{__:c,setTabActive(e){this.validTabs.forEach(t=>t.active=!1),e.active=!0},submit(){if(this.formValidation.validateForm(this.form).length>0)return h.error(c("Unable to proceed the form is not valid."),c("Okay")).subscribe();if(this.submitUrl===void 0)return h.error(c("No submit URL was provided"),c("Okay")).subscribe();this.formValidation.disableForm(this.form);const e={...this.formValidation.extractForm(this.form)};p[this.submitMethod?this.submitMethod.toLowerCase():"post"](this.submitUrl,e).subscribe(t=>{if(t.status==="success")return document.location=this.returnUrl;this.formValidation.enableForm(this.form)},t=>{h.error(t.message||c("An unexpected error occurred."),void 0,{duration:5e3}).subscribe(),t.status==="failed"&&this.formValidation.triggerError(this.form,t.data),this.formValidation.enableForm(this.form)})},handleGlobalChange(e){this.globallyChecked=e,this.rows.forEach(t=>t.$checked=e)},loadForm(){p.get(`${this.src}`).subscribe(t=>{this.form=this.parseForm(t.form)})},parseForm(e){e.main.value=e.main.value===void 0?"":e.main.value,e.main=this.formValidation.createFields([e.main])[0];let t=0;for(let n in e.tabs)t===1&&e.tabs[n].active===void 0&&(e.tabs[n].active=!0),e.tabs[n].active=e.tabs[n].active===void 0?!1:e.tabs[n].active,e.tabs[n].fields=this.formValidation.createFields(e.tabs[n].fields),t++;return e},addOption(e){const t=this.options.indexOf(e);t>=0&&(this.options[t].selected=!this.options[t].selected)},removeOption({option:e,index:t}){e.selected=!1},getRuleForm(){return this.form.ruleForm},addRule(){this.form.rules.push(this.getRuleForm())},removeRule(e){this.form.rules.splice(e,1)}}},R={class:"form flex-auto flex flex-col",id:"crud-form"},A={key:0,class:"flex items-center justify-center flex-auto"},j={class:"flex flex-col"},E={class:"flex justify-between items-center"},M={for:"title",class:"font-bold my-2 text-primary"},S={for:"title",class:"text-sm my-2"},q=["href"],L=["disabled"],D=["disabled"],z={key:0,class:"text-xs text-primary py-1"},G={id:"form-container",class:"-mx-4 flex flex-wrap mt-4"},H={class:"px-4 w-full md:w-1/2"},P={class:"px-4 w-full md:w-1/2"},I={id:"tabbed-card"},J={id:"card-header",class:"flex ml-4 flex-wrap ns-tab"},K=["onClick"],Q={class:"ns-tab-item"},W={class:"shadow p-2 rounded"};function X(e,t,n,Y,s,a){const V=g("ns-spinner"),x=g("ns-field");return i(),l("div",R,[Object.values(s.form).length===0?(i(),l("div",A,[k(V)])):b("",!0),Object.values(s.form).length>0?(i(),l(u,{key:1},[r("div",j,[r("div",E,[r("label",M,[v(e.$slots,"title",{},()=>[_("No title Provided")])]),r("div",S,[n.returnUrl?(i(),l("a",{key:0,href:n.returnUrl,class:"rounded-full border ns-inset-button error px-2 py-1"},m(a.__("Return")),9,q)):b("",!0)])]),r("div",{class:F([s.form.main.disabled?"disabled":s.form.main.errors.length>0?"error":"info","input-group flex border-2 rounded overflow-hidden"])},[B(r("input",{"onUpdate:modelValue":t[0]||(t[0]=o=>s.form.main.value=o),onBlur:t[1]||(t[1]=o=>s.formValidation.checkField(s.form.main)),onChange:t[2]||(t[2]=o=>s.formValidation.checkField(s.form.main)),disabled:s.form.main.disabled,type:"text",class:"flex-auto text-primary outline-none h-10 px-2"},null,40,L),[[T,s.form.main.value]]),r("button",{disabled:s.form.main.disabled,onClick:t[3]||(t[3]=o=>a.submit()),class:"outline-none px-4 h-10"},[v(e.$slots,"save",{},()=>[_(m(a.__("Save")),1)])],8,D)],2),s.form.main.description&&s.form.main.errors.length===0?(i(),l("p",z,m(s.form.main.description),1)):b("",!0),(i(!0),l(u,null,f(s.form.main.errors,(o,d)=>(i(),l("p",{class:"text-xs py-1 text-error-tertiary",key:d},[r("span",null,[v(e.$slots,"error-required",{},()=>[_(m(o.identifier),1)])])]))),128))]),r("div",G,[r("div",H,[(i(!0),l(u,null,f(a.generalTab,(o,d)=>(i(),l("div",{class:"rounded ns-box shadow p-2",key:d},[(i(!0),l(u,null,f(o.fields,(y,w)=>(i(),O(x,{key:w,field:y},null,8,["field"]))),128))]))),128))]),r("div",P,[r("div",I,[r("div",J,[(i(!0),l(u,null,f(a.validTabs,(o,d)=>(i(),l("div",{onClick:y=>a.setTabActive(o),class:F([o.active?"active":"inactive","tab cursor-pointer px-4 py-2 rounded-tl-lg rounded-tr-lg"]),key:d},m(o.label),11,K))),128))]),r("div",Q,[r("div",W,[(i(!0),l(u,null,f(a.activeValidTab.fields,(o,d)=>(i(),l("div",{class:"flex flex-col",key:d},[k(x,{field:o},null,8,["field"])]))),128))])])])])])],64)):b("",!0)])}const se=U(N,[["render",X]]);export{se as default}; diff --git a/public/build/assets/create-coupons-DIVPnAb6.js b/public/build/assets/create-coupons-DIVPnAb6.js deleted file mode 100644 index 621f870c7..000000000 --- a/public/build/assets/create-coupons-DIVPnAb6.js +++ /dev/null @@ -1 +0,0 @@ -import{k as C,v as T}from"./tax-BACo6kIE.js";import{b as h,a as p}from"./bootstrap-B7E2wy_a.js";import{_ as c}from"./currency-ZXKMLAC0.js";import{_ as U}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as g,o as r,c as l,g as k,f as b,F as u,b as i,B as v,j as _,t as m,n as F,C as B,e as f,h as O}from"./runtime-core.esm-bundler-DCfIpxDt.js";const N={name:"ns-create-coupons",mounted(){this.loadForm()},computed:{validTabs(){if(this.form){const e=[];for(let t in this.form.tabs)["selected_products","selected_categories","selected_groups","selected_customers"].includes(t)&&e.push(this.form.tabs[t]);return e}return[]},activeValidTab(){return this.validTabs.filter(e=>e.active)[0]},generalTab(){const e=[];for(let t in this.form.tabs)["general"].includes(t)&&e.push(this.form.tabs[t]);return e}},data(){return{formValidation:new C,form:{},nsSnackBar:h,nsHttpClient:p,options:new Array(40).fill("").map((e,t)=>({label:"Foo"+t,value:"bar"+t}))}},props:["submitMethod","submitUrl","returnUrl","src","rules"],methods:{__:c,setTabActive(e){this.validTabs.forEach(t=>t.active=!1),e.active=!0},submit(){if(this.formValidation.validateForm(this.form).length>0)return h.error(c("Unable to proceed the form is not valid."),c("Okay")).subscribe();if(this.submitUrl===void 0)return h.error(c("No submit URL was provided"),c("Okay")).subscribe();this.formValidation.disableForm(this.form);const e={...this.formValidation.extractForm(this.form)};p[this.submitMethod?this.submitMethod.toLowerCase():"post"](this.submitUrl,e).subscribe(t=>{if(t.status==="success")return document.location=this.returnUrl;this.formValidation.enableForm(this.form)},t=>{h.error(t.message||c("An unexpected error occurred."),void 0,{duration:5e3}).subscribe(),t.status==="failed"&&this.formValidation.triggerError(this.form,t.data),this.formValidation.enableForm(this.form)})},handleGlobalChange(e){this.globallyChecked=e,this.rows.forEach(t=>t.$checked=e)},loadForm(){p.get(`${this.src}`).subscribe(t=>{this.form=this.parseForm(t.form)})},parseForm(e){e.main.value=e.main.value===void 0?"":e.main.value,e.main=this.formValidation.createFields([e.main])[0];let t=0;for(let n in e.tabs)t===1&&e.tabs[n].active===void 0&&(e.tabs[n].active=!0),e.tabs[n].active=e.tabs[n].active===void 0?!1:e.tabs[n].active,e.tabs[n].fields=this.formValidation.createFields(e.tabs[n].fields),t++;return e},addOption(e){const t=this.options.indexOf(e);t>=0&&(this.options[t].selected=!this.options[t].selected)},removeOption({option:e,index:t}){e.selected=!1},getRuleForm(){return this.form.ruleForm},addRule(){this.form.rules.push(this.getRuleForm())},removeRule(e){this.form.rules.splice(e,1)}}},R={class:"form flex-auto flex flex-col",id:"crud-form"},j={key:0,class:"flex items-center justify-center flex-auto"},A={class:"flex flex-col"},E={class:"flex justify-between items-center"},M={for:"title",class:"font-bold my-2 text-primary"},S={for:"title",class:"text-sm my-2"},q=["href"],L=["disabled"],D=["disabled"],z={key:0,class:"text-xs text-primary py-1"},G={id:"form-container",class:"-mx-4 flex flex-wrap mt-4"},H={class:"px-4 w-full md:w-1/2"},P={class:"px-4 w-full md:w-1/2"},I={id:"tabbed-card"},J={id:"card-header",class:"flex ml-4 flex-wrap ns-tab"},K=["onClick"],Q={class:"ns-tab-item"},W={class:"shadow p-2 rounded"};function X(e,t,n,Y,s,a){const V=g("ns-spinner"),x=g("ns-field");return r(),l("div",R,[Object.values(s.form).length===0?(r(),l("div",j,[k(V)])):b("",!0),Object.values(s.form).length>0?(r(),l(u,{key:1},[i("div",A,[i("div",E,[i("label",M,[v(e.$slots,"title",{},()=>[_("No title Provided")])]),i("div",S,[n.returnUrl?(r(),l("a",{key:0,href:n.returnUrl,class:"rounded-full border ns-inset-button error px-2 py-1"},m(a.__("Return")),9,q)):b("",!0)])]),i("div",{class:F([s.form.main.disabled?"disabled":s.form.main.errors.length>0?"error":"info","input-group flex border-2 rounded overflow-hidden"])},[B(i("input",{"onUpdate:modelValue":t[0]||(t[0]=o=>s.form.main.value=o),onBlur:t[1]||(t[1]=o=>s.formValidation.checkField(s.form.main)),onChange:t[2]||(t[2]=o=>s.formValidation.checkField(s.form.main)),disabled:s.form.main.disabled,type:"text",class:"flex-auto text-primary outline-none h-10 px-2"},null,40,L),[[T,s.form.main.value]]),i("button",{disabled:s.form.main.disabled,onClick:t[3]||(t[3]=o=>a.submit()),class:"outline-none px-4 h-10"},[v(e.$slots,"save",{},()=>[_(m(a.__("Save")),1)])],8,D)],2),s.form.main.description&&s.form.main.errors.length===0?(r(),l("p",z,m(s.form.main.description),1)):b("",!0),(r(!0),l(u,null,f(s.form.main.errors,(o,d)=>(r(),l("p",{class:"text-xs py-1 text-error-tertiary",key:d},[i("span",null,[v(e.$slots,"error-required",{},()=>[_(m(o.identifier),1)])])]))),128))]),i("div",G,[i("div",H,[(r(!0),l(u,null,f(a.generalTab,(o,d)=>(r(),l("div",{class:"rounded ns-box shadow p-2",key:d},[(r(!0),l(u,null,f(o.fields,(y,w)=>(r(),O(x,{key:w,field:y},null,8,["field"]))),128))]))),128))]),i("div",P,[i("div",I,[i("div",J,[(r(!0),l(u,null,f(a.validTabs,(o,d)=>(r(),l("div",{onClick:y=>a.setTabActive(o),class:F([o.active?"active":"inactive","tab cursor-pointer px-4 py-2 rounded-tl-lg rounded-tr-lg"]),key:d},m(o.label),11,K))),128))]),i("div",Q,[i("div",W,[(r(!0),l(u,null,f(a.activeValidTab.fields,(o,d)=>(r(),l("div",{class:"flex flex-col",key:d},[k(x,{field:o},null,8,["field"])]))),128))])])])])])],64)):b("",!0)])}const re=U(N,[["render",X]]);export{re as default}; diff --git a/public/build/assets/currency-ZXKMLAC0.js b/public/build/assets/currency-lOMYG1Wf.js similarity index 99% rename from public/build/assets/currency-ZXKMLAC0.js rename to public/build/assets/currency-lOMYG1Wf.js index ba8f9e7db..eccd2a1e3 100644 --- a/public/build/assets/currency-ZXKMLAC0.js +++ b/public/build/assets/currency-lOMYG1Wf.js @@ -10,4 +10,4 @@ var j=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u * * Copyright (c) 2021 Jason Wilson * Released under MIT license - */var z={symbol:"$",separator:",",decimal:".",errorOnInvalid:!1,precision:2,pattern:"!#",negativePattern:"-!#",format:J,fromCents:!1},R=function(r){return Math.round(r)},T=function(r){return Math.pow(10,r)},A=function(r,l){return R(r/l)*l},D=/(\d)(?=(\d{3})+\b)/g,G=/(\d)(?=(\d\d)+\d\b)/g;function N(a,r){var l=this;if(!(l instanceof N))return new N(a,r);var u=Object.assign({},z,r),p=T(u.precision),h=$(a,u);l.intValue=h,l.value=h/p,u.increment=u.increment||1/p,u.useVedic?u.groups=G:u.groups=D,this.s=u,this.p=p}function $(a,r){var l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,u=0,p=r.decimal,h=r.errorOnInvalid,_=r.precision,d=r.fromCents,w=T(_),e=typeof a=="number",t=a instanceof N;if(t&&d)return a.intValue;if(e||t)u=t?a.value:a;else if(typeof a=="string"){var s=new RegExp("[^-\\d"+p+"]","g"),i=new RegExp("\\"+p,"g");u=a.replace(/\((.*)\)/,"-$1").replace(s,"").replace(i,"."),u=u||0}else{if(h)throw Error("Invalid Input");u=0}return d||(u*=w,u=u.toFixed(4)),l?R(u):u}function J(a,r){var l=r.pattern,u=r.negativePattern,p=r.symbol,h=r.separator,_=r.decimal,d=r.groups,w=(""+a).replace(/^-/,"").split("."),e=w[0],t=w[1];return(a.value>=0?l:u).replace("!",p).replace("#",e.replace(d,"$1"+h)+(t?_+t:""))}N.prototype={add:function(r){var l=this.intValue,u=this.s,p=this.p;return N((l+=$(r,u))/(u.fromCents?1:p),u)},subtract:function(r){var l=this.intValue,u=this.s,p=this.p;return N((l-=$(r,u))/(u.fromCents?1:p),u)},multiply:function(r){var l=this.intValue,u=this.s;return N((l*=r)/(u.fromCents?1:T(u.precision)),u)},divide:function(r){var l=this.intValue,u=this.s;return N(l/=$(r,u,!1),u)},distribute:function(r){for(var l=this.intValue,u=this.p,p=this.s,h=[],_=Math[l>=0?"floor":"ceil"](l/r),d=Math.abs(l-_*r),w=p.fromCents?1:u;r!==0;r--){var e=N(_/w,p);d-- >0&&(e=e[l>=0?"add":"subtract"](1/w)),h.push(e)}return h},dollars:function(){return~~this.value},cents:function(){var r=this.intValue,l=this.p;return~~(r%l)},format:function(r){var l=this.s;return typeof r=="function"?r(this,l):l.format(this,Object.assign({},l,r))},toString:function(){var r=this.intValue,l=this.p,u=this.s;return A(r/l,u.increment).toFixed(u.precision)},toJSON:function(){return this.value}};const Z=new Array(parseInt(ns.currency.ns_currency_precision)).fill("").map(a=>0).join(""),q=(a,r="full",l="en")=>{let u;switch(ns.currency.ns_currency_prefered){case"iso":u=ns.currency.ns_currency_iso;break;case"symbol":u=ns.currency.ns_currency_symbol;break}let p;if(r==="full"){const h={decimal:ns.currency.ns_currency_decimal_separator,separator:ns.currency.ns_currency_thousand_separator,precision:parseInt(ns.currency.ns_currency_precision),symbol:""};p=N(a,h).format()}else p=S(a).format("0.0a");return`${ns.currency.ns_currency_position==="before"?u:""}${p}${ns.currency.ns_currency_position==="after"?u:""}`},H=a=>{const r=`0.${Z}`;return parseFloat(S(a).format(r))},Q=a=>S(a).format("0a");export{Y as _,U as a,H as b,j as c,C as d,Q as e,K as g,q as n}; + */var z={symbol:"$",separator:",",decimal:".",errorOnInvalid:!1,precision:2,pattern:"!#",negativePattern:"-!#",format:J,fromCents:!1},R=function(r){return Math.round(r)},T=function(r){return Math.pow(10,r)},A=function(r,l){return R(r/l)*l},D=/(\d)(?=(\d{3})+\b)/g,G=/(\d)(?=(\d\d)+\d\b)/g;function N(a,r){var l=this;if(!(l instanceof N))return new N(a,r);var u=Object.assign({},z,r),p=T(u.precision),h=$(a,u);l.intValue=h,l.value=h/p,u.increment=u.increment||1/p,u.useVedic?u.groups=G:u.groups=D,this.s=u,this.p=p}function $(a,r){var l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,u=0,p=r.decimal,h=r.errorOnInvalid,_=r.precision,d=r.fromCents,w=T(_),e=typeof a=="number",t=a instanceof N;if(t&&d)return a.intValue;if(e||t)u=t?a.value:a;else if(typeof a=="string"){var s=new RegExp("[^-\\d"+p+"]","g"),i=new RegExp("\\"+p,"g");u=a.replace(/\((.*)\)/,"-$1").replace(s,"").replace(i,"."),u=u||0}else{if(h)throw Error("Invalid Input");u=0}return d||(u*=w,u=u.toFixed(4)),l?R(u):u}function J(a,r){var l=r.pattern,u=r.negativePattern,p=r.symbol,h=r.separator,_=r.decimal,d=r.groups,w=(""+a).replace(/^-/,"").split("."),e=w[0],t=w[1];return(a.value>=0?l:u).replace("!",p).replace("#",e.replace(d,"$1"+h)+(t?_+t:""))}N.prototype={add:function(r){var l=this.intValue,u=this.s,p=this.p;return N((l+=$(r,u))/(u.fromCents?1:p),u)},subtract:function(r){var l=this.intValue,u=this.s,p=this.p;return N((l-=$(r,u))/(u.fromCents?1:p),u)},multiply:function(r){var l=this.intValue,u=this.s;return N((l*=r)/(u.fromCents?1:T(u.precision)),u)},divide:function(r){var l=this.intValue,u=this.s;return N(l/=$(r,u,!1),u)},distribute:function(r){for(var l=this.intValue,u=this.p,p=this.s,h=[],_=Math[l>=0?"floor":"ceil"](l/r),d=Math.abs(l-_*r),w=p.fromCents?1:u;r!==0;r--){var e=N(_/w,p);d-- >0&&(e=e[l>=0?"add":"subtract"](1/w)),h.push(e)}return h},dollars:function(){return~~this.value},cents:function(){var r=this.intValue,l=this.p;return~~(r%l)},format:function(r){var l=this.s;return typeof r=="function"?r(this,l):l.format(this,Object.assign({},l,r))},toString:function(){var r=this.intValue,l=this.p,u=this.s;return A(r/l,u.increment).toFixed(u.precision)},toJSON:function(){return this.value}};const Z=new Array(parseInt(ns.currency.ns_currency_precision)).fill("").map(a=>0).join(""),q=(a,r="full",l="en")=>{let u;switch(ns.currency.ns_currency_prefered){case"iso":u=ns.currency.ns_currency_iso;break;case"symbol":u=ns.currency.ns_currency_symbol;break}let p;if(r==="full"){const h={decimal:ns.currency.ns_currency_decimal_separator,separator:ns.currency.ns_currency_thousand_separator,precision:parseInt(ns.currency.ns_currency_precision),symbol:""};p=N(a,h).format()}else p=S(a).format("0.0a");return`${ns.currency.ns_currency_position==="before"?u:""}${p}${ns.currency.ns_currency_position==="after"?u:""}`},H=a=>{const r=`0.${Z}`;return parseFloat(S(a).format(r))},Q=a=>S(a).format("0a");export{Y as _,H as a,C as b,j as c,Q as d,U as e,K as g,q as n}; diff --git a/public/build/assets/dashboard-CR5aS-ZM.js b/public/build/assets/dashboard-CR5aS-ZM.js deleted file mode 100644 index 203b0e47a..000000000 --- a/public/build/assets/dashboard-CR5aS-ZM.js +++ /dev/null @@ -1 +0,0 @@ -var o=Object.defineProperty;var d=(t,e,s)=>e in t?o(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var r=(t,e,s)=>(d(t,typeof e!="symbol"?e+"":e,s),s);import{a}from"./bootstrap-B7E2wy_a.js";import{B as i}from"./tax-BACo6kIE.js";import"./currency-ZXKMLAC0.js";import"./runtime-core.esm-bundler-DCfIpxDt.js";class h{constructor(){r(this,"_day");r(this,"_bestCustomers");r(this,"_bestCashiers");r(this,"_weeksSummary");r(this,"_recentOrders");r(this,"_reports",{day:a.get("/api/dashboard/day"),bestCustomers:a.get("/api/dashboard/best-customers"),weeksSummary:a.get("/api/dashboard/weeks"),bestCashiers:a.get("/api/dashboard/best-cashiers"),recentOrders:a.get("/api/dashboard/recent-orders")});this._day=new i({}),this._bestCustomers=new i([]),this._weeksSummary=new i({}),this._bestCashiers=new i([]),this._recentOrders=new i([]);for(let e in this._reports)this.loadReport(e)}loadReport(e){return this._reports[e].subscribe(s=>{this[`_${e}`].next(s)})}get day(){return this._day}get bestCustomers(){return this._bestCustomers}get bestCashiers(){return this._bestCashiers}get recentOrders(){return this._recentOrders}get weeksSummary(){return this._weeksSummary}}window.Dashboard=new h; diff --git a/public/build/assets/dashboard-CuZ8scvE.js b/public/build/assets/dashboard-CuZ8scvE.js new file mode 100644 index 000000000..9cb5f3fde --- /dev/null +++ b/public/build/assets/dashboard-CuZ8scvE.js @@ -0,0 +1 @@ +var o=Object.defineProperty;var d=(t,e,s)=>e in t?o(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var r=(t,e,s)=>(d(t,typeof e!="symbol"?e+"":e,s),s);import{a,B as i}from"./bootstrap-Bpe5LRJd.js";import"./currency-lOMYG1Wf.js";import"./runtime-core.esm-bundler-RT2b-_3S.js";class h{constructor(){r(this,"_day");r(this,"_bestCustomers");r(this,"_bestCashiers");r(this,"_weeksSummary");r(this,"_recentOrders");r(this,"_reports",{day:a.get("/api/dashboard/day"),bestCustomers:a.get("/api/dashboard/best-customers"),weeksSummary:a.get("/api/dashboard/weeks"),bestCashiers:a.get("/api/dashboard/best-cashiers"),recentOrders:a.get("/api/dashboard/recent-orders")});this._day=new i({}),this._bestCustomers=new i([]),this._weeksSummary=new i({}),this._bestCashiers=new i([]),this._recentOrders=new i([]);for(let e in this._reports)this.loadReport(e)}loadReport(e){return this._reports[e].subscribe(s=>{this[`_${e}`].next(s)})}get day(){return this._day}get bestCustomers(){return this._bestCustomers}get bestCashiers(){return this._bestCashiers}get recentOrders(){return this._recentOrders}get weeksSummary(){return this._weeksSummary}}window.Dashboard=new h; diff --git a/public/build/assets/database-BASL5exY.js b/public/build/assets/database-BASL5exY.js deleted file mode 100644 index 2bf5f29ed..000000000 --- a/public/build/assets/database-BASL5exY.js +++ /dev/null @@ -1 +0,0 @@ -import{k as q}from"./tax-BACo6kIE.js";import{_ as s}from"./currency-ZXKMLAC0.js";import{_ as S}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as b,o as i,c as o,b as t,t as r,f as n,F as h,e as F,h as f,w as p,B as y,j as P,g as k}from"./runtime-core.esm-bundler-DCfIpxDt.js";const C={data:()=>({formValidation:new q,firstPartFields:[],secondPartFields:[],fields:[],isLoading:!1,isCheckingDatabase:!1,__:s}),computed:{form(){return this.formValidation.extractFields([...this.firstPartFields,...this.secondPartFields])},isMySQL(){return this.form.database_driver==="mysql"},isSqlite(){return this.form.database_driver==="sqlite"}},methods:{validate(){if(this.formValidation.validateFields(this.firstPartFields)&&this.formValidation.validateFields(this.secondPartFields)){this.isLoading=!0,this.formValidation.disableFields(this.firstPartFields),this.formValidation.disableFields(this.secondPartFields);const e={...this.formValidation.getValue(this.firstPartFields),...this.formValidation.getValue(this.secondPartFields)};this.checkDatabase(e).subscribe(d=>{this.formValidation.enableFields(this.firstPartFields),this.formValidation.enableFields(this.secondPartFields),nsRouter.push("configuration"),nsSnackBar.success(d.message,s("OKAY"),{duration:5e3}).subscribe()},d=>{this.formValidation.enableFields(this.firstPartFields),this.formValidation.enableFields(this.secondPartFields),this.isLoading=!1,nsSnackBar.error(d.message,s("OKAY")).subscribe()})}},checkDatabase(e){return nsHttpClient.post("/api/setup/database",e)},checkExisting(){return nsHttpClient.get("/api/setup/check-database")},sliceRange(e,l,d){const _=e.length,u=Math.ceil(_/l);return e.splice(d*u,u)},loadFields(){this.fields=this.formValidation.createFields([{label:s("Driver"),description:s("Set the database driver"),name:"database_driver",value:"mysql",type:"select",options:[{label:"MySQL",value:"mysql"},{label:"SQLite",value:"sqlite"}],validation:"required"},{label:s("Hostname"),description:s("Provide the database hostname"),name:"hostname",value:"localhost",show:e=>e.database_driver==="mysql"},{label:s("Username"),description:s("Username required to connect to the database."),name:"username",value:"root",show:e=>e.database_driver==="mysql"},{label:s("Password"),description:s("The username password required to connect."),name:"password",value:"",show:e=>e.database_driver==="mysql"},{label:s("Database Name"),description:s("Provide the database name. Leave empty to use default file for SQLite Driver."),name:"database_name",value:"nexopos_v4",show:e=>e.database_driver==="mysql"},{label:s("Database Prefix"),description:s("Provide the database prefix."),name:"database_prefix",value:"ns_",validation:"required",show:e=>e.database_driver==="mysql"},{label:s("Port"),description:s("Provide the hostname port."),name:"database_port",value:"3306",validation:"required",show:e=>e.database_driver==="mysql"}]),this.firstPartFields=Object.values(this.sliceRange([...this.fields],2,0)),this.secondPartFields=Object.values(this.sliceRange([...this.fields],2,1))}},mounted(){this.isCheckingDatabase=!0,this.checkExisting().subscribe({next:e=>{nsRouter.push("configuration")},error:e=>{this.isCheckingDatabase=!1,this.loadFields()}})}},L={key:0,class:"bg-white rounded shadow my-4"},D={class:"welcome-box border-b border-gray-300 p-3 text-gray-600"},x={class:"border-b pb-4 mb-4"},B={key:0},M={class:"font-bold text-lg"},N={key:1},Q={class:"font-bold text-lg"},j={class:"md:-mx-4 md:flex"},O={class:"md:px-4 md:w-1/2 w-full"},R={class:"md:px-4 md:w-1/2 w-full"},H={class:"bg-gray-200 p-3 flex justify-end"},$={key:1,class:"bg-white shadow rounded p-3 flex justify-center items-center"},E={class:"flex items-center"},Y={class:"ml-3"};function z(e,l,d,_,u,c){const v=b("ns-field"),g=b("ns-spinner"),w=b("ns-button");return i(),o(h,null,[e.isCheckingDatabase?n("",!0):(i(),o("div",L,[t("div",D,[t("div",x,[c.isMySQL?(i(),o("div",B,[t("h3",M,r(e.__("MySQL is selected as database driver")),1),t("p",null,r(e.__("Please provide the credentials to ensure NexoPOS can connect to the database.")),1)])):n("",!0),c.isSqlite?(i(),o("div",N,[t("h3",Q,r(e.__("Sqlite is selected as database driver")),1),t("p",null,r(e.__("Make sure Sqlite module is available for PHP. Your database will be located on the database directory.")),1)])):n("",!0)]),t("div",j,[t("div",O,[(i(!0),o(h,null,F(e.firstPartFields,(a,m)=>(i(),o(h,{key:m},[a.show===void 0||a.show!==void 0&&a.show(c.form)?(i(),f(v,{key:0,field:a,onChange:V=>e.formValidation.validateField(a)},{default:p(()=>[t("span",null,r(a.label),1),y(e.$slots,"description",{},()=>[P(r(a.description),1)])]),_:2},1032,["field","onChange"])):n("",!0)],64))),128))]),t("div",R,[(i(!0),o(h,null,F(e.secondPartFields,(a,m)=>(i(),o(h,{key:m},[a.show===void 0||a.show!==void 0&&a.show(c.form)?(i(),f(v,{key:0,field:a,onChange:V=>e.formValidation.validateField(a)},{default:p(()=>[t("span",null,r(a.label),1),y(e.$slots,"description",{},()=>[P(r(a.description),1)])]),_:2},1032,["field","onChange"])):n("",!0)],64))),128))])])]),t("div",H,[k(w,{disabled:e.isLoading,onClick:l[0]||(l[0]=a=>c.validate()),type:"info"},{default:p(()=>[e.isLoading?(i(),f(g,{key:0,class:"mr-2",size:6})):n("",!0),t("span",null,r(e.__("Save Settings")),1)]),_:1},8,["disabled"])])])),e.isCheckingDatabase?(i(),o("div",$,[t("div",E,[k(g,{size:10}),t("span",Y,r(e.__("Checking database connectivity...")),1)])])):n("",!0)],64)}const G=S(C,[["render",z]]);export{G as default}; diff --git a/public/build/assets/database-CNaRWbeu.js b/public/build/assets/database-CNaRWbeu.js new file mode 100644 index 000000000..c6bb26ff8 --- /dev/null +++ b/public/build/assets/database-CNaRWbeu.js @@ -0,0 +1 @@ +import{F as q}from"./bootstrap-Bpe5LRJd.js";import{_ as s}from"./currency-lOMYG1Wf.js";import{_ as S}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as b,o as i,c as o,a as t,t as r,e as n,F as h,b as F,g as f,w as p,A as y,i as P,f as w}from"./runtime-core.esm-bundler-RT2b-_3S.js";const C={data:()=>({formValidation:new q,firstPartFields:[],secondPartFields:[],fields:[],isLoading:!1,isCheckingDatabase:!1,__:s}),computed:{form(){return this.formValidation.extractFields([...this.firstPartFields,...this.secondPartFields])},isMySQL(){return this.form.database_driver==="mysql"},isSqlite(){return this.form.database_driver==="sqlite"}},methods:{validate(){if(this.formValidation.validateFields(this.firstPartFields)&&this.formValidation.validateFields(this.secondPartFields)){this.isLoading=!0,this.formValidation.disableFields(this.firstPartFields),this.formValidation.disableFields(this.secondPartFields);const e={...this.formValidation.getValue(this.firstPartFields),...this.formValidation.getValue(this.secondPartFields)};this.checkDatabase(e).subscribe(d=>{this.formValidation.enableFields(this.firstPartFields),this.formValidation.enableFields(this.secondPartFields),nsRouter.push("configuration"),nsSnackBar.success(d.message,s("OKAY"),{duration:5e3}).subscribe()},d=>{this.formValidation.enableFields(this.firstPartFields),this.formValidation.enableFields(this.secondPartFields),this.isLoading=!1,nsSnackBar.error(d.message,s("OKAY")).subscribe()})}},checkDatabase(e){return nsHttpClient.post("/api/setup/database",e)},checkExisting(){return nsHttpClient.get("/api/setup/check-database")},sliceRange(e,l,d){const _=e.length,u=Math.ceil(_/l);return e.splice(d*u,u)},loadFields(){this.fields=this.formValidation.createFields([{label:s("Driver"),description:s("Set the database driver"),name:"database_driver",value:"mysql",type:"select",options:[{label:"MySQL",value:"mysql"},{label:"SQLite",value:"sqlite"}],validation:"required"},{label:s("Hostname"),description:s("Provide the database hostname"),name:"hostname",value:"localhost",show:e=>e.database_driver==="mysql"},{label:s("Username"),description:s("Username required to connect to the database."),name:"username",value:"root",show:e=>e.database_driver==="mysql"},{label:s("Password"),description:s("The username password required to connect."),name:"password",value:"",show:e=>e.database_driver==="mysql"},{label:s("Database Name"),description:s("Provide the database name. Leave empty to use default file for SQLite Driver."),name:"database_name",value:"nexopos_v4",show:e=>e.database_driver==="mysql"},{label:s("Database Prefix"),description:s("Provide the database prefix."),name:"database_prefix",value:"ns_",validation:"required",show:e=>e.database_driver==="mysql"},{label:s("Port"),description:s("Provide the hostname port."),name:"database_port",value:"3306",validation:"required",show:e=>e.database_driver==="mysql"}]),this.firstPartFields=Object.values(this.sliceRange([...this.fields],2,0)),this.secondPartFields=Object.values(this.sliceRange([...this.fields],2,1))}},mounted(){this.isCheckingDatabase=!0,this.checkExisting().subscribe({next:e=>{nsRouter.push("configuration")},error:e=>{this.isCheckingDatabase=!1,this.loadFields()}})}},L={key:0,class:"bg-white rounded shadow my-4"},D={class:"welcome-box border-b border-gray-300 p-3 text-gray-600"},x={class:"border-b pb-4 mb-4"},B={key:0},M={class:"font-bold text-lg"},N={key:1},Q={class:"font-bold text-lg"},O={class:"md:-mx-4 md:flex"},R={class:"md:px-4 md:w-1/2 w-full"},j={class:"md:px-4 md:w-1/2 w-full"},H={class:"bg-gray-200 p-3 flex justify-end"},$={key:1,class:"bg-white shadow rounded p-3 flex justify-center items-center"},A={class:"flex items-center"},E={class:"ml-3"};function Y(e,l,d,_,u,c){const v=b("ns-field"),g=b("ns-spinner"),k=b("ns-button");return i(),o(h,null,[e.isCheckingDatabase?n("",!0):(i(),o("div",L,[t("div",D,[t("div",x,[c.isMySQL?(i(),o("div",B,[t("h3",M,r(e.__("MySQL is selected as database driver")),1),t("p",null,r(e.__("Please provide the credentials to ensure NexoPOS can connect to the database.")),1)])):n("",!0),c.isSqlite?(i(),o("div",N,[t("h3",Q,r(e.__("Sqlite is selected as database driver")),1),t("p",null,r(e.__("Make sure Sqlite module is available for PHP. Your database will be located on the database directory.")),1)])):n("",!0)]),t("div",O,[t("div",R,[(i(!0),o(h,null,F(e.firstPartFields,(a,m)=>(i(),o(h,{key:m},[a.show===void 0||a.show!==void 0&&a.show(c.form)?(i(),f(v,{key:0,field:a,onChange:V=>e.formValidation.validateField(a)},{default:p(()=>[t("span",null,r(a.label),1),y(e.$slots,"description",{},()=>[P(r(a.description),1)])]),_:2},1032,["field","onChange"])):n("",!0)],64))),128))]),t("div",j,[(i(!0),o(h,null,F(e.secondPartFields,(a,m)=>(i(),o(h,{key:m},[a.show===void 0||a.show!==void 0&&a.show(c.form)?(i(),f(v,{key:0,field:a,onChange:V=>e.formValidation.validateField(a)},{default:p(()=>[t("span",null,r(a.label),1),y(e.$slots,"description",{},()=>[P(r(a.description),1)])]),_:2},1032,["field","onChange"])):n("",!0)],64))),128))])])]),t("div",H,[w(k,{disabled:e.isLoading,onClick:l[0]||(l[0]=a=>c.validate()),type:"info"},{default:p(()=>[e.isLoading?(i(),f(g,{key:0,class:"mr-2",size:6})):n("",!0),t("span",null,r(e.__("Save Settings")),1)]),_:1},8,["disabled"])])])),e.isCheckingDatabase?(i(),o("div",$,[t("div",A,[w(g,{size:10}),t("span",E,r(e.__("Checking database connectivity...")),1)])])):n("",!0)],64)}const G=S(C,[["render",Y]]);export{G as default}; diff --git a/public/build/assets/dev-B4xWCH0s.js b/public/build/assets/dev-B4xWCH0s.js deleted file mode 100644 index 9249e8f7c..000000000 --- a/public/build/assets/dev-B4xWCH0s.js +++ /dev/null @@ -1 +0,0 @@ -import{c as A,d as B,e as H,b as h}from"./components-CSb5I62o.js";import{h as $,c as y}from"./tax-BACo6kIE.js";import{c as G,a as M}from"./vue-router-a91u3jqz.js";import{_ as d}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index.es-BED_8l8F.js";import"./bootstrap-B7E2wy_a.js";import"./ns-prompt-popup-BbWKrSku.js";import{r as o,o as u,c as f,g as e,w as l,j as s,F as g,b as D,t as k}from"./runtime-core.esm-bundler-DCfIpxDt.js";import"./ns-alert-popup-DDoxXsJC.js";import"./currency-ZXKMLAC0.js";import"./ns-avatar-image-C_oqdj76.js";const T={name:"date",components:{nsDatepicker:A},computed:{formattedDate(){return $(this.date).format("YYYY-MM-DD HH:MM:ss")}},data(){return{active:"demo",date:$().format(),field:{label:"Date",name:"range",description:"a date range picker",value:{startDate:$().clone().subtract(1,"week").format(),endDate:$().format()}}}}};function w(_,n,m,b,t,v){const c=o("ns-page-title"),a=o("ns-tabs-item"),r=o("ns-datepicker"),p=o("ns-tabs");return u(),f(g,null,[e(c,null,{title:l(()=>[s("Date Picker")]),description:l(()=>[s("A simple date picker")]),_:1}),e(p,{active:t.active,onActive:n[1]||(n[1]=i=>t.active=i)},{default:l(()=>[e(a,{identifier:"general",label:"General"}),e(a,{identifier:"demo",label:"Demo"},{default:l(()=>[e(r,{onSet:n[0]||(n[0]=i=>t.date=i),date:t.date},null,8,["date"])]),_:1})]),_:1},8,["active"])],64)}const F=d(T,[["render",w]]),P={name:"datepicker",components:{nsDaterangePicker:B},data(){return{active:"demo",field:{label:"Date",name:"range",description:"a date range picker"}}}};function C(_,n,m,b,t,v){const c=o("ns-page-title"),a=o("ns-tabs-item"),r=o("ns-daterange-picker"),p=o("ns-tabs");return u(),f(g,null,[e(c,null,{title:l(()=>[s("Date Range Picker")]),description:l(()=>[s("selects a range as a date.")]),_:1}),e(p,{active:t.active,onActive:n[0]||(n[0]=i=>t.active=i)},{default:l(()=>[e(a,{identifier:"general",label:"General"}),e(a,{identifier:"demo",label:"Demo"},{default:l(()=>[e(r,{field:t.field},null,8,["field"]),D("div",null,k(t.field),1)]),_:1})]),_:1},8,["active"])],64)}const I=d(P,[["render",C]]),S={components:{nsDateTimePicker:H},data(){return{active:"demo",field:{label:"Date",name:"date",description:"a sample datetime field",value:""}}}};function Y(_,n,m,b,t,v){const c=o("ns-page-title"),a=o("ns-tabs-item"),r=o("ns-date-time-picker"),p=o("ns-tabs");return u(),f(g,null,[e(c,null,{title:l(()=>[s("Date Time Picker")]),description:l(()=>[s("A date time picker.")]),_:1}),e(p,{active:t.active,onActive:n[0]||(n[0]=i=>t.active=i)},{default:l(()=>[e(a,{identifier:"general",label:"General"}),e(a,{identifier:"demo",label:"Demo"},{default:l(()=>[e(r,{field:t.field},null,8,["field"]),D("div",null,k(t.field),1)]),_:1})]),_:1},8,["active"])],64)}const L=d(S,[["render",Y]]),N={name:"index"};function R(_,n,m,b,t,v){return u(),f("h1",null,"Index")}const V=d(N,[["render",R]]),U={name:"input-label",data(){return{console,active:"demo",field:{label:"Tag Selector",name:"tag_selector",type:"inline-multiselect",value:"",options:[{label:"Home",value:"home"},{label:"Bar",value:"bar"},{label:"Foo",value:"foo"}]}}}};function j(_,n,m,b,t,v){const c=o("ns-page-title"),a=o("ns-tabs-item"),r=o("ns-inline-multiselect"),p=o("ns-tabs");return u(),f(g,null,[e(c,null,{title:l(()=>[s("Labels")]),description:l(()=>[s("creates a label selector fields.")]),_:1}),e(p,{active:t.active,onActive:n[2]||(n[2]=i=>t.active=i)},{default:l(()=>[e(a,{identifier:"general",label:"General"}),e(a,{identifier:"demo",label:"Demo"},{default:l(()=>[e(r,{onChange:n[0]||(n[0]=i=>console.log(i)),onBlur:n[1]||(n[1]=i=>console.log(i)),field:t.field},null,8,["field"]),D("div",null,k(t.field),1)]),_:1})]),_:1},8,["active"])],64)}const E=d(U,[["render",j]]),W={},q={class:"p-4 flex flex-col flex-auto"};function z(_,n){const m=o("router-view");return u(),f("div",q,[e(m)])}const J=d(W,[["render",z]]),K={name:"input-label",data(){return{active:"demo",field:{label:"Tag Selector",name:"tag_selector",type:"multiselect",value:"",options:[{label:"Home",value:"home"},{label:"Bar",value:"bar"},{label:"Foo",value:"foo"}]}}}};function O(_,n,m,b,t,v){const c=o("ns-page-title"),a=o("ns-tabs-item"),r=o("ns-field"),p=o("ns-tabs");return u(),f(g,null,[e(c,null,{title:l(()=>[s("Labels")]),description:l(()=>[s("creates a label selector fields.")]),_:1}),e(p,{active:t.active,onActive:n[0]||(n[0]=i=>t.active=i)},{default:l(()=>[e(a,{identifier:"general",label:"General"}),e(a,{identifier:"demo",label:"Demo"},{default:l(()=>[e(r,{field:t.field},null,8,["field"]),D("div",null,k(t.field),1)]),_:1})]),_:1},8,["active"])],64)}const Q=d(K,[["render",O]]),X={name:"input-label",data(){return{active:"demo",field:{label:"Upload",name:"uploader",type:"upload",value:"",options:[{label:"Home",value:"home"},{label:"Bar",value:"bar"},{label:"Foo",value:"foo"}]}}}};function Z(_,n,m,b,t,v){const c=o("ns-page-title"),a=o("ns-tabs-item"),r=o("ns-field"),p=o("ns-tabs");return u(),f(g,null,[e(c,null,{title:l(()=>[s("Labels")]),description:l(()=>[s("creates a label selector fields.")]),_:1}),e(p,{active:t.active,onActive:n[0]||(n[0]=i=>t.active=i)},{default:l(()=>[e(a,{identifier:"general",label:"General"}),e(a,{identifier:"demo",label:"Demo"},{default:l(()=>[e(r,{field:t.field},null,8,["field"]),D("div",null,k(t.field),1)]),_:1})]),_:1},8,["active"])],64)}const ee=d(X,[["render",Z]]),te=[{path:"/",component:V},{path:"/inputs",component:J,children:[{path:"date",component:F},{path:"daterange",component:I},{path:"datetime",component:L},{path:"inline-multiselect",component:E},{path:"multiselect",component:Q},{path:"upload",component:ee}]}],ne=G({history:M(),routes:te}),x=y({});for(const _ in h)x.component(_,h[_]);x.use(ne);x.mount("#dev-app"); diff --git a/public/build/assets/dev-CGYWAcxW.js b/public/build/assets/dev-CGYWAcxW.js new file mode 100644 index 000000000..ccf02b7d5 --- /dev/null +++ b/public/build/assets/dev-CGYWAcxW.js @@ -0,0 +1 @@ +import{c as A,d as B,e as H,b as h}from"./components-RJC2qWGQ.js";import{h as $,c as y}from"./bootstrap-Bpe5LRJd.js";import{c as G,a as M}from"./vue-router-bhgvo0O9.js";import{_ as d}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index.es-Br67aBEV.js";import"./ns-prompt-popup-C2dK5WQb.js";import{r as o,o as u,c as f,f as e,w as l,i as s,F as g,a as D,t as k}from"./runtime-core.esm-bundler-RT2b-_3S.js";import"./ns-alert-popup-SVrn5Xft.js";import"./currency-lOMYG1Wf.js";import"./ns-avatar-image-CAD6xUGA.js";const T={name:"date",components:{nsDatepicker:A},computed:{formattedDate(){return $(this.date).format("YYYY-MM-DD HH:MM:ss")}},data(){return{active:"demo",date:$().format(),field:{label:"Date",name:"range",description:"a date range picker",value:{startDate:$().clone().subtract(1,"week").format(),endDate:$().format()}}}}};function w(_,n,m,b,t,v){const c=o("ns-page-title"),a=o("ns-tabs-item"),r=o("ns-datepicker"),p=o("ns-tabs");return u(),f(g,null,[e(c,null,{title:l(()=>[s("Date Picker")]),description:l(()=>[s("A simple date picker")]),_:1}),e(p,{active:t.active,onActive:n[1]||(n[1]=i=>t.active=i)},{default:l(()=>[e(a,{identifier:"general",label:"General"}),e(a,{identifier:"demo",label:"Demo"},{default:l(()=>[e(r,{onSet:n[0]||(n[0]=i=>t.date=i),date:t.date},null,8,["date"])]),_:1})]),_:1},8,["active"])],64)}const F=d(T,[["render",w]]),P={name:"datepicker",components:{nsDaterangePicker:B},data(){return{active:"demo",field:{label:"Date",name:"range",description:"a date range picker"}}}};function C(_,n,m,b,t,v){const c=o("ns-page-title"),a=o("ns-tabs-item"),r=o("ns-daterange-picker"),p=o("ns-tabs");return u(),f(g,null,[e(c,null,{title:l(()=>[s("Date Range Picker")]),description:l(()=>[s("selects a range as a date.")]),_:1}),e(p,{active:t.active,onActive:n[0]||(n[0]=i=>t.active=i)},{default:l(()=>[e(a,{identifier:"general",label:"General"}),e(a,{identifier:"demo",label:"Demo"},{default:l(()=>[e(r,{field:t.field},null,8,["field"]),D("div",null,k(t.field),1)]),_:1})]),_:1},8,["active"])],64)}const I=d(P,[["render",C]]),S={components:{nsDateTimePicker:H},data(){return{active:"demo",field:{label:"Date",name:"date",description:"a sample datetime field",value:""}}}};function Y(_,n,m,b,t,v){const c=o("ns-page-title"),a=o("ns-tabs-item"),r=o("ns-date-time-picker"),p=o("ns-tabs");return u(),f(g,null,[e(c,null,{title:l(()=>[s("Date Time Picker")]),description:l(()=>[s("A date time picker.")]),_:1}),e(p,{active:t.active,onActive:n[0]||(n[0]=i=>t.active=i)},{default:l(()=>[e(a,{identifier:"general",label:"General"}),e(a,{identifier:"demo",label:"Demo"},{default:l(()=>[e(r,{field:t.field},null,8,["field"]),D("div",null,k(t.field),1)]),_:1})]),_:1},8,["active"])],64)}const L=d(S,[["render",Y]]),N={name:"index"};function R(_,n,m,b,t,v){return u(),f("h1",null,"Index")}const V=d(N,[["render",R]]),U={name:"input-label",data(){return{console,active:"demo",field:{label:"Tag Selector",name:"tag_selector",type:"inline-multiselect",value:"",options:[{label:"Home",value:"home"},{label:"Bar",value:"bar"},{label:"Foo",value:"foo"}]}}}};function E(_,n,m,b,t,v){const c=o("ns-page-title"),a=o("ns-tabs-item"),r=o("ns-inline-multiselect"),p=o("ns-tabs");return u(),f(g,null,[e(c,null,{title:l(()=>[s("Labels")]),description:l(()=>[s("creates a label selector fields.")]),_:1}),e(p,{active:t.active,onActive:n[2]||(n[2]=i=>t.active=i)},{default:l(()=>[e(a,{identifier:"general",label:"General"}),e(a,{identifier:"demo",label:"Demo"},{default:l(()=>[e(r,{onChange:n[0]||(n[0]=i=>console.log(i)),onBlur:n[1]||(n[1]=i=>console.log(i)),field:t.field},null,8,["field"]),D("div",null,k(t.field),1)]),_:1})]),_:1},8,["active"])],64)}const W=d(U,[["render",E]]),j={},q={class:"p-4 flex flex-col flex-auto"};function z(_,n){const m=o("router-view");return u(),f("div",q,[e(m)])}const J=d(j,[["render",z]]),K={name:"input-label",data(){return{active:"demo",field:{label:"Tag Selector",name:"tag_selector",type:"multiselect",value:"",options:[{label:"Home",value:"home"},{label:"Bar",value:"bar"},{label:"Foo",value:"foo"}]}}}};function O(_,n,m,b,t,v){const c=o("ns-page-title"),a=o("ns-tabs-item"),r=o("ns-field"),p=o("ns-tabs");return u(),f(g,null,[e(c,null,{title:l(()=>[s("Labels")]),description:l(()=>[s("creates a label selector fields.")]),_:1}),e(p,{active:t.active,onActive:n[0]||(n[0]=i=>t.active=i)},{default:l(()=>[e(a,{identifier:"general",label:"General"}),e(a,{identifier:"demo",label:"Demo"},{default:l(()=>[e(r,{field:t.field},null,8,["field"]),D("div",null,k(t.field),1)]),_:1})]),_:1},8,["active"])],64)}const Q=d(K,[["render",O]]),X={name:"input-label",data(){return{active:"demo",field:{label:"Upload",name:"uploader",type:"upload",value:"",options:[{label:"Home",value:"home"},{label:"Bar",value:"bar"},{label:"Foo",value:"foo"}]}}}};function Z(_,n,m,b,t,v){const c=o("ns-page-title"),a=o("ns-tabs-item"),r=o("ns-field"),p=o("ns-tabs");return u(),f(g,null,[e(c,null,{title:l(()=>[s("Labels")]),description:l(()=>[s("creates a label selector fields.")]),_:1}),e(p,{active:t.active,onActive:n[0]||(n[0]=i=>t.active=i)},{default:l(()=>[e(a,{identifier:"general",label:"General"}),e(a,{identifier:"demo",label:"Demo"},{default:l(()=>[e(r,{field:t.field},null,8,["field"]),D("div",null,k(t.field),1)]),_:1})]),_:1},8,["active"])],64)}const ee=d(X,[["render",Z]]),te=[{path:"/",component:V},{path:"/inputs",component:J,children:[{path:"date",component:F},{path:"daterange",component:I},{path:"datetime",component:L},{path:"inline-multiselect",component:W},{path:"multiselect",component:Q},{path:"upload",component:ee}]}],ne=G({history:M(),routes:te}),x=y({});for(const _ in h)x.component(_,h[_]);x.use(ne);x.mount("#dev-app"); diff --git a/public/build/assets/index.es-BED_8l8F.js b/public/build/assets/index.es-Br67aBEV.js similarity index 99% rename from public/build/assets/index.es-BED_8l8F.js rename to public/build/assets/index.es-Br67aBEV.js index 72074e195..04e8c1d8a 100644 --- a/public/build/assets/index.es-BED_8l8F.js +++ b/public/build/assets/index.es-Br67aBEV.js @@ -1,4 +1,4 @@ -import{d as $}from"./currency-ZXKMLAC0.js";function K1(e){for(var t="#",a=1;a diff --git a/public/build/assets/join-array-DchOF3Wi.js b/public/build/assets/join-array-DPKtuOQJ.js similarity index 76% rename from public/build/assets/join-array-DchOF3Wi.js rename to public/build/assets/join-array-DPKtuOQJ.js index b794d1161..905574d38 100644 --- a/public/build/assets/join-array-DchOF3Wi.js +++ b/public/build/assets/join-array-DPKtuOQJ.js @@ -1 +1 @@ -import{_ as l}from"./currency-ZXKMLAC0.js";function f(e,n=2){if(e.length===0)return"";if(e.length===1)return e[0];if(e.length>n){let t=e.slice(0,n).join(", "),o=e.length-n,i=l("+{count} other").replace("{count}",o);return`${t}, ${i}`}return e.join(", ")}export{f as j}; +import{_ as l}from"./currency-lOMYG1Wf.js";function f(e,n=2){if(e.length===0)return"";if(e.length===1)return e[0];if(e.length>n){let t=e.slice(0,n).join(", "),o=e.length-n,i=l("+{count} other").replace("{count}",o);return`${t}, ${i}`}return e.join(", ")}export{f as j}; diff --git a/public/build/assets/la-brands-400-DF2WJeNE.svg b/public/build/assets/la-brands-400-wsUI3UJ9.svg similarity index 100% rename from public/build/assets/la-brands-400-DF2WJeNE.svg rename to public/build/assets/la-brands-400-wsUI3UJ9.svg diff --git a/public/build/assets/la-regular-400-DEMIstEh.svg b/public/build/assets/la-regular-400-BmVb34ql.svg similarity index 100% rename from public/build/assets/la-regular-400-DEMIstEh.svg rename to public/build/assets/la-regular-400-BmVb34ql.svg diff --git a/public/build/assets/la-solid-900-D5IO3BOs.svg b/public/build/assets/la-solid-900-dtlPMWb8.svg similarity index 100% rename from public/build/assets/la-solid-900-D5IO3BOs.svg rename to public/build/assets/la-solid-900-dtlPMWb8.svg diff --git a/public/build/assets/line-awesome-FxHwf9JB.css b/public/build/assets/line-awesome-BsCcXKB-.css similarity index 99% rename from public/build/assets/line-awesome-FxHwf9JB.css rename to public/build/assets/line-awesome-BsCcXKB-.css index fbaeb5058..9a3da5bbd 100644 --- a/public/build/assets/line-awesome-FxHwf9JB.css +++ b/public/build/assets/line-awesome-BsCcXKB-.css @@ -1 +1 @@ -.lar,.las,.lab{-moz-osx-font-surface-tertiarying:grayscale;-webkit-font-surface-tertiarying:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}@font-face{font-family:Line Awesome Brands;font-style:normal;font-weight:400;font-display:auto;src:url(./la-brands-400-LN4CMlGg.eot);src:url(./la-brands-400-LN4CMlGg.eot?#iefix) format("embedded-opentype"),url(./la-brands-400-Cq-R4OEF.woff2) format("woff2"),url(./la-brands-400-D0lxOIwB.woff) format("woff"),url(./la-brands-400-gDglUfU7.ttf) format("truetype"),url(./la-brands-400-DF2WJeNE.svg#lineawesome) format("svg")}.lab{font-family:Line Awesome Brands;font-weight:400}@font-face{font-family:Line Awesome Free;font-style:normal;font-weight:400;font-display:auto;src:url(./la-regular-400-Cx6vm3uW.eot);src:url(./la-regular-400-Cx6vm3uW.eot?#iefix) format("embedded-opentype"),url(./la-regular-400-DuFMN_sw.woff2) format("woff2"),url(./la-regular-400-ehe5HgcS.woff) format("woff"),url(./la-regular-400-CmnW_RTo.ttf) format("truetype"),url(./la-regular-400-DEMIstEh.svg#lineawesome) format("svg")}.lar{font-family:Line Awesome Free;font-weight:400}@font-face{font-family:Line Awesome Free;font-style:normal;font-weight:900;font-display:auto;src:url(./la-solid-900-DkmX4G2x.eot);src:url(./la-solid-900-DkmX4G2x.eot?#iefix) format("embedded-opentype"),url(./la-solid-900-TjMEgv3Q.woff2) format("woff2"),url(./la-solid-900-CR_Kd-su.woff) format("woff"),url(./la-solid-900-BUOWlSBQ.ttf) format("truetype"),url(./la-solid-900-D5IO3BOs.svg#lineawesome) format("svg")}.las{font-family:Line Awesome Free;font-weight:900}.la-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.la-xs{font-size:.75em}.la-2x{font-size:2em}.la-3x{font-size:3em}.la-4x{font-size:4em}.la-5x{font-size:5em}.la-6x{font-size:6em}.la-7x{font-size:7em}.la-8x{font-size:8em}.la-9x{font-size:9em}.la-10x{font-size:10em}.la-fw{width:1.25em;text-align:center}.la-ul{padding-left:0;margin-left:1.4285714286em;list-style-type:none}.la-ul>li{position:relative}.la-li{position:absolute;left:-2em;text-align:center;width:1.4285714286em;line-height:inherit}.la-li.la-lg{left:-1.1428571429em}.la-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.la.la-pull-left{margin-right:.3em}.la.la-pull-right{margin-left:.3em}.la.pull-left{margin-right:.3em}.la.pull-right{margin-left:.3em}.la-pull-left{float:left}.la-pull-right{float:right}.la.la-pull-left,.las.la-pull-left,.lar.la-pull-left,.lal.la-pull-left,.lab.la-pull-left{margin-right:.3em}.la.la-pull-right,.las.la-pull-right,.lar.la-pull-right,.lal.la-pull-right,.lab.la-pull-right{margin-left:.3em}.la-spin{-webkit-animation:la-spin 2s infinite linear;animation:la-spin 2s infinite linear}.la-pulse{-webkit-animation:la-spin 1s infinite steps(8);animation:la-spin 1s infinite steps(8)}@-webkit-keyframes la-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes la-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.la-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.la-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.la-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.la-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);transform:scaleX(-1)}.la-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);transform:scaleY(-1)}.la-flip-both,.la-flip-horizontal.la-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(-1,-1);transform:scale(-1)}:root .la-rotate-90,:root .la-rotate-180,:root .la-rotate-270,:root .la-flip-horizontal,:root .la-flip-vertical,:root .la-flip-both{-webkit-filter:none;filter:none}.la-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.la-stack-1x,.la-stack-2x{left:0;position:absolute;text-align:center;width:100%}.la-stack-1x{line-height:inherit}.la-stack-2x{font-size:2em}.la-inverse{color:#fff}.la-500px:before{content:""}.la-accessible-icon:before{content:""}.la-accusoft:before{content:""}.la-acquisitions-incorporated:before{content:""}.la-ad:before{content:""}.la-address-book:before{content:""}.la-address-card:before{content:""}.la-adjust:before{content:""}.la-adn:before{content:""}.la-adobe:before{content:""}.la-adversal:before{content:""}.la-affiliatetheme:before{content:""}.la-air-freshener:before{content:""}.la-airbnb:before{content:""}.la-algolia:before{content:""}.la-align-center:before{content:""}.la-align-justify:before{content:""}.la-align-left:before{content:""}.la-align-right:before{content:""}.la-alipay:before{content:""}.la-allergies:before{content:""}.la-amazon:before{content:""}.la-amazon-pay:before{content:""}.la-ambulance:before{content:""}.la-american-sign-language-interpreting:before{content:""}.la-amilia:before{content:""}.la-anchor:before{content:""}.la-android:before{content:""}.la-angellist:before{content:""}.la-angle-double-down:before{content:""}.la-angle-double-left:before{content:""}.la-angle-double-right:before{content:""}.la-angle-double-up:before{content:""}.la-angle-down:before{content:""}.la-angle-left:before{content:""}.la-angle-right:before{content:""}.la-angle-up:before{content:""}.la-angry:before{content:""}.la-angrycreative:before{content:""}.la-angular:before{content:""}.la-ankh:before{content:""}.la-app-store:before{content:""}.la-app-store-ios:before{content:""}.la-apper:before{content:""}.la-apple:before{content:""}.la-apple-alt:before{content:""}.la-apple-pay:before{content:""}.la-archive:before{content:""}.la-archway:before{content:""}.la-arrow-alt-circle-down:before{content:""}.la-arrow-alt-circle-left:before{content:""}.la-arrow-alt-circle-right:before{content:""}.la-arrow-alt-circle-up:before{content:""}.la-arrow-circle-down:before{content:""}.la-arrow-circle-left:before{content:""}.la-arrow-circle-right:before{content:""}.la-arrow-circle-up:before{content:""}.la-arrow-down:before{content:""}.la-arrow-left:before{content:""}.la-arrow-right:before{content:""}.la-arrow-up:before{content:""}.la-arrows-alt:before{content:""}.la-arrows-alt-h:before{content:""}.la-arrows-alt-v:before{content:""}.la-artstation:before{content:""}.la-assistive-listening-systems:before{content:""}.la-asterisk:before{content:""}.la-asymmetrik:before{content:""}.la-at:before{content:""}.la-atlas:before{content:""}.la-atlassian:before{content:""}.la-atom:before{content:""}.la-audible:before{content:""}.la-audio-description:before{content:""}.la-autoprefixer:before{content:""}.la-avianex:before{content:""}.la-aviato:before{content:""}.la-award:before{content:""}.la-aws:before{content:""}.la-baby:before{content:""}.la-baby-carriage:before{content:""}.la-backspace:before{content:""}.la-backward:before{content:""}.la-bacon:before{content:""}.la-balance-scale:before{content:""}.la-balance-scale-left:before{content:""}.la-balance-scale-right:before{content:""}.la-ban:before{content:""}.la-band-aid:before{content:""}.la-bandcamp:before{content:""}.la-barcode:before{content:""}.la-bars:before{content:""}.la-baseball-ball:before{content:""}.la-basketball-ball:before{content:""}.la-bath:before{content:""}.la-battery-empty:before{content:""}.la-battery-full:before{content:""}.la-battery-half:before{content:""}.la-battery-quarter:before{content:""}.la-battery-three-quarters:before{content:""}.la-battle-net:before{content:""}.la-bed:before{content:""}.la-beer:before{content:""}.la-behance:before{content:""}.la-behance-square:before{content:""}.la-bell:before{content:""}.la-bell-slash:before{content:""}.la-bezier-curve:before{content:""}.la-bible:before{content:""}.la-bicycle:before{content:""}.la-biking:before{content:""}.la-bimobject:before{content:""}.la-binoculars:before{content:""}.la-biohazard:before{content:""}.la-birthday-cake:before{content:""}.la-bitbucket:before{content:""}.la-bitcoin:before{content:""}.la-bity:before{content:""}.la-black-tie:before{content:""}.la-blackberry:before{content:""}.la-blender:before{content:""}.la-blender-phone:before{content:""}.la-blind:before{content:""}.la-blog:before{content:""}.la-blogger:before{content:""}.la-blogger-b:before{content:""}.la-bluetooth:before{content:""}.la-bluetooth-b:before{content:""}.la-bold:before{content:""}.la-bolt:before{content:""}.la-bomb:before{content:""}.la-bone:before{content:""}.la-bong:before{content:""}.la-book:before{content:""}.la-book-dead:before{content:""}.la-book-medical:before{content:""}.la-book-open:before{content:""}.la-book-reader:before{content:""}.la-bookmark:before{content:""}.la-bootstrap:before{content:""}.la-border-all:before{content:""}.la-border-none:before{content:""}.la-border-style:before{content:""}.la-bowling-ball:before{content:""}.la-box:before{content:""}.la-box-open:before{content:""}.la-boxes:before{content:""}.la-braille:before{content:""}.la-brain:before{content:""}.la-bread-slice:before{content:""}.la-briefcase:before{content:""}.la-briefcase-medical:before{content:""}.la-broadcast-tower:before{content:""}.la-broom:before{content:""}.la-brush:before{content:""}.la-btc:before{content:""}.la-buffer:before{content:""}.la-bug:before{content:""}.la-building:before{content:""}.la-bullhorn:before{content:""}.la-bullseye:before{content:""}.la-burn:before{content:""}.la-buromobelexperte:before{content:""}.la-bus:before{content:""}.la-bus-alt:before{content:""}.la-business-time:before{content:""}.la-buysellads:before{content:""}.la-calculator:before{content:""}.la-calendar:before{content:""}.la-calendar-alt:before{content:""}.la-calendar-check:before{content:""}.la-calendar-day:before{content:""}.la-calendar-minus:before{content:""}.la-calendar-plus:before{content:""}.la-calendar-times:before{content:""}.la-calendar-week:before{content:""}.la-camera:before{content:""}.la-camera-retro:before{content:""}.la-campground:before{content:""}.la-canadian-maple-leaf:before{content:""}.la-candy-cane:before{content:""}.la-cannabis:before{content:""}.la-capsules:before{content:""}.la-car:before{content:""}.la-car-alt:before{content:""}.la-car-battery:before{content:""}.la-car-crash:before{content:""}.la-car-side:before{content:""}.la-caret-down:before{content:""}.la-caret-left:before{content:""}.la-caret-right:before{content:""}.la-caret-square-down:before{content:""}.la-caret-square-left:before{content:""}.la-caret-square-right:before{content:""}.la-caret-square-up:before{content:""}.la-caret-up:before{content:""}.la-carrot:before{content:""}.la-cart-arrow-down:before{content:""}.la-cart-plus:before{content:""}.la-cash-register:before{content:""}.la-cat:before{content:""}.la-cc-amazon-pay:before{content:""}.la-cc-amex:before{content:""}.la-cc-apple-pay:before{content:""}.la-cc-diners-club:before{content:""}.la-cc-discover:before{content:""}.la-cc-jcb:before{content:""}.la-cc-mastercard:before{content:""}.la-cc-paypal:before{content:""}.la-cc-stripe:before{content:""}.la-cc-visa:before{content:""}.la-centercode:before{content:""}.la-centos:before{content:""}.la-certificate:before{content:""}.la-chair:before{content:""}.la-chalkboard:before{content:""}.la-chalkboard-teacher:before{content:""}.la-charging-station:before{content:""}.la-chart-area:before{content:""}.la-chart-bar:before{content:""}.la-chart-line:before{content:""}.la-chart-pie:before{content:""}.la-check:before{content:""}.la-check-circle:before{content:""}.la-check-double:before{content:""}.la-check-square:before{content:""}.la-cheese:before{content:""}.la-chess:before{content:""}.la-chess-bishop:before{content:""}.la-chess-board:before{content:""}.la-chess-king:before{content:""}.la-chess-knight:before{content:""}.la-chess-pawn:before{content:""}.la-chess-queen:before{content:""}.la-chess-rook:before{content:""}.la-chevron-circle-down:before{content:""}.la-chevron-circle-left:before{content:""}.la-chevron-circle-right:before{content:""}.la-chevron-circle-up:before{content:""}.la-chevron-down:before{content:""}.la-chevron-left:before{content:""}.la-chevron-right:before{content:""}.la-chevron-up:before{content:""}.la-child:before{content:""}.la-chrome:before{content:""}.la-chromecast:before{content:""}.la-church:before{content:""}.la-circle:before{content:""}.la-circle-notch:before{content:""}.la-city:before{content:""}.la-clinic-medical:before{content:""}.la-clipboard:before{content:""}.la-clipboard-check:before{content:""}.la-clipboard-list:before{content:""}.la-clock:before{content:""}.la-clone:before{content:""}.la-closed-captioning:before{content:""}.la-cloud:before{content:""}.la-cloud-download-alt:before{content:""}.la-cloud-meatball:before{content:""}.la-cloud-moon:before{content:""}.la-cloud-moon-rain:before{content:""}.la-cloud-rain:before{content:""}.la-cloud-showers-heavy:before{content:""}.la-cloud-sun:before{content:""}.la-cloud-sun-rain:before{content:""}.la-cloud-upload-alt:before{content:""}.la-cloudscale:before{content:""}.la-cloudsmith:before{content:""}.la-cloudversify:before{content:""}.la-cocktail:before{content:""}.la-code:before{content:""}.la-code-branch:before{content:""}.la-codepen:before{content:""}.la-codiepie:before{content:""}.la-coffee:before{content:""}.la-cog:before{content:""}.la-cogs:before{content:""}.la-coins:before{content:""}.la-columns:before{content:""}.la-comment:before{content:""}.la-comment-alt:before{content:""}.la-comment-dollar:before{content:""}.la-comment-dots:before{content:""}.la-comment-medical:before{content:""}.la-comment-slash:before{content:""}.la-comments:before{content:""}.la-comments-dollar:before{content:""}.la-compact-disc:before{content:""}.la-compass:before{content:""}.la-compress:before{content:""}.la-compress-arrows-alt:before{content:""}.la-concierge-bell:before{content:""}.la-confluence:before{content:""}.la-connectdevelop:before{content:""}.la-contao:before{content:""}.la-cookie:before{content:""}.la-cookie-bite:before{content:""}.la-copy:before{content:""}.la-copyright:before{content:""}.la-cotton-bureau:before{content:""}.la-couch:before{content:""}.la-cpanel:before{content:""}.la-creative-commons:before{content:""}.la-creative-commons-by:before{content:""}.la-creative-commons-nc:before{content:""}.la-creative-commons-nc-eu:before{content:""}.la-creative-commons-nc-jp:before{content:""}.la-creative-commons-nd:before{content:""}.la-creative-commons-pd:before{content:""}.la-creative-commons-pd-alt:before{content:""}.la-creative-commons-remix:before{content:""}.la-creative-commons-sa:before{content:""}.la-creative-commons-sampling:before{content:""}.la-creative-commons-sampling-plus:before{content:""}.la-creative-commons-share:before{content:""}.la-creative-commons-zero:before{content:""}.la-credit-card:before{content:""}.la-critical-role:before{content:""}.la-crop:before{content:""}.la-crop-alt:before{content:""}.la-cross:before{content:""}.la-crosshairs:before{content:""}.la-crow:before{content:""}.la-crown:before{content:""}.la-crutch:before{content:""}.la-css3:before{content:""}.la-css3-alt:before{content:""}.la-cube:before{content:""}.la-cubes:before{content:""}.la-cut:before{content:""}.la-cuttlefish:before{content:""}.la-d-and-d:before{content:""}.la-d-and-d-beyond:before{content:""}.la-dashcube:before{content:""}.la-database:before{content:""}.la-deaf:before{content:""}.la-delicious:before{content:""}.la-democrat:before{content:""}.la-deploydog:before{content:""}.la-deskpro:before{content:""}.la-desktop:before{content:""}.la-dev:before{content:""}.la-deviantart:before{content:""}.la-dharmachakra:before{content:""}.la-dhl:before{content:""}.la-diagnoses:before{content:""}.la-diaspora:before{content:""}.la-dice:before{content:""}.la-dice-d20:before{content:""}.la-dice-d6:before{content:""}.la-dice-five:before{content:""}.la-dice-four:before{content:""}.la-dice-one:before{content:""}.la-dice-six:before{content:""}.la-dice-three:before{content:""}.la-dice-two:before{content:""}.la-digg:before{content:""}.la-digital-ocean:before{content:""}.la-digital-tachograph:before{content:""}.la-directions:before{content:""}.la-discord:before{content:""}.la-discourse:before{content:""}.la-divide:before{content:""}.la-dizzy:before{content:""}.la-dna:before{content:""}.la-dochub:before{content:""}.la-docker:before{content:""}.la-dog:before{content:""}.la-dollar-sign:before{content:""}.la-dolly:before{content:""}.la-dolly-flatbed:before{content:""}.la-donate:before{content:""}.la-door-closed:before{content:""}.la-door-open:before{content:""}.la-dot-circle:before{content:""}.la-dove:before{content:""}.la-download:before{content:""}.la-draft2digital:before{content:""}.la-drafting-compass:before{content:""}.la-dragon:before{content:""}.la-draw-polygon:before{content:""}.la-dribbble:before{content:""}.la-dribbble-square:before{content:""}.la-dropbox:before{content:""}.la-drum:before{content:""}.la-drum-steelpan:before{content:""}.la-drumstick-bite:before{content:""}.la-drupal:before{content:""}.la-dumbbell:before{content:""}.la-dumpster:before{content:""}.la-dumpster-fire:before{content:""}.la-dungeon:before{content:""}.la-dyalog:before{content:""}.la-earlybirds:before{content:""}.la-ebay:before{content:""}.la-edge:before{content:""}.la-edit:before{content:""}.la-egg:before{content:""}.la-eject:before{content:""}.la-elementor:before{content:""}.la-ellipsis-h:before{content:""}.la-ellipsis-v:before{content:""}.la-ello:before{content:""}.la-ember:before{content:""}.la-empire:before{content:""}.la-envelope:before{content:""}.la-envelope-open:before{content:""}.la-envelope-open-text:before{content:""}.la-envelope-square:before{content:""}.la-envira:before{content:""}.la-equals:before{content:""}.la-eraser:before{content:""}.la-erlang:before{content:""}.la-ethereum:before{content:""}.la-ethernet:before{content:""}.la-etsy:before{content:""}.la-euro-sign:before{content:""}.la-evernote:before{content:""}.la-exchange-alt:before{content:""}.la-exclamation:before{content:""}.la-exclamation-circle:before{content:""}.la-exclamation-triangle:before{content:""}.la-expand:before{content:""}.la-expand-arrows-alt:before{content:""}.la-expeditedssl:before{content:""}.la-external-link-alt:before{content:""}.la-external-link-square-alt:before{content:""}.la-eye:before{content:""}.la-eye-dropper:before{content:""}.la-eye-slash:before{content:""}.la-facebook:before{content:""}.la-facebook-f:before{content:""}.la-facebook-messenger:before{content:""}.la-facebook-square:before{content:""}.la-fan:before{content:""}.la-fantasy-flight-games:before{content:""}.la-fast-backward:before{content:""}.la-fast-forward:before{content:""}.la-fax:before{content:""}.la-feather:before{content:""}.la-feather-alt:before{content:""}.la-fedex:before{content:""}.la-fedora:before{content:""}.la-female:before{content:""}.la-fighter-jet:before{content:""}.la-figma:before{content:""}.la-file:before{content:""}.la-file-alt:before{content:""}.la-file-archive:before{content:""}.la-file-audio:before{content:""}.la-file-code:before{content:""}.la-file-contract:before{content:""}.la-file-csv:before{content:""}.la-file-download:before{content:""}.la-file-excel:before{content:""}.la-file-export:before{content:""}.la-file-image:before{content:""}.la-file-import:before{content:""}.la-file-invoice:before{content:""}.la-file-invoice-dollar:before{content:""}.la-file-medical:before{content:""}.la-file-medical-alt:before{content:""}.la-file-pdf:before{content:""}.la-file-powerpoint:before{content:""}.la-file-prescription:before{content:""}.la-file-signature:before{content:""}.la-file-upload:before{content:""}.la-file-video:before{content:""}.la-file-word:before{content:""}.la-fill:before{content:""}.la-fill-drip:before{content:""}.la-film:before{content:""}.la-filter:before{content:""}.la-fingerprint:before{content:""}.la-fire:before{content:""}.la-fire-alt:before{content:""}.la-fire-extinguisher:before{content:""}.la-firefox:before{content:""}.la-first-aid:before{content:""}.la-first-order:before{content:""}.la-first-order-alt:before{content:""}.la-firstdraft:before{content:""}.la-fish:before{content:""}.la-fist-raised:before{content:""}.la-flag:before{content:""}.la-flag-checkered:before{content:""}.la-flag-usa:before{content:""}.la-flask:before{content:""}.la-flickr:before{content:""}.la-flipboard:before{content:""}.la-flushed:before{content:""}.la-fly:before{content:""}.la-folder:before{content:""}.la-folder-minus:before{content:""}.la-folder-open:before{content:""}.la-folder-plus:before{content:""}.la-font:before{content:""}.la-font-awesome:before{content:""}.la-font-awesome-alt:before{content:""}.la-font-awesome-flag:before{content:""}.la-fonticons:before{content:""}.la-fonticons-fi:before{content:""}.la-football-ball:before{content:""}.la-fort-awesome:before{content:""}.la-fort-awesome-alt:before{content:""}.la-forumbee:before{content:""}.la-forward:before{content:""}.la-foursquare:before{content:""}.la-free-code-camp:before{content:""}.la-freebsd:before{content:""}.la-frog:before{content:""}.la-frown:before{content:""}.la-frown-open:before{content:""}.la-fulcrum:before{content:""}.la-funnel-dollar:before{content:""}.la-futbol:before{content:""}.la-galactic-republic:before{content:""}.la-galactic-senate:before{content:""}.la-gamepad:before{content:""}.la-gas-pump:before{content:""}.la-gavel:before{content:""}.la-gem:before{content:""}.la-genderless:before{content:""}.la-get-pocket:before{content:""}.la-gg:before{content:""}.la-gg-circle:before{content:""}.la-ghost:before{content:""}.la-gift:before{content:""}.la-gifts:before{content:""}.la-git:before{content:""}.la-git-alt:before{content:""}.la-git-square:before{content:""}.la-github:before{content:""}.la-github-alt:before{content:""}.la-github-square:before{content:""}.la-gitkraken:before{content:""}.la-gitlab:before{content:""}.la-gitter:before{content:""}.la-glass-cheers:before{content:""}.la-glass-martini:before{content:""}.la-glass-martini-alt:before{content:""}.la-glass-whiskey:before{content:""}.la-glasses:before{content:""}.la-glide:before{content:""}.la-glide-g:before{content:""}.la-globe:before{content:""}.la-globe-africa:before{content:""}.la-globe-americas:before{content:""}.la-globe-asia:before{content:""}.la-globe-europe:before{content:""}.la-gofore:before{content:""}.la-golf-ball:before{content:""}.la-goodreads:before{content:""}.la-goodreads-g:before{content:""}.la-google:before{content:""}.la-google-drive:before{content:""}.la-google-play:before{content:""}.la-google-plus:before{content:""}.la-google-plus-g:before{content:""}.la-google-plus-square:before{content:""}.la-google-wallet:before{content:""}.la-gopuram:before{content:""}.la-graduation-cap:before{content:""}.la-gratipay:before{content:""}.la-grav:before{content:""}.la-greater-than:before{content:""}.la-greater-than-equal:before{content:""}.la-grimace:before{content:""}.la-grin:before{content:""}.la-grin-alt:before{content:""}.la-grin-beam:before{content:""}.la-grin-beam-sweat:before{content:""}.la-grin-hearts:before{content:""}.la-grin-squint:before{content:""}.la-grin-squint-tears:before{content:""}.la-grin-stars:before{content:""}.la-grin-tears:before{content:""}.la-grin-tongue:before{content:""}.la-grin-tongue-squint:before{content:""}.la-grin-tongue-wink:before{content:""}.la-grin-wink:before{content:""}.la-grip-horizontal:before{content:""}.la-grip-lines:before{content:""}.la-grip-lines-vertical:before{content:""}.la-grip-vertical:before{content:""}.la-gripfire:before{content:""}.la-grunt:before{content:""}.la-guitar:before{content:""}.la-gulp:before{content:""}.la-h-square:before{content:""}.la-hacker-news:before{content:""}.la-hacker-news-square:before{content:""}.la-hackerrank:before{content:""}.la-hamburger:before{content:""}.la-hammer:before{content:""}.la-hamsa:before{content:""}.la-hand-holding:before{content:""}.la-hand-holding-heart:before{content:""}.la-hand-holding-usd:before{content:""}.la-hand-lizard:before{content:""}.la-hand-middle-finger:before{content:""}.la-hand-paper:before{content:""}.la-hand-peace:before{content:""}.la-hand-point-down:before{content:""}.la-hand-point-left:before{content:""}.la-hand-point-right:before{content:""}.la-hand-point-up:before{content:""}.la-hand-pointer:before{content:""}.la-hand-rock:before{content:""}.la-hand-scissors:before{content:""}.la-hand-spock:before{content:""}.la-hands:before{content:""}.la-hands-helping:before{content:""}.la-handshake:before{content:""}.la-hanukiah:before{content:""}.la-surface-quaternary-hat:before{content:""}.la-hashtag:before{content:""}.la-hat-wizard:before{content:""}.la-haykal:before{content:""}.la-hdd:before{content:""}.la-heading:before{content:""}.la-headphones:before{content:""}.la-headphones-alt:before{content:""}.la-headset:before{content:""}.la-heart:before{content:""}.la-heart-broken:before{content:""}.la-heartbeat:before{content:""}.la-helicopter:before{content:""}.la-highlighter:before{content:""}.la-hiking:before{content:""}.la-hippo:before{content:""}.la-hips:before{content:""}.la-hire-a-helper:before{content:""}.la-history:before{content:""}.la-hockey-puck:before{content:""}.la-holly-berry:before{content:""}.la-home:before{content:""}.la-hooli:before{content:""}.la-hornbill:before{content:""}.la-horse:before{content:""}.la-horse-head:before{content:""}.la-hospital:before{content:""}.la-hospital-alt:before{content:""}.la-hospital-symbol:before{content:""}.la-hot-tub:before{content:""}.la-hotdog:before{content:""}.la-hotel:before{content:""}.la-hotjar:before{content:""}.la-hourglass:before{content:""}.la-hourglass-end:before{content:""}.la-hourglass-half:before{content:""}.la-hourglass-start:before{content:""}.la-house-damage:before{content:""}.la-houzz:before{content:""}.la-hryvnia:before{content:""}.la-html5:before{content:""}.la-hubspot:before{content:""}.la-i-cursor:before{content:""}.la-ice-cream:before{content:""}.la-icicles:before{content:""}.la-icons:before{content:""}.la-id-badge:before{content:""}.la-id-card:before{content:""}.la-id-card-alt:before{content:""}.la-igloo:before{content:""}.la-image:before{content:""}.la-images:before{content:""}.la-imdb:before{content:""}.la-inbox:before{content:""}.la-indent:before{content:""}.la-industry:before{content:""}.la-infinity:before{content:""}.la-info:before{content:""}.la-info-circle:before{content:""}.la-instagram:before{content:""}.la-intercom:before{content:""}.la-internet-explorer:before{content:""}.la-invision:before{content:""}.la-ioxhost:before{content:""}.la-italic:before{content:""}.la-itch-io:before{content:""}.la-itunes:before{content:""}.la-itunes-note:before{content:""}.la-java:before{content:""}.la-jedi:before{content:""}.la-jedi-order:before{content:""}.la-jenkins:before{content:""}.la-jira:before{content:""}.la-joget:before{content:""}.la-joint:before{content:""}.la-joomla:before{content:""}.la-journal-whills:before{content:""}.la-js:before{content:""}.la-js-square:before{content:""}.la-jsfiddle:before{content:""}.la-kaaba:before{content:""}.la-kaggle:before{content:""}.la-key:before{content:""}.la-keybase:before{content:""}.la-keyboard:before{content:""}.la-keycdn:before{content:""}.la-khanda:before{content:""}.la-kickstarter:before{content:""}.la-kickstarter-k:before{content:""}.la-kiss:before{content:""}.la-kiss-beam:before{content:""}.la-kiss-wink-heart:before{content:""}.la-kiwi-bird:before{content:""}.la-korvue:before{content:""}.la-landmark:before{content:""}.la-language:before{content:""}.la-laptop:before{content:""}.la-laptop-code:before{content:""}.la-laptop-medical:before{content:""}.la-laravel:before{content:""}.la-lastfm:before{content:""}.la-lastfm-square:before{content:""}.la-laugh:before{content:""}.la-laugh-beam:before{content:""}.la-laugh-squint:before{content:""}.la-laugh-wink:before{content:""}.la-layer-group:before{content:""}.la-leaf:before{content:""}.la-leanpub:before{content:""}.la-lemon:before{content:""}.la-less:before{content:""}.la-less-than:before{content:""}.la-less-than-equal:before{content:""}.la-level-down-alt:before{content:""}.la-level-up-alt:before{content:""}.la-life-ring:before{content:""}.la-lightbulb:before{content:""}.la-line:before{content:""}.la-link:before{content:""}.la-linkedin:before{content:""}.la-linkedin-in:before{content:""}.la-linode:before{content:""}.la-linux:before{content:""}.la-lira-sign:before{content:""}.la-list:before{content:""}.la-list-alt:before{content:""}.la-list-ol:before{content:""}.la-list-ul:before{content:""}.la-location-arrow:before{content:""}.la-lock:before{content:""}.la-lock-open:before{content:""}.la-long-arrow-alt-down:before{content:""}.la-long-arrow-alt-left:before{content:""}.la-long-arrow-alt-right:before{content:""}.la-long-arrow-alt-up:before{content:""}.la-low-vision:before{content:""}.la-luggage-cart:before{content:""}.la-lyft:before{content:""}.la-magento:before{content:""}.la-magic:before{content:""}.la-magnet:before{content:""}.la-mail-bulk:before{content:""}.la-mailchimp:before{content:""}.la-male:before{content:""}.la-mandalorian:before{content:""}.la-map:before{content:""}.la-map-marked:before{content:""}.la-map-marked-alt:before{content:""}.la-map-marker:before{content:""}.la-map-marker-alt:before{content:""}.la-map-pin:before{content:""}.la-map-signs:before{content:""}.la-markdown:before{content:""}.la-marker:before{content:""}.la-mars:before{content:""}.la-mars-double:before{content:""}.la-mars-stroke:before{content:""}.la-mars-stroke-h:before{content:""}.la-mars-stroke-v:before{content:""}.la-mask:before{content:""}.la-mastodon:before{content:""}.la-maxcdn:before{content:""}.la-medal:before{content:""}.la-medapps:before{content:""}.la-medium:before{content:""}.la-medium-m:before{content:""}.la-medkit:before{content:""}.la-medrt:before{content:""}.la-meetup:before{content:""}.la-megaport:before{content:""}.la-meh:before{content:""}.la-meh-blank:before{content:""}.la-meh-rolling-eyes:before{content:""}.la-memory:before{content:""}.la-mendeley:before{content:""}.la-menorah:before{content:""}.la-mercury:before{content:""}.la-meteor:before{content:""}.la-microchip:before{content:""}.la-microphone:before{content:""}.la-microphone-alt:before{content:""}.la-microphone-alt-slash:before{content:""}.la-microphone-slash:before{content:""}.la-microscope:before{content:""}.la-microsoft:before{content:""}.la-minus:before{content:""}.la-minus-circle:before{content:""}.la-minus-square:before{content:""}.la-mitten:before{content:""}.la-mix:before{content:""}.la-mixcloud:before{content:""}.la-mizuni:before{content:""}.la-mobile:before{content:""}.la-mobile-alt:before{content:""}.la-modx:before{content:""}.la-monero:before{content:""}.la-money-bill:before{content:""}.la-money-bill-alt:before{content:""}.la-money-bill-wave:before{content:""}.la-money-bill-wave-alt:before{content:""}.la-money-check:before{content:""}.la-money-check-alt:before{content:""}.la-monument:before{content:""}.la-moon:before{content:""}.la-mortar-pestle:before{content:""}.la-mosque:before{content:""}.la-motorcycle:before{content:""}.la-mountain:before{content:""}.la-mouse-pointer:before{content:""}.la-mug-hot:before{content:""}.la-music:before{content:""}.la-napster:before{content:""}.la-neos:before{content:""}.la-network-wired:before{content:""}.la-neuter:before{content:""}.la-newspaper:before{content:""}.la-nimblr:before{content:""}.la-node:before{content:""}.la-node-js:before{content:""}.la-not-equal:before{content:""}.la-notes-medical:before{content:""}.la-npm:before{content:""}.la-ns8:before{content:""}.la-nutritionix:before{content:""}.la-object-group:before{content:""}.la-object-ungroup:before{content:""}.la-odnoklassniki:before{content:""}.la-odnoklassniki-square:before{content:""}.la-oil-can:before{content:""}.la-old-republic:before{content:""}.la-om:before{content:""}.la-opencart:before{content:""}.la-openid:before{content:""}.la-opera:before{content:""}.la-optin-monster:before{content:""}.la-osi:before{content:""}.la-otter:before{content:""}.la-outdent:before{content:""}.la-page4:before{content:""}.la-pagelines:before{content:""}.la-pager:before{content:""}.la-paint-brush:before{content:""}.la-paint-roller:before{content:""}.la-palette:before{content:""}.la-palfed:before{content:""}.la-pallet:before{content:""}.la-paper-plane:before{content:""}.la-paperclip:before{content:""}.la-parachute-box:before{content:""}.la-paragraph:before{content:""}.la-parking:before{content:""}.la-passport:before{content:""}.la-pastafarianism:before{content:""}.la-paste:before{content:""}.la-patreon:before{content:""}.la-pause:before{content:""}.la-pause-circle:before{content:""}.la-paw:before{content:""}.la-paypal:before{content:""}.la-peace:before{content:""}.la-pen:before{content:""}.la-pen-alt:before{content:""}.la-pen-fancy:before{content:""}.la-pen-nib:before{content:""}.la-pen-square:before{content:""}.la-pencil-alt:before{content:""}.la-pencil-ruler:before{content:""}.la-penny-arcade:before{content:""}.la-people-carry:before{content:""}.la-pepper-hot:before{content:""}.la-percent:before{content:""}.la-percentage:before{content:""}.la-periscope:before{content:""}.la-person-booth:before{content:""}.la-phabricator:before{content:""}.la-phoenix-framework:before{content:""}.la-phoenix-squadron:before{content:""}.la-phone:before{content:""}.la-phone-alt:before{content:""}.la-phone-slash:before{content:""}.la-phone-square:before{content:""}.la-phone-square-alt:before{content:""}.la-phone-volume:before{content:""}.la-photo-video:before{content:""}.la-php:before{content:""}.la-pied-piper:before{content:""}.la-pied-piper-alt:before{content:""}.la-pied-piper-hat:before{content:""}.la-pied-piper-pp:before{content:""}.la-piggy-bank:before{content:""}.la-pills:before{content:""}.la-pinterest:before{content:""}.la-pinterest-p:before{content:""}.la-pinterest-square:before{content:""}.la-pizza-slice:before{content:""}.la-place-of-worship:before{content:""}.la-plane:before{content:""}.la-plane-arrival:before{content:""}.la-plane-departure:before{content:""}.la-play:before{content:""}.la-play-circle:before{content:""}.la-playstation:before{content:""}.la-plug:before{content:""}.la-plus:before{content:""}.la-plus-circle:before{content:""}.la-plus-square:before{content:""}.la-podcast:before{content:""}.la-poll:before{content:""}.la-poll-h:before{content:""}.la-poo:before{content:""}.la-poo-storm:before{content:""}.la-poop:before{content:""}.la-portrait:before{content:""}.la-pound-sign:before{content:""}.la-power-off:before{content:""}.la-pray:before{content:""}.la-praying-hands:before{content:""}.la-prescription:before{content:""}.la-prescription-bottle:before{content:""}.la-prescription-bottle-alt:before{content:""}.la-print:before{content:""}.la-procedures:before{content:""}.la-product-hunt:before{content:""}.la-project-diagram:before{content:""}.la-pushed:before{content:""}.la-puzzle-piece:before{content:""}.la-python:before{content:""}.la-qq:before{content:""}.la-qrcode:before{content:""}.la-question:before{content:""}.la-question-circle:before{content:""}.la-quidditch:before{content:""}.la-quinscape:before{content:""}.la-quora:before{content:""}.la-quote-left:before{content:""}.la-quote-right:before{content:""}.la-quran:before{content:""}.la-r-project:before{content:""}.la-radiation:before{content:""}.la-radiation-alt:before{content:""}.la-rainbow:before{content:""}.la-random:before{content:""}.la-raspberry-pi:before{content:""}.la-ravelry:before{content:""}.la-react:before{content:""}.la-reacteurope:before{content:""}.la-readme:before{content:""}.la-rebel:before{content:""}.la-receipt:before{content:""}.la-recycle:before{content:""}.la-red-river:before{content:""}.la-reddit:before{content:""}.la-reddit-alien:before{content:""}.la-reddit-square:before{content:""}.la-redhat:before{content:""}.la-redo:before{content:""}.la-redo-alt:before{content:""}.la-registered:before{content:""}.la-remove-format:before{content:""}.la-renren:before{content:""}.la-reply:before{content:""}.la-reply-all:before{content:""}.la-replyd:before{content:""}.la-republican:before{content:""}.la-researchgate:before{content:""}.la-resolving:before{content:""}.la-restroom:before{content:""}.la-retweet:before{content:""}.la-rev:before{content:""}.la-ribbon:before{content:""}.la-ring:before{content:""}.la-road:before{content:""}.la-robot:before{content:""}.la-rocket:before{content:""}.la-rocketchat:before{content:""}.la-rockrms:before{content:""}.la-route:before{content:""}.la-rss:before{content:""}.la-rss-square:before{content:""}.la-ruble-sign:before{content:""}.la-ruler:before{content:""}.la-ruler-combined:before{content:""}.la-ruler-horizontal:before{content:""}.la-ruler-vertical:before{content:""}.la-running:before{content:""}.la-rupee-sign:before{content:""}.la-sad-cry:before{content:""}.la-sad-tear:before{content:""}.la-safari:before{content:""}.la-salesforce:before{content:""}.la-sass:before{content:""}.la-satellite:before{content:""}.la-satellite-dish:before{content:""}.la-save:before{content:""}.la-schlix:before{content:""}.la-school:before{content:""}.la-screwdriver:before{content:""}.la-scribd:before{content:""}.la-scroll:before{content:""}.la-sd-card:before{content:""}.la-search:before{content:""}.la-search-dollar:before{content:""}.la-search-location:before{content:""}.la-search-minus:before{content:""}.la-search-plus:before{content:""}.la-searchengin:before{content:""}.la-seedling:before{content:""}.la-sellcast:before{content:""}.la-sellsy:before{content:""}.la-server:before{content:""}.la-servicestack:before{content:""}.la-shapes:before{content:""}.la-share:before{content:""}.la-share-alt:before{content:""}.la-share-alt-square:before{content:""}.la-share-square:before{content:""}.la-shekel-sign:before{content:""}.la-shield-alt:before{content:""}.la-ship:before{content:""}.la-shipping-fast:before{content:""}.la-shirtsinbulk:before{content:""}.la-shoe-prints:before{content:""}.la-shopping-bag:before{content:""}.la-shopping-basket:before{content:""}.la-shopping-cart:before{content:""}.la-shopware:before{content:""}.la-shower:before{content:""}.la-shuttle-van:before{content:""}.la-sign:before{content:""}.la-sign-in-alt:before{content:""}.la-sign-language:before{content:""}.la-sign-out-alt:before{content:""}.la-signal:before{content:""}.la-signature:before{content:""}.la-sim-card:before{content:""}.la-simplybuilt:before{content:""}.la-sistrix:before{content:""}.la-sitemap:before{content:""}.la-sith:before{content:""}.la-skating:before{content:""}.la-sketch:before{content:""}.la-skiing:before{content:""}.la-skiing-nordic:before{content:""}.la-skull:before{content:""}.la-skull-crossbones:before{content:""}.la-skyatlas:before{content:""}.la-skype:before{content:""}.la-slack:before{content:""}.la-slack-hash:before{content:""}.la-slash:before{content:""}.la-sleigh:before{content:""}.la-sliders-h:before{content:""}.la-slideshare:before{content:""}.la-smile:before{content:""}.la-smile-beam:before{content:""}.la-smile-wink:before{content:""}.la-smog:before{content:""}.la-smoking:before{content:""}.la-smoking-ban:before{content:""}.la-sms:before{content:""}.la-snapchat:before{content:""}.la-snapchat-ghost:before{content:""}.la-snapchat-square:before{content:""}.la-snowboarding:before{content:""}.la-snowflake:before{content:""}.la-snowman:before{content:""}.la-snowplow:before{content:""}.la-socks:before{content:""}.la-solar-panel:before{content:""}.la-sort:before{content:""}.la-sort-alpha-down:before{content:""}.la-sort-alpha-down-alt:before{content:""}.la-sort-alpha-up:before{content:""}.la-sort-alpha-up-alt:before{content:""}.la-sort-amount-down:before{content:""}.la-sort-amount-down-alt:before{content:""}.la-sort-amount-up:before{content:""}.la-sort-amount-up-alt:before{content:""}.la-sort-down:before{content:""}.la-sort-numeric-down:before{content:""}.la-sort-numeric-down-alt:before{content:""}.la-sort-numeric-up:before{content:""}.la-sort-numeric-up-alt:before{content:""}.la-sort-up:before{content:""}.la-soundcloud:before{content:""}.la-sourcetree:before{content:""}.la-spa:before{content:""}.la-space-shuttle:before{content:""}.la-speakap:before{content:""}.la-speaker-deck:before{content:""}.la-spell-check:before{content:""}.la-spider:before{content:""}.la-spinner:before{content:""}.la-splotch:before{content:""}.la-spotify:before{content:""}.la-spray-can:before{content:""}.la-square:before{content:""}.la-square-full:before{content:""}.la-square-root-alt:before{content:""}.la-squarespace:before{content:""}.la-stack-exchange:before{content:""}.la-stack-overflow:before{content:""}.la-stackpath:before{content:""}.la-stamp:before{content:""}.la-star:before{content:""}.la-star-and-crescent:before{content:""}.la-star-half:before{content:""}.la-star-half-alt:before{content:""}.la-star-of-david:before{content:""}.la-star-of-life:before{content:""}.la-staylinked:before{content:""}.la-steam:before{content:""}.la-steam-square:before{content:""}.la-steam-symbol:before{content:""}.la-step-backward:before{content:""}.la-step-forward:before{content:""}.la-stethoscope:before{content:""}.la-sticker-mule:before{content:""}.la-sticky-note:before{content:""}.la-stop:before{content:""}.la-stop-circle:before{content:""}.la-stopwatch:before{content:""}.la-store:before{content:""}.la-store-alt:before{content:""}.la-strava:before{content:""}.la-stream:before{content:""}.la-street-view:before{content:""}.la-strikethrough:before{content:""}.la-stripe:before{content:""}.la-stripe-s:before{content:""}.la-stroopwafel:before{content:""}.la-studiovinari:before{content:""}.la-stumbleupon:before{content:""}.la-stumbleupon-circle:before{content:""}.la-subscript:before{content:""}.la-subway:before{content:""}.la-suitcase:before{content:""}.la-suitcase-rolling:before{content:""}.la-sun:before{content:""}.la-superpowers:before{content:""}.la-superscript:before{content:""}.la-supple:before{content:""}.la-surprise:before{content:""}.la-suse:before{content:""}.la-swatchbook:before{content:""}.la-swimmer:before{content:""}.la-swimming-pool:before{content:""}.la-symfony:before{content:""}.la-synagogue:before{content:""}.la-sync:before{content:""}.la-sync-alt:before{content:""}.la-syringe:before{content:""}.la-table:before{content:""}.la-table-tennis:before{content:""}.la-tablet:before{content:""}.la-tablet-alt:before{content:""}.la-tablets:before{content:""}.la-tachometer-alt:before{content:""}.la-tag:before{content:""}.la-tags:before{content:""}.la-tape:before{content:""}.la-tasks:before{content:""}.la-taxi:before{content:""}.la-teamspeak:before{content:""}.la-teeth:before{content:""}.la-teeth-open:before{content:""}.la-telegram:before{content:""}.la-telegram-plane:before{content:""}.la-temperature-high:before{content:""}.la-temperature-low:before{content:""}.la-tencent-weibo:before{content:""}.la-tenge:before{content:""}.la-terminal:before{content:""}.la-text-height:before{content:""}.la-text-width:before{content:""}.la-th:before{content:""}.la-th-large:before{content:""}.la-th-list:before{content:""}.la-the-red-yeti:before{content:""}.la-theater-masks:before{content:""}.la-themeco:before{content:""}.la-themeisle:before{content:""}.la-thermometer:before{content:""}.la-thermometer-empty:before{content:""}.la-thermometer-full:before{content:""}.la-thermometer-half:before{content:""}.la-thermometer-quarter:before{content:""}.la-thermometer-three-quarters:before{content:""}.la-think-peaks:before{content:""}.la-thumbs-down:before{content:""}.la-thumbs-up:before{content:""}.la-thumbtack:before{content:""}.la-ticket-alt:before{content:""}.la-times:before{content:""}.la-times-circle:before{content:""}.la-tint:before{content:""}.la-tint-slash:before{content:""}.la-tired:before{content:""}.la-toggle-off:before{content:""}.la-toggle-on:before{content:""}.la-toilet:before{content:""}.la-toilet-paper:before{content:""}.la-toolbox:before{content:""}.la-tools:before{content:""}.la-tooth:before{content:""}.la-torah:before{content:""}.la-torii-gate:before{content:""}.la-tractor:before{content:""}.la-trade-federation:before{content:""}.la-trademark:before{content:""}.la-traffic-light:before{content:""}.la-train:before{content:""}.la-tram:before{content:""}.la-transgender:before{content:""}.la-transgender-alt:before{content:""}.la-trash:before{content:""}.la-trash-alt:before{content:""}.la-trash-restore:before{content:""}.la-trash-restore-alt:before{content:""}.la-tree:before{content:""}.la-trello:before{content:""}.la-tripadvisor:before{content:""}.la-trophy:before{content:""}.la-truck:before{content:""}.la-truck-loading:before{content:""}.la-truck-monster:before{content:""}.la-truck-moving:before{content:""}.la-truck-pickup:before{content:""}.la-tshirt:before{content:""}.la-tty:before{content:""}.la-tumblr:before{content:""}.la-tumblr-square:before{content:""}.la-tv:before{content:""}.la-twitch:before{content:""}.la-twitter:before{content:""}.la-twitter-square:before{content:""}.la-typo3:before{content:""}.la-uber:before{content:""}.la-ubuntu:before{content:""}.la-uikit:before{content:""}.la-umbrella:before{content:""}.la-umbrella-beach:before{content:""}.la-underline:before{content:""}.la-undo:before{content:""}.la-undo-alt:before{content:""}.la-uniregistry:before{content:""}.la-universal-access:before{content:""}.la-university:before{content:""}.la-unlink:before{content:""}.la-unlock:before{content:""}.la-unlock-alt:before{content:""}.la-untappd:before{content:""}.la-upload:before{content:""}.la-ups:before{content:""}.la-usb:before{content:""}.la-user:before{content:""}.la-user-alt:before{content:""}.la-user-alt-slash:before{content:""}.la-user-astronaut:before{content:""}.la-user-check:before{content:""}.la-user-circle:before{content:""}.la-user-clock:before{content:""}.la-user-cog:before{content:""}.la-user-edit:before{content:""}.la-user-friends:before{content:""}.la-user-graduate:before{content:""}.la-user-injured:before{content:""}.la-user-lock:before{content:""}.la-user-md:before{content:""}.la-user-minus:before{content:""}.la-user-ninja:before{content:""}.la-user-nurse:before{content:""}.la-user-plus:before{content:""}.la-user-secret:before{content:""}.la-user-shield:before{content:""}.la-user-slash:before{content:""}.la-user-tag:before{content:""}.la-user-tie:before{content:""}.la-user-times:before{content:""}.la-users:before{content:""}.la-users-cog:before{content:""}.la-usps:before{content:""}.la-ussunnah:before{content:""}.la-utensil-spoon:before{content:""}.la-utensils:before{content:""}.la-vaadin:before{content:""}.la-vector-square:before{content:""}.la-venus:before{content:""}.la-venus-double:before{content:""}.la-venus-mars:before{content:""}.la-viacoin:before{content:""}.la-viadeo:before{content:""}.la-viadeo-square:before{content:""}.la-vial:before{content:""}.la-vials:before{content:""}.la-viber:before{content:""}.la-video:before{content:""}.la-video-slash:before{content:""}.la-vihara:before{content:""}.la-vimeo:before{content:""}.la-vimeo-square:before{content:""}.la-vimeo-v:before{content:""}.la-vine:before{content:""}.la-vk:before{content:""}.la-vnv:before{content:""}.la-voicemail:before{content:""}.la-volleyball-ball:before{content:""}.la-volume-down:before{content:""}.la-volume-mute:before{content:""}.la-volume-off:before{content:""}.la-volume-up:before{content:""}.la-vote-yea:before{content:""}.la-vr-cardboard:before{content:""}.la-vuejs:before{content:""}.la-walking:before{content:""}.la-wallet:before{content:""}.la-warehouse:before{content:""}.la-water:before{content:""}.la-wave-square:before{content:""}.la-waze:before{content:""}.la-weebly:before{content:""}.la-weibo:before{content:""}.la-weight:before{content:""}.la-weight-hanging:before{content:""}.la-weixin:before{content:""}.la-whatsapp:before{content:""}.la-whatsapp-square:before{content:""}.la-wheelchair:before{content:""}.la-whmcs:before{content:""}.la-wifi:before{content:""}.la-wikipedia-w:before{content:""}.la-wind:before{content:""}.la-window-close:before{content:""}.la-window-maximize:before{content:""}.la-window-minimize:before{content:""}.la-window-restore:before{content:""}.la-windows:before{content:""}.la-wine-bottle:before{content:""}.la-wine-glass:before{content:""}.la-wine-glass-alt:before{content:""}.la-wix:before{content:""}.la-wizards-of-the-coast:before{content:""}.la-wolf-pack-battalion:before{content:""}.la-won-sign:before{content:""}.la-wordpress:before{content:""}.la-wordpress-simple:before{content:""}.la-wpbeginner:before{content:""}.la-wpexplorer:before{content:""}.la-wpforms:before{content:""}.la-wpressr:before{content:""}.la-wrench:before{content:""}.la-x-ray:before{content:""}.la-xbox:before{content:""}.la-xing:before{content:""}.la-xing-square:before{content:""}.la-y-combinator:before{content:""}.la-yahoo:before{content:""}.la-yammer:before{content:""}.la-yandex:before{content:""}.la-yandex-international:before{content:""}.la-yarn:before{content:""}.la-yelp:before{content:""}.la-yen-sign:before{content:""}.la-yin-yang:before{content:""}.la-yoast:before{content:""}.la-youtube:before{content:""}.la-youtube-square:before{content:""}.la-zhihu:before{content:""}.la-hat-cowboy:before{content:""}.la-hat-cowboy-side:before{content:""}.la-mdb:before{content:""}.la-mouse:before{content:""}.la-orcid:before{content:""}.la-record-vinyl:before{content:""}.la-swift:before{content:""}.la-umbraco:before{content:""}.la-buy-n-large:before{content:""}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto} +.lar,.las,.lab{-moz-osx-font-surface-tertiarying:grayscale;-webkit-font-surface-tertiarying:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}@font-face{font-family:Line Awesome Brands;font-style:normal;font-weight:400;font-display:auto;src:url(./la-brands-400-LN4CMlGg.eot);src:url(./la-brands-400-LN4CMlGg.eot?#iefix) format("embedded-opentype"),url(./la-brands-400-Cq-R4OEF.woff2) format("woff2"),url(./la-brands-400-D0lxOIwB.woff) format("woff"),url(./la-brands-400-gDglUfU7.ttf) format("truetype"),url(./la-brands-400-wsUI3UJ9.svg#lineawesome) format("svg")}.lab{font-family:Line Awesome Brands;font-weight:400}@font-face{font-family:Line Awesome Free;font-style:normal;font-weight:400;font-display:auto;src:url(./la-regular-400-Cx6vm3uW.eot);src:url(./la-regular-400-Cx6vm3uW.eot?#iefix) format("embedded-opentype"),url(./la-regular-400-DuFMN_sw.woff2) format("woff2"),url(./la-regular-400-ehe5HgcS.woff) format("woff"),url(./la-regular-400-CmnW_RTo.ttf) format("truetype"),url(./la-regular-400-BmVb34ql.svg#lineawesome) format("svg")}.lar{font-family:Line Awesome Free;font-weight:400}@font-face{font-family:Line Awesome Free;font-style:normal;font-weight:900;font-display:auto;src:url(./la-solid-900-DkmX4G2x.eot);src:url(./la-solid-900-DkmX4G2x.eot?#iefix) format("embedded-opentype"),url(./la-solid-900-TjMEgv3Q.woff2) format("woff2"),url(./la-solid-900-CR_Kd-su.woff) format("woff"),url(./la-solid-900-BUOWlSBQ.ttf) format("truetype"),url(./la-solid-900-dtlPMWb8.svg#lineawesome) format("svg")}.las{font-family:Line Awesome Free;font-weight:900}.la-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.la-xs{font-size:.75em}.la-2x{font-size:2em}.la-3x{font-size:3em}.la-4x{font-size:4em}.la-5x{font-size:5em}.la-6x{font-size:6em}.la-7x{font-size:7em}.la-8x{font-size:8em}.la-9x{font-size:9em}.la-10x{font-size:10em}.la-fw{width:1.25em;text-align:center}.la-ul{padding-left:0;margin-left:1.4285714286em;list-style-type:none}.la-ul>li{position:relative}.la-li{position:absolute;left:-2em;text-align:center;width:1.4285714286em;line-height:inherit}.la-li.la-lg{left:-1.1428571429em}.la-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.la.la-pull-left{margin-right:.3em}.la.la-pull-right{margin-left:.3em}.la.pull-left{margin-right:.3em}.la.pull-right{margin-left:.3em}.la-pull-left{float:left}.la-pull-right{float:right}.la.la-pull-left,.las.la-pull-left,.lar.la-pull-left,.lal.la-pull-left,.lab.la-pull-left{margin-right:.3em}.la.la-pull-right,.las.la-pull-right,.lar.la-pull-right,.lal.la-pull-right,.lab.la-pull-right{margin-left:.3em}.la-spin{-webkit-animation:la-spin 2s infinite linear;animation:la-spin 2s infinite linear}.la-pulse{-webkit-animation:la-spin 1s infinite steps(8);animation:la-spin 1s infinite steps(8)}@-webkit-keyframes la-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes la-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.la-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.la-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.la-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.la-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);transform:scaleX(-1)}.la-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);transform:scaleY(-1)}.la-flip-both,.la-flip-horizontal.la-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(-1,-1);transform:scale(-1)}:root .la-rotate-90,:root .la-rotate-180,:root .la-rotate-270,:root .la-flip-horizontal,:root .la-flip-vertical,:root .la-flip-both{-webkit-filter:none;filter:none}.la-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.la-stack-1x,.la-stack-2x{left:0;position:absolute;text-align:center;width:100%}.la-stack-1x{line-height:inherit}.la-stack-2x{font-size:2em}.la-inverse{color:#fff}.la-500px:before{content:""}.la-accessible-icon:before{content:""}.la-accusoft:before{content:""}.la-acquisitions-incorporated:before{content:""}.la-ad:before{content:""}.la-address-book:before{content:""}.la-address-card:before{content:""}.la-adjust:before{content:""}.la-adn:before{content:""}.la-adobe:before{content:""}.la-adversal:before{content:""}.la-affiliatetheme:before{content:""}.la-air-freshener:before{content:""}.la-airbnb:before{content:""}.la-algolia:before{content:""}.la-align-center:before{content:""}.la-align-justify:before{content:""}.la-align-left:before{content:""}.la-align-right:before{content:""}.la-alipay:before{content:""}.la-allergies:before{content:""}.la-amazon:before{content:""}.la-amazon-pay:before{content:""}.la-ambulance:before{content:""}.la-american-sign-language-interpreting:before{content:""}.la-amilia:before{content:""}.la-anchor:before{content:""}.la-android:before{content:""}.la-angellist:before{content:""}.la-angle-double-down:before{content:""}.la-angle-double-left:before{content:""}.la-angle-double-right:before{content:""}.la-angle-double-up:before{content:""}.la-angle-down:before{content:""}.la-angle-left:before{content:""}.la-angle-right:before{content:""}.la-angle-up:before{content:""}.la-angry:before{content:""}.la-angrycreative:before{content:""}.la-angular:before{content:""}.la-ankh:before{content:""}.la-app-store:before{content:""}.la-app-store-ios:before{content:""}.la-apper:before{content:""}.la-apple:before{content:""}.la-apple-alt:before{content:""}.la-apple-pay:before{content:""}.la-archive:before{content:""}.la-archway:before{content:""}.la-arrow-alt-circle-down:before{content:""}.la-arrow-alt-circle-left:before{content:""}.la-arrow-alt-circle-right:before{content:""}.la-arrow-alt-circle-up:before{content:""}.la-arrow-circle-down:before{content:""}.la-arrow-circle-left:before{content:""}.la-arrow-circle-right:before{content:""}.la-arrow-circle-up:before{content:""}.la-arrow-down:before{content:""}.la-arrow-left:before{content:""}.la-arrow-right:before{content:""}.la-arrow-up:before{content:""}.la-arrows-alt:before{content:""}.la-arrows-alt-h:before{content:""}.la-arrows-alt-v:before{content:""}.la-artstation:before{content:""}.la-assistive-listening-systems:before{content:""}.la-asterisk:before{content:""}.la-asymmetrik:before{content:""}.la-at:before{content:""}.la-atlas:before{content:""}.la-atlassian:before{content:""}.la-atom:before{content:""}.la-audible:before{content:""}.la-audio-description:before{content:""}.la-autoprefixer:before{content:""}.la-avianex:before{content:""}.la-aviato:before{content:""}.la-award:before{content:""}.la-aws:before{content:""}.la-baby:before{content:""}.la-baby-carriage:before{content:""}.la-backspace:before{content:""}.la-backward:before{content:""}.la-bacon:before{content:""}.la-balance-scale:before{content:""}.la-balance-scale-left:before{content:""}.la-balance-scale-right:before{content:""}.la-ban:before{content:""}.la-band-aid:before{content:""}.la-bandcamp:before{content:""}.la-barcode:before{content:""}.la-bars:before{content:""}.la-baseball-ball:before{content:""}.la-basketball-ball:before{content:""}.la-bath:before{content:""}.la-battery-empty:before{content:""}.la-battery-full:before{content:""}.la-battery-half:before{content:""}.la-battery-quarter:before{content:""}.la-battery-three-quarters:before{content:""}.la-battle-net:before{content:""}.la-bed:before{content:""}.la-beer:before{content:""}.la-behance:before{content:""}.la-behance-square:before{content:""}.la-bell:before{content:""}.la-bell-slash:before{content:""}.la-bezier-curve:before{content:""}.la-bible:before{content:""}.la-bicycle:before{content:""}.la-biking:before{content:""}.la-bimobject:before{content:""}.la-binoculars:before{content:""}.la-biohazard:before{content:""}.la-birthday-cake:before{content:""}.la-bitbucket:before{content:""}.la-bitcoin:before{content:""}.la-bity:before{content:""}.la-black-tie:before{content:""}.la-blackberry:before{content:""}.la-blender:before{content:""}.la-blender-phone:before{content:""}.la-blind:before{content:""}.la-blog:before{content:""}.la-blogger:before{content:""}.la-blogger-b:before{content:""}.la-bluetooth:before{content:""}.la-bluetooth-b:before{content:""}.la-bold:before{content:""}.la-bolt:before{content:""}.la-bomb:before{content:""}.la-bone:before{content:""}.la-bong:before{content:""}.la-book:before{content:""}.la-book-dead:before{content:""}.la-book-medical:before{content:""}.la-book-open:before{content:""}.la-book-reader:before{content:""}.la-bookmark:before{content:""}.la-bootstrap:before{content:""}.la-border-all:before{content:""}.la-border-none:before{content:""}.la-border-style:before{content:""}.la-bowling-ball:before{content:""}.la-box:before{content:""}.la-box-open:before{content:""}.la-boxes:before{content:""}.la-braille:before{content:""}.la-brain:before{content:""}.la-bread-slice:before{content:""}.la-briefcase:before{content:""}.la-briefcase-medical:before{content:""}.la-broadcast-tower:before{content:""}.la-broom:before{content:""}.la-brush:before{content:""}.la-btc:before{content:""}.la-buffer:before{content:""}.la-bug:before{content:""}.la-building:before{content:""}.la-bullhorn:before{content:""}.la-bullseye:before{content:""}.la-burn:before{content:""}.la-buromobelexperte:before{content:""}.la-bus:before{content:""}.la-bus-alt:before{content:""}.la-business-time:before{content:""}.la-buysellads:before{content:""}.la-calculator:before{content:""}.la-calendar:before{content:""}.la-calendar-alt:before{content:""}.la-calendar-check:before{content:""}.la-calendar-day:before{content:""}.la-calendar-minus:before{content:""}.la-calendar-plus:before{content:""}.la-calendar-times:before{content:""}.la-calendar-week:before{content:""}.la-camera:before{content:""}.la-camera-retro:before{content:""}.la-campground:before{content:""}.la-canadian-maple-leaf:before{content:""}.la-candy-cane:before{content:""}.la-cannabis:before{content:""}.la-capsules:before{content:""}.la-car:before{content:""}.la-car-alt:before{content:""}.la-car-battery:before{content:""}.la-car-crash:before{content:""}.la-car-side:before{content:""}.la-caret-down:before{content:""}.la-caret-left:before{content:""}.la-caret-right:before{content:""}.la-caret-square-down:before{content:""}.la-caret-square-left:before{content:""}.la-caret-square-right:before{content:""}.la-caret-square-up:before{content:""}.la-caret-up:before{content:""}.la-carrot:before{content:""}.la-cart-arrow-down:before{content:""}.la-cart-plus:before{content:""}.la-cash-register:before{content:""}.la-cat:before{content:""}.la-cc-amazon-pay:before{content:""}.la-cc-amex:before{content:""}.la-cc-apple-pay:before{content:""}.la-cc-diners-club:before{content:""}.la-cc-discover:before{content:""}.la-cc-jcb:before{content:""}.la-cc-mastercard:before{content:""}.la-cc-paypal:before{content:""}.la-cc-stripe:before{content:""}.la-cc-visa:before{content:""}.la-centercode:before{content:""}.la-centos:before{content:""}.la-certificate:before{content:""}.la-chair:before{content:""}.la-chalkboard:before{content:""}.la-chalkboard-teacher:before{content:""}.la-charging-station:before{content:""}.la-chart-area:before{content:""}.la-chart-bar:before{content:""}.la-chart-line:before{content:""}.la-chart-pie:before{content:""}.la-check:before{content:""}.la-check-circle:before{content:""}.la-check-double:before{content:""}.la-check-square:before{content:""}.la-cheese:before{content:""}.la-chess:before{content:""}.la-chess-bishop:before{content:""}.la-chess-board:before{content:""}.la-chess-king:before{content:""}.la-chess-knight:before{content:""}.la-chess-pawn:before{content:""}.la-chess-queen:before{content:""}.la-chess-rook:before{content:""}.la-chevron-circle-down:before{content:""}.la-chevron-circle-left:before{content:""}.la-chevron-circle-right:before{content:""}.la-chevron-circle-up:before{content:""}.la-chevron-down:before{content:""}.la-chevron-left:before{content:""}.la-chevron-right:before{content:""}.la-chevron-up:before{content:""}.la-child:before{content:""}.la-chrome:before{content:""}.la-chromecast:before{content:""}.la-church:before{content:""}.la-circle:before{content:""}.la-circle-notch:before{content:""}.la-city:before{content:""}.la-clinic-medical:before{content:""}.la-clipboard:before{content:""}.la-clipboard-check:before{content:""}.la-clipboard-list:before{content:""}.la-clock:before{content:""}.la-clone:before{content:""}.la-closed-captioning:before{content:""}.la-cloud:before{content:""}.la-cloud-download-alt:before{content:""}.la-cloud-meatball:before{content:""}.la-cloud-moon:before{content:""}.la-cloud-moon-rain:before{content:""}.la-cloud-rain:before{content:""}.la-cloud-showers-heavy:before{content:""}.la-cloud-sun:before{content:""}.la-cloud-sun-rain:before{content:""}.la-cloud-upload-alt:before{content:""}.la-cloudscale:before{content:""}.la-cloudsmith:before{content:""}.la-cloudversify:before{content:""}.la-cocktail:before{content:""}.la-code:before{content:""}.la-code-branch:before{content:""}.la-codepen:before{content:""}.la-codiepie:before{content:""}.la-coffee:before{content:""}.la-cog:before{content:""}.la-cogs:before{content:""}.la-coins:before{content:""}.la-columns:before{content:""}.la-comment:before{content:""}.la-comment-alt:before{content:""}.la-comment-dollar:before{content:""}.la-comment-dots:before{content:""}.la-comment-medical:before{content:""}.la-comment-slash:before{content:""}.la-comments:before{content:""}.la-comments-dollar:before{content:""}.la-compact-disc:before{content:""}.la-compass:before{content:""}.la-compress:before{content:""}.la-compress-arrows-alt:before{content:""}.la-concierge-bell:before{content:""}.la-confluence:before{content:""}.la-connectdevelop:before{content:""}.la-contao:before{content:""}.la-cookie:before{content:""}.la-cookie-bite:before{content:""}.la-copy:before{content:""}.la-copyright:before{content:""}.la-cotton-bureau:before{content:""}.la-couch:before{content:""}.la-cpanel:before{content:""}.la-creative-commons:before{content:""}.la-creative-commons-by:before{content:""}.la-creative-commons-nc:before{content:""}.la-creative-commons-nc-eu:before{content:""}.la-creative-commons-nc-jp:before{content:""}.la-creative-commons-nd:before{content:""}.la-creative-commons-pd:before{content:""}.la-creative-commons-pd-alt:before{content:""}.la-creative-commons-remix:before{content:""}.la-creative-commons-sa:before{content:""}.la-creative-commons-sampling:before{content:""}.la-creative-commons-sampling-plus:before{content:""}.la-creative-commons-share:before{content:""}.la-creative-commons-zero:before{content:""}.la-credit-card:before{content:""}.la-critical-role:before{content:""}.la-crop:before{content:""}.la-crop-alt:before{content:""}.la-cross:before{content:""}.la-crosshairs:before{content:""}.la-crow:before{content:""}.la-crown:before{content:""}.la-crutch:before{content:""}.la-css3:before{content:""}.la-css3-alt:before{content:""}.la-cube:before{content:""}.la-cubes:before{content:""}.la-cut:before{content:""}.la-cuttlefish:before{content:""}.la-d-and-d:before{content:""}.la-d-and-d-beyond:before{content:""}.la-dashcube:before{content:""}.la-database:before{content:""}.la-deaf:before{content:""}.la-delicious:before{content:""}.la-democrat:before{content:""}.la-deploydog:before{content:""}.la-deskpro:before{content:""}.la-desktop:before{content:""}.la-dev:before{content:""}.la-deviantart:before{content:""}.la-dharmachakra:before{content:""}.la-dhl:before{content:""}.la-diagnoses:before{content:""}.la-diaspora:before{content:""}.la-dice:before{content:""}.la-dice-d20:before{content:""}.la-dice-d6:before{content:""}.la-dice-five:before{content:""}.la-dice-four:before{content:""}.la-dice-one:before{content:""}.la-dice-six:before{content:""}.la-dice-three:before{content:""}.la-dice-two:before{content:""}.la-digg:before{content:""}.la-digital-ocean:before{content:""}.la-digital-tachograph:before{content:""}.la-directions:before{content:""}.la-discord:before{content:""}.la-discourse:before{content:""}.la-divide:before{content:""}.la-dizzy:before{content:""}.la-dna:before{content:""}.la-dochub:before{content:""}.la-docker:before{content:""}.la-dog:before{content:""}.la-dollar-sign:before{content:""}.la-dolly:before{content:""}.la-dolly-flatbed:before{content:""}.la-donate:before{content:""}.la-door-closed:before{content:""}.la-door-open:before{content:""}.la-dot-circle:before{content:""}.la-dove:before{content:""}.la-download:before{content:""}.la-draft2digital:before{content:""}.la-drafting-compass:before{content:""}.la-dragon:before{content:""}.la-draw-polygon:before{content:""}.la-dribbble:before{content:""}.la-dribbble-square:before{content:""}.la-dropbox:before{content:""}.la-drum:before{content:""}.la-drum-steelpan:before{content:""}.la-drumstick-bite:before{content:""}.la-drupal:before{content:""}.la-dumbbell:before{content:""}.la-dumpster:before{content:""}.la-dumpster-fire:before{content:""}.la-dungeon:before{content:""}.la-dyalog:before{content:""}.la-earlybirds:before{content:""}.la-ebay:before{content:""}.la-edge:before{content:""}.la-edit:before{content:""}.la-egg:before{content:""}.la-eject:before{content:""}.la-elementor:before{content:""}.la-ellipsis-h:before{content:""}.la-ellipsis-v:before{content:""}.la-ello:before{content:""}.la-ember:before{content:""}.la-empire:before{content:""}.la-envelope:before{content:""}.la-envelope-open:before{content:""}.la-envelope-open-text:before{content:""}.la-envelope-square:before{content:""}.la-envira:before{content:""}.la-equals:before{content:""}.la-eraser:before{content:""}.la-erlang:before{content:""}.la-ethereum:before{content:""}.la-ethernet:before{content:""}.la-etsy:before{content:""}.la-euro-sign:before{content:""}.la-evernote:before{content:""}.la-exchange-alt:before{content:""}.la-exclamation:before{content:""}.la-exclamation-circle:before{content:""}.la-exclamation-triangle:before{content:""}.la-expand:before{content:""}.la-expand-arrows-alt:before{content:""}.la-expeditedssl:before{content:""}.la-external-link-alt:before{content:""}.la-external-link-square-alt:before{content:""}.la-eye:before{content:""}.la-eye-dropper:before{content:""}.la-eye-slash:before{content:""}.la-facebook:before{content:""}.la-facebook-f:before{content:""}.la-facebook-messenger:before{content:""}.la-facebook-square:before{content:""}.la-fan:before{content:""}.la-fantasy-flight-games:before{content:""}.la-fast-backward:before{content:""}.la-fast-forward:before{content:""}.la-fax:before{content:""}.la-feather:before{content:""}.la-feather-alt:before{content:""}.la-fedex:before{content:""}.la-fedora:before{content:""}.la-female:before{content:""}.la-fighter-jet:before{content:""}.la-figma:before{content:""}.la-file:before{content:""}.la-file-alt:before{content:""}.la-file-archive:before{content:""}.la-file-audio:before{content:""}.la-file-code:before{content:""}.la-file-contract:before{content:""}.la-file-csv:before{content:""}.la-file-download:before{content:""}.la-file-excel:before{content:""}.la-file-export:before{content:""}.la-file-image:before{content:""}.la-file-import:before{content:""}.la-file-invoice:before{content:""}.la-file-invoice-dollar:before{content:""}.la-file-medical:before{content:""}.la-file-medical-alt:before{content:""}.la-file-pdf:before{content:""}.la-file-powerpoint:before{content:""}.la-file-prescription:before{content:""}.la-file-signature:before{content:""}.la-file-upload:before{content:""}.la-file-video:before{content:""}.la-file-word:before{content:""}.la-fill:before{content:""}.la-fill-drip:before{content:""}.la-film:before{content:""}.la-filter:before{content:""}.la-fingerprint:before{content:""}.la-fire:before{content:""}.la-fire-alt:before{content:""}.la-fire-extinguisher:before{content:""}.la-firefox:before{content:""}.la-first-aid:before{content:""}.la-first-order:before{content:""}.la-first-order-alt:before{content:""}.la-firstdraft:before{content:""}.la-fish:before{content:""}.la-fist-raised:before{content:""}.la-flag:before{content:""}.la-flag-checkered:before{content:""}.la-flag-usa:before{content:""}.la-flask:before{content:""}.la-flickr:before{content:""}.la-flipboard:before{content:""}.la-flushed:before{content:""}.la-fly:before{content:""}.la-folder:before{content:""}.la-folder-minus:before{content:""}.la-folder-open:before{content:""}.la-folder-plus:before{content:""}.la-font:before{content:""}.la-font-awesome:before{content:""}.la-font-awesome-alt:before{content:""}.la-font-awesome-flag:before{content:""}.la-fonticons:before{content:""}.la-fonticons-fi:before{content:""}.la-football-ball:before{content:""}.la-fort-awesome:before{content:""}.la-fort-awesome-alt:before{content:""}.la-forumbee:before{content:""}.la-forward:before{content:""}.la-foursquare:before{content:""}.la-free-code-camp:before{content:""}.la-freebsd:before{content:""}.la-frog:before{content:""}.la-frown:before{content:""}.la-frown-open:before{content:""}.la-fulcrum:before{content:""}.la-funnel-dollar:before{content:""}.la-futbol:before{content:""}.la-galactic-republic:before{content:""}.la-galactic-senate:before{content:""}.la-gamepad:before{content:""}.la-gas-pump:before{content:""}.la-gavel:before{content:""}.la-gem:before{content:""}.la-genderless:before{content:""}.la-get-pocket:before{content:""}.la-gg:before{content:""}.la-gg-circle:before{content:""}.la-ghost:before{content:""}.la-gift:before{content:""}.la-gifts:before{content:""}.la-git:before{content:""}.la-git-alt:before{content:""}.la-git-square:before{content:""}.la-github:before{content:""}.la-github-alt:before{content:""}.la-github-square:before{content:""}.la-gitkraken:before{content:""}.la-gitlab:before{content:""}.la-gitter:before{content:""}.la-glass-cheers:before{content:""}.la-glass-martini:before{content:""}.la-glass-martini-alt:before{content:""}.la-glass-whiskey:before{content:""}.la-glasses:before{content:""}.la-glide:before{content:""}.la-glide-g:before{content:""}.la-globe:before{content:""}.la-globe-africa:before{content:""}.la-globe-americas:before{content:""}.la-globe-asia:before{content:""}.la-globe-europe:before{content:""}.la-gofore:before{content:""}.la-golf-ball:before{content:""}.la-goodreads:before{content:""}.la-goodreads-g:before{content:""}.la-google:before{content:""}.la-google-drive:before{content:""}.la-google-play:before{content:""}.la-google-plus:before{content:""}.la-google-plus-g:before{content:""}.la-google-plus-square:before{content:""}.la-google-wallet:before{content:""}.la-gopuram:before{content:""}.la-graduation-cap:before{content:""}.la-gratipay:before{content:""}.la-grav:before{content:""}.la-greater-than:before{content:""}.la-greater-than-equal:before{content:""}.la-grimace:before{content:""}.la-grin:before{content:""}.la-grin-alt:before{content:""}.la-grin-beam:before{content:""}.la-grin-beam-sweat:before{content:""}.la-grin-hearts:before{content:""}.la-grin-squint:before{content:""}.la-grin-squint-tears:before{content:""}.la-grin-stars:before{content:""}.la-grin-tears:before{content:""}.la-grin-tongue:before{content:""}.la-grin-tongue-squint:before{content:""}.la-grin-tongue-wink:before{content:""}.la-grin-wink:before{content:""}.la-grip-horizontal:before{content:""}.la-grip-lines:before{content:""}.la-grip-lines-vertical:before{content:""}.la-grip-vertical:before{content:""}.la-gripfire:before{content:""}.la-grunt:before{content:""}.la-guitar:before{content:""}.la-gulp:before{content:""}.la-h-square:before{content:""}.la-hacker-news:before{content:""}.la-hacker-news-square:before{content:""}.la-hackerrank:before{content:""}.la-hamburger:before{content:""}.la-hammer:before{content:""}.la-hamsa:before{content:""}.la-hand-holding:before{content:""}.la-hand-holding-heart:before{content:""}.la-hand-holding-usd:before{content:""}.la-hand-lizard:before{content:""}.la-hand-middle-finger:before{content:""}.la-hand-paper:before{content:""}.la-hand-peace:before{content:""}.la-hand-point-down:before{content:""}.la-hand-point-left:before{content:""}.la-hand-point-right:before{content:""}.la-hand-point-up:before{content:""}.la-hand-pointer:before{content:""}.la-hand-rock:before{content:""}.la-hand-scissors:before{content:""}.la-hand-spock:before{content:""}.la-hands:before{content:""}.la-hands-helping:before{content:""}.la-handshake:before{content:""}.la-hanukiah:before{content:""}.la-surface-quaternary-hat:before{content:""}.la-hashtag:before{content:""}.la-hat-wizard:before{content:""}.la-haykal:before{content:""}.la-hdd:before{content:""}.la-heading:before{content:""}.la-headphones:before{content:""}.la-headphones-alt:before{content:""}.la-headset:before{content:""}.la-heart:before{content:""}.la-heart-broken:before{content:""}.la-heartbeat:before{content:""}.la-helicopter:before{content:""}.la-highlighter:before{content:""}.la-hiking:before{content:""}.la-hippo:before{content:""}.la-hips:before{content:""}.la-hire-a-helper:before{content:""}.la-history:before{content:""}.la-hockey-puck:before{content:""}.la-holly-berry:before{content:""}.la-home:before{content:""}.la-hooli:before{content:""}.la-hornbill:before{content:""}.la-horse:before{content:""}.la-horse-head:before{content:""}.la-hospital:before{content:""}.la-hospital-alt:before{content:""}.la-hospital-symbol:before{content:""}.la-hot-tub:before{content:""}.la-hotdog:before{content:""}.la-hotel:before{content:""}.la-hotjar:before{content:""}.la-hourglass:before{content:""}.la-hourglass-end:before{content:""}.la-hourglass-half:before{content:""}.la-hourglass-start:before{content:""}.la-house-damage:before{content:""}.la-houzz:before{content:""}.la-hryvnia:before{content:""}.la-html5:before{content:""}.la-hubspot:before{content:""}.la-i-cursor:before{content:""}.la-ice-cream:before{content:""}.la-icicles:before{content:""}.la-icons:before{content:""}.la-id-badge:before{content:""}.la-id-card:before{content:""}.la-id-card-alt:before{content:""}.la-igloo:before{content:""}.la-image:before{content:""}.la-images:before{content:""}.la-imdb:before{content:""}.la-inbox:before{content:""}.la-indent:before{content:""}.la-industry:before{content:""}.la-infinity:before{content:""}.la-info:before{content:""}.la-info-circle:before{content:""}.la-instagram:before{content:""}.la-intercom:before{content:""}.la-internet-explorer:before{content:""}.la-invision:before{content:""}.la-ioxhost:before{content:""}.la-italic:before{content:""}.la-itch-io:before{content:""}.la-itunes:before{content:""}.la-itunes-note:before{content:""}.la-java:before{content:""}.la-jedi:before{content:""}.la-jedi-order:before{content:""}.la-jenkins:before{content:""}.la-jira:before{content:""}.la-joget:before{content:""}.la-joint:before{content:""}.la-joomla:before{content:""}.la-journal-whills:before{content:""}.la-js:before{content:""}.la-js-square:before{content:""}.la-jsfiddle:before{content:""}.la-kaaba:before{content:""}.la-kaggle:before{content:""}.la-key:before{content:""}.la-keybase:before{content:""}.la-keyboard:before{content:""}.la-keycdn:before{content:""}.la-khanda:before{content:""}.la-kickstarter:before{content:""}.la-kickstarter-k:before{content:""}.la-kiss:before{content:""}.la-kiss-beam:before{content:""}.la-kiss-wink-heart:before{content:""}.la-kiwi-bird:before{content:""}.la-korvue:before{content:""}.la-landmark:before{content:""}.la-language:before{content:""}.la-laptop:before{content:""}.la-laptop-code:before{content:""}.la-laptop-medical:before{content:""}.la-laravel:before{content:""}.la-lastfm:before{content:""}.la-lastfm-square:before{content:""}.la-laugh:before{content:""}.la-laugh-beam:before{content:""}.la-laugh-squint:before{content:""}.la-laugh-wink:before{content:""}.la-layer-group:before{content:""}.la-leaf:before{content:""}.la-leanpub:before{content:""}.la-lemon:before{content:""}.la-less:before{content:""}.la-less-than:before{content:""}.la-less-than-equal:before{content:""}.la-level-down-alt:before{content:""}.la-level-up-alt:before{content:""}.la-life-ring:before{content:""}.la-lightbulb:before{content:""}.la-line:before{content:""}.la-link:before{content:""}.la-linkedin:before{content:""}.la-linkedin-in:before{content:""}.la-linode:before{content:""}.la-linux:before{content:""}.la-lira-sign:before{content:""}.la-list:before{content:""}.la-list-alt:before{content:""}.la-list-ol:before{content:""}.la-list-ul:before{content:""}.la-location-arrow:before{content:""}.la-lock:before{content:""}.la-lock-open:before{content:""}.la-long-arrow-alt-down:before{content:""}.la-long-arrow-alt-left:before{content:""}.la-long-arrow-alt-right:before{content:""}.la-long-arrow-alt-up:before{content:""}.la-low-vision:before{content:""}.la-luggage-cart:before{content:""}.la-lyft:before{content:""}.la-magento:before{content:""}.la-magic:before{content:""}.la-magnet:before{content:""}.la-mail-bulk:before{content:""}.la-mailchimp:before{content:""}.la-male:before{content:""}.la-mandalorian:before{content:""}.la-map:before{content:""}.la-map-marked:before{content:""}.la-map-marked-alt:before{content:""}.la-map-marker:before{content:""}.la-map-marker-alt:before{content:""}.la-map-pin:before{content:""}.la-map-signs:before{content:""}.la-markdown:before{content:""}.la-marker:before{content:""}.la-mars:before{content:""}.la-mars-double:before{content:""}.la-mars-stroke:before{content:""}.la-mars-stroke-h:before{content:""}.la-mars-stroke-v:before{content:""}.la-mask:before{content:""}.la-mastodon:before{content:""}.la-maxcdn:before{content:""}.la-medal:before{content:""}.la-medapps:before{content:""}.la-medium:before{content:""}.la-medium-m:before{content:""}.la-medkit:before{content:""}.la-medrt:before{content:""}.la-meetup:before{content:""}.la-megaport:before{content:""}.la-meh:before{content:""}.la-meh-blank:before{content:""}.la-meh-rolling-eyes:before{content:""}.la-memory:before{content:""}.la-mendeley:before{content:""}.la-menorah:before{content:""}.la-mercury:before{content:""}.la-meteor:before{content:""}.la-microchip:before{content:""}.la-microphone:before{content:""}.la-microphone-alt:before{content:""}.la-microphone-alt-slash:before{content:""}.la-microphone-slash:before{content:""}.la-microscope:before{content:""}.la-microsoft:before{content:""}.la-minus:before{content:""}.la-minus-circle:before{content:""}.la-minus-square:before{content:""}.la-mitten:before{content:""}.la-mix:before{content:""}.la-mixcloud:before{content:""}.la-mizuni:before{content:""}.la-mobile:before{content:""}.la-mobile-alt:before{content:""}.la-modx:before{content:""}.la-monero:before{content:""}.la-money-bill:before{content:""}.la-money-bill-alt:before{content:""}.la-money-bill-wave:before{content:""}.la-money-bill-wave-alt:before{content:""}.la-money-check:before{content:""}.la-money-check-alt:before{content:""}.la-monument:before{content:""}.la-moon:before{content:""}.la-mortar-pestle:before{content:""}.la-mosque:before{content:""}.la-motorcycle:before{content:""}.la-mountain:before{content:""}.la-mouse-pointer:before{content:""}.la-mug-hot:before{content:""}.la-music:before{content:""}.la-napster:before{content:""}.la-neos:before{content:""}.la-network-wired:before{content:""}.la-neuter:before{content:""}.la-newspaper:before{content:""}.la-nimblr:before{content:""}.la-node:before{content:""}.la-node-js:before{content:""}.la-not-equal:before{content:""}.la-notes-medical:before{content:""}.la-npm:before{content:""}.la-ns8:before{content:""}.la-nutritionix:before{content:""}.la-object-group:before{content:""}.la-object-ungroup:before{content:""}.la-odnoklassniki:before{content:""}.la-odnoklassniki-square:before{content:""}.la-oil-can:before{content:""}.la-old-republic:before{content:""}.la-om:before{content:""}.la-opencart:before{content:""}.la-openid:before{content:""}.la-opera:before{content:""}.la-optin-monster:before{content:""}.la-osi:before{content:""}.la-otter:before{content:""}.la-outdent:before{content:""}.la-page4:before{content:""}.la-pagelines:before{content:""}.la-pager:before{content:""}.la-paint-brush:before{content:""}.la-paint-roller:before{content:""}.la-palette:before{content:""}.la-palfed:before{content:""}.la-pallet:before{content:""}.la-paper-plane:before{content:""}.la-paperclip:before{content:""}.la-parachute-box:before{content:""}.la-paragraph:before{content:""}.la-parking:before{content:""}.la-passport:before{content:""}.la-pastafarianism:before{content:""}.la-paste:before{content:""}.la-patreon:before{content:""}.la-pause:before{content:""}.la-pause-circle:before{content:""}.la-paw:before{content:""}.la-paypal:before{content:""}.la-peace:before{content:""}.la-pen:before{content:""}.la-pen-alt:before{content:""}.la-pen-fancy:before{content:""}.la-pen-nib:before{content:""}.la-pen-square:before{content:""}.la-pencil-alt:before{content:""}.la-pencil-ruler:before{content:""}.la-penny-arcade:before{content:""}.la-people-carry:before{content:""}.la-pepper-hot:before{content:""}.la-percent:before{content:""}.la-percentage:before{content:""}.la-periscope:before{content:""}.la-person-booth:before{content:""}.la-phabricator:before{content:""}.la-phoenix-framework:before{content:""}.la-phoenix-squadron:before{content:""}.la-phone:before{content:""}.la-phone-alt:before{content:""}.la-phone-slash:before{content:""}.la-phone-square:before{content:""}.la-phone-square-alt:before{content:""}.la-phone-volume:before{content:""}.la-photo-video:before{content:""}.la-php:before{content:""}.la-pied-piper:before{content:""}.la-pied-piper-alt:before{content:""}.la-pied-piper-hat:before{content:""}.la-pied-piper-pp:before{content:""}.la-piggy-bank:before{content:""}.la-pills:before{content:""}.la-pinterest:before{content:""}.la-pinterest-p:before{content:""}.la-pinterest-square:before{content:""}.la-pizza-slice:before{content:""}.la-place-of-worship:before{content:""}.la-plane:before{content:""}.la-plane-arrival:before{content:""}.la-plane-departure:before{content:""}.la-play:before{content:""}.la-play-circle:before{content:""}.la-playstation:before{content:""}.la-plug:before{content:""}.la-plus:before{content:""}.la-plus-circle:before{content:""}.la-plus-square:before{content:""}.la-podcast:before{content:""}.la-poll:before{content:""}.la-poll-h:before{content:""}.la-poo:before{content:""}.la-poo-storm:before{content:""}.la-poop:before{content:""}.la-portrait:before{content:""}.la-pound-sign:before{content:""}.la-power-off:before{content:""}.la-pray:before{content:""}.la-praying-hands:before{content:""}.la-prescription:before{content:""}.la-prescription-bottle:before{content:""}.la-prescription-bottle-alt:before{content:""}.la-print:before{content:""}.la-procedures:before{content:""}.la-product-hunt:before{content:""}.la-project-diagram:before{content:""}.la-pushed:before{content:""}.la-puzzle-piece:before{content:""}.la-python:before{content:""}.la-qq:before{content:""}.la-qrcode:before{content:""}.la-question:before{content:""}.la-question-circle:before{content:""}.la-quidditch:before{content:""}.la-quinscape:before{content:""}.la-quora:before{content:""}.la-quote-left:before{content:""}.la-quote-right:before{content:""}.la-quran:before{content:""}.la-r-project:before{content:""}.la-radiation:before{content:""}.la-radiation-alt:before{content:""}.la-rainbow:before{content:""}.la-random:before{content:""}.la-raspberry-pi:before{content:""}.la-ravelry:before{content:""}.la-react:before{content:""}.la-reacteurope:before{content:""}.la-readme:before{content:""}.la-rebel:before{content:""}.la-receipt:before{content:""}.la-recycle:before{content:""}.la-red-river:before{content:""}.la-reddit:before{content:""}.la-reddit-alien:before{content:""}.la-reddit-square:before{content:""}.la-redhat:before{content:""}.la-redo:before{content:""}.la-redo-alt:before{content:""}.la-registered:before{content:""}.la-remove-format:before{content:""}.la-renren:before{content:""}.la-reply:before{content:""}.la-reply-all:before{content:""}.la-replyd:before{content:""}.la-republican:before{content:""}.la-researchgate:before{content:""}.la-resolving:before{content:""}.la-restroom:before{content:""}.la-retweet:before{content:""}.la-rev:before{content:""}.la-ribbon:before{content:""}.la-ring:before{content:""}.la-road:before{content:""}.la-robot:before{content:""}.la-rocket:before{content:""}.la-rocketchat:before{content:""}.la-rockrms:before{content:""}.la-route:before{content:""}.la-rss:before{content:""}.la-rss-square:before{content:""}.la-ruble-sign:before{content:""}.la-ruler:before{content:""}.la-ruler-combined:before{content:""}.la-ruler-horizontal:before{content:""}.la-ruler-vertical:before{content:""}.la-running:before{content:""}.la-rupee-sign:before{content:""}.la-sad-cry:before{content:""}.la-sad-tear:before{content:""}.la-safari:before{content:""}.la-salesforce:before{content:""}.la-sass:before{content:""}.la-satellite:before{content:""}.la-satellite-dish:before{content:""}.la-save:before{content:""}.la-schlix:before{content:""}.la-school:before{content:""}.la-screwdriver:before{content:""}.la-scribd:before{content:""}.la-scroll:before{content:""}.la-sd-card:before{content:""}.la-search:before{content:""}.la-search-dollar:before{content:""}.la-search-location:before{content:""}.la-search-minus:before{content:""}.la-search-plus:before{content:""}.la-searchengin:before{content:""}.la-seedling:before{content:""}.la-sellcast:before{content:""}.la-sellsy:before{content:""}.la-server:before{content:""}.la-servicestack:before{content:""}.la-shapes:before{content:""}.la-share:before{content:""}.la-share-alt:before{content:""}.la-share-alt-square:before{content:""}.la-share-square:before{content:""}.la-shekel-sign:before{content:""}.la-shield-alt:before{content:""}.la-ship:before{content:""}.la-shipping-fast:before{content:""}.la-shirtsinbulk:before{content:""}.la-shoe-prints:before{content:""}.la-shopping-bag:before{content:""}.la-shopping-basket:before{content:""}.la-shopping-cart:before{content:""}.la-shopware:before{content:""}.la-shower:before{content:""}.la-shuttle-van:before{content:""}.la-sign:before{content:""}.la-sign-in-alt:before{content:""}.la-sign-language:before{content:""}.la-sign-out-alt:before{content:""}.la-signal:before{content:""}.la-signature:before{content:""}.la-sim-card:before{content:""}.la-simplybuilt:before{content:""}.la-sistrix:before{content:""}.la-sitemap:before{content:""}.la-sith:before{content:""}.la-skating:before{content:""}.la-sketch:before{content:""}.la-skiing:before{content:""}.la-skiing-nordic:before{content:""}.la-skull:before{content:""}.la-skull-crossbones:before{content:""}.la-skyatlas:before{content:""}.la-skype:before{content:""}.la-slack:before{content:""}.la-slack-hash:before{content:""}.la-slash:before{content:""}.la-sleigh:before{content:""}.la-sliders-h:before{content:""}.la-slideshare:before{content:""}.la-smile:before{content:""}.la-smile-beam:before{content:""}.la-smile-wink:before{content:""}.la-smog:before{content:""}.la-smoking:before{content:""}.la-smoking-ban:before{content:""}.la-sms:before{content:""}.la-snapchat:before{content:""}.la-snapchat-ghost:before{content:""}.la-snapchat-square:before{content:""}.la-snowboarding:before{content:""}.la-snowflake:before{content:""}.la-snowman:before{content:""}.la-snowplow:before{content:""}.la-socks:before{content:""}.la-solar-panel:before{content:""}.la-sort:before{content:""}.la-sort-alpha-down:before{content:""}.la-sort-alpha-down-alt:before{content:""}.la-sort-alpha-up:before{content:""}.la-sort-alpha-up-alt:before{content:""}.la-sort-amount-down:before{content:""}.la-sort-amount-down-alt:before{content:""}.la-sort-amount-up:before{content:""}.la-sort-amount-up-alt:before{content:""}.la-sort-down:before{content:""}.la-sort-numeric-down:before{content:""}.la-sort-numeric-down-alt:before{content:""}.la-sort-numeric-up:before{content:""}.la-sort-numeric-up-alt:before{content:""}.la-sort-up:before{content:""}.la-soundcloud:before{content:""}.la-sourcetree:before{content:""}.la-spa:before{content:""}.la-space-shuttle:before{content:""}.la-speakap:before{content:""}.la-speaker-deck:before{content:""}.la-spell-check:before{content:""}.la-spider:before{content:""}.la-spinner:before{content:""}.la-splotch:before{content:""}.la-spotify:before{content:""}.la-spray-can:before{content:""}.la-square:before{content:""}.la-square-full:before{content:""}.la-square-root-alt:before{content:""}.la-squarespace:before{content:""}.la-stack-exchange:before{content:""}.la-stack-overflow:before{content:""}.la-stackpath:before{content:""}.la-stamp:before{content:""}.la-star:before{content:""}.la-star-and-crescent:before{content:""}.la-star-half:before{content:""}.la-star-half-alt:before{content:""}.la-star-of-david:before{content:""}.la-star-of-life:before{content:""}.la-staylinked:before{content:""}.la-steam:before{content:""}.la-steam-square:before{content:""}.la-steam-symbol:before{content:""}.la-step-backward:before{content:""}.la-step-forward:before{content:""}.la-stethoscope:before{content:""}.la-sticker-mule:before{content:""}.la-sticky-note:before{content:""}.la-stop:before{content:""}.la-stop-circle:before{content:""}.la-stopwatch:before{content:""}.la-store:before{content:""}.la-store-alt:before{content:""}.la-strava:before{content:""}.la-stream:before{content:""}.la-street-view:before{content:""}.la-strikethrough:before{content:""}.la-stripe:before{content:""}.la-stripe-s:before{content:""}.la-stroopwafel:before{content:""}.la-studiovinari:before{content:""}.la-stumbleupon:before{content:""}.la-stumbleupon-circle:before{content:""}.la-subscript:before{content:""}.la-subway:before{content:""}.la-suitcase:before{content:""}.la-suitcase-rolling:before{content:""}.la-sun:before{content:""}.la-superpowers:before{content:""}.la-superscript:before{content:""}.la-supple:before{content:""}.la-surprise:before{content:""}.la-suse:before{content:""}.la-swatchbook:before{content:""}.la-swimmer:before{content:""}.la-swimming-pool:before{content:""}.la-symfony:before{content:""}.la-synagogue:before{content:""}.la-sync:before{content:""}.la-sync-alt:before{content:""}.la-syringe:before{content:""}.la-table:before{content:""}.la-table-tennis:before{content:""}.la-tablet:before{content:""}.la-tablet-alt:before{content:""}.la-tablets:before{content:""}.la-tachometer-alt:before{content:""}.la-tag:before{content:""}.la-tags:before{content:""}.la-tape:before{content:""}.la-tasks:before{content:""}.la-taxi:before{content:""}.la-teamspeak:before{content:""}.la-teeth:before{content:""}.la-teeth-open:before{content:""}.la-telegram:before{content:""}.la-telegram-plane:before{content:""}.la-temperature-high:before{content:""}.la-temperature-low:before{content:""}.la-tencent-weibo:before{content:""}.la-tenge:before{content:""}.la-terminal:before{content:""}.la-text-height:before{content:""}.la-text-width:before{content:""}.la-th:before{content:""}.la-th-large:before{content:""}.la-th-list:before{content:""}.la-the-red-yeti:before{content:""}.la-theater-masks:before{content:""}.la-themeco:before{content:""}.la-themeisle:before{content:""}.la-thermometer:before{content:""}.la-thermometer-empty:before{content:""}.la-thermometer-full:before{content:""}.la-thermometer-half:before{content:""}.la-thermometer-quarter:before{content:""}.la-thermometer-three-quarters:before{content:""}.la-think-peaks:before{content:""}.la-thumbs-down:before{content:""}.la-thumbs-up:before{content:""}.la-thumbtack:before{content:""}.la-ticket-alt:before{content:""}.la-times:before{content:""}.la-times-circle:before{content:""}.la-tint:before{content:""}.la-tint-slash:before{content:""}.la-tired:before{content:""}.la-toggle-off:before{content:""}.la-toggle-on:before{content:""}.la-toilet:before{content:""}.la-toilet-paper:before{content:""}.la-toolbox:before{content:""}.la-tools:before{content:""}.la-tooth:before{content:""}.la-torah:before{content:""}.la-torii-gate:before{content:""}.la-tractor:before{content:""}.la-trade-federation:before{content:""}.la-trademark:before{content:""}.la-traffic-light:before{content:""}.la-train:before{content:""}.la-tram:before{content:""}.la-transgender:before{content:""}.la-transgender-alt:before{content:""}.la-trash:before{content:""}.la-trash-alt:before{content:""}.la-trash-restore:before{content:""}.la-trash-restore-alt:before{content:""}.la-tree:before{content:""}.la-trello:before{content:""}.la-tripadvisor:before{content:""}.la-trophy:before{content:""}.la-truck:before{content:""}.la-truck-loading:before{content:""}.la-truck-monster:before{content:""}.la-truck-moving:before{content:""}.la-truck-pickup:before{content:""}.la-tshirt:before{content:""}.la-tty:before{content:""}.la-tumblr:before{content:""}.la-tumblr-square:before{content:""}.la-tv:before{content:""}.la-twitch:before{content:""}.la-twitter:before{content:""}.la-twitter-square:before{content:""}.la-typo3:before{content:""}.la-uber:before{content:""}.la-ubuntu:before{content:""}.la-uikit:before{content:""}.la-umbrella:before{content:""}.la-umbrella-beach:before{content:""}.la-underline:before{content:""}.la-undo:before{content:""}.la-undo-alt:before{content:""}.la-uniregistry:before{content:""}.la-universal-access:before{content:""}.la-university:before{content:""}.la-unlink:before{content:""}.la-unlock:before{content:""}.la-unlock-alt:before{content:""}.la-untappd:before{content:""}.la-upload:before{content:""}.la-ups:before{content:""}.la-usb:before{content:""}.la-user:before{content:""}.la-user-alt:before{content:""}.la-user-alt-slash:before{content:""}.la-user-astronaut:before{content:""}.la-user-check:before{content:""}.la-user-circle:before{content:""}.la-user-clock:before{content:""}.la-user-cog:before{content:""}.la-user-edit:before{content:""}.la-user-friends:before{content:""}.la-user-graduate:before{content:""}.la-user-injured:before{content:""}.la-user-lock:before{content:""}.la-user-md:before{content:""}.la-user-minus:before{content:""}.la-user-ninja:before{content:""}.la-user-nurse:before{content:""}.la-user-plus:before{content:""}.la-user-secret:before{content:""}.la-user-shield:before{content:""}.la-user-slash:before{content:""}.la-user-tag:before{content:""}.la-user-tie:before{content:""}.la-user-times:before{content:""}.la-users:before{content:""}.la-users-cog:before{content:""}.la-usps:before{content:""}.la-ussunnah:before{content:""}.la-utensil-spoon:before{content:""}.la-utensils:before{content:""}.la-vaadin:before{content:""}.la-vector-square:before{content:""}.la-venus:before{content:""}.la-venus-double:before{content:""}.la-venus-mars:before{content:""}.la-viacoin:before{content:""}.la-viadeo:before{content:""}.la-viadeo-square:before{content:""}.la-vial:before{content:""}.la-vials:before{content:""}.la-viber:before{content:""}.la-video:before{content:""}.la-video-slash:before{content:""}.la-vihara:before{content:""}.la-vimeo:before{content:""}.la-vimeo-square:before{content:""}.la-vimeo-v:before{content:""}.la-vine:before{content:""}.la-vk:before{content:""}.la-vnv:before{content:""}.la-voicemail:before{content:""}.la-volleyball-ball:before{content:""}.la-volume-down:before{content:""}.la-volume-mute:before{content:""}.la-volume-off:before{content:""}.la-volume-up:before{content:""}.la-vote-yea:before{content:""}.la-vr-cardboard:before{content:""}.la-vuejs:before{content:""}.la-walking:before{content:""}.la-wallet:before{content:""}.la-warehouse:before{content:""}.la-water:before{content:""}.la-wave-square:before{content:""}.la-waze:before{content:""}.la-weebly:before{content:""}.la-weibo:before{content:""}.la-weight:before{content:""}.la-weight-hanging:before{content:""}.la-weixin:before{content:""}.la-whatsapp:before{content:""}.la-whatsapp-square:before{content:""}.la-wheelchair:before{content:""}.la-whmcs:before{content:""}.la-wifi:before{content:""}.la-wikipedia-w:before{content:""}.la-wind:before{content:""}.la-window-close:before{content:""}.la-window-maximize:before{content:""}.la-window-minimize:before{content:""}.la-window-restore:before{content:""}.la-windows:before{content:""}.la-wine-bottle:before{content:""}.la-wine-glass:before{content:""}.la-wine-glass-alt:before{content:""}.la-wix:before{content:""}.la-wizards-of-the-coast:before{content:""}.la-wolf-pack-battalion:before{content:""}.la-won-sign:before{content:""}.la-wordpress:before{content:""}.la-wordpress-simple:before{content:""}.la-wpbeginner:before{content:""}.la-wpexplorer:before{content:""}.la-wpforms:before{content:""}.la-wpressr:before{content:""}.la-wrench:before{content:""}.la-x-ray:before{content:""}.la-xbox:before{content:""}.la-xing:before{content:""}.la-xing-square:before{content:""}.la-y-combinator:before{content:""}.la-yahoo:before{content:""}.la-yammer:before{content:""}.la-yandex:before{content:""}.la-yandex-international:before{content:""}.la-yarn:before{content:""}.la-yelp:before{content:""}.la-yen-sign:before{content:""}.la-yin-yang:before{content:""}.la-yoast:before{content:""}.la-youtube:before{content:""}.la-youtube-square:before{content:""}.la-zhihu:before{content:""}.la-hat-cowboy:before{content:""}.la-hat-cowboy-side:before{content:""}.la-mdb:before{content:""}.la-mouse:before{content:""}.la-orcid:before{content:""}.la-record-vinyl:before{content:""}.la-swift:before{content:""}.la-umbraco:before{content:""}.la-buy-n-large:before{content:""}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto} diff --git a/public/build/assets/manage-products-Cuo5kQ-p.js b/public/build/assets/manage-products-Cuo5kQ-p.js new file mode 100644 index 000000000..fe174913e --- /dev/null +++ b/public/build/assets/manage-products-Cuo5kQ-p.js @@ -0,0 +1 @@ +import{P as G,b as y,a as U,v as q,i as Q,F as J}from"./bootstrap-Bpe5LRJd.js";import{n as L,b as K}from"./ns-prompt-popup-C2dK5WQb.js";import{_,n as I}from"./currency-lOMYG1Wf.js";import{_ as M}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as l,c as a,a as i,B as V,t as u,F as b,b as v,e as m,p as N,r as w,f as k,w as P,i as S,n as F,A as $,g as T}from"./runtime-core.esm-bundler-RT2b-_3S.js";const W={name:"ns-product-group",props:["fields"],watch:{searchValue(){clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout(()=>{this.searchProducts(this.searchValue)},1e3)},products:{deep:!0,handler(){this.$forceUpdate()}}},computed:{totalProducts(){return this.products.length>0?(this.$emit("update",this.products),this.products.map(e=>parseFloat(e.sale_price)*parseFloat(e.quantity)).reduce((e,t)=>e+t)):0}},mounted(){const e=this.fields.filter(t=>t.name==="product_subitems");e.length>0&&e[0].value!==void 0&&e[0].value.length>0&&(this.products=e[0].value)},data(){return{searchValue:"",searchTimeout:null,results:[],products:[]}},methods:{__:_,nsCurrency:I,setSalePrice(){this.$emit("updateSalePrice",this.totalProducts)},removeProduct(e){G.show(L,{title:_("Delete Sub item"),message:_("Would you like to delete this sub item?"),onAction:t=>{t&&this.products.splice(e,1)}})},toggleUnitField(e){e._unit_toggled||(e._unit_toggled=!e._unit_toggled),setTimeout(()=>{e._unit_toggled&&this.$refs.unitField[0].addEventListener("blur",()=>{e._unit_toggled=!1,this.$forceUpdate()})},200)},toggleQuantityField(e){e._quantity_toggled=!e._quantity_toggled,setTimeout(()=>{e._quantity_toggled&&(this.$refs.quantityField[0].select(),this.$refs.quantityField[0].addEventListener("blur",()=>{this.toggleQuantityField(e),this.$forceUpdate()}))},200)},togglePriceField(e){e._price_toggled=!e._price_toggled,setTimeout(()=>{e._price_toggled&&(this.$refs.priceField[0].select(),this.$refs.priceField[0].addEventListener("blur",()=>{this.togglePriceField(e),this.$forceUpdate()}))},200)},redefineUnit(e){const t=e.unit_quantities.filter(n=>n.id===e.unit_quantity_id);t.length>0&&(e.unit_quantity=t[0],e.unit_id=t[0].unit.id,e.unit=t[0].unit,e.sale_price=t[0].sale_price)},async addResult(e){if(this.searchValue="",e.type==="grouped")return y.error(_("Unable to add a grouped product.")).subscribe();try{const t=await new Promise((d,r)=>{G.show(K,{label:_("Choose The Unit"),options:e.unit_quantities.map(s=>({label:s.unit.name,value:s.id})),resolve:d,reject:r})}),n=e.unit_quantities.filter(d=>parseInt(d.id)===parseInt(t[0].value));this.products.push({name:e.name,unit_quantity_id:t[0].value,unit_quantity:n[0],unit_id:n[0].unit.id,unit:n[0].unit,product_id:n[0].product_id,quantity:1,_price_toggled:!1,_quantity_toggled:!1,_unit_toggled:!1,unit_quantities:e.unit_quantities,sale_price:n[0].sale_price}),this.$emit("update",this.products)}catch(t){console.log(t)}},searchProducts(e){U.post("/api/products/search",{search:e,arguments:{type:{comparison:"<>",value:"grouped"},searchable:{comparison:"in",value:[0,1]}}}).subscribe({next:t=>{this.results=t},error:t=>{y.error(t.message||_("An unexpected error occurred"),_("Ok"),{duration:3e3}).subscribe()}})}}},z={class:"flex flex-col px-4 w-full"},H={class:"md:-mx-4 flex flex-col md:flex-row"},Y={class:"md:px-4 w-full"},X={class:"input-group border-2 rounded info flex w-full"},Z=["placeholder"],ee={key:0,class:"h-0 relative"},te={class:"ns-vertical-menu absolute w-full"},se=["onClick"],ie={class:"my-2"},re={class:"ns-table"},ne={colspan:"2",class:"border"},le={colspan:"2",class:"border p-2"},ae={class:"flex justify-between"},oe={class:"font-bold"},de=["onClick"],ue=["onClick"],ce={class:"input-group"},fe=["onChange","onUpdate:modelValue"],he=["value"],me=["onClick"],_e={key:0,class:"cursor-pointer border-b border-dashed border-info-secondary"},be=["onUpdate:modelValue"],pe=["onClick"],ge={key:0,class:"cursor-pointer border-b border-dashed border-info-secondary"},ve=["onUpdate:modelValue"],ye={key:0},xe={colspan:"2",class:"border p-2 text-center"},we={key:0},ke={class:"w-1/2 border p-2 text-left"},Ue={class:"w-1/2 border p-2 text-right"};function Fe(e,t,n,d,r,s){return l(),a("div",z,[i("div",H,[i("div",Y,[i("div",X,[V(i("input",{placeholder:s.__("Search products..."),"onUpdate:modelValue":t[0]||(t[0]=o=>r.searchValue=o),type:"text",class:"flex-auto p-2 outline-none"},null,8,Z),[[q,r.searchValue]]),i("button",{onClick:t[1]||(t[1]=o=>s.setSalePrice()),class:"px-2"},u(s.__("Set Sale Price")),1)]),r.results.length>0&&r.searchValue.length>0?(l(),a("div",ee,[i("ul",te,[(l(!0),a(b,null,v(r.results,o=>(l(),a("li",{key:o.id,onClick:g=>s.addResult(o),class:"p-2 border-b cursor-pointer"},u(o.name),9,se))),128))])])):m("",!0),i("div",ie,[i("table",re,[i("thead",null,[i("tr",null,[i("th",ne,u(s.__("Products")),1)])]),i("tbody",null,[(l(!0),a(b,null,v(r.products,(o,g)=>(l(),a("tr",{key:g},[i("td",le,[i("div",ae,[i("h3",oe,u(o.name),1),i("span",{onClick:f=>s.removeProduct(g),class:"hover:underline text-error-secondary cursor-pointer"},u(s.__("Remove")),9,de)]),i("ul",null,[i("li",{onClick:f=>s.toggleUnitField(o),class:"flex justify-between p-1 hover:bg-box-elevation-hover"},[i("span",null,u(s.__("Unit"))+":",1),i("div",ce,[V(i("select",{onChange:f=>s.redefineUnit(o),ref_for:!0,ref:"unitField",type:"text","onUpdate:modelValue":f=>o.unit_quantity_id=f},[(l(!0),a(b,null,v(o.unit_quantities,f=>(l(),a("option",{key:f.id,value:f.id},u(f.unit.name)+" ("+u(f.quantity)+")",9,he))),128))],40,fe),[[Q,o.unit_quantity_id]])])],8,ue),i("li",{onClick:f=>s.toggleQuantityField(o),class:"flex justify-between p-1 hover:bg-box-elevation-hover"},[i("span",null,u(s.__("Quantity"))+":",1),o._quantity_toggled?m("",!0):(l(),a("span",_e,u(o.quantity),1)),o._quantity_toggled?V((l(),a("input",{key:1,ref_for:!0,ref:"quantityField",type:"text","onUpdate:modelValue":f=>o.quantity=f},null,8,be)),[[q,o.quantity]]):m("",!0)],8,me),i("li",{onClick:f=>s.togglePriceField(o),class:"flex justify-between p-1 hover:bg-box-elevation-hover"},[i("span",null,u(s.__("Price"))+":",1),o._price_toggled?m("",!0):(l(),a("span",ge,u(s.nsCurrency(o.sale_price)),1)),o._price_toggled?V((l(),a("input",{key:1,ref_for:!0,ref:"priceField",type:"text","onUpdate:modelValue":f=>o.sale_price=f},null,8,ve)),[[q,o.sale_price]]):m("",!0)],8,pe)])])]))),128)),r.products.length===0?(l(),a("tr",ye,[i("td",xe,u(s.__("No product are added to this group.")),1)])):m("",!0)]),r.products.length>0?(l(),a("tfoot",we,[i("tr",null,[i("td",ke,u(s.__("Total")),1),i("td",Ue,u(s.nsCurrency(s.totalProducts)),1)])])):m("",!0)])])])])])}const Ve=M(W,[["render",Fe]]),Ce={components:{nsProductGroup:Ve},data:()=>({formValidation:new J,nsSnackBar:y,nsHttpClient:U,_sampleVariation:null,unitLoaded:!1,unitLoadError:!1,form:N({}),hasLoaded:!1,hasError:!1}),watch:{form:{deep:!0,handler(e){this.form.variations.forEach(t=>{if(this.formValidation.extractFields(t.tabs.identification.fields).type==="grouped"){for(let d in t.tabs)["identification","groups","taxes","units"].includes(d)||(t.tabs[d].visible=!1);t.tabs.groups&&(t.tabs.groups.visible=!0)}else{for(let d in t.tabs)["identification","groups","taxes","units"].includes(d)||(t.tabs[d].visible=!0);t.tabs.groups&&(t.tabs.groups.visible=!1)}})}}},computed:{defaultVariation(){const e=new Object;for(let t in this._sampleVariation.tabs)e[t]=new Object,e[t].label=this._sampleVariation.tabs[t].label,e[t].active=this._sampleVariation.tabs[t].active,e[t].fields=this._sampleVariation.tabs[t].fields.filter(n=>!["category_id","product_type","stock_management","expires"].includes(n.name)).map(n=>((typeof n.value=="string"&&n.value.length===0||n.value===null)&&(n.value=""),n));return{id:"",tabs:e}}},props:["submitMethod","submitUrl","returnUrl","src","units-url"],methods:{__:_,nsCurrency:I,handleUnitGroupFieldChanged(e,t){e.name==="unit_id"&&(t.label=this.getFirstSelectedUnit(t.fields))},async handleSaved(e,t,n,d){e.data.entry&&(await this.loadForm()).form.variations[n].tabs[t].fields.forEach(s=>{s.name===d.name&&(s.value=e.data.entry.id)})},getGroupProducts(e){if(e.groups){const t=e.groups.fields.filter(n=>n.name==="products_subitems");if(t.length>0)return t[0].value}return[]},setProducts(e,t){t.groups.fields.forEach(n=>{n.name==="product_subitems"&&(n.value=e)})},triggerRecompute(e){},getUnitQuantity(e){const t=e.filter(n=>n.name==="quantity").map(n=>n.value);return t.length>0?t[0]:0},removeUnitPriceGroup(e,t){const n=e.fields.filter(d=>d.name==="id"&&d.value!==void 0);Popup.show(L,{title:_("Confirm Your Action"),message:_("Would you like to delete this group ?"),onAction:d=>{if(d)if(n.length>0)this.confirmUnitQuantityDeletion({group:e,groups:t});else{const r=t.indexOf(e);t.splice(r,1)}}})},confirmUnitQuantityDeletion({group:e,groups:t}){Popup.show(L,{title:_("Your Attention Is Required"),size:"w-3/4-screen h-2/5-screen",message:_("The current unit you're about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?"),onAction:n=>{if(n){const d=e.fields.filter(r=>r.name==="id").map(r=>r.value)[0];U.delete(`/api/products/units/quantity/${d}`).subscribe({next:r=>{const s=t.indexOf(e);t.splice(s,1),y.success(r.message).subscribe()},error:r=>{nsSnackbar.error(r.message).subscribe()}})}}})},addUnitGroup(e){if(e.options.length===0)return y.error(_("Please select at least one unit group before you proceed.")).subscribe();if(e.options.length>e.groups.length){const t=e.groups;e.groups=[],setTimeout(()=>{e.groups=[...t,{label:this.getFirstSelectedUnit(e.fields),fields:JSON.parse(JSON.stringify(e.fields))}]},1)}else y.error(_("There shoulnd't be more option than there are units.")).subscribe()},loadAvailableUnits(e,t){if(t.name!=="unit_group")return;this.unitLoaded=!1,this.unitLoadError=!1;const n=e.fields.filter(d=>d.name==="unit_group")[0].value;U.get(this.unitsUrl.replace("{id}",n)).subscribe({next:d=>{e.fields.forEach(r=>{r.type==="group"&&(r.options=d,r.fields.forEach(s=>{["unit_id","convert_unit_id"].includes(s.name)&&(s.options=d.map(o=>({label:o.name,value:o.id})))}))}),this.unitLoaded=!0},error:d=>{this.unitLoadError=!0}})},submit(){if(this.formValidation.validateFields([this.form.main]),this.form.variations.map(r=>this.formValidation.validateForm(r)).filter(r=>r.length>0).length>0||Object.values(this.form.main.errors).length>0)return y.error(_("Unable to proceed the form is not valid.")).subscribe();const t=this.form.variations.map((r,s)=>r.tabs.images.groups.filter(o=>o.filter(g=>g.name==="featured"&&g.value===1).length>0));if(t[0]&&t[0].length>1)return y.error(_("Unable to proceed, more than one product is set as featured")).subscribe();const n=[];if(this.form.variations.map((r,s)=>r.tabs.units.fields.filter(o=>o.type==="group").forEach(o=>{o.groups.forEach(g=>{n.push(this.formValidation.validateFields(g.fields))})})),n.length===0)return y.error(_("Either Selling or Purchase unit isn't defined. Unable to proceed.")).subscribe();if(n.filter(r=>r===!1).length>0)return this.$forceUpdate(),y.error(_("Unable to proceed as one of the unit group field is invalid")).subscribe();const d={...this.formValidation.extractForm(this.form),variations:this.form.variations.map((r,s)=>{const o=this.formValidation.extractForm(r);s===0&&(o.$primary=!0),o.images=r.tabs.images.groups.map(f=>this.formValidation.extractFields(f));const g=new Object;return r.tabs.units.fields.filter(f=>f.type==="group").forEach(f=>{g[f.name]=f.groups.map(A=>this.formValidation.extractFields(A.fields))}),o.units={...o.units,...g},o})};this.formValidation.disableForm(this.form),U[this.submitMethod?this.submitMethod.toLowerCase():"post"](this.submitUrl,d).subscribe(r=>{if(r.status==="success"){if(this.submitMethod==="POST"&&this.returnUrl!==!1)return document.location=r.data.editUrl||this.returnUrl;y.info(r.message,_("Okay"),{duration:3e3}).subscribe(),this.$emit("saved")}this.formValidation.enableForm(this.form)},r=>{y.error(r.message,void 0,{duration:5e3}).subscribe(),this.formValidation.enableForm(this.form),r.response&&this.formValidation.triggerError(this.form,r.response.data)})},deleteVariation(e){confirm(_("Would you like to delete this variation ?"))&&this.form.variations.splice(e,1)},setTabActive(e,t){for(let n in t)n!==e&&(t[n].active=!1);if(t[e].active=!0,e==="units"){const n=t[e].fields.filter(d=>d.name==="unit_group");n.length>0&&this.loadAvailableUnits(t[e],n[0])}},duplicate(e){this.form.variations.push(Object.assign({},e))},newVariation(){this.form.variations.push(this.defaultVariation)},getActiveTab(e){for(let t in e)if(e[t].active)return e[t];return!1},getActiveTabKey(e){for(let t in e)if(e[t].active)return t;return!1},parseForm(e){return e.main.value=e.main.value===void 0?"":e.main.value,e.main=this.formValidation.createFields([e.main])[0],e.variations.forEach((t,n)=>{let d=0;for(let r in t.tabs)d===0&&t.tabs[r].active===void 0?(t.tabs[r].active=!0,this._sampleVariation=JSON.parse(JSON.stringify(t)),t.tabs[r].fields&&(t.tabs[r].fields=this.formValidation.createFields(t.tabs[r].fields.filter(s=>s.name!=="name")))):t.tabs[r].fields&&(t.tabs[r].fields=this.formValidation.createFields(t.tabs[r].fields)),t.tabs[r].active=t.tabs[r].active===void 0?!1:t.tabs[r].active,t.tabs[r].visible=t.tabs[r].visible===void 0?!0:t.tabs[r].visible,d++}),e},loadForm(){return new Promise((e,t)=>{const n=U.get(`${this.src}`);this.hasLoaded=!1,this.hasError=!1,n.subscribe({next:d=>{e(d),this.hasLoaded=!0,this.form=N(this.parseForm(d.form))},error:d=>{t(d),this.hasError=!0}})})},addImage(e){e.tabs.images.groups.push(this.formValidation.createFields(JSON.parse(JSON.stringify(e.tabs.images.fields))))},removeImage(e,t){const n=e.tabs.images.groups.indexOf(t);e.tabs.images.groups.splice(n,1)},handleSavedUnitGroupFields(e,t){e.data&&(t.options.push({label:e.data.entry.name,value:e.data.entry.id}),t.value=e.data.entry.id)},getGroupId(e){const t=e.filter(n=>n.name==="id");return t.length>0?t[0].value:!1},getFirstSelectedUnit(e){const t=e.filter(n=>n.name==="unit_id");if(t.length>0){const n=t[0].options.filter(d=>d.value===t[0].value);if(n.length>0)return n[0].label}return _("No Unit Selected")}},async mounted(){await this.loadForm()},name:"ns-manage-products"},Pe={class:"form flex-auto",id:"crud-form"},Se={key:0,class:"flex items-center h-full justify-center flex-auto"},Te={key:1},qe={class:"flex flex-col"},Ae={class:"flex justify-between items-center"},je={for:"title",class:"font-bold my-2 text-primary"},Ee={for:"title",class:"text-sm my-2 text-primary"},Oe=["href"],Le=["disabled"],Ge=["disabled"],Ne={key:0,class:"text-xs text-primary py-1"},$e={id:"form-container",class:"-mx-4 flex flex-wrap mt-4"},Ie={class:"px-4 w-full"},Me={id:"card-header",class:"flex flex-wrap justify-between ns-tab ml-4"},Re={class:"flex flex-wrap"},Be=["onClick"],De={key:0,class:"rounded-full bg-error-secondary text-white h-6 w-6 flex font-semibold items-center justify-center"},Qe=i("div",{class:"flex items-center justify-center -mx-1"},null,-1),Je={class:"card-body ns-tab-item"},Ke={class:"rounded shadow p-2"},We={key:0,class:"-mx-4 flex flex-wrap"},ze={key:1,class:"-mx-4 flex flex-wrap text-primary"},He={class:"flex flex-col px-4 w-full md:w-1/2 lg:w-1/3"},Ye={class:"rounded border border-box-elevation-edge bg-box-elevation-background flex justify-between p-2 items-center"},Xe=["onClick"],Ze=i("i",{class:"las la-plus-circle"},null,-1),et=[Ze],tt={class:"rounded border border-box-elevation-edge flex flex-col overflow-hidden"},st={class:"p-2"},it=["onClick"],rt={key:2,class:"-mx-4 flex flex-wrap text-primary"},nt={key:3,class:"-mx-4 flex flex-wrap"},lt={class:"px-4 w-full md:w-1/2 lg:w-1/3"},at={class:"mb-2"},ot={class:"font-medium text-primary"},dt={class:"py-1 text-sm text-primary"},ut={class:"mb-2"},ct=["onClick"],ft=i("span",{class:"rounded-full border-2 ns-inset-button info h-8 w-8 flex items-center justify-center"},[i("i",{class:"las la-plus-circle"})],-1),ht={class:"shadow rounded overflow-hidden bg-box-elevation-background text-primary"},mt={class:"border-b text-sm p-2 flex justify-between text-primary border-box-elevation-edge"},_t={class:"p-2 mb-2"},bt={class:"md:-mx-2 flex flex-wrap"},pt=["onClick"],gt={key:1,class:"px-4 w-full lg:w-2/3 flex justify-center items-center"},vt={key:2,class:"px-4 w-full md:w-1/2 lg:w-2/3 flex flex-col justify-center items-center"},yt=i("i",{class:"las la-frown text-7xl"},null,-1),xt={class:"w-full md:w-1/3 py-3 text-center text-sm text-primary"};function wt(e,t,n,d,r,s){const o=w("ns-spinner"),g=w("ns-notice"),f=w("ns-field"),A=w("ns-product-group"),R=w("ns-tabs-item"),B=w("ns-tabs");return l(),a("div",Pe,[Object.values(e.form).length===0&&e.hasLoaded?(l(),a("div",Se,[k(o)])):m("",!0),Object.values(e.form).length===0&&e.hasError?(l(),a("div",Te,[k(g,{color:"error"},{title:P(()=>[S(u(s.__("An Error Has Occured")),1)]),description:P(()=>[S(u(s.__("An unexpected error has occured while loading the form. Please check the log or contact the support.")),1)]),_:1})])):m("",!0),Object.values(e.form).length>0?(l(),a(b,{key:2},[i("div",qe,[i("div",Ae,[i("label",je,u(e.form.main.label),1),i("div",Ee,[n.returnUrl?(l(),a("a",{key:0,href:n.returnUrl,class:"rounded-full border ns-inset-button error hover:bg-error-tertiary px-2 py-1"},u(s.__("Return")),9,Oe)):m("",!0)])]),i("div",{class:F([e.form.main.disabled?"":e.form.main.errors.length>0?"border-error-tertiary":"","input-group info flex border-2 rounded overflow-hidden"])},[V(i("input",{"onUpdate:modelValue":t[0]||(t[0]=h=>e.form.main.value=h),onBlur:t[1]||(t[1]=h=>e.formValidation.checkField(e.form.main)),onChange:t[2]||(t[2]=h=>e.formValidation.checkField(e.form.main)),disabled:e.form.main.disabled,type:"text",class:F([(e.form.main.disabled,""),"flex-auto text-primary outline-none h-10 px-2"])},null,42,Le),[[q,e.form.main.value]]),i("button",{disabled:e.form.main.disabled,class:F([e.form.main.disabled?"":e.form.main.errors.length>0?"bg-error-tertiary":"","outline-none px-4 h-10 rounded-none"]),onClick:t[3]||(t[3]=h=>s.submit())},[$(e.$slots,"save",{},()=>[S(u(s.__("Save")),1)])],10,Ge)],2),e.form.main.description&&e.form.main.errors.length===0?(l(),a("p",Ne,u(e.form.main.description),1)):m("",!0),(l(!0),a(b,null,v(e.form.main.errors,(h,C)=>(l(),a("p",{class:"text-xs py-1 text-error-tertiary",key:C},[i("span",null,[$(e.$slots,"error-required",{},()=>[S(u(h.identifier),1)])])]))),128))]),i("div",$e,[i("div",Ie,[(l(!0),a(b,null,v(e.form.variations,(h,C)=>(l(),a("div",{id:"tabbed-card",class:"mb-8",key:C},[i("div",Me,[i("div",Re,[(l(!0),a(b,null,v(h.tabs,(c,x)=>(l(),a(b,null,[c.visible?(l(),a("div",{onClick:p=>s.setTabActive(x,h.tabs),class:F([c.active?"active":"inactive","tab cursor-pointer text-primary px-4 py-2 rounded-tl-lg rounded-tr-lg flex justify-between"]),key:x},[i("span",{class:F(["block",c.errors&&c.errors.length>0?"mr-2":""])},u(c.label),3),c.errors&&c.errors.length>0?(l(),a("span",De,u(c.errors.length),1)):m("",!0)],10,Be)):m("",!0)],64))),256))]),Qe]),i("div",Je,[i("div",Ke,[["images","units","groups"].includes(s.getActiveTabKey(h.tabs))?m("",!0):(l(),a("div",We,[(l(!0),a(b,null,v(s.getActiveTab(h.tabs).fields,(c,x)=>(l(),a("div",{key:x,class:"flex flex-col px-4 w-full md:w-1/2 lg:w-1/3"},[k(f,{onSaved:p=>s.handleSaved(p,s.getActiveTabKey(h.tabs),C,c),field:c},null,8,["onSaved","field"])]))),128))])),s.getActiveTabKey(h.tabs)==="images"?(l(),a("div",ze,[i("div",He,[i("div",Ye,[i("span",null,u(s.__("Add Images")),1),i("button",{onClick:c=>s.addImage(h),class:"outline-none rounded-full border flex items-center justify-center w-8 h-8 ns-inset-button info"},et,8,Xe)])]),(l(!0),a(b,null,v(s.getActiveTab(h.tabs).groups,(c,x)=>(l(),a("div",{key:x,class:"flex flex-col px-4 w-full md:w-1/2 lg:w-1/3 mb-4"},[i("div",tt,[i("div",st,[(l(!0),a(b,null,v(c,(p,j)=>(l(),T(f,{key:j,field:p},null,8,["field"]))),128))]),i("div",{onClick:p=>s.removeImage(h,c),class:"text-center py-2 border-t border-box-elevation-edge text-sm cursor-pointer"},u(s.__("Remove Image")),9,it)])]))),128))])):m("",!0),s.getActiveTabKey(h.tabs)==="groups"?(l(),a("div",rt,[k(A,{onUpdate:c=>s.setProducts(c,h.tabs),onUpdateSalePrice:c=>s.triggerRecompute(c,h.tabs),fields:s.getActiveTab(h.tabs).fields},null,8,["onUpdate","onUpdateSalePrice","fields"])])):m("",!0),s.getActiveTabKey(h.tabs)==="units"?(l(),a("div",nt,[i("div",lt,[(l(!0),a(b,null,v(s.getActiveTab(h.tabs).fields.filter(c=>c.name!=="selling_group"),c=>(l(),T(f,{onChange:x=>s.loadAvailableUnits(s.getActiveTab(h.tabs),c),field:c},null,8,["onChange","field"]))),256))]),e.unitLoaded?(l(!0),a(b,{key:0},v(s.getActiveTab(h.tabs).fields,(c,x)=>(l(),a(b,null,[c.type==="group"?(l(),a("div",{class:"px-4 w-full lg:w-2/3",key:x},[i("div",at,[i("label",ot,u(c.label),1),i("p",dt,u(c.description),1)]),i("div",ut,[i("div",{onClick:p=>s.addUnitGroup(c),class:"border-dashed border-2 p-1 bg-box-elevation-background border-box-elevation-edge flex justify-between items-center text-primary cursor-pointer rounded-lg"},[ft,i("span",null,u(s.__("New Group")),1)],8,ct)]),c.groups.length>0?(l(),T(B,{key:0,onChangeTab:p=>h.activeUnitTab=p,active:h.activeUnitTab||"tab-0"},{default:P(()=>[(l(!0),a(b,null,v(c.groups,(p,j)=>(l(),T(R,{padding:"p-2",identifier:"tab-"+j,label:p.label},{default:P(()=>[i("div",ht,[i("div",mt,[i("span",null,u(s.__("Available Quantity")),1),i("span",null,u(s.getUnitQuantity(p.fields)),1)]),i("div",_t,[i("div",bt,[(l(!0),a(b,null,v(p.fields,(E,D)=>(l(),a("div",{class:"w-full md:w-1/2 p-2",key:D},[k(f,{onChange:O=>s.handleUnitGroupFieldChanged(O,p),onSaved:O=>s.handleSavedUnitGroupFields(O,E),field:E},null,8,["onChange","onSaved","field"])]))),128))])]),i("div",{onClick:E=>s.removeUnitPriceGroup(p,c.groups),class:"p-1 hover:bg-error-primary border-t border-box-elevation-edge flex items-center justify-center cursor-pointer font-medium"},u(s.__("Delete")),9,pt)])]),_:2},1032,["identifier","label"]))),256))]),_:2},1032,["onChangeTab","active"])):m("",!0)])):m("",!0)],64))),256)):m("",!0),!e.unitLoaded&&!e.unitLoadError?(l(),a("div",gt,[k(o)])):m("",!0),e.unitLoadError&&!e.unitLoaded?(l(),a("div",vt,[yt,i("p",xt,u(s.__("We were not able to load the units. Make sure there are units attached on the unit group selected.")),1)])):m("",!0)])):m("",!0)])])]))),128))])])],64)):m("",!0)])}const Pt=M(Ce,[["render",wt]]);export{Pt as default}; diff --git a/public/build/assets/manage-products-VWv48bsW.js b/public/build/assets/manage-products-VWv48bsW.js deleted file mode 100644 index 611e04e33..000000000 --- a/public/build/assets/manage-products-VWv48bsW.js +++ /dev/null @@ -1 +0,0 @@ -import{j as O,v as q,s as R,k as B}from"./tax-BACo6kIE.js";import{b as v,a as w}from"./bootstrap-B7E2wy_a.js";import{n as E,b as D}from"./ns-prompt-popup-BbWKrSku.js";import{_ as p,n as N}from"./currency-ZXKMLAC0.js";import{_ as G}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as l,c as o,b as s,C as U,t as u,F as b,e as g,f as m,r as C,g as k,w as L,j as P,n as V,B as $,h as A}from"./runtime-core.esm-bundler-DCfIpxDt.js";const Q={name:"ns-product-group",props:["fields"],watch:{searchValue(){clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout(()=>{this.searchProducts(this.searchValue)},1e3)},products:{deep:!0,handler(){this.$forceUpdate()}}},computed:{totalProducts(){return this.products.length>0?(this.$emit("update",this.products),this.products.map(e=>parseFloat(e.sale_price)*parseFloat(e.quantity)).reduce((e,t)=>e+t)):0}},mounted(){const e=this.fields.filter(t=>t.name==="product_subitems");e.length>0&&e[0].value!==void 0&&e[0].value.length>0&&(this.products=e[0].value)},data(){return{searchValue:"",searchTimeout:null,results:[],products:[]}},methods:{__:p,nsCurrency:N,setSalePrice(){this.$emit("updateSalePrice",this.totalProducts)},removeProduct(e){O.show(E,{title:p("Delete Sub item"),message:p("Would you like to delete this sub item?"),onAction:t=>{t&&this.products.splice(e,1)}})},toggleUnitField(e){e._unit_toggled||(e._unit_toggled=!e._unit_toggled),setTimeout(()=>{e._unit_toggled&&this.$refs.unitField[0].addEventListener("blur",()=>{e._unit_toggled=!1,this.$forceUpdate()})},200)},toggleQuantityField(e){e._quantity_toggled=!e._quantity_toggled,setTimeout(()=>{e._quantity_toggled&&(this.$refs.quantityField[0].select(),this.$refs.quantityField[0].addEventListener("blur",()=>{this.toggleQuantityField(e),this.$forceUpdate()}))},200)},togglePriceField(e){e._price_toggled=!e._price_toggled,setTimeout(()=>{e._price_toggled&&(this.$refs.priceField[0].select(),this.$refs.priceField[0].addEventListener("blur",()=>{this.togglePriceField(e),this.$forceUpdate()}))},200)},redefineUnit(e){const t=e.unit_quantities.filter(n=>n.id===e.unit_quantity_id);t.length>0&&(e.unit_quantity=t[0],e.unit_id=t[0].unit.id,e.unit=t[0].unit,e.sale_price=t[0].sale_price)},async addResult(e){if(this.searchValue="",e.type==="grouped")return v.error(p("Unable to add a grouped product.")).subscribe();try{const t=await new Promise((d,i)=>{O.show(D,{label:p("Choose The Unit"),options:e.unit_quantities.map(r=>({label:r.unit.name,value:r.id})),resolve:d,reject:i})}),n=e.unit_quantities.filter(d=>parseInt(d.id)===parseInt(t[0].value));this.products.push({name:e.name,unit_quantity_id:t[0].value,unit_quantity:n[0],unit_id:n[0].unit.id,unit:n[0].unit,product_id:n[0].product_id,quantity:1,_price_toggled:!1,_quantity_toggled:!1,_unit_toggled:!1,unit_quantities:e.unit_quantities,sale_price:n[0].sale_price}),this.$emit("update",this.products)}catch(t){console.log(t)}},searchProducts(e){w.post("/api/products/search",{search:e,arguments:{type:{comparison:"<>",value:"grouped"},searchable:{comparison:"in",value:[0,1]}}}).subscribe({next:t=>{this.results=t},error:t=>{v.error(t.message||p("An unexpected error occurred"),p("Ok"),{duration:3e3}).subscribe()}})}}},J={class:"flex flex-col px-4 w-full"},K={class:"md:-mx-4 flex flex-col md:flex-row"},W={class:"md:px-4 w-full"},z={class:"input-group border-2 rounded info flex w-full"},H=["placeholder"],Y={key:0,class:"h-0 relative"},X={class:"ns-vertical-menu absolute w-full"},Z=["onClick"],ee={class:"my-2"},te={class:"ns-table"},se={colspan:"2",class:"border"},re={colspan:"2",class:"border p-2"},ie={class:"flex justify-between"},ne={class:"font-bold"},le=["onClick"],oe=["onClick"],ae={class:"input-group"},de=["onChange","onUpdate:modelValue"],ue=["value"],ce=["onClick"],fe={key:0,class:"cursor-pointer border-b border-dashed border-info-secondary"},he=["onUpdate:modelValue"],me=["onClick"],pe={key:0,class:"cursor-pointer border-b border-dashed border-info-secondary"},be=["onUpdate:modelValue"],_e={key:0},ge={colspan:"2",class:"border p-2 text-center"},ve={key:0},ye={class:"w-1/2 border p-2 text-left"},xe={class:"w-1/2 border p-2 text-right"};function we(e,t,n,d,i,r){return l(),o("div",J,[s("div",K,[s("div",W,[s("div",z,[U(s("input",{placeholder:r.__("Search products..."),"onUpdate:modelValue":t[0]||(t[0]=a=>i.searchValue=a),type:"text",class:"flex-auto p-2 outline-none"},null,8,H),[[q,i.searchValue]]),s("button",{onClick:t[1]||(t[1]=a=>r.setSalePrice()),class:"px-2"},u(r.__("Set Sale Price")),1)]),i.results.length>0&&i.searchValue.length>0?(l(),o("div",Y,[s("ul",X,[(l(!0),o(b,null,g(i.results,a=>(l(),o("li",{key:a.id,onClick:_=>r.addResult(a),class:"p-2 border-b cursor-pointer"},u(a.name),9,Z))),128))])])):m("",!0),s("div",ee,[s("table",te,[s("thead",null,[s("tr",null,[s("th",se,u(r.__("Products")),1)])]),s("tbody",null,[(l(!0),o(b,null,g(i.products,(a,_)=>(l(),o("tr",{key:_},[s("td",re,[s("div",ie,[s("h3",ne,u(a.name),1),s("span",{onClick:f=>r.removeProduct(_),class:"hover:underline text-error-secondary cursor-pointer"},u(r.__("Remove")),9,le)]),s("ul",null,[s("li",{onClick:f=>r.toggleUnitField(a),class:"flex justify-between p-1 hover:bg-box-elevation-hover"},[s("span",null,u(r.__("Unit"))+":",1),s("div",ae,[U(s("select",{onChange:f=>r.redefineUnit(a),ref_for:!0,ref:"unitField",type:"text","onUpdate:modelValue":f=>a.unit_quantity_id=f},[(l(!0),o(b,null,g(a.unit_quantities,f=>(l(),o("option",{key:f.id,value:f.id},u(f.unit.name)+" ("+u(f.quantity)+")",9,ue))),128))],40,de),[[R,a.unit_quantity_id]])])],8,oe),s("li",{onClick:f=>r.toggleQuantityField(a),class:"flex justify-between p-1 hover:bg-box-elevation-hover"},[s("span",null,u(r.__("Quantity"))+":",1),a._quantity_toggled?m("",!0):(l(),o("span",fe,u(a.quantity),1)),a._quantity_toggled?U((l(),o("input",{key:1,ref_for:!0,ref:"quantityField",type:"text","onUpdate:modelValue":f=>a.quantity=f},null,8,he)),[[q,a.quantity]]):m("",!0)],8,ce),s("li",{onClick:f=>r.togglePriceField(a),class:"flex justify-between p-1 hover:bg-box-elevation-hover"},[s("span",null,u(r.__("Price"))+":",1),a._price_toggled?m("",!0):(l(),o("span",pe,u(r.nsCurrency(a.sale_price)),1)),a._price_toggled?U((l(),o("input",{key:1,ref_for:!0,ref:"priceField",type:"text","onUpdate:modelValue":f=>a.sale_price=f},null,8,be)),[[q,a.sale_price]]):m("",!0)],8,me)])])]))),128)),i.products.length===0?(l(),o("tr",_e,[s("td",ge,u(r.__("No product are added to this group.")),1)])):m("",!0)]),i.products.length>0?(l(),o("tfoot",ve,[s("tr",null,[s("td",ye,u(r.__("Total")),1),s("td",xe,u(r.nsCurrency(r.totalProducts)),1)])])):m("",!0)])])])])])}const ke=G(Q,[["render",we]]),Ve={components:{nsProductGroup:ke},data:()=>({formValidation:new B,nsSnackBar:v,nsHttpClient:w,_sampleVariation:null,unitLoaded:!1,unitLoadError:!1,form:"",hasLoaded:!1,hasError:!1}),watch:{form:{deep:!0,handler(e){this.form.variations.forEach(t=>{if(this.formValidation.extractFields(t.tabs.identification.fields).type==="grouped"){for(let d in t.tabs)["identification","groups","taxes","units"].includes(d)||(t.tabs[d].visible=!1);t.tabs.groups&&(t.tabs.groups.visible=!0)}else{for(let d in t.tabs)["identification","groups","taxes","units"].includes(d)||(t.tabs[d].visible=!0);t.tabs.groups&&(t.tabs.groups.visible=!1)}})}}},computed:{defaultVariation(){const e=new Object;for(let t in this._sampleVariation.tabs)e[t]=new Object,e[t].label=this._sampleVariation.tabs[t].label,e[t].active=this._sampleVariation.tabs[t].active,e[t].fields=this._sampleVariation.tabs[t].fields.filter(n=>!["category_id","product_type","stock_management","expires"].includes(n.name)).map(n=>((typeof n.value=="string"&&n.value.length===0||n.value===null)&&(n.value=""),n));return{id:"",tabs:e}}},props:["submitMethod","submitUrl","returnUrl","src","units-url"],methods:{__:p,nsCurrency:N,async handleSaved(e,t,n,d){e.data.entry&&(await this.loadForm()).form.variations[n].tabs[t].fields.forEach(r=>{r.name===d.name&&(r.value=e.data.entry.id)})},getGroupProducts(e){if(e.groups){const t=e.groups.fields.filter(n=>n.name==="products_subitems");if(t.length>0)return t[0].value}return[]},setProducts(e,t){t.groups.fields.forEach(n=>{n.name==="product_subitems"&&(n.value=e)})},triggerRecompute(e){},getUnitQuantity(e){const t=e.filter(n=>n.name==="quantity").map(n=>n.value);return t.length>0?t[0]:0},removeUnitPriceGroup(e,t){const n=e.filter(d=>d.name==="id"&&d.value!==void 0);Popup.show(E,{title:p("Confirm Your Action"),message:p("Would you like to delete this group ?"),onAction:d=>{if(d)if(n.length>0)this.confirmUnitQuantityDeletion({group_fields:e,group:t});else{const i=t.indexOf(e);t.splice(i,1)}}})},confirmUnitQuantityDeletion({group_fields:e,group:t}){Popup.show(E,{title:p("Your Attention Is Required"),size:"w-3/4-screen h-2/5-screen",message:p("The current unit you're about to delete has a reference on the database and it might have already procured stock. Deleting that reference will remove procured stock. Would you proceed ?"),onAction:n=>{if(n){const d=e.filter(i=>i.name==="id").map(i=>i.value)[0];w.delete(`/api/products/units/quantity/${d}`).subscribe(i=>{const r=t.indexOf(e);t.splice(r,1),v.success(i.message).subscribe()},i=>{nsSnackbar.error(i.message).subscribe()})}}})},addUnitGroup(e){if(e.options.length===0)return v.error(p("Please select at least one unit group before you proceed.")).subscribe();e.options.length>e.groups.length?e.groups.push(JSON.parse(JSON.stringify(e.fields))):v.error(p("There shoulnd't be more option than there are units.")).subscribe()},loadAvailableUnits(e){this.unitLoaded=!1,this.unitLoadError=!1;const t=e.fields.filter(n=>n.name==="unit_group")[0].value;w.get(this.unitsUrl.replace("{id}",t)).subscribe({next:n=>{e.fields.forEach(d=>{d.type==="group"&&(d.options=n,d.fields.forEach(i=>{["unit_id","convert_unit_id"].includes(i.name)&&(i.options=n.map(r=>({label:r.name,value:r.id})))}))}),this.unitLoaded=!0,this.$forceUpdate()},error:n=>{this.unitLoadError=!0}})},submit(){if(this.formValidation.validateFields([this.form.main]),this.form.variations.map(i=>this.formValidation.validateForm(i)).filter(i=>i.length>0).length>0||Object.values(this.form.main.errors).length>0)return v.error(p("Unable to proceed the form is not valid.")).subscribe();const t=this.form.variations.map((i,r)=>i.tabs.images.groups.filter(a=>a.filter(_=>_.name==="featured"&&_.value===1).length>0));if(t[0]&&t[0].length>1)return v.error(p("Unable to proceed, more than one product is set as featured")).subscribe();const n=[];if(this.form.variations.map((i,r)=>i.tabs.units.fields.filter(a=>a.type==="group").forEach(a=>{a.groups.forEach(_=>{n.push(this.formValidation.validateFields(_))})})),n.length===0)return v.error(p("Either Selling or Purchase unit isn't defined. Unable to proceed.")).subscribe();if(n.filter(i=>i===!1).length>0)return this.$forceUpdate(),v.error(p("Unable to proceed as one of the unit group field is invalid")).subscribe();const d={...this.formValidation.extractForm(this.form),variations:this.form.variations.map((i,r)=>{const a=this.formValidation.extractForm(i);r===0&&(a.$primary=!0),a.images=i.tabs.images.groups.map(f=>this.formValidation.extractFields(f));const _=new Object;return i.tabs.units.fields.filter(f=>f.type==="group").forEach(f=>{_[f.name]=f.groups.map(S=>this.formValidation.extractFields(S))}),a.units={...a.units,..._},a})};this.formValidation.disableForm(this.form),w[this.submitMethod?this.submitMethod.toLowerCase():"post"](this.submitUrl,d).subscribe(i=>{if(i.status==="success"){if(this.submitMethod==="POST"&&this.returnUrl!==!1)return document.location=i.data.editUrl||this.returnUrl;v.info(i.message,p("Okay"),{duration:3e3}).subscribe(),this.$emit("saved")}this.formValidation.enableForm(this.form)},i=>{v.error(i.message,void 0,{duration:5e3}).subscribe(),this.formValidation.enableForm(this.form),i.response&&this.formValidation.triggerError(this.form,i.response.data)})},deleteVariation(e){confirm(p("Would you like to delete this variation ?"))&&this.form.variations.splice(e,1)},setTabActive(e,t){for(let n in t)n!==e&&(t[n].active=!1);t[e].active=!0,e==="units"&&this.loadAvailableUnits(t[e])},duplicate(e){this.form.variations.push(Object.assign({},e))},newVariation(){this.form.variations.push(this.defaultVariation)},getActiveTab(e){for(let t in e)if(e[t].active)return e[t];return!1},getActiveTabKey(e){for(let t in e)if(e[t].active)return t;return!1},parseForm(e){return e.main.value=e.main.value===void 0?"":e.main.value,e.main=this.formValidation.createFields([e.main])[0],e.variations.forEach((t,n)=>{let d=0;for(let i in t.tabs)d===0&&t.tabs[i].active===void 0?(t.tabs[i].active=!0,this._sampleVariation=JSON.parse(JSON.stringify(t)),t.tabs[i].fields&&(t.tabs[i].fields=this.formValidation.createFields(t.tabs[i].fields.filter(r=>r.name!=="name")))):t.tabs[i].fields&&(t.tabs[i].fields=this.formValidation.createFields(t.tabs[i].fields)),t.tabs[i].active=t.tabs[i].active===void 0?!1:t.tabs[i].active,t.tabs[i].visible=t.tabs[i].visible===void 0?!0:t.tabs[i].visible,d++}),e},loadForm(){return new Promise((e,t)=>{const n=w.get(`${this.src}`);this.hasLoaded=!1,this.hasError=!1,n.subscribe({next:d=>{e(d),this.hasLoaded=!0,this.form=this.parseForm(d.form)},error:d=>{t(d),this.hasError=!0}})})},addImage(e){e.tabs.images.groups.push(this.formValidation.createFields(JSON.parse(JSON.stringify(e.tabs.images.fields))))},removeImage(e,t){const n=e.tabs.images.groups.indexOf(t);e.tabs.images.groups.splice(n,1)},handleSavedUnitGroupFields(e,t){e.data&&(t.options.push({label:e.data.entry.name,value:e.data.entry.id}),t.value=e.data.entry.id)}},async mounted(){await this.loadForm()},name:"ns-manage-products"},Ue={class:"form flex-auto",id:"crud-form"},Fe={key:0,class:"flex items-center h-full justify-center flex-auto"},Ce={key:1},Pe={class:"flex flex-col"},qe={class:"flex justify-between items-center"},Se={for:"title",class:"font-bold my-2 text-primary"},Te={for:"title",class:"text-sm my-2 text-primary"},je=["href"],Ae=["disabled"],Ee=["disabled"],Oe={key:0,class:"text-xs text-primary py-1"},Le={id:"form-container",class:"-mx-4 flex flex-wrap mt-4"},$e={class:"px-4 w-full"},Ne={id:"card-header",class:"flex flex-wrap justify-between ns-tab ml-4"},Ge={class:"flex flex-wrap"},Ie=["onClick"],Me={key:0,class:"rounded-full bg-error-secondary text-white h-6 w-6 flex font-semibold items-center justify-center"},Re=s("div",{class:"flex items-center justify-center -mx-1"},null,-1),Be={class:"card-body ns-tab-item"},De={class:"rounded shadow p-2"},Qe={key:0,class:"-mx-4 flex flex-wrap"},Je={key:1,class:"-mx-4 flex flex-wrap text-primary"},Ke={class:"flex flex-col px-4 w-full md:w-1/2 lg:w-1/3"},We={class:"rounded border border-box-elevation-edge bg-box-elevation-background flex justify-between p-2 items-center"},ze=["onClick"],He=s("i",{class:"las la-plus-circle"},null,-1),Ye=[He],Xe={class:"rounded border border-box-elevation-edge flex flex-col overflow-hidden"},Ze={class:"p-2"},et=["onClick"],tt={key:2,class:"-mx-4 flex flex-wrap text-primary"},st={key:3,class:"-mx-4 flex flex-wrap"},rt={class:"px-4 w-full md:w-1/2 lg:w-1/3"},it={class:"mb-2"},nt={class:"font-medium text-primary"},lt={class:"py-1 text-sm text-primary"},ot={class:"mb-2"},at=["onClick"],dt=s("span",{class:"rounded-full border-2 ns-inset-button info h-8 w-8 flex items-center justify-center"},[s("i",{class:"las la-plus-circle"})],-1),ut={class:"-mx-4 flex flex-wrap"},ct={class:"shadow rounded overflow-hidden bg-box-elevation-background text-primary"},ft={class:"border-b text-sm p-2 flex justify-between text-primary border-box-elevation-edge"},ht={class:"p-2 mb-2"},mt=["onClick"],pt={key:1,class:"px-4 w-full lg:w-2/3 flex justify-center items-center"},bt={key:2,class:"px-4 w-full md:w-1/2 lg:w-2/3 flex flex-col justify-center items-center"},_t=s("i",{class:"las la-frown text-7xl"},null,-1),gt={class:"w-full md:w-1/3 py-3 text-center text-sm text-primary"};function vt(e,t,n,d,i,r){const a=C("ns-spinner"),_=C("ns-notice"),f=C("ns-field"),S=C("ns-product-group");return l(),o("div",Ue,[Object.values(e.form).length===0&&e.hasLoaded?(l(),o("div",Fe,[k(a)])):m("",!0),Object.values(e.form).length===0&&e.hasError?(l(),o("div",Ce,[k(_,{color:"error"},{title:L(()=>[P(u(r.__("An Error Has Occured")),1)]),description:L(()=>[P(u(r.__("An unexpected error has occured while loading the form. Please check the log or contact the support.")),1)]),_:1})])):m("",!0),Object.values(e.form).length>0?(l(),o(b,{key:2},[s("div",Pe,[s("div",qe,[s("label",Se,u(e.form.main.label),1),s("div",Te,[n.returnUrl?(l(),o("a",{key:0,href:n.returnUrl,class:"rounded-full border ns-inset-button error hover:bg-error-tertiary px-2 py-1"},u(r.__("Return")),9,je)):m("",!0)])]),s("div",{class:V([e.form.main.disabled?"":e.form.main.errors.length>0?"border-error-tertiary":"","input-group info flex border-2 rounded overflow-hidden"])},[U(s("input",{"onUpdate:modelValue":t[0]||(t[0]=h=>e.form.main.value=h),onBlur:t[1]||(t[1]=h=>e.formValidation.checkField(e.form.main)),onChange:t[2]||(t[2]=h=>e.formValidation.checkField(e.form.main)),disabled:e.form.main.disabled,type:"text",class:V([(e.form.main.disabled,""),"flex-auto text-primary outline-none h-10 px-2"])},null,42,Ae),[[q,e.form.main.value]]),s("button",{disabled:e.form.main.disabled,class:V([e.form.main.disabled?"":e.form.main.errors.length>0?"bg-error-tertiary":"","outline-none px-4 h-10 rounded-none"]),onClick:t[3]||(t[3]=h=>r.submit())},[$(e.$slots,"save",{},()=>[P(u(r.__("Save")),1)])],10,Ee)],2),e.form.main.description&&e.form.main.errors.length===0?(l(),o("p",Oe,u(e.form.main.description),1)):m("",!0),(l(!0),o(b,null,g(e.form.main.errors,(h,F)=>(l(),o("p",{class:"text-xs py-1 text-error-tertiary",key:F},[s("span",null,[$(e.$slots,"error-required",{},()=>[P(u(h.identifier),1)])])]))),128))]),s("div",Le,[s("div",$e,[(l(!0),o(b,null,g(e.form.variations,(h,F)=>(l(),o("div",{id:"tabbed-card",class:"mb-8",key:F},[s("div",Ne,[s("div",Ge,[(l(!0),o(b,null,g(h.tabs,(c,x)=>(l(),o(b,null,[c.visible?(l(),o("div",{onClick:y=>r.setTabActive(x,h.tabs),class:V([c.active?"active":"inactive","tab cursor-pointer text-primary px-4 py-2 rounded-tl-lg rounded-tr-lg flex justify-between"]),key:x},[s("span",{class:V(["block",c.errors&&c.errors.length>0?"mr-2":""])},u(c.label),3),c.errors&&c.errors.length>0?(l(),o("span",Me,u(c.errors.length),1)):m("",!0)],10,Ie)):m("",!0)],64))),256))]),Re]),s("div",Be,[s("div",De,[["images","units","groups"].includes(r.getActiveTabKey(h.tabs))?m("",!0):(l(),o("div",Qe,[(l(!0),o(b,null,g(r.getActiveTab(h.tabs).fields,(c,x)=>(l(),o("div",{key:x,class:"flex flex-col px-4 w-full md:w-1/2 lg:w-1/3"},[k(f,{onSaved:y=>r.handleSaved(y,r.getActiveTabKey(h.tabs),F,c),field:c},null,8,["onSaved","field"])]))),128))])),r.getActiveTabKey(h.tabs)==="images"?(l(),o("div",Je,[s("div",Ke,[s("div",We,[s("span",null,u(r.__("Add Images")),1),s("button",{onClick:c=>r.addImage(h),class:"outline-none rounded-full border flex items-center justify-center w-8 h-8 ns-inset-button info"},Ye,8,ze)])]),(l(!0),o(b,null,g(r.getActiveTab(h.tabs).groups,(c,x)=>(l(),o("div",{key:x,class:"flex flex-col px-4 w-full md:w-1/2 lg:w-1/3 mb-4"},[s("div",Xe,[s("div",Ze,[(l(!0),o(b,null,g(c,(y,T)=>(l(),A(f,{key:T,field:y},null,8,["field"]))),128))]),s("div",{onClick:y=>r.removeImage(h,c),class:"text-center py-2 border-t border-box-elevation-edge text-sm cursor-pointer"},u(r.__("Remove Image")),9,et)])]))),128))])):m("",!0),r.getActiveTabKey(h.tabs)==="groups"?(l(),o("div",tt,[k(S,{onUpdate:c=>r.setProducts(c,h.tabs),onUpdateSalePrice:c=>r.triggerRecompute(c,h.tabs),fields:r.getActiveTab(h.tabs).fields},null,8,["onUpdate","onUpdateSalePrice","fields"])])):m("",!0),r.getActiveTabKey(h.tabs)==="units"?(l(),o("div",st,[s("div",rt,[(l(!0),o(b,null,g(r.getActiveTab(h.tabs).fields.filter(c=>c.name!=="selling_group"),c=>(l(),A(f,{onChange:x=>r.loadAvailableUnits(r.getActiveTab(h.tabs)),field:c},null,8,["onChange","field"]))),256))]),e.unitLoaded?(l(!0),o(b,{key:0},g(r.getActiveTab(h.tabs).fields,(c,x)=>(l(),o(b,null,[c.type==="group"?(l(),o("div",{class:"px-4 w-full lg:w-2/3",key:x},[s("div",it,[s("label",nt,u(c.label),1),s("p",lt,u(c.description),1)]),s("div",ot,[s("div",{onClick:y=>r.addUnitGroup(c),class:"border-dashed border-2 p-1 bg-box-elevation-background border-box-elevation-edge flex justify-between items-center text-primary cursor-pointer rounded-lg"},[dt,s("span",null,u(r.__("New Group")),1)],8,at)]),s("div",ut,[(l(!0),o(b,null,g(c.groups,(y,T)=>(l(),o("div",{class:"px-4 w-full md:w-1/2 mb-4",key:T},[s("div",ct,[s("div",ft,[s("span",null,u(r.__("Available Quantity")),1),s("span",null,u(r.getUnitQuantity(y)),1)]),s("div",ht,[(l(!0),o(b,null,g(y,(j,I)=>(l(),A(f,{onSaved:M=>r.handleSavedUnitGroupFields(M,j),field:j,key:I},null,8,["onSaved","field"]))),128))]),s("div",{onClick:j=>r.removeUnitPriceGroup(y,c.groups),class:"p-1 hover:bg-error-primary border-t border-box-elevation-edge flex items-center justify-center cursor-pointer font-medium"},u(r.__("Delete")),9,mt)])]))),128))])])):m("",!0)],64))),256)):m("",!0),!e.unitLoaded&&!e.unitLoadError?(l(),o("div",pt,[k(a)])):m("",!0),e.unitLoadError&&!e.unitLoaded?(l(),o("div",bt,[_t,s("p",gt,u(r.__("We were not able to load the units. Make sure there are units attached on the unit group selected.")),1)])):m("",!0)])):m("",!0)])])]))),128))])])],64)):m("",!0)])}const Ft=G(Ve,[["render",vt]]);export{Ft as default}; diff --git a/public/build/assets/modules-D2_E4Iuo.js b/public/build/assets/modules-D2_E4Iuo.js deleted file mode 100644 index 868d06fa2..000000000 --- a/public/build/assets/modules-D2_E4Iuo.js +++ /dev/null @@ -1 +0,0 @@ -import{a as _,b as i}from"./bootstrap-B7E2wy_a.js";import{_ as f}from"./currency-ZXKMLAC0.js";import{j as w,Y as M,v as k}from"./tax-BACo6kIE.js";import C from"./ns-alert-popup-DDoxXsJC.js";import"./index.es-BED_8l8F.js";import{_ as T}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./ns-prompt-popup-BbWKrSku.js";import{r as P,o as c,c as u,b as e,t as d,C as E,f as x,F as N,e as j,j as b,h as v,w as p,g}from"./runtime-core.esm-bundler-DCfIpxDt.js";const B={name:"ns-modules",props:["url","upload"],data(){return{rawModules:[],searchPlaceholder:f('Press "/" to search modules'),total_enabled:0,total_disabled:0,searchText:"",searchTimeOut:null}},mounted(){this.loadModules().subscribe(),document.addEventListener("keypress",s=>{s.key==="/"&&this.$refs.searchField!==null&&setTimeout(()=>{this.$refs.searchField.select()},1)})},watch:{},computed:{noModules(){return Object.values(this.modules).length===0},modules(){if(this.searchText.length>0){const s=Object.values(this.rawModules).filter(l=>{const r=new RegExp(this.searchText,"gi"),a=l.name.match(r);return a!==null?a.length>0:!1}),o=new Object;for(let l=0;l{const l=async(r,a)=>new Promise((t,h)=>{_.post(`/api/modules/${s.namespace}/migrate`,{file:r,version:a}).subscribe({next:n=>{t(!0)},error:n=>i.error(n.message,null,{duration:4e3}).subscribe()})});if(o=o||s.migrations,o){s.migrating=!0;for(let r in o)for(let a=0;ao&&(r=r.slice(0,o),r.push(l)),r.join(" ")},countWords(s){return s.split(" ").length},refreshModules(){this.loadModules().subscribe()},enableModule(s){const o=`${this.url}/${s.namespace}/enable`;_.put(o).subscribe({next:async l=>{i.success(l.message).subscribe(),this.loadModules().subscribe({next:r=>{document.location.reload()},error:r=>{i.error(r.message).subscribe()}})},error:l=>{i.error(l.message).subscribe()}})},disableModule(s){const o=`${this.url}/${s.namespace}/disable`;_.put(o).subscribe({next:l=>{i.success(l.message).subscribe(),this.loadModules().subscribe({next:r=>{document.location.reload()},error:r=>{i.error(r.message).subscribe()}})},error:l=>{i.error(l.message).subscribe()}})},loadModules(){return _.get(this.url).pipe(M(s=>(this.rawModules=s.modules,this.total_enabled=s.total_enabled,this.total_disabled=s.total_disabled,s)))},removeModule(s){if(confirm(f('Would you like to delete "{module}"? All data created by the module might also be deleted.').replace("{module}",s.name))){const o=`${this.url}/${s.namespace}/delete`;_.delete(o).subscribe({next:l=>{this.loadModules().subscribe({next:r=>{document.location.reload()}})},error:l=>{i.error(l.message,null,{duration:5e3}).subscribe()}})}}}},D={id:"module-wrapper",class:"flex-auto flex flex-col pb-4"},F={class:"flex flex-col md:flex-row md:justify-between md:items-center"},V={class:"flex flex-col md:flex-row md:justify-between md:items-center -mx-2"},R={class:"px-2"},W={class:"ns-button mb-2"},A=e("i",{class:"las la-sync"},null,-1),S={class:"mx-2"},U={class:"px-2"},H={class:"ns-button mb-2"},L=["href"],Y=e("i",{class:"las la-angle-right"},null,-1),q={class:"px-2 w-auto"},z={class:"input-group mb-2 shadow border-2 info rounded overflow-hidden"},G=["placeholder"],I={class:"header-tabs flex -mx-4 flex-wrap"},J={class:"px-4 text-xs text-blue-500 font-semibold hover:underline"},K={href:"#"},Q={class:"px-4 text-xs text-blue-500 font-semibold hover:underline"},X={href:"#"},Z={class:"module-section flex-auto flex flex-wrap -mx-4"},O={key:0,class:"p-4 flex-auto flex"},$={class:"flex h-full flex-auto border-dashed border-2 border-box-edge bg-surface justify-center items-center"},ee={class:"font-bold text-xl text-primary text-center"},se={key:1,class:"p-4 flex-auto flex"},te={class:"flex h-full flex-auto border-dashed border-2 border-box-edge bg-surface justify-center items-center"},oe={class:"font-bold text-xl text-primary text-center"},le={class:"ns-modules rounded shadow overflow-hidden ns-box"},re={class:"module-head h-32 p-2"},ne={class:"font-semibold text-lg"},ae={class:"text-xs flex justify-between"},de={class:"py-2 text-sm"},ie=["onClick"],ce={class:"ns-box-footer border-t p-2 flex justify-between"},ue={class:"flex -mx-1"},he={class:"px-1 flex -mx-1"},_e={class:"px-1 flex"},fe=e("i",{class:"las la-archive"},null,-1),xe={class:"px-1 flex"},me=e("i",{class:"las la-trash"},null,-1);function pe(s,o,l,r,a,t){const h=P("ns-button");return c(),u("div",D,[e("div",F,[e("div",V,[e("span",R,[e("div",W,[e("a",{onClick:o[0]||(o[0]=n=>t.refreshModules()),class:"items-center justify-center rounded cursor-pointer shadow flex px-3 py-1"},[A,e("span",S,d(t.__("Refresh")),1)])])]),e("span",U,[e("div",H,[e("a",{href:l.upload,class:"flex items-center justify-center rounded cursor-pointer shadow px-3 py-1"},[e("span",null,d(t.__("Upload")),1),Y],8,L)])]),e("div",q,[e("div",z,[E(e("input",{ref:"searchField",placeholder:a.searchPlaceholder,"onUpdate:modelValue":o[1]||(o[1]=n=>a.searchText=n),type:"text",class:"w-full md:w-60 outline-none py-1 px-2"},null,8,G),[[k,a.searchText]])])])]),e("div",I,[e("div",J,[e("a",K,d(t.__("Enabled"))+"("+d(a.total_enabled)+")",1)]),e("div",Q,[e("a",X,d(t.__("Disabled"))+" ("+d(a.total_disabled)+")",1)])])]),e("div",Z,[t.noModules&&a.searchText.length===0?(c(),u("div",O,[e("div",$,[e("h2",ee,d(t.noModuleMessage),1)])])):x("",!0),t.noModules&&a.searchText.length>0?(c(),u("div",se,[e("div",te,[e("h2",oe,d(t.__("No modules matches your search term.")),1)])])):x("",!0),(c(!0),u(N,null,j(t.modules,(n,y)=>(c(),u("div",{class:"px-4 w-full md:w-1/2 lg:w-1/3 xl:1/4 py-4",key:y},[e("div",le,[e("div",re,[e("h3",ne,d(n.name),1),e("p",ae,[e("span",null,d(n.author),1),e("strong",null,"v"+d(n.version),1)]),e("p",de,[b(d(t.truncateText(n.description,20,"..."))+" ",1),t.countWords(n.description)>20?(c(),u("a",{key:0,class:"text-xs text-info-tertiary hover:underline",onClick:m=>t.openPopupDetails(n),href:"javascript:void(0)"},"["+d(t.__("Read More"))+"]",9,ie)):x("",!0)])]),e("div",ce,[n.enabled?x("",!0):(c(),v(h,{key:0,onClick:m=>t.enableModule(n),type:"info"},{default:p(()=>[b(d(t.__("Enable")),1)]),_:2},1032,["onClick"])),n.enabled?(c(),v(h,{key:1,onClick:m=>t.disableModule(n),type:"success"},{default:p(()=>[b(d(t.__("Disable")),1)]),_:2},1032,["onClick"])):x("",!0),e("div",ue,[e("div",he,[e("div",_e,[g(h,{onClick:m=>t.download(n),type:"info"},{default:p(()=>[fe]),_:2},1032,["onClick"])]),e("div",xe,[g(h,{onClick:m=>t.removeModule(n),type:"error"},{default:p(()=>[me]),_:2},1032,["onClick"])])])])])])]))),128))])])}const Te=T(B,[["render",pe]]);export{Te as default}; diff --git a/public/build/assets/modules-Dh6mHHY_.js b/public/build/assets/modules-Dh6mHHY_.js new file mode 100644 index 000000000..20ba50157 --- /dev/null +++ b/public/build/assets/modules-Dh6mHHY_.js @@ -0,0 +1 @@ +import{P as w,a as _,b as i,D as M,v as k}from"./bootstrap-Bpe5LRJd.js";import{_ as x}from"./currency-lOMYG1Wf.js";import C from"./ns-alert-popup-SVrn5Xft.js";import"./index.es-Br67aBEV.js";import{_ as T}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./ns-prompt-popup-C2dK5WQb.js";import{r as P,o as c,c as u,a as e,t as d,B,e as f,F as D,b as E,i as p,g as v,w as b,f as g}from"./runtime-core.esm-bundler-RT2b-_3S.js";const N={name:"ns-modules",props:["url","upload"],data(){return{rawModules:[],searchPlaceholder:x('Press "/" to search modules'),total_enabled:0,total_disabled:0,searchText:"",searchTimeOut:null}},mounted(){this.loadModules().subscribe(),document.addEventListener("keypress",s=>{s.key==="/"&&this.$refs.searchField!==null&&setTimeout(()=>{this.$refs.searchField.select()},1)})},watch:{},computed:{noModules(){return Object.values(this.modules).length===0},modules(){if(this.searchText.length>0){const s=Object.values(this.rawModules).filter(l=>{const r=new RegExp(this.searchText,"gi"),a=l.name.match(r);return a!==null?a.length>0:!1}),o=new Object;for(let l=0;l{const l=async(r,a)=>new Promise((t,h)=>{_.post(`/api/modules/${s.namespace}/migrate`,{file:r,version:a}).subscribe({next:n=>{t(!0)},error:n=>i.error(n.message,null,{duration:4e3}).subscribe()})});if(o=o||s.migrations,o){s.migrating=!0;for(let r in o)for(let a=0;ao&&(r=r.slice(0,o),r.push(l)),r.join(" ")},countWords(s){return s.split(" ").length},refreshModules(){this.loadModules().subscribe()},enableModule(s){const o=`${this.url}/${s.namespace}/enable`;_.put(o).subscribe({next:async l=>{i.success(l.message).subscribe(),this.loadModules().subscribe({next:r=>{document.location.reload()},error:r=>{i.error(r.message).subscribe()}})},error:l=>{i.error(l.message).subscribe()}})},disableModule(s){const o=`${this.url}/${s.namespace}/disable`;_.put(o).subscribe({next:l=>{i.success(l.message).subscribe(),this.loadModules().subscribe({next:r=>{document.location.reload()},error:r=>{i.error(r.message).subscribe()}})},error:l=>{i.error(l.message).subscribe()}})},loadModules(){return _.get(this.url).pipe(M(s=>(this.rawModules=s.modules,this.total_enabled=s.total_enabled,this.total_disabled=s.total_disabled,s)))},removeModule(s){if(confirm(x('Would you like to delete "{module}"? All data created by the module might also be deleted.').replace("{module}",s.name))){const o=`${this.url}/${s.namespace}/delete`;_.delete(o).subscribe({next:l=>{this.loadModules().subscribe({next:r=>{document.location.reload()}})},error:l=>{i.error(l.message,null,{duration:5e3}).subscribe()}})}}}},F={id:"module-wrapper",class:"flex-auto flex flex-col pb-4"},V={class:"flex flex-col md:flex-row md:justify-between md:items-center"},R={class:"flex flex-col md:flex-row md:justify-between md:items-center -mx-2"},j={class:"px-2"},W={class:"ns-button mb-2"},A=e("i",{class:"las la-sync"},null,-1),S={class:"mx-2"},U={class:"px-2"},H={class:"ns-button mb-2"},L=["href"],q=e("i",{class:"las la-angle-right"},null,-1),z={class:"px-2 w-auto"},G={class:"input-group mb-2 shadow border-2 info rounded overflow-hidden"},I=["placeholder"],J={class:"header-tabs flex -mx-4 flex-wrap"},K={class:"px-4 text-xs text-blue-500 font-semibold hover:underline"},Q={href:"#"},X={class:"px-4 text-xs text-blue-500 font-semibold hover:underline"},Y={href:"#"},Z={class:"module-section flex-auto flex flex-wrap -mx-4"},O={key:0,class:"p-4 flex-auto flex"},$={class:"flex h-full flex-auto border-dashed border-2 border-box-edge bg-surface justify-center items-center"},ee={class:"font-bold text-xl text-primary text-center"},se={key:1,class:"p-4 flex-auto flex"},te={class:"flex h-full flex-auto border-dashed border-2 border-box-edge bg-surface justify-center items-center"},oe={class:"font-bold text-xl text-primary text-center"},le={class:"ns-modules rounded shadow overflow-hidden ns-box"},re={class:"module-head h-32 p-2"},ne={class:"font-semibold text-lg"},ae={class:"text-xs flex justify-between"},de={class:"py-2 text-sm"},ie=["onClick"],ce={class:"ns-box-footer border-t p-2 flex justify-between"},ue={class:"flex -mx-1"},he={class:"px-1 flex -mx-1"},_e={class:"px-1 flex"},xe=e("i",{class:"las la-archive"},null,-1),fe={class:"px-1 flex"},me=e("i",{class:"las la-trash"},null,-1);function be(s,o,l,r,a,t){const h=P("ns-button");return c(),u("div",F,[e("div",V,[e("div",R,[e("span",j,[e("div",W,[e("a",{onClick:o[0]||(o[0]=n=>t.refreshModules()),class:"items-center justify-center rounded cursor-pointer shadow flex px-3 py-1"},[A,e("span",S,d(t.__("Refresh")),1)])])]),e("span",U,[e("div",H,[e("a",{href:l.upload,class:"flex items-center justify-center rounded cursor-pointer shadow px-3 py-1"},[e("span",null,d(t.__("Upload")),1),q],8,L)])]),e("div",z,[e("div",G,[B(e("input",{ref:"searchField",placeholder:a.searchPlaceholder,"onUpdate:modelValue":o[1]||(o[1]=n=>a.searchText=n),type:"text",class:"w-full md:w-60 outline-none py-1 px-2"},null,8,I),[[k,a.searchText]])])])]),e("div",J,[e("div",K,[e("a",Q,d(t.__("Enabled"))+"("+d(a.total_enabled)+")",1)]),e("div",X,[e("a",Y,d(t.__("Disabled"))+" ("+d(a.total_disabled)+")",1)])])]),e("div",Z,[t.noModules&&a.searchText.length===0?(c(),u("div",O,[e("div",$,[e("h2",ee,d(t.noModuleMessage),1)])])):f("",!0),t.noModules&&a.searchText.length>0?(c(),u("div",se,[e("div",te,[e("h2",oe,d(t.__("No modules matches your search term.")),1)])])):f("",!0),(c(!0),u(D,null,E(t.modules,(n,y)=>(c(),u("div",{class:"px-4 w-full md:w-1/2 lg:w-1/3 xl:1/4 py-4",key:y},[e("div",le,[e("div",re,[e("h3",ne,d(n.name),1),e("p",ae,[e("span",null,d(n.author),1),e("strong",null,"v"+d(n.version),1)]),e("p",de,[p(d(t.truncateText(n.description,20,"..."))+" ",1),t.countWords(n.description)>20?(c(),u("a",{key:0,class:"text-xs text-info-tertiary hover:underline",onClick:m=>t.openPopupDetails(n),href:"javascript:void(0)"},"["+d(t.__("Read More"))+"]",9,ie)):f("",!0)])]),e("div",ce,[n.enabled?f("",!0):(c(),v(h,{key:0,onClick:m=>t.enableModule(n),type:"info"},{default:b(()=>[p(d(t.__("Enable")),1)]),_:2},1032,["onClick"])),n.enabled?(c(),v(h,{key:1,onClick:m=>t.disableModule(n),type:"success"},{default:b(()=>[p(d(t.__("Disable")),1)]),_:2},1032,["onClick"])):f("",!0),e("div",ue,[e("div",he,[e("div",_e,[g(h,{onClick:m=>t.download(n),type:"info"},{default:b(()=>[xe]),_:2},1032,["onClick"])]),e("div",fe,[g(h,{onClick:m=>t.removeModule(n),type:"error"},{default:b(()=>[me]),_:2},1032,["onClick"])])])])])])]))),128))])])}const Ce=T(N,[["render",be]]);export{Ce as default}; diff --git a/public/build/assets/ns-alert-popup-DDoxXsJC.js b/public/build/assets/ns-alert-popup-SVrn5Xft.js similarity index 59% rename from public/build/assets/ns-alert-popup-DDoxXsJC.js rename to public/build/assets/ns-alert-popup-SVrn5Xft.js index 1e11542b1..a62ac14d0 100644 --- a/public/build/assets/ns-alert-popup-DDoxXsJC.js +++ b/public/build/assets/ns-alert-popup-SVrn5Xft.js @@ -1 +1 @@ -import{_ as c}from"./currency-ZXKMLAC0.js";import{_ as l}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as i,b as s,t as o,f as m,g as u,w as d,n as f,r as _,j as h}from"./runtime-core.esm-bundler-DCfIpxDt.js";const x={data(){return{title:"",message:""}},props:["popup"],computed:{size(){return this.popup.params.size||"h-full w-full"}},mounted(){this.title=this.popup.params.title,this.message=this.popup.params.message},methods:{__:c,emitAction(n){this.popup.params.onAction!==void 0&&this.popup.params.onAction(n),this.popup.close()}}},g={class:"flex items-center justify-center flex-col flex-auto p-4"},w={key:0,class:"text-3xl font-body"},y={class:"py-4 text-center"},b={class:"action-buttons flex border-t justify-end items-center p-2"};function k(n,p,v,A,e,t){const a=_("ns-button");return r(),i("div",{id:"alert-popup",class:f([t.size,"w-6/7-screen md:w-4/7-screen lg:w-3/7-screen flex flex-col shadow-lg"])},[s("div",g,[e.title?(r(),i("h2",w,o(e.title),1)):m("",!0),s("p",y,o(e.message),1)]),s("div",b,[u(a,{onClick:p[0]||(p[0]=C=>t.emitAction(!0)),type:"info"},{default:d(()=>[h(o(t.__("Ok")),1)]),_:1})])],2)}const j=l(x,[["render",k]]);export{j as default}; +import{_ as c}from"./currency-lOMYG1Wf.js";import{_ as l}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as r,a as s,t as o,e as m,f as u,w as d,n as f,r as _,i as h}from"./runtime-core.esm-bundler-RT2b-_3S.js";const x={data(){return{title:"",message:""}},props:["popup"],computed:{size(){return this.popup.params.size||"h-full w-full"}},mounted(){this.title=this.popup.params.title,this.message=this.popup.params.message},methods:{__:c,emitAction(n){this.popup.params.onAction!==void 0&&this.popup.params.onAction(n),this.popup.close()}}},g={class:"flex items-center justify-center flex-col flex-auto p-4"},w={key:0,class:"text-3xl font-body"},y={class:"py-4 text-center"},b={class:"action-buttons flex border-t justify-end items-center p-2"};function k(n,p,v,A,e,t){const a=_("ns-button");return i(),r("div",{id:"alert-popup",class:f([t.size,"w-6/7-screen md:w-4/7-screen lg:w-3/7-screen flex flex-col shadow-lg"])},[s("div",g,[e.title?(i(),r("h2",w,o(e.title),1)):m("",!0),s("p",y,o(e.message),1)]),s("div",b,[u(a,{onClick:p[0]||(p[0]=C=>t.emitAction(!0)),type:"info"},{default:d(()=>[h(o(t.__("Ok")),1)]),_:1})])],2)}const B=l(x,[["render",k]]);export{B as default}; diff --git a/public/build/assets/ns-avatar-image-C_oqdj76.js b/public/build/assets/ns-avatar-image-CAD6xUGA.js similarity index 75% rename from public/build/assets/ns-avatar-image-C_oqdj76.js rename to public/build/assets/ns-avatar-image-CAD6xUGA.js index cee3f5864..c4fab26f1 100644 --- a/public/build/assets/ns-avatar-image-C_oqdj76.js +++ b/public/build/assets/ns-avatar-image-CAD6xUGA.js @@ -1 +1 @@ -import{c as i,s as l}from"./index.es-BED_8l8F.js";import{_ as a}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as n,c as s,f as t,n as c}from"./runtime-core.esm-bundler-DCfIpxDt.js";const u={name:"ns-avatar-image",props:["url","name","size"],data(){return{svg:"",currentSize:8}},mounted(){this.currentSize=this.size||8,this.svg=i(l,{seed:this.name})}},o=["src","alt"],m=["innerHTML"];function _(d,f,e,h,r,v){return n(),s("div",{class:c("h-"+r.currentSize+" w-"+r.currentSize)},[e.url!==""&&e.url!==null?(n(),s("img",{key:0,src:e.url,class:"overflow-hidden rounded-full",alt:e.name,srcset:""},null,8,o)):t("",!0),e.url===""||e.url===null?(n(),s("div",{key:1,class:c("h-"+r.currentSize+" w-"+r.currentSize),innerHTML:r.svg},null,10,m)):t("",!0)],2)}const k=a(u,[["render",_]]);export{k as n}; +import{c as i,s as l}from"./index.es-Br67aBEV.js";import{_ as a}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as n,c as s,e as t,n as c}from"./runtime-core.esm-bundler-RT2b-_3S.js";const u={name:"ns-avatar-image",props:["url","name","size"],data(){return{svg:"",currentSize:8}},mounted(){this.currentSize=this.size||8,this.svg=i(l,{seed:this.name})}},o=["src","alt"],m=["innerHTML"];function _(d,h,e,f,r,v){return n(),s("div",{class:c("h-"+r.currentSize+" w-"+r.currentSize)},[e.url!==""&&e.url!==null?(n(),s("img",{key:0,src:e.url,class:"overflow-hidden rounded-full",alt:e.name,srcset:""},null,8,o)):t("",!0),e.url===""||e.url===null?(n(),s("div",{key:1,class:c("h-"+r.currentSize+" w-"+r.currentSize),innerHTML:r.svg},null,10,m)):t("",!0)],2)}const k=a(u,[["render",_]]);export{k as n}; diff --git a/public/build/assets/ns-best-cashiers-B4kFuQfM.js b/public/build/assets/ns-best-cashiers-DG2cE_fd.js similarity index 90% rename from public/build/assets/ns-best-cashiers-B4kFuQfM.js rename to public/build/assets/ns-best-cashiers-DG2cE_fd.js index 5add1713f..eb1ef0c7b 100644 --- a/public/build/assets/ns-best-cashiers-B4kFuQfM.js +++ b/public/build/assets/ns-best-cashiers-DG2cE_fd.js @@ -1 +1 @@ -import{_ as m,n as f}from"./currency-ZXKMLAC0.js";import{_ as b}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as d,o as e,c as t,b as s,t as n,g as _,F as p,e as x,f as l}from"./runtime-core.esm-bundler-DCfIpxDt.js";const y={name:"ns-best-customers",data(){return{subscription:null,cashiers:[],hasLoaded:!1}},mounted(){this.hasLoaded=!1,this.subscription=Dashboard.bestCashiers.subscribe(c=>{this.hasLoaded=!0,this.cashiers=c})},methods:{__:m,nsCurrency:f},unmounted(){this.subscription.unsubscribe()}},v={id:"ns-best-cashiers",class:"flex flex-auto flex-col shadow rounded-lg overflow-hidden"},g={class:"flex-auto"},k={class:"head text-center border-b w-full flex justify-between items-center p-2"},C={class:"body"},w={key:0,class:"table w-full"},j={class:"p-2"},L={class:"-mx-1 flex justify-start items-center"},B=s("div",{class:"px-1"},[s("div",{class:"rounded-full"},[s("i",{class:"las la-user-circle text-xl"})])],-1),N={class:"px-1 justify-center"},V={class:"font-semibold items-center"},D={class:"flex justify-end p-2"},F={key:0},z={colspan:"2"},E={key:1,class:"h-56 flex items-center justify-center"},R={key:2,class:"h-56 flex items-center justify-center flex-col"},S=s("i",{class:"las la-grin-beam-sweat text-6xl"},null,-1),W={class:"text-sm"};function q(c,a,A,G,o,r){const h=d("ns-close-button"),u=d("ns-spinner");return e(),t("div",v,[s("div",g,[s("div",k,[s("h5",null,n(r.__("Best Cashiers")),1),s("div",null,[_(h,{onClick:a[0]||(a[0]=i=>c.$emit("onRemove"))})])]),s("div",C,[o.cashiers.length>0?(e(),t("table",w,[s("thead",null,[(e(!0),t(p,null,x(o.cashiers,i=>(e(),t("tr",{key:i.id,class:"entry border-b text-sm"},[s("th",j,[s("div",L,[B,s("div",N,[s("h3",V,n(i.username),1)])])]),s("th",D,n(r.nsCurrency(i.total_sales,"abbreviate")),1)]))),128)),o.cashiers.length===0?(e(),t("tr",F,[s("th",z,n(r.__("No result to display.")),1)])):l("",!0)])])):l("",!0),o.hasLoaded?l("",!0):(e(),t("div",E,[_(u,{size:"8",border:"4"})])),o.hasLoaded&&o.cashiers.length===0?(e(),t("div",R,[S,s("p",W,n(r.__("Well.. nothing to show for the meantime.")),1)])):l("",!0)])])])}const K=b(y,[["render",q]]);export{K as default}; +import{_ as m,n as f}from"./currency-lOMYG1Wf.js";import{_ as b}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as d,o as e,c as t,a as s,t as n,f as _,F as p,b as x,e as l}from"./runtime-core.esm-bundler-RT2b-_3S.js";const y={name:"ns-best-customers",data(){return{subscription:null,cashiers:[],hasLoaded:!1}},mounted(){this.hasLoaded=!1,this.subscription=Dashboard.bestCashiers.subscribe(c=>{this.hasLoaded=!0,this.cashiers=c})},methods:{__:m,nsCurrency:f},unmounted(){this.subscription.unsubscribe()}},v={id:"ns-best-cashiers",class:"flex flex-auto flex-col shadow rounded-lg overflow-hidden"},g={class:"flex-auto"},k={class:"head text-center border-b w-full flex justify-between items-center p-2"},C={class:"body"},w={key:0,class:"table w-full"},j={class:"p-2"},L={class:"-mx-1 flex justify-start items-center"},B=s("div",{class:"px-1"},[s("div",{class:"rounded-full"},[s("i",{class:"las la-user-circle text-xl"})])],-1),N={class:"px-1 justify-center"},V={class:"font-semibold items-center"},D={class:"flex justify-end p-2"},F={key:0},z={colspan:"2"},E={key:1,class:"h-56 flex items-center justify-center"},R={key:2,class:"h-56 flex items-center justify-center flex-col"},S=s("i",{class:"las la-grin-beam-sweat text-6xl"},null,-1),W={class:"text-sm"};function q(c,a,A,G,o,r){const h=d("ns-close-button"),u=d("ns-spinner");return e(),t("div",v,[s("div",g,[s("div",k,[s("h5",null,n(r.__("Best Cashiers")),1),s("div",null,[_(h,{onClick:a[0]||(a[0]=i=>c.$emit("onRemove"))})])]),s("div",C,[o.cashiers.length>0?(e(),t("table",w,[s("thead",null,[(e(!0),t(p,null,x(o.cashiers,i=>(e(),t("tr",{key:i.id,class:"entry border-b text-sm"},[s("th",j,[s("div",L,[B,s("div",N,[s("h3",V,n(i.username),1)])])]),s("th",D,n(r.nsCurrency(i.total_sales,"abbreviate")),1)]))),128)),o.cashiers.length===0?(e(),t("tr",F,[s("th",z,n(r.__("No result to display.")),1)])):l("",!0)])])):l("",!0),o.hasLoaded?l("",!0):(e(),t("div",E,[_(u,{size:"8",border:"4"})])),o.hasLoaded&&o.cashiers.length===0?(e(),t("div",R,[S,s("p",W,n(r.__("Well.. nothing to show for the meantime.")),1)])):l("",!0)])])])}const K=b(y,[["render",q]]);export{K as default}; diff --git a/public/build/assets/ns-best-customers-BlaJPhn0.js b/public/build/assets/ns-best-customers-BlaJPhn0.js new file mode 100644 index 000000000..c115914bb --- /dev/null +++ b/public/build/assets/ns-best-customers-BlaJPhn0.js @@ -0,0 +1 @@ +import{_ as h,n as f,a as x}from"./currency-lOMYG1Wf.js";import{_ as b}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as d,o as t,c as o,a as s,t as l,f as u,n as p,e as i,F as y,b as v}from"./runtime-core.esm-bundler-RT2b-_3S.js";const C={mounted(){this.hasLoaded=!1,this.subscription=Dashboard.bestCustomers.subscribe(r=>{this.hasLoaded=!0,this.customers=r})},methods:{__:h,nsCurrency:f,nsRawCurrency:x},data(){return{customers:[],subscription:null,hasLoaded:!1}},unmounted(){this.subscription.unsubscribe()}},w={id:"ns-best-customers",class:"flex flex-auto flex-col shadow rounded-lg overflow-hidden"},g={class:"flex-auto"},j={class:"head text-center flex justify-between items-center border-b w-full p-2"},k={key:0,class:"w-full flex items-center justify-center"},L={key:1,class:"flex items-center justify-center flex-col"},B=s("i",{class:"las la-grin-beam-sweat text-6xl"},null,-1),N={class:"text-sm"},V={key:2,class:"table w-full"},z={class:"p-2"},D={class:"-mx-1 flex justify-start items-center"},F=s("div",{class:"px-1"},[s("div",{class:"rounded-full"},[s("i",{class:"las la-user-circle text-xl"})])],-1),R={class:"px-1 justify-center"},E={class:"font-semibold items-center"},S={class:"flex justify-end amount p-2"};function W(r,a,q,A,e,c){const _=d("ns-close-button"),m=d("ns-spinner");return t(),o("div",w,[s("div",g,[s("div",j,[s("h5",null,l(c.__("Best Customers")),1),s("div",null,[u(_,{onClick:a[0]||(a[0]=n=>r.$emit("onRemove"))})])]),s("div",{class:p(["body flex flex-col h-64",e.customers.length===0?"body flex items-center justify-center flex-col h-64":""])},[e.hasLoaded?i("",!0):(t(),o("div",k,[u(m,{size:"12",border:"4"})])),e.hasLoaded&&e.customers.length===0?(t(),o("div",L,[B,s("p",N,l(c.__("Well.. nothing to show for the meantime")),1)])):i("",!0),e.customers.length>0?(t(),o("table",V,[s("thead",null,[(t(!0),o(y,null,v(e.customers,n=>(t(),o("tr",{key:n.id,class:"entry border-b text-sm"},[s("th",z,[s("div",D,[F,s("div",R,[s("h3",E,l(n.first_name),1)])])]),s("th",S,l(c.nsCurrency(n.purchases_amount)),1)]))),128))])])):i("",!0)],2)])])}const J=b(C,[["render",W]]);export{J as default}; diff --git a/public/build/assets/ns-best-customers-Cam2Jz0O.js b/public/build/assets/ns-best-customers-Cam2Jz0O.js deleted file mode 100644 index 76f1c7772..000000000 --- a/public/build/assets/ns-best-customers-Cam2Jz0O.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as m,n as f,b}from"./currency-ZXKMLAC0.js";import{_ as x}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as d,o as e,c as t,b as s,t as r,g as u,f as i,F as p,e as y}from"./runtime-core.esm-bundler-DCfIpxDt.js";const v={mounted(){this.hasLoaded=!1,this.subscription=Dashboard.bestCustomers.subscribe(l=>{this.hasLoaded=!0,this.customers=l})},methods:{__:m,nsCurrency:f,nsRawCurrency:b},data(){return{customers:[],subscription:null,hasLoaded:!1}},unmounted(){this.subscription.unsubscribe()}},w={id:"ns-best-customers",class:"flex flex-auto flex-col shadow rounded-lg overflow-hidden"},C={class:"flex-auto"},g={class:"head text-center flex justify-between items-center border-b w-full p-2"},k={class:"body flex flex-col h-64"},j={key:0,class:"w-full flex items-center justify-center"},L={key:1,class:"flex items-center justify-center flex-col"},B=s("i",{class:"las la-grin-beam-sweat text-6xl"},null,-1),N={class:"text-sm"},V={key:2,class:"table w-full"},D={class:"p-2"},F={class:"-mx-1 flex justify-start items-center"},R=s("div",{class:"px-1"},[s("div",{class:"rounded-full"},[s("i",{class:"las la-user-circle text-xl"})])],-1),z={class:"px-1 justify-center"},E={class:"font-semibold items-center"},S={class:"flex justify-end amount p-2"};function W(l,a,q,A,o,c){const _=d("ns-close-button"),h=d("ns-spinner");return e(),t("div",w,[s("div",C,[s("div",g,[s("h5",null,r(c.__("Best Customers")),1),s("div",null,[u(_,{onClick:a[0]||(a[0]=n=>l.$emit("onRemove"))})])]),s("div",k,[o.hasLoaded?i("",!0):(e(),t("div",j,[u(h,{size:"12",border:"4"})])),o.hasLoaded&&o.customers.length===0?(e(),t("div",L,[B,s("p",N,r(c.__("Well.. nothing to show for the meantime")),1)])):i("",!0),o.customers.length>0?(e(),t("table",V,[s("thead",null,[(e(!0),t(p,null,y(o.customers,n=>(e(),t("tr",{key:n.id,class:"entry border-b text-sm"},[s("th",D,[s("div",F,[R,s("div",z,[s("h3",E,r(n.first_name),1)])])]),s("th",S,r(c.nsCurrency(n.purchases_amount)),1)]))),128))])])):i("",!0)])])])}const J=x(v,[["render",W]]);export{J as default}; diff --git a/public/build/assets/ns-best-products-report-DaNRMHuU.js b/public/build/assets/ns-best-products-report-DaNRMHuU.js new file mode 100644 index 000000000..3becb9f55 --- /dev/null +++ b/public/build/assets/ns-best-products-report-DaNRMHuU.js @@ -0,0 +1 @@ +import{a as y,b as f}from"./bootstrap-Bpe5LRJd.js";import{c as v,e as k}from"./components-RJC2qWGQ.js";import{_ as l,n as w}from"./currency-lOMYG1Wf.js";import{_ as D}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as b,o as n,c as a,a as e,f as p,t,F,b as C,n as _,e as i,i as u}from"./runtime-core.esm-bundler-RT2b-_3S.js";import"./ns-alert-popup-SVrn5Xft.js";import"./ns-avatar-image-CAD6xUGA.js";import"./index.es-Br67aBEV.js";import"./ns-prompt-popup-C2dK5WQb.js";const N={name:"ns-best-products-report",mounted(){},components:{nsDatepicker:v,nsDateTimePicker:k},data(){return{ns:window.ns,startDateField:{name:"start_date",type:"datetime",value:ns.date.moment.startOf("day").format()},endDateField:{name:"end_date",type:"datetime",value:ns.date.moment.endOf("day").format()},report:null,sortField:{name:"sort",type:"select",label:l("Sort Results"),value:"using_quantity_asc",options:[{value:"using_quantity_asc",label:l("Using Quantity Ascending")},{value:"using_quantity_desc",label:l("Using Quantity Descending")},{value:"using_sales_asc",label:l("Using Sales Ascending")},{value:"using_sales_desc",label:l("Using Sales Descending")},{value:"using_name_asc",label:l("Using Name Ascending")},{value:"using_name_desc",label:l("Using Name Descending")}]}}},computed:{totalDebit(){return 0},totalCredit(){return 0}},props:["storeLogo","storeName"],methods:{nsCurrency:w,__:l,printSaleReport(){this.$htmlToPaper("best-products-report")},loadReport(){y.post("/api/reports/products-report",{startDate:this.startDateField.value,endDate:this.endDateField.value,sort:this.sortField.value}).subscribe({next:d=>{d.current.products=Object.values(d.current.products),this.report=d},error:d=>{f.error(d.message).subscribe()}})}}},S={id:"report-section",class:"px-4"},B={class:"flex -mx-2"},P={class:"px-2"},R={class:"px-2"},U={class:"px-2"},q={class:"ns-button"},V=e("i",{class:"las la-sync-alt text-xl"},null,-1),j={class:"pl-2"},L={class:"px-2"},A={class:"ns-button"},O=e("i",{class:"las la-print text-xl"},null,-1),Q={class:"pl-2"},T={class:"flex -mx-2"},z={class:"px-2"},E={id:"best-products-report",class:"anim-duration-500 fade-in-entrance"},H={class:"flex w-full"},G={class:"my-4 flex justify-between w-full"},I={class:"text-primary"},J={class:"pb-1 border-b border-dashed"},K={class:"pb-1 border-b border-dashed"},M={class:"pb-1 border-b border-dashed"},W=["src","alt"],X={class:"my-4"},Y={class:"shadow ns-box"},Z={class:"ns-box-body"},$={class:"table ns-table border w-full"},ee={class:""},te={class:"p-2 text-left"},se={width:"150",class:"p-2 text-right"},re={width:"150",class:"p-2 text-right"},oe={width:"150",class:"p-2 text-right"},ne={width:"150",class:"p-2 text-right"},ae={key:0,class:""},le={class:"p-2 border"},ie={class:"p-2 border text-right"},de={class:"p-2 border text-right"},ce={class:"flex flex-col"},_e={key:0},ue={class:"p-2 border text-right"},pe={class:"flex flex-col"},he={key:0},me={key:0},be=e("i",{class:"las la-arrow-up"},null,-1),xe={key:1},ge=e("i",{class:"las la-arrow-down"},null,-1),ye={key:0,class:""},fe={colspan:"5",class:"border text-center p-2"},ve={key:1},ke={colspan:"5",class:"text-center p-2 border"},we={key:2,class:"font-semibold"},De=e("td",{colspan:"3",class:"p-2 border"},null,-1),Fe={class:"p-2 border text-right"},Ce=e("td",{class:"p-2 border text-right"},null,-1);function Ne(d,c,h,Se,o,r){const m=b("ns-date-time-picker"),x=b("ns-field");return n(),a("div",S,[e("div",B,[e("div",P,[p(m,{field:o.startDateField},null,8,["field"])]),e("div",R,[p(m,{field:o.endDateField},null,8,["field"])]),e("div",U,[e("div",q,[e("button",{onClick:c[0]||(c[0]=s=>r.loadReport()),class:"rounded flex justify-between border-box-background text-primary shadow py-1 items-center px-2"},[V,e("span",j,t(r.__("Load")),1)])])]),e("div",L,[e("div",A,[e("button",{onClick:c[1]||(c[1]=s=>r.printSaleReport()),class:"rounded flex justify-between border-box-background text-primary shadow py-1 items-center px-2"},[O,e("span",Q,t(r.__("Print")),1)])])])]),e("div",T,[e("div",z,[p(x,{field:o.sortField},null,8,["field"])])]),e("div",E,[e("div",H,[e("div",G,[e("div",I,[e("ul",null,[e("li",J,t(r.__("Date Range : {date1} - {date2}").replace("{date1}",o.startDateField.value).replace("{date2}",o.endDateField.value)),1),e("li",K,t(r.__("Document : Best Products")),1),e("li",M,t(r.__("By : {user}").replace("{user}",o.ns.user.username)),1)])]),e("div",null,[e("img",{class:"w-24",src:h.storeLogo,alt:h.storeName},null,8,W)])])]),e("div",X,[e("div",Y,[e("div",Z,[e("table",$,[e("thead",ee,[e("tr",null,[e("th",te,t(r.__("Product")),1),e("th",se,t(r.__("Unit")),1),e("th",re,t(r.__("Quantity")),1),e("th",oe,t(r.__("Value")),1),e("th",ne,t(r.__("Progress")),1)])]),o.report?(n(),a("tbody",ae,[(n(!0),a(F,null,C(o.report.current.products,(s,g)=>(n(),a("tr",{key:g,class:_(s.evolution==="progress"?"bg-success-primary":"bg-error-primary")},[e("td",le,t(s.name),1),e("td",ie,t(s.unit_name),1),e("td",de,[e("div",ce,[e("span",null,[e("span",null,t(s.quantity),1)]),e("span",{class:_([s.evolution==="progress"?"text-success-tertiary":"text-danger-light-tertiary","text-xs"])},[s.evolution==="progress"?(n(),a("span",_e,"+")):i("",!0),u(" "+t(s.quantity-s.old_quantity),1)],2)])]),e("td",ue,[e("div",pe,[e("span",null,t(r.nsCurrency(s.total_price)),1),e("span",{class:_([s.evolution==="progress"?"text-success-tertiary":"text-danger-light-tertiary","text-xs"])},[s.evolution==="progress"?(n(),a("span",he,"+")):i("",!0),u(" "+t(r.nsCurrency(s.total_price-s.old_total_price)),1)],2)])]),e("td",{class:_([s.evolution==="progress"?"text-success-tertiary":"text-error-light-tertiary","p-2 border text-right"])},[s.evolution==="progress"?(n(),a("span",me,[u(t(s.difference.toFixed(2))+"% ",1),be])):i("",!0),s.evolution==="regress"?(n(),a("span",xe,[u(t(s.difference.toFixed(2))+"% ",1),ge])):i("",!0)],2)],2))),128)),o.report.current.products.length===0?(n(),a("tr",ye,[e("td",fe,t(r.__("No results to show.")),1)])):i("",!0)])):i("",!0),o.report?i("",!0):(n(),a("tbody",ve,[e("tr",null,[e("td",ke,t(r.__("Start by choosing a range and loading the report.")),1)])])),o.report?(n(),a("tfoot",we,[e("tr",null,[De,e("td",Fe,t(r.nsCurrency(o.report.current.total_price)),1),Ce])])):i("",!0)])])])])])])}const Oe=D(N,[["render",Ne]]);export{Oe as default}; diff --git a/public/build/assets/ns-best-products-report-HuKIIDSD.js b/public/build/assets/ns-best-products-report-HuKIIDSD.js deleted file mode 100644 index f95495866..000000000 --- a/public/build/assets/ns-best-products-report-HuKIIDSD.js +++ /dev/null @@ -1 +0,0 @@ -import"./tax-BACo6kIE.js";import{c as y,e as f}from"./components-CSb5I62o.js";import{a as v,b as k}from"./bootstrap-B7E2wy_a.js";import{_ as l,n as w}from"./currency-ZXKMLAC0.js";import{_ as D}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as b,o as n,c as a,b as e,g as p,t,F,e as C,n as _,f as i,j as u}from"./runtime-core.esm-bundler-DCfIpxDt.js";import"./ns-alert-popup-DDoxXsJC.js";import"./ns-avatar-image-C_oqdj76.js";import"./index.es-BED_8l8F.js";import"./ns-prompt-popup-BbWKrSku.js";const N={name:"ns-best-products-report",mounted(){},components:{nsDatepicker:y,nsDateTimePicker:f},data(){return{ns:window.ns,startDateField:{name:"start_date",type:"datetime",value:ns.date.moment.startOf("day").format()},endDateField:{name:"end_date",type:"datetime",value:ns.date.moment.endOf("day").format()},report:null,sortField:{name:"sort",type:"select",label:l("Sort Results"),value:"using_quantity_asc",options:[{value:"using_quantity_asc",label:l("Using Quantity Ascending")},{value:"using_quantity_desc",label:l("Using Quantity Descending")},{value:"using_sales_asc",label:l("Using Sales Ascending")},{value:"using_sales_desc",label:l("Using Sales Descending")},{value:"using_name_asc",label:l("Using Name Ascending")},{value:"using_name_desc",label:l("Using Name Descending")}]}}},computed:{totalDebit(){return 0},totalCredit(){return 0}},props:["storeLogo","storeName"],methods:{nsCurrency:w,__:l,printSaleReport(){this.$htmlToPaper("best-products-report")},loadReport(){v.post("/api/reports/products-report",{startDate:this.startDateField.value,endDate:this.endDateField.value,sort:this.sortField.value}).subscribe({next:d=>{d.current.products=Object.values(d.current.products),this.report=d},error:d=>{k.error(d.message).subscribe()}})}}},S={id:"report-section",class:"px-4"},B={class:"flex -mx-2"},P={class:"px-2"},R={class:"px-2"},U={class:"px-2"},q={class:"ns-button"},j=e("i",{class:"las la-sync-alt text-xl"},null,-1),V={class:"pl-2"},L={class:"px-2"},A={class:"ns-button"},O=e("i",{class:"las la-print text-xl"},null,-1),Q={class:"pl-2"},T={class:"flex -mx-2"},z={class:"px-2"},E={id:"best-products-report",class:"anim-duration-500 fade-in-entrance"},H={class:"flex w-full"},G={class:"my-4 flex justify-between w-full"},I={class:"text-primary"},J={class:"pb-1 border-b border-dashed"},K={class:"pb-1 border-b border-dashed"},M={class:"pb-1 border-b border-dashed"},W=["src","alt"],X={class:"my-4"},Y={class:"shadow ns-box"},Z={class:"ns-box-body"},$={class:"table ns-table border w-full"},ee={class:""},te={class:"p-2 text-left"},se={width:"150",class:"p-2 text-right"},re={width:"150",class:"p-2 text-right"},oe={width:"150",class:"p-2 text-right"},ne={width:"150",class:"p-2 text-right"},ae={key:0,class:""},le={class:"p-2 border"},ie={class:"p-2 border text-right"},de={class:"p-2 border text-right"},ce={class:"flex flex-col"},_e={key:0},ue={class:"p-2 border text-right"},pe={class:"flex flex-col"},he={key:0},me={key:0},be=e("i",{class:"las la-arrow-up"},null,-1),xe={key:1},ge=e("i",{class:"las la-arrow-down"},null,-1),ye={key:0,class:""},fe={colspan:"5",class:"border text-center p-2"},ve={key:1},ke={colspan:"5",class:"text-center p-2 border"},we={key:2,class:"font-semibold"},De=e("td",{colspan:"3",class:"p-2 border"},null,-1),Fe={class:"p-2 border text-right"},Ce=e("td",{class:"p-2 border text-right"},null,-1);function Ne(d,c,h,Se,o,r){const m=b("ns-date-time-picker"),x=b("ns-field");return n(),a("div",S,[e("div",B,[e("div",P,[p(m,{field:o.startDateField},null,8,["field"])]),e("div",R,[p(m,{field:o.endDateField},null,8,["field"])]),e("div",U,[e("div",q,[e("button",{onClick:c[0]||(c[0]=s=>r.loadReport()),class:"rounded flex justify-between border-box-background text-primary shadow py-1 items-center px-2"},[j,e("span",V,t(r.__("Load")),1)])])]),e("div",L,[e("div",A,[e("button",{onClick:c[1]||(c[1]=s=>r.printSaleReport()),class:"rounded flex justify-between border-box-background text-primary shadow py-1 items-center px-2"},[O,e("span",Q,t(r.__("Print")),1)])])])]),e("div",T,[e("div",z,[p(x,{field:o.sortField},null,8,["field"])])]),e("div",E,[e("div",H,[e("div",G,[e("div",I,[e("ul",null,[e("li",J,t(r.__("Date Range : {date1} - {date2}").replace("{date1}",o.startDateField.value).replace("{date2}",o.endDateField.value)),1),e("li",K,t(r.__("Document : Best Products")),1),e("li",M,t(r.__("By : {user}").replace("{user}",o.ns.user.username)),1)])]),e("div",null,[e("img",{class:"w-24",src:h.storeLogo,alt:h.storeName},null,8,W)])])]),e("div",X,[e("div",Y,[e("div",Z,[e("table",$,[e("thead",ee,[e("tr",null,[e("th",te,t(r.__("Product")),1),e("th",se,t(r.__("Unit")),1),e("th",re,t(r.__("Quantity")),1),e("th",oe,t(r.__("Value")),1),e("th",ne,t(r.__("Progress")),1)])]),o.report?(n(),a("tbody",ae,[(n(!0),a(F,null,C(o.report.current.products,(s,g)=>(n(),a("tr",{key:g,class:_(s.evolution==="progress"?"bg-success-primary":"bg-error-primary")},[e("td",le,t(s.name),1),e("td",ie,t(s.unit_name),1),e("td",de,[e("div",ce,[e("span",null,[e("span",null,t(s.quantity),1)]),e("span",{class:_([s.evolution==="progress"?"text-success-tertiary":"text-danger-light-tertiary","text-xs"])},[s.evolution==="progress"?(n(),a("span",_e,"+")):i("",!0),u(" "+t(s.quantity-s.old_quantity),1)],2)])]),e("td",ue,[e("div",pe,[e("span",null,t(r.nsCurrency(s.total_price)),1),e("span",{class:_([s.evolution==="progress"?"text-success-tertiary":"text-danger-light-tertiary","text-xs"])},[s.evolution==="progress"?(n(),a("span",he,"+")):i("",!0),u(" "+t(r.nsCurrency(s.total_price-s.old_total_price)),1)],2)])]),e("td",{class:_([s.evolution==="progress"?"text-success-tertiary":"text-error-light-tertiary","p-2 border text-right"])},[s.evolution==="progress"?(n(),a("span",me,[u(t(s.difference.toFixed(2))+"% ",1),be])):i("",!0),s.evolution==="regress"?(n(),a("span",xe,[u(t(s.difference.toFixed(2))+"% ",1),ge])):i("",!0)],2)],2))),128)),o.report.current.products.length===0?(n(),a("tr",ye,[e("td",fe,t(r.__("No results to show.")),1)])):i("",!0)])):i("",!0),o.report?i("",!0):(n(),a("tbody",ve,[e("tr",null,[e("td",ke,t(r.__("Start by choosing a range and loading the report.")),1)])])),o.report?(n(),a("tfoot",we,[e("tr",null,[De,e("td",Fe,t(r.nsCurrency(o.report.current.total_price)),1),Ce])])):i("",!0)])])])])])])}const Qe=D(N,[["render",Ne]]);export{Qe as default}; diff --git a/public/build/assets/ns-cash-flow-report-C-CJC0Mf.js b/public/build/assets/ns-cash-flow-report-C-CJC0Mf.js deleted file mode 100644 index d0813f0fd..000000000 --- a/public/build/assets/ns-cash-flow-report-C-CJC0Mf.js +++ /dev/null @@ -1 +0,0 @@ -import{h as b}from"./tax-BACo6kIE.js";import{c as y,e as f}from"./components-CSb5I62o.js";import{a as x,b as g}from"./bootstrap-B7E2wy_a.js";import{_ as v,n as w}from"./currency-ZXKMLAC0.js";import{_ as D}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as C,o as a,c as d,b as t,g as u,t as e,F as p,e as m,j as l}from"./runtime-core.esm-bundler-DCfIpxDt.js";import"./ns-alert-popup-DDoxXsJC.js";import"./ns-avatar-image-C_oqdj76.js";import"./index.es-BED_8l8F.js";import"./ns-prompt-popup-BbWKrSku.js";const F={name:"ns-cash-flow",props:["storeLogo","storeName"],mounted(){},components:{nsDatepicker:y,nsDateTimePicker:f},data(){return{startDateField:{value:b(ns.date.current).startOf("month").format("YYYY-MM-DD HH:mm:ss"),type:"datetimepicker"},endDateField:{value:b(ns.date.current).endOf("month").format("YYYY-MM-DD HH:mm:ss"),type:"datetimepicker"},report:new Object,ns:window.ns}},computed:{balance(){return Object.values(this.report).length===0?0:this.report.total_credit-this.report.total_debit},totalDebit(){return 0},totalCredit(){return 0}},methods:{__:v,nsCurrency:w,printSaleReport(){this.$htmlToPaper("report")},loadReport(){x.post("/api/reports/transactions",{startDate:this.startDateField.value,endDate:this.endDateField.value}).subscribe({next:c=>{this.report=c},error:c=>{g.error(c.message).subscribe()}})}}},k={id:"report-section",class:"px-4"},Y={class:"flex -mx-2"},B={class:"px-2"},j={class:"px-2"},R={class:"px-2"},S={class:"ns-button"},H=t("i",{class:"las la-sync-alt text-xl"},null,-1),N={class:"pl-2"},L={class:"px-2"},M={class:"ns-button"},O=t("i",{class:"las la-print text-xl"},null,-1),P={class:"pl-2"},T={id:"report",class:"anim-duration-500 fade-in-entrance"},V={class:"flex w-full"},A={class:"my-4 flex justify-between w-full"},E={class:"text-primary"},q={class:"pb-1 border-b border-dashed"},z={class:"pb-1 border-b border-dashed"},I={class:"pb-1 border-b border-dashed"},J=["src","alt"],K={class:"shadow rounded my-4"},Q={class:"ns-box"},U={class:"border-b ns-box-body"},W={class:"ns-table table w-full"},X={class:""},Z={class:"border p-2 text-left"},G={width:"150",class:"border border-error-secondary bg-error-primary p-2 text-right"},$={width:"150",class:"text-right border-success-secondary bg-success-primary border p-2"},tt={class:""},et={class:"p-2 border"},st=t("i",{class:"las la-arrow-right"},null,-1),rt={class:"p-2 border border-error-secondary bg-error-primary text-right"},ot={class:"p-2 border text-right border-success-secondary bg-success-primary"},at={class:"p-2 border"},dt=t("i",{class:"las la-arrow-right"},null,-1),ct={class:"p-2 border border-error-secondary bg-error-primary text-right"},nt={class:"p-2 border text-right border-success-secondary bg-success-primary"},lt={class:"font-semibold"},it={class:"p-2 border"},_t={class:"p-2 border border-error-secondary bg-error-primary text-right"},ht={class:"p-2 border text-right border-success-secondary bg-success-primary"},bt={class:"p-2 border"},ut={colspan:"2",class:"p-2 border text-right border-info-secondary bg-info-primary"};function pt(c,n,_,mt,r,s){const h=C("ns-field");return a(),d("div",k,[t("div",Y,[t("div",B,[u(h,{field:r.startDateField},null,8,["field"])]),t("div",j,[u(h,{field:r.endDateField},null,8,["field"])]),t("div",R,[t("div",S,[t("button",{onClick:n[0]||(n[0]=o=>s.loadReport()),class:"rounded flex justify-between text-primary shadow py-1 items-center px-2"},[H,t("span",N,e(s.__("Load")),1)])])]),t("div",L,[t("div",M,[t("button",{onClick:n[1]||(n[1]=o=>s.printSaleReport()),class:"rounded flex justify-between text-primary shadow py-1 items-center px-2"},[O,t("span",P,e(s.__("Print")),1)])])])]),t("div",T,[t("div",V,[t("div",A,[t("div",E,[t("ul",null,[t("li",q,e(s.__("Range : {date1} — {date2}").replace("{date1}",r.startDateField.value).replace("{date2}",r.endDateField.value)),1),t("li",z,e(s.__("Document : Sale By Payment")),1),t("li",I,e(s.__("By : {user}").replace("{user}",r.ns.user.username)),1)])]),t("div",null,[t("img",{class:"w-24",src:_.storeLogo,alt:_.storeName},null,8,J)])])]),t("div",K,[t("div",Q,[t("div",U,[t("table",W,[t("thead",X,[t("tr",null,[t("th",Z,e(s.__("Account")),1),t("th",G,e(s.__("Debit")),1),t("th",$,e(s.__("Credit")),1)])]),t("tbody",tt,[(a(!0),d(p,null,m(r.report.creditCashFlow,(o,i)=>(a(),d("tr",{key:i},[t("td",et,[st,l(),t("strong",null,e(o.account),1),l(" : "+e(o.name),1)]),t("td",rt,e(s.nsCurrency(0)),1),t("td",ot,e(s.nsCurrency(o.total)),1)]))),128)),(a(!0),d(p,null,m(r.report.debitCashFlow,(o,i)=>(a(),d("tr",{key:i},[t("td",at,[dt,l(),t("strong",null,e(o.account),1),l(" : "+e(o.name),1)]),t("td",ct,e(s.nsCurrency(o.total)),1),t("td",nt,e(s.nsCurrency(0)),1)]))),128))]),t("tfoot",lt,[t("tr",null,[t("td",it,e(s.__("Sub Total")),1),t("td",_t,e(s.nsCurrency(r.report.total_debit?r.report.total_debit:0)),1),t("td",ht,e(s.nsCurrency(r.report.total_credit?r.report.total_credit:0)),1)]),t("tr",null,[t("td",bt,e(s.__("Balance")),1),t("td",ut,e(s.nsCurrency(s.balance)),1)])])])])])])])])}const Yt=D(F,[["render",pt]]);export{Yt as default}; diff --git a/public/build/assets/ns-cash-flow-report-De-1JZEk.js b/public/build/assets/ns-cash-flow-report-De-1JZEk.js new file mode 100644 index 000000000..ce82dc497 --- /dev/null +++ b/public/build/assets/ns-cash-flow-report-De-1JZEk.js @@ -0,0 +1 @@ +import{h as b,a as y,b as f}from"./bootstrap-Bpe5LRJd.js";import{c as x,e as g}from"./components-RJC2qWGQ.js";import{_ as v,n as w}from"./currency-lOMYG1Wf.js";import{_ as D}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as C,o as a,c as d,a as t,f as u,t as e,F as p,b as m,i as l}from"./runtime-core.esm-bundler-RT2b-_3S.js";import"./ns-alert-popup-SVrn5Xft.js";import"./ns-avatar-image-CAD6xUGA.js";import"./index.es-Br67aBEV.js";import"./ns-prompt-popup-C2dK5WQb.js";const F={name:"ns-cash-flow",props:["storeLogo","storeName"],mounted(){},components:{nsDatepicker:x,nsDateTimePicker:g},data(){return{startDateField:{value:b(ns.date.current).startOf("month").format("YYYY-MM-DD HH:mm:ss"),type:"datetimepicker"},endDateField:{value:b(ns.date.current).endOf("month").format("YYYY-MM-DD HH:mm:ss"),type:"datetimepicker"},report:new Object,ns:window.ns}},computed:{balance(){return Object.values(this.report).length===0?0:this.report.total_credit-this.report.total_debit},totalDebit(){return 0},totalCredit(){return 0}},methods:{__:v,nsCurrency:w,printSaleReport(){this.$htmlToPaper("report")},loadReport(){y.post("/api/reports/transactions",{startDate:this.startDateField.value,endDate:this.endDateField.value}).subscribe({next:c=>{this.report=c},error:c=>{f.error(c.message).subscribe()}})}}},k={id:"report-section",class:"px-4"},Y={class:"flex -mx-2"},B={class:"px-2"},R={class:"px-2"},S={class:"px-2"},j={class:"ns-button"},H=t("i",{class:"las la-sync-alt text-xl"},null,-1),N={class:"pl-2"},L={class:"px-2"},M={class:"ns-button"},O=t("i",{class:"las la-print text-xl"},null,-1),P={class:"pl-2"},T={id:"report",class:"anim-duration-500 fade-in-entrance"},V={class:"flex w-full"},A={class:"my-4 flex justify-between w-full"},E={class:"text-primary"},q={class:"pb-1 border-b border-dashed"},z={class:"pb-1 border-b border-dashed"},I={class:"pb-1 border-b border-dashed"},J=["src","alt"],K={class:"shadow rounded my-4"},Q={class:"ns-box"},U={class:"border-b ns-box-body"},W={class:"ns-table table w-full"},X={class:""},Z={class:"border p-2 text-left"},G={width:"150",class:"border border-error-secondary bg-error-primary p-2 text-right"},$={width:"150",class:"text-right border-success-secondary bg-success-primary border p-2"},tt={class:""},et={class:"p-2 border"},st=t("i",{class:"las la-arrow-right"},null,-1),rt={class:"p-2 border border-error-secondary bg-error-primary text-right"},ot={class:"p-2 border text-right border-success-secondary bg-success-primary"},at={class:"p-2 border"},dt=t("i",{class:"las la-arrow-right"},null,-1),ct={class:"p-2 border border-error-secondary bg-error-primary text-right"},nt={class:"p-2 border text-right border-success-secondary bg-success-primary"},lt={class:"font-semibold"},it={class:"p-2 border"},_t={class:"p-2 border border-error-secondary bg-error-primary text-right"},ht={class:"p-2 border text-right border-success-secondary bg-success-primary"},bt={class:"p-2 border"},ut={colspan:"2",class:"p-2 border text-right border-info-secondary bg-info-primary"};function pt(c,n,_,mt,r,s){const h=C("ns-field");return a(),d("div",k,[t("div",Y,[t("div",B,[u(h,{field:r.startDateField},null,8,["field"])]),t("div",R,[u(h,{field:r.endDateField},null,8,["field"])]),t("div",S,[t("div",j,[t("button",{onClick:n[0]||(n[0]=o=>s.loadReport()),class:"rounded flex justify-between text-primary shadow py-1 items-center px-2"},[H,t("span",N,e(s.__("Load")),1)])])]),t("div",L,[t("div",M,[t("button",{onClick:n[1]||(n[1]=o=>s.printSaleReport()),class:"rounded flex justify-between text-primary shadow py-1 items-center px-2"},[O,t("span",P,e(s.__("Print")),1)])])])]),t("div",T,[t("div",V,[t("div",A,[t("div",E,[t("ul",null,[t("li",q,e(s.__("Range : {date1} — {date2}").replace("{date1}",r.startDateField.value).replace("{date2}",r.endDateField.value)),1),t("li",z,e(s.__("Document : Sale By Payment")),1),t("li",I,e(s.__("By : {user}").replace("{user}",r.ns.user.username)),1)])]),t("div",null,[t("img",{class:"w-24",src:_.storeLogo,alt:_.storeName},null,8,J)])])]),t("div",K,[t("div",Q,[t("div",U,[t("table",W,[t("thead",X,[t("tr",null,[t("th",Z,e(s.__("Account")),1),t("th",G,e(s.__("Debit")),1),t("th",$,e(s.__("Credit")),1)])]),t("tbody",tt,[(a(!0),d(p,null,m(r.report.creditCashFlow,(o,i)=>(a(),d("tr",{key:i},[t("td",et,[st,l(),t("strong",null,e(o.account),1),l(" : "+e(o.name),1)]),t("td",rt,e(s.nsCurrency(0)),1),t("td",ot,e(s.nsCurrency(o.total)),1)]))),128)),(a(!0),d(p,null,m(r.report.debitCashFlow,(o,i)=>(a(),d("tr",{key:i},[t("td",at,[dt,l(),t("strong",null,e(o.account),1),l(" : "+e(o.name),1)]),t("td",ct,e(s.nsCurrency(o.total)),1),t("td",nt,e(s.nsCurrency(0)),1)]))),128))]),t("tfoot",lt,[t("tr",null,[t("td",it,e(s.__("Sub Total")),1),t("td",_t,e(s.nsCurrency(r.report.total_debit?r.report.total_debit:0)),1),t("td",ht,e(s.nsCurrency(r.report.total_credit?r.report.total_credit:0)),1)]),t("tr",null,[t("td",bt,e(s.__("Balance")),1),t("td",ut,e(s.nsCurrency(s.balance)),1)])])])])])])])])}const kt=D(F,[["render",pt]]);export{kt as default}; diff --git a/public/build/assets/ns-customers-statement-report-D2SxgR7B.js b/public/build/assets/ns-customers-statement-report-DWzLJEA5.js similarity index 96% rename from public/build/assets/ns-customers-statement-report-D2SxgR7B.js rename to public/build/assets/ns-customers-statement-report-DWzLJEA5.js index ea3408be3..ea092121d 100644 --- a/public/build/assets/ns-customers-statement-report-D2SxgR7B.js +++ b/public/build/assets/ns-customers-statement-report-DWzLJEA5.js @@ -1 +1 @@ -import{_ as c,n as x}from"./currency-ZXKMLAC0.js";import{_ as p}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as h,o as l,c as n,b as e,g as _,t as s,f as b,F as f,e as g}from"./runtime-core.esm-bundler-DCfIpxDt.js";const y={name:"ns-customers-statement-report",props:["storeLogo","storeName","search-url"],data(){return{startDateField:{type:"datetimepicker",name:"startDate",value:moment(ns.date.current).startOf("day")},endDateField:{type:"datetimepicker",name:"endDate",value:moment(ns.date.current).endOf("day")},selectedCustomer:null,ns:window.ns,report:{total_purchases:0,total_orders:0,account_amount:0,owed_amount:0,credit_limit_amount:0,orders:[],wallet_transactions:[]}}},mounted(){},computed:{selectedCustomerName(){return this.selectedCustomer===null?c("N/A"):`${this.selectedCustomer.first_name} ${this.selectedCustomer.last_name}`}},methods:{__:c,nsCurrency:x,printSaleReport(){this.$htmlToPaper("report")},handleSelectedCustomer(a){this.selectedCustomer=a,nsHttpClient.post(`/api/reports/customers-statement/${a.id}`,{rangeStarts:this.startDateField.value,rangeEnds:this.endDateField.value}).subscribe({next:o=>{this.report=o},error:o=>{nsSnackBar.error(o.message||c("An unexpected error occured")).subscribe()}})}}},v={id:"report-section"},C={class:"flex -mx-2"},w={class:"px-2"},k={class:"px-2"},D={key:0,class:"px-2"},S={class:"ns-button"},F=e("i",{class:"las la-sync-alt text-xl"},null,-1),N={class:"pl-2"},B={class:"px-2"},L={class:"ns-button"},O=e("i",{class:"las la-print text-xl"},null,-1),R={class:"pl-2"},T={id:"report",class:"anim-duration-500 fade-in-entrance"},j={class:"flex w-full"},A={class:"my-4 flex justify-between w-full"},P={class:"text-primary"},V={class:"pb-1 border-b border-dashed border-box-edge"},E={class:"pb-1 border-b border-dashed border-box-edge"},H={class:"pb-1 border-b border-dashed border-box-edge"},U={class:"pb-1 border-b border-dashed border-box-edge"},W=["src","alt"],q={class:"shadow rounded"},z={class:"ns-box"},G={class:"text-center ns-box-header p-2"},I={class:"font-bold"},J={class:"border-b ns-box-body"},K={class:"table ns-table w-full"},M={class:"text-primary"},Q={class:""},X={width:"200",class:"font-semibold p-2 border text-left bg-success-secondary border-box-edge text-white print:text-black"},Y={class:"p-2 border text-right border-box-edge"},Z={class:""},$={width:"200",class:"font-semibold p-2 border text-left bg-warning-secondary border-box-edge text-white print:text-black"},ee={class:"p-2 border text-right border-box-edge"},te={class:""},se={width:"200",class:"font-semibold p-2 border text-left bg-info-secondary border-box-edge text-white print:text-black"},re={class:"p-2 border text-right border-box-edge"},oe={class:""},de={width:"200",class:"font-semibold p-2 border text-left border-box-edge"},le={class:"p-2 border text-right border-box-edge"},ne={class:""},ae={width:"200",class:"font-semibold p-2 border text-left border-box-edge"},ce={class:"p-2 border text-right border-box-edge"},_e=e("br",null,null,-1),ie=e("br",null,null,-1),ue={key:0,class:"shadow rounded overflow-hidden"},he={class:"ns-box"},be={class:"text-center ns-box-header p-2"},me={class:"font-bold"},xe={class:"border-b ns-box-body"},pe={class:"table ns-table w-full"},fe={class:"p-2 border text-left"},ge={class:"p-2 border text-right"},ye={class:"text-primary"},ve={width:"200",class:"font-semibold p-2 border text-left"},Ce={class:"p-2 border text-right"};function we(a,o,i,ke,r,t){const u=h("ns-field"),m=h("ns-search");return l(),n("div",v,[e("div",C,[e("div",w,[_(u,{field:r.startDateField},null,8,["field"])]),e("div",k,[_(u,{field:r.endDateField},null,8,["field"])]),r.selectedCustomer?(l(),n("div",D,[e("div",S,[e("button",{onClick:o[0]||(o[0]=d=>t.handleSelectedCustomer(r.selectedCustomer)),class:"rounded flex justify-between text-primary shadow py-1 items-center px-2"},[F,e("span",N,s(t.__("Load")),1)])])])):b("",!0),e("div",B,[e("div",L,[e("button",{onClick:o[1]||(o[1]=d=>t.printSaleReport()),class:"rounded flex justify-between text-primary shadow py-1 items-center px-2"},[O,e("span",R,s(t.__("Print")),1)])])])]),e("div",null,[_(m,{placeholder:t.__("Search Customer..."),label:["first_name","last_name"],value:"id",onSelect:o[2]||(o[2]=d=>t.handleSelectedCustomer(d)),url:a.searchUrl},null,8,["placeholder","url"])]),e("div",T,[e("div",j,[e("div",A,[e("div",P,[e("ul",null,[e("li",V,s(t.__("Range : {date1} — {date2}").replace("{date1}",this.startDateField.value).replace("{date2}",this.endDateField.value)),1),e("li",E,s(t.__("Document : Customer Statement")),1),e("li",H,s(t.__("Customer : {selectedCustomerName}").replace("{selectedCustomerName}",t.selectedCustomerName)),1),e("li",U,s(t.__("By : {user}").replace("{user}",r.ns.user.username)),1)])]),e("div",null,[e("img",{class:"w-24",src:i.storeLogo,alt:i.storeName},null,8,W)])])]),e("div",q,[e("div",z,[e("div",G,[e("h3",I,s(t.__("Summary")),1)]),e("div",J,[e("table",K,[e("tbody",M,[e("tr",Q,[e("td",X,s(t.__("Total Purchases")),1),e("td",Y,s(t.nsCurrency(r.report.purchases_amount)),1)]),e("tr",Z,[e("td",$,s(t.__("Due Amount")),1),e("td",ee,s(t.nsCurrency(r.report.owed_amount)),1)]),e("tr",te,[e("td",se,s(t.__("Wallet Balance")),1),e("td",re,s(t.nsCurrency(r.report.account_amount)),1)]),e("tr",oe,[e("td",de,s(t.__("Credit Limit")),1),e("td",le,s(t.nsCurrency(r.report.credit_limit_amount)),1)]),e("tr",ne,[e("td",ae,s(t.__("Total Orders")),1),e("td",ce,s(r.report.total_orders),1)])])])])])]),_e,ie,r.report.orders.length>0?(l(),n("div",ue,[e("div",he,[e("div",be,[e("h3",me,s(t.__("Orders")),1)]),e("div",xe,[e("table",pe,[e("thead",null,[e("tr",null,[e("th",fe,s(t.__("Order")),1),e("th",ge,s(t.__("Total")),1)])]),e("tbody",ye,[(l(!0),n(f,null,g(r.report.orders,d=>(l(),n("tr",{class:"",key:d.id},[e("td",ve,s(d.code),1),e("td",Ce,s(t.nsCurrency(d.total)),1)]))),128))])])])])])):b("",!0)])])}const Ne=p(y,[["render",we]]);export{Ne as default}; +import{_ as c,n as x}from"./currency-lOMYG1Wf.js";import{_ as p}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as h,o as l,c as n,a as e,f as _,t as s,e as b,F as f,b as g}from"./runtime-core.esm-bundler-RT2b-_3S.js";const y={name:"ns-customers-statement-report",props:["storeLogo","storeName","search-url"],data(){return{startDateField:{type:"datetimepicker",name:"startDate",value:moment(ns.date.current).startOf("day")},endDateField:{type:"datetimepicker",name:"endDate",value:moment(ns.date.current).endOf("day")},selectedCustomer:null,ns:window.ns,report:{total_purchases:0,total_orders:0,account_amount:0,owed_amount:0,credit_limit_amount:0,orders:[],wallet_transactions:[]}}},mounted(){},computed:{selectedCustomerName(){return this.selectedCustomer===null?c("N/A"):`${this.selectedCustomer.first_name} ${this.selectedCustomer.last_name}`}},methods:{__:c,nsCurrency:x,printSaleReport(){this.$htmlToPaper("report")},handleSelectedCustomer(a){this.selectedCustomer=a,nsHttpClient.post(`/api/reports/customers-statement/${a.id}`,{rangeStarts:this.startDateField.value,rangeEnds:this.endDateField.value}).subscribe({next:o=>{this.report=o},error:o=>{nsSnackBar.error(o.message||c("An unexpected error occured")).subscribe()}})}}},v={id:"report-section"},C={class:"flex -mx-2"},w={class:"px-2"},k={class:"px-2"},D={key:0,class:"px-2"},S={class:"ns-button"},F=e("i",{class:"las la-sync-alt text-xl"},null,-1),N={class:"pl-2"},B={class:"px-2"},L={class:"ns-button"},O=e("i",{class:"las la-print text-xl"},null,-1),R={class:"pl-2"},T={id:"report",class:"anim-duration-500 fade-in-entrance"},j={class:"flex w-full"},A={class:"my-4 flex justify-between w-full"},P={class:"text-primary"},V={class:"pb-1 border-b border-dashed border-box-edge"},E={class:"pb-1 border-b border-dashed border-box-edge"},H={class:"pb-1 border-b border-dashed border-box-edge"},U={class:"pb-1 border-b border-dashed border-box-edge"},W=["src","alt"],q={class:"shadow rounded"},z={class:"ns-box"},G={class:"text-center ns-box-header p-2"},I={class:"font-bold"},J={class:"border-b ns-box-body"},K={class:"table ns-table w-full"},M={class:"text-primary"},Q={class:""},X={width:"200",class:"font-semibold p-2 border text-left bg-success-secondary border-box-edge text-white print:text-black"},Y={class:"p-2 border text-right border-box-edge"},Z={class:""},$={width:"200",class:"font-semibold p-2 border text-left bg-warning-secondary border-box-edge text-white print:text-black"},ee={class:"p-2 border text-right border-box-edge"},te={class:""},se={width:"200",class:"font-semibold p-2 border text-left bg-info-secondary border-box-edge text-white print:text-black"},re={class:"p-2 border text-right border-box-edge"},oe={class:""},de={width:"200",class:"font-semibold p-2 border text-left border-box-edge"},le={class:"p-2 border text-right border-box-edge"},ne={class:""},ae={width:"200",class:"font-semibold p-2 border text-left border-box-edge"},ce={class:"p-2 border text-right border-box-edge"},_e=e("br",null,null,-1),ie=e("br",null,null,-1),ue={key:0,class:"shadow rounded overflow-hidden"},he={class:"ns-box"},be={class:"text-center ns-box-header p-2"},me={class:"font-bold"},xe={class:"border-b ns-box-body"},pe={class:"table ns-table w-full"},fe={class:"p-2 border text-left"},ge={class:"p-2 border text-right"},ye={class:"text-primary"},ve={width:"200",class:"font-semibold p-2 border text-left"},Ce={class:"p-2 border text-right"};function we(a,o,i,ke,r,t){const u=h("ns-field"),m=h("ns-search");return l(),n("div",v,[e("div",C,[e("div",w,[_(u,{field:r.startDateField},null,8,["field"])]),e("div",k,[_(u,{field:r.endDateField},null,8,["field"])]),r.selectedCustomer?(l(),n("div",D,[e("div",S,[e("button",{onClick:o[0]||(o[0]=d=>t.handleSelectedCustomer(r.selectedCustomer)),class:"rounded flex justify-between text-primary shadow py-1 items-center px-2"},[F,e("span",N,s(t.__("Load")),1)])])])):b("",!0),e("div",B,[e("div",L,[e("button",{onClick:o[1]||(o[1]=d=>t.printSaleReport()),class:"rounded flex justify-between text-primary shadow py-1 items-center px-2"},[O,e("span",R,s(t.__("Print")),1)])])])]),e("div",null,[_(m,{placeholder:t.__("Search Customer..."),label:["first_name","last_name"],value:"id",onSelect:o[2]||(o[2]=d=>t.handleSelectedCustomer(d)),url:a.searchUrl},null,8,["placeholder","url"])]),e("div",T,[e("div",j,[e("div",A,[e("div",P,[e("ul",null,[e("li",V,s(t.__("Range : {date1} — {date2}").replace("{date1}",this.startDateField.value).replace("{date2}",this.endDateField.value)),1),e("li",E,s(t.__("Document : Customer Statement")),1),e("li",H,s(t.__("Customer : {selectedCustomerName}").replace("{selectedCustomerName}",t.selectedCustomerName)),1),e("li",U,s(t.__("By : {user}").replace("{user}",r.ns.user.username)),1)])]),e("div",null,[e("img",{class:"w-24",src:i.storeLogo,alt:i.storeName},null,8,W)])])]),e("div",q,[e("div",z,[e("div",G,[e("h3",I,s(t.__("Summary")),1)]),e("div",J,[e("table",K,[e("tbody",M,[e("tr",Q,[e("td",X,s(t.__("Total Purchases")),1),e("td",Y,s(t.nsCurrency(r.report.purchases_amount)),1)]),e("tr",Z,[e("td",$,s(t.__("Due Amount")),1),e("td",ee,s(t.nsCurrency(r.report.owed_amount)),1)]),e("tr",te,[e("td",se,s(t.__("Wallet Balance")),1),e("td",re,s(t.nsCurrency(r.report.account_amount)),1)]),e("tr",oe,[e("td",de,s(t.__("Credit Limit")),1),e("td",le,s(t.nsCurrency(r.report.credit_limit_amount)),1)]),e("tr",ne,[e("td",ae,s(t.__("Total Orders")),1),e("td",ce,s(r.report.total_orders),1)])])])])])]),_e,ie,r.report.orders.length>0?(l(),n("div",ue,[e("div",he,[e("div",be,[e("h3",me,s(t.__("Orders")),1)]),e("div",xe,[e("table",pe,[e("thead",null,[e("tr",null,[e("th",fe,s(t.__("Order")),1),e("th",ge,s(t.__("Total")),1)])]),e("tbody",ye,[(l(!0),n(f,null,g(r.report.orders,d=>(l(),n("tr",{class:"",key:d.id},[e("td",ve,s(d.code),1),e("td",Ce,s(t.nsCurrency(d.total)),1)]))),128))])])])])])):b("",!0)])])}const Ne=p(y,[["render",we]]);export{Ne as default}; diff --git a/public/build/assets/ns-dashboard-BTTHL_jJ.js b/public/build/assets/ns-dashboard-BTTHL_jJ.js deleted file mode 100644 index ec75cf6c6..000000000 --- a/public/build/assets/ns-dashboard-BTTHL_jJ.js +++ /dev/null @@ -1 +0,0 @@ -import"./bootstrap-B7E2wy_a.js";import{_ as o,n as s,b as t}from"./currency-ZXKMLAC0.js";import{_ as a}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{B as e}from"./runtime-core.esm-bundler-DCfIpxDt.js";import"./tax-BACo6kIE.js";const n={name:"ns-dashboard",data(){return{report:{}}},mounted(){},methods:{__:o,nsCurrency:s,nsRawCurrency:t}};function d(r,m,p,_,c,f){return e(r.$slots,"default")}const b=a(n,[["render",d]]);export{b as default}; diff --git a/public/build/assets/ns-dashboard-DK_nj8-O.js b/public/build/assets/ns-dashboard-DK_nj8-O.js new file mode 100644 index 000000000..496dfebbd --- /dev/null +++ b/public/build/assets/ns-dashboard-DK_nj8-O.js @@ -0,0 +1 @@ +import"./bootstrap-Bpe5LRJd.js";import{_ as s,n as o,a as t}from"./currency-lOMYG1Wf.js";import{_ as a}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{A as e}from"./runtime-core.esm-bundler-RT2b-_3S.js";const n={name:"ns-dashboard",data(){return{report:{}}},mounted(){},methods:{__:s,nsCurrency:o,nsRawCurrency:t}};function d(r,m,p,_,c,f){return e(r.$slots,"default")}const l=a(n,[["render",d]]);export{l as default}; diff --git a/public/build/assets/ns-hotpress-Cxzadt2h.js b/public/build/assets/ns-hotpress-Cxzadt2h.js deleted file mode 100644 index c28c2dd3c..000000000 --- a/public/build/assets/ns-hotpress-Cxzadt2h.js +++ /dev/null @@ -1 +0,0 @@ -var o=Object.defineProperty;var h=(r,e,s)=>e in r?o(r,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):r[e]=s;var l=(r,e,s)=>(h(r,typeof e!="symbol"?e+"":e,s),s);import{h as c}from"./tax-BACo6kIE.js";ns.date.moment=c(ns.date.current);ns.date.interval=setInterval(()=>{ns.date.moment.add(1,"seconds"),ns.date.current=c(ns.date.current).add(1,"seconds").format("YYYY-MM-DD HH:mm:ss")},1e3);ns.date.getNowString=()=>{const r=Date.parse(new Date().toLocaleString("en-US",{timeZone:ns.date.timeZone}));return c(r).format("YYYY-MM-DD HH:mm:ss")};ns.date.getMoment=()=>{const r=Date.parse(new Date().toLocaleString("en-US",{timeZone:ns.date.timeZone}));return c(r)};class b{constructor(){l(this,"listeners",new Object);document.addEventListener("keydown",e=>this.processEvent(e))}processEvent(e){for(let s in this.listeners){const i=this.listeners[s].getConfig();i.hidden.length>0&&i.hidden.filter(n=>!(n instanceof HTMLElement)&&document.querySelector(n)===null).length!==i.hidden.length||i.visible.length>0&&!(i.visible.filter(n=>n instanceof HTMLElement||document.querySelector(n)!==null).length===i.visible.length)||i.callbacks.forEach(t=>{typeof t.action=="string"?this.processSingleAction({action:t.action.trim(),callback:t.callback}):typeof t.action=="object"&&t.action!==null&&t.action.length>0&&t.action.forEach(n=>{this.processSingleAction({action:n.toString().trim(),callback:t.callback})})})}}processSingleAction({action:e,callback:s}){const i=e.split("+"),t={ctrlKey:!1,altKey:!1,shiftKey:!1};i.forEach(a=>{switch(a){case"ctrl":t.ctrlKey=!0;break;case"alt":t.altKey=!0;break;case"shift":t.shiftKey=!0;break}});const n=i.filter(a=>!["ctrl","alt","shift"].includes(a));this.executeCallback({event,combinableKeys:t,callback:s,key:n[0]})}executeCallback({event:e,callback:s,combinableKeys:i,key:t}){if(e.key!==void 0&&e.key.toLowerCase()===t.toLowerCase()){let n=!0;for(let a in i)e[a]!==i[a]&&(n=!1);n&&s(e,t)}}create(e){return this.listeners[e]=new d}destroy(e){delete this.listeners[e]}}class d{constructor(){l(this,"visible",[]);l(this,"hidden",[]);l(this,"callbacks",[])}whenVisible(e){return typeof e=="object"?this.visible.push(...e):this.visible.push(e),this}clearVisible(){return this.visible=[],this}whenNotVisible(e){return e.length>0?this.hidden.push(...e):this.hidden.push(e),this}clearHidden(){return this.hidden=[],this}whenPressed(e,s){return this.callbacks.push({action:e,callback:s}),this}clearCallbacks(){return this.callbacks=[],this}getConfig(){return{callbacks:this.callbacks,hidden:this.hidden,visible:this.visible}}}export{b as N}; diff --git a/public/build/assets/ns-hotpress-MZ-MjBha.js b/public/build/assets/ns-hotpress-MZ-MjBha.js new file mode 100644 index 000000000..da6d85e13 --- /dev/null +++ b/public/build/assets/ns-hotpress-MZ-MjBha.js @@ -0,0 +1 @@ +var o=Object.defineProperty;var h=(r,e,s)=>e in r?o(r,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):r[e]=s;var l=(r,e,s)=>(h(r,typeof e!="symbol"?e+"":e,s),s);import{h as c}from"./bootstrap-Bpe5LRJd.js";ns.date.moment=c(ns.date.current);ns.date.interval=setInterval(()=>{ns.date.moment.add(1,"seconds"),ns.date.current=c(ns.date.current).add(1,"seconds").format("YYYY-MM-DD HH:mm:ss")},1e3);ns.date.getNowString=()=>{const r=Date.parse(new Date().toLocaleString("en-US",{timeZone:ns.date.timeZone}));return c(r).format("YYYY-MM-DD HH:mm:ss")};ns.date.getMoment=()=>{const r=Date.parse(new Date().toLocaleString("en-US",{timeZone:ns.date.timeZone}));return c(r)};class b{constructor(){l(this,"listeners",new Object);document.addEventListener("keydown",e=>this.processEvent(e))}processEvent(e){for(let s in this.listeners){const i=this.listeners[s].getConfig();i.hidden.length>0&&i.hidden.filter(n=>!(n instanceof HTMLElement)&&document.querySelector(n)===null).length!==i.hidden.length||i.visible.length>0&&!(i.visible.filter(n=>n instanceof HTMLElement||document.querySelector(n)!==null).length===i.visible.length)||i.callbacks.forEach(t=>{typeof t.action=="string"?this.processSingleAction({action:t.action.trim(),callback:t.callback}):typeof t.action=="object"&&t.action!==null&&t.action.length>0&&t.action.forEach(n=>{this.processSingleAction({action:n.toString().trim(),callback:t.callback})})})}}processSingleAction({action:e,callback:s}){const i=e.split("+"),t={ctrlKey:!1,altKey:!1,shiftKey:!1};i.forEach(a=>{switch(a){case"ctrl":t.ctrlKey=!0;break;case"alt":t.altKey=!0;break;case"shift":t.shiftKey=!0;break}});const n=i.filter(a=>!["ctrl","alt","shift"].includes(a));this.executeCallback({event,combinableKeys:t,callback:s,key:n[0]})}executeCallback({event:e,callback:s,combinableKeys:i,key:t}){if(e.key!==void 0&&e.key.toLowerCase()===t.toLowerCase()){let n=!0;for(let a in i)e[a]!==i[a]&&(n=!1);n&&s(e,t)}}create(e){return this.listeners[e]=new d}destroy(e){delete this.listeners[e]}}class d{constructor(){l(this,"visible",[]);l(this,"hidden",[]);l(this,"callbacks",[])}whenVisible(e){return typeof e=="object"?this.visible.push(...e):this.visible.push(e),this}clearVisible(){return this.visible=[],this}whenNotVisible(e){return e.length>0?this.hidden.push(...e):this.hidden.push(e),this}clearHidden(){return this.hidden=[],this}whenPressed(e,s){return this.callbacks.push({action:e,callback:s}),this}clearCallbacks(){return this.callbacks=[],this}getConfig(){return{callbacks:this.callbacks,hidden:this.hidden,visible:this.visible}}}export{b as N}; diff --git a/public/build/assets/ns-incomplete-sale-card-widget-CtAYq1kg.js b/public/build/assets/ns-incomplete-sale-card-widget-DHcCVEz0.js similarity index 86% rename from public/build/assets/ns-incomplete-sale-card-widget-CtAYq1kg.js rename to public/build/assets/ns-incomplete-sale-card-widget-DHcCVEz0.js index 9672ec280..edda37a47 100644 --- a/public/build/assets/ns-incomplete-sale-card-widget-CtAYq1kg.js +++ b/public/build/assets/ns-incomplete-sale-card-widget-DHcCVEz0.js @@ -1 +1 @@ -import{_ as d,n as c}from"./currency-ZXKMLAC0.js";import{_ as a}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as _,c as f,b as e,t as s,g as m}from"./runtime-core.esm-bundler-DCfIpxDt.js";const u={name:"ns-sale-card-widget",methods:{__:d,nsCurrency:c},data(){return{report:{}}},mounted(){Dashboard.day.subscribe(o=>{this.report=o})}},x={class:"flex card-widget flex-auto flex-col rounded-lg shadow-lg bg-gradient-to-br from-green-400 to-green-600 px-3 py-5"},h={class:"flex flex-row md:flex-col flex-auto"},p={class:"w-1/2 md:w-full flex md:flex-col md:items-start items-center justify-center"},b={class:"flex justify-between w-full items-center"},g={class:"font-bold hidden text-right md:inline-block"},y={class:"text-2xl font-black"},v={class:"w-1/2 md:w-full flex flex-col px-2 justify-end items-end"},w={class:"font-bold inline-block text-right md:hidden"},k={class:"text-xs text-right"};function C(o,n,j,B,r,t){const l=i("ns-close-button");return _(),f("div",x,[e("div",h,[e("div",p,[e("div",b,[e("h6",g,s(t.__("Incomplete Orders")),1),e("div",null,[m(l,{class:"border-success-secondary",onClick:n[0]||(n[0]=I=>o.$emit("onRemove"))})])]),e("h3",y,s(t.nsCurrency(r.report.total_unpaid||0,"abbreviate")),1)]),e("div",v,[e("h6",w,s(t.__("Incomplete Orders")),1),e("h4",k,"+"+s(t.nsCurrency(r.report.today_unpaid||0))+" "+s(t.__("Today")),1)])])])}const S=a(u,[["render",C]]);export{S as default}; +import{_ as d,n as c}from"./currency-lOMYG1Wf.js";import{_ as a}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as _,c as f,a as e,t as s,f as m}from"./runtime-core.esm-bundler-RT2b-_3S.js";const u={name:"ns-sale-card-widget",methods:{__:d,nsCurrency:c},data(){return{report:{}}},mounted(){Dashboard.day.subscribe(o=>{this.report=o})}},x={class:"flex card-widget flex-auto flex-col rounded-lg shadow-lg bg-gradient-to-br from-green-400 to-green-600 px-3 py-5"},h={class:"flex flex-row md:flex-col flex-auto"},p={class:"w-1/2 md:w-full flex md:flex-col md:items-start items-center justify-center"},b={class:"flex justify-between w-full items-center"},g={class:"font-bold hidden text-right md:inline-block"},y={class:"text-2xl font-black"},v={class:"w-1/2 md:w-full flex flex-col px-2 justify-end items-end"},w={class:"font-bold inline-block text-right md:hidden"},k={class:"text-xs text-right"};function C(o,n,j,B,r,t){const l=i("ns-close-button");return _(),f("div",x,[e("div",h,[e("div",p,[e("div",b,[e("h6",g,s(t.__("Incomplete Orders")),1),e("div",null,[m(l,{class:"border-success-secondary",onClick:n[0]||(n[0]=I=>o.$emit("onRemove"))})])]),e("h3",y,s(t.nsCurrency(r.report.total_unpaid||0,"abbreviate")),1)]),e("div",v,[e("h6",w,s(t.__("Incomplete Orders")),1),e("h4",k,"+"+s(t.nsCurrency(r.report.today_unpaid||0))+" "+s(t.__("Today")),1)])])])}const S=a(u,[["render",C]]);export{S as default}; diff --git a/public/build/assets/ns-login-BDtgzyc_.js b/public/build/assets/ns-login-BDtgzyc_.js deleted file mode 100644 index 3379e9e73..000000000 --- a/public/build/assets/ns-login-BDtgzyc_.js +++ /dev/null @@ -1 +0,0 @@ -import{k as w,Z as F,w as S}from"./tax-BACo6kIE.js";import{a as d,n as p,b as u}from"./bootstrap-B7E2wy_a.js";import{_ as a}from"./currency-ZXKMLAC0.js";import{_ as T}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as f,o as s,c as t,b as i,F as V,e as B,h as v,f as l,g as h,t as _,w as y,j as R}from"./runtime-core.esm-bundler-DCfIpxDt.js";const X={name:"ns-login",props:["showRecoveryLink","showRegisterButton"],data(){return{fields:[],xXsrfToken:null,validation:new w,isSubitting:!1}},mounted(){F({login:d.get("/api/fields/ns.login"),csrf:d.get("/sanctum/csrf-cookie")}).subscribe({next:n=>{this.fields=this.validation.createFields(n.login),this.xXsrfToken=d.response.config.headers["X-XSRF-TOKEN"],setTimeout(()=>p.doAction("ns-login-mounted",this),100)},error:n=>{u.error(n.message||a("An unexpected error occurred."),a("OK"),{duration:0}).subscribe()}})},methods:{__:a,signIn(){if(!this.validation.validateFields(this.fields))return u.error(a("Unable to proceed the form is not valid.")).subscribe();this.validation.disableFields(this.fields),p.applyFilters("ns-login-submit",!0)&&(this.isSubitting=!0,d.post("/auth/sign-in",this.validation.getValue(this.fields),{headers:{"X-XSRF-TOKEN":this.xXsrfToken}}).subscribe({next:e=>{document.location=e.data.redirectTo},error:e=>{this.isSubitting=!1,this.validation.enableFields(this.fields),e.data&&this.validation.triggerFieldsErrors(this.fields,e.data),u.error(e.message||a("An unexpected error occured.")).subscribe()}}))}}},N={class:"ns-box rounded shadow overflow-hidden transition-all duration-100"},j={class:"ns-box-body"},C={class:"p-3 -my-2"},K={key:0,class:"flex items-center justify-center py-10"},E={key:1,class:"flex w-full items-center justify-center py-4"},I={href:"/password-lost",class:"hover:underline text-blue-600 text-sm"},L={class:"flex justify-between items-center border-t ns-box-footer p-3"},A={key:0};function O(n,e,m,z,o,r){const k=f("ns-field"),g=f("ns-spinner"),b=f("ns-button");return s(),t("div",N,[i("div",j,[i("div",C,[o.fields.length>0?(s(),t("div",{key:0,class:"py-2 fade-in-entrance anim-duration-300",onKeyup:e[0]||(e[0]=S(c=>r.signIn(),["enter"]))},[(s(!0),t(V,null,B(o.fields,(c,x)=>(s(),v(k,{key:x,field:c},null,8,["field"]))),128))],32)):l("",!0)]),o.fields.length===0?(s(),t("div",K,[h(g,{border:"4",size:"16"})])):l("",!0),m.showRecoveryLink?(s(),t("div",E,[i("a",I,_(r.__("Password Forgotten ?")),1)])):l("",!0)]),i("div",L,[i("div",null,[h(b,{disabled:o.isSubitting,onClick:e[1]||(e[1]=c=>r.signIn()),class:"justify-between",type:"info"},{default:y(()=>[o.isSubitting?(s(),v(g,{key:0,class:"mr-2",size:"6"})):l("",!0),i("span",null,_(r.__("Sign In")),1)]),_:1},8,["disabled"])]),m.showRegisterButton?(s(),t("div",A,[h(b,{link:!0,href:"/sign-up",type:"success"},{default:y(()=>[R(_(r.__("Register")),1)]),_:1})])):l("",!0)])])}const Z=T(X,[["render",O]]);export{Z as default}; diff --git a/public/build/assets/ns-login-CdLJnkR_.js b/public/build/assets/ns-login-CdLJnkR_.js new file mode 100644 index 000000000..6dafa8f1c --- /dev/null +++ b/public/build/assets/ns-login-CdLJnkR_.js @@ -0,0 +1 @@ +import{F as w,G as F,a as d,n as p,b as u,w as S}from"./bootstrap-Bpe5LRJd.js";import{_ as a}from"./currency-lOMYG1Wf.js";import{_ as T}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as f,o as s,c as t,a as i,F as V,b as B,g as v,e as l,f as _,t as h,w as y,i as R}from"./runtime-core.esm-bundler-RT2b-_3S.js";const X={name:"ns-login",props:["showRecoveryLink","showRegisterButton"],data(){return{fields:[],xXsrfToken:null,validation:new w,isSubitting:!1}},mounted(){F({login:d.get("/api/fields/ns.login"),csrf:d.get("/sanctum/csrf-cookie")}).subscribe({next:n=>{this.fields=this.validation.createFields(n.login),this.xXsrfToken=d.response.config.headers["X-XSRF-TOKEN"],setTimeout(()=>p.doAction("ns-login-mounted",this),100)},error:n=>{u.error(n.message||a("An unexpected error occurred."),a("OK"),{duration:0}).subscribe()}})},methods:{__:a,signIn(){if(!this.validation.validateFields(this.fields))return u.error(a("Unable to proceed the form is not valid.")).subscribe();this.validation.disableFields(this.fields),p.applyFilters("ns-login-submit",!0)&&(this.isSubitting=!0,d.post("/auth/sign-in",this.validation.getValue(this.fields),{headers:{"X-XSRF-TOKEN":this.xXsrfToken}}).subscribe({next:e=>{document.location=e.data.redirectTo},error:e=>{this.isSubitting=!1,this.validation.enableFields(this.fields),e.data&&this.validation.triggerFieldsErrors(this.fields,e.data),u.error(e.message||a("An unexpected error occured.")).subscribe()}}))}}},N={class:"ns-box rounded shadow overflow-hidden transition-all duration-100"},C={class:"ns-box-body"},K={class:"p-3 -my-2"},j={key:0,class:"flex items-center justify-center py-10"},E={key:1,class:"flex w-full items-center justify-center py-4"},I={href:"/password-lost",class:"hover:underline text-blue-600 text-sm"},L={class:"flex justify-between items-center border-t ns-box-footer p-3"},A={key:0};function O(n,e,m,z,o,r){const k=f("ns-field"),g=f("ns-spinner"),b=f("ns-button");return s(),t("div",N,[i("div",C,[i("div",K,[o.fields.length>0?(s(),t("div",{key:0,class:"py-2 fade-in-entrance anim-duration-300",onKeyup:e[0]||(e[0]=S(c=>r.signIn(),["enter"]))},[(s(!0),t(V,null,B(o.fields,(c,x)=>(s(),v(k,{key:x,field:c},null,8,["field"]))),128))],32)):l("",!0)]),o.fields.length===0?(s(),t("div",j,[_(g,{border:"4",size:"16"})])):l("",!0),m.showRecoveryLink?(s(),t("div",E,[i("a",I,h(r.__("Password Forgotten ?")),1)])):l("",!0)]),i("div",L,[i("div",null,[_(b,{disabled:o.isSubitting,onClick:e[1]||(e[1]=c=>r.signIn()),class:"justify-between",type:"info"},{default:y(()=>[o.isSubitting?(s(),v(g,{key:0,class:"mr-2",size:"6"})):l("",!0),i("span",null,h(r.__("Sign In")),1)]),_:1},8,["disabled"])]),m.showRegisterButton?(s(),t("div",A,[_(b,{link:!0,href:"/sign-up",type:"success"},{default:y(()=>[R(h(r.__("Register")),1)]),_:1})])):l("",!0)])])}const P=T(X,[["render",O]]);export{P as default}; diff --git a/public/build/assets/ns-low-stock-report-CxRf9a2j.js b/public/build/assets/ns-low-stock-report-CxRf9a2j.js deleted file mode 100644 index 3c49485a4..000000000 --- a/public/build/assets/ns-low-stock-report-CxRf9a2j.js +++ /dev/null @@ -1 +0,0 @@ -import{k}from"./tax-BACo6kIE.js";import{c as w,e as R}from"./components-CSb5I62o.js";import{a as b,b as m}from"./bootstrap-B7E2wy_a.js";import{_ as u,n as v}from"./currency-ZXKMLAC0.js";import{k as T,b as x}from"./ns-prompt-popup-BbWKrSku.js";import{j as N}from"./join-array-DchOF3Wi.js";import{_ as C}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as P,o as c,c as i,b as t,t as s,f as h,F as y,e as f,g as S}from"./runtime-core.esm-bundler-DCfIpxDt.js";import"./ns-alert-popup-DDoxXsJC.js";import"./ns-avatar-image-C_oqdj76.js";import"./index.es-BED_8l8F.js";const j={name:"ns-low-stock-report",props:["storeLogo","storeName"],mounted(){this.reportType=this.options[0].value,this.loadRelevantReport()},components:{nsDatepicker:w,nsDateTimePicker:R,nsPaginate:T},data(){return{ns:window.ns,products:[],options:[{label:u("Stock Report"),value:"stock_report"},{label:u("Low Stock Report"),value:"low_stock"}],stockReportResult:{},reportType:"",reportTypeName:"",unitNames:"",categoryName:"",categoryIds:[],unitIds:[],validation:new k}},watch:{reportType(){const l=this.options.filter(r=>r.value===this.reportType);l.length>0?this.reportTypeName=l[0].label:this.reportTypeName=u("N/A")}},methods:{__:u,nsCurrency:v,joinArray:N,async selectReport(){try{const l=await new Promise((r,d)=>{Popup.show(x,{label:u("Report Type"),options:this.options,resolve:r,reject:d})});this.reportType=l,this.loadRelevantReport()}catch{}},async selectUnits(){b.get("/api/units").subscribe({next:async l=>{try{const r=await new Promise((a,o)=>{Popup.show(x,{label:u("Select Units"),type:"multiselect",options:l.map(e=>({label:e.name,value:e.id})),resolve:a,reject:o})}),d=l.filter(a=>r.includes(a.id)).map(a=>a.name);this.unitNames=this.joinArray(d),this.unitIds=r,this.loadRelevantReport()}catch(r){console.log(r)}},error:l=>{m.error(u("An error has occured while loading the units.")).subscribe()}})},async selectCategories(){b.get("/api/categories").subscribe({next:async l=>{try{const r=await new Promise((a,o)=>{Popup.show(x,{label:u("Select Categories"),type:"multiselect",options:l.map(e=>({label:e.name,value:e.id})),resolve:a,reject:o})}),d=l.filter(a=>r.includes(a.id)).map(a=>a.name);this.categoryName=this.joinArray(d),this.categoryIds=r,this.loadRelevantReport()}catch(r){console.log(r)}},error:l=>{m.error(u("An error has occured while loading the categories.")).subscribe()}})},loadRelevantReport(){switch(this.reportType){case"stock_report":this.loadStockReport();break;case"low_stock":this.loadReport();break}},printSaleReport(){this.$htmlToPaper("low-stock-report")},loadStockReport(l=null){b.post(l||"/api/reports/stock-report",{categories:this.categoryIds,units:this.unitIds}).subscribe({next:r=>{this.stockReportResult=r},error:r=>{m.error(r.message).subscribe()}})},totalSum(l,r,d){if(l.data!==void 0){const o=l.data.map(e=>e.unit_quantities).map(e=>{const p=e.map(n=>n[r]*n[d]);return p.length>0?p.reduce((n,_)=>parseFloat(n)+parseFloat(_)):0});if(o.length>0)return o.reduce((e,p)=>parseFloat(e)+parseFloat(p))}return 0},sum(l,r){if(l.data!==void 0){const a=l.data.map(o=>o.unit_quantities).map(o=>{const e=o.map(p=>p[r]);return e.length>0?e.reduce((p,n)=>parseFloat(p)+parseFloat(n)):0});if(a.length>0)return a.reduce((o,e)=>parseFloat(o)+parseFloat(e))}return 0},loadReport(){b.post("/api/reports/low-stock",{categories:this.categoryIds,units:this.unitIds}).subscribe({next:l=>{this.products=l},error:l=>{m.error(l.message).subscribe()}})}}},F={id:"report-section",class:"px-4"},q={class:"flex -mx-2"},A={class:"px-2"},I={class:"ns-button"},L=t("i",{class:"las la-sync-alt text-xl"},null,-1),U={class:"pl-2"},B={class:"px-2"},D={class:"ns-button"},V=t("i",{class:"las la-print text-xl"},null,-1),E={class:"pl-2"},H={class:"px-2"},z={class:"ns-button"},G=t("i",{class:"las la-filter text-xl"},null,-1),J={class:"pl-2"},K={class:"px-2"},M={class:"ns-button"},O=t("i",{class:"las la-filter text-xl"},null,-1),W={class:"pl-2"},X={class:"px-2"},Y={class:"ns-button"},Z=t("i",{class:"las la-filter text-xl"},null,-1),Q={class:"pl-2"},$={id:"low-stock-report",class:"anim-duration-500 fade-in-entrance"},tt={class:"flex w-full"},et={class:"my-4 flex justify-between w-full"},st={class:"text-primary"},rt={class:"pb-1 border-b border-dashed"},ot={class:"pb-1 border-b border-dashed"},lt={class:"pb-1 border-b border-dashed"},nt=["src","alt"],at={class:"text-primary shadow rounded my-4"},ct={class:"ns-box"},it={key:0,class:"ns-box-body"},dt={class:"table ns-table w-full"},pt={class:"border p-2 text-left"},_t={class:"border p-2 text-left"},ut={width:"150",class:"border p-2 text-right"},ht={width:"150",class:"border border-info-secondary bg-info-primary p-2 text-right"},bt={width:"150",class:"border border-success-secondary bg-success-primary p-2 text-right"},mt={key:0},yt={colspan:"4",class:"p-2 border text-center"},xt={class:"p-2 border"},ft={class:"p-2 border"},gt={class:"p-2 border text-right"},kt={class:"p-2 border text-right"},wt={class:"p-2 border border-success-secondary bg-success-primary text-right"},Rt={key:1,class:"ns-box-body"},vt={class:"table ns-table w-full"},Tt={class:"border p-2 text-left"},Nt={class:"border p-2 text-left"},Ct={width:"150",class:"border p-2 text-right"},Pt={width:"150",class:"border p-2 text-right"},St={width:"150",class:"border p-2 text-right"},jt={key:0},Ft={colspan:"5",class:"p-2 border text-center"},qt={class:"p-2 border"},At={class:"flex flex-col"},It={class:"p-2 border"},Lt={class:"p-2 border text-right"},Ut={class:"p-2 border text-right"},Bt={class:"p-2 border text-right"},Dt=t("td",{class:"p-2 border"},null,-1),Vt=t("td",{class:"p-2 border"},null,-1),Et=t("td",{class:"p-2 border"},null,-1),Ht={class:"p-2 border text-right"},zt={class:"p-2 border text-right"},Gt={key:0,class:"flex justify-end p-2"};function Jt(l,r,d,a,o,e){const p=P("ns-paginate");return c(),i("div",F,[t("div",q,[t("div",A,[t("div",I,[t("button",{onClick:r[0]||(r[0]=n=>e.loadRelevantReport()),class:"rounded flex justify-between shadow py-1 items-center px-2"},[L,t("span",U,s(e.__("Load")),1)])])]),t("div",B,[t("div",D,[t("button",{onClick:r[1]||(r[1]=n=>e.printSaleReport()),class:"rounded flex justify-between shadow py-1 items-center px-2"},[V,t("span",E,s(e.__("Print")),1)])])]),t("div",H,[t("div",z,[t("button",{onClick:r[2]||(r[2]=n=>e.selectReport()),class:"rounded flex justify-between shadow py-1 items-center px-2"},[G,t("span",J,s(e.__("Report Type"))+" : "+s(o.reportTypeName),1)])])]),t("div",K,[t("div",M,[t("button",{onClick:r[3]||(r[3]=n=>e.selectCategories()),class:"rounded flex justify-between shadow py-1 items-center px-2"},[O,t("span",W,s(e.__("Categories"))+" : "+s(o.categoryName||e.__("All Categories")),1)])])]),t("div",X,[t("div",Y,[t("button",{onClick:r[4]||(r[4]=n=>e.selectUnits()),class:"rounded flex justify-between shadow py-1 items-center px-2"},[Z,t("span",Q,s(e.__("Units"))+" : "+s(o.unitNames||e.__("All Units")),1)])])])]),t("div",$,[t("div",tt,[t("div",et,[t("div",st,[t("ul",null,[t("li",rt,s(e.__("Date : {date}").replace("{date}",o.ns.date.current)),1),t("li",ot,s(e.__("Document : {reportTypeName}").replace("{reportTypeName}",o.reportTypeName)),1),t("li",lt,s(e.__("By : {user}").replace("{user}",o.ns.user.username)),1)])]),t("div",null,[t("img",{class:"w-24",src:d.storeLogo,alt:d.storeName},null,8,nt)])])]),t("div",at,[t("div",ct,[o.reportType==="low_stock"?(c(),i("div",it,[t("table",dt,[t("thead",null,[t("tr",null,[t("th",pt,s(e.__("Product")),1),t("th",_t,s(e.__("Unit")),1),t("th",ut,s(e.__("Threshold")),1),t("th",ht,s(e.__("Quantity")),1),t("th",bt,s(e.__("Price")),1)])]),t("tbody",null,[o.products.length===0?(c(),i("tr",mt,[t("td",yt,[t("span",null,s(e.__("There is no product to display...")),1)])])):h("",!0),(c(!0),i(y,null,f(o.products,(n,_)=>(c(),i("tr",{key:_,class:"text-sm"},[t("td",xt,s(n.product.name),1),t("td",ft,s(n.unit.name),1),t("td",gt,s(n.low_quantity),1),t("td",kt,s(n.quantity),1),t("td",wt,s(e.nsCurrency(n.quantity*n.sale_price)),1)]))),128))])])])):h("",!0),o.reportType==="stock_report"?(c(),i("div",Rt,[t("table",vt,[t("thead",null,[t("tr",null,[t("th",Tt,s(e.__("Product")),1),t("th",Nt,s(e.__("Unit")),1),t("th",Ct,s(e.__("Price")),1),t("th",Pt,s(e.__("Quantity")),1),t("th",St,s(e.__("Total Price")),1)])]),t("tbody",null,[o.stockReportResult.data===void 0||o.stockReportResult.data.length===0?(c(),i("tr",jt,[t("td",Ft,[t("span",null,s(e.__("There is no product to display...")),1)])])):h("",!0),o.stockReportResult.data!==void 0?(c(!0),i(y,{key:1},f(o.stockReportResult.data,n=>(c(),i(y,null,[(c(!0),i(y,null,f(n.unit_quantities,(_,g)=>(c(),i("tr",{key:g,class:"text-sm"},[t("td",qt,[t("div",At,[t("span",null,s(n.name),1)])]),t("td",It,s(_.unit.name),1),t("td",Lt,s(e.nsCurrency(_.sale_price)),1),t("td",Ut,s(_.quantity),1),t("td",Bt,s(e.nsCurrency(_.quantity*_.sale_price)),1)]))),128))],64))),256)):h("",!0)]),t("tfoot",null,[t("tr",null,[Dt,Vt,Et,t("td",Ht,s(e.sum(o.stockReportResult,"quantity")),1),t("td",zt,s(e.nsCurrency(e.totalSum(o.stockReportResult,"sale_price","quantity"))),1)])])]),o.stockReportResult.data?(c(),i("div",Gt,[S(p,{onLoad:r[5]||(r[5]=n=>e.loadStockReport(n)),pagination:o.stockReportResult},null,8,["pagination"])])):h("",!0)])):h("",!0)])])])])}const se=C(j,[["render",Jt]]);export{se as default}; diff --git a/public/build/assets/ns-low-stock-report-D5tJitwG.js b/public/build/assets/ns-low-stock-report-D5tJitwG.js new file mode 100644 index 000000000..3e3218c96 --- /dev/null +++ b/public/build/assets/ns-low-stock-report-D5tJitwG.js @@ -0,0 +1 @@ +import{F as w,a as b,b as m}from"./bootstrap-Bpe5LRJd.js";import{c as k,e as R}from"./components-RJC2qWGQ.js";import{_ as u,n as v}from"./currency-lOMYG1Wf.js";import{k as T,b as x}from"./ns-prompt-popup-C2dK5WQb.js";import{j as N}from"./join-array-DPKtuOQJ.js";import{_ as C}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as P,o as c,c as i,a as e,t as s,e as h,F as y,b as f,f as S}from"./runtime-core.esm-bundler-RT2b-_3S.js";import"./ns-alert-popup-SVrn5Xft.js";import"./ns-avatar-image-CAD6xUGA.js";import"./index.es-Br67aBEV.js";const F={name:"ns-low-stock-report",props:["storeLogo","storeName"],mounted(){this.reportType=this.options[0].value,this.loadRelevantReport()},components:{nsDatepicker:k,nsDateTimePicker:R,nsPaginate:T},data(){return{ns:window.ns,products:[],options:[{label:u("Stock Report"),value:"stock_report"},{label:u("Low Stock Report"),value:"low_stock"}],stockReportResult:{},reportType:"",reportTypeName:"",unitNames:"",categoryName:"",categoryIds:[],unitIds:[],validation:new w}},watch:{reportType(){const l=this.options.filter(r=>r.value===this.reportType);l.length>0?this.reportTypeName=l[0].label:this.reportTypeName=u("N/A")}},methods:{__:u,nsCurrency:v,joinArray:N,async selectReport(){try{const l=await new Promise((r,d)=>{Popup.show(x,{label:u("Report Type"),options:this.options,resolve:r,reject:d})});this.reportType=l,this.loadRelevantReport()}catch{}},async selectUnits(){b.get("/api/units").subscribe({next:async l=>{try{const r=await new Promise((a,o)=>{Popup.show(x,{label:u("Select Units"),type:"multiselect",options:l.map(t=>({label:t.name,value:t.id})),resolve:a,reject:o})}),d=l.filter(a=>r.includes(a.id)).map(a=>a.name);this.unitNames=this.joinArray(d),this.unitIds=r,this.loadRelevantReport()}catch(r){console.log(r)}},error:l=>{m.error(u("An error has occured while loading the units.")).subscribe()}})},async selectCategories(){b.get("/api/categories").subscribe({next:async l=>{try{const r=await new Promise((a,o)=>{Popup.show(x,{label:u("Select Categories"),type:"multiselect",options:l.map(t=>({label:t.name,value:t.id})),resolve:a,reject:o})}),d=l.filter(a=>r.includes(a.id)).map(a=>a.name);this.categoryName=this.joinArray(d),this.categoryIds=r,this.loadRelevantReport()}catch(r){console.log(r)}},error:l=>{m.error(u("An error has occured while loading the categories.")).subscribe()}})},loadRelevantReport(){switch(this.reportType){case"stock_report":this.loadStockReport();break;case"low_stock":this.loadReport();break}},printSaleReport(){this.$htmlToPaper("low-stock-report")},loadStockReport(l=null){b.post(l||"/api/reports/stock-report",{categories:this.categoryIds,units:this.unitIds}).subscribe({next:r=>{this.stockReportResult=r},error:r=>{m.error(r.message).subscribe()}})},totalSum(l,r,d){if(l.data!==void 0){const o=l.data.map(t=>t.unit_quantities).map(t=>{const p=t.map(n=>n[r]*n[d]);return p.length>0?p.reduce((n,_)=>parseFloat(n)+parseFloat(_)):0});if(o.length>0)return o.reduce((t,p)=>parseFloat(t)+parseFloat(p))}return 0},sum(l,r){if(l.data!==void 0){const a=l.data.map(o=>o.unit_quantities).map(o=>{const t=o.map(p=>p[r]);return t.length>0?t.reduce((p,n)=>parseFloat(p)+parseFloat(n)):0});if(a.length>0)return a.reduce((o,t)=>parseFloat(o)+parseFloat(t))}return 0},loadReport(){b.post("/api/reports/low-stock",{categories:this.categoryIds,units:this.unitIds}).subscribe({next:l=>{this.products=l},error:l=>{m.error(l.message).subscribe()}})}}},j={id:"report-section",class:"px-4"},q={class:"flex -mx-2"},A={class:"px-2"},I={class:"ns-button"},L=e("i",{class:"las la-sync-alt text-xl"},null,-1),U={class:"pl-2"},B={class:"px-2"},D={class:"ns-button"},V=e("i",{class:"las la-print text-xl"},null,-1),E={class:"pl-2"},H={class:"px-2"},z={class:"ns-button"},G=e("i",{class:"las la-filter text-xl"},null,-1),J={class:"pl-2"},K={class:"px-2"},M={class:"ns-button"},O=e("i",{class:"las la-filter text-xl"},null,-1),W={class:"pl-2"},X={class:"px-2"},Y={class:"ns-button"},Z=e("i",{class:"las la-filter text-xl"},null,-1),Q={class:"pl-2"},$={id:"low-stock-report",class:"anim-duration-500 fade-in-entrance"},ee={class:"flex w-full"},te={class:"my-4 flex justify-between w-full"},se={class:"text-primary"},re={class:"pb-1 border-b border-dashed"},oe={class:"pb-1 border-b border-dashed"},le={class:"pb-1 border-b border-dashed"},ne=["src","alt"],ae={class:"text-primary shadow rounded my-4"},ce={class:"ns-box"},ie={key:0,class:"ns-box-body"},de={class:"table ns-table w-full"},pe={class:"border p-2 text-left"},_e={class:"border p-2 text-left"},ue={width:"150",class:"border p-2 text-right"},he={width:"150",class:"border border-info-secondary bg-info-primary p-2 text-right"},be={width:"150",class:"border border-success-secondary bg-success-primary p-2 text-right"},me={key:0},ye={colspan:"4",class:"p-2 border text-center"},xe={class:"p-2 border"},fe={class:"p-2 border"},ge={class:"p-2 border text-right"},we={class:"p-2 border text-right"},ke={class:"p-2 border border-success-secondary bg-success-primary text-right"},Re={key:1,class:"ns-box-body"},ve={class:"table ns-table w-full"},Te={class:"border p-2 text-left"},Ne={class:"border p-2 text-left"},Ce={width:"150",class:"border p-2 text-right"},Pe={width:"150",class:"border p-2 text-right"},Se={width:"150",class:"border p-2 text-right"},Fe={key:0},je={colspan:"5",class:"p-2 border text-center"},qe={class:"p-2 border"},Ae={class:"flex flex-col"},Ie={class:"p-2 border"},Le={class:"p-2 border text-right"},Ue={class:"p-2 border text-right"},Be={class:"p-2 border text-right"},De=e("td",{class:"p-2 border"},null,-1),Ve=e("td",{class:"p-2 border"},null,-1),Ee=e("td",{class:"p-2 border"},null,-1),He={class:"p-2 border text-right"},ze={class:"p-2 border text-right"},Ge={key:0,class:"flex justify-end p-2"};function Je(l,r,d,a,o,t){const p=P("ns-paginate");return c(),i("div",j,[e("div",q,[e("div",A,[e("div",I,[e("button",{onClick:r[0]||(r[0]=n=>t.loadRelevantReport()),class:"rounded flex justify-between shadow py-1 items-center px-2"},[L,e("span",U,s(t.__("Load")),1)])])]),e("div",B,[e("div",D,[e("button",{onClick:r[1]||(r[1]=n=>t.printSaleReport()),class:"rounded flex justify-between shadow py-1 items-center px-2"},[V,e("span",E,s(t.__("Print")),1)])])]),e("div",H,[e("div",z,[e("button",{onClick:r[2]||(r[2]=n=>t.selectReport()),class:"rounded flex justify-between shadow py-1 items-center px-2"},[G,e("span",J,s(t.__("Report Type"))+" : "+s(o.reportTypeName),1)])])]),e("div",K,[e("div",M,[e("button",{onClick:r[3]||(r[3]=n=>t.selectCategories()),class:"rounded flex justify-between shadow py-1 items-center px-2"},[O,e("span",W,s(t.__("Categories"))+" : "+s(o.categoryName||t.__("All Categories")),1)])])]),e("div",X,[e("div",Y,[e("button",{onClick:r[4]||(r[4]=n=>t.selectUnits()),class:"rounded flex justify-between shadow py-1 items-center px-2"},[Z,e("span",Q,s(t.__("Units"))+" : "+s(o.unitNames||t.__("All Units")),1)])])])]),e("div",$,[e("div",ee,[e("div",te,[e("div",se,[e("ul",null,[e("li",re,s(t.__("Date : {date}").replace("{date}",o.ns.date.current)),1),e("li",oe,s(t.__("Document : {reportTypeName}").replace("{reportTypeName}",o.reportTypeName)),1),e("li",le,s(t.__("By : {user}").replace("{user}",o.ns.user.username)),1)])]),e("div",null,[e("img",{class:"w-24",src:d.storeLogo,alt:d.storeName},null,8,ne)])])]),e("div",ae,[e("div",ce,[o.reportType==="low_stock"?(c(),i("div",ie,[e("table",de,[e("thead",null,[e("tr",null,[e("th",pe,s(t.__("Product")),1),e("th",_e,s(t.__("Unit")),1),e("th",ue,s(t.__("Threshold")),1),e("th",he,s(t.__("Quantity")),1),e("th",be,s(t.__("Price")),1)])]),e("tbody",null,[o.products.length===0?(c(),i("tr",me,[e("td",ye,[e("span",null,s(t.__("There is no product to display...")),1)])])):h("",!0),(c(!0),i(y,null,f(o.products,(n,_)=>(c(),i("tr",{key:_,class:"text-sm"},[e("td",xe,s(n.product.name),1),e("td",fe,s(n.unit.name),1),e("td",ge,s(n.low_quantity),1),e("td",we,s(n.quantity),1),e("td",ke,s(t.nsCurrency(n.quantity*n.sale_price)),1)]))),128))])])])):h("",!0),o.reportType==="stock_report"?(c(),i("div",Re,[e("table",ve,[e("thead",null,[e("tr",null,[e("th",Te,s(t.__("Product")),1),e("th",Ne,s(t.__("Unit")),1),e("th",Ce,s(t.__("Price")),1),e("th",Pe,s(t.__("Quantity")),1),e("th",Se,s(t.__("Total Price")),1)])]),e("tbody",null,[o.stockReportResult.data===void 0||o.stockReportResult.data.length===0?(c(),i("tr",Fe,[e("td",je,[e("span",null,s(t.__("There is no product to display...")),1)])])):h("",!0),o.stockReportResult.data!==void 0?(c(!0),i(y,{key:1},f(o.stockReportResult.data,n=>(c(),i(y,null,[(c(!0),i(y,null,f(n.unit_quantities,(_,g)=>(c(),i("tr",{key:g,class:"text-sm"},[e("td",qe,[e("div",Ae,[e("span",null,s(n.name),1)])]),e("td",Ie,s(_.unit.name),1),e("td",Le,s(t.nsCurrency(_.sale_price)),1),e("td",Ue,s(_.quantity),1),e("td",Be,s(t.nsCurrency(_.quantity*_.sale_price)),1)]))),128))],64))),256)):h("",!0)]),e("tfoot",null,[e("tr",null,[De,Ve,Ee,e("td",He,s(t.sum(o.stockReportResult,"quantity")),1),e("td",ze,s(t.nsCurrency(t.totalSum(o.stockReportResult,"sale_price","quantity"))),1)])])]),o.stockReportResult.data?(c(),i("div",Ge,[S(p,{onLoad:r[5]||(r[5]=n=>t.loadStockReport(n)),pagination:o.stockReportResult},null,8,["pagination"])])):h("",!0)])):h("",!0)])])])])}const tt=C(F,[["render",Je]]);export{tt as default}; diff --git a/public/build/assets/ns-new-password-B-X7fgtm.js b/public/build/assets/ns-new-password-B-X7fgtm.js new file mode 100644 index 000000000..5bd83a83e --- /dev/null +++ b/public/build/assets/ns-new-password-B-X7fgtm.js @@ -0,0 +1 @@ +import{_ as o}from"./currency-lOMYG1Wf.js";import{F as v,G as k,a as r,n as h,b as a}from"./bootstrap-Bpe5LRJd.js";import{_ as y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as l,o as e,c as d,a as i,F,b as x,g as p,e as c,f as _,w as S,t as N}from"./runtime-core.esm-bundler-RT2b-_3S.js";const T={name:"ns-login",props:["token","user"],data(){return{fields:[],xXsrfToken:null,validation:new v,isSubitting:!1}},mounted(){k([r.get("/api/fields/ns.new-password"),r.get("/sanctum/csrf-cookie")]).subscribe(t=>{this.fields=this.validation.createFields(t[0]),this.xXsrfToken=r.response.config.headers["X-XSRF-TOKEN"],setTimeout(()=>h.doAction("ns-login-mounted",this),100)},t=>{a.error(t.message||o("An unexpected error occurred."),o("OK"),{duration:0}).subscribe()})},methods:{__:o,submitNewPassword(){if(!this.validation.validateFields(this.fields))return a.error(o("Unable to proceed the form is not valid.")).subscribe();this.validation.disableFields(this.fields),h.applyFilters("ns-new-password-submit",!0)&&(this.isSubitting=!0,r.post(`/auth/new-password/${this.user}/${this.token}`,this.validation.getValue(this.fields),{headers:{"X-XSRF-TOKEN":this.xXsrfToken}}).subscribe(s=>{a.success(s.message).subscribe(),setTimeout(()=>{document.location=s.data.redirectTo},500)},s=>{this.isSubitting=!1,this.validation.enableFields(this.fields),s.data&&this.validation.triggerFieldsErrors(this.fields,s.data),a.error(s.message).subscribe()}))}}},V={class:"bg-white rounded shadow overflow-hidden transition-all duration-100"},X={class:"p-3 -my-2"},B={key:0,class:"py-2 fade-in-entrance anim-duration-300"},C={key:0,class:"flex items-center justify-center py-10"},E={class:"flex justify-between items-center bg-gray-200 p-3"},P=i("div",null,null,-1);function j(t,s,K,O,n,u){const b=l("ns-field"),f=l("ns-spinner"),g=l("ns-button");return e(),d("div",V,[i("div",X,[n.fields.length>0?(e(),d("div",B,[(e(!0),d(F,null,x(n.fields,(m,w)=>(e(),p(b,{key:w,field:m},null,8,["field"]))),128))])):c("",!0)]),n.fields.length===0?(e(),d("div",C,[_(f,{border:"4",size:"16"})])):c("",!0),i("div",E,[i("div",null,[_(g,{onClick:s[0]||(s[0]=m=>u.submitNewPassword()),class:"justify-between",type:"info"},{default:S(()=>[n.isSubitting?(e(),p(f,{key:0,class:"mr-2",size:"6",border:"2"})):c("",!0),i("span",null,N(u.__("Save Password")),1)]),_:1})]),P])])}const D=y(T,[["render",j]]);export{D as default}; diff --git a/public/build/assets/ns-new-password-D4rAUp2J.js b/public/build/assets/ns-new-password-D4rAUp2J.js deleted file mode 100644 index 95fbb01f7..000000000 --- a/public/build/assets/ns-new-password-D4rAUp2J.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as o}from"./currency-ZXKMLAC0.js";import{k as v,Z as k}from"./tax-BACo6kIE.js";import{a as r,n as h,b as a}from"./bootstrap-B7E2wy_a.js";import{_ as y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as l,o as e,c as d,b as i,F,e as x,h as p,f as c,g as _,w as S,t as N}from"./runtime-core.esm-bundler-DCfIpxDt.js";const T={name:"ns-login",props:["token","user"],data(){return{fields:[],xXsrfToken:null,validation:new v,isSubitting:!1}},mounted(){k([r.get("/api/fields/ns.new-password"),r.get("/sanctum/csrf-cookie")]).subscribe(t=>{this.fields=this.validation.createFields(t[0]),this.xXsrfToken=r.response.config.headers["X-XSRF-TOKEN"],setTimeout(()=>h.doAction("ns-login-mounted",this),100)},t=>{a.error(t.message||o("An unexpected error occurred."),o("OK"),{duration:0}).subscribe()})},methods:{__:o,submitNewPassword(){if(!this.validation.validateFields(this.fields))return a.error(o("Unable to proceed the form is not valid.")).subscribe();this.validation.disableFields(this.fields),h.applyFilters("ns-new-password-submit",!0)&&(this.isSubitting=!0,r.post(`/auth/new-password/${this.user}/${this.token}`,this.validation.getValue(this.fields),{headers:{"X-XSRF-TOKEN":this.xXsrfToken}}).subscribe(s=>{a.success(s.message).subscribe(),setTimeout(()=>{document.location=s.data.redirectTo},500)},s=>{this.isSubitting=!1,this.validation.enableFields(this.fields),s.data&&this.validation.triggerFieldsErrors(this.fields,s.data),a.error(s.message).subscribe()}))}}},V={class:"bg-white rounded shadow overflow-hidden transition-all duration-100"},X={class:"p-3 -my-2"},B={key:0,class:"py-2 fade-in-entrance anim-duration-300"},C={key:0,class:"flex items-center justify-center py-10"},E={class:"flex justify-between items-center bg-gray-200 p-3"},P=i("div",null,null,-1);function j(t,s,K,O,n,u){const b=l("ns-field"),f=l("ns-spinner"),g=l("ns-button");return e(),d("div",V,[i("div",X,[n.fields.length>0?(e(),d("div",B,[(e(!0),d(F,null,x(n.fields,(m,w)=>(e(),p(b,{key:w,field:m},null,8,["field"]))),128))])):c("",!0)]),n.fields.length===0?(e(),d("div",C,[_(f,{border:"4",size:"16"})])):c("",!0),i("div",E,[i("div",null,[_(g,{onClick:s[0]||(s[0]=m=>u.submitNewPassword()),class:"justify-between",type:"info"},{default:S(()=>[n.isSubitting?(e(),p(f,{key:0,class:"mr-2",size:"6",border:"2"})):c("",!0),i("span",null,N(u.__("Save Password")),1)]),_:1})]),P])])}const J=y(T,[["render",j]]);export{J as default}; diff --git a/public/build/assets/ns-notifications-DqqN-z9s.js b/public/build/assets/ns-notifications-DqqN-z9s.js deleted file mode 100644 index 378acfe8f..000000000 --- a/public/build/assets/ns-notifications-DqqN-z9s.js +++ /dev/null @@ -1 +0,0 @@ -import{a as d,b as _}from"./bootstrap-B7E2wy_a.js";import{_ as f,e as p}from"./currency-ZXKMLAC0.js";import{n as v}from"./ns-prompt-popup-BbWKrSku.js";import{h as b}from"./components-CSb5I62o.js";import{t as x}from"./tax-BACo6kIE.js";import{_ as g}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as k,o as c,c as r,b as t,t as a,f as u,n as y,F as w,e as N,g as C}from"./runtime-core.esm-bundler-DCfIpxDt.js";import"./ns-alert-popup-DDoxXsJC.js";import"./ns-avatar-image-C_oqdj76.js";import"./index.es-BED_8l8F.js";const E={name:"ns-notifications",data(){return{notifications:[],visible:!1,interval:null}},components:{nsCloseButton:b},mounted(){document.addEventListener("click",this.checkClickedItem),ns.websocket.enabled?Echo.private("ns.private-channel").listen("App\\Events\\NotificationDispatchedEvent",e=>{this.pushNotificationIfNew(e.notification)}).listen("App\\Events\\NotificationDeletedEvent",e=>{this.deleteNotificationIfExists(e.notification)}):this.interval=setInterval(()=>{this.loadNotifications()},15e3),this.loadNotifications()},unmounted(){clearInterval(this.interval)},methods:{__:f,timespan:x,nsNumberAbbreviate:p,pushNotificationIfNew(e){this.notifications.filter(s=>s.id===e.id).length>0||this.notifications.push(e)},deleteNotificationIfExists(e){const i=this.notifications.filter(s=>s.id===e.id);if(i.length>0){const s=this.notifications.indexOf(i[0]);this.notifications.splice(s,1)}},deleteAll(){Popup.show(v,{title:f("Confirm Your Action"),message:f("Would you like to clear all the notifications ?"),onAction:e=>{e&&d.delete("/api/notifications/all").subscribe(i=>{_.success(i.message).subscribe()})}})},checkClickedItem(e){let i;document.getElementById("notification-center")?i=document.getElementById("notification-center").contains(e.srcElement):i=!1;const s=document.getElementById("notification-button").contains(e.srcElement);!i&&!s&&this.visible&&(this.visible=!1)},loadNotifications(){d.get("/api/notifications").subscribe(e=>{this.notifications=e})},triggerLink(e){if(e.url!=="url")return window.open(e.url,"_blank")},closeNotice(e,i){d.delete(`/api/notifications/${i.id}`).subscribe(s=>{this.loadNotifications()}),e.stopPropagation()}}},I={id:"notificaton-wrapper"},A={key:0,class:"relative float-right"},B={class:"absolute -ml-6 -mt-8"},j={class:"bg-info-tertiary text-white w-8 h-8 rounded-full text-xs flex items-center justify-center"},L=t("i",{class:"las la-bell"},null,-1),P={key:0,class:"h-0 w-0",id:"notification-center"},V={class:"absolute left-0 top-0 sm:relative w-screen zoom-out-entrance anim-duration-300 h-5/7-screen sm:w-64 sm:h-108 flex flex-row-reverse"},z={class:"z-50 sm:rounded-lg shadow-lg h-full w-full md:mt-2 overflow-y-hidden flex flex-col"},D=t("h3",{class:"font-semibold hover:text-info-primary"},"Close",-1),F=[D],S={class:"overflow-y-auto flex flex-col flex-auto"},H=["onClick"],O={class:"flex items-center justify-between"},W={class:"font-semibold"},Y={class:"py-1 text-sm"},q={class:"flex justify-end"},G={class:"text-xs date"},J={key:0,class:"h-full w-full flex items-center justify-center"},K={class:"flex flex-col items-center"},M=t("i",{class:"las la-laugh-wink text-5xl text-primary"},null,-1),Q={class:"text-secondary text-sm"},R={class:"cursor-pointer clear-all"};function T(e,i,s,U,o,l){const h=k("ns-close-button");return c(),r("div",I,[t("div",{id:"notification-button",onClick:i[0]||(i[0]=n=>o.visible=!o.visible),class:y([o.visible?"panel-visible border-0 shadow-lg":"border panel-hidden","hover:shadow-lg hover:border-opacity-0 rounded-full h-12 w-12 cursor-pointer font-bold text-2xl justify-center items-center flex"])},[o.notifications.length>0?(c(),r("div",A,[t("div",B,[t("div",j,a(l.nsNumberAbbreviate(o.notifications.length,"abbreviate")),1)])])):u("",!0),L],2),o.visible?(c(),r("div",P,[t("div",V,[t("div",z,[t("div",{onClick:i[1]||(i[1]=n=>o.visible=!1),class:"sm:hidden p-2 cursor-pointer flex items-center justify-center border-b border-gray-200"},F),t("div",S,[(c(!0),r(w,null,N(o.notifications,n=>(c(),r("div",{key:n.id,class:"notification-card notice border-b"},[t("div",{class:"p-2 cursor-pointer",onClick:m=>l.triggerLink(n)},[t("div",O,[t("h1",W,a(n.title),1),C(h,{onClick:m=>l.closeNotice(m,n)},null,8,["onClick"])]),t("p",Y,a(n.description),1),t("div",q,[t("span",G,a(l.timespan(n.updated_at)),1)])],8,H)]))),128)),o.notifications.length===0?(c(),r("div",J,[t("div",K,[M,t("p",Q,a(l.__("Nothing to care about !")),1)])])):u("",!0)]),t("div",R,[t("h3",{onClick:i[2]||(i[2]=n=>l.deleteAll()),class:"text-sm p-2 flex items-center justify-center w-full font-semibold"},a(l.__("Clear All")),1)])])])])):u("",!0)])}const ce=g(E,[["render",T]]);export{ce as default}; diff --git a/public/build/assets/ns-notifications-q9UGQ4HE.js b/public/build/assets/ns-notifications-q9UGQ4HE.js new file mode 100644 index 000000000..792699906 --- /dev/null +++ b/public/build/assets/ns-notifications-q9UGQ4HE.js @@ -0,0 +1 @@ +import{H as _,a as d,b as p}from"./bootstrap-Bpe5LRJd.js";import{_ as f,d as v}from"./currency-lOMYG1Wf.js";import{n as b}from"./ns-prompt-popup-C2dK5WQb.js";import{h as x}from"./components-RJC2qWGQ.js";import{_ as g}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as k,o as c,c as r,a as t,t as a,e as u,n as y,F as w,b as N,f as C}from"./runtime-core.esm-bundler-RT2b-_3S.js";import"./ns-alert-popup-SVrn5Xft.js";import"./ns-avatar-image-CAD6xUGA.js";import"./index.es-Br67aBEV.js";const E={name:"ns-notifications",data(){return{notifications:[],visible:!1,interval:null}},components:{nsCloseButton:x},mounted(){document.addEventListener("click",this.checkClickedItem),ns.websocket.enabled?Echo.private("ns.private-channel").listen("App\\Events\\NotificationDispatchedEvent",e=>{this.pushNotificationIfNew(e.notification)}).listen("App\\Events\\NotificationDeletedEvent",e=>{this.deleteNotificationIfExists(e.notification)}):this.interval=setInterval(()=>{this.loadNotifications()},15e3),this.loadNotifications()},unmounted(){clearInterval(this.interval)},methods:{__:f,timespan:_,nsNumberAbbreviate:v,pushNotificationIfNew(e){this.notifications.filter(s=>s.id===e.id).length>0||this.notifications.push(e)},deleteNotificationIfExists(e){const i=this.notifications.filter(s=>s.id===e.id);if(i.length>0){const s=this.notifications.indexOf(i[0]);this.notifications.splice(s,1)}},deleteAll(){Popup.show(b,{title:f("Confirm Your Action"),message:f("Would you like to clear all the notifications ?"),onAction:e=>{e&&d.delete("/api/notifications/all").subscribe(i=>{p.success(i.message).subscribe()})}})},checkClickedItem(e){let i;document.getElementById("notification-center")?i=document.getElementById("notification-center").contains(e.srcElement):i=!1;const s=document.getElementById("notification-button").contains(e.srcElement);!i&&!s&&this.visible&&(this.visible=!1)},loadNotifications(){d.get("/api/notifications").subscribe(e=>{this.notifications=e})},triggerLink(e){if(e.url!=="url")return window.open(e.url,"_blank")},closeNotice(e,i){d.delete(`/api/notifications/${i.id}`).subscribe(s=>{this.loadNotifications()}),e.stopPropagation()}}},I={id:"notificaton-wrapper"},A={key:0,class:"relative float-right"},B={class:"absolute -ml-6 -mt-8"},j={class:"bg-info-tertiary text-white w-8 h-8 rounded-full text-xs flex items-center justify-center"},L=t("i",{class:"las la-bell"},null,-1),P={key:0,class:"h-0 w-0",id:"notification-center"},V={class:"absolute left-0 top-0 sm:relative w-screen zoom-out-entrance anim-duration-300 h-5/7-screen sm:w-64 sm:h-108 flex flex-row-reverse"},z={class:"z-50 sm:rounded-lg shadow-lg h-full w-full md:mt-2 overflow-y-hidden flex flex-col"},D=t("h3",{class:"font-semibold hover:text-info-primary"},"Close",-1),F=[D],H={class:"overflow-y-auto flex flex-col flex-auto"},S=["onClick"],O={class:"flex items-center justify-between"},W={class:"font-semibold"},Y={class:"py-1 text-sm"},q={class:"flex justify-end"},G={class:"text-xs date"},J={key:0,class:"h-full w-full flex items-center justify-center"},K={class:"flex flex-col items-center"},M=t("i",{class:"las la-laugh-wink text-5xl text-primary"},null,-1),Q={class:"text-secondary text-sm"},R={class:"cursor-pointer clear-all"};function T(e,i,s,U,o,l){const m=k("ns-close-button");return c(),r("div",I,[t("div",{id:"notification-button",onClick:i[0]||(i[0]=n=>o.visible=!o.visible),class:y([o.visible?"panel-visible border-0 shadow-lg":"border panel-hidden","hover:shadow-lg hover:border-opacity-0 rounded-full h-12 w-12 cursor-pointer font-bold text-2xl justify-center items-center flex"])},[o.notifications.length>0?(c(),r("div",A,[t("div",B,[t("div",j,a(l.nsNumberAbbreviate(o.notifications.length,"abbreviate")),1)])])):u("",!0),L],2),o.visible?(c(),r("div",P,[t("div",V,[t("div",z,[t("div",{onClick:i[1]||(i[1]=n=>o.visible=!1),class:"sm:hidden p-2 cursor-pointer flex items-center justify-center border-b border-gray-200"},F),t("div",H,[(c(!0),r(w,null,N(o.notifications,n=>(c(),r("div",{key:n.id,class:"notification-card notice border-b"},[t("div",{class:"p-2 cursor-pointer",onClick:h=>l.triggerLink(n)},[t("div",O,[t("h1",W,a(n.title),1),C(m,{onClick:h=>l.closeNotice(h,n)},null,8,["onClick"])]),t("p",Y,a(n.description),1),t("div",q,[t("span",G,a(l.timespan(n.updated_at)),1)])],8,S)]))),128)),o.notifications.length===0?(c(),r("div",J,[t("div",K,[M,t("p",Q,a(l.__("Nothing to care about !")),1)])])):u("",!0)]),t("div",R,[t("h3",{onClick:i[2]||(i[2]=n=>l.deleteAll()),class:"text-sm p-2 flex items-center justify-center w-full font-semibold"},a(l.__("Clear All")),1)])])])])):u("",!0)])}const le=g(E,[["render",T]]);export{le as default}; diff --git a/public/build/assets/ns-order-invoice-7jYsfiOi.js b/public/build/assets/ns-order-invoice-DoMLCmH7.js similarity index 97% rename from public/build/assets/ns-order-invoice-7jYsfiOi.js rename to public/build/assets/ns-order-invoice-DoMLCmH7.js index 2f40ed001..1523dbfc3 100644 --- a/public/build/assets/ns-order-invoice-7jYsfiOi.js +++ b/public/build/assets/ns-order-invoice-DoMLCmH7.js @@ -1 +1 @@ -import{_ as h,n as u}from"./currency-ZXKMLAC0.js";import{_ as y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as m,o as n,c as l,b as t,g as b,w as f,t as e,f as a,F as _,e as c}from"./runtime-core.esm-bundler-DCfIpxDt.js";const p={props:["order","billing","shipping"],methods:{__:h,nsCurrency:u,printTable(){this.$htmlToPaper("invoice-container")}}},v={class:"shadow ns-box"},w={class:"head p-2 ns-box-title flex justify-between border-b"},g={class:"-mx-2 flex flex-wrap"},C={class:"px-2"},k=t("i",{class:"las la-print"},null,-1),j={class:"body flex flex-col px-2",id:"invoice-container"},D={id:"invoice-header",class:"flex -mx-2 flex-wrap"},S={class:"w-full print:w-1/3 md:w-1/3 px-2"},T={class:"p-2"},P={class:"font-semibold text-xl text-primary border-b border-info-primary py-2"},N={class:"details"},B={class:"my-1"},E={class:"flex justify-between text-secondary text-sm mb-1"},I={class:"font-semibold"},V={class:"flex justify-between text-secondary text-sm mb-1"},A={class:"font-semibold"},F={class:"flex justify-between text-secondary text-sm mb-1"},O={class:"font-semibold"},q={class:"flex justify-between text-secondary text-sm mb-1"},L={class:"font-semibold"},Q={class:"flex justify-between text-secondary text-sm mb-1"},U={class:"font-semibold"},z={class:"flex justify-between text-secondary text-sm mb-1"},G={class:"font-semibold"},H={key:0,class:"flex justify-between text-secondary text-sm mb-1"},J={class:"font-semibold"},K={class:"w-full print:w-1/3 md:w-1/3 px-2"},M={class:"p-2"},R={class:"font-semibold text-xl text-primary border-b border-info-primary py-2"},W={class:"details"},X={class:"my-1"},Y={class:"font-semibold"},Z={class:"w-full print:w-1/3 md:w-1/3 px-2"},$={class:"p-2"},tt={class:"font-semibold text-xl text-primary border-b border-info-primary py-2"},et={class:"details"},st={class:"my-1"},rt={class:"font-semibold"},dt={class:"table w-full my-4"},nt={class:"table ns-table w-full"},lt={class:"text-secondary"},at={width:"400",class:"p-2 border"},_t={width:"200",class:"p-2 border"},ct={width:"200",class:"p-2 border"},ot={width:"200",class:"p-2 border"},it={width:"200",class:"p-2 border"},xt={width:"200",class:"p-2 border"},ht={class:"p-2 border"},ut={class:"text-primary"},yt={class:"text-sm text-secondary"},mt={class:"p-2 border text-center text-primary"},bt={class:"p-2 border text-center text-primary"},ft={class:"p-2 border text-center text-primary"},pt={class:"p-2 border text-center text-primary"},vt={class:"p-2 border text-right text-primary"},wt={class:"font-semibold"},gt={class:"p-2 border text-center text-primary",colspan:"2"},Ct={key:0,class:"flex justify-between"},kt=t("td",{class:"p-2 border text-center text-primary",colspan:"2"},null,-1),jt={class:"p-2 border text-primary text-left"},Dt={class:"p-2 border text-right text-primary"},St={key:0},Tt=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),Pt={class:"p-2 border text-primary text-left"},Nt={class:"p-2 border text-right text-primary"},Bt={key:1},Et=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),It={class:"p-2 border text-left text-primary"},Vt={class:"p-2 border text-right text-primary"},At={key:2},Ft=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),Ot={class:"p-2 border text-primary text-left"},qt={class:"p-2 border text-right text-primary"},Lt=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),Qt={class:"p-2 border text-primary text-left"},Ut={class:"p-2 border text-right text-primary"},zt=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),Gt={class:"p-2 border text-primary text-left"},Ht={class:"p-2 border text-right text-primary"},Jt=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),Kt={class:"p-2 border text-primary text-left"},Mt={class:"p-2 border text-right text-primary"},Rt=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),Wt={class:"p-2 border text-primary text-left"},Xt={class:"p-2 border text-right text-primary"},Yt={key:3,class:"error"},Zt=t("td",{class:"p-2 border text-center",colspan:"4"},null,-1),$t={class:"p-2 border text-left"},te={class:"p-2 border text-right"},ee={key:4},se=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),re={class:"p-2 border text-primary text-left"},de={class:"p-2 border text-right text-primary"};function ne(i,o,r,le,ae,s){const x=m("ns-button");return n(),l("div",v,[t("div",w,[t("div",g,[t("div",C,[b(x,{onClick:o[0]||(o[0]=d=>s.printTable()),type:"info"},{default:f(()=>[k,t("span",null,e(s.__("Print")),1)]),_:1})])])]),t("div",j,[t("div",D,[t("div",S,[t("div",T,[t("h3",P,e(s.__("Store Details")),1),t("div",N,[t("ul",B,[t("li",E,[t("span",I,e(s.__("Order Code")),1),t("span",null,e(r.order.code),1)]),t("li",V,[t("span",A,e(s.__("Cashier")),1),t("span",null,e(r.order.user.username),1)]),t("li",F,[t("span",O,e(s.__("Date")),1),t("span",null,e(r.order.created_at),1)]),t("li",q,[t("span",L,e(s.__("Customer")),1),t("span",null,e(r.order.customer.name),1)]),t("li",Q,[t("span",U,e(s.__("Type")),1),t("span",null,e(r.order.type),1)]),t("li",z,[t("span",G,e(s.__("Payment Status")),1),t("span",null,e(r.order.paymentStatus),1)]),r.order.type==="delivery"?(n(),l("li",H,[t("span",J,e(s.__("Delivery Status")),1),t("span",null,e(r.order.deliveryStatus),1)])):a("",!0)])])])]),t("div",K,[t("div",M,[t("h3",R,e(s.__("Billing Details")),1),t("div",W,[t("ul",X,[(n(!0),l(_,null,c(r.billing,d=>(n(),l("li",{key:d.id,class:"flex justify-between text-secondary text-sm mb-1"},[t("span",Y,e(d.label),1),t("span",null,e(r.order.billing_address[d.name]||"N/A"),1)]))),128))])])])]),t("div",Z,[t("div",$,[t("h3",tt,e(s.__("Shipping Details")),1),t("div",et,[t("ul",st,[(n(!0),l(_,null,c(r.shipping,d=>(n(),l("li",{key:d.id,class:"flex justify-between text-secondary text-sm mb-1"},[t("span",rt,e(d.label),1),t("span",null,e(r.order.shipping_address[d.name]||"N/A"),1)]))),128))])])])])]),t("div",dt,[t("table",nt,[t("thead",lt,[t("tr",null,[t("th",at,e(s.__("Product")),1),t("th",_t,e(s.__("Unit Price")),1),t("th",ct,e(s.__("Quantity")),1),t("th",ot,e(s.__("Discount")),1),t("th",it,e(s.__("Tax")),1),t("th",xt,e(s.__("Total Price")),1)])]),t("tbody",null,[(n(!0),l(_,null,c(r.order.products,d=>(n(),l("tr",{key:d.id},[t("td",ht,[t("h3",ut,e(d.name),1),t("span",yt,e(d.unit),1)]),t("td",mt,e(s.nsCurrency(d.unit_price)),1),t("td",bt,e(d.quantity),1),t("td",ft,e(s.nsCurrency(d.discount)),1),t("td",pt,e(s.nsCurrency(d.tax_value)),1),t("td",vt,e(s.nsCurrency(d.total_price)),1)]))),128))]),t("tfoot",wt,[t("tr",null,[t("td",gt,[["unpaid","partially_paid"].includes(r.order.payment_status)?(n(),l("div",Ct,[t("span",null,e(s.__("Expiration Date")),1),t("span",null,e(r.order.final_payment_date),1)])):a("",!0)]),kt,t("td",jt,e(s.__("Sub Total")),1),t("td",Dt,e(s.nsCurrency(r.order.subtotal)),1)]),r.order.discount>0?(n(),l("tr",St,[Tt,t("td",Pt,e(s.__("Discount")),1),t("td",Nt,e(s.nsCurrency(-r.order.discount)),1)])):a("",!0),r.order.total_coupons>0?(n(),l("tr",Bt,[Et,t("td",It,e(s.__("Coupons")),1),t("td",Vt,e(s.nsCurrency(-r.order.total_coupons)),1)])):a("",!0),r.order.shipping>0?(n(),l("tr",At,[Ft,t("td",Ot,e(s.__("Shipping")),1),t("td",qt,e(s.nsCurrency(r.order.shipping)),1)])):a("",!0),(n(!0),l(_,null,c(r.order.taxes,d=>(n(),l("tr",{key:d.id},[Lt,t("td",Qt,e(d.tax_name)+" — "+e(r.order.tax_type==="inclusive"?s.__("Inclusive"):s.__("Exclusive")),1),t("td",Ut,e(s.nsCurrency(r.order.tax_value)),1)]))),128)),(n(!0),l(_,null,c(r.order.taxes,d=>(n(),l("tr",{key:d.id},[zt,t("td",Gt,e(d.tax_name)+" — "+e(r.order.tax_type==="inclusive"?s.__("Inclusive"):s.__("Exclusive")),1),t("td",Ht,e(d.tax_value|i.currency),1)]))),128)),t("tr",null,[Jt,t("td",Kt,e(s.__("Total")),1),t("td",Mt,e(s.nsCurrency(r.order.total)),1)]),t("tr",null,[Rt,t("td",Wt,e(s.__("Paid")),1),t("td",Xt,e(s.nsCurrency(r.order.tendered)),1)]),["partially_paid","unpaid"].includes(r.order.payment_status)?(n(),l("tr",Yt,[Zt,t("td",$t,e(s.__("Due")),1),t("td",te,e(s.nsCurrency(r.order.change)),1)])):(n(),l("tr",ee,[se,t("td",re,e(s.__("Change")),1),t("td",de,e(s.nsCurrency(r.order.change)),1)]))])])])])])}const ie=y(p,[["render",ne]]);export{ie as default}; +import{_ as h,n as u}from"./currency-lOMYG1Wf.js";import{_ as y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as m,o as n,c as l,a as t,f as b,w as f,t as e,e as a,F as _,b as c}from"./runtime-core.esm-bundler-RT2b-_3S.js";const p={props:["order","billing","shipping"],methods:{__:h,nsCurrency:u,printTable(){this.$htmlToPaper("invoice-container")}}},v={class:"shadow ns-box"},w={class:"head p-2 ns-box-title flex justify-between border-b"},g={class:"-mx-2 flex flex-wrap"},C={class:"px-2"},k=t("i",{class:"las la-print"},null,-1),j={class:"body flex flex-col px-2",id:"invoice-container"},D={id:"invoice-header",class:"flex -mx-2 flex-wrap"},S={class:"w-full print:w-1/3 md:w-1/3 px-2"},T={class:"p-2"},P={class:"font-semibold text-xl text-primary border-b border-info-primary py-2"},N={class:"details"},B={class:"my-1"},E={class:"flex justify-between text-secondary text-sm mb-1"},I={class:"font-semibold"},V={class:"flex justify-between text-secondary text-sm mb-1"},A={class:"font-semibold"},F={class:"flex justify-between text-secondary text-sm mb-1"},O={class:"font-semibold"},q={class:"flex justify-between text-secondary text-sm mb-1"},L={class:"font-semibold"},Q={class:"flex justify-between text-secondary text-sm mb-1"},U={class:"font-semibold"},z={class:"flex justify-between text-secondary text-sm mb-1"},G={class:"font-semibold"},H={key:0,class:"flex justify-between text-secondary text-sm mb-1"},J={class:"font-semibold"},K={class:"w-full print:w-1/3 md:w-1/3 px-2"},M={class:"p-2"},R={class:"font-semibold text-xl text-primary border-b border-info-primary py-2"},W={class:"details"},X={class:"my-1"},Y={class:"font-semibold"},Z={class:"w-full print:w-1/3 md:w-1/3 px-2"},$={class:"p-2"},tt={class:"font-semibold text-xl text-primary border-b border-info-primary py-2"},et={class:"details"},st={class:"my-1"},rt={class:"font-semibold"},dt={class:"table w-full my-4"},nt={class:"table ns-table w-full"},lt={class:"text-secondary"},at={width:"400",class:"p-2 border"},_t={width:"200",class:"p-2 border"},ct={width:"200",class:"p-2 border"},ot={width:"200",class:"p-2 border"},it={width:"200",class:"p-2 border"},xt={width:"200",class:"p-2 border"},ht={class:"p-2 border"},ut={class:"text-primary"},yt={class:"text-sm text-secondary"},mt={class:"p-2 border text-center text-primary"},bt={class:"p-2 border text-center text-primary"},ft={class:"p-2 border text-center text-primary"},pt={class:"p-2 border text-center text-primary"},vt={class:"p-2 border text-right text-primary"},wt={class:"font-semibold"},gt={class:"p-2 border text-center text-primary",colspan:"2"},Ct={key:0,class:"flex justify-between"},kt=t("td",{class:"p-2 border text-center text-primary",colspan:"2"},null,-1),jt={class:"p-2 border text-primary text-left"},Dt={class:"p-2 border text-right text-primary"},St={key:0},Tt=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),Pt={class:"p-2 border text-primary text-left"},Nt={class:"p-2 border text-right text-primary"},Bt={key:1},Et=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),It={class:"p-2 border text-left text-primary"},Vt={class:"p-2 border text-right text-primary"},At={key:2},Ft=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),Ot={class:"p-2 border text-primary text-left"},qt={class:"p-2 border text-right text-primary"},Lt=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),Qt={class:"p-2 border text-primary text-left"},Ut={class:"p-2 border text-right text-primary"},zt=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),Gt={class:"p-2 border text-primary text-left"},Ht={class:"p-2 border text-right text-primary"},Jt=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),Kt={class:"p-2 border text-primary text-left"},Mt={class:"p-2 border text-right text-primary"},Rt=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),Wt={class:"p-2 border text-primary text-left"},Xt={class:"p-2 border text-right text-primary"},Yt={key:3,class:"error"},Zt=t("td",{class:"p-2 border text-center",colspan:"4"},null,-1),$t={class:"p-2 border text-left"},te={class:"p-2 border text-right"},ee={key:4},se=t("td",{class:"p-2 border text-center text-primary",colspan:"4"},null,-1),re={class:"p-2 border text-primary text-left"},de={class:"p-2 border text-right text-primary"};function ne(i,o,r,le,ae,s){const x=m("ns-button");return n(),l("div",v,[t("div",w,[t("div",g,[t("div",C,[b(x,{onClick:o[0]||(o[0]=d=>s.printTable()),type:"info"},{default:f(()=>[k,t("span",null,e(s.__("Print")),1)]),_:1})])])]),t("div",j,[t("div",D,[t("div",S,[t("div",T,[t("h3",P,e(s.__("Store Details")),1),t("div",N,[t("ul",B,[t("li",E,[t("span",I,e(s.__("Order Code")),1),t("span",null,e(r.order.code),1)]),t("li",V,[t("span",A,e(s.__("Cashier")),1),t("span",null,e(r.order.user.username),1)]),t("li",F,[t("span",O,e(s.__("Date")),1),t("span",null,e(r.order.created_at),1)]),t("li",q,[t("span",L,e(s.__("Customer")),1),t("span",null,e(r.order.customer.name),1)]),t("li",Q,[t("span",U,e(s.__("Type")),1),t("span",null,e(r.order.type),1)]),t("li",z,[t("span",G,e(s.__("Payment Status")),1),t("span",null,e(r.order.paymentStatus),1)]),r.order.type==="delivery"?(n(),l("li",H,[t("span",J,e(s.__("Delivery Status")),1),t("span",null,e(r.order.deliveryStatus),1)])):a("",!0)])])])]),t("div",K,[t("div",M,[t("h3",R,e(s.__("Billing Details")),1),t("div",W,[t("ul",X,[(n(!0),l(_,null,c(r.billing,d=>(n(),l("li",{key:d.id,class:"flex justify-between text-secondary text-sm mb-1"},[t("span",Y,e(d.label),1),t("span",null,e(r.order.billing_address[d.name]||"N/A"),1)]))),128))])])])]),t("div",Z,[t("div",$,[t("h3",tt,e(s.__("Shipping Details")),1),t("div",et,[t("ul",st,[(n(!0),l(_,null,c(r.shipping,d=>(n(),l("li",{key:d.id,class:"flex justify-between text-secondary text-sm mb-1"},[t("span",rt,e(d.label),1),t("span",null,e(r.order.shipping_address[d.name]||"N/A"),1)]))),128))])])])])]),t("div",dt,[t("table",nt,[t("thead",lt,[t("tr",null,[t("th",at,e(s.__("Product")),1),t("th",_t,e(s.__("Unit Price")),1),t("th",ct,e(s.__("Quantity")),1),t("th",ot,e(s.__("Discount")),1),t("th",it,e(s.__("Tax")),1),t("th",xt,e(s.__("Total Price")),1)])]),t("tbody",null,[(n(!0),l(_,null,c(r.order.products,d=>(n(),l("tr",{key:d.id},[t("td",ht,[t("h3",ut,e(d.name),1),t("span",yt,e(d.unit),1)]),t("td",mt,e(s.nsCurrency(d.unit_price)),1),t("td",bt,e(d.quantity),1),t("td",ft,e(s.nsCurrency(d.discount)),1),t("td",pt,e(s.nsCurrency(d.tax_value)),1),t("td",vt,e(s.nsCurrency(d.total_price)),1)]))),128))]),t("tfoot",wt,[t("tr",null,[t("td",gt,[["unpaid","partially_paid"].includes(r.order.payment_status)?(n(),l("div",Ct,[t("span",null,e(s.__("Expiration Date")),1),t("span",null,e(r.order.final_payment_date),1)])):a("",!0)]),kt,t("td",jt,e(s.__("Sub Total")),1),t("td",Dt,e(s.nsCurrency(r.order.subtotal)),1)]),r.order.discount>0?(n(),l("tr",St,[Tt,t("td",Pt,e(s.__("Discount")),1),t("td",Nt,e(s.nsCurrency(-r.order.discount)),1)])):a("",!0),r.order.total_coupons>0?(n(),l("tr",Bt,[Et,t("td",It,e(s.__("Coupons")),1),t("td",Vt,e(s.nsCurrency(-r.order.total_coupons)),1)])):a("",!0),r.order.shipping>0?(n(),l("tr",At,[Ft,t("td",Ot,e(s.__("Shipping")),1),t("td",qt,e(s.nsCurrency(r.order.shipping)),1)])):a("",!0),(n(!0),l(_,null,c(r.order.taxes,d=>(n(),l("tr",{key:d.id},[Lt,t("td",Qt,e(d.tax_name)+" — "+e(r.order.tax_type==="inclusive"?s.__("Inclusive"):s.__("Exclusive")),1),t("td",Ut,e(s.nsCurrency(r.order.tax_value)),1)]))),128)),(n(!0),l(_,null,c(r.order.taxes,d=>(n(),l("tr",{key:d.id},[zt,t("td",Gt,e(d.tax_name)+" — "+e(r.order.tax_type==="inclusive"?s.__("Inclusive"):s.__("Exclusive")),1),t("td",Ht,e(d.tax_value|i.currency),1)]))),128)),t("tr",null,[Jt,t("td",Kt,e(s.__("Total")),1),t("td",Mt,e(s.nsCurrency(r.order.total)),1)]),t("tr",null,[Rt,t("td",Wt,e(s.__("Paid")),1),t("td",Xt,e(s.nsCurrency(r.order.tendered)),1)]),["partially_paid","unpaid"].includes(r.order.payment_status)?(n(),l("tr",Yt,[Zt,t("td",$t,e(s.__("Due")),1),t("td",te,e(s.nsCurrency(r.order.change)),1)])):(n(),l("tr",ee,[se,t("td",re,e(s.__("Change")),1),t("td",de,e(s.nsCurrency(r.order.change)),1)]))])])])])])}const ie=y(p,[["render",ne]]);export{ie as default}; diff --git a/public/build/assets/ns-orders-chart-CiGpGOKt.js b/public/build/assets/ns-orders-chart-DjpkdzHq.js similarity index 86% rename from public/build/assets/ns-orders-chart-CiGpGOKt.js rename to public/build/assets/ns-orders-chart-DjpkdzHq.js index 349c3630a..48dd52ea1 100644 --- a/public/build/assets/ns-orders-chart-CiGpGOKt.js +++ b/public/build/assets/ns-orders-chart-DjpkdzHq.js @@ -1 +1 @@ -import{_ as i,n as d,b as h}from"./currency-ZXKMLAC0.js";import{_ as x}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as _,o as u,c as f,b as s,t as a,g as p}from"./runtime-core.esm-bundler-DCfIpxDt.js";const m={name:"ns-orders-chart",data(){return{totalWeeklySales:0,totalWeekTaxes:0,totalWeekExpenses:0,totalWeekIncome:0,chartOptions:{theme:{mode:window.ns.theme},chart:{id:"vuechart-example",width:"100%",height:"100%"},stroke:{curve:"smooth",dashArray:[0,8]},xaxis:{categories:[]},colors:["#5f83f3","#AAA"]},series:[{name:i("Current Week"),data:[]},{name:i("Previous Week"),data:[]}],reportSubscription:null,report:null}},components:{},methods:{__:i,nsCurrency:d,nsRawCurrency:h},mounted(){this.reportSubscription=Dashboard.weeksSummary.subscribe(n=>{n.result!==void 0&&(this.chartOptions.xaxis.categories=n.result.map(t=>t.label),this.report=n,this.totalWeeklySales=0,this.totalWeekIncome=0,this.totalWeekExpenses=0,this.totalWeekTaxes=0,this.report.result.forEach((t,c)=>{if(t.current!==void 0){const r=t.current.entries.map(e=>e.day_paid_orders);let o=0;r.length>0&&(o=r.reduce((e,l)=>e+l)),this.totalWeekExpenses+=t.current.entries.map(e=>parseFloat(e.day_expenses)).reduce((e,l)=>e+l),this.totalWeekTaxes+=t.current.entries.map(e=>parseFloat(e.day_taxes)).reduce((e,l)=>e+l),this.totalWeekIncome+=t.current.entries.map(e=>parseFloat(e.day_income)).reduce((e,l)=>e+l),this.series[0].data.push(o)}else this.series[0].data.push(0);if(t.previous!==void 0){const r=t.previous.entries.map(e=>e.day_paid_orders);let o=0;r.length>0&&(o=r.reduce((e,l)=>e+l)),this.series[1].data.push(o)}else this.series[1].data.push(0)}),this.totalWeeklySales=this.series[0].data.reduce((t,c)=>t+c))})}},b={id:"ns-orders-chart",class:"flex flex-auto flex-col shadow ns-box rounded-lg overflow-hidden"},k={class:"p-2 flex ns-box-header items-center justify-between border-b"},y={class:"font-semibold"},v=s("div",{class:"head flex-auto flex h-56"},[s("div",{class:"w-full h-full pt-2"})],-1),w={class:"foot p-2 -mx-4 flex flex-wrap"},g={class:"flex w-full lg:w-full border-b lg:border-t lg:py-1 lg:my-1"},W={class:"px-4 w-1/2 lg:w-1/2 flex flex-col items-center justify-center"},C={class:"text-xs"},S={class:"text-lg xl:text-xl font-bold"},E={class:"px-4 w-1/2 lg:w-1/2 flex flex-col items-center justify-center"},j={class:"text-xs"},I={class:"text-lg xl:text-xl font-bold"},T={class:"flex w-full lg:w-full"},A={class:"px-4 w-full lg:w-1/2 flex flex-col items-center justify-center"},O={class:"text-xs"},B={class:"text-lg xl:text-xl font-bold"},F={class:"px-4 w-full lg:w-1/2 flex flex-col items-center justify-center"},N={class:"text-xs"},R={class:"text-lg xl:text-xl font-bold"};function D(n,t,c,r,o,e){const l=_("ns-close-button");return u(),f("div",b,[s("div",k,[s("h3",y,a(e.__("Recents Orders")),1),s("div",null,[p(l,{onClick:t[0]||(t[0]=V=>n.$emit("onRemove"))})])]),v,s("div",w,[s("div",g,[s("div",W,[s("span",C,a(e.__("Weekly Sales")),1),s("h2",S,a(e.nsCurrency(o.totalWeeklySales,"abbreviate")),1)]),s("div",E,[s("span",j,a(e.__("Week Taxes")),1),s("h2",I,a(e.nsCurrency(o.totalWeekTaxes,"abbreviate")),1)])]),s("div",T,[s("div",A,[s("span",O,a(e.__("Net Income")),1),s("h2",B,a(e.nsCurrency(o.totalWeekIncome,"abbreviate")),1)]),s("div",F,[s("span",N,a(e.__("Week Expenses")),1),s("h2",R,a(e.nsCurrency(o.totalWeekExpenses,"abbreviate")),1)])])])])}const G=x(m,[["render",D]]);export{G as default}; +import{_ as i,n as d,a as h}from"./currency-lOMYG1Wf.js";import{_ as x}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as _,o as f,c as u,a as s,t as a,f as p}from"./runtime-core.esm-bundler-RT2b-_3S.js";const m={name:"ns-orders-chart",data(){return{totalWeeklySales:0,totalWeekTaxes:0,totalWeekExpenses:0,totalWeekIncome:0,chartOptions:{theme:{mode:window.ns.theme},chart:{id:"vuechart-example",width:"100%",height:"100%"},stroke:{curve:"smooth",dashArray:[0,8]},xaxis:{categories:[]},colors:["#5f83f3","#AAA"]},series:[{name:i("Current Week"),data:[]},{name:i("Previous Week"),data:[]}],reportSubscription:null,report:null}},components:{},methods:{__:i,nsCurrency:d,nsRawCurrency:h},mounted(){this.reportSubscription=Dashboard.weeksSummary.subscribe(n=>{n.result!==void 0&&(this.chartOptions.xaxis.categories=n.result.map(t=>t.label),this.report=n,this.totalWeeklySales=0,this.totalWeekIncome=0,this.totalWeekExpenses=0,this.totalWeekTaxes=0,this.report.result.forEach((t,c)=>{if(t.current!==void 0){const r=t.current.entries.map(e=>e.day_paid_orders);let o=0;r.length>0&&(o=r.reduce((e,l)=>e+l)),this.totalWeekExpenses+=t.current.entries.map(e=>parseFloat(e.day_expenses)).reduce((e,l)=>e+l),this.totalWeekTaxes+=t.current.entries.map(e=>parseFloat(e.day_taxes)).reduce((e,l)=>e+l),this.totalWeekIncome+=t.current.entries.map(e=>parseFloat(e.day_income)).reduce((e,l)=>e+l),this.series[0].data.push(o)}else this.series[0].data.push(0);if(t.previous!==void 0){const r=t.previous.entries.map(e=>e.day_paid_orders);let o=0;r.length>0&&(o=r.reduce((e,l)=>e+l)),this.series[1].data.push(o)}else this.series[1].data.push(0)}),this.totalWeeklySales=this.series[0].data.reduce((t,c)=>t+c))})}},b={id:"ns-orders-chart",class:"flex flex-auto flex-col shadow ns-box rounded-lg overflow-hidden"},k={class:"p-2 flex ns-box-header items-center justify-between border-b"},y={class:"font-semibold"},v=s("div",{class:"head flex-auto flex h-56"},[s("div",{class:"w-full h-full pt-2"})],-1),w={class:"foot p-2 -mx-4 flex flex-wrap"},W={class:"flex w-full lg:w-full border-b lg:border-t lg:py-1 lg:my-1"},g={class:"px-4 w-1/2 lg:w-1/2 flex flex-col items-center justify-center"},C={class:"text-xs"},S={class:"text-lg xl:text-xl font-bold"},E={class:"px-4 w-1/2 lg:w-1/2 flex flex-col items-center justify-center"},j={class:"text-xs"},I={class:"text-lg xl:text-xl font-bold"},T={class:"flex w-full lg:w-full"},A={class:"px-4 w-full lg:w-1/2 flex flex-col items-center justify-center"},O={class:"text-xs"},B={class:"text-lg xl:text-xl font-bold"},F={class:"px-4 w-full lg:w-1/2 flex flex-col items-center justify-center"},N={class:"text-xs"},R={class:"text-lg xl:text-xl font-bold"};function D(n,t,c,r,o,e){const l=_("ns-close-button");return f(),u("div",b,[s("div",k,[s("h3",y,a(e.__("Recents Orders")),1),s("div",null,[p(l,{onClick:t[0]||(t[0]=V=>n.$emit("onRemove"))})])]),v,s("div",w,[s("div",W,[s("div",g,[s("span",C,a(e.__("Weekly Sales")),1),s("h2",S,a(e.nsCurrency(o.totalWeeklySales,"abbreviate")),1)]),s("div",E,[s("span",j,a(e.__("Week Taxes")),1),s("h2",I,a(e.nsCurrency(o.totalWeekTaxes,"abbreviate")),1)])]),s("div",T,[s("div",A,[s("span",O,a(e.__("Net Income")),1),s("h2",B,a(e.nsCurrency(o.totalWeekIncome,"abbreviate")),1)]),s("div",F,[s("span",N,a(e.__("Week Expenses")),1),s("h2",R,a(e.nsCurrency(o.totalWeekExpenses,"abbreviate")),1)])])])])}const G=x(m,[["render",D]]);export{G as default}; diff --git a/public/build/assets/ns-orders-preview-popup-CjtIUcZ8.js b/public/build/assets/ns-orders-preview-popup-CjtIUcZ8.js new file mode 100644 index 000000000..54a7bd2d3 --- /dev/null +++ b/public/build/assets/ns-orders-preview-popup-CjtIUcZ8.js @@ -0,0 +1 @@ +var M=Object.defineProperty;var H=(r,s,n)=>s in r?M(r,s,{enumerable:!0,configurable:!0,writable:!0,value:n}):r[s]=n;var U=(r,s,n)=>(H(r,typeof s!="symbol"?s+"":s,n),n);import{F as R,g as I,b as p,a as v,p as q,P as A,i as Y,v as L,G as z}from"./bootstrap-Bpe5LRJd.js";import{_ as u,n as V}from"./currency-lOMYG1Wf.js";import{_ as F}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as h,o as d,c as a,a as e,t as i,f as y,F as x,b as w,g as k,e as m,w as P,i as j,B as T,n as G}from"./runtime-core.esm-bundler-RT2b-_3S.js";import{a as $,n as O,b as J,i as K,d as X}from"./ns-prompt-popup-C2dK5WQb.js";import"./index.es-Br67aBEV.js";const Z={props:["popup"],mounted(){this.popuCloser(),this.loadFields(),this.product=this.popup.params.product},data(){return{formValidation:new R,fields:[],product:null}},methods:{__:u,popuCloser:I,close(){this.popup.params.reject(!1),this.popup.close()},addProduct(){if(this.formValidation.validateFields(this.fields),this.formValidation.fieldsValid(this.fields)){const r=this.formValidation.extractFields(this.fields),s={...this.product,...r};return this.popup.params.resolve(s),this.close()}p.error(u("The form is not valid.")).subscribe()},loadFields(){v.get("/api/fields/ns.refund-product").subscribe(r=>{this.fields=this.formValidation.createFields(r),this.fields.forEach(s=>{s.value=this.product[s.name]||""})})}}},ee={class:"shadow-xl ns-box w-95vw md:w-3/5-screen lg:w-3/7-screen h-95vh md:h-3/5-screen lg:h-3/7-screen overflow-hidden flex flex-col"},se={class:"p-2 flex justify-between border-b ns-box-header items-center"},te={class:"text-semibold"},re={class:"flex-auto overflow-y-auto relative ns-scrollbar"},ne={class:"p-2"},ie={key:0,class:"h-full w-full flex items-center justify-center"},oe={class:"p-2 flex justify-between items-center border-t ns-box-body"},le=e("div",null,null,-1);function de(r,s,n,_,o,t){const b=h("ns-close-button"),l=h("ns-field"),c=h("ns-spinner"),g=h("ns-button");return d(),a("div",ee,[e("div",se,[e("h3",te,i(t.__("Products")),1),e("div",null,[y(b,{onClick:s[0]||(s[0]=f=>t.close())})])]),e("div",re,[e("div",ne,[(d(!0),a(x,null,w(o.fields,(f,C)=>(d(),k(l,{key:C,field:f},null,8,["field"]))),128))]),o.fields.length===0?(d(),a("div",ie,[y(c)])):m("",!0)]),e("div",oe,[le,e("div",null,[y(g,{onClick:s[1]||(s[1]=f=>t.addProduct()),type:"info"},{default:P(()=>[j(i(t.__("Add Product")),1)]),_:1})])])])}const B=F(Z,[["render",de]]),ae={components:{nsNumpad:$},props:["popup"],data(){return{product:null,seeValue:0,availableQuantity:0}},mounted(){this.product=this.popup.params.product,this.availableQuantity=this.popup.params.availableQuantity,this.seeValue=this.product.quantity},methods:{__:u,popupResolver:q,close(){this.popup.params.reject(!1),this.popup.close()},setChangedValue(r){this.seeValue=r},updateQuantity(r){if(r>this.availableQuantity)return p.error("Unable to proceed as the quantity provided is exceed the available quantity.").subscribe();this.product.quantity=parseFloat(r),this.popup.params.resolve(this.product),this.popup.close()}}},ce={class:"shadow-xl ns-box overflow-hidden w-95vw md:w-4/6-screen lg:w-3/7-screen"},ue={class:"p-2 flex justify-between ns-box-header"},_e={class:"font-semibold"},me={key:0,class:"border-t border-b ns-box-body py-2 flex items-center justify-center text-2xl font-semibold"},pe={class:"text-primary text-sm"},fe={key:1,class:"flex-auto overflow-y-auto p-2"};function he(r,s,n,_,o,t){const b=h("ns-close-button"),l=h("ns-numpad");return d(),a("div",ce,[e("div",ue,[e("h3",_e,i(t.__("Quantity")),1),e("div",null,[y(b,{onClick:s[0]||(s[0]=c=>t.close())})])]),o.product?(d(),a("div",me,[e("span",null,i(o.seeValue),1),e("span",pe,"("+i(o.availableQuantity)+" "+i(t.__("available"))+")",1)])):m("",!0),o.product?(d(),a("div",fe,[y(l,{value:o.product.quantity,onNext:s[1]||(s[1]=c=>t.updateQuantity(c)),onChanged:s[2]||(s[2]=c=>t.setChangedValue(c))},null,8,["value"])])):m("",!0)])}const be=F(ae,[["render",he]]);class D{constructor({urls:s,options:n}){U(this,"urls");U(this,"options");U(this,"printingURL",{refund:"refund_printing_url",sale:"sale_printing_url",payment:"payment_printing_url"});this.urls=s,this.options=n}processRegularPrinting(s,n){const _=document.querySelector("#printing-section");_&&_.remove();const o=this.urls[this.printingURL[n]].replace("{reference_id}",s),t=document.createElement("iframe");t.id="printing-section",t.className="hidden",t.src=o,document.body.appendChild(t),setTimeout(()=>{document.querySelector("#printing-section").remove()},5e3)}process(s,n,_="aloud"){switch(this.options.ns_pos_printing_gateway){case"default":this.processRegularPrinting(s,n);break;default:this.processCustomPrinting(s,this.options.ns_pos_printing_gateway,n,_);break}}processCustomPrinting(s,n,_,o="aloud"){const t={printed:!1,reference_id:s,gateway:n,document:_,mode:o};nsHooks.applyFilters("ns-custom-print",{params:t,promise:()=>new Promise((l,c)=>{c({status:"failed",message:__("The selected print gateway doesn't support this type of printing.","NsPrintAdapter")})})}).promise().then(l=>{nsSnackBar.success(l.message).subscribe()}).catch(l=>{nsSnackBar.error(l.message||__("An error unexpected occured while printing.")).subscribe()})}}const ye={components:{nsNumpad:$},props:["order"],computed:{total(){return this.refundables.length>0?this.refundables.map(r=>parseFloat(r.unit_price)*parseFloat(r.quantity)).reduce((r,s)=>r+s)+this.shippingFees:0+this.shippingFees},shippingFees(){return this.refundShipping?this.order.shipping:0}},data(){return{isSubmitting:!1,formValidation:new R,refundables:[],paymentOptions:[],paymentField:[],print:new D({urls:systemUrls,options:systemOptions}),refundShipping:!1,selectedPaymentGateway:!1,screen:0,selectFields:[{type:"select",options:this.order.products.map(r=>({label:`${r.name} - ${r.unit.name} (x${r.quantity})`,value:r.id})),validation:"required",name:"product_id",label:u("Product"),description:u("Select the product to perform a refund.")}]}},methods:{__:u,nsCurrency:V,updateScreen(r){this.screen=r},toggleRefundShipping(r){this.refundShipping=r,this.refundShipping},proceedPayment(){if(this.selectedPaymentGateway===!1)return p.error(u("Please select a payment gateway before proceeding.")).subscribe();if(this.total===0)return p.error(u("There is nothing to refund.")).subscribe();if(this.screen===0)return p.error(u("Please provide a valid payment amount.")).subscribe();A.show(O,{title:u("Confirm Your Action"),message:u("The refund will be made on the current order."),onAction:r=>{r&&this.doProceed()}})},doProceed(){const r={products:this.refundables,total:this.screen,payment:{identifier:this.selectedPaymentGateway},refund_shipping:this.refundShipping};this.isSubmitting=!0,v.post(`/api/orders/${this.order.id}/refund`,r).subscribe({next:s=>{this.isSubmitting=!1,this.$emit("changed",!0),s.data.order.payment_status==="refunded"&&this.$emit("loadTab","details"),this.print.process(s.data.orderRefund.id,"refund"),p.success(s.message).subscribe()},error:s=>{this.isSubmitting=!1,p.error(s.message).subscribe()}})},addProduct(){if(this.formValidation.validateFields(this.selectFields),!this.formValidation.fieldsValid(this.selectFields))return p.error(u("Please select a product before proceeding.")).subscribe();const r=this.formValidation.extractFields(this.selectFields),s=this.order.products.filter(t=>t.id===r.product_id),n=this.refundables.filter(t=>t.id===r.product_id);if(n.length>0&&n.map(b=>parseInt(b.quantity)).reduce((b,l)=>b+l)===s[0].quantity)return p.error(u("Not enough quantity to proceed.")).subscribe();if(s[0].quantity===0)return p.error(u("Not enough quantity to proceed.")).subscribe();const _={...s[0],condition:"",description:""};new Promise((t,b)=>{A.show(B,{resolve:t,reject:b,product:_})}).then(t=>{t.quantity=this.getProductOriginalQuantity(t.id)-this.getProductUsedQuantity(t.id),this.refundables.push(t)},t=>t)},getProductOriginalQuantity(r){const s=this.order.products.filter(n=>n.id===r);return s.length>0?s.map(n=>parseFloat(n.quantity)).reduce((n,_)=>n+_):0},getProductUsedQuantity(r){const s=this.refundables.filter(n=>n.id===r);return s.length>0?s.map(_=>parseFloat(_.quantity)).reduce((_,o)=>_+o):0},openSettings(r){new Promise((n,_)=>{A.show(B,{resolve:n,reject:_,product:r})}).then(n=>{const _=this.refundables.indexOf(r);this.$set(this.refundables,_,n)},n=>n)},async selectPaymentGateway(){try{this.selectedPaymentGateway=await new Promise((r,s)=>{A.show(J,{resolve:r,reject:s,value:[this.selectedPaymentOption],...this.paymentField[0]})}),this.selectedPaymentGatewayLabel=this.paymentField[0].options.filter(r=>r.value===this.selectedPaymentGateway)[0].label}catch{p.error(u("An error has occured while seleting the payment gateway.")).subscribe()}},changeQuantity(r){new Promise((n,_)=>{const o=this.getProductOriginalQuantity(r.id)-this.getProductUsedQuantity(r.id)+parseFloat(r.quantity);A.show(be,{resolve:n,reject:_,product:r,availableQuantity:o})}).then(n=>{if(n.quantity>this.getProductUsedQuantity(r.id)-r.quantity){const _=this.refundables.indexOf(r);this.$set(this.refundables,_,n)}})},deleteProduct(r){new Promise((s,n)=>{A.show(O,{title:u("Confirm Your Action"),message:u("Would you like to delete this product ?"),onAction:_=>{if(_){const o=this.refundables.indexOf(r);this.refundables.splice(o,1)}}})})}},mounted(){this.selectFields=this.formValidation.createFields(this.selectFields),v.get("/api/orders/payments").subscribe(r=>{this.paymentField=r})}},ve={class:"-m-4 flex-auto flex flex-wrap relative"},xe={key:0,class:"bg-overlay h-full w-full flex items-center justify-center absolute z-30"},we={class:"px-4 w-full lg:w-1/2"},ge={class:"py-2 border-b-2 text-primary border-info-primary"},ke={class:"my-2"},Pe={class:"border-b border-info-primary flex justify-between items-center mb-2"},Ce={class:"flex-auto flex-col flex"},Se={class:"p-2 flex"},je={class:"flex justify-between p-2"},Oe={class:"flex items-center text-primary"},Ae={key:0,class:"mr-2"},Fe={class:"py-1 border-b-2 text-primary border-info-primary"},Ve={class:"px-2 text-primary flex justify-between flex-auto"},De={class:"flex flex-col"},Ue={class:"py-2"},Te={key:0,class:"rounded-full px-2 py-1 text-xs bg-error-tertiary mx-2 text-white"},Re={key:1,class:"rounded-full px-2 py-1 text-xs bg-success-tertiary mx-2 text-white"},Ie={class:"flex items-center justify-center"},qe={class:"py-1 flex items-center cursor-pointer border-b border-dashed border-info-primary"},Qe={class:"flex"},$e=["onClick"],Ne=e("i",{class:"las la-cog text-xl"},null,-1),Ye=[Ne],Le=["onClick"],Be=e("i",{class:"las la-trash"},null,-1),Ge=[Be],Ee=["onClick"],We={class:"px-4 w-full lg:w-1/2"},Me={class:"py-2 border-b-2 text-primary border-info-primary"},He={class:"py-2"},ze={class:"elevation-surface border font-semibold flex mb-2 p-2 justify-between"},Je={class:"elevation-surface border success font-semibold flex mb-2 p-2 justify-between"},Ke={class:"elevation-surface border font-semibold flex mb-2 p-2 justify-between"};function Xe(r,s,n,_,o,t){const b=h("ns-spinner"),l=h("ns-field"),c=h("ns-checkbox"),g=h("ns-numpad-plus");return d(),a("div",ve,[o.isSubmitting?(d(),a("div",xe,[y(b)])):m("",!0),e("div",we,[e("h3",ge,i(t.__("Refund With Products")),1),e("div",ke,[e("ul",null,[e("li",Pe,[e("div",Ce,[e("div",Se,[(d(!0),a(x,null,w(o.selectFields,(f,C)=>(d(),k(l,{field:f,key:C},null,8,["field"]))),128))]),e("div",je,[e("div",Oe,[n.order.shipping>0?(d(),a("span",Ae,i(t.__("Refund Shipping")),1)):m("",!0),n.order.shipping>0?(d(),k(c,{key:1,onChange:s[0]||(s[0]=f=>t.toggleRefundShipping(f)),checked:o.refundShipping},null,8,["checked"])):m("",!0)]),e("div",null,[e("button",{onClick:s[1]||(s[1]=f=>t.addProduct()),class:"border rounded-full px-2 py-1 ns-inset-button info"},i(t.__("Add Product")),1)])])])]),e("li",null,[e("h4",Fe,i(t.__("Products")),1)]),(d(!0),a(x,null,w(o.refundables,f=>(d(),a("li",{key:f.id,class:"elevation-surface border flex justify-between items-center mb-2"},[e("div",Ve,[e("div",De,[e("p",Ue,[e("span",null,i(f.name),1),f.condition==="damaged"?(d(),a("span",Te,i(t.__("Damaged")),1)):m("",!0),f.condition==="unspoiled"?(d(),a("span",Re,i(t.__("Unspoiled")),1)):m("",!0)]),e("small",null,i(f.unit.name),1)]),e("div",Ie,[e("span",qe,i(t.nsCurrency(f.unit_price*f.quantity)),1)])]),e("div",Qe,[e("p",{onClick:C=>t.openSettings(f),class:"p-2 border-l border-info-primary cursor-pointer text-primary ns-numpad-key w-16 h-16 flex items-center justify-center"},Ye,8,$e),e("p",{onClick:C=>t.deleteProduct(f),class:"p-2 border-l border-info-primary cursor-pointer text-primary ns-numpad-key w-16 h-16 flex items-center justify-center"},Ge,8,Le),e("p",{onClick:C=>t.changeQuantity(f),class:"p-2 border-l border-info-primary cursor-pointer text-primary ns-numpad-key w-16 h-16 flex items-center justify-center"},i(f.quantity),9,Ee)])]))),128))])])]),e("div",We,[e("h3",Me,i(t.__("Summary")),1),e("div",He,[e("div",ze,[e("span",null,i(t.__("Total")),1),e("span",null,i(t.nsCurrency(t.total)),1)]),e("div",Je,[e("span",null,i(t.__("Paid")),1),e("span",null,i(t.nsCurrency(n.order.tendered)),1)]),e("div",{onClick:s[2]||(s[2]=f=>t.selectPaymentGateway()),class:"elevation-surface border info font-semibold flex mb-2 p-2 justify-between cursor-pointer"},[e("span",null,i(t.__("Payment Gateway")),1),e("span",null,i(o.selectedPaymentGateway?r.selectedPaymentGatewayLabel:"N/A"),1)]),e("div",Ke,[e("span",null,i(t.__("Screen")),1),e("span",null,i(t.nsCurrency(o.screen)),1)]),e("div",null,[y(g,{currency:!0,onChanged:s[3]||(s[3]=f=>t.updateScreen(f)),value:o.screen,onNext:s[4]||(s[4]=f=>t.proceedPayment(f))},null,8,["value"])])])])])}const Ze=F(ye,[["render",Xe]]);class N{getTypeLabel(s){const n=typeLabels.filter(_=>_.value===s);return n.length>0?n[0].label:u("Unknown Status")}getDeliveryStatus(s){const n=deliveryStatuses.filter(_=>_.value===s);return n.length>0?n[0].label:u("Unknown Status")}getProcessingStatus(s){const n=processingStatuses.filter(_=>_.value===s);return n.length>0?n[0].label:u("Unknown Status")}getPaymentStatus(s){const n=paymentLabels.filter(_=>_.value===s);return n.length>0?n[0].label:u("Unknown Status")}}const es={props:["order"],data(){return{labels:new N,validation:new R,inputValue:0,print:new D({urls:systemUrls,options:systemOptions}),fields:[],paymentTypes}},computed:{paymentsLabels(){const r=new Object;return this.paymentTypes.forEach(s=>{r[s.value]=s.label}),r}},methods:{__:u,nsCurrency:V,updateValue(r){this.inputValue=r},loadPaymentFields(){v.get("/api/orders/payments").subscribe(r=>{this.fields=this.validation.createFields(r)})},printPaymentReceipt(r){this.print.process(r.id,"payment")},submitPayment(r){if(this.validation.validateFields(this.fields),!this.validation.fieldsValid(this.fields))return p.error(u("Unable to proceed the form is not valid")).subscribe();if(parseFloat(r)==0)return p.error(u("Please provide a valid value")).subscribe();r=parseFloat(r);const s={...this.validation.extractFields(this.fields),value:r};Popup.show(O,{title:u("Confirm Your Action"),message:u("You make a payment for {amount}. A payment can't be canceled. Would you like to proceed ?").replace("{amount}",V(r)),onAction:n=>{n&&v.post(`/api/orders/${this.order.id}/payments`,s).subscribe(_=>{p.success(_.message).subscribe(),this.$emit("changed")},_=>{p.error(_.message).subscribe()})}})}},components:{nsNumpad:$},mounted(){this.loadPaymentFields()}},ss={class:""},ts={class:"flex -mx-4 flex-wrap"},rs={class:"px-2 w-full md:w-1/2"},is={class:"my-1 h-12 py-1 px-2 flex justify-between items-center elevation-surface info border text-xl font-bold"},os={class:"px-2 w-full md:w-1/2"},ls={class:"my-1 h-12 py-1 px-2 flex justify-between items-center elevation-surface success border text-xl font-bold"},ds={class:"px-2 w-full md:w-1/2"},as={class:"my-1 h-12 py-1 px-2 flex justify-between items-center elevation-surface error border text-xl font-bold"},cs={key:0},us={key:1},_s={class:"px-2 w-full md:w-1/2"},ms={class:"my-1 h-12 py-1 px-2 flex justify-between items-center elevation-surface warning border text-xl font-bold"},ps={class:"flex -mx-4 flex-wrap"},fs={class:"px-2 w-full mb-4 md:w-1/2"},hs={key:0},bs={class:"font-semibold border-b-2 border-info-primary py-2"},ys={class:"py-2"},vs={class:"my-2 px-2 h-12 flex justify-end items-center border elevation-surface"},xs={key:1,class:"flex items-center justify-center h-full"},ws={class:"text-primary font-semibold"},gs={class:"px-2 w-full mb-4 md:w-1/2"},ks={class:"font-semibold border-b-2 border-info-primary py-2 mb-2"},Ps={class:"flex items-center"},Cs=["onClick"],Ss=e("i",{class:"las la-print"},null,-1),js=[Ss];function Os(r,s,n,_,o,t){const b=h("ns-field"),l=h("ns-numpad-plus");return d(),a("div",ss,[e("div",ts,[e("div",rs,[e("div",is,[e("span",null,i(t.__("Total")),1),e("span",null,i(t.nsCurrency(n.order.total)),1)])]),e("div",os,[e("div",ls,[e("span",null,i(t.__("Paid")),1),e("span",null,i(t.nsCurrency(n.order.tendered)),1)])]),e("div",ds,[e("div",as,[e("span",null,i(t.__("Unpaid")),1),n.order.total-n.order.tendered>0?(d(),a("span",cs,i(t.nsCurrency(n.order.total-n.order.tendered)),1)):m("",!0),n.order.total-n.order.tendered<=0?(d(),a("span",us,i(t.nsCurrency(0)),1)):m("",!0)])]),e("div",_s,[e("div",ms,[e("span",null,i(t.__("Customer Account")),1),e("span",null,i(t.nsCurrency(n.order.customer.account_amount)),1)])])]),e("div",ps,[e("div",fs,[n.order.payment_status!=="paid"?(d(),a("div",hs,[e("h3",bs,i(t.__("Payment")),1),e("div",ys,[(d(!0),a(x,null,w(o.fields,(c,g)=>(d(),k(b,{field:c,key:g},null,8,["field"]))),128)),e("div",vs,i(t.nsCurrency(o.inputValue)),1),y(l,{floating:!0,onNext:s[0]||(s[0]=c=>t.submitPayment(c)),onChanged:s[1]||(s[1]=c=>t.updateValue(c)),value:o.inputValue},null,8,["value"])])])):m("",!0),n.order.payment_status==="paid"?(d(),a("div",xs,[e("h3",ws,i(t.__("No payment possible for paid order.")),1)])):m("",!0)]),e("div",gs,[e("h3",ks,i(t.__("Payment History")),1),e("ul",null,[(d(!0),a(x,null,w(n.order.payments,c=>(d(),a("li",{key:c.id,class:"p-2 flex items-center justify-between text-shite border elevation-surface mb-2"},[e("span",Ps,[e("a",{href:"javascript:void(0)",onClick:g=>t.printPaymentReceipt(c),class:"m-1 rounded-full hover:bg-info-tertiary hover:text-white flex items-center justify-center h-8 w-8"},js,8,Cs),j(" "+i(t.paymentsLabels[c.identifier]||t.__("Unknown")),1)]),e("span",null,i(t.nsCurrency(c.value)),1)]))),128))])])])])}const As=F(es,[["render",Os]]),Fs={name:"ns-orders-refund-popup",props:["popup"],data(){return{order:null,refunds:[],view:"summary",previewed:null,loaded:!1,options:systemOptions,systemUrls,print:new D({urls:systemUrls,options:systemOptions})}},methods:{__:u,nsCurrency:V,popupCloser:I,popupResolver:q,toggleProductView(r){this.view="details",this.previewed=r},loadOrderRefunds(){nsHttpClient.get(`/api/orders/${this.order.id}/refunds`).subscribe(r=>{this.loaded=!0,this.refunds=r.refunds},r=>{p.error(r.message).subscribe()})},close(){this.popup.close()},printRefundReceipt(r){this.print.process(r.id,"refund")}},mounted(){this.order=this.popup.params.order,this.popupCloser(),this.loadOrderRefunds()}},Vs={class:"shadow-lg w-95vw h-95vh md:w-3/5-screen md:h-3/5-screen ns-box flex flex-col overflow-hidden"},Ds={class:"border-b p-2 flex items-center justify-between ns-box-header"},Us={class:"flex"},Ts={class:"overflow-auto flex-auto ns-box-body"},Rs={key:0,class:"flex h-full w-full items-center justify-center"},Is={key:1,class:"flex h-full w-full items-center flex-col justify-center"},qs=e("i",{class:"las la-laugh-wink text-5xl"},null,-1),Qs={class:"md:w-80 text-sm text-secondary text-center"},$s={class:"w-full md:flex-auto p-2"},Ns={class:"font-semibold mb-1"},Ys={class:"flex -mx-1 text-sm text-primary"},Ls={class:"px-1"},Bs={class:"px-1"},Gs=["onClick"],Es=e("i",{class:"las la-eye"},null,-1),Ws=[Es],Ms=["onClick"],Hs=e("i",{class:"las la-print"},null,-1),zs=[Hs],Js={class:"w-full md:flex-auto p-2"},Ks={class:"font-semibold mb-1"},Xs={class:"flex -mx-1 text-sm text-primary"},Zs={class:"px-1"},et={class:"px-1"},st={class:"px-1"};function tt(r,s,n,_,o,t){const b=h("ns-close-button"),l=h("ns-spinner");return d(),a("div",Vs,[e("div",Ds,[e("h3",null,i(t.__("Order Refunds")),1),e("div",Us,[o.view==="details"?(d(),a("div",{key:0,onClick:s[0]||(s[0]=c=>o.view="summary"),class:"flex items-center justify-center cursor-pointer rounded-full px-3 border ns-inset-button mr-1"},i(t.__("Go Back")),1)):m("",!0),y(b,{onClick:s[1]||(s[1]=c=>t.close())})])]),e("div",Ts,[o.view==="summary"?(d(),a(x,{key:0},[o.loaded?m("",!0):(d(),a("div",Rs,[y(l,{size:"24"})])),o.loaded&&o.refunds.length===0?(d(),a("div",Is,[qs,e("p",Qs,i(t.__("No refunds made so far. Good news right?")),1)])):m("",!0),o.loaded&&o.refunds.length>0?(d(!0),a(x,{key:2},w(o.refunds,c=>(d(),a("div",{class:"border-b border-box-edge flex flex-col md:flex-row",key:c.id},[e("div",$s,[e("h3",Ns,i(o.order.code),1),e("div",null,[e("ul",Ys,[e("li",Ls,i(t.__("Total"))+" : "+i(t.nsCurrency(c.total)),1),e("li",Bs,i(t.__("By"))+" : "+i(c.author.username),1)])])]),e("div",{onClick:g=>t.toggleProductView(c),class:"w-full md:w-16 cursor-pointer hover:bg-info-secondary hover:border-info-primary hover:text-white text-lg flex items-center justify-center border-box-edge md:border-l"},Ws,8,Gs),e("div",{onClick:g=>t.printRefundReceipt(c),class:"w-full md:w-16 cursor-pointer hover:bg-info-secondary hover:border-info-primary hover:text-white text-lg flex items-center justify-center border-box-edge md:border-l"},zs,8,Ms)]))),128)):m("",!0)],64)):m("",!0),o.view==="details"?(d(!0),a(x,{key:1},w(o.previewed.refunded_products,c=>(d(),a("div",{class:"border-b border-box-edge flex flex-col md:flex-row",key:c.id},[e("div",Js,[e("h3",Ks,i(c.product.name),1),e("div",null,[e("ul",Xs,[e("li",Zs,i(t.__("Condition"))+" : "+i(c.condition),1),e("li",et,i(t.__("Quantity"))+" : "+i(c.quantity),1),e("li",st,i(t.__("Total"))+" : "+i(t.nsCurrency(c.total_price)),1)])])])]))),128)):m("",!0)])])}const rt=F(Fs,[["render",tt]]),nt={props:["order"],data(){return{processingStatuses,deliveryStatuses,labels:new N,showProcessingSelect:!1,showDeliverySelect:!1,systemUrls}},mounted(){},methods:{__:u,nsCurrency:V,submitProcessingChange(){A.show(O,{title:u("Would you proceed ?"),message:u("The processing status of the order will be changed. Please confirm your action."),onAction:r=>{r&&v.post(`/api/orders/${this.order.id}/processing`,{process_status:this.order.process_status}).subscribe({next:s=>{this.showProcessingSelect=!1,p.success(s.message).subscribe()},error:s=>{p.error(s.message||u("Unexpected error occurred.")).subscribe()}})}})},openRefunds(){try{const r=new Promise((s,n)=>{const _=this.order;A.show(rt,{order:_,resolve:s,reject:n})})}catch{}},submitDeliveryStatus(){A.show(O,{title:u("Would you proceed ?"),message:u("The delivery status of the order will be changed. Please confirm your action."),onAction:r=>{r&&v.post(`/api/orders/${this.order.id}/delivery`,{delivery_status:this.order.delivery_status}).subscribe({next:s=>{this.showDeliverySelect=!1,p.success(s.message).subscribe()},error:s=>{p.error(s.message||u("Unexpected error occurred.")).subscribe()}})}})}}},it={class:"-mx-4 flex flex-wrap"},ot={class:"flex-auto"},lt={class:"w-full mb-2 flex-wrap flex"},dt={class:"w-full mb-2 px-4"},at={class:"font-semibold text-secondary pb-2 border-b border-info-primary"},ct={class:"mb-2 w-full md:w-1/2 px-4"},ut={class:"elevation-surface border p-2 flex justify-between items-start"},_t={class:"text-semibold text-primary"},mt={class:"font-semibold text-secondary"},pt={class:"mb-2 w-full md:w-1/2 px-4"},ft={class:"p-2 flex justify-between items-start text-primary elevation-surface error border"},ht={class:"text-semibold"},bt={class:""},yt={key:0,class:"ml-1"},vt={key:1,class:"ml-1"},xt={class:"font-semibold text-primary"},wt={class:"mb-2 w-full md:w-1/2 px-4"},gt={class:"p-2 flex justify-between items-start elevation-surface border"},kt={class:"text-semibold text-primary"},Pt={class:"font-semibold text-secondary"},Ct={class:"mb-2 w-full md:w-1/2 px-4"},St={class:"p-2 flex justify-between items-start text-primary elevation-surface error border"},jt={class:"text-semibold"},Ot={class:"font-semibold text-primary"},At={class:"mb-2 w-full md:w-1/2 px-4"},Ft={class:"p-2 flex justify-between items-start border ns-notice success"},Vt={class:"text-semibold"},Dt={class:"font-semibold text-primary"},Ut={class:"mb-2 w-full md:w-1/2 px-4"},Tt={class:"p-2 flex justify-between items-start text-primary elevation-surface info border"},Rt={class:"text-semibold"},It={class:"font-semibold"},qt={class:"mb-2 w-full md:w-1/2 px-4"},Qt={class:"p-2 flex justify-between items-start text-primary elevation-surface error border"},$t={class:"text-semibold"},Nt={class:"font-semibold"},Yt={class:"mb-2 w-full md:w-1/2 px-4"},Lt={class:"p-2 flex justify-between items-start elevation-surface border"},Bt={class:"text-semibold"},Gt={class:"font-semibold"},Et={class:"px-4 w-full md:w-1/2 lg:w-2/4 mb-2"},Wt={class:"mb-2"},Mt={class:"font-semibold text-secondary pb-2 border-b border-info-primary"},Ht={class:"mb-2 p-2 flex justify-between items-start elevation-surface border"},zt={class:"text-semibold text-primary"},Jt={key:0,class:"font-semibold text-secondary"},Kt=["href"],Xt={class:"mb-2 p-2 flex justify-between items-start elevation-surface border"},Zt={class:"text-semibold text-primary"},er={class:"font-semibold text-secondary"},sr={class:"mb-2 p-2 flex justify-between items-start elevation-surface border"},tr={class:"text-semibold text-primary"},rr={class:"font-semibold text-secondary mt-2 md:mt-0 w-full md:w-auto"},nr={class:"w-full text-center"},ir={key:0,class:"flex-auto flex"},or={class:"ns-select flex items-center justify-center"},lr=["value"],dr={class:"pl-2 flex"},ar={class:"mb-2 p-2 flex flex-col md:flex-row justify-between items-center elevation-surface border"},cr={class:"text-semibold text-primary"},ur={class:"font-semibold text-secondary mt-2 md:mt-0 w-full md:w-auto"},_r={class:"w-full text-center"},mr={key:0,class:"flex-auto flex"},pr={class:"ns-select flex items-center justify-center"},fr=["value"],hr={class:"pl-2 flex"},br={class:"mb-2 p-2 flex justify-between items-start elevation-surface border"},yr={class:"text-semibold text-primary"},vr={class:"font-semibold text-secondary"},xr={class:"px-4 w-full md:w-1/2 lg:w-2/4 mb-2"},wr={class:"mb-2"},gr={class:"font-semibold text-secondary pb-2 border-b border-info-primary"},kr={class:"text-semibold text-primary"},Pr={class:"text-secondary text-sm"},Cr={class:"font-semibold text-secondary"},Sr={class:"mb-2"},jr={class:"font-semibold text-secondary pb-2 border-b border-info-primary flex justify-between"},Or={class:"text-semibold text-primary"},Ar={class:"text-secondary text-sm"},Fr={class:"font-semibold text-secondary"};function Vr(r,s,n,_,o,t){const b=h("ns-close-button");return d(),a("div",it,[e("div",ot,[e("div",lt,[e("div",dt,[e("h3",at,i(t.__("Payment Summary")),1)]),e("div",ct,[e("div",ut,[e("div",null,[e("h4",_t,i(t.__("Sub Total")),1)]),e("div",mt,i(t.nsCurrency(n.order.subtotal)),1)])]),e("div",pt,[e("div",ft,[e("div",null,[e("h4",ht,[e("span",bt,i(t.__("Discount")),1),n.order.discount_type==="percentage"?(d(),a("span",yt,"("+i(n.order.discount_percentage)+"%)",1)):m("",!0),n.order.discount_type==="flat"?(d(),a("span",vt,"(Flat)")):m("",!0)])]),e("div",xt,i(t.nsCurrency(n.order.discount)),1)])]),e("div",wt,[e("div",gt,[e("div",null,[e("h4",kt,i(t.__("Shipping")),1)]),e("div",Pt,i(t.nsCurrency(n.order.shipping)),1)])]),e("div",Ct,[e("div",St,[e("div",null,[e("h4",jt,i(t.__("Coupons")),1)]),e("div",Ot,i(t.nsCurrency(n.order.total_coupons)),1)])]),e("div",At,[e("div",Ft,[e("div",null,[e("h4",Vt,i(t.__("Total")),1)]),e("div",Dt,i(t.nsCurrency(n.order.total)),1)])]),e("div",Ut,[e("div",Tt,[e("div",null,[e("h4",Rt,i(t.__("Taxes")),1)]),e("div",It,i(t.nsCurrency(n.order.tax_value)),1)])]),e("div",qt,[e("div",Qt,[e("div",null,[e("h4",$t,i(t.__("Change")),1)]),e("div",Nt,i(t.nsCurrency(n.order.change)),1)])]),e("div",Yt,[e("div",Lt,[e("div",null,[e("h4",Bt,i(t.__("Paid")),1)]),e("div",Gt,i(t.nsCurrency(n.order.tendered)),1)])])])]),e("div",Et,[e("div",Wt,[e("h3",Mt,i(t.__("Order Status")),1)]),e("div",Ht,[e("div",null,[e("h4",zt,[e("span",null,i(t.__("Customer")),1)])]),n.order?(d(),a("div",Jt,[e("a",{class:"border-b border-dashed border-info-primary",href:o.systemUrls.customer_edit_url.replace("#customer",n.order.customer.id),target:"_blank",rel:"noopener noreferrer"},i(n.order.customer.first_name)+" "+i(n.order.customer.last_name),9,Kt)])):m("",!0)]),e("div",Xt,[e("div",null,[e("h4",Zt,[e("span",null,i(t.__("Type")),1)])]),e("div",er,i(o.labels.getTypeLabel(n.order.type)),1)]),e("div",sr,[e("div",null,[e("h4",tr,[e("span",null,i(t.__("Delivery Status")),1)])]),e("div",rr,[e("div",nr,[o.showDeliverySelect?m("",!0):(d(),a("span",{key:0,onClick:s[0]||(s[0]=l=>o.showDeliverySelect=!0),class:"font-semibold text-secondary border-b border-info-primary cursor-pointer border-dashed"},i(o.labels.getDeliveryStatus(n.order.delivery_status)),1))]),o.showDeliverySelect?(d(),a("div",ir,[e("div",or,[T(e("select",{ref:"process_status",class:"flex-auto border-info-primary rounded-lg","onUpdate:modelValue":s[1]||(s[1]=l=>n.order.delivery_status=l)},[(d(!0),a(x,null,w(o.deliveryStatuses,(l,c)=>(d(),a("option",{key:c,value:l.value},i(l.label),9,lr))),128))],512),[[Y,n.order.delivery_status]])]),e("div",dr,[y(b,{onClick:s[2]||(s[2]=l=>o.showDeliverySelect=!1)}),e("button",{onClick:s[3]||(s[3]=l=>t.submitDeliveryStatus(n.order)),class:"bg-success-primary text-white rounded-full px-2 py-1"},i(t.__("Save")),1)])])):m("",!0)])]),e("div",ar,[e("div",null,[e("h4",cr,[e("span",null,i(t.__("Processing Status")),1)])]),e("div",ur,[e("div",_r,[o.showProcessingSelect?m("",!0):(d(),a("span",{key:0,onClick:s[4]||(s[4]=l=>o.showProcessingSelect=!0),class:"border-b border-info-primary cursor-pointer border-dashed"},i(o.labels.getProcessingStatus(n.order.process_status)),1))]),o.showProcessingSelect?(d(),a("div",mr,[e("div",pr,[T(e("select",{ref:"process_status",class:"flex-auto border-info-primary rounded-lg","onUpdate:modelValue":s[5]||(s[5]=l=>n.order.process_status=l)},[(d(!0),a(x,null,w(o.processingStatuses,(l,c)=>(d(),a("option",{key:c,value:l.value},i(l.label),9,fr))),128))],512),[[Y,n.order.process_status]])]),e("div",hr,[y(b,{onClick:s[6]||(s[6]=l=>o.showProcessingSelect=!1)}),e("button",{onClick:s[7]||(s[7]=l=>t.submitProcessingChange(n.order)),class:"bg-success-primary text-white rounded-full px-2 py-1"},i(t.__("Save")),1)])])):m("",!0)])]),e("div",br,[e("div",null,[e("h4",yr,[e("span",null,i(t.__("Payment Status")),1)])]),e("div",vr,i(o.labels.getPaymentStatus(n.order.payment_status)),1)])]),e("div",xr,[e("div",wr,[e("h3",gr,i(t.__("Products")),1)]),(d(!0),a(x,null,w(n.order.products,l=>(d(),a("div",{key:l.id,class:"p-2 flex justify-between items-start elevation-surface border mb-6"},[e("div",null,[e("h4",kr,i(l.name)+" (x"+i(l.quantity)+")",1),e("p",Pr,i(l.unit.name||"N/A"),1)]),e("div",Cr,i(t.nsCurrency(l.total_price)),1)]))),128)),e("div",Sr,[e("h3",jr,[e("span",null,i(t.__("Refunded Products")),1),e("a",{href:"javascript:void(0)",onClick:s[8]||(s[8]=l=>t.openRefunds()),class:"border-b border-info-primary border-dashed"},i(t.__("All Refunds")),1)])]),(d(!0),a(x,null,w(n.order.refunded_products,(l,c)=>(d(),a("div",{key:c,class:"p-2 flex justify-between items-start elevation-surface border mb-6"},[e("div",null,[e("h4",Or,i(l.order_product.name)+" (x"+i(l.quantity)+")",1),e("p",Ar,[j(i(l.unit.name||"N/A")+" | ",1),e("span",{class:G(["rounded-full px-2",l.condition==="damaged"?"bg-error-tertiary text-white":"bg-info-tertiary text-white"])},i(l.condition),3)])]),e("div",Fr,i(t.nsCurrency(l.total_price)),1)]))),128))])])}const Dr=F(nt,[["render",Vr]]),Ur={name:"ns-order-instalments-payment",props:["popup"],components:{nsNotice:K},data(){return{paymentTypes,fields:[{type:"select",name:"payment_type",description:u("Select the payment type that must apply to the current order."),label:u("Payment Type"),validation:"required",options:paymentTypes}],print:new D({urls:systemUrls,options:systemOptions}),validation:new R,order:null,instalment:null}},methods:{__:u,popupResolver:q,popupCloser:I,close(){this.popupResolver(!1)},updateInstalmentAsDue(r){nsHttpClient.put(`/api/orders/${this.order.id}/instalments/${this.instalment.id}/`,{instalment:{date:ns.date.moment.format("YYYY-MM-DD HH:mm:ss")}}).subscribe({next:s=>{this.submitPayment()},error:s=>{p.error(s.message||u("An unexpected error has occurred")).subscribe()}})},submitPayment(){if(!this.validation.validateFields(this.fields))return p.error(__m("The form is not valid.")).subcribe();nsHttpClient.post(`/api/orders/${this.order.id}/instalments/${this.instalment.id}/pay`,{...this.validation.extractFields(this.fields)}).subscribe({next:r=>{this.popupResolver(!0),this.print.exec(r.data.payment.id,"payment"),p.success(r.message).subscribe()},error:r=>{r.status==="failed"&&Popup.show(O,{title:u("Update Instalment Date"),message:u("Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid."),onAction:s=>{s&&this.updateInstalmentAsDue(this.instalment)}}),p.error(r.message||u("An unexpected error has occurred")).subscribe()}})}},mounted(){this.popupCloser(),this.order=this.popup.params.order,this.instalment=this.popup.params.instalment,this.fields=this.validation.createFields(this.fields)}},Tr={class:"shadow-lg ns-box w-95vw md:w-2/3-screen lg:w-1/3-screen"},Rr={class:"p-2 flex justify-between border-b items-center"},Ir={class:"p-2 ns-box-body"},qr=e("br",null,null,-1),Qr={class:"border-t ns-box-footer p-2 flex justify-end"};function $r(r,s,n,_,o,t){const b=h("ns-close-button"),l=h("ns-notice"),c=h("ns-field"),g=h("ns-button");return d(),a("div",Tr,[e("div",Rr,[e("h3",null,i(t.__("Payment Method")),1),e("div",null,[y(b,{onClick:s[0]||(s[0]=f=>t.close())})])]),e("div",Ir,[y(l,{color:"info",class:"py-2 p-4 text-center border text-primary rounded-lg"},{default:P(()=>[j(i(t.__("Before submitting the payment, choose the payment type used for that order.")),1)]),_:1}),qr,(d(!0),a(x,null,w(o.fields,(f,C)=>(d(),k(c,{key:C,field:f},null,8,["field"]))),128))]),e("div",Qr,[y(g,{onClick:s[1]||(s[1]=f=>t.submitPayment()),type:"info"},{default:P(()=>[j(i(t.__("Submit Payment")),1)]),_:1})])])}const Nr=F(Ur,[["render",$r]]),Yr={props:["order"],name:"ns-order-instalments",data(){return{labels:new N,original:[],instalments:[],print:new D({urls:systemUrls,options:systemOptions,type:"payment"})}},mounted(){this.loadInstalments()},computed:{totalInstalments(){return this.instalments.length>0?this.instalments.map(r=>r.amount).reduce((r,s)=>parseFloat(r)+parseFloat(s)):0}},methods:{__:u,nsCurrency:V,loadInstalments(){v.get(`/api/orders/${this.order.id}/instalments`).subscribe(r=>{this.original=r,this.instalments=r.map(s=>(s.price_clicked=!1,s.date_clicked=!1,s.date=moment(s.date).format("YYYY-MM-DD"),s))})},showReceipt(r){if(r.payment_id===null)return p.error(u("This instalment doesn't have any payment attached.")).subscribe();this.print.process(r.payment_id,"payment")},addInstalment(){this.instalments.push({date:ns.date.moment.format("YYYY-MM-DD"),amount:this.order.total-this.totalInstalments,paid:!1})},createInstalment(r){Popup.show(O,{title:u("Confirm Your Action"),message:u("Would you like to create this instalment ?"),onAction:s=>{s&&v.post(`/api/orders/${this.order.id}/instalments`,{instalment:r}).subscribe({next:n=>{this.loadInstalments(),p.success(n.message).subscribe()},error:n=>{p.error(n.message||u("An unexpected error has occurred")).subscribe()}})}})},deleteInstalment(r){Popup.show(O,{title:u("Confirm Your Action"),message:u("Would you like to delete this instalment ?"),onAction:s=>{s&&v.delete(`/api/orders/${this.order.id}/instalments/${r.id}`).subscribe({next:n=>{const _=this.instalments.indexOf(r);this.instalments.splice(_,1),p.success(n.message).subscribe()},error:n=>{p.error(n.message||u("An unexpected error has occurred")).subscribe()}})}})},async markAsPaid(r){try{const s=await new Promise((n,_)=>{Popup.show(Nr,{order:this.order,instalment:r,resolve:n,reject:_})});this.loadInstalments()}catch{}},togglePriceEdition(r){r.paid||(r.price_clicked=!r.price_clicked,this.$forceUpdate(),r.price_clicked&&setTimeout(()=>{this.$refs.amount[0].select()},100))},updateInstalment(r){Popup.show(O,{title:u("Confirm Your Action"),message:u("Would you like to update that instalment ?"),onAction:s=>{s&&v.put(`/api/orders/${this.order.id}/instalments/${r.id}`,{instalment:r}).subscribe({next:n=>{p.success(n.message).subscribe()},error:n=>{p.error(n.message||u("An unexpected error has occurred")).subscribe()}})}})},toggleDateEdition(r){r.paid||(r.date_clicked=!r.date_clicked,this.$forceUpdate(),r.date_clicked&&setTimeout(()=>{this.$refs.date[0].select()},200))}}},Lr={class:"-mx-4 flex-auto flex flex-wrap"},Br={class:"flex flex-auto"},Gr={class:"w-full mb-2 flex-wrap"},Er={class:"w-full mb-2 px-4"},Wr={class:"font-semibold text-secondary pb-2 border-b border-info-primary"},Mr={class:"px-4"},Hr={class:"border-table-th-edge border-t text-primary"},zr={class:"p-2"},Jr=["onClick"],Kr={key:1},Xr=["onBlur","onUpdate:modelValue"],Zr={class:"flex items-center"},en={class:"flex items-center px-2 h-full border-r"},sn=["onClick"],tn={key:1},rn=["onUpdate:modelValue","onBlur"],nn={key:0,class:"w-36 justify-center flex items-center px-2 h-full border-r"},on={class:"px-2"},ln={class:"px-2"},dn={class:"px-2"},an={key:1,class:"w-36 justify-center flex items-center px-2 h-full border-r"},cn={class:"px-2"},un={class:"ns-button info"},_n=["onClick"],mn=e("i",{class:"las la-plus"},null,-1),pn={key:2,class:"w-36 justify-center flex items-center px-2 h-full"},fn={class:"ns-button info"},hn=["onClick"],bn=e("i",{class:"las la-print"},null,-1),yn={class:"flex justify-between p-2 border-r border-b border-l elevation-surface"},vn={class:"flex items-center justify-center"},xn={class:"ml-1 text-sm"},wn={class:"-mx-2 flex flex-wrap items-center"},gn={class:"px-2"},kn={class:"px-2"},Pn={class:"ns-button info"};function Cn(r,s,n,_,o,t){const b=h("ns-icon-button");return d(),a("div",Lr,[e("div",Br,[e("div",Gr,[e("div",Er,[e("h3",Wr,i(t.__("Instalments")),1)]),e("div",Mr,[e("ul",Hr,[(d(!0),a(x,null,w(o.instalments,l=>(d(),a("li",{class:G([l.paid?"success":"info","border-b border-l flex justify-between elevation-surface"]),key:l.id},[e("span",zr,[l.date_clicked?m("",!0):(d(),a("span",{key:0,onClick:c=>t.toggleDateEdition(l)},i(l.date),9,Jr)),l.date_clicked?(d(),a("span",Kr,[T(e("input",{onBlur:c=>t.toggleDateEdition(l),"onUpdate:modelValue":c=>l.date=c,type:"date",ref_for:!0,ref:"date",class:"border border-info-primary rounded"},null,40,Xr),[[L,l.date]])])):m("",!0)]),e("div",Zr,[e("div",en,[l.price_clicked?m("",!0):(d(),a("span",{key:0,onClick:c=>t.togglePriceEdition(l)},i(t.nsCurrency(l.amount)),9,sn)),l.price_clicked?(d(),a("span",tn,[T(e("input",{ref_for:!0,ref:"amount","onUpdate:modelValue":c=>l.amount=c,onBlur:c=>t.togglePriceEdition(l),type:"text",class:"border border-info-primary p-1"},null,40,rn),[[L,l.amount]])])):m("",!0)]),!l.paid&&l.id?(d(),a("div",nn,[e("div",on,[y(b,{type:"success",onClick:c=>t.markAsPaid(l),className:"la-money-bill-wave-alt"},null,8,["onClick"])]),e("div",ln,[y(b,{type:"info",onClick:c=>t.updateInstalment(l),className:"la-save"},null,8,["onClick"])]),e("div",dn,[y(b,{type:"error",onClick:c=>t.deleteInstalment(l),className:"la-trash-alt"},null,8,["onClick"])])])):m("",!0),!l.paid&&!l.id?(d(),a("div",an,[e("div",cn,[e("div",un,[e("button",{onClick:c=>t.createInstalment(l),class:"px-3 py-1 rounded-full"},[mn,j(" "+i(t.__("Create")),1)],8,_n)])])])):m("",!0),l.paid?(d(),a("div",pn,[e("div",fn,[e("button",{onClick:c=>t.showReceipt(l),class:"px-3 text-xs py-1 rounded-full"},[bn,j(" "+i(t.__("Receipt")),1)],8,hn)])])):m("",!0)])],2))),128)),e("li",yn,[e("div",vn,[e("span",null,i(t.__("Total :"))+" "+i(t.nsCurrency(n.order.total)),1),e("span",xn," ("+i(t.__("Remaining :"))+" "+i(t.nsCurrency(n.order.total-t.totalInstalments))+") ",1)]),e("div",wn,[e("span",gn,i(t.__("Instalments:"))+" "+i(t.nsCurrency(t.totalInstalments)),1),e("span",kn,[e("div",Pn,[e("button",{onClick:s[0]||(s[0]=l=>t.addInstalment()),class:"rounded-full px-3 py-1"},i(t.__("Add Instalment")),1)])])])])])])])])])}const Sn=F(Yr,[["render",Cn]]),jn={name:"ns-orders-preview-popup",props:["popup"],data(){return{active:"details",order:new Object,rawOrder:new Object,products:[],payments:[],options:null,print:new D({urls:systemUrls,options:systemOptions}),settings:null,orderDetailLoaded:!1}},components:{nsOrderRefund:Ze,nsOrderPayment:As,nsOrderDetails:Dr,nsOrderInstalments:Sn},computed:{isVoidable(){return["paid","partially_paid","unpaid"].includes(this.order.payment_status)},isDeleteAble(){return["hold"].includes(this.order.payment_status)}},methods:{__:u,popupResolver:q,popupCloser:I,nsCurrency:V,closePopup(r=!1){this.popupResolver(r)},setActive(r){this.active=r},printOrder(){this.print.process(this.order.id,"sale")},refresh(){this.loadOrderDetails(this.order.id)},loadOrderDetails(r){this.orderDetailLoaded=!1,z([v.get(`/api/orders/${r}`),v.get(`/api/orders/${r}/products`),v.get(`/api/orders/${r}/payments`)]).subscribe(s=>{this.orderDetailLoaded=!0,this.order=s[0],this.products=s[1],this.payments=s[2]})},deleteOrder(){Popup.show(O,{title:u("Confirm Your Action"),message:u("Would you like to delete this order"),onAction:r=>{r&&v.delete(`/api/orders/${this.order.id}`).subscribe({next:s=>{p.success(s.message).subscribe(),this.refreshCrudTable(),this.closePopup(!0)},error:s=>{p.error(s.message).subscribe()}})}})},voidOrder(){try{const r=new Promise((s,n)=>{Popup.show(X,{resolve:s,reject:n,title:u("Confirm Your Action"),message:u("The current order will be void. This action will be recorded. Consider providing a reason for this operation"),onAction:_=>{_!==!1&&v.post(`/api/orders/${this.order.id}/void`,{reason:_}).subscribe({next:o=>{p.success(o.message).subscribe(),this.refreshCrudTable(),this.closePopup(!0)},error:o=>{p.error(o.message).subscribe()}})}})})}catch(r){console.log(r)}},refreshCrudTable(){this.popup.params.component.$emit("updated",!0)}},watch:{active(){this.active==="details"&&this.loadOrderDetails(this.rawOrder.id)}},mounted(){this.rawOrder=this.popup.params.order,this.options=systemOptions,this.urls=systemUrls,this.loadOrderDetails(this.rawOrder.id),this.popupCloser()}},On={class:"h-95vh w-95vw md:h-6/7-screen md:w-6/7-screen overflow-hidden shadow-xl ns-box flex flex-col"},An={class:"border-b ns-box-header p-3 flex items-center justify-between"},Fn={class:"p-2 ns-box-body overflow-hidden flex flex-auto"},Vn={key:1,class:"h-full w-full flex items-center justify-center"},Dn={key:0,class:"p-2 flex justify-between border-t ns-box-footer"},Un=e("i",{class:"las la-ban"},null,-1),Tn=e("i",{class:"las la-trash"},null,-1),Rn=e("i",{class:"las la-print"},null,-1);function In(r,s,n,_,o,t){const b=h("ns-close-button"),l=h("ns-order-details"),c=h("ns-tabs-item"),g=h("ns-order-payment"),f=h("ns-order-refund"),C=h("ns-order-instalments"),E=h("ns-tabs"),W=h("ns-spinner"),Q=h("ns-button");return d(),a("div",On,[e("div",An,[e("div",null,[e("h3",null,i(t.__("Order Options")),1)]),e("div",null,[y(b,{onClick:s[0]||(s[0]=S=>t.closePopup(!0))})])]),e("div",Fn,[o.order.id?(d(),k(E,{key:0,active:o.active,onActive:s[5]||(s[5]=S=>t.setActive(S))},{default:P(()=>[y(c,{label:t.__("Details"),identifier:"details",class:"overflow-y-auto"},{default:P(()=>[o.order?(d(),k(l,{key:0,order:o.order},null,8,["order"])):m("",!0)]),_:1},8,["label"]),y(c,{visible:!["order_void","hold","refunded","partially_refunded"].includes(o.order.payment_status),label:t.__("Payments"),identifier:"payments"},{default:P(()=>[o.order?(d(),k(g,{key:0,onChanged:s[1]||(s[1]=S=>t.refresh()),order:o.order},null,8,["order"])):m("",!0)]),_:1},8,["visible","label"]),y(c,{visible:!["order_void","hold","refunded"].includes(o.order.payment_status),label:t.__("Refund & Return"),identifier:"refund"},{default:P(()=>[o.order?(d(),k(f,{key:0,onLoadTab:s[2]||(s[2]=S=>t.setActive(S)),onChanged:s[3]||(s[3]=S=>t.refresh()),order:o.order},null,8,["order"])):m("",!0)]),_:1},8,["visible","label"]),y(c,{visible:["partially_paid","unpaid"].includes(o.order.payment_status)&&o.order.support_instalments,label:t.__("Installments"),identifier:"instalments"},{default:P(()=>[o.order?(d(),k(C,{key:0,onChanged:s[4]||(s[4]=S=>t.refresh()),order:o.order},null,8,["order"])):m("",!0)]),_:1},8,["visible","label"])]),_:1},8,["active"])):m("",!0),o.order.id?m("",!0):(d(),a("div",Vn,[y(W)]))]),o.orderDetailLoaded?(d(),a("div",Dn,[e("div",null,[t.isVoidable?(d(),k(Q,{key:0,onClick:s[6]||(s[6]=S=>t.voidOrder()),type:"error"},{default:P(()=>[Un,j(" "+i(t.__("Void")),1)]),_:1})):m("",!0),t.isDeleteAble?(d(),k(Q,{key:1,onClick:s[7]||(s[7]=S=>t.deleteOrder()),type:"error"},{default:P(()=>[Tn,j(" "+i(t.__("Delete")),1)]),_:1})):m("",!0)]),e("div",null,[y(Q,{onClick:s[8]||(s[8]=S=>t.printOrder()),type:"info"},{default:P(()=>[Rn,j(" "+i(t.__("Print")),1)]),_:1})])])):m("",!0)])}const Gn=F(jn,[["render",In]]);export{D as P,rt as a,Gn as n}; diff --git a/public/build/assets/ns-orders-preview-popup-MUf9kQx1.js b/public/build/assets/ns-orders-preview-popup-MUf9kQx1.js deleted file mode 100644 index cb1015378..000000000 --- a/public/build/assets/ns-orders-preview-popup-MUf9kQx1.js +++ /dev/null @@ -1 +0,0 @@ -var M=Object.defineProperty;var H=(r,s,n)=>s in r?M(r,s,{enumerable:!0,configurable:!0,writable:!0,value:n}):r[s]=n;var T=(r,s,n)=>(H(r,typeof s!="symbol"?s+"":s,n),n);import{b as p,a as v}from"./bootstrap-B7E2wy_a.js";import{_ as u,n as V}from"./currency-ZXKMLAC0.js";import{k as R,d as I,p as q,j as A,s as Y,v as B,Z as z}from"./tax-BACo6kIE.js";import{_ as F}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as h,o as d,c,b as e,t as i,g as y,F as x,e as w,h as k,f as m,w as P,j as S,C as D,n as L}from"./runtime-core.esm-bundler-DCfIpxDt.js";import{a as Q,n as O,b as J,i as Z,d as K}from"./ns-prompt-popup-BbWKrSku.js";import"./index.es-BED_8l8F.js";const X={props:["popup"],mounted(){this.popuCloser(),this.loadFields(),this.product=this.popup.params.product},data(){return{formValidation:new R,fields:[],product:null}},methods:{__:u,popuCloser:I,close(){this.popup.params.reject(!1),this.popup.close()},addProduct(){if(this.formValidation.validateFields(this.fields),this.formValidation.fieldsValid(this.fields)){const r=this.formValidation.extractFields(this.fields),s={...this.product,...r};return this.popup.params.resolve(s),this.close()}p.error(u("The form is not valid.")).subscribe()},loadFields(){v.get("/api/fields/ns.refund-product").subscribe(r=>{this.fields=this.formValidation.createFields(r),this.fields.forEach(s=>{s.value=this.product[s.name]||""})})}}},ee={class:"shadow-xl ns-box w-95vw md:w-3/5-screen lg:w-3/7-screen h-95vh md:h-3/5-screen lg:h-3/7-screen overflow-hidden flex flex-col"},se={class:"p-2 flex justify-between border-b ns-box-header items-center"},te={class:"text-semibold"},re={class:"flex-auto overflow-y-auto relative ns-scrollbar"},ne={class:"p-2"},ie={key:0,class:"h-full w-full flex items-center justify-center"},oe={class:"p-2 flex justify-between items-center border-t ns-box-body"},le=e("div",null,null,-1);function de(r,s,n,_,o,t){const b=h("ns-close-button"),l=h("ns-field"),a=h("ns-spinner"),g=h("ns-button");return d(),c("div",ee,[e("div",se,[e("h3",te,i(t.__("Products")),1),e("div",null,[y(b,{onClick:s[0]||(s[0]=f=>t.close())})])]),e("div",re,[e("div",ne,[(d(!0),c(x,null,w(o.fields,(f,C)=>(d(),k(l,{key:C,field:f},null,8,["field"]))),128))]),o.fields.length===0?(d(),c("div",ie,[y(a)])):m("",!0)]),e("div",oe,[le,e("div",null,[y(g,{onClick:s[1]||(s[1]=f=>t.addProduct()),type:"info"},{default:P(()=>[S(i(t.__("Add Product")),1)]),_:1})])])])}const G=F(X,[["render",de]]),ae={components:{nsNumpad:Q},props:["popup"],data(){return{product:null,seeValue:0,availableQuantity:0}},mounted(){this.product=this.popup.params.product,this.availableQuantity=this.popup.params.availableQuantity,this.seeValue=this.product.quantity},methods:{__:u,popupResolver:q,close(){this.popup.params.reject(!1),this.popup.close()},setChangedValue(r){this.seeValue=r},updateQuantity(r){if(r>this.availableQuantity)return p.error("Unable to proceed as the quantity provided is exceed the available quantity.").subscribe();this.product.quantity=parseFloat(r),this.popup.params.resolve(this.product),this.popup.close()}}},ce={class:"shadow-xl ns-box overflow-hidden w-95vw md:w-4/6-screen lg:w-3/7-screen"},ue={class:"p-2 flex justify-between ns-box-header"},_e={class:"font-semibold"},me={key:0,class:"border-t border-b ns-box-body py-2 flex items-center justify-center text-2xl font-semibold"},pe={class:"text-primary text-sm"},fe={key:1,class:"flex-auto overflow-y-auto p-2"};function he(r,s,n,_,o,t){const b=h("ns-close-button"),l=h("ns-numpad");return d(),c("div",ce,[e("div",ue,[e("h3",_e,i(t.__("Quantity")),1),e("div",null,[y(b,{onClick:s[0]||(s[0]=a=>t.close())})])]),o.product?(d(),c("div",me,[e("span",null,i(o.seeValue),1),e("span",pe,"("+i(o.availableQuantity)+" "+i(t.__("available"))+")",1)])):m("",!0),o.product?(d(),c("div",fe,[y(l,{value:o.product.quantity,onNext:s[1]||(s[1]=a=>t.updateQuantity(a)),onChanged:s[2]||(s[2]=a=>t.setChangedValue(a))},null,8,["value"])])):m("",!0)])}const be=F(ae,[["render",he]]);class U{constructor({urls:s,options:n}){T(this,"urls");T(this,"options");T(this,"printingURL",{refund:"refund_printing_url",sale:"sale_printing_url",payment:"payment_printing_url"});this.urls=s,this.options=n}processRegularPrinting(s,n){const _=document.querySelector("#printing-section");_&&_.remove();const o=this.urls[this.printingURL[n]].replace("{reference_id}",s),t=document.createElement("iframe");t.id="printing-section",t.className="hidden",t.src=o,document.body.appendChild(t),setTimeout(()=>{document.querySelector("#printing-section").remove()},5e3)}process(s,n,_="aloud"){switch(this.options.ns_pos_printing_gateway){case"default":this.processRegularPrinting(s,n);break;default:this.processCustomPrinting(s,this.options.ns_pos_printing_gateway,n,_);break}}processCustomPrinting(s,n,_,o="aloud"){const t={printed:!1,reference_id:s,gateway:n,document:_,mode:o};nsHooks.applyFilters("ns-custom-print",{params:t,promise:()=>new Promise((l,a)=>{a({status:"failed",message:__("The selected print gateway doesn't support this type of printing.","NsPrintAdapter")})})}).promise().then(l=>{nsSnackBar.success(l.message).subscribe()}).catch(l=>{nsSnackBar.error(l.message||__("An error unexpected occured while printing.")).subscribe()})}}const ye={components:{nsNumpad:Q},props:["order"],computed:{total(){return this.refundables.length>0?this.refundables.map(r=>parseFloat(r.unit_price)*parseFloat(r.quantity)).reduce((r,s)=>r+s)+this.shippingFees:0+this.shippingFees},shippingFees(){return this.refundShipping?this.order.shipping:0}},data(){return{isSubmitting:!1,formValidation:new R,refundables:[],paymentOptions:[],paymentField:[],print:new U({urls:systemUrls,options:systemOptions}),refundShipping:!1,selectedPaymentGateway:!1,screen:0,selectFields:[{type:"select",options:this.order.products.map(r=>({label:`${r.name} - ${r.unit.name} (x${r.quantity})`,value:r.id})),validation:"required",name:"product_id",label:u("Product"),description:u("Select the product to perform a refund.")}]}},methods:{__:u,nsCurrency:V,updateScreen(r){this.screen=r},toggleRefundShipping(r){this.refundShipping=r,this.refundShipping},proceedPayment(){if(this.selectedPaymentGateway===!1)return p.error(u("Please select a payment gateway before proceeding.")).subscribe();if(this.total===0)return p.error(u("There is nothing to refund.")).subscribe();if(this.screen===0)return p.error(u("Please provide a valid payment amount.")).subscribe();A.show(O,{title:u("Confirm Your Action"),message:u("The refund will be made on the current order."),onAction:r=>{r&&this.doProceed()}})},doProceed(){const r={products:this.refundables,total:this.screen,payment:{identifier:this.selectedPaymentGateway},refund_shipping:this.refundShipping};this.isSubmitting=!0,v.post(`/api/orders/${this.order.id}/refund`,r).subscribe({next:s=>{this.isSubmitting=!1,this.$emit("changed",!0),s.data.order.payment_status==="refunded"&&this.$emit("loadTab","details"),this.print.process(s.data.orderRefund.id,"refund"),p.success(s.message).subscribe()},error:s=>{this.isSubmitting=!1,p.error(s.message).subscribe()}})},addProduct(){if(this.formValidation.validateFields(this.selectFields),!this.formValidation.fieldsValid(this.selectFields))return p.error(u("Please select a product before proceeding.")).subscribe();const r=this.formValidation.extractFields(this.selectFields),s=this.order.products.filter(t=>t.id===r.product_id),n=this.refundables.filter(t=>t.id===r.product_id);if(n.length>0&&n.map(b=>parseInt(b.quantity)).reduce((b,l)=>b+l)===s[0].quantity)return p.error(u("Not enough quantity to proceed.")).subscribe();if(s[0].quantity===0)return p.error(u("Not enough quantity to proceed.")).subscribe();const _={...s[0],condition:"",description:""};new Promise((t,b)=>{A.show(G,{resolve:t,reject:b,product:_})}).then(t=>{t.quantity=this.getProductOriginalQuantity(t.id)-this.getProductUsedQuantity(t.id),this.refundables.push(t)},t=>t)},getProductOriginalQuantity(r){const s=this.order.products.filter(n=>n.id===r);return s.length>0?s.map(n=>parseFloat(n.quantity)).reduce((n,_)=>n+_):0},getProductUsedQuantity(r){const s=this.refundables.filter(n=>n.id===r);return s.length>0?s.map(_=>parseFloat(_.quantity)).reduce((_,o)=>_+o):0},openSettings(r){new Promise((n,_)=>{A.show(G,{resolve:n,reject:_,product:r})}).then(n=>{const _=this.refundables.indexOf(r);this.$set(this.refundables,_,n)},n=>n)},async selectPaymentGateway(){try{this.selectedPaymentGateway=await new Promise((r,s)=>{A.show(J,{resolve:r,reject:s,value:[this.selectedPaymentOption],...this.paymentField[0]})}),this.selectedPaymentGatewayLabel=this.paymentField[0].options.filter(r=>r.value===this.selectedPaymentGateway)[0].label}catch{p.error(u("An error has occured while seleting the payment gateway.")).subscribe()}},changeQuantity(r){new Promise((n,_)=>{const o=this.getProductOriginalQuantity(r.id)-this.getProductUsedQuantity(r.id)+parseFloat(r.quantity);A.show(be,{resolve:n,reject:_,product:r,availableQuantity:o})}).then(n=>{if(n.quantity>this.getProductUsedQuantity(r.id)-r.quantity){const _=this.refundables.indexOf(r);this.$set(this.refundables,_,n)}})},deleteProduct(r){new Promise((s,n)=>{A.show(O,{title:u("Confirm Your Action"),message:u("Would you like to delete this product ?"),onAction:_=>{if(_){const o=this.refundables.indexOf(r);this.refundables.splice(o,1)}}})})}},mounted(){this.selectFields=this.formValidation.createFields(this.selectFields),v.get("/api/orders/payments").subscribe(r=>{this.paymentField=r})}},ve={class:"-m-4 flex-auto flex flex-wrap relative"},xe={key:0,class:"bg-overlay h-full w-full flex items-center justify-center absolute z-30"},we={class:"px-4 w-full lg:w-1/2"},ge={class:"py-2 border-b-2 text-primary border-info-primary"},ke={class:"my-2"},Pe={class:"border-b border-info-primary flex justify-between items-center mb-2"},Ce={class:"flex-auto flex-col flex"},je={class:"p-2 flex"},Se={class:"flex justify-between p-2"},Oe={class:"flex items-center text-primary"},Ae={key:0,class:"mr-2"},Fe={class:"py-1 border-b-2 text-primary border-info-primary"},Ve={class:"px-2 text-primary flex justify-between flex-auto"},Ue={class:"flex flex-col"},Te={class:"py-2"},De={key:0,class:"rounded-full px-2 py-1 text-xs bg-error-tertiary mx-2 text-white"},Re={key:1,class:"rounded-full px-2 py-1 text-xs bg-success-tertiary mx-2 text-white"},Ie={class:"flex items-center justify-center"},qe={class:"py-1 flex items-center cursor-pointer border-b border-dashed border-info-primary"},$e={class:"flex"},Qe=["onClick"],Ne=e("i",{class:"las la-cog text-xl"},null,-1),Ye=[Ne],Be=["onClick"],Ge=e("i",{class:"las la-trash"},null,-1),Le=[Ge],Ee=["onClick"],We={class:"px-4 w-full lg:w-1/2"},Me={class:"py-2 border-b-2 text-primary border-info-primary"},He={class:"py-2"},ze={class:"elevation-surface border font-semibold flex mb-2 p-2 justify-between"},Je={class:"elevation-surface border success font-semibold flex mb-2 p-2 justify-between"},Ze={class:"elevation-surface border font-semibold flex mb-2 p-2 justify-between"};function Ke(r,s,n,_,o,t){const b=h("ns-spinner"),l=h("ns-field"),a=h("ns-checkbox"),g=h("ns-numpad-plus");return d(),c("div",ve,[o.isSubmitting?(d(),c("div",xe,[y(b)])):m("",!0),e("div",we,[e("h3",ge,i(t.__("Refund With Products")),1),e("div",ke,[e("ul",null,[e("li",Pe,[e("div",Ce,[e("div",je,[(d(!0),c(x,null,w(o.selectFields,(f,C)=>(d(),k(l,{field:f,key:C},null,8,["field"]))),128))]),e("div",Se,[e("div",Oe,[n.order.shipping>0?(d(),c("span",Ae,i(t.__("Refund Shipping")),1)):m("",!0),n.order.shipping>0?(d(),k(a,{key:1,onChange:s[0]||(s[0]=f=>t.toggleRefundShipping(f)),checked:o.refundShipping},null,8,["checked"])):m("",!0)]),e("div",null,[e("button",{onClick:s[1]||(s[1]=f=>t.addProduct()),class:"border rounded-full px-2 py-1 ns-inset-button info"},i(t.__("Add Product")),1)])])])]),e("li",null,[e("h4",Fe,i(t.__("Products")),1)]),(d(!0),c(x,null,w(o.refundables,f=>(d(),c("li",{key:f.id,class:"elevation-surface border flex justify-between items-center mb-2"},[e("div",Ve,[e("div",Ue,[e("p",Te,[e("span",null,i(f.name),1),f.condition==="damaged"?(d(),c("span",De,i(t.__("Damaged")),1)):m("",!0),f.condition==="unspoiled"?(d(),c("span",Re,i(t.__("Unspoiled")),1)):m("",!0)]),e("small",null,i(f.unit.name),1)]),e("div",Ie,[e("span",qe,i(t.nsCurrency(f.unit_price*f.quantity)),1)])]),e("div",$e,[e("p",{onClick:C=>t.openSettings(f),class:"p-2 border-l border-info-primary cursor-pointer text-primary ns-numpad-key w-16 h-16 flex items-center justify-center"},Ye,8,Qe),e("p",{onClick:C=>t.deleteProduct(f),class:"p-2 border-l border-info-primary cursor-pointer text-primary ns-numpad-key w-16 h-16 flex items-center justify-center"},Le,8,Be),e("p",{onClick:C=>t.changeQuantity(f),class:"p-2 border-l border-info-primary cursor-pointer text-primary ns-numpad-key w-16 h-16 flex items-center justify-center"},i(f.quantity),9,Ee)])]))),128))])])]),e("div",We,[e("h3",Me,i(t.__("Summary")),1),e("div",He,[e("div",ze,[e("span",null,i(t.__("Total")),1),e("span",null,i(t.nsCurrency(t.total)),1)]),e("div",Je,[e("span",null,i(t.__("Paid")),1),e("span",null,i(t.nsCurrency(n.order.tendered)),1)]),e("div",{onClick:s[2]||(s[2]=f=>t.selectPaymentGateway()),class:"elevation-surface border info font-semibold flex mb-2 p-2 justify-between cursor-pointer"},[e("span",null,i(t.__("Payment Gateway")),1),e("span",null,i(o.selectedPaymentGateway?r.selectedPaymentGatewayLabel:"N/A"),1)]),e("div",Ze,[e("span",null,i(t.__("Screen")),1),e("span",null,i(t.nsCurrency(o.screen)),1)]),e("div",null,[y(g,{currency:!0,onChanged:s[3]||(s[3]=f=>t.updateScreen(f)),value:o.screen,onNext:s[4]||(s[4]=f=>t.proceedPayment(f))},null,8,["value"])])])])])}const Xe=F(ye,[["render",Ke]]);class N{getTypeLabel(s){const n=typeLabels.filter(_=>_.value===s);return n.length>0?n[0].label:u("Unknown Status")}getDeliveryStatus(s){const n=deliveryStatuses.filter(_=>_.value===s);return n.length>0?n[0].label:u("Unknown Status")}getProcessingStatus(s){const n=processingStatuses.filter(_=>_.value===s);return n.length>0?n[0].label:u("Unknown Status")}getPaymentStatus(s){const n=paymentLabels.filter(_=>_.value===s);return n.length>0?n[0].label:u("Unknown Status")}}const es={props:["order"],data(){return{labels:new N,validation:new R,inputValue:0,print:new U({urls:systemUrls,options:systemOptions}),fields:[],paymentTypes}},computed:{paymentsLabels(){const r=new Object;return this.paymentTypes.forEach(s=>{r[s.value]=s.label}),r}},methods:{__:u,nsCurrency:V,updateValue(r){this.inputValue=r},loadPaymentFields(){v.get("/api/orders/payments").subscribe(r=>{this.fields=this.validation.createFields(r)})},printPaymentReceipt(r){this.print.process(r.id,"payment")},submitPayment(r){if(this.validation.validateFields(this.fields),!this.validation.fieldsValid(this.fields))return p.error(u("Unable to proceed the form is not valid")).subscribe();if(parseFloat(r)==0)return p.error(u("Please provide a valid value")).subscribe();r=parseFloat(r);const s={...this.validation.extractFields(this.fields),value:r};Popup.show(O,{title:u("Confirm Your Action"),message:u("You make a payment for {amount}. A payment can't be canceled. Would you like to proceed ?").replace("{amount}",V(r)),onAction:n=>{n&&v.post(`/api/orders/${this.order.id}/payments`,s).subscribe(_=>{p.success(_.message).subscribe(),this.$emit("changed")},_=>{p.error(_.message).subscribe()})}})}},components:{nsNumpad:Q},mounted(){this.loadPaymentFields()}},ss={class:""},ts={class:"flex -mx-4 flex-wrap"},rs={class:"px-2 w-full md:w-1/2"},is={class:"my-1 h-12 py-1 px-2 flex justify-between items-center elevation-surface info border text-xl font-bold"},os={class:"px-2 w-full md:w-1/2"},ls={class:"my-1 h-12 py-1 px-2 flex justify-between items-center elevation-surface success border text-xl font-bold"},ds={class:"px-2 w-full md:w-1/2"},as={class:"my-1 h-12 py-1 px-2 flex justify-between items-center elevation-surface error border text-xl font-bold"},cs={key:0},us={key:1},_s={class:"px-2 w-full md:w-1/2"},ms={class:"my-1 h-12 py-1 px-2 flex justify-between items-center elevation-surface warning border text-xl font-bold"},ps={class:"flex -mx-4 flex-wrap"},fs={class:"px-2 w-full mb-4 md:w-1/2"},hs={key:0},bs={class:"font-semibold border-b-2 border-info-primary py-2"},ys={class:"py-2"},vs={class:"my-2 px-2 h-12 flex justify-end items-center border elevation-surface"},xs={key:1,class:"flex items-center justify-center h-full"},ws={class:"text-primary font-semibold"},gs={class:"px-2 w-full mb-4 md:w-1/2"},ks={class:"font-semibold border-b-2 border-info-primary py-2 mb-2"},Ps={class:"flex items-center"},Cs=["onClick"],js=e("i",{class:"las la-print"},null,-1),Ss=[js];function Os(r,s,n,_,o,t){const b=h("ns-field"),l=h("ns-numpad-plus");return d(),c("div",ss,[e("div",ts,[e("div",rs,[e("div",is,[e("span",null,i(t.__("Total")),1),e("span",null,i(t.nsCurrency(n.order.total)),1)])]),e("div",os,[e("div",ls,[e("span",null,i(t.__("Paid")),1),e("span",null,i(t.nsCurrency(n.order.tendered)),1)])]),e("div",ds,[e("div",as,[e("span",null,i(t.__("Unpaid")),1),n.order.total-n.order.tendered>0?(d(),c("span",cs,i(t.nsCurrency(n.order.total-n.order.tendered)),1)):m("",!0),n.order.total-n.order.tendered<=0?(d(),c("span",us,i(t.nsCurrency(0)),1)):m("",!0)])]),e("div",_s,[e("div",ms,[e("span",null,i(t.__("Customer Account")),1),e("span",null,i(t.nsCurrency(n.order.customer.account_amount)),1)])])]),e("div",ps,[e("div",fs,[n.order.payment_status!=="paid"?(d(),c("div",hs,[e("h3",bs,i(t.__("Payment")),1),e("div",ys,[(d(!0),c(x,null,w(o.fields,(a,g)=>(d(),k(b,{field:a,key:g},null,8,["field"]))),128)),e("div",vs,i(t.nsCurrency(o.inputValue)),1),y(l,{floating:!0,onNext:s[0]||(s[0]=a=>t.submitPayment(a)),onChanged:s[1]||(s[1]=a=>t.updateValue(a)),value:o.inputValue},null,8,["value"])])])):m("",!0),n.order.payment_status==="paid"?(d(),c("div",xs,[e("h3",ws,i(t.__("No payment possible for paid order.")),1)])):m("",!0)]),e("div",gs,[e("h3",ks,i(t.__("Payment History")),1),e("ul",null,[(d(!0),c(x,null,w(n.order.payments,a=>(d(),c("li",{key:a.id,class:"p-2 flex items-center justify-between text-shite border elevation-surface mb-2"},[e("span",Ps,[e("a",{href:"javascript:void(0)",onClick:g=>t.printPaymentReceipt(a),class:"m-1 rounded-full hover:bg-info-tertiary hover:text-white flex items-center justify-center h-8 w-8"},Ss,8,Cs),S(" "+i(t.paymentsLabels[a.identifier]||t.__("Unknown")),1)]),e("span",null,i(t.nsCurrency(a.value)),1)]))),128))])])])])}const As=F(es,[["render",Os]]),Fs={name:"ns-orders-refund-popup",props:["popup"],data(){return{order:null,refunds:[],view:"summary",previewed:null,loaded:!1,options:systemOptions,systemUrls,print:new U({urls:systemUrls,options:systemOptions})}},methods:{__:u,nsCurrency:V,popupCloser:I,popupResolver:q,toggleProductView(r){this.view="details",this.previewed=r},loadOrderRefunds(){nsHttpClient.get(`/api/orders/${this.order.id}/refunds`).subscribe(r=>{this.loaded=!0,this.refunds=r.refunds},r=>{p.error(r.message).subscribe()})},close(){this.popup.close()},printRefundReceipt(r){this.print.process(r.id,"refund")}},mounted(){this.order=this.popup.params.order,this.popupCloser(),this.loadOrderRefunds()}},Vs={class:"shadow-lg w-95vw h-95vh md:w-3/5-screen md:h-3/5-screen ns-box flex flex-col overflow-hidden"},Us={class:"border-b p-2 flex items-center justify-between ns-box-header"},Ts={class:"flex"},Ds={class:"overflow-auto flex-auto ns-box-body"},Rs={key:0,class:"flex h-full w-full items-center justify-center"},Is={key:1,class:"flex h-full w-full items-center flex-col justify-center"},qs=e("i",{class:"las la-laugh-wink text-4xl"},null,-1),$s={class:"text-sm text-soft-primary text-center"},Qs={class:"w-full md:flex-auto p-2"},Ns={class:"font-semibold mb-1"},Ys={class:"flex -mx-1 text-sm text-primary"},Bs={class:"px-1"},Gs={class:"px-1"},Ls=["onClick"],Es=e("i",{class:"las la-eye"},null,-1),Ws=[Es],Ms=["onClick"],Hs=e("i",{class:"las la-print"},null,-1),zs=[Hs],Js={class:"w-full md:flex-auto p-2"},Zs={class:"font-semibold mb-1"},Ks={class:"flex -mx-1 text-sm text-primary"},Xs={class:"px-1"},et={class:"px-1"},st={class:"px-1"};function tt(r,s,n,_,o,t){const b=h("ns-close-button"),l=h("ns-spinner");return d(),c("div",Vs,[e("div",Us,[e("h3",null,i(t.__("Order Refunds")),1),e("div",Ts,[o.view==="details"?(d(),c("div",{key:0,onClick:s[0]||(s[0]=a=>o.view="summary"),class:"flex items-center justify-center cursor-pointer rounded-full px-3 border ns-inset-button mr-1"},i(t.__("Go Back")),1)):m("",!0),y(b,{onClick:s[1]||(s[1]=a=>t.close())})])]),e("div",Ds,[o.view==="summary"?(d(),c(x,{key:0},[o.loaded?m("",!0):(d(),c("div",Rs,[y(l,{size:"24"})])),o.loaded&&o.refunds.length===0?(d(),c("div",Is,[qs,e("p",$s,i(t.__("No refunds made so far. Good news right?")),1)])):m("",!0),o.loaded&&o.refunds.length>0?(d(!0),c(x,{key:2},w(o.refunds,a=>(d(),c("div",{class:"border-b border-box-edge flex flex-col md:flex-row",key:a.id},[e("div",Qs,[e("h3",Ns,i(o.order.code),1),e("div",null,[e("ul",Ys,[e("li",Bs,i(t.__("Total"))+" : "+i(t.nsCurrency(a.total)),1),e("li",Gs,i(t.__("By"))+" : "+i(a.author.username),1)])])]),e("div",{onClick:g=>t.toggleProductView(a),class:"w-full md:w-16 cursor-pointer hover:bg-info-secondary hover:border-info-primary hover:text-white text-lg flex items-center justify-center border-box-edge md:border-l"},Ws,8,Ls),e("div",{onClick:g=>t.printRefundReceipt(a),class:"w-full md:w-16 cursor-pointer hover:bg-info-secondary hover:border-info-primary hover:text-white text-lg flex items-center justify-center border-box-edge md:border-l"},zs,8,Ms)]))),128)):m("",!0)],64)):m("",!0),o.view==="details"?(d(!0),c(x,{key:1},w(o.previewed.refunded_products,a=>(d(),c("div",{class:"border-b border-box-edge flex flex-col md:flex-row",key:a.id},[e("div",Js,[e("h3",Zs,i(a.product.name),1),e("div",null,[e("ul",Ks,[e("li",Xs,i(t.__("Condition"))+" : "+i(a.condition),1),e("li",et,i(t.__("Quantity"))+" : "+i(a.quantity),1),e("li",st,i(t.__("Total"))+" : "+i(t.nsCurrency(a.total_price)),1)])])])]))),128)):m("",!0)])])}const rt=F(Fs,[["render",tt]]),nt={props:["order"],data(){return{processingStatuses,deliveryStatuses,labels:new N,showProcessingSelect:!1,showDeliverySelect:!1,systemUrls}},mounted(){},methods:{__:u,nsCurrency:V,submitProcessingChange(){A.show(O,{title:u("Would you proceed ?"),message:u("The processing status of the order will be changed. Please confirm your action."),onAction:r=>{r&&v.post(`/api/orders/${this.order.id}/processing`,{process_status:this.order.process_status}).subscribe({next:s=>{this.showProcessingSelect=!1,p.success(s.message).subscribe()},error:s=>{p.error(s.message||u("Unexpected error occurred.")).subscribe()}})}})},openRefunds(){try{const r=new Promise((s,n)=>{const _=this.order;A.show(rt,{order:_,resolve:s,reject:n})})}catch{}},submitDeliveryStatus(){A.show(O,{title:u("Would you proceed ?"),message:u("The delivery status of the order will be changed. Please confirm your action."),onAction:r=>{r&&v.post(`/api/orders/${this.order.id}/delivery`,{delivery_status:this.order.delivery_status}).subscribe({next:s=>{this.showDeliverySelect=!1,p.success(s.message).subscribe()},error:s=>{p.error(s.message||u("Unexpected error occurred.")).subscribe()}})}})}}},it={class:"-mx-4 flex flex-wrap"},ot={class:"flex-auto"},lt={class:"w-full mb-2 flex-wrap flex"},dt={class:"w-full mb-2 px-4"},at={class:"font-semibold text-secondary pb-2 border-b border-info-primary"},ct={class:"mb-2 w-full md:w-1/2 px-4"},ut={class:"elevation-surface border p-2 flex justify-between items-start"},_t={class:"text-semibold text-primary"},mt={class:"font-semibold text-secondary"},pt={class:"mb-2 w-full md:w-1/2 px-4"},ft={class:"p-2 flex justify-between items-start text-primary elevation-surface error border"},ht={class:"text-semibold"},bt={class:""},yt={key:0,class:"ml-1"},vt={key:1,class:"ml-1"},xt={class:"font-semibold text-primary"},wt={class:"mb-2 w-full md:w-1/2 px-4"},gt={class:"p-2 flex justify-between items-start elevation-surface border"},kt={class:"text-semibold text-primary"},Pt={class:"font-semibold text-secondary"},Ct={class:"mb-2 w-full md:w-1/2 px-4"},jt={class:"p-2 flex justify-between items-start text-primary elevation-surface error border"},St={class:"text-semibold"},Ot={class:"font-semibold text-primary"},At={class:"mb-2 w-full md:w-1/2 px-4"},Ft={class:"p-2 flex justify-between items-start border ns-notice success"},Vt={class:"text-semibold"},Ut={class:"font-semibold text-primary"},Tt={class:"mb-2 w-full md:w-1/2 px-4"},Dt={class:"p-2 flex justify-between items-start text-primary elevation-surface info border"},Rt={class:"text-semibold"},It={class:"font-semibold"},qt={class:"mb-2 w-full md:w-1/2 px-4"},$t={class:"p-2 flex justify-between items-start text-primary elevation-surface error border"},Qt={class:"text-semibold"},Nt={class:"font-semibold"},Yt={class:"mb-2 w-full md:w-1/2 px-4"},Bt={class:"p-2 flex justify-between items-start elevation-surface border"},Gt={class:"text-semibold"},Lt={class:"font-semibold"},Et={class:"px-4 w-full md:w-1/2 lg:w-2/4 mb-2"},Wt={class:"mb-2"},Mt={class:"font-semibold text-secondary pb-2 border-b border-info-primary"},Ht={class:"mb-2 p-2 flex justify-between items-start elevation-surface border"},zt={class:"text-semibold text-primary"},Jt={key:0,class:"font-semibold text-secondary"},Zt=["href"],Kt={class:"mb-2 p-2 flex justify-between items-start elevation-surface border"},Xt={class:"text-semibold text-primary"},er={class:"font-semibold text-secondary"},sr={class:"mb-2 p-2 flex justify-between items-start elevation-surface border"},tr={class:"text-semibold text-primary"},rr={class:"font-semibold text-secondary mt-2 md:mt-0 w-full md:w-auto"},nr={class:"w-full text-center"},ir={key:0,class:"flex-auto flex"},or={class:"ns-select flex items-center justify-center"},lr=["value"],dr={class:"pl-2 flex"},ar={class:"mb-2 p-2 flex flex-col md:flex-row justify-between items-center elevation-surface border"},cr={class:"text-semibold text-primary"},ur={class:"font-semibold text-secondary mt-2 md:mt-0 w-full md:w-auto"},_r={class:"w-full text-center"},mr={key:0,class:"flex-auto flex"},pr={class:"ns-select flex items-center justify-center"},fr=["value"],hr={class:"pl-2 flex"},br={class:"mb-2 p-2 flex justify-between items-start elevation-surface border"},yr={class:"text-semibold text-primary"},vr={class:"font-semibold text-secondary"},xr={class:"px-4 w-full md:w-1/2 lg:w-2/4 mb-2"},wr={class:"mb-2"},gr={class:"font-semibold text-secondary pb-2 border-b border-info-primary"},kr={class:"text-semibold text-primary"},Pr={class:"text-secondary text-sm"},Cr={class:"font-semibold text-secondary"},jr={class:"mb-2"},Sr={class:"font-semibold text-secondary pb-2 border-b border-info-primary flex justify-between"},Or={class:"text-semibold text-primary"},Ar={class:"text-secondary text-sm"},Fr={class:"font-semibold text-secondary"};function Vr(r,s,n,_,o,t){const b=h("ns-close-button");return d(),c("div",it,[e("div",ot,[e("div",lt,[e("div",dt,[e("h3",at,i(t.__("Payment Summary")),1)]),e("div",ct,[e("div",ut,[e("div",null,[e("h4",_t,i(t.__("Sub Total")),1)]),e("div",mt,i(t.nsCurrency(n.order.subtotal)),1)])]),e("div",pt,[e("div",ft,[e("div",null,[e("h4",ht,[e("span",bt,i(t.__("Discount")),1),n.order.discount_type==="percentage"?(d(),c("span",yt,"("+i(n.order.discount_percentage)+"%)",1)):m("",!0),n.order.discount_type==="flat"?(d(),c("span",vt,"(Flat)")):m("",!0)])]),e("div",xt,i(t.nsCurrency(n.order.discount)),1)])]),e("div",wt,[e("div",gt,[e("div",null,[e("h4",kt,i(t.__("Shipping")),1)]),e("div",Pt,i(t.nsCurrency(n.order.shipping)),1)])]),e("div",Ct,[e("div",jt,[e("div",null,[e("h4",St,i(t.__("Coupons")),1)]),e("div",Ot,i(t.nsCurrency(n.order.total_coupons)),1)])]),e("div",At,[e("div",Ft,[e("div",null,[e("h4",Vt,i(t.__("Total")),1)]),e("div",Ut,i(t.nsCurrency(n.order.total)),1)])]),e("div",Tt,[e("div",Dt,[e("div",null,[e("h4",Rt,i(t.__("Taxes")),1)]),e("div",It,i(t.nsCurrency(n.order.tax_value)),1)])]),e("div",qt,[e("div",$t,[e("div",null,[e("h4",Qt,i(t.__("Change")),1)]),e("div",Nt,i(t.nsCurrency(n.order.change)),1)])]),e("div",Yt,[e("div",Bt,[e("div",null,[e("h4",Gt,i(t.__("Paid")),1)]),e("div",Lt,i(t.nsCurrency(n.order.tendered)),1)])])])]),e("div",Et,[e("div",Wt,[e("h3",Mt,i(t.__("Order Status")),1)]),e("div",Ht,[e("div",null,[e("h4",zt,[e("span",null,i(t.__("Customer")),1)])]),n.order?(d(),c("div",Jt,[e("a",{class:"border-b border-dashed border-info-primary",href:o.systemUrls.customer_edit_url.replace("#customer",n.order.customer.id),target:"_blank",rel:"noopener noreferrer"},i(n.order.customer.first_name)+" "+i(n.order.customer.last_name),9,Zt)])):m("",!0)]),e("div",Kt,[e("div",null,[e("h4",Xt,[e("span",null,i(t.__("Type")),1)])]),e("div",er,i(o.labels.getTypeLabel(n.order.type)),1)]),e("div",sr,[e("div",null,[e("h4",tr,[e("span",null,i(t.__("Delivery Status")),1)])]),e("div",rr,[e("div",nr,[o.showDeliverySelect?m("",!0):(d(),c("span",{key:0,onClick:s[0]||(s[0]=l=>o.showDeliverySelect=!0),class:"font-semibold text-secondary border-b border-info-primary cursor-pointer border-dashed"},i(o.labels.getDeliveryStatus(n.order.delivery_status)),1))]),o.showDeliverySelect?(d(),c("div",ir,[e("div",or,[D(e("select",{ref:"process_status",class:"flex-auto border-info-primary rounded-lg","onUpdate:modelValue":s[1]||(s[1]=l=>n.order.delivery_status=l)},[(d(!0),c(x,null,w(o.deliveryStatuses,(l,a)=>(d(),c("option",{key:a,value:l.value},i(l.label),9,lr))),128))],512),[[Y,n.order.delivery_status]])]),e("div",dr,[y(b,{onClick:s[2]||(s[2]=l=>o.showDeliverySelect=!1)}),e("button",{onClick:s[3]||(s[3]=l=>t.submitDeliveryStatus(n.order)),class:"bg-success-primary text-white rounded-full px-2 py-1"},i(t.__("Save")),1)])])):m("",!0)])]),e("div",ar,[e("div",null,[e("h4",cr,[e("span",null,i(t.__("Processing Status")),1)])]),e("div",ur,[e("div",_r,[o.showProcessingSelect?m("",!0):(d(),c("span",{key:0,onClick:s[4]||(s[4]=l=>o.showProcessingSelect=!0),class:"border-b border-info-primary cursor-pointer border-dashed"},i(o.labels.getProcessingStatus(n.order.process_status)),1))]),o.showProcessingSelect?(d(),c("div",mr,[e("div",pr,[D(e("select",{ref:"process_status",class:"flex-auto border-info-primary rounded-lg","onUpdate:modelValue":s[5]||(s[5]=l=>n.order.process_status=l)},[(d(!0),c(x,null,w(o.processingStatuses,(l,a)=>(d(),c("option",{key:a,value:l.value},i(l.label),9,fr))),128))],512),[[Y,n.order.process_status]])]),e("div",hr,[y(b,{onClick:s[6]||(s[6]=l=>o.showProcessingSelect=!1)}),e("button",{onClick:s[7]||(s[7]=l=>t.submitProcessingChange(n.order)),class:"bg-success-primary text-white rounded-full px-2 py-1"},i(t.__("Save")),1)])])):m("",!0)])]),e("div",br,[e("div",null,[e("h4",yr,[e("span",null,i(t.__("Payment Status")),1)])]),e("div",vr,i(o.labels.getPaymentStatus(n.order.payment_status)),1)])]),e("div",xr,[e("div",wr,[e("h3",gr,i(t.__("Products")),1)]),(d(!0),c(x,null,w(n.order.products,l=>(d(),c("div",{key:l.id,class:"p-2 flex justify-between items-start elevation-surface border mb-6"},[e("div",null,[e("h4",kr,i(l.name)+" (x"+i(l.quantity)+")",1),e("p",Pr,i(l.unit.name||"N/A"),1)]),e("div",Cr,i(t.nsCurrency(l.total_price)),1)]))),128)),e("div",jr,[e("h3",Sr,[e("span",null,i(t.__("Refunded Products")),1),e("a",{href:"javascript:void(0)",onClick:s[8]||(s[8]=l=>t.openRefunds()),class:"border-b border-info-primary border-dashed"},i(t.__("All Refunds")),1)])]),(d(!0),c(x,null,w(n.order.refunded_products,(l,a)=>(d(),c("div",{key:a,class:"p-2 flex justify-between items-start elevation-surface border mb-6"},[e("div",null,[e("h4",Or,i(l.order_product.name)+" (x"+i(l.quantity)+")",1),e("p",Ar,[S(i(l.unit.name||"N/A")+" | ",1),e("span",{class:L(["rounded-full px-2",l.condition==="damaged"?"bg-error-tertiary text-white":"bg-info-tertiary text-white"])},i(l.condition),3)])]),e("div",Fr,i(t.nsCurrency(l.total_price)),1)]))),128))])])}const Ur=F(nt,[["render",Vr]]),Tr={name:"ns-order-instalments-payment",props:["popup"],components:{nsNotice:Z},data(){return{paymentTypes,fields:[{type:"select",name:"payment_type",description:u("Select the payment type that must apply to the current order."),label:u("Payment Type"),validation:"required",options:paymentTypes}],print:new U({urls:systemUrls,options:systemOptions}),validation:new R,order:null,instalment:null}},methods:{__:u,popupResolver:q,popupCloser:I,close(){this.popupResolver(!1)},updateInstalmentAsDue(r){nsHttpClient.put(`/api/orders/${this.order.id}/instalments/${this.instalment.id}/`,{instalment:{date:ns.date.moment.format("YYYY-MM-DD HH:mm:ss")}}).subscribe({next:s=>{this.submitPayment()},error:s=>{p.error(s.message||u("An unexpected error has occurred")).subscribe()}})},submitPayment(){if(!this.validation.validateFields(this.fields))return p.error(__m("The form is not valid.")).subcribe();nsHttpClient.post(`/api/orders/${this.order.id}/instalments/${this.instalment.id}/pay`,{...this.validation.extractFields(this.fields)}).subscribe({next:r=>{this.popupResolver(!0),this.print.exec(r.data.payment.id,"payment"),p.success(r.message).subscribe()},error:r=>{r.status==="failed"&&Popup.show(O,{title:u("Update Instalment Date"),message:u("Would you like to mark that instalment as due today ? If you confirm the instalment will be marked as paid."),onAction:s=>{s&&this.updateInstalmentAsDue(this.instalment)}}),p.error(r.message||u("An unexpected error has occurred")).subscribe()}})}},mounted(){this.popupCloser(),this.order=this.popup.params.order,this.instalment=this.popup.params.instalment,this.fields=this.validation.createFields(this.fields)}},Dr={class:"shadow-lg ns-box w-95vw md:w-2/3-screen lg:w-1/3-screen"},Rr={class:"p-2 flex justify-between border-b items-center"},Ir={class:"p-2 ns-box-body"},qr=e("br",null,null,-1),$r={class:"border-t ns-box-footer p-2 flex justify-end"};function Qr(r,s,n,_,o,t){const b=h("ns-close-button"),l=h("ns-notice"),a=h("ns-field"),g=h("ns-button");return d(),c("div",Dr,[e("div",Rr,[e("h3",null,i(t.__("Payment Method")),1),e("div",null,[y(b,{onClick:s[0]||(s[0]=f=>t.close())})])]),e("div",Ir,[y(l,{color:"info",class:"py-2 p-4 text-center border text-primary rounded-lg"},{default:P(()=>[S(i(t.__("Before submitting the payment, choose the payment type used for that order.")),1)]),_:1}),qr,(d(!0),c(x,null,w(o.fields,(f,C)=>(d(),k(a,{key:C,field:f},null,8,["field"]))),128))]),e("div",$r,[y(g,{onClick:s[1]||(s[1]=f=>t.submitPayment()),type:"info"},{default:P(()=>[S(i(t.__("Submit Payment")),1)]),_:1})])])}const Nr=F(Tr,[["render",Qr]]),Yr={props:["order"],name:"ns-order-instalments",data(){return{labels:new N,original:[],instalments:[],print:new U({urls:systemUrls,options:systemOptions,type:"payment"})}},mounted(){this.loadInstalments()},computed:{totalInstalments(){return this.instalments.length>0?this.instalments.map(r=>r.amount).reduce((r,s)=>parseFloat(r)+parseFloat(s)):0}},methods:{__:u,nsCurrency:V,loadInstalments(){v.get(`/api/orders/${this.order.id}/instalments`).subscribe(r=>{this.original=r,this.instalments=r.map(s=>(s.price_clicked=!1,s.date_clicked=!1,s.date=moment(s.date).format("YYYY-MM-DD"),s))})},showReceipt(r){if(r.payment_id===null)return p.error(u("This instalment doesn't have any payment attached.")).subscribe();this.print.process(r.payment_id,"payment")},addInstalment(){this.instalments.push({date:ns.date.moment.format("YYYY-MM-DD"),amount:this.order.total-this.totalInstalments,paid:!1})},createInstalment(r){Popup.show(O,{title:u("Confirm Your Action"),message:u("Would you like to create this instalment ?"),onAction:s=>{s&&v.post(`/api/orders/${this.order.id}/instalments`,{instalment:r}).subscribe({next:n=>{this.loadInstalments(),p.success(n.message).subscribe()},error:n=>{p.error(n.message||u("An unexpected error has occurred")).subscribe()}})}})},deleteInstalment(r){Popup.show(O,{title:u("Confirm Your Action"),message:u("Would you like to delete this instalment ?"),onAction:s=>{s&&v.delete(`/api/orders/${this.order.id}/instalments/${r.id}`).subscribe({next:n=>{const _=this.instalments.indexOf(r);this.instalments.splice(_,1),p.success(n.message).subscribe()},error:n=>{p.error(n.message||u("An unexpected error has occurred")).subscribe()}})}})},async markAsPaid(r){try{const s=await new Promise((n,_)=>{Popup.show(Nr,{order:this.order,instalment:r,resolve:n,reject:_})});this.loadInstalments()}catch{}},togglePriceEdition(r){r.paid||(r.price_clicked=!r.price_clicked,this.$forceUpdate(),r.price_clicked&&setTimeout(()=>{this.$refs.amount[0].select()},100))},updateInstalment(r){Popup.show(O,{title:u("Confirm Your Action"),message:u("Would you like to update that instalment ?"),onAction:s=>{s&&v.put(`/api/orders/${this.order.id}/instalments/${r.id}`,{instalment:r}).subscribe({next:n=>{p.success(n.message).subscribe()},error:n=>{p.error(n.message||u("An unexpected error has occurred")).subscribe()}})}})},toggleDateEdition(r){r.paid||(r.date_clicked=!r.date_clicked,this.$forceUpdate(),r.date_clicked&&setTimeout(()=>{this.$refs.date[0].select()},200))}}},Br={class:"-mx-4 flex-auto flex flex-wrap"},Gr={class:"flex flex-auto"},Lr={class:"w-full mb-2 flex-wrap"},Er={class:"w-full mb-2 px-4"},Wr={class:"font-semibold text-secondary pb-2 border-b border-info-primary"},Mr={class:"px-4"},Hr={class:"border-table-th-edge border-t text-primary"},zr={class:"p-2"},Jr=["onClick"],Zr={key:1},Kr=["onBlur","onUpdate:modelValue"],Xr={class:"flex items-center"},en={class:"flex items-center px-2 h-full border-r"},sn=["onClick"],tn={key:1},rn=["onUpdate:modelValue","onBlur"],nn={key:0,class:"w-36 justify-center flex items-center px-2 h-full border-r"},on={class:"px-2"},ln={class:"px-2"},dn={class:"px-2"},an={key:1,class:"w-36 justify-center flex items-center px-2 h-full border-r"},cn={class:"px-2"},un={class:"ns-button info"},_n=["onClick"],mn=e("i",{class:"las la-plus"},null,-1),pn={key:2,class:"w-36 justify-center flex items-center px-2 h-full"},fn={class:"ns-button info"},hn=["onClick"],bn=e("i",{class:"las la-print"},null,-1),yn={class:"flex justify-between p-2 border-r border-b border-l elevation-surface"},vn={class:"flex items-center justify-center"},xn={class:"ml-1 text-sm"},wn={class:"-mx-2 flex flex-wrap items-center"},gn={class:"px-2"},kn={class:"px-2"},Pn={class:"ns-button info"};function Cn(r,s,n,_,o,t){const b=h("ns-icon-button");return d(),c("div",Br,[e("div",Gr,[e("div",Lr,[e("div",Er,[e("h3",Wr,i(t.__("Instalments")),1)]),e("div",Mr,[e("ul",Hr,[(d(!0),c(x,null,w(o.instalments,l=>(d(),c("li",{class:L([l.paid?"success":"info","border-b border-l flex justify-between elevation-surface"]),key:l.id},[e("span",zr,[l.date_clicked?m("",!0):(d(),c("span",{key:0,onClick:a=>t.toggleDateEdition(l)},i(l.date),9,Jr)),l.date_clicked?(d(),c("span",Zr,[D(e("input",{onBlur:a=>t.toggleDateEdition(l),"onUpdate:modelValue":a=>l.date=a,type:"date",ref_for:!0,ref:"date",class:"border border-info-primary rounded"},null,40,Kr),[[B,l.date]])])):m("",!0)]),e("div",Xr,[e("div",en,[l.price_clicked?m("",!0):(d(),c("span",{key:0,onClick:a=>t.togglePriceEdition(l)},i(t.nsCurrency(l.amount)),9,sn)),l.price_clicked?(d(),c("span",tn,[D(e("input",{ref_for:!0,ref:"amount","onUpdate:modelValue":a=>l.amount=a,onBlur:a=>t.togglePriceEdition(l),type:"text",class:"border border-info-primary p-1"},null,40,rn),[[B,l.amount]])])):m("",!0)]),!l.paid&&l.id?(d(),c("div",nn,[e("div",on,[y(b,{type:"success",onClick:a=>t.markAsPaid(l),className:"la-money-bill-wave-alt"},null,8,["onClick"])]),e("div",ln,[y(b,{type:"info",onClick:a=>t.updateInstalment(l),className:"la-save"},null,8,["onClick"])]),e("div",dn,[y(b,{type:"error",onClick:a=>t.deleteInstalment(l),className:"la-trash-alt"},null,8,["onClick"])])])):m("",!0),!l.paid&&!l.id?(d(),c("div",an,[e("div",cn,[e("div",un,[e("button",{onClick:a=>t.createInstalment(l),class:"px-3 py-1 rounded-full"},[mn,S(" "+i(t.__("Create")),1)],8,_n)])])])):m("",!0),l.paid?(d(),c("div",pn,[e("div",fn,[e("button",{onClick:a=>t.showReceipt(l),class:"px-3 text-xs py-1 rounded-full"},[bn,S(" "+i(t.__("Receipt")),1)],8,hn)])])):m("",!0)])],2))),128)),e("li",yn,[e("div",vn,[e("span",null,i(t.__("Total :"))+" "+i(t.nsCurrency(n.order.total)),1),e("span",xn," ("+i(t.__("Remaining :"))+" "+i(t.nsCurrency(n.order.total-t.totalInstalments))+") ",1)]),e("div",wn,[e("span",gn,i(t.__("Instalments:"))+" "+i(t.nsCurrency(t.totalInstalments)),1),e("span",kn,[e("div",Pn,[e("button",{onClick:s[0]||(s[0]=l=>t.addInstalment()),class:"rounded-full px-3 py-1"},i(t.__("Add Instalment")),1)])])])])])])])])])}const jn=F(Yr,[["render",Cn]]),Sn={name:"ns-orders-preview-popup",props:["popup"],data(){return{active:"details",order:new Object,rawOrder:new Object,products:[],payments:[],options:null,print:new U({urls:systemUrls,options:systemOptions}),settings:null}},components:{nsOrderRefund:Xe,nsOrderPayment:As,nsOrderDetails:Ur,nsOrderInstalments:jn},computed:{isVoidable(){return["paid","partially_paid","unpaid"].includes(this.order.payment_status)},isDeleteAble(){return["hold"].includes(this.order.payment_status)}},methods:{__:u,popupResolver:q,popupCloser:I,nsCurrency:V,closePopup(r=!1){this.popupResolver(r)},setActive(r){this.active=r},printOrder(){this.print.process(this.order.id,"sale")},refresh(){this.loadOrderDetails(this.order.id)},loadOrderDetails(r){z([v.get(`/api/orders/${r}`),v.get(`/api/orders/${r}/products`),v.get(`/api/orders/${r}/payments`)]).subscribe(s=>{this.order=s[0],this.products=s[1],this.payments=s[2]})},deleteOrder(){Popup.show(O,{title:u("Confirm Your Action"),message:u("Would you like to delete this order"),onAction:r=>{r&&v.delete(`/api/orders/${this.order.id}`).subscribe({next:s=>{p.success(s.message).subscribe(),this.refreshCrudTable(),this.closePopup(!0)},error:s=>{p.error(s.message).subscribe()}})}})},voidOrder(){try{const r=new Promise((s,n)=>{Popup.show(K,{resolve:s,reject:n,title:u("Confirm Your Action"),message:u("The current order will be void. This action will be recorded. Consider providing a reason for this operation"),onAction:_=>{_!==!1&&v.post(`/api/orders/${this.order.id}/void`,{reason:_}).subscribe({next:o=>{p.success(o.message).subscribe(),this.refreshCrudTable(),this.closePopup(!0)},error:o=>{p.error(o.message).subscribe()}})}})})}catch(r){console.log(r)}},refreshCrudTable(){this.popup.params.component.$emit("updated",!0)}},watch:{active(){this.active==="details"&&this.loadOrderDetails(this.rawOrder.id)}},mounted(){this.rawOrder=this.popup.params.order,this.options=systemOptions,this.urls=systemUrls,this.loadOrderDetails(this.rawOrder.id),this.popupCloser()}},On={class:"h-95vh w-95vw md:h-6/7-screen md:w-6/7-screen overflow-hidden shadow-xl ns-box flex flex-col"},An={class:"border-b ns-box-header p-3 flex items-center justify-between"},Fn={class:"p-2 ns-box-body overflow-hidden flex flex-auto"},Vn={key:1,class:"h-full w-full flex items-center justify-center"},Un={class:"p-2 flex justify-between border-t ns-box-footer"},Tn=e("i",{class:"las la-ban"},null,-1),Dn=e("i",{class:"las la-trash"},null,-1),Rn=e("i",{class:"las la-print"},null,-1);function In(r,s,n,_,o,t){const b=h("ns-close-button"),l=h("ns-order-details"),a=h("ns-tabs-item"),g=h("ns-order-payment"),f=h("ns-order-refund"),C=h("ns-order-instalments"),E=h("ns-tabs"),W=h("ns-spinner"),$=h("ns-button");return d(),c("div",On,[e("div",An,[e("div",null,[e("h3",null,i(t.__("Order Options")),1)]),e("div",null,[y(b,{onClick:s[0]||(s[0]=j=>t.closePopup(!0))})])]),e("div",Fn,[o.order.id?(d(),k(E,{key:0,active:o.active,onActive:s[5]||(s[5]=j=>t.setActive(j))},{default:P(()=>[y(a,{label:t.__("Details"),identifier:"details",class:"overflow-y-auto"},{default:P(()=>[o.order?(d(),k(l,{key:0,order:o.order},null,8,["order"])):m("",!0)]),_:1},8,["label"]),y(a,{visible:!["order_void","hold","refunded","partially_refunded"].includes(o.order.payment_status),label:t.__("Payments"),identifier:"payments"},{default:P(()=>[o.order?(d(),k(g,{key:0,onChanged:s[1]||(s[1]=j=>t.refresh()),order:o.order},null,8,["order"])):m("",!0)]),_:1},8,["visible","label"]),y(a,{visible:!["order_void","hold","refunded"].includes(o.order.payment_status),label:t.__("Refund & Return"),identifier:"refund"},{default:P(()=>[o.order?(d(),k(f,{key:0,onLoadTab:s[2]||(s[2]=j=>t.setActive(j)),onChanged:s[3]||(s[3]=j=>t.refresh()),order:o.order},null,8,["order"])):m("",!0)]),_:1},8,["visible","label"]),y(a,{visible:["partially_paid","unpaid"].includes(o.order.payment_status)&&o.order.support_instalments,label:t.__("Installments"),identifier:"instalments"},{default:P(()=>[o.order?(d(),k(C,{key:0,onChanged:s[4]||(s[4]=j=>t.refresh()),order:o.order},null,8,["order"])):m("",!0)]),_:1},8,["visible","label"])]),_:1},8,["active"])):m("",!0),o.order.id?m("",!0):(d(),c("div",Vn,[y(W)]))]),e("div",Un,[e("div",null,[t.isVoidable?(d(),k($,{key:0,onClick:s[6]||(s[6]=j=>t.voidOrder()),type:"error"},{default:P(()=>[Tn,S(" "+i(t.__("Void")),1)]),_:1})):m("",!0),t.isDeleteAble?(d(),k($,{key:1,onClick:s[7]||(s[7]=j=>t.deleteOrder()),type:"error"},{default:P(()=>[Dn,S(" "+i(t.__("Delete")),1)]),_:1})):m("",!0)]),e("div",null,[y($,{onClick:s[8]||(s[8]=j=>t.printOrder()),type:"info"},{default:P(()=>[Rn,S(" "+i(t.__("Print")),1)]),_:1})])])])}const En=F(Sn,[["render",In]]);export{U as P,rt as a,En as n}; diff --git a/public/build/assets/ns-orders-summary--boH4mfg.js b/public/build/assets/ns-orders-summary--boH4mfg.js deleted file mode 100644 index f5ded34c8..000000000 --- a/public/build/assets/ns-orders-summary--boH4mfg.js +++ /dev/null @@ -1 +0,0 @@ -import"./bootstrap-B7E2wy_a.js";import{_ as f,n as p}from"./currency-ZXKMLAC0.js";import{_ as x}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as c,o,c as n,b as s,t,g as d,f as _,F as b,e as v,n as u}from"./runtime-core.esm-bundler-DCfIpxDt.js";import"./tax-BACo6kIE.js";const y={name:"ns-orders-summary",data(){return{orders:[],subscription:null,hasLoaded:!1}},mounted(){this.hasLoaded=!1,this.subscription=Dashboard.recentOrders.subscribe(a=>{this.hasLoaded=!0,this.orders=a})},methods:{__:f,nsCurrency:p},unmounted(){this.subscription.unsubscribe()}},g={id:"ns-orders-summary",class:"flex flex-auto flex-col shadow rounded-lg overflow-hidden"},k={class:"p-2 flex title items-center justify-between border-b"},w={class:"font-semibold"},C={class:"head flex-auto flex-col flex h-64 overflow-y-auto ns-scrollbar"},L={key:0,class:"h-full flex items-center justify-center"},j={key:1,class:"h-full flex items-center justify-center flex-col"},O=s("i",{class:"las la-grin-beam-sweat text-6xl"},null,-1),B={class:"text-sm"},N={class:"text-lg font-semibold"},V={class:"flex -mx-2"},z={class:"px-1"},D={class:"text-semibold text-xs"},F=s("i",{class:"lar la-user-circle"},null,-1),R=s("div",{class:"divide-y-4"},null,-1),S={class:"px-1"},E={class:"text-semibold text-xs"},W=s("i",{class:"las la-clock"},null,-1);function q(a,i,A,G,l,r){const h=c("ns-close-button"),m=c("ns-spinner");return o(),n("div",g,[s("div",k,[s("h3",w,t(r.__("Recents Orders")),1),s("div",null,[d(h,{onClick:i[0]||(i[0]=e=>a.$emit("onRemove"))})])]),s("div",C,[l.hasLoaded?_("",!0):(o(),n("div",L,[d(m,{size:"8",border:"4"})])),l.hasLoaded&&l.orders.length===0?(o(),n("div",j,[O,s("p",B,t(r.__("Well.. nothing to show for the meantime.")),1)])):_("",!0),(o(!0),n(b,null,v(l.orders,e=>(o(),n("div",{key:e.id,class:u([e.payment_status==="paid"?"paid-order":"other-order","border-b single-order p-2 flex justify-between"])},[s("div",null,[s("h3",N,t(r.__("Order"))+" : "+t(e.code),1),s("div",V,[s("div",z,[s("h4",D,[F,s("span",null,t(e.user.username),1)])]),R,s("div",S,[s("h4",E,[W,s("span",null,t(e.created_at),1)])])])]),s("div",null,[s("h2",{class:u([e.payment_status==="paid"?"paid-currency":"unpaid-currency","text-xl font-bold"])},t(r.nsCurrency(e.total)),3)])],2))),128))])])}const P=x(y,[["render",q]]);export{P as default}; diff --git a/public/build/assets/ns-orders-summary-zw90njne.js b/public/build/assets/ns-orders-summary-zw90njne.js new file mode 100644 index 000000000..772fd7ce7 --- /dev/null +++ b/public/build/assets/ns-orders-summary-zw90njne.js @@ -0,0 +1 @@ +import"./bootstrap-Bpe5LRJd.js";import{_ as f,n as p}from"./currency-lOMYG1Wf.js";import{_ as x}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as c,o,c as n,a as s,t,f as d,e as _,F as b,b as v,n as u}from"./runtime-core.esm-bundler-RT2b-_3S.js";const y={name:"ns-orders-summary",data(){return{orders:[],subscription:null,hasLoaded:!1}},mounted(){this.hasLoaded=!1,this.subscription=Dashboard.recentOrders.subscribe(a=>{this.hasLoaded=!0,this.orders=a})},methods:{__:f,nsCurrency:p},unmounted(){this.subscription.unsubscribe()}},g={id:"ns-orders-summary",class:"flex flex-auto flex-col shadow rounded-lg overflow-hidden"},k={class:"p-2 flex title items-center justify-between border-b"},w={class:"font-semibold"},C={class:"head flex-auto flex-col flex h-64 overflow-y-auto ns-scrollbar"},L={key:0,class:"h-full flex items-center justify-center"},j={key:1,class:"h-full flex items-center justify-center flex-col"},O=s("i",{class:"las la-grin-beam-sweat text-6xl"},null,-1),B={class:"text-sm"},N={class:"text-lg font-semibold"},V={class:"flex -mx-2"},z={class:"px-1"},D={class:"text-semibold text-xs"},F=s("i",{class:"lar la-user-circle"},null,-1),R=s("div",{class:"divide-y-4"},null,-1),S={class:"px-1"},E={class:"text-semibold text-xs"},W=s("i",{class:"las la-clock"},null,-1);function q(a,i,A,G,l,r){const h=c("ns-close-button"),m=c("ns-spinner");return o(),n("div",g,[s("div",k,[s("h3",w,t(r.__("Recents Orders")),1),s("div",null,[d(h,{onClick:i[0]||(i[0]=e=>a.$emit("onRemove"))})])]),s("div",C,[l.hasLoaded?_("",!0):(o(),n("div",L,[d(m,{size:"8",border:"4"})])),l.hasLoaded&&l.orders.length===0?(o(),n("div",j,[O,s("p",B,t(r.__("Well.. nothing to show for the meantime.")),1)])):_("",!0),(o(!0),n(b,null,v(l.orders,e=>(o(),n("div",{key:e.id,class:u([e.payment_status==="paid"?"paid-order":"other-order","border-b single-order p-2 flex justify-between"])},[s("div",null,[s("h3",N,t(r.__("Order"))+" : "+t(e.code),1),s("div",V,[s("div",z,[s("h4",D,[F,s("span",null,t(e.user.username),1)])]),R,s("div",S,[s("h4",E,[W,s("span",null,t(e.created_at),1)])])])]),s("div",null,[s("h2",{class:u([e.payment_status==="paid"?"paid-currency":"unpaid-currency","text-xl font-bold"])},t(r.nsCurrency(e.total)),3)])],2))),128))])])}const M=x(y,[["render",q]]);export{M as default}; diff --git a/public/build/assets/ns-password-lost-CgyMPToF.js b/public/build/assets/ns-password-lost-CgyMPToF.js new file mode 100644 index 000000000..15d5c064a --- /dev/null +++ b/public/build/assets/ns-password-lost-CgyMPToF.js @@ -0,0 +1 @@ +import{_ as r}from"./currency-lOMYG1Wf.js";import{F as x,G as F,a,n as p,b as l}from"./bootstrap-Bpe5LRJd.js";import{_ as S}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as d,o as t,c,a as s,F as T,b as V,g as b,e as u,f,t as _,w as g,i as X}from"./runtime-core.esm-bundler-RT2b-_3S.js";const N={name:"ns-login",data(){return{fields:[],xXsrfToken:null,validation:new x,isSubitting:!1}},mounted(){F([a.get("/api/fields/ns.password-lost"),a.get("/sanctum/csrf-cookie")]).subscribe(i=>{this.fields=this.validation.createFields(i[0]),this.xXsrfToken=a.response.config.headers["X-XSRF-TOKEN"],setTimeout(()=>p.doAction("ns-login-mounted",this),100)},i=>{l.error(i.message||r("An unexpected error occurred."),r("OK"),{duration:0}).subscribe()})},methods:{__:r,requestRecovery(){if(!this.validation.validateFields(this.fields))return l.error(r("Unable to proceed the form is not valid.")).subscribe();this.validation.disableFields(this.fields),p.applyFilters("ns-password-lost-submit",!0)&&(this.isSubitting=!0,a.post("/auth/password-lost",this.validation.getValue(this.fields),{headers:{"X-XSRF-TOKEN":this.xXsrfToken}}).subscribe(e=>{l.success(e.message).subscribe(),setTimeout(()=>{document.location=e.data.redirectTo},500)},e=>{this.isSubitting=!1,this.validation.enableFields(this.fields),e.data&&this.validation.triggerFieldsErrors(this.fields,e.data),l.error(e.message).subscribe()}))}}},R={class:"bg-white rounded shadow overflow-hidden transition-all duration-100"},B={class:"p-3 -my-2"},C={key:0,class:"py-2 fade-in-entrance anim-duration-300"},j={key:0,class:"flex items-center justify-center py-10"},E={class:"flex w-full items-center justify-center py-4"},K={href:"/sign-in",class:"hover:underline text-blue-600 text-sm"},O={class:"flex justify-between items-center bg-gray-200 p-3"};function q(i,e,z,A,n,o){const v=d("ns-field"),m=d("ns-spinner"),y=d("ns-button"),k=d("ns-link");return t(),c("div",R,[s("div",B,[n.fields.length>0?(t(),c("div",C,[(t(!0),c(T,null,V(n.fields,(h,w)=>(t(),b(v,{key:w,field:h},null,8,["field"]))),128))])):u("",!0)]),n.fields.length===0?(t(),c("div",j,[f(m,{border:"4",size:"16"})])):u("",!0),s("div",E,[s("a",K,_(o.__("Remember Your Password ?")),1)]),s("div",O,[s("div",null,[f(y,{onClick:e[0]||(e[0]=h=>o.requestRecovery()),class:"justify-between",type:"info"},{default:g(()=>[n.isSubitting?(t(),b(m,{key:0,class:"mr-2",size:"6",border:"2"})):u("",!0),s("span",null,_(o.__("Submit")),1)]),_:1})]),s("div",null,[f(k,{href:"/sign-up",type:"success"},{default:g(()=>[X(_(o.__("Register")),1)]),_:1})])])])}const G=S(N,[["render",q]]);export{G as default}; diff --git a/public/build/assets/ns-password-lost-j2odHvH0.js b/public/build/assets/ns-password-lost-j2odHvH0.js deleted file mode 100644 index 251ef3763..000000000 --- a/public/build/assets/ns-password-lost-j2odHvH0.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as r}from"./currency-ZXKMLAC0.js";import{k as x,Z as F}from"./tax-BACo6kIE.js";import{a,n as p,b as l}from"./bootstrap-B7E2wy_a.js";import{_ as S}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as d,o as t,c,b as s,F as T,e as V,h as b,f as u,g as f,t as m,w as g,j as X}from"./runtime-core.esm-bundler-DCfIpxDt.js";const N={name:"ns-login",data(){return{fields:[],xXsrfToken:null,validation:new x,isSubitting:!1}},mounted(){F([a.get("/api/fields/ns.password-lost"),a.get("/sanctum/csrf-cookie")]).subscribe(i=>{this.fields=this.validation.createFields(i[0]),this.xXsrfToken=a.response.config.headers["X-XSRF-TOKEN"],setTimeout(()=>p.doAction("ns-login-mounted",this),100)},i=>{l.error(i.message||r("An unexpected error occurred."),r("OK"),{duration:0}).subscribe()})},methods:{__:r,requestRecovery(){if(!this.validation.validateFields(this.fields))return l.error(r("Unable to proceed the form is not valid.")).subscribe();this.validation.disableFields(this.fields),p.applyFilters("ns-password-lost-submit",!0)&&(this.isSubitting=!0,a.post("/auth/password-lost",this.validation.getValue(this.fields),{headers:{"X-XSRF-TOKEN":this.xXsrfToken}}).subscribe(e=>{l.success(e.message).subscribe(),setTimeout(()=>{document.location=e.data.redirectTo},500)},e=>{this.isSubitting=!1,this.validation.enableFields(this.fields),e.data&&this.validation.triggerFieldsErrors(this.fields,e.data),l.error(e.message).subscribe()}))}}},R={class:"bg-white rounded shadow overflow-hidden transition-all duration-100"},j={class:"p-3 -my-2"},B={key:0,class:"py-2 fade-in-entrance anim-duration-300"},C={key:0,class:"flex items-center justify-center py-10"},E={class:"flex w-full items-center justify-center py-4"},K={href:"/sign-in",class:"hover:underline text-blue-600 text-sm"},O={class:"flex justify-between items-center bg-gray-200 p-3"};function q(i,e,z,A,n,o){const v=d("ns-field"),_=d("ns-spinner"),y=d("ns-button"),k=d("ns-link");return t(),c("div",R,[s("div",j,[n.fields.length>0?(t(),c("div",B,[(t(!0),c(T,null,V(n.fields,(h,w)=>(t(),b(v,{key:w,field:h},null,8,["field"]))),128))])):u("",!0)]),n.fields.length===0?(t(),c("div",C,[f(_,{border:"4",size:"16"})])):u("",!0),s("div",E,[s("a",K,m(o.__("Remember Your Password ?")),1)]),s("div",O,[s("div",null,[f(y,{onClick:e[0]||(e[0]=h=>o.requestRecovery()),class:"justify-between",type:"info"},{default:g(()=>[n.isSubitting?(t(),b(_,{key:0,class:"mr-2",size:"6",border:"2"})):u("",!0),s("span",null,m(o.__("Submit")),1)]),_:1})]),s("div",null,[f(k,{href:"/sign-up",type:"success"},{default:g(()=>[X(m(o.__("Register")),1)]),_:1})])])])}const U=S(N,[["render",q]]);export{U as default}; diff --git a/public/build/assets/ns-payment-types-report-B2xnC6aK.js b/public/build/assets/ns-payment-types-report-B2xnC6aK.js new file mode 100644 index 000000000..67737a50e --- /dev/null +++ b/public/build/assets/ns-payment-types-report-B2xnC6aK.js @@ -0,0 +1 @@ +import{h as l,b as d,a as h}from"./bootstrap-Bpe5LRJd.js";import{c as f,e as x}from"./components-RJC2qWGQ.js";import{_ as i,n as y}from"./currency-lOMYG1Wf.js";import{_ as v}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as D,o as c,c as _,a as e,f as u,t as s,F as g,b as k}from"./runtime-core.esm-bundler-RT2b-_3S.js";import"./ns-alert-popup-SVrn5Xft.js";import"./ns-avatar-image-CAD6xUGA.js";import"./index.es-Br67aBEV.js";import"./ns-prompt-popup-C2dK5WQb.js";const w={name:"ns-payment-types-report",props:["storeName","storeLogo"],data(){return{startDateField:{type:"datetimepicker",value:l(ns.date.current).startOf("day").format("YYYY-MM-DD HH:mm:ss")},endDateField:{type:"datetimepicker",value:l(ns.date.current).endOf("day").format("YYYY-MM-DD HH:mm:ss")},report:[],ns:window.ns,field:{type:"datetimepicker",value:"2021-02-07",name:"date"}}},components:{nsDatepicker:f,nsDateTimePicker:x},computed:{},mounted(){},methods:{__:i,nsCurrency:y,printSaleReport(){this.$htmlToPaper("sale-report")},loadReport(){if(this.startDateField.value===null||this.endDateField.value===null)return d.error(i("Unable to proceed. Select a correct time range.")).subscribe();const p=l(this.startDateField.value);if(l(this.endDateField.value).isBefore(p))return d.error(i("Unable to proceed. The current time range is not valid.")).subscribe();h.post("/api/reports/payment-types",{startDate:this.startDateField.value,endDate:this.endDateField.value}).subscribe({next:r=>{this.report=r},error:r=>{d.error(r.message).subscribe()}})}}},F={id:"report-section",class:"px-4"},Y={class:"flex -mx-2"},C={class:"px-2"},M={class:"px-2"},T={class:"px-2"},B=e("i",{class:"las la-sync-alt text-xl"},null,-1),S={class:"pl-2"},H={class:"px-2"},P=e("i",{class:"las la-print text-xl"},null,-1),R={class:"pl-2"},L={id:"sale-report",class:"anim-duration-500 fade-in-entrance"},N={class:"flex w-full"},j={class:"my-4 flex justify-between w-full"},O={class:"text-secondary"},U={class:"pb-1 border-b border-dashed"},V={class:"pb-1 border-b border-dashed"},E={class:"pb-1 border-b border-dashed"},q=["src","alt"],z={class:"bg-box-background shadow rounded my-4"},A={class:"border-b border-box-edge"},G={class:"table ns-table w-full"},I={class:"text-primary"},J={class:"text-primary border p-2 text-left"},K={width:"150",class:"text-primary border p-2 text-right"},Q={class:"text-primary"},W={class:"p-2 border border-box-edge"},X={class:"p-2 border text-right"},Z={class:"text-primary font-semibold"},$={class:"p-2 border border-box-edge text-primary"},ee={class:"p-2 border text-right"};function te(p,a,r,se,o,t){const m=D("ns-field");return c(),_("div",F,[e("div",Y,[e("div",C,[u(m,{field:o.startDateField},null,8,["field"])]),e("div",M,[u(m,{field:o.endDateField},null,8,["field"])]),e("div",T,[e("button",{onClick:a[0]||(a[0]=n=>t.loadReport()),class:"rounded flex justify-between bg-input-button shadow py-1 items-center text-primary px-2"},[B,e("span",S,s(t.__("Load")),1)])]),e("div",H,[e("button",{onClick:a[1]||(a[1]=n=>t.printSaleReport()),class:"rounded flex justify-between bg-input-button shadow py-1 items-center text-primary px-2"},[P,e("span",R,s(t.__("Print")),1)])])]),e("div",L,[e("div",N,[e("div",j,[e("div",O,[e("ul",null,[e("li",U,s(t.__("Date : {date}").replace("{date}",o.ns.date.current)),1),e("li",V,s(t.__("Document : Payment Type")),1),e("li",E,s(t.__("By : {user}").replace("{user}",o.ns.user.username)),1)])]),e("div",null,[e("img",{class:"w-24",src:r.storeLogo,alt:r.storeName},null,8,q)])])]),e("div",z,[e("div",A,[e("table",G,[e("thead",I,[e("tr",null,[e("th",J,s(t.__("Summary")),1),e("th",K,s(t.__("Total")),1)])]),e("tbody",Q,[(c(!0),_(g,null,k(o.report.summary,(n,b)=>(c(),_("tr",{key:b,class:"font-semibold"},[e("td",W,s(n.label),1),e("td",X,s(t.nsCurrency(n.total)),1)]))),128))]),e("tfoot",Z,[e("tr",null,[e("td",$,s(t.__("Total")),1),e("td",ee,s(t.nsCurrency(o.report.total)),1)])])])])])])])}const pe=v(w,[["render",te]]);export{pe as default}; diff --git a/public/build/assets/ns-payment-types-report-ClnhmaQ5.js b/public/build/assets/ns-payment-types-report-ClnhmaQ5.js deleted file mode 100644 index c8c75013f..000000000 --- a/public/build/assets/ns-payment-types-report-ClnhmaQ5.js +++ /dev/null @@ -1 +0,0 @@ -import{h as l}from"./tax-BACo6kIE.js";import{c as h,e as f}from"./components-CSb5I62o.js";import{b as d,a as x}from"./bootstrap-B7E2wy_a.js";import{_ as i,n as y}from"./currency-ZXKMLAC0.js";import{_ as v}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as D,o as c,c as _,b as e,g as u,t as s,F as g,e as k}from"./runtime-core.esm-bundler-DCfIpxDt.js";import"./ns-alert-popup-DDoxXsJC.js";import"./ns-avatar-image-C_oqdj76.js";import"./index.es-BED_8l8F.js";import"./ns-prompt-popup-BbWKrSku.js";const w={name:"ns-payment-types-report",props:["storeName","storeLogo"],data(){return{startDateField:{type:"datetimepicker",value:l(ns.date.current).startOf("day").format("YYYY-MM-DD HH:mm:ss")},endDateField:{type:"datetimepicker",value:l(ns.date.current).endOf("day").format("YYYY-MM-DD HH:mm:ss")},report:[],ns:window.ns,field:{type:"datetimepicker",value:"2021-02-07",name:"date"}}},components:{nsDatepicker:h,nsDateTimePicker:f},computed:{},mounted(){},methods:{__:i,nsCurrency:y,printSaleReport(){this.$htmlToPaper("sale-report")},loadReport(){if(this.startDateField.value===null||this.endDateField.value===null)return d.error(i("Unable to proceed. Select a correct time range.")).subscribe();const p=l(this.startDateField.value);if(l(this.endDateField.value).isBefore(p))return d.error(i("Unable to proceed. The current time range is not valid.")).subscribe();x.post("/api/reports/payment-types",{startDate:this.startDateField.value,endDate:this.endDateField.value}).subscribe({next:r=>{this.report=r},error:r=>{d.error(r.message).subscribe()}})}}},F={id:"report-section",class:"px-4"},Y={class:"flex -mx-2"},C={class:"px-2"},M={class:"px-2"},T={class:"px-2"},B=e("i",{class:"las la-sync-alt text-xl"},null,-1),S={class:"pl-2"},H={class:"px-2"},P=e("i",{class:"las la-print text-xl"},null,-1),R={class:"pl-2"},L={id:"sale-report",class:"anim-duration-500 fade-in-entrance"},N={class:"flex w-full"},j={class:"my-4 flex justify-between w-full"},O={class:"text-secondary"},U={class:"pb-1 border-b border-dashed"},V={class:"pb-1 border-b border-dashed"},E={class:"pb-1 border-b border-dashed"},q=["src","alt"],z={class:"bg-box-background shadow rounded my-4"},A={class:"border-b border-box-edge"},G={class:"table ns-table w-full"},I={class:"text-primary"},J={class:"text-primary border p-2 text-left"},K={width:"150",class:"text-primary border p-2 text-right"},Q={class:"text-primary"},W={class:"p-2 border border-box-edge"},X={class:"p-2 border text-right"},Z={class:"text-primary font-semibold"},$={class:"p-2 border border-box-edge text-primary"},ee={class:"p-2 border text-right"};function te(p,a,r,se,o,t){const m=D("ns-field");return c(),_("div",F,[e("div",Y,[e("div",C,[u(m,{field:o.startDateField},null,8,["field"])]),e("div",M,[u(m,{field:o.endDateField},null,8,["field"])]),e("div",T,[e("button",{onClick:a[0]||(a[0]=n=>t.loadReport()),class:"rounded flex justify-between bg-input-button shadow py-1 items-center text-primary px-2"},[B,e("span",S,s(t.__("Load")),1)])]),e("div",H,[e("button",{onClick:a[1]||(a[1]=n=>t.printSaleReport()),class:"rounded flex justify-between bg-input-button shadow py-1 items-center text-primary px-2"},[P,e("span",R,s(t.__("Print")),1)])])]),e("div",L,[e("div",N,[e("div",j,[e("div",O,[e("ul",null,[e("li",U,s(t.__("Date : {date}").replace("{date}",o.ns.date.current)),1),e("li",V,s(t.__("Document : Payment Type")),1),e("li",E,s(t.__("By : {user}").replace("{user}",o.ns.user.username)),1)])]),e("div",null,[e("img",{class:"w-24",src:r.storeLogo,alt:r.storeName},null,8,q)])])]),e("div",z,[e("div",A,[e("table",G,[e("thead",I,[e("tr",null,[e("th",J,s(t.__("Summary")),1),e("th",K,s(t.__("Total")),1)])]),e("tbody",Q,[(c(!0),_(g,null,k(o.report.summary,(n,b)=>(c(),_("tr",{key:b,class:"font-semibold"},[e("td",W,s(n.label),1),e("td",X,s(t.nsCurrency(n.total)),1)]))),128))]),e("tfoot",Z,[e("tr",null,[e("td",$,s(t.__("Total")),1),e("td",ee,s(t.nsCurrency(o.report.total)),1)])])])])])])])}const me=v(w,[["render",te]]);export{me as default}; diff --git a/public/build/assets/ns-permissions-BHdLclhZ.js b/public/build/assets/ns-permissions-BHdLclhZ.js new file mode 100644 index 000000000..e30d1faf2 --- /dev/null +++ b/public/build/assets/ns-permissions-BHdLclhZ.js @@ -0,0 +1 @@ +import{E as y,a as m,b as _,G as v,v as k}from"./bootstrap-Bpe5LRJd.js";import{_ as b}from"./currency-lOMYG1Wf.js";import{_ as w}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as P,o,c as l,a as i,B as j,t as f,e as u,F as p,b as h,n as T,f as x}from"./runtime-core.esm-bundler-RT2b-_3S.js";const C={name:"ns-permissions",filters:[y],data(){return{permissions:[],toggled:!1,roles:[],searchText:""}},computed:{filteredPermissions(){return this.searchText.length!==0?this.permissions.filter(e=>{const s=new RegExp(this.searchText,"i");return s.test(e.name)||s.test(e.namespace)}):this.permissions}},mounted(){this.loadPermissionsAndRoles(),nsHotPress.create("ns-permissions").whenPressed("shift+/",e=>{this.$refs.search.focus(),setTimeout(()=>{this.searchText=""},5)}).whenPressed("/",e=>{this.$refs.search.focus(),setTimeout(()=>{this.searchText=""},5)})},methods:{__:b,async selectAllPermissions(e){const s=new Object;s[e.namespace]=new Object;let r=!1;if(e.locked&&(r=await new Promise((a,t)=>{Popup.show(nsConfirmPopup,{title:b("Confirm Your Action"),message:b("Would you like to bulk edit a system role ?"),onAction:c=>a(!!c)})})),!e.locked||e.locked&&r){const a=this.filterObjectByKeys(e.fields,this.filteredPermissions.map(t=>t.namespace));for(let t in a)e.fields[t].value=e.field.value,s[e.namespace][t]=e.field.value;this.arrayToObject(this.filteredPermissions,"namespace",t=>s[e.namespace][t.namespace]),m.put("/api/users/roles",s).subscribe(t=>{_.success(t.message,null,{duration:3e3}).subscribe()})}else e.field.value=!e.field.value},filterObjectByKeys(e,s){return Object.fromEntries(Object.entries(e).filter(([r])=>s.includes(r)))},arrayToObject(e,s,r){return Object.assign({},...e.map(a=>({[a[s]]:r(a)})))},submitPermissions(e,s){const r=new Object;r[e.namespace]=new Object,r[e.namespace][s.name]=s.value,m.put("/api/users/roles",r).subscribe(a=>{_.success(a.message,null,{duration:3e3}).subscribe()})},loadPermissionsAndRoles(){return v([m.get("/api/users/roles"),m.get("/api/users/permissions")]).subscribe(e=>{this.permissions=e[1],this.roles=e[0].map(s=>(s.fields={},s.field={type:"checkbox",name:s.namespace,value:!1},this.permissions.forEach(r=>{s.fields[r.namespace]={type:"checkbox",value:s.permissions.filter(a=>a.namespace===r.namespace).length>0,name:r.namespace,label:null}}),s))})}}},O={id:"permission-wrapper"},B={class:"my-2"},A=["placeholder"],E={class:"rounded shadow ns-box flex"},R={id:"permissions",class:"w- bg-gray-800 flex-shrink-0"},V={class:"h-24 py-4 px-2 border-b border-gray-700 text-gray-100 flex justify-between items-center"},N={key:0},D=i("i",{class:"las la-expand"},null,-1),F=[D],H=i("i",{class:"las la-compress"},null,-1),K=[H],S=["title"],z={key:0},G={key:1},J={class:"flex flex-auto overflow-hidden"},L={class:"overflow-y-auto"},M={class:"text-gray-700 flex"},U={class:"mx-1"},W={class:"mx-1"};function Y(e,s,r,a,t,c){const g=P("ns-checkbox");return o(),l("div",O,[i("div",B,[j(i("input",{ref:"search","onUpdate:modelValue":s[0]||(s[0]=n=>t.searchText=n),type:"text",placeholder:c.__('Press "/" to search permissions'),class:"border-2 p-2 w-full outline-none bg-input-background border-input-edge text-primary"},null,8,A),[[k,t.searchText]])]),i("div",E,[i("div",R,[i("div",V,[t.toggled?u("",!0):(o(),l("span",N,f(c.__("Permissions")),1)),i("div",null,[t.toggled?u("",!0):(o(),l("button",{key:0,onClick:s[1]||(s[1]=n=>t.toggled=!t.toggled),class:"rounded-full bg-white text-gray-700 h-6 w-6 flex items-center justify-center"},F)),t.toggled?(o(),l("button",{key:1,onClick:s[2]||(s[2]=n=>t.toggled=!t.toggled),class:"rounded-full bg-white text-gray-700 h-6 w-6 flex items-center justify-center"},K)):u("",!0)])]),(o(!0),l(p,null,h(c.filteredPermissions,n=>(o(),l("div",{key:n.id,class:T([t.toggled?"w-24":"w-54","p-2 border-b border-gray-700 text-gray-100"])},[i("a",{href:"javascript:void(0)",title:n.namespace},[t.toggled?u("",!0):(o(),l("span",z,f(n.name),1)),t.toggled?(o(),l("span",G,f(n.name),1)):u("",!0)],8,S)],2))),128))]),i("div",J,[i("div",L,[i("div",M,[(o(!0),l(p,null,h(t.roles,n=>(o(),l("div",{key:n.id,class:"h-24 py-4 px-2 w-56 items-center border-b justify-center flex role flex-shrink-0 border-r border-table-th-edge"},[i("p",U,[i("span",null,f(n.name),1)]),i("span",W,[x(g,{onChange:d=>c.selectAllPermissions(n),field:n.field},null,8,["onChange","field"])])]))),128))]),(o(!0),l(p,null,h(c.filteredPermissions,n=>(o(),l("div",{key:n.id,class:"permission flex"},[(o(!0),l(p,null,h(t.roles,d=>(o(),l("div",{key:d.id,class:"border-b border-table-th-edge w-56 flex-shrink-0 p-2 flex items-center justify-center border-r"},[x(g,{onChange:q=>c.submitPermissions(d,d.fields[n.namespace]),field:d.fields[n.namespace]},null,8,["onChange","field"])]))),128))]))),128))])])])])}const $=w(C,[["render",Y]]);export{$ as default}; diff --git a/public/build/assets/ns-permissions-C2Rq9WaF.js b/public/build/assets/ns-permissions-C2Rq9WaF.js deleted file mode 100644 index 81424adbe..000000000 --- a/public/build/assets/ns-permissions-C2Rq9WaF.js +++ /dev/null @@ -1 +0,0 @@ -import{o as y,Z as v,v as k}from"./tax-BACo6kIE.js";import{a as m,b as _}from"./bootstrap-B7E2wy_a.js";import{_ as b}from"./currency-ZXKMLAC0.js";import{_ as w}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as P,o,c as l,b as i,C as j,t as f,f as u,F as p,e as h,n as C,g as x}from"./runtime-core.esm-bundler-DCfIpxDt.js";const T={name:"ns-permissions",filters:[y],data(){return{permissions:[],toggled:!1,roles:[],searchText:""}},computed:{filteredPermissions(){return this.searchText.length!==0?this.permissions.filter(e=>{const s=new RegExp(this.searchText,"i");return s.test(e.name)||s.test(e.namespace)}):this.permissions}},mounted(){this.loadPermissionsAndRoles(),nsHotPress.create("ns-permissions").whenPressed("shift+/",e=>{this.$refs.search.focus(),setTimeout(()=>{this.searchText=""},5)}).whenPressed("/",e=>{this.$refs.search.focus(),setTimeout(()=>{this.searchText=""},5)})},methods:{__:b,async selectAllPermissions(e){const s=new Object;s[e.namespace]=new Object;let r=!1;if(e.locked&&(r=await new Promise((a,t)=>{Popup.show(nsConfirmPopup,{title:b("Confirm Your Action"),message:b("Would you like to bulk edit a system role ?"),onAction:c=>a(!!c)})})),!e.locked||e.locked&&r){const a=this.filterObjectByKeys(e.fields,this.filteredPermissions.map(t=>t.namespace));for(let t in a)e.fields[t].value=e.field.value,s[e.namespace][t]=e.field.value;this.arrayToObject(this.filteredPermissions,"namespace",t=>s[e.namespace][t.namespace]),m.put("/api/users/roles",s).subscribe(t=>{_.success(t.message,null,{duration:3e3}).subscribe()})}else e.field.value=!e.field.value},filterObjectByKeys(e,s){return Object.fromEntries(Object.entries(e).filter(([r])=>s.includes(r)))},arrayToObject(e,s,r){return Object.assign({},...e.map(a=>({[a[s]]:r(a)})))},submitPermissions(e,s){const r=new Object;r[e.namespace]=new Object,r[e.namespace][s.name]=s.value,m.put("/api/users/roles",r).subscribe(a=>{_.success(a.message,null,{duration:3e3}).subscribe()})},loadPermissionsAndRoles(){return v([m.get("/api/users/roles"),m.get("/api/users/permissions")]).subscribe(e=>{this.permissions=e[1],this.roles=e[0].map(s=>(s.fields={},s.field={type:"checkbox",name:s.namespace,value:!1},this.permissions.forEach(r=>{s.fields[r.namespace]={type:"checkbox",value:s.permissions.filter(a=>a.namespace===r.namespace).length>0,name:r.namespace,label:null}}),s))})}}},O={id:"permission-wrapper"},A={class:"my-2"},B=["placeholder"],E={class:"rounded shadow ns-box flex"},R={id:"permissions",class:"w- bg-gray-800 flex-shrink-0"},V={class:"h-24 py-4 px-2 border-b border-gray-700 text-gray-100 flex justify-between items-center"},N={key:0},D=i("i",{class:"las la-expand"},null,-1),F=[D],H=i("i",{class:"las la-compress"},null,-1),K=[H],S=["title"],z={key:0},J={key:1},L={class:"flex flex-auto overflow-hidden"},M={class:"overflow-y-auto"},U={class:"text-gray-700 flex"},W={class:"mx-1"},Y={class:"mx-1"};function Z(e,s,r,a,t,c){const g=P("ns-checkbox");return o(),l("div",O,[i("div",A,[j(i("input",{ref:"search","onUpdate:modelValue":s[0]||(s[0]=n=>t.searchText=n),type:"text",placeholder:c.__('Press "/" to search permissions'),class:"border-2 p-2 w-full outline-none bg-input-background border-input-edge text-primary"},null,8,B),[[k,t.searchText]])]),i("div",E,[i("div",R,[i("div",V,[t.toggled?u("",!0):(o(),l("span",N,f(c.__("Permissions")),1)),i("div",null,[t.toggled?u("",!0):(o(),l("button",{key:0,onClick:s[1]||(s[1]=n=>t.toggled=!t.toggled),class:"rounded-full bg-white text-gray-700 h-6 w-6 flex items-center justify-center"},F)),t.toggled?(o(),l("button",{key:1,onClick:s[2]||(s[2]=n=>t.toggled=!t.toggled),class:"rounded-full bg-white text-gray-700 h-6 w-6 flex items-center justify-center"},K)):u("",!0)])]),(o(!0),l(p,null,h(c.filteredPermissions,n=>(o(),l("div",{key:n.id,class:C([t.toggled?"w-24":"w-54","p-2 border-b border-gray-700 text-gray-100"])},[i("a",{href:"javascript:void(0)",title:n.namespace},[t.toggled?u("",!0):(o(),l("span",z,f(n.name),1)),t.toggled?(o(),l("span",J,f(n.name),1)):u("",!0)],8,S)],2))),128))]),i("div",L,[i("div",M,[i("div",U,[(o(!0),l(p,null,h(t.roles,n=>(o(),l("div",{key:n.id,class:"h-24 py-4 px-2 w-56 items-center border-b justify-center flex role flex-shrink-0 border-r border-table-th-edge"},[i("p",W,[i("span",null,f(n.name),1)]),i("span",Y,[x(g,{onChange:d=>c.selectAllPermissions(n),field:n.field},null,8,["onChange","field"])])]))),128))]),(o(!0),l(p,null,h(c.filteredPermissions,n=>(o(),l("div",{key:n.id,class:"permission flex"},[(o(!0),l(p,null,h(t.roles,d=>(o(),l("div",{key:d.id,class:"border-b border-table-th-edge w-56 flex-shrink-0 p-2 flex items-center justify-center border-r"},[x(g,{onChange:q=>c.submitPermissions(d,d.fields[n.namespace]),field:d.fields[n.namespace]},null,8,["onChange","field"])]))),128))]))),128))])])])])}const ee=w(T,[["render",Z]]);export{ee as default}; diff --git a/public/build/assets/ns-pos-CYLMD5ot.js b/public/build/assets/ns-pos-CYLMD5ot.js deleted file mode 100644 index b060aaae0..000000000 --- a/public/build/assets/ns-pos-CYLMD5ot.js +++ /dev/null @@ -1 +0,0 @@ -import b from"./ns-pos-cart-y3XxS5Vv.js";import v from"./ns-pos-grid-BsJnBCNy.js";import{_}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r,o as e,c as o,b as i,F as h,e as x,h as S,k as w,n as l,g as c,f as a}from"./runtime-core.esm-bundler-DCfIpxDt.js";import"./bootstrap-B7E2wy_a.js";import"./tax-BACo6kIE.js";import"./currency-ZXKMLAC0.js";import"./pos-section-switch-DmfccXVX.js";import"./ns-pos-order-type-popup-BBww5Dqw.js";import"./ns-prompt-popup-BbWKrSku.js";import"./ns-orders-preview-popup-MUf9kQx1.js";import"./index.es-BED_8l8F.js";import"./ns-pos-shipping-popup-Cw_bpB2Q.js";const k={name:"ns-pos",computed:{buttons(){return POS.header.buttons}},mounted(){this.visibleSectionSubscriber=POS.visibleSection.subscribe(n=>{this.visibleSection=n});const s=document.getElementById("loader");s.classList.remove("fade-in-entrance"),s.classList.add("fade-out-exit"),setTimeout(()=>{s.remove(),POS.reset()},500)},unmounted(){this.visibleSectionSubscriber.unsubscribe()},data(){return{visibleSection:null,visibleSectionSubscriber:null}},components:{nsPosCart:b,nsPosGrid:v}},g={class:"h-full flex-auto flex flex-col",id:"pos-container"},P={class:"flex overflow-hidden flex-shrink-0 px-2 pt-2"},y={class:"-mx-2 flex overflow-x-auto pb-1"},B={class:"flex-auto overflow-hidden flex p-2"},C={class:"flex flex-auto overflow-hidden -m-2"};function L(s,n,N,O,t,d){const m=r("ns-pos-cart"),u=r("ns-pos-grid");return e(),o("div",g,[i("div",P,[i("div",y,[(e(!0),o(h,null,x(d.buttons,(p,f)=>(e(),o("div",{class:"header-buttons flex px-2 flex-shrink-0",key:f},[(e(),S(w(p)))]))),128))])]),i("div",B,[i("div",C,[["both","cart"].includes(t.visibleSection)?(e(),o("div",{key:0,class:l([t.visibleSection==="both"?"w-1/2":"w-full","flex overflow-hidden p-2"])},[c(m)],2)):a("",!0),["both","grid"].includes(t.visibleSection)?(e(),o("div",{key:1,class:l([t.visibleSection==="both"?"w-1/2":"w-full","p-2 flex overflow-hidden"])},[c(u)],2)):a("",!0)])])])}const K=_(k,[["render",L]]);export{K as default}; diff --git a/public/build/assets/ns-pos-DOv3hZje.js b/public/build/assets/ns-pos-DOv3hZje.js new file mode 100644 index 000000000..793119f5e --- /dev/null +++ b/public/build/assets/ns-pos-DOv3hZje.js @@ -0,0 +1 @@ +import b from"./ns-pos-cart-DSIX-8QZ.js";import v from"./ns-pos-grid-B0ZZElXI.js";import{_}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r,o as e,c as o,a as i,F as h,b as x,g as S,j as w,n as l,f as c,e as a}from"./runtime-core.esm-bundler-RT2b-_3S.js";import"./bootstrap-Bpe5LRJd.js";import"./currency-lOMYG1Wf.js";import"./pos-section-switch-DmfccXVX.js";import"./ns-pos-order-type-popup-dHaiHxmR.js";import"./ns-prompt-popup-C2dK5WQb.js";import"./ns-orders-preview-popup-CjtIUcZ8.js";import"./index.es-Br67aBEV.js";import"./ns-pos-shipping-popup-OlhRvM9E.js";const k={name:"ns-pos",computed:{buttons(){return POS.header.buttons}},mounted(){this.visibleSectionSubscriber=POS.visibleSection.subscribe(n=>{this.visibleSection=n});const s=document.getElementById("loader");s.classList.remove("fade-in-entrance"),s.classList.add("fade-out-exit"),setTimeout(()=>{s.remove(),POS.reset()},500)},unmounted(){this.visibleSectionSubscriber.unsubscribe()},data(){return{visibleSection:null,visibleSectionSubscriber:null}},components:{nsPosCart:b,nsPosGrid:v}},g={class:"h-full flex-auto flex flex-col",id:"pos-container"},P={class:"flex overflow-hidden flex-shrink-0 px-2 pt-2"},y={class:"-mx-2 flex overflow-x-auto pb-1"},B={class:"flex-auto overflow-hidden flex p-2"},C={class:"flex flex-auto overflow-hidden -m-2"};function L(s,n,N,O,t,d){const m=r("ns-pos-cart"),u=r("ns-pos-grid");return e(),o("div",g,[i("div",P,[i("div",y,[(e(!0),o(h,null,x(d.buttons,(p,f)=>(e(),o("div",{class:"header-buttons flex px-2 flex-shrink-0",key:f},[(e(),S(w(p)))]))),128))])]),i("div",B,[i("div",C,[["both","cart"].includes(t.visibleSection)?(e(),o("div",{key:0,class:l([t.visibleSection==="both"?"w-1/2":"w-full","flex overflow-hidden p-2"])},[c(m)],2)):a("",!0),["both","grid"].includes(t.visibleSection)?(e(),o("div",{key:1,class:l([t.visibleSection==="both"?"w-1/2":"w-full","p-2 flex overflow-hidden"])},[c(u)],2)):a("",!0)])])])}const J=_(k,[["render",L]]);export{J as default}; diff --git a/public/build/assets/ns-pos-cart-DSIX-8QZ.js b/public/build/assets/ns-pos-cart-DSIX-8QZ.js new file mode 100644 index 000000000..954a5ffe5 --- /dev/null +++ b/public/build/assets/ns-pos-cart-DSIX-8QZ.js @@ -0,0 +1 @@ +import{g as N,v as R,w as A,F as D,p as F,b as v,a as E,G as I,n as U,P as y}from"./bootstrap-Bpe5LRJd.js";import{_ as l,n as B}from"./currency-lOMYG1Wf.js";import{s as M}from"./pos-section-switch-DmfccXVX.js";import{a as H,c as Y,n as G,b as $,P as W}from"./ns-pos-order-type-popup-dHaiHxmR.js";import{_ as P}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as d,a as o,t as r,r as b,f,B as z,F as x,b as C,g as S,w as k,i as O,e as p,h as T,ay as j,n as q,j as L}from"./runtime-core.esm-bundler-RT2b-_3S.js";import{c as K,a as J,j as X,n as V}from"./ns-prompt-popup-C2dK5WQb.js";import Z from"./ns-pos-shipping-popup-OlhRvM9E.js";import"./index.es-Br67aBEV.js";import"./ns-orders-preview-popup-CjtIUcZ8.js";const ee={props:["order"],methods:{__,async payOrder(){const e=nsHooks.applyFilters("ns-pay-queue",[ProductsQueue,CustomerQueue,TypeQueue,PaymentQueue]);for(let t in e)try{const a=await new e[t](this.order).run()}catch{return!1}}},mounted(){for(let e in nsShortcuts)["ns_pos_keyboard_payment"].includes(e)&&nsHotPress.create("ns_pos_keyboard_payment").whenNotVisible([".is-popup"]).whenPressed(nsShortcuts[e]!==null?nsShortcuts[e].join("+"):null,t=>{t.preventDefault(),this.payOrder()})},unmounted(){nsHotPress.destroy("ns_pos_keyboard_payment")}},te=o("i",{class:"mr-2 text-2xl lg:text-xl las la-cash-register"},null,-1),se={class:"text-lg hidden md:inline lg:text-2xl"};function oe(e,t,u,a,c,s){return i(),d("div",{onClick:t[0]||(t[0]=n=>s.payOrder()),id:"pay-button",class:"flex-shrink-0 w-1/4 flex items-center font-bold cursor-pointer justify-center bg-green-500 text-white hover:bg-green-600 border-r border-green-600 flex-auto"},[te,o("span",se,r(s.__("Pay")),1)])}const re=P(ee,[["render",oe]]),ne={name:"ns-pos-hold-orders",props:["popup"],data(){return{order:{},title:"",show:!0}},mounted(){this.popupCloser(),this.show=POS.getHoldPopupEnabled(),this.show||this.popup.params.resolve({title:this.title}),this.$refs.reference.focus(),this.$refs.reference.select(),this.order=this.popup.params.order,this.title=this.popup.params.order.title||""},methods:{__:l,nsCurrency:B,popupCloser:N,submitHold(){this.popup.close(),this.popup.params.resolve({title:this.title})}}},ie={class:"ns-box shadow-lg w-6/7-screen md:w-3/7-screen lg:w-2/6-screen"},de={class:"p-2 flex ns-box-header justify-between border-b items-center"},le={class:"font-semibold"},ae={class:"flex-auto ns-box-body"},ue={class:"border-b h-16 flex items-center justify-center"},ce={class:"text-5xl text-primary"},pe={class:"p-2"},_e={class:"input-group border-2 info"},he=["placeholder"],be={class:"p-2"},me={class:"text-secondary"},fe={class:"flex ns-box-footer"};function ye(e,t,u,a,c,s){const n=b("ns-close-button");return i(),d("div",ie,[o("div",de,[o("h3",le,r(s.__("Hold Order")),1),o("div",null,[f(n,{onClick:t[0]||(t[0]=_=>u.popup.close())})])]),o("div",ae,[o("div",ue,[o("span",ce,r(s.nsCurrency(c.order.total)),1)]),o("div",pe,[o("div",_e,[z(o("input",{onKeyup:t[1]||(t[1]=A(_=>s.submitHold(),["enter"])),"onUpdate:modelValue":t[2]||(t[2]=_=>c.title=_),ref:"reference",type:"text",placeholder:s.__("Order Reference"),class:"outline-none rounded border-2 p-2 w-full"},null,40,he),[[R,c.title]])])]),o("div",be,[o("p",me,r(s.__("The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.")),1)])]),o("div",fe,[o("div",{onClick:t[3]||(t[3]=_=>s.submitHold()),class:"cursor-pointer w-1/2 py-3 flex justify-center items-center bg-green-500 text-white font-semibold"},r(s.__("Confirm")),1),o("div",{onClick:t[4]||(t[4]=_=>u.popup.close()),class:"cursor-pointer w-1/2 py-3 flex justify-center items-center bg-error-secondary text-white font-semibold"},r(s.__("Cancel")),1)])])}const ve=P(ne,[["render",ye]]),xe={props:["order"],methods:{__,async holdOrder(){if(this.order.payment_status!=="hold"&&this.order.payments.length>0)return nsSnackBar.error(__("Unable to hold an order which payment status has been updated already.")).subscribe();const e=nsHooks.applyFilters("ns-hold-queue",[ProductsQueue,CustomerQueue,TypeQueue]);for(let u in e)try{const c=await new e[u](this.order).run()}catch{return!1}nsHooks.applyFilters("ns-override-hold-popup",()=>{new Promise((a,c)=>{Popup.show(ve,{resolve:a,reject:c,order:this.order})}).then(a=>{this.order.title=a.title,this.order.payment_status="hold",POS.order.next(this.order);const c=Popup.show(K);POS.submitOrder().then(s=>{c.close(),nsSnackBar.success(s.message).subscribe()},s=>{c.close(),nsSnackBar.error(s.message).subscribe()})}).catch(a=>{console.log(a)})})()}},mounted(){for(let e in nsShortcuts)["ns_pos_keyboard_hold_order"].includes(e)&&nsHotPress.create("ns_pos_keyboard_hold_order").whenNotVisible([".is-popup"]).whenPressed(nsShortcuts[e]!==null?nsShortcuts[e].join("+"):null,t=>{t.preventDefault(),this.holdOrder()})},unmounted(){nsHotPress.destroy("ns_pos_keyboard_hold_order")}},we=o("i",{class:"mr-2 text-2xl lg:text-xl las la-pause"},null,-1),ge={class:"text-lg hidden md:inline lg:text-2xl"};function Pe(e,t,u,a,c,s){return i(),d("div",{onClick:t[0]||(t[0]=n=>s.holdOrder()),id:"hold-button",class:"flex-shrink-0 w-1/4 flex items-center font-bold cursor-pointer justify-center bg-blue-500 text-white border-r hover:bg-blue-600 border-blue-600 flex-auto"},[we,o("span",ge,r(s.__("Hold")),1)])}const ke=P(xe,[["render",Pe]]),Ce={props:["order","settings"],methods:{__,openDiscountPopup(e,t,u=null){if(!this.settings.products_discount&&t==="product")return nsSnackBar.error(__("You're not allowed to add a discount on the product.")).subscribe();if(!this.settings.cart_discount&&t==="cart")return nsSnackBar.error(__("You're not allowed to add a discount on the cart.")).subscribe();Popup.show(H,{reference:e,type:t,onSubmit(a){t==="product"?POS.updateProduct(e,a,u):t==="cart"&&POS.updateCart(e,a)}},{popupClass:"bg-white h:2/3 shadow-lg xl:w-1/4 lg:w-2/5 md:w-2/3 w-full"})}}},Se=o("i",{class:"mr-2 text-2xl lg:text-xl las la-percent"},null,-1),Te={class:"text-lg hidden md:inline lg:text-2xl"};function Oe(e,t,u,a,c,s){return i(),d("div",{onClick:t[0]||(t[0]=n=>s.openDiscountPopup(u.order,"cart")),id:"discount-button",class:"flex-shrink-0 w-1/4 flex items-center font-bold cursor-pointer justify-center border-r border-box-edge flex-auto"},[Se,o("span",Te,r(s.__("Discount")),1)])}const je=P(Ce,[["render",Oe]]),qe={props:["order","settings"],methods:{__,voidOngoingOrder(){POS.voidOrder(this.order)}}},Ne=o("i",{class:"mr-2 text-2xl lg:text-xl las la-trash"},null,-1),De={class:"text-lg hidden md:inline lg:text-2xl"};function Be(e,t,u,a,c,s){return i(),d("div",{onClick:t[0]||(t[0]=n=>s.voidOngoingOrder(u.order)),id:"void-button",class:"flex-shrink-0 w-1/4 flex items-center font-bold cursor-pointer justify-center bg-red-500 text-white border-box-edge hover:bg-red-600 flex-auto"},[Ne,o("span",De,r(s.__("Void")),1)])}const Ve=P(qe,[["render",Be]]),Fe={name:"ns-pos-note-popup",props:["popup"],data(){return{validation:new D,fields:[{label:l("Note"),name:"note",value:"",description:l("More details about this order"),type:"textarea"},{label:l("Display On Receipt"),name:"note_visibility",value:"",options:[{label:l("Yes"),value:"visible"},{label:l("No"),value:"hidden"}],description:l("Will display the note on the receipt"),type:"switch"}]}},mounted(){this.popupCloser(),this.fields.forEach(e=>{e.name==="note"?e.value=this.popup.params.note:e.name==="note_visibility"&&(e.value=this.popup.params.note_visibility)})},methods:{__:l,popupResolver:F,popupCloser:N,closePopup(){this.popupResolver(!1)},saveNote(){if(!this.validation.validateFields(this.fields)){const e=this.validation.validateFieldsErrors(this.fields);return this.validation.triggerFieldsErrors(this.fields,e),this.$forceUpdate(),v.error(l("Unable to proceed the form is not valid.")).subscribe()}return this.popupResolver(this.validation.extractFields(this.fields))}}},He={class:"shadow-lg ns-box w-95vw md:w-3/5-screen lg:w-2/5-screen"},Qe={class:"p-2 flex justify-between items-center border-b ns-box-header"},Re={class:"font-bold"},Ae={class:"p-2"},Ee={class:"p-2 flex justify-end border-t ns-box-footer"};function Ie(e,t,u,a,c,s){const n=b("ns-close-button"),_=b("ns-field"),m=b("ns-button");return i(),d("div",He,[o("div",Qe,[o("h3",Re,r(s.__("Order Note")),1),o("div",null,[f(n,{onClick:t[0]||(t[0]=h=>s.closePopup())})])]),o("div",Ae,[(i(!0),d(x,null,C(c.fields,(h,w)=>(i(),S(_,{key:w,field:h},null,8,["field"]))),128))]),o("div",Ee,[f(m,{type:"info",onClick:t[1]||(t[1]=h=>s.saveNote())},{default:k(()=>[O(r(s.__("Save")),1)]),_:1})])])}const Ue=P(Fe,[["render",Ie]]),Me={name:"ns-pos-tax-popup",props:["popup"],data(){return{validation:new D,tax_group:[],order:null,orderSubscriber:null,optionsSubscriber:null,options:{},tax_groups:[],activeTab:"",group_fields:[{label:l("Select Tax"),name:"tax_group_id",description:l("Define the tax that apply to the sale."),type:"select",disabled:!0,value:"",validation:"required",options:[]},{label:l("Type"),name:"tax_type",disabled:!0,value:"",description:l("Define how the tax is computed"),type:"select",validation:"required",options:[{label:l("Exclusive"),value:"exclusive"},{label:l("Inclusive"),value:"inclusive"}]}]}},mounted(){this.loadGroups(),this.popupCloser(),this.activeTab=this.popup.params.activeTab||"settings",this.group_fields.forEach(e=>{e.value=this.popup.params[e.name]||void 0}),this.orderSubscriber=POS.order.subscribe(e=>{this.order=e}),this.optionsSubscriber=POS.options.subscribe(e=>{this.options=e,["variable_vat","products_variable_vat"].includes(this.options.ns_pos_vat)&&this.group_fields.forEach(t=>t.disabled=!1)})},unmounted(){this.orderSubscriber.unsubscribe(),this.optionsSubscriber.unsubscribe()},methods:{__:l,nsCurrency:B,popupCloser:N,popupResolver:F,changeActive(e){this.activeTab=e},closePopup(){this.popupResolver(!1)},saveTax(){if(!this.validation.validateFields(this.group_fields))return v.error(l("Unable to proceed the form is not valid.")).subscribe();const e=this.validation.extractFields(this.group_fields);e.tax_groups=[],this.popupResolver(e)},loadGroups(){E.get("/api/taxes/groups").subscribe(e=>{this.groups=e,this.group_fields.forEach(t=>{t.name==="tax_group_id"&&(t.options=this.groups.map(u=>({label:u.name,value:u.id})))})})}}},Ye={class:"ns-box shadow-lg w-95vw md:w-3/5-screen lg:w-2/5-screen"},Ge={class:"p-2 flex justify-between items-center border-b ns-box-header"},$e={class:"text-blog"},We={class:"p-2 ns-box-body"},ze={class:"p-2 border-b ns-box-body"},Le={class:"flex justify-end p-2"},Ke={key:0,class:"p-2"},Je={key:0,class:"p-2 text-center text-primary"},Xe={key:0,class:"p-2"},Ze={class:"border shadow p-2 w-full flex justify-between items-center elevation-surface"};function et(e,t,u,a,c,s){const n=b("ns-close-button"),_=b("ns-field"),m=b("ns-button"),h=b("ns-tabs-item"),w=b("ns-tabs");return i(),d("div",Ye,[o("div",Ge,[o("h3",$e,r(s.__("Tax & Summary")),1),o("div",null,[f(n,{onClick:t[0]||(t[0]=g=>s.closePopup())})])]),o("div",We,[f(w,{active:c.activeTab,onChangeTab:t[2]||(t[2]=g=>s.changeActive(g))},{default:k(()=>[f(h,{padding:"0",label:s.__("Settings"),identifier:"settings",active:!0},{default:k(()=>[o("div",ze,[(i(!0),d(x,null,C(c.group_fields,(g,Q)=>(i(),S(_,{field:g,key:Q},null,8,["field"]))),128))]),o("div",Le,[f(m,{onClick:t[1]||(t[1]=g=>s.saveTax()),type:"info"},{default:k(()=>[O(r(s.__("Save")),1)]),_:1})])]),_:1},8,["label"]),f(h,{padding:"0",label:s.__("Summary"),identifier:"summary",active:!1},{default:k(()=>[c.order?(i(),d("div",Ke,[(i(!0),d(x,null,C(c.order.taxes,g=>(i(),d("div",{key:g.id,class:"mb-2 border shadow p-2 w-full flex justify-between items-center elevation-surface"},[o("span",null,r(g.name),1),o("span",null,r(s.nsCurrency(g.tax_value)),1)]))),128)),c.order.taxes.length===0?(i(),d("div",Je,r(s.__("No tax is active")),1)):p("",!0)])):p("",!0)]),_:1},8,["label"]),f(h,{padding:"0",label:s.__("Product Taxes"),identifier:"product_taxes",active:!1},{default:k(()=>[c.order?(i(),d("div",Xe,[o("div",Ze,[o("span",null,r(s.__("Product Taxes")),1),o("span",null,r(s.nsCurrency(c.order.products_tax_value)),1)])])):p("",!0)]),_:1},8,["label"])]),_:1},8,["active"])])])}const tt=P(Me,[["render",et]]),st={name:"ns-pos-order-settings",props:["popup"],mounted(){nsHttpClient.get("/api/fields/ns.pos-order-settings").subscribe(e=>{e.forEach(t=>{t.value=this.popup.params.order[t.name]||""}),this.fields=this.validation.createFields(e)},e=>{}),this.popupCloser()},data(){return{fields:[],validation:new D}},methods:{__,popupCloser,popupResolver,closePopup(){this.popupResolver(!1)},saveSettings(){const e=this.validation.extractFields(this.fields);this.popupResolver(e)}}},ot={class:"shadow-lg flex flex-col ns-box w-95vw h-95vh md:w-3/5-screen md:h-3/5-screen lg:w-2/5-screen"},rt={class:"p-2 border-b ns-box-header items-center flex justify-between"},nt={class:"text-semibold"},it={class:"p-2 flex-auto border-b ns-box-body overflow-y-auto"},dt={class:"p-2 flex justify-end ns-box-footer"};function lt(e,t,u,a,c,s){const n=b("ns-close-button"),_=b("ns-field"),m=b("ns-button");return i(),d("div",ot,[o("div",rt,[o("h3",nt,r(s.__("Order Settings")),1),o("div",null,[f(n,{onClick:t[0]||(t[0]=h=>s.closePopup())})])]),o("div",it,[(i(!0),d(x,null,C(c.fields,(h,w)=>(i(),S(_,{field:h,key:w},null,8,["field"]))),128))]),o("div",dt,[f(m,{onClick:t[1]||(t[1]=h=>s.saveSettings()),type:"info"},{default:k(()=>[O(r(s.__("Save")),1)]),_:1})])])}const at=P(st,[["render",lt]]),ut={name:"ns-pos-product-price-product",props:["popup"],components:{nsNumpad:J,nsNumpadPlus:X},computed:{},data(){return{product:{},optionsSubscription:null,options:{},price:0}},mounted(){this.popupCloser(),this.product=this.popup.params.product,this.optionsSubscription=POS.options.subscribe(e=>{this.options=T(e)})},beforeDestroy(){this.optionsSubscription.unsubscribe()},methods:{popupResolver,popupCloser,nsCurrency:B,__,updateProductPrice(e){this.product.unit_price=e},resolveProductPrice(e){this.popupResolver(this.product.unit_price)}}},ct={class:"ns-box shadow-lg w-95vw md:w-3/5-screen lg:w-2/5-screen"},pt={class:"popup-heading ns-box-header"},_t={class:"flex flex-col ns-box-body"},ht={class:"h-16 flex items-center justify-center elevation-surface info font-bold"},bt={class:"text-2xl"};function mt(e,t,u,a,c,s){const n=b("ns-close-button"),_=b("ns-numpad"),m=b("ns-numpad-plus");return i(),d("div",ct,[o("div",pt,[o("h3",null,r(s.__("Product Price")),1),o("div",null,[f(n,{onClick:t[0]||(t[0]=h=>s.popupResolver(!1))})])]),o("div",_t,[o("div",ht,[o("h2",bt,r(s.nsCurrency(c.product.unit_price)),1)]),c.options.ns_pos_numpad==="default"?(i(),S(_,{key:0,floating:c.options.ns_pos_allow_decimal_quantities,onChanged:t[1]||(t[1]=h=>s.updateProductPrice(h)),onNext:t[2]||(t[2]=h=>s.resolveProductPrice(h)),value:c.product.unit_price},null,8,["floating","value"])):p("",!0),c.options.ns_pos_numpad==="advanced"?(i(),S(m,{key:1,onChanged:t[3]||(t[3]=h=>s.updateProductPrice(h)),onNext:t[4]||(t[4]=h=>s.resolveProductPrice(h)),value:c.product.unit_price},null,8,["value"])):p("",!0)])])}const ft=P(ut,[["render",mt]]),yt={name:"ns-pos-quick-product-popup",props:["popup"],methods:{__:l,popupCloser:N,popupResolver:F,close(){this.popupResolver(!1)},async addProduct(){const e=this.validation.extractFields(this.fields),t=this.fields.filter(s=>typeof s.show>"u"||typeof s.show=="function"&&s.show(e));if(!this.validation.validateFields(t))return v.error(l("Unable to proceed. The form is not valid.")).subscribe();let a=this.validation.extractFields(t);a.$original=()=>({stock_management:"disabled",category_id:0,tax_group:this.tax_groups.filter(s=>parseInt(s.id)===parseInt(a.tax_group_id))[0],tax_group_id:a.tax_group_id,tax_type:a.tax_type}),a.product_type==="product"?(a.unit_name=this.units.filter(s=>s.id===a.unit_id)[0].name,a.quantity=parseFloat(a.quantity),a.unit_price=parseFloat(a.unit_price),a.mode="custom",a.price_with_tax=a.unit_price,a.price_without_tax=a.unit_price,a.tax_value=0):(a.unit_name=l("N/A"),a.unit_price=0,a.quantity=1);const c=await POS.defineQuantities(a,this.units);a.$quantities=()=>c,a=POS.computeProductTax(a),POS.addToCart(a),this.close()},loadData(){this.loaded=!1,I(nsHttpClient.get("/api/units"),nsHttpClient.get("/api/taxes/groups")).subscribe({next:e=>{this.units=e[0],this.tax_groups=e[1],this.fields.filter(t=>{t.name==="tax_group_id"&&(t.options=e[1].map(u=>({label:u.name,value:u.id})),e[1].length>0&&e[1][0].id!==void 0&&(t.value=e[1][0].id||this.options.ns_pos_tax_group)),t.name==="tax_type"&&(t.value=this.options.tax_type||"inclusive"),t.name==="unit_id"&&(t.value=this.options.ns_pos_quick_product_default_unit,t.options=e[0].map(u=>({label:u.name,value:u.id})))}),this.buildForm()},error:e=>{}})},buildForm(){this.fields=this.validation.createFields(this.fields),this.loaded=!0,setTimeout(()=>{this.$el.querySelector("#name").select()},100)}},computed:{form(){return this.validation.extractFields(this.fields)}},data(){return{units:[],options:POS.options.getValue(),tax_groups:[],loaded:!1,validation:new D,fields:[{label:l("Name"),name:"name",type:"text",description:l("Provide a unique name for the product."),validation:"required"},{label:l("Product Type"),name:"product_type",type:"select",description:l("Define the product type."),options:[{label:l("Normal"),value:"product"},{label:l("Dynamic"),value:"dynamic"}],value:"product",validation:"required"},{label:l("Rate"),name:"rate",type:"text",description:l("In case the product is computed based on a percentage, define the rate here."),validation:"required",show(e){return e.product_type==="dynamic"}},{label:l("Unit Price"),name:"unit_price",type:"text",description:l("Define what is the sale price of the item."),validation:"",value:0,show(e){return e.product_type==="product"}},{label:l("Quantity"),name:"quantity",type:"text",value:1,description:l("Set the quantity of the product."),validation:"",show(e){return e.product_type==="product"}},{label:l("Unit"),name:"unit_id",type:"select",options:[],description:l("Assign a unit to the product."),validation:"",show(e){return e.product_type==="product"}},{label:l("Tax Type"),name:"tax_type",type:"select",options:[{label:l("Disabled"),value:""},{label:l("Inclusive"),value:"inclusive"},{label:l("Exclusive"),value:"exclusive"}],description:l("Define what is tax type of the item."),show(e){return e.product_type==="product"}},{label:l("Tax Group"),name:"tax_group_id",type:"select",options:[],description:l("Choose the tax group that should apply to the item."),show(e){return e.product_type==="product"}}]}},mounted(){this.popupCloser(),this.loadData()}},vt={class:"w-95vw flex flex-col h-95vh shadow-lg md:w-3/5-screen lg:w-2/5-screen md:h-3/5-screen ns-box"},xt={class:"header ns-box-header border-b flex justify-between p-2 items-center"},wt={class:"ns-box-body p-2 flex-auto overflow-y-auto"},gt={key:0,class:"h-full w-full flex justify-center items-center"},Pt={class:"ns-box-footer border-t flex justify-between p-2"},kt=o("div",null,null,-1);function Ct(e,t,u,a,c,s){const n=b("ns-close-button"),_=b("ns-spinner"),m=b("ns-field"),h=b("ns-button");return i(),d("div",vt,[o("div",xt,[o("h3",null,r(s.__("Product / Service")),1),o("div",null,[f(n,{onClick:t[0]||(t[0]=w=>s.close())})])]),o("div",wt,[c.loaded?p("",!0):(i(),d("div",gt,[f(_)])),c.loaded?(i(!0),d(x,{key:1},C(c.fields,(w,g)=>(i(),d(x,null,[w.show&&w.show(s.form)||!w.show?(i(),S(m,{key:g,field:w},null,8,["field"])):p("",!0)],64))),256)):p("",!0)]),o("div",Pt,[kt,o("div",null,[f(h,{onClick:t[1]||(t[1]=w=>s.addProduct()),type:"info"},{default:k(()=>[O(r(s.__("Create")),1)]),_:1})])])])}const St=P(yt,[["render",Ct]]),Tt={name:"ns-pos-cart",data:()=>({popup:null,cartButtons:{},products:[],defaultCartButtons:{nsPosPayButton:j(re),nsPosHoldButton:j(ke),nsPosDiscountButton:j(je),nsPosVoidButton:j(Ve)},visibleSection:null,visibleSectionSubscriber:null,cartButtonsSubscriber:null,optionsSubscriber:null,options:{},typeSubscribe:null,orderSubscribe:null,productSubscribe:null,settingsSubscribe:null,settings:{},types:[],order:T({})}),computed:{selectedType(){return this.order.type?this.order.type.label:"N/A"},isVisible(){return this.visibleSection==="cart"},customerName(){return this.order.customer?`${this.order.customer.first_name} ${this.order.customer.last_name}`:"N/A"},couponName(){return l("Apply Coupon")}},mounted(){this.cartButtonsSubscriber=POS.cartButtons.subscribe(e=>{this.cartButtons=e}),this.optionsSubscriber=POS.options.subscribe(e=>{this.options=e}),this.typeSubscribe=POS.types.subscribe(e=>this.types=e),this.orderSubscribe=POS.order.subscribe(e=>{this.order=T(e)}),this.productSubscribe=POS.products.subscribe(e=>{this.products=T(e)}),this.settingsSubscribe=POS.settings.subscribe(e=>{this.settings=T(e)}),this.visibleSectionSubscriber=POS.visibleSection.subscribe(e=>{this.visibleSection=T(e)}),U.addAction("ns-before-cart-reset","ns-pos-cart-buttons",()=>{POS.cartButtons.next(this.defaultCartButtons)});for(let e in nsShortcuts)["ns_pos_keyboard_shipping"].includes(e)&&nsHotPress.create("ns_pos_keyboard_shipping").whenNotVisible([".is-popup"]).whenPressed(nsShortcuts[e]!==null?nsShortcuts[e].join("+"):null,t=>{t.preventDefault(),this.openShippingPopup()}),["ns_pos_keyboard_note"].includes(e)&&nsHotPress.create("ns_pos_keyboard_note").whenNotVisible([".is-popup"]).whenPressed(nsShortcuts[e]!==null?nsShortcuts[e].join("+"):null,t=>{t.preventDefault(),this.openNotePopup()})},unmounted(){this.visibleSectionSubscriber.unsubscribe(),this.typeSubscribe.unsubscribe(),this.orderSubscribe.unsubscribe(),this.productSubscribe.unsubscribe(),this.settingsSubscribe.unsubscribe(),this.optionsSubscriber.unsubscribe(),this.cartButtonsSubscriber.unsubscribe(),nsHotPress.destroy("ns_pos_keyboard_shipping"),nsHotPress.destroy("ns_pos_keyboard_note")},methods:{__:l,nsCurrency:B,switchTo:M,takeRandomClass(){return"border-gray-500 bg-gray-400 text-white hover:bg-gray-500"},openAddQuickProduct(){new Promise((t,u)=>{y.show(St,{resolve:t,reject:u})}).then(t=>{}).catch(t=>{})},summarizeCoupons(){const e=this.order.coupons.map(t=>t.value);return e.length>0?e.reduce((t,u)=>t+u):0},async changeProductPrice(e){if(!this.settings.edit_purchase_price)return v.error(l("You don't have the right to edit the purchase price.")).subscribe();if(e.product_type==="dynamic")return v.error(l("Dynamic product can't have their price updated.")).subscribe();if(this.settings.unit_price_editable)try{const t=await new Promise((a,c)=>y.show(ft,{product:Object.assign({},e),resolve:a,reject:c})),u={...e.$quantities(),custom_price_edit:t};return e.$quantities=()=>u,e.mode="custom",e=POS.computeProductTax(e),POS.recomputeProducts(POS.products.getValue()),POS.refreshCart(),v.success(l("The product price has been updated.")).subscribe()}catch(t){if(t!==!1)throw v.error(t).subscribe(),t}else return v.error(l("The editable price feature is disabled.")).subscribe()},async selectCoupon(){try{const e=await new Promise((t,u)=>{y.show(Y,{resolve:t,reject:u})})}catch{}},async defineOrderSettings(){if(!this.settings.edit_settings)return v.error(l("You're not allowed to edit the order settings.")).subscribe();try{const e=await new Promise((t,u)=>{y.show(at,{resolve:t,reject:u,order:this.order})});POS.order.next({...this.order,...e})}catch{}},async openNotePopup(){try{const e=await new Promise((u,a)=>{const c=this.order.note,s=this.order.note_visibility;y.show(Ue,{resolve:u,reject:a,note:c,note_visibility:s})}),t={...this.order,...e};POS.order.next(t)}catch(e){e!==!1&&v.error(e.message).subscribe()}},async selectTaxGroup(e="settings"){try{const t=await new Promise((a,c)=>{const s=this.order.taxes,n=this.order.tax_group_id,_=this.order.tax_type;y.show(tt,{resolve:a,reject:c,taxes:s,tax_group_id:n,tax_type:_,activeTab:e})}),u={...this.order,...t};POS.order.next(u),POS.refreshCart()}catch{}},openTaxSummary(){this.selectTaxGroup("summary")},selectCustomer(){y.show(G)},openDiscountPopup(e,t){if(!this.settings.products_discount&&t==="product")return v.error(l("You're not allowed to add a discount on the product.")).subscribe();if(!this.settings.cart_discount&&t==="cart")return v.error(l("You're not allowed to add a discount on the cart.")).subscribe();y.show(H,{reference:e,type:t,onSubmit(u){t==="product"?POS.updateProduct(e,u):t==="cart"&&POS.updateCart(e,u)}},{popupClass:"bg-white h:2/3 shadow-lg xl:w-1/4 lg:w-2/5 md:w-2/3 w-full"})},toggleMode(e,t){if(!this.options.ns_pos_allow_wholesale_price)return v.error(l("Unable to change the price mode. This feature has been disabled.")).subscribe();e.mode==="normal"?y.show(V,{title:l("Enable WholeSale Price"),message:l("Would you like to switch to wholesale price ?"),onAction(u){u&&POS.updateProduct(e,{mode:"wholesale"},t)}}):y.show(V,{title:l("Enable Normal Price"),message:l("Would you like to switch to normal price ?"),onAction(u){u&&POS.updateProduct(e,{mode:"normal"},t)}})},removeUsingIndex(e){y.show(V,{title:l("Confirm Your Action"),message:l("Would you like to delete this product ?"),onAction(t){t&&POS.removeProductUsingIndex(e)}})},allowQuantityModification(e){return e.product_type==="product"},changeQuantity(e,t){this.allowQuantityModification(e)&&new W(e).run({unit_quantity_id:e.unit_quantity_id,unit_name:e.unit_name,$quantities:e.$quantities}).then(a=>{POS.updateProduct(e,a,t)})},openOrderType(){y.show($)},openShippingPopup(){y.show(Z)}}},Ot={id:"pos-cart",class:"flex-auto flex flex-col"},jt={key:0,id:"tools",class:"flex pl-2 ns-tab"},qt={key:0,class:"flex items-center justify-center text-sm rounded-full h-6 w-6 bg-green-500 text-white ml-1"},Nt={class:"rounded shadow ns-tab-item flex-auto flex overflow-hidden"},Dt={class:"cart-table flex flex-auto flex-col overflow-hidden"},Bt={id:"cart-toolbox",class:"w-full p-2 border-b"},Vt={class:"border rounded overflow-hidden"},Ft={class:"flex flex-wrap"},Ht={class:"ns-button"},Qt=o("i",{class:"las la-comment"},null,-1),Rt={class:"ml-1 hidden md:inline-block"},At=o("hr",{class:"h-10",style:{width:"1px"}},null,-1),Et={class:"ns-button"},It=o("i",{class:"las la-balance-scale-left"},null,-1),Ut={class:"ml-1 hidden md:inline-block"},Mt={key:0,class:"ml-1 rounded-full flex items-center justify-center h-6 w-6 bg-info-secondary text-white"},Yt=o("hr",{class:"h-10",style:{width:"1px"}},null,-1),Gt={class:"ns-button"},$t=o("i",{class:"las la-tags"},null,-1),Wt={class:"ml-1 hidden md:inline-block"},zt={key:0,class:"ml-1 rounded-full flex items-center justify-center h-6 w-6 bg-info-secondary text-white"},Lt=o("hr",{class:"h-10",style:{width:"1px"}},null,-1),Kt={class:"ns-button"},Jt=o("i",{class:"las la-tools"},null,-1),Xt={class:"ml-1 hidden md:inline-block"},Zt=o("hr",{class:"h-10",style:{width:"1px"}},null,-1),es={key:0,class:"ns-button"},ts=o("i",{class:"las la-plus"},null,-1),ss={class:"ml-1 hidden md:inline-block"},os=o("hr",{class:"h-10",style:{width:"1px"}},null,-1),rs={id:"cart-table-header",class:"w-full text-primary font-semibold flex"},ns={class:"w-full lg:w-4/6 p-2 border border-l-0 border-t-0"},is={class:"hidden lg:flex lg:w-1/6 p-2 border-b border-t-0"},ds={class:"hidden lg:flex lg:w-1/6 p-2 border border-r-0 border-t-0"},ls={id:"cart-products-table",class:"flex flex-auto flex-col overflow-auto"},as={key:0,class:"text-primary flex"},us={class:"w-full text-center py-4 border-b"},cs=["product-index"],ps={class:"w-full lg:w-4/6 p-2 border border-l-0 border-t-0"},_s={class:"flex justify-between product-details mb-1"},hs={class:"font-semibold"},bs={class:"-mx-1 flex product-options"},ms={class:"px-1"},fs=["onClick"],ys=o("i",{class:"las la-trash text-xl"},null,-1),vs=[ys],xs={key:0,class:"px-1"},ws=["onClick"],gs=o("i",{class:"las la-award text-xl"},null,-1),Ps=[gs],ks={class:"flex justify-between product-controls"},Cs={class:"-mx-1 flex flex-wrap"},Ss={class:"px-1 w-1/2 md:w-auto mb-1"},Ts=["onClick"],Os={class:"px-1 w-1/2 md:w-auto mb-1"},js=["onClick"],qs={key:0},Ns={class:"px-1 w-1/2 md:w-auto mb-1 lg:hidden"},Ds=["onClick"],Bs={class:"px-1 w-1/2 md:w-auto mb-1 lg:hidden"},Vs={class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},Fs=["onClick"],Hs={key:0,class:"border-b border-dashed border-info-primary p-2"},Qs={class:"hidden lg:flex w-1/6 p-2 border border-r-0 border-t-0 items-center justify-center"},Rs={id:"cart-products-summary",class:"flex"},As={key:0,class:"table ns-table w-full text-sm"},Es={width:"200",class:"border p-2"},Is={width:"200",class:"border p-2"},Us={width:"200",class:"border p-2 text-right"},Ms={key:0},Ys=o("td",{width:"200",class:"border p-2"},null,-1),Gs={width:"200",class:"border p-2"},$s={width:"200",class:"border p-2 text-right"},Ws={width:"200",class:"border p-2"},zs={width:"200",class:"border p-2"},Ls={key:0},Ks={key:1},Js={width:"200",class:"border p-2 text-right"},Xs={key:1},Zs=o("td",{width:"200",class:"border p-2"},null,-1),eo={width:"200",class:"border p-2"},to={width:"200",class:"border p-2 text-right"},so={class:"success"},oo={width:"200",class:"border p-2"},ro={width:"200",class:"border p-2"},no={width:"200",class:"border p-2 text-right"},io={key:1,class:"table ns-table w-full text-sm"},lo={width:"200",class:"border p-2"},ao={width:"200",class:"border p-2"},uo={class:"flex justify-between"},co={key:0},po=o("td",{width:"200",class:"border p-2"},null,-1),_o={width:"200",class:"border p-2"},ho={width:"200",class:"border p-2 text-right"},bo={width:"200",class:"border p-2"},mo={width:"200",class:"border p-2"},fo={class:"flex justify-between items-center"},yo={key:0},vo={key:1},xo={key:1},wo=o("td",{width:"200",class:"border p-2"},null,-1),go={width:"200",class:"border p-2"},Po=o("span",null,null,-1),ko={class:"success"},Co={width:"200",class:"border p-2"},So={width:"200",class:"border p-2"},To={class:"flex justify-between w-full"},Oo={class:"h-16 flex flex-shrink-0 border-t border-box-edge",id:"cart-bottom-buttons"},jo=o("i",{class:"mx-4 rounded-full bg-slate-300 h-5 w-5"},null,-1),qo=o("div",{class:"text-lg mr-4 hidden md:flex md:flex-auto lg:text-2xl"},[o("div",{class:"h-2 flex-auto bg-slate-200 rounded"})],-1),No=[jo,qo];function Do(e,t,u,a,c,s){return i(),d("div",Ot,[e.visibleSection==="cart"?(i(),d("div",jt,[o("div",{onClick:t[0]||(t[0]=n=>s.switchTo("cart")),class:"flex cursor-pointer rounded-tl-lg rounded-tr-lg px-3 py-2 font-semibold active tab"},[o("span",null,r(s.__("Cart")),1),e.order?(i(),d("span",qt,r(e.order.products.length),1)):p("",!0)]),o("div",{onClick:t[1]||(t[1]=n=>s.switchTo("grid")),class:"cursor-pointer rounded-tl-lg rounded-tr-lg px-3 py-2 border-t border-r border-l inactive tab"},r(s.__("Products")),1)])):p("",!0),o("div",Nt,[o("div",Dt,[o("div",Bt,[o("div",Vt,[o("div",Ft,[o("div",Ht,[o("button",{onClick:t[2]||(t[2]=n=>s.openNotePopup()),class:"w-full h-10 px-3 outline-none"},[Qt,o("span",Rt,r(s.__("Comments")),1)])]),At,o("div",Et,[o("button",{onClick:t[3]||(t[3]=n=>s.selectTaxGroup()),class:"w-full h-10 px-3 outline-none flex items-center"},[It,o("span",Ut,r(s.__("Taxes")),1),e.order.taxes&&e.order.taxes.length>0?(i(),d("span",Mt,r(e.order.taxes.length),1)):p("",!0)])]),Yt,o("div",Gt,[o("button",{onClick:t[4]||(t[4]=n=>s.selectCoupon()),class:"w-full h-10 px-3 outline-none flex items-center"},[$t,o("span",Wt,r(s.__("Coupons")),1),e.order.coupons&&e.order.coupons.length>0?(i(),d("span",zt,r(e.order.coupons.length),1)):p("",!0)])]),Lt,o("div",Kt,[o("button",{onClick:t[5]||(t[5]=n=>s.defineOrderSettings()),class:"w-full h-10 px-3 outline-none flex items-center"},[Jt,o("span",Xt,r(s.__("Settings")),1)])]),Zt,e.options.ns_pos_quick_product==="yes"?(i(),d("div",es,[o("button",{onClick:t[6]||(t[6]=n=>s.openAddQuickProduct()),class:"w-full h-10 px-3 outline-none flex items-center"},[ts,o("span",ss,r(s.__("Product")),1)])])):p("",!0),os])])]),o("div",rs,[o("div",ns,r(s.__("Product")),1),o("div",is,r(s.__("Quantity")),1),o("div",ds,r(s.__("Total")),1)]),o("div",ls,[e.products.length===0?(i(),d("div",as,[o("div",us,[o("h3",null,r(s.__("No products added...")),1)])])):p("",!0),(i(!0),d(x,null,C(e.products,(n,_)=>(i(),d("div",{"product-index":_,key:n.barcode,class:"product-item flex"},[o("div",ps,[o("div",_s,[o("h3",hs,r(n.name)+" — "+r(n.unit_name),1),o("div",bs,[o("div",ms,[o("a",{onClick:m=>s.removeUsingIndex(_),class:"hover:text-error-secondary cursor-pointer outline-none border-dashed py-1 border-b border-error-secondary text-sm"},vs,8,fs)]),e.options.ns_pos_allow_wholesale_price&&s.allowQuantityModification(n)?(i(),d("div",xs,[o("a",{class:q([n.mode==="wholesale"?"text-success-secondary border-success-secondary":"border-info-primary","cursor-pointer outline-none border-dashed py-1 border-b text-sm"]),onClick:m=>s.toggleMode(n,_)},Ps,10,ws)])):p("",!0)])]),o("div",ks,[o("div",Cs,[o("div",Ss,[o("a",{onClick:m=>s.changeProductPrice(n),class:q([n.mode==="wholesale"?"text-success-secondary hover:text-success-secondary border-success-secondary":"border-info-primary","cursor-pointer outline-none border-dashed py-1 border-b text-sm"])},r(s.__("Price"))+" : "+r(s.nsCurrency(n.unit_price)),11,Ts)]),o("div",Os,[s.allowQuantityModification(n)?(i(),d("a",{key:0,onClick:m=>s.openDiscountPopup(n,"product",_),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},[O(r(s.__("Discount"))+" ",1),n.discount_type==="percentage"?(i(),d("span",qs,r(n.discount_percentage)+"%",1)):p("",!0),O(" : "+r(s.nsCurrency(n.discount)),1)],8,js)):p("",!0)]),o("div",Ns,[s.allowQuantityModification(n)?(i(),d("a",{key:0,onClick:m=>s.changeQuantity(n,_),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Quantity"))+": "+r(n.quantity),9,Ds)):p("",!0)]),o("div",Bs,[o("span",Vs,r(s.__("Total :"))+" "+r(s.nsCurrency(n.total_price)),1)])])])]),o("div",{onClick:m=>s.changeQuantity(n,_),class:q([s.allowQuantityModification(n)?"cursor-pointer ns-numpad-key":"","hidden lg:flex w-1/6 p-2 border-b items-center justify-center"])},[s.allowQuantityModification(n)?(i(),d("span",Hs,r(n.quantity),1)):p("",!0)],10,Fs),o("div",Qs,r(s.nsCurrency(n.total_price)),1)],8,cs))),128))]),o("div",Rs,[e.visibleSection==="both"?(i(),d("table",As,[o("tr",null,[o("td",Es,[o("a",{onClick:t[7]||(t[7]=n=>s.selectCustomer()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Customer"))+": "+r(s.customerName),1)]),o("td",Is,r(s.__("Sub Total")),1),o("td",Us,r(s.nsCurrency(e.order.subtotal)),1)]),e.order.coupons.length>0?(i(),d("tr",Ms,[Ys,o("td",Gs,[o("a",{onClick:t[8]||(t[8]=n=>s.selectCoupon()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Coupons")),1)]),o("td",$s,r(s.nsCurrency(s.summarizeCoupons())),1)])):p("",!0),o("tr",null,[o("td",Ws,[o("a",{onClick:t[9]||(t[9]=n=>s.openOrderType()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Type"))+": "+r(s.selectedType),1)]),o("td",zs,[o("span",null,r(s.__("Discount")),1),e.order.discount_type==="percentage"?(i(),d("span",Ls,"("+r(e.order.discount_percentage)+"%)",1)):p("",!0),e.order.discount_type==="flat"?(i(),d("span",Ks,"("+r(s.__("Flat"))+")",1)):p("",!0)]),o("td",Js,[o("a",{onClick:t[10]||(t[10]=n=>s.openDiscountPopup(e.order,"cart")),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.nsCurrency(e.order.discount)),1)])]),e.order.type&&e.order.type.identifier==="delivery"?(i(),d("tr",Xs,[Zs,o("td",eo,[o("a",{onClick:t[11]||(t[11]=n=>s.openShippingPopup()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Shipping")),1)]),o("td",to,r(s.nsCurrency(e.order.shipping)),1)])):p("",!0),o("tr",so,[o("td",oo,[e.order&&e.options.ns_pos_tax_type==="exclusive"?(i(),d(x,{key:0},[e.options.ns_pos_price_with_tax==="yes"?(i(),d("a",{key:0,onClick:t[12]||(t[12]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax Included"))+": "+r(s.nsCurrency(e.order.total_tax_value+e.order.products_tax_value)),1)):e.options.ns_pos_price_with_tax==="no"?(i(),d("a",{key:1,onClick:t[13]||(t[13]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax"))+": "+r(s.nsCurrency(e.order.total_tax_value)),1)):p("",!0)],64)):e.order&&e.options.ns_pos_tax_type==="inclusive"?(i(),d(x,{key:1},[e.options.ns_pos_price_with_tax==="yes"?(i(),d("a",{key:0,onClick:t[14]||(t[14]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax Included"))+": "+r(s.nsCurrency(e.order.total_tax_value+(e.order.products_exclusive_tax_value+e.order.products_inclusive_tax_value))),1)):e.options.ns_pos_price_with_tax==="no"?(i(),d("a",{key:1,onClick:t[15]||(t[15]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax"))+": "+r(s.nsCurrency(e.order.total_tax_value)),1)):p("",!0)],64)):p("",!0)]),o("td",ro,r(s.__("Total")),1),o("td",no,r(s.nsCurrency(e.order.total)),1)])])):p("",!0),e.visibleSection==="cart"?(i(),d("table",io,[o("tr",null,[o("td",lo,[o("a",{onClick:t[16]||(t[16]=n=>s.selectCustomer()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Customer"))+": "+r(s.customerName),1)]),o("td",ao,[o("div",uo,[o("span",null,r(s.__("Sub Total")),1),o("span",null,r(s.nsCurrency(e.order.subtotal)),1)])])]),e.order.coupons.length>0?(i(),d("tr",co,[po,o("td",_o,[o("a",{onClick:t[17]||(t[17]=n=>s.selectCoupon()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Coupons")),1)]),o("td",ho,r(s.nsCurrency(s.summarizeCoupons())),1)])):p("",!0),o("tr",null,[o("td",bo,[o("a",{onClick:t[18]||(t[18]=n=>s.openOrderType()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Type"))+": "+r(s.selectedType),1)]),o("td",mo,[o("div",fo,[o("p",null,[o("span",null,r(s.__("Discount")),1),e.order.discount_type==="percentage"?(i(),d("span",yo,"("+r(e.order.discount_percentage)+"%)",1)):p("",!0),e.order.discount_type==="flat"?(i(),d("span",vo,"("+r(s.__("Flat"))+")",1)):p("",!0)]),o("a",{onClick:t[19]||(t[19]=n=>s.openDiscountPopup(e.order,"cart")),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.nsCurrency(e.order.discount)),1)])])]),e.order.type&&e.order.type.identifier==="delivery"?(i(),d("tr",xo,[wo,o("td",go,[o("a",{onClick:t[20]||(t[20]=n=>s.openShippingPopup()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Shipping")),1),Po])])):p("",!0),o("tr",ko,[o("td",Co,[e.order&&e.options.ns_pos_tax_type==="exclusive"?(i(),d(x,{key:0},[e.options.ns_pos_price_with_tax==="yes"?(i(),d("a",{key:0,onClick:t[21]||(t[21]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax"))+": "+r(s.nsCurrency(e.order.total_tax_value)),1)):e.options.ns_pos_price_with_tax==="no"?(i(),d("a",{key:1,onClick:t[22]||(t[22]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax Inclusive"))+": "+r(s.nsCurrency(e.order.total_tax_value+e.order.products_tax_value)),1)):p("",!0)],64)):e.order&&e.options.ns_pos_tax_type==="inclusive"?(i(),d(x,{key:1},[e.options.ns_pos_price_with_tax==="yes"?(i(),d("a",{key:0,onClick:t[23]||(t[23]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax Included"))+": "+r(s.nsCurrency(e.order.total_tax_value)),1)):e.options.ns_pos_price_with_tax==="no"?(i(),d("a",{key:1,onClick:t[24]||(t[24]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax Included"))+": "+r(s.nsCurrency(e.order.total_tax_value+e.order.products_tax_value)),1)):p("",!0)],64)):p("",!0)]),o("td",So,[o("div",To,[o("span",null,r(s.__("Total")),1),o("span",null,r(s.nsCurrency(e.order.total)),1)])])])])):p("",!0)]),o("div",Oo,[Object.keys(e.cartButtons).length===0?(i(!0),d(x,{key:0},C(new Array(4).fill(),n=>(i(),d("div",{class:q([s.takeRandomClass(),"animate-pulse flex-shrink-0 w-1/4 flex items-center font-bold cursor-pointer justify-center border-r flex-auto"])},No,2))),256)):p("",!0),(i(!0),d(x,null,C(e.cartButtons,n=>(i(),S(L(n),{order:e.order,settings:e.settings},null,8,["order","settings"]))),256))])])])])}const Mo=P(Tt,[["render",Do]]);export{Mo as default}; diff --git a/public/build/assets/ns-pos-cart-y3XxS5Vv.js b/public/build/assets/ns-pos-cart-y3XxS5Vv.js deleted file mode 100644 index adffb3d68..000000000 --- a/public/build/assets/ns-pos-cart-y3XxS5Vv.js +++ /dev/null @@ -1 +0,0 @@ -import{b as v,a as R,n as A}from"./bootstrap-B7E2wy_a.js";import{d as N,v as E,w as M,k as D,p as F,Z as I,j as y}from"./tax-BACo6kIE.js";import{_ as l,n as B}from"./currency-ZXKMLAC0.js";import{s as U}from"./pos-section-switch-DmfccXVX.js";import{a as H,c as Y,n as G,b as $,P as W}from"./ns-pos-order-type-popup-BBww5Dqw.js";import{_ as P}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as d,b as o,t as r,r as b,g as f,C as z,F as x,e as C,h as S,w as k,j as O,f as p,i as T,m as j,n as q,k as L}from"./runtime-core.esm-bundler-DCfIpxDt.js";import{c as K,a as J,j as Z,n as V}from"./ns-prompt-popup-BbWKrSku.js";import X from"./ns-pos-shipping-popup-Cw_bpB2Q.js";import"./index.es-BED_8l8F.js";import"./ns-orders-preview-popup-MUf9kQx1.js";const ee={props:["order"],methods:{__,async payOrder(){const e=nsHooks.applyFilters("ns-pay-queue",[ProductsQueue,CustomerQueue,TypeQueue,PaymentQueue]);for(let t in e)try{const a=await new e[t](this.order).run()}catch{return!1}}},mounted(){for(let e in nsShortcuts)["ns_pos_keyboard_payment"].includes(e)&&nsHotPress.create("ns_pos_keyboard_payment").whenNotVisible([".is-popup"]).whenPressed(nsShortcuts[e]!==null?nsShortcuts[e].join("+"):null,t=>{t.preventDefault(),this.payOrder()})},unmounted(){nsHotPress.destroy("ns_pos_keyboard_payment")}},te=o("i",{class:"mr-2 text-2xl lg:text-xl las la-cash-register"},null,-1),se={class:"text-lg hidden md:inline lg:text-2xl"};function oe(e,t,u,a,c,s){return i(),d("div",{onClick:t[0]||(t[0]=n=>s.payOrder()),id:"pay-button",class:"flex-shrink-0 w-1/4 flex items-center font-bold cursor-pointer justify-center bg-green-500 text-white hover:bg-green-600 border-r border-green-600 flex-auto"},[te,o("span",se,r(s.__("Pay")),1)])}const re=P(ee,[["render",oe]]),ne={name:"ns-pos-hold-orders",props:["popup"],data(){return{order:{},title:"",show:!0}},mounted(){this.popupCloser(),this.show=POS.getHoldPopupEnabled(),this.show||this.popup.params.resolve({title:this.title}),this.$refs.reference.focus(),this.$refs.reference.select(),this.order=this.popup.params.order,this.title=this.popup.params.order.title||""},methods:{__:l,nsCurrency:B,popupCloser:N,submitHold(){this.popup.close(),this.popup.params.resolve({title:this.title})}}},ie={class:"ns-box shadow-lg w-6/7-screen md:w-3/7-screen lg:w-2/6-screen"},de={class:"p-2 flex ns-box-header justify-between border-b items-center"},le={class:"font-semibold"},ae={class:"flex-auto ns-box-body"},ue={class:"border-b h-16 flex items-center justify-center"},ce={class:"text-5xl text-primary"},pe={class:"p-2"},_e={class:"input-group border-2 info"},he=["placeholder"],be={class:"p-2"},me={class:"text-secondary"},fe={class:"flex ns-box-footer"};function ye(e,t,u,a,c,s){const n=b("ns-close-button");return i(),d("div",ie,[o("div",de,[o("h3",le,r(s.__("Hold Order")),1),o("div",null,[f(n,{onClick:t[0]||(t[0]=_=>u.popup.close())})])]),o("div",ae,[o("div",ue,[o("span",ce,r(s.nsCurrency(c.order.total)),1)]),o("div",pe,[o("div",_e,[z(o("input",{onKeyup:t[1]||(t[1]=M(_=>s.submitHold(),["enter"])),"onUpdate:modelValue":t[2]||(t[2]=_=>c.title=_),ref:"reference",type:"text",placeholder:s.__("Order Reference"),class:"outline-none rounded border-2 p-2 w-full"},null,40,he),[[E,c.title]])])]),o("div",be,[o("p",me,r(s.__("The current order will be set on hold. You can retrieve this order from the pending order button. Providing a reference to it might help you to identify the order more quickly.")),1)])]),o("div",fe,[o("div",{onClick:t[3]||(t[3]=_=>s.submitHold()),class:"cursor-pointer w-1/2 py-3 flex justify-center items-center bg-green-500 text-white font-semibold"},r(s.__("Confirm")),1),o("div",{onClick:t[4]||(t[4]=_=>u.popup.close()),class:"cursor-pointer w-1/2 py-3 flex justify-center items-center bg-error-secondary text-white font-semibold"},r(s.__("Cancel")),1)])])}const ve=P(ne,[["render",ye]]),xe={props:["order"],methods:{__,async holdOrder(){if(this.order.payment_status!=="hold"&&this.order.payments.length>0)return nsSnackBar.error(__("Unable to hold an order which payment status has been updated already.")).subscribe();const e=nsHooks.applyFilters("ns-hold-queue",[ProductsQueue,CustomerQueue,TypeQueue]);for(let u in e)try{const c=await new e[u](this.order).run()}catch{return!1}nsHooks.applyFilters("ns-override-hold-popup",()=>{new Promise((a,c)=>{Popup.show(ve,{resolve:a,reject:c,order:this.order})}).then(a=>{this.order.title=a.title,this.order.payment_status="hold",POS.order.next(this.order);const c=Popup.show(K);POS.submitOrder().then(s=>{c.close(),nsSnackBar.success(s.message).subscribe()},s=>{c.close(),nsSnackBar.error(s.message).subscribe()})}).catch(a=>{console.log(a)})})()}},mounted(){for(let e in nsShortcuts)["ns_pos_keyboard_hold_order"].includes(e)&&nsHotPress.create("ns_pos_keyboard_hold_order").whenNotVisible([".is-popup"]).whenPressed(nsShortcuts[e]!==null?nsShortcuts[e].join("+"):null,t=>{t.preventDefault(),this.holdOrder()})},unmounted(){nsHotPress.destroy("ns_pos_keyboard_hold_order")}},we=o("i",{class:"mr-2 text-2xl lg:text-xl las la-pause"},null,-1),ge={class:"text-lg hidden md:inline lg:text-2xl"};function Pe(e,t,u,a,c,s){return i(),d("div",{onClick:t[0]||(t[0]=n=>s.holdOrder()),id:"hold-button",class:"flex-shrink-0 w-1/4 flex items-center font-bold cursor-pointer justify-center bg-blue-500 text-white border-r hover:bg-blue-600 border-blue-600 flex-auto"},[we,o("span",ge,r(s.__("Hold")),1)])}const ke=P(xe,[["render",Pe]]),Ce={props:["order","settings"],methods:{__,openDiscountPopup(e,t,u=null){if(!this.settings.products_discount&&t==="product")return nsSnackBar.error(__("You're not allowed to add a discount on the product.")).subscribe();if(!this.settings.cart_discount&&t==="cart")return nsSnackBar.error(__("You're not allowed to add a discount on the cart.")).subscribe();Popup.show(H,{reference:e,type:t,onSubmit(a){t==="product"?POS.updateProduct(e,a,u):t==="cart"&&POS.updateCart(e,a)}},{popupClass:"bg-white h:2/3 shadow-lg xl:w-1/4 lg:w-2/5 md:w-2/3 w-full"})}}},Se=o("i",{class:"mr-2 text-2xl lg:text-xl las la-percent"},null,-1),Te={class:"text-lg hidden md:inline lg:text-2xl"};function Oe(e,t,u,a,c,s){return i(),d("div",{onClick:t[0]||(t[0]=n=>s.openDiscountPopup(u.order,"cart")),id:"discount-button",class:"flex-shrink-0 w-1/4 flex items-center font-bold cursor-pointer justify-center border-r border-box-edge flex-auto"},[Se,o("span",Te,r(s.__("Discount")),1)])}const je=P(Ce,[["render",Oe]]),qe={props:["order","settings"],methods:{__,voidOngoingOrder(){POS.voidOrder(this.order)}}},Ne=o("i",{class:"mr-2 text-2xl lg:text-xl las la-trash"},null,-1),De={class:"text-lg hidden md:inline lg:text-2xl"};function Be(e,t,u,a,c,s){return i(),d("div",{onClick:t[0]||(t[0]=n=>s.voidOngoingOrder(u.order)),id:"void-button",class:"flex-shrink-0 w-1/4 flex items-center font-bold cursor-pointer justify-center bg-red-500 text-white border-box-edge hover:bg-red-600 flex-auto"},[Ne,o("span",De,r(s.__("Void")),1)])}const Ve=P(qe,[["render",Be]]),Fe={name:"ns-pos-note-popup",props:["popup"],data(){return{validation:new D,fields:[{label:l("Note"),name:"note",value:"",description:l("More details about this order"),type:"textarea"},{label:l("Display On Receipt"),name:"note_visibility",value:"",options:[{label:l("Yes"),value:"visible"},{label:l("No"),value:"hidden"}],description:l("Will display the note on the receipt"),type:"switch"}]}},mounted(){this.popupCloser(),this.fields.forEach(e=>{e.name==="note"?e.value=this.popup.params.note:e.name==="note_visibility"&&(e.value=this.popup.params.note_visibility)})},methods:{__:l,popupResolver:F,popupCloser:N,closePopup(){this.popupResolver(!1)},saveNote(){if(!this.validation.validateFields(this.fields)){const e=this.validation.validateFieldsErrors(this.fields);return this.validation.triggerFieldsErrors(this.fields,e),this.$forceUpdate(),v.error(l("Unable to proceed the form is not valid.")).subscribe()}return this.popupResolver(this.validation.extractFields(this.fields))}}},He={class:"shadow-lg ns-box w-95vw md:w-3/5-screen lg:w-2/5-screen"},Qe={class:"p-2 flex justify-between items-center border-b ns-box-header"},Re={class:"font-bold"},Ae={class:"p-2"},Ee={class:"p-2 flex justify-end border-t ns-box-footer"};function Me(e,t,u,a,c,s){const n=b("ns-close-button"),_=b("ns-field"),m=b("ns-button");return i(),d("div",He,[o("div",Qe,[o("h3",Re,r(s.__("Order Note")),1),o("div",null,[f(n,{onClick:t[0]||(t[0]=h=>s.closePopup())})])]),o("div",Ae,[(i(!0),d(x,null,C(c.fields,(h,w)=>(i(),S(_,{key:w,field:h},null,8,["field"]))),128))]),o("div",Ee,[f(m,{type:"info",onClick:t[1]||(t[1]=h=>s.saveNote())},{default:k(()=>[O(r(s.__("Save")),1)]),_:1})])])}const Ie=P(Fe,[["render",Me]]),Ue={name:"ns-pos-tax-popup",props:["popup"],data(){return{validation:new D,tax_group:[],order:null,orderSubscriber:null,optionsSubscriber:null,options:{},tax_groups:[],activeTab:"",group_fields:[{label:l("Select Tax"),name:"tax_group_id",description:l("Define the tax that apply to the sale."),type:"select",disabled:!0,value:"",validation:"required",options:[]},{label:l("Type"),name:"tax_type",disabled:!0,value:"",description:l("Define how the tax is computed"),type:"select",validation:"required",options:[{label:l("Exclusive"),value:"exclusive"},{label:l("Inclusive"),value:"inclusive"}]}]}},mounted(){this.loadGroups(),this.popupCloser(),this.activeTab=this.popup.params.activeTab||"settings",this.group_fields.forEach(e=>{e.value=this.popup.params[e.name]||void 0}),this.orderSubscriber=POS.order.subscribe(e=>{this.order=e}),this.optionsSubscriber=POS.options.subscribe(e=>{this.options=e,["variable_vat","products_variable_vat"].includes(this.options.ns_pos_vat)&&this.group_fields.forEach(t=>t.disabled=!1)})},unmounted(){this.orderSubscriber.unsubscribe(),this.optionsSubscriber.unsubscribe()},methods:{__:l,nsCurrency:B,popupCloser:N,popupResolver:F,changeActive(e){this.activeTab=e},closePopup(){this.popupResolver(!1)},saveTax(){if(!this.validation.validateFields(this.group_fields))return v.error(l("Unable to proceed the form is not valid.")).subscribe();const e=this.validation.extractFields(this.group_fields);e.tax_groups=[],this.popupResolver(e)},loadGroups(){R.get("/api/taxes/groups").subscribe(e=>{this.groups=e,this.group_fields.forEach(t=>{t.name==="tax_group_id"&&(t.options=this.groups.map(u=>({label:u.name,value:u.id})))})})}}},Ye={class:"ns-box shadow-lg w-95vw md:w-3/5-screen lg:w-2/5-screen"},Ge={class:"p-2 flex justify-between items-center border-b ns-box-header"},$e={class:"text-blog"},We={class:"p-2 ns-box-body"},ze={class:"p-2 border-b ns-box-body"},Le={class:"flex justify-end p-2"},Ke={key:0,class:"p-2"},Je={key:0,class:"p-2 text-center text-primary"},Ze={key:0,class:"p-2"},Xe={class:"border shadow p-2 w-full flex justify-between items-center elevation-surface"};function et(e,t,u,a,c,s){const n=b("ns-close-button"),_=b("ns-field"),m=b("ns-button"),h=b("ns-tabs-item"),w=b("ns-tabs");return i(),d("div",Ye,[o("div",Ge,[o("h3",$e,r(s.__("Tax & Summary")),1),o("div",null,[f(n,{onClick:t[0]||(t[0]=g=>s.closePopup())})])]),o("div",We,[f(w,{active:c.activeTab,onChangeTab:t[2]||(t[2]=g=>s.changeActive(g))},{default:k(()=>[f(h,{padding:"0",label:s.__("Settings"),identifier:"settings",active:!0},{default:k(()=>[o("div",ze,[(i(!0),d(x,null,C(c.group_fields,(g,Q)=>(i(),S(_,{field:g,key:Q},null,8,["field"]))),128))]),o("div",Le,[f(m,{onClick:t[1]||(t[1]=g=>s.saveTax()),type:"info"},{default:k(()=>[O(r(s.__("Save")),1)]),_:1})])]),_:1},8,["label"]),f(h,{padding:"0",label:s.__("Summary"),identifier:"summary",active:!1},{default:k(()=>[c.order?(i(),d("div",Ke,[(i(!0),d(x,null,C(c.order.taxes,g=>(i(),d("div",{key:g.id,class:"mb-2 border shadow p-2 w-full flex justify-between items-center elevation-surface"},[o("span",null,r(g.name),1),o("span",null,r(s.nsCurrency(g.tax_value)),1)]))),128)),c.order.taxes.length===0?(i(),d("div",Je,r(s.__("No tax is active")),1)):p("",!0)])):p("",!0)]),_:1},8,["label"]),f(h,{padding:"0",label:s.__("Product Taxes"),identifier:"product_taxes",active:!1},{default:k(()=>[c.order?(i(),d("div",Ze,[o("div",Xe,[o("span",null,r(s.__("Product Taxes")),1),o("span",null,r(s.nsCurrency(c.order.products_tax_value)),1)])])):p("",!0)]),_:1},8,["label"])]),_:1},8,["active"])])])}const tt=P(Ue,[["render",et]]),st={name:"ns-pos-order-settings",props:["popup"],mounted(){nsHttpClient.get("/api/fields/ns.pos-order-settings").subscribe(e=>{e.forEach(t=>{t.value=this.popup.params.order[t.name]||""}),this.fields=this.validation.createFields(e)},e=>{}),this.popupCloser()},data(){return{fields:[],validation:new D}},methods:{__,popupCloser,popupResolver,closePopup(){this.popupResolver(!1)},saveSettings(){const e=this.validation.extractFields(this.fields);this.popupResolver(e)}}},ot={class:"shadow-lg flex flex-col ns-box w-95vw h-95vh md:w-3/5-screen md:h-3/5-screen lg:w-2/5-screen"},rt={class:"p-2 border-b ns-box-header items-center flex justify-between"},nt={class:"text-semibold"},it={class:"p-2 flex-auto border-b ns-box-body overflow-y-auto"},dt={class:"p-2 flex justify-end ns-box-footer"};function lt(e,t,u,a,c,s){const n=b("ns-close-button"),_=b("ns-field"),m=b("ns-button");return i(),d("div",ot,[o("div",rt,[o("h3",nt,r(s.__("Order Settings")),1),o("div",null,[f(n,{onClick:t[0]||(t[0]=h=>s.closePopup())})])]),o("div",it,[(i(!0),d(x,null,C(c.fields,(h,w)=>(i(),S(_,{field:h,key:w},null,8,["field"]))),128))]),o("div",dt,[f(m,{onClick:t[1]||(t[1]=h=>s.saveSettings()),type:"info"},{default:k(()=>[O(r(s.__("Save")),1)]),_:1})])])}const at=P(st,[["render",lt]]),ut={name:"ns-pos-product-price-product",props:["popup"],components:{nsNumpad:J,nsNumpadPlus:Z},computed:{},data(){return{product:{},optionsSubscription:null,options:{},price:0}},mounted(){this.popupCloser(),this.product=this.popup.params.product,this.optionsSubscription=POS.options.subscribe(e=>{this.options=T(e)})},beforeDestroy(){this.optionsSubscription.unsubscribe()},methods:{popupResolver,popupCloser,nsCurrency:B,__,updateProductPrice(e){this.product.unit_price=e},resolveProductPrice(e){this.popupResolver(this.product.unit_price)}}},ct={class:"ns-box shadow-lg w-95vw md:w-3/5-screen lg:w-2/5-screen"},pt={class:"popup-heading ns-box-header"},_t={class:"flex flex-col ns-box-body"},ht={class:"h-16 flex items-center justify-center elevation-surface info font-bold"},bt={class:"text-2xl"};function mt(e,t,u,a,c,s){const n=b("ns-close-button"),_=b("ns-numpad"),m=b("ns-numpad-plus");return i(),d("div",ct,[o("div",pt,[o("h3",null,r(s.__("Product Price")),1),o("div",null,[f(n,{onClick:t[0]||(t[0]=h=>s.popupResolver(!1))})])]),o("div",_t,[o("div",ht,[o("h2",bt,r(s.nsCurrency(c.product.unit_price)),1)]),c.options.ns_pos_numpad==="default"?(i(),S(_,{key:0,floating:c.options.ns_pos_allow_decimal_quantities,onChanged:t[1]||(t[1]=h=>s.updateProductPrice(h)),onNext:t[2]||(t[2]=h=>s.resolveProductPrice(h)),value:c.product.unit_price},null,8,["floating","value"])):p("",!0),c.options.ns_pos_numpad==="advanced"?(i(),S(m,{key:1,onChanged:t[3]||(t[3]=h=>s.updateProductPrice(h)),onNext:t[4]||(t[4]=h=>s.resolveProductPrice(h)),value:c.product.unit_price},null,8,["value"])):p("",!0)])])}const ft=P(ut,[["render",mt]]),yt={name:"ns-pos-quick-product-popup",props:["popup"],methods:{__:l,popupCloser:N,popupResolver:F,close(){this.popupResolver(!1)},async addProduct(){const e=this.validation.extractFields(this.fields),t=this.fields.filter(s=>typeof s.show>"u"||typeof s.show=="function"&&s.show(e));if(!this.validation.validateFields(t))return v.error(l("Unable to proceed. The form is not valid.")).subscribe();let a=this.validation.extractFields(t);a.$original=()=>({stock_management:"disabled",category_id:0,tax_group:this.tax_groups.filter(s=>parseInt(s.id)===parseInt(a.tax_group_id))[0],tax_group_id:a.tax_group_id,tax_type:a.tax_type}),a.product_type==="product"?(a.unit_name=this.units.filter(s=>s.id===a.unit_id)[0].name,a.quantity=parseFloat(a.quantity),a.unit_price=parseFloat(a.unit_price),a.mode="custom",a.price_with_tax=a.unit_price,a.price_without_tax=a.unit_price,a.tax_value=0):(a.unit_name=l("N/A"),a.unit_price=0,a.quantity=1);const c=await POS.defineQuantities(a,this.units);a.$quantities=()=>c,a=POS.computeProductTax(a),POS.addToCart(a),this.close()},loadData(){this.loaded=!1,I(nsHttpClient.get("/api/units"),nsHttpClient.get("/api/taxes/groups")).subscribe({next:e=>{this.units=e[0],this.tax_groups=e[1],this.fields.filter(t=>{t.name==="tax_group_id"&&(t.options=e[1].map(u=>({label:u.name,value:u.id})),e[1].length>0&&e[1][0].id!==void 0&&(t.value=e[1][0].id||this.options.ns_pos_tax_group)),t.name==="tax_type"&&(t.value=this.options.tax_type||"inclusive"),t.name==="unit_id"&&(t.value=this.options.ns_pos_quick_product_default_unit,t.options=e[0].map(u=>({label:u.name,value:u.id})))}),this.buildForm()},error:e=>{}})},buildForm(){this.fields=this.validation.createFields(this.fields),this.loaded=!0,setTimeout(()=>{this.$el.querySelector("#name").select()},100)}},computed:{form(){return this.validation.extractFields(this.fields)}},data(){return{units:[],options:POS.options.getValue(),tax_groups:[],loaded:!1,validation:new D,fields:[{label:l("Name"),name:"name",type:"text",description:l("Provide a unique name for the product."),validation:"required"},{label:l("Product Type"),name:"product_type",type:"select",description:l("Define the product type."),options:[{label:l("Normal"),value:"product"},{label:l("Dynamic"),value:"dynamic"}],value:"product",validation:"required"},{label:l("Rate"),name:"rate",type:"text",description:l("In case the product is computed based on a percentage, define the rate here."),validation:"required",show(e){return e.product_type==="dynamic"}},{label:l("Unit Price"),name:"unit_price",type:"text",description:l("Define what is the sale price of the item."),validation:"",value:0,show(e){return e.product_type==="product"}},{label:l("Quantity"),name:"quantity",type:"text",value:1,description:l("Set the quantity of the product."),validation:"",show(e){return e.product_type==="product"}},{label:l("Unit"),name:"unit_id",type:"select",options:[],description:l("Assign a unit to the product."),validation:"",show(e){return e.product_type==="product"}},{label:l("Tax Type"),name:"tax_type",type:"select",options:[{label:l("Disabled"),value:""},{label:l("Inclusive"),value:"inclusive"},{label:l("Exclusive"),value:"exclusive"}],description:l("Define what is tax type of the item."),show(e){return e.product_type==="product"}},{label:l("Tax Group"),name:"tax_group_id",type:"select",options:[],description:l("Choose the tax group that should apply to the item."),show(e){return e.product_type==="product"}}]}},mounted(){this.popupCloser(),this.loadData()}},vt={class:"w-95vw flex flex-col h-95vh shadow-lg md:w-3/5-screen lg:w-2/5-screen md:h-3/5-screen ns-box"},xt={class:"header ns-box-header border-b flex justify-between p-2 items-center"},wt={class:"ns-box-body p-2 flex-auto overflow-y-auto"},gt={key:0,class:"h-full w-full flex justify-center items-center"},Pt={class:"ns-box-footer border-t flex justify-between p-2"},kt=o("div",null,null,-1);function Ct(e,t,u,a,c,s){const n=b("ns-close-button"),_=b("ns-spinner"),m=b("ns-field"),h=b("ns-button");return i(),d("div",vt,[o("div",xt,[o("h3",null,r(s.__("Product / Service")),1),o("div",null,[f(n,{onClick:t[0]||(t[0]=w=>s.close())})])]),o("div",wt,[c.loaded?p("",!0):(i(),d("div",gt,[f(_)])),c.loaded?(i(!0),d(x,{key:1},C(c.fields,(w,g)=>(i(),d(x,null,[w.show&&w.show(s.form)||!w.show?(i(),S(m,{key:g,field:w},null,8,["field"])):p("",!0)],64))),256)):p("",!0)]),o("div",Pt,[kt,o("div",null,[f(h,{onClick:t[1]||(t[1]=w=>s.addProduct()),type:"info"},{default:k(()=>[O(r(s.__("Create")),1)]),_:1})])])])}const St=P(yt,[["render",Ct]]),Tt={name:"ns-pos-cart",data:()=>({popup:null,cartButtons:{},products:[],defaultCartButtons:{nsPosPayButton:j(re),nsPosHoldButton:j(ke),nsPosDiscountButton:j(je),nsPosVoidButton:j(Ve)},visibleSection:null,visibleSectionSubscriber:null,cartButtonsSubscriber:null,optionsSubscriber:null,options:{},typeSubscribe:null,orderSubscribe:null,productSubscribe:null,settingsSubscribe:null,settings:{},types:[],order:T({})}),computed:{selectedType(){return this.order.type?this.order.type.label:"N/A"},isVisible(){return this.visibleSection==="cart"},customerName(){return this.order.customer?`${this.order.customer.first_name} ${this.order.customer.last_name}`:"N/A"},couponName(){return l("Apply Coupon")}},mounted(){this.cartButtonsSubscriber=POS.cartButtons.subscribe(e=>{this.cartButtons=e}),this.optionsSubscriber=POS.options.subscribe(e=>{this.options=e}),this.typeSubscribe=POS.types.subscribe(e=>this.types=e),this.orderSubscribe=POS.order.subscribe(e=>{this.order=T(e)}),this.productSubscribe=POS.products.subscribe(e=>{this.products=T(e)}),this.settingsSubscribe=POS.settings.subscribe(e=>{this.settings=T(e)}),this.visibleSectionSubscriber=POS.visibleSection.subscribe(e=>{this.visibleSection=T(e)}),A.addAction("ns-before-cart-reset","ns-pos-cart-buttons",()=>{POS.cartButtons.next(this.defaultCartButtons)});for(let e in nsShortcuts)["ns_pos_keyboard_shipping"].includes(e)&&nsHotPress.create("ns_pos_keyboard_shipping").whenNotVisible([".is-popup"]).whenPressed(nsShortcuts[e]!==null?nsShortcuts[e].join("+"):null,t=>{t.preventDefault(),this.openShippingPopup()}),["ns_pos_keyboard_note"].includes(e)&&nsHotPress.create("ns_pos_keyboard_note").whenNotVisible([".is-popup"]).whenPressed(nsShortcuts[e]!==null?nsShortcuts[e].join("+"):null,t=>{t.preventDefault(),this.openNotePopup()})},unmounted(){this.visibleSectionSubscriber.unsubscribe(),this.typeSubscribe.unsubscribe(),this.orderSubscribe.unsubscribe(),this.productSubscribe.unsubscribe(),this.settingsSubscribe.unsubscribe(),this.optionsSubscriber.unsubscribe(),this.cartButtonsSubscriber.unsubscribe(),nsHotPress.destroy("ns_pos_keyboard_shipping"),nsHotPress.destroy("ns_pos_keyboard_note")},methods:{__:l,nsCurrency:B,switchTo:U,takeRandomClass(){return"border-gray-500 bg-gray-400 text-white hover:bg-gray-500"},openAddQuickProduct(){new Promise((t,u)=>{y.show(St,{resolve:t,reject:u})}).then(t=>{}).catch(t=>{})},summarizeCoupons(){const e=this.order.coupons.map(t=>t.value);return e.length>0?e.reduce((t,u)=>t+u):0},async changeProductPrice(e){if(!this.settings.edit_purchase_price)return v.error(l("You don't have the right to edit the purchase price.")).subscribe();if(e.product_type==="dynamic")return v.error(l("Dynamic product can't have their price updated.")).subscribe();if(this.settings.unit_price_editable)try{const t=await new Promise((a,c)=>y.show(ft,{product:Object.assign({},e),resolve:a,reject:c})),u={...e.$quantities(),custom_price_edit:t};return e.$quantities=()=>u,e.mode="custom",e=POS.computeProductTax(e),POS.recomputeProducts(POS.products.getValue()),POS.refreshCart(),v.success(l("The product price has been updated.")).subscribe()}catch(t){if(t!==!1)throw v.error(t).subscribe(),t}else return v.error(l("The editable price feature is disabled.")).subscribe()},async selectCoupon(){try{const e=await new Promise((t,u)=>{y.show(Y,{resolve:t,reject:u})})}catch{}},async defineOrderSettings(){if(!this.settings.edit_settings)return v.error(l("You're not allowed to edit the order settings.")).subscribe();try{const e=await new Promise((t,u)=>{y.show(at,{resolve:t,reject:u,order:this.order})});POS.order.next({...this.order,...e})}catch{}},async openNotePopup(){try{const e=await new Promise((u,a)=>{const c=this.order.note,s=this.order.note_visibility;y.show(Ie,{resolve:u,reject:a,note:c,note_visibility:s})}),t={...this.order,...e};POS.order.next(t)}catch(e){e!==!1&&v.error(e.message).subscribe()}},async selectTaxGroup(e="settings"){try{const t=await new Promise((a,c)=>{const s=this.order.taxes,n=this.order.tax_group_id,_=this.order.tax_type;y.show(tt,{resolve:a,reject:c,taxes:s,tax_group_id:n,tax_type:_,activeTab:e})}),u={...this.order,...t};POS.order.next(u),POS.refreshCart()}catch{}},openTaxSummary(){this.selectTaxGroup("summary")},selectCustomer(){y.show(G)},openDiscountPopup(e,t){if(!this.settings.products_discount&&t==="product")return v.error(l("You're not allowed to add a discount on the product.")).subscribe();if(!this.settings.cart_discount&&t==="cart")return v.error(l("You're not allowed to add a discount on the cart.")).subscribe();y.show(H,{reference:e,type:t,onSubmit(u){t==="product"?POS.updateProduct(e,u):t==="cart"&&POS.updateCart(e,u)}},{popupClass:"bg-white h:2/3 shadow-lg xl:w-1/4 lg:w-2/5 md:w-2/3 w-full"})},toggleMode(e,t){if(!this.options.ns_pos_allow_wholesale_price)return v.error(l("Unable to change the price mode. This feature has been disabled.")).subscribe();e.mode==="normal"?y.show(V,{title:l("Enable WholeSale Price"),message:l("Would you like to switch to wholesale price ?"),onAction(u){u&&POS.updateProduct(e,{mode:"wholesale"},t)}}):y.show(V,{title:l("Enable Normal Price"),message:l("Would you like to switch to normal price ?"),onAction(u){u&&POS.updateProduct(e,{mode:"normal"},t)}})},remove(e){y.show(V,{title:l("Confirm Your Action"),message:l("Would you like to delete this product ?"),onAction(t){t&&POS.removeProduct(e)}})},allowQuantityModification(e){return e.product_type==="product"},changeQuantity(e,t){this.allowQuantityModification(e)&&new W(e).run({unit_quantity_id:e.unit_quantity_id,unit_name:e.unit_name,$quantities:e.$quantities}).then(a=>{POS.updateProduct(e,a,t)})},openOrderType(){y.show($)},openShippingPopup(){y.show(X)}}},Ot={id:"pos-cart",class:"flex-auto flex flex-col"},jt={key:0,id:"tools",class:"flex pl-2 ns-tab"},qt={key:0,class:"flex items-center justify-center text-sm rounded-full h-6 w-6 bg-green-500 text-white ml-1"},Nt={class:"rounded shadow ns-tab-item flex-auto flex overflow-hidden"},Dt={class:"cart-table flex flex-auto flex-col overflow-hidden"},Bt={id:"cart-toolbox",class:"w-full p-2 border-b"},Vt={class:"border rounded overflow-hidden"},Ft={class:"flex flex-wrap"},Ht={class:"ns-button"},Qt=o("i",{class:"las la-comment"},null,-1),Rt={class:"ml-1 hidden md:inline-block"},At=o("hr",{class:"h-10",style:{width:"1px"}},null,-1),Et={class:"ns-button"},Mt=o("i",{class:"las la-balance-scale-left"},null,-1),It={class:"ml-1 hidden md:inline-block"},Ut={key:0,class:"ml-1 rounded-full flex items-center justify-center h-6 w-6 bg-info-secondary text-white"},Yt=o("hr",{class:"h-10",style:{width:"1px"}},null,-1),Gt={class:"ns-button"},$t=o("i",{class:"las la-tags"},null,-1),Wt={class:"ml-1 hidden md:inline-block"},zt={key:0,class:"ml-1 rounded-full flex items-center justify-center h-6 w-6 bg-info-secondary text-white"},Lt=o("hr",{class:"h-10",style:{width:"1px"}},null,-1),Kt={class:"ns-button"},Jt=o("i",{class:"las la-tools"},null,-1),Zt={class:"ml-1 hidden md:inline-block"},Xt=o("hr",{class:"h-10",style:{width:"1px"}},null,-1),es={key:0,class:"ns-button"},ts=o("i",{class:"las la-plus"},null,-1),ss={class:"ml-1 hidden md:inline-block"},os=o("hr",{class:"h-10",style:{width:"1px"}},null,-1),rs={id:"cart-table-header",class:"w-full text-primary font-semibold flex"},ns={class:"w-full lg:w-4/6 p-2 border border-l-0 border-t-0"},is={class:"hidden lg:flex lg:w-1/6 p-2 border-b border-t-0"},ds={class:"hidden lg:flex lg:w-1/6 p-2 border border-r-0 border-t-0"},ls={id:"cart-products-table",class:"flex flex-auto flex-col overflow-auto"},as={key:0,class:"text-primary flex"},us={class:"w-full text-center py-4 border-b"},cs=["product-index"],ps={class:"w-full lg:w-4/6 p-2 border border-l-0 border-t-0"},_s={class:"flex justify-between product-details mb-1"},hs={class:"font-semibold"},bs={class:"-mx-1 flex product-options"},ms={class:"px-1"},fs=["onClick"],ys=o("i",{class:"las la-trash text-xl"},null,-1),vs=[ys],xs={key:0,class:"px-1"},ws=["onClick"],gs=o("i",{class:"las la-award text-xl"},null,-1),Ps=[gs],ks={class:"flex justify-between product-controls"},Cs={class:"-mx-1 flex flex-wrap"},Ss={class:"px-1 w-1/2 md:w-auto mb-1"},Ts=["onClick"],Os={class:"px-1 w-1/2 md:w-auto mb-1"},js=["onClick"],qs={key:0},Ns={class:"px-1 w-1/2 md:w-auto mb-1 lg:hidden"},Ds=["onClick"],Bs={class:"px-1 w-1/2 md:w-auto mb-1 lg:hidden"},Vs={class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},Fs=["onClick"],Hs={key:0,class:"border-b border-dashed border-info-primary p-2"},Qs={class:"hidden lg:flex w-1/6 p-2 border border-r-0 border-t-0 items-center justify-center"},Rs={id:"cart-products-summary",class:"flex"},As={key:0,class:"table ns-table w-full text-sm"},Es={width:"200",class:"border p-2"},Ms={width:"200",class:"border p-2"},Is={width:"200",class:"border p-2 text-right"},Us={key:0},Ys=o("td",{width:"200",class:"border p-2"},null,-1),Gs={width:"200",class:"border p-2"},$s={width:"200",class:"border p-2 text-right"},Ws={width:"200",class:"border p-2"},zs={width:"200",class:"border p-2"},Ls={key:0},Ks={key:1},Js={width:"200",class:"border p-2 text-right"},Zs={key:1},Xs=o("td",{width:"200",class:"border p-2"},null,-1),eo={width:"200",class:"border p-2"},to={width:"200",class:"border p-2 text-right"},so={class:"success"},oo={width:"200",class:"border p-2"},ro={width:"200",class:"border p-2"},no={width:"200",class:"border p-2 text-right"},io={key:1,class:"table ns-table w-full text-sm"},lo={width:"200",class:"border p-2"},ao={width:"200",class:"border p-2"},uo={class:"flex justify-between"},co={key:0},po=o("td",{width:"200",class:"border p-2"},null,-1),_o={width:"200",class:"border p-2"},ho={width:"200",class:"border p-2 text-right"},bo={width:"200",class:"border p-2"},mo={width:"200",class:"border p-2"},fo={class:"flex justify-between items-center"},yo={key:0},vo={key:1},xo={key:1},wo=o("td",{width:"200",class:"border p-2"},null,-1),go={width:"200",class:"border p-2"},Po=o("span",null,null,-1),ko={class:"success"},Co={width:"200",class:"border p-2"},So={width:"200",class:"border p-2"},To={class:"flex justify-between w-full"},Oo={class:"h-16 flex flex-shrink-0 border-t border-box-edge",id:"cart-bottom-buttons"},jo=o("i",{class:"mx-4 rounded-full bg-slate-300 h-5 w-5"},null,-1),qo=o("div",{class:"text-lg mr-4 hidden md:flex md:flex-auto lg:text-2xl"},[o("div",{class:"h-2 flex-auto bg-slate-200 rounded"})],-1),No=[jo,qo];function Do(e,t,u,a,c,s){return i(),d("div",Ot,[e.visibleSection==="cart"?(i(),d("div",jt,[o("div",{onClick:t[0]||(t[0]=n=>s.switchTo("cart")),class:"flex cursor-pointer rounded-tl-lg rounded-tr-lg px-3 py-2 font-semibold active tab"},[o("span",null,r(s.__("Cart")),1),e.order?(i(),d("span",qt,r(e.order.products.length),1)):p("",!0)]),o("div",{onClick:t[1]||(t[1]=n=>s.switchTo("grid")),class:"cursor-pointer rounded-tl-lg rounded-tr-lg px-3 py-2 border-t border-r border-l inactive tab"},r(s.__("Products")),1)])):p("",!0),o("div",Nt,[o("div",Dt,[o("div",Bt,[o("div",Vt,[o("div",Ft,[o("div",Ht,[o("button",{onClick:t[2]||(t[2]=n=>s.openNotePopup()),class:"w-full h-10 px-3 outline-none"},[Qt,o("span",Rt,r(s.__("Comments")),1)])]),At,o("div",Et,[o("button",{onClick:t[3]||(t[3]=n=>s.selectTaxGroup()),class:"w-full h-10 px-3 outline-none flex items-center"},[Mt,o("span",It,r(s.__("Taxes")),1),e.order.taxes&&e.order.taxes.length>0?(i(),d("span",Ut,r(e.order.taxes.length),1)):p("",!0)])]),Yt,o("div",Gt,[o("button",{onClick:t[4]||(t[4]=n=>s.selectCoupon()),class:"w-full h-10 px-3 outline-none flex items-center"},[$t,o("span",Wt,r(s.__("Coupons")),1),e.order.coupons&&e.order.coupons.length>0?(i(),d("span",zt,r(e.order.coupons.length),1)):p("",!0)])]),Lt,o("div",Kt,[o("button",{onClick:t[5]||(t[5]=n=>s.defineOrderSettings()),class:"w-full h-10 px-3 outline-none flex items-center"},[Jt,o("span",Zt,r(s.__("Settings")),1)])]),Xt,e.options.ns_pos_quick_product==="yes"?(i(),d("div",es,[o("button",{onClick:t[6]||(t[6]=n=>s.openAddQuickProduct()),class:"w-full h-10 px-3 outline-none flex items-center"},[ts,o("span",ss,r(s.__("Product")),1)])])):p("",!0),os])])]),o("div",rs,[o("div",ns,r(s.__("Product")),1),o("div",is,r(s.__("Quantity")),1),o("div",ds,r(s.__("Total")),1)]),o("div",ls,[e.products.length===0?(i(),d("div",as,[o("div",us,[o("h3",null,r(s.__("No products added...")),1)])])):p("",!0),(i(!0),d(x,null,C(e.products,(n,_)=>(i(),d("div",{"product-index":_,key:n.barcode,class:"product-item flex"},[o("div",ps,[o("div",_s,[o("h3",hs,r(n.name)+" — "+r(n.unit_name),1),o("div",bs,[o("div",ms,[o("a",{onClick:m=>s.remove(n),class:"hover:text-error-secondary cursor-pointer outline-none border-dashed py-1 border-b border-error-secondary text-sm"},vs,8,fs)]),e.options.ns_pos_allow_wholesale_price&&s.allowQuantityModification(n)?(i(),d("div",xs,[o("a",{class:q([n.mode==="wholesale"?"text-success-secondary border-success-secondary":"border-info-primary","cursor-pointer outline-none border-dashed py-1 border-b text-sm"]),onClick:m=>s.toggleMode(n,_)},Ps,10,ws)])):p("",!0)])]),o("div",ks,[o("div",Cs,[o("div",Ss,[o("a",{onClick:m=>s.changeProductPrice(n),class:q([n.mode==="wholesale"?"text-success-secondary hover:text-success-secondary border-success-secondary":"border-info-primary","cursor-pointer outline-none border-dashed py-1 border-b text-sm"])},r(s.__("Price"))+" : "+r(s.nsCurrency(n.unit_price)),11,Ts)]),o("div",Os,[s.allowQuantityModification(n)?(i(),d("a",{key:0,onClick:m=>s.openDiscountPopup(n,"product",_),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},[O(r(s.__("Discount"))+" ",1),n.discount_type==="percentage"?(i(),d("span",qs,r(n.discount_percentage)+"%",1)):p("",!0),O(" : "+r(s.nsCurrency(n.discount)),1)],8,js)):p("",!0)]),o("div",Ns,[s.allowQuantityModification(n)?(i(),d("a",{key:0,onClick:m=>s.changeQuantity(n,_),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Quantity"))+": "+r(n.quantity),9,Ds)):p("",!0)]),o("div",Bs,[o("span",Vs,r(s.__("Total :"))+" "+r(s.nsCurrency(n.total_price)),1)])])])]),o("div",{onClick:m=>s.changeQuantity(n,_),class:q([s.allowQuantityModification(n)?"cursor-pointer ns-numpad-key":"","hidden lg:flex w-1/6 p-2 border-b items-center justify-center"])},[s.allowQuantityModification(n)?(i(),d("span",Hs,r(n.quantity),1)):p("",!0)],10,Fs),o("div",Qs,r(s.nsCurrency(n.total_price)),1)],8,cs))),128))]),o("div",Rs,[e.visibleSection==="both"?(i(),d("table",As,[o("tr",null,[o("td",Es,[o("a",{onClick:t[7]||(t[7]=n=>s.selectCustomer()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Customer"))+": "+r(s.customerName),1)]),o("td",Ms,r(s.__("Sub Total")),1),o("td",Is,r(s.nsCurrency(e.order.subtotal)),1)]),e.order.coupons.length>0?(i(),d("tr",Us,[Ys,o("td",Gs,[o("a",{onClick:t[8]||(t[8]=n=>s.selectCoupon()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Coupons")),1)]),o("td",$s,r(s.nsCurrency(s.summarizeCoupons())),1)])):p("",!0),o("tr",null,[o("td",Ws,[o("a",{onClick:t[9]||(t[9]=n=>s.openOrderType()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Type"))+": "+r(s.selectedType),1)]),o("td",zs,[o("span",null,r(s.__("Discount")),1),e.order.discount_type==="percentage"?(i(),d("span",Ls,"("+r(e.order.discount_percentage)+"%)",1)):p("",!0),e.order.discount_type==="flat"?(i(),d("span",Ks,"("+r(s.__("Flat"))+")",1)):p("",!0)]),o("td",Js,[o("a",{onClick:t[10]||(t[10]=n=>s.openDiscountPopup(e.order,"cart")),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.nsCurrency(e.order.discount)),1)])]),e.order.type&&e.order.type.identifier==="delivery"?(i(),d("tr",Zs,[Xs,o("td",eo,[o("a",{onClick:t[11]||(t[11]=n=>s.openShippingPopup()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Shipping")),1)]),o("td",to,r(s.nsCurrency(e.order.shipping)),1)])):p("",!0),o("tr",so,[o("td",oo,[e.order&&e.options.ns_pos_tax_type==="exclusive"?(i(),d(x,{key:0},[e.options.ns_pos_price_with_tax==="yes"?(i(),d("a",{key:0,onClick:t[12]||(t[12]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax Included"))+": "+r(s.nsCurrency(e.order.total_tax_value+e.order.products_tax_value)),1)):e.options.ns_pos_price_with_tax==="no"?(i(),d("a",{key:1,onClick:t[13]||(t[13]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax"))+": "+r(s.nsCurrency(e.order.total_tax_value)),1)):p("",!0)],64)):e.order&&e.options.ns_pos_tax_type==="inclusive"?(i(),d(x,{key:1},[e.options.ns_pos_price_with_tax==="yes"?(i(),d("a",{key:0,onClick:t[14]||(t[14]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax Included"))+": "+r(s.nsCurrency(e.order.total_tax_value+(e.order.products_exclusive_tax_value+e.order.products_inclusive_tax_value))),1)):e.options.ns_pos_price_with_tax==="no"?(i(),d("a",{key:1,onClick:t[15]||(t[15]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax"))+": "+r(s.nsCurrency(e.order.total_tax_value)),1)):p("",!0)],64)):p("",!0)]),o("td",ro,r(s.__("Total")),1),o("td",no,r(s.nsCurrency(e.order.total)),1)])])):p("",!0),e.visibleSection==="cart"?(i(),d("table",io,[o("tr",null,[o("td",lo,[o("a",{onClick:t[16]||(t[16]=n=>s.selectCustomer()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Customer"))+": "+r(s.customerName),1)]),o("td",ao,[o("div",uo,[o("span",null,r(s.__("Sub Total")),1),o("span",null,r(s.nsCurrency(e.order.subtotal)),1)])])]),e.order.coupons.length>0?(i(),d("tr",co,[po,o("td",_o,[o("a",{onClick:t[17]||(t[17]=n=>s.selectCoupon()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Coupons")),1)]),o("td",ho,r(s.nsCurrency(s.summarizeCoupons())),1)])):p("",!0),o("tr",null,[o("td",bo,[o("a",{onClick:t[18]||(t[18]=n=>s.openOrderType()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Type"))+": "+r(s.selectedType),1)]),o("td",mo,[o("div",fo,[o("p",null,[o("span",null,r(s.__("Discount")),1),e.order.discount_type==="percentage"?(i(),d("span",yo,"("+r(e.order.discount_percentage)+"%)",1)):p("",!0),e.order.discount_type==="flat"?(i(),d("span",vo,"("+r(s.__("Flat"))+")",1)):p("",!0)]),o("a",{onClick:t[19]||(t[19]=n=>s.openDiscountPopup(e.order,"cart")),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.nsCurrency(e.order.discount)),1)])])]),e.order.type&&e.order.type.identifier==="delivery"?(i(),d("tr",xo,[wo,o("td",go,[o("a",{onClick:t[20]||(t[20]=n=>s.openShippingPopup()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Shipping")),1),Po])])):p("",!0),o("tr",ko,[o("td",Co,[e.order&&e.options.ns_pos_tax_type==="exclusive"?(i(),d(x,{key:0},[e.options.ns_pos_price_with_tax==="yes"?(i(),d("a",{key:0,onClick:t[21]||(t[21]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax"))+": "+r(s.nsCurrency(e.order.total_tax_value)),1)):e.options.ns_pos_price_with_tax==="no"?(i(),d("a",{key:1,onClick:t[22]||(t[22]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax Inclusive"))+": "+r(s.nsCurrency(e.order.total_tax_value+e.order.products_tax_value)),1)):p("",!0)],64)):e.order&&e.options.ns_pos_tax_type==="inclusive"?(i(),d(x,{key:1},[e.options.ns_pos_price_with_tax==="yes"?(i(),d("a",{key:0,onClick:t[23]||(t[23]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax Included"))+": "+r(s.nsCurrency(e.order.total_tax_value)),1)):e.options.ns_pos_price_with_tax==="no"?(i(),d("a",{key:1,onClick:t[24]||(t[24]=n=>s.openTaxSummary()),class:"cursor-pointer outline-none border-dashed py-1 border-b border-info-primary text-sm"},r(s.__("Tax Included"))+": "+r(s.nsCurrency(e.order.total_tax_value+e.order.products_tax_value)),1)):p("",!0)],64)):p("",!0)]),o("td",So,[o("div",To,[o("span",null,r(s.__("Total")),1),o("span",null,r(s.nsCurrency(e.order.total)),1)])])])])):p("",!0)]),o("div",Oo,[Object.keys(e.cartButtons).length===0?(i(!0),d(x,{key:0},C(new Array(4).fill(),n=>(i(),d("div",{class:q([s.takeRandomClass(),"animate-pulse flex-shrink-0 w-1/4 flex items-center font-bold cursor-pointer justify-center border-r flex-auto"])},No,2))),256)):p("",!0),(i(!0),d(x,null,C(e.cartButtons,n=>(i(),S(L(n),{order:e.order,settings:e.settings},null,8,["order","settings"]))),256))])])])])}const Yo=P(Tt,[["render",Do]]);export{Yo as default}; diff --git a/public/build/assets/ns-pos-customers-button-B-yvX00p.js b/public/build/assets/ns-pos-customers-button-B-yvX00p.js deleted file mode 100644 index b7c59dbbf..000000000 --- a/public/build/assets/ns-pos-customers-button-B-yvX00p.js +++ /dev/null @@ -1,7 +0,0 @@ -import{_ as r}from"./preload-helper-BQ24v_F8.js";import{j as n}from"./tax-BACo6kIE.js";import{_ as a}from"./currency-ZXKMLAC0.js";import{_ as u}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as p,o as _,c,b as t,t as l}from"./runtime-core.esm-bundler-DCfIpxDt.js";const m={name:"ns-pos-customers-button",methods:{__:a,openCustomerPopup(){n.show(p({loader:()=>r(()=>import("./ns-pos-order-type-popup-BBww5Dqw.js").then(e=>e.d),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]),import.meta.url)}))}},beforeDestroy(){nsHotPress.destroy("ns_pos_keyboard_create_customer")},mounted(){for(let e in nsShortcuts)["ns_pos_keyboard_create_customer"].includes(e)&&nsHotPress.create("ns_pos_keyboard_create_customer").whenNotVisible([".is-popup"]).whenPressed(nsShortcuts[e]!==null?nsShortcuts[e].join("+"):null,s=>{s.preventDefault(),this.openCustomerPopup()})}},i={class:"ns-button default"},d=t("i",{class:"mr-1 text-xl lar la-user-circle"},null,-1);function f(e,s,h,P,b,o){return _(),c("div",i,[t("button",{onClick:s[0]||(s[0]=x=>o.openCustomerPopup()),class:"rounded shadow flex-shrink-0 h-12 flex items-center px-2 py-1 text-sm"},[d,t("span",null,l(o.__("Customers")),1)])])}const B=u(m,[["render",f]]);export{B as default}; -function __vite__mapDeps(indexes) { - if (!__vite__mapDeps.viteFileDeps) { - __vite__mapDeps.viteFileDeps = ["./ns-pos-order-type-popup-BBww5Dqw.js","./tax-BACo6kIE.js","./currency-ZXKMLAC0.js","./runtime-core.esm-bundler-DCfIpxDt.js","./bootstrap-B7E2wy_a.js","./ns-prompt-popup-BbWKrSku.js","./_plugin-vue_export-helper-DlAUqK2U.js","./ns-prompt-popup-BgqpcPKN.css","./ns-orders-preview-popup-MUf9kQx1.js","./index.es-BED_8l8F.js"] - } - return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) -} diff --git a/public/build/assets/ns-pos-customers-button-BVhhI0xf.js b/public/build/assets/ns-pos-customers-button-BVhhI0xf.js new file mode 100644 index 000000000..60cd1f1b3 --- /dev/null +++ b/public/build/assets/ns-pos-customers-button-BVhhI0xf.js @@ -0,0 +1,7 @@ +import{_ as r}from"./preload-helper-BQ24v_F8.js";import{P as n}from"./bootstrap-Bpe5LRJd.js";import{_ as a}from"./currency-lOMYG1Wf.js";import{_ as u}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{d as p,o as _,c,a as t,t as l}from"./runtime-core.esm-bundler-RT2b-_3S.js";const m={name:"ns-pos-customers-button",methods:{__:a,openCustomerPopup(){n.show(p({loader:()=>r(()=>import("./ns-pos-order-type-popup-dHaiHxmR.js").then(e=>e.d),__vite__mapDeps([0,1,2,3,4,5,6,7,8]),import.meta.url)}))}},beforeDestroy(){nsHotPress.destroy("ns_pos_keyboard_create_customer")},mounted(){for(let e in nsShortcuts)["ns_pos_keyboard_create_customer"].includes(e)&&nsHotPress.create("ns_pos_keyboard_create_customer").whenNotVisible([".is-popup"]).whenPressed(nsShortcuts[e]!==null?nsShortcuts[e].join("+"):null,s=>{s.preventDefault(),this.openCustomerPopup()})}},i={class:"ns-button default"},d=t("i",{class:"mr-1 text-xl lar la-user-circle"},null,-1);function f(e,s,h,P,x,o){return _(),c("div",i,[t("button",{onClick:s[0]||(s[0]=b=>o.openCustomerPopup()),class:"rounded shadow flex-shrink-0 h-12 flex items-center px-2 py-1 text-sm"},[d,t("span",null,l(o.__("Customers")),1)])])}const B=u(m,[["render",f]]);export{B as default}; +function __vite__mapDeps(indexes) { + if (!__vite__mapDeps.viteFileDeps) { + __vite__mapDeps.viteFileDeps = ["./ns-pos-order-type-popup-dHaiHxmR.js","./bootstrap-Bpe5LRJd.js","./currency-lOMYG1Wf.js","./runtime-core.esm-bundler-RT2b-_3S.js","./ns-prompt-popup-C2dK5WQb.js","./_plugin-vue_export-helper-DlAUqK2U.js","./ns-prompt-popup-CVxzoclS.css","./ns-orders-preview-popup-CjtIUcZ8.js","./index.es-Br67aBEV.js"] + } + return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) +} diff --git a/public/build/assets/ns-pos-dashboard-button-Bw-MsaBT.js b/public/build/assets/ns-pos-dashboard-button-Bw-MsaBT.js new file mode 100644 index 000000000..7c2e9c63a --- /dev/null +++ b/public/build/assets/ns-pos-dashboard-button-Bw-MsaBT.js @@ -0,0 +1 @@ +import{_ as a}from"./currency-lOMYG1Wf.js";import{_ as e}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as n,a as s,t as l}from"./runtime-core.esm-bundler-RT2b-_3S.js";const c={name:"ns-pos-dashboard-button",methods:{__:a,goToDashboard(){return document.location=POS.settings.getValue().urls.dashboard_url}}},d={class:"ns-button success"},u=s("i",{class:"mr-1 text-xl las la-tachometer-alt"},null,-1);function _(i,t,m,p,h,o){return r(),n("div",d,[s("button",{onClick:t[0]||(t[0]=f=>o.goToDashboard()),class:"rounded shadow flex-shrink-0 h-12 flex items-center px-2 py-1 text-sm"},[u,s("span",null,l(o.__("Dashboard")),1)])])}const D=e(c,[["render",_]]);export{D as default}; diff --git a/public/build/assets/ns-pos-dashboard-button-DPgXhvaJ.js b/public/build/assets/ns-pos-dashboard-button-DPgXhvaJ.js deleted file mode 100644 index 58c27996a..000000000 --- a/public/build/assets/ns-pos-dashboard-button-DPgXhvaJ.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e}from"./currency-ZXKMLAC0.js";import{_ as a}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as n,b as s,t as l}from"./runtime-core.esm-bundler-DCfIpxDt.js";const c={name:"ns-pos-dashboard-button",methods:{__:e,goToDashboard(){return document.location=POS.settings.getValue().urls.dashboard_url}}},d={class:"ns-button success"},u=s("i",{class:"mr-1 text-xl las la-tachometer-alt"},null,-1);function _(i,t,m,p,h,o){return r(),n("div",d,[s("button",{onClick:t[0]||(t[0]=b=>o.goToDashboard()),class:"rounded shadow flex-shrink-0 h-12 flex items-center px-2 py-1 text-sm"},[u,s("span",null,l(o.__("Dashboard")),1)])])}const D=a(c,[["render",_]]);export{D as default}; diff --git a/public/build/assets/ns-pos-grid-B0ZZElXI.js b/public/build/assets/ns-pos-grid-B0ZZElXI.js new file mode 100644 index 000000000..36b2434b4 --- /dev/null +++ b/public/build/assets/ns-pos-grid-B0ZZElXI.js @@ -0,0 +1 @@ +import{g as P,p as T,a as v,b,v as k,w as I}from"./bootstrap-Bpe5LRJd.js";import{s as j}from"./pos-section-switch-DmfccXVX.js";import{_ as p,n as V}from"./currency-lOMYG1Wf.js";import{n as O}from"./ns-prompt-popup-C2dK5WQb.js";import{_ as C}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as x,o as l,c as n,a as s,t as a,f as y,B as S,F as _,b as g,e as d,n as w,i as m,w as L}from"./runtime-core.esm-bundler-RT2b-_3S.js";const H={name:"ns-pos-search-product",props:["popup"],data(){return{searchValue:"",products:[],isLoading:!1,debounce:null}},watch:{searchValue(){clearTimeout(this.debounce),this.debounce=setTimeout(()=>{this.search()},500)}},mounted(){this.$refs.searchField.focus(),this.$refs.searchField.addEventListener("keydown",t=>{t.keyCode===27&&this.popupResolver(!1)}),this.popupCloser()},methods:{__:p,popupCloser:P,popupResolver:T,addToCart(t){if(this.popup.close(),parseInt(t.accurate_tracking)===1)return Popup.show(O,{title:p("Unable to add the product"),message:p(`The product "{product}" can't be added from a search field, as "Accurate Tracking" is enabled. Would you like to learn more ?`).replace("{product}",t.name),onAction:e=>{e&&window.open("https://my.nexopos.com/en/documentation/troubleshooting/accurate-tracking","_blank")}});POS.addToCart(t)},search(){this.isLoading=!0,v.post("/api/products/search",{search:this.searchValue}).subscribe({next:t=>{if(this.isLoading=!1,this.products=t,this.products.length===1&&this.addToCart(this.products[0]),this.products.length===0)return b.info(p("No result to result match the search value provided.")).subscribe()},error:t=>{this.isLoading=!1,b.error(t.message).subscribe()}})}}},W={id:"product-search",class:"ns-box shadow-lg w-95vw h-95vh md:h-3/5-screen md:w-2/4-screen flex flex-col overflow-hidden"},B={class:"p-2 border-b ns-box-header flex justify-between items-center"},F={class:"text-primary"},N={class:"flex-auto overflow-hidden flex flex-col"},U={class:"p-2 border-b ns-box-body"},q={class:"flex input-group info border-2 rounded overflow-hidden"},A={class:"overflow-y-auto ns-scrollbar flex-auto relative"},z={class:"ns-vertical-menu"},E=["onClick"],D={class:""},M={class:"text-primary"},G={class:"text-soft-secondary text-xs"},K=s("div",null,null,-1),R={key:0},J={class:"text-primary text-center p-2"},Q={key:1,class:"absolute h-full w-full flex items-center justify-center z-10 top-0",style:{background:"rgb(187 203 214 / 29%)"}};function X(t,e,u,h,o,i){const f=x("ns-close-button"),r=x("ns-spinner");return l(),n("div",W,[s("div",B,[s("h3",F,a(i.__("Search Product")),1),s("div",null,[y(f,{onClick:e[0]||(e[0]=c=>u.popup.close())})])]),s("div",N,[s("div",U,[s("div",q,[S(s("input",{onKeyup:e[1]||(e[1]=I(c=>i.search(),["enter"])),"onUpdate:modelValue":e[2]||(e[2]=c=>o.searchValue=c),ref:"searchField",type:"text",class:"p-2 outline-none flex-auto text-primary"},null,544),[[k,o.searchValue]]),s("button",{onClick:e[3]||(e[3]=c=>i.search()),class:"px-2"},a(i.__("Search")),1)])]),s("div",A,[s("ul",z,[(l(!0),n(_,null,g(o.products,c=>(l(),n("li",{key:c.id,onClick:Je=>i.addToCart(c),class:"cursor-pointer p-2 flex justify-between border-b"},[s("div",D,[s("h2",M,a(c.name),1),s("small",G,a(c.category.name),1)]),K],8,E))),128))]),o.products.length===0?(l(),n("ul",R,[s("li",J,a(i.__("There is nothing to display. Have you started the search ?")),1)])):d("",!0),o.isLoading?(l(),n("div",Q,[y(r)])):d("",!0)])])])}const Y=C(H,[["render",X]]),Z={name:"ns-pos-grid",data(){return{items:Array.from({length:1e3},(t,e)=>({data:"#"+e})),products:[],categories:[],breadcrumbs:[],barcode:"",previousCategory:null,order:null,visibleSection:null,breadcrumbsSubsribe:null,orderSubscription:null,visibleSectionSubscriber:null,currentCategory:null,settings:{},settingsSubscriber:null,options:!1,optionsSubscriber:null,interval:null,searchTimeout:null,gridItemsWidth:0,gridItemsHeight:0,isLoading:!1}},computed:{hasCategories(){return this.categories.length>0},hasProducts(){return this.products.length>0},createCategoryUrl(){return POS.settings.getValue().urls.categories_url}},watch:{options:{handler(){this.options.ns_pos_force_autofocus&&(clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout(()=>{this.submitSearch(this.barcode)},200))},deep:!0},barcode(){this.options.ns_pos_force_autofocus&&(clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout(()=>{this.submitSearch(this.barcode)},200))}},mounted(){this.loadCategories(),this.settingsSubscriber=POS.settings.subscribe(t=>{this.settings=t,this.$forceUpdate()}),this.optionsSubscriber=POS.options.subscribe(t=>{this.options=t,this.$forceUpdate()}),this.breadcrumbsSubsribe=POS.breadcrumbs.subscribe(t=>{this.breadcrumbs=t,this.$forceUpdate()}),this.visibleSectionSubscriber=POS.visibleSection.subscribe(t=>{this.visibleSection=t,this.$forceUpdate()}),this.orderSubscription=POS.order.subscribe(t=>this.order=t),this.interval=setInterval(()=>this.checkFocus(),500);for(let t in nsShortcuts)["ns_pos_keyboard_quick_search"].includes(t)&&nsHotPress.create("search-popup").whenNotVisible([".is-popup","#product-search"]).whenPressed(nsShortcuts[t]!==null?nsShortcuts[t].join("+"):null,e=>{e.preventDefault(),this.openSearchPopup()}),["ns_pos_keyboard_toggle_merge"].includes(t)&&nsHotPress.create("toggle-merge").whenNotVisible([".is-popup"]).whenPressed(nsShortcuts[t]!==null?nsShortcuts[t].join("+"):null,e=>{e.preventDefault(),this.posToggleMerge()})},unmounted(){this.orderSubscription.unsubscribe(),this.breadcrumbsSubsribe.unsubscribe(),this.visibleSectionSubscriber.unsubscribe(),this.settingsSubscriber.unsubscribe(),this.optionsSubscriber.unsubscribe(),clearInterval(this.interval),nsHotPress.destroy("search-popup"),nsHotPress.destroy("toggle-merge")},methods:{__:p,nsCurrency:V,switchTo:j,posToggleMerge(){POS.set("ns_pos_items_merge",!this.settings.ns_pos_items_merge)},computeGridWidth(){document.getElementById("grid-items")!==null&&(this.gridItemsWidth=document.getElementById("grid-items").offsetWidth,this.gridItemsHeight=document.getElementById("grid-items").offsetHeight)},cellSizeAndPositionGetter(t,e){const u={xs:{width:this.gridItemsWidth/2,items:2,height:200},sm:{width:this.gridItemsWidth/2,items:2,height:200},md:{width:this.gridItemsWidth/3,items:3,height:150},lg:{width:this.gridItemsWidth/4,items:4,height:150},xl:{width:this.gridItemsWidth/6,items:6,height:150}},h=u[POS.responsive.screenIs].width,o=u[POS.responsive.screenIs].height,i=0;return{width:h-i,height:o,x:e%u[POS.responsive.screenIs].items*h-i,y:parseInt(e/u[POS.responsive.screenIs].items)*o}},openSearchPopup(){Popup.show(Y)},hasNoFeatured(t){return t.galleries&&t.galleries.length>0&&t.galleries.filter(e=>e.featured).length===0},submitSearch(t){t.length>0&&v.get(`/api/products/search/using-barcode/${t}`).subscribe({next:e=>{this.barcode="",POS.addToCart(e.product)},error:e=>{this.barcode="",b.error(e.message).subscribe()}})},checkFocus(){this.options.ns_pos_force_autofocus&&document.querySelectorAll(".is-popup").length===0&&this.$refs.search.focus()},loadCategories(t){this.isLoading=!0,v.get(`/api/categories/pos/${t?t.id:""}`).subscribe({next:e=>{this.categories=e.categories,this.products=e.products,this.previousCategory=e.previousCategory,this.currentCategory=e.currentCategory,this.updateBreadCrumb(this.currentCategory),this.isLoading=!1},error:e=>(this.isLoading=!1,b.error(p("An unexpected error occurred.")).subscribe())})},updateBreadCrumb(t){if(t){const e=this.breadcrumb.filter(u=>u.id===t.id);if(e.length>0){let u=!0;const h=this.breadcrumb.filter(o=>o.id===e[0].id&&u?(u=!1,!0):u);this.breadcrumb=h}else this.breadcrumb.push(t)}else this.breadcrumb=[];POS.breadcrumbs.next(this.breadcrumb)},addToTheCart(t){POS.addToCart(t)}}},$={id:"pos-grid",class:"flex-auto flex flex-col"},ee={key:0,id:"tools",class:"flex pl-2"},se={key:0,class:"products-count flex items-center justify-center text-sm rounded-full h-6 w-6 ml-1"},te={id:"grid-container",class:"rounded shadow overflow-hidden flex-auto flex flex-col"},re={id:"grid-header",class:"p-2 border-b"},ie={class:"border rounded flex overflow-hidden"},oe=["title"],le=s("i",{class:"las la-search"},null,-1),ne=[le],ce=["title"],ae=s("i",{class:"las la-compress-arrows-alt"},null,-1),de=[ae],ue=["title"],he=s("i",{class:"las la-barcode"},null,-1),_e=[he],pe={style:{height:"0px"}},ge={key:0,class:"fade-in-entrance ns-loader"},be=s("div",{class:"bar"},null,-1),fe=[be],me={id:"grid-breadscrumb",class:"p-2"},ve={class:"flex"},xe=s("i",{class:"las la-angle-right"},null,-1),ye=["onClick"],we=s("i",{class:"las la-angle-right"},null,-1),ke={id:"grid-items",class:"overflow-y-auto h-full flex-col flex"},Ce={key:0,class:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5"},Se=["onClick"],Pe={class:"h-full w-full flex items-center justify-center"},Te=["src","alt"],Ie={key:1,class:"las la-image text-6xl"},je={class:"w-full absolute z-10 -bottom-10"},Ve={class:"cell-item-label relative w-full flex items-center justify-center -top-10 h-20 py-2"},Oe={class:"text-sm font-bold py-2 text-center"},Le={key:1,class:"h-full w-full flex flex-col items-center justify-center"},He=s("i",{class:"las la-frown-open text-8xl text-primary"},null,-1),We={class:"w-1/2 md:w-2/3 text-center text-primary"},Be=s("br",null,null,-1),Fe={key:2,class:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5"},Ne=["onClick"],Ue={class:"h-full w-full flex items-center justify-center overflow-hidden"},qe=["src","alt"],Ae=["src","alt"],ze={key:2,class:"las la-image text-6xl"},Ee={class:"w-full absolute z-10 -bottom-10"},De={class:"cell-item-label relative w-full flex flex-col items-center justify-center -top-10 h-20 p-2"},Me={class:"text-sm text-center w-full"},Ge={key:0,class:"text-sm"},Ke={key:0,class:"text-sm"};function Re(t,e,u,h,o,i){const f=x("ns-link");return l(),n("div",$,[o.visibleSection==="grid"?(l(),n("div",ee,[s("div",{onClick:e[0]||(e[0]=r=>i.switchTo("cart")),class:"switch-cart flex cursor-pointer rounded-tl-lg rounded-tr-lg px-3 py-2 border-t border-r border-l"},[s("span",null,a(i.__("Cart")),1),o.order?(l(),n("span",se,a(o.order.products.length),1)):d("",!0)]),s("div",{onClick:e[1]||(e[1]=r=>i.switchTo("grid")),class:"switch-grid cursor-pointer rounded-tl-lg rounded-tr-lg px-3 py-2 font-semibold"},a(i.__("Products")),1)])):d("",!0),s("div",te,[s("div",re,[s("div",ie,[s("button",{title:i.__("Search for products."),onClick:e[2]||(e[2]=r=>i.openSearchPopup()),class:"w-10 h-10 border-r outline-none"},ne,8,oe),s("button",{title:i.__("Toggle merging similar products."),onClick:e[3]||(e[3]=r=>i.posToggleMerge()),class:w([o.settings.ns_pos_items_merge?"pos-button-clicked":"","outline-none w-10 h-10 border-r"])},de,10,ce),s("button",{title:i.__("Toggle auto focus."),onClick:e[4]||(e[4]=r=>o.options.ns_pos_force_autofocus=!o.options.ns_pos_force_autofocus),class:w([o.options.ns_pos_force_autofocus?"pos-button-clicked":"","outline-none w-10 h-10 border-r"])},_e,10,ue),S(s("input",{ref:"search","onUpdate:modelValue":e[5]||(e[5]=r=>o.barcode=r),type:"text",class:"flex-auto outline-none px-2"},null,512),[[k,o.barcode]])])]),s("div",pe,[o.isLoading?(l(),n("div",ge,fe)):d("",!0)]),s("div",me,[s("ul",ve,[s("li",null,[s("a",{onClick:e[6]||(e[6]=r=>i.loadCategories()),href:"javascript:void(0)",class:"px-3"},a(i.__("Home")),1),m(),xe]),s("li",null,[(l(!0),n(_,null,g(o.breadcrumbs,r=>(l(),n("a",{onClick:c=>i.loadCategories(r),key:r.id,href:"javascript:void(0)",class:"px-3"},[m(a(r.name)+" ",1),we],8,ye))),128))])])]),s("div",ke,[i.hasCategories?(l(),n("div",Ce,[(l(!0),n(_,null,g(o.categories,r=>(l(),n("div",{onClick:c=>i.loadCategories(r),key:r.id,class:"cell-item w-full h-36 cursor-pointer border flex flex-col items-center justify-center overflow-hidden relative"},[s("div",Pe,[r.preview_url?(l(),n("img",{key:0,src:r.preview_url,class:"object-cover h-full",alt:r.name},null,8,Te)):d("",!0),r.preview_url?d("",!0):(l(),n("i",Ie))]),s("div",je,[s("div",Ve,[s("h3",Oe,a(r.name),1)])])],8,Se))),128))])):d("",!0),!i.hasCategories&&!i.hasProducts&&!o.isLoading?(l(),n("div",Le,[He,s("p",We,a(i.__("Looks like there is either no products and no categories. How about creating those first to get started ?")),1),Be,y(f,{target:"blank",type:"info",href:i.createCategoryUrl},{default:L(()=>[m(a(i.__("Create Categories")),1)]),_:1},8,["href"])])):d("",!0),i.hasCategories?d("",!0):(l(),n("div",Fe,[(l(!0),n(_,null,g(o.products,r=>(l(),n("div",{onClick:c=>i.addToTheCart(r),key:r.id,class:"cell-item w-full h-36 cursor-pointer border flex flex-col items-center justify-center overflow-hidden relative"},[s("div",Ue,[r.galleries&&r.galleries.filter(c=>c.featured).length>0?(l(),n("img",{key:0,src:r.galleries.filter(c=>c.featured)[0].url,class:"object-cover h-full",alt:r.name},null,8,qe)):i.hasNoFeatured(r)?(l(),n("img",{key:1,src:r.galleries[0].url,class:"object-cover h-full",alt:r.name},null,8,Ae)):(l(),n("i",ze))]),s("div",Ee,[s("div",De,[s("h3",Me,a(r.name),1),o.options.ns_pos_gross_price_used==="yes"?(l(),n(_,{key:0},[r.unit_quantities&&r.unit_quantities.length===1?(l(),n("span",Ge,a(i.nsCurrency(r.unit_quantities[0].sale_price_without_tax)),1)):d("",!0)],64)):d("",!0),o.options.ns_pos_gross_price_used==="no"?(l(),n(_,{key:1},[r.unit_quantities&&r.unit_quantities.length===1?(l(),n("span",Ke,a(i.nsCurrency(r.unit_quantities[0].sale_price_with_tax)),1)):d("",!0)],64)):d("",!0)])])],8,Ne))),128))]))])])])}const ss=C(Z,[["render",Re]]);export{ss as default}; diff --git a/public/build/assets/ns-pos-grid-BsJnBCNy.js b/public/build/assets/ns-pos-grid-BsJnBCNy.js deleted file mode 100644 index e198a07fa..000000000 --- a/public/build/assets/ns-pos-grid-BsJnBCNy.js +++ /dev/null @@ -1 +0,0 @@ -import{a as v,b}from"./bootstrap-B7E2wy_a.js";import{s as P}from"./pos-section-switch-DmfccXVX.js";import{d as T,p as I,v as k,w as j}from"./tax-BACo6kIE.js";import{_ as p,n as V}from"./currency-ZXKMLAC0.js";import{n as O}from"./ns-prompt-popup-BbWKrSku.js";import{_ as C}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as x,o as l,c as n,b as s,t as a,g as y,C as S,F as _,e as g,f as d,n as w,j as m,w as L}from"./runtime-core.esm-bundler-DCfIpxDt.js";const H={name:"ns-pos-search-product",props:["popup"],data(){return{searchValue:"",products:[],isLoading:!1,debounce:null}},watch:{searchValue(){clearTimeout(this.debounce),this.debounce=setTimeout(()=>{this.search()},500)}},mounted(){this.$refs.searchField.focus(),this.$refs.searchField.addEventListener("keydown",t=>{t.keyCode===27&&this.popupResolver(!1)}),this.popupCloser()},methods:{__:p,popupCloser:T,popupResolver:I,addToCart(t){if(this.popup.close(),parseInt(t.accurate_tracking)===1)return Popup.show(O,{title:p("Unable to add the product"),message:p(`The product "{product}" can't be added from a search field, as "Accurate Tracking" is enabled. Would you like to learn more ?`).replace("{product}",t.name),onAction:e=>{e&&window.open("https://my.nexopos.com/en/documentation/troubleshooting/accurate-tracking","_blank")}});POS.addToCart(t)},search(){this.isLoading=!0,v.post("/api/products/search",{search:this.searchValue}).subscribe({next:t=>{if(this.isLoading=!1,this.products=t,this.products.length===1&&this.addToCart(this.products[0]),this.products.length===0)return b.info(p("No result to result match the search value provided.")).subscribe()},error:t=>{this.isLoading=!1,b.error(t.message).subscribe()}})}}},W={id:"product-search",class:"ns-box shadow-lg w-95vw h-95vh md:h-3/5-screen md:w-2/4-screen flex flex-col overflow-hidden"},B={class:"p-2 border-b ns-box-header flex justify-between items-center"},F={class:"text-primary"},N={class:"flex-auto overflow-hidden flex flex-col"},U={class:"p-2 border-b ns-box-body"},q={class:"flex input-group info border-2 rounded overflow-hidden"},A={class:"overflow-y-auto ns-scrollbar flex-auto relative"},z={class:"ns-vertical-menu"},E=["onClick"],D={class:""},M={class:"text-primary"},G={class:"text-soft-secondary text-xs"},K=s("div",null,null,-1),R={key:0},J={class:"text-primary text-center p-2"},Q={key:1,class:"absolute h-full w-full flex items-center justify-center z-10 top-0",style:{background:"rgb(187 203 214 / 29%)"}};function X(t,e,u,h,o,i){const f=x("ns-close-button"),r=x("ns-spinner");return l(),n("div",W,[s("div",B,[s("h3",F,a(i.__("Search Product")),1),s("div",null,[y(f,{onClick:e[0]||(e[0]=c=>u.popup.close())})])]),s("div",N,[s("div",U,[s("div",q,[S(s("input",{onKeyup:e[1]||(e[1]=j(c=>i.search(),["enter"])),"onUpdate:modelValue":e[2]||(e[2]=c=>o.searchValue=c),ref:"searchField",type:"text",class:"p-2 outline-none flex-auto text-primary"},null,544),[[k,o.searchValue]]),s("button",{onClick:e[3]||(e[3]=c=>i.search()),class:"px-2"},a(i.__("Search")),1)])]),s("div",A,[s("ul",z,[(l(!0),n(_,null,g(o.products,c=>(l(),n("li",{key:c.id,onClick:Je=>i.addToCart(c),class:"cursor-pointer p-2 flex justify-between border-b"},[s("div",D,[s("h2",M,a(c.name),1),s("small",G,a(c.category.name),1)]),K],8,E))),128))]),o.products.length===0?(l(),n("ul",R,[s("li",J,a(i.__("There is nothing to display. Have you started the search ?")),1)])):d("",!0),o.isLoading?(l(),n("div",Q,[y(r)])):d("",!0)])])])}const Y=C(H,[["render",X]]),Z={name:"ns-pos-grid",data(){return{items:Array.from({length:1e3},(t,e)=>({data:"#"+e})),products:[],categories:[],breadcrumbs:[],barcode:"",previousCategory:null,order:null,visibleSection:null,breadcrumbsSubsribe:null,orderSubscription:null,visibleSectionSubscriber:null,currentCategory:null,settings:{},settingsSubscriber:null,options:!1,optionsSubscriber:null,interval:null,searchTimeout:null,gridItemsWidth:0,gridItemsHeight:0,isLoading:!1}},computed:{hasCategories(){return this.categories.length>0},hasProducts(){return this.products.length>0},createCategoryUrl(){return POS.settings.getValue().urls.categories_url}},watch:{options:{handler(){this.options.ns_pos_force_autofocus&&(clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout(()=>{this.submitSearch(this.barcode)},200))},deep:!0},barcode(){this.options.ns_pos_force_autofocus&&(clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout(()=>{this.submitSearch(this.barcode)},200))}},mounted(){this.loadCategories(),this.settingsSubscriber=POS.settings.subscribe(t=>{this.settings=t,this.$forceUpdate()}),this.optionsSubscriber=POS.options.subscribe(t=>{this.options=t,this.$forceUpdate()}),this.breadcrumbsSubsribe=POS.breadcrumbs.subscribe(t=>{this.breadcrumbs=t,this.$forceUpdate()}),this.visibleSectionSubscriber=POS.visibleSection.subscribe(t=>{this.visibleSection=t,this.$forceUpdate()}),this.orderSubscription=POS.order.subscribe(t=>this.order=t),this.interval=setInterval(()=>this.checkFocus(),500);for(let t in nsShortcuts)["ns_pos_keyboard_quick_search"].includes(t)&&nsHotPress.create("search-popup").whenNotVisible([".is-popup","#product-search"]).whenPressed(nsShortcuts[t]!==null?nsShortcuts[t].join("+"):null,e=>{e.preventDefault(),this.openSearchPopup()}),["ns_pos_keyboard_toggle_merge"].includes(t)&&nsHotPress.create("toggle-merge").whenNotVisible([".is-popup"]).whenPressed(nsShortcuts[t]!==null?nsShortcuts[t].join("+"):null,e=>{e.preventDefault(),this.posToggleMerge()})},unmounted(){this.orderSubscription.unsubscribe(),this.breadcrumbsSubsribe.unsubscribe(),this.visibleSectionSubscriber.unsubscribe(),this.settingsSubscriber.unsubscribe(),this.optionsSubscriber.unsubscribe(),clearInterval(this.interval),nsHotPress.destroy("search-popup"),nsHotPress.destroy("toggle-merge")},methods:{__:p,nsCurrency:V,switchTo:P,posToggleMerge(){POS.set("ns_pos_items_merge",!this.settings.ns_pos_items_merge)},computeGridWidth(){document.getElementById("grid-items")!==null&&(this.gridItemsWidth=document.getElementById("grid-items").offsetWidth,this.gridItemsHeight=document.getElementById("grid-items").offsetHeight)},cellSizeAndPositionGetter(t,e){const u={xs:{width:this.gridItemsWidth/2,items:2,height:200},sm:{width:this.gridItemsWidth/2,items:2,height:200},md:{width:this.gridItemsWidth/3,items:3,height:150},lg:{width:this.gridItemsWidth/4,items:4,height:150},xl:{width:this.gridItemsWidth/6,items:6,height:150}},h=u[POS.responsive.screenIs].width,o=u[POS.responsive.screenIs].height,i=0;return{width:h-i,height:o,x:e%u[POS.responsive.screenIs].items*h-i,y:parseInt(e/u[POS.responsive.screenIs].items)*o}},openSearchPopup(){Popup.show(Y)},hasNoFeatured(t){return t.galleries&&t.galleries.length>0&&t.galleries.filter(e=>e.featured).length===0},submitSearch(t){t.length>0&&v.get(`/api/products/search/using-barcode/${t}`).subscribe({next:e=>{this.barcode="",POS.addToCart(e.product)},error:e=>{this.barcode="",b.error(e.message).subscribe()}})},checkFocus(){this.options.ns_pos_force_autofocus&&document.querySelectorAll(".is-popup").length===0&&this.$refs.search.focus()},loadCategories(t){this.isLoading=!0,v.get(`/api/categories/pos/${t?t.id:""}`).subscribe({next:e=>{this.categories=e.categories,this.products=e.products,this.previousCategory=e.previousCategory,this.currentCategory=e.currentCategory,this.updateBreadCrumb(this.currentCategory),this.isLoading=!1},error:e=>(this.isLoading=!1,b.error(p("An unexpected error occurred.")).subscribe())})},updateBreadCrumb(t){if(t){const e=this.breadcrumb.filter(u=>u.id===t.id);if(e.length>0){let u=!0;const h=this.breadcrumb.filter(o=>o.id===e[0].id&&u?(u=!1,!0):u);this.breadcrumb=h}else this.breadcrumb.push(t)}else this.breadcrumb=[];POS.breadcrumbs.next(this.breadcrumb)},addToTheCart(t){POS.addToCart(t)}}},$={id:"pos-grid",class:"flex-auto flex flex-col"},ee={key:0,id:"tools",class:"flex pl-2"},se={key:0,class:"products-count flex items-center justify-center text-sm rounded-full h-6 w-6 ml-1"},te={id:"grid-container",class:"rounded shadow overflow-hidden flex-auto flex flex-col"},re={id:"grid-header",class:"p-2 border-b"},ie={class:"border rounded flex overflow-hidden"},oe=["title"],le=s("i",{class:"las la-search"},null,-1),ne=[le],ce=["title"],ae=s("i",{class:"las la-compress-arrows-alt"},null,-1),de=[ae],ue=["title"],he=s("i",{class:"las la-barcode"},null,-1),_e=[he],pe={style:{height:"0px"}},ge={key:0,class:"fade-in-entrance ns-loader"},be=s("div",{class:"bar"},null,-1),fe=[be],me={id:"grid-breadscrumb",class:"p-2"},ve={class:"flex"},xe=s("i",{class:"las la-angle-right"},null,-1),ye=["onClick"],we=s("i",{class:"las la-angle-right"},null,-1),ke={id:"grid-items",class:"overflow-y-auto h-full flex-col flex"},Ce={key:0,class:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5"},Se=["onClick"],Pe={class:"h-full w-full flex items-center justify-center"},Te=["src","alt"],Ie={key:1,class:"las la-image text-6xl"},je={class:"w-full absolute z-10 -bottom-10"},Ve={class:"cell-item-label relative w-full flex items-center justify-center -top-10 h-20 py-2"},Oe={class:"text-sm font-bold py-2 text-center"},Le={key:1,class:"h-full w-full flex flex-col items-center justify-center"},He=s("i",{class:"las la-frown-open text-8xl text-primary"},null,-1),We={class:"w-1/2 md:w-2/3 text-center text-primary"},Be=s("br",null,null,-1),Fe={key:2,class:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5"},Ne=["onClick"],Ue={class:"h-full w-full flex items-center justify-center overflow-hidden"},qe=["src","alt"],Ae=["src","alt"],ze={key:2,class:"las la-image text-6xl"},Ee={class:"w-full absolute z-10 -bottom-10"},De={class:"cell-item-label relative w-full flex flex-col items-center justify-center -top-10 h-20 p-2"},Me={class:"text-sm text-center w-full"},Ge={key:0,class:"text-sm"},Ke={key:0,class:"text-sm"};function Re(t,e,u,h,o,i){const f=x("ns-link");return l(),n("div",$,[o.visibleSection==="grid"?(l(),n("div",ee,[s("div",{onClick:e[0]||(e[0]=r=>i.switchTo("cart")),class:"switch-cart flex cursor-pointer rounded-tl-lg rounded-tr-lg px-3 py-2 border-t border-r border-l"},[s("span",null,a(i.__("Cart")),1),o.order?(l(),n("span",se,a(o.order.products.length),1)):d("",!0)]),s("div",{onClick:e[1]||(e[1]=r=>i.switchTo("grid")),class:"switch-grid cursor-pointer rounded-tl-lg rounded-tr-lg px-3 py-2 font-semibold"},a(i.__("Products")),1)])):d("",!0),s("div",te,[s("div",re,[s("div",ie,[s("button",{title:i.__("Search for products."),onClick:e[2]||(e[2]=r=>i.openSearchPopup()),class:"w-10 h-10 border-r outline-none"},ne,8,oe),s("button",{title:i.__("Toggle merging similar products."),onClick:e[3]||(e[3]=r=>i.posToggleMerge()),class:w([o.settings.ns_pos_items_merge?"pos-button-clicked":"","outline-none w-10 h-10 border-r"])},de,10,ce),s("button",{title:i.__("Toggle auto focus."),onClick:e[4]||(e[4]=r=>o.options.ns_pos_force_autofocus=!o.options.ns_pos_force_autofocus),class:w([o.options.ns_pos_force_autofocus?"pos-button-clicked":"","outline-none w-10 h-10 border-r"])},_e,10,ue),S(s("input",{ref:"search","onUpdate:modelValue":e[5]||(e[5]=r=>o.barcode=r),type:"text",class:"flex-auto outline-none px-2"},null,512),[[k,o.barcode]])])]),s("div",pe,[o.isLoading?(l(),n("div",ge,fe)):d("",!0)]),s("div",me,[s("ul",ve,[s("li",null,[s("a",{onClick:e[6]||(e[6]=r=>i.loadCategories()),href:"javascript:void(0)",class:"px-3"},a(i.__("Home")),1),m(),xe]),s("li",null,[(l(!0),n(_,null,g(o.breadcrumbs,r=>(l(),n("a",{onClick:c=>i.loadCategories(r),key:r.id,href:"javascript:void(0)",class:"px-3"},[m(a(r.name)+" ",1),we],8,ye))),128))])])]),s("div",ke,[i.hasCategories?(l(),n("div",Ce,[(l(!0),n(_,null,g(o.categories,r=>(l(),n("div",{onClick:c=>i.loadCategories(r),key:r.id,class:"cell-item w-full h-36 cursor-pointer border flex flex-col items-center justify-center overflow-hidden relative"},[s("div",Pe,[r.preview_url?(l(),n("img",{key:0,src:r.preview_url,class:"object-cover h-full",alt:r.name},null,8,Te)):d("",!0),r.preview_url?d("",!0):(l(),n("i",Ie))]),s("div",je,[s("div",Ve,[s("h3",Oe,a(r.name),1)])])],8,Se))),128))])):d("",!0),!i.hasCategories&&!i.hasProducts&&!o.isLoading?(l(),n("div",Le,[He,s("p",We,a(i.__("Looks like there is either no products and no categories. How about creating those first to get started ?")),1),Be,y(f,{target:"blank",type:"info",href:i.createCategoryUrl},{default:L(()=>[m(a(i.__("Create Categories")),1)]),_:1},8,["href"])])):d("",!0),i.hasCategories?d("",!0):(l(),n("div",Fe,[(l(!0),n(_,null,g(o.products,r=>(l(),n("div",{onClick:c=>i.addToTheCart(r),key:r.id,class:"cell-item w-full h-36 cursor-pointer border flex flex-col items-center justify-center overflow-hidden relative"},[s("div",Ue,[r.galleries&&r.galleries.filter(c=>c.featured).length>0?(l(),n("img",{key:0,src:r.galleries.filter(c=>c.featured)[0].url,class:"object-cover h-full",alt:r.name},null,8,qe)):i.hasNoFeatured(r)?(l(),n("img",{key:1,src:r.galleries[0].url,class:"object-cover h-full",alt:r.name},null,8,Ae)):(l(),n("i",ze))]),s("div",Ee,[s("div",De,[s("h3",Me,a(r.name),1),o.options.ns_pos_gross_price_used==="yes"?(l(),n(_,{key:0},[r.unit_quantities&&r.unit_quantities.length===1?(l(),n("span",Ge,a(i.nsCurrency(r.unit_quantities[0].sale_price_without_tax)),1)):d("",!0)],64)):d("",!0),o.options.ns_pos_gross_price_used==="no"?(l(),n(_,{key:1},[r.unit_quantities&&r.unit_quantities.length===1?(l(),n("span",Ke,a(i.nsCurrency(r.unit_quantities[0].sale_price_with_tax)),1)):d("",!0)],64)):d("",!0)])])],8,Ne))),128))]))])])])}const ts=C(Z,[["render",Re]]);export{ts as default}; diff --git a/public/build/assets/ns-pos-layaway-popup-Bdf8YtYi.js b/public/build/assets/ns-pos-layaway-popup-Bdf8YtYi.js deleted file mode 100644 index 3fe87faf1..000000000 --- a/public/build/assets/ns-pos-layaway-popup-Bdf8YtYi.js +++ /dev/null @@ -1 +0,0 @@ -import{k as F}from"./tax-BACo6kIE.js";import{b as u,a as T}from"./bootstrap-B7E2wy_a.js";import{_ as l,n as V}from"./currency-ZXKMLAC0.js";import{_ as j}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as _,o as c,c as h,b as s,t as i,g as f,f as g,F as k,e as C,h as I,w as x,j as v}from"./runtime-core.esm-bundler-DCfIpxDt.js";const O={name:"ns-pos-layaway-popup",props:["popup"],data(){return{fields:[],instalments:[],formValidation:new F,subscription:null,totalPayments:0}},mounted(){this.loadFields()},updated(){setTimeout(()=>{document.querySelector(".is-popup #total_instalments").addEventListener("change",()=>{const e=this.formValidation.extractFields(this.fields).total_instalments;this.generatePaymentFields(e)}),document.querySelector(".is-popup #total_instalments").addEventListener("focus",()=>{document.querySelector(".is-popup #total_instalments").select()})},200)},computed:{expectedPayment(){const e=this.order.customer.group.minimal_credit_payment;return nsRawCurrency(this.order.total*e/100)},order(){return this.popup.params.order.instalments=this.popup.params.order.instalments.map(e=>{for(let t in e)if(typeof e[t]!="object"){if(t==="date"){const r={type:"date",name:t,label:l("Date"),disabled:e.paid===1,value:moment(e.date).format("YYYY-MM-DD")};e[t]=r}else if(t==="amount"){const r={type:"number",name:t,label:l("Amount"),disabled:e.paid===1,value:e.amount};e[t]=r}else if(!["paid","id"].includes(t)){const r={type:"hidden",name:t,value:e[t]};e[t]=r}}return e}),this.popup.params.order}},unmounted(){this.subscription.unsubscribe()},methods:{__:l,nsCurrency:V,refreshTotalPayments(){if(this.order.instalments.length>0){const e=nsRawCurrency(this.order.instalments.map(t=>parseFloat(t.amount.value)||0).reduce((t,r)=>parseFloat(t)+parseFloat(r)));this.totalPayments=this.order.total-e}else this.totalPayments=0},removeInstalment(e){const t=this.order.instalments.indexOf(e);this.order.instalments.splice(t,1),this.$forceUpdate()},generatePaymentFields(e){this.order.instalments=new Array(parseInt(e)).fill("").map((t,r)=>({date:{type:"date",name:"date",label:"Date",value:r===0?ns.date.moment.format("YYYY-MM-DD"):""},amount:{type:"number",name:"amount",label:"Amount",value:r===0?this.expectedPayment:0},readonly:{type:"hidden",name:"readonly",value:this.expectedPayment>0&&r===0}})),this.$forceUpdate(),this.refreshTotalPayments()},close(){this.popup.params.reject({status:"failed",message:l("You must define layaway settings before proceeding.")}),this.popup.close()},skipInstalments(){this.expectedPayment>0?(this.order.instalments=[{amount:this.expectedPayment,date:ns.date.current}],this.order.final_payment_date=this.order.instalments.reverse()[0].date,this.order.total_instalments=this.order.instalments.length,this.order.support_instalments=!1):(this.order.final_payment_date=ns.date.current,this.order.total_instalments=0,this.order.support_instalments=!1),this.popup.close(),POS.order.next(this.order);const{resolve:e,reject:t}=this.popup.params;return e({order:this.order,skip_layaway:!0})},updateOrder(){if(this.order.instalments.length===0)return u.error(l("Please provide instalments before proceeding.")).subscribe();if(this.fields.forEach(n=>this.formValidation.validateField(n)),!this.formValidation.fieldsValid(this.fields))return u.error(l("Unable to process, the form is not valid")).subscribe();this.$forceUpdate();const e=this.order.instalments.map(n=>({amount:parseFloat(n.amount.value),date:n.date.value})),t=nsRawCurrency(e.map(n=>n.amount).reduce((n,m)=>parseFloat(n)+parseFloat(m)));if(e.filter(n=>n.date===void 0||n.date==="").length>0)return u.error(l("One or more instalments has an invalid date.")).subscribe();if(e.filter(n=>!(n.amount>0)).length>0)return u.error(l("One or more instalments has an invalid amount.")).subscribe();if(e.filter(n=>moment(n.date).isBefore(ns.date.moment.startOf("day"))).length>0)return u.error(l("One or more instalments has a date prior to the current date.")).subscribe();const r=e.filter(n=>moment(n.date).isSame(ns.date.moment.startOf("day"),"day"));let y=0;if(r.forEach(n=>{y+=parseFloat(n.amount)}),y{const o=moment(n.date),p=moment(m.date);return o.isBefore(p)?-1:o.isAfter(p)?1:0});const d=this.formValidation.extractFields(this.fields);d.final_payment_date=e.reverse()[0].date,d.total_instalments=e.length;const a={...this.popup.params.order,...d,instalments:e},{resolve:b,reject:w}=this.popup.params;return this.popup.close(),POS.order.next(a),b({order:a,skip_layaway:!1})},loadFields(){T.get("/api/fields/ns.layaway").subscribe(e=>{this.fields=this.formValidation.createFields(e),this.fields.forEach(t=>{t.name==="total_instalments"&&(t.value=this.order.total_instalments||0)})})}}},S={class:"shadow-lg h-95vh md:h-5/6-screen lg:h-5/6-screen w-95vw md:w-4/6-screen lg:w-3/6-screen ns-box flex flex-col"},Y={class:"p-2 border-b ns-box-header flex justify-between items-center"},B={class:"font-semibold"},D={class:"p-2 flex-auto flex flex-col relative overflow-y-auto"},M={key:0,class:"absolute h-full w-full flex items-center justify-center"},E={class:"p-2 elevation-surface info mb-2 text-center text-2xl font-bold flex justify-between"},L={class:"flex flex-col flex-auto overflow-hidden"},q={class:"border-b ns-box-body"},A={class:"text-2xl flex justify-between py-2 text-primary"},N={class:"text-sm"},R={class:"p-2 mb-2 text-center bg-green-200 text-green-700"},U={class:"flex-auto overflow-y-auto"},H={class:"flex flex-auto"},z={class:"px-1 w-full md:w-1/2"},G={class:"px-1 w-full md:w-1/2"},J={class:"flex items-center"},K=["onClick"],Q=s("i",{class:"las la-times"},null,-1),W=[Q],X={key:0,class:"my-2"},Z={class:"p-2 elevation-surface border text-primary text-center"},$={class:"p-2 flex border-t ns-box-footer justify-between flex-shrink-0"},ee={class:"md:-mx-1 flex flex-col md:flex-row"},te={class:"md:px-1"},se={class:"md:-mx-1 flex flex-col md:flex-row"},ne={class:"md:px-1"},ae={class:"md:px-1"};function re(e,t,r,y,d,a){const b=_("ns-close-button"),w=_("ns-spinner"),n=_("ns-field"),m=_("ns-button");return c(),h("div",S,[s("div",Y,[s("h3",B,i(a.__("Layaway Parameters")),1),s("div",null,[f(b,{onClick:t[0]||(t[0]=o=>a.close())})])]),s("div",D,[d.fields.length===0?(c(),h("div",M,[f(w)])):g("",!0),s("div",E,[s("span",null,i(a.__("Minimum Payment")),1),s("span",null,i(a.nsCurrency(a.expectedPayment)),1)]),s("div",null,[(c(!0),h(k,null,C(d.fields,(o,p)=>(c(),I(n,{field:o,key:p},null,8,["field"]))),128))]),s("div",L,[s("div",q,[s("h3",A,[s("span",null,i(a.__("Instalments & Payments")),1),s("p",null,[s("span",N,"("+i(a.nsCurrency(d.totalPayments))+")",1),s("span",null,i(a.nsCurrency(e.total)),1)])]),s("p",R,i(a.__("The final payment date must be the last within the instalments.")),1)]),s("div",U,[(c(!0),h(k,null,C(a.order.instalments,(o,p)=>(c(),h("div",{class:"flex w-full -mx-1 py-2",key:p},[s("div",H,[s("div",z,[f(n,{onChange:t[1]||(t[1]=P=>a.refreshTotalPayments()),field:o.date},null,8,["field"])]),s("div",G,[f(n,{onChange:t[2]||(t[2]=P=>a.refreshTotalPayments()),field:o.amount},null,8,["field"])])]),s("div",J,[s("button",{onClick:P=>a.removeInstalment(o),class:"items-center flex justify-center h-8 w-8 rounded border text-primary ns-inset-button error"},W,8,K)])]))),128)),a.order.instalments.length===0?(c(),h("div",X,[s("p",Z,i(a.__("There is no instalment defined. Please set how many instalments are allowed for this order")),1)])):g("",!0)])])]),s("div",$,[s("div",ee,[s("div",te,[f(m,{onClick:t[3]||(t[3]=o=>a.skipInstalments()),type:"info"},{default:x(()=>[v(i(a.__("Skip Instalments")),1)]),_:1})])]),s("div",se,[s("div",ne,[f(m,{onClick:t[4]||(t[4]=o=>a.close()),type:"error"},{default:x(()=>[v(i(a.__("Cancel")),1)]),_:1})]),s("div",ae,[f(m,{onClick:t[5]||(t[5]=o=>a.updateOrder()),type:"info"},{default:x(()=>[v(i(a.__("Proceed")),1)]),_:1})])])])])}const ue=j(O,[["render",re]]);export{ue as default}; diff --git a/public/build/assets/ns-pos-layaway-popup-NBHhlFfE.js b/public/build/assets/ns-pos-layaway-popup-NBHhlFfE.js new file mode 100644 index 000000000..351c2f15c --- /dev/null +++ b/public/build/assets/ns-pos-layaway-popup-NBHhlFfE.js @@ -0,0 +1 @@ +import{F,b as u,a as T}from"./bootstrap-Bpe5LRJd.js";import{_ as l,n as V}from"./currency-lOMYG1Wf.js";import{_ as j}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as _,o as c,c as h,a as s,t as i,f,e as g,F as C,b as k,g as I,w as x,i as v}from"./runtime-core.esm-bundler-RT2b-_3S.js";const O={name:"ns-pos-layaway-popup",props:["popup"],data(){return{fields:[],instalments:[],formValidation:new F,subscription:null,totalPayments:0}},mounted(){this.loadFields()},updated(){setTimeout(()=>{document.querySelector(".is-popup #total_instalments").addEventListener("change",()=>{const e=this.formValidation.extractFields(this.fields).total_instalments;this.generatePaymentFields(e)}),document.querySelector(".is-popup #total_instalments").addEventListener("focus",()=>{document.querySelector(".is-popup #total_instalments").select()})},200)},computed:{expectedPayment(){const e=this.order.customer.group.minimal_credit_payment;return nsRawCurrency(this.order.total*e/100)},order(){return this.popup.params.order.instalments=this.popup.params.order.instalments.map(e=>{for(let t in e)if(typeof e[t]!="object"){if(t==="date"){const r={type:"date",name:t,label:l("Date"),disabled:e.paid===1,value:moment(e.date).format("YYYY-MM-DD")};e[t]=r}else if(t==="amount"){const r={type:"number",name:t,label:l("Amount"),disabled:e.paid===1,value:e.amount};e[t]=r}else if(!["paid","id"].includes(t)){const r={type:"hidden",name:t,value:e[t]};e[t]=r}}return e}),this.popup.params.order}},unmounted(){this.subscription.unsubscribe()},methods:{__:l,nsCurrency:V,refreshTotalPayments(){if(this.order.instalments.length>0){const e=nsRawCurrency(this.order.instalments.map(t=>parseFloat(t.amount.value)||0).reduce((t,r)=>parseFloat(t)+parseFloat(r)));this.totalPayments=this.order.total-e}else this.totalPayments=0},removeInstalment(e){const t=this.order.instalments.indexOf(e);this.order.instalments.splice(t,1),this.$forceUpdate()},generatePaymentFields(e){this.order.instalments=new Array(parseInt(e)).fill("").map((t,r)=>({date:{type:"date",name:"date",label:"Date",value:r===0?ns.date.moment.format("YYYY-MM-DD"):""},amount:{type:"number",name:"amount",label:"Amount",value:r===0?this.expectedPayment:0},readonly:{type:"hidden",name:"readonly",value:this.expectedPayment>0&&r===0}})),this.$forceUpdate(),this.refreshTotalPayments()},close(){this.popup.params.reject({status:"failed",message:l("You must define layaway settings before proceeding.")}),this.popup.close()},skipInstalments(){this.expectedPayment>0?(this.order.instalments=[{amount:this.expectedPayment,date:ns.date.current}],this.order.final_payment_date=this.order.instalments.reverse()[0].date,this.order.total_instalments=this.order.instalments.length,this.order.support_instalments=!1):(this.order.final_payment_date=ns.date.current,this.order.total_instalments=0,this.order.support_instalments=!1),this.popup.close(),POS.order.next(this.order);const{resolve:e,reject:t}=this.popup.params;return e({order:this.order,skip_layaway:!0})},updateOrder(){if(this.order.instalments.length===0)return u.error(l("Please provide instalments before proceeding.")).subscribe();if(this.fields.forEach(n=>this.formValidation.validateField(n)),!this.formValidation.fieldsValid(this.fields))return u.error(l("Unable to process, the form is not valid")).subscribe();this.$forceUpdate();const e=this.order.instalments.map(n=>({amount:parseFloat(n.amount.value),date:n.date.value})),t=nsRawCurrency(e.map(n=>n.amount).reduce((n,m)=>parseFloat(n)+parseFloat(m)));if(e.filter(n=>n.date===void 0||n.date==="").length>0)return u.error(l("One or more instalments has an invalid date.")).subscribe();if(e.filter(n=>!(n.amount>0)).length>0)return u.error(l("One or more instalments has an invalid amount.")).subscribe();if(e.filter(n=>moment(n.date).isBefore(ns.date.moment.startOf("day"))).length>0)return u.error(l("One or more instalments has a date prior to the current date.")).subscribe();const r=e.filter(n=>moment(n.date).isSame(ns.date.moment.startOf("day"),"day"));let y=0;if(r.forEach(n=>{y+=parseFloat(n.amount)}),y{const o=moment(n.date),p=moment(m.date);return o.isBefore(p)?-1:o.isAfter(p)?1:0});const d=this.formValidation.extractFields(this.fields);d.final_payment_date=e.reverse()[0].date,d.total_instalments=e.length;const a={...this.popup.params.order,...d,instalments:e},{resolve:b,reject:w}=this.popup.params;return this.popup.close(),POS.order.next(a),b({order:a,skip_layaway:!1})},loadFields(){T.get("/api/fields/ns.layaway").subscribe(e=>{this.fields=this.formValidation.createFields(e),this.fields.forEach(t=>{t.name==="total_instalments"&&(t.value=this.order.total_instalments||0)})})}}},S={class:"shadow-lg h-95vh md:h-5/6-screen lg:h-5/6-screen w-95vw md:w-4/6-screen lg:w-3/6-screen ns-box flex flex-col"},Y={class:"p-2 border-b ns-box-header flex justify-between items-center"},B={class:"font-semibold"},D={class:"p-2 flex-auto flex flex-col relative overflow-y-auto"},M={key:0,class:"absolute h-full w-full flex items-center justify-center"},E={class:"p-2 elevation-surface info mb-2 text-center text-2xl font-bold flex justify-between"},L={class:"flex flex-col flex-auto overflow-hidden"},q={class:"border-b ns-box-body"},A={class:"text-2xl flex justify-between py-2 text-primary"},N={class:"text-sm"},R={class:"p-2 mb-2 text-center bg-green-200 text-green-700"},U={class:"flex-auto overflow-y-auto"},H={class:"flex flex-auto"},z={class:"px-1 w-full md:w-1/2"},G={class:"px-1 w-full md:w-1/2"},J={class:"flex items-center"},K=["onClick"],Q=s("i",{class:"las la-times"},null,-1),W=[Q],X={key:0,class:"my-2"},Z={class:"p-2 elevation-surface border text-primary text-center"},$={class:"p-2 flex border-t ns-box-footer justify-between flex-shrink-0"},ee={class:"md:-mx-1 flex flex-col md:flex-row"},te={class:"md:px-1"},se={class:"md:-mx-1 flex flex-col md:flex-row"},ne={class:"md:px-1"},ae={class:"md:px-1"};function re(e,t,r,y,d,a){const b=_("ns-close-button"),w=_("ns-spinner"),n=_("ns-field"),m=_("ns-button");return c(),h("div",S,[s("div",Y,[s("h3",B,i(a.__("Layaway Parameters")),1),s("div",null,[f(b,{onClick:t[0]||(t[0]=o=>a.close())})])]),s("div",D,[d.fields.length===0?(c(),h("div",M,[f(w)])):g("",!0),s("div",E,[s("span",null,i(a.__("Minimum Payment")),1),s("span",null,i(a.nsCurrency(a.expectedPayment)),1)]),s("div",null,[(c(!0),h(C,null,k(d.fields,(o,p)=>(c(),I(n,{field:o,key:p},null,8,["field"]))),128))]),s("div",L,[s("div",q,[s("h3",A,[s("span",null,i(a.__("Instalments & Payments")),1),s("p",null,[s("span",N,"("+i(a.nsCurrency(d.totalPayments))+")",1),s("span",null,i(a.nsCurrency(e.total)),1)])]),s("p",R,i(a.__("The final payment date must be the last within the instalments.")),1)]),s("div",U,[(c(!0),h(C,null,k(a.order.instalments,(o,p)=>(c(),h("div",{class:"flex w-full -mx-1 py-2",key:p},[s("div",H,[s("div",z,[f(n,{onChange:t[1]||(t[1]=P=>a.refreshTotalPayments()),field:o.date},null,8,["field"])]),s("div",G,[f(n,{onChange:t[2]||(t[2]=P=>a.refreshTotalPayments()),field:o.amount},null,8,["field"])])]),s("div",J,[s("button",{onClick:P=>a.removeInstalment(o),class:"items-center flex justify-center h-8 w-8 rounded border text-primary ns-inset-button error"},W,8,K)])]))),128)),a.order.instalments.length===0?(c(),h("div",X,[s("p",Z,i(a.__("There is no instalment defined. Please set how many instalments are allowed for this order")),1)])):g("",!0)])])]),s("div",$,[s("div",ee,[s("div",te,[f(m,{onClick:t[3]||(t[3]=o=>a.skipInstalments()),type:"info"},{default:x(()=>[v(i(a.__("Skip Instalments")),1)]),_:1})])]),s("div",se,[s("div",ne,[f(m,{onClick:t[4]||(t[4]=o=>a.close()),type:"error"},{default:x(()=>[v(i(a.__("Cancel")),1)]),_:1})]),s("div",ae,[f(m,{onClick:t[5]||(t[5]=o=>a.updateOrder()),type:"info"},{default:x(()=>[v(i(a.__("Proceed")),1)]),_:1})])])])])}const me=j(O,[["render",re]]);export{me as default}; diff --git a/public/build/assets/ns-pos-order-type-button-AsmWcy0G.js b/public/build/assets/ns-pos-order-type-button-AsmWcy0G.js deleted file mode 100644 index c2668d02e..000000000 --- a/public/build/assets/ns-pos-order-type-button-AsmWcy0G.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./tax-BACo6kIE.js";import{b as n}from"./ns-pos-order-type-popup-BBww5Dqw.js";import{_ as p}from"./currency-ZXKMLAC0.js";import{_ as i}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as l,c as a,b as t,t as d}from"./runtime-core.esm-bundler-DCfIpxDt.js";import"./bootstrap-B7E2wy_a.js";import"./ns-prompt-popup-BbWKrSku.js";import"./ns-orders-preview-popup-MUf9kQx1.js";import"./index.es-BED_8l8F.js";const _={name:"ns-pos-delivery-button",methods:{__:p,openOrderTypeSelection(){r.show(n)}},beforeDestroy(){nsHotPress.destroy("ns_pos_keyboard_order_type")},mounted(){for(let e in nsShortcuts)["ns_pos_keyboard_order_type"].includes(e)&&nsHotPress.create("ns_pos_keyboard_order_type").whenNotVisible([".is-popup"]).whenPressed(nsShortcuts[e]!==null?nsShortcuts[e].join("+"):null,o=>{o.preventDefault(),this.openOrderTypeSelection()})}},c={class:"ns-button default"},u=t("i",{class:"mr-1 text-xl las la-truck"},null,-1);function m(e,o,f,y,h,s){return l(),a("div",c,[t("button",{onClick:o[0]||(o[0]=b=>s.openOrderTypeSelection()),class:"rounded shadow flex-shrink-0 h-12 flex items-center px-2 py-1 text-sm"},[u,t("span",null,d(s.__("Order Type")),1)])])}const D=i(_,[["render",m]]);export{D as default}; diff --git a/public/build/assets/ns-pos-order-type-button-BBW-mtJb.js b/public/build/assets/ns-pos-order-type-button-BBW-mtJb.js new file mode 100644 index 000000000..6f4bc074f --- /dev/null +++ b/public/build/assets/ns-pos-order-type-button-BBW-mtJb.js @@ -0,0 +1 @@ +import{P as r}from"./bootstrap-Bpe5LRJd.js";import{b as n}from"./ns-pos-order-type-popup-dHaiHxmR.js";import{_ as p}from"./currency-lOMYG1Wf.js";import{_ as a}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as l,c as d,a as t,t as i}from"./runtime-core.esm-bundler-RT2b-_3S.js";import"./ns-prompt-popup-C2dK5WQb.js";import"./ns-orders-preview-popup-CjtIUcZ8.js";import"./index.es-Br67aBEV.js";const _={name:"ns-pos-delivery-button",methods:{__:p,openOrderTypeSelection(){r.show(n)}},beforeDestroy(){nsHotPress.destroy("ns_pos_keyboard_order_type")},mounted(){for(let e in nsShortcuts)["ns_pos_keyboard_order_type"].includes(e)&&nsHotPress.create("ns_pos_keyboard_order_type").whenNotVisible([".is-popup"]).whenPressed(nsShortcuts[e]!==null?nsShortcuts[e].join("+"):null,o=>{o.preventDefault(),this.openOrderTypeSelection()})}},c={class:"ns-button default"},u=t("i",{class:"mr-1 text-xl las la-truck"},null,-1);function m(e,o,f,y,h,s){return l(),d("div",c,[t("button",{onClick:o[0]||(o[0]=b=>s.openOrderTypeSelection()),class:"rounded shadow flex-shrink-0 h-12 flex items-center px-2 py-1 text-sm"},[u,t("span",null,i(s.__("Order Type")),1)])])}const B=a(_,[["render",m]]);export{B as default}; diff --git a/public/build/assets/ns-pos-order-type-popup-BBww5Dqw.js b/public/build/assets/ns-pos-order-type-popup-BBww5Dqw.js deleted file mode 100644 index 6bb2f56d3..000000000 --- a/public/build/assets/ns-pos-order-type-popup-BBww5Dqw.js +++ /dev/null @@ -1 +0,0 @@ -import{d as V,j as S,k as z,p as j,v as F,w as Q}from"./tax-BACo6kIE.js";import{_ as h,n as R}from"./currency-ZXKMLAC0.js";import{b as v,a as P}from"./bootstrap-B7E2wy_a.js";import{a as I,j as B,i as E,k as M,n as H}from"./ns-prompt-popup-BbWKrSku.js";import{_ as T}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as m,o as i,c as l,g as p,f as c,b as e,t as n,h as N,F as g,e as k,w as f,j as w,i as K,C as D,n as L}from"./runtime-core.esm-bundler-DCfIpxDt.js";import{n as Y}from"./ns-orders-preview-popup-MUf9kQx1.js";const G={name:"ns-pos-quantity-popup",props:["popup"],components:{nsNumpad:I,nsNumpadPlus:B},data(){return{finalValue:1,virtualStock:null,options:{},optionsSubscription:null,allSelected:!0,isLoading:!1}},beforeDestroy(){this.optionsSubscription.unsubscribe()},mounted(){this.optionsSubscription=POS.options.subscribe(t=>{this.options=t}),this.popup.params.product.quantity&&(this.finalValue=this.popup.params.product.quantity),this.popupCloser()},unmounted(){nsHotPress.destroy("pos-quantity-numpad"),nsHotPress.destroy("pos-quantity-backspace"),nsHotPress.destroy("pos-quantity-enter")},methods:{__:h,popupCloser:V,closePopup(){this.popup.params.reject(!1),this.popup.close()},updateQuantity(t){this.finalValue=t},defineQuantity(t){const{product:o,data:d}=this.popup.params;if(t===0)return v.error(h("Please provide a quantity")).subscribe();if(o.$original().stock_management==="enabled"&&o.$original().type==="materialized"){const b=POS.getStockUsage(o.$original().id,d.unit_quantity_id)-(o.quantity||0);if(t>parseFloat(d.$quantities().quantity)-b)return v.error(h("Unable to add the product, there is not enough stock. Remaining %s").replace("%s",d.$quantities().quantity-b)).subscribe()}this.resolve({quantity:t})},resolve(t){this.popup.params.resolve(t),this.popup.close()}}},J={class:"ns-box shadow min-h-2/5-screen w-3/4-screen md:w-3/5-screen lg:w-2/5-screen xl:w-2/5-screen relative"},X={key:0,id:"loading-overlay",style:{background:"rgb(202 202 202 / 49%)"},class:"flex w-full h-full absolute top-O left-0 items-center justify-center"},Z={class:"flex-shrink-0 flex justify-between items-center p-2 border-b ns-box-header"},$={class:"text-xl font-bold text-primary text-center"},ee={id:"screen",class:"h-24 primary ns-box-body flex items-center justify-center"},se={class:"font-bold text-3xl"};function te(t,o,d,b,r,s){const x=m("ns-spinner"),u=m("ns-close-button"),y=m("ns-numpad"),C=m("ns-numpad-plus");return i(),l("div",J,[r.isLoading?(i(),l("div",X,[p(x)])):c("",!0),e("div",Z,[e("div",null,[e("h1",$,n(s.__("Define Quantity")),1)]),e("div",null,[p(u,{onClick:o[0]||(o[0]=_=>s.closePopup())})])]),e("div",ee,[e("h1",se,n(r.finalValue),1)]),r.options.ns_pos_numpad==="default"?(i(),N(y,{key:1,floating:r.options.ns_pos_allow_decimal_quantities,onChanged:o[1]||(o[1]=_=>s.updateQuantity(_)),onNext:o[2]||(o[2]=_=>s.defineQuantity(_)),value:r.finalValue},null,8,["floating","value"])):c("",!0),r.options.ns_pos_numpad==="advanced"?(i(),N(C,{key:2,onChanged:o[3]||(o[3]=_=>s.updateQuantity(_)),onNext:o[4]||(o[4]=_=>s.defineQuantity(_)),value:r.finalValue},null,8,["value"])):c("",!0)])}const oe=T(G,[["render",te]]);class Nn{constructor(o){this.product=o}run(o){return new Promise((d,b)=>{const r=this.product;if(POS.options.getValue().ns_pos_show_quantity!==!1||!POS.processingAddQueue)S.show(oe,{resolve:d,reject:b,product:r,data:o});else{if(r.$original().stock_management==="enabled"&&r.$original().type==="materialized"){const u=POS.getStockUsage(r.$original().id,o.unit_quantity_id)-(r.quantity||0);if(1>parseFloat(o.$quantities().quantity)-u)return v.error(h("Unable to add the product, there is not enough stock. Remaining %s").replace("%s",(o.$quantities().quantity-u).toString())).subscribe()}d({quantity:1})}})}}const ne={mounted(){this.closeWithOverlayClicked(),this.loadTransactionFields()},props:["popup"],data(){return{fields:[],isSubmiting:!1,formValidation:new z}},methods:{__:h,closeWithOverlayClicked:V,proceed(){const t=this.popup.params.customer,o=this.formValidation.extractFields(this.fields);this.isSubmiting=!0,P.post(`/api/customers/${t.id}/account-history`,o).subscribe({next:d=>{this.isSubmiting=!1,v.success(d.message).subscribe(),this.popup.params.resolve(d),this.popup.close()},error:d=>{this.isSubmiting=!1,v.error(d.message).subscribe(),this.popup.params.reject(d)}})},close(){this.popup.close(),this.popup.params.reject(!1)},loadTransactionFields(){P.get("/api/fields/ns.customers-account").subscribe({next:t=>{this.fields=this.formValidation.createFields(t)}})}}},re={class:"w-6/7-screen md:w-5/7-screen lg:w-4/7-screen h-6/7-screen md:h-5/7-screen lg:h-5/7-screen overflow-hidden shadow-lg ns-box flex flex-col relative"},ie={class:"p-2 border-b ns-box-header flex justify-between items-center"},le={class:"font-semibold"},ce={class:"flex-auto overflow-y-auto"},ue={key:0,class:"h-full w-full flex items-center justify-center"},ae={key:1,class:"p-2"},de={class:"p-2 ns-box-footer justify-between border-t flex"},_e=e("div",null,null,-1),pe={class:"px-1"},he={class:"-mx-2 flex flex-wrap"},fe={class:"px-1"},me={class:"px-1"},be={key:0,class:"h-full w-full absolute flex items-center justify-center",style:{background:"rgb(0 98 171 / 45%)"}};function ye(t,o,d,b,r,s){const x=m("ns-close-button"),u=m("ns-spinner"),y=m("ns-field"),C=m("ns-button");return i(),l("div",re,[e("div",ie,[e("h2",le,n(s.__("New Transaction")),1),e("div",null,[p(x,{onClick:o[0]||(o[0]=_=>s.close())})])]),e("div",ce,[r.fields.length===0?(i(),l("div",ue,[p(u)])):c("",!0),r.fields.length>0?(i(),l("div",ae,[(i(!0),l(g,null,k(r.fields,(_,O)=>(i(),N(y,{field:_,key:O},null,8,["field"]))),128))])):c("",!0)]),e("div",de,[_e,e("div",pe,[e("div",he,[e("div",fe,[p(C,{type:"error",onClick:o[1]||(o[1]=_=>s.close())},{default:f(()=>[w(n(s.__("Close")),1)]),_:1})]),e("div",me,[p(C,{type:"info",onClick:o[2]||(o[2]=_=>s.proceed())},{default:f(()=>[w(n(s.__("Proceed")),1)]),_:1})])])])]),r.isSubmiting===0?(i(),l("div",be,[p(u)])):c("",!0)])}const xe=T(ne,[["render",ye]]),ve={name:"ns-pos-coupons-load-popup",props:["popup"],components:{nsNotice:E},data(){return{placeHolder:h("Coupon Code"),couponCode:null,order:null,activeTab:"apply-coupon",orderSubscriber:null,coupon:null}},mounted(){this.popupCloser(),this.orderSubscriber=POS.order.subscribe(t=>{this.order=K(t),this.order.coupons.length>0&&(this.activeTab="active-coupons")}),this.popup.params&&this.popup.params.apply_coupon&&(this.couponCode=this.popup.params.apply_coupon,this.getCoupon(this.couponCode).subscribe({next:t=>{this.coupon=t,this.apply()}}))},unmounted(){this.orderSubscriber.unsubscribe()},methods:{__:h,popupCloser:V,popupResolver:j,selectCustomer(){Popup.show(U)},cancel(){this.coupon=null,this.couponCode=null},removeCoupon(t){this.order.coupons.splice(t,1),POS.refreshCart()},apply(){try{if(this.coupon.valid_hours_start!==null&&!ns.date.moment.isAfter(this.coupon.valid_hours_start)&&this.coupon.valid_hours_start.length>0)return v.error(h("The coupon is out from validity date range.")).subscribe();if(this.coupon.valid_hours_end!==null&&!ns.date.moment.isBefore(this.coupon.valid_hours_end)&&this.coupon.valid_hours_end.length>0)return v.error(h("The coupon is out from validity date range.")).subscribe();const t=this.coupon.products;if(t.length>0){const b=t.map(r=>r.product_id);if(this.order.products.filter(r=>b.includes(r.product_id)).length===0)return v.error(h("This coupon requires products that aren't available on the cart at the moment.")).subscribe()}const o=this.coupon.categories;if(o.length>0){const b=o.map(r=>r.category_id);if(this.order.products.filter(r=>b.includes(r.$original().category_id)).length===0)return v.error(h("This coupon requires products that belongs to specific categories that aren't included at the moment.").replace("%s")).subscribe()}let d={customer_coupon_id:this.coupon.customer_coupon.length>0?this.coupon.customer_coupon[0].id:0,minimum_cart_value:this.coupon.minimum_cart_value,maximum_cart_value:this.coupon.maximum_cart_value,name:this.coupon.name,type:this.coupon.type,value:0,coupon_id:this.coupon.id,limit_usage:this.coupon.limit_usage,code:this.coupon.code,discount_value:this.coupon.discount_value,categories:this.coupon.categories,products:this.coupon.products};this.cancel(),POS.pushCoupon(d),this.activeTab="active-coupons",setTimeout(()=>{this.popupResolver(d)},500),v.success(h("The coupon has applied to the cart.")).subscribe()}catch(t){console.log(t)}},getCouponType(t){switch(t){case"percentage_discount":return h("Percentage");case"flat_discount":return h("Flat");default:return h("Unknown Type")}},getDiscountValue(t){switch(t.type){case"percentage_discount":return t.discount_value+"%";case"flat_discount":return this.$options.filters.currency(t.discount_value)}},closePopup(){this.popupResolver(!1)},setActiveTab(t){this.activeTab=t,t==="apply-coupon"&&setTimeout(()=>{document.querySelector(".coupon-field").select()},10)},getCoupon(t){return!this.order.customer_id>0?v.error(h("You must select a customer before applying a coupon.")):P.post(`/api/customers/coupons/${t}`,{customer_id:this.order.customer_id})},loadCoupon(){const t=this.couponCode;this.getCoupon(t).subscribe({next:o=>{this.coupon=o,v.success(h("The coupon has been loaded.")).subscribe()},error:o=>{v.error(o.message||h("An unexpected error occurred.")).subscribe()}})}}},ge={class:"shadow-lg ns-box w-95vw md:w-3/6-screen lg:w-2/6-screen"},we={class:"border-b ns-box-header p-2 flex justify-between items-center"},Ce={class:"font-bold"},ke={class:"p-1 ns-box-body"},Se={class:"border-2 input-group info rounded flex"},Pe=["placeholder"],Te={class:"pt-2"},Oe={key:0,class:"pt-2 flex"},Ve={key:1,class:"pt-2"},je={class:"overflow-hidden"},Le={key:0,class:"pt-2 fade-in-entrance anim-duration-500 overflow-y-auto ns-scrollbar h-64"},Ne={class:"w-full ns-table"},qe={class:"p-2 w-1/2 border"},Ae={class:"p-2 w-1/2 border"},Re={class:"p-2 w-1/2 border"},He={class:"p-2 w-1/2 border"},Fe={class:"p-2 w-1/2 border"},Qe={class:"p-2 w-1/2 border"},De={class:"p-2 w-1/2 border"},Ue={class:"p-2 w-1/2 border"},We={class:"p-2 w-1/2 border"},ze={class:"p-2 w-1/2 border"},Ie={class:"p-2 w-1/2 border"},Be={class:"p-2 w-1/2 border"},Ee={key:0},Me={class:"p-2 w-1/2 border"},Ke={class:"p-2 w-1/2 border"},Ye={key:0},Ge={key:0},Je={class:"flex-auto"},Xe={class:"font-semibold text-primary p-2 flex justify-between"},Ze={key:0,class:"flex justify-between elevation-surface border items-center p-2"},$e={key:0,class:"flex"};function es(t,o,d,b,r,s){const x=m("ns-close-button"),u=m("ns-notice"),y=m("ns-tabs-item"),C=m("ns-tabs");return i(),l("div",ge,[e("div",we,[e("h3",Ce,n(s.__("Load Coupon")),1),e("div",null,[p(x,{onClick:o[0]||(o[0]=_=>s.closePopup())})])]),e("div",ke,[p(C,{onActive:o[5]||(o[5]=_=>s.setActiveTab(_)),active:r.activeTab},{default:f(()=>[p(y,{label:s.__("Apply A Coupon"),padding:"p-2",identifier:"apply-coupon"},{default:f(()=>[e("div",Se,[D(e("input",{ref:"coupon",onKeyup:o[1]||(o[1]=Q(_=>s.loadCoupon(),["enter"])),"onUpdate:modelValue":o[2]||(o[2]=_=>r.couponCode=_),type:"text",class:"coupon-field w-full text-primary p-2 outline-none",placeholder:r.placeHolder},null,40,Pe),[[F,r.couponCode]]),e("button",{onClick:o[3]||(o[3]=_=>s.loadCoupon()),class:"px-3 py-2"},n(s.__("Load")),1)]),e("div",Te,[p(u,{color:"info"},{description:f(()=>[w(n(s.__("Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.")),1)]),_:1})]),r.order&&r.order.customer_id===void 0?(i(),l("div",Oe,[e("button",{onClick:o[4]||(o[4]=_=>s.selectCustomer()),class:"w-full border p-2 outline-none ns-numpad-key info cursor-pointer text-center"},n(s.__("Click here to choose a customer.")),1)])):c("",!0),r.order&&r.order.customer_id!==void 0?(i(),l("div",Ve,[p(u,{color:"success"},{description:f(()=>[w(n(s.__("Loading Coupon For : ")+`${r.order.customer.first_name} ${r.order.customer.last_name}`),1)]),_:1})])):c("",!0),e("div",je,[r.coupon?(i(),l("div",Le,[e("table",Ne,[e("tbody",null,[e("tr",null,[e("td",qe,n(s.__("Coupon Name")),1),e("td",Ae,n(r.coupon.name),1)]),e("tr",null,[e("td",Re,n(s.__("Discount"))+" ("+n(s.getCouponType(r.coupon.type))+")",1),e("td",He,n(s.getDiscountValue(r.coupon)),1)]),e("tr",null,[e("td",Fe,n(s.__("Usage")),1),e("td",Qe,n((r.coupon.customer_coupon.length>0?r.coupon.customer_coupon[0].usage:0)+"/"+(r.coupon.limit_usage||s.__("Unlimited"))),1)]),e("tr",null,[e("td",De,n(s.__("Valid From")),1),e("td",Ue,n(r.coupon.valid_hours_start||s.__("N/A")),1)]),e("tr",null,[e("td",We,n(s.__("Valid Till")),1),e("td",ze,n(r.coupon.valid_hours_end||s.__("N/A")),1)]),e("tr",null,[e("td",Ie,n(s.__("Categories")),1),e("td",Be,[e("ul",null,[(i(!0),l(g,null,k(r.coupon.categories,_=>(i(),l("li",{class:"rounded-full px-3 py-1 border",key:_.id},n(_.category.name),1))),128)),r.coupon.categories.length===0?(i(),l("li",Ee,n(s.__("Not applicable")),1)):c("",!0)])])]),e("tr",null,[e("td",Me,n(s.__("Products")),1),e("td",Ke,[e("ul",null,[(i(!0),l(g,null,k(r.coupon.products,_=>(i(),l("li",{class:"rounded-full px-3 py-1 border",key:_.id},n(_.product.name),1))),128)),r.coupon.products.length===0?(i(),l("li",Ye,n(s.__("Not applicable")),1)):c("",!0)])])])])])])):c("",!0)])]),_:1},8,["label"]),p(y,{label:s.__("Active Coupons"),padding:"p-1",identifier:"active-coupons"},{default:f(()=>[r.order?(i(),l("ul",Ge,[(i(!0),l(g,null,k(r.order.coupons,(_,O)=>(i(),l("li",{key:O,class:"flex justify-between elevation-surface border items-center px-2 py-1"},[e("div",Je,[e("h3",Xe,[e("span",null,n(_.name),1),e("span",null,n(s.getDiscountValue(_)),1)])]),e("div",null,[p(x,{onClick:q=>s.removeCoupon(O)},null,8,["onClick"])])]))),128)),r.order.coupons.length===0?(i(),l("li",Ze,n(s.__("No coupons applies to the cart.")),1)):c("",!0)])):c("",!0)]),_:1},8,["label"])]),_:1},8,["active"])]),r.coupon?(i(),l("div",$e,[e("button",{onClick:o[6]||(o[6]=_=>s.apply()),class:"w-1/2 px-3 py-2 bg-success-tertiary text-white font-bold"},n(s.__("Apply")),1),e("button",{onClick:o[7]||(o[7]=_=>s.cancel()),class:"w-1/2 px-3 py-2 bg-error-tertiary text-white font-bold"},n(s.__("Cancel")),1)])):c("",!0)])}const ss=T(ve,[["render",es]]),ts={name:"ns-pos-customers",props:["popup"],data(){return{activeTab:"create-customers",customer:null,subscription:null,orders:[],options:{},optionsSubscriber:null,selectedTab:"orders",isLoadingCoupons:!1,isLoadingRewards:!1,isLoadingHistory:!1,isLoadingOrders:!1,coupons:[],rewardsResponse:[],order:null,walletHistories:[]}},components:{nsPaginate:M},unmounted(){this.subscription.unsubscribe(),this.optionsSubscriber.unsubscribe()},mounted(){this.closeWithOverlayClicked(),this.optionsSubscriber=POS.options.subscribe(t=>{this.options=t}),this.subscription=POS.order.subscribe(t=>{this.order=t,this.popup.params.customer!==void 0?(this.activeTab="account-payment",this.customer=this.popup.params.customer,this.loadCustomerOrders()):t.customer!==void 0&&(this.activeTab="account-payment",this.customer=t.customer,this.loadCustomerOrders())}),this.popupCloser()},methods:{__:h,nsCurrency:R,reload(){this.loadCustomerOrders()},popupResolver:j,popupCloser:V,getWalletHistoryLabel(t){switch(t){case"add":return h("Crediting");case"deduct":return h("Removing");case"refund":return h("Refunding");case"payment":return h("Payment");default:return h("Unknow")}},getType(t){switch(t){case"percentage_discount":return h("Percentage Discount");case"flat_discount":return h("Flat Discount")}},closeWithOverlayClicked:V,async openOrderOptions(t){try{const o=await new Promise((d,b)=>{S.show(Y,{order:t,resolve:d,reject:b})});this.reload()}catch{v.error(h("An error occurred while opening the order options")).subscribe()}},doChangeTab(t){this.selectedTab=t,t==="coupons"&&this.loadCoupons(),t==="rewards"&&this.loadRewards(),t==="wallet-history"&&this.loadAccounHistory(),t==="orders"&&this.loadCustomerOrders()},loadAccounHistory(){this.isLoadingHistory=!0,P.get(`/api/customers/${this.customer.id}/account-history`).subscribe({next:t=>{this.walletHistories=t.data,this.isLoadingHistory=!1},error:t=>{this.isLoadingHistory=!1}})},loadCoupons(){this.isLoadingCoupons=!0,P.get(`/api/customers/${this.customer.id}/coupons`).subscribe({next:t=>{this.coupons=t,this.isLoadingCoupons=!1},error:t=>{this.isLoadingCoupons=!1}})},loadRewards(t=`/api/customers/${this.customer.id}/rewards`){this.isLoadingRewards=!0,P.get(t).subscribe({next:o=>{this.rewardsResponse=o,this.isLoadingRewards=!1},error:o=>{this.isLoadingRewards=!1}})},prefillForm(t){this.popup.params.name!==void 0&&(t.main.value=this.popup.params.name)},openCustomerSelection(){this.popup.close(t=>{S.show(U)})},loadCustomerOrders(){this.isLoadingOrders=!0,P.get(`/api/customers/${this.customer.id}/orders`).subscribe({next:t=>{this.orders=t,this.isLoadingOrders=!1},error:t=>{this.isLoadingOrders=!1}})},newTransaction(t){new Promise((d,b)=>{S.show(xe,{customer:t,resolve:d,reject:b})}).then(d=>{POS.loadCustomer(t.id).subscribe(b=>{POS.selectCustomer(b)})})},applyCoupon(t){this.order.customer===void 0?S.show(H,{title:h("Use Customer ?"),message:h("No customer is selected. Would you like to proceed with this customer ?"),onAction:o=>{o&&POS.selectCustomer(this.customer).then(d=>{this.proceedApplyingCoupon(t)})}}):this.order.customer.id===this.customer.id?this.proceedApplyingCoupon(t):this.order.customer.id!==this.customer.id&&S.show(H,{title:h("Change Customer ?"),message:h("Would you like to assign this customer to the ongoing order ?"),onAction:o=>{o&&POS.selectCustomer(this.customer).then(d=>{this.proceedApplyingCoupon(t)})}})},proceedApplyingCoupon(t){new Promise((o,d)=>{S.show(ss,{apply_coupon:t.code,resolve:o,reject:d})}).then(o=>{this.popupResolver(!1)}).catch(o=>{})},handleSavedCustomer(t){v.success(t.message).subscribe(),POS.selectCustomer(t.data.entry),this.popup.close()}}},os={id:"ns-pos-customers",class:"shadow-lg rounded w-95vw h-95vh lg:w-3/5-screen flex flex-col overflow-hidden"},rs={class:"ns-header p-2 flex justify-between items-center border-b"},is={class:"font-semibold"},ls={class:"ns-body flex-auto flex p-2 overflow-y-auto"},cs={key:1,class:"h-full flex-col w-full flex items-center justify-center text-primary"},us=e("i",{class:"lar la-hand-paper ns-icon text-6xl"},null,-1),as={class:"font-medium text-2xl"},ds={key:0,class:"flex-auto w-full flex items-center justify-center flex-col p-4"},_s=e("i",{class:"lar la-frown text-6xl"},null,-1),ps={class:"font-medium text-2xl"},hs={class:"my-2"},fs={key:1,class:"flex flex-col flex-auto"},ms={class:"flex-auto p-2 flex flex-col"},bs={class:"flex flex-wrap"},ys={class:"px-4 mb-4 w-full"},xs={class:"font-semibold"},vs={class:"flex flex-wrap ns-tab-cards -mx-2 w-full"},gs={class:"px-2 mb-4 w-full md:w-1/4 flex"},ws={class:"rounded-lg shadow w-full bg-transparent bg-gradient-to-br from-success-secondary to-green-700 p-2 flex flex-col text-white"},Cs={class:"font-medium text-lg"},ks={class:"w-full flex justify-end"},Ss={class:"font-bold"},Ps={class:"px-2 mb-4 w-full md:w-1/4 flex"},Ts={class:"rounded-lg shadow w-full bg-transparent bg-gradient-to-br from-error-secondary to-red-700 p-2 text-white"},Os={class:"font-medium text-lg"},Vs={class:"w-full flex justify-end"},js={class:"font-bold"},Ls={class:"px-2 mb-4 w-full md:w-1/4 flex"},Ns={class:"rounded-lg shadow w-full bg-transparent bg-gradient-to-br from-blue-500 to-blue-700 p-2 text-white"},qs={class:"font-medium text-lg"},As={class:"w-full flex justify-end"},Rs={class:"font-bold"},Hs={class:"px-2 mb-4 w-full md:w-1/4 flex"},Fs={class:"rounded-lg shadow w-full bg-transparent bg-gradient-to-br from-teal-500 to-teal-700 p-2 text-white"},Qs={class:"font-medium text-lg"},Ds={class:"w-full flex justify-end"},Us={class:"font-bold"},Ws={class:"flex flex-auto flex-col overflow-hidden"},zs={key:0,class:"flex-auto h-full justify-center flex items-center"},Is={class:"py-2 w-full"},Bs={class:"font-semibold text-primary"},Es={class:"flex-auto flex-col flex overflow-hidden"},Ms={class:"flex-auto overflow-y-auto"},Ks={class:"table ns-table w-full"},Ys={class:"text-primary"},Gs={colspan:"3",width:"150",class:"p-2 border font-semibold"},Js={width:"50",class:"p-2 border font-semibold"},Xs={class:"text-primary"},Zs={key:0},$s={class:"border p-2 text-center",colspan:"4"},et={colspan:"3",class:"border p-2 text-center"},st={class:"flex flex-col items-start"},tt={class:"font-bold"},ot={class:"md:-mx-2 w-full flex flex-col md:flex-row"},nt={class:"md:px-2 flex items-start w-full md:w-1/4"},rt={class:"md:px-2 flex items-start w-full md:w-1/4"},it={class:"md:px-2 flex items-start w-full md:w-1/4"},lt={class:"border p-2 text-center"},ct=["onClick"],ut=e("i",{class:"las la-wallet"},null,-1),at={class:"ml-1"},dt={key:0,class:"flex-auto h-full justify-center flex items-center"},_t={class:"py-2 w-full"},pt={class:"font-semibold text-primary"},ht={class:"flex-auto flex-col flex overflow-hidden"},ft={class:"flex-auto overflow-y-auto"},mt={class:"table ns-table w-full"},bt={class:"text-primary"},yt={colspan:"3",width:"150",class:"p-2 border font-semibold"},xt={class:"text-primary"},vt={key:0},gt={class:"border p-2 text-center",colspan:"3"},wt={colspan:"3",class:"border p-2 text-center"},Ct={class:"flex flex-col items-start"},kt={class:"font-bold"},St={class:"md:-mx-2 w-full flex flex-col md:flex-row"},Pt={class:"md:px-2 flex items-start w-full md:w-1/3"},Tt={class:"md:px-2 flex items-start w-full md:w-1/3"},Ot={key:0,class:"flex-auto h-full justify-center flex items-center"},Vt={class:"py-2 w-full"},jt={class:"font-semibold text-primary"},Lt={class:"flex-auto flex-col flex overflow-hidden"},Nt={class:"flex-auto overflow-y-auto"},qt={class:"table ns-table w-full"},At={class:"text-primary"},Rt={width:"150",class:"p-2 border font-semibold"},Ht={class:"p-2 border font-semibold"},Ft=e("th",{class:"p-2 border font-semibold"},null,-1),Qt={class:"text-primary text-sm"},Dt={key:0},Ut={class:"border p-2 text-center",colspan:"4"},Wt={width:"300",class:"border p-2"},zt={class:""},It={class:"-mx-2 flex"},Bt={class:"text-xs text-primary px-2"},Et={class:"text-xs text-primary px-2"},Mt={class:"border p-2 text-center"},Kt={key:0},Yt={key:1},Gt={class:"border p-2 text-right"},Jt={key:0,class:"flex-auto h-full justify-center flex items-center"},Xt={class:"py-2 w-full"},Zt={class:"font-semibold text-primary"},$t={class:"flex-auto flex-col flex overflow-hidden"},eo={class:"flex-auto overflow-y-auto"},so={class:"table ns-table w-full"},to={class:"text-primary"},oo={width:"150",class:"p-2 border font-semibold"},no={class:"p-2 border font-semibold"},ro={class:"p-2 border font-semibold"},io={key:0,class:"text-primary text-sm"},lo={key:0},co={class:"border p-2 text-center",colspan:"4"},uo={width:"300",class:"border p-2"},ao={class:"text-center"},_o={width:"300",class:"border p-2"},po={class:"text-center"},ho={width:"300",class:"border p-2"},fo={class:"text-center"},mo={class:"py-1 flex justify-end"},bo={class:"p-2 border-t border-box-edge flex justify-between"},yo=e("div",null,null,-1);function xo(t,o,d,b,r,s){const x=m("ns-close-button"),u=m("ns-crud-form"),y=m("ns-tabs-item"),C=m("ns-button"),_=m("ns-spinner"),O=m("ns-paginate"),q=m("ns-tabs");return i(),l("div",os,[e("div",rs,[e("h3",is,n(s.__("Customers")),1),e("div",null,[p(x,{onClick:o[0]||(o[0]=a=>d.popup.close())})])]),e("div",ls,[p(q,{active:r.activeTab,onActive:o[7]||(o[7]=a=>r.activeTab=a)},{default:f(()=>[p(y,{identifier:"create-customers",label:s.__("New Customer")},{default:f(()=>[r.options.ns_pos_customers_creation_enabled==="yes"?(i(),N(u,{key:0,onUpdated:o[1]||(o[1]=a=>s.prefillForm(a)),onSave:o[2]||(o[2]=a=>s.handleSavedCustomer(a)),"submit-url":"/api/crud/ns.customers",src:"/api/crud/ns.customers/form-config"},{title:f(()=>[w(n(s.__("Customer Name")),1)]),save:f(()=>[w(n(s.__("Save Customer")),1)]),_:1})):c("",!0),r.options.ns_pos_customers_creation_enabled!=="yes"?(i(),l("div",cs,[us,e("h3",as,n(s.__("Not Authorized")),1),e("p",null,n(s.__("Creating customers has been explicitly disabled from the settings.")),1)])):c("",!0)]),_:1},8,["label"]),p(y,{identifier:"account-payment",label:s.__("Customer Account"),class:"flex",padding:"p-0 flex"},{default:f(()=>[r.customer===null?(i(),l("div",ds,[_s,e("h3",ps,n(s.__("No Customer Selected")),1),e("p",null,n(s.__("In order to see a customer account, you need to select one customer.")),1),e("div",hs,[p(C,{onClick:o[3]||(o[3]=a=>s.openCustomerSelection()),type:"info"},{default:f(()=>[w(n(s.__("Select Customer")),1)]),_:1})])])):c("",!0),r.customer?(i(),l("div",fs,[e("div",ms,[e("div",bs,[e("div",ys,[e("h2",xs,n(s.__("Summary For"))+" : "+n(r.customer.first_name),1)]),e("div",vs,[e("div",gs,[e("div",ws,[e("h3",Cs,n(s.__("Purchases")),1),e("div",ks,[e("h2",Ss,n(s.nsCurrency(r.customer.purchases_amount)),1)])])]),e("div",Ps,[e("div",Ts,[e("h3",Os,n(s.__("Owed")),1),e("div",Vs,[e("h2",js,n(s.nsCurrency(r.customer.owed_amount)),1)])])]),e("div",Ls,[e("div",Ns,[e("h3",qs,n(s.__("Wallet Amount")),1),e("div",As,[e("h2",Rs,n(s.nsCurrency(r.customer.account_amount)),1)])])]),e("div",Hs,[e("div",Fs,[e("h3",Qs,n(s.__("Credit Limit")),1),e("div",Ds,[e("h2",Us,n(s.nsCurrency(r.customer.credit_limit_amount)),1)])])])])]),e("div",Ws,[p(q,{active:r.selectedTab,onChangeTab:o[5]||(o[5]=a=>s.doChangeTab(a))},{default:f(()=>[p(y,{identifier:"orders",label:s.__("Orders")},{default:f(()=>[r.isLoadingOrders?(i(),l("div",zs,[p(_,{size:"36"})])):c("",!0),r.isLoadingOrders?c("",!0):(i(),l(g,{key:1},[e("div",Is,[e("h2",Bs,n(s.__("Last Purchases")),1)]),e("div",Es,[e("div",Ms,[e("table",Ks,[e("thead",null,[e("tr",Ys,[e("th",Gs,n(s.__("Order")),1),e("th",Js,n(s.__("Options")),1)])]),e("tbody",Xs,[r.orders.length===0?(i(),l("tr",Zs,[e("td",$s,n(s.__("No orders...")),1)])):c("",!0),(i(!0),l(g,null,k(r.orders,a=>(i(),l("tr",{key:a.id},[e("td",et,[e("div",st,[e("h3",tt,n(s.__("Code"))+": "+n(a.code),1),e("div",ot,[e("div",nt,[e("small",null,n(s.__("Total"))+": "+n(s.nsCurrency(a.total)),1)]),e("div",rt,[e("small",null,n(s.__("Status"))+": "+n(a.human_status),1)]),e("div",it,[e("small",null,n(s.__("Delivery"))+": "+n(a.human_delivery_status),1)])])])]),e("td",lt,[e("button",{onClick:W=>s.openOrderOptions(a),class:"rounded-full h-8 px-2 flex items-center justify-center border border-gray ns-inset-button success"},[ut,e("span",at,n(s.__("Options")),1)],8,ct)])]))),128))])])])])],64))]),_:1},8,["label"]),p(y,{identifier:"wallet-history",label:s.__("Wallet History")},{default:f(()=>[r.isLoadingHistory?(i(),l("div",dt,[p(_,{size:"36"})])):c("",!0),r.isLoadingHistory?c("",!0):(i(),l(g,{key:1},[e("div",_t,[e("h2",pt,n(s.__("Wallet History")),1)]),e("div",ht,[e("div",ft,[e("table",mt,[e("thead",null,[e("tr",bt,[e("th",yt,n(s.__("Transaction")),1)])]),e("tbody",xt,[r.walletHistories.length===0?(i(),l("tr",vt,[e("td",gt,n(s.__("No History...")),1)])):c("",!0),(i(!0),l(g,null,k(r.walletHistories,a=>(i(),l("tr",{key:a.id},[e("td",wt,[e("div",Ct,[e("h3",kt,n(s.__("Transaction"))+": "+n(s.getWalletHistoryLabel(a.operation)),1),e("div",St,[e("div",Pt,[e("small",null,n(s.__("Amount"))+": "+n(s.nsCurrency(t.amount)),1)]),e("div",Tt,[e("small",null,n(s.__("Date"))+": "+n(a.created_at),1)])])])])]))),128))])])])])],64))]),_:1},8,["label"]),p(y,{identifier:"coupons",label:s.__("Coupons")},{default:f(()=>[r.isLoadingCoupons?(i(),l("div",Ot,[p(_,{size:"36"})])):c("",!0),r.isLoadingCoupons?c("",!0):(i(),l(g,{key:1},[e("div",Vt,[e("h2",jt,n(s.__("Coupons")),1)]),e("div",Lt,[e("div",Nt,[e("table",qt,[e("thead",null,[e("tr",At,[e("th",Rt,n(s.__("Name")),1),e("th",Ht,n(s.__("Type")),1),Ft])]),e("tbody",Qt,[r.coupons.length===0?(i(),l("tr",Dt,[e("td",Ut,n(s.__("No coupons for the selected customer...")),1)])):c("",!0),(i(!0),l(g,null,k(r.coupons,a=>(i(),l("tr",{key:a.id},[e("td",Wt,[e("h3",null,n(a.name),1),e("div",zt,[e("ul",It,[e("li",Bt,n(s.__("Usage :"))+" "+n(a.usage)+"/"+n(a.limit_usage),1),e("li",Et,n(s.__("Code :"))+" "+n(a.code),1)])])]),e("td",Mt,[w(n(s.getType(a.coupon.type))+" ",1),a.coupon.type==="percentage_discount"?(i(),l("span",Kt," ("+n(a.coupon.discount_value)+"%) ",1)):c("",!0),a.coupon.type==="flat_discount"?(i(),l("span",Yt," ("+n(s.nsCurrency(t.value))+") ",1)):c("",!0)]),e("td",Gt,[p(C,{onClick:W=>s.applyCoupon(a),type:"info"},{default:f(()=>[w(n(s.__("Use Coupon")),1)]),_:2},1032,["onClick"])])]))),128))])])])])],64))]),_:1},8,["label"]),p(y,{identifier:"rewards",label:s.__("Rewards")},{default:f(()=>[r.isLoadingRewards?(i(),l("div",Jt,[p(_,{size:"36"})])):c("",!0),r.isLoadingRewards?c("",!0):(i(),l(g,{key:1},[e("div",Xt,[e("h2",Zt,n(s.__("Rewards")),1)]),e("div",$t,[e("div",eo,[e("table",so,[e("thead",null,[e("tr",to,[e("th",oo,n(s.__("Name")),1),e("th",no,n(s.__("Points")),1),e("th",ro,n(s.__("Target")),1)])]),r.rewardsResponse.data?(i(),l("tbody",io,[r.rewardsResponse.data.length===0?(i(),l("tr",lo,[e("td",co,n(s.__("No rewards available the selected customer...")),1)])):c("",!0),(i(!0),l(g,null,k(r.rewardsResponse.data,a=>(i(),l("tr",{key:a.id},[e("td",uo,[e("h3",ao,n(a.reward_name),1)]),e("td",_o,[e("h3",po,n(a.points),1)]),e("td",ho,[e("h3",fo,n(a.target),1)])]))),128))])):c("",!0)])])]),e("div",mo,[p(O,{pagination:r.rewardsResponse,onLoad:o[4]||(o[4]=a=>s.loadRewards(a))},null,8,["pagination"])])],64))]),_:1},8,["label"])]),_:1},8,["active"])])]),e("div",bo,[yo,e("div",null,[p(C,{onClick:o[6]||(o[6]=a=>s.newTransaction(r.customer)),type:"info"},{default:f(()=>[w(n(s.__("Account Transaction")),1)]),_:1})])])])):c("",!0)]),_:1},8,["label"])]),_:1},8,["active"])])])}const A=T(ts,[["render",xo]]),qn=Object.freeze(Object.defineProperty({__proto__:null,default:A},Symbol.toStringTag,{value:"Module"})),vo={props:["popup"],data(){return{searchCustomerValue:"",orderSubscription:null,order:{},debounceSearch:null,customers:[],isLoading:!1}},computed:{customerSelected(){return!1}},watch:{searchCustomerValue(t){clearTimeout(this.debounceSearch),this.debounceSearch=setTimeout(()=>{this.searchCustomer(t)},500)}},mounted(){this.orderSubscription=POS.order.subscribe(t=>{this.order=t}),this.getRecentCustomers(),this.$refs.searchField.focus()},unmounted(){this.orderSubscription.unsubscribe()},methods:{__:h,nsCurrency:R,resolveIfQueued:j,attemptToChoose(){if(this.customers.length===1)return this.selectCustomer(this.customers[0]);v.info(h("Too many results.")).subscribe()},openCustomerHistory(t,o){o.stopImmediatePropagation(),this.popup.close(),S.show(A,{customer:t,activeTab:"account-payment"})},selectCustomer(t){this.customers.forEach(o=>o.selected=!1),t.selected=!0,this.isLoading=!0,POS.selectCustomer(t).then(o=>{this.isLoading=!1,this.resolveIfQueued(t)}).catch(o=>{this.isLoading=!1})},searchCustomer(t){P.post("/api/customers/search",{search:t}).subscribe(o=>{o.forEach(d=>d.selected=!1),this.customers=o})},createCustomerWithMatch(t){this.resolveIfQueued(!1),S.show(A,{name:t})},getRecentCustomers(){this.isLoading=!0,P.get("/api/customers/recently-active").subscribe({next:t=>{this.isLoading=!1,t.forEach(o=>o.selected=!1),this.customers=t},error:t=>{this.isLoading=!1}})}}},go={id:"ns-pos-customer-select-popup",class:"ns-box shadow-xl w-4/5-screen md:w-2/5-screen xl:w-108"},wo={id:"header",class:"border-b ns-box-header text-center font-semibold text-2xl py-2"},Co={class:"relative"},ko={class:"p-2 border-b ns-box-body items-center flex justify-between"},So={class:"flex items-center justify-between"},Po=e("i",{class:"las la-eye"},null,-1),To=[Po],Oo={class:"p-2 border-b ns-box-body flex justify-between text-primary"},Vo={class:"input-group flex-auto border-2 rounded"},jo={class:"h-3/5-screen xl:h-2/5-screen overflow-y-auto ns-scrollbar"},Lo={class:"ns-vertical-menu"},No={key:0,class:"p-2 text-center text-primary"},qo={class:"border-b border-dashed border-info-primary"},Ao=["onClick"],Ro={class:"flex flex-col"},Ho={class:"text-xs text-secondary"},Fo={class:"flex items-center"},Qo={key:0,class:"text-error-primary"},Do={key:1},Uo={class:"purchase-amount"},Wo=["onClick"],zo=e("i",{class:"las la-eye"},null,-1),Io=[zo],Bo={key:0,class:"z-10 top-0 absolute w-full h-full flex items-center justify-center"};function Eo(t,o,d,b,r,s){const x=m("ns-spinner");return i(),l("div",go,[e("div",wo,[e("h2",null,n(s.__("Select Customer")),1)]),e("div",Co,[e("div",ko,[e("span",null,n(s.__("Selected"))+" : ",1),e("div",So,[e("span",null,n(r.order.customer?`${r.order.customer.first_name} ${r.order.customer.last_name}`:"N/A"),1),r.order.customer?(i(),l("button",{key:0,onClick:o[0]||(o[0]=u=>s.openCustomerHistory(r.order.customer,u)),class:"mx-2 rounded-full h-8 w-8 flex items-center justify-center border ns-inset-button hover:border-transparent"},To)):c("",!0)])]),e("div",Oo,[e("div",Vo,[D(e("input",{ref:"searchField",onKeydown:o[1]||(o[1]=Q(u=>s.attemptToChoose(),["enter"])),"onUpdate:modelValue":o[2]||(o[2]=u=>r.searchCustomerValue=u),placeholder:"Search Customer",type:"text",class:"outline-none w-full p-2"},null,544),[[F,r.searchCustomerValue]])])]),e("div",jo,[e("ul",Lo,[r.customers&&r.customers.length===0?(i(),l("li",No,n(s.__("No customer match your query...")),1)):c("",!0),r.customers&&r.customers.length===0?(i(),l("li",{key:1,onClick:o[3]||(o[3]=u=>s.createCustomerWithMatch(r.searchCustomerValue)),class:"p-2 cursor-pointer text-center text-primary"},[e("span",qo,n(s.__("Create a customer")),1)])):c("",!0),(i(!0),l(g,null,k(r.customers,u=>(i(),l("li",{onClick:y=>s.selectCustomer(u),key:u.id,class:"cursor-pointer p-2 border-b text-primary flex justify-between items-center"},[e("div",Ro,[e("span",null,n(u.first_name)+" "+n(u.last_name),1),e("small",Ho,n(u.group.name),1)]),e("p",Fo,[u.owe_amount>0?(i(),l("span",Qo,"-"+n(s.nsCurrency(u.owe_amount)),1)):c("",!0),u.owe_amount>0?(i(),l("span",Do,"/")):c("",!0),e("span",Uo,n(s.nsCurrency(u.purchases_amount)),1),e("button",{onClick:y=>s.openCustomerHistory(u,y),class:"mx-2 rounded-full h-8 w-8 flex items-center justify-center border ns-inset-button info"},Io,8,Wo)])],8,Ao))),128))])]),r.isLoading?(i(),l("div",Bo,[p(x,{size:"24",border:"8"})])):c("",!0)])])}const U=T(vo,[["render",Eo]]),Mo={name:"ns-pos-discount-popup",props:["popup"],data(){return{finalValue:1,virtualStock:null,popupSubscription:null,mode:"",type:"",allSelected:!0,isLoading:!1,keys:[...[7,8,9].map(t=>({identifier:t,value:t})),...[4,5,6].map(t=>({identifier:t,value:t})),...[1,2,3].map(t=>({identifier:t,value:t})),{identifier:"backspace",icon:"la-backspace"},{identifier:0,value:0},{identifier:"next",icon:"la-share"}]}},mounted(){this.mode=this.popup.params.reference.discount_type||"percentage",this.type=this.popup.params.type,this.mode==="percentage"?this.finalValue=this.popup.params.reference.discount_percentage||1:this.finalValue=this.popup.params.reference.discount||1},methods:{__:h,nsCurrency:R,setPercentageType(t){this.mode=t},closePopup(){this.popup.close()},inputValue(t){t.identifier==="next"?(this.popup.params.onSubmit({discount_type:this.mode,discount_percentage:this.mode==="percentage"?this.finalValue:void 0,discount:this.mode==="flat"?this.finalValue:void 0}),this.popup.close()):t.identifier==="backspace"?this.allSelected?(this.finalValue=0,this.allSelected=!1):(this.finalValue=this.finalValue.toString(),this.finalValue=this.finalValue.substr(0,this.finalValue.length-1)||0):this.allSelected?(this.finalValue=t.value,this.finalValue=parseFloat(this.finalValue),this.allSelected=!1):(this.finalValue+=""+t.value,this.finalValue=parseFloat(this.finalValue),this.mode==="percentage"&&(this.finalValue=this.finalValue>100?100:this.finalValue))}}},Ko={id:"discount-popup",class:"ns-box shadow min-h-2/5-screen w-6/7-screen md:w-3/5-screen lg:w-3/5-screen xl:w-2/5-screen relative"},Yo={class:"flex-shrink-0 flex justify-between items-center p-2 border-b ns-box-header"},Go={key:0,class:"text-xl font-bold text-primary text-center"},Jo={key:1,class:"text-xl font-bold text-primary text-center"},Xo={id:"screen",class:"h-16 ns-box-body text-white flex items-center justify-center"},Zo={class:"font-bold text-3xl"},$o={key:0},en={key:1},sn={id:"switch-mode",class:"flex"},tn=e("hr",{class:"border-r border-box-edge"},null,-1),on={id:"numpad",class:"grid grid-flow-row grid-cols-3 grid-rows-3"},nn=["onClick"],rn={key:0};function ln(t,o,d,b,r,s){const x=m("ns-close-button");return i(),l("div",Ko,[e("div",Yo,[e("div",null,[r.type==="product"?(i(),l("h1",Go,n(s.__("Product Discount")),1)):c("",!0),r.type==="cart"?(i(),l("h1",Jo,n(s.__("Cart Discount")),1)):c("",!0)]),e("div",null,[p(x,{onClick:o[0]||(o[0]=u=>s.closePopup())})])]),e("div",Xo,[e("h1",Zo,[r.mode==="flat"?(i(),l("span",$o,n(s.nsCurrency(r.finalValue)),1)):c("",!0),r.mode==="percentage"?(i(),l("span",en,n(r.finalValue)+"%",1)):c("",!0)])]),e("div",sn,[e("button",{onClick:o[1]||(o[1]=u=>s.setPercentageType("flat")),class:L([r.mode==="flat"?"bg-tab-active":"bg-tab-inactive text-tertiary","outline-none w-1/2 py-2 flex items-center justify-center"])},n(s.__("Flat")),3),tn,e("button",{onClick:o[2]||(o[2]=u=>s.setPercentageType("percentage")),class:L([r.mode==="percentage"?"bg-tab-active":"bg-tab-inactive text-tertiary","outline-none w-1/2 py-2 flex items-center justify-center"])},n(s.__("Percentage")),3)]),e("div",on,[(i(!0),l(g,null,k(r.keys,(u,y)=>(i(),l("div",{onClick:C=>s.inputValue(u),key:y,class:"text-primary ns-numpad-key info text-xl font-bold border h-24 flex items-center justify-center cursor-pointer"},[u.value!==void 0?(i(),l("span",rn,n(u.value),1)):c("",!0),u.icon?(i(),l("i",{key:1,class:L(["las",u.icon])},null,2)):c("",!0)],8,nn))),128))])])}const An=T(Mo,[["render",ln]]),cn={data(){return{types:[],typeSubscription:null,settingsSubscription:null,urls:{}}},props:["popup"],mounted(){this.settingsSubscription=POS.settings.subscribe(t=>{this.urls=t.urls}),this.typeSubscription=POS.types.subscribe(t=>{this.types=t,Object.values(this.types).length===1&&this.select(Object.keys(this.types)[0])}),this.popupCloser()},unmounted(){this.typeSubscription.unsubscribe()},methods:{__:h,popupCloser:V,popupResolver:j,resolveIfQueued:j,async select(t){Object.values(this.types).forEach(d=>d.selected=!1),this.types[t].selected=!0;const o=this.types[t];try{const d=await POS.triggerOrderTypeSelection(o);POS.types.next(this.types),this.resolveIfQueued(o)}catch{}}}},un={id:"ns-order-type",class:"h-full w-4/5-screen md:w-2/5-screen lg:w-2/5-screen xl:w-2/6-screen shadow-lg"},an={id:"header",class:"h-16 flex justify-center items-center"},dn={class:"font-bold"},_n={key:0,class:"ns-box-body grid grid-flow-row grid-cols-1 grid-rows-1"},pn={class:"h-full w-full flex items-center justify-center flex-col"},hn=e("i",{class:"las la-frown text-7xl text-error-tertiary"},null,-1),fn={class:"p-4 md:w-2/3"},mn={class:"text-center"},bn={class:"flex justify-center mt-4 mb-2 -mx-2"},yn={class:"px-2"},xn={class:"px-2"},vn={key:1,class:"ns-box-body grid grid-flow-row grid-cols-2 grid-rows-2"},gn=["onClick"],wn=["src"],Cn={class:"font-semibold text-xl my-2"};function kn(t,o,d,b,r,s){const x=m("ns-link");return i(),l("div",un,[e("div",an,[e("h3",dn,n(s.__("Define The Order Type")),1)]),Object.values(r.types).length===0?(i(),l("div",_n,[e("div",pn,[hn,e("div",fn,[e("p",mn,n(s.__("No payment type has been selected on the settings. Please check your POS features and choose the supported order type")),1),e("div",bn,[e("div",yn,[p(x,{target:"_blank",type:"info",href:"https://my.nexopos.com/en/documentation/components/order-types"},{default:f(()=>[w(n(s.__("Read More")),1)]),_:1})]),e("div",xn,[p(x,{target:"_blank",type:"info",href:r.urls.order_type_url},{default:f(()=>[w(n(s.__("Configure")),1)]),_:1},8,["href"])])])])])])):c("",!0),Object.values(r.types).length>0?(i(),l("div",vn,[(i(!0),l(g,null,k(r.types,u=>(i(),l("div",{onClick:y=>s.select(u.identifier),key:u.identifier,class:L([u.selected?"active":"","ns-numpad-key info h-56 flex items-center justify-center flex-col cursor-pointer border"])},[e("img",{src:u.icon,alt:"",class:"w-32 h-32"},null,8,wn),e("h4",Cn,n(u.label),1)],10,gn))),128))])):c("",!0)])}const Rn=T(cn,[["render",kn]]);export{Nn as P,An as a,Rn as b,ss as c,qn as d,U as n}; diff --git a/public/build/assets/ns-pos-order-type-popup-dHaiHxmR.js b/public/build/assets/ns-pos-order-type-popup-dHaiHxmR.js new file mode 100644 index 000000000..9bf372fb8 --- /dev/null +++ b/public/build/assets/ns-pos-order-type-popup-dHaiHxmR.js @@ -0,0 +1 @@ +import{g as T,b as v,P as S,F as z,a as P,p as j,v as F,w as Q}from"./bootstrap-Bpe5LRJd.js";import{_ as h,n as R}from"./currency-lOMYG1Wf.js";import{a as I,j as B,i as E,k as M,n as H}from"./ns-prompt-popup-C2dK5WQb.js";import{_ as O}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as m,o as i,c as l,f as p,e as c,a as e,t as n,g as N,F as g,b as k,w as f,i as w,h as K,B as D,n as L}from"./runtime-core.esm-bundler-RT2b-_3S.js";import{n as Y}from"./ns-orders-preview-popup-CjtIUcZ8.js";const G={name:"ns-pos-quantity-popup",props:["popup"],components:{nsNumpad:I,nsNumpadPlus:B},data(){return{finalValue:1,virtualStock:null,options:{},optionsSubscription:null,allSelected:!0,isLoading:!1}},beforeDestroy(){this.optionsSubscription.unsubscribe()},mounted(){this.optionsSubscription=POS.options.subscribe(t=>{this.options=t}),this.popup.params.product.quantity&&(this.finalValue=this.popup.params.product.quantity),this.popupCloser()},unmounted(){nsHotPress.destroy("pos-quantity-numpad"),nsHotPress.destroy("pos-quantity-backspace"),nsHotPress.destroy("pos-quantity-enter")},methods:{__:h,popupCloser:T,closePopup(){this.popup.params.reject(!1),this.popup.close()},updateQuantity(t){this.finalValue=t},defineQuantity(t){const{product:o,data:d}=this.popup.params;if(t===0)return v.error(h("Please provide a quantity")).subscribe();if(o.$original().stock_management==="enabled"&&o.$original().type==="materialized"){const b=POS.getStockUsage(o.$original().id,d.unit_quantity_id)-(o.quantity||0);if(t>parseFloat(d.$quantities().quantity)-b)return v.error(h("Unable to add the product, there is not enough stock. Remaining %s").replace("%s",d.$quantities().quantity-b)).subscribe()}this.resolve({quantity:t})},resolve(t){this.popup.params.resolve(t),this.popup.close()}}},J={class:"ns-box shadow min-h-2/5-screen w-3/4-screen md:w-3/5-screen lg:w-2/5-screen xl:w-2/5-screen relative"},X={key:0,id:"loading-overlay",style:{background:"rgb(202 202 202 / 49%)"},class:"flex w-full h-full absolute top-O left-0 items-center justify-center"},Z={class:"flex-shrink-0 flex justify-between items-center p-2 border-b ns-box-header"},$={class:"text-xl font-bold text-primary text-center"},ee={id:"screen",class:"h-24 primary ns-box-body flex items-center justify-center"},se={class:"font-bold text-3xl"};function te(t,o,d,b,r,s){const x=m("ns-spinner"),u=m("ns-close-button"),y=m("ns-numpad"),C=m("ns-numpad-plus");return i(),l("div",J,[r.isLoading?(i(),l("div",X,[p(x)])):c("",!0),e("div",Z,[e("div",null,[e("h1",$,n(s.__("Define Quantity")),1)]),e("div",null,[p(u,{onClick:o[0]||(o[0]=_=>s.closePopup())})])]),e("div",ee,[e("h1",se,n(r.finalValue),1)]),r.options.ns_pos_numpad==="default"?(i(),N(y,{key:1,floating:r.options.ns_pos_allow_decimal_quantities,onChanged:o[1]||(o[1]=_=>s.updateQuantity(_)),onNext:o[2]||(o[2]=_=>s.defineQuantity(_)),value:r.finalValue},null,8,["floating","value"])):c("",!0),r.options.ns_pos_numpad==="advanced"?(i(),N(C,{key:2,onChanged:o[3]||(o[3]=_=>s.updateQuantity(_)),onNext:o[4]||(o[4]=_=>s.defineQuantity(_)),value:r.finalValue},null,8,["value"])):c("",!0)])}const oe=O(G,[["render",te]]);class Ln{constructor(o){this.product=o}run(o){return new Promise((d,b)=>{const r=this.product;if(POS.options.getValue().ns_pos_show_quantity!==!1||!POS.processingAddQueue)S.show(oe,{resolve:d,reject:b,product:r,data:o});else{if(r.$original().stock_management==="enabled"&&r.$original().type==="materialized"){const u=POS.getStockUsage(r.$original().id,o.unit_quantity_id)-(r.quantity||0);if(1>parseFloat(o.$quantities().quantity)-u)return v.error(h("Unable to add the product, there is not enough stock. Remaining %s").replace("%s",(o.$quantities().quantity-u).toString())).subscribe()}d({quantity:1})}})}}const ne={mounted(){this.closeWithOverlayClicked(),this.loadTransactionFields()},props:["popup"],data(){return{fields:[],isSubmiting:!1,formValidation:new z}},methods:{__:h,closeWithOverlayClicked:T,proceed(){const t=this.popup.params.customer,o=this.formValidation.extractFields(this.fields);this.isSubmiting=!0,P.post(`/api/customers/${t.id}/account-history`,o).subscribe({next:d=>{this.isSubmiting=!1,v.success(d.message).subscribe(),this.popup.params.resolve(d),this.popup.close()},error:d=>{this.isSubmiting=!1,v.error(d.message).subscribe(),this.popup.params.reject(d)}})},close(){this.popup.close(),this.popup.params.reject(!1)},loadTransactionFields(){P.get("/api/fields/ns.customers-account").subscribe({next:t=>{this.fields=this.formValidation.createFields(t)}})}}},re={class:"w-6/7-screen md:w-5/7-screen lg:w-4/7-screen h-6/7-screen md:h-5/7-screen lg:h-5/7-screen overflow-hidden shadow-lg ns-box flex flex-col relative"},ie={class:"p-2 border-b ns-box-header flex justify-between items-center"},le={class:"font-semibold"},ce={class:"flex-auto overflow-y-auto"},ue={key:0,class:"h-full w-full flex items-center justify-center"},ae={key:1,class:"p-2"},de={class:"p-2 ns-box-footer justify-between border-t flex"},_e=e("div",null,null,-1),pe={class:"px-1"},he={class:"-mx-2 flex flex-wrap"},fe={class:"px-1"},me={class:"px-1"},be={key:0,class:"h-full w-full absolute flex items-center justify-center",style:{background:"rgb(0 98 171 / 45%)"}};function ye(t,o,d,b,r,s){const x=m("ns-close-button"),u=m("ns-spinner"),y=m("ns-field"),C=m("ns-button");return i(),l("div",re,[e("div",ie,[e("h2",le,n(s.__("New Transaction")),1),e("div",null,[p(x,{onClick:o[0]||(o[0]=_=>s.close())})])]),e("div",ce,[r.fields.length===0?(i(),l("div",ue,[p(u)])):c("",!0),r.fields.length>0?(i(),l("div",ae,[(i(!0),l(g,null,k(r.fields,(_,V)=>(i(),N(y,{field:_,key:V},null,8,["field"]))),128))])):c("",!0)]),e("div",de,[_e,e("div",pe,[e("div",he,[e("div",fe,[p(C,{type:"error",onClick:o[1]||(o[1]=_=>s.close())},{default:f(()=>[w(n(s.__("Close")),1)]),_:1})]),e("div",me,[p(C,{type:"info",onClick:o[2]||(o[2]=_=>s.proceed())},{default:f(()=>[w(n(s.__("Proceed")),1)]),_:1})])])])]),r.isSubmiting===0?(i(),l("div",be,[p(u)])):c("",!0)])}const xe=O(ne,[["render",ye]]),ve={name:"ns-pos-coupons-load-popup",props:["popup"],components:{nsNotice:E},data(){return{placeHolder:h("Coupon Code"),couponCode:null,order:null,activeTab:"apply-coupon",orderSubscriber:null,coupon:null}},mounted(){this.popupCloser(),this.orderSubscriber=POS.order.subscribe(t=>{this.order=K(t),this.order.coupons.length>0&&(this.activeTab="active-coupons")}),this.popup.params&&this.popup.params.apply_coupon&&(this.couponCode=this.popup.params.apply_coupon,this.getCoupon(this.couponCode).subscribe({next:t=>{this.coupon=t,this.apply()}}))},unmounted(){this.orderSubscriber.unsubscribe()},methods:{__:h,popupCloser:T,popupResolver:j,selectCustomer(){Popup.show(U)},cancel(){this.coupon=null,this.couponCode=null},removeCoupon(t){this.order.coupons.splice(t,1),POS.refreshCart()},apply(){try{if(this.coupon.valid_hours_start!==null&&!ns.date.moment.isAfter(this.coupon.valid_hours_start)&&this.coupon.valid_hours_start.length>0)return v.error(h("The coupon is out from validity date range.")).subscribe();if(this.coupon.valid_hours_end!==null&&!ns.date.moment.isBefore(this.coupon.valid_hours_end)&&this.coupon.valid_hours_end.length>0)return v.error(h("The coupon is out from validity date range.")).subscribe();const t=this.coupon.products;if(t.length>0){const b=t.map(r=>r.product_id);if(this.order.products.filter(r=>b.includes(r.product_id)).length===0)return v.error(h("This coupon requires products that aren't available on the cart at the moment.")).subscribe()}const o=this.coupon.categories;if(o.length>0){const b=o.map(r=>r.category_id);if(this.order.products.filter(r=>b.includes(r.$original().category_id)).length===0)return v.error(h("This coupon requires products that belongs to specific categories that aren't included at the moment.").replace("%s")).subscribe()}let d={customer_coupon_id:this.coupon.customer_coupon.length>0?this.coupon.customer_coupon[0].id:0,minimum_cart_value:this.coupon.minimum_cart_value,maximum_cart_value:this.coupon.maximum_cart_value,name:this.coupon.name,type:this.coupon.type,value:0,coupon_id:this.coupon.id,limit_usage:this.coupon.limit_usage,code:this.coupon.code,discount_value:this.coupon.discount_value,categories:this.coupon.categories,products:this.coupon.products};this.cancel(),POS.pushCoupon(d),this.activeTab="active-coupons",setTimeout(()=>{this.popupResolver(d)},500),v.success(h("The coupon has applied to the cart.")).subscribe()}catch(t){console.log(t)}},getCouponType(t){switch(t){case"percentage_discount":return h("Percentage");case"flat_discount":return h("Flat");default:return h("Unknown Type")}},getDiscountValue(t){switch(t.type){case"percentage_discount":return t.discount_value+"%";case"flat_discount":return this.$options.filters.currency(t.discount_value)}},closePopup(){this.popupResolver(!1)},setActiveTab(t){this.activeTab=t,t==="apply-coupon"&&setTimeout(()=>{document.querySelector(".coupon-field").select()},10)},getCoupon(t){return!this.order.customer_id>0?v.error(h("You must select a customer before applying a coupon.")):P.post(`/api/customers/coupons/${t}`,{customer_id:this.order.customer_id})},loadCoupon(){const t=this.couponCode;this.getCoupon(t).subscribe({next:o=>{this.coupon=o,v.success(h("The coupon has been loaded.")).subscribe()},error:o=>{v.error(o.message||h("An unexpected error occurred.")).subscribe()}})}}},ge={class:"shadow-lg ns-box w-95vw md:w-3/6-screen lg:w-2/6-screen"},we={class:"border-b ns-box-header p-2 flex justify-between items-center"},Ce={class:"font-bold"},ke={class:"p-1 ns-box-body"},Se={class:"border-2 input-group info rounded flex"},Pe=["placeholder"],Te={class:"pt-2"},Oe={key:0,class:"pt-2 flex"},Ve={key:1,class:"pt-2"},je={class:"overflow-hidden"},Le={key:0,class:"pt-2 fade-in-entrance anim-duration-500 overflow-y-auto ns-scrollbar h-64"},Ne={class:"w-full ns-table"},qe={class:"p-2 w-1/2 border"},Ae={class:"p-2 w-1/2 border"},Re={class:"p-2 w-1/2 border"},He={class:"p-2 w-1/2 border"},Fe={class:"p-2 w-1/2 border"},Qe={class:"p-2 w-1/2 border"},De={class:"p-2 w-1/2 border"},Ue={class:"p-2 w-1/2 border"},We={class:"p-2 w-1/2 border"},ze={class:"p-2 w-1/2 border"},Ie={class:"p-2 w-1/2 border"},Be={class:"p-2 w-1/2 border"},Ee={key:0},Me={class:"p-2 w-1/2 border"},Ke={class:"p-2 w-1/2 border"},Ye={key:0},Ge={key:0},Je={class:"flex-auto"},Xe={class:"font-semibold text-primary p-2 flex justify-between"},Ze={key:0,class:"flex justify-between elevation-surface border items-center p-2"},$e={key:0,class:"flex"};function es(t,o,d,b,r,s){const x=m("ns-close-button"),u=m("ns-notice"),y=m("ns-tabs-item"),C=m("ns-tabs");return i(),l("div",ge,[e("div",we,[e("h3",Ce,n(s.__("Load Coupon")),1),e("div",null,[p(x,{onClick:o[0]||(o[0]=_=>s.closePopup())})])]),e("div",ke,[p(C,{onActive:o[5]||(o[5]=_=>s.setActiveTab(_)),active:r.activeTab},{default:f(()=>[p(y,{label:s.__("Apply A Coupon"),padding:"p-2",identifier:"apply-coupon"},{default:f(()=>[e("div",Se,[D(e("input",{ref:"coupon",onKeyup:o[1]||(o[1]=Q(_=>s.loadCoupon(),["enter"])),"onUpdate:modelValue":o[2]||(o[2]=_=>r.couponCode=_),type:"text",class:"coupon-field w-full text-primary p-2 outline-none",placeholder:r.placeHolder},null,40,Pe),[[F,r.couponCode]]),e("button",{onClick:o[3]||(o[3]=_=>s.loadCoupon()),class:"px-3 py-2"},n(s.__("Load")),1)]),e("div",Te,[p(u,{color:"info"},{description:f(()=>[w(n(s.__("Input the coupon code that should apply to the POS. If a coupon is issued for a customer, that customer must be selected priorly.")),1)]),_:1})]),r.order&&r.order.customer_id===void 0?(i(),l("div",Oe,[e("button",{onClick:o[4]||(o[4]=_=>s.selectCustomer()),class:"w-full border p-2 outline-none ns-numpad-key info cursor-pointer text-center"},n(s.__("Click here to choose a customer.")),1)])):c("",!0),r.order&&r.order.customer_id!==void 0?(i(),l("div",Ve,[p(u,{color:"success"},{description:f(()=>[w(n(s.__("Loading Coupon For : ")+`${r.order.customer.first_name} ${r.order.customer.last_name}`),1)]),_:1})])):c("",!0),e("div",je,[r.coupon?(i(),l("div",Le,[e("table",Ne,[e("tbody",null,[e("tr",null,[e("td",qe,n(s.__("Coupon Name")),1),e("td",Ae,n(r.coupon.name),1)]),e("tr",null,[e("td",Re,n(s.__("Discount"))+" ("+n(s.getCouponType(r.coupon.type))+")",1),e("td",He,n(s.getDiscountValue(r.coupon)),1)]),e("tr",null,[e("td",Fe,n(s.__("Usage")),1),e("td",Qe,n((r.coupon.customer_coupon.length>0?r.coupon.customer_coupon[0].usage:0)+"/"+(r.coupon.limit_usage||s.__("Unlimited"))),1)]),e("tr",null,[e("td",De,n(s.__("Valid From")),1),e("td",Ue,n(r.coupon.valid_hours_start||s.__("N/A")),1)]),e("tr",null,[e("td",We,n(s.__("Valid Till")),1),e("td",ze,n(r.coupon.valid_hours_end||s.__("N/A")),1)]),e("tr",null,[e("td",Ie,n(s.__("Categories")),1),e("td",Be,[e("ul",null,[(i(!0),l(g,null,k(r.coupon.categories,_=>(i(),l("li",{class:"rounded-full px-3 py-1 border",key:_.id},n(_.category.name),1))),128)),r.coupon.categories.length===0?(i(),l("li",Ee,n(s.__("Not applicable")),1)):c("",!0)])])]),e("tr",null,[e("td",Me,n(s.__("Products")),1),e("td",Ke,[e("ul",null,[(i(!0),l(g,null,k(r.coupon.products,_=>(i(),l("li",{class:"rounded-full px-3 py-1 border",key:_.id},n(_.product.name),1))),128)),r.coupon.products.length===0?(i(),l("li",Ye,n(s.__("Not applicable")),1)):c("",!0)])])])])])])):c("",!0)])]),_:1},8,["label"]),p(y,{label:s.__("Active Coupons"),padding:"p-1",identifier:"active-coupons"},{default:f(()=>[r.order?(i(),l("ul",Ge,[(i(!0),l(g,null,k(r.order.coupons,(_,V)=>(i(),l("li",{key:V,class:"flex justify-between elevation-surface border items-center px-2 py-1"},[e("div",Je,[e("h3",Xe,[e("span",null,n(_.name),1),e("span",null,n(s.getDiscountValue(_)),1)])]),e("div",null,[p(x,{onClick:q=>s.removeCoupon(V)},null,8,["onClick"])])]))),128)),r.order.coupons.length===0?(i(),l("li",Ze,n(s.__("No coupons applies to the cart.")),1)):c("",!0)])):c("",!0)]),_:1},8,["label"])]),_:1},8,["active"])]),r.coupon?(i(),l("div",$e,[e("button",{onClick:o[6]||(o[6]=_=>s.apply()),class:"w-1/2 px-3 py-2 bg-success-tertiary text-white font-bold"},n(s.__("Apply")),1),e("button",{onClick:o[7]||(o[7]=_=>s.cancel()),class:"w-1/2 px-3 py-2 bg-error-tertiary text-white font-bold"},n(s.__("Cancel")),1)])):c("",!0)])}const ss=O(ve,[["render",es]]),ts={name:"ns-pos-customers",props:["popup"],data(){return{activeTab:"create-customers",customer:null,subscription:null,orders:[],options:{},optionsSubscriber:null,selectedTab:"orders",isLoadingCoupons:!1,isLoadingRewards:!1,isLoadingHistory:!1,isLoadingOrders:!1,coupons:[],rewardsResponse:[],order:null,walletHistories:[]}},components:{nsPaginate:M},unmounted(){this.subscription.unsubscribe(),this.optionsSubscriber.unsubscribe()},mounted(){this.closeWithOverlayClicked(),this.optionsSubscriber=POS.options.subscribe(t=>{this.options=t}),this.subscription=POS.order.subscribe(t=>{this.order=t,this.popup.params.customer!==void 0?(this.activeTab="account-payment",this.customer=this.popup.params.customer,this.loadCustomerOrders()):t.customer!==void 0&&(this.activeTab="account-payment",this.customer=t.customer,this.loadCustomerOrders())}),this.popupCloser()},methods:{__:h,nsCurrency:R,reload(){this.loadCustomerOrders()},popupResolver:j,popupCloser:T,getWalletHistoryLabel(t){switch(t){case"add":return h("Crediting");case"deduct":return h("Removing");case"refund":return h("Refunding");case"payment":return h("Payment");default:return h("Unknow")}},getType(t){switch(t){case"percentage_discount":return h("Percentage Discount");case"flat_discount":return h("Flat Discount")}},closeWithOverlayClicked:T,async openOrderOptions(t){try{const o=await new Promise((d,b)=>{S.show(Y,{order:t,resolve:d,reject:b})});this.reload()}catch{v.error(h("An error occurred while opening the order options")).subscribe()}},doChangeTab(t){this.selectedTab=t,t==="coupons"&&this.loadCoupons(),t==="rewards"&&this.loadRewards(),t==="wallet-history"&&this.loadAccounHistory(),t==="orders"&&this.loadCustomerOrders()},loadAccounHistory(){this.isLoadingHistory=!0,P.get(`/api/customers/${this.customer.id}/account-history`).subscribe({next:t=>{this.walletHistories=t.data,this.isLoadingHistory=!1},error:t=>{this.isLoadingHistory=!1}})},loadCoupons(){this.isLoadingCoupons=!0,P.get(`/api/customers/${this.customer.id}/coupons`).subscribe({next:t=>{this.coupons=t,this.isLoadingCoupons=!1},error:t=>{this.isLoadingCoupons=!1}})},loadRewards(t=`/api/customers/${this.customer.id}/rewards`){this.isLoadingRewards=!0,P.get(t).subscribe({next:o=>{this.rewardsResponse=o,this.isLoadingRewards=!1},error:o=>{this.isLoadingRewards=!1}})},prefillForm(t){this.popup.params.name!==void 0&&(t.main.value=this.popup.params.name)},openCustomerSelection(){this.popup.close(t=>{S.show(U)})},loadCustomerOrders(){this.isLoadingOrders=!0,P.get(`/api/customers/${this.customer.id}/orders`).subscribe({next:t=>{this.orders=t,this.isLoadingOrders=!1},error:t=>{this.isLoadingOrders=!1}})},newTransaction(t){new Promise((d,b)=>{S.show(xe,{customer:t,resolve:d,reject:b})}).then(d=>{POS.loadCustomer(t.id).subscribe(b=>{POS.selectCustomer(b)})})},applyCoupon(t){this.order.customer===void 0?S.show(H,{title:h("Use Customer ?"),message:h("No customer is selected. Would you like to proceed with this customer ?"),onAction:o=>{o&&POS.selectCustomer(this.customer).then(d=>{this.proceedApplyingCoupon(t)})}}):this.order.customer.id===this.customer.id?this.proceedApplyingCoupon(t):this.order.customer.id!==this.customer.id&&S.show(H,{title:h("Change Customer ?"),message:h("Would you like to assign this customer to the ongoing order ?"),onAction:o=>{o&&POS.selectCustomer(this.customer).then(d=>{this.proceedApplyingCoupon(t)})}})},proceedApplyingCoupon(t){new Promise((o,d)=>{S.show(ss,{apply_coupon:t.code,resolve:o,reject:d})}).then(o=>{this.popupResolver(!1)}).catch(o=>{})},handleSavedCustomer(t){v.success(t.message).subscribe(),POS.selectCustomer(t.data.entry),this.popup.close()}}},os={id:"ns-pos-customers",class:"shadow-lg rounded w-95vw h-95vh lg:w-3/5-screen flex flex-col overflow-hidden"},rs={class:"ns-header p-2 flex justify-between items-center border-b"},is={class:"font-semibold"},ls={class:"ns-body flex-auto flex p-2 overflow-y-auto"},cs={key:1,class:"h-full flex-col w-full flex items-center justify-center text-primary"},us=e("i",{class:"lar la-hand-paper ns-icon text-6xl"},null,-1),as={class:"font-medium text-2xl"},ds={key:0,class:"flex-auto w-full flex items-center justify-center flex-col p-4"},_s=e("i",{class:"lar la-frown text-6xl"},null,-1),ps={class:"font-medium text-2xl"},hs={class:"my-2"},fs={key:1,class:"flex flex-col flex-auto"},ms={class:"flex-auto p-2 flex flex-col"},bs={class:"flex flex-wrap"},ys={class:"px-4 mb-4 w-full"},xs={class:"font-semibold"},vs={class:"flex flex-wrap ns-tab-cards -mx-2 w-full"},gs={class:"px-2 mb-4 w-full md:w-1/4 flex"},ws={class:"rounded-lg shadow w-full bg-transparent bg-gradient-to-br from-success-secondary to-green-700 p-2 flex flex-col text-white"},Cs={class:"font-medium text-lg"},ks={class:"w-full flex justify-end"},Ss={class:"font-bold"},Ps={class:"px-2 mb-4 w-full md:w-1/4 flex"},Ts={class:"rounded-lg shadow w-full bg-transparent bg-gradient-to-br from-error-secondary to-red-700 p-2 text-white"},Os={class:"font-medium text-lg"},Vs={class:"w-full flex justify-end"},js={class:"font-bold"},Ls={class:"px-2 mb-4 w-full md:w-1/4 flex"},Ns={class:"rounded-lg shadow w-full bg-transparent bg-gradient-to-br from-blue-500 to-blue-700 p-2 text-white"},qs={class:"font-medium text-lg"},As={class:"w-full flex justify-end"},Rs={class:"font-bold"},Hs={class:"px-2 mb-4 w-full md:w-1/4 flex"},Fs={class:"rounded-lg shadow w-full bg-transparent bg-gradient-to-br from-teal-500 to-teal-700 p-2 text-white"},Qs={class:"font-medium text-lg"},Ds={class:"w-full flex justify-end"},Us={class:"font-bold"},Ws={class:"flex flex-auto flex-col overflow-hidden"},zs={key:0,class:"flex-auto h-full justify-center flex items-center"},Is={class:"py-2 w-full"},Bs={class:"font-semibold text-primary"},Es={class:"flex-auto flex-col flex overflow-hidden"},Ms={class:"flex-auto overflow-y-auto"},Ks={class:"table ns-table w-full"},Ys={class:"text-primary"},Gs={colspan:"3",width:"150",class:"p-2 border font-semibold"},Js={width:"50",class:"p-2 border font-semibold"},Xs={class:"text-primary"},Zs={key:0},$s={class:"border p-2 text-center",colspan:"4"},et={colspan:"3",class:"border p-2 text-center"},st={class:"flex flex-col items-start"},tt={class:"font-bold"},ot={class:"md:-mx-2 w-full flex flex-col md:flex-row"},nt={class:"md:px-2 flex items-start w-full md:w-1/4"},rt={class:"md:px-2 flex items-start w-full md:w-1/4"},it={class:"md:px-2 flex items-start w-full md:w-1/4"},lt={class:"border p-2 text-center"},ct=["onClick"],ut=e("i",{class:"las la-wallet"},null,-1),at={class:"ml-1"},dt={key:0,class:"flex-auto h-full justify-center flex items-center"},_t={class:"py-2 w-full"},pt={class:"font-semibold text-primary"},ht={class:"flex-auto flex-col flex overflow-hidden"},ft={class:"flex-auto overflow-y-auto"},mt={class:"table ns-table w-full"},bt={class:"text-primary"},yt={colspan:"3",width:"150",class:"p-2 border font-semibold"},xt={class:"text-primary"},vt={key:0},gt={class:"border p-2 text-center",colspan:"3"},wt={colspan:"3",class:"border p-2 text-center"},Ct={class:"flex flex-col items-start"},kt={class:"font-bold"},St={class:"md:-mx-2 w-full flex flex-col md:flex-row"},Pt={class:"md:px-2 flex items-start w-full md:w-1/3"},Tt={class:"md:px-2 flex items-start w-full md:w-1/3"},Ot={key:0,class:"flex-auto h-full justify-center flex items-center"},Vt={class:"py-2 w-full"},jt={class:"font-semibold text-primary"},Lt={class:"flex-auto flex-col flex overflow-hidden"},Nt={class:"flex-auto overflow-y-auto"},qt={class:"table ns-table w-full"},At={class:"text-primary"},Rt={width:"150",class:"p-2 border font-semibold"},Ht={class:"p-2 border font-semibold"},Ft=e("th",{class:"p-2 border font-semibold"},null,-1),Qt={class:"text-primary text-sm"},Dt={key:0},Ut={class:"border p-2 text-center",colspan:"4"},Wt={width:"300",class:"border p-2"},zt={class:""},It={class:"-mx-2 flex"},Bt={class:"text-xs text-primary px-2"},Et={class:"text-xs text-primary px-2"},Mt={class:"border p-2 text-center"},Kt={key:0},Yt={key:1},Gt={class:"border p-2 text-right"},Jt={key:0,class:"flex-auto h-full justify-center flex items-center"},Xt={class:"py-2 w-full"},Zt={class:"font-semibold text-primary"},$t={class:"flex-auto flex-col flex overflow-hidden"},eo={class:"flex-auto overflow-y-auto"},so={class:"table ns-table w-full"},to={class:"text-primary"},oo={width:"150",class:"p-2 border font-semibold"},no={class:"p-2 border font-semibold"},ro={class:"p-2 border font-semibold"},io={key:0,class:"text-primary text-sm"},lo={key:0},co={class:"border p-2 text-center",colspan:"4"},uo={width:"300",class:"border p-2"},ao={class:"text-center"},_o={width:"300",class:"border p-2"},po={class:"text-center"},ho={width:"300",class:"border p-2"},fo={class:"text-center"},mo={class:"py-1 flex justify-end"},bo={class:"p-2 border-t border-box-edge flex justify-between"},yo=e("div",null,null,-1);function xo(t,o,d,b,r,s){const x=m("ns-close-button"),u=m("ns-crud-form"),y=m("ns-tabs-item"),C=m("ns-button"),_=m("ns-spinner"),V=m("ns-paginate"),q=m("ns-tabs");return i(),l("div",os,[e("div",rs,[e("h3",is,n(s.__("Customers")),1),e("div",null,[p(x,{onClick:o[0]||(o[0]=a=>d.popup.close())})])]),e("div",ls,[p(q,{active:r.activeTab,onActive:o[7]||(o[7]=a=>r.activeTab=a)},{default:f(()=>[p(y,{identifier:"create-customers",label:s.__("New Customer")},{default:f(()=>[r.options.ns_pos_customers_creation_enabled==="yes"?(i(),N(u,{key:0,onUpdated:o[1]||(o[1]=a=>s.prefillForm(a)),onSave:o[2]||(o[2]=a=>s.handleSavedCustomer(a)),"submit-url":"/api/crud/ns.customers",src:"/api/crud/ns.customers/form-config"},{title:f(()=>[w(n(s.__("Customer Name")),1)]),save:f(()=>[w(n(s.__("Save Customer")),1)]),_:1})):c("",!0),r.options.ns_pos_customers_creation_enabled!=="yes"?(i(),l("div",cs,[us,e("h3",as,n(s.__("Not Authorized")),1),e("p",null,n(s.__("Creating customers has been explicitly disabled from the settings.")),1)])):c("",!0)]),_:1},8,["label"]),p(y,{identifier:"account-payment",label:s.__("Customer Account"),class:"flex",padding:"p-0 flex"},{default:f(()=>[r.customer===null?(i(),l("div",ds,[_s,e("h3",ps,n(s.__("No Customer Selected")),1),e("p",null,n(s.__("In order to see a customer account, you need to select one customer.")),1),e("div",hs,[p(C,{onClick:o[3]||(o[3]=a=>s.openCustomerSelection()),type:"info"},{default:f(()=>[w(n(s.__("Select Customer")),1)]),_:1})])])):c("",!0),r.customer?(i(),l("div",fs,[e("div",ms,[e("div",bs,[e("div",ys,[e("h2",xs,n(s.__("Summary For"))+" : "+n(r.customer.first_name),1)]),e("div",vs,[e("div",gs,[e("div",ws,[e("h3",Cs,n(s.__("Purchases")),1),e("div",ks,[e("h2",Ss,n(s.nsCurrency(r.customer.purchases_amount)),1)])])]),e("div",Ps,[e("div",Ts,[e("h3",Os,n(s.__("Owed")),1),e("div",Vs,[e("h2",js,n(s.nsCurrency(r.customer.owed_amount)),1)])])]),e("div",Ls,[e("div",Ns,[e("h3",qs,n(s.__("Wallet Amount")),1),e("div",As,[e("h2",Rs,n(s.nsCurrency(r.customer.account_amount)),1)])])]),e("div",Hs,[e("div",Fs,[e("h3",Qs,n(s.__("Credit Limit")),1),e("div",Ds,[e("h2",Us,n(s.nsCurrency(r.customer.credit_limit_amount)),1)])])])])]),e("div",Ws,[p(q,{active:r.selectedTab,onChangeTab:o[5]||(o[5]=a=>s.doChangeTab(a))},{default:f(()=>[p(y,{identifier:"orders",label:s.__("Orders")},{default:f(()=>[r.isLoadingOrders?(i(),l("div",zs,[p(_,{size:"36"})])):c("",!0),r.isLoadingOrders?c("",!0):(i(),l(g,{key:1},[e("div",Is,[e("h2",Bs,n(s.__("Last Purchases")),1)]),e("div",Es,[e("div",Ms,[e("table",Ks,[e("thead",null,[e("tr",Ys,[e("th",Gs,n(s.__("Order")),1),e("th",Js,n(s.__("Options")),1)])]),e("tbody",Xs,[r.orders.length===0?(i(),l("tr",Zs,[e("td",$s,n(s.__("No orders...")),1)])):c("",!0),(i(!0),l(g,null,k(r.orders,a=>(i(),l("tr",{key:a.id},[e("td",et,[e("div",st,[e("h3",tt,n(s.__("Code"))+": "+n(a.code),1),e("div",ot,[e("div",nt,[e("small",null,n(s.__("Total"))+": "+n(s.nsCurrency(a.total)),1)]),e("div",rt,[e("small",null,n(s.__("Status"))+": "+n(a.human_status),1)]),e("div",it,[e("small",null,n(s.__("Delivery"))+": "+n(a.human_delivery_status),1)])])])]),e("td",lt,[e("button",{onClick:W=>s.openOrderOptions(a),class:"rounded-full h-8 px-2 flex items-center justify-center border border-gray ns-inset-button success"},[ut,e("span",at,n(s.__("Options")),1)],8,ct)])]))),128))])])])])],64))]),_:1},8,["label"]),p(y,{identifier:"wallet-history",label:s.__("Wallet History")},{default:f(()=>[r.isLoadingHistory?(i(),l("div",dt,[p(_,{size:"36"})])):c("",!0),r.isLoadingHistory?c("",!0):(i(),l(g,{key:1},[e("div",_t,[e("h2",pt,n(s.__("Wallet History")),1)]),e("div",ht,[e("div",ft,[e("table",mt,[e("thead",null,[e("tr",bt,[e("th",yt,n(s.__("Transaction")),1)])]),e("tbody",xt,[r.walletHistories.length===0?(i(),l("tr",vt,[e("td",gt,n(s.__("No History...")),1)])):c("",!0),(i(!0),l(g,null,k(r.walletHistories,a=>(i(),l("tr",{key:a.id},[e("td",wt,[e("div",Ct,[e("h3",kt,n(s.__("Transaction"))+": "+n(s.getWalletHistoryLabel(a.operation)),1),e("div",St,[e("div",Pt,[e("small",null,n(s.__("Amount"))+": "+n(s.nsCurrency(t.amount)),1)]),e("div",Tt,[e("small",null,n(s.__("Date"))+": "+n(a.created_at),1)])])])])]))),128))])])])])],64))]),_:1},8,["label"]),p(y,{identifier:"coupons",label:s.__("Coupons")},{default:f(()=>[r.isLoadingCoupons?(i(),l("div",Ot,[p(_,{size:"36"})])):c("",!0),r.isLoadingCoupons?c("",!0):(i(),l(g,{key:1},[e("div",Vt,[e("h2",jt,n(s.__("Coupons")),1)]),e("div",Lt,[e("div",Nt,[e("table",qt,[e("thead",null,[e("tr",At,[e("th",Rt,n(s.__("Name")),1),e("th",Ht,n(s.__("Type")),1),Ft])]),e("tbody",Qt,[r.coupons.length===0?(i(),l("tr",Dt,[e("td",Ut,n(s.__("No coupons for the selected customer...")),1)])):c("",!0),(i(!0),l(g,null,k(r.coupons,a=>(i(),l("tr",{key:a.id},[e("td",Wt,[e("h3",null,n(a.name),1),e("div",zt,[e("ul",It,[e("li",Bt,n(s.__("Usage :"))+" "+n(a.usage)+"/"+n(a.limit_usage),1),e("li",Et,n(s.__("Code :"))+" "+n(a.code),1)])])]),e("td",Mt,[w(n(s.getType(a.coupon.type))+" ",1),a.coupon.type==="percentage_discount"?(i(),l("span",Kt," ("+n(a.coupon.discount_value)+"%) ",1)):c("",!0),a.coupon.type==="flat_discount"?(i(),l("span",Yt," ("+n(s.nsCurrency(t.value))+") ",1)):c("",!0)]),e("td",Gt,[p(C,{onClick:W=>s.applyCoupon(a),type:"info"},{default:f(()=>[w(n(s.__("Use Coupon")),1)]),_:2},1032,["onClick"])])]))),128))])])])])],64))]),_:1},8,["label"]),p(y,{identifier:"rewards",label:s.__("Rewards")},{default:f(()=>[r.isLoadingRewards?(i(),l("div",Jt,[p(_,{size:"36"})])):c("",!0),r.isLoadingRewards?c("",!0):(i(),l(g,{key:1},[e("div",Xt,[e("h2",Zt,n(s.__("Rewards")),1)]),e("div",$t,[e("div",eo,[e("table",so,[e("thead",null,[e("tr",to,[e("th",oo,n(s.__("Name")),1),e("th",no,n(s.__("Points")),1),e("th",ro,n(s.__("Target")),1)])]),r.rewardsResponse.data?(i(),l("tbody",io,[r.rewardsResponse.data.length===0?(i(),l("tr",lo,[e("td",co,n(s.__("No rewards available the selected customer...")),1)])):c("",!0),(i(!0),l(g,null,k(r.rewardsResponse.data,a=>(i(),l("tr",{key:a.id},[e("td",uo,[e("h3",ao,n(a.reward_name),1)]),e("td",_o,[e("h3",po,n(a.points),1)]),e("td",ho,[e("h3",fo,n(a.target),1)])]))),128))])):c("",!0)])])]),e("div",mo,[p(V,{pagination:r.rewardsResponse,onLoad:o[4]||(o[4]=a=>s.loadRewards(a))},null,8,["pagination"])])],64))]),_:1},8,["label"])]),_:1},8,["active"])])]),e("div",bo,[yo,e("div",null,[p(C,{onClick:o[6]||(o[6]=a=>s.newTransaction(r.customer)),type:"info"},{default:f(()=>[w(n(s.__("Account Transaction")),1)]),_:1})])])])):c("",!0)]),_:1},8,["label"])]),_:1},8,["active"])])])}const A=O(ts,[["render",xo]]),Nn=Object.freeze(Object.defineProperty({__proto__:null,default:A},Symbol.toStringTag,{value:"Module"})),vo={props:["popup"],data(){return{searchCustomerValue:"",orderSubscription:null,order:{},debounceSearch:null,customers:[],isLoading:!1}},computed:{customerSelected(){return!1}},watch:{searchCustomerValue(t){clearTimeout(this.debounceSearch),this.debounceSearch=setTimeout(()=>{this.searchCustomer(t)},500)}},mounted(){this.orderSubscription=POS.order.subscribe(t=>{this.order=t}),this.getRecentCustomers(),this.$refs.searchField.focus(),this.popupCloser()},unmounted(){this.orderSubscription.unsubscribe()},methods:{__:h,popupCloser:T,nsCurrency:R,resolveIfQueued:j,attemptToChoose(){if(this.customers.length===1)return this.selectCustomer(this.customers[0]);v.info(h("Too many results.")).subscribe()},openCustomerHistory(t,o){o.stopImmediatePropagation(),this.popup.close(),S.show(A,{customer:t,activeTab:"account-payment"})},selectCustomer(t){this.customers.forEach(o=>o.selected=!1),t.selected=!0,this.isLoading=!0,POS.selectCustomer(t).then(o=>{this.isLoading=!1,this.resolveIfQueued(t)}).catch(o=>{this.isLoading=!1})},searchCustomer(t){P.post("/api/customers/search",{search:t}).subscribe(o=>{o.forEach(d=>d.selected=!1),this.customers=o})},createCustomerWithMatch(t){this.resolveIfQueued(!1),S.show(A,{name:t})},getRecentCustomers(){this.isLoading=!0,P.get("/api/customers/recently-active").subscribe({next:t=>{this.isLoading=!1,t.forEach(o=>o.selected=!1),this.customers=t},error:t=>{this.isLoading=!1}})}}},go={id:"ns-pos-customer-select-popup",class:"ns-box shadow-xl w-4/5-screen md:w-2/5-screen xl:w-108"},wo={id:"header",class:"border-b ns-box-header text-center font-semibold text-2xl py-2"},Co={class:"relative"},ko={class:"p-2 border-b ns-box-body items-center flex justify-between"},So={class:"flex items-center justify-between"},Po=e("i",{class:"las la-eye"},null,-1),To=[Po],Oo={class:"p-2 border-b ns-box-body flex justify-between text-primary"},Vo={class:"input-group flex-auto border-2 rounded"},jo={class:"h-3/5-screen xl:h-2/5-screen overflow-y-auto ns-scrollbar"},Lo={class:"ns-vertical-menu"},No={key:0,class:"p-2 text-center text-primary"},qo={class:"border-b border-dashed border-info-primary"},Ao=["onClick"],Ro={class:"flex flex-col"},Ho={class:"text-xs text-secondary"},Fo={class:"flex items-center"},Qo={key:0,class:"text-error-primary"},Do={key:1},Uo={class:"purchase-amount"},Wo=["onClick"],zo=e("i",{class:"las la-eye"},null,-1),Io=[zo],Bo={key:0,class:"z-10 top-0 absolute w-full h-full flex items-center justify-center"};function Eo(t,o,d,b,r,s){const x=m("ns-spinner");return i(),l("div",go,[e("div",wo,[e("h2",null,n(s.__("Select Customer")),1)]),e("div",Co,[e("div",ko,[e("span",null,n(s.__("Selected"))+" : ",1),e("div",So,[e("span",null,n(r.order.customer?`${r.order.customer.first_name} ${r.order.customer.last_name}`:"N/A"),1),r.order.customer?(i(),l("button",{key:0,onClick:o[0]||(o[0]=u=>s.openCustomerHistory(r.order.customer,u)),class:"mx-2 rounded-full h-8 w-8 flex items-center justify-center border ns-inset-button hover:border-transparent"},To)):c("",!0)])]),e("div",Oo,[e("div",Vo,[D(e("input",{ref:"searchField",onKeydown:o[1]||(o[1]=Q(u=>s.attemptToChoose(),["enter"])),"onUpdate:modelValue":o[2]||(o[2]=u=>r.searchCustomerValue=u),placeholder:"Search Customer",type:"text",class:"outline-none w-full p-2"},null,544),[[F,r.searchCustomerValue]])])]),e("div",jo,[e("ul",Lo,[r.customers&&r.customers.length===0?(i(),l("li",No,n(s.__("No customer match your query...")),1)):c("",!0),r.customers&&r.customers.length===0?(i(),l("li",{key:1,onClick:o[3]||(o[3]=u=>s.createCustomerWithMatch(r.searchCustomerValue)),class:"p-2 cursor-pointer text-center text-primary"},[e("span",qo,n(s.__("Create a customer")),1)])):c("",!0),(i(!0),l(g,null,k(r.customers,u=>(i(),l("li",{onClick:y=>s.selectCustomer(u),key:u.id,class:"cursor-pointer p-2 border-b text-primary flex justify-between items-center"},[e("div",Ro,[e("span",null,n(u.first_name)+" "+n(u.last_name),1),e("small",Ho,n(u.group.name),1)]),e("p",Fo,[u.owe_amount>0?(i(),l("span",Qo,"-"+n(s.nsCurrency(u.owe_amount)),1)):c("",!0),u.owe_amount>0?(i(),l("span",Do,"/")):c("",!0),e("span",Uo,n(s.nsCurrency(u.purchases_amount)),1),e("button",{onClick:y=>s.openCustomerHistory(u,y),class:"mx-2 rounded-full h-8 w-8 flex items-center justify-center border ns-inset-button info"},Io,8,Wo)])],8,Ao))),128))])]),r.isLoading?(i(),l("div",Bo,[p(x,{size:"24",border:"8"})])):c("",!0)])])}const U=O(vo,[["render",Eo]]),Mo={name:"ns-pos-discount-popup",props:["popup"],data(){return{finalValue:1,virtualStock:null,popupSubscription:null,mode:"",type:"",allSelected:!0,isLoading:!1,keys:[...[7,8,9].map(t=>({identifier:t,value:t})),...[4,5,6].map(t=>({identifier:t,value:t})),...[1,2,3].map(t=>({identifier:t,value:t})),{identifier:"backspace",icon:"la-backspace"},{identifier:0,value:0},{identifier:"next",icon:"la-share"}]}},mounted(){this.mode=this.popup.params.reference.discount_type||"percentage",this.type=this.popup.params.type,this.mode==="percentage"?this.finalValue=this.popup.params.reference.discount_percentage||1:this.finalValue=this.popup.params.reference.discount||1},methods:{__:h,nsCurrency:R,setPercentageType(t){this.mode=t},closePopup(){this.popup.close()},inputValue(t){t.identifier==="next"?(this.popup.params.onSubmit({discount_type:this.mode,discount_percentage:this.mode==="percentage"?this.finalValue:void 0,discount:this.mode==="flat"?this.finalValue:void 0}),this.popup.close()):t.identifier==="backspace"?this.allSelected?(this.finalValue=0,this.allSelected=!1):(this.finalValue=this.finalValue.toString(),this.finalValue=this.finalValue.substr(0,this.finalValue.length-1)||0):this.allSelected?(this.finalValue=t.value,this.finalValue=parseFloat(this.finalValue),this.allSelected=!1):(this.finalValue+=""+t.value,this.finalValue=parseFloat(this.finalValue),this.mode==="percentage"&&(this.finalValue=this.finalValue>100?100:this.finalValue))}}},Ko={id:"discount-popup",class:"ns-box shadow min-h-2/5-screen w-6/7-screen md:w-3/5-screen lg:w-3/5-screen xl:w-2/5-screen relative"},Yo={class:"flex-shrink-0 flex justify-between items-center p-2 border-b ns-box-header"},Go={key:0,class:"text-xl font-bold text-primary text-center"},Jo={key:1,class:"text-xl font-bold text-primary text-center"},Xo={id:"screen",class:"h-16 ns-box-body text-white flex items-center justify-center"},Zo={class:"font-bold text-3xl"},$o={key:0},en={key:1},sn={id:"switch-mode",class:"flex"},tn=e("hr",{class:"border-r border-box-edge"},null,-1),on={id:"numpad",class:"grid grid-flow-row grid-cols-3 grid-rows-3"},nn=["onClick"],rn={key:0};function ln(t,o,d,b,r,s){const x=m("ns-close-button");return i(),l("div",Ko,[e("div",Yo,[e("div",null,[r.type==="product"?(i(),l("h1",Go,n(s.__("Product Discount")),1)):c("",!0),r.type==="cart"?(i(),l("h1",Jo,n(s.__("Cart Discount")),1)):c("",!0)]),e("div",null,[p(x,{onClick:o[0]||(o[0]=u=>s.closePopup())})])]),e("div",Xo,[e("h1",Zo,[r.mode==="flat"?(i(),l("span",$o,n(s.nsCurrency(r.finalValue)),1)):c("",!0),r.mode==="percentage"?(i(),l("span",en,n(r.finalValue)+"%",1)):c("",!0)])]),e("div",sn,[e("button",{onClick:o[1]||(o[1]=u=>s.setPercentageType("flat")),class:L([r.mode==="flat"?"bg-tab-active":"bg-tab-inactive text-tertiary","outline-none w-1/2 py-2 flex items-center justify-center"])},n(s.__("Flat")),3),tn,e("button",{onClick:o[2]||(o[2]=u=>s.setPercentageType("percentage")),class:L([r.mode==="percentage"?"bg-tab-active":"bg-tab-inactive text-tertiary","outline-none w-1/2 py-2 flex items-center justify-center"])},n(s.__("Percentage")),3)]),e("div",on,[(i(!0),l(g,null,k(r.keys,(u,y)=>(i(),l("div",{onClick:C=>s.inputValue(u),key:y,class:"text-primary ns-numpad-key info text-xl font-bold border h-24 flex items-center justify-center cursor-pointer"},[u.value!==void 0?(i(),l("span",rn,n(u.value),1)):c("",!0),u.icon?(i(),l("i",{key:1,class:L(["las",u.icon])},null,2)):c("",!0)],8,nn))),128))])])}const qn=O(Mo,[["render",ln]]),cn={data(){return{types:[],typeSubscription:null,settingsSubscription:null,urls:{}}},props:["popup"],mounted(){this.settingsSubscription=POS.settings.subscribe(t=>{this.urls=t.urls}),this.typeSubscription=POS.types.subscribe(t=>{this.types=t,Object.values(this.types).length===1&&this.select(Object.keys(this.types)[0])}),this.popupCloser()},unmounted(){this.typeSubscription.unsubscribe()},methods:{__:h,popupCloser:T,popupResolver:j,resolveIfQueued:j,async select(t){Object.values(this.types).forEach(d=>d.selected=!1),this.types[t].selected=!0;const o=this.types[t];try{const d=await POS.triggerOrderTypeSelection(o);POS.types.next(this.types),this.resolveIfQueued(o)}catch{}}}},un={id:"ns-order-type",class:"h-full w-4/5-screen md:w-2/5-screen lg:w-2/5-screen xl:w-2/6-screen shadow-lg"},an={id:"header",class:"h-16 flex justify-center items-center"},dn={class:"font-bold"},_n={key:0,class:"ns-box-body grid grid-flow-row grid-cols-1 grid-rows-1"},pn={class:"h-full w-full flex items-center justify-center flex-col"},hn=e("i",{class:"las la-frown text-7xl text-error-tertiary"},null,-1),fn={class:"p-4 md:w-2/3"},mn={class:"text-center"},bn={class:"flex justify-center mt-4 mb-2 -mx-2"},yn={class:"px-2"},xn={class:"px-2"},vn={key:1,class:"ns-box-body grid grid-flow-row grid-cols-2 grid-rows-2"},gn=["onClick"],wn=["src"],Cn={class:"font-semibold text-xl my-2"};function kn(t,o,d,b,r,s){const x=m("ns-link");return i(),l("div",un,[e("div",an,[e("h3",dn,n(s.__("Define The Order Type")),1)]),Object.values(r.types).length===0?(i(),l("div",_n,[e("div",pn,[hn,e("div",fn,[e("p",mn,n(s.__("No payment type has been selected on the settings. Please check your POS features and choose the supported order type")),1),e("div",bn,[e("div",yn,[p(x,{target:"_blank",type:"info",href:"https://my.nexopos.com/en/documentation/components/order-types"},{default:f(()=>[w(n(s.__("Read More")),1)]),_:1})]),e("div",xn,[p(x,{target:"_blank",type:"info",href:r.urls.order_type_url},{default:f(()=>[w(n(s.__("Configure")),1)]),_:1},8,["href"])])])])])])):c("",!0),Object.values(r.types).length>0?(i(),l("div",vn,[(i(!0),l(g,null,k(r.types,u=>(i(),l("div",{onClick:y=>s.select(u.identifier),key:u.identifier,class:L([u.selected?"active":"","ns-numpad-key info h-56 flex items-center justify-center flex-col cursor-pointer border"])},[e("img",{src:u.icon,alt:"",class:"w-32 h-32"},null,8,wn),e("h4",Cn,n(u.label),1)],10,gn))),128))])):c("",!0)])}const An=O(cn,[["render",kn]]);export{Ln as P,qn as a,An as b,ss as c,Nn as d,U as n}; diff --git a/public/build/assets/ns-pos-pending-orders-button-ByZfFQKc.js b/public/build/assets/ns-pos-pending-orders-button-ByZfFQKc.js deleted file mode 100644 index 48f191809..000000000 --- a/public/build/assets/ns-pos-pending-orders-button-ByZfFQKc.js +++ /dev/null @@ -1 +0,0 @@ -import{v as T,w as $,p as F,d as j,j as S}from"./tax-BACo6kIE.js";import{a as C,n as P}from"./bootstrap-B7E2wy_a.js";import{n as V}from"./ns-prompt-popup-BbWKrSku.js";import{_,n as L}from"./currency-ZXKMLAC0.js";import{_ as g}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as v,o as l,c as i,b as s,j as h,t as n,f as O,g as u,F as y,e as w,w as x,C as A}from"./runtime-core.esm-bundler-DCfIpxDt.js";const N={data(){return{products:[],isLoading:!1}},props:["popup"],computed:{order(){return this.popup.params.order}},mounted(){this.loadProducts()},methods:{__:_,nsCurrency:L,close(){this.popup.params.reject(!1),this.popup.close()},loadProducts(){this.isLoading=!0;const r=this.popup.params.order.id;C.get(`/api/orders/${r}/products`).subscribe(e=>{this.isLoading=!1,this.products=e})},openOrder(){this.popup.close(),this.popup.params.resolve(this.order)}}},B={class:"shadow-lg ns-box w-6/7-screen md:w-3/5-screen lg:w-2/5-screen h-6/7-screen flex flex-col overflow-hidden"},U={class:"p-2 flex justify-between text-primary items-center border-b ns-box-header"},D={class:"font-semibold"},H={key:0},q={class:"flex-auto p-2 overflow-y-auto ns-box-body"},K={key:0,class:"flex-auto relative"},E={class:"h-full w-full flex items-center justify-center"},M={class:"flex-col border-b border-info-primary py-2"},R={class:"title font-semibold text-primary flex justify-between"},Y={class:"text-sm text-primary"},z={class:"flex justify-end p-2 border-t ns-box-footer"},G={class:"px-1"},I={class:"-mx-2 flex"},J={class:"px-1"},Q={class:"px-1"};function W(r,e,a,b,c,t){const d=v("ns-close-button"),p=v("ns-spinner"),f=v("ns-button");return l(),i("div",B,[s("div",U,[s("h3",D,[h(n(t.__("Products"))+" — "+n(t.order.code)+" ",1),t.order.title?(l(),i("span",H,"("+n(t.order.title)+")",1)):O("",!0)]),s("div",null,[u(d,{onClick:e[0]||(e[0]=m=>t.close())})])]),s("div",q,[c.isLoading?(l(),i("div",K,[s("div",E,[u(p)])])):O("",!0),c.isLoading?O("",!0):(l(!0),i(y,{key:1},w(c.products,m=>(l(),i("div",{class:"item",key:m.id},[s("div",M,[s("div",R,[s("span",null,n(m.name)+" (x"+n(m.quantity)+")",1),s("span",null,n(t.nsCurrency(r.price)),1)]),s("div",Y,[s("ul",null,[s("li",null,n(t.__("Unit"))+" : "+n(m.unit.name),1)])])])]))),128))]),s("div",z,[s("div",G,[s("div",I,[s("div",J,[u(f,{onClick:e[1]||(e[1]=m=>t.openOrder()),type:"info"},{default:x(()=>[h(n(t.__("Open")),1)]),_:1})]),s("div",Q,[u(f,{onClick:e[2]||(e[2]=m=>t.close()),type:"error"},{default:x(()=>[h(n(t.__("Close")),1)]),_:1})])])])])])}const X=g(N,[["render",W]]),Z={props:["orders"],data(){return{searchField:"",columns:{rightColumn:[],leftColumn:[]}}},watch:{orders(){this.$nextTick(()=>{P.doAction("ns-pos-pending-orders-refreshed",this.orders.map(r=>({order:r,dom:document.querySelector(`[data-order-id="${r.id}"]`)})))})}},mounted(){this.columns.leftColumn=P.applyFilters("ns-pending-orders-left-column",[{label:_("Code"),value:r=>r.code},{label:_("Cashier"),value:r=>r.user_username},{label:_("Total"),value:r=>r.total},{label:_("Tendered"),value:r=>r.tendered}]),this.columns.rightColumn=P.applyFilters("ns-pending-orders-right-column",[{label:_("Customer"),value:r=>`${r.customer_first_name} ${r.customer_last_name}`},{label:_("Date"),value:r=>r.created_at},{label:_("Type"),value:r=>r.type}])},name:"ns-pos-pending-order",methods:{__:_,previewOrder(r){this.$emit("previewOrder",r)},proceedOpenOrder(r){this.$emit("proceedOpenOrder",r)},searchOrder(){this.$emit("searchOrder",this.searchField)},printOrder(r){this.$emit("printOrder",r)}}},ee={class:"flex flex-auto flex-col overflow-hidden"},se={class:"p-1"},re={class:"flex rounded border-2 input-group info"},te=s("i",{class:"las la-search"},null,-1),oe={class:"mr-1 hidden md:visible"},ne={class:"overflow-y-auto flex flex-auto"},de={class:"flex p-2 flex-auto flex-col overflow-y-auto"},le=["data-order-id"],ie={class:"text-primary"},ae={class:"px-2"},ce={class:"flex flex-wrap -mx-4"},pe={class:"w-full md:w-1/2 px-2"},ue={class:"w-full md:w-1/2 px-2"},_e={class:"flex justify-end w-full mt-2"},fe={class:"flex rounded-lg overflow-hidden ns-buttons"},me=["onClick"],he=s("i",{class:"las la-lock-open"},null,-1),ve=["onClick"],xe=s("i",{class:"las la-eye"},null,-1),be=["onClick"],Oe=s("i",{class:"las la-print"},null,-1),ye={key:0,class:"h-full v-full items-center justify-center flex"},we={class:"text-semibold text-primary"};function ge(r,e,a,b,c,t){return l(),i("div",ee,[s("div",se,[s("div",re,[A(s("input",{onKeyup:e[0]||(e[0]=$(d=>t.searchOrder(),["enter"])),"onUpdate:modelValue":e[1]||(e[1]=d=>c.searchField=d),type:"text",class:"p-2 outline-none flex-auto"},null,544),[[T,c.searchField]]),s("button",{onClick:e[2]||(e[2]=d=>t.searchOrder()),class:"w-16 md:w-24"},[te,s("span",oe,n(t.__("Search")),1)])])]),s("div",ne,[s("div",de,[(l(!0),i(y,null,w(a.orders,d=>(l(),i("div",{"data-order-id":d.id,class:"border-b ns-box-body w-full py-2 ns-order-line",key:d.id},[s("h3",ie,n(d.title||"Untitled Order"),1),s("div",ae,[s("div",ce,[s("div",pe,[(l(!0),i(y,null,w(c.columns.leftColumn,(p,f)=>(l(),i("p",{key:f,class:"text-sm text-primary"},[s("strong",null,n(p.label),1),h(" : "+n(p.value(d)),1)]))),128))]),s("div",ue,[(l(!0),i(y,null,w(c.columns.rightColumn,(p,f)=>(l(),i("p",{key:f,class:"text-sm text-primary"},[s("strong",null,n(p.label),1),h(" : "+n(p.value(d)),1)]))),128))])])]),s("div",_e,[s("div",fe,[s("button",{onClick:p=>t.proceedOpenOrder(d),class:"info outline-none px-2 py-1"},[he,h(" "+n(t.__("Open")),1)],8,me),s("button",{onClick:p=>t.previewOrder(d),class:"success outline-none px-2 py-1"},[xe,h(" "+n(t.__("Products")),1)],8,ve),s("button",{onClick:p=>t.printOrder(d),class:"warning outline-none px-2 py-1"},[Oe,h(" "+n(t.__("Print")),1)],8,be)])])],8,le))),128)),a.orders.length===0?(l(),i("div",ye,[s("h3",we,n(t.__("Nothing to display...")),1)])):O("",!0)])])])}const Pe=g(Z,[["render",ge]]),Ce={props:["popup"],components:{nsPosPendingOrders:Pe},methods:{__:_,popupResolver:F,popupCloser:j,searchOrder(r){C.get(`/api/crud/${this.active}?search=${r}`).subscribe(e=>{this.orders=e.data})},setActiveTab(r){this.active=r,this.loadOrderFromType(r)},openOrder(r){POS.loadOrder(r.id),this.popup.close()},loadOrderFromType(r){C.get(`/api/crud/${r}`).subscribe(e=>{this.orders=e.data})},previewOrder(r){new Promise((a,b)=>{Popup.show(X,{order:r,resolve:a,reject:b})}).then(a=>{this.proceedOpenOrder(r)},a=>a)},printOrder(r){POS.print.process(r.id,"sale")},proceedOpenOrder(r){if(POS.products.getValue().length>0)return Popup.show(V,{title:"Confirm Your Action",message:"The cart is not empty. Opening an order will clear your cart would you proceed ?",onAction:a=>{a&&this.openOrder(r)}});this.openOrder(r)}},data(){return{active:"ns.hold-orders",searchField:"",orders:[]}},mounted(){this.loadOrderFromType(this.active)}},ke={class:"shadow-lg ns-box w-6/7-screen md:w-3/5-screen lg:w-2/5-screen h-6/7-screen flex flex-col overflow-hidden"},Te={class:"p-2 flex justify-between text-primary items-center ns-box-header border-b"},$e={class:"font-semibold"},Fe={class:"p-2 flex overflow-hidden flex-auto ns-box-body"},je={class:"p-2 flex justify-between ns-box-footer border-t"},Se=s("div",null,null,-1);function Ve(r,e,a,b,c,t){const d=v("ns-close-button"),p=v("ns-pos-pending-orders"),f=v("ns-tabs-item"),m=v("ns-tabs"),k=v("ns-button");return l(),i("div",ke,[s("div",Te,[s("h3",$e,n(t.__("Orders")),1),s("div",null,[u(d,{onClick:e[0]||(e[0]=o=>a.popup.close())})])]),s("div",Fe,[u(m,{active:c.active,onChangeTab:e[13]||(e[13]=o=>t.setActiveTab(o))},{default:x(()=>[u(f,{identifier:"ns.hold-orders",label:t.__("On Hold"),padding:"p-0",class:"flex flex-col overflow-hidden"},{default:x(()=>[u(p,{orders:c.orders,onSearchOrder:e[1]||(e[1]=o=>t.searchOrder(o)),onPreviewOrder:e[2]||(e[2]=o=>t.previewOrder(o)),onPrintOrder:e[3]||(e[3]=o=>t.printOrder(o)),onProceedOpenOrder:e[4]||(e[4]=o=>t.proceedOpenOrder(o))},null,8,["orders"])]),_:1},8,["label"]),u(f,{identifier:"ns.unpaid-orders",label:t.__("Unpaid"),padding:"p-0",class:"flex flex-col overflow-hidden"},{default:x(()=>[u(p,{orders:c.orders,onSearchOrder:e[5]||(e[5]=o=>t.searchOrder(o)),onPreviewOrder:e[6]||(e[6]=o=>t.previewOrder(o)),onPrintOrder:e[7]||(e[7]=o=>t.printOrder(o)),onProceedOpenOrder:e[8]||(e[8]=o=>t.proceedOpenOrder(o))},null,8,["orders"])]),_:1},8,["label"]),u(f,{identifier:"ns.partially-paid-orders",label:t.__("Partially Paid"),padding:"p-0",class:"flex flex-col overflow-hidden"},{default:x(()=>[u(p,{orders:c.orders,onSearchOrder:e[9]||(e[9]=o=>t.searchOrder(o)),onPreviewOrder:e[10]||(e[10]=o=>t.previewOrder(o)),onPrintOrder:e[11]||(e[11]=o=>t.printOrder(o)),onProceedOpenOrder:e[12]||(e[12]=o=>t.proceedOpenOrder(o))},null,8,["orders"])]),_:1},8,["label"])]),_:1},8,["active"])]),s("div",je,[Se,s("div",null,[u(k,{onClick:e[14]||(e[14]=o=>a.popup.close()),type:"info"},{default:x(()=>[h(n(t.__("Close")),1)]),_:1})])])])}const Le=g(Ce,[["render",Ve]]),Ae={name:"ns-pos-pending-orders-button",methods:{__:_,openPendingOrdersPopup(){S.show(Le)}}},Ne={class:"ns-button default"},Be=s("i",{class:"mr-1 text-xl lar la-hand-pointer"},null,-1);function Ue(r,e,a,b,c,t){return l(),i("div",Ne,[s("button",{onClick:e[0]||(e[0]=d=>t.openPendingOrdersPopup()),class:"rounded shadow flex-shrink-0 h-12 flex items-center px-2 py-1 text-sm"},[Be,s("span",null,n(t.__("Orders")),1)])])}const Re=g(Ae,[["render",Ue]]);export{Re as default}; diff --git a/public/build/assets/ns-pos-pending-orders-button-HNqyLo8k.js b/public/build/assets/ns-pos-pending-orders-button-HNqyLo8k.js new file mode 100644 index 000000000..630475bf8 --- /dev/null +++ b/public/build/assets/ns-pos-pending-orders-button-HNqyLo8k.js @@ -0,0 +1 @@ +import{a as C,n as P,g as k,v as $,w as F,p as j,P as S}from"./bootstrap-Bpe5LRJd.js";import{n as V}from"./ns-prompt-popup-C2dK5WQb.js";import{_,n as L}from"./currency-lOMYG1Wf.js";import{_ as g}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as v,o as l,c as i,a as s,i as h,t as n,e as O,f as u,F as y,b as w,w as x,B as A}from"./runtime-core.esm-bundler-RT2b-_3S.js";const B={data(){return{products:[],isLoading:!1}},props:["popup"],computed:{order(){return this.popup.params.order}},mounted(){this.loadProducts()},methods:{__:_,nsCurrency:L,close(){this.popup.params.reject(!1),this.popup.close()},loadProducts(){this.isLoading=!0;const r=this.popup.params.order.id;C.get(`/api/orders/${r}/products`).subscribe(e=>{this.isLoading=!1,this.products=e})},openOrder(){this.popup.close(),this.popup.params.resolve(this.order)}}},N={class:"shadow-lg ns-box w-6/7-screen md:w-3/5-screen lg:w-2/5-screen h-6/7-screen flex flex-col overflow-hidden"},U={class:"p-2 flex justify-between text-primary items-center border-b ns-box-header"},D={class:"font-semibold"},H={key:0},q={class:"flex-auto p-2 overflow-y-auto ns-box-body"},K={key:0,class:"flex-auto relative"},E={class:"h-full w-full flex items-center justify-center"},M={class:"flex-col border-b border-info-primary py-2"},R={class:"title font-semibold text-primary flex justify-between"},Y={class:"text-sm text-primary"},z={class:"flex justify-end p-2 border-t ns-box-footer"},G={class:"px-1"},I={class:"-mx-2 flex"},J={class:"px-1"},Q={class:"px-1"};function W(r,e,a,b,p,t){const d=v("ns-close-button"),c=v("ns-spinner"),f=v("ns-button");return l(),i("div",N,[s("div",U,[s("h3",D,[h(n(t.__("Products"))+" — "+n(t.order.code)+" ",1),t.order.title?(l(),i("span",H,"("+n(t.order.title)+")",1)):O("",!0)]),s("div",null,[u(d,{onClick:e[0]||(e[0]=m=>t.close())})])]),s("div",q,[p.isLoading?(l(),i("div",K,[s("div",E,[u(c)])])):O("",!0),p.isLoading?O("",!0):(l(!0),i(y,{key:1},w(p.products,m=>(l(),i("div",{class:"item",key:m.id},[s("div",M,[s("div",R,[s("span",null,n(m.name)+" (x"+n(m.quantity)+")",1),s("span",null,n(t.nsCurrency(r.price)),1)]),s("div",Y,[s("ul",null,[s("li",null,n(t.__("Unit"))+" : "+n(m.unit.name),1)])])])]))),128))]),s("div",z,[s("div",G,[s("div",I,[s("div",J,[u(f,{onClick:e[1]||(e[1]=m=>t.openOrder()),type:"info"},{default:x(()=>[h(n(t.__("Open")),1)]),_:1})]),s("div",Q,[u(f,{onClick:e[2]||(e[2]=m=>t.close()),type:"error"},{default:x(()=>[h(n(t.__("Close")),1)]),_:1})])])])])])}const X=g(B,[["render",W]]),Z={props:["orders"],data(){return{searchField:"",columns:{rightColumn:[],leftColumn:[]}}},watch:{orders(){this.$nextTick(()=>{P.doAction("ns-pos-pending-orders-refreshed",this.orders.map(r=>({order:r,dom:document.querySelector(`[data-order-id="${r.id}"]`)})))})}},mounted(){this.columns.leftColumn=P.applyFilters("ns-pending-orders-left-column",[{label:_("Code"),value:r=>r.code},{label:_("Cashier"),value:r=>r.user_username},{label:_("Total"),value:r=>r.total},{label:_("Tendered"),value:r=>r.tendered}]),this.columns.rightColumn=P.applyFilters("ns-pending-orders-right-column",[{label:_("Customer"),value:r=>`${r.customer_first_name} ${r.customer_last_name}`},{label:_("Date"),value:r=>r.created_at},{label:_("Type"),value:r=>r.type}]),this.popupCloser()},name:"ns-pos-pending-order",methods:{__:_,popupCloser:k,previewOrder(r){this.$emit("previewOrder",r)},proceedOpenOrder(r){this.$emit("proceedOpenOrder",r)},searchOrder(){this.$emit("searchOrder",this.searchField)},printOrder(r){this.$emit("printOrder",r)}}},ee={class:"flex flex-auto flex-col overflow-hidden"},se={class:"p-1"},re={class:"flex rounded border-2 input-group info"},te=s("i",{class:"las la-search"},null,-1),oe={class:"mr-1 hidden md:visible"},ne={class:"overflow-y-auto flex flex-auto"},de={class:"flex p-2 flex-auto flex-col overflow-y-auto"},le=["data-order-id"],ie={class:"text-primary"},ae={class:"px-2"},pe={class:"flex flex-wrap -mx-4"},ce={class:"w-full md:w-1/2 px-2"},ue={class:"w-full md:w-1/2 px-2"},_e={class:"flex justify-end w-full mt-2"},fe={class:"flex rounded-lg overflow-hidden ns-buttons"},me=["onClick"],he=s("i",{class:"las la-lock-open"},null,-1),ve=["onClick"],xe=s("i",{class:"las la-eye"},null,-1),be=["onClick"],Oe=s("i",{class:"las la-print"},null,-1),ye={key:0,class:"h-full v-full items-center justify-center flex"},we={class:"text-semibold text-primary"};function ge(r,e,a,b,p,t){return l(),i("div",ee,[s("div",se,[s("div",re,[A(s("input",{onKeyup:e[0]||(e[0]=F(d=>t.searchOrder(),["enter"])),"onUpdate:modelValue":e[1]||(e[1]=d=>p.searchField=d),type:"text",class:"p-2 outline-none flex-auto"},null,544),[[$,p.searchField]]),s("button",{onClick:e[2]||(e[2]=d=>t.searchOrder()),class:"w-16 md:w-24"},[te,s("span",oe,n(t.__("Search")),1)])])]),s("div",ne,[s("div",de,[(l(!0),i(y,null,w(a.orders,d=>(l(),i("div",{"data-order-id":d.id,class:"border-b ns-box-body w-full py-2 ns-order-line",key:d.id},[s("h3",ie,n(d.title||"Untitled Order"),1),s("div",ae,[s("div",pe,[s("div",ce,[(l(!0),i(y,null,w(p.columns.leftColumn,(c,f)=>(l(),i("p",{key:f,class:"text-sm text-primary"},[s("strong",null,n(c.label),1),h(" : "+n(c.value(d)),1)]))),128))]),s("div",ue,[(l(!0),i(y,null,w(p.columns.rightColumn,(c,f)=>(l(),i("p",{key:f,class:"text-sm text-primary"},[s("strong",null,n(c.label),1),h(" : "+n(c.value(d)),1)]))),128))])])]),s("div",_e,[s("div",fe,[s("button",{onClick:c=>t.proceedOpenOrder(d),class:"info outline-none px-2 py-1"},[he,h(" "+n(t.__("Open")),1)],8,me),s("button",{onClick:c=>t.previewOrder(d),class:"success outline-none px-2 py-1"},[xe,h(" "+n(t.__("Products")),1)],8,ve),s("button",{onClick:c=>t.printOrder(d),class:"warning outline-none px-2 py-1"},[Oe,h(" "+n(t.__("Print")),1)],8,be)])])],8,le))),128)),a.orders.length===0?(l(),i("div",ye,[s("h3",we,n(t.__("Nothing to display...")),1)])):O("",!0)])])])}const Pe=g(Z,[["render",ge]]),Ce={props:["popup"],components:{nsPosPendingOrders:Pe},methods:{__:_,popupResolver:j,popupCloser:k,searchOrder(r){C.get(`/api/crud/${this.active}?search=${r}`).subscribe(e=>{this.orders=e.data})},setActiveTab(r){this.active=r,this.loadOrderFromType(r)},openOrder(r){POS.loadOrder(r.id),this.popup.close()},loadOrderFromType(r){C.get(`/api/crud/${r}`).subscribe(e=>{this.orders=e.data})},previewOrder(r){new Promise((a,b)=>{Popup.show(X,{order:r,resolve:a,reject:b})}).then(a=>{this.proceedOpenOrder(r)},a=>a)},printOrder(r){POS.print.process(r.id,"sale")},proceedOpenOrder(r){if(POS.products.getValue().length>0)return Popup.show(V,{title:"Confirm Your Action",message:"The cart is not empty. Opening an order will clear your cart would you proceed ?",onAction:a=>{a&&this.openOrder(r)}});this.openOrder(r)}},data(){return{active:"ns.hold-orders",searchField:"",orders:[]}},mounted(){this.loadOrderFromType(this.active),this.popupCloser()}},ke={class:"shadow-lg ns-box w-6/7-screen md:w-3/5-screen lg:w-2/5-screen h-6/7-screen flex flex-col overflow-hidden"},Te={class:"p-2 flex justify-between text-primary items-center ns-box-header border-b"},$e={class:"font-semibold"},Fe={class:"p-2 flex overflow-hidden flex-auto ns-box-body"},je={class:"p-2 flex justify-between ns-box-footer border-t"},Se=s("div",null,null,-1);function Ve(r,e,a,b,p,t){const d=v("ns-close-button"),c=v("ns-pos-pending-orders"),f=v("ns-tabs-item"),m=v("ns-tabs"),T=v("ns-button");return l(),i("div",ke,[s("div",Te,[s("h3",$e,n(t.__("Orders")),1),s("div",null,[u(d,{onClick:e[0]||(e[0]=o=>a.popup.close())})])]),s("div",Fe,[u(m,{active:p.active,onChangeTab:e[13]||(e[13]=o=>t.setActiveTab(o))},{default:x(()=>[u(f,{identifier:"ns.hold-orders",label:t.__("On Hold"),padding:"p-0",class:"flex flex-col overflow-hidden"},{default:x(()=>[u(c,{orders:p.orders,onSearchOrder:e[1]||(e[1]=o=>t.searchOrder(o)),onPreviewOrder:e[2]||(e[2]=o=>t.previewOrder(o)),onPrintOrder:e[3]||(e[3]=o=>t.printOrder(o)),onProceedOpenOrder:e[4]||(e[4]=o=>t.proceedOpenOrder(o))},null,8,["orders"])]),_:1},8,["label"]),u(f,{identifier:"ns.unpaid-orders",label:t.__("Unpaid"),padding:"p-0",class:"flex flex-col overflow-hidden"},{default:x(()=>[u(c,{orders:p.orders,onSearchOrder:e[5]||(e[5]=o=>t.searchOrder(o)),onPreviewOrder:e[6]||(e[6]=o=>t.previewOrder(o)),onPrintOrder:e[7]||(e[7]=o=>t.printOrder(o)),onProceedOpenOrder:e[8]||(e[8]=o=>t.proceedOpenOrder(o))},null,8,["orders"])]),_:1},8,["label"]),u(f,{identifier:"ns.partially-paid-orders",label:t.__("Partially Paid"),padding:"p-0",class:"flex flex-col overflow-hidden"},{default:x(()=>[u(c,{orders:p.orders,onSearchOrder:e[9]||(e[9]=o=>t.searchOrder(o)),onPreviewOrder:e[10]||(e[10]=o=>t.previewOrder(o)),onPrintOrder:e[11]||(e[11]=o=>t.printOrder(o)),onProceedOpenOrder:e[12]||(e[12]=o=>t.proceedOpenOrder(o))},null,8,["orders"])]),_:1},8,["label"])]),_:1},8,["active"])]),s("div",je,[Se,s("div",null,[u(T,{onClick:e[14]||(e[14]=o=>a.popup.close()),type:"info"},{default:x(()=>[h(n(t.__("Close")),1)]),_:1})])])])}const Le=g(Ce,[["render",Ve]]),Ae={name:"ns-pos-pending-orders-button",methods:{__:_,openPendingOrdersPopup(){S.show(Le)}}},Be={class:"ns-button default"},Ne=s("i",{class:"mr-1 text-xl lar la-hand-pointer"},null,-1);function Ue(r,e,a,b,p,t){return l(),i("div",Be,[s("button",{onClick:e[0]||(e[0]=d=>t.openPendingOrdersPopup()),class:"rounded shadow flex-shrink-0 h-12 flex items-center px-2 py-1 text-sm"},[Ne,s("span",null,n(t.__("Orders")),1)])])}const Me=g(Ae,[["render",Ue]]);export{Me as default}; diff --git a/public/build/assets/ns-pos-registers-button-2EMJ8009.js b/public/build/assets/ns-pos-registers-button-2EMJ8009.js new file mode 100644 index 000000000..3df936d30 --- /dev/null +++ b/public/build/assets/ns-pos-registers-button-2EMJ8009.js @@ -0,0 +1 @@ +import{F as O,g as j,p as C,b as y,a as w}from"./bootstrap-Bpe5LRJd.js";import{n as $,a as B}from"./ns-prompt-popup-C2dK5WQb.js";import{n as k,_ as p}from"./currency-lOMYG1Wf.js";import{_ as m}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as _,o as c,c as a,a as s,t as n,f,e as d,F as v,b as S,g as I,n as R,i as F}from"./runtime-core.esm-bundler-RT2b-_3S.js";const H={components:{},props:["popup"],data(){return{amount:0,title:null,identifier:null,settingsSubscription:null,settings:null,action:null,register:null,loaded:!1,register_id:null,validation:new O,fields:[],isSubmitting:!1}},mounted(){this.title=this.popup.params.title,this.identifier=this.popup.params.identifier,this.register=this.popup.params.register,this.action=this.popup.params.action,this.register_id=this.popup.params.register_id,this.settingsSubscription=POS.settings.subscribe(t=>{this.settings=t}),this.loadFields(),this.popupCloser()},unmounted(){this.settingsSubscription.unsubscribe()},methods:{popupCloser:j,nsCurrency:k,__:p,definedValue(t){this.amount=t},close(){this.popup.close()},loadFields(){this.loaded=!1,nsHttpClient.get(`/api/fields/${this.identifier}`).subscribe(t=>{this.loaded=!0,this.fields=t},t=>(this.loaded=!0,nsSnackBar.error(t.message,"OKAY",{duration:!1}).subscribe()))},submit(t){Popup.show($,{title:"Confirm Your Action",message:this.popup.params.confirmMessage||"Would you like to confirm your action.",onAction:e=>{e&&this.triggerSubmit()}})},triggerSubmit(){if(this.isSubmitting)return;this.isSubmitting=!0;const t=this.validation.extractFields(this.fields);t.amount=this.amount===""?0:this.amount,nsHttpClient.post(`/api/cash-registers/${this.action}/${this.register_id||this.settings.register.id}`,t).subscribe({next:e=>{this.popup.params.resolve(e),this.popup.close(),nsSnackBar.success(e.message).subscribe(),this.isSubmitting=!1},error:e=>{nsSnackBar.error(e.message).subscribe(),this.isSubmitting=!1}})}}},N={key:0,class:"shadow-lg w-95vw md:w-3/5-screen ns-box"},L={class:"border-b ns-box-header p-2 text-primary flex justify-between items-center"},A={class:"font-semibold"},z={class:"p-2"},D={key:0,class:"mb-2 p-3 elevation-surface font-bold border text-right flex justify-between"},Q={class:"mb-2 p-3 elevation-surface success border font-bold text-right flex justify-between"},T={class:"flex flex-col md:flex-row md:-mx-2"},U={class:"md:px-2 md:w-1/2 w-full"},E={class:"md:px-2 md:w-1/2 w-full"},Y={key:1,class:"h-full w-full flex items-center justify-center"};function q(t,e,o,u,r,i){const h=_("ns-close-button"),l=_("ns-numpad"),g=_("ns-field"),P=_("ns-spinner");return c(),a("div",null,[r.loaded?(c(),a("div",N,[s("div",L,[s("h3",A,n(r.title),1),s("div",null,[f(h,{onClick:e[0]||(e[0]=b=>i.close())})])]),s("div",z,[s("div",null,[r.register!==null?(c(),a("div",D,[s("span",null,n(i.__("Balance")),1),s("span",null,n(i.nsCurrency(r.register.balance)),1)])):d("",!0),s("div",Q,[s("span",null,n(i.__("Input")),1),s("span",null,n(i.nsCurrency(r.amount)),1)])]),s("div",T,[s("div",U,[f(l,{floating:!0,onNext:e[1]||(e[1]=b=>i.submit(b)),value:r.amount,onChanged:e[2]||(e[2]=b=>i.definedValue(b))},null,8,["value"])]),s("div",E,[(c(!0),a(v,null,S(r.fields,(b,V)=>(c(),I(g,{field:b,key:V},null,8,["field"]))),128))])])])])):d("",!0),r.loaded?d("",!0):(c(),a("div",Y,[f(P)]))])}const x=m(H,[["render",q]]),K={name:"ns-pos-cash-registers-popup",props:["popup"],components:{nsNumpad:B},data(){return{registers:[],priorVerification:!1,hasLoadedRegisters:!1,validation:new O,amount:0,settings:null,settingsSubscription:null}},mounted(){this.checkUsedRegister(),this.settingsSubscription=POS.settings.subscribe(t=>{this.settings=t})},beforeDestroy(){this.settingsSubscription.unsubscribe()},computed:{},methods:{__:p,popupResolver:C,async selectRegister(t){if(t.status!=="closed")return y.error(p("Unable to open this register. Only closed register can be opened.")).subscribe();try{const e=await new Promise((o,u)=>{const r=p("Open Register : %s").replace("%s",t.name),i="open",h=t.id;Popup.show(x,{resolve:o,reject:u,title:r,identifier:"ns.cash-registers-opening",register:t,action:i,register_id:h})});this.popupResolver(e)}catch(e){this.popup.reject(e)}},checkUsedRegister(){this.priorVerification=!1,w.get("/api/cash-registers/used").subscribe({next:t=>{this.popup.params.resolve(t),this.popup.close()},error:t=>{this.priorVerification=!0,y.error(t.message).subscribe(),this.loadRegisters()}})},loadRegisters(){this.hasLoadedRegisters=!1,w.get("/api/cash-registers").subscribe(t=>{this.registers=t,this.hasLoadedRegisters=!0})},getClass(t){switch(t.status){case"in-use":return"elevation-surface warning cursor-not-allowed";case"disabled":return"elevation-surface cursor-not-allowed";case"available":return"elevation-surface success"}return"elevation-surface hoverable cursor-pointer"}}},M={key:0,class:"h-full w-full py-10 flex justify-center items-center"},W={class:"title p-2 border-b ns-box-header flex justify-between items-center"},G={class:"font-semibold"},J={key:0},X=["href"],Z={key:0,class:"py-10 flex-auto overflow-y-auto flex items-center justify-center"},ee={key:1,class:"flex-auto overflow-y-auto"},se={class:"grid grid-cols-3"},te=["onClick"],ie=s("i",{class:"las la-cash-register text-6xl"},null,-1),re={class:"text-semibold text-center"},ne={class:"text-sm"},oe={key:0,class:"p-2 alert text-white"},le=["href"];function ce(t,e,o,u,r,i){const h=_("ns-spinner");return c(),a("div",null,[r.priorVerification===!1?(c(),a("div",M,[f(h,{size:"24",border:"8"})])):d("",!0),r.priorVerification?(c(),a("div",{key:1,id:"ns-pos-cash-registers-popup",class:R(["w-95vw md:w-3/5-screen lg:w-3/5-screen xl:w-2/5-screen flex flex-col overflow-hidden",r.priorVerification?"shadow-lg ns-box":""])},[s("div",W,[s("h3",G,n(i.__("Open The Register")),1),r.settings?(c(),a("div",J,[s("a",{href:r.settings.urls.orders_url,class:"rounded-full border ns-close-button px-3 text-sm py-1"},n(i.__("Exit To Orders")),9,X)])):d("",!0)]),r.hasLoadedRegisters?d("",!0):(c(),a("div",Z,[f(h,{size:"16",border:"4"})])),r.hasLoadedRegisters?(c(),a("div",ee,[s("div",se,[(c(!0),a(v,null,S(r.registers,(l,g)=>(c(),a("div",{onClick:P=>i.selectRegister(l),class:R([i.getClass(l),"border flex items-center justify-center flex-col p-3"]),key:g},[ie,s("h3",re,n(l.name),1),s("span",ne,"("+n(l.status_label)+")",1)],10,te))),128))]),r.registers.length===0?(c(),a("div",oe,[F(n(i.__("Looks like there is no registers. At least one register is required to proceed."))+" — ",1),s("a",{class:"font-bold hover:underline",href:r.settings.urls.registers_url},n(i.__("Create Cash Register")),9,le)])):d("",!0)])):d("",!0)],2)):d("",!0)])}const ae=m(K,[["render",ce]]),ue={props:["popup"],data(){return{totalIn:0,totalOut:0,settings:null,settingsSubscription:null,histories:[]}},mounted(){this.settingsSubscription=POS.settings.subscribe(t=>{this.settings=t}),this.getHistory()},unmounted(){this.settingsSubscription.unsubscribe()},methods:{__:p,nsCurrency:k,popupResolver:C,closePopup(){this.popupResolver({status:"success"})},getHistory(){w.get(`/api/cash-registers/session-history/${this.settings.register.id}`).subscribe(t=>{this.histories=t,this.totalIn=this.histories.filter(e=>["register-opening","register-sale","register-cash-in"].includes(e.action)).map(e=>parseFloat(e.value)).reduce((e,o)=>e+o,0),this.totalOut=this.histories.filter(e=>["register-closing","register-refund","register-cash-out"].includes(e.action)).map(e=>parseFloat(e.value)).reduce((e,o)=>e+o,0)})}}},de={class:"ns-box shadow-lg w-95vw md:w-4/6-screen lg:w-half overflow-hidden"},pe={id:"header",class:"p-2 flex justify-between items-center ns-box-header"},he={class:"font-bold"},ge={class:"flex w-full ns-box-body"},_e={class:"flex flex-auto"},fe={class:"w-full md:w-1/2 text-right bg-success-secondary text-white font-bold text-3xl p-3"},be={class:"w-full md:w-1/2 text-right bg-error-secondary text-white font-bold text-3xl p-3"},me={class:"flex flex-col overflow-y-auto h-120"},xe={class:"p-2 flex-auto"},ve={class:"flex-auto text-right p-2"},ye={class:"p-2 flex-auto"},we={class:"flex-auto text-right p-2"},Ce={class:"p-2 flex-auto"},ke={class:"flex-auto text-right p-2"},Se={class:"p-2 flex-auto"},Pe={class:"flex-auto text-right p-2"};function Re(t,e,o,u,r,i){const h=_("ns-close-button");return c(),a("div",de,[s("div",pe,[s("h3",he,n(i.__("Register History")),1),s("div",null,[f(h,{onClick:i.closePopup},null,8,["onClick"])])]),s("div",ge,[s("div",_e,[s("div",fe,n(i.nsCurrency(r.totalIn)),1),s("div",be,n(i.nsCurrency(r.totalOut)),1)])]),s("div",me,[(c(!0),a(v,null,S(r.histories,l=>(c(),a(v,null,[["register-sale","register-cash-in"].includes(l.action)?(c(),a("div",{key:l.id,class:"flex border-b elevation-surface success"},[s("div",xe,n(l.label),1),s("div",ve,n(i.nsCurrency(l.value)),1)])):d("",!0),["register-opening"].includes(l.action)?(c(),a("div",{key:l.id,class:"flex border-b elevation-surface"},[s("div",ye,n(l.label),1),s("div",we,n(i.nsCurrency(l.value)),1)])):d("",!0),["register-close"].includes(l.action)?(c(),a("div",{key:l.id,class:"flex border-b elevation-surface info"},[s("div",Ce,n(l.label),1),s("div",ke,n(i.nsCurrency(l.value)),1)])):d("",!0),["register-refund","register-cash-out"].includes(l.action)?(c(),a("div",{key:l.id,class:"flex border-b elevation-surface error"},[s("div",Se,n(l.label),1),s("div",Pe,n(i.nsCurrency(l.value)),1)])):d("",!0)],64))),256))])])}const Oe=m(ue,[["render",Re]]),je={props:["popup"],mounted(){this.settingsSubscriber=POS.settings.subscribe(t=>{this.settings=t}),this.popupCloser(),this.loadRegisterSummary()},beforeDestroy(){this.settingsSubscriber.unsubscribe()},data(){return{settings:null,settingsSubscriber:null,register:{}}},methods:{__:p,nsCurrency:k,popupResolver:C,popupCloser:j,loadRegisterSummary(){nsHttpClient.get(`/api/cash-registers/${this.settings.register.id}`).subscribe(t=>{this.register=t})},closePopup(){this.popupResolver({status:"failed",button:"close_popup"})},async closeCashRegister(t){try{const e=await new Promise((o,u)=>{Popup.show(x,{title:p("Close Register"),action:"close",identifier:"ns.cash-registers-closing",register:t,resolve:o,reject:u})});POS.unset("register"),this.popupResolver({button:"close_register",...e})}catch(e){throw e}},async cashIn(t){try{const e=await new Promise((o,u)=>{Popup.show(x,{title:p("Cash In"),action:"register-cash-in",register:t,identifier:"ns.cash-registers-cashing",resolve:o,reject:u})});this.popupResolver({button:"close_register",...e})}catch(e){console.log({exception:e})}},async cashOut(t){try{const e=await new Promise((o,u)=>{Popup.show(x,{title:p("Cash Out"),action:"register-cash-out",register:t,identifier:"ns.cash-registers-cashout",resolve:o,reject:u})});this.popupResolver({button:"close_register",...e})}catch(e){throw e}},async historyPopup(t){try{const e=await new Promise((o,u)=>{Popup.show(Oe,{resolve:o,reject:u,register:t})})}catch(e){throw e}}}},Ve={class:"shadow-lg w-95vw md:w-3/5-screen lg:w-2/4-screen ns-box"},$e={class:"p-2 border-b ns-box-header flex items-center justify-between"},Be={key:0},Ie={class:"h-16 text-3xl elevation-surface info flex items-center justify-between px-3"},Fe={class:""},He={class:"font-bold"},Ne={class:"h-16 text-3xl elevation-surface success flex items-center justify-between px-3"},Le={class:""},Ae={class:"font-bold"},ze={key:1,class:"h-32 ns-box-body border-b py-1 flex items-center justify-center"},De={class:"grid grid-cols-2 text-primary"},Qe=s("i",{class:"las la-sign-out-alt text-6xl"},null,-1),Te={class:"text-xl font-bold"},Ue=s("i",{class:"las la-plus-circle text-6xl"},null,-1),Ee={class:"text-xl font-bold"},Ye=s("i",{class:"las la-minus-circle text-6xl"},null,-1),qe={class:"text-xl font-bold"},Ke=s("i",{class:"las la-history text-6xl"},null,-1),Me={class:"text-xl font-bold"};function We(t,e,o,u,r,i){const h=_("ns-close-button"),l=_("ns-spinner");return c(),a("div",Ve,[s("div",$e,[s("h3",null,n(i.__("Register Options")),1),s("div",null,[f(h,{onClick:e[0]||(e[0]=g=>i.closePopup())})])]),r.register.total_sale_amount!==void 0&&r.register.balance!==void 0?(c(),a("div",Be,[s("div",Ie,[s("span",Fe,n(i.__("Sales")),1),s("span",He,n(i.nsCurrency(r.register.total_sale_amount)),1)]),s("div",Ne,[s("span",Le,n(i.__("Balance")),1),s("span",Ae,n(i.nsCurrency(r.register.balance)),1)])])):d("",!0),r.register.total_sale_amount===void 0&&r.register.balance===void 0?(c(),a("div",ze,[s("div",null,[f(l,{border:"4",size:"16"})])])):d("",!0),s("div",De,[s("div",{onClick:e[1]||(e[1]=g=>i.closeCashRegister(r.register)),class:"border-r border-b py-4 ns-numpad-key info cursor-pointer px-2 flex items-center justify-center flex-col"},[Qe,s("h3",Te,n(i.__("Close")),1)]),s("div",{onClick:e[2]||(e[2]=g=>i.cashIn(r.register)),class:"ns-numpad-key success border-r border-b py-4 cursor-pointer px-2 flex items-center justify-center flex-col"},[Ue,s("h3",Ee,n(i.__("Cash In")),1)]),s("div",{onClick:e[3]||(e[3]=g=>i.cashOut(r.register)),class:"ns-numpad-key error border-r border-b py-4 cursor-pointer px-2 flex items-center justify-center flex-col"},[Ye,s("h3",qe,n(i.__("Cash Out")),1)]),s("div",{onClick:e[4]||(e[4]=g=>i.historyPopup(r.register)),class:"ns-numpad-key info border-r border-b py-4 cursor-pointer px-2 flex items-center justify-center flex-col"},[Ke,s("h3",Me,n(i.__("History")),1)])])])}const Ge=m(je,[["render",We]]),Je={data(){return{order:null,name:"",selectedRegister:null,orderSubscriber:null,settingsSubscriber:null}},watch:{},methods:{__:p,async openRegisterOptions(){try{(await new Promise((e,o)=>{Popup.show(Ge,{resolve:e,reject:o})})).button==="close_register"&&(delete this.settings.register,POS.settings.next(this.settings),POS.reset())}catch(t){Object.keys(t).length>0&&y.error(t.message).subscribe()}},registerInitialQueue(){POS.initialQueue.push(()=>new Promise(async(t,e)=>{try{const o=await new Promise((u,r)=>{if(this.settings.register===void 0)return Popup.show(ae,{resolve:u,reject:r});u({data:{register:this.settings.register}})});POS.set("register",o.data.register),this.setRegister(o.data.register),t(o)}catch(o){e(o)}}))},setButtonName(){if(this.settings.register===void 0)return this.name=p("Cash Register");this.name=p("Cash Register : {register}").replace("{register}",this.settings.register.name)},setRegister(t){if(t!==void 0){const e=POS.order.getValue();e.register_id=t.id,POS.order.next(e)}}},unmounted(){this.orderSubscriber.unsubscribe(),this.settingsSubscriber.unsubscribe()},mounted(){this.registerInitialQueue(),this.orderSubscriber=POS.order.subscribe(t=>{this.order=t}),this.settingsSubscriber=POS.settings.subscribe(t=>{this.settings=t,this.setRegister(this.settings.register),this.setButtonName()})}},Xe={class:"ns-button default"},Ze=s("i",{class:"mr-1 text-xl las la-cash-register"},null,-1);function es(t,e,o,u,r,i){return c(),a("div",Xe,[s("button",{onClick:e[0]||(e[0]=h=>i.openRegisterOptions()),class:"rounded shadow flex-shrink-0 h-12 flex items-center px-2 py-1 text-sm"},[Ze,s("span",null,n(r.name),1)])])}const os=m(Je,[["render",es]]);export{os as default}; diff --git a/public/build/assets/ns-pos-registers-button-Dp9axoWc.js b/public/build/assets/ns-pos-registers-button-Dp9axoWc.js deleted file mode 100644 index 2ddf86468..000000000 --- a/public/build/assets/ns-pos-registers-button-Dp9axoWc.js +++ /dev/null @@ -1 +0,0 @@ -import{b as y,a as w}from"./bootstrap-B7E2wy_a.js";import{k as O,d as j,p as C}from"./tax-BACo6kIE.js";import{n as $,a as B}from"./ns-prompt-popup-BbWKrSku.js";import{n as k,_ as p}from"./currency-ZXKMLAC0.js";import{_ as m}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as g,o as c,c as a,b as s,t as n,g as f,f as d,F as v,e as P,h as I,n as S,j as H}from"./runtime-core.esm-bundler-DCfIpxDt.js";const F={components:{},props:["popup"],data(){return{amount:0,title:null,identifier:null,settingsSubscription:null,settings:null,action:null,register:null,loaded:!1,register_id:null,validation:new O,fields:[]}},mounted(){this.title=this.popup.params.title,this.identifier=this.popup.params.identifier,this.register=this.popup.params.register,this.action=this.popup.params.action,this.register_id=this.popup.params.register_id,this.settingsSubscription=POS.settings.subscribe(t=>{this.settings=t}),this.loadFields()},unmounted(){this.settingsSubscription.unsubscribe()},methods:{popupCloser:j,nsCurrency:k,__:p,definedValue(t){this.amount=t},close(){this.popup.close()},loadFields(){this.loaded=!1,nsHttpClient.get(`/api/fields/${this.identifier}`).subscribe(t=>{this.loaded=!0,this.fields=t},t=>(this.loaded=!0,nsSnackBar.error(t.message,"OKAY",{duration:!1}).subscribe()))},submit(t){Popup.show($,{title:"Confirm Your Action",message:this.popup.params.confirmMessage||"Would you like to confirm your action.",onAction:e=>{e&&this.triggerSubmit()}})},triggerSubmit(){const t=this.validation.extractFields(this.fields);t.amount=this.amount===""?0:this.amount,nsHttpClient.post(`/api/cash-registers/${this.action}/${this.register_id||this.settings.register.id}`,t).subscribe({next:e=>{this.popup.params.resolve(e),this.popup.close(),nsSnackBar.success(e.message).subscribe()},error:e=>{nsSnackBar.error(e.message).subscribe()}})}}},N={key:0,class:"shadow-lg w-95vw md:w-3/5-screen ns-box"},L={class:"border-b ns-box-header p-2 text-primary flex justify-between items-center"},A={class:"font-semibold"},z={class:"p-2"},D={key:0,class:"mb-2 p-3 elevation-surface font-bold border text-right flex justify-between"},Q={class:"mb-2 p-3 elevation-surface success border font-bold text-right flex justify-between"},T={class:"flex flex-col md:flex-row md:-mx-2"},U={class:"md:px-2 md:w-1/2 w-full"},E={class:"md:px-2 md:w-1/2 w-full"},Y={key:1,class:"h-full w-full flex items-center justify-center"};function q(t,e,o,u,r,i){const h=g("ns-close-button"),l=g("ns-numpad"),_=g("ns-field"),R=g("ns-spinner");return c(),a("div",null,[r.loaded?(c(),a("div",N,[s("div",L,[s("h3",A,n(r.title),1),s("div",null,[f(h,{onClick:e[0]||(e[0]=b=>i.close())})])]),s("div",z,[s("div",null,[r.register!==null?(c(),a("div",D,[s("span",null,n(i.__("Balance")),1),s("span",null,n(i.nsCurrency(r.register.balance)),1)])):d("",!0),s("div",Q,[s("span",null,n(i.__("Input")),1),s("span",null,n(i.nsCurrency(r.amount)),1)])]),s("div",T,[s("div",U,[f(l,{floating:!0,onNext:e[1]||(e[1]=b=>i.submit(b)),value:r.amount,onChanged:e[2]||(e[2]=b=>i.definedValue(b))},null,8,["value"])]),s("div",E,[(c(!0),a(v,null,P(r.fields,(b,V)=>(c(),I(_,{field:b,key:V},null,8,["field"]))),128))])])])])):d("",!0),r.loaded?d("",!0):(c(),a("div",Y,[f(R)]))])}const x=m(F,[["render",q]]),K={name:"ns-pos-cash-registers-popup",props:["popup"],components:{nsNumpad:B},data(){return{registers:[],priorVerification:!1,hasLoadedRegisters:!1,validation:new O,amount:0,settings:null,settingsSubscription:null}},mounted(){this.checkUsedRegister(),this.settingsSubscription=POS.settings.subscribe(t=>{this.settings=t})},beforeDestroy(){this.settingsSubscription.unsubscribe()},computed:{},methods:{__:p,popupResolver:C,async selectRegister(t){if(t.status!=="closed")return y.error(p("Unable to open this register. Only closed register can be opened.")).subscribe();try{const e=await new Promise((o,u)=>{const r=p("Open Register : %s").replace("%s",t.name),i="open",h=t.id;Popup.show(x,{resolve:o,reject:u,title:r,identifier:"ns.cash-registers-opening",register:t,action:i,register_id:h})});this.popupResolver(e)}catch(e){this.popup.reject(e)}},checkUsedRegister(){this.priorVerification=!1,w.get("/api/cash-registers/used").subscribe({next:t=>{this.popup.params.resolve(t),this.popup.close()},error:t=>{this.priorVerification=!0,y.error(t.message).subscribe(),this.loadRegisters()}})},loadRegisters(){this.hasLoadedRegisters=!1,w.get("/api/cash-registers").subscribe(t=>{this.registers=t,this.hasLoadedRegisters=!0})},getClass(t){switch(t.status){case"in-use":return"elevation-surface warning cursor-not-allowed";case"disabled":return"elevation-surface cursor-not-allowed";case"available":return"elevation-surface success"}return"elevation-surface hoverable cursor-pointer"}}},M={key:0,class:"h-full w-full py-10 flex justify-center items-center"},W={class:"title p-2 border-b ns-box-header flex justify-between items-center"},G={class:"font-semibold"},J={key:0},X=["href"],Z={key:0,class:"py-10 flex-auto overflow-y-auto flex items-center justify-center"},ee={key:1,class:"flex-auto overflow-y-auto"},se={class:"grid grid-cols-3"},te=["onClick"],ie=s("i",{class:"las la-cash-register text-6xl"},null,-1),re={class:"text-semibold text-center"},ne={class:"text-sm"},oe={key:0,class:"p-2 alert text-white"},le=["href"];function ce(t,e,o,u,r,i){const h=g("ns-spinner");return c(),a("div",null,[r.priorVerification===!1?(c(),a("div",M,[f(h,{size:"24",border:"8"})])):d("",!0),r.priorVerification?(c(),a("div",{key:1,id:"ns-pos-cash-registers-popup",class:S(["w-95vw md:w-3/5-screen lg:w-3/5-screen xl:w-2/5-screen flex flex-col overflow-hidden",r.priorVerification?"shadow-lg ns-box":""])},[s("div",W,[s("h3",G,n(i.__("Open The Register")),1),r.settings?(c(),a("div",J,[s("a",{href:r.settings.urls.orders_url,class:"rounded-full border ns-close-button px-3 text-sm py-1"},n(i.__("Exit To Orders")),9,X)])):d("",!0)]),r.hasLoadedRegisters?d("",!0):(c(),a("div",Z,[f(h,{size:"16",border:"4"})])),r.hasLoadedRegisters?(c(),a("div",ee,[s("div",se,[(c(!0),a(v,null,P(r.registers,(l,_)=>(c(),a("div",{onClick:R=>i.selectRegister(l),class:S([i.getClass(l),"border flex items-center justify-center flex-col p-3"]),key:_},[ie,s("h3",re,n(l.name),1),s("span",ne,"("+n(l.status_label)+")",1)],10,te))),128))]),r.registers.length===0?(c(),a("div",oe,[H(n(i.__("Looks like there is no registers. At least one register is required to proceed."))+" — ",1),s("a",{class:"font-bold hover:underline",href:r.settings.urls.registers_url},n(i.__("Create Cash Register")),9,le)])):d("",!0)])):d("",!0)],2)):d("",!0)])}const ae=m(K,[["render",ce]]),ue={props:["popup"],data(){return{totalIn:0,totalOut:0,settings:null,settingsSubscription:null,histories:[]}},mounted(){this.settingsSubscription=POS.settings.subscribe(t=>{this.settings=t}),this.getHistory()},unmounted(){this.settingsSubscription.unsubscribe()},methods:{__:p,nsCurrency:k,popupResolver:C,closePopup(){this.popupResolver({status:"success"})},getHistory(){w.get(`/api/cash-registers/session-history/${this.settings.register.id}`).subscribe(t=>{this.histories=t,this.totalIn=this.histories.filter(e=>["register-opening","register-sale","register-cash-in"].includes(e.action)).map(e=>parseFloat(e.value)).reduce((e,o)=>e+o,0),this.totalOut=this.histories.filter(e=>["register-closing","register-refund","register-cash-out"].includes(e.action)).map(e=>parseFloat(e.value)).reduce((e,o)=>e+o,0)})}}},de={class:"ns-box shadow-lg w-95vw md:w-4/6-screen lg:w-half overflow-hidden"},pe={id:"header",class:"p-2 flex justify-between items-center ns-box-header"},he={class:"font-bold"},_e={class:"flex w-full ns-box-body"},ge={class:"flex flex-auto"},fe={class:"w-full md:w-1/2 text-right bg-success-secondary text-white font-bold text-3xl p-3"},be={class:"w-full md:w-1/2 text-right bg-error-secondary text-white font-bold text-3xl p-3"},me={class:"flex flex-col overflow-y-auto h-120"},xe={class:"p-2 flex-auto"},ve={class:"flex-auto text-right p-2"},ye={class:"p-2 flex-auto"},we={class:"flex-auto text-right p-2"},Ce={class:"p-2 flex-auto"},ke={class:"flex-auto text-right p-2"},Pe={class:"p-2 flex-auto"},Re={class:"flex-auto text-right p-2"};function Se(t,e,o,u,r,i){const h=g("ns-close-button");return c(),a("div",de,[s("div",pe,[s("h3",he,n(i.__("Register History")),1),s("div",null,[f(h,{onClick:i.closePopup},null,8,["onClick"])])]),s("div",_e,[s("div",ge,[s("div",fe,n(i.nsCurrency(r.totalIn)),1),s("div",be,n(i.nsCurrency(r.totalOut)),1)])]),s("div",me,[(c(!0),a(v,null,P(r.histories,l=>(c(),a(v,null,[["register-sale","register-cash-in"].includes(l.action)?(c(),a("div",{key:l.id,class:"flex border-b elevation-surface success"},[s("div",xe,n(l.label),1),s("div",ve,n(i.nsCurrency(l.value)),1)])):d("",!0),["register-opening"].includes(l.action)?(c(),a("div",{key:l.id,class:"flex border-b elevation-surface"},[s("div",ye,n(l.label),1),s("div",we,n(i.nsCurrency(l.value)),1)])):d("",!0),["register-close"].includes(l.action)?(c(),a("div",{key:l.id,class:"flex border-b elevation-surface info"},[s("div",Ce,n(l.label),1),s("div",ke,n(i.nsCurrency(l.value)),1)])):d("",!0),["register-refund","register-cash-out"].includes(l.action)?(c(),a("div",{key:l.id,class:"flex border-b elevation-surface error"},[s("div",Pe,n(l.label),1),s("div",Re,n(i.nsCurrency(l.value)),1)])):d("",!0)],64))),256))])])}const Oe=m(ue,[["render",Se]]),je={props:["popup"],mounted(){this.settingsSubscriber=POS.settings.subscribe(t=>{this.settings=t}),this.popupCloser(),this.loadRegisterSummary()},beforeDestroy(){this.settingsSubscriber.unsubscribe()},data(){return{settings:null,settingsSubscriber:null,register:{}}},methods:{__:p,nsCurrency:k,popupResolver:C,popupCloser:j,loadRegisterSummary(){nsHttpClient.get(`/api/cash-registers/${this.settings.register.id}`).subscribe(t=>{this.register=t})},closePopup(){this.popupResolver({status:"failed",button:"close_popup"})},async closeCashRegister(t){try{const e=await new Promise((o,u)=>{Popup.show(x,{title:p("Close Register"),action:"close",identifier:"ns.cash-registers-closing",register:t,resolve:o,reject:u})});POS.unset("register"),this.popupResolver({button:"close_register",...e})}catch(e){throw e}},async cashIn(t){try{const e=await new Promise((o,u)=>{Popup.show(x,{title:p("Cash In"),action:"register-cash-in",register:t,identifier:"ns.cash-registers-cashing",resolve:o,reject:u})});this.popupResolver({button:"close_register",...e})}catch(e){throw e}},async cashOut(t){try{const e=await new Promise((o,u)=>{Popup.show(x,{title:p("Cash Out"),action:"register-cash-out",register:t,identifier:"ns.cash-registers-cashout",resolve:o,reject:u})});this.popupResolver({button:"close_register",...e})}catch(e){throw e}},async historyPopup(t){try{const e=await new Promise((o,u)=>{Popup.show(Oe,{resolve:o,reject:u,register:t})})}catch(e){throw e}}}},Ve={class:"shadow-lg w-95vw md:w-3/5-screen lg:w-2/4-screen ns-box"},$e={class:"p-2 border-b ns-box-header flex items-center justify-between"},Be={key:0},Ie={class:"h-16 text-3xl elevation-surface info flex items-center justify-between px-3"},He={class:""},Fe={class:"font-bold"},Ne={class:"h-16 text-3xl elevation-surface success flex items-center justify-between px-3"},Le={class:""},Ae={class:"font-bold"},ze={key:1,class:"h-32 ns-box-body border-b py-1 flex items-center justify-center"},De={class:"grid grid-cols-2 text-primary"},Qe=s("i",{class:"las la-sign-out-alt text-6xl"},null,-1),Te={class:"text-xl font-bold"},Ue=s("i",{class:"las la-plus-circle text-6xl"},null,-1),Ee={class:"text-xl font-bold"},Ye=s("i",{class:"las la-minus-circle text-6xl"},null,-1),qe={class:"text-xl font-bold"},Ke=s("i",{class:"las la-history text-6xl"},null,-1),Me={class:"text-xl font-bold"};function We(t,e,o,u,r,i){const h=g("ns-close-button"),l=g("ns-spinner");return c(),a("div",Ve,[s("div",$e,[s("h3",null,n(i.__("Register Options")),1),s("div",null,[f(h,{onClick:e[0]||(e[0]=_=>i.closePopup())})])]),r.register.total_sale_amount!==void 0&&r.register.balance!==void 0?(c(),a("div",Be,[s("div",Ie,[s("span",He,n(i.__("Sales")),1),s("span",Fe,n(i.nsCurrency(r.register.total_sale_amount)),1)]),s("div",Ne,[s("span",Le,n(i.__("Balance")),1),s("span",Ae,n(i.nsCurrency(r.register.balance)),1)])])):d("",!0),r.register.total_sale_amount===void 0&&r.register.balance===void 0?(c(),a("div",ze,[s("div",null,[f(l,{border:"4",size:"16"})])])):d("",!0),s("div",De,[s("div",{onClick:e[1]||(e[1]=_=>i.closeCashRegister(r.register)),class:"border-r border-b py-4 ns-numpad-key info cursor-pointer px-2 flex items-center justify-center flex-col"},[Qe,s("h3",Te,n(i.__("Close")),1)]),s("div",{onClick:e[2]||(e[2]=_=>i.cashIn(r.register)),class:"ns-numpad-key success border-r border-b py-4 cursor-pointer px-2 flex items-center justify-center flex-col"},[Ue,s("h3",Ee,n(i.__("Cash In")),1)]),s("div",{onClick:e[3]||(e[3]=_=>i.cashOut(r.register)),class:"ns-numpad-key error border-r border-b py-4 cursor-pointer px-2 flex items-center justify-center flex-col"},[Ye,s("h3",qe,n(i.__("Cash Out")),1)]),s("div",{onClick:e[4]||(e[4]=_=>i.historyPopup(r.register)),class:"ns-numpad-key info border-r border-b py-4 cursor-pointer px-2 flex items-center justify-center flex-col"},[Ke,s("h3",Me,n(i.__("History")),1)])])])}const Ge=m(je,[["render",We]]),Je={data(){return{order:null,name:"",selectedRegister:null,orderSubscriber:null,settingsSubscriber:null}},watch:{},methods:{__:p,async openRegisterOptions(){try{(await new Promise((e,o)=>{Popup.show(Ge,{resolve:e,reject:o})})).button==="close_register"&&(delete this.settings.register,POS.settings.next(this.settings),POS.reset())}catch(t){Object.keys(t).length>0&&y.error(t.message).subscribe()}},registerInitialQueue(){POS.initialQueue.push(()=>new Promise(async(t,e)=>{try{const o=await new Promise((u,r)=>{if(this.settings.register===void 0)return Popup.show(ae,{resolve:u,reject:r});u({data:{register:this.settings.register}})});POS.set("register",o.data.register),this.setRegister(o.data.register),t(o)}catch(o){e(o)}}))},setButtonName(){if(this.settings.register===void 0)return this.name=p("Cash Register");this.name=p("Cash Register : {register}").replace("{register}",this.settings.register.name)},setRegister(t){if(t!==void 0){const e=POS.order.getValue();e.register_id=t.id,POS.order.next(e)}}},unmounted(){this.orderSubscriber.unsubscribe(),this.settingsSubscriber.unsubscribe()},mounted(){this.registerInitialQueue(),this.orderSubscriber=POS.order.subscribe(t=>{this.order=t}),this.settingsSubscriber=POS.settings.subscribe(t=>{this.settings=t,this.setRegister(this.settings.register),this.setButtonName()})}},Xe={class:"ns-button default"},Ze=s("i",{class:"mr-1 text-xl las la-cash-register"},null,-1);function es(t,e,o,u,r,i){return c(),a("div",Xe,[s("button",{onClick:e[0]||(e[0]=h=>i.openRegisterOptions()),class:"rounded shadow flex-shrink-0 h-12 flex items-center px-2 py-1 text-sm"},[Ze,s("span",null,n(r.name),1)])])}const ls=m(Je,[["render",es]]);export{ls as default}; diff --git a/public/build/assets/ns-pos-reset-button-C_tQMdYf.js b/public/build/assets/ns-pos-reset-button-C_tQMdYf.js new file mode 100644 index 000000000..d9d78a999 --- /dev/null +++ b/public/build/assets/ns-pos-reset-button-C_tQMdYf.js @@ -0,0 +1 @@ +import{g as n,P as a}from"./bootstrap-Bpe5LRJd.js";import{_ as e}from"./currency-lOMYG1Wf.js";import{_ as i}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{n as p}from"./ns-prompt-popup-C2dK5WQb.js";import"./index.es-Br67aBEV.js";import{o as l,c,a as t,t as m}from"./runtime-core.esm-bundler-RT2b-_3S.js";const u={name:"ns-pos-reset-button",mounted(){this.popupCloser()},methods:{__:e,popupCloser:n,reset(){a.show(p,{title:e("Confirm Your Action"),message:e("The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?"),onAction:s=>{s&&POS.reset()}})}}},d={class:"ns-button error"},f=t("i",{class:"mr-1 text-xl las la-eraser"},null,-1);function _(s,o,x,h,P,r){return l(),c("div",d,[t("button",{onClick:o[0]||(o[0]=k=>r.reset()),class:"rounded shadow flex-shrink-0 h-12 flex items-center px-2 py-1 text-sm"},[f,t("span",null,m(r.__("Reset")),1)])])}const $=i(u,[["render",_]]);export{$ as default}; diff --git a/public/build/assets/ns-pos-reset-button-DZPVhJPc.js b/public/build/assets/ns-pos-reset-button-DZPVhJPc.js deleted file mode 100644 index 0f8449100..000000000 --- a/public/build/assets/ns-pos-reset-button-DZPVhJPc.js +++ /dev/null @@ -1 +0,0 @@ -import{d as n,j as i}from"./tax-BACo6kIE.js";import"./bootstrap-B7E2wy_a.js";import{_ as e}from"./currency-ZXKMLAC0.js";import{_ as p}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{n as a}from"./ns-prompt-popup-BbWKrSku.js";import"./index.es-BED_8l8F.js";import{o as l,c as m,b as t,t as c}from"./runtime-core.esm-bundler-DCfIpxDt.js";const u={name:"ns-pos-reset-button",mounted(){this.popupCloser()},methods:{__:e,popupCloser:n,reset(){i.show(a,{title:e("Confirm Your Action"),message:e("The current order will be cleared. But not deleted if it's persistent. Would you like to proceed ?"),onAction:o=>{o&&POS.reset()}})}}},d={class:"ns-button error"},f=t("i",{class:"mr-1 text-xl las la-eraser"},null,-1);function _(o,s,x,h,b,r){return l(),m("div",d,[t("button",{onClick:s[0]||(s[0]=k=>r.reset()),class:"rounded shadow flex-shrink-0 h-12 flex items-center px-2 py-1 text-sm"},[f,t("span",null,c(r.__("Reset")),1)])])}const v=p(u,[["render",_]]);export{v as default}; diff --git a/public/build/assets/ns-pos-shipping-popup-Cw_bpB2Q.js b/public/build/assets/ns-pos-shipping-popup-Cw_bpB2Q.js deleted file mode 100644 index 8c4bd377c..000000000 --- a/public/build/assets/ns-pos-shipping-popup-Cw_bpB2Q.js +++ /dev/null @@ -1 +0,0 @@ -import{a as v}from"./bootstrap-B7E2wy_a.js";import{k as x,p as w}from"./tax-BACo6kIE.js";import{_ as y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as h,o as r,c as l,b as t,t as u,F as p,e as b,n as f,g as m,w as k,j as S}from"./runtime-core.esm-bundler-DCfIpxDt.js";import"./currency-ZXKMLAC0.js";const C={name:"ns-pos-shipping-popup",props:["popup"],computed:{activeTabFields(){if(this.tabs!==null){for(let s in this.tabs)if(this.tabs[s].active)return this.tabs[s].fields}return[]},useBillingInfo(){return this.tabs!==null?this.tabs.billing.fields[0].value:new Object},useShippingInfo(){return this.tabs!==null?this.tabs.shipping.fields[0].value:new Object}},unmounted(){this.orderSubscription.unsubscribe()},mounted(){this.orderSubscription=POS.order.subscribe(s=>this.order=s),this.loadForm()},data(){return{tabs:null,orderSubscription:null,order:null,formValidation:new x}},watch:{useBillingInfo(s){s===1&&this.tabs.billing.fields.forEach(e=>{e.name!=="_use_customer_billing"&&(e.value=this.order.customer.billing?this.order.customer.billing[e.name]:e.value)})},useShippingInfo(s){s===1&&this.tabs.shipping.fields.forEach(e=>{e.name!=="_use_customer_shipping"&&(e.value=this.order.customer.shipping?this.order.customer.shipping[e.name]:e.value)})}},methods:{__,resolveIfQueued:w,submitInformations(){const s=this.formValidation.extractForm({tabs:this.tabs});for(let e in s.general)["shipping","shipping_rate"].includes(e)&&(s.general[e]=parseFloat(s.general[e]));this.order={...this.order,...s.general},delete s.general,delete s.shipping._use_customer_shipping,delete s.billing._use_customer_billing,this.order.addresses=s,POS.order.next(this.order),POS.refreshCart(),this.resolveIfQueued(!0)},closePopup(){this.resolveIfQueued(!1)},toggle(s){for(let e in this.tabs)this.tabs[e].active=!1;this.tabs[s].active=!0},loadForm(){v.get("/api/forms/ns.pos-addresses").subscribe(({tabs:s})=>{for(let e in s)e==="general"?s[e].fields.forEach(o=>{o.value=this.order[o.name]||""}):s[e].fields.forEach(o=>{o.value=this.order.addresses[e]?this.order.addresses[e][o.name]:""});this.tabs=this.formValidation.initializeTabs(s)})}}},F={class:"ns-box w-6/7-screen md:w-4/5-screen lg:w-3/5-screen h-6/7-screen md:h-4/5-screen shadow-lg flex flex-col overflow-hidden"},V={class:"p-2 border-b ns-box-header flex justify-between items-center"},I={class:"font-bold text-primary"},B={class:"tools"},P=t("i",{class:"las la-times"},null,-1),j=[P],E={class:"flex-auto ns-box-body p-2 overflow-y-auto ns-tab"},O={id:"tabs-container"},T={class:"header flex",style:{"margin-bottom":"-1px"}},N=["onClick"],Q={class:"border ns-tab-item"},z={class:"px-4"},D={class:"-mx-4 flex flex-wrap"},H={class:"p-2 flex justify-between border-t ns-box-footer"},L=t("div",null,null,-1);function R(s,e,o,q,d,n){const _=h("ns-field"),g=h("ns-button");return r(),l("div",F,[t("div",V,[t("h3",I,u(n.__("Shipping & Billing")),1),t("div",B,[t("button",{onClick:e[0]||(e[0]=i=>n.closePopup()),class:"ns-close-button rounded-full h-8 w-8 border items-center justify-center"},j)])]),t("div",E,[t("div",O,[t("div",T,[(r(!0),l(p,null,b(d.tabs,(i,a)=>(r(),l("div",{key:a,onClick:c=>n.toggle(a),class:f([i.active?"border-b-0 active":"inactive","tab rounded-tl rounded-tr border tab px-3 py-2 text-primary cursor-pointer"]),style:{"margin-right":"-1px"}},u(i.label),11,N))),128))]),t("div",Q,[t("div",z,[t("div",D,[(r(!0),l(p,null,b(n.activeTabFields,(i,a)=>(r(),l("div",{key:a,class:f("p-4 w-full md:w-1/2 lg:w-1/3")},[m(_,{onBlur:c=>d.formValidation.checkField(i),onChange:c=>d.formValidation.checkField(i),field:i},null,8,["onBlur","onChange","field"])]))),128))])])])])]),t("div",H,[L,t("div",null,[m(g,{onClick:e[1]||(e[1]=i=>n.submitInformations()),type:"info"},{default:k(()=>[S(u(n.__("Save")),1)]),_:1})])])])}const U=y(C,[["render",R]]);export{U as default}; diff --git a/public/build/assets/ns-pos-shipping-popup-OlhRvM9E.js b/public/build/assets/ns-pos-shipping-popup-OlhRvM9E.js new file mode 100644 index 000000000..6640925e0 --- /dev/null +++ b/public/build/assets/ns-pos-shipping-popup-OlhRvM9E.js @@ -0,0 +1 @@ +import{F as v,g as x,p as w,a as y}from"./bootstrap-Bpe5LRJd.js";import{_ as C}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as p,o as r,c as l,a as t,t as u,F as h,b,n as f,f as m,w as F,i as S}from"./runtime-core.esm-bundler-RT2b-_3S.js";import"./currency-lOMYG1Wf.js";const k={name:"ns-pos-shipping-popup",props:["popup"],computed:{activeTabFields(){if(this.tabs!==null){for(let s in this.tabs)if(this.tabs[s].active)return this.tabs[s].fields}return[]},useBillingInfo(){return this.tabs!==null?this.tabs.billing.fields[0].value:new Object},useShippingInfo(){return this.tabs!==null?this.tabs.shipping.fields[0].value:new Object}},unmounted(){this.orderSubscription.unsubscribe()},mounted(){this.orderSubscription=POS.order.subscribe(s=>this.order=s),this.popupCloser(),this.loadForm()},data(){return{tabs:null,orderSubscription:null,order:null,formValidation:new v}},watch:{useBillingInfo(s){s===1&&this.tabs.billing.fields.forEach(e=>{e.name!=="_use_customer_billing"&&(e.value=this.order.customer.billing?this.order.customer.billing[e.name]:e.value)})},useShippingInfo(s){s===1&&this.tabs.shipping.fields.forEach(e=>{e.name!=="_use_customer_shipping"&&(e.value=this.order.customer.shipping?this.order.customer.shipping[e.name]:e.value)})}},methods:{__,popupCloser:x,resolveIfQueued:w,submitInformations(){const s=this.formValidation.extractForm({tabs:this.tabs});for(let e in s.general)["shipping","shipping_rate"].includes(e)&&(s.general[e]=parseFloat(s.general[e]));this.order={...this.order,...s.general},delete s.general,delete s.shipping._use_customer_shipping,delete s.billing._use_customer_billing,this.order.addresses=s,POS.order.next(this.order),POS.refreshCart(),this.resolveIfQueued(!0)},closePopup(){this.resolveIfQueued(!1)},toggle(s){for(let e in this.tabs)this.tabs[e].active=!1;this.tabs[s].active=!0},loadForm(){y.get("/api/forms/ns.pos-addresses").subscribe(({tabs:s})=>{for(let e in s)e==="general"?s[e].fields.forEach(o=>{o.value=this.order[o.name]||""}):s[e].fields.forEach(o=>{o.value=this.order.addresses[e]?this.order.addresses[e][o.name]:""});this.tabs=this.formValidation.initializeTabs(s)})}}},V={class:"ns-box w-6/7-screen md:w-4/5-screen lg:w-3/5-screen h-6/7-screen md:h-4/5-screen shadow-lg flex flex-col overflow-hidden"},I={class:"p-2 border-b ns-box-header flex justify-between items-center"},B={class:"font-bold text-primary"},P={class:"tools"},j=t("i",{class:"las la-times"},null,-1),E=[j],O={class:"flex-auto ns-box-body p-2 overflow-y-auto ns-tab"},T={id:"tabs-container"},N={class:"header flex",style:{"margin-bottom":"-1px"}},Q=["onClick"],z={class:"border ns-tab-item"},D={class:"px-4"},H={class:"-mx-4 flex flex-wrap"},L={class:"p-2 flex justify-between border-t ns-box-footer"},R=t("div",null,null,-1);function q(s,e,o,A,d,n){const _=p("ns-field"),g=p("ns-button");return r(),l("div",V,[t("div",I,[t("h3",B,u(n.__("Shipping & Billing")),1),t("div",P,[t("button",{onClick:e[0]||(e[0]=i=>n.closePopup()),class:"ns-close-button rounded-full h-8 w-8 border items-center justify-center"},E)])]),t("div",O,[t("div",T,[t("div",N,[(r(!0),l(h,null,b(d.tabs,(i,a)=>(r(),l("div",{key:a,onClick:c=>n.toggle(a),class:f([i.active?"border-b-0 active":"inactive","tab rounded-tl rounded-tr border tab px-3 py-2 text-primary cursor-pointer"]),style:{"margin-right":"-1px"}},u(i.label),11,Q))),128))]),t("div",z,[t("div",D,[t("div",H,[(r(!0),l(h,null,b(n.activeTabFields,(i,a)=>(r(),l("div",{key:a,class:f("p-4 w-full md:w-1/2 lg:w-1/3")},[m(_,{onBlur:c=>d.formValidation.checkField(i),onChange:c=>d.formValidation.checkField(i),field:i},null,8,["onBlur","onChange","field"])]))),128))])])])])]),t("div",L,[R,t("div",null,[m(g,{onClick:e[1]||(e[1]=i=>n.submitInformations()),type:"info"},{default:F(()=>[S(u(n.__("Save")),1)]),_:1})])])])}const U=C(k,[["render",q]]);export{U as default}; diff --git a/public/build/assets/ns-procurement-BSr0IvRo.js b/public/build/assets/ns-procurement-BSr0IvRo.js new file mode 100644 index 000000000..baeaaa8f4 --- /dev/null +++ b/public/build/assets/ns-procurement-BSr0IvRo.js @@ -0,0 +1 @@ +import{F as L,b as x,a as g,B as q,d as E,T as N,G as j,P as w,v as U,i as B}from"./bootstrap-Bpe5LRJd.js";import R from"./manage-products-Cuo5kQ-p.js";import{_ as c,n as D}from"./currency-lOMYG1Wf.js";import{_ as O}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as C,o as l,c as u,a as r,t as d,F as v,b as y,g as I,f as F,w as M,i as T,m as K,h as G,J,u as V,e as m,n as k,B as P,A as S}from"./runtime-core.esm-bundler-RT2b-_3S.js";import{c as z,b as A}from"./ns-prompt-popup-C2dK5WQb.js";import{s as H}from"./select-api-entities-COgjiGM-.js";import"./index.es-Br67aBEV.js";import"./join-array-DPKtuOQJ.js";const Q={name:"ns-procurement-product-options",props:["popup"],data(){return{validation:new L,fields:[],rawFields:[{label:c("Expiration Date"),name:"expiration_date",description:c("Define when that specific product should expire."),type:"datetimepicker"},{label:c("Barcode"),name:"barcode",description:c("Renders the automatically generated barcode."),type:"text",disabled:!0},{label:c("Tax Type"),name:"tax_type",description:c("Adjust how tax is calculated on the item."),type:"select",options:[{label:c("Inclusive"),value:"inclusive"},{label:c("Exclusive"),value:"exclusive"}]}]}},methods:{__:c,applyChanges(){if(this.validation.validateFields(this.fields)){const e=this.validation.extractFields(this.fields);return this.popup.params.resolve(e),this.popup.close()}return x.error(c("Unable to proceed. The form is not valid.")).subscribe()}},mounted(){const t=this.rawFields.map(e=>(e.name==="expiration_date"&&(e.value=this.popup.params.product.procurement.expiration_date),e.name==="tax_type"&&(e.value=this.popup.params.product.procurement.tax_type),e.name==="barcode"&&(e.value=this.popup.params.product.procurement.barcode),e));this.fields=this.validation.createFields(t)}},W={class:"ns-box shadow-lg w-6/7-screen md:w-5/7-screen lg:w-3/7-screen"},X={class:"p-2 border-b ns-box-header"},Y={class:"font-semibold"},Z={class:"p-2 border-b ns-box-body"},$={class:"p-2 flex justify-end ns-box-body"};function ee(t,e,n,o,s,i){const h=C("ns-field"),a=C("ns-button");return l(),u("div",W,[r("div",X,[r("h5",Y,d(i.__("Options")),1)]),r("div",Z,[(l(!0),u(v,null,y(s.fields,(p,b)=>(l(),I(h,{class:"w-full",field:p,key:b},null,8,["field"]))),128))]),r("div",$,[F(a,{onClick:e[0]||(e[0]=p=>i.applyChanges()),type:"info"},{default:M(()=>[T(d(i.__("Save")),1)]),_:1})])])}const te=O(Q,[["render",ee]]),re={class:"w-6/7-screen md:w-4/7-screen lg:w-3/7-screen flex flex-col shadow-lg bg-popup-surface"},se={class:"flex flex-col"},ie={class:"h-24 font-bold text-4xl text-primary flex justify-center items-center"},oe=K({__name:"ns-numpad-popup",props:["popup"],setup(t){let e=G("");const n=t,o=i=>{e.value=i},s=()=>{n.popup.params.resolve(e.value),n.popup.close()};return J(()=>{e.value=n.popup.params.value}),(i,h)=>{const a=C("ns-numpad-plus");return l(),u("div",re,[r("div",se,[r("div",ie,d(V(e)),1),F(a,{onChanged:h[0]||(h[0]=p=>o(p)),onNext:h[1]||(h[1]=p=>s()),value:V(e)},null,8,["value"])])])}}}),ne={name:"ns-procurement",mounted(){this.reloadEntities(),this.shouldPreventAccidentlRefreshSubscriber=this.shouldPreventAccidentalRefresh.subscribe({next:t=>{t?window.addEventListener("beforeunload",this.addAccidentalCloseListener):window.removeEventListener("beforeunload",this.addAccidentalCloseListener)}})},computed:{activeTab(){return this.validTabs.filter(t=>t.active).length>0?this.validTabs.filter(t=>t.active)[0]:!1}},data(){return{totalTaxValues:0,totalPurchasePrice:0,formValidation:new L,form:{},nsSnackBar:x,fields:[],searchResult:[],searchValue:"",debounceSearch:null,nsHttpClient:g,taxes:[],validTabs:[{label:c("Details"),identifier:"details",active:!0},{label:c("Products"),identifier:"products",active:!1}],reloading:!1,shouldPreventAccidentalRefresh:new q(!1),shouldPreventAccidentlRefreshSubscriber:null,showInfo:!1}},watch:{form:{handler(){this.formValidation.isFormUntouched(this.form)?this.shouldPreventAccidentalRefresh.next(!1):this.shouldPreventAccidentalRefresh.next(!0)},deep:!0},searchValue(t){t&&(clearTimeout(this.debounceSearch),this.debounceSearch=setTimeout(()=>{this.doSearch(t)},500))}},components:{nsManageProducts:R},props:["submitMethod","submitUrl","returnUrl","src","rules"],methods:{__:c,nsCurrency:D,addAccidentalCloseListener(t){return t.preventDefault(),!0},async defineConversionOption(t){try{const e=this.form.products[t];if(e.procurement.unit_id===void 0)return E.error(c("An error has occured"),c("Select the procured unit first before selecting the conversion unit."),{actions:{learnMore:{label:c("Learn More"),onClick:o=>{console.log(o)}},close:{label:c("Close"),onClick:o=>{o.close()}}},duration:5e3});const n=await H(`/api/units/${e.procurement.unit_id}/siblings`,c("Convert to unit"),e.procurement.convert_unit_id||null,"select");e.procurement.convert_unit_id=n.values[0],e.procurement.convert_unit_label=n.labels[0]}catch(e){if(e!==!1)return x.error(e.message||c("An unexpected error has occured")).subscribe()}},computeTotal(){this.totalTaxValues=0,this.form.products.length>0&&(this.totalTaxValues=this.form.products.map(t=>t.procurement.tax_value).reduce((t,e)=>t+e)),this.totalPurchasePrice=0,this.form.products.length>0&&(this.totalPurchasePrice=this.form.products.map(t=>parseFloat(t.procurement.total_purchase_price)).reduce((t,e)=>t+e))},updateLine(t){const e=this.form.products[t],n=this.taxes.filter(o=>o.id===e.procurement.tax_group_id);if(parseFloat(e.procurement.purchase_price_edit)>0&&parseFloat(e.procurement.quantity)>0){if(n.length>0){const o=n[0].taxes.map(s=>N.getTaxValue(e.procurement.tax_type,e.procurement.purchase_price_edit,parseFloat(s.rate)));e.procurement.tax_value=o.reduce((s,i)=>s+i),e.procurement.tax_type==="inclusive"?(e.procurement.net_purchase_price=parseFloat(e.procurement.purchase_price_edit)-e.procurement.tax_value,e.procurement.gross_purchase_price=parseFloat(e.procurement.purchase_price_edit),e.procurement.purchase_price=parseFloat(e.procurement.gross_purchase_price)):(e.procurement.gross_purchase_price=parseFloat(e.procurement.purchase_price_edit)+e.procurement.tax_value,e.procurement.net_purchase_price=parseFloat(e.procurement.purchase_price_edit),e.procurement.purchase_price=parseFloat(e.procurement.gross_purchase_price))}else e.procurement.gross_purchase_price=parseFloat(e.procurement.purchase_price_edit),e.procurement.purchase_price=parseFloat(e.procurement.purchase_price_edit),e.procurement.net_purchase_price=parseFloat(e.procurement.purchase_price_edit),e.procurement.tax_value=0;e.procurement.tax_value=e.procurement.tax_value*parseFloat(e.procurement.quantity),e.procurement.total_purchase_price=e.procurement.purchase_price*parseFloat(e.procurement.quantity)}this.computeTotal(),this.$forceUpdate()},fetchLastPurchasePrice(t){const e=this.form.products[t],n=e.unit_quantities.filter(o=>e.procurement.unit_id===o.unit_id);n.length>0&&(e.procurement.purchase_price_edit=n[0].last_purchase_price||0),this.updateLine(t)},switchTaxType(t,e){t.procurement.tax_type=t.procurement.tax_type==="inclusive"?"exclusive":"inclusive",this.updateLine(e)},doSearch(t){g.post("/api/procurements/products/search-product",{search:t}).subscribe(e=>{e.length===1?this.addProductList(e[0]):e.length>1?this.searchResult=e:x.error(c("No result match your query.")).subscribe()})},reloadEntities(){this.reloading=!0,j([g.get("/api/categories"),g.get("/api/products"),g.get(this.src),g.get("/api/taxes/groups")]).subscribe(t=>{this.reloading=!1,this.categories=t[0],this.products=t[1],this.taxes=t[3],this.form.general&&t[2].tabs.general.fieds.forEach((e,n)=>{e.value=this.form.tabs.general.fields[n].value||""}),this.form=Object.assign(JSON.parse(JSON.stringify(t[2])),this.form),this.form=this.formValidation.createForm(this.form),this.form.tabs&&this.form.tabs.general.fields.forEach((e,n)=>{e.options&&(e.options=t[2].tabs.general.fields[n].options)}),this.form.products.length===0&&(this.form.products=this.form.products.map(e=>(["gross_purchase_price","purchase_price_edit","tax_value","net_purchase_price","purchase_price","total_price","total_purchase_price","quantity","tax_group_id"].forEach(n=>{e[n]===void 0&&(e[n]=e[n]===void 0?0:e[n])}),e.$invalid=e.$invalid||!1,e.purchase_price_edit=e.purchase_price,{name:e.name,purchase_units:e.purchase_units,procurement:e,unit_quantities:e.unit_quantities||[]}))),this.$forceUpdate()})},setTabActive(t){this.validTabs.forEach(e=>e.active=!1),this.$forceUpdate(),this.$nextTick().then(()=>{t.active=!0})},addProductList(t){if(t.unit_quantities===void 0)return x.error(c("Unable to add product which doesn't unit quantities defined.")).subscribe();t.procurement=new Object,t.procurement.gross_purchase_price=0,t.procurement.purchase_price_edit=0,t.procurement.tax_value=0,t.procurement.net_purchase_price=0,t.procurement.purchase_price=0,t.procurement.total_price=0,t.procurement.total_purchase_price=0,t.procurement.quantity=1,t.procurement.expiration_date=null,t.procurement.tax_group_id=t.tax_group_id,t.procurement.tax_type=t.tax_type||"inclusive",t.procurement.unit_id=t.unit_quantities[0].unit_id,t.procurement.product_id=t.id,t.procurement.convert_unit_id=t.unit_quantities[0].convert_unit_id,t.procurement.procurement_id=null,t.procurement.$invalid=!1,this.searchResult=[],this.searchValue="",this.form.products.push(t)},submit(){if(this.form.products.length===0)return x.error(c("Unable to proceed, no product were provided."),c("OK")).subscribe();if(this.form.products.forEach(o=>{parseFloat(o.procurement.quantity)>=1?o.procurement.unit_id===0?o.procurement.$invalid=!0:o.procurement.$invalid=!1:o.procurement.$invalid=!0}),this.form.products.filter(o=>o.procurement.$invalid).length>0)return x.error(c("Unable to proceed, one or more product has incorrect values."),c("OK")).subscribe();if(this.formValidation.validateForm(this.form).length>0)return this.setTabActive(this.activeTab),x.error(c("Unable to proceed, the procurement form is not valid."),c("OK")).subscribe();if(this.submitUrl===void 0)return x.error(c("Unable to submit, no valid submit URL were provided."),c("OK")).subscribe();this.formValidation.disableForm(this.form);const e={...this.formValidation.extractForm(this.form),products:this.form.products.map(o=>o.procurement)},n=w.show(z);g[this.submitMethod?this.submitMethod.toLowerCase():"post"](this.submitUrl,e).subscribe({next:o=>{if(o.status==="success")return this.shouldPreventAccidentalRefresh.next(!1),document.location=this.returnUrl;n.close(),this.formValidation.enableForm(this.form)},error:o=>{n.close(),x.error(o.message,void 0,{duration:5e3}).subscribe(),this.formValidation.enableForm(this.form),o.errors&&this.formValidation.triggerError(this.form,o.errors)}})},deleteProduct(t){this.form.products.splice(t,1),this.$forceUpdate()},handleGlobalChange(t){this.globallyChecked=t,this.rows.forEach(e=>e.$checked=t)},setProductOptions(t){new Promise((n,o)=>{w.show(te,{product:this.form.products[t],resolve:n,reject:o})}).then(n=>{for(let o in n)this.form.products[t].procurement[o]=n[o];this.updateLine(t)})},async selectUnitForProduct(t){try{const e=this.form.products[t],n=await new Promise((s,i)=>{w.show(A,{label:c("{product}: Purchase Unit").replace("{product}",e.name),description:c("The product will be procured on that unit."),value:e.unit_id,resolve:s,reject:i,options:e.unit_quantities.map(h=>({label:h.unit.name,value:h.unit.id}))})});e.procurement.unit_id=n;const o=e.unit_quantities.filter(s=>parseInt(s.unit_id)===+n);e.procurement.convert_unit_id=o[0].convert_unit_id||void 0,e.procurement.convert_unit_label=await new Promise((s,i)=>{e.procurement.convert_unit_id!==void 0?g.get(`/api/units/${e.procurement.convert_unit_id}`).subscribe({next:h=>{s(h.name)},error:h=>{s(c("Unkown Unit"))}}):s(c("N/A"))}),this.fetchLastPurchasePrice(t)}catch(e){console.log(e)}},async selectTax(t){try{const e=this.form.products[t],n=await new Promise((o,s)=>{w.show(A,{label:c("Choose Tax"),description:c("The tax will be assigned to the procured product."),resolve:o,reject:s,options:this.taxes.map(i=>({label:i.name,value:i.id}))})});e.procurement.tax_group_id=n,this.updateLine(t)}catch{}},async triggerKeyboard(t,e,n){try{const o=await new Promise((s,i)=>{w.show(oe,{value:t[e],resolve:s,reject:i})});t[e]=o,this.updateLine(n)}catch(o){console.log({exception:o})}},getSelectedTax(t){const e=this.form.products[t],n=this.taxes.filter(o=>!!(e.procurement.tax_group_id&&e.procurement.tax_group_id===o.id));return n.length===1?n[0].name:c("N/A")},getSelectedUnit(t){const e=this.form.products[t],o=e.unit_quantities.map(s=>s.unit).filter(s=>e.procurement.unit_id!==void 0?s.id===e.procurement.unit_id:!1);return o.length===1?o[0].name:c("N/A")},handleSavedEvent(t,e){t.data&&(e.options.push({label:t.data.entry.first_name,value:t.data.entry.id}),e.value=t.data.entry.id)}}},ae={class:"form flex-auto flex flex-col",id:"crud-form"},ce={class:"flex flex-col"},le={class:"flex justify-between items-center"},ue={for:"title",class:"font-bold my-2 text-primary"},de={for:"title",class:"text-sm my-2 -mx-1 flex text-primary"},pe={key:0,class:"cursor-pointer rounded-full ns-inset-button border px-2 py-1"},me={key:1,class:"cursor-pointer rounded-full ns-inset-button border px-2 py-1"},he={class:"px-1"},_e=["href"],fe=["disabled"],be=["disabled"],ve={key:0,class:"text-xs text-primary py-1"},xe={key:0,class:"rounded border-2 bg-info-primary border-info-tertiary flex"},ye=r("div",{class:"icon w-16 flex py-4 justify-center"},[r("i",{class:"las la-info-circle text-4xl"})],-1),ge={class:"text flex-auto py-4"},we={class:"font-bold text-lg"},ke=r("i",{class:"las la-hand-point-right"}," ",-1),Ce=r("i",{class:"las la-hand-point-right"}," ",-1),Pe={id:"form-container",class:"-mx-4 flex flex-wrap mt-4"},Te={class:"px-4 w-full"},Fe={id:"tabbed-card",class:"ns-tab"},Ue={id:"card-header",class:"flex flex-wrap"},Ve=["onClick"],Se={key:0,class:"ns-tab-item"},Ae={class:"card-body rounded-br-lg rounded-bl-lg shadow p-2"},Le={key:0,class:"-mx-4 flex flex-wrap"},Oe={key:1,class:"ns-tab-item"},qe={class:"card-body rounded-br-lg rounded-bl-lg shadow p-2"},Ee={class:"mb-2"},Ne={class:"input-group info flex border-2 rounded overflow-hidden"},je=["placeholder"],Be={class:"h-0"},Re={class:"shadow bg-floating-menu relative z-10"},De=["onClick"],Ie={class:"block font-bold text-primary"},Me={class:"block text-sm text-priamry"},Ke={class:"block text-sm text-primary"},Ge={class:"overflow-x-auto"},Je={class:"w-full ns-table"},ze={class:""},He={class:"flex"},Qe={class:"flex md:flex-row flex-col md:-mx-1"},We={class:"md:px-1"},Xe=["onClick"],Ye={class:"md:px-1"},Ze=["onClick"],$e={class:"md:px-1"},et=["onClick"],tt={class:"md:px-1"},rt=["onClick"],st={class:"md:px-1"},it=["onClick"],ot=["onClick"],nt={class:"flex justify-center"},at={key:0,class:"outline-none border-dashed py-1 border-b border-info-primary text-sm"},ct={key:1,class:"outline-none border-dashed py-1 border-b border-info-primary text-sm"},lt={class:"flex items-start"},ut={class:"input-group rounded border-2"},dt=["onChange","onUpdate:modelValue"],pt=["value"],mt={class:"flex items-start flex-col justify-end"},ht={class:"text-sm text-primary"},_t={class:"text-primary"},ft=["colspan"],bt={class:"p-2 border"},vt=["colspan"],xt={class:"p-2 border"};function yt(t,e,n,o,s,i){const h=C("ns-field");return l(),u("div",ae,[s.form.main?(l(),u(v,{key:0},[r("div",ce,[r("div",le,[r("label",ue,d(s.form.main.label||i.__("No title is provided")),1),r("div",de,[r("div",{class:"px-1",onClick:e[0]||(e[0]=a=>s.showInfo=!s.showInfo)},[s.showInfo?m("",!0):(l(),u("span",pe,d(i.__("Show Details")),1)),s.showInfo?(l(),u("span",me,d(i.__("Hide Details")),1)):m("",!0)]),r("div",he,[n.returnUrl?(l(),u("a",{key:0,href:n.returnUrl,class:"rounded-full ns-inset-button border px-2 py-1"},d(i.__("Go Back")),9,_e)):m("",!0)])])]),r("div",{class:k([s.form.main.disabled?"disabled":s.form.main.errors.length>0?"error":"","flex border-2 rounded input-group info overflow-hidden"])},[P(r("input",{"onUpdate:modelValue":e[1]||(e[1]=a=>s.form.main.value=a),onKeypress:e[2]||(e[2]=a=>s.formValidation.checkField(s.form.main)),onBlur:e[3]||(e[3]=a=>s.formValidation.checkField(s.form.main)),onChange:e[4]||(e[4]=a=>s.formValidation.checkField(s.form.main)),disabled:s.form.main.disabled,type:"text",class:k([(s.form.main.disabled,""),"flex-auto outline-none h-10 px-2"])},null,42,fe),[[U,s.form.main.value]]),r("button",{disabled:s.form.main.disabled,onClick:e[5]||(e[5]=a=>i.submit()),class:"outline-none px-4 h-10 border-l"},[S(t.$slots,"save",{},()=>[T(d(i.__("Save")),1)])],8,be),r("button",{onClick:e[6]||(e[6]=a=>i.reloadEntities()),class:"outline-none px-4 h-10"},[r("i",{class:k([s.reloading?"animate animate-spin":"","las la-sync"])},null,2)])],2),s.form.main.description&&s.form.main.errors.length===0?(l(),u("p",ve,d(s.form.main.description),1)):m("",!0),(l(!0),u(v,null,y(s.form.main.errors,(a,p)=>(l(),u("p",{class:"text-xs py-1 text-error-primary",key:p},[r("span",null,[S(t.$slots,"error-required",{},()=>[T(d(a.identifier),1)])])]))),128))]),s.showInfo?(l(),u("div",xe,[ye,r("div",ge,[r("h3",we,d(i.__("Important Notes")),1),r("ul",null,[r("li",null,[ke,r("span",null,d(i.__("Stock Management Products.")),1)]),r("li",null,[Ce,r("span",null,d(i.__("Doesn't work with Grouped Product.")),1)])])])])):m("",!0),r("div",Pe,[r("div",Te,[r("div",Fe,[r("div",Ue,[(l(!0),u(v,null,y(s.validTabs,(a,p)=>(l(),u("div",{onClick:b=>i.setTabActive(a),class:k([a.active?"active":"inactive","tab cursor-pointer px-4 py-2 rounded-tl-lg rounded-tr-lg text-primary"]),key:p},d(a.label),11,Ve))),128))]),i.activeTab.identifier==="details"?(l(),u("div",Se,[r("div",Ae,[s.form.tabs?(l(),u("div",Le,[(l(!0),u(v,null,y(s.form.tabs.general.fields,(a,p)=>(l(),u("div",{class:"flex px-4 w-full md:w-1/2 lg:w-1/3",key:p},[F(h,{onSaved:b=>i.handleSavedEvent(b,a),field:a},null,8,["onSaved","field"])]))),128))])):m("",!0)])])):m("",!0),i.activeTab.identifier==="products"?(l(),u("div",Oe,[r("div",qe,[r("div",Ee,[r("div",Ne,[P(r("input",{"onUpdate:modelValue":e[7]||(e[7]=a=>s.searchValue=a),type:"text",placeholder:i.__("SKU, Barcode, Name"),class:"flex-auto text-primary outline-none h-10 px-2"},null,8,je),[[U,s.searchValue]])]),r("div",Be,[r("div",Re,[(l(!0),u(v,null,y(s.searchResult,(a,p)=>(l(),u("div",{onClick:b=>i.addProductList(a),key:p,class:"cursor-pointer border border-b hover:bg-floating-menu-hover border-floating-menu-edge p-2 text-primary"},[r("span",Ie,d(a.name),1),r("span",Me,d(i.__("SKU"))+" : "+d(a.sku),1),r("span",Ke,d(i.__("Barcode"))+" : "+d(a.barcode),1)],8,De))),128))])])]),r("div",Ge,[r("table",Je,[r("thead",null,[r("tr",null,[(l(!0),u(v,null,y(s.form.columns,(a,p)=>(l(),u("td",{width:"200",key:p,class:"text-primary p-2 border"},d(a.label),1))),128))])]),r("tbody",null,[(l(!0),u(v,null,y(s.form.products,(a,p)=>(l(),u("tr",{key:p,class:k(a.procurement.$invalid?"error border-2 border-error-primary":"")},[(l(!0),u(v,null,y(s.form.columns,(b,_)=>(l(),u(v,null,[b.type==="name"?(l(),u("td",{key:_,width:"500",class:"p-2 text-primary border"},[r("span",ze,d(a.name),1),r("div",He,[r("div",Qe,[r("div",We,[r("span",{class:"text-xs text-info-tertiary cursor-pointer underline",onClick:f=>i.deleteProduct(p)},d(i.__("Delete")),9,Xe)]),r("div",Ye,[r("span",{class:"text-xs text-info-tertiary cursor-pointer underline",onClick:f=>i.setProductOptions(p)},d(i.__("Options")),9,Ze)]),r("div",$e,[r("span",{class:"text-xs text-info-tertiary cursor-pointer underline",onClick:f=>i.selectUnitForProduct(p)},d(i.__("Unit"))+": "+d(i.getSelectedUnit(p)),9,et)]),r("div",tt,[r("span",{class:"text-xs text-info-tertiary cursor-pointer underline",onClick:f=>i.selectTax(p)},d(i.__("Tax"))+": "+d(i.getSelectedTax(p)),9,rt)]),r("div",st,[r("span",{class:"text-xs text-info-tertiary cursor-pointer underline",onClick:f=>i.defineConversionOption(p)},d(i.__("Convert"))+": "+d(a.procurement.convert_unit_id?a.procurement.convert_unit_label:i.__("N/A")),9,it)])])])])):m("",!0),b.type==="text"?(l(),u("td",{key:_,onClick:f=>i.triggerKeyboard(a.procurement,_,p),class:"text-primary border cursor-pointer"},[r("div",nt,[["purchase_price_edit"].includes(_)?(l(),u("span",at,d(i.nsCurrency(a.procurement[_])),1)):m("",!0),["purchase_price_edit"].includes(_)?m("",!0):(l(),u("span",ct,d(a.procurement[_]),1))])],8,ot)):m("",!0),b.type==="custom_select"?(l(),u("td",{key:_,class:"p-2 text-primary border"},[r("div",lt,[r("div",ut,[P(r("select",{onChange:f=>i.updateLine(p),"onUpdate:modelValue":f=>a.procurement[_]=f,class:"p-2"},[(l(!0),u(v,null,y(b.options,f=>(l(),u("option",{key:f.value,value:f.value},d(f.label),9,pt))),128))],40,dt),[[B,a.procurement[_]]])])])])):m("",!0),b.type==="currency"?(l(),u("td",{key:_,class:"p-2 text-primary border"},[r("div",mt,[r("span",ht,d(i.nsCurrency(a.procurement[_])),1)])])):m("",!0)],64))),256))],2))),128)),r("tr",_t,[r("td",{class:"p-2 border",colspan:Object.keys(s.form.columns).indexOf("tax_value")},null,8,ft),r("td",bt,d(i.nsCurrency(s.totalTaxValues)),1),r("td",{class:"p-2 border",colspan:Object.keys(s.form.columns).indexOf("total_purchase_price")-(Object.keys(s.form.columns).indexOf("tax_value")+1)},null,8,vt),r("td",xt,d(i.nsCurrency(s.totalPurchasePrice)),1)])])])])])])):m("",!0)])])])],64)):m("",!0)])}const St=O(ne,[["render",yt]]);export{St as default}; diff --git a/public/build/assets/ns-procurement-D40oV-Zs.js b/public/build/assets/ns-procurement-D40oV-Zs.js deleted file mode 100644 index 035310b5a..000000000 --- a/public/build/assets/ns-procurement-D40oV-Zs.js +++ /dev/null @@ -1 +0,0 @@ -import{k as L,B as q,T as E,Z as j,j as w,v as U,s as N}from"./tax-BACo6kIE.js";import{b as x,a as g,c as B}from"./bootstrap-B7E2wy_a.js";import R from"./manage-products-VWv48bsW.js";import{_ as c,n as D}from"./currency-ZXKMLAC0.js";import{_ as O}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as C,o as l,c as u,b as r,t as d,F as v,e as y,h as I,g as F,w as K,j as T,d as M,i as G,K as J,u as V,f as m,n as k,C as P,B as S}from"./runtime-core.esm-bundler-DCfIpxDt.js";import{c as z,b as A}from"./ns-prompt-popup-BbWKrSku.js";import{s as H}from"./select-api-entities--r5dUSHC.js";import"./index.es-BED_8l8F.js";import"./join-array-DchOF3Wi.js";const Q={name:"ns-procurement-product-options",props:["popup"],data(){return{validation:new L,fields:[],rawFields:[{label:c("Expiration Date"),name:"expiration_date",description:c("Define when that specific product should expire."),type:"datetimepicker"},{label:c("Barcode"),name:"barcode",description:c("Renders the automatically generated barcode."),type:"text",disabled:!0},{label:c("Tax Type"),name:"tax_type",description:c("Adjust how tax is calculated on the item."),type:"select",options:[{label:c("Inclusive"),value:"inclusive"},{label:c("Exclusive"),value:"exclusive"}]}]}},methods:{__:c,applyChanges(){if(this.validation.validateFields(this.fields)){const e=this.validation.extractFields(this.fields);return this.popup.params.resolve(e),this.popup.close()}return x.error(c("Unable to proceed. The form is not valid.")).subscribe()}},mounted(){const t=this.rawFields.map(e=>(e.name==="expiration_date"&&(e.value=this.popup.params.product.procurement.expiration_date),e.name==="tax_type"&&(e.value=this.popup.params.product.procurement.tax_type),e.name==="barcode"&&(e.value=this.popup.params.product.procurement.barcode),e));this.fields=this.validation.createFields(t)}},Z={class:"ns-box shadow-lg w-6/7-screen md:w-5/7-screen lg:w-3/7-screen"},W={class:"p-2 border-b ns-box-header"},X={class:"font-semibold"},Y={class:"p-2 border-b ns-box-body"},$={class:"p-2 flex justify-end ns-box-body"};function ee(t,e,n,o,s,i){const h=C("ns-field"),a=C("ns-button");return l(),u("div",Z,[r("div",W,[r("h5",X,d(i.__("Options")),1)]),r("div",Y,[(l(!0),u(v,null,y(s.fields,(p,b)=>(l(),I(h,{class:"w-full",field:p,key:b},null,8,["field"]))),128))]),r("div",$,[F(a,{onClick:e[0]||(e[0]=p=>i.applyChanges()),type:"info"},{default:K(()=>[T(d(i.__("Save")),1)]),_:1})])])}const te=O(Q,[["render",ee]]),re={class:"w-6/7-screen md:w-4/7-screen lg:w-3/7-screen flex flex-col shadow-lg bg-popup-surface"},se={class:"flex flex-col"},ie={class:"h-24 font-bold text-4xl text-primary flex justify-center items-center"},oe=M({__name:"ns-numpad-popup",props:["popup"],setup(t){let e=G("");const n=t,o=i=>{e.value=i},s=()=>{n.popup.params.resolve(e.value),n.popup.close()};return J(()=>{e.value=n.popup.params.value}),(i,h)=>{const a=C("ns-numpad-plus");return l(),u("div",re,[r("div",se,[r("div",ie,d(V(e)),1),F(a,{onChanged:h[0]||(h[0]=p=>o(p)),onNext:h[1]||(h[1]=p=>s()),value:V(e)},null,8,["value"])])])}}}),ne={name:"ns-procurement",mounted(){this.reloadEntities(),this.shouldPreventAccidentlRefreshSubscriber=this.shouldPreventAccidentalRefresh.subscribe({next:t=>{t?window.addEventListener("beforeunload",this.addAccidentalCloseListener):window.removeEventListener("beforeunload",this.addAccidentalCloseListener)}})},computed:{activeTab(){return this.validTabs.filter(t=>t.active).length>0?this.validTabs.filter(t=>t.active)[0]:!1}},data(){return{totalTaxValues:0,totalPurchasePrice:0,formValidation:new L,form:{},nsSnackBar:x,fields:[],searchResult:[],searchValue:"",debounceSearch:null,nsHttpClient:g,taxes:[],validTabs:[{label:c("Details"),identifier:"details",active:!0},{label:c("Products"),identifier:"products",active:!1}],reloading:!1,shouldPreventAccidentalRefresh:new q(!1),shouldPreventAccidentlRefreshSubscriber:null,showInfo:!1}},watch:{form:{handler(){this.formValidation.isFormUntouched(this.form)?this.shouldPreventAccidentalRefresh.next(!1):this.shouldPreventAccidentalRefresh.next(!0)},deep:!0},searchValue(t){t&&(clearTimeout(this.debounceSearch),this.debounceSearch=setTimeout(()=>{this.doSearch(t)},500))}},components:{nsManageProducts:R},props:["submitMethod","submitUrl","returnUrl","src","rules"],methods:{__:c,nsCurrency:D,addAccidentalCloseListener(t){return t.preventDefault(),!0},async defineConversionOption(t){try{const e=this.form.products[t];if(e.procurement.unit_id===void 0)return B.error(c("An error has occured"),c("Select the procured unit first before selecting the conversion unit."),{actions:{learnMore:{label:c("Learn More"),onClick:o=>{console.log(o)}},close:{label:c("Close"),onClick:o=>{o.close()}}},duration:5e3});const n=await H(`/api/units/${e.procurement.unit_id}/siblings`,c("Convert to unit"),e.procurement.convert_unit_id||null,"select");e.procurement.convert_unit_id=n.values[0],e.procurement.convert_unit_label=n.labels[0]}catch(e){if(e!==!1)return x.error(e.message||c("An unexpected error has occured")).subscribe()}},computeTotal(){this.totalTaxValues=0,this.form.products.length>0&&(this.totalTaxValues=this.form.products.map(t=>t.procurement.tax_value).reduce((t,e)=>t+e)),this.totalPurchasePrice=0,this.form.products.length>0&&(this.totalPurchasePrice=this.form.products.map(t=>parseFloat(t.procurement.total_purchase_price)).reduce((t,e)=>t+e))},updateLine(t){const e=this.form.products[t],n=this.taxes.filter(o=>o.id===e.procurement.tax_group_id);if(parseFloat(e.procurement.purchase_price_edit)>0&&parseFloat(e.procurement.quantity)>0){if(n.length>0){const o=n[0].taxes.map(s=>E.getTaxValue(e.procurement.tax_type,e.procurement.purchase_price_edit,parseFloat(s.rate)));e.procurement.tax_value=o.reduce((s,i)=>s+i),e.procurement.tax_type==="inclusive"?(e.procurement.net_purchase_price=parseFloat(e.procurement.purchase_price_edit)-e.procurement.tax_value,e.procurement.gross_purchase_price=parseFloat(e.procurement.purchase_price_edit),e.procurement.purchase_price=parseFloat(e.procurement.gross_purchase_price)):(e.procurement.gross_purchase_price=parseFloat(e.procurement.purchase_price_edit)+e.procurement.tax_value,e.procurement.net_purchase_price=parseFloat(e.procurement.purchase_price_edit),e.procurement.purchase_price=parseFloat(e.procurement.gross_purchase_price))}else e.procurement.gross_purchase_price=parseFloat(e.procurement.purchase_price_edit),e.procurement.purchase_price=parseFloat(e.procurement.purchase_price_edit),e.procurement.net_purchase_price=parseFloat(e.procurement.purchase_price_edit),e.procurement.tax_value=0;e.procurement.tax_value=e.procurement.tax_value*parseFloat(e.procurement.quantity),e.procurement.total_purchase_price=e.procurement.purchase_price*parseFloat(e.procurement.quantity)}this.computeTotal(),this.$forceUpdate()},fetchLastPurchasePrice(t){const e=this.form.products[t],n=e.unit_quantities.filter(o=>e.procurement.unit_id===o.unit_id);n.length>0&&(e.procurement.purchase_price_edit=n[0].last_purchase_price||0),this.updateLine(t)},switchTaxType(t,e){t.procurement.tax_type=t.procurement.tax_type==="inclusive"?"exclusive":"inclusive",this.updateLine(e)},doSearch(t){g.post("/api/procurements/products/search-product",{search:t}).subscribe(e=>{e.length===1?this.addProductList(e[0]):e.length>1?this.searchResult=e:x.error(c("No result match your query.")).subscribe()})},reloadEntities(){this.reloading=!0,j([g.get("/api/categories"),g.get("/api/products"),g.get(this.src),g.get("/api/taxes/groups")]).subscribe(t=>{this.reloading=!1,this.categories=t[0],this.products=t[1],this.taxes=t[3],this.form.general&&t[2].tabs.general.fieds.forEach((e,n)=>{e.value=this.form.tabs.general.fields[n].value||""}),this.form=Object.assign(JSON.parse(JSON.stringify(t[2])),this.form),this.form=this.formValidation.createForm(this.form),this.form.tabs&&this.form.tabs.general.fields.forEach((e,n)=>{e.options&&(e.options=t[2].tabs.general.fields[n].options)}),this.form.products.length===0&&(this.form.products=this.form.products.map(e=>(["gross_purchase_price","purchase_price_edit","tax_value","net_purchase_price","purchase_price","total_price","total_purchase_price","quantity","tax_group_id"].forEach(n=>{e[n]===void 0&&(e[n]=e[n]===void 0?0:e[n])}),e.$invalid=e.$invalid||!1,e.purchase_price_edit=e.purchase_price,{name:e.name,purchase_units:e.purchase_units,procurement:e,unit_quantities:e.unit_quantities||[]}))),this.$forceUpdate()})},setTabActive(t){this.validTabs.forEach(e=>e.active=!1),this.$forceUpdate(),this.$nextTick().then(()=>{t.active=!0})},addProductList(t){if(t.unit_quantities===void 0)return x.error(c("Unable to add product which doesn't unit quantities defined.")).subscribe();t.procurement=new Object,t.procurement.gross_purchase_price=0,t.procurement.purchase_price_edit=0,t.procurement.tax_value=0,t.procurement.net_purchase_price=0,t.procurement.purchase_price=0,t.procurement.total_price=0,t.procurement.total_purchase_price=0,t.procurement.quantity=1,t.procurement.expiration_date=null,t.procurement.tax_group_id=t.tax_group_id,t.procurement.tax_type=t.tax_type||"inclusive",t.procurement.unit_id=t.unit_quantities[0].unit_id,t.procurement.product_id=t.id,t.procurement.convert_unit_id=t.unit_quantities[0].convert_unit_id,t.procurement.procurement_id=null,t.procurement.$invalid=!1,this.searchResult=[],this.searchValue="",this.form.products.push(t)},submit(){if(this.form.products.length===0)return x.error(c("Unable to proceed, no product were provided."),c("OK")).subscribe();if(this.form.products.forEach(o=>{parseFloat(o.procurement.quantity)>=1?o.procurement.unit_id===0?o.procurement.$invalid=!0:o.procurement.$invalid=!1:o.procurement.$invalid=!0}),this.form.products.filter(o=>o.procurement.$invalid).length>0)return x.error(c("Unable to proceed, one or more product has incorrect values."),c("OK")).subscribe();if(this.formValidation.validateForm(this.form).length>0)return this.setTabActive(this.activeTab),x.error(c("Unable to proceed, the procurement form is not valid."),c("OK")).subscribe();if(this.submitUrl===void 0)return x.error(c("Unable to submit, no valid submit URL were provided."),c("OK")).subscribe();this.formValidation.disableForm(this.form);const e={...this.formValidation.extractForm(this.form),products:this.form.products.map(o=>o.procurement)},n=w.show(z);g[this.submitMethod?this.submitMethod.toLowerCase():"post"](this.submitUrl,e).subscribe({next:o=>{if(n.close(),o.status==="success")return this.shouldPreventAccidentalRefresh.next(!1),document.location=this.returnUrl;this.formValidation.enableForm(this.form)},error:o=>{n.close(),x.error(o.message,void 0,{duration:5e3}).subscribe(),this.formValidation.enableForm(this.form),o.errors&&this.formValidation.triggerError(this.form,o.errors)}})},deleteProduct(t){this.form.products.splice(t,1),this.$forceUpdate()},handleGlobalChange(t){this.globallyChecked=t,this.rows.forEach(e=>e.$checked=t)},setProductOptions(t){new Promise((n,o)=>{w.show(te,{product:this.form.products[t],resolve:n,reject:o})}).then(n=>{for(let o in n)this.form.products[t].procurement[o]=n[o];this.updateLine(t)})},async selectUnitForProduct(t){try{const e=this.form.products[t],n=await new Promise((s,i)=>{w.show(A,{label:c("{product}: Purchase Unit").replace("{product}",e.name),description:c("The product will be procured on that unit."),value:e.unit_id,resolve:s,reject:i,options:e.unit_quantities.map(h=>({label:h.unit.name,value:h.unit.id}))})});e.procurement.unit_id=n;const o=e.unit_quantities.filter(s=>parseInt(s.unit_id)===+n);e.procurement.convert_unit_id=o[0].convert_unit_id||void 0,e.procurement.convert_unit_label=await new Promise((s,i)=>{e.procurement.convert_unit_id!==void 0?g.get(`/api/units/${e.procurement.convert_unit_id}`).subscribe({next:h=>{s(h.name)},error:h=>{s(c("Unkown Unit"))}}):s(c("N/A"))}),this.fetchLastPurchasePrice(t)}catch(e){console.log(e)}},async selectTax(t){try{const e=this.form.products[t],n=await new Promise((o,s)=>{w.show(A,{label:c("Choose Tax"),description:c("The tax will be assigned to the procured product."),resolve:o,reject:s,options:this.taxes.map(i=>({label:i.name,value:i.id}))})});e.procurement.tax_group_id=n,this.updateLine(t)}catch{}},async triggerKeyboard(t,e,n){try{const o=await new Promise((s,i)=>{w.show(oe,{value:t[e],resolve:s,reject:i})});t[e]=o,this.updateLine(n)}catch(o){console.log({exception:o})}},getSelectedTax(t){const e=this.form.products[t],n=this.taxes.filter(o=>!!(e.procurement.tax_group_id&&e.procurement.tax_group_id===o.id));return n.length===1?n[0].name:c("N/A")},getSelectedUnit(t){const e=this.form.products[t],o=e.unit_quantities.map(s=>s.unit).filter(s=>e.procurement.unit_id!==void 0?s.id===e.procurement.unit_id:!1);return o.length===1?o[0].name:c("N/A")},handleSavedEvent(t,e){t.data&&(e.options.push({label:t.data.entry.first_name,value:t.data.entry.id}),e.value=t.data.entry.id)}}},ae={class:"form flex-auto flex flex-col",id:"crud-form"},ce={class:"flex flex-col"},le={class:"flex justify-between items-center"},ue={for:"title",class:"font-bold my-2 text-primary"},de={for:"title",class:"text-sm my-2 -mx-1 flex text-primary"},pe={key:0,class:"cursor-pointer rounded-full ns-inset-button border px-2 py-1"},me={key:1,class:"cursor-pointer rounded-full ns-inset-button border px-2 py-1"},he={class:"px-1"},_e=["href"],fe=["disabled"],be=["disabled"],ve={key:0,class:"text-xs text-primary py-1"},xe={key:0,class:"rounded border-2 bg-info-primary border-info-tertiary flex"},ye=r("div",{class:"icon w-16 flex py-4 justify-center"},[r("i",{class:"las la-info-circle text-4xl"})],-1),ge={class:"text flex-auto py-4"},we={class:"font-bold text-lg"},ke=r("i",{class:"las la-hand-point-right"}," ",-1),Ce=r("i",{class:"las la-hand-point-right"}," ",-1),Pe={id:"form-container",class:"-mx-4 flex flex-wrap mt-4"},Te={class:"px-4 w-full"},Fe={id:"tabbed-card",class:"ns-tab"},Ue={id:"card-header",class:"flex flex-wrap"},Ve=["onClick"],Se={key:0,class:"ns-tab-item"},Ae={class:"card-body rounded-br-lg rounded-bl-lg shadow p-2"},Le={key:0,class:"-mx-4 flex flex-wrap"},Oe={key:1,class:"ns-tab-item"},qe={class:"card-body rounded-br-lg rounded-bl-lg shadow p-2"},Ee={class:"mb-2"},je={class:"input-group info flex border-2 rounded overflow-hidden"},Ne=["placeholder"],Be={class:"h-0"},Re={class:"shadow bg-floating-menu relative z-10"},De=["onClick"],Ie={class:"block font-bold text-primary"},Ke={class:"block text-sm text-priamry"},Me={class:"block text-sm text-primary"},Ge={class:"overflow-x-auto"},Je={class:"w-full ns-table"},ze={class:""},He={class:"flex"},Qe={class:"flex md:flex-row flex-col md:-mx-1"},Ze={class:"md:px-1"},We=["onClick"],Xe={class:"md:px-1"},Ye=["onClick"],$e={class:"md:px-1"},et=["onClick"],tt={class:"md:px-1"},rt=["onClick"],st={class:"md:px-1"},it=["onClick"],ot=["onClick"],nt={class:"flex justify-center"},at={key:0,class:"outline-none border-dashed py-1 border-b border-info-primary text-sm"},ct={key:1,class:"outline-none border-dashed py-1 border-b border-info-primary text-sm"},lt={class:"flex items-start"},ut={class:"input-group rounded border-2"},dt=["onChange","onUpdate:modelValue"],pt=["value"],mt={class:"flex items-start flex-col justify-end"},ht={class:"text-sm text-primary"},_t={class:"text-primary"},ft=["colspan"],bt={class:"p-2 border"},vt=["colspan"],xt={class:"p-2 border"};function yt(t,e,n,o,s,i){const h=C("ns-field");return l(),u("div",ae,[s.form.main?(l(),u(v,{key:0},[r("div",ce,[r("div",le,[r("label",ue,d(s.form.main.label||i.__("No title is provided")),1),r("div",de,[r("div",{class:"px-1",onClick:e[0]||(e[0]=a=>s.showInfo=!s.showInfo)},[s.showInfo?m("",!0):(l(),u("span",pe,d(i.__("Show Details")),1)),s.showInfo?(l(),u("span",me,d(i.__("Hide Details")),1)):m("",!0)]),r("div",he,[n.returnUrl?(l(),u("a",{key:0,href:n.returnUrl,class:"rounded-full ns-inset-button border px-2 py-1"},d(i.__("Go Back")),9,_e)):m("",!0)])])]),r("div",{class:k([s.form.main.disabled?"disabled":s.form.main.errors.length>0?"error":"","flex border-2 rounded input-group info overflow-hidden"])},[P(r("input",{"onUpdate:modelValue":e[1]||(e[1]=a=>s.form.main.value=a),onKeypress:e[2]||(e[2]=a=>s.formValidation.checkField(s.form.main)),onBlur:e[3]||(e[3]=a=>s.formValidation.checkField(s.form.main)),onChange:e[4]||(e[4]=a=>s.formValidation.checkField(s.form.main)),disabled:s.form.main.disabled,type:"text",class:k([(s.form.main.disabled,""),"flex-auto outline-none h-10 px-2"])},null,42,fe),[[U,s.form.main.value]]),r("button",{disabled:s.form.main.disabled,onClick:e[5]||(e[5]=a=>i.submit()),class:"outline-none px-4 h-10 border-l"},[S(t.$slots,"save",{},()=>[T(d(i.__("Save")),1)])],8,be),r("button",{onClick:e[6]||(e[6]=a=>i.reloadEntities()),class:"outline-none px-4 h-10"},[r("i",{class:k([s.reloading?"animate animate-spin":"","las la-sync"])},null,2)])],2),s.form.main.description&&s.form.main.errors.length===0?(l(),u("p",ve,d(s.form.main.description),1)):m("",!0),(l(!0),u(v,null,y(s.form.main.errors,(a,p)=>(l(),u("p",{class:"text-xs py-1 text-error-primary",key:p},[r("span",null,[S(t.$slots,"error-required",{},()=>[T(d(a.identifier),1)])])]))),128))]),s.showInfo?(l(),u("div",xe,[ye,r("div",ge,[r("h3",we,d(i.__("Important Notes")),1),r("ul",null,[r("li",null,[ke,r("span",null,d(i.__("Stock Management Products.")),1)]),r("li",null,[Ce,r("span",null,d(i.__("Doesn't work with Grouped Product.")),1)])])])])):m("",!0),r("div",Pe,[r("div",Te,[r("div",Fe,[r("div",Ue,[(l(!0),u(v,null,y(s.validTabs,(a,p)=>(l(),u("div",{onClick:b=>i.setTabActive(a),class:k([a.active?"active":"inactive","tab cursor-pointer px-4 py-2 rounded-tl-lg rounded-tr-lg text-primary"]),key:p},d(a.label),11,Ve))),128))]),i.activeTab.identifier==="details"?(l(),u("div",Se,[r("div",Ae,[s.form.tabs?(l(),u("div",Le,[(l(!0),u(v,null,y(s.form.tabs.general.fields,(a,p)=>(l(),u("div",{class:"flex px-4 w-full md:w-1/2 lg:w-1/3",key:p},[F(h,{onSaved:b=>i.handleSavedEvent(b,a),field:a},null,8,["onSaved","field"])]))),128))])):m("",!0)])])):m("",!0),i.activeTab.identifier==="products"?(l(),u("div",Oe,[r("div",qe,[r("div",Ee,[r("div",je,[P(r("input",{"onUpdate:modelValue":e[7]||(e[7]=a=>s.searchValue=a),type:"text",placeholder:i.__("SKU, Barcode, Name"),class:"flex-auto text-primary outline-none h-10 px-2"},null,8,Ne),[[U,s.searchValue]])]),r("div",Be,[r("div",Re,[(l(!0),u(v,null,y(s.searchResult,(a,p)=>(l(),u("div",{onClick:b=>i.addProductList(a),key:p,class:"cursor-pointer border border-b hover:bg-floating-menu-hover border-floating-menu-edge p-2 text-primary"},[r("span",Ie,d(a.name),1),r("span",Ke,d(i.__("SKU"))+" : "+d(a.sku),1),r("span",Me,d(i.__("Barcode"))+" : "+d(a.barcode),1)],8,De))),128))])])]),r("div",Ge,[r("table",Je,[r("thead",null,[r("tr",null,[(l(!0),u(v,null,y(s.form.columns,(a,p)=>(l(),u("td",{width:"200",key:p,class:"text-primary p-2 border"},d(a.label),1))),128))])]),r("tbody",null,[(l(!0),u(v,null,y(s.form.products,(a,p)=>(l(),u("tr",{key:p,class:k(a.procurement.$invalid?"error border-2 border-error-primary":"")},[(l(!0),u(v,null,y(s.form.columns,(b,_)=>(l(),u(v,null,[b.type==="name"?(l(),u("td",{key:_,width:"500",class:"p-2 text-primary border"},[r("span",ze,d(a.name),1),r("div",He,[r("div",Qe,[r("div",Ze,[r("span",{class:"text-xs text-info-tertiary cursor-pointer underline",onClick:f=>i.deleteProduct(p)},d(i.__("Delete")),9,We)]),r("div",Xe,[r("span",{class:"text-xs text-info-tertiary cursor-pointer underline",onClick:f=>i.setProductOptions(p)},d(i.__("Options")),9,Ye)]),r("div",$e,[r("span",{class:"text-xs text-info-tertiary cursor-pointer underline",onClick:f=>i.selectUnitForProduct(p)},d(i.__("Unit"))+": "+d(i.getSelectedUnit(p)),9,et)]),r("div",tt,[r("span",{class:"text-xs text-info-tertiary cursor-pointer underline",onClick:f=>i.selectTax(p)},d(i.__("Tax"))+": "+d(i.getSelectedTax(p)),9,rt)]),r("div",st,[r("span",{class:"text-xs text-info-tertiary cursor-pointer underline",onClick:f=>i.defineConversionOption(p)},d(i.__("Convert"))+": "+d(a.procurement.convert_unit_id?a.procurement.convert_unit_label:i.__("N/A")),9,it)])])])])):m("",!0),b.type==="text"?(l(),u("td",{key:_,onClick:f=>i.triggerKeyboard(a.procurement,_,p),class:"text-primary border cursor-pointer"},[r("div",nt,[["purchase_price_edit"].includes(_)?(l(),u("span",at,d(i.nsCurrency(a.procurement[_])),1)):m("",!0),["purchase_price_edit"].includes(_)?m("",!0):(l(),u("span",ct,d(a.procurement[_]),1))])],8,ot)):m("",!0),b.type==="custom_select"?(l(),u("td",{key:_,class:"p-2 text-primary border"},[r("div",lt,[r("div",ut,[P(r("select",{onChange:f=>i.updateLine(p),"onUpdate:modelValue":f=>a.procurement[_]=f,class:"p-2"},[(l(!0),u(v,null,y(b.options,f=>(l(),u("option",{key:f.value,value:f.value},d(f.label),9,pt))),128))],40,dt),[[N,a.procurement[_]]])])])])):m("",!0),b.type==="currency"?(l(),u("td",{key:_,class:"p-2 text-primary border"},[r("div",mt,[r("span",ht,d(i.nsCurrency(a.procurement[_])),1)])])):m("",!0)],64))),256))],2))),128)),r("tr",_t,[r("td",{class:"p-2 border",colspan:Object.keys(s.form.columns).indexOf("tax_value")},null,8,ft),r("td",bt,d(i.nsCurrency(s.totalTaxValues)),1),r("td",{class:"p-2 border",colspan:Object.keys(s.form.columns).indexOf("total_purchase_price")-(Object.keys(s.form.columns).indexOf("tax_value")+1)},null,8,vt),r("td",xt,d(i.nsCurrency(s.totalPurchasePrice)),1)])])])])])])):m("",!0)])])])],64)):m("",!0)])}const At=O(ne,[["render",yt]]);export{At as default}; diff --git a/public/build/assets/ns-procurement-quantity-DpioiyPI.js b/public/build/assets/ns-procurement-quantity-TtYuVe2j.js similarity index 76% rename from public/build/assets/ns-procurement-quantity-DpioiyPI.js rename to public/build/assets/ns-procurement-quantity-TtYuVe2j.js index 11201375b..0d78000aa 100644 --- a/public/build/assets/ns-procurement-quantity-DpioiyPI.js +++ b/public/build/assets/ns-procurement-quantity-TtYuVe2j.js @@ -1 +1 @@ -import{b as f}from"./bootstrap-B7E2wy_a.js";import{_ as u}from"./currency-ZXKMLAC0.js";import{_ as h}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as m,o as n,c as a,b as s,t as r,g as _,F as v,e as V,f as c,n as x}from"./runtime-core.esm-bundler-DCfIpxDt.js";const b={name:"ns-procurement-quantity",props:["popup"],data(){return{finalValue:1,virtualStock:null,allSelected:!0,isLoading:!1,keys:[...[1,2,3].map(e=>({identifier:e,value:e})),...[4,5,6].map(e=>({identifier:e,value:e})),...[7,8,9].map(e=>({identifier:e,value:e})),{identifier:"backspace",icon:"la-backspace"},{identifier:0,value:0},{identifier:"next",icon:"la-share"}]}},mounted(){this.popup.params.quantity&&(this.finalValue=this.popup.params.quantity),document.addEventListener("keyup",this.handleKeyPress)},unmounted(){document.removeEventListener("keypress",this.handleKeyPress)},methods:{__:u,handleKeyPress(e){e.keyCode===13&&this.inputValue({identifier:"next"})},closePopup(){this.popup.params.reject(!1),this.popup.close()},inputValue(e){if(e.identifier==="next"){this.popup.params;const i=parseFloat(this.finalValue);if(i===0)return f.error(u("Please provide a quantity")).subscribe();this.resolve({quantity:i})}else e.identifier==="backspace"?this.allSelected?(this.finalValue=0,this.allSelected=!1):(this.finalValue=this.finalValue.toString(),this.finalValue=this.finalValue.substr(0,this.finalValue.length-1)||0):this.allSelected?(this.finalValue=e.value,this.finalValue=parseFloat(this.finalValue),this.allSelected=!1):(this.finalValue+=""+e.value,this.finalValue=parseFloat(this.finalValue))},resolve(e){this.popup.params.resolve(e),this.popup.close()}}},y={class:"ns-box shadow min-h-2/5-screen w-3/4-screen md:w-3/5-screen lg:w-3/5-screen xl:w-2/5-screen relative"},g={class:"flex-shrink-0 flex p-2 border-b ns-box-header justify-between items-center"},k={class:"text-xl font-bold text-primary text-center"},w={id:"screen",class:"h-16 ns-box-body flex items-center justify-center"},S={class:"font-bold text-3xl"},C={id:"numpad",class:"grid grid-flow-row grid-cols-3 grid-rows-3"},P=["onClick"],q={key:0};function F(e,i,j,B,o,l){const p=m("ns-close-button");return n(),a("div",y,[s("div",g,[s("h1",k,r(l.__("Define Quantity")),1),s("div",null,[_(p,{onClick:i[0]||(i[0]=t=>l.closePopup())})])]),s("div",w,[s("h1",S,r(o.finalValue),1)]),s("div",C,[(n(!0),a(v,null,V(o.keys,(t,d)=>(n(),a("div",{onClick:L=>l.inputValue(t),key:d,class:"text-xl font-bold border ns-numpad-key h-24 flex items-center justify-center cursor-pointer"},[t.value!==void 0?(n(),a("span",q,r(t.value),1)):c("",!0),t.icon?(n(),a("i",{key:1,class:x(["las",t.icon])},null,2)):c("",!0)],8,P))),128))])])}const Q=h(b,[["render",F]]);export{Q as n}; +import{b as f}from"./bootstrap-Bpe5LRJd.js";import{_ as u}from"./currency-lOMYG1Wf.js";import{_ as h}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as m,o as a,c as n,a as s,t as r,f as _,F as v,b as V,e as c,n as x}from"./runtime-core.esm-bundler-RT2b-_3S.js";const b={name:"ns-procurement-quantity",props:["popup"],data(){return{finalValue:1,virtualStock:null,allSelected:!0,isLoading:!1,keys:[...[1,2,3].map(e=>({identifier:e,value:e})),...[4,5,6].map(e=>({identifier:e,value:e})),...[7,8,9].map(e=>({identifier:e,value:e})),{identifier:"backspace",icon:"la-backspace"},{identifier:0,value:0},{identifier:"next",icon:"la-share"}]}},mounted(){this.popup.params.quantity&&(this.finalValue=this.popup.params.quantity),document.addEventListener("keyup",this.handleKeyPress)},unmounted(){document.removeEventListener("keypress",this.handleKeyPress)},methods:{__:u,handleKeyPress(e){e.keyCode===13&&this.inputValue({identifier:"next"})},closePopup(){this.popup.params.reject(!1),this.popup.close()},inputValue(e){if(e.identifier==="next"){this.popup.params;const i=parseFloat(this.finalValue);if(i===0)return f.error(u("Please provide a quantity")).subscribe();this.resolve({quantity:i})}else e.identifier==="backspace"?this.allSelected?(this.finalValue=0,this.allSelected=!1):(this.finalValue=this.finalValue.toString(),this.finalValue=this.finalValue.substr(0,this.finalValue.length-1)||0):this.allSelected?(this.finalValue=e.value,this.finalValue=parseFloat(this.finalValue),this.allSelected=!1):(this.finalValue+=""+e.value,this.finalValue=parseFloat(this.finalValue))},resolve(e){this.popup.params.resolve(e),this.popup.close()}}},y={class:"ns-box shadow min-h-2/5-screen w-3/4-screen md:w-3/5-screen lg:w-3/5-screen xl:w-2/5-screen relative"},g={class:"flex-shrink-0 flex p-2 border-b ns-box-header justify-between items-center"},k={class:"text-xl font-bold text-primary text-center"},w={id:"screen",class:"h-16 ns-box-body flex items-center justify-center"},S={class:"font-bold text-3xl"},C={id:"numpad",class:"grid grid-flow-row grid-cols-3 grid-rows-3"},P=["onClick"],q={key:0};function F(e,i,j,B,o,l){const p=m("ns-close-button");return a(),n("div",y,[s("div",g,[s("h1",k,r(l.__("Define Quantity")),1),s("div",null,[_(p,{onClick:i[0]||(i[0]=t=>l.closePopup())})])]),s("div",w,[s("h1",S,r(o.finalValue),1)]),s("div",C,[(a(!0),n(v,null,V(o.keys,(t,d)=>(a(),n("div",{onClick:L=>l.inputValue(t),key:d,class:"text-xl font-bold border ns-numpad-key h-24 flex items-center justify-center cursor-pointer"},[t.value!==void 0?(a(),n("span",q,r(t.value),1)):c("",!0),t.icon?(a(),n("i",{key:1,class:x(["las",t.icon])},null,2)):c("",!0)],8,P))),128))])])}const Q=h(b,[["render",F]]);export{Q as n}; diff --git a/public/build/assets/ns-profile-widget-Cmp5bsjX.js b/public/build/assets/ns-profile-widget-C1hd8E1M.js similarity index 82% rename from public/build/assets/ns-profile-widget-Cmp5bsjX.js rename to public/build/assets/ns-profile-widget-C1hd8E1M.js index 19642183e..7047e3ff5 100644 --- a/public/build/assets/ns-profile-widget-Cmp5bsjX.js +++ b/public/build/assets/ns-profile-widget-C1hd8E1M.js @@ -1 +1 @@ -import{n as p}from"./ns-avatar-image-C_oqdj76.js";import{_ as b,n as h}from"./currency-ZXKMLAC0.js";import{_ as v}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as l,c as i,b as e,t as a,g as d,F as g,e as x}from"./runtime-core.esm-bundler-DCfIpxDt.js";import"./index.es-BED_8l8F.js";const w={name:"ns-profile-widget",components:{nsAvatarImage:p},data(){return{svg:"",user:ns.user,profileDetails:[]}},computed:{avatarUrl(){return this.url.length===0?"":this.url}},mounted(){this.loadUserProfileWidget()},methods:{__:b,nsCurrency:h,loadUserProfileWidget(o){nsHttpClient.get(`/api/reports/cashier-report${o?"?refresh=true":""}`).subscribe(s=>{this.profileDetails=s})}}},y={id:"ns-best-cashiers",class:"flex flex-auto flex-col shadow rounded-lg overflow-hidden"},k={class:"flex-auto"},C={class:"head text-center border-b w-full flex justify-between items-center p-2"},P={class:"flex -mx-1"},D={class:"px-1"},U={class:"px-1"},W={class:"body"},j={class:"h-40 flex items-center justify-center"},B={class:"rounded-full border-4 border-gray-400 bg-white shadow-lg overflow-hidden"},$={class:"border-t border-box-edge"};function F(o,s,N,V,r,c){const u=n("ns-icon-button"),_=n("ns-close-button"),f=n("ns-avatar-image");return l(),i("div",y,[e("div",k,[e("div",C,[e("h5",null,a(c.__("Profile")),1),e("div",P,[e("div",D,[d(u,{"class-name":"la-sync-alt",onClick:s[0]||(s[0]=t=>c.loadUserProfileWidget(!0))})]),e("div",U,[d(_,{onClick:s[1]||(s[1]=t=>o.$emit("onRemove"))})])])]),e("div",W,[e("div",j,[e("div",B,[d(f,{size:32,url:r.user.attributes.avatar_link,name:r.user.username},null,8,["url","name"])])]),e("div",$,[e("ul",null,[(l(!0),i(g,null,x(r.profileDetails,(t,m)=>(l(),i("li",{key:m,class:"border-b border-box-edge p-2 flex justify-between"},[e("span",null,a(t.label),1),e("span",null,a(t.value),1)]))),128))])])])])])}const L=v(w,[["render",F]]);export{L as default}; +import{n as p}from"./ns-avatar-image-CAD6xUGA.js";import{_ as b,n as h}from"./currency-lOMYG1Wf.js";import{_ as v}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as n,o as l,c as i,a as e,t as a,f as d,F as g,b as x}from"./runtime-core.esm-bundler-RT2b-_3S.js";import"./index.es-Br67aBEV.js";const w={name:"ns-profile-widget",components:{nsAvatarImage:p},data(){return{svg:"",user:ns.user,profileDetails:[]}},computed:{avatarUrl(){return this.url.length===0?"":this.url}},mounted(){this.loadUserProfileWidget()},methods:{__:b,nsCurrency:h,loadUserProfileWidget(o){nsHttpClient.get(`/api/reports/cashier-report${o?"?refresh=true":""}`).subscribe(s=>{this.profileDetails=s})}}},y={id:"ns-best-cashiers",class:"flex flex-auto flex-col shadow rounded-lg overflow-hidden"},k={class:"flex-auto"},C={class:"head text-center border-b w-full flex justify-between items-center p-2"},P={class:"flex -mx-1"},D={class:"px-1"},U={class:"px-1"},W={class:"body"},j={class:"h-40 flex items-center justify-center"},B={class:"rounded-full border-4 border-gray-400 bg-white shadow-lg overflow-hidden"},$={class:"border-t border-box-edge"};function F(o,s,N,V,r,c){const u=n("ns-icon-button"),_=n("ns-close-button"),f=n("ns-avatar-image");return l(),i("div",y,[e("div",k,[e("div",C,[e("h5",null,a(c.__("Profile")),1),e("div",P,[e("div",D,[d(u,{"class-name":"la-sync-alt",onClick:s[0]||(s[0]=t=>c.loadUserProfileWidget(!0))})]),e("div",U,[d(_,{onClick:s[1]||(s[1]=t=>o.$emit("onRemove"))})])])]),e("div",W,[e("div",j,[e("div",B,[d(f,{size:32,url:r.user.attributes.avatar_link,name:r.user.username},null,8,["url","name"])])]),e("div",$,[e("ul",null,[(l(!0),i(g,null,x(r.profileDetails,(t,m)=>(l(),i("li",{key:m,class:"border-b border-box-edge p-2 flex justify-between"},[e("span",null,a(t.label),1),e("span",null,a(t.value),1)]))),128))])])])])])}const L=v(w,[["render",F]]);export{L as default}; diff --git a/public/build/assets/ns-profit-report-BJ-1mLfa.js b/public/build/assets/ns-profit-report-BJ-1mLfa.js deleted file mode 100644 index 9e418f72f..000000000 --- a/public/build/assets/ns-profit-report-BJ-1mLfa.js +++ /dev/null @@ -1 +0,0 @@ -import{h as c}from"./tax-BACo6kIE.js";import{c as m,e as g}from"./components-CSb5I62o.js";import{b as d,a as x}from"./bootstrap-B7E2wy_a.js";import{_ as l,n as f}from"./currency-ZXKMLAC0.js";import{s as p}from"./select-api-entities--r5dUSHC.js";import{_ as y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as v,o as u,c as _,b as t,g as b,t as r,F as w,e as D,n as F}from"./runtime-core.esm-bundler-DCfIpxDt.js";import"./ns-alert-popup-DDoxXsJC.js";import"./ns-avatar-image-C_oqdj76.js";import"./index.es-BED_8l8F.js";import"./ns-prompt-popup-BbWKrSku.js";import"./join-array-DchOF3Wi.js";const C={name:"ns-profit-report",props:["storeLogo","storeName"],data(){return{categoryNames:"",unitNames:"",startDateField:{type:"datetimepicker",value:c(ns.date.current).startOf("month").format("YYYY-MM-DD HH:mm:ss")},endDateField:{type:"datetimepicker",value:c(ns.date.current).endOf("month").format("YYYY-MM-DD HH:mm:ss")},categoryField:{value:[],label:l("Filter by Category")},unitField:{value:[],label:l("Filter by Units")},products:[],ns:window.ns}},components:{nsDatepicker:m,nsDateTimePicker:g},computed:{totalQuantities(){return this.products.length>0?this.products.map(e=>e.quantity).reduce((e,a)=>e+a):0},totalPurchasePrice(){return this.products.length>0?this.products.map(e=>e.total_purchase_price).reduce((e,a)=>e+a):0},totalSalePrice(){return this.products.length>0?this.products.map(e=>e.total_price).reduce((e,a)=>e+a):0},totalProfit(){return this.products.length>0?this.products.map(e=>e.total_price-e.total_purchase_price).reduce((e,a)=>e+a):0},totalTax(){return this.products.length>0?this.products.map(e=>e.tax_value).reduce((e,a)=>e+a):0}},methods:{__:l,nsCurrency:f,printSaleReport(){this.$htmlToPaper("profit-report")},setStartDate(e){this.startDate=e.format()},async selectCategories(){try{const e=await p("/api/categories",this.categoryField.label,this.categoryField.value);this.categoryField.value=e.values,this.categoryNames=e.labels,this.loadReport()}catch(e){if(e!==!1)return d.error(l("An error has occured while loading the categories")).subscribe()}},async selectUnit(){try{const e=await p("/api/units",this.unitField.label,this.unitField.value);this.unitField.value=e.values,this.unitNames=e.labels,this.loadReport()}catch(e){if(e!==!1)return d.error(l("An error has occured while loading the units")).subscribe()}},loadReport(){if(this.startDateField.value===null||this.endDateField.value===null)return d.error(l("Unable to proceed. Select a correct time range.")).subscribe();const e=c(this.startDateField.value);if(c(this.endDateField.value).isBefore(e))return d.error(l("Unable to proceed. The current time range is not valid.")).subscribe();x.post("/api/reports/profit-report",{startDate:this.startDateField.value,endDate:this.endDateField.value,categories:this.categoryField.value,units:this.unitField.value}).subscribe({next:n=>{this.products=n},error:n=>{d.error(n.message).subscribe()}})},setEndDate(e){this.endDate=e.format()}}},k={id:"report-section",class:"px-4"},P={class:"flex -mx-2"},N={class:"px-2"},R={class:"px-2"},S={class:"px-2"},U=t("i",{class:"las la-sync-alt text-xl"},null,-1),Y={class:"pl-2"},M={class:"px-2"},B=t("i",{class:"las la-print text-xl"},null,-1),T={class:"pl-2"},j={class:"px-2"},A=t("i",{class:"las la-filter text-xl"},null,-1),H={class:"pl-2"},L={class:"px-2"},E=t("i",{class:"las la-filter text-xl"},null,-1),Q={class:"pl-2"},q={id:"profit-report",class:"anim-duration-500 fade-in-entrance"},O={class:"flex w-full"},V={class:"my-4 flex justify-between w-full"},z={class:"text-secondary"},G={class:"pb-1 border-b border-dashed"},I={class:"pb-1 border-b border-dashed"},J={class:"pb-1 border-b border-dashed"},K=["src","alt"],W={class:"shadow rounded my-4"},X={class:"ns-box"},Z={class:"border-b ns-box-body"},$={class:"table ns-table w-full"},tt={class:"border p-2 text-left"},et={width:"150",class:"text-right border p-2"},st={width:"150",class:"text-right border p-2"},rt={width:"150",class:"text-right border p-2"},at={width:"150",class:"text-right border p-2"},ot={width:"150",class:"text-right border p-2"},it={width:"150",class:"text-right border p-2"},lt={class:"p-2 border border-box-edge"},nt={class:"p-2 border text-right border-box-edge"},dt={class:"p-2 border text-right border-box-edge"},ct={class:"p-2 border text-right border-box-edge"},ut={class:"p-2 border text-right border-box-edge"},_t={class:"p-2 border text-right border-box-edge"},ht={class:"p-2 border text-right border-box-edge"},pt={class:"font-semibold"},bt=t("td",{colspan:"2",class:"p-2 border"},null,-1),mt={class:"p-2 border text-right"},gt={class:"p-2 border text-right"},xt={class:"p-2 border text-right"},ft={class:"p-2 border text-right"},yt={class:"p-2 border text-right"};function vt(e,a,n,wt,i,s){const h=v("ns-field");return u(),_("div",k,[t("div",P,[t("div",N,[b(h,{field:i.startDateField},null,8,["field"])]),t("div",R,[b(h,{field:i.endDateField},null,8,["field"])]),t("div",S,[t("button",{onClick:a[0]||(a[0]=o=>s.loadReport()),class:"rounded flex justify-between bg-input-background hover:bg-input-button-hover shadow py-1 items-center text-primary px-2"},[U,t("span",Y,r(s.__("Load")),1)])]),t("div",M,[t("button",{onClick:a[1]||(a[1]=o=>s.printSaleReport()),class:"rounded flex justify-between bg-input-background hover:bg-input-button-hover shadow py-1 items-center text-primary px-2"},[B,t("span",T,r(s.__("Print")),1)])]),t("div",j,[t("button",{onClick:a[2]||(a[2]=o=>s.selectCategories()),class:"rounded flex justify-between bg-input-background hover:bg-input-button-hover shadow py-1 items-center text-primary px-2"},[A,t("span",H,r(s.__("Category"))+": "+r(i.categoryNames||s.__("All Categories")),1)])]),t("div",L,[t("button",{onClick:a[3]||(a[3]=o=>s.selectUnit()),class:"rounded flex justify-between bg-input-background hover:bg-input-button-hover shadow py-1 items-center text-primary px-2"},[E,t("span",Q,r(s.__("Unit"))+": "+r(i.unitNames||s.__("All Units")),1)])])]),t("div",q,[t("div",O,[t("div",V,[t("div",z,[t("ul",null,[t("li",G,r(s.__("Range : {date1} — {date2}").replace("{date1}",i.startDateField.value).replace("{date2}",i.endDateField.value)),1),t("li",I,r(s.__("Document : Profit Report")),1),t("li",J,r(s.__("By : {user}").replace("{user}",i.ns.user.username)),1)])]),t("div",null,[t("img",{class:"w-24",src:n.storeLogo,alt:n.storeName},null,8,K)])])]),t("div",W,[t("div",X,[t("div",Z,[t("table",$,[t("thead",null,[t("tr",null,[t("th",tt,r(s.__("Product")),1),t("th",et,r(s.__("Unit")),1),t("th",st,r(s.__("Quantity")),1),t("th",rt,r(s.__("Purchase Price")),1),t("th",at,r(s.__("Sale Price")),1),t("th",ot,r(s.__("Taxes")),1),t("th",it,r(s.__("Profit")),1)])]),t("tbody",null,[(u(!0),_(w,null,D(i.products,o=>(u(),_("tr",{key:o.id,class:F(o.total_price-o.total_purchase_price<0?"bg-error-primary":"bg-box-background")},[t("td",lt,r(o.name),1),t("td",nt,r(o.unit_name),1),t("td",dt,r(o.quantity),1),t("td",ct,r(s.nsCurrency(o.total_purchase_price)),1),t("td",ut,r(s.nsCurrency(o.total_price)),1),t("td",_t,r(s.nsCurrency(o.tax_value)),1),t("td",ht,r(s.nsCurrency(o.total_price-o.total_purchase_price)),1)],2))),128))]),t("tfoot",pt,[t("tr",null,[bt,t("td",mt,r(s.totalQuantities),1),t("td",gt,r(s.nsCurrency(s.totalPurchasePrice)),1),t("td",xt,r(s.nsCurrency(s.totalSalePrice)),1),t("td",ft,r(s.nsCurrency(s.totalTax)),1),t("td",yt,r(s.nsCurrency(s.totalProfit)),1)])])])])])])])])}const Tt=y(C,[["render",vt]]);export{Tt as default}; diff --git a/public/build/assets/ns-profit-report-CzVSFQQq.js b/public/build/assets/ns-profit-report-CzVSFQQq.js new file mode 100644 index 000000000..701af259e --- /dev/null +++ b/public/build/assets/ns-profit-report-CzVSFQQq.js @@ -0,0 +1 @@ +import{h as c,b as d,a as m}from"./bootstrap-Bpe5LRJd.js";import{c as g,e as x}from"./components-RJC2qWGQ.js";import{_ as l,n as f}from"./currency-lOMYG1Wf.js";import{s as p}from"./select-api-entities-COgjiGM-.js";import{_ as y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as v,o as u,c as _,a as t,f as b,t as r,F as w,b as D,n as F}from"./runtime-core.esm-bundler-RT2b-_3S.js";import"./ns-alert-popup-SVrn5Xft.js";import"./ns-avatar-image-CAD6xUGA.js";import"./index.es-Br67aBEV.js";import"./ns-prompt-popup-C2dK5WQb.js";import"./join-array-DPKtuOQJ.js";const C={name:"ns-profit-report",props:["storeLogo","storeName"],data(){return{categoryNames:"",unitNames:"",startDateField:{type:"datetimepicker",value:c(ns.date.current).startOf("month").format("YYYY-MM-DD HH:mm:ss")},endDateField:{type:"datetimepicker",value:c(ns.date.current).endOf("month").format("YYYY-MM-DD HH:mm:ss")},categoryField:{value:[],label:l("Filter by Category")},unitField:{value:[],label:l("Filter by Units")},products:[],ns:window.ns}},components:{nsDatepicker:g,nsDateTimePicker:x},computed:{totalQuantities(){return this.products.length>0?this.products.map(e=>e.quantity).reduce((e,a)=>e+a):0},totalPurchasePrice(){return this.products.length>0?this.products.map(e=>e.total_purchase_price).reduce((e,a)=>e+a):0},totalSalePrice(){return this.products.length>0?this.products.map(e=>e.total_price).reduce((e,a)=>e+a):0},totalProfit(){return this.products.length>0?this.products.map(e=>e.total_price-e.total_purchase_price).reduce((e,a)=>e+a):0},totalTax(){return this.products.length>0?this.products.map(e=>e.tax_value).reduce((e,a)=>e+a):0}},methods:{__:l,nsCurrency:f,printSaleReport(){this.$htmlToPaper("profit-report")},setStartDate(e){this.startDate=e.format()},async selectCategories(){try{const e=await p("/api/categories",this.categoryField.label,this.categoryField.value);this.categoryField.value=e.values,this.categoryNames=e.labels,this.loadReport()}catch(e){if(e!==!1)return d.error(l("An error has occured while loading the categories")).subscribe()}},async selectUnit(){try{const e=await p("/api/units",this.unitField.label,this.unitField.value);this.unitField.value=e.values,this.unitNames=e.labels,this.loadReport()}catch(e){if(e!==!1)return d.error(l("An error has occured while loading the units")).subscribe()}},loadReport(){if(this.startDateField.value===null||this.endDateField.value===null)return d.error(l("Unable to proceed. Select a correct time range.")).subscribe();const e=c(this.startDateField.value);if(c(this.endDateField.value).isBefore(e))return d.error(l("Unable to proceed. The current time range is not valid.")).subscribe();m.post("/api/reports/profit-report",{startDate:this.startDateField.value,endDate:this.endDateField.value,categories:this.categoryField.value,units:this.unitField.value}).subscribe({next:n=>{this.products=n},error:n=>{d.error(n.message).subscribe()}})},setEndDate(e){this.endDate=e.format()}}},k={id:"report-section",class:"px-4"},P={class:"flex -mx-2"},N={class:"px-2"},R={class:"px-2"},S={class:"px-2"},U=t("i",{class:"las la-sync-alt text-xl"},null,-1),Y={class:"pl-2"},M={class:"px-2"},B=t("i",{class:"las la-print text-xl"},null,-1),T={class:"pl-2"},j={class:"px-2"},A=t("i",{class:"las la-filter text-xl"},null,-1),H={class:"pl-2"},L={class:"px-2"},E=t("i",{class:"las la-filter text-xl"},null,-1),Q={class:"pl-2"},q={id:"profit-report",class:"anim-duration-500 fade-in-entrance"},O={class:"flex w-full"},V={class:"my-4 flex justify-between w-full"},z={class:"text-secondary"},G={class:"pb-1 border-b border-dashed"},I={class:"pb-1 border-b border-dashed"},J={class:"pb-1 border-b border-dashed"},K=["src","alt"],W={class:"shadow rounded my-4"},X={class:"ns-box"},Z={class:"border-b ns-box-body"},$={class:"table ns-table w-full"},tt={class:"border p-2 text-left"},et={width:"150",class:"text-right border p-2"},st={width:"150",class:"text-right border p-2"},rt={width:"150",class:"text-right border p-2"},at={width:"150",class:"text-right border p-2"},ot={width:"150",class:"text-right border p-2"},it={width:"150",class:"text-right border p-2"},lt={class:"p-2 border border-box-edge"},nt={class:"p-2 border text-right border-box-edge"},dt={class:"p-2 border text-right border-box-edge"},ct={class:"p-2 border text-right border-box-edge"},ut={class:"p-2 border text-right border-box-edge"},_t={class:"p-2 border text-right border-box-edge"},ht={class:"p-2 border text-right border-box-edge"},pt={class:"font-semibold"},bt=t("td",{colspan:"2",class:"p-2 border"},null,-1),mt={class:"p-2 border text-right"},gt={class:"p-2 border text-right"},xt={class:"p-2 border text-right"},ft={class:"p-2 border text-right"},yt={class:"p-2 border text-right"};function vt(e,a,n,wt,i,s){const h=v("ns-field");return u(),_("div",k,[t("div",P,[t("div",N,[b(h,{field:i.startDateField},null,8,["field"])]),t("div",R,[b(h,{field:i.endDateField},null,8,["field"])]),t("div",S,[t("button",{onClick:a[0]||(a[0]=o=>s.loadReport()),class:"rounded flex justify-between bg-input-background hover:bg-input-button-hover shadow py-1 items-center text-primary px-2"},[U,t("span",Y,r(s.__("Load")),1)])]),t("div",M,[t("button",{onClick:a[1]||(a[1]=o=>s.printSaleReport()),class:"rounded flex justify-between bg-input-background hover:bg-input-button-hover shadow py-1 items-center text-primary px-2"},[B,t("span",T,r(s.__("Print")),1)])]),t("div",j,[t("button",{onClick:a[2]||(a[2]=o=>s.selectCategories()),class:"rounded flex justify-between bg-input-background hover:bg-input-button-hover shadow py-1 items-center text-primary px-2"},[A,t("span",H,r(s.__("Category"))+": "+r(i.categoryNames||s.__("All Categories")),1)])]),t("div",L,[t("button",{onClick:a[3]||(a[3]=o=>s.selectUnit()),class:"rounded flex justify-between bg-input-background hover:bg-input-button-hover shadow py-1 items-center text-primary px-2"},[E,t("span",Q,r(s.__("Unit"))+": "+r(i.unitNames||s.__("All Units")),1)])])]),t("div",q,[t("div",O,[t("div",V,[t("div",z,[t("ul",null,[t("li",G,r(s.__("Range : {date1} — {date2}").replace("{date1}",i.startDateField.value).replace("{date2}",i.endDateField.value)),1),t("li",I,r(s.__("Document : Profit Report")),1),t("li",J,r(s.__("By : {user}").replace("{user}",i.ns.user.username)),1)])]),t("div",null,[t("img",{class:"w-24",src:n.storeLogo,alt:n.storeName},null,8,K)])])]),t("div",W,[t("div",X,[t("div",Z,[t("table",$,[t("thead",null,[t("tr",null,[t("th",tt,r(s.__("Product")),1),t("th",et,r(s.__("Unit")),1),t("th",st,r(s.__("Quantity")),1),t("th",rt,r(s.__("Purchase Price")),1),t("th",at,r(s.__("Sale Price")),1),t("th",ot,r(s.__("Taxes")),1),t("th",it,r(s.__("Profit")),1)])]),t("tbody",null,[(u(!0),_(w,null,D(i.products,o=>(u(),_("tr",{key:o.id,class:F(o.total_price-o.total_purchase_price<0?"bg-error-primary":"bg-box-background")},[t("td",lt,r(o.name),1),t("td",nt,r(o.unit_name),1),t("td",dt,r(o.quantity),1),t("td",ct,r(s.nsCurrency(o.total_purchase_price)),1),t("td",ut,r(s.nsCurrency(o.total_price)),1),t("td",_t,r(s.nsCurrency(o.tax_value)),1),t("td",ht,r(s.nsCurrency(o.total_price-o.total_purchase_price)),1)],2))),128))]),t("tfoot",pt,[t("tr",null,[bt,t("td",mt,r(s.totalQuantities),1),t("td",gt,r(s.nsCurrency(s.totalPurchasePrice)),1),t("td",xt,r(s.nsCurrency(s.totalSalePrice)),1),t("td",ft,r(s.nsCurrency(s.totalTax)),1),t("td",yt,r(s.nsCurrency(s.totalProfit)),1)])])])])])])])])}const Bt=y(C,[["render",vt]]);export{Bt as default}; diff --git a/public/build/assets/ns-prompt-popup-BbWKrSku.js b/public/build/assets/ns-prompt-popup-C2dK5WQb.js similarity index 98% rename from public/build/assets/ns-prompt-popup-BbWKrSku.js rename to public/build/assets/ns-prompt-popup-C2dK5WQb.js index e8ce5a84f..4a3be0ab3 100644 --- a/public/build/assets/ns-prompt-popup-BbWKrSku.js +++ b/public/build/assets/ns-prompt-popup-C2dK5WQb.js @@ -1,11 +1,11 @@ -import{g as yE,c as vn,d as ak,_ as Zn}from"./currency-ZXKMLAC0.js";import{u as xE,A as EE,V as DE,c as IE,D as SE,G as TE,I as ME,J as BE,K as NE,M as PE,N as LE,O as OE,Q as zE,y as RE,W as jE,s as FE,v as ck,X as VE,w as lk,x as HE,p as UE,d as dk}from"./tax-BACo6kIE.js";import{N as qE,O as GE,P as WE,Q as $E,R as KE,S as YE,T as QE,F as He,M as ZE,U as JE,V as XE,W as tD,X as eD,Y as nD,Z as oD,_ as iD,$ as rD,a0 as sD,a1 as aD,a2 as cD,a3 as lD,a4 as dD,a5 as hD,x as uD,h as hk,f as te,c as lt,b as it,a6 as gD,a7 as pD,a8 as mD,a9 as fD,aa as kD,j as Wa,g as yo,ab as bD,a as wD,d as AD,ac as CD,ad as _D,ae as vD,af as yD,ag as xD,ah as ED,ai as DD,aj as ID,ak as SD,al as TD,am as MD,an as BD,J as ND,y as PD,ao as LD,ap as OD,aq as zD,v as RD,ar as jD,as as FD,at as VD,au as HD,av as UD,aw as qD,ax as GD,ay as WD,m as $D,az as KD,aA as YD,aB as QD,p as ZD,n as ne,I as JD,D as XD,aC as t5,aD as e5,aE as n5,aF as o5,aG as i5,aH as r5,K as s5,aI as a5,aJ as c5,aK as l5,aL as d5,L as h5,aM as u5,o as ct,G as g5,z as p5,aN as m5,E as f5,aO as k5,q as b5,aP as w5,i as A5,aQ as C5,e as un,B as Ve,r as Qn,H as _5,k as v5,aR as y5,aS as x5,aT as E5,aU as D5,aV as I5,l as S5,aW as T5,s as M5,aX as B5,aY as N5,aZ as P5,t as Ut,a_ as L5,a$ as O5,b0 as z5,b1 as R5,b2 as j5,b3 as F5,b4 as V5,b5 as H5,u as U5,b6 as q5,b7 as G5,b8 as W5,b9 as $5,ba as K5,bb as Y5,bc as Q5,A as Z5,bd as J5,be as X5,bf as t4,bg as e4,w as uk,bh as n4,C as gk,bi as o4,bj as i4}from"./runtime-core.esm-bundler-DCfIpxDt.js";import{_ as Je}from"./_plugin-vue_export-helper-DlAUqK2U.js";/** +import{g as yE,c as vn,b as ak,_ as Zn}from"./currency-lOMYG1Wf.js";import{j as xE,m as EE,V as DE,c as IE,o as SE,q as TE,r as ME,s as BE,t as NE,u as PE,x as LE,y as OE,z as zE,l as RE,A as jE,i as FE,v as ck,C as VE,w as lk,k as HE,p as UE,g as dk}from"./bootstrap-Bpe5LRJd.js";import{M as qE,N as GE,O as WE,P as $E,Q as KE,R as YE,S as QE,F as He,L as ZE,T as JE,U as XE,V as tD,W as eD,X as nD,Y as oD,Z as iD,_ as rD,$ as sD,a0 as aD,a1 as cD,a2 as lD,a3 as dD,a4 as hD,v as uD,g as hk,e as te,c as lt,a as it,a5 as gD,a6 as pD,a7 as mD,a8 as fD,a9 as kD,i as Wa,f as yo,aa as bD,d as wD,m as AD,ab as CD,ac as _D,ad as vD,ae as yD,af as xD,ag as ED,ah as DD,ai as ID,aj as SD,ak as TD,al as MD,am as BD,I as ND,x as PD,an as LD,ao as OD,ap as zD,q as RD,aq as jD,ar as FD,as as VD,at as HD,au as UD,av as qD,aw as GD,ax as WD,ay as $D,az as KD,aA as YD,aB as QD,l as ZD,n as ne,H as JD,C as XD,aC as t5,aD as e5,aE as n5,aF as o5,aG as i5,aH as r5,J as s5,aI as a5,aJ as c5,aK as l5,aL as d5,K as h5,aM as u5,o as ct,E as g5,y as p5,aN as m5,D as f5,aO as k5,p as b5,aP as w5,h as A5,aQ as C5,b as un,A as Ve,r as Qn,G as _5,j as v5,aR as y5,aS as x5,aT as E5,aU as D5,aV as I5,k as S5,aW as T5,s as M5,aX as B5,aY as N5,aZ as P5,t as Ut,a_ as L5,a$ as O5,b0 as z5,b1 as R5,b2 as j5,b3 as F5,b4 as V5,b5 as H5,u as U5,b6 as q5,b7 as G5,b8 as W5,b9 as $5,ba as K5,bb as Y5,bc as Q5,z as Z5,bd as J5,be as X5,bf as t4,bg as e4,w as uk,bh as n4,B as gk,bi as o4,bj as i4}from"./runtime-core.esm-bundler-RT2b-_3S.js";import{_ as Je}from"./_plugin-vue_export-helper-DlAUqK2U.js";/** * vue v3.4.18 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **/const r4=()=>{},s4=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:qE,BaseTransitionPropsValidators:GE,Comment:WE,DeprecationTypes:$E,EffectScope:KE,ErrorCodes:YE,ErrorTypeStrings:QE,Fragment:He,KeepAlive:ZE,ReactiveEffect:JE,Static:XE,Suspense:tD,Teleport:eD,Text:nD,TrackOpTypes:oD,Transition:xE,TransitionGroup:EE,TriggerOpTypes:iD,VueElement:DE,assertNumber:rD,callWithAsyncErrorHandling:sD,callWithErrorHandling:aD,camelize:cD,capitalize:lD,cloneVNode:dD,compatUtils:hD,compile:r4,computed:uD,createApp:IE,createBlock:hk,createCommentVNode:te,createElementBlock:lt,createElementVNode:it,createHydrationRenderer:gD,createPropsRestProxy:pD,createRenderer:mD,createSSRApp:SE,createSlots:fD,createStaticVNode:kD,createTextVNode:Wa,createVNode:yo,customRef:bD,defineAsyncComponent:wD,defineComponent:AD,defineCustomElement:TE,defineEmits:CD,defineExpose:_D,defineModel:vD,defineOptions:yD,defineProps:xD,defineSSRCustomElement:ME,defineSlots:ED,devtools:DD,effect:ID,effectScope:SD,getCurrentInstance:TD,getCurrentScope:MD,getTransitionRawChildren:BD,guardReactiveProps:ND,h:PD,handleError:LD,hasInjectionContext:OD,hydrate:BE,initCustomFormatter:zD,initDirectivesForSSR:NE,inject:RD,isMemoSame:jD,isProxy:FD,isReactive:VD,isReadonly:HD,isRef:UD,isRuntimeOnly:qD,isShallow:GD,isVNode:WD,markRaw:$D,mergeDefaults:KD,mergeModels:YD,mergeProps:QD,nextTick:ZD,normalizeClass:ne,normalizeProps:JD,normalizeStyle:XD,onActivated:t5,onBeforeMount:e5,onBeforeUnmount:n5,onBeforeUpdate:o5,onDeactivated:i5,onErrorCaptured:r5,onMounted:s5,onRenderTracked:a5,onRenderTriggered:c5,onScopeDispose:l5,onServerPrefetch:d5,onUnmounted:h5,onUpdated:u5,openBlock:ct,popScopeId:g5,provide:p5,proxyRefs:m5,pushScopeId:f5,queuePostFlushCb:k5,reactive:b5,readonly:w5,ref:A5,registerRuntimeCompiler:C5,render:PE,renderList:un,renderSlot:Ve,resolveComponent:Qn,resolveDirective:_5,resolveDynamicComponent:v5,resolveFilter:y5,resolveTransitionHooks:x5,setBlockTracking:E5,setDevtoolsHook:D5,setTransitionHooks:I5,shallowReactive:S5,shallowReadonly:T5,shallowRef:M5,ssrContextKey:B5,ssrUtils:N5,stop:P5,toDisplayString:Ut,toHandlerKey:L5,toHandlers:O5,toRaw:z5,toRef:R5,toRefs:j5,toValue:F5,transformVNodeArgs:V5,triggerRef:H5,unref:U5,useAttrs:q5,useCssModule:LE,useCssVars:OE,useModel:G5,useSSRContext:W5,useSlots:$5,useTransitionState:K5,vModelCheckbox:zE,vModelDynamic:RE,vModelRadio:jE,vModelSelect:FE,vModelText:ck,vShow:VE,version:Y5,warn:Q5,watch:Z5,watchEffect:J5,watchPostEffect:X5,watchSyncEffect:t4,withAsyncContext:e4,withCtx:uk,withDefaults:n4,withDirectives:gk,withKeys:lk,withMemo:o4,withModifiers:HE,withScopeId:i4},Symbol.toStringTag,{value:"Module"}));var pk={exports:{}};const a4=yE(s4);/*! * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md. - */(function(P,F){(function(Q,J){P.exports=J(a4)})(self,Q=>(()=>{var J={976:x=>{x.exports=Q}},N={};function K(x){var m=N[x];if(m!==void 0)return m.exports;var y=N[x]={exports:{}};return J[x](y,y.exports,K),y.exports}K.d=(x,m)=>{for(var y in m)K.o(m,y)&&!K.o(x,y)&&Object.defineProperty(x,y,{enumerable:!0,get:m[y]})},K.o=(x,m)=>Object.prototype.hasOwnProperty.call(x,m);var v={};return(()=>{K.d(v,{default:()=>Eo});var x=K(976);const m=function(U){var ht=typeof U;return U!=null&&(ht=="object"||ht=="function")},y=typeof vn=="object"&&vn&&vn.Object===Object&&vn;var D=typeof self=="object"&&self&&self.Object===Object&&self;const C=y||D||Function("return this")(),f=function(){return C.Date.now()};var w=/\s/;const I=function(U){for(var ht=U.length;ht--&&w.test(U.charAt(ht)););return ht};var S=/^\s+/;const T=function(U){return U&&U.slice(0,I(U)+1).replace(S,"")},L=C.Symbol;var j=Object.prototype,H=j.hasOwnProperty,W=j.toString,X=L?L.toStringTag:void 0;const At=function(U){var ht=H.call(U,X),zt=U[X];try{U[X]=void 0;var oe=!0}catch{}var Se=W.call(U);return oe&&(ht?U[X]=zt:delete U[X]),Se};var Z=Object.prototype.toString;const rt=function(U){return Z.call(U)};var _=L?L.toStringTag:void 0;const Y=function(U){return U==null?U===void 0?"[object Undefined]":"[object Null]":_&&_ in Object(U)?At(U):rt(U)},Et=function(U){return U!=null&&typeof U=="object"},Mt=function(U){return typeof U=="symbol"||Et(U)&&Y(U)=="[object Symbol]"};var It=/^[-+]0x[0-9a-f]+$/i,Ue=/^0b[01]+$/i,De=/^0o[0-7]+$/i,fe=parseInt;const Xe=function(U){if(typeof U=="number")return U;if(Mt(U))return NaN;if(m(U)){var ht=typeof U.valueOf=="function"?U.valueOf():U;U=m(ht)?ht+"":ht}if(typeof U!="string")return U===0?U:+U;U=T(U);var zt=Ue.test(U);return zt||De.test(U)?fe(U.slice(2),zt?2:8):It.test(U)?NaN:+U};var Ie=Math.max,fi=Math.min;const kt=function(U,ht,zt){var oe,Se,bt,qe,Yt,ke,be=0,Do=!1,yn=!1,mt=!0;if(typeof U!="function")throw new TypeError("Expected a function");function xn(Ft){var St=oe,Gt=Se;return oe=Se=void 0,be=Ft,qe=U.apply(Gt,St)}function Ir(Ft){return be=Ft,Yt=setTimeout(En,ht),Do?xn(Ft):qe}function ki(Ft){var St=Ft-ke;return ke===void 0||St>=ht||St<0||yn&&Ft-be>=bt}function En(){var Ft=f();if(ki(Ft))return Io(Ft);Yt=setTimeout(En,function(St){var Gt=ht-(St-ke);return yn?fi(Gt,bt-(St-be)):Gt}(Ft))}function Io(Ft){return Yt=void 0,mt&&oe?xn(Ft):(oe=Se=void 0,qe)}function So(){var Ft=f(),St=ki(Ft);if(oe=arguments,Se=this,ke=Ft,St){if(Yt===void 0)return Ir(ke);if(yn)return clearTimeout(Yt),Yt=setTimeout(En,ht),xn(ke)}return Yt===void 0&&(Yt=setTimeout(En,ht)),qe}return ht=Xe(ht)||0,m(zt)&&(Do=!!zt.leading,bt=(yn="maxWait"in zt)?Ie(Xe(zt.maxWait)||0,ht):bt,mt="trailing"in zt?!!zt.trailing:mt),So.cancel=function(){Yt!==void 0&&clearTimeout(Yt),be=0,oe=ke=Se=Yt=void 0},So.flush=function(){return Yt===void 0?qe:Io(f())},So},xo=(0,x.defineComponent)({name:"Ckeditor",model:{prop:"modelValue",event:"update:modelValue"},props:{editor:{type:Function,required:!0},config:{type:Object,default:()=>({})},modelValue:{type:String,default:""},tagName:{type:String,default:"div"},disabled:{type:Boolean,default:!1},disableTwoWayDataBinding:{type:Boolean,default:!1}},emits:["ready","destroy","blur","focus","input","update:modelValue"],data:()=>({instance:null,lastEditorData:null}),watch:{modelValue(U){this.instance&&U!==this.lastEditorData&&this.instance.data.set(U)},disabled(U){U?this.instance.enableReadOnlyMode("Integration Sample"):this.instance.disableReadOnlyMode("Integration Sample")}},created(){const{CKEDITOR_VERSION:U}=window;if(U){const[ht]=U.split(".").map(Number);ht<37&&console.warn("The component requires using CKEditor 5 in version 37 or higher.")}else console.warn('Cannot find the "CKEDITOR_VERSION" in the "window" scope.')},mounted(){const U=Object.assign({},this.config);this.modelValue&&(U.initialData=this.modelValue),this.editor.create(this.$el,U).then(ht=>{this.instance=(0,x.markRaw)(ht),this.setUpEditorEvents(),this.modelValue!==U.initialData&&ht.data.set(this.modelValue),this.disabled&&ht.enableReadOnlyMode("Integration Sample"),this.$emit("ready",ht)}).catch(ht=>{console.error(ht)})},beforeUnmount(){this.instance&&(this.instance.destroy(),this.instance=null),this.$emit("destroy",this.instance)},methods:{setUpEditorEvents(){const U=this.instance,ht=kt(zt=>{if(this.disableTwoWayDataBinding)return;const oe=this.lastEditorData=U.data.get();this.$emit("update:modelValue",oe,zt,U),this.$emit("input",oe,zt,U)},300,{leading:!0});U.model.document.on("change:data",ht),U.editing.view.document.on("focus",zt=>{this.$emit("focus",zt,U)}),U.editing.view.document.on("blur",zt=>{this.$emit("blur",zt,U)})}},render(){return(0,x.h)(this.tagName)}});if(!x.version||!x.version.startsWith("3."))throw new Error("The CKEditor plugin works only with Vue 3+. For more information, please refer to https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/frameworks/vuejs-v3.html");const Eo={install(U){U.component("Ckeditor",xo)},component:xo}})(),v=v.default})())})(pk);var c4=pk.exports;const l4=ak(c4);var Dr={exports:{}};Dr.exports;(function(P,F){(function(Q){const J=Q.en=Q.en||{};J.dictionary=Object.assign(J.dictionary||{},{"%0 of %1":"%0 of %1",Accept:"Accept","Align cell text to the bottom":"Align cell text to the bottom","Align cell text to the center":"Align cell text to the center","Align cell text to the left":"Align cell text to the left","Align cell text to the middle":"Align cell text to the middle","Align cell text to the right":"Align cell text to the right","Align cell text to the top":"Align cell text to the top","Align table to the left":"Align table to the left","Align table to the right":"Align table to the right",Alignment:"Alignment",Aquamarine:"Aquamarine",Background:"Background",Black:"Black","Block quote":"Block quote",Blue:"Blue",Bold:"Bold",Border:"Border","Break text":"Break text","Bulleted List":"Bulleted List","Bulleted list styles toolbar":"Bulleted list styles toolbar",Cancel:"Cancel","Cannot access default workspace.":"Cannot access default workspace.","Cannot determine a category for the uploaded file.":"Cannot determine a category for the uploaded file.","Cannot upload file:":"Cannot upload file:","Caption for image: %0":"Caption for image: %0","Caption for the image":"Caption for the image","Cell properties":"Cell properties","Center table":"Center table","Centered image":"Centered image","Change image text alternative":"Change image text alternative","Choose heading":"Choose heading",Circle:"Circle",Clear:"Clear","Click to edit block":"Click to edit block",Close:"Close",Code:"Code",Color:"Color","Color picker":"Color picker",Column:"Column","Could not insert image at the current position.":"Could not insert image at the current position.","Could not obtain resized image URL.":"Could not obtain resized image URL.",Dashed:"Dashed",Decimal:"Decimal","Decimal with leading zero":"Decimal with leading zero","Decrease indent":"Decrease indent","Delete column":"Delete column","Delete row":"Delete row","Dim grey":"Dim grey",Dimensions:"Dimensions",Disc:"Disc",Dotted:"Dotted",Double:"Double",Downloadable:"Downloadable","Drag to move":"Drag to move","Dropdown toolbar":"Dropdown toolbar","Edit block":"Edit block","Edit image":"Edit image","Edit link":"Edit link","Editor block content toolbar":"Editor block content toolbar","Editor contextual toolbar":"Editor contextual toolbar","Editor dialog":"Editor dialog","Editor editing area: %0":"Editor editing area: %0","Editor toolbar":"Editor toolbar","Enter image caption":"Enter image caption","Enter table caption":"Enter table caption","Failed to determine category of edited image.":"Failed to determine category of edited image.","Full size image":"Full size image",Green:"Green",Grey:"Grey",Groove:"Groove","Header column":"Header column","Header row":"Header row",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading 4":"Heading 4","Heading 5":"Heading 5","Heading 6":"Heading 6",Height:"Height",HEX:"HEX","Horizontal text alignment toolbar":"Horizontal text alignment toolbar","Image resize list":"Image resize list","Image toolbar":"Image toolbar","image widget":"image widget","In line":"In line","Increase indent":"Increase indent",Insert:"Insert","Insert column left":"Insert column left","Insert column right":"Insert column right","Insert image":"Insert image","Insert image or file":"Insert image or file","Insert image via URL":"Insert image via URL","Insert image with file manager":"Insert image with file manager","Insert media":"Insert media","Insert paragraph after block":"Insert paragraph after block","Insert paragraph before block":"Insert paragraph before block","Insert row above":"Insert row above","Insert row below":"Insert row below","Insert table":"Insert table","Insert with file manager":"Insert with file manager","Inserting image failed":"Inserting image failed",Inset:"Inset",Italic:"Italic","Justify cell text":"Justify cell text","Left aligned image":"Left aligned image","Light blue":"Light blue","Light green":"Light green","Light grey":"Light grey",Link:"Link","Link image":"Link image","Link URL":"Link URL","List properties":"List properties","Lower-latin":"Lower-latin","Lower–roman":"Lower–roman","Media toolbar":"Media toolbar","Media URL":"Media URL","media widget":"media widget","Merge cell down":"Merge cell down","Merge cell left":"Merge cell left","Merge cell right":"Merge cell right","Merge cell up":"Merge cell up","Merge cells":"Merge cells",Next:"Next","No results found":"No results found","No searchable items":"No searchable items",None:"None","Numbered List":"Numbered List","Numbered list styles toolbar":"Numbered list styles toolbar","Open file manager":"Open file manager","Open in a new tab":"Open in a new tab","Open link in new tab":"Open link in new tab","Open media in new tab":"Open media in new tab",Orange:"Orange",Original:"Original",Outset:"Outset",Padding:"Padding",Paragraph:"Paragraph","Paste the media URL in the input.":"Paste the media URL in the input.","Press Enter to type after or press Shift + Enter to type before the widget":"Press Enter to type after or press Shift + Enter to type before the widget",Previous:"Previous","Processing the edited image.":"Processing the edited image.",Purple:"Purple",Red:"Red",Redo:"Redo","Remove color":"Remove color","Replace from computer":"Replace from computer","Replace image":"Replace image","Replace image from computer":"Replace image from computer","Replace image with file manager":"Replace image with file manager","Replace with file manager":"Replace with file manager","Resize image":"Resize image","Resize image to %0":"Resize image to %0","Resize image to the original size":"Resize image to the original size","Restore default":"Restore default","Reversed order":"Reversed order","Rich Text Editor":"Rich Text Editor",Ridge:"Ridge","Right aligned image":"Right aligned image",Row:"Row",Save:"Save","Select all":"Select all","Select column":"Select column","Select row":"Select row","Selecting resized image failed":"Selecting resized image failed","Server failed to process the image.":"Server failed to process the image.","Show more items":"Show more items","Side image":"Side image",Solid:"Solid","Split cell horizontally":"Split cell horizontally","Split cell vertically":"Split cell vertically",Square:"Square","Start at":"Start at","Start index must be greater than 0.":"Start index must be greater than 0.",Strikethrough:"Strikethrough",Style:"Style",Subscript:"Subscript",Superscript:"Superscript","Table alignment toolbar":"Table alignment toolbar","Table cell text alignment":"Table cell text alignment","Table properties":"Table properties","Table toolbar":"Table toolbar","Text alternative":"Text alternative",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".',"The URL must not be empty.":"The URL must not be empty.",'The value is invalid. Try "10px" or "2em" or simply "2".':'The value is invalid. Try "10px" or "2em" or simply "2".',"This link has no URL":"This link has no URL","This media URL is not supported.":"This media URL is not supported.","Tip: Paste the URL into the content to embed faster.":"Tip: Paste the URL into the content to embed faster.","To-do List":"To-do List","Toggle caption off":"Toggle caption off","Toggle caption on":"Toggle caption on","Toggle the circle list style":"Toggle the circle list style","Toggle the decimal list style":"Toggle the decimal list style","Toggle the decimal with leading zero list style":"Toggle the decimal with leading zero list style","Toggle the disc list style":"Toggle the disc list style","Toggle the lower–latin list style":"Toggle the lower–latin list style","Toggle the lower–roman list style":"Toggle the lower–roman list style","Toggle the square list style":"Toggle the square list style","Toggle the upper–latin list style":"Toggle the upper–latin list style","Toggle the upper–roman list style":"Toggle the upper–roman list style",Turquoise:"Turquoise","Type or paste your content here.":"Type or paste your content here.","Type your title":"Type your title",Underline:"Underline",Undo:"Undo",Unlink:"Unlink",Update:"Update","Update image URL":"Update image URL","Upload failed":"Upload failed","Upload from computer":"Upload from computer","Upload image from computer":"Upload image from computer","Upload in progress":"Upload in progress","Upper-latin":"Upper-latin","Upper-roman":"Upper-roman","Vertical text alignment toolbar":"Vertical text alignment toolbar",White:"White","Widget toolbar":"Widget toolbar",Width:"Width","Wrap text":"Wrap text",Yellow:"Yellow"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),function(Q,J){P.exports=J()}(self,()=>(()=>{var Q={6944:(v,x,m)=>{const y=m(6644),D={};for(const f of Object.keys(y))D[y[f]]=f;const C={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};v.exports=C;for(const f of Object.keys(C)){if(!("channels"in C[f]))throw new Error("missing channels property: "+f);if(!("labels"in C[f]))throw new Error("missing channel labels property: "+f);if(C[f].labels.length!==C[f].channels)throw new Error("channel and label counts mismatch: "+f);const{channels:w,labels:I}=C[f];delete C[f].channels,delete C[f].labels,Object.defineProperty(C[f],"channels",{value:w}),Object.defineProperty(C[f],"labels",{value:I})}C.rgb.hsl=function(f){const w=f[0]/255,I=f[1]/255,S=f[2]/255,T=Math.min(w,I,S),L=Math.max(w,I,S),j=L-T;let H,W;L===T?H=0:w===L?H=(I-S)/j:I===L?H=2+(S-w)/j:S===L&&(H=4+(w-I)/j),H=Math.min(60*H,360),H<0&&(H+=360);const X=(T+L)/2;return W=L===T?0:X<=.5?j/(L+T):j/(2-L-T),[H,100*W,100*X]},C.rgb.hsv=function(f){let w,I,S,T,L;const j=f[0]/255,H=f[1]/255,W=f[2]/255,X=Math.max(j,H,W),At=X-Math.min(j,H,W),Z=function(rt){return(X-rt)/6/At+.5};return At===0?(T=0,L=0):(L=At/X,w=Z(j),I=Z(H),S=Z(W),j===X?T=S-I:H===X?T=.3333333333333333+w-S:W===X&&(T=.6666666666666666+I-w),T<0?T+=1:T>1&&(T-=1)),[360*T,100*L,100*X]},C.rgb.hwb=function(f){const w=f[0],I=f[1];let S=f[2];const T=C.rgb.hsl(f)[0],L=1/255*Math.min(w,Math.min(I,S));return S=1-.00392156862745098*Math.max(w,Math.max(I,S)),[T,100*L,100*S]},C.rgb.cmyk=function(f){const w=f[0]/255,I=f[1]/255,S=f[2]/255,T=Math.min(1-w,1-I,1-S);return[100*((1-w-T)/(1-T)||0),100*((1-I-T)/(1-T)||0),100*((1-S-T)/(1-T)||0),100*T]},C.rgb.keyword=function(f){const w=D[f];if(w)return w;let I,S=1/0;for(const j of Object.keys(y)){const H=y[j],W=(L=H,((T=f)[0]-L[0])**2+(T[1]-L[1])**2+(T[2]-L[2])**2);W.04045?((w+.055)/1.055)**2.4:w/12.92,I=I>.04045?((I+.055)/1.055)**2.4:I/12.92,S=S>.04045?((S+.055)/1.055)**2.4:S/12.92,[100*(.4124*w+.3576*I+.1805*S),100*(.2126*w+.7152*I+.0722*S),100*(.0193*w+.1192*I+.9505*S)]},C.rgb.lab=function(f){const w=C.rgb.xyz(f);let I=w[0],S=w[1],T=w[2];return I/=95.047,S/=100,T/=108.883,I=I>.008856?I**.3333333333333333:7.787*I+.13793103448275862,S=S>.008856?S**.3333333333333333:7.787*S+.13793103448275862,T=T>.008856?T**.3333333333333333:7.787*T+.13793103448275862,[116*S-16,500*(I-S),200*(S-T)]},C.hsl.rgb=function(f){const w=f[0]/360,I=f[1]/100,S=f[2]/100;let T,L,j;if(I===0)return j=255*S,[j,j,j];T=S<.5?S*(1+I):S+I-S*I;const H=2*S-T,W=[0,0,0];for(let X=0;X<3;X++)L=w+.3333333333333333*-(X-1),L<0&&L++,L>1&&L--,j=6*L<1?H+6*(T-H)*L:2*L<1?T:3*L<2?H+(T-H)*(.6666666666666666-L)*6:H,W[X]=255*j;return W},C.hsl.hsv=function(f){const w=f[0];let I=f[1]/100,S=f[2]/100,T=I;const L=Math.max(S,.01);return S*=2,I*=S<=1?S:2-S,T*=L<=1?L:2-L,[w,100*(S===0?2*T/(L+T):2*I/(S+I)),100*((S+I)/2)]},C.hsv.rgb=function(f){const w=f[0]/60,I=f[1]/100;let S=f[2]/100;const T=Math.floor(w)%6,L=w-Math.floor(w),j=255*S*(1-I),H=255*S*(1-I*L),W=255*S*(1-I*(1-L));switch(S*=255,T){case 0:return[S,W,j];case 1:return[H,S,j];case 2:return[j,S,W];case 3:return[j,H,S];case 4:return[W,j,S];case 5:return[S,j,H]}},C.hsv.hsl=function(f){const w=f[0],I=f[1]/100,S=f[2]/100,T=Math.max(S,.01);let L,j;j=(2-I)*S;const H=(2-I)*T;return L=I*T,L/=H<=1?H:2-H,L=L||0,j/=2,[w,100*L,100*j]},C.hwb.rgb=function(f){const w=f[0]/360;let I=f[1]/100,S=f[2]/100;const T=I+S;let L;T>1&&(I/=T,S/=T);const j=Math.floor(6*w),H=1-S;L=6*w-j,1&j&&(L=1-L);const W=I+L*(H-I);let X,At,Z;switch(j){default:case 6:case 0:X=H,At=W,Z=I;break;case 1:X=W,At=H,Z=I;break;case 2:X=I,At=H,Z=W;break;case 3:X=I,At=W,Z=H;break;case 4:X=W,At=I,Z=H;break;case 5:X=H,At=I,Z=W}return[255*X,255*At,255*Z]},C.cmyk.rgb=function(f){const w=f[0]/100,I=f[1]/100,S=f[2]/100,T=f[3]/100;return[255*(1-Math.min(1,w*(1-T)+T)),255*(1-Math.min(1,I*(1-T)+T)),255*(1-Math.min(1,S*(1-T)+T))]},C.xyz.rgb=function(f){const w=f[0]/100,I=f[1]/100,S=f[2]/100;let T,L,j;return T=3.2406*w+-1.5372*I+-.4986*S,L=-.9689*w+1.8758*I+.0415*S,j=.0557*w+-.204*I+1.057*S,T=T>.0031308?1.055*T**.4166666666666667-.055:12.92*T,L=L>.0031308?1.055*L**.4166666666666667-.055:12.92*L,j=j>.0031308?1.055*j**.4166666666666667-.055:12.92*j,T=Math.min(Math.max(0,T),1),L=Math.min(Math.max(0,L),1),j=Math.min(Math.max(0,j),1),[255*T,255*L,255*j]},C.xyz.lab=function(f){let w=f[0],I=f[1],S=f[2];return w/=95.047,I/=100,S/=108.883,w=w>.008856?w**.3333333333333333:7.787*w+.13793103448275862,I=I>.008856?I**.3333333333333333:7.787*I+.13793103448275862,S=S>.008856?S**.3333333333333333:7.787*S+.13793103448275862,[116*I-16,500*(w-I),200*(I-S)]},C.lab.xyz=function(f){let w,I,S;I=(f[0]+16)/116,w=f[1]/500+I,S=I-f[2]/200;const T=I**3,L=w**3,j=S**3;return I=T>.008856?T:(I-.13793103448275862)/7.787,w=L>.008856?L:(w-.13793103448275862)/7.787,S=j>.008856?j:(S-.13793103448275862)/7.787,w*=95.047,I*=100,S*=108.883,[w,I,S]},C.lab.lch=function(f){const w=f[0],I=f[1],S=f[2];let T;return T=360*Math.atan2(S,I)/2/Math.PI,T<0&&(T+=360),[w,Math.sqrt(I*I+S*S),T]},C.lch.lab=function(f){const w=f[0],I=f[1],S=f[2]/360*2*Math.PI;return[w,I*Math.cos(S),I*Math.sin(S)]},C.rgb.ansi16=function(f,w=null){const[I,S,T]=f;let L=w===null?C.rgb.hsv(f)[2]:w;if(L=Math.round(L/50),L===0)return 30;let j=30+(Math.round(T/255)<<2|Math.round(S/255)<<1|Math.round(I/255));return L===2&&(j+=60),j},C.hsv.ansi16=function(f){return C.rgb.ansi16(C.hsv.rgb(f),f[2])},C.rgb.ansi256=function(f){const w=f[0],I=f[1],S=f[2];return w===I&&I===S?w<8?16:w>248?231:Math.round((w-8)/247*24)+232:16+36*Math.round(w/255*5)+6*Math.round(I/255*5)+Math.round(S/255*5)},C.ansi16.rgb=function(f){let w=f%10;if(w===0||w===7)return f>50&&(w+=3.5),w=w/10.5*255,[w,w,w];const I=.5*(1+~~(f>50));return[(1&w)*I*255,(w>>1&1)*I*255,(w>>2&1)*I*255]},C.ansi256.rgb=function(f){if(f>=232){const I=10*(f-232)+8;return[I,I,I]}let w;return f-=16,[Math.floor(f/36)/5*255,Math.floor((w=f%36)/6)/5*255,w%6/5*255]},C.rgb.hex=function(f){const w=(((255&Math.round(f[0]))<<16)+((255&Math.round(f[1]))<<8)+(255&Math.round(f[2]))).toString(16).toUpperCase();return"000000".substring(w.length)+w},C.hex.rgb=function(f){const w=f.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!w)return[0,0,0];let I=w[0];w[0].length===3&&(I=I.split("").map(T=>T+T).join(""));const S=parseInt(I,16);return[S>>16&255,S>>8&255,255&S]},C.rgb.hcg=function(f){const w=f[0]/255,I=f[1]/255,S=f[2]/255,T=Math.max(Math.max(w,I),S),L=Math.min(Math.min(w,I),S),j=T-L;let H,W;return H=j<1?L/(1-j):0,W=j<=0?0:T===w?(I-S)/j%6:T===I?2+(S-w)/j:4+(w-I)/j,W/=6,W%=1,[360*W,100*j,100*H]},C.hsl.hcg=function(f){const w=f[1]/100,I=f[2]/100,S=I<.5?2*w*I:2*w*(1-I);let T=0;return S<1&&(T=(I-.5*S)/(1-S)),[f[0],100*S,100*T]},C.hsv.hcg=function(f){const w=f[1]/100,I=f[2]/100,S=w*I;let T=0;return S<1&&(T=(I-S)/(1-S)),[f[0],100*S,100*T]},C.hcg.rgb=function(f){const w=f[0]/360,I=f[1]/100,S=f[2]/100;if(I===0)return[255*S,255*S,255*S];const T=[0,0,0],L=w%1*6,j=L%1,H=1-j;let W=0;switch(Math.floor(L)){case 0:T[0]=1,T[1]=j,T[2]=0;break;case 1:T[0]=H,T[1]=1,T[2]=0;break;case 2:T[0]=0,T[1]=1,T[2]=j;break;case 3:T[0]=0,T[1]=H,T[2]=1;break;case 4:T[0]=j,T[1]=0,T[2]=1;break;default:T[0]=1,T[1]=0,T[2]=H}return W=(1-I)*S,[255*(I*T[0]+W),255*(I*T[1]+W),255*(I*T[2]+W)]},C.hcg.hsv=function(f){const w=f[1]/100,I=w+f[2]/100*(1-w);let S=0;return I>0&&(S=w/I),[f[0],100*S,100*I]},C.hcg.hsl=function(f){const w=f[1]/100,I=f[2]/100*(1-w)+.5*w;let S=0;return I>0&&I<.5?S=w/(2*I):I>=.5&&I<1&&(S=w/(2*(1-I))),[f[0],100*S,100*I]},C.hcg.hwb=function(f){const w=f[1]/100,I=w+f[2]/100*(1-w);return[f[0],100*(I-w),100*(1-I)]},C.hwb.hcg=function(f){const w=f[1]/100,I=1-f[2]/100,S=I-w;let T=0;return S<1&&(T=(I-S)/(1-S)),[f[0],100*S,100*T]},C.apple.rgb=function(f){return[f[0]/65535*255,f[1]/65535*255,f[2]/65535*255]},C.rgb.apple=function(f){return[f[0]/255*65535,f[1]/255*65535,f[2]/255*65535]},C.gray.rgb=function(f){return[f[0]/100*255,f[0]/100*255,f[0]/100*255]},C.gray.hsl=function(f){return[0,0,f[0]]},C.gray.hsv=C.gray.hsl,C.gray.hwb=function(f){return[0,100,f[0]]},C.gray.cmyk=function(f){return[0,0,0,f[0]]},C.gray.lab=function(f){return[f[0],0,0]},C.gray.hex=function(f){const w=255&Math.round(f[0]/100*255),I=((w<<16)+(w<<8)+w).toString(16).toUpperCase();return"000000".substring(I.length)+I},C.rgb.gray=function(f){return[(f[0]+f[1]+f[2])/3/255*100]}},4416:(v,x,m)=>{const y=m(6944),D=m(2152),C={};Object.keys(y).forEach(f=>{C[f]={},Object.defineProperty(C[f],"channels",{value:y[f].channels}),Object.defineProperty(C[f],"labels",{value:y[f].labels});const w=D(f);Object.keys(w).forEach(I=>{const S=w[I];C[f][I]=function(T){const L=function(...j){const H=j[0];if(H==null)return H;H.length>1&&(j=H);const W=T(j);if(typeof W=="object")for(let X=W.length,At=0;At1&&(j=H),T(j))};return"conversion"in T&&(L.conversion=T.conversion),L}(S)})}),v.exports=C},2152:(v,x,m)=>{const y=m(6944);function D(w){const I=function(){const T={},L=Object.keys(y);for(let j=L.length,H=0;H{v.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},8984:(v,x,m)=>{m.d(x,{c:()=>w});var y=m(9096),D=m.n(y),C=m(1849),f=m.n(C)()(D());f.push([v.id,".ck-content code{background-color:hsla(0,0%,78%,.3);border-radius:2px;padding:.15em}.ck.ck-editor__editable .ck-code_selected{background-color:hsla(0,0%,78%,.5)}","",{version:3,sources:["webpack://./../ckeditor5-basic-styles/theme/code.css"],names:[],mappings:"AAKA,iBACC,kCAAuC,CAEvC,iBAAkB,CADlB,aAED,CAEA,0CACC,kCACD",sourcesContent:[`/* + */(function(P,F){(function(Y,J){P.exports=J(a4)})(self,Y=>(()=>{var J={976:x=>{x.exports=Y}},N={};function K(x){var m=N[x];if(m!==void 0)return m.exports;var y=N[x]={exports:{}};return J[x](y,y.exports,K),y.exports}K.d=(x,m)=>{for(var y in m)K.o(m,y)&&!K.o(x,y)&&Object.defineProperty(x,y,{enumerable:!0,get:m[y]})},K.o=(x,m)=>Object.prototype.hasOwnProperty.call(x,m);var v={};return(()=>{K.d(v,{default:()=>Eo});var x=K(976);const m=function(U){var ht=typeof U;return U!=null&&(ht=="object"||ht=="function")},y=typeof vn=="object"&&vn&&vn.Object===Object&&vn;var D=typeof self=="object"&&self&&self.Object===Object&&self;const C=y||D||Function("return this")(),f=function(){return C.Date.now()};var w=/\s/;const I=function(U){for(var ht=U.length;ht--&&w.test(U.charAt(ht)););return ht};var S=/^\s+/;const T=function(U){return U&&U.slice(0,I(U)+1).replace(S,"")},L=C.Symbol;var j=Object.prototype,H=j.hasOwnProperty,W=j.toString,X=L?L.toStringTag:void 0;const At=function(U){var ht=H.call(U,X),zt=U[X];try{U[X]=void 0;var oe=!0}catch{}var Se=W.call(U);return oe&&(ht?U[X]=zt:delete U[X]),Se};var Z=Object.prototype.toString;const rt=function(U){return Z.call(U)};var _=L?L.toStringTag:void 0;const Q=function(U){return U==null?U===void 0?"[object Undefined]":"[object Null]":_&&_ in Object(U)?At(U):rt(U)},Et=function(U){return U!=null&&typeof U=="object"},Mt=function(U){return typeof U=="symbol"||Et(U)&&Q(U)=="[object Symbol]"};var It=/^[-+]0x[0-9a-f]+$/i,Ue=/^0b[01]+$/i,De=/^0o[0-7]+$/i,fe=parseInt;const Xe=function(U){if(typeof U=="number")return U;if(Mt(U))return NaN;if(m(U)){var ht=typeof U.valueOf=="function"?U.valueOf():U;U=m(ht)?ht+"":ht}if(typeof U!="string")return U===0?U:+U;U=T(U);var zt=Ue.test(U);return zt||De.test(U)?fe(U.slice(2),zt?2:8):It.test(U)?NaN:+U};var Ie=Math.max,fi=Math.min;const kt=function(U,ht,zt){var oe,Se,bt,qe,Yt,ke,be=0,Do=!1,yn=!1,mt=!0;if(typeof U!="function")throw new TypeError("Expected a function");function xn(Ft){var St=oe,Gt=Se;return oe=Se=void 0,be=Ft,qe=U.apply(Gt,St)}function Ir(Ft){return be=Ft,Yt=setTimeout(En,ht),Do?xn(Ft):qe}function ki(Ft){var St=Ft-ke;return ke===void 0||St>=ht||St<0||yn&&Ft-be>=bt}function En(){var Ft=f();if(ki(Ft))return Io(Ft);Yt=setTimeout(En,function(St){var Gt=ht-(St-ke);return yn?fi(Gt,bt-(St-be)):Gt}(Ft))}function Io(Ft){return Yt=void 0,mt&&oe?xn(Ft):(oe=Se=void 0,qe)}function So(){var Ft=f(),St=ki(Ft);if(oe=arguments,Se=this,ke=Ft,St){if(Yt===void 0)return Ir(ke);if(yn)return clearTimeout(Yt),Yt=setTimeout(En,ht),xn(ke)}return Yt===void 0&&(Yt=setTimeout(En,ht)),qe}return ht=Xe(ht)||0,m(zt)&&(Do=!!zt.leading,bt=(yn="maxWait"in zt)?Ie(Xe(zt.maxWait)||0,ht):bt,mt="trailing"in zt?!!zt.trailing:mt),So.cancel=function(){Yt!==void 0&&clearTimeout(Yt),be=0,oe=ke=Se=Yt=void 0},So.flush=function(){return Yt===void 0?qe:Io(f())},So},xo=(0,x.defineComponent)({name:"Ckeditor",model:{prop:"modelValue",event:"update:modelValue"},props:{editor:{type:Function,required:!0},config:{type:Object,default:()=>({})},modelValue:{type:String,default:""},tagName:{type:String,default:"div"},disabled:{type:Boolean,default:!1},disableTwoWayDataBinding:{type:Boolean,default:!1}},emits:["ready","destroy","blur","focus","input","update:modelValue"],data:()=>({instance:null,lastEditorData:null}),watch:{modelValue(U){this.instance&&U!==this.lastEditorData&&this.instance.data.set(U)},disabled(U){U?this.instance.enableReadOnlyMode("Integration Sample"):this.instance.disableReadOnlyMode("Integration Sample")}},created(){const{CKEDITOR_VERSION:U}=window;if(U){const[ht]=U.split(".").map(Number);ht<37&&console.warn("The component requires using CKEditor 5 in version 37 or higher.")}else console.warn('Cannot find the "CKEDITOR_VERSION" in the "window" scope.')},mounted(){const U=Object.assign({},this.config);this.modelValue&&(U.initialData=this.modelValue),this.editor.create(this.$el,U).then(ht=>{this.instance=(0,x.markRaw)(ht),this.setUpEditorEvents(),this.modelValue!==U.initialData&&ht.data.set(this.modelValue),this.disabled&&ht.enableReadOnlyMode("Integration Sample"),this.$emit("ready",ht)}).catch(ht=>{console.error(ht)})},beforeUnmount(){this.instance&&(this.instance.destroy(),this.instance=null),this.$emit("destroy",this.instance)},methods:{setUpEditorEvents(){const U=this.instance,ht=kt(zt=>{if(this.disableTwoWayDataBinding)return;const oe=this.lastEditorData=U.data.get();this.$emit("update:modelValue",oe,zt,U),this.$emit("input",oe,zt,U)},300,{leading:!0});U.model.document.on("change:data",ht),U.editing.view.document.on("focus",zt=>{this.$emit("focus",zt,U)}),U.editing.view.document.on("blur",zt=>{this.$emit("blur",zt,U)})}},render(){return(0,x.h)(this.tagName)}});if(!x.version||!x.version.startsWith("3."))throw new Error("The CKEditor plugin works only with Vue 3+. For more information, please refer to https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/frameworks/vuejs-v3.html");const Eo={install(U){U.component("Ckeditor",xo)},component:xo}})(),v=v.default})())})(pk);var c4=pk.exports;const l4=ak(c4);var Dr={exports:{}};Dr.exports;(function(P,F){(function(Y){const J=Y.en=Y.en||{};J.dictionary=Object.assign(J.dictionary||{},{"%0 of %1":"%0 of %1",Accept:"Accept","Align cell text to the bottom":"Align cell text to the bottom","Align cell text to the center":"Align cell text to the center","Align cell text to the left":"Align cell text to the left","Align cell text to the middle":"Align cell text to the middle","Align cell text to the right":"Align cell text to the right","Align cell text to the top":"Align cell text to the top","Align table to the left":"Align table to the left","Align table to the right":"Align table to the right",Alignment:"Alignment",Aquamarine:"Aquamarine",Background:"Background",Black:"Black","Block quote":"Block quote",Blue:"Blue",Bold:"Bold",Border:"Border","Break text":"Break text","Bulleted List":"Bulleted List","Bulleted list styles toolbar":"Bulleted list styles toolbar",Cancel:"Cancel","Cannot access default workspace.":"Cannot access default workspace.","Cannot determine a category for the uploaded file.":"Cannot determine a category for the uploaded file.","Cannot upload file:":"Cannot upload file:","Caption for image: %0":"Caption for image: %0","Caption for the image":"Caption for the image","Cell properties":"Cell properties","Center table":"Center table","Centered image":"Centered image","Change image text alternative":"Change image text alternative","Choose heading":"Choose heading",Circle:"Circle",Clear:"Clear","Click to edit block":"Click to edit block",Close:"Close",Code:"Code",Color:"Color","Color picker":"Color picker",Column:"Column","Could not insert image at the current position.":"Could not insert image at the current position.","Could not obtain resized image URL.":"Could not obtain resized image URL.",Dashed:"Dashed",Decimal:"Decimal","Decimal with leading zero":"Decimal with leading zero","Decrease indent":"Decrease indent","Delete column":"Delete column","Delete row":"Delete row","Dim grey":"Dim grey",Dimensions:"Dimensions",Disc:"Disc",Dotted:"Dotted",Double:"Double",Downloadable:"Downloadable","Drag to move":"Drag to move","Dropdown toolbar":"Dropdown toolbar","Edit block":"Edit block","Edit image":"Edit image","Edit link":"Edit link","Editor block content toolbar":"Editor block content toolbar","Editor contextual toolbar":"Editor contextual toolbar","Editor dialog":"Editor dialog","Editor editing area: %0":"Editor editing area: %0","Editor toolbar":"Editor toolbar","Enter image caption":"Enter image caption","Enter table caption":"Enter table caption","Failed to determine category of edited image.":"Failed to determine category of edited image.","Full size image":"Full size image",Green:"Green",Grey:"Grey",Groove:"Groove","Header column":"Header column","Header row":"Header row",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading 4":"Heading 4","Heading 5":"Heading 5","Heading 6":"Heading 6",Height:"Height",HEX:"HEX","Horizontal text alignment toolbar":"Horizontal text alignment toolbar","Image resize list":"Image resize list","Image toolbar":"Image toolbar","image widget":"image widget","In line":"In line","Increase indent":"Increase indent",Insert:"Insert","Insert column left":"Insert column left","Insert column right":"Insert column right","Insert image":"Insert image","Insert image or file":"Insert image or file","Insert image via URL":"Insert image via URL","Insert image with file manager":"Insert image with file manager","Insert media":"Insert media","Insert paragraph after block":"Insert paragraph after block","Insert paragraph before block":"Insert paragraph before block","Insert row above":"Insert row above","Insert row below":"Insert row below","Insert table":"Insert table","Insert with file manager":"Insert with file manager","Inserting image failed":"Inserting image failed",Inset:"Inset",Italic:"Italic","Justify cell text":"Justify cell text","Left aligned image":"Left aligned image","Light blue":"Light blue","Light green":"Light green","Light grey":"Light grey",Link:"Link","Link image":"Link image","Link URL":"Link URL","List properties":"List properties","Lower-latin":"Lower-latin","Lower–roman":"Lower–roman","Media toolbar":"Media toolbar","Media URL":"Media URL","media widget":"media widget","Merge cell down":"Merge cell down","Merge cell left":"Merge cell left","Merge cell right":"Merge cell right","Merge cell up":"Merge cell up","Merge cells":"Merge cells",Next:"Next","No results found":"No results found","No searchable items":"No searchable items",None:"None","Numbered List":"Numbered List","Numbered list styles toolbar":"Numbered list styles toolbar","Open file manager":"Open file manager","Open in a new tab":"Open in a new tab","Open link in new tab":"Open link in new tab","Open media in new tab":"Open media in new tab",Orange:"Orange",Original:"Original",Outset:"Outset",Padding:"Padding",Paragraph:"Paragraph","Paste the media URL in the input.":"Paste the media URL in the input.","Press Enter to type after or press Shift + Enter to type before the widget":"Press Enter to type after or press Shift + Enter to type before the widget",Previous:"Previous","Processing the edited image.":"Processing the edited image.",Purple:"Purple",Red:"Red",Redo:"Redo","Remove color":"Remove color","Replace from computer":"Replace from computer","Replace image":"Replace image","Replace image from computer":"Replace image from computer","Replace image with file manager":"Replace image with file manager","Replace with file manager":"Replace with file manager","Resize image":"Resize image","Resize image to %0":"Resize image to %0","Resize image to the original size":"Resize image to the original size","Restore default":"Restore default","Reversed order":"Reversed order","Rich Text Editor":"Rich Text Editor",Ridge:"Ridge","Right aligned image":"Right aligned image",Row:"Row",Save:"Save","Select all":"Select all","Select column":"Select column","Select row":"Select row","Selecting resized image failed":"Selecting resized image failed","Server failed to process the image.":"Server failed to process the image.","Show more items":"Show more items","Side image":"Side image",Solid:"Solid","Split cell horizontally":"Split cell horizontally","Split cell vertically":"Split cell vertically",Square:"Square","Start at":"Start at","Start index must be greater than 0.":"Start index must be greater than 0.",Strikethrough:"Strikethrough",Style:"Style",Subscript:"Subscript",Superscript:"Superscript","Table alignment toolbar":"Table alignment toolbar","Table cell text alignment":"Table cell text alignment","Table properties":"Table properties","Table toolbar":"Table toolbar","Text alternative":"Text alternative",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".',"The URL must not be empty.":"The URL must not be empty.",'The value is invalid. Try "10px" or "2em" or simply "2".':'The value is invalid. Try "10px" or "2em" or simply "2".',"This link has no URL":"This link has no URL","This media URL is not supported.":"This media URL is not supported.","Tip: Paste the URL into the content to embed faster.":"Tip: Paste the URL into the content to embed faster.","To-do List":"To-do List","Toggle caption off":"Toggle caption off","Toggle caption on":"Toggle caption on","Toggle the circle list style":"Toggle the circle list style","Toggle the decimal list style":"Toggle the decimal list style","Toggle the decimal with leading zero list style":"Toggle the decimal with leading zero list style","Toggle the disc list style":"Toggle the disc list style","Toggle the lower–latin list style":"Toggle the lower–latin list style","Toggle the lower–roman list style":"Toggle the lower–roman list style","Toggle the square list style":"Toggle the square list style","Toggle the upper–latin list style":"Toggle the upper–latin list style","Toggle the upper–roman list style":"Toggle the upper–roman list style",Turquoise:"Turquoise","Type or paste your content here.":"Type or paste your content here.","Type your title":"Type your title",Underline:"Underline",Undo:"Undo",Unlink:"Unlink",Update:"Update","Update image URL":"Update image URL","Upload failed":"Upload failed","Upload from computer":"Upload from computer","Upload image from computer":"Upload image from computer","Upload in progress":"Upload in progress","Upper-latin":"Upper-latin","Upper-roman":"Upper-roman","Vertical text alignment toolbar":"Vertical text alignment toolbar",White:"White","Widget toolbar":"Widget toolbar",Width:"Width","Wrap text":"Wrap text",Yellow:"Yellow"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),function(Y,J){P.exports=J()}(self,()=>(()=>{var Y={6944:(v,x,m)=>{const y=m(6644),D={};for(const f of Object.keys(y))D[y[f]]=f;const C={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};v.exports=C;for(const f of Object.keys(C)){if(!("channels"in C[f]))throw new Error("missing channels property: "+f);if(!("labels"in C[f]))throw new Error("missing channel labels property: "+f);if(C[f].labels.length!==C[f].channels)throw new Error("channel and label counts mismatch: "+f);const{channels:w,labels:I}=C[f];delete C[f].channels,delete C[f].labels,Object.defineProperty(C[f],"channels",{value:w}),Object.defineProperty(C[f],"labels",{value:I})}C.rgb.hsl=function(f){const w=f[0]/255,I=f[1]/255,S=f[2]/255,T=Math.min(w,I,S),L=Math.max(w,I,S),j=L-T;let H,W;L===T?H=0:w===L?H=(I-S)/j:I===L?H=2+(S-w)/j:S===L&&(H=4+(w-I)/j),H=Math.min(60*H,360),H<0&&(H+=360);const X=(T+L)/2;return W=L===T?0:X<=.5?j/(L+T):j/(2-L-T),[H,100*W,100*X]},C.rgb.hsv=function(f){let w,I,S,T,L;const j=f[0]/255,H=f[1]/255,W=f[2]/255,X=Math.max(j,H,W),At=X-Math.min(j,H,W),Z=function(rt){return(X-rt)/6/At+.5};return At===0?(T=0,L=0):(L=At/X,w=Z(j),I=Z(H),S=Z(W),j===X?T=S-I:H===X?T=.3333333333333333+w-S:W===X&&(T=.6666666666666666+I-w),T<0?T+=1:T>1&&(T-=1)),[360*T,100*L,100*X]},C.rgb.hwb=function(f){const w=f[0],I=f[1];let S=f[2];const T=C.rgb.hsl(f)[0],L=1/255*Math.min(w,Math.min(I,S));return S=1-.00392156862745098*Math.max(w,Math.max(I,S)),[T,100*L,100*S]},C.rgb.cmyk=function(f){const w=f[0]/255,I=f[1]/255,S=f[2]/255,T=Math.min(1-w,1-I,1-S);return[100*((1-w-T)/(1-T)||0),100*((1-I-T)/(1-T)||0),100*((1-S-T)/(1-T)||0),100*T]},C.rgb.keyword=function(f){const w=D[f];if(w)return w;let I,S=1/0;for(const j of Object.keys(y)){const H=y[j],W=(L=H,((T=f)[0]-L[0])**2+(T[1]-L[1])**2+(T[2]-L[2])**2);W.04045?((w+.055)/1.055)**2.4:w/12.92,I=I>.04045?((I+.055)/1.055)**2.4:I/12.92,S=S>.04045?((S+.055)/1.055)**2.4:S/12.92,[100*(.4124*w+.3576*I+.1805*S),100*(.2126*w+.7152*I+.0722*S),100*(.0193*w+.1192*I+.9505*S)]},C.rgb.lab=function(f){const w=C.rgb.xyz(f);let I=w[0],S=w[1],T=w[2];return I/=95.047,S/=100,T/=108.883,I=I>.008856?I**.3333333333333333:7.787*I+.13793103448275862,S=S>.008856?S**.3333333333333333:7.787*S+.13793103448275862,T=T>.008856?T**.3333333333333333:7.787*T+.13793103448275862,[116*S-16,500*(I-S),200*(S-T)]},C.hsl.rgb=function(f){const w=f[0]/360,I=f[1]/100,S=f[2]/100;let T,L,j;if(I===0)return j=255*S,[j,j,j];T=S<.5?S*(1+I):S+I-S*I;const H=2*S-T,W=[0,0,0];for(let X=0;X<3;X++)L=w+.3333333333333333*-(X-1),L<0&&L++,L>1&&L--,j=6*L<1?H+6*(T-H)*L:2*L<1?T:3*L<2?H+(T-H)*(.6666666666666666-L)*6:H,W[X]=255*j;return W},C.hsl.hsv=function(f){const w=f[0];let I=f[1]/100,S=f[2]/100,T=I;const L=Math.max(S,.01);return S*=2,I*=S<=1?S:2-S,T*=L<=1?L:2-L,[w,100*(S===0?2*T/(L+T):2*I/(S+I)),100*((S+I)/2)]},C.hsv.rgb=function(f){const w=f[0]/60,I=f[1]/100;let S=f[2]/100;const T=Math.floor(w)%6,L=w-Math.floor(w),j=255*S*(1-I),H=255*S*(1-I*L),W=255*S*(1-I*(1-L));switch(S*=255,T){case 0:return[S,W,j];case 1:return[H,S,j];case 2:return[j,S,W];case 3:return[j,H,S];case 4:return[W,j,S];case 5:return[S,j,H]}},C.hsv.hsl=function(f){const w=f[0],I=f[1]/100,S=f[2]/100,T=Math.max(S,.01);let L,j;j=(2-I)*S;const H=(2-I)*T;return L=I*T,L/=H<=1?H:2-H,L=L||0,j/=2,[w,100*L,100*j]},C.hwb.rgb=function(f){const w=f[0]/360;let I=f[1]/100,S=f[2]/100;const T=I+S;let L;T>1&&(I/=T,S/=T);const j=Math.floor(6*w),H=1-S;L=6*w-j,1&j&&(L=1-L);const W=I+L*(H-I);let X,At,Z;switch(j){default:case 6:case 0:X=H,At=W,Z=I;break;case 1:X=W,At=H,Z=I;break;case 2:X=I,At=H,Z=W;break;case 3:X=I,At=W,Z=H;break;case 4:X=W,At=I,Z=H;break;case 5:X=H,At=I,Z=W}return[255*X,255*At,255*Z]},C.cmyk.rgb=function(f){const w=f[0]/100,I=f[1]/100,S=f[2]/100,T=f[3]/100;return[255*(1-Math.min(1,w*(1-T)+T)),255*(1-Math.min(1,I*(1-T)+T)),255*(1-Math.min(1,S*(1-T)+T))]},C.xyz.rgb=function(f){const w=f[0]/100,I=f[1]/100,S=f[2]/100;let T,L,j;return T=3.2406*w+-1.5372*I+-.4986*S,L=-.9689*w+1.8758*I+.0415*S,j=.0557*w+-.204*I+1.057*S,T=T>.0031308?1.055*T**.4166666666666667-.055:12.92*T,L=L>.0031308?1.055*L**.4166666666666667-.055:12.92*L,j=j>.0031308?1.055*j**.4166666666666667-.055:12.92*j,T=Math.min(Math.max(0,T),1),L=Math.min(Math.max(0,L),1),j=Math.min(Math.max(0,j),1),[255*T,255*L,255*j]},C.xyz.lab=function(f){let w=f[0],I=f[1],S=f[2];return w/=95.047,I/=100,S/=108.883,w=w>.008856?w**.3333333333333333:7.787*w+.13793103448275862,I=I>.008856?I**.3333333333333333:7.787*I+.13793103448275862,S=S>.008856?S**.3333333333333333:7.787*S+.13793103448275862,[116*I-16,500*(w-I),200*(I-S)]},C.lab.xyz=function(f){let w,I,S;I=(f[0]+16)/116,w=f[1]/500+I,S=I-f[2]/200;const T=I**3,L=w**3,j=S**3;return I=T>.008856?T:(I-.13793103448275862)/7.787,w=L>.008856?L:(w-.13793103448275862)/7.787,S=j>.008856?j:(S-.13793103448275862)/7.787,w*=95.047,I*=100,S*=108.883,[w,I,S]},C.lab.lch=function(f){const w=f[0],I=f[1],S=f[2];let T;return T=360*Math.atan2(S,I)/2/Math.PI,T<0&&(T+=360),[w,Math.sqrt(I*I+S*S),T]},C.lch.lab=function(f){const w=f[0],I=f[1],S=f[2]/360*2*Math.PI;return[w,I*Math.cos(S),I*Math.sin(S)]},C.rgb.ansi16=function(f,w=null){const[I,S,T]=f;let L=w===null?C.rgb.hsv(f)[2]:w;if(L=Math.round(L/50),L===0)return 30;let j=30+(Math.round(T/255)<<2|Math.round(S/255)<<1|Math.round(I/255));return L===2&&(j+=60),j},C.hsv.ansi16=function(f){return C.rgb.ansi16(C.hsv.rgb(f),f[2])},C.rgb.ansi256=function(f){const w=f[0],I=f[1],S=f[2];return w===I&&I===S?w<8?16:w>248?231:Math.round((w-8)/247*24)+232:16+36*Math.round(w/255*5)+6*Math.round(I/255*5)+Math.round(S/255*5)},C.ansi16.rgb=function(f){let w=f%10;if(w===0||w===7)return f>50&&(w+=3.5),w=w/10.5*255,[w,w,w];const I=.5*(1+~~(f>50));return[(1&w)*I*255,(w>>1&1)*I*255,(w>>2&1)*I*255]},C.ansi256.rgb=function(f){if(f>=232){const I=10*(f-232)+8;return[I,I,I]}let w;return f-=16,[Math.floor(f/36)/5*255,Math.floor((w=f%36)/6)/5*255,w%6/5*255]},C.rgb.hex=function(f){const w=(((255&Math.round(f[0]))<<16)+((255&Math.round(f[1]))<<8)+(255&Math.round(f[2]))).toString(16).toUpperCase();return"000000".substring(w.length)+w},C.hex.rgb=function(f){const w=f.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!w)return[0,0,0];let I=w[0];w[0].length===3&&(I=I.split("").map(T=>T+T).join(""));const S=parseInt(I,16);return[S>>16&255,S>>8&255,255&S]},C.rgb.hcg=function(f){const w=f[0]/255,I=f[1]/255,S=f[2]/255,T=Math.max(Math.max(w,I),S),L=Math.min(Math.min(w,I),S),j=T-L;let H,W;return H=j<1?L/(1-j):0,W=j<=0?0:T===w?(I-S)/j%6:T===I?2+(S-w)/j:4+(w-I)/j,W/=6,W%=1,[360*W,100*j,100*H]},C.hsl.hcg=function(f){const w=f[1]/100,I=f[2]/100,S=I<.5?2*w*I:2*w*(1-I);let T=0;return S<1&&(T=(I-.5*S)/(1-S)),[f[0],100*S,100*T]},C.hsv.hcg=function(f){const w=f[1]/100,I=f[2]/100,S=w*I;let T=0;return S<1&&(T=(I-S)/(1-S)),[f[0],100*S,100*T]},C.hcg.rgb=function(f){const w=f[0]/360,I=f[1]/100,S=f[2]/100;if(I===0)return[255*S,255*S,255*S];const T=[0,0,0],L=w%1*6,j=L%1,H=1-j;let W=0;switch(Math.floor(L)){case 0:T[0]=1,T[1]=j,T[2]=0;break;case 1:T[0]=H,T[1]=1,T[2]=0;break;case 2:T[0]=0,T[1]=1,T[2]=j;break;case 3:T[0]=0,T[1]=H,T[2]=1;break;case 4:T[0]=j,T[1]=0,T[2]=1;break;default:T[0]=1,T[1]=0,T[2]=H}return W=(1-I)*S,[255*(I*T[0]+W),255*(I*T[1]+W),255*(I*T[2]+W)]},C.hcg.hsv=function(f){const w=f[1]/100,I=w+f[2]/100*(1-w);let S=0;return I>0&&(S=w/I),[f[0],100*S,100*I]},C.hcg.hsl=function(f){const w=f[1]/100,I=f[2]/100*(1-w)+.5*w;let S=0;return I>0&&I<.5?S=w/(2*I):I>=.5&&I<1&&(S=w/(2*(1-I))),[f[0],100*S,100*I]},C.hcg.hwb=function(f){const w=f[1]/100,I=w+f[2]/100*(1-w);return[f[0],100*(I-w),100*(1-I)]},C.hwb.hcg=function(f){const w=f[1]/100,I=1-f[2]/100,S=I-w;let T=0;return S<1&&(T=(I-S)/(1-S)),[f[0],100*S,100*T]},C.apple.rgb=function(f){return[f[0]/65535*255,f[1]/65535*255,f[2]/65535*255]},C.rgb.apple=function(f){return[f[0]/255*65535,f[1]/255*65535,f[2]/255*65535]},C.gray.rgb=function(f){return[f[0]/100*255,f[0]/100*255,f[0]/100*255]},C.gray.hsl=function(f){return[0,0,f[0]]},C.gray.hsv=C.gray.hsl,C.gray.hwb=function(f){return[0,100,f[0]]},C.gray.cmyk=function(f){return[0,0,0,f[0]]},C.gray.lab=function(f){return[f[0],0,0]},C.gray.hex=function(f){const w=255&Math.round(f[0]/100*255),I=((w<<16)+(w<<8)+w).toString(16).toUpperCase();return"000000".substring(I.length)+I},C.rgb.gray=function(f){return[(f[0]+f[1]+f[2])/3/255*100]}},4416:(v,x,m)=>{const y=m(6944),D=m(2152),C={};Object.keys(y).forEach(f=>{C[f]={},Object.defineProperty(C[f],"channels",{value:y[f].channels}),Object.defineProperty(C[f],"labels",{value:y[f].labels});const w=D(f);Object.keys(w).forEach(I=>{const S=w[I];C[f][I]=function(T){const L=function(...j){const H=j[0];if(H==null)return H;H.length>1&&(j=H);const W=T(j);if(typeof W=="object")for(let X=W.length,At=0;At1&&(j=H),T(j))};return"conversion"in T&&(L.conversion=T.conversion),L}(S)})}),v.exports=C},2152:(v,x,m)=>{const y=m(6944);function D(w){const I=function(){const T={},L=Object.keys(y);for(let j=L.length,H=0;H{v.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},8984:(v,x,m)=>{m.d(x,{c:()=>w});var y=m(9096),D=m.n(y),C=m(1849),f=m.n(C)()(D());f.push([v.id,".ck-content code{background-color:hsla(0,0%,78%,.3);border-radius:2px;padding:.15em}.ck.ck-editor__editable .ck-code_selected{background-color:hsla(0,0%,78%,.5)}","",{version:3,sources:["webpack://./../ckeditor5-basic-styles/theme/code.css"],names:[],mappings:"AAKA,iBACC,kCAAuC,CAEvC,iBAAkB,CADlB,aAED,CAEA,0CACC,kCACD",sourcesContent:[`/* * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ @@ -7384,16 +7384,16 @@ of the component, floating–point numbers have been used which, for the default `],sourceRoot:""}]);const w=f},1849:v=>{v.exports=function(x){var m=[];return m.toString=function(){return this.map(function(y){var D=x(y);return y[2]?"@media ".concat(y[2]," {").concat(D,"}"):D}).join("")},m.i=function(y,D,C){typeof y=="string"&&(y=[[null,y,""]]);var f={};if(C)for(var w=0;w{function x(y,D){return function(C){if(Array.isArray(C))return C}(y)||function(C,f){var w=C&&(typeof Symbol<"u"&&C[Symbol.iterator]||C["@@iterator"]);if(w!=null){var I,S,T=[],L=!0,j=!1;try{for(w=w.call(C);!(L=(I=w.next()).done)&&(T.push(I.value),!f||T.length!==f);L=!0);}catch(H){j=!0,S=H}finally{try{L||w.return==null||w.return()}finally{if(j)throw S}}return T}}(y,D)||function(C,f){if(C){if(typeof C=="string")return m(C,f);var w=Object.prototype.toString.call(C).slice(8,-1);if(w==="Object"&&C.constructor&&(w=C.constructor.name),w==="Map"||w==="Set")return Array.from(C);if(w==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(w))return m(C,f)}}(y,D)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function m(y,D){(D==null||D>y.length)&&(D=y.length);for(var C=0,f=new Array(D);C{var y,D=function(){return y===void 0&&(y=!!(window&&document&&document.all&&!window.atob)),y},C=function(){var Z={};return function(rt){if(Z[rt]===void 0){var _=document.querySelector(rt);if(window.HTMLIFrameElement&&_ instanceof window.HTMLIFrameElement)try{_=_.contentDocument.head}catch{_=null}Z[rt]=_}return Z[rt]}}(),f=[];function w(Z){for(var rt=-1,_=0;_{var x=v&&v.__esModule?()=>v.default:()=>v;return N.d(x,{a:x}),x},N.d=(v,x)=>{for(var m in x)N.o(x,m)&&!N.o(v,m)&&Object.defineProperty(v,m,{enumerable:!0,get:x[m]})},N.o=(v,x)=>Object.prototype.hasOwnProperty.call(v,x),N.nc=void 0;var K={};return(()=>{function v({emitter:o,activator:t,callback:e,contextElements:n}){o.listenTo(document,"mousedown",(i,r)=>{if(!t())return;const s=typeof r.composedPath=="function"?r.composedPath():[],a=typeof n=="function"?n():n;for(const c of a)if(c.contains(r.target)||s.includes(c))return;e()})}function x(o){return class extends o{disableCssTransitions(){this._isCssTransitionsDisabled=!0}enableCssTransitions(){this._isCssTransitionsDisabled=!1}constructor(...t){super(...t),this.set("_isCssTransitionsDisabled",!1),this.initializeCssTransitionDisablerMixin()}initializeCssTransitionDisablerMixin(){this.extendTemplate({attributes:{class:[this.bindTemplate.if("_isCssTransitionsDisabled","ck-transitions-disabled")]}})}}}function m({view:o}){o.listenTo(o.element,"submit",(t,e)=>{e.preventDefault(),o.fire("submit")},{useCapture:!0})}function y({keystrokeHandler:o,focusTracker:t,gridItems:e,numberOfColumns:n,uiLanguageDirection:i}){const r=typeof n=="number"?()=>n:n;function s(l){return d=>{const h=e.find(p=>p.element===t.focusedElement),u=e.getIndex(h),g=l(u,e);e.get(g).focus(),d.stopPropagation(),d.preventDefault()}}function a(l,d){return l===d-1?0:l+1}function c(l,d){return l===0?d-1:l-1}o.set("arrowright",s((l,d)=>i==="rtl"?c(l,d.length):a(l,d.length))),o.set("arrowleft",s((l,d)=>i==="rtl"?a(l,d.length):c(l,d.length))),o.set("arrowup",s((l,d)=>{let h=l-r();return h<0&&(h=l+r()*Math.floor(d.length/r()),h>d.length-1&&(h-=r())),h})),o.set("arrowdown",s((l,d)=>{let h=l+r();return h>d.length-1&&(h=l%r()),h}))}N.d(K,{default:()=>Ga});const D=function(){try{return navigator.userAgent.toLowerCase()}catch{return""}}();var C;const f={isMac:w(D),isWindows:(C=D,C.indexOf("windows")>-1),isGecko:function(o){return!!o.match(/gecko\/\d+/)}(D),isSafari:function(o){return o.indexOf(" applewebkit/")>-1&&o.indexOf("chrome")===-1}(D),isiOS:function(o){return!!o.match(/iphone|ipad/i)||w(o)&&navigator.maxTouchPoints>0}(D),isAndroid:function(o){return o.indexOf("android")>-1}(D),isBlink:function(o){return o.indexOf("chrome/")>-1&&o.indexOf("edge/")<0}(D),features:{isRegExpUnicodePropertySupported:function(){let o=!1;try{o="ć".search(new RegExp("[\\p{L}]","u"))===0}catch{}return o}()}};function w(o){return o.indexOf("macintosh")>-1}function I(o,t,e,n){e=e||function(c,l){return c===l};const i=Array.isArray(o)?o:Array.prototype.slice.call(o),r=Array.isArray(t)?t:Array.prototype.slice.call(t),s=function(c,l,d){const h=S(c,l,d);if(h===-1)return{firstIndex:-1,lastIndexOld:-1,lastIndexNew:-1};const u=T(c,h),g=T(l,h),p=S(u,g,d),k=c.length-p,b=l.length-p;return{firstIndex:h,lastIndexOld:k,lastIndexNew:b}}(i,r,e);return n?function(c,l){const{firstIndex:d,lastIndexOld:h,lastIndexNew:u}=c;if(d===-1)return Array(l).fill("equal");let g=[];return d>0&&(g=g.concat(Array(d).fill("equal"))),u-d>0&&(g=g.concat(Array(u-d).fill("insert"))),h-d>0&&(g=g.concat(Array(h-d).fill("delete"))),u0&&d.push({index:h,type:"insert",values:c.slice(h,g)}),u-h>0&&d.push({index:h+(g-h),type:"delete",howMany:u-h}),d}(r,s)}function S(o,t,e){for(let n=0;n200||i>200||n+i>300)return L.fastDiff(o,t,e,!0);let r,s;if(iA?-1:1;d[k+E]&&(d[k]=d[k+E].slice(0)),d[k]||(d[k]=[]),d[k].push(b>A?r:s);let M=Math.max(b,A),z=M-k;for(;zl;g--)h[g]=u(g);h[l]=u(l),p++}while(h[l]!==c);return d[l].slice(1)}L.fastDiff=I;const j=function(){return function o(){o.called=!0}};class H{constructor(t,e){this.source=t,this.name=e,this.path=[],this.stop=j(),this.off=j()}}const W=new Array(256).fill("").map((o,t)=>("0"+t.toString(16)).slice(-2));function X(){const o=4294967296*Math.random()>>>0,t=4294967296*Math.random()>>>0,e=4294967296*Math.random()>>>0,n=4294967296*Math.random()>>>0;return"e"+W[o>>0&255]+W[o>>8&255]+W[o>>16&255]+W[o>>24&255]+W[t>>0&255]+W[t>>8&255]+W[t>>16&255]+W[t>>24&255]+W[e>>0&255]+W[e>>8&255]+W[e>>16&255]+W[e>>24&255]+W[n>>0&255]+W[n>>8&255]+W[n>>16&255]+W[n>>24&255]}const At={get(o="normal"){return typeof o!="number"?this[o]||this.normal:o},highest:1e5,high:1e3,normal:0,low:-1e3,lowest:-1e5};function Z(o,t){const e=At.get(t.priority);for(let n=0;n{if(typeof h=="object"&&h!==null){if(s.has(h))return`[object ${h.constructor.name}]`;s.add(h)}return h},c=r?` ${JSON.stringify(r,a)}`:"",l=Mt(i);return i+c+l}(t,n)),this.name="CKEditorError",this.context=e,this.data=n}is(t){return t==="CKEditorError"}static rethrowUnexpectedError(t,e){if(t.is&&t.is("CKEditorError"))throw t;const n=new _(t.message,e);throw n.stack=t.stack,n}}function Y(o,t){console.warn(...It(o,t))}function Et(o,t){console.error(...It(o,t))}function Mt(o){return` -Read more: ${rt}#error-${o}`}function It(o,t){const e=Mt(o);return t?[o,t,e]:[o,e]}const Ue="41.1.0",De=new Date(2024,1,7);if(globalThis.CKEDITOR_VERSION)throw new _("ckeditor-duplicated-modules",null);globalThis.CKEDITOR_VERSION=Ue;const fe=Symbol("listeningTo"),Xe=Symbol("emitterId"),Ie=Symbol("delegations"),fi=kt(Object);function kt(o){return o?class extends o{on(t,e,n){this.listenTo(this,t,e,n)}once(t,e,n){let i=!1;this.listenTo(this,t,(r,...s)=>{i||(i=!0,r.off(),e.call(this,r,...s))},n)}off(t,e){this.stopListening(this,t,e)}listenTo(t,e,n,i={}){let r,s;this[fe]||(this[fe]={});const a=this[fe];Eo(t)||xo(t);const c=Eo(t);(r=a[c])||(r=a[c]={emitter:t,callbacks:{}}),(s=r.callbacks[e])||(s=r.callbacks[e]=[]),s.push(n),function(l,d,h,u,g){d._addEventListener?d._addEventListener(h,u,g):l._addEventListener.call(d,h,u,g)}(this,t,e,n,i)}stopListening(t,e,n){const i=this[fe];let r=t&&Eo(t);const s=i&&r?i[r]:void 0,a=s&&e?s.callbacks[e]:void 0;if(!(!i||t&&!s||e&&!a))if(n)Se(this,t,e,n),a.indexOf(n)!==-1&&(a.length===1?delete s.callbacks[e]:Se(this,t,e,n));else if(a){for(;n=a.pop();)Se(this,t,e,n);delete s.callbacks[e]}else if(s){for(e in s.callbacks)this.stopListening(t,e);delete i[r]}else{for(r in i)this.stopListening(i[r].emitter);delete this[fe]}}fire(t,...e){try{const n=t instanceof H?t:new H(this,t),i=n.name;let r=zt(this,i);if(n.path.push(this),r){const a=[n,...e];r=Array.from(r);for(let c=0;c{this[Ie]||(this[Ie]=new Map),t.forEach(i=>{const r=this[Ie].get(i);r?r.set(e,n):this[Ie].set(i,new Map([[e,n]]))})}}}stopDelegating(t,e){if(this[Ie])if(t)if(e){const n=this[Ie].get(t);n&&n.delete(e)}else this[Ie].delete(t);else this[Ie].clear()}_addEventListener(t,e,n){(function(s,a){const c=U(s);if(c[a])return;let l=a,d=null;const h=[];for(;l!==""&&!c[l];)c[l]={callbacks:[],childEvents:[]},h.push(c[l]),d&&c[l].childEvents.push(d),d=l,l=l.substr(0,l.lastIndexOf(":"));if(l!==""){for(const u of h)u.callbacks=c[l].callbacks.slice();c[l].childEvents.push(d)}})(this,t);const i=ht(this,t),r={callback:e,priority:At.get(n.priority)};for(const s of i)Z(s,r)}_removeEventListener(t,e){const n=ht(this,t);for(const i of n)for(let r=0;r-1?zt(o,t.substr(0,t.lastIndexOf(":"))):null}function oe(o,t,e){for(let[n,i]of o){i?typeof i=="function"&&(i=i(t.name)):i=t.name;const r=new H(t.source,i);r.path=[...t.path],n.fire(r,...e)}}function Se(o,t,e,n){t._removeEventListener?t._removeEventListener(e,n):o._removeEventListener.call(t,e,n)}["on","once","off","listenTo","stopListening","fire","delegate","stopDelegating","_addEventListener","_removeEventListener"].forEach(o=>{kt[o]=fi.prototype[o]});const bt=function(o){var t=typeof o;return o!=null&&(t=="object"||t=="function")},qe=Symbol("observableProperties"),Yt=Symbol("boundObservables"),ke=Symbol("boundProperties"),be=Symbol("decoratedMethods"),Do=Symbol("decoratedOriginal"),yn=mt(kt());function mt(o){return o?class extends o{set(t,e){if(bt(t))return void Object.keys(t).forEach(i=>{this.set(i,t[i])},this);xn(this);const n=this[qe];if(t in this&&!n.has(t))throw new _("observable-set-cannot-override",this);Object.defineProperty(this,t,{enumerable:!0,configurable:!0,get:()=>n.get(t),set(i){const r=n.get(t);let s=this.fire(`set:${t}`,t,i,r);s===void 0&&(s=i),r===s&&n.has(t)||(n.set(t,s),this.fire(`change:${t}`,t,s,r))}}),this[t]=e}bind(...t){if(!t.length||!En(t))throw new _("observable-bind-wrong-properties",this);if(new Set(t).size!==t.length)throw new _("observable-bind-duplicate-properties",this);xn(this);const e=this[ke];t.forEach(i=>{if(e.has(i))throw new _("observable-bind-rebind",this)});const n=new Map;return t.forEach(i=>{const r={property:i,to:[]};e.set(i,r),n.set(i,r)}),{to:Ir,toMany:ki,_observable:this,_bindProperties:t,_to:[],_bindings:n}}unbind(...t){if(!this[qe])return;const e=this[ke],n=this[Yt];if(t.length){if(!En(t))throw new _("observable-unbind-wrong-properties",this);t.forEach(i=>{const r=e.get(i);r&&(r.to.forEach(([s,a])=>{const c=n.get(s),l=c[a];l.delete(r),l.size||delete c[a],Object.keys(c).length||(n.delete(s),this.stopListening(s,"change"))}),e.delete(i))})}else n.forEach((i,r)=>{this.stopListening(r,"change")}),n.clear(),e.clear()}decorate(t){xn(this);const e=this[t];if(!e)throw new _("observablemixin-cannot-decorate-undefined",this,{object:this,methodName:t});this.on(t,(n,i)=>{n.return=e.apply(this,i)}),this[t]=function(...n){return this.fire(t,n)},this[t][Do]=e,this[be]||(this[be]=[]),this[be].push(t)}stopListening(t,e,n){if(!t&&this[be]){for(const i of this[be])this[i]=this[i][Do];delete this[be]}super.stopListening(t,e,n)}}:yn}function xn(o){o[qe]||(Object.defineProperty(o,qe,{value:new Map}),Object.defineProperty(o,Yt,{value:new Map}),Object.defineProperty(o,ke,{value:new Map}))}function Ir(...o){const t=function(...r){if(!r.length)throw new _("observable-bind-to-parse-error",null);const s={to:[]};let a;return typeof r[r.length-1]=="function"&&(s.callback=r.pop()),r.forEach(c=>{if(typeof c=="string")a.properties.push(c);else{if(typeof c!="object")throw new _("observable-bind-to-parse-error",null);a={observable:c,properties:[]},s.to.push(a)}}),s}(...o),e=Array.from(this._bindings.keys()),n=e.length;if(!t.callback&&t.to.length>1)throw new _("observable-bind-to-no-callback",this);if(n>1&&t.callback)throw new _("observable-bind-to-extra-callback",this);var i;t.to.forEach(r=>{if(r.properties.length&&r.properties.length!==n)throw new _("observable-bind-to-properties-length",this);r.properties.length||(r.properties=this._bindProperties)}),this._to=t.to,t.callback&&(this._bindings.get(e[0]).callback=t.callback),i=this._observable,this._to.forEach(r=>{const s=i[Yt];let a;s.get(r.observable)||i.listenTo(r.observable,"change",(c,l)=>{a=s.get(r.observable)[l],a&&a.forEach(d=>{Io(i,d.property)})})}),function(r){let s;r._bindings.forEach((a,c)=>{r._to.forEach(l=>{s=l.properties[a.callback?0:r._bindProperties.indexOf(c)],a.to.push([l.observable,s]),function(d,h,u,g){const p=d[Yt],k=p.get(u),b=k||{};b[g]||(b[g]=new Set),b[g].add(h),k||p.set(u,b)}(r._observable,a,l.observable,s)})})}(this),this._bindProperties.forEach(r=>{Io(this._observable,r)})}function ki(o,t,e){if(this._bindings.size>1)throw new _("observable-bind-to-many-not-one-binding",this);this.to(...function(n,i){const r=n.map(s=>[s,i]);return Array.prototype.concat.apply([],r)}(o,t),e)}function En(o){return o.every(t=>typeof t=="string")}function Io(o,t){const e=o[ke].get(t);let n;e.callback?n=e.callback.apply(o,e.to.map(i=>i[0][i[1]])):(n=e.to[0],n=n[0][n[1]]),Object.prototype.hasOwnProperty.call(o,t)?o[t]=n:o.set(t,n)}["set","bind","unbind","decorate","on","once","off","listenTo","stopListening","fire","delegate","stopDelegating","_addEventListener","_removeEventListener"].forEach(o=>{mt[o]=yn.prototype[o]});class So{constructor(){this._replacedElements=[]}replace(t,e){this._replacedElements.push({element:t,newElement:e}),t.style.display="none",e&&t.parentNode.insertBefore(e,t.nextSibling)}restore(){this._replacedElements.forEach(({element:t,newElement:e})=>{t.style.display="",e&&e.remove()}),this._replacedElements=[]}}function Ft(o){let t=0;for(const e of o)t++;return t}function St(o,t){const e=Math.min(o.length,t.length);for(let n=0;n-1},Tk=function(o,t){var e=this.__data__,n=wi(e,o);return n<0?(++this.size,e.push([o,t])):e[n][1]=t,this};function Jn(o){var t=-1,e=o==null?0:o.length;for(this.clear();++t-1&&o%1==0&&o-1&&o%1==0&&o<=9007199254740991};var Tt={};Tt["[object Float32Array]"]=Tt["[object Float64Array]"]=Tt["[object Int8Array]"]=Tt["[object Int16Array]"]=Tt["[object Int32Array]"]=Tt["[object Uint8Array]"]=Tt["[object Uint8ClampedArray]"]=Tt["[object Uint16Array]"]=Tt["[object Uint32Array]"]=!0,Tt["[object Arguments]"]=Tt["[object Array]"]=Tt["[object ArrayBuffer]"]=Tt["[object Boolean]"]=Tt["[object DataView]"]=Tt["[object Date]"]=Tt["[object Error]"]=Tt["[object Function]"]=Tt["[object Map]"]=Tt["[object Number]"]=Tt["[object Object]"]=Tt["[object RegExp]"]=Tt["[object Set]"]=Tt["[object String]"]=Tt["[object WeakMap]"]=!1;const ub=function(o){return we(o)&&sc(o.length)&&!!Tt[gn(o)]},Lr=function(o){return function(t){return o(t)}};var ac=F&&!F.nodeType&&F,Oo=ac&&!0&&P&&!P.nodeType&&P,Or=Oo&&Oo.exports===ac&&$a.process;const oo=function(){try{var o=Oo&&Oo.require&&Oo.require("util").types;return o||Or&&Or.binding&&Or.binding("util")}catch{}}();var cc=oo&&oo.isTypedArray;const zr=cc?Lr(cc):ub;var gb=Object.prototype.hasOwnProperty;const lc=function(o,t){var e=ee(o),n=!e&&Nr(o),i=!e&&!n&&Lo(o),r=!e&&!n&&!i&&zr(o),s=e||n||i||r,a=s?ab(o.length,String):[],c=a.length;for(var l in o)!t&&!gb.call(o,l)||s&&(l=="length"||i&&(l=="offset"||l=="parent")||r&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||Pr(l,c))||a.push(l);return a};var pb=Object.prototype;const Rr=function(o){var t=o&&o.constructor;return o===(typeof t=="function"&&t.prototype||pb)},mb=Za(Object.keys,Object);var fb=Object.prototype.hasOwnProperty;const kb=function(o){if(!Rr(o))return mb(o);var t=[];for(var e in Object(o))fb.call(o,e)&&e!="constructor"&&t.push(e);return t},yi=function(o){return o!=null&&sc(o.length)&&!Dn(o)},jr=function(o){return yi(o)?lc(o):kb(o)},bb=function(o,t){return o&&no(t,jr(t),o)},wb=function(o){var t=[];if(o!=null)for(var e in Object(o))t.push(e);return t};var Ab=Object.prototype.hasOwnProperty;const Cb=function(o){if(!bt(o))return wb(o);var t=Rr(o),e=[];for(var n in o)(n!="constructor"||!t&&Ab.call(o,n))&&e.push(n);return e},io=function(o){return yi(o)?lc(o,!0):Cb(o)},_b=function(o,t){return o&&no(t,io(t),o)};var dc=F&&!F.nodeType&&F,hc=dc&&!0&&P&&!P.nodeType&&P,uc=hc&&hc.exports===dc?Te.Buffer:void 0,gc=uc?uc.allocUnsafe:void 0;const pc=function(o,t){if(t)return o.slice();var e=o.length,n=gc?gc(e):new o.constructor(e);return o.copy(n),n},mc=function(o,t){var e=-1,n=o.length;for(t||(t=Array(n));++e{this._setToTarget(t,i,e[i],n)})}}function zc(o){return Kr(o,Gb)}function Gb(o){return Mn(o)||typeof o=="function"?o:void 0}function pn(o){if(o){if(o.defaultView)return o instanceof o.defaultView.Document;if(o.ownerDocument&&o.ownerDocument.defaultView)return o instanceof o.ownerDocument.defaultView.Node}return!1}function Ei(o){const t=Object.prototype.toString.apply(o);return t=="[object Window]"||t=="[object global]"}const Rc=Ae(kt());function Ae(o){return o?class extends o{listenTo(t,e,n,i={}){if(pn(t)||Ei(t)){const r={capture:!!i.useCapture,passive:!!i.usePassive},s=this._getProxyEmitter(t,r)||new Wb(t,r);this.listenTo(s,e,n,i)}else super.listenTo(t,e,n,i)}stopListening(t,e,n){if(pn(t)||Ei(t)){const i=this._getAllProxyEmitters(t);for(const r of i)this.stopListening(r,e,n)}else super.stopListening(t,e,n)}_getProxyEmitter(t,e){return function(n,i){const r=n[fe];return r&&r[i]?r[i].emitter:null}(this,jc(t,e))}_getAllProxyEmitters(t){return[{capture:!1,passive:!1},{capture:!1,passive:!0},{capture:!0,passive:!1},{capture:!0,passive:!0}].map(e=>this._getProxyEmitter(t,e)).filter(e=>!!e)}}:Rc}["_getProxyEmitter","_getAllProxyEmitters","on","once","off","listenTo","stopListening","fire","delegate","stopDelegating","_addEventListener","_removeEventListener"].forEach(o=>{Ae[o]=Rc.prototype[o]});class Wb extends kt(){constructor(t,e){super(),xo(this,jc(t,e)),this._domNode=t,this._options=e}attach(t){if(this._domListeners&&this._domListeners[t])return;const e=this._createDomListener(t);this._domNode.addEventListener(t,e,this._options),this._domListeners||(this._domListeners={}),this._domListeners[t]=e}detach(t){let e;!this._domListeners[t]||(e=this._events[t])&&e.callbacks.length||this._domListeners[t].removeListener()}_addEventListener(t,e,n){this.attach(t),kt().prototype._addEventListener.call(this,t,e,n)}_removeEventListener(t,e){kt().prototype._removeEventListener.call(this,t,e),this.detach(t)}_createDomListener(t){const e=n=>{this.fire(t,n)};return e.removeListener=()=>{this._domNode.removeEventListener(t,e,this._options),delete this._domListeners[t]},e}}function jc(o,t){let e=function(n){return n["data-ck-expando"]||(n["data-ck-expando"]=X())}(o);for(const n of Object.keys(t).sort())t[n]&&(e+="-"+n);return e}let Yr;try{Yr={window,document}}catch{Yr={window:{},document:{}}}const $=Yr;function Fc(o){const t=o.ownerDocument.defaultView.getComputedStyle(o);return{top:parseInt(t.borderTopWidth,10),right:parseInt(t.borderRightWidth,10),bottom:parseInt(t.borderBottomWidth,10),left:parseInt(t.borderLeftWidth,10)}}function Vt(o){return Object.prototype.toString.call(o)=="[object Text]"}function Di(o){return Object.prototype.toString.apply(o)=="[object Range]"}function Vc(o){return o&&o.parentNode?o.offsetParent===$.document.body?null:o.offsetParent:null}const Hc=["top","right","bottom","left","width","height"];class dt{constructor(t){const e=Di(t);if(Object.defineProperty(this,"_source",{value:t._source||t,writable:!0,enumerable:!1}),Qr(t)||e)if(e){const n=dt.getDomRangeRects(t);Ii(this,dt.getBoundingRect(n))}else Ii(this,t.getBoundingClientRect());else if(Ei(t)){const{innerWidth:n,innerHeight:i}=t;Ii(this,{top:0,right:n,bottom:i,left:0,width:n,height:i})}else Ii(this,t)}clone(){return new dt(this)}moveTo(t,e){return this.top=e,this.right=t+this.width,this.bottom=e+this.height,this.left=t,this}moveBy(t,e){return this.top+=e,this.right+=t,this.left+=t,this.bottom+=e,this}getIntersection(t){const e={top:Math.max(this.top,t.top),right:Math.min(this.right,t.right),bottom:Math.min(this.bottom,t.bottom),left:Math.max(this.left,t.left),width:0,height:0};if(e.width=e.right-e.left,e.height=e.bottom-e.top,e.width<0||e.height<0)return null;{const n=new dt(e);return n._source=this._source,n}}getIntersectionArea(t){const e=this.getIntersection(t);return e?e.getArea():0}getArea(){return this.width*this.height}getVisible(){const t=this._source;let e=this.clone();if(Uc(t))return e;let n,i=t,r=t.parentNode||t.commonAncestorContainer;for(;r&&!Uc(r);){const a=((s=r)instanceof HTMLElement?s.ownerDocument.defaultView.getComputedStyle(s).overflow:"visible")==="visible";i instanceof HTMLElement&&qc(i)==="absolute"&&(n=i);const c=qc(r);if(a||n&&(c==="relative"&&a||c!=="relative")){i=r,r=r.parentNode;continue}const l=new dt(r),d=e.getIntersection(l);if(!d)return null;d.getArea(){for(const t of o){const e=Rt._getElementCallbacks(t.target);if(e)for(const n of e)n(t)}})}};let Ro=Rt;function Gc(o,t){o instanceof HTMLTextAreaElement&&(o.value=t),o.innerHTML=t}function ro(o){return t=>t+o}function Si(o){let t=0;for(;o.previousSibling;)o=o.previousSibling,t++;return t}function Wc(o,t,e){o.insertBefore(e,o.childNodes[t]||null)}function jo(o){return o&&o.nodeType===Node.COMMENT_NODE}function Bn(o){return!!(o&&o.getClientRects&&o.getClientRects().length)}Ro._observerInstance=null,Ro._elementCallbacks=null;var $c=Math.pow;function Zr({element:o,target:t,positions:e,limiter:n,fitInViewport:i,viewportOffsetConfig:r}){Dn(t)&&(t=t()),Dn(n)&&(n=n());const s=Vc(o),a=function(u){u=Object.assign({top:0,bottom:0,left:0,right:0},u);const g=new dt($.window);return g.top+=u.top,g.height-=u.top,g.bottom-=u.bottom,g.height-=u.bottom,g}(r),c=new dt(o),l=Kc(t,a);let d;if(!l||!a.getIntersection(l))return null;const h={targetRect:l,elementRect:c,positionedElementAncestor:s,viewportRect:a};if(n||i){if(n){const u=Kc(n,a);u&&(h.limiterRect=u)}d=function(u,g){const{elementRect:p}=g,k=p.getArea(),b=u.map(M=>new Yc(M,g)).filter(M=>!!M.name);let A=0,E=null;for(const M of b){const{limiterIntersectionArea:z,viewportIntersectionArea:G}=M;if(z===k)return M;const et=$c(G,2)+$c(z,2);et>A&&(A=et,E=M)}return E}(e,h)}else d=new Yc(e[0],h);return d}function Kc(o,t){const e=new dt(o).getVisible();return e?e.getIntersection(t):null}class Yc{constructor(t,e){const n=t(e.targetRect,e.elementRect,e.viewportRect,e.limiterRect);if(!n)return;const{left:i,top:r,name:s,config:a}=n;this.name=s,this.config=a,this._positioningFunctionCoordinates={left:i,top:r},this._options=e}get left(){return this._absoluteRect.left}get top(){return this._absoluteRect.top}get limiterIntersectionArea(){const t=this._options.limiterRect;return t?t.getIntersectionArea(this._rect):0}get viewportIntersectionArea(){return this._options.viewportRect.getIntersectionArea(this._rect)}get _rect(){return this._cachedRect||(this._cachedRect=this._options.elementRect.clone().moveTo(this._positioningFunctionCoordinates.left,this._positioningFunctionCoordinates.top)),this._cachedRect}get _absoluteRect(){return this._cachedAbsoluteRect||(this._cachedAbsoluteRect=this._rect.toAbsoluteRect()),this._cachedAbsoluteRect}}function Qc(o){const t=o.parentNode;t&&t.removeChild(o)}function $b({window:o,rect:t,alignToTop:e,forceScroll:n,viewportOffset:i}){const r=t.clone().moveBy(0,i.bottom),s=t.clone().moveBy(0,-i.top),a=new dt(o).excludeScrollbarsAndBorders(),c=e&&n,l=[s,r].every(p=>a.contains(p));let{scrollX:d,scrollY:h}=o;const u=d,g=h;c?h-=a.top-t.top+i.top:l||(Jc(s,a)?h-=a.top-t.top+i.top:Zc(r,a)&&(h+=e?t.top-a.top-i.top:t.bottom-a.bottom+i.bottom)),l||(Xc(t,a)?d-=a.left-t.left+i.left:tl(t,a)&&(d+=t.right-a.right+i.right)),d==u&&h===g||o.scrollTo(d,h)}function Kb({parent:o,getRect:t,alignToTop:e,forceScroll:n,ancestorOffset:i=0,limiterElement:r}){const s=Jr(o),a=e&&n;let c,l,d;const h=r||s.document.body;for(;o!=h;)l=t(),c=new dt(o).excludeScrollbarsAndBorders(),d=c.contains(l),a?o.scrollTop-=c.top-l.top+i:d||(Jc(l,c)?o.scrollTop-=c.top-l.top+i:Zc(l,c)&&(o.scrollTop+=e?l.top-c.top-i:l.bottom-c.bottom+i)),d||(Xc(l,c)?o.scrollLeft-=c.left-l.left+i:tl(l,c)&&(o.scrollLeft+=l.right-c.right+i)),o=o.parentNode}function Zc(o,t){return o.bottom>t.bottom}function Jc(o,t){return o.topt.right}function Jr(o){return Di(o)?o.startContainer.ownerDocument.defaultView:o.ownerDocument.defaultView}function Yb(o){if(Di(o)){let t=o.commonAncestorContainer;return Vt(t)&&(t=t.parentNode),t}return o.parentNode}function el(o,t){const e=Jr(o),n=new dt(o);if(e===t)return n;{let i=e;for(;i!=t;){const r=i.frameElement,s=new dt(r).excludeScrollbarsAndBorders();n.moveBy(s.left,s.top),i=i.parent}}return n}const Qb={ctrl:"⌃",cmd:"⌘",alt:"⌥",shift:"⇧"},Zb={ctrl:"Ctrl+",alt:"Alt+",shift:"Shift+"},ut=function(){const o={arrowleft:37,arrowup:38,arrowright:39,arrowdown:40,backspace:8,delete:46,enter:13,space:32,esc:27,tab:9,ctrl:1114112,shift:2228224,alt:4456448,cmd:8912896};for(let t=65;t<=90;t++)o[String.fromCharCode(t).toLowerCase()]=t;for(let t=48;t<=57;t++)o[t-48]=t;for(let t=112;t<=123;t++)o["f"+(t-111)]=t;for(const t of"`-=[];',./\\")o[t]=t.charCodeAt(0);return o}(),Jb=Object.fromEntries(Object.entries(ut).map(([o,t])=>[t,o.charAt(0).toUpperCase()+o.slice(1)]));function so(o){let t;if(typeof o=="string"){if(t=ut[o.toLowerCase()],!t)throw new _("keyboard-unknown-key",null,{key:o})}else t=o.keyCode+(o.altKey?ut.alt:0)+(o.ctrlKey?ut.ctrl:0)+(o.shiftKey?ut.shift:0)+(o.metaKey?ut.cmd:0);return t}function Fo(o){return typeof o=="string"&&(o=function(t){return t.split("+").map(e=>e.trim())}(o)),o.map(t=>typeof t=="string"?function(e){if(e.endsWith("!"))return so(e.slice(0,-1));const n=so(e);return(f.isMac||f.isiOS)&&n==ut.ctrl?ut.cmd:n}(t):t).reduce((t,e)=>e+t,0)}function nl(o){let t=Fo(o);return Object.entries(f.isMac||f.isiOS?Qb:Zb).reduce((e,[n,i])=>(t&ut[n]&&(t&=~ut[n],e+=i),e),"")+(t?Jb[t]:"")}function Xr(o,t){const e=t==="ltr";switch(o){case ut.arrowleft:return e?"left":"right";case ut.arrowright:return e?"right":"left";case ut.arrowup:return"up";case ut.arrowdown:return"down"}}function Bt(o){return Array.isArray(o)?o:[o]}function Xb(o,t,e=1){if(typeof e!="number")throw new _("translation-service-quantity-not-a-number",null,{quantity:e});const n=Object.keys($.window.CKEDITOR_TRANSLATIONS).length;n===1&&(o=Object.keys($.window.CKEDITOR_TRANSLATIONS)[0]);const i=t.id||t.string;if(n===0||!function(c,l){return!!$.window.CKEDITOR_TRANSLATIONS[c]&&!!$.window.CKEDITOR_TRANSLATIONS[c].dictionary[l]}(o,i))return e!==1?t.plural:t.string;const r=$.window.CKEDITOR_TRANSLATIONS[o].dictionary,s=$.window.CKEDITOR_TRANSLATIONS[o].getPluralForm||(c=>c===1?0:1),a=r[i];return typeof a=="string"?a:a[Number(s(e))]}$.window.CKEDITOR_TRANSLATIONS||($.window.CKEDITOR_TRANSLATIONS={});const tw=["ar","ara","fa","per","fas","he","heb","ku","kur","ug","uig"];function ol(o){return tw.includes(o)?"rtl":"ltr"}class ew{constructor({uiLanguage:t="en",contentLanguage:e}={}){this.uiLanguage=t,this.contentLanguage=e||this.uiLanguage,this.uiLanguageDirection=ol(this.uiLanguage),this.contentLanguageDirection=ol(this.contentLanguage),this.t=(n,i)=>this._t(n,i)}get language(){return console.warn("locale-deprecated-language-property: The Locale#language property has been deprecated and will be removed in the near future. Please use #uiLanguage and #contentLanguage properties instead."),this.uiLanguage}_t(t,e=[]){e=Bt(e),typeof t=="string"&&(t={string:t});const n=t.plural?e[0]:1;return function(i,r){return i.replace(/%(\d+)/g,(s,a)=>athis._items.length||e<0)throw new _("collection-add-item-invalid-index",this);let n=0;for(const i of t){const r=this._getItemIdBeforeAdding(i),s=e+n;this._items.splice(s,0,i),this._itemMap.set(r,i),this.fire("add",i,s),n++}return this.fire("change",{added:t,removed:[],index:e}),this}get(t){let e;if(typeof t=="string")e=this._itemMap.get(t);else{if(typeof t!="number")throw new _("collection-get-invalid-arg",this);e=this._items[t]}return e||null}has(t){if(typeof t=="string")return this._itemMap.has(t);{const e=t[this._idProperty];return e&&this._itemMap.has(e)}}getIndex(t){let e;return e=typeof t=="string"?this._itemMap.get(t):t,e?this._items.indexOf(e):-1}remove(t){const[e,n]=this._remove(t);return this.fire("change",{added:[],removed:[e],index:n}),e}map(t,e){return this._items.map(t,e)}forEach(t,e){this._items.forEach(t,e)}find(t,e){return this._items.find(t,e)}filter(t,e){return this._items.filter(t,e)}clear(){this._bindToCollection&&(this.stopListening(this._bindToCollection),this._bindToCollection=null);const t=Array.from(this._items);for(;this.length;)this._remove(0);this.fire("change",{added:[],removed:t,index:0})}bindTo(t){if(this._bindToCollection)throw new _("collection-bind-to-rebind",this);return this._bindToCollection=t,{as:e=>{this._setUpBindToBinding(n=>new e(n))},using:e=>{typeof e=="function"?this._setUpBindToBinding(e):this._setUpBindToBinding(n=>n[e])}}}_setUpBindToBinding(t){const e=this._bindToCollection,n=(i,r,s)=>{const a=e._bindToCollection==this,c=e._bindToInternalToExternalMap.get(r);if(a&&c)this._bindToExternalToInternalMap.set(r,c),this._bindToInternalToExternalMap.set(c,r);else{const l=t(r);if(!l)return void this._skippedIndexesFromExternal.push(s);let d=s;for(const h of this._skippedIndexesFromExternal)s>h&&d--;for(const h of e._skippedIndexesFromExternal)d>=h&&d++;this._bindToExternalToInternalMap.set(r,l),this._bindToInternalToExternalMap.set(l,r),this.add(l,d);for(let h=0;h{const a=this._bindToExternalToInternalMap.get(r);a&&this.remove(a),this._skippedIndexesFromExternal=this._skippedIndexesFromExternal.reduce((c,l)=>(sl&&c.push(l),c),[])})}_getItemIdBeforeAdding(t){const e=this._idProperty;let n;if(e in t){if(n=t[e],typeof n!="string")throw new _("collection-add-invalid-id",this);if(this.get(n))throw new _("collection-add-item-already-exists",this)}else t[e]=n=X();return n}_remove(t){let e,n,i,r=!1;const s=this._idProperty;if(typeof t=="string"?(n=t,i=this._itemMap.get(n),r=!i,i&&(e=this._items.indexOf(i))):typeof t=="number"?(e=t,i=this._items[e],r=!i,i&&(n=i[s])):(i=t,n=i[s],e=this._items.indexOf(i),r=e==-1||!this._itemMap.get(n)),r)throw new _("collection-remove-404",this);this._items.splice(e,1),this._itemMap.delete(n);const a=this._bindToInternalToExternalMap.get(i);return this._bindToInternalToExternalMap.delete(i),this._bindToExternalToInternalMap.delete(a),this.fire("remove",i,e),[i,e]}[Symbol.iterator](){return this._items[Symbol.iterator]()}}function Wt(o){const t=o.next();return t.done?null:t.value}class Qt extends Ae(mt()){constructor(){super(),this._elements=new Set,this._nextEventLoopTimeout=null,this.set("isFocused",!1),this.set("focusedElement",null)}add(t){if(this._elements.has(t))throw new _("focustracker-add-element-already-exist",this);this.listenTo(t,"focus",()=>this._focus(t),{useCapture:!0}),this.listenTo(t,"blur",()=>this._blur(),{useCapture:!0}),this._elements.add(t)}remove(t){t===this.focusedElement&&this._blur(),this._elements.has(t)&&(this.stopListening(t),this._elements.delete(t))}destroy(){this.stopListening()}_focus(t){clearTimeout(this._nextEventLoopTimeout),this.focusedElement=t,this.isFocused=!0}_blur(){clearTimeout(this._nextEventLoopTimeout),this._nextEventLoopTimeout=setTimeout(()=>{this.focusedElement=null,this.isFocused=!1},0)}}class ie{constructor(){this._listener=new(Ae())}listenTo(t){this._listener.listenTo(t,"keydown",(e,n)=>{this._listener.fire("_keydown:"+so(n),n)})}set(t,e,n={}){const i=Fo(t),r=n.priority;this._listener.listenTo(this._listener,"_keydown:"+i,(s,a)=>{e(a,()=>{a.preventDefault(),a.stopPropagation(),s.stop()}),s.return=!0},{priority:r})}press(t){return!!this._listener.fire("_keydown:"+so(t),t)}stopListening(t){this._listener.stopListening(t)}destroy(){this.stopListening()}}function We(o){return Gt(o)?new Map(o):function(t){const e=new Map;for(const n in t)e.set(n,t[n]);return e}(o)}function ts(o,t){let e;function n(...i){n.cancel(),e=setTimeout(()=>o(...i),t)}return n.cancel=()=>{clearTimeout(e)},n}function es(o,t){return!!(e=o.charAt(t-1))&&e.length==1&&/[\ud800-\udbff]/.test(e)&&function(n){return!!n&&n.length==1&&/[\udc00-\udfff]/.test(n)}(o.charAt(t));var e}function os(o,t){return!!(e=o.charAt(t))&&e.length==1&&/[\u0300-\u036f\u1ab0-\u1aff\u1dc0-\u1dff\u20d0-\u20ff\ufe20-\ufe2f]/.test(e);var e}const nw=function(){const o=[new RegExp("\\p{Emoji}[\\u{E0020}-\\u{E007E}]+\\u{E007F}","u"),new RegExp("\\p{Emoji}\\u{FE0F}?\\u{20E3}","u"),new RegExp("\\p{Emoji}\\u{FE0F}","u"),new RegExp("(?=\\p{General_Category=Other_Symbol})\\p{Emoji}\\p{Emoji_Modifier}*","u")],t=new RegExp("\\p{Regional_Indicator}{2}","u").source,e="(?:"+o.map(n=>n.source).join("|")+")";return new RegExp(`${t}|${e}(?:‍${e})*`,"ug")}();function il(o,t){const e=String(o).matchAll(nw);return Array.from(e).some(n=>n.index{this._renderViewIntoCollectionParent(n,i)}),this.on("remove",(e,n)=>{n.element&&this._parentElement&&n.element.remove()}),this._parentElement=null}destroy(){this.map(t=>t.destroy())}setParent(t){this._parentElement=t;for(const e of this)this._renderViewIntoCollectionParent(e)}delegate(...t){if(!t.length||!t.every(e=>typeof e=="string"))throw new _("ui-viewcollection-delegate-wrong-events",this);return{to:e=>{for(const n of this)for(const i of t)n.delegate(i).to(e);this.on("add",(n,i)=>{for(const r of t)i.delegate(r).to(e)}),this.on("remove",(n,i)=>{for(const r of t)i.stopDelegating(r,e)})}}}_renderViewIntoCollectionParent(t,e){t.isRendered||t.render(),t.element&&this._parentElement&&this._parentElement.insertBefore(t.element,this._parentElement.children[e])}remove(t){return super.remove(t)}}var ow=N(2108),q=N.n(ow),rl=N(3560),iw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(rl.c,iw),rl.c.locals;class tt extends Ae(mt()){constructor(t){super(),this.element=null,this.isRendered=!1,this.locale=t,this.t=t&&t.t,this._viewCollections=new Me,this._unboundChildren=this.createCollection(),this._viewCollections.on("add",(e,n)=>{n.locale=t,n.t=t&&t.t}),this.decorate("render")}get bindTemplate(){return this._bindTemplate?this._bindTemplate:this._bindTemplate=Be.bind(this,this)}createCollection(t){const e=new Ce(t);return this._viewCollections.add(e),e}registerChild(t){Gt(t)||(t=[t]);for(const e of t)this._unboundChildren.add(e)}deregisterChild(t){Gt(t)||(t=[t]);for(const e of t)this._unboundChildren.remove(e)}setTemplate(t){this.template=new Be(t)}extendTemplate(t){Be.extend(this.template,t)}render(){if(this.isRendered)throw new _("ui-view-render-already-rendered",this);this.template&&(this.element=this.template.render(),this.registerChild(this.template.getViews())),this.isRendered=!0}destroy(){this.stopListening(),this._viewCollections.map(t=>t.destroy()),this.template&&this.template._revertData&&this.template.revert(this.element)}}class Be extends kt(){constructor(t){super(),Object.assign(this,ll(cl(t))),this._isRendered=!1,this._revertData=null}render(){const t=this._renderNode({intoFragment:!0});return this._isRendered=!0,t}apply(t){return this._revertData={children:[],bindings:[],attributes:{}},this._renderNode({node:t,intoFragment:!1,isApplying:!0,revertData:this._revertData}),t}revert(t){if(!this._revertData)throw new _("ui-template-revert-not-applied",[this,t]);this._revertTemplateFromNode(t,this._revertData)}*getViews(){yield*function*t(e){if(e.children)for(const n of e.children)Mi(n)?yield n:is(n)&&(yield*t(n))}(this)}static bind(t,e){return{to:(n,i)=>new rw({eventNameOrFunction:n,attribute:n,observable:t,emitter:e,callback:i}),if:(n,i,r)=>new sl({observable:t,emitter:e,attribute:n,valueIfTrue:i,callback:r})}}static extend(t,e){if(t._isRendered)throw new _("template-extend-render",[this,t]);gl(t,ll(cl(e)))}_renderNode(t){let e;if(e=t.node?this.tag&&this.text:this.tag?this.text:!this.text,e)throw new _("ui-template-wrong-syntax",this);return this.text?this._renderText(t):this._renderElement(t)}_renderElement(t){let e=t.node;return e||(e=t.node=document.createElementNS(this.ns||"http://www.w3.org/1999/xhtml",this.tag)),this._renderAttributes(t),this._renderElementChildren(t),this._setUpListeners(t),e}_renderText(t){let e=t.node;return e?t.revertData.text=e.textContent:e=t.node=document.createTextNode(""),Ti(this.text)?this._bindToObservable({schema:this.text,updater:sw(e),data:t}):e.textContent=this.text.join(""),e}_renderAttributes(t){if(!this.attributes)return;const e=t.node,n=t.revertData;for(const i in this.attributes){const r=e.getAttribute(i),s=this.attributes[i];n&&(n.attributes[i]=r);const a=pl(s)?s[0].ns:null;if(Ti(s)){const c=pl(s)?s[0].value:s;n&&ml(i)&&c.unshift(r),this._bindToObservable({schema:c,updater:aw(e,i,a),data:t})}else if(i=="style"&&typeof s[0]!="string")this._renderStyleAttribute(s[0],t);else{n&&r&&ml(i)&&s.unshift(r);const c=s.map(l=>l&&l.value||l).reduce((l,d)=>l.concat(d),[]).reduce(hl,"");ao(c)||e.setAttributeNS(a,i,c)}}}_renderStyleAttribute(t,e){const n=e.node;for(const i in t){const r=t[i];Ti(r)?this._bindToObservable({schema:[r],updater:cw(n,i),data:e}):n.style[i]=r}}_renderElementChildren(t){const e=t.node,n=t.intoFragment?document.createDocumentFragment():e,i=t.isApplying;let r=0;for(const s of this.children)if(rs(s)){if(!i){s.setParent(e);for(const a of s)n.appendChild(a.element)}}else if(Mi(s))i||(s.isRendered||s.render(),n.appendChild(s.element));else if(pn(s))n.appendChild(s);else if(i){const a={children:[],bindings:[],attributes:{}};t.revertData.children.push(a),s._renderNode({intoFragment:!1,node:n.childNodes[r++],isApplying:!0,revertData:a})}else n.appendChild(s.render());t.intoFragment&&e.appendChild(n)}_setUpListeners(t){if(this.eventListeners)for(const e in this.eventListeners){const n=this.eventListeners[e].map(i=>{const[r,s]=e.split("@");return i.activateDomEventListener(r,s,t)});t.revertData&&t.revertData.bindings.push(n)}}_bindToObservable({schema:t,updater:e,data:n}){const i=n.revertData;al(t,e,n);const r=t.filter(s=>!ao(s)).filter(s=>s.observable).map(s=>s.activateAttributeListener(t,e,n));i&&i.bindings.push(r)}_revertTemplateFromNode(t,e){for(const i of e.bindings)for(const r of i)r();if(e.text)return void(t.textContent=e.text);const n=t;for(const i in e.attributes){const r=e.attributes[i];r===null?n.removeAttribute(i):n.setAttribute(i,r)}for(let i=0;ial(t,e,n);return this.emitter.listenTo(this.observable,`change:${this.attribute}`,i),()=>{this.emitter.stopListening(this.observable,`change:${this.attribute}`,i)}}}class rw extends Vo{constructor(t){super(t),this.eventNameOrFunction=t.eventNameOrFunction}activateDomEventListener(t,e,n){const i=(r,s)=>{e&&!s.target.matches(e)||(typeof this.eventNameOrFunction=="function"?this.eventNameOrFunction(s):this.observable.fire(this.eventNameOrFunction,s))};return this.emitter.listenTo(n.node,t,i),()=>{this.emitter.stopListening(n.node,t,i)}}}class sl extends Vo{constructor(t){super(t),this.valueIfTrue=t.valueIfTrue}getValue(t){return!ao(super.getValue(t))&&(this.valueIfTrue||!0)}}function Ti(o){return!!o&&(o.value&&(o=o.value),Array.isArray(o)?o.some(Ti):o instanceof Vo)}function al(o,t,{node:e}){const n=function(r,s){return r.map(a=>a instanceof Vo?a.getValue(s):a)}(o,e);let i;i=o.length==1&&o[0]instanceof sl?n[0]:n.reduce(hl,""),ao(i)?t.remove():t.set(i)}function sw(o){return{set(t){o.textContent=t},remove(){o.textContent=""}}}function aw(o,t,e){return{set(n){o.setAttributeNS(e,t,n)},remove(){o.removeAttributeNS(e,t)}}}function cw(o,t){return{set(e){o.style[t]=e},remove(){o.style[t]=null}}}function cl(o){return Kr(o,t=>{if(t&&(t instanceof Vo||is(t)||Mi(t)||rs(t)))return t})}function ll(o){if(typeof o=="string"?o=function(t){return{text:[t]}}(o):o.text&&function(t){t.text=Bt(t.text)}(o),o.on&&(o.eventListeners=function(t){for(const e in t)dl(t,e);return t}(o.on),delete o.on),!o.text){o.attributes&&function(e){for(const n in e)e[n].value&&(e[n].value=Bt(e[n].value)),dl(e,n)}(o.attributes);const t=[];if(o.children)if(rs(o.children))t.push(o.children);else for(const e of o.children)is(e)||Mi(e)||pn(e)?t.push(e):t.push(new Be(e));o.children=t}return o}function dl(o,t){o[t]=Bt(o[t])}function hl(o,t){return ao(t)?o:ao(o)?t:`${o} ${t}`}function ul(o,t){for(const e in t)o[e]?o[e].push(...t[e]):o[e]=t[e]}function gl(o,t){if(t.attributes&&(o.attributes||(o.attributes={}),ul(o.attributes,t.attributes)),t.eventListeners&&(o.eventListeners||(o.eventListeners={}),ul(o.eventListeners,t.eventListeners)),t.text&&o.text.push(...t.text),t.children&&t.children.length){if(o.children.length!=t.children.length)throw new _("ui-template-extend-children-mismatch",o);let e=0;for(const n of t.children)gl(o.children[e++],n)}}function ao(o){return!o&&o!==0}function Mi(o){return o instanceof tt}function is(o){return o instanceof Be}function rs(o){return o instanceof Ce}function pl(o){return bt(o[0])&&o[0].ns}function ml(o){return o=="class"||o=="style"}class lw extends Ce{constructor(t,e=[]){super(e),this.locale=t}get bodyCollectionContainer(){return this._bodyCollectionContainer}attachToDom(){this._bodyCollectionContainer=new Be({tag:"div",attributes:{class:["ck","ck-reset_all","ck-body","ck-rounded-corners"],dir:this.locale.uiLanguageDirection},children:this}).render();let t=document.querySelector(".ck-body-wrapper");t||(t=bi(document,"div",{class:"ck-body-wrapper"}),document.body.appendChild(t)),t.appendChild(this._bodyCollectionContainer)}detachFromDom(){super.destroy(),this._bodyCollectionContainer&&this._bodyCollectionContainer.remove();const t=document.querySelector(".ck-body-wrapper");t&&t.childElementCount==0&&t.remove()}}var fl=N(1768),dw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(fl.c,dw),fl.c.locals;const kl=class extends tt{constructor(){super();const o=this.bindTemplate;this.set("content",""),this.set("viewBox","0 0 20 20"),this.set("fillColor",""),this.set("isColorInherited",!0),this.set("isVisible",!0),this.setTemplate({tag:"svg",ns:"http://www.w3.org/2000/svg",attributes:{class:["ck","ck-icon",o.if("isVisible","ck-hidden",t=>!t),"ck-reset_all-excluded",o.if("isColorInherited","ck-icon_inherit-color")],viewBox:o.to("viewBox")}})}render(){super.render(),this._updateXMLContent(),this._colorFillPaths(),this.on("change:content",()=>{this._updateXMLContent(),this._colorFillPaths()}),this.on("change:fillColor",()=>{this._colorFillPaths()})}_updateXMLContent(){if(this.content){const o=new DOMParser().parseFromString(this.content.trim(),"image/svg+xml").querySelector("svg"),t=o.getAttribute("viewBox");t&&(this.viewBox=t);for(const{name:e,value:n}of Array.from(o.attributes))kl.presentationalAttributeNames.includes(e)&&this.element.setAttribute(e,n);for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);for(;o.childNodes.length>0;)this.element.appendChild(o.childNodes[0])}}_colorFillPaths(){this.fillColor&&this.element.querySelectorAll(".ck-icon__fill").forEach(o=>{o.style.fill=this.fillColor})}};let mn=kl;mn.presentationalAttributeNames=["alignment-baseline","baseline-shift","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-rendering","cursor","direction","display","dominant-baseline","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","image-rendering","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","opacity","overflow","paint-order","pointer-events","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-overflow","text-rendering","transform","unicode-bidi","vector-effect","visibility","white-space","word-spacing","writing-mode"];class hw extends tt{constructor(){super(),this.set({style:void 0,text:void 0,id:void 0});const t=this.bindTemplate;this.setTemplate({tag:"span",attributes:{class:["ck","ck-button__label"],style:t.to("style"),id:t.to("id")},children:[{text:t.to("text")}]})}}var bl=N(4320),uw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(bl.c,uw),bl.c.locals;class wt extends tt{constructor(t,e=new hw){super(t),this._focusDelayed=null;const n=this.bindTemplate,i=X();this.set("ariaLabel",void 0),this.set("ariaLabelledBy",`ck-editor__aria-label_${i}`),this.set("class",void 0),this.set("labelStyle",void 0),this.set("icon",void 0),this.set("isEnabled",!0),this.set("isOn",!1),this.set("isVisible",!0),this.set("isToggleable",!1),this.set("keystroke",void 0),this.set("label",void 0),this.set("role",void 0),this.set("tabindex",-1),this.set("tooltip",!1),this.set("tooltipPosition","s"),this.set("type","button"),this.set("withText",!1),this.set("withKeystroke",!1),this.children=this.createCollection(),this.labelView=this._setupLabelView(e),this.iconView=new mn,this.iconView.extendTemplate({attributes:{class:"ck-button__icon"}}),this.keystrokeView=this._createKeystrokeView(),this.bind("_tooltipString").to(this,"tooltip",this,"label",this,"keystroke",this._getTooltipString.bind(this));const r={tag:"button",attributes:{class:["ck","ck-button",n.to("class"),n.if("isEnabled","ck-disabled",s=>!s),n.if("isVisible","ck-hidden",s=>!s),n.to("isOn",s=>s?"ck-on":"ck-off"),n.if("withText","ck-button_with-text"),n.if("withKeystroke","ck-button_with-keystroke")],role:n.to("role"),type:n.to("type",s=>s||"button"),tabindex:n.to("tabindex"),"aria-label":n.to("ariaLabel"),"aria-labelledby":n.to("ariaLabelledBy"),"aria-disabled":n.if("isEnabled",!0,s=>!s),"aria-pressed":n.to("isOn",s=>!!this.isToggleable&&String(!!s)),"data-cke-tooltip-text":n.to("_tooltipString"),"data-cke-tooltip-position":n.to("tooltipPosition")},children:this.children,on:{click:n.to(s=>{this.isEnabled?this.fire("execute"):s.preventDefault()})}};f.isSafari&&(this._focusDelayed||(this._focusDelayed=ts(()=>this.focus(),0)),r.on.mousedown=n.to(()=>{this._focusDelayed()}),r.on.mouseup=n.to(()=>{this._focusDelayed.cancel()})),this.setTemplate(r)}render(){super.render(),this.icon&&(this.iconView.bind("content").to(this,"icon"),this.children.add(this.iconView)),this.children.add(this.labelView),this.withKeystroke&&this.keystroke&&this.children.add(this.keystrokeView)}focus(){this.element.focus()}destroy(){this._focusDelayed&&this._focusDelayed.cancel(),super.destroy()}_setupLabelView(t){return t.bind("text","style","id").to(this,"label","labelStyle","ariaLabelledBy"),t}_createKeystrokeView(){const t=new tt;return t.setTemplate({tag:"span",attributes:{class:["ck","ck-button__keystroke"]},children:[{text:this.bindTemplate.to("keystroke",e=>nl(e))}]}),t}_getTooltipString(t,e,n){return t?typeof t=="string"?t:(n&&(n=nl(n)),t instanceof Function?t(e,n):`${e}${n?` (${n})`:""}`):""}}var wl=N(16),gw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(wl.c,gw),wl.c.locals;class Bi extends wt{constructor(t){super(t),this.isToggleable=!0,this.toggleSwitchView=this._createToggleView(),this.extendTemplate({attributes:{class:"ck-switchbutton"}})}render(){super.render(),this.children.add(this.toggleSwitchView)}_createToggleView(){const t=new tt;return t.setTemplate({tag:"span",attributes:{class:["ck","ck-button__toggle"]},children:[{tag:"span",attributes:{class:["ck","ck-button__toggle__inner"]}}]}),t}}const ss='';var Al=N(6112),pw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Al.c,pw),Al.c.locals;class mw extends tt{constructor(t,e){super(t);const n=this.bindTemplate;this.set("isCollapsed",!1),this.set("label",""),this.buttonView=this._createButtonView(),this.children=this.createCollection(),this.set("_collapsibleAriaLabelUid",void 0),e&&this.children.addMany(e),this.setTemplate({tag:"div",attributes:{class:["ck","ck-collapsible",n.if("isCollapsed","ck-collapsible_collapsed")]},children:[this.buttonView,{tag:"div",attributes:{class:["ck","ck-collapsible__children"],role:"region",hidden:n.if("isCollapsed","hidden"),"aria-labelledby":n.to("_collapsibleAriaLabelUid")},children:this.children}]})}render(){super.render(),this._collapsibleAriaLabelUid=this.buttonView.labelView.element.id}focus(){this.buttonView.focus()}_createButtonView(){const t=new wt(this.locale),e=t.bindTemplate;return t.set({withText:!0,icon:ss}),t.extendTemplate({attributes:{"aria-expanded":e.to("isOn",n=>String(n))}}),t.bind("label").to(this),t.bind("isOn").to(this,"isCollapsed",n=>!n),t.on("execute",()=>{this.isCollapsed=!this.isCollapsed}),t}}var Cl=N(7512),fw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Cl.c,fw),Cl.c.locals,N(6644),N(4416);const as=function(){return Te.Date.now()};var kw=/\s/;const bw=function(o){for(var t=o.length;t--&&kw.test(o.charAt(t)););return t};var ww=/^\s+/;const Aw=function(o){return o&&o.slice(0,bw(o)+1).replace(ww,"")},Ni=function(o){return typeof o=="symbol"||we(o)&&gn(o)=="[object Symbol]"};var Cw=/^[-+]0x[0-9a-f]+$/i,_w=/^0b[01]+$/i,vw=/^0o[0-7]+$/i,yw=parseInt;const _l=function(o){if(typeof o=="number")return o;if(Ni(o))return NaN;if(bt(o)){var t=typeof o.valueOf=="function"?o.valueOf():o;o=bt(t)?t+"":t}if(typeof o!="string")return o===0?o:+o;o=Aw(o);var e=_w.test(o);return e||vw.test(o)?yw(o.slice(2),e?2:8):Cw.test(o)?NaN:+o};var xw=Math.max,Ew=Math.min;const Ho=function(o,t,e){var n,i,r,s,a,c,l=0,d=!1,h=!1,u=!0;if(typeof o!="function")throw new TypeError("Expected a function");function g(E){var M=n,z=i;return n=i=void 0,l=E,s=o.apply(z,M)}function p(E){var M=E-c;return c===void 0||M>=t||M<0||h&&E-l>=r}function k(){var E=as();if(p(E))return b(E);a=setTimeout(k,function(M){var z=t-(M-c);return h?Ew(z,r-(M-l)):z}(E))}function b(E){return a=void 0,u&&n?g(E):(n=i=void 0,s)}function A(){var E=as(),M=p(E);if(n=arguments,i=this,c=E,M){if(a===void 0)return function(z){return l=z,a=setTimeout(k,t),d?g(z):s}(c);if(h)return clearTimeout(a),a=setTimeout(k,t),g(c)}return a===void 0&&(a=setTimeout(k,t)),s}return t=_l(t)||0,bt(e)&&(d=!!e.leading,r=(h="maxWait"in e)?xw(_l(e.maxWait)||0,t):r,u="trailing"in e?!!e.trailing:u),A.cancel=function(){a!==void 0&&clearTimeout(a),l=0,n=c=i=a=void 0},A.flush=function(){return a===void 0?s:b(as())},A};var vl=N(512),Dw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(vl.c,Dw),vl.c.locals;class cs extends tt{constructor(t){super(t),this.set("text",void 0),this.set("for",void 0),this.id=`ck-editor__label_${X()}`;const e=this.bindTemplate;this.setTemplate({tag:"label",attributes:{class:["ck","ck-label"],id:this.id,for:e.to("for")},children:[{text:e.to("text")}]})}}var yl=N(4632),Iw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(yl.c,Iw),yl.c.locals;class Pi extends tt{constructor(t,e){super(t);const n=`ck-labeled-field-view-${X()}`,i=`ck-labeled-field-view-status-${X()}`;this.fieldView=e(this,n,i),this.set("label",void 0),this.set("isEnabled",!0),this.set("isEmpty",!0),this.set("isFocused",!1),this.set("errorText",null),this.set("infoText",null),this.set("class",void 0),this.set("placeholder",void 0),this.labelView=this._createLabelView(n),this.statusView=this._createStatusView(i),this.fieldWrapperChildren=this.createCollection([this.fieldView,this.labelView]),this.bind("_statusText").to(this,"errorText",this,"infoText",(s,a)=>s||a);const r=this.bindTemplate;this.setTemplate({tag:"div",attributes:{class:["ck","ck-labeled-field-view",r.to("class"),r.if("isEnabled","ck-disabled",s=>!s),r.if("isEmpty","ck-labeled-field-view_empty"),r.if("isFocused","ck-labeled-field-view_focused"),r.if("placeholder","ck-labeled-field-view_placeholder"),r.if("errorText","ck-error")]},children:[{tag:"div",attributes:{class:["ck","ck-labeled-field-view__input-wrapper"]},children:this.fieldWrapperChildren},this.statusView]})}_createLabelView(t){const e=new cs(this.locale);return e.for=t,e.bind("text").to(this,"label"),e}_createStatusView(t){const e=new tt(this.locale),n=this.bindTemplate;return e.setTemplate({tag:"div",attributes:{class:["ck","ck-labeled-field-view__status",n.if("errorText","ck-labeled-field-view__status_error"),n.if("_statusText","ck-hidden",i=>!i)],id:t,role:n.if("errorText","alert")},children:[{text:n.to("_statusText")}]}),e}focus(t){this.fieldView.focus(t)}}class Sw extends tt{constructor(t){super(t),this.set("value",void 0),this.set("id",void 0),this.set("placeholder",void 0),this.set("isReadOnly",!1),this.set("hasError",!1),this.set("ariaDescribedById",void 0),this.focusTracker=new Qt,this.bind("isFocused").to(this.focusTracker),this.set("isEmpty",!0);const e=this.bindTemplate;this.setTemplate({tag:"input",attributes:{class:["ck","ck-input",e.if("isFocused","ck-input_focused"),e.if("isEmpty","ck-input-text_empty"),e.if("hasError","ck-error")],id:e.to("id"),placeholder:e.to("placeholder"),readonly:e.to("isReadOnly"),"aria-invalid":e.if("hasError",!0),"aria-describedby":e.to("ariaDescribedById")},on:{input:e.to((...n)=>{this.fire("input",...n),this._updateIsEmpty()}),change:e.to(this._updateIsEmpty.bind(this))}})}render(){super.render(),this.focusTracker.add(this.element),this._setDomElementValue(this.value),this._updateIsEmpty(),this.on("change:value",(t,e,n)=>{this._setDomElementValue(n),this._updateIsEmpty()})}destroy(){super.destroy(),this.focusTracker.destroy()}select(){this.element.select()}focus(){this.element.focus()}reset(){this.value=this.element.value="",this._updateIsEmpty()}_updateIsEmpty(){this.isEmpty=!this.element.value}_setDomElementValue(t){this.element.value=t||t===0?t:""}}var xl=N(7848),Tw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(xl.c,Tw),xl.c.locals;class Mw extends Sw{constructor(t){super(t),this.set("inputMode","text");const e=this.bindTemplate;this.extendTemplate({attributes:{inputmode:e.to("inputMode")}})}}class Bw extends Mw{constructor(t){super(t),this.extendTemplate({attributes:{type:"text",class:["ck-input-text"]}})}}var El=N(6076),Nw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(El.c,Nw),El.c.locals;class Pw extends tt{constructor(t){super(t);const e=this.bindTemplate;this.set("isVisible",!1),this.set("position","se"),this.children=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-reset","ck-dropdown__panel",e.to("position",n=>`ck-dropdown__panel_${n}`),e.if("isVisible","ck-dropdown__panel-visible")],tabindex:"-1"},children:this.children,on:{selectstart:e.to(n=>{n.target.tagName.toLocaleLowerCase()!=="input"&&n.preventDefault()})}})}focus(){if(this.children.length){const t=this.children.first;typeof t.focus=="function"?t.focus():Y("ui-dropdown-panel-focus-child-missing-focus",{childView:this.children.first,dropdownPanel:this})}}focusLast(){if(this.children.length){const t=this.children.last;typeof t.focusLast=="function"?t.focusLast():t.focus()}}}var Dl=N(44),Lw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Dl.c,Lw),Dl.c.locals;const ls=class extends tt{constructor(o,t,e){super(o);const n=this.bindTemplate;this.buttonView=t,this.panelView=e,this.set("isOpen",!1),this.set("isEnabled",!0),this.set("class",void 0),this.set("id",void 0),this.set("panelPosition","auto"),this.panelView.bind("isVisible").to(this,"isOpen"),this.keystrokes=new ie,this.focusTracker=new Qt,this.setTemplate({tag:"div",attributes:{class:["ck","ck-dropdown",n.to("class"),n.if("isEnabled","ck-disabled",i=>!i)],id:n.to("id"),"aria-describedby":n.to("ariaDescribedById")},children:[t,e]}),t.extendTemplate({attributes:{class:["ck-dropdown__button"],"data-cke-tooltip-disabled":n.to("isOpen")}})}render(){super.render(),this.focusTracker.add(this.buttonView.element),this.focusTracker.add(this.panelView.element),this.listenTo(this.buttonView,"open",()=>{this.isOpen=!this.isOpen}),this.on("change:isOpen",(t,e,n)=>{if(n)if(this.panelPosition==="auto"){const i=ls._getOptimalPosition({element:this.panelView.element,target:this.buttonView.element,fitInViewport:!0,positions:this._panelPositions});this.panelView.position=i?i.name:this._panelPositions[0].name}else this.panelView.position=this.panelPosition}),this.keystrokes.listenTo(this.element);const o=(t,e)=>{this.isOpen&&(this.isOpen=!1,e())};this.keystrokes.set("arrowdown",(t,e)=>{this.buttonView.isEnabled&&!this.isOpen&&(this.isOpen=!0,e())}),this.keystrokes.set("arrowright",(t,e)=>{this.isOpen&&e()}),this.keystrokes.set("arrowleft",o),this.keystrokes.set("esc",o)}focus(){this.buttonView.focus()}get _panelPositions(){const{south:o,north:t,southEast:e,southWest:n,northEast:i,northWest:r,southMiddleEast:s,southMiddleWest:a,northMiddleEast:c,northMiddleWest:l}=ls.defaultPanelPositions;return this.locale.uiLanguageDirection!=="rtl"?[e,n,s,a,o,i,r,c,l,t]:[n,e,a,s,o,r,i,l,c,t]}};let ds=ls;ds.defaultPanelPositions={south:(o,t)=>({top:o.bottom,left:o.left-(t.width-o.width)/2,name:"s"}),southEast:o=>({top:o.bottom,left:o.left,name:"se"}),southWest:(o,t)=>({top:o.bottom,left:o.left-t.width+o.width,name:"sw"}),southMiddleEast:(o,t)=>({top:o.bottom,left:o.left-(t.width-o.width)/4,name:"sme"}),southMiddleWest:(o,t)=>({top:o.bottom,left:o.left-3*(t.width-o.width)/4,name:"smw"}),north:(o,t)=>({top:o.top-t.height,left:o.left-(t.width-o.width)/2,name:"n"}),northEast:(o,t)=>({top:o.top-t.height,left:o.left,name:"ne"}),northWest:(o,t)=>({top:o.top-t.height,left:o.left-t.width+o.width,name:"nw"}),northMiddleEast:(o,t)=>({top:o.top-t.height,left:o.left-(t.width-o.width)/4,name:"nme"}),northMiddleWest:(o,t)=>({top:o.top-t.height,left:o.left-3*(t.width-o.width)/4,name:"nmw"})},ds._getOptimalPosition=Zr;class Ow extends wt{constructor(t){super(t),this.arrowView=this._createArrowView(),this.extendTemplate({attributes:{"aria-haspopup":!0,"aria-expanded":this.bindTemplate.to("isOn",e=>String(e))}}),this.delegate("execute").to(this,"open")}render(){super.render(),this.children.add(this.arrowView)}_createArrowView(){const t=new mn;return t.content=ss,t.extendTemplate({attributes:{class:"ck-dropdown__arrow"}}),t}}class _e extends kt(){constructor(t){if(super(),this.focusables=t.focusables,this.focusTracker=t.focusTracker,this.keystrokeHandler=t.keystrokeHandler,this.actions=t.actions,t.actions&&t.keystrokeHandler)for(const e in t.actions){let n=t.actions[e];typeof n=="string"&&(n=[n]);for(const i of n)t.keystrokeHandler.set(i,(r,s)=>{this[e](),s()})}this.on("forwardCycle",()=>this.focusFirst(),{priority:"low"}),this.on("backwardCycle",()=>this.focusLast(),{priority:"low"})}get first(){return this.focusables.find(hs)||null}get last(){return this.focusables.filter(hs).slice(-1)[0]||null}get next(){return this._getDomFocusableItem(1)}get previous(){return this._getDomFocusableItem(-1)}get current(){let t=null;return this.focusTracker.focusedElement===null?null:(this.focusables.find((e,n)=>{const i=e.element===this.focusTracker.focusedElement;return i&&(t=n),i}),t)}focusFirst(){this._focus(this.first,1)}focusLast(){this._focus(this.last,-1)}focusNext(){const t=this.next;t&&this.focusables.getIndex(t)===this.current||t===this.first?this.fire("forwardCycle"):this._focus(t,1)}focusPrevious(){const t=this.previous;t&&this.focusables.getIndex(t)===this.current||t===this.last?this.fire("backwardCycle"):this._focus(t,-1)}_focus(t,e){t&&this.focusTracker.focusedElement!==t.element&&t.focus(e)}_getDomFocusableItem(t){const e=this.focusables.length;if(!e)return null;const n=this.current;if(n===null)return this[t===1?"first":"last"];let i=this.focusables.get(n),r=(n+e+t)%e;do{const s=this.focusables.get(r);if(hs(s)){i=s;break}r=(r+e+t)%e}while(r!==n);return i}}function hs(o){return Uo(o)&&Bn(o.element)}function Uo(o){return!(!("focus"in o)||typeof o.focus!="function")}class Il extends tt{constructor(t){super(t),this.setTemplate({tag:"span",attributes:{class:["ck","ck-toolbar__separator"]}})}}class zw extends tt{constructor(t){super(t),this.setTemplate({tag:"span",attributes:{class:["ck","ck-toolbar__line-break"]}})}}var Rw=Object.defineProperty,Sl=Object.getOwnPropertySymbols,jw=Object.prototype.hasOwnProperty,Fw=Object.prototype.propertyIsEnumerable,Tl=(o,t,e)=>t in o?Rw(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Ml=(o,t)=>{for(var e in t||(t={}))jw.call(t,e)&&Tl(o,e,t[e]);if(Sl)for(var e of Sl(t))Fw.call(t,e)&&Tl(o,e,t[e]);return o};function Bl(o){if(Array.isArray(o))return{items:o,removeItems:[]};const t={items:[],removeItems:[]};return o?Ml(Ml({},t),o):t}class R extends mt(){constructor(t){super(),this._disableStack=new Set,this.editor=t,this.set("isEnabled",!0)}forceDisabled(t){this._disableStack.add(t),this._disableStack.size==1&&(this.on("set:isEnabled",Nl,{priority:"highest"}),this.isEnabled=!1)}clearForceDisabled(t){this._disableStack.delete(t),this._disableStack.size==0&&(this.off("set:isEnabled",Nl),this.isEnabled=!0)}destroy(){this.stopListening()}static get isContextPlugin(){return!1}}function Nl(o){o.return=!1,o.stop()}class at extends mt(){constructor(t){super(),this.editor=t,this.set("value",void 0),this.set("isEnabled",!1),this._affectsData=!0,this._isEnabledBasedOnSelection=!0,this._disableStack=new Set,this.decorate("execute"),this.listenTo(this.editor.model.document,"change",()=>{this.refresh()}),this.listenTo(t,"change:isReadOnly",()=>{this.refresh()}),this.on("set:isEnabled",e=>{if(!this.affectsData)return;const n=t.model.document.selection,i=n.getFirstPosition().root.rootName!="$graveyard"&&t.model.canEditAt(n);(t.isReadOnly||this._isEnabledBasedOnSelection&&!i)&&(e.return=!1,e.stop())},{priority:"highest"}),this.on("execute",e=>{this.isEnabled||e.stop()},{priority:"high"})}get affectsData(){return this._affectsData}set affectsData(t){this._affectsData=t}refresh(){this.isEnabled=!0}forceDisabled(t){this._disableStack.add(t),this._disableStack.size==1&&(this.on("set:isEnabled",Pl,{priority:"highest"}),this.isEnabled=!1)}clearForceDisabled(t){this._disableStack.delete(t),this._disableStack.size==0&&(this.off("set:isEnabled",Pl),this.refresh())}execute(...t){}destroy(){this.stopListening()}}function Pl(o){o.return=!1,o.stop()}class Ll extends at{constructor(){super(...arguments),this._childCommandsDefinitions=[]}refresh(){}execute(...t){const e=this._getFirstEnabledCommand();return!!e&&e.execute(t)}registerChildCommand(t,e={}){Z(this._childCommandsDefinitions,{command:t,priority:e.priority||"normal"}),t.on("change:isEnabled",()=>this._checkEnabled()),this._checkEnabled()}_checkEnabled(){this.isEnabled=!!this._getFirstEnabledCommand()}_getFirstEnabledCommand(){const t=this._childCommandsDefinitions.find(({command:e})=>e.isEnabled);return t&&t.command}}class Ol extends kt(){constructor(t,e=[],n=[]){super(),this._plugins=new Map,this._context=t,this._availablePlugins=new Map;for(const i of e)i.pluginName&&this._availablePlugins.set(i.pluginName,i);this._contextPlugins=new Map;for(const[i,r]of n)this._contextPlugins.set(i,r),this._contextPlugins.set(r,i),i.pluginName&&this._availablePlugins.set(i.pluginName,i)}*[Symbol.iterator](){for(const t of this._plugins)typeof t[0]=="function"&&(yield t)}get(t){const e=this._plugins.get(t);if(!e){let n=t;throw typeof t=="function"&&(n=t.pluginName||t.name),new _("plugincollection-plugin-not-loaded",this._context,{plugin:n})}return e}has(t){return this._plugins.has(t)}init(t,e=[],n=[]){const i=this,r=this._context;(function p(k,b=new Set){k.forEach(A=>{c(A)&&(b.has(A)||(b.add(A),A.pluginName&&!i._availablePlugins.has(A.pluginName)&&i._availablePlugins.set(A.pluginName,A),A.requires&&p(A.requires,b)))})})(t),u(t);const s=[...function p(k,b=new Set){return k.map(A=>c(A)?A:i._availablePlugins.get(A)).reduce((A,E)=>b.has(E)?A:(b.add(E),E.requires&&(u(E.requires,E),p(E.requires,b).forEach(M=>A.add(M))),A.add(E)),new Set)}(t.filter(p=>!d(p,e)))];(function(p,k){for(const b of k){if(typeof b!="function")throw new _("plugincollection-replace-plugin-invalid-type",null,{pluginItem:b});const A=b.pluginName;if(!A)throw new _("plugincollection-replace-plugin-missing-name",null,{pluginItem:b});if(b.requires&&b.requires.length)throw new _("plugincollection-plugin-for-replacing-cannot-have-dependencies",null,{pluginName:A});const E=i._availablePlugins.get(A);if(!E)throw new _("plugincollection-plugin-for-replacing-not-exist",null,{pluginName:A});const M=p.indexOf(E);if(M===-1){if(i._contextPlugins.has(E))return;throw new _("plugincollection-plugin-for-replacing-not-loaded",null,{pluginName:A})}if(E.requires&&E.requires.length)throw new _("plugincollection-replaced-plugin-cannot-have-dependencies",null,{pluginName:A});p.splice(M,1,b),i._availablePlugins.set(A,b)}})(s,n);const a=s.map(p=>{let k=i._contextPlugins.get(p);return k=k||new p(r),i._add(p,k),k});return g(a,"init").then(()=>g(a,"afterInit")).then(()=>a);function c(p){return typeof p=="function"}function l(p){return c(p)&&!!p.isContextPlugin}function d(p,k){return k.some(b=>b===p||h(p)===b||h(b)===p)}function h(p){return c(p)?p.pluginName||p.name:p}function u(p,k=null){p.map(b=>c(b)?b:i._availablePlugins.get(b)||b).forEach(b=>{(function(A,E){if(!c(A))throw E?new _("plugincollection-soft-required",r,{missingPlugin:A,requiredBy:h(E)}):new _("plugincollection-plugin-not-found",r,{plugin:A})})(b,k),function(A,E){if(l(E)&&!l(A))throw new _("plugincollection-context-required",r,{plugin:h(A),requiredBy:h(E)})}(b,k),function(A,E){if(E&&d(A,e))throw new _("plugincollection-required",r,{plugin:h(A),requiredBy:h(E)})}(b,k)})}function g(p,k){return p.reduce((b,A)=>A[k]?i._contextPlugins.has(A)?b:b.then(A[k].bind(A)):b,Promise.resolve())}}destroy(){const t=[];for(const[,e]of this)typeof e.destroy!="function"||this._contextPlugins.has(e)||t.push(e.destroy());return Promise.all(t)}_add(t,e){this._plugins.set(t,e);const n=t.pluginName;if(n){if(this._plugins.has(n))throw new _("plugincollection-plugin-name-conflict",null,{pluginName:n,plugin1:this._plugins.get(n).constructor,plugin2:t});this._plugins.set(n,e)}}}class zl{constructor(t){this._contextOwner=null,this.config=new Oc(t,this.constructor.defaultConfig);const e=this.constructor.builtinPlugins;this.config.define("plugins",e),this.plugins=new Ol(this,e);const n=this.config.get("language")||{};this.locale=new ew({uiLanguage:typeof n=="string"?n:n.ui,contentLanguage:this.config.get("language.content")}),this.t=this.locale.t,this.editors=new Me}initPlugins(){const t=this.config.get("plugins")||[],e=this.config.get("substitutePlugins")||[];for(const n of t.concat(e)){if(typeof n!="function")throw new _("context-initplugins-constructor-only",null,{Plugin:n});if(n.isContextPlugin!==!0)throw new _("context-initplugins-invalid-plugin",null,{Plugin:n})}return this.plugins.init(t,[],e)}destroy(){return Promise.all(Array.from(this.editors,t=>t.destroy())).then(()=>this.plugins.destroy())}_addEditor(t,e){if(this._contextOwner)throw new _("context-addeditor-private-context");this.editors.add(t),e&&(this._contextOwner=t)}_removeEditor(t){return this.editors.has(t)&&this.editors.remove(t),this._contextOwner===t?this.destroy():Promise.resolve()}_getEditorConfig(){const t={};for(const e of this.config.names())["plugins","removePlugins","extraPlugins"].includes(e)||(t[e]=this.config.get(e));return t}static create(t){return new Promise(e=>{const n=new this(t);e(n.initPlugins().then(()=>n))})}}class Li extends mt(){constructor(t){super(),this.context=t}destroy(){this.stopListening()}static get isContextPlugin(){return!0}}class Vw extends ie{constructor(t){super(),this.editor=t}set(t,e,n={}){if(typeof e=="string"){const i=e;e=(r,s)=>{this.editor.execute(i),s()}}super.set(t,e,n)}}var Rl=N(6908),Hw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Rl.c,Hw),Rl.c.locals;const Oi=new WeakMap;let jl=!1;function Fl({view:o,element:t,text:e,isDirectHost:n=!0,keepOnFocus:i=!1}){const r=o.document;function s(a){Oi.get(r).set(t,{text:a,isDirectHost:n,keepOnFocus:i,hostElement:n?t:null}),o.change(c=>us(r,c))}Oi.has(r)||(Oi.set(r,new Map),r.registerPostFixer(a=>us(r,a)),r.on("change:isComposing",()=>{o.change(a=>us(r,a))},{priority:"high"})),t.is("editableElement")&&t.on("change:placeholder",(a,c,l)=>{s(l)}),t.placeholder?s(t.placeholder):e&&s(e),e&&function(){jl||Y("enableplaceholder-deprecated-text-option"),jl=!0}()}function Uw(o,t){return!t.hasClass("ck-placeholder")&&(o.addClass("ck-placeholder",t),!0)}function qw(o,t){return!!t.hasClass("ck-placeholder")&&(o.removeClass("ck-placeholder",t),!0)}function Gw(o,t){if(!o.isAttached()||Array.from(o.getChildren()).some(i=>!i.is("uiElement")))return!1;const e=o.document,n=e.selection.anchor;return(!e.isComposing||!n||n.parent!==o)&&(!!t||!e.isFocused||!!n&&n.parent!==o)}function us(o,t){const e=Oi.get(o),n=[];let i=!1;for(const[r,s]of e)s.isDirectHost&&(n.push(r),Vl(t,r,s)&&(i=!0));for(const[r,s]of e){if(s.isDirectHost)continue;const a=Ww(r);a&&(n.includes(a)||(s.hostElement=a,Vl(t,r,s)&&(i=!0)))}return i}function Vl(o,t,e){const{text:n,isDirectHost:i,hostElement:r}=e;let s=!1;return r.getAttribute("data-placeholder")!==n&&(o.setAttribute("data-placeholder",n,r),s=!0),(i||t.childCount==1)&&Gw(r,e.keepOnFocus)?Uw(o,r)&&(s=!0):qw(o,r)&&(s=!0),s}function Ww(o){if(o.childCount){const t=o.getChild(0);if(t.is("element")&&!t.is("uiElement")&&!t.is("attributeElement"))return t}return null}class Nn{is(){throw new Error("is() method is abstract")}}const Hl=function(o){return $r(o,4)};class Pn extends kt(Nn){constructor(t){super(),this.document=t,this.parent=null}get index(){let t;if(!this.parent)return null;if((t=this.parent.getChildIndex(this))==-1)throw new _("view-node-not-found-in-parent",this);return t}get nextSibling(){const t=this.index;return t!==null&&this.parent.getChild(t+1)||null}get previousSibling(){const t=this.index;return t!==null&&this.parent.getChild(t-1)||null}get root(){let t=this;for(;t.parent;)t=t.parent;return t}isAttached(){return this.root.is("rootElement")}getPath(){const t=[];let e=this;for(;e.parent;)t.unshift(e.index),e=e.parent;return t}getAncestors(t={}){const e=[];let n=t.includeSelf?this:this.parent;for(;n;)e[t.parentFirst?"push":"unshift"](n),n=n.parent;return e}getCommonAncestor(t,e={}){const n=this.getAncestors(e),i=t.getAncestors(e);let r=0;for(;n[r]==i[r]&&n[r];)r++;return r===0?null:n[r-1]}isBefore(t){if(this==t||this.root!==t.root)return!1;const e=this.getPath(),n=t.getPath(),i=St(e,n);switch(i){case"prefix":return!0;case"extension":return!1;default:return e[i]t.data.length)throw new _("view-textproxy-wrong-offsetintext",this);if(n<0||e+n>t.data.length)throw new _("view-textproxy-wrong-length",this);this.data=t.data.substring(e,e+n),this.offsetInText=e}get offsetSize(){return this.data.length}get isPartial(){return this.data.length!==this.textNode.data.length}get parent(){return this.textNode.parent}get root(){return this.textNode.root}get document(){return this.textNode.document}getAncestors(t={}){const e=[];let n=t.includeSelf?this.textNode:this.parent;for(;n!==null;)e[t.parentFirst?"push":"unshift"](n),n=n.parent;return e}}$e.prototype.is=function(o){return o==="$textProxy"||o==="view:$textProxy"||o==="textProxy"||o==="view:textProxy"};class Ne{constructor(...t){this._patterns=[],this.add(...t)}add(...t){for(let e of t)(typeof e=="string"||e instanceof RegExp)&&(e={name:e}),this._patterns.push(e)}match(...t){for(const e of t)for(const n of this._patterns){const i=Ul(e,n);if(i)return{element:e,pattern:n,match:i}}return null}matchAll(...t){const e=[];for(const n of t)for(const i of this._patterns){const r=Ul(n,i);r&&e.push({element:n,pattern:i,match:r})}return e.length>0?e:null}getElementName(){if(this._patterns.length!==1)return null;const t=this._patterns[0],e=t.name;return typeof t=="function"||!e||e instanceof RegExp?null:e}}function Ul(o,t){if(typeof t=="function")return t(o);const e={};return t.name&&(e.name=function(n,i){return n instanceof RegExp?!!i.match(n):n===i}(t.name,o.name),!e.name)||t.attributes&&(e.attributes=function(n,i){const r=new Set(i.getAttributeKeys());return de(n)?(n.style!==void 0&&Y("matcher-pattern-deprecated-attributes-style-key",n),n.class!==void 0&&Y("matcher-pattern-deprecated-attributes-class-key",n)):(r.delete("style"),r.delete("class")),gs(n,r,s=>i.getAttribute(s))}(t.attributes,o),!e.attributes)||t.classes&&(e.classes=function(n,i){return gs(n,i.getClassNames(),()=>{})}(t.classes,o),!e.classes)||t.styles&&(e.styles=function(n,i){return gs(n,i.getStyleNames(!0),r=>i.getStyle(r))}(t.styles,o),!e.styles)?null:e}function gs(o,t,e){const n=function(s){return Array.isArray(s)?s.map(a=>de(a)?(a.key!==void 0&&a.value!==void 0||Y("matcher-pattern-missing-key-or-value",a),[a.key,a.value]):[a,!0]):de(s)?Object.entries(s):[[s,!0]]}(o),i=Array.from(t),r=[];if(n.forEach(([s,a])=>{i.forEach(c=>{(function(l,d){return l===!0||l===d||l instanceof RegExp&&d.match(l)})(s,c)&&function(l,d,h){if(l===!0)return!0;const u=h(d);return l===u||l instanceof RegExp&&!!String(u).match(l)}(a,c,e)&&r.push(c)})}),n.length&&!(r.lengthi?0:i+t),(e=e>i?i:e)<0&&(e+=i),i=t>e?0:e-t>>>0,t>>>=0;for(var r=Array(i);++n0){if(++t>=800)return arguments[0]}else t=0;return o.apply(void 0,arguments)}}(f0),w0=function(o,t){return b0(p0(o,t,Ln),o+"")},A0=function(o,t,e){if(!bt(e))return!1;var n=typeof t;return!!(n=="number"?yi(e)&&Pr(t,e.length):n=="string"&&t in e)&&Mo(e[t],o)},Yl=function(o){return w0(function(t,e){var n=-1,i=e.length,r=i>1?e[i-1]:void 0,s=i>2?e[2]:void 0;for(r=o.length>3&&typeof r=="function"?(i--,r):void 0,s&&A0(e[0],e[1],s)&&(r=i<3?void 0:r,i=1),t=Object(t);++nn===t);return Array.isArray(e)}set(t,e){if(bt(t))for(const[n,i]of Object.entries(t))this._styleProcessor.toNormalizedForm(n,i,this._styles);else this._styleProcessor.toNormalizedForm(t,e,this._styles)}remove(t){const e=Cs(t);a0(this._styles,e),delete this._styles[t],this._cleanEmptyObjectsOnPath(e)}getNormalized(t){return this._styleProcessor.getNormalized(t,this._styles)}toString(){return this.isEmpty?"":this.getStylesEntries().map(t=>t.join(":")).sort().join(";")+";"}getAsString(t){if(this.isEmpty)return;if(this._styles[t]&&!bt(this._styles[t]))return this._styles[t];const e=this._styleProcessor.getReducedForm(t,this._styles).find(([n])=>n===t);return Array.isArray(e)?e[1]:void 0}getStyleNames(t=!1){return this.isEmpty?[]:t?this._styleProcessor.getStyleNames(this._styles):this.getStylesEntries().map(([e])=>e)}clear(){this._styles={}}getStylesEntries(){const t=[],e=Object.keys(this._styles);for(const n of e)t.push(...this._styleProcessor.getReducedForm(n,this._styles));return t}_cleanEmptyObjectsOnPath(t){const e=t.split(".");if(!(e.length>1))return;const n=e.splice(0,e.length-1).join("."),i=zi(this._styles,n);i&&!Object.keys(i).length&&this.remove(n)}}class v0{constructor(){this._normalizers=new Map,this._extractors=new Map,this._reducers=new Map,this._consumables=new Map}toNormalizedForm(t,e,n){if(bt(e))_s(n,Cs(t),e);else if(this._normalizers.has(t)){const i=this._normalizers.get(t),{path:r,value:s}=i(e);_s(n,r,s)}else _s(n,t,e)}getNormalized(t,e){if(!t)return Ql({},e);if(e[t]!==void 0)return e[t];if(this._extractors.has(t)){const n=this._extractors.get(t);if(typeof n=="string")return zi(e,n);const i=n(t,e);if(i)return i}return zi(e,Cs(t))}getReducedForm(t,e){const n=this.getNormalized(t,e);return n===void 0?[]:this._reducers.has(t)?this._reducers.get(t)(n):[[t,n]]}getStyleNames(t){const e=Array.from(this._consumables.keys()).filter(i=>{const r=this.getNormalized(i,t);return r&&typeof r=="object"?Object.keys(r).length:r}),n=new Set([...e,...Object.keys(t)]);return Array.from(n)}getRelatedStyles(t){return this._consumables.get(t)||[]}setNormalizer(t,e){this._normalizers.set(t,e)}setExtractor(t,e){this._extractors.set(t,e)}setReducer(t,e){this._reducers.set(t,e)}setStyleRelation(t,e){this._mapStyleNames(t,e);for(const n of e)this._mapStyleNames(n,[t])}_mapStyleNames(t,e){this._consumables.has(t)||this._consumables.set(t,[]),this._consumables.get(t).push(...e)}}function Cs(o){return o.replace("-",".")}function _s(o,t,e){let n=e;bt(e)&&(n=Ql({},zi(o,t),e)),_0(o,t,n)}class he extends Pn{constructor(t,e,n,i){if(super(t),this._unsafeAttributesToRender=[],this._customProperties=new Map,this.name=e,this._attrs=function(r){const s=We(r);for(const[a,c]of s)c===null?s.delete(a):typeof c!="string"&&s.set(a,String(c));return s}(n),this._children=[],i&&this._insertChild(0,i),this._classes=new Set,this._attrs.has("class")){const r=this._attrs.get("class");Zl(this._classes,r),this._attrs.delete("class")}this._styles=new As(this.document.stylesProcessor),this._attrs.has("style")&&(this._styles.setTo(this._attrs.get("style")),this._attrs.delete("style"))}get childCount(){return this._children.length}get isEmpty(){return this._children.length===0}getChild(t){return this._children[t]}getChildIndex(t){return this._children.indexOf(t)}getChildren(){return this._children[Symbol.iterator]()}*getAttributeKeys(){this._classes.size>0&&(yield"class"),this._styles.isEmpty||(yield"style"),yield*this._attrs.keys()}*getAttributes(){yield*this._attrs.entries(),this._classes.size>0&&(yield["class",this.getAttribute("class")]),this._styles.isEmpty||(yield["style",this.getAttribute("style")])}getAttribute(t){if(t=="class")return this._classes.size>0?[...this._classes].join(" "):void 0;if(t=="style"){const e=this._styles.toString();return e==""?void 0:e}return this._attrs.get(t)}hasAttribute(t){return t=="class"?this._classes.size>0:t=="style"?!this._styles.isEmpty:this._attrs.has(t)}isSimilar(t){if(!(t instanceof he))return!1;if(this===t)return!0;if(this.name!=t.name||this._attrs.size!==t._attrs.size||this._classes.size!==t._classes.size||this._styles.size!==t._styles.size)return!1;for(const[e,n]of this._attrs)if(!t._attrs.has(e)||t._attrs.get(e)!==n)return!1;for(const e of this._classes)if(!t._classes.has(e))return!1;for(const e of this._styles.getStyleNames())if(!t._styles.has(e)||t._styles.getAsString(e)!==this._styles.getAsString(e))return!1;return!0}hasClass(...t){for(const e of t)if(!this._classes.has(e))return!1;return!0}getClassNames(){return this._classes.keys()}getStyle(t){return this._styles.getAsString(t)}getNormalizedStyle(t){return this._styles.getNormalized(t)}getStyleNames(t){return this._styles.getStyleNames(t)}hasStyle(...t){for(const e of t)if(!this._styles.has(e))return!1;return!0}findAncestor(...t){const e=new Ne(...t);let n=this.parent;for(;n&&!n.is("documentFragment");){if(e.match(n))return n;n=n.parent}return null}getCustomProperty(t){return this._customProperties.get(t)}*getCustomProperties(){yield*this._customProperties.entries()}getIdentity(){const t=Array.from(this._classes).sort().join(","),e=this._styles.toString(),n=Array.from(this._attrs).map(i=>`${i[0]}="${i[1]}"`).sort().join(" ");return this.name+(t==""?"":` class="${t}"`)+(e?` style="${e}"`:"")+(n==""?"":` ${n}`)}shouldRenderUnsafeAttribute(t){return this._unsafeAttributesToRender.includes(t)}_clone(t=!1){const e=[];if(t)for(const i of this.getChildren())e.push(i._clone(t));const n=new this.constructor(this.document,this.name,this._attrs,e);return n._classes=new Set(this._classes),n._styles.set(this._styles.getNormalized()),n._customProperties=new Map(this._customProperties),n.getFillerOffset=this.getFillerOffset,n._unsafeAttributesToRender=this._unsafeAttributesToRender,n}_appendChild(t){return this._insertChild(this.childCount,t)}_insertChild(t,e){this._fireChange("children",this);let n=0;const i=function(r,s){return typeof s=="string"?[new vt(r,s)]:(Gt(s)||(s=[s]),Array.from(s).map(a=>typeof a=="string"?new vt(r,a):a instanceof $e?new vt(r,a.data):a))}(this.document,e);for(const r of i)r.parent!==null&&r._remove(),r.parent=this,r.document=this.document,this._children.splice(t,0,r),t++,n++;return n}_removeChildren(t,e=1){this._fireChange("children",this);for(let n=t;n0&&(this._classes.clear(),!0):t=="style"?!this._styles.isEmpty&&(this._styles.clear(),!0):this._attrs.delete(t)}_addClass(t){this._fireChange("attributes",this);for(const e of Bt(t))this._classes.add(e)}_removeClass(t){this._fireChange("attributes",this);for(const e of Bt(t))this._classes.delete(e)}_setStyle(t,e){this._fireChange("attributes",this),typeof t!="string"?this._styles.set(t):this._styles.set(t,e)}_removeStyle(t){this._fireChange("attributes",this);for(const e of Bt(t))this._styles.remove(e)}_setCustomProperty(t,e){this._customProperties.set(t,e)}_removeCustomProperty(t){return this._customProperties.delete(t)}}function Zl(o,t){const e=t.split(/\s+/);o.clear(),e.forEach(n=>o.add(n))}he.prototype.is=function(o,t){return t?t===this.name&&(o==="element"||o==="view:element"):o==="element"||o==="view:element"||o==="node"||o==="view:node"};class qo extends he{constructor(t,e,n,i){super(t,e,n,i),this.getFillerOffset=y0}}function y0(){const o=[...this.getChildren()],t=o[this.childCount-1];if(t&&t.is("element","br"))return this.childCount;for(const e of o)if(!e.is("uiElement"))return null;return this.childCount}qo.prototype.is=function(o,t){return t?t===this.name&&(o==="containerElement"||o==="view:containerElement"||o==="element"||o==="view:element"):o==="containerElement"||o==="view:containerElement"||o==="element"||o==="view:element"||o==="node"||o==="view:node"};class Ri extends mt(qo){constructor(t,e,n,i){super(t,e,n,i),this.set("isReadOnly",!1),this.set("isFocused",!1),this.set("placeholder",void 0),this.bind("isReadOnly").to(t),this.bind("isFocused").to(t,"isFocused",r=>r&&t.selection.editableElement==this),this.listenTo(t.selection,"change",()=>{this.isFocused=t.isFocused&&t.selection.editableElement==this})}destroy(){this.stopListening()}}Ri.prototype.is=function(o,t){return t?t===this.name&&(o==="editableElement"||o==="view:editableElement"||o==="containerElement"||o==="view:containerElement"||o==="element"||o==="view:element"):o==="editableElement"||o==="view:editableElement"||o==="containerElement"||o==="view:containerElement"||o==="element"||o==="view:element"||o==="node"||o==="view:node"};const Jl=Symbol("rootName");class Xl extends Ri{constructor(t,e){super(t,e),this.rootName="main"}get rootName(){return this.getCustomProperty(Jl)}set rootName(t){this._setCustomProperty(Jl,t)}set _name(t){this.name=t}}Xl.prototype.is=function(o,t){return t?t===this.name&&(o==="rootElement"||o==="view:rootElement"||o==="editableElement"||o==="view:editableElement"||o==="containerElement"||o==="view:containerElement"||o==="element"||o==="view:element"):o==="rootElement"||o==="view:rootElement"||o==="editableElement"||o==="view:editableElement"||o==="containerElement"||o==="view:containerElement"||o==="element"||o==="view:element"||o==="node"||o==="view:node"};class On{constructor(t={}){if(!t.boundaries&&!t.startPosition)throw new _("view-tree-walker-no-start-position",null);if(t.direction&&t.direction!="forward"&&t.direction!="backward")throw new _("view-tree-walker-unknown-direction",t.startPosition,{direction:t.direction});this.boundaries=t.boundaries||null,t.startPosition?this._position=V._createAt(t.startPosition):this._position=V._createAt(t.boundaries[t.direction=="backward"?"end":"start"]),this.direction=t.direction||"forward",this.singleCharacters=!!t.singleCharacters,this.shallow=!!t.shallow,this.ignoreElementEnd=!!t.ignoreElementEnd,this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null,this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null}[Symbol.iterator](){return this}get position(){return this._position}skip(t){let e,n;do n=this.position,e=this.next();while(!e.done&&t(e.value));e.done||(this._position=n)}next(){return this.direction=="forward"?this._next():this._previous()}_next(){let t=this.position.clone();const e=this.position,n=t.parent;if(n.parent===null&&t.offset===n.childCount)return{done:!0,value:void 0};if(n===this._boundaryEndParent&&t.offset==this.boundaries.end.offset)return{done:!0,value:void 0};let i;if(n instanceof vt){if(t.isAtEnd)return this._position=V._createAfter(n),this._next();i=n.data[t.offset]}else i=n.getChild(t.offset);if(i instanceof he){if(this.shallow){if(this.boundaries&&this.boundaries.end.isBefore(t))return{done:!0,value:void 0};t.offset++}else t=new V(i,0);return this._position=t,this._formatReturnValue("elementStart",i,e,t,1)}if(i instanceof vt){if(this.singleCharacters)return t=new V(i,0),this._position=t,this._next();let r,s=i.data.length;return i==this._boundaryEndParent?(s=this.boundaries.end.offset,r=new $e(i,0,s),t=V._createAfter(r)):(r=new $e(i,0,i.data.length),t.offset++),this._position=t,this._formatReturnValue("text",r,e,t,s)}if(typeof i=="string"){let r;this.singleCharacters?r=1:r=(n===this._boundaryEndParent?this.boundaries.end.offset:n.data.length)-t.offset;const s=new $e(n,t.offset,r);return t.offset+=r,this._position=t,this._formatReturnValue("text",s,e,t,r)}return t=V._createAfter(n),this._position=t,this.ignoreElementEnd?this._next():this._formatReturnValue("elementEnd",n,e,t)}_previous(){let t=this.position.clone();const e=this.position,n=t.parent;if(n.parent===null&&t.offset===0)return{done:!0,value:void 0};if(n==this._boundaryStartParent&&t.offset==this.boundaries.start.offset)return{done:!0,value:void 0};let i;if(n instanceof vt){if(t.isAtStart)return this._position=V._createBefore(n),this._previous();i=n.data[t.offset-1]}else i=n.getChild(t.offset-1);if(i instanceof he)return this.shallow?(t.offset--,this._position=t,this._formatReturnValue("elementStart",i,e,t,1)):(t=new V(i,i.childCount),this._position=t,this.ignoreElementEnd?this._previous():this._formatReturnValue("elementEnd",i,e,t));if(i instanceof vt){if(this.singleCharacters)return t=new V(i,i.data.length),this._position=t,this._previous();let r,s=i.data.length;if(i==this._boundaryStartParent){const a=this.boundaries.start.offset;r=new $e(i,a,i.data.length-a),s=r.data.length,t=V._createBefore(r)}else r=new $e(i,0,i.data.length),t.offset--;return this._position=t,this._formatReturnValue("text",r,e,t,s)}if(typeof i=="string"){let r;if(this.singleCharacters)r=1;else{const a=n===this._boundaryStartParent?this.boundaries.start.offset:0;r=t.offset-a}t.offset-=r;const s=new $e(n,t.offset,r);return this._position=t,this._formatReturnValue("text",s,e,t,r)}return t=V._createBefore(n),this._position=t,this._formatReturnValue("elementStart",n,e,t,1)}_formatReturnValue(t,e,n,i,r){return e instanceof $e&&(e.offsetInText+e.data.length==e.textNode.data.length&&(this.direction!="forward"||this.boundaries&&this.boundaries.end.isEqual(this.position)?n=V._createAfter(e.textNode):(i=V._createAfter(e.textNode),this._position=i)),e.offsetInText===0&&(this.direction!="backward"||this.boundaries&&this.boundaries.start.isEqual(this.position)?n=V._createBefore(e.textNode):(i=V._createBefore(e.textNode),this._position=i))),{done:!1,value:{type:t,item:e,previousPosition:n,nextPosition:i,length:r}}}}class V extends Nn{constructor(t,e){super(),this.parent=t,this.offset=e}get nodeAfter(){return this.parent.is("$text")?null:this.parent.getChild(this.offset)||null}get nodeBefore(){return this.parent.is("$text")?null:this.parent.getChild(this.offset-1)||null}get isAtStart(){return this.offset===0}get isAtEnd(){const t=this.parent.is("$text")?this.parent.data.length:this.parent.childCount;return this.offset===t}get root(){return this.parent.root}get editableElement(){let t=this.parent;for(;!(t instanceof Ri);){if(!t.parent)return null;t=t.parent}return t}getShiftedBy(t){const e=V._createAt(this),n=e.offset+t;return e.offset=n<0?0:n,e}getLastMatchingPosition(t,e={}){e.startPosition=this;const n=new On(e);return n.skip(t),n.position}getAncestors(){return this.parent.is("documentFragment")?[this.parent]:this.parent.getAncestors({includeSelf:!0})}getCommonAncestor(t){const e=this.getAncestors(),n=t.getAncestors();let i=0;for(;e[i]==n[i]&&e[i];)i++;return i===0?null:e[i-1]}isEqual(t){return this.parent==t.parent&&this.offset==t.offset}isBefore(t){return this.compareWith(t)=="before"}isAfter(t){return this.compareWith(t)=="after"}compareWith(t){if(this.root!==t.root)return"different";if(this.isEqual(t))return"same";const e=this.parent.is("node")?this.parent.getPath():[],n=t.parent.is("node")?t.parent.getPath():[];e.push(this.offset),n.push(t.offset);const i=St(e,n);switch(i){case"prefix":return"before";case"extension":return"after";default:return e[i]0?new this(n,i):new this(i,n)}static _createIn(t){return this._createFromParentsAndOffsets(t,0,t,t.childCount)}static _createOn(t){const e=t.is("$textProxy")?t.offsetSize:1;return this._createFromPositionAndShift(V._createBefore(t),e)}}function ji(o){return!(!o.item.is("attributeElement")&&!o.item.is("uiElement"))}nt.prototype.is=function(o){return o==="range"||o==="view:range"};class Pe extends kt(Nn){constructor(...t){super(),this._ranges=[],this._lastRangeBackward=!1,this._isFake=!1,this._fakeSelectionLabel="",t.length&&this.setTo(...t)}get isFake(){return this._isFake}get fakeSelectionLabel(){return this._fakeSelectionLabel}get anchor(){if(!this._ranges.length)return null;const t=this._ranges[this._ranges.length-1];return(this._lastRangeBackward?t.end:t.start).clone()}get focus(){if(!this._ranges.length)return null;const t=this._ranges[this._ranges.length-1];return(this._lastRangeBackward?t.start:t.end).clone()}get isCollapsed(){return this.rangeCount===1&&this._ranges[0].isCollapsed}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}get editableElement(){return this.anchor?this.anchor.editableElement:null}*getRanges(){for(const t of this._ranges)yield t.clone()}getFirstRange(){let t=null;for(const e of this._ranges)t&&!e.start.isBefore(t.start)||(t=e);return t?t.clone():null}getLastRange(){let t=null;for(const e of this._ranges)t&&!e.end.isAfter(t.end)||(t=e);return t?t.clone():null}getFirstPosition(){const t=this.getFirstRange();return t?t.start.clone():null}getLastPosition(){const t=this.getLastRange();return t?t.end.clone():null}isEqual(t){if(this.isFake!=t.isFake||this.isFake&&this.fakeSelectionLabel!=t.fakeSelectionLabel||this.rangeCount!=t.rangeCount)return!1;if(this.rangeCount===0)return!0;if(!this.anchor.isEqual(t.anchor)||!this.focus.isEqual(t.focus))return!1;for(const e of this._ranges){let n=!1;for(const i of t._ranges)if(e.isEqual(i)){n=!0;break}if(!n)return!1}return!0}isSimilar(t){if(this.isBackward!=t.isBackward)return!1;const e=Ft(this.getRanges());if(e!=Ft(t.getRanges()))return!1;if(e==0)return!0;for(let n of this.getRanges()){n=n.getTrimmed();let i=!1;for(let r of t.getRanges())if(r=r.getTrimmed(),n.start.isEqual(r.start)&&n.end.isEqual(r.end)){i=!0;break}if(!i)return!1}return!0}getSelectedElement(){return this.rangeCount!==1?null:this.getFirstRange().getContainedElement()}setTo(...t){let[e,n,i]=t;if(typeof n=="object"&&(i=n,n=void 0),e===null)this._setRanges([]),this._setFakeOptions(i);else if(e instanceof Pe||e instanceof vs)this._setRanges(e.getRanges(),e.isBackward),this._setFakeOptions({fake:e.isFake,label:e.fakeSelectionLabel});else if(e instanceof nt)this._setRanges([e],i&&i.backward),this._setFakeOptions(i);else if(e instanceof V)this._setRanges([new nt(e)]),this._setFakeOptions(i);else if(e instanceof Pn){const r=!!i&&!!i.backward;let s;if(n===void 0)throw new _("view-selection-setto-required-second-parameter",this);s=n=="in"?nt._createIn(e):n=="on"?nt._createOn(e):new nt(V._createAt(e,n)),this._setRanges([s],r),this._setFakeOptions(i)}else{if(!Gt(e))throw new _("view-selection-setto-not-selectable",this);this._setRanges(e,i&&i.backward),this._setFakeOptions(i)}this.fire("change")}setFocus(t,e){if(this.anchor===null)throw new _("view-selection-setfocus-no-ranges",this);const n=V._createAt(t,e);if(n.compareWith(this.focus)=="same")return;const i=this.anchor;this._ranges.pop(),n.compareWith(i)=="before"?this._addRange(new nt(n,i),!0):this._addRange(new nt(i,n)),this.fire("change")}_setRanges(t,e=!1){t=Array.from(t),this._ranges=[];for(const n of t)this._addRange(n);this._lastRangeBackward=!!e}_setFakeOptions(t={}){this._isFake=!!t.fake,this._fakeSelectionLabel=t.fake&&t.label||""}_addRange(t,e=!1){if(!(t instanceof nt))throw new _("view-selection-add-range-not-range",this);this._pushRange(t),this._lastRangeBackward=!!e}_pushRange(t){for(const e of this._ranges)if(t.isIntersecting(e))throw new _("view-selection-range-intersects",this,{addedRange:t,intersectingRange:e});this._ranges.push(new nt(t.start,t.end))}}Pe.prototype.is=function(o){return o==="selection"||o==="view:selection"};class vs extends kt(Nn){constructor(...t){super(),this._selection=new Pe,this._selection.delegate("change").to(this),t.length&&this._selection.setTo(...t)}get isFake(){return this._selection.isFake}get fakeSelectionLabel(){return this._selection.fakeSelectionLabel}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get isCollapsed(){return this._selection.isCollapsed}get rangeCount(){return this._selection.rangeCount}get isBackward(){return this._selection.isBackward}get editableElement(){return this._selection.editableElement}get _ranges(){return this._selection._ranges}*getRanges(){yield*this._selection.getRanges()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getSelectedElement(){return this._selection.getSelectedElement()}isEqual(t){return this._selection.isEqual(t)}isSimilar(t){return this._selection.isSimilar(t)}_setTo(...t){this._selection.setTo(...t)}_setFocus(t,e){this._selection.setFocus(t,e)}}vs.prototype.is=function(o){return o==="selection"||o=="documentSelection"||o=="view:selection"||o=="view:documentSelection"};class co extends H{constructor(t,e,n){super(t,e),this.startRange=n,this._eventPhase="none",this._currentTarget=null}get eventPhase(){return this._eventPhase}get currentTarget(){return this._currentTarget}}const ys=Symbol("bubbling contexts");function xs(o){return class extends o{fire(t,...e){try{const n=t instanceof H?t:new H(this,t),i=Es(this);if(!i.size)return;if(Go(n,"capturing",this),lo(i,"$capture",n,...e))return n.return;const r=n.startRange||this.selection.getFirstRange(),s=r?r.getContainedElement():null,a=!!s&&!!td(i,s);let c=s||function(l){if(!l)return null;const d=l.start.parent,h=l.end.parent,u=d.getPath(),g=h.getPath();return u.length>g.length?d:h}(r);if(Go(n,"atTarget",c),!a){if(lo(i,"$text",n,...e))return n.return;Go(n,"bubbling",c)}for(;c;){if(c.is("rootElement")){if(lo(i,"$root",n,...e))return n.return}else if(c.is("element")&&lo(i,c.name,n,...e))return n.return;if(lo(i,c,n,...e))return n.return;c=c.parent,Go(n,"bubbling",c)}return Go(n,"bubbling",this),lo(i,"$document",n,...e),n.return}catch(n){_.rethrowUnexpectedError(n,this)}}_addEventListener(t,e,n){const i=Bt(n.context||"$document"),r=Es(this);for(const s of i){let a=r.get(s);a||(a=new(kt()),r.set(s,a)),this.listenTo(a,t,e,n)}}_removeEventListener(t,e){const n=Es(this);for(const i of n.values())this.stopListening(i,t,e)}}}{const o=xs(Object);["fire","_addEventListener","_removeEventListener"].forEach(t=>{xs[t]=o.prototype[t]})}function Go(o,t,e){o instanceof co&&(o._eventPhase=t,o._currentTarget=e)}function lo(o,t,e,...n){const i=typeof t=="string"?o.get(t):td(o,t);return!!i&&(i.fire(e,...n),e.stop.called)}function td(o,t){for(const[e,n]of o)if(typeof e=="function"&&e(t))return n;return null}function Es(o){return o[ys]||(o[ys]=new Map),o[ys]}class Fi extends xs(mt()){constructor(t){super(),this._postFixers=new Set,this.selection=new vs,this.roots=new Me({idProperty:"rootName"}),this.stylesProcessor=t,this.set("isReadOnly",!1),this.set("isFocused",!1),this.set("isSelecting",!1),this.set("isComposing",!1)}getRoot(t="main"){return this.roots.get(t)}registerPostFixer(t){this._postFixers.add(t)}destroy(){this.roots.forEach(t=>t.destroy()),this.stopListening()}_callPostFixers(t){let e=!1;do for(const n of this._postFixers)if(e=n(t),e)break;while(e)}}class zn extends he{constructor(t,e,n,i){super(t,e,n,i),this._priority=10,this._id=null,this._clonesGroup=null,this.getFillerOffset=x0}get priority(){return this._priority}get id(){return this._id}getElementsWithSameId(){if(this.id===null)throw new _("attribute-element-get-elements-with-same-id-no-id",this);return new Set(this._clonesGroup)}isSimilar(t){return this.id!==null||t.id!==null?this.id===t.id:super.isSimilar(t)&&this.priority==t.priority}_clone(t=!1){const e=super._clone(t);return e._priority=this._priority,e._id=this._id,e}}function x0(){if(Ds(this))return null;let o=this.parent;for(;o&&o.is("attributeElement");){if(Ds(o)>1)return null;o=o.parent}return!o||Ds(o)>1?null:this.childCount}function Ds(o){return Array.from(o.getChildren()).filter(t=>!t.is("uiElement")).length}zn.DEFAULT_PRIORITY=10,zn.prototype.is=function(o,t){return t?t===this.name&&(o==="attributeElement"||o==="view:attributeElement"||o==="element"||o==="view:element"):o==="attributeElement"||o==="view:attributeElement"||o==="element"||o==="view:element"||o==="node"||o==="view:node"};class Is extends he{constructor(t,e,n,i){super(t,e,n,i),this.getFillerOffset=E0}_insertChild(t,e){if(e&&(e instanceof Pn||Array.from(e).length>0))throw new _("view-emptyelement-cannot-add",[this,e]);return 0}}function E0(){return null}Is.prototype.is=function(o,t){return t?t===this.name&&(o==="emptyElement"||o==="view:emptyElement"||o==="element"||o==="view:element"):o==="emptyElement"||o==="view:emptyElement"||o==="element"||o==="view:element"||o==="node"||o==="view:node"};class Vi extends he{constructor(t,e,n,i){super(t,e,n,i),this.getFillerOffset=I0}_insertChild(t,e){if(e&&(e instanceof Pn||Array.from(e).length>0))throw new _("view-uielement-cannot-add",[this,e]);return 0}render(t,e){return this.toDomElement(t)}toDomElement(t){const e=t.createElement(this.name);for(const n of this.getAttributeKeys())e.setAttribute(n,this.getAttribute(n));return e}}function D0(o){o.document.on("arrowKey",(t,e)=>function(n,i,r){if(i.keyCode==ut.arrowright){const s=i.domTarget.ownerDocument.defaultView.getSelection(),a=s.rangeCount==1&&s.getRangeAt(0).collapsed;if(a||i.shiftKey){const c=s.focusNode,l=s.focusOffset,d=r.domPositionToView(c,l);if(d===null)return;let h=!1;const u=d.getLastMatchingPosition(g=>(g.item.is("uiElement")&&(h=!0),!(!g.item.is("uiElement")&&!g.item.is("attributeElement"))));if(h){const g=r.viewPositionToDom(u);a?s.collapse(g.parent,g.offset):s.extend(g.parent,g.offset)}}}}(0,e,o.domConverter),{priority:"low"})}function I0(){return null}Vi.prototype.is=function(o,t){return t?t===this.name&&(o==="uiElement"||o==="view:uiElement"||o==="element"||o==="view:element"):o==="uiElement"||o==="view:uiElement"||o==="element"||o==="view:element"||o==="node"||o==="view:node"};class Ss extends he{constructor(t,e,n,i){super(t,e,n,i),this.getFillerOffset=S0}_insertChild(t,e){if(e&&(e instanceof Pn||Array.from(e).length>0))throw new _("view-rawelement-cannot-add",[this,e]);return 0}render(t,e){}}function S0(){return null}Ss.prototype.is=function(o,t){return t?t===this.name&&(o==="rawElement"||o==="view:rawElement"||o==="element"||o==="view:element"):o==="rawElement"||o==="view:rawElement"||o===this.name||o==="view:"+this.name||o==="element"||o==="view:element"||o==="node"||o==="view:node"};class Rn extends kt(Nn){constructor(t,e){super(),this._children=[],this._customProperties=new Map,this.document=t,e&&this._insertChild(0,e)}[Symbol.iterator](){return this._children[Symbol.iterator]()}get childCount(){return this._children.length}get isEmpty(){return this.childCount===0}get root(){return this}get parent(){return null}get name(){}get getFillerOffset(){}getCustomProperty(t){return this._customProperties.get(t)}*getCustomProperties(){yield*this._customProperties.entries()}_appendChild(t){return this._insertChild(this.childCount,t)}getChild(t){return this._children[t]}getChildIndex(t){return this._children.indexOf(t)}getChildren(){return this._children[Symbol.iterator]()}_insertChild(t,e){this._fireChange("children",this);let n=0;const i=function(r,s){return typeof s=="string"?[new vt(r,s)]:(Gt(s)||(s=[s]),Array.from(s).map(a=>typeof a=="string"?new vt(r,a):a instanceof $e?new vt(r,a.data):a))}(this.document,e);for(const r of i)r.parent!==null&&r._remove(),r.parent=this,this._children.splice(t,0,r),t++,n++;return n}_removeChildren(t,e=1){this._fireChange("children",this);for(let n=t;n{const c=s[s.length-1],l=!a.is("uiElement");return c&&c.breakAttributes==l?c.nodes.push(a):s.push({breakAttributes:l,nodes:[a]}),s},[]);let i=null,r=t;for(const{nodes:s,breakAttributes:a}of n){const c=this._insertNodes(r,s,a);i||(i=c.start),r=c.end}return i?new nt(i,r):new nt(t)}remove(t){const e=t instanceof nt?t:nt._createOn(t);if(Wo(e,this.document),e.isCollapsed)return new Rn(this.document);const{start:n,end:i}=this._breakAttributesRange(e,!0),r=n.parent,s=i.offset-n.offset,a=r._removeChildren(n.offset,s);for(const l of a)this._removeFromClonedElementsGroup(l);const c=this.mergeAttributes(n);return e.start=c,e.end=c.clone(),new Rn(this.document,a)}clear(t,e){Wo(t,this.document);const n=t.getWalker({direction:"backward",ignoreElementEnd:!0});for(const i of n){const r=i.item;let s;if(r.is("element")&&e.isSimilar(r))s=nt._createOn(r);else if(!i.nextPosition.isAfter(t.start)&&r.is("$textProxy")){const a=r.getAncestors().find(c=>c.is("element")&&e.isSimilar(c));a&&(s=nt._createIn(a))}s&&(s.end.isAfter(t.end)&&(s.end=t.end),s.start.isBefore(t.start)&&(s.start=t.start),this.remove(s))}}move(t,e){let n;if(e.isAfter(t.end)){const i=(e=this._breakAttributes(e,!0)).parent,r=i.childCount;t=this._breakAttributesRange(t,!0),n=this.remove(t),e.offset+=i.childCount-r}else n=this.remove(t);return this.insert(e,n)}wrap(t,e){if(!(e instanceof zn))throw new _("view-writer-wrap-invalid-attribute",this.document);if(Wo(t,this.document),t.isCollapsed){let i=t.start;i.parent.is("element")&&(n=i.parent,!Array.from(n.getChildren()).some(s=>!s.is("uiElement")))&&(i=i.getLastMatchingPosition(s=>s.item.is("uiElement"))),i=this._wrapPosition(i,e);const r=this.document.selection;return r.isCollapsed&&r.getFirstPosition().isEqual(t.start)&&this.setSelection(i),new nt(i)}return this._wrapRange(t,e);var n}unwrap(t,e){if(!(e instanceof zn))throw new _("view-writer-unwrap-invalid-attribute",this.document);if(Wo(t,this.document),t.isCollapsed)return t;const{start:n,end:i}=this._breakAttributesRange(t,!0),r=n.parent,s=this._unwrapChildren(r,n.offset,i.offset,e),a=this.mergeAttributes(s.start);a.isEqual(s.start)||s.end.offset--;const c=this.mergeAttributes(s.end);return new nt(a,c)}rename(t,e){const n=new qo(this.document,t,e.getAttributes());return this.insert(V._createAfter(e),n),this.move(nt._createIn(e),V._createAt(n,0)),this.remove(nt._createOn(e)),n}clearClonedElementsGroup(t){this._cloneGroups.delete(t)}createPositionAt(t,e){return V._createAt(t,e)}createPositionAfter(t){return V._createAfter(t)}createPositionBefore(t){return V._createBefore(t)}createRange(t,e){return new nt(t,e)}createRangeOn(t){return nt._createOn(t)}createRangeIn(t){return nt._createIn(t)}createSelection(...t){return new Pe(...t)}createSlot(t="children"){if(!this._slotFactory)throw new _("view-writer-invalid-create-slot-context",this.document);return this._slotFactory(this,t)}_registerSlotFactory(t){this._slotFactory=t}_clearSlotFactory(){this._slotFactory=null}_insertNodes(t,e,n){let i,r;if(i=n?Ts(t):t.parent.is("$text")?t.parent.parent:t.parent,!i)throw new _("view-writer-invalid-position-container",this.document);r=n?this._breakAttributes(t,!0):t.parent.is("$text")?Ms(t):t;const s=i._insertChild(r.offset,e);for(const d of e)this._addToClonedElementsGroup(d);const a=r.getShiftedBy(s),c=this.mergeAttributes(r);c.isEqual(r)||a.offset--;const l=this.mergeAttributes(a);return new nt(c,l)}_wrapChildren(t,e,n,i){let r=e;const s=[];for(;r!1,t.parent._insertChild(t.offset,n);const i=new nt(t,t.getShiftedBy(1));this.wrap(i,e);const r=new V(n.parent,n.index);n._remove();const s=r.nodeBefore,a=r.nodeAfter;return s instanceof vt&&a instanceof vt?od(s,a):nd(r)}_wrapAttributeElement(t,e){if(!rd(t,e)||t.name!==e.name||t.priority!==e.priority)return!1;for(const n of t.getAttributeKeys())if(n!=="class"&&n!=="style"&&e.hasAttribute(n)&&e.getAttribute(n)!==t.getAttribute(n))return!1;for(const n of t.getStyleNames())if(e.hasStyle(n)&&e.getStyle(n)!==t.getStyle(n))return!1;for(const n of t.getAttributeKeys())n!=="class"&&n!=="style"&&(e.hasAttribute(n)||this.setAttribute(n,t.getAttribute(n),e));for(const n of t.getStyleNames())e.hasStyle(n)||this.setStyle(n,t.getStyle(n),e);for(const n of t.getClassNames())e.hasClass(n)||this.addClass(n,e);return!0}_unwrapAttributeElement(t,e){if(!rd(t,e)||t.name!==e.name||t.priority!==e.priority)return!1;for(const n of t.getAttributeKeys())if(n!=="class"&&n!=="style"&&(!e.hasAttribute(n)||e.getAttribute(n)!==t.getAttribute(n)))return!1;if(!e.hasClass(...t.getClassNames()))return!1;for(const n of t.getStyleNames())if(!e.hasStyle(n)||e.getStyle(n)!==t.getStyle(n))return!1;for(const n of t.getAttributeKeys())n!=="class"&&n!=="style"&&this.removeAttribute(n,e);return this.removeClass(Array.from(t.getClassNames()),e),this.removeStyle(Array.from(t.getStyleNames()),e),!0}_breakAttributesRange(t,e=!1){const n=t.start,i=t.end;if(Wo(t,this.document),t.isCollapsed){const c=this._breakAttributes(t.start,e);return new nt(c,c)}const r=this._breakAttributes(i,e),s=r.parent.childCount,a=this._breakAttributes(n,e);return r.offset+=r.parent.childCount-s,new nt(a,r)}_breakAttributes(t,e=!1){const n=t.offset,i=t.parent;if(t.parent.is("emptyElement"))throw new _("view-writer-cannot-break-empty-element",this.document);if(t.parent.is("uiElement"))throw new _("view-writer-cannot-break-ui-element",this.document);if(t.parent.is("rawElement"))throw new _("view-writer-cannot-break-raw-element",this.document);if(!e&&i.is("$text")&&Bs(i.parent)||Bs(i))return t.clone();if(i.is("$text"))return this._breakAttributes(Ms(t),e);if(n==i.childCount){const r=new V(i.parent,i.index+1);return this._breakAttributes(r,e)}if(n===0){const r=new V(i.parent,i.index);return this._breakAttributes(r,e)}{const r=i.index+1,s=i._clone();i.parent._insertChild(r,s),this._addToClonedElementsGroup(s);const a=i.childCount-n,c=i._removeChildren(n,a);s._appendChild(c);const l=new V(i.parent,r);return this._breakAttributes(l,e)}}_addToClonedElementsGroup(t){if(!t.root.is("rootElement"))return;if(t.is("element"))for(const i of t.getChildren())this._addToClonedElementsGroup(i);const e=t.id;if(!e)return;let n=this._cloneGroups.get(e);n||(n=new Set,this._cloneGroups.set(e,n)),n.add(t),t._clonesGroup=n}_removeFromClonedElementsGroup(t){if(t.is("element"))for(const i of t.getChildren())this._removeFromClonedElementsGroup(i);const e=t.id;if(!e)return;const n=this._cloneGroups.get(e);n&&n.delete(t)}}function Ts(o){let t=o.parent;for(;!Bs(t);){if(!t)return;t=t.parent}return t}function T0(o,t){return o.priorityt.priority)&&o.getIdentity()e instanceof n))throw new _("view-writer-insert-invalid-node-type",t);e.is("$text")||id(e.getChildren(),t)}}function Bs(o){return o&&(o.is("containerElement")||o.is("documentFragment"))}function Wo(o,t){const e=Ts(o.start),n=Ts(o.end);if(!e||!n||e!==n)throw new _("view-writer-invalid-range-container",t)}function rd(o,t){return o.id===null&&t.id===null}const sd=o=>o.createTextNode(" "),ad=o=>{const t=o.createElement("span");return t.dataset.ckeFiller="true",t.innerText=" ",t},cd=o=>{const t=o.createElement("br");return t.dataset.ckeFiller="true",t},Le=7,$o="⁠".repeat(Le);function ue(o){return typeof o=="string"?o.substr(0,Le)===$o:Vt(o)&&o.data.substr(0,Le)===$o}function Ko(o){return o.data.length==Le&&ue(o)}function ld(o){const t=typeof o=="string"?o:o.data;return ue(o)?t.slice(Le):t}function B0(o,t){if(t.keyCode==ut.arrowleft){const e=t.domTarget.ownerDocument.defaultView.getSelection();if(e.rangeCount==1&&e.getRangeAt(0).collapsed){const n=e.getRangeAt(0).startContainer,i=e.getRangeAt(0).startOffset;ue(n)&&i<=Le&&e.collapse(n,0)}}}var dd=N(9792),N0={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(dd.c,N0),dd.c.locals;class P0 extends mt(){constructor(t,e){super(),this.domDocuments=new Set,this.markedAttributes=new Set,this.markedChildren=new Set,this.markedTexts=new Set,this._inlineFiller=null,this._fakeSelectionContainer=null,this.domConverter=t,this.selection=e,this.set("isFocused",!1),this.set("isSelecting",!1),f.isBlink&&!f.isAndroid&&this.on("change:isSelecting",()=>{this.isSelecting||this.render()}),this.set("isComposing",!1),this.on("change:isComposing",()=>{this.isComposing||this.render()})}markToSync(t,e){if(t==="text")this.domConverter.mapViewToDom(e.parent)&&this.markedTexts.add(e);else{if(!this.domConverter.mapViewToDom(e))return;if(t==="attributes")this.markedAttributes.add(e);else{if(t!=="children")throw new _("view-renderer-unknown-type",this);this.markedChildren.add(e)}}}render(){if(this.isComposing&&!f.isAndroid)return;let t=null;const e=!(f.isBlink&&!f.isAndroid)||!this.isSelecting;for(const n of this.markedChildren)this._updateChildrenMappings(n);e?(this._inlineFiller&&!this._isSelectionInInlineFiller()&&this._removeInlineFiller(),this._inlineFiller?t=this._getInlineFillerPosition():this._needsInlineFillerAtSelection()&&(t=this.selection.getFirstPosition(),this.markedChildren.add(t.parent))):this._inlineFiller&&this._inlineFiller.parentNode&&(t=this.domConverter.domPositionToView(this._inlineFiller),t&&t.parent.is("$text")&&(t=V._createBefore(t.parent)));for(const n of this.markedAttributes)this._updateAttrs(n);for(const n of this.markedChildren)this._updateChildren(n,{inlineFillerPosition:t});for(const n of this.markedTexts)!this.markedChildren.has(n.parent)&&this.domConverter.mapViewToDom(n.parent)&&this._updateText(n,{inlineFillerPosition:t});if(e)if(t){const n=this.domConverter.viewPositionToDom(t),i=n.parent.ownerDocument;ue(n.parent)?this._inlineFiller=n.parent:this._inlineFiller=hd(i,n.parent,n.offset)}else this._inlineFiller=null;this._updateFocus(),this._updateSelection(),this.domConverter._clearTemporaryCustomProperties(),this.markedTexts.clear(),this.markedAttributes.clear(),this.markedChildren.clear()}_updateChildrenMappings(t){const e=this.domConverter.mapViewToDom(t);if(!e)return;const n=Array.from(e.childNodes),i=Array.from(this.domConverter.viewChildrenToDom(t,{withChildren:!1})),r=this._diffNodeLists(n,i),s=this._findUpdateActions(r,n,i,L0);if(s.indexOf("update")!==-1){const a={equal:0,insert:0,delete:0};for(const c of s)if(c==="update"){const l=a.equal+a.insert,d=a.equal+a.delete,h=t.getChild(l);!h||h.is("uiElement")||h.is("rawElement")||this._updateElementMappings(h,n[d]),Qc(i[l]),a.equal++}else a[c]++}}_updateElementMappings(t,e){this.domConverter.unbindDomElement(e),this.domConverter.bindElements(e,t),this.markedChildren.add(t),this.markedAttributes.add(t)}_getInlineFillerPosition(){const t=this.selection.getFirstPosition();return t.parent.is("$text")?V._createBefore(t.parent):t}_isSelectionInInlineFiller(){if(this.selection.rangeCount!=1||!this.selection.isCollapsed)return!1;const t=this.selection.getFirstPosition(),e=this.domConverter.viewPositionToDom(t);return!!(e&&Vt(e.parent)&&ue(e.parent))}_removeInlineFiller(){const t=this._inlineFiller;if(!ue(t))throw new _("view-renderer-filler-was-lost",this);Ko(t)?t.remove():t.data=t.data.substr(Le),this._inlineFiller=null}_needsInlineFillerAtSelection(){if(this.selection.rangeCount!=1||!this.selection.isCollapsed)return!1;const t=this.selection.getFirstPosition(),e=t.parent,n=t.offset;if(!this.domConverter.mapViewToDom(e.root)||!e.is("element")||!function(s){if(s.getAttribute("contenteditable")=="false")return!1;const a=s.findAncestor(c=>c.hasAttribute("contenteditable"));return!a||a.getAttribute("contenteditable")=="true"}(e)||n===e.getFillerOffset())return!1;const i=t.nodeBefore,r=t.nodeAfter;return!(i instanceof vt||r instanceof vt)&&(!f.isAndroid||!i&&!r)}_updateText(t,e){const n=this.domConverter.findCorrespondingDomText(t);let i=this.domConverter.viewToDom(t).data;const r=e.inlineFillerPosition;r&&r.parent==t.parent&&r.offset==t.index&&(i=$o+i),ud(n,i)}_updateAttrs(t){const e=this.domConverter.mapViewToDom(t);if(!e)return;const n=Array.from(e.attributes).map(r=>r.name),i=t.getAttributeKeys();for(const r of i)this.domConverter.setDomElementAttribute(e,r,t.getAttribute(r),t);for(const r of n)t.hasAttribute(r)||this.domConverter.removeDomElementAttribute(e,r)}_updateChildren(t,e){const n=this.domConverter.mapViewToDom(t);if(!n)return;if(f.isAndroid){let h=null;for(const u of Array.from(n.childNodes)){if(h&&Vt(h)&&Vt(u)){n.normalize();break}h=u}}const i=e.inlineFillerPosition,r=n.childNodes,s=Array.from(this.domConverter.viewChildrenToDom(t,{bind:!0}));i&&i.parent===t&&hd(n.ownerDocument,s,i.offset);const a=this._diffNodeLists(r,s),c=this._findUpdateActions(a,r,s,O0);let l=0;const d=new Set;for(const h of c)h==="delete"?(d.add(r[l]),Qc(r[l])):h!=="equal"&&h!=="update"||l++;l=0;for(const h of c)h==="insert"?(Wc(n,l,s[l]),l++):h==="update"?(ud(r[l],s[l].data),l++):h==="equal"&&(this._markDescendantTextToSync(this.domConverter.domToView(s[l])),l++);for(const h of d)h.parentNode||this.domConverter.unbindDomElement(h)}_diffNodeLists(t,e){return t=function(n,i){const r=Array.from(n);return r.length==0||!i||r[r.length-1]==i&&r.pop(),r}(t,this._fakeSelectionContainer),L(t,e,z0.bind(null,this.domConverter))}_findUpdateActions(t,e,n,i){if(t.indexOf("insert")===-1||t.indexOf("delete")===-1)return t;let r=[],s=[],a=[];const c={equal:0,insert:0,delete:0};for(const l of t)l==="insert"?a.push(n[c.equal+c.insert]):l==="delete"?s.push(e[c.equal+c.delete]):(r=r.concat(L(s,a,i).map(d=>d==="equal"?"update":d)),r.push("equal"),s=[],a=[]),c[l]++;return r.concat(L(s,a,i).map(l=>l==="equal"?"update":l))}_markDescendantTextToSync(t){if(t){if(t.is("$text"))this.markedTexts.add(t);else if(t.is("element"))for(const e of t.getChildren())this._markDescendantTextToSync(e)}}_updateSelection(){if(f.isBlink&&!f.isAndroid&&this.isSelecting&&!this.markedChildren.size)return;if(this.selection.rangeCount===0)return this._removeDomSelection(),void this._removeFakeSelection();const t=this.domConverter.mapViewToDom(this.selection.editableElement);this.isFocused&&t&&(this.selection.isFake?this._updateFakeSelection(t):this._fakeSelectionContainer&&this._fakeSelectionContainer.isConnected?(this._removeFakeSelection(),this._updateDomSelection(t)):this.isComposing&&f.isAndroid||this._updateDomSelection(t))}_updateFakeSelection(t){const e=t.ownerDocument;this._fakeSelectionContainer||(this._fakeSelectionContainer=function(s){const a=s.createElement("div");return a.className="ck-fake-selection-container",Object.assign(a.style,{position:"fixed",top:0,left:"-9999px",width:"42px"}),a.textContent=" ",a}(e));const n=this._fakeSelectionContainer;if(this.domConverter.bindFakeSelection(n,this.selection),!this._fakeSelectionNeedsUpdate(t))return;n.parentElement&&n.parentElement==t||t.appendChild(n),n.textContent=this.selection.fakeSelectionLabel||" ";const i=e.getSelection(),r=e.createRange();i.removeAllRanges(),r.selectNodeContents(n),i.addRange(r)}_updateDomSelection(t){const e=t.ownerDocument.defaultView.getSelection();if(!this._domSelectionNeedsUpdate(e))return;const n=this.domConverter.viewPositionToDom(this.selection.anchor),i=this.domConverter.viewPositionToDom(this.selection.focus);e.setBaseAndExtent(n.parent,n.offset,i.parent,i.offset),f.isGecko&&function(r,s){const a=r.parent;if(a.nodeType!=Node.ELEMENT_NODE||r.offset!=a.childNodes.length-1)return;const c=a.childNodes[r.offset];c&&c.tagName=="BR"&&s.addRange(s.getRangeAt(0))}(i,e)}_domSelectionNeedsUpdate(t){if(!this.domConverter.isDomSelectionCorrect(t))return!0;const e=t&&this.domConverter.domSelectionToView(t);return(!e||!this.selection.isEqual(e))&&!(!this.selection.isCollapsed&&this.selection.isSimilar(e))}_fakeSelectionNeedsUpdate(t){const e=this._fakeSelectionContainer,n=t.ownerDocument.getSelection();return!e||e.parentElement!==t||n.anchorNode!==e&&!e.contains(n.anchorNode)||e.textContent!==this.selection.fakeSelectionLabel}_removeDomSelection(){for(const t of this.domDocuments){const e=t.getSelection();if(e.rangeCount){const n=t.activeElement,i=this.domConverter.mapDomToView(n);n&&i&&e.removeAllRanges()}}}_removeFakeSelection(){const t=this._fakeSelectionContainer;t&&t.remove()}_updateFocus(){if(this.isFocused){const t=this.selection.editableElement;t&&this.domConverter.focus(t)}}}function hd(o,t,e){const n=t instanceof Array?t:t.childNodes,i=n[e];if(Vt(i))return i.data=$o+i.data,i;{const r=o.createTextNode($o);return Array.isArray(t)?n.splice(e,0,r):Wc(t,e,r),r}}function L0(o,t){return pn(o)&&pn(t)&&!Vt(o)&&!Vt(t)&&!jo(o)&&!jo(t)&&o.tagName.toLowerCase()===t.tagName.toLowerCase()}function O0(o,t){return pn(o)&&pn(t)&&Vt(o)&&Vt(t)}function z0(o,t,e){return t===e||(Vt(t)&&Vt(e)?t.data===e.data:!(!o.isBlockFiller(t)||!o.isBlockFiller(e)))}function ud(o,t){const e=o.data;if(e==t)return;const n=I(e,t);for(const i of n)i.type==="insert"?o.insertData(i.index,i.values.join("")):o.deleteData(i.index,i.howMany)}const R0=cd($.document),j0=sd($.document),F0=ad($.document),Hi="data-ck-unsafe-attribute-",gd="data-ck-unsafe-element";class Ui{constructor(t,{blockFillerMode:e,renderingMode:n="editing"}={}){this._domToViewMapping=new WeakMap,this._viewToDomMapping=new WeakMap,this._fakeSelectionMapping=new WeakMap,this._rawContentElementMatcher=new Ne,this._inlineObjectElementMatcher=new Ne,this._elementsWithTemporaryCustomProperties=new Set,this.document=t,this.renderingMode=n,this.blockFillerMode=e||(n==="editing"?"br":"nbsp"),this.preElements=["pre"],this.blockElements=["address","article","aside","blockquote","caption","center","dd","details","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","legend","li","main","menu","nav","ol","p","pre","section","summary","table","tbody","td","tfoot","th","thead","tr","ul"],this.inlineObjectElements=["object","iframe","input","button","textarea","select","option","video","embed","audio","img","canvas"],this.unsafeElements=["script","style"],this._domDocument=this.renderingMode==="editing"?$.document:$.document.implementation.createHTMLDocument("")}bindFakeSelection(t,e){this._fakeSelectionMapping.set(t,new Pe(e))}fakeSelectionToView(t){return this._fakeSelectionMapping.get(t)}bindElements(t,e){this._domToViewMapping.set(t,e),this._viewToDomMapping.set(e,t)}unbindDomElement(t){const e=this._domToViewMapping.get(t);if(e){this._domToViewMapping.delete(t),this._viewToDomMapping.delete(e);for(const n of Array.from(t.children))this.unbindDomElement(n)}}bindDocumentFragments(t,e){this._domToViewMapping.set(t,e),this._viewToDomMapping.set(e,t)}shouldRenderAttribute(t,e,n){return this.renderingMode==="data"||!(t=t.toLowerCase()).startsWith("on")&&(t!=="srcdoc"||!e.match(/\bon\S+\s*=|javascript:|<\s*\/*script/i))&&(n==="img"&&(t==="src"||t==="srcset")||n==="source"&&t==="srcset"||!e.match(/^\s*(javascript:|data:(image\/svg|text\/x?html))/i))}setContentOf(t,e){if(this.renderingMode==="data")return void(t.innerHTML=e);const n=new DOMParser().parseFromString(e,"text/html"),i=n.createDocumentFragment(),r=n.body.childNodes;for(;r.length>0;)i.appendChild(r[0]);const s=n.createTreeWalker(i,NodeFilter.SHOW_ELEMENT),a=[];let c;for(;c=s.nextNode();)a.push(c);for(const l of a){for(const h of l.getAttributeNames())this.setDomElementAttribute(l,h,l.getAttribute(h));const d=l.tagName.toLowerCase();this._shouldRenameElement(d)&&(fd(d),l.replaceWith(this._createReplacementDomElement(d,l)))}for(;t.firstChild;)t.firstChild.remove();t.append(i)}viewToDom(t,e={}){if(t.is("$text")){const n=this._processDataFromViewText(t);return this._domDocument.createTextNode(n)}{const n=t;if(this.mapViewToDom(n)){if(!n.getCustomProperty("editingPipeline:doNotReuseOnce"))return this.mapViewToDom(n);this._elementsWithTemporaryCustomProperties.add(n)}let i;if(n.is("documentFragment"))i=this._domDocument.createDocumentFragment(),e.bind&&this.bindDocumentFragments(i,n);else{if(n.is("uiElement"))return i=n.name==="$comment"?this._domDocument.createComment(n.getCustomProperty("$rawContent")):n.render(this._domDocument,this),e.bind&&this.bindElements(i,n),i;this._shouldRenameElement(n.name)?(fd(n.name),i=this._createReplacementDomElement(n.name)):i=n.hasAttribute("xmlns")?this._domDocument.createElementNS(n.getAttribute("xmlns"),n.name):this._domDocument.createElement(n.name),n.is("rawElement")&&n.render(i,this),e.bind&&this.bindElements(i,n);for(const r of n.getAttributeKeys())this.setDomElementAttribute(i,r,n.getAttribute(r),n)}if(e.withChildren!==!1)for(const r of this.viewChildrenToDom(n,e))i.appendChild(r);return i}}setDomElementAttribute(t,e,n,i){const r=this.shouldRenderAttribute(e,n,t.tagName.toLowerCase())||i&&i.shouldRenderUnsafeAttribute(e);r||Y("domconverter-unsafe-attribute-detected",{domElement:t,key:e,value:n}),function(s){try{$.document.createAttribute(s)}catch{return!1}return!0}(e)?(t.hasAttribute(e)&&!r?t.removeAttribute(e):t.hasAttribute(Hi+e)&&r&&t.removeAttribute(Hi+e),t.setAttribute(r?e:Hi+e,n)):Y("domconverter-invalid-attribute-detected",{domElement:t,key:e,value:n})}removeDomElementAttribute(t,e){e!=gd&&(t.removeAttribute(e),t.removeAttribute(Hi+e))}*viewChildrenToDom(t,e={}){const n=t.getFillerOffset&&t.getFillerOffset();let i=0;for(const r of t.getChildren()){n===i&&(yield this._getBlockFiller());const s=r.is("element")&&!!r.getCustomProperty("dataPipeline:transparentRendering")&&!Wt(r.getAttributes());s&&this.renderingMode=="data"?yield*this.viewChildrenToDom(r,e):(s&&Y("domconverter-transparent-rendering-unsupported-in-editing-pipeline",{viewElement:r}),yield this.viewToDom(r,e)),i++}n===i&&(yield this._getBlockFiller())}viewRangeToDom(t){const e=this.viewPositionToDom(t.start),n=this.viewPositionToDom(t.end),i=this._domDocument.createRange();return i.setStart(e.parent,e.offset),i.setEnd(n.parent,n.offset),i}viewPositionToDom(t){const e=t.parent;if(e.is("$text")){const n=this.findCorrespondingDomText(e);if(!n)return null;let i=t.offset;return ue(n)&&(i+=Le),{parent:n,offset:i}}{let n,i,r;if(t.offset===0){if(n=this.mapViewToDom(e),!n)return null;r=n.childNodes[0]}else{const s=t.nodeBefore;if(i=s.is("$text")?this.findCorrespondingDomText(s):this.mapViewToDom(s),!i)return null;n=i.parentNode,r=i.nextSibling}return Vt(r)&&ue(r)?{parent:r,offset:Le}:{parent:n,offset:i?Si(i)+1:0}}}domToView(t,e={}){const n=[],i=this._domToView(t,e,n),r=i.next().value;return r?(i.next(),this._processDomInlineNodes(null,n,e),r.is("$text")&&r.data.length==0?null:r):null}*domChildrenToView(t,e={},n=[]){for(let i=0;i{const{scrollLeft:a,scrollTop:c}=s;r.push([a,c])}),e.focus(),pd(e,s=>{const[a,c]=r.shift();s.scrollLeft=a,s.scrollTop=c}),$.window.scrollTo(n,i)}}_clearDomSelection(){const t=this.mapViewToDom(this.document.selection.editableElement);if(!t)return;const e=t.ownerDocument.defaultView.getSelection(),n=this.domSelectionToView(e);n&&n.rangeCount>0&&e.removeAllRanges()}isElement(t){return t&&t.nodeType==Node.ELEMENT_NODE}isDocumentFragment(t){return t&&t.nodeType==Node.DOCUMENT_FRAGMENT_NODE}isBlockFiller(t){return this.blockFillerMode=="br"?t.isEqualNode(R0):!(t.tagName!=="BR"||!md(t,this.blockElements)||t.parentNode.childNodes.length!==1)||t.isEqualNode(F0)||function(e,n){return e.isEqualNode(j0)&&md(e,n)&&e.parentNode.childNodes.length===1}(t,this.blockElements)}isDomSelectionBackward(t){if(t.isCollapsed)return!1;const e=this._domDocument.createRange();try{e.setStart(t.anchorNode,t.anchorOffset),e.setEnd(t.focusNode,t.focusOffset)}catch{return!1}const n=e.collapsed;return e.detach(),n}getHostViewElement(t){const e=function(n){const i=[];let r=n;for(;r&&r.nodeType!=Node.DOCUMENT_NODE;)i.unshift(r),r=r.parentNode;return i}(t);for(e.pop();e.length;){const n=e.pop(),i=this._domToViewMapping.get(n);if(i&&(i.is("uiElement")||i.is("rawElement")))return i}return null}isDomSelectionCorrect(t){return this._isDomSelectionPositionCorrect(t.anchorNode,t.anchorOffset)&&this._isDomSelectionPositionCorrect(t.focusNode,t.focusOffset)}registerRawContentMatcher(t){this._rawContentElementMatcher.add(t)}registerInlineObjectMatcher(t){this._inlineObjectElementMatcher.add(t)}_clearTemporaryCustomProperties(){for(const t of this._elementsWithTemporaryCustomProperties)t._removeCustomProperty("editingPipeline:doNotReuseOnce");this._elementsWithTemporaryCustomProperties.clear()}_getBlockFiller(){switch(this.blockFillerMode){case"nbsp":return sd(this._domDocument);case"markedNbsp":return ad(this._domDocument);case"br":return cd(this._domDocument)}}_isDomSelectionPositionCorrect(t,e){if(Vt(t)&&ue(t)&&e0?e[r-1]:null,d=r+1this.preElements.includes(n.name)))return e;if(e.charAt(0)==" "){const n=this._getTouchingInlineViewNode(t,!1);!(n&&n.is("$textProxy")&&this._nodeEndsWithSpace(n))&&n||(e=" "+e.substr(1))}if(e.charAt(e.length-1)==" "){const n=this._getTouchingInlineViewNode(t,!0),i=n&&n.is("$textProxy")&&n.data.charAt(0)==" ";e.charAt(e.length-2)!=" "&&n&&!i||(e=e.substr(0,e.length-1)+" ")}return e.replace(/ {2}/g,"  ")}_nodeEndsWithSpace(t){if(t.getAncestors().some(n=>this.preElements.includes(n.name)))return!1;const e=this._processDataFromViewText(t);return e.charAt(e.length-1)==" "}_getTouchingInlineViewNode(t,e){const n=new On({startPosition:e?V._createAfter(t):V._createBefore(t),direction:e?"forward":"backward"});for(const i of n){if(i.item.is("element","br"))return null;if(this._isInlineObjectElement(i.item))return i.item;if(i.item.is("containerElement"))return null;if(i.item.is("$textProxy"))return i.item}return null}_isBlockDomElement(t){return this.isElement(t)&&this.blockElements.includes(t.tagName.toLowerCase())}_isBlockViewElement(t){return t.is("element")&&this.blockElements.includes(t.name)}_isInlineObjectElement(t){return!!t.is("element")&&(t.name=="br"||this.inlineObjectElements.includes(t.name)||!!this._inlineObjectElementMatcher.match(t))}_createViewElement(t,e){if(jo(t))return new Vi(this.document,"$comment");const n=e.keepOriginalCase?t.tagName:t.tagName.toLowerCase();return new he(this.document,n)}_isViewElementWithRawContent(t,e){return e.withChildren!==!1&&t.is("element")&&!!this._rawContentElementMatcher.match(t)}_shouldRenameElement(t){const e=t.toLowerCase();return this.renderingMode==="editing"&&this.unsafeElements.includes(e)}_createReplacementDomElement(t,e){const n=this._domDocument.createElement("span");if(n.setAttribute(gd,t),e){for(;e.firstChild;)n.appendChild(e.firstChild);for(const i of e.getAttributeNames())n.setAttribute(i,e.getAttribute(i))}return n}}function V0(o,t){return o.getAncestors().some(e=>e.is("element")&&t.includes(e.name))}function pd(o,t){let e=o;for(;e;)t(e),e=e.parentElement}function md(o,t){const e=o.parentNode;return!!e&&!!e.tagName&&t.includes(e.tagName.toLowerCase())}function fd(o){o==="script"&&Y("domconverter-unsafe-script-element-detected"),o==="style"&&Y("domconverter-unsafe-style-element-detected")}class Ke extends Ae(){constructor(t){super(),this._isEnabled=!1,this.view=t,this.document=t.document}get isEnabled(){return this._isEnabled}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}destroy(){this.disable(),this.stopListening()}checkShouldIgnoreEventFromTarget(t){return t&&t.nodeType===3&&(t=t.parentNode),!(!t||t.nodeType!==1)&&t.matches("[data-cke-ignore-events], [data-cke-ignore-events] *")}}const kd=Yl(function(o,t){no(t,io(t),o)});class ho{constructor(t,e,n){this.view=t,this.document=t.document,this.domEvent=e,this.domTarget=e.target,kd(this,n)}get target(){return this.view.domConverter.mapDomToView(this.domTarget)}preventDefault(){this.domEvent.preventDefault()}stopPropagation(){this.domEvent.stopPropagation()}}class fn extends Ke{constructor(){super(...arguments),this.useCapture=!1}observe(t){(typeof this.domEventType=="string"?[this.domEventType]:this.domEventType).forEach(e=>{this.listenTo(t,e,(n,i)=>{this.isEnabled&&!this.checkShouldIgnoreEventFromTarget(i.target)&&this.onDomEvent(i)},{useCapture:this.useCapture})})}stopObserving(t){this.stopListening(t)}fire(t,e,n){this.isEnabled&&this.document.fire(t,new ho(this.view,e,n))}}class H0 extends fn{constructor(){super(...arguments),this.domEventType=["keydown","keyup"]}onDomEvent(t){const e={keyCode:t.keyCode,altKey:t.altKey,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,metaKey:t.metaKey,get keystroke(){return so(this)}};this.fire(t.type,t,e)}}class U0 extends Ke{constructor(t){super(t),this._fireSelectionChangeDoneDebounced=Ho(e=>{this.document.fire("selectionChangeDone",e)},200)}observe(){const t=this.document;t.on("arrowKey",(e,n)=>{t.selection.isFake&&this.isEnabled&&n.preventDefault()},{context:"$capture"}),t.on("arrowKey",(e,n)=>{t.selection.isFake&&this.isEnabled&&this._handleSelectionMove(n.keyCode)},{priority:"lowest"})}stopObserving(){}destroy(){super.destroy(),this._fireSelectionChangeDoneDebounced.cancel()}_handleSelectionMove(t){const e=this.document.selection,n=new Pe(e.getRanges(),{backward:e.isBackward,fake:!1});t!=ut.arrowleft&&t!=ut.arrowup||n.setTo(n.getFirstPosition()),t!=ut.arrowright&&t!=ut.arrowdown||n.setTo(n.getLastPosition());const i={oldSelection:e,newSelection:n,domSelection:null};this.document.fire("selectionChange",i),this._fireSelectionChangeDoneDebounced(i)}}const q0=function(o){return this.__data__.set(o,"__lodash_hash_undefined__"),this},G0=function(o){return this.__data__.has(o)};function qi(o){var t=-1,e=o==null?0:o.length;for(this.__data__=new _i;++ta))return!1;var l=r.get(o),d=r.get(t);if(l&&d)return l==t&&d==o;var h=-1,u=!0,g=2&e?new W0:void 0;for(r.set(o,t),r.set(t,o);++h{this._isFocusChanging=!0,this._renderTimeoutId=setTimeout(()=>{this.flush(),t.change(()=>{})},50)}),e.on("blur",(n,i)=>{const r=e.selection.editableElement;r!==null&&r!==i.target||(e.isFocused=!1,this._isFocusChanging=!1,t.change(()=>{}))})}flush(){this._isFocusChanging&&(this._isFocusChanging=!1,this.document.isFocused=!0)}onDomEvent(t){this.fire(t.type,t)}destroy(){this._renderTimeoutId&&clearTimeout(this._renderTimeoutId),super.destroy()}}class oA extends Ke{constructor(t){super(t),this.mutationObserver=t.getObserver(yd),this.focusObserver=t.getObserver(Wi),this.selection=this.document.selection,this.domConverter=t.domConverter,this._documents=new WeakSet,this._fireSelectionChangeDoneDebounced=Ho(e=>{this.document.fire("selectionChangeDone",e)},200),this._clearInfiniteLoopInterval=setInterval(()=>this._clearInfiniteLoop(),1e3),this._documentIsSelectingInactivityTimeoutDebounced=Ho(()=>this.document.isSelecting=!1,5e3),this._loopbackCounter=0}observe(t){const e=t.ownerDocument,n=()=>{this.document.isSelecting&&(this._handleSelectionChange(null,e),this.document.isSelecting=!1,this._documentIsSelectingInactivityTimeoutDebounced.cancel())};this.listenTo(t,"selectstart",()=>{this.document.isSelecting=!0,this._documentIsSelectingInactivityTimeoutDebounced()},{priority:"highest"}),this.listenTo(t,"keydown",n,{priority:"highest",useCapture:!0}),this.listenTo(t,"keyup",n,{priority:"highest",useCapture:!0}),this._documents.has(e)||(this.listenTo(e,"mouseup",n,{priority:"highest",useCapture:!0}),this.listenTo(e,"selectionchange",(i,r)=>{this.document.isComposing&&!f.isAndroid||(this._handleSelectionChange(r,e),this._documentIsSelectingInactivityTimeoutDebounced())}),this._documents.add(e))}stopObserving(t){this.stopListening(t)}destroy(){super.destroy(),clearInterval(this._clearInfiniteLoopInterval),this._fireSelectionChangeDoneDebounced.cancel(),this._documentIsSelectingInactivityTimeoutDebounced.cancel()}_reportInfiniteLoop(){}_handleSelectionChange(t,e){if(!this.isEnabled)return;const n=e.defaultView.getSelection();if(this.checkShouldIgnoreEventFromTarget(n.anchorNode))return;this.mutationObserver.flush();const i=this.domConverter.domSelectionToView(n);if(i.rangeCount!=0){if(this.view.hasDomSelection=!0,this.focusObserver.flush(),!this.selection.isEqual(i)||!this.domConverter.isDomSelectionCorrect(n))if(++this._loopbackCounter>60)this._reportInfiniteLoop();else if(this.selection.isSimilar(i))this.view.forceRender();else{const r={oldSelection:this.selection,newSelection:i,domSelection:n};this.document.fire("selectionChange",r),this._fireSelectionChangeDoneDebounced(r)}}else this.view.hasDomSelection=!1}_clearInfiniteLoop(){this._loopbackCounter=0}}class iA extends fn{constructor(t){super(t),this.domEventType=["compositionstart","compositionupdate","compositionend"];const e=this.document;e.on("compositionstart",()=>{e.isComposing=!0},{priority:"low"}),e.on("compositionend",()=>{e.isComposing=!1},{priority:"low"})}onDomEvent(t){this.fire(t.type,t,{data:t.data})}}class xd{constructor(t,e={}){this._files=e.cacheFiles?Ed(t):null,this._native=t}get files(){return this._files||(this._files=Ed(this._native)),this._files}get types(){return this._native.types}getData(t){return this._native.getData(t)}setData(t,e){this._native.setData(t,e)}set effectAllowed(t){this._native.effectAllowed=t}get effectAllowed(){return this._native.effectAllowed}set dropEffect(t){this._native.dropEffect=t}get dropEffect(){return this._native.dropEffect}setDragImage(t,e,n){this._native.setDragImage(t,e,n)}get isCanceled(){return this._native.dropEffect=="none"||!!this._native.mozUserCancelled}}function Ed(o){const t=Array.from(o.files||[]),e=Array.from(o.items||[]);return t.length?t:e.filter(n=>n.kind==="file").map(n=>n.getAsFile())}class rA extends fn{constructor(){super(...arguments),this.domEventType="beforeinput"}onDomEvent(t){const e=t.getTargetRanges(),n=this.view,i=n.document;let r=null,s=null,a=[];if(t.dataTransfer&&(r=new xd(t.dataTransfer)),t.data!==null?s=t.data:r&&(s=r.getData("text/plain")),i.selection.isFake)a=Array.from(i.selection.getRanges());else if(e.length)a=e.map(c=>{const l=n.domConverter.domPositionToView(c.startContainer,c.startOffset),d=n.domConverter.domPositionToView(c.endContainer,c.endOffset);return l?n.createRange(l,d):d?n.createRange(d):void 0}).filter(c=>!!c);else if(f.isAndroid){const c=t.target.ownerDocument.defaultView.getSelection();a=Array.from(n.domConverter.domSelectionToView(c).getRanges())}if(f.isAndroid&&t.inputType=="insertCompositionText"&&s&&s.endsWith(` +`)}},2108:(v,x,m)=>{var y,D=function(){return y===void 0&&(y=!!(window&&document&&document.all&&!window.atob)),y},C=function(){var Z={};return function(rt){if(Z[rt]===void 0){var _=document.querySelector(rt);if(window.HTMLIFrameElement&&_ instanceof window.HTMLIFrameElement)try{_=_.contentDocument.head}catch{_=null}Z[rt]=_}return Z[rt]}}(),f=[];function w(Z){for(var rt=-1,_=0;_{var x=v&&v.__esModule?()=>v.default:()=>v;return N.d(x,{a:x}),x},N.d=(v,x)=>{for(var m in x)N.o(x,m)&&!N.o(v,m)&&Object.defineProperty(v,m,{enumerable:!0,get:x[m]})},N.o=(v,x)=>Object.prototype.hasOwnProperty.call(v,x),N.nc=void 0;var K={};return(()=>{function v({emitter:o,activator:t,callback:e,contextElements:n}){o.listenTo(document,"mousedown",(i,r)=>{if(!t())return;const s=typeof r.composedPath=="function"?r.composedPath():[],a=typeof n=="function"?n():n;for(const c of a)if(c.contains(r.target)||s.includes(c))return;e()})}function x(o){return class extends o{disableCssTransitions(){this._isCssTransitionsDisabled=!0}enableCssTransitions(){this._isCssTransitionsDisabled=!1}constructor(...t){super(...t),this.set("_isCssTransitionsDisabled",!1),this.initializeCssTransitionDisablerMixin()}initializeCssTransitionDisablerMixin(){this.extendTemplate({attributes:{class:[this.bindTemplate.if("_isCssTransitionsDisabled","ck-transitions-disabled")]}})}}}function m({view:o}){o.listenTo(o.element,"submit",(t,e)=>{e.preventDefault(),o.fire("submit")},{useCapture:!0})}function y({keystrokeHandler:o,focusTracker:t,gridItems:e,numberOfColumns:n,uiLanguageDirection:i}){const r=typeof n=="number"?()=>n:n;function s(l){return d=>{const h=e.find(p=>p.element===t.focusedElement),u=e.getIndex(h),g=l(u,e);e.get(g).focus(),d.stopPropagation(),d.preventDefault()}}function a(l,d){return l===d-1?0:l+1}function c(l,d){return l===0?d-1:l-1}o.set("arrowright",s((l,d)=>i==="rtl"?c(l,d.length):a(l,d.length))),o.set("arrowleft",s((l,d)=>i==="rtl"?a(l,d.length):c(l,d.length))),o.set("arrowup",s((l,d)=>{let h=l-r();return h<0&&(h=l+r()*Math.floor(d.length/r()),h>d.length-1&&(h-=r())),h})),o.set("arrowdown",s((l,d)=>{let h=l+r();return h>d.length-1&&(h=l%r()),h}))}N.d(K,{default:()=>Ga});const D=function(){try{return navigator.userAgent.toLowerCase()}catch{return""}}();var C;const f={isMac:w(D),isWindows:(C=D,C.indexOf("windows")>-1),isGecko:function(o){return!!o.match(/gecko\/\d+/)}(D),isSafari:function(o){return o.indexOf(" applewebkit/")>-1&&o.indexOf("chrome")===-1}(D),isiOS:function(o){return!!o.match(/iphone|ipad/i)||w(o)&&navigator.maxTouchPoints>0}(D),isAndroid:function(o){return o.indexOf("android")>-1}(D),isBlink:function(o){return o.indexOf("chrome/")>-1&&o.indexOf("edge/")<0}(D),features:{isRegExpUnicodePropertySupported:function(){let o=!1;try{o="ć".search(new RegExp("[\\p{L}]","u"))===0}catch{}return o}()}};function w(o){return o.indexOf("macintosh")>-1}function I(o,t,e,n){e=e||function(c,l){return c===l};const i=Array.isArray(o)?o:Array.prototype.slice.call(o),r=Array.isArray(t)?t:Array.prototype.slice.call(t),s=function(c,l,d){const h=S(c,l,d);if(h===-1)return{firstIndex:-1,lastIndexOld:-1,lastIndexNew:-1};const u=T(c,h),g=T(l,h),p=S(u,g,d),k=c.length-p,b=l.length-p;return{firstIndex:h,lastIndexOld:k,lastIndexNew:b}}(i,r,e);return n?function(c,l){const{firstIndex:d,lastIndexOld:h,lastIndexNew:u}=c;if(d===-1)return Array(l).fill("equal");let g=[];return d>0&&(g=g.concat(Array(d).fill("equal"))),u-d>0&&(g=g.concat(Array(u-d).fill("insert"))),h-d>0&&(g=g.concat(Array(h-d).fill("delete"))),u0&&d.push({index:h,type:"insert",values:c.slice(h,g)}),u-h>0&&d.push({index:h+(g-h),type:"delete",howMany:u-h}),d}(r,s)}function S(o,t,e){for(let n=0;n200||i>200||n+i>300)return L.fastDiff(o,t,e,!0);let r,s;if(iA?-1:1;d[k+E]&&(d[k]=d[k+E].slice(0)),d[k]||(d[k]=[]),d[k].push(b>A?r:s);let M=Math.max(b,A),z=M-k;for(;zl;g--)h[g]=u(g);h[l]=u(l),p++}while(h[l]!==c);return d[l].slice(1)}L.fastDiff=I;const j=function(){return function o(){o.called=!0}};class H{constructor(t,e){this.source=t,this.name=e,this.path=[],this.stop=j(),this.off=j()}}const W=new Array(256).fill("").map((o,t)=>("0"+t.toString(16)).slice(-2));function X(){const o=4294967296*Math.random()>>>0,t=4294967296*Math.random()>>>0,e=4294967296*Math.random()>>>0,n=4294967296*Math.random()>>>0;return"e"+W[o>>0&255]+W[o>>8&255]+W[o>>16&255]+W[o>>24&255]+W[t>>0&255]+W[t>>8&255]+W[t>>16&255]+W[t>>24&255]+W[e>>0&255]+W[e>>8&255]+W[e>>16&255]+W[e>>24&255]+W[n>>0&255]+W[n>>8&255]+W[n>>16&255]+W[n>>24&255]}const At={get(o="normal"){return typeof o!="number"?this[o]||this.normal:o},highest:1e5,high:1e3,normal:0,low:-1e3,lowest:-1e5};function Z(o,t){const e=At.get(t.priority);for(let n=0;n{if(typeof h=="object"&&h!==null){if(s.has(h))return`[object ${h.constructor.name}]`;s.add(h)}return h},c=r?` ${JSON.stringify(r,a)}`:"",l=Mt(i);return i+c+l}(t,n)),this.name="CKEditorError",this.context=e,this.data=n}is(t){return t==="CKEditorError"}static rethrowUnexpectedError(t,e){if(t.is&&t.is("CKEditorError"))throw t;const n=new _(t.message,e);throw n.stack=t.stack,n}}function Q(o,t){console.warn(...It(o,t))}function Et(o,t){console.error(...It(o,t))}function Mt(o){return` +Read more: ${rt}#error-${o}`}function It(o,t){const e=Mt(o);return t?[o,t,e]:[o,e]}const Ue="41.1.0",De=new Date(2024,1,7);if(globalThis.CKEDITOR_VERSION)throw new _("ckeditor-duplicated-modules",null);globalThis.CKEDITOR_VERSION=Ue;const fe=Symbol("listeningTo"),Xe=Symbol("emitterId"),Ie=Symbol("delegations"),fi=kt(Object);function kt(o){return o?class extends o{on(t,e,n){this.listenTo(this,t,e,n)}once(t,e,n){let i=!1;this.listenTo(this,t,(r,...s)=>{i||(i=!0,r.off(),e.call(this,r,...s))},n)}off(t,e){this.stopListening(this,t,e)}listenTo(t,e,n,i={}){let r,s;this[fe]||(this[fe]={});const a=this[fe];Eo(t)||xo(t);const c=Eo(t);(r=a[c])||(r=a[c]={emitter:t,callbacks:{}}),(s=r.callbacks[e])||(s=r.callbacks[e]=[]),s.push(n),function(l,d,h,u,g){d._addEventListener?d._addEventListener(h,u,g):l._addEventListener.call(d,h,u,g)}(this,t,e,n,i)}stopListening(t,e,n){const i=this[fe];let r=t&&Eo(t);const s=i&&r?i[r]:void 0,a=s&&e?s.callbacks[e]:void 0;if(!(!i||t&&!s||e&&!a))if(n)Se(this,t,e,n),a.indexOf(n)!==-1&&(a.length===1?delete s.callbacks[e]:Se(this,t,e,n));else if(a){for(;n=a.pop();)Se(this,t,e,n);delete s.callbacks[e]}else if(s){for(e in s.callbacks)this.stopListening(t,e);delete i[r]}else{for(r in i)this.stopListening(i[r].emitter);delete this[fe]}}fire(t,...e){try{const n=t instanceof H?t:new H(this,t),i=n.name;let r=zt(this,i);if(n.path.push(this),r){const a=[n,...e];r=Array.from(r);for(let c=0;c{this[Ie]||(this[Ie]=new Map),t.forEach(i=>{const r=this[Ie].get(i);r?r.set(e,n):this[Ie].set(i,new Map([[e,n]]))})}}}stopDelegating(t,e){if(this[Ie])if(t)if(e){const n=this[Ie].get(t);n&&n.delete(e)}else this[Ie].delete(t);else this[Ie].clear()}_addEventListener(t,e,n){(function(s,a){const c=U(s);if(c[a])return;let l=a,d=null;const h=[];for(;l!==""&&!c[l];)c[l]={callbacks:[],childEvents:[]},h.push(c[l]),d&&c[l].childEvents.push(d),d=l,l=l.substr(0,l.lastIndexOf(":"));if(l!==""){for(const u of h)u.callbacks=c[l].callbacks.slice();c[l].childEvents.push(d)}})(this,t);const i=ht(this,t),r={callback:e,priority:At.get(n.priority)};for(const s of i)Z(s,r)}_removeEventListener(t,e){const n=ht(this,t);for(const i of n)for(let r=0;r-1?zt(o,t.substr(0,t.lastIndexOf(":"))):null}function oe(o,t,e){for(let[n,i]of o){i?typeof i=="function"&&(i=i(t.name)):i=t.name;const r=new H(t.source,i);r.path=[...t.path],n.fire(r,...e)}}function Se(o,t,e,n){t._removeEventListener?t._removeEventListener(e,n):o._removeEventListener.call(t,e,n)}["on","once","off","listenTo","stopListening","fire","delegate","stopDelegating","_addEventListener","_removeEventListener"].forEach(o=>{kt[o]=fi.prototype[o]});const bt=function(o){var t=typeof o;return o!=null&&(t=="object"||t=="function")},qe=Symbol("observableProperties"),Yt=Symbol("boundObservables"),ke=Symbol("boundProperties"),be=Symbol("decoratedMethods"),Do=Symbol("decoratedOriginal"),yn=mt(kt());function mt(o){return o?class extends o{set(t,e){if(bt(t))return void Object.keys(t).forEach(i=>{this.set(i,t[i])},this);xn(this);const n=this[qe];if(t in this&&!n.has(t))throw new _("observable-set-cannot-override",this);Object.defineProperty(this,t,{enumerable:!0,configurable:!0,get:()=>n.get(t),set(i){const r=n.get(t);let s=this.fire(`set:${t}`,t,i,r);s===void 0&&(s=i),r===s&&n.has(t)||(n.set(t,s),this.fire(`change:${t}`,t,s,r))}}),this[t]=e}bind(...t){if(!t.length||!En(t))throw new _("observable-bind-wrong-properties",this);if(new Set(t).size!==t.length)throw new _("observable-bind-duplicate-properties",this);xn(this);const e=this[ke];t.forEach(i=>{if(e.has(i))throw new _("observable-bind-rebind",this)});const n=new Map;return t.forEach(i=>{const r={property:i,to:[]};e.set(i,r),n.set(i,r)}),{to:Ir,toMany:ki,_observable:this,_bindProperties:t,_to:[],_bindings:n}}unbind(...t){if(!this[qe])return;const e=this[ke],n=this[Yt];if(t.length){if(!En(t))throw new _("observable-unbind-wrong-properties",this);t.forEach(i=>{const r=e.get(i);r&&(r.to.forEach(([s,a])=>{const c=n.get(s),l=c[a];l.delete(r),l.size||delete c[a],Object.keys(c).length||(n.delete(s),this.stopListening(s,"change"))}),e.delete(i))})}else n.forEach((i,r)=>{this.stopListening(r,"change")}),n.clear(),e.clear()}decorate(t){xn(this);const e=this[t];if(!e)throw new _("observablemixin-cannot-decorate-undefined",this,{object:this,methodName:t});this.on(t,(n,i)=>{n.return=e.apply(this,i)}),this[t]=function(...n){return this.fire(t,n)},this[t][Do]=e,this[be]||(this[be]=[]),this[be].push(t)}stopListening(t,e,n){if(!t&&this[be]){for(const i of this[be])this[i]=this[i][Do];delete this[be]}super.stopListening(t,e,n)}}:yn}function xn(o){o[qe]||(Object.defineProperty(o,qe,{value:new Map}),Object.defineProperty(o,Yt,{value:new Map}),Object.defineProperty(o,ke,{value:new Map}))}function Ir(...o){const t=function(...r){if(!r.length)throw new _("observable-bind-to-parse-error",null);const s={to:[]};let a;return typeof r[r.length-1]=="function"&&(s.callback=r.pop()),r.forEach(c=>{if(typeof c=="string")a.properties.push(c);else{if(typeof c!="object")throw new _("observable-bind-to-parse-error",null);a={observable:c,properties:[]},s.to.push(a)}}),s}(...o),e=Array.from(this._bindings.keys()),n=e.length;if(!t.callback&&t.to.length>1)throw new _("observable-bind-to-no-callback",this);if(n>1&&t.callback)throw new _("observable-bind-to-extra-callback",this);var i;t.to.forEach(r=>{if(r.properties.length&&r.properties.length!==n)throw new _("observable-bind-to-properties-length",this);r.properties.length||(r.properties=this._bindProperties)}),this._to=t.to,t.callback&&(this._bindings.get(e[0]).callback=t.callback),i=this._observable,this._to.forEach(r=>{const s=i[Yt];let a;s.get(r.observable)||i.listenTo(r.observable,"change",(c,l)=>{a=s.get(r.observable)[l],a&&a.forEach(d=>{Io(i,d.property)})})}),function(r){let s;r._bindings.forEach((a,c)=>{r._to.forEach(l=>{s=l.properties[a.callback?0:r._bindProperties.indexOf(c)],a.to.push([l.observable,s]),function(d,h,u,g){const p=d[Yt],k=p.get(u),b=k||{};b[g]||(b[g]=new Set),b[g].add(h),k||p.set(u,b)}(r._observable,a,l.observable,s)})})}(this),this._bindProperties.forEach(r=>{Io(this._observable,r)})}function ki(o,t,e){if(this._bindings.size>1)throw new _("observable-bind-to-many-not-one-binding",this);this.to(...function(n,i){const r=n.map(s=>[s,i]);return Array.prototype.concat.apply([],r)}(o,t),e)}function En(o){return o.every(t=>typeof t=="string")}function Io(o,t){const e=o[ke].get(t);let n;e.callback?n=e.callback.apply(o,e.to.map(i=>i[0][i[1]])):(n=e.to[0],n=n[0][n[1]]),Object.prototype.hasOwnProperty.call(o,t)?o[t]=n:o.set(t,n)}["set","bind","unbind","decorate","on","once","off","listenTo","stopListening","fire","delegate","stopDelegating","_addEventListener","_removeEventListener"].forEach(o=>{mt[o]=yn.prototype[o]});class So{constructor(){this._replacedElements=[]}replace(t,e){this._replacedElements.push({element:t,newElement:e}),t.style.display="none",e&&t.parentNode.insertBefore(e,t.nextSibling)}restore(){this._replacedElements.forEach(({element:t,newElement:e})=>{t.style.display="",e&&e.remove()}),this._replacedElements=[]}}function Ft(o){let t=0;for(const e of o)t++;return t}function St(o,t){const e=Math.min(o.length,t.length);for(let n=0;n-1},Tk=function(o,t){var e=this.__data__,n=wi(e,o);return n<0?(++this.size,e.push([o,t])):e[n][1]=t,this};function Jn(o){var t=-1,e=o==null?0:o.length;for(this.clear();++t-1&&o%1==0&&o-1&&o%1==0&&o<=9007199254740991};var Tt={};Tt["[object Float32Array]"]=Tt["[object Float64Array]"]=Tt["[object Int8Array]"]=Tt["[object Int16Array]"]=Tt["[object Int32Array]"]=Tt["[object Uint8Array]"]=Tt["[object Uint8ClampedArray]"]=Tt["[object Uint16Array]"]=Tt["[object Uint32Array]"]=!0,Tt["[object Arguments]"]=Tt["[object Array]"]=Tt["[object ArrayBuffer]"]=Tt["[object Boolean]"]=Tt["[object DataView]"]=Tt["[object Date]"]=Tt["[object Error]"]=Tt["[object Function]"]=Tt["[object Map]"]=Tt["[object Number]"]=Tt["[object Object]"]=Tt["[object RegExp]"]=Tt["[object Set]"]=Tt["[object String]"]=Tt["[object WeakMap]"]=!1;const ub=function(o){return we(o)&&sc(o.length)&&!!Tt[gn(o)]},Lr=function(o){return function(t){return o(t)}};var ac=F&&!F.nodeType&&F,Oo=ac&&!0&&P&&!P.nodeType&&P,Or=Oo&&Oo.exports===ac&&$a.process;const oo=function(){try{var o=Oo&&Oo.require&&Oo.require("util").types;return o||Or&&Or.binding&&Or.binding("util")}catch{}}();var cc=oo&&oo.isTypedArray;const zr=cc?Lr(cc):ub;var gb=Object.prototype.hasOwnProperty;const lc=function(o,t){var e=ee(o),n=!e&&Nr(o),i=!e&&!n&&Lo(o),r=!e&&!n&&!i&&zr(o),s=e||n||i||r,a=s?ab(o.length,String):[],c=a.length;for(var l in o)!t&&!gb.call(o,l)||s&&(l=="length"||i&&(l=="offset"||l=="parent")||r&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||Pr(l,c))||a.push(l);return a};var pb=Object.prototype;const Rr=function(o){var t=o&&o.constructor;return o===(typeof t=="function"&&t.prototype||pb)},mb=Za(Object.keys,Object);var fb=Object.prototype.hasOwnProperty;const kb=function(o){if(!Rr(o))return mb(o);var t=[];for(var e in Object(o))fb.call(o,e)&&e!="constructor"&&t.push(e);return t},yi=function(o){return o!=null&&sc(o.length)&&!Dn(o)},jr=function(o){return yi(o)?lc(o):kb(o)},bb=function(o,t){return o&&no(t,jr(t),o)},wb=function(o){var t=[];if(o!=null)for(var e in Object(o))t.push(e);return t};var Ab=Object.prototype.hasOwnProperty;const Cb=function(o){if(!bt(o))return wb(o);var t=Rr(o),e=[];for(var n in o)(n!="constructor"||!t&&Ab.call(o,n))&&e.push(n);return e},io=function(o){return yi(o)?lc(o,!0):Cb(o)},_b=function(o,t){return o&&no(t,io(t),o)};var dc=F&&!F.nodeType&&F,hc=dc&&!0&&P&&!P.nodeType&&P,uc=hc&&hc.exports===dc?Te.Buffer:void 0,gc=uc?uc.allocUnsafe:void 0;const pc=function(o,t){if(t)return o.slice();var e=o.length,n=gc?gc(e):new o.constructor(e);return o.copy(n),n},mc=function(o,t){var e=-1,n=o.length;for(t||(t=Array(n));++e{this._setToTarget(t,i,e[i],n)})}}function zc(o){return Kr(o,Gb)}function Gb(o){return Mn(o)||typeof o=="function"?o:void 0}function pn(o){if(o){if(o.defaultView)return o instanceof o.defaultView.Document;if(o.ownerDocument&&o.ownerDocument.defaultView)return o instanceof o.ownerDocument.defaultView.Node}return!1}function Ei(o){const t=Object.prototype.toString.apply(o);return t=="[object Window]"||t=="[object global]"}const Rc=Ae(kt());function Ae(o){return o?class extends o{listenTo(t,e,n,i={}){if(pn(t)||Ei(t)){const r={capture:!!i.useCapture,passive:!!i.usePassive},s=this._getProxyEmitter(t,r)||new Wb(t,r);this.listenTo(s,e,n,i)}else super.listenTo(t,e,n,i)}stopListening(t,e,n){if(pn(t)||Ei(t)){const i=this._getAllProxyEmitters(t);for(const r of i)this.stopListening(r,e,n)}else super.stopListening(t,e,n)}_getProxyEmitter(t,e){return function(n,i){const r=n[fe];return r&&r[i]?r[i].emitter:null}(this,jc(t,e))}_getAllProxyEmitters(t){return[{capture:!1,passive:!1},{capture:!1,passive:!0},{capture:!0,passive:!1},{capture:!0,passive:!0}].map(e=>this._getProxyEmitter(t,e)).filter(e=>!!e)}}:Rc}["_getProxyEmitter","_getAllProxyEmitters","on","once","off","listenTo","stopListening","fire","delegate","stopDelegating","_addEventListener","_removeEventListener"].forEach(o=>{Ae[o]=Rc.prototype[o]});class Wb extends kt(){constructor(t,e){super(),xo(this,jc(t,e)),this._domNode=t,this._options=e}attach(t){if(this._domListeners&&this._domListeners[t])return;const e=this._createDomListener(t);this._domNode.addEventListener(t,e,this._options),this._domListeners||(this._domListeners={}),this._domListeners[t]=e}detach(t){let e;!this._domListeners[t]||(e=this._events[t])&&e.callbacks.length||this._domListeners[t].removeListener()}_addEventListener(t,e,n){this.attach(t),kt().prototype._addEventListener.call(this,t,e,n)}_removeEventListener(t,e){kt().prototype._removeEventListener.call(this,t,e),this.detach(t)}_createDomListener(t){const e=n=>{this.fire(t,n)};return e.removeListener=()=>{this._domNode.removeEventListener(t,e,this._options),delete this._domListeners[t]},e}}function jc(o,t){let e=function(n){return n["data-ck-expando"]||(n["data-ck-expando"]=X())}(o);for(const n of Object.keys(t).sort())t[n]&&(e+="-"+n);return e}let Yr;try{Yr={window,document}}catch{Yr={window:{},document:{}}}const $=Yr;function Fc(o){const t=o.ownerDocument.defaultView.getComputedStyle(o);return{top:parseInt(t.borderTopWidth,10),right:parseInt(t.borderRightWidth,10),bottom:parseInt(t.borderBottomWidth,10),left:parseInt(t.borderLeftWidth,10)}}function Vt(o){return Object.prototype.toString.call(o)=="[object Text]"}function Di(o){return Object.prototype.toString.apply(o)=="[object Range]"}function Vc(o){return o&&o.parentNode?o.offsetParent===$.document.body?null:o.offsetParent:null}const Hc=["top","right","bottom","left","width","height"];class dt{constructor(t){const e=Di(t);if(Object.defineProperty(this,"_source",{value:t._source||t,writable:!0,enumerable:!1}),Qr(t)||e)if(e){const n=dt.getDomRangeRects(t);Ii(this,dt.getBoundingRect(n))}else Ii(this,t.getBoundingClientRect());else if(Ei(t)){const{innerWidth:n,innerHeight:i}=t;Ii(this,{top:0,right:n,bottom:i,left:0,width:n,height:i})}else Ii(this,t)}clone(){return new dt(this)}moveTo(t,e){return this.top=e,this.right=t+this.width,this.bottom=e+this.height,this.left=t,this}moveBy(t,e){return this.top+=e,this.right+=t,this.left+=t,this.bottom+=e,this}getIntersection(t){const e={top:Math.max(this.top,t.top),right:Math.min(this.right,t.right),bottom:Math.min(this.bottom,t.bottom),left:Math.max(this.left,t.left),width:0,height:0};if(e.width=e.right-e.left,e.height=e.bottom-e.top,e.width<0||e.height<0)return null;{const n=new dt(e);return n._source=this._source,n}}getIntersectionArea(t){const e=this.getIntersection(t);return e?e.getArea():0}getArea(){return this.width*this.height}getVisible(){const t=this._source;let e=this.clone();if(Uc(t))return e;let n,i=t,r=t.parentNode||t.commonAncestorContainer;for(;r&&!Uc(r);){const a=((s=r)instanceof HTMLElement?s.ownerDocument.defaultView.getComputedStyle(s).overflow:"visible")==="visible";i instanceof HTMLElement&&qc(i)==="absolute"&&(n=i);const c=qc(r);if(a||n&&(c==="relative"&&a||c!=="relative")){i=r,r=r.parentNode;continue}const l=new dt(r),d=e.getIntersection(l);if(!d)return null;d.getArea(){for(const t of o){const e=Rt._getElementCallbacks(t.target);if(e)for(const n of e)n(t)}})}};let Ro=Rt;function Gc(o,t){o instanceof HTMLTextAreaElement&&(o.value=t),o.innerHTML=t}function ro(o){return t=>t+o}function Si(o){let t=0;for(;o.previousSibling;)o=o.previousSibling,t++;return t}function Wc(o,t,e){o.insertBefore(e,o.childNodes[t]||null)}function jo(o){return o&&o.nodeType===Node.COMMENT_NODE}function Bn(o){return!!(o&&o.getClientRects&&o.getClientRects().length)}Ro._observerInstance=null,Ro._elementCallbacks=null;var $c=Math.pow;function Zr({element:o,target:t,positions:e,limiter:n,fitInViewport:i,viewportOffsetConfig:r}){Dn(t)&&(t=t()),Dn(n)&&(n=n());const s=Vc(o),a=function(u){u=Object.assign({top:0,bottom:0,left:0,right:0},u);const g=new dt($.window);return g.top+=u.top,g.height-=u.top,g.bottom-=u.bottom,g.height-=u.bottom,g}(r),c=new dt(o),l=Kc(t,a);let d;if(!l||!a.getIntersection(l))return null;const h={targetRect:l,elementRect:c,positionedElementAncestor:s,viewportRect:a};if(n||i){if(n){const u=Kc(n,a);u&&(h.limiterRect=u)}d=function(u,g){const{elementRect:p}=g,k=p.getArea(),b=u.map(M=>new Yc(M,g)).filter(M=>!!M.name);let A=0,E=null;for(const M of b){const{limiterIntersectionArea:z,viewportIntersectionArea:G}=M;if(z===k)return M;const et=$c(G,2)+$c(z,2);et>A&&(A=et,E=M)}return E}(e,h)}else d=new Yc(e[0],h);return d}function Kc(o,t){const e=new dt(o).getVisible();return e?e.getIntersection(t):null}class Yc{constructor(t,e){const n=t(e.targetRect,e.elementRect,e.viewportRect,e.limiterRect);if(!n)return;const{left:i,top:r,name:s,config:a}=n;this.name=s,this.config=a,this._positioningFunctionCoordinates={left:i,top:r},this._options=e}get left(){return this._absoluteRect.left}get top(){return this._absoluteRect.top}get limiterIntersectionArea(){const t=this._options.limiterRect;return t?t.getIntersectionArea(this._rect):0}get viewportIntersectionArea(){return this._options.viewportRect.getIntersectionArea(this._rect)}get _rect(){return this._cachedRect||(this._cachedRect=this._options.elementRect.clone().moveTo(this._positioningFunctionCoordinates.left,this._positioningFunctionCoordinates.top)),this._cachedRect}get _absoluteRect(){return this._cachedAbsoluteRect||(this._cachedAbsoluteRect=this._rect.toAbsoluteRect()),this._cachedAbsoluteRect}}function Qc(o){const t=o.parentNode;t&&t.removeChild(o)}function $b({window:o,rect:t,alignToTop:e,forceScroll:n,viewportOffset:i}){const r=t.clone().moveBy(0,i.bottom),s=t.clone().moveBy(0,-i.top),a=new dt(o).excludeScrollbarsAndBorders(),c=e&&n,l=[s,r].every(p=>a.contains(p));let{scrollX:d,scrollY:h}=o;const u=d,g=h;c?h-=a.top-t.top+i.top:l||(Jc(s,a)?h-=a.top-t.top+i.top:Zc(r,a)&&(h+=e?t.top-a.top-i.top:t.bottom-a.bottom+i.bottom)),l||(Xc(t,a)?d-=a.left-t.left+i.left:tl(t,a)&&(d+=t.right-a.right+i.right)),d==u&&h===g||o.scrollTo(d,h)}function Kb({parent:o,getRect:t,alignToTop:e,forceScroll:n,ancestorOffset:i=0,limiterElement:r}){const s=Jr(o),a=e&&n;let c,l,d;const h=r||s.document.body;for(;o!=h;)l=t(),c=new dt(o).excludeScrollbarsAndBorders(),d=c.contains(l),a?o.scrollTop-=c.top-l.top+i:d||(Jc(l,c)?o.scrollTop-=c.top-l.top+i:Zc(l,c)&&(o.scrollTop+=e?l.top-c.top-i:l.bottom-c.bottom+i)),d||(Xc(l,c)?o.scrollLeft-=c.left-l.left+i:tl(l,c)&&(o.scrollLeft+=l.right-c.right+i)),o=o.parentNode}function Zc(o,t){return o.bottom>t.bottom}function Jc(o,t){return o.topt.right}function Jr(o){return Di(o)?o.startContainer.ownerDocument.defaultView:o.ownerDocument.defaultView}function Yb(o){if(Di(o)){let t=o.commonAncestorContainer;return Vt(t)&&(t=t.parentNode),t}return o.parentNode}function el(o,t){const e=Jr(o),n=new dt(o);if(e===t)return n;{let i=e;for(;i!=t;){const r=i.frameElement,s=new dt(r).excludeScrollbarsAndBorders();n.moveBy(s.left,s.top),i=i.parent}}return n}const Qb={ctrl:"⌃",cmd:"⌘",alt:"⌥",shift:"⇧"},Zb={ctrl:"Ctrl+",alt:"Alt+",shift:"Shift+"},ut=function(){const o={arrowleft:37,arrowup:38,arrowright:39,arrowdown:40,backspace:8,delete:46,enter:13,space:32,esc:27,tab:9,ctrl:1114112,shift:2228224,alt:4456448,cmd:8912896};for(let t=65;t<=90;t++)o[String.fromCharCode(t).toLowerCase()]=t;for(let t=48;t<=57;t++)o[t-48]=t;for(let t=112;t<=123;t++)o["f"+(t-111)]=t;for(const t of"`-=[];',./\\")o[t]=t.charCodeAt(0);return o}(),Jb=Object.fromEntries(Object.entries(ut).map(([o,t])=>[t,o.charAt(0).toUpperCase()+o.slice(1)]));function so(o){let t;if(typeof o=="string"){if(t=ut[o.toLowerCase()],!t)throw new _("keyboard-unknown-key",null,{key:o})}else t=o.keyCode+(o.altKey?ut.alt:0)+(o.ctrlKey?ut.ctrl:0)+(o.shiftKey?ut.shift:0)+(o.metaKey?ut.cmd:0);return t}function Fo(o){return typeof o=="string"&&(o=function(t){return t.split("+").map(e=>e.trim())}(o)),o.map(t=>typeof t=="string"?function(e){if(e.endsWith("!"))return so(e.slice(0,-1));const n=so(e);return(f.isMac||f.isiOS)&&n==ut.ctrl?ut.cmd:n}(t):t).reduce((t,e)=>e+t,0)}function nl(o){let t=Fo(o);return Object.entries(f.isMac||f.isiOS?Qb:Zb).reduce((e,[n,i])=>(t&ut[n]&&(t&=~ut[n],e+=i),e),"")+(t?Jb[t]:"")}function Xr(o,t){const e=t==="ltr";switch(o){case ut.arrowleft:return e?"left":"right";case ut.arrowright:return e?"right":"left";case ut.arrowup:return"up";case ut.arrowdown:return"down"}}function Bt(o){return Array.isArray(o)?o:[o]}function Xb(o,t,e=1){if(typeof e!="number")throw new _("translation-service-quantity-not-a-number",null,{quantity:e});const n=Object.keys($.window.CKEDITOR_TRANSLATIONS).length;n===1&&(o=Object.keys($.window.CKEDITOR_TRANSLATIONS)[0]);const i=t.id||t.string;if(n===0||!function(c,l){return!!$.window.CKEDITOR_TRANSLATIONS[c]&&!!$.window.CKEDITOR_TRANSLATIONS[c].dictionary[l]}(o,i))return e!==1?t.plural:t.string;const r=$.window.CKEDITOR_TRANSLATIONS[o].dictionary,s=$.window.CKEDITOR_TRANSLATIONS[o].getPluralForm||(c=>c===1?0:1),a=r[i];return typeof a=="string"?a:a[Number(s(e))]}$.window.CKEDITOR_TRANSLATIONS||($.window.CKEDITOR_TRANSLATIONS={});const tw=["ar","ara","fa","per","fas","he","heb","ku","kur","ug","uig"];function ol(o){return tw.includes(o)?"rtl":"ltr"}class ew{constructor({uiLanguage:t="en",contentLanguage:e}={}){this.uiLanguage=t,this.contentLanguage=e||this.uiLanguage,this.uiLanguageDirection=ol(this.uiLanguage),this.contentLanguageDirection=ol(this.contentLanguage),this.t=(n,i)=>this._t(n,i)}get language(){return console.warn("locale-deprecated-language-property: The Locale#language property has been deprecated and will be removed in the near future. Please use #uiLanguage and #contentLanguage properties instead."),this.uiLanguage}_t(t,e=[]){e=Bt(e),typeof t=="string"&&(t={string:t});const n=t.plural?e[0]:1;return function(i,r){return i.replace(/%(\d+)/g,(s,a)=>athis._items.length||e<0)throw new _("collection-add-item-invalid-index",this);let n=0;for(const i of t){const r=this._getItemIdBeforeAdding(i),s=e+n;this._items.splice(s,0,i),this._itemMap.set(r,i),this.fire("add",i,s),n++}return this.fire("change",{added:t,removed:[],index:e}),this}get(t){let e;if(typeof t=="string")e=this._itemMap.get(t);else{if(typeof t!="number")throw new _("collection-get-invalid-arg",this);e=this._items[t]}return e||null}has(t){if(typeof t=="string")return this._itemMap.has(t);{const e=t[this._idProperty];return e&&this._itemMap.has(e)}}getIndex(t){let e;return e=typeof t=="string"?this._itemMap.get(t):t,e?this._items.indexOf(e):-1}remove(t){const[e,n]=this._remove(t);return this.fire("change",{added:[],removed:[e],index:n}),e}map(t,e){return this._items.map(t,e)}forEach(t,e){this._items.forEach(t,e)}find(t,e){return this._items.find(t,e)}filter(t,e){return this._items.filter(t,e)}clear(){this._bindToCollection&&(this.stopListening(this._bindToCollection),this._bindToCollection=null);const t=Array.from(this._items);for(;this.length;)this._remove(0);this.fire("change",{added:[],removed:t,index:0})}bindTo(t){if(this._bindToCollection)throw new _("collection-bind-to-rebind",this);return this._bindToCollection=t,{as:e=>{this._setUpBindToBinding(n=>new e(n))},using:e=>{typeof e=="function"?this._setUpBindToBinding(e):this._setUpBindToBinding(n=>n[e])}}}_setUpBindToBinding(t){const e=this._bindToCollection,n=(i,r,s)=>{const a=e._bindToCollection==this,c=e._bindToInternalToExternalMap.get(r);if(a&&c)this._bindToExternalToInternalMap.set(r,c),this._bindToInternalToExternalMap.set(c,r);else{const l=t(r);if(!l)return void this._skippedIndexesFromExternal.push(s);let d=s;for(const h of this._skippedIndexesFromExternal)s>h&&d--;for(const h of e._skippedIndexesFromExternal)d>=h&&d++;this._bindToExternalToInternalMap.set(r,l),this._bindToInternalToExternalMap.set(l,r),this.add(l,d);for(let h=0;h{const a=this._bindToExternalToInternalMap.get(r);a&&this.remove(a),this._skippedIndexesFromExternal=this._skippedIndexesFromExternal.reduce((c,l)=>(sl&&c.push(l),c),[])})}_getItemIdBeforeAdding(t){const e=this._idProperty;let n;if(e in t){if(n=t[e],typeof n!="string")throw new _("collection-add-invalid-id",this);if(this.get(n))throw new _("collection-add-item-already-exists",this)}else t[e]=n=X();return n}_remove(t){let e,n,i,r=!1;const s=this._idProperty;if(typeof t=="string"?(n=t,i=this._itemMap.get(n),r=!i,i&&(e=this._items.indexOf(i))):typeof t=="number"?(e=t,i=this._items[e],r=!i,i&&(n=i[s])):(i=t,n=i[s],e=this._items.indexOf(i),r=e==-1||!this._itemMap.get(n)),r)throw new _("collection-remove-404",this);this._items.splice(e,1),this._itemMap.delete(n);const a=this._bindToInternalToExternalMap.get(i);return this._bindToInternalToExternalMap.delete(i),this._bindToExternalToInternalMap.delete(a),this.fire("remove",i,e),[i,e]}[Symbol.iterator](){return this._items[Symbol.iterator]()}}function Wt(o){const t=o.next();return t.done?null:t.value}class Qt extends Ae(mt()){constructor(){super(),this._elements=new Set,this._nextEventLoopTimeout=null,this.set("isFocused",!1),this.set("focusedElement",null)}add(t){if(this._elements.has(t))throw new _("focustracker-add-element-already-exist",this);this.listenTo(t,"focus",()=>this._focus(t),{useCapture:!0}),this.listenTo(t,"blur",()=>this._blur(),{useCapture:!0}),this._elements.add(t)}remove(t){t===this.focusedElement&&this._blur(),this._elements.has(t)&&(this.stopListening(t),this._elements.delete(t))}destroy(){this.stopListening()}_focus(t){clearTimeout(this._nextEventLoopTimeout),this.focusedElement=t,this.isFocused=!0}_blur(){clearTimeout(this._nextEventLoopTimeout),this._nextEventLoopTimeout=setTimeout(()=>{this.focusedElement=null,this.isFocused=!1},0)}}class ie{constructor(){this._listener=new(Ae())}listenTo(t){this._listener.listenTo(t,"keydown",(e,n)=>{this._listener.fire("_keydown:"+so(n),n)})}set(t,e,n={}){const i=Fo(t),r=n.priority;this._listener.listenTo(this._listener,"_keydown:"+i,(s,a)=>{e(a,()=>{a.preventDefault(),a.stopPropagation(),s.stop()}),s.return=!0},{priority:r})}press(t){return!!this._listener.fire("_keydown:"+so(t),t)}stopListening(t){this._listener.stopListening(t)}destroy(){this.stopListening()}}function We(o){return Gt(o)?new Map(o):function(t){const e=new Map;for(const n in t)e.set(n,t[n]);return e}(o)}function ts(o,t){let e;function n(...i){n.cancel(),e=setTimeout(()=>o(...i),t)}return n.cancel=()=>{clearTimeout(e)},n}function es(o,t){return!!(e=o.charAt(t-1))&&e.length==1&&/[\ud800-\udbff]/.test(e)&&function(n){return!!n&&n.length==1&&/[\udc00-\udfff]/.test(n)}(o.charAt(t));var e}function os(o,t){return!!(e=o.charAt(t))&&e.length==1&&/[\u0300-\u036f\u1ab0-\u1aff\u1dc0-\u1dff\u20d0-\u20ff\ufe20-\ufe2f]/.test(e);var e}const nw=function(){const o=[new RegExp("\\p{Emoji}[\\u{E0020}-\\u{E007E}]+\\u{E007F}","u"),new RegExp("\\p{Emoji}\\u{FE0F}?\\u{20E3}","u"),new RegExp("\\p{Emoji}\\u{FE0F}","u"),new RegExp("(?=\\p{General_Category=Other_Symbol})\\p{Emoji}\\p{Emoji_Modifier}*","u")],t=new RegExp("\\p{Regional_Indicator}{2}","u").source,e="(?:"+o.map(n=>n.source).join("|")+")";return new RegExp(`${t}|${e}(?:‍${e})*`,"ug")}();function il(o,t){const e=String(o).matchAll(nw);return Array.from(e).some(n=>n.index{this._renderViewIntoCollectionParent(n,i)}),this.on("remove",(e,n)=>{n.element&&this._parentElement&&n.element.remove()}),this._parentElement=null}destroy(){this.map(t=>t.destroy())}setParent(t){this._parentElement=t;for(const e of this)this._renderViewIntoCollectionParent(e)}delegate(...t){if(!t.length||!t.every(e=>typeof e=="string"))throw new _("ui-viewcollection-delegate-wrong-events",this);return{to:e=>{for(const n of this)for(const i of t)n.delegate(i).to(e);this.on("add",(n,i)=>{for(const r of t)i.delegate(r).to(e)}),this.on("remove",(n,i)=>{for(const r of t)i.stopDelegating(r,e)})}}}_renderViewIntoCollectionParent(t,e){t.isRendered||t.render(),t.element&&this._parentElement&&this._parentElement.insertBefore(t.element,this._parentElement.children[e])}remove(t){return super.remove(t)}}var ow=N(2108),q=N.n(ow),rl=N(3560),iw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(rl.c,iw),rl.c.locals;class tt extends Ae(mt()){constructor(t){super(),this.element=null,this.isRendered=!1,this.locale=t,this.t=t&&t.t,this._viewCollections=new Me,this._unboundChildren=this.createCollection(),this._viewCollections.on("add",(e,n)=>{n.locale=t,n.t=t&&t.t}),this.decorate("render")}get bindTemplate(){return this._bindTemplate?this._bindTemplate:this._bindTemplate=Be.bind(this,this)}createCollection(t){const e=new Ce(t);return this._viewCollections.add(e),e}registerChild(t){Gt(t)||(t=[t]);for(const e of t)this._unboundChildren.add(e)}deregisterChild(t){Gt(t)||(t=[t]);for(const e of t)this._unboundChildren.remove(e)}setTemplate(t){this.template=new Be(t)}extendTemplate(t){Be.extend(this.template,t)}render(){if(this.isRendered)throw new _("ui-view-render-already-rendered",this);this.template&&(this.element=this.template.render(),this.registerChild(this.template.getViews())),this.isRendered=!0}destroy(){this.stopListening(),this._viewCollections.map(t=>t.destroy()),this.template&&this.template._revertData&&this.template.revert(this.element)}}class Be extends kt(){constructor(t){super(),Object.assign(this,ll(cl(t))),this._isRendered=!1,this._revertData=null}render(){const t=this._renderNode({intoFragment:!0});return this._isRendered=!0,t}apply(t){return this._revertData={children:[],bindings:[],attributes:{}},this._renderNode({node:t,intoFragment:!1,isApplying:!0,revertData:this._revertData}),t}revert(t){if(!this._revertData)throw new _("ui-template-revert-not-applied",[this,t]);this._revertTemplateFromNode(t,this._revertData)}*getViews(){yield*function*t(e){if(e.children)for(const n of e.children)Mi(n)?yield n:is(n)&&(yield*t(n))}(this)}static bind(t,e){return{to:(n,i)=>new rw({eventNameOrFunction:n,attribute:n,observable:t,emitter:e,callback:i}),if:(n,i,r)=>new sl({observable:t,emitter:e,attribute:n,valueIfTrue:i,callback:r})}}static extend(t,e){if(t._isRendered)throw new _("template-extend-render",[this,t]);gl(t,ll(cl(e)))}_renderNode(t){let e;if(e=t.node?this.tag&&this.text:this.tag?this.text:!this.text,e)throw new _("ui-template-wrong-syntax",this);return this.text?this._renderText(t):this._renderElement(t)}_renderElement(t){let e=t.node;return e||(e=t.node=document.createElementNS(this.ns||"http://www.w3.org/1999/xhtml",this.tag)),this._renderAttributes(t),this._renderElementChildren(t),this._setUpListeners(t),e}_renderText(t){let e=t.node;return e?t.revertData.text=e.textContent:e=t.node=document.createTextNode(""),Ti(this.text)?this._bindToObservable({schema:this.text,updater:sw(e),data:t}):e.textContent=this.text.join(""),e}_renderAttributes(t){if(!this.attributes)return;const e=t.node,n=t.revertData;for(const i in this.attributes){const r=e.getAttribute(i),s=this.attributes[i];n&&(n.attributes[i]=r);const a=pl(s)?s[0].ns:null;if(Ti(s)){const c=pl(s)?s[0].value:s;n&&ml(i)&&c.unshift(r),this._bindToObservable({schema:c,updater:aw(e,i,a),data:t})}else if(i=="style"&&typeof s[0]!="string")this._renderStyleAttribute(s[0],t);else{n&&r&&ml(i)&&s.unshift(r);const c=s.map(l=>l&&l.value||l).reduce((l,d)=>l.concat(d),[]).reduce(hl,"");ao(c)||e.setAttributeNS(a,i,c)}}}_renderStyleAttribute(t,e){const n=e.node;for(const i in t){const r=t[i];Ti(r)?this._bindToObservable({schema:[r],updater:cw(n,i),data:e}):n.style[i]=r}}_renderElementChildren(t){const e=t.node,n=t.intoFragment?document.createDocumentFragment():e,i=t.isApplying;let r=0;for(const s of this.children)if(rs(s)){if(!i){s.setParent(e);for(const a of s)n.appendChild(a.element)}}else if(Mi(s))i||(s.isRendered||s.render(),n.appendChild(s.element));else if(pn(s))n.appendChild(s);else if(i){const a={children:[],bindings:[],attributes:{}};t.revertData.children.push(a),s._renderNode({intoFragment:!1,node:n.childNodes[r++],isApplying:!0,revertData:a})}else n.appendChild(s.render());t.intoFragment&&e.appendChild(n)}_setUpListeners(t){if(this.eventListeners)for(const e in this.eventListeners){const n=this.eventListeners[e].map(i=>{const[r,s]=e.split("@");return i.activateDomEventListener(r,s,t)});t.revertData&&t.revertData.bindings.push(n)}}_bindToObservable({schema:t,updater:e,data:n}){const i=n.revertData;al(t,e,n);const r=t.filter(s=>!ao(s)).filter(s=>s.observable).map(s=>s.activateAttributeListener(t,e,n));i&&i.bindings.push(r)}_revertTemplateFromNode(t,e){for(const i of e.bindings)for(const r of i)r();if(e.text)return void(t.textContent=e.text);const n=t;for(const i in e.attributes){const r=e.attributes[i];r===null?n.removeAttribute(i):n.setAttribute(i,r)}for(let i=0;ial(t,e,n);return this.emitter.listenTo(this.observable,`change:${this.attribute}`,i),()=>{this.emitter.stopListening(this.observable,`change:${this.attribute}`,i)}}}class rw extends Vo{constructor(t){super(t),this.eventNameOrFunction=t.eventNameOrFunction}activateDomEventListener(t,e,n){const i=(r,s)=>{e&&!s.target.matches(e)||(typeof this.eventNameOrFunction=="function"?this.eventNameOrFunction(s):this.observable.fire(this.eventNameOrFunction,s))};return this.emitter.listenTo(n.node,t,i),()=>{this.emitter.stopListening(n.node,t,i)}}}class sl extends Vo{constructor(t){super(t),this.valueIfTrue=t.valueIfTrue}getValue(t){return!ao(super.getValue(t))&&(this.valueIfTrue||!0)}}function Ti(o){return!!o&&(o.value&&(o=o.value),Array.isArray(o)?o.some(Ti):o instanceof Vo)}function al(o,t,{node:e}){const n=function(r,s){return r.map(a=>a instanceof Vo?a.getValue(s):a)}(o,e);let i;i=o.length==1&&o[0]instanceof sl?n[0]:n.reduce(hl,""),ao(i)?t.remove():t.set(i)}function sw(o){return{set(t){o.textContent=t},remove(){o.textContent=""}}}function aw(o,t,e){return{set(n){o.setAttributeNS(e,t,n)},remove(){o.removeAttributeNS(e,t)}}}function cw(o,t){return{set(e){o.style[t]=e},remove(){o.style[t]=null}}}function cl(o){return Kr(o,t=>{if(t&&(t instanceof Vo||is(t)||Mi(t)||rs(t)))return t})}function ll(o){if(typeof o=="string"?o=function(t){return{text:[t]}}(o):o.text&&function(t){t.text=Bt(t.text)}(o),o.on&&(o.eventListeners=function(t){for(const e in t)dl(t,e);return t}(o.on),delete o.on),!o.text){o.attributes&&function(e){for(const n in e)e[n].value&&(e[n].value=Bt(e[n].value)),dl(e,n)}(o.attributes);const t=[];if(o.children)if(rs(o.children))t.push(o.children);else for(const e of o.children)is(e)||Mi(e)||pn(e)?t.push(e):t.push(new Be(e));o.children=t}return o}function dl(o,t){o[t]=Bt(o[t])}function hl(o,t){return ao(t)?o:ao(o)?t:`${o} ${t}`}function ul(o,t){for(const e in t)o[e]?o[e].push(...t[e]):o[e]=t[e]}function gl(o,t){if(t.attributes&&(o.attributes||(o.attributes={}),ul(o.attributes,t.attributes)),t.eventListeners&&(o.eventListeners||(o.eventListeners={}),ul(o.eventListeners,t.eventListeners)),t.text&&o.text.push(...t.text),t.children&&t.children.length){if(o.children.length!=t.children.length)throw new _("ui-template-extend-children-mismatch",o);let e=0;for(const n of t.children)gl(o.children[e++],n)}}function ao(o){return!o&&o!==0}function Mi(o){return o instanceof tt}function is(o){return o instanceof Be}function rs(o){return o instanceof Ce}function pl(o){return bt(o[0])&&o[0].ns}function ml(o){return o=="class"||o=="style"}class lw extends Ce{constructor(t,e=[]){super(e),this.locale=t}get bodyCollectionContainer(){return this._bodyCollectionContainer}attachToDom(){this._bodyCollectionContainer=new Be({tag:"div",attributes:{class:["ck","ck-reset_all","ck-body","ck-rounded-corners"],dir:this.locale.uiLanguageDirection},children:this}).render();let t=document.querySelector(".ck-body-wrapper");t||(t=bi(document,"div",{class:"ck-body-wrapper"}),document.body.appendChild(t)),t.appendChild(this._bodyCollectionContainer)}detachFromDom(){super.destroy(),this._bodyCollectionContainer&&this._bodyCollectionContainer.remove();const t=document.querySelector(".ck-body-wrapper");t&&t.childElementCount==0&&t.remove()}}var fl=N(1768),dw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(fl.c,dw),fl.c.locals;const kl=class extends tt{constructor(){super();const o=this.bindTemplate;this.set("content",""),this.set("viewBox","0 0 20 20"),this.set("fillColor",""),this.set("isColorInherited",!0),this.set("isVisible",!0),this.setTemplate({tag:"svg",ns:"http://www.w3.org/2000/svg",attributes:{class:["ck","ck-icon",o.if("isVisible","ck-hidden",t=>!t),"ck-reset_all-excluded",o.if("isColorInherited","ck-icon_inherit-color")],viewBox:o.to("viewBox")}})}render(){super.render(),this._updateXMLContent(),this._colorFillPaths(),this.on("change:content",()=>{this._updateXMLContent(),this._colorFillPaths()}),this.on("change:fillColor",()=>{this._colorFillPaths()})}_updateXMLContent(){if(this.content){const o=new DOMParser().parseFromString(this.content.trim(),"image/svg+xml").querySelector("svg"),t=o.getAttribute("viewBox");t&&(this.viewBox=t);for(const{name:e,value:n}of Array.from(o.attributes))kl.presentationalAttributeNames.includes(e)&&this.element.setAttribute(e,n);for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);for(;o.childNodes.length>0;)this.element.appendChild(o.childNodes[0])}}_colorFillPaths(){this.fillColor&&this.element.querySelectorAll(".ck-icon__fill").forEach(o=>{o.style.fill=this.fillColor})}};let mn=kl;mn.presentationalAttributeNames=["alignment-baseline","baseline-shift","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-rendering","cursor","direction","display","dominant-baseline","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","image-rendering","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","opacity","overflow","paint-order","pointer-events","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-overflow","text-rendering","transform","unicode-bidi","vector-effect","visibility","white-space","word-spacing","writing-mode"];class hw extends tt{constructor(){super(),this.set({style:void 0,text:void 0,id:void 0});const t=this.bindTemplate;this.setTemplate({tag:"span",attributes:{class:["ck","ck-button__label"],style:t.to("style"),id:t.to("id")},children:[{text:t.to("text")}]})}}var bl=N(4320),uw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(bl.c,uw),bl.c.locals;class wt extends tt{constructor(t,e=new hw){super(t),this._focusDelayed=null;const n=this.bindTemplate,i=X();this.set("ariaLabel",void 0),this.set("ariaLabelledBy",`ck-editor__aria-label_${i}`),this.set("class",void 0),this.set("labelStyle",void 0),this.set("icon",void 0),this.set("isEnabled",!0),this.set("isOn",!1),this.set("isVisible",!0),this.set("isToggleable",!1),this.set("keystroke",void 0),this.set("label",void 0),this.set("role",void 0),this.set("tabindex",-1),this.set("tooltip",!1),this.set("tooltipPosition","s"),this.set("type","button"),this.set("withText",!1),this.set("withKeystroke",!1),this.children=this.createCollection(),this.labelView=this._setupLabelView(e),this.iconView=new mn,this.iconView.extendTemplate({attributes:{class:"ck-button__icon"}}),this.keystrokeView=this._createKeystrokeView(),this.bind("_tooltipString").to(this,"tooltip",this,"label",this,"keystroke",this._getTooltipString.bind(this));const r={tag:"button",attributes:{class:["ck","ck-button",n.to("class"),n.if("isEnabled","ck-disabled",s=>!s),n.if("isVisible","ck-hidden",s=>!s),n.to("isOn",s=>s?"ck-on":"ck-off"),n.if("withText","ck-button_with-text"),n.if("withKeystroke","ck-button_with-keystroke")],role:n.to("role"),type:n.to("type",s=>s||"button"),tabindex:n.to("tabindex"),"aria-label":n.to("ariaLabel"),"aria-labelledby":n.to("ariaLabelledBy"),"aria-disabled":n.if("isEnabled",!0,s=>!s),"aria-pressed":n.to("isOn",s=>!!this.isToggleable&&String(!!s)),"data-cke-tooltip-text":n.to("_tooltipString"),"data-cke-tooltip-position":n.to("tooltipPosition")},children:this.children,on:{click:n.to(s=>{this.isEnabled?this.fire("execute"):s.preventDefault()})}};f.isSafari&&(this._focusDelayed||(this._focusDelayed=ts(()=>this.focus(),0)),r.on.mousedown=n.to(()=>{this._focusDelayed()}),r.on.mouseup=n.to(()=>{this._focusDelayed.cancel()})),this.setTemplate(r)}render(){super.render(),this.icon&&(this.iconView.bind("content").to(this,"icon"),this.children.add(this.iconView)),this.children.add(this.labelView),this.withKeystroke&&this.keystroke&&this.children.add(this.keystrokeView)}focus(){this.element.focus()}destroy(){this._focusDelayed&&this._focusDelayed.cancel(),super.destroy()}_setupLabelView(t){return t.bind("text","style","id").to(this,"label","labelStyle","ariaLabelledBy"),t}_createKeystrokeView(){const t=new tt;return t.setTemplate({tag:"span",attributes:{class:["ck","ck-button__keystroke"]},children:[{text:this.bindTemplate.to("keystroke",e=>nl(e))}]}),t}_getTooltipString(t,e,n){return t?typeof t=="string"?t:(n&&(n=nl(n)),t instanceof Function?t(e,n):`${e}${n?` (${n})`:""}`):""}}var wl=N(16),gw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(wl.c,gw),wl.c.locals;class Bi extends wt{constructor(t){super(t),this.isToggleable=!0,this.toggleSwitchView=this._createToggleView(),this.extendTemplate({attributes:{class:"ck-switchbutton"}})}render(){super.render(),this.children.add(this.toggleSwitchView)}_createToggleView(){const t=new tt;return t.setTemplate({tag:"span",attributes:{class:["ck","ck-button__toggle"]},children:[{tag:"span",attributes:{class:["ck","ck-button__toggle__inner"]}}]}),t}}const ss='';var Al=N(6112),pw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Al.c,pw),Al.c.locals;class mw extends tt{constructor(t,e){super(t);const n=this.bindTemplate;this.set("isCollapsed",!1),this.set("label",""),this.buttonView=this._createButtonView(),this.children=this.createCollection(),this.set("_collapsibleAriaLabelUid",void 0),e&&this.children.addMany(e),this.setTemplate({tag:"div",attributes:{class:["ck","ck-collapsible",n.if("isCollapsed","ck-collapsible_collapsed")]},children:[this.buttonView,{tag:"div",attributes:{class:["ck","ck-collapsible__children"],role:"region",hidden:n.if("isCollapsed","hidden"),"aria-labelledby":n.to("_collapsibleAriaLabelUid")},children:this.children}]})}render(){super.render(),this._collapsibleAriaLabelUid=this.buttonView.labelView.element.id}focus(){this.buttonView.focus()}_createButtonView(){const t=new wt(this.locale),e=t.bindTemplate;return t.set({withText:!0,icon:ss}),t.extendTemplate({attributes:{"aria-expanded":e.to("isOn",n=>String(n))}}),t.bind("label").to(this),t.bind("isOn").to(this,"isCollapsed",n=>!n),t.on("execute",()=>{this.isCollapsed=!this.isCollapsed}),t}}var Cl=N(7512),fw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Cl.c,fw),Cl.c.locals,N(6644),N(4416);const as=function(){return Te.Date.now()};var kw=/\s/;const bw=function(o){for(var t=o.length;t--&&kw.test(o.charAt(t)););return t};var ww=/^\s+/;const Aw=function(o){return o&&o.slice(0,bw(o)+1).replace(ww,"")},Ni=function(o){return typeof o=="symbol"||we(o)&&gn(o)=="[object Symbol]"};var Cw=/^[-+]0x[0-9a-f]+$/i,_w=/^0b[01]+$/i,vw=/^0o[0-7]+$/i,yw=parseInt;const _l=function(o){if(typeof o=="number")return o;if(Ni(o))return NaN;if(bt(o)){var t=typeof o.valueOf=="function"?o.valueOf():o;o=bt(t)?t+"":t}if(typeof o!="string")return o===0?o:+o;o=Aw(o);var e=_w.test(o);return e||vw.test(o)?yw(o.slice(2),e?2:8):Cw.test(o)?NaN:+o};var xw=Math.max,Ew=Math.min;const Ho=function(o,t,e){var n,i,r,s,a,c,l=0,d=!1,h=!1,u=!0;if(typeof o!="function")throw new TypeError("Expected a function");function g(E){var M=n,z=i;return n=i=void 0,l=E,s=o.apply(z,M)}function p(E){var M=E-c;return c===void 0||M>=t||M<0||h&&E-l>=r}function k(){var E=as();if(p(E))return b(E);a=setTimeout(k,function(M){var z=t-(M-c);return h?Ew(z,r-(M-l)):z}(E))}function b(E){return a=void 0,u&&n?g(E):(n=i=void 0,s)}function A(){var E=as(),M=p(E);if(n=arguments,i=this,c=E,M){if(a===void 0)return function(z){return l=z,a=setTimeout(k,t),d?g(z):s}(c);if(h)return clearTimeout(a),a=setTimeout(k,t),g(c)}return a===void 0&&(a=setTimeout(k,t)),s}return t=_l(t)||0,bt(e)&&(d=!!e.leading,r=(h="maxWait"in e)?xw(_l(e.maxWait)||0,t):r,u="trailing"in e?!!e.trailing:u),A.cancel=function(){a!==void 0&&clearTimeout(a),l=0,n=c=i=a=void 0},A.flush=function(){return a===void 0?s:b(as())},A};var vl=N(512),Dw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(vl.c,Dw),vl.c.locals;class cs extends tt{constructor(t){super(t),this.set("text",void 0),this.set("for",void 0),this.id=`ck-editor__label_${X()}`;const e=this.bindTemplate;this.setTemplate({tag:"label",attributes:{class:["ck","ck-label"],id:this.id,for:e.to("for")},children:[{text:e.to("text")}]})}}var yl=N(4632),Iw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(yl.c,Iw),yl.c.locals;class Pi extends tt{constructor(t,e){super(t);const n=`ck-labeled-field-view-${X()}`,i=`ck-labeled-field-view-status-${X()}`;this.fieldView=e(this,n,i),this.set("label",void 0),this.set("isEnabled",!0),this.set("isEmpty",!0),this.set("isFocused",!1),this.set("errorText",null),this.set("infoText",null),this.set("class",void 0),this.set("placeholder",void 0),this.labelView=this._createLabelView(n),this.statusView=this._createStatusView(i),this.fieldWrapperChildren=this.createCollection([this.fieldView,this.labelView]),this.bind("_statusText").to(this,"errorText",this,"infoText",(s,a)=>s||a);const r=this.bindTemplate;this.setTemplate({tag:"div",attributes:{class:["ck","ck-labeled-field-view",r.to("class"),r.if("isEnabled","ck-disabled",s=>!s),r.if("isEmpty","ck-labeled-field-view_empty"),r.if("isFocused","ck-labeled-field-view_focused"),r.if("placeholder","ck-labeled-field-view_placeholder"),r.if("errorText","ck-error")]},children:[{tag:"div",attributes:{class:["ck","ck-labeled-field-view__input-wrapper"]},children:this.fieldWrapperChildren},this.statusView]})}_createLabelView(t){const e=new cs(this.locale);return e.for=t,e.bind("text").to(this,"label"),e}_createStatusView(t){const e=new tt(this.locale),n=this.bindTemplate;return e.setTemplate({tag:"div",attributes:{class:["ck","ck-labeled-field-view__status",n.if("errorText","ck-labeled-field-view__status_error"),n.if("_statusText","ck-hidden",i=>!i)],id:t,role:n.if("errorText","alert")},children:[{text:n.to("_statusText")}]}),e}focus(t){this.fieldView.focus(t)}}class Sw extends tt{constructor(t){super(t),this.set("value",void 0),this.set("id",void 0),this.set("placeholder",void 0),this.set("isReadOnly",!1),this.set("hasError",!1),this.set("ariaDescribedById",void 0),this.focusTracker=new Qt,this.bind("isFocused").to(this.focusTracker),this.set("isEmpty",!0);const e=this.bindTemplate;this.setTemplate({tag:"input",attributes:{class:["ck","ck-input",e.if("isFocused","ck-input_focused"),e.if("isEmpty","ck-input-text_empty"),e.if("hasError","ck-error")],id:e.to("id"),placeholder:e.to("placeholder"),readonly:e.to("isReadOnly"),"aria-invalid":e.if("hasError",!0),"aria-describedby":e.to("ariaDescribedById")},on:{input:e.to((...n)=>{this.fire("input",...n),this._updateIsEmpty()}),change:e.to(this._updateIsEmpty.bind(this))}})}render(){super.render(),this.focusTracker.add(this.element),this._setDomElementValue(this.value),this._updateIsEmpty(),this.on("change:value",(t,e,n)=>{this._setDomElementValue(n),this._updateIsEmpty()})}destroy(){super.destroy(),this.focusTracker.destroy()}select(){this.element.select()}focus(){this.element.focus()}reset(){this.value=this.element.value="",this._updateIsEmpty()}_updateIsEmpty(){this.isEmpty=!this.element.value}_setDomElementValue(t){this.element.value=t||t===0?t:""}}var xl=N(7848),Tw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(xl.c,Tw),xl.c.locals;class Mw extends Sw{constructor(t){super(t),this.set("inputMode","text");const e=this.bindTemplate;this.extendTemplate({attributes:{inputmode:e.to("inputMode")}})}}class Bw extends Mw{constructor(t){super(t),this.extendTemplate({attributes:{type:"text",class:["ck-input-text"]}})}}var El=N(6076),Nw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(El.c,Nw),El.c.locals;class Pw extends tt{constructor(t){super(t);const e=this.bindTemplate;this.set("isVisible",!1),this.set("position","se"),this.children=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-reset","ck-dropdown__panel",e.to("position",n=>`ck-dropdown__panel_${n}`),e.if("isVisible","ck-dropdown__panel-visible")],tabindex:"-1"},children:this.children,on:{selectstart:e.to(n=>{n.target.tagName.toLocaleLowerCase()!=="input"&&n.preventDefault()})}})}focus(){if(this.children.length){const t=this.children.first;typeof t.focus=="function"?t.focus():Q("ui-dropdown-panel-focus-child-missing-focus",{childView:this.children.first,dropdownPanel:this})}}focusLast(){if(this.children.length){const t=this.children.last;typeof t.focusLast=="function"?t.focusLast():t.focus()}}}var Dl=N(44),Lw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Dl.c,Lw),Dl.c.locals;const ls=class extends tt{constructor(o,t,e){super(o);const n=this.bindTemplate;this.buttonView=t,this.panelView=e,this.set("isOpen",!1),this.set("isEnabled",!0),this.set("class",void 0),this.set("id",void 0),this.set("panelPosition","auto"),this.panelView.bind("isVisible").to(this,"isOpen"),this.keystrokes=new ie,this.focusTracker=new Qt,this.setTemplate({tag:"div",attributes:{class:["ck","ck-dropdown",n.to("class"),n.if("isEnabled","ck-disabled",i=>!i)],id:n.to("id"),"aria-describedby":n.to("ariaDescribedById")},children:[t,e]}),t.extendTemplate({attributes:{class:["ck-dropdown__button"],"data-cke-tooltip-disabled":n.to("isOpen")}})}render(){super.render(),this.focusTracker.add(this.buttonView.element),this.focusTracker.add(this.panelView.element),this.listenTo(this.buttonView,"open",()=>{this.isOpen=!this.isOpen}),this.on("change:isOpen",(t,e,n)=>{if(n)if(this.panelPosition==="auto"){const i=ls._getOptimalPosition({element:this.panelView.element,target:this.buttonView.element,fitInViewport:!0,positions:this._panelPositions});this.panelView.position=i?i.name:this._panelPositions[0].name}else this.panelView.position=this.panelPosition}),this.keystrokes.listenTo(this.element);const o=(t,e)=>{this.isOpen&&(this.isOpen=!1,e())};this.keystrokes.set("arrowdown",(t,e)=>{this.buttonView.isEnabled&&!this.isOpen&&(this.isOpen=!0,e())}),this.keystrokes.set("arrowright",(t,e)=>{this.isOpen&&e()}),this.keystrokes.set("arrowleft",o),this.keystrokes.set("esc",o)}focus(){this.buttonView.focus()}get _panelPositions(){const{south:o,north:t,southEast:e,southWest:n,northEast:i,northWest:r,southMiddleEast:s,southMiddleWest:a,northMiddleEast:c,northMiddleWest:l}=ls.defaultPanelPositions;return this.locale.uiLanguageDirection!=="rtl"?[e,n,s,a,o,i,r,c,l,t]:[n,e,a,s,o,r,i,l,c,t]}};let ds=ls;ds.defaultPanelPositions={south:(o,t)=>({top:o.bottom,left:o.left-(t.width-o.width)/2,name:"s"}),southEast:o=>({top:o.bottom,left:o.left,name:"se"}),southWest:(o,t)=>({top:o.bottom,left:o.left-t.width+o.width,name:"sw"}),southMiddleEast:(o,t)=>({top:o.bottom,left:o.left-(t.width-o.width)/4,name:"sme"}),southMiddleWest:(o,t)=>({top:o.bottom,left:o.left-3*(t.width-o.width)/4,name:"smw"}),north:(o,t)=>({top:o.top-t.height,left:o.left-(t.width-o.width)/2,name:"n"}),northEast:(o,t)=>({top:o.top-t.height,left:o.left,name:"ne"}),northWest:(o,t)=>({top:o.top-t.height,left:o.left-t.width+o.width,name:"nw"}),northMiddleEast:(o,t)=>({top:o.top-t.height,left:o.left-(t.width-o.width)/4,name:"nme"}),northMiddleWest:(o,t)=>({top:o.top-t.height,left:o.left-3*(t.width-o.width)/4,name:"nmw"})},ds._getOptimalPosition=Zr;class Ow extends wt{constructor(t){super(t),this.arrowView=this._createArrowView(),this.extendTemplate({attributes:{"aria-haspopup":!0,"aria-expanded":this.bindTemplate.to("isOn",e=>String(e))}}),this.delegate("execute").to(this,"open")}render(){super.render(),this.children.add(this.arrowView)}_createArrowView(){const t=new mn;return t.content=ss,t.extendTemplate({attributes:{class:"ck-dropdown__arrow"}}),t}}class _e extends kt(){constructor(t){if(super(),this.focusables=t.focusables,this.focusTracker=t.focusTracker,this.keystrokeHandler=t.keystrokeHandler,this.actions=t.actions,t.actions&&t.keystrokeHandler)for(const e in t.actions){let n=t.actions[e];typeof n=="string"&&(n=[n]);for(const i of n)t.keystrokeHandler.set(i,(r,s)=>{this[e](),s()})}this.on("forwardCycle",()=>this.focusFirst(),{priority:"low"}),this.on("backwardCycle",()=>this.focusLast(),{priority:"low"})}get first(){return this.focusables.find(hs)||null}get last(){return this.focusables.filter(hs).slice(-1)[0]||null}get next(){return this._getDomFocusableItem(1)}get previous(){return this._getDomFocusableItem(-1)}get current(){let t=null;return this.focusTracker.focusedElement===null?null:(this.focusables.find((e,n)=>{const i=e.element===this.focusTracker.focusedElement;return i&&(t=n),i}),t)}focusFirst(){this._focus(this.first,1)}focusLast(){this._focus(this.last,-1)}focusNext(){const t=this.next;t&&this.focusables.getIndex(t)===this.current||t===this.first?this.fire("forwardCycle"):this._focus(t,1)}focusPrevious(){const t=this.previous;t&&this.focusables.getIndex(t)===this.current||t===this.last?this.fire("backwardCycle"):this._focus(t,-1)}_focus(t,e){t&&this.focusTracker.focusedElement!==t.element&&t.focus(e)}_getDomFocusableItem(t){const e=this.focusables.length;if(!e)return null;const n=this.current;if(n===null)return this[t===1?"first":"last"];let i=this.focusables.get(n),r=(n+e+t)%e;do{const s=this.focusables.get(r);if(hs(s)){i=s;break}r=(r+e+t)%e}while(r!==n);return i}}function hs(o){return Uo(o)&&Bn(o.element)}function Uo(o){return!(!("focus"in o)||typeof o.focus!="function")}class Il extends tt{constructor(t){super(t),this.setTemplate({tag:"span",attributes:{class:["ck","ck-toolbar__separator"]}})}}class zw extends tt{constructor(t){super(t),this.setTemplate({tag:"span",attributes:{class:["ck","ck-toolbar__line-break"]}})}}var Rw=Object.defineProperty,Sl=Object.getOwnPropertySymbols,jw=Object.prototype.hasOwnProperty,Fw=Object.prototype.propertyIsEnumerable,Tl=(o,t,e)=>t in o?Rw(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Ml=(o,t)=>{for(var e in t||(t={}))jw.call(t,e)&&Tl(o,e,t[e]);if(Sl)for(var e of Sl(t))Fw.call(t,e)&&Tl(o,e,t[e]);return o};function Bl(o){if(Array.isArray(o))return{items:o,removeItems:[]};const t={items:[],removeItems:[]};return o?Ml(Ml({},t),o):t}class R extends mt(){constructor(t){super(),this._disableStack=new Set,this.editor=t,this.set("isEnabled",!0)}forceDisabled(t){this._disableStack.add(t),this._disableStack.size==1&&(this.on("set:isEnabled",Nl,{priority:"highest"}),this.isEnabled=!1)}clearForceDisabled(t){this._disableStack.delete(t),this._disableStack.size==0&&(this.off("set:isEnabled",Nl),this.isEnabled=!0)}destroy(){this.stopListening()}static get isContextPlugin(){return!1}}function Nl(o){o.return=!1,o.stop()}class at extends mt(){constructor(t){super(),this.editor=t,this.set("value",void 0),this.set("isEnabled",!1),this._affectsData=!0,this._isEnabledBasedOnSelection=!0,this._disableStack=new Set,this.decorate("execute"),this.listenTo(this.editor.model.document,"change",()=>{this.refresh()}),this.listenTo(t,"change:isReadOnly",()=>{this.refresh()}),this.on("set:isEnabled",e=>{if(!this.affectsData)return;const n=t.model.document.selection,i=n.getFirstPosition().root.rootName!="$graveyard"&&t.model.canEditAt(n);(t.isReadOnly||this._isEnabledBasedOnSelection&&!i)&&(e.return=!1,e.stop())},{priority:"highest"}),this.on("execute",e=>{this.isEnabled||e.stop()},{priority:"high"})}get affectsData(){return this._affectsData}set affectsData(t){this._affectsData=t}refresh(){this.isEnabled=!0}forceDisabled(t){this._disableStack.add(t),this._disableStack.size==1&&(this.on("set:isEnabled",Pl,{priority:"highest"}),this.isEnabled=!1)}clearForceDisabled(t){this._disableStack.delete(t),this._disableStack.size==0&&(this.off("set:isEnabled",Pl),this.refresh())}execute(...t){}destroy(){this.stopListening()}}function Pl(o){o.return=!1,o.stop()}class Ll extends at{constructor(){super(...arguments),this._childCommandsDefinitions=[]}refresh(){}execute(...t){const e=this._getFirstEnabledCommand();return!!e&&e.execute(t)}registerChildCommand(t,e={}){Z(this._childCommandsDefinitions,{command:t,priority:e.priority||"normal"}),t.on("change:isEnabled",()=>this._checkEnabled()),this._checkEnabled()}_checkEnabled(){this.isEnabled=!!this._getFirstEnabledCommand()}_getFirstEnabledCommand(){const t=this._childCommandsDefinitions.find(({command:e})=>e.isEnabled);return t&&t.command}}class Ol extends kt(){constructor(t,e=[],n=[]){super(),this._plugins=new Map,this._context=t,this._availablePlugins=new Map;for(const i of e)i.pluginName&&this._availablePlugins.set(i.pluginName,i);this._contextPlugins=new Map;for(const[i,r]of n)this._contextPlugins.set(i,r),this._contextPlugins.set(r,i),i.pluginName&&this._availablePlugins.set(i.pluginName,i)}*[Symbol.iterator](){for(const t of this._plugins)typeof t[0]=="function"&&(yield t)}get(t){const e=this._plugins.get(t);if(!e){let n=t;throw typeof t=="function"&&(n=t.pluginName||t.name),new _("plugincollection-plugin-not-loaded",this._context,{plugin:n})}return e}has(t){return this._plugins.has(t)}init(t,e=[],n=[]){const i=this,r=this._context;(function p(k,b=new Set){k.forEach(A=>{c(A)&&(b.has(A)||(b.add(A),A.pluginName&&!i._availablePlugins.has(A.pluginName)&&i._availablePlugins.set(A.pluginName,A),A.requires&&p(A.requires,b)))})})(t),u(t);const s=[...function p(k,b=new Set){return k.map(A=>c(A)?A:i._availablePlugins.get(A)).reduce((A,E)=>b.has(E)?A:(b.add(E),E.requires&&(u(E.requires,E),p(E.requires,b).forEach(M=>A.add(M))),A.add(E)),new Set)}(t.filter(p=>!d(p,e)))];(function(p,k){for(const b of k){if(typeof b!="function")throw new _("plugincollection-replace-plugin-invalid-type",null,{pluginItem:b});const A=b.pluginName;if(!A)throw new _("plugincollection-replace-plugin-missing-name",null,{pluginItem:b});if(b.requires&&b.requires.length)throw new _("plugincollection-plugin-for-replacing-cannot-have-dependencies",null,{pluginName:A});const E=i._availablePlugins.get(A);if(!E)throw new _("plugincollection-plugin-for-replacing-not-exist",null,{pluginName:A});const M=p.indexOf(E);if(M===-1){if(i._contextPlugins.has(E))return;throw new _("plugincollection-plugin-for-replacing-not-loaded",null,{pluginName:A})}if(E.requires&&E.requires.length)throw new _("plugincollection-replaced-plugin-cannot-have-dependencies",null,{pluginName:A});p.splice(M,1,b),i._availablePlugins.set(A,b)}})(s,n);const a=s.map(p=>{let k=i._contextPlugins.get(p);return k=k||new p(r),i._add(p,k),k});return g(a,"init").then(()=>g(a,"afterInit")).then(()=>a);function c(p){return typeof p=="function"}function l(p){return c(p)&&!!p.isContextPlugin}function d(p,k){return k.some(b=>b===p||h(p)===b||h(b)===p)}function h(p){return c(p)?p.pluginName||p.name:p}function u(p,k=null){p.map(b=>c(b)?b:i._availablePlugins.get(b)||b).forEach(b=>{(function(A,E){if(!c(A))throw E?new _("plugincollection-soft-required",r,{missingPlugin:A,requiredBy:h(E)}):new _("plugincollection-plugin-not-found",r,{plugin:A})})(b,k),function(A,E){if(l(E)&&!l(A))throw new _("plugincollection-context-required",r,{plugin:h(A),requiredBy:h(E)})}(b,k),function(A,E){if(E&&d(A,e))throw new _("plugincollection-required",r,{plugin:h(A),requiredBy:h(E)})}(b,k)})}function g(p,k){return p.reduce((b,A)=>A[k]?i._contextPlugins.has(A)?b:b.then(A[k].bind(A)):b,Promise.resolve())}}destroy(){const t=[];for(const[,e]of this)typeof e.destroy!="function"||this._contextPlugins.has(e)||t.push(e.destroy());return Promise.all(t)}_add(t,e){this._plugins.set(t,e);const n=t.pluginName;if(n){if(this._plugins.has(n))throw new _("plugincollection-plugin-name-conflict",null,{pluginName:n,plugin1:this._plugins.get(n).constructor,plugin2:t});this._plugins.set(n,e)}}}class zl{constructor(t){this._contextOwner=null,this.config=new Oc(t,this.constructor.defaultConfig);const e=this.constructor.builtinPlugins;this.config.define("plugins",e),this.plugins=new Ol(this,e);const n=this.config.get("language")||{};this.locale=new ew({uiLanguage:typeof n=="string"?n:n.ui,contentLanguage:this.config.get("language.content")}),this.t=this.locale.t,this.editors=new Me}initPlugins(){const t=this.config.get("plugins")||[],e=this.config.get("substitutePlugins")||[];for(const n of t.concat(e)){if(typeof n!="function")throw new _("context-initplugins-constructor-only",null,{Plugin:n});if(n.isContextPlugin!==!0)throw new _("context-initplugins-invalid-plugin",null,{Plugin:n})}return this.plugins.init(t,[],e)}destroy(){return Promise.all(Array.from(this.editors,t=>t.destroy())).then(()=>this.plugins.destroy())}_addEditor(t,e){if(this._contextOwner)throw new _("context-addeditor-private-context");this.editors.add(t),e&&(this._contextOwner=t)}_removeEditor(t){return this.editors.has(t)&&this.editors.remove(t),this._contextOwner===t?this.destroy():Promise.resolve()}_getEditorConfig(){const t={};for(const e of this.config.names())["plugins","removePlugins","extraPlugins"].includes(e)||(t[e]=this.config.get(e));return t}static create(t){return new Promise(e=>{const n=new this(t);e(n.initPlugins().then(()=>n))})}}class Li extends mt(){constructor(t){super(),this.context=t}destroy(){this.stopListening()}static get isContextPlugin(){return!0}}class Vw extends ie{constructor(t){super(),this.editor=t}set(t,e,n={}){if(typeof e=="string"){const i=e;e=(r,s)=>{this.editor.execute(i),s()}}super.set(t,e,n)}}var Rl=N(6908),Hw={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Rl.c,Hw),Rl.c.locals;const Oi=new WeakMap;let jl=!1;function Fl({view:o,element:t,text:e,isDirectHost:n=!0,keepOnFocus:i=!1}){const r=o.document;function s(a){Oi.get(r).set(t,{text:a,isDirectHost:n,keepOnFocus:i,hostElement:n?t:null}),o.change(c=>us(r,c))}Oi.has(r)||(Oi.set(r,new Map),r.registerPostFixer(a=>us(r,a)),r.on("change:isComposing",()=>{o.change(a=>us(r,a))},{priority:"high"})),t.is("editableElement")&&t.on("change:placeholder",(a,c,l)=>{s(l)}),t.placeholder?s(t.placeholder):e&&s(e),e&&function(){jl||Q("enableplaceholder-deprecated-text-option"),jl=!0}()}function Uw(o,t){return!t.hasClass("ck-placeholder")&&(o.addClass("ck-placeholder",t),!0)}function qw(o,t){return!!t.hasClass("ck-placeholder")&&(o.removeClass("ck-placeholder",t),!0)}function Gw(o,t){if(!o.isAttached()||Array.from(o.getChildren()).some(i=>!i.is("uiElement")))return!1;const e=o.document,n=e.selection.anchor;return(!e.isComposing||!n||n.parent!==o)&&(!!t||!e.isFocused||!!n&&n.parent!==o)}function us(o,t){const e=Oi.get(o),n=[];let i=!1;for(const[r,s]of e)s.isDirectHost&&(n.push(r),Vl(t,r,s)&&(i=!0));for(const[r,s]of e){if(s.isDirectHost)continue;const a=Ww(r);a&&(n.includes(a)||(s.hostElement=a,Vl(t,r,s)&&(i=!0)))}return i}function Vl(o,t,e){const{text:n,isDirectHost:i,hostElement:r}=e;let s=!1;return r.getAttribute("data-placeholder")!==n&&(o.setAttribute("data-placeholder",n,r),s=!0),(i||t.childCount==1)&&Gw(r,e.keepOnFocus)?Uw(o,r)&&(s=!0):qw(o,r)&&(s=!0),s}function Ww(o){if(o.childCount){const t=o.getChild(0);if(t.is("element")&&!t.is("uiElement")&&!t.is("attributeElement"))return t}return null}class Nn{is(){throw new Error("is() method is abstract")}}const Hl=function(o){return $r(o,4)};class Pn extends kt(Nn){constructor(t){super(),this.document=t,this.parent=null}get index(){let t;if(!this.parent)return null;if((t=this.parent.getChildIndex(this))==-1)throw new _("view-node-not-found-in-parent",this);return t}get nextSibling(){const t=this.index;return t!==null&&this.parent.getChild(t+1)||null}get previousSibling(){const t=this.index;return t!==null&&this.parent.getChild(t-1)||null}get root(){let t=this;for(;t.parent;)t=t.parent;return t}isAttached(){return this.root.is("rootElement")}getPath(){const t=[];let e=this;for(;e.parent;)t.unshift(e.index),e=e.parent;return t}getAncestors(t={}){const e=[];let n=t.includeSelf?this:this.parent;for(;n;)e[t.parentFirst?"push":"unshift"](n),n=n.parent;return e}getCommonAncestor(t,e={}){const n=this.getAncestors(e),i=t.getAncestors(e);let r=0;for(;n[r]==i[r]&&n[r];)r++;return r===0?null:n[r-1]}isBefore(t){if(this==t||this.root!==t.root)return!1;const e=this.getPath(),n=t.getPath(),i=St(e,n);switch(i){case"prefix":return!0;case"extension":return!1;default:return e[i]t.data.length)throw new _("view-textproxy-wrong-offsetintext",this);if(n<0||e+n>t.data.length)throw new _("view-textproxy-wrong-length",this);this.data=t.data.substring(e,e+n),this.offsetInText=e}get offsetSize(){return this.data.length}get isPartial(){return this.data.length!==this.textNode.data.length}get parent(){return this.textNode.parent}get root(){return this.textNode.root}get document(){return this.textNode.document}getAncestors(t={}){const e=[];let n=t.includeSelf?this.textNode:this.parent;for(;n!==null;)e[t.parentFirst?"push":"unshift"](n),n=n.parent;return e}}$e.prototype.is=function(o){return o==="$textProxy"||o==="view:$textProxy"||o==="textProxy"||o==="view:textProxy"};class Ne{constructor(...t){this._patterns=[],this.add(...t)}add(...t){for(let e of t)(typeof e=="string"||e instanceof RegExp)&&(e={name:e}),this._patterns.push(e)}match(...t){for(const e of t)for(const n of this._patterns){const i=Ul(e,n);if(i)return{element:e,pattern:n,match:i}}return null}matchAll(...t){const e=[];for(const n of t)for(const i of this._patterns){const r=Ul(n,i);r&&e.push({element:n,pattern:i,match:r})}return e.length>0?e:null}getElementName(){if(this._patterns.length!==1)return null;const t=this._patterns[0],e=t.name;return typeof t=="function"||!e||e instanceof RegExp?null:e}}function Ul(o,t){if(typeof t=="function")return t(o);const e={};return t.name&&(e.name=function(n,i){return n instanceof RegExp?!!i.match(n):n===i}(t.name,o.name),!e.name)||t.attributes&&(e.attributes=function(n,i){const r=new Set(i.getAttributeKeys());return de(n)?(n.style!==void 0&&Q("matcher-pattern-deprecated-attributes-style-key",n),n.class!==void 0&&Q("matcher-pattern-deprecated-attributes-class-key",n)):(r.delete("style"),r.delete("class")),gs(n,r,s=>i.getAttribute(s))}(t.attributes,o),!e.attributes)||t.classes&&(e.classes=function(n,i){return gs(n,i.getClassNames(),()=>{})}(t.classes,o),!e.classes)||t.styles&&(e.styles=function(n,i){return gs(n,i.getStyleNames(!0),r=>i.getStyle(r))}(t.styles,o),!e.styles)?null:e}function gs(o,t,e){const n=function(s){return Array.isArray(s)?s.map(a=>de(a)?(a.key!==void 0&&a.value!==void 0||Q("matcher-pattern-missing-key-or-value",a),[a.key,a.value]):[a,!0]):de(s)?Object.entries(s):[[s,!0]]}(o),i=Array.from(t),r=[];if(n.forEach(([s,a])=>{i.forEach(c=>{(function(l,d){return l===!0||l===d||l instanceof RegExp&&d.match(l)})(s,c)&&function(l,d,h){if(l===!0)return!0;const u=h(d);return l===u||l instanceof RegExp&&!!String(u).match(l)}(a,c,e)&&r.push(c)})}),n.length&&!(r.lengthi?0:i+t),(e=e>i?i:e)<0&&(e+=i),i=t>e?0:e-t>>>0,t>>>=0;for(var r=Array(i);++n0){if(++t>=800)return arguments[0]}else t=0;return o.apply(void 0,arguments)}}(f0),w0=function(o,t){return b0(p0(o,t,Ln),o+"")},A0=function(o,t,e){if(!bt(e))return!1;var n=typeof t;return!!(n=="number"?yi(e)&&Pr(t,e.length):n=="string"&&t in e)&&Mo(e[t],o)},Yl=function(o){return w0(function(t,e){var n=-1,i=e.length,r=i>1?e[i-1]:void 0,s=i>2?e[2]:void 0;for(r=o.length>3&&typeof r=="function"?(i--,r):void 0,s&&A0(e[0],e[1],s)&&(r=i<3?void 0:r,i=1),t=Object(t);++nn===t);return Array.isArray(e)}set(t,e){if(bt(t))for(const[n,i]of Object.entries(t))this._styleProcessor.toNormalizedForm(n,i,this._styles);else this._styleProcessor.toNormalizedForm(t,e,this._styles)}remove(t){const e=Cs(t);a0(this._styles,e),delete this._styles[t],this._cleanEmptyObjectsOnPath(e)}getNormalized(t){return this._styleProcessor.getNormalized(t,this._styles)}toString(){return this.isEmpty?"":this.getStylesEntries().map(t=>t.join(":")).sort().join(";")+";"}getAsString(t){if(this.isEmpty)return;if(this._styles[t]&&!bt(this._styles[t]))return this._styles[t];const e=this._styleProcessor.getReducedForm(t,this._styles).find(([n])=>n===t);return Array.isArray(e)?e[1]:void 0}getStyleNames(t=!1){return this.isEmpty?[]:t?this._styleProcessor.getStyleNames(this._styles):this.getStylesEntries().map(([e])=>e)}clear(){this._styles={}}getStylesEntries(){const t=[],e=Object.keys(this._styles);for(const n of e)t.push(...this._styleProcessor.getReducedForm(n,this._styles));return t}_cleanEmptyObjectsOnPath(t){const e=t.split(".");if(!(e.length>1))return;const n=e.splice(0,e.length-1).join("."),i=zi(this._styles,n);i&&!Object.keys(i).length&&this.remove(n)}}class v0{constructor(){this._normalizers=new Map,this._extractors=new Map,this._reducers=new Map,this._consumables=new Map}toNormalizedForm(t,e,n){if(bt(e))_s(n,Cs(t),e);else if(this._normalizers.has(t)){const i=this._normalizers.get(t),{path:r,value:s}=i(e);_s(n,r,s)}else _s(n,t,e)}getNormalized(t,e){if(!t)return Ql({},e);if(e[t]!==void 0)return e[t];if(this._extractors.has(t)){const n=this._extractors.get(t);if(typeof n=="string")return zi(e,n);const i=n(t,e);if(i)return i}return zi(e,Cs(t))}getReducedForm(t,e){const n=this.getNormalized(t,e);return n===void 0?[]:this._reducers.has(t)?this._reducers.get(t)(n):[[t,n]]}getStyleNames(t){const e=Array.from(this._consumables.keys()).filter(i=>{const r=this.getNormalized(i,t);return r&&typeof r=="object"?Object.keys(r).length:r}),n=new Set([...e,...Object.keys(t)]);return Array.from(n)}getRelatedStyles(t){return this._consumables.get(t)||[]}setNormalizer(t,e){this._normalizers.set(t,e)}setExtractor(t,e){this._extractors.set(t,e)}setReducer(t,e){this._reducers.set(t,e)}setStyleRelation(t,e){this._mapStyleNames(t,e);for(const n of e)this._mapStyleNames(n,[t])}_mapStyleNames(t,e){this._consumables.has(t)||this._consumables.set(t,[]),this._consumables.get(t).push(...e)}}function Cs(o){return o.replace("-",".")}function _s(o,t,e){let n=e;bt(e)&&(n=Ql({},zi(o,t),e)),_0(o,t,n)}class he extends Pn{constructor(t,e,n,i){if(super(t),this._unsafeAttributesToRender=[],this._customProperties=new Map,this.name=e,this._attrs=function(r){const s=We(r);for(const[a,c]of s)c===null?s.delete(a):typeof c!="string"&&s.set(a,String(c));return s}(n),this._children=[],i&&this._insertChild(0,i),this._classes=new Set,this._attrs.has("class")){const r=this._attrs.get("class");Zl(this._classes,r),this._attrs.delete("class")}this._styles=new As(this.document.stylesProcessor),this._attrs.has("style")&&(this._styles.setTo(this._attrs.get("style")),this._attrs.delete("style"))}get childCount(){return this._children.length}get isEmpty(){return this._children.length===0}getChild(t){return this._children[t]}getChildIndex(t){return this._children.indexOf(t)}getChildren(){return this._children[Symbol.iterator]()}*getAttributeKeys(){this._classes.size>0&&(yield"class"),this._styles.isEmpty||(yield"style"),yield*this._attrs.keys()}*getAttributes(){yield*this._attrs.entries(),this._classes.size>0&&(yield["class",this.getAttribute("class")]),this._styles.isEmpty||(yield["style",this.getAttribute("style")])}getAttribute(t){if(t=="class")return this._classes.size>0?[...this._classes].join(" "):void 0;if(t=="style"){const e=this._styles.toString();return e==""?void 0:e}return this._attrs.get(t)}hasAttribute(t){return t=="class"?this._classes.size>0:t=="style"?!this._styles.isEmpty:this._attrs.has(t)}isSimilar(t){if(!(t instanceof he))return!1;if(this===t)return!0;if(this.name!=t.name||this._attrs.size!==t._attrs.size||this._classes.size!==t._classes.size||this._styles.size!==t._styles.size)return!1;for(const[e,n]of this._attrs)if(!t._attrs.has(e)||t._attrs.get(e)!==n)return!1;for(const e of this._classes)if(!t._classes.has(e))return!1;for(const e of this._styles.getStyleNames())if(!t._styles.has(e)||t._styles.getAsString(e)!==this._styles.getAsString(e))return!1;return!0}hasClass(...t){for(const e of t)if(!this._classes.has(e))return!1;return!0}getClassNames(){return this._classes.keys()}getStyle(t){return this._styles.getAsString(t)}getNormalizedStyle(t){return this._styles.getNormalized(t)}getStyleNames(t){return this._styles.getStyleNames(t)}hasStyle(...t){for(const e of t)if(!this._styles.has(e))return!1;return!0}findAncestor(...t){const e=new Ne(...t);let n=this.parent;for(;n&&!n.is("documentFragment");){if(e.match(n))return n;n=n.parent}return null}getCustomProperty(t){return this._customProperties.get(t)}*getCustomProperties(){yield*this._customProperties.entries()}getIdentity(){const t=Array.from(this._classes).sort().join(","),e=this._styles.toString(),n=Array.from(this._attrs).map(i=>`${i[0]}="${i[1]}"`).sort().join(" ");return this.name+(t==""?"":` class="${t}"`)+(e?` style="${e}"`:"")+(n==""?"":` ${n}`)}shouldRenderUnsafeAttribute(t){return this._unsafeAttributesToRender.includes(t)}_clone(t=!1){const e=[];if(t)for(const i of this.getChildren())e.push(i._clone(t));const n=new this.constructor(this.document,this.name,this._attrs,e);return n._classes=new Set(this._classes),n._styles.set(this._styles.getNormalized()),n._customProperties=new Map(this._customProperties),n.getFillerOffset=this.getFillerOffset,n._unsafeAttributesToRender=this._unsafeAttributesToRender,n}_appendChild(t){return this._insertChild(this.childCount,t)}_insertChild(t,e){this._fireChange("children",this);let n=0;const i=function(r,s){return typeof s=="string"?[new vt(r,s)]:(Gt(s)||(s=[s]),Array.from(s).map(a=>typeof a=="string"?new vt(r,a):a instanceof $e?new vt(r,a.data):a))}(this.document,e);for(const r of i)r.parent!==null&&r._remove(),r.parent=this,r.document=this.document,this._children.splice(t,0,r),t++,n++;return n}_removeChildren(t,e=1){this._fireChange("children",this);for(let n=t;n0&&(this._classes.clear(),!0):t=="style"?!this._styles.isEmpty&&(this._styles.clear(),!0):this._attrs.delete(t)}_addClass(t){this._fireChange("attributes",this);for(const e of Bt(t))this._classes.add(e)}_removeClass(t){this._fireChange("attributes",this);for(const e of Bt(t))this._classes.delete(e)}_setStyle(t,e){this._fireChange("attributes",this),typeof t!="string"?this._styles.set(t):this._styles.set(t,e)}_removeStyle(t){this._fireChange("attributes",this);for(const e of Bt(t))this._styles.remove(e)}_setCustomProperty(t,e){this._customProperties.set(t,e)}_removeCustomProperty(t){return this._customProperties.delete(t)}}function Zl(o,t){const e=t.split(/\s+/);o.clear(),e.forEach(n=>o.add(n))}he.prototype.is=function(o,t){return t?t===this.name&&(o==="element"||o==="view:element"):o==="element"||o==="view:element"||o==="node"||o==="view:node"};class qo extends he{constructor(t,e,n,i){super(t,e,n,i),this.getFillerOffset=y0}}function y0(){const o=[...this.getChildren()],t=o[this.childCount-1];if(t&&t.is("element","br"))return this.childCount;for(const e of o)if(!e.is("uiElement"))return null;return this.childCount}qo.prototype.is=function(o,t){return t?t===this.name&&(o==="containerElement"||o==="view:containerElement"||o==="element"||o==="view:element"):o==="containerElement"||o==="view:containerElement"||o==="element"||o==="view:element"||o==="node"||o==="view:node"};class Ri extends mt(qo){constructor(t,e,n,i){super(t,e,n,i),this.set("isReadOnly",!1),this.set("isFocused",!1),this.set("placeholder",void 0),this.bind("isReadOnly").to(t),this.bind("isFocused").to(t,"isFocused",r=>r&&t.selection.editableElement==this),this.listenTo(t.selection,"change",()=>{this.isFocused=t.isFocused&&t.selection.editableElement==this})}destroy(){this.stopListening()}}Ri.prototype.is=function(o,t){return t?t===this.name&&(o==="editableElement"||o==="view:editableElement"||o==="containerElement"||o==="view:containerElement"||o==="element"||o==="view:element"):o==="editableElement"||o==="view:editableElement"||o==="containerElement"||o==="view:containerElement"||o==="element"||o==="view:element"||o==="node"||o==="view:node"};const Jl=Symbol("rootName");class Xl extends Ri{constructor(t,e){super(t,e),this.rootName="main"}get rootName(){return this.getCustomProperty(Jl)}set rootName(t){this._setCustomProperty(Jl,t)}set _name(t){this.name=t}}Xl.prototype.is=function(o,t){return t?t===this.name&&(o==="rootElement"||o==="view:rootElement"||o==="editableElement"||o==="view:editableElement"||o==="containerElement"||o==="view:containerElement"||o==="element"||o==="view:element"):o==="rootElement"||o==="view:rootElement"||o==="editableElement"||o==="view:editableElement"||o==="containerElement"||o==="view:containerElement"||o==="element"||o==="view:element"||o==="node"||o==="view:node"};class On{constructor(t={}){if(!t.boundaries&&!t.startPosition)throw new _("view-tree-walker-no-start-position",null);if(t.direction&&t.direction!="forward"&&t.direction!="backward")throw new _("view-tree-walker-unknown-direction",t.startPosition,{direction:t.direction});this.boundaries=t.boundaries||null,t.startPosition?this._position=V._createAt(t.startPosition):this._position=V._createAt(t.boundaries[t.direction=="backward"?"end":"start"]),this.direction=t.direction||"forward",this.singleCharacters=!!t.singleCharacters,this.shallow=!!t.shallow,this.ignoreElementEnd=!!t.ignoreElementEnd,this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null,this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null}[Symbol.iterator](){return this}get position(){return this._position}skip(t){let e,n;do n=this.position,e=this.next();while(!e.done&&t(e.value));e.done||(this._position=n)}next(){return this.direction=="forward"?this._next():this._previous()}_next(){let t=this.position.clone();const e=this.position,n=t.parent;if(n.parent===null&&t.offset===n.childCount)return{done:!0,value:void 0};if(n===this._boundaryEndParent&&t.offset==this.boundaries.end.offset)return{done:!0,value:void 0};let i;if(n instanceof vt){if(t.isAtEnd)return this._position=V._createAfter(n),this._next();i=n.data[t.offset]}else i=n.getChild(t.offset);if(i instanceof he){if(this.shallow){if(this.boundaries&&this.boundaries.end.isBefore(t))return{done:!0,value:void 0};t.offset++}else t=new V(i,0);return this._position=t,this._formatReturnValue("elementStart",i,e,t,1)}if(i instanceof vt){if(this.singleCharacters)return t=new V(i,0),this._position=t,this._next();let r,s=i.data.length;return i==this._boundaryEndParent?(s=this.boundaries.end.offset,r=new $e(i,0,s),t=V._createAfter(r)):(r=new $e(i,0,i.data.length),t.offset++),this._position=t,this._formatReturnValue("text",r,e,t,s)}if(typeof i=="string"){let r;this.singleCharacters?r=1:r=(n===this._boundaryEndParent?this.boundaries.end.offset:n.data.length)-t.offset;const s=new $e(n,t.offset,r);return t.offset+=r,this._position=t,this._formatReturnValue("text",s,e,t,r)}return t=V._createAfter(n),this._position=t,this.ignoreElementEnd?this._next():this._formatReturnValue("elementEnd",n,e,t)}_previous(){let t=this.position.clone();const e=this.position,n=t.parent;if(n.parent===null&&t.offset===0)return{done:!0,value:void 0};if(n==this._boundaryStartParent&&t.offset==this.boundaries.start.offset)return{done:!0,value:void 0};let i;if(n instanceof vt){if(t.isAtStart)return this._position=V._createBefore(n),this._previous();i=n.data[t.offset-1]}else i=n.getChild(t.offset-1);if(i instanceof he)return this.shallow?(t.offset--,this._position=t,this._formatReturnValue("elementStart",i,e,t,1)):(t=new V(i,i.childCount),this._position=t,this.ignoreElementEnd?this._previous():this._formatReturnValue("elementEnd",i,e,t));if(i instanceof vt){if(this.singleCharacters)return t=new V(i,i.data.length),this._position=t,this._previous();let r,s=i.data.length;if(i==this._boundaryStartParent){const a=this.boundaries.start.offset;r=new $e(i,a,i.data.length-a),s=r.data.length,t=V._createBefore(r)}else r=new $e(i,0,i.data.length),t.offset--;return this._position=t,this._formatReturnValue("text",r,e,t,s)}if(typeof i=="string"){let r;if(this.singleCharacters)r=1;else{const a=n===this._boundaryStartParent?this.boundaries.start.offset:0;r=t.offset-a}t.offset-=r;const s=new $e(n,t.offset,r);return this._position=t,this._formatReturnValue("text",s,e,t,r)}return t=V._createBefore(n),this._position=t,this._formatReturnValue("elementStart",n,e,t,1)}_formatReturnValue(t,e,n,i,r){return e instanceof $e&&(e.offsetInText+e.data.length==e.textNode.data.length&&(this.direction!="forward"||this.boundaries&&this.boundaries.end.isEqual(this.position)?n=V._createAfter(e.textNode):(i=V._createAfter(e.textNode),this._position=i)),e.offsetInText===0&&(this.direction!="backward"||this.boundaries&&this.boundaries.start.isEqual(this.position)?n=V._createBefore(e.textNode):(i=V._createBefore(e.textNode),this._position=i))),{done:!1,value:{type:t,item:e,previousPosition:n,nextPosition:i,length:r}}}}class V extends Nn{constructor(t,e){super(),this.parent=t,this.offset=e}get nodeAfter(){return this.parent.is("$text")?null:this.parent.getChild(this.offset)||null}get nodeBefore(){return this.parent.is("$text")?null:this.parent.getChild(this.offset-1)||null}get isAtStart(){return this.offset===0}get isAtEnd(){const t=this.parent.is("$text")?this.parent.data.length:this.parent.childCount;return this.offset===t}get root(){return this.parent.root}get editableElement(){let t=this.parent;for(;!(t instanceof Ri);){if(!t.parent)return null;t=t.parent}return t}getShiftedBy(t){const e=V._createAt(this),n=e.offset+t;return e.offset=n<0?0:n,e}getLastMatchingPosition(t,e={}){e.startPosition=this;const n=new On(e);return n.skip(t),n.position}getAncestors(){return this.parent.is("documentFragment")?[this.parent]:this.parent.getAncestors({includeSelf:!0})}getCommonAncestor(t){const e=this.getAncestors(),n=t.getAncestors();let i=0;for(;e[i]==n[i]&&e[i];)i++;return i===0?null:e[i-1]}isEqual(t){return this.parent==t.parent&&this.offset==t.offset}isBefore(t){return this.compareWith(t)=="before"}isAfter(t){return this.compareWith(t)=="after"}compareWith(t){if(this.root!==t.root)return"different";if(this.isEqual(t))return"same";const e=this.parent.is("node")?this.parent.getPath():[],n=t.parent.is("node")?t.parent.getPath():[];e.push(this.offset),n.push(t.offset);const i=St(e,n);switch(i){case"prefix":return"before";case"extension":return"after";default:return e[i]0?new this(n,i):new this(i,n)}static _createIn(t){return this._createFromParentsAndOffsets(t,0,t,t.childCount)}static _createOn(t){const e=t.is("$textProxy")?t.offsetSize:1;return this._createFromPositionAndShift(V._createBefore(t),e)}}function ji(o){return!(!o.item.is("attributeElement")&&!o.item.is("uiElement"))}nt.prototype.is=function(o){return o==="range"||o==="view:range"};class Pe extends kt(Nn){constructor(...t){super(),this._ranges=[],this._lastRangeBackward=!1,this._isFake=!1,this._fakeSelectionLabel="",t.length&&this.setTo(...t)}get isFake(){return this._isFake}get fakeSelectionLabel(){return this._fakeSelectionLabel}get anchor(){if(!this._ranges.length)return null;const t=this._ranges[this._ranges.length-1];return(this._lastRangeBackward?t.end:t.start).clone()}get focus(){if(!this._ranges.length)return null;const t=this._ranges[this._ranges.length-1];return(this._lastRangeBackward?t.start:t.end).clone()}get isCollapsed(){return this.rangeCount===1&&this._ranges[0].isCollapsed}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}get editableElement(){return this.anchor?this.anchor.editableElement:null}*getRanges(){for(const t of this._ranges)yield t.clone()}getFirstRange(){let t=null;for(const e of this._ranges)t&&!e.start.isBefore(t.start)||(t=e);return t?t.clone():null}getLastRange(){let t=null;for(const e of this._ranges)t&&!e.end.isAfter(t.end)||(t=e);return t?t.clone():null}getFirstPosition(){const t=this.getFirstRange();return t?t.start.clone():null}getLastPosition(){const t=this.getLastRange();return t?t.end.clone():null}isEqual(t){if(this.isFake!=t.isFake||this.isFake&&this.fakeSelectionLabel!=t.fakeSelectionLabel||this.rangeCount!=t.rangeCount)return!1;if(this.rangeCount===0)return!0;if(!this.anchor.isEqual(t.anchor)||!this.focus.isEqual(t.focus))return!1;for(const e of this._ranges){let n=!1;for(const i of t._ranges)if(e.isEqual(i)){n=!0;break}if(!n)return!1}return!0}isSimilar(t){if(this.isBackward!=t.isBackward)return!1;const e=Ft(this.getRanges());if(e!=Ft(t.getRanges()))return!1;if(e==0)return!0;for(let n of this.getRanges()){n=n.getTrimmed();let i=!1;for(let r of t.getRanges())if(r=r.getTrimmed(),n.start.isEqual(r.start)&&n.end.isEqual(r.end)){i=!0;break}if(!i)return!1}return!0}getSelectedElement(){return this.rangeCount!==1?null:this.getFirstRange().getContainedElement()}setTo(...t){let[e,n,i]=t;if(typeof n=="object"&&(i=n,n=void 0),e===null)this._setRanges([]),this._setFakeOptions(i);else if(e instanceof Pe||e instanceof vs)this._setRanges(e.getRanges(),e.isBackward),this._setFakeOptions({fake:e.isFake,label:e.fakeSelectionLabel});else if(e instanceof nt)this._setRanges([e],i&&i.backward),this._setFakeOptions(i);else if(e instanceof V)this._setRanges([new nt(e)]),this._setFakeOptions(i);else if(e instanceof Pn){const r=!!i&&!!i.backward;let s;if(n===void 0)throw new _("view-selection-setto-required-second-parameter",this);s=n=="in"?nt._createIn(e):n=="on"?nt._createOn(e):new nt(V._createAt(e,n)),this._setRanges([s],r),this._setFakeOptions(i)}else{if(!Gt(e))throw new _("view-selection-setto-not-selectable",this);this._setRanges(e,i&&i.backward),this._setFakeOptions(i)}this.fire("change")}setFocus(t,e){if(this.anchor===null)throw new _("view-selection-setfocus-no-ranges",this);const n=V._createAt(t,e);if(n.compareWith(this.focus)=="same")return;const i=this.anchor;this._ranges.pop(),n.compareWith(i)=="before"?this._addRange(new nt(n,i),!0):this._addRange(new nt(i,n)),this.fire("change")}_setRanges(t,e=!1){t=Array.from(t),this._ranges=[];for(const n of t)this._addRange(n);this._lastRangeBackward=!!e}_setFakeOptions(t={}){this._isFake=!!t.fake,this._fakeSelectionLabel=t.fake&&t.label||""}_addRange(t,e=!1){if(!(t instanceof nt))throw new _("view-selection-add-range-not-range",this);this._pushRange(t),this._lastRangeBackward=!!e}_pushRange(t){for(const e of this._ranges)if(t.isIntersecting(e))throw new _("view-selection-range-intersects",this,{addedRange:t,intersectingRange:e});this._ranges.push(new nt(t.start,t.end))}}Pe.prototype.is=function(o){return o==="selection"||o==="view:selection"};class vs extends kt(Nn){constructor(...t){super(),this._selection=new Pe,this._selection.delegate("change").to(this),t.length&&this._selection.setTo(...t)}get isFake(){return this._selection.isFake}get fakeSelectionLabel(){return this._selection.fakeSelectionLabel}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get isCollapsed(){return this._selection.isCollapsed}get rangeCount(){return this._selection.rangeCount}get isBackward(){return this._selection.isBackward}get editableElement(){return this._selection.editableElement}get _ranges(){return this._selection._ranges}*getRanges(){yield*this._selection.getRanges()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getSelectedElement(){return this._selection.getSelectedElement()}isEqual(t){return this._selection.isEqual(t)}isSimilar(t){return this._selection.isSimilar(t)}_setTo(...t){this._selection.setTo(...t)}_setFocus(t,e){this._selection.setFocus(t,e)}}vs.prototype.is=function(o){return o==="selection"||o=="documentSelection"||o=="view:selection"||o=="view:documentSelection"};class co extends H{constructor(t,e,n){super(t,e),this.startRange=n,this._eventPhase="none",this._currentTarget=null}get eventPhase(){return this._eventPhase}get currentTarget(){return this._currentTarget}}const ys=Symbol("bubbling contexts");function xs(o){return class extends o{fire(t,...e){try{const n=t instanceof H?t:new H(this,t),i=Es(this);if(!i.size)return;if(Go(n,"capturing",this),lo(i,"$capture",n,...e))return n.return;const r=n.startRange||this.selection.getFirstRange(),s=r?r.getContainedElement():null,a=!!s&&!!td(i,s);let c=s||function(l){if(!l)return null;const d=l.start.parent,h=l.end.parent,u=d.getPath(),g=h.getPath();return u.length>g.length?d:h}(r);if(Go(n,"atTarget",c),!a){if(lo(i,"$text",n,...e))return n.return;Go(n,"bubbling",c)}for(;c;){if(c.is("rootElement")){if(lo(i,"$root",n,...e))return n.return}else if(c.is("element")&&lo(i,c.name,n,...e))return n.return;if(lo(i,c,n,...e))return n.return;c=c.parent,Go(n,"bubbling",c)}return Go(n,"bubbling",this),lo(i,"$document",n,...e),n.return}catch(n){_.rethrowUnexpectedError(n,this)}}_addEventListener(t,e,n){const i=Bt(n.context||"$document"),r=Es(this);for(const s of i){let a=r.get(s);a||(a=new(kt()),r.set(s,a)),this.listenTo(a,t,e,n)}}_removeEventListener(t,e){const n=Es(this);for(const i of n.values())this.stopListening(i,t,e)}}}{const o=xs(Object);["fire","_addEventListener","_removeEventListener"].forEach(t=>{xs[t]=o.prototype[t]})}function Go(o,t,e){o instanceof co&&(o._eventPhase=t,o._currentTarget=e)}function lo(o,t,e,...n){const i=typeof t=="string"?o.get(t):td(o,t);return!!i&&(i.fire(e,...n),e.stop.called)}function td(o,t){for(const[e,n]of o)if(typeof e=="function"&&e(t))return n;return null}function Es(o){return o[ys]||(o[ys]=new Map),o[ys]}class Fi extends xs(mt()){constructor(t){super(),this._postFixers=new Set,this.selection=new vs,this.roots=new Me({idProperty:"rootName"}),this.stylesProcessor=t,this.set("isReadOnly",!1),this.set("isFocused",!1),this.set("isSelecting",!1),this.set("isComposing",!1)}getRoot(t="main"){return this.roots.get(t)}registerPostFixer(t){this._postFixers.add(t)}destroy(){this.roots.forEach(t=>t.destroy()),this.stopListening()}_callPostFixers(t){let e=!1;do for(const n of this._postFixers)if(e=n(t),e)break;while(e)}}class zn extends he{constructor(t,e,n,i){super(t,e,n,i),this._priority=10,this._id=null,this._clonesGroup=null,this.getFillerOffset=x0}get priority(){return this._priority}get id(){return this._id}getElementsWithSameId(){if(this.id===null)throw new _("attribute-element-get-elements-with-same-id-no-id",this);return new Set(this._clonesGroup)}isSimilar(t){return this.id!==null||t.id!==null?this.id===t.id:super.isSimilar(t)&&this.priority==t.priority}_clone(t=!1){const e=super._clone(t);return e._priority=this._priority,e._id=this._id,e}}function x0(){if(Ds(this))return null;let o=this.parent;for(;o&&o.is("attributeElement");){if(Ds(o)>1)return null;o=o.parent}return!o||Ds(o)>1?null:this.childCount}function Ds(o){return Array.from(o.getChildren()).filter(t=>!t.is("uiElement")).length}zn.DEFAULT_PRIORITY=10,zn.prototype.is=function(o,t){return t?t===this.name&&(o==="attributeElement"||o==="view:attributeElement"||o==="element"||o==="view:element"):o==="attributeElement"||o==="view:attributeElement"||o==="element"||o==="view:element"||o==="node"||o==="view:node"};class Is extends he{constructor(t,e,n,i){super(t,e,n,i),this.getFillerOffset=E0}_insertChild(t,e){if(e&&(e instanceof Pn||Array.from(e).length>0))throw new _("view-emptyelement-cannot-add",[this,e]);return 0}}function E0(){return null}Is.prototype.is=function(o,t){return t?t===this.name&&(o==="emptyElement"||o==="view:emptyElement"||o==="element"||o==="view:element"):o==="emptyElement"||o==="view:emptyElement"||o==="element"||o==="view:element"||o==="node"||o==="view:node"};class Vi extends he{constructor(t,e,n,i){super(t,e,n,i),this.getFillerOffset=I0}_insertChild(t,e){if(e&&(e instanceof Pn||Array.from(e).length>0))throw new _("view-uielement-cannot-add",[this,e]);return 0}render(t,e){return this.toDomElement(t)}toDomElement(t){const e=t.createElement(this.name);for(const n of this.getAttributeKeys())e.setAttribute(n,this.getAttribute(n));return e}}function D0(o){o.document.on("arrowKey",(t,e)=>function(n,i,r){if(i.keyCode==ut.arrowright){const s=i.domTarget.ownerDocument.defaultView.getSelection(),a=s.rangeCount==1&&s.getRangeAt(0).collapsed;if(a||i.shiftKey){const c=s.focusNode,l=s.focusOffset,d=r.domPositionToView(c,l);if(d===null)return;let h=!1;const u=d.getLastMatchingPosition(g=>(g.item.is("uiElement")&&(h=!0),!(!g.item.is("uiElement")&&!g.item.is("attributeElement"))));if(h){const g=r.viewPositionToDom(u);a?s.collapse(g.parent,g.offset):s.extend(g.parent,g.offset)}}}}(0,e,o.domConverter),{priority:"low"})}function I0(){return null}Vi.prototype.is=function(o,t){return t?t===this.name&&(o==="uiElement"||o==="view:uiElement"||o==="element"||o==="view:element"):o==="uiElement"||o==="view:uiElement"||o==="element"||o==="view:element"||o==="node"||o==="view:node"};class Ss extends he{constructor(t,e,n,i){super(t,e,n,i),this.getFillerOffset=S0}_insertChild(t,e){if(e&&(e instanceof Pn||Array.from(e).length>0))throw new _("view-rawelement-cannot-add",[this,e]);return 0}render(t,e){}}function S0(){return null}Ss.prototype.is=function(o,t){return t?t===this.name&&(o==="rawElement"||o==="view:rawElement"||o==="element"||o==="view:element"):o==="rawElement"||o==="view:rawElement"||o===this.name||o==="view:"+this.name||o==="element"||o==="view:element"||o==="node"||o==="view:node"};class Rn extends kt(Nn){constructor(t,e){super(),this._children=[],this._customProperties=new Map,this.document=t,e&&this._insertChild(0,e)}[Symbol.iterator](){return this._children[Symbol.iterator]()}get childCount(){return this._children.length}get isEmpty(){return this.childCount===0}get root(){return this}get parent(){return null}get name(){}get getFillerOffset(){}getCustomProperty(t){return this._customProperties.get(t)}*getCustomProperties(){yield*this._customProperties.entries()}_appendChild(t){return this._insertChild(this.childCount,t)}getChild(t){return this._children[t]}getChildIndex(t){return this._children.indexOf(t)}getChildren(){return this._children[Symbol.iterator]()}_insertChild(t,e){this._fireChange("children",this);let n=0;const i=function(r,s){return typeof s=="string"?[new vt(r,s)]:(Gt(s)||(s=[s]),Array.from(s).map(a=>typeof a=="string"?new vt(r,a):a instanceof $e?new vt(r,a.data):a))}(this.document,e);for(const r of i)r.parent!==null&&r._remove(),r.parent=this,this._children.splice(t,0,r),t++,n++;return n}_removeChildren(t,e=1){this._fireChange("children",this);for(let n=t;n{const c=s[s.length-1],l=!a.is("uiElement");return c&&c.breakAttributes==l?c.nodes.push(a):s.push({breakAttributes:l,nodes:[a]}),s},[]);let i=null,r=t;for(const{nodes:s,breakAttributes:a}of n){const c=this._insertNodes(r,s,a);i||(i=c.start),r=c.end}return i?new nt(i,r):new nt(t)}remove(t){const e=t instanceof nt?t:nt._createOn(t);if(Wo(e,this.document),e.isCollapsed)return new Rn(this.document);const{start:n,end:i}=this._breakAttributesRange(e,!0),r=n.parent,s=i.offset-n.offset,a=r._removeChildren(n.offset,s);for(const l of a)this._removeFromClonedElementsGroup(l);const c=this.mergeAttributes(n);return e.start=c,e.end=c.clone(),new Rn(this.document,a)}clear(t,e){Wo(t,this.document);const n=t.getWalker({direction:"backward",ignoreElementEnd:!0});for(const i of n){const r=i.item;let s;if(r.is("element")&&e.isSimilar(r))s=nt._createOn(r);else if(!i.nextPosition.isAfter(t.start)&&r.is("$textProxy")){const a=r.getAncestors().find(c=>c.is("element")&&e.isSimilar(c));a&&(s=nt._createIn(a))}s&&(s.end.isAfter(t.end)&&(s.end=t.end),s.start.isBefore(t.start)&&(s.start=t.start),this.remove(s))}}move(t,e){let n;if(e.isAfter(t.end)){const i=(e=this._breakAttributes(e,!0)).parent,r=i.childCount;t=this._breakAttributesRange(t,!0),n=this.remove(t),e.offset+=i.childCount-r}else n=this.remove(t);return this.insert(e,n)}wrap(t,e){if(!(e instanceof zn))throw new _("view-writer-wrap-invalid-attribute",this.document);if(Wo(t,this.document),t.isCollapsed){let i=t.start;i.parent.is("element")&&(n=i.parent,!Array.from(n.getChildren()).some(s=>!s.is("uiElement")))&&(i=i.getLastMatchingPosition(s=>s.item.is("uiElement"))),i=this._wrapPosition(i,e);const r=this.document.selection;return r.isCollapsed&&r.getFirstPosition().isEqual(t.start)&&this.setSelection(i),new nt(i)}return this._wrapRange(t,e);var n}unwrap(t,e){if(!(e instanceof zn))throw new _("view-writer-unwrap-invalid-attribute",this.document);if(Wo(t,this.document),t.isCollapsed)return t;const{start:n,end:i}=this._breakAttributesRange(t,!0),r=n.parent,s=this._unwrapChildren(r,n.offset,i.offset,e),a=this.mergeAttributes(s.start);a.isEqual(s.start)||s.end.offset--;const c=this.mergeAttributes(s.end);return new nt(a,c)}rename(t,e){const n=new qo(this.document,t,e.getAttributes());return this.insert(V._createAfter(e),n),this.move(nt._createIn(e),V._createAt(n,0)),this.remove(nt._createOn(e)),n}clearClonedElementsGroup(t){this._cloneGroups.delete(t)}createPositionAt(t,e){return V._createAt(t,e)}createPositionAfter(t){return V._createAfter(t)}createPositionBefore(t){return V._createBefore(t)}createRange(t,e){return new nt(t,e)}createRangeOn(t){return nt._createOn(t)}createRangeIn(t){return nt._createIn(t)}createSelection(...t){return new Pe(...t)}createSlot(t="children"){if(!this._slotFactory)throw new _("view-writer-invalid-create-slot-context",this.document);return this._slotFactory(this,t)}_registerSlotFactory(t){this._slotFactory=t}_clearSlotFactory(){this._slotFactory=null}_insertNodes(t,e,n){let i,r;if(i=n?Ts(t):t.parent.is("$text")?t.parent.parent:t.parent,!i)throw new _("view-writer-invalid-position-container",this.document);r=n?this._breakAttributes(t,!0):t.parent.is("$text")?Ms(t):t;const s=i._insertChild(r.offset,e);for(const d of e)this._addToClonedElementsGroup(d);const a=r.getShiftedBy(s),c=this.mergeAttributes(r);c.isEqual(r)||a.offset--;const l=this.mergeAttributes(a);return new nt(c,l)}_wrapChildren(t,e,n,i){let r=e;const s=[];for(;r!1,t.parent._insertChild(t.offset,n);const i=new nt(t,t.getShiftedBy(1));this.wrap(i,e);const r=new V(n.parent,n.index);n._remove();const s=r.nodeBefore,a=r.nodeAfter;return s instanceof vt&&a instanceof vt?od(s,a):nd(r)}_wrapAttributeElement(t,e){if(!rd(t,e)||t.name!==e.name||t.priority!==e.priority)return!1;for(const n of t.getAttributeKeys())if(n!=="class"&&n!=="style"&&e.hasAttribute(n)&&e.getAttribute(n)!==t.getAttribute(n))return!1;for(const n of t.getStyleNames())if(e.hasStyle(n)&&e.getStyle(n)!==t.getStyle(n))return!1;for(const n of t.getAttributeKeys())n!=="class"&&n!=="style"&&(e.hasAttribute(n)||this.setAttribute(n,t.getAttribute(n),e));for(const n of t.getStyleNames())e.hasStyle(n)||this.setStyle(n,t.getStyle(n),e);for(const n of t.getClassNames())e.hasClass(n)||this.addClass(n,e);return!0}_unwrapAttributeElement(t,e){if(!rd(t,e)||t.name!==e.name||t.priority!==e.priority)return!1;for(const n of t.getAttributeKeys())if(n!=="class"&&n!=="style"&&(!e.hasAttribute(n)||e.getAttribute(n)!==t.getAttribute(n)))return!1;if(!e.hasClass(...t.getClassNames()))return!1;for(const n of t.getStyleNames())if(!e.hasStyle(n)||e.getStyle(n)!==t.getStyle(n))return!1;for(const n of t.getAttributeKeys())n!=="class"&&n!=="style"&&this.removeAttribute(n,e);return this.removeClass(Array.from(t.getClassNames()),e),this.removeStyle(Array.from(t.getStyleNames()),e),!0}_breakAttributesRange(t,e=!1){const n=t.start,i=t.end;if(Wo(t,this.document),t.isCollapsed){const c=this._breakAttributes(t.start,e);return new nt(c,c)}const r=this._breakAttributes(i,e),s=r.parent.childCount,a=this._breakAttributes(n,e);return r.offset+=r.parent.childCount-s,new nt(a,r)}_breakAttributes(t,e=!1){const n=t.offset,i=t.parent;if(t.parent.is("emptyElement"))throw new _("view-writer-cannot-break-empty-element",this.document);if(t.parent.is("uiElement"))throw new _("view-writer-cannot-break-ui-element",this.document);if(t.parent.is("rawElement"))throw new _("view-writer-cannot-break-raw-element",this.document);if(!e&&i.is("$text")&&Bs(i.parent)||Bs(i))return t.clone();if(i.is("$text"))return this._breakAttributes(Ms(t),e);if(n==i.childCount){const r=new V(i.parent,i.index+1);return this._breakAttributes(r,e)}if(n===0){const r=new V(i.parent,i.index);return this._breakAttributes(r,e)}{const r=i.index+1,s=i._clone();i.parent._insertChild(r,s),this._addToClonedElementsGroup(s);const a=i.childCount-n,c=i._removeChildren(n,a);s._appendChild(c);const l=new V(i.parent,r);return this._breakAttributes(l,e)}}_addToClonedElementsGroup(t){if(!t.root.is("rootElement"))return;if(t.is("element"))for(const i of t.getChildren())this._addToClonedElementsGroup(i);const e=t.id;if(!e)return;let n=this._cloneGroups.get(e);n||(n=new Set,this._cloneGroups.set(e,n)),n.add(t),t._clonesGroup=n}_removeFromClonedElementsGroup(t){if(t.is("element"))for(const i of t.getChildren())this._removeFromClonedElementsGroup(i);const e=t.id;if(!e)return;const n=this._cloneGroups.get(e);n&&n.delete(t)}}function Ts(o){let t=o.parent;for(;!Bs(t);){if(!t)return;t=t.parent}return t}function T0(o,t){return o.priorityt.priority)&&o.getIdentity()e instanceof n))throw new _("view-writer-insert-invalid-node-type",t);e.is("$text")||id(e.getChildren(),t)}}function Bs(o){return o&&(o.is("containerElement")||o.is("documentFragment"))}function Wo(o,t){const e=Ts(o.start),n=Ts(o.end);if(!e||!n||e!==n)throw new _("view-writer-invalid-range-container",t)}function rd(o,t){return o.id===null&&t.id===null}const sd=o=>o.createTextNode(" "),ad=o=>{const t=o.createElement("span");return t.dataset.ckeFiller="true",t.innerText=" ",t},cd=o=>{const t=o.createElement("br");return t.dataset.ckeFiller="true",t},Le=7,$o="⁠".repeat(Le);function ue(o){return typeof o=="string"?o.substr(0,Le)===$o:Vt(o)&&o.data.substr(0,Le)===$o}function Ko(o){return o.data.length==Le&&ue(o)}function ld(o){const t=typeof o=="string"?o:o.data;return ue(o)?t.slice(Le):t}function B0(o,t){if(t.keyCode==ut.arrowleft){const e=t.domTarget.ownerDocument.defaultView.getSelection();if(e.rangeCount==1&&e.getRangeAt(0).collapsed){const n=e.getRangeAt(0).startContainer,i=e.getRangeAt(0).startOffset;ue(n)&&i<=Le&&e.collapse(n,0)}}}var dd=N(9792),N0={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(dd.c,N0),dd.c.locals;class P0 extends mt(){constructor(t,e){super(),this.domDocuments=new Set,this.markedAttributes=new Set,this.markedChildren=new Set,this.markedTexts=new Set,this._inlineFiller=null,this._fakeSelectionContainer=null,this.domConverter=t,this.selection=e,this.set("isFocused",!1),this.set("isSelecting",!1),f.isBlink&&!f.isAndroid&&this.on("change:isSelecting",()=>{this.isSelecting||this.render()}),this.set("isComposing",!1),this.on("change:isComposing",()=>{this.isComposing||this.render()})}markToSync(t,e){if(t==="text")this.domConverter.mapViewToDom(e.parent)&&this.markedTexts.add(e);else{if(!this.domConverter.mapViewToDom(e))return;if(t==="attributes")this.markedAttributes.add(e);else{if(t!=="children")throw new _("view-renderer-unknown-type",this);this.markedChildren.add(e)}}}render(){if(this.isComposing&&!f.isAndroid)return;let t=null;const e=!(f.isBlink&&!f.isAndroid)||!this.isSelecting;for(const n of this.markedChildren)this._updateChildrenMappings(n);e?(this._inlineFiller&&!this._isSelectionInInlineFiller()&&this._removeInlineFiller(),this._inlineFiller?t=this._getInlineFillerPosition():this._needsInlineFillerAtSelection()&&(t=this.selection.getFirstPosition(),this.markedChildren.add(t.parent))):this._inlineFiller&&this._inlineFiller.parentNode&&(t=this.domConverter.domPositionToView(this._inlineFiller),t&&t.parent.is("$text")&&(t=V._createBefore(t.parent)));for(const n of this.markedAttributes)this._updateAttrs(n);for(const n of this.markedChildren)this._updateChildren(n,{inlineFillerPosition:t});for(const n of this.markedTexts)!this.markedChildren.has(n.parent)&&this.domConverter.mapViewToDom(n.parent)&&this._updateText(n,{inlineFillerPosition:t});if(e)if(t){const n=this.domConverter.viewPositionToDom(t),i=n.parent.ownerDocument;ue(n.parent)?this._inlineFiller=n.parent:this._inlineFiller=hd(i,n.parent,n.offset)}else this._inlineFiller=null;this._updateFocus(),this._updateSelection(),this.domConverter._clearTemporaryCustomProperties(),this.markedTexts.clear(),this.markedAttributes.clear(),this.markedChildren.clear()}_updateChildrenMappings(t){const e=this.domConverter.mapViewToDom(t);if(!e)return;const n=Array.from(e.childNodes),i=Array.from(this.domConverter.viewChildrenToDom(t,{withChildren:!1})),r=this._diffNodeLists(n,i),s=this._findUpdateActions(r,n,i,L0);if(s.indexOf("update")!==-1){const a={equal:0,insert:0,delete:0};for(const c of s)if(c==="update"){const l=a.equal+a.insert,d=a.equal+a.delete,h=t.getChild(l);!h||h.is("uiElement")||h.is("rawElement")||this._updateElementMappings(h,n[d]),Qc(i[l]),a.equal++}else a[c]++}}_updateElementMappings(t,e){this.domConverter.unbindDomElement(e),this.domConverter.bindElements(e,t),this.markedChildren.add(t),this.markedAttributes.add(t)}_getInlineFillerPosition(){const t=this.selection.getFirstPosition();return t.parent.is("$text")?V._createBefore(t.parent):t}_isSelectionInInlineFiller(){if(this.selection.rangeCount!=1||!this.selection.isCollapsed)return!1;const t=this.selection.getFirstPosition(),e=this.domConverter.viewPositionToDom(t);return!!(e&&Vt(e.parent)&&ue(e.parent))}_removeInlineFiller(){const t=this._inlineFiller;if(!ue(t))throw new _("view-renderer-filler-was-lost",this);Ko(t)?t.remove():t.data=t.data.substr(Le),this._inlineFiller=null}_needsInlineFillerAtSelection(){if(this.selection.rangeCount!=1||!this.selection.isCollapsed)return!1;const t=this.selection.getFirstPosition(),e=t.parent,n=t.offset;if(!this.domConverter.mapViewToDom(e.root)||!e.is("element")||!function(s){if(s.getAttribute("contenteditable")=="false")return!1;const a=s.findAncestor(c=>c.hasAttribute("contenteditable"));return!a||a.getAttribute("contenteditable")=="true"}(e)||n===e.getFillerOffset())return!1;const i=t.nodeBefore,r=t.nodeAfter;return!(i instanceof vt||r instanceof vt)&&(!f.isAndroid||!i&&!r)}_updateText(t,e){const n=this.domConverter.findCorrespondingDomText(t);let i=this.domConverter.viewToDom(t).data;const r=e.inlineFillerPosition;r&&r.parent==t.parent&&r.offset==t.index&&(i=$o+i),ud(n,i)}_updateAttrs(t){const e=this.domConverter.mapViewToDom(t);if(!e)return;const n=Array.from(e.attributes).map(r=>r.name),i=t.getAttributeKeys();for(const r of i)this.domConverter.setDomElementAttribute(e,r,t.getAttribute(r),t);for(const r of n)t.hasAttribute(r)||this.domConverter.removeDomElementAttribute(e,r)}_updateChildren(t,e){const n=this.domConverter.mapViewToDom(t);if(!n)return;if(f.isAndroid){let h=null;for(const u of Array.from(n.childNodes)){if(h&&Vt(h)&&Vt(u)){n.normalize();break}h=u}}const i=e.inlineFillerPosition,r=n.childNodes,s=Array.from(this.domConverter.viewChildrenToDom(t,{bind:!0}));i&&i.parent===t&&hd(n.ownerDocument,s,i.offset);const a=this._diffNodeLists(r,s),c=this._findUpdateActions(a,r,s,O0);let l=0;const d=new Set;for(const h of c)h==="delete"?(d.add(r[l]),Qc(r[l])):h!=="equal"&&h!=="update"||l++;l=0;for(const h of c)h==="insert"?(Wc(n,l,s[l]),l++):h==="update"?(ud(r[l],s[l].data),l++):h==="equal"&&(this._markDescendantTextToSync(this.domConverter.domToView(s[l])),l++);for(const h of d)h.parentNode||this.domConverter.unbindDomElement(h)}_diffNodeLists(t,e){return t=function(n,i){const r=Array.from(n);return r.length==0||!i||r[r.length-1]==i&&r.pop(),r}(t,this._fakeSelectionContainer),L(t,e,z0.bind(null,this.domConverter))}_findUpdateActions(t,e,n,i){if(t.indexOf("insert")===-1||t.indexOf("delete")===-1)return t;let r=[],s=[],a=[];const c={equal:0,insert:0,delete:0};for(const l of t)l==="insert"?a.push(n[c.equal+c.insert]):l==="delete"?s.push(e[c.equal+c.delete]):(r=r.concat(L(s,a,i).map(d=>d==="equal"?"update":d)),r.push("equal"),s=[],a=[]),c[l]++;return r.concat(L(s,a,i).map(l=>l==="equal"?"update":l))}_markDescendantTextToSync(t){if(t){if(t.is("$text"))this.markedTexts.add(t);else if(t.is("element"))for(const e of t.getChildren())this._markDescendantTextToSync(e)}}_updateSelection(){if(f.isBlink&&!f.isAndroid&&this.isSelecting&&!this.markedChildren.size)return;if(this.selection.rangeCount===0)return this._removeDomSelection(),void this._removeFakeSelection();const t=this.domConverter.mapViewToDom(this.selection.editableElement);this.isFocused&&t&&(this.selection.isFake?this._updateFakeSelection(t):this._fakeSelectionContainer&&this._fakeSelectionContainer.isConnected?(this._removeFakeSelection(),this._updateDomSelection(t)):this.isComposing&&f.isAndroid||this._updateDomSelection(t))}_updateFakeSelection(t){const e=t.ownerDocument;this._fakeSelectionContainer||(this._fakeSelectionContainer=function(s){const a=s.createElement("div");return a.className="ck-fake-selection-container",Object.assign(a.style,{position:"fixed",top:0,left:"-9999px",width:"42px"}),a.textContent=" ",a}(e));const n=this._fakeSelectionContainer;if(this.domConverter.bindFakeSelection(n,this.selection),!this._fakeSelectionNeedsUpdate(t))return;n.parentElement&&n.parentElement==t||t.appendChild(n),n.textContent=this.selection.fakeSelectionLabel||" ";const i=e.getSelection(),r=e.createRange();i.removeAllRanges(),r.selectNodeContents(n),i.addRange(r)}_updateDomSelection(t){const e=t.ownerDocument.defaultView.getSelection();if(!this._domSelectionNeedsUpdate(e))return;const n=this.domConverter.viewPositionToDom(this.selection.anchor),i=this.domConverter.viewPositionToDom(this.selection.focus);e.setBaseAndExtent(n.parent,n.offset,i.parent,i.offset),f.isGecko&&function(r,s){const a=r.parent;if(a.nodeType!=Node.ELEMENT_NODE||r.offset!=a.childNodes.length-1)return;const c=a.childNodes[r.offset];c&&c.tagName=="BR"&&s.addRange(s.getRangeAt(0))}(i,e)}_domSelectionNeedsUpdate(t){if(!this.domConverter.isDomSelectionCorrect(t))return!0;const e=t&&this.domConverter.domSelectionToView(t);return(!e||!this.selection.isEqual(e))&&!(!this.selection.isCollapsed&&this.selection.isSimilar(e))}_fakeSelectionNeedsUpdate(t){const e=this._fakeSelectionContainer,n=t.ownerDocument.getSelection();return!e||e.parentElement!==t||n.anchorNode!==e&&!e.contains(n.anchorNode)||e.textContent!==this.selection.fakeSelectionLabel}_removeDomSelection(){for(const t of this.domDocuments){const e=t.getSelection();if(e.rangeCount){const n=t.activeElement,i=this.domConverter.mapDomToView(n);n&&i&&e.removeAllRanges()}}}_removeFakeSelection(){const t=this._fakeSelectionContainer;t&&t.remove()}_updateFocus(){if(this.isFocused){const t=this.selection.editableElement;t&&this.domConverter.focus(t)}}}function hd(o,t,e){const n=t instanceof Array?t:t.childNodes,i=n[e];if(Vt(i))return i.data=$o+i.data,i;{const r=o.createTextNode($o);return Array.isArray(t)?n.splice(e,0,r):Wc(t,e,r),r}}function L0(o,t){return pn(o)&&pn(t)&&!Vt(o)&&!Vt(t)&&!jo(o)&&!jo(t)&&o.tagName.toLowerCase()===t.tagName.toLowerCase()}function O0(o,t){return pn(o)&&pn(t)&&Vt(o)&&Vt(t)}function z0(o,t,e){return t===e||(Vt(t)&&Vt(e)?t.data===e.data:!(!o.isBlockFiller(t)||!o.isBlockFiller(e)))}function ud(o,t){const e=o.data;if(e==t)return;const n=I(e,t);for(const i of n)i.type==="insert"?o.insertData(i.index,i.values.join("")):o.deleteData(i.index,i.howMany)}const R0=cd($.document),j0=sd($.document),F0=ad($.document),Hi="data-ck-unsafe-attribute-",gd="data-ck-unsafe-element";class Ui{constructor(t,{blockFillerMode:e,renderingMode:n="editing"}={}){this._domToViewMapping=new WeakMap,this._viewToDomMapping=new WeakMap,this._fakeSelectionMapping=new WeakMap,this._rawContentElementMatcher=new Ne,this._inlineObjectElementMatcher=new Ne,this._elementsWithTemporaryCustomProperties=new Set,this.document=t,this.renderingMode=n,this.blockFillerMode=e||(n==="editing"?"br":"nbsp"),this.preElements=["pre"],this.blockElements=["address","article","aside","blockquote","caption","center","dd","details","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","legend","li","main","menu","nav","ol","p","pre","section","summary","table","tbody","td","tfoot","th","thead","tr","ul"],this.inlineObjectElements=["object","iframe","input","button","textarea","select","option","video","embed","audio","img","canvas"],this.unsafeElements=["script","style"],this._domDocument=this.renderingMode==="editing"?$.document:$.document.implementation.createHTMLDocument("")}bindFakeSelection(t,e){this._fakeSelectionMapping.set(t,new Pe(e))}fakeSelectionToView(t){return this._fakeSelectionMapping.get(t)}bindElements(t,e){this._domToViewMapping.set(t,e),this._viewToDomMapping.set(e,t)}unbindDomElement(t){const e=this._domToViewMapping.get(t);if(e){this._domToViewMapping.delete(t),this._viewToDomMapping.delete(e);for(const n of Array.from(t.children))this.unbindDomElement(n)}}bindDocumentFragments(t,e){this._domToViewMapping.set(t,e),this._viewToDomMapping.set(e,t)}shouldRenderAttribute(t,e,n){return this.renderingMode==="data"||!(t=t.toLowerCase()).startsWith("on")&&(t!=="srcdoc"||!e.match(/\bon\S+\s*=|javascript:|<\s*\/*script/i))&&(n==="img"&&(t==="src"||t==="srcset")||n==="source"&&t==="srcset"||!e.match(/^\s*(javascript:|data:(image\/svg|text\/x?html))/i))}setContentOf(t,e){if(this.renderingMode==="data")return void(t.innerHTML=e);const n=new DOMParser().parseFromString(e,"text/html"),i=n.createDocumentFragment(),r=n.body.childNodes;for(;r.length>0;)i.appendChild(r[0]);const s=n.createTreeWalker(i,NodeFilter.SHOW_ELEMENT),a=[];let c;for(;c=s.nextNode();)a.push(c);for(const l of a){for(const h of l.getAttributeNames())this.setDomElementAttribute(l,h,l.getAttribute(h));const d=l.tagName.toLowerCase();this._shouldRenameElement(d)&&(fd(d),l.replaceWith(this._createReplacementDomElement(d,l)))}for(;t.firstChild;)t.firstChild.remove();t.append(i)}viewToDom(t,e={}){if(t.is("$text")){const n=this._processDataFromViewText(t);return this._domDocument.createTextNode(n)}{const n=t;if(this.mapViewToDom(n)){if(!n.getCustomProperty("editingPipeline:doNotReuseOnce"))return this.mapViewToDom(n);this._elementsWithTemporaryCustomProperties.add(n)}let i;if(n.is("documentFragment"))i=this._domDocument.createDocumentFragment(),e.bind&&this.bindDocumentFragments(i,n);else{if(n.is("uiElement"))return i=n.name==="$comment"?this._domDocument.createComment(n.getCustomProperty("$rawContent")):n.render(this._domDocument,this),e.bind&&this.bindElements(i,n),i;this._shouldRenameElement(n.name)?(fd(n.name),i=this._createReplacementDomElement(n.name)):i=n.hasAttribute("xmlns")?this._domDocument.createElementNS(n.getAttribute("xmlns"),n.name):this._domDocument.createElement(n.name),n.is("rawElement")&&n.render(i,this),e.bind&&this.bindElements(i,n);for(const r of n.getAttributeKeys())this.setDomElementAttribute(i,r,n.getAttribute(r),n)}if(e.withChildren!==!1)for(const r of this.viewChildrenToDom(n,e))i.appendChild(r);return i}}setDomElementAttribute(t,e,n,i){const r=this.shouldRenderAttribute(e,n,t.tagName.toLowerCase())||i&&i.shouldRenderUnsafeAttribute(e);r||Q("domconverter-unsafe-attribute-detected",{domElement:t,key:e,value:n}),function(s){try{$.document.createAttribute(s)}catch{return!1}return!0}(e)?(t.hasAttribute(e)&&!r?t.removeAttribute(e):t.hasAttribute(Hi+e)&&r&&t.removeAttribute(Hi+e),t.setAttribute(r?e:Hi+e,n)):Q("domconverter-invalid-attribute-detected",{domElement:t,key:e,value:n})}removeDomElementAttribute(t,e){e!=gd&&(t.removeAttribute(e),t.removeAttribute(Hi+e))}*viewChildrenToDom(t,e={}){const n=t.getFillerOffset&&t.getFillerOffset();let i=0;for(const r of t.getChildren()){n===i&&(yield this._getBlockFiller());const s=r.is("element")&&!!r.getCustomProperty("dataPipeline:transparentRendering")&&!Wt(r.getAttributes());s&&this.renderingMode=="data"?yield*this.viewChildrenToDom(r,e):(s&&Q("domconverter-transparent-rendering-unsupported-in-editing-pipeline",{viewElement:r}),yield this.viewToDom(r,e)),i++}n===i&&(yield this._getBlockFiller())}viewRangeToDom(t){const e=this.viewPositionToDom(t.start),n=this.viewPositionToDom(t.end),i=this._domDocument.createRange();return i.setStart(e.parent,e.offset),i.setEnd(n.parent,n.offset),i}viewPositionToDom(t){const e=t.parent;if(e.is("$text")){const n=this.findCorrespondingDomText(e);if(!n)return null;let i=t.offset;return ue(n)&&(i+=Le),{parent:n,offset:i}}{let n,i,r;if(t.offset===0){if(n=this.mapViewToDom(e),!n)return null;r=n.childNodes[0]}else{const s=t.nodeBefore;if(i=s.is("$text")?this.findCorrespondingDomText(s):this.mapViewToDom(s),!i)return null;n=i.parentNode,r=i.nextSibling}return Vt(r)&&ue(r)?{parent:r,offset:Le}:{parent:n,offset:i?Si(i)+1:0}}}domToView(t,e={}){const n=[],i=this._domToView(t,e,n),r=i.next().value;return r?(i.next(),this._processDomInlineNodes(null,n,e),r.is("$text")&&r.data.length==0?null:r):null}*domChildrenToView(t,e={},n=[]){for(let i=0;i{const{scrollLeft:a,scrollTop:c}=s;r.push([a,c])}),e.focus(),pd(e,s=>{const[a,c]=r.shift();s.scrollLeft=a,s.scrollTop=c}),$.window.scrollTo(n,i)}}_clearDomSelection(){const t=this.mapViewToDom(this.document.selection.editableElement);if(!t)return;const e=t.ownerDocument.defaultView.getSelection(),n=this.domSelectionToView(e);n&&n.rangeCount>0&&e.removeAllRanges()}isElement(t){return t&&t.nodeType==Node.ELEMENT_NODE}isDocumentFragment(t){return t&&t.nodeType==Node.DOCUMENT_FRAGMENT_NODE}isBlockFiller(t){return this.blockFillerMode=="br"?t.isEqualNode(R0):!(t.tagName!=="BR"||!md(t,this.blockElements)||t.parentNode.childNodes.length!==1)||t.isEqualNode(F0)||function(e,n){return e.isEqualNode(j0)&&md(e,n)&&e.parentNode.childNodes.length===1}(t,this.blockElements)}isDomSelectionBackward(t){if(t.isCollapsed)return!1;const e=this._domDocument.createRange();try{e.setStart(t.anchorNode,t.anchorOffset),e.setEnd(t.focusNode,t.focusOffset)}catch{return!1}const n=e.collapsed;return e.detach(),n}getHostViewElement(t){const e=function(n){const i=[];let r=n;for(;r&&r.nodeType!=Node.DOCUMENT_NODE;)i.unshift(r),r=r.parentNode;return i}(t);for(e.pop();e.length;){const n=e.pop(),i=this._domToViewMapping.get(n);if(i&&(i.is("uiElement")||i.is("rawElement")))return i}return null}isDomSelectionCorrect(t){return this._isDomSelectionPositionCorrect(t.anchorNode,t.anchorOffset)&&this._isDomSelectionPositionCorrect(t.focusNode,t.focusOffset)}registerRawContentMatcher(t){this._rawContentElementMatcher.add(t)}registerInlineObjectMatcher(t){this._inlineObjectElementMatcher.add(t)}_clearTemporaryCustomProperties(){for(const t of this._elementsWithTemporaryCustomProperties)t._removeCustomProperty("editingPipeline:doNotReuseOnce");this._elementsWithTemporaryCustomProperties.clear()}_getBlockFiller(){switch(this.blockFillerMode){case"nbsp":return sd(this._domDocument);case"markedNbsp":return ad(this._domDocument);case"br":return cd(this._domDocument)}}_isDomSelectionPositionCorrect(t,e){if(Vt(t)&&ue(t)&&e0?e[r-1]:null,d=r+1this.preElements.includes(n.name)))return e;if(e.charAt(0)==" "){const n=this._getTouchingInlineViewNode(t,!1);!(n&&n.is("$textProxy")&&this._nodeEndsWithSpace(n))&&n||(e=" "+e.substr(1))}if(e.charAt(e.length-1)==" "){const n=this._getTouchingInlineViewNode(t,!0),i=n&&n.is("$textProxy")&&n.data.charAt(0)==" ";e.charAt(e.length-2)!=" "&&n&&!i||(e=e.substr(0,e.length-1)+" ")}return e.replace(/ {2}/g,"  ")}_nodeEndsWithSpace(t){if(t.getAncestors().some(n=>this.preElements.includes(n.name)))return!1;const e=this._processDataFromViewText(t);return e.charAt(e.length-1)==" "}_getTouchingInlineViewNode(t,e){const n=new On({startPosition:e?V._createAfter(t):V._createBefore(t),direction:e?"forward":"backward"});for(const i of n){if(i.item.is("element","br"))return null;if(this._isInlineObjectElement(i.item))return i.item;if(i.item.is("containerElement"))return null;if(i.item.is("$textProxy"))return i.item}return null}_isBlockDomElement(t){return this.isElement(t)&&this.blockElements.includes(t.tagName.toLowerCase())}_isBlockViewElement(t){return t.is("element")&&this.blockElements.includes(t.name)}_isInlineObjectElement(t){return!!t.is("element")&&(t.name=="br"||this.inlineObjectElements.includes(t.name)||!!this._inlineObjectElementMatcher.match(t))}_createViewElement(t,e){if(jo(t))return new Vi(this.document,"$comment");const n=e.keepOriginalCase?t.tagName:t.tagName.toLowerCase();return new he(this.document,n)}_isViewElementWithRawContent(t,e){return e.withChildren!==!1&&t.is("element")&&!!this._rawContentElementMatcher.match(t)}_shouldRenameElement(t){const e=t.toLowerCase();return this.renderingMode==="editing"&&this.unsafeElements.includes(e)}_createReplacementDomElement(t,e){const n=this._domDocument.createElement("span");if(n.setAttribute(gd,t),e){for(;e.firstChild;)n.appendChild(e.firstChild);for(const i of e.getAttributeNames())n.setAttribute(i,e.getAttribute(i))}return n}}function V0(o,t){return o.getAncestors().some(e=>e.is("element")&&t.includes(e.name))}function pd(o,t){let e=o;for(;e;)t(e),e=e.parentElement}function md(o,t){const e=o.parentNode;return!!e&&!!e.tagName&&t.includes(e.tagName.toLowerCase())}function fd(o){o==="script"&&Q("domconverter-unsafe-script-element-detected"),o==="style"&&Q("domconverter-unsafe-style-element-detected")}class Ke extends Ae(){constructor(t){super(),this._isEnabled=!1,this.view=t,this.document=t.document}get isEnabled(){return this._isEnabled}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}destroy(){this.disable(),this.stopListening()}checkShouldIgnoreEventFromTarget(t){return t&&t.nodeType===3&&(t=t.parentNode),!(!t||t.nodeType!==1)&&t.matches("[data-cke-ignore-events], [data-cke-ignore-events] *")}}const kd=Yl(function(o,t){no(t,io(t),o)});class ho{constructor(t,e,n){this.view=t,this.document=t.document,this.domEvent=e,this.domTarget=e.target,kd(this,n)}get target(){return this.view.domConverter.mapDomToView(this.domTarget)}preventDefault(){this.domEvent.preventDefault()}stopPropagation(){this.domEvent.stopPropagation()}}class fn extends Ke{constructor(){super(...arguments),this.useCapture=!1}observe(t){(typeof this.domEventType=="string"?[this.domEventType]:this.domEventType).forEach(e=>{this.listenTo(t,e,(n,i)=>{this.isEnabled&&!this.checkShouldIgnoreEventFromTarget(i.target)&&this.onDomEvent(i)},{useCapture:this.useCapture})})}stopObserving(t){this.stopListening(t)}fire(t,e,n){this.isEnabled&&this.document.fire(t,new ho(this.view,e,n))}}class H0 extends fn{constructor(){super(...arguments),this.domEventType=["keydown","keyup"]}onDomEvent(t){const e={keyCode:t.keyCode,altKey:t.altKey,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,metaKey:t.metaKey,get keystroke(){return so(this)}};this.fire(t.type,t,e)}}class U0 extends Ke{constructor(t){super(t),this._fireSelectionChangeDoneDebounced=Ho(e=>{this.document.fire("selectionChangeDone",e)},200)}observe(){const t=this.document;t.on("arrowKey",(e,n)=>{t.selection.isFake&&this.isEnabled&&n.preventDefault()},{context:"$capture"}),t.on("arrowKey",(e,n)=>{t.selection.isFake&&this.isEnabled&&this._handleSelectionMove(n.keyCode)},{priority:"lowest"})}stopObserving(){}destroy(){super.destroy(),this._fireSelectionChangeDoneDebounced.cancel()}_handleSelectionMove(t){const e=this.document.selection,n=new Pe(e.getRanges(),{backward:e.isBackward,fake:!1});t!=ut.arrowleft&&t!=ut.arrowup||n.setTo(n.getFirstPosition()),t!=ut.arrowright&&t!=ut.arrowdown||n.setTo(n.getLastPosition());const i={oldSelection:e,newSelection:n,domSelection:null};this.document.fire("selectionChange",i),this._fireSelectionChangeDoneDebounced(i)}}const q0=function(o){return this.__data__.set(o,"__lodash_hash_undefined__"),this},G0=function(o){return this.__data__.has(o)};function qi(o){var t=-1,e=o==null?0:o.length;for(this.__data__=new _i;++ta))return!1;var l=r.get(o),d=r.get(t);if(l&&d)return l==t&&d==o;var h=-1,u=!0,g=2&e?new W0:void 0;for(r.set(o,t),r.set(t,o);++h{this._isFocusChanging=!0,this._renderTimeoutId=setTimeout(()=>{this.flush(),t.change(()=>{})},50)}),e.on("blur",(n,i)=>{const r=e.selection.editableElement;r!==null&&r!==i.target||(e.isFocused=!1,this._isFocusChanging=!1,t.change(()=>{}))})}flush(){this._isFocusChanging&&(this._isFocusChanging=!1,this.document.isFocused=!0)}onDomEvent(t){this.fire(t.type,t)}destroy(){this._renderTimeoutId&&clearTimeout(this._renderTimeoutId),super.destroy()}}class oA extends Ke{constructor(t){super(t),this.mutationObserver=t.getObserver(yd),this.focusObserver=t.getObserver(Wi),this.selection=this.document.selection,this.domConverter=t.domConverter,this._documents=new WeakSet,this._fireSelectionChangeDoneDebounced=Ho(e=>{this.document.fire("selectionChangeDone",e)},200),this._clearInfiniteLoopInterval=setInterval(()=>this._clearInfiniteLoop(),1e3),this._documentIsSelectingInactivityTimeoutDebounced=Ho(()=>this.document.isSelecting=!1,5e3),this._loopbackCounter=0}observe(t){const e=t.ownerDocument,n=()=>{this.document.isSelecting&&(this._handleSelectionChange(null,e),this.document.isSelecting=!1,this._documentIsSelectingInactivityTimeoutDebounced.cancel())};this.listenTo(t,"selectstart",()=>{this.document.isSelecting=!0,this._documentIsSelectingInactivityTimeoutDebounced()},{priority:"highest"}),this.listenTo(t,"keydown",n,{priority:"highest",useCapture:!0}),this.listenTo(t,"keyup",n,{priority:"highest",useCapture:!0}),this._documents.has(e)||(this.listenTo(e,"mouseup",n,{priority:"highest",useCapture:!0}),this.listenTo(e,"selectionchange",(i,r)=>{this.document.isComposing&&!f.isAndroid||(this._handleSelectionChange(r,e),this._documentIsSelectingInactivityTimeoutDebounced())}),this._documents.add(e))}stopObserving(t){this.stopListening(t)}destroy(){super.destroy(),clearInterval(this._clearInfiniteLoopInterval),this._fireSelectionChangeDoneDebounced.cancel(),this._documentIsSelectingInactivityTimeoutDebounced.cancel()}_reportInfiniteLoop(){}_handleSelectionChange(t,e){if(!this.isEnabled)return;const n=e.defaultView.getSelection();if(this.checkShouldIgnoreEventFromTarget(n.anchorNode))return;this.mutationObserver.flush();const i=this.domConverter.domSelectionToView(n);if(i.rangeCount!=0){if(this.view.hasDomSelection=!0,this.focusObserver.flush(),!this.selection.isEqual(i)||!this.domConverter.isDomSelectionCorrect(n))if(++this._loopbackCounter>60)this._reportInfiniteLoop();else if(this.selection.isSimilar(i))this.view.forceRender();else{const r={oldSelection:this.selection,newSelection:i,domSelection:n};this.document.fire("selectionChange",r),this._fireSelectionChangeDoneDebounced(r)}}else this.view.hasDomSelection=!1}_clearInfiniteLoop(){this._loopbackCounter=0}}class iA extends fn{constructor(t){super(t),this.domEventType=["compositionstart","compositionupdate","compositionend"];const e=this.document;e.on("compositionstart",()=>{e.isComposing=!0},{priority:"low"}),e.on("compositionend",()=>{e.isComposing=!1},{priority:"low"})}onDomEvent(t){this.fire(t.type,t,{data:t.data})}}class xd{constructor(t,e={}){this._files=e.cacheFiles?Ed(t):null,this._native=t}get files(){return this._files||(this._files=Ed(this._native)),this._files}get types(){return this._native.types}getData(t){return this._native.getData(t)}setData(t,e){this._native.setData(t,e)}set effectAllowed(t){this._native.effectAllowed=t}get effectAllowed(){return this._native.effectAllowed}set dropEffect(t){this._native.dropEffect=t}get dropEffect(){return this._native.dropEffect}setDragImage(t,e,n){this._native.setDragImage(t,e,n)}get isCanceled(){return this._native.dropEffect=="none"||!!this._native.mozUserCancelled}}function Ed(o){const t=Array.from(o.files||[]),e=Array.from(o.items||[]);return t.length?t:e.filter(n=>n.kind==="file").map(n=>n.getAsFile())}class rA extends fn{constructor(){super(...arguments),this.domEventType="beforeinput"}onDomEvent(t){const e=t.getTargetRanges(),n=this.view,i=n.document;let r=null,s=null,a=[];if(t.dataTransfer&&(r=new xd(t.dataTransfer)),t.data!==null?s=t.data:r&&(s=r.getData("text/plain")),i.selection.isFake)a=Array.from(i.selection.getRanges());else if(e.length)a=e.map(c=>{const l=n.domConverter.domPositionToView(c.startContainer,c.startOffset),d=n.domConverter.domPositionToView(c.endContainer,c.endOffset);return l?n.createRange(l,d):d?n.createRange(d):void 0}).filter(c=>!!c);else if(f.isAndroid){const c=t.target.ownerDocument.defaultView.getSelection();a=Array.from(n.domConverter.domSelectionToView(c).getRanges())}if(f.isAndroid&&t.inputType=="insertCompositionText"&&s&&s.endsWith(` `))this.fire(t.type,t,{inputType:"insertParagraph",targetRanges:[n.createRange(a[0].end)]});else if(t.inputType=="insertText"&&s&&s.includes(` -`)){const c=s.split(/\n{1,2}/g);let l=a;for(let d=0;d{if(this.isEnabled&&((i=n.keyCode)==ut.arrowright||i==ut.arrowleft||i==ut.arrowup||i==ut.arrowdown)){const r=new co(this.document,"arrowKey",this.document.selection.getFirstRange());this.document.fire(r,n),r.stop.called&&e.stop()}var i})}observe(){}stopObserving(){}}class aA extends Ke{constructor(t){super(t);const e=this.document;e.on("keydown",(n,i)=>{if(!this.isEnabled||i.keyCode!=ut.tab||i.ctrlKey)return;const r=new co(e,"tab",e.selection.getFirstRange());e.fire(r,i),r.stop.called&&n.stop()})}observe(){}stopObserving(){}}const kn=function(o){return $r(o,5)};class cA extends mt(){constructor(t){super(),this.domRoots=new Map,this._initialDomRootAttributes=new WeakMap,this._observers=new Map,this._ongoingChange=!1,this._postFixersInProgress=!1,this._renderingDisabled=!1,this._hasChangedSinceTheLastRendering=!1,this.document=new Fi(t),this.domConverter=new Ui(this.document),this.set("isRenderingInProgress",!1),this.set("hasDomSelection",!1),this._renderer=new P0(this.domConverter,this.document.selection),this._renderer.bind("isFocused","isSelecting","isComposing").to(this.document,"isFocused","isSelecting","isComposing"),this._writer=new ed(this.document),this.addObserver(yd),this.addObserver(Wi),this.addObserver(oA),this.addObserver(H0),this.addObserver(U0),this.addObserver(iA),this.addObserver(sA),this.addObserver(rA),this.addObserver(aA),this.document.on("arrowKey",B0,{priority:"low"}),D0(this),this.on("render",()=>{this._render(),this.document.fire("layoutChanged"),this._hasChangedSinceTheLastRendering=!1}),this.listenTo(this.document.selection,"change",()=>{this._hasChangedSinceTheLastRendering=!0}),this.listenTo(this.document,"change:isFocused",()=>{this._hasChangedSinceTheLastRendering=!0}),f.isiOS&&this.listenTo(this.document,"blur",(e,n)=>{this.domConverter.mapDomToView(n.domEvent.relatedTarget)||this.domConverter._clearDomSelection()})}attachDomRoot(t,e="main"){const n=this.document.getRoot(e);n._name=t.tagName.toLowerCase();const i={};for(const{name:s,value:a}of Array.from(t.attributes))i[s]=a,s==="class"?this._writer.addClass(a.split(" "),n):this._writer.setAttribute(s,a,n);this._initialDomRootAttributes.set(t,i);const r=()=>{this._writer.setAttribute("contenteditable",(!n.isReadOnly).toString(),n),n.isReadOnly?this._writer.addClass("ck-read-only",n):this._writer.removeClass("ck-read-only",n)};r(),this.domRoots.set(e,t),this.domConverter.bindElements(t,n),this._renderer.markToSync("children",n),this._renderer.markToSync("attributes",n),this._renderer.domDocuments.add(t.ownerDocument),n.on("change:children",(s,a)=>this._renderer.markToSync("children",a)),n.on("change:attributes",(s,a)=>this._renderer.markToSync("attributes",a)),n.on("change:text",(s,a)=>this._renderer.markToSync("text",a)),n.on("change:isReadOnly",()=>this.change(r)),n.on("change",()=>{this._hasChangedSinceTheLastRendering=!0});for(const s of this._observers.values())s.observe(t,e)}detachDomRoot(t){const e=this.domRoots.get(t);Array.from(e.attributes).forEach(({name:i})=>e.removeAttribute(i));const n=this._initialDomRootAttributes.get(e);for(const i in n)e.setAttribute(i,n[i]);this.domRoots.delete(t),this.domConverter.unbindDomElement(e);for(const i of this._observers.values())i.stopObserving(e)}getDomRoot(t="main"){return this.domRoots.get(t)}addObserver(t){let e=this._observers.get(t);if(e)return e;e=new t(this),this._observers.set(t,e);for(const[n,i]of this.domRoots)e.observe(i,n);return e.enable(),e}getObserver(t){return this._observers.get(t)}disableObservers(){for(const t of this._observers.values())t.disable()}enableObservers(){for(const t of this._observers.values())t.enable()}scrollToTheSelection({alignToTop:t,forceScroll:e,viewportOffset:n=20,ancestorOffset:i=20}={}){const r=this.document.selection.getFirstRange();if(!r)return;const s=kn({alignToTop:t,forceScroll:e,viewportOffset:n,ancestorOffset:i});typeof n=="number"&&(n={top:n,bottom:n,left:n,right:n});const a={target:this.domConverter.viewRangeToDom(r),viewportOffset:n,ancestorOffset:i,alignToTop:t,forceScroll:e};this.fire("scrollToTheSelection",a,s),function({target:c,viewportOffset:l=0,ancestorOffset:d=0,alignToTop:h,forceScroll:u}){const g=Jr(c);let p=g,k=null;for(l=function(b){return typeof b=="number"?{top:b,bottom:b,left:b,right:b}:b}(l);p;){let b;b=Yb(p==g?c:k),Kb({parent:b,getRect:()=>el(c,p),alignToTop:h,ancestorOffset:d,forceScroll:u});const A=el(c,p);if($b({window:p,rect:A,viewportOffset:l,alignToTop:h,forceScroll:u}),p.parent!=p){if(k=p.frameElement,p=p.parent,!k)return}else p=null}}(a)}focus(){if(!this.document.isFocused){const t=this.document.selection.editableElement;t&&(this.domConverter.focus(t),this.forceRender())}}change(t){if(this.isRenderingInProgress||this._postFixersInProgress)throw new _("cannot-change-view-tree",this);try{if(this._ongoingChange)return t(this._writer);this._ongoingChange=!0;const e=t(this._writer);return this._ongoingChange=!1,!this._renderingDisabled&&this._hasChangedSinceTheLastRendering&&(this._postFixersInProgress=!0,this.document._callPostFixers(this._writer),this._postFixersInProgress=!1,this.fire("render")),e}catch(e){_.rethrowUnexpectedError(e,this)}}forceRender(){this._hasChangedSinceTheLastRendering=!0,this.getObserver(Wi).flush(),this.change(()=>{})}destroy(){for(const t of this._observers.values())t.destroy();this.document.destroy(),this.stopListening()}createPositionAt(t,e){return V._createAt(t,e)}createPositionAfter(t){return V._createAfter(t)}createPositionBefore(t){return V._createBefore(t)}createRange(t,e){return new nt(t,e)}createRangeOn(t){return nt._createOn(t)}createRangeIn(t){return nt._createIn(t)}createSelection(...t){return new Pe(...t)}_disableRendering(t){this._renderingDisabled=t,t==0&&this.change(()=>{})}_render(){this.isRenderingInProgress=!0,this.disableObservers(),this._renderer.render(),this.enableObservers(),this.isRenderingInProgress=!1}}class bn{is(){throw new Error("is() method is abstract")}}class jn extends bn{constructor(t){super(),this.parent=null,this._attrs=We(t)}get document(){return null}get index(){let t;if(!this.parent)return null;if((t=this.parent.getChildIndex(this))===null)throw new _("model-node-not-found-in-parent",this);return t}get startOffset(){let t;if(!this.parent)return null;if((t=this.parent.getChildStartOffset(this))===null)throw new _("model-node-not-found-in-parent",this);return t}get offsetSize(){return 1}get endOffset(){return this.parent?this.startOffset+this.offsetSize:null}get nextSibling(){const t=this.index;return t!==null&&this.parent.getChild(t+1)||null}get previousSibling(){const t=this.index;return t!==null&&this.parent.getChild(t-1)||null}get root(){let t=this;for(;t.parent;)t=t.parent;return t}isAttached(){return this.parent!==null&&this.root.isAttached()}getPath(){const t=[];let e=this;for(;e.parent;)t.unshift(e.startOffset),e=e.parent;return t}getAncestors(t={}){const e=[];let n=t.includeSelf?this:this.parent;for(;n;)e[t.parentFirst?"push":"unshift"](n),n=n.parent;return e}getCommonAncestor(t,e={}){const n=this.getAncestors(e),i=t.getAncestors(e);let r=0;for(;n[r]==i[r]&&n[r];)r++;return r===0?null:n[r-1]}isBefore(t){if(this==t||this.root!==t.root)return!1;const e=this.getPath(),n=t.getPath(),i=St(e,n);switch(i){case"prefix":return!0;case"extension":return!1;default:return e[i](e[n[0]]=n[1],e),{})),t}_clone(t){return new this.constructor(this._attrs)}_remove(){this.parent._removeChildren(this.index)}_setAttribute(t,e){this._attrs.set(t,e)}_setAttributesTo(t){this._attrs=We(t)}_removeAttribute(t){return this._attrs.delete(t)}_clearAttributes(){this._attrs.clear()}}jn.prototype.is=function(o){return o==="node"||o==="model:node"};class Yo{constructor(t){this._nodes=[],t&&this._insertNodes(0,t)}[Symbol.iterator](){return this._nodes[Symbol.iterator]()}get length(){return this._nodes.length}get maxOffset(){return this._nodes.reduce((t,e)=>t+e.offsetSize,0)}getNode(t){return this._nodes[t]||null}getNodeIndex(t){const e=this._nodes.indexOf(t);return e==-1?null:e}getNodeStartOffset(t){const e=this.getNodeIndex(t);return e===null?null:this._nodes.slice(0,e).reduce((n,i)=>n+i.offsetSize,0)}indexToOffset(t){if(t==this._nodes.length)return this.maxOffset;const e=this._nodes[t];if(!e)throw new _("model-nodelist-index-out-of-bounds",this);return this.getNodeStartOffset(e)}offsetToIndex(t){let e=0;for(const n of this._nodes){if(t>=e&&t1e4)return n.slice(0,r).concat(i).concat(n.slice(r+s,n.length));{const a=Array.from(n);return a.splice(r,s,...i),a}}(this._nodes,Array.from(e),t,0)}_removeNodes(t,e=1){return this._nodes.splice(t,e)}toJSON(){return this._nodes.map(t=>t.toJSON())}}class yt extends jn{constructor(t,e){super(e),this._data=t||""}get offsetSize(){return this.data.length}get data(){return this._data}toJSON(){const t=super.toJSON();return t.data=this.data,t}_clone(){return new yt(this.data,this.getAttributes())}static fromJSON(t){return new yt(t.data,t.attributes)}}yt.prototype.is=function(o){return o==="$text"||o==="model:$text"||o==="text"||o==="model:text"||o==="node"||o==="model:node"};class Oe extends bn{constructor(t,e,n){if(super(),this.textNode=t,e<0||e>t.offsetSize)throw new _("model-textproxy-wrong-offsetintext",this);if(n<0||e+n>t.offsetSize)throw new _("model-textproxy-wrong-length",this);this.data=t.data.substring(e,e+n),this.offsetInText=e}get startOffset(){return this.textNode.startOffset!==null?this.textNode.startOffset+this.offsetInText:null}get offsetSize(){return this.data.length}get endOffset(){return this.startOffset!==null?this.startOffset+this.offsetSize:null}get isPartial(){return this.offsetSize!==this.textNode.offsetSize}get parent(){return this.textNode.parent}get root(){return this.textNode.root}getPath(){const t=this.textNode.getPath();return t.length>0&&(t[t.length-1]+=this.offsetInText),t}getAncestors(t={}){const e=[];let n=t.includeSelf?this:this.parent;for(;n;)e[t.parentFirst?"push":"unshift"](n),n=n.parent;return e}hasAttribute(t){return this.textNode.hasAttribute(t)}getAttribute(t){return this.textNode.getAttribute(t)}getAttributes(){return this.textNode.getAttributes()}getAttributeKeys(){return this.textNode.getAttributeKeys()}}Oe.prototype.is=function(o){return o==="$textProxy"||o==="model:$textProxy"||o==="textProxy"||o==="model:textProxy"};class Ct extends jn{constructor(t,e,n){super(e),this._children=new Yo,this.name=t,n&&this._insertChild(0,n)}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return this.childCount===0}getChild(t){return this._children.getNode(t)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(t){return this._children.getNodeIndex(t)}getChildStartOffset(t){return this._children.getNodeStartOffset(t)}offsetToIndex(t){return this._children.offsetToIndex(t)}getNodeByPath(t){let e=this;for(const n of t)e=e.getChild(e.offsetToIndex(n));return e}findAncestor(t,e={}){let n=e.includeSelf?this:this.parent;for(;n;){if(n.name===t)return n;n=n.parent}return null}toJSON(){const t=super.toJSON();if(t.name=this.name,this._children.length>0){t.children=[];for(const e of this._children)t.children.push(e.toJSON())}return t}_clone(t=!1){const e=t?Array.from(this._children).map(n=>n._clone(!0)):void 0;return new Ct(this.name,this.getAttributes(),e)}_appendChild(t){this._insertChild(this.childCount,t)}_insertChild(t,e){const n=function(i){return typeof i=="string"?[new yt(i)]:(Gt(i)||(i=[i]),Array.from(i).map(r=>typeof r=="string"?new yt(r):r instanceof Oe?new yt(r.data,r.getAttributes()):r))}(e);for(const i of n)i.parent!==null&&i._remove(),i.parent=this;this._children._insertNodes(t,n)}_removeChildren(t,e=1){const n=this._children._removeNodes(t,e);for(const i of n)i.parent=null;return n}static fromJSON(t){let e;if(t.children){e=[];for(const n of t.children)n.name?e.push(Ct.fromJSON(n)):e.push(yt.fromJSON(n))}return new Ct(t.name,t.attributes,e)}}Ct.prototype.is=function(o,t){return t?t===this.name&&(o==="element"||o==="model:element"):o==="element"||o==="model:element"||o==="node"||o==="model:node"};class tn{constructor(t){if(!t||!t.boundaries&&!t.startPosition)throw new _("model-tree-walker-no-start-position",null);const e=t.direction||"forward";if(e!="forward"&&e!="backward")throw new _("model-tree-walker-unknown-direction",t,{direction:e});this.direction=e,this.boundaries=t.boundaries||null,t.startPosition?this._position=t.startPosition.clone():this._position=O._createAt(this.boundaries[this.direction=="backward"?"end":"start"]),this.position.stickiness="toNone",this.singleCharacters=!!t.singleCharacters,this.shallow=!!t.shallow,this.ignoreElementEnd=!!t.ignoreElementEnd,this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null,this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null,this._visitedParent=this.position.parent}[Symbol.iterator](){return this}get position(){return this._position}skip(t){let e,n,i,r;do i=this.position,r=this._visitedParent,{done:e,value:n}=this.next();while(!e&&t(n));e||(this._position=i,this._visitedParent=r)}next(){return this.direction=="forward"?this._next():this._previous()}_next(){const t=this.position,e=this.position.clone(),n=this._visitedParent;if(n.parent===null&&e.offset===n.maxOffset)return{done:!0,value:void 0};if(n===this._boundaryEndParent&&e.offset==this.boundaries.end.offset)return{done:!0,value:void 0};const i=Qo(e,n),r=i||Dd(e,n,i);if(r instanceof Ct){if(this.shallow){if(this.boundaries&&this.boundaries.end.isBefore(e))return{done:!0,value:void 0};e.offset++}else e.path.push(0),this._visitedParent=r;return this._position=e,Fn("elementStart",r,t,e,1)}if(r instanceof yt){let s;if(this.singleCharacters)s=1;else{let l=r.endOffset;this._boundaryEndParent==n&&this.boundaries.end.offsetd&&(d=this.boundaries.start.offset),a=e.offset-d}const c=e.offset-s.startOffset,l=new Oe(s,c-a,a);return e.offset-=a,this._position=e,Fn("text",l,t,e,a)}return e.path.pop(),this._position=e,this._visitedParent=n.parent,Fn("elementStart",n,t,e,1)}}function Fn(o,t,e,n,i){return{done:!1,value:{type:o,item:t,previousPosition:e,nextPosition:n,length:i}}}class O extends bn{constructor(t,e,n="toNone"){if(super(),!t.is("element")&&!t.is("documentFragment"))throw new _("model-position-root-invalid",t);if(!(e instanceof Array)||e.length===0)throw new _("model-position-path-incorrect-format",t,{path:e});t.is("rootElement")?e=e.slice():(e=[...t.getPath(),...e],t=t.root),this.root=t,this.path=e,this.stickiness=n}get offset(){return this.path[this.path.length-1]}set offset(t){this.path[this.path.length-1]=t}get parent(){let t=this.root;for(let e=0;e1)return!1;if(i===1)return Sd(t,this,n);if(i===-1)return Sd(this,t,n)}return this.path.length===t.path.length||(this.path.length>t.path.length?Ps(this.path,e):Ps(t.path,e))}hasSameParentAs(t){return this.root!==t.root?!1:St(this.getParentPath(),t.getParentPath())=="same"}getTransformedByOperation(t){let e;switch(t.type){case"insert":e=this._getTransformedByInsertOperation(t);break;case"move":case"remove":case"reinsert":e=this._getTransformedByMoveOperation(t);break;case"split":e=this._getTransformedBySplitOperation(t);break;case"merge":e=this._getTransformedByMergeOperation(t);break;default:e=O._createAt(this)}return e}_getTransformedByInsertOperation(t){return this._getTransformedByInsertion(t.position,t.howMany)}_getTransformedByMoveOperation(t){return this._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany)}_getTransformedBySplitOperation(t){const e=t.movedRange;return e.containsPosition(this)||e.start.isEqual(this)&&this.stickiness=="toNext"?this._getCombined(t.splitPosition,t.moveTargetPosition):t.graveyardPosition?this._getTransformedByMove(t.graveyardPosition,t.insertionPosition,1):this._getTransformedByInsertion(t.insertionPosition,1)}_getTransformedByMergeOperation(t){const e=t.movedRange;let n;return e.containsPosition(this)||e.start.isEqual(this)?(n=this._getCombined(t.sourcePosition,t.targetPosition),t.sourcePosition.isBefore(t.targetPosition)&&(n=n._getTransformedByDeletion(t.deletionPosition,1))):n=this.isEqual(t.deletionPosition)?O._createAt(t.deletionPosition):this._getTransformedByMove(t.deletionPosition,t.graveyardPosition,1),n}_getTransformedByDeletion(t,e){const n=O._createAt(this);if(this.root!=t.root)return n;if(St(t.getParentPath(),this.getParentPath())=="same"){if(t.offsetthis.offset)return null;n.offset-=e}}else if(St(t.getParentPath(),this.getParentPath())=="prefix"){const i=t.path.length-1;if(t.offset<=this.path[i]){if(t.offset+e>this.path[i])return null;n.path[i]-=e}}return n}_getTransformedByInsertion(t,e){const n=O._createAt(this);if(this.root!=t.root)return n;if(St(t.getParentPath(),this.getParentPath())=="same")(t.offset=i;){if(n.path[s]+a!==r.maxOffset)return!1;a=1,s--,r=r.parent}return!0}(o,e+1)}function Ps(o,t){for(;te+1;){const r=i.maxOffset-n.offset;r!==0&&t.push(new B(n,n.getShiftedBy(r))),n.path=n.path.slice(0,-1),n.offset++,i=i.parent}for(;n.path.length<=this.end.path.length;){const r=this.end.path[n.path.length-1],s=r-n.offset;s!==0&&t.push(new B(n,n.getShiftedBy(s))),n.offset=r,n.path.push(0)}return t}getWalker(t={}){return t.boundaries=this,new tn(t)}*getItems(t={}){t.boundaries=this,t.ignoreElementEnd=!0;const e=new tn(t);for(const n of e)yield n.item}*getPositions(t={}){t.boundaries=this;const e=new tn(t);yield e.position;for(const n of e)yield n.nextPosition}getTransformedByOperation(t){switch(t.type){case"insert":return this._getTransformedByInsertOperation(t);case"move":case"remove":case"reinsert":return this._getTransformedByMoveOperation(t);case"split":return[this._getTransformedBySplitOperation(t)];case"merge":return[this._getTransformedByMergeOperation(t)]}return[new B(this.start,this.end)]}getTransformedByOperations(t){const e=[new B(this.start,this.end)];for(const n of t)for(let i=0;i0?new this(n,i):new this(i,n)}static _createIn(t){return new this(O._createAt(t,0),O._createAt(t,t.maxOffset))}static _createOn(t){return this._createFromPositionAndShift(O._createBefore(t),t.offsetSize)}static _createFromRanges(t){if(t.length===0)throw new _("range-create-from-ranges-empty-array",null);if(t.length==1)return t[0].clone();const e=t[0];t.sort((r,s)=>r.start.isAfter(s.start)?1:-1);const n=t.indexOf(e),i=new this(e.start,e.end);if(n>0)for(let r=n-1;t[r].end.isEqual(i.start);r++)i.start=O._createAt(t[r].start);for(let r=n+1;r{if(e.viewPosition)return;const n=this._modelToViewMapping.get(e.modelPosition.parent);if(!n)throw new _("mapping-model-position-view-parent-not-found",this,{modelPosition:e.modelPosition});e.viewPosition=this.findPositionIn(n,e.modelPosition.offset)},{priority:"low"}),this.on("viewToModelPosition",(t,e)=>{if(e.modelPosition)return;const n=this.findMappedViewAncestor(e.viewPosition),i=this._viewToModelMapping.get(n),r=this._toModelOffset(e.viewPosition.parent,e.viewPosition.offset,n);e.modelPosition=O._createAt(i,r)},{priority:"low"})}bindElements(t,e){this._modelToViewMapping.set(t,e),this._viewToModelMapping.set(e,t)}unbindViewElement(t,e={}){const n=this.toModelElement(t);if(this._elementToMarkerNames.has(t))for(const i of this._elementToMarkerNames.get(t))this._unboundMarkerNames.add(i);e.defer?this._deferredBindingRemovals.set(t,t.root):(this._viewToModelMapping.delete(t),this._modelToViewMapping.get(n)==t&&this._modelToViewMapping.delete(n))}unbindModelElement(t){const e=this.toViewElement(t);this._modelToViewMapping.delete(t),this._viewToModelMapping.get(e)==t&&this._viewToModelMapping.delete(e)}bindElementToMarker(t,e){const n=this._markerNameToElements.get(e)||new Set;n.add(t);const i=this._elementToMarkerNames.get(t)||new Set;i.add(e),this._markerNameToElements.set(e,n),this._elementToMarkerNames.set(t,i)}unbindElementFromMarkerName(t,e){const n=this._markerNameToElements.get(e);n&&(n.delete(t),n.size==0&&this._markerNameToElements.delete(e));const i=this._elementToMarkerNames.get(t);i&&(i.delete(e),i.size==0&&this._elementToMarkerNames.delete(t))}flushUnboundMarkerNames(){const t=Array.from(this._unboundMarkerNames);return this._unboundMarkerNames.clear(),t}flushDeferredBindings(){for(const[t,e]of this._deferredBindingRemovals)t.root==e&&this.unbindViewElement(t);this._deferredBindingRemovals=new Map}clearBindings(){this._modelToViewMapping=new WeakMap,this._viewToModelMapping=new WeakMap,this._markerNameToElements=new Map,this._elementToMarkerNames=new Map,this._unboundMarkerNames=new Set,this._deferredBindingRemovals=new Map}toModelElement(t){return this._viewToModelMapping.get(t)}toViewElement(t){return this._modelToViewMapping.get(t)}toModelRange(t){return new B(this.toModelPosition(t.start),this.toModelPosition(t.end))}toViewRange(t){return new nt(this.toViewPosition(t.start),this.toViewPosition(t.end))}toModelPosition(t){const e={viewPosition:t,mapper:this};return this.fire("viewToModelPosition",e),e.modelPosition}toViewPosition(t,e={}){const n={modelPosition:t,mapper:this,isPhantom:e.isPhantom};return this.fire("modelToViewPosition",n),n.viewPosition}markerNameToElements(t){const e=this._markerNameToElements.get(t);if(!e)return null;const n=new Set;for(const i of e)if(i.is("attributeElement"))for(const r of i.getElementsWithSameId())n.add(r);else n.add(i);return n}registerViewToModelLength(t,e){this._viewToModelLengthCallbacks.set(t,e)}findMappedViewAncestor(t){let e=t.parent;for(;!this._viewToModelMapping.has(e);)e=e.parent;return e}_toModelOffset(t,e,n){if(n!=t)return this._toModelOffset(t.parent,t.index,n)+this._toModelOffset(t,e,t);if(t.is("$text"))return e;let i=0;for(let r=0;r1?t[0]+":"+t[1]:t[0]}var dA=Object.defineProperty,hA=Object.defineProperties,uA=Object.getOwnPropertyDescriptors,Md=Object.getOwnPropertySymbols,gA=Object.prototype.hasOwnProperty,pA=Object.prototype.propertyIsEnumerable,Bd=(o,t,e)=>t in o?dA(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Ls=(o,t)=>{for(var e in t||(t={}))gA.call(t,e)&&Bd(o,e,t[e]);if(Md)for(var e of Md(t))pA.call(t,e)&&Bd(o,e,t[e]);return o},Nd=(o,t)=>hA(o,uA(t));class Pd extends kt(){constructor(t){super(),this._conversionApi=Ls({dispatcher:this},t),this._firedEventsMap=new WeakMap}convertChanges(t,e,n){const i=this._createConversionApi(n,t.getRefreshedItems());for(const s of t.getMarkersToRemove())this._convertMarkerRemove(s.name,s.range,i);const r=this._reduceChanges(t.getChanges());for(const s of r)s.type==="insert"?this._convertInsert(B._createFromPositionAndShift(s.position,s.length),i):s.type==="reinsert"?this._convertReinsert(B._createFromPositionAndShift(s.position,s.length),i):s.type==="remove"?this._convertRemove(s.position,s.length,s.name,i):this._convertAttribute(s.range,s.attributeKey,s.attributeOldValue,s.attributeNewValue,i);i.mapper.flushDeferredBindings();for(const s of i.mapper.flushUnboundMarkerNames()){const a=e.get(s).getRange();this._convertMarkerRemove(s,a,i),this._convertMarkerAdd(s,a,i)}for(const s of t.getMarkersToAdd())this._convertMarkerAdd(s.name,s.range,i);i.consumable.verifyAllConsumed("insert")}convert(t,e,n,i={}){const r=this._createConversionApi(n,void 0,i);this._convertInsert(t,r);for(const[s,a]of e)this._convertMarkerAdd(s,a,r);r.consumable.verifyAllConsumed("insert")}convertSelection(t,e,n){const i=this._createConversionApi(n);this.fire("cleanSelection",{selection:t},i);const r=t.getFirstPosition().root;if(!i.mapper.toViewElement(r))return;const s=Array.from(e.getMarkersAtPosition(t.getFirstPosition()));if(this._addConsumablesForSelection(i.consumable,t,s),this.fire("selection",{selection:t},i),t.isCollapsed){for(const a of s)if(i.consumable.test(t,"addMarker:"+a.name)){const c=a.getRange();if(!mA(t.getFirstPosition(),a,i.mapper))continue;const l={item:t,markerName:a.name,markerRange:c};this.fire(`addMarker:${a.name}`,l,i)}for(const a of t.getAttributeKeys())if(i.consumable.test(t,"attribute:"+a)){const c={item:t,range:t.getFirstRange(),attributeKey:a,attributeOldValue:null,attributeNewValue:t.getAttribute(a)};this.fire(`attribute:${a}:$text`,c,i)}}}_convertInsert(t,e,n={}){n.doNotAddConsumables||this._addConsumablesForInsert(e.consumable,t);for(const i of Array.from(t.getWalker({shallow:!0})).map(Ld))this._testAndFire("insert",i,e)}_convertRemove(t,e,n,i){this.fire(`remove:${n}`,{position:t,length:e},i)}_convertAttribute(t,e,n,i,r){this._addConsumablesForRange(r.consumable,t,`attribute:${e}`);for(const s of t){const a={item:s.item,range:B._createFromPositionAndShift(s.previousPosition,s.length),attributeKey:e,attributeOldValue:n,attributeNewValue:i};this._testAndFire(`attribute:${e}`,a,r)}}_convertReinsert(t,e){const n=Array.from(t.getWalker({shallow:!0}));this._addConsumablesForInsert(e.consumable,n);for(const i of n.map(Ld))this._testAndFire("insert",Nd(Ls({},i),{reconversion:!0}),e)}_convertMarkerAdd(t,e,n){if(e.root.rootName=="$graveyard")return;const i=`addMarker:${t}`;if(n.consumable.add(e,i),this.fire(i,{markerName:t,markerRange:e},n),n.consumable.consume(e,i)){this._addConsumablesForRange(n.consumable,e,i);for(const r of e.getItems()){if(!n.consumable.test(r,i))continue;const s={item:r,range:B._createOn(r),markerName:t,markerRange:e};this.fire(i,s,n)}}}_convertMarkerRemove(t,e,n){e.root.rootName!="$graveyard"&&this.fire(`removeMarker:${t}`,{markerName:t,markerRange:e},n)}_reduceChanges(t){const e={changes:t};return this.fire("reduceChanges",e),e.changes}_addConsumablesForInsert(t,e){for(const n of e){const i=n.item;if(t.test(i,"insert")===null){t.add(i,"insert");for(const r of i.getAttributeKeys())t.add(i,"attribute:"+r)}}return t}_addConsumablesForRange(t,e,n){for(const i of e.getItems())t.add(i,n);return t}_addConsumablesForSelection(t,e,n){t.add(e,"selection");for(const i of n)t.add(e,"addMarker:"+i.name);for(const i of e.getAttributeKeys())t.add(e,"attribute:"+i);return t}_testAndFire(t,e,n){const i=function(c,l){const d=l.item.is("element")?l.item.name:"$text";return`${c}:${d}`}(t,e),r=e.item.is("$textProxy")?n.consumable._getSymbolForTextProxy(e.item):e.item,s=this._firedEventsMap.get(n),a=s.get(r);if(a){if(a.has(i))return;a.add(i)}else s.set(r,new Set([i]));this.fire(i,e,n)}_testAndFireAddAttributes(t,e){const n={item:t,range:B._createOn(t)};for(const i of n.item.getAttributeKeys())n.attributeKey=i,n.attributeOldValue=null,n.attributeNewValue=n.item.getAttribute(i),this._testAndFire(`attribute:${i}`,n,e)}_createConversionApi(t,e=new Set,n={}){const i=Nd(Ls({},this._conversionApi),{consumable:new lA,writer:t,options:n,convertItem:r=>this._convertInsert(B._createOn(r),i),convertChildren:r=>this._convertInsert(B._createIn(r),i,{doNotAddConsumables:!0}),convertAttributes:r=>this._testAndFireAddAttributes(r,i),canReuseView:r=>!e.has(i.mapper.toModelElement(r))});return this._firedEventsMap.set(i,new Map),i}}function mA(o,t,e){const n=t.getRange(),i=Array.from(o.getAncestors());return i.shift(),i.reverse(),!i.some(r=>{if(n.containsItem(r))return!!e.toViewElement(r).getCustomProperty("addHighlight")})}function Ld(o){return{item:o.item,range:B._createFromPositionAndShift(o.previousPosition,o.length)}}class ge extends kt(bn){constructor(...t){super(),this._lastRangeBackward=!1,this._attrs=new Map,this._ranges=[],t.length&&this.setTo(...t)}get anchor(){if(this._ranges.length>0){const t=this._ranges[this._ranges.length-1];return this._lastRangeBackward?t.end:t.start}return null}get focus(){if(this._ranges.length>0){const t=this._ranges[this._ranges.length-1];return this._lastRangeBackward?t.start:t.end}return null}get isCollapsed(){return this._ranges.length===1&&this._ranges[0].isCollapsed}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}isEqual(t){if(this.rangeCount!=t.rangeCount)return!1;if(this.rangeCount===0)return!0;if(!this.anchor.isEqual(t.anchor)||!this.focus.isEqual(t.focus))return!1;for(const e of this._ranges){let n=!1;for(const i of t._ranges)if(e.isEqual(i)){n=!0;break}if(!n)return!1}return!0}*getRanges(){for(const t of this._ranges)yield new B(t.start,t.end)}getFirstRange(){let t=null;for(const e of this._ranges)t&&!e.start.isBefore(t.start)||(t=e);return t?new B(t.start,t.end):null}getLastRange(){let t=null;for(const e of this._ranges)t&&!e.end.isAfter(t.end)||(t=e);return t?new B(t.start,t.end):null}getFirstPosition(){const t=this.getFirstRange();return t?t.start.clone():null}getLastPosition(){const t=this.getLastRange();return t?t.end.clone():null}setTo(...t){let[e,n,i]=t;if(typeof n=="object"&&(i=n,n=void 0),e===null)this._setRanges([]);else if(e instanceof ge)this._setRanges(e.getRanges(),e.isBackward);else if(e&&typeof e.getRanges=="function")this._setRanges(e.getRanges(),e.isBackward);else if(e instanceof B)this._setRanges([e],!!i&&!!i.backward);else if(e instanceof O)this._setRanges([new B(e)]);else if(e instanceof jn){const r=!!i&&!!i.backward;let s;if(n=="in")s=B._createIn(e);else if(n=="on")s=B._createOn(e);else{if(n===void 0)throw new _("model-selection-setto-required-second-parameter",[this,e]);s=new B(O._createAt(e,n))}this._setRanges([s],r)}else{if(!Gt(e))throw new _("model-selection-setto-not-selectable",[this,e]);this._setRanges(e,i&&!!i.backward)}}_setRanges(t,e=!1){const n=Array.from(t),i=n.some(r=>{if(!(r instanceof B))throw new _("model-selection-set-ranges-not-range",[this,t]);return this._ranges.every(s=>!s.isEqual(r))});(n.length!==this._ranges.length||i)&&(this._replaceAllRanges(n),this._lastRangeBackward=!!e,this.fire("change:range",{directChange:!0}))}setFocus(t,e){if(this.anchor===null)throw new _("model-selection-setfocus-no-ranges",[this,t]);const n=O._createAt(t,e);if(n.compareWith(this.focus)=="same")return;const i=this.anchor;this._ranges.length&&this._popRange(),n.compareWith(i)=="before"?(this._pushRange(new B(n,i)),this._lastRangeBackward=!0):(this._pushRange(new B(i,n)),this._lastRangeBackward=!1),this.fire("change:range",{directChange:!0})}getAttribute(t){return this._attrs.get(t)}getAttributes(){return this._attrs.entries()}getAttributeKeys(){return this._attrs.keys()}hasAttribute(t){return this._attrs.has(t)}removeAttribute(t){this.hasAttribute(t)&&(this._attrs.delete(t),this.fire("change:attribute",{attributeKeys:[t],directChange:!0}))}setAttribute(t,e){this.getAttribute(t)!==e&&(this._attrs.set(t,e),this.fire("change:attribute",{attributeKeys:[t],directChange:!0}))}getSelectedElement(){return this.rangeCount!==1?null:this.getFirstRange().getContainedElement()}*getSelectedBlocks(){const t=new WeakSet;for(const e of this.getRanges()){const n=zd(e.start,t);kA(n,e)&&(yield n);for(const r of e.getWalker()){const s=r.item;r.type=="elementEnd"&&fA(s,t,e)&&(yield s)}const i=zd(e.end,t);bA(i,e)&&(yield i)}}containsEntireContent(t=this.anchor.root){const e=O._createAt(t,0),n=O._createAt(t,"end");return e.isTouching(this.getFirstPosition())&&n.isTouching(this.getLastPosition())}_pushRange(t){this._checkRange(t),this._ranges.push(new B(t.start,t.end))}_checkRange(t){for(let e=0;e0;)this._popRange()}_popRange(){this._ranges.pop()}}function Od(o,t){return!t.has(o)&&(t.add(o),o.root.document.model.schema.isBlock(o)&&!!o.parent)}function fA(o,t,e){return Od(o,t)&&Os(o,e)}function zd(o,t){const e=o.parent.root.document.model.schema,n=o.parent.getAncestors({parentFirst:!0,includeSelf:!0});let i=!1;const r=n.find(s=>!i&&(i=e.isLimit(s),!i&&Od(s,t)));return n.forEach(s=>t.add(s)),r}function Os(o,t){const e=function(n){const i=n.root.document.model.schema;let r=n.parent;for(;r;){if(i.isBlock(r))return r;r=r.parent}}(o);return e?!t.containsRange(B._createOn(e),!0):!0}function kA(o,t){return!!o&&(!(!t.isCollapsed&&!o.isEmpty)||!t.start.isTouching(O._createAt(o,o.maxOffset))&&Os(o,t))}function bA(o,t){return!!o&&(!(!t.isCollapsed&&!o.isEmpty)||!t.end.isTouching(O._createAt(o,0))&&Os(o,t))}ge.prototype.is=function(o){return o==="selection"||o==="model:selection"};class pe extends kt(B){constructor(t,e){super(t,e),wA.call(this)}detach(){this.stopListening()}toRange(){return new B(this.start,this.end)}static fromRange(t){return new pe(t.start,t.end)}}function wA(){this.listenTo(this.root.document.model,"applyOperation",(o,t)=>{const e=t[0];e.isDocumentOperation&&AA.call(this,e)},{priority:"low"})}function AA(o){const t=this.getTransformedByOperation(o),e=B._createFromRanges(t),n=!e.isEqual(this),i=function(s,a){switch(a.type){case"insert":return s.containsPosition(a.position);case"move":case"remove":case"reinsert":case"merge":return s.containsPosition(a.sourcePosition)||s.start.isEqual(a.sourcePosition)||s.containsPosition(a.targetPosition);case"split":return s.containsPosition(a.splitPosition)||s.containsPosition(a.insertionPosition)}return!1}(this,o);let r=null;if(n){e.root.rootName=="$graveyard"&&(r=o.type=="remove"?o.sourcePosition:o.deletionPosition);const s=this.toRange();this.start=e.start,this.end=e.end,this.fire("change:range",s,{deletionPosition:r})}else i&&this.fire("change:content",this.toRange(),{deletionPosition:r})}pe.prototype.is=function(o){return o==="liveRange"||o==="model:liveRange"||o=="range"||o==="model:range"};const Ki="selection:";class ze extends kt(bn){constructor(t){super(),this._selection=new CA(t),this._selection.delegate("change:range").to(this),this._selection.delegate("change:attribute").to(this),this._selection.delegate("change:marker").to(this)}get isCollapsed(){return this._selection.isCollapsed}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get rangeCount(){return this._selection.rangeCount}get hasOwnRange(){return this._selection.hasOwnRange}get isBackward(){return this._selection.isBackward}get isGravityOverridden(){return this._selection.isGravityOverridden}get markers(){return this._selection.markers}get _ranges(){return this._selection._ranges}getRanges(){return this._selection.getRanges()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getSelectedBlocks(){return this._selection.getSelectedBlocks()}getSelectedElement(){return this._selection.getSelectedElement()}containsEntireContent(t){return this._selection.containsEntireContent(t)}destroy(){this._selection.destroy()}getAttributeKeys(){return this._selection.getAttributeKeys()}getAttributes(){return this._selection.getAttributes()}getAttribute(t){return this._selection.getAttribute(t)}hasAttribute(t){return this._selection.hasAttribute(t)}refresh(){this._selection.updateMarkers(),this._selection._updateAttributes(!1)}observeMarkers(t){this._selection.observeMarkers(t)}_setFocus(t,e){this._selection.setFocus(t,e)}_setTo(...t){this._selection.setTo(...t)}_setAttribute(t,e){this._selection.setAttribute(t,e)}_removeAttribute(t){this._selection.removeAttribute(t)}_getStoredAttributes(){return this._selection.getStoredAttributes()}_overrideGravity(){return this._selection.overrideGravity()}_restoreGravity(t){this._selection.restoreGravity(t)}static _getStoreAttributeKey(t){return Ki+t}static _isStoreAttributeKey(t){return t.startsWith(Ki)}}ze.prototype.is=function(o){return o==="selection"||o=="model:selection"||o=="documentSelection"||o=="model:documentSelection"};class CA extends ge{constructor(t){super(),this.markers=new Me({idProperty:"name"}),this._attributePriority=new Map,this._selectionRestorePosition=null,this._hasChangedRange=!1,this._overriddenGravityRegister=new Set,this._observedMarkers=new Set,this._model=t.model,this._document=t,this.listenTo(this._model,"applyOperation",(e,n)=>{const i=n[0];i.isDocumentOperation&&i.type!="marker"&&i.type!="rename"&&i.type!="noop"&&(this._ranges.length==0&&this._selectionRestorePosition&&this._fixGraveyardSelection(this._selectionRestorePosition),this._selectionRestorePosition=null,this._hasChangedRange&&(this._hasChangedRange=!1,this.fire("change:range",{directChange:!1})))},{priority:"lowest"}),this.on("change:range",()=>{this._validateSelectionRanges(this.getRanges())}),this.listenTo(this._model.markers,"update",(e,n,i,r)=>{this._updateMarker(n,r)}),this.listenTo(this._document,"change",(e,n)=>{(function(i,r){const s=i.document.differ;for(const a of s.getChanges()){if(a.type!="insert")continue;const c=a.position.parent;a.length===c.maxOffset&&i.enqueueChange(r,l=>{const d=Array.from(c.getAttributeKeys()).filter(h=>h.startsWith(Ki));for(const h of d)l.removeAttribute(h,c)})}})(this._model,n)})}get isCollapsed(){return this._ranges.length===0?this._document._getDefaultRange().isCollapsed:super.isCollapsed}get anchor(){return super.anchor||this._document._getDefaultRange().start}get focus(){return super.focus||this._document._getDefaultRange().end}get rangeCount(){return this._ranges.length?this._ranges.length:1}get hasOwnRange(){return this._ranges.length>0}get isGravityOverridden(){return!!this._overriddenGravityRegister.size}destroy(){for(let t=0;t{if(this._hasChangedRange=!0,e.root==this._document.graveyard){this._selectionRestorePosition=r.deletionPosition;const s=this._ranges.indexOf(e);this._ranges.splice(s,1),e.detach()}}),e}updateMarkers(){if(!this._observedMarkers.size)return;const t=[];let e=!1;for(const i of this._model.markers){const r=i.name.split(":",1)[0];if(!this._observedMarkers.has(r))continue;const s=i.getRange();for(const a of this.getRanges())s.containsRange(a,!a.isCollapsed)&&t.push(i)}const n=Array.from(this.markers);for(const i of t)this.markers.has(i)||(this.markers.add(i),e=!0);for(const i of Array.from(this.markers))t.includes(i)||(this.markers.remove(i),e=!0);e&&this.fire("change:marker",{oldMarkers:n,directChange:!1})}_updateMarker(t,e){const n=t.name.split(":",1)[0];if(!this._observedMarkers.has(n))return;let i=!1;const r=Array.from(this.markers),s=this.markers.has(t);if(e){let a=!1;for(const c of this.getRanges())if(e.containsRange(c,!c.isCollapsed)){a=!0;break}a&&!s?(this.markers.add(t),i=!0):!a&&s&&(this.markers.remove(t),i=!0)}else s&&(this.markers.remove(t),i=!0);i&&this.fire("change:marker",{oldMarkers:r,directChange:!1})}_updateAttributes(t){const e=We(this._getSurroundingAttributes()),n=We(this.getAttributes());if(t)this._attributePriority=new Map,this._attrs=new Map;else for(const[r,s]of this._attributePriority)s=="low"&&(this._attrs.delete(r),this._attributePriority.delete(r));this._setAttributesTo(e);const i=[];for(const[r,s]of this.getAttributes())n.has(r)&&n.get(r)===s||i.push(r);for(const[r]of n)this.hasAttribute(r)||i.push(r);i.length>0&&this.fire("change:attribute",{attributeKeys:i,directChange:!1})}_setAttribute(t,e,n=!0){const i=n?"normal":"low";return i=="low"&&this._attributePriority.get(t)=="normal"?!1:super.getAttribute(t)!==e&&(this._attrs.set(t,e),this._attributePriority.set(t,i),!0)}_removeAttribute(t,e=!0){const n=e?"normal":"low";return(n!="low"||this._attributePriority.get(t)!="normal")&&(this._attributePriority.set(t,n),!!super.hasAttribute(t)&&(this._attrs.delete(t),!0))}_setAttributesTo(t){const e=new Set;for(const[n,i]of this.getAttributes())t.get(n)!==i&&this._removeAttribute(n,!1);for(const[n,i]of t)this._setAttribute(n,i,!1)&&e.add(n);return e}*getStoredAttributes(){const t=this.getFirstPosition().parent;if(this.isCollapsed&&t.isEmpty)for(const e of t.getAttributeKeys())e.startsWith(Ki)&&(yield[e.substr(10),t.getAttribute(e)])}_getSurroundingAttributes(){const t=this.getFirstPosition(),e=this._model.schema;if(t.root.rootName=="$graveyard")return null;let n=null;if(this.isCollapsed){const i=t.textNode?t.textNode:t.nodeBefore,r=t.textNode?t.textNode:t.nodeAfter;if(this.isGravityOverridden||(n=Zo(i,e)),n||(n=Zo(r,e)),!this.isGravityOverridden&&!n){let s=i;for(;s&&!n;)s=s.previousSibling,n=Zo(s,e)}if(!n){let s=r;for(;s&&!n;)s=s.nextSibling,n=Zo(s,e)}n||(n=this.getStoredAttributes())}else{const i=this.getFirstRange();for(const r of i){if(r.item.is("element")&&e.isObject(r.item)){n=Zo(r.item,e);break}if(r.type=="text"){n=r.item.getAttributes();break}}}return n}_fixGraveyardSelection(t){const e=this._model.schema.getNearestSelectionRange(t);e&&this._pushRange(e)}}function Zo(o,t){if(!o)return null;if(o instanceof Oe||o instanceof yt)return o.getAttributes();if(!t.isInline(o))return null;if(!t.isObject(o))return[];const e=[];for(const[n,i]of o.getAttributes())t.checkAttribute("$text",n)&&t.getAttributeProperties(n).copyFromObject!==!1&&e.push([n,i]);return e}class Rd{constructor(t){this._dispatchers=t}add(t){for(const e of this._dispatchers)t(e);return this}}class _A extends Rd{elementToElement(t){return this.add(function(e){const n=Vd(e.model),i=Jo(e.view,"container");return n.attributes.length&&(n.children=!0),r=>{r.on(`insert:${n.name}`,function(s,a=yA){return(c,l,d)=>{if(!a(l.item,d.consumable,{preflight:!0}))return;const h=s(l.item,d,l);if(!h)return;a(l.item,d.consumable);const u=d.mapper.toViewPosition(l.range.start);d.mapper.bindElements(l.item,h),d.writer.insert(u,h),d.convertAttributes(l.item),Wd(h,l.item.getChildren(),d,{reconversion:l.reconversion})}}(i,Gd(n)),{priority:e.converterPriority||"normal"}),(n.children||n.attributes.length)&&r.on("reduceChanges",qd(n),{priority:"low"})}}(t))}elementToStructure(t){return this.add(function(e){const n=Vd(e.model),i=Jo(e.view,"container");return n.children=!0,r=>{if(r._conversionApi.schema.checkChild(n.name,"$text"))throw new _("conversion-element-to-structure-disallowed-text",r,{elementName:n.name});var s,a;r.on(`insert:${n.name}`,(s=i,a=Gd(n),(c,l,d)=>{if(!a(l.item,d.consumable,{preflight:!0}))return;const h=new Map;d.writer._registerSlotFactory(function(p,k,b){return(A,E)=>{const M=A.createContainerElement("$slot");let z=null;if(E==="children")z=Array.from(p.getChildren());else{if(typeof E!="function")throw new _("conversion-slot-mode-unknown",b.dispatcher,{modeOrFilter:E});z=Array.from(p.getChildren()).filter(G=>E(G))}return k.set(M,z),M}}(l.item,h,d));const u=s(l.item,d,l);if(d.writer._clearSlotFactory(),!u)return;(function(p,k,b){const A=Array.from(k.values()).flat(),E=new Set(A);if(E.size!=A.length)throw new _("conversion-slot-filter-overlap",b.dispatcher,{element:p});if(E.size!=p.childCount)throw new _("conversion-slot-filter-incomplete",b.dispatcher,{element:p})})(l.item,h,d),a(l.item,d.consumable);const g=d.mapper.toViewPosition(l.range.start);d.mapper.bindElements(l.item,u),d.writer.insert(g,u),d.convertAttributes(l.item),function(p,k,b,A){b.mapper.on("modelToViewPosition",z,{priority:"highest"});let E=null,M=null;for([E,M]of k)Wd(p,M,b,A),b.writer.move(b.writer.createRangeIn(E),b.writer.createPositionBefore(E)),b.writer.remove(E);function z(G,et){const st=et.modelPosition.nodeAfter,Lt=M.indexOf(st);Lt<0||(et.viewPosition=et.mapper.findPositionIn(E,Lt))}b.mapper.off("modelToViewPosition",z)}(u,h,d,{reconversion:l.reconversion})}),{priority:e.converterPriority||"normal"}),r.on("reduceChanges",qd(n),{priority:"low"})}}(t))}attributeToElement(t){return this.add(function(e){e=kn(e);let n=e.model;typeof n=="string"&&(n={key:n});let i=`attribute:${n.key}`;if(n.name&&(i+=":"+n.name),n.values)for(const s of n.values)e.view[s]=Jo(e.view[s],"attribute");else e.view=Jo(e.view,"attribute");const r=Hd(e);return s=>{s.on(i,function(a){return(c,l,d)=>{if(!d.consumable.test(l.item,c.name))return;const h=a(l.attributeOldValue,d,l),u=a(l.attributeNewValue,d,l);if(!h&&!u)return;d.consumable.consume(l.item,c.name);const g=d.writer,p=g.document.selection;if(l.item instanceof ge||l.item instanceof ze)g.wrap(p.getFirstRange(),u);else{let k=d.mapper.toViewRange(l.range);l.attributeOldValue!==null&&h&&(k=g.unwrap(k,h)),l.attributeNewValue!==null&&u&&g.wrap(k,u)}}}(r),{priority:e.converterPriority||"normal"})}}(t))}attributeToAttribute(t){return this.add(function(e){e=kn(e);let n=e.model;typeof n=="string"&&(n={key:n});let i=`attribute:${n.key}`;if(n.name&&(i+=":"+n.name),n.values)for(const s of n.values)e.view[s]=Ud(e.view[s]);else e.view=Ud(e.view);const r=Hd(e);return s=>{var a;s.on(i,(a=r,(c,l,d)=>{if(!d.consumable.test(l.item,c.name))return;const h=a(l.attributeOldValue,d,l),u=a(l.attributeNewValue,d,l);if(!h&&!u)return;d.consumable.consume(l.item,c.name);const g=d.mapper.toViewElement(l.item),p=d.writer;if(!g)throw new _("conversion-attribute-to-attribute-on-text",d.dispatcher,l);if(l.attributeOldValue!==null&&h)if(h.key=="class"){const k=typeof h.value=="string"?h.value.split(/\s+/):h.value;for(const b of k)p.removeClass(b,g)}else if(h.key=="style")if(typeof h.value=="string"){const k=new As(p.document.stylesProcessor);k.setTo(h.value);for(const[b]of k.getStylesEntries())p.removeStyle(b,g)}else{const k=Object.keys(h.value);for(const b of k)p.removeStyle(b,g)}else p.removeAttribute(h.key,g);if(l.attributeNewValue!==null&&u)if(u.key=="class"){const k=typeof u.value=="string"?u.value.split(/\s+/):u.value;for(const b of k)p.addClass(b,g)}else if(u.key=="style")if(typeof u.value=="string"){const k=new As(p.document.stylesProcessor);k.setTo(u.value);for(const[b,A]of k.getStylesEntries())p.setStyle(b,A,g)}else{const k=Object.keys(u.value);for(const b of k)p.setStyle(b,u.value[b],g)}else p.setAttribute(u.key,u.value,g)}),{priority:e.converterPriority||"normal"})}}(t))}markerToElement(t){return this.add(function(e){const n=Jo(e.view,"ui");return i=>{var r;i.on(`addMarker:${e.model}`,(r=n,(s,a,c)=>{a.isOpening=!0;const l=r(a,c);a.isOpening=!1;const d=r(a,c);if(!l||!d)return;const h=a.markerRange;if(h.isCollapsed&&!c.consumable.consume(h,s.name))return;for(const p of h)if(!c.consumable.consume(p.item,s.name))return;const u=c.mapper,g=c.writer;g.insert(u.toViewPosition(h.start),l),c.mapper.bindElementToMarker(l,a.markerName),h.isCollapsed||(g.insert(u.toViewPosition(h.end),d),c.mapper.bindElementToMarker(d,a.markerName)),s.stop()}),{priority:e.converterPriority||"normal"}),i.on(`removeMarker:${e.model}`,(s,a,c)=>{const l=c.mapper.markerNameToElements(a.markerName);if(l){for(const d of l)c.mapper.unbindElementFromMarkerName(d,a.markerName),c.writer.clear(c.writer.createRangeOn(d),d);c.writer.clearClonedElementsGroup(a.markerName),s.stop()}},{priority:e.converterPriority||"normal"})}}(t))}markerToHighlight(t){return this.add(function(e){return n=>{var i;n.on(`addMarker:${e.model}`,(i=e.view,(r,s,a)=>{if(!s.item||!(s.item instanceof ge||s.item instanceof ze||s.item.is("$textProxy")))return;const c=zs(i,s,a);if(!c||!a.consumable.consume(s.item,r.name))return;const l=a.writer,d=jd(l,c),h=l.document.selection;if(s.item instanceof ge||s.item instanceof ze)l.wrap(h.getFirstRange(),d);else{const u=a.mapper.toViewRange(s.range),g=l.wrap(u,d);for(const p of g.getItems())if(p.is("attributeElement")&&p.isSimilar(d)){a.mapper.bindElementToMarker(p,s.markerName);break}}}),{priority:e.converterPriority||"normal"}),n.on(`addMarker:${e.model}`,function(r){return(s,a,c)=>{if(!a.item||!(a.item instanceof Ct))return;const l=zs(r,a,c);if(!l||!c.consumable.test(a.item,s.name))return;const d=c.mapper.toViewElement(a.item);if(d&&d.getCustomProperty("addHighlight")){c.consumable.consume(a.item,s.name);for(const h of B._createIn(a.item))c.consumable.consume(h.item,s.name);d.getCustomProperty("addHighlight")(d,l,c.writer),c.mapper.bindElementToMarker(d,a.markerName)}}}(e.view),{priority:e.converterPriority||"normal"}),n.on(`removeMarker:${e.model}`,function(r){return(s,a,c)=>{if(a.markerRange.isCollapsed)return;const l=zs(r,a,c);if(!l)return;const d=jd(c.writer,l),h=c.mapper.markerNameToElements(a.markerName);if(h){for(const u of h)c.mapper.unbindElementFromMarkerName(u,a.markerName),u.is("attributeElement")?c.writer.unwrap(c.writer.createRangeOn(u),d):u.getCustomProperty("removeHighlight")(u,l.id,c.writer);c.writer.clearClonedElementsGroup(a.markerName),s.stop()}}}(e.view),{priority:e.converterPriority||"normal"})}}(t))}markerToData(t){return this.add(function(e){e=kn(e);const n=e.model;let i=e.view;return i||(i=r=>({group:n,name:r.substr(e.model.length+1)})),r=>{var s;r.on(`addMarker:${n}`,(s=i,(a,c,l)=>{const d=s(c.markerName,l);if(!d)return;const h=c.markerRange;l.consumable.consume(h,a.name)&&(Fd(h,!1,l,c,d),Fd(h,!0,l,c,d),a.stop())}),{priority:e.converterPriority||"normal"}),r.on(`removeMarker:${n}`,function(a){return(c,l,d)=>{const h=a(l.markerName,d);if(!h)return;const u=d.mapper.markerNameToElements(l.markerName);if(u){for(const p of u)d.mapper.unbindElementFromMarkerName(p,l.markerName),p.is("containerElement")?(g(`data-${h.group}-start-before`,p),g(`data-${h.group}-start-after`,p),g(`data-${h.group}-end-before`,p),g(`data-${h.group}-end-after`,p)):d.writer.clear(d.writer.createRangeOn(p),p);d.writer.clearClonedElementsGroup(l.markerName),c.stop()}function g(p,k){if(k.hasAttribute(p)){const b=new Set(k.getAttribute(p).split(","));b.delete(h.name),b.size==0?d.writer.removeAttribute(p,k):d.writer.setAttribute(p,Array.from(b).join(","),k)}}}}(i),{priority:e.converterPriority||"normal"})}}(t))}}function jd(o,t){const e=o.createAttributeElement("span",t.attributes);return t.classes&&e._addClass(t.classes),typeof t.priority=="number"&&(e._priority=t.priority),e._id=t.id,e}function Fd(o,t,e,n,i){const r=t?o.start:o.end,s=r.nodeAfter&&r.nodeAfter.is("element")?r.nodeAfter:null,a=r.nodeBefore&&r.nodeBefore.is("element")?r.nodeBefore:null;if(s||a){let c,l;t&&s||!t&&!a?(c=s,l=!0):(c=a,l=!1);const d=e.mapper.toViewElement(c);if(d)return void function(h,u,g,p,k,b){const A=`data-${b.group}-${u?"start":"end"}-${g?"before":"after"}`,E=h.hasAttribute(A)?h.getAttribute(A).split(","):[];E.unshift(b.name),p.writer.setAttribute(A,E.join(","),h),p.mapper.bindElementToMarker(h,k.markerName)}(d,t,l,e,n,i)}(function(c,l,d,h,u){const g=`${u.group}-${l?"start":"end"}`,p=u.name?{name:u.name}:null,k=d.writer.createUIElement(g,p);d.writer.insert(c,k),d.mapper.bindElementToMarker(k,h.markerName)})(e.mapper.toViewPosition(r),t,e,n,i)}function Vd(o){return typeof o=="string"&&(o={name:o}),{name:o.name,attributes:o.attributes?Bt(o.attributes):[],children:!!o.children}}function Jo(o,t){return typeof o=="function"?o:(e,n)=>function(i,r,s){typeof i=="string"&&(i={name:i});let a;const c=r.writer,l=Object.assign({},i.attributes);if(s=="container")a=c.createContainerElement(i.name,l);else if(s=="attribute"){const d={priority:i.priority||zn.DEFAULT_PRIORITY};a=c.createAttributeElement(i.name,l,d)}else a=c.createUIElement(i.name,l);if(i.styles){const d=Object.keys(i.styles);for(const h of d)c.setStyle(h,i.styles[h],a)}if(i.classes){const d=i.classes;if(typeof d=="string")c.addClass(d,a);else for(const h of d)c.addClass(h,a)}return a}(o,n,t)}function Hd(o){return o.model.values?(t,e,n)=>{const i=o.view[t];return i?i(t,e,n):null}:o.view}function Ud(o){return typeof o=="string"?t=>({key:o,value:t}):typeof o=="object"?o.value?()=>o:t=>({key:o.key,value:t}):o}function zs(o,t,e){const n=typeof o=="function"?o(t,e):o;return n?(n.priority||(n.priority=10),n.id||(n.id=t.markerName),n):null}function qd(o){const t=function(e){return(n,i)=>{if(!n.is("element",e.name))return!1;if(i.type=="attribute"){if(e.attributes.includes(i.attributeKey))return!0}else if(e.children)return!0;return!1}}(o);return(e,n)=>{const i=[];n.reconvertedElements||(n.reconvertedElements=new Set);for(const r of n.changes){const s=r.type=="attribute"?r.range.start.nodeAfter:r.position.parent;if(s&&t(s,r)){if(!n.reconvertedElements.has(s)){n.reconvertedElements.add(s);const a=O._createBefore(s);let c=i.length;for(let l=i.length-1;l>=0;l--){const d=i[l],h=(d.type=="attribute"?d.range.start:d.position).compareWith(a);if(h=="before"||d.type=="remove"&&h=="same")break;c=l}i.splice(c,0,{type:"remove",name:s.name,position:a,length:1},{type:"reinsert",name:s.name,position:a,length:1})}}else i.push(r)}n.changes=i}}function Gd(o){return(t,e,n={})=>{const i=["insert"];for(const r of o.attributes)t.hasAttribute(r)&&i.push(`attribute:${r}`);return!!i.every(r=>e.test(t,r))&&(n.preflight||i.forEach(r=>e.consume(t,r)),!0)}}function Wd(o,t,e,n){for(const i of t)vA(o.root,i,e,n)||e.convertItem(i)}function vA(o,t,e,n){const{writer:i,mapper:r}=e;if(!n.reconversion)return!1;const s=r.toViewElement(t);return!(!s||s.root==o)&&!!e.canReuseView(s)&&(i.move(i.createRangeOn(s),r.toViewPosition(O._createBefore(t))),!0)}function yA(o,t,{preflight:e}={}){return e?t.test(o,"insert"):t.consume(o,"insert")}function $d(o){const{schema:t,document:e}=o.model;for(const n of e.getRoots())if(n.isEmpty&&!t.checkChild(n,"$text")&&t.checkChild(n,"paragraph"))return o.insertElement("paragraph",n),!0;return!1}function Kd(o,t,e){const n=e.createContext(o);return!!e.checkChild(n,"paragraph")&&!!e.checkChild(n.push("paragraph"),t)}function Yd(o,t){const e=t.createElement("paragraph");return t.insert(e,o),t.createPositionAt(e,0)}var xA=Object.defineProperty,EA=Object.defineProperties,DA=Object.getOwnPropertyDescriptors,Qd=Object.getOwnPropertySymbols,IA=Object.prototype.hasOwnProperty,SA=Object.prototype.propertyIsEnumerable,Zd=(o,t,e)=>t in o?xA(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;class TA extends Rd{elementToElement(t){return this.add(Jd(t))}elementToAttribute(t){return this.add(function(e){e=kn(e),Xd(e);const n=th(e,!1),i=Rs(e.view),r=i?`element:${i}`:"element";return s=>{s.on(r,n,{priority:e.converterPriority||"low"})}}(t))}attributeToAttribute(t){return this.add(function(e){e=kn(e);let n=null;(typeof e.view=="string"||e.view.key)&&(n=function(r){typeof r.view=="string"&&(r.view={key:r.view});const s=r.view.key,a=r.view.value===void 0?/[\s\S]*/:r.view.value;let c;return s=="class"||s=="style"?c={[s=="class"?"classes":"styles"]:a}:c={attributes:{[s]:a}},r.view.name&&(c.name=r.view.name),r.view=c,s}(e)),Xd(e,n);const i=th(e,!0);return r=>{r.on("element",i,{priority:e.converterPriority||"low"})}}(t))}elementToMarker(t){return this.add(function(e){const n=function(s){return(a,c)=>{const l=typeof s=="string"?s:s(a,c);return c.writer.createElement("$marker",{"data-name":l})}}(e.model);return Jd((i=((s,a)=>{for(var c in a||(a={}))IA.call(a,c)&&Zd(s,c,a[c]);if(Qd)for(var c of Qd(a))SA.call(a,c)&&Zd(s,c,a[c]);return s})({},e),r={model:n},EA(i,DA(r))));var i,r}(t))}dataToMarker(t){return this.add(function(e){e=kn(e),e.model||(e.model=s=>s?e.view+":"+s:e.view);const n={view:e.view,model:e.model},i=js(eh(n,"start")),r=js(eh(n,"end"));return s=>{s.on(`element:${e.view}-start`,i,{priority:e.converterPriority||"normal"}),s.on(`element:${e.view}-end`,r,{priority:e.converterPriority||"normal"});const a=At.low,c=At.highest,l=At.get(e.converterPriority)/c;s.on("element",function(d){return(h,u,g)=>{const p=`data-${d.view}`;function k(b,A){for(const E of A){const M=d.model(E,g),z=g.writer.createElement("$marker",{"data-name":M});g.writer.insert(z,b),u.modelCursor.isEqual(b)?u.modelCursor=u.modelCursor.getShiftedBy(1):u.modelCursor=u.modelCursor._getTransformedByInsertion(b,1),u.modelRange=u.modelRange._getTransformedByInsertion(b,1)[0]}}(g.consumable.test(u.viewItem,{attributes:p+"-end-after"})||g.consumable.test(u.viewItem,{attributes:p+"-start-after"})||g.consumable.test(u.viewItem,{attributes:p+"-end-before"})||g.consumable.test(u.viewItem,{attributes:p+"-start-before"}))&&(u.modelRange||Object.assign(u,g.convertChildren(u.viewItem,u.modelCursor)),g.consumable.consume(u.viewItem,{attributes:p+"-end-after"})&&k(u.modelRange.end,u.viewItem.getAttribute(p+"-end-after").split(",")),g.consumable.consume(u.viewItem,{attributes:p+"-start-after"})&&k(u.modelRange.end,u.viewItem.getAttribute(p+"-start-after").split(",")),g.consumable.consume(u.viewItem,{attributes:p+"-end-before"})&&k(u.modelRange.start,u.viewItem.getAttribute(p+"-end-before").split(",")),g.consumable.consume(u.viewItem,{attributes:p+"-start-before"})&&k(u.modelRange.start,u.viewItem.getAttribute(p+"-start-before").split(",")))}}(n),{priority:a+l})}}(t))}}function Jd(o){const t=js(o=kn(o)),e=Rs(o.view),n=e?`element:${e}`:"element";return i=>{i.on(n,t,{priority:o.converterPriority||"normal"})}}function Rs(o){return typeof o=="string"?o:typeof o=="object"&&typeof o.name=="string"?o.name:null}function js(o){const t=new Ne(o.view);return(e,n,i)=>{const r=t.match(n.viewItem);if(!r)return;const s=r.match;if(s.name=!0,!i.consumable.test(n.viewItem,s))return;const a=function(c,l,d){return c instanceof Function?c(l,d):d.writer.createElement(c)}(o.model,n.viewItem,i);a&&i.safeInsert(a,n.modelCursor)&&(i.consumable.consume(n.viewItem,s),i.convertChildren(n.viewItem,a),i.updateConversionResult(a,n))}}function Xd(o,t=null){const e=t===null||(r=>r.getAttribute(t)),n=typeof o.model!="object"?o.model:o.model.key,i=typeof o.model!="object"||o.model.value===void 0?e:o.model.value;o.model={key:n,value:i}}function th(o,t){const e=new Ne(o.view);return(n,i,r)=>{if(!i.modelRange&&t)return;const s=e.match(i.viewItem);if(!s||(function(d,h){const u=typeof d=="function"?d(h):d;return typeof u=="object"&&!Rs(u)?!1:!u.classes&&!u.attributes&&!u.styles}(o.view,i.viewItem)?s.match.name=!0:delete s.match.name,!r.consumable.test(i.viewItem,s.match)))return;const a=o.model.key,c=typeof o.model.value=="function"?o.model.value(i.viewItem,r):o.model.value;if(c===null)return;i.modelRange||Object.assign(i,r.convertChildren(i.viewItem,i.modelCursor)),function(d,h,u,g){let p=!1;for(const k of Array.from(d.getItems({shallow:u})))g.schema.checkAttribute(k,h.key)&&(p=!0,k.hasAttribute(h.key)||g.writer.setAttribute(h.key,h.value,k));return p}(i.modelRange,{key:a,value:c},t,r)&&(r.consumable.test(i.viewItem,{name:!0})&&(s.match.name=!0),r.consumable.consume(i.viewItem,s.match))}}function eh(o,t){return{view:`${o.view}-${t}`,model:(e,n)=>{const i=e.getAttribute("name"),r=o.model(i,n);return n.writer.createElement("$marker",{"data-name":r})}}}function MA(o){o.document.registerPostFixer(t=>function(e,n){const i=n.document.selection,r=n.schema,s=[];let a=!1;for(const c of i.getRanges()){const l=nh(c,r);l&&!l.isEqual(c)?(s.push(l),a=!0):s.push(c)}return a&&e.setSelection(function(c){const l=[...c],d=new Set;let h=1;for(;h!d.has(g))}(s),{backward:i.isBackward}),!1}(t,o))}function nh(o,t){return o.isCollapsed?function(e,n){const i=e.start,r=n.getNearestSelectionRange(i);if(!r){const a=i.getAncestors().reverse().find(c=>n.isObject(c));return a?B._createOn(a):null}if(!r.isCollapsed)return r;const s=r.start;return i.isEqual(s)?null:new B(s)}(o,t):function(e,n){const{start:i,end:r}=e,s=n.checkChild(i,"$text"),a=n.checkChild(r,"$text"),c=n.getLimitElement(i),l=n.getLimitElement(r);if(c===l){if(s&&a)return null;if(function(u,g,p){const k=u.nodeAfter&&!p.isLimit(u.nodeAfter)||p.checkChild(u,"$text"),b=g.nodeBefore&&!p.isLimit(g.nodeBefore)||p.checkChild(g,"$text");return k||b}(i,r,n)){const u=i.nodeAfter&&n.isSelectable(i.nodeAfter)?null:n.getNearestSelectionRange(i,"forward"),g=r.nodeBefore&&n.isSelectable(r.nodeBefore)?null:n.getNearestSelectionRange(r,"backward"),p=u?u.start:i,k=g?g.end:r;return new B(p,k)}}const d=c&&!c.is("rootElement"),h=l&&!l.is("rootElement");if(d||h){const u=i.nodeAfter&&r.nodeBefore&&i.nodeAfter.parent===r.nodeBefore.parent,g=d&&(!u||!ih(i.nodeAfter,n)),p=h&&(!u||!ih(r.nodeBefore,n));let k=i,b=r;return g&&(k=O._createBefore(oh(c,n))),p&&(b=O._createAfter(oh(l,n))),new B(k,b)}return null}(o,t)}function oh(o,t){let e=o,n=e;for(;t.isLimit(n)&&n.parent;)e=n,n=n.parent;return e}function ih(o,t){return o&&t.isSelectable(o)}class BA extends mt(){constructor(t,e){super(),this.model=t,this.view=new cA(e),this.mapper=new Td,this.downcastDispatcher=new Pd({mapper:this.mapper,schema:t.schema});const n=this.model.document,i=n.selection,r=this.model.markers;var s,a,c;this.listenTo(this.model,"_beforeChanges",()=>{this.view._disableRendering(!0)},{priority:"highest"}),this.listenTo(this.model,"_afterChanges",()=>{this.view._disableRendering(!1)},{priority:"lowest"}),this.listenTo(n,"change",()=>{this.view.change(l=>{this.downcastDispatcher.convertChanges(n.differ,r,l),this.downcastDispatcher.convertSelection(i,r,l)})},{priority:"low"}),this.listenTo(this.view.document,"selectionChange",function(l,d){return(h,u)=>{const g=u.newSelection,p=[];for(const b of g.getRanges())p.push(d.toModelRange(b));const k=l.createSelection(p,{backward:g.isBackward});k.isEqual(l.document.selection)||l.change(b=>{b.setSelection(k)})}}(this.model,this.mapper)),this.listenTo(this.view.document,"beforeinput",(s=this.mapper,a=this.model.schema,c=this.view,(l,d)=>{if(!c.document.isComposing||f.isAndroid)for(let h=0;h{if(!h.consumable.consume(d.item,l.name))return;const u=h.writer,g=h.mapper.toViewPosition(d.range.start),p=u.createText(d.item.data);u.insert(g,p)},{priority:"lowest"}),this.downcastDispatcher.on("insert",(l,d,h)=>{h.convertAttributes(d.item),d.reconversion||!d.item.is("element")||d.item.isEmpty||h.convertChildren(d.item)},{priority:"lowest"}),this.downcastDispatcher.on("remove",(l,d,h)=>{const u=h.mapper.toViewPosition(d.position),g=d.position.getShiftedBy(d.length),p=h.mapper.toViewPosition(g,{isPhantom:!0}),k=h.writer.createRange(u,p),b=h.writer.remove(k.getTrimmed());for(const A of h.writer.createRangeIn(b).getItems())h.mapper.unbindViewElement(A,{defer:!0})},{priority:"low"}),this.downcastDispatcher.on("cleanSelection",(l,d,h)=>{const u=h.writer,g=u.document.selection;for(const p of g.getRanges())p.isCollapsed&&p.end.parent.isAttached()&&h.writer.mergeAttributes(p.start);u.setSelection(null)}),this.downcastDispatcher.on("selection",(l,d,h)=>{const u=d.selection;if(u.isCollapsed||!h.consumable.consume(u,"selection"))return;const g=[];for(const p of u.getRanges())g.push(h.mapper.toViewRange(p));h.writer.setSelection(g,{backward:u.isBackward})},{priority:"low"}),this.downcastDispatcher.on("selection",(l,d,h)=>{const u=d.selection;if(!u.isCollapsed||!h.consumable.consume(u,"selection"))return;const g=h.writer,p=u.getFirstPosition(),k=h.mapper.toViewPosition(p),b=g.breakAttributes(k);g.setSelection(b)},{priority:"low"}),this.view.document.roots.bindTo(this.model.document.roots).using(l=>{if(l.rootName=="$graveyard")return null;const d=new Xl(this.view.document,l.name);return d.rootName=l.rootName,this.mapper.bindElements(l,d),d})}destroy(){this.view.destroy(),this.stopListening()}reconvertMarker(t){const e=typeof t=="string"?t:t.name,n=this.model.markers.get(e);if(!n)throw new _("editingcontroller-reconvertmarker-marker-not-exist",this,{markerName:e});this.model.change(()=>{this.model.markers._refresh(n)})}reconvertItem(t){this.model.change(()=>{this.model.document.differ._refreshItem(t)})}}class Xo{constructor(){this._consumables=new Map}add(t,e){let n;t.is("$text")||t.is("documentFragment")?this._consumables.set(t,!0):(this._consumables.has(t)?n=this._consumables.get(t):(n=new NA(t),this._consumables.set(t,n)),n.add(e))}test(t,e){const n=this._consumables.get(t);return n===void 0?null:t.is("$text")||t.is("documentFragment")?n:n.test(e)}consume(t,e){return!!this.test(t,e)&&(t.is("$text")||t.is("documentFragment")?this._consumables.set(t,!1):this._consumables.get(t).consume(e),!0)}revert(t,e){const n=this._consumables.get(t);n!==void 0&&(t.is("$text")||t.is("documentFragment")?this._consumables.set(t,!0):n.revert(e))}static consumablesFromElement(t){const e={element:t,name:!0,attributes:[],classes:[],styles:[]},n=t.getAttributeKeys();for(const s of n)s!="style"&&s!="class"&&e.attributes.push(s);const i=t.getClassNames();for(const s of i)e.classes.push(s);const r=t.getStyleNames();for(const s of r)e.styles.push(s);return e}static createFrom(t,e){if(e||(e=new Xo),t.is("$text"))return e.add(t),e;t.is("element")&&e.add(t,Xo.consumablesFromElement(t)),t.is("documentFragment")&&e.add(t);for(const n of t.getChildren())e=Xo.createFrom(n,e);return e}}const Yi=["attributes","classes","styles"];class NA{constructor(t){this.element=t,this._canConsumeName=null,this._consumables={attributes:new Map,styles:new Map,classes:new Map}}add(t){t.name&&(this._canConsumeName=!0);for(const e of Yi)e in t&&this._add(e,t[e])}test(t){if(t.name&&!this._canConsumeName)return this._canConsumeName;for(const e of Yi)if(e in t){const n=this._test(e,t[e]);if(n!==!0)return n}return!0}consume(t){t.name&&(this._canConsumeName=!1);for(const e of Yi)e in t&&this._consume(e,t[e])}revert(t){t.name&&(this._canConsumeName=!0);for(const e of Yi)e in t&&this._revert(e,t[e])}_add(t,e){const n=ee(e)?e:[e],i=this._consumables[t];for(const r of n){if(t==="attributes"&&(r==="class"||r==="style"))throw new _("viewconsumable-invalid-attribute",this);if(i.set(r,!0),t==="styles")for(const s of this.element.document.stylesProcessor.getRelatedStyles(r))i.set(s,!0)}}_test(t,e){const n=ee(e)?e:[e],i=this._consumables[t];for(const r of n)if(t!=="attributes"||r!=="class"&&r!=="style"){const s=i.get(r);if(s===void 0)return null;if(!s)return!1}else{const s=r=="class"?"classes":"styles",a=this._test(s,[...this._consumables[s].keys()]);if(a!==!0)return a}return!0}_consume(t,e){const n=ee(e)?e:[e],i=this._consumables[t];for(const r of n)if(t!=="attributes"||r!=="class"&&r!=="style"){if(i.set(r,!1),t=="styles")for(const s of this.element.document.stylesProcessor.getRelatedStyles(r))i.set(s,!1)}else{const s=r=="class"?"classes":"styles";this._consume(s,[...this._consumables[s].keys()])}}_revert(t,e){const n=ee(e)?e:[e],i=this._consumables[t];for(const r of n)if(t!=="attributes"||r!=="class"&&r!=="style")i.get(r)===!1&&i.set(r,!0);else{const s=r=="class"?"classes":"styles";this._revert(s,[...this._consumables[s].keys()])}}}class PA extends mt(){constructor(){super(),this._sourceDefinitions={},this._attributeProperties={},this.decorate("checkChild"),this.decorate("checkAttribute"),this.on("checkAttribute",(t,e)=>{e[0]=new Vn(e[0])},{priority:"highest"}),this.on("checkChild",(t,e)=>{e[0]=new Vn(e[0]),e[1]=this.getDefinition(e[1])},{priority:"highest"})}register(t,e){if(this._sourceDefinitions[t])throw new _("schema-cannot-register-item-twice",this,{itemName:t});this._sourceDefinitions[t]=[Object.assign({},e)],this._clearCache()}extend(t,e){if(!this._sourceDefinitions[t])throw new _("schema-cannot-extend-missing-item",this,{itemName:t});this._sourceDefinitions[t].push(Object.assign({},e)),this._clearCache()}getDefinitions(){return this._compiledDefinitions||this._compile(),this._compiledDefinitions}getDefinition(t){let e;return e=typeof t=="string"?t:"is"in t&&(t.is("$text")||t.is("$textProxy"))?"$text":t.name,this.getDefinitions()[e]}isRegistered(t){return!!this.getDefinition(t)}isBlock(t){const e=this.getDefinition(t);return!(!e||!e.isBlock)}isLimit(t){const e=this.getDefinition(t);return!!e&&!(!e.isLimit&&!e.isObject)}isObject(t){const e=this.getDefinition(t);return!!e&&!!(e.isObject||e.isLimit&&e.isSelectable&&e.isContent)}isInline(t){const e=this.getDefinition(t);return!(!e||!e.isInline)}isSelectable(t){const e=this.getDefinition(t);return!!e&&!(!e.isSelectable&&!e.isObject)}isContent(t){const e=this.getDefinition(t);return!!e&&!(!e.isContent&&!e.isObject)}checkChild(t,e){return!!e&&this._checkContextMatch(e,t)}checkAttribute(t,e){const n=this.getDefinition(t.last);return!!n&&n.allowAttributes.includes(e)}checkMerge(t,e){if(t instanceof O){const n=t.nodeBefore,i=t.nodeAfter;if(!(n instanceof Ct))throw new _("schema-check-merge-no-element-before",this);if(!(i instanceof Ct))throw new _("schema-check-merge-no-element-after",this);return this.checkMerge(n,i)}for(const n of e.getChildren())if(!this.checkChild(t,n))return!1;return!0}addChildCheck(t){this.on("checkChild",(e,[n,i])=>{if(!i)return;const r=t(n,i);typeof r=="boolean"&&(e.stop(),e.return=r)},{priority:"high"})}addAttributeCheck(t){this.on("checkAttribute",(e,[n,i])=>{const r=t(n,i);typeof r=="boolean"&&(e.stop(),e.return=r)},{priority:"high"})}setAttributeProperties(t,e){this._attributeProperties[t]=Object.assign(this.getAttributeProperties(t),e)}getAttributeProperties(t){return this._attributeProperties[t]||{}}getLimitElement(t){let e;for(t instanceof O?e=t.parent:e=(t instanceof B?[t]:Array.from(t.getRanges())).reduce((n,i)=>{const r=i.getCommonAncestor();return n?n.getCommonAncestor(r,{includeSelf:!0}):r},null);!this.isLimit(e)&&e.parent;)e=e.parent;return e}checkAttributeInSelection(t,e){if(t.isCollapsed){const n=[...t.getFirstPosition().getAncestors(),new yt("",t.getAttributes())];return this.checkAttribute(n,e)}{const n=t.getRanges();for(const i of n)for(const r of i)if(this.checkAttribute(r.item,e))return!0}return!1}*getValidRanges(t,e){t=function*(n){for(const i of n)yield*i.getMinimalFlatRanges()}(t);for(const n of t)yield*this._getValidRangesForRange(n,e)}getNearestSelectionRange(t,e="both"){if(t.root.rootName=="$graveyard")return null;if(this.checkChild(t,"$text"))return new B(t);let n,i;const r=t.getAncestors().reverse().find(s=>this.isLimit(s))||t.root;e!="both"&&e!="backward"||(n=new tn({boundaries:B._createIn(r),startPosition:t,direction:"backward"})),e!="both"&&e!="forward"||(i=new tn({boundaries:B._createIn(r),startPosition:t}));for(const s of function*(a,c){let l=!1;for(;!l;){if(l=!0,a){const d=a.next();d.done||(l=!1,yield{walker:a,value:d.value})}if(c){const d=c.next();d.done||(l=!1,yield{walker:c,value:d.value})}}}(n,i)){const a=s.walker==n?"elementEnd":"elementStart",c=s.value;if(c.type==a&&this.isObject(c.item))return B._createOn(c.item);if(this.checkChild(c.nextPosition,"$text"))return new B(c.nextPosition)}return null}findAllowedParent(t,e){let n=t.parent;for(;n;){if(this.checkChild(n,e))return n;if(this.isLimit(n))return null;n=n.parent}return null}setAllowedAttributes(t,e,n){const i=n.model;for(const[r,s]of Object.entries(e))i.schema.checkAttribute(t,r)&&n.setAttribute(r,s,t)}removeDisallowedAttributes(t,e){for(const n of t)if(n.is("$text"))rh(this,n,e);else{const i=B._createIn(n).getPositions();for(const r of i)rh(this,r.nodeBefore||r.parent,e)}}getAttributesWithProperty(t,e,n){const i={};for(const[r,s]of t.getAttributes()){const a=this.getAttributeProperties(r);a[e]!==void 0&&(n!==void 0&&n!==a[e]||(i[r]=s))}return i}createContext(t){return new Vn(t)}_clearCache(){this._compiledDefinitions=null}_compile(){const t={},e=this._sourceDefinitions,n=Object.keys(e);for(const i of n)t[i]=LA(e[i],i);for(const i of n)OA(t,i);for(const i of n)zA(t,i);for(const i of n)RA(t,i);for(const i of n)jA(t,i),FA(t,i);for(const i of n)VA(t,i),HA(t,i),UA(t,i);this._compiledDefinitions=t}_checkContextMatch(t,e,n=e.length-1){const i=e.getItem(n);if(t.allowIn.includes(i.name)){if(n==0)return!0;{const r=this.getDefinition(i);return this._checkContextMatch(r,e,n-1)}}return!1}*_getValidRangesForRange(t,e){let n=t.start,i=t.start;for(const r of t.getItems({shallow:!0}))r.is("element")&&(yield*this._getValidRangesForRange(B._createIn(r),e)),this.checkAttribute(r,e)||(n.isEqual(i)||(yield new B(n,i)),n=O._createAfter(r)),i=O._createAfter(r);n.isEqual(i)||(yield new B(n,i))}findOptimalInsertionRange(t,e){const n=t.getSelectedElement();if(n&&this.isObject(n)&&!this.isInline(n))return e=="before"||e=="after"?new B(O._createAt(n,e)):B._createOn(n);const i=Wt(t.getSelectedBlocks());if(!i)return new B(t.focus);if(i.isEmpty)return new B(O._createAt(i,0));const r=O._createAfter(i);return t.focus.isTouching(r)?new B(r):new B(O._createBefore(i))}}class Vn{constructor(t){if(t instanceof Vn)return t;let e;e=typeof t=="string"?[t]:Array.isArray(t)?t:t.getAncestors({includeSelf:!0}),this._items=e.map(GA)}get length(){return this._items.length}get last(){return this._items[this._items.length-1]}[Symbol.iterator](){return this._items[Symbol.iterator]()}push(t){const e=new Vn([t]);return e._items=[...this._items,...e._items],e}getItem(t){return this._items[t]}*getNames(){yield*this._items.map(t=>t.name)}endsWith(t){return Array.from(this.getNames()).join(" ").endsWith(t)}startsWith(t){return Array.from(this.getNames()).join(" ").startsWith(t)}}function LA(o,t){const e={name:t,allowIn:[],allowContentOf:[],allowWhere:[],allowAttributes:[],allowAttributesOf:[],allowChildren:[],inheritTypesFrom:[]};return function(n,i){for(const r of n){const s=Object.keys(r).filter(a=>a.startsWith("is"));for(const a of s)i[a]=!!r[a]}}(o,e),Hn(o,e,"allowIn"),Hn(o,e,"allowContentOf"),Hn(o,e,"allowWhere"),Hn(o,e,"allowAttributes"),Hn(o,e,"allowAttributesOf"),Hn(o,e,"allowChildren"),Hn(o,e,"inheritTypesFrom"),function(n,i){for(const r of n){const s=r.inheritAllFrom;s&&(i.allowContentOf.push(s),i.allowWhere.push(s),i.allowAttributesOf.push(s),i.inheritTypesFrom.push(s))}}(o,e),e}function OA(o,t){const e=o[t];for(const n of e.allowChildren){const i=o[n];i&&i.allowIn.push(t)}e.allowChildren.length=0}function zA(o,t){for(const e of o[t].allowContentOf)o[e]&&qA(o,e).forEach(n=>{n.allowIn.push(t)});delete o[t].allowContentOf}function RA(o,t){for(const e of o[t].allowWhere){const n=o[e];if(n){const i=n.allowIn;o[t].allowIn.push(...i)}}delete o[t].allowWhere}function jA(o,t){for(const e of o[t].allowAttributesOf){const n=o[e];if(n){const i=n.allowAttributes;o[t].allowAttributes.push(...i)}}delete o[t].allowAttributesOf}function FA(o,t){const e=o[t];for(const n of e.inheritTypesFrom){const i=o[n];if(i){const r=Object.keys(i).filter(s=>s.startsWith("is"));for(const s of r)s in e||(e[s]=i[s])}}delete e.inheritTypesFrom}function VA(o,t){const e=o[t],n=e.allowIn.filter(i=>o[i]);e.allowIn=Array.from(new Set(n))}function HA(o,t){const e=o[t];for(const n of e.allowIn)o[n].allowChildren.push(t)}function UA(o,t){const e=o[t];e.allowAttributes=Array.from(new Set(e.allowAttributes))}function Hn(o,t,e){for(const n of o){const i=n[e];typeof i=="string"?t[e].push(i):Array.isArray(i)&&t[e].push(...i)}}function qA(o,t){const e=o[t];return(n=o,Object.keys(n).map(i=>n[i])).filter(i=>i.allowIn.includes(e.name));var n}function GA(o){return typeof o=="string"||o.is("documentFragment")?{name:typeof o=="string"?o:"$documentFragment",*getAttributeKeys(){},getAttribute(){}}:{name:o.is("element")?o.name:"$text",*getAttributeKeys(){yield*o.getAttributeKeys()},getAttribute:t=>o.getAttribute(t)}}function rh(o,t,e){for(const n of t.getAttributeKeys())o.checkAttribute(t,n)||e.removeAttribute(n,t)}var WA=Object.defineProperty,$A=Object.defineProperties,KA=Object.getOwnPropertyDescriptors,sh=Object.getOwnPropertySymbols,YA=Object.prototype.hasOwnProperty,QA=Object.prototype.propertyIsEnumerable,ah=(o,t,e)=>t in o?WA(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;class ZA extends kt(){constructor(t){var e;super(),this._splitParts=new Map,this._cursorParents=new Map,this._modelCursor=null,this._emptyElementsToKeep=new Set,this.conversionApi=(e=((n,i)=>{for(var r in i||(i={}))YA.call(i,r)&&ah(n,r,i[r]);if(sh)for(var r of sh(i))QA.call(i,r)&&ah(n,r,i[r]);return n})({},t),$A(e,KA({consumable:null,writer:null,store:null,convertItem:(n,i)=>this._convertItem(n,i),convertChildren:(n,i)=>this._convertChildren(n,i),safeInsert:(n,i)=>this._safeInsert(n,i),updateConversionResult:(n,i)=>this._updateConversionResult(n,i),splitToAllowedParent:(n,i)=>this._splitToAllowedParent(n,i),getSplitParts:n=>this._getSplitParts(n),keepEmptyElement:n=>this._keepEmptyElement(n)})))}convert(t,e,n=["$root"]){this.fire("viewCleanup",t),this._modelCursor=function(s,a){let c;for(const l of new Vn(s)){const d={};for(const u of l.getAttributeKeys())d[u]=l.getAttribute(u);const h=a.createElement(l.name,d);c&&a.insert(h,c),c=O._createAt(h,0)}return c}(n,e),this.conversionApi.writer=e,this.conversionApi.consumable=Xo.createFrom(t),this.conversionApi.store={};const{modelRange:i}=this._convertItem(t,this._modelCursor),r=e.createDocumentFragment();if(i){this._removeEmptyElements();for(const s of Array.from(this._modelCursor.parent.getChildren()))e.append(s,r);r.markers=function(s,a){const c=new Set,l=new Map,d=B._createIn(s).getItems();for(const h of d)h.is("element","$marker")&&c.add(h);for(const h of c){const u=h.getAttribute("data-name"),g=a.createPositionBefore(h);l.has(u)?l.get(u).end=g.clone():l.set(u,new B(g.clone())),a.remove(h)}return l}(r,e)}return this._modelCursor=null,this._splitParts.clear(),this._cursorParents.clear(),this._emptyElementsToKeep.clear(),this.conversionApi.writer=null,this.conversionApi.store=null,r}_convertItem(t,e){const n={viewItem:t,modelCursor:e,modelRange:null};if(t.is("element")?this.fire(`element:${t.name}`,n,this.conversionApi):t.is("$text")?this.fire("text",n,this.conversionApi):this.fire("documentFragment",n,this.conversionApi),n.modelRange&&!(n.modelRange instanceof B))throw new _("view-conversion-dispatcher-incorrect-result",this);return{modelRange:n.modelRange,modelCursor:n.modelCursor}}_convertChildren(t,e){let n=e.is("position")?e:O._createAt(e,0);const i=new B(n);for(const r of Array.from(t.getChildren())){const s=this._convertItem(r,n);s.modelRange instanceof B&&(i.end=s.modelRange.end,n=s.modelCursor)}return{modelRange:i,modelCursor:n}}_safeInsert(t,e){const n=this._splitToAllowedParent(t,e);return!!n&&(this.conversionApi.writer.insert(t,n.position),!0)}_updateConversionResult(t,e){const n=this._getSplitParts(t),i=this.conversionApi.writer;e.modelRange||(e.modelRange=i.createRange(i.createPositionBefore(t),i.createPositionAfter(n[n.length-1])));const r=this._cursorParents.get(t);e.modelCursor=r?i.createPositionAt(r,0):e.modelRange.end}_splitToAllowedParent(t,e){const{schema:n,writer:i}=this.conversionApi;let r=n.findAllowedParent(e,t);if(r){if(r===e.parent)return{position:e};this._modelCursor.parent.getAncestors().includes(r)&&(r=null)}if(!r)return Kd(e,t,n)?{position:Yd(e,i)}:null;const s=this.conversionApi.writer.split(e,r),a=[];for(const l of s.range.getWalker())if(l.type=="elementEnd")a.push(l.item);else{const d=a.pop(),h=l.item;this._registerSplitPair(d,h)}const c=s.range.end.parent;return this._cursorParents.set(t,c),{position:s.position,cursorParent:c}}_registerSplitPair(t,e){this._splitParts.has(t)||this._splitParts.set(t,[t]);const n=this._splitParts.get(t);this._splitParts.set(e,n),n.push(e)}_getSplitParts(t){let e;return e=this._splitParts.has(t)?this._splitParts.get(t):[t],e}_keepEmptyElement(t){this._emptyElementsToKeep.add(t)}_removeEmptyElements(){let t=!1;for(const e of this._splitParts.keys())e.isEmpty&&!this._emptyElementsToKeep.has(e)&&(this.conversionApi.writer.remove(e),this._splitParts.delete(e),t=!0);t&&this._removeEmptyElements()}}class JA{getHtml(t){const e=$.document.implementation.createHTMLDocument("").createElement("div");return e.appendChild(t),e.innerHTML}}class XA{constructor(t){this.skipComments=!0,this.domParser=new DOMParser,this.domConverter=new Ui(t,{renderingMode:"data"}),this.htmlWriter=new JA}toData(t){const e=this.domConverter.viewToDom(t);return this.htmlWriter.getHtml(e)}toView(t){const e=this._toDom(t);return this.domConverter.domToView(e,{skipComments:this.skipComments})}registerRawContentMatcher(t){this.domConverter.registerRawContentMatcher(t)}useFillerType(t){this.domConverter.blockFillerMode=t=="marked"?"markedNbsp":"nbsp"}_toDom(t){t.match(/<(?:html|body|head|meta)(?:\s[^>]*)?>/i)||(t=`${t}`);const e=this.domParser.parseFromString(t,"text/html"),n=e.createDocumentFragment(),i=e.body.childNodes;for(;i.length>0;)n.appendChild(i[0]);return n}}class tC extends kt(){constructor(t,e){super(),this.model=t,this.mapper=new Td,this.downcastDispatcher=new Pd({mapper:this.mapper,schema:t.schema}),this.downcastDispatcher.on("insert:$text",(n,i,r)=>{if(!r.consumable.consume(i.item,n.name))return;const s=r.writer,a=r.mapper.toViewPosition(i.range.start),c=s.createText(i.item.data);s.insert(a,c)},{priority:"lowest"}),this.downcastDispatcher.on("insert",(n,i,r)=>{r.convertAttributes(i.item),i.reconversion||!i.item.is("element")||i.item.isEmpty||r.convertChildren(i.item)},{priority:"lowest"}),this.upcastDispatcher=new ZA({schema:t.schema}),this.viewDocument=new Fi(e),this.stylesProcessor=e,this.htmlProcessor=new XA(this.viewDocument),this.processor=this.htmlProcessor,this._viewWriter=new ed(this.viewDocument),this.upcastDispatcher.on("text",(n,i,{schema:r,consumable:s,writer:a})=>{let c=i.modelCursor;if(!s.test(i.viewItem))return;if(!r.checkChild(c,"$text")){if(!Kd(c,"$text",r)||i.viewItem.data.trim().length==0)return;const d=c.nodeBefore;c=Yd(c,a),d&&d.is("element","$marker")&&(a.move(a.createRangeOn(d),c),c=a.createPositionAfter(d))}s.consume(i.viewItem);const l=a.createText(i.viewItem.data);a.insert(l,c),i.modelRange=a.createRange(c,c.getShiftedBy(l.offsetSize)),i.modelCursor=i.modelRange.end},{priority:"lowest"}),this.upcastDispatcher.on("element",(n,i,r)=>{if(!i.modelRange&&r.consumable.consume(i.viewItem,{name:!0})){const{modelRange:s,modelCursor:a}=r.convertChildren(i.viewItem,i.modelCursor);i.modelRange=s,i.modelCursor=a}},{priority:"lowest"}),this.upcastDispatcher.on("documentFragment",(n,i,r)=>{if(!i.modelRange&&r.consumable.consume(i.viewItem,{name:!0})){const{modelRange:s,modelCursor:a}=r.convertChildren(i.viewItem,i.modelCursor);i.modelRange=s,i.modelCursor=a}},{priority:"lowest"}),mt().prototype.decorate.call(this,"init"),mt().prototype.decorate.call(this,"set"),mt().prototype.decorate.call(this,"get"),mt().prototype.decorate.call(this,"toView"),mt().prototype.decorate.call(this,"toModel"),this.on("init",()=>{this.fire("ready")},{priority:"lowest"}),this.on("ready",()=>{this.model.enqueueChange({isUndoable:!1},$d)},{priority:"lowest"})}get(t={}){const{rootName:e="main",trim:n="empty"}=t;if(!this._checkIfRootsExists([e]))throw new _("datacontroller-get-non-existent-root",this);const i=this.model.document.getRoot(e);return i.isAttached()||Y("datacontroller-get-detached-root",this),n!=="empty"||this.model.hasContent(i,{ignoreWhitespaces:!0})?this.stringify(i,t):""}stringify(t,e={}){const n=this.toView(t,e);return this.processor.toData(n)}toView(t,e={}){const n=this.viewDocument,i=this._viewWriter;this.mapper.clearBindings();const r=B._createIn(t),s=new Rn(n);this.mapper.bindElements(t,s);const a=t.is("documentFragment")?t.markers:function(c){const l=[],d=c.root.document;if(!d)return new Map;const h=B._createIn(c);for(const u of d.model.markers){const g=u.getRange(),p=g.isCollapsed,k=g.start.isEqual(h.start)||g.end.isEqual(h.end);if(p&&k)l.push([u.name,g]);else{const b=h.getIntersection(g);b&&l.push([u.name,b])}}return l.sort(([u,g],[p,k])=>{if(g.end.compareWith(k.start)!=="after")return 1;if(g.start.compareWith(k.end)!=="before")return-1;switch(g.start.compareWith(k.start)){case"before":return 1;case"after":return-1;default:switch(g.end.compareWith(k.end)){case"before":return 1;case"after":return-1;default:return p.localeCompare(u)}}}),new Map(l)}(t);return this.downcastDispatcher.convert(r,a,i,e),s}init(t){if(this.model.document.version)throw new _("datacontroller-init-document-not-empty",this);let e={};if(typeof t=="string"?e.main=t:e=t,!this._checkIfRootsExists(Object.keys(e)))throw new _("datacontroller-init-non-existent-root",this);return this.model.enqueueChange({isUndoable:!1},n=>{for(const i of Object.keys(e)){const r=this.model.document.getRoot(i);n.insert(this.parse(e[i],r),r,0)}}),Promise.resolve()}set(t,e={}){let n={};if(typeof t=="string"?n.main=t:n=t,!this._checkIfRootsExists(Object.keys(n)))throw new _("datacontroller-set-non-existent-root",this);this.model.enqueueChange(e.batchType||{},i=>{i.setSelection(null),i.removeSelectionAttribute(this.model.document.selection.getAttributeKeys());for(const r of Object.keys(n)){const s=this.model.document.getRoot(r);i.remove(i.createRangeIn(s)),i.insert(this.parse(n[r],s),s,0)}})}parse(t,e="$root"){const n=this.processor.toView(t);return this.toModel(n,e)}toModel(t,e="$root"){return this.model.change(n=>this.upcastDispatcher.convert(t,n,e))}addStyleProcessorRules(t){t(this.stylesProcessor)}registerRawContentMatcher(t){this.processor&&this.processor!==this.htmlProcessor&&this.processor.registerRawContentMatcher(t),this.htmlProcessor.registerRawContentMatcher(t)}destroy(){this.stopListening()}_checkIfRootsExists(t){for(const e of t)if(!this.model.document.getRoot(e))return!1;return!0}}class eC{constructor(t,e){this._helpers=new Map,this._downcast=Bt(t),this._createConversionHelpers({name:"downcast",dispatchers:this._downcast,isDowncast:!0}),this._upcast=Bt(e),this._createConversionHelpers({name:"upcast",dispatchers:this._upcast,isDowncast:!1})}addAlias(t,e){const n=this._downcast.includes(e);if(!this._upcast.includes(e)&&!n)throw new _("conversion-add-alias-dispatcher-not-registered",this);this._createConversionHelpers({name:t,dispatchers:[e],isDowncast:n})}for(t){if(!this._helpers.has(t))throw new _("conversion-for-unknown-group",this);return this._helpers.get(t)}elementToElement(t){this.for("downcast").elementToElement(t);for(const{model:e,view:n}of Fs(t))this.for("upcast").elementToElement({model:e,view:n,converterPriority:t.converterPriority})}attributeToElement(t){this.for("downcast").attributeToElement(t);for(const{model:e,view:n}of Fs(t))this.for("upcast").elementToAttribute({view:n,model:e,converterPriority:t.converterPriority})}attributeToAttribute(t){this.for("downcast").attributeToAttribute(t);for(const{model:e,view:n}of Fs(t))this.for("upcast").attributeToAttribute({view:n,model:e})}_createConversionHelpers({name:t,dispatchers:e,isDowncast:n}){if(this._helpers.has(t))throw new _("conversion-group-exists",this);const i=n?new _A(e):new TA(e);this._helpers.set(t,i)}}function*Fs(o){if(o.model.values)for(const t of o.model.values){const e={key:o.model.key,value:t},n=o.view[t],i=o.upcastAlso?o.upcastAlso[t]:void 0;yield*ch(e,n,i)}else yield*ch(o.model,o.view,o.upcastAlso)}function*ch(o,t,e){if(yield{model:o,view:t},e)for(const n of Bt(e))yield{model:o,view:n}}class me{constructor(t){this.baseVersion=t,this.isDocumentOperation=this.baseVersion!==null,this.batch=null}_validate(){}toJSON(){const t=Object.assign({},this);return t.__className=this.constructor.className,delete t.batch,delete t.isDocumentOperation,t}static get className(){return"Operation"}static fromJSON(t,e){return new this(t.baseVersion)}}function Vs(o,t){const e=dh(t),n=e.reduce((s,a)=>s+a.offsetSize,0),i=o.parent;ni(o);const r=o.index;return i._insertChild(r,e),ei(i,r+e.length),ei(i,r),new B(o,o.getShiftedBy(n))}function lh(o){if(!o.isFlat)throw new _("operation-utils-remove-range-not-flat",this);const t=o.start.parent;ni(o.start),ni(o.end);const e=t._removeChildren(o.start.index,o.end.index-o.start.index);return ei(t,o.start.index),e}function ti(o,t){if(!o.isFlat)throw new _("operation-utils-move-range-not-flat",this);const e=lh(o);return Vs(t=t._getTransformedByDeletion(o.start,o.end.offset-o.start.offset),e)}function dh(o){const t=[];(function e(n){if(typeof n=="string")t.push(new yt(n));else if(n instanceof Oe)t.push(new yt(n.data,n.getAttributes()));else if(n instanceof jn)t.push(n);else if(Gt(n))for(const i of n)e(i)})(o);for(let e=1;et.maxOffset)throw new _("move-operation-nodes-do-not-exist",this);if(t===e&&n=n&&this.targetPosition.path[r]n._clone(!0))),e=new $t(this.position,t,this.baseVersion);return e.shouldReceiveAttributes=this.shouldReceiveAttributes,e}getReversed(){const t=this.position.root.document.graveyard,e=new O(t,[0]);return new ft(this.position,this.nodes.maxOffset,e,this.baseVersion+1)}_validate(){const t=this.position.parent;if(!t||t.maxOffsete._clone(!0))),Vs(this.position,t)}toJSON(){const t=super.toJSON();return t.position=this.position.toJSON(),t.nodes=this.nodes.toJSON(),t}static get className(){return"InsertOperation"}static fromJSON(t,e){const n=[];for(const r of t.nodes)r.name?n.push(Ct.fromJSON(r)):n.push(yt.fromJSON(r));const i=new $t(O.fromJSON(t.position,e),n,t.baseVersion);return i.shouldReceiveAttributes=t.shouldReceiveAttributes,i}}class xt extends me{constructor(t,e,n,i,r){super(r),this.splitPosition=t.clone(),this.splitPosition.stickiness="toNext",this.howMany=e,this.insertionPosition=n,this.graveyardPosition=i?i.clone():null,this.graveyardPosition&&(this.graveyardPosition.stickiness="toNext")}get type(){return"split"}get moveTargetPosition(){const t=this.insertionPosition.path.slice();return t.push(0),new O(this.insertionPosition.root,t)}get movedRange(){const t=this.splitPosition.getShiftedBy(Number.POSITIVE_INFINITY);return new B(this.splitPosition,t)}get affectedSelectable(){const t=[B._createFromPositionAndShift(this.splitPosition,0),B._createFromPositionAndShift(this.insertionPosition,0)];return this.graveyardPosition&&t.push(B._createFromPositionAndShift(this.graveyardPosition,0)),t}clone(){return new xt(this.splitPosition,this.howMany,this.insertionPosition,this.graveyardPosition,this.baseVersion)}getReversed(){const t=this.splitPosition.root.document.graveyard,e=new O(t,[0]);return new Nt(this.moveTargetPosition,this.howMany,this.splitPosition,e,this.baseVersion+1)}_validate(){const t=this.splitPosition.parent,e=this.splitPosition.offset;if(!t||t.maxOffset{if(o.key===t.key&&o.range.start.hasSameParentAs(t.range.start)){const n=o.range.getDifference(t.range).map(r=>new jt(r,o.key,o.oldValue,o.newValue,0)),i=o.range.getIntersection(t.range);return i&&e.aIsStrong&&n.push(new jt(i,t.key,t.newValue,o.newValue,0)),n.length==0?[new Ht(0)]:n}return[o]}),gt(jt,$t,(o,t)=>{if(o.range.start.hasSameParentAs(t.position)&&o.range.containsPosition(t.position)){const e=o.range._getTransformedByInsertion(t.position,t.howMany,!t.shouldReceiveAttributes).map(n=>new jt(n,o.key,o.oldValue,o.newValue,o.baseVersion));if(t.shouldReceiveAttributes){const n=fh(t,o.key,o.oldValue);n&&e.unshift(n)}return e}return o.range=o.range._getTransformedByInsertion(t.position,t.howMany,!1)[0],[o]}),gt(jt,Nt,(o,t)=>{const e=[];o.range.start.hasSameParentAs(t.deletionPosition)&&(o.range.containsPosition(t.deletionPosition)||o.range.start.isEqual(t.deletionPosition))&&e.push(B._createFromPositionAndShift(t.graveyardPosition,1));const n=o.range._getTransformedByMergeOperation(t);return n.isCollapsed||e.push(n),e.map(i=>new jt(i,o.key,o.oldValue,o.newValue,o.baseVersion))}),gt(jt,ft,(o,t)=>function(n,i){const r=B._createFromPositionAndShift(i.sourcePosition,i.howMany);let s=null,a=[];r.containsRange(n,!0)?s=n:n.start.hasSameParentAs(r.start)?(a=n.getDifference(r),s=n.getIntersection(r)):a=[n];const c=[];for(let l of a){l=l._getTransformedByDeletion(i.sourcePosition,i.howMany);const d=i.getMovedRangeStart(),h=l.start.hasSameParentAs(d),u=l._getTransformedByInsertion(d,i.howMany,h);c.push(...u)}return s&&c.push(s._getTransformedByMove(i.sourcePosition,i.targetPosition,i.howMany,!1)[0]),c}(o.range,t).map(n=>new jt(n,o.key,o.oldValue,o.newValue,o.baseVersion))),gt(jt,xt,(o,t)=>{if(o.range.end.isEqual(t.insertionPosition))return t.graveyardPosition||o.range.end.offset++,[o];if(o.range.start.hasSameParentAs(t.splitPosition)&&o.range.containsPosition(t.splitPosition)){const e=o.clone();return e.range=new B(t.moveTargetPosition.clone(),o.range.end._getCombined(t.splitPosition,t.moveTargetPosition)),o.range.end=t.splitPosition.clone(),o.range.end.stickiness="toPrevious",[o,e]}return o.range=o.range._getTransformedBySplitOperation(t),[o]}),gt($t,jt,(o,t)=>{const e=[o];if(o.shouldReceiveAttributes&&o.position.hasSameParentAs(t.range.start)&&t.range.containsPosition(o.position)){const n=fh(o,t.key,t.newValue);n&&e.push(n)}return e}),gt($t,$t,(o,t,e)=>(o.position.isEqual(t.position)&&e.aIsStrong||(o.position=o.position._getTransformedByInsertOperation(t)),[o])),gt($t,ft,(o,t)=>(o.position=o.position._getTransformedByMoveOperation(t),[o])),gt($t,xt,(o,t)=>(o.position=o.position._getTransformedBySplitOperation(t),[o])),gt($t,Nt,(o,t)=>(o.position=o.position._getTransformedByMergeOperation(t),[o])),gt(re,$t,(o,t)=>(o.oldRange&&(o.oldRange=o.oldRange._getTransformedByInsertOperation(t)[0]),o.newRange&&(o.newRange=o.newRange._getTransformedByInsertOperation(t)[0]),[o])),gt(re,re,(o,t,e)=>{if(o.name==t.name){if(!e.aIsStrong)return[new Ht(0)];o.oldRange=t.newRange?t.newRange.clone():null}return[o]}),gt(re,Nt,(o,t)=>(o.oldRange&&(o.oldRange=o.oldRange._getTransformedByMergeOperation(t)),o.newRange&&(o.newRange=o.newRange._getTransformedByMergeOperation(t)),[o])),gt(re,ft,(o,t,e)=>{if(o.oldRange&&(o.oldRange=B._createFromRanges(o.oldRange._getTransformedByMoveOperation(t))),o.newRange){if(e.abRelation){const n=B._createFromRanges(o.newRange._getTransformedByMoveOperation(t));if(e.abRelation.side=="left"&&t.targetPosition.isEqual(o.newRange.start))return o.newRange.end=n.end,o.newRange.start.path=e.abRelation.path,[o];if(e.abRelation.side=="right"&&t.targetPosition.isEqual(o.newRange.end))return o.newRange.start=n.start,o.newRange.end.path=e.abRelation.path,[o]}o.newRange=B._createFromRanges(o.newRange._getTransformedByMoveOperation(t))}return[o]}),gt(re,xt,(o,t,e)=>{if(o.oldRange&&(o.oldRange=o.oldRange._getTransformedBySplitOperation(t)),o.newRange){if(e.abRelation){const n=o.newRange._getTransformedBySplitOperation(t);return o.newRange.start.isEqual(t.splitPosition)&&e.abRelation.wasStartBeforeMergedElement?o.newRange.start=O._createAt(t.insertionPosition):o.newRange.start.isEqual(t.splitPosition)&&!e.abRelation.wasInLeftElement&&(o.newRange.start=O._createAt(t.moveTargetPosition)),o.newRange.end.isEqual(t.splitPosition)&&e.abRelation.wasInRightElement?o.newRange.end=O._createAt(t.moveTargetPosition):o.newRange.end.isEqual(t.splitPosition)&&e.abRelation.wasEndBeforeMergedElement?o.newRange.end=O._createAt(t.insertionPosition):o.newRange.end=n.end,[o]}o.newRange=o.newRange._getTransformedBySplitOperation(t)}return[o]}),gt(Nt,$t,(o,t)=>(o.sourcePosition.hasSameParentAs(t.position)&&(o.howMany+=t.howMany),o.sourcePosition=o.sourcePosition._getTransformedByInsertOperation(t),o.targetPosition=o.targetPosition._getTransformedByInsertOperation(t),[o])),gt(Nt,Nt,(o,t,e)=>{if(o.sourcePosition.isEqual(t.sourcePosition)&&o.targetPosition.isEqual(t.targetPosition)){if(e.bWasUndone){const n=t.graveyardPosition.path.slice();return n.push(0),o.sourcePosition=new O(t.graveyardPosition.root,n),o.howMany=0,[o]}return[new Ht(0)]}if(o.sourcePosition.isEqual(t.sourcePosition)&&!o.targetPosition.isEqual(t.targetPosition)&&!e.bWasUndone&&e.abRelation!="splitAtSource"){const n=o.targetPosition.root.rootName=="$graveyard",i=t.targetPosition.root.rootName=="$graveyard";if(i&&!n||!(n&&!i)&&e.aIsStrong){const r=t.targetPosition._getTransformedByMergeOperation(t),s=o.targetPosition._getTransformedByMergeOperation(t);return[new ft(r,o.howMany,s,0)]}return[new Ht(0)]}return o.sourcePosition.hasSameParentAs(t.targetPosition)&&(o.howMany+=t.howMany),o.sourcePosition=o.sourcePosition._getTransformedByMergeOperation(t),o.targetPosition=o.targetPosition._getTransformedByMergeOperation(t),o.graveyardPosition.isEqual(t.graveyardPosition)&&e.aIsStrong||(o.graveyardPosition=o.graveyardPosition._getTransformedByMergeOperation(t)),[o]}),gt(Nt,ft,(o,t,e)=>{const n=B._createFromPositionAndShift(t.sourcePosition,t.howMany);return t.type=="remove"&&!e.bWasUndone&&!e.forceWeakRemove&&o.deletionPosition.hasSameParentAs(t.sourcePosition)&&n.containsPosition(o.sourcePosition)?[new Ht(0)]:(o.sourcePosition.hasSameParentAs(t.targetPosition)&&(o.howMany+=t.howMany),o.sourcePosition.hasSameParentAs(t.sourcePosition)&&(o.howMany-=t.howMany),o.sourcePosition=o.sourcePosition._getTransformedByMoveOperation(t),o.targetPosition=o.targetPosition._getTransformedByMoveOperation(t),o.graveyardPosition.isEqual(t.targetPosition)||(o.graveyardPosition=o.graveyardPosition._getTransformedByMoveOperation(t)),[o])}),gt(Nt,xt,(o,t,e)=>{if(t.graveyardPosition&&(o.graveyardPosition=o.graveyardPosition._getTransformedByDeletion(t.graveyardPosition,1),o.deletionPosition.isEqual(t.graveyardPosition)&&(o.howMany=t.howMany)),o.targetPosition.isEqual(t.splitPosition)){const n=t.howMany!=0,i=t.graveyardPosition&&o.deletionPosition.isEqual(t.graveyardPosition);if(n||i||e.abRelation=="mergeTargetNotMoved")return o.sourcePosition=o.sourcePosition._getTransformedBySplitOperation(t),[o]}if(o.sourcePosition.isEqual(t.splitPosition)){if(e.abRelation=="mergeSourceNotMoved")return o.howMany=0,o.targetPosition=o.targetPosition._getTransformedBySplitOperation(t),[o];if(e.abRelation=="mergeSameElement"||o.sourcePosition.offset>0)return o.sourcePosition=t.moveTargetPosition.clone(),o.targetPosition=o.targetPosition._getTransformedBySplitOperation(t),[o]}return o.sourcePosition.hasSameParentAs(t.splitPosition)&&(o.howMany=t.splitPosition.offset),o.sourcePosition=o.sourcePosition._getTransformedBySplitOperation(t),o.targetPosition=o.targetPosition._getTransformedBySplitOperation(t),[o]}),gt(ft,$t,(o,t)=>{const e=B._createFromPositionAndShift(o.sourcePosition,o.howMany)._getTransformedByInsertOperation(t,!1)[0];return o.sourcePosition=e.start,o.howMany=e.end.offset-e.start.offset,o.targetPosition.isEqual(t.position)||(o.targetPosition=o.targetPosition._getTransformedByInsertOperation(t)),[o]}),gt(ft,ft,(o,t,e)=>{const n=B._createFromPositionAndShift(o.sourcePosition,o.howMany),i=B._createFromPositionAndShift(t.sourcePosition,t.howMany);let r,s=e.aIsStrong,a=!e.aIsStrong;if(e.abRelation=="insertBefore"||e.baRelation=="insertAfter"?a=!0:e.abRelation!="insertAfter"&&e.baRelation!="insertBefore"||(a=!1),r=o.targetPosition.isEqual(t.targetPosition)&&a?o.targetPosition._getTransformedByDeletion(t.sourcePosition,t.howMany):o.targetPosition._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),kh(o,t)&&kh(t,o))return[t.getReversed()];if(n.containsPosition(t.targetPosition)&&n.containsRange(i,!0))return n.start=n.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),n.end=n.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),uo([n],r);if(i.containsPosition(o.targetPosition)&&i.containsRange(n,!0))return n.start=n.start._getCombined(t.sourcePosition,t.getMovedRangeStart()),n.end=n.end._getCombined(t.sourcePosition,t.getMovedRangeStart()),uo([n],r);const c=St(o.sourcePosition.getParentPath(),t.sourcePosition.getParentPath());if(c=="prefix"||c=="extension")return n.start=n.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),n.end=n.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),uo([n],r);o.type!="remove"||t.type=="remove"||e.aWasUndone||e.forceWeakRemove?o.type=="remove"||t.type!="remove"||e.bWasUndone||e.forceWeakRemove||(s=!1):s=!0;const l=[],d=n.getDifference(i);for(const u of d){u.start=u.start._getTransformedByDeletion(t.sourcePosition,t.howMany),u.end=u.end._getTransformedByDeletion(t.sourcePosition,t.howMany);const g=St(u.start.getParentPath(),t.getMovedRangeStart().getParentPath())=="same",p=u._getTransformedByInsertion(t.getMovedRangeStart(),t.howMany,g);l.push(...p)}const h=n.getIntersection(i);return h!==null&&s&&(h.start=h.start._getCombined(t.sourcePosition,t.getMovedRangeStart()),h.end=h.end._getCombined(t.sourcePosition,t.getMovedRangeStart()),l.length===0?l.push(h):l.length==1?i.start.isBefore(n.start)||i.start.isEqual(n.start)?l.unshift(h):l.push(h):l.splice(1,0,h)),l.length===0?[new Ht(o.baseVersion)]:uo(l,r)}),gt(ft,xt,(o,t,e)=>{let n=o.targetPosition.clone();o.targetPosition.isEqual(t.insertionPosition)&&t.graveyardPosition&&e.abRelation!="moveTargetAfter"||(n=o.targetPosition._getTransformedBySplitOperation(t));const i=B._createFromPositionAndShift(o.sourcePosition,o.howMany);if(i.end.isEqual(t.insertionPosition))return t.graveyardPosition||o.howMany++,o.targetPosition=n,[o];if(i.start.hasSameParentAs(t.splitPosition)&&i.containsPosition(t.splitPosition)){let s=new B(t.splitPosition,i.end);return s=s._getTransformedBySplitOperation(t),uo([new B(i.start,t.splitPosition),s],n)}o.targetPosition.isEqual(t.splitPosition)&&e.abRelation=="insertAtSource"&&(n=t.moveTargetPosition),o.targetPosition.isEqual(t.insertionPosition)&&e.abRelation=="insertBetween"&&(n=o.targetPosition);const r=[i._getTransformedBySplitOperation(t)];if(t.graveyardPosition){const s=i.start.isEqual(t.graveyardPosition)||i.containsPosition(t.graveyardPosition);o.howMany>1&&s&&!e.aWasUndone&&r.push(B._createFromPositionAndShift(t.insertionPosition,1))}return uo(r,n)}),gt(ft,Nt,(o,t,e)=>{const n=B._createFromPositionAndShift(o.sourcePosition,o.howMany);if(t.deletionPosition.hasSameParentAs(o.sourcePosition)&&n.containsPosition(t.sourcePosition)){if(o.type!="remove"||e.forceWeakRemove){if(o.howMany==1)return e.bWasUndone?(o.sourcePosition=t.graveyardPosition.clone(),o.targetPosition=o.targetPosition._getTransformedByMergeOperation(t),[o]):[new Ht(0)]}else if(!e.aWasUndone){const r=[];let s=t.graveyardPosition.clone(),a=t.targetPosition._getTransformedByMergeOperation(t);o.howMany>1&&(r.push(new ft(o.sourcePosition,o.howMany-1,o.targetPosition,0)),s=s._getTransformedByMove(o.sourcePosition,o.targetPosition,o.howMany-1),a=a._getTransformedByMove(o.sourcePosition,o.targetPosition,o.howMany-1));const c=t.deletionPosition._getCombined(o.sourcePosition,o.targetPosition),l=new ft(s,1,c,0),d=l.getMovedRangeStart().path.slice();d.push(0);const h=new O(l.targetPosition.root,d);a=a._getTransformedByMove(s,c,1);const u=new ft(a,t.howMany,h,0);return r.push(l),r.push(u),r}}const i=B._createFromPositionAndShift(o.sourcePosition,o.howMany)._getTransformedByMergeOperation(t);return o.sourcePosition=i.start,o.howMany=i.end.offset-i.start.offset,o.targetPosition=o.targetPosition._getTransformedByMergeOperation(t),[o]}),gt(se,$t,(o,t)=>(o.position=o.position._getTransformedByInsertOperation(t),[o])),gt(se,Nt,(o,t)=>o.position.isEqual(t.deletionPosition)?(o.position=t.graveyardPosition.clone(),o.position.stickiness="toNext",[o]):(o.position=o.position._getTransformedByMergeOperation(t),[o])),gt(se,ft,(o,t)=>(o.position=o.position._getTransformedByMoveOperation(t),[o])),gt(se,se,(o,t,e)=>{if(o.position.isEqual(t.position)){if(!e.aIsStrong)return[new Ht(0)];o.oldName=t.newName}return[o]}),gt(se,xt,(o,t)=>{if(St(o.position.path,t.splitPosition.getParentPath())=="same"&&!t.graveyardPosition){const e=new se(o.position.getShiftedBy(1),o.oldName,o.newName,0);return[o,e]}return o.position=o.position._getTransformedBySplitOperation(t),[o]}),gt(en,en,(o,t,e)=>{if(o.root===t.root&&o.key===t.key){if(!e.aIsStrong||o.newValue===t.newValue)return[new Ht(0)];o.oldValue=t.newValue}return[o]}),gt(Ye,Ye,(o,t)=>o.rootName===t.rootName&&o.isAdd===t.isAdd?[new Ht(0)]:[o]),gt(xt,$t,(o,t)=>(o.splitPosition.hasSameParentAs(t.position)&&o.splitPosition.offset{if(!o.graveyardPosition&&!e.bWasUndone&&o.splitPosition.hasSameParentAs(t.sourcePosition)){const n=t.graveyardPosition.path.slice();n.push(0);const i=new O(t.graveyardPosition.root,n),r=xt.getInsertionPosition(new O(t.graveyardPosition.root,n)),s=new xt(i,0,r,null,0);return o.splitPosition=o.splitPosition._getTransformedByMergeOperation(t),o.insertionPosition=xt.getInsertionPosition(o.splitPosition),o.graveyardPosition=s.insertionPosition.clone(),o.graveyardPosition.stickiness="toNext",[s,o]}return o.splitPosition.hasSameParentAs(t.deletionPosition)&&!o.splitPosition.isAfter(t.deletionPosition)&&o.howMany--,o.splitPosition.hasSameParentAs(t.targetPosition)&&(o.howMany+=t.howMany),o.splitPosition=o.splitPosition._getTransformedByMergeOperation(t),o.insertionPosition=xt.getInsertionPosition(o.splitPosition),o.graveyardPosition&&(o.graveyardPosition=o.graveyardPosition._getTransformedByMergeOperation(t)),[o]}),gt(xt,ft,(o,t,e)=>{const n=B._createFromPositionAndShift(t.sourcePosition,t.howMany);if(o.graveyardPosition){const r=n.start.isEqual(o.graveyardPosition)||n.containsPosition(o.graveyardPosition);if(!e.bWasUndone&&r){const s=o.splitPosition._getTransformedByMoveOperation(t),a=o.graveyardPosition._getTransformedByMoveOperation(t),c=a.path.slice();c.push(0);const l=new O(a.root,c);return[new ft(s,o.howMany,l,0)]}o.graveyardPosition=o.graveyardPosition._getTransformedByMoveOperation(t)}const i=o.splitPosition.isEqual(t.targetPosition);if(i&&(e.baRelation=="insertAtSource"||e.abRelation=="splitBefore"))return o.howMany+=t.howMany,o.splitPosition=o.splitPosition._getTransformedByDeletion(t.sourcePosition,t.howMany),o.insertionPosition=xt.getInsertionPosition(o.splitPosition),[o];if(i&&e.abRelation&&e.abRelation.howMany){const{howMany:r,offset:s}=e.abRelation;return o.howMany+=r,o.splitPosition=o.splitPosition.getShiftedBy(s),[o]}if(o.splitPosition.hasSameParentAs(t.sourcePosition)&&n.containsPosition(o.splitPosition)){const r=t.howMany-(o.splitPosition.offset-t.sourcePosition.offset);return o.howMany-=r,o.splitPosition.hasSameParentAs(t.targetPosition)&&o.splitPosition.offset{if(o.splitPosition.isEqual(t.splitPosition)){if(!o.graveyardPosition&&!t.graveyardPosition)return[new Ht(0)];if(o.graveyardPosition&&t.graveyardPosition&&o.graveyardPosition.isEqual(t.graveyardPosition))return[new Ht(0)];if(e.abRelation=="splitBefore")return o.howMany=0,o.graveyardPosition=o.graveyardPosition._getTransformedBySplitOperation(t),[o]}if(o.graveyardPosition&&t.graveyardPosition&&o.graveyardPosition.isEqual(t.graveyardPosition)){const n=o.splitPosition.root.rootName=="$graveyard",i=t.splitPosition.root.rootName=="$graveyard";if(i&&!n||!(n&&!i)&&e.aIsStrong){const r=[];return t.howMany&&r.push(new ft(t.moveTargetPosition,t.howMany,t.splitPosition,0)),o.howMany&&r.push(new ft(o.splitPosition,o.howMany,o.moveTargetPosition,0)),r}return[new Ht(0)]}if(o.graveyardPosition&&(o.graveyardPosition=o.graveyardPosition._getTransformedBySplitOperation(t)),o.splitPosition.isEqual(t.insertionPosition)&&e.abRelation=="splitBefore")return o.howMany++,[o];if(t.splitPosition.isEqual(o.insertionPosition)&&e.baRelation=="splitBefore"){const n=t.insertionPosition.path.slice();n.push(0);const i=new O(t.insertionPosition.root,n);return[o,new ft(o.insertionPosition,1,i,0)]}return o.splitPosition.hasSameParentAs(t.splitPosition)&&o.splitPosition.offset{const e=t[0];e.isDocumentOperation&&aC.call(this,e)},{priority:"low"})}function aC(o){const t=this.getTransformedByOperation(o);if(!this.isEqual(t)){const e=this.toPosition();this.path=t.path,this.root=t.root,this.fire("change",e)}}Zt.prototype.is=function(o){return o==="livePosition"||o==="model:livePosition"||o=="position"||o==="model:position"};class go{constructor(t={}){typeof t=="string"&&(t=t==="transparent"?{isUndoable:!1}:{},Y("batch-constructor-deprecated-string-type"));const{isUndoable:e=!0,isLocal:n=!0,isUndo:i=!1,isTyping:r=!1}=t;this.operations=[],this.isUndoable=e,this.isLocal=n,this.isUndo=i,this.isTyping=r}get type(){return Y("batch-type-deprecated"),"default"}get baseVersion(){for(const t of this.operations)if(t.baseVersion!==null)return t.baseVersion;return null}addOperation(t){return t.batch=this,this.operations.push(t),t}}var cC=Object.defineProperty,lC=Object.defineProperties,dC=Object.getOwnPropertyDescriptors,bh=Object.getOwnPropertySymbols,hC=Object.prototype.hasOwnProperty,uC=Object.prototype.propertyIsEnumerable,wh=(o,t,e)=>t in o?cC(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Ah=(o,t)=>{for(var e in t||(t={}))hC.call(t,e)&&wh(o,e,t[e]);if(bh)for(var e of bh(t))uC.call(t,e)&&wh(o,e,t[e]);return o};class gC{constructor(t){this._changesInElement=new Map,this._elementSnapshots=new Map,this._changedMarkers=new Map,this._changedRoots=new Map,this._changeCount=0,this._cachedChanges=null,this._cachedChangesWithGraveyard=null,this._refreshedItems=new Set,this._markerCollection=t}get isEmpty(){return this._changesInElement.size==0&&this._changedMarkers.size==0&&this._changedRoots.size==0}bufferOperation(t){const e=t;switch(e.type){case"insert":if(this._isInInsertedElement(e.position.parent))return;this._markInsert(e.position.parent,e.position.offset,e.nodes.maxOffset);break;case"addAttribute":case"removeAttribute":case"changeAttribute":for(const n of e.range.getItems({shallow:!0}))this._isInInsertedElement(n.parent)||this._markAttribute(n);break;case"remove":case"move":case"reinsert":{if(e.sourcePosition.isEqual(e.targetPosition)||e.sourcePosition.getShiftedBy(e.howMany).isEqual(e.targetPosition))return;const n=this._isInInsertedElement(e.sourcePosition.parent),i=this._isInInsertedElement(e.targetPosition.parent);n||this._markRemove(e.sourcePosition.parent,e.sourcePosition.offset,e.howMany),i||this._markInsert(e.targetPosition.parent,e.getMovedRangeStart().offset,e.howMany);break}case"rename":{if(this._isInInsertedElement(e.position.parent))return;this._markRemove(e.position.parent,e.position.offset,1),this._markInsert(e.position.parent,e.position.offset,1);const n=B._createFromPositionAndShift(e.position,1);for(const i of this._markerCollection.getMarkersIntersectingRange(n)){const r=i.getData();this.bufferMarkerChange(i.name,r,r)}break}case"split":{const n=e.splitPosition.parent;this._isInInsertedElement(n)||this._markRemove(n,e.splitPosition.offset,e.howMany),this._isInInsertedElement(e.insertionPosition.parent)||this._markInsert(e.insertionPosition.parent,e.insertionPosition.offset,1),e.graveyardPosition&&this._markRemove(e.graveyardPosition.parent,e.graveyardPosition.offset,1);break}case"merge":{const n=e.sourcePosition.parent;this._isInInsertedElement(n.parent)||this._markRemove(n.parent,n.startOffset,1);const i=e.graveyardPosition.parent;this._markInsert(i,e.graveyardPosition.offset,1);const r=e.targetPosition.parent;this._isInInsertedElement(r)||this._markInsert(r,e.targetPosition.offset,n.maxOffset);break}case"detachRoot":case"addRoot":{const n=e.affectedSelectable;if(!n._isLoaded||n.isAttached()==e.isAdd)return;this._bufferRootStateChange(e.rootName,e.isAdd);break}case"addRootAttribute":case"removeRootAttribute":case"changeRootAttribute":{if(!e.root._isLoaded)return;const n=e.root.rootName;this._bufferRootAttributeChange(n,e.key,e.oldValue,e.newValue);break}}this._cachedChanges=null}bufferMarkerChange(t,e,n){e.range&&e.range.root.is("rootElement")&&!e.range.root._isLoaded&&(e.range=null),n.range&&n.range.root.is("rootElement")&&!n.range.root._isLoaded&&(n.range=null);let i=this._changedMarkers.get(t);i?i.newMarkerData=n:(i={newMarkerData:n,oldMarkerData:e},this._changedMarkers.set(t,i)),i.oldMarkerData.range==null&&n.range==null&&this._changedMarkers.delete(t)}getMarkersToRemove(){const t=[];for(const[e,n]of this._changedMarkers)n.oldMarkerData.range!=null&&t.push({name:e,range:n.oldMarkerData.range});return t}getMarkersToAdd(){const t=[];for(const[e,n]of this._changedMarkers)n.newMarkerData.range!=null&&t.push({name:e,range:n.newMarkerData.range});return t}getChangedMarkers(){return Array.from(this._changedMarkers).map(([t,e])=>({name:t,data:{oldRange:e.oldMarkerData.range,newRange:e.newMarkerData.range}}))}hasDataChanges(){if(this._changesInElement.size>0||this._changedRoots.size>0)return!0;for(const{newMarkerData:t,oldMarkerData:e}of this._changedMarkers.values()){if(t.affectsData!==e.affectsData)return!0;if(t.affectsData){const n=t.range&&!e.range,i=!t.range&&e.range,r=t.range&&e.range&&!t.range.isEqual(e.range);if(n||i||r)return!0}}return!1}getChanges(t={}){if(this._cachedChanges)return t.includeChangesInGraveyard?this._cachedChangesWithGraveyard.slice():this._cachedChanges.slice();let e=[];for(const n of this._changesInElement.keys()){const i=this._changesInElement.get(n).sort((d,h)=>d.offset===h.offset?d.type!=h.type?d.type=="remove"?-1:1:0:d.offsetn.position.root!=i.position.root?n.position.root.rootNamen);for(const n of e)delete n.changeCount,n.type=="attribute"&&(delete n.position,delete n.length);return this._changeCount=0,this._cachedChangesWithGraveyard=e,this._cachedChanges=e.filter(mC),t.includeChangesInGraveyard?this._cachedChangesWithGraveyard.slice():this._cachedChanges.slice()}getChangedRoots(){return Array.from(this._changedRoots.values()).map(t=>{const e=Ah({},t);return e.state!==void 0&&delete e.attributes,e})}getRefreshedItems(){return new Set(this._refreshedItems)}reset(){this._changesInElement.clear(),this._elementSnapshots.clear(),this._changedMarkers.clear(),this._changedRoots.clear(),this._refreshedItems=new Set,this._cachedChanges=null}_bufferRootStateChange(t,e){if(!this._changedRoots.has(t))return void this._changedRoots.set(t,{name:t,state:e?"attached":"detached"});const n=this._changedRoots.get(t);n.state!==void 0?(delete n.state,n.attributes===void 0&&this._changedRoots.delete(t)):n.state=e?"attached":"detached"}_bufferRootAttributeChange(t,e,n,i){const r=this._changedRoots.get(t)||{name:t},s=r.attributes||{};if(s[e]){const a=s[e];i===a.oldValue?delete s[e]:a.newValue=i}else s[e]={oldValue:n,newValue:i};Object.entries(s).length===0?(delete r.attributes,r.state===void 0&&this._changedRoots.delete(t)):(r.attributes=s,this._changedRoots.set(t,r))}_refreshItem(t){if(this._isInInsertedElement(t.parent))return;this._markRemove(t.parent,t.startOffset,t.offsetSize),this._markInsert(t.parent,t.startOffset,t.offsetSize),this._refreshedItems.add(t);const e=B._createOn(t);for(const n of this._markerCollection.getMarkersIntersectingRange(e)){const i=n.getData();this.bufferMarkerChange(n.name,i,i)}this._cachedChanges=null}_bufferRootLoad(t){if(t.isAttached()){this._bufferRootStateChange(t.rootName,!0),this._markInsert(t,0,t.maxOffset);for(const n of t.getAttributeKeys())this._bufferRootAttributeChange(t.rootName,n,null,t.getAttribute(n));for(const n of this._markerCollection)if(n.getRange().root==t){const i=n.getData();this.bufferMarkerChange(n.name,(e=Ah({},i),lC(e,dC({range:null}))),i)}var e}}_markInsert(t,e,n){if(t.root.is("rootElement")&&!t.root._isLoaded)return;const i={type:"insert",offset:e,howMany:n,count:this._changeCount++};this._markChange(t,i)}_markRemove(t,e,n){if(t.root.is("rootElement")&&!t.root._isLoaded)return;const i={type:"remove",offset:e,howMany:n,count:this._changeCount++};this._markChange(t,i),this._removeAllNestedChanges(t,e,n)}_markAttribute(t){if(t.root.is("rootElement")&&!t.root._isLoaded)return;const e={type:"attribute",offset:t.startOffset,howMany:t.offsetSize,count:this._changeCount++};this._markChange(t.parent,e)}_markChange(t,e){this._makeSnapshot(t);const n=this._getChangesForElement(t);this._handleChange(e,n),n.push(e);for(let i=0;in.offset){if(i>r){const s={type:"attribute",offset:r,howMany:i-r,count:this._changeCount++};this._handleChange(s,e),e.push(s)}t.nodesToHandle=n.offset-t.offset,t.howMany=t.nodesToHandle}else t.offset>=n.offset&&t.offsetr?(t.nodesToHandle=i-r,t.offset=r):t.nodesToHandle=0);if(n.type=="remove"&&t.offsetn.offset){const s={type:"attribute",offset:n.offset,howMany:i-n.offset,count:this._changeCount++};this._handleChange(s,e),e.push(s),t.nodesToHandle=n.offset-t.offset,t.howMany=t.nodesToHandle}n.type=="attribute"&&(t.offset>=n.offset&&i<=r?(t.nodesToHandle=0,t.howMany=0,t.offset=0):t.offset<=n.offset&&i>=r&&(n.howMany=0))}}t.howMany=t.nodesToHandle,delete t.nodesToHandle}_getInsertDiff(t,e,n){return{type:"insert",position:O._createAt(t,e),name:n.name,attributes:new Map(n.attributes),length:1,changeCount:this._changeCount++,_element:n.element}}_getRemoveDiff(t,e,n){return{type:"remove",position:O._createAt(t,e),name:n.name,attributes:new Map(n.attributes),length:1,changeCount:this._changeCount++,_element:n.element}}_getAttributesDiff(t,e,n){const i=[];n=new Map(n);for(const[r,s]of e){const a=n.has(r)?n.get(r):null;a!==s&&i.push({type:"attribute",position:t.start,range:t.clone(),length:1,attributeKey:r,attributeOldValue:s,attributeNewValue:a,changeCount:this._changeCount++}),n.delete(r)}for(const[r,s]of n)i.push({type:"attribute",position:t.start,range:t.clone(),length:1,attributeKey:r,attributeOldValue:null,attributeNewValue:s,changeCount:this._changeCount++});return i}_isInInsertedElement(t){const e=t.parent;if(!e)return!1;const n=this._changesInElement.get(e),i=t.startOffset;if(n){for(const r of n)if(r.type=="insert"&&i>=r.offset&&in){for(let s=0;sthis._version+1&&this._gaps.set(this._version,t),this._version=t}get lastOperation(){return this._operations[this._operations.length-1]}addOperation(t){if(t.baseVersion!==this.version)throw new _("model-document-history-addoperation-incorrect-version",this,{operation:t,historyVersion:this.version});this._operations.push(t),this._version++,this._baseVersionToOperationIndex.set(t.baseVersion,this._operations.length-1)}getOperations(t,e=this.version){if(!this._operations.length)return[];const n=this._operations[0];t===void 0&&(t=n.baseVersion);let i=e-1;for(const[a,c]of this._gaps)t>a&&ta&&ithis.lastOperation.baseVersion)return[];let r=this._baseVersionToOperationIndex.get(t);r===void 0&&(r=0);let s=this._baseVersionToOperationIndex.get(i);return s===void 0&&(s=this._operations.length-1),this._operations.slice(r,s+1)}getOperation(t){const e=this._baseVersionToOperationIndex.get(t);if(e!==void 0)return this._operations[e]}setOperationAsUndone(t,e){this._undoPairs.set(e,t),this._undoneOperations.add(t)}isUndoingOperation(t){return this._undoPairs.has(t)}isUndoneOperation(t){return this._undoneOperations.has(t)}getUndoneOperation(t){return this._undoPairs.get(t)}reset(){this._version=0,this._undoPairs=new Map,this._operations=[],this._undoneOperations=new Set,this._gaps=new Map,this._baseVersionToOperationIndex=new Map}}class Qi extends Ct{constructor(t,e,n="main"){super(e),this._isAttached=!0,this._isLoaded=!0,this._document=t,this.rootName=n}get document(){return this._document}isAttached(){return this._isAttached}toJSON(){return this.rootName}}Qi.prototype.is=function(o,t){return t?t===this.name&&(o==="rootElement"||o==="model:rootElement"||o==="element"||o==="model:element"):o==="rootElement"||o==="model:rootElement"||o==="element"||o==="model:element"||o==="node"||o==="model:node"};var kC=Object.defineProperty,bC=Object.defineProperties,wC=Object.getOwnPropertyDescriptors,_h=Object.getOwnPropertySymbols,AC=Object.prototype.hasOwnProperty,CC=Object.prototype.propertyIsEnumerable,vh=(o,t,e)=>t in o?kC(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,yh=(o,t)=>{for(var e in t||(t={}))AC.call(t,e)&&vh(o,e,t[e]);if(_h)for(var e of _h(t))CC.call(t,e)&&vh(o,e,t[e]);return o},xh=(o,t)=>bC(o,wC(t));const Eh="$graveyard";class _C extends kt(){constructor(t){super(),this.model=t,this.history=new fC,this.selection=new ze(this),this.roots=new Me({idProperty:"rootName"}),this.differ=new gC(t.markers),this.isReadOnly=!1,this._postFixers=new Set,this._hasSelectionChangedFromTheLastChangeBlock=!1,this.createRoot("$root",Eh),this.listenTo(t,"applyOperation",(e,n)=>{const i=n[0];i.isDocumentOperation&&this.differ.bufferOperation(i)},{priority:"high"}),this.listenTo(t,"applyOperation",(e,n)=>{const i=n[0];i.isDocumentOperation&&this.history.addOperation(i)},{priority:"low"}),this.listenTo(this.selection,"change",()=>{this._hasSelectionChangedFromTheLastChangeBlock=!0}),this.listenTo(t.markers,"update",(e,n,i,r,s)=>{const a=xh(yh({},n.getData()),{range:r});this.differ.bufferMarkerChange(n.name,s,a),i===null&&n.on("change",(c,l)=>{const d=n.getData();this.differ.bufferMarkerChange(n.name,xh(yh({},d),{range:l}),d)})}),this.registerPostFixer(e=>{let n=!1;for(const i of this.roots)i.isAttached()||i.isEmpty||(e.remove(e.createRangeIn(i)),n=!0);for(const i of this.model.markers)i.getRange().root.isAttached()||(e.removeMarker(i),n=!0);return n})}get version(){return this.history.version}set version(t){this.history.version=t}get graveyard(){return this.getRoot(Eh)}createRoot(t="$root",e="main"){if(this.roots.get(e))throw new _("model-document-createroot-name-exists",this,{name:e});const n=new Qi(this,t,e);return this.roots.add(n),n}destroy(){this.selection.destroy(),this.stopListening()}getRoot(t="main"){return this.roots.get(t)}getRootNames(t=!1){return this.getRoots(t).map(e=>e.rootName)}getRoots(t=!1){return this.roots.filter(e=>e!=this.graveyard&&(t||e.isAttached())&&e._isLoaded)}registerPostFixer(t){this._postFixers.add(t)}toJSON(){const t=Hl(this);return t.selection="[engine.model.DocumentSelection]",t.model="[engine.model.Model]",t}_handleChangeBlock(t){this._hasDocumentChangedFromTheLastChangeBlock()&&(this._callPostFixers(t),this.selection.refresh(),this.differ.hasDataChanges()?this.fire("change:data",t.batch):this.fire("change",t.batch),this.selection.refresh(),this.differ.reset()),this._hasSelectionChangedFromTheLastChangeBlock=!1}_hasDocumentChangedFromTheLastChangeBlock(){return!this.differ.isEmpty||this._hasSelectionChangedFromTheLastChangeBlock}_getDefaultRoot(){const t=this.getRoots();return t.length?t[0]:this.graveyard}_getDefaultRange(){const t=this._getDefaultRoot(),e=this.model,n=e.schema,i=e.createPositionFromPath(t,[0]);return n.getNearestSelectionRange(i)||e.createRange(i)}_validateSelectionRange(t){return Dh(t.start)&&Dh(t.end)}_callPostFixers(t){let e=!1;do for(const n of this._postFixers)if(this.selection.refresh(),e=n(t),e)break;while(e)}}function Dh(o){const t=o.textNode;if(t){const e=t.data,n=o.offset-t.startOffset;return!es(e,n)&&!os(e,n)}return!0}var vC=Object.defineProperty,yC=Object.defineProperties,xC=Object.getOwnPropertyDescriptors,Ih=Object.getOwnPropertySymbols,EC=Object.prototype.hasOwnProperty,DC=Object.prototype.propertyIsEnumerable,Sh=(o,t,e)=>t in o?vC(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;class IC extends kt(){constructor(){super(...arguments),this._markers=new Map}[Symbol.iterator](){return this._markers.values()}has(t){const e=t instanceof po?t.name:t;return this._markers.has(e)}get(t){return this._markers.get(t)||null}_set(t,e,n=!1,i=!1){const r=t instanceof po?t.name:t;if(r.includes(","))throw new _("markercollection-incorrect-marker-name",this);const s=this._markers.get(r);if(s){const d=s.getData(),h=s.getRange();let u=!1;return h.isEqual(e)||(s._attachLiveRange(pe.fromRange(e)),u=!0),n!=s.managedUsingOperations&&(s._managedUsingOperations=n,u=!0),typeof i=="boolean"&&i!=s.affectsData&&(s._affectsData=i,u=!0),u&&this.fire(`update:${r}`,s,h,e,d),s}const a=pe.fromRange(e),c=new po(r,a,n,i);var l;return this._markers.set(r,c),this.fire(`update:${r}`,c,null,e,(l=((d,h)=>{for(var u in h||(h={}))EC.call(h,u)&&Sh(d,u,h[u]);if(Ih)for(var u of Ih(h))DC.call(h,u)&&Sh(d,u,h[u]);return d})({},c.getData()),yC(l,xC({range:null})))),c}_remove(t){const e=t instanceof po?t.name:t,n=this._markers.get(e);return!!n&&(this._markers.delete(e),this.fire(`update:${e}`,n,n.getRange(),null,n.getData()),this._destroyMarker(n),!0)}_refresh(t){const e=t instanceof po?t.name:t,n=this._markers.get(e);if(!n)throw new _("markercollection-refresh-marker-not-exists",this);const i=n.getRange();this.fire(`update:${e}`,n,i,i,n.getData())}*getMarkersAtPosition(t){for(const e of this)e.getRange().containsPosition(t)&&(yield e)}*getMarkersIntersectingRange(t){for(const e of this)e.getRange().getIntersection(t)!==null&&(yield e)}destroy(){for(const t of this._markers.values())this._destroyMarker(t);this._markers=null,this.stopListening()}*getMarkersGroup(t){for(const e of this._markers.values())e.name.startsWith(t+":")&&(yield e)}_destroyMarker(t){t.stopListening(),t._detachLiveRange()}}class po extends kt(bn){constructor(t,e,n,i){super(),this.name=t,this._liveRange=this._attachLiveRange(e),this._managedUsingOperations=n,this._affectsData=i}get managedUsingOperations(){if(!this._liveRange)throw new _("marker-destroyed",this);return this._managedUsingOperations}get affectsData(){if(!this._liveRange)throw new _("marker-destroyed",this);return this._affectsData}getData(){return{range:this.getRange(),affectsData:this.affectsData,managedUsingOperations:this.managedUsingOperations}}getStart(){if(!this._liveRange)throw new _("marker-destroyed",this);return this._liveRange.start.clone()}getEnd(){if(!this._liveRange)throw new _("marker-destroyed",this);return this._liveRange.end.clone()}getRange(){if(!this._liveRange)throw new _("marker-destroyed",this);return this._liveRange.toRange()}_attachLiveRange(t){return this._liveRange&&this._detachLiveRange(),t.delegate("change:range").to(this),t.delegate("change:content").to(this),this._liveRange=t,t}_detachLiveRange(){this._liveRange.stopDelegating("change:range",this),this._liveRange.stopDelegating("change:content",this),this._liveRange.detach(),this._liveRange=null}}po.prototype.is=function(o){return o==="marker"||o==="model:marker"};class SC extends me{constructor(t,e){super(null),this.sourcePosition=t.clone(),this.howMany=e}get type(){return"detach"}get affectedSelectable(){return null}toJSON(){const t=super.toJSON();return t.sourcePosition=this.sourcePosition.toJSON(),t}_validate(){if(this.sourcePosition.root.document)throw new _("detach-operation-on-document-node",this)}_execute(){lh(B._createFromPositionAndShift(this.sourcePosition,this.howMany))}static get className(){return"DetachOperation"}}class nn extends bn{constructor(t){super(),this.markers=new Map,this._children=new Yo,t&&this._insertChild(0,t)}[Symbol.iterator](){return this.getChildren()}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return this.childCount===0}get nextSibling(){return null}get previousSibling(){return null}get root(){return this}get parent(){return null}get document(){return null}isAttached(){return!1}getAncestors(){return[]}getChild(t){return this._children.getNode(t)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(t){return this._children.getNodeIndex(t)}getChildStartOffset(t){return this._children.getNodeStartOffset(t)}getPath(){return[]}getNodeByPath(t){let e=this;for(const n of t)e=e.getChild(e.offsetToIndex(n));return e}offsetToIndex(t){return this._children.offsetToIndex(t)}toJSON(){const t=[];for(const e of this._children)t.push(e.toJSON());return t}static fromJSON(t){const e=[];for(const n of t)n.name?e.push(Ct.fromJSON(n)):e.push(yt.fromJSON(n));return new nn(e)}_appendChild(t){this._insertChild(this.childCount,t)}_insertChild(t,e){const n=function(i){return typeof i=="string"?[new yt(i)]:(Gt(i)||(i=[i]),Array.from(i).map(r=>typeof r=="string"?new yt(r):r instanceof Oe?new yt(r.data,r.getAttributes()):r))}(e);for(const i of n)i.parent!==null&&i._remove(),i.parent=this;this._children._insertNodes(t,n)}_removeChildren(t,e=1){const n=this._children._removeNodes(t,e);for(const i of n)i.parent=null;return n}}nn.prototype.is=function(o){return o==="documentFragment"||o==="model:documentFragment"};class TC{constructor(t,e){this.model=t,this.batch=e}createText(t,e){return new yt(t,e)}createElement(t,e){return new Ct(t,e)}createDocumentFragment(){return new nn}cloneElement(t,e=!0){return t._clone(e)}insert(t,e,n=0){if(this._assertWriterUsedCorrectly(),t instanceof yt&&t.data=="")return;const i=O._createAt(e,n);if(t.parent){if(Bh(t.root,i.root))return void this.move(B._createOn(t),i);if(t.root.document)throw new _("model-writer-insert-forbidden-move",this);this.remove(t)}const r=i.root.document?i.root.document.version:null,s=new $t(i,t,r);if(t instanceof yt&&(s.shouldReceiveAttributes=!0),this.batch.addOperation(s),this.model.applyOperation(s),t instanceof nn)for(const[a,c]of t.markers){const l=O._createAt(c.root,0),d={range:new B(c.start._getCombined(l,i),c.end._getCombined(l,i)),usingOperation:!0,affectsData:!0};this.model.markers.has(a)?this.updateMarker(a,d):this.addMarker(a,d)}}insertText(t,e,n,i){e instanceof nn||e instanceof Ct||e instanceof O?this.insert(this.createText(t),e,n):this.insert(this.createText(t,e),n,i)}insertElement(t,e,n,i){e instanceof nn||e instanceof Ct||e instanceof O?this.insert(this.createElement(t),e,n):this.insert(this.createElement(t,e),n,i)}append(t,e){this.insert(t,e,"end")}appendText(t,e,n){e instanceof nn||e instanceof Ct?this.insert(this.createText(t),e,"end"):this.insert(this.createText(t,e),n,"end")}appendElement(t,e,n){e instanceof nn||e instanceof Ct?this.insert(this.createElement(t),e,"end"):this.insert(this.createElement(t,e),n,"end")}setAttribute(t,e,n){if(this._assertWriterUsedCorrectly(),n instanceof B){const i=n.getMinimalFlatRanges();for(const r of i)Th(this,t,e,r)}else Mh(this,t,e,n)}setAttributes(t,e){for(const[n,i]of We(t))this.setAttribute(n,i,e)}removeAttribute(t,e){if(this._assertWriterUsedCorrectly(),e instanceof B){const n=e.getMinimalFlatRanges();for(const i of n)Th(this,t,null,i)}else Mh(this,t,null,e)}clearAttributes(t){this._assertWriterUsedCorrectly();const e=n=>{for(const i of n.getAttributeKeys())this.removeAttribute(i,n)};if(t instanceof B)for(const n of t.getItems())e(n);else e(t)}move(t,e,n){if(this._assertWriterUsedCorrectly(),!(t instanceof B))throw new _("writer-move-invalid-range",this);if(!t.isFlat)throw new _("writer-move-range-not-flat",this);const i=O._createAt(e,n);if(i.isEqual(t.start))return;if(this._addOperationForAffectedMarkers("move",t),!Bh(t.root,i.root))throw new _("writer-move-different-document",this);const r=t.root.document?t.root.document.version:null,s=new ft(t.start,t.end.offset-t.start.offset,i,r);this.batch.addOperation(s),this.model.applyOperation(s)}remove(t){this._assertWriterUsedCorrectly();const e=(t instanceof B?t:B._createOn(t)).getMinimalFlatRanges().reverse();for(const n of e)this._addOperationForAffectedMarkers("move",n),MC(n.start,n.end.offset-n.start.offset,this.batch,this.model)}merge(t){this._assertWriterUsedCorrectly();const e=t.nodeBefore,n=t.nodeAfter;if(this._addOperationForAffectedMarkers("merge",t),!(e instanceof Ct))throw new _("writer-merge-no-element-before",this);if(!(n instanceof Ct))throw new _("writer-merge-no-element-after",this);t.root.document?this._merge(t):this._mergeDetached(t)}createPositionFromPath(t,e,n){return this.model.createPositionFromPath(t,e,n)}createPositionAt(t,e){return this.model.createPositionAt(t,e)}createPositionAfter(t){return this.model.createPositionAfter(t)}createPositionBefore(t){return this.model.createPositionBefore(t)}createRange(t,e){return this.model.createRange(t,e)}createRangeIn(t){return this.model.createRangeIn(t)}createRangeOn(t){return this.model.createRangeOn(t)}createSelection(...t){return this.model.createSelection(...t)}_mergeDetached(t){const e=t.nodeBefore,n=t.nodeAfter;this.move(B._createIn(n),O._createAt(e,"end")),this.remove(n)}_merge(t){const e=O._createAt(t.nodeBefore,"end"),n=O._createAt(t.nodeAfter,0),i=t.root.document.graveyard,r=new O(i,[0]),s=t.root.document.version,a=new Nt(n,t.nodeAfter.maxOffset,e,r,s);this.batch.addOperation(a),this.model.applyOperation(a)}rename(t,e){if(this._assertWriterUsedCorrectly(),!(t instanceof Ct))throw new _("writer-rename-not-element-instance",this);const n=t.root.document?t.root.document.version:null,i=new se(O._createBefore(t),t.name,e,n);this.batch.addOperation(i),this.model.applyOperation(i)}split(t,e){this._assertWriterUsedCorrectly();let n,i,r=t.parent;if(!r.parent)throw new _("writer-split-element-no-parent",this);if(e||(e=r.parent),!t.parent.getAncestors({includeSelf:!0}).includes(e))throw new _("writer-split-invalid-limit-element",this);do{const s=r.root.document?r.root.document.version:null,a=r.maxOffset-t.offset,c=xt.getInsertionPosition(t),l=new xt(t,a,c,null,s);this.batch.addOperation(l),this.model.applyOperation(l),n||i||(n=r,i=t.parent.nextSibling),r=(t=this.createPositionAfter(t.parent)).parent}while(r!==e);return{position:t,range:new B(O._createAt(n,"end"),O._createAt(i,0))}}wrap(t,e){if(this._assertWriterUsedCorrectly(),!t.isFlat)throw new _("writer-wrap-range-not-flat",this);const n=e instanceof Ct?e:new Ct(e);if(n.childCount>0)throw new _("writer-wrap-element-not-empty",this);if(n.parent!==null)throw new _("writer-wrap-element-attached",this);this.insert(n,t.start);const i=new B(t.start.getShiftedBy(1),t.end.getShiftedBy(1));this.move(i,O._createAt(n,0))}unwrap(t){if(this._assertWriterUsedCorrectly(),t.parent===null)throw new _("writer-unwrap-element-no-parent",this);this.move(B._createIn(t),this.createPositionAfter(t)),this.remove(t)}addMarker(t,e){if(this._assertWriterUsedCorrectly(),!e||typeof e.usingOperation!="boolean")throw new _("writer-addmarker-no-usingoperation",this);const n=e.usingOperation,i=e.range,r=e.affectsData!==void 0&&e.affectsData;if(this.model.markers.has(t))throw new _("writer-addmarker-marker-exists",this);if(!i)throw new _("writer-addmarker-no-range",this);return n?(oi(this,t,null,i,r),this.model.markers.get(t)):this.model.markers._set(t,i,n,r)}updateMarker(t,e){this._assertWriterUsedCorrectly();const n=typeof t=="string"?t:t.name,i=this.model.markers.get(n);if(!i)throw new _("writer-updatemarker-marker-not-exists",this);if(!e)return Y("writer-updatemarker-reconvert-using-editingcontroller",{markerName:n}),void this.model.markers._refresh(i);const r=typeof e.usingOperation=="boolean",s=typeof e.affectsData=="boolean",a=s?e.affectsData:i.affectsData;if(!r&&!e.range&&!s)throw new _("writer-updatemarker-wrong-options",this);const c=i.getRange(),l=e.range?e.range:c;r&&e.usingOperation!==i.managedUsingOperations?e.usingOperation?oi(this,n,null,l,a):(oi(this,n,c,null,a),this.model.markers._set(n,l,void 0,a)):i.managedUsingOperations?oi(this,n,c,l,a):this.model.markers._set(n,l,void 0,a)}removeMarker(t){this._assertWriterUsedCorrectly();const e=typeof t=="string"?t:t.name;if(!this.model.markers.has(e))throw new _("writer-removemarker-no-marker",this);const n=this.model.markers.get(e);if(!n.managedUsingOperations)return void this.model.markers._remove(e);oi(this,e,n.getRange(),null,n.affectsData)}addRoot(t,e="$root"){this._assertWriterUsedCorrectly();const n=this.model.document.getRoot(t);if(n&&n.isAttached())throw new _("writer-addroot-root-exists",this);const i=this.model.document,r=new Ye(t,e,!0,i,i.version);return this.batch.addOperation(r),this.model.applyOperation(r),this.model.document.getRoot(t)}detachRoot(t){this._assertWriterUsedCorrectly();const e=typeof t=="string"?this.model.document.getRoot(t):t;if(!e||!e.isAttached())throw new _("writer-detachroot-no-root",this);for(const r of this.model.markers)r.getRange().root===e&&this.removeMarker(r);for(const r of e.getAttributeKeys())this.removeAttribute(r,e);this.remove(this.createRangeIn(e));const n=this.model.document,i=new Ye(e.rootName,e.name,!1,n,n.version);this.batch.addOperation(i),this.model.applyOperation(i)}setSelection(...t){this._assertWriterUsedCorrectly(),this.model.document.selection._setTo(...t)}setSelectionFocus(t,e){this._assertWriterUsedCorrectly(),this.model.document.selection._setFocus(t,e)}setSelectionAttribute(t,e){if(this._assertWriterUsedCorrectly(),typeof t=="string")this._setSelectionAttribute(t,e);else for(const[n,i]of We(t))this._setSelectionAttribute(n,i)}removeSelectionAttribute(t){if(this._assertWriterUsedCorrectly(),typeof t=="string")this._removeSelectionAttribute(t);else for(const e of t)this._removeSelectionAttribute(e)}overrideSelectionGravity(){return this.model.document.selection._overrideGravity()}restoreSelectionGravity(t){this.model.document.selection._restoreGravity(t)}_setSelectionAttribute(t,e){const n=this.model.document.selection;if(n.isCollapsed&&n.anchor.parent.isEmpty){const i=ze._getStoreAttributeKey(t);this.setAttribute(i,e,n.anchor.parent)}n._setAttribute(t,e)}_removeSelectionAttribute(t){const e=this.model.document.selection;if(e.isCollapsed&&e.anchor.parent.isEmpty){const n=ze._getStoreAttributeKey(t);this.removeAttribute(n,e.anchor.parent)}e._removeAttribute(t)}_assertWriterUsedCorrectly(){if(this.model._currentWriter!==this)throw new _("writer-incorrect-use",this)}_addOperationForAffectedMarkers(t,e){for(const n of this.model.markers){if(!n.managedUsingOperations)continue;const i=n.getRange();let r=!1;if(t==="move"){const s=e;r=s.containsPosition(i.start)||s.start.isEqual(i.start)||s.containsPosition(i.end)||s.end.isEqual(i.end)}else{const s=e,a=s.nodeBefore,c=s.nodeAfter,l=i.start.parent==a&&i.start.isAtEnd,d=i.end.parent==c&&i.end.offset==0,h=i.end.nodeAfter==c,u=i.start.nodeAfter==c;r=l||d||h||u}r&&this.updateMarker(n.name,{range:i})}}}function Th(o,t,e,n){const i=o.model,r=i.document;let s,a,c,l=n.start;for(const h of n.getWalker({shallow:!0}))c=h.item.getAttribute(t),s&&a!=c&&(a!=e&&d(),l=s),s=h.nextPosition,a=c;function d(){const h=new B(l,s),u=h.root.document?r.version:null,g=new jt(h,t,a,e,u);o.batch.addOperation(g),i.applyOperation(g)}s instanceof O&&s!=l&&a!=e&&d()}function Mh(o,t,e,n){const i=o.model,r=i.document,s=n.getAttribute(t);let a,c;if(s!=e){if(n.root===n){const l=n.document?r.version:null;c=new en(n,t,s,e,l)}else{a=new B(O._createBefore(n),o.createPositionAfter(n));const l=a.root.document?r.version:null;c=new jt(a,t,s,e,l)}o.batch.addOperation(c),i.applyOperation(c)}}function oi(o,t,e,n,i){const r=o.model,s=r.document,a=new re(t,e,n,r.markers,!!i,s.version);o.batch.addOperation(a),r.applyOperation(a)}function MC(o,t,e,n){let i;if(o.root.document){const r=n.document,s=new O(r.graveyard,[0]);i=new ft(o,t,s,r.version)}else i=new SC(o,t);e.addOperation(i),n.applyOperation(i)}function Bh(o,t){return o===t||o instanceof Qi&&t instanceof Qi}function BC(o,t,e={}){if(t.isCollapsed)return;const n=t.getFirstRange();if(n.root.rootName=="$graveyard")return;const i=o.schema;o.change(r=>{if(!e.doNotResetEntireContent&&function(l,d){const h=l.getLimitElement(d);if(!d.containsEntireContent(h))return!1;const u=d.getFirstRange();return u.start.parent==u.end.parent?!1:l.checkChild(h,"paragraph")}(i,t))return void function(l,d){const h=l.model.schema.getLimitElement(d);l.remove(l.createRangeIn(h)),Lh(l,l.createPositionAt(h,0),d)}(r,t);const s={};if(!e.doNotAutoparagraph){const l=t.getSelectedElement();l&&Object.assign(s,i.getAttributesWithProperty(l,"copyOnReplace",!0))}const[a,c]=function(l){const d=l.root.document.model,h=l.start;let u=l.end;if(d.hasContent(l,{ignoreMarkers:!0})){const g=function(p){const k=p.parent,b=k.root.document.model.schema,A=k.getAncestors({parentFirst:!0,includeSelf:!0});for(const E of A){if(b.isLimit(E))return null;if(b.isBlock(E))return E}}(u);if(g&&u.isTouching(d.createPositionAt(g,0))){const p=d.createSelection(l);d.modifySelection(p,{direction:"backward"});const k=p.getLastPosition(),b=d.createRange(k,u);d.hasContent(b,{ignoreMarkers:!0})||(u=k)}}return[Zt.fromPosition(h,"toPrevious"),Zt.fromPosition(u,"toNext")]}(n);a.isTouching(c)||r.remove(r.createRange(a,c)),e.leaveUnmerged||(function(l,d,h){const u=l.model;if(!Us(l.model.schema,d,h))return;const[g,p]=function(k,b){const A=k.getAncestors(),E=b.getAncestors();let M=0;for(;A[M]&&A[M]==E[M];)M++;return[A[M],E[M]]}(d,h);!g||!p||(!u.hasContent(g,{ignoreMarkers:!0})&&u.hasContent(p,{ignoreMarkers:!0})?Ph(l,d,h,g.parent):Nh(l,d,h,g.parent))}(r,a,c),i.removeDisallowedAttributes(a.parent.getChildren(),r)),Oh(r,t,a),!e.doNotAutoparagraph&&function(l,d){const h=l.checkChild(d,"$text"),u=l.checkChild(d,"paragraph");return!h&&u}(i,a)&&Lh(r,a,t,s),a.detach(),c.detach()})}function Nh(o,t,e,n){const i=t.parent,r=e.parent;if(i!=n&&r!=n){for(t=o.createPositionAfter(i),(e=o.createPositionBefore(r)).isEqual(t)||o.insert(r,t),o.merge(t);e.parent.isEmpty;){const s=e.parent;e=o.createPositionBefore(s),o.remove(s)}Us(o.model.schema,t,e)&&Nh(o,t,e,n)}}function Ph(o,t,e,n){const i=t.parent,r=e.parent;if(i!=n&&r!=n){for(t=o.createPositionAfter(i),(e=o.createPositionBefore(r)).isEqual(t)||o.insert(i,e);t.parent.isEmpty;){const s=t.parent;t=o.createPositionBefore(s),o.remove(s)}e=o.createPositionBefore(r),function(s,a){const c=a.nodeBefore,l=a.nodeAfter;c.name!=l.name&&s.rename(c,l.name),s.clearAttributes(c),s.setAttributes(Object.fromEntries(l.getAttributes()),c),s.merge(a)}(o,e),Us(o.model.schema,t,e)&&Ph(o,t,e,n)}}function Us(o,t,e){const n=t.parent,i=e.parent;return n!=i&&!o.isLimit(n)&&!o.isLimit(i)&&function(r,s,a){const c=new B(r,s);for(const l of c.getWalker())if(a.isLimit(l.item))return!1;return!0}(t,e,o)}function Lh(o,t,e,n={}){const i=o.createElement("paragraph");o.model.schema.setAllowedAttributes(i,n,o),o.insert(i,t),Oh(o,e,o.createPositionAt(i,0))}function Oh(o,t,e){t instanceof ze?o.setSelection(e):t.setTo(e)}function zh(o,t){const e=[];Array.from(o.getItems({direction:"backward"})).map(n=>t.createRangeOn(n)).filter(n=>(n.start.isAfter(o.start)||n.start.isEqual(o.start))&&(n.end.isBefore(o.end)||n.end.isEqual(o.end))).forEach(n=>{e.push(n.start.parent),t.remove(n)}),e.forEach(n=>{let i=n;for(;i.parent&&i.isEmpty;){const r=t.createRangeOn(i);i=i.parent,t.remove(r)}})}class NC{constructor(t,e,n){this._firstNode=null,this._lastNode=null,this._lastAutoParagraph=null,this._filterAttributesOf=[],this._affectedStart=null,this._affectedEnd=null,this._nodeToSelect=null,this.model=t,this.writer=e,this.position=n,this.canMergeWith=new Set([this.position.parent]),this.schema=t.schema,this._documentFragment=e.createDocumentFragment(),this._documentFragmentPosition=e.createPositionAt(this._documentFragment,0)}handleNodes(t){for(const e of Array.from(t))this._handleNode(e);this._insertPartialFragment(),this._lastAutoParagraph&&this._updateLastNodeFromAutoParagraph(this._lastAutoParagraph),this._mergeOnRight(),this.schema.removeDisallowedAttributes(this._filterAttributesOf,this.writer),this._filterAttributesOf=[]}_updateLastNodeFromAutoParagraph(t){const e=this.writer.createPositionAfter(this._lastNode),n=this.writer.createPositionAfter(t);if(n.isAfter(e)){if(this._lastNode=t,this.position.parent!=t||!this.position.isAtEnd)throw new _("insertcontent-invalid-insertion-position",this);this.position=n,this._setAffectedBoundaries(this.position)}}getSelectionRange(){return this._nodeToSelect?B._createOn(this._nodeToSelect):this.model.schema.getNearestSelectionRange(this.position)}getAffectedRange(){return this._affectedStart?new B(this._affectedStart,this._affectedEnd):null}destroy(){this._affectedStart&&this._affectedStart.detach(),this._affectedEnd&&this._affectedEnd.detach()}_handleNode(t){if(this.schema.isObject(t))return void this._handleObject(t);let e=this._checkAndAutoParagraphToAllowedPosition(t);e||(e=this._checkAndSplitToAllowedPosition(t),e)?(this._appendToFragment(t),this._firstNode||(this._firstNode=t),this._lastNode=t):this._handleDisallowedNode(t)}_insertPartialFragment(){if(this._documentFragment.isEmpty)return;const t=Zt.fromPosition(this.position,"toNext");this._setAffectedBoundaries(this.position),this._documentFragment.getChild(0)==this._firstNode&&(this.writer.insert(this._firstNode,this.position),this._mergeOnLeft(),this.position=t.toPosition()),this._documentFragment.isEmpty||this.writer.insert(this._documentFragment,this.position),this._documentFragmentPosition=this.writer.createPositionAt(this._documentFragment,0),this.position=t.toPosition(),t.detach()}_handleObject(t){this._checkAndSplitToAllowedPosition(t)?this._appendToFragment(t):this._tryAutoparagraphing(t)}_handleDisallowedNode(t){t.is("element")?this.handleNodes(t.getChildren()):this._tryAutoparagraphing(t)}_appendToFragment(t){if(!this.schema.checkChild(this.position,t))throw new _("insertcontent-wrong-position",this,{node:t,position:this.position});this.writer.insert(t,this._documentFragmentPosition),this._documentFragmentPosition=this._documentFragmentPosition.getShiftedBy(t.offsetSize),this.schema.isObject(t)&&!this.schema.checkChild(this.position,"$text")?this._nodeToSelect=t:this._nodeToSelect=null,this._filterAttributesOf.push(t)}_setAffectedBoundaries(t){this._affectedStart||(this._affectedStart=Zt.fromPosition(t,"toPrevious")),this._affectedEnd&&!this._affectedEnd.isBefore(t)||(this._affectedEnd&&this._affectedEnd.detach(),this._affectedEnd=Zt.fromPosition(t,"toNext"))}_mergeOnLeft(){const t=this._firstNode;if(!(t instanceof Ct)||!this._canMergeLeft(t))return;const e=Zt._createBefore(t);e.stickiness="toNext";const n=Zt.fromPosition(this.position,"toNext");this._affectedStart.isEqual(e)&&(this._affectedStart.detach(),this._affectedStart=Zt._createAt(e.nodeBefore,"end","toPrevious")),this._firstNode===this._lastNode&&(this._firstNode=e.nodeBefore,this._lastNode=e.nodeBefore),this.writer.merge(e),e.isEqual(this._affectedEnd)&&this._firstNode===this._lastNode&&(this._affectedEnd.detach(),this._affectedEnd=Zt._createAt(e.nodeBefore,"end","toNext")),this.position=n.toPosition(),n.detach(),this._filterAttributesOf.push(this.position.parent),e.detach()}_mergeOnRight(){const t=this._lastNode;if(!(t instanceof Ct)||!this._canMergeRight(t))return;const e=Zt._createAfter(t);if(e.stickiness="toNext",!this.position.isEqual(e))throw new _("insertcontent-invalid-insertion-position",this);this.position=O._createAt(e.nodeBefore,"end");const n=Zt.fromPosition(this.position,"toPrevious");this._affectedEnd.isEqual(e)&&(this._affectedEnd.detach(),this._affectedEnd=Zt._createAt(e.nodeBefore,"end","toNext")),this._firstNode===this._lastNode&&(this._firstNode=e.nodeBefore,this._lastNode=e.nodeBefore),this.writer.merge(e),e.getShiftedBy(-1).isEqual(this._affectedStart)&&this._firstNode===this._lastNode&&(this._affectedStart.detach(),this._affectedStart=Zt._createAt(e.nodeBefore,0,"toPrevious")),this.position=n.toPosition(),n.detach(),this._filterAttributesOf.push(this.position.parent),e.detach()}_canMergeLeft(t){const e=t.previousSibling;return e instanceof Ct&&this.canMergeWith.has(e)&&this.model.schema.checkMerge(e,t)}_canMergeRight(t){const e=t.nextSibling;return e instanceof Ct&&this.canMergeWith.has(e)&&this.model.schema.checkMerge(t,e)}_tryAutoparagraphing(t){const e=this.writer.createElement("paragraph");this._getAllowedIn(this.position.parent,e)&&this.schema.checkChild(e,t)&&(e._appendChild(t),this._handleNode(e))}_checkAndAutoParagraphToAllowedPosition(t){if(this.schema.checkChild(this.position.parent,t))return!0;if(!this.schema.checkChild(this.position.parent,"paragraph")||!this.schema.checkChild("paragraph",t))return!1;this._insertPartialFragment();const e=this.writer.createElement("paragraph");return this.writer.insert(e,this.position),this._setAffectedBoundaries(this.position),this._lastAutoParagraph=e,this.position=this.writer.createPositionAt(e,0),!0}_checkAndSplitToAllowedPosition(t){const e=this._getAllowedIn(this.position.parent,t);if(!e)return!1;for(e!=this.position.parent&&this._insertPartialFragment();e!=this.position.parent;)if(this.position.isAtStart){const n=this.position.parent;this.position=this.writer.createPositionBefore(n),n.isEmpty&&n.parent===e&&this.writer.remove(n)}else if(this.position.isAtEnd)this.position=this.writer.createPositionAfter(this.position.parent);else{const n=this.writer.createPositionAfter(this.position.parent);this._setAffectedBoundaries(this.position),this.writer.split(this.position),this.position=n,this.canMergeWith.add(this.position.nodeAfter)}return!0}_getAllowedIn(t,e){return this.schema.checkChild(t,e)?t:this.schema.isLimit(t)?null:this._getAllowedIn(t.parent,e)}}function PC(o,t,e,n={}){if(!o.schema.isObject(t))throw new _("insertobject-element-not-an-object",o,{object:t});const i=e||o.document.selection;let r=i;n.findOptimalPosition&&o.schema.isBlock(t)&&(r=o.createSelection(o.schema.findOptimalInsertionRange(i,n.findOptimalPosition)));const s=Wt(i.getSelectedBlocks()),a={};return s&&Object.assign(a,o.schema.getAttributesWithProperty(s,"copyOnReplace",!0)),o.change(c=>{r.isCollapsed||o.deleteContent(r,{doNotAutoparagraph:!0});let l=t;const d=r.anchor.parent;!o.schema.checkChild(d,t)&&o.schema.checkChild(d,"paragraph")&&o.schema.checkChild("paragraph",t)&&(l=c.createElement("paragraph"),c.insert(t,l)),o.schema.setAllowedAttributes(l,a,c);const h=o.insertContent(l,r);return h.isCollapsed||n.setSelection&&function(u,g,p,k){const b=u.model;if(p=="on")return void u.setSelection(g,"on");if(p!="after")throw new _("insertobject-invalid-place-parameter-value",b);let A=g.nextSibling;if(b.schema.isInline(g))return void u.setSelection(g,"after");!(A&&b.schema.checkChild(A,"$text"))&&b.schema.checkChild(g.parent,"paragraph")&&(A=u.createElement("paragraph"),b.schema.setAllowedAttributes(A,k,u),b.insertContent(A,u.createPositionAfter(g))),A&&u.setSelection(A,0)}(c,t,n.setSelection,a),h})}const LC=' ,.?!:;"-()';function OC(o,t){const{isForward:e,walker:n,unit:i,schema:r,treatEmojiAsSingleUnit:s}=o,{type:a,item:c,nextPosition:l}=t;if(a=="text")return o.unit==="word"?function(d,h){let u=d.position.textNode;for(u||(u=h?d.position.nodeAfter:d.position.nodeBefore);u&&u.is("$text");){const g=d.position.offset-u.startOffset;if(jC(u,g,h))u=h?d.position.nodeAfter:d.position.nodeBefore;else{if(RC(u.data,g,h))break;d.next()}}return d.position}(n,e):function(d,h,u){const g=d.position.textNode;if(g){const p=g.data;let k=d.position.offset-g.startOffset;for(;es(p,k)||h=="character"&&os(p,k)||u&&il(p,k);)d.next(),k=d.position.offset-g.startOffset}return d.position}(n,i,s);if(a==(e?"elementStart":"elementEnd")){if(r.isSelectable(c))return O._createAt(c,e?"after":"before");if(r.checkChild(l,"$text"))return l}else{if(r.isLimit(c))return void n.skip(()=>!0);if(r.checkChild(l,"$text"))return l}}function zC(o,t){const e=o.root,n=O._createAt(e,t?"end":0);return t?new B(o,n):new B(n,o)}function RC(o,t,e){const n=t+(e?0:-1);return LC.includes(o.charAt(n))}function jC(o,t,e){return t===(e?o.offsetSize:0)}class FC extends mt(){constructor(){super(),this.markers=new IC,this.document=new _C(this),this.schema=new PA,this._pendingChanges=[],this._currentWriter=null,["deleteContent","modifySelection","getSelectedContent","applyOperation"].forEach(t=>this.decorate(t)),this.on("applyOperation",(t,e)=>{e[0]._validate()},{priority:"highest"}),this.schema.register("$root",{isLimit:!0}),this.schema.register("$container",{allowIn:["$root","$container"]}),this.schema.register("$block",{allowIn:["$root","$container"],isBlock:!0}),this.schema.register("$blockObject",{allowWhere:"$block",isBlock:!0,isObject:!0}),this.schema.register("$inlineObject",{allowWhere:"$text",allowAttributesOf:"$text",isInline:!0,isObject:!0}),this.schema.register("$text",{allowIn:"$block",isInline:!0,isContent:!0}),this.schema.register("$clipboardHolder",{allowContentOf:"$root",allowChildren:"$text",isLimit:!0}),this.schema.register("$documentFragment",{allowContentOf:"$root",allowChildren:"$text",isLimit:!0}),this.schema.register("$marker"),this.schema.addChildCheck((t,e)=>{if(e.name==="$marker")return!0}),MA(this),this.document.registerPostFixer($d),this.on("insertContent",(t,[e,n])=>{t.return=function(i,r,s){return i.change(a=>{const c=s||i.document.selection;c.isCollapsed||i.deleteContent(c,{doNotAutoparagraph:!0});const l=new NC(i,a,c.anchor),d=[];let h;if(r.is("documentFragment")){if(r.markers.size){const p=[];for(const[k,b]of r.markers){const{start:A,end:E}=b,M=A.isEqual(E);p.push({position:A,name:k,isCollapsed:M},{position:E,name:k,isCollapsed:M})}p.sort(({position:k},{position:b})=>k.isBefore(b)?1:-1);for(const{position:k,name:b,isCollapsed:A}of p){let E=null,M=null;const z=k.parent===r&&k.isAtStart,G=k.parent===r&&k.isAtEnd;z||G?A&&(M=z?"start":"end"):(E=a.createElement("$marker"),a.insert(E,k)),d.push({name:b,element:E,collapsed:M})}}h=r.getChildren()}else h=[r];l.handleNodes(h);let u=l.getSelectionRange();if(r.is("documentFragment")&&d.length){const p=u?pe.fromRange(u):null,k={};for(let b=d.length-1;b>=0;b--){const{name:A,element:E,collapsed:M}=d[b],z=!k[A];if(z&&(k[A]=[]),E){const G=a.createPositionAt(E,"before");k[A].push(G),a.remove(E)}else{const G=l.getAffectedRange();if(!G){M&&k[A].push(l.position);continue}M?k[A].push(G[M]):k[A].push(z?G.start:G.end)}}for(const[b,[A,E]]of Object.entries(k))A&&E&&A.root===E.root&&a.addMarker(b,{usingOperation:!0,affectsData:!0,range:new B(A,E)});p&&(u=p.toRange(),p.detach())}u&&(c instanceof ze?a.setSelection(u):c.setTo(u));const g=l.getAffectedRange()||i.createRange(c.anchor);return l.destroy(),g})}(this,e,n)}),this.on("insertObject",(t,[e,n,i])=>{t.return=PC(this,e,n,i)}),this.on("canEditAt",t=>{const e=!this.document.isReadOnly;t.return=e,e||t.stop()})}change(t){try{return this._pendingChanges.length===0?(this._pendingChanges.push({batch:new go,callback:t}),this._runPendingChanges()[0]):t(this._currentWriter)}catch(e){_.rethrowUnexpectedError(e,this)}}enqueueChange(t,e){try{t?typeof t=="function"?(e=t,t=new go):t instanceof go||(t=new go(t)):t=new go,this._pendingChanges.push({batch:t,callback:e}),this._pendingChanges.length==1&&this._runPendingChanges()}catch(n){_.rethrowUnexpectedError(n,this)}}applyOperation(t){t._execute()}insertContent(t,e,n,...i){const r=qs(e,n);return this.fire("insertContent",[t,r,n,...i])}insertObject(t,e,n,i,...r){const s=qs(e,n);return this.fire("insertObject",[t,s,i,i,...r])}deleteContent(t,e){BC(this,t,e)}modifySelection(t,e){(function(n,i,r={}){const s=n.schema,a=r.direction!="backward",c=r.unit?r.unit:"character",l=!!r.treatEmojiAsSingleUnit,d=i.focus,h=new tn({boundaries:zC(d,a),singleCharacters:!0,direction:a?"forward":"backward"}),u={walker:h,schema:s,isForward:a,unit:c,treatEmojiAsSingleUnit:l};let g;for(;g=h.next();){if(g.done)return;const p=OC(u,g.value);if(p)return void(i instanceof ze?n.change(k=>{k.setSelectionFocus(p)}):i.setFocus(p))}})(this,t,e)}getSelectedContent(t){return function(e,n){return e.change(i=>{const r=i.createDocumentFragment(),s=n.getFirstRange();if(!s||s.isCollapsed)return r;const a=s.start.root,c=s.start.getCommonPath(s.end),l=a.getNodeByPath(c);let d;d=s.start.parent==s.end.parent?s:i.createRange(i.createPositionAt(l,s.start.path[c.length]),i.createPositionAt(l,s.end.path[c.length]+1));const h=d.end.offset-d.start.offset;for(const u of d.getItems({shallow:!0}))u.is("$textProxy")?i.appendText(u.data,u.getAttributes(),r):i.append(i.cloneElement(u,!0),r);if(d!=s){const u=s._getTransformedByMove(d.start,i.createPositionAt(r,0),h)[0],g=i.createRange(i.createPositionAt(r,0),u.start);zh(i.createRange(u.end,i.createPositionAt(r,"end")),i),zh(g,i)}return r})}(this,t)}hasContent(t,e={}){const n=t instanceof B?t:B._createIn(t);if(n.isCollapsed)return!1;const{ignoreWhitespaces:i=!1,ignoreMarkers:r=!1}=e;if(!r){for(const s of this.markers.getMarkersIntersectingRange(n))if(s.affectsData)return!0}for(const s of n.getItems())if(this.schema.isContent(s)&&(!s.is("$textProxy")||!i||s.data.search(/\S/)!==-1))return!0;return!1}canEditAt(t){const e=qs(t);return this.fire("canEditAt",[e])}createPositionFromPath(t,e,n){return new O(t,e,n)}createPositionAt(t,e){return O._createAt(t,e)}createPositionAfter(t){return O._createAfter(t)}createPositionBefore(t){return O._createBefore(t)}createRange(t,e){return new B(t,e)}createRangeIn(t){return B._createIn(t)}createRangeOn(t){return B._createOn(t)}createSelection(...t){return new ge(...t)}createBatch(t){return new go(t)}createOperationFromJSON(t){return nC.fromJSON(t,this.document)}destroy(){this.document.destroy(),this.stopListening()}_runPendingChanges(){const t=[];this.fire("_beforeChanges");try{for(;this._pendingChanges.length;){const e=this._pendingChanges[0].batch;this._currentWriter=new TC(this,e);const n=this._pendingChanges[0].callback(this._currentWriter);t.push(n),this.document._handleChangeBlock(this._currentWriter),this._pendingChanges.shift(),this._currentWriter=null}}finally{this._pendingChanges.length=0,this._currentWriter=null,this.fire("_afterChanges")}return t}}function qs(o,t){if(o)return o instanceof ge||o instanceof ze?o:o instanceof jn?t||t===0?new ge(o,t):o.is("rootElement")?new ge(o,"in"):new ge(o,"on"):new ge(o)}class VC extends fn{constructor(){super(...arguments),this.domEventType="click"}onDomEvent(t){this.fire(t.type,t)}}class Gs extends fn{constructor(){super(...arguments),this.domEventType=["mousedown","mouseup","mouseover","mouseout"]}onDomEvent(t){this.fire(t.type,t)}}class on{constructor(t){this.document=t}createDocumentFragment(t){return new Rn(this.document,t)}createElement(t,e,n){return new he(this.document,t,e,n)}createText(t){return new vt(this.document,t)}clone(t,e=!1){return t._clone(e)}appendChild(t,e){return e._appendChild(t)}insertChild(t,e,n){return n._insertChild(t,e)}removeChildren(t,e,n){return n._removeChildren(t,e)}remove(t){const e=t.parent;return e?this.removeChildren(e.getChildIndex(t),1,e):[]}replace(t,e){const n=t.parent;if(n){const i=n.getChildIndex(t);return this.removeChildren(i,1,n),this.insertChild(i,e,n),!0}return!1}unwrapElement(t){const e=t.parent;if(e){const n=e.getChildIndex(t);this.remove(t),this.insertChild(n,t.getChildren(),e)}}rename(t,e){const n=new he(this.document,t,e.getAttributes(),e.getChildren());return this.replace(e,n)?n:null}setAttribute(t,e,n){n._setAttribute(t,e)}removeAttribute(t,e){e._removeAttribute(t)}addClass(t,e){e._addClass(t)}removeClass(t,e){e._removeClass(t)}setStyle(t,e,n){de(t)&&n===void 0?e._setStyle(t):n._setStyle(t,e)}removeStyle(t,e){e._removeStyle(t)}setCustomProperty(t,e,n){n._setCustomProperty(t,e)}removeCustomProperty(t,e){return e._removeCustomProperty(t)}createPositionAt(t,e){return V._createAt(t,e)}createPositionAfter(t){return V._createAfter(t)}createPositionBefore(t){return V._createBefore(t)}createRange(t,e){return new nt(t,e)}createRangeOn(t){return nt._createOn(t)}createRangeIn(t){return nt._createIn(t)}createSelection(...t){return new Pe(...t)}}class HC{constructor(){this._commands=new Map}add(t,e){this._commands.set(t,e)}get(t){return this._commands.get(t)}execute(t,...e){const n=this.get(t);if(!n)throw new _("commandcollection-command-not-found",this,{commandName:t});return n.execute(...e)}*names(){yield*this._commands.keys()}*commands(){yield*this._commands.values()}[Symbol.iterator](){return this._commands[Symbol.iterator]()}destroy(){for(const t of this.commands())t.destroy()}}class UC extends mt(){constructor(t={}){super();const e=this.constructor,n=t.language||e.defaultConfig&&e.defaultConfig.language;this._context=t.context||new zl({language:n}),this._context._addEditor(this,!t.context);const i=Array.from(e.builtinPlugins||[]);this.config=new Oc(t,e.defaultConfig),this.config.define("plugins",i),this.config.define(this._context._getEditorConfig()),this.plugins=new Ol(this,i,this._context.plugins),this.locale=this._context.locale,this.t=this.locale.t,this._readOnlyLocks=new Set,this.commands=new HC,this.set("state","initializing"),this.once("ready",()=>this.state="ready",{priority:"high"}),this.once("destroy",()=>this.state="destroyed",{priority:"high"}),this.model=new FC,this.on("change:isReadOnly",()=>{this.model.document.isReadOnly=this.isReadOnly});const r=new v0;this.data=new tC(this.model,r),this.editing=new BA(this.model,r),this.editing.view.document.bind("isReadOnly").to(this),this.conversion=new eC([this.editing.downcastDispatcher,this.data.downcastDispatcher],this.data.upcastDispatcher),this.conversion.addAlias("dataDowncast",this.data.downcastDispatcher),this.conversion.addAlias("editingDowncast",this.editing.downcastDispatcher),this.keystrokes=new Vw(this),this.keystrokes.listenTo(this.editing.view.document)}get isReadOnly(){return this._readOnlyLocks.size>0}set isReadOnly(t){throw new _("editor-isreadonly-has-no-setter")}enableReadOnlyMode(t){if(typeof t!="string"&&typeof t!="symbol")throw new _("editor-read-only-lock-id-invalid",null,{lockId:t});this._readOnlyLocks.has(t)||(this._readOnlyLocks.add(t),this._readOnlyLocks.size===1&&this.fire("change:isReadOnly","isReadOnly",!0,!1))}disableReadOnlyMode(t){if(typeof t!="string"&&typeof t!="symbol")throw new _("editor-read-only-lock-id-invalid",null,{lockId:t});this._readOnlyLocks.has(t)&&(this._readOnlyLocks.delete(t),this._readOnlyLocks.size===0&&this.fire("change:isReadOnly","isReadOnly",!1,!0))}initPlugins(){const t=this.config,e=t.get("plugins"),n=t.get("removePlugins")||[],i=t.get("extraPlugins")||[],r=t.get("substitutePlugins")||[];return this.plugins.init(e.concat(i),n,r)}destroy(){let t=Promise.resolve();return this.state=="initializing"&&(t=new Promise(e=>this.once("ready",e))),t.then(()=>{this.fire("destroy"),this.stopListening(),this.commands.destroy()}).then(()=>this.plugins.destroy()).then(()=>{this.model.destroy(),this.data.destroy(),this.editing.destroy(),this.keystrokes.destroy()}).then(()=>this._context._removeEditor(this))}execute(t,...e){try{return this.commands.execute(t,...e)}catch(n){_.rethrowUnexpectedError(n,this)}}focus(){this.editing.view.focus()}static create(...t){throw new Error("This is an abstract method.")}}function Zi(o){return class extends o{setData(t){this.data.set(t)}getData(t){return this.data.get(t)}}}{const o=Zi(Object);Zi.setData=o.prototype.setData,Zi.getData=o.prototype.getData}function Ws(o){return class extends o{updateSourceElement(t){if(!this.sourceElement)throw new _("editor-missing-sourceelement",this);const e=this.config.get("updateSourceElementOnDestroy"),n=this.sourceElement instanceof HTMLTextAreaElement;if(!e&&!n)return void Gc(this.sourceElement,"");const i=typeof t=="string"?t:this.data.get();Gc(this.sourceElement,i)}}}Ws.updateSourceElement=Ws(Object).prototype.updateSourceElement;class Rh extends Li{static get pluginName(){return"PendingActions"}init(){this.set("hasAny",!1),this._actions=new Me({idProperty:"_id"}),this._actions.delegate("add","remove").to(this)}add(t){if(typeof t!="string")throw new _("pendingactions-add-invalid-message",this);const e=new(mt());return e.set("message",t),this._actions.add(e),this.hasAny=!0,e}remove(t){this._actions.remove(t),this.hasAny=!!this._actions.length}get first(){return this._actions.get(0)}[Symbol.iterator](){return this._actions[Symbol.iterator]()}}const ot={bold:'',cancel:'',caption:'',check:'',cog:'',colorPalette:'',eraser:'',history:'',image:'',imageUpload:'',imageAssetManager:'',imageUrl:'',lowVision:'',textAlternative:'',loupe:'',previousArrow:'',nextArrow:'',importExport:'',paragraph:'',plus:'',text:'',alignBottom:'',alignMiddle:'',alignTop:'',alignLeft:'',alignCenter:'',alignRight:'',alignJustify:'',objectLeft:'',objectCenter:'',objectRight:'',objectFullWidth:'',objectInline:'',objectBlockLeft:'',objectBlockRight:'',objectSizeFull:'',objectSizeLarge:'',objectSizeSmall:'',objectSizeMedium:'',pencil:'',pilcrow:'',quote:'',threeVerticalDots:'',dragIndicator:'',redo:'',undo:'',bulletedList:'',numberedList:'',todoList:'',codeBlock:'',browseFiles:'',heading1:'',heading2:'',heading3:'',heading4:'',heading5:'',heading6:'',horizontalLine:'',html:'',indent:'',outdent:'',table:''};var jh=N(5314),qC={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(jh.c,qC),jh.c.locals;const{threeVerticalDots:Fh}=ot,GC={alignLeft:ot.alignLeft,bold:ot.bold,importExport:ot.importExport,paragraph:ot.paragraph,plus:ot.plus,text:ot.text,threeVerticalDots:ot.threeVerticalDots,pilcrow:ot.pilcrow,dragIndicator:ot.dragIndicator};class $s extends tt{constructor(t,e){super(t);const n=this.bindTemplate,i=this.t;this.options=e||{},this.set("ariaLabel",i("Editor toolbar")),this.set("maxWidth","auto"),this.items=this.createCollection(),this.focusTracker=new Qt,this.keystrokes=new ie,this.set("class",void 0),this.set("isCompact",!1),this.itemsView=new WC(t),this.children=this.createCollection(),this.children.add(this.itemsView),this.focusables=this.createCollection();const r=t.uiLanguageDirection==="rtl";this._focusCycler=new _e({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:[r?"arrowright":"arrowleft","arrowup"],focusNext:[r?"arrowleft":"arrowright","arrowdown"]}});const s=["ck","ck-toolbar",n.to("class"),n.if("isCompact","ck-toolbar_compact")];var a;this.options.shouldGroupWhenFull&&this.options.isFloating&&s.push("ck-toolbar_floating"),this.setTemplate({tag:"div",attributes:{class:s,role:"toolbar","aria-label":n.to("ariaLabel"),style:{maxWidth:n.to("maxWidth")},tabindex:-1},children:this.children,on:{mousedown:(a=this,a.bindTemplate.to(c=>{c.target===a.element&&c.preventDefault()}))}}),this._behavior=this.options.shouldGroupWhenFull?new KC(this):new $C(this)}render(){super.render(),this.focusTracker.add(this.element);for(const t of this.items)this.focusTracker.add(t.element);this.items.on("add",(t,e)=>{this.focusTracker.add(e.element)}),this.items.on("remove",(t,e)=>{this.focusTracker.remove(e.element)}),this.keystrokes.listenTo(this.element),this._behavior.render(this)}destroy(){return this._behavior.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy(),super.destroy()}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}fillFromConfig(t,e,n){this.items.addMany(this._buildItemsFromConfig(t,e,n))}_buildItemsFromConfig(t,e,n){const i=Bl(t),r=n||i.removeItems;return this._cleanItemsConfiguration(i.items,e,r).map(s=>bt(s)?this._createNestedToolbarDropdown(s,e,r):s==="|"?new Il:s==="-"?new zw:e.create(s)).filter(s=>!!s)}_cleanItemsConfiguration(t,e,n){const i=t.filter((r,s,a)=>r==="|"||n.indexOf(r)===-1&&(r==="-"?!this.options.shouldGroupWhenFull||(Y("toolbarview-line-break-ignored-when-grouping-items",a),!1):!(!bt(r)&&!e.has(r))||(Y("toolbarview-item-unavailable",{item:r}),!1)));return this._cleanSeparatorsAndLineBreaks(i)}_cleanSeparatorsAndLineBreaks(t){const e=s=>s!=="-"&&s!=="|",n=t.length,i=t.findIndex(e);if(i===-1)return[];const r=n-t.slice().reverse().findIndex(e);return t.slice(i,r).filter((s,a,c)=>e(s)?!0:!(a>0&&c[a-1]===s))}_createNestedToolbarDropdown(t,e,n){let{label:i,icon:r,items:s,tooltip:a=!0,withText:c=!1}=t;if(s=this._cleanItemsConfiguration(s,e,n),!s.length)return null;const l=rn(this.locale);return i||Y("toolbarview-nested-toolbar-dropdown-missing-label",t),l.class="ck-toolbar__nested-toolbar-dropdown",l.buttonView.set({label:i,tooltip:a,withText:!!c}),r!==!1?l.buttonView.icon=GC[r]||r||Fh:l.buttonView.withText=!0,Ks(l,()=>l.toolbarView._buildItemsFromConfig(s,e,n)),l}}class WC extends tt{constructor(t){super(t),this.children=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-toolbar__items"]},children:this.children})}}class $C{constructor(t){const e=t.bindTemplate;t.set("isVertical",!1),t.itemsView.children.bindTo(t.items).using(n=>n),t.focusables.bindTo(t.items).using(n=>Uo(n)?n:null),t.extendTemplate({attributes:{class:[e.if("isVertical","ck-toolbar_vertical")]}})}render(){}destroy(){}}class KC{constructor(t){this.resizeObserver=null,this.cachedPadding=null,this.shouldUpdateGroupingOnNextResize=!1,this.view=t,this.viewChildren=t.children,this.viewFocusables=t.focusables,this.viewItemsView=t.itemsView,this.viewFocusTracker=t.focusTracker,this.viewLocale=t.locale,this.ungroupedItems=t.createCollection(),this.groupedItems=t.createCollection(),this.groupedItemsDropdown=this._createGroupedItemsDropdown(),t.itemsView.children.bindTo(this.ungroupedItems).using(e=>e),this.ungroupedItems.on("change",this._updateFocusCyclableItems.bind(this)),t.children.on("change",this._updateFocusCyclableItems.bind(this)),t.items.on("change",(e,n)=>{const i=n.index,r=Array.from(n.added);for(const s of n.removed)i>=this.ungroupedItems.length?this.groupedItems.remove(s):this.ungroupedItems.remove(s);for(let s=i;sthis.ungroupedItems.length?this.groupedItems.add(a,s-this.ungroupedItems.length):this.ungroupedItems.add(a,s)}this._updateGrouping()}),t.extendTemplate({attributes:{class:["ck-toolbar_grouping"]}})}render(t){this.viewElement=t.element,this._enableGroupingOnResize(),this._enableGroupingOnMaxWidthChange(t)}destroy(){this.groupedItemsDropdown.destroy(),this.resizeObserver.destroy()}_updateGrouping(){if(!this.viewElement.ownerDocument.body.contains(this.viewElement))return;if(!Bn(this.viewElement))return void(this.shouldUpdateGroupingOnNextResize=!0);const t=this.groupedItems.length;let e;for(;this._areItemsOverflowing;)this._groupLastItem(),e=!0;if(!e&&this.groupedItems.length){for(;this.groupedItems.length&&!this._areItemsOverflowing;)this._ungroupFirstItem();this._areItemsOverflowing&&this._groupLastItem()}this.groupedItems.length!==t&&this.view.fire("groupedItemsUpdate")}get _areItemsOverflowing(){if(!this.ungroupedItems.length)return!1;const t=this.viewElement,e=this.viewLocale.uiLanguageDirection,n=new dt(t.lastChild),i=new dt(t);if(!this.cachedPadding){const r=$.window.getComputedStyle(t),s=e==="ltr"?"paddingRight":"paddingLeft";this.cachedPadding=Number.parseInt(r[s])}return e==="ltr"?n.right>i.right-this.cachedPadding:n.left{t&&t===e.contentRect.width&&!this.shouldUpdateGroupingOnNextResize||(this.shouldUpdateGroupingOnNextResize=!1,this._updateGrouping(),t=e.contentRect.width)}),this._updateGrouping()}_enableGroupingOnMaxWidthChange(t){t.on("change:maxWidth",()=>{this._updateGrouping()})}_groupLastItem(){this.groupedItems.length||(this.viewChildren.add(new Il),this.viewChildren.add(this.groupedItemsDropdown),this.viewFocusTracker.add(this.groupedItemsDropdown.element)),this.groupedItems.add(this.ungroupedItems.remove(this.ungroupedItems.last),0)}_ungroupFirstItem(){this.ungroupedItems.add(this.groupedItems.remove(this.groupedItems.first)),this.groupedItems.length||(this.viewChildren.remove(this.groupedItemsDropdown),this.viewChildren.remove(this.viewChildren.last),this.viewFocusTracker.remove(this.groupedItemsDropdown.element))}_createGroupedItemsDropdown(){const t=this.viewLocale,e=t.t,n=rn(t);return n.class="ck-toolbar__grouped-dropdown",n.panelPosition=t.uiLanguageDirection==="ltr"?"sw":"se",Ks(n,this.groupedItems),n.buttonView.set({label:e("Show more items"),tooltip:!0,tooltipPosition:t.uiLanguageDirection==="rtl"?"se":"sw",icon:Fh}),n}_updateFocusCyclableItems(){this.viewFocusables.clear(),this.ungroupedItems.map(t=>{Uo(t)&&this.viewFocusables.add(t)}),this.groupedItems.length&&this.viewFocusables.add(this.groupedItemsDropdown)}}class Ji extends tt{constructor(t){super(t);const e=this.bindTemplate;this.set("isVisible",!0),this.children=this.createCollection(),this.setTemplate({tag:"li",attributes:{class:["ck","ck-list__item",e.if("isVisible","ck-hidden",n=>!n)],role:"presentation"},children:this.children})}focus(){this.children.first&&this.children.first.focus()}}class Vh extends tt{constructor(t){super(t),this.setTemplate({tag:"li",attributes:{class:["ck","ck-list__separator"]}})}}class Xi extends tt{constructor(t,e=new cs){super(t);const n=this.bindTemplate,i=new Uh(t);this.set({label:"",isVisible:!0}),this.labelView=e,this.labelView.bind("text").to(this,"label"),this.children=this.createCollection(),this.children.addMany([this.labelView,i]),i.set({role:"group",ariaLabelledBy:e.id}),i.focusTracker.destroy(),i.keystrokes.destroy(),this.items=i.items,this.setTemplate({tag:"li",attributes:{role:"presentation",class:["ck","ck-list__group",n.if("isVisible","ck-hidden",r=>!r)]},children:this.children})}focus(){if(this.items){const t=this.items.find(e=>!(e instanceof Vh));t&&t.focus()}}}var Hh=N(1672),YC={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Hh.c,YC),Hh.c.locals;class Uh extends tt{constructor(t){super(t),this._listItemGroupToChangeListeners=new WeakMap;const e=this.bindTemplate;this.focusables=new Ce,this.items=this.createCollection(),this.focusTracker=new Qt,this.keystrokes=new ie,this._focusCycler=new _e({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"arrowup",focusNext:"arrowdown"}}),this.set("ariaLabel",void 0),this.set("ariaLabelledBy",void 0),this.set("role",void 0),this.setTemplate({tag:"ul",attributes:{class:["ck","ck-reset","ck-list"],role:e.to("role"),"aria-label":e.to("ariaLabel"),"aria-labelledby":e.to("ariaLabelledBy")},children:this.items})}render(){super.render();for(const t of this.items)t instanceof Xi?this._registerFocusableItemsGroup(t):t instanceof Ji&&this._registerFocusableListItem(t);this.items.on("change",(t,e)=>{for(const n of e.removed)n instanceof Xi?this._deregisterFocusableItemsGroup(n):n instanceof Ji&&this._deregisterFocusableListItem(n);for(const n of Array.from(e.added).reverse())n instanceof Xi?this._registerFocusableItemsGroup(n,e.index):this._registerFocusableListItem(n,e.index)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}focusFirst(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}_registerFocusableListItem(t,e){this.focusTracker.add(t.element),this.focusables.add(t,e)}_deregisterFocusableListItem(t){this.focusTracker.remove(t.element),this.focusables.remove(t)}_getOnGroupItemsChangeCallback(t){return(e,n)=>{for(const i of n.removed)this._deregisterFocusableListItem(i);for(const i of Array.from(n.added).reverse())this._registerFocusableListItem(i,this.items.getIndex(t)+n.index)}}_registerFocusableItemsGroup(t,e){Array.from(t.items).forEach((i,r)=>{const s=e!==void 0?e+r:void 0;this._registerFocusableListItem(i,s)});const n=this._getOnGroupItemsChangeCallback(t);this._listItemGroupToChangeListeners.set(t,n),t.items.on("change",n)}_deregisterFocusableItemsGroup(t){for(const e of t.items)this._deregisterFocusableListItem(e);t.items.off("change",this._listItemGroupToChangeListeners.get(t)),this._listItemGroupToChangeListeners.delete(t)}}var qh=N(9544),QC={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(qh.c,QC),qh.c.locals;class tr extends tt{constructor(t,e){super(t);const n=this.bindTemplate;this.set("class",void 0),this.set("labelStyle",void 0),this.set("icon",void 0),this.set("isEnabled",!0),this.set("isOn",!1),this.set("isToggleable",!1),this.set("isVisible",!0),this.set("keystroke",void 0),this.set("withKeystroke",!1),this.set("label",void 0),this.set("tabindex",-1),this.set("tooltip",!1),this.set("tooltipPosition","s"),this.set("type","button"),this.set("withText",!1),this.children=this.createCollection(),this.actionView=this._createActionView(e),this.arrowView=this._createArrowView(),this.keystrokes=new ie,this.focusTracker=new Qt,this.setTemplate({tag:"div",attributes:{class:["ck","ck-splitbutton",n.to("class"),n.if("isVisible","ck-hidden",i=>!i),this.arrowView.bindTemplate.if("isOn","ck-splitbutton_open")]},children:this.children})}render(){super.render(),this.children.add(this.actionView),this.children.add(this.arrowView),this.focusTracker.add(this.actionView.element),this.focusTracker.add(this.arrowView.element),this.keystrokes.listenTo(this.element),this.keystrokes.set("arrowright",(t,e)=>{this.focusTracker.focusedElement===this.actionView.element&&(this.arrowView.focus(),e())}),this.keystrokes.set("arrowleft",(t,e)=>{this.focusTracker.focusedElement===this.arrowView.element&&(this.actionView.focus(),e())})}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this.actionView.focus()}_createActionView(t){const e=t||new wt;return t||e.bind("icon","isEnabled","isOn","isToggleable","keystroke","label","tabindex","tooltip","tooltipPosition","type","withText").to(this),e.extendTemplate({attributes:{class:"ck-splitbutton__action"}}),e.delegate("execute").to(this),e}_createArrowView(){const t=new wt,e=t.bindTemplate;return t.icon=ss,t.extendTemplate({attributes:{class:["ck-splitbutton__arrow"],"data-cke-tooltip-disabled":e.to("isOn"),"aria-haspopup":!0,"aria-expanded":e.to("isOn",n=>String(n))}}),t.bind("isEnabled").to(this),t.bind("label").to(this),t.bind("tooltip").to(this),t.delegate("execute").to(this,"open"),t}}var Gh=N(4264),ZC={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Gh.c,ZC),Gh.c.locals;var Wh=N(9904),JC={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Wh.c,JC),Wh.c.locals;function rn(o,t=Ow){const e=typeof t=="function"?new t(o):t,n=new Pw(o),i=new ds(o,e,n);return e.bind("isEnabled").to(i),e instanceof tr?e.arrowView.bind("isOn").to(i,"isOpen"):e.bind("isOn").to(i,"isOpen"),function(r){(function(s){s.on("render",()=>{v({emitter:s,activator:()=>s.isOpen,callback:()=>{s.isOpen=!1},contextElements:()=>[s.element,...s.focusTracker._elements]})})})(r),function(s){s.on("execute",a=>{a.source instanceof Bi||(s.isOpen=!1)})}(r),function(s){s.focusTracker.on("change:isFocused",(a,c,l)=>{s.isOpen&&!l&&(s.isOpen=!1)})}(r),function(s){s.keystrokes.set("arrowdown",(a,c)=>{s.isOpen&&(s.panelView.focus(),c())}),s.keystrokes.set("arrowup",(a,c)=>{s.isOpen&&(s.panelView.focusLast(),c())})}(r),function(s){s.on("change:isOpen",(a,c,l)=>{if(l)return;const d=s.panelView.element;d&&d.contains($.document.activeElement)&&s.buttonView.focus()})}(r),function(s){s.on("change:isOpen",(a,c,l)=>{l&&s.panelView.focus()},{priority:"low"})}(r)}(i),i}function Ks(o,t,e={}){o.extendTemplate({attributes:{class:["ck-toolbar-dropdown"]}}),o.isOpen?$h(o,t,e):o.once("change:isOpen",()=>$h(o,t,e),{priority:"highest"}),e.enableActiveItemFocusOnDropdownOpen&&Qh(o,()=>o.toolbarView.items.find(n=>n.isOn))}function $h(o,t,e){const n=o.locale,i=n.t,r=o.toolbarView=new $s(n),s=typeof t=="function"?t():t;r.ariaLabel=e.ariaLabel||i("Dropdown toolbar"),e.maxWidth&&(r.maxWidth=e.maxWidth),e.class&&(r.class=e.class),e.isCompact&&(r.isCompact=e.isCompact),e.isVertical&&(r.isVertical=!0),s instanceof Ce?r.items.bindTo(s).using(a=>a):r.items.addMany(s),o.panelView.children.add(r),r.items.delegate("execute").to(o)}function Kh(o,t,e={}){o.isOpen?Yh(o,t,e):o.once("change:isOpen",()=>Yh(o,t,e),{priority:"highest"}),Qh(o,()=>o.listView.items.find(n=>n instanceof Ji&&n.children.first.isOn))}function Yh(o,t,e){const n=o.locale,i=o.listView=new Uh(n),r=typeof t=="function"?t():t;i.ariaLabel=e.ariaLabel,i.role=e.role,Zh(o,i.items,r,n),o.panelView.children.add(i),i.items.delegate("execute").to(o)}function Qh(o,t){o.on("change:isOpen",()=>{if(!o.isOpen)return;const e=t();e&&(typeof e.focus=="function"?e.focus():Y("ui-dropdown-focus-child-on-open-child-missing-focus",{view:e}))},{priority:At.low-10})}function Zh(o,t,e,n){t.bindTo(e).using(i=>{if(i.type==="separator")return new Vh(n);if(i.type==="group"){const r=new Xi(n);return r.set({label:i.label}),Zh(o,r.items,i.items,n),r.items.delegate("execute").to(o),r}if(i.type==="button"||i.type==="switchbutton"){const r=new Ji(n);let s;return i.type==="button"?(s=new wt(n),s.extendTemplate({attributes:{"aria-checked":s.bindTemplate.to("isOn")}})):s=new Bi(n),s.bind(...Object.keys(i.model)).to(i.model),s.delegate("execute").to(r),r.children.add(s),r}return null})}const er=(o,t,e)=>{const n=new Bw(o.locale);return n.set({id:t,ariaDescribedById:e}),n.bind("isReadOnly").to(o,"isEnabled",i=>!i),n.bind("hasError").to(o,"errorText",i=>!!i),n.on("input",()=>{o.errorText=null}),o.bind("isEmpty","isFocused","placeholder").to(n),n};var Jh=N(3339),XC={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Jh.c,XC),Jh.c.locals;var Xh=N(4144),t_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Xh.c,t_),Xh.c.locals;class e_{constructor(t){this._components=new Map,this.editor=t}*names(){for(const t of this._components.values())yield t.originalName}add(t,e){this._components.set(Ys(t),{callback:e,originalName:t})}create(t){if(!this.has(t))throw new _("componentfactory-item-missing",this,{name:t});return this._components.get(Ys(t)).callback(this.editor.locale)}has(t){return this._components.has(Ys(t))}}function Ys(o){return String(o).toLowerCase()}var tu=N(7128),n_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(tu.c,n_),tu.c.locals;class o_ extends tt{constructor(t,e={}){super(t);const n=this.bindTemplate;this.set("label",e.label||""),this.set("class",e.class||null),this.children=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-form__header",n.to("class")]},children:this.children}),e.icon&&(this.iconView=new mn,this.iconView.content=e.icon,this.children.add(this.iconView));const i=new tt(t);i.setTemplate({tag:"h2",attributes:{class:["ck","ck-form__header__label"]},children:[{text:n.to("label")}]}),this.children.add(i)}}var eu=N(7132),i_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(eu.c,i_),eu.c.locals;class r_ extends tt{constructor(t){super(t),this.children=this.createCollection(),this.keystrokes=new ie,this._focusTracker=new Qt,this._focusables=new Ce,this.focusCycler=new _e({focusables:this._focusables,focusTracker:this._focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-dialog__actions"]},children:this.children})}render(){super.render(),this.keystrokes.listenTo(this.element)}setButtons(t){for(const e of t){const n=new wt(this.locale);let i;for(i in n.on("execute",()=>e.onExecute()),e.onCreate&&e.onCreate(n),e)i!="onExecute"&&i!="onCreate"&&n.set(i,e[i]);this.children.add(n)}this._updateFocusCyclableItems()}focus(t){t===-1?this.focusCycler.focusLast():this.focusCycler.focusFirst()}_updateFocusCyclableItems(){Array.from(this.children).forEach(t=>{this._focusables.add(t),this._focusTracker.add(t.element)})}}class s_ extends tt{constructor(t){super(t),this.children=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-dialog__content"]},children:this.children})}reset(){for(;this.children.length;)this.children.remove(0)}}var nu=N(4040),a_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(nu.c,a_),nu.c.locals;const Qs="screen-center",c_="editor-center",l_="editor-top-side",d_="editor-top-center",h_="editor-bottom-center",u_="editor-above-center",g_="editor-below-center",ou=ro("px"),iu=class extends function(o){return class extends o{constructor(...t){super(...t),this._onDragBound=this._onDrag.bind(this),this._onDragEndBound=this._onDragEnd.bind(this),this._lastDraggingCoordinates={x:0,y:0},this.on("render",()=>{this._attachListeners()}),this.set("isDragging",!1)}_attachListeners(){this.listenTo(this.element,"mousedown",this._onDragStart.bind(this)),this.listenTo(this.element,"touchstart",this._onDragStart.bind(this))}_attachDragListeners(){this.listenTo($.document,"mouseup",this._onDragEndBound),this.listenTo($.document,"touchend",this._onDragEndBound),this.listenTo($.document,"mousemove",this._onDragBound),this.listenTo($.document,"touchmove",this._onDragBound)}_detachDragListeners(){this.stopListening($.document,"mouseup",this._onDragEndBound),this.stopListening($.document,"touchend",this._onDragEndBound),this.stopListening($.document,"mousemove",this._onDragBound),this.stopListening($.document,"touchmove",this._onDragBound)}_onDragStart(t,e){if(!this._isHandleElementPressed(e))return;this._attachDragListeners();let n=0,i=0;e instanceof MouseEvent?(n=e.clientX,i=e.clientY):(n=e.touches[0].clientX,i=e.touches[0].clientY),this._lastDraggingCoordinates={x:n,y:i},this.isDragging=!0}_onDrag(t,e){if(!this.isDragging)return void this._detachDragListeners();let n=0,i=0;e instanceof MouseEvent?(n=e.clientX,i=e.clientY):(n=e.touches[0].clientX,i=e.touches[0].clientY),e.preventDefault(),this.fire("drag",{deltaX:Math.round(n-this._lastDraggingCoordinates.x),deltaY:Math.round(i-this._lastDraggingCoordinates.y)}),this._lastDraggingCoordinates={x:n,y:i}}_onDragEnd(){this._detachDragListeners(),this.isDragging=!1}_isHandleElementPressed(t){return!!this.dragHandleElement&&(this.dragHandleElement===t.target||t.target instanceof HTMLElement&&this.dragHandleElement.contains(t.target))}}}(tt){constructor(o,{getCurrentDomRoot:t,getViewportOffset:e}){super(o),this.wasMoved=!1;const n=this.bindTemplate,i=o.t;this.set("className",""),this.set("ariaLabel",i("Editor dialog")),this.set("isModal",!1),this.set("position",Qs),this.set("_isVisible",!1),this.set("_isTransparent",!1),this.set("_top",0),this.set("_left",0),this._getCurrentDomRoot=t,this._getViewportOffset=e,this.decorate("moveTo"),this.parts=this.createCollection(),this.keystrokes=new ie,this.focusTracker=new Qt,this._focusables=new Ce,this._focusCycler=new _e({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-dialog-overlay",n.if("isModal","ck-dialog-overlay__transparent",r=>!r),n.if("_isVisible","ck-hidden",r=>!r)],tabindex:"-1"},children:[{tag:"div",attributes:{tabindex:"-1",class:["ck","ck-dialog",n.to("className")],role:"dialog","aria-label":n.to("ariaLabel"),style:{top:n.to("_top",r=>ou(r)),left:n.to("_left",r=>ou(r)),visibility:n.if("_isTransparent","hidden")}},children:this.parts}]})}render(){super.render(),this.keystrokes.set("Esc",(o,t)=>{this.fire("close",{source:"escKeyPress"}),t()}),this.on("drag",(o,{deltaX:t,deltaY:e})=>{this.wasMoved=!0,this.moveBy(t,e)}),this.listenTo($.window,"resize",()=>{this._isVisible&&!this.wasMoved&&this.updatePosition()}),this.listenTo($.document,"scroll",()=>{this._isVisible&&!this.wasMoved&&this.updatePosition()}),this.on("change:_isVisible",(o,t,e)=>{e&&(this._isTransparent=!0,setTimeout(()=>{this.updatePosition(),this._isTransparent=!1,this.focus()},10))}),this.keystrokes.listenTo(this.element)}get dragHandleElement(){return this.headerView?this.headerView.element:null}setupParts({icon:o,title:t,hasCloseButton:e=!0,content:n,actionButtons:i}){t&&(this.headerView=new o_(this.locale,{icon:o}),e&&(this.closeButtonView=this._createCloseButton(),this.headerView.children.add(this.closeButtonView)),this.headerView.label=t,this.ariaLabel=t,this.parts.add(this.headerView,0)),n&&(n instanceof tt&&(n=[n]),this.contentView=new s_(this.locale),this.contentView.children.addMany(n),this.parts.add(this.contentView)),i&&(this.actionsView=new r_(this.locale),this.actionsView.setButtons(i),this.parts.add(this.actionsView)),this._updateFocusCyclableItems()}focus(){this._focusCycler.focusFirst()}moveTo(o,t){const e=this._getViewportRect(),n=this._getDialogRect();o+n.width>e.right&&(o=e.right-n.width),o{var e;this._focusables.add(t),this.focusTracker.add(t.element),Uo(e=t)&&"focusCycler"in e&&e.focusCycler instanceof _e&&(this.listenTo(t.focusCycler,"forwardCycle",n=>{this._focusCycler.focusNext(),this._focusCycler.next!==this._focusCycler.focusables.get(this._focusCycler.current)&&n.stop()}),this.listenTo(t.focusCycler,"backwardCycle",n=>{this._focusCycler.focusPrevious(),this._focusCycler.previous!==this._focusCycler.focusables.get(this._focusCycler.current)&&n.stop()}))})}_createCloseButton(){const o=new wt(this.locale),t=this.locale.t;return o.set({label:t("Close"),tooltip:!0,icon:ot.cancel}),o.on("execute",()=>this.fire("close",{source:"closeButton"})),o}};let Zs=iu;Zs.defaultOffset=15;var ru=N(1240),p_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(ru.c,p_),ru.c.locals;var m_=Object.defineProperty,su=Object.getOwnPropertySymbols,f_=Object.prototype.hasOwnProperty,k_=Object.prototype.propertyIsEnumerable,au=(o,t,e)=>t in o?m_(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,pt=(o,t)=>{for(var e in t||(t={}))f_.call(t,e)&&au(o,e,t[e]);if(su)for(var e of su(t))k_.call(t,e)&&au(o,e,t[e]);return o};const cu=ro("px"),lu=$.document.body,b_={top:-99999,left:-99999,name:"arrowless",config:{withArrow:!1}},Js=class extends tt{constructor(o){super(o);const t=this.bindTemplate;this.set("top",0),this.set("left",0),this.set("position","arrow_nw"),this.set("isVisible",!1),this.set("withArrow",!0),this.set("class",void 0),this._pinWhenIsVisibleCallback=null,this.content=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-balloon-panel",t.to("position",e=>`ck-balloon-panel_${e}`),t.if("isVisible","ck-balloon-panel_visible"),t.if("withArrow","ck-balloon-panel_with-arrow"),t.to("class")],style:{top:t.to("top",cu),left:t.to("left",cu)}},children:this.content})}show(){this.isVisible=!0}hide(){this.isVisible=!1}attachTo(o){this.show();const t=Js.defaultPositions,e=Object.assign({},{element:this.element,positions:[t.southArrowNorth,t.southArrowNorthMiddleWest,t.southArrowNorthMiddleEast,t.southArrowNorthWest,t.southArrowNorthEast,t.northArrowSouth,t.northArrowSouthMiddleWest,t.northArrowSouthMiddleEast,t.northArrowSouthWest,t.northArrowSouthEast,t.viewportStickyNorth],limiter:lu,fitInViewport:!0},o),n=Js._getOptimalPosition(e)||b_,i=parseInt(n.left),r=parseInt(n.top),s=n.name,a=n.config||{},{withArrow:c=!0}=a;this.top=r,this.left=i,this.position=s,this.withArrow=c}pin(o){this.unpin(),this._pinWhenIsVisibleCallback=()=>{this.isVisible?this._startPinning(o):this._stopPinning()},this._startPinning(o),this.listenTo(this,"change:isVisible",this._pinWhenIsVisibleCallback)}unpin(){this._pinWhenIsVisibleCallback&&(this._stopPinning(),this.stopListening(this,"change:isVisible",this._pinWhenIsVisibleCallback),this._pinWhenIsVisibleCallback=null,this.hide())}_startPinning(o){this.attachTo(o);const t=Xs(o.target),e=o.limiter?Xs(o.limiter):lu;this.listenTo($.document,"scroll",(n,i)=>{const r=i.target,s=t&&r.contains(t),a=e&&r.contains(e);!s&&!a&&t&&e||this.attachTo(o)},{useCapture:!0}),this.listenTo($.window,"resize",()=>{this.attachTo(o)})}_stopPinning(){this.stopListening($.document,"scroll"),this.stopListening($.window,"resize")}};let ae=Js;function Xs(o){return Mn(o)?o:Di(o)?o.commonAncestorContainer:typeof o=="function"?Xs(o()):null}function du(o={}){const{sideOffset:t=ae.arrowSideOffset,heightOffset:e=ae.arrowHeightOffset,stickyVerticalOffset:n=ae.stickyVerticalOffset,config:i}=o;return{northWestArrowSouthWest:(a,c)=>pt({top:r(a,c),left:a.left-t,name:"arrow_sw"},i&&{config:i}),northWestArrowSouthMiddleWest:(a,c)=>pt({top:r(a,c),left:a.left-.25*c.width-t,name:"arrow_smw"},i&&{config:i}),northWestArrowSouth:(a,c)=>pt({top:r(a,c),left:a.left-c.width/2,name:"arrow_s"},i&&{config:i}),northWestArrowSouthMiddleEast:(a,c)=>pt({top:r(a,c),left:a.left-.75*c.width+t,name:"arrow_sme"},i&&{config:i}),northWestArrowSouthEast:(a,c)=>pt({top:r(a,c),left:a.left-c.width+t,name:"arrow_se"},i&&{config:i}),northArrowSouthWest:(a,c)=>pt({top:r(a,c),left:a.left+a.width/2-t,name:"arrow_sw"},i&&{config:i}),northArrowSouthMiddleWest:(a,c)=>pt({top:r(a,c),left:a.left+a.width/2-.25*c.width-t,name:"arrow_smw"},i&&{config:i}),northArrowSouth:(a,c)=>pt({top:r(a,c),left:a.left+a.width/2-c.width/2,name:"arrow_s"},i&&{config:i}),northArrowSouthMiddleEast:(a,c)=>pt({top:r(a,c),left:a.left+a.width/2-.75*c.width+t,name:"arrow_sme"},i&&{config:i}),northArrowSouthEast:(a,c)=>pt({top:r(a,c),left:a.left+a.width/2-c.width+t,name:"arrow_se"},i&&{config:i}),northEastArrowSouthWest:(a,c)=>pt({top:r(a,c),left:a.right-t,name:"arrow_sw"},i&&{config:i}),northEastArrowSouthMiddleWest:(a,c)=>pt({top:r(a,c),left:a.right-.25*c.width-t,name:"arrow_smw"},i&&{config:i}),northEastArrowSouth:(a,c)=>pt({top:r(a,c),left:a.right-c.width/2,name:"arrow_s"},i&&{config:i}),northEastArrowSouthMiddleEast:(a,c)=>pt({top:r(a,c),left:a.right-.75*c.width+t,name:"arrow_sme"},i&&{config:i}),northEastArrowSouthEast:(a,c)=>pt({top:r(a,c),left:a.right-c.width+t,name:"arrow_se"},i&&{config:i}),southWestArrowNorthWest:a=>pt({top:s(a),left:a.left-t,name:"arrow_nw"},i&&{config:i}),southWestArrowNorthMiddleWest:(a,c)=>pt({top:s(a),left:a.left-.25*c.width-t,name:"arrow_nmw"},i&&{config:i}),southWestArrowNorth:(a,c)=>pt({top:s(a),left:a.left-c.width/2,name:"arrow_n"},i&&{config:i}),southWestArrowNorthMiddleEast:(a,c)=>pt({top:s(a),left:a.left-.75*c.width+t,name:"arrow_nme"},i&&{config:i}),southWestArrowNorthEast:(a,c)=>pt({top:s(a),left:a.left-c.width+t,name:"arrow_ne"},i&&{config:i}),southArrowNorthWest:a=>pt({top:s(a),left:a.left+a.width/2-t,name:"arrow_nw"},i&&{config:i}),southArrowNorthMiddleWest:(a,c)=>pt({top:s(a),left:a.left+a.width/2-.25*c.width-t,name:"arrow_nmw"},i&&{config:i}),southArrowNorth:(a,c)=>pt({top:s(a),left:a.left+a.width/2-c.width/2,name:"arrow_n"},i&&{config:i}),southArrowNorthMiddleEast:(a,c)=>pt({top:s(a),left:a.left+a.width/2-.75*c.width+t,name:"arrow_nme"},i&&{config:i}),southArrowNorthEast:(a,c)=>pt({top:s(a),left:a.left+a.width/2-c.width+t,name:"arrow_ne"},i&&{config:i}),southEastArrowNorthWest:a=>pt({top:s(a),left:a.right-t,name:"arrow_nw"},i&&{config:i}),southEastArrowNorthMiddleWest:(a,c)=>pt({top:s(a),left:a.right-.25*c.width-t,name:"arrow_nmw"},i&&{config:i}),southEastArrowNorth:(a,c)=>pt({top:s(a),left:a.right-c.width/2,name:"arrow_n"},i&&{config:i}),southEastArrowNorthMiddleEast:(a,c)=>pt({top:s(a),left:a.right-.75*c.width+t,name:"arrow_nme"},i&&{config:i}),southEastArrowNorthEast:(a,c)=>pt({top:s(a),left:a.right-c.width+t,name:"arrow_ne"},i&&{config:i}),westArrowEast:(a,c)=>pt({top:a.top+a.height/2-c.height/2,left:a.left-c.width-e,name:"arrow_e"},i&&{config:i}),eastArrowWest:(a,c)=>pt({top:a.top+a.height/2-c.height/2,left:a.right+e,name:"arrow_w"},i&&{config:i}),viewportStickyNorth:(a,c,l,d)=>{const h=d||l;return a.getIntersection(h)?h.height-a.height>n?null:{top:h.top+n,left:a.left+a.width/2-c.width/2,name:"arrowless",config:pt({withArrow:!1},i)}:null}};function r(a,c){return a.top-c.height-e}function s(a){return a.bottom+e}}ae.arrowSideOffset=25,ae.arrowHeightOffset=10,ae.stickyVerticalOffset=20,ae._getOptimalPosition=Zr,ae.defaultPositions=du();var hu=N(107),w_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(hu.c,w_),hu.c.locals;const uu="ck-tooltip",ce=class extends Ae(){constructor(o){if(super(),this._currentElementWithTooltip=null,this._currentTooltipPosition=null,this._resizeObserver=null,ce._editors.add(o),ce._instance)return ce._instance;ce._instance=this,this.tooltipTextView=new tt(o.locale),this.tooltipTextView.set("text",""),this.tooltipTextView.setTemplate({tag:"span",attributes:{class:["ck","ck-tooltip__text"]},children:[{text:this.tooltipTextView.bindTemplate.to("text")}]}),this.balloonPanelView=new ae(o.locale),this.balloonPanelView.class=uu,this.balloonPanelView.content.add(this.tooltipTextView),this._pinTooltipDebounced=Ho(this._pinTooltip,600),this.listenTo($.document,"mouseenter",this._onEnterOrFocus.bind(this),{useCapture:!0}),this.listenTo($.document,"mouseleave",this._onLeaveOrBlur.bind(this),{useCapture:!0}),this.listenTo($.document,"focus",this._onEnterOrFocus.bind(this),{useCapture:!0}),this.listenTo($.document,"blur",this._onLeaveOrBlur.bind(this),{useCapture:!0}),this.listenTo($.document,"scroll",this._onScroll.bind(this),{useCapture:!0}),this._watchdogExcluded=!0}destroy(o){const t=o.ui.view&&o.ui.view.body;ce._editors.delete(o),this.stopListening(o.ui),t&&t.has(this.balloonPanelView)&&t.remove(this.balloonPanelView),ce._editors.size||(this._unpinTooltip(),this.balloonPanelView.destroy(),this.stopListening(),ce._instance=null)}static getPositioningFunctions(o){const t=ce.defaultBalloonPositions;return{s:[t.southArrowNorth,t.southArrowNorthEast,t.southArrowNorthWest],n:[t.northArrowSouth],e:[t.eastArrowWest],w:[t.westArrowEast],sw:[t.southArrowNorthEast],se:[t.southArrowNorthWest]}[o]}_onEnterOrFocus(o,{target:t}){const e=ta(t);var n;e&&e!==this._currentElementWithTooltip&&(this._unpinTooltip(),this._pinTooltipDebounced(e,{text:(n=e).dataset.ckeTooltipText,position:n.dataset.ckeTooltipPosition||"s",cssClass:n.dataset.ckeTooltipClass||""}))}_onLeaveOrBlur(o,{target:t,relatedTarget:e}){if(o.name==="mouseleave"){if(!Mn(t)||this._currentElementWithTooltip&&t!==this._currentElementWithTooltip)return;const n=ta(t),i=ta(e);n&&n!==i&&this._unpinTooltip()}else{if(this._currentElementWithTooltip&&t!==this._currentElementWithTooltip)return;this._unpinTooltip()}}_onScroll(o,{target:t}){this._currentElementWithTooltip&&(t.contains(this.balloonPanelView.element)&&t.contains(this._currentElementWithTooltip)||this._unpinTooltip())}_pinTooltip(o,{text:t,position:e,cssClass:n}){const i=Wt(ce._editors.values()).ui.view.body;i.has(this.balloonPanelView)||i.add(this.balloonPanelView),this.tooltipTextView.text=t,this.balloonPanelView.pin({target:o,positions:ce.getPositioningFunctions(e)}),this._resizeObserver=new Ro(o,()=>{Bn(o)||this._unpinTooltip()}),this.balloonPanelView.class=[uu,n].filter(r=>r).join(" ");for(const r of ce._editors)this.listenTo(r.ui,"update",this._updateTooltipPosition.bind(this),{priority:"low"});this._currentElementWithTooltip=o,this._currentTooltipPosition=e}_unpinTooltip(){this._pinTooltipDebounced.cancel(),this.balloonPanelView.unpin();for(const o of ce._editors)this.stopListening(o.ui,"update");this._currentElementWithTooltip=null,this._currentTooltipPosition=null,this._resizeObserver&&this._resizeObserver.destroy()}_updateTooltipPosition(){Bn(this._currentElementWithTooltip)?this.balloonPanelView.pin({target:this._currentElementWithTooltip,positions:ce.getPositioningFunctions(this._currentTooltipPosition)}):this._unpinTooltip()}};let nr=ce;function ta(o){return Mn(o)?o.closest("[data-cke-tooltip-text]:not([data-cke-tooltip-disabled])"):null}nr.defaultBalloonPositions=du({heightOffset:5,sideOffset:13}),nr._editors=new Set,nr._instance=null;const or=function(o,t,e){var n=!0,i=!0;if(typeof o!="function")throw new TypeError("Expected a function");return bt(e)&&(n="leading"in e?!!e.leading:n,i="trailing"in e?!!e.trailing:i),Ho(o,t,{leading:n,maxWait:t,trailing:i})};var A_=Object.defineProperty,gu=Object.getOwnPropertySymbols,C_=Object.prototype.hasOwnProperty,v_=Object.prototype.propertyIsEnumerable,pu=(o,t,e)=>t in o?A_(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,y_=(o,t)=>{for(var e in t||(t={}))C_.call(t,e)&&pu(o,e,t[e]);if(gu)for(var e of gu(t))v_.call(t,e)&&pu(o,e,t[e]);return o};const x_=50,E_=350,D_="Powered by";class I_ extends Ae(){constructor(t){super(),this.editor=t,this._balloonView=null,this._lastFocusedEditableElement=null,this._showBalloonThrottled=or(this._showBalloon.bind(this),50,{leading:!0}),t.on("ready",this._handleEditorReady.bind(this))}destroy(){const t=this._balloonView;t&&(t.unpin(),this._balloonView=null),this._showBalloonThrottled.cancel(),this.stopListening()}_handleEditorReady(){const t=this.editor;(t.config.get("ui.poweredBy.forceVisible")||function(e){function n(g){return g.length>=40&&g.length<=255?"VALID":"INVALID"}if(!e)return"INVALID";let i="";try{i=atob(e)}catch{return"INVALID"}const r=i.split("-"),s=r[0],a=r[1];if(!a)return n(e);try{atob(a)}catch{try{if(atob(s),!atob(s).length)return n(e)}catch{return n(e)}}if(s.length<40||s.length>255)return"INVALID";let c="";try{atob(s),c=atob(a)}catch{return"INVALID"}if(c.length!==8)return"INVALID";const l=Number(c.substring(0,4)),d=Number(c.substring(4,6))-1,h=Number(c.substring(6,8)),u=new Date(l,d,h);return u{this._updateLastFocusedEditableElement(),i?this._showBalloon():this._hideBalloon()}),t.ui.focusTracker.on("change:focusedElement",(e,n,i)=>{this._updateLastFocusedEditableElement(),i&&this._showBalloon()}),t.ui.on("update",()=>{this._showBalloonThrottled()}))}_createBalloonView(){const t=this.editor,e=this._balloonView=new ae,n=fu(t),i=new S_(t.locale,n.label);e.content.add(i),e.set({class:"ck-powered-by-balloon"}),t.ui.view.body.add(e),t.ui.focusTracker.add(e.element),this._balloonView=e}_showBalloon(){if(!this._lastFocusedEditableElement)return;const t=function(e,n){const i=fu(e),r=i.side==="right"?function(s,a){return mu(s,a,(c,l)=>c.left+c.width-l.width-a.horizontalOffset)}(n,i):function(s,a){return mu(s,a,c=>c.left+a.horizontalOffset)}(n,i);return{target:n,positions:[r]}}(this.editor,this._lastFocusedEditableElement);t&&(this._balloonView||this._createBalloonView(),this._balloonView.pin(t))}_hideBalloon(){this._balloonView&&this._balloonView.unpin()}_updateLastFocusedEditableElement(){const t=this.editor,e=t.ui.focusTracker.isFocused,n=t.ui.focusTracker.focusedElement;if(!e||!n)return void(this._lastFocusedEditableElement=null);const i=Array.from(t.ui.getEditableElementsNames()).map(r=>t.ui.getEditableElement(r));i.includes(n)?this._lastFocusedEditableElement=n:this._lastFocusedEditableElement=i[0]}}class S_ extends tt{constructor(t,e){super(t);const n=new mn,i=this.bindTemplate;n.set({content:` +`)){const c=s.split(/\n{1,2}/g);let l=a;for(let d=0;d{if(this.isEnabled&&((i=n.keyCode)==ut.arrowright||i==ut.arrowleft||i==ut.arrowup||i==ut.arrowdown)){const r=new co(this.document,"arrowKey",this.document.selection.getFirstRange());this.document.fire(r,n),r.stop.called&&e.stop()}var i})}observe(){}stopObserving(){}}class aA extends Ke{constructor(t){super(t);const e=this.document;e.on("keydown",(n,i)=>{if(!this.isEnabled||i.keyCode!=ut.tab||i.ctrlKey)return;const r=new co(e,"tab",e.selection.getFirstRange());e.fire(r,i),r.stop.called&&n.stop()})}observe(){}stopObserving(){}}const kn=function(o){return $r(o,5)};class cA extends mt(){constructor(t){super(),this.domRoots=new Map,this._initialDomRootAttributes=new WeakMap,this._observers=new Map,this._ongoingChange=!1,this._postFixersInProgress=!1,this._renderingDisabled=!1,this._hasChangedSinceTheLastRendering=!1,this.document=new Fi(t),this.domConverter=new Ui(this.document),this.set("isRenderingInProgress",!1),this.set("hasDomSelection",!1),this._renderer=new P0(this.domConverter,this.document.selection),this._renderer.bind("isFocused","isSelecting","isComposing").to(this.document,"isFocused","isSelecting","isComposing"),this._writer=new ed(this.document),this.addObserver(yd),this.addObserver(Wi),this.addObserver(oA),this.addObserver(H0),this.addObserver(U0),this.addObserver(iA),this.addObserver(sA),this.addObserver(rA),this.addObserver(aA),this.document.on("arrowKey",B0,{priority:"low"}),D0(this),this.on("render",()=>{this._render(),this.document.fire("layoutChanged"),this._hasChangedSinceTheLastRendering=!1}),this.listenTo(this.document.selection,"change",()=>{this._hasChangedSinceTheLastRendering=!0}),this.listenTo(this.document,"change:isFocused",()=>{this._hasChangedSinceTheLastRendering=!0}),f.isiOS&&this.listenTo(this.document,"blur",(e,n)=>{this.domConverter.mapDomToView(n.domEvent.relatedTarget)||this.domConverter._clearDomSelection()})}attachDomRoot(t,e="main"){const n=this.document.getRoot(e);n._name=t.tagName.toLowerCase();const i={};for(const{name:s,value:a}of Array.from(t.attributes))i[s]=a,s==="class"?this._writer.addClass(a.split(" "),n):this._writer.setAttribute(s,a,n);this._initialDomRootAttributes.set(t,i);const r=()=>{this._writer.setAttribute("contenteditable",(!n.isReadOnly).toString(),n),n.isReadOnly?this._writer.addClass("ck-read-only",n):this._writer.removeClass("ck-read-only",n)};r(),this.domRoots.set(e,t),this.domConverter.bindElements(t,n),this._renderer.markToSync("children",n),this._renderer.markToSync("attributes",n),this._renderer.domDocuments.add(t.ownerDocument),n.on("change:children",(s,a)=>this._renderer.markToSync("children",a)),n.on("change:attributes",(s,a)=>this._renderer.markToSync("attributes",a)),n.on("change:text",(s,a)=>this._renderer.markToSync("text",a)),n.on("change:isReadOnly",()=>this.change(r)),n.on("change",()=>{this._hasChangedSinceTheLastRendering=!0});for(const s of this._observers.values())s.observe(t,e)}detachDomRoot(t){const e=this.domRoots.get(t);Array.from(e.attributes).forEach(({name:i})=>e.removeAttribute(i));const n=this._initialDomRootAttributes.get(e);for(const i in n)e.setAttribute(i,n[i]);this.domRoots.delete(t),this.domConverter.unbindDomElement(e);for(const i of this._observers.values())i.stopObserving(e)}getDomRoot(t="main"){return this.domRoots.get(t)}addObserver(t){let e=this._observers.get(t);if(e)return e;e=new t(this),this._observers.set(t,e);for(const[n,i]of this.domRoots)e.observe(i,n);return e.enable(),e}getObserver(t){return this._observers.get(t)}disableObservers(){for(const t of this._observers.values())t.disable()}enableObservers(){for(const t of this._observers.values())t.enable()}scrollToTheSelection({alignToTop:t,forceScroll:e,viewportOffset:n=20,ancestorOffset:i=20}={}){const r=this.document.selection.getFirstRange();if(!r)return;const s=kn({alignToTop:t,forceScroll:e,viewportOffset:n,ancestorOffset:i});typeof n=="number"&&(n={top:n,bottom:n,left:n,right:n});const a={target:this.domConverter.viewRangeToDom(r),viewportOffset:n,ancestorOffset:i,alignToTop:t,forceScroll:e};this.fire("scrollToTheSelection",a,s),function({target:c,viewportOffset:l=0,ancestorOffset:d=0,alignToTop:h,forceScroll:u}){const g=Jr(c);let p=g,k=null;for(l=function(b){return typeof b=="number"?{top:b,bottom:b,left:b,right:b}:b}(l);p;){let b;b=Yb(p==g?c:k),Kb({parent:b,getRect:()=>el(c,p),alignToTop:h,ancestorOffset:d,forceScroll:u});const A=el(c,p);if($b({window:p,rect:A,viewportOffset:l,alignToTop:h,forceScroll:u}),p.parent!=p){if(k=p.frameElement,p=p.parent,!k)return}else p=null}}(a)}focus(){if(!this.document.isFocused){const t=this.document.selection.editableElement;t&&(this.domConverter.focus(t),this.forceRender())}}change(t){if(this.isRenderingInProgress||this._postFixersInProgress)throw new _("cannot-change-view-tree",this);try{if(this._ongoingChange)return t(this._writer);this._ongoingChange=!0;const e=t(this._writer);return this._ongoingChange=!1,!this._renderingDisabled&&this._hasChangedSinceTheLastRendering&&(this._postFixersInProgress=!0,this.document._callPostFixers(this._writer),this._postFixersInProgress=!1,this.fire("render")),e}catch(e){_.rethrowUnexpectedError(e,this)}}forceRender(){this._hasChangedSinceTheLastRendering=!0,this.getObserver(Wi).flush(),this.change(()=>{})}destroy(){for(const t of this._observers.values())t.destroy();this.document.destroy(),this.stopListening()}createPositionAt(t,e){return V._createAt(t,e)}createPositionAfter(t){return V._createAfter(t)}createPositionBefore(t){return V._createBefore(t)}createRange(t,e){return new nt(t,e)}createRangeOn(t){return nt._createOn(t)}createRangeIn(t){return nt._createIn(t)}createSelection(...t){return new Pe(...t)}_disableRendering(t){this._renderingDisabled=t,t==0&&this.change(()=>{})}_render(){this.isRenderingInProgress=!0,this.disableObservers(),this._renderer.render(),this.enableObservers(),this.isRenderingInProgress=!1}}class bn{is(){throw new Error("is() method is abstract")}}class jn extends bn{constructor(t){super(),this.parent=null,this._attrs=We(t)}get document(){return null}get index(){let t;if(!this.parent)return null;if((t=this.parent.getChildIndex(this))===null)throw new _("model-node-not-found-in-parent",this);return t}get startOffset(){let t;if(!this.parent)return null;if((t=this.parent.getChildStartOffset(this))===null)throw new _("model-node-not-found-in-parent",this);return t}get offsetSize(){return 1}get endOffset(){return this.parent?this.startOffset+this.offsetSize:null}get nextSibling(){const t=this.index;return t!==null&&this.parent.getChild(t+1)||null}get previousSibling(){const t=this.index;return t!==null&&this.parent.getChild(t-1)||null}get root(){let t=this;for(;t.parent;)t=t.parent;return t}isAttached(){return this.parent!==null&&this.root.isAttached()}getPath(){const t=[];let e=this;for(;e.parent;)t.unshift(e.startOffset),e=e.parent;return t}getAncestors(t={}){const e=[];let n=t.includeSelf?this:this.parent;for(;n;)e[t.parentFirst?"push":"unshift"](n),n=n.parent;return e}getCommonAncestor(t,e={}){const n=this.getAncestors(e),i=t.getAncestors(e);let r=0;for(;n[r]==i[r]&&n[r];)r++;return r===0?null:n[r-1]}isBefore(t){if(this==t||this.root!==t.root)return!1;const e=this.getPath(),n=t.getPath(),i=St(e,n);switch(i){case"prefix":return!0;case"extension":return!1;default:return e[i](e[n[0]]=n[1],e),{})),t}_clone(t){return new this.constructor(this._attrs)}_remove(){this.parent._removeChildren(this.index)}_setAttribute(t,e){this._attrs.set(t,e)}_setAttributesTo(t){this._attrs=We(t)}_removeAttribute(t){return this._attrs.delete(t)}_clearAttributes(){this._attrs.clear()}}jn.prototype.is=function(o){return o==="node"||o==="model:node"};class Yo{constructor(t){this._nodes=[],t&&this._insertNodes(0,t)}[Symbol.iterator](){return this._nodes[Symbol.iterator]()}get length(){return this._nodes.length}get maxOffset(){return this._nodes.reduce((t,e)=>t+e.offsetSize,0)}getNode(t){return this._nodes[t]||null}getNodeIndex(t){const e=this._nodes.indexOf(t);return e==-1?null:e}getNodeStartOffset(t){const e=this.getNodeIndex(t);return e===null?null:this._nodes.slice(0,e).reduce((n,i)=>n+i.offsetSize,0)}indexToOffset(t){if(t==this._nodes.length)return this.maxOffset;const e=this._nodes[t];if(!e)throw new _("model-nodelist-index-out-of-bounds",this);return this.getNodeStartOffset(e)}offsetToIndex(t){let e=0;for(const n of this._nodes){if(t>=e&&t1e4)return n.slice(0,r).concat(i).concat(n.slice(r+s,n.length));{const a=Array.from(n);return a.splice(r,s,...i),a}}(this._nodes,Array.from(e),t,0)}_removeNodes(t,e=1){return this._nodes.splice(t,e)}toJSON(){return this._nodes.map(t=>t.toJSON())}}class yt extends jn{constructor(t,e){super(e),this._data=t||""}get offsetSize(){return this.data.length}get data(){return this._data}toJSON(){const t=super.toJSON();return t.data=this.data,t}_clone(){return new yt(this.data,this.getAttributes())}static fromJSON(t){return new yt(t.data,t.attributes)}}yt.prototype.is=function(o){return o==="$text"||o==="model:$text"||o==="text"||o==="model:text"||o==="node"||o==="model:node"};class Oe extends bn{constructor(t,e,n){if(super(),this.textNode=t,e<0||e>t.offsetSize)throw new _("model-textproxy-wrong-offsetintext",this);if(n<0||e+n>t.offsetSize)throw new _("model-textproxy-wrong-length",this);this.data=t.data.substring(e,e+n),this.offsetInText=e}get startOffset(){return this.textNode.startOffset!==null?this.textNode.startOffset+this.offsetInText:null}get offsetSize(){return this.data.length}get endOffset(){return this.startOffset!==null?this.startOffset+this.offsetSize:null}get isPartial(){return this.offsetSize!==this.textNode.offsetSize}get parent(){return this.textNode.parent}get root(){return this.textNode.root}getPath(){const t=this.textNode.getPath();return t.length>0&&(t[t.length-1]+=this.offsetInText),t}getAncestors(t={}){const e=[];let n=t.includeSelf?this:this.parent;for(;n;)e[t.parentFirst?"push":"unshift"](n),n=n.parent;return e}hasAttribute(t){return this.textNode.hasAttribute(t)}getAttribute(t){return this.textNode.getAttribute(t)}getAttributes(){return this.textNode.getAttributes()}getAttributeKeys(){return this.textNode.getAttributeKeys()}}Oe.prototype.is=function(o){return o==="$textProxy"||o==="model:$textProxy"||o==="textProxy"||o==="model:textProxy"};class Ct extends jn{constructor(t,e,n){super(e),this._children=new Yo,this.name=t,n&&this._insertChild(0,n)}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return this.childCount===0}getChild(t){return this._children.getNode(t)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(t){return this._children.getNodeIndex(t)}getChildStartOffset(t){return this._children.getNodeStartOffset(t)}offsetToIndex(t){return this._children.offsetToIndex(t)}getNodeByPath(t){let e=this;for(const n of t)e=e.getChild(e.offsetToIndex(n));return e}findAncestor(t,e={}){let n=e.includeSelf?this:this.parent;for(;n;){if(n.name===t)return n;n=n.parent}return null}toJSON(){const t=super.toJSON();if(t.name=this.name,this._children.length>0){t.children=[];for(const e of this._children)t.children.push(e.toJSON())}return t}_clone(t=!1){const e=t?Array.from(this._children).map(n=>n._clone(!0)):void 0;return new Ct(this.name,this.getAttributes(),e)}_appendChild(t){this._insertChild(this.childCount,t)}_insertChild(t,e){const n=function(i){return typeof i=="string"?[new yt(i)]:(Gt(i)||(i=[i]),Array.from(i).map(r=>typeof r=="string"?new yt(r):r instanceof Oe?new yt(r.data,r.getAttributes()):r))}(e);for(const i of n)i.parent!==null&&i._remove(),i.parent=this;this._children._insertNodes(t,n)}_removeChildren(t,e=1){const n=this._children._removeNodes(t,e);for(const i of n)i.parent=null;return n}static fromJSON(t){let e;if(t.children){e=[];for(const n of t.children)n.name?e.push(Ct.fromJSON(n)):e.push(yt.fromJSON(n))}return new Ct(t.name,t.attributes,e)}}Ct.prototype.is=function(o,t){return t?t===this.name&&(o==="element"||o==="model:element"):o==="element"||o==="model:element"||o==="node"||o==="model:node"};class tn{constructor(t){if(!t||!t.boundaries&&!t.startPosition)throw new _("model-tree-walker-no-start-position",null);const e=t.direction||"forward";if(e!="forward"&&e!="backward")throw new _("model-tree-walker-unknown-direction",t,{direction:e});this.direction=e,this.boundaries=t.boundaries||null,t.startPosition?this._position=t.startPosition.clone():this._position=O._createAt(this.boundaries[this.direction=="backward"?"end":"start"]),this.position.stickiness="toNone",this.singleCharacters=!!t.singleCharacters,this.shallow=!!t.shallow,this.ignoreElementEnd=!!t.ignoreElementEnd,this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null,this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null,this._visitedParent=this.position.parent}[Symbol.iterator](){return this}get position(){return this._position}skip(t){let e,n,i,r;do i=this.position,r=this._visitedParent,{done:e,value:n}=this.next();while(!e&&t(n));e||(this._position=i,this._visitedParent=r)}next(){return this.direction=="forward"?this._next():this._previous()}_next(){const t=this.position,e=this.position.clone(),n=this._visitedParent;if(n.parent===null&&e.offset===n.maxOffset)return{done:!0,value:void 0};if(n===this._boundaryEndParent&&e.offset==this.boundaries.end.offset)return{done:!0,value:void 0};const i=Qo(e,n),r=i||Dd(e,n,i);if(r instanceof Ct){if(this.shallow){if(this.boundaries&&this.boundaries.end.isBefore(e))return{done:!0,value:void 0};e.offset++}else e.path.push(0),this._visitedParent=r;return this._position=e,Fn("elementStart",r,t,e,1)}if(r instanceof yt){let s;if(this.singleCharacters)s=1;else{let l=r.endOffset;this._boundaryEndParent==n&&this.boundaries.end.offsetd&&(d=this.boundaries.start.offset),a=e.offset-d}const c=e.offset-s.startOffset,l=new Oe(s,c-a,a);return e.offset-=a,this._position=e,Fn("text",l,t,e,a)}return e.path.pop(),this._position=e,this._visitedParent=n.parent,Fn("elementStart",n,t,e,1)}}function Fn(o,t,e,n,i){return{done:!1,value:{type:o,item:t,previousPosition:e,nextPosition:n,length:i}}}class O extends bn{constructor(t,e,n="toNone"){if(super(),!t.is("element")&&!t.is("documentFragment"))throw new _("model-position-root-invalid",t);if(!(e instanceof Array)||e.length===0)throw new _("model-position-path-incorrect-format",t,{path:e});t.is("rootElement")?e=e.slice():(e=[...t.getPath(),...e],t=t.root),this.root=t,this.path=e,this.stickiness=n}get offset(){return this.path[this.path.length-1]}set offset(t){this.path[this.path.length-1]=t}get parent(){let t=this.root;for(let e=0;e1)return!1;if(i===1)return Sd(t,this,n);if(i===-1)return Sd(this,t,n)}return this.path.length===t.path.length||(this.path.length>t.path.length?Ps(this.path,e):Ps(t.path,e))}hasSameParentAs(t){return this.root!==t.root?!1:St(this.getParentPath(),t.getParentPath())=="same"}getTransformedByOperation(t){let e;switch(t.type){case"insert":e=this._getTransformedByInsertOperation(t);break;case"move":case"remove":case"reinsert":e=this._getTransformedByMoveOperation(t);break;case"split":e=this._getTransformedBySplitOperation(t);break;case"merge":e=this._getTransformedByMergeOperation(t);break;default:e=O._createAt(this)}return e}_getTransformedByInsertOperation(t){return this._getTransformedByInsertion(t.position,t.howMany)}_getTransformedByMoveOperation(t){return this._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany)}_getTransformedBySplitOperation(t){const e=t.movedRange;return e.containsPosition(this)||e.start.isEqual(this)&&this.stickiness=="toNext"?this._getCombined(t.splitPosition,t.moveTargetPosition):t.graveyardPosition?this._getTransformedByMove(t.graveyardPosition,t.insertionPosition,1):this._getTransformedByInsertion(t.insertionPosition,1)}_getTransformedByMergeOperation(t){const e=t.movedRange;let n;return e.containsPosition(this)||e.start.isEqual(this)?(n=this._getCombined(t.sourcePosition,t.targetPosition),t.sourcePosition.isBefore(t.targetPosition)&&(n=n._getTransformedByDeletion(t.deletionPosition,1))):n=this.isEqual(t.deletionPosition)?O._createAt(t.deletionPosition):this._getTransformedByMove(t.deletionPosition,t.graveyardPosition,1),n}_getTransformedByDeletion(t,e){const n=O._createAt(this);if(this.root!=t.root)return n;if(St(t.getParentPath(),this.getParentPath())=="same"){if(t.offsetthis.offset)return null;n.offset-=e}}else if(St(t.getParentPath(),this.getParentPath())=="prefix"){const i=t.path.length-1;if(t.offset<=this.path[i]){if(t.offset+e>this.path[i])return null;n.path[i]-=e}}return n}_getTransformedByInsertion(t,e){const n=O._createAt(this);if(this.root!=t.root)return n;if(St(t.getParentPath(),this.getParentPath())=="same")(t.offset=i;){if(n.path[s]+a!==r.maxOffset)return!1;a=1,s--,r=r.parent}return!0}(o,e+1)}function Ps(o,t){for(;te+1;){const r=i.maxOffset-n.offset;r!==0&&t.push(new B(n,n.getShiftedBy(r))),n.path=n.path.slice(0,-1),n.offset++,i=i.parent}for(;n.path.length<=this.end.path.length;){const r=this.end.path[n.path.length-1],s=r-n.offset;s!==0&&t.push(new B(n,n.getShiftedBy(s))),n.offset=r,n.path.push(0)}return t}getWalker(t={}){return t.boundaries=this,new tn(t)}*getItems(t={}){t.boundaries=this,t.ignoreElementEnd=!0;const e=new tn(t);for(const n of e)yield n.item}*getPositions(t={}){t.boundaries=this;const e=new tn(t);yield e.position;for(const n of e)yield n.nextPosition}getTransformedByOperation(t){switch(t.type){case"insert":return this._getTransformedByInsertOperation(t);case"move":case"remove":case"reinsert":return this._getTransformedByMoveOperation(t);case"split":return[this._getTransformedBySplitOperation(t)];case"merge":return[this._getTransformedByMergeOperation(t)]}return[new B(this.start,this.end)]}getTransformedByOperations(t){const e=[new B(this.start,this.end)];for(const n of t)for(let i=0;i0?new this(n,i):new this(i,n)}static _createIn(t){return new this(O._createAt(t,0),O._createAt(t,t.maxOffset))}static _createOn(t){return this._createFromPositionAndShift(O._createBefore(t),t.offsetSize)}static _createFromRanges(t){if(t.length===0)throw new _("range-create-from-ranges-empty-array",null);if(t.length==1)return t[0].clone();const e=t[0];t.sort((r,s)=>r.start.isAfter(s.start)?1:-1);const n=t.indexOf(e),i=new this(e.start,e.end);if(n>0)for(let r=n-1;t[r].end.isEqual(i.start);r++)i.start=O._createAt(t[r].start);for(let r=n+1;r{if(e.viewPosition)return;const n=this._modelToViewMapping.get(e.modelPosition.parent);if(!n)throw new _("mapping-model-position-view-parent-not-found",this,{modelPosition:e.modelPosition});e.viewPosition=this.findPositionIn(n,e.modelPosition.offset)},{priority:"low"}),this.on("viewToModelPosition",(t,e)=>{if(e.modelPosition)return;const n=this.findMappedViewAncestor(e.viewPosition),i=this._viewToModelMapping.get(n),r=this._toModelOffset(e.viewPosition.parent,e.viewPosition.offset,n);e.modelPosition=O._createAt(i,r)},{priority:"low"})}bindElements(t,e){this._modelToViewMapping.set(t,e),this._viewToModelMapping.set(e,t)}unbindViewElement(t,e={}){const n=this.toModelElement(t);if(this._elementToMarkerNames.has(t))for(const i of this._elementToMarkerNames.get(t))this._unboundMarkerNames.add(i);e.defer?this._deferredBindingRemovals.set(t,t.root):(this._viewToModelMapping.delete(t),this._modelToViewMapping.get(n)==t&&this._modelToViewMapping.delete(n))}unbindModelElement(t){const e=this.toViewElement(t);this._modelToViewMapping.delete(t),this._viewToModelMapping.get(e)==t&&this._viewToModelMapping.delete(e)}bindElementToMarker(t,e){const n=this._markerNameToElements.get(e)||new Set;n.add(t);const i=this._elementToMarkerNames.get(t)||new Set;i.add(e),this._markerNameToElements.set(e,n),this._elementToMarkerNames.set(t,i)}unbindElementFromMarkerName(t,e){const n=this._markerNameToElements.get(e);n&&(n.delete(t),n.size==0&&this._markerNameToElements.delete(e));const i=this._elementToMarkerNames.get(t);i&&(i.delete(e),i.size==0&&this._elementToMarkerNames.delete(t))}flushUnboundMarkerNames(){const t=Array.from(this._unboundMarkerNames);return this._unboundMarkerNames.clear(),t}flushDeferredBindings(){for(const[t,e]of this._deferredBindingRemovals)t.root==e&&this.unbindViewElement(t);this._deferredBindingRemovals=new Map}clearBindings(){this._modelToViewMapping=new WeakMap,this._viewToModelMapping=new WeakMap,this._markerNameToElements=new Map,this._elementToMarkerNames=new Map,this._unboundMarkerNames=new Set,this._deferredBindingRemovals=new Map}toModelElement(t){return this._viewToModelMapping.get(t)}toViewElement(t){return this._modelToViewMapping.get(t)}toModelRange(t){return new B(this.toModelPosition(t.start),this.toModelPosition(t.end))}toViewRange(t){return new nt(this.toViewPosition(t.start),this.toViewPosition(t.end))}toModelPosition(t){const e={viewPosition:t,mapper:this};return this.fire("viewToModelPosition",e),e.modelPosition}toViewPosition(t,e={}){const n={modelPosition:t,mapper:this,isPhantom:e.isPhantom};return this.fire("modelToViewPosition",n),n.viewPosition}markerNameToElements(t){const e=this._markerNameToElements.get(t);if(!e)return null;const n=new Set;for(const i of e)if(i.is("attributeElement"))for(const r of i.getElementsWithSameId())n.add(r);else n.add(i);return n}registerViewToModelLength(t,e){this._viewToModelLengthCallbacks.set(t,e)}findMappedViewAncestor(t){let e=t.parent;for(;!this._viewToModelMapping.has(e);)e=e.parent;return e}_toModelOffset(t,e,n){if(n!=t)return this._toModelOffset(t.parent,t.index,n)+this._toModelOffset(t,e,t);if(t.is("$text"))return e;let i=0;for(let r=0;r1?t[0]+":"+t[1]:t[0]}var dA=Object.defineProperty,hA=Object.defineProperties,uA=Object.getOwnPropertyDescriptors,Md=Object.getOwnPropertySymbols,gA=Object.prototype.hasOwnProperty,pA=Object.prototype.propertyIsEnumerable,Bd=(o,t,e)=>t in o?dA(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Ls=(o,t)=>{for(var e in t||(t={}))gA.call(t,e)&&Bd(o,e,t[e]);if(Md)for(var e of Md(t))pA.call(t,e)&&Bd(o,e,t[e]);return o},Nd=(o,t)=>hA(o,uA(t));class Pd extends kt(){constructor(t){super(),this._conversionApi=Ls({dispatcher:this},t),this._firedEventsMap=new WeakMap}convertChanges(t,e,n){const i=this._createConversionApi(n,t.getRefreshedItems());for(const s of t.getMarkersToRemove())this._convertMarkerRemove(s.name,s.range,i);const r=this._reduceChanges(t.getChanges());for(const s of r)s.type==="insert"?this._convertInsert(B._createFromPositionAndShift(s.position,s.length),i):s.type==="reinsert"?this._convertReinsert(B._createFromPositionAndShift(s.position,s.length),i):s.type==="remove"?this._convertRemove(s.position,s.length,s.name,i):this._convertAttribute(s.range,s.attributeKey,s.attributeOldValue,s.attributeNewValue,i);i.mapper.flushDeferredBindings();for(const s of i.mapper.flushUnboundMarkerNames()){const a=e.get(s).getRange();this._convertMarkerRemove(s,a,i),this._convertMarkerAdd(s,a,i)}for(const s of t.getMarkersToAdd())this._convertMarkerAdd(s.name,s.range,i);i.consumable.verifyAllConsumed("insert")}convert(t,e,n,i={}){const r=this._createConversionApi(n,void 0,i);this._convertInsert(t,r);for(const[s,a]of e)this._convertMarkerAdd(s,a,r);r.consumable.verifyAllConsumed("insert")}convertSelection(t,e,n){const i=this._createConversionApi(n);this.fire("cleanSelection",{selection:t},i);const r=t.getFirstPosition().root;if(!i.mapper.toViewElement(r))return;const s=Array.from(e.getMarkersAtPosition(t.getFirstPosition()));if(this._addConsumablesForSelection(i.consumable,t,s),this.fire("selection",{selection:t},i),t.isCollapsed){for(const a of s)if(i.consumable.test(t,"addMarker:"+a.name)){const c=a.getRange();if(!mA(t.getFirstPosition(),a,i.mapper))continue;const l={item:t,markerName:a.name,markerRange:c};this.fire(`addMarker:${a.name}`,l,i)}for(const a of t.getAttributeKeys())if(i.consumable.test(t,"attribute:"+a)){const c={item:t,range:t.getFirstRange(),attributeKey:a,attributeOldValue:null,attributeNewValue:t.getAttribute(a)};this.fire(`attribute:${a}:$text`,c,i)}}}_convertInsert(t,e,n={}){n.doNotAddConsumables||this._addConsumablesForInsert(e.consumable,t);for(const i of Array.from(t.getWalker({shallow:!0})).map(Ld))this._testAndFire("insert",i,e)}_convertRemove(t,e,n,i){this.fire(`remove:${n}`,{position:t,length:e},i)}_convertAttribute(t,e,n,i,r){this._addConsumablesForRange(r.consumable,t,`attribute:${e}`);for(const s of t){const a={item:s.item,range:B._createFromPositionAndShift(s.previousPosition,s.length),attributeKey:e,attributeOldValue:n,attributeNewValue:i};this._testAndFire(`attribute:${e}`,a,r)}}_convertReinsert(t,e){const n=Array.from(t.getWalker({shallow:!0}));this._addConsumablesForInsert(e.consumable,n);for(const i of n.map(Ld))this._testAndFire("insert",Nd(Ls({},i),{reconversion:!0}),e)}_convertMarkerAdd(t,e,n){if(e.root.rootName=="$graveyard")return;const i=`addMarker:${t}`;if(n.consumable.add(e,i),this.fire(i,{markerName:t,markerRange:e},n),n.consumable.consume(e,i)){this._addConsumablesForRange(n.consumable,e,i);for(const r of e.getItems()){if(!n.consumable.test(r,i))continue;const s={item:r,range:B._createOn(r),markerName:t,markerRange:e};this.fire(i,s,n)}}}_convertMarkerRemove(t,e,n){e.root.rootName!="$graveyard"&&this.fire(`removeMarker:${t}`,{markerName:t,markerRange:e},n)}_reduceChanges(t){const e={changes:t};return this.fire("reduceChanges",e),e.changes}_addConsumablesForInsert(t,e){for(const n of e){const i=n.item;if(t.test(i,"insert")===null){t.add(i,"insert");for(const r of i.getAttributeKeys())t.add(i,"attribute:"+r)}}return t}_addConsumablesForRange(t,e,n){for(const i of e.getItems())t.add(i,n);return t}_addConsumablesForSelection(t,e,n){t.add(e,"selection");for(const i of n)t.add(e,"addMarker:"+i.name);for(const i of e.getAttributeKeys())t.add(e,"attribute:"+i);return t}_testAndFire(t,e,n){const i=function(c,l){const d=l.item.is("element")?l.item.name:"$text";return`${c}:${d}`}(t,e),r=e.item.is("$textProxy")?n.consumable._getSymbolForTextProxy(e.item):e.item,s=this._firedEventsMap.get(n),a=s.get(r);if(a){if(a.has(i))return;a.add(i)}else s.set(r,new Set([i]));this.fire(i,e,n)}_testAndFireAddAttributes(t,e){const n={item:t,range:B._createOn(t)};for(const i of n.item.getAttributeKeys())n.attributeKey=i,n.attributeOldValue=null,n.attributeNewValue=n.item.getAttribute(i),this._testAndFire(`attribute:${i}`,n,e)}_createConversionApi(t,e=new Set,n={}){const i=Nd(Ls({},this._conversionApi),{consumable:new lA,writer:t,options:n,convertItem:r=>this._convertInsert(B._createOn(r),i),convertChildren:r=>this._convertInsert(B._createIn(r),i,{doNotAddConsumables:!0}),convertAttributes:r=>this._testAndFireAddAttributes(r,i),canReuseView:r=>!e.has(i.mapper.toModelElement(r))});return this._firedEventsMap.set(i,new Map),i}}function mA(o,t,e){const n=t.getRange(),i=Array.from(o.getAncestors());return i.shift(),i.reverse(),!i.some(r=>{if(n.containsItem(r))return!!e.toViewElement(r).getCustomProperty("addHighlight")})}function Ld(o){return{item:o.item,range:B._createFromPositionAndShift(o.previousPosition,o.length)}}class ge extends kt(bn){constructor(...t){super(),this._lastRangeBackward=!1,this._attrs=new Map,this._ranges=[],t.length&&this.setTo(...t)}get anchor(){if(this._ranges.length>0){const t=this._ranges[this._ranges.length-1];return this._lastRangeBackward?t.end:t.start}return null}get focus(){if(this._ranges.length>0){const t=this._ranges[this._ranges.length-1];return this._lastRangeBackward?t.start:t.end}return null}get isCollapsed(){return this._ranges.length===1&&this._ranges[0].isCollapsed}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}isEqual(t){if(this.rangeCount!=t.rangeCount)return!1;if(this.rangeCount===0)return!0;if(!this.anchor.isEqual(t.anchor)||!this.focus.isEqual(t.focus))return!1;for(const e of this._ranges){let n=!1;for(const i of t._ranges)if(e.isEqual(i)){n=!0;break}if(!n)return!1}return!0}*getRanges(){for(const t of this._ranges)yield new B(t.start,t.end)}getFirstRange(){let t=null;for(const e of this._ranges)t&&!e.start.isBefore(t.start)||(t=e);return t?new B(t.start,t.end):null}getLastRange(){let t=null;for(const e of this._ranges)t&&!e.end.isAfter(t.end)||(t=e);return t?new B(t.start,t.end):null}getFirstPosition(){const t=this.getFirstRange();return t?t.start.clone():null}getLastPosition(){const t=this.getLastRange();return t?t.end.clone():null}setTo(...t){let[e,n,i]=t;if(typeof n=="object"&&(i=n,n=void 0),e===null)this._setRanges([]);else if(e instanceof ge)this._setRanges(e.getRanges(),e.isBackward);else if(e&&typeof e.getRanges=="function")this._setRanges(e.getRanges(),e.isBackward);else if(e instanceof B)this._setRanges([e],!!i&&!!i.backward);else if(e instanceof O)this._setRanges([new B(e)]);else if(e instanceof jn){const r=!!i&&!!i.backward;let s;if(n=="in")s=B._createIn(e);else if(n=="on")s=B._createOn(e);else{if(n===void 0)throw new _("model-selection-setto-required-second-parameter",[this,e]);s=new B(O._createAt(e,n))}this._setRanges([s],r)}else{if(!Gt(e))throw new _("model-selection-setto-not-selectable",[this,e]);this._setRanges(e,i&&!!i.backward)}}_setRanges(t,e=!1){const n=Array.from(t),i=n.some(r=>{if(!(r instanceof B))throw new _("model-selection-set-ranges-not-range",[this,t]);return this._ranges.every(s=>!s.isEqual(r))});(n.length!==this._ranges.length||i)&&(this._replaceAllRanges(n),this._lastRangeBackward=!!e,this.fire("change:range",{directChange:!0}))}setFocus(t,e){if(this.anchor===null)throw new _("model-selection-setfocus-no-ranges",[this,t]);const n=O._createAt(t,e);if(n.compareWith(this.focus)=="same")return;const i=this.anchor;this._ranges.length&&this._popRange(),n.compareWith(i)=="before"?(this._pushRange(new B(n,i)),this._lastRangeBackward=!0):(this._pushRange(new B(i,n)),this._lastRangeBackward=!1),this.fire("change:range",{directChange:!0})}getAttribute(t){return this._attrs.get(t)}getAttributes(){return this._attrs.entries()}getAttributeKeys(){return this._attrs.keys()}hasAttribute(t){return this._attrs.has(t)}removeAttribute(t){this.hasAttribute(t)&&(this._attrs.delete(t),this.fire("change:attribute",{attributeKeys:[t],directChange:!0}))}setAttribute(t,e){this.getAttribute(t)!==e&&(this._attrs.set(t,e),this.fire("change:attribute",{attributeKeys:[t],directChange:!0}))}getSelectedElement(){return this.rangeCount!==1?null:this.getFirstRange().getContainedElement()}*getSelectedBlocks(){const t=new WeakSet;for(const e of this.getRanges()){const n=zd(e.start,t);kA(n,e)&&(yield n);for(const r of e.getWalker()){const s=r.item;r.type=="elementEnd"&&fA(s,t,e)&&(yield s)}const i=zd(e.end,t);bA(i,e)&&(yield i)}}containsEntireContent(t=this.anchor.root){const e=O._createAt(t,0),n=O._createAt(t,"end");return e.isTouching(this.getFirstPosition())&&n.isTouching(this.getLastPosition())}_pushRange(t){this._checkRange(t),this._ranges.push(new B(t.start,t.end))}_checkRange(t){for(let e=0;e0;)this._popRange()}_popRange(){this._ranges.pop()}}function Od(o,t){return!t.has(o)&&(t.add(o),o.root.document.model.schema.isBlock(o)&&!!o.parent)}function fA(o,t,e){return Od(o,t)&&Os(o,e)}function zd(o,t){const e=o.parent.root.document.model.schema,n=o.parent.getAncestors({parentFirst:!0,includeSelf:!0});let i=!1;const r=n.find(s=>!i&&(i=e.isLimit(s),!i&&Od(s,t)));return n.forEach(s=>t.add(s)),r}function Os(o,t){const e=function(n){const i=n.root.document.model.schema;let r=n.parent;for(;r;){if(i.isBlock(r))return r;r=r.parent}}(o);return e?!t.containsRange(B._createOn(e),!0):!0}function kA(o,t){return!!o&&(!(!t.isCollapsed&&!o.isEmpty)||!t.start.isTouching(O._createAt(o,o.maxOffset))&&Os(o,t))}function bA(o,t){return!!o&&(!(!t.isCollapsed&&!o.isEmpty)||!t.end.isTouching(O._createAt(o,0))&&Os(o,t))}ge.prototype.is=function(o){return o==="selection"||o==="model:selection"};class pe extends kt(B){constructor(t,e){super(t,e),wA.call(this)}detach(){this.stopListening()}toRange(){return new B(this.start,this.end)}static fromRange(t){return new pe(t.start,t.end)}}function wA(){this.listenTo(this.root.document.model,"applyOperation",(o,t)=>{const e=t[0];e.isDocumentOperation&&AA.call(this,e)},{priority:"low"})}function AA(o){const t=this.getTransformedByOperation(o),e=B._createFromRanges(t),n=!e.isEqual(this),i=function(s,a){switch(a.type){case"insert":return s.containsPosition(a.position);case"move":case"remove":case"reinsert":case"merge":return s.containsPosition(a.sourcePosition)||s.start.isEqual(a.sourcePosition)||s.containsPosition(a.targetPosition);case"split":return s.containsPosition(a.splitPosition)||s.containsPosition(a.insertionPosition)}return!1}(this,o);let r=null;if(n){e.root.rootName=="$graveyard"&&(r=o.type=="remove"?o.sourcePosition:o.deletionPosition);const s=this.toRange();this.start=e.start,this.end=e.end,this.fire("change:range",s,{deletionPosition:r})}else i&&this.fire("change:content",this.toRange(),{deletionPosition:r})}pe.prototype.is=function(o){return o==="liveRange"||o==="model:liveRange"||o=="range"||o==="model:range"};const Ki="selection:";class ze extends kt(bn){constructor(t){super(),this._selection=new CA(t),this._selection.delegate("change:range").to(this),this._selection.delegate("change:attribute").to(this),this._selection.delegate("change:marker").to(this)}get isCollapsed(){return this._selection.isCollapsed}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get rangeCount(){return this._selection.rangeCount}get hasOwnRange(){return this._selection.hasOwnRange}get isBackward(){return this._selection.isBackward}get isGravityOverridden(){return this._selection.isGravityOverridden}get markers(){return this._selection.markers}get _ranges(){return this._selection._ranges}getRanges(){return this._selection.getRanges()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getSelectedBlocks(){return this._selection.getSelectedBlocks()}getSelectedElement(){return this._selection.getSelectedElement()}containsEntireContent(t){return this._selection.containsEntireContent(t)}destroy(){this._selection.destroy()}getAttributeKeys(){return this._selection.getAttributeKeys()}getAttributes(){return this._selection.getAttributes()}getAttribute(t){return this._selection.getAttribute(t)}hasAttribute(t){return this._selection.hasAttribute(t)}refresh(){this._selection.updateMarkers(),this._selection._updateAttributes(!1)}observeMarkers(t){this._selection.observeMarkers(t)}_setFocus(t,e){this._selection.setFocus(t,e)}_setTo(...t){this._selection.setTo(...t)}_setAttribute(t,e){this._selection.setAttribute(t,e)}_removeAttribute(t){this._selection.removeAttribute(t)}_getStoredAttributes(){return this._selection.getStoredAttributes()}_overrideGravity(){return this._selection.overrideGravity()}_restoreGravity(t){this._selection.restoreGravity(t)}static _getStoreAttributeKey(t){return Ki+t}static _isStoreAttributeKey(t){return t.startsWith(Ki)}}ze.prototype.is=function(o){return o==="selection"||o=="model:selection"||o=="documentSelection"||o=="model:documentSelection"};class CA extends ge{constructor(t){super(),this.markers=new Me({idProperty:"name"}),this._attributePriority=new Map,this._selectionRestorePosition=null,this._hasChangedRange=!1,this._overriddenGravityRegister=new Set,this._observedMarkers=new Set,this._model=t.model,this._document=t,this.listenTo(this._model,"applyOperation",(e,n)=>{const i=n[0];i.isDocumentOperation&&i.type!="marker"&&i.type!="rename"&&i.type!="noop"&&(this._ranges.length==0&&this._selectionRestorePosition&&this._fixGraveyardSelection(this._selectionRestorePosition),this._selectionRestorePosition=null,this._hasChangedRange&&(this._hasChangedRange=!1,this.fire("change:range",{directChange:!1})))},{priority:"lowest"}),this.on("change:range",()=>{this._validateSelectionRanges(this.getRanges())}),this.listenTo(this._model.markers,"update",(e,n,i,r)=>{this._updateMarker(n,r)}),this.listenTo(this._document,"change",(e,n)=>{(function(i,r){const s=i.document.differ;for(const a of s.getChanges()){if(a.type!="insert")continue;const c=a.position.parent;a.length===c.maxOffset&&i.enqueueChange(r,l=>{const d=Array.from(c.getAttributeKeys()).filter(h=>h.startsWith(Ki));for(const h of d)l.removeAttribute(h,c)})}})(this._model,n)})}get isCollapsed(){return this._ranges.length===0?this._document._getDefaultRange().isCollapsed:super.isCollapsed}get anchor(){return super.anchor||this._document._getDefaultRange().start}get focus(){return super.focus||this._document._getDefaultRange().end}get rangeCount(){return this._ranges.length?this._ranges.length:1}get hasOwnRange(){return this._ranges.length>0}get isGravityOverridden(){return!!this._overriddenGravityRegister.size}destroy(){for(let t=0;t{if(this._hasChangedRange=!0,e.root==this._document.graveyard){this._selectionRestorePosition=r.deletionPosition;const s=this._ranges.indexOf(e);this._ranges.splice(s,1),e.detach()}}),e}updateMarkers(){if(!this._observedMarkers.size)return;const t=[];let e=!1;for(const i of this._model.markers){const r=i.name.split(":",1)[0];if(!this._observedMarkers.has(r))continue;const s=i.getRange();for(const a of this.getRanges())s.containsRange(a,!a.isCollapsed)&&t.push(i)}const n=Array.from(this.markers);for(const i of t)this.markers.has(i)||(this.markers.add(i),e=!0);for(const i of Array.from(this.markers))t.includes(i)||(this.markers.remove(i),e=!0);e&&this.fire("change:marker",{oldMarkers:n,directChange:!1})}_updateMarker(t,e){const n=t.name.split(":",1)[0];if(!this._observedMarkers.has(n))return;let i=!1;const r=Array.from(this.markers),s=this.markers.has(t);if(e){let a=!1;for(const c of this.getRanges())if(e.containsRange(c,!c.isCollapsed)){a=!0;break}a&&!s?(this.markers.add(t),i=!0):!a&&s&&(this.markers.remove(t),i=!0)}else s&&(this.markers.remove(t),i=!0);i&&this.fire("change:marker",{oldMarkers:r,directChange:!1})}_updateAttributes(t){const e=We(this._getSurroundingAttributes()),n=We(this.getAttributes());if(t)this._attributePriority=new Map,this._attrs=new Map;else for(const[r,s]of this._attributePriority)s=="low"&&(this._attrs.delete(r),this._attributePriority.delete(r));this._setAttributesTo(e);const i=[];for(const[r,s]of this.getAttributes())n.has(r)&&n.get(r)===s||i.push(r);for(const[r]of n)this.hasAttribute(r)||i.push(r);i.length>0&&this.fire("change:attribute",{attributeKeys:i,directChange:!1})}_setAttribute(t,e,n=!0){const i=n?"normal":"low";return i=="low"&&this._attributePriority.get(t)=="normal"?!1:super.getAttribute(t)!==e&&(this._attrs.set(t,e),this._attributePriority.set(t,i),!0)}_removeAttribute(t,e=!0){const n=e?"normal":"low";return(n!="low"||this._attributePriority.get(t)!="normal")&&(this._attributePriority.set(t,n),!!super.hasAttribute(t)&&(this._attrs.delete(t),!0))}_setAttributesTo(t){const e=new Set;for(const[n,i]of this.getAttributes())t.get(n)!==i&&this._removeAttribute(n,!1);for(const[n,i]of t)this._setAttribute(n,i,!1)&&e.add(n);return e}*getStoredAttributes(){const t=this.getFirstPosition().parent;if(this.isCollapsed&&t.isEmpty)for(const e of t.getAttributeKeys())e.startsWith(Ki)&&(yield[e.substr(10),t.getAttribute(e)])}_getSurroundingAttributes(){const t=this.getFirstPosition(),e=this._model.schema;if(t.root.rootName=="$graveyard")return null;let n=null;if(this.isCollapsed){const i=t.textNode?t.textNode:t.nodeBefore,r=t.textNode?t.textNode:t.nodeAfter;if(this.isGravityOverridden||(n=Zo(i,e)),n||(n=Zo(r,e)),!this.isGravityOverridden&&!n){let s=i;for(;s&&!n;)s=s.previousSibling,n=Zo(s,e)}if(!n){let s=r;for(;s&&!n;)s=s.nextSibling,n=Zo(s,e)}n||(n=this.getStoredAttributes())}else{const i=this.getFirstRange();for(const r of i){if(r.item.is("element")&&e.isObject(r.item)){n=Zo(r.item,e);break}if(r.type=="text"){n=r.item.getAttributes();break}}}return n}_fixGraveyardSelection(t){const e=this._model.schema.getNearestSelectionRange(t);e&&this._pushRange(e)}}function Zo(o,t){if(!o)return null;if(o instanceof Oe||o instanceof yt)return o.getAttributes();if(!t.isInline(o))return null;if(!t.isObject(o))return[];const e=[];for(const[n,i]of o.getAttributes())t.checkAttribute("$text",n)&&t.getAttributeProperties(n).copyFromObject!==!1&&e.push([n,i]);return e}class Rd{constructor(t){this._dispatchers=t}add(t){for(const e of this._dispatchers)t(e);return this}}class _A extends Rd{elementToElement(t){return this.add(function(e){const n=Vd(e.model),i=Jo(e.view,"container");return n.attributes.length&&(n.children=!0),r=>{r.on(`insert:${n.name}`,function(s,a=yA){return(c,l,d)=>{if(!a(l.item,d.consumable,{preflight:!0}))return;const h=s(l.item,d,l);if(!h)return;a(l.item,d.consumable);const u=d.mapper.toViewPosition(l.range.start);d.mapper.bindElements(l.item,h),d.writer.insert(u,h),d.convertAttributes(l.item),Wd(h,l.item.getChildren(),d,{reconversion:l.reconversion})}}(i,Gd(n)),{priority:e.converterPriority||"normal"}),(n.children||n.attributes.length)&&r.on("reduceChanges",qd(n),{priority:"low"})}}(t))}elementToStructure(t){return this.add(function(e){const n=Vd(e.model),i=Jo(e.view,"container");return n.children=!0,r=>{if(r._conversionApi.schema.checkChild(n.name,"$text"))throw new _("conversion-element-to-structure-disallowed-text",r,{elementName:n.name});var s,a;r.on(`insert:${n.name}`,(s=i,a=Gd(n),(c,l,d)=>{if(!a(l.item,d.consumable,{preflight:!0}))return;const h=new Map;d.writer._registerSlotFactory(function(p,k,b){return(A,E)=>{const M=A.createContainerElement("$slot");let z=null;if(E==="children")z=Array.from(p.getChildren());else{if(typeof E!="function")throw new _("conversion-slot-mode-unknown",b.dispatcher,{modeOrFilter:E});z=Array.from(p.getChildren()).filter(G=>E(G))}return k.set(M,z),M}}(l.item,h,d));const u=s(l.item,d,l);if(d.writer._clearSlotFactory(),!u)return;(function(p,k,b){const A=Array.from(k.values()).flat(),E=new Set(A);if(E.size!=A.length)throw new _("conversion-slot-filter-overlap",b.dispatcher,{element:p});if(E.size!=p.childCount)throw new _("conversion-slot-filter-incomplete",b.dispatcher,{element:p})})(l.item,h,d),a(l.item,d.consumable);const g=d.mapper.toViewPosition(l.range.start);d.mapper.bindElements(l.item,u),d.writer.insert(g,u),d.convertAttributes(l.item),function(p,k,b,A){b.mapper.on("modelToViewPosition",z,{priority:"highest"});let E=null,M=null;for([E,M]of k)Wd(p,M,b,A),b.writer.move(b.writer.createRangeIn(E),b.writer.createPositionBefore(E)),b.writer.remove(E);function z(G,et){const st=et.modelPosition.nodeAfter,Lt=M.indexOf(st);Lt<0||(et.viewPosition=et.mapper.findPositionIn(E,Lt))}b.mapper.off("modelToViewPosition",z)}(u,h,d,{reconversion:l.reconversion})}),{priority:e.converterPriority||"normal"}),r.on("reduceChanges",qd(n),{priority:"low"})}}(t))}attributeToElement(t){return this.add(function(e){e=kn(e);let n=e.model;typeof n=="string"&&(n={key:n});let i=`attribute:${n.key}`;if(n.name&&(i+=":"+n.name),n.values)for(const s of n.values)e.view[s]=Jo(e.view[s],"attribute");else e.view=Jo(e.view,"attribute");const r=Hd(e);return s=>{s.on(i,function(a){return(c,l,d)=>{if(!d.consumable.test(l.item,c.name))return;const h=a(l.attributeOldValue,d,l),u=a(l.attributeNewValue,d,l);if(!h&&!u)return;d.consumable.consume(l.item,c.name);const g=d.writer,p=g.document.selection;if(l.item instanceof ge||l.item instanceof ze)g.wrap(p.getFirstRange(),u);else{let k=d.mapper.toViewRange(l.range);l.attributeOldValue!==null&&h&&(k=g.unwrap(k,h)),l.attributeNewValue!==null&&u&&g.wrap(k,u)}}}(r),{priority:e.converterPriority||"normal"})}}(t))}attributeToAttribute(t){return this.add(function(e){e=kn(e);let n=e.model;typeof n=="string"&&(n={key:n});let i=`attribute:${n.key}`;if(n.name&&(i+=":"+n.name),n.values)for(const s of n.values)e.view[s]=Ud(e.view[s]);else e.view=Ud(e.view);const r=Hd(e);return s=>{var a;s.on(i,(a=r,(c,l,d)=>{if(!d.consumable.test(l.item,c.name))return;const h=a(l.attributeOldValue,d,l),u=a(l.attributeNewValue,d,l);if(!h&&!u)return;d.consumable.consume(l.item,c.name);const g=d.mapper.toViewElement(l.item),p=d.writer;if(!g)throw new _("conversion-attribute-to-attribute-on-text",d.dispatcher,l);if(l.attributeOldValue!==null&&h)if(h.key=="class"){const k=typeof h.value=="string"?h.value.split(/\s+/):h.value;for(const b of k)p.removeClass(b,g)}else if(h.key=="style")if(typeof h.value=="string"){const k=new As(p.document.stylesProcessor);k.setTo(h.value);for(const[b]of k.getStylesEntries())p.removeStyle(b,g)}else{const k=Object.keys(h.value);for(const b of k)p.removeStyle(b,g)}else p.removeAttribute(h.key,g);if(l.attributeNewValue!==null&&u)if(u.key=="class"){const k=typeof u.value=="string"?u.value.split(/\s+/):u.value;for(const b of k)p.addClass(b,g)}else if(u.key=="style")if(typeof u.value=="string"){const k=new As(p.document.stylesProcessor);k.setTo(u.value);for(const[b,A]of k.getStylesEntries())p.setStyle(b,A,g)}else{const k=Object.keys(u.value);for(const b of k)p.setStyle(b,u.value[b],g)}else p.setAttribute(u.key,u.value,g)}),{priority:e.converterPriority||"normal"})}}(t))}markerToElement(t){return this.add(function(e){const n=Jo(e.view,"ui");return i=>{var r;i.on(`addMarker:${e.model}`,(r=n,(s,a,c)=>{a.isOpening=!0;const l=r(a,c);a.isOpening=!1;const d=r(a,c);if(!l||!d)return;const h=a.markerRange;if(h.isCollapsed&&!c.consumable.consume(h,s.name))return;for(const p of h)if(!c.consumable.consume(p.item,s.name))return;const u=c.mapper,g=c.writer;g.insert(u.toViewPosition(h.start),l),c.mapper.bindElementToMarker(l,a.markerName),h.isCollapsed||(g.insert(u.toViewPosition(h.end),d),c.mapper.bindElementToMarker(d,a.markerName)),s.stop()}),{priority:e.converterPriority||"normal"}),i.on(`removeMarker:${e.model}`,(s,a,c)=>{const l=c.mapper.markerNameToElements(a.markerName);if(l){for(const d of l)c.mapper.unbindElementFromMarkerName(d,a.markerName),c.writer.clear(c.writer.createRangeOn(d),d);c.writer.clearClonedElementsGroup(a.markerName),s.stop()}},{priority:e.converterPriority||"normal"})}}(t))}markerToHighlight(t){return this.add(function(e){return n=>{var i;n.on(`addMarker:${e.model}`,(i=e.view,(r,s,a)=>{if(!s.item||!(s.item instanceof ge||s.item instanceof ze||s.item.is("$textProxy")))return;const c=zs(i,s,a);if(!c||!a.consumable.consume(s.item,r.name))return;const l=a.writer,d=jd(l,c),h=l.document.selection;if(s.item instanceof ge||s.item instanceof ze)l.wrap(h.getFirstRange(),d);else{const u=a.mapper.toViewRange(s.range),g=l.wrap(u,d);for(const p of g.getItems())if(p.is("attributeElement")&&p.isSimilar(d)){a.mapper.bindElementToMarker(p,s.markerName);break}}}),{priority:e.converterPriority||"normal"}),n.on(`addMarker:${e.model}`,function(r){return(s,a,c)=>{if(!a.item||!(a.item instanceof Ct))return;const l=zs(r,a,c);if(!l||!c.consumable.test(a.item,s.name))return;const d=c.mapper.toViewElement(a.item);if(d&&d.getCustomProperty("addHighlight")){c.consumable.consume(a.item,s.name);for(const h of B._createIn(a.item))c.consumable.consume(h.item,s.name);d.getCustomProperty("addHighlight")(d,l,c.writer),c.mapper.bindElementToMarker(d,a.markerName)}}}(e.view),{priority:e.converterPriority||"normal"}),n.on(`removeMarker:${e.model}`,function(r){return(s,a,c)=>{if(a.markerRange.isCollapsed)return;const l=zs(r,a,c);if(!l)return;const d=jd(c.writer,l),h=c.mapper.markerNameToElements(a.markerName);if(h){for(const u of h)c.mapper.unbindElementFromMarkerName(u,a.markerName),u.is("attributeElement")?c.writer.unwrap(c.writer.createRangeOn(u),d):u.getCustomProperty("removeHighlight")(u,l.id,c.writer);c.writer.clearClonedElementsGroup(a.markerName),s.stop()}}}(e.view),{priority:e.converterPriority||"normal"})}}(t))}markerToData(t){return this.add(function(e){e=kn(e);const n=e.model;let i=e.view;return i||(i=r=>({group:n,name:r.substr(e.model.length+1)})),r=>{var s;r.on(`addMarker:${n}`,(s=i,(a,c,l)=>{const d=s(c.markerName,l);if(!d)return;const h=c.markerRange;l.consumable.consume(h,a.name)&&(Fd(h,!1,l,c,d),Fd(h,!0,l,c,d),a.stop())}),{priority:e.converterPriority||"normal"}),r.on(`removeMarker:${n}`,function(a){return(c,l,d)=>{const h=a(l.markerName,d);if(!h)return;const u=d.mapper.markerNameToElements(l.markerName);if(u){for(const p of u)d.mapper.unbindElementFromMarkerName(p,l.markerName),p.is("containerElement")?(g(`data-${h.group}-start-before`,p),g(`data-${h.group}-start-after`,p),g(`data-${h.group}-end-before`,p),g(`data-${h.group}-end-after`,p)):d.writer.clear(d.writer.createRangeOn(p),p);d.writer.clearClonedElementsGroup(l.markerName),c.stop()}function g(p,k){if(k.hasAttribute(p)){const b=new Set(k.getAttribute(p).split(","));b.delete(h.name),b.size==0?d.writer.removeAttribute(p,k):d.writer.setAttribute(p,Array.from(b).join(","),k)}}}}(i),{priority:e.converterPriority||"normal"})}}(t))}}function jd(o,t){const e=o.createAttributeElement("span",t.attributes);return t.classes&&e._addClass(t.classes),typeof t.priority=="number"&&(e._priority=t.priority),e._id=t.id,e}function Fd(o,t,e,n,i){const r=t?o.start:o.end,s=r.nodeAfter&&r.nodeAfter.is("element")?r.nodeAfter:null,a=r.nodeBefore&&r.nodeBefore.is("element")?r.nodeBefore:null;if(s||a){let c,l;t&&s||!t&&!a?(c=s,l=!0):(c=a,l=!1);const d=e.mapper.toViewElement(c);if(d)return void function(h,u,g,p,k,b){const A=`data-${b.group}-${u?"start":"end"}-${g?"before":"after"}`,E=h.hasAttribute(A)?h.getAttribute(A).split(","):[];E.unshift(b.name),p.writer.setAttribute(A,E.join(","),h),p.mapper.bindElementToMarker(h,k.markerName)}(d,t,l,e,n,i)}(function(c,l,d,h,u){const g=`${u.group}-${l?"start":"end"}`,p=u.name?{name:u.name}:null,k=d.writer.createUIElement(g,p);d.writer.insert(c,k),d.mapper.bindElementToMarker(k,h.markerName)})(e.mapper.toViewPosition(r),t,e,n,i)}function Vd(o){return typeof o=="string"&&(o={name:o}),{name:o.name,attributes:o.attributes?Bt(o.attributes):[],children:!!o.children}}function Jo(o,t){return typeof o=="function"?o:(e,n)=>function(i,r,s){typeof i=="string"&&(i={name:i});let a;const c=r.writer,l=Object.assign({},i.attributes);if(s=="container")a=c.createContainerElement(i.name,l);else if(s=="attribute"){const d={priority:i.priority||zn.DEFAULT_PRIORITY};a=c.createAttributeElement(i.name,l,d)}else a=c.createUIElement(i.name,l);if(i.styles){const d=Object.keys(i.styles);for(const h of d)c.setStyle(h,i.styles[h],a)}if(i.classes){const d=i.classes;if(typeof d=="string")c.addClass(d,a);else for(const h of d)c.addClass(h,a)}return a}(o,n,t)}function Hd(o){return o.model.values?(t,e,n)=>{const i=o.view[t];return i?i(t,e,n):null}:o.view}function Ud(o){return typeof o=="string"?t=>({key:o,value:t}):typeof o=="object"?o.value?()=>o:t=>({key:o.key,value:t}):o}function zs(o,t,e){const n=typeof o=="function"?o(t,e):o;return n?(n.priority||(n.priority=10),n.id||(n.id=t.markerName),n):null}function qd(o){const t=function(e){return(n,i)=>{if(!n.is("element",e.name))return!1;if(i.type=="attribute"){if(e.attributes.includes(i.attributeKey))return!0}else if(e.children)return!0;return!1}}(o);return(e,n)=>{const i=[];n.reconvertedElements||(n.reconvertedElements=new Set);for(const r of n.changes){const s=r.type=="attribute"?r.range.start.nodeAfter:r.position.parent;if(s&&t(s,r)){if(!n.reconvertedElements.has(s)){n.reconvertedElements.add(s);const a=O._createBefore(s);let c=i.length;for(let l=i.length-1;l>=0;l--){const d=i[l],h=(d.type=="attribute"?d.range.start:d.position).compareWith(a);if(h=="before"||d.type=="remove"&&h=="same")break;c=l}i.splice(c,0,{type:"remove",name:s.name,position:a,length:1},{type:"reinsert",name:s.name,position:a,length:1})}}else i.push(r)}n.changes=i}}function Gd(o){return(t,e,n={})=>{const i=["insert"];for(const r of o.attributes)t.hasAttribute(r)&&i.push(`attribute:${r}`);return!!i.every(r=>e.test(t,r))&&(n.preflight||i.forEach(r=>e.consume(t,r)),!0)}}function Wd(o,t,e,n){for(const i of t)vA(o.root,i,e,n)||e.convertItem(i)}function vA(o,t,e,n){const{writer:i,mapper:r}=e;if(!n.reconversion)return!1;const s=r.toViewElement(t);return!(!s||s.root==o)&&!!e.canReuseView(s)&&(i.move(i.createRangeOn(s),r.toViewPosition(O._createBefore(t))),!0)}function yA(o,t,{preflight:e}={}){return e?t.test(o,"insert"):t.consume(o,"insert")}function $d(o){const{schema:t,document:e}=o.model;for(const n of e.getRoots())if(n.isEmpty&&!t.checkChild(n,"$text")&&t.checkChild(n,"paragraph"))return o.insertElement("paragraph",n),!0;return!1}function Kd(o,t,e){const n=e.createContext(o);return!!e.checkChild(n,"paragraph")&&!!e.checkChild(n.push("paragraph"),t)}function Yd(o,t){const e=t.createElement("paragraph");return t.insert(e,o),t.createPositionAt(e,0)}var xA=Object.defineProperty,EA=Object.defineProperties,DA=Object.getOwnPropertyDescriptors,Qd=Object.getOwnPropertySymbols,IA=Object.prototype.hasOwnProperty,SA=Object.prototype.propertyIsEnumerable,Zd=(o,t,e)=>t in o?xA(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;class TA extends Rd{elementToElement(t){return this.add(Jd(t))}elementToAttribute(t){return this.add(function(e){e=kn(e),Xd(e);const n=th(e,!1),i=Rs(e.view),r=i?`element:${i}`:"element";return s=>{s.on(r,n,{priority:e.converterPriority||"low"})}}(t))}attributeToAttribute(t){return this.add(function(e){e=kn(e);let n=null;(typeof e.view=="string"||e.view.key)&&(n=function(r){typeof r.view=="string"&&(r.view={key:r.view});const s=r.view.key,a=r.view.value===void 0?/[\s\S]*/:r.view.value;let c;return s=="class"||s=="style"?c={[s=="class"?"classes":"styles"]:a}:c={attributes:{[s]:a}},r.view.name&&(c.name=r.view.name),r.view=c,s}(e)),Xd(e,n);const i=th(e,!0);return r=>{r.on("element",i,{priority:e.converterPriority||"low"})}}(t))}elementToMarker(t){return this.add(function(e){const n=function(s){return(a,c)=>{const l=typeof s=="string"?s:s(a,c);return c.writer.createElement("$marker",{"data-name":l})}}(e.model);return Jd((i=((s,a)=>{for(var c in a||(a={}))IA.call(a,c)&&Zd(s,c,a[c]);if(Qd)for(var c of Qd(a))SA.call(a,c)&&Zd(s,c,a[c]);return s})({},e),r={model:n},EA(i,DA(r))));var i,r}(t))}dataToMarker(t){return this.add(function(e){e=kn(e),e.model||(e.model=s=>s?e.view+":"+s:e.view);const n={view:e.view,model:e.model},i=js(eh(n,"start")),r=js(eh(n,"end"));return s=>{s.on(`element:${e.view}-start`,i,{priority:e.converterPriority||"normal"}),s.on(`element:${e.view}-end`,r,{priority:e.converterPriority||"normal"});const a=At.low,c=At.highest,l=At.get(e.converterPriority)/c;s.on("element",function(d){return(h,u,g)=>{const p=`data-${d.view}`;function k(b,A){for(const E of A){const M=d.model(E,g),z=g.writer.createElement("$marker",{"data-name":M});g.writer.insert(z,b),u.modelCursor.isEqual(b)?u.modelCursor=u.modelCursor.getShiftedBy(1):u.modelCursor=u.modelCursor._getTransformedByInsertion(b,1),u.modelRange=u.modelRange._getTransformedByInsertion(b,1)[0]}}(g.consumable.test(u.viewItem,{attributes:p+"-end-after"})||g.consumable.test(u.viewItem,{attributes:p+"-start-after"})||g.consumable.test(u.viewItem,{attributes:p+"-end-before"})||g.consumable.test(u.viewItem,{attributes:p+"-start-before"}))&&(u.modelRange||Object.assign(u,g.convertChildren(u.viewItem,u.modelCursor)),g.consumable.consume(u.viewItem,{attributes:p+"-end-after"})&&k(u.modelRange.end,u.viewItem.getAttribute(p+"-end-after").split(",")),g.consumable.consume(u.viewItem,{attributes:p+"-start-after"})&&k(u.modelRange.end,u.viewItem.getAttribute(p+"-start-after").split(",")),g.consumable.consume(u.viewItem,{attributes:p+"-end-before"})&&k(u.modelRange.start,u.viewItem.getAttribute(p+"-end-before").split(",")),g.consumable.consume(u.viewItem,{attributes:p+"-start-before"})&&k(u.modelRange.start,u.viewItem.getAttribute(p+"-start-before").split(",")))}}(n),{priority:a+l})}}(t))}}function Jd(o){const t=js(o=kn(o)),e=Rs(o.view),n=e?`element:${e}`:"element";return i=>{i.on(n,t,{priority:o.converterPriority||"normal"})}}function Rs(o){return typeof o=="string"?o:typeof o=="object"&&typeof o.name=="string"?o.name:null}function js(o){const t=new Ne(o.view);return(e,n,i)=>{const r=t.match(n.viewItem);if(!r)return;const s=r.match;if(s.name=!0,!i.consumable.test(n.viewItem,s))return;const a=function(c,l,d){return c instanceof Function?c(l,d):d.writer.createElement(c)}(o.model,n.viewItem,i);a&&i.safeInsert(a,n.modelCursor)&&(i.consumable.consume(n.viewItem,s),i.convertChildren(n.viewItem,a),i.updateConversionResult(a,n))}}function Xd(o,t=null){const e=t===null||(r=>r.getAttribute(t)),n=typeof o.model!="object"?o.model:o.model.key,i=typeof o.model!="object"||o.model.value===void 0?e:o.model.value;o.model={key:n,value:i}}function th(o,t){const e=new Ne(o.view);return(n,i,r)=>{if(!i.modelRange&&t)return;const s=e.match(i.viewItem);if(!s||(function(d,h){const u=typeof d=="function"?d(h):d;return typeof u=="object"&&!Rs(u)?!1:!u.classes&&!u.attributes&&!u.styles}(o.view,i.viewItem)?s.match.name=!0:delete s.match.name,!r.consumable.test(i.viewItem,s.match)))return;const a=o.model.key,c=typeof o.model.value=="function"?o.model.value(i.viewItem,r):o.model.value;if(c===null)return;i.modelRange||Object.assign(i,r.convertChildren(i.viewItem,i.modelCursor)),function(d,h,u,g){let p=!1;for(const k of Array.from(d.getItems({shallow:u})))g.schema.checkAttribute(k,h.key)&&(p=!0,k.hasAttribute(h.key)||g.writer.setAttribute(h.key,h.value,k));return p}(i.modelRange,{key:a,value:c},t,r)&&(r.consumable.test(i.viewItem,{name:!0})&&(s.match.name=!0),r.consumable.consume(i.viewItem,s.match))}}function eh(o,t){return{view:`${o.view}-${t}`,model:(e,n)=>{const i=e.getAttribute("name"),r=o.model(i,n);return n.writer.createElement("$marker",{"data-name":r})}}}function MA(o){o.document.registerPostFixer(t=>function(e,n){const i=n.document.selection,r=n.schema,s=[];let a=!1;for(const c of i.getRanges()){const l=nh(c,r);l&&!l.isEqual(c)?(s.push(l),a=!0):s.push(c)}return a&&e.setSelection(function(c){const l=[...c],d=new Set;let h=1;for(;h!d.has(g))}(s),{backward:i.isBackward}),!1}(t,o))}function nh(o,t){return o.isCollapsed?function(e,n){const i=e.start,r=n.getNearestSelectionRange(i);if(!r){const a=i.getAncestors().reverse().find(c=>n.isObject(c));return a?B._createOn(a):null}if(!r.isCollapsed)return r;const s=r.start;return i.isEqual(s)?null:new B(s)}(o,t):function(e,n){const{start:i,end:r}=e,s=n.checkChild(i,"$text"),a=n.checkChild(r,"$text"),c=n.getLimitElement(i),l=n.getLimitElement(r);if(c===l){if(s&&a)return null;if(function(u,g,p){const k=u.nodeAfter&&!p.isLimit(u.nodeAfter)||p.checkChild(u,"$text"),b=g.nodeBefore&&!p.isLimit(g.nodeBefore)||p.checkChild(g,"$text");return k||b}(i,r,n)){const u=i.nodeAfter&&n.isSelectable(i.nodeAfter)?null:n.getNearestSelectionRange(i,"forward"),g=r.nodeBefore&&n.isSelectable(r.nodeBefore)?null:n.getNearestSelectionRange(r,"backward"),p=u?u.start:i,k=g?g.end:r;return new B(p,k)}}const d=c&&!c.is("rootElement"),h=l&&!l.is("rootElement");if(d||h){const u=i.nodeAfter&&r.nodeBefore&&i.nodeAfter.parent===r.nodeBefore.parent,g=d&&(!u||!ih(i.nodeAfter,n)),p=h&&(!u||!ih(r.nodeBefore,n));let k=i,b=r;return g&&(k=O._createBefore(oh(c,n))),p&&(b=O._createAfter(oh(l,n))),new B(k,b)}return null}(o,t)}function oh(o,t){let e=o,n=e;for(;t.isLimit(n)&&n.parent;)e=n,n=n.parent;return e}function ih(o,t){return o&&t.isSelectable(o)}class BA extends mt(){constructor(t,e){super(),this.model=t,this.view=new cA(e),this.mapper=new Td,this.downcastDispatcher=new Pd({mapper:this.mapper,schema:t.schema});const n=this.model.document,i=n.selection,r=this.model.markers;var s,a,c;this.listenTo(this.model,"_beforeChanges",()=>{this.view._disableRendering(!0)},{priority:"highest"}),this.listenTo(this.model,"_afterChanges",()=>{this.view._disableRendering(!1)},{priority:"lowest"}),this.listenTo(n,"change",()=>{this.view.change(l=>{this.downcastDispatcher.convertChanges(n.differ,r,l),this.downcastDispatcher.convertSelection(i,r,l)})},{priority:"low"}),this.listenTo(this.view.document,"selectionChange",function(l,d){return(h,u)=>{const g=u.newSelection,p=[];for(const b of g.getRanges())p.push(d.toModelRange(b));const k=l.createSelection(p,{backward:g.isBackward});k.isEqual(l.document.selection)||l.change(b=>{b.setSelection(k)})}}(this.model,this.mapper)),this.listenTo(this.view.document,"beforeinput",(s=this.mapper,a=this.model.schema,c=this.view,(l,d)=>{if(!c.document.isComposing||f.isAndroid)for(let h=0;h{if(!h.consumable.consume(d.item,l.name))return;const u=h.writer,g=h.mapper.toViewPosition(d.range.start),p=u.createText(d.item.data);u.insert(g,p)},{priority:"lowest"}),this.downcastDispatcher.on("insert",(l,d,h)=>{h.convertAttributes(d.item),d.reconversion||!d.item.is("element")||d.item.isEmpty||h.convertChildren(d.item)},{priority:"lowest"}),this.downcastDispatcher.on("remove",(l,d,h)=>{const u=h.mapper.toViewPosition(d.position),g=d.position.getShiftedBy(d.length),p=h.mapper.toViewPosition(g,{isPhantom:!0}),k=h.writer.createRange(u,p),b=h.writer.remove(k.getTrimmed());for(const A of h.writer.createRangeIn(b).getItems())h.mapper.unbindViewElement(A,{defer:!0})},{priority:"low"}),this.downcastDispatcher.on("cleanSelection",(l,d,h)=>{const u=h.writer,g=u.document.selection;for(const p of g.getRanges())p.isCollapsed&&p.end.parent.isAttached()&&h.writer.mergeAttributes(p.start);u.setSelection(null)}),this.downcastDispatcher.on("selection",(l,d,h)=>{const u=d.selection;if(u.isCollapsed||!h.consumable.consume(u,"selection"))return;const g=[];for(const p of u.getRanges())g.push(h.mapper.toViewRange(p));h.writer.setSelection(g,{backward:u.isBackward})},{priority:"low"}),this.downcastDispatcher.on("selection",(l,d,h)=>{const u=d.selection;if(!u.isCollapsed||!h.consumable.consume(u,"selection"))return;const g=h.writer,p=u.getFirstPosition(),k=h.mapper.toViewPosition(p),b=g.breakAttributes(k);g.setSelection(b)},{priority:"low"}),this.view.document.roots.bindTo(this.model.document.roots).using(l=>{if(l.rootName=="$graveyard")return null;const d=new Xl(this.view.document,l.name);return d.rootName=l.rootName,this.mapper.bindElements(l,d),d})}destroy(){this.view.destroy(),this.stopListening()}reconvertMarker(t){const e=typeof t=="string"?t:t.name,n=this.model.markers.get(e);if(!n)throw new _("editingcontroller-reconvertmarker-marker-not-exist",this,{markerName:e});this.model.change(()=>{this.model.markers._refresh(n)})}reconvertItem(t){this.model.change(()=>{this.model.document.differ._refreshItem(t)})}}class Xo{constructor(){this._consumables=new Map}add(t,e){let n;t.is("$text")||t.is("documentFragment")?this._consumables.set(t,!0):(this._consumables.has(t)?n=this._consumables.get(t):(n=new NA(t),this._consumables.set(t,n)),n.add(e))}test(t,e){const n=this._consumables.get(t);return n===void 0?null:t.is("$text")||t.is("documentFragment")?n:n.test(e)}consume(t,e){return!!this.test(t,e)&&(t.is("$text")||t.is("documentFragment")?this._consumables.set(t,!1):this._consumables.get(t).consume(e),!0)}revert(t,e){const n=this._consumables.get(t);n!==void 0&&(t.is("$text")||t.is("documentFragment")?this._consumables.set(t,!0):n.revert(e))}static consumablesFromElement(t){const e={element:t,name:!0,attributes:[],classes:[],styles:[]},n=t.getAttributeKeys();for(const s of n)s!="style"&&s!="class"&&e.attributes.push(s);const i=t.getClassNames();for(const s of i)e.classes.push(s);const r=t.getStyleNames();for(const s of r)e.styles.push(s);return e}static createFrom(t,e){if(e||(e=new Xo),t.is("$text"))return e.add(t),e;t.is("element")&&e.add(t,Xo.consumablesFromElement(t)),t.is("documentFragment")&&e.add(t);for(const n of t.getChildren())e=Xo.createFrom(n,e);return e}}const Yi=["attributes","classes","styles"];class NA{constructor(t){this.element=t,this._canConsumeName=null,this._consumables={attributes:new Map,styles:new Map,classes:new Map}}add(t){t.name&&(this._canConsumeName=!0);for(const e of Yi)e in t&&this._add(e,t[e])}test(t){if(t.name&&!this._canConsumeName)return this._canConsumeName;for(const e of Yi)if(e in t){const n=this._test(e,t[e]);if(n!==!0)return n}return!0}consume(t){t.name&&(this._canConsumeName=!1);for(const e of Yi)e in t&&this._consume(e,t[e])}revert(t){t.name&&(this._canConsumeName=!0);for(const e of Yi)e in t&&this._revert(e,t[e])}_add(t,e){const n=ee(e)?e:[e],i=this._consumables[t];for(const r of n){if(t==="attributes"&&(r==="class"||r==="style"))throw new _("viewconsumable-invalid-attribute",this);if(i.set(r,!0),t==="styles")for(const s of this.element.document.stylesProcessor.getRelatedStyles(r))i.set(s,!0)}}_test(t,e){const n=ee(e)?e:[e],i=this._consumables[t];for(const r of n)if(t!=="attributes"||r!=="class"&&r!=="style"){const s=i.get(r);if(s===void 0)return null;if(!s)return!1}else{const s=r=="class"?"classes":"styles",a=this._test(s,[...this._consumables[s].keys()]);if(a!==!0)return a}return!0}_consume(t,e){const n=ee(e)?e:[e],i=this._consumables[t];for(const r of n)if(t!=="attributes"||r!=="class"&&r!=="style"){if(i.set(r,!1),t=="styles")for(const s of this.element.document.stylesProcessor.getRelatedStyles(r))i.set(s,!1)}else{const s=r=="class"?"classes":"styles";this._consume(s,[...this._consumables[s].keys()])}}_revert(t,e){const n=ee(e)?e:[e],i=this._consumables[t];for(const r of n)if(t!=="attributes"||r!=="class"&&r!=="style")i.get(r)===!1&&i.set(r,!0);else{const s=r=="class"?"classes":"styles";this._revert(s,[...this._consumables[s].keys()])}}}class PA extends mt(){constructor(){super(),this._sourceDefinitions={},this._attributeProperties={},this.decorate("checkChild"),this.decorate("checkAttribute"),this.on("checkAttribute",(t,e)=>{e[0]=new Vn(e[0])},{priority:"highest"}),this.on("checkChild",(t,e)=>{e[0]=new Vn(e[0]),e[1]=this.getDefinition(e[1])},{priority:"highest"})}register(t,e){if(this._sourceDefinitions[t])throw new _("schema-cannot-register-item-twice",this,{itemName:t});this._sourceDefinitions[t]=[Object.assign({},e)],this._clearCache()}extend(t,e){if(!this._sourceDefinitions[t])throw new _("schema-cannot-extend-missing-item",this,{itemName:t});this._sourceDefinitions[t].push(Object.assign({},e)),this._clearCache()}getDefinitions(){return this._compiledDefinitions||this._compile(),this._compiledDefinitions}getDefinition(t){let e;return e=typeof t=="string"?t:"is"in t&&(t.is("$text")||t.is("$textProxy"))?"$text":t.name,this.getDefinitions()[e]}isRegistered(t){return!!this.getDefinition(t)}isBlock(t){const e=this.getDefinition(t);return!(!e||!e.isBlock)}isLimit(t){const e=this.getDefinition(t);return!!e&&!(!e.isLimit&&!e.isObject)}isObject(t){const e=this.getDefinition(t);return!!e&&!!(e.isObject||e.isLimit&&e.isSelectable&&e.isContent)}isInline(t){const e=this.getDefinition(t);return!(!e||!e.isInline)}isSelectable(t){const e=this.getDefinition(t);return!!e&&!(!e.isSelectable&&!e.isObject)}isContent(t){const e=this.getDefinition(t);return!!e&&!(!e.isContent&&!e.isObject)}checkChild(t,e){return!!e&&this._checkContextMatch(e,t)}checkAttribute(t,e){const n=this.getDefinition(t.last);return!!n&&n.allowAttributes.includes(e)}checkMerge(t,e){if(t instanceof O){const n=t.nodeBefore,i=t.nodeAfter;if(!(n instanceof Ct))throw new _("schema-check-merge-no-element-before",this);if(!(i instanceof Ct))throw new _("schema-check-merge-no-element-after",this);return this.checkMerge(n,i)}for(const n of e.getChildren())if(!this.checkChild(t,n))return!1;return!0}addChildCheck(t){this.on("checkChild",(e,[n,i])=>{if(!i)return;const r=t(n,i);typeof r=="boolean"&&(e.stop(),e.return=r)},{priority:"high"})}addAttributeCheck(t){this.on("checkAttribute",(e,[n,i])=>{const r=t(n,i);typeof r=="boolean"&&(e.stop(),e.return=r)},{priority:"high"})}setAttributeProperties(t,e){this._attributeProperties[t]=Object.assign(this.getAttributeProperties(t),e)}getAttributeProperties(t){return this._attributeProperties[t]||{}}getLimitElement(t){let e;for(t instanceof O?e=t.parent:e=(t instanceof B?[t]:Array.from(t.getRanges())).reduce((n,i)=>{const r=i.getCommonAncestor();return n?n.getCommonAncestor(r,{includeSelf:!0}):r},null);!this.isLimit(e)&&e.parent;)e=e.parent;return e}checkAttributeInSelection(t,e){if(t.isCollapsed){const n=[...t.getFirstPosition().getAncestors(),new yt("",t.getAttributes())];return this.checkAttribute(n,e)}{const n=t.getRanges();for(const i of n)for(const r of i)if(this.checkAttribute(r.item,e))return!0}return!1}*getValidRanges(t,e){t=function*(n){for(const i of n)yield*i.getMinimalFlatRanges()}(t);for(const n of t)yield*this._getValidRangesForRange(n,e)}getNearestSelectionRange(t,e="both"){if(t.root.rootName=="$graveyard")return null;if(this.checkChild(t,"$text"))return new B(t);let n,i;const r=t.getAncestors().reverse().find(s=>this.isLimit(s))||t.root;e!="both"&&e!="backward"||(n=new tn({boundaries:B._createIn(r),startPosition:t,direction:"backward"})),e!="both"&&e!="forward"||(i=new tn({boundaries:B._createIn(r),startPosition:t}));for(const s of function*(a,c){let l=!1;for(;!l;){if(l=!0,a){const d=a.next();d.done||(l=!1,yield{walker:a,value:d.value})}if(c){const d=c.next();d.done||(l=!1,yield{walker:c,value:d.value})}}}(n,i)){const a=s.walker==n?"elementEnd":"elementStart",c=s.value;if(c.type==a&&this.isObject(c.item))return B._createOn(c.item);if(this.checkChild(c.nextPosition,"$text"))return new B(c.nextPosition)}return null}findAllowedParent(t,e){let n=t.parent;for(;n;){if(this.checkChild(n,e))return n;if(this.isLimit(n))return null;n=n.parent}return null}setAllowedAttributes(t,e,n){const i=n.model;for(const[r,s]of Object.entries(e))i.schema.checkAttribute(t,r)&&n.setAttribute(r,s,t)}removeDisallowedAttributes(t,e){for(const n of t)if(n.is("$text"))rh(this,n,e);else{const i=B._createIn(n).getPositions();for(const r of i)rh(this,r.nodeBefore||r.parent,e)}}getAttributesWithProperty(t,e,n){const i={};for(const[r,s]of t.getAttributes()){const a=this.getAttributeProperties(r);a[e]!==void 0&&(n!==void 0&&n!==a[e]||(i[r]=s))}return i}createContext(t){return new Vn(t)}_clearCache(){this._compiledDefinitions=null}_compile(){const t={},e=this._sourceDefinitions,n=Object.keys(e);for(const i of n)t[i]=LA(e[i],i);for(const i of n)OA(t,i);for(const i of n)zA(t,i);for(const i of n)RA(t,i);for(const i of n)jA(t,i),FA(t,i);for(const i of n)VA(t,i),HA(t,i),UA(t,i);this._compiledDefinitions=t}_checkContextMatch(t,e,n=e.length-1){const i=e.getItem(n);if(t.allowIn.includes(i.name)){if(n==0)return!0;{const r=this.getDefinition(i);return this._checkContextMatch(r,e,n-1)}}return!1}*_getValidRangesForRange(t,e){let n=t.start,i=t.start;for(const r of t.getItems({shallow:!0}))r.is("element")&&(yield*this._getValidRangesForRange(B._createIn(r),e)),this.checkAttribute(r,e)||(n.isEqual(i)||(yield new B(n,i)),n=O._createAfter(r)),i=O._createAfter(r);n.isEqual(i)||(yield new B(n,i))}findOptimalInsertionRange(t,e){const n=t.getSelectedElement();if(n&&this.isObject(n)&&!this.isInline(n))return e=="before"||e=="after"?new B(O._createAt(n,e)):B._createOn(n);const i=Wt(t.getSelectedBlocks());if(!i)return new B(t.focus);if(i.isEmpty)return new B(O._createAt(i,0));const r=O._createAfter(i);return t.focus.isTouching(r)?new B(r):new B(O._createBefore(i))}}class Vn{constructor(t){if(t instanceof Vn)return t;let e;e=typeof t=="string"?[t]:Array.isArray(t)?t:t.getAncestors({includeSelf:!0}),this._items=e.map(GA)}get length(){return this._items.length}get last(){return this._items[this._items.length-1]}[Symbol.iterator](){return this._items[Symbol.iterator]()}push(t){const e=new Vn([t]);return e._items=[...this._items,...e._items],e}getItem(t){return this._items[t]}*getNames(){yield*this._items.map(t=>t.name)}endsWith(t){return Array.from(this.getNames()).join(" ").endsWith(t)}startsWith(t){return Array.from(this.getNames()).join(" ").startsWith(t)}}function LA(o,t){const e={name:t,allowIn:[],allowContentOf:[],allowWhere:[],allowAttributes:[],allowAttributesOf:[],allowChildren:[],inheritTypesFrom:[]};return function(n,i){for(const r of n){const s=Object.keys(r).filter(a=>a.startsWith("is"));for(const a of s)i[a]=!!r[a]}}(o,e),Hn(o,e,"allowIn"),Hn(o,e,"allowContentOf"),Hn(o,e,"allowWhere"),Hn(o,e,"allowAttributes"),Hn(o,e,"allowAttributesOf"),Hn(o,e,"allowChildren"),Hn(o,e,"inheritTypesFrom"),function(n,i){for(const r of n){const s=r.inheritAllFrom;s&&(i.allowContentOf.push(s),i.allowWhere.push(s),i.allowAttributesOf.push(s),i.inheritTypesFrom.push(s))}}(o,e),e}function OA(o,t){const e=o[t];for(const n of e.allowChildren){const i=o[n];i&&i.allowIn.push(t)}e.allowChildren.length=0}function zA(o,t){for(const e of o[t].allowContentOf)o[e]&&qA(o,e).forEach(n=>{n.allowIn.push(t)});delete o[t].allowContentOf}function RA(o,t){for(const e of o[t].allowWhere){const n=o[e];if(n){const i=n.allowIn;o[t].allowIn.push(...i)}}delete o[t].allowWhere}function jA(o,t){for(const e of o[t].allowAttributesOf){const n=o[e];if(n){const i=n.allowAttributes;o[t].allowAttributes.push(...i)}}delete o[t].allowAttributesOf}function FA(o,t){const e=o[t];for(const n of e.inheritTypesFrom){const i=o[n];if(i){const r=Object.keys(i).filter(s=>s.startsWith("is"));for(const s of r)s in e||(e[s]=i[s])}}delete e.inheritTypesFrom}function VA(o,t){const e=o[t],n=e.allowIn.filter(i=>o[i]);e.allowIn=Array.from(new Set(n))}function HA(o,t){const e=o[t];for(const n of e.allowIn)o[n].allowChildren.push(t)}function UA(o,t){const e=o[t];e.allowAttributes=Array.from(new Set(e.allowAttributes))}function Hn(o,t,e){for(const n of o){const i=n[e];typeof i=="string"?t[e].push(i):Array.isArray(i)&&t[e].push(...i)}}function qA(o,t){const e=o[t];return(n=o,Object.keys(n).map(i=>n[i])).filter(i=>i.allowIn.includes(e.name));var n}function GA(o){return typeof o=="string"||o.is("documentFragment")?{name:typeof o=="string"?o:"$documentFragment",*getAttributeKeys(){},getAttribute(){}}:{name:o.is("element")?o.name:"$text",*getAttributeKeys(){yield*o.getAttributeKeys()},getAttribute:t=>o.getAttribute(t)}}function rh(o,t,e){for(const n of t.getAttributeKeys())o.checkAttribute(t,n)||e.removeAttribute(n,t)}var WA=Object.defineProperty,$A=Object.defineProperties,KA=Object.getOwnPropertyDescriptors,sh=Object.getOwnPropertySymbols,YA=Object.prototype.hasOwnProperty,QA=Object.prototype.propertyIsEnumerable,ah=(o,t,e)=>t in o?WA(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;class ZA extends kt(){constructor(t){var e;super(),this._splitParts=new Map,this._cursorParents=new Map,this._modelCursor=null,this._emptyElementsToKeep=new Set,this.conversionApi=(e=((n,i)=>{for(var r in i||(i={}))YA.call(i,r)&&ah(n,r,i[r]);if(sh)for(var r of sh(i))QA.call(i,r)&&ah(n,r,i[r]);return n})({},t),$A(e,KA({consumable:null,writer:null,store:null,convertItem:(n,i)=>this._convertItem(n,i),convertChildren:(n,i)=>this._convertChildren(n,i),safeInsert:(n,i)=>this._safeInsert(n,i),updateConversionResult:(n,i)=>this._updateConversionResult(n,i),splitToAllowedParent:(n,i)=>this._splitToAllowedParent(n,i),getSplitParts:n=>this._getSplitParts(n),keepEmptyElement:n=>this._keepEmptyElement(n)})))}convert(t,e,n=["$root"]){this.fire("viewCleanup",t),this._modelCursor=function(s,a){let c;for(const l of new Vn(s)){const d={};for(const u of l.getAttributeKeys())d[u]=l.getAttribute(u);const h=a.createElement(l.name,d);c&&a.insert(h,c),c=O._createAt(h,0)}return c}(n,e),this.conversionApi.writer=e,this.conversionApi.consumable=Xo.createFrom(t),this.conversionApi.store={};const{modelRange:i}=this._convertItem(t,this._modelCursor),r=e.createDocumentFragment();if(i){this._removeEmptyElements();for(const s of Array.from(this._modelCursor.parent.getChildren()))e.append(s,r);r.markers=function(s,a){const c=new Set,l=new Map,d=B._createIn(s).getItems();for(const h of d)h.is("element","$marker")&&c.add(h);for(const h of c){const u=h.getAttribute("data-name"),g=a.createPositionBefore(h);l.has(u)?l.get(u).end=g.clone():l.set(u,new B(g.clone())),a.remove(h)}return l}(r,e)}return this._modelCursor=null,this._splitParts.clear(),this._cursorParents.clear(),this._emptyElementsToKeep.clear(),this.conversionApi.writer=null,this.conversionApi.store=null,r}_convertItem(t,e){const n={viewItem:t,modelCursor:e,modelRange:null};if(t.is("element")?this.fire(`element:${t.name}`,n,this.conversionApi):t.is("$text")?this.fire("text",n,this.conversionApi):this.fire("documentFragment",n,this.conversionApi),n.modelRange&&!(n.modelRange instanceof B))throw new _("view-conversion-dispatcher-incorrect-result",this);return{modelRange:n.modelRange,modelCursor:n.modelCursor}}_convertChildren(t,e){let n=e.is("position")?e:O._createAt(e,0);const i=new B(n);for(const r of Array.from(t.getChildren())){const s=this._convertItem(r,n);s.modelRange instanceof B&&(i.end=s.modelRange.end,n=s.modelCursor)}return{modelRange:i,modelCursor:n}}_safeInsert(t,e){const n=this._splitToAllowedParent(t,e);return!!n&&(this.conversionApi.writer.insert(t,n.position),!0)}_updateConversionResult(t,e){const n=this._getSplitParts(t),i=this.conversionApi.writer;e.modelRange||(e.modelRange=i.createRange(i.createPositionBefore(t),i.createPositionAfter(n[n.length-1])));const r=this._cursorParents.get(t);e.modelCursor=r?i.createPositionAt(r,0):e.modelRange.end}_splitToAllowedParent(t,e){const{schema:n,writer:i}=this.conversionApi;let r=n.findAllowedParent(e,t);if(r){if(r===e.parent)return{position:e};this._modelCursor.parent.getAncestors().includes(r)&&(r=null)}if(!r)return Kd(e,t,n)?{position:Yd(e,i)}:null;const s=this.conversionApi.writer.split(e,r),a=[];for(const l of s.range.getWalker())if(l.type=="elementEnd")a.push(l.item);else{const d=a.pop(),h=l.item;this._registerSplitPair(d,h)}const c=s.range.end.parent;return this._cursorParents.set(t,c),{position:s.position,cursorParent:c}}_registerSplitPair(t,e){this._splitParts.has(t)||this._splitParts.set(t,[t]);const n=this._splitParts.get(t);this._splitParts.set(e,n),n.push(e)}_getSplitParts(t){let e;return e=this._splitParts.has(t)?this._splitParts.get(t):[t],e}_keepEmptyElement(t){this._emptyElementsToKeep.add(t)}_removeEmptyElements(){let t=!1;for(const e of this._splitParts.keys())e.isEmpty&&!this._emptyElementsToKeep.has(e)&&(this.conversionApi.writer.remove(e),this._splitParts.delete(e),t=!0);t&&this._removeEmptyElements()}}class JA{getHtml(t){const e=$.document.implementation.createHTMLDocument("").createElement("div");return e.appendChild(t),e.innerHTML}}class XA{constructor(t){this.skipComments=!0,this.domParser=new DOMParser,this.domConverter=new Ui(t,{renderingMode:"data"}),this.htmlWriter=new JA}toData(t){const e=this.domConverter.viewToDom(t);return this.htmlWriter.getHtml(e)}toView(t){const e=this._toDom(t);return this.domConverter.domToView(e,{skipComments:this.skipComments})}registerRawContentMatcher(t){this.domConverter.registerRawContentMatcher(t)}useFillerType(t){this.domConverter.blockFillerMode=t=="marked"?"markedNbsp":"nbsp"}_toDom(t){t.match(/<(?:html|body|head|meta)(?:\s[^>]*)?>/i)||(t=`${t}`);const e=this.domParser.parseFromString(t,"text/html"),n=e.createDocumentFragment(),i=e.body.childNodes;for(;i.length>0;)n.appendChild(i[0]);return n}}class tC extends kt(){constructor(t,e){super(),this.model=t,this.mapper=new Td,this.downcastDispatcher=new Pd({mapper:this.mapper,schema:t.schema}),this.downcastDispatcher.on("insert:$text",(n,i,r)=>{if(!r.consumable.consume(i.item,n.name))return;const s=r.writer,a=r.mapper.toViewPosition(i.range.start),c=s.createText(i.item.data);s.insert(a,c)},{priority:"lowest"}),this.downcastDispatcher.on("insert",(n,i,r)=>{r.convertAttributes(i.item),i.reconversion||!i.item.is("element")||i.item.isEmpty||r.convertChildren(i.item)},{priority:"lowest"}),this.upcastDispatcher=new ZA({schema:t.schema}),this.viewDocument=new Fi(e),this.stylesProcessor=e,this.htmlProcessor=new XA(this.viewDocument),this.processor=this.htmlProcessor,this._viewWriter=new ed(this.viewDocument),this.upcastDispatcher.on("text",(n,i,{schema:r,consumable:s,writer:a})=>{let c=i.modelCursor;if(!s.test(i.viewItem))return;if(!r.checkChild(c,"$text")){if(!Kd(c,"$text",r)||i.viewItem.data.trim().length==0)return;const d=c.nodeBefore;c=Yd(c,a),d&&d.is("element","$marker")&&(a.move(a.createRangeOn(d),c),c=a.createPositionAfter(d))}s.consume(i.viewItem);const l=a.createText(i.viewItem.data);a.insert(l,c),i.modelRange=a.createRange(c,c.getShiftedBy(l.offsetSize)),i.modelCursor=i.modelRange.end},{priority:"lowest"}),this.upcastDispatcher.on("element",(n,i,r)=>{if(!i.modelRange&&r.consumable.consume(i.viewItem,{name:!0})){const{modelRange:s,modelCursor:a}=r.convertChildren(i.viewItem,i.modelCursor);i.modelRange=s,i.modelCursor=a}},{priority:"lowest"}),this.upcastDispatcher.on("documentFragment",(n,i,r)=>{if(!i.modelRange&&r.consumable.consume(i.viewItem,{name:!0})){const{modelRange:s,modelCursor:a}=r.convertChildren(i.viewItem,i.modelCursor);i.modelRange=s,i.modelCursor=a}},{priority:"lowest"}),mt().prototype.decorate.call(this,"init"),mt().prototype.decorate.call(this,"set"),mt().prototype.decorate.call(this,"get"),mt().prototype.decorate.call(this,"toView"),mt().prototype.decorate.call(this,"toModel"),this.on("init",()=>{this.fire("ready")},{priority:"lowest"}),this.on("ready",()=>{this.model.enqueueChange({isUndoable:!1},$d)},{priority:"lowest"})}get(t={}){const{rootName:e="main",trim:n="empty"}=t;if(!this._checkIfRootsExists([e]))throw new _("datacontroller-get-non-existent-root",this);const i=this.model.document.getRoot(e);return i.isAttached()||Q("datacontroller-get-detached-root",this),n!=="empty"||this.model.hasContent(i,{ignoreWhitespaces:!0})?this.stringify(i,t):""}stringify(t,e={}){const n=this.toView(t,e);return this.processor.toData(n)}toView(t,e={}){const n=this.viewDocument,i=this._viewWriter;this.mapper.clearBindings();const r=B._createIn(t),s=new Rn(n);this.mapper.bindElements(t,s);const a=t.is("documentFragment")?t.markers:function(c){const l=[],d=c.root.document;if(!d)return new Map;const h=B._createIn(c);for(const u of d.model.markers){const g=u.getRange(),p=g.isCollapsed,k=g.start.isEqual(h.start)||g.end.isEqual(h.end);if(p&&k)l.push([u.name,g]);else{const b=h.getIntersection(g);b&&l.push([u.name,b])}}return l.sort(([u,g],[p,k])=>{if(g.end.compareWith(k.start)!=="after")return 1;if(g.start.compareWith(k.end)!=="before")return-1;switch(g.start.compareWith(k.start)){case"before":return 1;case"after":return-1;default:switch(g.end.compareWith(k.end)){case"before":return 1;case"after":return-1;default:return p.localeCompare(u)}}}),new Map(l)}(t);return this.downcastDispatcher.convert(r,a,i,e),s}init(t){if(this.model.document.version)throw new _("datacontroller-init-document-not-empty",this);let e={};if(typeof t=="string"?e.main=t:e=t,!this._checkIfRootsExists(Object.keys(e)))throw new _("datacontroller-init-non-existent-root",this);return this.model.enqueueChange({isUndoable:!1},n=>{for(const i of Object.keys(e)){const r=this.model.document.getRoot(i);n.insert(this.parse(e[i],r),r,0)}}),Promise.resolve()}set(t,e={}){let n={};if(typeof t=="string"?n.main=t:n=t,!this._checkIfRootsExists(Object.keys(n)))throw new _("datacontroller-set-non-existent-root",this);this.model.enqueueChange(e.batchType||{},i=>{i.setSelection(null),i.removeSelectionAttribute(this.model.document.selection.getAttributeKeys());for(const r of Object.keys(n)){const s=this.model.document.getRoot(r);i.remove(i.createRangeIn(s)),i.insert(this.parse(n[r],s),s,0)}})}parse(t,e="$root"){const n=this.processor.toView(t);return this.toModel(n,e)}toModel(t,e="$root"){return this.model.change(n=>this.upcastDispatcher.convert(t,n,e))}addStyleProcessorRules(t){t(this.stylesProcessor)}registerRawContentMatcher(t){this.processor&&this.processor!==this.htmlProcessor&&this.processor.registerRawContentMatcher(t),this.htmlProcessor.registerRawContentMatcher(t)}destroy(){this.stopListening()}_checkIfRootsExists(t){for(const e of t)if(!this.model.document.getRoot(e))return!1;return!0}}class eC{constructor(t,e){this._helpers=new Map,this._downcast=Bt(t),this._createConversionHelpers({name:"downcast",dispatchers:this._downcast,isDowncast:!0}),this._upcast=Bt(e),this._createConversionHelpers({name:"upcast",dispatchers:this._upcast,isDowncast:!1})}addAlias(t,e){const n=this._downcast.includes(e);if(!this._upcast.includes(e)&&!n)throw new _("conversion-add-alias-dispatcher-not-registered",this);this._createConversionHelpers({name:t,dispatchers:[e],isDowncast:n})}for(t){if(!this._helpers.has(t))throw new _("conversion-for-unknown-group",this);return this._helpers.get(t)}elementToElement(t){this.for("downcast").elementToElement(t);for(const{model:e,view:n}of Fs(t))this.for("upcast").elementToElement({model:e,view:n,converterPriority:t.converterPriority})}attributeToElement(t){this.for("downcast").attributeToElement(t);for(const{model:e,view:n}of Fs(t))this.for("upcast").elementToAttribute({view:n,model:e,converterPriority:t.converterPriority})}attributeToAttribute(t){this.for("downcast").attributeToAttribute(t);for(const{model:e,view:n}of Fs(t))this.for("upcast").attributeToAttribute({view:n,model:e})}_createConversionHelpers({name:t,dispatchers:e,isDowncast:n}){if(this._helpers.has(t))throw new _("conversion-group-exists",this);const i=n?new _A(e):new TA(e);this._helpers.set(t,i)}}function*Fs(o){if(o.model.values)for(const t of o.model.values){const e={key:o.model.key,value:t},n=o.view[t],i=o.upcastAlso?o.upcastAlso[t]:void 0;yield*ch(e,n,i)}else yield*ch(o.model,o.view,o.upcastAlso)}function*ch(o,t,e){if(yield{model:o,view:t},e)for(const n of Bt(e))yield{model:o,view:n}}class me{constructor(t){this.baseVersion=t,this.isDocumentOperation=this.baseVersion!==null,this.batch=null}_validate(){}toJSON(){const t=Object.assign({},this);return t.__className=this.constructor.className,delete t.batch,delete t.isDocumentOperation,t}static get className(){return"Operation"}static fromJSON(t,e){return new this(t.baseVersion)}}function Vs(o,t){const e=dh(t),n=e.reduce((s,a)=>s+a.offsetSize,0),i=o.parent;ni(o);const r=o.index;return i._insertChild(r,e),ei(i,r+e.length),ei(i,r),new B(o,o.getShiftedBy(n))}function lh(o){if(!o.isFlat)throw new _("operation-utils-remove-range-not-flat",this);const t=o.start.parent;ni(o.start),ni(o.end);const e=t._removeChildren(o.start.index,o.end.index-o.start.index);return ei(t,o.start.index),e}function ti(o,t){if(!o.isFlat)throw new _("operation-utils-move-range-not-flat",this);const e=lh(o);return Vs(t=t._getTransformedByDeletion(o.start,o.end.offset-o.start.offset),e)}function dh(o){const t=[];(function e(n){if(typeof n=="string")t.push(new yt(n));else if(n instanceof Oe)t.push(new yt(n.data,n.getAttributes()));else if(n instanceof jn)t.push(n);else if(Gt(n))for(const i of n)e(i)})(o);for(let e=1;et.maxOffset)throw new _("move-operation-nodes-do-not-exist",this);if(t===e&&n=n&&this.targetPosition.path[r]n._clone(!0))),e=new $t(this.position,t,this.baseVersion);return e.shouldReceiveAttributes=this.shouldReceiveAttributes,e}getReversed(){const t=this.position.root.document.graveyard,e=new O(t,[0]);return new ft(this.position,this.nodes.maxOffset,e,this.baseVersion+1)}_validate(){const t=this.position.parent;if(!t||t.maxOffsete._clone(!0))),Vs(this.position,t)}toJSON(){const t=super.toJSON();return t.position=this.position.toJSON(),t.nodes=this.nodes.toJSON(),t}static get className(){return"InsertOperation"}static fromJSON(t,e){const n=[];for(const r of t.nodes)r.name?n.push(Ct.fromJSON(r)):n.push(yt.fromJSON(r));const i=new $t(O.fromJSON(t.position,e),n,t.baseVersion);return i.shouldReceiveAttributes=t.shouldReceiveAttributes,i}}class xt extends me{constructor(t,e,n,i,r){super(r),this.splitPosition=t.clone(),this.splitPosition.stickiness="toNext",this.howMany=e,this.insertionPosition=n,this.graveyardPosition=i?i.clone():null,this.graveyardPosition&&(this.graveyardPosition.stickiness="toNext")}get type(){return"split"}get moveTargetPosition(){const t=this.insertionPosition.path.slice();return t.push(0),new O(this.insertionPosition.root,t)}get movedRange(){const t=this.splitPosition.getShiftedBy(Number.POSITIVE_INFINITY);return new B(this.splitPosition,t)}get affectedSelectable(){const t=[B._createFromPositionAndShift(this.splitPosition,0),B._createFromPositionAndShift(this.insertionPosition,0)];return this.graveyardPosition&&t.push(B._createFromPositionAndShift(this.graveyardPosition,0)),t}clone(){return new xt(this.splitPosition,this.howMany,this.insertionPosition,this.graveyardPosition,this.baseVersion)}getReversed(){const t=this.splitPosition.root.document.graveyard,e=new O(t,[0]);return new Nt(this.moveTargetPosition,this.howMany,this.splitPosition,e,this.baseVersion+1)}_validate(){const t=this.splitPosition.parent,e=this.splitPosition.offset;if(!t||t.maxOffset{if(o.key===t.key&&o.range.start.hasSameParentAs(t.range.start)){const n=o.range.getDifference(t.range).map(r=>new jt(r,o.key,o.oldValue,o.newValue,0)),i=o.range.getIntersection(t.range);return i&&e.aIsStrong&&n.push(new jt(i,t.key,t.newValue,o.newValue,0)),n.length==0?[new Ht(0)]:n}return[o]}),gt(jt,$t,(o,t)=>{if(o.range.start.hasSameParentAs(t.position)&&o.range.containsPosition(t.position)){const e=o.range._getTransformedByInsertion(t.position,t.howMany,!t.shouldReceiveAttributes).map(n=>new jt(n,o.key,o.oldValue,o.newValue,o.baseVersion));if(t.shouldReceiveAttributes){const n=fh(t,o.key,o.oldValue);n&&e.unshift(n)}return e}return o.range=o.range._getTransformedByInsertion(t.position,t.howMany,!1)[0],[o]}),gt(jt,Nt,(o,t)=>{const e=[];o.range.start.hasSameParentAs(t.deletionPosition)&&(o.range.containsPosition(t.deletionPosition)||o.range.start.isEqual(t.deletionPosition))&&e.push(B._createFromPositionAndShift(t.graveyardPosition,1));const n=o.range._getTransformedByMergeOperation(t);return n.isCollapsed||e.push(n),e.map(i=>new jt(i,o.key,o.oldValue,o.newValue,o.baseVersion))}),gt(jt,ft,(o,t)=>function(n,i){const r=B._createFromPositionAndShift(i.sourcePosition,i.howMany);let s=null,a=[];r.containsRange(n,!0)?s=n:n.start.hasSameParentAs(r.start)?(a=n.getDifference(r),s=n.getIntersection(r)):a=[n];const c=[];for(let l of a){l=l._getTransformedByDeletion(i.sourcePosition,i.howMany);const d=i.getMovedRangeStart(),h=l.start.hasSameParentAs(d),u=l._getTransformedByInsertion(d,i.howMany,h);c.push(...u)}return s&&c.push(s._getTransformedByMove(i.sourcePosition,i.targetPosition,i.howMany,!1)[0]),c}(o.range,t).map(n=>new jt(n,o.key,o.oldValue,o.newValue,o.baseVersion))),gt(jt,xt,(o,t)=>{if(o.range.end.isEqual(t.insertionPosition))return t.graveyardPosition||o.range.end.offset++,[o];if(o.range.start.hasSameParentAs(t.splitPosition)&&o.range.containsPosition(t.splitPosition)){const e=o.clone();return e.range=new B(t.moveTargetPosition.clone(),o.range.end._getCombined(t.splitPosition,t.moveTargetPosition)),o.range.end=t.splitPosition.clone(),o.range.end.stickiness="toPrevious",[o,e]}return o.range=o.range._getTransformedBySplitOperation(t),[o]}),gt($t,jt,(o,t)=>{const e=[o];if(o.shouldReceiveAttributes&&o.position.hasSameParentAs(t.range.start)&&t.range.containsPosition(o.position)){const n=fh(o,t.key,t.newValue);n&&e.push(n)}return e}),gt($t,$t,(o,t,e)=>(o.position.isEqual(t.position)&&e.aIsStrong||(o.position=o.position._getTransformedByInsertOperation(t)),[o])),gt($t,ft,(o,t)=>(o.position=o.position._getTransformedByMoveOperation(t),[o])),gt($t,xt,(o,t)=>(o.position=o.position._getTransformedBySplitOperation(t),[o])),gt($t,Nt,(o,t)=>(o.position=o.position._getTransformedByMergeOperation(t),[o])),gt(re,$t,(o,t)=>(o.oldRange&&(o.oldRange=o.oldRange._getTransformedByInsertOperation(t)[0]),o.newRange&&(o.newRange=o.newRange._getTransformedByInsertOperation(t)[0]),[o])),gt(re,re,(o,t,e)=>{if(o.name==t.name){if(!e.aIsStrong)return[new Ht(0)];o.oldRange=t.newRange?t.newRange.clone():null}return[o]}),gt(re,Nt,(o,t)=>(o.oldRange&&(o.oldRange=o.oldRange._getTransformedByMergeOperation(t)),o.newRange&&(o.newRange=o.newRange._getTransformedByMergeOperation(t)),[o])),gt(re,ft,(o,t,e)=>{if(o.oldRange&&(o.oldRange=B._createFromRanges(o.oldRange._getTransformedByMoveOperation(t))),o.newRange){if(e.abRelation){const n=B._createFromRanges(o.newRange._getTransformedByMoveOperation(t));if(e.abRelation.side=="left"&&t.targetPosition.isEqual(o.newRange.start))return o.newRange.end=n.end,o.newRange.start.path=e.abRelation.path,[o];if(e.abRelation.side=="right"&&t.targetPosition.isEqual(o.newRange.end))return o.newRange.start=n.start,o.newRange.end.path=e.abRelation.path,[o]}o.newRange=B._createFromRanges(o.newRange._getTransformedByMoveOperation(t))}return[o]}),gt(re,xt,(o,t,e)=>{if(o.oldRange&&(o.oldRange=o.oldRange._getTransformedBySplitOperation(t)),o.newRange){if(e.abRelation){const n=o.newRange._getTransformedBySplitOperation(t);return o.newRange.start.isEqual(t.splitPosition)&&e.abRelation.wasStartBeforeMergedElement?o.newRange.start=O._createAt(t.insertionPosition):o.newRange.start.isEqual(t.splitPosition)&&!e.abRelation.wasInLeftElement&&(o.newRange.start=O._createAt(t.moveTargetPosition)),o.newRange.end.isEqual(t.splitPosition)&&e.abRelation.wasInRightElement?o.newRange.end=O._createAt(t.moveTargetPosition):o.newRange.end.isEqual(t.splitPosition)&&e.abRelation.wasEndBeforeMergedElement?o.newRange.end=O._createAt(t.insertionPosition):o.newRange.end=n.end,[o]}o.newRange=o.newRange._getTransformedBySplitOperation(t)}return[o]}),gt(Nt,$t,(o,t)=>(o.sourcePosition.hasSameParentAs(t.position)&&(o.howMany+=t.howMany),o.sourcePosition=o.sourcePosition._getTransformedByInsertOperation(t),o.targetPosition=o.targetPosition._getTransformedByInsertOperation(t),[o])),gt(Nt,Nt,(o,t,e)=>{if(o.sourcePosition.isEqual(t.sourcePosition)&&o.targetPosition.isEqual(t.targetPosition)){if(e.bWasUndone){const n=t.graveyardPosition.path.slice();return n.push(0),o.sourcePosition=new O(t.graveyardPosition.root,n),o.howMany=0,[o]}return[new Ht(0)]}if(o.sourcePosition.isEqual(t.sourcePosition)&&!o.targetPosition.isEqual(t.targetPosition)&&!e.bWasUndone&&e.abRelation!="splitAtSource"){const n=o.targetPosition.root.rootName=="$graveyard",i=t.targetPosition.root.rootName=="$graveyard";if(i&&!n||!(n&&!i)&&e.aIsStrong){const r=t.targetPosition._getTransformedByMergeOperation(t),s=o.targetPosition._getTransformedByMergeOperation(t);return[new ft(r,o.howMany,s,0)]}return[new Ht(0)]}return o.sourcePosition.hasSameParentAs(t.targetPosition)&&(o.howMany+=t.howMany),o.sourcePosition=o.sourcePosition._getTransformedByMergeOperation(t),o.targetPosition=o.targetPosition._getTransformedByMergeOperation(t),o.graveyardPosition.isEqual(t.graveyardPosition)&&e.aIsStrong||(o.graveyardPosition=o.graveyardPosition._getTransformedByMergeOperation(t)),[o]}),gt(Nt,ft,(o,t,e)=>{const n=B._createFromPositionAndShift(t.sourcePosition,t.howMany);return t.type=="remove"&&!e.bWasUndone&&!e.forceWeakRemove&&o.deletionPosition.hasSameParentAs(t.sourcePosition)&&n.containsPosition(o.sourcePosition)?[new Ht(0)]:(o.sourcePosition.hasSameParentAs(t.targetPosition)&&(o.howMany+=t.howMany),o.sourcePosition.hasSameParentAs(t.sourcePosition)&&(o.howMany-=t.howMany),o.sourcePosition=o.sourcePosition._getTransformedByMoveOperation(t),o.targetPosition=o.targetPosition._getTransformedByMoveOperation(t),o.graveyardPosition.isEqual(t.targetPosition)||(o.graveyardPosition=o.graveyardPosition._getTransformedByMoveOperation(t)),[o])}),gt(Nt,xt,(o,t,e)=>{if(t.graveyardPosition&&(o.graveyardPosition=o.graveyardPosition._getTransformedByDeletion(t.graveyardPosition,1),o.deletionPosition.isEqual(t.graveyardPosition)&&(o.howMany=t.howMany)),o.targetPosition.isEqual(t.splitPosition)){const n=t.howMany!=0,i=t.graveyardPosition&&o.deletionPosition.isEqual(t.graveyardPosition);if(n||i||e.abRelation=="mergeTargetNotMoved")return o.sourcePosition=o.sourcePosition._getTransformedBySplitOperation(t),[o]}if(o.sourcePosition.isEqual(t.splitPosition)){if(e.abRelation=="mergeSourceNotMoved")return o.howMany=0,o.targetPosition=o.targetPosition._getTransformedBySplitOperation(t),[o];if(e.abRelation=="mergeSameElement"||o.sourcePosition.offset>0)return o.sourcePosition=t.moveTargetPosition.clone(),o.targetPosition=o.targetPosition._getTransformedBySplitOperation(t),[o]}return o.sourcePosition.hasSameParentAs(t.splitPosition)&&(o.howMany=t.splitPosition.offset),o.sourcePosition=o.sourcePosition._getTransformedBySplitOperation(t),o.targetPosition=o.targetPosition._getTransformedBySplitOperation(t),[o]}),gt(ft,$t,(o,t)=>{const e=B._createFromPositionAndShift(o.sourcePosition,o.howMany)._getTransformedByInsertOperation(t,!1)[0];return o.sourcePosition=e.start,o.howMany=e.end.offset-e.start.offset,o.targetPosition.isEqual(t.position)||(o.targetPosition=o.targetPosition._getTransformedByInsertOperation(t)),[o]}),gt(ft,ft,(o,t,e)=>{const n=B._createFromPositionAndShift(o.sourcePosition,o.howMany),i=B._createFromPositionAndShift(t.sourcePosition,t.howMany);let r,s=e.aIsStrong,a=!e.aIsStrong;if(e.abRelation=="insertBefore"||e.baRelation=="insertAfter"?a=!0:e.abRelation!="insertAfter"&&e.baRelation!="insertBefore"||(a=!1),r=o.targetPosition.isEqual(t.targetPosition)&&a?o.targetPosition._getTransformedByDeletion(t.sourcePosition,t.howMany):o.targetPosition._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),kh(o,t)&&kh(t,o))return[t.getReversed()];if(n.containsPosition(t.targetPosition)&&n.containsRange(i,!0))return n.start=n.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),n.end=n.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),uo([n],r);if(i.containsPosition(o.targetPosition)&&i.containsRange(n,!0))return n.start=n.start._getCombined(t.sourcePosition,t.getMovedRangeStart()),n.end=n.end._getCombined(t.sourcePosition,t.getMovedRangeStart()),uo([n],r);const c=St(o.sourcePosition.getParentPath(),t.sourcePosition.getParentPath());if(c=="prefix"||c=="extension")return n.start=n.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),n.end=n.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),uo([n],r);o.type!="remove"||t.type=="remove"||e.aWasUndone||e.forceWeakRemove?o.type=="remove"||t.type!="remove"||e.bWasUndone||e.forceWeakRemove||(s=!1):s=!0;const l=[],d=n.getDifference(i);for(const u of d){u.start=u.start._getTransformedByDeletion(t.sourcePosition,t.howMany),u.end=u.end._getTransformedByDeletion(t.sourcePosition,t.howMany);const g=St(u.start.getParentPath(),t.getMovedRangeStart().getParentPath())=="same",p=u._getTransformedByInsertion(t.getMovedRangeStart(),t.howMany,g);l.push(...p)}const h=n.getIntersection(i);return h!==null&&s&&(h.start=h.start._getCombined(t.sourcePosition,t.getMovedRangeStart()),h.end=h.end._getCombined(t.sourcePosition,t.getMovedRangeStart()),l.length===0?l.push(h):l.length==1?i.start.isBefore(n.start)||i.start.isEqual(n.start)?l.unshift(h):l.push(h):l.splice(1,0,h)),l.length===0?[new Ht(o.baseVersion)]:uo(l,r)}),gt(ft,xt,(o,t,e)=>{let n=o.targetPosition.clone();o.targetPosition.isEqual(t.insertionPosition)&&t.graveyardPosition&&e.abRelation!="moveTargetAfter"||(n=o.targetPosition._getTransformedBySplitOperation(t));const i=B._createFromPositionAndShift(o.sourcePosition,o.howMany);if(i.end.isEqual(t.insertionPosition))return t.graveyardPosition||o.howMany++,o.targetPosition=n,[o];if(i.start.hasSameParentAs(t.splitPosition)&&i.containsPosition(t.splitPosition)){let s=new B(t.splitPosition,i.end);return s=s._getTransformedBySplitOperation(t),uo([new B(i.start,t.splitPosition),s],n)}o.targetPosition.isEqual(t.splitPosition)&&e.abRelation=="insertAtSource"&&(n=t.moveTargetPosition),o.targetPosition.isEqual(t.insertionPosition)&&e.abRelation=="insertBetween"&&(n=o.targetPosition);const r=[i._getTransformedBySplitOperation(t)];if(t.graveyardPosition){const s=i.start.isEqual(t.graveyardPosition)||i.containsPosition(t.graveyardPosition);o.howMany>1&&s&&!e.aWasUndone&&r.push(B._createFromPositionAndShift(t.insertionPosition,1))}return uo(r,n)}),gt(ft,Nt,(o,t,e)=>{const n=B._createFromPositionAndShift(o.sourcePosition,o.howMany);if(t.deletionPosition.hasSameParentAs(o.sourcePosition)&&n.containsPosition(t.sourcePosition)){if(o.type!="remove"||e.forceWeakRemove){if(o.howMany==1)return e.bWasUndone?(o.sourcePosition=t.graveyardPosition.clone(),o.targetPosition=o.targetPosition._getTransformedByMergeOperation(t),[o]):[new Ht(0)]}else if(!e.aWasUndone){const r=[];let s=t.graveyardPosition.clone(),a=t.targetPosition._getTransformedByMergeOperation(t);o.howMany>1&&(r.push(new ft(o.sourcePosition,o.howMany-1,o.targetPosition,0)),s=s._getTransformedByMove(o.sourcePosition,o.targetPosition,o.howMany-1),a=a._getTransformedByMove(o.sourcePosition,o.targetPosition,o.howMany-1));const c=t.deletionPosition._getCombined(o.sourcePosition,o.targetPosition),l=new ft(s,1,c,0),d=l.getMovedRangeStart().path.slice();d.push(0);const h=new O(l.targetPosition.root,d);a=a._getTransformedByMove(s,c,1);const u=new ft(a,t.howMany,h,0);return r.push(l),r.push(u),r}}const i=B._createFromPositionAndShift(o.sourcePosition,o.howMany)._getTransformedByMergeOperation(t);return o.sourcePosition=i.start,o.howMany=i.end.offset-i.start.offset,o.targetPosition=o.targetPosition._getTransformedByMergeOperation(t),[o]}),gt(se,$t,(o,t)=>(o.position=o.position._getTransformedByInsertOperation(t),[o])),gt(se,Nt,(o,t)=>o.position.isEqual(t.deletionPosition)?(o.position=t.graveyardPosition.clone(),o.position.stickiness="toNext",[o]):(o.position=o.position._getTransformedByMergeOperation(t),[o])),gt(se,ft,(o,t)=>(o.position=o.position._getTransformedByMoveOperation(t),[o])),gt(se,se,(o,t,e)=>{if(o.position.isEqual(t.position)){if(!e.aIsStrong)return[new Ht(0)];o.oldName=t.newName}return[o]}),gt(se,xt,(o,t)=>{if(St(o.position.path,t.splitPosition.getParentPath())=="same"&&!t.graveyardPosition){const e=new se(o.position.getShiftedBy(1),o.oldName,o.newName,0);return[o,e]}return o.position=o.position._getTransformedBySplitOperation(t),[o]}),gt(en,en,(o,t,e)=>{if(o.root===t.root&&o.key===t.key){if(!e.aIsStrong||o.newValue===t.newValue)return[new Ht(0)];o.oldValue=t.newValue}return[o]}),gt(Ye,Ye,(o,t)=>o.rootName===t.rootName&&o.isAdd===t.isAdd?[new Ht(0)]:[o]),gt(xt,$t,(o,t)=>(o.splitPosition.hasSameParentAs(t.position)&&o.splitPosition.offset{if(!o.graveyardPosition&&!e.bWasUndone&&o.splitPosition.hasSameParentAs(t.sourcePosition)){const n=t.graveyardPosition.path.slice();n.push(0);const i=new O(t.graveyardPosition.root,n),r=xt.getInsertionPosition(new O(t.graveyardPosition.root,n)),s=new xt(i,0,r,null,0);return o.splitPosition=o.splitPosition._getTransformedByMergeOperation(t),o.insertionPosition=xt.getInsertionPosition(o.splitPosition),o.graveyardPosition=s.insertionPosition.clone(),o.graveyardPosition.stickiness="toNext",[s,o]}return o.splitPosition.hasSameParentAs(t.deletionPosition)&&!o.splitPosition.isAfter(t.deletionPosition)&&o.howMany--,o.splitPosition.hasSameParentAs(t.targetPosition)&&(o.howMany+=t.howMany),o.splitPosition=o.splitPosition._getTransformedByMergeOperation(t),o.insertionPosition=xt.getInsertionPosition(o.splitPosition),o.graveyardPosition&&(o.graveyardPosition=o.graveyardPosition._getTransformedByMergeOperation(t)),[o]}),gt(xt,ft,(o,t,e)=>{const n=B._createFromPositionAndShift(t.sourcePosition,t.howMany);if(o.graveyardPosition){const r=n.start.isEqual(o.graveyardPosition)||n.containsPosition(o.graveyardPosition);if(!e.bWasUndone&&r){const s=o.splitPosition._getTransformedByMoveOperation(t),a=o.graveyardPosition._getTransformedByMoveOperation(t),c=a.path.slice();c.push(0);const l=new O(a.root,c);return[new ft(s,o.howMany,l,0)]}o.graveyardPosition=o.graveyardPosition._getTransformedByMoveOperation(t)}const i=o.splitPosition.isEqual(t.targetPosition);if(i&&(e.baRelation=="insertAtSource"||e.abRelation=="splitBefore"))return o.howMany+=t.howMany,o.splitPosition=o.splitPosition._getTransformedByDeletion(t.sourcePosition,t.howMany),o.insertionPosition=xt.getInsertionPosition(o.splitPosition),[o];if(i&&e.abRelation&&e.abRelation.howMany){const{howMany:r,offset:s}=e.abRelation;return o.howMany+=r,o.splitPosition=o.splitPosition.getShiftedBy(s),[o]}if(o.splitPosition.hasSameParentAs(t.sourcePosition)&&n.containsPosition(o.splitPosition)){const r=t.howMany-(o.splitPosition.offset-t.sourcePosition.offset);return o.howMany-=r,o.splitPosition.hasSameParentAs(t.targetPosition)&&o.splitPosition.offset{if(o.splitPosition.isEqual(t.splitPosition)){if(!o.graveyardPosition&&!t.graveyardPosition)return[new Ht(0)];if(o.graveyardPosition&&t.graveyardPosition&&o.graveyardPosition.isEqual(t.graveyardPosition))return[new Ht(0)];if(e.abRelation=="splitBefore")return o.howMany=0,o.graveyardPosition=o.graveyardPosition._getTransformedBySplitOperation(t),[o]}if(o.graveyardPosition&&t.graveyardPosition&&o.graveyardPosition.isEqual(t.graveyardPosition)){const n=o.splitPosition.root.rootName=="$graveyard",i=t.splitPosition.root.rootName=="$graveyard";if(i&&!n||!(n&&!i)&&e.aIsStrong){const r=[];return t.howMany&&r.push(new ft(t.moveTargetPosition,t.howMany,t.splitPosition,0)),o.howMany&&r.push(new ft(o.splitPosition,o.howMany,o.moveTargetPosition,0)),r}return[new Ht(0)]}if(o.graveyardPosition&&(o.graveyardPosition=o.graveyardPosition._getTransformedBySplitOperation(t)),o.splitPosition.isEqual(t.insertionPosition)&&e.abRelation=="splitBefore")return o.howMany++,[o];if(t.splitPosition.isEqual(o.insertionPosition)&&e.baRelation=="splitBefore"){const n=t.insertionPosition.path.slice();n.push(0);const i=new O(t.insertionPosition.root,n);return[o,new ft(o.insertionPosition,1,i,0)]}return o.splitPosition.hasSameParentAs(t.splitPosition)&&o.splitPosition.offset{const e=t[0];e.isDocumentOperation&&aC.call(this,e)},{priority:"low"})}function aC(o){const t=this.getTransformedByOperation(o);if(!this.isEqual(t)){const e=this.toPosition();this.path=t.path,this.root=t.root,this.fire("change",e)}}Zt.prototype.is=function(o){return o==="livePosition"||o==="model:livePosition"||o=="position"||o==="model:position"};class go{constructor(t={}){typeof t=="string"&&(t=t==="transparent"?{isUndoable:!1}:{},Q("batch-constructor-deprecated-string-type"));const{isUndoable:e=!0,isLocal:n=!0,isUndo:i=!1,isTyping:r=!1}=t;this.operations=[],this.isUndoable=e,this.isLocal=n,this.isUndo=i,this.isTyping=r}get type(){return Q("batch-type-deprecated"),"default"}get baseVersion(){for(const t of this.operations)if(t.baseVersion!==null)return t.baseVersion;return null}addOperation(t){return t.batch=this,this.operations.push(t),t}}var cC=Object.defineProperty,lC=Object.defineProperties,dC=Object.getOwnPropertyDescriptors,bh=Object.getOwnPropertySymbols,hC=Object.prototype.hasOwnProperty,uC=Object.prototype.propertyIsEnumerable,wh=(o,t,e)=>t in o?cC(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Ah=(o,t)=>{for(var e in t||(t={}))hC.call(t,e)&&wh(o,e,t[e]);if(bh)for(var e of bh(t))uC.call(t,e)&&wh(o,e,t[e]);return o};class gC{constructor(t){this._changesInElement=new Map,this._elementSnapshots=new Map,this._changedMarkers=new Map,this._changedRoots=new Map,this._changeCount=0,this._cachedChanges=null,this._cachedChangesWithGraveyard=null,this._refreshedItems=new Set,this._markerCollection=t}get isEmpty(){return this._changesInElement.size==0&&this._changedMarkers.size==0&&this._changedRoots.size==0}bufferOperation(t){const e=t;switch(e.type){case"insert":if(this._isInInsertedElement(e.position.parent))return;this._markInsert(e.position.parent,e.position.offset,e.nodes.maxOffset);break;case"addAttribute":case"removeAttribute":case"changeAttribute":for(const n of e.range.getItems({shallow:!0}))this._isInInsertedElement(n.parent)||this._markAttribute(n);break;case"remove":case"move":case"reinsert":{if(e.sourcePosition.isEqual(e.targetPosition)||e.sourcePosition.getShiftedBy(e.howMany).isEqual(e.targetPosition))return;const n=this._isInInsertedElement(e.sourcePosition.parent),i=this._isInInsertedElement(e.targetPosition.parent);n||this._markRemove(e.sourcePosition.parent,e.sourcePosition.offset,e.howMany),i||this._markInsert(e.targetPosition.parent,e.getMovedRangeStart().offset,e.howMany);break}case"rename":{if(this._isInInsertedElement(e.position.parent))return;this._markRemove(e.position.parent,e.position.offset,1),this._markInsert(e.position.parent,e.position.offset,1);const n=B._createFromPositionAndShift(e.position,1);for(const i of this._markerCollection.getMarkersIntersectingRange(n)){const r=i.getData();this.bufferMarkerChange(i.name,r,r)}break}case"split":{const n=e.splitPosition.parent;this._isInInsertedElement(n)||this._markRemove(n,e.splitPosition.offset,e.howMany),this._isInInsertedElement(e.insertionPosition.parent)||this._markInsert(e.insertionPosition.parent,e.insertionPosition.offset,1),e.graveyardPosition&&this._markRemove(e.graveyardPosition.parent,e.graveyardPosition.offset,1);break}case"merge":{const n=e.sourcePosition.parent;this._isInInsertedElement(n.parent)||this._markRemove(n.parent,n.startOffset,1);const i=e.graveyardPosition.parent;this._markInsert(i,e.graveyardPosition.offset,1);const r=e.targetPosition.parent;this._isInInsertedElement(r)||this._markInsert(r,e.targetPosition.offset,n.maxOffset);break}case"detachRoot":case"addRoot":{const n=e.affectedSelectable;if(!n._isLoaded||n.isAttached()==e.isAdd)return;this._bufferRootStateChange(e.rootName,e.isAdd);break}case"addRootAttribute":case"removeRootAttribute":case"changeRootAttribute":{if(!e.root._isLoaded)return;const n=e.root.rootName;this._bufferRootAttributeChange(n,e.key,e.oldValue,e.newValue);break}}this._cachedChanges=null}bufferMarkerChange(t,e,n){e.range&&e.range.root.is("rootElement")&&!e.range.root._isLoaded&&(e.range=null),n.range&&n.range.root.is("rootElement")&&!n.range.root._isLoaded&&(n.range=null);let i=this._changedMarkers.get(t);i?i.newMarkerData=n:(i={newMarkerData:n,oldMarkerData:e},this._changedMarkers.set(t,i)),i.oldMarkerData.range==null&&n.range==null&&this._changedMarkers.delete(t)}getMarkersToRemove(){const t=[];for(const[e,n]of this._changedMarkers)n.oldMarkerData.range!=null&&t.push({name:e,range:n.oldMarkerData.range});return t}getMarkersToAdd(){const t=[];for(const[e,n]of this._changedMarkers)n.newMarkerData.range!=null&&t.push({name:e,range:n.newMarkerData.range});return t}getChangedMarkers(){return Array.from(this._changedMarkers).map(([t,e])=>({name:t,data:{oldRange:e.oldMarkerData.range,newRange:e.newMarkerData.range}}))}hasDataChanges(){if(this._changesInElement.size>0||this._changedRoots.size>0)return!0;for(const{newMarkerData:t,oldMarkerData:e}of this._changedMarkers.values()){if(t.affectsData!==e.affectsData)return!0;if(t.affectsData){const n=t.range&&!e.range,i=!t.range&&e.range,r=t.range&&e.range&&!t.range.isEqual(e.range);if(n||i||r)return!0}}return!1}getChanges(t={}){if(this._cachedChanges)return t.includeChangesInGraveyard?this._cachedChangesWithGraveyard.slice():this._cachedChanges.slice();let e=[];for(const n of this._changesInElement.keys()){const i=this._changesInElement.get(n).sort((d,h)=>d.offset===h.offset?d.type!=h.type?d.type=="remove"?-1:1:0:d.offsetn.position.root!=i.position.root?n.position.root.rootNamen);for(const n of e)delete n.changeCount,n.type=="attribute"&&(delete n.position,delete n.length);return this._changeCount=0,this._cachedChangesWithGraveyard=e,this._cachedChanges=e.filter(mC),t.includeChangesInGraveyard?this._cachedChangesWithGraveyard.slice():this._cachedChanges.slice()}getChangedRoots(){return Array.from(this._changedRoots.values()).map(t=>{const e=Ah({},t);return e.state!==void 0&&delete e.attributes,e})}getRefreshedItems(){return new Set(this._refreshedItems)}reset(){this._changesInElement.clear(),this._elementSnapshots.clear(),this._changedMarkers.clear(),this._changedRoots.clear(),this._refreshedItems=new Set,this._cachedChanges=null}_bufferRootStateChange(t,e){if(!this._changedRoots.has(t))return void this._changedRoots.set(t,{name:t,state:e?"attached":"detached"});const n=this._changedRoots.get(t);n.state!==void 0?(delete n.state,n.attributes===void 0&&this._changedRoots.delete(t)):n.state=e?"attached":"detached"}_bufferRootAttributeChange(t,e,n,i){const r=this._changedRoots.get(t)||{name:t},s=r.attributes||{};if(s[e]){const a=s[e];i===a.oldValue?delete s[e]:a.newValue=i}else s[e]={oldValue:n,newValue:i};Object.entries(s).length===0?(delete r.attributes,r.state===void 0&&this._changedRoots.delete(t)):(r.attributes=s,this._changedRoots.set(t,r))}_refreshItem(t){if(this._isInInsertedElement(t.parent))return;this._markRemove(t.parent,t.startOffset,t.offsetSize),this._markInsert(t.parent,t.startOffset,t.offsetSize),this._refreshedItems.add(t);const e=B._createOn(t);for(const n of this._markerCollection.getMarkersIntersectingRange(e)){const i=n.getData();this.bufferMarkerChange(n.name,i,i)}this._cachedChanges=null}_bufferRootLoad(t){if(t.isAttached()){this._bufferRootStateChange(t.rootName,!0),this._markInsert(t,0,t.maxOffset);for(const n of t.getAttributeKeys())this._bufferRootAttributeChange(t.rootName,n,null,t.getAttribute(n));for(const n of this._markerCollection)if(n.getRange().root==t){const i=n.getData();this.bufferMarkerChange(n.name,(e=Ah({},i),lC(e,dC({range:null}))),i)}var e}}_markInsert(t,e,n){if(t.root.is("rootElement")&&!t.root._isLoaded)return;const i={type:"insert",offset:e,howMany:n,count:this._changeCount++};this._markChange(t,i)}_markRemove(t,e,n){if(t.root.is("rootElement")&&!t.root._isLoaded)return;const i={type:"remove",offset:e,howMany:n,count:this._changeCount++};this._markChange(t,i),this._removeAllNestedChanges(t,e,n)}_markAttribute(t){if(t.root.is("rootElement")&&!t.root._isLoaded)return;const e={type:"attribute",offset:t.startOffset,howMany:t.offsetSize,count:this._changeCount++};this._markChange(t.parent,e)}_markChange(t,e){this._makeSnapshot(t);const n=this._getChangesForElement(t);this._handleChange(e,n),n.push(e);for(let i=0;in.offset){if(i>r){const s={type:"attribute",offset:r,howMany:i-r,count:this._changeCount++};this._handleChange(s,e),e.push(s)}t.nodesToHandle=n.offset-t.offset,t.howMany=t.nodesToHandle}else t.offset>=n.offset&&t.offsetr?(t.nodesToHandle=i-r,t.offset=r):t.nodesToHandle=0);if(n.type=="remove"&&t.offsetn.offset){const s={type:"attribute",offset:n.offset,howMany:i-n.offset,count:this._changeCount++};this._handleChange(s,e),e.push(s),t.nodesToHandle=n.offset-t.offset,t.howMany=t.nodesToHandle}n.type=="attribute"&&(t.offset>=n.offset&&i<=r?(t.nodesToHandle=0,t.howMany=0,t.offset=0):t.offset<=n.offset&&i>=r&&(n.howMany=0))}}t.howMany=t.nodesToHandle,delete t.nodesToHandle}_getInsertDiff(t,e,n){return{type:"insert",position:O._createAt(t,e),name:n.name,attributes:new Map(n.attributes),length:1,changeCount:this._changeCount++,_element:n.element}}_getRemoveDiff(t,e,n){return{type:"remove",position:O._createAt(t,e),name:n.name,attributes:new Map(n.attributes),length:1,changeCount:this._changeCount++,_element:n.element}}_getAttributesDiff(t,e,n){const i=[];n=new Map(n);for(const[r,s]of e){const a=n.has(r)?n.get(r):null;a!==s&&i.push({type:"attribute",position:t.start,range:t.clone(),length:1,attributeKey:r,attributeOldValue:s,attributeNewValue:a,changeCount:this._changeCount++}),n.delete(r)}for(const[r,s]of n)i.push({type:"attribute",position:t.start,range:t.clone(),length:1,attributeKey:r,attributeOldValue:null,attributeNewValue:s,changeCount:this._changeCount++});return i}_isInInsertedElement(t){const e=t.parent;if(!e)return!1;const n=this._changesInElement.get(e),i=t.startOffset;if(n){for(const r of n)if(r.type=="insert"&&i>=r.offset&&in){for(let s=0;sthis._version+1&&this._gaps.set(this._version,t),this._version=t}get lastOperation(){return this._operations[this._operations.length-1]}addOperation(t){if(t.baseVersion!==this.version)throw new _("model-document-history-addoperation-incorrect-version",this,{operation:t,historyVersion:this.version});this._operations.push(t),this._version++,this._baseVersionToOperationIndex.set(t.baseVersion,this._operations.length-1)}getOperations(t,e=this.version){if(!this._operations.length)return[];const n=this._operations[0];t===void 0&&(t=n.baseVersion);let i=e-1;for(const[a,c]of this._gaps)t>a&&ta&&ithis.lastOperation.baseVersion)return[];let r=this._baseVersionToOperationIndex.get(t);r===void 0&&(r=0);let s=this._baseVersionToOperationIndex.get(i);return s===void 0&&(s=this._operations.length-1),this._operations.slice(r,s+1)}getOperation(t){const e=this._baseVersionToOperationIndex.get(t);if(e!==void 0)return this._operations[e]}setOperationAsUndone(t,e){this._undoPairs.set(e,t),this._undoneOperations.add(t)}isUndoingOperation(t){return this._undoPairs.has(t)}isUndoneOperation(t){return this._undoneOperations.has(t)}getUndoneOperation(t){return this._undoPairs.get(t)}reset(){this._version=0,this._undoPairs=new Map,this._operations=[],this._undoneOperations=new Set,this._gaps=new Map,this._baseVersionToOperationIndex=new Map}}class Qi extends Ct{constructor(t,e,n="main"){super(e),this._isAttached=!0,this._isLoaded=!0,this._document=t,this.rootName=n}get document(){return this._document}isAttached(){return this._isAttached}toJSON(){return this.rootName}}Qi.prototype.is=function(o,t){return t?t===this.name&&(o==="rootElement"||o==="model:rootElement"||o==="element"||o==="model:element"):o==="rootElement"||o==="model:rootElement"||o==="element"||o==="model:element"||o==="node"||o==="model:node"};var kC=Object.defineProperty,bC=Object.defineProperties,wC=Object.getOwnPropertyDescriptors,_h=Object.getOwnPropertySymbols,AC=Object.prototype.hasOwnProperty,CC=Object.prototype.propertyIsEnumerable,vh=(o,t,e)=>t in o?kC(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,yh=(o,t)=>{for(var e in t||(t={}))AC.call(t,e)&&vh(o,e,t[e]);if(_h)for(var e of _h(t))CC.call(t,e)&&vh(o,e,t[e]);return o},xh=(o,t)=>bC(o,wC(t));const Eh="$graveyard";class _C extends kt(){constructor(t){super(),this.model=t,this.history=new fC,this.selection=new ze(this),this.roots=new Me({idProperty:"rootName"}),this.differ=new gC(t.markers),this.isReadOnly=!1,this._postFixers=new Set,this._hasSelectionChangedFromTheLastChangeBlock=!1,this.createRoot("$root",Eh),this.listenTo(t,"applyOperation",(e,n)=>{const i=n[0];i.isDocumentOperation&&this.differ.bufferOperation(i)},{priority:"high"}),this.listenTo(t,"applyOperation",(e,n)=>{const i=n[0];i.isDocumentOperation&&this.history.addOperation(i)},{priority:"low"}),this.listenTo(this.selection,"change",()=>{this._hasSelectionChangedFromTheLastChangeBlock=!0}),this.listenTo(t.markers,"update",(e,n,i,r,s)=>{const a=xh(yh({},n.getData()),{range:r});this.differ.bufferMarkerChange(n.name,s,a),i===null&&n.on("change",(c,l)=>{const d=n.getData();this.differ.bufferMarkerChange(n.name,xh(yh({},d),{range:l}),d)})}),this.registerPostFixer(e=>{let n=!1;for(const i of this.roots)i.isAttached()||i.isEmpty||(e.remove(e.createRangeIn(i)),n=!0);for(const i of this.model.markers)i.getRange().root.isAttached()||(e.removeMarker(i),n=!0);return n})}get version(){return this.history.version}set version(t){this.history.version=t}get graveyard(){return this.getRoot(Eh)}createRoot(t="$root",e="main"){if(this.roots.get(e))throw new _("model-document-createroot-name-exists",this,{name:e});const n=new Qi(this,t,e);return this.roots.add(n),n}destroy(){this.selection.destroy(),this.stopListening()}getRoot(t="main"){return this.roots.get(t)}getRootNames(t=!1){return this.getRoots(t).map(e=>e.rootName)}getRoots(t=!1){return this.roots.filter(e=>e!=this.graveyard&&(t||e.isAttached())&&e._isLoaded)}registerPostFixer(t){this._postFixers.add(t)}toJSON(){const t=Hl(this);return t.selection="[engine.model.DocumentSelection]",t.model="[engine.model.Model]",t}_handleChangeBlock(t){this._hasDocumentChangedFromTheLastChangeBlock()&&(this._callPostFixers(t),this.selection.refresh(),this.differ.hasDataChanges()?this.fire("change:data",t.batch):this.fire("change",t.batch),this.selection.refresh(),this.differ.reset()),this._hasSelectionChangedFromTheLastChangeBlock=!1}_hasDocumentChangedFromTheLastChangeBlock(){return!this.differ.isEmpty||this._hasSelectionChangedFromTheLastChangeBlock}_getDefaultRoot(){const t=this.getRoots();return t.length?t[0]:this.graveyard}_getDefaultRange(){const t=this._getDefaultRoot(),e=this.model,n=e.schema,i=e.createPositionFromPath(t,[0]);return n.getNearestSelectionRange(i)||e.createRange(i)}_validateSelectionRange(t){return Dh(t.start)&&Dh(t.end)}_callPostFixers(t){let e=!1;do for(const n of this._postFixers)if(this.selection.refresh(),e=n(t),e)break;while(e)}}function Dh(o){const t=o.textNode;if(t){const e=t.data,n=o.offset-t.startOffset;return!es(e,n)&&!os(e,n)}return!0}var vC=Object.defineProperty,yC=Object.defineProperties,xC=Object.getOwnPropertyDescriptors,Ih=Object.getOwnPropertySymbols,EC=Object.prototype.hasOwnProperty,DC=Object.prototype.propertyIsEnumerable,Sh=(o,t,e)=>t in o?vC(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;class IC extends kt(){constructor(){super(...arguments),this._markers=new Map}[Symbol.iterator](){return this._markers.values()}has(t){const e=t instanceof po?t.name:t;return this._markers.has(e)}get(t){return this._markers.get(t)||null}_set(t,e,n=!1,i=!1){const r=t instanceof po?t.name:t;if(r.includes(","))throw new _("markercollection-incorrect-marker-name",this);const s=this._markers.get(r);if(s){const d=s.getData(),h=s.getRange();let u=!1;return h.isEqual(e)||(s._attachLiveRange(pe.fromRange(e)),u=!0),n!=s.managedUsingOperations&&(s._managedUsingOperations=n,u=!0),typeof i=="boolean"&&i!=s.affectsData&&(s._affectsData=i,u=!0),u&&this.fire(`update:${r}`,s,h,e,d),s}const a=pe.fromRange(e),c=new po(r,a,n,i);var l;return this._markers.set(r,c),this.fire(`update:${r}`,c,null,e,(l=((d,h)=>{for(var u in h||(h={}))EC.call(h,u)&&Sh(d,u,h[u]);if(Ih)for(var u of Ih(h))DC.call(h,u)&&Sh(d,u,h[u]);return d})({},c.getData()),yC(l,xC({range:null})))),c}_remove(t){const e=t instanceof po?t.name:t,n=this._markers.get(e);return!!n&&(this._markers.delete(e),this.fire(`update:${e}`,n,n.getRange(),null,n.getData()),this._destroyMarker(n),!0)}_refresh(t){const e=t instanceof po?t.name:t,n=this._markers.get(e);if(!n)throw new _("markercollection-refresh-marker-not-exists",this);const i=n.getRange();this.fire(`update:${e}`,n,i,i,n.getData())}*getMarkersAtPosition(t){for(const e of this)e.getRange().containsPosition(t)&&(yield e)}*getMarkersIntersectingRange(t){for(const e of this)e.getRange().getIntersection(t)!==null&&(yield e)}destroy(){for(const t of this._markers.values())this._destroyMarker(t);this._markers=null,this.stopListening()}*getMarkersGroup(t){for(const e of this._markers.values())e.name.startsWith(t+":")&&(yield e)}_destroyMarker(t){t.stopListening(),t._detachLiveRange()}}class po extends kt(bn){constructor(t,e,n,i){super(),this.name=t,this._liveRange=this._attachLiveRange(e),this._managedUsingOperations=n,this._affectsData=i}get managedUsingOperations(){if(!this._liveRange)throw new _("marker-destroyed",this);return this._managedUsingOperations}get affectsData(){if(!this._liveRange)throw new _("marker-destroyed",this);return this._affectsData}getData(){return{range:this.getRange(),affectsData:this.affectsData,managedUsingOperations:this.managedUsingOperations}}getStart(){if(!this._liveRange)throw new _("marker-destroyed",this);return this._liveRange.start.clone()}getEnd(){if(!this._liveRange)throw new _("marker-destroyed",this);return this._liveRange.end.clone()}getRange(){if(!this._liveRange)throw new _("marker-destroyed",this);return this._liveRange.toRange()}_attachLiveRange(t){return this._liveRange&&this._detachLiveRange(),t.delegate("change:range").to(this),t.delegate("change:content").to(this),this._liveRange=t,t}_detachLiveRange(){this._liveRange.stopDelegating("change:range",this),this._liveRange.stopDelegating("change:content",this),this._liveRange.detach(),this._liveRange=null}}po.prototype.is=function(o){return o==="marker"||o==="model:marker"};class SC extends me{constructor(t,e){super(null),this.sourcePosition=t.clone(),this.howMany=e}get type(){return"detach"}get affectedSelectable(){return null}toJSON(){const t=super.toJSON();return t.sourcePosition=this.sourcePosition.toJSON(),t}_validate(){if(this.sourcePosition.root.document)throw new _("detach-operation-on-document-node",this)}_execute(){lh(B._createFromPositionAndShift(this.sourcePosition,this.howMany))}static get className(){return"DetachOperation"}}class nn extends bn{constructor(t){super(),this.markers=new Map,this._children=new Yo,t&&this._insertChild(0,t)}[Symbol.iterator](){return this.getChildren()}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return this.childCount===0}get nextSibling(){return null}get previousSibling(){return null}get root(){return this}get parent(){return null}get document(){return null}isAttached(){return!1}getAncestors(){return[]}getChild(t){return this._children.getNode(t)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(t){return this._children.getNodeIndex(t)}getChildStartOffset(t){return this._children.getNodeStartOffset(t)}getPath(){return[]}getNodeByPath(t){let e=this;for(const n of t)e=e.getChild(e.offsetToIndex(n));return e}offsetToIndex(t){return this._children.offsetToIndex(t)}toJSON(){const t=[];for(const e of this._children)t.push(e.toJSON());return t}static fromJSON(t){const e=[];for(const n of t)n.name?e.push(Ct.fromJSON(n)):e.push(yt.fromJSON(n));return new nn(e)}_appendChild(t){this._insertChild(this.childCount,t)}_insertChild(t,e){const n=function(i){return typeof i=="string"?[new yt(i)]:(Gt(i)||(i=[i]),Array.from(i).map(r=>typeof r=="string"?new yt(r):r instanceof Oe?new yt(r.data,r.getAttributes()):r))}(e);for(const i of n)i.parent!==null&&i._remove(),i.parent=this;this._children._insertNodes(t,n)}_removeChildren(t,e=1){const n=this._children._removeNodes(t,e);for(const i of n)i.parent=null;return n}}nn.prototype.is=function(o){return o==="documentFragment"||o==="model:documentFragment"};class TC{constructor(t,e){this.model=t,this.batch=e}createText(t,e){return new yt(t,e)}createElement(t,e){return new Ct(t,e)}createDocumentFragment(){return new nn}cloneElement(t,e=!0){return t._clone(e)}insert(t,e,n=0){if(this._assertWriterUsedCorrectly(),t instanceof yt&&t.data=="")return;const i=O._createAt(e,n);if(t.parent){if(Bh(t.root,i.root))return void this.move(B._createOn(t),i);if(t.root.document)throw new _("model-writer-insert-forbidden-move",this);this.remove(t)}const r=i.root.document?i.root.document.version:null,s=new $t(i,t,r);if(t instanceof yt&&(s.shouldReceiveAttributes=!0),this.batch.addOperation(s),this.model.applyOperation(s),t instanceof nn)for(const[a,c]of t.markers){const l=O._createAt(c.root,0),d={range:new B(c.start._getCombined(l,i),c.end._getCombined(l,i)),usingOperation:!0,affectsData:!0};this.model.markers.has(a)?this.updateMarker(a,d):this.addMarker(a,d)}}insertText(t,e,n,i){e instanceof nn||e instanceof Ct||e instanceof O?this.insert(this.createText(t),e,n):this.insert(this.createText(t,e),n,i)}insertElement(t,e,n,i){e instanceof nn||e instanceof Ct||e instanceof O?this.insert(this.createElement(t),e,n):this.insert(this.createElement(t,e),n,i)}append(t,e){this.insert(t,e,"end")}appendText(t,e,n){e instanceof nn||e instanceof Ct?this.insert(this.createText(t),e,"end"):this.insert(this.createText(t,e),n,"end")}appendElement(t,e,n){e instanceof nn||e instanceof Ct?this.insert(this.createElement(t),e,"end"):this.insert(this.createElement(t,e),n,"end")}setAttribute(t,e,n){if(this._assertWriterUsedCorrectly(),n instanceof B){const i=n.getMinimalFlatRanges();for(const r of i)Th(this,t,e,r)}else Mh(this,t,e,n)}setAttributes(t,e){for(const[n,i]of We(t))this.setAttribute(n,i,e)}removeAttribute(t,e){if(this._assertWriterUsedCorrectly(),e instanceof B){const n=e.getMinimalFlatRanges();for(const i of n)Th(this,t,null,i)}else Mh(this,t,null,e)}clearAttributes(t){this._assertWriterUsedCorrectly();const e=n=>{for(const i of n.getAttributeKeys())this.removeAttribute(i,n)};if(t instanceof B)for(const n of t.getItems())e(n);else e(t)}move(t,e,n){if(this._assertWriterUsedCorrectly(),!(t instanceof B))throw new _("writer-move-invalid-range",this);if(!t.isFlat)throw new _("writer-move-range-not-flat",this);const i=O._createAt(e,n);if(i.isEqual(t.start))return;if(this._addOperationForAffectedMarkers("move",t),!Bh(t.root,i.root))throw new _("writer-move-different-document",this);const r=t.root.document?t.root.document.version:null,s=new ft(t.start,t.end.offset-t.start.offset,i,r);this.batch.addOperation(s),this.model.applyOperation(s)}remove(t){this._assertWriterUsedCorrectly();const e=(t instanceof B?t:B._createOn(t)).getMinimalFlatRanges().reverse();for(const n of e)this._addOperationForAffectedMarkers("move",n),MC(n.start,n.end.offset-n.start.offset,this.batch,this.model)}merge(t){this._assertWriterUsedCorrectly();const e=t.nodeBefore,n=t.nodeAfter;if(this._addOperationForAffectedMarkers("merge",t),!(e instanceof Ct))throw new _("writer-merge-no-element-before",this);if(!(n instanceof Ct))throw new _("writer-merge-no-element-after",this);t.root.document?this._merge(t):this._mergeDetached(t)}createPositionFromPath(t,e,n){return this.model.createPositionFromPath(t,e,n)}createPositionAt(t,e){return this.model.createPositionAt(t,e)}createPositionAfter(t){return this.model.createPositionAfter(t)}createPositionBefore(t){return this.model.createPositionBefore(t)}createRange(t,e){return this.model.createRange(t,e)}createRangeIn(t){return this.model.createRangeIn(t)}createRangeOn(t){return this.model.createRangeOn(t)}createSelection(...t){return this.model.createSelection(...t)}_mergeDetached(t){const e=t.nodeBefore,n=t.nodeAfter;this.move(B._createIn(n),O._createAt(e,"end")),this.remove(n)}_merge(t){const e=O._createAt(t.nodeBefore,"end"),n=O._createAt(t.nodeAfter,0),i=t.root.document.graveyard,r=new O(i,[0]),s=t.root.document.version,a=new Nt(n,t.nodeAfter.maxOffset,e,r,s);this.batch.addOperation(a),this.model.applyOperation(a)}rename(t,e){if(this._assertWriterUsedCorrectly(),!(t instanceof Ct))throw new _("writer-rename-not-element-instance",this);const n=t.root.document?t.root.document.version:null,i=new se(O._createBefore(t),t.name,e,n);this.batch.addOperation(i),this.model.applyOperation(i)}split(t,e){this._assertWriterUsedCorrectly();let n,i,r=t.parent;if(!r.parent)throw new _("writer-split-element-no-parent",this);if(e||(e=r.parent),!t.parent.getAncestors({includeSelf:!0}).includes(e))throw new _("writer-split-invalid-limit-element",this);do{const s=r.root.document?r.root.document.version:null,a=r.maxOffset-t.offset,c=xt.getInsertionPosition(t),l=new xt(t,a,c,null,s);this.batch.addOperation(l),this.model.applyOperation(l),n||i||(n=r,i=t.parent.nextSibling),r=(t=this.createPositionAfter(t.parent)).parent}while(r!==e);return{position:t,range:new B(O._createAt(n,"end"),O._createAt(i,0))}}wrap(t,e){if(this._assertWriterUsedCorrectly(),!t.isFlat)throw new _("writer-wrap-range-not-flat",this);const n=e instanceof Ct?e:new Ct(e);if(n.childCount>0)throw new _("writer-wrap-element-not-empty",this);if(n.parent!==null)throw new _("writer-wrap-element-attached",this);this.insert(n,t.start);const i=new B(t.start.getShiftedBy(1),t.end.getShiftedBy(1));this.move(i,O._createAt(n,0))}unwrap(t){if(this._assertWriterUsedCorrectly(),t.parent===null)throw new _("writer-unwrap-element-no-parent",this);this.move(B._createIn(t),this.createPositionAfter(t)),this.remove(t)}addMarker(t,e){if(this._assertWriterUsedCorrectly(),!e||typeof e.usingOperation!="boolean")throw new _("writer-addmarker-no-usingoperation",this);const n=e.usingOperation,i=e.range,r=e.affectsData!==void 0&&e.affectsData;if(this.model.markers.has(t))throw new _("writer-addmarker-marker-exists",this);if(!i)throw new _("writer-addmarker-no-range",this);return n?(oi(this,t,null,i,r),this.model.markers.get(t)):this.model.markers._set(t,i,n,r)}updateMarker(t,e){this._assertWriterUsedCorrectly();const n=typeof t=="string"?t:t.name,i=this.model.markers.get(n);if(!i)throw new _("writer-updatemarker-marker-not-exists",this);if(!e)return Q("writer-updatemarker-reconvert-using-editingcontroller",{markerName:n}),void this.model.markers._refresh(i);const r=typeof e.usingOperation=="boolean",s=typeof e.affectsData=="boolean",a=s?e.affectsData:i.affectsData;if(!r&&!e.range&&!s)throw new _("writer-updatemarker-wrong-options",this);const c=i.getRange(),l=e.range?e.range:c;r&&e.usingOperation!==i.managedUsingOperations?e.usingOperation?oi(this,n,null,l,a):(oi(this,n,c,null,a),this.model.markers._set(n,l,void 0,a)):i.managedUsingOperations?oi(this,n,c,l,a):this.model.markers._set(n,l,void 0,a)}removeMarker(t){this._assertWriterUsedCorrectly();const e=typeof t=="string"?t:t.name;if(!this.model.markers.has(e))throw new _("writer-removemarker-no-marker",this);const n=this.model.markers.get(e);if(!n.managedUsingOperations)return void this.model.markers._remove(e);oi(this,e,n.getRange(),null,n.affectsData)}addRoot(t,e="$root"){this._assertWriterUsedCorrectly();const n=this.model.document.getRoot(t);if(n&&n.isAttached())throw new _("writer-addroot-root-exists",this);const i=this.model.document,r=new Ye(t,e,!0,i,i.version);return this.batch.addOperation(r),this.model.applyOperation(r),this.model.document.getRoot(t)}detachRoot(t){this._assertWriterUsedCorrectly();const e=typeof t=="string"?this.model.document.getRoot(t):t;if(!e||!e.isAttached())throw new _("writer-detachroot-no-root",this);for(const r of this.model.markers)r.getRange().root===e&&this.removeMarker(r);for(const r of e.getAttributeKeys())this.removeAttribute(r,e);this.remove(this.createRangeIn(e));const n=this.model.document,i=new Ye(e.rootName,e.name,!1,n,n.version);this.batch.addOperation(i),this.model.applyOperation(i)}setSelection(...t){this._assertWriterUsedCorrectly(),this.model.document.selection._setTo(...t)}setSelectionFocus(t,e){this._assertWriterUsedCorrectly(),this.model.document.selection._setFocus(t,e)}setSelectionAttribute(t,e){if(this._assertWriterUsedCorrectly(),typeof t=="string")this._setSelectionAttribute(t,e);else for(const[n,i]of We(t))this._setSelectionAttribute(n,i)}removeSelectionAttribute(t){if(this._assertWriterUsedCorrectly(),typeof t=="string")this._removeSelectionAttribute(t);else for(const e of t)this._removeSelectionAttribute(e)}overrideSelectionGravity(){return this.model.document.selection._overrideGravity()}restoreSelectionGravity(t){this.model.document.selection._restoreGravity(t)}_setSelectionAttribute(t,e){const n=this.model.document.selection;if(n.isCollapsed&&n.anchor.parent.isEmpty){const i=ze._getStoreAttributeKey(t);this.setAttribute(i,e,n.anchor.parent)}n._setAttribute(t,e)}_removeSelectionAttribute(t){const e=this.model.document.selection;if(e.isCollapsed&&e.anchor.parent.isEmpty){const n=ze._getStoreAttributeKey(t);this.removeAttribute(n,e.anchor.parent)}e._removeAttribute(t)}_assertWriterUsedCorrectly(){if(this.model._currentWriter!==this)throw new _("writer-incorrect-use",this)}_addOperationForAffectedMarkers(t,e){for(const n of this.model.markers){if(!n.managedUsingOperations)continue;const i=n.getRange();let r=!1;if(t==="move"){const s=e;r=s.containsPosition(i.start)||s.start.isEqual(i.start)||s.containsPosition(i.end)||s.end.isEqual(i.end)}else{const s=e,a=s.nodeBefore,c=s.nodeAfter,l=i.start.parent==a&&i.start.isAtEnd,d=i.end.parent==c&&i.end.offset==0,h=i.end.nodeAfter==c,u=i.start.nodeAfter==c;r=l||d||h||u}r&&this.updateMarker(n.name,{range:i})}}}function Th(o,t,e,n){const i=o.model,r=i.document;let s,a,c,l=n.start;for(const h of n.getWalker({shallow:!0}))c=h.item.getAttribute(t),s&&a!=c&&(a!=e&&d(),l=s),s=h.nextPosition,a=c;function d(){const h=new B(l,s),u=h.root.document?r.version:null,g=new jt(h,t,a,e,u);o.batch.addOperation(g),i.applyOperation(g)}s instanceof O&&s!=l&&a!=e&&d()}function Mh(o,t,e,n){const i=o.model,r=i.document,s=n.getAttribute(t);let a,c;if(s!=e){if(n.root===n){const l=n.document?r.version:null;c=new en(n,t,s,e,l)}else{a=new B(O._createBefore(n),o.createPositionAfter(n));const l=a.root.document?r.version:null;c=new jt(a,t,s,e,l)}o.batch.addOperation(c),i.applyOperation(c)}}function oi(o,t,e,n,i){const r=o.model,s=r.document,a=new re(t,e,n,r.markers,!!i,s.version);o.batch.addOperation(a),r.applyOperation(a)}function MC(o,t,e,n){let i;if(o.root.document){const r=n.document,s=new O(r.graveyard,[0]);i=new ft(o,t,s,r.version)}else i=new SC(o,t);e.addOperation(i),n.applyOperation(i)}function Bh(o,t){return o===t||o instanceof Qi&&t instanceof Qi}function BC(o,t,e={}){if(t.isCollapsed)return;const n=t.getFirstRange();if(n.root.rootName=="$graveyard")return;const i=o.schema;o.change(r=>{if(!e.doNotResetEntireContent&&function(l,d){const h=l.getLimitElement(d);if(!d.containsEntireContent(h))return!1;const u=d.getFirstRange();return u.start.parent==u.end.parent?!1:l.checkChild(h,"paragraph")}(i,t))return void function(l,d){const h=l.model.schema.getLimitElement(d);l.remove(l.createRangeIn(h)),Lh(l,l.createPositionAt(h,0),d)}(r,t);const s={};if(!e.doNotAutoparagraph){const l=t.getSelectedElement();l&&Object.assign(s,i.getAttributesWithProperty(l,"copyOnReplace",!0))}const[a,c]=function(l){const d=l.root.document.model,h=l.start;let u=l.end;if(d.hasContent(l,{ignoreMarkers:!0})){const g=function(p){const k=p.parent,b=k.root.document.model.schema,A=k.getAncestors({parentFirst:!0,includeSelf:!0});for(const E of A){if(b.isLimit(E))return null;if(b.isBlock(E))return E}}(u);if(g&&u.isTouching(d.createPositionAt(g,0))){const p=d.createSelection(l);d.modifySelection(p,{direction:"backward"});const k=p.getLastPosition(),b=d.createRange(k,u);d.hasContent(b,{ignoreMarkers:!0})||(u=k)}}return[Zt.fromPosition(h,"toPrevious"),Zt.fromPosition(u,"toNext")]}(n);a.isTouching(c)||r.remove(r.createRange(a,c)),e.leaveUnmerged||(function(l,d,h){const u=l.model;if(!Us(l.model.schema,d,h))return;const[g,p]=function(k,b){const A=k.getAncestors(),E=b.getAncestors();let M=0;for(;A[M]&&A[M]==E[M];)M++;return[A[M],E[M]]}(d,h);!g||!p||(!u.hasContent(g,{ignoreMarkers:!0})&&u.hasContent(p,{ignoreMarkers:!0})?Ph(l,d,h,g.parent):Nh(l,d,h,g.parent))}(r,a,c),i.removeDisallowedAttributes(a.parent.getChildren(),r)),Oh(r,t,a),!e.doNotAutoparagraph&&function(l,d){const h=l.checkChild(d,"$text"),u=l.checkChild(d,"paragraph");return!h&&u}(i,a)&&Lh(r,a,t,s),a.detach(),c.detach()})}function Nh(o,t,e,n){const i=t.parent,r=e.parent;if(i!=n&&r!=n){for(t=o.createPositionAfter(i),(e=o.createPositionBefore(r)).isEqual(t)||o.insert(r,t),o.merge(t);e.parent.isEmpty;){const s=e.parent;e=o.createPositionBefore(s),o.remove(s)}Us(o.model.schema,t,e)&&Nh(o,t,e,n)}}function Ph(o,t,e,n){const i=t.parent,r=e.parent;if(i!=n&&r!=n){for(t=o.createPositionAfter(i),(e=o.createPositionBefore(r)).isEqual(t)||o.insert(i,e);t.parent.isEmpty;){const s=t.parent;t=o.createPositionBefore(s),o.remove(s)}e=o.createPositionBefore(r),function(s,a){const c=a.nodeBefore,l=a.nodeAfter;c.name!=l.name&&s.rename(c,l.name),s.clearAttributes(c),s.setAttributes(Object.fromEntries(l.getAttributes()),c),s.merge(a)}(o,e),Us(o.model.schema,t,e)&&Ph(o,t,e,n)}}function Us(o,t,e){const n=t.parent,i=e.parent;return n!=i&&!o.isLimit(n)&&!o.isLimit(i)&&function(r,s,a){const c=new B(r,s);for(const l of c.getWalker())if(a.isLimit(l.item))return!1;return!0}(t,e,o)}function Lh(o,t,e,n={}){const i=o.createElement("paragraph");o.model.schema.setAllowedAttributes(i,n,o),o.insert(i,t),Oh(o,e,o.createPositionAt(i,0))}function Oh(o,t,e){t instanceof ze?o.setSelection(e):t.setTo(e)}function zh(o,t){const e=[];Array.from(o.getItems({direction:"backward"})).map(n=>t.createRangeOn(n)).filter(n=>(n.start.isAfter(o.start)||n.start.isEqual(o.start))&&(n.end.isBefore(o.end)||n.end.isEqual(o.end))).forEach(n=>{e.push(n.start.parent),t.remove(n)}),e.forEach(n=>{let i=n;for(;i.parent&&i.isEmpty;){const r=t.createRangeOn(i);i=i.parent,t.remove(r)}})}class NC{constructor(t,e,n){this._firstNode=null,this._lastNode=null,this._lastAutoParagraph=null,this._filterAttributesOf=[],this._affectedStart=null,this._affectedEnd=null,this._nodeToSelect=null,this.model=t,this.writer=e,this.position=n,this.canMergeWith=new Set([this.position.parent]),this.schema=t.schema,this._documentFragment=e.createDocumentFragment(),this._documentFragmentPosition=e.createPositionAt(this._documentFragment,0)}handleNodes(t){for(const e of Array.from(t))this._handleNode(e);this._insertPartialFragment(),this._lastAutoParagraph&&this._updateLastNodeFromAutoParagraph(this._lastAutoParagraph),this._mergeOnRight(),this.schema.removeDisallowedAttributes(this._filterAttributesOf,this.writer),this._filterAttributesOf=[]}_updateLastNodeFromAutoParagraph(t){const e=this.writer.createPositionAfter(this._lastNode),n=this.writer.createPositionAfter(t);if(n.isAfter(e)){if(this._lastNode=t,this.position.parent!=t||!this.position.isAtEnd)throw new _("insertcontent-invalid-insertion-position",this);this.position=n,this._setAffectedBoundaries(this.position)}}getSelectionRange(){return this._nodeToSelect?B._createOn(this._nodeToSelect):this.model.schema.getNearestSelectionRange(this.position)}getAffectedRange(){return this._affectedStart?new B(this._affectedStart,this._affectedEnd):null}destroy(){this._affectedStart&&this._affectedStart.detach(),this._affectedEnd&&this._affectedEnd.detach()}_handleNode(t){if(this.schema.isObject(t))return void this._handleObject(t);let e=this._checkAndAutoParagraphToAllowedPosition(t);e||(e=this._checkAndSplitToAllowedPosition(t),e)?(this._appendToFragment(t),this._firstNode||(this._firstNode=t),this._lastNode=t):this._handleDisallowedNode(t)}_insertPartialFragment(){if(this._documentFragment.isEmpty)return;const t=Zt.fromPosition(this.position,"toNext");this._setAffectedBoundaries(this.position),this._documentFragment.getChild(0)==this._firstNode&&(this.writer.insert(this._firstNode,this.position),this._mergeOnLeft(),this.position=t.toPosition()),this._documentFragment.isEmpty||this.writer.insert(this._documentFragment,this.position),this._documentFragmentPosition=this.writer.createPositionAt(this._documentFragment,0),this.position=t.toPosition(),t.detach()}_handleObject(t){this._checkAndSplitToAllowedPosition(t)?this._appendToFragment(t):this._tryAutoparagraphing(t)}_handleDisallowedNode(t){t.is("element")?this.handleNodes(t.getChildren()):this._tryAutoparagraphing(t)}_appendToFragment(t){if(!this.schema.checkChild(this.position,t))throw new _("insertcontent-wrong-position",this,{node:t,position:this.position});this.writer.insert(t,this._documentFragmentPosition),this._documentFragmentPosition=this._documentFragmentPosition.getShiftedBy(t.offsetSize),this.schema.isObject(t)&&!this.schema.checkChild(this.position,"$text")?this._nodeToSelect=t:this._nodeToSelect=null,this._filterAttributesOf.push(t)}_setAffectedBoundaries(t){this._affectedStart||(this._affectedStart=Zt.fromPosition(t,"toPrevious")),this._affectedEnd&&!this._affectedEnd.isBefore(t)||(this._affectedEnd&&this._affectedEnd.detach(),this._affectedEnd=Zt.fromPosition(t,"toNext"))}_mergeOnLeft(){const t=this._firstNode;if(!(t instanceof Ct)||!this._canMergeLeft(t))return;const e=Zt._createBefore(t);e.stickiness="toNext";const n=Zt.fromPosition(this.position,"toNext");this._affectedStart.isEqual(e)&&(this._affectedStart.detach(),this._affectedStart=Zt._createAt(e.nodeBefore,"end","toPrevious")),this._firstNode===this._lastNode&&(this._firstNode=e.nodeBefore,this._lastNode=e.nodeBefore),this.writer.merge(e),e.isEqual(this._affectedEnd)&&this._firstNode===this._lastNode&&(this._affectedEnd.detach(),this._affectedEnd=Zt._createAt(e.nodeBefore,"end","toNext")),this.position=n.toPosition(),n.detach(),this._filterAttributesOf.push(this.position.parent),e.detach()}_mergeOnRight(){const t=this._lastNode;if(!(t instanceof Ct)||!this._canMergeRight(t))return;const e=Zt._createAfter(t);if(e.stickiness="toNext",!this.position.isEqual(e))throw new _("insertcontent-invalid-insertion-position",this);this.position=O._createAt(e.nodeBefore,"end");const n=Zt.fromPosition(this.position,"toPrevious");this._affectedEnd.isEqual(e)&&(this._affectedEnd.detach(),this._affectedEnd=Zt._createAt(e.nodeBefore,"end","toNext")),this._firstNode===this._lastNode&&(this._firstNode=e.nodeBefore,this._lastNode=e.nodeBefore),this.writer.merge(e),e.getShiftedBy(-1).isEqual(this._affectedStart)&&this._firstNode===this._lastNode&&(this._affectedStart.detach(),this._affectedStart=Zt._createAt(e.nodeBefore,0,"toPrevious")),this.position=n.toPosition(),n.detach(),this._filterAttributesOf.push(this.position.parent),e.detach()}_canMergeLeft(t){const e=t.previousSibling;return e instanceof Ct&&this.canMergeWith.has(e)&&this.model.schema.checkMerge(e,t)}_canMergeRight(t){const e=t.nextSibling;return e instanceof Ct&&this.canMergeWith.has(e)&&this.model.schema.checkMerge(t,e)}_tryAutoparagraphing(t){const e=this.writer.createElement("paragraph");this._getAllowedIn(this.position.parent,e)&&this.schema.checkChild(e,t)&&(e._appendChild(t),this._handleNode(e))}_checkAndAutoParagraphToAllowedPosition(t){if(this.schema.checkChild(this.position.parent,t))return!0;if(!this.schema.checkChild(this.position.parent,"paragraph")||!this.schema.checkChild("paragraph",t))return!1;this._insertPartialFragment();const e=this.writer.createElement("paragraph");return this.writer.insert(e,this.position),this._setAffectedBoundaries(this.position),this._lastAutoParagraph=e,this.position=this.writer.createPositionAt(e,0),!0}_checkAndSplitToAllowedPosition(t){const e=this._getAllowedIn(this.position.parent,t);if(!e)return!1;for(e!=this.position.parent&&this._insertPartialFragment();e!=this.position.parent;)if(this.position.isAtStart){const n=this.position.parent;this.position=this.writer.createPositionBefore(n),n.isEmpty&&n.parent===e&&this.writer.remove(n)}else if(this.position.isAtEnd)this.position=this.writer.createPositionAfter(this.position.parent);else{const n=this.writer.createPositionAfter(this.position.parent);this._setAffectedBoundaries(this.position),this.writer.split(this.position),this.position=n,this.canMergeWith.add(this.position.nodeAfter)}return!0}_getAllowedIn(t,e){return this.schema.checkChild(t,e)?t:this.schema.isLimit(t)?null:this._getAllowedIn(t.parent,e)}}function PC(o,t,e,n={}){if(!o.schema.isObject(t))throw new _("insertobject-element-not-an-object",o,{object:t});const i=e||o.document.selection;let r=i;n.findOptimalPosition&&o.schema.isBlock(t)&&(r=o.createSelection(o.schema.findOptimalInsertionRange(i,n.findOptimalPosition)));const s=Wt(i.getSelectedBlocks()),a={};return s&&Object.assign(a,o.schema.getAttributesWithProperty(s,"copyOnReplace",!0)),o.change(c=>{r.isCollapsed||o.deleteContent(r,{doNotAutoparagraph:!0});let l=t;const d=r.anchor.parent;!o.schema.checkChild(d,t)&&o.schema.checkChild(d,"paragraph")&&o.schema.checkChild("paragraph",t)&&(l=c.createElement("paragraph"),c.insert(t,l)),o.schema.setAllowedAttributes(l,a,c);const h=o.insertContent(l,r);return h.isCollapsed||n.setSelection&&function(u,g,p,k){const b=u.model;if(p=="on")return void u.setSelection(g,"on");if(p!="after")throw new _("insertobject-invalid-place-parameter-value",b);let A=g.nextSibling;if(b.schema.isInline(g))return void u.setSelection(g,"after");!(A&&b.schema.checkChild(A,"$text"))&&b.schema.checkChild(g.parent,"paragraph")&&(A=u.createElement("paragraph"),b.schema.setAllowedAttributes(A,k,u),b.insertContent(A,u.createPositionAfter(g))),A&&u.setSelection(A,0)}(c,t,n.setSelection,a),h})}const LC=' ,.?!:;"-()';function OC(o,t){const{isForward:e,walker:n,unit:i,schema:r,treatEmojiAsSingleUnit:s}=o,{type:a,item:c,nextPosition:l}=t;if(a=="text")return o.unit==="word"?function(d,h){let u=d.position.textNode;for(u||(u=h?d.position.nodeAfter:d.position.nodeBefore);u&&u.is("$text");){const g=d.position.offset-u.startOffset;if(jC(u,g,h))u=h?d.position.nodeAfter:d.position.nodeBefore;else{if(RC(u.data,g,h))break;d.next()}}return d.position}(n,e):function(d,h,u){const g=d.position.textNode;if(g){const p=g.data;let k=d.position.offset-g.startOffset;for(;es(p,k)||h=="character"&&os(p,k)||u&&il(p,k);)d.next(),k=d.position.offset-g.startOffset}return d.position}(n,i,s);if(a==(e?"elementStart":"elementEnd")){if(r.isSelectable(c))return O._createAt(c,e?"after":"before");if(r.checkChild(l,"$text"))return l}else{if(r.isLimit(c))return void n.skip(()=>!0);if(r.checkChild(l,"$text"))return l}}function zC(o,t){const e=o.root,n=O._createAt(e,t?"end":0);return t?new B(o,n):new B(n,o)}function RC(o,t,e){const n=t+(e?0:-1);return LC.includes(o.charAt(n))}function jC(o,t,e){return t===(e?o.offsetSize:0)}class FC extends mt(){constructor(){super(),this.markers=new IC,this.document=new _C(this),this.schema=new PA,this._pendingChanges=[],this._currentWriter=null,["deleteContent","modifySelection","getSelectedContent","applyOperation"].forEach(t=>this.decorate(t)),this.on("applyOperation",(t,e)=>{e[0]._validate()},{priority:"highest"}),this.schema.register("$root",{isLimit:!0}),this.schema.register("$container",{allowIn:["$root","$container"]}),this.schema.register("$block",{allowIn:["$root","$container"],isBlock:!0}),this.schema.register("$blockObject",{allowWhere:"$block",isBlock:!0,isObject:!0}),this.schema.register("$inlineObject",{allowWhere:"$text",allowAttributesOf:"$text",isInline:!0,isObject:!0}),this.schema.register("$text",{allowIn:"$block",isInline:!0,isContent:!0}),this.schema.register("$clipboardHolder",{allowContentOf:"$root",allowChildren:"$text",isLimit:!0}),this.schema.register("$documentFragment",{allowContentOf:"$root",allowChildren:"$text",isLimit:!0}),this.schema.register("$marker"),this.schema.addChildCheck((t,e)=>{if(e.name==="$marker")return!0}),MA(this),this.document.registerPostFixer($d),this.on("insertContent",(t,[e,n])=>{t.return=function(i,r,s){return i.change(a=>{const c=s||i.document.selection;c.isCollapsed||i.deleteContent(c,{doNotAutoparagraph:!0});const l=new NC(i,a,c.anchor),d=[];let h;if(r.is("documentFragment")){if(r.markers.size){const p=[];for(const[k,b]of r.markers){const{start:A,end:E}=b,M=A.isEqual(E);p.push({position:A,name:k,isCollapsed:M},{position:E,name:k,isCollapsed:M})}p.sort(({position:k},{position:b})=>k.isBefore(b)?1:-1);for(const{position:k,name:b,isCollapsed:A}of p){let E=null,M=null;const z=k.parent===r&&k.isAtStart,G=k.parent===r&&k.isAtEnd;z||G?A&&(M=z?"start":"end"):(E=a.createElement("$marker"),a.insert(E,k)),d.push({name:b,element:E,collapsed:M})}}h=r.getChildren()}else h=[r];l.handleNodes(h);let u=l.getSelectionRange();if(r.is("documentFragment")&&d.length){const p=u?pe.fromRange(u):null,k={};for(let b=d.length-1;b>=0;b--){const{name:A,element:E,collapsed:M}=d[b],z=!k[A];if(z&&(k[A]=[]),E){const G=a.createPositionAt(E,"before");k[A].push(G),a.remove(E)}else{const G=l.getAffectedRange();if(!G){M&&k[A].push(l.position);continue}M?k[A].push(G[M]):k[A].push(z?G.start:G.end)}}for(const[b,[A,E]]of Object.entries(k))A&&E&&A.root===E.root&&a.addMarker(b,{usingOperation:!0,affectsData:!0,range:new B(A,E)});p&&(u=p.toRange(),p.detach())}u&&(c instanceof ze?a.setSelection(u):c.setTo(u));const g=l.getAffectedRange()||i.createRange(c.anchor);return l.destroy(),g})}(this,e,n)}),this.on("insertObject",(t,[e,n,i])=>{t.return=PC(this,e,n,i)}),this.on("canEditAt",t=>{const e=!this.document.isReadOnly;t.return=e,e||t.stop()})}change(t){try{return this._pendingChanges.length===0?(this._pendingChanges.push({batch:new go,callback:t}),this._runPendingChanges()[0]):t(this._currentWriter)}catch(e){_.rethrowUnexpectedError(e,this)}}enqueueChange(t,e){try{t?typeof t=="function"?(e=t,t=new go):t instanceof go||(t=new go(t)):t=new go,this._pendingChanges.push({batch:t,callback:e}),this._pendingChanges.length==1&&this._runPendingChanges()}catch(n){_.rethrowUnexpectedError(n,this)}}applyOperation(t){t._execute()}insertContent(t,e,n,...i){const r=qs(e,n);return this.fire("insertContent",[t,r,n,...i])}insertObject(t,e,n,i,...r){const s=qs(e,n);return this.fire("insertObject",[t,s,i,i,...r])}deleteContent(t,e){BC(this,t,e)}modifySelection(t,e){(function(n,i,r={}){const s=n.schema,a=r.direction!="backward",c=r.unit?r.unit:"character",l=!!r.treatEmojiAsSingleUnit,d=i.focus,h=new tn({boundaries:zC(d,a),singleCharacters:!0,direction:a?"forward":"backward"}),u={walker:h,schema:s,isForward:a,unit:c,treatEmojiAsSingleUnit:l};let g;for(;g=h.next();){if(g.done)return;const p=OC(u,g.value);if(p)return void(i instanceof ze?n.change(k=>{k.setSelectionFocus(p)}):i.setFocus(p))}})(this,t,e)}getSelectedContent(t){return function(e,n){return e.change(i=>{const r=i.createDocumentFragment(),s=n.getFirstRange();if(!s||s.isCollapsed)return r;const a=s.start.root,c=s.start.getCommonPath(s.end),l=a.getNodeByPath(c);let d;d=s.start.parent==s.end.parent?s:i.createRange(i.createPositionAt(l,s.start.path[c.length]),i.createPositionAt(l,s.end.path[c.length]+1));const h=d.end.offset-d.start.offset;for(const u of d.getItems({shallow:!0}))u.is("$textProxy")?i.appendText(u.data,u.getAttributes(),r):i.append(i.cloneElement(u,!0),r);if(d!=s){const u=s._getTransformedByMove(d.start,i.createPositionAt(r,0),h)[0],g=i.createRange(i.createPositionAt(r,0),u.start);zh(i.createRange(u.end,i.createPositionAt(r,"end")),i),zh(g,i)}return r})}(this,t)}hasContent(t,e={}){const n=t instanceof B?t:B._createIn(t);if(n.isCollapsed)return!1;const{ignoreWhitespaces:i=!1,ignoreMarkers:r=!1}=e;if(!r){for(const s of this.markers.getMarkersIntersectingRange(n))if(s.affectsData)return!0}for(const s of n.getItems())if(this.schema.isContent(s)&&(!s.is("$textProxy")||!i||s.data.search(/\S/)!==-1))return!0;return!1}canEditAt(t){const e=qs(t);return this.fire("canEditAt",[e])}createPositionFromPath(t,e,n){return new O(t,e,n)}createPositionAt(t,e){return O._createAt(t,e)}createPositionAfter(t){return O._createAfter(t)}createPositionBefore(t){return O._createBefore(t)}createRange(t,e){return new B(t,e)}createRangeIn(t){return B._createIn(t)}createRangeOn(t){return B._createOn(t)}createSelection(...t){return new ge(...t)}createBatch(t){return new go(t)}createOperationFromJSON(t){return nC.fromJSON(t,this.document)}destroy(){this.document.destroy(),this.stopListening()}_runPendingChanges(){const t=[];this.fire("_beforeChanges");try{for(;this._pendingChanges.length;){const e=this._pendingChanges[0].batch;this._currentWriter=new TC(this,e);const n=this._pendingChanges[0].callback(this._currentWriter);t.push(n),this.document._handleChangeBlock(this._currentWriter),this._pendingChanges.shift(),this._currentWriter=null}}finally{this._pendingChanges.length=0,this._currentWriter=null,this.fire("_afterChanges")}return t}}function qs(o,t){if(o)return o instanceof ge||o instanceof ze?o:o instanceof jn?t||t===0?new ge(o,t):o.is("rootElement")?new ge(o,"in"):new ge(o,"on"):new ge(o)}class VC extends fn{constructor(){super(...arguments),this.domEventType="click"}onDomEvent(t){this.fire(t.type,t)}}class Gs extends fn{constructor(){super(...arguments),this.domEventType=["mousedown","mouseup","mouseover","mouseout"]}onDomEvent(t){this.fire(t.type,t)}}class on{constructor(t){this.document=t}createDocumentFragment(t){return new Rn(this.document,t)}createElement(t,e,n){return new he(this.document,t,e,n)}createText(t){return new vt(this.document,t)}clone(t,e=!1){return t._clone(e)}appendChild(t,e){return e._appendChild(t)}insertChild(t,e,n){return n._insertChild(t,e)}removeChildren(t,e,n){return n._removeChildren(t,e)}remove(t){const e=t.parent;return e?this.removeChildren(e.getChildIndex(t),1,e):[]}replace(t,e){const n=t.parent;if(n){const i=n.getChildIndex(t);return this.removeChildren(i,1,n),this.insertChild(i,e,n),!0}return!1}unwrapElement(t){const e=t.parent;if(e){const n=e.getChildIndex(t);this.remove(t),this.insertChild(n,t.getChildren(),e)}}rename(t,e){const n=new he(this.document,t,e.getAttributes(),e.getChildren());return this.replace(e,n)?n:null}setAttribute(t,e,n){n._setAttribute(t,e)}removeAttribute(t,e){e._removeAttribute(t)}addClass(t,e){e._addClass(t)}removeClass(t,e){e._removeClass(t)}setStyle(t,e,n){de(t)&&n===void 0?e._setStyle(t):n._setStyle(t,e)}removeStyle(t,e){e._removeStyle(t)}setCustomProperty(t,e,n){n._setCustomProperty(t,e)}removeCustomProperty(t,e){return e._removeCustomProperty(t)}createPositionAt(t,e){return V._createAt(t,e)}createPositionAfter(t){return V._createAfter(t)}createPositionBefore(t){return V._createBefore(t)}createRange(t,e){return new nt(t,e)}createRangeOn(t){return nt._createOn(t)}createRangeIn(t){return nt._createIn(t)}createSelection(...t){return new Pe(...t)}}class HC{constructor(){this._commands=new Map}add(t,e){this._commands.set(t,e)}get(t){return this._commands.get(t)}execute(t,...e){const n=this.get(t);if(!n)throw new _("commandcollection-command-not-found",this,{commandName:t});return n.execute(...e)}*names(){yield*this._commands.keys()}*commands(){yield*this._commands.values()}[Symbol.iterator](){return this._commands[Symbol.iterator]()}destroy(){for(const t of this.commands())t.destroy()}}class UC extends mt(){constructor(t={}){super();const e=this.constructor,n=t.language||e.defaultConfig&&e.defaultConfig.language;this._context=t.context||new zl({language:n}),this._context._addEditor(this,!t.context);const i=Array.from(e.builtinPlugins||[]);this.config=new Oc(t,e.defaultConfig),this.config.define("plugins",i),this.config.define(this._context._getEditorConfig()),this.plugins=new Ol(this,i,this._context.plugins),this.locale=this._context.locale,this.t=this.locale.t,this._readOnlyLocks=new Set,this.commands=new HC,this.set("state","initializing"),this.once("ready",()=>this.state="ready",{priority:"high"}),this.once("destroy",()=>this.state="destroyed",{priority:"high"}),this.model=new FC,this.on("change:isReadOnly",()=>{this.model.document.isReadOnly=this.isReadOnly});const r=new v0;this.data=new tC(this.model,r),this.editing=new BA(this.model,r),this.editing.view.document.bind("isReadOnly").to(this),this.conversion=new eC([this.editing.downcastDispatcher,this.data.downcastDispatcher],this.data.upcastDispatcher),this.conversion.addAlias("dataDowncast",this.data.downcastDispatcher),this.conversion.addAlias("editingDowncast",this.editing.downcastDispatcher),this.keystrokes=new Vw(this),this.keystrokes.listenTo(this.editing.view.document)}get isReadOnly(){return this._readOnlyLocks.size>0}set isReadOnly(t){throw new _("editor-isreadonly-has-no-setter")}enableReadOnlyMode(t){if(typeof t!="string"&&typeof t!="symbol")throw new _("editor-read-only-lock-id-invalid",null,{lockId:t});this._readOnlyLocks.has(t)||(this._readOnlyLocks.add(t),this._readOnlyLocks.size===1&&this.fire("change:isReadOnly","isReadOnly",!0,!1))}disableReadOnlyMode(t){if(typeof t!="string"&&typeof t!="symbol")throw new _("editor-read-only-lock-id-invalid",null,{lockId:t});this._readOnlyLocks.has(t)&&(this._readOnlyLocks.delete(t),this._readOnlyLocks.size===0&&this.fire("change:isReadOnly","isReadOnly",!1,!0))}initPlugins(){const t=this.config,e=t.get("plugins"),n=t.get("removePlugins")||[],i=t.get("extraPlugins")||[],r=t.get("substitutePlugins")||[];return this.plugins.init(e.concat(i),n,r)}destroy(){let t=Promise.resolve();return this.state=="initializing"&&(t=new Promise(e=>this.once("ready",e))),t.then(()=>{this.fire("destroy"),this.stopListening(),this.commands.destroy()}).then(()=>this.plugins.destroy()).then(()=>{this.model.destroy(),this.data.destroy(),this.editing.destroy(),this.keystrokes.destroy()}).then(()=>this._context._removeEditor(this))}execute(t,...e){try{return this.commands.execute(t,...e)}catch(n){_.rethrowUnexpectedError(n,this)}}focus(){this.editing.view.focus()}static create(...t){throw new Error("This is an abstract method.")}}function Zi(o){return class extends o{setData(t){this.data.set(t)}getData(t){return this.data.get(t)}}}{const o=Zi(Object);Zi.setData=o.prototype.setData,Zi.getData=o.prototype.getData}function Ws(o){return class extends o{updateSourceElement(t){if(!this.sourceElement)throw new _("editor-missing-sourceelement",this);const e=this.config.get("updateSourceElementOnDestroy"),n=this.sourceElement instanceof HTMLTextAreaElement;if(!e&&!n)return void Gc(this.sourceElement,"");const i=typeof t=="string"?t:this.data.get();Gc(this.sourceElement,i)}}}Ws.updateSourceElement=Ws(Object).prototype.updateSourceElement;class Rh extends Li{static get pluginName(){return"PendingActions"}init(){this.set("hasAny",!1),this._actions=new Me({idProperty:"_id"}),this._actions.delegate("add","remove").to(this)}add(t){if(typeof t!="string")throw new _("pendingactions-add-invalid-message",this);const e=new(mt());return e.set("message",t),this._actions.add(e),this.hasAny=!0,e}remove(t){this._actions.remove(t),this.hasAny=!!this._actions.length}get first(){return this._actions.get(0)}[Symbol.iterator](){return this._actions[Symbol.iterator]()}}const ot={bold:'',cancel:'',caption:'',check:'',cog:'',colorPalette:'',eraser:'',history:'',image:'',imageUpload:'',imageAssetManager:'',imageUrl:'',lowVision:'',textAlternative:'',loupe:'',previousArrow:'',nextArrow:'',importExport:'',paragraph:'',plus:'',text:'',alignBottom:'',alignMiddle:'',alignTop:'',alignLeft:'',alignCenter:'',alignRight:'',alignJustify:'',objectLeft:'',objectCenter:'',objectRight:'',objectFullWidth:'',objectInline:'',objectBlockLeft:'',objectBlockRight:'',objectSizeFull:'',objectSizeLarge:'',objectSizeSmall:'',objectSizeMedium:'',pencil:'',pilcrow:'',quote:'',threeVerticalDots:'',dragIndicator:'',redo:'',undo:'',bulletedList:'',numberedList:'',todoList:'',codeBlock:'',browseFiles:'',heading1:'',heading2:'',heading3:'',heading4:'',heading5:'',heading6:'',horizontalLine:'',html:'',indent:'',outdent:'',table:''};var jh=N(5314),qC={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(jh.c,qC),jh.c.locals;const{threeVerticalDots:Fh}=ot,GC={alignLeft:ot.alignLeft,bold:ot.bold,importExport:ot.importExport,paragraph:ot.paragraph,plus:ot.plus,text:ot.text,threeVerticalDots:ot.threeVerticalDots,pilcrow:ot.pilcrow,dragIndicator:ot.dragIndicator};class $s extends tt{constructor(t,e){super(t);const n=this.bindTemplate,i=this.t;this.options=e||{},this.set("ariaLabel",i("Editor toolbar")),this.set("maxWidth","auto"),this.items=this.createCollection(),this.focusTracker=new Qt,this.keystrokes=new ie,this.set("class",void 0),this.set("isCompact",!1),this.itemsView=new WC(t),this.children=this.createCollection(),this.children.add(this.itemsView),this.focusables=this.createCollection();const r=t.uiLanguageDirection==="rtl";this._focusCycler=new _e({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:[r?"arrowright":"arrowleft","arrowup"],focusNext:[r?"arrowleft":"arrowright","arrowdown"]}});const s=["ck","ck-toolbar",n.to("class"),n.if("isCompact","ck-toolbar_compact")];var a;this.options.shouldGroupWhenFull&&this.options.isFloating&&s.push("ck-toolbar_floating"),this.setTemplate({tag:"div",attributes:{class:s,role:"toolbar","aria-label":n.to("ariaLabel"),style:{maxWidth:n.to("maxWidth")},tabindex:-1},children:this.children,on:{mousedown:(a=this,a.bindTemplate.to(c=>{c.target===a.element&&c.preventDefault()}))}}),this._behavior=this.options.shouldGroupWhenFull?new KC(this):new $C(this)}render(){super.render(),this.focusTracker.add(this.element);for(const t of this.items)this.focusTracker.add(t.element);this.items.on("add",(t,e)=>{this.focusTracker.add(e.element)}),this.items.on("remove",(t,e)=>{this.focusTracker.remove(e.element)}),this.keystrokes.listenTo(this.element),this._behavior.render(this)}destroy(){return this._behavior.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy(),super.destroy()}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}fillFromConfig(t,e,n){this.items.addMany(this._buildItemsFromConfig(t,e,n))}_buildItemsFromConfig(t,e,n){const i=Bl(t),r=n||i.removeItems;return this._cleanItemsConfiguration(i.items,e,r).map(s=>bt(s)?this._createNestedToolbarDropdown(s,e,r):s==="|"?new Il:s==="-"?new zw:e.create(s)).filter(s=>!!s)}_cleanItemsConfiguration(t,e,n){const i=t.filter((r,s,a)=>r==="|"||n.indexOf(r)===-1&&(r==="-"?!this.options.shouldGroupWhenFull||(Q("toolbarview-line-break-ignored-when-grouping-items",a),!1):!(!bt(r)&&!e.has(r))||(Q("toolbarview-item-unavailable",{item:r}),!1)));return this._cleanSeparatorsAndLineBreaks(i)}_cleanSeparatorsAndLineBreaks(t){const e=s=>s!=="-"&&s!=="|",n=t.length,i=t.findIndex(e);if(i===-1)return[];const r=n-t.slice().reverse().findIndex(e);return t.slice(i,r).filter((s,a,c)=>e(s)?!0:!(a>0&&c[a-1]===s))}_createNestedToolbarDropdown(t,e,n){let{label:i,icon:r,items:s,tooltip:a=!0,withText:c=!1}=t;if(s=this._cleanItemsConfiguration(s,e,n),!s.length)return null;const l=rn(this.locale);return i||Q("toolbarview-nested-toolbar-dropdown-missing-label",t),l.class="ck-toolbar__nested-toolbar-dropdown",l.buttonView.set({label:i,tooltip:a,withText:!!c}),r!==!1?l.buttonView.icon=GC[r]||r||Fh:l.buttonView.withText=!0,Ks(l,()=>l.toolbarView._buildItemsFromConfig(s,e,n)),l}}class WC extends tt{constructor(t){super(t),this.children=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-toolbar__items"]},children:this.children})}}class $C{constructor(t){const e=t.bindTemplate;t.set("isVertical",!1),t.itemsView.children.bindTo(t.items).using(n=>n),t.focusables.bindTo(t.items).using(n=>Uo(n)?n:null),t.extendTemplate({attributes:{class:[e.if("isVertical","ck-toolbar_vertical")]}})}render(){}destroy(){}}class KC{constructor(t){this.resizeObserver=null,this.cachedPadding=null,this.shouldUpdateGroupingOnNextResize=!1,this.view=t,this.viewChildren=t.children,this.viewFocusables=t.focusables,this.viewItemsView=t.itemsView,this.viewFocusTracker=t.focusTracker,this.viewLocale=t.locale,this.ungroupedItems=t.createCollection(),this.groupedItems=t.createCollection(),this.groupedItemsDropdown=this._createGroupedItemsDropdown(),t.itemsView.children.bindTo(this.ungroupedItems).using(e=>e),this.ungroupedItems.on("change",this._updateFocusCyclableItems.bind(this)),t.children.on("change",this._updateFocusCyclableItems.bind(this)),t.items.on("change",(e,n)=>{const i=n.index,r=Array.from(n.added);for(const s of n.removed)i>=this.ungroupedItems.length?this.groupedItems.remove(s):this.ungroupedItems.remove(s);for(let s=i;sthis.ungroupedItems.length?this.groupedItems.add(a,s-this.ungroupedItems.length):this.ungroupedItems.add(a,s)}this._updateGrouping()}),t.extendTemplate({attributes:{class:["ck-toolbar_grouping"]}})}render(t){this.viewElement=t.element,this._enableGroupingOnResize(),this._enableGroupingOnMaxWidthChange(t)}destroy(){this.groupedItemsDropdown.destroy(),this.resizeObserver.destroy()}_updateGrouping(){if(!this.viewElement.ownerDocument.body.contains(this.viewElement))return;if(!Bn(this.viewElement))return void(this.shouldUpdateGroupingOnNextResize=!0);const t=this.groupedItems.length;let e;for(;this._areItemsOverflowing;)this._groupLastItem(),e=!0;if(!e&&this.groupedItems.length){for(;this.groupedItems.length&&!this._areItemsOverflowing;)this._ungroupFirstItem();this._areItemsOverflowing&&this._groupLastItem()}this.groupedItems.length!==t&&this.view.fire("groupedItemsUpdate")}get _areItemsOverflowing(){if(!this.ungroupedItems.length)return!1;const t=this.viewElement,e=this.viewLocale.uiLanguageDirection,n=new dt(t.lastChild),i=new dt(t);if(!this.cachedPadding){const r=$.window.getComputedStyle(t),s=e==="ltr"?"paddingRight":"paddingLeft";this.cachedPadding=Number.parseInt(r[s])}return e==="ltr"?n.right>i.right-this.cachedPadding:n.left{t&&t===e.contentRect.width&&!this.shouldUpdateGroupingOnNextResize||(this.shouldUpdateGroupingOnNextResize=!1,this._updateGrouping(),t=e.contentRect.width)}),this._updateGrouping()}_enableGroupingOnMaxWidthChange(t){t.on("change:maxWidth",()=>{this._updateGrouping()})}_groupLastItem(){this.groupedItems.length||(this.viewChildren.add(new Il),this.viewChildren.add(this.groupedItemsDropdown),this.viewFocusTracker.add(this.groupedItemsDropdown.element)),this.groupedItems.add(this.ungroupedItems.remove(this.ungroupedItems.last),0)}_ungroupFirstItem(){this.ungroupedItems.add(this.groupedItems.remove(this.groupedItems.first)),this.groupedItems.length||(this.viewChildren.remove(this.groupedItemsDropdown),this.viewChildren.remove(this.viewChildren.last),this.viewFocusTracker.remove(this.groupedItemsDropdown.element))}_createGroupedItemsDropdown(){const t=this.viewLocale,e=t.t,n=rn(t);return n.class="ck-toolbar__grouped-dropdown",n.panelPosition=t.uiLanguageDirection==="ltr"?"sw":"se",Ks(n,this.groupedItems),n.buttonView.set({label:e("Show more items"),tooltip:!0,tooltipPosition:t.uiLanguageDirection==="rtl"?"se":"sw",icon:Fh}),n}_updateFocusCyclableItems(){this.viewFocusables.clear(),this.ungroupedItems.map(t=>{Uo(t)&&this.viewFocusables.add(t)}),this.groupedItems.length&&this.viewFocusables.add(this.groupedItemsDropdown)}}class Ji extends tt{constructor(t){super(t);const e=this.bindTemplate;this.set("isVisible",!0),this.children=this.createCollection(),this.setTemplate({tag:"li",attributes:{class:["ck","ck-list__item",e.if("isVisible","ck-hidden",n=>!n)],role:"presentation"},children:this.children})}focus(){this.children.first&&this.children.first.focus()}}class Vh extends tt{constructor(t){super(t),this.setTemplate({tag:"li",attributes:{class:["ck","ck-list__separator"]}})}}class Xi extends tt{constructor(t,e=new cs){super(t);const n=this.bindTemplate,i=new Uh(t);this.set({label:"",isVisible:!0}),this.labelView=e,this.labelView.bind("text").to(this,"label"),this.children=this.createCollection(),this.children.addMany([this.labelView,i]),i.set({role:"group",ariaLabelledBy:e.id}),i.focusTracker.destroy(),i.keystrokes.destroy(),this.items=i.items,this.setTemplate({tag:"li",attributes:{role:"presentation",class:["ck","ck-list__group",n.if("isVisible","ck-hidden",r=>!r)]},children:this.children})}focus(){if(this.items){const t=this.items.find(e=>!(e instanceof Vh));t&&t.focus()}}}var Hh=N(1672),YC={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Hh.c,YC),Hh.c.locals;class Uh extends tt{constructor(t){super(t),this._listItemGroupToChangeListeners=new WeakMap;const e=this.bindTemplate;this.focusables=new Ce,this.items=this.createCollection(),this.focusTracker=new Qt,this.keystrokes=new ie,this._focusCycler=new _e({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"arrowup",focusNext:"arrowdown"}}),this.set("ariaLabel",void 0),this.set("ariaLabelledBy",void 0),this.set("role",void 0),this.setTemplate({tag:"ul",attributes:{class:["ck","ck-reset","ck-list"],role:e.to("role"),"aria-label":e.to("ariaLabel"),"aria-labelledby":e.to("ariaLabelledBy")},children:this.items})}render(){super.render();for(const t of this.items)t instanceof Xi?this._registerFocusableItemsGroup(t):t instanceof Ji&&this._registerFocusableListItem(t);this.items.on("change",(t,e)=>{for(const n of e.removed)n instanceof Xi?this._deregisterFocusableItemsGroup(n):n instanceof Ji&&this._deregisterFocusableListItem(n);for(const n of Array.from(e.added).reverse())n instanceof Xi?this._registerFocusableItemsGroup(n,e.index):this._registerFocusableListItem(n,e.index)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}focusFirst(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}_registerFocusableListItem(t,e){this.focusTracker.add(t.element),this.focusables.add(t,e)}_deregisterFocusableListItem(t){this.focusTracker.remove(t.element),this.focusables.remove(t)}_getOnGroupItemsChangeCallback(t){return(e,n)=>{for(const i of n.removed)this._deregisterFocusableListItem(i);for(const i of Array.from(n.added).reverse())this._registerFocusableListItem(i,this.items.getIndex(t)+n.index)}}_registerFocusableItemsGroup(t,e){Array.from(t.items).forEach((i,r)=>{const s=e!==void 0?e+r:void 0;this._registerFocusableListItem(i,s)});const n=this._getOnGroupItemsChangeCallback(t);this._listItemGroupToChangeListeners.set(t,n),t.items.on("change",n)}_deregisterFocusableItemsGroup(t){for(const e of t.items)this._deregisterFocusableListItem(e);t.items.off("change",this._listItemGroupToChangeListeners.get(t)),this._listItemGroupToChangeListeners.delete(t)}}var qh=N(9544),QC={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(qh.c,QC),qh.c.locals;class tr extends tt{constructor(t,e){super(t);const n=this.bindTemplate;this.set("class",void 0),this.set("labelStyle",void 0),this.set("icon",void 0),this.set("isEnabled",!0),this.set("isOn",!1),this.set("isToggleable",!1),this.set("isVisible",!0),this.set("keystroke",void 0),this.set("withKeystroke",!1),this.set("label",void 0),this.set("tabindex",-1),this.set("tooltip",!1),this.set("tooltipPosition","s"),this.set("type","button"),this.set("withText",!1),this.children=this.createCollection(),this.actionView=this._createActionView(e),this.arrowView=this._createArrowView(),this.keystrokes=new ie,this.focusTracker=new Qt,this.setTemplate({tag:"div",attributes:{class:["ck","ck-splitbutton",n.to("class"),n.if("isVisible","ck-hidden",i=>!i),this.arrowView.bindTemplate.if("isOn","ck-splitbutton_open")]},children:this.children})}render(){super.render(),this.children.add(this.actionView),this.children.add(this.arrowView),this.focusTracker.add(this.actionView.element),this.focusTracker.add(this.arrowView.element),this.keystrokes.listenTo(this.element),this.keystrokes.set("arrowright",(t,e)=>{this.focusTracker.focusedElement===this.actionView.element&&(this.arrowView.focus(),e())}),this.keystrokes.set("arrowleft",(t,e)=>{this.focusTracker.focusedElement===this.arrowView.element&&(this.actionView.focus(),e())})}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this.actionView.focus()}_createActionView(t){const e=t||new wt;return t||e.bind("icon","isEnabled","isOn","isToggleable","keystroke","label","tabindex","tooltip","tooltipPosition","type","withText").to(this),e.extendTemplate({attributes:{class:"ck-splitbutton__action"}}),e.delegate("execute").to(this),e}_createArrowView(){const t=new wt,e=t.bindTemplate;return t.icon=ss,t.extendTemplate({attributes:{class:["ck-splitbutton__arrow"],"data-cke-tooltip-disabled":e.to("isOn"),"aria-haspopup":!0,"aria-expanded":e.to("isOn",n=>String(n))}}),t.bind("isEnabled").to(this),t.bind("label").to(this),t.bind("tooltip").to(this),t.delegate("execute").to(this,"open"),t}}var Gh=N(4264),ZC={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Gh.c,ZC),Gh.c.locals;var Wh=N(9904),JC={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Wh.c,JC),Wh.c.locals;function rn(o,t=Ow){const e=typeof t=="function"?new t(o):t,n=new Pw(o),i=new ds(o,e,n);return e.bind("isEnabled").to(i),e instanceof tr?e.arrowView.bind("isOn").to(i,"isOpen"):e.bind("isOn").to(i,"isOpen"),function(r){(function(s){s.on("render",()=>{v({emitter:s,activator:()=>s.isOpen,callback:()=>{s.isOpen=!1},contextElements:()=>[s.element,...s.focusTracker._elements]})})})(r),function(s){s.on("execute",a=>{a.source instanceof Bi||(s.isOpen=!1)})}(r),function(s){s.focusTracker.on("change:isFocused",(a,c,l)=>{s.isOpen&&!l&&(s.isOpen=!1)})}(r),function(s){s.keystrokes.set("arrowdown",(a,c)=>{s.isOpen&&(s.panelView.focus(),c())}),s.keystrokes.set("arrowup",(a,c)=>{s.isOpen&&(s.panelView.focusLast(),c())})}(r),function(s){s.on("change:isOpen",(a,c,l)=>{if(l)return;const d=s.panelView.element;d&&d.contains($.document.activeElement)&&s.buttonView.focus()})}(r),function(s){s.on("change:isOpen",(a,c,l)=>{l&&s.panelView.focus()},{priority:"low"})}(r)}(i),i}function Ks(o,t,e={}){o.extendTemplate({attributes:{class:["ck-toolbar-dropdown"]}}),o.isOpen?$h(o,t,e):o.once("change:isOpen",()=>$h(o,t,e),{priority:"highest"}),e.enableActiveItemFocusOnDropdownOpen&&Qh(o,()=>o.toolbarView.items.find(n=>n.isOn))}function $h(o,t,e){const n=o.locale,i=n.t,r=o.toolbarView=new $s(n),s=typeof t=="function"?t():t;r.ariaLabel=e.ariaLabel||i("Dropdown toolbar"),e.maxWidth&&(r.maxWidth=e.maxWidth),e.class&&(r.class=e.class),e.isCompact&&(r.isCompact=e.isCompact),e.isVertical&&(r.isVertical=!0),s instanceof Ce?r.items.bindTo(s).using(a=>a):r.items.addMany(s),o.panelView.children.add(r),r.items.delegate("execute").to(o)}function Kh(o,t,e={}){o.isOpen?Yh(o,t,e):o.once("change:isOpen",()=>Yh(o,t,e),{priority:"highest"}),Qh(o,()=>o.listView.items.find(n=>n instanceof Ji&&n.children.first.isOn))}function Yh(o,t,e){const n=o.locale,i=o.listView=new Uh(n),r=typeof t=="function"?t():t;i.ariaLabel=e.ariaLabel,i.role=e.role,Zh(o,i.items,r,n),o.panelView.children.add(i),i.items.delegate("execute").to(o)}function Qh(o,t){o.on("change:isOpen",()=>{if(!o.isOpen)return;const e=t();e&&(typeof e.focus=="function"?e.focus():Q("ui-dropdown-focus-child-on-open-child-missing-focus",{view:e}))},{priority:At.low-10})}function Zh(o,t,e,n){t.bindTo(e).using(i=>{if(i.type==="separator")return new Vh(n);if(i.type==="group"){const r=new Xi(n);return r.set({label:i.label}),Zh(o,r.items,i.items,n),r.items.delegate("execute").to(o),r}if(i.type==="button"||i.type==="switchbutton"){const r=new Ji(n);let s;return i.type==="button"?(s=new wt(n),s.extendTemplate({attributes:{"aria-checked":s.bindTemplate.to("isOn")}})):s=new Bi(n),s.bind(...Object.keys(i.model)).to(i.model),s.delegate("execute").to(r),r.children.add(s),r}return null})}const er=(o,t,e)=>{const n=new Bw(o.locale);return n.set({id:t,ariaDescribedById:e}),n.bind("isReadOnly").to(o,"isEnabled",i=>!i),n.bind("hasError").to(o,"errorText",i=>!!i),n.on("input",()=>{o.errorText=null}),o.bind("isEmpty","isFocused","placeholder").to(n),n};var Jh=N(3339),XC={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Jh.c,XC),Jh.c.locals;var Xh=N(4144),t_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Xh.c,t_),Xh.c.locals;class e_{constructor(t){this._components=new Map,this.editor=t}*names(){for(const t of this._components.values())yield t.originalName}add(t,e){this._components.set(Ys(t),{callback:e,originalName:t})}create(t){if(!this.has(t))throw new _("componentfactory-item-missing",this,{name:t});return this._components.get(Ys(t)).callback(this.editor.locale)}has(t){return this._components.has(Ys(t))}}function Ys(o){return String(o).toLowerCase()}var tu=N(7128),n_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(tu.c,n_),tu.c.locals;class o_ extends tt{constructor(t,e={}){super(t);const n=this.bindTemplate;this.set("label",e.label||""),this.set("class",e.class||null),this.children=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-form__header",n.to("class")]},children:this.children}),e.icon&&(this.iconView=new mn,this.iconView.content=e.icon,this.children.add(this.iconView));const i=new tt(t);i.setTemplate({tag:"h2",attributes:{class:["ck","ck-form__header__label"]},children:[{text:n.to("label")}]}),this.children.add(i)}}var eu=N(7132),i_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(eu.c,i_),eu.c.locals;class r_ extends tt{constructor(t){super(t),this.children=this.createCollection(),this.keystrokes=new ie,this._focusTracker=new Qt,this._focusables=new Ce,this.focusCycler=new _e({focusables:this._focusables,focusTracker:this._focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-dialog__actions"]},children:this.children})}render(){super.render(),this.keystrokes.listenTo(this.element)}setButtons(t){for(const e of t){const n=new wt(this.locale);let i;for(i in n.on("execute",()=>e.onExecute()),e.onCreate&&e.onCreate(n),e)i!="onExecute"&&i!="onCreate"&&n.set(i,e[i]);this.children.add(n)}this._updateFocusCyclableItems()}focus(t){t===-1?this.focusCycler.focusLast():this.focusCycler.focusFirst()}_updateFocusCyclableItems(){Array.from(this.children).forEach(t=>{this._focusables.add(t),this._focusTracker.add(t.element)})}}class s_ extends tt{constructor(t){super(t),this.children=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-dialog__content"]},children:this.children})}reset(){for(;this.children.length;)this.children.remove(0)}}var nu=N(4040),a_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(nu.c,a_),nu.c.locals;const Qs="screen-center",c_="editor-center",l_="editor-top-side",d_="editor-top-center",h_="editor-bottom-center",u_="editor-above-center",g_="editor-below-center",ou=ro("px"),iu=class extends function(o){return class extends o{constructor(...t){super(...t),this._onDragBound=this._onDrag.bind(this),this._onDragEndBound=this._onDragEnd.bind(this),this._lastDraggingCoordinates={x:0,y:0},this.on("render",()=>{this._attachListeners()}),this.set("isDragging",!1)}_attachListeners(){this.listenTo(this.element,"mousedown",this._onDragStart.bind(this)),this.listenTo(this.element,"touchstart",this._onDragStart.bind(this))}_attachDragListeners(){this.listenTo($.document,"mouseup",this._onDragEndBound),this.listenTo($.document,"touchend",this._onDragEndBound),this.listenTo($.document,"mousemove",this._onDragBound),this.listenTo($.document,"touchmove",this._onDragBound)}_detachDragListeners(){this.stopListening($.document,"mouseup",this._onDragEndBound),this.stopListening($.document,"touchend",this._onDragEndBound),this.stopListening($.document,"mousemove",this._onDragBound),this.stopListening($.document,"touchmove",this._onDragBound)}_onDragStart(t,e){if(!this._isHandleElementPressed(e))return;this._attachDragListeners();let n=0,i=0;e instanceof MouseEvent?(n=e.clientX,i=e.clientY):(n=e.touches[0].clientX,i=e.touches[0].clientY),this._lastDraggingCoordinates={x:n,y:i},this.isDragging=!0}_onDrag(t,e){if(!this.isDragging)return void this._detachDragListeners();let n=0,i=0;e instanceof MouseEvent?(n=e.clientX,i=e.clientY):(n=e.touches[0].clientX,i=e.touches[0].clientY),e.preventDefault(),this.fire("drag",{deltaX:Math.round(n-this._lastDraggingCoordinates.x),deltaY:Math.round(i-this._lastDraggingCoordinates.y)}),this._lastDraggingCoordinates={x:n,y:i}}_onDragEnd(){this._detachDragListeners(),this.isDragging=!1}_isHandleElementPressed(t){return!!this.dragHandleElement&&(this.dragHandleElement===t.target||t.target instanceof HTMLElement&&this.dragHandleElement.contains(t.target))}}}(tt){constructor(o,{getCurrentDomRoot:t,getViewportOffset:e}){super(o),this.wasMoved=!1;const n=this.bindTemplate,i=o.t;this.set("className",""),this.set("ariaLabel",i("Editor dialog")),this.set("isModal",!1),this.set("position",Qs),this.set("_isVisible",!1),this.set("_isTransparent",!1),this.set("_top",0),this.set("_left",0),this._getCurrentDomRoot=t,this._getViewportOffset=e,this.decorate("moveTo"),this.parts=this.createCollection(),this.keystrokes=new ie,this.focusTracker=new Qt,this._focusables=new Ce,this._focusCycler=new _e({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-dialog-overlay",n.if("isModal","ck-dialog-overlay__transparent",r=>!r),n.if("_isVisible","ck-hidden",r=>!r)],tabindex:"-1"},children:[{tag:"div",attributes:{tabindex:"-1",class:["ck","ck-dialog",n.to("className")],role:"dialog","aria-label":n.to("ariaLabel"),style:{top:n.to("_top",r=>ou(r)),left:n.to("_left",r=>ou(r)),visibility:n.if("_isTransparent","hidden")}},children:this.parts}]})}render(){super.render(),this.keystrokes.set("Esc",(o,t)=>{this.fire("close",{source:"escKeyPress"}),t()}),this.on("drag",(o,{deltaX:t,deltaY:e})=>{this.wasMoved=!0,this.moveBy(t,e)}),this.listenTo($.window,"resize",()=>{this._isVisible&&!this.wasMoved&&this.updatePosition()}),this.listenTo($.document,"scroll",()=>{this._isVisible&&!this.wasMoved&&this.updatePosition()}),this.on("change:_isVisible",(o,t,e)=>{e&&(this._isTransparent=!0,setTimeout(()=>{this.updatePosition(),this._isTransparent=!1,this.focus()},10))}),this.keystrokes.listenTo(this.element)}get dragHandleElement(){return this.headerView?this.headerView.element:null}setupParts({icon:o,title:t,hasCloseButton:e=!0,content:n,actionButtons:i}){t&&(this.headerView=new o_(this.locale,{icon:o}),e&&(this.closeButtonView=this._createCloseButton(),this.headerView.children.add(this.closeButtonView)),this.headerView.label=t,this.ariaLabel=t,this.parts.add(this.headerView,0)),n&&(n instanceof tt&&(n=[n]),this.contentView=new s_(this.locale),this.contentView.children.addMany(n),this.parts.add(this.contentView)),i&&(this.actionsView=new r_(this.locale),this.actionsView.setButtons(i),this.parts.add(this.actionsView)),this._updateFocusCyclableItems()}focus(){this._focusCycler.focusFirst()}moveTo(o,t){const e=this._getViewportRect(),n=this._getDialogRect();o+n.width>e.right&&(o=e.right-n.width),o{var e;this._focusables.add(t),this.focusTracker.add(t.element),Uo(e=t)&&"focusCycler"in e&&e.focusCycler instanceof _e&&(this.listenTo(t.focusCycler,"forwardCycle",n=>{this._focusCycler.focusNext(),this._focusCycler.next!==this._focusCycler.focusables.get(this._focusCycler.current)&&n.stop()}),this.listenTo(t.focusCycler,"backwardCycle",n=>{this._focusCycler.focusPrevious(),this._focusCycler.previous!==this._focusCycler.focusables.get(this._focusCycler.current)&&n.stop()}))})}_createCloseButton(){const o=new wt(this.locale),t=this.locale.t;return o.set({label:t("Close"),tooltip:!0,icon:ot.cancel}),o.on("execute",()=>this.fire("close",{source:"closeButton"})),o}};let Zs=iu;Zs.defaultOffset=15;var ru=N(1240),p_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(ru.c,p_),ru.c.locals;var m_=Object.defineProperty,su=Object.getOwnPropertySymbols,f_=Object.prototype.hasOwnProperty,k_=Object.prototype.propertyIsEnumerable,au=(o,t,e)=>t in o?m_(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,pt=(o,t)=>{for(var e in t||(t={}))f_.call(t,e)&&au(o,e,t[e]);if(su)for(var e of su(t))k_.call(t,e)&&au(o,e,t[e]);return o};const cu=ro("px"),lu=$.document.body,b_={top:-99999,left:-99999,name:"arrowless",config:{withArrow:!1}},Js=class extends tt{constructor(o){super(o);const t=this.bindTemplate;this.set("top",0),this.set("left",0),this.set("position","arrow_nw"),this.set("isVisible",!1),this.set("withArrow",!0),this.set("class",void 0),this._pinWhenIsVisibleCallback=null,this.content=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-balloon-panel",t.to("position",e=>`ck-balloon-panel_${e}`),t.if("isVisible","ck-balloon-panel_visible"),t.if("withArrow","ck-balloon-panel_with-arrow"),t.to("class")],style:{top:t.to("top",cu),left:t.to("left",cu)}},children:this.content})}show(){this.isVisible=!0}hide(){this.isVisible=!1}attachTo(o){this.show();const t=Js.defaultPositions,e=Object.assign({},{element:this.element,positions:[t.southArrowNorth,t.southArrowNorthMiddleWest,t.southArrowNorthMiddleEast,t.southArrowNorthWest,t.southArrowNorthEast,t.northArrowSouth,t.northArrowSouthMiddleWest,t.northArrowSouthMiddleEast,t.northArrowSouthWest,t.northArrowSouthEast,t.viewportStickyNorth],limiter:lu,fitInViewport:!0},o),n=Js._getOptimalPosition(e)||b_,i=parseInt(n.left),r=parseInt(n.top),s=n.name,a=n.config||{},{withArrow:c=!0}=a;this.top=r,this.left=i,this.position=s,this.withArrow=c}pin(o){this.unpin(),this._pinWhenIsVisibleCallback=()=>{this.isVisible?this._startPinning(o):this._stopPinning()},this._startPinning(o),this.listenTo(this,"change:isVisible",this._pinWhenIsVisibleCallback)}unpin(){this._pinWhenIsVisibleCallback&&(this._stopPinning(),this.stopListening(this,"change:isVisible",this._pinWhenIsVisibleCallback),this._pinWhenIsVisibleCallback=null,this.hide())}_startPinning(o){this.attachTo(o);const t=Xs(o.target),e=o.limiter?Xs(o.limiter):lu;this.listenTo($.document,"scroll",(n,i)=>{const r=i.target,s=t&&r.contains(t),a=e&&r.contains(e);!s&&!a&&t&&e||this.attachTo(o)},{useCapture:!0}),this.listenTo($.window,"resize",()=>{this.attachTo(o)})}_stopPinning(){this.stopListening($.document,"scroll"),this.stopListening($.window,"resize")}};let ae=Js;function Xs(o){return Mn(o)?o:Di(o)?o.commonAncestorContainer:typeof o=="function"?Xs(o()):null}function du(o={}){const{sideOffset:t=ae.arrowSideOffset,heightOffset:e=ae.arrowHeightOffset,stickyVerticalOffset:n=ae.stickyVerticalOffset,config:i}=o;return{northWestArrowSouthWest:(a,c)=>pt({top:r(a,c),left:a.left-t,name:"arrow_sw"},i&&{config:i}),northWestArrowSouthMiddleWest:(a,c)=>pt({top:r(a,c),left:a.left-.25*c.width-t,name:"arrow_smw"},i&&{config:i}),northWestArrowSouth:(a,c)=>pt({top:r(a,c),left:a.left-c.width/2,name:"arrow_s"},i&&{config:i}),northWestArrowSouthMiddleEast:(a,c)=>pt({top:r(a,c),left:a.left-.75*c.width+t,name:"arrow_sme"},i&&{config:i}),northWestArrowSouthEast:(a,c)=>pt({top:r(a,c),left:a.left-c.width+t,name:"arrow_se"},i&&{config:i}),northArrowSouthWest:(a,c)=>pt({top:r(a,c),left:a.left+a.width/2-t,name:"arrow_sw"},i&&{config:i}),northArrowSouthMiddleWest:(a,c)=>pt({top:r(a,c),left:a.left+a.width/2-.25*c.width-t,name:"arrow_smw"},i&&{config:i}),northArrowSouth:(a,c)=>pt({top:r(a,c),left:a.left+a.width/2-c.width/2,name:"arrow_s"},i&&{config:i}),northArrowSouthMiddleEast:(a,c)=>pt({top:r(a,c),left:a.left+a.width/2-.75*c.width+t,name:"arrow_sme"},i&&{config:i}),northArrowSouthEast:(a,c)=>pt({top:r(a,c),left:a.left+a.width/2-c.width+t,name:"arrow_se"},i&&{config:i}),northEastArrowSouthWest:(a,c)=>pt({top:r(a,c),left:a.right-t,name:"arrow_sw"},i&&{config:i}),northEastArrowSouthMiddleWest:(a,c)=>pt({top:r(a,c),left:a.right-.25*c.width-t,name:"arrow_smw"},i&&{config:i}),northEastArrowSouth:(a,c)=>pt({top:r(a,c),left:a.right-c.width/2,name:"arrow_s"},i&&{config:i}),northEastArrowSouthMiddleEast:(a,c)=>pt({top:r(a,c),left:a.right-.75*c.width+t,name:"arrow_sme"},i&&{config:i}),northEastArrowSouthEast:(a,c)=>pt({top:r(a,c),left:a.right-c.width+t,name:"arrow_se"},i&&{config:i}),southWestArrowNorthWest:a=>pt({top:s(a),left:a.left-t,name:"arrow_nw"},i&&{config:i}),southWestArrowNorthMiddleWest:(a,c)=>pt({top:s(a),left:a.left-.25*c.width-t,name:"arrow_nmw"},i&&{config:i}),southWestArrowNorth:(a,c)=>pt({top:s(a),left:a.left-c.width/2,name:"arrow_n"},i&&{config:i}),southWestArrowNorthMiddleEast:(a,c)=>pt({top:s(a),left:a.left-.75*c.width+t,name:"arrow_nme"},i&&{config:i}),southWestArrowNorthEast:(a,c)=>pt({top:s(a),left:a.left-c.width+t,name:"arrow_ne"},i&&{config:i}),southArrowNorthWest:a=>pt({top:s(a),left:a.left+a.width/2-t,name:"arrow_nw"},i&&{config:i}),southArrowNorthMiddleWest:(a,c)=>pt({top:s(a),left:a.left+a.width/2-.25*c.width-t,name:"arrow_nmw"},i&&{config:i}),southArrowNorth:(a,c)=>pt({top:s(a),left:a.left+a.width/2-c.width/2,name:"arrow_n"},i&&{config:i}),southArrowNorthMiddleEast:(a,c)=>pt({top:s(a),left:a.left+a.width/2-.75*c.width+t,name:"arrow_nme"},i&&{config:i}),southArrowNorthEast:(a,c)=>pt({top:s(a),left:a.left+a.width/2-c.width+t,name:"arrow_ne"},i&&{config:i}),southEastArrowNorthWest:a=>pt({top:s(a),left:a.right-t,name:"arrow_nw"},i&&{config:i}),southEastArrowNorthMiddleWest:(a,c)=>pt({top:s(a),left:a.right-.25*c.width-t,name:"arrow_nmw"},i&&{config:i}),southEastArrowNorth:(a,c)=>pt({top:s(a),left:a.right-c.width/2,name:"arrow_n"},i&&{config:i}),southEastArrowNorthMiddleEast:(a,c)=>pt({top:s(a),left:a.right-.75*c.width+t,name:"arrow_nme"},i&&{config:i}),southEastArrowNorthEast:(a,c)=>pt({top:s(a),left:a.right-c.width+t,name:"arrow_ne"},i&&{config:i}),westArrowEast:(a,c)=>pt({top:a.top+a.height/2-c.height/2,left:a.left-c.width-e,name:"arrow_e"},i&&{config:i}),eastArrowWest:(a,c)=>pt({top:a.top+a.height/2-c.height/2,left:a.right+e,name:"arrow_w"},i&&{config:i}),viewportStickyNorth:(a,c,l,d)=>{const h=d||l;return a.getIntersection(h)?h.height-a.height>n?null:{top:h.top+n,left:a.left+a.width/2-c.width/2,name:"arrowless",config:pt({withArrow:!1},i)}:null}};function r(a,c){return a.top-c.height-e}function s(a){return a.bottom+e}}ae.arrowSideOffset=25,ae.arrowHeightOffset=10,ae.stickyVerticalOffset=20,ae._getOptimalPosition=Zr,ae.defaultPositions=du();var hu=N(107),w_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(hu.c,w_),hu.c.locals;const uu="ck-tooltip",ce=class extends Ae(){constructor(o){if(super(),this._currentElementWithTooltip=null,this._currentTooltipPosition=null,this._resizeObserver=null,ce._editors.add(o),ce._instance)return ce._instance;ce._instance=this,this.tooltipTextView=new tt(o.locale),this.tooltipTextView.set("text",""),this.tooltipTextView.setTemplate({tag:"span",attributes:{class:["ck","ck-tooltip__text"]},children:[{text:this.tooltipTextView.bindTemplate.to("text")}]}),this.balloonPanelView=new ae(o.locale),this.balloonPanelView.class=uu,this.balloonPanelView.content.add(this.tooltipTextView),this._pinTooltipDebounced=Ho(this._pinTooltip,600),this.listenTo($.document,"mouseenter",this._onEnterOrFocus.bind(this),{useCapture:!0}),this.listenTo($.document,"mouseleave",this._onLeaveOrBlur.bind(this),{useCapture:!0}),this.listenTo($.document,"focus",this._onEnterOrFocus.bind(this),{useCapture:!0}),this.listenTo($.document,"blur",this._onLeaveOrBlur.bind(this),{useCapture:!0}),this.listenTo($.document,"scroll",this._onScroll.bind(this),{useCapture:!0}),this._watchdogExcluded=!0}destroy(o){const t=o.ui.view&&o.ui.view.body;ce._editors.delete(o),this.stopListening(o.ui),t&&t.has(this.balloonPanelView)&&t.remove(this.balloonPanelView),ce._editors.size||(this._unpinTooltip(),this.balloonPanelView.destroy(),this.stopListening(),ce._instance=null)}static getPositioningFunctions(o){const t=ce.defaultBalloonPositions;return{s:[t.southArrowNorth,t.southArrowNorthEast,t.southArrowNorthWest],n:[t.northArrowSouth],e:[t.eastArrowWest],w:[t.westArrowEast],sw:[t.southArrowNorthEast],se:[t.southArrowNorthWest]}[o]}_onEnterOrFocus(o,{target:t}){const e=ta(t);var n;e&&e!==this._currentElementWithTooltip&&(this._unpinTooltip(),this._pinTooltipDebounced(e,{text:(n=e).dataset.ckeTooltipText,position:n.dataset.ckeTooltipPosition||"s",cssClass:n.dataset.ckeTooltipClass||""}))}_onLeaveOrBlur(o,{target:t,relatedTarget:e}){if(o.name==="mouseleave"){if(!Mn(t)||this._currentElementWithTooltip&&t!==this._currentElementWithTooltip)return;const n=ta(t),i=ta(e);n&&n!==i&&this._unpinTooltip()}else{if(this._currentElementWithTooltip&&t!==this._currentElementWithTooltip)return;this._unpinTooltip()}}_onScroll(o,{target:t}){this._currentElementWithTooltip&&(t.contains(this.balloonPanelView.element)&&t.contains(this._currentElementWithTooltip)||this._unpinTooltip())}_pinTooltip(o,{text:t,position:e,cssClass:n}){const i=Wt(ce._editors.values()).ui.view.body;i.has(this.balloonPanelView)||i.add(this.balloonPanelView),this.tooltipTextView.text=t,this.balloonPanelView.pin({target:o,positions:ce.getPositioningFunctions(e)}),this._resizeObserver=new Ro(o,()=>{Bn(o)||this._unpinTooltip()}),this.balloonPanelView.class=[uu,n].filter(r=>r).join(" ");for(const r of ce._editors)this.listenTo(r.ui,"update",this._updateTooltipPosition.bind(this),{priority:"low"});this._currentElementWithTooltip=o,this._currentTooltipPosition=e}_unpinTooltip(){this._pinTooltipDebounced.cancel(),this.balloonPanelView.unpin();for(const o of ce._editors)this.stopListening(o.ui,"update");this._currentElementWithTooltip=null,this._currentTooltipPosition=null,this._resizeObserver&&this._resizeObserver.destroy()}_updateTooltipPosition(){Bn(this._currentElementWithTooltip)?this.balloonPanelView.pin({target:this._currentElementWithTooltip,positions:ce.getPositioningFunctions(this._currentTooltipPosition)}):this._unpinTooltip()}};let nr=ce;function ta(o){return Mn(o)?o.closest("[data-cke-tooltip-text]:not([data-cke-tooltip-disabled])"):null}nr.defaultBalloonPositions=du({heightOffset:5,sideOffset:13}),nr._editors=new Set,nr._instance=null;const or=function(o,t,e){var n=!0,i=!0;if(typeof o!="function")throw new TypeError("Expected a function");return bt(e)&&(n="leading"in e?!!e.leading:n,i="trailing"in e?!!e.trailing:i),Ho(o,t,{leading:n,maxWait:t,trailing:i})};var A_=Object.defineProperty,gu=Object.getOwnPropertySymbols,C_=Object.prototype.hasOwnProperty,v_=Object.prototype.propertyIsEnumerable,pu=(o,t,e)=>t in o?A_(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,y_=(o,t)=>{for(var e in t||(t={}))C_.call(t,e)&&pu(o,e,t[e]);if(gu)for(var e of gu(t))v_.call(t,e)&&pu(o,e,t[e]);return o};const x_=50,E_=350,D_="Powered by";class I_ extends Ae(){constructor(t){super(),this.editor=t,this._balloonView=null,this._lastFocusedEditableElement=null,this._showBalloonThrottled=or(this._showBalloon.bind(this),50,{leading:!0}),t.on("ready",this._handleEditorReady.bind(this))}destroy(){const t=this._balloonView;t&&(t.unpin(),this._balloonView=null),this._showBalloonThrottled.cancel(),this.stopListening()}_handleEditorReady(){const t=this.editor;(t.config.get("ui.poweredBy.forceVisible")||function(e){function n(g){return g.length>=40&&g.length<=255?"VALID":"INVALID"}if(!e)return"INVALID";let i="";try{i=atob(e)}catch{return"INVALID"}const r=i.split("-"),s=r[0],a=r[1];if(!a)return n(e);try{atob(a)}catch{try{if(atob(s),!atob(s).length)return n(e)}catch{return n(e)}}if(s.length<40||s.length>255)return"INVALID";let c="";try{atob(s),c=atob(a)}catch{return"INVALID"}if(c.length!==8)return"INVALID";const l=Number(c.substring(0,4)),d=Number(c.substring(4,6))-1,h=Number(c.substring(6,8)),u=new Date(l,d,h);return u{this._updateLastFocusedEditableElement(),i?this._showBalloon():this._hideBalloon()}),t.ui.focusTracker.on("change:focusedElement",(e,n,i)=>{this._updateLastFocusedEditableElement(),i&&this._showBalloon()}),t.ui.on("update",()=>{this._showBalloonThrottled()}))}_createBalloonView(){const t=this.editor,e=this._balloonView=new ae,n=fu(t),i=new S_(t.locale,n.label);e.content.add(i),e.set({class:"ck-powered-by-balloon"}),t.ui.view.body.add(e),t.ui.focusTracker.add(e.element),this._balloonView=e}_showBalloon(){if(!this._lastFocusedEditableElement)return;const t=function(e,n){const i=fu(e),r=i.side==="right"?function(s,a){return mu(s,a,(c,l)=>c.left+c.width-l.width-a.horizontalOffset)}(n,i):function(s,a){return mu(s,a,c=>c.left+a.horizontalOffset)}(n,i);return{target:n,positions:[r]}}(this.editor,this._lastFocusedEditableElement);t&&(this._balloonView||this._createBalloonView(),this._balloonView.pin(t))}_hideBalloon(){this._balloonView&&this._balloonView.unpin()}_updateLastFocusedEditableElement(){const t=this.editor,e=t.ui.focusTracker.isFocused,n=t.ui.focusTracker.focusedElement;if(!e||!n)return void(this._lastFocusedEditableElement=null);const i=Array.from(t.ui.getEditableElementsNames()).map(r=>t.ui.getEditableElement(r));i.includes(n)?this._lastFocusedEditableElement=n:this._lastFocusedEditableElement=i[0]}}class S_ extends tt{constructor(t,e){super(t);const n=new mn,i=this.bindTemplate;n.set({content:` `,isColorInherited:!1}),n.extendTemplate({attributes:{style:{width:"53px",height:"10px"}}}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-powered-by"],"aria-hidden":!0},children:[{tag:"a",attributes:{href:"https://ckeditor.com/?utm_source=ckeditor&utm_medium=referral&utm_campaign=701Dn000000hVgmIAE_powered_by_ckeditor_logo",target:"_blank",tabindex:"-1"},children:[...e?[{tag:"span",attributes:{class:["ck","ck-powered-by__label"]},children:[e]}]:[],n],on:{dragstart:i.to(r=>r.preventDefault())}}]})}}function mu(o,t,e){return(n,i)=>{const r=new dt(o);if(r.widths.regionName===t);r||(r=new N_(this.view.locale),this.view.regionViews.add(r)),r.set({regionName:t,text:e,politeness:n})}}class B_ extends tt{constructor(t){super(t),this.regionViews=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-aria-live-announcer"]},children:this.regionViews})}}class N_ extends tt{constructor(t){super(t);const e=this.bindTemplate;this.set("regionName",""),this.set("text",""),this.set("politeness",bu),this.setTemplate({tag:"div",attributes:{role:"region","data-region":e.to("regionName"),"aria-live":e.to("politeness")},children:[{text:e.to("text")}]})}}var P_=Object.defineProperty,wu=Object.getOwnPropertySymbols,L_=Object.prototype.hasOwnProperty,O_=Object.prototype.propertyIsEnumerable,Au=(o,t,e)=>t in o?P_(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;class z_ extends mt(){constructor(t){super(),this.isReady=!1,this._editableElementsMap=new Map,this._focusableToolbarDefinitions=[];const e=t.editing.view;this.editor=t,this.componentFactory=new e_(t),this.focusTracker=new Qt,this.tooltipManager=new nr(t),this.poweredBy=new I_(t),this.ariaLiveAnnouncer=new M_(t),this.set("viewportOffset",this._readViewportOffsetFromConfig()),this.once("ready",()=>{this.isReady=!0}),this.listenTo(e.document,"layoutChanged",this.update.bind(this)),this.listenTo(e,"scrollToTheSelection",this._handleScrollToTheSelection.bind(this)),this._initFocusTracking()}get element(){return null}update(){this.fire("update")}destroy(){this.stopListening(),this.focusTracker.destroy(),this.tooltipManager.destroy(this.editor),this.poweredBy.destroy();for(const t of this._editableElementsMap.values())t.ckeditorInstance=null,this.editor.keystrokes.stopListening(t);this._editableElementsMap=new Map,this._focusableToolbarDefinitions=[]}setEditableElement(t,e){this._editableElementsMap.set(t,e),e.ckeditorInstance||(e.ckeditorInstance=this.editor),this.focusTracker.add(e);const n=()=>{this.editor.editing.view.getDomRoot(t)||this.editor.keystrokes.listenTo(e)};this.isReady?n():this.once("ready",n)}removeEditableElement(t){const e=this._editableElementsMap.get(t);e&&(this._editableElementsMap.delete(t),this.editor.keystrokes.stopListening(e),this.focusTracker.remove(e),e.ckeditorInstance=null)}getEditableElement(t="main"){return this._editableElementsMap.get(t)}getEditableElementsNames(){return this._editableElementsMap.keys()}addToolbar(t,e={}){t.isRendered?(this.focusTracker.add(t.element),this.editor.keystrokes.listenTo(t.element)):t.once("render",()=>{this.focusTracker.add(t.element),this.editor.keystrokes.listenTo(t.element)}),this._focusableToolbarDefinitions.push({toolbarView:t,options:e})}get _editableElements(){return console.warn("editor-ui-deprecated-editable-elements: The EditorUI#_editableElements property has been deprecated and will be removed in the near future.",{editorUI:this}),this._editableElementsMap}_readViewportOffsetFromConfig(){const t=this.editor,e=t.config.get("ui.viewportOffset");if(e)return e;const n=t.config.get("toolbar.viewportTopOffset");return n?(console.warn("editor-ui-deprecated-viewport-offset-config: The `toolbar.vieportTopOffset` configuration option is deprecated. It will be removed from future CKEditor versions. Use `ui.viewportOffset.top` instead."),{top:n}):{top:0}}_initFocusTracking(){const t=this.editor,e=t.editing.view;let n,i;t.keystrokes.set("Alt+F10",(r,s)=>{const a=this.focusTracker.focusedElement;Array.from(this._editableElementsMap.values()).includes(a)&&!Array.from(e.domRoots.values()).includes(a)&&(n=a);const c=this._getCurrentFocusedToolbarDefinition();c&&i||(i=this._getFocusableCandidateToolbarDefinitions());for(let l=0;l{const a=this._getCurrentFocusedToolbarDefinition();a&&(n?(n.focus(),n=null):t.editing.view.focus(),a.options.afterBlur&&a.options.afterBlur(),s())})}_getFocusableCandidateToolbarDefinitions(){const t=[];for(const e of this._focusableToolbarDefinitions){const{toolbarView:n,options:i}=e;(Bn(n.element)||i.beforeFocus)&&t.push(e)}return t.sort((e,n)=>Cu(e)-Cu(n)),t}_getCurrentFocusedToolbarDefinition(){for(const t of this._focusableToolbarDefinitions)if(t.toolbarView.element&&t.toolbarView.element.contains(this.focusTracker.focusedElement))return t;return null}_focusFocusableCandidateToolbar(t){const{toolbarView:e,options:{beforeFocus:n}}=t;return n&&n(),!!Bn(e.element)&&(e.focus(),!0)}_handleScrollToTheSelection(t,e){const n=((i,r)=>{for(var s in r||(r={}))L_.call(r,s)&&Au(i,s,r[s]);if(wu)for(var s of wu(r))O_.call(r,s)&&Au(i,s,r[s]);return i})({top:0,bottom:0,left:0,right:0},this.viewportOffset);e.viewportOffset.top+=n.top,e.viewportOffset.bottom+=n.bottom,e.viewportOffset.left+=n.left,e.viewportOffset.right+=n.right}}function Cu(o){const{toolbarView:t,options:e}=o;let n=10;return Bn(t.element)&&n--,e.isContextual&&n--,n}var _u=N(7972),R_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(_u.c,R_),_u.c.locals;class j_ extends tt{constructor(t){super(t),this.body=new lw(t)}render(){super.render(),this.body.attachToDom()}destroy(){return this.body.detachFromDom(),super.destroy()}}class F_ extends j_{constructor(t){super(t),this.top=this.createCollection(),this.main=this.createCollection(),this._voiceLabelView=this._createVoiceLabel(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-reset","ck-editor","ck-rounded-corners"],role:"application",dir:t.uiLanguageDirection,lang:t.uiLanguage,"aria-labelledby":this._voiceLabelView.id},children:[this._voiceLabelView,{tag:"div",attributes:{class:["ck","ck-editor__top","ck-reset_all"],role:"presentation"},children:this.top},{tag:"div",attributes:{class:["ck","ck-editor__main"],role:"presentation"},children:this.main}]})}_createVoiceLabel(){const t=this.t,e=new cs;return e.text=t("Rich Text Editor"),e.extendTemplate({attributes:{class:"ck-voice-label"}}),e}}class V_ extends tt{constructor(t,e,n){super(t),this.name=null,this.setTemplate({tag:"div",attributes:{class:["ck","ck-content","ck-editor__editable","ck-rounded-corners"],lang:t.contentLanguage,dir:t.contentLanguageDirection}}),this.set("isFocused",!1),this._editableElement=n,this._hasExternalElement=!!this._editableElement,this._editingView=e}render(){super.render(),this._hasExternalElement?this.template.apply(this.element=this._editableElement):this._editableElement=this.element,this.on("change:isFocused",()=>this._updateIsFocusedClasses()),this._updateIsFocusedClasses()}destroy(){this._hasExternalElement&&this.template.revert(this._editableElement),super.destroy()}get hasExternalElement(){return this._hasExternalElement}_updateIsFocusedClasses(){const t=this._editingView;function e(n){t.change(i=>{const r=t.document.getRoot(n.name);i.addClass(n.isFocused?"ck-focused":"ck-blurred",r),i.removeClass(n.isFocused?"ck-blurred":"ck-focused",r)})}t.isRenderingInProgress?function n(i){t.once("change:isRenderingInProgress",(r,s,a)=>{a?n(i):e(i)})}(this):e(this)}}class H_ extends V_{constructor(t,e,n,i={}){super(t,e,n);const r=t.t;this.extendTemplate({attributes:{role:"textbox",class:"ck-editor__editable_inline"}}),this._generateLabel=i.label||(()=>r("Editor editing area: %0",this.name))}render(){super.render();const t=this._editingView;t.change(e=>{const n=t.document.getRoot(this.name);e.setAttribute("aria-label",this._generateLabel(this),n)})}}class ea extends Li{static get pluginName(){return"Notification"}init(){this.on("show:warning",(t,e)=>{window.alert(e.message)},{priority:"lowest"})}showSuccess(t,e={}){this._showNotification({message:t,type:"success",namespace:e.namespace,title:e.title})}showInfo(t,e={}){this._showNotification({message:t,type:"info",namespace:e.namespace,title:e.title})}showWarning(t,e={}){this._showNotification({message:t,type:"warning",namespace:e.namespace,title:e.title})}_showNotification(t){const e=t.namespace?`show:${t.type}:${t.namespace}`:`show:${t.type}`;this.fire(e,{message:t.message,type:t.type,title:t.title||""})}}class vu extends mt(){constructor(t,e){super(),e&&kd(this,e),t&&this.set(t)}}var yu=N(6144),U_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(yu.c,U_),yu.c.locals;var xu=N(4488),q_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(xu.c,q_),xu.c.locals;const ir=ro("px");class rr extends R{constructor(t){super(t),this._viewToStack=new Map,this._idToStack=new Map,this._view=null,this._rotatorView=null,this._fakePanelsView=null,this.positionLimiter=()=>{const e=this.editor.editing.view,n=e.document.selection.editableElement;return n?e.domConverter.mapViewToDom(n.root):null},this.set("visibleView",null),this.set("_numberOfStacks",0),this.set("_singleViewMode",!1)}static get pluginName(){return"ContextualBalloon"}destroy(){super.destroy(),this._view&&this._view.destroy(),this._rotatorView&&this._rotatorView.destroy(),this._fakePanelsView&&this._fakePanelsView.destroy()}get view(){return this._view||this._createPanelView(),this._view}hasView(t){return Array.from(this._viewToStack.keys()).includes(t)}add(t){if(this._view||this._createPanelView(),this.hasView(t.view))throw new _("contextualballoon-add-view-exist",[this,t]);const e=t.stackId||"main";if(!this._idToStack.has(e))return this._idToStack.set(e,new Map([[t.view,t]])),this._viewToStack.set(t.view,this._idToStack.get(e)),this._numberOfStacks=this._idToStack.size,void(this._visibleStack&&!t.singleViewMode||this.showStack(e));const n=this._idToStack.get(e);t.singleViewMode&&this.showStack(e),n.set(t.view,t),this._viewToStack.set(t.view,n),n===this._visibleStack&&this._showView(t)}remove(t){if(!this.hasView(t))throw new _("contextualballoon-remove-view-not-exist",[this,t]);const e=this._viewToStack.get(t);this._singleViewMode&&this.visibleView===t&&(this._singleViewMode=!1),this.visibleView===t&&(e.size===1?this._idToStack.size>1?this._showNextStack():(this.view.hide(),this.visibleView=null,this._rotatorView.hideView()):this._showView(Array.from(e.values())[e.size-2])),e.size===1?(this._idToStack.delete(this._getStackId(e)),this._numberOfStacks=this._idToStack.size):e.delete(t),this._viewToStack.delete(t)}updatePosition(t){t&&(this._visibleStack.get(this.visibleView).position=t),this.view.pin(this._getBalloonPosition()),this._fakePanelsView.updatePosition()}showStack(t){this.visibleStack=t;const e=this._idToStack.get(t);if(!e)throw new _("contextualballoon-showstack-stack-not-exist",this);this._visibleStack!==e&&this._showView(Array.from(e.values()).pop())}_createPanelView(){this._view=new ae(this.editor.locale),this.editor.ui.view.body.add(this._view),this.editor.ui.focusTracker.add(this._view.element),this._rotatorView=this._createRotatorView(),this._fakePanelsView=this._createFakePanelsView()}get _visibleStack(){return this._viewToStack.get(this.visibleView)}_getStackId(t){return Array.from(this._idToStack.entries()).find(e=>e[1]===t)[0]}_showNextStack(){const t=Array.from(this._idToStack.values());let e=t.indexOf(this._visibleStack)+1;t[e]||(e=0),this.showStack(this._getStackId(t[e]))}_showPrevStack(){const t=Array.from(this._idToStack.values());let e=t.indexOf(this._visibleStack)-1;t[e]||(e=t.length-1),this.showStack(this._getStackId(t[e]))}_createRotatorView(){const t=new G_(this.editor.locale),e=this.editor.locale.t;return this.view.content.add(t),t.bind("isNavigationVisible").to(this,"_numberOfStacks",this,"_singleViewMode",(n,i)=>!i&&n>1),t.on("change:isNavigationVisible",()=>this.updatePosition(),{priority:"low"}),t.bind("counter").to(this,"visibleView",this,"_numberOfStacks",(n,i)=>{if(i<2)return"";const r=Array.from(this._idToStack.values()).indexOf(this._visibleStack)+1;return e("%0 of %1",[r,i])}),t.buttonNextView.on("execute",()=>{t.focusTracker.isFocused&&this.editor.editing.view.focus(),this._showNextStack()}),t.buttonPrevView.on("execute",()=>{t.focusTracker.isFocused&&this.editor.editing.view.focus(),this._showPrevStack()}),t}_createFakePanelsView(){const t=new W_(this.editor.locale,this.view);return t.bind("numberOfPanels").to(this,"_numberOfStacks",this,"_singleViewMode",(e,n)=>!n&&e>=2?Math.min(e-1,2):0),t.listenTo(this.view,"change:top",()=>t.updatePosition()),t.listenTo(this.view,"change:left",()=>t.updatePosition()),this.editor.ui.view.body.add(t),t}_showView({view:t,balloonClassName:e="",withArrow:n=!0,singleViewMode:i=!1}){this.view.class=e,this.view.withArrow=n,this._rotatorView.showView(t),this.visibleView=t,this.view.pin(this._getBalloonPosition()),this._fakePanelsView.updatePosition(),i&&(this._singleViewMode=!0)}_getBalloonPosition(){let t=Array.from(this._visibleStack.values()).pop().position;return t&&(t.limiter||(t=Object.assign({},t,{limiter:this.positionLimiter})),t=Object.assign({},t,{viewportOffsetConfig:this.editor.ui.viewportOffset})),t}}class G_ extends tt{constructor(t){super(t);const e=t.t,n=this.bindTemplate;this.set("isNavigationVisible",!0),this.focusTracker=new Qt,this.buttonPrevView=this._createButtonView(e("Previous"),ot.previousArrow),this.buttonNextView=this._createButtonView(e("Next"),ot.nextArrow),this.content=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-balloon-rotator"],"z-index":"-1"},children:[{tag:"div",attributes:{class:["ck-balloon-rotator__navigation",n.to("isNavigationVisible",i=>i?"":"ck-hidden")]},children:[this.buttonPrevView,{tag:"span",attributes:{class:["ck-balloon-rotator__counter"]},children:[{text:n.to("counter")}]},this.buttonNextView]},{tag:"div",attributes:{class:"ck-balloon-rotator__content"},children:this.content}]})}render(){super.render(),this.focusTracker.add(this.element)}destroy(){super.destroy(),this.focusTracker.destroy()}showView(t){this.hideView(),this.content.add(t)}hideView(){this.content.clear()}_createButtonView(t,e){const n=new wt(this.locale);return n.set({label:t,icon:e,tooltip:!0}),n}}class W_ extends tt{constructor(t,e){super(t);const n=this.bindTemplate;this.set("top",0),this.set("left",0),this.set("height",0),this.set("width",0),this.set("numberOfPanels",0),this.content=this.createCollection(),this._balloonPanelView=e,this.setTemplate({tag:"div",attributes:{class:["ck-fake-panel",n.to("numberOfPanels",i=>i?"":"ck-hidden")],style:{top:n.to("top",ir),left:n.to("left",ir),width:n.to("width",ir),height:n.to("height",ir)}},children:this.content}),this.on("change:numberOfPanels",(i,r,s,a)=>{s>a?this._addPanels(s-a):this._removePanels(a-s),this.updatePosition()})}_addPanels(t){for(;t--;){const e=new tt;e.setTemplate({tag:"div"}),this.content.add(e),this.registerChild(e)}}_removePanels(t){for(;t--;){const e=this.content.last;this.content.remove(e),this.deregisterChild(e),e.destroy()}}updatePosition(){if(this.numberOfPanels){const{top:t,left:e}=this._balloonPanelView,{width:n,height:i}=new dt(this._balloonPanelView.element);Object.assign(this,{top:t,left:e,width:n,height:i})}}}var Eu=N(528),$_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Eu.c,$_),Eu.c.locals;const mo=ro("px");class K_ extends tt{constructor(t){super(t);const e=this.bindTemplate;this.set("isActive",!1),this.set("isSticky",!1),this.set("limiterElement",null),this.set("limiterBottomOffset",50),this.set("viewportTopOffset",0),this.set("_marginLeft",null),this.set("_isStickyToTheBottomOfLimiter",!1),this.set("_stickyTopOffset",null),this.set("_stickyBottomOffset",null),this.content=this.createCollection(),this._contentPanelPlaceholder=new Be({tag:"div",attributes:{class:["ck","ck-sticky-panel__placeholder"],style:{display:e.to("isSticky",n=>n?"block":"none"),height:e.to("isSticky",n=>n?mo(this._contentPanelRect.height):null)}}}).render(),this.contentPanelElement=new Be({tag:"div",attributes:{class:["ck","ck-sticky-panel__content",e.if("isSticky","ck-sticky-panel__content_sticky"),e.if("_isStickyToTheBottomOfLimiter","ck-sticky-panel__content_sticky_bottom-limit")],style:{width:e.to("isSticky",n=>n?mo(this._contentPanelPlaceholder.getBoundingClientRect().width):null),top:e.to("_stickyTopOffset",n=>n&&mo(n)),bottom:e.to("_stickyBottomOffset",n=>n&&mo(n)),marginLeft:e.to("_marginLeft")}},children:this.content}).render(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-sticky-panel"]},children:[this._contentPanelPlaceholder,this.contentPanelElement]})}render(){super.render(),this.checkIfShouldBeSticky(),this.listenTo($.document,"scroll",()=>{this.checkIfShouldBeSticky()},{useCapture:!0}),this.listenTo(this,"change:isActive",()=>{this.checkIfShouldBeSticky()})}checkIfShouldBeSticky(){if(!this.limiterElement||!this.isActive)return void this._unstick();const t=new dt(this.limiterElement);let e=t.getVisible();if(e){const n=new dt($.window);n.top+=this.viewportTopOffset,n.height-=this.viewportTopOffset,e=e.getIntersection(n)}if(e&&t.tope.bottom){const i=Math.max(t.bottom-e.bottom,0)+this.limiterBottomOffset;t.bottom-i>t.top+this._contentPanelRect.height?this._stickToBottomOfLimiter(i):this._unstick()}else this._contentPanelRect.height+this.limiterBottomOffset{this.reset(),this.focus(),this.fire("reset")}),this.resetButtonView.bind("isVisible").to(this.fieldView,"isEmpty",r=>!r),this.fieldWrapperChildren.add(this.resetButtonView),this.extendTemplate({attributes:{class:"ck-search__query_with-reset"}}))}reset(){this.fieldView.reset(),this._viewConfig.showResetButton&&(this.resetButtonView.isVisible=!1)}}class Q_ extends tt{constructor(){super();const t=this.bindTemplate;this.set({isVisible:!1,primaryText:"",secondaryText:""}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-search__info",t.if("isVisible","ck-hidden",e=>!e)],tabindex:-1},children:[{tag:"span",children:[{text:[t.to("primaryText")]}]},{tag:"span",children:[{text:[t.to("secondaryText")]}]}]})}focus(){this.element.focus()}}class Z_ extends tt{constructor(t){super(t),this.children=this.createCollection(),this.focusTracker=new Qt,this.setTemplate({tag:"div",attributes:{class:["ck","ck-search__results"],tabindex:-1},children:this.children}),this._focusCycler=new _e({focusables:this.children,focusTracker:this.focusTracker})}render(){super.render();for(const t of this.children)this.focusTracker.add(t.element)}focus(){this._focusCycler.focusFirst()}focusFirst(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}}var Du=/[\\^$.*+?()[\]{}|]/g,J_=RegExp(Du.source);const Iu=function(o){return(o=ms(o))&&J_.test(o)?o.replace(Du,"\\$&"):o};var Su=N(9044),X_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Su.c,X_),Su.c.locals;var tv=Object.defineProperty,Tu=Object.getOwnPropertySymbols,ev=Object.prototype.hasOwnProperty,nv=Object.prototype.propertyIsEnumerable,Mu=(o,t,e)=>t in o?tv(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;class ov extends tt{constructor(t,e){super(t),this._config=e,this.filteredView=e.filteredView,this.queryView=this._createSearchTextQueryView(),this.focusTracker=new Qt,this.keystrokes=new ie,this.resultsView=new Z_(t),this.children=this.createCollection(),this.focusableChildren=this.createCollection([this.queryView,this.resultsView]),this.set("isEnabled",!0),this.set("resultsCount",0),this.set("totalItemsCount",0),e.infoView&&e.infoView.instance?this.infoView=e.infoView.instance:(this.infoView=new Q_,this._enableDefaultInfoViewBehavior(),this.on("render",()=>{this.search("")})),this.resultsView.children.addMany([this.infoView,this.filteredView]),this.focusCycler=new _e({focusables:this.focusableChildren,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.on("search",(n,{resultsCount:i,totalItemsCount:r})=>{this.resultsCount=i,this.totalItemsCount=r}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-search",e.class||null],tabindex:"-1"},children:this.children})}render(){super.render(),this.children.addMany([this.queryView,this.resultsView]);const t=e=>e.stopPropagation();for(const e of this.focusableChildren)this.focusTracker.add(e.element);this.keystrokes.listenTo(this.element),this.keystrokes.set("arrowright",t),this.keystrokes.set("arrowleft",t),this.keystrokes.set("arrowup",t),this.keystrokes.set("arrowdown",t)}focus(){this.queryView.focus()}reset(){this.queryView.reset(),this.search("")}search(t){const e=t?new RegExp(Iu(t),"ig"):null,n=this.filteredView.filter(e);this.fire("search",((i,r)=>{for(var s in r||(r={}))ev.call(r,s)&&Mu(i,s,r[s]);if(Tu)for(var s of Tu(r))nv.call(r,s)&&Mu(i,s,r[s]);return i})({query:t},n))}_createSearchTextQueryView(){const t=new Y_(this.locale,this._config.queryView);return this.listenTo(t.fieldView,"input",()=>{this.search(t.fieldView.element.value)}),t.on("reset",()=>this.reset()),t.bind("isEnabled").to(this),t}_enableDefaultInfoViewBehavior(){const t=this.locale.t,e=this.infoView;function n(i,{query:r,resultsCount:s,totalItemsCount:a}){return typeof i=="function"?i(r,s,a):i}this.on("search",(i,r)=>{if(r.resultsCount)e.set({isVisible:!1});else{const s=this._config.infoView&&this._config.infoView.text;let a,c;r.totalItemsCount?s&&s.notFound?(a=s.notFound.primary,c=s.notFound.secondary):(a=t("No results found"),c=""):s&&s.noSearchableItems?(a=s.noSearchableItems.primary,c=s.noSearchableItems.secondary):(a=t("No searchable items"),c=""),e.set({primaryText:n(a,r),secondaryText:n(c,r),isVisible:!0})}})}}var Bu=N(300),iv={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Bu.c,iv),Bu.c.locals;const na=class extends ov{constructor(o,t){super(o,t),this._config=t;const e=ro("px");this.extendTemplate({attributes:{class:["ck-autocomplete"]}});const n=this.resultsView.bindTemplate;this.resultsView.set("isVisible",!1),this.resultsView.set("_position","s"),this.resultsView.set("_width",0),this.resultsView.extendTemplate({attributes:{class:[n.if("isVisible","ck-hidden",i=>!i),n.to("_position",i=>`ck-search__results_${i}`)],style:{width:n.to("_width",e)}}}),this.focusTracker.on("change:isFocused",(i,r,s)=>{this._updateResultsVisibility(),s?this.resultsView.element.scrollTop=0:t.resetOnBlur&&this.queryView.reset()}),this.on("search",()=>{this._updateResultsVisibility(),this._updateResultsViewWidthAndPosition()}),this.keystrokes.set("esc",(i,r)=>{this.resultsView.isVisible&&(this.queryView.focus(),this.resultsView.isVisible=!1,r())}),this.listenTo($.document,"scroll",()=>{this._updateResultsViewWidthAndPosition()}),this.on("change:isEnabled",()=>{this._updateResultsVisibility()}),this.filteredView.on("execute",(i,{value:r})=>{this.focus(),this.reset(),this.queryView.fieldView.value=this.queryView.fieldView.element.value=r,this.resultsView.isVisible=!1}),this.resultsView.on("change:isVisible",()=>{this._updateResultsViewWidthAndPosition()})}_updateResultsViewWidthAndPosition(){if(!this.resultsView.isVisible)return;this.resultsView._width=new dt(this.queryView.fieldView.element).width;const o=na._getOptimalPosition({element:this.resultsView.element,target:this.queryView.element,fitInViewport:!0,positions:na.defaultResultsPositions});this.resultsView._position=o?o.name:"s"}_updateResultsVisibility(){const o=this._config.queryMinChars===void 0?0:this._config.queryMinChars,t=this.queryView.fieldView.element.value.length;this.resultsView.isVisible=this.focusTracker.isFocused&&this.isEnabled&&t>=o}};let Nu=na;Nu.defaultResultsPositions=[o=>({top:o.bottom,left:o.left,name:"s"}),(o,t)=>({top:o.top-t.height,left:o.left,name:"n"})],Nu._getOptimalPosition=Zr;var Pu=N(3664),rv={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Pu.c,rv),Pu.c.locals;var Lu=N(1204),sv={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Lu.c,sv),Lu.c.locals;var Ou=N(6536),av={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Ou.c,av),Ou.c.locals;class cv extends z_{constructor(t,e){super(t),this.view=e,this._toolbarConfig=Bl(t.config.get("toolbar")),this._elementReplacer=new So,this.listenTo(t.editing.view,"scrollToTheSelection",this._handleScrollToTheSelectionWithStickyPanel.bind(this))}get element(){return this.view.element}init(t){const e=this.editor,n=this.view,i=e.editing.view,r=n.editable,s=i.document.getRoot();r.name=s.rootName,n.render();const a=r.element;this.setEditableElement(r.name,a),n.editable.bind("isFocused").to(this.focusTracker),i.attachDomRoot(a),t&&this._elementReplacer.replace(t,this.element),this._initPlaceholder(),this._initToolbar(),this._initDialogPluginIntegration(),this.fire("ready")}destroy(){super.destroy();const t=this.view,e=this.editor.editing.view;this._elementReplacer.restore(),e.detachDomRoot(t.editable.name),t.destroy()}_initToolbar(){const t=this.view;t.stickyPanel.bind("isActive").to(this.focusTracker,"isFocused"),t.stickyPanel.limiterElement=t.element,t.stickyPanel.bind("viewportTopOffset").to(this,"viewportOffset",({top:e})=>e||0),t.toolbar.fillFromConfig(this._toolbarConfig,this.componentFactory),this.addToolbar(t.toolbar)}_initPlaceholder(){const t=this.editor,e=t.editing.view,n=e.document.getRoot(),i=t.sourceElement;let r;const s=t.config.get("placeholder");s&&(r=typeof s=="string"?s:s[this.view.editable.name]),!r&&i&&i.tagName.toLowerCase()==="textarea"&&(r=i.getAttribute("placeholder")),r&&(n.placeholder=r),Fl({view:e,element:n,isDirectHost:!1,keepOnFocus:!0})}_handleScrollToTheSelectionWithStickyPanel(t,e,n){const i=this.view.stickyPanel;if(i.isSticky){const r=new dt(i.element).height;e.viewportOffset.top+=r}else{const r=()=>{this.editor.editing.view.scrollToTheSelection(n)};this.listenTo(i,"change:isSticky",r),setTimeout(()=>{this.stopListening(i,"change:isSticky",r)},20)}}_initDialogPluginIntegration(){if(!this.editor.plugins.has("Dialog"))return;const t=this.view.stickyPanel,e=this.editor.plugins.get("Dialog");e.on("show",()=>{const n=e.view;n.on("moveTo",(i,r)=>{if(!t.isSticky||n.wasMoved)return;const s=new dt(t.contentPanelElement);r[1]{const n="error"in e?e.error:e.reason;n instanceof Error&&this._handleError(n,e)},this._listeners={},!this._restart)throw new Error("The Watchdog class was split into the abstract `Watchdog` class and the `EditorWatchdog` class. Please, use `EditorWatchdog` if you have used the `Watchdog` class previously.")}destroy(){this._stopErrorHandling(),this._listeners={}}on(t,e){this._listeners[t]||(this._listeners[t]=[]),this._listeners[t].push(e)}off(t,e){this._listeners[t]=this._listeners[t].filter(n=>n!==e)}_fire(t,...e){const n=this._listeners[t]||[];for(const i of n)i.apply(this,[null,...e])}_startErrorHandling(){window.addEventListener("error",this._boundErrorHandler),window.addEventListener("unhandledrejection",this._boundErrorHandler)}_stopErrorHandling(){window.removeEventListener("error",this._boundErrorHandler),window.removeEventListener("unhandledrejection",this._boundErrorHandler)}_handleError(t,e){if(this._shouldReactToError(t)){this.crashes.push({message:t.message,stack:t.stack,filename:e instanceof ErrorEvent?e.filename:void 0,lineno:e instanceof ErrorEvent?e.lineno:void 0,colno:e instanceof ErrorEvent?e.colno:void 0,date:this._now()});const n=this._shouldRestart();this.state="crashed",this._fire("stateChange"),this._fire("error",{error:t,causesRestart:n}),n?this._restart():(this.state="crashedPermanently",this._fire("stateChange"))}}_shouldReactToError(t){return t.is&&t.is("CKEditorError")&&t.context!==void 0&&t.context!==null&&this.state==="ready"&&this._isErrorComingFromThisItem(t)}_shouldRestart(){return this.crashes.length<=this._crashNumberLimit?!0:(this.crashes[this.crashes.length-1].date-this.crashes[this.crashes.length-1-this._crashNumberLimit].date)/this._crashNumberLimit>this._minimumNonErrorTimePeriod}}function oa(o,t=new Set){const e=[o],n=new Set;let i=0;for(;e.length>i;){const r=e[i++];if(!n.has(r)&&hv(r)&&!t.has(r))if(n.add(r),Symbol.iterator in r)try{for(const s of r)e.push(s)}catch{}else for(const s in r)s!=="defaultValue"&&e.push(r[s])}return n}function hv(o){const t=Object.prototype.toString.call(o),e=typeof o;return!(e==="number"||e==="boolean"||e==="string"||e==="symbol"||e==="function"||t==="[object Date]"||t==="[object RegExp]"||t==="[object Module]"||o==null||o._watchdogExcluded||o instanceof EventTarget||o instanceof Event)}function ju(o,t,e=new Set){if(o===t&&typeof(n=o)=="object"&&n!==null)return!0;var n;const i=oa(o,e),r=oa(t,e);for(const s of i)if(r.has(s))return!0;return!1}var uv=Object.defineProperty,gv=Object.defineProperties,pv=Object.getOwnPropertyDescriptors,sr=Object.getOwnPropertySymbols,Fu=Object.prototype.hasOwnProperty,Vu=Object.prototype.propertyIsEnumerable,Hu=(o,t,e)=>t in o?uv(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,ia=(o,t)=>{for(var e in t||(t={}))Fu.call(t,e)&&Hu(o,e,t[e]);if(sr)for(var e of sr(t))Vu.call(t,e)&&Hu(o,e,t[e]);return o};class Uu extends Ru{constructor(t,e={}){super(e),this._editor=null,this._initUsingData=!0,this._editables={},this._throttledSave=or(this._save.bind(this),typeof e.saveInterval=="number"?e.saveInterval:5e3),t&&(this._creator=(n,i)=>t.create(n,i)),this._destructor=n=>n.destroy()}get editor(){return this._editor}get _item(){return this._editor}setCreator(t){this._creator=t}setDestructor(t){this._destructor=t}_restart(){return Promise.resolve().then(()=>(this.state="initializing",this._fire("stateChange"),this._destroy())).catch(t=>{console.error("An error happened during the editor destroying.",t)}).then(()=>{const t={},e=[],n=this._config.rootsAttributes||{},i={};for(const[c,l]of Object.entries(this._data.roots))l.isLoaded?(t[c]="",i[c]=n[c]||{}):e.push(c);const r=(s=ia({},this._config),a={extraPlugins:this._config.extraPlugins||[],lazyRoots:e,rootsAttributes:i,_watchdogInitialData:this._data},gv(s,pv(a)));var s,a;return delete r.initialData,r.extraPlugins.push(mv),this._initUsingData?this.create(t,r,r.context):Mn(this._elementOrData)?this.create(this._elementOrData,r,r.context):this.create(this._editables,r,r.context)}).then(()=>{this._fire("restart")})}create(t=this._elementOrData,e=this._config,n){return Promise.resolve().then(()=>(super._startErrorHandling(),this._elementOrData=t,this._initUsingData=typeof t=="string"||Object.keys(t).length>0&&typeof Object.values(t)[0]=="string",this._config=this._cloneEditorConfiguration(e)||{},this._config.context=n,this._creator(t,this._config))).then(i=>{this._editor=i,i.model.document.on("change:data",this._throttledSave),this._lastDocumentVersion=i.model.document.version,this._data=this._getData(),this._initUsingData||(this._editables=this._getEditables()),this.state="ready",this._fire("stateChange")})}destroy(){return Promise.resolve().then(()=>(this.state="destroyed",this._fire("stateChange"),super.destroy(),this._destroy()))}_destroy(){return Promise.resolve().then(()=>{this._stopErrorHandling(),this._throttledSave.cancel();const t=this._editor;return this._editor=null,t.model.document.off("change:data",this._throttledSave),this._destructor(t)})}_save(){const t=this._editor.model.document.version;try{this._data=this._getData(),this._initUsingData||(this._editables=this._getEditables()),this._lastDocumentVersion=t}catch(e){console.error(e,"An error happened during restoring editor data. Editor will be restored from the previously saved data.")}}_setExcludedProperties(t){this._excludedProps=t}_getData(){const t=this._editor,e=t.model.document.roots.filter(a=>a.isAttached()&&a.rootName!="$graveyard"),{plugins:n}=t,i=n.has("CommentsRepository")&&n.get("CommentsRepository"),r=n.has("TrackChanges")&&n.get("TrackChanges"),s={roots:{},markers:{},commentThreads:JSON.stringify([]),suggestions:JSON.stringify([])};e.forEach(a=>{s.roots[a.rootName]={content:JSON.stringify(Array.from(a.getChildren())),attributes:JSON.stringify(Array.from(a.getAttributes())),isLoaded:a._isLoaded}});for(const a of t.model.markers)a._affectsData&&(s.markers[a.name]={rangeJSON:a.getRange().toJSON(),usingOperation:a._managedUsingOperations,affectsData:a._affectsData});return i&&(s.commentThreads=JSON.stringify(i.getCommentThreads({toJSON:!0,skipNotAttached:!0}))),r&&(s.suggestions=JSON.stringify(r.getSuggestions({toJSON:!0,skipNotAttached:!0}))),s}_getEditables(){const t={};for(const e of this.editor.model.document.getRootNames()){const n=this.editor.ui.getEditableElement(e);n&&(t[e]=n)}return t}_isErrorComingFromThisItem(t){return ju(this._editor,t.context,this._excludedProps)}_cloneEditorConfiguration(t){return Kr(t,(e,n)=>Mn(e)||n==="context"?e:void 0)}}class mv{constructor(t){this.editor=t,this._data=t.config.get("_watchdogInitialData")}init(){this.editor.data.on("init",t=>{t.stop(),this.editor.model.enqueueChange({isUndoable:!1},e=>{this._restoreCollaborationData(),this._restoreEditorData(e)}),this.editor.data.fire("ready")},{priority:999})}_createNode(t,e){if("name"in e){const n=t.createElement(e.name,e.attributes);if(e.children)for(const i of e.children)n._appendChild(this._createNode(t,i));return n}return t.createText(e.data,e.attributes)}_restoreEditorData(t){const e=this.editor;Object.entries(this._data.roots).forEach(([n,{content:i,attributes:r}])=>{const s=JSON.parse(i),a=JSON.parse(r),c=e.model.document.getRoot(n);for(const[l,d]of a)t.setAttribute(l,d,c);for(const l of s){const d=this._createNode(t,l);t.insert(d,c,"end")}}),Object.entries(this._data.markers).forEach(([n,i])=>{const{document:r}=e.model,s=i,{rangeJSON:{start:a,end:c}}=s,l=((p,k)=>{var b={};for(var A in p)Fu.call(p,A)&&k.indexOf(A)<0&&(b[A]=p[A]);if(p!=null&&sr)for(var A of sr(p))k.indexOf(A)<0&&Vu.call(p,A)&&(b[A]=p[A]);return b})(s,["rangeJSON"]),d=r.getRoot(a.root),h=t.createPositionFromPath(d,a.path,a.stickiness),u=t.createPositionFromPath(d,c.path,c.stickiness),g=t.createRange(h,u);t.addMarker(n,ia({range:g},l))})}_restoreCollaborationData(){const t=JSON.parse(this._data.commentThreads),e=JSON.parse(this._data.suggestions);t.forEach(n=>{const i=this.editor.config.get("collaboration.channelId"),r=this.editor.plugins.get("CommentsRepository");r.hasCommentThread(n.threadId)&&r.getCommentThread(n.threadId).remove(),r.addCommentThread(ia({channelId:i},n))}),e.forEach(n=>{const i=this.editor.plugins.get("TrackChangesEditing");i.hasSuggestion(n.id)?i.getSuggestion(n.id).attributes=n.attributes:i.addSuggestionData(n)})}}const ii=Symbol("MainQueueId");class fv{constructor(){this._onEmptyCallbacks=[],this._queues=new Map,this._activeActions=0}onEmpty(t){this._onEmptyCallbacks.push(t)}enqueue(t,e){const n=t===ii;this._activeActions++,this._queues.get(t)||this._queues.set(t,Promise.resolve());const i=(n?Promise.all(this._queues.values()):Promise.all([this._queues.get(ii),this._queues.get(t)])).then(e),r=i.catch(()=>{});return this._queues.set(t,r),i.finally(()=>{this._activeActions--,this._queues.get(t)===r&&this._activeActions===0&&this._onEmptyCallbacks.forEach(s=>s())})}}function qu(o){return Array.isArray(o)?o:[o]}class ar extends Zi(Ws(UC)){constructor(t,e={}){if(!cr(t)&&e.initialData!==void 0)throw new _("editor-create-initial-data",null);super(e),this.config.get("initialData")===void 0&&this.config.set("initialData",function(r){return cr(r)?(s=r,s instanceof HTMLTextAreaElement?s.value:s.innerHTML):r;var s}(t)),cr(t)&&(this.sourceElement=t),this.model.document.createRoot();const n=!this.config.get("toolbar.shouldNotGroupWhenFull"),i=new dv(this.locale,this.editing.view,{shouldToolbarGroupWhenFull:n});this.ui=new cv(this,i),function(r){if(!Dn(r.updateSourceElement))throw new _("attachtoform-missing-elementapi-interface",r);const s=r.sourceElement;if(function(a){return!!a&&a.tagName.toLowerCase()==="textarea"}(s)&&s.form){let a;const c=s.form,l=()=>r.updateSourceElement();Dn(c.submit)&&(a=c.submit,c.submit=()=>{l(),a.apply(c)}),c.addEventListener("submit",l),r.on("destroy",()=>{c.removeEventListener("submit",l),a&&(c.submit=a)})}}(this)}destroy(){return this.sourceElement&&this.updateSourceElement(),this.ui.destroy(),super.destroy()}static create(t,e={}){return new Promise(n=>{const i=new this(t,e);n(i.initPlugins().then(()=>i.ui.init(cr(t)?t:null)).then(()=>i.data.init(i.config.get("initialData"))).then(()=>i.fire("ready")).then(()=>i))})}}function cr(o){return Mn(o)}ar.Context=zl,ar.EditorWatchdog=Uu,ar.ContextWatchdog=class extends Ru{constructor(o,t={}){super(t),this._watchdogs=new Map,this._context=null,this._contextProps=new Set,this._actionQueues=new fv,this._watchdogConfig=t,this._creator=e=>o.create(e),this._destructor=e=>e.destroy(),this._actionQueues.onEmpty(()=>{this.state==="initializing"&&(this.state="ready",this._fire("stateChange"))})}setCreator(o){this._creator=o}setDestructor(o){this._destructor=o}get context(){return this._context}create(o={}){return this._actionQueues.enqueue(ii,()=>(this._contextConfig=o,this._create()))}getItem(o){return this._getWatchdog(o)._item}getItemState(o){return this._getWatchdog(o).state}add(o){const t=qu(o);return Promise.all(t.map(e=>this._actionQueues.enqueue(e.id,()=>{if(this.state==="destroyed")throw new Error("Cannot add items to destroyed watchdog.");if(!this._context)throw new Error("Context was not created yet. You should call the `ContextWatchdog#create()` method first.");let n;if(this._watchdogs.has(e.id))throw new Error(`Item with the given id is already added: '${e.id}'.`);if(e.type==="editor")return n=new Uu(null,this._watchdogConfig),n.setCreator(e.creator),n._setExcludedProperties(this._contextProps),e.destructor&&n.setDestructor(e.destructor),this._watchdogs.set(e.id,n),n.on("error",(i,{error:r,causesRestart:s})=>{this._fire("itemError",{itemId:e.id,error:r}),s&&this._actionQueues.enqueue(e.id,()=>new Promise(a=>{const c=()=>{n.off("restart",c),this._fire("itemRestart",{itemId:e.id}),a()};n.on("restart",c)}))}),n.create(e.sourceElementOrData,e.config,this._context);throw new Error(`Not supported item type: '${e.type}'.`)})))}remove(o){const t=qu(o);return Promise.all(t.map(e=>this._actionQueues.enqueue(e,()=>{const n=this._getWatchdog(e);return this._watchdogs.delete(e),n.destroy()})))}destroy(){return this._actionQueues.enqueue(ii,()=>(this.state="destroyed",this._fire("stateChange"),super.destroy(),this._destroy()))}_restart(){return this._actionQueues.enqueue(ii,()=>(this.state="initializing",this._fire("stateChange"),this._destroy().catch(o=>{console.error("An error happened during destroying the context or items.",o)}).then(()=>this._create()).then(()=>this._fire("restart"))))}_create(){return Promise.resolve().then(()=>(this._startErrorHandling(),this._creator(this._contextConfig))).then(o=>(this._context=o,this._contextProps=oa(this._context),Promise.all(Array.from(this._watchdogs.values()).map(t=>(t._setExcludedProperties(this._contextProps),t.create(void 0,void 0,this._context))))))}_destroy(){return Promise.resolve().then(()=>{this._stopErrorHandling();const o=this._context;return this._context=null,this._contextProps=new Set,Promise.all(Array.from(this._watchdogs.values()).map(t=>t.destroy())).then(()=>this._destructor(o))})}_getWatchdog(o){const t=this._watchdogs.get(o);if(!t)throw new Error(`Item with the given id was not registered: ${o}.`);return t}_isErrorComingFromThisItem(o){for(const t of this._watchdogs.values())if(t._isErrorComingFromThisItem(o))return!1;return ju(this._context,o.context)}};class ri extends fn{constructor(t){super(t),this.domEventType=["paste","copy","cut","drop","dragover","dragstart","dragend","dragenter","dragleave"];const e=this.document;function n(i){return(r,s)=>{s.preventDefault();const a=s.dropRange?[s.dropRange]:null,c=new H(e,i);e.fire(c,{dataTransfer:s.dataTransfer,method:r.name,targetRanges:a,target:s.target,domEvent:s.domEvent}),c.stop.called&&s.stopPropagation()}}this.listenTo(e,"paste",n("clipboardInput"),{priority:"low"}),this.listenTo(e,"drop",n("clipboardInput"),{priority:"low"}),this.listenTo(e,"dragover",n("dragging"),{priority:"low"})}onDomEvent(t){const e="clipboardData"in t?t.clipboardData:t.dataTransfer,n=t.type=="drop"||t.type=="paste",i={dataTransfer:new xd(e,{cacheFiles:n})};t.type!="drop"&&t.type!="dragover"||(i.dropRange=function(r,s){const a=s.target.ownerDocument,c=s.clientX,l=s.clientY;let d;return a.caretRangeFromPoint&&a.caretRangeFromPoint(c,l)?d=a.caretRangeFromPoint(c,l):s.rangeParent&&(d=a.createRange(),d.setStart(s.rangeParent,s.rangeOffset),d.collapse(!0)),d?r.domConverter.domRangeToView(d):null}(this.view,t)),this.fire(t.type,t,i)}}const Gu=["figcaption","li"],Wu=["ol","ul"];function $u(o){if(o.is("$text")||o.is("$textProxy"))return o.data;if(o.is("element","img")&&o.hasAttribute("alt"))return o.getAttribute("alt");if(o.is("element","br"))return` `;let t="",e=null;for(const n of o.getChildren())t+=kv(n,e)+$u(n),e=n;return t}function kv(o,t){return t?o.is("element","li")&&!o.isEmpty&&o.getChild(0).is("containerElement")||Wu.includes(o.name)&&Wu.includes(t.name)?` `:o.is("containerElement")||t.is("containerElement")?Gu.includes(o.name)||Gu.includes(t.name)?` `:` -`:"":""}class Re extends R{static get pluginName(){return"ClipboardPipeline"}init(){this.editor.editing.view.addObserver(ri),this._setupPasteDrop(),this._setupCopyCut()}_fireOutputTransformationEvent(t,e,n){const i=this.editor.model.getSelectedContent(e);this.fire("outputTransformation",{dataTransfer:t,content:i,method:n})}_setupPasteDrop(){const t=this.editor,e=t.model,n=t.editing.view,i=n.document;this.listenTo(i,"clipboardInput",(r,s)=>{s.method!="paste"||t.model.canEditAt(t.model.document.selection)||r.stop()},{priority:"highest"}),this.listenTo(i,"clipboardInput",(r,s)=>{const a=s.dataTransfer;let c;if(s.content)c=s.content;else{let h="";a.getData("text/html")?h=function(u){return u.replace(/(\s+)<\/span>/g,(g,p)=>p.length==1?" ":p).replace(//g,"")}(a.getData("text/html")):a.getData("text/plain")&&(((l=(l=a.getData("text/plain")).replace(/&/g,"&").replace(//g,">").replace(/\r?\n\r?\n/g,"

").replace(/\r?\n/g,"
").replace(/\t/g,"    ").replace(/^\s/," ").replace(/\s$/," ").replace(/\s\s/g,"  ")).includes("

")||l.includes("
"))&&(l=`

${l}

`),h=l),c=this.editor.data.htmlProcessor.toView(h)}var l;const d=new H(this,"inputTransformation");this.fire(d,{content:c,dataTransfer:a,targetRanges:s.targetRanges,method:s.method}),d.stop.called&&r.stop(),n.scrollToTheSelection()},{priority:"low"}),this.listenTo(this,"inputTransformation",(r,s)=>{if(s.content.isEmpty)return;const a=this.editor.data.toModel(s.content,"$clipboardHolder");a.childCount!=0&&(r.stop(),e.change(()=>{this.fire("contentInsertion",{content:a,method:s.method,dataTransfer:s.dataTransfer,targetRanges:s.targetRanges})}))},{priority:"low"}),this.listenTo(this,"contentInsertion",(r,s)=>{s.resultRange=e.insertContent(s.content)},{priority:"low"})}_setupCopyCut(){const t=this.editor,e=t.model.document,n=t.editing.view.document,i=(r,s)=>{const a=s.dataTransfer;s.preventDefault(),this._fireOutputTransformationEvent(a,e.selection,r.name)};this.listenTo(n,"copy",i,{priority:"low"}),this.listenTo(n,"cut",(r,s)=>{t.model.canEditAt(t.model.document.selection)?i(r,s):s.preventDefault()},{priority:"low"}),this.listenTo(this,"outputTransformation",(r,s)=>{const a=t.data.toView(s.content);n.fire("clipboardOutput",{dataTransfer:s.dataTransfer,content:a,method:s.method})},{priority:"low"}),this.listenTo(n,"clipboardOutput",(r,s)=>{s.content.isEmpty||(s.dataTransfer.setData("text/html",this.editor.data.htmlProcessor.toData(s.content)),s.dataTransfer.setData("text/plain",$u(s.content))),s.method=="cut"&&t.model.deleteContent(e.selection)},{priority:"low"})}}class Ku{constructor(t,e=20){this._batch=null,this.model=t,this._size=0,this.limit=e,this._isLocked=!1,this._changeCallback=(n,i)=>{i.isLocal&&i.isUndoable&&i!==this._batch&&this._reset(!0)},this._selectionChangeCallback=()=>{this._reset()},this.model.document.on("change",this._changeCallback),this.model.document.selection.on("change:range",this._selectionChangeCallback),this.model.document.selection.on("change:attribute",this._selectionChangeCallback)}get batch(){return this._batch||(this._batch=this.model.createBatch({isTyping:!0})),this._batch}get size(){return this._size}input(t){this._size+=t,this._size>=this.limit&&this._reset(!0)}get isLocked(){return this._isLocked}lock(){this._isLocked=!0}unlock(){this._isLocked=!1}destroy(){this.model.document.off("change",this._changeCallback),this.model.document.selection.off("change:range",this._selectionChangeCallback),this.model.document.selection.off("change:attribute",this._selectionChangeCallback)}_reset(t=!1){this.isLocked&&!t||(this._batch=null,this._size=0)}}class bv extends at{constructor(t,e){super(t),this._buffer=new Ku(t.model,e),this._isEnabledBasedOnSelection=!1}get buffer(){return this._buffer}destroy(){super.destroy(),this._buffer.destroy()}execute(t={}){const e=this.editor.model,n=e.document,i=t.text||"",r=i.length;let s=n.selection;if(t.selection?s=t.selection:t.range&&(s=e.createSelection(t.range)),!e.canEditAt(s))return;const a=t.resultRange;e.enqueueChange(this._buffer.batch,c=>{this._buffer.lock();const l=Array.from(n.selection.getAttributes());e.deleteContent(s),i&&e.insertContent(c.createText(i,l),s),a?c.setSelection(a):s.is("documentSelection")||c.setSelection(s),this._buffer.unlock(),this._buffer.input(r)})}}const Yu=["insertText","insertReplacementText"];class wv extends Ke{constructor(t){super(t),this.focusObserver=t.getObserver(Wi),f.isAndroid&&Yu.push("insertCompositionText");const e=t.document;e.on("beforeinput",(n,i)=>{if(!this.isEnabled)return;const{data:r,targetRanges:s,inputType:a,domEvent:c}=i;if(!Yu.includes(a))return;this.focusObserver.flush();const l=new H(e,"insertText");e.fire(l,new ho(t,c,{text:r,selection:t.createSelection(s)})),l.stop.called&&n.stop()}),e.on("compositionend",(n,{data:i,domEvent:r})=>{this.isEnabled&&!f.isAndroid&&i&&e.fire("insertText",new ho(t,r,{text:i,selection:e.selection}))},{priority:"lowest"})}observe(){}stopObserving(){}}class Qu extends R{static get pluginName(){return"Input"}init(){const t=this.editor,e=t.model,n=t.editing.view,i=e.document.selection;n.addObserver(wv);const r=new bv(t,t.config.get("typing.undoStep")||20);t.commands.add("insertText",r),t.commands.add("input",r),this.listenTo(n.document,"insertText",(s,a)=>{n.document.isComposing||a.preventDefault();const{text:c,selection:l,resultRange:d}=a,h=Array.from(l.getRanges()).map(p=>t.editing.mapper.toModelRange(p));let u=c;if(f.isAndroid){const p=Array.from(h[0].getItems()).reduce((k,b)=>k+(b.is("$textProxy")?b.data:""),"");p&&(p.length<=u.length?u.startsWith(p)&&(u=u.substring(p.length),h[0].start=h[0].start.getShiftedBy(p.length)):p.startsWith(u)&&(h[0].start=h[0].start.getShiftedBy(u.length),u=""))}const g={text:u,selection:e.createSelection(h)};d&&(g.resultRange=t.editing.mapper.toModelRange(d)),t.execute("insertText",g),n.scrollToTheSelection()}),f.isAndroid?this.listenTo(n.document,"keydown",(s,a)=>{!i.isCollapsed&&a.keyCode==229&&n.document.isComposing&&Zu(e,r)}):this.listenTo(n.document,"compositionstart",()=>{i.isCollapsed||Zu(e,r)})}}function Zu(o,t){if(!t.isEnabled)return;const e=t.buffer;e.lock(),o.enqueueChange(e.batch,()=>{o.deleteContent(o.document.selection)}),e.unlock()}class Ju extends at{constructor(t,e){super(t),this.direction=e,this._buffer=new Ku(t.model,t.config.get("typing.undoStep")),this._isEnabledBasedOnSelection=!1}get buffer(){return this._buffer}execute(t={}){const e=this.editor.model,n=e.document;e.enqueueChange(this._buffer.batch,i=>{this._buffer.lock();const r=i.createSelection(t.selection||n.selection);if(!e.canEditAt(r))return;const s=t.sequence||1,a=r.isCollapsed;if(r.isCollapsed&&e.modifySelection(r,{direction:this.direction,unit:t.unit,treatEmojiAsSingleUnit:!0}),this._shouldEntireContentBeReplacedWithParagraph(s))return void this._replaceEntireContentWithParagraph(i);if(this._shouldReplaceFirstBlockWithParagraph(r,s))return void this.editor.execute("paragraph",{selection:r});if(r.isCollapsed)return;let c=0;r.getFirstRange().getMinimalFlatRanges().forEach(l=>{c+=Ft(l.getWalker({singleCharacters:!0,ignoreElementEnd:!0,shallow:!0}))}),e.deleteContent(r,{doNotResetEntireContent:a,direction:this.direction}),this._buffer.input(c),i.setSelection(r),this._buffer.unlock()})}_shouldEntireContentBeReplacedWithParagraph(t){if(t>1)return!1;const e=this.editor.model,n=e.document.selection,i=e.schema.getLimitElement(n);if(!(n.isCollapsed&&n.containsEntireContent(i))||!e.schema.checkChild(i,"paragraph"))return!1;const r=i.getChild(0);return!r||!r.is("element","paragraph")}_replaceEntireContentWithParagraph(t){const e=this.editor.model,n=e.document.selection,i=e.schema.getLimitElement(n),r=t.createElement("paragraph");t.remove(t.createRangeIn(i)),t.insert(r,i),t.setSelection(r,0)}_shouldReplaceFirstBlockWithParagraph(t,e){const n=this.editor.model;if(e>1||this.direction!="backward"||!t.isCollapsed)return!1;const i=t.getFirstPosition(),r=n.schema.getLimitElement(i),s=r.getChild(0);return i.parent==s&&!!t.containsEntireContent(s)&&!!n.schema.checkChild(r,"paragraph")&&s.name!="paragraph"}}const Xu="word",wn="selection",fo="backward",si="forward",tg={deleteContent:{unit:wn,direction:fo},deleteContentBackward:{unit:"codePoint",direction:fo},deleteWordBackward:{unit:Xu,direction:fo},deleteHardLineBackward:{unit:wn,direction:fo},deleteSoftLineBackward:{unit:wn,direction:fo},deleteContentForward:{unit:"character",direction:si},deleteWordForward:{unit:Xu,direction:si},deleteHardLineForward:{unit:wn,direction:si},deleteSoftLineForward:{unit:wn,direction:si}};class Av extends Ke{constructor(t){super(t);const e=t.document;let n=0;e.on("keydown",()=>{n++}),e.on("keyup",()=>{n=0}),e.on("beforeinput",(i,r)=>{if(!this.isEnabled)return;const{targetRanges:s,domEvent:a,inputType:c}=r,l=tg[c];if(!l)return;const d={direction:l.direction,unit:l.unit,sequence:n};d.unit==wn&&(d.selectionToRemove=t.createSelection(s[0])),c==="deleteContentBackward"&&(f.isAndroid&&(d.sequence=1),function(u){if(u.length!=1||u[0].isCollapsed)return!1;const g=u[0].getWalker({direction:"backward",singleCharacters:!0,ignoreElementEnd:!0});let p=0;for(const{nextPosition:k}of g){if(k.parent.is("$text")){const b=k.parent.data,A=k.offset;if(es(b,A)||os(b,A)||il(b,A))continue;p++}else p++;if(p>1)return!0}return!1}(s)&&(d.unit=wn,d.selectionToRemove=t.createSelection(s)));const h=new co(e,"delete",s[0]);e.fire(h,new ho(t,a,d)),h.stop.called&&i.stop()}),f.isBlink&&function(i){const r=i.view,s=r.document;let a=null,c=!1;function l(h){return h==ut.backspace||h==ut.delete}function d(h){return h==ut.backspace?fo:si}s.on("keydown",(h,{keyCode:u})=>{a=u,c=!1}),s.on("keyup",(h,{keyCode:u,domEvent:g})=>{const p=s.selection,k=i.isEnabled&&u==a&&l(u)&&!p.isCollapsed&&!c;if(a=null,k){const b=p.getFirstRange(),A=new co(s,"delete",b),E={unit:wn,direction:d(u),selectionToRemove:p};s.fire(A,new ho(r,g,E))}}),s.on("beforeinput",(h,{inputType:u})=>{const g=tg[u];l(a)&&g&&g.direction==d(a)&&(c=!0)},{priority:"high"}),s.on("beforeinput",(h,{inputType:u,data:g})=>{a==ut.delete&&u=="insertText"&&g==""&&h.stop()},{priority:"high"})}(this)}observe(){}stopObserving(){}}class sn extends R{static get pluginName(){return"Delete"}init(){const t=this.editor,e=t.editing.view,n=e.document,i=t.model.document;e.addObserver(Av),this._undoOnBackspace=!1;const r=new Ju(t,"forward");t.commands.add("deleteForward",r),t.commands.add("forwardDelete",r),t.commands.add("delete",new Ju(t,"backward")),this.listenTo(n,"delete",(s,a)=>{n.isComposing||a.preventDefault();const{direction:c,sequence:l,selectionToRemove:d,unit:h}=a,u=c==="forward"?"deleteForward":"delete",g={sequence:l};if(h=="selection"){const p=Array.from(d.getRanges()).map(k=>t.editing.mapper.toModelRange(k));g.selection=t.model.createSelection(p)}else g.unit=h;t.execute(u,g),e.scrollToTheSelection()},{priority:"low"}),this.editor.plugins.has("UndoEditing")&&(this.listenTo(n,"delete",(s,a)=>{this._undoOnBackspace&&a.direction=="backward"&&a.sequence==1&&a.unit=="codePoint"&&(this._undoOnBackspace=!1,t.execute("undo"),a.preventDefault(),s.stop())},{context:"$capture"}),this.listenTo(i,"change",()=>{this._undoOnBackspace=!1}))}requestUndoOnBackspace(){this.editor.plugins.has("UndoEditing")&&(this._undoOnBackspace=!0)}}class Cv extends R{static get requires(){return[Qu,sn]}static get pluginName(){return"Typing"}}function eg(o,t){let e=o.start;return{text:Array.from(o.getWalker({ignoreElementEnd:!1})).reduce((n,{item:i})=>i.is("$text")||i.is("$textProxy")?n+i.data:(e=t.createPositionAfter(i),""),""),range:t.createRange(e,o.end)}}class ng extends mt(){constructor(t,e){super(),this.model=t,this.testCallback=e,this._hasMatch=!1,this.set("isEnabled",!0),this.on("change:isEnabled",()=>{this.isEnabled?this._startListening():(this.stopListening(t.document.selection),this.stopListening(t.document))}),this._startListening()}get hasMatch(){return this._hasMatch}_startListening(){const t=this.model.document;this.listenTo(t.selection,"change:range",(e,{directChange:n})=>{n&&(t.selection.isCollapsed?this._evaluateTextBeforeSelection("selection"):this.hasMatch&&(this.fire("unmatched"),this._hasMatch=!1))}),this.listenTo(t,"change:data",(e,n)=>{!n.isUndo&&n.isLocal&&this._evaluateTextBeforeSelection("data",{batch:n})})}_evaluateTextBeforeSelection(t,e={}){const n=this.model,i=n.document.selection,r=n.createRange(n.createPositionAt(i.focus.parent,0),i.focus),{text:s,range:a}=eg(r,n),c=this.testCallback(s);if(!c&&this.hasMatch&&this.fire("unmatched"),this._hasMatch=!!c,c){const l=Object.assign(e,{text:s,range:a});typeof c=="object"&&Object.assign(l,c),this.fire(`matched:${t}`,l)}}}class og extends R{constructor(t){super(t),this._isNextGravityRestorationSkipped=!1,this.attributes=new Set,this._overrideUid=null}static get pluginName(){return"TwoStepCaretMovement"}init(){const t=this.editor,e=t.model,n=t.editing.view,i=t.locale,r=e.document.selection;this.listenTo(n.document,"arrowKey",(s,a)=>{if(!r.isCollapsed||a.shiftKey||a.altKey||a.ctrlKey)return;const c=a.keyCode==ut.arrowright,l=a.keyCode==ut.arrowleft;if(!c&&!l)return;const d=i.contentLanguageDirection;let h=!1;h=d==="ltr"&&c||d==="rtl"&&l?this._handleForwardMovement(a):this._handleBackwardMovement(a),h===!0&&s.stop()},{context:"$text",priority:"highest"}),this.listenTo(r,"change:range",(s,a)=>{this._isNextGravityRestorationSkipped?this._isNextGravityRestorationSkipped=!1:this._isGravityOverridden&&(!a.directChange&&ye(r.getFirstPosition(),this.attributes)||this._restoreGravity())}),this._enableClickingAfterNode(),this._enableInsertContentSelectionAttributesFixer(),this._handleDeleteContentAfterNode()}registerAttribute(t){this.attributes.add(t)}_handleForwardMovement(t){const e=this.attributes,n=this.editor.model,i=n.document.selection,r=i.getFirstPosition();return!this._isGravityOverridden&&(!r.isAtStart||!an(i,e))&&!!ye(r,e)&&(ci(t),an(i,e)&&ye(r,e,!0)?ai(n,e):this._overrideGravity(),!0)}_handleBackwardMovement(t){const e=this.attributes,n=this.editor.model,i=n.document.selection,r=i.getFirstPosition();return this._isGravityOverridden?(ci(t),this._restoreGravity(),ye(r,e,!0)?ai(n,e):lr(n,e,r),!0):r.isAtStart?!!an(i,e)&&(ci(t),lr(n,e,r),!0):!an(i,e)&&ye(r,e,!0)?(ci(t),lr(n,e,r),!0):!!ig(r,e)&&(r.isAtEnd&&!an(i,e)&&ye(r,e)?(ci(t),lr(n,e,r),!0):(this._isNextGravityRestorationSkipped=!0,this._overrideGravity(),!1))}_enableClickingAfterNode(){const t=this.editor,e=t.model,n=e.document.selection,i=t.editing.view.document;t.editing.view.addObserver(Gs);let r=!1;this.listenTo(i,"mousedown",()=>{r=!0}),this.listenTo(i,"selectionChange",()=>{const s=this.attributes;if(!r||(r=!1,!n.isCollapsed)||!an(n,s))return;const a=n.getFirstPosition();ye(a,s)&&(a.isAtStart||ye(a,s,!0)?ai(e,s):this._isGravityOverridden||this._overrideGravity())})}_enableInsertContentSelectionAttributesFixer(){const t=this.editor.model,e=t.document.selection,n=this.attributes;this.listenTo(t,"insertContent",()=>{const i=e.getFirstPosition();an(e,n)&&ye(i,n)&&ai(t,n)},{priority:"low"})}_handleDeleteContentAfterNode(){const t=this.editor,e=t.model,n=e.document.selection,i=t.editing.view;let r=!1,s=!1;this.listenTo(i.document,"delete",(a,c)=>{r=c.direction==="backward"},{priority:"high"}),this.listenTo(e,"deleteContent",()=>{if(!r)return;const a=n.getFirstPosition();s=an(n,this.attributes)&&!ig(a,this.attributes)},{priority:"high"}),this.listenTo(e,"deleteContent",()=>{r&&(r=!1,s||t.model.enqueueChange(()=>{const a=n.getFirstPosition();an(n,this.attributes)&&ye(a,this.attributes)&&(a.isAtStart||ye(a,this.attributes,!0)?ai(e,this.attributes):this._isGravityOverridden||this._overrideGravity())}))},{priority:"low"})}get _isGravityOverridden(){return!!this._overrideUid}_overrideGravity(){this._overrideUid=this.editor.model.change(t=>t.overrideSelectionGravity())}_restoreGravity(){this.editor.model.change(t=>{t.restoreSelectionGravity(this._overrideUid),this._overrideUid=null})}}function an(o,t){for(const e of t)if(o.hasAttribute(e))return!0;return!1}function lr(o,t,e){const n=e.nodeBefore;o.change(i=>{if(n){const r=[],s=o.schema.isObject(n)&&o.schema.isInline(n);for(const[a,c]of n.getAttributes())!o.schema.checkAttribute("$text",a)||s&&o.schema.getAttributeProperties(a).copyFromObject===!1||r.push([a,c]);i.setSelectionAttribute(r)}else i.removeSelectionAttribute(t)})}function ai(o,t){o.change(e=>{e.removeSelectionAttribute(t)})}function ci(o){o.preventDefault()}function ig(o,t){return ye(o.getShiftedBy(-1),t)}function ye(o,t,e=!1){const{nodeBefore:n,nodeAfter:i}=o;for(const r of t){const s=n?n.getAttribute(r):void 0,a=i?i.getAttribute(r):void 0;if((!e||s!==void 0&&a!==void 0)&&a!==s)return!0}return!1}const rg={copyright:{from:"(c)",to:"©"},registeredTrademark:{from:"(r)",to:"®"},trademark:{from:"(tm)",to:"™"},oneHalf:{from:/(^|[^/a-z0-9])(1\/2)([^/a-z0-9])$/i,to:[null,"½",null]},oneThird:{from:/(^|[^/a-z0-9])(1\/3)([^/a-z0-9])$/i,to:[null,"⅓",null]},twoThirds:{from:/(^|[^/a-z0-9])(2\/3)([^/a-z0-9])$/i,to:[null,"⅔",null]},oneForth:{from:/(^|[^/a-z0-9])(1\/4)([^/a-z0-9])$/i,to:[null,"¼",null]},threeQuarters:{from:/(^|[^/a-z0-9])(3\/4)([^/a-z0-9])$/i,to:[null,"¾",null]},lessThanOrEqual:{from:"<=",to:"≤"},greaterThanOrEqual:{from:">=",to:"≥"},notEqual:{from:"!=",to:"≠"},arrowLeft:{from:"<-",to:"←"},arrowRight:{from:"->",to:"→"},horizontalEllipsis:{from:"...",to:"…"},enDash:{from:/(^| )(--)( )$/,to:[null,"–",null]},emDash:{from:/(^| )(---)( )$/,to:[null,"—",null]},quotesPrimary:{from:ko('"'),to:[null,"“",null,"”"]},quotesSecondary:{from:ko("'"),to:[null,"‘",null,"’"]},quotesPrimaryEnGb:{from:ko("'"),to:[null,"‘",null,"’"]},quotesSecondaryEnGb:{from:ko('"'),to:[null,"“",null,"”"]},quotesPrimaryPl:{from:ko('"'),to:[null,"„",null,"”"]},quotesSecondaryPl:{from:ko("'"),to:[null,"‚",null,"’"]}},sg={symbols:["copyright","registeredTrademark","trademark"],mathematical:["oneHalf","oneThird","twoThirds","oneForth","threeQuarters","lessThanOrEqual","greaterThanOrEqual","notEqual","arrowLeft","arrowRight"],typography:["horizontalEllipsis","enDash","emDash"],quotes:["quotesPrimary","quotesSecondary"]},_v=["symbols","mathematical","typography","quotes"];function vv(o){return typeof o=="string"?new RegExp(`(${Iu(o)})$`):o}function yv(o){return typeof o=="string"?()=>[o]:o instanceof Array?()=>o:o}function xv(o){return(o.textNode?o.textNode:o.nodeAfter).getAttributes()}function ko(o){return new RegExp(`(^|\\s)(${o})([^${o}]*)(${o})$`)}function dr(o,t,e,n){return n.createRange(ag(o,t,e,!0,n),ag(o,t,e,!1,n))}function ag(o,t,e,n,i){let r=o.textNode||(n?o.nodeBefore:o.nodeAfter),s=null;for(;r&&r.getAttribute(t)==e;)s=r,r=n?r.previousSibling:r.nextSibling;return s?i.createPositionAt(s,n?"before":"after"):o}function*cg(o,t){for(const e of t)e&&o.getAttributeProperties(e[0]).copyOnEnter&&(yield e)}class Ev extends at{execute(){this.editor.model.change(t=>{this.enterBlock(t),this.fire("afterExecute",{writer:t})})}enterBlock(t){const e=this.editor.model,n=e.document.selection,i=e.schema,r=n.isCollapsed,s=n.getFirstRange(),a=s.start.parent,c=s.end.parent;if(i.isLimit(a)||i.isLimit(c))return r||a!=c||e.deleteContent(n),!1;if(r){const l=cg(t.model.schema,n.getAttributes());return lg(t,s.start),t.setSelectionAttribute(l),!0}{const l=!(s.start.isAtStart&&s.end.isAtEnd),d=a==c;if(e.deleteContent(n,{leaveUnmerged:l}),l){if(d)return lg(t,n.focus),!0;t.setSelection(c,0)}}return!1}}function lg(o,t){o.split(t),o.setSelection(t.parent.nextSibling,0)}const Dv={insertParagraph:{isSoft:!1},insertLineBreak:{isSoft:!0}};class dg extends Ke{constructor(t){super(t);const e=this.document;let n=!1;e.on("keydown",(i,r)=>{n=r.shiftKey}),e.on("beforeinput",(i,r)=>{if(!this.isEnabled)return;let s=r.inputType;f.isSafari&&n&&s=="insertParagraph"&&(s="insertLineBreak");const a=r.domEvent,c=Dv[s];if(!c)return;const l=new co(e,"enter",r.targetRanges[0]);e.fire(l,new ho(t,a,{isSoft:c.isSoft})),l.stop.called&&i.stop()})}observe(){}stopObserving(){}}class hr extends R{static get pluginName(){return"Enter"}init(){const t=this.editor,e=t.editing.view,n=e.document;e.addObserver(dg),t.commands.add("enter",new Ev(t)),this.listenTo(n,"enter",(i,r)=>{n.isComposing||r.preventDefault(),r.isSoft||(t.execute("enter"),e.scrollToTheSelection())},{priority:"low"})}}class Iv extends at{execute(){const t=this.editor.model,e=t.document;t.change(n=>{(function(i,r,s){const a=s.isCollapsed,c=s.getFirstRange(),l=c.start.parent,d=c.end.parent,h=l==d;if(a){const u=cg(i.schema,s.getAttributes());hg(i,r,c.end),r.removeSelectionAttribute(s.getAttributeKeys()),r.setSelectionAttribute(u)}else{const u=!(c.start.isAtStart&&c.end.isAtEnd);i.deleteContent(s,{leaveUnmerged:u}),h?hg(i,r,s.focus):u&&r.setSelection(d,0)}})(t,n,e.selection),this.fire("afterExecute",{writer:n})})}refresh(){const t=this.editor.model,e=t.document;this.isEnabled=function(n,i){if(i.rangeCount>1)return!1;const r=i.anchor;if(!r||!n.checkChild(r,"softBreak"))return!1;const s=i.getFirstRange(),a=s.start.parent,c=s.end.parent;return!((ra(a,n)||ra(c,n))&&a!==c)}(t.schema,e.selection)}}function hg(o,t,e){const n=t.createElement("softBreak");o.insertContent(n,e),t.setSelection(n,"after")}function ra(o,t){return!o.is("rootElement")&&(t.isLimit(o)||ra(o.parent,t))}class Sv extends R{static get pluginName(){return"ShiftEnter"}init(){const t=this.editor,e=t.model.schema,n=t.conversion,i=t.editing.view,r=i.document;e.register("softBreak",{allowWhere:"$text",isInline:!0}),n.for("upcast").elementToElement({model:"softBreak",view:"br"}),n.for("downcast").elementToElement({model:"softBreak",view:(s,{writer:a})=>a.createEmptyElement("br")}),i.addObserver(dg),t.commands.add("shiftEnter",new Iv(t)),this.listenTo(r,"enter",(s,a)=>{r.isComposing||a.preventDefault(),a.isSoft&&(t.execute("shiftEnter"),i.scrollToTheSelection())},{priority:"low"})}}class Tv extends kt(){constructor(){super(...arguments),this._stack=[]}add(t,e){const n=this._stack,i=n[0];this._insertDescriptor(t);const r=n[0];i===r||sa(i,r)||this.fire("change:top",{oldDescriptor:i,newDescriptor:r,writer:e})}remove(t,e){const n=this._stack,i=n[0];this._removeDescriptor(t);const r=n[0];i===r||sa(i,r)||this.fire("change:top",{oldDescriptor:i,newDescriptor:r,writer:e})}_insertDescriptor(t){const e=this._stack,n=e.findIndex(r=>r.id===t.id);if(sa(t,e[n]))return;n>-1&&e.splice(n,1);let i=0;for(;e[i]&&Mv(e[i],t);)i++;e.splice(i,0,t)}_removeDescriptor(t){const e=this._stack,n=e.findIndex(i=>i.id===t);n>-1&&e.splice(n,1)}}function sa(o,t){return o&&t&&o.priority==t.priority&&ur(o.classes)==ur(t.classes)}function Mv(o,t){return o.priority>t.priority||!(o.priorityur(t.classes)}function ur(o){return Array.isArray(o)?o.sort().join(","):o}const Bv='',Nv="ck-widget",ug="ck-widget_selected";function qt(o){return!!o.is("element")&&!!o.getCustomProperty("widget")}function aa(o,t,e={}){if(!o.is("containerElement"))throw new _("widget-to-widget-wrong-element-type",null,{element:o});return t.setAttribute("contenteditable","false",o),t.addClass(Nv,o),t.setCustomProperty("widget",!0,o),o.getFillerOffset=Ov,t.setCustomProperty("widgetLabel",[],o),e.label&&function(n,i){n.getCustomProperty("widgetLabel").push(i)}(o,e.label),e.hasSelectionHandle&&function(n,i){const r=i.createUIElement("div",{class:"ck ck-widget__selection-handle"},function(s){const a=this.toDomElement(s),c=new mn;return c.set("content",Bv),c.render(),a.appendChild(c.element),a});i.insert(i.createPositionAt(n,0),r),i.addClass(["ck-widget_with-selection-handle"],n)}(o,t),gg(o,t),o}function Pv(o,t,e){if(t.classes&&e.addClass(Bt(t.classes),o),t.attributes)for(const n in t.attributes)e.setAttribute(n,t.attributes[n],o)}function Lv(o,t,e){if(t.classes&&e.removeClass(Bt(t.classes),o),t.attributes)for(const n in t.attributes)e.removeAttribute(n,o)}function gg(o,t,e=Pv,n=Lv){const i=new Tv;i.on("change:top",(r,s)=>{s.oldDescriptor&&n(o,s.oldDescriptor,s.writer),s.newDescriptor&&e(o,s.newDescriptor,s.writer)}),t.setCustomProperty("addHighlight",(r,s,a)=>i.add(s,a),o),t.setCustomProperty("removeHighlight",(r,s,a)=>i.remove(s,a),o)}function pg(o,t,e={}){return t.addClass(["ck-editor__editable","ck-editor__nested-editable"],o),t.setAttribute("role","textbox",o),e.label&&t.setAttribute("aria-label",e.label,o),t.setAttribute("contenteditable",o.isReadOnly?"false":"true",o),o.on("change:isReadOnly",(n,i,r)=>{t.setAttribute("contenteditable",r?"false":"true",o)}),o.on("change:isFocused",(n,i,r)=>{r?t.addClass("ck-editor__nested-editable_focused",o):t.removeClass("ck-editor__nested-editable_focused",o)}),gg(o,t),o}function mg(o,t){const e=o.getSelectedElement();if(e){const n=An(o);if(n)return t.createRange(t.createPositionAt(e,n))}return t.schema.findOptimalInsertionRange(o)}function Ov(){return null}const cn="widget-type-around";function Un(o,t,e){return!!o&&qt(o)&&!e.isInline(t)}function An(o){return o.getAttribute(cn)}var fg=N(3940),zv={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(fg.c,zv),fg.c.locals;const kg=["before","after"],Rv=new DOMParser().parseFromString('',"image/svg+xml").firstChild,bg="ck-widget__type-around_disabled";class jv extends R{constructor(){super(...arguments),this._currentFakeCaretModelElement=null}static get pluginName(){return"WidgetTypeAround"}static get requires(){return[hr,sn]}init(){const t=this.editor,e=t.editing.view;this.on("change:isEnabled",(n,i,r)=>{e.change(s=>{for(const a of e.document.roots)r?s.removeClass(bg,a):s.addClass(bg,a)}),r||t.model.change(s=>{s.removeSelectionAttribute(cn)})}),this._enableTypeAroundUIInjection(),this._enableInsertingParagraphsOnButtonClick(),this._enableInsertingParagraphsOnEnterKeypress(),this._enableInsertingParagraphsOnTypingKeystroke(),this._enableTypeAroundFakeCaretActivationUsingKeyboardArrows(),this._enableDeleteIntegration(),this._enableInsertContentIntegration(),this._enableInsertObjectIntegration(),this._enableDeleteContentIntegration()}destroy(){super.destroy(),this._currentFakeCaretModelElement=null}_insertParagraph(t,e){const n=this.editor,i=n.editing.view,r=n.model.schema.getAttributesWithProperty(t,"copyOnReplace",!0);n.execute("insertParagraph",{position:n.model.createPositionAt(t,e),attributes:r}),i.focus(),i.scrollToTheSelection()}_listenToIfEnabled(t,e,n,i){this.listenTo(t,e,(...r)=>{this.isEnabled&&n(...r)},i)}_insertParagraphAccordingToFakeCaretPosition(){const t=this.editor.model.document.selection,e=An(t);if(!e)return!1;const n=t.getSelectedElement();return this._insertParagraph(n,e),!0}_enableTypeAroundUIInjection(){const t=this.editor,e=t.model.schema,n=t.locale.t,i={before:n("Insert paragraph before block"),after:n("Insert paragraph after block")};t.editing.downcastDispatcher.on("insert",(r,s,a)=>{const c=a.mapper.toViewElement(s.item);c&&Un(c,s.item,e)&&(function(l,d,h){const u=l.createUIElement("div",{class:"ck ck-reset_all ck-widget__type-around"},function(g){const p=this.toDomElement(g);return function(k,b){for(const A of kg){const E=new Be({tag:"div",attributes:{class:["ck","ck-widget__type-around__button",`ck-widget__type-around__button_${A}`],title:b[A],"aria-hidden":"true"},children:[k.ownerDocument.importNode(Rv,!0)]});k.appendChild(E.render())}}(p,d),function(k){const b=new Be({tag:"div",attributes:{class:["ck","ck-widget__type-around__fake-caret"]}});k.appendChild(b.render())}(p),p});l.insert(l.createPositionAt(h,"end"),u)}(a.writer,i,c),c.getCustomProperty("widgetLabel").push(()=>this.isEnabled?n("Press Enter to type after or press Shift + Enter to type before the widget"):""))},{priority:"low"})}_enableTypeAroundFakeCaretActivationUsingKeyboardArrows(){const t=this.editor,e=t.model,n=e.document.selection,i=e.schema,r=t.editing.view;function s(a){return`ck-widget_type-around_show-fake-caret_${a}`}this._listenToIfEnabled(r.document,"arrowKey",(a,c)=>{this._handleArrowKeyPress(a,c)},{context:[qt,"$text"],priority:"high"}),this._listenToIfEnabled(n,"change:range",(a,c)=>{c.directChange&&t.model.change(l=>{l.removeSelectionAttribute(cn)})}),this._listenToIfEnabled(e.document,"change:data",()=>{const a=n.getSelectedElement();a&&Un(t.editing.mapper.toViewElement(a),a,i)||t.model.change(c=>{c.removeSelectionAttribute(cn)})}),this._listenToIfEnabled(t.editing.downcastDispatcher,"selection",(a,c,l)=>{const d=l.writer;if(this._currentFakeCaretModelElement){const p=l.mapper.toViewElement(this._currentFakeCaretModelElement);p&&(d.removeClass(kg.map(s),p),this._currentFakeCaretModelElement=null)}const h=c.selection.getSelectedElement();if(!h)return;const u=l.mapper.toViewElement(h);if(!Un(u,h,i))return;const g=An(c.selection);g&&(d.addClass(s(g),u),this._currentFakeCaretModelElement=h)}),this._listenToIfEnabled(t.ui.focusTracker,"change:isFocused",(a,c,l)=>{l||t.model.change(d=>{d.removeSelectionAttribute(cn)})})}_handleArrowKeyPress(t,e){const n=this.editor,i=n.model,r=i.document.selection,s=i.schema,a=n.editing.view,c=function(h,u){const g=Xr(h,u);return g==="down"||g==="right"}(e.keyCode,n.locale.contentLanguageDirection),l=a.document.selection.getSelectedElement();let d;Un(l,n.editing.mapper.toModelElement(l),s)?d=this._handleArrowKeyPressOnSelectedWidget(c):r.isCollapsed?d=this._handleArrowKeyPressWhenSelectionNextToAWidget(c):e.shiftKey||(d=this._handleArrowKeyPressWhenNonCollapsedSelection(c)),d&&(e.preventDefault(),t.stop())}_handleArrowKeyPressOnSelectedWidget(t){const e=this.editor.model,n=An(e.document.selection);return e.change(i=>n?n!==(t?"after":"before")?(i.removeSelectionAttribute(cn),!0):!1:(i.setSelectionAttribute(cn,t?"after":"before"),!0))}_handleArrowKeyPressWhenSelectionNextToAWidget(t){const e=this.editor,n=e.model,i=n.schema,r=e.plugins.get("Widget"),s=r._getObjectElementNextToSelection(t);return!!Un(e.editing.mapper.toViewElement(s),s,i)&&(n.change(a=>{r._setSelectionOverElement(s),a.setSelectionAttribute(cn,t?"before":"after")}),!0)}_handleArrowKeyPressWhenNonCollapsedSelection(t){const e=this.editor,n=e.model,i=n.schema,r=e.editing.mapper,s=n.document.selection,a=t?s.getLastPosition().nodeBefore:s.getFirstPosition().nodeAfter;return!!Un(r.toViewElement(a),a,i)&&(n.change(c=>{c.setSelection(a,"on"),c.setSelectionAttribute(cn,t?"after":"before")}),!0)}_enableInsertingParagraphsOnButtonClick(){const t=this.editor,e=t.editing.view;this._listenToIfEnabled(e.document,"mousedown",(n,i)=>{const r=i.domTarget.closest(".ck-widget__type-around__button");if(!r)return;const s=function(l){return l.classList.contains("ck-widget__type-around__button_before")?"before":"after"}(r),a=function(l,d){const h=l.closest(".ck-widget");return d.mapDomToView(h)}(r,e.domConverter),c=t.editing.mapper.toModelElement(a);this._insertParagraph(c,s),i.preventDefault(),n.stop()})}_enableInsertingParagraphsOnEnterKeypress(){const t=this.editor,e=t.model.document.selection,n=t.editing.view;this._listenToIfEnabled(n.document,"enter",(i,r)=>{if(i.eventPhase!="atTarget")return;const s=e.getSelectedElement(),a=t.editing.mapper.toViewElement(s),c=t.model.schema;let l;this._insertParagraphAccordingToFakeCaretPosition()?l=!0:Un(a,s,c)&&(this._insertParagraph(s,r.isSoft?"before":"after"),l=!0),l&&(r.preventDefault(),i.stop())},{context:qt})}_enableInsertingParagraphsOnTypingKeystroke(){const t=this.editor.editing.view.document;this._listenToIfEnabled(t,"insertText",(e,n)=>{this._insertParagraphAccordingToFakeCaretPosition()&&(n.selection=t.selection)},{priority:"high"}),f.isAndroid?this._listenToIfEnabled(t,"keydown",(e,n)=>{n.keyCode==229&&this._insertParagraphAccordingToFakeCaretPosition()}):this._listenToIfEnabled(t,"compositionstart",()=>{this._insertParagraphAccordingToFakeCaretPosition()},{priority:"high"})}_enableDeleteIntegration(){const t=this.editor,e=t.editing.view,n=t.model,i=n.schema;this._listenToIfEnabled(e.document,"delete",(r,s)=>{if(r.eventPhase!="atTarget")return;const a=An(n.document.selection);if(!a)return;const c=s.direction,l=n.document.selection.getSelectedElement(),d=c=="forward";if(a==="before"===d)t.execute("delete",{selection:n.createSelection(l,"on")});else{const h=i.getNearestSelectionRange(n.createPositionAt(l,a),c);if(h)if(h.isCollapsed){const u=n.createSelection(h.start);if(n.modifySelection(u,{direction:c}),u.focus.isEqual(h.start)){const g=function(p,k){let b=k;for(const A of k.getAncestors({parentFirst:!0})){if(A.childCount>1||p.isLimit(A))break;b=A}return b}(i,h.start.parent);n.deleteContent(n.createSelection(g,"on"),{doNotAutoparagraph:!0})}else n.change(g=>{g.setSelection(h),t.execute(d?"deleteForward":"delete")})}else n.change(u=>{u.setSelection(h),t.execute(d?"deleteForward":"delete")})}s.preventDefault(),r.stop()},{context:qt})}_enableInsertContentIntegration(){const t=this.editor,e=this.editor.model,n=e.document.selection;this._listenToIfEnabled(t.model,"insertContent",(i,[r,s])=>{if(s&&!s.is("documentSelection"))return;const a=An(n);return a?(i.stop(),e.change(c=>{const l=n.getSelectedElement(),d=e.createPositionAt(l,a),h=c.createSelection(d),u=e.insertContent(r,h);return c.setSelection(h),u})):void 0},{priority:"high"})}_enableInsertObjectIntegration(){const t=this.editor,e=this.editor.model.document.selection;this._listenToIfEnabled(t.model,"insertObject",(n,i)=>{const[,r,s={}]=i;if(r&&!r.is("documentSelection"))return;const a=An(e);a&&(s.findOptimalPosition=a,i[3]=s)},{priority:"high"})}_enableDeleteContentIntegration(){const t=this.editor,e=this.editor.model.document.selection;this._listenToIfEnabled(t.model,"deleteContent",(n,[i])=>{i&&!i.is("documentSelection")||An(e)&&n.stop()},{priority:"high"})}}function Fv(o){const t=o.model;return(e,n)=>{const i=n.keyCode==ut.arrowup,r=n.keyCode==ut.arrowdown,s=n.shiftKey,a=t.document.selection;if(!i&&!r)return;const c=r;if(s&&function(d,h){return!d.isCollapsed&&d.isBackward==h}(a,c))return;const l=function(d,h,u){const g=d.model;if(u){const p=h.isCollapsed?h.focus:h.getLastPosition(),k=wg(g,p,"forward");if(!k)return null;const b=g.createRange(p,k),A=Ag(g.schema,b,"backward");return A?g.createRange(p,A):null}{const p=h.isCollapsed?h.focus:h.getFirstPosition(),k=wg(g,p,"backward");if(!k)return null;const b=g.createRange(k,p),A=Ag(g.schema,b,"forward");return A?g.createRange(A,p):null}}(o,a,c);if(l){if(l.isCollapsed&&(a.isCollapsed||s))return;(l.isCollapsed||function(d,h,u){const g=d.model,p=d.view.domConverter;if(u){const M=g.createSelection(h.start);g.modifySelection(M),M.focus.isAtEnd||h.start.isEqual(M.focus)||(h=g.createRange(M.focus,h.end))}const k=d.mapper.toViewRange(h),b=p.viewRangeToDom(k),A=dt.getDomRangeRects(b);let E;for(const M of A)if(E!==void 0){if(Math.round(M.top)>=E)return!1;E=Math.max(E,Math.round(M.bottom))}else E=Math.round(M.bottom);return!0}(o,l,c))&&(t.change(d=>{const h=c?l.end:l.start;if(s){const u=t.createSelection(a.anchor);u.setFocus(h),d.setSelection(u)}else d.setSelection(h)}),e.stop(),n.preventDefault(),n.stopPropagation())}}}function wg(o,t,e){const n=o.schema,i=o.createRangeIn(t.root),r=e=="forward"?"elementStart":"elementEnd";for(const{previousPosition:s,item:a,type:c}of i.getWalker({startPosition:t,direction:e})){if(n.isLimit(a)&&!n.isInline(a))return s;if(c==r&&n.isBlock(a))return null}return null}function Ag(o,t,e){const n=e=="backward"?t.end:t.start;if(o.checkChild(n,"$text"))return n;for(const{nextPosition:i}of t.getWalker({direction:e}))if(o.checkChild(i,"$text"))return i;return null}var Cg=N(4680),Vv={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Cg.c,Vv),Cg.c.locals;class li extends R{constructor(){super(...arguments),this._previouslySelected=new Set}static get pluginName(){return"Widget"}static get requires(){return[jv,sn]}init(){const t=this.editor,e=t.editing.view,n=e.document;this.editor.editing.downcastDispatcher.on("selection",(i,r,s)=>{const a=s.writer,c=r.selection;if(c.isCollapsed)return;const l=c.getSelectedElement();if(!l)return;const d=t.editing.mapper.toViewElement(l);var h;qt(d)&&s.consumable.consume(c,"selection")&&a.setSelection(a.createRangeOn(d),{fake:!0,label:(h=d,h.getCustomProperty("widgetLabel").reduce((u,g)=>typeof g=="function"?u?u+". "+g():g():u?u+". "+g:g,""))})}),this.editor.editing.downcastDispatcher.on("selection",(i,r,s)=>{this._clearPreviouslySelectedWidgets(s.writer);const a=s.writer,c=a.document.selection;let l=null;for(const d of c.getRanges())for(const h of d){const u=h.item;qt(u)&&!Hv(u,l)&&(a.addClass(ug,u),this._previouslySelected.add(u),l=u)}},{priority:"low"}),e.addObserver(Gs),this.listenTo(n,"mousedown",(...i)=>this._onMousedown(...i)),this.listenTo(n,"arrowKey",(...i)=>{this._handleSelectionChangeOnArrowKeyPress(...i)},{context:[qt,"$text"]}),this.listenTo(n,"arrowKey",(...i)=>{this._preventDefaultOnArrowKeyPress(...i)},{context:"$root"}),this.listenTo(n,"arrowKey",Fv(this.editor.editing),{context:"$text"}),this.listenTo(n,"delete",(i,r)=>{this._handleDelete(r.direction=="forward")&&(r.preventDefault(),i.stop())},{context:"$root"})}_onMousedown(t,e){const n=this.editor,i=n.editing.view,r=i.document;let s=e.target;if(e.domEvent.detail>=3)return void(this._selectBlockContent(s)&&e.preventDefault());if(function(c){let l=c;for(;l;){if(l.is("editableElement")&&!l.is("rootElement"))return!0;if(qt(l))return!1;l=l.parent}return!1}(s)||!qt(s)&&(s=s.findAncestor(qt),!s))return;f.isAndroid&&e.preventDefault(),r.isFocused||i.focus();const a=n.editing.mapper.toModelElement(s);this._setSelectionOverElement(a)}_selectBlockContent(t){const e=this.editor,n=e.model,i=e.editing.mapper,r=n.schema,s=i.findMappedViewAncestor(this.editor.editing.view.createPositionAt(t,0)),a=function(c,l){for(const d of c.getAncestors({includeSelf:!0,parentFirst:!0})){if(l.checkChild(d,"$text"))return d;if(l.isLimit(d)&&!l.isObject(d))break}return null}(i.toModelElement(s),n.schema);return!!a&&(n.change(c=>{const l=r.isLimit(a)?null:function(u,g){const p=new tn({startPosition:u});for(const{item:k}of p){if(g.isLimit(k)||!k.is("element"))return null;if(g.checkChild(k,"$text"))return k}return null}(c.createPositionAfter(a),r),d=c.createPositionAt(a,0),h=l?c.createPositionAt(l,0):c.createPositionAt(a,"end");c.setSelection(c.createRange(d,h))}),!0)}_handleSelectionChangeOnArrowKeyPress(t,e){const n=e.keyCode,i=this.editor.model,r=i.schema,s=i.document.selection,a=s.getSelectedElement(),c=Xr(n,this.editor.locale.contentLanguageDirection),l=c=="down"||c=="right",d=c=="up"||c=="down";if(a&&r.isObject(a)){const u=l?s.getLastPosition():s.getFirstPosition(),g=r.getNearestSelectionRange(u,l?"forward":"backward");return void(g&&(i.change(p=>{p.setSelection(g)}),e.preventDefault(),t.stop()))}if(!s.isCollapsed&&!e.shiftKey){const u=s.getFirstPosition(),g=s.getLastPosition(),p=u.nodeAfter,k=g.nodeBefore;return void((p&&r.isObject(p)||k&&r.isObject(k))&&(i.change(b=>{b.setSelection(l?g:u)}),e.preventDefault(),t.stop()))}if(!s.isCollapsed)return;const h=this._getObjectElementNextToSelection(l);if(h&&r.isObject(h)){if(r.isInline(h)&&d)return;this._setSelectionOverElement(h),e.preventDefault(),t.stop()}}_preventDefaultOnArrowKeyPress(t,e){const n=this.editor.model,i=n.schema,r=n.document.selection.getSelectedElement();r&&i.isObject(r)&&(e.preventDefault(),t.stop())}_handleDelete(t){const e=this.editor.model.document.selection;if(!this.editor.model.canEditAt(e)||!e.isCollapsed)return;const n=this._getObjectElementNextToSelection(t);return n?(this.editor.model.change(i=>{let r=e.anchor.parent;for(;r.isEmpty;){const s=r;r=s.parent,i.remove(s)}this._setSelectionOverElement(n)}),!0):void 0}_setSelectionOverElement(t){this.editor.model.change(e=>{e.setSelection(e.createRangeOn(t))})}_getObjectElementNextToSelection(t){const e=this.editor.model,n=e.schema,i=e.document.selection,r=e.createSelection(i);if(e.modifySelection(r,{direction:t?"forward":"backward"}),r.isEqual(i))return null;const s=t?r.focus.nodeBefore:r.focus.nodeAfter;return s&&n.isObject(s)?s:null}_clearPreviouslySelectedWidgets(t){for(const e of this._previouslySelected)t.removeClass(ug,e);this._previouslySelected.clear()}}function Hv(o,t){return!!t&&Array.from(o.getAncestors()).includes(t)}class gr extends R{constructor(){super(...arguments),this._toolbarDefinitions=new Map}static get requires(){return[rr]}static get pluginName(){return"WidgetToolbarRepository"}init(){const t=this.editor;if(t.plugins.has("BalloonToolbar")){const e=t.plugins.get("BalloonToolbar");this.listenTo(e,"show",n=>{(function(i){const r=i.getSelectedElement();return!(!r||!qt(r))})(t.editing.view.document.selection)&&n.stop()},{priority:"high"})}this._balloon=this.editor.plugins.get("ContextualBalloon"),this.on("change:isEnabled",()=>{this._updateToolbarsVisibility()}),this.listenTo(t.ui,"update",()=>{this._updateToolbarsVisibility()}),this.listenTo(t.ui.focusTracker,"change:isFocused",()=>{this._updateToolbarsVisibility()},{priority:"low"})}destroy(){super.destroy();for(const t of this._toolbarDefinitions.values())t.view.destroy()}register(t,{ariaLabel:e,items:n,getRelatedElement:i,balloonClassName:r="ck-toolbar-container"}){if(!n.length)return void Y("widget-toolbar-no-items",{toolbarId:t});const s=this.editor,a=s.t,c=new $s(s.locale);if(c.ariaLabel=e||a("Widget toolbar"),this._toolbarDefinitions.has(t))throw new _("widget-toolbar-duplicated",this,{toolbarId:t});const l={view:c,getRelatedElement:i,balloonClassName:r,itemsConfig:n,initialized:!1};s.ui.addToolbar(c,{isContextual:!0,beforeFocus:()=>{const d=i(s.editing.view.document.selection);d&&this._showToolbar(l,d)},afterBlur:()=>{this._hideToolbar(l)}}),this._toolbarDefinitions.set(t,l)}_updateToolbarsVisibility(){let t=0,e=null,n=null;for(const i of this._toolbarDefinitions.values()){const r=i.getRelatedElement(this.editor.editing.view.document.selection);if(this.isEnabled&&r)if(this.editor.ui.focusTracker.isFocused){const s=r.getAncestors().length;s>t&&(t=s,e=r,n=i)}else this._isToolbarVisible(i)&&this._hideToolbar(i);else this._isToolbarInBalloon(i)&&this._hideToolbar(i)}n&&this._showToolbar(n,e)}_hideToolbar(t){this._balloon.remove(t.view),this.stopListening(this._balloon,"change:visibleView")}_showToolbar(t,e){this._isToolbarVisible(t)?_g(this.editor,e):this._isToolbarInBalloon(t)||(t.initialized||(t.initialized=!0,t.view.fillFromConfig(t.itemsConfig,this.editor.ui.componentFactory)),this._balloon.add({view:t.view,position:vg(this.editor,e),balloonClassName:t.balloonClassName}),this.listenTo(this._balloon,"change:visibleView",()=>{for(const n of this._toolbarDefinitions.values())if(this._isToolbarVisible(n)){const i=n.getRelatedElement(this.editor.editing.view.document.selection);_g(this.editor,i)}}))}_isToolbarVisible(t){return this._balloon.visibleView===t.view}_isToolbarInBalloon(t){return this._balloon.hasView(t.view)}}function _g(o,t){const e=o.plugins.get("ContextualBalloon"),n=vg(o,t);e.updatePosition(n)}function vg(o,t){const e=o.editing.view,n=ae.defaultPositions;return{target:e.domConverter.mapViewToDom(t),positions:[n.northArrowSouth,n.northArrowSouthWest,n.northArrowSouthEast,n.southArrowNorth,n.southArrowNorthWest,n.southArrowNorthEast,n.viewportStickyNorth]}}var yg=N(9444),Uv={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(yg.c,Uv),yg.c.locals;const ca=ro("px");class qv extends tt{constructor(){super();const t=this.bindTemplate;this.set({isVisible:!1,left:null,top:null,width:null}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-clipboard-drop-target-line",t.if("isVisible","ck-hidden",e=>!e)],style:{left:t.to("left",e=>ca(e)),top:t.to("top",e=>ca(e)),width:t.to("width",e=>ca(e))}}})}}class pr extends R{constructor(){super(...arguments),this.removeDropMarkerDelayed=ts(()=>this.removeDropMarker(),40),this._updateDropMarkerThrottled=or(t=>this._updateDropMarker(t),40),this._reconvertMarkerThrottled=or(()=>{this.editor.model.markers.has("drop-target")&&this.editor.editing.reconvertMarker("drop-target")},0),this._dropTargetLineView=new qv,this._domEmitter=new(Ae()),this._scrollables=new Map}static get pluginName(){return"DragDropTarget"}init(){this._setupDropMarker()}destroy(){this._domEmitter.stopListening();for(const{resizeObserver:t}of this._scrollables.values())t.destroy();return this._updateDropMarkerThrottled.cancel(),this.removeDropMarkerDelayed.cancel(),this._reconvertMarkerThrottled.cancel(),super.destroy()}updateDropMarker(t,e,n,i,r,s){this.removeDropMarkerDelayed.cancel();const a=xg(this.editor,t,e,n,i,r,s);if(a)return s&&s.containsRange(a)?this.removeDropMarker():void this._updateDropMarkerThrottled(a)}getFinalDropRange(t,e,n,i,r,s){const a=xg(this.editor,t,e,n,i,r,s);return this.removeDropMarker(),a}removeDropMarker(){const t=this.editor.model;this.removeDropMarkerDelayed.cancel(),this._updateDropMarkerThrottled.cancel(),this._dropTargetLineView.isVisible=!1,t.markers.has("drop-target")&&t.change(e=>{e.removeMarker("drop-target")})}_setupDropMarker(){const t=this.editor;t.ui.view.body.add(this._dropTargetLineView),t.conversion.for("editingDowncast").markerToHighlight({model:"drop-target",view:{classes:["ck-clipboard-drop-target-range"]}}),t.conversion.for("editingDowncast").markerToElement({model:"drop-target",view:(e,{writer:n})=>{if(t.model.schema.checkChild(e.markerRange.start,"$text"))return this._dropTargetLineView.isVisible=!1,this._createDropTargetPosition(n);e.markerRange.isCollapsed?this._updateDropTargetLine(e.markerRange):this._dropTargetLineView.isVisible=!1}})}_updateDropMarker(t){const e=this.editor,n=e.model.markers;e.model.change(i=>{n.has("drop-target")?n.get("drop-target").getRange().isEqual(t)||i.updateMarker("drop-target",{range:t}):i.addMarker("drop-target",{range:t,usingOperation:!1,affectsData:!1})})}_createDropTargetPosition(t){return t.createUIElement("span",{class:"ck ck-clipboard-drop-target-position"},function(e){const n=this.toDomElement(e);return n.append("⁠",e.createElement("span"),"⁠"),n})}_updateDropTargetLine(t){const e=this.editor.editing,n=t.start.nodeBefore,i=t.start.nodeAfter,r=t.start.parent,s=n?e.mapper.toViewElement(n):null,a=s?e.view.domConverter.mapViewToDom(s):null,c=i?e.mapper.toViewElement(i):null,l=c?e.view.domConverter.mapViewToDom(c):null,d=e.mapper.toViewElement(r);if(!d)return;const h=e.view.domConverter.mapViewToDom(d),u=this._getScrollableRect(d),{scrollX:g,scrollY:p}=$.window,k=a?new dt(a):null,b=l?new dt(l):null,A=new dt(h).excludeScrollbarsAndBorders(),E=k?k.bottom:A.top,M=b?b.top:A.bottom,z=$.window.getComputedStyle(h),G=E<=M?(E+M)/2:M;if(u.topa.schema.checkChild(h,u))){if(a.schema.checkChild(h,"$text"))return a.createRange(h);if(d)return mr(o,Dg(o,d.parent),n,i)}}}else if(a.schema.isInline(l))return mr(o,l,n,i)}if(a.schema.isBlock(l))return mr(o,l,n,i);if(a.schema.checkChild(l,"$block")){const d=Array.from(l.getChildren()).filter(g=>g.is("element")&&!Gv(o,g));let h=0,u=d.length;if(u==0)return a.createRange(a.createPositionAt(l,"end"));for(;ht in o?Wv(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;class Zv extends R{constructor(){super(...arguments),this._isBlockDragging=!1,this._domEmitter=new(Ae())}static get pluginName(){return"DragDropBlockToolbar"}init(){const t=this.editor;if(this.listenTo(t,"change:isReadOnly",(e,n,i)=>{i?(this.forceDisabled("readOnlyMode"),this._isBlockDragging=!1):this.clearForceDisabled("readOnlyMode")}),f.isAndroid&&this.forceDisabled("noAndroidSupport"),t.plugins.has("BlockToolbar")){const e=t.plugins.get("BlockToolbar").buttonView.element;this._domEmitter.listenTo(e,"dragstart",(n,i)=>this._handleBlockDragStart(i)),this._domEmitter.listenTo($.document,"dragover",(n,i)=>this._handleBlockDragging(i)),this._domEmitter.listenTo($.document,"drop",(n,i)=>this._handleBlockDragging(i)),this._domEmitter.listenTo($.document,"dragend",()=>this._handleBlockDragEnd(),{useCapture:!0}),this.isEnabled&&e.setAttribute("draggable","true"),this.on("change:isEnabled",(n,i,r)=>{e.setAttribute("draggable",r?"true":"false")})}}destroy(){return this._domEmitter.stopListening(),super.destroy()}_handleBlockDragStart(t){if(!this.isEnabled)return;const e=this.editor.model,n=e.document.selection,i=this.editor.editing.view,r=Array.from(n.getSelectedBlocks()),s=e.createRange(e.createPositionBefore(r[0]),e.createPositionAfter(r[r.length-1]));e.change(a=>a.setSelection(s)),this._isBlockDragging=!0,i.focus(),i.getObserver(ri).onDomEvent(t)}_handleBlockDragging(t){if(!this.isEnabled||!this._isBlockDragging)return;const e=t.clientX+(this.editor.locale.contentLanguageDirection=="ltr"?100:-100),n=t.clientY,i=document.elementFromPoint(e,n),r=this.editor.editing.view;var s,a;i&&i.closest(".ck-editor__editable")&&r.getObserver(ri).onDomEvent((s=((c,l)=>{for(var d in l||(l={}))Yv.call(l,d)&&Sg(c,d,l[d]);if(Ig)for(var d of Ig(l))Qv.call(l,d)&&Sg(c,d,l[d]);return c})({},t),a={type:t.type,dataTransfer:t.dataTransfer,target:i,clientX:e,clientY:n,preventDefault:()=>t.preventDefault(),stopPropagation:()=>t.stopPropagation()},$v(s,Kv(a))))}_handleBlockDragEnd(){this._isBlockDragging=!1}}var Tg=N(9256),Jv={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Tg.c,Jv),Tg.c.locals;class Xv extends R{constructor(){super(...arguments),this._clearDraggableAttributesDelayed=ts(()=>this._clearDraggableAttributes(),40),this._blockMode=!1,this._domEmitter=new(Ae())}static get pluginName(){return"DragDrop"}static get requires(){return[Re,li,pr,Zv]}init(){const t=this.editor,e=t.editing.view;this._draggedRange=null,this._draggingUid="",this._draggableElement=null,e.addObserver(ri),e.addObserver(Gs),this._setupDragging(),this._setupContentInsertionIntegration(),this._setupClipboardInputIntegration(),this._setupDraggableAttributeHandling(),this.listenTo(t,"change:isReadOnly",(n,i,r)=>{r?this.forceDisabled("readOnlyMode"):this.clearForceDisabled("readOnlyMode")}),this.on("change:isEnabled",(n,i,r)=>{r||this._finalizeDragging(!1)}),f.isAndroid&&this.forceDisabled("noAndroidSupport")}destroy(){return this._draggedRange&&(this._draggedRange.detach(),this._draggedRange=null),this._previewContainer&&this._previewContainer.remove(),this._domEmitter.stopListening(),this._clearDraggableAttributesDelayed.cancel(),super.destroy()}_setupDragging(){const t=this.editor,e=t.model,n=t.editing.view,i=n.document,r=t.plugins.get(pr);this.listenTo(i,"dragstart",(s,a)=>{if(a.target&&a.target.is("editableElement")||(this._prepareDraggedRange(a.target),!this._draggedRange))return void a.preventDefault();this._draggingUid=X(),a.dataTransfer.effectAllowed=this.isEnabled?"copyMove":"copy",a.dataTransfer.setData("application/ckeditor5-dragging-uid",this._draggingUid);const c=e.createSelection(this._draggedRange.toRange());this.editor.plugins.get("ClipboardPipeline")._fireOutputTransformationEvent(a.dataTransfer,c,"dragstart");const{dataTransfer:l,domTarget:d,domEvent:h}=a,{clientX:u}=h;this._updatePreview({dataTransfer:l,domTarget:d,clientX:u}),a.stopPropagation(),this.isEnabled||(this._draggedRange.detach(),this._draggedRange=null,this._draggingUid="")},{priority:"low"}),this.listenTo(i,"dragend",(s,a)=>{this._finalizeDragging(!a.dataTransfer.isCanceled&&a.dataTransfer.dropEffect=="move")},{priority:"low"}),this._domEmitter.listenTo($.document,"dragend",()=>{this._blockMode=!1},{useCapture:!0}),this.listenTo(i,"dragenter",()=>{this.isEnabled&&n.focus()}),this.listenTo(i,"dragleave",()=>{r.removeDropMarkerDelayed()}),this.listenTo(i,"dragging",(s,a)=>{if(!this.isEnabled)return void(a.dataTransfer.dropEffect="none");const{clientX:c,clientY:l}=a.domEvent;r.updateDropMarker(a.target,a.targetRanges,c,l,this._blockMode,this._draggedRange),this._draggedRange||(a.dataTransfer.dropEffect="copy"),f.isGecko||(a.dataTransfer.effectAllowed=="copy"?a.dataTransfer.dropEffect="copy":["all","copyMove"].includes(a.dataTransfer.effectAllowed)&&(a.dataTransfer.dropEffect="move")),s.stop()},{priority:"low"})}_setupClipboardInputIntegration(){const t=this.editor,e=t.editing.view.document,n=t.plugins.get(pr);this.listenTo(e,"clipboardInput",(i,r)=>{if(r.method!="drop")return;const{clientX:s,clientY:a}=r.domEvent,c=n.getFinalDropRange(r.target,r.targetRanges,s,a,this._blockMode,this._draggedRange);if(!c)return this._finalizeDragging(!1),void i.stop();if(this._draggedRange&&this._draggingUid!=r.dataTransfer.getData("application/ckeditor5-dragging-uid")&&(this._draggedRange.detach(),this._draggedRange=null,this._draggingUid=""),Mg(r.dataTransfer)=="move"&&this._draggedRange&&this._draggedRange.containsRange(c,!0))return this._finalizeDragging(!1),void i.stop();r.targetRanges=[t.editing.mapper.toViewRange(c)]},{priority:"high"})}_setupContentInsertionIntegration(){const t=this.editor.plugins.get(Re);t.on("contentInsertion",(e,n)=>{if(!this.isEnabled||n.method!=="drop")return;const i=n.targetRanges.map(r=>this.editor.editing.mapper.toModelRange(r));this.editor.model.change(r=>r.setSelection(i))},{priority:"high"}),t.on("contentInsertion",(e,n)=>{if(!this.isEnabled||n.method!=="drop")return;const i=Mg(n.dataTransfer)=="move",r=!n.resultRange||!n.resultRange.isCollapsed;this._finalizeDragging(r&&i)},{priority:"lowest"})}_setupDraggableAttributeHandling(){const t=this.editor,e=t.editing.view,n=e.document;this.listenTo(n,"mousedown",(i,r)=>{if(f.isAndroid||!r)return;this._clearDraggableAttributesDelayed.cancel();let s=Bg(r.target);if(f.isBlink&&!t.isReadOnly&&!s&&!n.selection.isCollapsed){const a=n.selection.getSelectedElement();a&&qt(a)||(s=n.selection.editableElement)}s&&(e.change(a=>{a.setAttribute("draggable","true",s)}),this._draggableElement=t.editing.mapper.toModelElement(s))}),this.listenTo(n,"mouseup",()=>{f.isAndroid||this._clearDraggableAttributesDelayed()})}_clearDraggableAttributes(){const t=this.editor.editing;t.view.change(e=>{this._draggableElement&&this._draggableElement.root.rootName!="$graveyard"&&e.removeAttribute("draggable",t.mapper.toViewElement(this._draggableElement)),this._draggableElement=null})}_finalizeDragging(t){const e=this.editor,n=e.model;e.plugins.get(pr).removeDropMarker(),this._clearDraggableAttributes(),e.plugins.has("WidgetToolbarRepository")&&e.plugins.get("WidgetToolbarRepository").clearForceDisabled("dragDrop"),this._draggingUid="",this._previewContainer&&(this._previewContainer.remove(),this._previewContainer=void 0),this._draggedRange&&(t&&this.isEnabled&&n.change(i=>{const r=n.createSelection(this._draggedRange);n.deleteContent(r,{doNotAutoparagraph:!0});const s=r.getFirstPosition().parent;s.isEmpty&&!n.schema.checkChild(s,"$text")&&n.schema.checkChild(s,"paragraph")&&i.insertElement("paragraph",s,0)}),this._draggedRange.detach(),this._draggedRange=null)}_prepareDraggedRange(t){const e=this.editor,n=e.model,i=n.document.selection,r=t?Bg(t):null;if(r){const l=e.editing.mapper.toModelElement(r);this._draggedRange=pe.fromRange(n.createRangeOn(l)),this._blockMode=n.schema.isBlock(l),e.plugins.has("WidgetToolbarRepository")&&e.plugins.get("WidgetToolbarRepository").forceDisabled("dragDrop");return}if(i.isCollapsed&&!i.getFirstPosition().parent.isEmpty)return;const s=Array.from(i.getSelectedBlocks()),a=i.getFirstRange();if(s.length==0)return void(this._draggedRange=pe.fromRange(a));const c=Ng(n,s);if(s.length>1)this._draggedRange=pe.fromRange(c),this._blockMode=!0;else if(s.length==1){const l=a.start.isTouching(c.start)&&a.end.isTouching(c.end);this._draggedRange=pe.fromRange(l?c:a),this._blockMode=l}n.change(l=>l.setSelection(this._draggedRange.toRange()))}_updatePreview({dataTransfer:t,domTarget:e,clientX:n}){const i=this.editor.editing.view,r=i.document.selection.editableElement,s=i.domConverter.mapViewToDom(r),a=$.window.getComputedStyle(s);this._previewContainer?this._previewContainer.firstElementChild&&this._previewContainer.removeChild(this._previewContainer.firstElementChild):(this._previewContainer=bi($.document,"div",{style:"position: fixed; left: -999999px;"}),$.document.body.appendChild(this._previewContainer));const c=new dt(s);if(s.contains(e))return;const l=parseFloat(a.paddingLeft),d=bi($.document,"div");d.className="ck ck-content",d.style.width=a.width,d.style.paddingLeft=`${c.left-n+l}px`,f.isiOS&&(d.style.backgroundColor="white"),d.innerHTML=t.getData("text/html"),t.setDragImage(d,0,0),this._previewContainer.appendChild(d)}}function Mg(o){return f.isGecko?o.dropEffect:["all","copyMove"].includes(o.effectAllowed)?"move":"copy"}function Bg(o){if(o.is("editableElement"))return null;if(o.hasClass("ck-widget__selection-handle"))return o.findAncestor(qt);if(qt(o))return o;const t=o.findAncestor(e=>qt(e)||e.is("editableElement"));return qt(t)?t:null}function Ng(o,t){const e=t[0],n=t[t.length-1],i=e.getCommonAncestor(n),r=o.createPositionBefore(e),s=o.createPositionAfter(n);if(i&&i.is("element")&&!o.schema.isLimit(i)){const a=o.createRangeOn(i),c=r.isTouching(a.start),l=s.isTouching(a.end);if(c&&l)return Ng(o,[i])}return o.createRange(r,s)}class t1 extends R{static get pluginName(){return"PastePlainText"}static get requires(){return[Re]}init(){const t=this.editor,e=t.model,n=t.editing.view,i=n.document,r=e.document.selection;let s=!1;n.addObserver(ri),this.listenTo(i,"keydown",(a,c)=>{s=c.shiftKey}),t.plugins.get(Re).on("contentInsertion",(a,c)=>{(s||function(l,d){if(l.childCount>1)return!1;const h=l.getChild(0);return d.isObject(h)?!1:Array.from(h.getAttributeKeys()).length==0}(c.content,e.schema))&&e.change(l=>{const d=Array.from(r.getAttributes()).filter(([u])=>e.schema.getAttributeProperties(u).isFormatting);r.isCollapsed||e.deleteContent(r,{doNotAutoparagraph:!0}),d.push(...r.getAttributes());const h=l.createRangeIn(c.content);for(const u of h.getItems())u.is("$textProxy")&&l.setAttributes(d,u)})})}}class Pg extends R{static get pluginName(){return"Clipboard"}static get requires(){return[Re,Xv,t1]}}class e1 extends at{constructor(t){super(t),this.affectsData=!1}execute(){const t=this.editor.model,e=t.document.selection;let n=t.schema.getLimitElement(e);if(e.containsEntireContent(n)||!Lg(t.schema,n))do if(n=n.parent,!n)return;while(!Lg(t.schema,n));t.change(i=>{i.setSelection(n,"in")})}}function Lg(o,t){return o.isLimit(t)&&(o.checkChild(t,"$text")||o.checkChild(t,"paragraph"))}const n1=Fo("Ctrl+A");class o1 extends R{static get pluginName(){return"SelectAllEditing"}init(){const t=this.editor,e=t.editing.view.document;t.commands.add("selectAll",new e1(t)),this.listenTo(e,"keydown",(n,i)=>{so(i)===n1&&(t.execute("selectAll"),i.preventDefault())})}}class i1 extends R{static get pluginName(){return"SelectAllUI"}init(){const t=this.editor;t.ui.componentFactory.add("selectAll",e=>{const n=t.commands.get("selectAll"),i=new wt(e),r=e.t;return i.set({label:r("Select all"),icon:'',keystroke:"Ctrl+A",tooltip:!0}),i.bind("isEnabled").to(n,"isEnabled"),this.listenTo(i,"execute",()=>{t.execute("selectAll"),t.editing.view.focus()}),i})}}class r1 extends R{static get requires(){return[o1,i1]}static get pluginName(){return"SelectAll"}}var s1=Object.defineProperty,Og=Object.getOwnPropertySymbols,a1=Object.prototype.hasOwnProperty,c1=Object.prototype.propertyIsEnumerable,zg=(o,t,e)=>t in o?s1(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;class Rg extends at{constructor(t){super(t),this._stack=[],this._createdBatches=new WeakSet,this.refresh(),this._isEnabledBasedOnSelection=!1,this.listenTo(t.data,"set",(e,n)=>{n[1]=((r,s)=>{for(var a in s||(s={}))a1.call(s,a)&&zg(r,a,s[a]);if(Og)for(var a of Og(s))c1.call(s,a)&&zg(r,a,s[a]);return r})({},n[1]);const i=n[1];i.batchType||(i.batchType={isUndoable:!1})},{priority:"high"}),this.listenTo(t.data,"set",(e,n)=>{n[1].batchType.isUndoable||this.clearStack()})}refresh(){this.isEnabled=this._stack.length>0}get createdBatches(){return this._createdBatches}addBatch(t){const e=this.editor.model.document.selection,n={ranges:e.hasOwnRange?Array.from(e.getRanges()):[],isBackward:e.isBackward};this._stack.push({batch:t,selection:n}),this.refresh()}clearStack(){this._stack=[],this.refresh()}_restoreSelection(t,e,n){const i=this.editor.model,r=i.document,s=[],a=t.map(l=>l.getTransformedByOperations(n)),c=a.flat();for(const l of a){const d=l.filter(h=>h.root!=r.graveyard).filter(h=>!d1(h,c));d.length&&(l1(d),s.push(d[0]))}s.length&&i.change(l=>{l.setSelection(s,{backward:e})})}_undo(t,e){const n=this.editor.model,i=n.document;this._createdBatches.add(e);const r=t.operations.slice().filter(s=>s.isDocumentOperation);r.reverse();for(const s of r){const a=s.baseVersion+1,c=Array.from(i.history.getOperations(a)),l=iC([s.getReversed()],c,{useRelations:!0,document:this.editor.model.document,padWithNoOps:!1,forceWeakRemove:!0}).operationsA;for(let d of l){const h=d.affectedSelectable;h&&!n.canEditAt(h)&&(d=new Ht(d.baseVersion)),e.addOperation(d),n.applyOperation(d),i.history.setOperationAsUndone(s,d)}}}}function l1(o){o.sort((t,e)=>t.start.isBefore(e.start)?-1:1);for(let t=1;te!==o&&e.containsRange(o,!0))}class h1 extends Rg{execute(t=null){const e=t?this._stack.findIndex(r=>r.batch==t):this._stack.length-1,n=this._stack.splice(e,1)[0],i=this.editor.model.createBatch({isUndo:!0});this.editor.model.enqueueChange(i,()=>{this._undo(n.batch,i);const r=this.editor.model.document.history.getOperations(n.batch.baseVersion);this._restoreSelection(n.selection.ranges,n.selection.isBackward,r)}),this.fire("revert",n.batch,i),this.refresh()}}class u1 extends Rg{execute(){const t=this._stack.pop(),e=this.editor.model.createBatch({isUndo:!0});this.editor.model.enqueueChange(e,()=>{const n=t.batch.operations[t.batch.operations.length-1].baseVersion+1,i=this.editor.model.document.history.getOperations(n);this._restoreSelection(t.selection.ranges,t.selection.isBackward,i),this._undo(t.batch,e)}),this.refresh()}}class g1 extends R{constructor(){super(...arguments),this._batchRegistry=new WeakSet}static get pluginName(){return"UndoEditing"}init(){const t=this.editor;this._undoCommand=new h1(t),this._redoCommand=new u1(t),t.commands.add("undo",this._undoCommand),t.commands.add("redo",this._redoCommand),this.listenTo(t.model,"applyOperation",(e,n)=>{const i=n[0];if(!i.isDocumentOperation)return;const r=i.batch,s=this._redoCommand.createdBatches.has(r),a=this._undoCommand.createdBatches.has(r);this._batchRegistry.has(r)||(this._batchRegistry.add(r),r.isUndoable&&(s?this._undoCommand.addBatch(r):a||(this._undoCommand.addBatch(r),this._redoCommand.clearStack())))},{priority:"highest"}),this.listenTo(this._undoCommand,"revert",(e,n,i)=>{this._redoCommand.addBatch(i)}),t.keystrokes.set("CTRL+Z","undo"),t.keystrokes.set("CTRL+Y","redo"),t.keystrokes.set("CTRL+SHIFT+Z","redo")}}class p1 extends R{static get pluginName(){return"UndoUI"}init(){const t=this.editor,e=t.locale,n=t.t,i=e.uiLanguageDirection=="ltr"?ot.undo:ot.redo,r=e.uiLanguageDirection=="ltr"?ot.redo:ot.undo;this._addButton("undo",n("Undo"),"CTRL+Z",i),this._addButton("redo",n("Redo"),"CTRL+Y",r)}_addButton(t,e,n,i){const r=this.editor;r.ui.componentFactory.add(t,s=>{const a=r.commands.get(t),c=new wt(s);return c.set({label:e,icon:i,keystroke:n,tooltip:!0}),c.bind("isEnabled").to(a,"isEnabled"),this.listenTo(c,"execute",()=>{r.execute(t),r.editing.view.focus()}),c})}}class jg extends R{static get requires(){return[g1,p1]}static get pluginName(){return"Undo"}}class m1 extends mt(){constructor(){super();const t=new window.FileReader;this._reader=t,this._data=void 0,this.set("loaded",0),t.onprogress=e=>{this.loaded=e.loaded}}get error(){return this._reader.error}get data(){return this._data}read(t){const e=this._reader;return this.total=t.size,new Promise((n,i)=>{e.onload=()=>{const r=e.result;this._data=r,n(r)},e.onerror=()=>{i("error")},e.onabort=()=>{i("aborted")},this._reader.readAsDataURL(t)})}abort(){this._reader.abort()}}class je extends R{constructor(){super(...arguments),this.loaders=new Me,this._loadersMap=new Map,this._pendingAction=null}static get pluginName(){return"FileRepository"}static get requires(){return[Rh]}init(){this.loaders.on("change",()=>this._updatePendingAction()),this.set("uploaded",0),this.set("uploadTotal",null),this.bind("uploadedPercent").to(this,"uploaded",this,"uploadTotal",(t,e)=>e?t/e*100:0)}getLoader(t){return this._loadersMap.get(t)||null}createLoader(t){if(!this.createUploadAdapter)return Y("filerepository-no-upload-adapter"),null;const e=new Fg(Promise.resolve(t),this.createUploadAdapter);return this.loaders.add(e),this._loadersMap.set(t,e),t instanceof Promise&&e.file.then(n=>{this._loadersMap.set(n,e)}).catch(()=>{}),e.on("change:uploaded",()=>{let n=0;for(const i of this.loaders)n+=i.uploaded;this.uploaded=n}),e.on("change:uploadTotal",()=>{let n=0;for(const i of this.loaders)i.uploadTotal&&(n+=i.uploadTotal);this.uploadTotal=n}),e}destroyLoader(t){const e=t instanceof Fg?t:this.getLoader(t);e._destroy(),this.loaders.remove(e),this._loadersMap.forEach((n,i)=>{n===e&&this._loadersMap.delete(i)})}_updatePendingAction(){const t=this.editor.plugins.get(Rh);if(this.loaders.length){if(!this._pendingAction){const e=this.editor.t,n=i=>`${e("Upload in progress")} ${parseInt(i)}%.`;this._pendingAction=t.add(n(this.uploadedPercent)),this._pendingAction.bind("message").to(this,"uploadedPercent",n)}}else t.remove(this._pendingAction),this._pendingAction=null}}class Fg extends mt(){constructor(t,e){super(),this.id=X(),this._filePromiseWrapper=this._createFilePromiseWrapper(t),this._adapter=e(this),this._reader=new m1,this.set("status","idle"),this.set("uploaded",0),this.set("uploadTotal",null),this.bind("uploadedPercent").to(this,"uploaded",this,"uploadTotal",(n,i)=>i?n/i*100:0),this.set("uploadResponse",null)}get file(){return this._filePromiseWrapper?this._filePromiseWrapper.promise.then(t=>this._filePromiseWrapper?t:null):Promise.resolve(null)}get data(){return this._reader.data}read(){if(this.status!="idle")throw new _("filerepository-read-wrong-status",this);return this.status="reading",this.file.then(t=>this._reader.read(t)).then(t=>{if(this.status!=="reading")throw this.status;return this.status="idle",t}).catch(t=>{throw t==="aborted"?(this.status="aborted","aborted"):(this.status="error",this._reader.error?this._reader.error:t)})}upload(){if(this.status!="idle")throw new _("filerepository-upload-wrong-status",this);return this.status="uploading",this.file.then(()=>this._adapter.upload()).then(t=>(this.uploadResponse=t,this.status="idle",t)).catch(t=>{throw this.status==="aborted"?"aborted":(this.status="error",t)})}abort(){const t=this.status;this.status="aborted",this._filePromiseWrapper.isFulfilled?t=="reading"?this._reader.abort():t=="uploading"&&this._adapter.abort&&this._adapter.abort():(this._filePromiseWrapper.promise.catch(()=>{}),this._filePromiseWrapper.rejecter("aborted")),this._destroy()}_destroy(){this._filePromiseWrapper=void 0,this._reader=void 0,this._adapter=void 0,this.uploadResponse=void 0}_createFilePromiseWrapper(t){const e={};return e.promise=new Promise((n,i)=>{e.rejecter=i,e.isFulfilled=!1,t.then(r=>{e.isFulfilled=!0,n(r)}).catch(r=>{e.isFulfilled=!0,i(r)})}),e}}class f1 extends wt{constructor(t){super(t),this.buttonView=this,this._fileInputView=new k1(t),this._fileInputView.bind("acceptedType").to(this),this._fileInputView.bind("allowMultipleFiles").to(this),this._fileInputView.delegate("done").to(this),this.on("execute",()=>{this._fileInputView.open()}),this.extendTemplate({attributes:{class:"ck-file-dialog-button"}})}render(){super.render(),this.children.add(this._fileInputView)}}class k1 extends tt{constructor(t){super(t),this.set("acceptedType",void 0),this.set("allowMultipleFiles",!1);const e=this.bindTemplate;this.setTemplate({tag:"input",attributes:{class:["ck-hidden"],type:"file",tabindex:"-1",accept:e.to("acceptedType"),multiple:e.to("allowMultipleFiles")},on:{change:e.to(()=>{this.element&&this.element.files&&this.element.files.length&&this.fire("done",this.element.files),this.element.value=""})}})}open(){this.element.click()}}const Vg="ckCsrfToken",Hg="abcdefghijklmnopqrstuvwxyz0123456789";function b1(){let o=function(n){n=n.toLowerCase();const i=document.cookie.split(";");for(const r of i){const s=r.split("=");if(decodeURIComponent(s[0].trim().toLowerCase())===n)return decodeURIComponent(s[1])}return null}(Vg);var t,e;return o&&o.length==40||(o=function(n){let i="";const r=new Uint8Array(n);window.crypto.getRandomValues(r);for(let s=0;s.5?a.toUpperCase():a}return i}(40),t=Vg,e=o,document.cookie=encodeURIComponent(t)+"="+encodeURIComponent(e)+";path=/"),o}class w1{constructor(t,e,n){this.loader=t,this.url=e,this.t=n}upload(){return this.loader.file.then(t=>new Promise((e,n)=>{this._initRequest(),this._initListeners(e,n,t),this._sendRequest(t)}))}abort(){this.xhr&&this.xhr.abort()}_initRequest(){const t=this.xhr=new XMLHttpRequest;t.open("POST",this.url,!0),t.responseType="json"}_initListeners(t,e,n){const i=this.xhr,r=this.loader,s=(0,this.t)("Cannot upload file:")+` ${n.name}.`;i.addEventListener("error",()=>e(s)),i.addEventListener("abort",()=>e()),i.addEventListener("load",()=>{const a=i.response;if(!a||!a.uploaded)return e(a&&a.error&&a.error.message?a.error.message:s);t({default:a.url})}),i.upload&&i.upload.addEventListener("progress",a=>{a.lengthComputable&&(r.uploadTotal=a.total,r.uploaded=a.loaded)})}_sendRequest(t){const e=new FormData;e.append("upload",t),e.append("ckCsrfToken",b1()),this.xhr.send(e)}}function Cn(o,t,e,n){let i,r=null;typeof n=="function"?i=n:(r=o.commands.get(n),i=()=>{o.execute(n)}),o.model.document.on("change:data",(s,a)=>{if(r&&!r.isEnabled||!t.isEnabled)return;const c=Wt(o.model.document.selection.getRanges());if(!c.isCollapsed||a.isUndo||!a.isLocal)return;const l=Array.from(o.model.document.differ.getChanges()),d=l[0];if(l.length!=1||d.type!=="insert"||d.name!="$text"||d.length!=1)return;const h=d.position.parent;if(h.is("element","codeBlock")||h.is("element","listItem")&&typeof n!="function"&&!["numberedList","bulletedList","todoList"].includes(n)||r&&r.value===!0)return;const u=h.getChild(0),g=o.model.createRangeOn(u);if(!g.containsRange(c)&&!c.end.isEqual(g.end))return;const p=e.exec(u.data.substr(0,c.end.offset));p&&o.model.enqueueChange(k=>{const b=k.createPositionAt(h,0),A=k.createPositionAt(h,p[0].length),E=new pe(b,A);if(i({match:p})!==!1){k.remove(E);const M=o.model.document.selection.getFirstRange(),z=k.createRangeIn(h);!h.isEmpty||z.isEqual(M)||z.containsRange(M,!0)||k.remove(h)}E.detach(),o.model.enqueueChange(()=>{o.plugins.get("Delete").requestUndoOnBackspace()})})})}function bo(o,t,e,n){let i,r;e instanceof RegExp?i=e:r=e,r=r||(s=>{let a;const c=[],l=[];for(;(a=i.exec(s))!==null&&!(a&&a.length<4);){let{index:d,1:h,2:u,3:g}=a;const p=h+u+g;d+=a[0].length-p.length;const k=[d,d+h.length],b=[d+h.length+u.length,d+h.length+u.length+g.length];c.push(k),c.push(b),l.push([d+h.length,d+h.length+u.length])}return{remove:c,format:l}}),o.model.document.on("change:data",(s,a)=>{if(a.isUndo||!a.isLocal||!t.isEnabled)return;const c=o.model,l=c.document.selection;if(!l.isCollapsed)return;const d=Array.from(c.document.differ.getChanges()),h=d[0];if(d.length!=1||h.type!=="insert"||h.name!="$text"||h.length!=1)return;const u=l.focus,g=u.parent,{text:p,range:k}=function(M,z){let G=M.start;return{text:Array.from(M.getItems()).reduce((st,Lt)=>!Lt.is("$text")&&!Lt.is("$textProxy")||Lt.getAttribute("code")?(G=z.createPositionAfter(Lt),""):st+Lt.data,""),range:z.createRange(G,M.end)}}(c.createRange(c.createPositionAt(g,0),u),c),b=r(p),A=Ug(k.start,b.format,c),E=Ug(k.start,b.remove,c);A.length&&E.length&&c.enqueueChange(M=>{if(n(M,A)!==!1){for(const z of E.reverse())M.remove(z);c.enqueueChange(()=>{o.plugins.get("Delete").requestUndoOnBackspace()})}})})}function Ug(o,t,e){return t.filter(n=>n[0]!==void 0&&n[1]!==void 0).map(n=>e.createRange(o.getShiftedBy(n[0]),o.getShiftedBy(n[1])))}function fr(o,t){return(e,n)=>{if(!o.commands.get(t).isEnabled)return!1;const i=o.model.schema.getValidRanges(n,t);for(const r of i)e.setAttribute(t,!0,r);e.removeSelectionAttribute(t)}}class qg extends at{constructor(t,e){super(t),this.attributeKey=e}refresh(){const t=this.editor.model,e=t.document;this.value=this._getValueFromFirstAllowedNode(),this.isEnabled=t.schema.checkAttributeInSelection(e.selection,this.attributeKey)}execute(t={}){const e=this.editor.model,n=e.document.selection,i=t.forceValue===void 0?!this.value:t.forceValue;e.change(r=>{if(n.isCollapsed)i?r.setSelectionAttribute(this.attributeKey,!0):r.removeSelectionAttribute(this.attributeKey);else{const s=e.schema.getValidRanges(n.getRanges(),this.attributeKey);for(const a of s)i?r.setAttribute(this.attributeKey,i,a):r.removeAttribute(this.attributeKey,a)}})}_getValueFromFirstAllowedNode(){const t=this.editor.model,e=t.schema,n=t.document.selection;if(n.isCollapsed)return n.hasAttribute(this.attributeKey);for(const i of n.getRanges())for(const r of i.getItems())if(e.checkAttribute(r,this.attributeKey))return r.hasAttribute(this.attributeKey);return!1}}const wo="bold";class A1 extends R{static get pluginName(){return"BoldEditing"}init(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:wo}),t.model.schema.setAttributeProperties(wo,{isFormatting:!0,copyOnEnter:!0}),t.conversion.attributeToElement({model:wo,view:"strong",upcastAlso:["b",e=>{const n=e.getStyle("font-weight");return n&&(n=="bold"||Number(n)>=600)?{name:!0,styles:["font-weight"]}:null}]}),t.commands.add(wo,new qg(t,wo)),t.keystrokes.set("CTRL+B",wo)}}const la="bold";class C1 extends R{static get pluginName(){return"BoldUI"}init(){const t=this.editor,e=t.t;t.ui.componentFactory.add(la,n=>{const i=t.commands.get(la),r=new wt(n);return r.set({label:e("Bold"),icon:ot.bold,keystroke:"CTRL+B",tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(i,"value","isEnabled"),this.listenTo(r,"execute",()=>{t.execute(la),t.editing.view.focus()}),r})}}var Gg=N(8984),_1={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Gg.c,_1),Gg.c.locals;const Ao="italic";class v1 extends R{static get pluginName(){return"ItalicEditing"}init(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:Ao}),t.model.schema.setAttributeProperties(Ao,{isFormatting:!0,copyOnEnter:!0}),t.conversion.attributeToElement({model:Ao,view:"i",upcastAlso:["em",{styles:{"font-style":"italic"}}]}),t.commands.add(Ao,new qg(t,Ao)),t.keystrokes.set("CTRL+I",Ao)}}const da="italic";class y1 extends R{static get pluginName(){return"ItalicUI"}init(){const t=this.editor,e=t.t;t.ui.componentFactory.add(da,n=>{const i=t.commands.get(da),r=new wt(n);return r.set({label:e("Italic"),icon:'',keystroke:"CTRL+I",tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(i,"value","isEnabled"),this.listenTo(r,"execute",()=>{t.execute(da),t.editing.view.focus()}),r})}}class x1 extends at{refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(t={}){const e=this.editor.model,n=e.schema,i=e.document.selection,r=Array.from(i.getSelectedBlocks()),s=t.forceValue===void 0?!this.value:t.forceValue;e.change(a=>{if(s){const c=r.filter(l=>kr(l)||$g(n,l));this._applyQuote(a,c)}else this._removeQuote(a,r.filter(kr))})}_getValue(){const t=Wt(this.editor.model.document.selection.getSelectedBlocks());return!(!t||!kr(t))}_checkEnabled(){if(this.value)return!0;const t=this.editor.model.document.selection,e=this.editor.model.schema,n=Wt(t.getSelectedBlocks());return!!n&&$g(e,n)}_removeQuote(t,e){Wg(t,e).reverse().forEach(n=>{if(n.start.isAtStart&&n.end.isAtEnd)return void t.unwrap(n.start.parent);if(n.start.isAtStart){const r=t.createPositionBefore(n.start.parent);return void t.move(n,r)}n.end.isAtEnd||t.split(n.end);const i=t.createPositionAfter(n.end.parent);t.move(n,i)})}_applyQuote(t,e){const n=[];Wg(t,e).reverse().forEach(i=>{let r=kr(i.start);r||(r=t.createElement("blockQuote"),t.wrap(i,r)),n.push(r)}),n.reverse().reduce((i,r)=>i.nextSibling==r?(t.merge(t.createPositionAfter(i)),i):r)}}function kr(o){return o.parent.name=="blockQuote"?o.parent:null}function Wg(o,t){let e,n=0;const i=[];for(;n{const a=t.model.document.differ.getChanges();for(const c of a)if(c.type=="insert"){const l=c.position.nodeAfter;if(!l)continue;if(l.is("element","blockQuote")&&l.isEmpty)return s.remove(l),!0;if(l.is("element","blockQuote")&&!e.checkChild(c.position,l))return s.unwrap(l),!0;if(l.is("element")){const d=s.createRangeIn(l);for(const h of d.getItems())if(h.is("element","blockQuote")&&!e.checkChild(s.createPositionBefore(h),h))return s.unwrap(h),!0}}else if(c.type=="remove"){const l=c.position.parent;if(l.is("element","blockQuote")&&l.isEmpty)return s.remove(l),!0}return!1});const n=this.editor.editing.view.document,i=t.model.document.selection,r=t.commands.get("blockQuote");this.listenTo(n,"enter",(s,a)=>{!i.isCollapsed||!r.value||i.getLastPosition().parent.isEmpty&&(t.execute("blockQuote"),t.editing.view.scrollToTheSelection(),a.preventDefault(),s.stop())},{context:"blockquote"}),this.listenTo(n,"delete",(s,a)=>{if(a.direction!="backward"||!i.isCollapsed||!r.value)return;const c=i.getLastPosition().parent;c.isEmpty&&!c.previousSibling&&(t.execute("blockQuote"),t.editing.view.scrollToTheSelection(),a.preventDefault(),s.stop())},{context:"blockquote"})}}var Kg=N(8888),D1={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Kg.c,D1),Kg.c.locals;class I1 extends R{static get pluginName(){return"BlockQuoteUI"}init(){const t=this.editor,e=t.t;t.ui.componentFactory.add("blockQuote",n=>{const i=t.commands.get("blockQuote"),r=new wt(n);return r.set({label:e("Block quote"),icon:ot.quote,tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(i,"value","isEnabled"),this.listenTo(r,"execute",()=>{t.execute("blockQuote"),t.editing.view.focus()}),r})}}class S1 extends R{static get pluginName(){return"CKBoxUI"}afterInit(){const t=this.editor,e=t.commands.get("ckbox");if(!e)return;const n=t.t;if(t.ui.componentFactory.add("ckbox",i=>{const r=new wt(i);return r.set({label:n("Open file manager"),icon:ot.browseFiles,tooltip:!0}),r.bind("isOn","isEnabled").to(e,"value","isEnabled"),r.on("execute",()=>{t.execute("ckbox")}),r}),t.plugins.has("ImageInsertUI")){const i=t.plugins.get("ImageInsertUI");i.registerIntegration({name:"assetManager",observable:e,buttonViewCreator:()=>{const r=this.editor.ui.componentFactory.create("ckbox");return r.icon=ot.imageAssetManager,r.bind("label").to(i,"isImageSelected",s=>n(s?"Replace image with file manager":"Insert image with file manager")),r},formViewCreator:()=>{const r=this.editor.ui.componentFactory.create("ckbox");return r.icon=ot.imageAssetManager,r.withText=!0,r.bind("label").to(i,"isImageSelected",s=>n(s?"Replace with file manager":"Insert with file manager")),r.on("execute",()=>{i.dropdownView.isOpen=!1}),r}})}}}var T1=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","#","$","%","*","+",",","-",".",":",";","=","?","@","[","]","^","_","{","|","}","~"],di=o=>{let t=0;for(let e=0;e{let t=o/255;return t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},ua=o=>{let t=Math.max(0,Math.min(1,o));return t<=.0031308?Math.trunc(12.92*t*255+.5):Math.trunc(255*(1.055*Math.pow(t,.4166666666666667)-.055)+.5)},ga=(o,t)=>(e=>e<0?-1:1)(o)*Math.pow(Math.abs(o),t),Yg=class extends Error{constructor(o){super(o),this.name="ValidationError",this.message=o}},M1=o=>{if(!o||o.length<6)throw new Yg("The blurhash string must be at least 6 characters");let t=di(o[0]),e=Math.floor(t/9)+1,n=t%9+1;if(o.length!==4+2*n*e)throw new Yg(`blurhash length mismatch: length is ${o.length} but it should be ${4+2*n*e}`)},B1=o=>{let t=o>>8&255,e=255&o;return[ha(o>>16),ha(t),ha(e)]},N1=(o,t)=>{let e=Math.floor(o/361),n=Math.floor(o/19)%19,i=o%19;return[ga((e-9)/9,2)*t,ga((n-9)/9,2)*t,ga((i-9)/9,2)*t]},P1=(o,t,e,n)=>{M1(o),n|=1;let i=di(o[0]),r=Math.floor(i/9)+1,s=i%9+1,a=(di(o[1])+1)/166,c=new Array(s*r);for(let h=0;ht in o?L1(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;function Jg(o){const t=[];let e=0;for(const i in o){const r=parseInt(i,10);isNaN(r)||(r>e&&(e=r),t.push(`${o[i]} ${i}w`))}const n=[{srcset:t.join(","),sizes:`(max-width: ${e}px) 100vw, ${e}px`,type:"image/webp"}];return{imageFallbackUrl:o.default,imageSources:n}}const hi=32;function Xg({url:o,method:t="GET",data:e,onUploadProgress:n,signal:i,authorization:r}){const s=new XMLHttpRequest;s.open(t,o.toString()),s.setRequestHeader("Authorization",r),s.setRequestHeader("CKBox-Version","CKEditor 5"),s.responseType="json";const a=()=>{s.abort()};return new Promise((c,l)=>{i.throwIfAborted(),i.addEventListener("abort",a),s.addEventListener("loadstart",()=>{i.addEventListener("abort",a)}),s.addEventListener("loadend",()=>{i.removeEventListener("abort",a)}),s.addEventListener("error",()=>{l()}),s.addEventListener("abort",()=>{l()}),s.addEventListener("load",()=>{const d=s.response;if(!d||d.statusCode>=400)return l(d&&d.message);c(d)}),n&&s.upload.addEventListener("progress",d=>{n(d)}),s.send(e)})}const R1={"image/gif":"gif","image/jpeg":"jpg","image/png":"png","image/webp":"webp","image/bmp":"bmp","image/tiff":"tiff"};function j1(o,t){return e=this,n=null,i=function*(){try{const r=yield fetch(o,((s,a)=>{for(var c in a||(a={}))O1.call(a,c)&&Zg(s,c,a[c]);if(Qg)for(var c of Qg(a))z1.call(a,c)&&Zg(s,c,a[c]);return s})({method:"HEAD",cache:"force-cache"},t));return r.ok&&r.headers.get("content-type")||""}catch{return""}},new Promise((r,s)=>{var a=d=>{try{l(i.next(d))}catch(h){s(h)}},c=d=>{try{l(i.throw(d))}catch(h){s(h)}},l=d=>d.done?r(d.value):Promise.resolve(d.value).then(a,c);l((i=i.apply(e,n)).next())});var e,n,i}var F1=Object.defineProperty,tp=Object.getOwnPropertySymbols,V1=Object.prototype.hasOwnProperty,H1=Object.prototype.propertyIsEnumerable,ep=(o,t,e)=>t in o?F1(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,np=(o,t)=>{for(var e in t||(t={}))V1.call(t,e)&&ep(o,e,t[e]);if(tp)for(var e of tp(t))H1.call(t,e)&&ep(o,e,t[e]);return o};class U1 extends at{constructor(t){super(t),this._chosenAssets=new Set,this._wrapper=null,this._initListeners()}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(){this.fire("ckbox:open")}_getValue(){return this._wrapper!==null}_checkEnabled(){const t=this.editor.commands.get("insertImage"),e=this.editor.commands.get("link");return!(!t.isEnabled&&!e.isEnabled)}_prepareOptions(){const t=this.editor.config.get("ckbox");return{theme:t.theme,language:t.language,tokenUrl:t.tokenUrl,serviceOrigin:t.serviceOrigin,forceDemoLabel:t.forceDemoLabel,dialog:{onClose:()=>this.fire("ckbox:close")},assets:{onChoose:e=>this.fire("ckbox:choose",e)}}}_initListeners(){const t=this.editor,e=t.model,n=!t.config.get("ckbox.ignoreDataId");this.on("ckbox",()=>{this.refresh()},{priority:"low"}),this.on("ckbox:open",()=>{this.isEnabled&&!this.value&&(this._wrapper=bi(document,"div",{class:"ck ckbox-wrapper"}),document.body.appendChild(this._wrapper),window.CKBox.mount(this._wrapper,this._prepareOptions()))}),this.on("ckbox:close",()=>{this.value&&(this._wrapper.remove(),this._wrapper=null,t.editing.view.focus())}),this.on("ckbox:choose",(i,r)=>{if(!this.isEnabled)return;const s=t.commands.get("insertImage"),a=t.commands.get("link"),c=function({assets:d,isImageAllowed:h,isLinkAllowed:u}){return d.map(g=>function(p){const k=p.data.metadata;return k?k.width&&k.height:!1}(g)?{id:g.data.id,type:"image",attributes:q1(g)}:{id:g.data.id,type:"link",attributes:G1(g)}).filter(g=>g.type==="image"?h:u)}({assets:r,isImageAllowed:s.isEnabled,isLinkAllowed:a.isEnabled}),l=c.length;l!==0&&(e.change(d=>{for(const h of c){const u=h===c[l-1],g=l===1;this._insertAsset(h,u,d,g),n&&(setTimeout(()=>this._chosenAssets.delete(h),1e3),this._chosenAssets.add(h))}}),t.editing.view.focus())}),this.listenTo(t,"destroy",()=>{this.fire("ckbox:close"),this._chosenAssets.clear()})}_insertAsset(t,e,n,i){const r=this.editor.model.document.selection;n.removeSelectionAttribute("linkHref"),t.type==="image"?this._insertImage(t):this._insertLink(t,n,i),e||n.setSelection(r.getLastPosition())}_insertImage(t){const e=this.editor,{imageFallbackUrl:n,imageSources:i,imageTextAlternative:r,imageWidth:s,imageHeight:a,imagePlaceholder:c}=t.attributes;e.execute("insertImage",{source:np({src:n,sources:i,alt:r,width:s,height:a},c?{placeholder:c}:null)})}_insertLink(t,e,n){const i=this.editor,r=i.model,s=r.document.selection,{linkName:a,linkHref:c}=t.attributes;if(s.isCollapsed){const l=We(s.getAttributes()),d=e.createText(a,l);if(!n){const u=s.getLastPosition(),g=u.parent;g.name==="paragraph"&&g.isEmpty||i.execute("insertParagraph",{position:u});const p=r.insertContent(d);return e.setSelection(p),void i.execute("link",c)}const h=r.insertContent(d);e.setSelection(h)}i.execute("link",c)}}function q1(o){const{imageFallbackUrl:t,imageSources:e}=Jg(o.data.imageUrls),{description:n,width:i,height:r,blurHash:s}=o.data.metadata,a=function(c){if(c)try{const l=`${hi}px`,d=document.createElement("canvas");d.setAttribute("width",l),d.setAttribute("height",l);const h=d.getContext("2d");if(!h)return;const u=h.createImageData(hi,hi),g=P1(c,hi,hi);return u.data.set(g),h.putImageData(u,0,0),d.toDataURL()}catch{return}}(s);return np({imageFallbackUrl:t,imageSources:e,imageTextAlternative:n||"",imageWidth:i,imageHeight:r},a?{imagePlaceholder:a}:null)}function G1(o){return{linkName:o.data.name,linkHref:W1(o)}}function W1(o){const t=new URL(o.data.url);return t.searchParams.set("download","true"),t.toString()}var pa=(o,t,e)=>new Promise((n,i)=>{var r=c=>{try{a(e.next(c))}catch(l){i(l)}},s=c=>{try{a(e.throw(c))}catch(l){i(l)}},a=c=>c.done?n(c.value):Promise.resolve(c.value).then(r,s);a((e=e.apply(o,t)).next())});class op extends R{static get pluginName(){return"CKBoxUtils"}static get requires(){return["CloudServices"]}init(){return pa(this,null,function*(){const t=this.editor,e=!!t.config.get("ckbox"),n=!!window.CKBox;if(!e&&!n)return;t.config.define("ckbox",{serviceOrigin:"https://api.ckbox.io",defaultUploadCategories:null,ignoreDataId:!1,language:t.locale.uiLanguage,theme:"lark",tokenUrl:t.config.get("cloudServices.tokenUrl")});const i=t.plugins.get("CloudServices"),r=t.config.get("cloudServices.tokenUrl"),s=t.config.get("ckbox.tokenUrl");if(!s)throw new _("ckbox-plugin-missing-token-url",this);this._token=s==r?i.token:yield i.registerTokenUrl(s)})}getToken(){return this._token}getWorkspaceId(){const t=(0,this.editor.t)("Cannot access default workspace."),e=this.editor.config.get("ckbox.defaultUploadWorkspaceId"),n=function(i,r){const[,s]=i.value.split("."),a=JSON.parse(atob(s)),c=a.auth&&a.auth.ckbox&&a.auth.ckbox.workspaces||[a.aud];return r?(a.auth&&a.auth.ckbox&&a.auth.ckbox.role)=="superadmin"||c.includes(r)?r:null:c[0]}(this._token,e);if(n==null)throw Et("ckbox-access-default-workspace-error"),t;return n}getCategoryIdForFile(t,e){return pa(this,null,function*(){const n=(0,this.editor.t)("Cannot determine a category for the uploaded file."),i=this.editor.config.get("ckbox.defaultUploadCategories"),r=this._getAvailableCategories(e),s=typeof t=="string"?(a=yield j1(t,e),R1[a]):function(d){const h=d.name,u=new RegExp("\\.(?[^.]+)$");return h.match(u).groups.ext.toLowerCase()}(t);var a;const c=yield r;if(!c)throw n;if(i){const d=Object.keys(i).find(h=>i[h].find(u=>u.toLowerCase()==s));if(d){const h=c.find(u=>u.id===d||u.name===d);if(!h)throw n;return h.id}}const l=c.find(d=>d.extensions.find(h=>h.toLowerCase()==s));if(!l)throw n;return l.id})}_getAvailableCategories(t){return pa(this,null,function*(){const e=this.editor,n=this._token,{signal:i}=t,r=e.config.get("ckbox.serviceOrigin"),s=this.getWorkspaceId();try{const c=[];let l,d=0;do{const h=yield a(d);c.push(...h.items),l=h.totalCount-(d+50),d+=50}while(l>0);return c}catch{return i.throwIfAborted(),void Et("ckbox-fetch-category-http-error")}function a(c){const l=new URL("categories",r);return l.searchParams.set("limit","50"),l.searchParams.set("offset",c.toString()),l.searchParams.set("workspaceId",s),Xg({url:l,signal:i,authorization:n.value})}})}}var ma=(o,t,e)=>new Promise((n,i)=>{var r=c=>{try{a(e.next(c))}catch(l){i(l)}},s=c=>{try{a(e.throw(c))}catch(l){i(l)}},a=c=>c.done?n(c.value):Promise.resolve(c.value).then(r,s);a((e=e.apply(o,t)).next())});class $1 extends R{static get requires(){return["ImageUploadEditing","ImageUploadProgress",je,ip]}static get pluginName(){return"CKBoxUploadAdapter"}afterInit(){return ma(this,null,function*(){const t=this.editor,e=!!t.config.get("ckbox"),n=!!window.CKBox;if(!e&&!n)return;const i=t.plugins.get(je),r=t.plugins.get(op);i.createUploadAdapter=c=>new K1(c,t,r);const s=!t.config.get("ckbox.ignoreDataId"),a=t.plugins.get("ImageUploadEditing");s&&a.on("uploadComplete",(c,{imageElement:l,data:d})=>{t.model.change(h=>{h.setAttribute("ckboxImageId",d.ckboxImageId,l)})})})}}class K1{constructor(t,e,n){this.loader=t,this.token=n.getToken(),this.ckboxUtils=n,this.editor=e,this.controller=new AbortController,this.serviceOrigin=e.config.get("ckbox.serviceOrigin")}upload(){return ma(this,null,function*(){const t=this.ckboxUtils,e=this.editor.t,n=yield this.loader.file,i=yield t.getCategoryIdForFile(n,{signal:this.controller.signal}),r=new URL("assets",this.serviceOrigin),s=new FormData;return r.searchParams.set("workspaceId",t.getWorkspaceId()),s.append("categoryId",i),s.append("file",n),Xg({method:"POST",url:r,data:s,onUploadProgress:a=>{a.lengthComputable&&(this.loader.uploadTotal=a.total,this.loader.uploaded=a.loaded)},signal:this.controller.signal,authorization:this.token.value}).then(a=>ma(this,null,function*(){const c=Jg(a.imageUrls);return{ckboxImageId:a.id,default:c.imageFallbackUrl,sources:c.imageSources}})).catch(()=>{const a=e("Cannot upload file:")+` ${n.name}.`;return Promise.reject(a)})})}abort(){this.controller.abort()}}class ip extends R{static get pluginName(){return"CKBoxEditing"}static get requires(){return["LinkEditing","PictureEditing",$1,op]}init(){const t=this.editor,e=!!t.config.get("ckbox"),n=!!window.CKBox;(e||n)&&(this._checkImagePlugins(),t.config.get("ckbox.ignoreDataId")||(this._initSchema(),this._initConversion(),this._initFixers()),n&&t.commands.add("ckbox",new U1(t)))}_checkImagePlugins(){const t=this.editor;t.plugins.has("ImageBlockEditing")||t.plugins.has("ImageInlineEditing")||Et("ckbox-plugin-image-feature-missing",t)}_initSchema(){const t=this.editor.model.schema;t.extend("$text",{allowAttributes:"ckboxLinkId"}),t.isRegistered("imageBlock")&&t.extend("imageBlock",{allowAttributes:["ckboxImageId","ckboxLinkId"]}),t.isRegistered("imageInline")&&t.extend("imageInline",{allowAttributes:["ckboxImageId","ckboxLinkId"]}),t.addAttributeCheck((e,n)=>{if(!e.last.getAttribute("linkHref")&&n==="ckboxLinkId")return!1})}_initConversion(){const t=this.editor;t.conversion.for("downcast").add(n=>{n.on("attribute:ckboxLinkId:imageBlock",(i,r,s)=>{const{writer:a,mapper:c,consumable:l}=s;if(!l.consume(r.item,i.name))return;const d=[...c.toViewElement(r.item).getChildren()].find(h=>h.name==="a");d&&(r.item.hasAttribute("ckboxLinkId")?a.setAttribute("data-ckbox-resource-id",r.item.getAttribute("ckboxLinkId"),d):a.removeAttribute("data-ckbox-resource-id",d))},{priority:"low"}),n.on("attribute:ckboxLinkId",(i,r,s)=>{const{writer:a,mapper:c,consumable:l}=s;if(l.consume(r.item,i.name)){if(r.attributeOldValue){const d=rp(a,r.attributeOldValue);a.unwrap(c.toViewRange(r.range),d)}if(r.attributeNewValue){const d=rp(a,r.attributeNewValue);if(r.item.is("selection")){const h=a.document.selection;a.wrap(h.getFirstRange(),d)}else a.wrap(c.toViewRange(r.range),d)}}},{priority:"low"})}),t.conversion.for("upcast").add(n=>{n.on("element:a",(i,r,s)=>{const{writer:a,consumable:c}=s;if(!r.viewItem.getAttribute("href")||!c.consume(r.viewItem,{attributes:["data-ckbox-resource-id"]}))return;const l=r.viewItem.getAttribute("data-ckbox-resource-id");if(l)if(r.modelRange)for(let d of r.modelRange.getItems())d.is("$textProxy")&&(d=d.textNode),Q1(d)&&a.setAttribute("ckboxLinkId",l,d);else{const d=r.modelCursor.nodeBefore||r.modelCursor.parent;a.setAttribute("ckboxLinkId",l,d)}},{priority:"low"})}),t.conversion.for("downcast").attributeToAttribute({model:"ckboxImageId",view:"data-ckbox-resource-id"}),t.conversion.for("upcast").elementToAttribute({model:{key:"ckboxImageId",value:n=>n.getAttribute("data-ckbox-resource-id")},view:{attributes:{"data-ckbox-resource-id":/[\s\S]+/}}});const e=t.commands.get("replaceImageSource");e&&this.listenTo(e,"cleanupImage",(n,[i,r])=>{i.removeAttribute("ckboxImageId",r)})}_initFixers(){const t=this.editor,e=t.model,n=e.document.selection;e.document.registerPostFixer(function(i){return r=>{let s=!1;const a=i.model,c=i.commands.get("ckbox");if(!c)return s;for(const l of a.document.differ.getChanges()){if(l.type!=="insert"&&l.type!=="attribute")continue;const d=l.type==="insert"?new B(l.position,l.position.getShiftedBy(l.length)):l.range,h=l.type==="attribute"&&l.attributeKey==="linkHref"&&l.attributeNewValue===null;for(const u of d.getItems()){if(h&&u.hasAttribute("ckboxLinkId")){r.removeAttribute("ckboxLinkId",u),s=!0;continue}const g=Y1(u,c._chosenAssets);for(const p of g){const k=p.type==="image"?"ckboxImageId":"ckboxLinkId";p.id!==u.getAttribute(k)&&(r.setAttribute(k,p.id,u),s=!0)}}}return s}}(t)),e.document.registerPostFixer(function(i){return r=>!(i.hasAttribute("linkHref")||!i.hasAttribute("ckboxLinkId"))&&(r.removeSelectionAttribute("ckboxLinkId"),!0)}(n))}}function Y1(o,t){const e=o.is("element","imageInline")||o.is("element","imageBlock"),n=o.hasAttribute("linkHref");return[...t].filter(i=>i.type==="image"&&e?i.attributes.imageFallbackUrl===o.getAttribute("src"):i.type==="link"&&n?i.attributes.linkHref===o.getAttribute("linkHref"):void 0)}function rp(o,t){const e=o.createAttributeElement("a",{"data-ckbox-resource-id":t},{priority:5});return o.setCustomProperty("link",!0,e),e}function Q1(o){return!!o.is("$text")||!(!o.is("element","imageInline")&&!o.is("element","imageBlock"))}var sp=N(9268),Z1={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(sp.c,Z1),sp.c.locals;class J1 extends R{static get pluginName(){return"CKFinderUI"}init(){const t=this.editor,e=t.ui.componentFactory,n=t.t;if(e.add("ckfinder",i=>{const r=t.commands.get("ckfinder"),s=new wt(i);return s.set({label:n("Insert image or file"),icon:ot.browseFiles,tooltip:!0}),s.bind("isEnabled").to(r),s.on("execute",()=>{t.execute("ckfinder"),t.editing.view.focus()}),s}),t.plugins.has("ImageInsertUI")){const i=t.plugins.get("ImageInsertUI"),r=t.commands.get("ckfinder");i.registerIntegration({name:"assetManager",observable:r,buttonViewCreator:()=>{const s=this.editor.ui.componentFactory.create("ckfinder");return s.icon=ot.imageAssetManager,s.bind("label").to(i,"isImageSelected",a=>n(a?"Replace image with file manager":"Insert image with file manager")),s},formViewCreator:()=>{const s=this.editor.ui.componentFactory.create("ckfinder");return s.icon=ot.imageAssetManager,s.withText=!0,s.bind("label").to(i,"isImageSelected",a=>n(a?"Replace with file manager":"Insert with file manager")),s.on("execute",()=>{i.dropdownView.isOpen=!1}),s}})}}}class X1 extends at{constructor(t){super(t),this.affectsData=!1,this.stopListening(this.editor.model.document,"change"),this.listenTo(this.editor.model.document,"change",()=>this.refresh(),{priority:"low"})}refresh(){const t=this.editor.commands.get("insertImage"),e=this.editor.commands.get("link");this.isEnabled=t.isEnabled||e.isEnabled}execute(){const t=this.editor,e=this.editor.config.get("ckfinder.openerMethod")||"modal";if(e!="popup"&&e!="modal")throw new _("ckfinder-unknown-openermethod",t);const n=this.editor.config.get("ckfinder.options")||{};n.chooseFiles=!0;const i=n.onInit;n.language||(n.language=t.locale.uiLanguage),n.onInit=r=>{i&&i(r),r.on("files:choose",s=>{const a=s.data.files.toArray(),c=a.filter(h=>!h.isImage()),l=a.filter(h=>h.isImage());for(const h of c)t.execute("link",h.getUrl());const d=[];for(const h of l){const u=h.getUrl();d.push(u||r.request("file:getProxyUrl",{file:h}))}d.length&&ap(t,d)}),r.on("file:choose:resizedImage",s=>{const a=s.data.resizedUrl;if(a)ap(t,[a]);else{const c=t.plugins.get("Notification"),l=t.locale.t;c.showWarning(l("Could not obtain resized image URL."),{title:l("Selecting resized image failed"),namespace:"ckfinder"})}})},window.CKFinder[e](n)}}function ap(o,t){if(o.commands.get("insertImage").isEnabled)o.execute("insertImage",{source:t});else{const e=o.plugins.get("Notification"),n=o.locale.t;e.showWarning(n("Could not insert image at the current position."),{title:n("Inserting image failed"),namespace:"ckfinder"})}}class ty extends R{static get pluginName(){return"CKFinderEditing"}static get requires(){return[ea,"LinkEditing"]}init(){const t=this.editor;if(!t.plugins.has("ImageBlockEditing")&&!t.plugins.has("ImageInlineEditing"))throw new _("ckfinder-missing-image-plugin",t);t.commands.add("ckfinder",new X1(t))}}class ey extends R{static get pluginName(){return"CloudServicesUploadAdapter"}static get requires(){return["CloudServices",je]}init(){const t=this.editor,e=t.plugins.get("CloudServices"),n=e.token,i=e.uploadUrl;if(!n)return;const r=t.plugins.get("CloudServicesCore");this._uploadGateway=r.createUploadGateway(n,i),t.plugins.get(je).createUploadAdapter=s=>new ny(this._uploadGateway,s)}}class ny{constructor(t,e){this.uploadGateway=t,this.loader=e}upload(){return this.loader.file.then(t=>(this.fileUploader=this.uploadGateway.upload(t),this.fileUploader.on("progress",(e,n)=>{this.loader.uploadTotal=n.total,this.loader.uploaded=n.uploaded}),this.fileUploader.send()))}abort(){this.fileUploader.abort()}}class oy extends at{constructor(t){super(t),this._isEnabledBasedOnSelection=!1}refresh(){const t=this.editor.model,e=Wt(t.document.selection.getSelectedBlocks());this.value=!!e&&e.is("element","paragraph"),this.isEnabled=!!e&&cp(e,t.schema)}execute(t={}){const e=this.editor.model,n=e.document,i=t.selection||n.selection;e.canEditAt(i)&&e.change(r=>{const s=i.getSelectedBlocks();for(const a of s)!a.is("element","paragraph")&&cp(a,e.schema)&&r.rename(a,"paragraph")})}}function cp(o,t){return t.checkChild(o.parent,"paragraph")&&!t.isObject(o)}class iy extends at{constructor(t){super(t),this._isEnabledBasedOnSelection=!1}execute(t){const e=this.editor.model,n=t.attributes;let i=t.position;e.canEditAt(i)&&e.change(r=>{if(i=this._findPositionToInsertParagraph(i,r),!i)return;const s=r.createElement("paragraph");n&&e.schema.setAllowedAttributes(s,n,r),e.insertContent(s,i),r.setSelection(s,"in")})}_findPositionToInsertParagraph(t,e){const n=this.editor.model;if(n.schema.checkChild(t,"paragraph"))return t;const i=n.schema.findAllowedParent(t,"paragraph");if(!i)return null;const r=t.parent,s=n.schema.checkChild(r,"$text");return r.isEmpty||s&&t.isAtEnd?n.createPositionAfter(r):!r.isEmpty&&s&&t.isAtStart?n.createPositionBefore(r):e.split(t,i).position}}const lp=class extends R{static get pluginName(){return"Paragraph"}init(){const o=this.editor,t=o.model;o.commands.add("paragraph",new oy(o)),o.commands.add("insertParagraph",new iy(o)),t.schema.register("paragraph",{inheritAllFrom:"$block"}),o.conversion.elementToElement({model:"paragraph",view:"p"}),o.conversion.for("upcast").elementToElement({model:(e,{writer:n})=>lp.paragraphLikeElements.has(e.name)?e.isEmpty?null:n.createElement("paragraph"):null,view:/.+/,converterPriority:"low"})}};let fa=lp;fa.paragraphLikeElements=new Set(["blockquote","dd","div","dt","h1","h2","h3","h4","h5","h6","li","p","td","th"]);class ry extends at{constructor(t,e){super(t),this.modelElements=e}refresh(){const t=Wt(this.editor.model.document.selection.getSelectedBlocks());this.value=!!t&&this.modelElements.includes(t.name)&&t.name,this.isEnabled=!!t&&this.modelElements.some(e=>dp(t,e,this.editor.model.schema))}execute(t){const e=this.editor.model,n=e.document,i=t.value;e.change(r=>{const s=Array.from(n.selection.getSelectedBlocks()).filter(a=>dp(a,i,e.schema));for(const a of s)a.is("element",i)||r.rename(a,i)})}}function dp(o,t,e){return e.checkChild(o.parent,t)&&!e.isObject(o)}const hp="paragraph";class sy extends R{static get pluginName(){return"HeadingEditing"}constructor(t){super(t),t.config.define("heading",{options:[{model:"paragraph",title:"Paragraph",class:"ck-heading_paragraph"},{model:"heading1",view:"h2",title:"Heading 1",class:"ck-heading_heading1"},{model:"heading2",view:"h3",title:"Heading 2",class:"ck-heading_heading2"},{model:"heading3",view:"h4",title:"Heading 3",class:"ck-heading_heading3"}]})}static get requires(){return[fa]}init(){const t=this.editor,e=t.config.get("heading.options"),n=[];for(const i of e)i.model!=="paragraph"&&(t.model.schema.register(i.model,{inheritAllFrom:"$block"}),t.conversion.elementToElement(i),n.push(i.model));this._addDefaultH1Conversion(t),t.commands.add("heading",new ry(t,n))}afterInit(){const t=this.editor,e=t.commands.get("enter"),n=t.config.get("heading.options");e&&this.listenTo(e,"afterExecute",(i,r)=>{const s=t.model.document.selection.getFirstPosition().parent;n.some(a=>s.is("element",a.model))&&!s.is("element",hp)&&s.childCount===0&&r.writer.rename(s,hp)})}_addDefaultH1Conversion(t){t.conversion.for("upcast").elementToElement({model:"heading1",view:"h1",converterPriority:At.low+1})}}var up=N(2500),ay={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(up.c,ay),up.c.locals;class cy extends R{static get pluginName(){return"HeadingUI"}init(){const t=this.editor,e=t.t,n=function(s){const a=s.t,c={Paragraph:a("Paragraph"),"Heading 1":a("Heading 1"),"Heading 2":a("Heading 2"),"Heading 3":a("Heading 3"),"Heading 4":a("Heading 4"),"Heading 5":a("Heading 5"),"Heading 6":a("Heading 6")};return s.config.get("heading.options").map(l=>{const d=c[l.title];return d&&d!=l.title&&(l.title=d),l})}(t),i=e("Choose heading"),r=e("Heading");t.ui.componentFactory.add("heading",s=>{const a={},c=new Me,l=t.commands.get("heading"),d=t.commands.get("paragraph"),h=[l];for(const g of n){const p={type:"button",model:new vu({label:g.title,class:g.class,role:"menuitemradio",withText:!0})};g.model==="paragraph"?(p.model.bind("isOn").to(d,"value"),p.model.set("commandName","paragraph"),h.push(d)):(p.model.bind("isOn").to(l,"value",k=>k===g.model),p.model.set({commandName:"heading",commandValue:g.model})),c.add(p),a[g.model]=g.title}const u=rn(s);return Kh(u,c,{ariaLabel:r,role:"menu"}),u.buttonView.set({ariaLabel:r,ariaLabelledBy:void 0,isOn:!1,withText:!0,tooltip:r}),u.extendTemplate({attributes:{class:["ck-heading-dropdown"]}}),u.bind("isEnabled").toMany(h,"isEnabled",(...g)=>g.some(p=>p)),u.buttonView.bind("label").to(l,"value",d,"value",(g,p)=>{const k=g||p&&"paragraph";return typeof k=="boolean"?i:a[k]?a[k]:i}),this.listenTo(u,"execute",g=>{const{commandName:p,commandValue:k}=g.source;t.execute(p,k?{value:k}:void 0),t.editing.view.focus()}),u})}}function gp(o){return o.createContainerElement("figure",{class:"image"},[o.createEmptyElement("img"),o.createSlot("children")])}function pp(o,t){const e=o.plugins.get("ImageUtils"),n=o.plugins.has("ImageInlineEditing")&&o.plugins.has("ImageBlockEditing");return r=>e.isInlineImageView(r)?n&&(r.getStyle("display")=="block"||r.findAncestor(e.isBlockImageView)?"imageBlock":"imageInline")!==t?null:i(r):null;function i(r){const s={name:!0};return r.hasAttribute("src")&&(s.attributes=["src"]),s}}function ka(o,t){const e=Wt(t.getSelectedBlocks());return!e||o.isObject(e)||e.isEmpty&&e.name!="listItem"?"imageBlock":"imageInline"}function br(o){return o&&o.endsWith("px")?parseInt(o):null}function mp(o){const t=br(o.getStyle("width")),e=br(o.getStyle("height"));return!(!t||!e)}var ly=Object.defineProperty,fp=Object.getOwnPropertySymbols,dy=Object.prototype.hasOwnProperty,hy=Object.prototype.propertyIsEnumerable,kp=(o,t,e)=>t in o?ly(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,bp=(o,t)=>{for(var e in t||(t={}))dy.call(t,e)&&kp(o,e,t[e]);if(fp)for(var e of fp(t))hy.call(t,e)&&kp(o,e,t[e]);return o};const uy=/^(image|image-inline)$/;class le extends R{constructor(){super(...arguments),this._domEmitter=new(Ae())}static get pluginName(){return"ImageUtils"}isImage(t){return this.isInlineImage(t)||this.isBlockImage(t)}isInlineImageView(t){return!!t&&t.is("element","img")}isBlockImageView(t){return!!t&&t.is("element","figure")&&t.hasClass("image")}insertImage(t={},e=null,n=null,i={}){const r=this.editor,s=r.model,a=s.document.selection,c=wp(r,e||a,n);t=bp(bp({},Object.fromEntries(a.getAttributes())),t);for(const l in t)s.schema.checkAttribute(c,l)||delete t[l];return s.change(l=>{const{setImageSizes:d=!0}=i,h=l.createElement(c,t);return s.insertObject(h,e,null,{setSelection:"on",findOptimalPosition:e||c=="imageInline"?void 0:"auto"}),h.parent?(d&&this.setImageNaturalSizeAttributes(h),h):null})}setImageNaturalSizeAttributes(t){const e=t.getAttribute("src");e&&(t.getAttribute("width")||t.getAttribute("height")||this.editor.model.change(n=>{const i=new $.window.Image;this._domEmitter.listenTo(i,"load",()=>{t.getAttribute("width")||t.getAttribute("height")||this.editor.model.enqueueChange(n.batch,r=>{r.setAttribute("width",i.naturalWidth,t),r.setAttribute("height",i.naturalHeight,t)}),this._domEmitter.stopListening(i,"load")}),i.src=e}))}getClosestSelectedImageWidget(t){const e=t.getFirstPosition();if(!e)return null;const n=t.getSelectedElement();if(n&&this.isImageWidget(n))return n;let i=e.parent;for(;i;){if(i.is("element")&&this.isImageWidget(i))return i;i=i.parent}return null}getClosestSelectedImageElement(t){const e=t.getSelectedElement();return this.isImage(e)?e:t.getFirstPosition().findAncestor("imageBlock")}getImageWidgetFromImageView(t){return t.findAncestor({classes:uy})}isImageAllowed(){const t=this.editor.model.document.selection;return function(e,n){if(wp(e,n,null)=="imageBlock"){const r=function(s,a){const c=mg(s,a),l=c.start.parent;return l.isEmpty&&!l.is("element","$root")?l.parent:l}(n,e.model);if(e.model.schema.checkChild(r,"imageBlock"))return!0}else if(e.model.schema.checkChild(n.focus,"imageInline"))return!0;return!1}(this.editor,t)&&function(e){return[...e.focus.getAncestors()].every(n=>!n.is("element","imageBlock"))}(t)}toImageWidget(t,e,n){return e.setCustomProperty("image",!0,t),aa(t,e,{label:()=>{const i=this.findViewImgElement(t).getAttribute("alt");return i?`${i} ${n}`:n}})}isImageWidget(t){return!!t.getCustomProperty("image")&&qt(t)}isBlockImage(t){return!!t&&t.is("element","imageBlock")}isInlineImage(t){return!!t&&t.is("element","imageInline")}findViewImgElement(t){if(this.isInlineImageView(t))return t;const e=this.editor.editing.view;for(const{item:n}of e.createRangeIn(t))if(this.isInlineImageView(n))return n}destroy(){return this._domEmitter.stopListening(),super.destroy()}}function wp(o,t,e){const n=o.model.schema,i=o.config.get("image.insert.type");return o.plugins.has("ImageBlockEditing")?o.plugins.has("ImageInlineEditing")?e||(i==="inline"?"imageInline":i!=="auto"?"imageBlock":t.is("selection")?ka(n,t):n.checkChild(t,"imageInline")?"imageInline":"imageBlock"):"imageBlock":"imageInline"}class gy extends at{refresh(){const t=this.editor.plugins.get("ImageUtils").getClosestSelectedImageElement(this.editor.model.document.selection);this.isEnabled=!!t,this.isEnabled&&t.hasAttribute("alt")?this.value=t.getAttribute("alt"):this.value=!1}execute(t){const e=this.editor,n=e.plugins.get("ImageUtils"),i=e.model,r=n.getClosestSelectedImageElement(i.document.selection);i.change(s=>{s.setAttribute("alt",t.newValue,r)})}}class py extends R{static get requires(){return[le]}static get pluginName(){return"ImageTextAlternativeEditing"}init(){this.editor.commands.add("imageTextAlternative",new gy(this.editor))}}var Ap=N(5688),my={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Ap.c,my),Ap.c.locals;var Cp=N(2636),fy={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Cp.c,fy),Cp.c.locals;class ky extends tt{constructor(t){super(t);const e=this.locale.t;this.focusTracker=new Qt,this.keystrokes=new ie,this.labeledInput=this._createLabeledInputView(),this.saveButtonView=this._createButton(e("Save"),ot.check,"ck-button-save"),this.saveButtonView.type="submit",this.cancelButtonView=this._createButton(e("Cancel"),ot.cancel,"ck-button-cancel","cancel"),this._focusables=new Ce,this._focusCycler=new _e({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.setTemplate({tag:"form",attributes:{class:["ck","ck-text-alternative-form","ck-responsive-form"],tabindex:"-1"},children:[this.labeledInput,this.saveButtonView,this.cancelButtonView]})}render(){super.render(),this.keystrokes.listenTo(this.element),m({view:this}),[this.labeledInput,this.saveButtonView,this.cancelButtonView].forEach(t=>{this._focusables.add(t),this.focusTracker.add(t.element)})}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createButton(t,e,n,i){const r=new wt(this.locale);return r.set({label:t,icon:e,tooltip:!0}),r.extendTemplate({attributes:{class:n}}),i&&r.delegate("execute").to(this,i),r}_createLabeledInputView(){const t=this.locale.t,e=new Pi(this.locale,er);return e.label=t("Text alternative"),e}}function _p(o){const t=o.editing.view,e=ae.defaultPositions,n=o.plugins.get("ImageUtils");return{target:t.domConverter.mapViewToDom(n.getClosestSelectedImageWidget(t.document.selection)),positions:[e.northArrowSouth,e.northArrowSouthWest,e.northArrowSouthEast,e.southArrowNorth,e.southArrowNorthWest,e.southArrowNorthEast,e.viewportStickyNorth]}}class by extends R{static get requires(){return[rr]}static get pluginName(){return"ImageTextAlternativeUI"}init(){this._createButton()}destroy(){super.destroy(),this._form&&this._form.destroy()}_createButton(){const t=this.editor,e=t.t;t.ui.componentFactory.add("imageTextAlternative",n=>{const i=t.commands.get("imageTextAlternative"),r=new wt(n);return r.set({label:e("Change image text alternative"),icon:ot.textAlternative,tooltip:!0}),r.bind("isEnabled").to(i,"isEnabled"),r.bind("isOn").to(i,"value",s=>!!s),this.listenTo(r,"execute",()=>{this._showForm()}),r})}_createForm(){const t=this.editor,e=t.editing.view.document,n=t.plugins.get("ImageUtils");this._balloon=this.editor.plugins.get("ContextualBalloon"),this._form=new(x(ky))(t.locale),this._form.render(),this.listenTo(this._form,"submit",()=>{t.execute("imageTextAlternative",{newValue:this._form.labeledInput.fieldView.element.value}),this._hideForm(!0)}),this.listenTo(this._form,"cancel",()=>{this._hideForm(!0)}),this._form.keystrokes.set("Esc",(i,r)=>{this._hideForm(!0),r()}),this.listenTo(t.ui,"update",()=>{n.getClosestSelectedImageWidget(e.selection)?this._isVisible&&function(i){const r=i.plugins.get("ContextualBalloon");if(i.plugins.get("ImageUtils").getClosestSelectedImageWidget(i.editing.view.document.selection)){const s=_p(i);r.updatePosition(s)}}(t):this._hideForm(!0)}),v({emitter:this._form,activator:()=>this._isVisible,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(){if(this._isVisible)return;this._form||this._createForm();const t=this.editor,e=t.commands.get("imageTextAlternative"),n=this._form.labeledInput;this._form.disableCssTransitions(),this._isInBalloon||this._balloon.add({view:this._form,position:_p(t)}),n.fieldView.value=n.fieldView.element.value=e.value||"",this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(t=!1){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),t&&this.editor.editing.view.focus())}get _isVisible(){return!!this._balloon&&this._balloon.visibleView===this._form}get _isInBalloon(){return!!this._balloon&&this._balloon.hasView(this._form)}}class vp extends R{static get requires(){return[py,by]}static get pluginName(){return"ImageTextAlternative"}}function yp(o,t){const e=(n,i,r)=>{if(!r.consumable.consume(i.item,n.name))return;const s=r.writer,a=r.mapper.toViewElement(i.item),c=o.findViewImgElement(a);i.attributeNewValue===null?(s.removeAttribute("srcset",c),s.removeAttribute("sizes",c)):i.attributeNewValue&&(s.setAttribute("srcset",i.attributeNewValue,c),s.setAttribute("sizes","100vw",c))};return n=>{n.on(`attribute:srcset:${t}`,e)}}function wr(o,t,e){const n=(i,r,s)=>{if(!s.consumable.consume(r.item,i.name))return;const a=s.writer,c=s.mapper.toViewElement(r.item),l=o.findViewImgElement(c);a.setAttribute(r.attributeKey,r.attributeNewValue||"",l)};return i=>{i.on(`attribute:${e}:${t}`,n)}}class xp extends Ke{observe(t){this.listenTo(t,"load",(e,n)=>{const i=n.target;this.checkShouldIgnoreEventFromTarget(i)||i.tagName=="IMG"&&this._fireEvents(n)},{useCapture:!0})}stopObserving(t){this.stopListening(t)}_fireEvents(t){this.isEnabled&&(this.document.fire("layoutChanged"),this.document.fire("imageLoaded",t))}}var wy=Object.defineProperty,Ep=Object.getOwnPropertySymbols,Ay=Object.prototype.hasOwnProperty,Cy=Object.prototype.propertyIsEnumerable,Dp=(o,t,e)=>t in o?wy(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Ar=(o,t)=>{for(var e in t||(t={}))Ay.call(t,e)&&Dp(o,e,t[e]);if(Ep)for(var e of Ep(t))Cy.call(t,e)&&Dp(o,e,t[e]);return o};class _y extends at{constructor(t){super(t);const e=t.config.get("image.insert.type");t.plugins.has("ImageBlockEditing")||e==="block"&&Y("image-block-plugin-required"),t.plugins.has("ImageInlineEditing")||e==="inline"&&Y("image-inline-plugin-required")}refresh(){const t=this.editor.plugins.get("ImageUtils");this.isEnabled=t.isImageAllowed()}execute(t){const e=Bt(t.source),n=this.editor.model.document.selection,i=this.editor.plugins.get("ImageUtils"),r=Object.fromEntries(n.getAttributes());e.forEach((s,a)=>{const c=n.getSelectedElement();if(typeof s=="string"&&(s={src:s}),a&&c&&i.isImage(c)){const l=this.editor.model.createPositionAfter(c);i.insertImage(Ar(Ar({},s),r),l)}else i.insertImage(Ar(Ar({},s),r))})}}class vy extends at{constructor(t){super(t),this.decorate("cleanupImage")}refresh(){const t=this.editor.plugins.get("ImageUtils"),e=this.editor.model.document.selection.getSelectedElement();this.isEnabled=t.isImage(e),this.value=this.isEnabled?e.getAttribute("src"):null}execute(t){const e=this.editor.model.document.selection.getSelectedElement(),n=this.editor.plugins.get("ImageUtils");this.editor.model.change(i=>{i.setAttribute("src",t.source,e),this.cleanupImage(i,e),n.setImageNaturalSizeAttributes(e)})}cleanupImage(t,e){t.removeAttribute("srcset",e),t.removeAttribute("sizes",e),t.removeAttribute("sources",e),t.removeAttribute("width",e),t.removeAttribute("height",e),t.removeAttribute("alt",e)}}class ba extends R{static get requires(){return[le]}static get pluginName(){return"ImageEditing"}init(){const t=this.editor,e=t.conversion;t.editing.view.addObserver(xp),e.for("upcast").attributeToAttribute({view:{name:"img",key:"alt"},model:"alt"}).attributeToAttribute({view:{name:"img",key:"srcset"},model:"srcset"});const n=new _y(t),i=new vy(t);t.commands.add("insertImage",n),t.commands.add("replaceImageSource",i),t.commands.add("imageInsert",n)}}class Ip extends R{static get requires(){return[le]}static get pluginName(){return"ImageSizeAttributes"}afterInit(){this._registerSchema(),this._registerConverters("imageBlock"),this._registerConverters("imageInline")}_registerSchema(){this.editor.plugins.has("ImageBlockEditing")&&this.editor.model.schema.extend("imageBlock",{allowAttributes:["width","height"]}),this.editor.plugins.has("ImageInlineEditing")&&this.editor.model.schema.extend("imageInline",{allowAttributes:["width","height"]})}_registerConverters(t){const e=this.editor,n=e.plugins.get("ImageUtils"),i=t==="imageBlock"?"figure":"img";function r(s,a,c,l){s.on(`attribute:${a}:${t}`,(d,h,u)=>{if(!u.consumable.consume(h.item,d.name))return;const g=u.writer,p=u.mapper.toViewElement(h.item),k=n.findViewImgElement(p);if(h.attributeNewValue!==null?g.setAttribute(c,h.attributeNewValue,k):g.removeAttribute(c,k),h.item.hasAttribute("sources"))return;const b=h.item.hasAttribute("resizedWidth");if(t==="imageInline"&&!b&&!l)return;const A=h.item.getAttribute("width"),E=h.item.getAttribute("height");A&&E&&g.setStyle("aspect-ratio",`${A}/${E}`,k)})}e.conversion.for("upcast").attributeToAttribute({view:{name:i,styles:{width:/.+/}},model:{key:"width",value:s=>mp(s)?br(s.getStyle("width")):null}}).attributeToAttribute({view:{name:i,key:"width"},model:"width"}).attributeToAttribute({view:{name:i,styles:{height:/.+/}},model:{key:"height",value:s=>mp(s)?br(s.getStyle("height")):null}}).attributeToAttribute({view:{name:i,key:"height"},model:"height"}),e.conversion.for("editingDowncast").add(s=>{r(s,"width","width",!0),r(s,"height","height",!0)}),e.conversion.for("dataDowncast").add(s=>{r(s,"width","width",!1),r(s,"height","height",!1)})}}class Sp extends at{constructor(t,e){super(t),this._modelElementName=e}refresh(){const t=this.editor.plugins.get("ImageUtils"),e=t.getClosestSelectedImageElement(this.editor.model.document.selection);this._modelElementName==="imageBlock"?this.isEnabled=t.isInlineImage(e):this.isEnabled=t.isBlockImage(e)}execute(t={}){const e=this.editor,n=this.editor.model,i=e.plugins.get("ImageUtils"),r=i.getClosestSelectedImageElement(n.document.selection),s=Object.fromEntries(r.getAttributes());return s.src||s.uploadId?n.change(a=>{const{setImageSizes:c=!0}=t,l=Array.from(n.markers).filter(u=>u.getRange().containsItem(r)),d=i.insertImage(s,n.createSelection(r,"on"),this._modelElementName,{setImageSizes:c});if(!d)return null;const h=a.createRangeOn(d);for(const u of l){const g=u.getRange(),p=g.root.rootName!="$graveyard"?g.getJoined(h,!0):h;a.updateMarker(u,{range:p})}return{oldElement:r,newElement:d}}):null}}var Tp=N(9684),yy={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Tp.c,yy),Tp.c.locals;class Mp extends R{static get requires(){return[le]}static get pluginName(){return"ImagePlaceholder"}afterInit(){this._setupSchema(),this._setupConversion(),this._setupLoadListener()}_setupSchema(){const t=this.editor.model.schema;t.isRegistered("imageBlock")&&t.extend("imageBlock",{allowAttributes:["placeholder"]}),t.isRegistered("imageInline")&&t.extend("imageInline",{allowAttributes:["placeholder"]})}_setupConversion(){const t=this.editor,e=t.conversion,n=t.plugins.get("ImageUtils");e.for("editingDowncast").add(i=>{i.on("attribute:placeholder",(r,s,a)=>{if(!a.consumable.test(s.item,r.name)||!s.item.is("element","imageBlock")&&!s.item.is("element","imageInline"))return;a.consumable.consume(s.item,r.name);const c=a.writer,l=a.mapper.toViewElement(s.item),d=n.findViewImgElement(l);s.attributeNewValue?(c.addClass("image_placeholder",d),c.setStyle("background-image",`url(${s.attributeNewValue})`,d),c.setCustomProperty("editingPipeline:doNotReuseOnce",!0,d)):(c.removeClass("image_placeholder",d),c.removeStyle("background-image",d))})})}_setupLoadListener(){const t=this.editor,e=t.model,n=t.editing,i=n.view,r=t.plugins.get("ImageUtils");i.addObserver(xp),this.listenTo(i.document,"imageLoaded",(s,a)=>{const c=i.domConverter.mapDomToView(a.target);if(!c)return;const l=r.getImageWidgetFromImageView(c);if(!l)return;const d=n.mapper.toModelElement(l);d&&d.hasAttribute("placeholder")&&e.enqueueChange({isUndoable:!1},h=>{h.removeAttribute("placeholder",d)})})}}class Bp extends R{static get requires(){return[ba,Ip,le,Mp,Re]}static get pluginName(){return"ImageBlockEditing"}init(){const t=this.editor;t.model.schema.register("imageBlock",{inheritAllFrom:"$blockObject",allowAttributes:["alt","src","srcset"]}),this._setupConversion(),t.plugins.has("ImageInlineEditing")&&(t.commands.add("imageTypeBlock",new Sp(this.editor,"imageBlock")),this._setupClipboardIntegration())}_setupConversion(){const t=this.editor,e=t.t,n=t.conversion,i=t.plugins.get("ImageUtils");n.for("dataDowncast").elementToStructure({model:"imageBlock",view:(r,{writer:s})=>gp(s)}),n.for("editingDowncast").elementToStructure({model:"imageBlock",view:(r,{writer:s})=>i.toImageWidget(gp(s),s,e("image widget"))}),n.for("downcast").add(wr(i,"imageBlock","src")).add(wr(i,"imageBlock","alt")).add(yp(i,"imageBlock")),n.for("upcast").elementToElement({view:pp(t,"imageBlock"),model:(r,{writer:s})=>s.createElement("imageBlock",r.hasAttribute("src")?{src:r.getAttribute("src")}:void 0)}).add(function(r){const s=(a,c,l)=>{if(!l.consumable.test(c.viewItem,{name:!0,classes:"image"}))return;const d=r.findViewImgElement(c.viewItem);if(!d||!l.consumable.test(d,{name:!0}))return;l.consumable.consume(c.viewItem,{name:!0,classes:"image"});const h=Wt(l.convertItem(d,c.modelCursor).modelRange.getItems());h?(l.convertChildren(c.viewItem,h),l.updateConversionResult(h,c)):l.consumable.revert(c.viewItem,{name:!0,classes:"image"})};return a=>{a.on("element:figure",s)}}(i))}_setupClipboardIntegration(){const t=this.editor,e=t.model,n=t.editing.view,i=t.plugins.get("ImageUtils"),r=t.plugins.get("ClipboardPipeline");this.listenTo(r,"inputTransformation",(s,a)=>{const c=Array.from(a.content.getChildren());let l;if(!c.every(i.isInlineImageView))return;l=a.targetRanges?t.editing.mapper.toModelRange(a.targetRanges[0]):e.document.selection.getFirstRange();const d=e.createSelection(l);if(ka(e.schema,d)==="imageBlock"){const h=new on(n.document),u=c.map(g=>h.createElement("figure",{class:"image"},g));a.content=h.createDocumentFragment(u)}}),this.listenTo(r,"contentInsertion",(s,a)=>{a.method==="paste"&&e.change(c=>{const l=c.createRangeIn(a.content);for(const d of l.getItems())d.is("element","imageBlock")&&i.setImageNaturalSizeAttributes(d)})})}}var Np=N(3756),xy={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Np.c,xy),Np.c.locals;class Ey extends tt{constructor(t,e=[]){super(t),this.focusTracker=new Qt,this.keystrokes=new ie,this._focusables=new Ce,this.children=this.createCollection(),this._focusCycler=new _e({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});for(const n of e)this.children.add(n),this._focusables.add(n),n instanceof mw&&this._focusables.addMany(n.children);if(this._focusables.length>1)for(const n of this._focusables)Dy(n)&&(n.focusCycler.on("forwardCycle",i=>{this._focusCycler.focusNext(),i.stop()}),n.focusCycler.on("backwardCycle",i=>{this._focusCycler.focusPrevious(),i.stop()}));this.setTemplate({tag:"form",attributes:{class:["ck","ck-image-insert-form"],tabindex:-1},children:this.children})}render(){super.render(),m({view:this});for(const e of this._focusables)this.focusTracker.add(e.element);this.keystrokes.listenTo(this.element);const t=e=>e.stopPropagation();this.keystrokes.set("arrowright",t),this.keystrokes.set("arrowleft",t),this.keystrokes.set("arrowup",t),this.keystrokes.set("arrowdown",t)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}}function Dy(o){return"focusCycler"in o}class Pp extends R{constructor(t){super(t),this._integrations=new Map,t.config.define("image.insert.integrations",["upload","assetManager","url"])}static get pluginName(){return"ImageInsertUI"}static get requires(){return[le]}init(){const t=this.editor,e=t.model.document.selection,n=t.plugins.get("ImageUtils");this.set("isImageSelected",!1),this.listenTo(t.model.document,"change",()=>{this.isImageSelected=n.isImage(e.getSelectedElement())});const i=r=>this._createToolbarComponent(r);t.ui.componentFactory.add("insertImage",i),t.ui.componentFactory.add("imageInsert",i)}registerIntegration({name:t,observable:e,buttonViewCreator:n,formViewCreator:i,requiresForm:r}){this._integrations.has(t)&&Y("image-insert-integration-exists",{name:t}),this._integrations.set(t,{observable:e,buttonViewCreator:n,formViewCreator:i,requiresForm:!!r})}_createToolbarComponent(t){const e=this.editor,n=t.t,i=this._prepareIntegrations();if(!i.length)return null;let r;const s=i[0];if(i.length==1){if(!s.requiresForm)return s.buttonViewCreator(!0);r=s.buttonViewCreator(!0)}else{const l=s.buttonViewCreator(!1);r=new tr(t,l),r.tooltip=!0,r.bind("label").to(this,"isImageSelected",d=>n(d?"Replace image":"Insert image"))}const a=this.dropdownView=rn(t,r),c=i.map(({observable:l})=>l);return a.bind("isEnabled").toMany(c,"isEnabled",(...l)=>l.some(d=>d)),a.once("change:isOpen",()=>{const l=i.map(({formViewCreator:h})=>h(i.length==1)),d=new Ey(e.locale,l);a.panelView.children.add(d)}),a}_prepareIntegrations(){const t=this.editor.config.get("image.insert.integrations"),e=[];if(!t.length)return Y("image-insert-integrations-not-specified"),e;for(const n of t)this._integrations.has(n)?e.push(this._integrations.get(n)):["upload","assetManager","url"].includes(n)||Y("image-insert-unknown-integration",{item:n});return e.length||Y("image-insert-integrations-not-registered"),e}}var Lp=N(1220),Iy={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Lp.c,Iy),Lp.c.locals;class Sy extends R{static get requires(){return[Bp,li,vp,Pp]}static get pluginName(){return"ImageBlock"}}class Ty extends R{static get requires(){return[ba,Ip,le,Mp,Re]}static get pluginName(){return"ImageInlineEditing"}init(){const t=this.editor,e=t.model.schema;e.register("imageInline",{inheritAllFrom:"$inlineObject",allowAttributes:["alt","src","srcset"]}),e.addChildCheck((n,i)=>{if(n.endsWith("caption")&&i.name==="imageInline")return!1}),this._setupConversion(),t.plugins.has("ImageBlockEditing")&&(t.commands.add("imageTypeInline",new Sp(this.editor,"imageInline")),this._setupClipboardIntegration())}_setupConversion(){const t=this.editor,e=t.t,n=t.conversion,i=t.plugins.get("ImageUtils");n.for("dataDowncast").elementToElement({model:"imageInline",view:(r,{writer:s})=>s.createEmptyElement("img")}),n.for("editingDowncast").elementToStructure({model:"imageInline",view:(r,{writer:s})=>i.toImageWidget(function(a){return a.createContainerElement("span",{class:"image-inline"},a.createEmptyElement("img"))}(s),s,e("image widget"))}),n.for("downcast").add(wr(i,"imageInline","src")).add(wr(i,"imageInline","alt")).add(yp(i,"imageInline")),n.for("upcast").elementToElement({view:pp(t,"imageInline"),model:(r,{writer:s})=>s.createElement("imageInline",r.hasAttribute("src")?{src:r.getAttribute("src")}:void 0)})}_setupClipboardIntegration(){const t=this.editor,e=t.model,n=t.editing.view,i=t.plugins.get("ImageUtils"),r=t.plugins.get("ClipboardPipeline");this.listenTo(r,"inputTransformation",(s,a)=>{const c=Array.from(a.content.getChildren());let l;if(!c.every(i.isBlockImageView))return;l=a.targetRanges?t.editing.mapper.toModelRange(a.targetRanges[0]):e.document.selection.getFirstRange();const d=e.createSelection(l);if(ka(e.schema,d)==="imageInline"){const h=new on(n.document),u=c.map(g=>g.childCount===1?(Array.from(g.getAttributes()).forEach(p=>h.setAttribute(...p,i.findViewImgElement(g))),g.getChild(0)):g);a.content=h.createDocumentFragment(u)}}),this.listenTo(r,"contentInsertion",(s,a)=>{a.method==="paste"&&e.change(c=>{const l=c.createRangeIn(a.content);for(const d of l.getItems())d.is("element","imageInline")&&i.setImageNaturalSizeAttributes(d)})})}}class My extends R{static get requires(){return[Ty,li,vp,Pp]}static get pluginName(){return"ImageInline"}}class Op extends R{static get pluginName(){return"ImageCaptionUtils"}static get requires(){return[le]}getCaptionFromImageModelElement(t){for(const e of t.getChildren())if(e&&e.is("element","caption"))return e;return null}getCaptionFromModelSelection(t){const e=this.editor.plugins.get("ImageUtils"),n=t.getFirstPosition().findAncestor("caption");return n&&e.isBlockImage(n.parent)?n:null}matchImageCaptionViewElement(t){const e=this.editor.plugins.get("ImageUtils");return t.name=="figcaption"&&e.isBlockImageView(t.parent)?{name:!0}:null}}class By extends at{refresh(){const t=this.editor,e=t.plugins.get("ImageCaptionUtils"),n=t.plugins.get("ImageUtils");if(!t.plugins.has(Bp))return this.isEnabled=!1,void(this.value=!1);const i=t.model.document.selection,r=i.getSelectedElement();if(!r){const s=e.getCaptionFromModelSelection(i);return this.isEnabled=!!s,void(this.value=!!s)}this.isEnabled=n.isImage(r),this.isEnabled?this.value=!!e.getCaptionFromImageModelElement(r):this.value=!1}execute(t={}){const{focusCaptionOnShow:e}=t;this.editor.model.change(n=>{this.value?this._hideImageCaption(n):this._showImageCaption(n,e)})}_showImageCaption(t,e){const n=this.editor.model.document.selection,i=this.editor.plugins.get("ImageCaptionEditing"),r=this.editor.plugins.get("ImageUtils");let s=n.getSelectedElement();const a=i._getSavedCaption(s);r.isInlineImage(s)&&(this.editor.execute("imageTypeBlock"),s=n.getSelectedElement());const c=a||t.createElement("caption");t.append(c,s),e&&t.setSelection(c,"in")}_hideImageCaption(t){const e=this.editor,n=e.model.document.selection,i=e.plugins.get("ImageCaptionEditing"),r=e.plugins.get("ImageCaptionUtils");let s,a=n.getSelectedElement();a?s=r.getCaptionFromImageModelElement(a):(s=r.getCaptionFromModelSelection(n),a=s.parent),i._saveCaption(a,s),t.setSelection(a,"on"),t.remove(s)}}class Ny extends R{constructor(t){super(t),this._savedCaptionsMap=new WeakMap}static get requires(){return[le,Op]}static get pluginName(){return"ImageCaptionEditing"}init(){const t=this.editor,e=t.model.schema;e.isRegistered("caption")?e.extend("caption",{allowIn:"imageBlock"}):e.register("caption",{allowIn:"imageBlock",allowContentOf:"$block",isLimit:!0}),t.commands.add("toggleImageCaption",new By(this.editor)),this._setupConversion(),this._setupImageTypeCommandsIntegration(),this._registerCaptionReconversion()}_setupConversion(){const t=this.editor,e=t.editing.view,n=t.plugins.get("ImageUtils"),i=t.plugins.get("ImageCaptionUtils"),r=t.t;t.conversion.for("upcast").elementToElement({view:s=>i.matchImageCaptionViewElement(s),model:"caption"}),t.conversion.for("dataDowncast").elementToElement({model:"caption",view:(s,{writer:a})=>n.isBlockImage(s.parent)?a.createContainerElement("figcaption"):null}),t.conversion.for("editingDowncast").elementToElement({model:"caption",view:(s,{writer:a})=>{if(!n.isBlockImage(s.parent))return null;const c=a.createEditableElement("figcaption");a.setCustomProperty("imageCaption",!0,c),c.placeholder=r("Enter image caption"),Fl({view:e,element:c,keepOnFocus:!0});const l=s.parent.getAttribute("alt");return pg(c,a,{label:l?r("Caption for image: %0",[l]):r("Caption for the image")})}})}_setupImageTypeCommandsIntegration(){const t=this.editor,e=t.plugins.get("ImageUtils"),n=t.plugins.get("ImageCaptionUtils"),i=t.commands.get("imageTypeInline"),r=t.commands.get("imageTypeBlock"),s=a=>{if(!a.return)return;const{oldElement:c,newElement:l}=a.return;if(!c)return;if(e.isBlockImage(c)){const h=n.getCaptionFromImageModelElement(c);if(h)return void this._saveCaption(l,h)}const d=this._getSavedCaption(c);d&&this._saveCaption(l,d)};i&&this.listenTo(i,"execute",s,{priority:"low"}),r&&this.listenTo(r,"execute",s,{priority:"low"})}_getSavedCaption(t){const e=this._savedCaptionsMap.get(t);return e?Ct.fromJSON(e):null}_saveCaption(t,e){this._savedCaptionsMap.set(t,e.toJSON())}_registerCaptionReconversion(){const t=this.editor,e=t.model,n=t.plugins.get("ImageUtils"),i=t.plugins.get("ImageCaptionUtils");e.document.on("change:data",()=>{const r=e.document.differ.getChanges();for(const s of r){if(s.attributeKey!=="alt")continue;const a=s.range.start.nodeAfter;if(n.isBlockImage(a)){const c=i.getCaptionFromImageModelElement(a);if(!c)return;t.editing.reconvertItem(c)}}})}}class Py extends R{static get requires(){return[Op]}static get pluginName(){return"ImageCaptionUI"}init(){const t=this.editor,e=t.editing.view,n=t.plugins.get("ImageCaptionUtils"),i=t.t;t.ui.componentFactory.add("toggleImageCaption",r=>{const s=t.commands.get("toggleImageCaption"),a=new wt(r);return a.set({icon:ot.caption,tooltip:!0,isToggleable:!0}),a.bind("isOn","isEnabled").to(s,"value","isEnabled"),a.bind("label").to(s,"value",c=>i(c?"Toggle caption off":"Toggle caption on")),this.listenTo(a,"execute",()=>{t.execute("toggleImageCaption",{focusCaptionOnShow:!0});const c=n.getCaptionFromModelSelection(t.model.document.selection);if(c){const l=t.editing.mapper.toViewElement(c);e.scrollToTheSelection(),e.change(d=>{d.addClass("image__caption_highlighted",l)})}t.editing.view.focus()}),a})}}var zp=N(6816),Ly={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(zp.c,Ly),zp.c.locals;function Rp(o){const t=o.map(e=>e.replace("+","\\+"));return new RegExp(`^image\\/(${t.join("|")})$`)}function Oy(o){return new Promise((t,e)=>{const n=o.getAttribute("src");fetch(n).then(i=>i.blob()).then(i=>{const r=jp(i,n),s=r.replace("image/",""),a=new File([i],`image.${s}`,{type:r});t(a)}).catch(i=>i&&i.name==="TypeError"?function(r){return function(s){return new Promise((a,c)=>{const l=$.document.createElement("img");l.addEventListener("load",()=>{const d=$.document.createElement("canvas");d.width=l.width,d.height=l.height,d.getContext("2d").drawImage(l,0,0),d.toBlob(h=>h?a(h):c())}),l.addEventListener("error",()=>c()),l.src=s})}(r).then(s=>{const a=jp(s,r),c=a.replace("image/","");return new File([s],`image.${c}`,{type:a})})}(n).then(t).catch(e):e(i))})}function jp(o,t){return o.type?o.type:t.match(/data:(image\/\w+);base64/)?t.match(/data:(image\/\w+);base64/)[1].toLowerCase():"image/jpeg"}class zy extends R{static get pluginName(){return"ImageUploadUI"}init(){const t=this.editor,e=t.t,n=i=>{const r=new f1(i),s=t.commands.get("uploadImage"),a=t.config.get("image.upload.types"),c=Rp(a);return r.set({acceptedType:a.map(l=>`image/${l}`).join(","),allowMultipleFiles:!0,label:e("Upload image from computer"),icon:ot.imageUpload,tooltip:!0}),r.bind("isEnabled").to(s),r.on("done",(l,d)=>{const h=Array.from(d).filter(u=>c.test(u.type));h.length&&(t.execute("uploadImage",{file:h}),t.editing.view.focus())}),r};if(t.ui.componentFactory.add("uploadImage",n),t.ui.componentFactory.add("imageUpload",n),t.plugins.has("ImageInsertUI")){const i=t.plugins.get("ImageInsertUI"),r=t.commands.get("uploadImage");i.registerIntegration({name:"upload",observable:r,buttonViewCreator:()=>{const s=t.ui.componentFactory.create("uploadImage");return s.bind("label").to(i,"isImageSelected",a=>e(a?"Replace image from computer":"Upload image from computer")),s},formViewCreator:()=>{const s=t.ui.componentFactory.create("uploadImage");return s.withText=!0,s.bind("label").to(i,"isImageSelected",a=>e(a?"Replace from computer":"Upload from computer")),s.on("execute",()=>{i.dropdownView.isOpen=!1}),s}})}}}var Fp=N(2628),Ry={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Fp.c,Ry),Fp.c.locals;var Vp=N(1652),jy={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Vp.c,jy),Vp.c.locals;var Hp=N(4164),Fy={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Hp.c,Fy),Hp.c.locals;class Vy extends R{constructor(t){super(t),this.uploadStatusChange=(e,n,i)=>{const r=this.editor,s=n.item,a=s.getAttribute("uploadId");if(!i.consumable.consume(n.item,e.name))return;const c=r.plugins.get("ImageUtils"),l=r.plugins.get(je),d=a?n.attributeNewValue:null,h=this.placeholder,u=r.editing.mapper.toViewElement(s),g=i.writer;if(d=="reading")return Up(u,g),void qp(c,h,u,g);if(d=="uploading"){const p=l.loaders.get(a);return Up(u,g),void(p?(Gp(u,g),function(k,b,A,E){const M=function(z){const G=z.createUIElement("div",{class:"ck-progress-bar"});return z.setCustomProperty("progressBar",!0,G),G}(b);b.insert(b.createPositionAt(k,"end"),M),A.on("change:uploadedPercent",(z,G,et)=>{E.change(st=>{st.setStyle("width",et+"%",M)})})}(u,g,p,r.editing.view),function(k,b,A,E){if(E.data){const M=k.findViewImgElement(b);A.setAttribute("src",E.data,M)}}(c,u,g,p)):qp(c,h,u,g))}d=="complete"&&l.loaders.get(a)&&function(p,k,b){const A=k.createUIElement("div",{class:"ck-image-upload-complete-icon"});k.insert(k.createPositionAt(p,"end"),A),setTimeout(()=>{b.change(E=>E.remove(E.createRangeOn(A)))},3e3)}(u,g,r.editing.view),function(p,k){$p(p,k,"progressBar")}(u,g),Gp(u,g),function(p,k){k.removeClass("ck-appear",p)}(u,g)},this.placeholder="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="}static get pluginName(){return"ImageUploadProgress"}init(){const t=this.editor;t.plugins.has("ImageBlockEditing")&&t.editing.downcastDispatcher.on("attribute:uploadStatus:imageBlock",this.uploadStatusChange),t.plugins.has("ImageInlineEditing")&&t.editing.downcastDispatcher.on("attribute:uploadStatus:imageInline",this.uploadStatusChange)}}function Up(o,t){o.hasClass("ck-appear")||t.addClass("ck-appear",o)}function qp(o,t,e,n){e.hasClass("ck-image-upload-placeholder")||n.addClass("ck-image-upload-placeholder",e);const i=o.findViewImgElement(e);i.getAttribute("src")!==t&&n.setAttribute("src",t,i),Wp(e,"placeholder")||n.insert(n.createPositionAfter(i),function(r){const s=r.createUIElement("div",{class:"ck-upload-placeholder-loader"});return r.setCustomProperty("placeholder",!0,s),s}(n))}function Gp(o,t){o.hasClass("ck-image-upload-placeholder")&&t.removeClass("ck-image-upload-placeholder",o),$p(o,t,"placeholder")}function Wp(o,t){for(const e of o.getChildren())if(e.getCustomProperty(t))return e}function $p(o,t,e){const n=Wp(o,e);n&&t.remove(t.createRangeOn(n))}var Hy=Object.defineProperty,Uy=Object.defineProperties,qy=Object.getOwnPropertyDescriptors,Kp=Object.getOwnPropertySymbols,Gy=Object.prototype.hasOwnProperty,Wy=Object.prototype.propertyIsEnumerable,Yp=(o,t,e)=>t in o?Hy(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;class $y extends at{refresh(){const t=this.editor,e=t.plugins.get("ImageUtils"),n=t.model.document.selection.getSelectedElement();this.isEnabled=e.isImageAllowed()||e.isImage(n)}execute(t){const e=Bt(t.file),n=this.editor.model.document.selection,i=this.editor.plugins.get("ImageUtils"),r=Object.fromEntries(n.getAttributes());e.forEach((s,a)=>{const c=n.getSelectedElement();if(a&&c&&i.isImage(c)){const l=this.editor.model.createPositionAfter(c);this._uploadImage(s,r,l)}else this._uploadImage(s,r)})}_uploadImage(t,e,n){const i=this.editor,r=i.plugins.get(je).createLoader(t),s=i.plugins.get("ImageUtils");var a,c;r&&s.insertImage((a=((l,d)=>{for(var h in d||(d={}))Gy.call(d,h)&&Yp(l,h,d[h]);if(Kp)for(var h of Kp(d))Wy.call(d,h)&&Yp(l,h,d[h]);return l})({},e),c={uploadId:r.id},Uy(a,qy(c))),n)}}class Ky extends R{constructor(t){super(t),t.config.define("image",{upload:{types:["jpeg","png","gif","bmp","webp","tiff"]}}),this._uploadImageElements=new Map}static get requires(){return[je,ea,Re,le]}static get pluginName(){return"ImageUploadEditing"}init(){const t=this.editor,e=t.model.document,n=t.conversion,i=t.plugins.get(je),r=t.plugins.get("ImageUtils"),s=t.plugins.get("ClipboardPipeline"),a=Rp(t.config.get("image.upload.types")),c=new $y(t);t.commands.add("uploadImage",c),t.commands.add("imageUpload",c),n.for("upcast").attributeToAttribute({view:{name:"img",key:"uploadId"},model:"uploadId"}),this.listenTo(t.editing.view.document,"clipboardInput",(l,d)=>{if(h=d.dataTransfer,Array.from(h.types).includes("text/html")&&h.getData("text/html")!=="")return;var h;const u=Array.from(d.dataTransfer.files).filter(g=>!!g&&a.test(g.type));u.length&&(l.stop(),t.model.change(g=>{d.targetRanges&&g.setSelection(d.targetRanges.map(p=>t.editing.mapper.toModelRange(p))),t.execute("uploadImage",{file:u})}))}),this.listenTo(s,"inputTransformation",(l,d)=>{const h=Array.from(t.editing.view.createRangeIn(d.content)).map(g=>g.item).filter(g=>function(p,k){return!(!p.isInlineImageView(k)||!k.getAttribute("src")||!k.getAttribute("src").match(/^data:image\/\w+;base64,/g)&&!k.getAttribute("src").match(/^blob:/g))}(r,g)&&!g.getAttribute("uploadProcessed")).map(g=>({promise:Oy(g),imageElement:g}));if(!h.length)return;const u=new on(t.editing.view.document);for(const g of h){u.setAttribute("uploadProcessed",!0,g.imageElement);const p=i.createLoader(g.promise);p&&(u.setAttribute("src","",g.imageElement),u.setAttribute("uploadId",p.id,g.imageElement))}}),t.editing.view.document.on("dragover",(l,d)=>{d.preventDefault()}),e.on("change",()=>{const l=e.differ.getChanges({includeChangesInGraveyard:!0}).reverse(),d=new Set;for(const h of l)if(h.type=="insert"&&h.name!="$text"){const u=h.position.nodeAfter,g=h.position.root.rootName=="$graveyard";for(const p of Yy(t,u)){const k=p.getAttribute("uploadId");if(!k)continue;const b=i.loaders.get(k);b&&(g?d.has(k)||b.abort():(d.add(k),this._uploadImageElements.set(k,p),b.status=="idle"&&this._readAndUpload(b)))}}}),this.on("uploadComplete",(l,{imageElement:d,data:h})=>{const u=h.urls?h.urls:h;this.editor.model.change(g=>{g.setAttribute("src",u.default,d),this._parseAndSetSrcsetAttributeOnImage(u,d,g),r.setImageNaturalSizeAttributes(d)})},{priority:"low"})}afterInit(){const t=this.editor.model.schema;this.editor.plugins.has("ImageBlockEditing")&&t.extend("imageBlock",{allowAttributes:["uploadId","uploadStatus"]}),this.editor.plugins.has("ImageInlineEditing")&&t.extend("imageInline",{allowAttributes:["uploadId","uploadStatus"]})}_readAndUpload(t){const e=this.editor,n=e.model,i=e.locale.t,r=e.plugins.get(je),s=e.plugins.get(ea),a=e.plugins.get("ImageUtils"),c=this._uploadImageElements;return n.enqueueChange({isUndoable:!1},d=>{d.setAttribute("uploadStatus","reading",c.get(t.id))}),t.read().then(()=>{const d=t.upload(),h=c.get(t.id);if(f.isSafari){const u=e.editing.mapper.toViewElement(h),g=a.findViewImgElement(u);e.editing.view.once("render",()=>{if(!g.parent)return;const p=e.editing.view.domConverter.mapViewToDom(g.parent);if(!p)return;const k=p.style.display;p.style.display="none",p._ckHack=p.offsetHeight,p.style.display=k})}return n.enqueueChange({isUndoable:!1},u=>{u.setAttribute("uploadStatus","uploading",h)}),d}).then(d=>{n.enqueueChange({isUndoable:!1},h=>{const u=c.get(t.id);h.setAttribute("uploadStatus","complete",u),this.fire("uploadComplete",{data:d,imageElement:u})}),l()}).catch(d=>{if(t.status!=="error"&&t.status!=="aborted")throw d;t.status=="error"&&d&&s.showWarning(d,{title:i("Upload failed"),namespace:"upload"}),n.enqueueChange({isUndoable:!1},h=>{h.remove(c.get(t.id))}),l()});function l(){n.enqueueChange({isUndoable:!1},d=>{const h=c.get(t.id);d.removeAttribute("uploadId",h),d.removeAttribute("uploadStatus",h),c.delete(t.id)}),r.destroyLoader(t)}}_parseAndSetSrcsetAttributeOnImage(t,e,n){let i=0;const r=Object.keys(t).filter(s=>{const a=parseInt(s,10);if(!isNaN(a))return i=Math.max(i,a),!0}).map(s=>`${t[s]} ${s}w`).join(", ");if(r!=""){const s={srcset:r};e.hasAttribute("width")||e.hasAttribute("height")||(s.width=i),n.setAttributes(s,e)}}}function Yy(o,t){const e=o.plugins.get("ImageUtils");return Array.from(o.model.createRangeOn(t)).filter(n=>e.isImage(n.item)).map(n=>n.item)}var Qp=N(2876),Qy={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Qp.c,Qy),Qp.c.locals;class Zy extends at{constructor(t,e){super(t),this._defaultStyles={imageBlock:!1,imageInline:!1},this._styles=new Map(e.map(n=>{if(n.isDefault)for(const i of n.modelElements)this._defaultStyles[i]=n.name;return[n.name,n]}))}refresh(){const t=this.editor.plugins.get("ImageUtils").getClosestSelectedImageElement(this.editor.model.document.selection);this.isEnabled=!!t,this.isEnabled?t.hasAttribute("imageStyle")?this.value=t.getAttribute("imageStyle"):this.value=this._defaultStyles[t.name]:this.value=!1}execute(t={}){const e=this.editor,n=e.model,i=e.plugins.get("ImageUtils");n.change(r=>{const s=t.value,{setImageSizes:a=!0}=t;let c=i.getClosestSelectedImageElement(n.document.selection);s&&this.shouldConvertImageType(s,c)&&(this.editor.execute(i.isBlockImage(c)?"imageTypeInline":"imageTypeBlock",{setImageSizes:a}),c=i.getClosestSelectedImageElement(n.document.selection)),!s||this._styles.get(s).isDefault?r.removeAttribute("imageStyle",c):r.setAttribute("imageStyle",s,c),a&&i.setImageNaturalSizeAttributes(c)})}shouldConvertImageType(t,e){return!this._styles.get(t).modelElements.includes(e.name)}}var Jy=Object.defineProperty,Zp=Object.getOwnPropertySymbols,Xy=Object.prototype.hasOwnProperty,tx=Object.prototype.propertyIsEnumerable,Jp=(o,t,e)=>t in o?Jy(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Xp=(o,t)=>{for(var e in t||(t={}))Xy.call(t,e)&&Jp(o,e,t[e]);if(Zp)for(var e of Zp(t))tx.call(t,e)&&Jp(o,e,t[e]);return o};const{objectFullWidth:ex,objectInline:tm,objectLeft:em,objectRight:wa,objectCenter:Aa,objectBlockLeft:nm,objectBlockRight:om}=ot,Cr={get inline(){return{name:"inline",title:"In line",icon:tm,modelElements:["imageInline"],isDefault:!0}},get alignLeft(){return{name:"alignLeft",title:"Left aligned image",icon:em,modelElements:["imageBlock","imageInline"],className:"image-style-align-left"}},get alignBlockLeft(){return{name:"alignBlockLeft",title:"Left aligned image",icon:nm,modelElements:["imageBlock"],className:"image-style-block-align-left"}},get alignCenter(){return{name:"alignCenter",title:"Centered image",icon:Aa,modelElements:["imageBlock"],className:"image-style-align-center"}},get alignRight(){return{name:"alignRight",title:"Right aligned image",icon:wa,modelElements:["imageBlock","imageInline"],className:"image-style-align-right"}},get alignBlockRight(){return{name:"alignBlockRight",title:"Right aligned image",icon:om,modelElements:["imageBlock"],className:"image-style-block-align-right"}},get block(){return{name:"block",title:"Centered image",icon:Aa,modelElements:["imageBlock"],isDefault:!0}},get side(){return{name:"side",title:"Side image",icon:wa,modelElements:["imageBlock"],className:"image-style-side"}}},im={full:ex,left:nm,right:om,center:Aa,inlineLeft:em,inlineRight:wa,inline:tm},rm=[{name:"imageStyle:wrapText",title:"Wrap text",defaultItem:"imageStyle:alignLeft",items:["imageStyle:alignLeft","imageStyle:alignRight"]},{name:"imageStyle:breakText",title:"Break text",defaultItem:"imageStyle:block",items:["imageStyle:alignBlockLeft","imageStyle:block","imageStyle:alignBlockRight"]}];function sm(o){Y("image-style-configuration-definition-invalid",o)}const Ca={normalizeStyles:function(o){return(o.configuredStyles.options||[]).map(t=>function(e){return e=typeof e=="string"?Cr[e]?Xp({},Cr[e]):{name:e}:function(n,i){const r=Xp({},i);for(const s in n)Object.prototype.hasOwnProperty.call(i,s)||(r[s]=n[s]);return r}(Cr[e.name],e),typeof e.icon=="string"&&(e.icon=im[e.icon]||e.icon),e}(t)).filter(t=>function(e,{isBlockPluginLoaded:n,isInlinePluginLoaded:i}){const{modelElements:r,name:s}=e;if(!(r&&r.length&&s))return sm({style:e}),!1;{const a=[n?"imageBlock":null,i?"imageInline":null];if(!r.some(c=>a.includes(c)))return Y("image-style-missing-dependency",{style:e,missingPlugins:r.map(c=>c==="imageBlock"?"ImageBlockEditing":"ImageInlineEditing")}),!1}return!0}(t,o))},getDefaultStylesConfiguration:function(o,t){return o&&t?{options:["inline","alignLeft","alignRight","alignCenter","alignBlockLeft","alignBlockRight","block","side"]}:o?{options:["block","side"]}:t?{options:["inline","alignLeft","alignRight"]}:{}},getDefaultDropdownDefinitions:function(o){return o.has("ImageBlockEditing")&&o.has("ImageInlineEditing")?[...rm]:[]},warnInvalidStyle:sm,DEFAULT_OPTIONS:Cr,DEFAULT_ICONS:im,DEFAULT_DROPDOWN_DEFINITIONS:rm};function am(o,t){for(const e of t)if(e.name===o)return e}class cm extends R{static get pluginName(){return"ImageStyleEditing"}static get requires(){return[le]}init(){const{normalizeStyles:t,getDefaultStylesConfiguration:e}=Ca,n=this.editor,i=n.plugins.has("ImageBlockEditing"),r=n.plugins.has("ImageInlineEditing");n.config.define("image.styles",e(i,r)),this.normalizedStyles=t({configuredStyles:n.config.get("image.styles"),isBlockPluginLoaded:i,isInlinePluginLoaded:r}),this._setupConversion(i,r),this._setupPostFixer(),n.commands.add("imageStyle",new Zy(n,this.normalizedStyles))}_setupConversion(t,e){const n=this.editor,i=n.model.schema,r=(s=this.normalizedStyles,(c,l,d)=>{if(!d.consumable.consume(l.item,c.name))return;const h=am(l.attributeNewValue,s),u=am(l.attributeOldValue,s),g=d.mapper.toViewElement(l.item),p=d.writer;u&&p.removeClass(u.className,g),h&&p.addClass(h.className,g)});var s;const a=function(c){const l={imageInline:c.filter(d=>!d.isDefault&&d.modelElements.includes("imageInline")),imageBlock:c.filter(d=>!d.isDefault&&d.modelElements.includes("imageBlock"))};return(d,h,u)=>{if(!h.modelRange)return;const g=h.viewItem,p=Wt(h.modelRange.getItems());if(p&&u.schema.checkAttribute(p,"imageStyle"))for(const k of l[p.name])u.consumable.consume(g,{classes:k.className})&&u.writer.setAttribute("imageStyle",k.name,p)}}(this.normalizedStyles);n.editing.downcastDispatcher.on("attribute:imageStyle",r),n.data.downcastDispatcher.on("attribute:imageStyle",r),t&&(i.extend("imageBlock",{allowAttributes:"imageStyle"}),n.data.upcastDispatcher.on("element:figure",a,{priority:"low"})),e&&(i.extend("imageInline",{allowAttributes:"imageStyle"}),n.data.upcastDispatcher.on("element:img",a,{priority:"low"}))}_setupPostFixer(){const t=this.editor,e=t.model.document,n=t.plugins.get(le),i=new Map(this.normalizedStyles.map(r=>[r.name,r]));e.registerPostFixer(r=>{let s=!1;for(const a of e.differ.getChanges())if(a.type=="insert"||a.type=="attribute"&&a.attributeKey=="imageStyle"){let c=a.type=="insert"?a.position.nodeAfter:a.range.start.nodeAfter;if(c&&c.is("element","paragraph")&&c.childCount>0&&(c=c.getChild(0)),!n.isImage(c))continue;const l=c.getAttribute("imageStyle");if(!l)continue;const d=i.get(l);d&&d.modelElements.includes(c.name)||(r.removeAttribute("imageStyle",c),s=!0)}return s})}}var lm=N(9216),nx={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(lm.c,nx),lm.c.locals;class ox extends R{static get requires(){return[cm]}static get pluginName(){return"ImageStyleUI"}get localizedDefaultStylesTitles(){const t=this.editor.t;return{"Wrap text":t("Wrap text"),"Break text":t("Break text"),"In line":t("In line"),"Full size image":t("Full size image"),"Side image":t("Side image"),"Left aligned image":t("Left aligned image"),"Centered image":t("Centered image"),"Right aligned image":t("Right aligned image")}}init(){const t=this.editor.plugins,e=this.editor.config.get("image.toolbar")||[],n=dm(t.get("ImageStyleEditing").normalizedStyles,this.localizedDefaultStylesTitles);for(const r of n)this._createButton(r);const i=dm([...e.filter(bt),...Ca.getDefaultDropdownDefinitions(t)],this.localizedDefaultStylesTitles);for(const r of i)this._createDropdown(r,n)}_createDropdown(t,e){const n=this.editor.ui.componentFactory;n.add(t.name,i=>{let r;const{defaultItem:s,items:a,title:c}=t,l=a.filter(g=>e.find(({name:p})=>hm(p)===g)).map(g=>{const p=n.create(g);return g===s&&(r=p),p});a.length!==l.length&&Ca.warnInvalidStyle({dropdown:t});const d=rn(i,tr),h=d.buttonView,u=h.arrowView;return Ks(d,l,{enableActiveItemFocusOnDropdownOpen:!0}),h.set({label:um(c,r.label),class:null,tooltip:!0}),u.unbind("label"),u.set({label:c}),h.bind("icon").toMany(l,"isOn",(...g)=>{const p=g.findIndex(Ln);return p<0?r.icon:l[p].icon}),h.bind("label").toMany(l,"isOn",(...g)=>{const p=g.findIndex(Ln);return um(c,p<0?r.label:l[p].label)}),h.bind("isOn").toMany(l,"isOn",(...g)=>g.some(Ln)),h.bind("class").toMany(l,"isOn",(...g)=>g.some(Ln)?"ck-splitbutton_flatten":void 0),h.on("execute",()=>{l.some(({isOn:g})=>g)?d.isOpen=!d.isOpen:r.fire("execute")}),d.bind("isEnabled").toMany(l,"isEnabled",(...g)=>g.some(Ln)),this.listenTo(d,"execute",()=>{this.editor.editing.view.focus()}),d})}_createButton(t){const e=t.name;this.editor.ui.componentFactory.add(hm(e),n=>{const i=this.editor.commands.get("imageStyle"),r=new wt(n);return r.set({label:t.title,icon:t.icon,tooltip:!0,isToggleable:!0}),r.bind("isEnabled").to(i,"isEnabled"),r.bind("isOn").to(i,"value",s=>s===e),r.on("execute",this._executeCommand.bind(this,e)),r})}_executeCommand(t){this.editor.execute("imageStyle",{value:t}),this.editor.editing.view.focus()}}function dm(o,t){for(const e of o)t[e.title]&&(e.title=t[e.title]);return o}function hm(o){return`imageStyle:${o}`}function um(o,t){return(o?o+": ":"")+t}class ix extends R{static get pluginName(){return"IndentEditing"}init(){const t=this.editor;t.commands.add("indent",new Ll(t)),t.commands.add("outdent",new Ll(t))}}class rx extends R{static get pluginName(){return"IndentUI"}init(){const t=this.editor,e=t.locale,n=t.t,i=e.uiLanguageDirection=="ltr"?ot.indent:ot.outdent,r=e.uiLanguageDirection=="ltr"?ot.outdent:ot.indent;this._defineButton("indent",n("Increase indent"),i),this._defineButton("outdent",n("Decrease indent"),r)}_defineButton(t,e,n){const i=this.editor;i.ui.componentFactory.add(t,r=>{const s=i.commands.get(t),a=new wt(r);return a.set({label:e,icon:n,tooltip:!0}),a.bind("isEnabled").to(s,"isEnabled"),this.listenTo(a,"execute",()=>{i.execute(t),i.editing.view.focus()}),a})}}class sx{constructor(){this._definitions=new Set}get length(){return this._definitions.size}add(t){Array.isArray(t)?t.forEach(e=>this._definitions.add(e)):this._definitions.add(t)}getDispatcher(){return t=>{t.on("attribute:linkHref",(e,n,i)=>{if(!i.consumable.test(n.item,"attribute:linkHref")||!n.item.is("selection")&&!i.schema.isInline(n.item))return;const r=i.writer,s=r.document.selection;for(const a of this._definitions){const c=r.createAttributeElement("a",a.attributes,{priority:5});a.classes&&r.addClass(a.classes,c);for(const l in a.styles)r.setStyle(l,a.styles[l],c);r.setCustomProperty("link",!0,c),a.callback(n.attributeNewValue)?n.item.is("selection")?r.wrap(s.getFirstRange(),c):r.wrap(i.mapper.toViewRange(n.range),c):r.unwrap(i.mapper.toViewRange(n.range),c)}},{priority:"high"})}}getDispatcherForLinkedImage(){return t=>{t.on("attribute:linkHref:imageBlock",(e,n,{writer:i,mapper:r})=>{const s=r.toViewElement(n.item),a=Array.from(s.getChildren()).find(c=>c.is("element","a"));for(const c of this._definitions){const l=We(c.attributes);if(c.callback(n.attributeNewValue)){for(const[d,h]of l)d==="class"?i.addClass(h,a):i.setAttribute(d,h,a);c.classes&&i.addClass(c.classes,a);for(const d in c.styles)i.setStyle(d,c.styles[d],a)}else{for(const[d,h]of l)d==="class"?i.removeClass(h,a):i.removeAttribute(d,a);c.classes&&i.removeClass(c.classes,a);for(const d in c.styles)i.removeStyle(d,a)}}})}}}const ax=function(o,t,e){var n=o.length;return e=e===void 0?n:e,!t&&e>=n?o:$l(o,t,e)};var cx=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");const gm=function(o){return cx.test(o)},lx=function(o){return o.split("")};var pm="\\ud800-\\udfff",dx="["+pm+"]",_a="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",va="\\ud83c[\\udffb-\\udfff]",mm="[^"+pm+"]",fm="(?:\\ud83c[\\udde6-\\uddff]){2}",km="[\\ud800-\\udbff][\\udc00-\\udfff]",bm="(?:"+_a+"|"+va+")?",wm="[\\ufe0e\\ufe0f]?",hx=wm+bm+("(?:\\u200d(?:"+[mm,fm,km].join("|")+")"+wm+bm+")*"),ux="(?:"+[mm+_a+"?",_a,fm,km,dx].join("|")+")",gx=RegExp(va+"(?="+va+")|"+ux+hx,"g");const px=function(o){return o.match(gx)||[]},mx=function(o){return gm(o)?px(o):lx(o)},fx=function(o){return function(t){t=ms(t);var e=gm(t)?mx(t):void 0,n=e?e[0]:t.charAt(0),i=e?ax(e,1).join(""):t.slice(1);return n[o]()+i}}("toUpperCase"),kx=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,bx=/^(?:(?:https?|ftps?|mailto):|[^a-z]|[a-z+.-]+(?:[^a-z+.:-]|$))/i,wx=/^[\S]+@((?![-_])(?:[-\w\u00a1-\uffff]{0,63}[^-_]\.))+(?:[a-z\u00a1-\uffff]{2,})$/i,Ax=/^((\w+:(\/{2,})?)|(\W))/i,ya="Ctrl+K";function Am(o,{writer:t}){const e=t.createAttributeElement("a",{href:o},{priority:5});return t.setCustomProperty("link",!0,e),e}function Cm(o){const t=String(o);return function(e){return!!e.replace(kx,"").match(bx)}(t)?t:"#"}function xa(o,t){return!!o&&t.checkAttribute(o.name,"linkHref")}function Ea(o,t){const e=(n=o,wx.test(n)?"mailto:":t);var n;const i=!!e&&!_m(o);return o&&i?e+o:o}function _m(o){return Ax.test(o)}function vm(o){window.open(o,"_blank","noopener")}class Cx extends at{constructor(){super(...arguments),this.manualDecorators=new Me,this.automaticDecorators=new sx}restoreManualDecoratorStates(){for(const t of this.manualDecorators)t.value=this._getDecoratorStateFromModel(t.id)}refresh(){const t=this.editor.model,e=t.document.selection,n=e.getSelectedElement()||Wt(e.getSelectedBlocks());xa(n,t.schema)?(this.value=n.getAttribute("linkHref"),this.isEnabled=t.schema.checkAttribute(n,"linkHref")):(this.value=e.getAttribute("linkHref"),this.isEnabled=t.schema.checkAttributeInSelection(e,"linkHref"));for(const i of this.manualDecorators)i.value=this._getDecoratorStateFromModel(i.id)}execute(t,e={}){const n=this.editor.model,i=n.document.selection,r=[],s=[];for(const a in e)e[a]?r.push(a):s.push(a);n.change(a=>{if(i.isCollapsed){const c=i.getFirstPosition();if(i.hasAttribute("linkHref")){const l=ym(i);let d=dr(c,"linkHref",i.getAttribute("linkHref"),n);i.getAttribute("linkHref")===l&&(d=this._updateLinkContent(n,a,d,t)),a.setAttribute("linkHref",t,d),r.forEach(h=>{a.setAttribute(h,!0,d)}),s.forEach(h=>{a.removeAttribute(h,d)}),a.setSelection(a.createPositionAfter(d.end.nodeBefore))}else if(t!==""){const l=We(i.getAttributes());l.set("linkHref",t),r.forEach(h=>{l.set(h,!0)});const{end:d}=n.insertContent(a.createText(t,l),c);a.setSelection(d)}["linkHref",...r,...s].forEach(l=>{a.removeSelectionAttribute(l)})}else{const c=n.schema.getValidRanges(i.getRanges(),"linkHref"),l=[];for(const h of i.getSelectedBlocks())n.schema.checkAttribute(h,"linkHref")&&l.push(a.createRangeOn(h));const d=l.slice();for(const h of c)this._isRangeToUpdate(h,l)&&d.push(h);for(const h of d){let u=h;if(d.length===1){const g=ym(i);i.getAttribute("linkHref")===g&&(u=this._updateLinkContent(n,a,h,t),a.setSelection(a.createSelection(u)))}a.setAttribute("linkHref",t,u),r.forEach(g=>{a.setAttribute(g,!0,u)}),s.forEach(g=>{a.removeAttribute(g,u)})}}})}_getDecoratorStateFromModel(t){const e=this.editor.model,n=e.document.selection,i=n.getSelectedElement();return xa(i,e.schema)?i.getAttribute(t):n.getAttribute(t)}_isRangeToUpdate(t,e){for(const n of e)if(n.containsRange(t))return!1;return!0}_updateLinkContent(t,e,n,i){const r=e.createText(i,{linkHref:i});return t.insertContent(r,n)}}function ym(o){if(o.isCollapsed){const t=o.getFirstPosition();return t.textNode&&t.textNode.data}{const t=Array.from(o.getFirstRange().getItems());if(t.length>1)return null;const e=t[0];return e.is("$text")||e.is("$textProxy")?e.data:null}}class _x extends at{refresh(){const t=this.editor.model,e=t.document.selection,n=e.getSelectedElement();xa(n,t.schema)?this.isEnabled=t.schema.checkAttribute(n,"linkHref"):this.isEnabled=t.schema.checkAttributeInSelection(e,"linkHref")}execute(){const t=this.editor,e=this.editor.model,n=e.document.selection,i=t.commands.get("link");e.change(r=>{const s=n.isCollapsed?[dr(n.getFirstPosition(),"linkHref",n.getAttribute("linkHref"),e)]:e.schema.getValidRanges(n.getRanges(),"linkHref");for(const a of s)if(r.removeAttribute("linkHref",a),i)for(const c of i.manualDecorators)r.removeAttribute(c.id,a)})}}class vx extends mt(){constructor({id:t,label:e,attributes:n,classes:i,styles:r,defaultValue:s}){super(),this.id=t,this.set("value",void 0),this.defaultValue=s,this.label=e,this.attributes=n,this.classes=i,this.styles=r}_createPattern(){return{attributes:this.attributes,classes:this.classes,styles:this.styles}}}var xm=N(8836),yx={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(xm.c,yx),xm.c.locals;var xx=Object.defineProperty,Em=Object.getOwnPropertySymbols,Ex=Object.prototype.hasOwnProperty,Dx=Object.prototype.propertyIsEnumerable,Dm=(o,t,e)=>t in o?xx(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Ix=(o,t)=>{for(var e in t||(t={}))Ex.call(t,e)&&Dm(o,e,t[e]);if(Em)for(var e of Em(t))Dx.call(t,e)&&Dm(o,e,t[e]);return o};const Im="automatic",Sx=/^(https?:)?\/\//;class Sm extends R{static get pluginName(){return"LinkEditing"}static get requires(){return[og,Qu,Re]}constructor(t){super(t),t.config.define("link",{allowCreatingEmptyLinks:!1,addTargetToExternalLinks:!1})}init(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:"linkHref"}),t.conversion.for("dataDowncast").attributeToElement({model:"linkHref",view:Am}),t.conversion.for("editingDowncast").attributeToElement({model:"linkHref",view:(n,i)=>Am(Cm(n),i)}),t.conversion.for("upcast").elementToAttribute({view:{name:"a",attributes:{href:!0}},model:{key:"linkHref",value:n=>n.getAttribute("href")}}),t.commands.add("link",new Cx(t)),t.commands.add("unlink",new _x(t));const e=function(n,i){const r={"Open in a new tab":n("Open in a new tab"),Downloadable:n("Downloadable")};return i.forEach(s=>("label"in s&&r[s.label]&&(s.label=r[s.label]),s)),i}(t.t,function(n){const i=[];if(n)for(const[r,s]of Object.entries(n)){const a=Object.assign({},s,{id:`link${fx(r)}`});i.push(a)}return i}(t.config.get("link.decorators")));this._enableAutomaticDecorators(e.filter(n=>n.mode===Im)),this._enableManualDecorators(e.filter(n=>n.mode==="manual")),t.plugins.get(og).registerAttribute("linkHref"),function(n,i,r,s){const a=n.editing.view,c=new Set;a.document.registerPostFixer(l=>{const d=n.model.document.selection;let h=!1;if(d.hasAttribute(i)){const u=dr(d.getFirstPosition(),i,d.getAttribute(i),n.model),g=n.editing.mapper.toViewRange(u);for(const p of g.getItems())p.is("element",r)&&!p.hasClass(s)&&(l.addClass(s,p),c.add(p),h=!0)}return h}),n.conversion.for("editingDowncast").add(l=>{function d(){a.change(h=>{for(const u of c.values())h.removeClass(s,u),c.delete(u)})}l.on("insert",d,{priority:"highest"}),l.on("remove",d,{priority:"highest"}),l.on("attribute",d,{priority:"highest"}),l.on("selection",d,{priority:"highest"})})}(t,"linkHref","a","ck-link_selected"),this._enableLinkOpen(),this._enableSelectionAttributesFixer(),this._enableClipboardIntegration()}_enableAutomaticDecorators(t){const e=this.editor,n=e.commands.get("link").automaticDecorators;e.config.get("link.addTargetToExternalLinks")&&n.add({id:"linkIsExternal",mode:Im,callback:i=>!!i&&Sx.test(i),attributes:{target:"_blank",rel:"noopener noreferrer"}}),n.add(t),n.length&&e.conversion.for("downcast").add(n.getDispatcher())}_enableManualDecorators(t){if(!t.length)return;const e=this.editor,n=e.commands.get("link").manualDecorators;t.forEach(i=>{e.model.schema.extend("$text",{allowAttributes:i.id});const r=new vx(i);n.add(r),e.conversion.for("downcast").attributeToElement({model:r.id,view:(s,{writer:a,schema:c},{item:l})=>{if((l.is("selection")||c.isInline(l))&&s){const d=a.createAttributeElement("a",r.attributes,{priority:5});r.classes&&a.addClass(r.classes,d);for(const h in r.styles)a.setStyle(h,r.styles[h],d);return a.setCustomProperty("link",!0,d),d}}}),e.conversion.for("upcast").elementToAttribute({view:Ix({name:"a"},r._createPattern()),model:{key:r.id}})})}_enableLinkOpen(){const t=this.editor,e=t.editing.view.document;this.listenTo(e,"click",(n,i)=>{if(!(f.isMac?i.domEvent.metaKey:i.domEvent.ctrlKey))return;let r=i.domTarget;if(r.tagName.toLowerCase()!="a"&&(r=r.closest("a")),!r)return;const s=r.getAttribute("href");s&&(n.stop(),i.preventDefault(),vm(s))},{context:"$capture"}),this.listenTo(e,"keydown",(n,i)=>{const r=t.commands.get("link").value;r&&i.keyCode===ut.enter&&i.altKey&&(n.stop(),vm(r))})}_enableSelectionAttributesFixer(){const t=this.editor.model,e=t.document.selection;this.listenTo(e,"change:attribute",(n,{attributeKeys:i})=>{i.includes("linkHref")&&!e.hasAttribute("linkHref")&&t.change(r=>{var s;(function(a,c){a.removeSelectionAttribute("linkHref");for(const l of c)a.removeSelectionAttribute(l)})(r,(s=t.schema,s.getDefinition("$text").allowAttributes.filter(a=>a.startsWith("link"))))})})}_enableClipboardIntegration(){const t=this.editor,e=t.model,n=this.editor.config.get("link.defaultProtocol");n&&this.listenTo(t.plugins.get("ClipboardPipeline"),"contentInsertion",(i,r)=>{e.change(s=>{const a=s.createRangeIn(r.content);for(const c of a.getItems())if(c.hasAttribute("linkHref")){const l=Ea(c.getAttribute("linkHref"),n);s.setAttribute("linkHref",l,c)}})})}}var Tm=N(8408),Tx={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Tm.c,Tx),Tm.c.locals;class Mx extends tt{constructor(t,e){super(t),this.focusTracker=new Qt,this.keystrokes=new ie,this._focusables=new Ce;const n=t.t;this.urlInputView=this._createUrlInput(),this.saveButtonView=this._createButton(n("Save"),ot.check,"ck-button-save"),this.saveButtonView.type="submit",this.cancelButtonView=this._createButton(n("Cancel"),ot.cancel,"ck-button-cancel","cancel"),this._manualDecoratorSwitches=this._createManualDecoratorSwitches(e),this.children=this._createFormChildren(e.manualDecorators),this._focusCycler=new _e({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});const i=["ck","ck-link-form","ck-responsive-form"];e.manualDecorators.length&&i.push("ck-link-form_layout-vertical","ck-vertical-form"),this.setTemplate({tag:"form",attributes:{class:i,tabindex:"-1"},children:this.children})}getDecoratorSwitchesState(){return Array.from(this._manualDecoratorSwitches).reduce((t,e)=>(t[e.name]=e.isOn,t),{})}render(){super.render(),m({view:this}),[this.urlInputView,...this._manualDecoratorSwitches,this.saveButtonView,this.cancelButtonView].forEach(t=>{this._focusables.add(t),this.focusTracker.add(t.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}_createUrlInput(){const t=this.locale.t,e=new Pi(this.locale,er);return e.label=t("Link URL"),e}_createButton(t,e,n,i){const r=new wt(this.locale);return r.set({label:t,icon:e,tooltip:!0}),r.extendTemplate({attributes:{class:n}}),i&&r.delegate("execute").to(this,i),r}_createManualDecoratorSwitches(t){const e=this.createCollection();for(const n of t.manualDecorators){const i=new Bi(this.locale);i.set({name:n.id,label:n.label,withText:!0}),i.bind("isOn").toMany([n,t],"value",(r,s)=>s===void 0&&r===void 0?!!n.defaultValue:!!r),i.on("execute",()=>{n.set("value",!i.isOn)}),e.add(i)}return e}_createFormChildren(t){const e=this.createCollection();if(e.add(this.urlInputView),t.length){const n=new tt;n.setTemplate({tag:"ul",children:this._manualDecoratorSwitches.map(i=>({tag:"li",children:[i],attributes:{class:["ck","ck-list__item"]}})),attributes:{class:["ck","ck-reset","ck-list"]}}),e.add(n)}return e.add(this.saveButtonView),e.add(this.cancelButtonView),e}}var Mm=N(9796),Bx={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Mm.c,Bx),Mm.c.locals;class Nx extends tt{constructor(t){super(t),this.focusTracker=new Qt,this.keystrokes=new ie,this._focusables=new Ce;const e=t.t;this.previewButtonView=this._createPreviewButton(),this.unlinkButtonView=this._createButton(e("Unlink"),'',"unlink"),this.editButtonView=this._createButton(e("Edit link"),ot.pencil,"edit"),this.set("href",void 0),this._focusCycler=new _e({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-link-actions","ck-responsive-form"],tabindex:"-1"},children:[this.previewButtonView,this.editButtonView,this.unlinkButtonView]})}render(){super.render(),[this.previewButtonView,this.editButtonView,this.unlinkButtonView].forEach(t=>{this._focusables.add(t),this.focusTracker.add(t.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}_createButton(t,e,n){const i=new wt(this.locale);return i.set({label:t,icon:e,tooltip:!0}),i.delegate("execute").to(this,n),i}_createPreviewButton(){const t=new wt(this.locale),e=this.bindTemplate,n=this.t;return t.set({withText:!0,tooltip:n("Open link in new tab")}),t.extendTemplate({attributes:{class:["ck","ck-link-actions__preview"],href:e.to("href",i=>i&&Cm(i)),target:"_blank",rel:"noopener noreferrer"}}),t.bind("label").to(this,"href",i=>i||n("This link has no URL")),t.bind("isEnabled").to(this,"href",i=>!!i),t.template.tag="a",t.template.eventListeners={},t}}const Qe="link-ui";class Px extends R{constructor(){super(...arguments),this.actionsView=null,this.formView=null}static get requires(){return[rr]}static get pluginName(){return"LinkUI"}init(){const t=this.editor;t.editing.view.addObserver(VC),this._balloon=t.plugins.get(rr),this._createToolbarLinkButton(),this._enableBalloonActivators(),t.conversion.for("editingDowncast").markerToHighlight({model:Qe,view:{classes:["ck-fake-link-selection"]}}),t.conversion.for("editingDowncast").markerToElement({model:Qe,view:{name:"span",classes:["ck-fake-link-selection","ck-fake-link-selection_collapsed"]}})}destroy(){super.destroy(),this.formView&&this.formView.destroy(),this.actionsView&&this.actionsView.destroy()}_createViews(){this.actionsView=this._createActionsView(),this.formView=this._createFormView(),this._enableUserBalloonInteractions()}_createActionsView(){const t=this.editor,e=new Nx(t.locale),n=t.commands.get("link"),i=t.commands.get("unlink");return e.bind("href").to(n,"value"),e.editButtonView.bind("isEnabled").to(n),e.unlinkButtonView.bind("isEnabled").to(i),this.listenTo(e,"edit",()=>{this._addFormView()}),this.listenTo(e,"unlink",()=>{t.execute("unlink"),this._hideUI()}),e.keystrokes.set("Esc",(r,s)=>{this._hideUI(),s()}),e.keystrokes.set(ya,(r,s)=>{this._addFormView(),s()}),e}_createFormView(){const t=this.editor,e=t.commands.get("link"),n=t.config.get("link.defaultProtocol"),i=t.config.get("link.allowCreatingEmptyLinks"),r=new(x(Mx))(t.locale,e);return r.urlInputView.fieldView.bind("value").to(e,"value"),r.urlInputView.bind("isEnabled").to(e,"isEnabled"),r.saveButtonView.bind("isEnabled").to(e,"isEnabled",r.urlInputView,"isEmpty",(s,a)=>s&&(i||!a)),this.listenTo(r,"submit",()=>{const{value:s}=r.urlInputView.fieldView.element,a=Ea(s,n);t.execute("link",a,r.getDecoratorSwitchesState()),this._closeFormView()}),this.listenTo(r,"cancel",()=>{this._closeFormView()}),r.keystrokes.set("Esc",(s,a)=>{this._closeFormView(),a()}),r}_createToolbarLinkButton(){const t=this.editor,e=t.commands.get("link"),n=t.t;t.ui.componentFactory.add("link",i=>{const r=new wt(i);return r.isEnabled=!0,r.label=n("Link"),r.icon='',r.keystroke=ya,r.tooltip=!0,r.isToggleable=!0,r.bind("isEnabled").to(e,"isEnabled"),r.bind("isOn").to(e,"value",s=>!!s),this.listenTo(r,"execute",()=>this._showUI(!0)),r})}_enableBalloonActivators(){const t=this.editor,e=t.editing.view.document;this.listenTo(e,"click",()=>{this._getSelectedLinkElement()&&this._showUI()}),t.keystrokes.set(ya,(n,i)=>{i(),t.commands.get("link").isEnabled&&this._showUI(!0)})}_enableUserBalloonInteractions(){this.editor.keystrokes.set("Tab",(t,e)=>{this._areActionsVisible&&!this.actionsView.focusTracker.isFocused&&(this.actionsView.focus(),e())},{priority:"high"}),this.editor.keystrokes.set("Esc",(t,e)=>{this._isUIVisible&&(this._hideUI(),e())}),v({emitter:this.formView,activator:()=>this._isUIInPanel,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideUI()})}_addActionsView(){this.actionsView||this._createViews(),this._areActionsInPanel||this._balloon.add({view:this.actionsView,position:this._getBalloonPositionData()})}_addFormView(){if(this.formView||this._createViews(),this._isFormInPanel)return;const t=this.editor.commands.get("link");this.formView.disableCssTransitions(),this._balloon.add({view:this.formView,position:this._getBalloonPositionData()}),this.formView.urlInputView.fieldView.value=t.value||"",this._balloon.visibleView===this.formView&&this.formView.urlInputView.fieldView.select(),this.formView.enableCssTransitions()}_closeFormView(){const t=this.editor.commands.get("link");t.restoreManualDecoratorStates(),t.value!==void 0?this._removeFormView():this._hideUI()}_removeFormView(){this._isFormInPanel&&(this.formView.saveButtonView.focus(),this.formView.urlInputView.fieldView.reset(),this._balloon.remove(this.formView),this.editor.editing.view.focus(),this._hideFakeVisualSelection())}_showUI(t=!1){this.formView||this._createViews(),this._getSelectedLinkElement()?(this._areActionsVisible?this._addFormView():this._addActionsView(),t&&this._balloon.showStack("main")):(this._showFakeVisualSelection(),this._addActionsView(),t&&this._balloon.showStack("main"),this._addFormView()),this._startUpdatingUI()}_hideUI(){if(!this._isUIInPanel)return;const t=this.editor;this.stopListening(t.ui,"update"),this.stopListening(this._balloon,"change:visibleView"),t.editing.view.focus(),this._removeFormView(),this._balloon.remove(this.actionsView),this._hideFakeVisualSelection()}_startUpdatingUI(){const t=this.editor,e=t.editing.view.document;let n=this._getSelectedLinkElement(),i=s();const r=()=>{const a=this._getSelectedLinkElement(),c=s();n&&!a||!n&&c!==i?this._hideUI():this._isUIVisible&&this._balloon.updatePosition(this._getBalloonPositionData()),n=a,i=c};function s(){return e.selection.focus.getAncestors().reverse().find(a=>a.is("element"))}this.listenTo(t.ui,"update",r),this.listenTo(this._balloon,"change:visibleView",r)}get _isFormInPanel(){return!!this.formView&&this._balloon.hasView(this.formView)}get _areActionsInPanel(){return!!this.actionsView&&this._balloon.hasView(this.actionsView)}get _areActionsVisible(){return!!this.actionsView&&this._balloon.visibleView===this.actionsView}get _isUIInPanel(){return this._isFormInPanel||this._areActionsInPanel}get _isUIVisible(){const t=this._balloon.visibleView;return!!this.formView&&t==this.formView||this._areActionsVisible}_getBalloonPositionData(){const t=this.editor.editing.view,e=this.editor.model,n=t.document;let i;if(e.markers.has(Qe)){const r=Array.from(this.editor.editing.mapper.markerNameToElements(Qe)),s=t.createRange(t.createPositionBefore(r[0]),t.createPositionAfter(r[r.length-1]));i=t.domConverter.viewRangeToDom(s)}else i=()=>{const r=this._getSelectedLinkElement();return r?t.domConverter.mapViewToDom(r):t.domConverter.viewRangeToDom(n.selection.getFirstRange())};return{target:i}}_getSelectedLinkElement(){const t=this.editor.editing.view,e=t.document.selection,n=e.getSelectedElement();if(e.isCollapsed||n&&qt(n))return Da(e.getFirstPosition());{const i=e.getFirstRange().getTrimmed(),r=Da(i.start),s=Da(i.end);return r&&r==s&&t.createRangeIn(r).getTrimmed().isEqual(i)?r:null}}_showFakeVisualSelection(){const t=this.editor.model;t.change(e=>{const n=t.document.selection.getFirstRange();if(t.markers.has(Qe))e.updateMarker(Qe,{range:n});else if(n.start.isAtEnd){const i=n.start.getLastMatchingPosition(({item:r})=>!t.schema.isContent(r),{boundaries:n});e.addMarker(Qe,{usingOperation:!1,affectsData:!1,range:e.createRange(i,n.end)})}else e.addMarker(Qe,{usingOperation:!1,affectsData:!1,range:n})})}_hideFakeVisualSelection(){const t=this.editor.model;t.markers.has(Qe)&&t.change(e=>{e.removeMarker(Qe)})}}function Da(o){return o.getAncestors().find(t=>{return(e=t).is("attributeElement")&&!!e.getCustomProperty("link");var e})||null}const Bm=new RegExp("(^|\\s)(((?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(((?!www\\.)|(www\\.))(?![-_])(?:[-_a-z0-9\\u00a1-\\uffff]{1,63}\\.)+(?:[a-z\\u00a1-\\uffff]{2,63})))(?::\\d{2,5})?(?:[/?#]\\S*)?)|((www.|(\\S+@))((?![-_])(?:[-_a-z0-9\\u00a1-\\uffff]{1,63}\\.))+(?:[a-z\\u00a1-\\uffff]{2,63})))$","i");class Lx extends R{static get requires(){return[sn,Sm]}static get pluginName(){return"AutoLink"}init(){const t=this.editor.model.document.selection;t.on("change:range",()=>{this.isEnabled=!t.anchor.parent.is("element","codeBlock")}),this._enableTypingHandling()}afterInit(){this._enableEnterHandling(),this._enableShiftEnterHandling(),this._enablePasteLinking()}_expandLinkRange(t,e){return e.textNode&&e.textNode.hasAttribute("linkHref")?dr(e,"linkHref",e.textNode.getAttribute("linkHref"),t):null}_selectEntireLinks(t,e){const n=this.editor.model,i=n.document.selection,r=i.getFirstPosition(),s=i.getLastPosition();let a=e.getJoined(this._expandLinkRange(n,r)||e);a&&(a=a.getJoined(this._expandLinkRange(n,s)||e)),a&&(a.start.isBefore(r)||a.end.isAfter(s))&&t.setSelection(a)}_enablePasteLinking(){const t=this.editor,e=t.model,n=e.document.selection,i=t.plugins.get("ClipboardPipeline"),r=t.commands.get("link");i.on("inputTransformation",(s,a)=>{if(!this.isEnabled||!r.isEnabled||n.isCollapsed||a.method!=="paste"||n.rangeCount>1)return;const c=n.getFirstRange(),l=a.dataTransfer.getData("text/plain");if(!l)return;const d=l.match(Bm);d&&d[2]===l&&(e.change(h=>{this._selectEntireLinks(h,c),r.execute(l)}),s.stop())},{priority:"high"})}_enableTypingHandling(){const t=this.editor,e=new ng(t.model,n=>{if(!function(r){return r.length>4&&r[r.length-1]===" "&&r[r.length-2]!==" "}(n))return;const i=Nm(n.substr(0,n.length-1));return i?{url:i}:void 0});e.on("matched:data",(n,i)=>{const{batch:r,range:s,url:a}=i;if(!r.isTyping)return;const c=s.end.getShiftedBy(-1),l=c.getShiftedBy(-a.length),d=t.model.createRange(l,c);this._applyAutoLink(a,d)}),e.bind("isEnabled").to(this)}_enableEnterHandling(){const t=this.editor,e=t.model,n=t.commands.get("enter");n&&n.on("execute",()=>{const i=e.document.selection.getFirstPosition();if(!i.parent.previousSibling)return;const r=e.createRangeIn(i.parent.previousSibling);this._checkAndApplyAutoLinkOnRange(r)})}_enableShiftEnterHandling(){const t=this.editor,e=t.model,n=t.commands.get("shiftEnter");n&&n.on("execute",()=>{const i=e.document.selection.getFirstPosition(),r=e.createRange(e.createPositionAt(i.parent,0),i.getShiftedBy(-1));this._checkAndApplyAutoLinkOnRange(r)})}_checkAndApplyAutoLinkOnRange(t){const e=this.editor.model,{text:n,range:i}=eg(t,e),r=Nm(n);if(r){const s=e.createRange(i.end.getShiftedBy(-r.length),i.end);this._applyAutoLink(r,s)}}_applyAutoLink(t,e){const n=this.editor.model,i=Ea(t,this.editor.config.get("link.defaultProtocol"));this.isEnabled&&function(r,s){return s.schema.checkAttributeInSelection(s.createSelection(r),"linkHref")}(e,n)&&_m(i)&&!function(r){const s=r.start.nodeAfter;return!!s&&s.hasAttribute("linkHref")}(e)&&this._persistAutoLink(i,e)}_persistAutoLink(t,e){const n=this.editor.model,i=this.editor.plugins.get("Delete");n.enqueueChange(r=>{r.setAttribute("linkHref",t,e),n.enqueueChange(()=>{i.requestUndoOnBackspace()})})}}function Nm(o){const t=Bm.exec(o);return t?t[2]:null}var Pm=N(5064),Ox={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Pm.c,Ox),Pm.c.locals;class xe{constructor(t,e){this._startElement=t,this._referenceIndent=t.getAttribute("listIndent"),this._isForward=e.direction=="forward",this._includeSelf=!!e.includeSelf,this._sameAttributes=Bt(e.sameAttributes||[]),this._sameIndent=!!e.sameIndent,this._lowerIndent=!!e.lowerIndent,this._higherIndent=!!e.higherIndent}static first(t,e){return Wt(new this(t,e)[Symbol.iterator]())}*[Symbol.iterator](){const t=[];for(const{node:e}of ui(this._getStartNode(),this._isForward?"forward":"backward")){const n=e.getAttribute("listIndent");if(nthis._referenceIndent){if(!this._higherIndent)continue;if(!this._isForward){t.push(e);continue}}else{if(!this._sameIndent){if(this._higherIndent){t.length&&(yield*t,t.length=0);break}continue}if(this._sameAttributes.some(i=>e.getAttribute(i)!==this._startElement.getAttribute(i)))break}t.length&&(yield*t,t.length=0),yield e}}_getStartNode(){return this._includeSelf?this._startElement:this._isForward?this._startElement.nextSibling:this._startElement.previousSibling}}function*ui(o,t="forward"){const e=t=="forward",n=[];let i=null;for(;Kt(o);){let r=null;if(i){const s=o.getAttribute("listIndent"),a=i.getAttribute("listIndent");s>a?n[a]=i:st in o?Rx(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Ia=(o,t)=>{for(var e in t||(t={}))Vx.call(t,e)&&Om(o,e,t[e]);if(Lm)for(var e of Lm(t))Hx.call(t,e)&&Om(o,e,t[e]);return o},Sa=(o,t)=>jx(o,Fx(t));class Co{static next(){return X()}}function Kt(o){return!!o&&o.is("element")&&o.hasAttribute("listItemId")}function Ta(o,t={}){return[..._n(o,Sa(Ia({},t),{direction:"backward"})),..._n(o,Sa(Ia({},t),{direction:"forward"}))]}function _n(o,t={}){const e=t.direction=="forward",n=Array.from(new xe(o,Sa(Ia({},t),{includeSelf:e,sameIndent:!0,sameAttributes:"listItemId"})));return e?n:n.reverse()}function zm(o){const t=new xe(o,{sameIndent:!0,sameAttributes:"listType"}),e=new xe(o,{sameIndent:!0,sameAttributes:"listType",includeSelf:!0,direction:"forward"});return[...Array.from(t).reverse(),...e]}function qn(o){return!xe.first(o,{sameIndent:!0,sameAttributes:"listItemId"})}function Rm(o){return!xe.first(o,{direction:"forward",sameIndent:!0,sameAttributes:"listItemId"})}function gi(o,t={}){o=Bt(o);const e=t.withNested!==!1,n=new Set;for(const i of o)for(const r of Ta(i,{higherIndent:e}))n.add(r);return Gn(n)}function Ux(o){o=Bt(o);const t=new Set;for(const e of o)for(const n of zm(e))t.add(n);return Gn(t)}function Ma(o,t){const e=_n(o,{direction:"forward"}),n=Co.next();for(const i of e)t.setAttribute("listItemId",n,i);return e}function Ba(o,t,e){const n={};for(const[r,s]of t.getAttributes())r.startsWith("list")&&(n[r]=s);const i=_n(o,{direction:"forward"});for(const r of i)e.setAttributes(n,r);return i}function Na(o,t,{expand:e,indentBy:n=1}={}){o=Bt(o);const i=e?gi(o):o;for(const r of i){const s=r.getAttribute("listIndent")+n;s<0?_r(r,t):t.setAttribute("listIndent",s,r)}return i}function _r(o,t){o=Bt(o);for(const e of o)e.is("element","listItem")&&t.rename(e,"paragraph");for(const e of o)for(const n of e.getAttributeKeys())n.startsWith("list")&&t.removeAttribute(n,e);return o}function pi(o){if(!o.length)return!1;const t=o[0].getAttribute("listItemId");return!!t&&!o.some(e=>e.getAttribute("listItemId")!=t)}function Gn(o){return Array.from(o).filter(t=>t.root.rootName!=="$graveyard").sort((t,e)=>t.index-e.index)}function mi(o){const t=o.document.selection.getSelectedElement();return t&&o.schema.isObject(t)&&o.schema.isBlock(t)?t:null}function Pa(o,t){return t.checkChild(o.parent,"listItem")&&t.checkChild(o,"$text")&&!t.isObject(o)}function qx(o,t,e){return _n(t,{direction:"forward"}).pop().index>o.index?Ba(o,t,e):[]}class jm extends at{constructor(t,e){super(t),this._direction=e}refresh(){this.isEnabled=this._checkEnabled()}execute(){const t=this.editor.model,e=Fm(t.document.selection);t.change(n=>{const i=[];pi(e)&&!qn(e[0])?(this._direction=="forward"&&i.push(...Na(e,n)),i.push(...Ma(e[0],n))):this._direction=="forward"?i.push(...Na(e,n,{expand:!0})):i.push(...function(r,s){const a=gi(r=Bt(r)),c=new Set,l=Math.min(...a.map(h=>h.getAttribute("listIndent"))),d=new Map;for(const h of a)d.set(h,xe.first(h,{lowerIndent:!0}));for(const h of a){if(c.has(h))continue;c.add(h);const u=h.getAttribute("listIndent")-1;if(u<0)_r(h,s);else{if(h.getAttribute("listIndent")==l){const g=qx(h,d.get(h),s);for(const p of g)c.add(p);if(g.length)continue}s.setAttribute("listIndent",u,h)}}return Gn(c)}(e,n));for(const r of i){if(!r.hasAttribute("listType"))continue;const s=xe.first(r,{sameIndent:!0});s&&n.setAttribute("listType",s.getAttribute("listType"),r)}this._fireAfterExecute(i)})}_fireAfterExecute(t){this.fire("afterExecute",Gn(new Set(t)))}_checkEnabled(){let t=Fm(this.editor.model.document.selection),e=t[0];if(!e)return!1;if(this._direction=="backward"||pi(t)&&!qn(t[0]))return!0;t=gi(t),e=t[0];const n=xe.first(e,{sameIndent:!0});return!!n&&n.getAttribute("listType")==e.getAttribute("listType")}}function Fm(o){const t=Array.from(o.getSelectedBlocks()),e=t.findIndex(n=>!Kt(n));return e!=-1&&(t.length=e),t}class Vm extends at{constructor(t,e){super(t),this.type=e}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(t={}){const e=this.editor.model,n=e.document,i=mi(e),r=Array.from(n.selection.getSelectedBlocks()).filter(a=>e.schema.checkAttribute(a,"listType")||Pa(a,e.schema)),s=t.forceValue!==void 0?!t.forceValue:this.value;e.change(a=>{if(s){const c=r[r.length-1],l=_n(c,{direction:"forward"}),d=[];l.length>1&&d.push(...Ma(l[1],a)),d.push(..._r(r,a)),d.push(...function(h,u){const g=[];let p=Number.POSITIVE_INFINITY;for(const{node:k}of ui(h.nextSibling,"forward")){const b=k.getAttribute("listIndent");if(b==0)break;b{const{firstElement:s,lastElement:a}=this._getMergeSubjectElements(n,t),c=s.getAttribute("listIndent")||0,l=a.getAttribute("listIndent"),d=a.getAttribute("listItemId");if(c!=l){const u=(h=a,Array.from(new xe(h,{direction:"forward",higherIndent:!0})));i.push(...Na([a,...u],r,{indentBy:c-l,expand:c{const e=Ma(this._getStartBlock(),t);this._fireAfterExecute(e)})}_fireAfterExecute(t){this.fire("afterExecute",Gn(new Set(t)))}_checkEnabled(){const t=this.editor.model.document.selection,e=this._getStartBlock();return t.isCollapsed&&Kt(e)&&!qn(e)}_getStartBlock(){const t=this.editor.model.document.selection.getFirstPosition().parent;return this._direction=="before"?t:t.nextSibling}}class Gx extends R{static get pluginName(){return"ListUtils"}expandListBlocksToCompleteList(t){return Ux(t)}isFirstBlockOfListItem(t){return qn(t)}isListItemBlock(t){return Kt(t)}expandListBlocksToCompleteItems(t,e={}){return gi(t,e)}}function qm(o){return o.is("element","ol")||o.is("element","ul")}function vr(o){return o.is("element","li")}function Wx(o,t,e,n=Wm(e,t)){return o.createAttributeElement(Gm(e),null,{priority:2*t/100-100,id:n})}function $x(o,t,e){return o.createAttributeElement("li",null,{priority:(2*t+1)/100-100,id:e})}function Gm(o){return o=="numbered"?"ol":"ul"}function Wm(o,t){return`list-${o}-${t}`}function Fe(o,t){const e=o.nodeBefore;if(Kt(e)){let n=e;for(const{node:i}of ui(n,"backward"))if(n=i,t.has(n))return;t.set(e,n)}else{const n=o.nodeAfter;Kt(n)&&t.set(n,n)}}function Kx(){return(o,t,e)=>{const{writer:n,schema:i}=e;if(!t.modelRange)return;const r=Array.from(t.modelRange.getItems({shallow:!0})).filter(h=>i.checkAttribute(h,"listItemId"));if(!r.length)return;const s=Co.next(),a=function(h){let u=0,g=h.parent;for(;g;){if(vr(g))u++;else{const p=g.previousSibling;p&&vr(p)&&u++}g=g.parent}return u}(t.viewItem);let c=t.viewItem.parent&&t.viewItem.parent.is("element","ol")?"numbered":"bulleted";const l=r[0].getAttribute("listType");l&&(c=l);const d={listItemId:s,listIndent:a,listType:c};for(const h of r)h.hasAttribute("listItemId")||n.setAttributes(d,h);r.length>1&&r[1].getAttribute("listItemId")!=d.listItemId&&e.keepEmptyElement(r[0])}}function $m(){return(o,t,e)=>{if(!e.consumable.test(t.viewItem,{name:!0}))return;const n=new on(t.viewItem.document);for(const i of Array.from(t.viewItem.getChildren()))vr(i)||qm(i)||n.remove(i)}}function Km(o,t,e,{dataPipeline:n}={}){const i=function(r){return(s,a)=>{const c=[];for(const l of r)s.hasAttribute(l)&&c.push(`attribute:${l}`);return!!c.every(l=>a.test(s,l)!==!1)&&(c.forEach(l=>a.consume(s,l)),!0)}}(o);return(r,s,a)=>{const{writer:c,mapper:l,consumable:d}=a,h=s.item;if(!o.includes(s.attributeKey)||!i(h,d))return;const u=function(p,k,b){const A=b.createRangeOn(p);return k.toViewRange(A).getTrimmed().end.nodeBefore}(h,l,e);(function(p,k,b){for(;p.parent.is("attributeElement")&&p.parent.getCustomProperty("listItemWrapper");)k.unwrap(k.createRangeIn(p.parent),p.parent);const A=k.createPositionBefore(p).getWalker({direction:"backward"}),E=[];for(const{item:M}of A){if(M.is("element")&&b.toModelElement(M))break;M.is("element")&&M.getCustomProperty("listItemMarker")&&E.push(M)}for(const M of E)k.remove(M)})(u,c,l),function(p,k){let b=p.parent;for(;b.is("attributeElement")&&["ul","ol","li"].includes(b.name);){const A=b.parent;k.unwrap(k.createRangeOn(p),b),b=A}}(u,c);const g=function(p,k,b,A,{dataPipeline:E}){let M=A.createRangeOn(k);if(!qn(p))return M;for(const z of b){if(z.scope!="itemMarker")continue;const G=z.createElement(A,p,{dataPipeline:E});if(!G||(A.setCustomProperty("listItemMarker",!0,G),A.insert(M.start,G),M=A.createRange(A.createPositionBefore(G),A.createPositionAfter(k)),!z.createWrapperElement||!z.canWrapElement))continue;const et=z.createWrapperElement(A,p,{dataPipeline:E});A.setCustomProperty("listItemWrapper",!0,et),z.canWrapElement(p)?M=A.wrap(M,et):(M=A.wrap(A.createRangeOn(G),et),M=A.createRange(M.start,A.createPositionAfter(k)))}return M}(h,u,t,c,{dataPipeline:n});(function(p,k,b,A){if(!p.hasAttribute("listIndent"))return;const E=p.getAttribute("listIndent");let M=p;for(let z=E;z>=0;z--){const G=$x(A,z,M.getAttribute("listItemId")),et=Wx(A,z,M.getAttribute("listType"));for(const st of b)st.scope!="list"&&st.scope!="item"||!M.hasAttribute(st.attributeName)||st.setAttributeOnDowncast(A,M.getAttribute(st.attributeName),st.scope=="list"?et:G);if(k=A.wrap(k,G),k=A.wrap(k,et),z==0||(M=xe.first(M,{lowerIndent:!0}),!M))break}})(h,g,t,c)}}function Ym(o,{dataPipeline:t}={}){return(e,{writer:n})=>{if(!Qm(e,o))return null;if(!t)return n.createContainerElement("span",{class:"ck-list-bogus-paragraph"});const i=n.createContainerElement("p");return n.setCustomProperty("dataPipeline:transparentRendering",!0,i),i}}function Qm(o,t,e=Ta(o)){if(!Kt(o))return!1;for(const n of o.getAttributeKeys())if(!n.startsWith("selection:")&&!t.includes(n))return!1;return e.length<2}var Zm=N(2483),Yx={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Zm.c,Yx),Zm.c.locals;var Jm=N(2984),Qx={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Jm.c,Qx),Jm.c.locals;const yr=["listType","listIndent","listItemId"];class Zx extends R{constructor(t){super(t),this._downcastStrategies=[],t.config.define("list.multiBlock",!0)}static get pluginName(){return"ListEditing"}static get requires(){return[hr,sn,Gx,Re]}init(){const t=this.editor,e=t.model,n=t.config.get("list.multiBlock");if(t.plugins.has("LegacyListEditing"))throw new _("list-feature-conflict",this,{conflictPlugin:"LegacyListEditing"});e.schema.register("$listItem",{allowAttributes:yr}),n?(e.schema.extend("$container",{allowAttributesOf:"$listItem"}),e.schema.extend("$block",{allowAttributesOf:"$listItem"}),e.schema.extend("$blockObject",{allowAttributesOf:"$listItem"})):e.schema.register("listItem",{inheritAllFrom:"$block",allowAttributesOf:"$listItem"});for(const i of yr)e.schema.setAttributeProperties(i,{copyOnReplace:!0});t.commands.add("numberedList",new Vm(t,"numbered")),t.commands.add("bulletedList",new Vm(t,"bulleted")),t.commands.add("indentList",new jm(t,"forward")),t.commands.add("outdentList",new jm(t,"backward")),t.commands.add("splitListItemBefore",new Um(t,"before")),t.commands.add("splitListItemAfter",new Um(t,"after")),n&&(t.commands.add("mergeListItemBackward",new Hm(t,"backward")),t.commands.add("mergeListItemForward",new Hm(t,"forward"))),this._setupDeleteIntegration(),this._setupEnterIntegration(),this._setupTabIntegration(),this._setupClipboardIntegration()}afterInit(){const t=this.editor.commands,e=t.get("indent"),n=t.get("outdent");e&&e.registerChildCommand(t.get("indentList"),{priority:"high"}),n&&n.registerChildCommand(t.get("outdentList"),{priority:"lowest"}),this._setupModelPostFixing(),this._setupConversion()}registerDowncastStrategy(t){this._downcastStrategies.push(t)}getListAttributeNames(){return[...yr,...this._downcastStrategies.map(t=>t.attributeName)]}_setupDeleteIntegration(){const t=this.editor,e=t.commands.get("mergeListItemBackward"),n=t.commands.get("mergeListItemForward");this.listenTo(t.editing.view.document,"delete",(i,r)=>{const s=t.model.document.selection;mi(t.model)||t.model.change(()=>{const a=s.getFirstPosition();if(s.isCollapsed&&r.direction=="backward"){if(!a.isAtStart)return;const c=a.parent;if(!Kt(c))return;if(xe.first(c,{sameAttributes:"listType",sameIndent:!0})||c.getAttribute("listIndent")!==0){if(!e||!e.isEnabled)return;e.execute({shouldMergeOnBlocksContentLevel:Xm(t.model,"backward")})}else Rm(c)||t.execute("splitListItemAfter"),t.execute("outdentList");r.preventDefault(),i.stop()}else{if(s.isCollapsed&&!s.getLastPosition().isAtEnd||!n||!n.isEnabled)return;n.execute({shouldMergeOnBlocksContentLevel:Xm(t.model,"forward")}),r.preventDefault(),i.stop()}})},{context:"li"})}_setupEnterIntegration(){const t=this.editor,e=t.model,n=t.commands,i=n.get("enter");this.listenTo(t.editing.view.document,"enter",(r,s)=>{const a=e.document,c=a.selection.getFirstPosition().parent;if(a.selection.isCollapsed&&Kt(c)&&c.isEmpty&&!s.isSoft){const l=qn(c),d=Rm(c);l&&d?(t.execute("outdentList"),s.preventDefault(),r.stop()):l&&!d?(t.execute("splitListItemAfter"),s.preventDefault(),r.stop()):d&&(t.execute("splitListItemBefore"),s.preventDefault(),r.stop())}},{context:"li"}),this.listenTo(i,"afterExecute",()=>{const r=n.get("splitListItemBefore");r.refresh(),r.isEnabled&&Ta(t.model.document.selection.getLastPosition().parent).length===2&&r.execute()})}_setupTabIntegration(){const t=this.editor;this.listenTo(t.editing.view.document,"tab",(e,n)=>{const i=n.shiftKey?"outdentList":"indentList";this.editor.commands.get(i).isEnabled&&(t.execute(i),n.stopPropagation(),n.preventDefault(),e.stop())},{context:"li"})}_setupConversion(){const t=this.editor,e=t.model,n=this.getListAttributeNames(),i=t.config.get("list.multiBlock"),r=i?"paragraph":"listItem";t.conversion.for("upcast").elementToElement({view:"li",model:(s,{writer:a})=>a.createElement(r,{listType:""})}).elementToElement({view:"p",model:(s,{writer:a})=>s.parent&&s.parent.is("element","li")?a.createElement(r,{listType:""}):null,converterPriority:"high"}).add(s=>{s.on("element:li",Kx()),s.on("element:ul",$m(),{priority:"high"}),s.on("element:ol",$m(),{priority:"high"})}),i||t.conversion.for("downcast").elementToElement({model:"listItem",view:"p"}),t.conversion.for("editingDowncast").elementToElement({model:r,view:Ym(n),converterPriority:"high"}).add(s=>{s.on("attribute",Km(n,this._downcastStrategies,e))}),t.conversion.for("dataDowncast").elementToElement({model:r,view:Ym(n,{dataPipeline:!0}),converterPriority:"high"}).add(s=>{s.on("attribute",Km(n,this._downcastStrategies,e,{dataPipeline:!0}))}),this.listenTo(e.document,"change:data",function(s,a,c,l){return()=>{const g=s.document.differ.getChanges(),p=[],k=new Map,b=new Set;for(const A of g)if(A.type=="insert"&&A.name!="$text")Fe(A.position,k),A.attributes.has("listItemId")?b.add(A.position.nodeAfter):Fe(A.position.getShiftedBy(A.length),k);else if(A.type=="remove"&&A.attributes.has("listItemId"))Fe(A.position,k);else if(A.type=="attribute"){const E=A.range.start.nodeAfter;c.includes(A.attributeKey)?(Fe(A.range.start,k),A.attributeNewValue===null?(Fe(A.range.start.getShiftedBy(1),k),h(E)&&p.push(E)):b.add(E)):Kt(E)&&h(E)&&p.push(E)}for(const A of k.values())p.push(...d(A,b));for(const A of new Set(p))a.reconvertItem(A)};function d(g,p){const k=[],b=new Set,A=[];for(const{node:E,previous:M}of ui(g,"forward")){if(b.has(E))continue;const z=E.getAttribute("listIndent");M&&zc.includes(et)));const G=_n(E,{direction:"forward"});for(const et of G)b.add(et),(h(et,G)||u(et,A,p))&&k.push(et)}return k}function h(g,p){const k=a.mapper.toViewElement(g);if(!k)return!1;if(l.fire("checkElement",{modelElement:g,viewElement:k}))return!0;if(!g.is("element","paragraph")&&!g.is("element","listItem"))return!1;const b=Qm(g,c,p);return!(!b||!k.is("element","p"))||!(b||!k.is("element","span"))}function u(g,p,k){if(k.has(g))return!1;const b=a.mapper.toViewElement(g);let A=p.length-1;for(let E=b.parent;!E.is("editableElement");E=E.parent){const M=vr(E),z=qm(E);if(!z&&!M)continue;const G="checkAttributes:"+(M?"item":"list");if(l.fire(G,{viewElement:E,modelAttributes:p[A]}))break;if(z&&(A--,A<0))return!1}return!0}}(e,t.editing,n,this),{priority:"high"}),this.on("checkAttributes:item",(s,{viewElement:a,modelAttributes:c})=>{a.id!=c.listItemId&&(s.return=!0,s.stop())}),this.on("checkAttributes:list",(s,{viewElement:a,modelAttributes:c})=>{a.name==Gm(c.listType)&&a.id==Wm(c.listType,c.listIndent)||(s.return=!0,s.stop())})}_setupModelPostFixing(){const t=this.editor.model,e=this.getListAttributeNames();t.document.registerPostFixer(n=>function(i,r,s,a){const c=i.document.differ.getChanges(),l=new Map,d=a.editor.config.get("list.multiBlock");let h=!1;for(const g of c){if(g.type=="insert"&&g.name!="$text"){const p=g.position.nodeAfter;if(!i.schema.checkAttribute(p,"listItemId"))for(const k of Array.from(p.getAttributeKeys()))s.includes(k)&&(r.removeAttribute(k,p),h=!0);Fe(g.position,l),g.attributes.has("listItemId")||Fe(g.position.getShiftedBy(g.length),l);for(const{item:k,previousPosition:b}of i.createRangeIn(p))Kt(k)&&Fe(b,l)}else g.type=="remove"?Fe(g.position,l):g.type=="attribute"&&s.includes(g.attributeKey)&&(Fe(g.range.start,l),g.attributeNewValue===null&&Fe(g.range.start.getShiftedBy(1),l));if(!d&&g.type=="attribute"&&yr.includes(g.attributeKey)){const p=g.range.start.nodeAfter;g.attributeNewValue===null&&p&&p.is("element","listItem")?(r.rename(p,"paragraph"),h=!0):g.attributeOldValue===null&&p&&p.is("element")&&p.name!="listItem"&&(r.rename(p,"listItem"),h=!0)}}const u=new Set;for(const g of l.values())h=a.fire("postFixer",{listNodes:new zx(g),listHead:g,writer:r,seenIds:u})||h;return h}(t,n,e,this)),this.on("postFixer",(n,{listNodes:i,writer:r})=>{n.return=function(s,a){let c=0,l=-1,d=null,h=!1;for(const{node:u}of s){const g=u.getAttribute("listIndent");if(g>c){let p;d===null?(d=g-c,p=c):(d>g&&(d=g),p=g-d),p>l+1&&(p=l+1),a.setAttribute("listIndent",p,u),h=!0,l=p}else d=null,c=g+1,l=g}return h}(i,r)||n.return},{priority:"high"}),this.on("postFixer",(n,{listNodes:i,writer:r,seenIds:s})=>{n.return=function(a,c,l){const d=new Set;let h=!1;for(const{node:u}of a){if(d.has(u))continue;let g=u.getAttribute("listType"),p=u.getAttribute("listItemId");if(c.has(p)&&(p=Co.next()),c.add(p),u.is("element","listItem"))u.getAttribute("listItemId")!=p&&(l.setAttribute("listItemId",p,u),h=!0);else for(const k of _n(u,{direction:"forward"}))d.add(k),k.getAttribute("listType")!=g&&(p=Co.next(),g=k.getAttribute("listType")),k.getAttribute("listItemId")!=p&&(l.setAttribute("listItemId",p,k),h=!0)}return h}(i,s,r)||n.return},{priority:"high"})}_setupClipboardIntegration(){const t=this.editor.model,e=this.editor.plugins.get("ClipboardPipeline");this.listenTo(t,"insertContent",function(n){return(i,[r,s])=>{const a=r.is("documentFragment")?Array.from(r.getChildren()):[r];if(!a.length)return;const c=(s?n.createSelection(s):n.document.selection).getFirstPosition();let l;if(Kt(c.parent))l=c.parent;else{if(!Kt(c.nodeBefore))return;l=c.nodeBefore}n.change(d=>{const h=l.getAttribute("listType"),u=l.getAttribute("listIndent"),g=a[0].getAttribute("listIndent")||0,p=Math.max(u-g,0);for(const k of a){const b=Kt(k);l.is("element","listItem")&&k.is("element","paragraph")&&d.rename(k,"listItem"),d.setAttributes({listIndent:(b?k.getAttribute("listIndent"):0)+p,listItemId:b?k.getAttribute("listItemId"):Co.next(),listType:h},k)}})}}(t),{priority:"high"}),this.listenTo(e,"outputTransformation",(n,i)=>{t.change(r=>{const s=Array.from(i.content.getChildren()),a=s[s.length-1];if(s.length>1&&a.is("element")&&a.isEmpty&&s.slice(0,-1).every(Kt)&&r.remove(a),i.method=="copy"||i.method=="cut"){const c=Array.from(i.content.getChildren());pi(c)&&_r(c,r)}})})}}function Xm(o,t){const e=o.document.selection;if(!e.isCollapsed)return!mi(o);if(t==="forward")return!0;const n=e.getFirstPosition().parent,i=n.previousSibling;return!o.schema.isObject(i)&&(!!i.isEmpty||pi([n,i]))}function tf(o,t,e,n){o.ui.componentFactory.add(t,i=>{const r=o.commands.get(t),s=new wt(i);return s.set({label:e,icon:n,tooltip:!0,isToggleable:!0}),s.bind("isOn","isEnabled").to(r,"value","isEnabled"),s.on("execute",()=>{o.execute(t),o.editing.view.focus()}),s})}class Jx extends R{static get pluginName(){return"ListUI"}init(){const t=this.editor.t;tf(this.editor,"numberedList",t("Numbered List"),ot.numberedList),tf(this.editor,"bulletedList",t("Bulleted List"),ot.bulletedList)}}class Xx extends R{static get requires(){return[Zx,Jx]}static get pluginName(){return"List"}}const t2=[{listStyle:"disc",typeAttribute:"disc",listType:"bulleted"},{listStyle:"circle",typeAttribute:"circle",listType:"bulleted"},{listStyle:"square",typeAttribute:"square",listType:"bulleted"},{listStyle:"decimal",typeAttribute:"1",listType:"numbered"},{listStyle:"decimal-leading-zero",typeAttribute:null,listType:"numbered"},{listStyle:"lower-roman",typeAttribute:"i",listType:"numbered"},{listStyle:"upper-roman",typeAttribute:"I",listType:"numbered"},{listStyle:"lower-alpha",typeAttribute:"a",listType:"numbered"},{listStyle:"upper-alpha",typeAttribute:"A",listType:"numbered"},{listStyle:"lower-latin",typeAttribute:"a",listType:"numbered"},{listStyle:"upper-latin",typeAttribute:"A",listType:"numbered"}];for(const{listStyle:o,typeAttribute:t,listType:e}of t2);var ef=N(4672),e2={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(ef.c,e2),ef.c.locals;var nf=N(6832),n2={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(nf.c,n2),nf.c.locals,Fo("Ctrl+Enter");var of=N(9472),o2={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(of.c,o2),of.c.locals,Fo("Ctrl+Enter");function rf(o,t){const e=(n,i,r)=>{if(!r.consumable.consume(i.item,n.name))return;const s=i.attributeNewValue,a=r.writer,c=r.mapper.toViewElement(i.item),l=[...c.getChildren()].find(h=>h.getCustomProperty("media-content"));a.remove(l);const d=o.getMediaViewElement(a,s,t);a.insert(a.createPositionAt(c,0),d)};return n=>{n.on("attribute:url:media",e)}}function sf(o,t,e,n){return o.createContainerElement("figure",{class:"media"},[t.getMediaViewElement(o,e,n),o.createSlot()])}function af(o){const t=o.getSelectedElement();return t&&t.is("element","media")?t:null}function cf(o,t,e,n){o.change(i=>{const r=i.createElement("media",{url:t});o.insertObject(r,e,null,{setSelection:"on",findOptimalPosition:n?"auto":void 0})})}class i2 extends at{refresh(){const t=this.editor.model,e=t.document.selection,n=af(e);this.value=n?n.getAttribute("url"):void 0,this.isEnabled=function(i){const r=i.getSelectedElement();return!!r&&r.name==="media"}(e)||function(i,r){let a=mg(i,r).start.parent;return a.isEmpty&&!r.schema.isLimit(a)&&(a=a.parent),r.schema.checkChild(a,"media")}(e,t)}execute(t){const e=this.editor.model,n=e.document.selection,i=af(n);i?e.change(r=>{r.setAttribute("url",t,i)}):cf(e,t,n,!0)}}class r2{constructor(t,e){const n=e.providers,i=e.extraProviders||[],r=new Set(e.removeProviders),s=n.concat(i).filter(a=>{const c=a.name;return c?!r.has(c):(Y("media-embed-no-provider-name",{provider:a}),!1)});this.locale=t,this.providerDefinitions=s}hasMedia(t){return!!this._getMedia(t)}getMediaViewElement(t,e,n){return this._getMedia(e).getViewElement(t,n)}_getMedia(t){if(!t)return new lf(this.locale);t=t.trim();for(const e of this.providerDefinitions){const n=e.html,i=Bt(e.url);for(const r of i){const s=this._getUrlMatches(t,r);if(s)return new lf(this.locale,t,s,n)}}return null}_getUrlMatches(t,e){let n=t.match(e);if(n)return n;let i=t.replace(/^https?:\/\//,"");return n=i.match(e),n||(i=i.replace(/^www\./,""),n=i.match(e),n||null)}}class lf{constructor(t,e,n,i){this.url=this._getValidUrl(e),this._locale=t,this._match=n,this._previewRenderer=i}getViewElement(t,e){const n={};let i;if(e.renderForEditingView||e.renderMediaPreview&&this.url&&this._previewRenderer){this.url&&(n["data-oembed-url"]=this.url),e.renderForEditingView&&(n.class="ck-media__wrapper");const r=this._getPreviewHtml(e);i=t.createRawElement("div",n,(s,a)=>{a.setContentOf(s,r)})}else this.url&&(n.url=this.url),i=t.createEmptyElement(e.elementName,n);return t.setCustomProperty("media-content",!0,i),i}_getPreviewHtml(t){return this._previewRenderer?this._previewRenderer(this._match):this.url&&t.renderForEditingView?this._getPlaceholderHtml():""}_getPlaceholderHtml(){const t=new mn,e=this._locale.t;return t.content='',t.viewBox="0 0 64 42",new Be({tag:"div",attributes:{class:"ck ck-reset_all ck-media__placeholder"},children:[{tag:"div",attributes:{class:"ck-media__placeholder__icon"},children:[t]},{tag:"a",attributes:{class:"ck-media__placeholder__url",target:"_blank",rel:"noopener noreferrer",href:this.url,"data-cke-tooltip-text":e("Open media in new tab")},children:[{tag:"span",attributes:{class:"ck-media__placeholder__url__text"},children:[this.url]}]}]}).render().outerHTML}_getValidUrl(t){return t?t.match(/^https?/)?t:"https://"+t:null}}var df=N(2792),s2={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(df.c,s2),df.c.locals;class xr extends R{constructor(t){super(t),t.config.define("mediaEmbed",{elementName:"oembed",providers:[{name:"dailymotion",url:[/^dailymotion\.com\/video\/(\w+)/,/^dai.ly\/(\w+)/],html:e=>`
`},{name:"spotify",url:[/^open\.spotify\.com\/(artist\/\w+)/,/^open\.spotify\.com\/(album\/\w+)/,/^open\.spotify\.com\/(track\/\w+)/],html:e=>`
`},{name:"youtube",url:[/^(?:m\.)?youtube\.com\/watch\?v=([\w-]+)(?:&t=(\d+))?/,/^(?:m\.)?youtube\.com\/v\/([\w-]+)(?:\?t=(\d+))?/,/^youtube\.com\/embed\/([\w-]+)(?:\?start=(\d+))?/,/^youtu\.be\/([\w-]+)(?:\?t=(\d+))?/],html:e=>{const n=e[1],i=e[2];return`
`}},{name:"vimeo",url:[/^vimeo\.com\/(\d+)/,/^vimeo\.com\/[^/]+\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/album\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/channels\/[^/]+\/(\d+)/,/^vimeo\.com\/groups\/[^/]+\/videos\/(\d+)/,/^vimeo\.com\/ondemand\/[^/]+\/(\d+)/,/^player\.vimeo\.com\/video\/(\d+)/],html:e=>`
`},{name:"instagram",url:/^instagram\.com\/p\/(\w+)/},{name:"twitter",url:/^twitter\.com/},{name:"googleMaps",url:[/^google\.com\/maps/,/^goo\.gl\/maps/,/^maps\.google\.com/,/^maps\.app\.goo\.gl/]},{name:"flickr",url:/^flickr\.com/},{name:"facebook",url:/^facebook\.com/}]}),this.registry=new r2(t.locale,t.config.get("mediaEmbed"))}static get pluginName(){return"MediaEmbedEditing"}init(){const t=this.editor,e=t.model.schema,n=t.t,i=t.conversion,r=t.config.get("mediaEmbed.previewsInData"),s=t.config.get("mediaEmbed.elementName"),a=this.registry;t.commands.add("mediaEmbed",new i2(t)),e.register("media",{inheritAllFrom:"$blockObject",allowAttributes:["url"]}),i.for("dataDowncast").elementToStructure({model:"media",view:(c,{writer:l})=>{const d=c.getAttribute("url");return sf(l,a,d,{elementName:s,renderMediaPreview:!!d&&r})}}),i.for("dataDowncast").add(rf(a,{elementName:s,renderMediaPreview:r})),i.for("editingDowncast").elementToStructure({model:"media",view:(c,{writer:l})=>{const d=c.getAttribute("url");return function(h,u,g){return u.setCustomProperty("media",!0,h),aa(h,u,{label:g})}(sf(l,a,d,{elementName:s,renderForEditingView:!0}),l,n("media widget"))}}),i.for("editingDowncast").add(rf(a,{elementName:s,renderForEditingView:!0})),i.for("upcast").elementToElement({view:c=>["oembed",s].includes(c.name)&&c.getAttribute("url")?{name:!0}:null,model:(c,{writer:l})=>{const d=c.getAttribute("url");return a.hasMedia(d)?l.createElement("media",{url:d}):null}}).elementToElement({view:{name:"div",attributes:{"data-oembed-url":!0}},model:(c,{writer:l})=>{const d=c.getAttribute("data-oembed-url");return a.hasMedia(d)?l.createElement("media",{url:d}):null}}).add(c=>{c.on("element:figure",(l,d,h)=>{if(!h.consumable.consume(d.viewItem,{name:!0,classes:"media"}))return;const{modelRange:u,modelCursor:g}=h.convertChildren(d.viewItem,d.modelCursor);d.modelRange=u,d.modelCursor=g,Wt(u.getItems())||h.consumable.revert(d.viewItem,{name:!0,classes:"media"})})})}}const a2=/^(?:http(s)?:\/\/)?[\w-]+\.[\w-.~:/?#[\]@!$&'()*+,;=%]+$/;class c2 extends R{constructor(t){super(t),this._timeoutId=null,this._positionToInsert=null}static get requires(){return[Pg,sn,jg]}static get pluginName(){return"AutoMediaEmbed"}init(){const t=this.editor,e=t.model.document,n=t.plugins.get("ClipboardPipeline");this.listenTo(n,"inputTransformation",()=>{const i=e.selection.getFirstRange(),r=Zt.fromPosition(i.start);r.stickiness="toPrevious";const s=Zt.fromPosition(i.end);s.stickiness="toNext",e.once("change:data",()=>{this._embedMediaBetweenPositions(r,s),r.detach(),s.detach()},{priority:"high"})}),t.commands.get("undo").on("execute",()=>{this._timeoutId&&($.window.clearTimeout(this._timeoutId),this._positionToInsert.detach(),this._timeoutId=null,this._positionToInsert=null)},{priority:"high"})}_embedMediaBetweenPositions(t,e){const n=this.editor,i=n.plugins.get(xr).registry,r=new pe(t,e),s=r.getWalker({ignoreElementEnd:!0});let a="";for(const c of s)c.item.is("$textProxy")&&(a+=c.item.data);if(a=a.trim(),!a.match(a2)||!i.hasMedia(a))return void r.detach();n.commands.get("mediaEmbed").isEnabled?(this._positionToInsert=Zt.fromPosition(t),this._timeoutId=$.window.setTimeout(()=>{n.model.change(c=>{this._timeoutId=null,c.remove(r),r.detach();let l=null;this._positionToInsert.root.rootName!=="$graveyard"&&(l=this._positionToInsert),cf(n.model,a,l,!1),this._positionToInsert.detach(),this._positionToInsert=null}),n.plugins.get(sn).requestUndoOnBackspace()},100)):r.detach()}}var hf=N(8776),l2={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(hf.c,l2),hf.c.locals;class d2 extends tt{constructor(t,e){super(e);const n=e.t;this.focusTracker=new Qt,this.keystrokes=new ie,this.set("mediaURLInputValue",""),this.urlInputView=this._createUrlInput(),this.saveButtonView=this._createButton(n("Save"),ot.check,"ck-button-save"),this.saveButtonView.type="submit",this.saveButtonView.bind("isEnabled").to(this,"mediaURLInputValue",i=>!!i),this.cancelButtonView=this._createButton(n("Cancel"),ot.cancel,"ck-button-cancel","cancel"),this._focusables=new Ce,this._focusCycler=new _e({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this._validators=t,this.setTemplate({tag:"form",attributes:{class:["ck","ck-media-form","ck-responsive-form"],tabindex:"-1"},children:[this.urlInputView,this.saveButtonView,this.cancelButtonView]})}render(){super.render(),m({view:this}),[this.urlInputView,this.saveButtonView,this.cancelButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element);const t=e=>e.stopPropagation();this.keystrokes.set("arrowright",t),this.keystrokes.set("arrowleft",t),this.keystrokes.set("arrowup",t),this.keystrokes.set("arrowdown",t)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}get url(){return this.urlInputView.fieldView.element.value.trim()}set url(t){this.urlInputView.fieldView.element.value=t.trim()}isValid(){this.resetFormStatus();for(const t of this._validators){const e=t(this);if(e)return this.urlInputView.errorText=e,!1}return!0}resetFormStatus(){this.urlInputView.errorText=null,this.urlInputView.infoText=this._urlInputViewInfoDefault}_createUrlInput(){const t=this.locale.t,e=new Pi(this.locale,er),n=e.fieldView;return this._urlInputViewInfoDefault=t("Paste the media URL in the input."),this._urlInputViewInfoTip=t("Tip: Paste the URL into the content to embed faster."),e.label=t("Media URL"),e.infoText=this._urlInputViewInfoDefault,n.on("input",()=>{e.infoText=n.element.value?this._urlInputViewInfoTip:this._urlInputViewInfoDefault,this.mediaURLInputValue=n.element.value.trim()}),e}_createButton(t,e,n,i){const r=new wt(this.locale);return r.set({label:t,icon:e,tooltip:!0}),r.extendTemplate({attributes:{class:n}}),i&&r.delegate("execute").to(this,i),r}}class h2 extends R{static get requires(){return[xr]}static get pluginName(){return"MediaEmbedUI"}init(){const t=this.editor,e=t.commands.get("mediaEmbed");t.ui.componentFactory.add("mediaEmbed",n=>{const i=rn(n);return this._setUpDropdown(i,e),i})}_setUpDropdown(t,e){const n=this.editor,i=n.t,r=t.buttonView,s=n.plugins.get(xr).registry;t.once("change:isOpen",()=>{const a=new(x(d2))(function(c,l){return[d=>{if(!d.url.length)return c("The URL must not be empty.")},d=>{if(!l.hasMedia(d.url))return c("This media URL is not supported.")}]}(n.t,s),n.locale);t.panelView.children.add(a),r.on("open",()=>{a.disableCssTransitions(),a.url=e.value||"",a.urlInputView.fieldView.select(),a.enableCssTransitions()},{priority:"low"}),t.on("submit",()=>{a.isValid()&&(n.execute("mediaEmbed",a.url),n.editing.view.focus())}),t.on("change:isOpen",()=>a.resetFormStatus()),t.on("cancel",()=>{n.editing.view.focus()}),a.delegate("submit","cancel").to(t),a.urlInputView.fieldView.bind("value").to(e,"value"),a.urlInputView.bind("isEnabled").to(e,"isEnabled")}),t.bind("isEnabled").to(e),r.set({label:i("Insert media"),icon:'',tooltip:!0})}}var uf=N(9460),u2={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(uf.c,u2),uf.c.locals;function g2(o,t){if(!o.childCount)return;const e=new on(o.document),n=function(s,a){const c=a.createRangeIn(s),l=new Ne({name:/^p|h\d+$/,styles:{"mso-list":/.*/}}),d=[];for(const h of c)if(h.type==="elementStart"&&l.match(h.item)){const u=m2(h.item);d.push({element:h.item,id:u.id,order:u.order,indent:u.indent})}return d}(o,e);if(!n.length)return;let i=null,r=1;n.forEach((s,a)=>{const c=function(p,k){if(!p)return!0;if(p.id!==k.id)return k.indent-p.indent!=1;const b=k.element.previousSibling;if(!b)return!0;return A=b,!(A.is("element","ol")||A.is("element","ul"));var A}(n[a-1],s),l=c?null:n[a-1],d=(u=s,(h=l)?u.indent-h.indent:u.indent-1);var h,u;if(c&&(i=null,r=1),!i||d!==0){const p=function(k,b){const A=new RegExp(`@list l${k.id}:level${k.indent}\\s*({[^}]*)`,"gi"),E=/mso-level-number-format:([^;]{0,100});/gi,M=/mso-level-start-at:\s{0,100}([0-9]{0,10})\s{0,100};/gi,z=A.exec(b);let G="decimal",et="ol",st=null;if(z&&z[1]){const Lt=E.exec(z[1]);if(Lt&&Lt[1]&&(G=Lt[1].trim(),et=G!=="bullet"&&G!=="image"?"ol":"ul"),G==="bullet"){const Ot=function(vo){const Ze=function(ln){if(ln.getChild(0).is("$text"))return null;for(const dn of ln.getChildren()){if(!dn.is("element","span"))continue;const Yn=dn.getChild(0);if(Yn)return Yn.is("$text")?Yn:Yn.getChild(0)}return null}(vo);if(!Ze)return null;const Ee=Ze._data;return Ee==="o"?"circle":Ee==="·"?"disc":Ee==="§"?"square":null}(k.element);Ot&&(G=Ot)}else{const Ot=M.exec(z[1]);Ot&&Ot[1]&&(st=parseInt(Ot[1]))}}return{type:et,startIndex:st,style:p2(G)}}(s,t);if(i){if(s.indent>r){const k=i.getChild(i.childCount-1),b=k.getChild(k.childCount-1);i=gf(p,b,e),r+=1}else if(s.indent1&&e.setAttribute("start",o.startIndex,i),i}function m2(o){const t={},e=o.getStyle("mso-list");if(e){const n=e.match(/(^|\s{1,100})l(\d+)/i),i=e.match(/\s{0,100}lfo(\d+)/i),r=e.match(/\s{0,100}level(\d+)/i);n&&i&&r&&(t.id=n[2],t.order=i[1],t.indent=parseInt(r[1]))}return t}function f2(o,t){if(!o.childCount)return;const e=new on(o.document),n=function(r,s){const a=s.createRangeIn(r),c=new Ne({name:/v:(.+)/}),l=[];for(const d of a){if(d.type!="elementStart")continue;const h=d.item,u=h.previousSibling,g=u&&u.is("element")?u.name:null;c.match(h)&&h.getAttribute("o:gfxdata")&&g!=="v:shapetype"&&l.push(d.item.getAttribute("id"))}return l}(o,e);(function(r,s,a){const c=a.createRangeIn(s),l=new Ne({name:"img"}),d=[];for(const h of c)if(h.item.is("element")&&l.match(h.item)){const u=h.item,g=u.getAttribute("v:shapes")?u.getAttribute("v:shapes").split(" "):[];g.length&&g.every(p=>r.indexOf(p)>-1)?d.push(u):u.getAttribute("src")||d.push(u)}for(const h of d)a.remove(h)})(n,o,e),function(r,s,a){const c=a.createRangeIn(s),l=[];for(const u of c)if(u.type=="elementStart"&&u.item.is("element","v:shape")){const g=u.item.getAttribute("id");if(r.includes(g))continue;d(u.item.parent.getChildren(),g)||l.push(u.item)}for(const u of l){const g={src:h(u)};u.hasAttribute("alt")&&(g.alt=u.getAttribute("alt"));const p=a.createElement("img",g);a.insertChild(u.index+1,p,u.parent)}function d(u,g){for(const p of u)if(p.is("element")&&(p.name=="img"&&p.getAttribute("v:shapes")==g||d(p.getChildren(),g)))return!0;return!1}function h(u){for(const g of u.getChildren())if(g.is("element")&&g.getAttribute("src"))return g.getAttribute("src")}}(n,o,e),function(r,s){const a=s.createRangeIn(r),c=new Ne({name:/v:(.+)/}),l=[];for(const d of a)d.type=="elementStart"&&c.match(d.item)&&l.push(d.item);for(const d of l)s.remove(d)}(o,e);const i=function(r,s){const a=s.createRangeIn(r),c=new Ne({name:"img"}),l=[];for(const d of a)d.item.is("element")&&c.match(d.item)&&d.item.getAttribute("src").startsWith("file://")&&l.push(d.item);return l}(o,e);i.length&&function(r,s,a){if(r.length===s.length)for(let c=0;cString.fromCharCode(parseInt(t,16))).join(""))}const b2=//i,w2=/xmlns:o="urn:schemas-microsoft-com/i;class A2{constructor(t){this.document=t}isActive(t){return b2.test(t)||w2.test(t)}execute(t){const{body:e,stylesString:n}=t._parsedData;g2(e,n),f2(e,t.dataTransfer.getData("text/rtf")),function(i){const r=[],s=new on(i.document);for(const{item:a}of s.createRangeIn(i))if(a.is("element")){for(const c of a.getClassNames())/\bmso/gi.exec(c)&&s.removeClass(c,a);for(const c of a.getStyleNames())/\bmso/gi.exec(c)&&s.removeStyle(c,a);a.is("element","w:sdt")&&r.push(a)}for(const a of r){const c=a.parent,l=c.getChildIndex(a);s.insertChild(l,a.getChildren(),c),s.remove(a)}}(e),t.content=e}}function pf(o,t,e,{blockElements:n,inlineObjectElements:i}){let r=e.createPositionAt(o,t=="forward"?"after":"before");return r=r.getLastMatchingPosition(({item:s})=>s.is("element")&&!n.includes(s.name)&&!i.includes(s.name),{direction:t}),t=="forward"?r.nodeAfter:r.nodeBefore}function mf(o,t){return!!o&&o.is("element")&&t.includes(o.name)}const C2=/id=("|')docs-internal-guid-[-0-9a-f]+("|')/i;class _2{constructor(t){this.document=t}isActive(t){return C2.test(t)}execute(t){const e=new on(this.document),{body:n}=t._parsedData;(function(i,r){for(const s of i.getChildren())if(s.is("element","b")&&s.getStyle("font-weight")==="normal"){const a=i.getChildIndex(s);r.remove(s),r.insertChild(a,s.getChildren(),i)}})(n,e),function(i,r){for(const s of r.createRangeIn(i)){const a=s.item;if(a.is("element","li")){const c=a.getChild(0);c&&c.is("element","p")&&r.unwrapElement(c)}}}(n,e),function(i,r){const s=new Fi(r.document.stylesProcessor),a=new Ui(s,{renderingMode:"data"}),c=a.blockElements,l=a.inlineObjectElements,d=[];for(const h of r.createRangeIn(i)){const u=h.item;if(u.is("element","br")){const g=pf(u,"forward",r,{blockElements:c,inlineObjectElements:l}),p=pf(u,"backward",r,{blockElements:c,inlineObjectElements:l}),k=mf(g,c);(mf(p,c)||k)&&d.push(u)}}for(const h of d)h.hasClass("Apple-interchange-newline")?r.remove(h):r.replace(h,r.createElement("p"))}(n,e),t.content=n}}const v2=/(\s+)<\/span>/g,(t,e)=>e.length===1?" ":Array(e.length+1).join("  ").substr(0,e.length))}function x2(o,t){const e=new DOMParser,n=function(c){return ff(ff(c)).replace(/([^\S\r\n]*?)[\r\n]+([^\S\r\n]*<\/span>)/g,"$1$2").replace(/<\/span>/g,"").replace(/()[\r\n]+(<\/span>)/g,"$1 $2").replace(/ <\//g," <\/o:p>/g," ").replace(/( |\u00A0)<\/o:p>/g,"").replace(/>([^\S\r\n]*[\r\n]\s*)<")}(function(c){const l="",d="",h=c.indexOf(l);if(h<0)return c;const u=c.indexOf(d,h+l.length);return c.substring(0,h+l.length)+(u>=0?c.substring(u):"")}(o=(o=o.replace(//g,"")}(a.getData("text/html")):a.getData("text/plain")&&(((l=(l=a.getData("text/plain")).replace(/&/g,"&").replace(//g,">").replace(/\r?\n\r?\n/g,"

").replace(/\r?\n/g,"
").replace(/\t/g,"    ").replace(/^\s/," ").replace(/\s$/," ").replace(/\s\s/g,"  ")).includes("

")||l.includes("
"))&&(l=`

${l}

`),h=l),c=this.editor.data.htmlProcessor.toView(h)}var l;const d=new H(this,"inputTransformation");this.fire(d,{content:c,dataTransfer:a,targetRanges:s.targetRanges,method:s.method}),d.stop.called&&r.stop(),n.scrollToTheSelection()},{priority:"low"}),this.listenTo(this,"inputTransformation",(r,s)=>{if(s.content.isEmpty)return;const a=this.editor.data.toModel(s.content,"$clipboardHolder");a.childCount!=0&&(r.stop(),e.change(()=>{this.fire("contentInsertion",{content:a,method:s.method,dataTransfer:s.dataTransfer,targetRanges:s.targetRanges})}))},{priority:"low"}),this.listenTo(this,"contentInsertion",(r,s)=>{s.resultRange=e.insertContent(s.content)},{priority:"low"})}_setupCopyCut(){const t=this.editor,e=t.model.document,n=t.editing.view.document,i=(r,s)=>{const a=s.dataTransfer;s.preventDefault(),this._fireOutputTransformationEvent(a,e.selection,r.name)};this.listenTo(n,"copy",i,{priority:"low"}),this.listenTo(n,"cut",(r,s)=>{t.model.canEditAt(t.model.document.selection)?i(r,s):s.preventDefault()},{priority:"low"}),this.listenTo(this,"outputTransformation",(r,s)=>{const a=t.data.toView(s.content);n.fire("clipboardOutput",{dataTransfer:s.dataTransfer,content:a,method:s.method})},{priority:"low"}),this.listenTo(n,"clipboardOutput",(r,s)=>{s.content.isEmpty||(s.dataTransfer.setData("text/html",this.editor.data.htmlProcessor.toData(s.content)),s.dataTransfer.setData("text/plain",$u(s.content))),s.method=="cut"&&t.model.deleteContent(e.selection)},{priority:"low"})}}class Ku{constructor(t,e=20){this._batch=null,this.model=t,this._size=0,this.limit=e,this._isLocked=!1,this._changeCallback=(n,i)=>{i.isLocal&&i.isUndoable&&i!==this._batch&&this._reset(!0)},this._selectionChangeCallback=()=>{this._reset()},this.model.document.on("change",this._changeCallback),this.model.document.selection.on("change:range",this._selectionChangeCallback),this.model.document.selection.on("change:attribute",this._selectionChangeCallback)}get batch(){return this._batch||(this._batch=this.model.createBatch({isTyping:!0})),this._batch}get size(){return this._size}input(t){this._size+=t,this._size>=this.limit&&this._reset(!0)}get isLocked(){return this._isLocked}lock(){this._isLocked=!0}unlock(){this._isLocked=!1}destroy(){this.model.document.off("change",this._changeCallback),this.model.document.selection.off("change:range",this._selectionChangeCallback),this.model.document.selection.off("change:attribute",this._selectionChangeCallback)}_reset(t=!1){this.isLocked&&!t||(this._batch=null,this._size=0)}}class bv extends at{constructor(t,e){super(t),this._buffer=new Ku(t.model,e),this._isEnabledBasedOnSelection=!1}get buffer(){return this._buffer}destroy(){super.destroy(),this._buffer.destroy()}execute(t={}){const e=this.editor.model,n=e.document,i=t.text||"",r=i.length;let s=n.selection;if(t.selection?s=t.selection:t.range&&(s=e.createSelection(t.range)),!e.canEditAt(s))return;const a=t.resultRange;e.enqueueChange(this._buffer.batch,c=>{this._buffer.lock();const l=Array.from(n.selection.getAttributes());e.deleteContent(s),i&&e.insertContent(c.createText(i,l),s),a?c.setSelection(a):s.is("documentSelection")||c.setSelection(s),this._buffer.unlock(),this._buffer.input(r)})}}const Yu=["insertText","insertReplacementText"];class wv extends Ke{constructor(t){super(t),this.focusObserver=t.getObserver(Wi),f.isAndroid&&Yu.push("insertCompositionText");const e=t.document;e.on("beforeinput",(n,i)=>{if(!this.isEnabled)return;const{data:r,targetRanges:s,inputType:a,domEvent:c}=i;if(!Yu.includes(a))return;this.focusObserver.flush();const l=new H(e,"insertText");e.fire(l,new ho(t,c,{text:r,selection:t.createSelection(s)})),l.stop.called&&n.stop()}),e.on("compositionend",(n,{data:i,domEvent:r})=>{this.isEnabled&&!f.isAndroid&&i&&e.fire("insertText",new ho(t,r,{text:i,selection:e.selection}))},{priority:"lowest"})}observe(){}stopObserving(){}}class Qu extends R{static get pluginName(){return"Input"}init(){const t=this.editor,e=t.model,n=t.editing.view,i=e.document.selection;n.addObserver(wv);const r=new bv(t,t.config.get("typing.undoStep")||20);t.commands.add("insertText",r),t.commands.add("input",r),this.listenTo(n.document,"insertText",(s,a)=>{n.document.isComposing||a.preventDefault();const{text:c,selection:l,resultRange:d}=a,h=Array.from(l.getRanges()).map(p=>t.editing.mapper.toModelRange(p));let u=c;if(f.isAndroid){const p=Array.from(h[0].getItems()).reduce((k,b)=>k+(b.is("$textProxy")?b.data:""),"");p&&(p.length<=u.length?u.startsWith(p)&&(u=u.substring(p.length),h[0].start=h[0].start.getShiftedBy(p.length)):p.startsWith(u)&&(h[0].start=h[0].start.getShiftedBy(u.length),u=""))}const g={text:u,selection:e.createSelection(h)};d&&(g.resultRange=t.editing.mapper.toModelRange(d)),t.execute("insertText",g),n.scrollToTheSelection()}),f.isAndroid?this.listenTo(n.document,"keydown",(s,a)=>{!i.isCollapsed&&a.keyCode==229&&n.document.isComposing&&Zu(e,r)}):this.listenTo(n.document,"compositionstart",()=>{i.isCollapsed||Zu(e,r)})}}function Zu(o,t){if(!t.isEnabled)return;const e=t.buffer;e.lock(),o.enqueueChange(e.batch,()=>{o.deleteContent(o.document.selection)}),e.unlock()}class Ju extends at{constructor(t,e){super(t),this.direction=e,this._buffer=new Ku(t.model,t.config.get("typing.undoStep")),this._isEnabledBasedOnSelection=!1}get buffer(){return this._buffer}execute(t={}){const e=this.editor.model,n=e.document;e.enqueueChange(this._buffer.batch,i=>{this._buffer.lock();const r=i.createSelection(t.selection||n.selection);if(!e.canEditAt(r))return;const s=t.sequence||1,a=r.isCollapsed;if(r.isCollapsed&&e.modifySelection(r,{direction:this.direction,unit:t.unit,treatEmojiAsSingleUnit:!0}),this._shouldEntireContentBeReplacedWithParagraph(s))return void this._replaceEntireContentWithParagraph(i);if(this._shouldReplaceFirstBlockWithParagraph(r,s))return void this.editor.execute("paragraph",{selection:r});if(r.isCollapsed)return;let c=0;r.getFirstRange().getMinimalFlatRanges().forEach(l=>{c+=Ft(l.getWalker({singleCharacters:!0,ignoreElementEnd:!0,shallow:!0}))}),e.deleteContent(r,{doNotResetEntireContent:a,direction:this.direction}),this._buffer.input(c),i.setSelection(r),this._buffer.unlock()})}_shouldEntireContentBeReplacedWithParagraph(t){if(t>1)return!1;const e=this.editor.model,n=e.document.selection,i=e.schema.getLimitElement(n);if(!(n.isCollapsed&&n.containsEntireContent(i))||!e.schema.checkChild(i,"paragraph"))return!1;const r=i.getChild(0);return!r||!r.is("element","paragraph")}_replaceEntireContentWithParagraph(t){const e=this.editor.model,n=e.document.selection,i=e.schema.getLimitElement(n),r=t.createElement("paragraph");t.remove(t.createRangeIn(i)),t.insert(r,i),t.setSelection(r,0)}_shouldReplaceFirstBlockWithParagraph(t,e){const n=this.editor.model;if(e>1||this.direction!="backward"||!t.isCollapsed)return!1;const i=t.getFirstPosition(),r=n.schema.getLimitElement(i),s=r.getChild(0);return i.parent==s&&!!t.containsEntireContent(s)&&!!n.schema.checkChild(r,"paragraph")&&s.name!="paragraph"}}const Xu="word",wn="selection",fo="backward",si="forward",tg={deleteContent:{unit:wn,direction:fo},deleteContentBackward:{unit:"codePoint",direction:fo},deleteWordBackward:{unit:Xu,direction:fo},deleteHardLineBackward:{unit:wn,direction:fo},deleteSoftLineBackward:{unit:wn,direction:fo},deleteContentForward:{unit:"character",direction:si},deleteWordForward:{unit:Xu,direction:si},deleteHardLineForward:{unit:wn,direction:si},deleteSoftLineForward:{unit:wn,direction:si}};class Av extends Ke{constructor(t){super(t);const e=t.document;let n=0;e.on("keydown",()=>{n++}),e.on("keyup",()=>{n=0}),e.on("beforeinput",(i,r)=>{if(!this.isEnabled)return;const{targetRanges:s,domEvent:a,inputType:c}=r,l=tg[c];if(!l)return;const d={direction:l.direction,unit:l.unit,sequence:n};d.unit==wn&&(d.selectionToRemove=t.createSelection(s[0])),c==="deleteContentBackward"&&(f.isAndroid&&(d.sequence=1),function(u){if(u.length!=1||u[0].isCollapsed)return!1;const g=u[0].getWalker({direction:"backward",singleCharacters:!0,ignoreElementEnd:!0});let p=0;for(const{nextPosition:k}of g){if(k.parent.is("$text")){const b=k.parent.data,A=k.offset;if(es(b,A)||os(b,A)||il(b,A))continue;p++}else p++;if(p>1)return!0}return!1}(s)&&(d.unit=wn,d.selectionToRemove=t.createSelection(s)));const h=new co(e,"delete",s[0]);e.fire(h,new ho(t,a,d)),h.stop.called&&i.stop()}),f.isBlink&&function(i){const r=i.view,s=r.document;let a=null,c=!1;function l(h){return h==ut.backspace||h==ut.delete}function d(h){return h==ut.backspace?fo:si}s.on("keydown",(h,{keyCode:u})=>{a=u,c=!1}),s.on("keyup",(h,{keyCode:u,domEvent:g})=>{const p=s.selection,k=i.isEnabled&&u==a&&l(u)&&!p.isCollapsed&&!c;if(a=null,k){const b=p.getFirstRange(),A=new co(s,"delete",b),E={unit:wn,direction:d(u),selectionToRemove:p};s.fire(A,new ho(r,g,E))}}),s.on("beforeinput",(h,{inputType:u})=>{const g=tg[u];l(a)&&g&&g.direction==d(a)&&(c=!0)},{priority:"high"}),s.on("beforeinput",(h,{inputType:u,data:g})=>{a==ut.delete&&u=="insertText"&&g==""&&h.stop()},{priority:"high"})}(this)}observe(){}stopObserving(){}}class sn extends R{static get pluginName(){return"Delete"}init(){const t=this.editor,e=t.editing.view,n=e.document,i=t.model.document;e.addObserver(Av),this._undoOnBackspace=!1;const r=new Ju(t,"forward");t.commands.add("deleteForward",r),t.commands.add("forwardDelete",r),t.commands.add("delete",new Ju(t,"backward")),this.listenTo(n,"delete",(s,a)=>{n.isComposing||a.preventDefault();const{direction:c,sequence:l,selectionToRemove:d,unit:h}=a,u=c==="forward"?"deleteForward":"delete",g={sequence:l};if(h=="selection"){const p=Array.from(d.getRanges()).map(k=>t.editing.mapper.toModelRange(k));g.selection=t.model.createSelection(p)}else g.unit=h;t.execute(u,g),e.scrollToTheSelection()},{priority:"low"}),this.editor.plugins.has("UndoEditing")&&(this.listenTo(n,"delete",(s,a)=>{this._undoOnBackspace&&a.direction=="backward"&&a.sequence==1&&a.unit=="codePoint"&&(this._undoOnBackspace=!1,t.execute("undo"),a.preventDefault(),s.stop())},{context:"$capture"}),this.listenTo(i,"change",()=>{this._undoOnBackspace=!1}))}requestUndoOnBackspace(){this.editor.plugins.has("UndoEditing")&&(this._undoOnBackspace=!0)}}class Cv extends R{static get requires(){return[Qu,sn]}static get pluginName(){return"Typing"}}function eg(o,t){let e=o.start;return{text:Array.from(o.getWalker({ignoreElementEnd:!1})).reduce((n,{item:i})=>i.is("$text")||i.is("$textProxy")?n+i.data:(e=t.createPositionAfter(i),""),""),range:t.createRange(e,o.end)}}class ng extends mt(){constructor(t,e){super(),this.model=t,this.testCallback=e,this._hasMatch=!1,this.set("isEnabled",!0),this.on("change:isEnabled",()=>{this.isEnabled?this._startListening():(this.stopListening(t.document.selection),this.stopListening(t.document))}),this._startListening()}get hasMatch(){return this._hasMatch}_startListening(){const t=this.model.document;this.listenTo(t.selection,"change:range",(e,{directChange:n})=>{n&&(t.selection.isCollapsed?this._evaluateTextBeforeSelection("selection"):this.hasMatch&&(this.fire("unmatched"),this._hasMatch=!1))}),this.listenTo(t,"change:data",(e,n)=>{!n.isUndo&&n.isLocal&&this._evaluateTextBeforeSelection("data",{batch:n})})}_evaluateTextBeforeSelection(t,e={}){const n=this.model,i=n.document.selection,r=n.createRange(n.createPositionAt(i.focus.parent,0),i.focus),{text:s,range:a}=eg(r,n),c=this.testCallback(s);if(!c&&this.hasMatch&&this.fire("unmatched"),this._hasMatch=!!c,c){const l=Object.assign(e,{text:s,range:a});typeof c=="object"&&Object.assign(l,c),this.fire(`matched:${t}`,l)}}}class og extends R{constructor(t){super(t),this._isNextGravityRestorationSkipped=!1,this.attributes=new Set,this._overrideUid=null}static get pluginName(){return"TwoStepCaretMovement"}init(){const t=this.editor,e=t.model,n=t.editing.view,i=t.locale,r=e.document.selection;this.listenTo(n.document,"arrowKey",(s,a)=>{if(!r.isCollapsed||a.shiftKey||a.altKey||a.ctrlKey)return;const c=a.keyCode==ut.arrowright,l=a.keyCode==ut.arrowleft;if(!c&&!l)return;const d=i.contentLanguageDirection;let h=!1;h=d==="ltr"&&c||d==="rtl"&&l?this._handleForwardMovement(a):this._handleBackwardMovement(a),h===!0&&s.stop()},{context:"$text",priority:"highest"}),this.listenTo(r,"change:range",(s,a)=>{this._isNextGravityRestorationSkipped?this._isNextGravityRestorationSkipped=!1:this._isGravityOverridden&&(!a.directChange&&ye(r.getFirstPosition(),this.attributes)||this._restoreGravity())}),this._enableClickingAfterNode(),this._enableInsertContentSelectionAttributesFixer(),this._handleDeleteContentAfterNode()}registerAttribute(t){this.attributes.add(t)}_handleForwardMovement(t){const e=this.attributes,n=this.editor.model,i=n.document.selection,r=i.getFirstPosition();return!this._isGravityOverridden&&(!r.isAtStart||!an(i,e))&&!!ye(r,e)&&(ci(t),an(i,e)&&ye(r,e,!0)?ai(n,e):this._overrideGravity(),!0)}_handleBackwardMovement(t){const e=this.attributes,n=this.editor.model,i=n.document.selection,r=i.getFirstPosition();return this._isGravityOverridden?(ci(t),this._restoreGravity(),ye(r,e,!0)?ai(n,e):lr(n,e,r),!0):r.isAtStart?!!an(i,e)&&(ci(t),lr(n,e,r),!0):!an(i,e)&&ye(r,e,!0)?(ci(t),lr(n,e,r),!0):!!ig(r,e)&&(r.isAtEnd&&!an(i,e)&&ye(r,e)?(ci(t),lr(n,e,r),!0):(this._isNextGravityRestorationSkipped=!0,this._overrideGravity(),!1))}_enableClickingAfterNode(){const t=this.editor,e=t.model,n=e.document.selection,i=t.editing.view.document;t.editing.view.addObserver(Gs);let r=!1;this.listenTo(i,"mousedown",()=>{r=!0}),this.listenTo(i,"selectionChange",()=>{const s=this.attributes;if(!r||(r=!1,!n.isCollapsed)||!an(n,s))return;const a=n.getFirstPosition();ye(a,s)&&(a.isAtStart||ye(a,s,!0)?ai(e,s):this._isGravityOverridden||this._overrideGravity())})}_enableInsertContentSelectionAttributesFixer(){const t=this.editor.model,e=t.document.selection,n=this.attributes;this.listenTo(t,"insertContent",()=>{const i=e.getFirstPosition();an(e,n)&&ye(i,n)&&ai(t,n)},{priority:"low"})}_handleDeleteContentAfterNode(){const t=this.editor,e=t.model,n=e.document.selection,i=t.editing.view;let r=!1,s=!1;this.listenTo(i.document,"delete",(a,c)=>{r=c.direction==="backward"},{priority:"high"}),this.listenTo(e,"deleteContent",()=>{if(!r)return;const a=n.getFirstPosition();s=an(n,this.attributes)&&!ig(a,this.attributes)},{priority:"high"}),this.listenTo(e,"deleteContent",()=>{r&&(r=!1,s||t.model.enqueueChange(()=>{const a=n.getFirstPosition();an(n,this.attributes)&&ye(a,this.attributes)&&(a.isAtStart||ye(a,this.attributes,!0)?ai(e,this.attributes):this._isGravityOverridden||this._overrideGravity())}))},{priority:"low"})}get _isGravityOverridden(){return!!this._overrideUid}_overrideGravity(){this._overrideUid=this.editor.model.change(t=>t.overrideSelectionGravity())}_restoreGravity(){this.editor.model.change(t=>{t.restoreSelectionGravity(this._overrideUid),this._overrideUid=null})}}function an(o,t){for(const e of t)if(o.hasAttribute(e))return!0;return!1}function lr(o,t,e){const n=e.nodeBefore;o.change(i=>{if(n){const r=[],s=o.schema.isObject(n)&&o.schema.isInline(n);for(const[a,c]of n.getAttributes())!o.schema.checkAttribute("$text",a)||s&&o.schema.getAttributeProperties(a).copyFromObject===!1||r.push([a,c]);i.setSelectionAttribute(r)}else i.removeSelectionAttribute(t)})}function ai(o,t){o.change(e=>{e.removeSelectionAttribute(t)})}function ci(o){o.preventDefault()}function ig(o,t){return ye(o.getShiftedBy(-1),t)}function ye(o,t,e=!1){const{nodeBefore:n,nodeAfter:i}=o;for(const r of t){const s=n?n.getAttribute(r):void 0,a=i?i.getAttribute(r):void 0;if((!e||s!==void 0&&a!==void 0)&&a!==s)return!0}return!1}const rg={copyright:{from:"(c)",to:"©"},registeredTrademark:{from:"(r)",to:"®"},trademark:{from:"(tm)",to:"™"},oneHalf:{from:/(^|[^/a-z0-9])(1\/2)([^/a-z0-9])$/i,to:[null,"½",null]},oneThird:{from:/(^|[^/a-z0-9])(1\/3)([^/a-z0-9])$/i,to:[null,"⅓",null]},twoThirds:{from:/(^|[^/a-z0-9])(2\/3)([^/a-z0-9])$/i,to:[null,"⅔",null]},oneForth:{from:/(^|[^/a-z0-9])(1\/4)([^/a-z0-9])$/i,to:[null,"¼",null]},threeQuarters:{from:/(^|[^/a-z0-9])(3\/4)([^/a-z0-9])$/i,to:[null,"¾",null]},lessThanOrEqual:{from:"<=",to:"≤"},greaterThanOrEqual:{from:">=",to:"≥"},notEqual:{from:"!=",to:"≠"},arrowLeft:{from:"<-",to:"←"},arrowRight:{from:"->",to:"→"},horizontalEllipsis:{from:"...",to:"…"},enDash:{from:/(^| )(--)( )$/,to:[null,"–",null]},emDash:{from:/(^| )(---)( )$/,to:[null,"—",null]},quotesPrimary:{from:ko('"'),to:[null,"“",null,"”"]},quotesSecondary:{from:ko("'"),to:[null,"‘",null,"’"]},quotesPrimaryEnGb:{from:ko("'"),to:[null,"‘",null,"’"]},quotesSecondaryEnGb:{from:ko('"'),to:[null,"“",null,"”"]},quotesPrimaryPl:{from:ko('"'),to:[null,"„",null,"”"]},quotesSecondaryPl:{from:ko("'"),to:[null,"‚",null,"’"]}},sg={symbols:["copyright","registeredTrademark","trademark"],mathematical:["oneHalf","oneThird","twoThirds","oneForth","threeQuarters","lessThanOrEqual","greaterThanOrEqual","notEqual","arrowLeft","arrowRight"],typography:["horizontalEllipsis","enDash","emDash"],quotes:["quotesPrimary","quotesSecondary"]},_v=["symbols","mathematical","typography","quotes"];function vv(o){return typeof o=="string"?new RegExp(`(${Iu(o)})$`):o}function yv(o){return typeof o=="string"?()=>[o]:o instanceof Array?()=>o:o}function xv(o){return(o.textNode?o.textNode:o.nodeAfter).getAttributes()}function ko(o){return new RegExp(`(^|\\s)(${o})([^${o}]*)(${o})$`)}function dr(o,t,e,n){return n.createRange(ag(o,t,e,!0,n),ag(o,t,e,!1,n))}function ag(o,t,e,n,i){let r=o.textNode||(n?o.nodeBefore:o.nodeAfter),s=null;for(;r&&r.getAttribute(t)==e;)s=r,r=n?r.previousSibling:r.nextSibling;return s?i.createPositionAt(s,n?"before":"after"):o}function*cg(o,t){for(const e of t)e&&o.getAttributeProperties(e[0]).copyOnEnter&&(yield e)}class Ev extends at{execute(){this.editor.model.change(t=>{this.enterBlock(t),this.fire("afterExecute",{writer:t})})}enterBlock(t){const e=this.editor.model,n=e.document.selection,i=e.schema,r=n.isCollapsed,s=n.getFirstRange(),a=s.start.parent,c=s.end.parent;if(i.isLimit(a)||i.isLimit(c))return r||a!=c||e.deleteContent(n),!1;if(r){const l=cg(t.model.schema,n.getAttributes());return lg(t,s.start),t.setSelectionAttribute(l),!0}{const l=!(s.start.isAtStart&&s.end.isAtEnd),d=a==c;if(e.deleteContent(n,{leaveUnmerged:l}),l){if(d)return lg(t,n.focus),!0;t.setSelection(c,0)}}return!1}}function lg(o,t){o.split(t),o.setSelection(t.parent.nextSibling,0)}const Dv={insertParagraph:{isSoft:!1},insertLineBreak:{isSoft:!0}};class dg extends Ke{constructor(t){super(t);const e=this.document;let n=!1;e.on("keydown",(i,r)=>{n=r.shiftKey}),e.on("beforeinput",(i,r)=>{if(!this.isEnabled)return;let s=r.inputType;f.isSafari&&n&&s=="insertParagraph"&&(s="insertLineBreak");const a=r.domEvent,c=Dv[s];if(!c)return;const l=new co(e,"enter",r.targetRanges[0]);e.fire(l,new ho(t,a,{isSoft:c.isSoft})),l.stop.called&&i.stop()})}observe(){}stopObserving(){}}class hr extends R{static get pluginName(){return"Enter"}init(){const t=this.editor,e=t.editing.view,n=e.document;e.addObserver(dg),t.commands.add("enter",new Ev(t)),this.listenTo(n,"enter",(i,r)=>{n.isComposing||r.preventDefault(),r.isSoft||(t.execute("enter"),e.scrollToTheSelection())},{priority:"low"})}}class Iv extends at{execute(){const t=this.editor.model,e=t.document;t.change(n=>{(function(i,r,s){const a=s.isCollapsed,c=s.getFirstRange(),l=c.start.parent,d=c.end.parent,h=l==d;if(a){const u=cg(i.schema,s.getAttributes());hg(i,r,c.end),r.removeSelectionAttribute(s.getAttributeKeys()),r.setSelectionAttribute(u)}else{const u=!(c.start.isAtStart&&c.end.isAtEnd);i.deleteContent(s,{leaveUnmerged:u}),h?hg(i,r,s.focus):u&&r.setSelection(d,0)}})(t,n,e.selection),this.fire("afterExecute",{writer:n})})}refresh(){const t=this.editor.model,e=t.document;this.isEnabled=function(n,i){if(i.rangeCount>1)return!1;const r=i.anchor;if(!r||!n.checkChild(r,"softBreak"))return!1;const s=i.getFirstRange(),a=s.start.parent,c=s.end.parent;return!((ra(a,n)||ra(c,n))&&a!==c)}(t.schema,e.selection)}}function hg(o,t,e){const n=t.createElement("softBreak");o.insertContent(n,e),t.setSelection(n,"after")}function ra(o,t){return!o.is("rootElement")&&(t.isLimit(o)||ra(o.parent,t))}class Sv extends R{static get pluginName(){return"ShiftEnter"}init(){const t=this.editor,e=t.model.schema,n=t.conversion,i=t.editing.view,r=i.document;e.register("softBreak",{allowWhere:"$text",isInline:!0}),n.for("upcast").elementToElement({model:"softBreak",view:"br"}),n.for("downcast").elementToElement({model:"softBreak",view:(s,{writer:a})=>a.createEmptyElement("br")}),i.addObserver(dg),t.commands.add("shiftEnter",new Iv(t)),this.listenTo(r,"enter",(s,a)=>{r.isComposing||a.preventDefault(),a.isSoft&&(t.execute("shiftEnter"),i.scrollToTheSelection())},{priority:"low"})}}class Tv extends kt(){constructor(){super(...arguments),this._stack=[]}add(t,e){const n=this._stack,i=n[0];this._insertDescriptor(t);const r=n[0];i===r||sa(i,r)||this.fire("change:top",{oldDescriptor:i,newDescriptor:r,writer:e})}remove(t,e){const n=this._stack,i=n[0];this._removeDescriptor(t);const r=n[0];i===r||sa(i,r)||this.fire("change:top",{oldDescriptor:i,newDescriptor:r,writer:e})}_insertDescriptor(t){const e=this._stack,n=e.findIndex(r=>r.id===t.id);if(sa(t,e[n]))return;n>-1&&e.splice(n,1);let i=0;for(;e[i]&&Mv(e[i],t);)i++;e.splice(i,0,t)}_removeDescriptor(t){const e=this._stack,n=e.findIndex(i=>i.id===t);n>-1&&e.splice(n,1)}}function sa(o,t){return o&&t&&o.priority==t.priority&&ur(o.classes)==ur(t.classes)}function Mv(o,t){return o.priority>t.priority||!(o.priorityur(t.classes)}function ur(o){return Array.isArray(o)?o.sort().join(","):o}const Bv='',Nv="ck-widget",ug="ck-widget_selected";function qt(o){return!!o.is("element")&&!!o.getCustomProperty("widget")}function aa(o,t,e={}){if(!o.is("containerElement"))throw new _("widget-to-widget-wrong-element-type",null,{element:o});return t.setAttribute("contenteditable","false",o),t.addClass(Nv,o),t.setCustomProperty("widget",!0,o),o.getFillerOffset=Ov,t.setCustomProperty("widgetLabel",[],o),e.label&&function(n,i){n.getCustomProperty("widgetLabel").push(i)}(o,e.label),e.hasSelectionHandle&&function(n,i){const r=i.createUIElement("div",{class:"ck ck-widget__selection-handle"},function(s){const a=this.toDomElement(s),c=new mn;return c.set("content",Bv),c.render(),a.appendChild(c.element),a});i.insert(i.createPositionAt(n,0),r),i.addClass(["ck-widget_with-selection-handle"],n)}(o,t),gg(o,t),o}function Pv(o,t,e){if(t.classes&&e.addClass(Bt(t.classes),o),t.attributes)for(const n in t.attributes)e.setAttribute(n,t.attributes[n],o)}function Lv(o,t,e){if(t.classes&&e.removeClass(Bt(t.classes),o),t.attributes)for(const n in t.attributes)e.removeAttribute(n,o)}function gg(o,t,e=Pv,n=Lv){const i=new Tv;i.on("change:top",(r,s)=>{s.oldDescriptor&&n(o,s.oldDescriptor,s.writer),s.newDescriptor&&e(o,s.newDescriptor,s.writer)}),t.setCustomProperty("addHighlight",(r,s,a)=>i.add(s,a),o),t.setCustomProperty("removeHighlight",(r,s,a)=>i.remove(s,a),o)}function pg(o,t,e={}){return t.addClass(["ck-editor__editable","ck-editor__nested-editable"],o),t.setAttribute("role","textbox",o),e.label&&t.setAttribute("aria-label",e.label,o),t.setAttribute("contenteditable",o.isReadOnly?"false":"true",o),o.on("change:isReadOnly",(n,i,r)=>{t.setAttribute("contenteditable",r?"false":"true",o)}),o.on("change:isFocused",(n,i,r)=>{r?t.addClass("ck-editor__nested-editable_focused",o):t.removeClass("ck-editor__nested-editable_focused",o)}),gg(o,t),o}function mg(o,t){const e=o.getSelectedElement();if(e){const n=An(o);if(n)return t.createRange(t.createPositionAt(e,n))}return t.schema.findOptimalInsertionRange(o)}function Ov(){return null}const cn="widget-type-around";function Un(o,t,e){return!!o&&qt(o)&&!e.isInline(t)}function An(o){return o.getAttribute(cn)}var fg=N(3940),zv={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(fg.c,zv),fg.c.locals;const kg=["before","after"],Rv=new DOMParser().parseFromString('',"image/svg+xml").firstChild,bg="ck-widget__type-around_disabled";class jv extends R{constructor(){super(...arguments),this._currentFakeCaretModelElement=null}static get pluginName(){return"WidgetTypeAround"}static get requires(){return[hr,sn]}init(){const t=this.editor,e=t.editing.view;this.on("change:isEnabled",(n,i,r)=>{e.change(s=>{for(const a of e.document.roots)r?s.removeClass(bg,a):s.addClass(bg,a)}),r||t.model.change(s=>{s.removeSelectionAttribute(cn)})}),this._enableTypeAroundUIInjection(),this._enableInsertingParagraphsOnButtonClick(),this._enableInsertingParagraphsOnEnterKeypress(),this._enableInsertingParagraphsOnTypingKeystroke(),this._enableTypeAroundFakeCaretActivationUsingKeyboardArrows(),this._enableDeleteIntegration(),this._enableInsertContentIntegration(),this._enableInsertObjectIntegration(),this._enableDeleteContentIntegration()}destroy(){super.destroy(),this._currentFakeCaretModelElement=null}_insertParagraph(t,e){const n=this.editor,i=n.editing.view,r=n.model.schema.getAttributesWithProperty(t,"copyOnReplace",!0);n.execute("insertParagraph",{position:n.model.createPositionAt(t,e),attributes:r}),i.focus(),i.scrollToTheSelection()}_listenToIfEnabled(t,e,n,i){this.listenTo(t,e,(...r)=>{this.isEnabled&&n(...r)},i)}_insertParagraphAccordingToFakeCaretPosition(){const t=this.editor.model.document.selection,e=An(t);if(!e)return!1;const n=t.getSelectedElement();return this._insertParagraph(n,e),!0}_enableTypeAroundUIInjection(){const t=this.editor,e=t.model.schema,n=t.locale.t,i={before:n("Insert paragraph before block"),after:n("Insert paragraph after block")};t.editing.downcastDispatcher.on("insert",(r,s,a)=>{const c=a.mapper.toViewElement(s.item);c&&Un(c,s.item,e)&&(function(l,d,h){const u=l.createUIElement("div",{class:"ck ck-reset_all ck-widget__type-around"},function(g){const p=this.toDomElement(g);return function(k,b){for(const A of kg){const E=new Be({tag:"div",attributes:{class:["ck","ck-widget__type-around__button",`ck-widget__type-around__button_${A}`],title:b[A],"aria-hidden":"true"},children:[k.ownerDocument.importNode(Rv,!0)]});k.appendChild(E.render())}}(p,d),function(k){const b=new Be({tag:"div",attributes:{class:["ck","ck-widget__type-around__fake-caret"]}});k.appendChild(b.render())}(p),p});l.insert(l.createPositionAt(h,"end"),u)}(a.writer,i,c),c.getCustomProperty("widgetLabel").push(()=>this.isEnabled?n("Press Enter to type after or press Shift + Enter to type before the widget"):""))},{priority:"low"})}_enableTypeAroundFakeCaretActivationUsingKeyboardArrows(){const t=this.editor,e=t.model,n=e.document.selection,i=e.schema,r=t.editing.view;function s(a){return`ck-widget_type-around_show-fake-caret_${a}`}this._listenToIfEnabled(r.document,"arrowKey",(a,c)=>{this._handleArrowKeyPress(a,c)},{context:[qt,"$text"],priority:"high"}),this._listenToIfEnabled(n,"change:range",(a,c)=>{c.directChange&&t.model.change(l=>{l.removeSelectionAttribute(cn)})}),this._listenToIfEnabled(e.document,"change:data",()=>{const a=n.getSelectedElement();a&&Un(t.editing.mapper.toViewElement(a),a,i)||t.model.change(c=>{c.removeSelectionAttribute(cn)})}),this._listenToIfEnabled(t.editing.downcastDispatcher,"selection",(a,c,l)=>{const d=l.writer;if(this._currentFakeCaretModelElement){const p=l.mapper.toViewElement(this._currentFakeCaretModelElement);p&&(d.removeClass(kg.map(s),p),this._currentFakeCaretModelElement=null)}const h=c.selection.getSelectedElement();if(!h)return;const u=l.mapper.toViewElement(h);if(!Un(u,h,i))return;const g=An(c.selection);g&&(d.addClass(s(g),u),this._currentFakeCaretModelElement=h)}),this._listenToIfEnabled(t.ui.focusTracker,"change:isFocused",(a,c,l)=>{l||t.model.change(d=>{d.removeSelectionAttribute(cn)})})}_handleArrowKeyPress(t,e){const n=this.editor,i=n.model,r=i.document.selection,s=i.schema,a=n.editing.view,c=function(h,u){const g=Xr(h,u);return g==="down"||g==="right"}(e.keyCode,n.locale.contentLanguageDirection),l=a.document.selection.getSelectedElement();let d;Un(l,n.editing.mapper.toModelElement(l),s)?d=this._handleArrowKeyPressOnSelectedWidget(c):r.isCollapsed?d=this._handleArrowKeyPressWhenSelectionNextToAWidget(c):e.shiftKey||(d=this._handleArrowKeyPressWhenNonCollapsedSelection(c)),d&&(e.preventDefault(),t.stop())}_handleArrowKeyPressOnSelectedWidget(t){const e=this.editor.model,n=An(e.document.selection);return e.change(i=>n?n!==(t?"after":"before")?(i.removeSelectionAttribute(cn),!0):!1:(i.setSelectionAttribute(cn,t?"after":"before"),!0))}_handleArrowKeyPressWhenSelectionNextToAWidget(t){const e=this.editor,n=e.model,i=n.schema,r=e.plugins.get("Widget"),s=r._getObjectElementNextToSelection(t);return!!Un(e.editing.mapper.toViewElement(s),s,i)&&(n.change(a=>{r._setSelectionOverElement(s),a.setSelectionAttribute(cn,t?"before":"after")}),!0)}_handleArrowKeyPressWhenNonCollapsedSelection(t){const e=this.editor,n=e.model,i=n.schema,r=e.editing.mapper,s=n.document.selection,a=t?s.getLastPosition().nodeBefore:s.getFirstPosition().nodeAfter;return!!Un(r.toViewElement(a),a,i)&&(n.change(c=>{c.setSelection(a,"on"),c.setSelectionAttribute(cn,t?"after":"before")}),!0)}_enableInsertingParagraphsOnButtonClick(){const t=this.editor,e=t.editing.view;this._listenToIfEnabled(e.document,"mousedown",(n,i)=>{const r=i.domTarget.closest(".ck-widget__type-around__button");if(!r)return;const s=function(l){return l.classList.contains("ck-widget__type-around__button_before")?"before":"after"}(r),a=function(l,d){const h=l.closest(".ck-widget");return d.mapDomToView(h)}(r,e.domConverter),c=t.editing.mapper.toModelElement(a);this._insertParagraph(c,s),i.preventDefault(),n.stop()})}_enableInsertingParagraphsOnEnterKeypress(){const t=this.editor,e=t.model.document.selection,n=t.editing.view;this._listenToIfEnabled(n.document,"enter",(i,r)=>{if(i.eventPhase!="atTarget")return;const s=e.getSelectedElement(),a=t.editing.mapper.toViewElement(s),c=t.model.schema;let l;this._insertParagraphAccordingToFakeCaretPosition()?l=!0:Un(a,s,c)&&(this._insertParagraph(s,r.isSoft?"before":"after"),l=!0),l&&(r.preventDefault(),i.stop())},{context:qt})}_enableInsertingParagraphsOnTypingKeystroke(){const t=this.editor.editing.view.document;this._listenToIfEnabled(t,"insertText",(e,n)=>{this._insertParagraphAccordingToFakeCaretPosition()&&(n.selection=t.selection)},{priority:"high"}),f.isAndroid?this._listenToIfEnabled(t,"keydown",(e,n)=>{n.keyCode==229&&this._insertParagraphAccordingToFakeCaretPosition()}):this._listenToIfEnabled(t,"compositionstart",()=>{this._insertParagraphAccordingToFakeCaretPosition()},{priority:"high"})}_enableDeleteIntegration(){const t=this.editor,e=t.editing.view,n=t.model,i=n.schema;this._listenToIfEnabled(e.document,"delete",(r,s)=>{if(r.eventPhase!="atTarget")return;const a=An(n.document.selection);if(!a)return;const c=s.direction,l=n.document.selection.getSelectedElement(),d=c=="forward";if(a==="before"===d)t.execute("delete",{selection:n.createSelection(l,"on")});else{const h=i.getNearestSelectionRange(n.createPositionAt(l,a),c);if(h)if(h.isCollapsed){const u=n.createSelection(h.start);if(n.modifySelection(u,{direction:c}),u.focus.isEqual(h.start)){const g=function(p,k){let b=k;for(const A of k.getAncestors({parentFirst:!0})){if(A.childCount>1||p.isLimit(A))break;b=A}return b}(i,h.start.parent);n.deleteContent(n.createSelection(g,"on"),{doNotAutoparagraph:!0})}else n.change(g=>{g.setSelection(h),t.execute(d?"deleteForward":"delete")})}else n.change(u=>{u.setSelection(h),t.execute(d?"deleteForward":"delete")})}s.preventDefault(),r.stop()},{context:qt})}_enableInsertContentIntegration(){const t=this.editor,e=this.editor.model,n=e.document.selection;this._listenToIfEnabled(t.model,"insertContent",(i,[r,s])=>{if(s&&!s.is("documentSelection"))return;const a=An(n);return a?(i.stop(),e.change(c=>{const l=n.getSelectedElement(),d=e.createPositionAt(l,a),h=c.createSelection(d),u=e.insertContent(r,h);return c.setSelection(h),u})):void 0},{priority:"high"})}_enableInsertObjectIntegration(){const t=this.editor,e=this.editor.model.document.selection;this._listenToIfEnabled(t.model,"insertObject",(n,i)=>{const[,r,s={}]=i;if(r&&!r.is("documentSelection"))return;const a=An(e);a&&(s.findOptimalPosition=a,i[3]=s)},{priority:"high"})}_enableDeleteContentIntegration(){const t=this.editor,e=this.editor.model.document.selection;this._listenToIfEnabled(t.model,"deleteContent",(n,[i])=>{i&&!i.is("documentSelection")||An(e)&&n.stop()},{priority:"high"})}}function Fv(o){const t=o.model;return(e,n)=>{const i=n.keyCode==ut.arrowup,r=n.keyCode==ut.arrowdown,s=n.shiftKey,a=t.document.selection;if(!i&&!r)return;const c=r;if(s&&function(d,h){return!d.isCollapsed&&d.isBackward==h}(a,c))return;const l=function(d,h,u){const g=d.model;if(u){const p=h.isCollapsed?h.focus:h.getLastPosition(),k=wg(g,p,"forward");if(!k)return null;const b=g.createRange(p,k),A=Ag(g.schema,b,"backward");return A?g.createRange(p,A):null}{const p=h.isCollapsed?h.focus:h.getFirstPosition(),k=wg(g,p,"backward");if(!k)return null;const b=g.createRange(k,p),A=Ag(g.schema,b,"forward");return A?g.createRange(A,p):null}}(o,a,c);if(l){if(l.isCollapsed&&(a.isCollapsed||s))return;(l.isCollapsed||function(d,h,u){const g=d.model,p=d.view.domConverter;if(u){const M=g.createSelection(h.start);g.modifySelection(M),M.focus.isAtEnd||h.start.isEqual(M.focus)||(h=g.createRange(M.focus,h.end))}const k=d.mapper.toViewRange(h),b=p.viewRangeToDom(k),A=dt.getDomRangeRects(b);let E;for(const M of A)if(E!==void 0){if(Math.round(M.top)>=E)return!1;E=Math.max(E,Math.round(M.bottom))}else E=Math.round(M.bottom);return!0}(o,l,c))&&(t.change(d=>{const h=c?l.end:l.start;if(s){const u=t.createSelection(a.anchor);u.setFocus(h),d.setSelection(u)}else d.setSelection(h)}),e.stop(),n.preventDefault(),n.stopPropagation())}}}function wg(o,t,e){const n=o.schema,i=o.createRangeIn(t.root),r=e=="forward"?"elementStart":"elementEnd";for(const{previousPosition:s,item:a,type:c}of i.getWalker({startPosition:t,direction:e})){if(n.isLimit(a)&&!n.isInline(a))return s;if(c==r&&n.isBlock(a))return null}return null}function Ag(o,t,e){const n=e=="backward"?t.end:t.start;if(o.checkChild(n,"$text"))return n;for(const{nextPosition:i}of t.getWalker({direction:e}))if(o.checkChild(i,"$text"))return i;return null}var Cg=N(4680),Vv={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Cg.c,Vv),Cg.c.locals;class li extends R{constructor(){super(...arguments),this._previouslySelected=new Set}static get pluginName(){return"Widget"}static get requires(){return[jv,sn]}init(){const t=this.editor,e=t.editing.view,n=e.document;this.editor.editing.downcastDispatcher.on("selection",(i,r,s)=>{const a=s.writer,c=r.selection;if(c.isCollapsed)return;const l=c.getSelectedElement();if(!l)return;const d=t.editing.mapper.toViewElement(l);var h;qt(d)&&s.consumable.consume(c,"selection")&&a.setSelection(a.createRangeOn(d),{fake:!0,label:(h=d,h.getCustomProperty("widgetLabel").reduce((u,g)=>typeof g=="function"?u?u+". "+g():g():u?u+". "+g:g,""))})}),this.editor.editing.downcastDispatcher.on("selection",(i,r,s)=>{this._clearPreviouslySelectedWidgets(s.writer);const a=s.writer,c=a.document.selection;let l=null;for(const d of c.getRanges())for(const h of d){const u=h.item;qt(u)&&!Hv(u,l)&&(a.addClass(ug,u),this._previouslySelected.add(u),l=u)}},{priority:"low"}),e.addObserver(Gs),this.listenTo(n,"mousedown",(...i)=>this._onMousedown(...i)),this.listenTo(n,"arrowKey",(...i)=>{this._handleSelectionChangeOnArrowKeyPress(...i)},{context:[qt,"$text"]}),this.listenTo(n,"arrowKey",(...i)=>{this._preventDefaultOnArrowKeyPress(...i)},{context:"$root"}),this.listenTo(n,"arrowKey",Fv(this.editor.editing),{context:"$text"}),this.listenTo(n,"delete",(i,r)=>{this._handleDelete(r.direction=="forward")&&(r.preventDefault(),i.stop())},{context:"$root"})}_onMousedown(t,e){const n=this.editor,i=n.editing.view,r=i.document;let s=e.target;if(e.domEvent.detail>=3)return void(this._selectBlockContent(s)&&e.preventDefault());if(function(c){let l=c;for(;l;){if(l.is("editableElement")&&!l.is("rootElement"))return!0;if(qt(l))return!1;l=l.parent}return!1}(s)||!qt(s)&&(s=s.findAncestor(qt),!s))return;f.isAndroid&&e.preventDefault(),r.isFocused||i.focus();const a=n.editing.mapper.toModelElement(s);this._setSelectionOverElement(a)}_selectBlockContent(t){const e=this.editor,n=e.model,i=e.editing.mapper,r=n.schema,s=i.findMappedViewAncestor(this.editor.editing.view.createPositionAt(t,0)),a=function(c,l){for(const d of c.getAncestors({includeSelf:!0,parentFirst:!0})){if(l.checkChild(d,"$text"))return d;if(l.isLimit(d)&&!l.isObject(d))break}return null}(i.toModelElement(s),n.schema);return!!a&&(n.change(c=>{const l=r.isLimit(a)?null:function(u,g){const p=new tn({startPosition:u});for(const{item:k}of p){if(g.isLimit(k)||!k.is("element"))return null;if(g.checkChild(k,"$text"))return k}return null}(c.createPositionAfter(a),r),d=c.createPositionAt(a,0),h=l?c.createPositionAt(l,0):c.createPositionAt(a,"end");c.setSelection(c.createRange(d,h))}),!0)}_handleSelectionChangeOnArrowKeyPress(t,e){const n=e.keyCode,i=this.editor.model,r=i.schema,s=i.document.selection,a=s.getSelectedElement(),c=Xr(n,this.editor.locale.contentLanguageDirection),l=c=="down"||c=="right",d=c=="up"||c=="down";if(a&&r.isObject(a)){const u=l?s.getLastPosition():s.getFirstPosition(),g=r.getNearestSelectionRange(u,l?"forward":"backward");return void(g&&(i.change(p=>{p.setSelection(g)}),e.preventDefault(),t.stop()))}if(!s.isCollapsed&&!e.shiftKey){const u=s.getFirstPosition(),g=s.getLastPosition(),p=u.nodeAfter,k=g.nodeBefore;return void((p&&r.isObject(p)||k&&r.isObject(k))&&(i.change(b=>{b.setSelection(l?g:u)}),e.preventDefault(),t.stop()))}if(!s.isCollapsed)return;const h=this._getObjectElementNextToSelection(l);if(h&&r.isObject(h)){if(r.isInline(h)&&d)return;this._setSelectionOverElement(h),e.preventDefault(),t.stop()}}_preventDefaultOnArrowKeyPress(t,e){const n=this.editor.model,i=n.schema,r=n.document.selection.getSelectedElement();r&&i.isObject(r)&&(e.preventDefault(),t.stop())}_handleDelete(t){const e=this.editor.model.document.selection;if(!this.editor.model.canEditAt(e)||!e.isCollapsed)return;const n=this._getObjectElementNextToSelection(t);return n?(this.editor.model.change(i=>{let r=e.anchor.parent;for(;r.isEmpty;){const s=r;r=s.parent,i.remove(s)}this._setSelectionOverElement(n)}),!0):void 0}_setSelectionOverElement(t){this.editor.model.change(e=>{e.setSelection(e.createRangeOn(t))})}_getObjectElementNextToSelection(t){const e=this.editor.model,n=e.schema,i=e.document.selection,r=e.createSelection(i);if(e.modifySelection(r,{direction:t?"forward":"backward"}),r.isEqual(i))return null;const s=t?r.focus.nodeBefore:r.focus.nodeAfter;return s&&n.isObject(s)?s:null}_clearPreviouslySelectedWidgets(t){for(const e of this._previouslySelected)t.removeClass(ug,e);this._previouslySelected.clear()}}function Hv(o,t){return!!t&&Array.from(o.getAncestors()).includes(t)}class gr extends R{constructor(){super(...arguments),this._toolbarDefinitions=new Map}static get requires(){return[rr]}static get pluginName(){return"WidgetToolbarRepository"}init(){const t=this.editor;if(t.plugins.has("BalloonToolbar")){const e=t.plugins.get("BalloonToolbar");this.listenTo(e,"show",n=>{(function(i){const r=i.getSelectedElement();return!(!r||!qt(r))})(t.editing.view.document.selection)&&n.stop()},{priority:"high"})}this._balloon=this.editor.plugins.get("ContextualBalloon"),this.on("change:isEnabled",()=>{this._updateToolbarsVisibility()}),this.listenTo(t.ui,"update",()=>{this._updateToolbarsVisibility()}),this.listenTo(t.ui.focusTracker,"change:isFocused",()=>{this._updateToolbarsVisibility()},{priority:"low"})}destroy(){super.destroy();for(const t of this._toolbarDefinitions.values())t.view.destroy()}register(t,{ariaLabel:e,items:n,getRelatedElement:i,balloonClassName:r="ck-toolbar-container"}){if(!n.length)return void Q("widget-toolbar-no-items",{toolbarId:t});const s=this.editor,a=s.t,c=new $s(s.locale);if(c.ariaLabel=e||a("Widget toolbar"),this._toolbarDefinitions.has(t))throw new _("widget-toolbar-duplicated",this,{toolbarId:t});const l={view:c,getRelatedElement:i,balloonClassName:r,itemsConfig:n,initialized:!1};s.ui.addToolbar(c,{isContextual:!0,beforeFocus:()=>{const d=i(s.editing.view.document.selection);d&&this._showToolbar(l,d)},afterBlur:()=>{this._hideToolbar(l)}}),this._toolbarDefinitions.set(t,l)}_updateToolbarsVisibility(){let t=0,e=null,n=null;for(const i of this._toolbarDefinitions.values()){const r=i.getRelatedElement(this.editor.editing.view.document.selection);if(this.isEnabled&&r)if(this.editor.ui.focusTracker.isFocused){const s=r.getAncestors().length;s>t&&(t=s,e=r,n=i)}else this._isToolbarVisible(i)&&this._hideToolbar(i);else this._isToolbarInBalloon(i)&&this._hideToolbar(i)}n&&this._showToolbar(n,e)}_hideToolbar(t){this._balloon.remove(t.view),this.stopListening(this._balloon,"change:visibleView")}_showToolbar(t,e){this._isToolbarVisible(t)?_g(this.editor,e):this._isToolbarInBalloon(t)||(t.initialized||(t.initialized=!0,t.view.fillFromConfig(t.itemsConfig,this.editor.ui.componentFactory)),this._balloon.add({view:t.view,position:vg(this.editor,e),balloonClassName:t.balloonClassName}),this.listenTo(this._balloon,"change:visibleView",()=>{for(const n of this._toolbarDefinitions.values())if(this._isToolbarVisible(n)){const i=n.getRelatedElement(this.editor.editing.view.document.selection);_g(this.editor,i)}}))}_isToolbarVisible(t){return this._balloon.visibleView===t.view}_isToolbarInBalloon(t){return this._balloon.hasView(t.view)}}function _g(o,t){const e=o.plugins.get("ContextualBalloon"),n=vg(o,t);e.updatePosition(n)}function vg(o,t){const e=o.editing.view,n=ae.defaultPositions;return{target:e.domConverter.mapViewToDom(t),positions:[n.northArrowSouth,n.northArrowSouthWest,n.northArrowSouthEast,n.southArrowNorth,n.southArrowNorthWest,n.southArrowNorthEast,n.viewportStickyNorth]}}var yg=N(9444),Uv={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(yg.c,Uv),yg.c.locals;const ca=ro("px");class qv extends tt{constructor(){super();const t=this.bindTemplate;this.set({isVisible:!1,left:null,top:null,width:null}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-clipboard-drop-target-line",t.if("isVisible","ck-hidden",e=>!e)],style:{left:t.to("left",e=>ca(e)),top:t.to("top",e=>ca(e)),width:t.to("width",e=>ca(e))}}})}}class pr extends R{constructor(){super(...arguments),this.removeDropMarkerDelayed=ts(()=>this.removeDropMarker(),40),this._updateDropMarkerThrottled=or(t=>this._updateDropMarker(t),40),this._reconvertMarkerThrottled=or(()=>{this.editor.model.markers.has("drop-target")&&this.editor.editing.reconvertMarker("drop-target")},0),this._dropTargetLineView=new qv,this._domEmitter=new(Ae()),this._scrollables=new Map}static get pluginName(){return"DragDropTarget"}init(){this._setupDropMarker()}destroy(){this._domEmitter.stopListening();for(const{resizeObserver:t}of this._scrollables.values())t.destroy();return this._updateDropMarkerThrottled.cancel(),this.removeDropMarkerDelayed.cancel(),this._reconvertMarkerThrottled.cancel(),super.destroy()}updateDropMarker(t,e,n,i,r,s){this.removeDropMarkerDelayed.cancel();const a=xg(this.editor,t,e,n,i,r,s);if(a)return s&&s.containsRange(a)?this.removeDropMarker():void this._updateDropMarkerThrottled(a)}getFinalDropRange(t,e,n,i,r,s){const a=xg(this.editor,t,e,n,i,r,s);return this.removeDropMarker(),a}removeDropMarker(){const t=this.editor.model;this.removeDropMarkerDelayed.cancel(),this._updateDropMarkerThrottled.cancel(),this._dropTargetLineView.isVisible=!1,t.markers.has("drop-target")&&t.change(e=>{e.removeMarker("drop-target")})}_setupDropMarker(){const t=this.editor;t.ui.view.body.add(this._dropTargetLineView),t.conversion.for("editingDowncast").markerToHighlight({model:"drop-target",view:{classes:["ck-clipboard-drop-target-range"]}}),t.conversion.for("editingDowncast").markerToElement({model:"drop-target",view:(e,{writer:n})=>{if(t.model.schema.checkChild(e.markerRange.start,"$text"))return this._dropTargetLineView.isVisible=!1,this._createDropTargetPosition(n);e.markerRange.isCollapsed?this._updateDropTargetLine(e.markerRange):this._dropTargetLineView.isVisible=!1}})}_updateDropMarker(t){const e=this.editor,n=e.model.markers;e.model.change(i=>{n.has("drop-target")?n.get("drop-target").getRange().isEqual(t)||i.updateMarker("drop-target",{range:t}):i.addMarker("drop-target",{range:t,usingOperation:!1,affectsData:!1})})}_createDropTargetPosition(t){return t.createUIElement("span",{class:"ck ck-clipboard-drop-target-position"},function(e){const n=this.toDomElement(e);return n.append("⁠",e.createElement("span"),"⁠"),n})}_updateDropTargetLine(t){const e=this.editor.editing,n=t.start.nodeBefore,i=t.start.nodeAfter,r=t.start.parent,s=n?e.mapper.toViewElement(n):null,a=s?e.view.domConverter.mapViewToDom(s):null,c=i?e.mapper.toViewElement(i):null,l=c?e.view.domConverter.mapViewToDom(c):null,d=e.mapper.toViewElement(r);if(!d)return;const h=e.view.domConverter.mapViewToDom(d),u=this._getScrollableRect(d),{scrollX:g,scrollY:p}=$.window,k=a?new dt(a):null,b=l?new dt(l):null,A=new dt(h).excludeScrollbarsAndBorders(),E=k?k.bottom:A.top,M=b?b.top:A.bottom,z=$.window.getComputedStyle(h),G=E<=M?(E+M)/2:M;if(u.topa.schema.checkChild(h,u))){if(a.schema.checkChild(h,"$text"))return a.createRange(h);if(d)return mr(o,Dg(o,d.parent),n,i)}}}else if(a.schema.isInline(l))return mr(o,l,n,i)}if(a.schema.isBlock(l))return mr(o,l,n,i);if(a.schema.checkChild(l,"$block")){const d=Array.from(l.getChildren()).filter(g=>g.is("element")&&!Gv(o,g));let h=0,u=d.length;if(u==0)return a.createRange(a.createPositionAt(l,"end"));for(;ht in o?Wv(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;class Zv extends R{constructor(){super(...arguments),this._isBlockDragging=!1,this._domEmitter=new(Ae())}static get pluginName(){return"DragDropBlockToolbar"}init(){const t=this.editor;if(this.listenTo(t,"change:isReadOnly",(e,n,i)=>{i?(this.forceDisabled("readOnlyMode"),this._isBlockDragging=!1):this.clearForceDisabled("readOnlyMode")}),f.isAndroid&&this.forceDisabled("noAndroidSupport"),t.plugins.has("BlockToolbar")){const e=t.plugins.get("BlockToolbar").buttonView.element;this._domEmitter.listenTo(e,"dragstart",(n,i)=>this._handleBlockDragStart(i)),this._domEmitter.listenTo($.document,"dragover",(n,i)=>this._handleBlockDragging(i)),this._domEmitter.listenTo($.document,"drop",(n,i)=>this._handleBlockDragging(i)),this._domEmitter.listenTo($.document,"dragend",()=>this._handleBlockDragEnd(),{useCapture:!0}),this.isEnabled&&e.setAttribute("draggable","true"),this.on("change:isEnabled",(n,i,r)=>{e.setAttribute("draggable",r?"true":"false")})}}destroy(){return this._domEmitter.stopListening(),super.destroy()}_handleBlockDragStart(t){if(!this.isEnabled)return;const e=this.editor.model,n=e.document.selection,i=this.editor.editing.view,r=Array.from(n.getSelectedBlocks()),s=e.createRange(e.createPositionBefore(r[0]),e.createPositionAfter(r[r.length-1]));e.change(a=>a.setSelection(s)),this._isBlockDragging=!0,i.focus(),i.getObserver(ri).onDomEvent(t)}_handleBlockDragging(t){if(!this.isEnabled||!this._isBlockDragging)return;const e=t.clientX+(this.editor.locale.contentLanguageDirection=="ltr"?100:-100),n=t.clientY,i=document.elementFromPoint(e,n),r=this.editor.editing.view;var s,a;i&&i.closest(".ck-editor__editable")&&r.getObserver(ri).onDomEvent((s=((c,l)=>{for(var d in l||(l={}))Yv.call(l,d)&&Sg(c,d,l[d]);if(Ig)for(var d of Ig(l))Qv.call(l,d)&&Sg(c,d,l[d]);return c})({},t),a={type:t.type,dataTransfer:t.dataTransfer,target:i,clientX:e,clientY:n,preventDefault:()=>t.preventDefault(),stopPropagation:()=>t.stopPropagation()},$v(s,Kv(a))))}_handleBlockDragEnd(){this._isBlockDragging=!1}}var Tg=N(9256),Jv={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Tg.c,Jv),Tg.c.locals;class Xv extends R{constructor(){super(...arguments),this._clearDraggableAttributesDelayed=ts(()=>this._clearDraggableAttributes(),40),this._blockMode=!1,this._domEmitter=new(Ae())}static get pluginName(){return"DragDrop"}static get requires(){return[Re,li,pr,Zv]}init(){const t=this.editor,e=t.editing.view;this._draggedRange=null,this._draggingUid="",this._draggableElement=null,e.addObserver(ri),e.addObserver(Gs),this._setupDragging(),this._setupContentInsertionIntegration(),this._setupClipboardInputIntegration(),this._setupDraggableAttributeHandling(),this.listenTo(t,"change:isReadOnly",(n,i,r)=>{r?this.forceDisabled("readOnlyMode"):this.clearForceDisabled("readOnlyMode")}),this.on("change:isEnabled",(n,i,r)=>{r||this._finalizeDragging(!1)}),f.isAndroid&&this.forceDisabled("noAndroidSupport")}destroy(){return this._draggedRange&&(this._draggedRange.detach(),this._draggedRange=null),this._previewContainer&&this._previewContainer.remove(),this._domEmitter.stopListening(),this._clearDraggableAttributesDelayed.cancel(),super.destroy()}_setupDragging(){const t=this.editor,e=t.model,n=t.editing.view,i=n.document,r=t.plugins.get(pr);this.listenTo(i,"dragstart",(s,a)=>{if(a.target&&a.target.is("editableElement")||(this._prepareDraggedRange(a.target),!this._draggedRange))return void a.preventDefault();this._draggingUid=X(),a.dataTransfer.effectAllowed=this.isEnabled?"copyMove":"copy",a.dataTransfer.setData("application/ckeditor5-dragging-uid",this._draggingUid);const c=e.createSelection(this._draggedRange.toRange());this.editor.plugins.get("ClipboardPipeline")._fireOutputTransformationEvent(a.dataTransfer,c,"dragstart");const{dataTransfer:l,domTarget:d,domEvent:h}=a,{clientX:u}=h;this._updatePreview({dataTransfer:l,domTarget:d,clientX:u}),a.stopPropagation(),this.isEnabled||(this._draggedRange.detach(),this._draggedRange=null,this._draggingUid="")},{priority:"low"}),this.listenTo(i,"dragend",(s,a)=>{this._finalizeDragging(!a.dataTransfer.isCanceled&&a.dataTransfer.dropEffect=="move")},{priority:"low"}),this._domEmitter.listenTo($.document,"dragend",()=>{this._blockMode=!1},{useCapture:!0}),this.listenTo(i,"dragenter",()=>{this.isEnabled&&n.focus()}),this.listenTo(i,"dragleave",()=>{r.removeDropMarkerDelayed()}),this.listenTo(i,"dragging",(s,a)=>{if(!this.isEnabled)return void(a.dataTransfer.dropEffect="none");const{clientX:c,clientY:l}=a.domEvent;r.updateDropMarker(a.target,a.targetRanges,c,l,this._blockMode,this._draggedRange),this._draggedRange||(a.dataTransfer.dropEffect="copy"),f.isGecko||(a.dataTransfer.effectAllowed=="copy"?a.dataTransfer.dropEffect="copy":["all","copyMove"].includes(a.dataTransfer.effectAllowed)&&(a.dataTransfer.dropEffect="move")),s.stop()},{priority:"low"})}_setupClipboardInputIntegration(){const t=this.editor,e=t.editing.view.document,n=t.plugins.get(pr);this.listenTo(e,"clipboardInput",(i,r)=>{if(r.method!="drop")return;const{clientX:s,clientY:a}=r.domEvent,c=n.getFinalDropRange(r.target,r.targetRanges,s,a,this._blockMode,this._draggedRange);if(!c)return this._finalizeDragging(!1),void i.stop();if(this._draggedRange&&this._draggingUid!=r.dataTransfer.getData("application/ckeditor5-dragging-uid")&&(this._draggedRange.detach(),this._draggedRange=null,this._draggingUid=""),Mg(r.dataTransfer)=="move"&&this._draggedRange&&this._draggedRange.containsRange(c,!0))return this._finalizeDragging(!1),void i.stop();r.targetRanges=[t.editing.mapper.toViewRange(c)]},{priority:"high"})}_setupContentInsertionIntegration(){const t=this.editor.plugins.get(Re);t.on("contentInsertion",(e,n)=>{if(!this.isEnabled||n.method!=="drop")return;const i=n.targetRanges.map(r=>this.editor.editing.mapper.toModelRange(r));this.editor.model.change(r=>r.setSelection(i))},{priority:"high"}),t.on("contentInsertion",(e,n)=>{if(!this.isEnabled||n.method!=="drop")return;const i=Mg(n.dataTransfer)=="move",r=!n.resultRange||!n.resultRange.isCollapsed;this._finalizeDragging(r&&i)},{priority:"lowest"})}_setupDraggableAttributeHandling(){const t=this.editor,e=t.editing.view,n=e.document;this.listenTo(n,"mousedown",(i,r)=>{if(f.isAndroid||!r)return;this._clearDraggableAttributesDelayed.cancel();let s=Bg(r.target);if(f.isBlink&&!t.isReadOnly&&!s&&!n.selection.isCollapsed){const a=n.selection.getSelectedElement();a&&qt(a)||(s=n.selection.editableElement)}s&&(e.change(a=>{a.setAttribute("draggable","true",s)}),this._draggableElement=t.editing.mapper.toModelElement(s))}),this.listenTo(n,"mouseup",()=>{f.isAndroid||this._clearDraggableAttributesDelayed()})}_clearDraggableAttributes(){const t=this.editor.editing;t.view.change(e=>{this._draggableElement&&this._draggableElement.root.rootName!="$graveyard"&&e.removeAttribute("draggable",t.mapper.toViewElement(this._draggableElement)),this._draggableElement=null})}_finalizeDragging(t){const e=this.editor,n=e.model;e.plugins.get(pr).removeDropMarker(),this._clearDraggableAttributes(),e.plugins.has("WidgetToolbarRepository")&&e.plugins.get("WidgetToolbarRepository").clearForceDisabled("dragDrop"),this._draggingUid="",this._previewContainer&&(this._previewContainer.remove(),this._previewContainer=void 0),this._draggedRange&&(t&&this.isEnabled&&n.change(i=>{const r=n.createSelection(this._draggedRange);n.deleteContent(r,{doNotAutoparagraph:!0});const s=r.getFirstPosition().parent;s.isEmpty&&!n.schema.checkChild(s,"$text")&&n.schema.checkChild(s,"paragraph")&&i.insertElement("paragraph",s,0)}),this._draggedRange.detach(),this._draggedRange=null)}_prepareDraggedRange(t){const e=this.editor,n=e.model,i=n.document.selection,r=t?Bg(t):null;if(r){const l=e.editing.mapper.toModelElement(r);this._draggedRange=pe.fromRange(n.createRangeOn(l)),this._blockMode=n.schema.isBlock(l),e.plugins.has("WidgetToolbarRepository")&&e.plugins.get("WidgetToolbarRepository").forceDisabled("dragDrop");return}if(i.isCollapsed&&!i.getFirstPosition().parent.isEmpty)return;const s=Array.from(i.getSelectedBlocks()),a=i.getFirstRange();if(s.length==0)return void(this._draggedRange=pe.fromRange(a));const c=Ng(n,s);if(s.length>1)this._draggedRange=pe.fromRange(c),this._blockMode=!0;else if(s.length==1){const l=a.start.isTouching(c.start)&&a.end.isTouching(c.end);this._draggedRange=pe.fromRange(l?c:a),this._blockMode=l}n.change(l=>l.setSelection(this._draggedRange.toRange()))}_updatePreview({dataTransfer:t,domTarget:e,clientX:n}){const i=this.editor.editing.view,r=i.document.selection.editableElement,s=i.domConverter.mapViewToDom(r),a=$.window.getComputedStyle(s);this._previewContainer?this._previewContainer.firstElementChild&&this._previewContainer.removeChild(this._previewContainer.firstElementChild):(this._previewContainer=bi($.document,"div",{style:"position: fixed; left: -999999px;"}),$.document.body.appendChild(this._previewContainer));const c=new dt(s);if(s.contains(e))return;const l=parseFloat(a.paddingLeft),d=bi($.document,"div");d.className="ck ck-content",d.style.width=a.width,d.style.paddingLeft=`${c.left-n+l}px`,f.isiOS&&(d.style.backgroundColor="white"),d.innerHTML=t.getData("text/html"),t.setDragImage(d,0,0),this._previewContainer.appendChild(d)}}function Mg(o){return f.isGecko?o.dropEffect:["all","copyMove"].includes(o.effectAllowed)?"move":"copy"}function Bg(o){if(o.is("editableElement"))return null;if(o.hasClass("ck-widget__selection-handle"))return o.findAncestor(qt);if(qt(o))return o;const t=o.findAncestor(e=>qt(e)||e.is("editableElement"));return qt(t)?t:null}function Ng(o,t){const e=t[0],n=t[t.length-1],i=e.getCommonAncestor(n),r=o.createPositionBefore(e),s=o.createPositionAfter(n);if(i&&i.is("element")&&!o.schema.isLimit(i)){const a=o.createRangeOn(i),c=r.isTouching(a.start),l=s.isTouching(a.end);if(c&&l)return Ng(o,[i])}return o.createRange(r,s)}class t1 extends R{static get pluginName(){return"PastePlainText"}static get requires(){return[Re]}init(){const t=this.editor,e=t.model,n=t.editing.view,i=n.document,r=e.document.selection;let s=!1;n.addObserver(ri),this.listenTo(i,"keydown",(a,c)=>{s=c.shiftKey}),t.plugins.get(Re).on("contentInsertion",(a,c)=>{(s||function(l,d){if(l.childCount>1)return!1;const h=l.getChild(0);return d.isObject(h)?!1:Array.from(h.getAttributeKeys()).length==0}(c.content,e.schema))&&e.change(l=>{const d=Array.from(r.getAttributes()).filter(([u])=>e.schema.getAttributeProperties(u).isFormatting);r.isCollapsed||e.deleteContent(r,{doNotAutoparagraph:!0}),d.push(...r.getAttributes());const h=l.createRangeIn(c.content);for(const u of h.getItems())u.is("$textProxy")&&l.setAttributes(d,u)})})}}class Pg extends R{static get pluginName(){return"Clipboard"}static get requires(){return[Re,Xv,t1]}}class e1 extends at{constructor(t){super(t),this.affectsData=!1}execute(){const t=this.editor.model,e=t.document.selection;let n=t.schema.getLimitElement(e);if(e.containsEntireContent(n)||!Lg(t.schema,n))do if(n=n.parent,!n)return;while(!Lg(t.schema,n));t.change(i=>{i.setSelection(n,"in")})}}function Lg(o,t){return o.isLimit(t)&&(o.checkChild(t,"$text")||o.checkChild(t,"paragraph"))}const n1=Fo("Ctrl+A");class o1 extends R{static get pluginName(){return"SelectAllEditing"}init(){const t=this.editor,e=t.editing.view.document;t.commands.add("selectAll",new e1(t)),this.listenTo(e,"keydown",(n,i)=>{so(i)===n1&&(t.execute("selectAll"),i.preventDefault())})}}class i1 extends R{static get pluginName(){return"SelectAllUI"}init(){const t=this.editor;t.ui.componentFactory.add("selectAll",e=>{const n=t.commands.get("selectAll"),i=new wt(e),r=e.t;return i.set({label:r("Select all"),icon:'',keystroke:"Ctrl+A",tooltip:!0}),i.bind("isEnabled").to(n,"isEnabled"),this.listenTo(i,"execute",()=>{t.execute("selectAll"),t.editing.view.focus()}),i})}}class r1 extends R{static get requires(){return[o1,i1]}static get pluginName(){return"SelectAll"}}var s1=Object.defineProperty,Og=Object.getOwnPropertySymbols,a1=Object.prototype.hasOwnProperty,c1=Object.prototype.propertyIsEnumerable,zg=(o,t,e)=>t in o?s1(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;class Rg extends at{constructor(t){super(t),this._stack=[],this._createdBatches=new WeakSet,this.refresh(),this._isEnabledBasedOnSelection=!1,this.listenTo(t.data,"set",(e,n)=>{n[1]=((r,s)=>{for(var a in s||(s={}))a1.call(s,a)&&zg(r,a,s[a]);if(Og)for(var a of Og(s))c1.call(s,a)&&zg(r,a,s[a]);return r})({},n[1]);const i=n[1];i.batchType||(i.batchType={isUndoable:!1})},{priority:"high"}),this.listenTo(t.data,"set",(e,n)=>{n[1].batchType.isUndoable||this.clearStack()})}refresh(){this.isEnabled=this._stack.length>0}get createdBatches(){return this._createdBatches}addBatch(t){const e=this.editor.model.document.selection,n={ranges:e.hasOwnRange?Array.from(e.getRanges()):[],isBackward:e.isBackward};this._stack.push({batch:t,selection:n}),this.refresh()}clearStack(){this._stack=[],this.refresh()}_restoreSelection(t,e,n){const i=this.editor.model,r=i.document,s=[],a=t.map(l=>l.getTransformedByOperations(n)),c=a.flat();for(const l of a){const d=l.filter(h=>h.root!=r.graveyard).filter(h=>!d1(h,c));d.length&&(l1(d),s.push(d[0]))}s.length&&i.change(l=>{l.setSelection(s,{backward:e})})}_undo(t,e){const n=this.editor.model,i=n.document;this._createdBatches.add(e);const r=t.operations.slice().filter(s=>s.isDocumentOperation);r.reverse();for(const s of r){const a=s.baseVersion+1,c=Array.from(i.history.getOperations(a)),l=iC([s.getReversed()],c,{useRelations:!0,document:this.editor.model.document,padWithNoOps:!1,forceWeakRemove:!0}).operationsA;for(let d of l){const h=d.affectedSelectable;h&&!n.canEditAt(h)&&(d=new Ht(d.baseVersion)),e.addOperation(d),n.applyOperation(d),i.history.setOperationAsUndone(s,d)}}}}function l1(o){o.sort((t,e)=>t.start.isBefore(e.start)?-1:1);for(let t=1;te!==o&&e.containsRange(o,!0))}class h1 extends Rg{execute(t=null){const e=t?this._stack.findIndex(r=>r.batch==t):this._stack.length-1,n=this._stack.splice(e,1)[0],i=this.editor.model.createBatch({isUndo:!0});this.editor.model.enqueueChange(i,()=>{this._undo(n.batch,i);const r=this.editor.model.document.history.getOperations(n.batch.baseVersion);this._restoreSelection(n.selection.ranges,n.selection.isBackward,r)}),this.fire("revert",n.batch,i),this.refresh()}}class u1 extends Rg{execute(){const t=this._stack.pop(),e=this.editor.model.createBatch({isUndo:!0});this.editor.model.enqueueChange(e,()=>{const n=t.batch.operations[t.batch.operations.length-1].baseVersion+1,i=this.editor.model.document.history.getOperations(n);this._restoreSelection(t.selection.ranges,t.selection.isBackward,i),this._undo(t.batch,e)}),this.refresh()}}class g1 extends R{constructor(){super(...arguments),this._batchRegistry=new WeakSet}static get pluginName(){return"UndoEditing"}init(){const t=this.editor;this._undoCommand=new h1(t),this._redoCommand=new u1(t),t.commands.add("undo",this._undoCommand),t.commands.add("redo",this._redoCommand),this.listenTo(t.model,"applyOperation",(e,n)=>{const i=n[0];if(!i.isDocumentOperation)return;const r=i.batch,s=this._redoCommand.createdBatches.has(r),a=this._undoCommand.createdBatches.has(r);this._batchRegistry.has(r)||(this._batchRegistry.add(r),r.isUndoable&&(s?this._undoCommand.addBatch(r):a||(this._undoCommand.addBatch(r),this._redoCommand.clearStack())))},{priority:"highest"}),this.listenTo(this._undoCommand,"revert",(e,n,i)=>{this._redoCommand.addBatch(i)}),t.keystrokes.set("CTRL+Z","undo"),t.keystrokes.set("CTRL+Y","redo"),t.keystrokes.set("CTRL+SHIFT+Z","redo")}}class p1 extends R{static get pluginName(){return"UndoUI"}init(){const t=this.editor,e=t.locale,n=t.t,i=e.uiLanguageDirection=="ltr"?ot.undo:ot.redo,r=e.uiLanguageDirection=="ltr"?ot.redo:ot.undo;this._addButton("undo",n("Undo"),"CTRL+Z",i),this._addButton("redo",n("Redo"),"CTRL+Y",r)}_addButton(t,e,n,i){const r=this.editor;r.ui.componentFactory.add(t,s=>{const a=r.commands.get(t),c=new wt(s);return c.set({label:e,icon:i,keystroke:n,tooltip:!0}),c.bind("isEnabled").to(a,"isEnabled"),this.listenTo(c,"execute",()=>{r.execute(t),r.editing.view.focus()}),c})}}class jg extends R{static get requires(){return[g1,p1]}static get pluginName(){return"Undo"}}class m1 extends mt(){constructor(){super();const t=new window.FileReader;this._reader=t,this._data=void 0,this.set("loaded",0),t.onprogress=e=>{this.loaded=e.loaded}}get error(){return this._reader.error}get data(){return this._data}read(t){const e=this._reader;return this.total=t.size,new Promise((n,i)=>{e.onload=()=>{const r=e.result;this._data=r,n(r)},e.onerror=()=>{i("error")},e.onabort=()=>{i("aborted")},this._reader.readAsDataURL(t)})}abort(){this._reader.abort()}}class je extends R{constructor(){super(...arguments),this.loaders=new Me,this._loadersMap=new Map,this._pendingAction=null}static get pluginName(){return"FileRepository"}static get requires(){return[Rh]}init(){this.loaders.on("change",()=>this._updatePendingAction()),this.set("uploaded",0),this.set("uploadTotal",null),this.bind("uploadedPercent").to(this,"uploaded",this,"uploadTotal",(t,e)=>e?t/e*100:0)}getLoader(t){return this._loadersMap.get(t)||null}createLoader(t){if(!this.createUploadAdapter)return Q("filerepository-no-upload-adapter"),null;const e=new Fg(Promise.resolve(t),this.createUploadAdapter);return this.loaders.add(e),this._loadersMap.set(t,e),t instanceof Promise&&e.file.then(n=>{this._loadersMap.set(n,e)}).catch(()=>{}),e.on("change:uploaded",()=>{let n=0;for(const i of this.loaders)n+=i.uploaded;this.uploaded=n}),e.on("change:uploadTotal",()=>{let n=0;for(const i of this.loaders)i.uploadTotal&&(n+=i.uploadTotal);this.uploadTotal=n}),e}destroyLoader(t){const e=t instanceof Fg?t:this.getLoader(t);e._destroy(),this.loaders.remove(e),this._loadersMap.forEach((n,i)=>{n===e&&this._loadersMap.delete(i)})}_updatePendingAction(){const t=this.editor.plugins.get(Rh);if(this.loaders.length){if(!this._pendingAction){const e=this.editor.t,n=i=>`${e("Upload in progress")} ${parseInt(i)}%.`;this._pendingAction=t.add(n(this.uploadedPercent)),this._pendingAction.bind("message").to(this,"uploadedPercent",n)}}else t.remove(this._pendingAction),this._pendingAction=null}}class Fg extends mt(){constructor(t,e){super(),this.id=X(),this._filePromiseWrapper=this._createFilePromiseWrapper(t),this._adapter=e(this),this._reader=new m1,this.set("status","idle"),this.set("uploaded",0),this.set("uploadTotal",null),this.bind("uploadedPercent").to(this,"uploaded",this,"uploadTotal",(n,i)=>i?n/i*100:0),this.set("uploadResponse",null)}get file(){return this._filePromiseWrapper?this._filePromiseWrapper.promise.then(t=>this._filePromiseWrapper?t:null):Promise.resolve(null)}get data(){return this._reader.data}read(){if(this.status!="idle")throw new _("filerepository-read-wrong-status",this);return this.status="reading",this.file.then(t=>this._reader.read(t)).then(t=>{if(this.status!=="reading")throw this.status;return this.status="idle",t}).catch(t=>{throw t==="aborted"?(this.status="aborted","aborted"):(this.status="error",this._reader.error?this._reader.error:t)})}upload(){if(this.status!="idle")throw new _("filerepository-upload-wrong-status",this);return this.status="uploading",this.file.then(()=>this._adapter.upload()).then(t=>(this.uploadResponse=t,this.status="idle",t)).catch(t=>{throw this.status==="aborted"?"aborted":(this.status="error",t)})}abort(){const t=this.status;this.status="aborted",this._filePromiseWrapper.isFulfilled?t=="reading"?this._reader.abort():t=="uploading"&&this._adapter.abort&&this._adapter.abort():(this._filePromiseWrapper.promise.catch(()=>{}),this._filePromiseWrapper.rejecter("aborted")),this._destroy()}_destroy(){this._filePromiseWrapper=void 0,this._reader=void 0,this._adapter=void 0,this.uploadResponse=void 0}_createFilePromiseWrapper(t){const e={};return e.promise=new Promise((n,i)=>{e.rejecter=i,e.isFulfilled=!1,t.then(r=>{e.isFulfilled=!0,n(r)}).catch(r=>{e.isFulfilled=!0,i(r)})}),e}}class f1 extends wt{constructor(t){super(t),this.buttonView=this,this._fileInputView=new k1(t),this._fileInputView.bind("acceptedType").to(this),this._fileInputView.bind("allowMultipleFiles").to(this),this._fileInputView.delegate("done").to(this),this.on("execute",()=>{this._fileInputView.open()}),this.extendTemplate({attributes:{class:"ck-file-dialog-button"}})}render(){super.render(),this.children.add(this._fileInputView)}}class k1 extends tt{constructor(t){super(t),this.set("acceptedType",void 0),this.set("allowMultipleFiles",!1);const e=this.bindTemplate;this.setTemplate({tag:"input",attributes:{class:["ck-hidden"],type:"file",tabindex:"-1",accept:e.to("acceptedType"),multiple:e.to("allowMultipleFiles")},on:{change:e.to(()=>{this.element&&this.element.files&&this.element.files.length&&this.fire("done",this.element.files),this.element.value=""})}})}open(){this.element.click()}}const Vg="ckCsrfToken",Hg="abcdefghijklmnopqrstuvwxyz0123456789";function b1(){let o=function(n){n=n.toLowerCase();const i=document.cookie.split(";");for(const r of i){const s=r.split("=");if(decodeURIComponent(s[0].trim().toLowerCase())===n)return decodeURIComponent(s[1])}return null}(Vg);var t,e;return o&&o.length==40||(o=function(n){let i="";const r=new Uint8Array(n);window.crypto.getRandomValues(r);for(let s=0;s.5?a.toUpperCase():a}return i}(40),t=Vg,e=o,document.cookie=encodeURIComponent(t)+"="+encodeURIComponent(e)+";path=/"),o}class w1{constructor(t,e,n){this.loader=t,this.url=e,this.t=n}upload(){return this.loader.file.then(t=>new Promise((e,n)=>{this._initRequest(),this._initListeners(e,n,t),this._sendRequest(t)}))}abort(){this.xhr&&this.xhr.abort()}_initRequest(){const t=this.xhr=new XMLHttpRequest;t.open("POST",this.url,!0),t.responseType="json"}_initListeners(t,e,n){const i=this.xhr,r=this.loader,s=(0,this.t)("Cannot upload file:")+` ${n.name}.`;i.addEventListener("error",()=>e(s)),i.addEventListener("abort",()=>e()),i.addEventListener("load",()=>{const a=i.response;if(!a||!a.uploaded)return e(a&&a.error&&a.error.message?a.error.message:s);t({default:a.url})}),i.upload&&i.upload.addEventListener("progress",a=>{a.lengthComputable&&(r.uploadTotal=a.total,r.uploaded=a.loaded)})}_sendRequest(t){const e=new FormData;e.append("upload",t),e.append("ckCsrfToken",b1()),this.xhr.send(e)}}function Cn(o,t,e,n){let i,r=null;typeof n=="function"?i=n:(r=o.commands.get(n),i=()=>{o.execute(n)}),o.model.document.on("change:data",(s,a)=>{if(r&&!r.isEnabled||!t.isEnabled)return;const c=Wt(o.model.document.selection.getRanges());if(!c.isCollapsed||a.isUndo||!a.isLocal)return;const l=Array.from(o.model.document.differ.getChanges()),d=l[0];if(l.length!=1||d.type!=="insert"||d.name!="$text"||d.length!=1)return;const h=d.position.parent;if(h.is("element","codeBlock")||h.is("element","listItem")&&typeof n!="function"&&!["numberedList","bulletedList","todoList"].includes(n)||r&&r.value===!0)return;const u=h.getChild(0),g=o.model.createRangeOn(u);if(!g.containsRange(c)&&!c.end.isEqual(g.end))return;const p=e.exec(u.data.substr(0,c.end.offset));p&&o.model.enqueueChange(k=>{const b=k.createPositionAt(h,0),A=k.createPositionAt(h,p[0].length),E=new pe(b,A);if(i({match:p})!==!1){k.remove(E);const M=o.model.document.selection.getFirstRange(),z=k.createRangeIn(h);!h.isEmpty||z.isEqual(M)||z.containsRange(M,!0)||k.remove(h)}E.detach(),o.model.enqueueChange(()=>{o.plugins.get("Delete").requestUndoOnBackspace()})})})}function bo(o,t,e,n){let i,r;e instanceof RegExp?i=e:r=e,r=r||(s=>{let a;const c=[],l=[];for(;(a=i.exec(s))!==null&&!(a&&a.length<4);){let{index:d,1:h,2:u,3:g}=a;const p=h+u+g;d+=a[0].length-p.length;const k=[d,d+h.length],b=[d+h.length+u.length,d+h.length+u.length+g.length];c.push(k),c.push(b),l.push([d+h.length,d+h.length+u.length])}return{remove:c,format:l}}),o.model.document.on("change:data",(s,a)=>{if(a.isUndo||!a.isLocal||!t.isEnabled)return;const c=o.model,l=c.document.selection;if(!l.isCollapsed)return;const d=Array.from(c.document.differ.getChanges()),h=d[0];if(d.length!=1||h.type!=="insert"||h.name!="$text"||h.length!=1)return;const u=l.focus,g=u.parent,{text:p,range:k}=function(M,z){let G=M.start;return{text:Array.from(M.getItems()).reduce((st,Lt)=>!Lt.is("$text")&&!Lt.is("$textProxy")||Lt.getAttribute("code")?(G=z.createPositionAfter(Lt),""):st+Lt.data,""),range:z.createRange(G,M.end)}}(c.createRange(c.createPositionAt(g,0),u),c),b=r(p),A=Ug(k.start,b.format,c),E=Ug(k.start,b.remove,c);A.length&&E.length&&c.enqueueChange(M=>{if(n(M,A)!==!1){for(const z of E.reverse())M.remove(z);c.enqueueChange(()=>{o.plugins.get("Delete").requestUndoOnBackspace()})}})})}function Ug(o,t,e){return t.filter(n=>n[0]!==void 0&&n[1]!==void 0).map(n=>e.createRange(o.getShiftedBy(n[0]),o.getShiftedBy(n[1])))}function fr(o,t){return(e,n)=>{if(!o.commands.get(t).isEnabled)return!1;const i=o.model.schema.getValidRanges(n,t);for(const r of i)e.setAttribute(t,!0,r);e.removeSelectionAttribute(t)}}class qg extends at{constructor(t,e){super(t),this.attributeKey=e}refresh(){const t=this.editor.model,e=t.document;this.value=this._getValueFromFirstAllowedNode(),this.isEnabled=t.schema.checkAttributeInSelection(e.selection,this.attributeKey)}execute(t={}){const e=this.editor.model,n=e.document.selection,i=t.forceValue===void 0?!this.value:t.forceValue;e.change(r=>{if(n.isCollapsed)i?r.setSelectionAttribute(this.attributeKey,!0):r.removeSelectionAttribute(this.attributeKey);else{const s=e.schema.getValidRanges(n.getRanges(),this.attributeKey);for(const a of s)i?r.setAttribute(this.attributeKey,i,a):r.removeAttribute(this.attributeKey,a)}})}_getValueFromFirstAllowedNode(){const t=this.editor.model,e=t.schema,n=t.document.selection;if(n.isCollapsed)return n.hasAttribute(this.attributeKey);for(const i of n.getRanges())for(const r of i.getItems())if(e.checkAttribute(r,this.attributeKey))return r.hasAttribute(this.attributeKey);return!1}}const wo="bold";class A1 extends R{static get pluginName(){return"BoldEditing"}init(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:wo}),t.model.schema.setAttributeProperties(wo,{isFormatting:!0,copyOnEnter:!0}),t.conversion.attributeToElement({model:wo,view:"strong",upcastAlso:["b",e=>{const n=e.getStyle("font-weight");return n&&(n=="bold"||Number(n)>=600)?{name:!0,styles:["font-weight"]}:null}]}),t.commands.add(wo,new qg(t,wo)),t.keystrokes.set("CTRL+B",wo)}}const la="bold";class C1 extends R{static get pluginName(){return"BoldUI"}init(){const t=this.editor,e=t.t;t.ui.componentFactory.add(la,n=>{const i=t.commands.get(la),r=new wt(n);return r.set({label:e("Bold"),icon:ot.bold,keystroke:"CTRL+B",tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(i,"value","isEnabled"),this.listenTo(r,"execute",()=>{t.execute(la),t.editing.view.focus()}),r})}}var Gg=N(8984),_1={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Gg.c,_1),Gg.c.locals;const Ao="italic";class v1 extends R{static get pluginName(){return"ItalicEditing"}init(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:Ao}),t.model.schema.setAttributeProperties(Ao,{isFormatting:!0,copyOnEnter:!0}),t.conversion.attributeToElement({model:Ao,view:"i",upcastAlso:["em",{styles:{"font-style":"italic"}}]}),t.commands.add(Ao,new qg(t,Ao)),t.keystrokes.set("CTRL+I",Ao)}}const da="italic";class y1 extends R{static get pluginName(){return"ItalicUI"}init(){const t=this.editor,e=t.t;t.ui.componentFactory.add(da,n=>{const i=t.commands.get(da),r=new wt(n);return r.set({label:e("Italic"),icon:'',keystroke:"CTRL+I",tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(i,"value","isEnabled"),this.listenTo(r,"execute",()=>{t.execute(da),t.editing.view.focus()}),r})}}class x1 extends at{refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(t={}){const e=this.editor.model,n=e.schema,i=e.document.selection,r=Array.from(i.getSelectedBlocks()),s=t.forceValue===void 0?!this.value:t.forceValue;e.change(a=>{if(s){const c=r.filter(l=>kr(l)||$g(n,l));this._applyQuote(a,c)}else this._removeQuote(a,r.filter(kr))})}_getValue(){const t=Wt(this.editor.model.document.selection.getSelectedBlocks());return!(!t||!kr(t))}_checkEnabled(){if(this.value)return!0;const t=this.editor.model.document.selection,e=this.editor.model.schema,n=Wt(t.getSelectedBlocks());return!!n&&$g(e,n)}_removeQuote(t,e){Wg(t,e).reverse().forEach(n=>{if(n.start.isAtStart&&n.end.isAtEnd)return void t.unwrap(n.start.parent);if(n.start.isAtStart){const r=t.createPositionBefore(n.start.parent);return void t.move(n,r)}n.end.isAtEnd||t.split(n.end);const i=t.createPositionAfter(n.end.parent);t.move(n,i)})}_applyQuote(t,e){const n=[];Wg(t,e).reverse().forEach(i=>{let r=kr(i.start);r||(r=t.createElement("blockQuote"),t.wrap(i,r)),n.push(r)}),n.reverse().reduce((i,r)=>i.nextSibling==r?(t.merge(t.createPositionAfter(i)),i):r)}}function kr(o){return o.parent.name=="blockQuote"?o.parent:null}function Wg(o,t){let e,n=0;const i=[];for(;n{const a=t.model.document.differ.getChanges();for(const c of a)if(c.type=="insert"){const l=c.position.nodeAfter;if(!l)continue;if(l.is("element","blockQuote")&&l.isEmpty)return s.remove(l),!0;if(l.is("element","blockQuote")&&!e.checkChild(c.position,l))return s.unwrap(l),!0;if(l.is("element")){const d=s.createRangeIn(l);for(const h of d.getItems())if(h.is("element","blockQuote")&&!e.checkChild(s.createPositionBefore(h),h))return s.unwrap(h),!0}}else if(c.type=="remove"){const l=c.position.parent;if(l.is("element","blockQuote")&&l.isEmpty)return s.remove(l),!0}return!1});const n=this.editor.editing.view.document,i=t.model.document.selection,r=t.commands.get("blockQuote");this.listenTo(n,"enter",(s,a)=>{!i.isCollapsed||!r.value||i.getLastPosition().parent.isEmpty&&(t.execute("blockQuote"),t.editing.view.scrollToTheSelection(),a.preventDefault(),s.stop())},{context:"blockquote"}),this.listenTo(n,"delete",(s,a)=>{if(a.direction!="backward"||!i.isCollapsed||!r.value)return;const c=i.getLastPosition().parent;c.isEmpty&&!c.previousSibling&&(t.execute("blockQuote"),t.editing.view.scrollToTheSelection(),a.preventDefault(),s.stop())},{context:"blockquote"})}}var Kg=N(8888),D1={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Kg.c,D1),Kg.c.locals;class I1 extends R{static get pluginName(){return"BlockQuoteUI"}init(){const t=this.editor,e=t.t;t.ui.componentFactory.add("blockQuote",n=>{const i=t.commands.get("blockQuote"),r=new wt(n);return r.set({label:e("Block quote"),icon:ot.quote,tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(i,"value","isEnabled"),this.listenTo(r,"execute",()=>{t.execute("blockQuote"),t.editing.view.focus()}),r})}}class S1 extends R{static get pluginName(){return"CKBoxUI"}afterInit(){const t=this.editor,e=t.commands.get("ckbox");if(!e)return;const n=t.t;if(t.ui.componentFactory.add("ckbox",i=>{const r=new wt(i);return r.set({label:n("Open file manager"),icon:ot.browseFiles,tooltip:!0}),r.bind("isOn","isEnabled").to(e,"value","isEnabled"),r.on("execute",()=>{t.execute("ckbox")}),r}),t.plugins.has("ImageInsertUI")){const i=t.plugins.get("ImageInsertUI");i.registerIntegration({name:"assetManager",observable:e,buttonViewCreator:()=>{const r=this.editor.ui.componentFactory.create("ckbox");return r.icon=ot.imageAssetManager,r.bind("label").to(i,"isImageSelected",s=>n(s?"Replace image with file manager":"Insert image with file manager")),r},formViewCreator:()=>{const r=this.editor.ui.componentFactory.create("ckbox");return r.icon=ot.imageAssetManager,r.withText=!0,r.bind("label").to(i,"isImageSelected",s=>n(s?"Replace with file manager":"Insert with file manager")),r.on("execute",()=>{i.dropdownView.isOpen=!1}),r}})}}}var T1=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","#","$","%","*","+",",","-",".",":",";","=","?","@","[","]","^","_","{","|","}","~"],di=o=>{let t=0;for(let e=0;e{let t=o/255;return t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},ua=o=>{let t=Math.max(0,Math.min(1,o));return t<=.0031308?Math.trunc(12.92*t*255+.5):Math.trunc(255*(1.055*Math.pow(t,.4166666666666667)-.055)+.5)},ga=(o,t)=>(e=>e<0?-1:1)(o)*Math.pow(Math.abs(o),t),Yg=class extends Error{constructor(o){super(o),this.name="ValidationError",this.message=o}},M1=o=>{if(!o||o.length<6)throw new Yg("The blurhash string must be at least 6 characters");let t=di(o[0]),e=Math.floor(t/9)+1,n=t%9+1;if(o.length!==4+2*n*e)throw new Yg(`blurhash length mismatch: length is ${o.length} but it should be ${4+2*n*e}`)},B1=o=>{let t=o>>8&255,e=255&o;return[ha(o>>16),ha(t),ha(e)]},N1=(o,t)=>{let e=Math.floor(o/361),n=Math.floor(o/19)%19,i=o%19;return[ga((e-9)/9,2)*t,ga((n-9)/9,2)*t,ga((i-9)/9,2)*t]},P1=(o,t,e,n)=>{M1(o),n|=1;let i=di(o[0]),r=Math.floor(i/9)+1,s=i%9+1,a=(di(o[1])+1)/166,c=new Array(s*r);for(let h=0;ht in o?L1(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;function Jg(o){const t=[];let e=0;for(const i in o){const r=parseInt(i,10);isNaN(r)||(r>e&&(e=r),t.push(`${o[i]} ${i}w`))}const n=[{srcset:t.join(","),sizes:`(max-width: ${e}px) 100vw, ${e}px`,type:"image/webp"}];return{imageFallbackUrl:o.default,imageSources:n}}const hi=32;function Xg({url:o,method:t="GET",data:e,onUploadProgress:n,signal:i,authorization:r}){const s=new XMLHttpRequest;s.open(t,o.toString()),s.setRequestHeader("Authorization",r),s.setRequestHeader("CKBox-Version","CKEditor 5"),s.responseType="json";const a=()=>{s.abort()};return new Promise((c,l)=>{i.throwIfAborted(),i.addEventListener("abort",a),s.addEventListener("loadstart",()=>{i.addEventListener("abort",a)}),s.addEventListener("loadend",()=>{i.removeEventListener("abort",a)}),s.addEventListener("error",()=>{l()}),s.addEventListener("abort",()=>{l()}),s.addEventListener("load",()=>{const d=s.response;if(!d||d.statusCode>=400)return l(d&&d.message);c(d)}),n&&s.upload.addEventListener("progress",d=>{n(d)}),s.send(e)})}const R1={"image/gif":"gif","image/jpeg":"jpg","image/png":"png","image/webp":"webp","image/bmp":"bmp","image/tiff":"tiff"};function j1(o,t){return e=this,n=null,i=function*(){try{const r=yield fetch(o,((s,a)=>{for(var c in a||(a={}))O1.call(a,c)&&Zg(s,c,a[c]);if(Qg)for(var c of Qg(a))z1.call(a,c)&&Zg(s,c,a[c]);return s})({method:"HEAD",cache:"force-cache"},t));return r.ok&&r.headers.get("content-type")||""}catch{return""}},new Promise((r,s)=>{var a=d=>{try{l(i.next(d))}catch(h){s(h)}},c=d=>{try{l(i.throw(d))}catch(h){s(h)}},l=d=>d.done?r(d.value):Promise.resolve(d.value).then(a,c);l((i=i.apply(e,n)).next())});var e,n,i}var F1=Object.defineProperty,tp=Object.getOwnPropertySymbols,V1=Object.prototype.hasOwnProperty,H1=Object.prototype.propertyIsEnumerable,ep=(o,t,e)=>t in o?F1(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,np=(o,t)=>{for(var e in t||(t={}))V1.call(t,e)&&ep(o,e,t[e]);if(tp)for(var e of tp(t))H1.call(t,e)&&ep(o,e,t[e]);return o};class U1 extends at{constructor(t){super(t),this._chosenAssets=new Set,this._wrapper=null,this._initListeners()}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(){this.fire("ckbox:open")}_getValue(){return this._wrapper!==null}_checkEnabled(){const t=this.editor.commands.get("insertImage"),e=this.editor.commands.get("link");return!(!t.isEnabled&&!e.isEnabled)}_prepareOptions(){const t=this.editor.config.get("ckbox");return{theme:t.theme,language:t.language,tokenUrl:t.tokenUrl,serviceOrigin:t.serviceOrigin,forceDemoLabel:t.forceDemoLabel,dialog:{onClose:()=>this.fire("ckbox:close")},assets:{onChoose:e=>this.fire("ckbox:choose",e)}}}_initListeners(){const t=this.editor,e=t.model,n=!t.config.get("ckbox.ignoreDataId");this.on("ckbox",()=>{this.refresh()},{priority:"low"}),this.on("ckbox:open",()=>{this.isEnabled&&!this.value&&(this._wrapper=bi(document,"div",{class:"ck ckbox-wrapper"}),document.body.appendChild(this._wrapper),window.CKBox.mount(this._wrapper,this._prepareOptions()))}),this.on("ckbox:close",()=>{this.value&&(this._wrapper.remove(),this._wrapper=null,t.editing.view.focus())}),this.on("ckbox:choose",(i,r)=>{if(!this.isEnabled)return;const s=t.commands.get("insertImage"),a=t.commands.get("link"),c=function({assets:d,isImageAllowed:h,isLinkAllowed:u}){return d.map(g=>function(p){const k=p.data.metadata;return k?k.width&&k.height:!1}(g)?{id:g.data.id,type:"image",attributes:q1(g)}:{id:g.data.id,type:"link",attributes:G1(g)}).filter(g=>g.type==="image"?h:u)}({assets:r,isImageAllowed:s.isEnabled,isLinkAllowed:a.isEnabled}),l=c.length;l!==0&&(e.change(d=>{for(const h of c){const u=h===c[l-1],g=l===1;this._insertAsset(h,u,d,g),n&&(setTimeout(()=>this._chosenAssets.delete(h),1e3),this._chosenAssets.add(h))}}),t.editing.view.focus())}),this.listenTo(t,"destroy",()=>{this.fire("ckbox:close"),this._chosenAssets.clear()})}_insertAsset(t,e,n,i){const r=this.editor.model.document.selection;n.removeSelectionAttribute("linkHref"),t.type==="image"?this._insertImage(t):this._insertLink(t,n,i),e||n.setSelection(r.getLastPosition())}_insertImage(t){const e=this.editor,{imageFallbackUrl:n,imageSources:i,imageTextAlternative:r,imageWidth:s,imageHeight:a,imagePlaceholder:c}=t.attributes;e.execute("insertImage",{source:np({src:n,sources:i,alt:r,width:s,height:a},c?{placeholder:c}:null)})}_insertLink(t,e,n){const i=this.editor,r=i.model,s=r.document.selection,{linkName:a,linkHref:c}=t.attributes;if(s.isCollapsed){const l=We(s.getAttributes()),d=e.createText(a,l);if(!n){const u=s.getLastPosition(),g=u.parent;g.name==="paragraph"&&g.isEmpty||i.execute("insertParagraph",{position:u});const p=r.insertContent(d);return e.setSelection(p),void i.execute("link",c)}const h=r.insertContent(d);e.setSelection(h)}i.execute("link",c)}}function q1(o){const{imageFallbackUrl:t,imageSources:e}=Jg(o.data.imageUrls),{description:n,width:i,height:r,blurHash:s}=o.data.metadata,a=function(c){if(c)try{const l=`${hi}px`,d=document.createElement("canvas");d.setAttribute("width",l),d.setAttribute("height",l);const h=d.getContext("2d");if(!h)return;const u=h.createImageData(hi,hi),g=P1(c,hi,hi);return u.data.set(g),h.putImageData(u,0,0),d.toDataURL()}catch{return}}(s);return np({imageFallbackUrl:t,imageSources:e,imageTextAlternative:n||"",imageWidth:i,imageHeight:r},a?{imagePlaceholder:a}:null)}function G1(o){return{linkName:o.data.name,linkHref:W1(o)}}function W1(o){const t=new URL(o.data.url);return t.searchParams.set("download","true"),t.toString()}var pa=(o,t,e)=>new Promise((n,i)=>{var r=c=>{try{a(e.next(c))}catch(l){i(l)}},s=c=>{try{a(e.throw(c))}catch(l){i(l)}},a=c=>c.done?n(c.value):Promise.resolve(c.value).then(r,s);a((e=e.apply(o,t)).next())});class op extends R{static get pluginName(){return"CKBoxUtils"}static get requires(){return["CloudServices"]}init(){return pa(this,null,function*(){const t=this.editor,e=!!t.config.get("ckbox"),n=!!window.CKBox;if(!e&&!n)return;t.config.define("ckbox",{serviceOrigin:"https://api.ckbox.io",defaultUploadCategories:null,ignoreDataId:!1,language:t.locale.uiLanguage,theme:"lark",tokenUrl:t.config.get("cloudServices.tokenUrl")});const i=t.plugins.get("CloudServices"),r=t.config.get("cloudServices.tokenUrl"),s=t.config.get("ckbox.tokenUrl");if(!s)throw new _("ckbox-plugin-missing-token-url",this);this._token=s==r?i.token:yield i.registerTokenUrl(s)})}getToken(){return this._token}getWorkspaceId(){const t=(0,this.editor.t)("Cannot access default workspace."),e=this.editor.config.get("ckbox.defaultUploadWorkspaceId"),n=function(i,r){const[,s]=i.value.split("."),a=JSON.parse(atob(s)),c=a.auth&&a.auth.ckbox&&a.auth.ckbox.workspaces||[a.aud];return r?(a.auth&&a.auth.ckbox&&a.auth.ckbox.role)=="superadmin"||c.includes(r)?r:null:c[0]}(this._token,e);if(n==null)throw Et("ckbox-access-default-workspace-error"),t;return n}getCategoryIdForFile(t,e){return pa(this,null,function*(){const n=(0,this.editor.t)("Cannot determine a category for the uploaded file."),i=this.editor.config.get("ckbox.defaultUploadCategories"),r=this._getAvailableCategories(e),s=typeof t=="string"?(a=yield j1(t,e),R1[a]):function(d){const h=d.name,u=new RegExp("\\.(?[^.]+)$");return h.match(u).groups.ext.toLowerCase()}(t);var a;const c=yield r;if(!c)throw n;if(i){const d=Object.keys(i).find(h=>i[h].find(u=>u.toLowerCase()==s));if(d){const h=c.find(u=>u.id===d||u.name===d);if(!h)throw n;return h.id}}const l=c.find(d=>d.extensions.find(h=>h.toLowerCase()==s));if(!l)throw n;return l.id})}_getAvailableCategories(t){return pa(this,null,function*(){const e=this.editor,n=this._token,{signal:i}=t,r=e.config.get("ckbox.serviceOrigin"),s=this.getWorkspaceId();try{const c=[];let l,d=0;do{const h=yield a(d);c.push(...h.items),l=h.totalCount-(d+50),d+=50}while(l>0);return c}catch{return i.throwIfAborted(),void Et("ckbox-fetch-category-http-error")}function a(c){const l=new URL("categories",r);return l.searchParams.set("limit","50"),l.searchParams.set("offset",c.toString()),l.searchParams.set("workspaceId",s),Xg({url:l,signal:i,authorization:n.value})}})}}var ma=(o,t,e)=>new Promise((n,i)=>{var r=c=>{try{a(e.next(c))}catch(l){i(l)}},s=c=>{try{a(e.throw(c))}catch(l){i(l)}},a=c=>c.done?n(c.value):Promise.resolve(c.value).then(r,s);a((e=e.apply(o,t)).next())});class $1 extends R{static get requires(){return["ImageUploadEditing","ImageUploadProgress",je,ip]}static get pluginName(){return"CKBoxUploadAdapter"}afterInit(){return ma(this,null,function*(){const t=this.editor,e=!!t.config.get("ckbox"),n=!!window.CKBox;if(!e&&!n)return;const i=t.plugins.get(je),r=t.plugins.get(op);i.createUploadAdapter=c=>new K1(c,t,r);const s=!t.config.get("ckbox.ignoreDataId"),a=t.plugins.get("ImageUploadEditing");s&&a.on("uploadComplete",(c,{imageElement:l,data:d})=>{t.model.change(h=>{h.setAttribute("ckboxImageId",d.ckboxImageId,l)})})})}}class K1{constructor(t,e,n){this.loader=t,this.token=n.getToken(),this.ckboxUtils=n,this.editor=e,this.controller=new AbortController,this.serviceOrigin=e.config.get("ckbox.serviceOrigin")}upload(){return ma(this,null,function*(){const t=this.ckboxUtils,e=this.editor.t,n=yield this.loader.file,i=yield t.getCategoryIdForFile(n,{signal:this.controller.signal}),r=new URL("assets",this.serviceOrigin),s=new FormData;return r.searchParams.set("workspaceId",t.getWorkspaceId()),s.append("categoryId",i),s.append("file",n),Xg({method:"POST",url:r,data:s,onUploadProgress:a=>{a.lengthComputable&&(this.loader.uploadTotal=a.total,this.loader.uploaded=a.loaded)},signal:this.controller.signal,authorization:this.token.value}).then(a=>ma(this,null,function*(){const c=Jg(a.imageUrls);return{ckboxImageId:a.id,default:c.imageFallbackUrl,sources:c.imageSources}})).catch(()=>{const a=e("Cannot upload file:")+` ${n.name}.`;return Promise.reject(a)})})}abort(){this.controller.abort()}}class ip extends R{static get pluginName(){return"CKBoxEditing"}static get requires(){return["LinkEditing","PictureEditing",$1,op]}init(){const t=this.editor,e=!!t.config.get("ckbox"),n=!!window.CKBox;(e||n)&&(this._checkImagePlugins(),t.config.get("ckbox.ignoreDataId")||(this._initSchema(),this._initConversion(),this._initFixers()),n&&t.commands.add("ckbox",new U1(t)))}_checkImagePlugins(){const t=this.editor;t.plugins.has("ImageBlockEditing")||t.plugins.has("ImageInlineEditing")||Et("ckbox-plugin-image-feature-missing",t)}_initSchema(){const t=this.editor.model.schema;t.extend("$text",{allowAttributes:"ckboxLinkId"}),t.isRegistered("imageBlock")&&t.extend("imageBlock",{allowAttributes:["ckboxImageId","ckboxLinkId"]}),t.isRegistered("imageInline")&&t.extend("imageInline",{allowAttributes:["ckboxImageId","ckboxLinkId"]}),t.addAttributeCheck((e,n)=>{if(!e.last.getAttribute("linkHref")&&n==="ckboxLinkId")return!1})}_initConversion(){const t=this.editor;t.conversion.for("downcast").add(n=>{n.on("attribute:ckboxLinkId:imageBlock",(i,r,s)=>{const{writer:a,mapper:c,consumable:l}=s;if(!l.consume(r.item,i.name))return;const d=[...c.toViewElement(r.item).getChildren()].find(h=>h.name==="a");d&&(r.item.hasAttribute("ckboxLinkId")?a.setAttribute("data-ckbox-resource-id",r.item.getAttribute("ckboxLinkId"),d):a.removeAttribute("data-ckbox-resource-id",d))},{priority:"low"}),n.on("attribute:ckboxLinkId",(i,r,s)=>{const{writer:a,mapper:c,consumable:l}=s;if(l.consume(r.item,i.name)){if(r.attributeOldValue){const d=rp(a,r.attributeOldValue);a.unwrap(c.toViewRange(r.range),d)}if(r.attributeNewValue){const d=rp(a,r.attributeNewValue);if(r.item.is("selection")){const h=a.document.selection;a.wrap(h.getFirstRange(),d)}else a.wrap(c.toViewRange(r.range),d)}}},{priority:"low"})}),t.conversion.for("upcast").add(n=>{n.on("element:a",(i,r,s)=>{const{writer:a,consumable:c}=s;if(!r.viewItem.getAttribute("href")||!c.consume(r.viewItem,{attributes:["data-ckbox-resource-id"]}))return;const l=r.viewItem.getAttribute("data-ckbox-resource-id");if(l)if(r.modelRange)for(let d of r.modelRange.getItems())d.is("$textProxy")&&(d=d.textNode),Q1(d)&&a.setAttribute("ckboxLinkId",l,d);else{const d=r.modelCursor.nodeBefore||r.modelCursor.parent;a.setAttribute("ckboxLinkId",l,d)}},{priority:"low"})}),t.conversion.for("downcast").attributeToAttribute({model:"ckboxImageId",view:"data-ckbox-resource-id"}),t.conversion.for("upcast").elementToAttribute({model:{key:"ckboxImageId",value:n=>n.getAttribute("data-ckbox-resource-id")},view:{attributes:{"data-ckbox-resource-id":/[\s\S]+/}}});const e=t.commands.get("replaceImageSource");e&&this.listenTo(e,"cleanupImage",(n,[i,r])=>{i.removeAttribute("ckboxImageId",r)})}_initFixers(){const t=this.editor,e=t.model,n=e.document.selection;e.document.registerPostFixer(function(i){return r=>{let s=!1;const a=i.model,c=i.commands.get("ckbox");if(!c)return s;for(const l of a.document.differ.getChanges()){if(l.type!=="insert"&&l.type!=="attribute")continue;const d=l.type==="insert"?new B(l.position,l.position.getShiftedBy(l.length)):l.range,h=l.type==="attribute"&&l.attributeKey==="linkHref"&&l.attributeNewValue===null;for(const u of d.getItems()){if(h&&u.hasAttribute("ckboxLinkId")){r.removeAttribute("ckboxLinkId",u),s=!0;continue}const g=Y1(u,c._chosenAssets);for(const p of g){const k=p.type==="image"?"ckboxImageId":"ckboxLinkId";p.id!==u.getAttribute(k)&&(r.setAttribute(k,p.id,u),s=!0)}}}return s}}(t)),e.document.registerPostFixer(function(i){return r=>!(i.hasAttribute("linkHref")||!i.hasAttribute("ckboxLinkId"))&&(r.removeSelectionAttribute("ckboxLinkId"),!0)}(n))}}function Y1(o,t){const e=o.is("element","imageInline")||o.is("element","imageBlock"),n=o.hasAttribute("linkHref");return[...t].filter(i=>i.type==="image"&&e?i.attributes.imageFallbackUrl===o.getAttribute("src"):i.type==="link"&&n?i.attributes.linkHref===o.getAttribute("linkHref"):void 0)}function rp(o,t){const e=o.createAttributeElement("a",{"data-ckbox-resource-id":t},{priority:5});return o.setCustomProperty("link",!0,e),e}function Q1(o){return!!o.is("$text")||!(!o.is("element","imageInline")&&!o.is("element","imageBlock"))}var sp=N(9268),Z1={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(sp.c,Z1),sp.c.locals;class J1 extends R{static get pluginName(){return"CKFinderUI"}init(){const t=this.editor,e=t.ui.componentFactory,n=t.t;if(e.add("ckfinder",i=>{const r=t.commands.get("ckfinder"),s=new wt(i);return s.set({label:n("Insert image or file"),icon:ot.browseFiles,tooltip:!0}),s.bind("isEnabled").to(r),s.on("execute",()=>{t.execute("ckfinder"),t.editing.view.focus()}),s}),t.plugins.has("ImageInsertUI")){const i=t.plugins.get("ImageInsertUI"),r=t.commands.get("ckfinder");i.registerIntegration({name:"assetManager",observable:r,buttonViewCreator:()=>{const s=this.editor.ui.componentFactory.create("ckfinder");return s.icon=ot.imageAssetManager,s.bind("label").to(i,"isImageSelected",a=>n(a?"Replace image with file manager":"Insert image with file manager")),s},formViewCreator:()=>{const s=this.editor.ui.componentFactory.create("ckfinder");return s.icon=ot.imageAssetManager,s.withText=!0,s.bind("label").to(i,"isImageSelected",a=>n(a?"Replace with file manager":"Insert with file manager")),s.on("execute",()=>{i.dropdownView.isOpen=!1}),s}})}}}class X1 extends at{constructor(t){super(t),this.affectsData=!1,this.stopListening(this.editor.model.document,"change"),this.listenTo(this.editor.model.document,"change",()=>this.refresh(),{priority:"low"})}refresh(){const t=this.editor.commands.get("insertImage"),e=this.editor.commands.get("link");this.isEnabled=t.isEnabled||e.isEnabled}execute(){const t=this.editor,e=this.editor.config.get("ckfinder.openerMethod")||"modal";if(e!="popup"&&e!="modal")throw new _("ckfinder-unknown-openermethod",t);const n=this.editor.config.get("ckfinder.options")||{};n.chooseFiles=!0;const i=n.onInit;n.language||(n.language=t.locale.uiLanguage),n.onInit=r=>{i&&i(r),r.on("files:choose",s=>{const a=s.data.files.toArray(),c=a.filter(h=>!h.isImage()),l=a.filter(h=>h.isImage());for(const h of c)t.execute("link",h.getUrl());const d=[];for(const h of l){const u=h.getUrl();d.push(u||r.request("file:getProxyUrl",{file:h}))}d.length&&ap(t,d)}),r.on("file:choose:resizedImage",s=>{const a=s.data.resizedUrl;if(a)ap(t,[a]);else{const c=t.plugins.get("Notification"),l=t.locale.t;c.showWarning(l("Could not obtain resized image URL."),{title:l("Selecting resized image failed"),namespace:"ckfinder"})}})},window.CKFinder[e](n)}}function ap(o,t){if(o.commands.get("insertImage").isEnabled)o.execute("insertImage",{source:t});else{const e=o.plugins.get("Notification"),n=o.locale.t;e.showWarning(n("Could not insert image at the current position."),{title:n("Inserting image failed"),namespace:"ckfinder"})}}class ty extends R{static get pluginName(){return"CKFinderEditing"}static get requires(){return[ea,"LinkEditing"]}init(){const t=this.editor;if(!t.plugins.has("ImageBlockEditing")&&!t.plugins.has("ImageInlineEditing"))throw new _("ckfinder-missing-image-plugin",t);t.commands.add("ckfinder",new X1(t))}}class ey extends R{static get pluginName(){return"CloudServicesUploadAdapter"}static get requires(){return["CloudServices",je]}init(){const t=this.editor,e=t.plugins.get("CloudServices"),n=e.token,i=e.uploadUrl;if(!n)return;const r=t.plugins.get("CloudServicesCore");this._uploadGateway=r.createUploadGateway(n,i),t.plugins.get(je).createUploadAdapter=s=>new ny(this._uploadGateway,s)}}class ny{constructor(t,e){this.uploadGateway=t,this.loader=e}upload(){return this.loader.file.then(t=>(this.fileUploader=this.uploadGateway.upload(t),this.fileUploader.on("progress",(e,n)=>{this.loader.uploadTotal=n.total,this.loader.uploaded=n.uploaded}),this.fileUploader.send()))}abort(){this.fileUploader.abort()}}class oy extends at{constructor(t){super(t),this._isEnabledBasedOnSelection=!1}refresh(){const t=this.editor.model,e=Wt(t.document.selection.getSelectedBlocks());this.value=!!e&&e.is("element","paragraph"),this.isEnabled=!!e&&cp(e,t.schema)}execute(t={}){const e=this.editor.model,n=e.document,i=t.selection||n.selection;e.canEditAt(i)&&e.change(r=>{const s=i.getSelectedBlocks();for(const a of s)!a.is("element","paragraph")&&cp(a,e.schema)&&r.rename(a,"paragraph")})}}function cp(o,t){return t.checkChild(o.parent,"paragraph")&&!t.isObject(o)}class iy extends at{constructor(t){super(t),this._isEnabledBasedOnSelection=!1}execute(t){const e=this.editor.model,n=t.attributes;let i=t.position;e.canEditAt(i)&&e.change(r=>{if(i=this._findPositionToInsertParagraph(i,r),!i)return;const s=r.createElement("paragraph");n&&e.schema.setAllowedAttributes(s,n,r),e.insertContent(s,i),r.setSelection(s,"in")})}_findPositionToInsertParagraph(t,e){const n=this.editor.model;if(n.schema.checkChild(t,"paragraph"))return t;const i=n.schema.findAllowedParent(t,"paragraph");if(!i)return null;const r=t.parent,s=n.schema.checkChild(r,"$text");return r.isEmpty||s&&t.isAtEnd?n.createPositionAfter(r):!r.isEmpty&&s&&t.isAtStart?n.createPositionBefore(r):e.split(t,i).position}}const lp=class extends R{static get pluginName(){return"Paragraph"}init(){const o=this.editor,t=o.model;o.commands.add("paragraph",new oy(o)),o.commands.add("insertParagraph",new iy(o)),t.schema.register("paragraph",{inheritAllFrom:"$block"}),o.conversion.elementToElement({model:"paragraph",view:"p"}),o.conversion.for("upcast").elementToElement({model:(e,{writer:n})=>lp.paragraphLikeElements.has(e.name)?e.isEmpty?null:n.createElement("paragraph"):null,view:/.+/,converterPriority:"low"})}};let fa=lp;fa.paragraphLikeElements=new Set(["blockquote","dd","div","dt","h1","h2","h3","h4","h5","h6","li","p","td","th"]);class ry extends at{constructor(t,e){super(t),this.modelElements=e}refresh(){const t=Wt(this.editor.model.document.selection.getSelectedBlocks());this.value=!!t&&this.modelElements.includes(t.name)&&t.name,this.isEnabled=!!t&&this.modelElements.some(e=>dp(t,e,this.editor.model.schema))}execute(t){const e=this.editor.model,n=e.document,i=t.value;e.change(r=>{const s=Array.from(n.selection.getSelectedBlocks()).filter(a=>dp(a,i,e.schema));for(const a of s)a.is("element",i)||r.rename(a,i)})}}function dp(o,t,e){return e.checkChild(o.parent,t)&&!e.isObject(o)}const hp="paragraph";class sy extends R{static get pluginName(){return"HeadingEditing"}constructor(t){super(t),t.config.define("heading",{options:[{model:"paragraph",title:"Paragraph",class:"ck-heading_paragraph"},{model:"heading1",view:"h2",title:"Heading 1",class:"ck-heading_heading1"},{model:"heading2",view:"h3",title:"Heading 2",class:"ck-heading_heading2"},{model:"heading3",view:"h4",title:"Heading 3",class:"ck-heading_heading3"}]})}static get requires(){return[fa]}init(){const t=this.editor,e=t.config.get("heading.options"),n=[];for(const i of e)i.model!=="paragraph"&&(t.model.schema.register(i.model,{inheritAllFrom:"$block"}),t.conversion.elementToElement(i),n.push(i.model));this._addDefaultH1Conversion(t),t.commands.add("heading",new ry(t,n))}afterInit(){const t=this.editor,e=t.commands.get("enter"),n=t.config.get("heading.options");e&&this.listenTo(e,"afterExecute",(i,r)=>{const s=t.model.document.selection.getFirstPosition().parent;n.some(a=>s.is("element",a.model))&&!s.is("element",hp)&&s.childCount===0&&r.writer.rename(s,hp)})}_addDefaultH1Conversion(t){t.conversion.for("upcast").elementToElement({model:"heading1",view:"h1",converterPriority:At.low+1})}}var up=N(2500),ay={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(up.c,ay),up.c.locals;class cy extends R{static get pluginName(){return"HeadingUI"}init(){const t=this.editor,e=t.t,n=function(s){const a=s.t,c={Paragraph:a("Paragraph"),"Heading 1":a("Heading 1"),"Heading 2":a("Heading 2"),"Heading 3":a("Heading 3"),"Heading 4":a("Heading 4"),"Heading 5":a("Heading 5"),"Heading 6":a("Heading 6")};return s.config.get("heading.options").map(l=>{const d=c[l.title];return d&&d!=l.title&&(l.title=d),l})}(t),i=e("Choose heading"),r=e("Heading");t.ui.componentFactory.add("heading",s=>{const a={},c=new Me,l=t.commands.get("heading"),d=t.commands.get("paragraph"),h=[l];for(const g of n){const p={type:"button",model:new vu({label:g.title,class:g.class,role:"menuitemradio",withText:!0})};g.model==="paragraph"?(p.model.bind("isOn").to(d,"value"),p.model.set("commandName","paragraph"),h.push(d)):(p.model.bind("isOn").to(l,"value",k=>k===g.model),p.model.set({commandName:"heading",commandValue:g.model})),c.add(p),a[g.model]=g.title}const u=rn(s);return Kh(u,c,{ariaLabel:r,role:"menu"}),u.buttonView.set({ariaLabel:r,ariaLabelledBy:void 0,isOn:!1,withText:!0,tooltip:r}),u.extendTemplate({attributes:{class:["ck-heading-dropdown"]}}),u.bind("isEnabled").toMany(h,"isEnabled",(...g)=>g.some(p=>p)),u.buttonView.bind("label").to(l,"value",d,"value",(g,p)=>{const k=g||p&&"paragraph";return typeof k=="boolean"?i:a[k]?a[k]:i}),this.listenTo(u,"execute",g=>{const{commandName:p,commandValue:k}=g.source;t.execute(p,k?{value:k}:void 0),t.editing.view.focus()}),u})}}function gp(o){return o.createContainerElement("figure",{class:"image"},[o.createEmptyElement("img"),o.createSlot("children")])}function pp(o,t){const e=o.plugins.get("ImageUtils"),n=o.plugins.has("ImageInlineEditing")&&o.plugins.has("ImageBlockEditing");return r=>e.isInlineImageView(r)?n&&(r.getStyle("display")=="block"||r.findAncestor(e.isBlockImageView)?"imageBlock":"imageInline")!==t?null:i(r):null;function i(r){const s={name:!0};return r.hasAttribute("src")&&(s.attributes=["src"]),s}}function ka(o,t){const e=Wt(t.getSelectedBlocks());return!e||o.isObject(e)||e.isEmpty&&e.name!="listItem"?"imageBlock":"imageInline"}function br(o){return o&&o.endsWith("px")?parseInt(o):null}function mp(o){const t=br(o.getStyle("width")),e=br(o.getStyle("height"));return!(!t||!e)}var ly=Object.defineProperty,fp=Object.getOwnPropertySymbols,dy=Object.prototype.hasOwnProperty,hy=Object.prototype.propertyIsEnumerable,kp=(o,t,e)=>t in o?ly(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,bp=(o,t)=>{for(var e in t||(t={}))dy.call(t,e)&&kp(o,e,t[e]);if(fp)for(var e of fp(t))hy.call(t,e)&&kp(o,e,t[e]);return o};const uy=/^(image|image-inline)$/;class le extends R{constructor(){super(...arguments),this._domEmitter=new(Ae())}static get pluginName(){return"ImageUtils"}isImage(t){return this.isInlineImage(t)||this.isBlockImage(t)}isInlineImageView(t){return!!t&&t.is("element","img")}isBlockImageView(t){return!!t&&t.is("element","figure")&&t.hasClass("image")}insertImage(t={},e=null,n=null,i={}){const r=this.editor,s=r.model,a=s.document.selection,c=wp(r,e||a,n);t=bp(bp({},Object.fromEntries(a.getAttributes())),t);for(const l in t)s.schema.checkAttribute(c,l)||delete t[l];return s.change(l=>{const{setImageSizes:d=!0}=i,h=l.createElement(c,t);return s.insertObject(h,e,null,{setSelection:"on",findOptimalPosition:e||c=="imageInline"?void 0:"auto"}),h.parent?(d&&this.setImageNaturalSizeAttributes(h),h):null})}setImageNaturalSizeAttributes(t){const e=t.getAttribute("src");e&&(t.getAttribute("width")||t.getAttribute("height")||this.editor.model.change(n=>{const i=new $.window.Image;this._domEmitter.listenTo(i,"load",()=>{t.getAttribute("width")||t.getAttribute("height")||this.editor.model.enqueueChange(n.batch,r=>{r.setAttribute("width",i.naturalWidth,t),r.setAttribute("height",i.naturalHeight,t)}),this._domEmitter.stopListening(i,"load")}),i.src=e}))}getClosestSelectedImageWidget(t){const e=t.getFirstPosition();if(!e)return null;const n=t.getSelectedElement();if(n&&this.isImageWidget(n))return n;let i=e.parent;for(;i;){if(i.is("element")&&this.isImageWidget(i))return i;i=i.parent}return null}getClosestSelectedImageElement(t){const e=t.getSelectedElement();return this.isImage(e)?e:t.getFirstPosition().findAncestor("imageBlock")}getImageWidgetFromImageView(t){return t.findAncestor({classes:uy})}isImageAllowed(){const t=this.editor.model.document.selection;return function(e,n){if(wp(e,n,null)=="imageBlock"){const r=function(s,a){const c=mg(s,a),l=c.start.parent;return l.isEmpty&&!l.is("element","$root")?l.parent:l}(n,e.model);if(e.model.schema.checkChild(r,"imageBlock"))return!0}else if(e.model.schema.checkChild(n.focus,"imageInline"))return!0;return!1}(this.editor,t)&&function(e){return[...e.focus.getAncestors()].every(n=>!n.is("element","imageBlock"))}(t)}toImageWidget(t,e,n){return e.setCustomProperty("image",!0,t),aa(t,e,{label:()=>{const i=this.findViewImgElement(t).getAttribute("alt");return i?`${i} ${n}`:n}})}isImageWidget(t){return!!t.getCustomProperty("image")&&qt(t)}isBlockImage(t){return!!t&&t.is("element","imageBlock")}isInlineImage(t){return!!t&&t.is("element","imageInline")}findViewImgElement(t){if(this.isInlineImageView(t))return t;const e=this.editor.editing.view;for(const{item:n}of e.createRangeIn(t))if(this.isInlineImageView(n))return n}destroy(){return this._domEmitter.stopListening(),super.destroy()}}function wp(o,t,e){const n=o.model.schema,i=o.config.get("image.insert.type");return o.plugins.has("ImageBlockEditing")?o.plugins.has("ImageInlineEditing")?e||(i==="inline"?"imageInline":i!=="auto"?"imageBlock":t.is("selection")?ka(n,t):n.checkChild(t,"imageInline")?"imageInline":"imageBlock"):"imageBlock":"imageInline"}class gy extends at{refresh(){const t=this.editor.plugins.get("ImageUtils").getClosestSelectedImageElement(this.editor.model.document.selection);this.isEnabled=!!t,this.isEnabled&&t.hasAttribute("alt")?this.value=t.getAttribute("alt"):this.value=!1}execute(t){const e=this.editor,n=e.plugins.get("ImageUtils"),i=e.model,r=n.getClosestSelectedImageElement(i.document.selection);i.change(s=>{s.setAttribute("alt",t.newValue,r)})}}class py extends R{static get requires(){return[le]}static get pluginName(){return"ImageTextAlternativeEditing"}init(){this.editor.commands.add("imageTextAlternative",new gy(this.editor))}}var Ap=N(5688),my={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Ap.c,my),Ap.c.locals;var Cp=N(2636),fy={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Cp.c,fy),Cp.c.locals;class ky extends tt{constructor(t){super(t);const e=this.locale.t;this.focusTracker=new Qt,this.keystrokes=new ie,this.labeledInput=this._createLabeledInputView(),this.saveButtonView=this._createButton(e("Save"),ot.check,"ck-button-save"),this.saveButtonView.type="submit",this.cancelButtonView=this._createButton(e("Cancel"),ot.cancel,"ck-button-cancel","cancel"),this._focusables=new Ce,this._focusCycler=new _e({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.setTemplate({tag:"form",attributes:{class:["ck","ck-text-alternative-form","ck-responsive-form"],tabindex:"-1"},children:[this.labeledInput,this.saveButtonView,this.cancelButtonView]})}render(){super.render(),this.keystrokes.listenTo(this.element),m({view:this}),[this.labeledInput,this.saveButtonView,this.cancelButtonView].forEach(t=>{this._focusables.add(t),this.focusTracker.add(t.element)})}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createButton(t,e,n,i){const r=new wt(this.locale);return r.set({label:t,icon:e,tooltip:!0}),r.extendTemplate({attributes:{class:n}}),i&&r.delegate("execute").to(this,i),r}_createLabeledInputView(){const t=this.locale.t,e=new Pi(this.locale,er);return e.label=t("Text alternative"),e}}function _p(o){const t=o.editing.view,e=ae.defaultPositions,n=o.plugins.get("ImageUtils");return{target:t.domConverter.mapViewToDom(n.getClosestSelectedImageWidget(t.document.selection)),positions:[e.northArrowSouth,e.northArrowSouthWest,e.northArrowSouthEast,e.southArrowNorth,e.southArrowNorthWest,e.southArrowNorthEast,e.viewportStickyNorth]}}class by extends R{static get requires(){return[rr]}static get pluginName(){return"ImageTextAlternativeUI"}init(){this._createButton()}destroy(){super.destroy(),this._form&&this._form.destroy()}_createButton(){const t=this.editor,e=t.t;t.ui.componentFactory.add("imageTextAlternative",n=>{const i=t.commands.get("imageTextAlternative"),r=new wt(n);return r.set({label:e("Change image text alternative"),icon:ot.textAlternative,tooltip:!0}),r.bind("isEnabled").to(i,"isEnabled"),r.bind("isOn").to(i,"value",s=>!!s),this.listenTo(r,"execute",()=>{this._showForm()}),r})}_createForm(){const t=this.editor,e=t.editing.view.document,n=t.plugins.get("ImageUtils");this._balloon=this.editor.plugins.get("ContextualBalloon"),this._form=new(x(ky))(t.locale),this._form.render(),this.listenTo(this._form,"submit",()=>{t.execute("imageTextAlternative",{newValue:this._form.labeledInput.fieldView.element.value}),this._hideForm(!0)}),this.listenTo(this._form,"cancel",()=>{this._hideForm(!0)}),this._form.keystrokes.set("Esc",(i,r)=>{this._hideForm(!0),r()}),this.listenTo(t.ui,"update",()=>{n.getClosestSelectedImageWidget(e.selection)?this._isVisible&&function(i){const r=i.plugins.get("ContextualBalloon");if(i.plugins.get("ImageUtils").getClosestSelectedImageWidget(i.editing.view.document.selection)){const s=_p(i);r.updatePosition(s)}}(t):this._hideForm(!0)}),v({emitter:this._form,activator:()=>this._isVisible,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(){if(this._isVisible)return;this._form||this._createForm();const t=this.editor,e=t.commands.get("imageTextAlternative"),n=this._form.labeledInput;this._form.disableCssTransitions(),this._isInBalloon||this._balloon.add({view:this._form,position:_p(t)}),n.fieldView.value=n.fieldView.element.value=e.value||"",this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(t=!1){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),t&&this.editor.editing.view.focus())}get _isVisible(){return!!this._balloon&&this._balloon.visibleView===this._form}get _isInBalloon(){return!!this._balloon&&this._balloon.hasView(this._form)}}class vp extends R{static get requires(){return[py,by]}static get pluginName(){return"ImageTextAlternative"}}function yp(o,t){const e=(n,i,r)=>{if(!r.consumable.consume(i.item,n.name))return;const s=r.writer,a=r.mapper.toViewElement(i.item),c=o.findViewImgElement(a);i.attributeNewValue===null?(s.removeAttribute("srcset",c),s.removeAttribute("sizes",c)):i.attributeNewValue&&(s.setAttribute("srcset",i.attributeNewValue,c),s.setAttribute("sizes","100vw",c))};return n=>{n.on(`attribute:srcset:${t}`,e)}}function wr(o,t,e){const n=(i,r,s)=>{if(!s.consumable.consume(r.item,i.name))return;const a=s.writer,c=s.mapper.toViewElement(r.item),l=o.findViewImgElement(c);a.setAttribute(r.attributeKey,r.attributeNewValue||"",l)};return i=>{i.on(`attribute:${e}:${t}`,n)}}class xp extends Ke{observe(t){this.listenTo(t,"load",(e,n)=>{const i=n.target;this.checkShouldIgnoreEventFromTarget(i)||i.tagName=="IMG"&&this._fireEvents(n)},{useCapture:!0})}stopObserving(t){this.stopListening(t)}_fireEvents(t){this.isEnabled&&(this.document.fire("layoutChanged"),this.document.fire("imageLoaded",t))}}var wy=Object.defineProperty,Ep=Object.getOwnPropertySymbols,Ay=Object.prototype.hasOwnProperty,Cy=Object.prototype.propertyIsEnumerable,Dp=(o,t,e)=>t in o?wy(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Ar=(o,t)=>{for(var e in t||(t={}))Ay.call(t,e)&&Dp(o,e,t[e]);if(Ep)for(var e of Ep(t))Cy.call(t,e)&&Dp(o,e,t[e]);return o};class _y extends at{constructor(t){super(t);const e=t.config.get("image.insert.type");t.plugins.has("ImageBlockEditing")||e==="block"&&Q("image-block-plugin-required"),t.plugins.has("ImageInlineEditing")||e==="inline"&&Q("image-inline-plugin-required")}refresh(){const t=this.editor.plugins.get("ImageUtils");this.isEnabled=t.isImageAllowed()}execute(t){const e=Bt(t.source),n=this.editor.model.document.selection,i=this.editor.plugins.get("ImageUtils"),r=Object.fromEntries(n.getAttributes());e.forEach((s,a)=>{const c=n.getSelectedElement();if(typeof s=="string"&&(s={src:s}),a&&c&&i.isImage(c)){const l=this.editor.model.createPositionAfter(c);i.insertImage(Ar(Ar({},s),r),l)}else i.insertImage(Ar(Ar({},s),r))})}}class vy extends at{constructor(t){super(t),this.decorate("cleanupImage")}refresh(){const t=this.editor.plugins.get("ImageUtils"),e=this.editor.model.document.selection.getSelectedElement();this.isEnabled=t.isImage(e),this.value=this.isEnabled?e.getAttribute("src"):null}execute(t){const e=this.editor.model.document.selection.getSelectedElement(),n=this.editor.plugins.get("ImageUtils");this.editor.model.change(i=>{i.setAttribute("src",t.source,e),this.cleanupImage(i,e),n.setImageNaturalSizeAttributes(e)})}cleanupImage(t,e){t.removeAttribute("srcset",e),t.removeAttribute("sizes",e),t.removeAttribute("sources",e),t.removeAttribute("width",e),t.removeAttribute("height",e),t.removeAttribute("alt",e)}}class ba extends R{static get requires(){return[le]}static get pluginName(){return"ImageEditing"}init(){const t=this.editor,e=t.conversion;t.editing.view.addObserver(xp),e.for("upcast").attributeToAttribute({view:{name:"img",key:"alt"},model:"alt"}).attributeToAttribute({view:{name:"img",key:"srcset"},model:"srcset"});const n=new _y(t),i=new vy(t);t.commands.add("insertImage",n),t.commands.add("replaceImageSource",i),t.commands.add("imageInsert",n)}}class Ip extends R{static get requires(){return[le]}static get pluginName(){return"ImageSizeAttributes"}afterInit(){this._registerSchema(),this._registerConverters("imageBlock"),this._registerConverters("imageInline")}_registerSchema(){this.editor.plugins.has("ImageBlockEditing")&&this.editor.model.schema.extend("imageBlock",{allowAttributes:["width","height"]}),this.editor.plugins.has("ImageInlineEditing")&&this.editor.model.schema.extend("imageInline",{allowAttributes:["width","height"]})}_registerConverters(t){const e=this.editor,n=e.plugins.get("ImageUtils"),i=t==="imageBlock"?"figure":"img";function r(s,a,c,l){s.on(`attribute:${a}:${t}`,(d,h,u)=>{if(!u.consumable.consume(h.item,d.name))return;const g=u.writer,p=u.mapper.toViewElement(h.item),k=n.findViewImgElement(p);if(h.attributeNewValue!==null?g.setAttribute(c,h.attributeNewValue,k):g.removeAttribute(c,k),h.item.hasAttribute("sources"))return;const b=h.item.hasAttribute("resizedWidth");if(t==="imageInline"&&!b&&!l)return;const A=h.item.getAttribute("width"),E=h.item.getAttribute("height");A&&E&&g.setStyle("aspect-ratio",`${A}/${E}`,k)})}e.conversion.for("upcast").attributeToAttribute({view:{name:i,styles:{width:/.+/}},model:{key:"width",value:s=>mp(s)?br(s.getStyle("width")):null}}).attributeToAttribute({view:{name:i,key:"width"},model:"width"}).attributeToAttribute({view:{name:i,styles:{height:/.+/}},model:{key:"height",value:s=>mp(s)?br(s.getStyle("height")):null}}).attributeToAttribute({view:{name:i,key:"height"},model:"height"}),e.conversion.for("editingDowncast").add(s=>{r(s,"width","width",!0),r(s,"height","height",!0)}),e.conversion.for("dataDowncast").add(s=>{r(s,"width","width",!1),r(s,"height","height",!1)})}}class Sp extends at{constructor(t,e){super(t),this._modelElementName=e}refresh(){const t=this.editor.plugins.get("ImageUtils"),e=t.getClosestSelectedImageElement(this.editor.model.document.selection);this._modelElementName==="imageBlock"?this.isEnabled=t.isInlineImage(e):this.isEnabled=t.isBlockImage(e)}execute(t={}){const e=this.editor,n=this.editor.model,i=e.plugins.get("ImageUtils"),r=i.getClosestSelectedImageElement(n.document.selection),s=Object.fromEntries(r.getAttributes());return s.src||s.uploadId?n.change(a=>{const{setImageSizes:c=!0}=t,l=Array.from(n.markers).filter(u=>u.getRange().containsItem(r)),d=i.insertImage(s,n.createSelection(r,"on"),this._modelElementName,{setImageSizes:c});if(!d)return null;const h=a.createRangeOn(d);for(const u of l){const g=u.getRange(),p=g.root.rootName!="$graveyard"?g.getJoined(h,!0):h;a.updateMarker(u,{range:p})}return{oldElement:r,newElement:d}}):null}}var Tp=N(9684),yy={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Tp.c,yy),Tp.c.locals;class Mp extends R{static get requires(){return[le]}static get pluginName(){return"ImagePlaceholder"}afterInit(){this._setupSchema(),this._setupConversion(),this._setupLoadListener()}_setupSchema(){const t=this.editor.model.schema;t.isRegistered("imageBlock")&&t.extend("imageBlock",{allowAttributes:["placeholder"]}),t.isRegistered("imageInline")&&t.extend("imageInline",{allowAttributes:["placeholder"]})}_setupConversion(){const t=this.editor,e=t.conversion,n=t.plugins.get("ImageUtils");e.for("editingDowncast").add(i=>{i.on("attribute:placeholder",(r,s,a)=>{if(!a.consumable.test(s.item,r.name)||!s.item.is("element","imageBlock")&&!s.item.is("element","imageInline"))return;a.consumable.consume(s.item,r.name);const c=a.writer,l=a.mapper.toViewElement(s.item),d=n.findViewImgElement(l);s.attributeNewValue?(c.addClass("image_placeholder",d),c.setStyle("background-image",`url(${s.attributeNewValue})`,d),c.setCustomProperty("editingPipeline:doNotReuseOnce",!0,d)):(c.removeClass("image_placeholder",d),c.removeStyle("background-image",d))})})}_setupLoadListener(){const t=this.editor,e=t.model,n=t.editing,i=n.view,r=t.plugins.get("ImageUtils");i.addObserver(xp),this.listenTo(i.document,"imageLoaded",(s,a)=>{const c=i.domConverter.mapDomToView(a.target);if(!c)return;const l=r.getImageWidgetFromImageView(c);if(!l)return;const d=n.mapper.toModelElement(l);d&&d.hasAttribute("placeholder")&&e.enqueueChange({isUndoable:!1},h=>{h.removeAttribute("placeholder",d)})})}}class Bp extends R{static get requires(){return[ba,Ip,le,Mp,Re]}static get pluginName(){return"ImageBlockEditing"}init(){const t=this.editor;t.model.schema.register("imageBlock",{inheritAllFrom:"$blockObject",allowAttributes:["alt","src","srcset"]}),this._setupConversion(),t.plugins.has("ImageInlineEditing")&&(t.commands.add("imageTypeBlock",new Sp(this.editor,"imageBlock")),this._setupClipboardIntegration())}_setupConversion(){const t=this.editor,e=t.t,n=t.conversion,i=t.plugins.get("ImageUtils");n.for("dataDowncast").elementToStructure({model:"imageBlock",view:(r,{writer:s})=>gp(s)}),n.for("editingDowncast").elementToStructure({model:"imageBlock",view:(r,{writer:s})=>i.toImageWidget(gp(s),s,e("image widget"))}),n.for("downcast").add(wr(i,"imageBlock","src")).add(wr(i,"imageBlock","alt")).add(yp(i,"imageBlock")),n.for("upcast").elementToElement({view:pp(t,"imageBlock"),model:(r,{writer:s})=>s.createElement("imageBlock",r.hasAttribute("src")?{src:r.getAttribute("src")}:void 0)}).add(function(r){const s=(a,c,l)=>{if(!l.consumable.test(c.viewItem,{name:!0,classes:"image"}))return;const d=r.findViewImgElement(c.viewItem);if(!d||!l.consumable.test(d,{name:!0}))return;l.consumable.consume(c.viewItem,{name:!0,classes:"image"});const h=Wt(l.convertItem(d,c.modelCursor).modelRange.getItems());h?(l.convertChildren(c.viewItem,h),l.updateConversionResult(h,c)):l.consumable.revert(c.viewItem,{name:!0,classes:"image"})};return a=>{a.on("element:figure",s)}}(i))}_setupClipboardIntegration(){const t=this.editor,e=t.model,n=t.editing.view,i=t.plugins.get("ImageUtils"),r=t.plugins.get("ClipboardPipeline");this.listenTo(r,"inputTransformation",(s,a)=>{const c=Array.from(a.content.getChildren());let l;if(!c.every(i.isInlineImageView))return;l=a.targetRanges?t.editing.mapper.toModelRange(a.targetRanges[0]):e.document.selection.getFirstRange();const d=e.createSelection(l);if(ka(e.schema,d)==="imageBlock"){const h=new on(n.document),u=c.map(g=>h.createElement("figure",{class:"image"},g));a.content=h.createDocumentFragment(u)}}),this.listenTo(r,"contentInsertion",(s,a)=>{a.method==="paste"&&e.change(c=>{const l=c.createRangeIn(a.content);for(const d of l.getItems())d.is("element","imageBlock")&&i.setImageNaturalSizeAttributes(d)})})}}var Np=N(3756),xy={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Np.c,xy),Np.c.locals;class Ey extends tt{constructor(t,e=[]){super(t),this.focusTracker=new Qt,this.keystrokes=new ie,this._focusables=new Ce,this.children=this.createCollection(),this._focusCycler=new _e({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});for(const n of e)this.children.add(n),this._focusables.add(n),n instanceof mw&&this._focusables.addMany(n.children);if(this._focusables.length>1)for(const n of this._focusables)Dy(n)&&(n.focusCycler.on("forwardCycle",i=>{this._focusCycler.focusNext(),i.stop()}),n.focusCycler.on("backwardCycle",i=>{this._focusCycler.focusPrevious(),i.stop()}));this.setTemplate({tag:"form",attributes:{class:["ck","ck-image-insert-form"],tabindex:-1},children:this.children})}render(){super.render(),m({view:this});for(const e of this._focusables)this.focusTracker.add(e.element);this.keystrokes.listenTo(this.element);const t=e=>e.stopPropagation();this.keystrokes.set("arrowright",t),this.keystrokes.set("arrowleft",t),this.keystrokes.set("arrowup",t),this.keystrokes.set("arrowdown",t)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}}function Dy(o){return"focusCycler"in o}class Pp extends R{constructor(t){super(t),this._integrations=new Map,t.config.define("image.insert.integrations",["upload","assetManager","url"])}static get pluginName(){return"ImageInsertUI"}static get requires(){return[le]}init(){const t=this.editor,e=t.model.document.selection,n=t.plugins.get("ImageUtils");this.set("isImageSelected",!1),this.listenTo(t.model.document,"change",()=>{this.isImageSelected=n.isImage(e.getSelectedElement())});const i=r=>this._createToolbarComponent(r);t.ui.componentFactory.add("insertImage",i),t.ui.componentFactory.add("imageInsert",i)}registerIntegration({name:t,observable:e,buttonViewCreator:n,formViewCreator:i,requiresForm:r}){this._integrations.has(t)&&Q("image-insert-integration-exists",{name:t}),this._integrations.set(t,{observable:e,buttonViewCreator:n,formViewCreator:i,requiresForm:!!r})}_createToolbarComponent(t){const e=this.editor,n=t.t,i=this._prepareIntegrations();if(!i.length)return null;let r;const s=i[0];if(i.length==1){if(!s.requiresForm)return s.buttonViewCreator(!0);r=s.buttonViewCreator(!0)}else{const l=s.buttonViewCreator(!1);r=new tr(t,l),r.tooltip=!0,r.bind("label").to(this,"isImageSelected",d=>n(d?"Replace image":"Insert image"))}const a=this.dropdownView=rn(t,r),c=i.map(({observable:l})=>l);return a.bind("isEnabled").toMany(c,"isEnabled",(...l)=>l.some(d=>d)),a.once("change:isOpen",()=>{const l=i.map(({formViewCreator:h})=>h(i.length==1)),d=new Ey(e.locale,l);a.panelView.children.add(d)}),a}_prepareIntegrations(){const t=this.editor.config.get("image.insert.integrations"),e=[];if(!t.length)return Q("image-insert-integrations-not-specified"),e;for(const n of t)this._integrations.has(n)?e.push(this._integrations.get(n)):["upload","assetManager","url"].includes(n)||Q("image-insert-unknown-integration",{item:n});return e.length||Q("image-insert-integrations-not-registered"),e}}var Lp=N(1220),Iy={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Lp.c,Iy),Lp.c.locals;class Sy extends R{static get requires(){return[Bp,li,vp,Pp]}static get pluginName(){return"ImageBlock"}}class Ty extends R{static get requires(){return[ba,Ip,le,Mp,Re]}static get pluginName(){return"ImageInlineEditing"}init(){const t=this.editor,e=t.model.schema;e.register("imageInline",{inheritAllFrom:"$inlineObject",allowAttributes:["alt","src","srcset"]}),e.addChildCheck((n,i)=>{if(n.endsWith("caption")&&i.name==="imageInline")return!1}),this._setupConversion(),t.plugins.has("ImageBlockEditing")&&(t.commands.add("imageTypeInline",new Sp(this.editor,"imageInline")),this._setupClipboardIntegration())}_setupConversion(){const t=this.editor,e=t.t,n=t.conversion,i=t.plugins.get("ImageUtils");n.for("dataDowncast").elementToElement({model:"imageInline",view:(r,{writer:s})=>s.createEmptyElement("img")}),n.for("editingDowncast").elementToStructure({model:"imageInline",view:(r,{writer:s})=>i.toImageWidget(function(a){return a.createContainerElement("span",{class:"image-inline"},a.createEmptyElement("img"))}(s),s,e("image widget"))}),n.for("downcast").add(wr(i,"imageInline","src")).add(wr(i,"imageInline","alt")).add(yp(i,"imageInline")),n.for("upcast").elementToElement({view:pp(t,"imageInline"),model:(r,{writer:s})=>s.createElement("imageInline",r.hasAttribute("src")?{src:r.getAttribute("src")}:void 0)})}_setupClipboardIntegration(){const t=this.editor,e=t.model,n=t.editing.view,i=t.plugins.get("ImageUtils"),r=t.plugins.get("ClipboardPipeline");this.listenTo(r,"inputTransformation",(s,a)=>{const c=Array.from(a.content.getChildren());let l;if(!c.every(i.isBlockImageView))return;l=a.targetRanges?t.editing.mapper.toModelRange(a.targetRanges[0]):e.document.selection.getFirstRange();const d=e.createSelection(l);if(ka(e.schema,d)==="imageInline"){const h=new on(n.document),u=c.map(g=>g.childCount===1?(Array.from(g.getAttributes()).forEach(p=>h.setAttribute(...p,i.findViewImgElement(g))),g.getChild(0)):g);a.content=h.createDocumentFragment(u)}}),this.listenTo(r,"contentInsertion",(s,a)=>{a.method==="paste"&&e.change(c=>{const l=c.createRangeIn(a.content);for(const d of l.getItems())d.is("element","imageInline")&&i.setImageNaturalSizeAttributes(d)})})}}class My extends R{static get requires(){return[Ty,li,vp,Pp]}static get pluginName(){return"ImageInline"}}class Op extends R{static get pluginName(){return"ImageCaptionUtils"}static get requires(){return[le]}getCaptionFromImageModelElement(t){for(const e of t.getChildren())if(e&&e.is("element","caption"))return e;return null}getCaptionFromModelSelection(t){const e=this.editor.plugins.get("ImageUtils"),n=t.getFirstPosition().findAncestor("caption");return n&&e.isBlockImage(n.parent)?n:null}matchImageCaptionViewElement(t){const e=this.editor.plugins.get("ImageUtils");return t.name=="figcaption"&&e.isBlockImageView(t.parent)?{name:!0}:null}}class By extends at{refresh(){const t=this.editor,e=t.plugins.get("ImageCaptionUtils"),n=t.plugins.get("ImageUtils");if(!t.plugins.has(Bp))return this.isEnabled=!1,void(this.value=!1);const i=t.model.document.selection,r=i.getSelectedElement();if(!r){const s=e.getCaptionFromModelSelection(i);return this.isEnabled=!!s,void(this.value=!!s)}this.isEnabled=n.isImage(r),this.isEnabled?this.value=!!e.getCaptionFromImageModelElement(r):this.value=!1}execute(t={}){const{focusCaptionOnShow:e}=t;this.editor.model.change(n=>{this.value?this._hideImageCaption(n):this._showImageCaption(n,e)})}_showImageCaption(t,e){const n=this.editor.model.document.selection,i=this.editor.plugins.get("ImageCaptionEditing"),r=this.editor.plugins.get("ImageUtils");let s=n.getSelectedElement();const a=i._getSavedCaption(s);r.isInlineImage(s)&&(this.editor.execute("imageTypeBlock"),s=n.getSelectedElement());const c=a||t.createElement("caption");t.append(c,s),e&&t.setSelection(c,"in")}_hideImageCaption(t){const e=this.editor,n=e.model.document.selection,i=e.plugins.get("ImageCaptionEditing"),r=e.plugins.get("ImageCaptionUtils");let s,a=n.getSelectedElement();a?s=r.getCaptionFromImageModelElement(a):(s=r.getCaptionFromModelSelection(n),a=s.parent),i._saveCaption(a,s),t.setSelection(a,"on"),t.remove(s)}}class Ny extends R{constructor(t){super(t),this._savedCaptionsMap=new WeakMap}static get requires(){return[le,Op]}static get pluginName(){return"ImageCaptionEditing"}init(){const t=this.editor,e=t.model.schema;e.isRegistered("caption")?e.extend("caption",{allowIn:"imageBlock"}):e.register("caption",{allowIn:"imageBlock",allowContentOf:"$block",isLimit:!0}),t.commands.add("toggleImageCaption",new By(this.editor)),this._setupConversion(),this._setupImageTypeCommandsIntegration(),this._registerCaptionReconversion()}_setupConversion(){const t=this.editor,e=t.editing.view,n=t.plugins.get("ImageUtils"),i=t.plugins.get("ImageCaptionUtils"),r=t.t;t.conversion.for("upcast").elementToElement({view:s=>i.matchImageCaptionViewElement(s),model:"caption"}),t.conversion.for("dataDowncast").elementToElement({model:"caption",view:(s,{writer:a})=>n.isBlockImage(s.parent)?a.createContainerElement("figcaption"):null}),t.conversion.for("editingDowncast").elementToElement({model:"caption",view:(s,{writer:a})=>{if(!n.isBlockImage(s.parent))return null;const c=a.createEditableElement("figcaption");a.setCustomProperty("imageCaption",!0,c),c.placeholder=r("Enter image caption"),Fl({view:e,element:c,keepOnFocus:!0});const l=s.parent.getAttribute("alt");return pg(c,a,{label:l?r("Caption for image: %0",[l]):r("Caption for the image")})}})}_setupImageTypeCommandsIntegration(){const t=this.editor,e=t.plugins.get("ImageUtils"),n=t.plugins.get("ImageCaptionUtils"),i=t.commands.get("imageTypeInline"),r=t.commands.get("imageTypeBlock"),s=a=>{if(!a.return)return;const{oldElement:c,newElement:l}=a.return;if(!c)return;if(e.isBlockImage(c)){const h=n.getCaptionFromImageModelElement(c);if(h)return void this._saveCaption(l,h)}const d=this._getSavedCaption(c);d&&this._saveCaption(l,d)};i&&this.listenTo(i,"execute",s,{priority:"low"}),r&&this.listenTo(r,"execute",s,{priority:"low"})}_getSavedCaption(t){const e=this._savedCaptionsMap.get(t);return e?Ct.fromJSON(e):null}_saveCaption(t,e){this._savedCaptionsMap.set(t,e.toJSON())}_registerCaptionReconversion(){const t=this.editor,e=t.model,n=t.plugins.get("ImageUtils"),i=t.plugins.get("ImageCaptionUtils");e.document.on("change:data",()=>{const r=e.document.differ.getChanges();for(const s of r){if(s.attributeKey!=="alt")continue;const a=s.range.start.nodeAfter;if(n.isBlockImage(a)){const c=i.getCaptionFromImageModelElement(a);if(!c)return;t.editing.reconvertItem(c)}}})}}class Py extends R{static get requires(){return[Op]}static get pluginName(){return"ImageCaptionUI"}init(){const t=this.editor,e=t.editing.view,n=t.plugins.get("ImageCaptionUtils"),i=t.t;t.ui.componentFactory.add("toggleImageCaption",r=>{const s=t.commands.get("toggleImageCaption"),a=new wt(r);return a.set({icon:ot.caption,tooltip:!0,isToggleable:!0}),a.bind("isOn","isEnabled").to(s,"value","isEnabled"),a.bind("label").to(s,"value",c=>i(c?"Toggle caption off":"Toggle caption on")),this.listenTo(a,"execute",()=>{t.execute("toggleImageCaption",{focusCaptionOnShow:!0});const c=n.getCaptionFromModelSelection(t.model.document.selection);if(c){const l=t.editing.mapper.toViewElement(c);e.scrollToTheSelection(),e.change(d=>{d.addClass("image__caption_highlighted",l)})}t.editing.view.focus()}),a})}}var zp=N(6816),Ly={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(zp.c,Ly),zp.c.locals;function Rp(o){const t=o.map(e=>e.replace("+","\\+"));return new RegExp(`^image\\/(${t.join("|")})$`)}function Oy(o){return new Promise((t,e)=>{const n=o.getAttribute("src");fetch(n).then(i=>i.blob()).then(i=>{const r=jp(i,n),s=r.replace("image/",""),a=new File([i],`image.${s}`,{type:r});t(a)}).catch(i=>i&&i.name==="TypeError"?function(r){return function(s){return new Promise((a,c)=>{const l=$.document.createElement("img");l.addEventListener("load",()=>{const d=$.document.createElement("canvas");d.width=l.width,d.height=l.height,d.getContext("2d").drawImage(l,0,0),d.toBlob(h=>h?a(h):c())}),l.addEventListener("error",()=>c()),l.src=s})}(r).then(s=>{const a=jp(s,r),c=a.replace("image/","");return new File([s],`image.${c}`,{type:a})})}(n).then(t).catch(e):e(i))})}function jp(o,t){return o.type?o.type:t.match(/data:(image\/\w+);base64/)?t.match(/data:(image\/\w+);base64/)[1].toLowerCase():"image/jpeg"}class zy extends R{static get pluginName(){return"ImageUploadUI"}init(){const t=this.editor,e=t.t,n=i=>{const r=new f1(i),s=t.commands.get("uploadImage"),a=t.config.get("image.upload.types"),c=Rp(a);return r.set({acceptedType:a.map(l=>`image/${l}`).join(","),allowMultipleFiles:!0,label:e("Upload image from computer"),icon:ot.imageUpload,tooltip:!0}),r.bind("isEnabled").to(s),r.on("done",(l,d)=>{const h=Array.from(d).filter(u=>c.test(u.type));h.length&&(t.execute("uploadImage",{file:h}),t.editing.view.focus())}),r};if(t.ui.componentFactory.add("uploadImage",n),t.ui.componentFactory.add("imageUpload",n),t.plugins.has("ImageInsertUI")){const i=t.plugins.get("ImageInsertUI"),r=t.commands.get("uploadImage");i.registerIntegration({name:"upload",observable:r,buttonViewCreator:()=>{const s=t.ui.componentFactory.create("uploadImage");return s.bind("label").to(i,"isImageSelected",a=>e(a?"Replace image from computer":"Upload image from computer")),s},formViewCreator:()=>{const s=t.ui.componentFactory.create("uploadImage");return s.withText=!0,s.bind("label").to(i,"isImageSelected",a=>e(a?"Replace from computer":"Upload from computer")),s.on("execute",()=>{i.dropdownView.isOpen=!1}),s}})}}}var Fp=N(2628),Ry={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Fp.c,Ry),Fp.c.locals;var Vp=N(1652),jy={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Vp.c,jy),Vp.c.locals;var Hp=N(4164),Fy={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Hp.c,Fy),Hp.c.locals;class Vy extends R{constructor(t){super(t),this.uploadStatusChange=(e,n,i)=>{const r=this.editor,s=n.item,a=s.getAttribute("uploadId");if(!i.consumable.consume(n.item,e.name))return;const c=r.plugins.get("ImageUtils"),l=r.plugins.get(je),d=a?n.attributeNewValue:null,h=this.placeholder,u=r.editing.mapper.toViewElement(s),g=i.writer;if(d=="reading")return Up(u,g),void qp(c,h,u,g);if(d=="uploading"){const p=l.loaders.get(a);return Up(u,g),void(p?(Gp(u,g),function(k,b,A,E){const M=function(z){const G=z.createUIElement("div",{class:"ck-progress-bar"});return z.setCustomProperty("progressBar",!0,G),G}(b);b.insert(b.createPositionAt(k,"end"),M),A.on("change:uploadedPercent",(z,G,et)=>{E.change(st=>{st.setStyle("width",et+"%",M)})})}(u,g,p,r.editing.view),function(k,b,A,E){if(E.data){const M=k.findViewImgElement(b);A.setAttribute("src",E.data,M)}}(c,u,g,p)):qp(c,h,u,g))}d=="complete"&&l.loaders.get(a)&&function(p,k,b){const A=k.createUIElement("div",{class:"ck-image-upload-complete-icon"});k.insert(k.createPositionAt(p,"end"),A),setTimeout(()=>{b.change(E=>E.remove(E.createRangeOn(A)))},3e3)}(u,g,r.editing.view),function(p,k){$p(p,k,"progressBar")}(u,g),Gp(u,g),function(p,k){k.removeClass("ck-appear",p)}(u,g)},this.placeholder="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="}static get pluginName(){return"ImageUploadProgress"}init(){const t=this.editor;t.plugins.has("ImageBlockEditing")&&t.editing.downcastDispatcher.on("attribute:uploadStatus:imageBlock",this.uploadStatusChange),t.plugins.has("ImageInlineEditing")&&t.editing.downcastDispatcher.on("attribute:uploadStatus:imageInline",this.uploadStatusChange)}}function Up(o,t){o.hasClass("ck-appear")||t.addClass("ck-appear",o)}function qp(o,t,e,n){e.hasClass("ck-image-upload-placeholder")||n.addClass("ck-image-upload-placeholder",e);const i=o.findViewImgElement(e);i.getAttribute("src")!==t&&n.setAttribute("src",t,i),Wp(e,"placeholder")||n.insert(n.createPositionAfter(i),function(r){const s=r.createUIElement("div",{class:"ck-upload-placeholder-loader"});return r.setCustomProperty("placeholder",!0,s),s}(n))}function Gp(o,t){o.hasClass("ck-image-upload-placeholder")&&t.removeClass("ck-image-upload-placeholder",o),$p(o,t,"placeholder")}function Wp(o,t){for(const e of o.getChildren())if(e.getCustomProperty(t))return e}function $p(o,t,e){const n=Wp(o,e);n&&t.remove(t.createRangeOn(n))}var Hy=Object.defineProperty,Uy=Object.defineProperties,qy=Object.getOwnPropertyDescriptors,Kp=Object.getOwnPropertySymbols,Gy=Object.prototype.hasOwnProperty,Wy=Object.prototype.propertyIsEnumerable,Yp=(o,t,e)=>t in o?Hy(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;class $y extends at{refresh(){const t=this.editor,e=t.plugins.get("ImageUtils"),n=t.model.document.selection.getSelectedElement();this.isEnabled=e.isImageAllowed()||e.isImage(n)}execute(t){const e=Bt(t.file),n=this.editor.model.document.selection,i=this.editor.plugins.get("ImageUtils"),r=Object.fromEntries(n.getAttributes());e.forEach((s,a)=>{const c=n.getSelectedElement();if(a&&c&&i.isImage(c)){const l=this.editor.model.createPositionAfter(c);this._uploadImage(s,r,l)}else this._uploadImage(s,r)})}_uploadImage(t,e,n){const i=this.editor,r=i.plugins.get(je).createLoader(t),s=i.plugins.get("ImageUtils");var a,c;r&&s.insertImage((a=((l,d)=>{for(var h in d||(d={}))Gy.call(d,h)&&Yp(l,h,d[h]);if(Kp)for(var h of Kp(d))Wy.call(d,h)&&Yp(l,h,d[h]);return l})({},e),c={uploadId:r.id},Uy(a,qy(c))),n)}}class Ky extends R{constructor(t){super(t),t.config.define("image",{upload:{types:["jpeg","png","gif","bmp","webp","tiff"]}}),this._uploadImageElements=new Map}static get requires(){return[je,ea,Re,le]}static get pluginName(){return"ImageUploadEditing"}init(){const t=this.editor,e=t.model.document,n=t.conversion,i=t.plugins.get(je),r=t.plugins.get("ImageUtils"),s=t.plugins.get("ClipboardPipeline"),a=Rp(t.config.get("image.upload.types")),c=new $y(t);t.commands.add("uploadImage",c),t.commands.add("imageUpload",c),n.for("upcast").attributeToAttribute({view:{name:"img",key:"uploadId"},model:"uploadId"}),this.listenTo(t.editing.view.document,"clipboardInput",(l,d)=>{if(h=d.dataTransfer,Array.from(h.types).includes("text/html")&&h.getData("text/html")!=="")return;var h;const u=Array.from(d.dataTransfer.files).filter(g=>!!g&&a.test(g.type));u.length&&(l.stop(),t.model.change(g=>{d.targetRanges&&g.setSelection(d.targetRanges.map(p=>t.editing.mapper.toModelRange(p))),t.execute("uploadImage",{file:u})}))}),this.listenTo(s,"inputTransformation",(l,d)=>{const h=Array.from(t.editing.view.createRangeIn(d.content)).map(g=>g.item).filter(g=>function(p,k){return!(!p.isInlineImageView(k)||!k.getAttribute("src")||!k.getAttribute("src").match(/^data:image\/\w+;base64,/g)&&!k.getAttribute("src").match(/^blob:/g))}(r,g)&&!g.getAttribute("uploadProcessed")).map(g=>({promise:Oy(g),imageElement:g}));if(!h.length)return;const u=new on(t.editing.view.document);for(const g of h){u.setAttribute("uploadProcessed",!0,g.imageElement);const p=i.createLoader(g.promise);p&&(u.setAttribute("src","",g.imageElement),u.setAttribute("uploadId",p.id,g.imageElement))}}),t.editing.view.document.on("dragover",(l,d)=>{d.preventDefault()}),e.on("change",()=>{const l=e.differ.getChanges({includeChangesInGraveyard:!0}).reverse(),d=new Set;for(const h of l)if(h.type=="insert"&&h.name!="$text"){const u=h.position.nodeAfter,g=h.position.root.rootName=="$graveyard";for(const p of Yy(t,u)){const k=p.getAttribute("uploadId");if(!k)continue;const b=i.loaders.get(k);b&&(g?d.has(k)||b.abort():(d.add(k),this._uploadImageElements.set(k,p),b.status=="idle"&&this._readAndUpload(b)))}}}),this.on("uploadComplete",(l,{imageElement:d,data:h})=>{const u=h.urls?h.urls:h;this.editor.model.change(g=>{g.setAttribute("src",u.default,d),this._parseAndSetSrcsetAttributeOnImage(u,d,g),r.setImageNaturalSizeAttributes(d)})},{priority:"low"})}afterInit(){const t=this.editor.model.schema;this.editor.plugins.has("ImageBlockEditing")&&t.extend("imageBlock",{allowAttributes:["uploadId","uploadStatus"]}),this.editor.plugins.has("ImageInlineEditing")&&t.extend("imageInline",{allowAttributes:["uploadId","uploadStatus"]})}_readAndUpload(t){const e=this.editor,n=e.model,i=e.locale.t,r=e.plugins.get(je),s=e.plugins.get(ea),a=e.plugins.get("ImageUtils"),c=this._uploadImageElements;return n.enqueueChange({isUndoable:!1},d=>{d.setAttribute("uploadStatus","reading",c.get(t.id))}),t.read().then(()=>{const d=t.upload(),h=c.get(t.id);if(f.isSafari){const u=e.editing.mapper.toViewElement(h),g=a.findViewImgElement(u);e.editing.view.once("render",()=>{if(!g.parent)return;const p=e.editing.view.domConverter.mapViewToDom(g.parent);if(!p)return;const k=p.style.display;p.style.display="none",p._ckHack=p.offsetHeight,p.style.display=k})}return n.enqueueChange({isUndoable:!1},u=>{u.setAttribute("uploadStatus","uploading",h)}),d}).then(d=>{n.enqueueChange({isUndoable:!1},h=>{const u=c.get(t.id);h.setAttribute("uploadStatus","complete",u),this.fire("uploadComplete",{data:d,imageElement:u})}),l()}).catch(d=>{if(t.status!=="error"&&t.status!=="aborted")throw d;t.status=="error"&&d&&s.showWarning(d,{title:i("Upload failed"),namespace:"upload"}),n.enqueueChange({isUndoable:!1},h=>{h.remove(c.get(t.id))}),l()});function l(){n.enqueueChange({isUndoable:!1},d=>{const h=c.get(t.id);d.removeAttribute("uploadId",h),d.removeAttribute("uploadStatus",h),c.delete(t.id)}),r.destroyLoader(t)}}_parseAndSetSrcsetAttributeOnImage(t,e,n){let i=0;const r=Object.keys(t).filter(s=>{const a=parseInt(s,10);if(!isNaN(a))return i=Math.max(i,a),!0}).map(s=>`${t[s]} ${s}w`).join(", ");if(r!=""){const s={srcset:r};e.hasAttribute("width")||e.hasAttribute("height")||(s.width=i),n.setAttributes(s,e)}}}function Yy(o,t){const e=o.plugins.get("ImageUtils");return Array.from(o.model.createRangeOn(t)).filter(n=>e.isImage(n.item)).map(n=>n.item)}var Qp=N(2876),Qy={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Qp.c,Qy),Qp.c.locals;class Zy extends at{constructor(t,e){super(t),this._defaultStyles={imageBlock:!1,imageInline:!1},this._styles=new Map(e.map(n=>{if(n.isDefault)for(const i of n.modelElements)this._defaultStyles[i]=n.name;return[n.name,n]}))}refresh(){const t=this.editor.plugins.get("ImageUtils").getClosestSelectedImageElement(this.editor.model.document.selection);this.isEnabled=!!t,this.isEnabled?t.hasAttribute("imageStyle")?this.value=t.getAttribute("imageStyle"):this.value=this._defaultStyles[t.name]:this.value=!1}execute(t={}){const e=this.editor,n=e.model,i=e.plugins.get("ImageUtils");n.change(r=>{const s=t.value,{setImageSizes:a=!0}=t;let c=i.getClosestSelectedImageElement(n.document.selection);s&&this.shouldConvertImageType(s,c)&&(this.editor.execute(i.isBlockImage(c)?"imageTypeInline":"imageTypeBlock",{setImageSizes:a}),c=i.getClosestSelectedImageElement(n.document.selection)),!s||this._styles.get(s).isDefault?r.removeAttribute("imageStyle",c):r.setAttribute("imageStyle",s,c),a&&i.setImageNaturalSizeAttributes(c)})}shouldConvertImageType(t,e){return!this._styles.get(t).modelElements.includes(e.name)}}var Jy=Object.defineProperty,Zp=Object.getOwnPropertySymbols,Xy=Object.prototype.hasOwnProperty,tx=Object.prototype.propertyIsEnumerable,Jp=(o,t,e)=>t in o?Jy(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Xp=(o,t)=>{for(var e in t||(t={}))Xy.call(t,e)&&Jp(o,e,t[e]);if(Zp)for(var e of Zp(t))tx.call(t,e)&&Jp(o,e,t[e]);return o};const{objectFullWidth:ex,objectInline:tm,objectLeft:em,objectRight:wa,objectCenter:Aa,objectBlockLeft:nm,objectBlockRight:om}=ot,Cr={get inline(){return{name:"inline",title:"In line",icon:tm,modelElements:["imageInline"],isDefault:!0}},get alignLeft(){return{name:"alignLeft",title:"Left aligned image",icon:em,modelElements:["imageBlock","imageInline"],className:"image-style-align-left"}},get alignBlockLeft(){return{name:"alignBlockLeft",title:"Left aligned image",icon:nm,modelElements:["imageBlock"],className:"image-style-block-align-left"}},get alignCenter(){return{name:"alignCenter",title:"Centered image",icon:Aa,modelElements:["imageBlock"],className:"image-style-align-center"}},get alignRight(){return{name:"alignRight",title:"Right aligned image",icon:wa,modelElements:["imageBlock","imageInline"],className:"image-style-align-right"}},get alignBlockRight(){return{name:"alignBlockRight",title:"Right aligned image",icon:om,modelElements:["imageBlock"],className:"image-style-block-align-right"}},get block(){return{name:"block",title:"Centered image",icon:Aa,modelElements:["imageBlock"],isDefault:!0}},get side(){return{name:"side",title:"Side image",icon:wa,modelElements:["imageBlock"],className:"image-style-side"}}},im={full:ex,left:nm,right:om,center:Aa,inlineLeft:em,inlineRight:wa,inline:tm},rm=[{name:"imageStyle:wrapText",title:"Wrap text",defaultItem:"imageStyle:alignLeft",items:["imageStyle:alignLeft","imageStyle:alignRight"]},{name:"imageStyle:breakText",title:"Break text",defaultItem:"imageStyle:block",items:["imageStyle:alignBlockLeft","imageStyle:block","imageStyle:alignBlockRight"]}];function sm(o){Q("image-style-configuration-definition-invalid",o)}const Ca={normalizeStyles:function(o){return(o.configuredStyles.options||[]).map(t=>function(e){return e=typeof e=="string"?Cr[e]?Xp({},Cr[e]):{name:e}:function(n,i){const r=Xp({},i);for(const s in n)Object.prototype.hasOwnProperty.call(i,s)||(r[s]=n[s]);return r}(Cr[e.name],e),typeof e.icon=="string"&&(e.icon=im[e.icon]||e.icon),e}(t)).filter(t=>function(e,{isBlockPluginLoaded:n,isInlinePluginLoaded:i}){const{modelElements:r,name:s}=e;if(!(r&&r.length&&s))return sm({style:e}),!1;{const a=[n?"imageBlock":null,i?"imageInline":null];if(!r.some(c=>a.includes(c)))return Q("image-style-missing-dependency",{style:e,missingPlugins:r.map(c=>c==="imageBlock"?"ImageBlockEditing":"ImageInlineEditing")}),!1}return!0}(t,o))},getDefaultStylesConfiguration:function(o,t){return o&&t?{options:["inline","alignLeft","alignRight","alignCenter","alignBlockLeft","alignBlockRight","block","side"]}:o?{options:["block","side"]}:t?{options:["inline","alignLeft","alignRight"]}:{}},getDefaultDropdownDefinitions:function(o){return o.has("ImageBlockEditing")&&o.has("ImageInlineEditing")?[...rm]:[]},warnInvalidStyle:sm,DEFAULT_OPTIONS:Cr,DEFAULT_ICONS:im,DEFAULT_DROPDOWN_DEFINITIONS:rm};function am(o,t){for(const e of t)if(e.name===o)return e}class cm extends R{static get pluginName(){return"ImageStyleEditing"}static get requires(){return[le]}init(){const{normalizeStyles:t,getDefaultStylesConfiguration:e}=Ca,n=this.editor,i=n.plugins.has("ImageBlockEditing"),r=n.plugins.has("ImageInlineEditing");n.config.define("image.styles",e(i,r)),this.normalizedStyles=t({configuredStyles:n.config.get("image.styles"),isBlockPluginLoaded:i,isInlinePluginLoaded:r}),this._setupConversion(i,r),this._setupPostFixer(),n.commands.add("imageStyle",new Zy(n,this.normalizedStyles))}_setupConversion(t,e){const n=this.editor,i=n.model.schema,r=(s=this.normalizedStyles,(c,l,d)=>{if(!d.consumable.consume(l.item,c.name))return;const h=am(l.attributeNewValue,s),u=am(l.attributeOldValue,s),g=d.mapper.toViewElement(l.item),p=d.writer;u&&p.removeClass(u.className,g),h&&p.addClass(h.className,g)});var s;const a=function(c){const l={imageInline:c.filter(d=>!d.isDefault&&d.modelElements.includes("imageInline")),imageBlock:c.filter(d=>!d.isDefault&&d.modelElements.includes("imageBlock"))};return(d,h,u)=>{if(!h.modelRange)return;const g=h.viewItem,p=Wt(h.modelRange.getItems());if(p&&u.schema.checkAttribute(p,"imageStyle"))for(const k of l[p.name])u.consumable.consume(g,{classes:k.className})&&u.writer.setAttribute("imageStyle",k.name,p)}}(this.normalizedStyles);n.editing.downcastDispatcher.on("attribute:imageStyle",r),n.data.downcastDispatcher.on("attribute:imageStyle",r),t&&(i.extend("imageBlock",{allowAttributes:"imageStyle"}),n.data.upcastDispatcher.on("element:figure",a,{priority:"low"})),e&&(i.extend("imageInline",{allowAttributes:"imageStyle"}),n.data.upcastDispatcher.on("element:img",a,{priority:"low"}))}_setupPostFixer(){const t=this.editor,e=t.model.document,n=t.plugins.get(le),i=new Map(this.normalizedStyles.map(r=>[r.name,r]));e.registerPostFixer(r=>{let s=!1;for(const a of e.differ.getChanges())if(a.type=="insert"||a.type=="attribute"&&a.attributeKey=="imageStyle"){let c=a.type=="insert"?a.position.nodeAfter:a.range.start.nodeAfter;if(c&&c.is("element","paragraph")&&c.childCount>0&&(c=c.getChild(0)),!n.isImage(c))continue;const l=c.getAttribute("imageStyle");if(!l)continue;const d=i.get(l);d&&d.modelElements.includes(c.name)||(r.removeAttribute("imageStyle",c),s=!0)}return s})}}var lm=N(9216),nx={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(lm.c,nx),lm.c.locals;class ox extends R{static get requires(){return[cm]}static get pluginName(){return"ImageStyleUI"}get localizedDefaultStylesTitles(){const t=this.editor.t;return{"Wrap text":t("Wrap text"),"Break text":t("Break text"),"In line":t("In line"),"Full size image":t("Full size image"),"Side image":t("Side image"),"Left aligned image":t("Left aligned image"),"Centered image":t("Centered image"),"Right aligned image":t("Right aligned image")}}init(){const t=this.editor.plugins,e=this.editor.config.get("image.toolbar")||[],n=dm(t.get("ImageStyleEditing").normalizedStyles,this.localizedDefaultStylesTitles);for(const r of n)this._createButton(r);const i=dm([...e.filter(bt),...Ca.getDefaultDropdownDefinitions(t)],this.localizedDefaultStylesTitles);for(const r of i)this._createDropdown(r,n)}_createDropdown(t,e){const n=this.editor.ui.componentFactory;n.add(t.name,i=>{let r;const{defaultItem:s,items:a,title:c}=t,l=a.filter(g=>e.find(({name:p})=>hm(p)===g)).map(g=>{const p=n.create(g);return g===s&&(r=p),p});a.length!==l.length&&Ca.warnInvalidStyle({dropdown:t});const d=rn(i,tr),h=d.buttonView,u=h.arrowView;return Ks(d,l,{enableActiveItemFocusOnDropdownOpen:!0}),h.set({label:um(c,r.label),class:null,tooltip:!0}),u.unbind("label"),u.set({label:c}),h.bind("icon").toMany(l,"isOn",(...g)=>{const p=g.findIndex(Ln);return p<0?r.icon:l[p].icon}),h.bind("label").toMany(l,"isOn",(...g)=>{const p=g.findIndex(Ln);return um(c,p<0?r.label:l[p].label)}),h.bind("isOn").toMany(l,"isOn",(...g)=>g.some(Ln)),h.bind("class").toMany(l,"isOn",(...g)=>g.some(Ln)?"ck-splitbutton_flatten":void 0),h.on("execute",()=>{l.some(({isOn:g})=>g)?d.isOpen=!d.isOpen:r.fire("execute")}),d.bind("isEnabled").toMany(l,"isEnabled",(...g)=>g.some(Ln)),this.listenTo(d,"execute",()=>{this.editor.editing.view.focus()}),d})}_createButton(t){const e=t.name;this.editor.ui.componentFactory.add(hm(e),n=>{const i=this.editor.commands.get("imageStyle"),r=new wt(n);return r.set({label:t.title,icon:t.icon,tooltip:!0,isToggleable:!0}),r.bind("isEnabled").to(i,"isEnabled"),r.bind("isOn").to(i,"value",s=>s===e),r.on("execute",this._executeCommand.bind(this,e)),r})}_executeCommand(t){this.editor.execute("imageStyle",{value:t}),this.editor.editing.view.focus()}}function dm(o,t){for(const e of o)t[e.title]&&(e.title=t[e.title]);return o}function hm(o){return`imageStyle:${o}`}function um(o,t){return(o?o+": ":"")+t}class ix extends R{static get pluginName(){return"IndentEditing"}init(){const t=this.editor;t.commands.add("indent",new Ll(t)),t.commands.add("outdent",new Ll(t))}}class rx extends R{static get pluginName(){return"IndentUI"}init(){const t=this.editor,e=t.locale,n=t.t,i=e.uiLanguageDirection=="ltr"?ot.indent:ot.outdent,r=e.uiLanguageDirection=="ltr"?ot.outdent:ot.indent;this._defineButton("indent",n("Increase indent"),i),this._defineButton("outdent",n("Decrease indent"),r)}_defineButton(t,e,n){const i=this.editor;i.ui.componentFactory.add(t,r=>{const s=i.commands.get(t),a=new wt(r);return a.set({label:e,icon:n,tooltip:!0}),a.bind("isEnabled").to(s,"isEnabled"),this.listenTo(a,"execute",()=>{i.execute(t),i.editing.view.focus()}),a})}}class sx{constructor(){this._definitions=new Set}get length(){return this._definitions.size}add(t){Array.isArray(t)?t.forEach(e=>this._definitions.add(e)):this._definitions.add(t)}getDispatcher(){return t=>{t.on("attribute:linkHref",(e,n,i)=>{if(!i.consumable.test(n.item,"attribute:linkHref")||!n.item.is("selection")&&!i.schema.isInline(n.item))return;const r=i.writer,s=r.document.selection;for(const a of this._definitions){const c=r.createAttributeElement("a",a.attributes,{priority:5});a.classes&&r.addClass(a.classes,c);for(const l in a.styles)r.setStyle(l,a.styles[l],c);r.setCustomProperty("link",!0,c),a.callback(n.attributeNewValue)?n.item.is("selection")?r.wrap(s.getFirstRange(),c):r.wrap(i.mapper.toViewRange(n.range),c):r.unwrap(i.mapper.toViewRange(n.range),c)}},{priority:"high"})}}getDispatcherForLinkedImage(){return t=>{t.on("attribute:linkHref:imageBlock",(e,n,{writer:i,mapper:r})=>{const s=r.toViewElement(n.item),a=Array.from(s.getChildren()).find(c=>c.is("element","a"));for(const c of this._definitions){const l=We(c.attributes);if(c.callback(n.attributeNewValue)){for(const[d,h]of l)d==="class"?i.addClass(h,a):i.setAttribute(d,h,a);c.classes&&i.addClass(c.classes,a);for(const d in c.styles)i.setStyle(d,c.styles[d],a)}else{for(const[d,h]of l)d==="class"?i.removeClass(h,a):i.removeAttribute(d,a);c.classes&&i.removeClass(c.classes,a);for(const d in c.styles)i.removeStyle(d,a)}}})}}}const ax=function(o,t,e){var n=o.length;return e=e===void 0?n:e,!t&&e>=n?o:$l(o,t,e)};var cx=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");const gm=function(o){return cx.test(o)},lx=function(o){return o.split("")};var pm="\\ud800-\\udfff",dx="["+pm+"]",_a="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",va="\\ud83c[\\udffb-\\udfff]",mm="[^"+pm+"]",fm="(?:\\ud83c[\\udde6-\\uddff]){2}",km="[\\ud800-\\udbff][\\udc00-\\udfff]",bm="(?:"+_a+"|"+va+")?",wm="[\\ufe0e\\ufe0f]?",hx=wm+bm+("(?:\\u200d(?:"+[mm,fm,km].join("|")+")"+wm+bm+")*"),ux="(?:"+[mm+_a+"?",_a,fm,km,dx].join("|")+")",gx=RegExp(va+"(?="+va+")|"+ux+hx,"g");const px=function(o){return o.match(gx)||[]},mx=function(o){return gm(o)?px(o):lx(o)},fx=function(o){return function(t){t=ms(t);var e=gm(t)?mx(t):void 0,n=e?e[0]:t.charAt(0),i=e?ax(e,1).join(""):t.slice(1);return n[o]()+i}}("toUpperCase"),kx=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,bx=/^(?:(?:https?|ftps?|mailto):|[^a-z]|[a-z+.-]+(?:[^a-z+.:-]|$))/i,wx=/^[\S]+@((?![-_])(?:[-\w\u00a1-\uffff]{0,63}[^-_]\.))+(?:[a-z\u00a1-\uffff]{2,})$/i,Ax=/^((\w+:(\/{2,})?)|(\W))/i,ya="Ctrl+K";function Am(o,{writer:t}){const e=t.createAttributeElement("a",{href:o},{priority:5});return t.setCustomProperty("link",!0,e),e}function Cm(o){const t=String(o);return function(e){return!!e.replace(kx,"").match(bx)}(t)?t:"#"}function xa(o,t){return!!o&&t.checkAttribute(o.name,"linkHref")}function Ea(o,t){const e=(n=o,wx.test(n)?"mailto:":t);var n;const i=!!e&&!_m(o);return o&&i?e+o:o}function _m(o){return Ax.test(o)}function vm(o){window.open(o,"_blank","noopener")}class Cx extends at{constructor(){super(...arguments),this.manualDecorators=new Me,this.automaticDecorators=new sx}restoreManualDecoratorStates(){for(const t of this.manualDecorators)t.value=this._getDecoratorStateFromModel(t.id)}refresh(){const t=this.editor.model,e=t.document.selection,n=e.getSelectedElement()||Wt(e.getSelectedBlocks());xa(n,t.schema)?(this.value=n.getAttribute("linkHref"),this.isEnabled=t.schema.checkAttribute(n,"linkHref")):(this.value=e.getAttribute("linkHref"),this.isEnabled=t.schema.checkAttributeInSelection(e,"linkHref"));for(const i of this.manualDecorators)i.value=this._getDecoratorStateFromModel(i.id)}execute(t,e={}){const n=this.editor.model,i=n.document.selection,r=[],s=[];for(const a in e)e[a]?r.push(a):s.push(a);n.change(a=>{if(i.isCollapsed){const c=i.getFirstPosition();if(i.hasAttribute("linkHref")){const l=ym(i);let d=dr(c,"linkHref",i.getAttribute("linkHref"),n);i.getAttribute("linkHref")===l&&(d=this._updateLinkContent(n,a,d,t)),a.setAttribute("linkHref",t,d),r.forEach(h=>{a.setAttribute(h,!0,d)}),s.forEach(h=>{a.removeAttribute(h,d)}),a.setSelection(a.createPositionAfter(d.end.nodeBefore))}else if(t!==""){const l=We(i.getAttributes());l.set("linkHref",t),r.forEach(h=>{l.set(h,!0)});const{end:d}=n.insertContent(a.createText(t,l),c);a.setSelection(d)}["linkHref",...r,...s].forEach(l=>{a.removeSelectionAttribute(l)})}else{const c=n.schema.getValidRanges(i.getRanges(),"linkHref"),l=[];for(const h of i.getSelectedBlocks())n.schema.checkAttribute(h,"linkHref")&&l.push(a.createRangeOn(h));const d=l.slice();for(const h of c)this._isRangeToUpdate(h,l)&&d.push(h);for(const h of d){let u=h;if(d.length===1){const g=ym(i);i.getAttribute("linkHref")===g&&(u=this._updateLinkContent(n,a,h,t),a.setSelection(a.createSelection(u)))}a.setAttribute("linkHref",t,u),r.forEach(g=>{a.setAttribute(g,!0,u)}),s.forEach(g=>{a.removeAttribute(g,u)})}}})}_getDecoratorStateFromModel(t){const e=this.editor.model,n=e.document.selection,i=n.getSelectedElement();return xa(i,e.schema)?i.getAttribute(t):n.getAttribute(t)}_isRangeToUpdate(t,e){for(const n of e)if(n.containsRange(t))return!1;return!0}_updateLinkContent(t,e,n,i){const r=e.createText(i,{linkHref:i});return t.insertContent(r,n)}}function ym(o){if(o.isCollapsed){const t=o.getFirstPosition();return t.textNode&&t.textNode.data}{const t=Array.from(o.getFirstRange().getItems());if(t.length>1)return null;const e=t[0];return e.is("$text")||e.is("$textProxy")?e.data:null}}class _x extends at{refresh(){const t=this.editor.model,e=t.document.selection,n=e.getSelectedElement();xa(n,t.schema)?this.isEnabled=t.schema.checkAttribute(n,"linkHref"):this.isEnabled=t.schema.checkAttributeInSelection(e,"linkHref")}execute(){const t=this.editor,e=this.editor.model,n=e.document.selection,i=t.commands.get("link");e.change(r=>{const s=n.isCollapsed?[dr(n.getFirstPosition(),"linkHref",n.getAttribute("linkHref"),e)]:e.schema.getValidRanges(n.getRanges(),"linkHref");for(const a of s)if(r.removeAttribute("linkHref",a),i)for(const c of i.manualDecorators)r.removeAttribute(c.id,a)})}}class vx extends mt(){constructor({id:t,label:e,attributes:n,classes:i,styles:r,defaultValue:s}){super(),this.id=t,this.set("value",void 0),this.defaultValue=s,this.label=e,this.attributes=n,this.classes=i,this.styles=r}_createPattern(){return{attributes:this.attributes,classes:this.classes,styles:this.styles}}}var xm=N(8836),yx={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(xm.c,yx),xm.c.locals;var xx=Object.defineProperty,Em=Object.getOwnPropertySymbols,Ex=Object.prototype.hasOwnProperty,Dx=Object.prototype.propertyIsEnumerable,Dm=(o,t,e)=>t in o?xx(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Ix=(o,t)=>{for(var e in t||(t={}))Ex.call(t,e)&&Dm(o,e,t[e]);if(Em)for(var e of Em(t))Dx.call(t,e)&&Dm(o,e,t[e]);return o};const Im="automatic",Sx=/^(https?:)?\/\//;class Sm extends R{static get pluginName(){return"LinkEditing"}static get requires(){return[og,Qu,Re]}constructor(t){super(t),t.config.define("link",{allowCreatingEmptyLinks:!1,addTargetToExternalLinks:!1})}init(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:"linkHref"}),t.conversion.for("dataDowncast").attributeToElement({model:"linkHref",view:Am}),t.conversion.for("editingDowncast").attributeToElement({model:"linkHref",view:(n,i)=>Am(Cm(n),i)}),t.conversion.for("upcast").elementToAttribute({view:{name:"a",attributes:{href:!0}},model:{key:"linkHref",value:n=>n.getAttribute("href")}}),t.commands.add("link",new Cx(t)),t.commands.add("unlink",new _x(t));const e=function(n,i){const r={"Open in a new tab":n("Open in a new tab"),Downloadable:n("Downloadable")};return i.forEach(s=>("label"in s&&r[s.label]&&(s.label=r[s.label]),s)),i}(t.t,function(n){const i=[];if(n)for(const[r,s]of Object.entries(n)){const a=Object.assign({},s,{id:`link${fx(r)}`});i.push(a)}return i}(t.config.get("link.decorators")));this._enableAutomaticDecorators(e.filter(n=>n.mode===Im)),this._enableManualDecorators(e.filter(n=>n.mode==="manual")),t.plugins.get(og).registerAttribute("linkHref"),function(n,i,r,s){const a=n.editing.view,c=new Set;a.document.registerPostFixer(l=>{const d=n.model.document.selection;let h=!1;if(d.hasAttribute(i)){const u=dr(d.getFirstPosition(),i,d.getAttribute(i),n.model),g=n.editing.mapper.toViewRange(u);for(const p of g.getItems())p.is("element",r)&&!p.hasClass(s)&&(l.addClass(s,p),c.add(p),h=!0)}return h}),n.conversion.for("editingDowncast").add(l=>{function d(){a.change(h=>{for(const u of c.values())h.removeClass(s,u),c.delete(u)})}l.on("insert",d,{priority:"highest"}),l.on("remove",d,{priority:"highest"}),l.on("attribute",d,{priority:"highest"}),l.on("selection",d,{priority:"highest"})})}(t,"linkHref","a","ck-link_selected"),this._enableLinkOpen(),this._enableSelectionAttributesFixer(),this._enableClipboardIntegration()}_enableAutomaticDecorators(t){const e=this.editor,n=e.commands.get("link").automaticDecorators;e.config.get("link.addTargetToExternalLinks")&&n.add({id:"linkIsExternal",mode:Im,callback:i=>!!i&&Sx.test(i),attributes:{target:"_blank",rel:"noopener noreferrer"}}),n.add(t),n.length&&e.conversion.for("downcast").add(n.getDispatcher())}_enableManualDecorators(t){if(!t.length)return;const e=this.editor,n=e.commands.get("link").manualDecorators;t.forEach(i=>{e.model.schema.extend("$text",{allowAttributes:i.id});const r=new vx(i);n.add(r),e.conversion.for("downcast").attributeToElement({model:r.id,view:(s,{writer:a,schema:c},{item:l})=>{if((l.is("selection")||c.isInline(l))&&s){const d=a.createAttributeElement("a",r.attributes,{priority:5});r.classes&&a.addClass(r.classes,d);for(const h in r.styles)a.setStyle(h,r.styles[h],d);return a.setCustomProperty("link",!0,d),d}}}),e.conversion.for("upcast").elementToAttribute({view:Ix({name:"a"},r._createPattern()),model:{key:r.id}})})}_enableLinkOpen(){const t=this.editor,e=t.editing.view.document;this.listenTo(e,"click",(n,i)=>{if(!(f.isMac?i.domEvent.metaKey:i.domEvent.ctrlKey))return;let r=i.domTarget;if(r.tagName.toLowerCase()!="a"&&(r=r.closest("a")),!r)return;const s=r.getAttribute("href");s&&(n.stop(),i.preventDefault(),vm(s))},{context:"$capture"}),this.listenTo(e,"keydown",(n,i)=>{const r=t.commands.get("link").value;r&&i.keyCode===ut.enter&&i.altKey&&(n.stop(),vm(r))})}_enableSelectionAttributesFixer(){const t=this.editor.model,e=t.document.selection;this.listenTo(e,"change:attribute",(n,{attributeKeys:i})=>{i.includes("linkHref")&&!e.hasAttribute("linkHref")&&t.change(r=>{var s;(function(a,c){a.removeSelectionAttribute("linkHref");for(const l of c)a.removeSelectionAttribute(l)})(r,(s=t.schema,s.getDefinition("$text").allowAttributes.filter(a=>a.startsWith("link"))))})})}_enableClipboardIntegration(){const t=this.editor,e=t.model,n=this.editor.config.get("link.defaultProtocol");n&&this.listenTo(t.plugins.get("ClipboardPipeline"),"contentInsertion",(i,r)=>{e.change(s=>{const a=s.createRangeIn(r.content);for(const c of a.getItems())if(c.hasAttribute("linkHref")){const l=Ea(c.getAttribute("linkHref"),n);s.setAttribute("linkHref",l,c)}})})}}var Tm=N(8408),Tx={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Tm.c,Tx),Tm.c.locals;class Mx extends tt{constructor(t,e){super(t),this.focusTracker=new Qt,this.keystrokes=new ie,this._focusables=new Ce;const n=t.t;this.urlInputView=this._createUrlInput(),this.saveButtonView=this._createButton(n("Save"),ot.check,"ck-button-save"),this.saveButtonView.type="submit",this.cancelButtonView=this._createButton(n("Cancel"),ot.cancel,"ck-button-cancel","cancel"),this._manualDecoratorSwitches=this._createManualDecoratorSwitches(e),this.children=this._createFormChildren(e.manualDecorators),this._focusCycler=new _e({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});const i=["ck","ck-link-form","ck-responsive-form"];e.manualDecorators.length&&i.push("ck-link-form_layout-vertical","ck-vertical-form"),this.setTemplate({tag:"form",attributes:{class:i,tabindex:"-1"},children:this.children})}getDecoratorSwitchesState(){return Array.from(this._manualDecoratorSwitches).reduce((t,e)=>(t[e.name]=e.isOn,t),{})}render(){super.render(),m({view:this}),[this.urlInputView,...this._manualDecoratorSwitches,this.saveButtonView,this.cancelButtonView].forEach(t=>{this._focusables.add(t),this.focusTracker.add(t.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}_createUrlInput(){const t=this.locale.t,e=new Pi(this.locale,er);return e.label=t("Link URL"),e}_createButton(t,e,n,i){const r=new wt(this.locale);return r.set({label:t,icon:e,tooltip:!0}),r.extendTemplate({attributes:{class:n}}),i&&r.delegate("execute").to(this,i),r}_createManualDecoratorSwitches(t){const e=this.createCollection();for(const n of t.manualDecorators){const i=new Bi(this.locale);i.set({name:n.id,label:n.label,withText:!0}),i.bind("isOn").toMany([n,t],"value",(r,s)=>s===void 0&&r===void 0?!!n.defaultValue:!!r),i.on("execute",()=>{n.set("value",!i.isOn)}),e.add(i)}return e}_createFormChildren(t){const e=this.createCollection();if(e.add(this.urlInputView),t.length){const n=new tt;n.setTemplate({tag:"ul",children:this._manualDecoratorSwitches.map(i=>({tag:"li",children:[i],attributes:{class:["ck","ck-list__item"]}})),attributes:{class:["ck","ck-reset","ck-list"]}}),e.add(n)}return e.add(this.saveButtonView),e.add(this.cancelButtonView),e}}var Mm=N(9796),Bx={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Mm.c,Bx),Mm.c.locals;class Nx extends tt{constructor(t){super(t),this.focusTracker=new Qt,this.keystrokes=new ie,this._focusables=new Ce;const e=t.t;this.previewButtonView=this._createPreviewButton(),this.unlinkButtonView=this._createButton(e("Unlink"),'',"unlink"),this.editButtonView=this._createButton(e("Edit link"),ot.pencil,"edit"),this.set("href",void 0),this._focusCycler=new _e({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-link-actions","ck-responsive-form"],tabindex:"-1"},children:[this.previewButtonView,this.editButtonView,this.unlinkButtonView]})}render(){super.render(),[this.previewButtonView,this.editButtonView,this.unlinkButtonView].forEach(t=>{this._focusables.add(t),this.focusTracker.add(t.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}_createButton(t,e,n){const i=new wt(this.locale);return i.set({label:t,icon:e,tooltip:!0}),i.delegate("execute").to(this,n),i}_createPreviewButton(){const t=new wt(this.locale),e=this.bindTemplate,n=this.t;return t.set({withText:!0,tooltip:n("Open link in new tab")}),t.extendTemplate({attributes:{class:["ck","ck-link-actions__preview"],href:e.to("href",i=>i&&Cm(i)),target:"_blank",rel:"noopener noreferrer"}}),t.bind("label").to(this,"href",i=>i||n("This link has no URL")),t.bind("isEnabled").to(this,"href",i=>!!i),t.template.tag="a",t.template.eventListeners={},t}}const Qe="link-ui";class Px extends R{constructor(){super(...arguments),this.actionsView=null,this.formView=null}static get requires(){return[rr]}static get pluginName(){return"LinkUI"}init(){const t=this.editor;t.editing.view.addObserver(VC),this._balloon=t.plugins.get(rr),this._createToolbarLinkButton(),this._enableBalloonActivators(),t.conversion.for("editingDowncast").markerToHighlight({model:Qe,view:{classes:["ck-fake-link-selection"]}}),t.conversion.for("editingDowncast").markerToElement({model:Qe,view:{name:"span",classes:["ck-fake-link-selection","ck-fake-link-selection_collapsed"]}})}destroy(){super.destroy(),this.formView&&this.formView.destroy(),this.actionsView&&this.actionsView.destroy()}_createViews(){this.actionsView=this._createActionsView(),this.formView=this._createFormView(),this._enableUserBalloonInteractions()}_createActionsView(){const t=this.editor,e=new Nx(t.locale),n=t.commands.get("link"),i=t.commands.get("unlink");return e.bind("href").to(n,"value"),e.editButtonView.bind("isEnabled").to(n),e.unlinkButtonView.bind("isEnabled").to(i),this.listenTo(e,"edit",()=>{this._addFormView()}),this.listenTo(e,"unlink",()=>{t.execute("unlink"),this._hideUI()}),e.keystrokes.set("Esc",(r,s)=>{this._hideUI(),s()}),e.keystrokes.set(ya,(r,s)=>{this._addFormView(),s()}),e}_createFormView(){const t=this.editor,e=t.commands.get("link"),n=t.config.get("link.defaultProtocol"),i=t.config.get("link.allowCreatingEmptyLinks"),r=new(x(Mx))(t.locale,e);return r.urlInputView.fieldView.bind("value").to(e,"value"),r.urlInputView.bind("isEnabled").to(e,"isEnabled"),r.saveButtonView.bind("isEnabled").to(e,"isEnabled",r.urlInputView,"isEmpty",(s,a)=>s&&(i||!a)),this.listenTo(r,"submit",()=>{const{value:s}=r.urlInputView.fieldView.element,a=Ea(s,n);t.execute("link",a,r.getDecoratorSwitchesState()),this._closeFormView()}),this.listenTo(r,"cancel",()=>{this._closeFormView()}),r.keystrokes.set("Esc",(s,a)=>{this._closeFormView(),a()}),r}_createToolbarLinkButton(){const t=this.editor,e=t.commands.get("link"),n=t.t;t.ui.componentFactory.add("link",i=>{const r=new wt(i);return r.isEnabled=!0,r.label=n("Link"),r.icon='',r.keystroke=ya,r.tooltip=!0,r.isToggleable=!0,r.bind("isEnabled").to(e,"isEnabled"),r.bind("isOn").to(e,"value",s=>!!s),this.listenTo(r,"execute",()=>this._showUI(!0)),r})}_enableBalloonActivators(){const t=this.editor,e=t.editing.view.document;this.listenTo(e,"click",()=>{this._getSelectedLinkElement()&&this._showUI()}),t.keystrokes.set(ya,(n,i)=>{i(),t.commands.get("link").isEnabled&&this._showUI(!0)})}_enableUserBalloonInteractions(){this.editor.keystrokes.set("Tab",(t,e)=>{this._areActionsVisible&&!this.actionsView.focusTracker.isFocused&&(this.actionsView.focus(),e())},{priority:"high"}),this.editor.keystrokes.set("Esc",(t,e)=>{this._isUIVisible&&(this._hideUI(),e())}),v({emitter:this.formView,activator:()=>this._isUIInPanel,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideUI()})}_addActionsView(){this.actionsView||this._createViews(),this._areActionsInPanel||this._balloon.add({view:this.actionsView,position:this._getBalloonPositionData()})}_addFormView(){if(this.formView||this._createViews(),this._isFormInPanel)return;const t=this.editor.commands.get("link");this.formView.disableCssTransitions(),this._balloon.add({view:this.formView,position:this._getBalloonPositionData()}),this.formView.urlInputView.fieldView.value=t.value||"",this._balloon.visibleView===this.formView&&this.formView.urlInputView.fieldView.select(),this.formView.enableCssTransitions()}_closeFormView(){const t=this.editor.commands.get("link");t.restoreManualDecoratorStates(),t.value!==void 0?this._removeFormView():this._hideUI()}_removeFormView(){this._isFormInPanel&&(this.formView.saveButtonView.focus(),this.formView.urlInputView.fieldView.reset(),this._balloon.remove(this.formView),this.editor.editing.view.focus(),this._hideFakeVisualSelection())}_showUI(t=!1){this.formView||this._createViews(),this._getSelectedLinkElement()?(this._areActionsVisible?this._addFormView():this._addActionsView(),t&&this._balloon.showStack("main")):(this._showFakeVisualSelection(),this._addActionsView(),t&&this._balloon.showStack("main"),this._addFormView()),this._startUpdatingUI()}_hideUI(){if(!this._isUIInPanel)return;const t=this.editor;this.stopListening(t.ui,"update"),this.stopListening(this._balloon,"change:visibleView"),t.editing.view.focus(),this._removeFormView(),this._balloon.remove(this.actionsView),this._hideFakeVisualSelection()}_startUpdatingUI(){const t=this.editor,e=t.editing.view.document;let n=this._getSelectedLinkElement(),i=s();const r=()=>{const a=this._getSelectedLinkElement(),c=s();n&&!a||!n&&c!==i?this._hideUI():this._isUIVisible&&this._balloon.updatePosition(this._getBalloonPositionData()),n=a,i=c};function s(){return e.selection.focus.getAncestors().reverse().find(a=>a.is("element"))}this.listenTo(t.ui,"update",r),this.listenTo(this._balloon,"change:visibleView",r)}get _isFormInPanel(){return!!this.formView&&this._balloon.hasView(this.formView)}get _areActionsInPanel(){return!!this.actionsView&&this._balloon.hasView(this.actionsView)}get _areActionsVisible(){return!!this.actionsView&&this._balloon.visibleView===this.actionsView}get _isUIInPanel(){return this._isFormInPanel||this._areActionsInPanel}get _isUIVisible(){const t=this._balloon.visibleView;return!!this.formView&&t==this.formView||this._areActionsVisible}_getBalloonPositionData(){const t=this.editor.editing.view,e=this.editor.model,n=t.document;let i;if(e.markers.has(Qe)){const r=Array.from(this.editor.editing.mapper.markerNameToElements(Qe)),s=t.createRange(t.createPositionBefore(r[0]),t.createPositionAfter(r[r.length-1]));i=t.domConverter.viewRangeToDom(s)}else i=()=>{const r=this._getSelectedLinkElement();return r?t.domConverter.mapViewToDom(r):t.domConverter.viewRangeToDom(n.selection.getFirstRange())};return{target:i}}_getSelectedLinkElement(){const t=this.editor.editing.view,e=t.document.selection,n=e.getSelectedElement();if(e.isCollapsed||n&&qt(n))return Da(e.getFirstPosition());{const i=e.getFirstRange().getTrimmed(),r=Da(i.start),s=Da(i.end);return r&&r==s&&t.createRangeIn(r).getTrimmed().isEqual(i)?r:null}}_showFakeVisualSelection(){const t=this.editor.model;t.change(e=>{const n=t.document.selection.getFirstRange();if(t.markers.has(Qe))e.updateMarker(Qe,{range:n});else if(n.start.isAtEnd){const i=n.start.getLastMatchingPosition(({item:r})=>!t.schema.isContent(r),{boundaries:n});e.addMarker(Qe,{usingOperation:!1,affectsData:!1,range:e.createRange(i,n.end)})}else e.addMarker(Qe,{usingOperation:!1,affectsData:!1,range:n})})}_hideFakeVisualSelection(){const t=this.editor.model;t.markers.has(Qe)&&t.change(e=>{e.removeMarker(Qe)})}}function Da(o){return o.getAncestors().find(t=>{return(e=t).is("attributeElement")&&!!e.getCustomProperty("link");var e})||null}const Bm=new RegExp("(^|\\s)(((?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(((?!www\\.)|(www\\.))(?![-_])(?:[-_a-z0-9\\u00a1-\\uffff]{1,63}\\.)+(?:[a-z\\u00a1-\\uffff]{2,63})))(?::\\d{2,5})?(?:[/?#]\\S*)?)|((www.|(\\S+@))((?![-_])(?:[-_a-z0-9\\u00a1-\\uffff]{1,63}\\.))+(?:[a-z\\u00a1-\\uffff]{2,63})))$","i");class Lx extends R{static get requires(){return[sn,Sm]}static get pluginName(){return"AutoLink"}init(){const t=this.editor.model.document.selection;t.on("change:range",()=>{this.isEnabled=!t.anchor.parent.is("element","codeBlock")}),this._enableTypingHandling()}afterInit(){this._enableEnterHandling(),this._enableShiftEnterHandling(),this._enablePasteLinking()}_expandLinkRange(t,e){return e.textNode&&e.textNode.hasAttribute("linkHref")?dr(e,"linkHref",e.textNode.getAttribute("linkHref"),t):null}_selectEntireLinks(t,e){const n=this.editor.model,i=n.document.selection,r=i.getFirstPosition(),s=i.getLastPosition();let a=e.getJoined(this._expandLinkRange(n,r)||e);a&&(a=a.getJoined(this._expandLinkRange(n,s)||e)),a&&(a.start.isBefore(r)||a.end.isAfter(s))&&t.setSelection(a)}_enablePasteLinking(){const t=this.editor,e=t.model,n=e.document.selection,i=t.plugins.get("ClipboardPipeline"),r=t.commands.get("link");i.on("inputTransformation",(s,a)=>{if(!this.isEnabled||!r.isEnabled||n.isCollapsed||a.method!=="paste"||n.rangeCount>1)return;const c=n.getFirstRange(),l=a.dataTransfer.getData("text/plain");if(!l)return;const d=l.match(Bm);d&&d[2]===l&&(e.change(h=>{this._selectEntireLinks(h,c),r.execute(l)}),s.stop())},{priority:"high"})}_enableTypingHandling(){const t=this.editor,e=new ng(t.model,n=>{if(!function(r){return r.length>4&&r[r.length-1]===" "&&r[r.length-2]!==" "}(n))return;const i=Nm(n.substr(0,n.length-1));return i?{url:i}:void 0});e.on("matched:data",(n,i)=>{const{batch:r,range:s,url:a}=i;if(!r.isTyping)return;const c=s.end.getShiftedBy(-1),l=c.getShiftedBy(-a.length),d=t.model.createRange(l,c);this._applyAutoLink(a,d)}),e.bind("isEnabled").to(this)}_enableEnterHandling(){const t=this.editor,e=t.model,n=t.commands.get("enter");n&&n.on("execute",()=>{const i=e.document.selection.getFirstPosition();if(!i.parent.previousSibling)return;const r=e.createRangeIn(i.parent.previousSibling);this._checkAndApplyAutoLinkOnRange(r)})}_enableShiftEnterHandling(){const t=this.editor,e=t.model,n=t.commands.get("shiftEnter");n&&n.on("execute",()=>{const i=e.document.selection.getFirstPosition(),r=e.createRange(e.createPositionAt(i.parent,0),i.getShiftedBy(-1));this._checkAndApplyAutoLinkOnRange(r)})}_checkAndApplyAutoLinkOnRange(t){const e=this.editor.model,{text:n,range:i}=eg(t,e),r=Nm(n);if(r){const s=e.createRange(i.end.getShiftedBy(-r.length),i.end);this._applyAutoLink(r,s)}}_applyAutoLink(t,e){const n=this.editor.model,i=Ea(t,this.editor.config.get("link.defaultProtocol"));this.isEnabled&&function(r,s){return s.schema.checkAttributeInSelection(s.createSelection(r),"linkHref")}(e,n)&&_m(i)&&!function(r){const s=r.start.nodeAfter;return!!s&&s.hasAttribute("linkHref")}(e)&&this._persistAutoLink(i,e)}_persistAutoLink(t,e){const n=this.editor.model,i=this.editor.plugins.get("Delete");n.enqueueChange(r=>{r.setAttribute("linkHref",t,e),n.enqueueChange(()=>{i.requestUndoOnBackspace()})})}}function Nm(o){const t=Bm.exec(o);return t?t[2]:null}var Pm=N(5064),Ox={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Pm.c,Ox),Pm.c.locals;class xe{constructor(t,e){this._startElement=t,this._referenceIndent=t.getAttribute("listIndent"),this._isForward=e.direction=="forward",this._includeSelf=!!e.includeSelf,this._sameAttributes=Bt(e.sameAttributes||[]),this._sameIndent=!!e.sameIndent,this._lowerIndent=!!e.lowerIndent,this._higherIndent=!!e.higherIndent}static first(t,e){return Wt(new this(t,e)[Symbol.iterator]())}*[Symbol.iterator](){const t=[];for(const{node:e}of ui(this._getStartNode(),this._isForward?"forward":"backward")){const n=e.getAttribute("listIndent");if(nthis._referenceIndent){if(!this._higherIndent)continue;if(!this._isForward){t.push(e);continue}}else{if(!this._sameIndent){if(this._higherIndent){t.length&&(yield*t,t.length=0);break}continue}if(this._sameAttributes.some(i=>e.getAttribute(i)!==this._startElement.getAttribute(i)))break}t.length&&(yield*t,t.length=0),yield e}}_getStartNode(){return this._includeSelf?this._startElement:this._isForward?this._startElement.nextSibling:this._startElement.previousSibling}}function*ui(o,t="forward"){const e=t=="forward",n=[];let i=null;for(;Kt(o);){let r=null;if(i){const s=o.getAttribute("listIndent"),a=i.getAttribute("listIndent");s>a?n[a]=i:st in o?Rx(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Ia=(o,t)=>{for(var e in t||(t={}))Vx.call(t,e)&&Om(o,e,t[e]);if(Lm)for(var e of Lm(t))Hx.call(t,e)&&Om(o,e,t[e]);return o},Sa=(o,t)=>jx(o,Fx(t));class Co{static next(){return X()}}function Kt(o){return!!o&&o.is("element")&&o.hasAttribute("listItemId")}function Ta(o,t={}){return[..._n(o,Sa(Ia({},t),{direction:"backward"})),..._n(o,Sa(Ia({},t),{direction:"forward"}))]}function _n(o,t={}){const e=t.direction=="forward",n=Array.from(new xe(o,Sa(Ia({},t),{includeSelf:e,sameIndent:!0,sameAttributes:"listItemId"})));return e?n:n.reverse()}function zm(o){const t=new xe(o,{sameIndent:!0,sameAttributes:"listType"}),e=new xe(o,{sameIndent:!0,sameAttributes:"listType",includeSelf:!0,direction:"forward"});return[...Array.from(t).reverse(),...e]}function qn(o){return!xe.first(o,{sameIndent:!0,sameAttributes:"listItemId"})}function Rm(o){return!xe.first(o,{direction:"forward",sameIndent:!0,sameAttributes:"listItemId"})}function gi(o,t={}){o=Bt(o);const e=t.withNested!==!1,n=new Set;for(const i of o)for(const r of Ta(i,{higherIndent:e}))n.add(r);return Gn(n)}function Ux(o){o=Bt(o);const t=new Set;for(const e of o)for(const n of zm(e))t.add(n);return Gn(t)}function Ma(o,t){const e=_n(o,{direction:"forward"}),n=Co.next();for(const i of e)t.setAttribute("listItemId",n,i);return e}function Ba(o,t,e){const n={};for(const[r,s]of t.getAttributes())r.startsWith("list")&&(n[r]=s);const i=_n(o,{direction:"forward"});for(const r of i)e.setAttributes(n,r);return i}function Na(o,t,{expand:e,indentBy:n=1}={}){o=Bt(o);const i=e?gi(o):o;for(const r of i){const s=r.getAttribute("listIndent")+n;s<0?_r(r,t):t.setAttribute("listIndent",s,r)}return i}function _r(o,t){o=Bt(o);for(const e of o)e.is("element","listItem")&&t.rename(e,"paragraph");for(const e of o)for(const n of e.getAttributeKeys())n.startsWith("list")&&t.removeAttribute(n,e);return o}function pi(o){if(!o.length)return!1;const t=o[0].getAttribute("listItemId");return!!t&&!o.some(e=>e.getAttribute("listItemId")!=t)}function Gn(o){return Array.from(o).filter(t=>t.root.rootName!=="$graveyard").sort((t,e)=>t.index-e.index)}function mi(o){const t=o.document.selection.getSelectedElement();return t&&o.schema.isObject(t)&&o.schema.isBlock(t)?t:null}function Pa(o,t){return t.checkChild(o.parent,"listItem")&&t.checkChild(o,"$text")&&!t.isObject(o)}function qx(o,t,e){return _n(t,{direction:"forward"}).pop().index>o.index?Ba(o,t,e):[]}class jm extends at{constructor(t,e){super(t),this._direction=e}refresh(){this.isEnabled=this._checkEnabled()}execute(){const t=this.editor.model,e=Fm(t.document.selection);t.change(n=>{const i=[];pi(e)&&!qn(e[0])?(this._direction=="forward"&&i.push(...Na(e,n)),i.push(...Ma(e[0],n))):this._direction=="forward"?i.push(...Na(e,n,{expand:!0})):i.push(...function(r,s){const a=gi(r=Bt(r)),c=new Set,l=Math.min(...a.map(h=>h.getAttribute("listIndent"))),d=new Map;for(const h of a)d.set(h,xe.first(h,{lowerIndent:!0}));for(const h of a){if(c.has(h))continue;c.add(h);const u=h.getAttribute("listIndent")-1;if(u<0)_r(h,s);else{if(h.getAttribute("listIndent")==l){const g=qx(h,d.get(h),s);for(const p of g)c.add(p);if(g.length)continue}s.setAttribute("listIndent",u,h)}}return Gn(c)}(e,n));for(const r of i){if(!r.hasAttribute("listType"))continue;const s=xe.first(r,{sameIndent:!0});s&&n.setAttribute("listType",s.getAttribute("listType"),r)}this._fireAfterExecute(i)})}_fireAfterExecute(t){this.fire("afterExecute",Gn(new Set(t)))}_checkEnabled(){let t=Fm(this.editor.model.document.selection),e=t[0];if(!e)return!1;if(this._direction=="backward"||pi(t)&&!qn(t[0]))return!0;t=gi(t),e=t[0];const n=xe.first(e,{sameIndent:!0});return!!n&&n.getAttribute("listType")==e.getAttribute("listType")}}function Fm(o){const t=Array.from(o.getSelectedBlocks()),e=t.findIndex(n=>!Kt(n));return e!=-1&&(t.length=e),t}class Vm extends at{constructor(t,e){super(t),this.type=e}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(t={}){const e=this.editor.model,n=e.document,i=mi(e),r=Array.from(n.selection.getSelectedBlocks()).filter(a=>e.schema.checkAttribute(a,"listType")||Pa(a,e.schema)),s=t.forceValue!==void 0?!t.forceValue:this.value;e.change(a=>{if(s){const c=r[r.length-1],l=_n(c,{direction:"forward"}),d=[];l.length>1&&d.push(...Ma(l[1],a)),d.push(..._r(r,a)),d.push(...function(h,u){const g=[];let p=Number.POSITIVE_INFINITY;for(const{node:k}of ui(h.nextSibling,"forward")){const b=k.getAttribute("listIndent");if(b==0)break;b{const{firstElement:s,lastElement:a}=this._getMergeSubjectElements(n,t),c=s.getAttribute("listIndent")||0,l=a.getAttribute("listIndent"),d=a.getAttribute("listItemId");if(c!=l){const u=(h=a,Array.from(new xe(h,{direction:"forward",higherIndent:!0})));i.push(...Na([a,...u],r,{indentBy:c-l,expand:c{const e=Ma(this._getStartBlock(),t);this._fireAfterExecute(e)})}_fireAfterExecute(t){this.fire("afterExecute",Gn(new Set(t)))}_checkEnabled(){const t=this.editor.model.document.selection,e=this._getStartBlock();return t.isCollapsed&&Kt(e)&&!qn(e)}_getStartBlock(){const t=this.editor.model.document.selection.getFirstPosition().parent;return this._direction=="before"?t:t.nextSibling}}class Gx extends R{static get pluginName(){return"ListUtils"}expandListBlocksToCompleteList(t){return Ux(t)}isFirstBlockOfListItem(t){return qn(t)}isListItemBlock(t){return Kt(t)}expandListBlocksToCompleteItems(t,e={}){return gi(t,e)}}function qm(o){return o.is("element","ol")||o.is("element","ul")}function vr(o){return o.is("element","li")}function Wx(o,t,e,n=Wm(e,t)){return o.createAttributeElement(Gm(e),null,{priority:2*t/100-100,id:n})}function $x(o,t,e){return o.createAttributeElement("li",null,{priority:(2*t+1)/100-100,id:e})}function Gm(o){return o=="numbered"?"ol":"ul"}function Wm(o,t){return`list-${o}-${t}`}function Fe(o,t){const e=o.nodeBefore;if(Kt(e)){let n=e;for(const{node:i}of ui(n,"backward"))if(n=i,t.has(n))return;t.set(e,n)}else{const n=o.nodeAfter;Kt(n)&&t.set(n,n)}}function Kx(){return(o,t,e)=>{const{writer:n,schema:i}=e;if(!t.modelRange)return;const r=Array.from(t.modelRange.getItems({shallow:!0})).filter(h=>i.checkAttribute(h,"listItemId"));if(!r.length)return;const s=Co.next(),a=function(h){let u=0,g=h.parent;for(;g;){if(vr(g))u++;else{const p=g.previousSibling;p&&vr(p)&&u++}g=g.parent}return u}(t.viewItem);let c=t.viewItem.parent&&t.viewItem.parent.is("element","ol")?"numbered":"bulleted";const l=r[0].getAttribute("listType");l&&(c=l);const d={listItemId:s,listIndent:a,listType:c};for(const h of r)h.hasAttribute("listItemId")||n.setAttributes(d,h);r.length>1&&r[1].getAttribute("listItemId")!=d.listItemId&&e.keepEmptyElement(r[0])}}function $m(){return(o,t,e)=>{if(!e.consumable.test(t.viewItem,{name:!0}))return;const n=new on(t.viewItem.document);for(const i of Array.from(t.viewItem.getChildren()))vr(i)||qm(i)||n.remove(i)}}function Km(o,t,e,{dataPipeline:n}={}){const i=function(r){return(s,a)=>{const c=[];for(const l of r)s.hasAttribute(l)&&c.push(`attribute:${l}`);return!!c.every(l=>a.test(s,l)!==!1)&&(c.forEach(l=>a.consume(s,l)),!0)}}(o);return(r,s,a)=>{const{writer:c,mapper:l,consumable:d}=a,h=s.item;if(!o.includes(s.attributeKey)||!i(h,d))return;const u=function(p,k,b){const A=b.createRangeOn(p);return k.toViewRange(A).getTrimmed().end.nodeBefore}(h,l,e);(function(p,k,b){for(;p.parent.is("attributeElement")&&p.parent.getCustomProperty("listItemWrapper");)k.unwrap(k.createRangeIn(p.parent),p.parent);const A=k.createPositionBefore(p).getWalker({direction:"backward"}),E=[];for(const{item:M}of A){if(M.is("element")&&b.toModelElement(M))break;M.is("element")&&M.getCustomProperty("listItemMarker")&&E.push(M)}for(const M of E)k.remove(M)})(u,c,l),function(p,k){let b=p.parent;for(;b.is("attributeElement")&&["ul","ol","li"].includes(b.name);){const A=b.parent;k.unwrap(k.createRangeOn(p),b),b=A}}(u,c);const g=function(p,k,b,A,{dataPipeline:E}){let M=A.createRangeOn(k);if(!qn(p))return M;for(const z of b){if(z.scope!="itemMarker")continue;const G=z.createElement(A,p,{dataPipeline:E});if(!G||(A.setCustomProperty("listItemMarker",!0,G),A.insert(M.start,G),M=A.createRange(A.createPositionBefore(G),A.createPositionAfter(k)),!z.createWrapperElement||!z.canWrapElement))continue;const et=z.createWrapperElement(A,p,{dataPipeline:E});A.setCustomProperty("listItemWrapper",!0,et),z.canWrapElement(p)?M=A.wrap(M,et):(M=A.wrap(A.createRangeOn(G),et),M=A.createRange(M.start,A.createPositionAfter(k)))}return M}(h,u,t,c,{dataPipeline:n});(function(p,k,b,A){if(!p.hasAttribute("listIndent"))return;const E=p.getAttribute("listIndent");let M=p;for(let z=E;z>=0;z--){const G=$x(A,z,M.getAttribute("listItemId")),et=Wx(A,z,M.getAttribute("listType"));for(const st of b)st.scope!="list"&&st.scope!="item"||!M.hasAttribute(st.attributeName)||st.setAttributeOnDowncast(A,M.getAttribute(st.attributeName),st.scope=="list"?et:G);if(k=A.wrap(k,G),k=A.wrap(k,et),z==0||(M=xe.first(M,{lowerIndent:!0}),!M))break}})(h,g,t,c)}}function Ym(o,{dataPipeline:t}={}){return(e,{writer:n})=>{if(!Qm(e,o))return null;if(!t)return n.createContainerElement("span",{class:"ck-list-bogus-paragraph"});const i=n.createContainerElement("p");return n.setCustomProperty("dataPipeline:transparentRendering",!0,i),i}}function Qm(o,t,e=Ta(o)){if(!Kt(o))return!1;for(const n of o.getAttributeKeys())if(!n.startsWith("selection:")&&!t.includes(n))return!1;return e.length<2}var Zm=N(2483),Yx={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Zm.c,Yx),Zm.c.locals;var Jm=N(2984),Qx={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(Jm.c,Qx),Jm.c.locals;const yr=["listType","listIndent","listItemId"];class Zx extends R{constructor(t){super(t),this._downcastStrategies=[],t.config.define("list.multiBlock",!0)}static get pluginName(){return"ListEditing"}static get requires(){return[hr,sn,Gx,Re]}init(){const t=this.editor,e=t.model,n=t.config.get("list.multiBlock");if(t.plugins.has("LegacyListEditing"))throw new _("list-feature-conflict",this,{conflictPlugin:"LegacyListEditing"});e.schema.register("$listItem",{allowAttributes:yr}),n?(e.schema.extend("$container",{allowAttributesOf:"$listItem"}),e.schema.extend("$block",{allowAttributesOf:"$listItem"}),e.schema.extend("$blockObject",{allowAttributesOf:"$listItem"})):e.schema.register("listItem",{inheritAllFrom:"$block",allowAttributesOf:"$listItem"});for(const i of yr)e.schema.setAttributeProperties(i,{copyOnReplace:!0});t.commands.add("numberedList",new Vm(t,"numbered")),t.commands.add("bulletedList",new Vm(t,"bulleted")),t.commands.add("indentList",new jm(t,"forward")),t.commands.add("outdentList",new jm(t,"backward")),t.commands.add("splitListItemBefore",new Um(t,"before")),t.commands.add("splitListItemAfter",new Um(t,"after")),n&&(t.commands.add("mergeListItemBackward",new Hm(t,"backward")),t.commands.add("mergeListItemForward",new Hm(t,"forward"))),this._setupDeleteIntegration(),this._setupEnterIntegration(),this._setupTabIntegration(),this._setupClipboardIntegration()}afterInit(){const t=this.editor.commands,e=t.get("indent"),n=t.get("outdent");e&&e.registerChildCommand(t.get("indentList"),{priority:"high"}),n&&n.registerChildCommand(t.get("outdentList"),{priority:"lowest"}),this._setupModelPostFixing(),this._setupConversion()}registerDowncastStrategy(t){this._downcastStrategies.push(t)}getListAttributeNames(){return[...yr,...this._downcastStrategies.map(t=>t.attributeName)]}_setupDeleteIntegration(){const t=this.editor,e=t.commands.get("mergeListItemBackward"),n=t.commands.get("mergeListItemForward");this.listenTo(t.editing.view.document,"delete",(i,r)=>{const s=t.model.document.selection;mi(t.model)||t.model.change(()=>{const a=s.getFirstPosition();if(s.isCollapsed&&r.direction=="backward"){if(!a.isAtStart)return;const c=a.parent;if(!Kt(c))return;if(xe.first(c,{sameAttributes:"listType",sameIndent:!0})||c.getAttribute("listIndent")!==0){if(!e||!e.isEnabled)return;e.execute({shouldMergeOnBlocksContentLevel:Xm(t.model,"backward")})}else Rm(c)||t.execute("splitListItemAfter"),t.execute("outdentList");r.preventDefault(),i.stop()}else{if(s.isCollapsed&&!s.getLastPosition().isAtEnd||!n||!n.isEnabled)return;n.execute({shouldMergeOnBlocksContentLevel:Xm(t.model,"forward")}),r.preventDefault(),i.stop()}})},{context:"li"})}_setupEnterIntegration(){const t=this.editor,e=t.model,n=t.commands,i=n.get("enter");this.listenTo(t.editing.view.document,"enter",(r,s)=>{const a=e.document,c=a.selection.getFirstPosition().parent;if(a.selection.isCollapsed&&Kt(c)&&c.isEmpty&&!s.isSoft){const l=qn(c),d=Rm(c);l&&d?(t.execute("outdentList"),s.preventDefault(),r.stop()):l&&!d?(t.execute("splitListItemAfter"),s.preventDefault(),r.stop()):d&&(t.execute("splitListItemBefore"),s.preventDefault(),r.stop())}},{context:"li"}),this.listenTo(i,"afterExecute",()=>{const r=n.get("splitListItemBefore");r.refresh(),r.isEnabled&&Ta(t.model.document.selection.getLastPosition().parent).length===2&&r.execute()})}_setupTabIntegration(){const t=this.editor;this.listenTo(t.editing.view.document,"tab",(e,n)=>{const i=n.shiftKey?"outdentList":"indentList";this.editor.commands.get(i).isEnabled&&(t.execute(i),n.stopPropagation(),n.preventDefault(),e.stop())},{context:"li"})}_setupConversion(){const t=this.editor,e=t.model,n=this.getListAttributeNames(),i=t.config.get("list.multiBlock"),r=i?"paragraph":"listItem";t.conversion.for("upcast").elementToElement({view:"li",model:(s,{writer:a})=>a.createElement(r,{listType:""})}).elementToElement({view:"p",model:(s,{writer:a})=>s.parent&&s.parent.is("element","li")?a.createElement(r,{listType:""}):null,converterPriority:"high"}).add(s=>{s.on("element:li",Kx()),s.on("element:ul",$m(),{priority:"high"}),s.on("element:ol",$m(),{priority:"high"})}),i||t.conversion.for("downcast").elementToElement({model:"listItem",view:"p"}),t.conversion.for("editingDowncast").elementToElement({model:r,view:Ym(n),converterPriority:"high"}).add(s=>{s.on("attribute",Km(n,this._downcastStrategies,e))}),t.conversion.for("dataDowncast").elementToElement({model:r,view:Ym(n,{dataPipeline:!0}),converterPriority:"high"}).add(s=>{s.on("attribute",Km(n,this._downcastStrategies,e,{dataPipeline:!0}))}),this.listenTo(e.document,"change:data",function(s,a,c,l){return()=>{const g=s.document.differ.getChanges(),p=[],k=new Map,b=new Set;for(const A of g)if(A.type=="insert"&&A.name!="$text")Fe(A.position,k),A.attributes.has("listItemId")?b.add(A.position.nodeAfter):Fe(A.position.getShiftedBy(A.length),k);else if(A.type=="remove"&&A.attributes.has("listItemId"))Fe(A.position,k);else if(A.type=="attribute"){const E=A.range.start.nodeAfter;c.includes(A.attributeKey)?(Fe(A.range.start,k),A.attributeNewValue===null?(Fe(A.range.start.getShiftedBy(1),k),h(E)&&p.push(E)):b.add(E)):Kt(E)&&h(E)&&p.push(E)}for(const A of k.values())p.push(...d(A,b));for(const A of new Set(p))a.reconvertItem(A)};function d(g,p){const k=[],b=new Set,A=[];for(const{node:E,previous:M}of ui(g,"forward")){if(b.has(E))continue;const z=E.getAttribute("listIndent");M&&zc.includes(et)));const G=_n(E,{direction:"forward"});for(const et of G)b.add(et),(h(et,G)||u(et,A,p))&&k.push(et)}return k}function h(g,p){const k=a.mapper.toViewElement(g);if(!k)return!1;if(l.fire("checkElement",{modelElement:g,viewElement:k}))return!0;if(!g.is("element","paragraph")&&!g.is("element","listItem"))return!1;const b=Qm(g,c,p);return!(!b||!k.is("element","p"))||!(b||!k.is("element","span"))}function u(g,p,k){if(k.has(g))return!1;const b=a.mapper.toViewElement(g);let A=p.length-1;for(let E=b.parent;!E.is("editableElement");E=E.parent){const M=vr(E),z=qm(E);if(!z&&!M)continue;const G="checkAttributes:"+(M?"item":"list");if(l.fire(G,{viewElement:E,modelAttributes:p[A]}))break;if(z&&(A--,A<0))return!1}return!0}}(e,t.editing,n,this),{priority:"high"}),this.on("checkAttributes:item",(s,{viewElement:a,modelAttributes:c})=>{a.id!=c.listItemId&&(s.return=!0,s.stop())}),this.on("checkAttributes:list",(s,{viewElement:a,modelAttributes:c})=>{a.name==Gm(c.listType)&&a.id==Wm(c.listType,c.listIndent)||(s.return=!0,s.stop())})}_setupModelPostFixing(){const t=this.editor.model,e=this.getListAttributeNames();t.document.registerPostFixer(n=>function(i,r,s,a){const c=i.document.differ.getChanges(),l=new Map,d=a.editor.config.get("list.multiBlock");let h=!1;for(const g of c){if(g.type=="insert"&&g.name!="$text"){const p=g.position.nodeAfter;if(!i.schema.checkAttribute(p,"listItemId"))for(const k of Array.from(p.getAttributeKeys()))s.includes(k)&&(r.removeAttribute(k,p),h=!0);Fe(g.position,l),g.attributes.has("listItemId")||Fe(g.position.getShiftedBy(g.length),l);for(const{item:k,previousPosition:b}of i.createRangeIn(p))Kt(k)&&Fe(b,l)}else g.type=="remove"?Fe(g.position,l):g.type=="attribute"&&s.includes(g.attributeKey)&&(Fe(g.range.start,l),g.attributeNewValue===null&&Fe(g.range.start.getShiftedBy(1),l));if(!d&&g.type=="attribute"&&yr.includes(g.attributeKey)){const p=g.range.start.nodeAfter;g.attributeNewValue===null&&p&&p.is("element","listItem")?(r.rename(p,"paragraph"),h=!0):g.attributeOldValue===null&&p&&p.is("element")&&p.name!="listItem"&&(r.rename(p,"listItem"),h=!0)}}const u=new Set;for(const g of l.values())h=a.fire("postFixer",{listNodes:new zx(g),listHead:g,writer:r,seenIds:u})||h;return h}(t,n,e,this)),this.on("postFixer",(n,{listNodes:i,writer:r})=>{n.return=function(s,a){let c=0,l=-1,d=null,h=!1;for(const{node:u}of s){const g=u.getAttribute("listIndent");if(g>c){let p;d===null?(d=g-c,p=c):(d>g&&(d=g),p=g-d),p>l+1&&(p=l+1),a.setAttribute("listIndent",p,u),h=!0,l=p}else d=null,c=g+1,l=g}return h}(i,r)||n.return},{priority:"high"}),this.on("postFixer",(n,{listNodes:i,writer:r,seenIds:s})=>{n.return=function(a,c,l){const d=new Set;let h=!1;for(const{node:u}of a){if(d.has(u))continue;let g=u.getAttribute("listType"),p=u.getAttribute("listItemId");if(c.has(p)&&(p=Co.next()),c.add(p),u.is("element","listItem"))u.getAttribute("listItemId")!=p&&(l.setAttribute("listItemId",p,u),h=!0);else for(const k of _n(u,{direction:"forward"}))d.add(k),k.getAttribute("listType")!=g&&(p=Co.next(),g=k.getAttribute("listType")),k.getAttribute("listItemId")!=p&&(l.setAttribute("listItemId",p,k),h=!0)}return h}(i,s,r)||n.return},{priority:"high"})}_setupClipboardIntegration(){const t=this.editor.model,e=this.editor.plugins.get("ClipboardPipeline");this.listenTo(t,"insertContent",function(n){return(i,[r,s])=>{const a=r.is("documentFragment")?Array.from(r.getChildren()):[r];if(!a.length)return;const c=(s?n.createSelection(s):n.document.selection).getFirstPosition();let l;if(Kt(c.parent))l=c.parent;else{if(!Kt(c.nodeBefore))return;l=c.nodeBefore}n.change(d=>{const h=l.getAttribute("listType"),u=l.getAttribute("listIndent"),g=a[0].getAttribute("listIndent")||0,p=Math.max(u-g,0);for(const k of a){const b=Kt(k);l.is("element","listItem")&&k.is("element","paragraph")&&d.rename(k,"listItem"),d.setAttributes({listIndent:(b?k.getAttribute("listIndent"):0)+p,listItemId:b?k.getAttribute("listItemId"):Co.next(),listType:h},k)}})}}(t),{priority:"high"}),this.listenTo(e,"outputTransformation",(n,i)=>{t.change(r=>{const s=Array.from(i.content.getChildren()),a=s[s.length-1];if(s.length>1&&a.is("element")&&a.isEmpty&&s.slice(0,-1).every(Kt)&&r.remove(a),i.method=="copy"||i.method=="cut"){const c=Array.from(i.content.getChildren());pi(c)&&_r(c,r)}})})}}function Xm(o,t){const e=o.document.selection;if(!e.isCollapsed)return!mi(o);if(t==="forward")return!0;const n=e.getFirstPosition().parent,i=n.previousSibling;return!o.schema.isObject(i)&&(!!i.isEmpty||pi([n,i]))}function tf(o,t,e,n){o.ui.componentFactory.add(t,i=>{const r=o.commands.get(t),s=new wt(i);return s.set({label:e,icon:n,tooltip:!0,isToggleable:!0}),s.bind("isOn","isEnabled").to(r,"value","isEnabled"),s.on("execute",()=>{o.execute(t),o.editing.view.focus()}),s})}class Jx extends R{static get pluginName(){return"ListUI"}init(){const t=this.editor.t;tf(this.editor,"numberedList",t("Numbered List"),ot.numberedList),tf(this.editor,"bulletedList",t("Bulleted List"),ot.bulletedList)}}class Xx extends R{static get requires(){return[Zx,Jx]}static get pluginName(){return"List"}}const t2=[{listStyle:"disc",typeAttribute:"disc",listType:"bulleted"},{listStyle:"circle",typeAttribute:"circle",listType:"bulleted"},{listStyle:"square",typeAttribute:"square",listType:"bulleted"},{listStyle:"decimal",typeAttribute:"1",listType:"numbered"},{listStyle:"decimal-leading-zero",typeAttribute:null,listType:"numbered"},{listStyle:"lower-roman",typeAttribute:"i",listType:"numbered"},{listStyle:"upper-roman",typeAttribute:"I",listType:"numbered"},{listStyle:"lower-alpha",typeAttribute:"a",listType:"numbered"},{listStyle:"upper-alpha",typeAttribute:"A",listType:"numbered"},{listStyle:"lower-latin",typeAttribute:"a",listType:"numbered"},{listStyle:"upper-latin",typeAttribute:"A",listType:"numbered"}];for(const{listStyle:o,typeAttribute:t,listType:e}of t2);var ef=N(4672),e2={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(ef.c,e2),ef.c.locals;var nf=N(6832),n2={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(nf.c,n2),nf.c.locals,Fo("Ctrl+Enter");var of=N(9472),o2={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(of.c,o2),of.c.locals,Fo("Ctrl+Enter");function rf(o,t){const e=(n,i,r)=>{if(!r.consumable.consume(i.item,n.name))return;const s=i.attributeNewValue,a=r.writer,c=r.mapper.toViewElement(i.item),l=[...c.getChildren()].find(h=>h.getCustomProperty("media-content"));a.remove(l);const d=o.getMediaViewElement(a,s,t);a.insert(a.createPositionAt(c,0),d)};return n=>{n.on("attribute:url:media",e)}}function sf(o,t,e,n){return o.createContainerElement("figure",{class:"media"},[t.getMediaViewElement(o,e,n),o.createSlot()])}function af(o){const t=o.getSelectedElement();return t&&t.is("element","media")?t:null}function cf(o,t,e,n){o.change(i=>{const r=i.createElement("media",{url:t});o.insertObject(r,e,null,{setSelection:"on",findOptimalPosition:n?"auto":void 0})})}class i2 extends at{refresh(){const t=this.editor.model,e=t.document.selection,n=af(e);this.value=n?n.getAttribute("url"):void 0,this.isEnabled=function(i){const r=i.getSelectedElement();return!!r&&r.name==="media"}(e)||function(i,r){let a=mg(i,r).start.parent;return a.isEmpty&&!r.schema.isLimit(a)&&(a=a.parent),r.schema.checkChild(a,"media")}(e,t)}execute(t){const e=this.editor.model,n=e.document.selection,i=af(n);i?e.change(r=>{r.setAttribute("url",t,i)}):cf(e,t,n,!0)}}class r2{constructor(t,e){const n=e.providers,i=e.extraProviders||[],r=new Set(e.removeProviders),s=n.concat(i).filter(a=>{const c=a.name;return c?!r.has(c):(Q("media-embed-no-provider-name",{provider:a}),!1)});this.locale=t,this.providerDefinitions=s}hasMedia(t){return!!this._getMedia(t)}getMediaViewElement(t,e,n){return this._getMedia(e).getViewElement(t,n)}_getMedia(t){if(!t)return new lf(this.locale);t=t.trim();for(const e of this.providerDefinitions){const n=e.html,i=Bt(e.url);for(const r of i){const s=this._getUrlMatches(t,r);if(s)return new lf(this.locale,t,s,n)}}return null}_getUrlMatches(t,e){let n=t.match(e);if(n)return n;let i=t.replace(/^https?:\/\//,"");return n=i.match(e),n||(i=i.replace(/^www\./,""),n=i.match(e),n||null)}}class lf{constructor(t,e,n,i){this.url=this._getValidUrl(e),this._locale=t,this._match=n,this._previewRenderer=i}getViewElement(t,e){const n={};let i;if(e.renderForEditingView||e.renderMediaPreview&&this.url&&this._previewRenderer){this.url&&(n["data-oembed-url"]=this.url),e.renderForEditingView&&(n.class="ck-media__wrapper");const r=this._getPreviewHtml(e);i=t.createRawElement("div",n,(s,a)=>{a.setContentOf(s,r)})}else this.url&&(n.url=this.url),i=t.createEmptyElement(e.elementName,n);return t.setCustomProperty("media-content",!0,i),i}_getPreviewHtml(t){return this._previewRenderer?this._previewRenderer(this._match):this.url&&t.renderForEditingView?this._getPlaceholderHtml():""}_getPlaceholderHtml(){const t=new mn,e=this._locale.t;return t.content='',t.viewBox="0 0 64 42",new Be({tag:"div",attributes:{class:"ck ck-reset_all ck-media__placeholder"},children:[{tag:"div",attributes:{class:"ck-media__placeholder__icon"},children:[t]},{tag:"a",attributes:{class:"ck-media__placeholder__url",target:"_blank",rel:"noopener noreferrer",href:this.url,"data-cke-tooltip-text":e("Open media in new tab")},children:[{tag:"span",attributes:{class:"ck-media__placeholder__url__text"},children:[this.url]}]}]}).render().outerHTML}_getValidUrl(t){return t?t.match(/^https?/)?t:"https://"+t:null}}var df=N(2792),s2={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(df.c,s2),df.c.locals;class xr extends R{constructor(t){super(t),t.config.define("mediaEmbed",{elementName:"oembed",providers:[{name:"dailymotion",url:[/^dailymotion\.com\/video\/(\w+)/,/^dai.ly\/(\w+)/],html:e=>`
`},{name:"spotify",url:[/^open\.spotify\.com\/(artist\/\w+)/,/^open\.spotify\.com\/(album\/\w+)/,/^open\.spotify\.com\/(track\/\w+)/],html:e=>`
`},{name:"youtube",url:[/^(?:m\.)?youtube\.com\/watch\?v=([\w-]+)(?:&t=(\d+))?/,/^(?:m\.)?youtube\.com\/v\/([\w-]+)(?:\?t=(\d+))?/,/^youtube\.com\/embed\/([\w-]+)(?:\?start=(\d+))?/,/^youtu\.be\/([\w-]+)(?:\?t=(\d+))?/],html:e=>{const n=e[1],i=e[2];return`
`}},{name:"vimeo",url:[/^vimeo\.com\/(\d+)/,/^vimeo\.com\/[^/]+\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/album\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/channels\/[^/]+\/(\d+)/,/^vimeo\.com\/groups\/[^/]+\/videos\/(\d+)/,/^vimeo\.com\/ondemand\/[^/]+\/(\d+)/,/^player\.vimeo\.com\/video\/(\d+)/],html:e=>`
`},{name:"instagram",url:/^instagram\.com\/p\/(\w+)/},{name:"twitter",url:/^twitter\.com/},{name:"googleMaps",url:[/^google\.com\/maps/,/^goo\.gl\/maps/,/^maps\.google\.com/,/^maps\.app\.goo\.gl/]},{name:"flickr",url:/^flickr\.com/},{name:"facebook",url:/^facebook\.com/}]}),this.registry=new r2(t.locale,t.config.get("mediaEmbed"))}static get pluginName(){return"MediaEmbedEditing"}init(){const t=this.editor,e=t.model.schema,n=t.t,i=t.conversion,r=t.config.get("mediaEmbed.previewsInData"),s=t.config.get("mediaEmbed.elementName"),a=this.registry;t.commands.add("mediaEmbed",new i2(t)),e.register("media",{inheritAllFrom:"$blockObject",allowAttributes:["url"]}),i.for("dataDowncast").elementToStructure({model:"media",view:(c,{writer:l})=>{const d=c.getAttribute("url");return sf(l,a,d,{elementName:s,renderMediaPreview:!!d&&r})}}),i.for("dataDowncast").add(rf(a,{elementName:s,renderMediaPreview:r})),i.for("editingDowncast").elementToStructure({model:"media",view:(c,{writer:l})=>{const d=c.getAttribute("url");return function(h,u,g){return u.setCustomProperty("media",!0,h),aa(h,u,{label:g})}(sf(l,a,d,{elementName:s,renderForEditingView:!0}),l,n("media widget"))}}),i.for("editingDowncast").add(rf(a,{elementName:s,renderForEditingView:!0})),i.for("upcast").elementToElement({view:c=>["oembed",s].includes(c.name)&&c.getAttribute("url")?{name:!0}:null,model:(c,{writer:l})=>{const d=c.getAttribute("url");return a.hasMedia(d)?l.createElement("media",{url:d}):null}}).elementToElement({view:{name:"div",attributes:{"data-oembed-url":!0}},model:(c,{writer:l})=>{const d=c.getAttribute("data-oembed-url");return a.hasMedia(d)?l.createElement("media",{url:d}):null}}).add(c=>{c.on("element:figure",(l,d,h)=>{if(!h.consumable.consume(d.viewItem,{name:!0,classes:"media"}))return;const{modelRange:u,modelCursor:g}=h.convertChildren(d.viewItem,d.modelCursor);d.modelRange=u,d.modelCursor=g,Wt(u.getItems())||h.consumable.revert(d.viewItem,{name:!0,classes:"media"})})})}}const a2=/^(?:http(s)?:\/\/)?[\w-]+\.[\w-.~:/?#[\]@!$&'()*+,;=%]+$/;class c2 extends R{constructor(t){super(t),this._timeoutId=null,this._positionToInsert=null}static get requires(){return[Pg,sn,jg]}static get pluginName(){return"AutoMediaEmbed"}init(){const t=this.editor,e=t.model.document,n=t.plugins.get("ClipboardPipeline");this.listenTo(n,"inputTransformation",()=>{const i=e.selection.getFirstRange(),r=Zt.fromPosition(i.start);r.stickiness="toPrevious";const s=Zt.fromPosition(i.end);s.stickiness="toNext",e.once("change:data",()=>{this._embedMediaBetweenPositions(r,s),r.detach(),s.detach()},{priority:"high"})}),t.commands.get("undo").on("execute",()=>{this._timeoutId&&($.window.clearTimeout(this._timeoutId),this._positionToInsert.detach(),this._timeoutId=null,this._positionToInsert=null)},{priority:"high"})}_embedMediaBetweenPositions(t,e){const n=this.editor,i=n.plugins.get(xr).registry,r=new pe(t,e),s=r.getWalker({ignoreElementEnd:!0});let a="";for(const c of s)c.item.is("$textProxy")&&(a+=c.item.data);if(a=a.trim(),!a.match(a2)||!i.hasMedia(a))return void r.detach();n.commands.get("mediaEmbed").isEnabled?(this._positionToInsert=Zt.fromPosition(t),this._timeoutId=$.window.setTimeout(()=>{n.model.change(c=>{this._timeoutId=null,c.remove(r),r.detach();let l=null;this._positionToInsert.root.rootName!=="$graveyard"&&(l=this._positionToInsert),cf(n.model,a,l,!1),this._positionToInsert.detach(),this._positionToInsert=null}),n.plugins.get(sn).requestUndoOnBackspace()},100)):r.detach()}}var hf=N(8776),l2={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(hf.c,l2),hf.c.locals;class d2 extends tt{constructor(t,e){super(e);const n=e.t;this.focusTracker=new Qt,this.keystrokes=new ie,this.set("mediaURLInputValue",""),this.urlInputView=this._createUrlInput(),this.saveButtonView=this._createButton(n("Save"),ot.check,"ck-button-save"),this.saveButtonView.type="submit",this.saveButtonView.bind("isEnabled").to(this,"mediaURLInputValue",i=>!!i),this.cancelButtonView=this._createButton(n("Cancel"),ot.cancel,"ck-button-cancel","cancel"),this._focusables=new Ce,this._focusCycler=new _e({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this._validators=t,this.setTemplate({tag:"form",attributes:{class:["ck","ck-media-form","ck-responsive-form"],tabindex:"-1"},children:[this.urlInputView,this.saveButtonView,this.cancelButtonView]})}render(){super.render(),m({view:this}),[this.urlInputView,this.saveButtonView,this.cancelButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element);const t=e=>e.stopPropagation();this.keystrokes.set("arrowright",t),this.keystrokes.set("arrowleft",t),this.keystrokes.set("arrowup",t),this.keystrokes.set("arrowdown",t)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}get url(){return this.urlInputView.fieldView.element.value.trim()}set url(t){this.urlInputView.fieldView.element.value=t.trim()}isValid(){this.resetFormStatus();for(const t of this._validators){const e=t(this);if(e)return this.urlInputView.errorText=e,!1}return!0}resetFormStatus(){this.urlInputView.errorText=null,this.urlInputView.infoText=this._urlInputViewInfoDefault}_createUrlInput(){const t=this.locale.t,e=new Pi(this.locale,er),n=e.fieldView;return this._urlInputViewInfoDefault=t("Paste the media URL in the input."),this._urlInputViewInfoTip=t("Tip: Paste the URL into the content to embed faster."),e.label=t("Media URL"),e.infoText=this._urlInputViewInfoDefault,n.on("input",()=>{e.infoText=n.element.value?this._urlInputViewInfoTip:this._urlInputViewInfoDefault,this.mediaURLInputValue=n.element.value.trim()}),e}_createButton(t,e,n,i){const r=new wt(this.locale);return r.set({label:t,icon:e,tooltip:!0}),r.extendTemplate({attributes:{class:n}}),i&&r.delegate("execute").to(this,i),r}}class h2 extends R{static get requires(){return[xr]}static get pluginName(){return"MediaEmbedUI"}init(){const t=this.editor,e=t.commands.get("mediaEmbed");t.ui.componentFactory.add("mediaEmbed",n=>{const i=rn(n);return this._setUpDropdown(i,e),i})}_setUpDropdown(t,e){const n=this.editor,i=n.t,r=t.buttonView,s=n.plugins.get(xr).registry;t.once("change:isOpen",()=>{const a=new(x(d2))(function(c,l){return[d=>{if(!d.url.length)return c("The URL must not be empty.")},d=>{if(!l.hasMedia(d.url))return c("This media URL is not supported.")}]}(n.t,s),n.locale);t.panelView.children.add(a),r.on("open",()=>{a.disableCssTransitions(),a.url=e.value||"",a.urlInputView.fieldView.select(),a.enableCssTransitions()},{priority:"low"}),t.on("submit",()=>{a.isValid()&&(n.execute("mediaEmbed",a.url),n.editing.view.focus())}),t.on("change:isOpen",()=>a.resetFormStatus()),t.on("cancel",()=>{n.editing.view.focus()}),a.delegate("submit","cancel").to(t),a.urlInputView.fieldView.bind("value").to(e,"value"),a.urlInputView.bind("isEnabled").to(e,"isEnabled")}),t.bind("isEnabled").to(e),r.set({label:i("Insert media"),icon:'',tooltip:!0})}}var uf=N(9460),u2={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};q()(uf.c,u2),uf.c.locals;function g2(o,t){if(!o.childCount)return;const e=new on(o.document),n=function(s,a){const c=a.createRangeIn(s),l=new Ne({name:/^p|h\d+$/,styles:{"mso-list":/.*/}}),d=[];for(const h of c)if(h.type==="elementStart"&&l.match(h.item)){const u=m2(h.item);d.push({element:h.item,id:u.id,order:u.order,indent:u.indent})}return d}(o,e);if(!n.length)return;let i=null,r=1;n.forEach((s,a)=>{const c=function(p,k){if(!p)return!0;if(p.id!==k.id)return k.indent-p.indent!=1;const b=k.element.previousSibling;if(!b)return!0;return A=b,!(A.is("element","ol")||A.is("element","ul"));var A}(n[a-1],s),l=c?null:n[a-1],d=(u=s,(h=l)?u.indent-h.indent:u.indent-1);var h,u;if(c&&(i=null,r=1),!i||d!==0){const p=function(k,b){const A=new RegExp(`@list l${k.id}:level${k.indent}\\s*({[^}]*)`,"gi"),E=/mso-level-number-format:([^;]{0,100});/gi,M=/mso-level-start-at:\s{0,100}([0-9]{0,10})\s{0,100};/gi,z=A.exec(b);let G="decimal",et="ol",st=null;if(z&&z[1]){const Lt=E.exec(z[1]);if(Lt&&Lt[1]&&(G=Lt[1].trim(),et=G!=="bullet"&&G!=="image"?"ol":"ul"),G==="bullet"){const Ot=function(vo){const Ze=function(ln){if(ln.getChild(0).is("$text"))return null;for(const dn of ln.getChildren()){if(!dn.is("element","span"))continue;const Yn=dn.getChild(0);if(Yn)return Yn.is("$text")?Yn:Yn.getChild(0)}return null}(vo);if(!Ze)return null;const Ee=Ze._data;return Ee==="o"?"circle":Ee==="·"?"disc":Ee==="§"?"square":null}(k.element);Ot&&(G=Ot)}else{const Ot=M.exec(z[1]);Ot&&Ot[1]&&(st=parseInt(Ot[1]))}}return{type:et,startIndex:st,style:p2(G)}}(s,t);if(i){if(s.indent>r){const k=i.getChild(i.childCount-1),b=k.getChild(k.childCount-1);i=gf(p,b,e),r+=1}else if(s.indent1&&e.setAttribute("start",o.startIndex,i),i}function m2(o){const t={},e=o.getStyle("mso-list");if(e){const n=e.match(/(^|\s{1,100})l(\d+)/i),i=e.match(/\s{0,100}lfo(\d+)/i),r=e.match(/\s{0,100}level(\d+)/i);n&&i&&r&&(t.id=n[2],t.order=i[1],t.indent=parseInt(r[1]))}return t}function f2(o,t){if(!o.childCount)return;const e=new on(o.document),n=function(r,s){const a=s.createRangeIn(r),c=new Ne({name:/v:(.+)/}),l=[];for(const d of a){if(d.type!="elementStart")continue;const h=d.item,u=h.previousSibling,g=u&&u.is("element")?u.name:null;c.match(h)&&h.getAttribute("o:gfxdata")&&g!=="v:shapetype"&&l.push(d.item.getAttribute("id"))}return l}(o,e);(function(r,s,a){const c=a.createRangeIn(s),l=new Ne({name:"img"}),d=[];for(const h of c)if(h.item.is("element")&&l.match(h.item)){const u=h.item,g=u.getAttribute("v:shapes")?u.getAttribute("v:shapes").split(" "):[];g.length&&g.every(p=>r.indexOf(p)>-1)?d.push(u):u.getAttribute("src")||d.push(u)}for(const h of d)a.remove(h)})(n,o,e),function(r,s,a){const c=a.createRangeIn(s),l=[];for(const u of c)if(u.type=="elementStart"&&u.item.is("element","v:shape")){const g=u.item.getAttribute("id");if(r.includes(g))continue;d(u.item.parent.getChildren(),g)||l.push(u.item)}for(const u of l){const g={src:h(u)};u.hasAttribute("alt")&&(g.alt=u.getAttribute("alt"));const p=a.createElement("img",g);a.insertChild(u.index+1,p,u.parent)}function d(u,g){for(const p of u)if(p.is("element")&&(p.name=="img"&&p.getAttribute("v:shapes")==g||d(p.getChildren(),g)))return!0;return!1}function h(u){for(const g of u.getChildren())if(g.is("element")&&g.getAttribute("src"))return g.getAttribute("src")}}(n,o,e),function(r,s){const a=s.createRangeIn(r),c=new Ne({name:/v:(.+)/}),l=[];for(const d of a)d.type=="elementStart"&&c.match(d.item)&&l.push(d.item);for(const d of l)s.remove(d)}(o,e);const i=function(r,s){const a=s.createRangeIn(r),c=new Ne({name:"img"}),l=[];for(const d of a)d.item.is("element")&&c.match(d.item)&&d.item.getAttribute("src").startsWith("file://")&&l.push(d.item);return l}(o,e);i.length&&function(r,s,a){if(r.length===s.length)for(let c=0;cString.fromCharCode(parseInt(t,16))).join(""))}const b2=//i,w2=/xmlns:o="urn:schemas-microsoft-com/i;class A2{constructor(t){this.document=t}isActive(t){return b2.test(t)||w2.test(t)}execute(t){const{body:e,stylesString:n}=t._parsedData;g2(e,n),f2(e,t.dataTransfer.getData("text/rtf")),function(i){const r=[],s=new on(i.document);for(const{item:a}of s.createRangeIn(i))if(a.is("element")){for(const c of a.getClassNames())/\bmso/gi.exec(c)&&s.removeClass(c,a);for(const c of a.getStyleNames())/\bmso/gi.exec(c)&&s.removeStyle(c,a);a.is("element","w:sdt")&&r.push(a)}for(const a of r){const c=a.parent,l=c.getChildIndex(a);s.insertChild(l,a.getChildren(),c),s.remove(a)}}(e),t.content=e}}function pf(o,t,e,{blockElements:n,inlineObjectElements:i}){let r=e.createPositionAt(o,t=="forward"?"after":"before");return r=r.getLastMatchingPosition(({item:s})=>s.is("element")&&!n.includes(s.name)&&!i.includes(s.name),{direction:t}),t=="forward"?r.nodeAfter:r.nodeBefore}function mf(o,t){return!!o&&o.is("element")&&t.includes(o.name)}const C2=/id=("|')docs-internal-guid-[-0-9a-f]+("|')/i;class _2{constructor(t){this.document=t}isActive(t){return C2.test(t)}execute(t){const e=new on(this.document),{body:n}=t._parsedData;(function(i,r){for(const s of i.getChildren())if(s.is("element","b")&&s.getStyle("font-weight")==="normal"){const a=i.getChildIndex(s);r.remove(s),r.insertChild(a,s.getChildren(),i)}})(n,e),function(i,r){for(const s of r.createRangeIn(i)){const a=s.item;if(a.is("element","li")){const c=a.getChild(0);c&&c.is("element","p")&&r.unwrapElement(c)}}}(n,e),function(i,r){const s=new Fi(r.document.stylesProcessor),a=new Ui(s,{renderingMode:"data"}),c=a.blockElements,l=a.inlineObjectElements,d=[];for(const h of r.createRangeIn(i)){const u=h.item;if(u.is("element","br")){const g=pf(u,"forward",r,{blockElements:c,inlineObjectElements:l}),p=pf(u,"backward",r,{blockElements:c,inlineObjectElements:l}),k=mf(g,c);(mf(p,c)||k)&&d.push(u)}}for(const h of d)h.hasClass("Apple-interchange-newline")?r.remove(h):r.replace(h,r.createElement("p"))}(n,e),t.content=n}}const v2=/(\s+)<\/span>/g,(t,e)=>e.length===1?" ":Array(e.length+1).join("  ").substr(0,e.length))}function x2(o,t){const e=new DOMParser,n=function(c){return ff(ff(c)).replace(/([^\S\r\n]*?)[\r\n]+([^\S\r\n]*<\/span>)/g,"$1$2").replace(/<\/span>/g,"").replace(/()[\r\n]+(<\/span>)/g,"$1 $2").replace(/ <\//g," <\/o:p>/g," ").replace(/( |\u00A0)<\/o:p>/g,"").replace(/>([^\S\r\n]*[\r\n]\s*)<")}(function(c){const l="",d="",h=c.indexOf(l);if(h<0)return c;const u=c.indexOf(d,h+l.length);return c.substring(0,h+l.length)+(u>=0?c.substring(u):"")}(o=(o=o.replace(/ diff --git a/resources/views/generate/crud.blade.php b/resources/views/generate/crud.blade.php index f99de9bf5..83099b29f 100644 --- a/resources/views/generate/crud.blade.php +++ b/resources/views/generate/crud.blade.php @@ -156,15 +156,15 @@ public function __construct() public function getLabels(): array { return [ - 'list_title' => __( '{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List' ), - 'list_description' => __( 'Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.' ), - 'no_entry' => __( 'No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered' ), - 'create_new' => __( 'Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}' ), - 'create_title' => __( 'Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}' ), - 'create_description' => __( 'Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.' ), - 'edit_title' => __( 'Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}' ), - 'edit_description' => __( 'Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.' ), - 'back_to_list' => __( 'Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}' ), + 'list_title' => {{ '__' }}( '{{ ucwords( $Str::plural( trim( $resource_name ) ) ) }} List' ), + 'list_description' => {{ '__' }}( 'Display all {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }}.' ), + 'no_entry' => {{ '__' }}( 'No {{ strtolower( $Str::plural( trim( $resource_name ) ) ) }} has been registered' ), + 'create_new' => {{ '__' }}( 'Add a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}' ), + 'create_title' => {{ '__' }}( 'Create a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}' ), + 'create_description' => {{ '__' }}( 'Register a new {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }} and save it.' ), + 'edit_title' => {{ '__' }}( 'Edit {{ strtolower( $Str::singular( trim( $resource_name ) ) ) }}' ), + 'edit_description' => {{ '__' }}( 'Modify {{ ucwords( strtolower( $Str::singular( trim( $resource_name ) ) ) ) }}.' ), + 'back_to_list' => {{ '__' }}( 'Return to {{ ucwords( $Str::plural( trim( $resource_name ) ) ) }}' ), ]; } @@ -175,19 +175,19 @@ public function getForm( {{ trim( $lastClassName ) }} $entry = null ): array { return [ 'main' => [ - 'label' => __( 'Name' ), + 'label' => {{ '__' }}( 'Name' ), 'name' => 'name', 'value' => $entry->name ?? '', - 'description' => __( 'Provide a name to the resource.' ) + 'description' => {{ '__' }}( 'Provide a name to the resource.' ) ], 'tabs' => [ 'general' => [ - 'label' => __( 'General' ), + 'label' => {{ '__' }}( 'General' ), 'fields' => [ @foreach( $Schema::getColumnListing( $table_name ) as $column )[ 'type' => 'text', 'name' => '{{ $column }}', - 'label' => __( '{{ ucwords( $column ) }}' ), + 'label' => {{ '__' }}( '{{ ucwords( $column ) }}' ), 'value' => $entry->{{ $column }} ?? '', ], @endforeach ] @@ -281,7 +281,7 @@ public function beforeDelete( $namespace, $id, $model ): void * * return response([ * 'status' => 'danger', - * 'message' => __( 'You\re not allowed to do that.' ) + * 'message' => {{ '__' }}( 'You\re not allowed to do that.' ) * ], 403 ); **/ if ( $this->permissions[ 'delete' ] !== false ) { @@ -300,7 +300,7 @@ public function getColumns(): array return [ @foreach( $Schema::getColumnListing( $table_name ) as $column ) '{{ $column }}' => [ - 'label' => __( '{{ ucwords( $column ) }}' ), + 'label' => {{ '__' }}( '{{ ucwords( $column ) }}' ), '$direction' => '', '$sort' => false ], @@ -318,17 +318,17 @@ public function addActions( CrudEntry $entry, $namespace ): CrudEntry */ $entry->action( identifier: 'edit', - label: __( 'Edit' ), + label: {{ '__' }}( 'Edit' ), url: ns()->url( '/dashboard/' . $this->slug . '/edit/' . $entry->id ) ); $entry->action( identifier: 'delete', - label: __( 'Delete' ), + label: {{ '__' }}( 'Delete' ), type: 'DELETE', url: ns()->url( '/api/crud/{{ strtolower( trim( $namespace ) ) }}/' . $entry->id ), confirm: [ - 'message' => __( 'Would you like to delete this ?' ), + 'message' => {{ '__' }}( 'Would you like to delete this ?' ), ] ); @@ -399,7 +399,7 @@ public function getBulkActions(): array { return Hook::filter( $this->namespace . '-bulk', [ [ - 'label' => __( 'Delete Selected Entries' ), + 'label' => {{ '__' }}( 'Delete Selected Entries' ), 'identifier' => 'delete_selected', 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace diff --git a/resources/views/pages/dashboard/about.blade.php b/resources/views/pages/dashboard/about.blade.php index 6eeec8dfe..e517fd9f4 100644 --- a/resources/views/pages/dashboard/about.blade.php +++ b/resources/views/pages/dashboard/about.blade.php @@ -39,7 +39,7 @@ @endforeach - +
@@ -58,6 +58,31 @@ @endforeach
+ + @if ( env( 'APP_DEBUG' ) ) +
+ + + + + + + + + + + + + @foreach( $developpers as $label => $value ) + + + + + @endforeach + +
{{ __( 'Developper Section' ) }}
{{ __( 'Configurations' ) }}{{ __( 'Status' ) }}
{{ $label }}{{ $value }}
+ + @endif
@endsection diff --git a/routes/api-base.php b/routes/api-base.php index ffc5a3305..67dd984ff 100644 --- a/routes/api-base.php +++ b/routes/api-base.php @@ -6,46 +6,46 @@ use Illuminate\Routing\Middleware\SubstituteBindings; use Illuminate\Support\Facades\Route; -Route::middleware([ +Route::middleware( [ InstalledStateMiddleware::class, SubstituteBindings::class, ClearRequestCacheMiddleware::class, -])->group(function () { - include dirname(__FILE__) . '/api/fields.php'; +] )->group( function () { + include dirname( __FILE__ ) . '/api/fields.php'; - Route::middleware([ + Route::middleware( [ 'auth:sanctum', - ])->group(function () { - include dirname(__FILE__) . '/api/dashboard.php'; - include dirname(__FILE__) . '/api/categories.php'; - include dirname(__FILE__) . '/api/customers.php'; - include dirname(__FILE__) . '/api/transactions.php'; - include dirname(__FILE__) . '/api/modules.php'; - include dirname(__FILE__) . '/api/medias.php'; - include dirname(__FILE__) . '/api/notifications.php'; - include dirname(__FILE__) . '/api/orders.php'; - include dirname(__FILE__) . '/api/procurements.php'; - include dirname(__FILE__) . '/api/products.php'; - include dirname(__FILE__) . '/api/providers.php'; - include dirname(__FILE__) . '/api/registers.php'; - include dirname(__FILE__) . '/api/reset.php'; - include dirname(__FILE__) . '/api/reports.php'; - include dirname(__FILE__) . '/api/settings.php'; - include dirname(__FILE__) . '/api/rewards.php'; - include dirname(__FILE__) . '/api/taxes.php'; - include dirname(__FILE__) . '/api/crud.php'; - include dirname(__FILE__) . '/api/forms.php'; - include dirname(__FILE__) . '/api/units.php'; - include dirname(__FILE__) . '/api/users.php'; - }); -}); + ] )->group( function () { + include dirname( __FILE__ ) . '/api/dashboard.php'; + include dirname( __FILE__ ) . '/api/categories.php'; + include dirname( __FILE__ ) . '/api/customers.php'; + include dirname( __FILE__ ) . '/api/transactions.php'; + include dirname( __FILE__ ) . '/api/modules.php'; + include dirname( __FILE__ ) . '/api/medias.php'; + include dirname( __FILE__ ) . '/api/notifications.php'; + include dirname( __FILE__ ) . '/api/orders.php'; + include dirname( __FILE__ ) . '/api/procurements.php'; + include dirname( __FILE__ ) . '/api/products.php'; + include dirname( __FILE__ ) . '/api/providers.php'; + include dirname( __FILE__ ) . '/api/registers.php'; + include dirname( __FILE__ ) . '/api/reset.php'; + include dirname( __FILE__ ) . '/api/reports.php'; + include dirname( __FILE__ ) . '/api/settings.php'; + include dirname( __FILE__ ) . '/api/rewards.php'; + include dirname( __FILE__ ) . '/api/taxes.php'; + include dirname( __FILE__ ) . '/api/crud.php'; + include dirname( __FILE__ ) . '/api/forms.php'; + include dirname( __FILE__ ) . '/api/units.php'; + include dirname( __FILE__ ) . '/api/users.php'; + } ); +} ); -include dirname(__FILE__) . '/api/hard-reset.php'; -include_once dirname(__FILE__) . '/api/update.php'; +include dirname( __FILE__ ) . '/api/hard-reset.php'; +include_once dirname( __FILE__ ) . '/api/update.php'; -Route::prefix('setup')->group(function () { - Route::get('check-database', [ SetupController::class, 'checkExistingCredentials' ]); - Route::post('database', [ SetupController::class, 'checkDatabase' ]); - Route::get('database', [ SetupController::class, 'checkDbConfigDefined' ]); - Route::post('configuration', 'SetupController@saveConfiguration'); -}); +Route::prefix( 'setup' )->group( function () { + Route::get( 'check-database', [ SetupController::class, 'checkExistingCredentials' ] ); + Route::post( 'database', [ SetupController::class, 'checkDatabase' ] ); + Route::get( 'database', [ SetupController::class, 'checkDbConfigDefined' ] ); + Route::post( 'configuration', 'SetupController@saveConfiguration' ); +} ); diff --git a/routes/api.php b/routes/api.php index 708135a2a..970d8809e 100644 --- a/routes/api.php +++ b/routes/api.php @@ -14,11 +14,11 @@ | is assigned the "api" middleware group. Enjoy building your API! | */ -Route::middleware('auth:sanctum')->get('/user', function (Request $request) { +Route::middleware( 'auth:sanctum' )->get( '/user', function ( Request $request ) { return $request->user(); -}); +} ); -$domain = pathinfo(env('APP_URL')); +$domain = pathinfo( env( 'APP_URL' ) ); /** * If something has to happen @@ -32,16 +32,16 @@ * on the system. In order to enable it, the user * will have to follow these instructions https://my.nexopos.com/en/documentation/wildcards */ -if (env('NS_WILDCARD_ENABLED')) { +if ( env( 'NS_WILDCARD_ENABLED' ) ) { /** * The defined route should only be applicable * to the main domain. */ - $domainString = ($domain[ 'filename' ] ?: 'localhost') . (isset($domain[ 'extension' ]) ? '.' . $domain[ 'extension' ] : ''); + $domainString = ( $domain[ 'filename' ] ?: 'localhost' ) . ( isset( $domain[ 'extension' ] ) ? '.' . $domain[ 'extension' ] : '' ); - Route::domain($domainString)->group(function () { - include dirname(__FILE__) . DIRECTORY_SEPARATOR . 'api-base.php'; - }); + Route::domain( $domainString )->group( function () { + include dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'api-base.php'; + } ); } else { - include dirname(__FILE__) . DIRECTORY_SEPARATOR . 'api-base.php'; + include dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'api-base.php'; } diff --git a/routes/api/categories.php b/routes/api/categories.php index 881f47c83..00b33ab32 100644 --- a/routes/api/categories.php +++ b/routes/api/categories.php @@ -3,11 +3,11 @@ use App\Http\Controllers\Dashboard\CategoryController; use Illuminate\Support\Facades\Route; -Route::get('categories/{id?}', [ CategoryController::class, 'get' ])->where([ 'id' => '[0-9]+' ]); -Route::get('categories/{id?}/products', [ CategoryController::class, 'getCategoriesProducts' ])->where([ 'id' => '[0-9]+' ]); -Route::get('categories/{id?}/variations', [ CategoryController::class, 'getCategoriesVariations' ])->where([ 'id' => '[0-9]+' ]); -Route::post('categories', [ CategoryController::class, 'post' ]); -Route::put('categories/{id}', [ CategoryController::class, 'put' ]); -Route::delete('categories/{id}', [ CategoryController::class, 'delete' ]); +Route::get( 'categories/{id?}', [ CategoryController::class, 'get' ] )->where( [ 'id' => '[0-9]+' ] ); +Route::get( 'categories/{id?}/products', [ CategoryController::class, 'getCategoriesProducts' ] )->where( [ 'id' => '[0-9]+' ] ); +Route::get( 'categories/{id?}/variations', [ CategoryController::class, 'getCategoriesVariations' ] )->where( [ 'id' => '[0-9]+' ] ); +Route::post( 'categories', [ CategoryController::class, 'post' ] ); +Route::put( 'categories/{id}', [ CategoryController::class, 'put' ] ); +Route::delete( 'categories/{id}', [ CategoryController::class, 'delete' ] ); -Route::get('categories/pos/{id?}', [ CategoryController::class, 'getCategories' ]); +Route::get( 'categories/pos/{id?}', [ CategoryController::class, 'getCategories' ] ); diff --git a/routes/api/crud.php b/routes/api/crud.php index f85c0359b..f0c284593 100644 --- a/routes/api/crud.php +++ b/routes/api/crud.php @@ -4,12 +4,12 @@ use App\Http\Controllers\Dashboard\CrudController; use Illuminate\Support\Facades\Route; -Route::get('crud/{namespace}', [ CrudController::class, 'crudList' ]); -Route::get('crud/{namespace}/columns', [ CrudController::class, 'getColumns' ]); -Route::get('crud/{namespace}/config/{id?}', [ CrudController::class, 'getConfig' ]); -Route::get('crud/{namespace}/form-config/{id?}', [ CrudController::class, 'getFormConfig' ]); -Route::put('crud/{namespace}/{id}', [ CrudController::class, 'crudPut' ])->where(['id' => '[0-9]+']); -Route::post('crud/{namespace}', [ CrudController::class, 'crudPost' ]); -Route::post('crud/{namespace}/export', [ CrudController::class, 'exportCrud' ]); -Route::post('crud/{namespace}/bulk-actions', [ CrudController::class, 'crudBulkActions' ])->name(Hook::filter('ns-route-name', 'ns.api.crud-bulk-actions')); -Route::delete('crud/{namespace}/{id}', [ CrudController::class, 'crudDelete' ]); +Route::get( 'crud/{namespace}', [ CrudController::class, 'crudList' ] ); +Route::get( 'crud/{namespace}/columns', [ CrudController::class, 'getColumns' ] ); +Route::get( 'crud/{namespace}/config/{id?}', [ CrudController::class, 'getConfig' ] ); +Route::get( 'crud/{namespace}/form-config/{id?}', [ CrudController::class, 'getFormConfig' ] ); +Route::put( 'crud/{namespace}/{id}', [ CrudController::class, 'crudPut' ] )->where( ['id' => '[0-9]+'] ); +Route::post( 'crud/{namespace}', [ CrudController::class, 'crudPost' ] ); +Route::post( 'crud/{namespace}/export', [ CrudController::class, 'exportCrud' ] ); +Route::post( 'crud/{namespace}/bulk-actions', [ CrudController::class, 'crudBulkActions' ] )->name( Hook::filter( 'ns-route-name', 'ns.api.crud-bulk-actions' ) ); +Route::delete( 'crud/{namespace}/{id}', [ CrudController::class, 'crudDelete' ] ); diff --git a/routes/api/customers.php b/routes/api/customers.php index 50e250fe8..d62ed6147 100644 --- a/routes/api/customers.php +++ b/routes/api/customers.php @@ -4,29 +4,29 @@ use App\Http\Controllers\Dashboard\CustomersGroupsController; use Illuminate\Support\Facades\Route; -Route::delete('customers/{id}', [ CustomersController::class, 'delete' ]); -Route::delete('customers/using-email/{email}', [ CustomersController::class, 'deleteUsingEmail' ]); -Route::get('customers/{customer?}', [ CustomersController::class, 'get' ])->where([ 'customer' => '[0-9]+' ]); -Route::get('customers/recently-active', [ CustomersController::class, 'getRecentlyActive' ]); -Route::get('customers/{customer}/orders', [ CustomersController::class, 'getOrders' ]); -Route::get('customers/{customer}/addresses', [ CustomersController::class, 'getAddresses' ]); -Route::get('customers/{customer}/group', [ CustomersController::class, 'getGroup' ]); -Route::get('customers/{customer}/coupons', [ CustomersController::class, 'getCustomerCoupons' ]); -Route::get('customers/{customer}/rewards', [ CustomersController::class, 'getCustomerRewards' ]); -Route::get('customers/{customer}/account-history', [ CustomersController::class, 'getAccountHistory' ]); -Route::post('customers', [ CustomersController::class, 'post' ]); -Route::post('customers/search', [ CustomersController::class, 'searchCustomer' ])->name(ns()->routeName('ns-api.customers.search')); -Route::post('customers/coupons/{coupon}', [ CustomersController::class, 'loadCoupons' ]); -Route::post('customers/{customer}/crud/account-history', [ CustomersController::class, 'recordAccountHistory' ]); -Route::put('customers/{customer}/crud/{accountHistory}/account-history', [ CustomersController::class, 'updateAccountHistory' ]); -Route::put('customers/{customer}', [ CustomersController::class, 'put' ]); +Route::delete( 'customers/{id}', [ CustomersController::class, 'delete' ] ); +Route::delete( 'customers/using-email/{email}', [ CustomersController::class, 'deleteUsingEmail' ] ); +Route::get( 'customers/{customer?}', [ CustomersController::class, 'get' ] )->where( [ 'customer' => '[0-9]+' ] ); +Route::get( 'customers/recently-active', [ CustomersController::class, 'getRecentlyActive' ] ); +Route::get( 'customers/{customer}/orders', [ CustomersController::class, 'getOrders' ] ); +Route::get( 'customers/{customer}/addresses', [ CustomersController::class, 'getAddresses' ] ); +Route::get( 'customers/{customer}/group', [ CustomersController::class, 'getGroup' ] ); +Route::get( 'customers/{customer}/coupons', [ CustomersController::class, 'getCustomerCoupons' ] ); +Route::get( 'customers/{customer}/rewards', [ CustomersController::class, 'getCustomerRewards' ] ); +Route::get( 'customers/{customer}/account-history', [ CustomersController::class, 'getAccountHistory' ] ); +Route::post( 'customers', [ CustomersController::class, 'post' ] ); +Route::post( 'customers/search', [ CustomersController::class, 'searchCustomer' ] )->name( ns()->routeName( 'ns-api.customers.search' ) ); +Route::post( 'customers/coupons/{coupon}', [ CustomersController::class, 'loadCoupons' ] ); +Route::post( 'customers/{customer}/crud/account-history', [ CustomersController::class, 'recordAccountHistory' ] ); +Route::put( 'customers/{customer}/crud/{accountHistory}/account-history', [ CustomersController::class, 'updateAccountHistory' ] ); +Route::put( 'customers/{customer}', [ CustomersController::class, 'put' ] ); -Route::post('customers/{customer}/account-history', [ CustomersController::class, 'accountTransaction' ]) - ->middleware('ns.restrict:nexopos.customers.manage-account-history'); +Route::post( 'customers/{customer}/account-history', [ CustomersController::class, 'accountTransaction' ] ) + ->middleware( 'ns.restrict:nexopos.customers.manage-account-history' ); -Route::get('customers-groups/{id?}', [ CustomersGroupsController::class, 'get' ]); -Route::get('customers-groups/{id?}/customers', [ CustomersGroupsController::class, 'getCustomers' ]); -Route::delete('customers-groups/{id}', [ CustomersGroupsController::class, 'delete' ]); -Route::post('customers-groups', [ CustomersGroupsController::class, 'post' ]); -Route::put('customers-groups/{id}', [ CustomersGroupsController::class, 'put' ]); -Route::post('customers-groups/transfer-customers', [ CustomersGroupsController::class, 'transferOwnership' ]); +Route::get( 'customers-groups/{id?}', [ CustomersGroupsController::class, 'get' ] ); +Route::get( 'customers-groups/{id?}/customers', [ CustomersGroupsController::class, 'getCustomers' ] ); +Route::delete( 'customers-groups/{id}', [ CustomersGroupsController::class, 'delete' ] ); +Route::post( 'customers-groups', [ CustomersGroupsController::class, 'post' ] ); +Route::put( 'customers-groups/{id}', [ CustomersGroupsController::class, 'put' ] ); +Route::post( 'customers-groups/transfer-customers', [ CustomersGroupsController::class, 'transferOwnership' ] ); diff --git a/routes/api/dashboard.php b/routes/api/dashboard.php index a78a2ddb1..45e302426 100644 --- a/routes/api/dashboard.php +++ b/routes/api/dashboard.php @@ -3,8 +3,8 @@ use App\Http\Controllers\DashboardController; use Illuminate\Support\Facades\Route; -Route::get('dashboard/day', [ DashboardController::class, 'getCards' ]); -Route::get('dashboard/best-customers', [ DashboardController::class, 'getBestCustomers' ]); -Route::get('dashboard/best-cashiers', [ DashboardController::class, 'getBestCashiers' ]); -Route::get('dashboard/recent-orders', [ DashboardController::class, 'getRecentsOrders' ]); -Route::get('dashboard/weeks', [ DashboardController::class, 'getWeekReports' ]); +Route::get( 'dashboard/day', [ DashboardController::class, 'getCards' ] ); +Route::get( 'dashboard/best-customers', [ DashboardController::class, 'getBestCustomers' ] ); +Route::get( 'dashboard/best-cashiers', [ DashboardController::class, 'getBestCashiers' ] ); +Route::get( 'dashboard/recent-orders', [ DashboardController::class, 'getRecentsOrders' ] ); +Route::get( 'dashboard/weeks', [ DashboardController::class, 'getWeekReports' ] ); diff --git a/routes/api/fields.php b/routes/api/fields.php index 36ec0ae05..1c294cf9a 100644 --- a/routes/api/fields.php +++ b/routes/api/fields.php @@ -3,4 +3,4 @@ use App\Http\Controllers\Dashboard\FieldsController; use Illuminate\Support\Facades\Route; -Route::get('/fields/{resource}/{identifier?}', [ FieldsController::class, 'getFields' ]); +Route::get( '/fields/{resource}/{identifier?}', [ FieldsController::class, 'getFields' ] ); diff --git a/routes/api/forms.php b/routes/api/forms.php index 864ef16bf..0e2fcdf09 100644 --- a/routes/api/forms.php +++ b/routes/api/forms.php @@ -3,5 +3,5 @@ use App\Http\Controllers\Dashboard\FormsController; use Illuminate\Support\Facades\Route; -Route::get('/forms/{resource}/{identifier?}', [ FormsController::class, 'getForm' ]); -Route::post('/forms/{resource}/{identifier?}', [ FormsController::class, 'saveForm' ]); +Route::get( '/forms/{resource}/{identifier?}', [ FormsController::class, 'getForm' ] ); +Route::post( '/forms/{resource}/{identifier?}', [ FormsController::class, 'saveForm' ] ); diff --git a/routes/api/hard-reset.php b/routes/api/hard-reset.php index 8201aefd8..9ee01d014 100644 --- a/routes/api/hard-reset.php +++ b/routes/api/hard-reset.php @@ -3,4 +3,4 @@ use App\Http\Controllers\Dashboard\ResetController; use Illuminate\Support\Facades\Route; -Route::post('hard-reset', [ ResetController::class, 'hardReset' ])->name('ns.hard-reset'); +Route::post( 'hard-reset', [ ResetController::class, 'hardReset' ] )->name( 'ns.hard-reset' ); diff --git a/routes/api/medias.php b/routes/api/medias.php index 62950a053..4120667bb 100644 --- a/routes/api/medias.php +++ b/routes/api/medias.php @@ -3,8 +3,8 @@ use App\Http\Controllers\Dashboard\MediasController; use Illuminate\Support\Facades\Route; -Route::get('medias', [ MediasController::class, 'getMedias' ]); -Route::delete('medias/{id}', [ MediasController::class, 'deleteMedia' ]); -Route::put('medias/{media}', [ MediasController::class, 'updateMedia' ]); -Route::post('medias/bulk-delete/', [ MediasController::class, 'bulkDeleteMedias' ]); -Route::post('medias', [ MediasController::class, 'uploadMedias' ]); +Route::get( 'medias', [ MediasController::class, 'getMedias' ] ); +Route::delete( 'medias/{id}', [ MediasController::class, 'deleteMedia' ] ); +Route::put( 'medias/{media}', [ MediasController::class, 'updateMedia' ] ); +Route::post( 'medias/bulk-delete/', [ MediasController::class, 'bulkDeleteMedias' ] ); +Route::post( 'medias', [ MediasController::class, 'uploadMedias' ] ); diff --git a/routes/api/modules.php b/routes/api/modules.php index 4950e84ce..c21e9ba31 100644 --- a/routes/api/modules.php +++ b/routes/api/modules.php @@ -4,9 +4,9 @@ use App\Http\Controllers\Dashboard\ModulesController; use Illuminate\Support\Facades\Route; -Route::get('modules/{argument?}', [ ModulesController::class, 'getModules' ]); -Route::put('modules/{argument}/disable', [ ModulesController::class, 'disableModule' ]); -Route::put('modules/{argument}/enable', [ ModulesController::class, 'enableModule' ]); -Route::post('modules/{identifier}/migrate', [ ModulesController::class, 'migrate' ]); -Route::delete('modules/{argument}/delete', [ ModulesController::class, 'deleteModule' ]); -Route::post('modules', [ ModulesController::class, 'uploadModule' ])->name(Hook::filter('ns-route-name', 'ns.dashboard.modules-upload-post')); +Route::get( 'modules/{argument?}', [ ModulesController::class, 'getModules' ] ); +Route::put( 'modules/{argument}/disable', [ ModulesController::class, 'disableModule' ] ); +Route::put( 'modules/{argument}/enable', [ ModulesController::class, 'enableModule' ] ); +Route::post( 'modules/{identifier}/migrate', [ ModulesController::class, 'migrate' ] ); +Route::delete( 'modules/{argument}/delete', [ ModulesController::class, 'deleteModule' ] ); +Route::post( 'modules', [ ModulesController::class, 'uploadModule' ] )->name( Hook::filter( 'ns-route-name', 'ns.dashboard.modules-upload-post' ) ); diff --git a/routes/api/notifications.php b/routes/api/notifications.php index cf7f00c73..1a260a769 100644 --- a/routes/api/notifications.php +++ b/routes/api/notifications.php @@ -3,6 +3,6 @@ use App\Http\Controllers\Dashboard\NotificationsController; use Illuminate\Support\Facades\Route; -Route::get('notifications', [ NotificationsController::class, 'getNotifications' ]); -Route::delete('notifications/{id}', [ NotificationsController::class, 'deleteSingleNotification' ])->where([ 'id' => '[0-9]+' ]); -Route::delete('notifications/all', [ NotificationsController::class, 'deletAllNotifications' ]); +Route::get( 'notifications', [ NotificationsController::class, 'getNotifications' ] ); +Route::delete( 'notifications/{id}', [ NotificationsController::class, 'deleteSingleNotification' ] )->where( [ 'id' => '[0-9]+' ] ); +Route::delete( 'notifications/all', [ NotificationsController::class, 'deletAllNotifications' ] ); diff --git a/routes/api/orders.php b/routes/api/orders.php index 3b735c70c..af700330a 100644 --- a/routes/api/orders.php +++ b/routes/api/orders.php @@ -3,30 +3,30 @@ use App\Http\Controllers\Dashboard\OrdersController; use Illuminate\Support\Facades\Route; -Route::get('orders/{id?}', [ OrdersController::class, 'getOrders' ])->where('id', '[0-9]+'); -Route::get('orders/payments', [ OrdersController::class, 'getSupportedPayments' ]); -Route::get('orders/{id}/pos', [ OrdersController::class, 'getPosOrder' ])->where('id', '[0-9]+'); -Route::get('orders/{id}/products', [ OrdersController::class, 'getOrderProducts' ])->where('id', '[0-9]+'); -Route::get('orders/{order}/products/refunded', [ OrdersController::class, 'getOrderProductsRefunded' ])->where('order', '[0-9]+'); -Route::get('orders/{order}/refunds', [ OrdersController::class, 'getOrderRefunds' ])->where('order', '[0-9]+'); -Route::get('orders/{id}/payments', [ OrdersController::class, 'getOrderPayments' ])->where('id', '[0-9]+'); -Route::get('orders/{order}/instalments', [ OrdersController::class, 'getOrderInstalments' ])->where('order', '[0-9]+')->middleware('ns.restrict:nexopos.read.orders-instalments'); -Route::get('orders/{order}/print/{doc?}', [ OrdersController::class, 'printOrder' ])->where('order', '[0-9]+'); -Route::post('orders/{order}/instalments/{instalment}/pay', [ OrdersController::class, 'payInstalment' ])->where('order', '[0-9]+')->middleware('ns.restrict:nexopos.update.orders-instalments'); -Route::post('orders/{order}/void', [ OrdersController::class, 'voidOrder' ])->middleware('ns.restrict:nexopos.void.orders'); -Route::post('orders', [ OrdersController::class, 'create' ]); -Route::post('orders/{id}/products', [ OrdersController::class, 'addProductToOrder' ]); -Route::post('orders/{order}/processing', [ OrdersController::class, 'changeOrderProcessingStatus' ])->middleware('ns.restrict:nexopos.update.orders'); -Route::post('orders/{order}/delivery', [ OrdersController::class, 'changeOrderDeliveryStatus' ])->middleware('ns.restrict:nexopos.update.orders'); -Route::post('orders/{order}/payments', [ OrdersController::class, 'addPayment' ])->middleware('ns.restrict:nexopos.make-payment.orders'); -Route::post('orders/{order}/refund', [ OrdersController::class, 'makeOrderRefund' ]) - ->middleware('ns.restrict:nexopos.refund.orders'); -Route::post('orders/{order}/instalments', [ OrdersController::class, 'createInstalment' ])->middleware('ns.restrict:nexopos.create.orders-instalments'); +Route::get( 'orders/{id?}', [ OrdersController::class, 'getOrders' ] )->where( 'id', '[0-9]+' ); +Route::get( 'orders/payments', [ OrdersController::class, 'getSupportedPayments' ] ); +Route::get( 'orders/{id}/pos', [ OrdersController::class, 'getPosOrder' ] )->where( 'id', '[0-9]+' ); +Route::get( 'orders/{id}/products', [ OrdersController::class, 'getOrderProducts' ] )->where( 'id', '[0-9]+' ); +Route::get( 'orders/{order}/products/refunded', [ OrdersController::class, 'getOrderProductsRefunded' ] )->where( 'order', '[0-9]+' ); +Route::get( 'orders/{order}/refunds', [ OrdersController::class, 'getOrderRefunds' ] )->where( 'order', '[0-9]+' ); +Route::get( 'orders/{id}/payments', [ OrdersController::class, 'getOrderPayments' ] )->where( 'id', '[0-9]+' ); +Route::get( 'orders/{order}/instalments', [ OrdersController::class, 'getOrderInstalments' ] )->where( 'order', '[0-9]+' )->middleware( 'ns.restrict:nexopos.read.orders-instalments' ); +Route::get( 'orders/{order}/print/{doc?}', [ OrdersController::class, 'printOrder' ] )->where( 'order', '[0-9]+' ); +Route::post( 'orders/{order}/instalments/{instalment}/pay', [ OrdersController::class, 'payInstalment' ] )->where( 'order', '[0-9]+' )->middleware( 'ns.restrict:nexopos.update.orders-instalments' ); +Route::post( 'orders/{order}/void', [ OrdersController::class, 'voidOrder' ] )->middleware( 'ns.restrict:nexopos.void.orders' ); +Route::post( 'orders', [ OrdersController::class, 'create' ] ); +Route::post( 'orders/{id}/products', [ OrdersController::class, 'addProductToOrder' ] ); +Route::post( 'orders/{order}/processing', [ OrdersController::class, 'changeOrderProcessingStatus' ] )->middleware( 'ns.restrict:nexopos.update.orders' ); +Route::post( 'orders/{order}/delivery', [ OrdersController::class, 'changeOrderDeliveryStatus' ] )->middleware( 'ns.restrict:nexopos.update.orders' ); +Route::post( 'orders/{order}/payments', [ OrdersController::class, 'addPayment' ] )->middleware( 'ns.restrict:nexopos.make-payment.orders' ); +Route::post( 'orders/{order}/refund', [ OrdersController::class, 'makeOrderRefund' ] ) + ->middleware( 'ns.restrict:nexopos.refund.orders' ); +Route::post( 'orders/{order}/instalments', [ OrdersController::class, 'createInstalment' ] )->middleware( 'ns.restrict:nexopos.create.orders-instalments' ); -Route::put('orders/{order}/instalments/{instalment}', [ OrdersController::class, 'updateInstalment' ])->middleware('ns.restrict:nexopos.update.orders-instalments'); -Route::put('orders/{id}', [ OrdersController::class, 'updateOrder' ])->middleware('ns.restrict:nexopos.update.orders'); +Route::put( 'orders/{order}/instalments/{instalment}', [ OrdersController::class, 'updateInstalment' ] )->middleware( 'ns.restrict:nexopos.update.orders-instalments' ); +Route::put( 'orders/{id}', [ OrdersController::class, 'updateOrder' ] )->middleware( 'ns.restrict:nexopos.update.orders' ); -Route::delete('orders/{order}/instalments/{instalment}', [ OrdersController::class, 'deleteInstalment' ]) - ->middleware('ns.restrict:nexopos.delete.orders-instalments'); -Route::delete('orders/{order}', [ OrdersController::class, 'deleteOrder' ])->middleware('ns.restrict:nexopos.delete.orders'); -Route::delete('orders/{id}/products/{product_id}', [ OrdersController::class, 'deleteOrderProduct' ])->where('id', '[0-9]+'); +Route::delete( 'orders/{order}/instalments/{instalment}', [ OrdersController::class, 'deleteInstalment' ] ) + ->middleware( 'ns.restrict:nexopos.delete.orders-instalments' ); +Route::delete( 'orders/{order}', [ OrdersController::class, 'deleteOrder' ] )->middleware( 'ns.restrict:nexopos.delete.orders' ); +Route::delete( 'orders/{id}/products/{product_id}', [ OrdersController::class, 'deleteOrderProduct' ] )->where( 'id', '[0-9]+' ); diff --git a/routes/api/procurements.php b/routes/api/procurements.php index eb7b33d4a..f9d423700 100644 --- a/routes/api/procurements.php +++ b/routes/api/procurements.php @@ -3,21 +3,21 @@ use App\Http\Controllers\Dashboard\ProcurementController; use Illuminate\Support\Facades\Route; -Route::get('procurements/{id?}', [ ProcurementController::class, 'list' ])->where('id', '[0-9]+'); -Route::get('procurements/{id}/products', [ ProcurementController::class, 'procurementProducts' ]); -Route::get('procurements/{id}/reset', [ ProcurementController::class, 'resetProcurement' ]); -Route::get('procurements/{id}/refresh', [ ProcurementController::class, 'refreshProcurement' ]); -Route::get('procurements/{procurement}/set-as-paid', [ ProcurementController::class, 'setAsPaid' ]); +Route::get( 'procurements/{id?}', [ ProcurementController::class, 'list' ] )->where( 'id', '[0-9]+' ); +Route::get( 'procurements/{id}/products', [ ProcurementController::class, 'procurementProducts' ] ); +Route::get( 'procurements/{id}/reset', [ ProcurementController::class, 'resetProcurement' ] ); +Route::get( 'procurements/{id}/refresh', [ ProcurementController::class, 'refreshProcurement' ] ); +Route::get( 'procurements/{procurement}/set-as-paid', [ ProcurementController::class, 'setAsPaid' ] ); -Route::post('procurements/{id}/products', [ ProcurementController::class, 'procure' ]); -Route::post('procurements', [ ProcurementController::class, 'create' ]); -Route::post('procurements/products/search-procurement-product', [ ProcurementController::class, 'searchProcurementProduct' ]); -Route::post('procurements/products/search-product', [ ProcurementController::class, 'searchProduct' ]); +Route::post( 'procurements/{id}/products', [ ProcurementController::class, 'procure' ] ); +Route::post( 'procurements', [ ProcurementController::class, 'create' ] ); +Route::post( 'procurements/products/search-procurement-product', [ ProcurementController::class, 'searchProcurementProduct' ] ); +Route::post( 'procurements/products/search-product', [ ProcurementController::class, 'searchProduct' ] ); -Route::put('procurements/{procurement}', [ ProcurementController::class, 'edit' ]); -Route::put('procurements/{procurement}/change-payment-status', [ ProcurementController::class, 'changePaymentStatus' ]); -Route::put('procurements/{id}/products/{product_id}', [ ProcurementController::class, 'editProduct' ]); -Route::put('procurements/{id}/products', [ ProcurementController::class, 'bulkUpdateProducts' ]); +Route::put( 'procurements/{procurement}', [ ProcurementController::class, 'edit' ] ); +Route::put( 'procurements/{procurement}/change-payment-status', [ ProcurementController::class, 'changePaymentStatus' ] ); +Route::put( 'procurements/{id}/products/{product_id}', [ ProcurementController::class, 'editProduct' ] ); +Route::put( 'procurements/{id}/products', [ ProcurementController::class, 'bulkUpdateProducts' ] ); -Route::delete('procurements/{id}/products/{product_id}', [ ProcurementController::class, 'deleteProcurementProduct' ]); -Route::delete('procurements/{id}', [ ProcurementController::class, 'deleteProcurement' ])->where('id', '[0-9]+'); +Route::delete( 'procurements/{id}/products/{product_id}', [ ProcurementController::class, 'deleteProcurementProduct' ] ); +Route::delete( 'procurements/{id}', [ ProcurementController::class, 'deleteProcurement' ] )->where( 'id', '[0-9]+' ); diff --git a/routes/api/products.php b/routes/api/products.php index eadef7d76..37b9bcd79 100644 --- a/routes/api/products.php +++ b/routes/api/products.php @@ -3,29 +3,30 @@ use App\Http\Controllers\Dashboard\ProductsController; use Illuminate\Support\Facades\Route; -Route::get('products', [ ProductsController::class, 'getProduts' ]); -Route::get('products/all/variations', [ ProductsController::class, 'getAllVariations' ]); -Route::get('products/{identifier}', [ ProductsController::class, 'singleProduct' ]); -Route::get('products/{identifier}/variations', [ ProductsController::class, 'getProductVariations' ]); -Route::get('products/{identifier}/refresh-prices', [ ProductsController::class, 'refreshPrices' ]); -Route::get('products/{identifier}/reset', [ ProductsController::class, 'reset' ]); -Route::get('products/{identifier}/history', [ ProductsController::class, 'history' ]); -Route::get('products/{identifier}/units', [ ProductsController::class, 'units' ]); -Route::get('products/{product}/units/{unit}/quantity', [ ProductsController::class, 'getUnitQuantity' ]); -Route::get('products/{product}/units/quantities', [ ProductsController::class, 'getUnitQuantities' ]); -Route::get('products/{product}/procurements', [ ProductsController::class, 'getProcuredProducts' ]); -Route::get('products/search/using-barcode/{product}', [ ProductsController::class, 'searchUsingArgument' ]); +Route::get( 'products', [ ProductsController::class, 'getProduts' ] ); +Route::get( 'products/all/variations', [ ProductsController::class, 'getAllVariations' ] ); +Route::get( 'products/{identifier}', [ ProductsController::class, 'singleProduct' ] ); +Route::get( 'products/{identifier}/variations', [ ProductsController::class, 'getProductVariations' ] ); +Route::get( 'products/{identifier}/refresh-prices', [ ProductsController::class, 'refreshPrices' ] ); +Route::get( 'products/{identifier}/reset', [ ProductsController::class, 'reset' ] ); +Route::get( 'products/{identifier}/history', [ ProductsController::class, 'history' ] ); +Route::get( 'products/{identifier}/units', [ ProductsController::class, 'units' ] ); +Route::get( 'products/{product}/units/{unit}/quantity', [ ProductsController::class, 'getUnitQuantity' ] ); +Route::get( 'products/{product}/units/quantities', [ ProductsController::class, 'getUnitQuantities' ] ); +Route::get( 'products/{product}/procurements', [ ProductsController::class, 'getProcuredProducts' ] ); +Route::get( 'products/search/using-barcode/{product}', [ ProductsController::class, 'searchUsingArgument' ] ); -Route::delete('products/{identifier}', [ ProductsController::class, 'deleteProduct' ]); -Route::delete('products/units/quantity/{unitQuantity}', [ ProductsController::class, 'deleteUnitQuantity' ]); -Route::delete('products/all/variations', [ ProductsController::class, 'deleteAllVariations' ]); -Route::delete('products/{identifier}/variations/{variation_id}', [ ProductsController::class, 'deleteSingleVariation' ]); -Route::delete('products', [ ProductsController::class, 'deleteAllProducts' ]); +Route::delete( 'products/{identifier}', [ ProductsController::class, 'deleteProduct' ] ); +Route::delete( 'products/units/quantity/{unitQuantity}', [ ProductsController::class, 'deleteUnitQuantity' ] ); +Route::delete( 'products/all/variations', [ ProductsController::class, 'deleteAllVariations' ] ); +Route::delete( 'products/{identifier}/variations/{variation_id}', [ ProductsController::class, 'deleteSingleVariation' ] ); +Route::delete( 'products', [ ProductsController::class, 'deleteAllProducts' ] ); -Route::post('products', [ ProductsController::class, 'saveProduct' ]); -Route::post('products/search', [ ProductsController::class, 'searchProduct' ]); -Route::post('products/adjustments', [ ProductsController::class, 'createAdjustment' ]); -Route::post('products/{identifier}/variations/{variation_id}', [ ProductsController::class, 'createSingleVariation' ]); +Route::post( 'products', [ ProductsController::class, 'saveProduct' ] ); +Route::post( 'products/search', [ ProductsController::class, 'searchProduct' ] ); +Route::post( 'products/adjustments', [ ProductsController::class, 'createAdjustment' ] ); +Route::post( 'products/{identifier}/variations/{variation_id}', [ ProductsController::class, 'createSingleVariation' ] ); +Route::post( 'products/{product}/units/conversion', [ ProductsController::class, 'convertUnits' ] ); -Route::put('products/{identifier}/variations/{variation_id}', [ ProductsController::class, 'editSingleVariation' ]); -Route::put('products/{product}', [ ProductsController::class, 'updateProduct' ]); +Route::put( 'products/{identifier}/variations/{variation_id}', [ ProductsController::class, 'editSingleVariation' ] ); +Route::put( 'products/{product}', [ ProductsController::class, 'updateProduct' ] ); diff --git a/routes/api/providers.php b/routes/api/providers.php index 82f54eb1a..eb56cf86c 100644 --- a/routes/api/providers.php +++ b/routes/api/providers.php @@ -3,9 +3,9 @@ use App\Http\Controllers\Dashboard\ProvidersController; use Illuminate\Support\Facades\Route; -Route::get('providers', [ ProvidersController::class, 'list' ]); -Route::post('providers', [ ProvidersController::class, 'create' ]); -Route::put('providers/{id}', [ ProvidersController::class, 'edit' ]); -Route::get('providers/{id}/procurements', [ ProvidersController::class, 'providerProcurements' ]); -Route::get('providers/{id}', [ ProvidersController::class, 'getSingleProvider' ]); -Route::delete('providers/{id}', [ ProvidersController::class, 'deleteProvider' ]); +Route::get( 'providers', [ ProvidersController::class, 'list' ] ); +Route::post( 'providers', [ ProvidersController::class, 'create' ] ); +Route::put( 'providers/{id}', [ ProvidersController::class, 'edit' ] ); +Route::get( 'providers/{id}/procurements', [ ProvidersController::class, 'providerProcurements' ] ); +Route::get( 'providers/{id}', [ ProvidersController::class, 'getSingleProvider' ] ); +Route::delete( 'providers/{id}', [ ProvidersController::class, 'deleteProvider' ] ); diff --git a/routes/api/registers.php b/routes/api/registers.php index 376b74e7e..778af8b40 100644 --- a/routes/api/registers.php +++ b/routes/api/registers.php @@ -3,10 +3,10 @@ use App\Http\Controllers\Dashboard\CashRegistersController; use Illuminate\Support\Facades\Route; -Route::get('cash-registers/{id?}', [ CashRegistersController::class, 'getRegisters' ])->where([ 'id' => '[0-9]+' ]); -Route::get('cash-registers/used', [ CashRegistersController::class, 'getUsedRegister' ]); -Route::post('cash-registers/{action}/{register}', [ CashRegistersController::class, 'performAction' ]); -Route::get('cash-registers/session-history/{register}', [ CashRegistersController::class, 'getSessionHistory' ]); +Route::get( 'cash-registers/{id?}', [ CashRegistersController::class, 'getRegisters' ] )->where( [ 'id' => '[0-9]+' ] ); +Route::get( 'cash-registers/used', [ CashRegistersController::class, 'getUsedRegister' ] ); +Route::post( 'cash-registers/{action}/{register}', [ CashRegistersController::class, 'performAction' ] ); +Route::get( 'cash-registers/session-history/{register}', [ CashRegistersController::class, 'getSessionHistory' ] ); // Route::get( 'registers/{id}/history', [ CashRegistersController::class, 'getHistory' ]); // Route::get( 'registers/{id}/orders', [ CashRegistersController::class, 'getRegisterOrders' ]); // Route::put( 'registers/{id}', [ CashRegistersController::class, 'editRegister' ]); diff --git a/routes/api/reports.php b/routes/api/reports.php index cd298da85..dda0b00c6 100644 --- a/routes/api/reports.php +++ b/routes/api/reports.php @@ -3,17 +3,17 @@ use App\Http\Controllers\Dashboard\ReportsController; use Illuminate\Support\Facades\Route; -Route::post('reports/sale-report', [ ReportsController::class, 'getSaleReport' ]); -Route::post('reports/sold-stock-report', [ ReportsController::class, 'getSoldStockReport' ]); -Route::post('reports/profit-report', [ ReportsController::class, 'getProfit' ]); -Route::post('reports/transactions', [ ReportsController::class, 'getTransactions' ]); -Route::post('reports/annual-report', [ ReportsController::class, 'getAnnualReport' ]); -Route::post('reports/payment-types', [ ReportsController::class, 'getPaymentTypes' ]); -Route::post('reports/products-report', [ ReportsController::class, 'getProductsReport' ]); -Route::post('reports/compute/{type}', [ ReportsController::class, 'computeReport' ]); -Route::get('reports/cashier-report', [ ReportsController::class, 'getMyReport' ]); -Route::post('reports/low-stock', [ ReportsController::class, 'getLowStock' ]); -Route::post('reports/stock-report', [ ReportsController::class, 'getStockReport' ]); -Route::post('reports/product-history-combined', [ ReportsController::class, 'getProductHistoryCombined' ]); -Route::post('reports/customers-statement/{customer}', [ ReportsController::class, 'getCustomerStatement' ]); -Route::get('reports/compute-combined-report', [ ReportsController::class, 'computeCombinedReport' ]); +Route::post( 'reports/sale-report', [ ReportsController::class, 'getSaleReport' ] ); +Route::post( 'reports/sold-stock-report', [ ReportsController::class, 'getSoldStockReport' ] ); +Route::post( 'reports/profit-report', [ ReportsController::class, 'getProfit' ] ); +Route::post( 'reports/transactions', [ ReportsController::class, 'getTransactions' ] ); +Route::post( 'reports/annual-report', [ ReportsController::class, 'getAnnualReport' ] ); +Route::post( 'reports/payment-types', [ ReportsController::class, 'getPaymentTypes' ] ); +Route::post( 'reports/products-report', [ ReportsController::class, 'getProductsReport' ] ); +Route::post( 'reports/compute/{type}', [ ReportsController::class, 'computeReport' ] ); +Route::get( 'reports/cashier-report', [ ReportsController::class, 'getMyReport' ] ); +Route::post( 'reports/low-stock', [ ReportsController::class, 'getLowStock' ] ); +Route::post( 'reports/stock-report', [ ReportsController::class, 'getStockReport' ] ); +Route::post( 'reports/product-history-combined', [ ReportsController::class, 'getProductHistoryCombined' ] ); +Route::post( 'reports/customers-statement/{customer}', [ ReportsController::class, 'getCustomerStatement' ] ); +Route::get( 'reports/compute-combined-report', [ ReportsController::class, 'computeCombinedReport' ] ); diff --git a/routes/api/reset.php b/routes/api/reset.php index 0fcbc7731..d5fe4c3a0 100644 --- a/routes/api/reset.php +++ b/routes/api/reset.php @@ -3,4 +3,4 @@ use App\Http\Controllers\Dashboard\ResetController; use Illuminate\Support\Facades\Route; -Route::post('reset', [ ResetController::class, 'truncateWithDemo' ])->name('ns.reset'); +Route::post( 'reset', [ ResetController::class, 'truncateWithDemo' ] )->name( 'ns.reset' ); diff --git a/routes/api/rewards.php b/routes/api/rewards.php index c7ae5d6c1..6f5f2f11f 100644 --- a/routes/api/rewards.php +++ b/routes/api/rewards.php @@ -3,8 +3,8 @@ use App\Http\Controllers\Dashboard\RewardsSystemController; use Illuminate\Support\Facades\Route; -Route::get('reward-system/{id}/rules', [ RewardsSystemController::class, 'getRules' ]); -Route::get('reward-system/{id}/coupons', [ RewardsSystemController::class, 'getRegisterOrders' ]); -Route::post('reward-system', [ RewardsSystemController::class, 'create' ]); -Route::delete('reward-system/{id}', [ RewardsSystemController::class, 'deleteRewardSystem' ]); -Route::put('reward-system/{id}', [ RewardsSystemController::class, 'editRewardSystem' ]); +Route::get( 'reward-system/{id}/rules', [ RewardsSystemController::class, 'getRules' ] ); +Route::get( 'reward-system/{id}/coupons', [ RewardsSystemController::class, 'getRegisterOrders' ] ); +Route::post( 'reward-system', [ RewardsSystemController::class, 'create' ] ); +Route::delete( 'reward-system/{id}', [ RewardsSystemController::class, 'deleteRewardSystem' ] ); +Route::put( 'reward-system/{id}', [ RewardsSystemController::class, 'editRewardSystem' ] ); diff --git a/routes/api/settings.php b/routes/api/settings.php index b5654f9e6..aba3da539 100644 --- a/routes/api/settings.php +++ b/routes/api/settings.php @@ -3,5 +3,5 @@ use App\Http\Controllers\Dashboard\SettingsController; use Illuminate\Support\Facades\Route; -Route::get('/settings/{identifier}', [ SettingsController::class, 'getSettingsForm' ]); -Route::post('/settings/{identifier}', [ SettingsController::class, 'saveSettingsForm' ]); +Route::get( '/settings/{identifier}', [ SettingsController::class, 'getSettingsForm' ] ); +Route::post( '/settings/{identifier}', [ SettingsController::class, 'saveSettingsForm' ] ); diff --git a/routes/api/taxes.php b/routes/api/taxes.php index f17053604..7e609f95a 100644 --- a/routes/api/taxes.php +++ b/routes/api/taxes.php @@ -3,9 +3,9 @@ use App\Http\Controllers\Dashboard\TaxesController; use Illuminate\Support\Facades\Route; -Route::post('taxes', [ TaxesController::class, 'post' ]); -Route::put('taxes/{id}', [ TaxesController::class, 'put' ]); -Route::delete('taxes/{id}', [ TaxesController::class, 'delete' ]); +Route::post( 'taxes', [ TaxesController::class, 'post' ] ); +Route::put( 'taxes/{id}', [ TaxesController::class, 'put' ] ); +Route::delete( 'taxes/{id}', [ TaxesController::class, 'delete' ] ); -Route::get('taxes/{id?}', [ TaxesController::class, 'get' ])->where([ 'id' => '[0-9]+' ]); -Route::get('taxes/groups/{id?}', [ TaxesController::class, 'getTaxGroup' ]); +Route::get( 'taxes/{id?}', [ TaxesController::class, 'get' ] )->where( [ 'id' => '[0-9]+' ] ); +Route::get( 'taxes/groups/{id?}', [ TaxesController::class, 'getTaxGroup' ] ); diff --git a/routes/api/transactions.php b/routes/api/transactions.php index a9f8a8961..2ff0adea1 100644 --- a/routes/api/transactions.php +++ b/routes/api/transactions.php @@ -3,14 +3,14 @@ use App\Http\Controllers\Dashboard\TransactionController; use Illuminate\Support\Facades\Route; -Route::get('transactions/{id?}', [ TransactionController::class, 'get' ])->where('id', '[0-9]+'); -Route::get('transactions/trigger/{transaction?}', [ TransactionController::class, 'triggerTransaction' ])->where('id', '[0-9]+'); -Route::get('transactions/configurations/{transaction?}', [ TransactionController::class, 'getConfigurations' ]); -Route::get('transactions-accounts/{id?}', [ TransactionController::class, 'getExpensesCategories' ])->where('id', '[0-9]+'); -Route::get('transactions-accounts/{id}/history', [ TransactionController::class, 'getTransactionAccountsHistory' ]); -Route::post('transactions', [ TransactionController::class, 'post' ]); -Route::post('transactions-accounts', [ TransactionController::class, 'postTransactionsAccount' ]); -Route::put('transactions/{id}', [ TransactionController::class, 'put' ])->where('id', '[0-9]+'); -Route::put('transactions-accounts/{id}', [ TransactionController::class, 'putTransactionAccount' ])->where('id', '[0-9]+'); -Route::delete('transactions/{id}', [ TransactionController::class, 'delete' ])->where('id', '[0-9]+'); -Route::delete('transactions-accounts/{id}', [ TransactionController::class, 'deleteAccount' ])->where('id', '[0-9]+'); +Route::get( 'transactions/{id?}', [ TransactionController::class, 'get' ] )->where( 'id', '[0-9]+' ); +Route::get( 'transactions/trigger/{transaction?}', [ TransactionController::class, 'triggerTransaction' ] )->where( 'id', '[0-9]+' ); +Route::get( 'transactions/configurations/{transaction?}', [ TransactionController::class, 'getConfigurations' ] ); +Route::get( 'transactions-accounts/{id?}', [ TransactionController::class, 'getExpensesCategories' ] )->where( 'id', '[0-9]+' ); +Route::get( 'transactions-accounts/{id}/history', [ TransactionController::class, 'getTransactionAccountsHistory' ] ); +Route::post( 'transactions', [ TransactionController::class, 'post' ] ); +Route::post( 'transactions-accounts', [ TransactionController::class, 'postTransactionsAccount' ] ); +Route::put( 'transactions/{id}', [ TransactionController::class, 'put' ] )->where( 'id', '[0-9]+' ); +Route::put( 'transactions-accounts/{id}', [ TransactionController::class, 'putTransactionAccount' ] )->where( 'id', '[0-9]+' ); +Route::delete( 'transactions/{id}', [ TransactionController::class, 'delete' ] )->where( 'id', '[0-9]+' ); +Route::delete( 'transactions-accounts/{id}', [ TransactionController::class, 'deleteAccount' ] )->where( 'id', '[0-9]+' ); diff --git a/routes/api/units.php b/routes/api/units.php index 8dbd0af3e..bd41e9970 100644 --- a/routes/api/units.php +++ b/routes/api/units.php @@ -3,18 +3,18 @@ use App\Http\Controllers\Dashboard\UnitsController; use Illuminate\Support\Facades\Route; -Route::get('units/{id?}', [ UnitsController::class, 'get' ]); -Route::get('units/{id}/group', [ UnitsController::class, 'getUnitParentGroup' ]); -Route::get('units/{id}/siblings', [ UnitsController::class, 'getSiblingUnits' ]); -Route::get('units-groups/{id?}', [ UnitsController::class, 'getGroups' ]); +Route::get( 'units/{id?}', [ UnitsController::class, 'get' ] ); +Route::get( 'units/{id}/group', [ UnitsController::class, 'getUnitParentGroup' ] ); +Route::get( 'units/{id}/siblings', [ UnitsController::class, 'getSiblingUnits' ] ); +Route::get( 'units-groups/{id?}', [ UnitsController::class, 'getGroups' ] ); -Route::post('units', [ UnitsController::class, 'postUnit' ]); -Route::post('units-groups', [ UnitsController::class, 'postGroup' ]); +Route::post( 'units', [ UnitsController::class, 'postUnit' ] ); +Route::post( 'units-groups', [ UnitsController::class, 'postGroup' ] ); -Route::delete('units/{id}', [ UnitsController::class, 'deleteUnit' ]); -Route::delete('units-groups/{id}', [ UnitsController::class, 'deleteUnitGroup' ]); +Route::delete( 'units/{id}', [ UnitsController::class, 'deleteUnit' ] ); +Route::delete( 'units-groups/{id}', [ UnitsController::class, 'deleteUnitGroup' ] ); -Route::put('units-groups/{id}', [ UnitsController::class, 'putGroup' ]); -Route::put('units/{id}', [ UnitsController::class, 'putUnit' ]); +Route::put( 'units-groups/{id}', [ UnitsController::class, 'putGroup' ] ); +Route::put( 'units/{id}', [ UnitsController::class, 'putUnit' ] ); -Route::get('units-groups/{id}/units', [ UnitsController::class, 'getGroupUnits' ]); +Route::get( 'units-groups/{id}/units', [ UnitsController::class, 'getGroupUnits' ] ); diff --git a/routes/api/update.php b/routes/api/update.php index b0f66dba9..1d6a02786 100644 --- a/routes/api/update.php +++ b/routes/api/update.php @@ -5,5 +5,5 @@ use App\Http\Middleware\CheckMigrationStatus; use Illuminate\Support\Facades\Route; -Route::post('update', [ UpdateController::class, 'runMigration' ]) - ->withoutMiddleware([ Authenticate::class, CheckMigrationStatus::class ]); +Route::post( 'update', [ UpdateController::class, 'runMigration' ] ) + ->withoutMiddleware( [ Authenticate::class, CheckMigrationStatus::class ] ); diff --git a/routes/api/users.php b/routes/api/users.php index c3626c36d..2694d2dd8 100644 --- a/routes/api/users.php +++ b/routes/api/users.php @@ -3,12 +3,12 @@ use App\Http\Controllers\Dashboard\UsersController; use Illuminate\Support\Facades\Route; -Route::get('/users/roles', [ UsersController::class, 'getRoles' ]); -Route::get('/users', [ UsersController::class, 'getUsers' ]); -Route::put('/users/roles', [ UsersController::class, 'updateRole' ]); -Route::get('/users/roles/{role}/clone', [ UsersController::class, 'cloneRole' ]); -Route::get('/users/permissions', [ UsersController::class, 'getPermissions' ]); -Route::post('/users/widgets', [ UsersController::class, 'configureWidgets' ]); -Route::post('/users/create-token', [ UsersController::class, 'createToken' ]); -Route::get('/users/tokens', [ UsersController::class, 'getTokens' ]); -Route::delete('/users/tokens/{id}', [ UsersController::class, 'deleteToken' ]); +Route::get( '/users/roles', [ UsersController::class, 'getRoles' ] ); +Route::get( '/users', [ UsersController::class, 'getUsers' ] ); +Route::put( '/users/roles', [ UsersController::class, 'updateRole' ] ); +Route::get( '/users/roles/{role}/clone', [ UsersController::class, 'cloneRole' ] ); +Route::get( '/users/permissions', [ UsersController::class, 'getPermissions' ] ); +Route::post( '/users/widgets', [ UsersController::class, 'configureWidgets' ] ); +Route::post( '/users/create-token', [ UsersController::class, 'createToken' ] ); +Route::get( '/users/tokens', [ UsersController::class, 'getTokens' ] ); +Route::delete( '/users/tokens/{id}', [ UsersController::class, 'deleteToken' ] ); diff --git a/routes/authenticate.php b/routes/authenticate.php index b43266442..fcfdbc400 100644 --- a/routes/authenticate.php +++ b/routes/authenticate.php @@ -6,32 +6,32 @@ use App\Http\Middleware\SanitizePostFieldsMiddleware; use Illuminate\Support\Facades\Route; -Route::get('/sign-in', [ AuthController::class, 'signIn' ])->name(ns()->routeName('ns.login')); -Route::get('/auth/activate/{user}/{token}', [ AuthController::class, 'activateAccount' ])->name(ns()->routeName('ns.activate-account')); -Route::get('/sign-up', [ AuthController::class, 'signUp' ])->name(ns()->routeName('ns.register')); -Route::get('/new-password/{user}/{token}', [ AuthController::class, 'newPassword' ])->name(ns()->routeName('ns.new-password')); -Route::get('/sign-out', [ AuthController::class, 'signOut' ])->name(ns()->routeName('ns.logout')); -Route::post('/auth/sign-in', [ AuthController::class, 'postSignIn' ])->name(ns()->routeName('ns.login.post')); +Route::get( '/sign-in', [ AuthController::class, 'signIn' ] )->name( ns()->routeName( 'ns.login' ) ); +Route::get( '/auth/activate/{user}/{token}', [ AuthController::class, 'activateAccount' ] )->name( ns()->routeName( 'ns.activate-account' ) ); +Route::get( '/sign-up', [ AuthController::class, 'signUp' ] )->name( ns()->routeName( 'ns.register' ) ); +Route::get( '/new-password/{user}/{token}', [ AuthController::class, 'newPassword' ] )->name( ns()->routeName( 'ns.new-password' ) ); +Route::get( '/sign-out', [ AuthController::class, 'signOut' ] )->name( ns()->routeName( 'ns.logout' ) ); +Route::post( '/auth/sign-in', [ AuthController::class, 'postSignIn' ] )->name( ns()->routeName( 'ns.login.post' ) ); /** * should protect access with * the registration is explictely disabled */ -Route::middleware([ +Route::middleware( [ RegistrationMiddleware::class, SanitizePostFieldsMiddleware::class, -])->group(function () { - Route::post('/auth/sign-up', [ AuthController::class, 'postSignUp' ])->name(ns()->routeName('ns.register.post')); -}); +] )->group( function () { + Route::post( '/auth/sign-up', [ AuthController::class, 'postSignUp' ] )->name( ns()->routeName( 'ns.register.post' ) ); +} ); /** * Should protect recovery when the * recovery is explicitly disabled */ -Route::middleware([ +Route::middleware( [ PasswordRecoveryMiddleware::class, -])->group(function () { - Route::get('/password-lost', [ AuthController::class, 'passwordLost' ])->name(ns()->routeName('ns.password-lost')); - Route::post('/auth/password-lost', [ AuthController::class, 'postPasswordLost' ])->name(ns()->routeName('ns.password-lost.post')); - Route::post('/auth/new-password/{user}/{token}', [ AuthController::class, 'postNewPassword' ])->name(ns()->routeName('ns.post.new-password')); -}); +] )->group( function () { + Route::get( '/password-lost', [ AuthController::class, 'passwordLost' ] )->name( ns()->routeName( 'ns.password-lost' ) ); + Route::post( '/auth/password-lost', [ AuthController::class, 'postPasswordLost' ] )->name( ns()->routeName( 'ns.password-lost.post' ) ); + Route::post( '/auth/new-password/{user}/{token}', [ AuthController::class, 'postNewPassword' ] )->name( ns()->routeName( 'ns.post.new-password' ) ); +} ); diff --git a/routes/channels.php b/routes/channels.php index 3b50a3199..9b4f99004 100644 --- a/routes/channels.php +++ b/routes/channels.php @@ -14,4 +14,4 @@ | */ -Broadcast::channel('ns.private-channel', PrivateChannel::class); +Broadcast::channel( 'ns.private-channel', PrivateChannel::class ); diff --git a/routes/console.php b/routes/console.php index da55196d4..1a41d6998 100644 --- a/routes/console.php +++ b/routes/console.php @@ -14,6 +14,6 @@ | */ -Artisan::command('inspire', function () { - $this->comment(Inspiring::quote()); -})->describe('Display an inspiring quote'); +Artisan::command( 'inspire', function () { + $this->comment( Inspiring::quote() ); +} )->describe( 'Display an inspiring quote' ); diff --git a/routes/debug.php b/routes/debug.php index 4c2277912..99412e447 100644 --- a/routes/debug.php +++ b/routes/debug.php @@ -4,21 +4,21 @@ use Illuminate\Routing\Route as RoutingRoute; use Illuminate\Support\Facades\Route; -if (env('APP_DEBUG')) { - Route::get('/routes', function () { - $values = collect(array_values((array) app('router')->getRoutes())[1])->map(function (RoutingRoute $route) { +if ( env( 'APP_DEBUG' ) ) { + Route::get( '/routes', function () { + $values = collect( array_values( (array) app( 'router' )->getRoutes() )[1] )->map( function ( RoutingRoute $route ) { return [ 'domain' => $route->getDomain(), 'uri' => $route->uri(), - 'methods' => collect($route->methods())->join(', '), + 'methods' => collect( $route->methods() )->join( ', ' ), 'name' => $route->getName(), ]; - })->values(); + } )->values(); - return ( new ArrayToTextTable($values->toArray()) )->render(); - }); + return ( new ArrayToTextTable( $values->toArray() ) )->render(); + } ); - Route::get('/exceptions/{class}', function ($class) { + Route::get( '/exceptions/{class}', function ( $class ) { $exceptions = [ \App\Exceptions\CoreException::class, \App\Exceptions\CoreVersionMismatchException::class, @@ -31,10 +31,10 @@ \App\Exceptions\ValidationException::class, ]; - if (in_array($class, $exceptions)) { + if ( in_array( $class, $exceptions ) ) { throw new $class; } - return abort(404, 'Exception not found.'); - }); + return abort( 404, 'Exception not found.' ); + } ); } diff --git a/routes/intermediate.php b/routes/intermediate.php index fbb60cb7a..e16091d84 100644 --- a/routes/intermediate.php +++ b/routes/intermediate.php @@ -4,17 +4,17 @@ */ use Illuminate\Support\Facades\Route; -Route::get('/intermediate/{route}/{from}', function ($route, $from) { +Route::get( '/intermediate/{route}/{from}', function ( $route, $from ) { $message = null; - switch ($from) { + switch ( $from ) { case 'ns.password-lost': - $message = __('The recovery email has been send to your inbox.'); + $message = __( 'The recovery email has been send to your inbox.' ); break; case 'ns.password-updated': - $message = __('Your password has been successfully updated. You can login with your new password now.'); + $message = __( 'Your password has been successfully updated. You can login with your new password now.' ); break; } - return redirect(route($route))->with('message', $message); -})->name('ns.intermediate'); + return redirect( route( $route ) )->with( 'message', $message ); +} )->name( 'ns.intermediate' ); diff --git a/routes/nexopos.php b/routes/nexopos.php index 50f0ee6aa..0c8377120 100644 --- a/routes/nexopos.php +++ b/routes/nexopos.php @@ -3,17 +3,17 @@ use App\Http\Controllers\DashboardController; use Illuminate\Support\Facades\Route; -Route::get('', [ DashboardController::class, 'home' ])->name(ns()->routeName('ns.dashboard.home')); +Route::get( '', [ DashboardController::class, 'home' ] )->name( ns()->routeName( 'ns.dashboard.home' ) ); -include dirname(__FILE__) . '/web/orders.php'; -include dirname(__FILE__) . '/web/medias.php'; -include dirname(__FILE__) . '/web/customers.php'; -include dirname(__FILE__) . '/web/cash-registers.php'; -include dirname(__FILE__) . '/web/procurements.php'; -include dirname(__FILE__) . '/web/providers.php'; -include dirname(__FILE__) . '/web/settings.php'; -include dirname(__FILE__) . '/web/transactions.php'; -include dirname(__FILE__) . '/web/products.php'; -include dirname(__FILE__) . '/web/taxes.php'; -include dirname(__FILE__) . '/web/units.php'; -include dirname(__FILE__) . '/web/reports.php'; +include dirname( __FILE__ ) . '/web/orders.php'; +include dirname( __FILE__ ) . '/web/medias.php'; +include dirname( __FILE__ ) . '/web/customers.php'; +include dirname( __FILE__ ) . '/web/cash-registers.php'; +include dirname( __FILE__ ) . '/web/procurements.php'; +include dirname( __FILE__ ) . '/web/providers.php'; +include dirname( __FILE__ ) . '/web/settings.php'; +include dirname( __FILE__ ) . '/web/transactions.php'; +include dirname( __FILE__ ) . '/web/products.php'; +include dirname( __FILE__ ) . '/web/taxes.php'; +include dirname( __FILE__ ) . '/web/units.php'; +include dirname( __FILE__ ) . '/web/reports.php'; diff --git a/routes/web-base.php b/routes/web-base.php index 5a943e8b2..4ddc1c68a 100644 --- a/routes/web-base.php +++ b/routes/web-base.php @@ -16,57 +16,57 @@ use Illuminate\Routing\Middleware\SubstituteBindings; use Illuminate\Support\Facades\Route; -Route::middleware([ 'web' ])->group(function () { - Route::get('/', [ HomeController::class, 'welcome' ])->name('ns.welcome'); -}); +Route::middleware( [ 'web' ] )->group( function () { + Route::get( '/', [ HomeController::class, 'welcome' ] )->name( 'ns.welcome' ); +} ); -require dirname(__FILE__) . '/intermediate.php'; +require dirname( __FILE__ ) . '/intermediate.php'; -Route::middleware([ +Route::middleware( [ InstalledStateMiddleware::class, CheckMigrationStatus::class, SubstituteBindings::class, -])->group(function () { +] )->group( function () { /** * We would like to isolate certain routes as it's registered * for authentication and are likely to be applicable to sub stores */ - require dirname(__FILE__) . '/authenticate.php'; + require dirname( __FILE__ ) . '/authenticate.php'; - Route::get('/database-update', [ UpdateController::class, 'updateDatabase' ]) - ->withoutMiddleware([ CheckMigrationStatus::class ]) - ->name('ns.database-update'); + Route::get( '/database-update', [ UpdateController::class, 'updateDatabase' ] ) + ->withoutMiddleware( [ CheckMigrationStatus::class ] ) + ->name( 'ns.database-update' ); - Route::middleware([ + Route::middleware( [ Authenticate::class, CheckApplicationHealthMiddleware::class, ClearRequestCacheMiddleware::class, FooterOutputHookMiddleware::class, - ])->group(function () { - Route::prefix('dashboard')->group(function () { - event(new WebRoutesLoadedEvent('dashboard')); + ] )->group( function () { + Route::prefix( 'dashboard' )->group( function () { + event( new WebRoutesLoadedEvent( 'dashboard' ) ); - Route::middleware([ + Route::middleware( [ HandleCommonRoutesMiddleware::class, - ])->group(function () { - require dirname(__FILE__) . '/nexopos.php'; - }); + ] )->group( function () { + require dirname( __FILE__ ) . '/nexopos.php'; + } ); - include dirname(__FILE__) . '/web/modules.php'; - include dirname(__FILE__) . '/web/users.php'; + include dirname( __FILE__ ) . '/web/modules.php'; + include dirname( __FILE__ ) . '/web/users.php'; - Route::get('/crud/download/{hash}', [ CrudController::class, 'downloadSavedFile' ])->name('ns.dashboard.crud-download'); - }); - }); -}); + Route::get( '/crud/download/{hash}', [ CrudController::class, 'downloadSavedFile' ] )->name( 'ns.dashboard.crud-download' ); + } ); + } ); +} ); -Route::middleware([ +Route::middleware( [ NotInstalledStateMiddleware::class, ClearRequestCacheMiddleware::class, -])->group(function () { - Route::prefix('/do-setup/')->group(function () { - Route::get('', [ SetupController::class, 'welcome' ])->name('ns.do-setup'); - }); -}); +] )->group( function () { + Route::prefix( '/do-setup/' )->group( function () { + Route::get( '', [ SetupController::class, 'welcome' ] )->name( 'ns.do-setup' ); + } ); +} ); -include dirname(__FILE__) . '/debug.php'; +include dirname( __FILE__ ) . '/debug.php'; diff --git a/routes/web.php b/routes/web.php index 561194516..49413fbcc 100644 --- a/routes/web.php +++ b/routes/web.php @@ -15,7 +15,7 @@ | */ -$domain = pathinfo(env('APP_URL')); +$domain = pathinfo( env( 'APP_URL' ) ); /** * If something has to happen @@ -29,18 +29,18 @@ * on the system. In order to enable it, the user * will have to follow these instructions https://my.nexopos.com/en/documentation/wildcards */ -if (env('NS_WILDCARD_ENABLED')) { +if ( env( 'NS_WILDCARD_ENABLED' ) ) { /** * The defined route should only be applicable * to the main domain. */ - $domainString = ($domain[ 'filename' ] ?: 'localhost') . (isset($domain[ 'extension' ]) ? '.' . $domain[ 'extension' ] : ''); + $domainString = ( $domain[ 'filename' ] ?: 'localhost' ) . ( isset( $domain[ 'extension' ] ) ? '.' . $domain[ 'extension' ] : '' ); - Route::domain($domainString)->group(function () { - include dirname(__FILE__) . DIRECTORY_SEPARATOR . 'web-base.php'; - }); + Route::domain( $domainString )->group( function () { + include dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'web-base.php'; + } ); } else { - include dirname(__FILE__) . DIRECTORY_SEPARATOR . 'web-base.php'; + include dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'web-base.php'; } /** @@ -48,16 +48,16 @@ * vie server. For some reason we're unable to * configure that correctly on vite.config.js */ -Route::get('__vite_ping', function () { - $filePath = base_path('public/hot'); +Route::get( '__vite_ping', function () { + $filePath = base_path( 'public/hot' ); - if (file_exists($filePath)) { - return redirect(file_get_contents($filePath) . '/__vite_ping'); + if ( file_exists( $filePath ) ) { + return redirect( file_get_contents( $filePath ) . '/__vite_ping' ); } -}); +} ); /** * for local Vue 3 components development * those routes are registered. */ -Route::get('__dev__', [ DevController::class, 'index' ]); +Route::get( '__dev__', [ DevController::class, 'index' ] ); diff --git a/routes/web/cash-registers.php b/routes/web/cash-registers.php index a53dfd156..4db73cd0c 100644 --- a/routes/web/cash-registers.php +++ b/routes/web/cash-registers.php @@ -3,7 +3,7 @@ use App\Http\Controllers\Dashboard\CashRegistersController; use Illuminate\Support\Facades\Route; -Route::get('/cash-registers', [ CashRegistersController::class, 'listRegisters' ])->name(ns()->routeName('ns.dashboard.registers-list')); // @todo update -Route::get('/cash-registers/create', [ CashRegistersController::class, 'createRegister' ])->name(ns()->routeName('ns.dashboard.registers-create')); -Route::get('/cash-registers/edit/{register}', [ CashRegistersController::class, 'editRegister' ])->name(ns()->routeName('ns.dashboard.registers-edit')); -Route::get('/cash-registers/history/{register}', [ CashRegistersController::class, 'getRegisterHistory' ])->name(ns()->routeName('ns.dashboard.registers-history')); +Route::get( '/cash-registers', [ CashRegistersController::class, 'listRegisters' ] )->name( ns()->routeName( 'ns.dashboard.registers-list' ) ); // @todo update +Route::get( '/cash-registers/create', [ CashRegistersController::class, 'createRegister' ] )->name( ns()->routeName( 'ns.dashboard.registers-create' ) ); +Route::get( '/cash-registers/edit/{register}', [ CashRegistersController::class, 'editRegister' ] )->name( ns()->routeName( 'ns.dashboard.registers-edit' ) ); +Route::get( '/cash-registers/history/{register}', [ CashRegistersController::class, 'getRegisterHistory' ] )->name( ns()->routeName( 'ns.dashboard.registers-history' ) ); diff --git a/routes/web/customers.php b/routes/web/customers.php index 91ba28d2a..60b3abf0e 100644 --- a/routes/web/customers.php +++ b/routes/web/customers.php @@ -5,26 +5,26 @@ use App\Http\Controllers\Dashboard\RewardsSystemController; use Illuminate\Support\Facades\Route; -Route::get('/customers', [ CustomersController::class, 'listCustomers' ])->name(ns()->routeName('ns.dashboard.customers-list')); // @todo update -Route::get('/customers/create', [ CustomersController::class, 'createCustomer' ])->name(ns()->routeName('ns.dashboard.customers-create')); -Route::get('/customers/edit/{customer}', [ CustomersController::class, 'editCustomer' ])->name(ns()->routeName('ns.dashboard.customers-edit')); -Route::get('/customers/{customer}/rewards', [ CustomersController::class, 'getCustomersRewards' ])->name(ns()->routeName('ns.dashboard.customers-rewards-list')); // @todo update -Route::get('/customers/{customer}/rewards/edit/{reward}', [ CustomersController::class, 'editCustomerReward' ])->name(ns()->routeName('ns.dashboard.customers-rewards-edit')); -Route::get('/customers/{customer}/orders', [ CustomersController::class, 'getCustomersOrders' ])->name(ns()->routeName('ns.dashboard.customers-orders-list')); // @todo update -Route::get('/customers/{customer}/coupons', [ CustomersController::class, 'getCustomersCoupons' ])->name(ns()->routeName('ns.dashboard.customers-coupons-list')); -Route::get('/customers/{customer}/coupons/{customerCoupon}/history', [ CustomersController::class, 'listCustomerCouponHistory' ])->name(ns()->routeName('ns.dashboard.customers-coupons-history-list')); -Route::get('/customers/{customer}/account-history', [ CustomersController::class, 'getCustomerAccountHistory' ])->name(ns()->routeName('ns.dashboard.customers-account-history-list')); // @todo update -Route::get('/customers/{customer}/account-history/create', [ CustomersController::class, 'createCustomerAccountHistory' ])->name(ns()->routeName('ns.dashboard.customers-account-history-create')); -Route::get('/customers/{customer}/account-history/edit/{customerAccountHistory}', [ CustomersController::class, 'editCustomerAccountHistory' ])->name(ns()->routeName('ns.dashboard.customers-account-history-edit')); -Route::get('/customers/groups', [ CustomersGroupsController::class, 'listCustomersGroups' ])->name(ns()->routeName('ns.dashboard.customersgroups-list')); // @todo update -Route::get('/customers/groups/create', [ CustomersGroupsController::class, 'createCustomerGroup' ])->name(ns()->routeName('ns.dashboard.customersgroups-create')); -Route::get('/customers/groups/edit/{group}', [ CustomersGroupsController::class, 'editCustomerGroup' ])->name(ns()->routeName('ns.dashboard.customersgroups-edit')); -Route::get('/customers/rewards-system', [ RewardsSystemController::class, 'list' ])->name(ns()->routeName('ns.dashboard.rewards-list')); // @todo update -Route::get('/customers/rewards-system/create', [ RewardsSystemController::class, 'create' ])->name(ns()->routeName('ns.dashboard.rewards-create')); -Route::get('/customers/rewards-system/edit/{reward}', [ RewardsSystemController::class, 'edit' ])->name(ns()->routeName('ns.dashboard.rewards-edit')); -Route::get('/customers/coupons', [ CustomersController::class, 'listCoupons' ])->name(ns()->routeName('ns.dashboard.all-customers-coupons-list')); // @todo update -Route::get('/customers/coupons/create', [ CustomersController::class, 'createCoupon' ])->name(ns()->routeName('ns.dashboard.customers-coupons-create')); -Route::get('/customers/coupons/edit/{coupon}', [ CustomersController::class, 'editCoupon' ])->name(ns()->routeName('ns.dashboard.customers-coupons-edit')); -Route::get('/customers/coupons/history/{coupon}', [ CustomersController::class, 'couponHistory' ])->name(ns()->routeName('ns.dashboard.customers-coupons-history')); -Route::get('/customers/coupons-generated', [ CustomersController::class, 'listGeneratedCoupons' ])->name(ns()->routeName('ns.dashboard.customers-coupons-generated-list')); // @todo update -Route::get('/customers/coupons-generated/edit/{coupon}', [ CustomersController::class, 'editGeneratedCoupon' ])->name(ns()->routeName('ns.dashboard.customers-coupons-generated-edit')); +Route::get( '/customers', [ CustomersController::class, 'listCustomers' ] )->name( ns()->routeName( 'ns.dashboard.customers-list' ) ); // @todo update +Route::get( '/customers/create', [ CustomersController::class, 'createCustomer' ] )->name( ns()->routeName( 'ns.dashboard.customers-create' ) ); +Route::get( '/customers/edit/{customer}', [ CustomersController::class, 'editCustomer' ] )->name( ns()->routeName( 'ns.dashboard.customers-edit' ) ); +Route::get( '/customers/{customer}/rewards', [ CustomersController::class, 'getCustomersRewards' ] )->name( ns()->routeName( 'ns.dashboard.customers-rewards-list' ) ); // @todo update +Route::get( '/customers/{customer}/rewards/edit/{reward}', [ CustomersController::class, 'editCustomerReward' ] )->name( ns()->routeName( 'ns.dashboard.customers-rewards-edit' ) ); +Route::get( '/customers/{customer}/orders', [ CustomersController::class, 'getCustomersOrders' ] )->name( ns()->routeName( 'ns.dashboard.customers-orders-list' ) ); // @todo update +Route::get( '/customers/{customer}/coupons', [ CustomersController::class, 'getCustomersCoupons' ] )->name( ns()->routeName( 'ns.dashboard.customers-coupons-list' ) ); +Route::get( '/customers/{customer}/coupons/{customerCoupon}/history', [ CustomersController::class, 'listCustomerCouponHistory' ] )->name( ns()->routeName( 'ns.dashboard.customers-coupons-history-list' ) ); +Route::get( '/customers/{customer}/account-history', [ CustomersController::class, 'getCustomerAccountHistory' ] )->name( ns()->routeName( 'ns.dashboard.customers-account-history-list' ) ); // @todo update +Route::get( '/customers/{customer}/account-history/create', [ CustomersController::class, 'createCustomerAccountHistory' ] )->name( ns()->routeName( 'ns.dashboard.customers-account-history-create' ) ); +Route::get( '/customers/{customer}/account-history/edit/{customerAccountHistory}', [ CustomersController::class, 'editCustomerAccountHistory' ] )->name( ns()->routeName( 'ns.dashboard.customers-account-history-edit' ) ); +Route::get( '/customers/groups', [ CustomersGroupsController::class, 'listCustomersGroups' ] )->name( ns()->routeName( 'ns.dashboard.customersgroups-list' ) ); // @todo update +Route::get( '/customers/groups/create', [ CustomersGroupsController::class, 'createCustomerGroup' ] )->name( ns()->routeName( 'ns.dashboard.customersgroups-create' ) ); +Route::get( '/customers/groups/edit/{group}', [ CustomersGroupsController::class, 'editCustomerGroup' ] )->name( ns()->routeName( 'ns.dashboard.customersgroups-edit' ) ); +Route::get( '/customers/rewards-system', [ RewardsSystemController::class, 'list' ] )->name( ns()->routeName( 'ns.dashboard.rewards-list' ) ); // @todo update +Route::get( '/customers/rewards-system/create', [ RewardsSystemController::class, 'create' ] )->name( ns()->routeName( 'ns.dashboard.rewards-create' ) ); +Route::get( '/customers/rewards-system/edit/{reward}', [ RewardsSystemController::class, 'edit' ] )->name( ns()->routeName( 'ns.dashboard.rewards-edit' ) ); +Route::get( '/customers/coupons', [ CustomersController::class, 'listCoupons' ] )->name( ns()->routeName( 'ns.dashboard.all-customers-coupons-list' ) ); // @todo update +Route::get( '/customers/coupons/create', [ CustomersController::class, 'createCoupon' ] )->name( ns()->routeName( 'ns.dashboard.customers-coupons-create' ) ); +Route::get( '/customers/coupons/edit/{coupon}', [ CustomersController::class, 'editCoupon' ] )->name( ns()->routeName( 'ns.dashboard.customers-coupons-edit' ) ); +Route::get( '/customers/coupons/history/{coupon}', [ CustomersController::class, 'couponHistory' ] )->name( ns()->routeName( 'ns.dashboard.customers-coupons-history' ) ); +Route::get( '/customers/coupons-generated', [ CustomersController::class, 'listGeneratedCoupons' ] )->name( ns()->routeName( 'ns.dashboard.customers-coupons-generated-list' ) ); // @todo update +Route::get( '/customers/coupons-generated/edit/{coupon}', [ CustomersController::class, 'editGeneratedCoupon' ] )->name( ns()->routeName( 'ns.dashboard.customers-coupons-generated-edit' ) ); diff --git a/routes/web/medias.php b/routes/web/medias.php index 1582d44ee..16f1de44c 100644 --- a/routes/web/medias.php +++ b/routes/web/medias.php @@ -3,4 +3,4 @@ use App\Http\Controllers\Dashboard\MediasController; use Illuminate\Support\Facades\Route; -Route::get('/medias', [ MediasController::class, 'showMedia' ])->name(ns()->routeName('ns.dashboard.medias')); +Route::get( '/medias', [ MediasController::class, 'showMedia' ] )->name( ns()->routeName( 'ns.dashboard.medias' ) ); diff --git a/routes/web/modules.php b/routes/web/modules.php index 8b935a47a..e7c69fbd9 100644 --- a/routes/web/modules.php +++ b/routes/web/modules.php @@ -3,7 +3,7 @@ use App\Http\Controllers\Dashboard\ModulesController; use Illuminate\Support\Facades\Route; -Route::get('/modules', [ ModulesController::class, 'listModules' ])->name('ns.dashboard.modules-list'); -Route::get('/modules/upload', [ ModulesController::class, 'showUploadModule' ])->name('ns.dashboard.modules-upload'); -Route::get('/modules/download/{identifier}', [ ModulesController::class, 'downloadModule' ])->name('ns.dashboard.modules-download'); -Route::get('/modules/migrate/{namespace}', [ ModulesController::class, 'migrateModule' ])->name('ns.dashboard.modules-migrate'); +Route::get( '/modules', [ ModulesController::class, 'listModules' ] )->name( 'ns.dashboard.modules-list' ); +Route::get( '/modules/upload', [ ModulesController::class, 'showUploadModule' ] )->name( 'ns.dashboard.modules-upload' ); +Route::get( '/modules/download/{identifier}', [ ModulesController::class, 'downloadModule' ] )->name( 'ns.dashboard.modules-download' ); +Route::get( '/modules/migrate/{namespace}', [ ModulesController::class, 'migrateModule' ] )->name( 'ns.dashboard.modules-migrate' ); diff --git a/routes/web/orders.php b/routes/web/orders.php index 392272dd4..ff3b64a2f 100644 --- a/routes/web/orders.php +++ b/routes/web/orders.php @@ -3,13 +3,13 @@ use App\Http\Controllers\Dashboard\OrdersController; use Illuminate\Support\Facades\Route; -Route::get('/orders', [ OrdersController::class, 'listOrders' ])->name(ns()->routeName('ns.dashboard.orders')); -Route::get('/orders/instalments', [ OrdersController::class, 'listInstalments' ])->name(ns()->routeName('ns.dashboard.orders-instalments')); -Route::get('/orders/payments-types', [ OrdersController::class, 'listPaymentsTypes' ])->name(ns()->routeName('ns.dashboard.orders-payments-types')); -Route::get('/orders/payments-types/create', [ OrdersController::class, 'createPaymentType' ])->name(ns()->routeName('ns.dashboard.orders-create-types')); -Route::get('/orders/payments-types/edit/{paymentType}', [ OrdersController::class, 'updatePaymentType' ])->name(ns()->routeName('ns.dashboard.orders-update-types')); -Route::get('/orders/invoice/{order}', [ OrdersController::class, 'orderInvoice' ])->name(ns()->routeName('ns.dashboard.orders-invoice')); -Route::get('/orders/receipt/{order}', [ OrdersController::class, 'orderReceipt' ])->name(ns()->routeName('ns.dashboard.orders-receipt')); -Route::get('/orders/refund-receipt/{refund}', [ OrdersController::class, 'orderRefundReceipt' ])->name(ns()->routeName('ns.dashboard.orders-refund-receipt')); -Route::get('/orders/payment-receipt/{orderPayment}', [ OrdersController::class, 'getOrderPaymentReceipt' ])->name(ns()->routeName('ns.dashboard.orders-payment-receipt')); -Route::get('/pos', [ OrdersController::class, 'showPOS' ])->name(ns()->routeName('ns.dashboard.pos')); +Route::get( '/orders', [ OrdersController::class, 'listOrders' ] )->name( ns()->routeName( 'ns.dashboard.orders' ) ); +Route::get( '/orders/instalments', [ OrdersController::class, 'listInstalments' ] )->name( ns()->routeName( 'ns.dashboard.orders-instalments' ) ); +Route::get( '/orders/payments-types', [ OrdersController::class, 'listPaymentsTypes' ] )->name( ns()->routeName( 'ns.dashboard.orders-payments-types' ) ); +Route::get( '/orders/payments-types/create', [ OrdersController::class, 'createPaymentType' ] )->name( ns()->routeName( 'ns.dashboard.orders-create-types' ) ); +Route::get( '/orders/payments-types/edit/{paymentType}', [ OrdersController::class, 'updatePaymentType' ] )->name( ns()->routeName( 'ns.dashboard.orders-update-types' ) ); +Route::get( '/orders/invoice/{order}', [ OrdersController::class, 'orderInvoice' ] )->name( ns()->routeName( 'ns.dashboard.orders-invoice' ) ); +Route::get( '/orders/receipt/{order}', [ OrdersController::class, 'orderReceipt' ] )->name( ns()->routeName( 'ns.dashboard.orders-receipt' ) ); +Route::get( '/orders/refund-receipt/{refund}', [ OrdersController::class, 'orderRefundReceipt' ] )->name( ns()->routeName( 'ns.dashboard.orders-refund-receipt' ) ); +Route::get( '/orders/payment-receipt/{orderPayment}', [ OrdersController::class, 'getOrderPaymentReceipt' ] )->name( ns()->routeName( 'ns.dashboard.orders-payment-receipt' ) ); +Route::get( '/pos', [ OrdersController::class, 'showPOS' ] )->name( ns()->routeName( 'ns.dashboard.pos' ) ); diff --git a/routes/web/procurements.php b/routes/web/procurements.php index 5a99315bc..c5c460dcc 100644 --- a/routes/web/procurements.php +++ b/routes/web/procurements.php @@ -3,9 +3,9 @@ use App\Http\Controllers\Dashboard\ProcurementController; use Illuminate\Support\Facades\Route; -Route::get('/procurements', [ ProcurementController::class, 'listProcurements' ])->name(ns()->routeName('ns.procurement-list')); // @todo update -Route::get('/procurements/create', [ ProcurementController::class, 'createProcurement' ])->name(ns()->routeName('ns.procurement-create')); // @todo update -Route::get('/procurements/products', [ ProcurementController::class, 'getProcurementProducts' ])->name(ns()->routeName('ns.procurement-products')); // @todo update -Route::get('/procurements/products/edit/{product}', [ ProcurementController::class, 'editProcurementProduct' ])->name(ns()->routeName('ns.procurement-edit-products')); // @todo update -Route::get('/procurements/edit/{procurement}', [ ProcurementController::class, 'updateProcurement' ])->name(ns()->routeName('ns.procurement-edit')); // @todo update -Route::get('/procurements/edit/{procurement}/invoice', [ ProcurementController::class, 'procurementInvoice' ])->name(ns()->routeName('ns.procurement-invoice')); // @todo update +Route::get( '/procurements', [ ProcurementController::class, 'listProcurements' ] )->name( ns()->routeName( 'ns.procurement-list' ) ); // @todo update +Route::get( '/procurements/create', [ ProcurementController::class, 'createProcurement' ] )->name( ns()->routeName( 'ns.procurement-create' ) ); // @todo update +Route::get( '/procurements/products', [ ProcurementController::class, 'getProcurementProducts' ] )->name( ns()->routeName( 'ns.procurement-products' ) ); // @todo update +Route::get( '/procurements/products/edit/{product}', [ ProcurementController::class, 'editProcurementProduct' ] )->name( ns()->routeName( 'ns.procurement-edit-products' ) ); // @todo update +Route::get( '/procurements/edit/{procurement}', [ ProcurementController::class, 'updateProcurement' ] )->name( ns()->routeName( 'ns.procurement-edit' ) ); // @todo update +Route::get( '/procurements/edit/{procurement}/invoice', [ ProcurementController::class, 'procurementInvoice' ] )->name( ns()->routeName( 'ns.procurement-invoice' ) ); // @todo update diff --git a/routes/web/products.php b/routes/web/products.php index cd9d71138..a15ebdaa7 100644 --- a/routes/web/products.php +++ b/routes/web/products.php @@ -4,15 +4,15 @@ use App\Http\Controllers\Dashboard\ProductsController; use Illuminate\Support\Facades\Route; -Route::get('/products', [ ProductsController::class, 'listProducts' ])->name(ns()->routeName('ns.dashboard.products')); -Route::get('/products/create', [ ProductsController::class, 'createProduct' ])->name(ns()->routeName('ns.dashboard.products.create')); -Route::get('/products/stock-adjustment', [ ProductsController::class, 'showStockAdjustment' ])->name(ns()->routeName('ns.dashboard.products.stock-adjustment')); -Route::get('/products/print-labels', [ ProductsController::class, 'printLabels' ])->name(ns()->routeName('ns.dashboard.products.print-labels')); -Route::get('/products/edit/{product}', [ ProductsController::class, 'editProduct' ])->name(ns()->routeName('ns.products-edit')); // @todo update -Route::get('/products/{product}/units', [ ProductsController::class, 'productUnits' ])->name(ns()->routeName('ns.dashboard.products.units')); -Route::get('/products/{product}/history', [ ProductsController::class, 'productHistory' ])->name(ns()->routeName('ns.dashboard.products.history')); -Route::get('/products/categories', [ CategoryController::class, 'listCategories' ])->name(ns()->routeName('ns.dashboard.products.categories')); -Route::get('/products/categories/create', [ CategoryController::class, 'createCategory' ])->name(ns()->routeName('ns.dashboard.products.categories.create')); -Route::get('/products/categories/edit/{category}', [ CategoryController::class, 'editCategory' ])->name(ns()->routeName('ns.dashboard.categories.edit')); -Route::get('/products/categories/compute-products/{category}', [ CategoryController::class, 'computeCategoryProducts' ])->name(ns()->routeName('ns.dashboard.products.categories.compute')); -Route::get('/products/stock-flow-records', [ CategoryController::class, 'showStockFlowCrud' ])->name(ns()->routeName('ns.dashboard.products.stock-flow-records')); +Route::get( '/products', [ ProductsController::class, 'listProducts' ] )->name( ns()->routeName( 'ns.dashboard.products' ) ); +Route::get( '/products/create', [ ProductsController::class, 'createProduct' ] )->name( ns()->routeName( 'ns.dashboard.products.create' ) ); +Route::get( '/products/stock-adjustment', [ ProductsController::class, 'showStockAdjustment' ] )->name( ns()->routeName( 'ns.dashboard.products.stock-adjustment' ) ); +Route::get( '/products/print-labels', [ ProductsController::class, 'printLabels' ] )->name( ns()->routeName( 'ns.dashboard.products.print-labels' ) ); +Route::get( '/products/edit/{product}', [ ProductsController::class, 'editProduct' ] )->name( ns()->routeName( 'ns.products-edit' ) ); // @todo update +Route::get( '/products/{product}/units', [ ProductsController::class, 'productUnits' ] )->name( ns()->routeName( 'ns.dashboard.products.units' ) ); +Route::get( '/products/{product}/history', [ ProductsController::class, 'productHistory' ] )->name( ns()->routeName( 'ns.dashboard.products.history' ) ); +Route::get( '/products/categories', [ CategoryController::class, 'listCategories' ] )->name( ns()->routeName( 'ns.dashboard.products.categories' ) ); +Route::get( '/products/categories/create', [ CategoryController::class, 'createCategory' ] )->name( ns()->routeName( 'ns.dashboard.products.categories.create' ) ); +Route::get( '/products/categories/edit/{category}', [ CategoryController::class, 'editCategory' ] )->name( ns()->routeName( 'ns.dashboard.categories.edit' ) ); +Route::get( '/products/categories/compute-products/{category}', [ CategoryController::class, 'computeCategoryProducts' ] )->name( ns()->routeName( 'ns.dashboard.products.categories.compute' ) ); +Route::get( '/products/stock-flow-records', [ CategoryController::class, 'showStockFlowCrud' ] )->name( ns()->routeName( 'ns.dashboard.products.stock-flow-records' ) ); diff --git a/routes/web/providers.php b/routes/web/providers.php index 2f98aa286..8c2208f2e 100644 --- a/routes/web/providers.php +++ b/routes/web/providers.php @@ -3,8 +3,8 @@ use App\Http\Controllers\Dashboard\ProvidersController; use Illuminate\Support\Facades\Route; -Route::get('/providers', [ ProvidersController::class, 'listProviders' ])->name(ns()->routeName('ns.dashboard.providers')); -Route::get('/providers/create', [ ProvidersController::class, 'createProvider' ])->name(ns()->routeName('ns.dashboard.providers.create')); -Route::get('/providers/edit/{provider}', [ ProvidersController::class, 'editProvider' ])->name(ns()->routeName('ns.dashboard.providers.edit')); -Route::get('/providers/{provider}/procurements', [ ProvidersController::class, 'listProvidersProcurements' ])->name(ns()->routeName('ns.dashboard.providers.procurements')); -Route::get('/providers/{provider}/products', [ ProvidersController::class, 'listProvidersProducts' ])->name(ns()->routeName('ns.dashboard.providers.products')); +Route::get( '/providers', [ ProvidersController::class, 'listProviders' ] )->name( ns()->routeName( 'ns.dashboard.providers' ) ); +Route::get( '/providers/create', [ ProvidersController::class, 'createProvider' ] )->name( ns()->routeName( 'ns.dashboard.providers.create' ) ); +Route::get( '/providers/edit/{provider}', [ ProvidersController::class, 'editProvider' ] )->name( ns()->routeName( 'ns.dashboard.providers.edit' ) ); +Route::get( '/providers/{provider}/procurements', [ ProvidersController::class, 'listProvidersProcurements' ] )->name( ns()->routeName( 'ns.dashboard.providers.procurements' ) ); +Route::get( '/providers/{provider}/products', [ ProvidersController::class, 'listProvidersProducts' ] )->name( ns()->routeName( 'ns.dashboard.providers.products' ) ); diff --git a/routes/web/reports.php b/routes/web/reports.php index ea8adf9c4..cec692f58 100644 --- a/routes/web/reports.php +++ b/routes/web/reports.php @@ -3,13 +3,13 @@ use App\Http\Controllers\Dashboard\ReportsController; use Illuminate\Support\Facades\Route; -Route::get('/reports/sales', [ ReportsController::class, 'salesReport' ])->name(ns()->routeName('ns.dashboard.report.sales')); -Route::get('/reports/sales-progress', [ ReportsController::class, 'salesProgress' ])->name(ns()->routeName('ns.dashboard.report.sale-progress')); -Route::get('/reports/low-stock', [ ReportsController::class, 'stockReport' ])->name(ns()->routeName('ns.dashboard.reports-low-stock')); // @todo update -Route::get('/reports/sold-stock', [ ReportsController::class, 'soldStock' ])->name(ns()->routeName('ns.dashboard.reports.sold-stock')); -Route::get('/reports/stock-history', [ ReportsController::class, 'stockCombinedReport' ])->name(ns()->routeName('ns.dashboard.reports.stock-history')); -Route::get('/reports/profit', [ ReportsController::class, 'profit' ])->name(ns()->routeName('ns.dashboard.reports.profit')); -Route::get('/reports/transactions', [ ReportsController::class, 'transactionsReport' ])->name(ns()->routeName('ns.dashboard.reports.transactions')); -Route::get('/reports/annual-report', [ ReportsController::class, 'annualReport' ])->name(ns()->routeName('ns.dashboard.reports-annual')); // @todo update -Route::get('/reports/payment-types', [ ReportsController::class, 'salesByPaymentTypes' ])->name(ns()->routeName('ns.dashboard.reports.payment-types')); -Route::get('/reports/customers-statement', [ ReportsController::class, 'showCustomerStatement' ])->name(ns()->routeName('ns.dashboard.reports.customers-statement')); +Route::get( '/reports/sales', [ ReportsController::class, 'salesReport' ] )->name( ns()->routeName( 'ns.dashboard.report.sales' ) ); +Route::get( '/reports/sales-progress', [ ReportsController::class, 'salesProgress' ] )->name( ns()->routeName( 'ns.dashboard.report.sale-progress' ) ); +Route::get( '/reports/low-stock', [ ReportsController::class, 'stockReport' ] )->name( ns()->routeName( 'ns.dashboard.reports-low-stock' ) ); // @todo update +Route::get( '/reports/sold-stock', [ ReportsController::class, 'soldStock' ] )->name( ns()->routeName( 'ns.dashboard.reports.sold-stock' ) ); +Route::get( '/reports/stock-history', [ ReportsController::class, 'stockCombinedReport' ] )->name( ns()->routeName( 'ns.dashboard.reports.stock-history' ) ); +Route::get( '/reports/profit', [ ReportsController::class, 'profit' ] )->name( ns()->routeName( 'ns.dashboard.reports.profit' ) ); +Route::get( '/reports/transactions', [ ReportsController::class, 'transactionsReport' ] )->name( ns()->routeName( 'ns.dashboard.reports.transactions' ) ); +Route::get( '/reports/annual-report', [ ReportsController::class, 'annualReport' ] )->name( ns()->routeName( 'ns.dashboard.reports-annual' ) ); // @todo update +Route::get( '/reports/payment-types', [ ReportsController::class, 'salesByPaymentTypes' ] )->name( ns()->routeName( 'ns.dashboard.reports.payment-types' ) ); +Route::get( '/reports/customers-statement', [ ReportsController::class, 'showCustomerStatement' ] )->name( ns()->routeName( 'ns.dashboard.reports.customers-statement' ) ); diff --git a/routes/web/settings.php b/routes/web/settings.php index 88cc94b0c..527568cc5 100644 --- a/routes/web/settings.php +++ b/routes/web/settings.php @@ -3,5 +3,5 @@ use App\Http\Controllers\Dashboard\SettingsController; use Illuminate\Support\Facades\Route; -Route::get('/settings/{settings}', [ SettingsController::class, 'getSettings' ])->name(ns()->routeName('ns.dashboard.settings')); -Route::get('/settings/form/{settings}', [ SettingsController::class, 'loadSettingsForm' ])->name(ns()->routeName('ns.dashboard.settings.form')); +Route::get( '/settings/{settings}', [ SettingsController::class, 'getSettings' ] )->name( ns()->routeName( 'ns.dashboard.settings' ) ); +Route::get( '/settings/form/{settings}', [ SettingsController::class, 'loadSettingsForm' ] )->name( ns()->routeName( 'ns.dashboard.settings.form' ) ); diff --git a/routes/web/taxes.php b/routes/web/taxes.php index d412452c0..a28de6f3c 100644 --- a/routes/web/taxes.php +++ b/routes/web/taxes.php @@ -3,9 +3,9 @@ use App\Http\Controllers\Dashboard\TaxesController; use Illuminate\Support\Facades\Route; -Route::get('/taxes', [ TaxesController::class, 'listTaxes' ])->name(ns()->routeName('ns.dashboard.taxes')); -Route::get('/taxes/create', [ TaxesController::class, 'createTax' ])->name(ns()->routeName('ns.dashboard.taxes.create')); -Route::get('/taxes/edit/{tax}', [ TaxesController::class, 'editTax' ])->name(ns()->routeName('ns.dashboard.taxes.edit')); -Route::get('/taxes/groups', [ TaxesController::class, 'taxesGroups' ])->name(ns()->routeName('ns.dashboard.taxes.groups')); -Route::get('/taxes/groups/create', [ TaxesController::class, 'createTaxGroups' ])->name(ns()->routeName('ns.dashboard.taxes.groups.create')); -Route::get('/taxes/groups/edit/{group}', [ TaxesController::class, 'editTaxGroup' ])->name(ns()->routeName('ns.dashboard.taxes.groups.edit')); +Route::get( '/taxes', [ TaxesController::class, 'listTaxes' ] )->name( ns()->routeName( 'ns.dashboard.taxes' ) ); +Route::get( '/taxes/create', [ TaxesController::class, 'createTax' ] )->name( ns()->routeName( 'ns.dashboard.taxes.create' ) ); +Route::get( '/taxes/edit/{tax}', [ TaxesController::class, 'editTax' ] )->name( ns()->routeName( 'ns.dashboard.taxes.edit' ) ); +Route::get( '/taxes/groups', [ TaxesController::class, 'taxesGroups' ] )->name( ns()->routeName( 'ns.dashboard.taxes.groups' ) ); +Route::get( '/taxes/groups/create', [ TaxesController::class, 'createTaxGroups' ] )->name( ns()->routeName( 'ns.dashboard.taxes.groups.create' ) ); +Route::get( '/taxes/groups/edit/{group}', [ TaxesController::class, 'editTaxGroup' ] )->name( ns()->routeName( 'ns.dashboard.taxes.groups.edit' ) ); diff --git a/routes/web/transactions.php b/routes/web/transactions.php index 89a6329d6..30e3c76c9 100644 --- a/routes/web/transactions.php +++ b/routes/web/transactions.php @@ -4,12 +4,12 @@ use App\Http\Controllers\Dashboard\TransactionsAccountController; use Illuminate\Support\Facades\Route; -Route::get('/accounting/transactions', [ TransactionController::class, 'listTransactions' ])->name(ns()->routeName('ns.dashboard.transactions')); -Route::get('/accounting/transactions/create', [ TransactionController::class, 'createTransaction' ])->name(ns()->routeName('ns.dashboard.transactions.create')); -Route::get('/accounting/transactions/edit/{transaction}', [ TransactionController::class, 'editTransaction' ])->name(ns()->routeName('ns.dashboard.transactions.edit')); -Route::get('/accounting/transactions/history/{transaction}', [ TransactionController::class, 'getTransactionHistory' ])->name(ns()->routeName('ns.dashboard.transactions.history')); -Route::get('/accounting/transactions/history', [ TransactionController::class, 'transactionsHistory' ])->name(ns()->routeName('ns.dashboard.cash-flow.history')); +Route::get( '/accounting/transactions', [ TransactionController::class, 'listTransactions' ] )->name( ns()->routeName( 'ns.dashboard.transactions' ) ); +Route::get( '/accounting/transactions/create', [ TransactionController::class, 'createTransaction' ] )->name( ns()->routeName( 'ns.dashboard.transactions.create' ) ); +Route::get( '/accounting/transactions/edit/{transaction}', [ TransactionController::class, 'editTransaction' ] )->name( ns()->routeName( 'ns.dashboard.transactions.edit' ) ); +Route::get( '/accounting/transactions/history/{transaction}', [ TransactionController::class, 'getTransactionHistory' ] )->name( ns()->routeName( 'ns.dashboard.transactions.history' ) ); +Route::get( '/accounting/transactions/history', [ TransactionController::class, 'transactionsHistory' ] )->name( ns()->routeName( 'ns.dashboard.cash-flow.history' ) ); -Route::get('/accounting/accounts', [ TransactionsAccountController::class, 'listTransactionsAccounts' ])->name(ns()->routeName('ns.dashboard.transactions-account')); -Route::get('/accounting/accounts/create', [ TransactionsAccountController::class, 'createTransactionsAccounts' ])->name(ns()->routeName('ns.dashboard.transactions-account.create')); -Route::get('/accounting/accounts/edit/{category}', [ TransactionsAccountController::class, 'editTransactionsAccounts' ])->name(ns()->routeName('ns.dashboard.transactions-account.edit')); +Route::get( '/accounting/accounts', [ TransactionsAccountController::class, 'listTransactionsAccounts' ] )->name( ns()->routeName( 'ns.dashboard.transactions-account' ) ); +Route::get( '/accounting/accounts/create', [ TransactionsAccountController::class, 'createTransactionsAccounts' ] )->name( ns()->routeName( 'ns.dashboard.transactions-account.create' ) ); +Route::get( '/accounting/accounts/edit/{category}', [ TransactionsAccountController::class, 'editTransactionsAccounts' ] )->name( ns()->routeName( 'ns.dashboard.transactions-account.edit' ) ); diff --git a/routes/web/units.php b/routes/web/units.php index 0d027bffb..65cc4e882 100644 --- a/routes/web/units.php +++ b/routes/web/units.php @@ -3,9 +3,9 @@ use App\Http\Controllers\Dashboard\UnitsController; use Illuminate\Support\Facades\Route; -Route::get('/units', [ UnitsController::class, 'listUnits' ])->name(ns()->routeName('ns.dashboard.units')); -Route::get('/units/edit/{unit}', [ UnitsController::class, 'editUnit' ])->name(ns()->routeName('ns.dashboard.units.edit')); -Route::get('/units/create', [ UnitsController::class, 'createUnit' ])->name(ns()->routeName('ns.dashboard.units.create')); -Route::get('/units/groups', [ UnitsController::class, 'listUnitsGroups' ])->name(ns()->routeName('ns.dashboard.units.groups')); -Route::get('/units/groups/create', [ UnitsController::class, 'createUnitGroup' ])->name(ns()->routeName('ns.dashboard.units.groups.create')); -Route::get('/units/groups/edit/{group}', [ UnitsController::class, 'editUnitGroup' ])->name(ns()->routeName('ns.dashboard.units.groups.edit')); +Route::get( '/units', [ UnitsController::class, 'listUnits' ] )->name( ns()->routeName( 'ns.dashboard.units' ) ); +Route::get( '/units/edit/{unit}', [ UnitsController::class, 'editUnit' ] )->name( ns()->routeName( 'ns.dashboard.units.edit' ) ); +Route::get( '/units/create', [ UnitsController::class, 'createUnit' ] )->name( ns()->routeName( 'ns.dashboard.units.create' ) ); +Route::get( '/units/groups', [ UnitsController::class, 'listUnitsGroups' ] )->name( ns()->routeName( 'ns.dashboard.units.groups' ) ); +Route::get( '/units/groups/create', [ UnitsController::class, 'createUnitGroup' ] )->name( ns()->routeName( 'ns.dashboard.units.groups.create' ) ); +Route::get( '/units/groups/edit/{group}', [ UnitsController::class, 'editUnitGroup' ] )->name( ns()->routeName( 'ns.dashboard.units.groups.edit' ) ); diff --git a/routes/web/users.php b/routes/web/users.php index d396a1ea6..a7820bbfc 100644 --- a/routes/web/users.php +++ b/routes/web/users.php @@ -3,11 +3,11 @@ use App\Http\Controllers\Dashboard\UsersController; use Illuminate\Support\Facades\Route; -Route::get('/users', [ UsersController::class, 'listUsers' ])->name('ns.dashboard.users')->middleware([ 'ns.restrict:read.users' ]); -Route::get('/users/create', [ UsersController::class, 'createUser' ])->name('ns.dashboard.users-create'); -Route::get('/users/edit/{user}', [ UsersController::class, 'editUser' ])->name('ns.dashboard.users.edit'); -Route::get('/users/roles/permissions-manager', [ UsersController::class, 'permissionManager' ]); -Route::get('/users/profile', [ UsersController::class, 'getProfile' ])->name('ns.dashboard.users.profile'); -Route::get('/users/roles', [ UsersController::class, 'rolesList' ])->name('ns.dashboard.users.roles'); -Route::get('/users/roles/create', [ UsersController::class, 'createRole' ])->name('ns.dashboard.users.roles-create'); -Route::get('/users/roles/edit/{role}', [ UsersController::class, 'editRole' ])->name('ns.dashboard.users.roles-edit'); +Route::get( '/users', [ UsersController::class, 'listUsers' ] )->name( 'ns.dashboard.users' )->middleware( [ 'ns.restrict:read.users' ] ); +Route::get( '/users/create', [ UsersController::class, 'createUser' ] )->name( 'ns.dashboard.users-create' ); +Route::get( '/users/edit/{user}', [ UsersController::class, 'editUser' ] )->name( 'ns.dashboard.users.edit' ); +Route::get( '/users/roles/permissions-manager', [ UsersController::class, 'permissionManager' ] ); +Route::get( '/users/profile', [ UsersController::class, 'getProfile' ] )->name( 'ns.dashboard.users.profile' ); +Route::get( '/users/roles', [ UsersController::class, 'rolesList' ] )->name( 'ns.dashboard.users.roles' ); +Route::get( '/users/roles/create', [ UsersController::class, 'createRole' ] )->name( 'ns.dashboard.users.roles-create' ); +Route::get( '/users/roles/edit/{role}', [ UsersController::class, 'editRole' ] )->name( 'ns.dashboard.users.roles-edit' ); diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php index 998a90543..5b153dbc0 100644 --- a/tests/CreatesApplication.php +++ b/tests/CreatesApplication.php @@ -15,12 +15,12 @@ public function createApplication() { $app = require __DIR__ . '/../bootstrap/app.php'; - $app->make(Kernel::class)->bootstrap(); + $app->make( Kernel::class )->bootstrap(); return $app; } - public function defineApp($app) + public function defineApp( $app ) { $this->app = $app; } diff --git a/tests/Feature/AuthenticationTest.php b/tests/Feature/AuthenticationTest.php index 0633e076b..c8097f105 100644 --- a/tests/Feature/AuthenticationTest.php +++ b/tests/Feature/AuthenticationTest.php @@ -19,8 +19,8 @@ class AuthenticationTest extends TestCase */ public function testCanSeeLoginPage() { - $response = $this->get('/sign-in'); - $response->assertStatus(200); + $response = $this->get( '/sign-in' ); + $response->assertStatus( 200 ); } /** @@ -30,8 +30,8 @@ public function testCanSeeLoginPage() */ public function testCanSeeRegistrationPage() { - $response = $this->get('/sign-up'); - $response->assertStatus(200); + $response = $this->get( '/sign-up' ); + $response->assertStatus( 200 ); } /** @@ -43,8 +43,8 @@ public function testCanSeeRegistrationPage() */ public function testCanSeeRecovery() { - $response = $this->get('/sign-up'); - $response->assertStatus(200); + $response = $this->get( '/sign-up' ); + $response->assertStatus( 200 ); } /** @@ -62,48 +62,48 @@ public function testCanSeeActivateUser() */ $user = User::first(); $user->active = false; - $user->activation_token = Str::random(10); + $user->activation_token = Str::random( 10 ); $user->activation_expiration = now()->addDay(); $user->save(); - $response = $this->get('/auth/activate/' . $user->id . '/' . $user->activation_token); - $response->assertRedirect(ns()->route('ns.login')); + $response = $this->get( '/auth/activate/' . $user->id . '/' . $user->activation_token ); + $response->assertRedirect( ns()->route( 'ns.login' ) ); /** * Step 2: Check for invalid token */ $user = User::first(); $user->active = false; - $user->activation_token = Str::random(10); + $user->activation_token = Str::random( 10 ); $user->activation_expiration = now()->addDay(); $user->save(); - $response = $this->get('/auth/activate/' . $user->id . '/' . Str::random(10)); - $response->assertRedirect(ns()->route('ns.login')); + $response = $this->get( '/auth/activate/' . $user->id . '/' . Str::random( 10 ) ); + $response->assertRedirect( ns()->route( 'ns.login' ) ); /** * Step 3: Check for expired token */ $user = User::first(); $user->active = false; - $user->activation_token = Str::random(10); - $user->activation_expiration = now()->subDays(5); + $user->activation_token = Str::random( 10 ); + $user->activation_expiration = now()->subDays( 5 ); $user->save(); - $response = $this->get('/auth/activate/' . $user->id . '/' . $user->activation_token); - $response->assertRedirect(ns()->route('ns.login')); + $response = $this->get( '/auth/activate/' . $user->id . '/' . $user->activation_token ); + $response->assertRedirect( ns()->route( 'ns.login' ) ); /** * Step 4: Check for active user */ $user = User::first(); $user->active = true; - $user->activation_token = Str::random(10); - $user->activation_expiration = now()->subDays(5); + $user->activation_token = Str::random( 10 ); + $user->activation_expiration = now()->subDays( 5 ); $user->save(); - $response = $this->get('/auth/activate/' . $user->id . '/' . $user->activation_token); - $response->assertRedirect(ns()->route('ns.login')); + $response = $this->get( '/auth/activate/' . $user->id . '/' . $user->activation_token ); + $response->assertRedirect( ns()->route( 'ns.login' ) ); } /** @@ -115,8 +115,8 @@ public function testCanSeeActivateUser() */ public function testCanSeePasswordLostForm() { - $response = $this->get('/password-lost'); - $response->assertStatus(200); + $response = $this->get( '/password-lost' ); + $response->assertStatus( 200 ); } /** @@ -130,34 +130,42 @@ public function testCanSeeNewPasswordForm() { $user = User::first(); $user->active = true; - $user->activation_token = Str::random(10); - $user->activation_expiration = now()->subDays(5); + $user->activation_token = Str::random( 10 ); + $user->activation_expiration = now()->subDays( 5 ); $user->save(); $path = '/new-password/' . $user->id . '/' . $user->activation_token; - $response = $this->get($path); - $response->assertSee('The token has expired. Please request a new activation token.'); - $response->assertStatus(200); + $response = $this->get( $path ); + $response->assertSee( 'The token has expired. Please request a new activation token.' ); + $response->assertStatus( 200 ); + } + + public function generateUsername($minLength = 10) { + $username = $this->faker->userName(); + while(strlen($username) < $minLength) { + $username .= $this->faker->randomLetter(); + } + return $username; } public function testSubmitRegistrationForm() { - $password = $this->faker->password(); - $registration_validated = ns()->option->get('ns_registration_validated', 'yes'); + $password = $this->faker->password(8); + $registration_validated = ns()->option->get( 'ns_registration_validated', 'yes' ); /** * Step 1: test registration with * valid informations */ - ns()->option->set('ns_registration_enabled', 'yes'); + ns()->option->set( 'ns_registration_enabled', 'yes' ); - $username = $this->faker->userName(); + $username = $this->generateUsername(6); $email = $this->faker->email(); $response = $this - ->withSession([]) - ->withHeader('X-CSRF-TOKEN', csrf_token()) + ->withSession( [] ) + ->withHeader( 'X-CSRF-TOKEN', csrf_token() ) ->post( '/auth/sign-up', [ 'username' => $username, @@ -167,30 +175,30 @@ public function testSubmitRegistrationForm() ] ); - $response->assertRedirect(route('ns.login', [ + $response->assertRedirect( route( 'ns.login', [ 'status' => 'success', 'message' => $registration_validated === 'no' ? - __('Your Account has been successfully created.') : - __('Your Account has been created but requires email validation.'), - ])); + __( 'Your Account has been successfully created.' ) : + __( 'Your Account has been created but requires email validation.' ), + ] ) ); /** * Step 1: we'll verify if the user * attribute are created after his registration. */ - $user = User::where('email', $email)->first(); + $user = User::where( 'email', $email )->first(); - $this->assertTrue($user->attribute()->count() > 0, 'The created user doesn\'t have any attribute.'); + $this->assertTrue( $user->attribute()->count() > 0, 'The created user doesn\'t have any attribute.' ); /** * Step 2: test with invalid password and email * valid informations */ - ns()->option->set('ns_registration_enabled', 'yes'); + ns()->option->set( 'ns_registration_enabled', 'yes' ); $response = $this - ->withSession([]) - ->withHeader('X-CSRF-TOKEN', csrf_token()) + ->withSession( [] ) + ->withHeader( 'X-CSRF-TOKEN', csrf_token() ) ->post( '/auth/sign-up', [ 'username' => $this->faker->userName(), @@ -200,19 +208,19 @@ public function testSubmitRegistrationForm() ] ); - $response->assertRedirect(ns()->route('ns.register')); - $response->assertSessionHasErrors([ + $response->assertRedirect( ns()->route( 'ns.register' ) ); + $response->assertSessionHasErrors( [ 'email' => 'The email field must be a valid email address.', - ]); + ] ); /** * Step 3: test with invalid password */ - ns()->option->set('ns_registration_enabled', 'yes'); + ns()->option->set( 'ns_registration_enabled', 'yes' ); $response = $this - ->withSession([]) - ->withHeader('X-CSRF-TOKEN', csrf_token()) + ->withSession( [] ) + ->withHeader( 'X-CSRF-TOKEN', csrf_token() ) ->post( '/auth/sign-up', [ 'username' => $this->faker->userName(), @@ -222,10 +230,10 @@ public function testSubmitRegistrationForm() ] ); - $response->assertRedirect(ns()->route('ns.register')); - $response->assertSessionHasErrors([ + $response->assertRedirect( ns()->route( 'ns.register' ) ); + $response->assertSessionHasErrors( [ 'password_confirm' => 'The password confirm field must match password.', - ]); + ] ); } public function testSubmitPasswordRecoveryForm() @@ -234,38 +242,38 @@ public function testSubmitPasswordRecoveryForm() * Step 1: with recovery enabled * we'll launch recovery process */ - ns()->option->set('ns_recovery_enabled', 'yes'); + ns()->option->set( 'ns_recovery_enabled', 'yes' ); $user = User::first(); $response = $this - ->withSession([]) - ->withHeader('X-CSRF-TOKEN', csrf_token()) - ->post('/auth/password-lost', [ + ->withSession( [] ) + ->withHeader( 'X-CSRF-TOKEN', csrf_token() ) + ->post( '/auth/password-lost', [ 'email' => $user->email, - ]); + ] ); - $response->assertJsonPath('data.redirectTo', route('ns.intermediate', [ + $response->assertJsonPath( 'data.redirectTo', route( 'ns.intermediate', [ 'route' => 'ns.login', 'from' => 'ns.password-lost', - ])); + ] ) ); /** * Step 2: with recovery disabled * we'll launch recovery process */ - ns()->option->set('ns_recovery_enabled', 'no'); + ns()->option->set( 'ns_recovery_enabled', 'no' ); $user = User::first(); $response = $this - ->withSession([]) - ->withHeader('X-CSRF-TOKEN', csrf_token()) - ->post('/auth/password-lost', [ + ->withSession( [] ) + ->withHeader( 'X-CSRF-TOKEN', csrf_token() ) + ->post( '/auth/password-lost', [ 'email' => $user->email, - ]); + ] ); - $response->assertSee('The recovery has been explicitly disabled'); + $response->assertSee( 'The recovery has been explicitly disabled' ); } public function testSubmitLoginForm() @@ -274,37 +282,37 @@ public function testSubmitLoginForm() * Step 1: With exact password */ $user = User::first(); - $user->password = Hash::make(123456); + $user->password = Hash::make( 123456 ); $user->save(); $response = $this - ->withSession([]) - ->withHeader('X-CSRF-TOKEN', csrf_token()) - ->post('/auth/sign-in', [ + ->withSession( [] ) + ->withHeader( 'X-CSRF-TOKEN', csrf_token() ) + ->post( '/auth/sign-in', [ 'username' => $user->username, 'password' => 123456, '_token' => csrf_token(), - ]); + ] ); - $response->assertRedirect(ns()->route('ns.welcome')); + $response->assertRedirect( ns()->route( 'ns.welcome' ) ); /** * Step 2: With wrong password */ $user = User::first(); - $user->password = Hash::make(123456); + $user->password = Hash::make( 123456 ); $user->save(); $response = $this - ->withSession([]) - ->withHeader('X-CSRF-TOKEN', csrf_token()) - ->post('/auth/sign-in', [ + ->withSession( [] ) + ->withHeader( 'X-CSRF-TOKEN', csrf_token() ) + ->post( '/auth/sign-in', [ 'username' => $user->username, 'password' => 654321, '_token' => csrf_token(), - ]); + ] ); - $response->assertRedirect(ns()->route('ns.login')); + $response->assertRedirect( ns()->route( 'ns.login' ) ); } public function testSubmitNewPasswordForm() @@ -312,11 +320,11 @@ public function testSubmitNewPasswordForm() /** * Step 1: Attempt for account in normal condition */ - ns()->option->set('ns_recovery_enabled', 'yes'); + ns()->option->set( 'ns_recovery_enabled', 'yes' ); $user = User::first(); $user->active = true; - $user->activation_token = Str::random(10); + $user->activation_token = Str::random( 10 ); $user->activation_expiration = ns()->date->addDay(); $user->save(); @@ -324,8 +332,8 @@ public function testSubmitNewPasswordForm() $password = '123456'; $response = $this - ->withSession([]) - ->withHeader('X-CSRF-TOKEN', csrf_token()) + ->withSession( [] ) + ->withHeader( 'X-CSRF-TOKEN', csrf_token() ) ->post( 'auth/new-password/' . $user->id . '/' . $user->activation_token, [ 'password' => $password, @@ -333,27 +341,27 @@ public function testSubmitNewPasswordForm() ] ); - $response->assertJsonPath('data.redirectTo', route('ns.intermediate', [ + $response->assertJsonPath( 'data.redirectTo', route( 'ns.intermediate', [ 'route' => 'ns.login', 'from' => 'ns.password-updated', - ])); + ] ) ); /** * Step 2: Attempt for account recovery when it's disabled */ - ns()->option->set('ns_recovery_enabled', 'no'); + ns()->option->set( 'ns_recovery_enabled', 'no' ); $user = User::first(); $user->active = true; - $user->activation_token = Str::random(10); + $user->activation_token = Str::random( 10 ); $user->activation_expiration = ns()->date->addDay(); $user->save(); $password = $this->faker->password(); $response = $this - ->withSession([]) - ->withHeader('X-CSRF-TOKEN', csrf_token()) + ->withSession( [] ) + ->withHeader( 'X-CSRF-TOKEN', csrf_token() ) ->post( 'auth/new-password/' . $user->id . '/' . $user->activation_token, [ 'password' => $password, @@ -361,6 +369,6 @@ public function testSubmitNewPasswordForm() ] ); - $response->assertSee('The recovery has been explicitly disabled.'); + $response->assertSee( 'The recovery has been explicitly disabled.' ); } } diff --git a/tests/Feature/CanSeeReportsTest.php b/tests/Feature/CanSeeReportsTest.php index 7640e9272..6e571b216 100644 --- a/tests/Feature/CanSeeReportsTest.php +++ b/tests/Feature/CanSeeReportsTest.php @@ -20,7 +20,7 @@ class CanSeeReportsTest extends TestCase public function test_canSeeReports() { Auth::loginUsingId( - Role::namespace('admin')->users->first()->id + Role::namespace( 'admin' )->users->first()->id ); $this->attemptSeeReports(); diff --git a/tests/Feature/CashRegisterActionsTest.php b/tests/Feature/CashRegisterActionsTest.php index d16fd6961..6ab80d7e4 100644 --- a/tests/Feature/CashRegisterActionsTest.php +++ b/tests/Feature/CashRegisterActionsTest.php @@ -19,7 +19,7 @@ class CashRegisterActionsTest extends TestCase public function testCreateCashRegisterWithActions() { Sanctum::actingAs( - Role::namespace('admin')->users->first(), + Role::namespace( 'admin' )->users->first(), ['*'] ); diff --git a/tests/Feature/CheckMathLibraryTest.php b/tests/Feature/CheckMathLibraryTest.php index 695adb74a..617fa48b7 100644 --- a/tests/Feature/CheckMathLibraryTest.php +++ b/tests/Feature/CheckMathLibraryTest.php @@ -13,48 +13,48 @@ class CheckMathLibraryTest extends TestCase */ public function test_decimal_precision() { - ns()->option->set('ns_currency_precision', 5); + ns()->option->set( 'ns_currency_precision', 5 ); $this->assertEquals( - ns()->currency->define(0.1) - ->additionateBy(0.2) + ns()->currency->define( 0.1 ) + ->additionateBy( 0.2 ) ->getRaw(), (float) 0.3 ); $this->assertEquals( - ns()->currency->define(0.1) - ->additionateBy(0.2) - ->multipliedBy(4) + ns()->currency->define( 0.1 ) + ->additionateBy( 0.2 ) + ->multipliedBy( 4 ) ->getRaw(), (float) 1.2 ); $this->assertEquals( - ns()->currency->define(0.25) + ns()->currency->define( 0.25 ) ->getRaw(), (float) 0.25 ); $this->assertEquals( - ns()->currency->define(0.001) - ->subtractBy(0.00093) + ns()->currency->define( 0.001 ) + ->subtractBy( 0.00093 ) ->getRaw(), (float) 0.00007 ); - ns()->option->set('ns_currency_precision', 0); + ns()->option->set( 'ns_currency_precision', 0 ); $this->assertEquals( - ns()->currency->define(0.2) - ->subtractBy(0.1) + ns()->currency->define( 0.2 ) + ->subtractBy( 0.1 ) ->getRaw(), (float) 1 ); $this->assertEquals( - ns()->currency->define(5.25) - ->subtractBy(3.75) + ns()->currency->define( 5.25 ) + ->subtractBy( 3.75 ) ->getRaw(), (float) 2 ); diff --git a/tests/Feature/CombiningProductsTest.php b/tests/Feature/CombiningProductsTest.php index 23896671b..2b58cb9a6 100644 --- a/tests/Feature/CombiningProductsTest.php +++ b/tests/Feature/CombiningProductsTest.php @@ -19,7 +19,7 @@ class CombiningProductsTest extends TestCase public function test_combined_products() { Sanctum::actingAs( - Role::namespace('admin')->users->first(), + Role::namespace( 'admin' )->users->first(), ['*'] ); diff --git a/tests/Feature/ComputeTaxesFromSales.php b/tests/Feature/ComputeTaxesFromSales.php index cc57d1a24..3d1852eb8 100644 --- a/tests/Feature/ComputeTaxesFromSales.php +++ b/tests/Feature/ComputeTaxesFromSales.php @@ -22,7 +22,7 @@ class ComputeTaxesFromSales extends TestCase public function test_product_tax_variable() { Sanctum::actingAs( - Role::namespace('admin')->users->first(), + Role::namespace( 'admin' )->users->first(), ['*'] ); @@ -32,7 +32,7 @@ public function test_product_tax_variable() public function test_tax_products_vat() { Sanctum::actingAs( - Role::namespace('admin')->users->first(), + Role::namespace( 'admin' )->users->first(), ['*'] ); @@ -42,7 +42,7 @@ public function test_tax_products_vat() public function test_variable_vat() { Sanctum::actingAs( - Role::namespace('admin')->users->first(), + Role::namespace( 'admin' )->users->first(), ['*'] ); @@ -52,7 +52,7 @@ public function test_variable_vat() public function test_flat_expense() { Sanctum::actingAs( - Role::namespace('admin')->users->first(), + Role::namespace( 'admin' )->users->first(), ['*'] ); @@ -67,7 +67,7 @@ public function test_flat_expense() public function test_inclusive_tax() { Sanctum::actingAs( - Role::namespace('admin')->users->first(), + Role::namespace( 'admin' )->users->first(), ['*'] ); @@ -82,7 +82,7 @@ public function test_inclusive_tax() public function test_exclusive_tax() { Sanctum::actingAs( - Role::namespace('admin')->users->first(), + Role::namespace( 'admin' )->users->first(), ['*'] ); diff --git a/tests/Feature/CreateCustomerTest.php b/tests/Feature/CreateCustomerTest.php index 2b1c47937..0c3e36e39 100644 --- a/tests/Feature/CreateCustomerTest.php +++ b/tests/Feature/CreateCustomerTest.php @@ -19,7 +19,7 @@ public function testCreateCustomers() { $this->attemptAuthenticate(); - for ($i = 0; $i < 5; $i++) { + for ( $i = 0; $i < 5; $i++ ) { $this->attemptCreateCustomerWithInitialTransactions(); } } diff --git a/tests/Feature/CreateOrderPaidWithCustomerCredit.php b/tests/Feature/CreateOrderPaidWithCustomerCredit.php index 8105d5fc0..668320997 100644 --- a/tests/Feature/CreateOrderPaidWithCustomerCredit.php +++ b/tests/Feature/CreateOrderPaidWithCustomerCredit.php @@ -27,50 +27,50 @@ class CreateOrderPaidWithCustomerCredit extends TestCase public function test_make_order_on_credit() { Sanctum::actingAs( - Role::namespace('admin')->users->first(), + Role::namespace( 'admin' )->users->first(), ['*'] ); /** * @var CurrencyService */ - $currency = app()->make(CurrencyService::class); + $currency = app()->make( CurrencyService::class ); $faker = Factory::create(); $customer = Customer::first(); $customer->credit_limit_amount = 5; $customer->save(); - $products = Product::with('unit_quantities')->get()->shuffle()->take(3); - $products = $products->map(function ($product) use ($faker) { - $unitElement = $faker->randomElement($product->unit_quantities); + $products = Product::with( 'unit_quantities' )->get()->shuffle()->take( 3 ); + $products = $products->map( function ( $product ) use ( $faker ) { + $unitElement = $faker->randomElement( $product->unit_quantities ); - $data = array_merge([ + $data = array_merge( [ 'name' => $product->name, - 'quantity' => $faker->numberBetween(1, 10), + 'quantity' => $faker->numberBetween( 1, 10 ), 'unit_price' => $unitElement->sale_price, 'tax_type' => 'inclusive', 'tax_group_id' => 1, 'unit_id' => $unitElement->unit_id, - ], $this->customProductParams); + ], $this->customProductParams ); - if ($faker->randomElement([ true ])) { + if ( $faker->randomElement( [ true ] ) ) { $data[ 'product_id' ] = $product->id; $data[ 'unit_quantity_id' ] = $unitElement->id; } return $data; - })->filter(function ($product) { + } )->filter( function ( $product ) { return $product[ 'quantity' ] > 0; - }); + } ); - $shippingFees = $faker->randomElement([10, 15, 20, 25, 30, 35, 40]); - $subtotal = ns()->currency->getRaw($products->map(function ($product) use ($currency) { + $shippingFees = $faker->randomElement( [10, 15, 20, 25, 30, 35, 40] ); + $subtotal = ns()->currency->getRaw( $products->map( function ( $product ) use ( $currency ) { return $currency - ->define($product[ 'unit_price' ]) - ->multiplyBy($product[ 'quantity' ]) + ->define( $product[ 'unit_price' ] ) + ->multiplyBy( $product[ 'quantity' ] ) ->getRaw(); - })->sum()); + } )->sum() ); $orderDetails = [ 'customer_id' => $customer->id, @@ -85,78 +85,78 @@ public function test_make_order_on_credit() */ $this->defaultProcessing = true; - $response = $this->processOrders($orderDetails, function ($response, $data) { - $order = Order::find($data[ 'data' ][ 'order' ][ 'id' ]); - }); + $response = $this->processOrders( $orderDetails, function ( $response, $data ) { + $order = Order::find( $data[ 'data' ][ 'order' ][ 'id' ] ); + } ); $this->defaultProcessing = false; } - public function processOrders(array $orderDetails, callable $callback = null) + public function processOrders( array $orderDetails, ?callable $callback = null ) { $responses = []; /** * @var CurrencyService */ - $currency = app()->make(CurrencyService::class); + $currency = app()->make( CurrencyService::class ); $faker = Factory::create(); - for ($i = 0; $i < $this->count; $i++) { + for ( $i = 0; $i < $this->count; $i++ ) { $singleResponse = []; - $products = Product::with('unit_quantities')->get()->shuffle()->take(3); - $shippingFees = $faker->randomElement([10, 15, 20, 25, 30, 35, 40]); - $discountRate = $faker->numberBetween(0, 5); + $products = Product::with( 'unit_quantities' )->get()->shuffle()->take( 3 ); + $shippingFees = $faker->randomElement( [10, 15, 20, 25, 30, 35, 40] ); + $discountRate = $faker->numberBetween( 0, 5 ); - $products = $products->map(function ($product) use ($faker) { - $unitElement = $faker->randomElement($product->unit_quantities); + $products = $products->map( function ( $product ) use ( $faker ) { + $unitElement = $faker->randomElement( $product->unit_quantities ); - $data = array_merge([ + $data = array_merge( [ 'name' => 'Fees', - 'quantity' => $faker->numberBetween(1, 10), + 'quantity' => $faker->numberBetween( 1, 10 ), 'unit_price' => $unitElement->sale_price, 'tax_type' => 'inclusive', 'tax_group_id' => 1, 'unit_id' => $unitElement->unit_id, - ], $this->customProductParams); + ], $this->customProductParams ); - if ($faker->randomElement([ false, true ])) { + if ( $faker->randomElement( [ false, true ] ) ) { $data[ 'product_id' ] = $product->id; $data[ 'unit_quantity_id' ] = $unitElement->id; } return $data; - })->filter(function ($product) { + } )->filter( function ( $product ) { return $product[ 'quantity' ] > 0; - }); + } ); - $subtotal = ns()->currency->getRaw($products->map(function ($product) use ($currency) { + $subtotal = ns()->currency->getRaw( $products->map( function ( $product ) use ( $currency ) { return $currency - ->define($product[ 'unit_price' ]) - ->multiplyBy($product[ 'quantity' ]) + ->define( $product[ 'unit_price' ] ) + ->multiplyBy( $product[ 'quantity' ] ) ->getRaw(); - })->sum()); + } )->sum() ); $allCoupons = []; $totalCoupons = 0; $discount = [ - 'type' => $faker->randomElement([ 'percentage', 'flat' ]), + 'type' => $faker->randomElement( [ 'percentage', 'flat' ] ), 'value' => 0, 'rate' => 0, ]; - $discountCoupons = $currency->define($discount[ 'value' ]) - ->additionateBy($allCoupons[0][ 'value' ] ?? 0) + $discountCoupons = $currency->define( $discount[ 'value' ] ) + ->additionateBy( $allCoupons[0][ 'value' ] ?? 0 ) ->getRaw(); $dateString = ns()->date->startOfDay()->addHours( - $faker->numberBetween(0, 23) - )->format('Y-m-d H:m:s'); + $faker->numberBetween( 0, 23 ) + )->format( 'Y-m-d H:m:s' ); $customer = Customer::get()->random(); - $orderData = array_merge([ + $orderData = array_merge( [ 'customer_id' => $customer->id, 'type' => [ 'identifier' => 'takeaway' ], 'discount_type' => $discount[ 'type' ], @@ -175,9 +175,9 @@ public function processOrders(array $orderDetails, callable $callback = null) 'country' => 'United State Seattle', ], ], - 'author' => ! empty($this->users) // we want to randomise the users - ? collect($this->users)->suffle()->first() - : User::get('id')->pluck('id')->shuffle()->first(), + 'author' => ! empty( $this->users ) // we want to randomise the users + ? collect( $this->users )->suffle()->first() + : User::get( 'id' )->pluck( 'id' )->shuffle()->first(), 'coupons' => $allCoupons, 'subtotal' => $subtotal, 'shipping' => $shippingFees, @@ -185,23 +185,23 @@ public function processOrders(array $orderDetails, callable $callback = null) 'payments' => $this->shouldMakePayment ? [ [ 'identifier' => 'cash-payment', - 'value' => $currency->define($subtotal) - ->additionateBy($shippingFees) + 'value' => $currency->define( $subtotal ) + ->additionateBy( $shippingFees ) ->subtractBy( $discountCoupons ) ->getRaw(), ], ] : [], - ], $orderDetails); + ], $orderDetails ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $orderData); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $orderData ); - $amount = ns()->currency->define(5)->format(); + $amount = ns()->currency->define( 5 )->format(); - $response->assertStatus(403); - $response->assertJsonPath('message', 'By proceeding this order, the customer will exceed the maximum credit allowed for his account: ' . $amount . '.'); + $response->assertStatus( 403 ); + $response->assertJsonPath( 'message', 'By proceeding this order, the customer will exceed the maximum credit allowed for his account: ' . $amount . '.' ); } return $responses; diff --git a/tests/Feature/CreateOrderTest.php b/tests/Feature/CreateOrderTest.php index 3764ede74..089e26354 100644 --- a/tests/Feature/CreateOrderTest.php +++ b/tests/Feature/CreateOrderTest.php @@ -16,17 +16,17 @@ class CreateOrderTest extends TestCase * * @return void */ - private function testPostingOrder($callback = null) + private function testPostingOrder( $callback = null ) { $this->count = 2; $this->totalDaysInterval = 3; - if ($this->defaultProcessing) { + if ( $this->defaultProcessing ) { $this->attemptAuthenticate(); - return $this->attemptPostOrder($callback); + return $this->attemptPostOrder( $callback ); } else { - $this->assertTrue(true); // because we haven't performed any test. + $this->assertTrue( true ); // because we haven't performed any test. } } @@ -70,9 +70,9 @@ public function testOrderCreatedForCustomer() $this->attemptCreateOrderPaidWithCustomerBalance(); } - public function testCreateOrderWithNoPayment($callback = null) + public function testCreateOrderWithNoPayment( $callback = null ) { - if ($this->defaultProcessing) { + if ( $this->defaultProcessing ) { $this->attemptAuthenticate(); $this->count = 1; @@ -85,11 +85,11 @@ public function testCreateOrderWithNoPayment($callback = null) 'discount' => 0, ]; - $responses = $this->attemptPostOrder($callback); + $responses = $this->attemptPostOrder( $callback ); - $this->assertEquals(Order::PAYMENT_UNPAID, $responses[0][0][ 'order-creation' ][ 'data' ][ 'order' ][ 'payment_status' ]); + $this->assertEquals( Order::PAYMENT_UNPAID, $responses[0][0][ 'order-creation' ][ 'data' ][ 'order' ][ 'payment_status' ] ); } else { - $this->assertTrue(true); // because we haven't performed any test. + $this->assertTrue( true ); // because we haven't performed any test. } } diff --git a/tests/Feature/CreateProductTest.php b/tests/Feature/CreateProductTest.php index da798d838..961ef190d 100644 --- a/tests/Feature/CreateProductTest.php +++ b/tests/Feature/CreateProductTest.php @@ -18,7 +18,7 @@ public function testCreateGroupedProducts() { $this->attemptAuthenticate(); - for ($i = 0; $i < 5; $i++) { + for ( $i = 0; $i < 5; $i++ ) { $this->attemptCreateGroupedProduct(); } } @@ -41,7 +41,7 @@ public function testCreateProducts() { $this->attemptAuthenticate(); - for ($i = 0; $i <= 3; $i++) { + for ( $i = 0; $i <= 3; $i++ ) { $this->attemptSetProduct(); } @@ -66,4 +66,10 @@ public function testNotSearchableAreSearchable() $this->attemptAuthenticate(); $this->attemptNotSearchableAreSearchable(); } + + public function testProductConversion() + { + $this->attemptAuthenticate(); + $this->attemptProductConversion(); + } } diff --git a/tests/Feature/CreateTestDatabaseSQLite.php b/tests/Feature/CreateTestDatabaseSQLite.php index 0d2fdfebc..68230b0e7 100644 --- a/tests/Feature/CreateTestDatabaseSQLite.php +++ b/tests/Feature/CreateTestDatabaseSQLite.php @@ -13,8 +13,8 @@ class CreateTestDatabaseSQLite extends TestCase */ public function test_create_sql_database() { - file_put_contents(base_path('tests/database.sqlite'), ''); + file_put_contents( base_path( 'tests/database.sqlite' ), '' ); - $this->assertTrue(true); + $this->assertTrue( true ); } } diff --git a/tests/Feature/CreateUnitTest.php b/tests/Feature/CreateUnitTest.php index b2456c348..8d912dbb4 100644 --- a/tests/Feature/CreateUnitTest.php +++ b/tests/Feature/CreateUnitTest.php @@ -22,8 +22,8 @@ public function testCreateUnits() /** * We'll skip the execution from here. */ - if (! $this->execute) { - return $this->assertTrue(true); + if ( ! $this->execute ) { + return $this->assertTrue( true ); } $this->attemptAuthenticate(); diff --git a/tests/Feature/CreateUserTest.php b/tests/Feature/CreateUserTest.php index db9d692da..159559666 100644 --- a/tests/Feature/CreateUserTest.php +++ b/tests/Feature/CreateUserTest.php @@ -40,10 +40,10 @@ public function test_create_users() { $this->attemptAuthenticate(); - $this->users = app()->make(UsersService::class); + $this->users = app()->make( UsersService::class ); - return Role::get()->map(function ($role) { - $password = Hash::make(Str::random(20)); + return Role::get()->map( function ( $role ) { + $password = Hash::make( Str::random( 20 ) ); $configuration = [ 'username' => $this->faker->username(), @@ -56,25 +56,25 @@ public function test_create_users() ], ]; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('post', '/api/crud/ns.users', $configuration); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'post', '/api/crud/ns.users', $configuration ); - $response->assertJsonPath('status', 'success'); - $result = json_decode($response->getContent()); + $response->assertJsonPath( 'status', 'success' ); + $result = json_decode( $response->getContent() ); /** * Step 1: create user with same username * but a different email */ try { - $this->users->setUser([ + $this->users->setUser( [ 'username' => $configuration[ 'username' ], 'email' => $this->faker->email(), 'roles' => $configuration[ 'general' ][ 'roles' ], 'active' => true, - ]); - } catch (Exception $exception) { - $this->assertTrue(strstr($exception->getMessage(), 'username') !== false); + ] ); + } catch ( Exception $exception ) { + $this->assertTrue( strstr( $exception->getMessage(), 'username' ) !== false ); } /** @@ -82,14 +82,14 @@ public function test_create_users() * but a different username */ try { - $this->users->setUser([ + $this->users->setUser( [ 'username' => $this->faker->userName(), 'email' => $configuration[ 'general' ][ 'email' ], 'roles' => $configuration[ 'general' ][ 'roles' ], 'active' => true, - ]); - } catch (Exception $exception) { - $this->assertTrue(strstr($exception->getMessage(), 'email') !== false); + ] ); + } catch ( Exception $exception ) { + $this->assertTrue( strstr( $exception->getMessage(), 'email' ) !== false ); } /** @@ -106,14 +106,14 @@ public function test_create_users() ], ]; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('put', '/api/crud/ns.users/' . $result->data->entry->id, $configuration); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'put', '/api/crud/ns.users/' . $result->data->entry->id, $configuration ); - $response->assertJsonPath('status', 'success'); - $result = json_decode($response->getContent()); + $response->assertJsonPath( 'status', 'success' ); + $result = json_decode( $response->getContent() ); return $result->data->entry; - }); + } ); } /** @@ -121,49 +121,49 @@ public function test_create_users() */ public function test_delete_users() { - Role::get()->map(function (Role $role) { - $role->users()->limit(1)->get()->each(function (User $user) { - $this->attemptAuthenticate($user); + Role::get()->map( function ( Role $role ) { + $role->users()->limit( 1 )->get()->each( function ( User $user ) { + $this->attemptAuthenticate( $user ); /** * Step 1: attempt to delete himself */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('delete', '/api/crud/ns.users/' . $user->id); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'delete', '/api/crud/ns.users/' . $user->id ); - $response->assertStatus(403); - }); - }); + $response->assertStatus( 403 ); + } ); + } ); - $user = Role::namespace(Role::ADMIN)->users()->first(); + $user = Role::namespace( Role::ADMIN )->users()->first(); /** * Step 2: try to delete a user who has some sales */ - $order = Order::where('author', '<>', $user->id)->first(); + $order = Order::where( 'author', '<>', $user->id )->first(); - if ($order instanceof Order) { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('delete', '/api/crud/ns.users/' . $order->author); + if ( $order instanceof Order ) { + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'delete', '/api/crud/ns.users/' . $order->author ); - $response->assertStatus(403); + $response->assertStatus( 403 ); } } private function getValidRoutes() { - return collect(Route::getRoutes())->filter(function ($route) { + return collect( Route::getRoutes() )->filter( function ( $route ) { $uri = $route->uri(); /** * For now we'll only test dashboard routes */ - if (strstr($uri, 'dashboard') && ! strstr($uri, 'api/')) { + if ( strstr( $uri, 'dashboard' ) && ! strstr( $uri, 'api/' ) ) { return true; } return false; - }); + } ); } /** @@ -177,10 +177,10 @@ public function test_explorable_routes_chunk_1() * to cause a failure because of the email used */ $validRoutes = $this->getValidRoutes(); - $chunk = count($validRoutes) / 5; - $routes = collect($validRoutes)->chunk($chunk); + $chunk = count( $validRoutes ) / 5; + $routes = collect( $validRoutes )->chunk( $chunk ); - $this->attemptAllRoutes($user, $routes[0]); + $this->attemptAllRoutes( $user, $routes[0] ); } /** @@ -194,10 +194,10 @@ public function test_explorable_routes_chunk_2() * to cause a failure because of the email used */ $validRoutes = $this->getValidRoutes(); - $chunk = count($validRoutes) / 5; - $routes = collect($validRoutes)->chunk($chunk); + $chunk = count( $validRoutes ) / 5; + $routes = collect( $validRoutes )->chunk( $chunk ); - $this->attemptAllRoutes($user, $routes[1]); + $this->attemptAllRoutes( $user, $routes[1] ); } /** @@ -211,10 +211,10 @@ public function test_explorable_routes_chunk_3() * to cause a failure because of the email used */ $validRoutes = $this->getValidRoutes(); - $chunk = count($validRoutes) / 5; - $routes = collect($validRoutes)->chunk($chunk); + $chunk = count( $validRoutes ) / 5; + $routes = collect( $validRoutes )->chunk( $chunk ); - $this->attemptAllRoutes($user, $routes[2]); + $this->attemptAllRoutes( $user, $routes[2] ); } /** @@ -228,10 +228,10 @@ public function test_explorable_routes_chunk_4() * to cause a failure because of the email used */ $validRoutes = $this->getValidRoutes(); - $chunk = count($validRoutes) / 5; - $routes = collect($validRoutes)->chunk($chunk); + $chunk = count( $validRoutes ) / 5; + $routes = collect( $validRoutes )->chunk( $chunk ); - $this->attemptAllRoutes($user, $routes[3]); + $this->attemptAllRoutes( $user, $routes[3] ); } /** @@ -245,20 +245,20 @@ public function test_explorable_routes_chunk_5() * to cause a failure because of the email used */ $validRoutes = $this->getValidRoutes(); - $chunk = count($validRoutes) / 5; - $routes = collect($validRoutes)->chunk($chunk); + $chunk = count( $validRoutes ) / 5; + $routes = collect( $validRoutes )->chunk( $chunk ); - $this->attemptAllRoutes($user, $routes[4]); + $this->attemptAllRoutes( $user, $routes[4] ); } - private function attemptAllRoutes($user, $routes) + private function attemptAllRoutes( $user, $routes ) { $paramsModelBinding = [ '/\{customer\}|\{customerAccountHistory\}/' => function () { $customerAccountHistory = CustomerAccountHistory::first()->id; $customer = $customerAccountHistory->customer->id; - return compact('customerAccountHistory', 'customer'); + return compact( 'customerAccountHistory', 'customer' ); }, '/\{product\}/' => Product::class, '/\{provider\}/' => Provider::class, @@ -275,34 +275,34 @@ private function attemptAllRoutes($user, $routes) '/\{cashFlow\}/' => CashFlow::class, ]; - foreach ($routes as $route) { + foreach ( $routes as $route ) { $uri = $route->uri(); /** * For now we'll only test dashboard routes */ - if (strstr($uri, 'dashboard') && ! strstr($uri, 'api/')) { + if ( strstr( $uri, 'dashboard' ) && ! strstr( $uri, 'api/' ) ) { /** * For requests that doesn't support * any paremeters */ - foreach ($paramsModelBinding as $expression => $binding) { - if (preg_match($expression, $uri)) { - if (is_array($binding)) { + foreach ( $paramsModelBinding as $expression => $binding ) { + if ( preg_match( $expression, $uri ) ) { + if ( is_array( $binding ) ) { /** * We want to replace all argument * on the uri by the matching binding collection */ - foreach ($binding as $parameter => $value) { - $uri = preg_replace('/\{' . $parameter . '\}/', $value, $uri); + foreach ( $binding as $parameter => $value ) { + $uri = preg_replace( '/\{' . $parameter . '\}/', $value, $uri ); } - } elseif (is_string($binding)) { + } elseif ( is_string( $binding ) ) { /** * This are URI with a single parameter * that are replaced once the binding is resolved. */ $value = $binding::firstOrFail()->id; - $uri = preg_replace($expression, $value, $uri); + $uri = preg_replace( $expression, $value, $uri ); } break; @@ -314,16 +314,16 @@ private function attemptAllRoutes($user, $routes) * if some argument remains, we won't test * those routes. */ - if (preg_match('/\{(.+)\}/', $uri) === 0) { + if ( preg_match( '/\{(.+)\}/', $uri ) === 0 ) { $response = $this - ->actingAs($user) - ->json('GET', $uri); + ->actingAs( $user ) + ->json( 'GET', $uri ); $status = $response->baseResponse->getStatusCode(); $this->assertTrue( - in_array($status, [ 201, 200, 302, 403 ]), - 'Unsupported HTTP response :' . $status . ' uri:' . $uri . ' user role:' . $user->roles->map(fn($role) => $role->namespace)->join(',') + in_array( $status, [ 201, 200, 302, 403 ] ), + 'Unsupported HTTP response :' . $status . ' uri:' . $uri . ' user role:' . $user->roles->map( fn( $role ) => $role->namespace )->join( ',' ) ); } } diff --git a/tests/Feature/CrudEditEntitiesTest.php b/tests/Feature/CrudEditEntitiesTest.php index 15c3f845b..0d1ecc754 100644 --- a/tests/Feature/CrudEditEntitiesTest.php +++ b/tests/Feature/CrudEditEntitiesTest.php @@ -19,23 +19,23 @@ public function test_edit_crud_form() { $this->attemptAuthenticate(); - collect(Storage::disk('ns')->files('app/Crud')) - ->map(function ($fileName) { - $fileName = collect(explode('/', $fileName)); - $file = pathinfo($fileName->last()); + collect( Storage::disk( 'ns' )->files( 'app/Crud' ) ) + ->map( function ( $fileName ) { + $fileName = collect( explode( '/', $fileName ) ); + $file = pathinfo( $fileName->last() ); return 'App\\Crud\\' . $file[ 'filename' ]; - }) - ->each(function ($class) { + } ) + ->each( function ( $class ) { $object = new $class; - if (! empty($object->getNamespace())) { + if ( ! empty( $object->getNamespace() ) ) { $response = $this - ->withSession($this->app[ 'session' ]->all()) - ->json('GET', '/api/crud/' . $object->getNamespace() . '/form-config'); + ->withSession( $this->app[ 'session' ]->all() ) + ->json( 'GET', '/api/crud/' . $object->getNamespace() . '/form-config' ); $response->assertOk(); } - }); + } ); } } diff --git a/tests/Feature/CrudTest.php b/tests/Feature/CrudTest.php index f1f0a1321..1a907b6f5 100644 --- a/tests/Feature/CrudTest.php +++ b/tests/Feature/CrudTest.php @@ -19,10 +19,10 @@ public function testCrudComponents() { $this->attemptAuthenticate(); - $files = Storage::disk('ns')->allFiles('app/Crud'); + $files = Storage::disk( 'ns' )->allFiles( 'app/Crud' ); - foreach ($files as $file) { - $path = pathinfo($file); + foreach ( $files as $file ) { + $path = pathinfo( $file ); $class = 'App\Crud\\' . $path[ 'filename' ]; $object = new $class; $entries = $object->getEntries(); @@ -55,39 +55,39 @@ public function testCrudComponents() ], ]; - foreach ($apiRoutes as $config) { - if (isset($config[ 'slug' ])) { - $slug = str_replace('{namespace}', $object->getNamespace(), $config[ 'slug' ]); + foreach ( $apiRoutes as $config ) { + if ( isset( $config[ 'slug' ] ) ) { + $slug = str_replace( '{namespace}', $object->getNamespace(), $config[ 'slug' ] ); /** * In case we have an {id} on the slug * we'll replace that with the existing id */ - if (count($entries[ 'data' ]) > 0) { - $slug = str_replace('{id}', $entries[ 'data' ][0]->{'$id'}, $slug); - $slug = str_replace('{id?}', $entries[ 'data' ][0]->{'$id'}, $slug); + if ( count( $entries[ 'data' ] ) > 0 ) { + $slug = str_replace( '{id}', $entries[ 'data' ][0]->{'$id'}, $slug ); + $slug = str_replace( '{id?}', $entries[ 'data' ][0]->{'$id'}, $slug ); } /** * We shouldn't have any {id} or {id?} on * the URL to prevent deleting CRUD with no records. */ - if (preg_match('/\{id\?\}/', $slug)) { + if ( preg_match( '/\{id\?\}/', $slug ) ) { $response = $this - ->withSession($this->app[ 'session' ]->all()) - ->json(strtoupper($config[ 'verb' ]), '/api/' . $slug, [ + ->withSession( $this->app[ 'session' ]->all() ) + ->json( strtoupper( $config[ 'verb' ] ), '/api/' . $slug, [ 'entries' => [ 1 ], 'action' => 'unknown', - ]); + ] ); - if ($response->status() !== 200) { + if ( $response->status() !== 200 ) { $response->assertOk(); } } } } - $this->assertArrayHasKey('data', $entries, 'Crud Response'); + $this->assertArrayHasKey( 'data', $entries, 'Crud Response' ); } } } diff --git a/tests/Feature/ExceptionsTest.php b/tests/Feature/ExceptionsTest.php index 7b86f205a..1b35c4965 100644 --- a/tests/Feature/ExceptionsTest.php +++ b/tests/Feature/ExceptionsTest.php @@ -13,7 +13,7 @@ class ExceptionsTest extends TestCase */ public function testExceptionsOutput() { - collect([ + collect( [ \App\Exceptions\CoreException::class, \App\Exceptions\CoreVersionMismatchException::class, \App\Exceptions\MethodNotAllowedHttpException::class, @@ -23,10 +23,10 @@ public function testExceptionsOutput() \App\Exceptions\NotFoundException::class, \App\Exceptions\QueryException::class, \App\Exceptions\ValidationException::class, - ])->each(function ($class) { + ] )->each( function ( $class ) { $instance = new $class; - $response = $this->get('exceptions/' . $class); - $response->assertSee($instance->getMessage()); - }); + $response = $this->get( 'exceptions/' . $class ); + $response->assertSee( $instance->getMessage() ); + } ); } } diff --git a/tests/Feature/FieldsTest.php b/tests/Feature/FieldsTest.php index 37fb5cea2..253360ba5 100644 --- a/tests/Feature/FieldsTest.php +++ b/tests/Feature/FieldsTest.php @@ -21,10 +21,10 @@ public function testFieldsAndForms() { $this->attemptAuthenticate(); - $files = Storage::disk('ns')->files('app/Fields'); + $files = Storage::disk( 'ns' )->files( 'app/Fields' ); - foreach ($files as $file) { - $path = pathinfo($file); + foreach ( $files as $file ) { + $path = pathinfo( $file ); $class = 'App\Fields\\' . $path[ 'filename' ]; /** @@ -32,23 +32,23 @@ public function testFieldsAndForms() */ $object = new $class; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('get', '/api/fields/' . $class::getIdentifier()); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'get', '/api/fields/' . $class::getIdentifier() ); - $result = collect(json_decode($response->getContent())); + $result = collect( json_decode( $response->getContent() ) ); - if ($result->filter(fn($field) => isset($field->name))->count() !== $result->count()) { + if ( $result->filter( fn( $field ) => isset( $field->name ) )->count() !== $result->count() ) { $this->assertTrue( - $result->filter(fn($field) => isset($field->name))->count() === $result->count(), - sprintf('Some fields aren\'t corretly defined for the class %s.', $class) + $result->filter( fn( $field ) => isset( $field->name ) )->count() === $result->count(), + sprintf( 'Some fields aren\'t corretly defined for the class %s.', $class ) ); } } - $files = Storage::disk('ns')->files('app/Forms'); + $files = Storage::disk( 'ns' )->files( 'app/Forms' ); - foreach ($files as $file) { - $path = pathinfo($file); + foreach ( $files as $file ) { + $path = pathinfo( $file ); $class = 'App\Forms\\' . $path[ 'filename' ]; /** @@ -56,13 +56,13 @@ public function testFieldsAndForms() */ $object = new $class; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('get', '/api/forms/' . $object->getIdentifier()); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'get', '/api/forms/' . $object->getIdentifier() ); - $result = json_decode($response->getContent()); + $result = json_decode( $response->getContent() ); $this->assertTrue( - isset($result->tabs), + isset( $result->tabs ), sprintf( 'The form %s doesn\'t have tabs defined.', $object->getIdentifier() diff --git a/tests/Feature/HandlePermissionsManagement.php b/tests/Feature/HandlePermissionsManagement.php index 3c1b7b894..6a51c5c52 100644 --- a/tests/Feature/HandlePermissionsManagement.php +++ b/tests/Feature/HandlePermissionsManagement.php @@ -13,8 +13,8 @@ class HandlePermissionsManagement extends TestCase */ public function test_example() { - $response = $this->get('/'); + $response = $this->get( '/' ); - $response->assertStatus(200); + $response->assertStatus( 200 ); } } diff --git a/tests/Feature/HardResetTest.php b/tests/Feature/HardResetTest.php index f72fff31a..13f3054d6 100644 --- a/tests/Feature/HardResetTest.php +++ b/tests/Feature/HardResetTest.php @@ -15,21 +15,21 @@ class HardResetTest extends TestCase */ public function testHardResetSystem() { - Artisan::call('ns:reset --mode=hard'); + Artisan::call( 'ns:reset --mode=hard' ); - Artisan::call('ns:setup', [ - '--admin_username' => env('NS_RESET_USERNAME', 'admin'), - '--admin_email' => env('NS_RESET_MAIL', 'contact@nexopos.com'), - '--admin_password' => env('NS_RESET_PASSWORD', 123456), - '--store_name' => env('NS_RESET_APPNAME', 'NexoPOS'), - ]); + Artisan::call( 'ns:setup', [ + '--admin_username' => env( 'NS_RESET_USERNAME', 'admin' ), + '--admin_email' => env( 'NS_RESET_MAIL', 'contact@nexopos.com' ), + '--admin_password' => env( 'NS_RESET_PASSWORD', 123456 ), + '--store_name' => env( 'NS_RESET_APPNAME', 'NexoPOS' ), + ] ); // Check if 3 order payments have been created $paymentTypeCount = PaymentType::count(); - $this->assertEquals(3, $paymentTypeCount); + $this->assertEquals( 3, $paymentTypeCount ); ns()->option->setDefault(); - return $this->assertTrue(true); + return $this->assertTrue( true ); } } diff --git a/tests/Feature/OptionSavingTest.php b/tests/Feature/OptionSavingTest.php index 480d7b390..63227e9a5 100644 --- a/tests/Feature/OptionSavingTest.php +++ b/tests/Feature/OptionSavingTest.php @@ -20,13 +20,13 @@ public function test_save_and_retreive_options() { $this->attemptAuthenticate(); - ns()->option->set('_custom_option', 'Hello World'); - ns()->option->set('_custom_option', 'Hello World'); + ns()->option->set( '_custom_option', 'Hello World' ); + ns()->option->set( '_custom_option', 'Hello World' ); - $this->assertEquals(1, Option::where('key', '_custom_option')->count(), 'The options saved twice'); + $this->assertEquals( 1, Option::where( 'key', '_custom_option' )->count(), 'The options saved twice' ); $this->assertTrue( - ns()->option->get('_custom_option') === 'Hello World', + ns()->option->get( '_custom_option' ) === 'Hello World', 'The option wasn\'t saved' ); @@ -34,26 +34,26 @@ public function test_save_and_retreive_options() * Step 1: Saving associative array */ $array = [ 'hello' => 'world' ]; - ns()->option->set('_custom_array', $array); + ns()->option->set( '_custom_array', $array ); - $value = ns()->option->get('_custom_array'); + $value = ns()->option->get( '_custom_array' ); $this->assertTrue( $value[ 'hello' ] === $array[ 'hello' ], 'The option with array wasn\'t saved' ); - ns()->option->delete('_custom_option'); + ns()->option->delete( '_custom_option' ); $this->assertTrue( - ns()->option->get('_custom_option') === null, + ns()->option->get( '_custom_option' ) === null, 'The option wasn\'t deleted' ); $array = [ 'hello' => 'me' ]; - ns()->option->set('_custom_array', $array); + ns()->option->set( '_custom_array', $array ); - $value = ns()->option->get('_custom_array'); + $value = ns()->option->get( '_custom_array' ); $this->assertTrue( $value[ 'hello' ] === $array[ 'hello' ], @@ -64,11 +64,11 @@ public function test_save_and_retreive_options() * Step: 2 Saving simple array */ $array = [ 'Hello', 'World', 'GoodMorning' ]; - ns()->option->set('new_array', $array); + ns()->option->set( 'new_array', $array ); - $retreived = ns()->option->get('new_array', []); + $retreived = ns()->option->get( 'new_array', [] ); - $this->assertTrue(is_array($retreived), 'Saved option is not an array.'); - $this->assertTrue($retreived[0] === $array[0], 'Wrong saved value index.'); + $this->assertTrue( is_array( $retreived ), 'Saved option is not an array.' ); + $this->assertTrue( $retreived[0] === $array[0], 'Wrong saved value index.' ); } } diff --git a/tests/Feature/OrderHoldTest.php b/tests/Feature/OrderHoldTest.php index 9e9a68c9b..ad8ffd6a3 100644 --- a/tests/Feature/OrderHoldTest.php +++ b/tests/Feature/OrderHoldTest.php @@ -20,7 +20,7 @@ public function testPostingOrder() { $this->attemptAuthenticate(); $response = $this->attemptCreateHoldOrder(); - $order = Order::find($response->json('data.order.id')); - $this->attemptUpdateHoldOrder($order); + $order = Order::find( $response->json( 'data.order.id' ) ); + $this->attemptUpdateHoldOrder( $order ); } } diff --git a/tests/Feature/ProcessExpensesTest.php b/tests/Feature/ProcessExpensesTest.php index a1adece13..f8f4497a4 100644 --- a/tests/Feature/ProcessExpensesTest.php +++ b/tests/Feature/ProcessExpensesTest.php @@ -28,12 +28,12 @@ public function test_reccurring_transaction_on_start_of_month() { $this->attemptAuthenticate(); - $transaction = $this->createTransaction([ + $transaction = $this->createTransaction( [ 'name' => 'Rent', 'occurrence' => Transaction::OCCURRENCE_START_OF_MONTH, - ]); + ] ); - $this->executeReccuringTransaction($transaction); + $this->executeReccuringTransaction( $transaction ); } /** @@ -45,31 +45,31 @@ public function test_scheduled_transaction() { $this->attemptAuthenticate(); - $date = app()->make(DateService::class); + $date = app()->make( DateService::class ); - $transaction = $this->createTransaction([ + $transaction = $this->createTransaction( [ 'name' => 'Scheduled Transaction', 'occurrence' => null, 'active' => true, 'recurring' => false, 'type' => ScheduledTransactionFields::getIdentifier(), - 'scheduled_date' => $date->copy()->addMinutes(2)->toDateTimeString(), - ]); + 'scheduled_date' => $date->copy()->addMinutes( 2 )->toDateTimeString(), + ] ); - $this->executeScheduledTransaction($transaction); + $this->executeScheduledTransaction( $transaction ); } - private function executeScheduledTransaction($transaction) + private function executeScheduledTransaction( $transaction ) { - $scheduledCarbon = Carbon::parse($transaction->scheduled_date); + $scheduledCarbon = Carbon::parse( $transaction->scheduled_date ); - ns()->date->setDateTimeFrom($scheduledCarbon); + ns()->date->setDateTimeFrom( $scheduledCarbon ); DetectScheduledTransactionsJob::dispatchSync(); - $cashFlow = TransactionHistory::where('transaction_id', $transaction->id)->first(); + $cashFlow = TransactionHistory::where( 'transaction_id', $transaction->id )->first(); - $this->assertTrue($cashFlow instanceof TransactionHistory, 'No cash flow record were saved after the scheduled transaction.'); + $this->assertTrue( $cashFlow instanceof TransactionHistory, 'No cash flow record were saved after the scheduled transaction.' ); } /** @@ -81,12 +81,12 @@ public function test_reccurring_transaction_on_specific_day() { $this->attemptAuthenticate(); - $transaction = $this->createTransaction([ + $transaction = $this->createTransaction( [ 'name' => 'Rent', 'occurrence' => Transaction::OCCURRENCE_SPECIFIC_DAY, - ]); + ] ); - $this->executeReccuringTransaction($transaction); + $this->executeReccuringTransaction( $transaction ); } /** @@ -98,12 +98,12 @@ public function test_reccurring_transaction_on_end_of_month() { $this->attemptAuthenticate(); - $transaction = $this->createTransaction([ + $transaction = $this->createTransaction( [ 'name' => 'Delivery', 'occurrence' => Transaction::OCCURRENCE_END_OF_MONTH, - ]); + ] ); - $this->executeReccuringTransaction($transaction); + $this->executeReccuringTransaction( $transaction ); } /** @@ -115,12 +115,12 @@ public function test_reccurring_transaction_on_middle_of_month() { $this->attemptAuthenticate(); - $transaction = $this->createTransaction([ + $transaction = $this->createTransaction( [ 'name' => 'Reccurring Middle Of Month', 'occurrence' => Transaction::OCCURRENCE_MIDDLE_OF_MONTH, - ]); + ] ); - $this->executeReccuringTransaction($transaction); + $this->executeReccuringTransaction( $transaction ); } /** @@ -132,12 +132,12 @@ public function test_reccurring_transaction_on_x_after_month_starts() { $this->attemptAuthenticate(); - $transaction = $this->createTransaction([ + $transaction = $this->createTransaction( [ 'name' => 'Reccurring On Month Starts', 'occurrence' => Transaction::OCCURRENCE_X_AFTER_MONTH_STARTS, - ]); + ] ); - $this->executeReccuringTransaction($transaction); + $this->executeReccuringTransaction( $transaction ); } /** @@ -149,15 +149,15 @@ public function test_reccurring_transaction_on_x_before_month_ends() { $this->attemptAuthenticate(); - $transaction = $this->createTransaction([ + $transaction = $this->createTransaction( [ 'name' => 'Reccurring On Month Ends', 'occurrence' => Transaction::OCCURRENCE_X_BEFORE_MONTH_ENDS, - ]); + ] ); - $this->executeReccuringTransaction($transaction); + $this->executeReccuringTransaction( $transaction ); } - private function createTransaction($config) + private function createTransaction( $config ) { /** * We don't want to execute multiple transactions @@ -167,7 +167,7 @@ private function createTransaction($config) $occurrence = $config[ 'occurrence' ] ?? Transaction::OCCURRENCE_START_OF_MONTH; - $range = match ($occurrence) { + $range = match ( $occurrence ) { Transaction::OCCURRENCE_START_OF_MONTH, Transaction::OCCURRENCE_END_OF_MONTH, Transaction::OCCURRENCE_MIDDLE_OF_MONTH => 1, @@ -177,42 +177,42 @@ private function createTransaction($config) default => 1, }; - $response = $this->json('POST', '/api/transactions', [ - 'name' => $config[ 'name' ] ?? $this->faker->paragraph(2), + $response = $this->json( 'POST', '/api/transactions', [ + 'name' => $config[ 'name' ] ?? $this->faker->paragraph( 2 ), 'active' => true, - 'account_id' => TransactionAccount::get('id')->random()->id, - 'description' => $this->faker->paragraph(5), - 'value' => $this->faker->randomNumber(2), + 'account_id' => TransactionAccount::get( 'id' )->random()->id, + 'description' => $this->faker->paragraph( 5 ), + 'value' => $this->faker->randomNumber( 2 ), 'recurring' => $config[ 'recurring' ] ?? true, 'type' => $config[ 'type' ] ?? ReccurringTransactionFields::getIdentifier(), 'group_id' => $config[ 'group_id' ] ?? null, 'occurrence' => $occurrence, 'scheduled_date' => $config[ 'scheduled_date'] ?? null, - 'occurrence_value' => $this->faker->numberBetween(1, $range), - ]); + 'occurrence_value' => $this->faker->numberBetween( 1, $range ), + ] ); - $response->assertJsonPath('status', 'success'); + $response->assertJsonPath( 'status', 'success' ); $responseJson = $response->json(); $transaction = $responseJson[ 'data' ][ 'transaction' ]; - return Transaction::find($transaction[ 'id' ]); + return Transaction::find( $transaction[ 'id' ] ); } - private function executeReccuringTransaction($transaction) + private function executeReccuringTransaction( $transaction ) { $currentDay = now()->startOfMonth(); /** * @var TransactionService */ - $transactionService = app()->make(TransactionService::class); + $transactionService = app()->make( TransactionService::class ); - while (! $currentDay->isLastOfMonth()) { - $result = $transactionService->handleRecurringTransactions($currentDay); + while ( ! $currentDay->isLastOfMonth() ) { + $result = $transactionService->handleRecurringTransactions( $currentDay ); - switch ($transaction->occurrence) { + switch ( $transaction->occurrence ) { case Transaction::OCCURRENCE_START_OF_MONTH: - if ((int) $currentDay->day === 1) { + if ( (int) $currentDay->day === 1 ) { $this->assertTrue( $result[ 'data' ][0][ 'status' ] === 'success', 'The transaction hasn\'t been triggered at the first day of the month.' @@ -227,7 +227,7 @@ private function executeReccuringTransaction($transaction) } break; case Transaction::OCCURRENCE_END_OF_MONTH: - if ($currentDay->isLastOfMonth()) { + if ( $currentDay->isLastOfMonth() ) { $this->assertTrue( $result[ 'data' ][0][ 'status' ] === 'success', 'The transaction hasn\'t been triggered at the last day of the month.' @@ -242,7 +242,7 @@ private function executeReccuringTransaction($transaction) } break; case Transaction::OCCURRENCE_MIDDLE_OF_MONTH: - if ((int) $currentDay->day === 15) { + if ( (int) $currentDay->day === 15 ) { $this->assertTrue( $result[ 'data' ][0][ 'status' ] === 'success', 'The transaction hasn\'t been triggered at the middle of the month.' @@ -257,7 +257,7 @@ private function executeReccuringTransaction($transaction) } break; case Transaction::OCCURRENCE_SPECIFIC_DAY: - if ((int) $currentDay->day === (int) $transaction->occurrence_value) { + if ( (int) $currentDay->day === (int) $transaction->occurrence_value ) { $this->assertTrue( $result[ 'data' ][0][ 'status' ] === 'success', 'The transction hasn\'t been triggered at a specific day of the month.' @@ -272,7 +272,7 @@ private function executeReccuringTransaction($transaction) } break; case Transaction::OCCURRENCE_X_AFTER_MONTH_STARTS: - if ((int) $currentDay->copy()->startOfMonth()->addDays($transaction->occurrence_value)->isSameDay($currentDay)) { + if ( (int) $currentDay->copy()->startOfMonth()->addDays( $transaction->occurrence_value )->isSameDay( $currentDay ) ) { $this->assertTrue( $result[ 'data' ][0][ 'status' ] === 'success', 'The transaction hasn\'t been triggered x days after the month started.' @@ -287,7 +287,7 @@ private function executeReccuringTransaction($transaction) } break; case Transaction::OCCURRENCE_X_BEFORE_MONTH_ENDS: - if ((int) $currentDay->copy()->endOfMonth()->subDays($transaction->occurrence_value)->isSameDay($currentDay)) { + if ( (int) $currentDay->copy()->endOfMonth()->subDays( $transaction->occurrence_value )->isSameDay( $currentDay ) ) { $this->assertTrue( $result[ 'data' ][0][ 'status' ] === 'success', 'The transaction hasn\'t been triggered x days before the month ended.' diff --git a/tests/Feature/ProductUnitItemTest.php b/tests/Feature/ProductUnitItemTest.php index 12df69735..9d56f7e7d 100644 --- a/tests/Feature/ProductUnitItemTest.php +++ b/tests/Feature/ProductUnitItemTest.php @@ -16,7 +16,7 @@ public function test_unit_conversion(): void /** * @var UnitService $unitService */ - $unitService = app()->make(UnitService::class); + $unitService = app()->make( UnitService::class ); $quantity = 5; $result = 10; @@ -33,7 +33,7 @@ public function test_unit_conversion(): void quantity: $quantity ); - $partB = (float) (($from->value * $quantity) / $to->value); + $partB = (float) ( ( $from->value * $quantity ) / $to->value ); $this->assertTrue( $partA === $partB @@ -45,7 +45,7 @@ public function test_purchase_price_unit() /** * @var UnitService $unitService */ - $unitService = app()->make(UnitService::class); + $unitService = app()->make( UnitService::class ); $purchasePrice = 100; $partB = (float) 50; diff --git a/tests/Feature/RenderCrudFormTest.php b/tests/Feature/RenderCrudFormTest.php index 9fdb6baf5..a369311fa 100644 --- a/tests/Feature/RenderCrudFormTest.php +++ b/tests/Feature/RenderCrudFormTest.php @@ -15,7 +15,7 @@ class RenderCrudFormTest extends TestCase */ public function test_example() { - Auth::loginUsingId(Role::namespace('admin')->users->first()->id); + Auth::loginUsingId( Role::namespace( 'admin' )->users->first()->id ); /** * we'll test all crud forms @@ -42,14 +42,14 @@ public function test_example() 'orders/payments-types', ]; - foreach ($cruds as $crud) { + foreach ( $cruds as $crud ) { echo "* Testing : $crud\n"; $response = $this - ->withSession($this->app[ 'session' ]->all()) - ->json('GET', '/dashboard/' . $crud . '/create'); + ->withSession( $this->app[ 'session' ]->all() ) + ->json( 'GET', '/dashboard/' . $crud . '/create' ); - $response->assertDontSee('exception'); + $response->assertDontSee( 'exception' ); } } } diff --git a/tests/Feature/ResetTest.php b/tests/Feature/ResetTest.php index 4841beaaf..ad16c65a7 100644 --- a/tests/Feature/ResetTest.php +++ b/tests/Feature/ResetTest.php @@ -16,33 +16,33 @@ class ResetTest extends TestCase */ public function testExample() { - if (Helper::installed()) { + if ( Helper::installed() ) { Sanctum::actingAs( - Role::namespace('admin')->users->first(), + Role::namespace( 'admin' )->users->first(), ['*'] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/reset', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/reset', [ 'mode' => 'wipe_plus_grocery', 'create_sales' => true, 'create_procurements' => true, - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); } else { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/hard-reset', [ - 'authorization' => env('NS_AUTHORIZATION'), - ]); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/hard-reset', [ + 'authorization' => env( 'NS_AUTHORIZATION' ), + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); } } } diff --git a/tests/Feature/ResetUserStatsTest.php b/tests/Feature/ResetUserStatsTest.php index ec9c6c395..091c59a0c 100644 --- a/tests/Feature/ResetUserStatsTest.php +++ b/tests/Feature/ResetUserStatsTest.php @@ -14,12 +14,12 @@ class ResetUserStatsTest extends TestCase */ public function testResetUserStats() { - User::get()->each(function ($user) { + User::get()->each( function ( $user ) { $user->total_sales_count = 0; $user->total_sales = 0; $user->save(); - }); + } ); - $this->assertTrue(true); + $this->assertTrue( true ); } } diff --git a/tests/Feature/SaveSettingsTest.php b/tests/Feature/SaveSettingsTest.php index 1c5219cb7..18e03ac9c 100644 --- a/tests/Feature/SaveSettingsTest.php +++ b/tests/Feature/SaveSettingsTest.php @@ -20,32 +20,32 @@ class SaveSettingsTest extends TestCase public function testSaveSettings() { Sanctum::actingAs( - Role::namespace('admin')->users->first(), + Role::namespace( 'admin' )->users->first(), ['*'] ); - collect(Storage::disk('ns')->files('app/Settings')) - ->map(function ($fileName) { - $fileName = collect(explode('/', $fileName)); - $file = pathinfo($fileName->last()); + collect( Storage::disk( 'ns' )->files( 'app/Settings' ) ) + ->map( function ( $fileName ) { + $fileName = collect( explode( '/', $fileName ) ); + $file = pathinfo( $fileName->last() ); return 'App\\Settings\\' . $file[ 'filename' ]; - }) - ->filter(function ($class) { + } ) + ->filter( function ( $class ) { $object = new $class; - return array_key_exists('tabs', $object->getForm()); - }) - ->each(function ($class) { + return array_key_exists( 'tabs', $object->getForm() ); + } ) + ->each( function ( $class ) { $object = new $class; $form = $object->getForm(); - $form = collect($object->getForm()[ 'tabs' ])->mapWithKeys(function ($value, $key) { + $form = collect( $object->getForm()[ 'tabs' ] )->mapWithKeys( function ( $value, $key ) { return [ - $key => collect($value[ 'fields' ]) - ->mapWithKeys(function ($field) { + $key => collect( $value[ 'fields' ] ) + ->mapWithKeys( function ( $field ) { return [ - $field[ 'name' ] => match ($field[ 'name' ]) { + $field[ 'name' ] => match ( $field[ 'name' ] ) { 'ns_store_language' => 'en', 'ns_currency_symbol' => '$', 'ns_currency_iso' => 'USD', @@ -55,43 +55,43 @@ public function testSaveSettings() 'ns_datetime_timezone' => 'Europe/London', 'ns_datetime_format' => 'Y-m-d H:i', default => ( - match ($field[ 'type' ]) { - 'text', 'textarea' => strstr($field[ 'name' ], 'email') ? $this->faker->email() : $this->faker->text(20), - 'select' => ! empty($field[ 'options' ]) ? collect($field[ 'options' ])->random()[ 'value' ] : '', + match ( $field[ 'type' ] ) { + 'text', 'textarea' => strstr( $field[ 'name' ], 'email' ) ? $this->faker->email() : $this->faker->text( 20 ), + 'select' => ! empty( $field[ 'options' ] ) ? collect( $field[ 'options' ] )->random()[ 'value' ] : '', default => $field[ 'value' ] } ) }, ]; - }), + } ), ]; - })->toArray(); + } )->toArray(); - if (! empty($object->getIdentifier())) { + if ( ! empty( $object->getIdentifier() ) ) { $response = $this - ->withSession($this->app[ 'session' ]->all()) - ->json('POST', '/api/settings/' . $object->getIdentifier(), $form); + ->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', '/api/settings/' . $object->getIdentifier(), $form ); - $response->assertJsonPath('status', 'success'); + $response->assertJsonPath( 'status', 'success' ); - foreach ($form as $tab => $fields) { - foreach ($fields as $name => $value) { - $value = ns()->option->get($name); + foreach ( $form as $tab => $fields ) { + foreach ( $fields as $name => $value ) { + $value = ns()->option->get( $name ); - if (! is_array($value)) { + if ( ! is_array( $value ) ) { $this->assertTrue( - ns()->option->get($name) == $value, + ns()->option->get( $name ) == $value, sprintf( 'Failed to assert that "%s" option has as value %s. Current value: %s', $name, $value, - ns()->option->get($name) + ns()->option->get( $name ) ) ); } } } } - }); + } ); } } diff --git a/tests/Feature/TestAllDateTimeOptions.php b/tests/Feature/TestAllDateTimeOptions.php index 000b61167..e509f533e 100644 --- a/tests/Feature/TestAllDateTimeOptions.php +++ b/tests/Feature/TestAllDateTimeOptions.php @@ -19,10 +19,10 @@ public function test_check_timezone_validity() { $this->attemptAuthenticate(); - $timezones = config('nexopos.timezones'); + $timezones = config( 'nexopos.timezones' ); - foreach ($timezones as $zone => $name) { - $this->assertTrue(new DateService('now', $zone) instanceof DateService); + foreach ( $timezones as $zone => $name ) { + $this->assertTrue( new DateService( 'now', $zone ) instanceof DateService ); } } } diff --git a/tests/Feature/TestCogsPrices.php b/tests/Feature/TestCogsPrices.php index 905608ceb..3fdc5c1da 100644 --- a/tests/Feature/TestCogsPrices.php +++ b/tests/Feature/TestCogsPrices.php @@ -46,12 +46,12 @@ public function test_manual_cogs(): void 'identification' => [ 'barcode' => $faker->ean13(), 'barcode_type' => 'ean13', - 'searchable' => $faker->randomElement([ true, false ]), + 'searchable' => $faker->randomElement( [ true, false ] ), 'category_id' => $category->id, - 'description' => __('Created via tests'), + 'description' => __( 'Created via tests' ), 'product_type' => 'product', - 'type' => $faker->randomElement([ Product::TYPE_MATERIALIZED, Product::TYPE_DEMATERIALIZED ]), - 'sku' => Str::random(15) . '-sku', + 'type' => $faker->randomElement( [ Product::TYPE_MATERIALIZED, Product::TYPE_DEMATERIALIZED ] ), + 'sku' => Str::random( 15 ) . '-sku', 'status' => 'available', 'stock_management' => 'enabled', ], @@ -61,23 +61,23 @@ public function test_manual_cogs(): void 'tax_type' => 'inclusive', ], 'units' => [ - 'selling_group' => $unitGroup->units()->limit(1)->get()->map(function ($unit) use ($faker, $sale_price) { + 'selling_group' => $unitGroup->units()->limit( 1 )->get()->map( function ( $unit ) use ( $faker, $sale_price ) { return [ 'sale_price_edit' => $sale_price, - 'wholesale_price_edit' => $faker->numberBetween(20, 25), + 'wholesale_price_edit' => $faker->numberBetween( 20, 25 ), 'cogs' => 10, 'unit_id' => $unit->id, ]; - })->toArray(), + } )->toArray(), 'unit_group' => $unitGroup->id, ], ], ], - ]); + ] ); $product = $response[ 'data' ][ 'product' ]; - $this->assertTrue((float) $product[ 'unit_quantities' ][0][ 'cogs' ] === (float) 10, 'The COGS price is not as manually defined'); + $this->assertTrue( (float) $product[ 'unit_quantities' ][0][ 'cogs' ] === (float) 10, 'The COGS price is not as manually defined' ); } public function test_automatic_cogs(): void @@ -87,11 +87,11 @@ public function test_automatic_cogs(): void /** * @var TestService $testService */ - $testService = app()->make(TestService::class); + $testService = app()->make( TestService::class ); /** * @var TaxService $taxService */ - $taxService = app()->make(TaxService::class); + $taxService = app()->make( TaxService::class ); $faker = Factory::create(); $unitGroup = UnitGroup::first(); $category = ProductCategory::first(); @@ -111,12 +111,12 @@ public function test_automatic_cogs(): void 'identification' => [ 'barcode' => $faker->ean13(), 'barcode_type' => 'ean13', - 'searchable' => $faker->randomElement([ true, false ]), + 'searchable' => $faker->randomElement( [ true, false ] ), 'category_id' => $category->id, - 'description' => __('Created via tests'), + 'description' => __( 'Created via tests' ), 'product_type' => 'product', - 'type' => $faker->randomElement([ Product::TYPE_MATERIALIZED, Product::TYPE_DEMATERIALIZED ]), - 'sku' => Str::random(15) . '-sku', + 'type' => $faker->randomElement( [ Product::TYPE_MATERIALIZED, Product::TYPE_DEMATERIALIZED ] ), + 'sku' => Str::random( 15 ) . '-sku', 'status' => 'available', 'stock_management' => 'enabled', ], @@ -126,13 +126,13 @@ public function test_automatic_cogs(): void 'tax_type' => 'inclusive', ], 'units' => [ - 'selling_group' => $unitGroup->units()->limit(1)->get()->map(function ($unit) use ($faker, $sale_price) { + 'selling_group' => $unitGroup->units()->limit( 1 )->get()->map( function ( $unit ) use ( $faker, $sale_price ) { return [ 'sale_price_edit' => $sale_price, - 'wholesale_price_edit' => $faker->numberBetween(20, 25), + 'wholesale_price_edit' => $faker->numberBetween( 20, 25 ), 'unit_id' => $unit->id, ]; - })->toArray(), + } )->toArray(), 'auto_cogs' => true, 'unit_group' => $unitGroup->id, ], @@ -140,23 +140,23 @@ public function test_automatic_cogs(): void ], ]; - $response = $this->attemptSetProduct(form: $form, skip_tests: true); + $response = $this->attemptSetProduct( form: $form, skip_tests: true ); $product = $response[ 'data' ][ 'product' ]; - $this->assertTrue($product[ 'auto_cogs' ], 'The auto COGS feature is not set to true while it should be.'); + $this->assertTrue( $product[ 'auto_cogs' ], 'The auto COGS feature is not set to true while it should be.' ); /** * Stept 2: We'll here try to make a procurement * and see how the cogs is updated for that particular product */ - $details = $testService->prepareProcurement(ns()->date->now(), [ - 'products' => Product::where('id', $product[ 'id' ])->get()->map(function (Product $product) { - return $product->unitGroup->units->map(function ($unit) use ($product) { + $details = $testService->prepareProcurement( ns()->date->now(), [ + 'products' => Product::where( 'id', $product[ 'id' ] )->get()->map( function ( Product $product ) { + return $product->unitGroup->units->map( function ( $unit ) use ( $product ) { // we retreive the unit quantity only if that is included on the group units. - $unitQuantity = $product->unit_quantities->filter(fn($q) => (int) $q->unit_id === (int) $unit->id)->first(); + $unitQuantity = $product->unit_quantities->filter( fn( $q ) => (int) $q->unit_id === (int) $unit->id )->first(); - if ($unitQuantity instanceof ProductUnitQuantity) { + if ( $unitQuantity instanceof ProductUnitQuantity ) { return (object) [ 'unit' => $unit, 'unitQuantity' => $unitQuantity, @@ -165,9 +165,9 @@ public function test_automatic_cogs(): void } return false; - })->filter(); - })->flatten()->map(function ($data) use ($taxService, $taxType, $taxGroup, $margin, $faker) { - $quantity = $faker->numberBetween(100, 999); + } )->filter(); + } )->flatten()->map( function ( $data ) use ( $taxService, $taxType, $taxGroup, $margin, $faker ) { + $quantity = $faker->numberBetween( 100, 999 ); return [ 'product_id' => $data->product->id, @@ -202,19 +202,19 @@ public function test_automatic_cogs(): void ) * $quantity, 'unit_id' => $data->unit->id, ]; - }), - ]); + } ), + ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/procurements', $details); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/procurements', $details ); - $productUnitQuantity = ProductUnitQuantity::where('unit_id', $product[ 'unit_quantities' ][0][ 'unit_id' ]) - ->where('product_id', $product[ 'id' ]) + $productUnitQuantity = ProductUnitQuantity::where( 'unit_id', $product[ 'unit_quantities' ][0][ 'unit_id' ] ) + ->where( 'product_id', $product[ 'id' ] ) ->first(); $procuredProduct = $response[ 'data' ][ 'products' ][0]; - $cogs = ns()->currency->define($procuredProduct[ 'total_purchase_price' ])->dividedBy($procuredProduct[ 'quantity' ])->toFloat(); + $cogs = ns()->currency->define( $procuredProduct[ 'total_purchase_price' ] )->dividedBy( $procuredProduct[ 'quantity' ] )->toFloat(); - $this->assertSame((float) $productUnitQuantity->cogs, (float) $cogs, 'The automatically computed cogs is not accurate'); + $this->assertSame( (float) $productUnitQuantity->cogs, (float) $cogs, 'The automatically computed cogs is not accurate' ); } } diff --git a/tests/Feature/TestLanguageFileValidity.php b/tests/Feature/TestLanguageFileValidity.php index f4ae2ae0e..f369d5377 100644 --- a/tests/Feature/TestLanguageFileValidity.php +++ b/tests/Feature/TestLanguageFileValidity.php @@ -14,22 +14,22 @@ class TestLanguageFileValidity extends TestCase */ public function test_language_validity() { - $files = Storage::disk('ns')->allFiles('lang'); + $files = Storage::disk( 'ns' )->allFiles( 'lang' ); - foreach ($files as $file) { - $content = file_get_contents(base_path($file)); + foreach ( $files as $file ) { + $content = file_get_contents( base_path( $file ) ); - $this->assertTrue($this->checkValidity($content), sprintf( + $this->assertTrue( $this->checkValidity( $content ), sprintf( 'The file "%s" is not valid', $file - )); + ) ); } } - private function checkValidity($content) + private function checkValidity( $content ) { - if (! empty($content)) { - @json_decode($content); + if ( ! empty( $content ) ) { + @json_decode( $content ); return json_last_error() === JSON_ERROR_NONE; } diff --git a/tests/Feature/TestLowStockProducts.php b/tests/Feature/TestLowStockProducts.php index fa7950765..0be8dff54 100644 --- a/tests/Feature/TestLowStockProducts.php +++ b/tests/Feature/TestLowStockProducts.php @@ -13,8 +13,8 @@ class TestLowStockProducts extends TestCase */ public function test_example() { - $response = $this->get('/'); + $response = $this->get( '/' ); - $response->assertStatus(200); + $response->assertStatus( 200 ); } } diff --git a/tests/Feature/TestNsRacksManagerTransferToInventory.php b/tests/Feature/TestNsRacksManagerTransferToInventory.php index f8142a536..c3f73f260 100644 --- a/tests/Feature/TestNsRacksManagerTransferToInventory.php +++ b/tests/Feature/TestNsRacksManagerTransferToInventory.php @@ -32,77 +32,77 @@ class TestNsRacksManagerTransferToInventory extends TestCase public function testExample() { Sanctum::actingAs( - Role::namespace('admin')->users->first(), + Role::namespace( 'admin' )->users->first(), ['*'] ); $faker = Factory::create(); - $store = Store::find(4); - Store::switchTo($store); + $store = Store::find( 4 ); + Store::switchTo( $store ); /** * @var RacksServices */ - $rackService = app()->make(RacksServices::class); + $rackService = app()->make( RacksServices::class ); /** * @var ProductService */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); /** * @var ProcurementService */ - $procurementService = app()->make(ProcurementService::class); + $procurementService = app()->make( ProcurementService::class ); /** * @var TaxService */ - $taxService = app()->make(TaxService::class); + $taxService = app()->make( TaxService::class ); /** * @var CurrencyService */ - $currencyService = app()->make(CurrencyService::class); + $currencyService = app()->make( CurrencyService::class ); - $taxType = Arr::random([ 'inclusive', 'exclusive' ]); + $taxType = Arr::random( [ 'inclusive', 'exclusive' ] ); $taxGroup = TaxGroup::get()->random(); $margin = 25; $rack = Rack::first(); - $rackProduct = RackProductQuantity::where('quantity', '>', 2) - ->where('rack_id', $rack->id) + $rackProduct = RackProductQuantity::where( 'quantity', '>', 2 ) + ->where( 'rack_id', $rack->id ) ->first(); - if (! $rackProduct instanceof RackProductQuantity) { - throw new Exception(__('Unable to find a valid Rack Product.')); + if ( ! $rackProduct instanceof RackProductQuantity ) { + throw new Exception( __( 'Unable to find a valid Rack Product.' ) ); } /** * Step 1 : make a procurement */ - $procurementService->create([ - 'name' => sprintf(__('Sample Procurement %s'), Str::random(5)), + $procurementService->create( [ + 'name' => sprintf( __( 'Sample Procurement %s' ), Str::random( 5 ) ), 'general' => [ 'provider_id' => Provider::get()->random()->id, 'payment_status' => Procurement::PAYMENT_PAID, 'delivery_status' => Procurement::DELIVERED, 'automatic_approval' => 1, ], - 'products' => Product::whereIn('id', [ $rackProduct->product_id ]) - ->with('unitGroup') + 'products' => Product::whereIn( 'id', [ $rackProduct->product_id ] ) + ->with( 'unitGroup' ) ->get() - ->map(function ($product) { - return $product->unitGroup->units->map(function ($unit) use ($product) { + ->map( function ( $product ) { + return $product->unitGroup->units->map( function ( $unit ) use ( $product ) { return (object) [ 'unit' => $unit, - 'unitQuantity' => $product->unit_quantities->filter(fn($q) => $q->unit_id === $unit->id)->first(), + 'unitQuantity' => $product->unit_quantities->filter( fn( $q ) => $q->unit_id === $unit->id )->first(), 'product' => $product, ]; - }); - })->flatten()->map(function ($data) use ($taxService, $taxType, $taxGroup, $margin, $faker, $rack) { + } ); + } )->flatten()->map( function ( $data ) use ( $taxService, $taxType, $taxGroup, $margin, $faker, $rack ) { return [ 'product_id' => $data->product->id, 'gross_purchase_price' => 15, @@ -115,7 +115,7 @@ public function testExample() $margin ) ), - 'quantity' => $faker->numberBetween(10, 50), + 'quantity' => $faker->numberBetween( 10, 50 ), 'rack_id' => $rack->id, // we've defined the rack id 'tax_group_id' => $taxGroup->id, 'tax_type' => $taxType, @@ -137,25 +137,25 @@ public function testExample() ) * 250, 'unit_id' => $data->unit->id, ]; - }), - ]); + } ), + ] ); $processedQuantity = 2; - $oldQuantity = $productService->getUnitQuantity($rackProduct->product_id, $rackProduct->unit_id); + $oldQuantity = $productService->getUnitQuantity( $rackProduct->product_id, $rackProduct->unit_id ); /** * attempt to move product * from rack to inventory. */ - $response = $rackService->moveToInventory($rackProduct, $processedQuantity); + $response = $rackService->moveToInventory( $rackProduct, $processedQuantity ); - $newQuantity = $productService->getUnitQuantity($rackProduct->product_id, $rackProduct->unit_id); + $newQuantity = $productService->getUnitQuantity( $rackProduct->product_id, $rackProduct->unit_id ); - if ((int) abs($oldQuantity->quantity - $newQuantity->quantity) !== $processedQuantity) { + if ( (int) abs( $oldQuantity->quantity - $newQuantity->quantity ) !== $processedQuantity ) { throw new Exception( sprintf( - __('The old quantity (%s) minus the new quantity (%s) doesn\'t gives the expected value (%s)'), + __( 'The old quantity (%s) minus the new quantity (%s) doesn\'t gives the expected value (%s)' ), $oldQuantity->quantity, $newQuantity->quantity, $processedQuantity diff --git a/tests/Feature/TestOtherGetRoutes.php b/tests/Feature/TestOtherGetRoutes.php index f709e9067..de9d4d6cb 100644 --- a/tests/Feature/TestOtherGetRoutes.php +++ b/tests/Feature/TestOtherGetRoutes.php @@ -22,31 +22,31 @@ public function testAllApiRoutes() $routes = Route::getRoutes(); - foreach ($routes as $route) { + foreach ( $routes as $route ) { $uri = $route->uri(); - if (in_array('GET', $route->methods())) { + if ( in_array( 'GET', $route->methods() ) ) { /** * We'll test both known API and dashboard to see if * there is any error thrown. */ - if (strstr($uri, 'api/') && ! preg_match('/\{\w+\??\}/', $uri)) { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('GET', $uri); + if ( strstr( $uri, 'api/' ) && ! preg_match( '/\{\w+\??\}/', $uri ) ) { + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'GET', $uri ); /** * Route that allow exception */ - if (in_array($response->status(), [ 200, 403 ])) { - if (in_array($uri, [ + if ( in_array( $response->status(), [ 200, 403 ] ) ) { + if ( in_array( $uri, [ 'api/cash-registers/used', - ])) { - $response->assertStatus(403); + ] ) ) { + $response->assertStatus( 403 ); } else { - $response->assertStatus(200); + $response->assertStatus( 200 ); } } else { - throw new Exception('Not supported status detected.'); + throw new Exception( 'Not supported status detected.' ); } } } @@ -63,26 +63,26 @@ public function testDashboardGetRoutes() $routes = Route::getRoutes(); $user = $this->attemptGetAnyUserFromRole(); - foreach ($routes as $route) { + foreach ( $routes as $route ) { $uri = $route->uri(); - if (in_array('GET', $route->methods())) { + if ( in_array( 'GET', $route->methods() ) ) { /** * We'll test both known API and dashboard to see if * there is any error thrown. */ - if ((strstr($uri, 'dashboard')) && ! strstr($uri, 'api/') && ! preg_match('/\{\w+\??\}/', $uri)) { - $response = $this->actingAs($user) - ->json('GET', $uri); + if ( ( strstr( $uri, 'dashboard' ) ) && ! strstr( $uri, 'api/' ) && ! preg_match( '/\{\w+\??\}/', $uri ) ) { + $response = $this->actingAs( $user ) + ->json( 'GET', $uri ); - if ($response->status() == 200) { - if ($uri === 'dashboard/pos') { - $response->assertSee('ns-pos'); // pos component + if ( $response->status() == 200 ) { + if ( $uri === 'dashboard/pos' ) { + $response->assertSee( 'ns-pos' ); // pos component } else { - $response->assertSee('dashboard-body'); + $response->assertSee( 'dashboard-body' ); } } else { - throw new Exception('Not supported status detected.'); + throw new Exception( 'Not supported status detected.' ); } } } diff --git a/tests/Feature/TestSetOrderType.php b/tests/Feature/TestSetOrderType.php index 53e65b5d0..e3463569b 100644 --- a/tests/Feature/TestSetOrderType.php +++ b/tests/Feature/TestSetOrderType.php @@ -16,13 +16,13 @@ class TestSetOrderType extends TestCase public function test_set_settings() { Sanctum::actingAs( - Role::namespace('admin')->users->first(), + Role::namespace( 'admin' )->users->first(), ['*'] ); - ns()->option->set('ns_pos_order_types', [ 'takeaway', 'delivery' ]); + ns()->option->set( 'ns_pos_order_types', [ 'takeaway', 'delivery' ] ); - $this->assertEquals(ns()->option->get('ns_pos_order_types')[0], 'takeaway'); - $this->assertEquals(ns()->option->get('ns_pos_order_types')[1], 'delivery'); + $this->assertEquals( ns()->option->get( 'ns_pos_order_types' )[0], 'takeaway' ); + $this->assertEquals( ns()->option->get( 'ns_pos_order_types' )[1], 'delivery' ); } } diff --git a/tests/Feature/TestStoreCrud.php b/tests/Feature/TestStoreCrud.php index 0d824bd31..1e7bc15ab 100644 --- a/tests/Feature/TestStoreCrud.php +++ b/tests/Feature/TestStoreCrud.php @@ -18,26 +18,26 @@ class TestStoreCrud extends TestCase public function testExample() { Sanctum::actingAs( - Role::namespace('admin')->users->first(), + Role::namespace( 'admin' )->users->first(), ['*'] ); $store = Store::first(); - ns()->store->setStore($store); + ns()->store->setStore( $store ); - $files = Storage::disk('ns')->allFiles('app/Crud'); + $files = Storage::disk( 'ns' )->allFiles( 'app/Crud' ); - foreach ($files as $file) { - $path = pathinfo($file); + foreach ( $files as $file ) { + $path = pathinfo( $file ); $class = 'App\Crud\\' . $path[ 'filename' ]; $object = new $class; $columns = $object->getColumns(); $entries = $object->getEntries(); $form = $object->getForm(); - $this->assertIsArray($columns, 'Crud Columns'); - $this->assertIsArray($form, 'Crud Form'); - $this->assertArrayHasKey('data', $entries, 'Crud Response'); + $this->assertIsArray( $columns, 'Crud Columns' ); + $this->assertIsArray( $form, 'Crud Form' ); + $this->assertArrayHasKey( 'data', $entries, 'Crud Response' ); } } } diff --git a/tests/Feature/UpdateProductTest.php b/tests/Feature/UpdateProductTest.php index c86b99f67..1a58fe2f0 100644 --- a/tests/Feature/UpdateProductTest.php +++ b/tests/Feature/UpdateProductTest.php @@ -18,15 +18,15 @@ class UpdateProductTest extends TestCase public function testCreateProduct() { Sanctum::actingAs( - Role::namespace('admin')->users->first(), + Role::namespace( 'admin' )->users->first(), ['*'] ); $product = Product::get()->random()->first(); $response = $this - ->withSession($this->app[ 'session' ]->all()) - ->json('PUT', '/api/products/' . $product->id, [ + ->withSession( $this->app[ 'session' ]->all() ) + ->json( 'PUT', '/api/products/' . $product->id, [ 'name' => 'Sample Product', 'variations' => [ [ @@ -39,7 +39,7 @@ public function testCreateProduct() 'barcode' => 'quassas', 'barcode_type' => 'ean13', 'category_id' => 1, - 'description' => __('Created via tests'), + 'description' => __( 'Created via tests' ), 'product_type' => 'product', 'sku' => 'sample-sku', 'status' => 'available', @@ -55,15 +55,15 @@ public function testCreateProduct() [ 'sale_price' => 10, 'wholesale_price' => 9.55, - 'unit_id' => UnitGroup::find(2)->units->random()->first()->id, + 'unit_id' => UnitGroup::find( 2 )->units->random()->first()->id, ], ], 'unit_group' => 2, ], ], ], - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); } } diff --git a/tests/Feature/UploadModuleTest.php b/tests/Feature/UploadModuleTest.php index fa281be79..e7079dcf9 100644 --- a/tests/Feature/UploadModuleTest.php +++ b/tests/Feature/UploadModuleTest.php @@ -27,32 +27,32 @@ public function test_module_system() * * @var ModulesService */ - $moduleService = app()->make(ModulesService::class); + $moduleService = app()->make( ModulesService::class ); - $name = str_replace('.', '', $this->faker->text(10)); + $name = str_replace( '.', '', $this->faker->text( 10 ) ); $config = [ - 'namespace' => ucwords(Str::camel($name)), + 'namespace' => ucwords( Str::camel( $name ) ), 'name' => $name, 'author' => 'NexoPOS', 'description' => 'Generated from a test', 'version' => '1.0', ]; - $moduleService->generateModule($config); + $moduleService->generateModule( $config ); /** * Step 2: Test if the module was created */ $moduleService->load(); - $module = $moduleService->get($config[ 'namespace' ]); + $module = $moduleService->get( $config[ 'namespace' ] ); - $this->assertTrue($module[ 'namespace' ] === $config[ 'namespace' ], 'The module as created'); + $this->assertTrue( $module[ 'namespace' ] === $config[ 'namespace' ], 'The module as created' ); /** * Step 3: We'll zip the module * and reupload that once we've finish the tests */ - $result = $moduleService->extract($config[ 'namespace' ]); + $result = $moduleService->extract( $config[ 'namespace' ] ); /** * Step 4 : We'll force generate the module @@ -61,40 +61,40 @@ public function test_module_system() $config[ 'description' ] = 'Changed description'; $config[ 'force' ] = true; - $moduleService->generateModule($config); + $moduleService->generateModule( $config ); $moduleService->load(); - $module = $moduleService->get($config[ 'namespace' ]); + $module = $moduleService->get( $config[ 'namespace' ] ); - $this->assertTrue($module[ 'description' ] === $config[ 'description' ], 'The force created module wasn\'t effective'); + $this->assertTrue( $module[ 'description' ] === $config[ 'description' ], 'The force created module wasn\'t effective' ); /** * Step 5 : We'll delete the generated module */ - $moduleService->delete($config[ 'namespace' ]); + $moduleService->delete( $config[ 'namespace' ] ); $moduleService->load(); - $module = $moduleService->get($config[ 'namespace' ]); + $module = $moduleService->get( $config[ 'namespace' ] ); - $this->assertTrue($module === false, 'The module wasn\'t deleted'); + $this->assertTrue( $module === false, 'The module wasn\'t deleted' ); /** * Step 6: We'll reupload the module */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', '/api/modules', [ - 'module' => UploadedFile::fake()->createWithContent('module.zip', file_get_contents($result[ 'path' ])), - ]); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', '/api/modules', [ + 'module' => UploadedFile::fake()->createWithContent( 'module.zip', file_get_contents( $result[ 'path' ] ) ), + ] ); - $response->assertRedirect(ns()->route('ns.dashboard.modules-list')); + $response->assertRedirect( ns()->route( 'ns.dashboard.modules-list' ) ); /** * Step 7 : We'll re-delete the uploaded module */ - $moduleService->delete($config[ 'namespace' ]); + $moduleService->delete( $config[ 'namespace' ] ); $moduleService->load(); - $module = $moduleService->get($config[ 'namespace' ]); + $module = $moduleService->get( $config[ 'namespace' ] ); - $this->assertTrue($module === false, 'The uploaded module wasn\'t deleted'); + $this->assertTrue( $module === false, 'The uploaded module wasn\'t deleted' ); } } diff --git a/tests/Traits/WithAccountingTest.php b/tests/Traits/WithAccountingTest.php index 70469bf26..2d979ca63 100644 --- a/tests/Traits/WithAccountingTest.php +++ b/tests/Traits/WithAccountingTest.php @@ -17,99 +17,99 @@ protected function attemptCreateBankingAccounts() { $accounts = [ [ - 'name' => __('Stock Procurement'), + 'name' => __( 'Stock Procurement' ), 'account' => '000001', 'operation' => TransactionHistory::OPERATION_DEBIT, ], [ - 'name' => __('Sales'), + 'name' => __( 'Sales' ), 'account' => '000002', 'operation' => TransactionHistory::OPERATION_CREDIT, ], [ - 'name' => __('Customer Credit (cash-in)'), + 'name' => __( 'Customer Credit (cash-in)' ), 'account' => '000003', 'operation' => TransactionHistory::OPERATION_CREDIT, ], [ - 'name' => __('Customer Credit (cash-out)'), + 'name' => __( 'Customer Credit (cash-out)' ), 'account' => '000004', 'operation' => TransactionHistory::OPERATION_DEBIT, ], [ - 'name' => __('Sale Refunds'), + 'name' => __( 'Sale Refunds' ), 'account' => '000005', 'operation' => TransactionHistory::OPERATION_DEBIT, ], [ - 'name' => __('Stock Return (spoiled items)'), + 'name' => __( 'Stock Return (spoiled items)' ), 'account' => '000006', 'operation' => TransactionHistory::OPERATION_DEBIT, ], [ - 'name' => __('Stock Return (unspoiled items)'), + 'name' => __( 'Stock Return (unspoiled items)' ), 'account' => '000007', 'operation' => TransactionHistory::OPERATION_CREDIT, ], [ - 'name' => __('Cash Register (cash-in)'), + 'name' => __( 'Cash Register (cash-in)' ), 'account' => '000008', 'operation' => TransactionHistory::OPERATION_CREDIT, ], [ - 'name' => __('Cash Register (cash-out)'), + 'name' => __( 'Cash Register (cash-out)' ), 'account' => '000009', 'operation' => TransactionHistory::OPERATION_DEBIT, ], [ - 'name' => __('Liabilities'), + 'name' => __( 'Liabilities' ), 'account' => '000010', 'operation' => TransactionHistory::OPERATION_DEBIT, ], ]; - foreach ($accounts as $account) { - $transactionAccount = TransactionAccount::where('account', $account[ 'account' ]) + foreach ( $accounts as $account ) { + $transactionAccount = TransactionAccount::where( 'account', $account[ 'account' ] ) ->first(); /** * in case the test is executed twice, we don't want to repeatedly * record the same account on the database. */ - if (! $transactionAccount instanceof TransactionAccount) { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.transactions-accounts', [ + if ( ! $transactionAccount instanceof TransactionAccount ) { + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.transactions-accounts', [ 'name' => $account[ 'name' ], 'general' => [ 'operation' => $account[ 'operation' ], 'author' => Auth::id(), 'account' => $account[ 'account' ], ], - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); } } - ns()->option->set('ns_procurement_cashflow_account', TransactionAccount::where('account', '000001')->first()->id); - ns()->option->set('ns_sales_cashflow_account', TransactionAccount::where('account', '000002')->first()->id); - ns()->option->set('ns_customer_crediting_cashflow_account', TransactionAccount::where('account', '000003')->first()->id); - ns()->option->set('ns_customer_debitting_cashflow_account', TransactionAccount::where('account', '000004')->first()->id); - ns()->option->set('ns_sales_refunds_account', TransactionAccount::where('account', '000005')->first()->id); - ns()->option->set('ns_stock_return_spoiled_account', TransactionAccount::where('account', '000006')->first()->id); - ns()->option->set('ns_stock_return_unspoiled_account', TransactionAccount::where('account', '000007')->first()->id); - ns()->option->set('ns_liabilities_account', TransactionAccount::where('account', '000010')->first()->id); + ns()->option->set( 'ns_procurement_cashflow_account', TransactionAccount::where( 'account', '000001' )->first()->id ); + ns()->option->set( 'ns_sales_cashflow_account', TransactionAccount::where( 'account', '000002' )->first()->id ); + ns()->option->set( 'ns_customer_crediting_cashflow_account', TransactionAccount::where( 'account', '000003' )->first()->id ); + ns()->option->set( 'ns_customer_debitting_cashflow_account', TransactionAccount::where( 'account', '000004' )->first()->id ); + ns()->option->set( 'ns_sales_refunds_account', TransactionAccount::where( 'account', '000005' )->first()->id ); + ns()->option->set( 'ns_stock_return_spoiled_account', TransactionAccount::where( 'account', '000006' )->first()->id ); + ns()->option->set( 'ns_stock_return_unspoiled_account', TransactionAccount::where( 'account', '000007' )->first()->id ); + ns()->option->set( 'ns_liabilities_account', TransactionAccount::where( 'account', '000010' )->first()->id ); } - protected function attemptCheckProcurementRecord($procurement_id) + protected function attemptCheckProcurementRecord( $procurement_id ) { /** * @var Procurement */ - $procurement = Procurement::find($procurement_id); + $procurement = Procurement::find( $procurement_id ); /** * @var TransactionHistory */ - $transactionHistory = TransactionHistory::where('procurement', $procurement_id)->first(); + $transactionHistory = TransactionHistory::where( 'procurement', $procurement_id )->first(); - $assignedCategoryID = ns()->option->get('ns_procurement_cashflow_account'); + $assignedCategoryID = ns()->option->get( 'ns_procurement_cashflow_account' ); - $this->assertTrue($procurement instanceof Procurement, __('Unable to retreive the procurement using the id provided.')); - $this->assertTrue($transactionHistory instanceof TransactionHistory, __('Unable to retreive the cashflow using the provided procurement id')); - $this->assertTrue($transactionHistory->transaction_account_id == $assignedCategoryID, __('The assigned account doens\'t match what was set for procurement cash flow.')); - $this->assertEquals($procurement->cost, $transactionHistory->value, __('The cash flow records doesn\'t match the procurement cost.')); + $this->assertTrue( $procurement instanceof Procurement, __( 'Unable to retreive the procurement using the id provided.' ) ); + $this->assertTrue( $transactionHistory instanceof TransactionHistory, __( 'Unable to retreive the cashflow using the provided procurement id' ) ); + $this->assertTrue( $transactionHistory->transaction_account_id == $assignedCategoryID, __( 'The assigned account doens\'t match what was set for procurement cash flow.' ) ); + $this->assertEquals( $procurement->cost, $transactionHistory->value, __( 'The cash flow records doesn\'t match the procurement cost.' ) ); } protected function attemptCheckSalesTaxes() @@ -117,7 +117,7 @@ protected function attemptCheckSalesTaxes() /** * @var ReportService $reportService */ - $reportService = app()->make(ReportService::class); + $reportService = app()->make( ReportService::class ); /** * This will be used as a reference to check if @@ -136,38 +136,38 @@ protected function attemptCheckSalesTaxes() * * @var TestService */ - $procurementsDetails = app()->make(TestService::class); - $procurementData = $procurementsDetails->prepareProcurement(ns()->date->now(), [ + $procurementsDetails = app()->make( TestService::class ); + $procurementData = $procurementsDetails->prepareProcurement( ns()->date->now(), [ 'total_products' => 2, - ]); + ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/procurements', $procurementData); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/procurements', $procurementData ); - $response->assertStatus(200); + $response->assertStatus( 200 ); - $array = json_decode($response->getContent(), true); + $array = json_decode( $response->getContent(), true ); $procurement = $array[ 'data' ][ 'procurement' ]; $currentDashboardDay = DashboardDay::forToday(); - $expenseCategoryID = ns()->option->get('ns_procurement_cashflow_account'); - $totalExpenses = TransactionHistory::where('created_at', '>=', $dashboardDay->range_starts) - ->where('created_at', '<=', $dashboardDay->range_ends) - ->where('transaction_account_id', $expenseCategoryID) - ->where('procurement_id', $procurement[ 'id' ]) - ->sum('value'); + $expenseCategoryID = ns()->option->get( 'ns_procurement_cashflow_account' ); + $totalExpenses = TransactionHistory::where( 'created_at', '>=', $dashboardDay->range_starts ) + ->where( 'created_at', '<=', $dashboardDay->range_ends ) + ->where( 'transaction_account_id', $expenseCategoryID ) + ->where( 'procurement_id', $procurement[ 'id' ] ) + ->sum( 'value' ); $this->assertEquals( - Currency::raw($dashboardDay->day_expenses + $procurement[ 'cost' ]), - Currency::raw($currentDashboardDay->day_expenses), - __('hasn\'t affected the expenses') + Currency::raw( $dashboardDay->day_expenses + $procurement[ 'cost' ] ), + Currency::raw( $currentDashboardDay->day_expenses ), + __( 'hasn\'t affected the expenses' ) ); $this->assertEquals( - Currency::raw($totalExpenses), - Currency::raw($procurement[ 'cost' ]), - __('The procurement doesn\'t match with the cash flow.') + Currency::raw( $totalExpenses ), + Currency::raw( $procurement[ 'cost' ] ), + __( 'The procurement doesn\'t match with the cash flow.' ) ); } } diff --git a/tests/Traits/WithAuthentication.php b/tests/Traits/WithAuthentication.php index 62ff39bea..432bcaadf 100644 --- a/tests/Traits/WithAuthentication.php +++ b/tests/Traits/WithAuthentication.php @@ -7,9 +7,9 @@ trait WithAuthentication { - protected function attemptAuthenticate($user = null, $role = 'admin') + protected function attemptAuthenticate( $user = null, $role = 'admin' ) { - $user = $user === null ? $this->attemptGetAnyUserFromRole($role) : $user; + $user = $user === null ? $this->attemptGetAnyUserFromRole( $role ) : $user; Sanctum::actingAs( $user, @@ -17,8 +17,8 @@ protected function attemptAuthenticate($user = null, $role = 'admin') ); } - protected function attemptGetAnyUserFromRole($name = 'admin') + protected function attemptGetAnyUserFromRole( $name = 'admin' ) { - return Role::namespace($name)->users->random(); + return Role::namespace( $name )->users->random(); } } diff --git a/tests/Traits/WithCashRegisterTest.php b/tests/Traits/WithCashRegisterTest.php index 5fde54e7f..930c594ab 100644 --- a/tests/Traits/WithCashRegisterTest.php +++ b/tests/Traits/WithCashRegisterTest.php @@ -11,174 +11,174 @@ trait WithCashRegisterTest { protected function attemptCreateCashRegisterWithActions() { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.registers', [ - 'name' => __('Test Cash Register'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.registers', [ + 'name' => __( 'Test Cash Register' ), 'general' => [ 'status' => Register::STATUS_CLOSED, ], - ]); + ] ); $response->assertOk(); - $register = Register::where('name', 'Test Cash Register')->first(); + $register = Register::where( 'name', 'Test Cash Register' )->first(); /** * Opening cash register */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/cash-registers/open/' . $register->id, [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/cash-registers/open/' . $register->id, [ 'amount' => 100, - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); /** * cashing on the cash register */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/cash-registers/' . RegisterHistory::ACTION_CASHING . '/' . $register->id, [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/cash-registers/' . RegisterHistory::ACTION_CASHING . '/' . $register->id, [ 'amount' => 100, - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); /** * cashout on the cash register */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/cash-registers/' . RegisterHistory::ACTION_CASHOUT . '/' . $register->id, [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/cash-registers/' . RegisterHistory::ACTION_CASHOUT . '/' . $register->id, [ 'amount' => 100, - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); /** * close cash register */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/cash-registers/' . RegisterHistory::ACTION_CLOSING . '/' . $register->id, [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/cash-registers/' . RegisterHistory::ACTION_CLOSING . '/' . $register->id, [ 'amount' => 100, - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); } protected function attemptCreateRegisterTransactions() { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.registers', [ - 'name' => __('Cash Register'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.registers', [ + 'name' => __( 'Cash Register' ), 'general' => [ 'status' => Register::STATUS_CLOSED, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - $register = Register::orderBy('id', 'desc')->first(); + $register = Register::orderBy( 'id', 'desc' )->first(); /** * @var CashRegistersService */ $cashOpeningBalance = 0; - $cashRegisterService = app()->make(CashRegistersService::class); - $cashRegisterService->openRegister($register, $cashOpeningBalance, 'test opening amount'); + $cashRegisterService = app()->make( CashRegistersService::class ); + $cashRegisterService->openRegister( $register, $cashOpeningBalance, 'test opening amount' ); - $registerHistory = RegisterHistory::where('register_id', $register->id) - ->orderBy('id', 'desc') + $registerHistory = RegisterHistory::where( 'register_id', $register->id ) + ->orderBy( 'id', 'desc' ) ->first(); - $this->assertTrue($registerHistory instanceof RegisterHistory, 'No register history were created after a closing operation'); + $this->assertTrue( $registerHistory instanceof RegisterHistory, 'No register history were created after a closing operation' ); - if ($registerHistory instanceof RegisterHistory) { - $this->assertTrue($registerHistory->value == $cashOpeningBalance, 'The cash opening operation amount doesn\'t match'); + if ( $registerHistory instanceof RegisterHistory ) { + $this->assertTrue( $registerHistory->value == $cashOpeningBalance, 'The cash opening operation amount doesn\'t match' ); } /** * should not be able to cash-out */ try { - $cashRegisterService->cashOut($register, 100, 'test cash out'); - } catch (NotAllowedException $exception) { - $this->assertContains($exception->getMessage(), [ 'Not enough fund to cash out.' ]); + $cashRegisterService->cashOut( $register, 100, 'test cash out' ); + } catch ( NotAllowedException $exception ) { + $this->assertContains( $exception->getMessage(), [ 'Not enough fund to cash out.' ] ); } $register->refresh(); $cashInAmount = 200; - $cashRegisterService->cashIn($register, $cashInAmount, 'test'); + $cashRegisterService->cashIn( $register, $cashInAmount, 'test' ); - $registerHistory = RegisterHistory::where('register_id', $register->id) - ->orderBy('id', 'desc') + $registerHistory = RegisterHistory::where( 'register_id', $register->id ) + ->orderBy( 'id', 'desc' ) ->first(); - $this->assertTrue($registerHistory instanceof RegisterHistory, 'No register history were created after a cash-in operation'); - $this->assertTrue($registerHistory->value == $cashInAmount, 'The cash-in operation amount doesn\'t match'); + $this->assertTrue( $registerHistory instanceof RegisterHistory, 'No register history were created after a cash-in operation' ); + $this->assertTrue( $registerHistory->value == $cashInAmount, 'The cash-in operation amount doesn\'t match' ); /** * should be able to cash-out now. */ $register->refresh(); $cashOutAmount = 100; - $cashRegisterService->cashOut($register, $cashOutAmount, 'test cash-out'); + $cashRegisterService->cashOut( $register, $cashOutAmount, 'test cash-out' ); - $registerHistory = RegisterHistory::where('register_id', $register->id) - ->orderBy('id', 'desc') + $registerHistory = RegisterHistory::where( 'register_id', $register->id ) + ->orderBy( 'id', 'desc' ) ->first(); - $this->assertTrue($registerHistory instanceof RegisterHistory, 'No register history were created after a cash-in operation'); - $this->assertTrue($registerHistory->value == $cashOutAmount, 'The cash-out operation amount doesn\'t match'); + $this->assertTrue( $registerHistory instanceof RegisterHistory, 'No register history were created after a cash-in operation' ); + $this->assertTrue( $registerHistory->value == $cashOutAmount, 'The cash-out operation amount doesn\'t match' ); /** * Closing the cash register */ $register->refresh(); $closingBalance = $register->balance; - $cashRegisterService->closeRegister($register, $register->balance, 'test close register'); + $cashRegisterService->closeRegister( $register, $register->balance, 'test close register' ); - $registerHistory = RegisterHistory::where('register_id', $register->id) - ->orderBy('id', 'desc') + $registerHistory = RegisterHistory::where( 'register_id', $register->id ) + ->orderBy( 'id', 'desc' ) ->first(); - $this->assertTrue($registerHistory instanceof RegisterHistory, 'No register history were created after a closing operation'); - $this->assertTrue($registerHistory->value == $closingBalance, 'The cash-out operation amount doesn\'t match'); + $this->assertTrue( $registerHistory instanceof RegisterHistory, 'No register history were created after a closing operation' ); + $this->assertTrue( $registerHistory->value == $closingBalance, 'The cash-out operation amount doesn\'t match' ); } protected function attemptCreateRegister() { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.registers', [ - 'name' => __('Register'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.registers', [ + 'name' => __( 'Register' ), 'general' => [ 'status' => Register::STATUS_CLOSED, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); global $argv; - $argv = json_decode($response->getContent(), true); + $argv = json_decode( $response->getContent(), true ); } protected function attemptDeleteRegister() { global $argv; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('DELETE', 'api/crud/ns.registers/' . $argv[ 'data' ][ 'entry' ][ 'id' ], [ - 'name' => __('Register'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'DELETE', 'api/crud/ns.registers/' . $argv[ 'data' ][ 'entry' ][ 'id' ], [ + 'name' => __( 'Register' ), 'general' => [ 'status' => Register::STATUS_CLOSED, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); } } diff --git a/tests/Traits/WithCategoryTest.php b/tests/Traits/WithCategoryTest.php index a37715df8..b70c80ad4 100644 --- a/tests/Traits/WithCategoryTest.php +++ b/tests/Traits/WithCategoryTest.php @@ -15,26 +15,26 @@ protected function attemptDeleteCategory() { $product = Product::first(); - if ($product instanceof Product) { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('DELETE', 'api/crud/ns.products-categories/' . $product->category_id); + if ( $product instanceof Product ) { + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'DELETE', 'api/crud/ns.products-categories/' . $product->category_id ); - return $response->assertJson([ + return $response->assertJson( [ 'status' => 'failed', - ]); + ] ); } - throw new Exception(__('No product was found to perform the test.')); + throw new Exception( __( 'No product was found to perform the test.' ) ); } - protected function attemptDeleteSingleCategory($category) + protected function attemptDeleteSingleCategory( $category ) { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('DELETE', 'api/crud/ns.products-categories/' . $category->id); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'DELETE', 'api/crud/ns.products-categories/' . $category->id ); - return $response->assertJson([ + return $response->assertJson( [ 'status' => 'success', - ]); + ] ); } protected function attemptCreateSingleCategory() @@ -43,98 +43,98 @@ protected function attemptCreateSingleCategory() $faker = \Faker\Factory::create(); $categoryName = $faker->name; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.products-categories', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.products-categories', [ 'name' => $categoryName, 'general' => [ 'displays_on_pos' => true, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - return ProductCategory::find($response->json()[ 'data' ][ 'entry' ][ 'id' ]); + return ProductCategory::find( $response->json()[ 'data' ][ 'entry' ][ 'id' ] ); } - protected function attemptUpdateCategory(ProductCategory $category) + protected function attemptUpdateCategory( ProductCategory $category ) { // import faker and create a fake category name $faker = \Faker\Factory::create(); $categoryName = $faker->name; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('PUT', 'api/crud/ns.products-categories/' . $category->id, [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'PUT', 'api/crud/ns.products-categories/' . $category->id, [ 'name' => $categoryName, 'general' => [ 'displays_on_pos' => true, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - return ProductCategory::find($response->json()[ 'data' ][ 'entry' ][ 'id' ]); + return ProductCategory::find( $response->json()[ 'data' ][ 'entry' ][ 'id' ] ); } protected function attemptCreateCategory() { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.products-categories', [ - 'name' => __('Smartphones'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.products-categories', [ + 'name' => __( 'Smartphones' ), 'general' => [ 'displays_on_pos' => true, ], - ]); + ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.products-categories', [ - 'name' => __('Phones'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.products-categories', [ + 'name' => __( 'Phones' ), 'general' => [ 'displays_on_pos' => true, ], - ]); + ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.products-categories', [ - 'name' => __('Computers'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.products-categories', [ + 'name' => __( 'Computers' ), 'general' => [ 'displays_on_pos' => true, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); $category = ProductCategory::first(); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.products-categories', [ - 'name' => __('Laptops'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.products-categories', [ + 'name' => __( 'Laptops' ), 'general' => [ 'parent_id' => $category->id, 'displays_on_pos' => true, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.products-categories', [ - 'name' => __('Desktop'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.products-categories', [ + 'name' => __( 'Desktop' ), 'general' => [ 'parent_id' => $category->id, 'displays_on_pos' => true, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); } } diff --git a/tests/Traits/WithCombinedProductTest.php b/tests/Traits/WithCombinedProductTest.php index 4030e44ae..8ce9a1dde 100644 --- a/tests/Traits/WithCombinedProductTest.php +++ b/tests/Traits/WithCombinedProductTest.php @@ -10,7 +10,7 @@ trait WithCombinedProductTest { protected function attemptCombineProducts() { - ns()->option->set('ns_invoice_merge_similar_products', 'yes'); + ns()->option->set( 'ns_invoice_merge_similar_products', 'yes' ); $testService = new TestService; $orderDetails = $testService->prepareOrder( @@ -19,25 +19,25 @@ protected function attemptCombineProducts() productDetails: [], config: [ 'products' => function () { - $product = Product::where('tax_group_id', '>', 0) - ->whereRelation('unit_quantities', 'quantity', '>', 100) - ->with('unit_quantities', fn($query) => $query->where('quantity', '>', 100)) + $product = Product::where( 'tax_group_id', '>', 0 ) + ->whereRelation( 'unit_quantities', 'quantity', '>', 100 ) + ->with( 'unit_quantities', fn( $query ) => $query->where( 'quantity', '>', 100 ) ) ->first(); - return collect([ $product, $product ]); + return collect( [ $product, $product ] ); }, 'allow_quick_products' => false, ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $orderDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $orderDetails ); - $response->assertStatus(200); + $response->assertStatus( 200 ); - $json = json_decode($response->getContent()); + $json = json_decode( $response->getContent() ); $orderId = $json->data->order->id; - $this->assertEquals(1, Order::find($orderId)->combinedProducts->count(), __('The product were\'nt combined.')); + $this->assertEquals( 1, Order::find( $orderId )->combinedProducts->count(), __( 'The product were\'nt combined.' ) ); } } diff --git a/tests/Traits/WithCouponTest.php b/tests/Traits/WithCouponTest.php index 795d2a587..3ff676ce5 100644 --- a/tests/Traits/WithCouponTest.php +++ b/tests/Traits/WithCouponTest.php @@ -22,46 +22,46 @@ protected function attemptCreatecoupon() /** * @var TestResponse */ - $customers = Customer::get()->take(3); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('post', 'api/crud/ns.coupons', [ + $customers = Customer::get()->take( 3 ); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'post', 'api/crud/ns.coupons', [ 'name' => $this->faker->name, 'general' => [ 'type' => 'percentage_discount', - 'code' => 'cp-' . $this->faker->numberBetween(0, 99999), - 'discount_value' => $this->faker->randomElement([ 10, 15, 20, 25 ]), - 'limit_usage' => $this->faker->randomElement([ 100, 200, 400 ]), + 'code' => 'cp-' . $this->faker->numberBetween( 0, 99999 ), + 'discount_value' => $this->faker->randomElement( [ 10, 15, 20, 25 ] ), + 'limit_usage' => $this->faker->randomElement( [ 100, 200, 400 ] ), ], 'selected_products' => [ - 'products' => Product::select('id') + 'products' => Product::select( 'id' ) ->get() - ->map(fn($product) => $product->id) + ->map( fn( $product ) => $product->id ) ->toArray(), ], 'selected_categories' => [ - 'categories' => ProductCategory::select('id') + 'categories' => ProductCategory::select( 'id' ) ->get() - ->map(fn($product) => $product->id) + ->map( fn( $product ) => $product->id ) ->toArray(), ], 'selected_customers' => [ - 'customers' => $customers->map(fn($customer) => $customer->id)->toArray(), + 'customers' => $customers->map( fn( $customer ) => $customer->id )->toArray(), ], - ]); + ] ); - $response->assertJsonPath('status', 'success'); + $response->assertJsonPath( 'status', 'success' ); $entry = $response->json()[ 'data' ][ 'entry' ]; - $coupon = Coupon::with('customers')->find($entry[ 'id' ]); + $coupon = Coupon::with( 'customers' )->find( $entry[ 'id' ] ); - $ids = $customers->map(fn($customer) => $customer->id)->toArray(); + $ids = $customers->map( fn( $customer ) => $customer->id )->toArray(); /** * Checks if the customers assigned are returned * once we load the coupon. */ - $coupon->customers->each(fn($couponCustomer) => $this->assertTrue(in_array($couponCustomer->customer_id, $ids))); + $coupon->customers->each( fn( $couponCustomer ) => $this->assertTrue( in_array( $couponCustomer->customer_id, $ids ) ) ); return $response; } @@ -75,40 +75,40 @@ protected function attemptUpdateCoupon() $this->attemptCreatecoupon(); $coupon = Coupon::first(); - $customers = Customer::get()->take(3); + $customers = Customer::get()->take( 3 ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('put', 'api/crud/ns.coupons/' . $coupon->id, [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'put', 'api/crud/ns.coupons/' . $coupon->id, [ 'name' => $this->faker->name, 'general' => [ 'type' => 'percentage_discount', - 'code' => 'cp-' . $this->faker->numberBetween(0, 99999), - 'discount_value' => $this->faker->randomElement([ 10, 15, 20, 25 ]), - 'limit_usage' => $this->faker->randomElement([ 100, 200, 400 ]), + 'code' => 'cp-' . $this->faker->numberBetween( 0, 99999 ), + 'discount_value' => $this->faker->randomElement( [ 10, 15, 20, 25 ] ), + 'limit_usage' => $this->faker->randomElement( [ 100, 200, 400 ] ), ], 'selected_products' => [ - 'products' => Product::select('id') + 'products' => Product::select( 'id' ) ->get() - ->map(fn($product) => $product->id) + ->map( fn( $product ) => $product->id ) ->toArray(), ], 'selected_categories' => [ - 'categories' => ProductCategory::select('id') + 'categories' => ProductCategory::select( 'id' ) ->get() - ->map(fn($product) => $product->id) + ->map( fn( $product ) => $product->id ) ->toArray(), ], 'selected_customers' => [ - 'categories' => $customers->map(fn($customer) => $customer->id)->toArray(), + 'categories' => $customers->map( fn( $customer ) => $customer->id )->toArray(), ], - ]); + ] ); - $response->assertJsonPath('status', 'success'); + $response->assertJsonPath( 'status', 'success' ); } protected function attemptAssigningANonExistingCoupon() { - $customer = Customer::get('id')->random(); + $customer = Customer::get( 'id' )->random(); $products = [ $this->orderProduct( @@ -140,29 +140,29 @@ protected function attemptAssigningANonExistingCoupon() $this->shouldMakePayment = false; $this->shouldRefund = false; - $this->processOrders($order, function ($response) { - $response->assertJson([ + $this->processOrders( $order, function ( $response ) { + $response->assertJson( [ 'status' => 'failed', - ]); - }); + ] ); + } ); } public function attemptUseExaustedCoupon() { - $customer = Customer::get('id')->random(); + $customer = Customer::get( 'id' )->random(); /** * @var TaxService $taxService */ - $taxService = app()->make(TaxService::class); + $taxService = app()->make( TaxService::class ); /** * @var CustomerService $customerService */ - $customerService = app()->make(CustomerService::class); + $customerService = app()->make( CustomerService::class ); $couponResponse = $this->attemptCreatecoupon()->json(); - $coupon = Coupon::find($couponResponse[ 'data' ][ 'entry' ][ 'id' ]); + $coupon = Coupon::find( $couponResponse[ 'data' ][ 'entry' ][ 'id' ] ); // We only want this to be used once. $coupon->limit_usage = 1; @@ -178,8 +178,8 @@ public function attemptUseExaustedCoupon() $customerCoupon->usage = 1; $customerCoupon->save(); - $this->assertTrue($customerCoupon->coupon_id === $coupon->id, 'The coupon ID doesn\'t matches'); - $this->assertTrue($customer->coupons()->where('coupon_id', $coupon->id)->first() instanceof CustomerCoupon, 'The customer doesn\'t have any coupon assigned.'); + $this->assertTrue( $customerCoupon->coupon_id === $coupon->id, 'The coupon ID doesn\'t matches' ); + $this->assertTrue( $customer->coupons()->where( 'coupon_id', $coupon->id )->first() instanceof CustomerCoupon, 'The customer doesn\'t have any coupon assigned.' ); $products = [ $this->orderProduct( @@ -189,12 +189,12 @@ public function attemptUseExaustedCoupon() ), ]; - $subTotal = collect($products)->map(fn($product) => $product[ 'unit_price' ] * $product[ 'quantity' ])->sum(); + $subTotal = collect( $products )->map( fn( $product ) => $product[ 'unit_price' ] * $product[ 'quantity' ] )->sum(); $couponValue = 0; - if ($coupon instanceof Coupon) { - $couponValue = match ($coupon->type) { - Coupon::TYPE_PERCENTAGE => $taxService->getPercentageOf($subTotal, $coupon->discount_value), + if ( $coupon instanceof Coupon ) { + $couponValue = match ( $coupon->type ) { + Coupon::TYPE_PERCENTAGE => $taxService->getPercentageOf( $subTotal, $coupon->discount_value ), Coupon::TYPE_FLAT => $coupon->discount_value }; } @@ -222,29 +222,29 @@ public function attemptUseExaustedCoupon() * the order shouldn't be placed * as the coupon usage is exhausted */ - $this->processOrders($order, function ($response) { - $response->assertJson([ + $this->processOrders( $order, function ( $response ) { + $response->assertJson( [ 'status' => 'failed', - ]); - }); + ] ); + } ); } public function attemptUseCouponTillUsageIsExhausted() { - $customer = Customer::get('id')->random(); + $customer = Customer::get( 'id' )->random(); /** * @var TaxService $taxService */ - $taxService = app()->make(TaxService::class); + $taxService = app()->make( TaxService::class ); /** * @var CustomerService $customerService */ - $customerService = app()->make(CustomerService::class); + $customerService = app()->make( CustomerService::class ); $couponResponse = $this->attemptCreatecoupon()->json(); - $coupon = Coupon::find($couponResponse[ 'data' ][ 'entry' ][ 'id' ]); + $coupon = Coupon::find( $couponResponse[ 'data' ][ 'entry' ][ 'id' ] ); // We only want this to be used once. $coupon->limit_usage = 2; @@ -255,8 +255,8 @@ public function attemptUseCouponTillUsageIsExhausted() coupon: $coupon ); - $this->assertTrue($customerCoupon->coupon_id === $coupon->id, 'The coupon ID doesn\'t matches'); - $this->assertTrue($customer->coupons()->where('coupon_id', $coupon->id)->first() instanceof CustomerCoupon, 'The customer doesn\'t have any coupon assigned.'); + $this->assertTrue( $customerCoupon->coupon_id === $coupon->id, 'The coupon ID doesn\'t matches' ); + $this->assertTrue( $customer->coupons()->where( 'coupon_id', $coupon->id )->first() instanceof CustomerCoupon, 'The customer doesn\'t have any coupon assigned.' ); $products = [ $this->orderProduct( @@ -266,12 +266,12 @@ public function attemptUseCouponTillUsageIsExhausted() ), ]; - $subTotal = collect($products)->map(fn($product) => $product[ 'unit_price' ] * $product[ 'quantity' ])->sum(); + $subTotal = collect( $products )->map( fn( $product ) => $product[ 'unit_price' ] * $product[ 'quantity' ] )->sum(); $couponValue = 0; - if ($coupon instanceof Coupon) { - $couponValue = match ($coupon->type) { - Coupon::TYPE_PERCENTAGE => $taxService->getPercentageOf($subTotal, $coupon->discount_value), + if ( $coupon instanceof Coupon ) { + $couponValue = match ( $coupon->type ) { + Coupon::TYPE_PERCENTAGE => $taxService->getPercentageOf( $subTotal, $coupon->discount_value ), Coupon::TYPE_FLAT => $coupon->discount_value }; } @@ -299,32 +299,32 @@ public function attemptUseCouponTillUsageIsExhausted() * the order shouldn't be placed * as the coupon usage is exhausted */ - $this->processOrders($order, function ($response) { - $response->assertJson([ + $this->processOrders( $order, function ( $response ) { + $response->assertJson( [ 'status' => 'success', - ]); - }); + ] ); + } ); $customerCoupon->refresh(); - $this->assertTrue($customerCoupon->usage === 1, 'The coupon usage hasn\'t increased after a use.'); + $this->assertTrue( $customerCoupon->usage === 1, 'The coupon usage hasn\'t increased after a use.' ); - $this->processOrders($order, function ($response) { - $response->assertJson([ + $this->processOrders( $order, function ( $response ) { + $response->assertJson( [ 'status' => 'success', - ]); - }); + ] ); + } ); $customerCoupon->refresh(); - $this->assertTrue($customerCoupon->usage === 2, 'The coupon usage hasn\'t increased after a second use.'); + $this->assertTrue( $customerCoupon->usage === 2, 'The coupon usage hasn\'t increased after a second use.' ); // be cause we only had 2 possible usage for that coupon. - $this->processOrders($order, function ($response) { - $response->assertJson([ + $this->processOrders( $order, function ( $response ) { + $response->assertJson( [ 'status' => 'failed', - ]); - }); + ] ); + } ); } public function attemptAssignCouponToOrder() @@ -332,9 +332,9 @@ public function attemptAssignCouponToOrder() /** * @var TaxService $taxService */ - $taxService = app()->make(TaxService::class); + $taxService = app()->make( TaxService::class ); $couponResponse = $this->attemptCreatecoupon()->json(); - $coupon = Coupon::find($couponResponse[ 'data' ][ 'entry' ][ 'id' ]); + $coupon = Coupon::find( $couponResponse[ 'data' ][ 'entry' ][ 'id' ] ); $products = [ $this->orderProduct( name: 'Test Product', @@ -343,17 +343,17 @@ public function attemptAssignCouponToOrder() ), ]; - $subTotal = collect($products)->map(fn($product) => $product[ 'unit_price' ] * $product[ 'quantity' ])->sum(); + $subTotal = collect( $products )->map( fn( $product ) => $product[ 'unit_price' ] * $product[ 'quantity' ] )->sum(); $couponValue = 0; - if ($coupon instanceof Coupon) { - $couponValue = match ($coupon->type) { - Coupon::TYPE_PERCENTAGE => $taxService->getPercentageOf($subTotal, $coupon->discount_value), + if ( $coupon instanceof Coupon ) { + $couponValue = match ( $coupon->type ) { + Coupon::TYPE_PERCENTAGE => $taxService->getPercentageOf( $subTotal, $coupon->discount_value ), Coupon::TYPE_FLAT => $coupon->discount_value }; } - $customer = Customer::get('id')->random(); + $customer = Customer::get( 'id' )->random(); /** * First of all, we'll delete all generated coupon. @@ -379,25 +379,25 @@ public function attemptAssignCouponToOrder() ], ]; - $result = $this->processOrders($order); + $result = $this->processOrders( $order ); /** * We'll now try to figure out if there is a coupon generated * for the customer we've selected. */ $this->assertTrue( - OrderCoupon::where('order_id', $result[0][ 'order-creation' ][ 'data' ][ 'order' ][ 'id' ]) - ->where('coupon_id', $coupon->id) + OrderCoupon::where( 'order_id', $result[0][ 'order-creation' ][ 'data' ][ 'order' ][ 'id' ] ) + ->where( 'coupon_id', $coupon->id ) ->first() instanceof OrderCoupon, 'No coupon history was created when the order was placed.' ); $customerCoupon = $customer->coupons()->first(); - $this->assertTrue($customer->coupons()->where('coupon_id', $couponResponse[ 'data' ][ 'entry' ][ 'id' ])->first() instanceof CustomerCoupon, 'The coupon assigned to the order is not assigned to the customer'); - $this->assertTrue($customer->coupons()->count() === 1, 'No coupon was created while using the coupon on the customer sale.'); - $this->assertTrue((int) $customerCoupon->coupon_id === (int) $coupon->id, 'The customer generated coupon doesn\'t match the coupon created earlier.'); - $this->assertTrue((int) $customerCoupon->usage === 1, 'The coupon usage hasn\'t increased.'); + $this->assertTrue( $customer->coupons()->where( 'coupon_id', $couponResponse[ 'data' ][ 'entry' ][ 'id' ] )->first() instanceof CustomerCoupon, 'The coupon assigned to the order is not assigned to the customer' ); + $this->assertTrue( $customer->coupons()->count() === 1, 'No coupon was created while using the coupon on the customer sale.' ); + $this->assertTrue( (int) $customerCoupon->coupon_id === (int) $coupon->id, 'The customer generated coupon doesn\'t match the coupon created earlier.' ); + $this->assertTrue( (int) $customerCoupon->usage === 1, 'The coupon usage hasn\'t increased.' ); /** * We'll make another test to make sure @@ -421,10 +421,10 @@ public function attemptAssignCouponToOrder() ], ]; - $result = $this->processOrders($order); + $result = $this->processOrders( $order ); $customerCoupon = $customer->coupons()->first(); - $this->assertTrue((int) $customerCoupon->usage === 2, 'The coupon usage hasn\'t increased.'); + $this->assertTrue( (int) $customerCoupon->usage === 2, 'The coupon usage hasn\'t increased.' ); return $result; } diff --git a/tests/Traits/WithCrud.php b/tests/Traits/WithCrud.php index 896b39ef8..271439596 100644 --- a/tests/Traits/WithCrud.php +++ b/tests/Traits/WithCrud.php @@ -6,10 +6,10 @@ trait WithCrud { - public function submitRequest($namespace, $data = [], $method = 'POST'): TestResponse + public function submitRequest( $namespace, $data = [], $method = 'POST' ): TestResponse { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json($method, 'api/crud/' . $namespace, $data); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( $method, 'api/crud/' . $namespace, $data ); return $response; } diff --git a/tests/Traits/WithCustomerTest.php b/tests/Traits/WithCustomerTest.php index 20dfd55b1..0b9588cb6 100644 --- a/tests/Traits/WithCustomerTest.php +++ b/tests/Traits/WithCustomerTest.php @@ -18,59 +18,59 @@ trait WithCustomerTest protected function attemptCreateCustomerGroup() { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.customers-groups', [ - 'name' => __('Base Customers'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.customers-groups', [ + 'name' => __( 'Base Customers' ), 'general' => [ - 'reward_system_id' => $this->faker->randomElement(RewardSystem::get()->map(fn($reward) => $reward->id)->toArray()), + 'reward_system_id' => $this->faker->randomElement( RewardSystem::get()->map( fn( $reward ) => $reward->id )->toArray() ), ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - return CustomerGroup::findOrFail($response->json()[ 'data' ][ 'entry' ][ 'id' ]); + return CustomerGroup::findOrFail( $response->json()[ 'data' ][ 'entry' ][ 'id' ] ); } protected function attemptRemoveCreditCustomerAccount() { - $customer = Customer::where('account_amount', 0) + $customer = Customer::where( 'account_amount', 0 ) ->first(); - if ($customer instanceof Customer) { + if ( $customer instanceof Customer ) { $response = $this - ->withSession($this->app[ 'session' ]->all()) - ->json('POST', '/api/customers/' . $customer->id . '/account-history', [ + ->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', '/api/customers/' . $customer->id . '/account-history', [ 'amount' => 500, - 'description' => __('Test credit account'), + 'description' => __( 'Test credit account' ), 'operation' => CustomerAccountHistory::OPERATION_DEDUCT, - ]); + ] ); - return $response->assertJson([ 'status' => 'failed' ]); + return $response->assertJson( [ 'status' => 'failed' ] ); } - throw new Exception(__('No customer with empty account to proceed the test.')); + throw new Exception( __( 'No customer with empty account to proceed the test.' ) ); } protected function attemptCreditCustomerAccount() { - $customer = Customer::where('account_amount', 0) + $customer = Customer::where( 'account_amount', 0 ) ->first(); - if ($customer instanceof Customer) { + if ( $customer instanceof Customer ) { $response = $this - ->withSession($this->app[ 'session' ]->all()) - ->json('POST', '/api/customers/' . $customer->id . '/account-history', [ + ->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', '/api/customers/' . $customer->id . '/account-history', [ 'amount' => 500, - 'description' => __('Test credit account'), + 'description' => __( 'Test credit account' ), 'operation' => CustomerAccountHistory::OPERATION_ADD, - ]); + ] ); - return $response->assertJson([ 'status' => 'success' ]); + return $response->assertJson( [ 'status' => 'success' ] ); } - throw new Exception(__('No customer with empty account to proceed the test.')); + throw new Exception( __( 'No customer with empty account to proceed the test.' ) ); } protected function attemptCreateCustomerWithNoEmail() @@ -78,8 +78,8 @@ protected function attemptCreateCustomerWithNoEmail() $faker = Factory::create(); $group = CustomerGroup::first(); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.customers', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.customers', [ 'first_name' => $faker->firstName, 'general' => [ 'group_id' => $group->id, @@ -89,18 +89,18 @@ protected function attemptCreateCustomerWithNoEmail() 'first_name' => $faker->firstName, 'email' => $faker->email, ], - ]); + ] ); - $this->attemptTestCustomerGroup(Customer::find($response->json()[ 'data' ][ 'entry' ][ 'id' ])); + $this->attemptTestCustomerGroup( Customer::find( $response->json()[ 'data' ][ 'entry' ][ 'id' ] ) ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); } protected function attemptCreateCustomersWithSimilarEmail() { - ns()->option->set('ns_customers_force_valid_email', 'yes'); + ns()->option->set( 'ns_customers_force_valid_email', 'yes' ); $faker = Factory::create(); $group = CustomerGroup::first(); @@ -110,8 +110,8 @@ protected function attemptCreateCustomersWithSimilarEmail() * The first attempt should * be successful. */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.customers', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.customers', [ 'first_name' => $faker->firstName, 'general' => [ 'group_id' => $group->id, @@ -122,22 +122,22 @@ protected function attemptCreateCustomersWithSimilarEmail() 'first_name' => $faker->firstName, 'email' => $faker->email, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - $customer = Customer::find($response->json()[ 'data' ][ 'entry' ][ 'id' ]); + $customer = Customer::find( $response->json()[ 'data' ][ 'entry' ][ 'id' ] ); - $this->attemptTestCustomerGroup($customer); + $this->attemptTestCustomerGroup( $customer ); /** * The second should fail as we're * using the exact same non-empty email */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.customers', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.customers', [ 'first_name' => $faker->firstName, 'general' => [ 'group_id' => $group->id, @@ -148,16 +148,16 @@ protected function attemptCreateCustomersWithSimilarEmail() 'first_name' => $faker->firstName, 'email' => $faker->email, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'failed', - ]); + ] ); } - public function attemptTestCustomerGroup(Customer $customer) + public function attemptTestCustomerGroup( Customer $customer ) { - $this->assertTrue($customer->group instanceof CustomerGroup); + $this->assertTrue( $customer->group instanceof CustomerGroup ); } protected function attemptCreateCustomer() @@ -172,8 +172,8 @@ protected function attemptCreateCustomer() $firstName = $faker->firstName; $lastName = $faker->lastName; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.customers', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.customers', [ 'first_name' => $firstName, 'general' => [ 'group_id' => $group->id, @@ -190,13 +190,13 @@ protected function attemptCreateCustomer() 'last_name' => $lastName, 'email' => $email, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - return Customer::with('group')->findOrFail($response->json()[ 'data' ][ 'entry' ][ 'id' ]); + return Customer::with( 'group' )->findOrFail( $response->json()[ 'data' ][ 'entry' ][ 'id' ] ); } protected function attemptCreateCustomerWithInitialTransactions() @@ -204,18 +204,18 @@ protected function attemptCreateCustomerWithInitialTransactions() /** * @var CustomerService $customerService */ - $customerService = app()->make(CustomerService::class); + $customerService = app()->make( CustomerService::class ); $customer = $this->attemptCreateCustomer(); - $this->attemptTestCustomerGroup($customer); + $this->attemptTestCustomerGroup( $customer ); /** * For each customer * let's create a crediting operation */ - if ($this->faker->randomElement([ true, false ])) { - $randomAmount = $this->faker->randomNumber(3, true); + if ( $this->faker->randomElement( [ true, false ] ) ) { + $randomAmount = $this->faker->randomNumber( 3, true ); /** * Step 1: we'll make some transaction @@ -230,13 +230,13 @@ protected function attemptCreateCustomerWithInitialTransactions() $history = $result[ 'data' ][ 'customerAccountHistory' ]; - $this->assertSame((float) $history->amount, (float) $randomAmount, 'The amount is not refected on the history.'); - $this->assertSame((float) $history->next_amount, (float) $randomAmount, 'The amount is not refected on the history.'); - $this->assertSame((float) $history->previous_amount, (float) 0, 'The previous amount is not accurate.'); + $this->assertSame( (float) $history->amount, (float) $randomAmount, 'The amount is not refected on the history.' ); + $this->assertSame( (float) $history->next_amount, (float) $randomAmount, 'The amount is not refected on the history.' ); + $this->assertSame( (float) $history->previous_amount, (float) 0, 'The previous amount is not accurate.' ); $customer->refresh(); - $this->assertSame((float) $randomAmount, (float) $customer->account_amount, 'The customer account hasn\'t been updated.'); + $this->assertSame( (float) $randomAmount, (float) $customer->account_amount, 'The customer account hasn\'t been updated.' ); /** * Step 2: second control and verification on @@ -253,20 +253,20 @@ protected function attemptCreateCustomerWithInitialTransactions() $history = $result[ 'data' ][ 'customerAccountHistory' ]; - $this->assertSame((float) $history->amount, (float) $randomAmount, 'The amount is not refected on the history.'); - $this->assertSame((float) $history->next_amount, (float) 0, 'The amount is not refected on the history.'); - $this->assertSame((float) $history->previous_amount, (float) $randomAmount, 'The previous amount is not accurate.'); + $this->assertSame( (float) $history->amount, (float) $randomAmount, 'The amount is not refected on the history.' ); + $this->assertSame( (float) $history->next_amount, (float) 0, 'The amount is not refected on the history.' ); + $this->assertSame( (float) $history->previous_amount, (float) $randomAmount, 'The previous amount is not accurate.' ); } } protected function attemptCreateReward() { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('post', 'api/crud/ns.rewards-system', [ - 'name' => __('Sample Reward System'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'post', 'api/crud/ns.rewards-system', [ + 'name' => __( 'Sample Reward System' ), 'general' => [ - 'coupon_id' => $this->faker->randomElement(Coupon::get()->map(fn($coupon) => $coupon->id)->toArray()), - 'target' => $this->faker->randomElement([ 10, 20, 30 ]), + 'coupon_id' => $this->faker->randomElement( Coupon::get()->map( fn( $coupon ) => $coupon->id )->toArray() ), + 'target' => $this->faker->randomElement( [ 10, 20, 30 ] ), ], 'rules' => [ [ @@ -283,22 +283,22 @@ protected function attemptCreateReward() 'reward' => 5, ], ], - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); } protected function attemptGetCustomerHistory() { $accountHistory = CustomerAccountHistory::first(); - if ($accountHistory instanceof CustomerAccountHistory) { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('GET', 'api/customers/' . $accountHistory->customer_id . '/account-history'); + if ( $accountHistory instanceof CustomerAccountHistory ) { + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'GET', 'api/customers/' . $accountHistory->customer_id . '/account-history' ); $response->assertOk(); - $response = json_decode($response->getContent(), true); - $result = collect($response[ 'data' ])->filter(fn($entry) => (int) $accountHistory->id === (int) $entry[ 'id' ]); + $response = json_decode( $response->getContent(), true ); + $result = collect( $response[ 'data' ] )->filter( fn( $entry ) => (int) $accountHistory->id === (int) $entry[ 'id' ] ); return $this->assertTrue( $result->isNotEmpty(), @@ -306,7 +306,7 @@ protected function attemptGetCustomerHistory() ); } - throw new Exception('Unable to perform the test without a valid history.'); + throw new Exception( 'Unable to perform the test without a valid history.' ); } protected function attemptSearchCustomers() @@ -321,8 +321,8 @@ protected function attemptSearchCustomers() $firstName = $faker->firstName; $lastName = $faker->lastName; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.customers', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.customers', [ 'first_name' => $firstName, 'general' => [ 'group_id' => $group->id, @@ -339,30 +339,30 @@ protected function attemptSearchCustomers() 'last_name' => $lastName, 'email' => $email, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - $lastCustomer = Customer::where('first_name', '!=', null)->orderBy('id', 'desc')->first(); + $lastCustomer = Customer::where( 'first_name', '!=', null )->orderBy( 'id', 'desc' )->first(); /** * let's now search */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/customers/search', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/customers/search', [ 'search' => $lastCustomer->first_name, - ]); + ] ); - $response->assertJsonPath('0.id', $lastCustomer->id); + $response->assertJsonPath( '0.id', $lastCustomer->id ); } protected function attemptGetCustomerReward() { $customer = Customer::first(); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('GET', 'api/customers/' . $customer->id . '/rewards'); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'GET', 'api/customers/' . $customer->id . '/rewards' ); $response->assertOk(); } @@ -370,8 +370,8 @@ protected function attemptGetCustomerReward() protected function attemptGetCustomerOrders() { $customer = Customer::first(); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('GET', 'api/customers/' . $customer->id . '/orders'); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'GET', 'api/customers/' . $customer->id . '/orders' ); $response->assertOk(); } @@ -379,8 +379,8 @@ protected function attemptGetCustomerOrders() protected function attemptGetOrdersAddresses() { $customer = Customer::first(); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('GET', 'api/customers/' . $customer->id . '/addresses'); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'GET', 'api/customers/' . $customer->id . '/addresses' ); $response->assertOk(); } @@ -388,25 +388,25 @@ protected function attemptGetOrdersAddresses() protected function attemptGetCustomerGroup() { $customer = Customer::first(); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('GET', 'api/customers/' . $customer->id . '/group'); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'GET', 'api/customers/' . $customer->id . '/group' ); $response->assertOk(); } - protected function attemptDeleteCustomer(Customer $customer) + protected function attemptDeleteCustomer( Customer $customer ) { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('DELETE', 'api/crud/ns.customers/' . $customer->id); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'DELETE', 'api/crud/ns.customers/' . $customer->id ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); return $customer; } - protected function attemptUpdateCustomer(Customer $customer) + protected function attemptUpdateCustomer( Customer $customer ) { $faker = Factory::create(); $group = $this->attemptCreateCustomerGroup(); @@ -418,8 +418,8 @@ protected function attemptUpdateCustomer(Customer $customer) $firstName = $faker->firstName; $lastName = $faker->lastName; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('PUT', 'api/crud/ns.customers/' . $customer->id, [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'PUT', 'api/crud/ns.customers/' . $customer->id, [ 'first_name' => $firstName, 'general' => [ 'group_id' => $group->id, @@ -436,14 +436,14 @@ protected function attemptUpdateCustomer(Customer $customer) 'last_name' => $lastName, 'email' => $email, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - $this->assertFalse($customer->group->id === $group->id); + $this->assertFalse( $customer->group->id === $group->id ); - return Customer::with('group')->findOrFail($response->json()[ 'data' ][ 'entry' ][ 'id' ]); + return Customer::with( 'group' )->findOrFail( $response->json()[ 'data' ][ 'entry' ][ 'id' ] ); } } diff --git a/tests/Traits/WithOrderTest.php b/tests/Traits/WithOrderTest.php index e91a0c834..ad1de19fe 100644 --- a/tests/Traits/WithOrderTest.php +++ b/tests/Traits/WithOrderTest.php @@ -65,30 +65,30 @@ trait WithOrderTest protected $allowQuickProducts = true; - protected function attemptPostOrder($callback) + protected function attemptPostOrder( $callback ) { $faker = Factory::create(); $responses = []; - $startOfWeek = ns()->date->clone()->startOfWeek()->subDays($this->totalDaysInterval); + $startOfWeek = ns()->date->clone()->startOfWeek()->subDays( $this->totalDaysInterval ); - for ($i = 0; $i < $this->totalDaysInterval; $i++) { + for ( $i = 0; $i < $this->totalDaysInterval; $i++ ) { $date = $startOfWeek->addDay()->clone(); - $this->count = $this->count === false ? $faker->numberBetween(2, 5) : $this->count; - $responses[] = $this->processOrders([ + $this->count = $this->count === false ? $faker->numberBetween( 2, 5 ) : $this->count; + $responses[] = $this->processOrders( [ 'created_at' => $date->getNowFormatted(), - ], $callback); + ], $callback ); } return $responses; } - protected function attemptCreateOrderOnRegister($data = []) + protected function attemptCreateOrderOnRegister( $data = [] ) { RegisterHistory::truncate(); - Register::where('id', '>', 0)->update([ + Register::where( 'id', '>', 0 )->update( [ 'balance' => 0, - ]); + ] ); /** * @var Register @@ -100,19 +100,19 @@ protected function attemptCreateOrderOnRegister($data = []) /** * @var CashRegistersService */ - $cashRegisterService = app()->make(CashRegistersService::class); + $cashRegisterService = app()->make( CashRegistersService::class ); /** * Just in case it's opened */ try { - $cashRegisterService->closeRegister($cashRegister, 0, __('Attempt closing')); + $cashRegisterService->closeRegister( $cashRegister, 0, __( 'Attempt closing' ) ); $cashRegister->refresh(); - } catch (NotAllowedException $exception) { + } catch ( NotAllowedException $exception ) { // it's probably not opened, let's proceed... } - $result = $cashRegisterService->openRegister($cashRegister, 100, __('Opening the cash register')); + $result = $cashRegisterService->openRegister( $cashRegister, 100, __( 'Opening the cash register' ) ); $previousValue = (float) $result[ 'data' ][ 'history' ]->value; $specificMoment = ns()->date->now()->toDateTimeString(); @@ -123,13 +123,13 @@ protected function attemptCreateOrderOnRegister($data = []) * after the opening. */ $newCashRegister = $cashRegister->fresh(); - $this->assertEquals($newCashRegister->balance, $cashRegister->balance + 100, __('The cash register balance after opening is not correct')); + $this->assertEquals( $newCashRegister->balance, $cashRegister->balance + 100, __( 'The cash register balance after opening is not correct' ) ); /** * Step 2 : let's prepare the order * before submitting that. */ - $response = $this->registerOrderForCashRegister($cashRegister, $data[ 'orderData' ] ?? []); + $response = $this->registerOrderForCashRegister( $cashRegister, $data[ 'orderData' ] ?? [] ); /** * between each operation @@ -141,16 +141,16 @@ protected function attemptCreateOrderOnRegister($data = []) * let's fetch all order that was created on that cash register * from a specific moment */ - $totalValue = ns()->currency->define(RegisterHistory::where('register_id', $cashRegister->id) - ->whereIn('action', RegisterHistory::IN_ACTIONS) - ->sum('value'))->getRaw(); + $totalValue = ns()->currency->define( RegisterHistory::where( 'register_id', $cashRegister->id ) + ->whereIn( 'action', RegisterHistory::IN_ACTIONS ) + ->sum( 'value' ) )->getRaw(); /** * only if the order total is greater than 0 */ - if ((float) $response[ 'data' ][ 'order' ][ 'tendered' ] > 0) { - $this->assertNotEquals($cashRegister->balance, $previousValue, __('There hasn\'t been any change during the transaction on the cash register balance.')); - $this->assertEquals((float) $cashRegister->balance, (float) (ns()->currency->define($totalValue)->getRaw()), __('The cash register balance hasn\'t been updated correctly.')); + if ( (float) $response[ 'data' ][ 'order' ][ 'tendered' ] > 0 ) { + $this->assertNotEquals( $cashRegister->balance, $previousValue, __( 'There hasn\'t been any change during the transaction on the cash register balance.' ) ); + $this->assertEquals( (float) $cashRegister->balance, (float) ( ns()->currency->define( $totalValue )->getRaw() ), __( 'The cash register balance hasn\'t been updated correctly.' ) ); } /** @@ -163,17 +163,17 @@ protected function attemptCreateOrderOnRegister($data = []) * let's assert only one history has been created * for the selected cash register. */ - $historyCount = RegisterHistory::where('register_id', $cashRegister->id) - ->where('action', RegisterHistory::ACTION_SALE) + $historyCount = RegisterHistory::where( 'register_id', $cashRegister->id ) + ->where( 'action', RegisterHistory::ACTION_SALE ) ->count(); - $this->assertTrue($historyCount == count($response[ 'data' ][ 'order' ][ 'payments' ]), 'The cash register history is not accurate'); + $this->assertTrue( $historyCount == count( $response[ 'data' ][ 'order' ][ 'payments' ] ), 'The cash register history is not accurate' ); /** * Step 3: We'll try here to delete order * from the register and see if the balance is updated */ - $this->createAndDeleteOrderFromRegister($cashRegister, $data[ 'orderData' ] ?? []); + $this->createAndDeleteOrderFromRegister( $cashRegister, $data[ 'orderData' ] ?? [] ); /** * between each operation @@ -191,7 +191,7 @@ protected function attemptCreateOrderOnRegister($data = []) * Step 4 : disburse (cash-out) some cash * from the provided register */ - $result = $this->disburseCashFromRegister($cashRegister, $cashRegisterService); + $result = $this->disburseCashFromRegister( $cashRegister, $cashRegisterService ); /** * between each operation @@ -199,7 +199,7 @@ protected function attemptCreateOrderOnRegister($data = []) */ $cashRegister->refresh(); - $this->assertNotEquals($cashRegister->balance, $previousValue, __('There hasn\'t been any change during the transaction on the cash register balance.')); + $this->assertNotEquals( $cashRegister->balance, $previousValue, __( 'There hasn\'t been any change during the transaction on the cash register balance.' ) ); /** * let's update tha value for making @@ -210,7 +210,7 @@ protected function attemptCreateOrderOnRegister($data = []) /** * Step 5 : cash in some cash */ - $result = $this->cashInOnRegister($cashRegister, $cashRegisterService); + $result = $this->cashInOnRegister( $cashRegister, $cashRegisterService ); /** * We neet to refresh the register @@ -218,7 +218,7 @@ protected function attemptCreateOrderOnRegister($data = []) */ $cashRegister->refresh(); - $this->assertNotEquals($cashRegister->balance, (float) $previousValue, __('There hasn\'t been any change during the transaction on the cash register balance.')); + $this->assertNotEquals( $cashRegister->balance, (float) $previousValue, __( 'There hasn\'t been any change during the transaction on the cash register balance.' ) ); /** * Let's initialize the total transactions @@ -228,53 +228,53 @@ protected function attemptCreateOrderOnRegister($data = []) /** * last time the cash register has opened */ - $opening = RegisterHistory::action(RegisterHistory::ACTION_OPENING)->orderBy('id', 'desc')->first(); + $opening = RegisterHistory::action( RegisterHistory::ACTION_OPENING )->orderBy( 'id', 'desc' )->first(); /** * We'll start by computing orders */ $openingBalance = (float) $opening->value; - $totalCashing = RegisterHistory::withRegister($cashRegister) - ->from($opening->created_at) - ->action(RegisterHistory::ACTION_CASHING)->sum('value'); - - $totalSales = RegisterHistory::withRegister($cashRegister) - ->from($opening->created_at) - ->action(RegisterHistory::ACTION_SALE)->sum('value'); - - $totalClosing = RegisterHistory::withRegister($cashRegister) - ->from($opening->created_at) - ->action(RegisterHistory::ACTION_CLOSING)->sum('value'); - - $totalCashOut = RegisterHistory::withRegister($cashRegister) - ->from($opening->created_at) - ->action(RegisterHistory::ACTION_CASHOUT)->sum('value'); - - $totalRefunds = RegisterHistory::withRegister($cashRegister) - ->from($opening->created_at) - ->action(RegisterHistory::ACTION_REFUND)->sum('value'); - - $totalDelete = RegisterHistory::withRegister($cashRegister) - ->from($opening->created_at) - ->action(RegisterHistory::ACTION_DELETE)->sum('value'); - - $totalTransactions = ns()->currency->define($openingBalance) - ->additionateBy($totalCashing) - ->additionateBy($totalSales) - ->subtractBy($totalClosing) - ->subtractBy($totalRefunds) - ->subtractBy($totalCashOut) - ->subtractBy($totalDelete) + $totalCashing = RegisterHistory::withRegister( $cashRegister ) + ->from( $opening->created_at ) + ->action( RegisterHistory::ACTION_CASHING )->sum( 'value' ); + + $totalSales = RegisterHistory::withRegister( $cashRegister ) + ->from( $opening->created_at ) + ->action( RegisterHistory::ACTION_SALE )->sum( 'value' ); + + $totalClosing = RegisterHistory::withRegister( $cashRegister ) + ->from( $opening->created_at ) + ->action( RegisterHistory::ACTION_CLOSING )->sum( 'value' ); + + $totalCashOut = RegisterHistory::withRegister( $cashRegister ) + ->from( $opening->created_at ) + ->action( RegisterHistory::ACTION_CASHOUT )->sum( 'value' ); + + $totalRefunds = RegisterHistory::withRegister( $cashRegister ) + ->from( $opening->created_at ) + ->action( RegisterHistory::ACTION_REFUND )->sum( 'value' ); + + $totalDelete = RegisterHistory::withRegister( $cashRegister ) + ->from( $opening->created_at ) + ->action( RegisterHistory::ACTION_DELETE )->sum( 'value' ); + + $totalTransactions = ns()->currency->define( $openingBalance ) + ->additionateBy( $totalCashing ) + ->additionateBy( $totalSales ) + ->subtractBy( $totalClosing ) + ->subtractBy( $totalRefunds ) + ->subtractBy( $totalCashOut ) + ->subtractBy( $totalDelete ) ->getRaw(); $this->assertEquals( - ns()->currency->getRaw($cashRegister->balance), + ns()->currency->getRaw( $cashRegister->balance ), $totalTransactions, - __('The transaction aren\'t reflected on the register balance') + __( 'The transaction aren\'t reflected on the register balance' ) ); - return compact('response', 'cashRegister'); + return compact( 'response', 'cashRegister' ); } public function attemptCreateAndEditOrderWithLowStock() @@ -282,24 +282,24 @@ public function attemptCreateAndEditOrderWithLowStock() /** * @var ProductService $productSevice */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); /** * @var TestService $testService */ - $testService = app()->make(TestService::class); + $testService = app()->make( TestService::class ); /** * Step 1: we'll set the quantity to be 3 * and we'll create the order with 2 quantity partially paid */ - $product = Product::where('stock_management', Product::STOCK_MANAGEMENT_ENABLED) + $product = Product::where( 'stock_management', Product::STOCK_MANAGEMENT_ENABLED ) ->notGrouped() ->notInGroup() ->get() ->random(); - $productService->setQuantity($product->id, $product->unit_quantities->first()->unit_id, 3); + $productService->setQuantity( $product->id, $product->unit_quantities->first()->unit_id, 3 ); /** * Let's prepare the order to submit that. @@ -308,7 +308,7 @@ public function attemptCreateAndEditOrderWithLowStock() date: ns()->date->now(), config: [ 'allow_quick_products' => false, - 'payments' => function ($details) { + 'payments' => function ( $details ) { return [ [ 'identifier' => 'cash-payment', @@ -316,25 +316,25 @@ public function attemptCreateAndEditOrderWithLowStock() ], ]; }, - 'products' => fn() => collect([ - json_decode(json_encode([ + 'products' => fn() => collect( [ + json_decode( json_encode( [ 'name' => $product->name, 'id' => $product->id, 'quantity' => 2, 'unit_price' => 10, 'unit_quantities' => [ $product->unit_quantities->first() ], - ])), - ]), + ] ) ), + ] ), ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $orderDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $orderDetails ); /** * Step 2: Ensure no error occured */ - $response->assertStatus(200); + $response->assertStatus( 200 ); $details = $response->json(); @@ -343,10 +343,10 @@ public function attemptCreateAndEditOrderWithLowStock() * and check if it goes through */ $details[ 'data' ][ 'order' ][ 'type' ] = [ 'identifier' => $details[ 'data' ][ 'order' ][ 'type' ] ]; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('PUT', 'api/orders/' . $details[ 'data' ][ 'order' ][ 'id' ], $details[ 'data' ][ 'order' ]); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'PUT', 'api/orders/' . $details[ 'data' ][ 'order' ][ 'id' ], $details[ 'data' ][ 'order' ] ); - $response->assertStatus(200, 'An error occured while submitting the order'); + $response->assertStatus( 200, 'An error occured while submitting the order' ); } public function attemptCreateAndEditOrderWithGreaterQuantity() @@ -354,24 +354,24 @@ public function attemptCreateAndEditOrderWithGreaterQuantity() /** * @var ProductService $productSevice */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); /** * @var TestService $testService */ - $testService = app()->make(TestService::class); + $testService = app()->make( TestService::class ); /** * Step 1: we'll set the quantity to be 3 * and we'll create the order with 2 quantity partially paid */ - $product = Product::where('stock_management', Product::STOCK_MANAGEMENT_ENABLED) + $product = Product::where( 'stock_management', Product::STOCK_MANAGEMENT_ENABLED ) ->notGrouped() ->notInGroup() - ->with('unit_quantities') + ->with( 'unit_quantities' ) ->firstOrFail(); - $productService->setQuantity($product->id, $product->unit_quantities->first()->unit_id, 3); + $productService->setQuantity( $product->id, $product->unit_quantities->first()->unit_id, 3 ); /** * Let's prepare the order to submit that. @@ -380,7 +380,7 @@ public function attemptCreateAndEditOrderWithGreaterQuantity() date: ns()->date->now(), config: [ 'allow_quick_products' => false, - 'payments' => function ($details) { + 'payments' => function ( $details ) { return [ [ 'identifier' => 'cash-payment', @@ -388,25 +388,25 @@ public function attemptCreateAndEditOrderWithGreaterQuantity() ], ]; }, - 'products' => fn() => collect([ - json_decode(json_encode([ + 'products' => fn() => collect( [ + json_decode( json_encode( [ 'name' => $product->name, 'id' => $product->id, 'quantity' => 2, 'unit_price' => 10, 'unit_quantities' => [ $product->unit_quantities->first() ], - ])), - ]), + ] ) ), + ] ), ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $orderDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $orderDetails ); /** * Step 2: Ensure no error occured */ - $response->assertStatus(200); + $response->assertStatus( 200 ); $details = $response->json(); @@ -422,50 +422,50 @@ public function attemptCreateAndEditOrderWithGreaterQuantity() */ $details[ 'data' ][ 'order' ][ 'products' ][0][ 'quantity' ] = 4; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('PUT', 'api/orders/' . $details[ 'data' ][ 'order' ][ 'id' ], $details[ 'data' ][ 'order' ]); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'PUT', 'api/orders/' . $details[ 'data' ][ 'order' ][ 'id' ], $details[ 'data' ][ 'order' ] ); - $response->assertStatus(500, 'An error occured while submitting the order'); + $response->assertStatus( 500, 'An error occured while submitting the order' ); } - public function attemptCreateOrderWithGroupedProducts($data = []) + public function attemptCreateOrderWithGroupedProducts( $data = [] ) { /** * @var TestService */ - $testService = app()->make(TestService::class); + $testService = app()->make( TestService::class ); /** * @var ProductService */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); /** * @var UnitService */ - $unitService = app()->make(UnitService::class); + $unitService = app()->make( UnitService::class ); - $product = Product::grouped()->with([ 'sub_items.unit_quantity', 'sub_items.product' ]) + $product = Product::grouped()->with( [ 'sub_items.unit_quantity', 'sub_items.product' ] ) ->first(); /** * We'll provide some quantities that will * be used to perform our tests */ - $product->sub_items->each(function ($subItem) { + $product->sub_items->each( function ( $subItem ) { $subItem->unit_quantity->quantity = 10000; $subItem->unit_quantity->save(); - }); + } ); /** * We would like to store the current Quantity * and the quantity on the grouped product * for a better computation later */ - $quantities = $product->sub_items->mapWithKeys(function ($value, $key) use ($productService, $unitService) { - $unit = $unitService->get($value->unit_id); - $group = $unitService->getGroups($unit->group_id); - $baseUnit = $unitService->getBaseUnit($group); + $quantities = $product->sub_items->mapWithKeys( function ( $value, $key ) use ( $productService, $unitService ) { + $unit = $unitService->get( $value->unit_id ); + $group = $unitService->getGroups( $unit->group_id ); + $baseUnit = $unitService->getBaseUnit( $group ); return [ $value->product_id . '-' . $value->unit_id => [ 'currentQuantity' => $productService->getQuantity( @@ -478,7 +478,7 @@ public function attemptCreateOrderWithGroupedProducts($data = []) 'baseUnit' => $baseUnit, 'quantity' => $value->quantity, ] ]; - })->toArray(); + } )->toArray(); /** * Let's prepare the order to submit that. @@ -487,18 +487,18 @@ public function attemptCreateOrderWithGroupedProducts($data = []) date: ns()->date->now(), config: [ 'allow_quick_products' => false, - 'products' => fn() => collect([$product]), + 'products' => fn() => collect( [$product] ), ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $orderDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $orderDetails ); /** * Step 0: Ensure no error occurred */ - if ($response->status() !== 200) { - $response->assertStatus(200); + if ( $response->status() !== 200 ) { + $response->assertStatus( 200 ); } /** @@ -509,35 +509,35 @@ public function attemptCreateOrderWithGroupedProducts($data = []) $orderProductQuantity = $response[ 'data' ][ 'order' ][ 'products' ][0][ 'quantity' ]; - $query = ProductHistory::where('order_id', $response[ 'data' ][ 'order' ][ 'id' ]) - ->whereIn('product_id', collect($quantities)->map(fn($quantity) => $quantity[ 'product_id' ])->toArray()); + $query = ProductHistory::where( 'order_id', $response[ 'data' ][ 'order' ][ 'id' ] ) + ->whereIn( 'product_id', collect( $quantities )->map( fn( $quantity ) => $quantity[ 'product_id' ] )->toArray() ); /** * Step 1: assert match on the items included with the history */ - $this->assertTrue($query->count() === $product->sub_items->count(), 'Mismatch between the sold product and the included products.'); + $this->assertTrue( $query->count() === $product->sub_items->count(), 'Mismatch between the sold product and the included products.' ); /** * Step 2: We'll check if an history is created for the parent products */ - collect($response[ 'data' ][ 'order' ][ 'products' ])->each(function ($orderProduct) use ($response) { + collect( $response[ 'data' ][ 'order' ][ 'products' ] )->each( function ( $orderProduct ) use ( $response ) { $this->assertTrue( - ProductHistory::where('order_id', $response[ 'data' ][ 'order' ][ 'id' ])->where('order_product_id', $orderProduct[ 'id' ])->first() instanceof ProductHistory, - sprintf('There is no product history for the parent product "%s"', $orderProduct[ 'name' ]) + ProductHistory::where( 'order_id', $response[ 'data' ][ 'order' ][ 'id' ] )->where( 'order_product_id', $orderProduct[ 'id' ] )->first() instanceof ProductHistory, + sprintf( 'There is no product history for the parent product "%s"', $orderProduct[ 'name' ] ) ); - }); + } ); /** * Step 3: assert valid deduction of quantities */ - foreach ($query->get() as $productHistory) { + foreach ( $query->get() as $productHistory ) { $savedQuantity = $quantities[ $productHistory->product_id . '-' . $productHistory->unit_id ]; - $orderProduct = OrderProduct::findOrFail($productHistory->order_product_id); + $orderProduct = OrderProduct::findOrFail( $productHistory->order_product_id ); $finalQuantity = $productService->computeSubItemQuantity( subItemQuantity: $savedQuantity[ 'quantity' ], parentQuantity: $orderProductQuantity, - parentUnit: Unit::find($orderProduct->unit_id) + parentUnit: Unit::find( $orderProduct->unit_id ) ); $actualQuantity = $productService->getQuantity( @@ -545,41 +545,41 @@ public function attemptCreateOrderWithGroupedProducts($data = []) unit_id: $productHistory->unit_id ); - if (! (float) ($savedQuantity[ 'currentQuantity' ] - ($finalQuantity)) === (float) $actualQuantity) { - throw new Exception('Something went wrong'); + if ( ! (float) ( $savedQuantity[ 'currentQuantity' ] - ( $finalQuantity ) ) === (float) $actualQuantity ) { + throw new Exception( 'Something went wrong' ); } - $this->assertTrue((float) ($savedQuantity[ 'currentQuantity' ] - ($finalQuantity)) === (float) $actualQuantity, 'Quantity sold and recorded not matching'); + $this->assertTrue( (float) ( $savedQuantity[ 'currentQuantity' ] - ( $finalQuantity ) ) === (float) $actualQuantity, 'Quantity sold and recorded not matching' ); } return $response; } - private function prepareProductQuery($products, $productDetails = []) + private function prepareProductQuery( $products, $productDetails = [] ) { $faker = Factory::create(); - return $products->map(function ($product) use ($faker, $productDetails) { - $unitElement = $faker->randomElement($product->unit_quantities); + return $products->map( function ( $product ) use ( $faker, $productDetails ) { + $unitElement = $faker->randomElement( $product->unit_quantities ); - $data = array_merge([ + $data = array_merge( [ 'name' => $product->name, - 'quantity' => $product->quantity ?? $faker->numberBetween(1, 3), + 'quantity' => $product->quantity ?? $faker->numberBetween( 1, 3 ), 'unit_price' => $unitElement->sale_price, 'tax_type' => 'inclusive', 'tax_group_id' => 1, 'unit_id' => $unitElement->unit_id, - ], $productDetails); + ], $productDetails ); if ( - (isset($product->id)) + ( isset( $product->id ) ) ) { $data[ 'product_id' ] = $product->id; $data[ 'unit_quantity_id' ] = $unitElement->id; } return $data; - }); + } ); } public function attemptRefundOrderWithGroupedProducts() @@ -587,25 +587,25 @@ public function attemptRefundOrderWithGroupedProducts() /** * @var OrdersService $orderService */ - $orderService = app()->make(OrdersService::class); + $orderService = app()->make( OrdersService::class ); /** * @var ProductService $productService */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); /** * @var UnitService */ - $unitService = app()->make(UnitService::class); + $unitService = app()->make( UnitService::class ); - $lastOrder = Order::orderBy('id', 'desc')->first(); + $lastOrder = Order::orderBy( 'id', 'desc' )->first(); - $inventory = $lastOrder->products->map(function ($orderProduct) use ($productService, $unitService) { - return $orderProduct->product->sub_items->mapWithKeys(function ($subItem) use ($orderProduct, $productService, $unitService) { - $unit = $unitService->get($subItem->unit_id); - $unitGroup = $unitService->getGroups($unit->group_id); - $baseUnit = $unitService->getBaseUnit($unitGroup); + $inventory = $lastOrder->products->map( function ( $orderProduct ) use ( $productService, $unitService ) { + return $orderProduct->product->sub_items->mapWithKeys( function ( $subItem ) use ( $orderProduct, $productService, $unitService ) { + $unit = $unitService->get( $subItem->unit_id ); + $unitGroup = $unitService->getGroups( $unit->group_id ); + $baseUnit = $unitService->getBaseUnit( $unitGroup ); return [ $subItem->product_id . '-' . $subItem->unit_id => [ @@ -614,14 +614,14 @@ public function attemptRefundOrderWithGroupedProducts() unit_id: $subItem->unit_id ), 'unit' => $unit, - 'parentUnit' => $unitService->get($orderProduct->unit_id), + 'parentUnit' => $unitService->get( $orderProduct->unit_id ), 'baseUnit' => $baseUnit, 'unitGroup' => $unitGroup, 'quantity' => $subItem->quantity, ], ]; - }); - })->toArray(); + } ); + } )->toArray(); /** * Let's refund the order and see if the included products @@ -633,7 +633,7 @@ public function attemptRefundOrderWithGroupedProducts() 'payment' => [ 'identifier' => OrderPayment::PAYMENT_CASH, ], - 'products' => $lastOrder->products->map(function (OrderProduct $product) { + 'products' => $lastOrder->products->map( function ( OrderProduct $product ) { return [ 'id' => $product->id, 'condition' => OrderProductRefund::CONDITION_UNSPOILED, @@ -641,22 +641,22 @@ public function attemptRefundOrderWithGroupedProducts() 'quantity' => $product->quantity, 'unit_price' => $product->unit_price, ]; - })->toArray(), + } )->toArray(), ] ); $lastOrder ->products() ->get() - ->each(function (OrderProduct $orderProduct, $index) use ($inventory, $productService) { + ->each( function ( OrderProduct $orderProduct, $index ) use ( $inventory, $productService ) { $entry = $inventory[ $index ]; - $orderProduct->product->sub_items->each(function ($subItem) use ($entry, $orderProduct, $productService) { + $orderProduct->product->sub_items->each( function ( $subItem ) use ( $entry, $orderProduct, $productService ) { $savedQuantity = $entry[ $subItem->product_id . '-' . $subItem->unit_id ]; $finalQuantity = $productService->computeSubItemQuantity( parentUnit: $savedQuantity[ 'parentUnit' ], - parentQuantity: $orderProduct->refunded_products->sum('quantity'), + parentQuantity: $orderProduct->refunded_products->sum( 'quantity' ), subItemQuantity: $savedQuantity[ 'quantity' ] ); @@ -668,16 +668,16 @@ public function attemptRefundOrderWithGroupedProducts() /** * Step 1: Assert quantity is correctly updated */ - if (! (float) $actualQuantity === (float) ($finalQuantity + $savedQuantity[ 'currentQuantity' ])) { - throw new Exception('foo'); + if ( ! (float) $actualQuantity === (float) ( $finalQuantity + $savedQuantity[ 'currentQuantity' ] ) ) { + throw new Exception( 'foo' ); } $this->assertTrue( - (float) $actualQuantity === (float) ($finalQuantity + $savedQuantity[ 'currentQuantity' ]), + (float) $actualQuantity === (float) ( $finalQuantity + $savedQuantity[ 'currentQuantity' ] ), 'The new quantity doesn\'t match.' ); - }); - }); + } ); + } ); } public function attemptUpdateOrderOnRegister() @@ -685,84 +685,84 @@ public function attemptUpdateOrderOnRegister() /** * @var OrdersService $orderService */ - $orderService = app()->make(OrdersService::class); + $orderService = app()->make( OrdersService::class ); - $result = $this->attemptCreateOrderOnRegister([ + $result = $this->attemptCreateOrderOnRegister( [ 'orderData' => [ 'payments' => [], // we'll disable payments. ], - ]); + ] ); - extract($result); + extract( $result ); /** - * @var array $response + * @var array $response * @var Register $cashRegister */ - $order = Order::find($response[ 'data' ][ 'order' ][ 'id' ]); - $orderService->makeOrderSinglePayment([ + $order = Order::find( $response[ 'data' ][ 'order' ][ 'id' ] ); + $orderService->makeOrderSinglePayment( [ 'identifier' => OrderPayment::PAYMENT_CASH, 'value' => $response[ 'data' ][ 'order' ][ 'total' ], - ], $order); + ], $order ); /** * Making assertions */ - $cashRegisterHistory = RegisterHistory::where('register_id', $cashRegister->id)->orderBy('id', 'desc')->first(); + $cashRegisterHistory = RegisterHistory::where( 'register_id', $cashRegister->id )->orderBy( 'id', 'desc' )->first(); $this->assertTrue( - ns()->currency->getRaw($cashRegisterHistory->value) === $order->total, - __('The payment wasn\'t added to the cash register history') + ns()->currency->getRaw( $cashRegisterHistory->value ) === $order->total, + __( 'The payment wasn\'t added to the cash register history' ) ); } - private function registerOrderForCashRegister(Register $cashRegister, $data) + private function registerOrderForCashRegister( Register $cashRegister, $data ) { /** * @var TestService */ - $testService = app()->make(TestService::class); + $testService = app()->make( TestService::class ); - $orderDetails = $testService->prepareOrder(ns()->date->now(), array_merge([ + $orderDetails = $testService->prepareOrder( ns()->date->now(), array_merge( [ 'register_id' => $cashRegister->id, - ], $data)); + ], $data ) ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $orderDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $orderDetails ); - $response->assertStatus(200); + $response->assertStatus( 200 ); - return $response = json_decode($response->getContent(), true); + return $response = json_decode( $response->getContent(), true ); } - private function createAndDeleteOrderFromRegister(Register $cashRegister, $data) + private function createAndDeleteOrderFromRegister( Register $cashRegister, $data ) { /** * This test can't proceed without payments. */ - if (isset($data[ 'payments' ]) && count($data[ 'payments' ]) === 0) { + if ( isset( $data[ 'payments' ] ) && count( $data[ 'payments' ] ) === 0 ) { return false; } /** * @var TestService */ - $testService = app()->make(TestService::class); + $testService = app()->make( TestService::class ); /** * @var OrdersService */ - $ordersService = app()->make(OrdersService::class); + $ordersService = app()->make( OrdersService::class ); - $orderDetails = $testService->prepareOrder(ns()->date->now(), array_merge([ + $orderDetails = $testService->prepareOrder( ns()->date->now(), array_merge( [ 'register_id' => $cashRegister->id, - ], $data)); + ], $data ) ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $orderDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $orderDetails ); - $response->assertStatus(200); + $response->assertStatus( 200 ); - $response = json_decode($response->getContent(), true); + $response = json_decode( $response->getContent(), true ); $cashRegister->refresh(); $previousValue = $cashRegister->balance; @@ -771,13 +771,13 @@ private function createAndDeleteOrderFromRegister(Register $cashRegister, $data) * Step 2: We'll attempt to delete the product * We should check if the register balance has changed. */ - $ordersService->deleteOrder(Order::find($response[ 'data' ][ 'order' ][ 'id' ])); + $ordersService->deleteOrder( Order::find( $response[ 'data' ][ 'order' ][ 'id' ] ) ); $cashRegister->refresh(); - $newAmount = ns()->currency->define($previousValue)->subtractBy($response[ 'data' ][ 'order' ][ 'total' ])->getRaw(); + $newAmount = ns()->currency->define( $previousValue )->subtractBy( $response[ 'data' ][ 'order' ][ 'total' ] )->getRaw(); - $this->assertEquals((float) $cashRegister->balance, (float) $newAmount, 'The balance wasn\'t updated after deleting the order.'); + $this->assertEquals( (float) $cashRegister->balance, (float) $newAmount, 'The balance wasn\'t updated after deleting the order.' ); return $response; } @@ -785,23 +785,23 @@ private function createAndDeleteOrderFromRegister(Register $cashRegister, $data) /** * Will disburse the cash register * - * @param CashRegistersService $cashRegisterService + * @param CashRegistersService $cashRegisterService * @return void */ - private function disburseCashFromRegister(Register $cashRegister, CashRegistersService $cashRegistersService) + private function disburseCashFromRegister( Register $cashRegister, CashRegistersService $cashRegistersService ) { - return $cashRegistersService->cashOut($cashRegister, $cashRegister->balance / 1.5, __('Test disbursing the cash register')); + return $cashRegistersService->cashOut( $cashRegister, $cashRegister->balance / 1.5, __( 'Test disbursing the cash register' ) ); } /** * Will disburse the cash register * - * @param CashRegistersService $cashRegisterService + * @param CashRegistersService $cashRegisterService * @return void */ - private function cashInOnRegister(Register $cashRegister, CashRegistersService $cashRegistersService) + private function cashInOnRegister( Register $cashRegister, CashRegistersService $cashRegistersService ) { - return $cashRegistersService->cashIn($cashRegister, ($cashRegister->balance / 2), __('Test disbursing the cash register')); + return $cashRegistersService->cashIn( $cashRegister, ( $cashRegister->balance / 2 ), __( 'Test disbursing the cash register' ) ); } protected function attemptCreateCustomerOrder() @@ -810,18 +810,18 @@ protected function attemptCreateCustomerOrder() * Next we'll create the order assigning * the order type we have just created */ - $currency = app()->make(CurrencyService::class); + $currency = app()->make( CurrencyService::class ); $product = Product::withStockEnabled() - ->whereRelation('unit_quantities', 'quantity', '>', 100) - ->with('unit_quantities', fn($query) => $query->where('quantity', '>', 100)) + ->whereRelation( 'unit_quantities', 'quantity', '>', 100 ) + ->with( 'unit_quantities', fn( $query ) => $query->where( 'quantity', '>', 100 ) ) ->get() ->random(); - $unitQuantity = $product->unit_quantities()->where('quantity', '>', 100)->first(); + $unitQuantity = $product->unit_quantities()->where( 'quantity', '>', 100 )->first(); $subtotal = $unitQuantity->sale_price * 5; $shippingFees = 150; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', [ 'customer_id' => $this->attemptCreateCustomer()->id, 'type' => [ 'identifier' => 'takeaway' ], 'discount_type' => 'percentage', @@ -851,16 +851,16 @@ protected function attemptCreateCustomerOrder() 'payments' => [ [ 'identifier' => 'paypal-payment', - 'value' => $currency->define($subtotal) - ->additionateBy($shippingFees) + 'value' => $currency->define( $subtotal ) + ->additionateBy( $shippingFees ) ->getRaw(), ], ], - ]); + ] ); - $response->assertJsonPath('data.order.payment_status', Order::PAYMENT_PAID); - $response = json_decode($response->getContent(), true); - $this->assertTrue($response[ 'data' ][ 'order' ][ 'payments' ][0][ 'identifier' ] === 'paypal-payment', 'Invalid payment identifier detected.'); + $response->assertJsonPath( 'data.order.payment_status', Order::PAYMENT_PAID ); + $response = json_decode( $response->getContent(), true ); + $this->assertTrue( $response[ 'data' ][ 'order' ][ 'payments' ][0][ 'identifier' ] === 'paypal-payment', 'Invalid payment identifier detected.' ); return $response; } @@ -871,40 +871,40 @@ protected function attemptCreateOrderPaidWithCustomerBalance() * Next we'll create the order assigning * the order type we have just created */ - $currency = app()->make(CurrencyService::class); + $currency = app()->make( CurrencyService::class ); - $product = Product::where('type', '<>', Product::TYPE_GROUPED) - ->whereRelation('unit_quantities', 'quantity', '>', 100) - ->with('unit_quantities', fn($query) => $query->where('quantity', '>', 100)) + $product = Product::where( 'type', '<>', Product::TYPE_GROUPED ) + ->whereRelation( 'unit_quantities', 'quantity', '>', 100 ) + ->with( 'unit_quantities', fn( $query ) => $query->where( 'quantity', '>', 100 ) ) ->withStockEnabled() ->get() ->random(); - $unit = $product->unit_quantities()->where('quantity', '>', 0)->first(); + $unit = $product->unit_quantities()->where( 'quantity', '>', 0 )->first(); $subtotal = $unit->sale_price * 5; $shippingFees = 150; /** * @var CustomerService */ - $customerService = app()->make(CustomerService::class); + $customerService = app()->make( CustomerService::class ); $customer = $this->attemptCreateCustomer(); /** * we'll try crediting customer account */ $oldBalance = $customer->account_amount; - $customerService->saveTransaction($customer, CustomerAccountHistory::OPERATION_ADD, $subtotal + $shippingFees, 'For testing purpose...'); + $customerService->saveTransaction( $customer, CustomerAccountHistory::OPERATION_ADD, $subtotal + $shippingFees, 'For testing purpose...' ); $customer->refresh(); /** * #Test: We'll check if the old balance is different * from the new one. Meaning the change was effective. */ - $this->assertTrue((float) $oldBalance < (float) $customer->account_amount, 'The customer account hasn\'t been updated.'); + $this->assertTrue( (float) $oldBalance < (float) $customer->account_amount, 'The customer account hasn\'t been updated.' ); $oldBalance = (float) $customer->account_amount; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', [ 'customer_id' => $customer->id, 'type' => [ 'identifier' => 'takeaway' ], 'discount_type' => 'percentage', @@ -934,40 +934,40 @@ protected function attemptCreateOrderPaidWithCustomerBalance() 'payments' => [ [ 'identifier' => OrderPayment::PAYMENT_ACCOUNT, - 'value' => $currency->define($subtotal) - ->additionateBy($shippingFees) + 'value' => $currency->define( $subtotal ) + ->additionateBy( $shippingFees ) ->getRaw(), ], ], - ]); + ] ); - $response->assertJsonPath('data.order.payment_status', Order::PAYMENT_PAID); - $response = json_decode($response->getContent(), true); + $response->assertJsonPath( 'data.order.payment_status', Order::PAYMENT_PAID ); + $response = json_decode( $response->getContent(), true ); - $this->assertTrue($response[ 'data' ][ 'order' ][ 'payments' ][0][ 'identifier' ] === OrderPayment::PAYMENT_ACCOUNT, 'Invalid payment identifier detected.'); + $this->assertTrue( $response[ 'data' ][ 'order' ][ 'payments' ][0][ 'identifier' ] === OrderPayment::PAYMENT_ACCOUNT, 'Invalid payment identifier detected.' ); /** * Let's check if after the sale the customer balance has been updated. */ $customer->refresh(); - $this->assertTrue($oldBalance > (float) $customer->account_amount, 'The account has been updated'); + $this->assertTrue( $oldBalance > (float) $customer->account_amount, 'The account has been updated' ); /** * let's check if there is a stock flow transaction * that record the customer payment. */ - $history = CustomerAccountHistory::where('customer_id', $customer->id) - ->where('operation', CustomerAccountHistory::OPERATION_PAYMENT) - ->orderBy('id', 'desc') + $history = CustomerAccountHistory::where( 'customer_id', $customer->id ) + ->where( 'operation', CustomerAccountHistory::OPERATION_PAYMENT ) + ->orderBy( 'id', 'desc' ) ->first(); - $this->assertTrue((float) $history->amount === (float) $subtotal + $shippingFees, 'The customer account history transaction is not valid.'); + $this->assertTrue( (float) $history->amount === (float) $subtotal + $shippingFees, 'The customer account history transaction is not valid.' ); - $transactionHistory = TransactionHistory::where('customer_account_history_id', $history->id) - ->operation(TransactionHistory::OPERATION_DEBIT) + $transactionHistory = TransactionHistory::where( 'customer_account_history_id', $history->id ) + ->operation( TransactionHistory::OPERATION_DEBIT ) ->first(); - $this->assertTrue($transactionHistory instanceof TransactionHistory, 'No cash flow were found after the customer account payment.'); + $this->assertTrue( $transactionHistory instanceof TransactionHistory, 'No cash flow were found after the customer account payment.' ); } protected function attemptCreateCustomPaymentType() @@ -976,9 +976,9 @@ protected function attemptCreateCustomPaymentType() * To avoid any error, we'll make sure to delete the * payment type if that already exists. */ - $paymentType = PaymentType::identifier('paypal-payment')->first(); + $paymentType = PaymentType::identifier( 'paypal-payment' )->first(); - if ($paymentType instanceof PaymentType) { + if ( $paymentType instanceof PaymentType ) { $paymentType->delete(); } @@ -986,101 +986,101 @@ protected function attemptCreateCustomPaymentType() * First we'll create a custom payment type. * that has paypal as identifier */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.payments-types', [ - 'label' => __('PayPal'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.payments-types', [ + 'label' => __( 'PayPal' ), 'general' => [ 'identifier' => 'paypal-payment', 'active' => true, 'priority' => 0, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); } - public function attemptCreateOrder($data) + public function attemptCreateOrder( $data ) { - return $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $data); + return $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $data ); } - public function processOrders($orderDetails, $callback = null) + public function processOrders( $orderDetails, $callback = null ) { $responses = []; /** * @var CurrencyService */ - $currency = app()->make(CurrencyService::class); + $currency = app()->make( CurrencyService::class ); $faker = Factory::create(); /** * @var TaxService */ - $taxService = app()->make(TaxService::class); + $taxService = app()->make( TaxService::class ); - for ($i = 0; $i < $this->count; $i++) { + for ( $i = 0; $i < $this->count; $i++ ) { $singleResponse = []; - $shippingFees = $faker->randomElement([10, 15, 20, 25, 30, 35, 40]); - $discountRate = $faker->numberBetween(0, 5); + $shippingFees = $faker->randomElement( [10, 15, 20, 25, 30, 35, 40] ); + $discountRate = $faker->numberBetween( 0, 5 ); /** * if no products are provided we'll generate random * product to use on the order. */ - if (! isset($orderDetails[ 'products' ])) { - $products = isset($orderDetails[ 'productsRequest' ]) ? $orderDetails[ 'productsRequest' ]() : Product::notGrouped() + if ( ! isset( $orderDetails[ 'products' ] ) ) { + $products = isset( $orderDetails[ 'productsRequest' ] ) ? $orderDetails[ 'productsRequest' ]() : Product::notGrouped() ->notInGroup() - ->whereHas('unit_quantities', function ($query) { - $query->where('quantity', '>', 500); - }) - ->with(['unit_quantities' => function ($query) { - $query->where('quantity', '>', 500); - }]) - ->limit(3) + ->whereHas( 'unit_quantities', function ( $query ) { + $query->where( 'quantity', '>', 500 ); + } ) + ->with( ['unit_quantities' => function ( $query ) { + $query->where( 'quantity', '>', 500 ); + }] ) + ->limit( 3 ) ->get(); - $products = $products->map(function ($product) use ($faker, $taxService) { - $unitElement = $faker->randomElement($product->unit_quantities); + $products = $products->map( function ( $product ) use ( $faker, $taxService ) { + $unitElement = $faker->randomElement( $product->unit_quantities ); $discountRate = 10; - $quantity = $faker->numberBetween(1, 10); - $data = array_merge([ + $quantity = $faker->numberBetween( 1, 10 ); + $data = array_merge( [ 'name' => $product->name, - 'discount' => $taxService->getPercentageOf($unitElement->sale_price * $quantity, $discountRate), + 'discount' => $taxService->getPercentageOf( $unitElement->sale_price * $quantity, $discountRate ), 'discount_percentage' => $discountRate, - 'discount_type' => $faker->randomElement([ 'flat', 'percentage' ]), + 'discount_type' => $faker->randomElement( [ 'flat', 'percentage' ] ), 'quantity' => $quantity, 'unit_price' => $unitElement->sale_price, 'tax_type' => 'inclusive', 'tax_group_id' => 1, 'unit_id' => $unitElement->unit_id, - ], $this->customProductParams); + ], $this->customProductParams ); - if (! $this->allowQuickProducts) { + if ( ! $this->allowQuickProducts ) { $data[ 'product_id' ] = $product->id; $data[ 'unit_quantity_id' ] = $unitElement->id; - } elseif ($faker->randomElement([ true, false ])) { + } elseif ( $faker->randomElement( [ true, false ] ) ) { $data[ 'product_id' ] = $product->id; $data[ 'unit_quantity_id' ] = $unitElement->id; } return $data; - })->filter(function ($product) { + } )->filter( function ( $product ) { return $product[ 'quantity' ] > 0; - }); + } ); } else { - $products = collect($orderDetails[ 'products' ]); + $products = collect( $orderDetails[ 'products' ] ); } - $subtotal = ns()->currency->getRaw($products->map(function ($product) use ($currency, $taxService) { + $subtotal = ns()->currency->getRaw( $products->map( function ( $product ) use ( $currency, $taxService ) { $product[ 'discount' ] = 0; - if (isset($product[ 'discount_type' ])) { - $discount = match ($product[ 'discount_type' ]) { - 'percentage' => $taxService->getPercentageOf($product[ 'unit_price' ] * $product[ 'quantity' ], $product[ 'discount_percentage' ]), + if ( isset( $product[ 'discount_type' ] ) ) { + $discount = match ( $product[ 'discount_type' ] ) { + 'percentage' => $taxService->getPercentageOf( $product[ 'unit_price' ] * $product[ 'quantity' ], $product[ 'discount_percentage' ] ), 'flat' => $product[ 'discount' ], default => 0 }; @@ -1089,18 +1089,18 @@ public function processOrders($orderDetails, $callback = null) } $productSubTotal = $currency - ->fresh($product[ 'unit_price' ]) - ->multiplyBy($product[ 'quantity' ]) - ->subtractBy($product[ 'discount' ] ?? 0) + ->fresh( $product[ 'unit_price' ] ) + ->multiplyBy( $product[ 'quantity' ] ) + ->subtractBy( $product[ 'discount' ] ?? 0 ) ->getRaw(); return $productSubTotal; - })->sum()); + } )->sum() ); - if (! isset($orderDetails[ 'customer_id' ])) { + if ( ! isset( $orderDetails[ 'customer_id' ] ) ) { $customer = $this->attemptCreateCustomer(); } else { - $customer = Customer::find($orderDetails[ 'customer_id' ]); + $customer = Customer::find( $orderDetails[ 'customer_id' ] ); } /** @@ -1108,10 +1108,10 @@ public function processOrders($orderDetails, $callback = null) * We'll try to assign a coupon to * the selected customer */ - if (! isset($orderDetails[ 'coupons' ])) { - $customerCoupon = CustomerCoupon::where('customer_id', $customer->id)->get()->last(); + if ( ! isset( $orderDetails[ 'coupons' ] ) ) { + $customerCoupon = CustomerCoupon::where( 'customer_id', $customer->id )->get()->last(); - if ($customerCoupon instanceof CustomerCoupon && $this->processCoupon && $customerCoupon->usage < $customerCoupon->limit_usage) { + if ( $customerCoupon instanceof CustomerCoupon && $this->processCoupon && $customerCoupon->usage < $customerCoupon->limit_usage ) { $allCoupons = [ [ 'customer_coupon_id' => $customerCoupon->id, @@ -1120,9 +1120,9 @@ public function processOrders($orderDetails, $callback = null) 'type' => 'percentage_discount', 'code' => $customerCoupon->code, 'limit_usage' => $customerCoupon->coupon->limit_usage, - 'value' => $currency->define($customerCoupon->coupon->discount_value) - ->multiplyBy($subtotal) - ->divideBy(100) + 'value' => $currency->define( $customerCoupon->coupon->discount_value ) + ->multiplyBy( $subtotal ) + ->divideBy( 100 ) ->getRaw(), 'discount_value' => $customerCoupon->coupon->discount_value, 'minimum_cart_value' => $customerCoupon->coupon->minimum_cart_value, @@ -1130,15 +1130,15 @@ public function processOrders($orderDetails, $callback = null) ], ]; } else { - $allCoupons = collect([]); + $allCoupons = collect( [] ); } } else { $allCoupons = $orderDetails[ 'coupons' ]; } - $totalCoupons = collect($allCoupons)->map(fn($coupon) => $coupon[ 'value' ] ?? 0)->sum(); + $totalCoupons = collect( $allCoupons )->map( fn( $coupon ) => $coupon[ 'value' ] ?? 0 )->sum(); - if (isset($orderDetails[ 'discount_type' ]) && in_array($orderDetails[ 'discount_type' ], [ 'percentage', 'flat' ])) { + if ( isset( $orderDetails[ 'discount_type' ] ) && in_array( $orderDetails[ 'discount_type' ], [ 'percentage', 'flat' ] ) ) { $discount = [ 'type' => $orderDetails[ 'discount_type' ], 'rate' => $orderDetails[ 'discount_percentage' ], @@ -1155,29 +1155,29 @@ public function processOrders($orderDetails, $callback = null) /** * If the discount is percentage or flat. */ - if ($discount[ 'type' ] === 'percentage') { + if ( $discount[ 'type' ] === 'percentage' ) { $discount[ 'rate' ] = $discountRate; - $discount[ 'value' ] = $currency->define($discount[ 'rate' ]) - ->multiplyBy($subtotal) - ->divideBy(100) + $discount[ 'value' ] = $currency->define( $discount[ 'rate' ] ) + ->multiplyBy( $subtotal ) + ->divideBy( 100 ) ->getRaw(); - } elseif ($discount[ 'type' ] === 'flat') { - $discount[ 'value' ] = Currency::fresh($subtotal) - ->divideBy(2) + } elseif ( $discount[ 'type' ] === 'flat' ) { + $discount[ 'value' ] = Currency::fresh( $subtotal ) + ->divideBy( 2 ) ->getRaw(); $discount[ 'rate' ] = 0; } - $discountCoupons = $currency->define($discount[ 'value' ]) - ->additionateBy($allCoupons[0][ 'value' ] ?? 0) + $discountCoupons = $currency->define( $discount[ 'value' ] ) + ->additionateBy( $allCoupons[0][ 'value' ] ?? 0 ) ->getRaw(); - $dateString = Carbon::parse($orderDetails[ 'created_at' ] ?? now()->toDateTimeString())->startOfDay()->addHours( - $faker->numberBetween(0, 23) - )->format('Y-m-d H:m:s'); + $dateString = Carbon::parse( $orderDetails[ 'created_at' ] ?? now()->toDateTimeString() )->startOfDay()->addHours( + $faker->numberBetween( 0, 23 ) + )->format( 'Y-m-d H:m:s' ); - $orderData = array_merge([ + $orderData = array_merge( [ 'customer_id' => $customer->id, 'type' => [ 'identifier' => 'takeaway' ], 'discount_type' => $discount[ 'type' ], @@ -1197,9 +1197,9 @@ public function processOrders($orderDetails, $callback = null) 'country' => 'United State Seattle', ], ], - 'author' => ! empty($this->users) // we want to randomise the users - ? collect($this->users)->suffle()->first() - : User::get('id')->pluck('id')->shuffle()->first(), + 'author' => ! empty( $this->users ) // we want to randomise the users + ? collect( $this->users )->suffle()->first() + : User::get( 'id' )->pluck( 'id' )->shuffle()->first(), 'coupons' => $allCoupons, 'subtotal' => $subtotal, 'shipping' => $shippingFees, @@ -1207,66 +1207,66 @@ public function processOrders($orderDetails, $callback = null) 'payments' => $this->shouldMakePayment ? [ [ 'identifier' => 'cash-payment', - 'value' => $currency->define($subtotal) - ->additionateBy($shippingFees) + 'value' => $currency->define( $subtotal ) + ->additionateBy( $shippingFees ) ->subtractBy( $discountCoupons ) ->getRaw(), ], ] : [], - ], $orderDetails); + ], $orderDetails ); - $customer = Customer::find($orderData[ 'customer_id' ]); + $customer = Customer::find( $orderData[ 'customer_id' ] ); $customerFirstPurchases = $customer->purchases_amount; $customerFirstOwed = $customer->owed_amount; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $orderData); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $orderData ); /** * if a custom callback is provided * we'll call that callback as well */ - if (is_callable($callback)) { - $callback($response, $response->json()); + if ( is_callable( $callback ) ) { + $callback( $response, $response->json() ); } else { - if ($response->status() !== 200) { - $response->assertJson([ + if ( $response->status() !== 200 ) { + $response->assertJson( [ 'status' => 'success', - ]); + ] ); } $singleResponse[ 'order-creation' ] = $response->json(); - $totalCoupons = collect(Arr::get($singleResponse[ 'order-creation' ], 'data.order.coupons'))->map(fn($coupon) => $coupon[ 'value' ])->sum(); + $totalCoupons = collect( Arr::get( $singleResponse[ 'order-creation' ], 'data.order.coupons' ) )->map( fn( $coupon ) => $coupon[ 'value' ] )->sum(); - if ($this->shouldMakePayment) { - $total = $currency->define($subtotal) - ->additionateBy($orderData[ 'shipping' ]) - ->subtractBy($totalCoupons) + if ( $this->shouldMakePayment ) { + $total = $currency->define( $subtotal ) + ->additionateBy( $orderData[ 'shipping' ] ) + ->subtractBy( $totalCoupons ) ->getRaw(); - $this->assertEquals($currency->getRaw( - Arr::get($singleResponse[ 'order-creation' ], 'data.order.subtotal') - ), $currency->getRaw($orderData[ 'subtotal' ])); + $this->assertEquals( $currency->getRaw( + Arr::get( $singleResponse[ 'order-creation' ], 'data.order.subtotal' ) + ), $currency->getRaw( $orderData[ 'subtotal' ] ) ); - $this->assertEquals($currency->getRaw( - Arr::get($singleResponse[ 'order-creation' ], 'data.order.total') - ), $currency->define($subtotal) - ->additionateBy($orderData[ 'shipping' ]) - ->subtractBy($totalCoupons) + $this->assertEquals( $currency->getRaw( + Arr::get( $singleResponse[ 'order-creation' ], 'data.order.total' ) + ), $currency->define( $subtotal ) + ->additionateBy( $orderData[ 'shipping' ] ) + ->subtractBy( $totalCoupons ) ->getRaw() ); - $couponValue = (! empty($orderData[ 'coupons' ]) ? $totalCoupons : 0); - $totalPayments = collect($orderData[ 'payments' ])->map(fn($payment) => (float) $payment[ 'value' ])->sum() ?: 0; - $sum = ((float) $orderData[ 'subtotal' ] + (float) $orderData[ 'shipping' ] - (in_array($orderData[ 'discount_type' ], [ 'flat', 'percentage' ]) ? (float) $orderData[ 'discount' ] : 0) - $couponValue); - $change = ns()->currency->fresh($totalPayments)->subtractBy($sum)->getRaw(); + $couponValue = ( ! empty( $orderData[ 'coupons' ] ) ? $totalCoupons : 0 ); + $totalPayments = collect( $orderData[ 'payments' ] )->map( fn( $payment ) => (float) $payment[ 'value' ] )->sum() ?: 0; + $sum = ( (float) $orderData[ 'subtotal' ] + (float) $orderData[ 'shipping' ] - ( in_array( $orderData[ 'discount_type' ], [ 'flat', 'percentage' ] ) ? (float) $orderData[ 'discount' ] : 0 ) - $couponValue ); + $change = ns()->currency->fresh( $totalPayments )->subtractBy( $sum )->getRaw(); - $changeFromOrder = ns()->currency->getRaw(Arr::get($singleResponse[ 'order-creation' ], 'data.order.change')); - $this->assertEquals($changeFromOrder, $change); + $changeFromOrder = ns()->currency->getRaw( Arr::get( $singleResponse[ 'order-creation' ], 'data.order.change' ) ); + $this->assertEquals( $changeFromOrder, $change ); - $singleResponse[ 'order-payment' ] = json_decode($response->getContent()); + $singleResponse[ 'order-payment' ] = json_decode( $response->getContent() ); /** * test if the order has updated @@ -1277,9 +1277,9 @@ public function processOrders($orderDetails, $callback = null) $customerSecondOwed = $customer->owed_amount; $this->assertTrue( - (float) ($customerFirstPurchases + $total) === (float) $customerSecondPurchases, + (float) ( $customerFirstPurchases + $total ) === (float) $customerSecondPurchases, sprintf( - __('The customer purchase hasn\'t been updated. Expected %s Current Value %s. Total : %s'), + __( 'The customer purchase hasn\'t been updated. Expected %s Current Value %s. Total : %s' ), $customerFirstPurchases + $total, $customerSecondPurchases, $total @@ -1287,100 +1287,100 @@ public function processOrders($orderDetails, $callback = null) ); } - $responseData = json_decode($response->getContent(), true); + $responseData = json_decode( $response->getContent(), true ); /** * Let's test wether the cash * flow has been created for this sale */ - if ($responseData[ 'data' ][ 'order' ][ 'payment_status' ] !== 'unpaid') { + if ( $responseData[ 'data' ][ 'order' ][ 'payment_status' ] !== 'unpaid' ) { $this->assertTrue( - TransactionHistory::where('order_id', $responseData[ 'data' ][ 'order' ][ 'id' ])->first() + TransactionHistory::where( 'order_id', $responseData[ 'data' ][ 'order' ][ 'id' ] )->first() instanceof TransactionHistory, - __('No cash flow were created for this order.') + __( 'No cash flow were created for this order.' ) ); } - if ($faker->randomElement([ true ]) === true && $this->shouldRefund) { + if ( $faker->randomElement( [ true ] ) === true && $this->shouldRefund ) { /** * We'll keep original products amounts and quantity * this means we're doing a full refund of price and quantities */ - $productCondition = $faker->randomElement([ + $productCondition = $faker->randomElement( [ OrderProductRefund::CONDITION_DAMAGED, OrderProductRefund::CONDITION_UNSPOILED, - ]); + ] ); - $products = collect($responseData[ 'data' ][ 'order' ][ 'products' ])->map(function ($product) use ($faker, $productCondition) { - return array_merge($product, [ + $products = collect( $responseData[ 'data' ][ 'order' ][ 'products' ] )->map( function ( $product ) use ( $faker, $productCondition ) { + return array_merge( $product, [ 'condition' => $productCondition, - 'description' => __('A random description from the refund test'), - 'quantity' => $faker->randomElement([ + 'description' => __( 'A random description from the refund test' ), + 'quantity' => $faker->randomElement( [ $product[ 'quantity' ], // floor( $product[ 'quantity' ] / 2 ) - ]), - ]); - }); + ] ), + ] ); + } ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders/' . $responseData[ 'data' ][ 'order' ][ 'id' ] . '/refund', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders/' . $responseData[ 'data' ][ 'order' ][ 'id' ] . '/refund', [ 'payment' => [ - 'identifier' => $faker->randomElement([ + 'identifier' => $faker->randomElement( [ OrderPayment::PAYMENT_ACCOUNT, OrderPayment::PAYMENT_CASH, - ]), + ] ), ], - 'refund_shipping' => $faker->randomElement([ true, false ]), - 'total' => collect($products) - ->map(fn($product) => $currency - ->define($product[ 'quantity' ]) - ->multiplyBy($product[ 'unit_price' ]) + 'refund_shipping' => $faker->randomElement( [ true, false ] ), + 'total' => collect( $products ) + ->map( fn( $product ) => $currency + ->define( $product[ 'quantity' ] ) + ->multiplyBy( $product[ 'unit_price' ] ) ->getRaw() )->sum(), 'products' => $products, - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); /** * A single cash flow should be * created for that order for the sale account */ - $totalCashFlow = TransactionHistory::where('order_id', $responseData[ 'data' ][ 'order' ][ 'id' ]) - ->where('operation', TransactionHistory::OPERATION_CREDIT) - ->where('transaction_account_id', ns()->option->get('ns_sales_cashflow_account')) + $totalCashFlow = TransactionHistory::where( 'order_id', $responseData[ 'data' ][ 'order' ][ 'id' ] ) + ->where( 'operation', TransactionHistory::OPERATION_CREDIT ) + ->where( 'transaction_account_id', ns()->option->get( 'ns_sales_cashflow_account' ) ) ->count(); - $this->assertTrue($totalCashFlow === 1, 'More than 1 cash flow was created for the sale account.'); + $this->assertTrue( $totalCashFlow === 1, 'More than 1 cash flow was created for the sale account.' ); /** * all refund transaction give a stock flow record. * We need to check if it has been created. */ - $totalRefundedCashFlow = TransactionHistory::where('order_id', $responseData[ 'data' ][ 'order' ][ 'id' ]) - ->where('operation', TransactionHistory::OPERATION_DEBIT) - ->where('transaction_account_id', ns()->option->get('ns_sales_refunds_account')) + $totalRefundedCashFlow = TransactionHistory::where( 'order_id', $responseData[ 'data' ][ 'order' ][ 'id' ] ) + ->where( 'operation', TransactionHistory::OPERATION_DEBIT ) + ->where( 'transaction_account_id', ns()->option->get( 'ns_sales_refunds_account' ) ) ->count(); - $this->assertTrue($totalRefundedCashFlow === $products->count(), 'Not enough cash flow entry were created for the refunded product'); + $this->assertTrue( $totalRefundedCashFlow === $products->count(), 'Not enough cash flow entry were created for the refunded product' ); /** * in case the order is refunded with * some defective products, we need to check if * the waste expense has been created. */ - if ($productCondition === OrderProductRefund::CONDITION_DAMAGED) { - $totalSpoiledCashFlow = TransactionHistory::where('order_id', $responseData[ 'data' ][ 'order' ][ 'id' ]) - ->where('operation', TransactionHistory::OPERATION_DEBIT) - ->where('transaction_account_id', ns()->option->get('ns_stock_return_spoiled_account')) + if ( $productCondition === OrderProductRefund::CONDITION_DAMAGED ) { + $totalSpoiledCashFlow = TransactionHistory::where( 'order_id', $responseData[ 'data' ][ 'order' ][ 'id' ] ) + ->where( 'operation', TransactionHistory::OPERATION_DEBIT ) + ->where( 'transaction_account_id', ns()->option->get( 'ns_stock_return_spoiled_account' ) ) ->count(); - $this->assertTrue($totalSpoiledCashFlow === $products->count(), 'Not enough cash flow entry were created for the refunded product'); + $this->assertTrue( $totalSpoiledCashFlow === $products->count(), 'Not enough cash flow entry were created for the refunded product' ); } - $singleResponse[ 'order-refund' ] = json_decode($response->getContent()); + $singleResponse[ 'order-refund' ] = json_decode( $response->getContent() ); } $responses[] = $singleResponse; @@ -1392,20 +1392,20 @@ public function processOrders($orderDetails, $callback = null) protected function attemptOrderWithProductPriceMode() { - $currency = app()->make(CurrencyService::class); + $currency = app()->make( CurrencyService::class ); $product = Product::withStockEnabled() ->notGrouped() ->notInGroup() - ->whereRelation('unit_quantities', 'quantity', '>', 100) - ->with('unit_quantities', fn($query) => $query->where('quantity', '>', 100)) + ->whereRelation( 'unit_quantities', 'quantity', '>', 100 ) + ->with( 'unit_quantities', fn( $query ) => $query->where( 'quantity', '>', 100 ) ) ->get() ->random(); - $unit = $product->unit_quantities()->where('quantity', '>', 100)->first(); + $unit = $product->unit_quantities()->where( 'quantity', '>', 100 )->first(); $subtotal = $unit->sale_price * 5; $shippingFees = 150; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', [ 'customer_id' => Customer::get()->random()->id, 'type' => [ 'identifier' => 'takeaway' ], 'discount_type' => 'percentage', @@ -1442,20 +1442,20 @@ protected function attemptOrderWithProductPriceMode() 'payments' => [ [ 'identifier' => 'cash-payment', - 'value' => $currency->define($subtotal) - ->additionateBy($shippingFees) + 'value' => $currency->define( $subtotal ) + ->additionateBy( $shippingFees ) ->getRaw(), ], ], - ]); + ] ); - $response->assertStatus(200); - $json = json_decode($response->getContent(), true); + $response->assertStatus( 200 ); + $json = json_decode( $response->getContent(), true ); $order = $json[ 'data' ][ 'order' ]; - $this->assertTrue($order[ 'products' ][0][ 'mode' ] === 'retail', 'Failed to assert the first product price mode is "retail"'); - $this->assertTrue($order[ 'products' ][1][ 'mode' ] === 'normal', 'Failed to assert the second product price mode is "normal"'); + $this->assertTrue( $order[ 'products' ][0][ 'mode' ] === 'retail', 'Failed to assert the first product price mode is "retail"' ); + $this->assertTrue( $order[ 'products' ][1][ 'mode' ] === 'normal', 'Failed to assert the second product price mode is "normal"' ); } protected function attemptHoldAndCheckoutOrder() @@ -1463,7 +1463,7 @@ protected function attemptHoldAndCheckoutOrder() /** * @var ProductService $productService */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); $result = $this->attemptCreateHoldOrder(); /** @@ -1477,44 +1477,44 @@ protected function attemptHoldAndCheckoutOrder() * and make sure there is a stock deducted. First we'll keep * the actual products stock */ - $stock = collect($order[ 'products' ])->mapWithKeys(function ($orderProduct) use ($productService) { + $stock = collect( $order[ 'products' ] )->mapWithKeys( function ( $orderProduct ) use ( $productService ) { return [ - $orderProduct[ 'id' ] => $productService->getQuantity($orderProduct[ 'product_id' ], $orderProduct[ 'unit_id' ]), + $orderProduct[ 'id' ] => $productService->getQuantity( $orderProduct[ 'product_id' ], $orderProduct[ 'unit_id' ] ), ]; - }); + } ); $order[ 'type' ] = [ 'identifier' => $order[ 'type' ] ]; - $order[ 'products' ] = collect($order[ 'products' ])->map(function ($product) { + $order[ 'products' ] = collect( $order[ 'products' ] )->map( function ( $product ) { $product[ 'quantity' ] = 5; // we remove 1 quantity so it returns to inventory return $product; - })->toArray(); + } )->toArray(); $order[ 'payments' ][] = [ 'identifier' => 'cash-payment', - 'value' => abs($order[ 'change' ]), + 'value' => abs( $order[ 'change' ] ), ]; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('PUT', 'api/orders/' . $order[ 'id' ], $order); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'PUT', 'api/orders/' . $order[ 'id' ], $order ); - $response->assertStatus(200); + $response->assertStatus( 200 ); - $response->assertJsonPath('data.order.payment_status', Order::PAYMENT_PAID); + $response->assertJsonPath( 'data.order.payment_status', Order::PAYMENT_PAID ); - $stock->each(function ($quantity, $orderProductID) use ($productService) { - $orderProduct = OrderProduct::find($orderProductID); - $newQuantity = $productService->getQuantity($orderProduct->product_id, $orderProduct->unit_id); + $stock->each( function ( $quantity, $orderProductID ) use ( $productService ) { + $orderProduct = OrderProduct::find( $orderProductID ); + $newQuantity = $productService->getQuantity( $orderProduct->product_id, $orderProduct->unit_id ); $this->assertTrue( $newQuantity < $quantity, sprintf( - __('Stock mismatch! %s was expected to be greater than %s, after an order update'), + __( 'Stock mismatch! %s was expected to be greater than %s, after an order update' ), $newQuantity, $quantity ) ); - }); + } ); } protected function attemptHoldOrderAndCheckoutWithGroupedProducts() @@ -1522,11 +1522,11 @@ protected function attemptHoldOrderAndCheckoutWithGroupedProducts() /** * @var ProductService $productService */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); $product = Product::withStockEnabled() ->grouped() - ->with([ 'unit_quantities' ]) + ->with( [ 'unit_quantities' ] ) ->get() ->random(); @@ -1534,14 +1534,14 @@ protected function attemptHoldOrderAndCheckoutWithGroupedProducts() * Step 1: We want to make sure the system take in account * the remaining quantity while editing the order. */ - $product->sub_items()->with([ 'unit_quantity', 'product' ])->get()->each(function (ProductSubItem $subProduct) use ($productService) { - $productService->setQuantity($subProduct->product->id, $subProduct->unit_quantity->unit_id, 25000); - }); + $product->sub_items()->with( [ 'unit_quantity', 'product' ] )->get()->each( function ( ProductSubItem $subProduct ) use ( $productService ) { + $productService->setQuantity( $subProduct->product->id, $subProduct->unit_quantity->unit_id, 25000 ); + } ); $unitQuantity = $product->unit_quantities->first(); - if (! $unitQuantity instanceof ProductUnitQuantity) { - throw new Exception('No valid unit is available.'); + if ( ! $unitQuantity instanceof ProductUnitQuantity ) { + throw new Exception( 'No valid unit is available.' ); } $subtotal = $unitQuantity->sale_price * 5; @@ -1575,11 +1575,11 @@ protected function attemptHoldOrderAndCheckoutWithGroupedProducts() ], ]; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $orderDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $orderDetails ); - $response->assertStatus(200); - $response->assertJsonPath('data.order.payment_status', Order::PAYMENT_HOLD); + $response->assertStatus( 200 ); + $response->assertJsonPath( 'data.order.payment_status', Order::PAYMENT_HOLD ); $payment = PaymentType::first(); $order = $response->json()[ 'data' ][ 'order' ]; @@ -1589,31 +1589,31 @@ protected function attemptHoldOrderAndCheckoutWithGroupedProducts() * and make sure there is a stock deducted. First we'll keep * the actual products stock */ - $stock = collect($order[ 'products' ])->mapWithKeys(function ($orderProduct) use ($productService) { - $product = Product::with([ 'sub_items.product', 'sub_items.unit_quantity' ]) - ->where('id', $orderProduct[ 'product_id' ]) + $stock = collect( $order[ 'products' ] )->mapWithKeys( function ( $orderProduct ) use ( $productService ) { + $product = Product::with( [ 'sub_items.product', 'sub_items.unit_quantity' ] ) + ->where( 'id', $orderProduct[ 'product_id' ] ) ->first(); return [ - $orderProduct[ 'id' ] => $product->sub_items->mapWithKeys(fn($subItem) => [ - $subItem->id => $productService->getQuantity($subItem->product->id, $subItem->unit_quantity->unit_id), - ]), + $orderProduct[ 'id' ] => $product->sub_items->mapWithKeys( fn( $subItem ) => [ + $subItem->id => $productService->getQuantity( $subItem->product->id, $subItem->unit_quantity->unit_id ), + ] ), ]; - }); + } ); /** * Step 3: We'll try to make a payment to the order to * turn that into a partially paid order. */ - $orderDetails = array_merge($orderDetails, [ - 'products' => Order::find($order[ 'id' ]) + $orderDetails = array_merge( $orderDetails, [ + 'products' => Order::find( $order[ 'id' ] ) ->products() ->get() - ->map(function ($product) { + ->map( function ( $product ) { $product->quantity = 4; return $product; - }) + } ) ->toArray(), 'payments' => [ [ @@ -1621,25 +1621,25 @@ protected function attemptHoldOrderAndCheckoutWithGroupedProducts() 'value' => $order[ 'total' ] / 3, ], ], - ]); + ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('PUT', 'api/orders/' . $order[ 'id' ], $orderDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'PUT', 'api/orders/' . $order[ 'id' ], $orderDetails ); - $response->assertStatus(200); - $response->assertJsonPath('data.order.payment_status', Order::PAYMENT_PARTIALLY); + $response->assertStatus( 200 ); + $response->assertJsonPath( 'data.order.payment_status', Order::PAYMENT_PARTIALLY ); - $stock->each(function ($products, $parentProductID) use ($productService) { - $products->each(function ($quantity, $subItemID) use ($productService) { - $productSubItem = ProductSubItem::with('product')->find($subItemID); - $newQuantity = $productService->getQuantity($productSubItem->product->id, $productSubItem->unit_id); - $this->assertTrue($newQuantity < $quantity, __('The quantity hasn\'t changed after selling a previously hold order.')); - }); - }); + $stock->each( function ( $products, $parentProductID ) use ( $productService ) { + $products->each( function ( $quantity, $subItemID ) use ( $productService ) { + $productSubItem = ProductSubItem::with( 'product' )->find( $subItemID ); + $newQuantity = $productService->getQuantity( $productSubItem->product->id, $productSubItem->unit_id ); + $this->assertTrue( $newQuantity < $quantity, __( 'The quantity hasn\'t changed after selling a previously hold order.' ) ); + } ); + } ); $this->assertTrue( - ProductHistory::where('order_id', $order[ 'id' ])->count() > 0, - __('There has not been a stock transaction for an order that has partially received a payment.') + ProductHistory::where( 'order_id', $order[ 'id' ] )->count() > 0, + __( 'There has not been a stock transaction for an order that has partially received a payment.' ) ); return $response->json(); @@ -1649,20 +1649,20 @@ protected function attemptCreateHoldOrder() { $product = Product::withStockEnabled() ->notGrouped() - ->with('unit_quantities') + ->with( 'unit_quantities' ) ->first(); // We provide some quantities to ensure // the test doesn't fail because of the missing stock - $product->unit_quantities->each(function ($unitQuantity) { + $product->unit_quantities->each( function ( $unitQuantity ) { $unitQuantity->quantity = 10000; $unitQuantity->save(); - }); + } ); $unitQuantity = $product->unit_quantities->first(); - if (! $unitQuantity instanceof ProductUnitQuantity) { - throw new Exception('No valid unit is available.'); + if ( ! $unitQuantity instanceof ProductUnitQuantity ) { + throw new Exception( 'No valid unit is available.' ); } $subtotal = $unitQuantity->sale_price * 5; @@ -1696,33 +1696,33 @@ protected function attemptCreateHoldOrder() ], ]; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $orderDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $orderDetails ); - $response->assertStatus(200); - $response->assertJsonPath('data.order.payment_status', Order::PAYMENT_HOLD); + $response->assertStatus( 200 ); + $response->assertJsonPath( 'data.order.payment_status', Order::PAYMENT_HOLD ); return $response; } - protected function attemptUpdateHoldOrder(Order $order) + protected function attemptUpdateHoldOrder( Order $order ) { $product = Product::withStockEnabled() ->notGrouped() - ->with('unit_quantities') + ->with( 'unit_quantities' ) ->first(); // We provide some quantities to ensure // the test doesn't fail because of the missing stock - $product->unit_quantities->each(function ($unitQuantity) { + $product->unit_quantities->each( function ( $unitQuantity ) { $unitQuantity->quantity = 10000; $unitQuantity->save(); - }); + } ); $unitQuantity = $product->unit_quantities->first(); - if (! $unitQuantity instanceof ProductUnitQuantity) { - throw new Exception('No valid unit is available.'); + if ( ! $unitQuantity instanceof ProductUnitQuantity ) { + throw new Exception( 'No valid unit is available.' ); } $subtotal = $unitQuantity->sale_price * 5; @@ -1730,7 +1730,7 @@ protected function attemptUpdateHoldOrder(Order $order) /** * @var ProductService $productService */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); $orderDetails = [ 'customer_id' => $this->attemptCreateCustomer()->id, @@ -1769,28 +1769,28 @@ protected function attemptUpdateHoldOrder(Order $order) * and make sure there is a stock deducted. First we'll keep * the actual products stock */ - $stock = collect($order->products)->mapWithKeys(function ($orderProduct) use ($productService) { + $stock = collect( $order->products )->mapWithKeys( function ( $orderProduct ) use ( $productService ) { return [ $orderProduct[ 'id' ] => $productService->getQuantity( $orderProduct->product_id, $orderProduct->unit_id ), ]; - }); + } ); /** * Step 3: We'll try to make a payment to the order to * turn that into a partially paid order. */ - $orderDetails = array_merge($orderDetails, [ - 'products' => Order::find($order[ 'id' ]) + $orderDetails = array_merge( $orderDetails, [ + 'products' => Order::find( $order[ 'id' ] ) ->products() ->get() - ->map(function ($product) { + ->map( function ( $product ) { $product->quantity = 4; // we assume the remaining stock has at least 1 quantity remaining. return $product; - }) + } ) ->toArray(), 'payments' => [ [ @@ -1798,23 +1798,23 @@ protected function attemptUpdateHoldOrder(Order $order) 'value' => $order[ 'total' ] / 3, ], ], - ]); + ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('PUT', 'api/orders/' . $order[ 'id' ], $orderDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'PUT', 'api/orders/' . $order[ 'id' ], $orderDetails ); - $response->assertStatus(200); - $response->assertJsonPath('data.order.payment_status', Order::PAYMENT_PARTIALLY); + $response->assertStatus( 200 ); + $response->assertJsonPath( 'data.order.payment_status', Order::PAYMENT_PARTIALLY ); - $stock->each(function ($quantity, $orderProductID) use ($productService) { - $orderProduct = OrderProduct::find($orderProductID); - $newQuantity = $productService->getQuantity($orderProduct->product_id, $orderProduct->unit_id); - $this->assertTrue($newQuantity < $quantity, __('The quantity hasn\'t changed after selling a previously hold order.')); - }); + $stock->each( function ( $quantity, $orderProductID ) use ( $productService ) { + $orderProduct = OrderProduct::find( $orderProductID ); + $newQuantity = $productService->getQuantity( $orderProduct->product_id, $orderProduct->unit_id ); + $this->assertTrue( $newQuantity < $quantity, __( 'The quantity hasn\'t changed after selling a previously hold order.' ) ); + } ); $this->assertTrue( - ProductHistory::where('order_id', $order[ 'id' ])->count() > 0, - __('There has not been a stock transaction for an order that has partially received a payment.') + ProductHistory::where( 'order_id', $order[ 'id' ] )->count() > 0, + __( 'There has not been a stock transaction for an order that has partially received a payment.' ) ); return $response->json(); @@ -1825,7 +1825,7 @@ protected function attemptDeleteOrder() /** * @var TestService */ - $testService = app()->make(TestService::class); + $testService = app()->make( TestService::class ); $customer = Customer::get()->random(); /** @@ -1842,8 +1842,8 @@ protected function attemptDeleteOrder() config: [ 'products' => function () { return Product::withStockEnabled() - ->whereRelation('unit_quantities', 'quantity', '>', 100) - ->with('unit_quantities', fn($query) => $query->where('quantity', '>', 100)) + ->whereRelation( 'unit_quantities', 'quantity', '>', 100 ) + ->with( 'unit_quantities', fn( $query ) => $query->where( 'quantity', '>', 100 ) ) ->notGrouped() ->notInGroup() ->get(); @@ -1852,51 +1852,51 @@ protected function attemptDeleteOrder() date: ns()->date->now() ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $data); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $data ); - $response->assertStatus(200); + $response->assertStatus( 200 ); - $response->assertStatus(200); + $response->assertStatus( 200 ); - $order = (object) json_decode($response->getContent(), true)[ 'data' ][ 'order' ]; - $order = Order::with([ 'products', 'user' ])->find($order->id); + $order = (object) json_decode( $response->getContent(), true )[ 'data' ][ 'order' ]; + $order = Order::with( [ 'products', 'user' ] )->find( $order->id ); $refreshed = $customer->fresh(); - $this->assertTrue($customer->purchases_amount < $refreshed->purchases_amount, 'The customer balance hasn\'t been updated.'); + $this->assertTrue( $customer->purchases_amount < $refreshed->purchases_amount, 'The customer balance hasn\'t been updated.' ); /** * @var ProductService */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); $products = $order->products - ->filter(fn($product) => $product->product_id > 0) - ->map(function ($product) use ($productService) { - $product->previous_quantity = $productService->getQuantity($product->product_id, $product->unit_id); + ->filter( fn( $product ) => $product->product_id > 0 ) + ->map( function ( $product ) use ( $productService ) { + $product->previous_quantity = $productService->getQuantity( $product->product_id, $product->unit_id ); return $product; - }); + } ); /** * let's check if the order has a cash flow entry */ - $this->assertTrue(TransactionHistory::where('order_id', $order->id)->first() instanceof TransactionHistory, 'No cash flow created for the order.'); + $this->assertTrue( TransactionHistory::where( 'order_id', $order->id )->first() instanceof TransactionHistory, 'No cash flow created for the order.' ); - if ($order instanceof Order) { + if ( $order instanceof Order ) { $order_id = $order->id; /** * @var OrdersService */ - $orderService = app()->make(OrdersService::class); - $orderService->deleteOrder($order); + $orderService = app()->make( OrdersService::class ); + $orderService->deleteOrder( $order ); - $totalPayments = OrderPayment::where('order_id', $order_id)->count(); + $totalPayments = OrderPayment::where( 'order_id', $order_id )->count(); - $this->assertTrue($totalPayments === 0, + $this->assertTrue( $totalPayments === 0, sprintf( - __('An order payment hasn\'t been deleted along with the order (%s).'), + __( 'An order payment hasn\'t been deleted along with the order (%s).' ), $order->id ) ); @@ -1907,22 +1907,22 @@ protected function attemptDeleteOrder() */ $newCustomer = $customer->fresh(); - $this->assertEquals($newCustomer->purchases_amount, $customer->purchases_amount, 'The customer total purchase hasn\'t changed after deleting the order.'); + $this->assertEquals( $newCustomer->purchases_amount, $customer->purchases_amount, 'The customer total purchase hasn\'t changed after deleting the order.' ); /** * let's check if flow entry has been removed */ - $this->assertTrue(! TransactionHistory::where('order_id', $order->id)->first() instanceof TransactionHistory, 'The cash flow hasn\'t been deleted.'); + $this->assertTrue( ! TransactionHistory::where( 'order_id', $order->id )->first() instanceof TransactionHistory, 'The cash flow hasn\'t been deleted.' ); - $products->each(function (OrderProduct $orderProduct) use ($productService) { + $products->each( function ( OrderProduct $orderProduct ) use ( $productService ) { $originalProduct = $orderProduct->product; /** * Here we'll check if the stock returns when the * order is deleted */ - if ($originalProduct->stock_management === Product::STOCK_MANAGEMENT_ENABLED) { - $orderProduct->actual_quantity = $productService->getQuantity($orderProduct->product_id, $orderProduct->unit_id); + if ( $originalProduct->stock_management === Product::STOCK_MANAGEMENT_ENABLED ) { + $orderProduct->actual_quantity = $productService->getQuantity( $orderProduct->product_id, $orderProduct->unit_id ); /** * Let's check if the quantity has been restored @@ -1930,7 +1930,7 @@ protected function attemptDeleteOrder() */ $this->assertTrue( (float) $orderProduct->actual_quantity === (float) $orderProduct->previous_quantity + (float) $orderProduct->quantity, - __('The new quantity was not restored to what it was before the deletion.') + __( 'The new quantity was not restored to what it was before the deletion.' ) ); } @@ -1938,21 +1938,21 @@ protected function attemptDeleteOrder() * Here we'll check if there is an history created for every * product that was deleted. */ - $productHistory = ProductHistory::where('action', ProductHistory::ACTION_RETURNED) - ->where('order_product_id', $orderProduct->id) - ->where('order_id', $orderProduct->order_id) + $productHistory = ProductHistory::where( 'action', ProductHistory::ACTION_RETURNED ) + ->where( 'order_product_id', $orderProduct->id ) + ->where( 'order_id', $orderProduct->order_id ) ->first(); $this->assertTrue( ! $productHistory instanceof ProductHistory, sprintf( - __('No product history was created for the product "%s" upon is was deleted with the order it\'s attached to.'), + __( 'No product history was created for the product "%s" upon is was deleted with the order it\'s attached to.' ), $orderProduct->name ) ); - }); + } ); } else { - throw new Exception(__('No order where found to perform the test.')); + throw new Exception( __( 'No order where found to perform the test.' ) ); } } @@ -1961,7 +1961,7 @@ protected function attemptDeleteVoidedOrder() /** * @var TestService */ - $testService = app()->make(TestService::class); + $testService = app()->make( TestService::class ); $customer = Customer::get()->random(); /** @@ -1977,11 +1977,11 @@ protected function attemptDeleteVoidedOrder() ], config: [ 'products' => function () { - return Product::where('STOCK_MANAGEMENT', Product::STOCK_MANAGEMENT_ENABLED) - ->whereRelation('unit_quantities', 'quantity', '>', 100) - ->with('unit_quantities', function ($query) { - $query->where('quantity', '>', 100); - }) + return Product::where( 'STOCK_MANAGEMENT', Product::STOCK_MANAGEMENT_ENABLED ) + ->whereRelation( 'unit_quantities', 'quantity', '>', 100 ) + ->with( 'unit_quantities', function ( $query ) { + $query->where( 'quantity', '>', 100 ); + } ) ->notGrouped() ->notInGroup() ->get(); @@ -1990,54 +1990,54 @@ protected function attemptDeleteVoidedOrder() date: ns()->date->now() ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $data); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $data ); $orderData = (object) $response->json()[ 'data' ][ 'order' ]; - $order = Order::with([ 'products', 'user' ])->find($orderData->id); + $order = Order::with( [ 'products', 'user' ] )->find( $orderData->id ); /** * Step 1: Void an order before deleting */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders/' . $orderData->id . '/void', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders/' . $orderData->id . '/void', [ 'reason' => 'Testing Voiding', - ]); + ] ); $response->assertOk(); - $order->load([ 'products.product' ]); + $order->load( [ 'products.product' ] ); /** * We'll check if for each product on the order * there was a refund made for the returned goods */ - $order->products->each(function ($product) { + $order->products->each( function ( $product ) { // every product that aren't refund - if ($product->refunded_products()->count() === 0 && $product->product()->first() instanceof Product) { - $history = ProductHistory::where('operation_type', ProductHistory::ACTION_VOID_RETURN) - ->where('order_product_id', $product->id) - ->where('order_id', $product->order_id) + if ( $product->refunded_products()->count() === 0 && $product->product()->first() instanceof Product ) { + $history = ProductHistory::where( 'operation_type', ProductHistory::ACTION_VOID_RETURN ) + ->where( 'order_product_id', $product->id ) + ->where( 'order_id', $product->order_id ) ->first(); - $this->assertTrue($history instanceof ProductHistory, __('No return history was created for a void order product.')); + $this->assertTrue( $history instanceof ProductHistory, __( 'No return history was created for a void order product.' ) ); } - }); + } ); $order->refresh(); - $order->load([ 'products.product' ]); + $order->load( [ 'products.product' ] ); /** * @var OrdersService */ - $orderService = app()->make(OrdersService::class); - $orderService->deleteOrder($order); + $orderService = app()->make( OrdersService::class ); + $orderService->deleteOrder( $order ); - $totalPayments = OrderPayment::where('order_id', $order->id)->count(); + $totalPayments = OrderPayment::where( 'order_id', $order->id )->count(); - $this->assertTrue($totalPayments === 0, + $this->assertTrue( $totalPayments === 0, sprintf( - __('An order payment hasn\'t been deleted along with the order (%s).'), + __( 'An order payment hasn\'t been deleted along with the order (%s).' ), $order->id ) ); @@ -2046,17 +2046,17 @@ protected function attemptDeleteVoidedOrder() * Step 2: We'll now check if by deleting the order * we still have the product history created. */ - $order->products->each(function ($product) { + $order->products->each( function ( $product ) { // every product that aren't refund - if ($product->refunded_products()->count() === 0) { - $history = ProductHistory::where('operation_type', ProductHistory::ACTION_RETURNED) - ->where('order_product_id', $product->id) - ->where('order_id', $product->order_id) + if ( $product->refunded_products()->count() === 0 ) { + $history = ProductHistory::where( 'operation_type', ProductHistory::ACTION_RETURNED ) + ->where( 'order_product_id', $product->id ) + ->where( 'order_id', $product->order_id ) ->first(); - $this->assertTrue(! $history instanceof ProductHistory, __('A stock return was performed while the order was initially voided.')); + $this->assertTrue( ! $history instanceof ProductHistory, __( 'A stock return was performed while the order was initially voided.' ) ); } - }); + } ); } protected function attemptVoidOrder() @@ -2064,7 +2064,7 @@ protected function attemptVoidOrder() /** * @var TestService */ - $testService = app()->make(TestService::class); + $testService = app()->make( TestService::class ); $customer = Customer::get()->random(); /** @@ -2080,9 +2080,9 @@ protected function attemptVoidOrder() ], config: [ 'products' => function () { - return Product::where('STOCK_MANAGEMENT', Product::STOCK_MANAGEMENT_ENABLED) - ->whereRelation('unit_quantities', 'quantity', '>', 100) - ->with('unit_quantities', fn($query) => $query->where('quantity', '>', 100)) + return Product::where( 'STOCK_MANAGEMENT', Product::STOCK_MANAGEMENT_ENABLED ) + ->whereRelation( 'unit_quantities', 'quantity', '>', 100 ) + ->with( 'unit_quantities', fn( $query ) => $query->where( 'quantity', '>', 100 ) ) ->notGrouped() ->notInGroup() ->get(); @@ -2091,51 +2091,51 @@ protected function attemptVoidOrder() date: ns()->date->now() ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $data); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $data ); $orderData = (object) $response->json()[ 'data' ][ 'order' ]; - $order = Order::with([ 'products', 'user' ])->find($orderData->id); + $order = Order::with( [ 'products', 'user' ] )->find( $orderData->id ); /** * Step 1: Void an order before deleting */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders/' . $orderData->id . '/void', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders/' . $orderData->id . '/void', [ 'reason' => 'Testing Voiding', - ]); + ] ); - $order->load([ 'products.product' ]); + $order->load( [ 'products.product' ] ); /** * We'll check if for each product on the order * there was a refund made for the returned goods */ - $order->products->each(function ($product) { + $order->products->each( function ( $product ) { // every product that aren't refund - if ($product->refunded_products()->count() === 0 && $product->product()->first() instanceof Product) { - $history = ProductHistory::where('operation_type', ProductHistory::ACTION_VOID_RETURN) - ->where('order_product_id', $product->id) - ->where('order_id', $product->order_id) + if ( $product->refunded_products()->count() === 0 && $product->product()->first() instanceof Product ) { + $history = ProductHistory::where( 'operation_type', ProductHistory::ACTION_VOID_RETURN ) + ->where( 'order_product_id', $product->id ) + ->where( 'order_id', $product->order_id ) ->first(); - $this->assertTrue($history instanceof ProductHistory, __('No return history was created for a void order product.')); + $this->assertTrue( $history instanceof ProductHistory, __( 'No return history was created for a void order product.' ) ); } - }); + } ); } - protected function attemptRefundOrder($productQuantity, $refundQuantity, $paymentStatus, $message) + protected function attemptRefundOrder( $productQuantity, $refundQuantity, $paymentStatus, $message ) { /** * @var CurrencyService */ - $currency = app()->make(CurrencyService::class); + $currency = app()->make( CurrencyService::class ); $firstFetchCustomer = $this->attemptCreateCustomer(); $product = Product::withStockEnabled() - ->whereRelation('unit_quantities', 'quantity', '>', 100) - ->with([ 'unit_quantities' => fn($query) => $query->where('quantity', '>', 100) ]) + ->whereRelation( 'unit_quantities', 'quantity', '>', 100 ) + ->with( [ 'unit_quantities' => fn( $query ) => $query->where( 'quantity', '>', 100 ) ] ) ->first(); $shippingFees = 150; @@ -2163,7 +2163,7 @@ protected function attemptRefundOrder($productQuantity, $refundQuantity, $paymen ], ]; - $subtotal = collect($products)->map(fn($product) => $product[ 'unit_price' ] * $product[ 'quantity' ])->sum(); + $subtotal = collect( $products )->map( fn( $product ) => $product[ 'unit_price' ] * $product[ 'quantity' ] )->sum(); $netTotal = $subtotal + $shippingFees; /** @@ -2173,18 +2173,18 @@ protected function attemptRefundOrder($productQuantity, $refundQuantity, $paymen $taxes = []; $taxGroup = TaxGroup::first(); - if ($taxGroup instanceof TaxGroup) { - $taxes = $taxGroup->taxes->map(function ($tax) { + if ( $taxGroup instanceof TaxGroup ) { + $taxes = $taxGroup->taxes->map( function ( $tax ) { return [ 'tax_name' => $tax->name, 'tax_id' => $tax->id, 'rate' => $tax->rate, ]; - }); + } ); } - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', [ 'customer_id' => $firstFetchCustomer->id, 'type' => [ 'identifier' => 'takeaway' ], 'discount_type' => 'percentage', @@ -2213,24 +2213,24 @@ protected function attemptRefundOrder($productQuantity, $refundQuantity, $paymen 'value' => $netTotal, ], ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); $responseData = $response->json(); $secondFetchCustomer = $firstFetchCustomer->fresh(); - $purchaseAmount = $currency->define($secondFetchCustomer->purchases_amount) - ->subtractBy($responseData[ 'data' ][ 'order' ][ 'total' ]) + $purchaseAmount = $currency->define( $secondFetchCustomer->purchases_amount ) + ->subtractBy( $responseData[ 'data' ][ 'order' ][ 'total' ] ) ->getRaw(); $this->assertSame( $purchaseAmount, - $currency->getRaw($firstFetchCustomer->purchases_amount), + $currency->getRaw( $firstFetchCustomer->purchases_amount ), sprintf( - __('The purchase amount hasn\'t been updated correctly. Expected %s, got %s'), + __( 'The purchase amount hasn\'t been updated correctly. Expected %s, got %s' ), $secondFetchCustomer->purchases_amount - (float) $responseData[ 'data' ][ 'order' ][ 'total' ], $firstFetchCustomer->purchases_amount ) @@ -2240,16 +2240,16 @@ protected function attemptRefundOrder($productQuantity, $refundQuantity, $paymen * We'll keep original products amounts and quantity * this means we're doing a full refund of price and quantities */ - $responseData[ 'data' ][ 'order' ][ 'products' ] = collect($responseData[ 'data' ][ 'order' ][ 'products' ])->map(function ($product) use ($refundQuantity) { + $responseData[ 'data' ][ 'order' ][ 'products' ] = collect( $responseData[ 'data' ][ 'order' ][ 'products' ] )->map( function ( $product ) use ( $refundQuantity ) { $product[ 'condition' ] = OrderProductRefund::CONDITION_DAMAGED; $product[ 'quantity' ] = $refundQuantity; - $product[ 'description' ] = __('Test : The product wasn\'t properly manufactured, causing external damage to the device during the shipment.'); + $product[ 'description' ] = __( 'Test : The product wasn\'t properly manufactured, causing external damage to the device during the shipment.' ); return $product; - })->toArray(); + } )->toArray(); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders/' . $responseData[ 'data' ][ 'order' ][ 'id' ] . '/refund', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders/' . $responseData[ 'data' ][ 'order' ][ 'id' ] . '/refund', [ 'payment' => [ 'identifier' => 'account-payment', ], @@ -2257,41 +2257,41 @@ protected function attemptRefundOrder($productQuantity, $refundQuantity, $paymen 'total' => $responseData[ 'data' ][ 'order' ][ 'total' ], 'refund_shipping' => true, 'products' => $responseData[ 'data' ][ 'order' ][ 'products' ], - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); $responseData = $response->json(); /** * Assert: We'll check if a refund record was created as a cash flow * for the products linked to the order. */ - collect($responseData[ 'data' ][ 'orderRefund' ][ 'refunded_products' ])->each(function ($product) { - $cashFlow = TransactionHistory::where('order_id', $product[ 'order_id' ]) - ->where('order_product_id', $product[ 'order_product_id' ]) - ->where('operation', TransactionHistory::OPERATION_DEBIT) + collect( $responseData[ 'data' ][ 'orderRefund' ][ 'refunded_products' ] )->each( function ( $product ) { + $cashFlow = TransactionHistory::where( 'order_id', $product[ 'order_id' ] ) + ->where( 'order_product_id', $product[ 'order_product_id' ] ) + ->where( 'operation', TransactionHistory::OPERATION_DEBIT ) ->first(); - $this->assertTrue($cashFlow instanceof TransactionHistory, 'A refund transaction hasn\'t been created after a refund'); - }); + $this->assertTrue( $cashFlow instanceof TransactionHistory, 'A refund transaction hasn\'t been created after a refund' ); + } ); /** * We need to check if the order * is correctly updated after a refund. */ - $order = Order::find($responseData[ 'data' ][ 'order' ][ 'id' ]); + $order = Order::find( $responseData[ 'data' ][ 'order' ][ 'id' ] ); - $this->assertTrue($order->payment_status === $paymentStatus, $message); + $this->assertTrue( $order->payment_status === $paymentStatus, $message ); $thirdFetchCustomer = $secondFetchCustomer->fresh(); if ( - $currency->define($thirdFetchCustomer->purchases_amount) - ->additionateBy($responseData[ 'data' ][ 'orderRefund' ][ 'total' ]) - ->getRaw() !== $currency->getRaw($secondFetchCustomer->purchases_amount)) { + $currency->define( $thirdFetchCustomer->purchases_amount ) + ->additionateBy( $responseData[ 'data' ][ 'orderRefund' ][ 'total' ] ) + ->getRaw() !== $currency->getRaw( $secondFetchCustomer->purchases_amount ) ) { throw new Exception( sprintf( - __('The purchase amount hasn\'t been updated correctly. Expected %s, got %s'), + __( 'The purchase amount hasn\'t been updated correctly. Expected %s, got %s' ), $secondFetchCustomer->purchases_amount, $thirdFetchCustomer->purchases_amount + (float) $responseData[ 'data' ][ 'orderRefund' ][ 'total' ] ) @@ -2301,23 +2301,23 @@ protected function attemptRefundOrder($productQuantity, $refundQuantity, $paymen /** * let's check if a transaction has been created accordingly */ - $transactionAccount = TransactionAccount::find(ns()->option->get('ns_sales_refunds_account')); + $transactionAccount = TransactionAccount::find( ns()->option->get( 'ns_sales_refunds_account' ) ); - if (! $transactionAccount instanceof TransactionAccount) { - throw new Exception(__('An transaction hasn\'t been created after the refund.')); + if ( ! $transactionAccount instanceof TransactionAccount ) { + throw new Exception( __( 'An transaction hasn\'t been created after the refund.' ) ); } $transactionValue = $transactionAccount->histories() - ->where('order_id', $responseData[ 'data' ][ 'order' ][ 'id' ]) - ->sum('value'); + ->where( 'order_id', $responseData[ 'data' ][ 'order' ][ 'id' ] ) + ->sum( 'value' ); - if ((float) $transactionValue != (float) $responseData[ 'data' ][ 'orderRefund' ][ 'total' ]) { - throw new Exception(__('The transaction created after the refund doesn\'t match the order refund total.')); + if ( (float) $transactionValue != (float) $responseData[ 'data' ][ 'orderRefund' ][ 'total' ] ) { + throw new Exception( __( 'The transaction created after the refund doesn\'t match the order refund total.' ) ); } - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); } public function attemptCreateOrderWithInstalment() @@ -2325,52 +2325,52 @@ public function attemptCreateOrderWithInstalment() /** * @var CurrencyService */ - $currency = app()->make(CurrencyService::class); + $currency = app()->make( CurrencyService::class ); /** * @var OrdersService */ - $orderService = app()->make(OrdersService::class); + $orderService = app()->make( OrdersService::class ); $faker = Factory::create(); $products = Product::notGrouped() - ->whereRelation('unit_quantities', 'quantity', '>', 100) - ->with('unit_quantities', fn($query) => $query->where('quantity', '>', 100)) + ->whereRelation( 'unit_quantities', 'quantity', '>', 100 ) + ->with( 'unit_quantities', fn( $query ) => $query->where( 'quantity', '>', 100 ) ) ->get(); - $shippingFees = $faker->randomElement([100, 150, 200, 250, 300, 350, 400]); - $discountRate = $faker->numberBetween(1, 5); + $shippingFees = $faker->randomElement( [100, 150, 200, 250, 300, 350, 400] ); + $discountRate = $faker->numberBetween( 1, 5 ); - $products = $products->map(function ($product) use ($faker) { - $unitElement = $faker->randomElement($product->unit_quantities); + $products = $products->map( function ( $product ) use ( $faker ) { + $unitElement = $faker->randomElement( $product->unit_quantities ); return [ 'product_id' => $product->id, - 'quantity' => $faker->numberBetween(1, 5), // 2, + 'quantity' => $faker->numberBetween( 1, 5 ), // 2, 'unit_price' => $unitElement->sale_price, // 110.8402, 'unit_quantity_id' => $unitElement->id, ]; - }); + } ); /** * testing customer balance */ $customer = $this->attemptCreateCustomer(); - $subtotal = ns()->currency->getRaw($products->map(function ($product) { - return Currency::raw($product[ 'unit_price' ]) * Currency::raw($product[ 'quantity' ]); - })->sum()); + $subtotal = ns()->currency->getRaw( $products->map( function ( $product ) { + return Currency::raw( $product[ 'unit_price' ] ) * Currency::raw( $product[ 'quantity' ] ); + } )->sum() ); $initialTotalInstallment = 2; - $discountValue = $orderService->computeDiscountValues($discountRate, $subtotal); - $total = ns()->currency->getRaw(($subtotal + $shippingFees) - $discountValue); + $discountValue = $orderService->computeDiscountValues( $discountRate, $subtotal ); + $total = ns()->currency->getRaw( ( $subtotal + $shippingFees ) - $discountValue ); - $paymentAmount = ns()->currency->getRaw($total / 2); + $paymentAmount = ns()->currency->getRaw( $total / 2 ); $instalmentSlice = $total / 2; - $instalmentPayment = ns()->currency->getRaw($instalmentSlice); + $instalmentPayment = ns()->currency->getRaw( $instalmentSlice ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', [ 'customer_id' => $customer->id, 'type' => [ 'identifier' => 'takeaway' ], 'discount_percentage' => $discountRate, @@ -2393,14 +2393,14 @@ public function attemptCreateOrderWithInstalment() 'shipping' => $shippingFees, 'total' => $total, 'tendered' => ns()->currency - ->getRaw($total / 2), + ->getRaw( $total / 2 ), 'total_instalments' => $initialTotalInstallment, 'instalments' => [ [ 'date' => ns()->date->toDateTimeString(), 'amount' => $instalmentPayment, ], [ - 'date' => ns()->date->copy()->addDays(2)->toDateTimeString(), + 'date' => ns()->date->copy()->addDays( 2 )->toDateTimeString(), 'amount' => $instalmentPayment, ], ], @@ -2411,146 +2411,146 @@ public function attemptCreateOrderWithInstalment() 'value' => $paymentAmount, ], ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - $responseData = json_decode($response->getContent(), true); + $responseData = json_decode( $response->getContent(), true ); /** * Editing the instalment */ $today = ns()->date->toDateTimeString(); $order = $responseData[ 'data' ][ 'order' ]; - $instalment = OrderInstalment::where('order_id', $order[ 'id' ])->where('paid', false)->get()->random(); - $instalmentAmount = ns()->currency->getRaw($instalment->amount / 2); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('PUT', 'api/orders/' . $order[ 'id' ] . '/instalments/' . $instalment->id, [ + $instalment = OrderInstalment::where( 'order_id', $order[ 'id' ] )->where( 'paid', false )->get()->random(); + $instalmentAmount = ns()->currency->getRaw( $instalment->amount / 2 ); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'PUT', 'api/orders/' . $order[ 'id' ] . '/instalments/' . $instalment->id, [ 'instalment' => [ 'date' => $today, 'amount' => $instalmentAmount, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); $instalment->refresh(); - if ($instalment->date != $today) { - throw new Exception(__('The modification of the instalment has failed')); + if ( $instalment->date != $today ) { + throw new Exception( __( 'The modification of the instalment has failed' ) ); } /** * Add instalment */ - $order = Order::find($order[ 'id' ]); + $order = Order::find( $order[ 'id' ] ); $oldInstlaments = $order->total_instalments; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders/' . $order[ 'id' ] . '/instalments', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders/' . $order[ 'id' ] . '/instalments', [ 'instalment' => [ 'date' => $today, 'amount' => $instalmentAmount, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); $order->refresh(); - if ($initialTotalInstallment === $order->total_instalments) { - throw new Exception(__('The instalment hasn\'t been registered.')); + if ( $initialTotalInstallment === $order->total_instalments ) { + throw new Exception( __( 'The instalment hasn\'t been registered.' ) ); } - if ($oldInstlaments >= $order->total_instalments) { - throw new Exception(__('The instalment hasn\'t been registered.')); + if ( $oldInstlaments >= $order->total_instalments ) { + throw new Exception( __( 'The instalment hasn\'t been registered.' ) ); } - $responseData = json_decode($response->getContent(), true); + $responseData = json_decode( $response->getContent(), true ); /** * Delete Instalment */ - $order = Order::find($order[ 'id' ]); + $order = Order::find( $order[ 'id' ] ); $oldInstlaments = $order->total_instalments; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('DELETE', 'api/orders/' . $order[ 'id' ] . '/instalments/' . $responseData[ 'data' ][ 'instalment' ][ 'id' ]); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'DELETE', 'api/orders/' . $order[ 'id' ] . '/instalments/' . $responseData[ 'data' ][ 'instalment' ][ 'id' ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); $order->refresh(); - if ($oldInstlaments === $order->total_instalments) { - throw new Exception(__('The instalment hasn\'t been deleted.')); + if ( $oldInstlaments === $order->total_instalments ) { + throw new Exception( __( 'The instalment hasn\'t been deleted.' ) ); } /** * restore deleted instalment */ - $order = Order::find($order[ 'id' ]); + $order = Order::find( $order[ 'id' ] ); $oldInstlaments = $order->total_instalments; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders/' . $order[ 'id' ] . '/instalments', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders/' . $order[ 'id' ] . '/instalments', [ 'instalment' => [ 'date' => $today, 'amount' => $instalmentAmount, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); $order->refresh(); - if ($oldInstlaments >= $order->total_instalments) { - throw new Exception(__('The instalment hasn\'t been registered.')); + if ( $oldInstlaments >= $order->total_instalments ) { + throw new Exception( __( 'The instalment hasn\'t been registered.' ) ); } - $responseData = json_decode($response->getContent(), true); + $responseData = json_decode( $response->getContent(), true ); /** * paying instalment */ - OrderInstalment::where('order_id', $order->id) - ->where('paid', false) + OrderInstalment::where( 'order_id', $order->id ) + ->where( 'paid', false ) ->get() - ->each(function ($instalment) use ($order) { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders/' . $order->id . '/instalments/' . $instalment->id . '/pay', [ + ->each( function ( $instalment ) use ( $order ) { + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders/' . $order->id . '/instalments/' . $instalment->id . '/pay', [ 'payment_type' => OrderPayment::PAYMENT_CASH, - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); $instalment->refresh(); - $this->assertTrue($instalment->paid, __('The instalment hasn\'t been paid.')); - }); + $this->assertTrue( $instalment->paid, __( 'The instalment hasn\'t been paid.' ) ); + } ); } protected function attemptCreatePartiallyPaidOrderWithAdjustment() { - $currency = app()->make(CurrencyService::class); + $currency = app()->make( CurrencyService::class ); $customer = $this->attemptCreateCustomer(); $customer->credit_limit_amount = 0; $customer->save(); $product = Product::withStockEnabled() - ->whereRelation('unit_quantities', 'quantity', '>', 500) - ->with('unit_quantities', function ($query) { - $query->where('quantity', '>', 500); - }) + ->whereRelation( 'unit_quantities', 'quantity', '>', 500 ) + ->with( 'unit_quantities', function ( $query ) { + $query->where( 'quantity', '>', 500 ); + } ) ->first(); $shippingFees = 150; $discountRate = 3.5; @@ -2563,10 +2563,10 @@ protected function attemptCreatePartiallyPaidOrderWithAdjustment() ], ]; - $subtotal = collect($products)->map(fn($product) => $product[ 'unit_price' ] * $product[ 'quantity' ])->sum(); + $subtotal = collect( $products )->map( fn( $product ) => $product[ 'unit_price' ] * $product[ 'quantity' ] )->sum(); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', [ 'customer_id' => $customer->id, 'type' => [ 'identifier' => 'takeaway' ], 'discount_type' => 'percentage', @@ -2588,27 +2588,27 @@ protected function attemptCreatePartiallyPaidOrderWithAdjustment() 'products' => $products, 'payments' => [], 'payment_status' => Order::PAYMENT_UNPAID, - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - $responseData = json_decode($response->getContent(), true); + $responseData = json_decode( $response->getContent(), true ); /** * Test 1: Testing Product History * We should test if the records * for partially paid order was created */ - foreach ($products as $product) { - $history = ProductHistory::where('product_id', $product[ 'product_id' ]) - ->where('operation_type', ProductHistory::ACTION_SOLD) - ->where('order_id', $responseData[ 'data' ][ 'order' ][ 'id' ]) + foreach ( $products as $product ) { + $history = ProductHistory::where( 'product_id', $product[ 'product_id' ] ) + ->where( 'operation_type', ProductHistory::ACTION_SOLD ) + ->where( 'order_id', $responseData[ 'data' ][ 'order' ][ 'id' ] ) ->first(); - $this->assertTrue($history instanceof ProductHistory, 'No product history was created after placing the order with partial payment.'); - $this->assertTrue((float) $history->quantity === (float) $product[ 'quantity' ], 'The quantity of the product doesn\'t match the product history quantity.'); + $this->assertTrue( $history instanceof ProductHistory, 'No product history was created after placing the order with partial payment.' ); + $this->assertTrue( (float) $history->quantity === (float) $product[ 'quantity' ], 'The quantity of the product doesn\'t match the product history quantity.' ); } /** @@ -2616,14 +2616,14 @@ protected function attemptCreatePartiallyPaidOrderWithAdjustment() * quantity of the product attached to the order. */ $newProducts = $responseData[ 'data' ][ 'order' ][ 'products' ]; - Arr::set($newProducts, '0.quantity', $newProducts[0][ 'quantity' ] + 1); + Arr::set( $newProducts, '0.quantity', $newProducts[0][ 'quantity' ] + 1 ); $shippingFees = 150; $discountRate = 3.5; - $subtotal = collect($responseData[ 'data' ][ 'order' ][ 'products' ])->map(fn($product) => $product[ 'unit_price' ] * $product[ 'quantity' ])->sum(); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('PUT', 'api/orders/' . $responseData[ 'data' ][ 'order' ][ 'id' ], [ + $subtotal = collect( $responseData[ 'data' ][ 'order' ][ 'products' ] )->map( fn( $product ) => $product[ 'unit_price' ] * $product[ 'quantity' ] )->sum(); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'PUT', 'api/orders/' . $responseData[ 'data' ][ 'order' ][ 'id' ], [ 'customer_id' => $responseData[ 'data' ][ 'order' ][ 'customer_id' ], 'type' => [ 'identifier' => 'takeaway' ], 'discount_type' => 'percentage', @@ -2644,13 +2644,13 @@ protected function attemptCreatePartiallyPaidOrderWithAdjustment() 'shipping' => $shippingFees, 'products' => $newProducts, 'payments' => [], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); $json = $response->json(); /** @@ -2658,13 +2658,13 @@ protected function attemptCreatePartiallyPaidOrderWithAdjustment() * We should test if the records * for partially paid order was created */ - foreach ($products as $product) { - $historyActionAdjustmentSale = ProductHistory::where('product_id', $product[ 'product_id' ]) - ->where('operation_type', ProductHistory::ACTION_ADJUSTMENT_SALE) - ->where('order_id', $responseData[ 'data' ][ 'order' ][ 'id' ]) + foreach ( $products as $product ) { + $historyActionAdjustmentSale = ProductHistory::where( 'product_id', $product[ 'product_id' ] ) + ->where( 'operation_type', ProductHistory::ACTION_ADJUSTMENT_SALE ) + ->where( 'order_id', $responseData[ 'data' ][ 'order' ][ 'id' ] ) ->first(); - $this->assertTrue($historyActionAdjustmentSale instanceof ProductHistory, 'The created history doesn\'t match what should have been created after an order modification.'); + $this->assertTrue( $historyActionAdjustmentSale instanceof ProductHistory, 'The created history doesn\'t match what should have been created after an order modification.' ); $this->assertSame( (float) $historyActionAdjustmentSale->quantity, (float) $json[ 'data' ][ 'order' ][ 'products' ][0][ 'quantity' ] - (float) $responseData[ 'data' ][ 'order' ][ 'products' ][0][ 'quantity' ], @@ -2677,14 +2677,14 @@ protected function attemptCreatePartiallyPaidOrderWithAdjustment() * quantity of the product attached to the order. */ $newProducts = $responseData[ 'data' ][ 'order' ][ 'products' ]; - Arr::set($newProducts, '0.quantity', $newProducts[0][ 'quantity' ] - 2); + Arr::set( $newProducts, '0.quantity', $newProducts[0][ 'quantity' ] - 2 ); $shippingFees = 150; $discountRate = 3.5; - $subtotal = collect($responseData[ 'data' ][ 'order' ][ 'products' ])->map(fn($product) => $product[ 'unit_price' ] * $product[ 'quantity' ])->sum(); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('PUT', 'api/orders/' . $responseData[ 'data' ][ 'order' ][ 'id' ], [ + $subtotal = collect( $responseData[ 'data' ][ 'order' ][ 'products' ] )->map( fn( $product ) => $product[ 'unit_price' ] * $product[ 'quantity' ] )->sum(); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'PUT', 'api/orders/' . $responseData[ 'data' ][ 'order' ][ 'id' ], [ 'customer_id' => $responseData[ 'data' ][ 'order' ][ 'customer_id' ], 'type' => [ 'identifier' => 'takeaway' ], 'discount_type' => 'percentage', @@ -2705,13 +2705,13 @@ protected function attemptCreatePartiallyPaidOrderWithAdjustment() 'shipping' => $shippingFees, 'products' => $newProducts, 'payments' => [], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); $json2 = $response->json(); /** @@ -2719,13 +2719,13 @@ protected function attemptCreatePartiallyPaidOrderWithAdjustment() * We should test if the records * for partially paid order was created */ - foreach ($products as $product) { - $historyActionAdjustmentSale = ProductHistory::where('product_id', $product[ 'product_id' ]) - ->where('operation_type', ProductHistory::ACTION_ADJUSTMENT_RETURN) - ->where('order_id', $responseData[ 'data' ][ 'order' ][ 'id' ]) + foreach ( $products as $product ) { + $historyActionAdjustmentSale = ProductHistory::where( 'product_id', $product[ 'product_id' ] ) + ->where( 'operation_type', ProductHistory::ACTION_ADJUSTMENT_RETURN ) + ->where( 'order_id', $responseData[ 'data' ][ 'order' ][ 'id' ] ) ->first(); - $this->assertTrue($historyActionAdjustmentSale instanceof ProductHistory, 'The created history doesn\'t match what should have been created after an order modification.'); + $this->assertTrue( $historyActionAdjustmentSale instanceof ProductHistory, 'The created history doesn\'t match what should have been created after an order modification.' ); $this->assertSame( (float) $historyActionAdjustmentSale->quantity, (float) $json[ 'data' ][ 'order' ][ 'products' ][0][ 'quantity' ] - (float) $json2[ 'data' ][ 'order' ][ 'products' ][0][ 'quantity' ], @@ -2736,20 +2736,20 @@ protected function attemptCreatePartiallyPaidOrderWithAdjustment() protected function attemptTestRewardSystem() { - $reward = RewardSystem::with('rules')->first(); - $rules = $reward->rules->sortBy('reward')->reverse(); - $timesForOrders = ($reward->target / $rules->first()->reward); + $reward = RewardSystem::with( 'rules' )->first(); + $rules = $reward->rules->sortBy( 'reward' )->reverse(); + $timesForOrders = ( $reward->target / $rules->first()->reward ); $product = Product::withStockEnabled() ->notGrouped() ->notInGroup() - ->with('unit_quantities') + ->with( 'unit_quantities' ) ->get() ->random(); $unit = $product->unit_quantities()->first(); - $product_price = $this->faker->numberBetween($rules->first()->from, $rules->first()->to); + $product_price = $this->faker->numberBetween( $rules->first()->from, $rules->first()->to ); $subtotal = $product_price; $shippingFees = 0; @@ -2762,16 +2762,16 @@ protected function attemptTestRewardSystem() $customer = $this->attemptCreateCustomer(); - if (! $customer->group->reward instanceof RewardSystem) { + if ( ! $customer->group->reward instanceof RewardSystem ) { $customer->group->reward_system_id = $reward->id; $customer->group->save(); } $previousCoupons = $customer->coupons()->count(); - for ($i = 0; $i < $timesForOrders; $i++) { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', [ + for ( $i = 0; $i < $timesForOrders; $i++ ) { + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', [ 'customer_id' => $customer->id, 'type' => [ 'identifier' => 'takeaway' ], 'addresses' => [ @@ -2800,20 +2800,20 @@ protected function attemptTestRewardSystem() 'payments' => [ [ 'identifier' => 'cash-payment', - 'value' => ns()->currency->define($subtotal) - ->additionateBy($shippingFees) + 'value' => ns()->currency->define( $subtotal ) + ->additionateBy( $shippingFees ) ->getRaw(), ], ], - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); } $currentCoupons = $customer->coupons()->count(); - $response->assertJsonPath('data.order.payment_status', Order::PAYMENT_PAID); - $this->assertTrue($previousCoupons < $currentCoupons, __('The coupons count has\'nt changed.')); + $response->assertJsonPath( 'data.order.payment_status', Order::PAYMENT_PAID ); + $this->assertTrue( $previousCoupons < $currentCoupons, __( 'The coupons count has\'nt changed.' ) ); } protected function attemptCouponUsage() @@ -2823,14 +2823,14 @@ protected function attemptCouponUsage() * has been issued by the end of this reward */ $faker = Factory::create(); - $customerCoupon = CustomerCoupon::where('customer_id', '!=', 0)->get()->last(); + $customerCoupon = CustomerCoupon::where( 'customer_id', '!=', 0 )->get()->last(); $customer = $customerCoupon->customer; $products = $this->retreiveProducts(); $shippingFees = 0; - $subtotal = $products->map(fn($product) => $product[ 'unit_price' ] * $product[ 'quantity' ])->sum(); + $subtotal = $products->map( fn( $product ) => $product[ 'unit_price' ] * $product[ 'quantity' ] )->sum(); - if ($customerCoupon instanceof CustomerCoupon) { + if ( $customerCoupon instanceof CustomerCoupon ) { $allCoupons = [ [ 'customer_coupon_id' => $customerCoupon->id, @@ -2839,9 +2839,9 @@ protected function attemptCouponUsage() 'type' => 'percentage_discount', 'code' => $customerCoupon->code, 'limit_usage' => $customerCoupon->coupon->limit_usage, - 'value' => ns()->currency->define($customerCoupon->coupon->discount_value) - ->multiplyBy($subtotal) - ->divideBy(100) + 'value' => ns()->currency->define( $customerCoupon->coupon->discount_value ) + ->multiplyBy( $subtotal ) + ->divideBy( 100 ) ->getRaw(), 'discount_value' => $customerCoupon->coupon->discount_value, 'minimum_cart_value' => $customerCoupon->coupon->minimum_cart_value, @@ -2849,19 +2849,19 @@ protected function attemptCouponUsage() ], ]; - $totalCoupons = collect($allCoupons)->map(fn($coupon) => $coupon[ 'value' ])->sum(); + $totalCoupons = collect( $allCoupons )->map( fn( $coupon ) => $coupon[ 'value' ] )->sum(); } else { $allCoupons = []; $totalCoupons = 0; } $discount = [ - 'type' => $faker->randomElement([ 'percentage', 'flat' ]), + 'type' => $faker->randomElement( [ 'percentage', 'flat' ] ), ]; $dateString = ns()->date->startOfDay()->addHours( - $faker->numberBetween(0, 23) - )->format('Y-m-d H:m:s'); + $faker->numberBetween( 0, 23 ) + )->format( 'Y-m-d H:m:s' ); $orderData = [ 'customer_id' => $customer->id, @@ -2881,9 +2881,9 @@ protected function attemptCouponUsage() 'country' => 'United State Seattle', ], ], - 'author' => ! empty($this->users) // we want to randomise the users - ? collect($this->users)->suffle()->first() - : User::get('id')->pluck('id')->shuffle()->first(), + 'author' => ! empty( $this->users ) // we want to randomise the users + ? collect( $this->users )->suffle()->first() + : User::get( 'id' )->pluck( 'id' )->shuffle()->first(), 'coupons' => $allCoupons, 'subtotal' => $subtotal, 'shipping' => $shippingFees, @@ -2891,18 +2891,18 @@ protected function attemptCouponUsage() 'payments' => [ [ 'identifier' => 'cash-payment', - 'value' => ns()->currency->define(($subtotal + $shippingFees) - $totalCoupons) + 'value' => ns()->currency->define( ( $subtotal + $shippingFees ) - $totalCoupons ) ->getRaw(), ], ], ]; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $orderData); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $orderData ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); /** * check if coupon usage has been updated. @@ -2910,51 +2910,51 @@ protected function attemptCouponUsage() $oldUsage = $customerCoupon->usage; $customerCoupon->refresh(); - $this->assertTrue($oldUsage !== $customerCoupon->usage, __('The coupon usage hasn\'t been updated.')); + $this->assertTrue( $oldUsage !== $customerCoupon->usage, __( 'The coupon usage hasn\'t been updated.' ) ); } private function retreiveProducts() { - $products = Product::whereRelation('unit_quantities', 'quantity', '>', 100) - ->with('unit_quantities', fn($query) => $query->where('quantity', '>', 100)) + $products = Product::whereRelation( 'unit_quantities', 'quantity', '>', 100 ) + ->with( 'unit_quantities', fn( $query ) => $query->where( 'quantity', '>', 100 ) ) ->get() ->shuffle() - ->take(3); + ->take( 3 ); - return $products->map(function ($product) { - $unitElement = $this->faker->randomElement($product->unit_quantities); + return $products->map( function ( $product ) { + $unitElement = $this->faker->randomElement( $product->unit_quantities ); $data = [ 'name' => 'Fees', - 'quantity' => $this->faker->numberBetween(1, 10), + 'quantity' => $this->faker->numberBetween( 1, 10 ), 'unit_price' => $unitElement->sale_price, 'tax_type' => 'inclusive', 'tax_group_id' => 1, 'unit_id' => $unitElement->unit_id, ]; - if ($this->faker->randomElement([ false, true ])) { + if ( $this->faker->randomElement( [ false, true ] ) ) { $data[ 'product_id' ] = $product->id; $data[ 'unit_quantity_id' ] = $unitElement->id; } return $data; - })->filter(function ($product) { + } )->filter( function ( $product ) { return $product[ 'quantity' ] > 0; - }); + } ); } public function attemptDeleteOrderAndCheckProductHistory() { - $testService = app()->make(TestService::class); + $testService = app()->make( TestService::class ); /** * Step 1: we'll set the quantity to be 3 * and we'll create the order with 2 quantity partially paid */ - $product = Product::where('stock_management', Product::STOCK_MANAGEMENT_ENABLED) - ->whereRelation('unit_quantities', 'quantity', '>', 100) - ->with('unit_quantities', fn($query) => $query->where('quantity', '>', 100)) + $product = Product::where( 'stock_management', Product::STOCK_MANAGEMENT_ENABLED ) + ->whereRelation( 'unit_quantities', 'quantity', '>', 100 ) + ->with( 'unit_quantities', fn( $query ) => $query->where( 'quantity', '>', 100 ) ) ->get() ->random(); @@ -2962,7 +2962,7 @@ public function attemptDeleteOrderAndCheckProductHistory() * We'll clear all product history * created for this product */ - ProductHistory::where('product_id', $product->id)->delete(); + ProductHistory::where( 'product_id', $product->id )->delete(); /** * Let's prepare the order to submit that. @@ -2974,46 +2974,46 @@ public function attemptDeleteOrderAndCheckProductHistory() ], config: [ 'allow_quick_products' => false, - 'payments' => function ($details) { + 'payments' => function ( $details ) { return []; // no payment are submitted }, - 'products' => fn() => collect([ - json_decode(json_encode([ + 'products' => fn() => collect( [ + json_decode( json_encode( [ 'name' => $product->name, 'id' => $product->id, 'quantity' => 2, 'unit_price' => 10, 'unit_quantities' => [ $product->unit_quantities->first() ], - ])), - ]), + ] ) ), + ] ), ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $orderDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $orderDetails ); // we need to delete the order and check if the product history has been updated accordingly - $response->assertStatus(200); + $response->assertStatus( 200 ); /** * Step 2: We'll here delete the order */ - $order = Order::find($response->json('data.order.id')); + $order = Order::find( $response->json( 'data.order.id' ) ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('DELETE', 'api/orders/' . $order->id); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'DELETE', 'api/orders/' . $order->id ); - $response->assertStatus(200); + $response->assertStatus( 200 ); /** * Step 3: We'll here check if the product history * has been updated accordingly */ - $hasReturnAction = ProductHistory::where('product_id', $product->id) - ->where('operation_type', ProductHistory::ACTION_RETURNED) + $hasReturnAction = ProductHistory::where( 'product_id', $product->id ) + ->where( 'operation_type', ProductHistory::ACTION_RETURNED ) ->count() > 0; - $this->assertFalse($hasReturnAction, __('The product history has been updated despite the order wasn\'t paid.')); + $this->assertFalse( $hasReturnAction, __( 'The product history has been updated despite the order wasn\'t paid.' ) ); } } diff --git a/tests/Traits/WithProcurementTest.php b/tests/Traits/WithProcurementTest.php index ecef9eeee..198807a97 100644 --- a/tests/Traits/WithProcurementTest.php +++ b/tests/Traits/WithProcurementTest.php @@ -24,49 +24,49 @@ protected function attemptCreateAnUnpaidProcurement() /** * @var TestService */ - $testService = app()->make(TestService::class); + $testService = app()->make( TestService::class ); $provider = Provider::get()->random(); - $currentExpenseValue = TransactionHistory::where('transaction_account_id', ns()->option->get('ns_procurement_cashflow_account'))->sum('value'); - $procurementsDetails = $testService->prepareProcurement(ns()->date->now(), [ + $currentExpenseValue = TransactionHistory::where( 'transaction_account_id', ns()->option->get( 'ns_procurement_cashflow_account' ) )->sum( 'value' ); + $procurementsDetails = $testService->prepareProcurement( ns()->date->now(), [ 'general.payment_status' => 'unpaid', 'general.provider_id' => $provider->id, 'general.delivery_status' => Procurement::DELIVERED, 'total_products' => 10, - ]); + ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/procurements', $procurementsDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/procurements', $procurementsDetails ); - $decode = json_decode($response->getContent(), true); + $decode = json_decode( $response->getContent(), true ); - $newExpensevalue = TransactionHistory::where('transaction_account_id', ns()->option->get('ns_procurement_cashflow_account'))->sum('value'); + $newExpensevalue = TransactionHistory::where( 'transaction_account_id', ns()->option->get( 'ns_procurement_cashflow_account' ) )->sum( 'value' ); $procurement = $decode[ 'data' ][ 'procurement' ]; /** * Step 1: there shouldn't be a change on the expenses */ - $this->assertTrue((float) $currentExpenseValue === (float) $newExpensevalue, 'The expenses has changed for an unpaid procurement.'); - $this->assertTrue((float) $provider->amount_due !== (float) $provider->fresh()->amount_due, 'The due amount for the provider hasn\'t changed, while it should.'); + $this->assertTrue( (float) $currentExpenseValue === (float) $newExpensevalue, 'The expenses has changed for an unpaid procurement.' ); + $this->assertTrue( (float) $provider->amount_due !== (float) $provider->fresh()->amount_due, 'The due amount for the provider hasn\'t changed, while it should.' ); /** * Step 2: update the procurement to paid */ - $currentTransactionValue = TransactionHistory::where('transaction_account_id', ns()->option->get('ns_procurement_cashflow_account'))->sum('value'); + $currentTransactionValue = TransactionHistory::where( 'transaction_account_id', ns()->option->get( 'ns_procurement_cashflow_account' ) )->sum( 'value' ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('GET', 'api/procurements/' . $procurement[ 'id' ] . '/set-as-paid'); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'GET', 'api/procurements/' . $procurement[ 'id' ] . '/set-as-paid' ); $response->assertOk(); - $decode = json_decode($response->getContent(), true); + $decode = json_decode( $response->getContent(), true ); - $newTransaction = TransactionHistory::where('transaction_account_id', ns()->option->get('ns_procurement_cashflow_account'))->sum('value'); - $existingTransaction = TransactionHistory::where('procurement_id', $procurement[ 'id' ])->first(); + $newTransaction = TransactionHistory::where( 'transaction_account_id', ns()->option->get( 'ns_procurement_cashflow_account' ) )->sum( 'value' ); + $existingTransaction = TransactionHistory::where( 'procurement_id', $procurement[ 'id' ] )->first(); - $this->assertEquals(1, TransactionHistory::where('procurement_id', $procurement[ 'id' ])->count(), 'There is more than 1 cash flow created for the same procurement.'); - $this->assertEquals(ns()->currency->getRaw($existingTransaction->value), ns()->currency->getRaw($procurement[ 'cost' ]), 'The cash flow value doesn\'t match the procurement cost.'); - $this->assertTrue($existingTransaction instanceof TransactionHistory, 'No cash flow was created after the procurement was marked as paid.'); - $this->assertTrue((float) $currentTransactionValue !== (float) $newTransaction, 'The transactions hasn\'t changed for the previously unpaid procurement.'); + $this->assertEquals( 1, TransactionHistory::where( 'procurement_id', $procurement[ 'id' ] )->count(), 'There is more than 1 cash flow created for the same procurement.' ); + $this->assertEquals( ns()->currency->getRaw( $existingTransaction->value ), ns()->currency->getRaw( $procurement[ 'cost' ] ), 'The cash flow value doesn\'t match the procurement cost.' ); + $this->assertTrue( $existingTransaction instanceof TransactionHistory, 'No cash flow was created after the procurement was marked as paid.' ); + $this->assertTrue( (float) $currentTransactionValue !== (float) $newTransaction, 'The transactions hasn\'t changed for the previously unpaid procurement.' ); } protected function attemptCreateProcurement() @@ -74,20 +74,20 @@ protected function attemptCreateProcurement() /** * @var TestService */ - $testService = app()->make(TestService::class); + $testService = app()->make( TestService::class ); - $currentExpenseValue = TransactionHistory::where('transaction_account_id', ns()->option->get('ns_procurement_cashflow_account'))->sum('value'); - $procurementsDetails = $testService->prepareProcurement(ns()->date->now(), [ + $currentExpenseValue = TransactionHistory::where( 'transaction_account_id', ns()->option->get( 'ns_procurement_cashflow_account' ) )->sum( 'value' ); + $procurementsDetails = $testService->prepareProcurement( ns()->date->now(), [ 'general.payment_status' => Procurement::PAYMENT_UNPAID, 'general.delivery_status' => Procurement::PENDING, 'total_products' => 10, - ]); + ] ); /** * Query: We store the procurement with an unpaid status. */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/procurements', $procurementsDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/procurements', $procurementsDetails ); $response->assertOk(); @@ -97,8 +97,8 @@ protected function attemptCreateProcurement() * Check: at the point, there shouldn't be any expense recorded. * The procurement is not paid. */ - $existingExpense = TransactionHistory::where('procurement_id', $procurementId)->first(); - $this->assertTrue(! $existingExpense instanceof TransactionHistory, __('A cash flow has been created for an unpaid procurement.')); + $existingExpense = TransactionHistory::where( 'procurement_id', $procurementId )->first(); + $this->assertTrue( ! $existingExpense instanceof TransactionHistory, __( 'A cash flow has been created for an unpaid procurement.' ) ); /** * Query: we store the procurement now with a paid status @@ -109,8 +109,8 @@ protected function attemptCreateProcurement() /** * Query: We store the procurement with an unpaid status. */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('PUT', 'api/procurements/' . $procurementId, $procurementsDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'PUT', 'api/procurements/' . $procurementId, $procurementsDetails ); $response->assertOk(); @@ -120,8 +120,8 @@ protected function attemptCreateProcurement() * Check: at the point, there shouldn't be any expense recorded. * The procurement is not paid. */ - $existingExpense = CashFlow::where('procurement_id', $procurementId)->first(); - $this->assertTrue(! $existingExpense instanceof CashFlow, __('A cash flow has been created for an unpaid procurement.')); + $existingExpense = CashFlow::where( 'procurement_id', $procurementId )->first(); + $this->assertTrue( ! $existingExpense instanceof CashFlow, __( 'A cash flow has been created for an unpaid procurement.' ) ); /** * Query: we store the procurement now with a paid status @@ -129,8 +129,8 @@ protected function attemptCreateProcurement() $procurementsDetails[ 'general' ][ 'payment_status' ] = Procurement::PAYMENT_PAID; $procurementsDetails[ 'general' ][ 'delivery_status' ] = Procurement::DELIVERED; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('PUT', 'api/nexopos/v4/procurements/' . $procurementId, $procurementsDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'PUT', 'api/nexopos/v4/procurements/' . $procurementId, $procurementsDetails ); $response->assertOk(); @@ -139,21 +139,21 @@ protected function attemptCreateProcurement() * and check if the accounts are valid. */ $responseData = $response->json(); - $newExpensevalue = TransactionHistory::where('transaction_account_id', ns()->option->get('ns_procurement_cashflow_account'))->sum('value'); - $existingExpense = TransactionHistory::where('procurement_id', $responseData[ 'data' ][ 'procurement' ][ 'id' ])->first(); + $newExpensevalue = TransactionHistory::where( 'transaction_account_id', ns()->option->get( 'ns_procurement_cashflow_account' ) )->sum( 'value' ); + $existingExpense = TransactionHistory::where( 'procurement_id', $responseData[ 'data' ][ 'procurement' ][ 'id' ] )->first(); - $this->assertTrue($existingExpense instanceof TransactionHistory, __('No cash flow were created for the paid procurement.')); - $this->assertSame((float) $existingExpense[ 'value' ], (float) $responseData[ 'data' ][ 'procurement' ][ 'cost' ], __('The attached procurement value doesn\'t match the transaction value.')); + $this->assertTrue( $existingExpense instanceof TransactionHistory, __( 'No cash flow were created for the paid procurement.' ) ); + $this->assertSame( (float) $existingExpense[ 'value' ], (float) $responseData[ 'data' ][ 'procurement' ][ 'cost' ], __( 'The attached procurement value doesn\'t match the transaction value.' ) ); - $response->assertJson([ 'status' => 'success' ]); + $response->assertJson( [ 'status' => 'success' ] ); /** * We'll check if the expense value * has increased due to the procurement */ $this->assertEquals( - Currency::raw($newExpensevalue), - Currency::raw((float) $currentExpenseValue + (float) $responseData[ 'data' ][ 'procurement' ][ 'cost' ]) + Currency::raw( $newExpensevalue ), + Currency::raw( (float) $currentExpenseValue + (float) $responseData[ 'data' ][ 'procurement' ][ 'cost' ] ) ); } @@ -162,39 +162,39 @@ protected function attemptDeleteProcurementWithConvertedProducts() /** * @var TestService */ - $testService = app()->make(TestService::class); + $testService = app()->make( TestService::class ); /** * @var ProductService */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); /** * @var UnitService */ - $unitService = app()->make(UnitService::class); + $unitService = app()->make( UnitService::class ); - $procurementsDetails = $testService->prepareProcurement(ns()->date->now(), [ + $procurementsDetails = $testService->prepareProcurement( ns()->date->now(), [ 'general.payment_status' => Procurement::PAYMENT_PAID, 'general.delivery_status' => Procurement::DELIVERED, 'total_products' => 5, 'total_unit_quantities' => 1, - ]); + ] ); $product = $procurementsDetails[ 'products' ][0]; - $unit = Unit::with('group')->find($product[ 'unit_id' ]); + $unit = Unit::with( 'group' )->find( $product[ 'unit_id' ] ); // lets get the group excluding the base unit - $group = $unit->group()->with([ - 'units' => function ($query) { - $query->where('base_unit', 0); + $group = $unit->group()->with( [ + 'units' => function ( $query ) { + $query->where( 'base_unit', 0 ); }, - ])->first(); + ] )->first(); // We assign a different not base unit to the product to ensure // while converting, it creates quantities on the base unit $product[ 'unit_id' ] = $group->units->last()->id; - $baseUnit = Unit::where('base_unit', true)->where('group_id', $group->id)->first(); + $baseUnit = Unit::where( 'base_unit', true )->where( 'group_id', $group->id )->first(); // This is the quantity of the product using // the base unit as reference @@ -215,8 +215,8 @@ protected function attemptDeleteProcurementWithConvertedProducts() // Now we'll save the requests and check first if the conversion // succeeded. Then we'll make sure to delete and see if the stock is updated - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/procurements', $procurementsDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/procurements', $procurementsDetails ); $response->assertOk(); $procurement = $response->json()[ 'data' ][ 'procurement' ]; @@ -228,7 +228,7 @@ protected function attemptDeleteProcurementWithConvertedProducts() unit_id: $product[ 'unit_id' ] ); - $this->assertSame($OtherQuantity, $newOtherQuantity, 'The quantity of the source of the conversion has changed. '); + $this->assertSame( $OtherQuantity, $newOtherQuantity, 'The quantity of the source of the conversion has changed. ' ); // The quantity of the destination product must change // after a conversion. @@ -238,45 +238,45 @@ protected function attemptDeleteProcurementWithConvertedProducts() ); $receivedQuantity = $unitService->getConvertedQuantity( - from: Unit::find($product[ 'unit_id' ]), + from: Unit::find( $product[ 'unit_id' ] ), to: $baseUnit, quantity: $product[ 'quantity' ] ); $this->assertTrue( - (float) $receivedQuantity === ns()->currency->define($newBaseQuantity)->subtractBy($baseQuantity)->toFloat(), + (float) $receivedQuantity === ns()->currency->define( $newBaseQuantity )->subtractBy( $baseQuantity )->toFloat(), sprintf( 'The destination hasn\'t receieve the quantity %s it should have received from conversion', $receivedQuantity ) ); - $this->assertTrue($baseQuantity < $newBaseQuantity, 'The destination product inventory hasn\'t changed with the conversion.'); + $this->assertTrue( $baseQuantity < $newBaseQuantity, 'The destination product inventory hasn\'t changed with the conversion.' ); // Let's check if after a conversion there is an history created // an history necessarilly result into a stock. There is no need to test that here - $productHistory = ProductHistory::where('product_id', $product[ 'product_id' ]) - ->where('unit_id', $product[ 'unit_id' ]) - ->where('procurement_id', $procurement[ 'id' ]) - ->where('operation_type', ProductHistory::ACTION_CONVERT_OUT) + $productHistory = ProductHistory::where( 'product_id', $product[ 'product_id' ] ) + ->where( 'unit_id', $product[ 'unit_id' ] ) + ->where( 'procurement_id', $procurement[ 'id' ] ) + ->where( 'operation_type', ProductHistory::ACTION_CONVERT_OUT ) ->first(); - $this->assertTrue($productHistory instanceof ProductHistory); + $this->assertTrue( $productHistory instanceof ProductHistory ); // We'll now check if there has been an incoming conversion // again it's not necessary to test the quantity as the history results in a stock adjustment - $productHistory = ProductHistory::where('product_id', $product[ 'product_id' ]) - ->where('unit_id', $baseUnit->id) - ->where('procurement_id', $procurement[ 'id' ]) - ->where('operation_type', ProductHistory::ACTION_CONVERT_IN) + $productHistory = ProductHistory::where( 'product_id', $product[ 'product_id' ] ) + ->where( 'unit_id', $baseUnit->id ) + ->where( 'procurement_id', $procurement[ 'id' ] ) + ->where( 'operation_type', ProductHistory::ACTION_CONVERT_IN ) ->first(); - $this->assertTrue($productHistory instanceof ProductHistory); + $this->assertTrue( $productHistory instanceof ProductHistory ); // Now we'll delete the procurement to see wether the product // that was converted are removed from inventory - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('DELETE', 'api/procurements/' . $procurement[ 'id' ]); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'DELETE', 'api/procurements/' . $procurement[ 'id' ] ); // We test here if the base item which as received stock // loose it because of the procurement deletion @@ -287,7 +287,7 @@ protected function attemptDeleteProcurementWithConvertedProducts() unit_id: $baseUnit->id ); - $this->assertSame($baseQuantity, $lastNewBaseQuantity, 'The product doesn\'t have the original quantity after deletion'); + $this->assertSame( $baseQuantity, $lastNewBaseQuantity, 'The product doesn\'t have the original quantity after deletion' ); } protected function attemptDeleteProcurement() @@ -295,25 +295,25 @@ protected function attemptDeleteProcurement() /** * @var TestService */ - $testService = app()->make(TestService::class); + $testService = app()->make( TestService::class ); /** * @var ProductService */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); - $procurementsDetails = $testService->prepareProcurement(ns()->date->now(), [ + $procurementsDetails = $testService->prepareProcurement( ns()->date->now(), [ 'general.payment_status' => Procurement::PAYMENT_PAID, 'general.delivery_status' => Procurement::DELIVERED, 'total_products' => 5, 'total_unit_quantities' => 1, - ]); + ] ); /** * We need to retreive the quantities for the products * that will be procured */ - $initialQuantities = collect($procurementsDetails[ 'products' ])->map(function ($product) use ($productService) { + $initialQuantities = collect( $procurementsDetails[ 'products' ] )->map( function ( $product ) use ( $productService ) { return [ 'product_id' => $product[ 'product_id' ], 'unit_id' => $product[ 'unit_id' ], @@ -323,13 +323,13 @@ protected function attemptDeleteProcurement() unit_id: $product[ 'unit_id' ] ), ]; - }); + } ); /** * Query: We store the procurement with an unpaid status. */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/procurements', $procurementsDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/procurements', $procurementsDetails ); $response->assertOk(); @@ -343,17 +343,17 @@ protected function attemptDeleteProcurement() * We'll not compare the previous quantity with the new quantity and see if * that's the result of the addition of the previous quantity plus the procured quantity */ - collect($products)->map(function ($product) use ($productService, $initialQuantities) { + collect( $products )->map( function ( $product ) use ( $productService, $initialQuantities ) { $currentQuantity = $productService->getQuantity( product_id: $product[ 'product_id' ], unit_id: $product[ 'unit_id' ] ); - $initialQuantity = collect($initialQuantities)->filter(fn($q) => (int) $q[ 'product_id' ] === (int) $product[ 'product_id' ] && (int) $q[ 'unit_id' ] === (int) $product[ 'unit_id' ])->first(); + $initialQuantity = collect( $initialQuantities )->filter( fn( $q ) => (int) $q[ 'product_id' ] === (int) $product[ 'product_id' ] && (int) $q[ 'unit_id' ] === (int) $product[ 'unit_id' ] )->first(); $this->assertSame( - ns()->currency->define($currentQuantity)->getRaw(), - ns()->currency->define($initialQuantity[ 'current_quantity' ])->additionateBy($initialQuantity[ 'procured_quantity' ])->getRaw(), + ns()->currency->define( $currentQuantity )->getRaw(), + ns()->currency->define( $initialQuantity[ 'current_quantity' ] )->additionateBy( $initialQuantity[ 'procured_quantity' ] )->getRaw(), sprintf( 'The product "%s" didn\'t has it\'s inventory updated after a procurement. "%s" is the actual value, "%s" was added and "%s" was expected.', $product[ 'name' ], @@ -362,9 +362,9 @@ protected function attemptDeleteProcurement() $initialQuantity[ 'current_quantity' ] + $initialQuantity[ 'procured_quantity' ] ) ); - }); + } ); - $quantities = collect($products)->map(fn($product) => [ + $quantities = collect( $products )->map( fn( $product ) => [ 'product_id' => $product[ 'product_id' ], 'unit_id' => $product[ 'unit_id' ], 'name' => $product[ 'name' ], @@ -373,26 +373,26 @@ protected function attemptDeleteProcurement() product_id: $product[ 'product_id' ], unit_id: $product[ 'unit_id' ] ), - ]); + ] ); /** * lets now delete to see if products * was returned */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('DELETE', 'api/procurements/' . $response->json()[ 'data' ][ 'procurement' ][ 'id' ]); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'DELETE', 'api/procurements/' . $response->json()[ 'data' ][ 'procurement' ][ 'id' ] ); - collect($quantities)->map(function ($product) use ($productService, $initialQuantities) { + collect( $quantities )->map( function ( $product ) use ( $productService, $initialQuantities ) { $currentQuantity = $productService->getQuantity( product_id: $product[ 'product_id' ], unit_id: $product[ 'unit_id' ] ); - $actualProduct = collect($initialQuantities)->filter(fn($q) => (int) $q[ 'product_id' ] === (int) $product[ 'product_id' ] && (int) $q[ 'unit_id' ] === (int) $product[ 'unit_id' ])->first(); + $actualProduct = collect( $initialQuantities )->filter( fn( $q ) => (int) $q[ 'product_id' ] === (int) $product[ 'product_id' ] && (int) $q[ 'unit_id' ] === (int) $product[ 'unit_id' ] )->first(); $this->assertSame( - ns()->currency->define($currentQuantity)->getRaw(), - ns()->currency->define($product[ 'current_quantity' ])->subtractBy($product[ 'procured_quantity' ])->getRaw(), + ns()->currency->define( $currentQuantity )->getRaw(), + ns()->currency->define( $product[ 'current_quantity' ] )->subtractBy( $product[ 'procured_quantity' ] )->getRaw(), sprintf( 'The product "%s" didn\'t has it\'s inventory updated after a procurement deletion. "%s" is the actual value, "%s" was removed and "%s" was expected.', $product[ 'name' ], @@ -401,7 +401,7 @@ protected function attemptDeleteProcurement() $product[ 'current_quantity' ] - $product[ 'procured_quantity' ] ) ); - }); + } ); } protected function attemptCreateProcurementWithConversion() @@ -414,38 +414,38 @@ protected function attemptCreateProcurementWithConversion() /** * @var TaxService $taxService */ - $taxService = app()->make(TaxService::class); + $taxService = app()->make( TaxService::class ); /** * @var ProductService $productService */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); /** * @var UnitService $unitService */ - $unitService = app()->make(UnitService::class); + $unitService = app()->make( UnitService::class ); $products = Product::withStockEnabled() - ->with('unitGroup') - ->take(5) + ->with( 'unitGroup' ) + ->take( 5 ) ->get() - ->map(function ($product) { - return $product->unitGroup->units()->where('base_unit', 0)->limit(1)->get()->map(function ($unit) use ($product) { - $unitQuantity = $product->unit_quantities->filter(fn($q) => (int) $q->unit_id === (int) $unit->id)->first(); + ->map( function ( $product ) { + return $product->unitGroup->units()->where( 'base_unit', 0 )->limit( 1 )->get()->map( function ( $unit ) use ( $product ) { + $unitQuantity = $product->unit_quantities->filter( fn( $q ) => (int) $q->unit_id === (int) $unit->id )->first(); return (object) [ 'unit' => $unit, 'unitQuantity' => $unitQuantity, 'product' => $product, ]; - }); - })->flatten()->map(function ($data) use ($taxService, $taxType, $taxGroup, $margin, $faker) { - $quantity = $faker->numberBetween(10, 99); + } ); + } )->flatten()->map( function ( $data ) use ( $taxService, $taxType, $taxGroup, $margin, $faker ) { + $quantity = $faker->numberBetween( 10, 99 ); - $newUnit = UnitGroup::with([ 'units' => function ($query) use ($data) { - $query->whereNotIn('id', [ $data->unit->id ]); - }])->find($data->unit->group_id)->units->first(); + $newUnit = UnitGroup::with( [ 'units' => function ( $query ) use ( $data ) { + $query->whereNotIn( 'id', [ $data->unit->id ] ); + }] )->find( $data->unit->group_id )->units->first(); return [ 'convert_unit_id' => $newUnit->id, @@ -481,56 +481,56 @@ protected function attemptCreateProcurementWithConversion() ) * $quantity, 'unit_id' => $data->unit->id, ]; - }); + } ); /** * @var TestService */ - $testService = app()->make(TestService::class); + $testService = app()->make( TestService::class ); - $currentExpenseValue = TransactionHistory::where('transaction_account_id', ns()->option->get('ns_procurement_cashflow_account'))->sum('value'); - $procurementsDetails = $testService->prepareProcurement(ns()->date->now(), [ + $currentExpenseValue = TransactionHistory::where( 'transaction_account_id', ns()->option->get( 'ns_procurement_cashflow_account' ) )->sum( 'value' ); + $procurementsDetails = $testService->prepareProcurement( ns()->date->now(), [ 'general.payment_status' => Procurement::PAYMENT_PAID, 'general.delivery_status' => Procurement::DELIVERED, 'products' => $products, - ]); + ] ); /** * Query: We store the procurement with an unpaid status. */ - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/procurements', $procurementsDetails); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/procurements', $procurementsDetails ); $response->assertOk(); $products = $response->json()[ 'data' ][ 'products' ]; - collect($products)->each(function ($product) use ($unitService) { - $productHistory = ProductHistory::where('operation_type', ProductHistory::ACTION_CONVERT_OUT) - ->where('procurement_id', $product[ 'procurement_id' ]) - ->where('procurement_product_id', $product[ 'id' ]) - ->where('quantity', $product[ 'quantity' ]) + collect( $products )->each( function ( $product ) use ( $unitService ) { + $productHistory = ProductHistory::where( 'operation_type', ProductHistory::ACTION_CONVERT_OUT ) + ->where( 'procurement_id', $product[ 'procurement_id' ] ) + ->where( 'procurement_product_id', $product[ 'id' ] ) + ->where( 'quantity', $product[ 'quantity' ] ) ->first(); - $this->assertTrue($productHistory instanceof ProductHistory, 'No product history was created after the conversion.'); + $this->assertTrue( $productHistory instanceof ProductHistory, 'No product history was created after the conversion.' ); /** * check if correct unit was received by the destination unit */ $destinationQuantity = $unitService->getConvertedQuantity( - from: Unit::find($product[ 'unit_id' ]), - to: Unit::find($product[ 'convert_unit_id' ]), + from: Unit::find( $product[ 'unit_id' ] ), + to: Unit::find( $product[ 'convert_unit_id' ] ), quantity: $product[ 'quantity' ] ); - $destinationHistory = ProductHistory::where('operation_type', ProductHistory::ACTION_CONVERT_IN) - ->where('procurement_id', $product[ 'procurement_id' ]) - ->where('procurement_product_id', $product[ 'id' ]) - ->where('unit_id', $product[ 'convert_unit_id' ]) - ->where('quantity', $destinationQuantity) + $destinationHistory = ProductHistory::where( 'operation_type', ProductHistory::ACTION_CONVERT_IN ) + ->where( 'procurement_id', $product[ 'procurement_id' ] ) + ->where( 'procurement_product_id', $product[ 'id' ] ) + ->where( 'unit_id', $product[ 'convert_unit_id' ] ) + ->where( 'quantity', $destinationQuantity ) ->first(); - $this->assertTrue($destinationHistory instanceof ProductHistory, 'No product history was created after the conversion.'); - }); + $this->assertTrue( $destinationHistory instanceof ProductHistory, 'No product history was created after the conversion.' ); + } ); } } diff --git a/tests/Traits/WithProductTest.php b/tests/Traits/WithProductTest.php index 55fd10030..ee3f0e611 100644 --- a/tests/Traits/WithProductTest.php +++ b/tests/Traits/WithProductTest.php @@ -17,7 +17,7 @@ trait WithProductTest { - protected function attemptSetProduct($product_id = null, $form = [], $categories = [], $unitGroup = null, $taxType = 'inclusive', $sale_price = null, $skip_tests = false): array + protected function attemptSetProduct( $product_id = null, $form = [], $categories = [], $unitGroup = null, $taxType = 'inclusive', $sale_price = null, $skip_tests = false ): array { /** * if no form is provided, then @@ -27,26 +27,26 @@ protected function attemptSetProduct($product_id = null, $form = [], $categories /** * @var TaxService */ - $taxService = app()->make(TaxService::class); + $taxService = app()->make( TaxService::class ); - if (empty($form)) { + if ( empty( $form ) ) { $faker = \Faker\Factory::create(); - $taxType = $taxType ?: $faker->randomElement([ 'exclusive', 'inclusive' ]); + $taxType = $taxType ?: $faker->randomElement( [ 'exclusive', 'inclusive' ] ); $unitGroup = $unitGroup ?: UnitGroup::first(); - $sale_price = $sale_price ?: $faker->numberBetween(5, 10); - $categories = $categories ?: ProductCategory::where('parent_id', '>', 0) - ->orWhere('parent_id', null) + $sale_price = $sale_price ?: $faker->numberBetween( 5, 10 ); + $categories = $categories ?: ProductCategory::where( 'parent_id', '>', 0 ) + ->orWhere( 'parent_id', null ) ->get(); - $category = $faker->randomElement($categories); + $category = $faker->randomElement( $categories ); /** * We'll merge with the provided $form * and count category from that. */ $form = $form ?: [ - 'name' => ucwords($faker->word), + 'name' => ucwords( $faker->word ), 'variations' => [ [ '$primary' => true, @@ -57,12 +57,12 @@ protected function attemptSetProduct($product_id = null, $form = [], $categories 'identification' => [ 'barcode' => $faker->ean13(), 'barcode_type' => 'ean13', - 'searchable' => $faker->randomElement([ true, false ]), + 'searchable' => $faker->randomElement( [ true, false ] ), 'category_id' => $category->id, - 'description' => __('Created via tests'), + 'description' => __( 'Created via tests' ), 'product_type' => 'product', - 'type' => $faker->randomElement([ Product::TYPE_MATERIALIZED, Product::TYPE_DEMATERIALIZED ]), - 'sku' => Str::random(15) . '-sku', + 'type' => $faker->randomElement( [ Product::TYPE_MATERIALIZED, Product::TYPE_DEMATERIALIZED ] ), + 'sku' => Str::random( 15 ) . '-sku', 'status' => 'available', 'stock_management' => 'enabled', ], @@ -72,13 +72,13 @@ protected function attemptSetProduct($product_id = null, $form = [], $categories 'tax_type' => $taxType, ], 'units' => [ - 'selling_group' => $unitGroup->units->map(function ($unit) use ($faker, $sale_price) { + 'selling_group' => $unitGroup->units->map( function ( $unit ) use ( $faker, $sale_price ) { return [ 'sale_price_edit' => $sale_price, - 'wholesale_price_edit' => $faker->numberBetween(20, 25), + 'wholesale_price_edit' => $faker->numberBetween( 20, 25 ), 'unit_id' => $unit->id, ]; - })->toArray(), + } )->toArray(), 'unit_group' => $unitGroup->id, ], ], @@ -86,37 +86,37 @@ protected function attemptSetProduct($product_id = null, $form = [], $categories ]; } - if (! $skip_tests) { - $currentCategory = ProductCategory::find($form[ 'variations' ][0][ 'identification' ][ 'category_id' ]); + if ( ! $skip_tests ) { + $currentCategory = ProductCategory::find( $form[ 'variations' ][0][ 'identification' ][ 'category_id' ] ); $sale_price = $form[ 'variations' ][0][ 'units' ][ 'selling_group' ][0][ 'sale_price_edit' ]; $categoryProductCount = $currentCategory->products()->count(); } $response = $this - ->withSession($this->app[ 'session' ]->all()) - ->json($product_id === null ? 'POST' : 'PUT', '/api/products/' . ($product_id !== null ? $product_id : ''), $form); + ->withSession( $this->app[ 'session' ]->all() ) + ->json( $product_id === null ? 'POST' : 'PUT', '/api/products/' . ( $product_id !== null ? $product_id : '' ), $form ); - $response->assertStatus(200); + $response->assertStatus( 200 ); - if (! $skip_tests) { - $result = json_decode($response->getContent(), true); - $taxGroup = TaxGroup::find(1); + if ( ! $skip_tests ) { + $result = json_decode( $response->getContent(), true ); + $taxGroup = TaxGroup::find( 1 ); - $response->assertStatus(200); + $response->assertStatus( 200 ); - if ($taxType === 'exclusive') { - $this->assertEquals((float) data_get($result, 'data.product.unit_quantities.0.sale_price'), $taxService->getPriceWithTaxUsingGroup($taxType, $taxGroup, $sale_price)); - $this->assertEquals((float) data_get($result, 'data.product.unit_quantities.0.sale_price_with_tax'), $taxService->getPriceWithTaxUsingGroup($taxType, $taxGroup, $sale_price)); - $this->assertEquals((float) data_get($result, 'data.product.unit_quantities.0.sale_price_without_tax'), $taxService->getPriceWithoutTaxUsingGroup($taxType, $taxGroup, $sale_price)); + if ( $taxType === 'exclusive' ) { + $this->assertEquals( (float) data_get( $result, 'data.product.unit_quantities.0.sale_price' ), $taxService->getPriceWithTaxUsingGroup( $taxType, $taxGroup, $sale_price ) ); + $this->assertEquals( (float) data_get( $result, 'data.product.unit_quantities.0.sale_price_with_tax' ), $taxService->getPriceWithTaxUsingGroup( $taxType, $taxGroup, $sale_price ) ); + $this->assertEquals( (float) data_get( $result, 'data.product.unit_quantities.0.sale_price_without_tax' ), $taxService->getPriceWithoutTaxUsingGroup( $taxType, $taxGroup, $sale_price ) ); } else { - $this->assertEquals((float) data_get($result, 'data.product.unit_quantities.0.sale_price', 0), $taxService->getPriceWithTaxUsingGroup($taxType, $taxGroup, $sale_price)); - $this->assertEquals((float) data_get($result, 'data.product.unit_quantities.0.sale_price_with_tax', 0), $taxService->getPriceWithTaxUsingGroup($taxType, $taxGroup, $sale_price)); - $this->assertEquals((float) data_get($result, 'data.product.unit_quantities.0.sale_price_without_tax', 0), $taxService->getPriceWithoutTaxUsingGroup($taxType, $taxGroup, $sale_price)); + $this->assertEquals( (float) data_get( $result, 'data.product.unit_quantities.0.sale_price', 0 ), $taxService->getPriceWithTaxUsingGroup( $taxType, $taxGroup, $sale_price ) ); + $this->assertEquals( (float) data_get( $result, 'data.product.unit_quantities.0.sale_price_with_tax', 0 ), $taxService->getPriceWithTaxUsingGroup( $taxType, $taxGroup, $sale_price ) ); + $this->assertEquals( (float) data_get( $result, 'data.product.unit_quantities.0.sale_price_without_tax', 0 ), $taxService->getPriceWithoutTaxUsingGroup( $taxType, $taxGroup, $sale_price ) ); } $currentCategory->refresh(); - $this->assertEquals($categoryProductCount + 1, $currentCategory->total_items, 'The category total items hasn\'t increased'); + $this->assertEquals( $categoryProductCount + 1, $currentCategory->total_items, 'The category total items hasn\'t increased' ); } return $response->json(); @@ -132,15 +132,15 @@ protected function attemptChangeProductCategory() * see his total_items count updated. */ $oldCategoryID = $result[ 'data' ][ 'product' ][ 'category_id' ]; - $oldCategory = ProductCategory::find($oldCategoryID); - $newCategory = ProductCategory::where('id', '!=', $oldCategoryID) - ->where('parent_id', null) + $oldCategory = ProductCategory::find( $oldCategoryID ); + $newCategory = ProductCategory::where( 'id', '!=', $oldCategoryID ) + ->where( 'parent_id', null ) ->first(); $productCrud = new ProductCrud; $productData = $result[ 'data' ][ 'product' ]; - $product = Product::find($productData[ 'id' ]); - $newForm = $productCrud->getExtractedProductForm($product); + $product = Product::find( $productData[ 'id' ] ); + $newForm = $productCrud->getExtractedProductForm( $product ); /** * We'll new update @@ -180,13 +180,13 @@ protected function attemptChangeProductCategory() ); } - protected function orderProduct($name, $unit_price, $quantity, $unitQuantityId = null, $productId = null, $discountType = null, $discountPercentage = null, $taxType = null, $taxGroupId = null) + protected function orderProduct( $name, $unit_price, $quantity, $unitQuantityId = null, $productId = null, $discountType = null, $discountPercentage = null, $taxType = null, $taxGroupId = null ) { - $product = $productId !== null ? Product::with('unit_quantities')->find($productId) : Product::with('unit_quantities')->withStockEnabled()->whereHas('unit_quantities', fn($query) => $query->where('quantity', '>', $quantity))->get()->random(); - $unitQuantity = $unitQuantityId !== null ? $product->unit_quantities->filter(fn($unitQuantity) => (int) $unitQuantity->id === (int) $unitQuantityId)->first() : $product->unit_quantities->first(); + $product = $productId !== null ? Product::with( 'unit_quantities' )->find( $productId ) : Product::with( 'unit_quantities' )->withStockEnabled()->whereHas( 'unit_quantities', fn( $query ) => $query->where( 'quantity', '>', $quantity ) )->get()->random(); + $unitQuantity = $unitQuantityId !== null ? $product->unit_quantities->filter( fn( $unitQuantity ) => (int) $unitQuantity->id === (int) $unitQuantityId )->first() : $product->unit_quantities->first(); - ! $product instanceof Product ? throw new Exception('The provided product is not valid.') : null; - ! $unitQuantity instanceof ProductUnitQuantity ? throw new Exception('The provided unit quantity is not valid.') : null; + ! $product instanceof Product ? throw new Exception( 'The provided product is not valid.' ) : null; + ! $unitQuantity instanceof ProductUnitQuantity ? throw new Exception( 'The provided unit quantity is not valid.' ) : null; return [ 'name' => $name, @@ -212,34 +212,34 @@ protected function attemptDeleteProducts() * * @var ProductService */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); - $product = Product::find($result[ 'data' ][ 'product' ][ 'id' ]); + $product = Product::find( $result[ 'data' ][ 'product' ][ 'id' ] ); $category = $product->category; $totalItems = $category->total_items; - $this->assertTrue($product->unit_quantities()->count() > 0, 'The created product is missing unit quantities.'); + $this->assertTrue( $product->unit_quantities()->count() > 0, 'The created product is missing unit quantities.' ); - $productService->deleteProduct($product); + $productService->deleteProduct( $product ); $category->refresh(); - $this->assertTrue(ProductUnitQuantity::where('product_id', $product->id)->count() === 0, 'The product unit quantities wheren\'t deleted.'); - $this->assertTrue(ProductHistory::where('product_id', $product->id)->count() === 0, 'The product history wasn\'t deleted.'); - $this->assertTrue($category->total_items === $totalItems - 1, 'The category total items wasn\'t updated after the deletion.'); + $this->assertTrue( ProductUnitQuantity::where( 'product_id', $product->id )->count() === 0, 'The product unit quantities wheren\'t deleted.' ); + $this->assertTrue( ProductHistory::where( 'product_id', $product->id )->count() === 0, 'The product history wasn\'t deleted.' ); + $this->assertTrue( $category->total_items === $totalItems - 1, 'The category total items wasn\'t updated after the deletion.' ); } - public function attemptDeleteProduct($product) + public function attemptDeleteProduct( $product ) { /** * @var ProductService */ - $productService = app()->make(ProductService::class); + $productService = app()->make( ProductService::class ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('DELETE', '/api/crud/ns.products/' . $product->id); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'DELETE', '/api/crud/ns.products/' . $product->id ); - $response->assertStatus(200); + $response->assertStatus( 200 ); } protected function attemptCreateGroupedProduct() @@ -247,29 +247,29 @@ protected function attemptCreateGroupedProduct() /** * @var CurrencyService */ - $currency = app()->make(CurrencyService::class); + $currency = app()->make( CurrencyService::class ); $faker = \Faker\Factory::create(); /** * @var TaxService */ - $taxService = app()->make(TaxService::class); - $taxType = $faker->randomElement([ 'exclusive', 'inclusive' ]); + $taxService = app()->make( TaxService::class ); + $taxType = $faker->randomElement( [ 'exclusive', 'inclusive' ] ); $unitGroup = UnitGroup::first(); - $sale_price = $faker->numberBetween(5, 10); - $categories = ProductCategory::where('parent_id', '>', 0) - ->orWhere('parent_id', null) + $sale_price = $faker->numberBetween( 5, 10 ); + $categories = ProductCategory::where( 'parent_id', '>', 0 ) + ->orWhere( 'parent_id', null ) ->get() - ->map(fn($cat) => $cat->id) + ->map( fn( $cat ) => $cat->id ) ->toArray(); - $products = Product::where('type', Product::TYPE_DEMATERIALIZED) + $products = Product::where( 'type', Product::TYPE_DEMATERIALIZED ) ->notInGroup() ->notGrouped() - ->limit(2) + ->limit( 2 ) ->get() - ->map(function ($product) use ($faker) { + ->map( function ( $product ) use ( $faker ) { /** * @var ProductUnitQuantity $unitQuantity */ @@ -280,15 +280,15 @@ protected function attemptCreateGroupedProduct() 'unit_quantity_id' => $unitQuantityID, 'product_id' => $product->id, 'unit_id' => $unitQuantity->unit->id, - 'quantity' => $faker->randomNumber(1), + 'quantity' => $faker->randomNumber( 1 ), 'sale_price' => $unitQuantity->sale_price, ]; - }) + } ) ->toArray(); $response = $this - ->withSession($this->app[ 'session' ]->all()) - ->json('POST', '/api/products/', [ + ->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', '/api/products/', [ 'name' => $faker->word, 'variations' => [ [ @@ -300,12 +300,12 @@ protected function attemptCreateGroupedProduct() 'identification' => [ 'barcode' => $faker->ean13(), 'barcode_type' => 'ean13', - 'searchable' => $faker->randomElement([ true, false ]), - 'category_id' => $faker->randomElement($categories), - 'description' => __('Created via tests'), + 'searchable' => $faker->randomElement( [ true, false ] ), + 'category_id' => $faker->randomElement( $categories ), + 'description' => __( 'Created via tests' ), 'product_type' => 'product', 'type' => Product::TYPE_GROUPED, - 'sku' => Str::random(15) . '-sku', + 'sku' => Str::random( 15 ) . '-sku', 'status' => 'available', 'stock_management' => 'enabled', ], @@ -318,41 +318,41 @@ protected function attemptCreateGroupedProduct() 'tax_type' => $taxType, ], 'units' => [ - 'selling_group' => $unitGroup->units->map(function ($unit) use ($faker, $sale_price) { + 'selling_group' => $unitGroup->units->map( function ( $unit ) use ( $faker, $sale_price ) { return [ 'sale_price_edit' => $sale_price, - 'wholesale_price_edit' => $faker->numberBetween(20, 25), + 'wholesale_price_edit' => $faker->numberBetween( 20, 25 ), 'unit_id' => $unit->id, ]; - }), + } ), 'unit_group' => $unitGroup->id, ], ], ], - ]); + ] ); - $result = json_decode($response->getContent(), true); - $taxGroup = TaxGroup::find(1); + $result = json_decode( $response->getContent(), true ); + $taxGroup = TaxGroup::find( 1 ); - if ($taxType === 'exclusive') { - $this->assertEquals((float) data_get($result, 'data.product.unit_quantities.0.sale_price'), $taxService->getPriceWithTaxUsingGroup($taxType, $taxGroup, $sale_price)); - $this->assertEquals((float) data_get($result, 'data.product.unit_quantities.0.sale_price_with_tax'), $taxService->getPriceWithTaxUsingGroup($taxType, $taxGroup, $sale_price)); - $this->assertEquals((float) data_get($result, 'data.product.unit_quantities.0.sale_price_without_tax'), $taxService->getPriceWithoutTaxUsingGroup($taxType, $taxGroup, $sale_price)); + if ( $taxType === 'exclusive' ) { + $this->assertEquals( (float) data_get( $result, 'data.product.unit_quantities.0.sale_price' ), $taxService->getPriceWithTaxUsingGroup( $taxType, $taxGroup, $sale_price ) ); + $this->assertEquals( (float) data_get( $result, 'data.product.unit_quantities.0.sale_price_with_tax' ), $taxService->getPriceWithTaxUsingGroup( $taxType, $taxGroup, $sale_price ) ); + $this->assertEquals( (float) data_get( $result, 'data.product.unit_quantities.0.sale_price_without_tax' ), $taxService->getPriceWithoutTaxUsingGroup( $taxType, $taxGroup, $sale_price ) ); } else { - $this->assertEquals((float) data_get($result, 'data.product.unit_quantities.0.sale_price', 0), $taxService->getPriceWithTaxUsingGroup($taxType, $taxGroup, $sale_price)); - $this->assertEquals((float) data_get($result, 'data.product.unit_quantities.0.sale_price_with_tax', 0), $taxService->getPriceWithTaxUsingGroup($taxType, $taxGroup, $sale_price)); - $this->assertEquals((float) data_get($result, 'data.product.unit_quantities.0.sale_price_without_tax', 0), $taxService->getPriceWithoutTaxUsingGroup($taxType, $taxGroup, $sale_price)); + $this->assertEquals( (float) data_get( $result, 'data.product.unit_quantities.0.sale_price', 0 ), $taxService->getPriceWithTaxUsingGroup( $taxType, $taxGroup, $sale_price ) ); + $this->assertEquals( (float) data_get( $result, 'data.product.unit_quantities.0.sale_price_with_tax', 0 ), $taxService->getPriceWithTaxUsingGroup( $taxType, $taxGroup, $sale_price ) ); + $this->assertEquals( (float) data_get( $result, 'data.product.unit_quantities.0.sale_price_without_tax', 0 ), $taxService->getPriceWithoutTaxUsingGroup( $taxType, $taxGroup, $sale_price ) ); } /** * We'll test if the subitems were correctly stored. */ - $product = Product::find($result[ 'data' ][ 'product' ][ 'id' ]); + $product = Product::find( $result[ 'data' ][ 'product' ][ 'id' ] ); - $this->assertTrue(count($products) === $product->sub_items->count(), 'Sub items aren\'t matching'); + $this->assertTrue( count( $products ) === $product->sub_items->count(), 'Sub items aren\'t matching' ); - $matched = $product->sub_items->filter(function ($subItem) use ($products) { - return collect($products)->filter(function ($_product) use ($subItem) { + $matched = $product->sub_items->filter( function ( $subItem ) use ( $products ) { + return collect( $products )->filter( function ( $_product ) use ( $subItem ) { $argument = ( (int) $_product[ 'unit_id' ] === (int) $subItem->unit_id && (int) $_product[ 'product_id' ] === (int) $subItem->product_id && @@ -362,92 +362,92 @@ protected function attemptCreateGroupedProduct() ); return $argument; - })->isNotEmpty(); - }); + } )->isNotEmpty(); + } ); - $this->assertTrue($matched->count() === count($products), 'Sub items accuracy failed'); + $this->assertTrue( $matched->count() === count( $products ), 'Sub items accuracy failed' ); - $response->assertStatus(200); + $response->assertStatus( 200 ); } protected function attemptAdjustmentByDeletion() { - $productUnitQuantity = ProductUnitQuantity::where('quantity', '>', 10) - ->with('product') - ->whereRelation('product', function ($query) { - return $query->where('stock_management', Product::STOCK_MANAGEMENT_ENABLED); - }) + $productUnitQuantity = ProductUnitQuantity::where( 'quantity', '>', 10 ) + ->with( 'product' ) + ->whereRelation( 'product', function ( $query ) { + return $query->where( 'stock_management', Product::STOCK_MANAGEMENT_ENABLED ); + } ) ->first(); - $response = $this->json('POST', '/api/products/adjustments', [ + $response = $this->json( 'POST', '/api/products/adjustments', [ 'products' => [ [ 'id' => $productUnitQuantity->product->id, 'adjust_action' => 'deleted', 'name' => $productUnitQuantity->product->name, 'adjust_unit' => $productUnitQuantity, - 'adjust_reason' => __('Performing a test adjustment'), + 'adjust_reason' => __( 'Performing a test adjustment' ), 'adjust_quantity' => 1, ], ], - ]); + ] ); - $response->assertJsonPath('status', 'success'); + $response->assertJsonPath( 'status', 'success' ); } protected function attemptTestSearchable() { $searchable = Product::searchable()->first(); - if ($searchable instanceof Product) { + if ( $searchable instanceof Product ) { $response = $this - ->withSession($this->app[ 'session' ]->all()) - ->json('GET', '/api/categories/pos/' . $searchable->category_id); + ->withSession( $this->app[ 'session' ]->all() ) + ->json( 'GET', '/api/categories/pos/' . $searchable->category_id ); - $response = json_decode($response->getContent(), true); - $exists = collect($response[ 'products' ]) - ->filter(fn($product) => (int) $product[ 'id' ] === (int) $searchable->id) + $response = json_decode( $response->getContent(), true ); + $exists = collect( $response[ 'products' ] ) + ->filter( fn( $product ) => (int) $product[ 'id' ] === (int) $searchable->id ) ->count() > 0; - return $this->assertTrue($exists, __('Searchable product cannot be found on category.')); + return $this->assertTrue( $exists, __( 'Searchable product cannot be found on category.' ) ); } - return $this->assertTrue(true); + return $this->assertTrue( true ); } protected function attemptNotSearchableAreSearchable() { - $searchable = Product::searchable(false)->first(); + $searchable = Product::searchable( false )->first(); - if ($searchable instanceof Product) { + if ( $searchable instanceof Product ) { $response = $this - ->withSession($this->app[ 'session' ]->all()) - ->json('GET', '/api/categories/pos/' . $searchable->category_id); + ->withSession( $this->app[ 'session' ]->all() ) + ->json( 'GET', '/api/categories/pos/' . $searchable->category_id ); - $response = json_decode($response->getContent(), true); - $exists = collect($response[ 'products' ]) - ->filter(fn($product) => (int) $product[ 'id' ] === (int) $searchable->id) + $response = json_decode( $response->getContent(), true ); + $exists = collect( $response[ 'products' ] ) + ->filter( fn( $product ) => (int) $product[ 'id' ] === (int) $searchable->id ) ->count() === 0; - return $this->assertTrue($exists, __('Not searchable product cannot be found on category.')); + return $this->assertTrue( $exists, __( 'Not searchable product cannot be found on category.' ) ); } - return $this->assertTrue(true); + return $this->assertTrue( true ); } protected function attemptDecreaseStockCount() { - $productQuantity = ProductUnitQuantity::where('quantity', '>', 0)->first(); + $productQuantity = ProductUnitQuantity::where( 'quantity', '>', 0 )->first(); - if (! $productQuantity instanceof ProductUnitQuantity) { - throw new Exception(__('Unable to find a product to perform this test.')); + if ( ! $productQuantity instanceof ProductUnitQuantity ) { + throw new Exception( __( 'Unable to find a product to perform this test.' ) ); } $product = $productQuantity->product; - foreach (ProductHistory::STOCK_REDUCE as $action) { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/products/adjustments', [ + foreach ( ProductHistory::STOCK_REDUCE as $action ) { + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/products/adjustments', [ 'products' => [ [ 'adjust_action' => $action, @@ -459,17 +459,17 @@ protected function attemptDecreaseStockCount() 'adjust_quantity' => 1, ], ], - ]); + ] ); $oldQuantity = $productQuantity->quantity; $productQuantity->refresh(); - $response->assertStatus(200); + $response->assertStatus( 200 ); $this->assertTrue( $oldQuantity - $productQuantity->quantity === (float) 1, sprintf( - __('The stock modification : %s hasn\'t made any change'), + __( 'The stock modification : %s hasn\'t made any change' ), $action ) ); @@ -478,19 +478,19 @@ protected function attemptDecreaseStockCount() protected function attemptGroupedProductStockAdjustment() { - $productQuantity = ProductUnitQuantity::whereHas('product', function ($query) { + $productQuantity = ProductUnitQuantity::whereHas( 'product', function ( $query ) { $query->grouped(); - }) + } ) ->first(); - if (! $productQuantity instanceof ProductUnitQuantity) { - throw new Exception(__('Unable to find a grouped product to perform this test.')); + if ( ! $productQuantity instanceof ProductUnitQuantity ) { + throw new Exception( __( 'Unable to find a grouped product to perform this test.' ) ); } $product = $productQuantity->product; - $response = $this->withSession($this->app['session']->all()) - ->json('POST', 'api/products/adjustments', [ + $response = $this->withSession( $this->app['session']->all() ) + ->json( 'POST', 'api/products/adjustments', [ 'products' => [ [ 'name' => $product->name, @@ -503,30 +503,30 @@ protected function attemptGroupedProductStockAdjustment() 'adjust_quantity' => 1, ], ], - ]); + ] ); - $response->assertStatus(500); - $response->assertSeeText('Adjusting grouped product inventory must result of a create, update, delete sale operation.'); + $response->assertStatus( 500 ); + $response->assertSeeText( 'Adjusting grouped product inventory must result of a create, update, delete sale operation.' ); } protected function attemptProductStockAdjustment() { - $productQuantity = ProductUnitQuantity::where('quantity', '>', 0) - ->whereHas('product', function ($query) { + $productQuantity = ProductUnitQuantity::where( 'quantity', '>', 0 ) + ->whereHas( 'product', function ( $query ) { $query->notGrouped() ->withStockEnabled(); - }) + } ) ->first(); - if (! $productQuantity instanceof ProductUnitQuantity) { - throw new Exception(__('Unable to find a product to perform this test.')); + if ( ! $productQuantity instanceof ProductUnitQuantity ) { + throw new Exception( __( 'Unable to find a product to perform this test.' ) ); } $product = $productQuantity->product; - foreach (ProductHistory::STOCK_INCREASE as $action) { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/products/adjustments', [ + foreach ( ProductHistory::STOCK_INCREASE as $action ) { + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/products/adjustments', [ 'products' => [ [ 'adjust_action' => $action, @@ -538,17 +538,17 @@ protected function attemptProductStockAdjustment() 'adjust_quantity' => 10, ], ], - ]); + ] ); $oldQuantity = $productQuantity->quantity; $productQuantity->refresh(); - $response->assertStatus(200); + $response->assertStatus( 200 ); $this->assertTrue( $productQuantity->quantity - $oldQuantity === (float) 10, sprintf( - __('The stock modification : %s hasn\'t made any change'), + __( 'The stock modification : %s hasn\'t made any change' ), $action ) ); @@ -557,16 +557,16 @@ protected function attemptProductStockAdjustment() protected function attemptSetStockCount() { - $productQuantity = ProductUnitQuantity::where('quantity', '>', 0)->first(); + $productQuantity = ProductUnitQuantity::where( 'quantity', '>', 0 )->first(); - if (! $productQuantity instanceof ProductUnitQuantity) { - throw new Exception(__('Unable to find a product to perform this test.')); + if ( ! $productQuantity instanceof ProductUnitQuantity ) { + throw new Exception( __( 'Unable to find a product to perform this test.' ) ); } $product = $productQuantity->product; - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/products/adjustments', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/products/adjustments', [ 'products' => [ [ 'adjust_action' => 'set', @@ -578,21 +578,77 @@ protected function attemptSetStockCount() 'adjust_quantity' => 10, ], ], - ]); + ] ); $oldQuantity = $productQuantity->quantity; $productQuantity->refresh(); - $response->assertStatus(200); + $response->assertStatus( 200 ); $this->assertTrue( $productQuantity->quantity === (float) 10, sprintf( - __('The stock modification : %s hasn\'t made any change'), + __( 'The stock modification : %s hasn\'t made any change' ), 'set' ) ); - $this->assertNotEquals($oldQuantity, $productQuantity->quantity); + $this->assertNotEquals( $oldQuantity, $productQuantity->quantity ); + } + + protected function attemptProductConversion() + { + /** + * @var ProductService + */ + $productService = app()->make( ProductService::class ); + + $product = Product::where( 'type', Product::TYPE_MATERIALIZED ) + ->has( 'unit_quantities', '>=', 2 ) + ->with( 'unit_quantities.unit' ) + ->first(); + + $firstUnitQuantity = $product->unit_quantities->first(); + $secondUnitQuantity = $product->unit_quantities->last(); + + /** + * We'll provide some quantity to ensure + * it doesn't fails because of the missing quantity. + */ + $firstUnitQuantity->quantity = 1000; + $firstUnitQuantity->save(); + + /** + * We'll create a conversion that should fail + * because it will cause a float value + */ + $response = $this->performConversionRequest( $product, [ + 'from' => $firstUnitQuantity->unit->id, + 'to' => $secondUnitQuantity->unit->id, + 'quantity' => 1, + ] ); + + $response->assertStatus( 403 ); + + /** + * We'll create a conversion that should pass + */ + $response = $this->performConversionRequest( $product, [ + 'from' => $firstUnitQuantity->unit->id, + 'to' => $secondUnitQuantity->unit->id, + 'quantity' => $secondUnitQuantity->unit->value, + ] ); + + $response->assertStatus( 200 ); + + $refreshedSecondUnitQuantity = $secondUnitQuantity->fresh(); + + $this->assertSame( $secondUnitQuantity->quantity + 1, $refreshedSecondUnitQuantity->quantity ); + } + + private function performConversionRequest( Product $product, $data ) + { + return $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/products/' . $product->id . '/units/conversion', $data ); } } diff --git a/tests/Traits/WithProviderTest.php b/tests/Traits/WithProviderTest.php index 772c9353f..bfb4d665e 100644 --- a/tests/Traits/WithProviderTest.php +++ b/tests/Traits/WithProviderTest.php @@ -6,13 +6,13 @@ trait WithProviderTest { protected function attemptCreateProvider() { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.providers', [ - 'first_name' => __('Computers'), - ]); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.providers', [ + 'first_name' => __( 'Computers' ), + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); } } diff --git a/tests/Traits/WithReportTest.php b/tests/Traits/WithReportTest.php index fe5cfda4c..d7407288b 100644 --- a/tests/Traits/WithReportTest.php +++ b/tests/Traits/WithReportTest.php @@ -22,11 +22,11 @@ protected function attemptSeeReports() '/dashboard/reports/payment-types', ]; - foreach ($reports as $report) { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('GET', $report); + foreach ( $reports as $report ) { + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'GET', $report ); - $response->assertStatus(200); + $response->assertStatus( 200 ); } } @@ -35,10 +35,10 @@ protected function attemptRefreshReportForPastDays() /** * @var ReportService */ - $service = app()->make(ReportService::class); - $startInterval = ns()->date->clone()->subDays($this->totalDaysInterval)->subDay(); + $service = app()->make( ReportService::class ); + $startInterval = ns()->date->clone()->subDays( $this->totalDaysInterval )->subDay(); - for ($i = 0; $i <= $this->totalDaysInterval; $i++) { + for ( $i = 0; $i <= $this->totalDaysInterval; $i++ ) { $today = $startInterval->addDay()->clone(); $service->computeDayReport( @@ -47,21 +47,21 @@ protected function attemptRefreshReportForPastDays() ); } - $this->assertTrue(true); + $this->assertTrue( true ); } private function getSaleReport() { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/reports/sale-report', [ + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/reports/sale-report', [ 'startDate' => ns()->date->startOfDay()->toDateTimeString(), 'endDate' => ns()->date->endOfDay()->toDateTimeString(), 'type' => 'categories_report', - ]); + ] ); $response->assertOk(); - return json_decode($response->getContent()); + return json_decode( $response->getContent() ); } protected function attemptTestSaleReport() @@ -72,60 +72,60 @@ protected function attemptTestSaleReport() /** * Step 1: attempt simple sale */ - $this->processOrders([], function ($response, $responseData) use ($report, &$newReport) { + $this->processOrders( [], function ( $response, $responseData ) use ( $report, &$newReport ) { $newReport = $this->getSaleReport(); $this->assertEquals( - ns()->currency->getRaw($report->summary->total), - ns()->currency->getRaw($newReport->summary->total - $responseData[ 'data' ][ 'order' ][ 'total' ]), + ns()->currency->getRaw( $report->summary->total ), + ns()->currency->getRaw( $newReport->summary->total - $responseData[ 'data' ][ 'order' ][ 'total' ] ), 'Order total doesn\'t match the report total.' ); $this->assertEquals( - ns()->currency->getRaw($report->summary->sales_discounts), - ns()->currency->getRaw($newReport->summary->sales_discounts - $responseData[ 'data' ][ 'order' ][ 'discount' ]), + ns()->currency->getRaw( $report->summary->sales_discounts ), + ns()->currency->getRaw( $newReport->summary->sales_discounts - $responseData[ 'data' ][ 'order' ][ 'discount' ] ), 'Discount total doesn\'t match the report discount.' ); $this->assertEquals( - ns()->currency->getRaw($report->summary->subtotal), - ns()->currency->getRaw($newReport->summary->subtotal - $responseData[ 'data' ][ 'order' ][ 'subtotal' ]), + ns()->currency->getRaw( $report->summary->subtotal ), + ns()->currency->getRaw( $newReport->summary->subtotal - $responseData[ 'data' ][ 'order' ][ 'subtotal' ] ), 'The subtotal doesn\'t match the report subtotal.' ); $this->assertEquals( - ns()->currency->getRaw($report->summary->sales_taxes), - ns()->currency->getRaw($newReport->summary->sales_taxes - $responseData[ 'data' ][ 'order' ][ 'tax_value' ]), + ns()->currency->getRaw( $report->summary->sales_taxes ), + ns()->currency->getRaw( $newReport->summary->sales_taxes - $responseData[ 'data' ][ 'order' ][ 'tax_value' ] ), 'The taxes doesn\'t match the report taxes.' ); - }); + } ); $report = $this->getSaleReport(); /** * Step 1: attempt sale with taxes */ - $this->processOrders([ + $this->processOrders( [ 'tax_type' => 'inclusive', - 'taxes' => TaxGroup::with('taxes') + 'taxes' => TaxGroup::with( 'taxes' ) ->first() ->taxes() ->get() - ->map(function ($tax) { + ->map( function ( $tax ) { return [ 'tax_name' => $tax->name, 'tax_id' => $tax->id, 'rate' => $tax->rate, ]; - }), - ], function ($response, $responseData) use ($newReport) { + } ), + ], function ( $response, $responseData ) use ( $newReport ) { $freshOne = $this->getSaleReport(); - $this->assertEquals($freshOne->summary->total, ns()->currency->define($newReport->summary->total)->additionateBy($responseData[ 'data' ][ 'order' ][ 'total' ])->toFloat(), 'New report doesn\'t reflect the sale that was made.'); - $this->assertEquals($freshOne->summary->sales_taxes, ns()->currency->define($newReport->summary->sales_taxes)->additionateBy($responseData[ 'data' ][ 'order' ][ 'tax_value' ])->toFloat(), 'The taxes doesn\'t reflect the sale that was made.'); - $this->assertEquals($freshOne->summary->subtotal, ns()->currency->define($newReport->summary->subtotal)->additionateBy($responseData[ 'data' ][ 'order' ][ 'subtotal' ])->toFloat(), 'The subtotal doesn\'t reflect the sale that was made.'); - $this->assertEquals($freshOne->summary->shipping, ns()->currency->define($newReport->summary->shipping)->additionateBy($responseData[ 'data' ][ 'order' ][ 'shipping' ])->toFloat(), 'The subtotal doesn\'t reflect the sale that was made.'); - $this->assertEquals($freshOne->summary->sales_discounts, ns()->currency->define($newReport->summary->sales_discounts)->additionateBy($responseData[ 'data' ][ 'order' ][ 'discount' ])->toFloat(), 'The discount doesn\'t reflect the sale that was made.'); - }); + $this->assertEquals( $freshOne->summary->total, ns()->currency->define( $newReport->summary->total )->additionateBy( $responseData[ 'data' ][ 'order' ][ 'total' ] )->toFloat(), 'New report doesn\'t reflect the sale that was made.' ); + $this->assertEquals( $freshOne->summary->sales_taxes, ns()->currency->define( $newReport->summary->sales_taxes )->additionateBy( $responseData[ 'data' ][ 'order' ][ 'tax_value' ] )->toFloat(), 'The taxes doesn\'t reflect the sale that was made.' ); + $this->assertEquals( $freshOne->summary->subtotal, ns()->currency->define( $newReport->summary->subtotal )->additionateBy( $responseData[ 'data' ][ 'order' ][ 'subtotal' ] )->toFloat(), 'The subtotal doesn\'t reflect the sale that was made.' ); + $this->assertEquals( $freshOne->summary->shipping, ns()->currency->define( $newReport->summary->shipping )->additionateBy( $responseData[ 'data' ][ 'order' ][ 'shipping' ] )->toFloat(), 'The subtotal doesn\'t reflect the sale that was made.' ); + $this->assertEquals( $freshOne->summary->sales_discounts, ns()->currency->define( $newReport->summary->sales_discounts )->additionateBy( $responseData[ 'data' ][ 'order' ][ 'discount' ] )->toFloat(), 'The discount doesn\'t reflect the sale that was made.' ); + } ); } } diff --git a/tests/Traits/WithRoleTest.php b/tests/Traits/WithRoleTest.php index 89cd11fcd..210d32683 100644 --- a/tests/Traits/WithRoleTest.php +++ b/tests/Traits/WithRoleTest.php @@ -11,62 +11,62 @@ trait WithRoleTest public function attemptCreateReservedRole() { - $role = Role::whereIn('namespace', [ + $role = Role::whereIn( 'namespace', [ Role::ADMIN, Role::STOREADMIN, Role::STORECASHIER, Role::USER, - ])->first(); + ] )->first(); - $response = $this->submitRequest(( new RolesCrud )->getNamespace(), [ + $response = $this->submitRequest( ( new RolesCrud )->getNamespace(), [ 'name' => $role->name, 'general' => [ 'namespace' => $role->namespace, ], - ]); + ] ); /** * The attempt should fail. */ - $response->assertStatus(500); + $response->assertStatus( 500 ); } public function attemptEditReservedRole() { - $role = Role::whereIn('namespace', [ + $role = Role::whereIn( 'namespace', [ Role::ADMIN, Role::STOREADMIN, Role::STORECASHIER, Role::USER, - ])->first(); + ] )->first(); - $this->submitRequest(( new RolesCrud )->getNamespace() . '/' . $role->id, [ + $this->submitRequest( ( new RolesCrud )->getNamespace() . '/' . $role->id, [ 'name' => $role->name, 'general' => [ 'namespace' => $role->namespace, 'dashid' => $role->dashid, ], - ], 'PUT'); + ], 'PUT' ); $newRole = $role->fresh(); - $this->assertTrue($role->namespace === $newRole->namespace, 'The namespace has been updated.'); + $this->assertTrue( $role->namespace === $newRole->namespace, 'The namespace has been updated.' ); } public function attemptDeleteReservedRole() { - $role = Role::whereIn('namespace', [ + $role = Role::whereIn( 'namespace', [ Role::ADMIN, Role::STOREADMIN, Role::STORECASHIER, Role::USER, - ])->first(); + ] )->first(); - $response = $this->submitRequest(( new RolesCrud )->getNamespace() . '/' . $role->id, [], 'DELETE'); + $response = $this->submitRequest( ( new RolesCrud )->getNamespace() . '/' . $role->id, [], 'DELETE' ); /** * A system role can't be deleted */ - $response->assertStatus(500); + $response->assertStatus( 500 ); } } diff --git a/tests/Traits/WithTaxService.php b/tests/Traits/WithTaxService.php index 8ab98e60f..266e7a716 100644 --- a/tests/Traits/WithTaxService.php +++ b/tests/Traits/WithTaxService.php @@ -6,12 +6,12 @@ trait WithTaxService { - public function getPercentageOf($value, $rate) + public function getPercentageOf( $value, $rate ) { /** * @var TaxService $taxService */ - $taxService = app()->make(TaxService::class); + $taxService = app()->make( TaxService::class ); return $taxService->getPercentageOf( value: $value, diff --git a/tests/Traits/WithTaxTest.php b/tests/Traits/WithTaxTest.php index 786c249d4..8a2f0a173 100644 --- a/tests/Traits/WithTaxTest.php +++ b/tests/Traits/WithTaxTest.php @@ -15,37 +15,37 @@ protected function attemptProductTaxVariable() /** * @var OrdersService */ - $orderService = app()->make(OrdersService::class); + $orderService = app()->make( OrdersService::class ); /** * @var TaxService */ - $taxService = app()->make(TaxService::class); - $taxGroup = TaxGroup::with('taxes')->first(); + $taxService = app()->make( TaxService::class ); + $taxGroup = TaxGroup::with( 'taxes' )->first(); - ns()->option->set('ns_pos_vat', self::TAX_PRODUCTS_VAVT); - ns()->option->set('ns_pos_tax_group', $taxGroup->id); - ns()->option->set('ns_pos_tax_type', 'exclusive'); + ns()->option->set( 'ns_pos_vat', self::TAX_PRODUCTS_VAVT ); + ns()->option->set( 'ns_pos_tax_group', $taxGroup->id ); + ns()->option->set( 'ns_pos_tax_type', 'exclusive' ); $testService = new TestService; - $details = $testService->prepareOrder(ns()->date->now(), [ + $details = $testService->prepareOrder( ns()->date->now(), [ 'tax_group_id' => $taxGroup->id, 'tax_type' => 'exclusive', - 'taxes' => $taxGroup->taxes->map(function ($tax) { + 'taxes' => $taxGroup->taxes->map( function ( $tax ) { $tax->tax_name = $tax->name; $tax->tax_id = $tax->id; return $tax; - }), - ]); + } ), + ] ); - $this->assertCheck($details, function ($order) use ($orderService) { + $this->assertCheck( $details, function ( $order ) use ( $orderService ) { $this->assertEquals( - (float) $orderService->getOrderProductsTaxes(Order::find($order[ 'id' ])), + (float) $orderService->getOrderProductsTaxes( Order::find( $order[ 'id' ] ) ), (float) $order[ 'products_tax_value' ], - __('The product tax is not valid.') + __( 'The product tax is not valid.' ) ); - }); + } ); } protected function attemptTaxProductVat() @@ -53,179 +53,179 @@ protected function attemptTaxProductVat() /** * @var OrdersService */ - $orderService = app()->make(OrdersService::class); - $taxGroup = TaxGroup::with('taxes')->first(); + $orderService = app()->make( OrdersService::class ); + $taxGroup = TaxGroup::with( 'taxes' )->first(); - ns()->option->set('ns_pos_vat', self::TAX_PRODUCTS_VAT); - ns()->option->set('ns_pos_tax_group', $taxGroup->id); - ns()->option->set('ns_pos_tax_type', 'exclusive'); + ns()->option->set( 'ns_pos_vat', self::TAX_PRODUCTS_VAT ); + ns()->option->set( 'ns_pos_tax_group', $taxGroup->id ); + ns()->option->set( 'ns_pos_tax_type', 'exclusive' ); $testService = new TestService; - $details = $testService->prepareOrder(ns()->date->now(), [ + $details = $testService->prepareOrder( ns()->date->now(), [ 'tax_group_id' => $taxGroup->id, 'tax_type' => 'exclusive', - 'taxes' => $taxGroup->taxes->map(function ($tax) { + 'taxes' => $taxGroup->taxes->map( function ( $tax ) { $tax->tax_name = $tax->name; $tax->tax_id = $tax->id; return $tax; - }), - ]); + } ), + ] ); - $this->assertCheck($details, function ($order) use ($orderService) { + $this->assertCheck( $details, function ( $order ) use ( $orderService ) { $this->assertEquals( - (float) $orderService->getOrderProductsTaxes(Order::find($order[ 'id' ])), + (float) $orderService->getOrderProductsTaxes( Order::find( $order[ 'id' ] ) ), (float) $order[ 'products_tax_value' ], - __('The product tax is not valid.') + __( 'The product tax is not valid.' ) ); - }); + } ); } protected function attemptFlatExpense() { - $taxGroup = TaxGroup::with('taxes')->first(); + $taxGroup = TaxGroup::with( 'taxes' )->first(); - ns()->option->set('ns_pos_vat', self::TAX_FLAT); - ns()->option->set('ns_pos_tax_group', $taxGroup->id); - ns()->option->set('ns_pos_tax_type', 'exclusive'); + ns()->option->set( 'ns_pos_vat', self::TAX_FLAT ); + ns()->option->set( 'ns_pos_tax_group', $taxGroup->id ); + ns()->option->set( 'ns_pos_tax_type', 'exclusive' ); $testService = new TestService; - $details = $testService->prepareOrder(ns()->date->now(), [ + $details = $testService->prepareOrder( ns()->date->now(), [ 'tax_group_id' => $taxGroup->id, 'tax_type' => 'exclusive', - 'taxes' => $taxGroup->taxes->map(function ($tax) { + 'taxes' => $taxGroup->taxes->map( function ( $tax ) { $tax->tax_name = $tax->name; $tax->tax_id = $tax->id; return $tax; - }), - ]); + } ), + ] ); - $this->assertCheck($details); + $this->assertCheck( $details ); } protected function attemptInclusiveTax() { - $taxGroup = TaxGroup::with('taxes')->first(); + $taxGroup = TaxGroup::with( 'taxes' )->first(); $testService = new TestService; - $details = $testService->prepareOrder(ns()->date->now(), [ + $details = $testService->prepareOrder( ns()->date->now(), [ 'tax_group_id' => $taxGroup->id, 'tax_type' => 'inclusive', - 'taxes' => $taxGroup->taxes->map(function ($tax) { + 'taxes' => $taxGroup->taxes->map( function ( $tax ) { $tax->tax_name = $tax->name; $tax->tax_id = $tax->id; return $tax; - }), - ]); + } ), + ] ); - $this->assertCheck($details); + $this->assertCheck( $details ); } protected function attemptExclusiveTax() { - $taxGroup = TaxGroup::with('taxes')->first(); + $taxGroup = TaxGroup::with( 'taxes' )->first(); $testService = new TestService; - $details = $testService->prepareOrder(ns()->date->now(), [ + $details = $testService->prepareOrder( ns()->date->now(), [ 'tax_group_id' => $taxGroup->id, 'tax_type' => 'exclusive', - 'taxes' => $taxGroup->taxes->map(function ($tax) { + 'taxes' => $taxGroup->taxes->map( function ( $tax ) { $tax->tax_name = $tax->name; $tax->tax_id = $tax->id; return $tax; - }), - ]); + } ), + ] ); - $this->assertCheck($details); + $this->assertCheck( $details ); } protected function attemptVariableVat() { - $taxGroup = TaxGroup::with('taxes')->first(); + $taxGroup = TaxGroup::with( 'taxes' )->first(); - ns()->option->set('ns_pos_vat', self::TAX_VARIABLE); - ns()->option->set('ns_pos_tax_group', $taxGroup->id); - ns()->option->set('ns_pos_tax_type', 'exclusive'); + ns()->option->set( 'ns_pos_vat', self::TAX_VARIABLE ); + ns()->option->set( 'ns_pos_tax_group', $taxGroup->id ); + ns()->option->set( 'ns_pos_tax_type', 'exclusive' ); $testService = new TestService; - $details = $testService->prepareOrder(ns()->date->now(), [ + $details = $testService->prepareOrder( ns()->date->now(), [ 'tax_group_id' => $taxGroup->id, 'tax_type' => 'exclusive', - 'taxes' => $taxGroup->taxes->map(function ($tax) { + 'taxes' => $taxGroup->taxes->map( function ( $tax ) { $tax->tax_name = $tax->name; $tax->tax_id = $tax->id; return $tax->toArray(); - }), - ]); + } ), + ] ); - $this->assertCheck($details); + $this->assertCheck( $details ); } - private function assertCheck($details, callable $callback = null) + private function assertCheck( $details, ?callable $callback = null ) { /** * @var TaxService */ - $taxService = app()->make(TaxService::class); + $taxService = app()->make( TaxService::class ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/orders', $details); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/orders', $details ); - $response->assertStatus(200); + $response->assertStatus( 200 ); - $json = json_decode($response->getContent(), true); + $json = json_decode( $response->getContent(), true ); $order = $json[ 'data' ][ 'order' ]; - $expectedTax = $taxService->getComputedTaxGroupValue($order[ 'tax_type' ], $order[ 'tax_group_id' ], ns()->currency->define($order[ 'subtotal' ])->subtractBy($order[ 'discount' ])->getRaw()); + $expectedTax = $taxService->getComputedTaxGroupValue( $order[ 'tax_type' ], $order[ 'tax_group_id' ], ns()->currency->define( $order[ 'subtotal' ] )->subtractBy( $order[ 'discount' ] )->getRaw() ); - if ($callback === null) { - $this->assertEquals((float) $expectedTax, (float) $order[ 'tax_value' ], __('The computed taxes aren\'t correct.')); + if ( $callback === null ) { + $this->assertEquals( (float) $expectedTax, (float) $order[ 'tax_value' ], __( 'The computed taxes aren\'t correct.' ) ); } else { - $callback($order); + $callback( $order ); } } protected function attemptCreateTaxGroup() { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', '/api/crud/ns.taxes-groups', [ - 'name' => __('GST'), - ]); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', '/api/crud/ns.taxes-groups', [ + 'name' => __( 'GST' ), + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); } protected function attemptCreateTax() { $group = TaxGroup::get()->shuffle()->first(); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.taxes', [ - 'name' => __('SGST'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.taxes', [ + 'name' => __( 'SGST' ), 'general' => [ 'rate' => 5.5, 'tax_group_id' => $group->id, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.taxes', [ - 'name' => __('CGST'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.taxes', [ + 'name' => __( 'CGST' ), 'general' => [ 'rate' => 6.5, 'tax_group_id' => $group->id, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); } } diff --git a/tests/Traits/WithTransactionTest.php b/tests/Traits/WithTransactionTest.php index 4b404f941..ec1f66cd1 100644 --- a/tests/Traits/WithTransactionTest.php +++ b/tests/Traits/WithTransactionTest.php @@ -11,35 +11,35 @@ trait WithTransactionTest { protected function attemptCreateTransactionAccount() { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/transactions-accounts', [ - 'name' => __('Exploitation Expenses'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/transactions-accounts', [ + 'name' => __( 'Exploitation Expenses' ), 'author' => Auth::id(), 'account' => '000010', 'operation' => TransactionHistory::OPERATION_DEBIT, - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/transactions-accounts', [ - 'name' => __('Employee Salaries'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/transactions-accounts', [ + 'name' => __( 'Employee Salaries' ), 'author' => Auth::id(), 'account' => '000011', 'operation' => TransactionHistory::OPERATION_DEBIT, - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/transactions-accounts', [ - 'name' => __('Random Expenses'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/transactions-accounts', [ + 'name' => __( 'Random Expenses' ), 'author' => Auth::id(), 'account' => '000012', 'operation' => TransactionHistory::OPERATION_DEBIT, - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); } protected function attemptCreateTransaction() @@ -47,52 +47,52 @@ protected function attemptCreateTransaction() /** * Assuming expense category is "Exploitation Expenses" */ - $transactionAccount = TransactionAccount::find(1); + $transactionAccount = TransactionAccount::find( 1 ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.transactions', [ - 'name' => __('Store Rent'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.transactions', [ + 'name' => __( 'Store Rent' ), 'general' => [ 'active' => true, 'value' => 1500, 'recurring' => false, 'account_id' => $transactionAccount->id, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); /** * Assuming expense category is "Exploitation Expenses" */ - $transactionAccount = TransactionAccount::find(1); + $transactionAccount = TransactionAccount::find( 1 ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.transactions', [ - 'name' => __('Material Delivery'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.transactions', [ + 'name' => __( 'Material Delivery' ), 'general' => [ 'active' => true, 'value' => 300, 'recurring' => false, 'account_id' => $transactionAccount->id, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); /** * Assuming expense category is "Exploitation Expenses" */ - $transactionAccount = TransactionAccount::find(2); + $transactionAccount = TransactionAccount::find( 2 ); $role = Role::get()->shuffle()->first(); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.transactions', [ - 'name' => __('Store Rent'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.transactions', [ + 'name' => __( 'Store Rent' ), 'general' => [ 'active' => true, 'value' => 1500, @@ -101,12 +101,12 @@ protected function attemptCreateTransaction() 'occurrence' => 'month_starts', 'group_id' => $role->id, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); } } diff --git a/tests/Traits/WithUnitTest.php b/tests/Traits/WithUnitTest.php index 4dde3e3e5..9536769c8 100644 --- a/tests/Traits/WithUnitTest.php +++ b/tests/Traits/WithUnitTest.php @@ -8,64 +8,64 @@ trait WithUnitTest { protected function attemptCreateUnitGroup() { - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.units-groups', [ - 'name' => __('Liquids'), - ]); + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.units-groups', [ + 'name' => __( 'Liquids' ), + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - $response->assertStatus(200); + $response->assertStatus( 200 ); } protected function attemptCreateUnit() { $group = UnitGroup::get()->shuffle()->first(); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.units', [ - 'name' => __('Piece'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.units', [ + 'name' => __( 'Piece' ), 'general' => [ 'base_unit' => true, 'value' => 1, 'identifier' => 'piece', 'group_id' => $group->id, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.units', [ - 'name' => __('Dozen'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.units', [ + 'name' => __( 'Dozen' ), 'general' => [ 'base_unit' => false, 'value' => 12, 'identifier' => 'dozen', 'group_id' => $group->id, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); - $response = $this->withSession($this->app[ 'session' ]->all()) - ->json('POST', 'api/crud/ns.units', [ - 'name' => __('Thirty'), + $response = $this->withSession( $this->app[ 'session' ]->all() ) + ->json( 'POST', 'api/crud/ns.units', [ + 'name' => __( 'Thirty' ), 'general' => [ 'base_unit' => false, 'value' => 30, 'identifier' => 'thirty', 'group_id' => $group->id, ], - ]); + ] ); - $response->assertJson([ + $response->assertJson( [ 'status' => 'success', - ]); + ] ); } }